From 24b3e8c0ae1c9722b54951f6d5962bafd85f40b6 Mon Sep 17 00:00:00 2001 From: adustm Date: Tue, 23 Aug 2016 15:18:18 +0200 Subject: [PATCH 01/89] Enable TLS entropy in targets.json for STM32L4 and STM32L0 products --- targets/targets.json | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/targets/targets.json b/targets/targets.json index 5b265b6bff8..eadc38d79f3 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -919,8 +919,7 @@ "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "IAR"], "inherits": ["Target"], "detect_code": ["0760"], - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], - "release_versions": ["2", "5"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "TRNG"], "device_name": "STM32L073RZ" }, "NUCLEO_L152RE": { @@ -943,8 +942,8 @@ "supported_toolchains": ["ARM", "uARM", "IAR", "GCC_ARM"], "inherits": ["Target"], "detect_code": ["0770"], - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "CAN", "STDIO_MESSAGES"], - "release_versions": ["2", "5"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "CAN", "STDIO_MESSAGES", "TRNG"], + "device_name" : "STM32L432KC" }, "NUCLEO_L476RG": { @@ -955,8 +954,7 @@ "supported_toolchains": ["ARM", "uARM", "IAR", "GCC_ARM"], "inherits": ["Target"], "detect_code": ["0765"], - "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], - "release_versions": ["2", "5"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "TRNG"], "device_name": "stm32l476rg" }, "STM32F3XX": { @@ -1100,8 +1098,7 @@ "extra_labels": ["STM", "STM32L4", "STM32L476VG"], "supported_toolchains": ["ARM", "uARM", "IAR", "GCC_ARM"], "detect_code": ["0820"], - "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], - "release_versions": ["2", "5"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "TRNG"], "device_name": "stm32l476vg" }, "MTS_MDOT_F405RG": { From 0c7a2b5f58ae79469c66e1f9ffdd2a1d4c42af3b Mon Sep 17 00:00:00 2001 From: adustm Date: Thu, 25 Aug 2016 11:52:41 +0200 Subject: [PATCH 02/89] Add random generator for stm32L0 + stm32L4 --- .../TARGET_STM32L0/entropy_hardware_poll.c | 83 +++++++++++++++++++ .../TARGET_STM32L4/entropy_hardware_poll.c | 80 ++++++++++++++++++ targets/targets.json | 2 +- 3 files changed, 164 insertions(+), 1 deletion(-) create mode 100644 hal/targets/hal/TARGET_STM/TARGET_STM32L0/entropy_hardware_poll.c create mode 100644 hal/targets/hal/TARGET_STM/TARGET_STM32L4/entropy_hardware_poll.c diff --git a/hal/targets/hal/TARGET_STM/TARGET_STM32L0/entropy_hardware_poll.c b/hal/targets/hal/TARGET_STM/TARGET_STM32L0/entropy_hardware_poll.c new file mode 100644 index 00000000000..611a5e3ff1e --- /dev/null +++ b/hal/targets/hal/TARGET_STM/TARGET_STM32L0/entropy_hardware_poll.c @@ -0,0 +1,83 @@ +/* + * Hardware entropy collector for the STM32L0 family + * + * Copyright (C) 2006-2016, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + +#if defined (TARGET_STM32L052xx) || defined (TARGET_STM32L053xx) || defined (TARGET_STM32L062xx) || defined (TARGET_STM32L063xx) || \ + defined (TARGET_STM32L072xx) || defined (TARGET_STM32L073xx) || defined (TARGET_STM32L082xx) || defined (TARGET_STM32L083xx) + +#include +#include "cmsis.h" + +/* RNG handler declaration */ +RNG_HandleTypeDef RngHandle; + + +/** rng_get_byte + * @brief Get one byte of entropy from the RNG, assuming it is up and running. + * @param pointer to the hardware generated random byte. + */ +static void rng_get_byte( unsigned char *byte ) +{ + *byte = (unsigned char)HAL_RNG_GetRandomNumber(&RngHandle); +} + + +/** mbedtls_hardware_poll + * @brief Get len bytes of entropy from the hardware RNG. + * @param data pointer will be NULL + * @param output pointer to the random generated bytes buffer + * @param len input is the requested length of bytes to be generated + * @param olen is the pointer to the length of bytes effectively generated + * @returns 0 if the generation went well. -1 in case of error + */ +int mbedtls_hardware_poll( void *data, unsigned char *output, size_t len, size_t *olen ) +{ + int ret; + ((void) data); + + /* RNG Peripheral clock enable */ + __HAL_RCC_RNG_CLK_ENABLE(); + + /* Initialize RNG instance */ + RngHandle.Instance = RNG; + HAL_RNG_Init(&RngHandle); + + /* Get Random byte */ + for( uint32_t i = 0; i < len; i++ ){ + rng_get_byte( output + i ); + + } + *olen = len; + /* Just be extra sure that we didn't do it wrong */ + if( ( __HAL_RNG_GET_FLAG(&RngHandle, (RNG_FLAG_CECS|RNG_FLAG_SECS)) ) != 0 ) { + ret = -1; + } else { + ret = 0; + } + /*Disable the RNG peripheral */ + HAL_RNG_DeInit(&RngHandle); + /* RNG Peripheral clock disable - assume we're the only users of RNG */ + __HAL_RCC_RNG_CLK_DISABLE(); + + + return( ret ); +} +#endif /* STM32L073RZ */ + diff --git a/hal/targets/hal/TARGET_STM/TARGET_STM32L4/entropy_hardware_poll.c b/hal/targets/hal/TARGET_STM/TARGET_STM32L4/entropy_hardware_poll.c new file mode 100644 index 00000000000..cdae897347b --- /dev/null +++ b/hal/targets/hal/TARGET_STM/TARGET_STM32L4/entropy_hardware_poll.c @@ -0,0 +1,80 @@ +/* + * Hardware entropy collector for the STM32L4 family + * + * Copyright (C) 2006-2016, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ + + +#include +#include "cmsis.h" + +/* RNG handler declaration */ +RNG_HandleTypeDef RngHandle; + + +/** rng_get_byte + * @brief Get one byte of entropy from the RNG, assuming it is up and running. + * @param pointer to the hardware generated random byte. + */ +static void rng_get_byte( unsigned char *byte ) +{ + *byte = (unsigned char)HAL_RNG_GetRandomNumber(&RngHandle); +} + + +/** mbedtls_hardware_poll + * @brief Get len bytes of entropy from the hardware RNG. + * @param data pointer will be NULL + * @param output pointer to the random generated bytes buffer + * @param len input is the requested length of bytes to be generated + * @param olen is the pointer to the length of bytes effectively generated + * @returns 0 if the generation went well. -1 in case of error + */ +int mbedtls_hardware_poll( void *data, unsigned char *output, size_t len, size_t *olen ) +{ + int ret; + ((void) data); + + /* RNG Peripheral clock enable */ + __HAL_RCC_RNG_CLK_ENABLE(); + + /* Initialize RNG instance */ + RngHandle.Instance = RNG; + HAL_RNG_Init(&RngHandle); + + /* Get Random byte */ + for( uint32_t i = 0; i < len; i++ ){ + rng_get_byte( output + i ); + + } + *olen = len; + /* Just be extra sure that we didn't do it wrong */ + if( ( __HAL_RNG_GET_FLAG(&RngHandle, (RNG_FLAG_CECS|RNG_FLAG_SECS)) ) != 0 ) { + ret = -1; + } else { + ret = 0; + } + /*Disable the RNG peripheral */ + HAL_RNG_DeInit(&RngHandle); + /* RNG Peripheral clock disable - assume we're the only users of RNG */ + __HAL_RCC_RNG_CLK_DISABLE(); + + + return( ret ); +} + + diff --git a/targets/targets.json b/targets/targets.json index eadc38d79f3..9f78f3319b8 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -915,7 +915,7 @@ "supported_form_factors": ["ARDUINO", "MORPHO"], "core": "Cortex-M0+", "default_toolchain": "ARM", - "extra_labels": ["STM", "STM32L0", "STM32L073RZ"], + "extra_labels": ["STM", "STM32L0", "STM32L073RZ", "STM32L073xx"], "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "IAR"], "inherits": ["Target"], "detect_code": ["0760"], From 16bc80ef813d8c1d1e049353f57d6487936cd191 Mon Sep 17 00:00:00 2001 From: adustm Date: Mon, 29 Aug 2016 11:43:51 +0200 Subject: [PATCH 03/89] Add Periphclock enable for L476 products --- .../hal/TARGET_STM/TARGET_STM32L4/entropy_hardware_poll.c | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/hal/targets/hal/TARGET_STM/TARGET_STM32L4/entropy_hardware_poll.c b/hal/targets/hal/TARGET_STM/TARGET_STM32L4/entropy_hardware_poll.c index cdae897347b..e7a880f44ba 100644 --- a/hal/targets/hal/TARGET_STM/TARGET_STM32L4/entropy_hardware_poll.c +++ b/hal/targets/hal/TARGET_STM/TARGET_STM32L4/entropy_hardware_poll.c @@ -48,6 +48,12 @@ int mbedtls_hardware_poll( void *data, unsigned char *output, size_t len, size_t { int ret; ((void) data); + RCC_PeriphCLKInitTypeDef PeriphClkInitStruct; + + /*Select PLLQ output as RNG clock source */ + PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RNG; + PeriphClkInitStruct.RngClockSelection = RCC_RNGCLKSOURCE_PLL; + HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); /* RNG Peripheral clock enable */ __HAL_RCC_RNG_CLK_ENABLE(); @@ -73,7 +79,6 @@ int mbedtls_hardware_poll( void *data, unsigned char *output, size_t len, size_t /* RNG Peripheral clock disable - assume we're the only users of RNG */ __HAL_RCC_RNG_CLK_DISABLE(); - return( ret ); } From 7864a4f9d58149d7a68de38b96d6bdc16aa8933d Mon Sep 17 00:00:00 2001 From: adustm Date: Thu, 29 Sep 2016 12:16:27 +0200 Subject: [PATCH 04/89] Change MBEDTLS_ENTROPY_ALT to device has TRNG update code accordingly --- .../{entropy_hardware_poll.c => trng_api.c} | 61 +++++++++---------- .../{entropy_hardware_poll.c => trng_api.c} | 59 +++++++++--------- targets/TARGET_STM/TARGET_STM32F7/trng_api.c | 1 + .../TARGET_DISCO_L053C8/objects.h | 4 ++ .../TARGET_DISCO_L476VG/objects.h | 4 ++ .../TARGET_NUCLEO_L432KC/objects.h | 4 ++ .../TARGET_NUCLEO_L476RG/objects.h | 4 ++ targets/targets.json | 5 +- 8 files changed, 79 insertions(+), 63 deletions(-) rename hal/targets/hal/TARGET_STM/TARGET_STM32L0/{entropy_hardware_poll.c => trng_api.c} (63%) rename hal/targets/hal/TARGET_STM/TARGET_STM32L4/{entropy_hardware_poll.c => trng_api.c} (63%) diff --git a/hal/targets/hal/TARGET_STM/TARGET_STM32L0/entropy_hardware_poll.c b/hal/targets/hal/TARGET_STM/TARGET_STM32L0/trng_api.c similarity index 63% rename from hal/targets/hal/TARGET_STM/TARGET_STM32L0/entropy_hardware_poll.c rename to hal/targets/hal/TARGET_STM/TARGET_STM32L0/trng_api.c index 611a5e3ff1e..c8fd7dbe5f7 100644 --- a/hal/targets/hal/TARGET_STM/TARGET_STM32L0/entropy_hardware_poll.c +++ b/hal/targets/hal/TARGET_STM/TARGET_STM32L0/trng_api.c @@ -18,66 +18,63 @@ * */ +#if defined(DEVICE_TRNG) #if defined (TARGET_STM32L052xx) || defined (TARGET_STM32L053xx) || defined (TARGET_STM32L062xx) || defined (TARGET_STM32L063xx) || \ defined (TARGET_STM32L072xx) || defined (TARGET_STM32L073xx) || defined (TARGET_STM32L082xx) || defined (TARGET_STM32L083xx) #include #include "cmsis.h" +#include "trng_api.h" -/* RNG handler declaration */ -RNG_HandleTypeDef RngHandle; - - -/** rng_get_byte +/** trng_get_byte * @brief Get one byte of entropy from the RNG, assuming it is up and running. + * @param obj TRNG obj * @param pointer to the hardware generated random byte. */ -static void rng_get_byte( unsigned char *byte ) +static void trng_get_byte(trng_t *obj, unsigned char *byte ) { - *byte = (unsigned char)HAL_RNG_GetRandomNumber(&RngHandle); + *byte = (unsigned char)HAL_RNG_GetRandomNumber(&obj->handle); } - -/** mbedtls_hardware_poll - * @brief Get len bytes of entropy from the hardware RNG. - * @param data pointer will be NULL - * @param output pointer to the random generated bytes buffer - * @param len input is the requested length of bytes to be generated - * @param olen is the pointer to the length of bytes effectively generated - * @returns 0 if the generation went well. -1 in case of error - */ -int mbedtls_hardware_poll( void *data, unsigned char *output, size_t len, size_t *olen ) +void trng_init(trng_t *obj) { - int ret; - ((void) data); - /* RNG Peripheral clock enable */ __HAL_RCC_RNG_CLK_ENABLE(); /* Initialize RNG instance */ - RngHandle.Instance = RNG; - HAL_RNG_Init(&RngHandle); + obj->handle.Instance = RNG; + HAL_RNG_Init(&obj->handle); - /* Get Random byte */ - for( uint32_t i = 0; i < len; i++ ){ - rng_get_byte( output + i ); +} +void trng_free(trng_t *obj) +{ + /*Disable the RNG peripheral */ + HAL_RNG_DeInit(&obj->handle); + /* RNG Peripheral clock disable - assume we're the only users of RNG */ + __HAL_RCC_RNG_CLK_DISABLE(); +} + +int trng_get_bytes(trng_t *obj, uint8_t *output, size_t length, size_t *output_length) +{ + int ret; + + /* Get Random byte */ + for( uint32_t i = 0; i < length; i++ ){ + trng_get_byte(obj, output + i ); } - *olen = len; + + *output_length = length; /* Just be extra sure that we didn't do it wrong */ - if( ( __HAL_RNG_GET_FLAG(&RngHandle, (RNG_FLAG_CECS|RNG_FLAG_SECS)) ) != 0 ) { + if( ( __HAL_RNG_GET_FLAG(&obj->handle, (RNG_FLAG_CECS | RNG_FLAG_SECS)) ) != 0 ) { ret = -1; } else { ret = 0; } - /*Disable the RNG peripheral */ - HAL_RNG_DeInit(&RngHandle); - /* RNG Peripheral clock disable - assume we're the only users of RNG */ - __HAL_RCC_RNG_CLK_DISABLE(); - return( ret ); } #endif /* STM32L073RZ */ +#endif diff --git a/hal/targets/hal/TARGET_STM/TARGET_STM32L4/entropy_hardware_poll.c b/hal/targets/hal/TARGET_STM/TARGET_STM32L4/trng_api.c similarity index 63% rename from hal/targets/hal/TARGET_STM/TARGET_STM32L4/entropy_hardware_poll.c rename to hal/targets/hal/TARGET_STM/TARGET_STM32L4/trng_api.c index e7a880f44ba..64483b8f12b 100644 --- a/hal/targets/hal/TARGET_STM/TARGET_STM32L4/entropy_hardware_poll.c +++ b/hal/targets/hal/TARGET_STM/TARGET_STM32L4/trng_api.c @@ -18,36 +18,24 @@ * */ +#if defined(DEVICE_TRNG) #include #include "cmsis.h" +#include "trng_api.h" -/* RNG handler declaration */ -RNG_HandleTypeDef RngHandle; - - -/** rng_get_byte +/** trng_get_byte * @brief Get one byte of entropy from the RNG, assuming it is up and running. + * @param obj TRNG obj * @param pointer to the hardware generated random byte. */ -static void rng_get_byte( unsigned char *byte ) +static void trng_get_byte(trng_t *obj, unsigned char *byte ) { - *byte = (unsigned char)HAL_RNG_GetRandomNumber(&RngHandle); + *byte = (unsigned char)HAL_RNG_GetRandomNumber(&obj->handle); } - -/** mbedtls_hardware_poll - * @brief Get len bytes of entropy from the hardware RNG. - * @param data pointer will be NULL - * @param output pointer to the random generated bytes buffer - * @param len input is the requested length of bytes to be generated - * @param olen is the pointer to the length of bytes effectively generated - * @returns 0 if the generation went well. -1 in case of error - */ -int mbedtls_hardware_poll( void *data, unsigned char *output, size_t len, size_t *olen ) +void trng_init(trng_t *obj) { - int ret; - ((void) data); RCC_PeriphCLKInitTypeDef PeriphClkInitStruct; /*Select PLLQ output as RNG clock source */ @@ -59,27 +47,38 @@ int mbedtls_hardware_poll( void *data, unsigned char *output, size_t len, size_t __HAL_RCC_RNG_CLK_ENABLE(); /* Initialize RNG instance */ - RngHandle.Instance = RNG; - HAL_RNG_Init(&RngHandle); + obj->handle.Instance = RNG; + HAL_RNG_Init(&obj->handle); - /* Get Random byte */ - for( uint32_t i = 0; i < len; i++ ){ - rng_get_byte( output + i ); +} +void trng_free(trng_t *obj) +{ + /*Disable the RNG peripheral */ + HAL_RNG_DeInit(&obj->handle); + /* RNG Peripheral clock disable - assume we're the only users of RNG */ + __HAL_RCC_RNG_CLK_DISABLE(); +} + +int trng_get_bytes(trng_t *obj, uint8_t *output, size_t length, size_t *output_length) +{ + int ret; + + /* Get Random byte */ + for( uint32_t i = 0; i < length; i++ ){ + trng_get_byte(obj, output + i ); } - *olen = len; + + *output_length = length; /* Just be extra sure that we didn't do it wrong */ - if( ( __HAL_RNG_GET_FLAG(&RngHandle, (RNG_FLAG_CECS|RNG_FLAG_SECS)) ) != 0 ) { + if( ( __HAL_RNG_GET_FLAG(&obj->handle, (RNG_FLAG_CECS | RNG_FLAG_SECS)) ) != 0 ) { ret = -1; } else { ret = 0; } - /*Disable the RNG peripheral */ - HAL_RNG_DeInit(&RngHandle); - /* RNG Peripheral clock disable - assume we're the only users of RNG */ - __HAL_RCC_RNG_CLK_DISABLE(); return( ret ); } +#endif diff --git a/targets/TARGET_STM/TARGET_STM32F7/trng_api.c b/targets/TARGET_STM/TARGET_STM32F7/trng_api.c index ef3595e9b14..f435798f36d 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/trng_api.c +++ b/targets/TARGET_STM/TARGET_STM32F7/trng_api.c @@ -26,6 +26,7 @@ /** trng_get_byte * @brief Get one byte of entropy from the RNG, assuming it is up and running. + * @param obj TRNG obj * @param pointer to the hardware generated random byte. */ static void trng_get_byte(trng_t *obj, unsigned char *byte ) diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L053C8/objects.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L053C8/objects.h index b464a5f2e79..3932d461284 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L053C8/objects.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L053C8/objects.h @@ -84,6 +84,10 @@ struct i2c_s { I2CName i2c; }; +struct trng_s { + RNG_HandleTypeDef handle; +}; + #include "common_objects.h" #include "gpio_object.h" diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_DISCO_L476VG/objects.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_DISCO_L476VG/objects.h index 7f1ca3c87d6..20556881d81 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_DISCO_L476VG/objects.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_DISCO_L476VG/objects.h @@ -90,6 +90,10 @@ struct can_s { int index; }; +struct trng_s { + RNG_HandleTypeDef handle; +}; + #include "common_objects.h" #include "gpio_object.h" diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L432KC/objects.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L432KC/objects.h index 3aa688ef3a0..c3407b008d6 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L432KC/objects.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L432KC/objects.h @@ -90,6 +90,10 @@ struct can_s { int index; }; +struct trng_s { + RNG_HandleTypeDef handle; +}; + #include "gpio_object.h" #include "common_objects.h" diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/objects.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/objects.h index 7f1ca3c87d6..20556881d81 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/objects.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/objects.h @@ -90,6 +90,10 @@ struct can_s { int index; }; +struct trng_s { + RNG_HandleTypeDef handle; +}; + #include "common_objects.h" #include "gpio_object.h" diff --git a/targets/targets.json b/targets/targets.json index 9f78f3319b8..45d1be0ea44 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -920,6 +920,7 @@ "inherits": ["Target"], "detect_code": ["0760"], "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "TRNG"], + "release_versions": ["2", "5"] "device_name": "STM32L073RZ" }, "NUCLEO_L152RE": { @@ -943,7 +944,7 @@ "inherits": ["Target"], "detect_code": ["0770"], "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "CAN", "STDIO_MESSAGES", "TRNG"], - + "release_versions": ["2", "5"] "device_name" : "STM32L432KC" }, "NUCLEO_L476RG": { @@ -955,6 +956,7 @@ "inherits": ["Target"], "detect_code": ["0765"], "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "TRNG"], + "release_versions": ["2", "5"] "device_name": "stm32l476rg" }, "STM32F3XX": { @@ -1099,6 +1101,7 @@ "supported_toolchains": ["ARM", "uARM", "IAR", "GCC_ARM"], "detect_code": ["0820"], "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "TRNG"], + "release_versions": ["2", "5"] "device_name": "stm32l476vg" }, "MTS_MDOT_F405RG": { From c8b358877702ba81e3f8ced2cd7a8096672b543a Mon Sep 17 00:00:00 2001 From: adustm Date: Thu, 6 Oct 2016 10:51:33 +0200 Subject: [PATCH 05/89] rework after directory moves --- .../hal/TARGET_STM/TARGET_STM32L0/trng_api.c | 80 ------------------ targets/TARGET_STM/TARGET_STM32F4/trng_api.c | 82 ------------------- targets/TARGET_STM/TARGET_STM32F7/trng_api.c | 76 ----------------- .../TARGET_STM}/trng_api.c | 8 +- 4 files changed, 6 insertions(+), 240 deletions(-) delete mode 100644 hal/targets/hal/TARGET_STM/TARGET_STM32L0/trng_api.c delete mode 100644 targets/TARGET_STM/TARGET_STM32F4/trng_api.c delete mode 100644 targets/TARGET_STM/TARGET_STM32F7/trng_api.c rename {hal/targets/hal/TARGET_STM/TARGET_STM32L4 => targets/TARGET_STM}/trng_api.c (91%) diff --git a/hal/targets/hal/TARGET_STM/TARGET_STM32L0/trng_api.c b/hal/targets/hal/TARGET_STM/TARGET_STM32L0/trng_api.c deleted file mode 100644 index c8fd7dbe5f7..00000000000 --- a/hal/targets/hal/TARGET_STM/TARGET_STM32L0/trng_api.c +++ /dev/null @@ -1,80 +0,0 @@ -/* - * Hardware entropy collector for the STM32L0 family - * - * Copyright (C) 2006-2016, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#if defined(DEVICE_TRNG) - -#if defined (TARGET_STM32L052xx) || defined (TARGET_STM32L053xx) || defined (TARGET_STM32L062xx) || defined (TARGET_STM32L063xx) || \ - defined (TARGET_STM32L072xx) || defined (TARGET_STM32L073xx) || defined (TARGET_STM32L082xx) || defined (TARGET_STM32L083xx) - -#include -#include "cmsis.h" -#include "trng_api.h" - -/** trng_get_byte - * @brief Get one byte of entropy from the RNG, assuming it is up and running. - * @param obj TRNG obj - * @param pointer to the hardware generated random byte. - */ -static void trng_get_byte(trng_t *obj, unsigned char *byte ) -{ - *byte = (unsigned char)HAL_RNG_GetRandomNumber(&obj->handle); -} - -void trng_init(trng_t *obj) -{ - /* RNG Peripheral clock enable */ - __HAL_RCC_RNG_CLK_ENABLE(); - - /* Initialize RNG instance */ - obj->handle.Instance = RNG; - HAL_RNG_Init(&obj->handle); - -} - -void trng_free(trng_t *obj) -{ - /*Disable the RNG peripheral */ - HAL_RNG_DeInit(&obj->handle); - /* RNG Peripheral clock disable - assume we're the only users of RNG */ - __HAL_RCC_RNG_CLK_DISABLE(); -} - -int trng_get_bytes(trng_t *obj, uint8_t *output, size_t length, size_t *output_length) -{ - int ret; - - /* Get Random byte */ - for( uint32_t i = 0; i < length; i++ ){ - trng_get_byte(obj, output + i ); - } - - *output_length = length; - /* Just be extra sure that we didn't do it wrong */ - if( ( __HAL_RNG_GET_FLAG(&obj->handle, (RNG_FLAG_CECS | RNG_FLAG_SECS)) ) != 0 ) { - ret = -1; - } else { - ret = 0; - } - - return( ret ); -} -#endif /* STM32L073RZ */ - -#endif diff --git a/targets/TARGET_STM/TARGET_STM32F4/trng_api.c b/targets/TARGET_STM/TARGET_STM32F4/trng_api.c deleted file mode 100644 index 54ac041e534..00000000000 --- a/targets/TARGET_STM/TARGET_STM32F4/trng_api.c +++ /dev/null @@ -1,82 +0,0 @@ -/* - * Hardware entropy collector for the STM32F4 family - * - * Copyright (C) 2006-2016, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#if defined(DEVICE_TRNG) - -#if defined(TARGET_STM32F405xx) || defined(TARGET_STM32F415xx) || defined(TARGET_STM32F407xx) || defined(TARGET_STM32F417xx) ||\ - defined(TARGET_STM32F427xx) || defined(TARGET_STM32F437xx) || defined(TARGET_STM32F429xx) || defined(TARGET_STM32F439xx) ||\ - defined(TARGET_STM32F410Tx) || defined(TARGET_STM32F410Cx) || defined(TARGET_STM32F410Rx) || defined(TARGET_STM32F469xx) ||\ - defined(TARGET_STM32F479xx) -#include -#include "cmsis.h" -#include "trng_api.h" - -/** trng_get_byte - * @brief Get one byte of entropy from the RNG, assuming it is up and running. - * @param obj TRNG obj - * @param pointer to the hardware generated random byte. - */ -static void trng_get_byte(trng_t *obj, unsigned char *byte ) -{ - *byte = (unsigned char)HAL_RNG_GetRandomNumber(&obj->handle); -} - -void trng_init(trng_t *obj) -{ - /* RNG Peripheral clock enable */ - __HAL_RCC_RNG_CLK_ENABLE(); - - /* Initialize RNG instance */ - obj->handle.Instance = RNG; - HAL_RNG_Init(&obj->handle); - -} - -void trng_free(trng_t *obj) -{ - /*Disable the RNG peripheral */ - HAL_RNG_DeInit(&obj->handle); - /* RNG Peripheral clock disable - assume we're the only users of RNG */ - __HAL_RCC_RNG_CLK_DISABLE(); -} - -int trng_get_bytes(trng_t *obj, uint8_t *output, size_t length, size_t *output_length) -{ - int ret; - - /* Get Random byte */ - for( uint32_t i = 0; i < length; i++ ){ - trng_get_byte(obj, output + i ); - } - - *output_length = length; - /* Just be extra sure that we didn't do it wrong */ - if( ( __HAL_RNG_GET_FLAG(&obj->handle, (RNG_FLAG_CECS | RNG_FLAG_SECS)) ) != 0 ) { - ret = -1; - } else { - ret = 0; - } - - return( ret ); -} -#endif /* STM32F405xx || STM32F415xx || STM32F407xx || STM32F417xx || STM32F427xx || STM32F437xx ||\ - STM32F429xx || STM32F439xx || STM32F410xx || STM32F469xx || STM32F479xx */ - -#endif diff --git a/targets/TARGET_STM/TARGET_STM32F7/trng_api.c b/targets/TARGET_STM/TARGET_STM32F7/trng_api.c deleted file mode 100644 index f435798f36d..00000000000 --- a/targets/TARGET_STM/TARGET_STM32F7/trng_api.c +++ /dev/null @@ -1,76 +0,0 @@ -/* - * Hardware entropy collector for the STM32F7 family - * - * Copyright (C) 2006-2016, ARM Limited, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - * - */ - -#if defined(DEVICE_TRNG) - -#include -#include "cmsis.h" -#include "trng_api.h" - -/** trng_get_byte - * @brief Get one byte of entropy from the RNG, assuming it is up and running. - * @param obj TRNG obj - * @param pointer to the hardware generated random byte. - */ -static void trng_get_byte(trng_t *obj, unsigned char *byte ) -{ - *byte = (unsigned char)HAL_RNG_GetRandomNumber(&obj->handle); -} - -void trng_init(trng_t *obj) -{ - /* RNG Peripheral clock enable */ - __HAL_RCC_RNG_CLK_ENABLE(); - - /* Initialize RNG instance */ - obj->handle.Instance = RNG; - HAL_RNG_Init(&obj->handle); - -} - -void trng_free(trng_t *obj) -{ - /*Disable the RNG peripheral */ - HAL_RNG_DeInit(&obj->handle); - /* RNG Peripheral clock disable - assume we're the only users of RNG */ - __HAL_RCC_RNG_CLK_DISABLE(); -} - -int trng_get_bytes(trng_t *obj, uint8_t *output, size_t length, size_t *output_length) -{ - int ret; - - /* Get Random byte */ - for( uint32_t i = 0; i < length; i++ ){ - trng_get_byte(obj, output + i ); - } - - *output_length = length; - /* Just be extra sure that we didn't do it wrong */ - if( ( __HAL_RNG_GET_FLAG(&obj->handle, (RNG_FLAG_CECS | RNG_FLAG_SECS)) ) != 0 ) { - ret = -1; - } else { - ret = 0; - } - - return( ret ); -} - -#endif diff --git a/hal/targets/hal/TARGET_STM/TARGET_STM32L4/trng_api.c b/targets/TARGET_STM/trng_api.c similarity index 91% rename from hal/targets/hal/TARGET_STM/TARGET_STM32L4/trng_api.c rename to targets/TARGET_STM/trng_api.c index 64483b8f12b..f10bf69e06e 100644 --- a/hal/targets/hal/TARGET_STM/TARGET_STM32L4/trng_api.c +++ b/targets/TARGET_STM/trng_api.c @@ -1,5 +1,5 @@ /* - * Hardware entropy collector for the STM32L4 family + * Hardware entropy collector for the STM32 families * * Copyright (C) 2006-2016, ARM Limited, All Rights Reserved * SPDX-License-Identifier: Apache-2.0 @@ -36,12 +36,14 @@ static void trng_get_byte(trng_t *obj, unsigned char *byte ) void trng_init(trng_t *obj) { +#if defined(TARGET_STM32L4) RCC_PeriphCLKInitTypeDef PeriphClkInitStruct; /*Select PLLQ output as RNG clock source */ PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_RNG; PeriphClkInitStruct.RngClockSelection = RCC_RNGCLKSOURCE_PLL; HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); +#endif /* RNG Peripheral clock enable */ __HAL_RCC_RNG_CLK_ENABLE(); @@ -50,6 +52,9 @@ void trng_init(trng_t *obj) obj->handle.Instance = RNG; HAL_RNG_Init(&obj->handle); + /* first random number generated after setting the RNGEN bit should not be used */ + HAL_RNG_GetRandomNumber(&obj->handle); + } void trng_free(trng_t *obj) @@ -80,5 +85,4 @@ int trng_get_bytes(trng_t *obj, uint8_t *output, size_t length, size_t *output_l return( ret ); } - #endif From 8d207b1eb7eec3bdae4e2508a60c4eea715525f7 Mon Sep 17 00:00:00 2001 From: adustm Date: Thu, 6 Oct 2016 13:49:40 +0200 Subject: [PATCH 06/89] Add objects.h for L073 --- .../TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/objects.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/objects.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/objects.h index b464a5f2e79..3932d461284 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/objects.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/objects.h @@ -84,6 +84,10 @@ struct i2c_s { I2CName i2c; }; +struct trng_s { + RNG_HandleTypeDef handle; +}; + #include "common_objects.h" #include "gpio_object.h" From 33000299fcaedfd1d6ee7d4efa05daab1b545c96 Mon Sep 17 00:00:00 2001 From: adustm Date: Mon, 10 Oct 2016 17:06:57 +0200 Subject: [PATCH 07/89] Fix typo --- targets/targets.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/targets/targets.json b/targets/targets.json index 45d1be0ea44..a6520b94cd6 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -920,7 +920,7 @@ "inherits": ["Target"], "detect_code": ["0760"], "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "TRNG"], - "release_versions": ["2", "5"] + "release_versions": ["2", "5"], "device_name": "STM32L073RZ" }, "NUCLEO_L152RE": { @@ -944,7 +944,7 @@ "inherits": ["Target"], "detect_code": ["0770"], "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "CAN", "STDIO_MESSAGES", "TRNG"], - "release_versions": ["2", "5"] + "release_versions": ["2", "5"], "device_name" : "STM32L432KC" }, "NUCLEO_L476RG": { @@ -956,7 +956,7 @@ "inherits": ["Target"], "detect_code": ["0765"], "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "TRNG"], - "release_versions": ["2", "5"] + "release_versions": ["2", "5"], "device_name": "stm32l476rg" }, "STM32F3XX": { @@ -1101,7 +1101,7 @@ "supported_toolchains": ["ARM", "uARM", "IAR", "GCC_ARM"], "detect_code": ["0820"], "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "TRNG"], - "release_versions": ["2", "5"] + "release_versions": ["2", "5"], "device_name": "stm32l476vg" }, "MTS_MDOT_F405RG": { From a2fe7c76cd18b53221ff16d749169f28a2c9d2bd Mon Sep 17 00:00:00 2001 From: Kevin Gillespie Date: Fri, 9 Sep 2016 10:53:44 -0500 Subject: [PATCH 08/89] Cleanup with formatting script. --- .../TARGET_MAX32620/PeripheralPins.c | 60 +++++----- .../TARGET_Maxim/TARGET_MAX32620/PortNames.h | 2 +- .../TARGET_MAX32620HSP/PinNames.h | 2 +- .../TARGET_MAX32620/analogin_api.c | 4 +- targets/TARGET_Maxim/TARGET_MAX32620/device.h | 2 +- .../device/TOOLCHAIN_ARM_STD/MAX32620.sct | 2 +- .../device/TOOLCHAIN_ARM_STD/sys.cpp | 7 +- .../TARGET_MAX32620/device/cmsis.h | 2 +- .../TARGET_MAX32620/device/cmsis_nvic.c | 2 +- .../TARGET_MAX32620/device/ioman_regs.h | 108 ++++++------------ .../TARGET_MAX32620/device/pmu_regs.h | 20 ++-- .../TARGET_MAX32620/device/system_max32620.c | 8 +- .../TARGET_Maxim/TARGET_MAX32620/gpio_api.c | 7 +- .../TARGET_MAX32620/gpio_irq_api.c | 2 +- .../TARGET_MAX32620/gpio_object.h | 5 +- .../TARGET_Maxim/TARGET_MAX32620/i2c_api.c | 84 +++++++------- targets/TARGET_Maxim/TARGET_MAX32620/pinmap.c | 2 +- .../TARGET_Maxim/TARGET_MAX32620/port_api.c | 4 +- .../TARGET_Maxim/TARGET_MAX32620/pwmout_api.c | 6 +- .../TARGET_Maxim/TARGET_MAX32620/rtc_api.c | 6 +- .../TARGET_Maxim/TARGET_MAX32620/serial_api.c | 12 +- targets/TARGET_Maxim/TARGET_MAX32620/sleep.c | 8 +- .../TARGET_Maxim/TARGET_MAX32620/spi_api.c | 22 ++-- .../TARGET_Maxim/TARGET_MAX32620/us_ticker.c | 21 ++-- 24 files changed, 182 insertions(+), 216 deletions(-) diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/PeripheralPins.c b/targets/TARGET_Maxim/TARGET_MAX32620/PeripheralPins.c index de32811a768..4e312ea7802 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/PeripheralPins.c +++ b/targets/TARGET_Maxim/TARGET_MAX32620/PeripheralPins.c @@ -68,14 +68,14 @@ const PinMap PinMap_I2C_SCL[] = { /* */ const PinMap PinMap_UART_TX[] = { - { P0_1, UART_0, (int)&((pin_function_t){&MXC_IOMAN->uart0_req, &MXC_IOMAN->uart0_ack, ((uint32_t)MXC_E_IOMAN_MAPPING_A | MXC_F_IOMAN_UART_REQ_IO_REQ), (MXC_F_IOMAN_UART_ACK_IO_MAP | MXC_F_IOMAN_UART_ACK_IO_ACK)}) }, - { P2_1, UART_1, (int)&((pin_function_t){&MXC_IOMAN->uart1_req, &MXC_IOMAN->uart1_ack, ((uint32_t)MXC_E_IOMAN_MAPPING_A | MXC_F_IOMAN_UART_REQ_IO_REQ), (MXC_F_IOMAN_UART_ACK_IO_MAP | MXC_F_IOMAN_UART_ACK_IO_ACK)}) }, - { P3_1, UART_2, (int)&((pin_function_t){&MXC_IOMAN->uart2_req, &MXC_IOMAN->uart2_ack, ((uint32_t)MXC_E_IOMAN_MAPPING_A | MXC_F_IOMAN_UART_REQ_IO_REQ), (MXC_F_IOMAN_UART_ACK_IO_MAP | MXC_F_IOMAN_UART_ACK_IO_ACK)}) }, - { P5_4, UART_3, (int)&((pin_function_t){&MXC_IOMAN->uart3_req, &MXC_IOMAN->uart3_ack, ((uint32_t)MXC_E_IOMAN_MAPPING_A | MXC_F_IOMAN_UART_REQ_IO_REQ), (MXC_F_IOMAN_UART_ACK_IO_MAP | MXC_F_IOMAN_UART_ACK_IO_ACK)}) }, - { P0_0, UART_0, (int)&((pin_function_t){&MXC_IOMAN->uart0_req, &MXC_IOMAN->uart0_ack, ((uint32_t)MXC_E_IOMAN_MAPPING_B | MXC_F_IOMAN_UART_REQ_IO_REQ), (MXC_F_IOMAN_UART_ACK_IO_MAP | MXC_F_IOMAN_UART_ACK_IO_ACK)}) }, - { P2_0, UART_1, (int)&((pin_function_t){&MXC_IOMAN->uart1_req, &MXC_IOMAN->uart1_ack, ((uint32_t)MXC_E_IOMAN_MAPPING_B | MXC_F_IOMAN_UART_REQ_IO_REQ), (MXC_F_IOMAN_UART_ACK_IO_MAP | MXC_F_IOMAN_UART_ACK_IO_ACK)}) }, - { P3_0, UART_2, (int)&((pin_function_t){&MXC_IOMAN->uart2_req, &MXC_IOMAN->uart2_ack, ((uint32_t)MXC_E_IOMAN_MAPPING_B | MXC_F_IOMAN_UART_REQ_IO_REQ), (MXC_F_IOMAN_UART_ACK_IO_MAP | MXC_F_IOMAN_UART_ACK_IO_ACK)}) }, - { P5_3, UART_3, (int)&((pin_function_t){&MXC_IOMAN->uart3_req, &MXC_IOMAN->uart3_ack, ((uint32_t)MXC_E_IOMAN_MAPPING_B | MXC_F_IOMAN_UART_REQ_IO_REQ), (MXC_F_IOMAN_UART_ACK_IO_MAP | MXC_F_IOMAN_UART_ACK_IO_ACK)}) }, + { P0_1, UART_0, (int)&((pin_function_t){&MXC_IOMAN->uart0_req, &MXC_IOMAN->uart0_ack, ((uint32_t)MXC_E_IOMAN_MAPPING_A | MXC_F_IOMAN_UART_REQ_IO_REQ), (MXC_F_IOMAN_UART_ACK_IO_MAP | MXC_F_IOMAN_UART_ACK_IO_ACK)}) }, + { P2_1, UART_1, (int)&((pin_function_t){&MXC_IOMAN->uart1_req, &MXC_IOMAN->uart1_ack, ((uint32_t)MXC_E_IOMAN_MAPPING_A | MXC_F_IOMAN_UART_REQ_IO_REQ), (MXC_F_IOMAN_UART_ACK_IO_MAP | MXC_F_IOMAN_UART_ACK_IO_ACK)}) }, + { P3_1, UART_2, (int)&((pin_function_t){&MXC_IOMAN->uart2_req, &MXC_IOMAN->uart2_ack, ((uint32_t)MXC_E_IOMAN_MAPPING_A | MXC_F_IOMAN_UART_REQ_IO_REQ), (MXC_F_IOMAN_UART_ACK_IO_MAP | MXC_F_IOMAN_UART_ACK_IO_ACK)}) }, + { P5_4, UART_3, (int)&((pin_function_t){&MXC_IOMAN->uart3_req, &MXC_IOMAN->uart3_ack, ((uint32_t)MXC_E_IOMAN_MAPPING_A | MXC_F_IOMAN_UART_REQ_IO_REQ), (MXC_F_IOMAN_UART_ACK_IO_MAP | MXC_F_IOMAN_UART_ACK_IO_ACK)}) }, + { P0_0, UART_0, (int)&((pin_function_t){&MXC_IOMAN->uart0_req, &MXC_IOMAN->uart0_ack, ((uint32_t)MXC_E_IOMAN_MAPPING_B | MXC_F_IOMAN_UART_REQ_IO_REQ), (MXC_F_IOMAN_UART_ACK_IO_MAP | MXC_F_IOMAN_UART_ACK_IO_ACK)}) }, + { P2_0, UART_1, (int)&((pin_function_t){&MXC_IOMAN->uart1_req, &MXC_IOMAN->uart1_ack, ((uint32_t)MXC_E_IOMAN_MAPPING_B | MXC_F_IOMAN_UART_REQ_IO_REQ), (MXC_F_IOMAN_UART_ACK_IO_MAP | MXC_F_IOMAN_UART_ACK_IO_ACK)}) }, + { P3_0, UART_2, (int)&((pin_function_t){&MXC_IOMAN->uart2_req, &MXC_IOMAN->uart2_ack, ((uint32_t)MXC_E_IOMAN_MAPPING_B | MXC_F_IOMAN_UART_REQ_IO_REQ), (MXC_F_IOMAN_UART_ACK_IO_MAP | MXC_F_IOMAN_UART_ACK_IO_ACK)}) }, + { P5_3, UART_3, (int)&((pin_function_t){&MXC_IOMAN->uart3_req, &MXC_IOMAN->uart3_ack, ((uint32_t)MXC_E_IOMAN_MAPPING_B | MXC_F_IOMAN_UART_REQ_IO_REQ), (MXC_F_IOMAN_UART_ACK_IO_MAP | MXC_F_IOMAN_UART_ACK_IO_ACK)}) }, { NC, NC, 0 } }; @@ -157,30 +157,30 @@ const PinMap PinMap_SPI_QUAD[] = { /************PWM***************/ const PinMap PinMap_PWM[] = { - { P0_0, PWM_0, 1 }, { P2_0, PWM_0, 1 }, { P4_0, PWM_0, 1 }, {P6_0, PWM_0, 1}, - { P0_1, PWM_1, 1 }, { P2_1, PWM_1, 1 }, { P4_1, PWM_1, 1 }, - { P0_2, PWM_2, 1 }, { P2_2, PWM_2, 1 }, { P4_2, PWM_2, 1 }, - { P0_3, PWM_3, 1 }, { P2_3, PWM_3, 1 }, { P4_3, PWM_3, 1 }, - { P0_4, PWM_4, 1 }, { P2_4, PWM_4, 1 }, { P4_4, PWM_4, 1 }, - { P0_5, PWM_5, 1 }, { P2_5, PWM_5, 1 }, { P4_5, PWM_5, 1 }, - { P0_6, PWM_6, 1 }, { P2_6, PWM_6, 1 }, { P4_6, PWM_6, 1 }, - { P0_7, PWM_7, 1 }, { P2_7, PWM_7, 1 }, { P4_7, PWM_7, 1 }, - { P1_0, PWM_8, 1 }, { P3_0, PWM_8, 1 }, { P5_0, PWM_8, 1 }, - { P1_1, PWM_9, 1 }, { P3_1, PWM_9, 1 }, { P5_1, PWM_9, 1 }, - { P1_2, PWM_10, 1 }, { P3_2, PWM_10, 1 }, { P5_2, PWM_10, 1 }, - { P1_3, PWM_11, 1 }, { P3_3, PWM_11, 1 }, { P5_3, PWM_11, 1 }, - { P1_4, PWM_12, 1 }, { P3_4, PWM_12, 1 }, { P5_4, PWM_12, 1 }, - { P1_5, PWM_13, 1 }, { P3_5, PWM_13, 1 }, { P5_5, PWM_13, 1 }, - { P1_6, PWM_14, 1 }, { P3_6, PWM_14, 1 }, { P5_6, PWM_14, 1 }, - { P1_7, PWM_15, 1 }, { P3_7, PWM_15, 1 }, { P5_7, PWM_15, 1 }, - { NC, NC, 0 } + { P0_0, PWM_0, 1 }, { P2_0, PWM_0, 1 }, { P4_0, PWM_0, 1 }, {P6_0, PWM_0, 1}, + { P0_1, PWM_1, 1 }, { P2_1, PWM_1, 1 }, { P4_1, PWM_1, 1 }, + { P0_2, PWM_2, 1 }, { P2_2, PWM_2, 1 }, { P4_2, PWM_2, 1 }, + { P0_3, PWM_3, 1 }, { P2_3, PWM_3, 1 }, { P4_3, PWM_3, 1 }, + { P0_4, PWM_4, 1 }, { P2_4, PWM_4, 1 }, { P4_4, PWM_4, 1 }, + { P0_5, PWM_5, 1 }, { P2_5, PWM_5, 1 }, { P4_5, PWM_5, 1 }, + { P0_6, PWM_6, 1 }, { P2_6, PWM_6, 1 }, { P4_6, PWM_6, 1 }, + { P0_7, PWM_7, 1 }, { P2_7, PWM_7, 1 }, { P4_7, PWM_7, 1 }, + { P1_0, PWM_8, 1 }, { P3_0, PWM_8, 1 }, { P5_0, PWM_8, 1 }, + { P1_1, PWM_9, 1 }, { P3_1, PWM_9, 1 }, { P5_1, PWM_9, 1 }, + { P1_2, PWM_10, 1 }, { P3_2, PWM_10, 1 }, { P5_2, PWM_10, 1 }, + { P1_3, PWM_11, 1 }, { P3_3, PWM_11, 1 }, { P5_3, PWM_11, 1 }, + { P1_4, PWM_12, 1 }, { P3_4, PWM_12, 1 }, { P5_4, PWM_12, 1 }, + { P1_5, PWM_13, 1 }, { P3_5, PWM_13, 1 }, { P5_5, PWM_13, 1 }, + { P1_6, PWM_14, 1 }, { P3_6, PWM_14, 1 }, { P5_6, PWM_14, 1 }, + { P1_7, PWM_15, 1 }, { P3_7, PWM_15, 1 }, { P5_7, PWM_15, 1 }, + { NC, NC, 0 } }; /************ADC***************/ const PinMap PinMap_ADC[] = { - { AIN_0, ADC, 0 }, - { AIN_1, ADC, 0 }, - { AIN_2, ADC, 0 }, - { AIN_3, ADC, 0 }, - { NC, NC, 0 } + { AIN_0, ADC, 0 }, + { AIN_1, ADC, 0 }, + { AIN_2, ADC, 0 }, + { AIN_3, ADC, 0 }, + { NC, NC, 0 } }; diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/PortNames.h b/targets/TARGET_Maxim/TARGET_MAX32620/PortNames.h index 56100a806af..e44f78c4c39 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/PortNames.h +++ b/targets/TARGET_Maxim/TARGET_MAX32620/PortNames.h @@ -30,7 +30,7 @@ * ownership rights. ******************************************************************************* */ - + #ifndef MBED_PORTNAMES_H #define MBED_PORTNAMES_H diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/TARGET_MAX32620HSP/PinNames.h b/targets/TARGET_Maxim/TARGET_MAX32620/TARGET_MAX32620HSP/PinNames.h index 0ba72913b5d..559730a359b 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/TARGET_MAX32620HSP/PinNames.h +++ b/targets/TARGET_Maxim/TARGET_MAX32620/TARGET_MAX32620HSP/PinNames.h @@ -116,7 +116,7 @@ typedef enum { AIN_3 = (0xA << PORT_SHIFT) | 3, // LEDs - LED_RED = P2_0, + LED_RED = P2_0, LED1 = LED_RED, LED2 = NOT_CONNECTED, LED3 = NOT_CONNECTED, diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/analogin_api.c b/targets/TARGET_Maxim/TARGET_MAX32620/analogin_api.c index 2a397e0e2ad..84f34c73973 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/analogin_api.c +++ b/targets/TARGET_Maxim/TARGET_MAX32620/analogin_api.c @@ -49,7 +49,7 @@ // Only allow initialization once static int initialized = 0; - + //****************************************************************************** void analogin_init(analogin_t *obj, PinName pin) { @@ -86,7 +86,7 @@ void analogin_init(analogin_t *obj, PinName pin) // Enable ADC power bypass the buffer obj->adc->ctrl |= (MXC_F_ADC_CTRL_ADC_PU | MXC_F_ADC_CTRL_ADC_REFBUF_PU | - MXC_F_ADC_CTRL_ADC_CHGPUMP_PU | MXC_F_ADC_CTRL_BUF_BYPASS); + MXC_F_ADC_CTRL_ADC_CHGPUMP_PU | MXC_F_ADC_CTRL_BUF_BYPASS); // Wait for ADC ready while (!(obj->adc->intr & MXC_F_ADC_INTR_ADC_REF_READY_IF)); diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/device.h b/targets/TARGET_Maxim/TARGET_MAX32620/device.h index af8fe76bb02..aff47659247 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/device.h +++ b/targets/TARGET_Maxim/TARGET_MAX32620/device.h @@ -32,7 +32,7 @@ * ownership rights. ******************************************************************************* */ - + #ifndef MBED_DEVICE_H #define MBED_DEVICE_H #include "objects.h" diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_ARM_STD/MAX32620.sct b/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_ARM_STD/MAX32620.sct index 9be03baf111..77c2cb1a5c0 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_ARM_STD/MAX32620.sct +++ b/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_ARM_STD/MAX32620.sct @@ -14,7 +14,7 @@ LR_IROM1 0x00000000 0x200000 { ; load region size_region } ; [RAM] Vector table dynamic copy: 65 vectors * 4 bytes = 260 (0x104) + 4 - ; for 8 byte alignment + ; for 8 byte alignment RW_IRAM1 (0x20000000+0x108) (0x40000-0x108) { ; RW data .ANY (+RW +ZI) } diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_ARM_STD/sys.cpp b/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_ARM_STD/sys.cpp index b6c24b38364..18b451c0e0d 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_ARM_STD/sys.cpp +++ b/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_ARM_STD/sys.cpp @@ -36,11 +36,12 @@ #ifdef __cplusplus extern "C" { -#endif +#endif extern char Image$$RW_IRAM1$$ZI$$Limit[]; -extern __value_in_regs struct __initial_stackheap __user_setup_stackheap(uint32_t R0, uint32_t R1, uint32_t R2, uint32_t R3) { +extern __value_in_regs struct __initial_stackheap __user_setup_stackheap(uint32_t R0, uint32_t R1, uint32_t R2, uint32_t R3) +{ uint32_t zi_limit = (uint32_t)Image$$RW_IRAM1$$ZI$$Limit; uint32_t sp_limit = __current_sp(); @@ -54,4 +55,4 @@ extern __value_in_regs struct __initial_stackheap __user_setup_stackheap(uint32_ #ifdef __cplusplus } -#endif +#endif diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/device/cmsis.h b/targets/TARGET_Maxim/TARGET_MAX32620/device/cmsis.h index 075790296e7..6bd3ab1b358 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/device/cmsis.h +++ b/targets/TARGET_Maxim/TARGET_MAX32620/device/cmsis.h @@ -30,7 +30,7 @@ * ownership rights. ******************************************************************************* */ - + #ifndef MBED_CMSIS_H #define MBED_CMSIS_H diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/device/cmsis_nvic.c b/targets/TARGET_Maxim/TARGET_MAX32620/device/cmsis_nvic.c index 98cfd205a6f..22b7e08ed01 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/device/cmsis_nvic.c +++ b/targets/TARGET_Maxim/TARGET_MAX32620/device/cmsis_nvic.c @@ -30,7 +30,7 @@ * ownership rights. ******************************************************************************* */ - + #include "cmsis_nvic.h" #if defined(TOOLCHAIN_GCC_ARM) || defined(TOOLCHAIN_ARM_STD) diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/device/ioman_regs.h b/targets/TARGET_Maxim/TARGET_MAX32620/device/ioman_regs.h index c20930418a4..427ca5e4dad 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/device/ioman_regs.h +++ b/targets/TARGET_Maxim/TARGET_MAX32620/device/ioman_regs.h @@ -72,72 +72,63 @@ typedef enum { Bitfield structs for registers in this module */ -typedef struct -{ +typedef struct { uint32_t wud_req_p0 : 8; uint32_t wud_req_p1 : 8; uint32_t wud_req_p2 : 8; uint32_t wud_req_p3 : 8; } mxc_ioman_wud_req0_t; -typedef struct -{ +typedef struct { uint32_t wud_req_p4 : 8; uint32_t wud_req_p5 : 8; uint32_t wud_req_p6 : 1; uint32_t : 15; } mxc_ioman_wud_req1_t; -typedef struct -{ +typedef struct { uint32_t wud_ack_p0 : 8; uint32_t wud_ack_p1 : 8; uint32_t wud_ack_p2 : 8; uint32_t wud_ack_p3 : 8; } mxc_ioman_wud_ack0_t; -typedef struct -{ +typedef struct { uint32_t wud_ack_p4 : 8; uint32_t wud_ack_p5 : 8; uint32_t wud_ack_p6 : 1; uint32_t : 15; } mxc_ioman_wud_ack1_t; -typedef struct -{ +typedef struct { uint32_t ali_req_p0 : 8; uint32_t ali_req_p1 : 8; uint32_t ali_req_p2 : 8; uint32_t ali_req_p3 : 8; } mxc_ioman_ali_req0_t; -typedef struct -{ +typedef struct { uint32_t ali_req_p4 : 8; uint32_t ali_req_p5 : 8; uint32_t ali_req_p6 : 1; uint32_t : 15; } mxc_ioman_ali_req1_t; -typedef struct -{ +typedef struct { uint32_t ali_ack_p0 : 8; uint32_t ali_ack_p1 : 8; uint32_t ali_ack_p2 : 8; uint32_t ali_ack_p3 : 8; } mxc_ioman_ali_ack0_t; -typedef struct -{ +typedef struct { uint32_t ali_ack_p4 : 8; uint32_t ali_ack_p5 : 8; uint32_t ali_ack_p6 : 1; uint32_t : 15; } mxc_ioman_ali_ack1_t; -typedef struct -{ +typedef struct { uint32_t : 4; uint32_t core_io_req : 1; uint32_t : 3; @@ -151,8 +142,7 @@ typedef struct uint32_t : 15; } mxc_ioman_spix_req_t; -typedef struct -{ +typedef struct { uint32_t : 4; uint32_t core_io_ack : 1; uint32_t : 3; @@ -166,8 +156,7 @@ typedef struct uint32_t : 15; } mxc_ioman_spix_ack_t; -typedef struct -{ +typedef struct { uint32_t io_map : 1; uint32_t cts_map : 1; uint32_t rts_map : 1; @@ -178,8 +167,7 @@ typedef struct uint32_t : 25; } mxc_ioman_uart0_req_t; -typedef struct -{ +typedef struct { uint32_t io_map : 1; uint32_t cts_map : 1; uint32_t rts_map : 1; @@ -190,8 +178,7 @@ typedef struct uint32_t : 25; } mxc_ioman_uart0_ack_t; -typedef struct -{ +typedef struct { uint32_t io_map : 1; uint32_t cts_map : 1; uint32_t rts_map : 1; @@ -202,8 +189,7 @@ typedef struct uint32_t : 25; } mxc_ioman_uart1_req_t; -typedef struct -{ +typedef struct { uint32_t io_map : 1; uint32_t cts_map : 1; uint32_t rts_map : 1; @@ -214,8 +200,7 @@ typedef struct uint32_t : 25; } mxc_ioman_uart1_ack_t; -typedef struct -{ +typedef struct { uint32_t io_map : 1; uint32_t cts_map : 1; uint32_t rts_map : 1; @@ -226,8 +211,7 @@ typedef struct uint32_t : 25; } mxc_ioman_uart2_req_t; -typedef struct -{ +typedef struct { uint32_t io_map : 1; uint32_t cts_map : 1; uint32_t rts_map : 1; @@ -238,8 +222,7 @@ typedef struct uint32_t : 25; } mxc_ioman_uart2_ack_t; -typedef struct -{ +typedef struct { uint32_t io_map : 1; uint32_t cts_map : 1; uint32_t rts_map : 1; @@ -250,8 +233,7 @@ typedef struct uint32_t : 25; } mxc_ioman_uart3_req_t; -typedef struct -{ +typedef struct { uint32_t io_map : 1; uint32_t cts_map : 1; uint32_t rts_map : 1; @@ -262,66 +244,57 @@ typedef struct uint32_t : 25; } mxc_ioman_uart3_ack_t; -typedef struct -{ +typedef struct { uint32_t : 4; uint32_t mapping_req : 1; uint32_t : 27; } mxc_ioman_i2cm0_req_t; -typedef struct -{ +typedef struct { uint32_t : 4; uint32_t mapping_ack : 1; uint32_t : 27; } mxc_ioman_i2cm0_ack_t; -typedef struct -{ +typedef struct { uint32_t : 4; uint32_t mapping_req : 1; uint32_t : 27; } mxc_ioman_i2cm1_req_t; -typedef struct -{ +typedef struct { uint32_t : 4; uint32_t mapping_ack : 1; uint32_t : 27; } mxc_ioman_i2cm1_ack_t; -typedef struct -{ +typedef struct { uint32_t : 4; uint32_t mapping_req : 1; uint32_t : 27; } mxc_ioman_i2cm2_req_t; -typedef struct -{ +typedef struct { uint32_t : 4; uint32_t mapping_ack : 1; uint32_t : 27; } mxc_ioman_i2cm2_ack_t; -typedef struct -{ +typedef struct { uint32_t io_sel : 2; uint32_t : 2; uint32_t mapping_req : 1; uint32_t : 27; } mxc_ioman_i2cs_req_t; -typedef struct -{ +typedef struct { uint32_t io_sel : 2; uint32_t : 2; uint32_t mapping_ack : 1; uint32_t : 27; } mxc_ioman_i2cs_ack_t; -typedef struct -{ +typedef struct { uint32_t : 4; uint32_t core_io_req : 1; uint32_t : 3; @@ -337,8 +310,7 @@ typedef struct uint32_t : 7; } mxc_ioman_spim0_req_t; -typedef struct -{ +typedef struct { uint32_t : 4; uint32_t core_io_ack : 1; uint32_t : 3; @@ -354,8 +326,7 @@ typedef struct uint32_t : 7; } mxc_ioman_spim0_ack_t; -typedef struct -{ +typedef struct { uint32_t : 4; uint32_t core_io_req : 1; uint32_t : 3; @@ -369,8 +340,7 @@ typedef struct uint32_t : 7; } mxc_ioman_spim1_req_t; -typedef struct -{ +typedef struct { uint32_t : 4; uint32_t core_io_ack : 1; uint32_t : 3; @@ -384,8 +354,7 @@ typedef struct uint32_t : 7; } mxc_ioman_spim1_ack_t; -typedef struct -{ +typedef struct { uint32_t mapping_req : 1; uint32_t : 3; uint32_t core_io_req : 1; @@ -403,8 +372,7 @@ typedef struct uint32_t : 7; } mxc_ioman_spim2_req_t; -typedef struct -{ +typedef struct { uint32_t mapping_ack : 1; uint32_t : 3; uint32_t core_io_ack : 1; @@ -422,8 +390,7 @@ typedef struct uint32_t : 7; } mxc_ioman_spim2_ack_t; -typedef struct -{ +typedef struct { uint32_t : 4; uint32_t core_io_req : 1; uint32_t : 3; @@ -433,8 +400,7 @@ typedef struct uint32_t : 19; } mxc_ioman_spib_req_t; -typedef struct -{ +typedef struct { uint32_t : 4; uint32_t core_io_ack : 1; uint32_t : 3; @@ -444,16 +410,14 @@ typedef struct uint32_t : 19; } mxc_ioman_spib_ack_t; -typedef struct -{ +typedef struct { uint32_t : 4; uint32_t mapping_req : 1; uint32_t epu_io_req : 1; uint32_t : 26; } mxc_ioman_owm_req_t; -typedef struct -{ +typedef struct { uint32_t : 4; uint32_t mapping_ack : 1; uint32_t epu_io_ack : 1; diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/device/pmu_regs.h b/targets/TARGET_Maxim/TARGET_MAX32620/device/pmu_regs.h index 2c75d236cfd..2055a9684a1 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/device/pmu_regs.h +++ b/targets/TARGET_Maxim/TARGET_MAX32620/device/pmu_regs.h @@ -57,20 +57,20 @@ extern "C" { typedef struct { __IO uint32_t start_opcode[32]; __IO uint32_t enable; - __IO uint32_t rsvd0; + __IO uint32_t rsvd0; __IO uint32_t ll_stopped; - __IO uint32_t manual; - __IO uint32_t bus_error; - __IO uint32_t rsvd1; - __IO uint32_t to_stat; - __IO uint32_t rsvd2[4]; - __IO uint32_t to_sel[3]; + __IO uint32_t manual; + __IO uint32_t bus_error; + __IO uint32_t rsvd1; + __IO uint32_t to_stat; + __IO uint32_t rsvd2[4]; + __IO uint32_t to_sel[3]; __IO uint32_t ps_sel[2]; - __IO uint32_t interrupt; + __IO uint32_t interrupt; __IO uint32_t int_enable; - __IO uint32_t rsvd3[6]; + __IO uint32_t rsvd3[6]; __IO uint32_t burst_size[5]; - __IO uint32_t rsvd4[3]; + __IO uint32_t rsvd4[3]; __IO uint32_t padding[192]; /* Offset to next channel */ } mxc_pmu_bits_t; diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/device/system_max32620.c b/targets/TARGET_Maxim/TARGET_MAX32620/device/system_max32620.c index 461e50d0d62..d3e6b77e147 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/device/system_max32620.c +++ b/targets/TARGET_Maxim/TARGET_MAX32620/device/system_max32620.c @@ -58,7 +58,7 @@ uint32_t SystemCoreClock = RO_FREQ; void SystemCoreClockUpdate(void) { switch ((MXC_CLKMAN->clk_ctrl & MXC_F_CLKMAN_CLK_CTRL_SYSTEM_SOURCE_SELECT) >> MXC_F_CLKMAN_CLK_CTRL_SYSTEM_SOURCE_SELECT_POS) { - + case MXC_V_CLKMAN_CLK_CTRL_SYSTEM_SOURCE_SELECT_96MHZ_RO_DIV_2: default: SystemCoreClock = RO_FREQ / 2; @@ -187,11 +187,11 @@ void SystemInit(void) // Clear all unused wakeup sources // Beware! Do not change any flag not mentioned here, as they will gate important power sequencer signals MXC_PWRSEQ->msk_flags &= ~(MXC_F_PWRSEQ_MSK_FLAGS_PWR_USB_PLUG_WAKEUP | - MXC_F_PWRSEQ_MSK_FLAGS_PWR_USB_REMOVE_WAKEUP); + MXC_F_PWRSEQ_MSK_FLAGS_PWR_USB_REMOVE_WAKEUP); // RTC sources are inverted, so a 1 will disable them MXC_PWRSEQ->msk_flags |= (MXC_F_PWRSEQ_MSK_FLAGS_RTC_CMPR1 | - MXC_F_PWRSEQ_MSK_FLAGS_RTC_PRESCALE_CMP); + MXC_F_PWRSEQ_MSK_FLAGS_RTC_PRESCALE_CMP); /* Enable RTOS Mode: Enable 32kHz clock synchronizer to SysTick external clock input */ MXC_CLKMAN->clk_ctrl |= MXC_F_CLKMAN_CLK_CTRL_RTOS_MODE; @@ -206,7 +206,7 @@ void SystemInit(void) SCB->CPACR |= SCB_CPACR_CP10_Msk | SCB_CPACR_CP11_Msk; __DSB(); __ISB(); -#endif +#endif // Trim ring oscillator Trim_ROAtomic(); diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/gpio_api.c b/targets/TARGET_Maxim/TARGET_MAX32620/gpio_api.c index 2f745d7d9cb..b4f988fd2e2 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/gpio_api.c +++ b/targets/TARGET_Maxim/TARGET_MAX32620/gpio_api.c @@ -85,11 +85,10 @@ void pin_dir(PinName name, PinDirection direction) if (direction == PIN_INPUT) { /* Set requested output mode */ MXC_GPIO->out_mode[port] = (MXC_GPIO->out_mode[port] & ~(0xF << (4 * pin))) | (MXC_V_GPIO_OUT_MODE_HIGH_Z_WEAK_PULLUP << (4 * pin)); - + /* Enable default input weak pull-up by setting corresponding output */ MXC_GPIO->out_val[port] |= 1 << pin; - } - else { + } else { /* Set requested output mode */ MXC_GPIO->out_mode[port] = (MXC_GPIO->out_mode[port] & ~(0xF << (4 * pin))) | (MXC_V_GPIO_OUT_MODE_NORMAL << (4 * pin)); } @@ -97,5 +96,5 @@ void pin_dir(PinName name, PinDirection direction) void gpio_dir(gpio_t *obj, PinDirection direction) { - pin_dir(obj->name, direction); + pin_dir(obj->name, direction); } diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/gpio_irq_api.c b/targets/TARGET_Maxim/TARGET_MAX32620/gpio_irq_api.c index 07bf71e5fc3..dd00bea21d3 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/gpio_irq_api.c +++ b/targets/TARGET_Maxim/TARGET_MAX32620/gpio_irq_api.c @@ -233,7 +233,7 @@ int gpio_irq_init(gpio_irq_t *obj, PinName name, gpio_irq_handler handler, uint3 void gpio_irq_free(gpio_irq_t *obj) { - /* disable interrupt */ + /* disable interrupt */ MXC_GPIO->inten[obj->port] &= ~(1 << obj->pin); MXC_GPIO->int_mode[obj->port] &= ~(MXC_V_GPIO_INT_MODE_ANY_EDGE << (obj->pin*4)); objs[obj->port][obj->pin] = NULL; diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/gpio_object.h b/targets/TARGET_Maxim/TARGET_MAX32620/gpio_object.h index 01107a86afb..8281590e770 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/gpio_object.h +++ b/targets/TARGET_Maxim/TARGET_MAX32620/gpio_object.h @@ -30,7 +30,7 @@ * ownership rights. ******************************************************************************* */ - + #ifndef MBED_GPIO_OBJECT_H #define MBED_GPIO_OBJECT_H @@ -60,7 +60,8 @@ static inline int gpio_read(gpio_t *obj) void pin_dir(PinName name, PinDirection direction); -static inline int gpio_is_connected(const gpio_t *obj) { +static inline int gpio_is_connected(const gpio_t *obj) +{ return obj->name != (PinName)NC; } diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/i2c_api.c b/targets/TARGET_Maxim/TARGET_MAX32620/i2c_api.c index 2c5916485fc..ac25d699b01 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/i2c_api.c +++ b/targets/TARGET_Maxim/TARGET_MAX32620/i2c_api.c @@ -60,42 +60,42 @@ typedef enum { static const uint32_t clk_div_table[2][8] = { /* MXC_E_I2CM_SPEED_100KHZ */ { - /* 0: 12MHz */ ((6 << MXC_F_I2CM_FS_CLK_DIV_FS_FILTER_CLK_DIV_POS) | - (17 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_HI_CNT_POS) | - (72 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_LO_CNT_POS)), - /* 1: 24MHz */ ((12 << MXC_F_I2CM_FS_CLK_DIV_FS_FILTER_CLK_DIV_POS) | - (38 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_HI_CNT_POS) | - (144 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_LO_CNT_POS)), - /* 2: */ 0, /* not supported */ - /* 3: 48MHz */ ((24 << MXC_F_I2CM_FS_CLK_DIV_FS_FILTER_CLK_DIV_POS) | - (80 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_HI_CNT_POS) | - (288 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_LO_CNT_POS)), - /* 4: */ 0, /* not supported */ - /* 5: */ 0, /* not supported */ - /* 6: */ 0, /* not supported */ - /* 7: 96MHz */ ((48 << MXC_F_I2CM_FS_CLK_DIV_FS_FILTER_CLK_DIV_POS) | - (164 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_HI_CNT_POS) | - (576 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_LO_CNT_POS)), - }, - /* MXC_E_I2CM_SPEED_400KHZ */ - { - /* 0: 12MHz */ ((2 << MXC_F_I2CM_FS_CLK_DIV_FS_FILTER_CLK_DIV_POS) | - (1 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_HI_CNT_POS) | - (18 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_LO_CNT_POS)), - /* 1: 24MHz */ ((3 << MXC_F_I2CM_FS_CLK_DIV_FS_FILTER_CLK_DIV_POS) | - (5 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_HI_CNT_POS) | - (36 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_LO_CNT_POS)), - /* 2: */ 0, /* not supported */ - /* 3: 48MHz */ ((6 << MXC_F_I2CM_FS_CLK_DIV_FS_FILTER_CLK_DIV_POS) | - (15 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_HI_CNT_POS) | - (72 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_LO_CNT_POS)), - /* 4: */ 0, /* not supported */ - /* 5: */ 0, /* not supported */ - /* 6: */ 0, /* not supported */ - /* 7: 96MHz */ ((12 << MXC_F_I2CM_FS_CLK_DIV_FS_FILTER_CLK_DIV_POS) | - (33 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_HI_CNT_POS) | - (144 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_LO_CNT_POS)), - }, + /* 0: 12MHz */ ((6 << MXC_F_I2CM_FS_CLK_DIV_FS_FILTER_CLK_DIV_POS) | + (17 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_HI_CNT_POS) | + (72 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_LO_CNT_POS)), + /* 1: 24MHz */ ((12 << MXC_F_I2CM_FS_CLK_DIV_FS_FILTER_CLK_DIV_POS) | + (38 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_HI_CNT_POS) | + (144 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_LO_CNT_POS)), + /* 2: */ 0, /* not supported */ + /* 3: 48MHz */ ((24 << MXC_F_I2CM_FS_CLK_DIV_FS_FILTER_CLK_DIV_POS) | + (80 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_HI_CNT_POS) | + (288 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_LO_CNT_POS)), + /* 4: */ 0, /* not supported */ + /* 5: */ 0, /* not supported */ + /* 6: */ 0, /* not supported */ + /* 7: 96MHz */ ((48 << MXC_F_I2CM_FS_CLK_DIV_FS_FILTER_CLK_DIV_POS) | + (164 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_HI_CNT_POS) | + (576 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_LO_CNT_POS)), + }, + /* MXC_E_I2CM_SPEED_400KHZ */ + { + /* 0: 12MHz */ ((2 << MXC_F_I2CM_FS_CLK_DIV_FS_FILTER_CLK_DIV_POS) | + (1 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_HI_CNT_POS) | + (18 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_LO_CNT_POS)), + /* 1: 24MHz */ ((3 << MXC_F_I2CM_FS_CLK_DIV_FS_FILTER_CLK_DIV_POS) | + (5 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_HI_CNT_POS) | + (36 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_LO_CNT_POS)), + /* 2: */ 0, /* not supported */ + /* 3: 48MHz */ ((6 << MXC_F_I2CM_FS_CLK_DIV_FS_FILTER_CLK_DIV_POS) | + (15 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_HI_CNT_POS) | + (72 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_LO_CNT_POS)), + /* 4: */ 0, /* not supported */ + /* 5: */ 0, /* not supported */ + /* 6: */ 0, /* not supported */ + /* 7: 96MHz */ ((12 << MXC_F_I2CM_FS_CLK_DIV_FS_FILTER_CLK_DIV_POS) | + (33 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_HI_CNT_POS) | + (144 << MXC_F_I2CM_FS_CLK_DIV_FS_SCL_LO_CNT_POS)), + }, }; void i2c_init(i2c_t *obj, PinName sda, PinName scl) @@ -109,7 +109,7 @@ void i2c_init(i2c_t *obj, PinName sda, PinName scl) obj->i2c = i2c; obj->fifos = (mxc_i2cm_fifo_regs_t*)MXC_I2CM_GET_BASE_FIFO(MXC_I2CM_GET_IDX(i2c)); obj->start_pending = 0; - obj->stop_pending = 0; + obj->stop_pending = 0; // configure the pins pinmap_pinout(sda, PinMap_I2C_SDA); @@ -135,10 +135,10 @@ void i2c_init(i2c_t *obj, PinName sda, PinName scl) void i2c_frequency(i2c_t *obj, int hz) { // compute clock array index - // (96Mhz/12M) -1 = 7 - // (48Mhz/12M) -1 = 3 - // (24Mhz/12M) -1 = 1 - // (12Mhz/12M) -1 = 0 + // (96Mhz/12M) -1 = 7 + // (48Mhz/12M) -1 = 3 + // (24Mhz/12M) -1 = 1 + // (12Mhz/12M) -1 = 0 int clki = (SystemCoreClock / 12000000) - 1; // get clock divider settings from lookup table @@ -318,7 +318,7 @@ int i2c_write(i2c_t *obj, int address, const char *data, int length, int stop) } if (stop) { - obj->stop_pending = 0; + obj->stop_pending = 0; if ((err = write_tx_fifo(obj, MXC_S_I2CM_TRANS_TAG_STOP)) != 0) { // stop condition retval = (retval ? retval : err); } diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/pinmap.c b/targets/TARGET_Maxim/TARGET_MAX32620/pinmap.c index 2b0b75bfdf8..e10b0fb5b99 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/pinmap.c +++ b/targets/TARGET_Maxim/TARGET_MAX32620/pinmap.c @@ -30,7 +30,7 @@ * ownership rights. ******************************************************************************* */ - + #include "mbed_assert.h" #include "pinmap.h" #include "objects.h" diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/port_api.c b/targets/TARGET_Maxim/TARGET_MAX32620/port_api.c index 58dc6bbbf45..2c72603bb7c 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/port_api.c +++ b/targets/TARGET_Maxim/TARGET_MAX32620/port_api.c @@ -30,7 +30,7 @@ * ownership rights. ******************************************************************************* */ - + #include "port_api.h" #include "pinmap.h" #include "gpio_api.h" @@ -50,7 +50,7 @@ void port_init(port_t *obj, PortName port, int mask, PinDirection dir) obj->reg_in = &MXC_GPIO->in_val[port]; /* Ensure that the GPIO clock is enabled */ - MXC_CLKMAN->sys_clk_ctrl_6_gpio = MXC_S_CLKMAN_CLK_SCALE_DIV_1; + MXC_CLKMAN->sys_clk_ctrl_6_gpio = MXC_S_CLKMAN_CLK_SCALE_DIV_1; uint32_t i; // The function is set per pin: reuse gpio logic diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/pwmout_api.c b/targets/TARGET_Maxim/TARGET_MAX32620/pwmout_api.c index 5e6c8f14724..fa424ceda9a 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/pwmout_api.c +++ b/targets/TARGET_Maxim/TARGET_MAX32620/pwmout_api.c @@ -79,7 +79,7 @@ void pwmout_init(pwmout_t* obj, PinName pin) obj->pwm = (mxc_pt_regs_t*)pwm.peripheral; // Initialize object period and pulse width - obj->period = -1; + obj->period = -1; obj->pulse_width = -1; // Disable the output @@ -114,7 +114,7 @@ static void pwmout_update(pwmout_t* obj) { // Calculate and set the divider ratio int div = (obj->period * (SystemCoreClock/1000000))/32; - if (div < 2){ + if (div < 2) { div = 2; } MXC_SET_FIELD(&obj->pwm->rate_length, MXC_F_PT_RATE_LENGTH_RATE_CONTROL, div); @@ -142,7 +142,7 @@ void pwmout_write(pwmout_t* obj, float percent) float pwmout_read(pwmout_t* obj) { // Check for when pulsewidth or period equals 0 - if ((obj->pulse_width == 0) || (obj->period == 0)){ + if ((obj->pulse_width == 0) || (obj->period == 0)) { return 0; } diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/rtc_api.c b/targets/TARGET_Maxim/TARGET_MAX32620/rtc_api.c index dd9c402fc65..bf50d87b7fe 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/rtc_api.c +++ b/targets/TARGET_Maxim/TARGET_MAX32620/rtc_api.c @@ -83,7 +83,7 @@ static uint64_t rtc_read64(void); //****************************************************************************** static void overflow_handler(void) { - MXC_RTCTMR->flags |= MXC_F_RTC_FLAGS_ASYNC_CLR_FLAGS; + MXC_RTCTMR->flags |= MXC_F_RTC_FLAGS_ASYNC_CLR_FLAGS; overflow_cnt++; // Wait for pending transactions @@ -271,7 +271,7 @@ void lp_ticker_set_interrupt(timestamp_t timestamp) } MXC_RTCTMR->comp[0] = comp_value; - MXC_RTCTMR->flags |= MXC_F_RTC_FLAGS_ASYNC_CLR_FLAGS; + MXC_RTCTMR->flags |= MXC_F_RTC_FLAGS_ASYNC_CLR_FLAGS; MXC_RTCTMR->inten |= MXC_F_RTC_INTEN_COMP0; // enable the interrupt // Enable wakeup from RTC @@ -290,7 +290,7 @@ inline void lp_ticker_disable_interrupt(void) //****************************************************************************** inline void lp_ticker_clear_interrupt(void) { - MXC_RTCTMR->flags |= MXC_F_RTC_FLAGS_ASYNC_CLR_FLAGS; + MXC_RTCTMR->flags |= MXC_F_RTC_FLAGS_ASYNC_CLR_FLAGS; // Wait for pending transactions while (MXC_RTCTMR->ctrl & MXC_F_RTC_CTRL_PENDING); diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/serial_api.c b/targets/TARGET_Maxim/TARGET_MAX32620/serial_api.c index 105449bb7bf..82f5da39231 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/serial_api.c +++ b/targets/TARGET_Maxim/TARGET_MAX32620/serial_api.c @@ -92,7 +92,7 @@ void serial_init(serial_t *obj, PinName tx, PinName rx) // To support the most common baud rates, 9600 and 115200, we need to // scale down the uart input clock. if (!(MXC_CLKMAN->sys_clk_ctrl_8_uart & MXC_F_CLKMAN_SYS_CLK_CTRL_8_UART_UART_CLK_SCALE)) { - + switch (SystemCoreClock) { case RO_FREQ: MXC_CLKMAN->sys_clk_ctrl_8_uart = MXC_S_CLKMAN_CLK_SCALE_DIV_4; @@ -134,7 +134,7 @@ void serial_init(serial_t *obj, PinName tx, PinName rx) stdio_uart_inited = 1; memcpy(&stdio_uart, obj, sizeof(serial_t)); } - + // Enable UART obj->uart->ctrl |= MXC_F_UART_CTRL_UART_EN; } @@ -311,7 +311,7 @@ void serial_putc(serial_t *obj, int c) { // Wait for TXFIFO to not be full while ( ((obj->uart->tx_fifo_ctrl & MXC_F_UART_TX_FIFO_CTRL_FIFO_ENTRY) - >> MXC_F_UART_TX_FIFO_CTRL_FIFO_ENTRY_POS) + >> MXC_F_UART_TX_FIFO_CTRL_FIFO_ENTRY_POS) >= MXC_UART_FIFO_DEPTH ); // Must clear before every write to the buffer to know that the fifo @@ -330,8 +330,8 @@ int serial_readable(serial_t *obj) int serial_writable(serial_t *obj) { return ( ((obj->uart->tx_fifo_ctrl & MXC_F_UART_TX_FIFO_CTRL_FIFO_ENTRY) - >> MXC_F_UART_TX_FIFO_CTRL_FIFO_ENTRY_POS) - < MXC_UART_FIFO_DEPTH ); + >> MXC_F_UART_TX_FIFO_CTRL_FIFO_ENTRY_POS) + < MXC_UART_FIFO_DEPTH ); } //****************************************************************************** @@ -348,7 +348,7 @@ void serial_break_set(serial_t *obj) { // Make sure that nothing is being sent while ( ((obj->uart->tx_fifo_ctrl & MXC_F_UART_TX_FIFO_CTRL_FIFO_ENTRY) - >> MXC_F_UART_TX_FIFO_CTRL_FIFO_ENTRY_POS) > 0); + >> MXC_F_UART_TX_FIFO_CTRL_FIFO_ENTRY_POS) > 0); while (!(obj->uart->intfl & MXC_F_UART_INTFL_TX_DONE)); // Configure the GPIO to output 0 diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/sleep.c b/targets/TARGET_Maxim/TARGET_MAX32620/sleep.c index 311325d932c..146c20c9e12 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/sleep.c +++ b/targets/TARGET_Maxim/TARGET_MAX32620/sleep.c @@ -86,8 +86,7 @@ static void usb_sleep(void) MXC_USB->dev_cn = 0; MXC_USB->cn = 0; restore_usb = 1; // USB should be restored upon wakeup - } - else { + } else { restore_usb = 0; } } @@ -124,7 +123,7 @@ void deepsleep(void) // Wait for all STDIO characters to be sent. The UART clock will stop. while ((stdio_uart->tx_fifo_ctrl & MXC_F_UART_TX_FIFO_CTRL_FIFO_ENTRY) || - !(stdio_uart->intfl & MXC_F_UART_INTFL_TX_DONE)); + !(stdio_uart->intfl & MXC_F_UART_INTFL_TX_DONE)); __disable_irq(); @@ -187,8 +186,7 @@ void deepsleep(void) __SEV(); __WFE(); __WFI(); - } - else { + } else { // Note: ARM deep-sleep requires a specific sequence to clear event latches, // otherwise the CPU will not enter sleep. __SEV(); diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/spi_api.c b/targets/TARGET_Maxim/TARGET_MAX32620/spi_api.c index b99d63b6cdf..8c5675d6dbd 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/spi_api.c +++ b/targets/TARGET_Maxim/TARGET_MAX32620/spi_api.c @@ -69,7 +69,7 @@ void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel // Give the application the option to manually control Slave Select if ((SPIName)spi_ssel != (SPIName)NC) { spi_cntl = (SPIName)pinmap_merge(spi_sclk, spi_ssel); - // Slave select is currently limited to slave select zero. If others are + // Slave select is currently limited to slave select zero. If others are // to be supported a function to map PinName to a value suitable for use // in mstr_cfg.slave_sel will be required. obj->spi.ssel = 0; @@ -352,7 +352,7 @@ static uint32_t spi_master_transfer_handler(spi_t *obj) // Set the transaction configuration in the header header = ((write | (read << 1)) << MXC_F_SPI_FIFO_DIR_POS) | (req->width << MXC_F_SPI_FIFO_WIDTH_POS); - + if (remain >= SPI_MAX_BYTE_LEN) { // Send a 32 byte header @@ -367,7 +367,7 @@ static uint32_t spi_master_transfer_handler(spi_t *obj) // Send in increments of 32 byte pages header |= MXC_S_SPI_FIFO_UNIT_PAGES; pages = remain / SPI_MAX_PAGE_LEN; - + if (pages >= 32) { // 0 maps to 32 in the header bytes = 32 * SPI_MAX_PAGE_LEN; @@ -380,7 +380,7 @@ static uint32_t spi_master_transfer_handler(spi_t *obj) if ((remain - bytes) == 0) { header |= MXC_F_SPI_FIFO_DASS; } - } + } fifo->trans_16[0] = header; @@ -414,7 +414,7 @@ static uint32_t spi_master_transfer_handler(spi_t *obj) } // Only memcpy even numbers - length = ((length / 2) * 2); + length = ((length / 2) * 2); memcpy((void*)fifo->trans_32, &(req->tx_data[req->write_num]), length); @@ -450,8 +450,8 @@ static uint32_t spi_master_transfer_handler(spi_t *obj) } // Check to see if we've finished reading and writing - if (((read && (req->read_num == req->len)) || !read) && - ((req->write_num == req->len) || !write)) { + if (((read && (req->read_num == req->len)) || !read) && + ((req->write_num == req->len) || !write)) { // Disable interrupts spim->inten = 0; @@ -469,7 +469,7 @@ void spi_master_transfer(spi_t *obj, const void *tx, size_t tx_length, void *rx, // Save object reference for callback state[obj->spi.index] = &obj->spi; - + // Initialize request info obj->spi.tx_data = tx; obj->spi.rx_data = rx; @@ -491,7 +491,7 @@ uint32_t spi_irq_handler_asynch(spi_t *obj) { mxc_spi_regs_t *spim = obj->spi.spi; uint32_t flags; - + // Clear the interrupt flags spim->inten = 0; flags = spim->intfl; @@ -503,7 +503,7 @@ uint32_t spi_irq_handler_asynch(spi_t *obj) return 0; } } - + state[obj->spi.index] = NULL; return SPI_EVENT_COMPLETE; @@ -516,7 +516,7 @@ uint8_t spi_active(spi_t *obj) // Check to see if there are any ongoing transactions if ((state[obj->spi.index] == NULL) && - !(spim->fifo_ctrl & MXC_F_SPI_FIFO_CTRL_TX_FIFO_USED)) { + !(spim->fifo_ctrl & MXC_F_SPI_FIFO_CTRL_TX_FIFO_USED)) { return 0; } diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/us_ticker.c b/targets/TARGET_Maxim/TARGET_MAX32620/us_ticker.c index 747243e1e76..3cd72785bff 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/us_ticker.c +++ b/targets/TARGET_Maxim/TARGET_MAX32620/us_ticker.c @@ -72,7 +72,8 @@ static volatile uint64_t event_cnt; // Holds the value of the next event #define MAX_TICK_VAL ((uint64_t)0xFFFFFFFF * ticks_per_us) //****************************************************************************** -static inline void inc_current_cnt(uint32_t inc) { +static inline void inc_current_cnt(uint32_t inc) +{ // Overflow the ticker when the us ticker overflows current_cnt += inc; @@ -82,14 +83,15 @@ static inline void inc_current_cnt(uint32_t inc) { } //****************************************************************************** -static inline int event_passed(uint64_t current, uint64_t event) { +static inline int event_passed(uint64_t current, uint64_t event) +{ // Determine if the event has already happened. // If the event is behind the current ticker, within a window, // then the event has already happened. - if (((current < tick_win) && ((event < current) || - (event > (MAX_TICK_VAL - (tick_win - current))))) || - ((event < current) && (event > (current - tick_win)))) { + if (((current < tick_win) && ((event < current) || + (event > (MAX_TICK_VAL - (tick_win - current))))) || + ((event < current) && (event > (current - tick_win)))) { return 1; } @@ -97,7 +99,8 @@ static inline int event_passed(uint64_t current, uint64_t event) { } //****************************************************************************** -static inline uint64_t event_diff(uint64_t current, uint64_t event) { +static inline uint64_t event_diff(uint64_t current, uint64_t event) +{ // Check to see if the ticker will overflow before the event if(current <= event) { @@ -129,7 +132,7 @@ static void tmr_handler(void) US_TIMER->term_cnt32 = diff; // Since the timer keeps counting after the terminal value is reached, it is possible that the new - // terminal value is in the past. + // terminal value is in the past. if (US_TIMER->term_cnt32 < US_TIMER->count32) { // the timestamp has expired US_TIMER->term_cnt32 = 0xFFFFFFFF; // reset to max value to prevent further interrupts @@ -239,7 +242,7 @@ void us_ticker_set_interrupt(timestamp_t timestamp) inc_current_cnt(US_TIMER->count32); US_TIMER->count32 = 0; - // add the number of cycles that the timer is disabled here for + // add the number of cycles that the timer is disabled here for inc_current_cnt(200); event_cnt = (uint64_t)timestamp * ticks_per_us; @@ -251,7 +254,7 @@ void us_ticker_set_interrupt(timestamp_t timestamp) // the event occurs before the next overflow US_TIMER->term_cnt32 = diff; } else { - // the event occurs after the next overflow + // the event occurs after the next overflow US_TIMER->term_cnt32 = 0xFFFFFFFF; // set to max } } else { From 43576fc931d9b4be84b6615e5de1b850ec6cbd33 Mon Sep 17 00:00:00 2001 From: Jeremy Brodt Date: Fri, 9 Sep 2016 11:51:14 -0500 Subject: [PATCH 09/89] Fixed INITIAL_SP value. --- targets/TARGET_Maxim/mbed_rtx.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targets/TARGET_Maxim/mbed_rtx.h b/targets/TARGET_Maxim/mbed_rtx.h index 61a24f8b6d9..d719cae00ea 100644 --- a/targets/TARGET_Maxim/mbed_rtx.h +++ b/targets/TARGET_Maxim/mbed_rtx.h @@ -50,7 +50,7 @@ #elif defined(TARGET_MAX32620) #ifndef INITIAL_SP -#define INITIAL_SP (0x20008000UL) +#define INITIAL_SP (0x20040000UL) #endif #ifndef OS_TASKCNT #define OS_TASKCNT 14 From 137a0dd3da618113623c56e633d7005da76f6c42 Mon Sep 17 00:00:00 2001 From: Jeremy Brodt Date: Tue, 13 Sep 2016 14:32:49 -0500 Subject: [PATCH 10/89] Fixed SysTick_Handler name. --- .../device/TOOLCHAIN_ARM_STD/startup_MAX32600.S | 8 ++++---- .../device/TOOLCHAIN_IAR/startup_MAX32600.S | 8 ++++---- .../device/TOOLCHAIN_ARM_STD/startup_MAX32610.S | 8 ++++---- .../device/TOOLCHAIN_IAR/startup_MAX32610.S | 8 ++++---- .../device/TOOLCHAIN_ARM_STD/startup_MAX32620.S | 8 ++++---- .../device/TOOLCHAIN_IAR/startup_MAX32620.S | 8 ++++---- 6 files changed, 24 insertions(+), 24 deletions(-) diff --git a/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_ARM_STD/startup_MAX32600.S b/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_ARM_STD/startup_MAX32600.S index 02ece3a3cc0..e81ff572383 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_ARM_STD/startup_MAX32600.S +++ b/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_ARM_STD/startup_MAX32600.S @@ -58,7 +58,7 @@ __Vectors DCD __initial_sp ; Top of Stack DCD DebugMon_Handler ; Debug Monitor Handler DCD 0 ; Reserved DCD DefaultIRQ_Handler ; PendSV Handler - DCD SysTick_IRQHandler ; SysTick Handler + DCD SysTick_Handler ; SysTick Handler ; Maxim 32600 Externals interrupts DCD UART0_IRQHandler ; 16: 1 UART0 @@ -146,9 +146,9 @@ DebugMon_Handler PROC B DebugMon_Handler ENDP -SysTick_IRQHandler PROC - EXPORT SysTick_IRQHandler [WEAK] - B SysTick_IRQHandler +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B SysTick_Handler ENDP Default_Handler PROC diff --git a/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_IAR/startup_MAX32600.S b/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_IAR/startup_MAX32600.S index 740a9150b01..b68a1384f7c 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_IAR/startup_MAX32600.S +++ b/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_IAR/startup_MAX32600.S @@ -58,7 +58,7 @@ __vector_table DCD sfe(CSTACK) /* Top of Stack */ DCD DebugMon_Handler /* Debug Monitor Handler */ DCD 0 /* Reserved */ DCD DefaultIRQ_Handler /* PendSV Handler */ - DCD SysTick_IRQHandler /* SysTick Handler */ + DCD SysTick_Handler /* SysTick Handler */ /* Maxim 32600 Externals interrupts */ DCD UART0_IRQHandler /* 16: 1 UART0 */ @@ -140,10 +140,10 @@ DefaultIRQ_Handler DebugMon_Handler B DebugMon_Handler - PUBWEAK SysTick_IRQHandler + PUBWEAK SysTick_Handler SECTION .text:CODE:REORDER:NOROOT(1) -SysTick_IRQHandler - B SysTick_IRQHandler +SysTick_Handler + B SysTick_Handler PUBWEAK UART0_IRQHandler SECTION .text:CODE:REORDER:NOROOT(1) diff --git a/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_ARM_STD/startup_MAX32610.S b/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_ARM_STD/startup_MAX32610.S index e3c52cae9d2..f275aec5756 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_ARM_STD/startup_MAX32610.S +++ b/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_ARM_STD/startup_MAX32610.S @@ -58,7 +58,7 @@ __Vectors DCD __initial_sp ; Top of Stack DCD DebugMon_Handler ; Debug Monitor Handler DCD 0 ; Reserved DCD DefaultIRQ_Handler ; PendSV Handler - DCD SysTick_IRQHandler ; SysTick Handler + DCD SysTick_Handler ; SysTick Handler ; Maxim 32610 Externals interrupts DCD UART0_IRQHandler ; 16: 1 UART0 @@ -146,9 +146,9 @@ DebugMon_Handler PROC B DebugMon_Handler ENDP -SysTick_IRQHandler PROC - EXPORT SysTick_IRQHandler [WEAK] - B SysTick_IRQHandler +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B SysTick_Handler ENDP Default_Handler PROC diff --git a/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_IAR/startup_MAX32610.S b/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_IAR/startup_MAX32610.S index 518756c0b45..1a4c9f48627 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_IAR/startup_MAX32610.S +++ b/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_IAR/startup_MAX32610.S @@ -58,7 +58,7 @@ __vector_table DCD sfe(CSTACK) /* Top of Stack */ DCD DebugMon_Handler /* Debug Monitor Handler */ DCD 0 /* Reserved */ DCD DefaultIRQ_Handler /* PendSV Handler */ - DCD SysTick_IRQHandler /* SysTick Handler */ + DCD SysTick_Handler /* SysTick Handler */ /* Maxim 32610 Externals interrupts */ DCD UART0_IRQHandler /* 16: 1 UART0 */ @@ -140,10 +140,10 @@ DefaultIRQ_Handler DebugMon_Handler B DebugMon_Handler - PUBWEAK SysTick_IRQHandler + PUBWEAK SysTick_Handler SECTION .text:CODE:REORDER:NOROOT(1) -SysTick_IRQHandler - B SysTick_IRQHandler +SysTick_Handler + B SysTick_Handler PUBWEAK UART0_IRQHandler SECTION .text:CODE:REORDER:NOROOT(1) diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_ARM_STD/startup_MAX32620.S b/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_ARM_STD/startup_MAX32620.S index c9742a0eacd..f5e5a88edb5 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_ARM_STD/startup_MAX32620.S +++ b/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_ARM_STD/startup_MAX32620.S @@ -58,7 +58,7 @@ __Vectors DCD __initial_sp ; Top of Stack DCD DebugMon_Handler ; Debug Monitor Handler DCD 0 ; Reserved DCD DefaultIRQ_Handler ; PendSV Handler - DCD SysTick_IRQHandler ; SysTick Handler + DCD SysTick_Handler ; SysTick Handler ; Maxim 32620 Externals interrupts DCD CLKMAN_IRQHandler /* 16:01 CLKMAN */ @@ -149,9 +149,9 @@ DebugMon_Handler PROC B DebugMon_Handler ENDP -SysTick_IRQHandler PROC - EXPORT SysTick_IRQHandler [WEAK] - B SysTick_IRQHandler +SysTick_Handler PROC + EXPORT SysTick_Handler [WEAK] + B SysTick_Handler ENDP Default_Handler PROC diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_IAR/startup_MAX32620.S b/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_IAR/startup_MAX32620.S index 000a28e7ea0..4126ca15d18 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_IAR/startup_MAX32620.S +++ b/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_IAR/startup_MAX32620.S @@ -58,7 +58,7 @@ __vector_table DCD sfe(CSTACK) /* Top of Stack */ DCD DebugMon_Handler /* Debug Monitor Handler */ DCD 0 /* Reserved */ DCD DefaultIRQ_Handler /* PendSV Handler */ - DCD SysTick_IRQHandler /* SysTick Handler */ + DCD SysTick_Handler /* SysTick Handler */ /* Maxim 32620 NVIC Index */ DCD CLKMAN_IRQHandler /* 16:01 CLKMAN */ @@ -147,10 +147,10 @@ DefaultIRQ_Handler DebugMon_Handler B DebugMon_Handler - PUBWEAK SysTick_IRQHandler + PUBWEAK SysTick_Handler SECTION .text:CODE:REORDER:NOROOT(1) -SysTick_IRQHandler - B SysTick_IRQHandler +SysTick_Handler + B SysTick_Handler PUBWEAK CLKMAN_IRQHandler SECTION .text:CODE:REORDER:NOROOT(1) From c801dc6cf81753e42eca5e6e89bd4a60b70daa09 Mon Sep 17 00:00:00 2001 From: Jeremy Brodt Date: Mon, 26 Sep 2016 16:41:56 -0500 Subject: [PATCH 11/89] Fixed default handler implementations for ARM and IAR. --- .../TOOLCHAIN_ARM_STD/startup_MAX32600.S | 36 +++- .../device/TOOLCHAIN_IAR/startup_MAX32600.S | 36 +++- .../TOOLCHAIN_ARM_STD/startup_MAX32610.S | 156 ++++++++++-------- .../device/TOOLCHAIN_IAR/startup_MAX32610.S | 36 +++- .../TOOLCHAIN_ARM_STD/startup_MAX32620.S | 36 +++- .../device/TOOLCHAIN_IAR/startup_MAX32620.S | 36 +++- 6 files changed, 228 insertions(+), 108 deletions(-) diff --git a/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_ARM_STD/startup_MAX32600.S b/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_ARM_STD/startup_MAX32600.S index e81ff572383..a68ff008e27 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_ARM_STD/startup_MAX32600.S +++ b/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_ARM_STD/startup_MAX32600.S @@ -47,17 +47,17 @@ __Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler DCD NMI_Handler ; NMI Handler DCD HardFault_Handler ; Hard Fault Handler - DCD DefaultIRQ_Handler ; MPU Fault Handler - DCD DefaultIRQ_Handler ; Bus Fault Handler - DCD DefaultIRQ_Handler ; Usage Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved - DCD DefaultIRQ_Handler ; SVCall Handler + DCD SVC_Handler ; SVCall Handler DCD DebugMon_Handler ; Debug Monitor Handler DCD 0 ; Reserved - DCD DefaultIRQ_Handler ; PendSV Handler + DCD PendSV_Handler ; PendSV Handler DCD SysTick_Handler ; SysTick Handler ; Maxim 32600 Externals interrupts @@ -136,9 +136,24 @@ HardFault_Handler PROC B HardFault_Handler ENDP -DefaultIRQ_Handler PROC - EXPORT DefaultIRQ_Handler [WEAK] - B DefaultIRQ_Handler +MemManage_Handler PROC + EXPORT MemManage_Handler [WEAK] + B MemManage_Handler + ENDP + +BusFault_Handler PROC + EXPORT BusFault_Handler [WEAK] + B BusFault_Handler + ENDP + +UsageFault_Handler PROC + EXPORT UsageFault_Handler [WEAK] + B UsageFault_Handler + ENDP + +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B SVC_Handler ENDP DebugMon_Handler PROC @@ -146,6 +161,11 @@ DebugMon_Handler PROC B DebugMon_Handler ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B PendSV_Handler + ENDP + SysTick_Handler PROC EXPORT SysTick_Handler [WEAK] B SysTick_Handler diff --git a/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_IAR/startup_MAX32600.S b/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_IAR/startup_MAX32600.S index b68a1384f7c..15f2688348b 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_IAR/startup_MAX32600.S +++ b/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_IAR/startup_MAX32600.S @@ -47,17 +47,17 @@ __vector_table DCD sfe(CSTACK) /* Top of Stack */ DCD Reset_Handler /* Reset Handler */ DCD NMI_Handler /* NMI Handler */ DCD HardFault_Handler /* Hard Fault Handler */ - DCD DefaultIRQ_Handler /* MPU Fault Handler */ - DCD DefaultIRQ_Handler /* Bus Fault Handler */ - DCD DefaultIRQ_Handler /* Usage Fault Handler */ + DCD MemManage_Handler /* MPU Fault Handler */ + DCD BusFault_Handler /* Bus Fault Handler */ + DCD UsageFault_Handler /* Usage Fault Handler */ DCD 0 /* Reserved */ DCD 0 /* Reserved */ DCD 0 /* Reserved */ DCD 0 /* Reserved */ - DCD DefaultIRQ_Handler /* SVCall Handler */ + DCD SVC_Handler /* SVCall Handler */ DCD DebugMon_Handler /* Debug Monitor Handler */ DCD 0 /* Reserved */ - DCD DefaultIRQ_Handler /* PendSV Handler */ + DCD PendSV_Handler /* PendSV Handler */ DCD SysTick_Handler /* SysTick Handler */ /* Maxim 32600 Externals interrupts */ @@ -130,16 +130,36 @@ NMI_Handler HardFault_Handler B HardFault_Handler - PUBWEAK DefaultIRQ_Handler + PUBWEAK MemManage_Handler SECTION .text:CODE:REORDER:NOROOT(1) -DefaultIRQ_Handler - B DefaultIRQ_Handler +MemManage_Handler + B MemManage_Handler + + PUBWEAK BusFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +BusFault_Handler + B BusFault_Handler + + PUBWEAK UsageFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +UsageFault_Handler + B UsageFault_Handler + + PUBWEAK SVC_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +SVC_Handler + B SVC_Handler PUBWEAK DebugMon_Handler SECTION .text:CODE:REORDER:NOROOT(1) DebugMon_Handler B DebugMon_Handler + PUBWEAK PendSV_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +PendSV_Handler + B PendSV_Handler + PUBWEAK SysTick_Handler SECTION .text:CODE:REORDER:NOROOT(1) SysTick_Handler diff --git a/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_ARM_STD/startup_MAX32610.S b/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_ARM_STD/startup_MAX32610.S index f275aec5756..46700b23ae4 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_ARM_STD/startup_MAX32610.S +++ b/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_ARM_STD/startup_MAX32610.S @@ -43,71 +43,71 @@ __initial_sp EQU 0x20008000 ; Top of RAM EXPORT __Vectors_End EXPORT __Vectors_Size -__Vectors DCD __initial_sp ; Top of Stack - DCD Reset_Handler ; Reset Handler - DCD NMI_Handler ; NMI Handler - DCD HardFault_Handler ; Hard Fault Handler - DCD DefaultIRQ_Handler ; MPU Fault Handler - DCD DefaultIRQ_Handler ; Bus Fault Handler - DCD DefaultIRQ_Handler ; Usage Fault Handler - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD 0 ; Reserved - DCD DefaultIRQ_Handler ; SVCall Handler - DCD DebugMon_Handler ; Debug Monitor Handler - DCD 0 ; Reserved - DCD DefaultIRQ_Handler ; PendSV Handler - DCD SysTick_Handler ; SysTick Handler - - ; Maxim 32610 Externals interrupts - DCD UART0_IRQHandler ; 16: 1 UART0 - DCD UART1_IRQHandler ; 17: 2 UART1 - DCD I2CM0_IRQHandler ; 18: 3 I2C Master 0 - DCD I2CS_IRQHandler ; 19: 4 I2C Slave - DCD USB_IRQHandler ; 20: 5 USB - DCD PMU_IRQHandler ; 21: 6 DMA - DCD AFE_IRQHandler ; 22: 7 AFE - DCD MAA_IRQHandler ; 23: 8 MAA - DCD AES_IRQHandler ; 24: 9 AES - DCD SPI0_IRQHandler ; 25:10 SPI0 - DCD SPI1_IRQHandler ; 26:11 SPI1 - DCD SPI2_IRQHandler ; 27:12 SPI2 - DCD TMR0_IRQHandler ; 28:13 Timer32-0 - DCD TMR1_IRQHandler ; 29:14 Timer32-1 - DCD TMR2_IRQHandler ; 30:15 Timer32-1 - DCD TMR3_IRQHandler ; 31:16 Timer32-2 - DCD RSVD0_IRQHandler ; 32:17 RSVD - DCD RSVD1_IRQHandler ; 33:18 RSVD - DCD DAC0_IRQHandler ; 34:19 DAC0 (12-bit DAC) - DCD DAC1_IRQHandler ; 35:20 DAC1 (12-bit DAC) - DCD DAC2_IRQHandler ; 36:21 DAC2 (8-bit DAC) - DCD DAC3_IRQHandler ; 37:22 DAC3 (8-bit DAC) - DCD ADC_IRQHandler ; 38:23 ADC - DCD FLC_IRQHandler ; 39:24 Flash Controller - DCD PWRMAN_IRQHandler ; 40:25 PWRMAN - DCD CLKMAN_IRQHandler ; 41:26 CLKMAN - DCD RTC0_IRQHandler ; 42:27 RTC INT0 - DCD RTC1_IRQHandler ; 43:28 RTC INT1 - DCD RTC2_IRQHandler ; 44:29 RTC INT2 - DCD RTC3_IRQHandler ; 45:30 RTC INT3 - DCD WDT0_IRQHandler ; 46:31 WATCHDOG0 - DCD WDT0_P_IRQHandler ; 47:32 WATCHDOG0 PRE-WINDOW - DCD WDT1_IRQHandler ; 48:33 WATCHDOG1 - DCD WDT1_P_IRQHandler ; 49:34 WATCHDOG1 PRE-WINDOW - DCD GPIO_P0_IRQHandler ; 50:35 GPIO Port 0 - DCD GPIO_P1_IRQHandler ; 51:36 GPIO Port 1 - DCD GPIO_P2_IRQHandler ; 52:37 GPIO Port 2 - DCD GPIO_P3_IRQHandler ; 53:38 GPIO Port 3 - DCD GPIO_P4_IRQHandler ; 54:39 GPIO Port 4 - DCD GPIO_P5_IRQHandler ; 55:40 GPIO Port 5 - DCD GPIO_P6_IRQHandler ; 56:41 GPIO Port 6 - DCD GPIO_P7_IRQHandler ; 57:42 GPIO Port 7 - DCD TMR16_0_IRQHandler ; 58:43 Timer16-s0 - DCD TMR16_1_IRQHandler ; 59:44 Timer16-s1 - DCD TMR16_2_IRQHandler ; 60:45 Timer16-s2 - DCD TMR16_3_IRQHandler ; 61:46 Timer16-s3 - DCD I2CM1_IRQHandler ; 62:47 I2C Master 1 +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ; NMI Handler + DCD HardFault_Handler ; Hard Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD 0 ; Reserved + DCD SVC_Handler ; SVCall Handler + DCD DebugMon_Handler ; Debug Monitor Handler + DCD 0 ; Reserved + DCD PendSV_Handler ; PendSV Handler + DCD SysTick_Handler ; SysTick Handler + + ; Maxim 32610 Externals interrupts + DCD UART0_IRQHandler ; 16: 1 UART0 + DCD UART1_IRQHandler ; 17: 2 UART1 + DCD I2CM0_IRQHandler ; 18: 3 I2C Master 0 + DCD I2CS_IRQHandler ; 19: 4 I2C Slave + DCD USB_IRQHandler ; 20: 5 USB + DCD PMU_IRQHandler ; 21: 6 DMA + DCD AFE_IRQHandler ; 22: 7 AFE + DCD MAA_IRQHandler ; 23: 8 MAA + DCD AES_IRQHandler ; 24: 9 AES + DCD SPI0_IRQHandler ; 25:10 SPI0 + DCD SPI1_IRQHandler ; 26:11 SPI1 + DCD SPI2_IRQHandler ; 27:12 SPI2 + DCD TMR0_IRQHandler ; 28:13 Timer32-0 + DCD TMR1_IRQHandler ; 29:14 Timer32-1 + DCD TMR2_IRQHandler ; 30:15 Timer32-1 + DCD TMR3_IRQHandler ; 31:16 Timer32-2 + DCD RSVD0_IRQHandler ; 32:17 RSVD + DCD RSVD1_IRQHandler ; 33:18 RSVD + DCD DAC0_IRQHandler ; 34:19 DAC0 (12-bit DAC) + DCD DAC1_IRQHandler ; 35:20 DAC1 (12-bit DAC) + DCD DAC2_IRQHandler ; 36:21 DAC2 (8-bit DAC) + DCD DAC3_IRQHandler ; 37:22 DAC3 (8-bit DAC) + DCD ADC_IRQHandler ; 38:23 ADC + DCD FLC_IRQHandler ; 39:24 Flash Controller + DCD PWRMAN_IRQHandler ; 40:25 PWRMAN + DCD CLKMAN_IRQHandler ; 41:26 CLKMAN + DCD RTC0_IRQHandler ; 42:27 RTC INT0 + DCD RTC1_IRQHandler ; 43:28 RTC INT1 + DCD RTC2_IRQHandler ; 44:29 RTC INT2 + DCD RTC3_IRQHandler ; 45:30 RTC INT3 + DCD WDT0_IRQHandler ; 46:31 WATCHDOG0 + DCD WDT0_P_IRQHandler ; 47:32 WATCHDOG0 PRE-WINDOW + DCD WDT1_IRQHandler ; 48:33 WATCHDOG1 + DCD WDT1_P_IRQHandler ; 49:34 WATCHDOG1 PRE-WINDOW + DCD GPIO_P0_IRQHandler ; 50:35 GPIO Port 0 + DCD GPIO_P1_IRQHandler ; 51:36 GPIO Port 1 + DCD GPIO_P2_IRQHandler ; 52:37 GPIO Port 2 + DCD GPIO_P3_IRQHandler ; 53:38 GPIO Port 3 + DCD GPIO_P4_IRQHandler ; 54:39 GPIO Port 4 + DCD GPIO_P5_IRQHandler ; 55:40 GPIO Port 5 + DCD GPIO_P6_IRQHandler ; 56:41 GPIO Port 6 + DCD GPIO_P7_IRQHandler ; 57:42 GPIO Port 7 + DCD TMR16_0_IRQHandler ; 58:43 Timer16-s0 + DCD TMR16_1_IRQHandler ; 59:44 Timer16-s1 + DCD TMR16_2_IRQHandler ; 60:45 Timer16-s2 + DCD TMR16_3_IRQHandler ; 61:46 Timer16-s3 + DCD I2CM1_IRQHandler ; 62:47 I2C Master 1 __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors @@ -136,9 +136,24 @@ HardFault_Handler PROC B HardFault_Handler ENDP -DefaultIRQ_Handler PROC - EXPORT DefaultIRQ_Handler [WEAK] - B DefaultIRQ_Handler +MemManage_Handler PROC + EXPORT MemManage_Handler [WEAK] + B MemManage_Handler + ENDP + +BusFault_Handler PROC + EXPORT BusFault_Handler [WEAK] + B BusFault_Handler + ENDP + +UsageFault_Handler PROC + EXPORT UsageFault_Handler [WEAK] + B UsageFault_Handler + ENDP + +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B SVC_Handler ENDP DebugMon_Handler PROC @@ -146,6 +161,11 @@ DebugMon_Handler PROC B DebugMon_Handler ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B PendSV_Handler + ENDP + SysTick_Handler PROC EXPORT SysTick_Handler [WEAK] B SysTick_Handler diff --git a/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_IAR/startup_MAX32610.S b/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_IAR/startup_MAX32610.S index 1a4c9f48627..a350a9b46d7 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_IAR/startup_MAX32610.S +++ b/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_IAR/startup_MAX32610.S @@ -47,17 +47,17 @@ __vector_table DCD sfe(CSTACK) /* Top of Stack */ DCD Reset_Handler /* Reset Handler */ DCD NMI_Handler /* NMI Handler */ DCD HardFault_Handler /* Hard Fault Handler */ - DCD DefaultIRQ_Handler /* MPU Fault Handler */ - DCD DefaultIRQ_Handler /* Bus Fault Handler */ - DCD DefaultIRQ_Handler /* Usage Fault Handler */ + DCD MemManage_Handler /* MPU Fault Handler */ + DCD BusFault_Handler /* Bus Fault Handler */ + DCD UsageFault_Handler /* Usage Fault Handler */ DCD 0 /* Reserved */ DCD 0 /* Reserved */ DCD 0 /* Reserved */ DCD 0 /* Reserved */ - DCD DefaultIRQ_Handler /* SVCall Handler */ + DCD SVC_Handler /* SVCall Handler */ DCD DebugMon_Handler /* Debug Monitor Handler */ DCD 0 /* Reserved */ - DCD DefaultIRQ_Handler /* PendSV Handler */ + DCD PendSV_Handler /* PendSV Handler */ DCD SysTick_Handler /* SysTick Handler */ /* Maxim 32610 Externals interrupts */ @@ -130,16 +130,36 @@ NMI_Handler HardFault_Handler B HardFault_Handler - PUBWEAK DefaultIRQ_Handler + PUBWEAK MemManage_Handler SECTION .text:CODE:REORDER:NOROOT(1) -DefaultIRQ_Handler - B DefaultIRQ_Handler +MemManage_Handler + B MemManage_Handler + + PUBWEAK BusFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +BusFault_Handler + B BusFault_Handler + + PUBWEAK UsageFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +UsageFault_Handler + B UsageFault_Handler + + PUBWEAK SVC_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +SVC_Handler + B SVC_Handler PUBWEAK DebugMon_Handler SECTION .text:CODE:REORDER:NOROOT(1) DebugMon_Handler B DebugMon_Handler + PUBWEAK PendSV_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +PendSV_Handler + B PendSV_Handler + PUBWEAK SysTick_Handler SECTION .text:CODE:REORDER:NOROOT(1) SysTick_Handler diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_ARM_STD/startup_MAX32620.S b/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_ARM_STD/startup_MAX32620.S index f5e5a88edb5..31eaa0fc258 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_ARM_STD/startup_MAX32620.S +++ b/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_ARM_STD/startup_MAX32620.S @@ -47,17 +47,17 @@ __Vectors DCD __initial_sp ; Top of Stack DCD Reset_Handler ; Reset Handler DCD NMI_Handler ; NMI Handler DCD HardFault_Handler ; Hard Fault Handler - DCD DefaultIRQ_Handler ; MPU Fault Handler - DCD DefaultIRQ_Handler ; Bus Fault Handler - DCD DefaultIRQ_Handler ; Usage Fault Handler + DCD MemManage_Handler ; MPU Fault Handler + DCD BusFault_Handler ; Bus Fault Handler + DCD UsageFault_Handler ; Usage Fault Handler DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved DCD 0 ; Reserved - DCD DefaultIRQ_Handler ; SVCall Handler + DCD SVC_Handler ; SVCall Handler DCD DebugMon_Handler ; Debug Monitor Handler DCD 0 ; Reserved - DCD DefaultIRQ_Handler ; PendSV Handler + DCD PendSV_Handler ; PendSV Handler DCD SysTick_Handler ; SysTick Handler ; Maxim 32620 Externals interrupts @@ -139,9 +139,24 @@ HardFault_Handler PROC B HardFault_Handler ENDP -DefaultIRQ_Handler PROC - EXPORT DefaultIRQ_Handler [WEAK] - B DefaultIRQ_Handler +MemManage_Handler PROC + EXPORT MemManage_Handler [WEAK] + B MemManage_Handler + ENDP + +BusFault_Handler PROC + EXPORT BusFault_Handler [WEAK] + B BusFault_Handler + ENDP + +UsageFault_Handler PROC + EXPORT UsageFault_Handler [WEAK] + B UsageFault_Handler + ENDP + +SVC_Handler PROC + EXPORT SVC_Handler [WEAK] + B SVC_Handler ENDP DebugMon_Handler PROC @@ -149,6 +164,11 @@ DebugMon_Handler PROC B DebugMon_Handler ENDP +PendSV_Handler PROC + EXPORT PendSV_Handler [WEAK] + B PendSV_Handler + ENDP + SysTick_Handler PROC EXPORT SysTick_Handler [WEAK] B SysTick_Handler diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_IAR/startup_MAX32620.S b/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_IAR/startup_MAX32620.S index 4126ca15d18..6e465e3be00 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_IAR/startup_MAX32620.S +++ b/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_IAR/startup_MAX32620.S @@ -47,17 +47,17 @@ __vector_table DCD sfe(CSTACK) /* Top of Stack */ DCD Reset_Handler /* Reset Handler */ DCD NMI_Handler /* NMI Handler */ DCD HardFault_Handler /* Hard Fault Handler */ - DCD DefaultIRQ_Handler /* MPU Fault Handler */ - DCD DefaultIRQ_Handler /* Bus Fault Handler */ - DCD DefaultIRQ_Handler /* Usage Fault Handler */ + DCD MemManage_Handler /* MPU Fault Handler */ + DCD BusFault_Handler /* Bus Fault Handler */ + DCD UsageFault_Handler /* Usage Fault Handler */ DCD 0 /* Reserved */ DCD 0 /* Reserved */ DCD 0 /* Reserved */ DCD 0 /* Reserved */ - DCD DefaultIRQ_Handler /* SVCall Handler */ + DCD SVC_Handler /* SVCall Handler */ DCD DebugMon_Handler /* Debug Monitor Handler */ DCD 0 /* Reserved */ - DCD DefaultIRQ_Handler /* PendSV Handler */ + DCD PendSV_Handler /* PendSV Handler */ DCD SysTick_Handler /* SysTick Handler */ /* Maxim 32620 NVIC Index */ @@ -137,16 +137,36 @@ NMI_Handler HardFault_Handler B HardFault_Handler - PUBWEAK DefaultIRQ_Handler + PUBWEAK MemManage_Handler SECTION .text:CODE:REORDER:NOROOT(1) -DefaultIRQ_Handler - B DefaultIRQ_Handler +MemManage_Handler + B MemManage_Handler + + PUBWEAK BusFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +BusFault_Handler + B BusFault_Handler + + PUBWEAK UsageFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +UsageFault_Handler + B UsageFault_Handler + + PUBWEAK SVC_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +SVC_Handler + B SVC_Handler PUBWEAK DebugMon_Handler SECTION .text:CODE:REORDER:NOROOT(1) DebugMon_Handler B DebugMon_Handler + PUBWEAK PendSV_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +PendSV_Handler + B PendSV_Handler + PUBWEAK SysTick_Handler SECTION .text:CODE:REORDER:NOROOT(1) SysTick_Handler From a72f8207fa602c2d13025cf34f8a1ec41890bd03 Mon Sep 17 00:00:00 2001 From: Jeremy Brodt Date: Mon, 26 Sep 2016 16:48:52 -0500 Subject: [PATCH 12/89] Updated BLE libraries. --- .../TOOLCHAIN_ARM_STD/exactLE.ar | Bin 0 -> 2802216 bytes .../TOOLCHAIN_GCC_ARM/libexactLE.a | Bin 970456 -> 1187986 bytes .../TARGET_MAX32620/TOOLCHAIN_IAR/exactLE.a | Bin 0 -> 2799426 bytes 3 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 targets/TARGET_Maxim/TARGET_MAX32620/TOOLCHAIN_ARM_STD/exactLE.ar create mode 100644 targets/TARGET_Maxim/TARGET_MAX32620/TOOLCHAIN_IAR/exactLE.a diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/TOOLCHAIN_ARM_STD/exactLE.ar b/targets/TARGET_Maxim/TARGET_MAX32620/TOOLCHAIN_ARM_STD/exactLE.ar new file mode 100644 index 0000000000000000000000000000000000000000..552ae00492cdbc1ae00aa692ebc212895b939282 GIT binary patch literal 2802216 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 wZr}3V+ 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�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≦~mH6ihqu)w=QepI8iGQJROyOTD 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

<@*^Ds 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

6cE7(r=OvdhaUdx(ad6G{ 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 )VgZ0t8`4(?32A}Si z8B_3T3?A>3AbIr$4?{7K*JkiA!~%J@89WS$KwiJWV|#S{Y`g6kct1nF4tm_P-+3K% z*o5ynn~Z^`d5pnJYu-14?Y1NEG0S_ta9wTvisgCE7w)c-rF(YU>%=v#-L^ZuNHj?U9N4Dw%us!JXm)xXpKwjZb(^o6N!oR-tphq8fp91)|taO z?71Gh>_`>3;Wl#2HQ3XKD>{l=6FWr><|ZH6zjNZyfx99#7fmj>E0p+9KWj!ia7ctF z_l$jJ=j^7?@$S*|k;@YY(otA~Yp|kwx*@iz8|TkEDiYnJrzX>$%{FuR5-Gd(P(rp* zRK?u*a`DlB*!lN+KE3DVJ6Xc#?+hhE3t~t2k47e)1;t0hRi7UH?C7S^#3*Y)#({~N zL)D4>!=IlhlD6q2%8#J@&_UMVBx<0qbNcX%HIddD)t;DSd*vo-MlUmL*sS@ldfu+F zBDq$5`f$0gAID@rR+#-*HTTds`mhXr*pqi3=CXSiwS{&Rwe8wkTeWM~v%5r9X!P09 ztQFjC(fKb|SO=I~wSP

M-T=C>D-IVnwmy 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%0D>)no&M3IVM*r+Z2eX~~7$g5i=J&Yui+2n0A%%aR zG0MB1G0NdMh;PGM>x@Bqj`1cTzQGvhzr?s#h?f~}gpUK`ZurJBPNDx$9(i*ZqrR1l zA$J913_9LttWS)5r1Sc*T^)#ZJ1Ws`G(|X#YHkEBs>JOIS1G();l&DHtuW?#Nd5|i zYZbmm;TnZ;Q3hEKI#cqmRd}Jon2;j#>lA*c!dEJcPLuhI6n>Y&xOh??29?a8ukgDS zUZ8M;!Wc}F-=y$m3O6f!mBK3(UZOB=N+~~~Fb0prmnytUVRW*T-=^>tX!PrzYXYru z*C^&>U@0s)K|@UuVe(MRSgIHE9E>FF%+lF2FpPD!T6+ctQ+@ud8&Y>>6FP^t^sepQ zep;G3KTB*LO!aKumd++LZX4~FJJAfM1_zd)CXKzLm_#z1>Kxc?u#l*#!&xHkd>5A- zP(_GQIn6`q!CYrF_iXM>ot^{vx2A@hdj@-#o_1C?uP#?!;7QEzpRuNA3{y)|L+Q~G zpQO|Kr+2iuKh=9jmVMgfou1*L4cj-RHuR@@`clJ~!QpnyjaxRSJfKd;HR{6+JFqdC zM5k{{jf^IfIDK$nqu?N57h_2^9Ii@jP7Pzxw2sj`2%BX-o6%g?i2<}!CVH?=U;w3? zH{Fi;J3XnMjRPBoQbWDzJB^t@0n>uA^Muxnkd4_wYkRO@n!8~TE2Iuvhf^ta=*}Yo zqiNeFnY?m{rEl!%y@P`oy9GhYs?=!5mfoJh_TfAH3C$xih3m6*rAFKPyzPY~y|J%v zc-@_8z2%UXCgdetTHlODHTCr{+OVNd<=i63M35+39>NoJN+<3Xkb~4x7(?U4*~!_VZq| z%qO^ibwpIu^T~X(OvK~9j`+Ihn}-(z)&bcvybO}b!`CwT{a{$-xL)feSAuk<^4 z^4^EF048+h5C_%o@4*|-gST;Re)DMm1-#vP$lH#Il8@!Vi$m#=Pdh#W-e?~3im?Z3 zKJq>cUOw_1JpA(EZ3i!(e)&)E@~Pi__??}Pykh+R&ZmBNfj6E<|NSR;xyt=73^08! zQ_MK@Amex@ydTGW{zmXA!-wmVlpyv3ZkPlB)C}@`@?!XKeGikD0FURBhexKAN8ZyG zuNJ%pq?1QkTHdEDUK%_MRmsDn(BnO5@g~4yIg}SQcptKO`wSlWy4)Kr-s1+3?bE#F z7H>azd@r!vxWSue@g~7bD4sd58ESf8|D7~=d|c{se~M$XpUY~p{bJ5*{+`9F0Z;b} zpXXZMa~7`_Jbm3}8N5HVcnt=Rd@b*j7O&Ib%{F)sTfA=Y5=dkJ&A~^@yA#J|d&j{` zD;}m`d%O=?ypu+`6$bAHiwARz*DrYVd-9fByqLkmBi-Z8w|HgX>HfnbGmw`sc+?Z? z_S*7l4IUnGfxHHTheuK%uhZb+krc@5Hh6f11oF}b508*Q-nhX_Ou^e{@T#WZ?KgPU zQ}7NNJoar+KOZxA$tie~1`n#&KzSz&9#qDGypskGw|pRv8?@_jg`pkDD>HZy9mq=< zJRAn{Y7HJ#*MYnSgU9dNLH*om@SqwG!5jz!Q&%Eh7ZGjz-NgLnup)K8-{uYHtPi&y!|+_8hNh$IO~=zUzYEB4cGHR z8T)az!GiXcG0wJ*RhLxXm&QIHTrV6mgB!%(Ws=8AUlCp8!fc{3J9j_=D{ znfQ1UR~E+%)uR+RV>Qok!0yacEUv8=3nNEGBE1T;-xG5%3%KH_Q_Z>C#|9F$dfo9* ztD|SIN*V5&B0Rrme0)Ioab zqnUW(ePjDFq4D<0`+gd8_GUtf@{Ds;S;qMd;!+&{?D!9Mel!z3cJk6)KP?UY=cWI# zHFByvyy0Xx^jn$GvDUHn%Dq1=F1-)OIP=>$a|^M9H_&7qwn1SKkP3<^EHl(vixUr(&_0r=lWU^#p2; z`s`ynN}Q(jJk%WZ`4o|mt=LgHd};Bi;?mfu;*!{@BAoNVvG^3C;fWsoKb)F>%Ee3o0jZ6%t}$>}cjl4c0oy9N}6Qak=h8?Og+{iCWD3 z7kaIe1?j|xSWe~$OT1#E8;1nu%Zm#qzn6Ke?9Vg%u=>d5X|98Ea$^7P+OgfZa#$q= zDK+>k!RM-U=E(Olk83V^?Z-c6MY*;^(WUz`i86OQJcgsTi=RDJ7Gi0SWooe&M_n2B z&E0?h3z?S6{E`PgzB+V(cQXxAvpOxJye}`}C0ma=!tAbvE$c zkZWSh|4{QGkw|QudsnI)%t_39$GQ{6Ri93CJ&6TnRpV7& z8BwJ6-1UR>zsTOv4jxhvAXsFihR9cBI1lLK?;(F*R_ zz$cw6=X{>`?!I%TY2v#SUYPk_nE76q`Cgd$UYPk_nE76q`Cgd$UYPk_nEC!zocS)l z4EMrn5S=~SnLT56Y_`*l-w)G0&5O!u9jFLyEWc;>xtd}|MW+s%a9~We!YotaZmNLv zZhWS@9}*}-2P*uGx?t}>R%NPsOwW`z8cMqHIhSo`c}ClZ&fNCtnF9T!tjD>Z0&R}T zzegRcX^$(*N1cK4yUxvZG3)XjS(iI^M;|DDu;`)4M0gMG(pBZd&Iily>_*aJmpg3b zNB;lzz6CI@;yicu>`Gd#BwKz314dcf3lT3P3EK!lQtOEXHW)v^BqUy0Ub6~*ERqZ| zafpl!7(x=$ke0Mb>-Lgdk~FtAg_PWjYtxbjDB+rfq@*{=gVM7~o*%%TGY>YZ zP6_14RCNGj4V|dpQvQv?((xAoj5T}$IIf-w;A-`)0LB_U0bHYgKY(l1Z2?@Th5{J< z7r+zM)d5@|m{-ery}^04Cpq(Kr#tg%Pj=?jp5n}_JylH$=yhkP--t36{S#5AsTTvd zL47BH->be6z)AJF0G_Ef1@J7jGJt0*+TKcl&PSaSz$rB)fZwCOhW=sF{rGtpzjqj% z*0@e>G?-)3gH>gn*?%YSB+N_IJ7b&UYmzrrbz^*xvH(BM<83vVW0v!H&or2P&f}e7 zFz*qZ$6I4C?+Kj8`)gA_?*Ws&O7*hAyyho+Rq7`O`~0|i+F)MOlf7#7-wft8JlRXA zFBr_%0M6UZ8tk`kqPixqf4%xw@FZ|vC)*)`xNz@bc|p5a;y)KMV&X44_|p#F>fm7q z4>xo@z1xH^zF$Q$C=*ej|)jB zkLQ_~_8^IsK5l>kAI~4tS)SKv%IkvtFmZ>OKfA)r8~u>kA2HjXK>BlxSHbp={G>l0 zH*vL6*i?yY%zRSBO~goloH6*^k9>}o#B#GA;&V*Cw2O8u{x;ws-BotW+8ywGKg z(`J6@wdQ(4KF2xdlXCneRx8zwxB(}voft+Npz8ihBW8J^C~u~3GtPQ&XgWV@^4FUD z$%t7WG>57IwUF?hDYZ3dr# zPIz1MKF!>|{M1P<^VB!or>D&orXV7iHD6si+B z;jY)3L&`}qORY(f#4@=sUq>NPm`m5?>;`07X8o|5!xgaR6q{*@8B)U;J&myRyvqFK zT6=or+CgW+BW5kOW%MjaX}LcOQqOV3iCL1lZeVB_Gd#_yqNjyXO36Di5LHeBD)%jDbXFBOwk@M$rN+@QJF3hZ7wrZ`OAG)g4 zY`>C|{la;Osg{zHG+Rne(rhj{7qhwKT+HU?<7S0B46MRcrsu=SOl1uMcQQ#S+{JW? zeFxJC_T5V-*mtf%g1Kw?3H}``zb$twCxLSW3pXUaa-*H#=N9fxIxl}`GRVFw^>4`E zjSgRi4_%|@{uya`+vRvn=o#25!pC<<%beyW73B?#|Khxcb7@V!NX@TNPwM?v6wjs)RF9p398^au&D@cs$gpyrQ*?LAP0 z_aldw!pqe2MR-p-y#EUxUJ>#^>V3%JwML7tJNU;AZy|Wed})Q_xXa&Z^$W+ymM;{M7D_`Yk1O*Z@}=`qUpAihu6#e zHu1N>+sq9Uq&$~54==}e3kh*4-ecfxFN4>MNgKmu@b-XLPI+BZi_dRzkK;-3$~lhZ z)5_z$2wpku8^A|jIlM#QmD4X7%>OHg_oFg-i>8-X-eYC*=AEq6Xp!@q#=wy=%IrtL z%i(6tZ#e!q?s2pwS(*H+e>3K`*H{_=+71o(8F>h(!+!o|8y!kq_X$sD)c}tVk zMCDx?^=I|$m6oBASao(9=77+8zv58bi!@Hf3VxM)>qlxDb9?-C@uHmLw5MX`$%EGn z`m+MOS-xF=J?1aGhPeZNdB?LYzdjG+WXjL7Lreb9l0UTM4=wpaOa9Q3KeXfzE%`%B z{?L;DM6~4RyYR7J!_LD8N*cfMHU#EZrG!pwScbsY7^D48N@mjdjdxpYNi(HJhlfG= zU_};fCO24^61}y+g*_uGnD03_8nDr#%^l^15~7g&*}nLr_(J}yWa{|P8yhVQzZwCb zgb`?6Is*AsY9Y#J6+F8h{`DEmHq$2S0)u%bXoGbjVhObInIix(@hk^ZrX-=5O%P>; z4fxJxPh%+rEwl0<*kXDD0xZf@aMrcXsR6=+EO|KnYZ*g;s4;fd7=l8L(Rhtn$lI~; zxO~IXhqNplj9Ei5iw3`#f&#U;U4w6%;QL}OX`CR|2yfL_a!H@R$CuXH zJt10C>~^nK`N|n8?%8#{zJtD7l)G1AnDQFraAly(cdFj<|A=_(lYlm_2bkBb1levy zg3Y@WnAfia;cY+yc@lPDL+WChY_Gw#&AS)493Pi|h3j&d1(_gaxVozrT=#bi32`aj zUx8PwJeafv`e7~v=!;PZ<=-Mp=k_A}Y#IJG+-E4GW*Y0{@!}Su``_k$(c(cSndi;M zw#|D8Jl4ZBo=Yjum%yI)(cy-sI?4P>p}{}Em`Y%u&UfK_CD>+27XRvjbi)B z5lC1eccnj=eFL@K>QFLLKP#Q3+;wdC=f~bxADb0T!fbf&&vH9+_4_|RHm82#WxX?= zeDF4GotpjdrZ2!}%g=J&v(?ELa&^g_xtZOKc@Hfw5BS@WLru}hp?c4+i;c=XT-#mI z9hpVHMU%9Y*Gt|8pE$l}n+4j((}BK;I@Z3d_CzQJPR0l8dZO7s9Jy?8_NGq__HX*T zK|G!|#fNro>KS@r(~cXqXAh*e-`RNU_K!a>TxbVtWSz0@$f0WW;((Wpot{|Lp1pL{ zt=YR)?aMx~3jTN&`(Aub4%VsESmeV$8<=u^G`;ltj`ZiQ-%wr<-?l#P=tXPvoM>?K!_5Z&&@E z$k*UO$au$z?PbcB#$w4Yjj8$qM?JiCS45wy-kU!?7So=d=!2+5`yk5dy`#I-9v)p? z_vq%nTh8iMuSBBB?iUAm7JdIb^yPE5a=rBU`z+Wz^Ond0X$NKM6C7_oxrgbGiKV?b zK>u0s(R;_vQT4t*uw*3p;=mI(&D#9JCvI(T-CK`(w~Qs#PP8Pxp#ETF;`F_hNpC;v zhnJs&9&kMQt7o})!`_5$7bNvX+t)-dMVnvy#BIBFqU2b2Z+2FrvgSF~v50 zzR;GLk(r-I`#z@ITCuB1YXFX8`MDHCkEQPx$ddAbLgh4m<1PNDa7aQUHrl3q@-q>1 zz?D-zc}(hOof6X6Fus%8r)>UEV#+OTH9h{{DYqbx`QzOmNz@_XDr{I|A$u&xg5574 zbJ~&j>(uGDD2@E_?iU)8N@&MM+mugii{1wRIh|8RK0M_U$Nb!k=r(NL7P~EaJ6f^n zSe~1tbOhqL!FF8zAJq>3+RgXJmC_EYsj~TrsBBT*dgzUtEleqK5PRw-qKSZ7Un1d@ETVJ#!00%@L z9zPG@D)oZ^j;p-^T&=zyzzJ1hVfxs3RfNqbKLUH(X9Kui{bc}8QeO(-$!co=Pf-H_ zJXKv0z|#Wy)CgAQ=6W^~BC1YtUYmpnvMY#^=Mi#y7(Ul}eJ|WPD3B`{%#m zVqb~kfj^7+;PJdBkgv-{KHHl>`R$BbeV+}9`KG)%zTPhZB|D1N?U+Cwd?KU_t|Uge z!v^#C67bQW>uXU8RFyc-=)q?iJva_7i*yeptrth38bgt!G4$&iV}gao=oF1HkwRlA zk~GG1PGjhsG(OE>ObF4q!C*8>W9W1=f2zSrgQuY}Z$~dbpx3m%-c0H(_(jm^ncVC7;sf!yEpqAiDvrNc)O&~DtD`YdUF1bl$XJOM? zY}O!IY8KFVoxql?GAk=rbH(a)Ie07xEMRRz-(drMGuR7I``g+LgE_xN-7;_Fw(3!r!Y?dd1`UsauvVyR74~ zP9K)N05V58T!zTCt1UQmntk0`ss1&aPcYYO9=q3SAVaRx!xDLo781?%nNKKOn}sCz zx-4o}BH!ij62p=Sc-ZlI$7coupFQ^T(9@|({R*+oTL_#pd5max!0(yUXEmt;2K?-sc?N&%tXf!uzDdn}CXV%o3ztzN^{oYez=0@)kS1 zkAcVcE(uZ|9^--Xeuj*8At4stg{YMEO5nS;^cmA+oBd_;8o?_zH{P|QS&rxOb}1aO zl;QGz0-k-|O7X75d&6iMZTUwHKHTsT(epCfya}I*G4tl-}K)z!L#j#?wju09dTYQ&jrUp9KV0X&*tp}FNrkr zSdZ|2ifx;>546PT|w0P{FQswQkc(_zb^7dIgTmmI|`z;_OdU;`(Ae%gPn|BSqSMIeEgvS`kIobc0_)ht# z0K~$>OYFePp><;3_NH@*FPPifTCROtmIKeSZ+kCRsgL%0J&%puhxx-gFaPJbwgF=Q zjh6`!$__1nLJOeK0w}Zq3N3&_3!u;fD6{|yEr3D`pcB#p2=BuE`7eg?*+_7PC3Kik zxIID*kw{%aMWSj#rJ9J(c7Dm?JKxh^s!@Ks)x;sfQ|fB@u^q3OT8+Z_9j+>Crq$NGXM(DYa$+w^uBog|NOch`^!(0*G>R#13Nk*+ z_UL1Cn*LMk`;_(t_L>*`5`7-|h5aJxyM}))%8B9&SulG)3Xgn(`JGLDykMS#sH$>s z+`-ijPB^&6!L<&qbMS;b<|&TiOiFur4x{+m7worxQXc#5pPa{(-9*)tJofjWs{Y#Q zKiV_QurTchCRqIyL4RSq>cH|MDDO2RpksXzOmw4uoq_!offVSk1300+7Ql7tcLR8W z`lP`;o(Rsz^#-%O5ghM_4EF1*RNVpoB-LWDUw@4{Er4rPbpThX|6_y|K0mJh(O~vB z?IoTTVTQ)j)ZZA)_HfOO$I%~5;uxd-!fuOC{kUyULHt=K{}T?j=f9J0uQ5W*`Q;Lb z=Q}v*;93X&T6RXv{eSM@=N$Zug=v5AO$&4XFFW}69K6-Rd7%-~x&Jjz{$&n^ia#I7 zZ_Fcqf6BQeFyA^{ZI8h7gwv$uV%`Nl)0^YV#=LWU`6}%TH1B-FJI}Wp@S1%2rZ?ZL zInk_ClI6Ad_5&US(QJ=*mcM3&ceXDl_Hc3V`tU9?YiqQcwKZU;uz=|}s7}VPljvc5 zAE`$ca=GRVBf);DvLTYm`wFr?( z!ot-5jM-sP-$>i=aAsX@c*vx5tj+YT-ujD+uoQn5wWSt!rP?l92=jz- zHCR}R)9YXDh5JAW)xUlrf0t`4T$*V7u_ntC&Gs@)6DwEd;o~;ut)ql<4p$qe&6z>Dzm2-X+M@T@4<` zw1iUQ>OQA^!o#aUeoU~8`@tKQ!mPX{*p{)(?CDVSHlYx_n&@{amRFBo2Yz;c_26Td z>3rW~pOD9Q6SmprtpM*4q>)EXDPBDkvwWu^&(_hp<&7Y7y5UW=%EPNwpxzzeN&DE} zQm?Cf-3i_h@+HXmb#<>(P}%EIVHNt8d?e>2rwWZLp?e)H>RV)9GTEe+tp4BTrl$Gx z=O>fRO|A2NN6v5V$GLHquDybN#j`dKE5Q|fi)cR|GvQyPo_g3~zC|8@Z;?4_V()?( z`{+qTRc9~V6q~uD{l#4E-nwM8q#u!b_z`Kc{D}PZz?EawzcXdkW!a^xK9&94swcD0 zu2QJ^Y}8E89OCaI=U`vdDJhEvYW8yzJaZ~>bjHP@_muK&^P@r zBD3iG!uMA4)$EJuuiiQH)~|m2Plg|WUycfOfZjP&_T!%(t5gr*ZO8ahxqyk`t3-=lSlbJHx4h=_qHLvHVzET>Q3tZ zIWQ1Al=SFxqrQ{<<$GyyJ*C8E!B@)JuN>wp#rDHe|M0E5V%@Ns9-DIBsh3WHCzp;~ z&8Drn%QpQ@ZgO_=Chvy3HnrdIs(pm`eoDkMOk)3YV^h@j^h0AOsqI_R zw`?Es^NaXV(Ib^(F#=CB?^Ctiz87)dyG#u{%Op4T4BBnwIq^pd#=)C-KbZ;dCtKj7 zByM>>Inud_?pJ${>=DI1JG%MmIJRRj_oDGJWbg|QEg3>fhR~8Bv}6b^8A3~j(2^mv zWC$%8LQ94d(2~J_89w&DOrQg^{Z}jzp8#p37dH~9@~WcoSiB-$8Lx`RmK-Rf0s^{TdcRkwLnw|iB0c=7FC{7x@^mlyw(7r)z!f7*+G#*2Rz(j;48 z#)$)^>l`1$1PY=`*ZIyJXA1R57{o^2FGk0dn?IJA@`<*ZUU2tLlEDLpYf#v z7bYLpUQ|8`FDhxImw)c#IQQ{UFTTZ#-|EG;dhu;u{5CIsyB9C_+(Xa#7VA8^@kW85 z1n79>*jHf8Ka&P7|Co=i{zj=B@m2U)eq%oRAK|YhX|-onus!RK<$b_zhtn^|)Sr&s zj?V=9!!vGlj>$N++X0&gdz>tj^MYhI{O@QXg*H|HYGF#EgV=L$R2>AL-S3B}lOJ<% zg@Y>{T;<@ngR32!(Dn0{<9ypfIP^xNg(GT`;=El6w9$H9 zlnzLw4c9*e@Km)gfTyXi1n_&*-2r@(vTc?k(3Y$SEijMFPM)p#{SgbB|4yIN6hj#z7n0LTwt~<0h=scE(Xsz#L!{2FmCnrYzu*th!$IHciD9j+Z%c}w0n_4&>=ba}A98nk<+q?O!T z@?Z1TT-EUKJDL~w4G#M@V;hIF>@A!g_8+XV2G(C^OxfP5Hya$9Hs!Kc^TBre#x<5> zn~qg|{nvMmWcpR-y76&j(^|@6?fjA}0fo+Q#@UuEfAw1qsZsm?S^6wZy^ZR3JGz{Y+vQ@9zgmGizoH| z9BFp@9tY;TqXgl77YR1+x4?YXOAy|-kYMw20CR+dSa|n4ygveu?<^98w;c&~d3=9g zB_zbc+u-n4AY;_xNxv*{c+Z2!cOnT=9$r}j^~Uht`xzl2mh!sM9=1;ceMU$g(`5St z4(~qj%JIYVZ5X<-42-VflNZbuos?}ArO`w3yc5Tfj#p28-pL~-uzB0TOCp&(3^83Ec|XI?<~;x&>mjcKKPm4?hxdq8 z9`9kod)VPUZZMe21$R^K?&D(=-(mGaVg76rFmy`6TW*)&-m40r{^S%Ex&%I#og)QgL zYbs%@dck~Ss#?Z6c++`MMg0Wb`~Q=lph4|tX}rwqLO(%s&dY|@b)j`#Xk8at*M-(~ zp>2Kj^ ztTL)Uc4HNlF@DYZ{)1{NDUqnGqP(FdPH93-HNRnN67Q+2rO+T=b5h=aP;Jfh%9@iW zs5mri2j2lpJyNn=~WO{=dsUEI2itHO#Oa-t%K_vJRy($`X=Tv6u~pb;GU``0PTt{HqhL4Dg`9uNHo?KYV0rESShgL!@;*z4{9f0DY%V86UtwaQ@j zA7%@xMFCu`E)3v_Drqq2;7?O08O-|WFDPL!`*V^vMNLKjQBJ}!Mq8IL5uRwQ)JqQj zp@ScH@V6Xn+wRcT;&V>E>woAvCx5Af+Z=qZgQ@G0!1`?49^y(XpSCIgBxJu?VDH$(*r!khXVg3Su=)ZTf<-%ykB z+cRIOB-5LX-<}p<9!$SO=P(_O169%Q5XTe!4zWtF!}uGzP^ksP7a4y;Fr?`rZdbm) zp^J^bA=s#}ALx&01!Hu=wTwHJN;6*I+qN9$hX}$*K2PXph~wK!`Ep7RLPdQ%xX3`! z{)iw-R382$8ADzOs`6k<(#RM#EBbh5n&a_hcFIF0E|0_g5S?LcPI%KeN}H2neuxI& zrXM0-?`&zK^BU@)F4{^KO|+Zj>!GbwW01ir3SNs`4Yc7Orhh&>owga=yP$iP1XuGc z>8{=x=^c6hMZ+5gGsZKI(Y^D)P=f-k$W7FSHHAdW!%;pFLqspq#WNA?mW zQ-@&FO=6H~do#)x+m;(}u7u;yuaUWXyop~UEvWBT?+(KZ+&(YCFM=Q6cNq8_;k{b| z@4pQF_>m`p&k@OEnrwdv+cs|@aJhbsvMk61DUZ)HmWM~J4lm$A!*@FgQkTp7XYlxr zC!rMYt@sz>JD`M8<(&+_H|6l&ir*kPH>|rn1+IlQ@L@-8Zqx1h}9?FA2~Bp*s0 z$8zw>IluH*#K*scQsr$1k7HUwsd2T-X`k@khaIJCmhmWf!%~=)w*=cVMw#6-0q;&I z1g|>U{+Z=bhl^LU!1&mKk9MZ>y^{5i7sronw#U&<@b)8(JaS6$a`^V=bwr-6^LER7 z9+`YMBX25xQXXFA0`(pQPuj=+79L;GqWI+l3K`0SLZ7+1;vw)lS%?YJw~SF56BllhuUY(bFP_YNKC(f0x=z zCw;GeEb?9N)fqFsIEHBwW0Akxfw=bI#M;SYwHkk+{g>ZY$#_on6jq_3FCu!**?C(1 zp8AI?XK`CK*6xiYRkD6hBI~8^+`eVh=O14_UN#O7ti4vBl6Oq?oG&u;=Mrk1LydE& zaSk=kp~gAXIENbNP~#kGoKFmmbN&^$Uo|zioIiKo{0mwyY-{i6?CMr&e4vzaFA+b? zoyyyHsX@Kek?MS>T)6n3UZ@NKpSt2wVI1{L-~Un{z5*$kwHEAE(^2O-vDO&{SZ;Xe9ysA2ge*dK|Nr~hqwiD zfy(?kD!x1+9?)Y_?|hflo+uT$F2>k4~UW z$%6n$V>C)*G)7}gCeawOB8|}~jUimpm;?GK^>hPs+E@2MM`R{%6RaI9fR?4hKtr3> z4fn0WjLMZO+m+%BL=B-Yj+ccXN_1BK1mw@VzkzeEH~jNm(6Q*VC{tjq z=jOXczp?~FpVzU-=I3I&6F&*O-Wa;@vw0)HxXkiFWXq!Gkn*;H!Fz%P;e7=Oc6q-C z%zK3d;W3>&2|KYNZDN{i--GQqeo-bO+>amcjS{4c?MRSq=8-qiIuOa@{gT_#j=unh z_f`qQbLH=kgEuTB#HDzxXx!#9cn_7yqddP@y=zd1-R}FrkC56d_QN|P5*0ZcFQIs&%ga{O#PLM=I3pM>Y?IW~j$=g619K4d_0{@Nfu8yDq1$pn^7#^|RUISjAjnORKF(a!~#T3YkE zjyKbD%xi9KrIw={J;xW>SWC|V4^fI*h)c8W>ASMGrk~6{md;(ml-_I`w&JrEH0(YU zi9q-9JNJx5_AP1H`bupSrfTn>H0J&H=m=3X_s`FY#^X5DVdT5}oz-JVv7s&_)MbRa zj8K;m>M}xIMySgObs3>9Bh+P_K)MWh4er<99rm9zKq=Aoc&IZdDmm75@-y~Gbru)l zzdcpLS*Y`{uuwiikwY1NuZ8)A8pNK1qj^8RlnGEK-)!wq8T_mO_SCchj;alT79DzH zxrHesr%YM`=Z4J|fS59O+A1=z{z>rTdp^o%6+EewnWqe9hf`)w|540mXHaI&Z3(j= z)W`zBeXlR0hCoeY2np6Qy~RraCG;D(`6lH#L~IyWCTGUYOR&pH(;=mDJbKWhc`IKF9yo#Kca<^h~ z-gOSI8<^u?g2)KdNU+OW49x370_9x{Ot-HSwnOrmFWZ+myiwp&DPS`}%HTE4ZE43J zg2U@qg7ETkPm}R=@QTS>UEX^kzb%LNxe`3~tF(<($02V`qEVCqVi$e9Y%lLcw%oH3 z1g5jEajVcg-XdIHtHoo!$Q4~)kHxd)qptjM1$cL&90}5YuKe*u@IE4$Aj>A>s3m{= zAa*P!f4pgE&B|39*OV=Pyr5~mzo2XxcGk6Yc4o;RPlMDt_i$zRgr16#&g`Du$?dz^ zCwyO9OlKGD#=4~0ooSWKrv24Nb9)$P8|n|fQ4u>-8~eqxDw*5E0=d5Dgr3OAf^6i~ zwupLlOXN?GzYUh#xjlW^ueK+i=blwP+4RnAWBSYKJqL0Nkg~V-;+^gP^drBFy8U1O zHOjk0e&@b?aN@a_d#|?FMqa(U_J(vzE_tx3>WYK$>MIVacrM%8neK{yZ_j~)nEIQ$ zWJ$yK9=z!L)3?VPTlfCSnA%bO{rZDd6XSd1qp|(!U{y?=8gGh^ere>>xyQz0`yLyM z?~89g^|XEQ$hjx~NTt>_{PIEdo7k^ozfr%bef6ot>KTbw_a)XfEF63P&S^N>gU{YQ zQv2$@+WQ-({zkoC`|9JhwarhDsZpkV>leGW|JkePgHg66!XwCs<4Yckk$0`H!M!#= z2;VWOY>~o4*=#7A4P~>TY&Mk5hO*gEHXF)jL)mO7n>{gPvqfHp`|}?S*hu47N;vyY z2`z1z-+x7Y?Ndg!#c!*+z4DHV?Xf$fcX^+REcKT({LT|kKJ|C)HD&=ljgG2~Z+&@D z&Xbm~02|hFi$~E%Z@vDMRF2rG|C;=AkH|~oSL}SnBjdB|DP(Gm` zU9DH=@?B|J3EhL4jIrDI8UFfRV!JDCw4fTz6{$Z*Sf2T__!pULCxs|>3_!3~omL5|wI{;_al`Fnmls&lIK7=3d zC$_$)6IcT8OANjE**wk@=wXHl!sGqc=IsNPJW_Fs(&0bhug!ZLxESxV4)2K)Ja>M= z)8OsHPlA;FNhGjd37qdFc}$b-8?kNkb^sJxGb(3zQSOYe5BI#dzp4L9d9MEG3GnW> zcv6?kTZ?<*Xc@fMz`MH)-U#l&<>;+mE0dSTJ-k?X`o3Ze ztrTzA;^A>wlDEy`;jvhfcdx}0y&v1_w(ow6$H!!;_B~|ra0>H0SD*Jdc;7|71Q~yL zq~krU5bnXV`xLookt{sM;N^t*bv(mM>GReNU01d~Z~g`4`%StV?-2+UJm>W2*?`ei z|8Tr%^g-&|RO9r$@g{mcs?}bQRAYQ^{hr9CnK`D`bpPq0c*GlvT}(|}yp@0PG6GKS z5^qxioZKZj>{+4ry&v4zSnOJs+t^M0U1X--L)Uy<>$&vF881B-3lH^Np`I($bA@`Y zP|p?Wxk5cxsOJjxT%n%pgw%8KWw>9Z@ySq3SyC0L@`@|B-n!xj-)#9nf$z~f7JBP- z^J7;6Ke*HQjrZ}|b@Jo*Sk#$BJrZVN!&1&InxY>6_TN5pY}#R;YYP9%IoIPc!-ayA zBH`aeV1PX8tNz8plqLkR=isP=V-BuxaAjcK8tR*#x9W>RQuK5HN7dc{jyd|L3iahc zex-UNaEyoE_(uyNsPvYsB>{Y1$Z1Oo|sXw{~u>|UiE*F59xZT0?9ejp^*)9pi z^iOP8-rp0PQBl^`(BRAP8fN%1x&+o`(RwPRG*J7umnPVerrbR>7EzPW7T~IS2A*gpkLf85m0));? z5F6b=VcyOWG*T#TaVB$pX$8}=zM<=vW`>u*z0@YEnTWB|l^Zh~GsJp>Es|}v2HWi$ z*XV}(n|_ntF-KA-veF5iuZM`%6v^omP|zVEhi64HcvfWFKN))F&`m*=(mMTO@$PUv zbu%s{++qUyBwouBa7)qQWB6(^W+}`n!{uFx zd)#mtyl=#`;X`6M*M8O&U3hz z$B{-I2m6&g;x+i$ydPUU)+4;D9NtS74|-JasAY;bfbaq#J9cHLC7TJq!ioP&^cN1o#&C8deTZ$C!AK#lvpRV`(=U?O=E|hHN z$}Be4Eqb!X?9TRNwsvo0x+$H-c6{&peEGW1)N!pVGXrY8v}Jzrp}s8CmxcPWP+u16 z%R+rws4olkWud+-)R&!*`ZE7@_}FO7lK$6;{+q&IOPh1WvDD^JWFR4l4XYh04LshO zG}b90i4Cj%W2)8SIgmh+pVf|)ZD_>^9$+_tJKe|Hc(o5~JVD(Qz!TL+0=Pb~ZUg6}ogK)p(K=5yDTyEFnEeo-fc-gk#5`%#5k6w_ zd67{^C^|u2Xw(tj7udg2-C-~X|719*OCpv)9iJ_?FRAl`PLDUYMADZHQpe|Fhz4~& z<(te0RqOsJ*CnP*nDHFONu?GbZb00LnCX=1GM(~P;WJ9Z@OiyD} zt}z6X8bg?=F&d|_=n^5H)EI(WoiDmb2yr!*Ic_zm?Ct0lucQ!jNoL)K8?9+{Ix(Pl^i$U5hBrB^fI3pMIyP+NdNpsRkbDc1+}=4&;`yZ} zsh!9=Mt#=IP|;dLouG$F0h%FFNXY9Ot)WrK&1)d7AyG^Rd4raveehtnzIAC$B@hy!{rh$|`TR!+XKv9ZCOr(BkpYE63rMr>6S- z&*R{*F2$?2co^Cxc}a_hAzPByWbvr;EmiLVi^p*yJXfE(7`&e%UxHk-JT9JZ3DlEL zum+^?7=xD+-oj$c+=tnLdk)kuD6r}uW=v5NXg`Uhjx z^=;`^-XKgku63e%P>h#Gl!b@-&`=*5>O(_)Xs8bj^`W6YG}MQN`p{4xdP3?$`7(TL zw4oGGNVpsu)V@V;^L0IG;PKW%T5={WBsms!+Q-Zfcr%Z#6B@o}jz#@R)G47I8;3b0 zg{Ccy^zrU{yB|3D%JjoR_5+|Bsx6rU=l97v(>^bv=&zE8BRH7v>3qsJ{NUx+srGSH z=d&4tgZsxEeud_9$oio|{niLNs5^>c#S~jtNZsH+iXcSid(M2psQOMIKj!EPD^$Ie zPu*XYRUg-q`lV?JBhC-}egN01Zv}9j+8Myr%7`&^Ds_LNyW=r>kifl;`dB6Vn7Y4T z7|cH9{6Lv6$Uda*?@5!-Ax_<&ExV-dZY|O!5U&(~n0T>+I~{zHgPRExFsLzPkL*9s)d`{zI$v~x?EItF31Vi$(oBC( z|3Js8zW(bAT0A5!>07@#=m66s23UtN+A>2$)O@Rkkm|U@EUxQYxw0?Qw`ySJy3D%% zoStqdv)wR_(9CG_x6CX7{7nBhTmtXu7auJ!$cn{va%W|b{0 zOIAwvcNB|^9i6jF{}gnrI&M}dbH0?bQY0`EBtyocGm zCxDkR!vrbsE5PJQm;oSpOq1Wvv)9gi17C(mYW2HiP>^OH$`kvacwb5qm&`ABQU zhMqE5#+<>JZ!D14aiyRMj`qfLDp`G6Jl&I)b<<=XU{y~f+qOG0b7oFuca6oUmBKv2 z`aLR{%*DEY^$YfC?qPL0)2n-8+1lMZw@=?qg!SO|oYg(EJ4SsM&z`cCP&;`N&cS?7bl zIe4(A;|}eib3E&neoXYJS<&qEyZ;l8>XhzNv+C^sgQGfox7|OY;q&{{_xM?ZK2_&T z->c53+rM-B1MS=PE;x1PXzcl~jPBgz(f8*YJn}=&$}C9k%Wz!l^332LFKwP*e5lV0 z^?9K_FVyFS`n*t|7wYpueO{=~3-x&?q(0Ao9q#wP8{}^q8^u*T`Odi{ zO`#qM{19)Sa`U#z+bV94-4Wdm#Uhr~fXmG9Jn>8#dBu-^eA<#dye+w7*%r!=Bv8&{ z)NNP)N2nbsm$W8YUZeZrnPW3Prb;IuZY=b}F&UfoIcN&@fz>L1bAu&cqP}yjg()o@ z0OmF2hlmR1dpe)T=LgTpkLrB3!4FXoV6gs5ozHRRhe{{E zO6PMN_@PSmo8zM#FADwRGV6G$KYf1ydumnyM^$|Q$MkxEQaac3`zH~;>GCVpPXf3~ zU0`AAS5LDr{i#L+c!GLa3P&7)SGE5h!1e0k0G_127{E2odVsa+29wWfCc&{N<%X2? z#0|a*$HzRLbLw9|U@*@y^{**|c}}T+r4E&Ro+xV z_^-JCe3O4I<1>|7jkp0k9zS_nUy7L5Ao(9;jPl4MpZVnH5R*S_Vx9x?d3@wIAtsN< zZ@2Rd=AYxIGoSs)d|iKosUL!5jiCqD?SXt)V+f)(o@y{;xEiAqbv_oe(inPRjiGeW z7@ear^vD`RE`9X+UT992Q7FAUhh^ogIiNam>F|bJLAh&^`UZ!gu`8Cm2r6Bf8|srY zgEtQJXSzmm1A`gMfvwKGJTo$^bNYq{HmrB{^tH$`IrPY@C>B>6^T6PicKQ0X5Czcr zY%!;`3r(J$erV=4f~ujJ%6OCMAl+u2!DSOQS~RpcGq`L3#fMW*moIE-POZ3TVRLh8 zX-muUrE{B?FGWgkS63JQUY%OLv}@^A^HaAhU3OW=Wt~2}0I+9a>WXE(i@H)>?QN~8 zC0$pxrWP;hTH2cGYHRPkvBg&x>)tjaR4bEpf*zeVG$YeV!l<-Tf+Mn!;f%&YhCdRI zwC3WlR_eTKCZ~P}w*%huIWLZZ_bl9E@`3j@hOgmg^Ll{KVTK99`!ul48wO^X5`=dX z5^UZBz`Uh>#EqZ;`{}8i~BWN)R5??DDwg?ZrYuEWBSDo@B-FyplYo z$@WVQFAiR@xv4)jJm~&(xEK%VTC>ea%5(MDJ>anqC9v%bF7HwB?)J0v-%`9D=$*^q zJqO-s8Rad*^J{wTmF)ep$j3 z7|d}1z9X$ zCwyIIeP(c=|604p-chY^kqSb+aHtm!^}?ZEIMfS=df`wn9O{Kby>O@(K5_KIMP7)H zG}m){l)=`wmH*}9|9!~<)Oo#VVSeHNz{1oCoo8X{Z18!P4-tF?{yh-C$ygnACh~no z67@$}=HbJ9En|KF9?e`Skxch*IKnz=ZTf4l#4>6nM8@-un^`|s53Ml=nD^LMbeO$6 zX6-1o9H*LN!Iq2KLsGW83=feGlrK^SAwjk&W3@r4wqm>_wsTyG;d!$LwVJj#8f z4a|NGyivrIZHat{@(@=}vlhY`ri-kJ?c+YK9Aq&@gK^P1*CLc)+ve6nj{cO)V;vhK!w{cO?#HrA4Z)I&#G(G%;9 zq$_&c@Y{mlW0>u5{*+#Jhnn`?4_E!;@;{jN@cSpfH{RQmy(@cZ`l;+)=|pz)m3_&l z(zm|yz4p;p>XVBX#Pf3`xZm+DQ}KI$+$1Wx_)wk_%2PslN+?eW&C6uRx@{~}X z63SCfOnHia9qxyX2);S&?~OFRBZ}LakB@i-W(=xyomE~u8jr;*;+65LcsyPmPsD5D zwebn@Q7^v5i{I+Sw|enyUi>yMe!CaH!;5eC;&*!SyS(_Py!hQ-{L^0iGhY0&_&~Kj zaRX~sqk0|Y6+Yka-F)bc77O!>?mS?&)ejLB%=dKuEXl?f@tJ0Se&f=n_f)Gq%7f^$ zUP2Un%6AIk&>Lw3_+1>q{wol3Tkv9R^Ltrv54L%Xf^B(I1YhDoc~h05%`lt5W1_r? zKAVVn47AbZwgk$bXp;idTWwp)nC}cduVund~HDu#FKLMk4o9x&#h1OX*Nh%*&LJ}?E*GWmPggMygobt(SktOhJg6%YZ#l}-SGCpINlB7~~7Vqb`Fa4*) zyHuUyb(|19m8`S)aaKXgQ8nsSZSksZ^{TddRolF(+q|mVy{aQ=Ig+SH!ZX<5f*Dn} zRo-54M{Ila&Y}y`gSE>N9#Z%54GUA6_BCK$`F@C~V7}+%drp2-=d;)S5OwlnI-eua z4>2dd!YRMP$*foenJ0H<>bem^5af^wa#a6`k~s%Pw0G}VLv3)mregs zjv9ql=8p~b<&hKA?^^v!UC`|T>}h}8QW{qKP^$v@F~{Fbg=!DvSE{A}t_t{njzT(X zuX!4Ur1#e%FxBmaKN}0vR{0_eN3hCmGJq$m$^f3CUX#WnjzGioy#Su39tq(0s6Pte zlhn2Vp02JB;E8HU0N1O92D85>d9|wDU^Z(KlvMYkKe){?OkEe}%NDSw1`XyIr9Yb0 z26If(AC364@%OJ#ohF}Sj{ay`4CWZ4KN{-G3gySOzaL_bp~+sg`o93g95a*QKZp7X z3G_#Et^mZug|X{n?kj=$CmXS<2{B;bA&QQP@E?!<*k z^)S9j>Ha2OP5gePZZ`3L#N6*W#wdr!L!4y{KQwC@qY{nJG5BPIXB&*lb$-fV_?yuf zLS4OogTZGQ4F57ZAIcG(4}UTmHyR9oG#a02@JxfxGB}Aw9kp%}dcZ4&mSp-?Z(6ot z>Do+2{LJX|&Viv^-*A5xi*^(o$`qWr1k#pfhIKJPCe{G)eYFI*+TBY&1$%bgm{~tu z*z<}Zq|p;d57ee>?bpCh&T$DKbYU0yr*e%3t2(YU501Y0xtXl5q^(gP9C{ z*I<*2oAeJ|o*5b*SbrVWrdJHTb8ctOZz)w)%Y`L#=9kPlzhq8RshsAcTPvk~ujD+ zuoQn5wWSt!rP?l92$wYr;j(7joY?5|6&UUVb99Sa@G?c=rPrt9OUPdk8p=p9Cq7&kDQVM}d<FG+=y_rrPkNyy^+T{iF=n1|R|6aK7}yJ}&Q;GI{?}CT|UN?B&$^4`uQ$ z$H^Tn<2arHubg_@VH8jf@0(@v&Voal?M2$hX+C)6%7=%*+mDlY9#Z(;#&N)Ldk{a{ zhGHAui#UGp`lH7OdBiW^XY=m1c&tZwf9vq>wRjvu!h6W!eGxpihxL*pygzk#e`b|e zVe#&Ecn?`T-ovE48y()GR=rggZ}P}c+Y{yYnsQw{u16?hgXaDQ0ZsB zuM2Os!<%Z}S6Lp0Y)M|q;;|n~l{eSo(LSXVuhZgT=#=Cwvv_osSgO3$7H{eic*7PC zE{#f-x6R_A%S-a^wRqSp$-Cd;O}BXLce(drQ#}OUxpLD3mQB~z=S39q9qR%V9%Gc3 zV_6Ij;5(s|tpSZ~dbm z8Jqf>Iu1^R^yIjinfT?0mL{R4NoZ*jTAGBGCZVNCXlW8!nuL}np{2=*X=&oW z4k3TLsc06VQ>XHA=!u+E97hsm;hlu)x zY$B!}w9UfQJ2qOFK9XJr=64>;pdJsZp?oMuPe!>w0>T4`yi@`pi?OYEWQF~@5c(kKfP`5NU@Y&X*+>;sSKlK3_h4UdZ=c}r?o#TK+m!m&R;B*_wJUOM9gE6y8+WO;7t3v%P;F7S>ju^K zVz~5H)fRO}-l^IyTKnfA>%)9xH$J)Z&RHww)_0+Rj2E|wpDdn_sy$S=LOuV zt?yT>e(V*`&%N!p)v6cb{>v`4D(e35xLWlu*sbn)n+ja&UbQ;O-F959KA)TVx>{}B zNytlbr|(g#|2f?kzpYkZ$bIL3sMQy6Yq|$j;BNZ3S`&49zpU0A-TM7=?-^5Tp0E4$ zpH^$m=RVf1)~v++-aFNrsQdHHYVD2n7w%qpuUh+j+^hadt+nnKDr)Wd+(%xo*8X$5 zzq((oeX-p?yjiV%9`2I;SF4M5$6u)~xfnM$t1fvy?%w;=B}wkBf1)mV$FIG3?w9)1 zB`?H1{&jW9O5GE0R+l^<_oYYFB^T?SM%kXvedqn^l79l%b>(lX7tQq_S6wgE-Tr#j zbusRazfxTK3O!t>}sjiE0PrXfb zozI=CtF9Hgb)92s-6gM&yURAHb=F<|WwkEqerQ6iyXno^rCzJn?SAF+cVqCIB+tBZD5-K8$Qkh>XjtxK&|m#)MOeO_I<68EY% zt4rzb{I%9DcfY#ye^>XjkElyqxrdLdOX+^={mJg}o7JUspM2%Y+~+Fl(ihu(^*7a} z);*1Kd>(E?*H-nf-rahS+K}Y-yiILLaznFfgX<2|)duShe@Jb(829SqYC|hm{Ic3W zch6@-S9?TlaNWPJs0~T(KR|BOz3m3I;Ro*DULJhvjcS8+pZ&braIx+$ephYyCvY28 zm%1o-?X_N$yRM z6?N}Jnv&cHzN|K0jQg!Vwb6B-eudh2KKJvD~*mq&Bv2o4N+odEJ$t zRh#IpJ^lmtFEI}u`~|gXrS50Idm;BrH>*u6agTPXP3Lo;m{6On`@PqzO|9G?R@A0{ zPWN|jR-3H*-YeCni*%Q5{J2VVTW(jEU5vZAOI=2n>WjPEZcvxe4G;V7&|j*{=w1td z*43U>m$`27v+A;yxHtZ?y3BQN+o~?RkbBSD)MY<2_Wa!=o7H7W?zeZT%Pz)!?zh!t z7jj?tkh<*q;l7D7aos+QwRwHJc9##T%`109wOXcFUo6(s)k-Bjlgpn} zxmqnfSInOru2u@gf`CHv2*b;Vn<>F+n(KuOLCPD<2tBs-s#v4a##R{R3 znFGbD6n`~24>gKvO)+hr<*~NFfDATT-IC- z9mH6vQW#zyDirE2jGPN%hYUHS^KE1%3W2&5$XAYrcN!5 zSMt^QQssn&5mLQr0H%wt%vhaBA=Zf>ub}u&;MK_vHyez%;|+wxjGM|YN|=;&yfM1i zbP)$nkJjtex}cDz;|(c1dCL@=lM6HDQr_n0@di-Hy6Wj-osokm1fjKcELSQo)Qbj9 z{X+Z#Y7EVI`A9YjS|-YnGIi?a3#ftBJV}%W?J=)L-R28{w#^r&OY_C*g3h@40+mF< zL26ispozsiW6Z)kTtuo+Edm7z@ab|fS5H90`>`6^l900wO(=@KTA}F>m4ix_1K!a} zzP?-wL)R_FMDfH_u@-V^tcRLHYaB>nMWOoMDP`cHp|wup-iUg80l5If*HJPjDQ0Yxcfi0+7 zF7jZt(PR?SW%N}pfq6!yb#a+|t`ZNP*jQjhqSDp;h_M2iQY=*~Ml=gVH#jcBD+;nC zWO{%;UaXH-W~+{WT@nfSMuU}r>Pz3!h#g+E+9S<`At&V6aa5gZJyR>@OS7ds`B0@s z>WjAe;8i3T^d0DNr8Wyb7jQSE<{RYlbTv~h7Hh^2{4b!>$=)@Q8aPldqA@JyV2YG- z<&nP8#YB9n1->^KpVo4wk4FPY5}u}Tw38B#Y(pXfzP`QyH(zYlOZf(9&4n5x*w-JU z)r+-iy}7977n;Q-g+GmEb}^Nu(0VqHTq>bHK|;O>tqAF8L>7y2diJi=o*;-?uHGnS zPcBa8Gucu}lF*kyhX5m{TA6It$D^qn?LWb);79Z{ODbEd7jyHdTS6QNf-po>lz^HV z45$t01j9d+&-7+R>Vc`z(TVBNq3rZ%W;#8T8O>&$I|K1OeVq4!K0aJDg5m5(W%V%(TVf&v&@(}u{CsM)TGjh3e1}bsgavS%~)tsc_(%Yd*5PeAf0Oz z(UL$ZCdVeASbI@BU~p%fKxI=CfGB+VFRv^!bUqTxY z35LzW1zUs{L04WtI8J(;(xkxWmp@KR_M*tUsQ4weyBDv^EmD7B>4*FdBefg0SGG`W zz~-yb*3%Yhglli9kuA>Gn#-D+TB$u3_D+3+n7W(6WLs8DO)*Wg8026|u0Bc|#$ny( zvBKJ}7pkW#A$PPj@O|&~eA}95gNjt27GCq{N^PebggbeNo~4@|J+GJ`sUpTtsw<>b zvc+30*`CkyWA zV(J7vQpHSDF&2zQCkWGo1Zg@A2|gr+8I1QZ;TBD}MhE%s#7k3R@e*N2FkwW+`i5UXLq}mJPOm9;PZ;ds@P7Ol+B zM<6p;gjT9ePN?MAB{(tkha67UO3C<5o!`9m@3xInkQW#9)3?v(wfVM^#yqvBQ7q3& z5QaV43WgH~(VUBNhSMiri3!_X69Z@_3wzVKa+#}A;~Zp-4(6K8Tz+nJ5(BT%iQSm$ z&6NkU&AElj$6X}7qpFL)xc+^g)=#gYoPakKi zGxuORM=`d|as#8zN-E31%V?Nm$Y$;QztrSPjpn29!RV=)Kl&vh3 z69Q?N)sSp;HZC_;PKYd!39@D}ah9!M5vh>Hq<7Aj6(MHJT#WLfI*WC(B=0jY7zPJ0 zeU`5lih&n{EnqD#j-`5vF%+;%iRdY)Sea;atW-3*o;#hLS(u%L{&=y~)L2nybUdFm zzFI0INkMj2F(o%QpDh(IONhoHIkdQrXt6OZ(dZg24bGltlQhG4&Fwx9HPD=-SXc8+ zR<8u5Ycx5r;%I_vg6`8kO0&yi>7@p3%Y*621{%bsZ%{?pok#(YVwT*+?l0I4~FZ)qT^@dD7WgiJcr*ox9;HiERCaShE@xn~)3B{Q( zeW}{Fjue)-BE&u|T9bVm8c>8dZDl4|1TBX!(jxR__~#X`yF8cB(2M5Q&d zwc>mtCkYX5Qy%q3F2M(g%;7|$NpovrOP{8E5~Z3lYDH@;GfYQ3fyS3laN-{)B>D*B z?RyC09K$EeF>x*CTW5I^&BnMDje#Z6OuSo=SS4DJS_%vj5J|Anmtx+>hY^qCbr?QA zh;R(8BO60Ugyc)LIjnm%7HV7-!(i9eOGAL^TEe&(ws6C14r}GnDY4p91MKUwG$i#D ztVTQ2OP;?y2Xplbb`qreVKRr--)LWNuo4%TgxO}Y*FiDSm&JrYMK59tL^5N4Jy!~+ zGgj201@YT!qmiwkY0fg7*1;@PF3dHcjq$88N?QrrvuJiWAxLdk>nWEogA>!b2lG@j z3k@?(70h(mQd1j18xb+^o)LPs7H}<_b;| z{d8Jt(N1{baUre8$nmatdE%p4eAR)AR2bZvnGN4cZbNK0n7+L(*- zvM_6?1DMpz&bveBFqR8pW*ej)D|*e54g+&5`ICM-We8q-YQ#wU6>WcATC{D0?!y%3 zBzcgG5QUa7%p#4(+&jjV5ndg63c-?nJuH6hB|=RQDmA8+ceDiVa6!uyRRg+~D}}QL zniOpXkUURUY~$whnT9rz6J?ogR2S+_D{X}sg_+M)FjXJsijj6A*MwmfL(eWa{iu}` z@8D1+vnT4+g<2L<`k_Y7&FAt79Z!gk=xRuiw%u(QLQAaK2ovgcSt{ zv>HyUU?gPo&7~kYWa56uuz3U~QrN&m8YS#0v@IWqlJ>Y1LB~Z2IwnsG@!L-$+6}6v zw;Q`CnJng>Zzo2?MKg~$&TR#J=`lKjaT>svI7_M*kU>w&M;p2pXSO1BSRwyzN zNxWBdCtxIcK8c9*JA(2{il|8b5*5i?qO|!NwM|J$v`s~dYpxR!*K72!J}KqQYD8K_Miy|UR!uGaYAFR zG>bWIk6GiwmWUzc=WE&AjMK3h9B7_j^0`Yf^h@h3>bJ2l6T^`&Dvx|o9QmSQkS~gx zUns}?5*Ovu#;w1G!*~};i!uMiMg3z45#u8+%4f{%ctFLa8pk1CMxMy~@NB7E&T0e8 z<11AV$%x;0?}FN?L&u2Swbdhdv?pP)2Q+paE}_vVqp?Dxf)qMB8=|4%K^#M@TMs;} zovcgtlbz2k@!UYYgOJFGHj&3!lO&xMW>)tsA}G{*Qdxl= zqTekiF+`+C{j(EAX1je=G?ELLf5kkUpF>VUgPoI-O#fX==IYQwq5C!~t zO2=C~lE_r6Cre2MuJLTY%#>>o1;<;wkOFUxN$q$LWlfSKU0Fcj04%?NQ@j3{K#$AN z5JkocA$vGvfW-m61c@OFcQago#k0&9Os$IA@7E6Iz5!}J(QdyCVI!Q{75vRc80jKiP}DQN{R@! zDQ2=Y5Knxd#BNP;2$4GGP+;nLdQVbhB|=b;fP=%ig*f@z^G`V&%-$>!K z;_gHqO^uGSLf;}hIxY*zq3|RgO--UeLWAjSU{TKiAc|I3uL$hXh9aF83-*&LF#0%eTWjwq)eQG>H-b87klc9<(ku=h&;xe z9d-@(hWL@Sl-UKZ%9>c%6+UkL+>Ty=h^#> z%9FIod$-*m&Z0088K~k)qS47zpQ!>FY%4$M(09Y4vU_r@7fd4+63ZzNDjc$}$nyj3 za*-)fWixCXP{P^~pbOE?<8DCYnIDjUp@x;W`l z?XLO6+>tFhN!ez7aj(4-N7I5$A2&g}B-0k{n@&$=M6LI+1%SobtV+F3E*}%nxOkH) zxH2`F2*WWAq!%fN8jF`{8XXC?VGe!S_Bg~0a()DABSq$*bNPG`r7|ffNkCF#l9b1u zY931B7~n=N-6)13?k@7~Ai+)_57Aydr6!pg+Qj@>gFEot;XLay`nTDvoLb1s#6;K` z`!!v+QMRT}r26kDjg^94BhpR!#8zEoYEZY5*mWXTL+R~!5y`etqG;Ra`9TG}WCY!U zJLnyKcIva=EJ%IDU@BVoqFk(k4wtEe5iYkHPcDWPIm+hLXR_ghq^{DbeQt|&M?F`A zG1M}K$;>Sxn#{~r1*)Xm%Sqgapvz4vbspzdm|clJ`;1TBl1|Dl%4E)d!)dA)(%V{U z%JA|s5`E-HTDoMxmbs3*oxqGtJP)&tg*{@lhSufa?=5YRest7OvoUzE=z`?ytYit&yPnjHbHDxmG-A}z~>E#Fjv0qbkog=MtP zt`+%B?bWRehE^Dia3(8%ax#@NU52sMU>+yc3SbR-5`~f0%cz7G9Vew?HG?u@TzzPInVmY#(iz2g ztRypX(^glMYcB;!yc2~8Sz?<=&M(f0*y5>J6Q#}UO0fkYs+uWWH{_~nbTA`@@68kO za7NN#5jT|SNw8$1p0MQfi@%S?j1ggF%0|%h?6?UyF+)=?E>=%EJNE*biG%FZhH-&) z-^g4Pqpz6)J2&v`%?AhAq|q)XWqFTU!f4l!;?hlYaE=9wtKsH^ARJ5QS&r7e%{gsq zXE;!Z43Hd(W8*v6mIED81#1+9@@*#&VysQ=VBF!6$O$a^m@fLU5BO|L6ADH1MFY(Y zQysjq#b}6`v5N#Lf{%?%YMqW{OF;3mCBP@5 z2VMqoc`=S0ISLz)c9$wGC@s`K@R`db#R1qUGY#o23S;FYsf(p0DT|@SRK?(c5!xOOUm^*Lly{^OMT)j!^s_F^Ikw_gy18zK=%x;3WF`n0IAkUaY=NIpsXFeN0P ze_3|=UlIm$rxr?ex0(}cEiEW`Np_M1VOWYMT^nGf$tbhId%U|br;RDiuu?F*0oMhkznVo3oO$)9|#BK37 zTenhv#!r~hnqj!TZ+z-il`O4}Kzrgzj~08qcm`*Nmv2) zP32Bws|r3k5>Hr2i)L_0@s!a)yGrPw-Bv6_w`j{8hU6A4WZ=q0-cdw{f_Z?v)7beG z*{~RBR!AF^yEMhF0hgcPzeD!%!g;GQASUeAt9X^|(C;T;DzC+Mlu8T-%HbiU3t9ndmhVS zwNh1ZvPme}moqOLFtn)0Sh;k~L@y)jCG3$)Xh{N@URnlbxs|B}`vo>XSq=0AhShjb z*WumVQLO6$2JXB2%mhH3s!Jol2X!RTS3vcAg>6EDr;zCRaod;#UoP46=e05>*2X|f z5aUn={T%R&Ix9z4q9i#XB`U|Qct(z+sW8agQG;dh8Zpgai`B4%1=^pP9QRT!2;CAS z7$l_?Tn(%@TBfIYS@5{dUJ4z>`ZG4j&DW~sQU!AhjQrx{5&U5L&w&06hBo`aoZ9PD zHXMjvuHZ7_u$hrax_LuHf@w+YY_&e0<5td~vXD91Km{Rga02P)IiigJo;atTYig7s zHK4CvmMwy~=r)p=zLZSqWG&fTha2Ha?bAX~y#r2nSj>d!EBOlZIlYQJx_9Kr&@s7} z!A_D0*8r?@+?#L1LkF~2!hWzh-uvfGi=o7wUQPQIllpo2-Fp!MUX*2yltQSAe)>POqV5u9euGM~#N%(%dj@>(ay+bKa;HvO1gx8q5eu_oI4I()WYo{l$}` zG3_fCUI-K@#%+eONt3A4) z$Dody_#J0rY4}}dB8wgBM!F{Gi$r%13R>0+;Mvw8HiC(IjWSNRp_rGI5A*HqK53h+#GRe4Kr^+@uxbN8W`Nj}8%e6+^L|PW8(vTU) z7r+@~2gcrw7{Vc!Dqv9hW;CQDTgFuoqQd&~8X@S6M|5PIgP987x-VuInx%3UchVw0 z$S6+3;z|{n+$cB<(Qni8>KUA}4JE`GmT1qNtMAM+_s3yl#}2zgxBdHc?^b7}HW2lp7t3l2$3JXS)o}%yvg` zxU1CAnPjyhD?4vTr(*geoZ)QG%>ou&%N!U}F;{k|O z?rD@|0H+ThIx;ko#Y#fp;f|>YX6$g?D+@mY2(p5j=186#ztLm#C-D6 zRvnDeXuZF=Le><6UWEX*-Wu{To%48;y{3yELD!6tsNRk zEAu*e#}WIABxGN8Y-q%VGnvuDE_`G>bJT;6X2xAOgJ!|PETrtzbjE|z5qRoOk31cK zD3C0qS*m~|LyDs}d||%G8w${l>b*B^N8o;ZP)jG~aGV7f z`In3C*GlMB#;oV%kaN_sp1G`##CRdN)aYGH5RX&+=xuPji5#YBEQDVNV&F0mOD5rh zJh^JgI{`yKF@zlUMo;12Bt}-D$P6eCE_u-oPl)I6aWcJJ8(y&)c$U=71MkKnG5cXV3nW&5o6&!!rYx7r$o;E1mV{4dCr)a!i&2qU5G9J8hMWU~sk_|33i!}fqX<`8;$l=H9qbH$)Nbt+Od2l57;~i7j zdg@V_qB-0EmE_CN@Ufqk{#uued-)^1|W z=_Z3sCyvU*s7^JE(UOXq646Oi>jjip4cBQzt1KB>mJx}yBEEzbtFd9LDA(w?i3mtu z1oc7{)(-u9#F(prhd9X=Mlc?F?pIqZHOGIr96E*XOb3biq=CfsIW@rc;$H1 z1QG)$hdm_FW0a$NV?HCL?H^3zdU}S6=U#*;xxtH*vic)xUcfr?Otbz1vL91Jg^rzo z5u`sP)2KzR{?$yFJHW?nA}y1Uyzn^Lo!Bx9At4j>!QfUAG}QA)P%|Y)kfAE0u;noozV?N${o(6C__{lM9SmP33V~>;x&aiX6+!7a%Fv_PY!xEd zwBX~*s??W9-8B1p1(Gm`mK_0t(#@I1VTy+@>^)4P15gr9NM{D$1jX;UqN*zX${&39 zO4Ux!!*XQUm;lr7!ff6-4~FZ|;mbq#kRzwIfJODwr2;-w7Wy%TqNVHN)9)d7ATacg z$YGeNwal3-=D>=0iLo%CT64j#AZUp^(K^u3BQ36A_E?4ZVE>z)S$1f8<4BS(38qml z;@Y?Z{^&QZpN1!Bg5?eeWfuxUlwP&fM-M{mo@RZSBTTa-6%za<;1D0IO*kkU7+X$v z6UB>gz)dznD3ixpyKr?SH$kYZ?5a@NS*~IzJ&B1QF?5^rHT)|4@H~n#$1^~cLjs&) zXyEI8bs)?^2xX3-D06s1$zcsHWMUJ*iONDYzqHi12m1kv^%*wV7%an<<#j9U=((8? zOF3ZTC9_yPSS;0>{FGFqI@>(0mlIGW=5U4xGaA)K0$y5U7)53%l5G^s2Sv;pj8L+T znK~}s!%-SewdRVs8GJYa2aN?};2waM6(6v~cY2Hn!zXJzmeH&g_6@S^&~KsMR`gXl z1Z7VK4&r9Bjj{2=;X2$t;YO2^KOa#xW;mWD>2`5RCV8?RN^ihNY?(!9(H8N=EZ#F1 z!U2a_p)zy>1ysi?UjsaI=)?jhnX|dPoM3?L5LYkaK%Puohd9})1udwY=5C)#j(-a| zxt^;~Hn(*3WpMo<=0K{I$z~mU<-&?F8a>+PR*s+|MQe?>@6huhtESXt#3Eek{=NC__IGDM2nmOtZUCd`njsaO*tm24>J?W|FV$lKBc{Cl;!z zFt~!KK8#ZEb3&LW#bI9*CJruQRVSLHsf7$c%E1q?tU5;7IQ;itwjjm>%`Wuvh&)f z8o0*R<|tnSBZ~wxVIc;KaO&K4C`d(7D27#c{9u^Dw}f4S-F>OW@MMkdfy@qDLFcek zxTwXM-KMhpR$(suqNe{bGpzfhhHc~Y%@({H6KX3JuzU%0(Pvp%uml~Jl@Xdq)9H_KXobyA zr-vzPwuCRGNuC)%A+?PrKW)ZdP2Ty_M7CQL-X$7LEBCo!v#pX||$q2b!^}TKtjE+Y!EE4!m?#* zV0v7L)+d<@e|? zS||I@j0O^iEDWkiskvzD17AfP48l7av+22G3+Ram%!lt&xqK~z4wN0X$%;eClun0i zldgcG!*#G!aK%kId?1xV3Bxrfpv*!pACfW^7n;b0lw-L@2nJbw3Xb>@r$&xA z_~|7lbBCN{XB-WithouDa?&vAR?Q(t)JP?a2o!XxG;ekMc&2(Vaoj5Tz-?UJA zZW8UjgUHmO-09g90Ye#C>%w!#Fy0u!*K-4oxzQy@o<)yW0**{EpIHo`No@Xbz&jcZ z2g=l32q|%BLlu_>1#)QEspmkG_*CNxN-phS(}fO{U1*|^cfqOV zf(xcSpVMAc4|{UPy@($`58y=SK(6LM8GH#Toh#=v@};&EdkY`cXHla|#eA9z&+L@2 z{4N6w>6B=)*H4K7*I2+x3zmrtj~Pz@f zx>e;_nE6R9gAA02_FVTuK|yEDmTGu={Q<;SUVg)8T=?XeYK zu8bKu&`C%@uh_ma;z*+6qo4A@d2fo}#AzSb;9L1jnbgqS8ZC!bzwsNLF*E4h%cWx3 z9-DCzF$hb%SxO+J%();vm%tfveM?0&_xn<)w>Wg-&b%9DTHjyj=_ zN(GX6vY3tY22)zmfhx-V+3o-0VbWF88&`I5J7qw z7fYBONqWAP8f;cmeS6hVvuVVSv*`&zzS`jf-zmX`4-}h6nhOkIEMFPX8#~FDM`NGQ z;Da?dXBCAJZaKi=O22wWQfqw?1(8xpZO>)FAG zM+ZJ)F1_`A9jN2mvJ$RgWmi}%czH*Z7hBBaxzU7LxFBPBw9dG@*eI-X-A%0XK92sB znZVLG(l{Zhq}Xw6t8(LS--9A#cBFYpP1%wdIi0jdI*$_2<6}xB%w*|Fd4rJh@i5SP z%bf{dN6pGFVu^dD3tAh{Z&veCH0jE$cml~*vxcsALT36Hpo5xd&Z=5wz6KjnHS|vn zECdk-e`+K1{3*y^hHC;1OQRvN4=O@~J{zo_I3%%b;-l+)V+gxNt0*KVJBA7c(FS3} z&<{5rg)owi*ofvfkR!pnOzKYK6o`Z+s+_M(&q%Fr1d0Rp1|*~#Sgkbgq{$)(b{P`| zp)M*1lxev{GT&2!Xaxk)6+!1-fEcfcfvzLM$z|D3r89vMGnzojw#r$3vN%yvXp4nK zuL3B@SSpldVIvZ#UtxZzuy``~k6WnUb{9>`OAl;H8&h#FlZKJyCOA)a+hRf9%H^0em z+bdfJ06AMVR*5^MIzJU|L| zQG~TWQv^ha_z@im{q01_NGsTMP$pVb7ATGk5I8N%yFta)C>8o@ob7Hb<_}@6yI9sm z3r5T_SFlhMQl_E^vq}i5+N))-uoYzl>orBn(_@Wvou8P2Zw-!e=RrV3m4*otfYafE zkM;g)8iyeVl4nOAArev&k*vExz&a=!4K3C}u2hS2g*rH-7OCMfhZv8P%1{EtC>9bX z_?-$QYNS}saXQ%k-oZ(HCYE#NCSNS5b1{Ta-7Em_oLjXZ?FEHV9%lzc(jE9%BzkBF zWnvxK2C@YtBxy_x!3egVMDAjqZEUVgJwk{Y&?ZR$N;)t*8*)~qA=kd_yY^%uoAx8T zz&A|0fF5ni?5RL#LJT75`m8oWkLF!3FiD{ZEi94-%fx1a&}J6!1e*%9`ZMn=$|g5J*yy-SMig_|`m=1vQi}?r7+^%W!;#=AjOApt zTDE1e+#oc>l}c(C0h2U`3*-KPNx!GH4-JS17Mxx$w4!aJ!)6T|3b-K0VNL*XVOX~w z4o4_v65U-0p~i8w!vrBTHaVzK+`Hga4Bfao-1Lj0@?saj6cqrPQ;QW9kr<$tv}syy z903$$7XhmYAs562O!_^@u80Q{IJkAl_!f?yGh!31M=^MtXXUYru#Tz+BrI-Poz|70 zz#biqW6Z=L&M`9xim4G;69L8=9|i$=p+Vx}qCS~FG=)btMgm zCLDHy(g6?2*X!b4Z~`7)G*&F3hy-Kp*gh2L4mxLA# zNI`T)ihi~Ob}YYSsd52h-rv`YoFA+9kd`A>C7s_bJ=uUtDW3{|kG}+{6laUe- zodTVxR*G%`qdasO(_m)dNr-&0(Fk-0$11Va&v4~ubkz^Q5q;l9NDt;)0+!+BVO^#g z#?b}D2og<6@YObo`dx-$^6HJl3?|4S2pnAuC+p_&B}5iT zBt0lufJ1rAf|vn5K(~H}Amdof`#Dj}57kP@DPWn0n2n%jQbjel;~QkGkpwd?0&;GF znJj>5pvc7*2ft7%DO{Ni@G#?;9uNe&$q0+ZkOl3zGm--2YAypVWB4^gHVGWRK{k*X zV^^vJm^i(J3Bsx3Js31|)&&iS;n0(-NIFnfifEDryf7gS{)F!4as;O!4j+EzFaa-_ zc{JC+)Geki7?3zi+AOlg#b_XpN!xU7*?Aotu)v*FT%)2{?kd)~jT~~JuC`4!V4Af9 z884rTX3{MiCPiAHMFMit;UtRPq7_=1#rCMuEVd%*Kr_vgruh#rJRWzbxQrPnon%C9 zD!&L!$WbW}94_RTM*d)ihd7T}(Fp3iUaXTXKoOKu!cBAamc5O~FGA496r5&?}_Zo%OXK+aV5jK}C_IQM5sMgp~wQ^$Oz0!Vw7na8vr>LH2LmXUcx99hkGSJgsLbD5&x zbVOsm2C>K@Y7`O!X+g5_ZgUB*qu89J86-IUIs%2!Z)mk8qII^2h)+a!h)z;9!E@R> zfu9p`j<#CKj`|U0xs3WnP*O>lN(snSOHUkZuIjvHWAu$4Y9?P(i8Gpdx-o0U9~gwZ ziubEBHw0x>Qh+0kNi#^XWNF%w=73)iM;Z={_TF-ve%FGWWf)zmm7pIyENjtbrc5ZX z3Xo_KibhW&K?I^Mb`V}^DOPaQRAU{8$!8v8ZphdSn&mt=-NqYHu-)s$N$hP5y`gM^ zf8hQOgLI zNvn)lkc`Z{ooxeP6;9^PkfrR=t`OCX6>KW|oHT-vXoxsEll9t0-ERQbis=ho#%@>>XQocbPH^$zI zado44Yh$i7Pn1AC9D7Z8}a<08H#|HTU#)(Z5SI|D_*E^zjS{e%ARa!W6kYoXniCx{zW`Vbz%$iywZgiPH-bFF~~WpnWjSnQv-Vj_Vo?+ z5A4Q!Z!eTG_&Yc_0H|*-{_?rI>kXra$J*N3lzrON4i!R59qtgyssZ`gq1LIjYSW_+ zEOjp3xU=m^wQb|sn|E%0vSazr*1YVGyT_jUyYD^sg~#;oM;|8CHr74%v9D~}kN3xK z*|{2=KlZSu?|t~If3ss}=aV6Q)5p|-bov$DI}S`7>z<|s)s6Eh-9uAHx<{Eqg<_$b zEgxpks`bWA-Me=U>`Ha_^`-`U2YdH*@2Km^+nc(73|?MdG+u7qed|me1Aw{idU3JD zs~x)g`uFTf?f!RaXb`EAQ;DkW7QC*)1xA?Ty7kC_T7Bu7BbT&yt=`;uMcYf-UfQvx z?W(q`+pcNb+PU4$9?2CK(W#z!PLSqLhnJg5b*Ofi3|MEdMRur8wZQ`N+v!0aYIOu& zqb>u6akvX^GyGrgaBRYRe+2%~2s{yivk~}I1Xhm1<<<3Aey+hdr2ffRS8oKVVb>ze z`r#_Rbc4m@T5V(omf^tyR$k3JmbdLfthdq)>4DebWg4I88MzoP6H9vSTV0Jfb#*DV zoxkf8v=+bXl^W(RGLZVZ^-`s#`MVK+b~TpgaqJ4e&AR@bvu~VzSG#zNt=ct%T{OF( zNV|yKm5{JqY!leq?1GZ*%3;m9G{ZI+L9Fz-28=8(TavnNg}$wZY%_dTL!x|E?`{O& zTDS}G^%{9@xYQZ@*l<}DE`i%`2p8e;#SjG zrT!5wdn|xon-1!+O#{haLAWz~F^}crFG#^NKm;7rA&BE9^X|$UfTsrnUtzdVIJBmv z3ffX>6))6&_Vo?!6~+~`pYL8J0S4{oOHe~QZclGr->tse(Y=4Uc0fH&ju3Yyz+L`m zdbxA#QxA7;yY#6xC9UcEx(+@3-ETbG@!idrU)|OAuD703y>C6&)_u+Td&WApbuYd3 zTzfD1+8;t&`uP6gjjCZ&%ajq_Z#WDb_D?HL|25L znjStKp!)LGN5c219q3_v%m(2Paefcf;iR0QcA&@Ej9*r}E8y7YY{M^e<$Acw)U(g+ z#BWGnt$xJ7Blz8n^hf)gR|9V!=JPBZ{WGPT@z-r%Nq>W(>+sjBw;GtV%}C$-@XPqH zonm}GU|`}1|F;M%eVQ}^(xY9E{asEsgdU6_%r4BYxCGNb)y!N6H>97$d=W-5c913W zg?7eq$Ow_id_6;_=e7-DydgU-00q4zLz_`GqOeg)_F3T_()p@&vi+*?mnGMAtx~jX zx~|iG%+{BMbe1vspI?8-$T+=v*ipI!ohKm;(bc0bn>!v!GF9>;hBmq3;e&knH`WhR zkL^Pp<#P+1+Yg@sf%<$o9C_&6e%Q7$2Z2wLHwwHf??Fc%{aSfNytD3Ed9T6y2%LS$ z$0rBp%6mHqtbdFj<7MTY!MiK(gMi%@%=YE41KySQK?tzvCBK#T9=yBqeg$w+dfye1 z_lu4^)&nc=*CX;i0hsBq5Bd18&2Z!QkRy-v&dU28yfc2iaD1MCOR|eT3%qL={U|)G z#4h?M0{S8an}=cX;jhh0!b?C*0>Ql50>}6(7yUkf-vrJ+Rvs#KILd^o^I>->r*Em?wR|s$24utnEq`W+bg`?cdMR! zy?<`U*awy5 z@Oa0A9nU=1x9ZUP?sq?~zT4ifdUo8@`MBDC^(kvd-TJpr53L$g5B}QHD{f!kgF)cl zj_RVI!{44YMqix?^+oQI<`qcYQ{pqQz z>bD-cX6_YZS1lhp``U9Tv>k_^_}EvT9-`&86Qk>{KVHAR{kv+Sh9Q!N9Pgq ziD~Z|TQm0HSlgJ`n$NA77}>hM=QZj6t5%I|IW=U;q4!lg7}9<8v-i<;64t7*2OhhG z_VD$c-|e`*=iWn)>F~Cr4BNJS>??a^=3wu~=trI(*r%ww@i_uJ2k>@eQak83;P)*$ z$MBamKYTcc;9GdBg?~rDVq1QVpuOtzuZ{3)x~|Lgqv_uaq`(%C5vA+W%m_xe6ON>)&?#9Vj9e`j3ffTqnEDPuqFnSQA z_ililuo&SwF`+%qy-35$vfsyzL9l48``Iqo)~rWen4lWrFD82q^A|SxG=E`}7YzP> z{%+Ovv>i4&{k3mXs!9Cyx{vQdMP@xB{v3b7N8Q}oqtqw)`$I~7mA`A0Xnhxiz^m$l z!uR5r{$#EUas-Bd>Im^S8-LGxED%=^&sL8XVFJ-BLXRGlgNM~3;Va1Ye`Di-x1&t# z(`jDVhPZa;H_<%r2aat%dFa@}9))Xzv#s~1@lL|^E40pZHK4f5EoP#)!4d2hkHEAMLnsEhWo@*V`jmDhy4Ex=J;7o3&%A-uct zy4!WQK+9w0{VX6?-diBA8#u~a4`=1k$e=vd6FzrBUXtDZyP&~jt_c(V{2usLVz>Va z!u=EL3BL@B4}T#dd?5TGAUMaup*rKY365z1DR>@Qh52qP1X%l;gWX=3v9p;Mw%Z4G z?_IIo{s-$M_`q(z5v>hp4r`BYy#4ZfSB-5LTld%%W0#y=KfZph{h3A8`OIR+1H)?{ zzkF=n-HY4RHof-K*3&)KQ~xigQrbQrtA+MmPe;9Wpsgoe{~g%Y>3cgKBaHkxwB=sa zyXEn=Zaq)gb_mwDP>?r|t~uOu@4ClS_ok11c=>_hzsH&qtw^=wTTgV4VI~yMrbpKX zJo&efXYKaRXRel6RkhGr{2)Ev;B$ootHjQJMg(ToB@5^bzQyJrZVR`ckYM#sp0QDx$Z0}`$4%O zLb>L_jx)6b!;q(*8fyEwbHkAM_H+2|(t$JQnwx3|4ui5|`(e)JKEC?)cb;49z5KC` z8pD3)xi|NA)R?#M`#95f#g6u|9gknJz3m{m)#HI}@&j90Y-P3?;bU6`jpX#!Yjyb0HumXV5+Alx`thl>jeX2| z;SWO%ebPT|W1oM6@ONwB_#3sIH%0h23IFv0KU=2o=@9EPgmo(x!W|gt`{8r8D116F zTjA5M2#I*>P%nwlUlO5T8KGYpp}#aje`$oiB|>M<6Fwbik^T6wg$|z%bxnkRjpP^1 zKl5<)FMK-GbrJsSgg?wx7>v%-p3L8ee6W!8Gn}hX6WA*1MBo$sdjqsOVuk4to?6M69(4ly-K|nuzeVxqM>)=eKYiD z!NAn~%`8pRq1%-SSqzxbqbSlwX7sp9HdtY7GGb`>o`u5pm4LJ; zw(a^6-AA+!>TzCspSC3lvz+P#B8Qt_X#}xD@V9+2vJxZdBQo zle+(cN5KDF`%!LzYO^V1JIaS+L3bQv-}eLW^0EFMgtHIp5g+zL?l|vS0Nuc0iUhq> zILeyelBgl}CVWvVClM+z{cr8Ssc@!ms7q z8{w+}ws9i6{^*vImni157*aFSk~iSXUug71A1z6Sv(#qT2#zPA9Te%Qyx z@7IBM^SKOwd@MIR&p`OUN94U5a5wPwv2plJL|)U8$2Nt0l=n9gdA|XeeWQJ>yuXgf zd!3^Puz~`4ZAcJUVVmmb_W@WL#Mt+LjL3V76F*FY2J)_eJjT_a@5Y-tv4-0I#EzTVpV;)VEvGQ^f|XP~|AMu|qu5>i;Eg~0lMk&LYrCy$r+W4q zXTJ26%b#9{y8aCMh-cIRxMwg6{(GvdniG1RQDLR?{inWoNelO%4apb%Mau~{6 z&xEV4jMGn?9Xpghdd<>LJ)FM%OXoU&?((_yH(a%}b9pwsZvUF6Rwz)*);4yh%!l26 zZnYA>O|FOkDfSL_FTZw4uZg$q=wANXGH{#z+cH@=m$l86Itlf8v9entn~yBuIW7yAx}6u4~hy zox;2Ku}-WXcaL3#HEF%OTqhwvZa)dayqyuv+-JZloVg zx9uK#HMTdML8IjMatwcML>^n$@ZlVnA6}Qp3%T6hmGbnQRw!Y;@N?XxAJ^(3{|4EE zL>k+?Ho%N;_(bQpHijg;alhkM{L=3&aGdi9)2`cEw!5TnLLP8^*9_Ny(e$jm=|2p+ z7J*+Mf!`g0e=!2n7PAlKeaZs(CHyB5`2UT--;BU*wle^p{x?Nn_ml(ayCU>gMBq`t zL{YOir!yI$-(~15DbDGX4BRa+uwkcUr#XO;6U%9t-jLUDxfevP5IQt(DRGD+BWEZn zusbT%=epSmaxNky%b52m*+6#qca4VY2>_=R_g!Y?>42r z#^3Eq^`RWQdf<=0*JHmKe_>GG$zK>KO@n_Ye{WRkL;OWxzscX5l%fsQ1tb0(e|PFO zh4EO6dex4~x1PUdig)WSZKn~Yo-tgu0pz<9zuf0~QFA5UIS*z^s9)ZI+-6t{vdwef zkCW#3gDfipq`<~Lfp=Hl5+Y;c$6qV&4BlON zw9D56XCEt@b;p%=#*xRK&dPfq-d%ZTAg>!Z`&fDZ2?$r-gOIlcIHs53TX`SBJL8M7 zh&&&JJj%C^eP>_7ca|R?@+FOH{s1({stFVRYy_~9am@!2i9ffV@N2{6FMvmXk!TqYc`+HYBuK9Cqumt0pTQE3S zd+6#1?;pP8i7(>s+9&$Yt$+Fb!|Na4GRD+J zpX@lR!}<2#$jKt4sT(f6bU%EwZ|_1H-uZ~1g0&_EI?XaldEDCYxBl(9^qR4wPpeB_ zdT!OBt0&Y`KcPmhJ2LiPhj%>j(sLbedFi>%+g^IE?b?@~Yrm!AskJ*^_V*8-LoRIF zKlUbx+j}2wU;f-9pTD~O)F+odfAyh}?B74|od=da|Hvn6{SUX@-1&u{tSRs|O7A_; zx#y4m<{L!hvwdS~+j^lswba)CRPE%0ANke?tLvX^+qU-5FV(uoeysGduhjN$InawV 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

XC{^w*)b7|$&mT>=cpBRRZ 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 G!TUF)BS(h- literal 970456 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¼P%Hs;^5Xk7Q}KD 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 diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/TOOLCHAIN_IAR/exactLE.a b/targets/TARGET_Maxim/TARGET_MAX32620/TOOLCHAIN_IAR/exactLE.a new file mode 100644 index 0000000000000000000000000000000000000000..987a5aa54102088a1f1254be8107493d2d265645 GIT binary patch literal 2799426 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

8MAqC$7E(`o_;7>iN;yv!|^)B*LRVVMrrMaMb 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 E0$H)hKUTJsWf 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

yk&=iJIzS?Kgv)U^lU_8wpXFn+S0;FmaN? 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 z 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%0D`V~A2>(OqYj+IS?JMAcC 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 z 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%0A!~3OrpWyZ4Gg;)6 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

@Ek z>kDEPt(_{LwSC~Jkt(&6I*vVnmOO}SG_&@X$CPqV;!gmn zBF;|$sUgabtNdRc%T~YEJ?&>`E5t*$Rpz2)-cgzT2(h7sAFgnF7wNymE;{n7eD=-B z##?UId21=Msl?%L+oQ)XQRNnO@YxN;}r~Agyu({t8x&}J_tlEvoksL--wG(2!VJg*;9)fZhxI7WZ6^31vl#OmOm1QqO zStf9)qY|52GH;r3bH*)^ccDuD0afyYA3pq}pT$87zeei>C8tuSvy4K3TwbY|_m;qh z8;ljH91M%8RK#u=4(m9sFtn4h7o57XF(WrqR1dUk-z1!t-DN3z&nM`XKQFrMOf|J{km5{_`5r^=}SlYOXQn zLQg!*)MCuo<$&ejzlae0Nz(J(<>XvU*I$GVlt=fYl=mA#Oy6Ao4QD_et}v!=F30jv z1J}@2jBI^YwGfMpTs}p>6Np*4CO?A^^9HI)CKN1A%43F0|6JpzNIo&xrDejHCh{ zR%rvO)x9T8CEr*YPU5Lj+bSai?!Wb&< zGp89W1yKb)z7OJt<(^Y45<^!Ia|=_{=fPx5;K(5D0f>jV$dmR$oO~_Pm_QIr^kT$q z{a(UUWN0>Dz2-A@6GmIx!N>@js7}P!ujLsT*Ngvd- zFM*HkM19Sa%euK6m(6zoeET(@^jXBo7c6%d8uD{U4~Ag5^U)ZlT20^3K6DYxI*bh79TCtp?xTpfKP;d0(^Snf{ti-gm)w z-6Z5)j5)*TCu4j9{p!Itnfravl4srl(&_i`B;}RiJDRAKpzGj11@cW3{{rMaR`eDGZ-^&~gNO}K)%N|Fo^Ig*{B>TdzfZ6ia zgKt05C=XEyl$X;q(9_@2x$8Jvz2c(u=QmtfT3QT4J%kh6>V3ei3C~tza42qiB;>({Smam2!f&I0={&OUMfnmT4 zRgW)!uFyR)UbJrT(PvpFn6v&)vrZf*K0AS2F6XqCs; zwUGe+`vCsu03PC8q671v9>5m@XBO50Pc46)##aiSBbLaVqSgtXslE>S6^OG>;(QJ@ z0=&k;d4j=}zyX9F#=J`T?BnD=3pfM&@Ep|7#Ts`6$NdLw81z!yRxbXy|5B4-TW>Gs z5*lpvUk7*byZVMKj{bX-5o zs$hZ!58N87?&#`BVa-^-9WbQkfgUt;`u1EikR0sZS<|>X#n5IN9L>F{Ic9Z$mKc)I z^vxwPHvXEJWMbF4(Cbyj#ce&^{R4f2G})_3+lOk3OM7TNj|XyW;JV(9G*Zg2RNq_U zD&?2I1}l+$12sF+WU4Mso1?l!l3%~+igX>ijJI2}yQUukPs9={`v0%L^R^2v!18Bz zPpofX0Ot}j*0HCpqn9Ta^aI~MnCNSdu`-E)igtqGZ4CBM(iy;(GUS@J1w>tFD~4%X zz-e2+0vtv!wi=1vUJM_Y#W2EuK4kUwj_!`W&NhFdHanEWWSe_tIG{1>FehZ21ENW? zv*+b+EImeQQ@|YhR)d27R98zxB-AihUMau}x}MuWSy8;n&T!&Z)BnWTOXv zr@xYhe(B`D(pG%w%CJrJ($U>-5mk+iu^R7Jg{pS9W3}UFF)8(lZv4u?M&zmsEkG8(fUTz%Y&vKVA*wqz-@7M(B{e!)|J@}Datnwas z>B*VN?DePLUj&!H;~V0M1^F3A7SZ5roN!;_+}g-Jvmd_kso5&)!%J#2j?5RDlPLPu z8;|Aj8y_4}(e%sxp9d)p@o}d%?*KpF@N>-)T%?R93m%F-|J5ZKbu%`QXJ7I+$$Yp* z&Wq;pYp4X~;p*fvTsQ9DTdUp|x<|pGcFsX~Z@M><%-E1|M{Ydw{t&df9a_!UZ;Y4R z&qZ9#iODZ}7w3nul-)e1Vz}8~U8R5M7bZdWOp@^3&Gu)DPf>Jb>)I*N9LY6SlK)6l zE;@fo&6CXH57p$CFjJb z8=?7-h`+$KJ>jCStPPcF*GH?g(^^!atf7=>i=;xO9LhoFd_pYJo=b?#%L!5b`Goiq z2+@+xkAmdGR|H9i3bHs1k+NWWAt5qdM2I!A*Aaqw3&2!aFiBmo90XQj99J0KRq7OV zHtTzY2NL`%3h@Guxe z53KJ_r5<)otQ0-o(lpO)3yc!c024yRB_L_1iI|@z=QJ_oI!#PRx6h= z#EQrDmIs8B4HG#(BZ{ngzJ>-eUqc;`#MmaA5M5E$dS!BELMl+xbb-$SDMJ&<_d*&* z%rLUxVn~I^IE0MMi;9rIyMqcod30phY8T+L%5#Ecn~;Yac*AK1OTlG`+I%~4Z+lW? zFUIEt`J`R|e+#~U@Tj`}fTPk~>sn2#z#u|(%DtfhC9tkNd2D)wjo@P|nIP=}Bq(pt zl848Vgmm(503SMp7mU11kz(KPm%wLeWH#|lnop~z?gO74jEvYM`GWUBdF)e^U#_J?V9o7Xur1><9r(aOsKU?xhV@N0ON8odW>i#qL`&OXlo=ABbe3!W_zW?tAX7d%C zsZ_s@!$m#;}|NaPEa`%X*|T}TgxV7dPZ zK2t7kNkTe#6v-ttZrP z?K5}m&^VCB!I17Gx(xNqdYt~B~V^YOOoD2v|};Hag1-V zVpt`?WC_9jUtU%wSV>WFajC>kY_C)tm2y0LrL9!`@3vQJ?T0h3v_?z22k1eCUcF+k zZ@Fqy8Gr1TyEjx5TrbDZa{po9$0eLX(0OIZF{2UK-YsPVT3vfr{*8|cG7sn0hLx2wgXMZNX7jOhPhJxU?0R9oU zk#{?Ah74SEllD=;+<$aq_DLUpmb%Zv`G$5saPzDne!!yB!09Kz=X+^c>M<|QF}+y* z4!C(XF#kAk>h6Xt*;Qk(2=1Evj!6LjndrT|7dK?##3vJ{{3U8NaK3lAAxo|E(U+<9 zz*#4T-sqz*S25u4F=UjN^wA5{wZN;rG}ONrXZh!=_X6i04kMqo_9jH|mh?H`_j_qs z;#xLEFI04E_A`r4w`L|p@NwYhz<=qbWvNjw&hktCPkYw_9#wU%cP0r536F%A5it%J zFd#w*NqAHw5E6+7h~XhBb}}RrG9fQ#k`NFTDEO*Xd|Rt6ZEuy&+tx?L$E~#5N_|vY z+TLpQ_ExW2LA}>%Z|kcq-2dN?Gy9wjVfxjW>>S%xTgju}5!ECYYK zBg+u0onywIF4lqnyd%qy3#MY}pCK+o+;%JeO6Qp8my27$|C=Mr5WAdX#xE52f`87D zWr#CnH^rH=)L7SFrnK8sJq44peZTfFFsA0pm% z@k3+ten^uG2Hocmw;=u)pX-Uw6=T@(>A(f1?(;`VNXc0IXixlTF~xQMah`Y#s1dHx z2H2l7{9Ipeh9@*31Njom9{bg^Jp5V@-|gYA^YGvH@ISVA%q)qwES~AT=ixu}@PG60 zsdADPCnE6tJP+^p@Y6i}Tn~SyhhOF48$CQf0$>8uzskek>EZA7@OwS{GamjG@T{Jx z_>Dk&9)*GAJY266B%dLQ!T$vc9A6R!u@(n}iZpyX4%mls{Lc7mzz4uj()>N(C*l}G zeHs5Ecs~1`rTMXFGK6Ym-gy38@c#+>yhoBhAN(Hh=KLMtUxGfXiSgf|K6sdw{6X;e z0-8o)2hgoekJ&o3IGl zGtk`8v0jb0J?N38F>p%H>eOOq=_?Q>trh=R`g+vWw^+35It8r4iNvB++mwSJ=?2E+ z!dM4a($;reaxd>K!Qxz{@6KI`ldgL`Zi$nwd$n(gNtY0nR=Oo7T_RRm@=}v70W58~ zNtY;`w%nx4^~ko|N!Pv5xztJ5o!>GiU3Y%VoOIp!EpyU!=eNwH%jL|LKV>G}neP0~ zGU;-ev!y@Fq&w4{-&rPIE`YZ6opjy#o#mwK&hKm|U2FaJOh?&Zlse6zL}Q}5b2}Se zCh~m7>%izK5Ym5qS+-fA4Ug1=A6t?>n(3@WE?ok2w%!tco77sLtfXb#?NT0F(yZj} zHOtFGZNbiFeBiWXLon=G@8Ex*XqS z4YpPgRMp{t(drzZ3(vu*UNW{uT~2A78S1KTbRxmkM#3GDa2M^W6ClIdb+wRPo&wW- zlvbFI(K+qBaHzFWz~QcNV{vC!!&)3;jk(&a5C}KoeZTBOomKE$s4RCi{2hzj^)$we zqNYd)>j$t8V!c%hPAorM8*D|1M=HZk+wjH$FE(y0jRvCOO?Le{=XOU?Ge=6-weEgK zQAgAiTT5+oA2(deM_8nPG!r_XvZaP&>+y}Z#p^;{flgh&amuL}MG%X(9q!|;-gFYH zM{YmqVH*F+!Ic>q-BQ=gWPKorjxu__P%-%_% zozmMVfH3Qx)5A31^1dSP%-_*BSD@Sy*ngp`(8-Uwtp8~dmIroatf&TD@rngY02Ev@ zt7J}b+05eNX{DvH{S~oglV-<-L@qXBApaUUQGm_yz^;seT^R$rGLD2*?Ae9!5AW(2 z*p)G`E2BFSicTLuXdXal1}6XNnZ;$rMXrqw_Wltb_rDEA<5g=zX6u{Ti^69^mvIWP z|02G0U{{9Pa3~)_U3%PHC`ysfaLhZ~rTs^osOXU49 z6F{%a-V;O0KN|J(>_?Zqmoj9_M|qE@Z1n{z0N*?8!Mr_#zmj?T-jB!SC_AaUzi{7> zr^8i4o*44goc1dJrpUicKUePS81`T<_GBsPw|-+4mbh^4JzXcYyHh=KAJv^P`2~Et!Dxg^lK5(W9#-ASQ*elnB2V zfB3A_SJ#K1tt}rn_{3Ag_q}uD@DG2Lj$Is+PP`oZIL2ddNuJa#tl#-);idljo8>+d z;cpI_G}GQMk{Xf6w#u}PJo1>3{A`cUp|Cjv;K;#3SptU+a3_k&nX)DdQ+|EepR?D_ zZGE`t{;OO$Flogs=Imv9LtUj*AD%2zNk?u}xfNCwOFg%BmdT+5<#OkY`s?+*KAbf% z=YHy?R~k7`UGHp7SLK;ml`HeT9WU7cFip5>`v-_;f?sook-uKG#G5{v zD*X5FYGDqAf7e=5UZ#Axe~7uBc;Z35YY4E`a@WxA=C_+CSM9{r5Nn;RU!J-5U~xH9 z#%nEvZ%sS@HNGt~!OVg+hMK0yEg+dswgxN^&sHF>`O_sorPa~1YX!5wE?6&5D&SpCHotF(d?z(A}2h{%H|!|xM) z|EH#;V!e*~pPG^mv-W=^WTH}V080t~jh$%u=?D`!(A&hU)Ab%Q;X}bNyUeKD-L#xk zx&BCI2`b6mR2Exh#y88(){iP@>&Fni@q*g}7(iL4{8Fe~Bygjy>-Bn7Cw45z_H>g* z4n;iM7?pdQ@vz$E6Uq#w0#JQw?wIznjTh@?=UVs$ottD*|B1DSwnn{sPm~?`4L5RzxNS=2Q z0C+*{mV#qC?rhEw`(~>aybKBl=@ebLLWsW z#1^&Ef%-eiLyjb+@ta8@zl9X?TS>PHwK@{=JGA^xQk?vCQpmqSilq(TBt_zPlcHSi zA?;Qx?zz?C+vMT&eWb|z{iLYm2S|~rhe$hxc$jo5R& z=@udOks|(S(oI4FGjz zNO~<+)R1=J1FxiLyniFT0@q&(=*3vwLRyaNkn~Dif20d>{gK{?>yPw$^y8!LEK; zVC%@L69(Z3yKv#h0_?%92j|0Ws*w~$v>G&7dy#RWJK-T5$r9<^p0NXf{MV+{a!2q_ zD)5B`DY)3pR!X)WXZcRl-lBk$=`F{4CZNlQx0|=8?!Y$#>cRL<(oWyL|LDbDAi72c$-Wo>>hfAbRyP6&(bcyxn#Ov z_X%lmp&mcq9G&*;&mis3>9p}AaLn^PPp5tQXOQ-Moi+wK$12~>Jz#-OyF9sR+sz%9 zH+r8~bFa`YEKIHo7_B-1EiBdno{y=WeLt&*$XBUdS(IE?c)^>1dkkkzWD7E05Fc!6>_^D_1ENc|dU_F`;E z!6S86R6Uw!;gOt=;IzX>?JPWk&(=IQWHKFo)QIv%(q25xgEj?)=po;PSq4(*-2}>X zZzDzPzk_n5`!A%h|7}v(`4K7fpC#R(H(>^`*^fN*4(j-KNxRiYkC@&E;PWrS)C4J} zXomQdoiU_6n1usvT8r5nEiWP6q&|j3`C=`v)ABW-l(%SkmzHnS@|{|KyOw_gl;y{b zj6Cm0l%w*v$uS>OEc;0@rNT{%`ItiC=EQtVnQ#*#>-|mAYHR`q&B7GPN2DnKv{cX# z@>po{cFH%2AGUNgFU_2%3*_-by1q{t6H#s6b}4hs2zr*fKAwtBQVIq{0NAh!^q zEy%gn3{qSLOqg@1Xxnn`6nQ|7qzSY}@ry?ZawDL z)~iH;pr7ayFanl!Z_?fiJrtJ{%rUA;+C$OFKs|nu%mj0Ys*~@FjQn{Nv~0`}Y}P{R zI`(woyaYWo8z&fh6_Ch$XuWh)*f>Wk=4;sK>A3OGGd3tP$LI^BJ#9`*lnp?iq~pk4 zt&fkU=glwenf&7VmVs&S!jJjzX@fJM$9gxx_~*5^0D8POc^di;8RFTi)_PjS$*dfs#|JS{$&jyK(B zpvU~uo@xK_?7ftry-M`W#-8j;kKo@*=(Qrw8@&EKVcGL*<#_)6B0+oeFh5}Yo6wKF zCD7aKbq>7Ozh^9a1^w8233@#V*jrW<^H1JOa8A7Z@*^2vO~BsYEPI9h_%{?CHpX9l zf;Ye0pl8Ytw`CdP`F8{KFz)OVy!O&@?>6>KKON8BXy_&4-_@2qGzl5v*}ENjU46Xk zTff6*#{5H39?>4Z44R04H(K`K!V&F#6MBhUAHy*~Fy+Uw0zhH!>~?aAWL3?A7NmG8jr!mB{HwAi$`1du- z-WkeVTzmH>Xs=*a%)jz}?3F+-s^e|qz25G&>@Doa-owyKq`jPsN;T!Ts2_XSh@6nU zuUYo0`muL!g7!|B6Z3CzKlV%(>Z+jX4xtM>o@$7NnfG`7k5q0SL>$Uey%U+$^C?YDb(XirdvAA+UZ6Bn%J^~G02Pguy%(6R5=z1GR0Z9T$&H`3Y0`D0| z{u-wZL?=xJyMhw@VA?+dNmnk5)ckq>@G5gCX@*(^=EyQV{9q5C#q~CFR&FXNA?Dga zA4fHDP(Yp+Cn3s4X}$-P0V4dya-EQztk@;_JO`q#Q1jmbWl-lICw`!h*(s!83FdQ* zWWd#vf=8I&DNg?7H%5Q&;>U|WSv+S>J_OGPJQW5h$27-pVh)F+<^hHJa&eIpKS?ek zQq7dYL86Em(;*c(oA2TQ@n!MsI?lFu;O%?jGsOy5{9sS~U~!=gJ*}LLbkX9{1C%p2JQy%?5I@87I%UlVOYfP2G6=uAzOS8JUcAI{{XxR zsj%!Wk0D|o;>Q{V*xT>YAL`K`Dk1V>^^+}LbLkKB=noTbA>MDWa_x#OI1ph>x|GYz4vR*c;)|A0Z~W?2Yuqj})i5;zxPn zM+weQn~;hns_y)amftijHwwsKl}mq&N8igI=ZVh~OK`p!(DHg%<+3+Lgur(>>7l=H z#ZMKNfbX^9FL%XH6E}n3WW|5g6<;L21Aem=&u_AtK*+>>;O{a5`1dnce2Ik9y3dM# z(-mJP{tW&}EB=rxezq8j(Zo-z_%UWC5;8(2P6Ypg6+g`tf4Z0l{x?>9l`H-Xu@d|n zR{ZB(@#Ufo{F_#Mk1Kwmr~f-%>_GgxmcAPTaFM5e$4baQzTHt_khsfbze?-@Uuebu zz!kq(JP*Fpif4PY`46oQ@CPiu%d*dYd54GphQ&`n`~x2T35)0XzqI&V@c(7;j6dMv|J&lJ{}&IRoerT6 zJb$!@KiR{VdH6*hzRttfd-x6yf3b(Z+QZ-G;qUhF4|(|KG|z12;(q?Ri_a9FfZvBW zHYtANc?hcb5*$y_{7K+nwBiXl_}_~u@*dwI1fMOcfF3^ zF7=0rD0n}Pc}X+0s0>G#s z#3K6(m7hUk98QdtU$&S8hH)xBTg(K{b2&!JMM+hGFL3y5v6d$z_+@$Ki0$BG^^+}j zg6DN({JjG_?HPWzK3}DmB_4F~qr~^YGi~F~kHBZ3Kqf%O^7twEKj7Gu@5|t+tMtc; z{{hdJmTUvm|0{URImmeO!>y-P`jzkDPxbJ#J^axi8hh91z2OGpWsUs=+MwYNy`MbS zA3_f`@Poz$1(A-9E`Tt`fEimmHUwHjJ)u_lTo-5$g&ISRBHGm$Xd~*I{N|X&h8yEZ zkfxR0or2<1$AIEf z2M)d+LG+Y}Ur1L+fl}v7<$+RoXrur!G>49%K&fLYK)6G#PzGaoye7V+k>HRLAP*V| z4k-cVppoE^l34O(IHUw#ki3{~?uu}L zCyU*{jWOU!q-#CT$ABl{h$VM`Cq2N8rN$o*aAPS7KmufXfE!s0O6~@3bbu#4z>N;@ z{o#mVF0!(jYztoRTj=j%3!HGB1J8 zN@8-2nPn}38!8Iv%7apz?goKGm8t0)0HbmOr+7}E85;?W>i!^syx372s(0X|kdhd| z#`a(vK5`yz4|j!wt>I1B$=cDbBPqn^A|v>|eSp45zNe`Zth+OTpa=aonT-X z*&9eKM$A5SN=!hT?F!=Cg)&-p8}caHxL&3LSj4jd+ZbxCHhzU1(Qm=PT@@AM9Cfj)-l``il|+_3UN_FEw*-abc$$CgNgv8BS0T@Pv-${t5~wU zdU-&8q;x@TbzoH}5@i8eV)oretjbY--Em1*Z)3Dem#mSnggqjHZhAxtiBk(ZBOU7^ z!8Z25C{KM8*ciq4J_D{K)a`;YE0LJcN+u@M3AF{f+9Il|)PC!5G-6e!B~x{Zy6##p z+9c6>odH5xLIe^MwP`b`p-_~wi|14~1^}eVIx!LlAu|@GtBdfMxY_lD0xK#OLJfeG zD65FV-VB7eJDbv`a8rk&DrpK^gX^M{%Ia>!cI|d@Kp^Z2M%QDTx8$@__!4JR9Jc~( zCjO$hvGT4ev)jH7?Xsg?-Dss{8Ar2GY#jGQ!tu4Za^Q|ES)!ei(d~~X$qU9U(xnzF z8cSVOP+yI3!+HRLUL=jJg;%#$qh4CSUA9sQ z^3}9KbuA zjyH#Gp$#38_0j3L%N_}q(5p2)Q3OYt?9VXAv0bfhbhf5YuuGx?>d5KgHh#Gqh&2Qn zqtI1vj#j(EE$dG~o_*BxqLCw5Y7e2aj^_g+rsKzQJS~c0)sgfD@D2y?4hQfK4VYsE z23D1;14|4a8&ge>jghJs)X8g3j+czukP34+tYrDg(jcZ!NYa_u(I23gv45%ltIM<*G*I=He zt<;q$p^+c8i$um?UZs@JP5nH@iUgi`1JR4 zBrGB|4jsU2g#-fTmi%&}!{5-+7@F%Z>YZ3Ld-YU5Co%lhi;O_7wv*3er?E%Ur=b7o z>W&(nxF;>`=<S;dzNu!A%k&^j=XlFsky?Shxly;CR_-_y;&u%ISBJf? zjE6nGc_U=nTvEufdR6MpCxyJ6bOkmclS03e^jh^cnesEq!|vHy4p$@&+!E3+3vmu9 zDhj6MzK>O;*J+42$XSQfTchO{lAf602Nu1TV`3Grk7vBs?u zolHWGAuDok+zq5Cmm5jp9GZdHof)b3mOt`JN6w@?~8iH#x)uW?n^?* zRf{mn@<~=3&tuv;@K|rgk3k%c((N7XIhlT(WSjsU7xUvxLM>KW00Fo*8WHWowUSJC z;$HeFADQ-X$xVB#RTQ&jQEc9xwj=d&;6^Rdm|xY}6Lbp6ECtlL6Vjw7F{B1u?6NS> z4<*wDyCQgRtH;lWjzy-8j^>!By-cT#{xz9t+l^p~EPAIAROm*4ZdH~7diG>`BJW1< zfPrHZ0Ke(hSP#y(Tzi4e{aAT{F3Ib~O6>*iM#=OdZfiVOr;XcMGSeP`T$_-C1FKU! zPkVsmlj%X+++U#6#{K$OrA z?L3n<3S5?XLvqt*dL~T3fgYDEb)c8mX+JP7OJ*6!F}Zf6O8Q|#IAY`}3j>3_q#*P# z;d~4uS@T&pt0x5_@33_8F*0Y#P(BTmNIb<_KAZFwg~XHHqClFPF4hP>o7HCSrc2aF zxam?g0&c>vcMHzTZdD^!>O)ojxeJ5{KlgxUA>9W_G17e!lnYUxBadP53*=$%Rgip) z#NQwfyKj@n$ogH-Yz))iBW=f?9?}jV%#e1fjc?f(32}&g1bBCsVNFL`C zyqD>7A5GR)j2KC;#u`Y_{44MTM1Gsv_?Cr{b}{+wc)}swf^s3nh9$J>U&77?IZ$D35vw`nA#iR+oPT!eLq%D zgaiVPkA!1G;H3G$`Fv?9_|F5J!{^Xc(vf<)0Bt^7k<&vW796?$yla`NMqsTYuN8x6Th|{7G zaavWw=X2ii)I&wdVG=6n1oEh$aiplY6G>4~`J|{Q`FMc~$4@>}KRP25ynwiqJKkmSa zjTg{PRNd%E>iH@31eU+7OD$)EeH;xh75o-0W7(sMUG_$yf)>fj)JmGLJndvwqb*#B z2JHZwjpDVuZ`fn~clRlxRA5XT<6VAu6l z13hDd>gE_-t?N3fg`OSEwH-`QuPH&j4GHSuUg^pQ{rfIt-f$-b##hE2f*x)IeZoDE z*xgtQ`exQIFQxHXo7d9!@w4?dL9ZD~)br!VKs|4|uT9a@hEgN;$D8i?xDl9iP5s5Q z*8;uEVrHBpuf4Y{d+2Iph-dF(=p|AvA>5;kf5`d~?R7(Mla9BE*S|kl_E1DJ#Pjbk z^l%&Q6TJ2!r^WokDKf;fw+(u&eXOYgs$IYDTK1;(WA9Lc_F7=XlwVOl_BKH;k@EYK zWe>vz8RF$P4FiZC9d8qF`E7!p@z0DY;@P`8L3>0gH1^7L!tw0oKrfN{*lgM3LkdGY zd)Gh@!?!-co8Lp0y}4RDp1olhfF$DICg|nB4*LUh-;8JP>ICh5VA(sPAO8lS@)Pkd z0zKnjc|Z2HC1~$m%ih9%>>WzbUdzmwe~bFDw+VW^I^HJU`u(G2uc{w=J~Z}j+mJr? z+S>pw>)}p;Nr=HjO{8L yKL+ak89&?JU!iCG8%rew>K(? Date: Tue, 27 Sep 2016 10:47:40 -0500 Subject: [PATCH 13/89] Increased default stack and heap sizes. --- .../device/TOOLCHAIN_GCC_ARM/startup_max32600.S | 2 +- .../TARGET_MAX32600/device/TOOLCHAIN_IAR/MAX32600.icf | 4 ++-- .../device/TOOLCHAIN_GCC_ARM/startup_max32610.S | 2 +- .../TARGET_MAX32610/device/TOOLCHAIN_IAR/MAX32610.icf | 4 ++-- .../device/TOOLCHAIN_GCC_ARM/startup_max32620.S | 4 ++-- .../TARGET_MAX32620/device/TOOLCHAIN_IAR/MAX32620.icf | 4 ++-- 6 files changed, 10 insertions(+), 10 deletions(-) diff --git a/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_GCC_ARM/startup_max32600.S b/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_GCC_ARM/startup_max32600.S index cda4da904bc..227ecb3565d 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_GCC_ARM/startup_max32600.S +++ b/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_GCC_ARM/startup_max32600.S @@ -66,7 +66,7 @@ __StackTop: #ifdef __HEAP_SIZE .equ Heap_Size, __HEAP_SIZE #else - .equ Heap_Size, 0x00000C00 + .equ Heap_Size, 0x00004000 #endif .globl __HeapBase .globl __HeapLimit diff --git a/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_IAR/MAX32600.icf b/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_IAR/MAX32600.icf index 9147f7160e7..3e0cd5e85f0 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_IAR/MAX32600.icf +++ b/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_IAR/MAX32600.icf @@ -15,8 +15,8 @@ define region ROM_region = mem:[from __region_ROM_start__ to __region_ROM define region RAM_region = mem:[from __region_RAM_start__ to __region_RAM_end__]; /* Stack and Heap */ -define symbol __size_cstack__ = 0x800; -define symbol __size_heap__ = 0x800; +define symbol __size_cstack__ = 0x1000; +define symbol __size_heap__ = 0x4000; define block CSTACK with alignment = 8, size = __size_cstack__ { }; define block HEAP with alignment = 8, size = __size_heap__ { }; diff --git a/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_GCC_ARM/startup_max32610.S b/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_GCC_ARM/startup_max32610.S index cda4da904bc..227ecb3565d 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_GCC_ARM/startup_max32610.S +++ b/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_GCC_ARM/startup_max32610.S @@ -66,7 +66,7 @@ __StackTop: #ifdef __HEAP_SIZE .equ Heap_Size, __HEAP_SIZE #else - .equ Heap_Size, 0x00000C00 + .equ Heap_Size, 0x00004000 #endif .globl __HeapBase .globl __HeapLimit diff --git a/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_IAR/MAX32610.icf b/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_IAR/MAX32610.icf index 9147f7160e7..3e0cd5e85f0 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_IAR/MAX32610.icf +++ b/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_IAR/MAX32610.icf @@ -15,8 +15,8 @@ define region ROM_region = mem:[from __region_ROM_start__ to __region_ROM define region RAM_region = mem:[from __region_RAM_start__ to __region_RAM_end__]; /* Stack and Heap */ -define symbol __size_cstack__ = 0x800; -define symbol __size_heap__ = 0x800; +define symbol __size_cstack__ = 0x1000; +define symbol __size_heap__ = 0x4000; define block CSTACK with alignment = 8, size = __size_cstack__ { }; define block HEAP with alignment = 8, size = __size_heap__ { }; diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_GCC_ARM/startup_max32620.S b/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_GCC_ARM/startup_max32620.S index 730788d41e2..12006b3247b 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_GCC_ARM/startup_max32620.S +++ b/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_GCC_ARM/startup_max32620.S @@ -51,7 +51,7 @@ #ifdef __STACK_SIZE .equ Stack_Size, __STACK_SIZE #else - .equ Stack_Size, 0x00001000 + .equ Stack_Size, 0x00002000 #endif .globl __StackTop .globl __StackLimit @@ -66,7 +66,7 @@ __StackTop: #ifdef __HEAP_SIZE .equ Heap_Size, __HEAP_SIZE #else - .equ Heap_Size, 0x00000C00 + .equ Heap_Size, 0x00004000 #endif .globl __HeapBase .globl __HeapLimit diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_IAR/MAX32620.icf b/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_IAR/MAX32620.icf index 31545799e4a..203c221868c 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_IAR/MAX32620.icf +++ b/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_IAR/MAX32620.icf @@ -15,8 +15,8 @@ define region ROM_region = mem:[from __region_ROM_start__ to __region_ROM define region RAM_region = mem:[from __region_RAM_start__ to __region_RAM_end__]; /* Stack and Heap */ -define symbol __size_cstack__ = 0x800; -define symbol __size_heap__ = 0x800; +define symbol __size_cstack__ = 0x2000; +define symbol __size_heap__ = 0x4000; define block CSTACK with alignment = 8, size = __size_cstack__ { }; define block HEAP with alignment = 8, size = __size_heap__ { }; From c824d523d187c3712f0ee7c899ef7cd1bb999d1f Mon Sep 17 00:00:00 2001 From: Jeremy Brodt Date: Tue, 27 Sep 2016 14:51:13 -0500 Subject: [PATCH 14/89] Fixed deepsleep issue using IAR. --- targets/TARGET_Maxim/TARGET_MAX32620/sleep.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/sleep.c b/targets/TARGET_Maxim/TARGET_MAX32620/sleep.c index 146c20c9e12..81874b0f2a4 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/sleep.c +++ b/targets/TARGET_Maxim/TARGET_MAX32620/sleep.c @@ -32,14 +32,12 @@ */ #include "sleep_api.h" -#include "cmsis.h" #include "pwrman_regs.h" #include "pwrseq_regs.h" #include "clkman_regs.h" #include "ioman_regs.h" #include "rtc_regs.h" #include "usb_regs.h" -#include "wait_api.h" #define REVISION_A3 2 #define REVISION_A4 3 @@ -178,7 +176,7 @@ void deepsleep(void) MXC_PWRSEQ->reg1 |= MXC_F_PWRSEQ_REG1_PWR_MBUS_GATE; // Dummy read to make sure SSB writes are complete - MXC_PWRSEQ->reg0; + MXC_PWRSEQ->reg0 = MXC_PWRSEQ->reg0; if (part_rev == REVISION_A4) { // Note: ARM deep-sleep requires a specific sequence to clear event latches, From 3e51eb427fa5402d4b23ceced55f256f60e01bfc Mon Sep 17 00:00:00 2001 From: Jeremy Brodt Date: Wed, 5 Oct 2016 16:20:44 -0500 Subject: [PATCH 15/89] Added support for FEATURE_BLE. Integrated MaximBLE library. --- .../targets/TARGET_Maxim/MaximBLE.cpp | 326 +++++ .../targets/TARGET_Maxim/MaximBLE.h | 92 ++ .../targets/TARGET_Maxim/MaximGap.cpp | 261 ++++ .../targets/TARGET_Maxim/MaximGap.h | 112 ++ .../targets/TARGET_Maxim/MaximGattClient.h | 58 + .../targets/TARGET_Maxim/MaximGattServer.cpp | 439 ++++++ .../targets/TARGET_Maxim/MaximGattServer.h | 84 ++ .../TARGET_Maxim/MaximSecurityManager.h | 55 + ...RE-20767-ARM-Permissive-Binary-License.txt | 49 + .../TARGET_Maxim/exactLE/hci/maxwsn/hci_drv.h | 114 ++ .../TARGET_Maxim/exactLE/hci/maxwsn/hci_vs.h | 59 + .../exactLE/stack/cfg/cfg_stack.h | 71 + .../exactLE/stack/include/att_api.h | 942 +++++++++++++ .../exactLE/stack/include/att_defs.h | 221 +++ .../exactLE/stack/include/att_handler.h | 67 + .../exactLE/stack/include/att_uuid.h | 431 ++++++ .../exactLE/stack/include/dm_api.h | 1235 +++++++++++++++++ .../exactLE/stack/include/dm_handler.h | 67 + .../exactLE/stack/include/hci_api.h | 375 +++++ .../exactLE/stack/include/hci_defs.h | 462 ++++++ .../exactLE/stack/include/hci_handler.h | 67 + .../exactLE/stack/include/l2c_api.h | 173 +++ .../exactLE/stack/include/l2c_defs.h | 76 + .../exactLE/stack/include/l2c_handler.h | 66 + .../exactLE/stack/include/smp_api.h | 195 +++ .../exactLE/stack/include/smp_defs.h | 122 ++ .../exactLE/stack/include/smp_handler.h | 67 + .../targets/TARGET_Maxim/exactLE/util/bda.h | 109 ++ .../exactLE/wsf/generic/wsf_os_int.h | 105 ++ .../exactLE/wsf/generic/wsf_types.h | 61 + .../exactLE/wsf/include/wsf_buf.h | 137 ++ .../exactLE/wsf/include/wsf_msg.h | 123 ++ .../TARGET_Maxim/exactLE/wsf/include/wsf_os.h | 147 ++ .../exactLE/wsf/include/wsf_queue.h | 155 +++ .../exactLE/wsf/include/wsf_sec.h | 111 ++ .../exactLE/wsf/include/wsf_timer.h | 161 +++ .../TOOLCHAIN_ARM_STD/exactLE.ar | Bin 2802216 -> 3274448 bytes .../TOOLCHAIN_GCC_ARM/libexactLE.a | Bin 1187986 -> 1189568 bytes .../TARGET_MAX32620/TOOLCHAIN_IAR/exactLE.a | Bin 2799426 -> 3278636 bytes targets/targets.json | 2 + 40 files changed, 7397 insertions(+) create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/MaximBLE.cpp create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/MaximBLE.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/MaximGap.cpp create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/MaximGap.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/MaximGattClient.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/MaximGattServer.cpp create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/MaximGattServer.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/MaximSecurityManager.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/LES-PRE-20767-ARM-Permissive-Binary-License.txt create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/hci/maxwsn/hci_drv.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/hci/maxwsn/hci_vs.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/cfg/cfg_stack.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/att_api.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/att_defs.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/att_handler.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/att_uuid.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/dm_api.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/dm_handler.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/hci_api.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/hci_defs.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/hci_handler.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/l2c_api.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/l2c_defs.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/l2c_handler.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/smp_api.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/smp_defs.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/smp_handler.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/util/bda.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/generic/wsf_os_int.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/generic/wsf_types.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/include/wsf_buf.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/include/wsf_msg.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/include/wsf_os.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/include/wsf_queue.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/include/wsf_sec.h create mode 100644 features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/include/wsf_timer.h diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/MaximBLE.cpp b/features/FEATURE_BLE/targets/TARGET_Maxim/MaximBLE.cpp new file mode 100644 index 00000000000..5d442d70c3a --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/MaximBLE.cpp @@ -0,0 +1,326 @@ +/******************************************************************************* + * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES + * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Maxim Integrated + * Products, Inc. shall not be used except as stated in the Maxim Integrated + * Products, Inc. Branding Policy. + * + * The mere transfer of this software does not imply any licenses + * of trade secrets, proprietary technology, copyrights, patents, + * trademarks, maskwork rights, or any other form of intellectual + * property whatsoever. Maxim Integrated Products, Inc. retains all + * ownership rights. + ******************************************************************************* + */ + +#include "mbed.h" +#include "us_ticker_api.h" +#include "MaximBLE.h" +#include "wsf_types.h" +#include "wsf_msg.h" +#include "wsf_os.h" +#include "wsf_buf.h" +#include "wsf_sec.h" +#include "wsf_timer.h" +#include "hci_handler.h" +#include "dm_handler.h" +#include "l2c_handler.h" +#include "att_handler.h" +#include "smp_handler.h" +#include "l2c_api.h" +#include "att_api.h" +#include "smp_api.h" +#include "hci_drv.h" +#include "hci_vs.h" + +/* Number of WSF buffer pools */ +#define WSF_BUF_POOLS 4 + +/*! Free memory for pool buffers. */ +static uint8_t mainBufMem[768]; + +/*! Default pool descriptor. */ +static wsfBufPoolDesc_t mainPoolDesc[WSF_BUF_POOLS] = +{ + { 16, 8 }, + { 32, 4 }, + { 64, 2 }, + { 128, 2 } +}; + +/*! WSF handler ID */ +wsfHandlerId_t maximHandlerId; +static volatile int reset_complete; + +/* Current mbed SPI API does not support HW slave selects. Configured in HCI driver. */ +static DigitalOut _csn(HCI_CSN, 1); +static SPI _spi(HCI_MOSI, HCI_MISO, HCI_SCK, HCI_CSN); +static DigitalOut _rst(HCI_RST, 0); +static InterruptIn _irq(HCI_IRQ); + +/** + * The singleton which represents the MaximBLE transport for the BLE. + */ +static MaximBLE deviceInstance; + +/** + * BLE-API requires an implementation of the following function in order to + * obtain its transport handle. + */ +BLEInstanceBase *createBLEInstance(void) +{ + return (&deviceInstance); +} + +MaximBLE::MaximBLE(void) : initialized(false), instanceID(BLE::DEFAULT_INSTANCE) +{ +} + +MaximBLE::~MaximBLE(void) +{ +} + +const char *MaximBLE::getVersion(void) +{ + static char versionString[32]; + + strncpy(versionString, "unknown", sizeof(versionString)); + + return versionString; +} + +static void DmCback(dmEvt_t *pDmEvt) +{ + dmEvt_t *pMsg; + + if ((pMsg = (dmEvt_t*)WsfMsgAlloc(sizeof(dmEvt_t))) != NULL) + { + memcpy(pMsg, pDmEvt, sizeof(dmEvt_t)); + WsfMsgSend(maximHandlerId, pMsg); + } +} + +static void maximHandler(wsfEventMask_t event, wsfMsgHdr_t *pMsg) +{ + if (pMsg != NULL) + { + switch(pMsg->event) + { + case DM_RESET_CMPL_IND: + reset_complete = 1; + break; + case DM_ADV_START_IND: + break; + case DM_ADV_STOP_IND: + MaximGap::getInstance().advertisingStopped(); + break; + case DM_SCAN_REPORT_IND: + { + hciLeAdvReportEvt_t *scanReport = (hciLeAdvReportEvt_t*)pMsg; + MaximGap::getInstance().processAdvertisementReport( scanReport->addr, + scanReport->rssi, + (scanReport->eventType == DM_ADV_SCAN_RESPONSE) ? true : false, + (GapAdvertisingParams::AdvertisingType_t)scanReport->eventType, + scanReport->len, + scanReport->pData); + } + break; + case DM_CONN_OPEN_IND: + { + hciLeConnCmplEvt_t *connOpen = (hciLeConnCmplEvt_t*)pMsg; + MaximGap::getInstance().setConnectionHandle(connOpen->handle); + Gap::ConnectionParams_t params = { connOpen->connInterval, connOpen->connInterval, connOpen->connLatency, connOpen->supTimeout }; + Gap::AddressType_t ownAddrType; + Gap::Address_t ownAddr; + MaximGap::getInstance().getAddress(&ownAddrType, ownAddr); + MaximGap::getInstance().processConnectionEvent(connOpen->handle, + Gap::PERIPHERAL, + (Gap::AddressType_t)connOpen->addrType, + connOpen->peerAddr, + ownAddrType, + ownAddr, + ¶ms); + } + break; + case DM_CONN_CLOSE_IND: + { + hciDisconnectCmplEvt_t *connClose = (hciDisconnectCmplEvt_t*)pMsg; + MaximGap::getInstance().setConnectionHandle(DM_CONN_ID_NONE); + MaximGap::getInstance().processDisconnectionEvent(connClose->handle, (Gap::DisconnectionReason_t)connClose->reason); + } + break; + case DM_HW_ERROR_IND: + { + hciHwErrorEvt_t *error = (hciHwErrorEvt_t*)pMsg; + printf("HCI Hardware Error 0x%02x occurred\n", error->code); + } + break; + default: + break; + } + } +} + +static void AppServerConnCback(dmEvt_t *pDmEvt) +{ + dmConnId_t connId = (dmConnId_t)pDmEvt->hdr.param; + + switch (pDmEvt->hdr.event) + { + case DM_CONN_OPEN_IND: + /* set up CCC table with uninitialized (all zero) values */ + AttsCccInitTable(connId, NULL); + break; + case DM_CONN_CLOSE_IND: + /* clear CCC table on connection close */ + AttsCccClearTable(connId); + break; + default: + break; + } +} + +ble_error_t MaximBLE::init(BLE::InstanceID_t instanceID, FunctionPointerWithContext initCallback) +{ + wsfHandlerId_t handlerId; + + /* init OS subsystems */ + WsfTimerInit(1); + WsfBufInit(sizeof(mainBufMem), mainBufMem, WSF_BUF_POOLS, mainPoolDesc); + WsfSecInit(); + + /* init stack */ + handlerId = WsfOsSetNextHandler(HciHandler); + HciHandlerInit(handlerId); + + handlerId = WsfOsSetNextHandler(DmHandler); + DmAdvInit(); + DmScanInit(); + DmConnInit(); + DmConnSlaveInit(); + DmSecInit(); + DmHandlerInit(handlerId); + + handlerId = WsfOsSetNextHandler(L2cSlaveHandler); + L2cSlaveHandlerInit(handlerId); + L2cInit(); + L2cMasterInit(); + L2cSlaveInit(); + + handlerId = WsfOsSetNextHandler(AttHandler); + AttHandlerInit(handlerId); + AttsInit(); + AttsIndInit(); + AttcInit(); + + handlerId = WsfOsSetNextHandler(SmpHandler); + SmpHandlerInit(handlerId); + SmpiInit(); + SmprInit(); + + /* store handler ID */ + maximHandlerId = WsfOsSetNextHandler(maximHandler); + + /* init HCI */ + _irq.disable_irq(); + _irq.rise(hciDrvIsr); + _irq.fall(NULL); + hciDrvInit(HCI_CSN, HCI_RST, HCI_IRQ); + + /* Register for stack callbacks */ + DmRegister(DmCback); + DmConnRegister(DM_CLIENT_ID_APP, DmCback); + AttConnRegister(AppServerConnCback); + + /* Reset the device */ + reset_complete = 0; + DmDevReset(); + + while (!reset_complete) { + callDispatcher(); + } + + initialized = true; + BLE::InitializationCompleteCallbackContext context = { + BLE::Instance(instanceID), + BLE_ERROR_NONE + }; + initCallback.call(&context); + return BLE_ERROR_NONE; +} + +ble_error_t MaximBLE::shutdown(void) +{ + return BLE_ERROR_NOT_IMPLEMENTED; +} + +void MaximBLE::waitForEvent(void) +{ + static LowPowerTimeout nextTimeout; + timestamp_t nextTimestamp; + bool_t pTimerRunning; + + callDispatcher(); + + if (wsfOsReadyToSleep()) { + // setup an mbed timer for the next Wicentric timeout + nextTimestamp = (timestamp_t)WsfTimerNextExpiration(&pTimerRunning) * 1000; + if (pTimerRunning) { + nextTimeout.attach_us(timeoutCallback, nextTimestamp); + } + + // go to sleep + if (hciDrvReadyToSleep()) { + // go to deep sleep + deepsleep(); + hciDrvResume(); + } + else { + sleep(); + } + } +} + +void MaximBLE::processEvents() +{ + callDispatcher(); +} + +void MaximBLE::timeoutCallback(void) +{ + // do nothing. just an interrupt for wake up. +} + +void MaximBLE::callDispatcher(void) +{ + static uint32_t lastTimeUs = us_ticker_read(); + uint32_t currTimeUs, deltaTimeMs; + + // Update the current Wicentric time + currTimeUs = us_ticker_read(); + deltaTimeMs = (currTimeUs - lastTimeUs) / 1000; + if (deltaTimeMs > 0) { + WsfTimerUpdate(deltaTimeMs); + lastTimeUs += deltaTimeMs * 1000; + } + + wsfOsDispatcher(); +} diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/MaximBLE.h b/features/FEATURE_BLE/targets/TARGET_Maxim/MaximBLE.h new file mode 100644 index 00000000000..a36cea96bcd --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/MaximBLE.h @@ -0,0 +1,92 @@ +/******************************************************************************* + * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES + * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Maxim Integrated + * Products, Inc. shall not be used except as stated in the Maxim Integrated + * Products, Inc. Branding Policy. + * + * The mere transfer of this software does not imply any licenses + * of trade secrets, proprietary technology, copyrights, patents, + * trademarks, maskwork rights, or any other form of intellectual + * property whatsoever. Maxim Integrated Products, Inc. retains all + * ownership rights. + ******************************************************************************* + */ + +#ifndef _MAXIMBLE_H_ +#define _MAXIMBLE_H_ + +#include "ble/BLE.h" +#include "ble/blecommon.h" +#include "ble/BLEInstanceBase.h" + +#include "MaximGap.h" +#include "MaximGattServer.h" +#include "MaximGattClient.h" +#include "MaximSecurityManager.h" + +class MaximBLE : public BLEInstanceBase +{ +public: + MaximBLE(void); + virtual ~MaximBLE(void); + + virtual ble_error_t init(BLE::InstanceID_t instanceID, FunctionPointerWithContext initCallback); + virtual bool hasInitialized(void) const { + return initialized; + } + virtual ble_error_t shutdown(void); + virtual const char *getVersion(void); + + virtual Gap &getGap() { + return MaximGap::getInstance(); + }; + virtual const Gap &getGap() const { + return MaximGap::getInstance(); + }; + virtual GattServer &getGattServer() { + return MaximGattServer::getInstance(); + }; + virtual const GattServer &getGattServer() const { + return MaximGattServer::getInstance(); + }; + virtual GattClient &getGattClient() { + return MaximGattClient::getInstance(); + }; + virtual SecurityManager &getSecurityManager() { + return MaximSecurityManager::getInstance(); + }; + virtual const SecurityManager &getSecurityManager() const { + return MaximSecurityManager::getInstance(); + }; + + virtual void waitForEvent(void); + virtual void processEvents(void); + +private: + bool initialized; + BLE::InstanceID_t instanceID; + + static void timeoutCallback(void); + void callDispatcher(void); +}; + +#endif /* _MAXIMBLE_H_ */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/MaximGap.cpp b/features/FEATURE_BLE/targets/TARGET_Maxim/MaximGap.cpp new file mode 100644 index 00000000000..e6cb24d43a6 --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/MaximGap.cpp @@ -0,0 +1,261 @@ +/******************************************************************************* + * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES + * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Maxim Integrated + * Products, Inc. shall not be used except as stated in the Maxim Integrated + * Products, Inc. Branding Policy. + * + * The mere transfer of this software does not imply any licenses + * of trade secrets, proprietary technology, copyrights, patents, + * trademarks, maskwork rights, or any other form of intellectual + * property whatsoever. Maxim Integrated Products, Inc. retains all + * ownership rights. + ******************************************************************************* + */ + +#include "MaximGap.h" +#include "mbed.h" +#include "hci_vs.h" + +MaximGap &MaximGap::getInstance() { + static MaximGap m_instance; + return m_instance; +} + +ble_error_t MaximGap::setAdvertisingData(const GapAdvertisingData &advData, const GapAdvertisingData &scanResponse) +{ + /* Make sure we don't exceed the advertising payload length */ + if (advData.getPayloadLen() > GAP_ADVERTISING_DATA_MAX_PAYLOAD) { + return BLE_ERROR_BUFFER_OVERFLOW; + } + + /* Make sure we have a payload! */ + if (advData.getPayloadLen() == 0) { + return BLE_ERROR_PARAM_OUT_OF_RANGE; + } + + /* save advertising and scan response data */ + advDataLen = advData.getPayloadLen(); + scanResponseLen = scanResponse.getPayloadLen(); + memcpy((void*)advDataCache, (void*)advData.getPayload(), advDataLen); + memcpy((void*)advDataCache, (void*)advData.getPayload(), scanResponseLen); + + return BLE_ERROR_NONE; +} + +ble_error_t MaximGap::startAdvertising(const GapAdvertisingParams ¶ms) +{ + /* Make sure we support the advertising type */ + if (params.getAdvertisingType() == GapAdvertisingParams::ADV_CONNECTABLE_DIRECTED) { + /* ToDo: This requires a proper security implementation, etc. */ + return BLE_ERROR_NOT_IMPLEMENTED; + } + + /* Check interval range */ + if (params.getAdvertisingType() == GapAdvertisingParams::ADV_NON_CONNECTABLE_UNDIRECTED) { + /* Min delay is slightly longer for unconnectable devices */ + if ((params.getInterval() < GapAdvertisingParams::GAP_ADV_PARAMS_INTERVAL_MIN_NONCON) || + (params.getInterval() > GapAdvertisingParams::GAP_ADV_PARAMS_INTERVAL_MAX)) { + return BLE_ERROR_PARAM_OUT_OF_RANGE; + } + } else { + if ((params.getInterval() < GapAdvertisingParams::GAP_ADV_PARAMS_INTERVAL_MIN) || + (params.getInterval() > GapAdvertisingParams::GAP_ADV_PARAMS_INTERVAL_MAX)) { + return BLE_ERROR_PARAM_OUT_OF_RANGE; + } + } + + /* Check timeout is zero for Connectable Directed */ + if ((params.getAdvertisingType() == GapAdvertisingParams::ADV_CONNECTABLE_DIRECTED) && (params.getTimeout() != 0)) { + /* Timeout must be 0 with this type, although we'll never get here */ + /* since this isn't implemented yet anyway */ + return BLE_ERROR_PARAM_OUT_OF_RANGE; + } + + /* Check timeout for other advertising types */ + if ((params.getAdvertisingType() != GapAdvertisingParams::ADV_CONNECTABLE_DIRECTED) && + (params.getTimeout() > GapAdvertisingParams::GAP_ADV_PARAMS_TIMEOUT_MAX)) { + return BLE_ERROR_PARAM_OUT_OF_RANGE; + } + + /* set advertising and scan response data for discoverable mode */ + DmAdvSetData(DM_DATA_LOC_ADV, advDataLen, advDataCache); + DmAdvSetData(DM_DATA_LOC_SCAN, scanResponseLen, scanResponseCache); + + DmAdvSetInterval(params.getInterval(), params.getInterval()); + DmAdvStart(params.getAdvertisingType(), params.getTimeout()); + + state.advertising = 1; + + return BLE_ERROR_NONE; +} + +ble_error_t MaximGap::stopAdvertising(void) +{ + DmAdvStop(); + + state.advertising = 0; + + return BLE_ERROR_NONE; +} + +void MaximGap::advertisingStopped(void) +{ + /* If advertising stopped due to a call to stopAdvertising(), state.advertising will + * be '0.' Otherwise, advertising must have stopped due to a timeout + */ + if (state.advertising) { + processTimeoutEvent(Gap::TIMEOUT_SRC_ADVERTISING); + } +} + +ble_error_t MaximGap::disconnect(DisconnectionReason_t reason) +{ + DmConnClose(DM_CLIENT_ID_APP, m_connectionHandle, reason); + + state.advertising = 0; + state.connected = 0; + + return BLE_ERROR_NONE; +} + +ble_error_t MaximGap::disconnect(Handle_t connectionHandle, DisconnectionReason_t reason) +{ + DmConnClose(DM_CLIENT_ID_APP, connectionHandle, reason); + + state.advertising = 0; + state.connected = 0; + + return BLE_ERROR_NONE; +} + +ble_error_t MaximGap::getPreferredConnectionParams(ConnectionParams_t *params) +{ + return BLE_ERROR_NOT_IMPLEMENTED; +} + +ble_error_t MaximGap::setPreferredConnectionParams(const ConnectionParams_t *params) +{ + return BLE_ERROR_NOT_IMPLEMENTED; +} + +ble_error_t MaximGap::updateConnectionParams(Handle_t handle, const ConnectionParams_t *newParams) +{ + if (DmConnCheckIdle(handle) != 0) { + return BLE_STACK_BUSY; + } + + hciConnSpec_t connSpec; + connSpec.connIntervalMin = newParams->minConnectionInterval; + connSpec.connIntervalMax = newParams->maxConnectionInterval; + connSpec.connLatency = newParams->slaveLatency; + connSpec.supTimeout = newParams->connectionSupervisionTimeout; + DmConnUpdate(handle, &connSpec); + + return BLE_ERROR_NONE; +} + +ble_error_t MaximGap::startRadioScan(const GapScanningParams &scanningParams) +{ + DmScanSetInterval(scanningParams.getInterval(), scanningParams.getWindow()); + + uint8_t scanType = scanningParams.getActiveScanning() ? DM_SCAN_TYPE_ACTIVE : DM_SCAN_TYPE_PASSIVE; + uint32_t duration = (uint32_t)scanningParams.getTimeout() * 1000; + if (duration > 0xFFFF) { + // saturate to 16-bits + duration = 0xFFFF; + } + + DmScanStart(DM_DISC_MODE_NONE, scanType, TRUE, duration); + + return BLE_ERROR_NONE; +} + +ble_error_t MaximGap::stopScan(void) +{ + DmScanStop(); + return BLE_ERROR_NONE; +} + +void MaximGap::setConnectionHandle(uint16_t connectionHandle) +{ + m_connectionHandle = connectionHandle; +} + +uint16_t MaximGap::getConnectionHandle(void) +{ + return m_connectionHandle; +} + +ble_error_t MaximGap::setAddress(AddressType_t type, const Address_t address) +{ + if ((type != BLEProtocol::AddressType::PUBLIC) && (type != BLEProtocol::AddressType::RANDOM_STATIC)) { + return BLE_ERROR_PARAM_OUT_OF_RANGE; + } + + m_type = type; + HciVsSetPublicAddr((uint8_t*)address); + + return BLE_ERROR_NONE; +} + +ble_error_t MaximGap::getAddress(AddressType_t *typeP, Address_t address) +{ + *typeP = m_type; + BdaCpy(address, HciGetBdAddr()); + return BLE_ERROR_NONE; +} + +ble_error_t MaximGap::setDeviceName(const uint8_t *deviceName) +{ + return BLE_ERROR_NOT_IMPLEMENTED; +} + +ble_error_t MaximGap::getDeviceName(uint8_t *deviceName, unsigned *lengthP) +{ + return BLE_ERROR_NOT_IMPLEMENTED; +} + +ble_error_t MaximGap::setAppearance(GapAdvertisingData::Appearance appearance) +{ + return BLE_ERROR_NOT_IMPLEMENTED; +} + +ble_error_t MaximGap::getAppearance(GapAdvertisingData::Appearance *appearanceP) +{ + return BLE_ERROR_NOT_IMPLEMENTED; +} + +ble_error_t MaximGap::setTxPower(int8_t txPower) +{ + HciVsSetTxPower(txPower); + return BLE_ERROR_NONE; +} + +void MaximGap::getPermittedTxPowerValues(const int8_t **valueArrayPP, size_t *countP) +{ + static const int8_t permittedTxValues[] = { + -18, -15, -12, -9, -6, -3, 0, 3 + }; + + *valueArrayPP = permittedTxValues; + *countP = sizeof(permittedTxValues) / sizeof(int8_t); +} diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/MaximGap.h b/features/FEATURE_BLE/targets/TARGET_Maxim/MaximGap.h new file mode 100644 index 00000000000..d126bc9069d --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/MaximGap.h @@ -0,0 +1,112 @@ +/******************************************************************************* + * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES + * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Maxim Integrated + * Products, Inc. shall not be used except as stated in the Maxim Integrated + * Products, Inc. Branding Policy. + * + * The mere transfer of this software does not imply any licenses + * of trade secrets, proprietary technology, copyrights, patents, + * trademarks, maskwork rights, or any other form of intellectual + * property whatsoever. Maxim Integrated Products, Inc. retains all + * ownership rights. + ******************************************************************************* + */ + +#ifndef _MAXIM_GAP_H_ +#define _MAXIM_GAP_H_ + +#include "mbed.h" +#include "ble/blecommon.h" +#include "ble/GapAdvertisingParams.h" +#include "ble/GapAdvertisingData.h" +#include "ble/Gap.h" +#include "ble/GapScanningParams.h" +#include "dm_api.h" +#include "att_api.h" + +/**************************************************************************/ +/*! + \brief + +*/ +/**************************************************************************/ +class MaximGap : public Gap +{ +public: + static MaximGap &getInstance(); + + /* Functions that must be implemented from Gap */ + virtual ble_error_t setAddress(AddressType_t type, const Address_t address); + virtual ble_error_t getAddress(AddressType_t *typeP, Address_t address); + virtual ble_error_t setAdvertisingData(const GapAdvertisingData &, const GapAdvertisingData &); + + #define BLE_GAP_ADV_INTERVAL_MIN 0x0020 /**< Minimum Advertising interval in 625 us units, i.e. 20 ms. */ + #define BLE_GAP_ADV_NONCON_INTERVAL_MIN 0x00A0 /**< Minimum Advertising interval in 625 us units for non connectable mode, i.e. 100 ms. */ + #define BLE_GAP_ADV_INTERVAL_MAX 0x4000 /**< Maximum Advertising interval in 625 us units, i.e. 10.24 s. */ + + virtual uint16_t getMinAdvertisingInterval(void) const { return BLE_GAP_ADV_INTERVAL_MIN; } + virtual uint16_t getMinNonConnectableAdvertisingInterval(void) const { return BLE_GAP_ADV_NONCON_INTERVAL_MIN; } + virtual uint16_t getMaxAdvertisingInterval(void) const { return BLE_GAP_ADV_INTERVAL_MAX; } + + virtual ble_error_t startAdvertising(const GapAdvertisingParams &); + virtual ble_error_t stopAdvertising(void); + virtual ble_error_t disconnect(Handle_t connectionHandle, DisconnectionReason_t reason); + virtual ble_error_t disconnect(DisconnectionReason_t reason); + + virtual ble_error_t setDeviceName(const uint8_t *deviceName); + virtual ble_error_t getDeviceName(uint8_t *deviceName, unsigned *lengthP); + virtual ble_error_t setAppearance(GapAdvertisingData::Appearance appearance); + virtual ble_error_t getAppearance(GapAdvertisingData::Appearance *appearanceP); + + virtual ble_error_t setTxPower(int8_t txPower); + virtual void getPermittedTxPowerValues(const int8_t **valueArrayPP, size_t *countP); + + void setConnectionHandle(uint16_t m_connectionHandle); + uint16_t getConnectionHandle(void); + + virtual ble_error_t getPreferredConnectionParams(ConnectionParams_t *params); + virtual ble_error_t setPreferredConnectionParams(const ConnectionParams_t *params); + virtual ble_error_t updateConnectionParams(Handle_t handle, const ConnectionParams_t *params); + + virtual ble_error_t startRadioScan(const GapScanningParams &scanningParams); + virtual ble_error_t stopScan(void); + + void advertisingStopped(void); + +private: + uint16_t m_connectionHandle; + addr_type_t m_type; + MaximGap() { + m_connectionHandle = DM_CONN_ID_NONE; + m_type = BLEProtocol::AddressType::RANDOM_STATIC; + } + + MaximGap(MaximGap const &); + void operator=(MaximGap const &); + + uint8_t advDataCache[HCI_LEN_LE_SET_ADV_DATA]; + uint8_t scanResponseCache[HCI_LEN_LE_SET_SCAN_RESP_DATA]; + int advDataLen; + int scanResponseLen; +}; + +#endif /* _MAXIM_GAP_H_ */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/MaximGattClient.h b/features/FEATURE_BLE/targets/TARGET_Maxim/MaximGattClient.h new file mode 100644 index 00000000000..5b78091471c --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/MaximGattClient.h @@ -0,0 +1,58 @@ +/******************************************************************************* + * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES + * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Maxim Integrated + * Products, Inc. shall not be used except as stated in the Maxim Integrated + * Products, Inc. Branding Policy. + * + * The mere transfer of this software does not imply any licenses + * of trade secrets, proprietary technology, copyrights, patents, + * trademarks, maskwork rights, or any other form of intellectual + * property whatsoever. Maxim Integrated Products, Inc. retains all + * ownership rights. + ******************************************************************************* + */ + +#ifndef _MAXIM_GATT_CLIENT_H_ +#define _MAXIM_GATT_CLIENT_H_ + +#include + +#include "ble/GattClient.h" + +class MaximGattClient : public GattClient +{ +public: + static MaximGattClient &getInstance() { + static MaximGattClient m_instance; + return m_instance; + } + +public: + MaximGattClient() { + /* empty */ + } + +private: + +}; + +#endif /* _MAXIM_GATT_CLIENT_H_ */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/MaximGattServer.cpp b/features/FEATURE_BLE/targets/TARGET_Maxim/MaximGattServer.cpp new file mode 100644 index 00000000000..c381e733f55 --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/MaximGattServer.cpp @@ -0,0 +1,439 @@ +/******************************************************************************* + * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES + * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Maxim Integrated + * Products, Inc. shall not be used except as stated in the Maxim Integrated + * Products, Inc. Branding Policy. + * + * The mere transfer of this software does not imply any licenses + * of trade secrets, proprietary technology, copyrights, patents, + * trademarks, maskwork rights, or any other form of intellectual + * property whatsoever. Maxim Integrated Products, Inc. retains all + * ownership rights. + ******************************************************************************* + */ + +#include "MaximGattServer.h" +#include "mbed.h" +#include "MaximGap.h" +#include "wsf_types.h" +#include "att_api.h" + +typedef struct mxmChar_s { + uint16_t descLen; + mxmChar_s() {} +} mxmChar_t; + +typedef struct mxmService_s mxmService_t; +struct mxmService_s { + uint16_t uuidLen; + mxmChar_t *chars; + attsGroup_t *attGroup; + mxmService_t *next; + mxmService_s() {} +}; + +static uint16_t currentHandle = 0x20; + +static UUID cccUUID(BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG); +static const uint16_t cccSize = sizeof(uint16_t); + +MaximGattServer &MaximGattServer::getInstance() { + static MaximGattServer m_instance; + return m_instance; +} + +ble_error_t MaximGattServer::addService(GattService &service) +{ + currentHandle = (currentHandle + 0xF) & ~0xF; + uint16_t startHandle = currentHandle; + + mxmService_t *mxmSvc = new mxmService_t; + + // Create WiCentric attribute group + mxmSvc->attGroup = new attsGroup_t; + + // Determine the attribute list length + unsigned int attListLen = 1; + for (int i = 0; i < service.getCharacteristicCount(); i++) { + attListLen += 2; + GattCharacteristic *p_char = service.getCharacteristic(i); + + if (p_char->getProperties() & (GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE)) { + // add a CCCD + attListLen++; + } + } + + // Create WiCentric attribute list + mxmSvc->attGroup->pAttr = (attsAttr_t*)malloc(attListLen * sizeof(attsAttr_t));; + if (mxmSvc->attGroup->pAttr == NULL) { + return BLE_ERROR_BUFFER_OVERFLOW; + } + + // Create characteristics + mxmSvc->chars = new mxmChar_t [service.getCharacteristicCount()]; + + attsAttr_t *currAtt = mxmSvc->attGroup->pAttr; + + /* Service */ + currAtt->pUuid = attPrimSvcUuid; + if (service.getUUID().shortOrLong() == UUID::UUID_TYPE_LONG) { + mxmSvc->uuidLen = UUID::LENGTH_OF_LONG_UUID; + } else { + mxmSvc->uuidLen = sizeof(UUID::ShortUUIDBytes_t); + } + currAtt->pValue = (uint8_t*)malloc(mxmSvc->uuidLen); + memcpy(currAtt->pValue, service.getUUID().getBaseUUID(), mxmSvc->uuidLen); + currAtt->maxLen = mxmSvc->uuidLen; + currAtt->pLen = &mxmSvc->uuidLen; + currAtt->settings = 0; + currAtt->permissions = ATTS_PERMIT_READ; + + currAtt++; + + /* Add characteristics to the service */ + for (int i = 0; i < service.getCharacteristicCount(); i++) { + GattCharacteristic *p_char = service.getCharacteristic(i); + + /* Skip any incompletely defined, read-only characteristics. */ + if ((p_char->getValueAttribute().getValuePtr() == NULL) && + (p_char->getValueAttribute().getLength() == 0) && + (p_char->getProperties() == GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ)) { + continue; + } + + // Create Characteristic Attribute + currentHandle += 2; + currAtt->pUuid = attChUuid; + + p_char->getValueAttribute().setHandle(currentHandle); + mxmSvc->chars[i].descLen = 1 + sizeof(currentHandle) + p_char->getValueAttribute().getUUID().getLen(); + currAtt->pValue = (uint8_t*)malloc(mxmSvc->chars[i].descLen); + uint8_t *pValue = currAtt->pValue; + *pValue++ = p_char->getProperties(); + memcpy(pValue, ¤tHandle, sizeof(currentHandle)); + pValue += sizeof(currentHandle); + memcpy(pValue, p_char->getValueAttribute().getUUID().getBaseUUID(), p_char->getValueAttribute().getUUID().getLen()); + + currAtt->pLen = &mxmSvc->chars[i].descLen; + currAtt->maxLen = mxmSvc->chars[i].descLen; + currAtt->settings = 0; + currAtt->permissions = ATTS_PERMIT_READ; + currAtt++; + + // Create Value Attribute + currAtt->pUuid = p_char->getValueAttribute().getUUID().getBaseUUID(); + currAtt->pValue = p_char->getValueAttribute().getValuePtr(); + currAtt->pLen = p_char->getValueAttribute().getLengthPtr(); + currAtt->maxLen = p_char->getValueAttribute().getMaxLength(); + currAtt->settings = ATTS_SET_WRITE_CBACK | ATTS_SET_READ_CBACK; + if (p_char->getValueAttribute().getUUID().shortOrLong() == UUID::UUID_TYPE_LONG) { + currAtt->settings |= ATTS_SET_UUID_128; + } + currAtt->permissions = 0; + if (p_char->getProperties() & GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_READ) { currAtt->permissions |= ATTS_PERMIT_READ; } + if (p_char->getProperties() & GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_WRITE) { currAtt->permissions |= ATTS_PERMIT_WRITE; } + currAtt++; + + bool cccCreated = false; + + for (int i = 0; i < p_char->getDescriptorCount(); i++) { + GattAttribute *p_att = p_char->getDescriptor(i); + + currentHandle++; + + currAtt->pUuid = p_att->getUUID().getBaseUUID(); + currAtt->pValue = p_att->getValuePtr(); + currAtt->pLen = p_att->getLengthPtr(); + currAtt->maxLen = p_att->getMaxLength(); + currAtt->settings = 0; + currAtt->permissions = 0; + if (p_att->getUUID().shortOrLong() == UUID::UUID_TYPE_LONG) { + currAtt->settings |= ATTS_SET_UUID_128; + } + if (p_att->getUUID() == UUID(BLE_UUID_DESCRIPTOR_CLIENT_CHAR_CONFIG)) { + cccCreated = true; + currAtt->settings |= ATTS_SET_CCC; + currAtt->permissions |= ATTS_PERMIT_READ; + currAtt->permissions |= ATTS_PERMIT_WRITE; + + if (cccCnt < MAX_CCC_CNT) { + cccSet[cccCnt].handle = currentHandle; + cccSet[cccCnt].valueRange = 0; + if (p_char->getProperties() & GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY) { + cccSet[cccCnt].valueRange |= ATT_CLIENT_CFG_NOTIFY; + } + if (p_char->getProperties() & GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE) { + cccSet[cccCnt].valueRange |= ATT_CLIENT_CFG_INDICATE; + } + cccSet[cccCnt].secLevel = DM_SEC_LEVEL_NONE; + cccHandles[cccCnt] = p_char->getValueAttribute().getHandle(); + cccCnt++; + } else { + return BLE_ERROR_PARAM_OUT_OF_RANGE; + } + } + currAtt++; + } + + if (!cccCreated && (p_char->getProperties() & (GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY | GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE))) { + /* There was not a CCCD included in the descriptors, but this + * characteristic is notifiable and/or indicatable. A CCCD is + * required so create one now. + */ + if (cccCnt >= MAX_CCC_CNT) { + return BLE_ERROR_PARAM_OUT_OF_RANGE; + } + + currentHandle++; + + currAtt->pUuid = cccUUID.getBaseUUID(); + currAtt->pValue = (uint8_t*)&cccValues[cccCnt]; + currAtt->pLen = (uint16_t*)&cccSize; + currAtt->maxLen = sizeof(uint16_t); + currAtt->settings = ATTS_SET_CCC; + currAtt->permissions = (ATTS_PERMIT_READ | ATTS_PERMIT_WRITE); + + cccSet[cccCnt].handle = currentHandle; + cccSet[cccCnt].valueRange = 0; + if (p_char->getProperties() & GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_NOTIFY) { + cccSet[cccCnt].valueRange |= ATT_CLIENT_CFG_NOTIFY; + } + if (p_char->getProperties() & GattCharacteristic::BLE_GATT_CHAR_PROPERTIES_INDICATE) { + cccSet[cccCnt].valueRange |= ATT_CLIENT_CFG_INDICATE; + } + cccSet[cccCnt].secLevel = DM_SEC_LEVEL_NONE; + cccHandles[cccCnt] = p_char->getValueAttribute().getHandle(); + + cccCnt++; + currAtt++; + } + } + + mxmSvc->attGroup->pNext = NULL; + mxmSvc->attGroup->readCback = attsReadCback; + mxmSvc->attGroup->writeCback = attsWriteCback; + mxmSvc->attGroup->startHandle = startHandle; + mxmSvc->attGroup->endHandle = currentHandle; + AttsAddGroup(mxmSvc->attGroup); + + AttRegister(attCback); + AttsCccRegister(cccCnt, (attsCccSet_t*)cccSet, cccCback); + + return BLE_ERROR_NONE; +} + +ble_error_t MaximGattServer::read(GattAttribute::Handle_t attributeHandle, uint8_t buffer[], uint16_t *const lengthP) +{ + if (AttsGetAttr(attributeHandle, lengthP, &buffer) != ATT_SUCCESS) { + return BLE_ERROR_PARAM_OUT_OF_RANGE; + } + + return BLE_ERROR_NONE; +} + +ble_error_t MaximGattServer::read(Gap::Handle_t connectionHandle, GattAttribute::Handle_t attributeHandle, uint8_t buffer[], uint16_t *lengthP) +{ + // Check to see if this is a CCCD + uint8_t idx; + for (idx = 0; idx < cccCnt; idx++) { + if (attributeHandle == cccSet[idx].handle) { + if (connectionHandle == DM_CONN_ID_NONE) { // CCCDs are always 16 bits + return BLE_ERROR_PARAM_OUT_OF_RANGE; + } + *((uint16_t*)buffer) = AttsCccGet(connectionHandle, idx); + *lengthP = 2; // CCCDs are always 16 bits + return BLE_ERROR_NONE; + } + } + + // This is not a CCCD. Use the non-connection specific update method. + return read(attributeHandle, buffer, lengthP); +} + +ble_error_t MaximGattServer::write(GattAttribute::Handle_t attributeHandle, const uint8_t buffer[], uint16_t len, bool localOnly) +{ + uint16_t connectionHandle = MaximGap::getInstance().getConnectionHandle(); + + if (AttsSetAttr(attributeHandle, len, (uint8_t*)buffer) != ATT_SUCCESS) { + return BLE_ERROR_PARAM_OUT_OF_RANGE; + } + + if (!localOnly) { + if (connectionHandle != DM_CONN_ID_NONE) { + + // Check to see if this characteristic has a CCCD attribute + uint8_t idx; + for (idx = 0; idx < cccCnt; idx++) { + if (attributeHandle == cccHandles[idx]) { + break; + } + } + if (idx < cccCnt) { + // This characteristic has a CCCD attribute. Handle notifications and indications. + uint16_t cccEnabled = AttsCccEnabled(connectionHandle, idx); + if (cccEnabled & ATT_CLIENT_CFG_NOTIFY) { + AttsHandleValueNtf(connectionHandle, attributeHandle, len, (uint8_t*)buffer); + } + if (cccEnabled & ATT_CLIENT_CFG_INDICATE) { + AttsHandleValueInd(connectionHandle, attributeHandle, len, (uint8_t*)buffer); + } + } + } + } + + return BLE_ERROR_NONE; +} + +ble_error_t MaximGattServer::write(Gap::Handle_t connectionHandle, GattAttribute::Handle_t attributeHandle, const uint8_t buffer[], uint16_t len, bool localOnly) +{ + // Check to see if this is a CCCD + uint8_t idx; + for (idx = 0; idx < cccCnt; idx++) { + if (attributeHandle == cccSet[idx].handle) { + if ((connectionHandle == DM_CONN_ID_NONE) || (len != 2)) { // CCCDs are always 16 bits + return BLE_ERROR_PARAM_OUT_OF_RANGE; + } + AttsCccSet(connectionHandle, idx, *((uint16_t*)buffer)); + return BLE_ERROR_NONE; + } + } + + // This is not a CCCD. Use the non-connection specific update method. + return write(attributeHandle, buffer, len, localOnly); +} + +ble_error_t MaximGattServer::areUpdatesEnabled(const GattCharacteristic &characteristic, bool *enabledP) +{ + uint16_t connectionHandle = MaximGap::getInstance().getConnectionHandle(); + + if (connectionHandle != DM_CONN_ID_NONE) { + uint8_t idx; + for (idx = 0; idx < cccCnt; idx++) { + if (characteristic.getValueHandle() == cccHandles[idx]) { + uint16_t cccValue = AttsCccGet(connectionHandle, idx); + if (cccValue & ATT_CLIENT_CFG_NOTIFY) { + *enabledP = true; + } else { + *enabledP = false; + } + return BLE_ERROR_NONE; + } + } + } + + return BLE_ERROR_PARAM_OUT_OF_RANGE; +} + +ble_error_t MaximGattServer::areUpdatesEnabled(Gap::Handle_t connectionHandle, const GattCharacteristic &characteristic, bool *enabledP) +{ + if (connectionHandle != DM_CONN_ID_NONE) { + uint8_t idx; + for (idx = 0; idx < cccCnt; idx++) { + if (characteristic.getValueHandle() == cccHandles[idx]) { + uint16_t cccValue = AttsCccGet(connectionHandle, idx); + if (cccValue & ATT_CLIENT_CFG_NOTIFY) { + *enabledP = true; + } else { + *enabledP = false; + } + return BLE_ERROR_NONE; + } + } + } + + return BLE_ERROR_PARAM_OUT_OF_RANGE; +} + +void MaximGattServer::cccCback(attsCccEvt_t *pEvt) +{ + if (pEvt->value & (ATT_CLIENT_CFG_NOTIFY | ATT_CLIENT_CFG_INDICATE)) { + getInstance().handleEvent(GattServerEvents::GATT_EVENT_UPDATES_ENABLED, pEvt->handle); + } else { + getInstance().handleEvent(GattServerEvents::GATT_EVENT_UPDATES_DISABLED, pEvt->handle); + } +} + +void MaximGattServer::attCback(attEvt_t *pEvt) +{ + if (pEvt->hdr.status == ATT_SUCCESS) { + getInstance().handleEvent(GattServerEvents::GATT_EVENT_DATA_SENT, pEvt->handle); + } +} + +uint8_t MaximGattServer::attsReadCback(dmConnId_t connId, uint16_t handle, uint8_t operation, uint16_t offset, attsAttr_t *pAttr) +{ + GattReadCallbackParams cbParams = { + .connHandle = connId, + .handle = handle, + .offset = offset, + .len = *pAttr->pLen, + .data = pAttr->pValue + }; + getInstance().handleDataReadEvent(&cbParams); + + return ATT_SUCCESS; +} + +uint8_t MaximGattServer::attsWriteCback(dmConnId_t connId, uint16_t handle, uint8_t operation, uint16_t offset, uint16_t len, uint8_t *pValue, attsAttr_t *pAttr) +{ + uint8_t err; + + /* TODO: offset is not handled properly */ + if ((err = AttsSetAttr(handle, len, pValue)) != ATT_SUCCESS) { + return err; + } + + GattWriteCallbackParams::WriteOp_t writeOp; + switch (operation) { + case ATT_PDU_WRITE_REQ: + writeOp = GattWriteCallbackParams::OP_WRITE_REQ; + break; + case ATT_PDU_WRITE_CMD: + writeOp = GattWriteCallbackParams::OP_WRITE_CMD; + break; + case ATT_PDU_SIGNED_WRITE_CMD: + writeOp = GattWriteCallbackParams::OP_SIGN_WRITE_CMD; + break; + case ATT_PDU_PREP_WRITE_REQ: + writeOp = GattWriteCallbackParams::OP_PREP_WRITE_REQ; + break; + case ATT_PDU_EXEC_WRITE_REQ: + writeOp = GattWriteCallbackParams::OP_EXEC_WRITE_REQ_NOW; + break; + default: + writeOp = GattWriteCallbackParams::OP_INVALID; + break; + } + + GattWriteCallbackParams cbParams = { + .connHandle = connId, + .handle = handle, + .writeOp = writeOp, + .offset = offset, + .len = len, + .data = pValue + }; + getInstance().handleDataWrittenEvent(&cbParams); + + return ATT_SUCCESS; +} diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/MaximGattServer.h b/features/FEATURE_BLE/targets/TARGET_Maxim/MaximGattServer.h new file mode 100644 index 00000000000..faed713d61a --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/MaximGattServer.h @@ -0,0 +1,84 @@ +/******************************************************************************* + * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES + * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Maxim Integrated + * Products, Inc. shall not be used except as stated in the Maxim Integrated + * Products, Inc. Branding Policy. + * + * The mere transfer of this software does not imply any licenses + * of trade secrets, proprietary technology, copyrights, patents, + * trademarks, maskwork rights, or any other form of intellectual + * property whatsoever. Maxim Integrated Products, Inc. retains all + * ownership rights. + ******************************************************************************* + */ + +#ifndef _MAXIM_GATT_SERVER_H_ +#define _MAXIM_GATT_SERVER_H_ + +#include + +#include "ble/blecommon.h" +#include "ble/GattServer.h" +#include "wsf_types.h" +#include "att_api.h" + +class MaximGattServer : public GattServer +{ +public: + static MaximGattServer &getInstance(); + + /* Functions that must be implemented from GattServer */ + virtual ble_error_t addService(GattService &); + + virtual ble_error_t read(GattAttribute::Handle_t attributeHandle, uint8_t buffer[], uint16_t *lengthP); + virtual ble_error_t read(Gap::Handle_t connectionHandle, GattAttribute::Handle_t attributeHandle, uint8_t buffer[], uint16_t *lengthP); + virtual ble_error_t write(GattAttribute::Handle_t, const uint8_t[], uint16_t, bool localOnly = false); + virtual ble_error_t write(Gap::Handle_t connectionHandle, GattAttribute::Handle_t, const uint8_t[], uint16_t, bool localOnly = false); + + virtual ble_error_t areUpdatesEnabled(const GattCharacteristic &characteristic, bool *enabledP); + virtual ble_error_t areUpdatesEnabled(Gap::Handle_t connectionHandle, const GattCharacteristic &characteristic, bool *enabledP); + + virtual bool isOnDataReadAvailable() const { return true; } + +private: + static void cccCback(attsCccEvt_t *pEvt); + static void attCback(attEvt_t *pEvt); + static uint8_t attsReadCback(dmConnId_t connId, uint16_t handle, uint8_t operation, uint16_t offset, attsAttr_t *pAttr); + static uint8_t attsWriteCback(dmConnId_t connId, uint16_t handle, uint8_t operation, uint16_t offset, uint16_t len, uint8_t *pValue, attsAttr_t *pAttr); + + /*! client characteristic configuration descriptors settings */ + #define MAX_CCC_CNT 20 + attsCccSet_t cccSet[MAX_CCC_CNT]; + uint16_t cccValues[MAX_CCC_CNT]; + uint16_t cccHandles[MAX_CCC_CNT]; + uint8_t cccCnt; + +private: + MaximGattServer() : GattServer(), cccSet(), cccValues(), cccHandles(), cccCnt(0) { + /* empty */ + } + + MaximGattServer(const MaximGattServer &); + const MaximGattServer& operator=(const MaximGattServer &); +}; + +#endif /* _MAXIM_GATT_SERVER_H_ */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/MaximSecurityManager.h b/features/FEATURE_BLE/targets/TARGET_Maxim/MaximSecurityManager.h new file mode 100644 index 00000000000..b6f06189f07 --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/MaximSecurityManager.h @@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (C) 2016 Maxim Integrated Products, Inc., All Rights Reserved. + * + * Permission is hereby granted, free of charge, to any person obtaining a + * copy of this software and associated documentation files (the "Software"), + * to deal in the Software without restriction, including without limitation + * the rights to use, copy, modify, merge, publish, distribute, sublicense, + * and/or sell copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included + * in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS + * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF + * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. + * IN NO EVENT SHALL MAXIM INTEGRATED BE LIABLE FOR ANY CLAIM, DAMAGES + * OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, + * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + * + * Except as contained in this notice, the name of Maxim Integrated + * Products, Inc. shall not be used except as stated in the Maxim Integrated + * Products, Inc. Branding Policy. + * + * The mere transfer of this software does not imply any licenses + * of trade secrets, proprietary technology, copyrights, patents, + * trademarks, maskwork rights, or any other form of intellectual + * property whatsoever. Maxim Integrated Products, Inc. retains all + * ownership rights. + ******************************************************************************* + */ + +#ifndef _MAXIM_SECURITY_MANAGER_H_ +#define _MAXIM_SECURITY_MANAGER_H_ + +#include + +#include "ble/SecurityManager.h" + +class MaximSecurityManager : public SecurityManager +{ +public: + static MaximSecurityManager &getInstance() { + static MaximSecurityManager m_instance; + return m_instance; + } + +public: + MaximSecurityManager() { + /* empty */ + } +}; + +#endif /* _MAXIM_SECURITY_MANAGER_H_ */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/LES-PRE-20767-ARM-Permissive-Binary-License.txt b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/LES-PRE-20767-ARM-Permissive-Binary-License.txt new file mode 100644 index 00000000000..7830ef04fd0 --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/LES-PRE-20767-ARM-Permissive-Binary-License.txt @@ -0,0 +1,49 @@ +Permissive Binary License + +Copyright (c) 2016, ARM, Ltd. All rights reserved. + +Redistribution. Redistribution and use in binary form, without +modification, are permitted provided that the following conditions are +met: + +1) Redistributions must reproduce the above copyright notice and the + following disclaimer in the documentation and/or other materials + provided with the distribution. + +2) Unless to the extent explicitly permitted by law, no reverse + engineering, decompilation, or disassembly of this software is + permitted. + +3) Redistribution as part of a software development kit must include the + accompanying file named DEPENDENCIES and any dependencies listed in + that file. + +4) Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +Limited patent license. The copyright holders (and contributors) grant a +worldwide, non-exclusive, no-charge, royalty-free patent license to +make, have made, use, offer to sell, sell, import, and otherwise +transfer this software, where such license applies only to those patent +claims licensable by the copyright holders (and contributors) that are +necessarily infringed by this software. This patent license shall not +apply to any combinations that include this software. No hardware is +licensed hereunder. + +If you institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the software +itself infringes your patent(s), then your rights granted under this +license shall terminate as of the date such litigation is filed. + +DISCLAIMER. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS." ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT +NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. \ No newline at end of file diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/hci/maxwsn/hci_drv.h b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/hci/maxwsn/hci_drv.h new file mode 100644 index 00000000000..6623cc1755c --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/hci/maxwsn/hci_drv.h @@ -0,0 +1,114 @@ +/*************************************************************************************************/ +/*! + * \file hci_drv.h + * + * \brief HCI driver interface. + * + * $Date: 2013-01-02 22:19:17 -0800 (Wed, 02 Jan 2013) $ + * $Revision: 405 $ + * + * Copyright (c) 2012-2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + */ +/*************************************************************************************************/ +#ifndef HCI_DRV_H +#define HCI_DRV_H + +#ifdef __cplusplus +extern "C" { +#endif + +#include "PinNames.h" + +/************************************************************************************************** + Function Declarations +**************************************************************************************************/ + +/*************************************************************************************************/ +/*! + * \fn hciDrvInit + * + * \brief Initialize the driver. + * + * \param csn name of the pin connected to CSN + * \param irq name of the pin conntected to IRQ + */ +/*************************************************************************************************/ +void hciDrvInit(PinName csn, PinName rst, PinName irq); + +/*************************************************************************************************/ +/*! + * \fn hciDrvWrite + * + * \brief Write data to the driver. + * + * \param type HCI packet type + * \param len Number of bytes to write. + * \param pData Byte array to write. + * + * \return Return actual number of data bytes written. + * + * \note The type parameter allows the driver layer to prepend the data with a header on the + * same write transaction. + */ +/*************************************************************************************************/ +uint16_t hciDrvWrite(uint8_t type, uint16_t len, uint8_t *pData); + +/*************************************************************************************************/ +/*! + * \fn hciDrvRead + * + * \brief Read data bytes from the driver. + * + * \param len Number of bytes to read. + * \param pData Byte array to store data. + * + * \return Return actual number of data bytes read. + */ +/*************************************************************************************************/ +uint16_t hciDrvRead(uint16_t len, uint8_t *pData, bool_t last); + +/*************************************************************************************************/ +/*! + * \fn hciDrvIsr + * + * \brief Interrupt service routine for IRQ + */ +/*************************************************************************************************/ +void hciDrvIsr(void); + +/*************************************************************************************************/ +/*! + * \fn hciDrvReadyToSleep + * + * \brief Returns TRUE if driver allows MCU to enter low power sleep mode. + * + * \return TRUE if ready to sleep, FALSE otherwise. + */ +/*************************************************************************************************/ +bool_t hciDrvReadyToSleep(void); + +void hciDrvResume(void); + +/*************************************************************************************************/ +/*! + * \fn hciDrvReset + * + * \brief Resets the controller + */ +/*************************************************************************************************/ +void hciDrvReset(void); + +#ifdef __cplusplus +}; +#endif + +#endif /* HCI_DRV_H */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/hci/maxwsn/hci_vs.h b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/hci/maxwsn/hci_vs.h new file mode 100644 index 00000000000..36abb15f13b --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/hci/maxwsn/hci_vs.h @@ -0,0 +1,59 @@ +/*************************************************************************************************/ +/*! + * \file hci_drv.h + * + * \brief HCI vendor specific functions for EM Microelectronic. + * + * $Date: 2013-01-02 22:19:17 -0800 (Wed, 02 Jan 2013) $ + * $Revision: 405 $ + * + * Copyright (c) 2012-2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + */ +/*************************************************************************************************/ +#ifndef HCI_VS_H +#define HCI_VS_H + +#ifdef __cplusplus +extern "C" { +#endif + +/*************************************************************************************************/ +/*! + * \fn HciVsSetPublicAddr + * + * \brief Vendor-specific set public address function. + * + * \param param public address + * + * \return None. + */ +/*************************************************************************************************/ +void HciVsSetPublicAddr(uint8_t *bdAddr); + +/*************************************************************************************************/ +/*! + * \fn HciVsSetTxPower + * + * \brief Vendor-specific set RF output power function + * + * \param param output power in dB + * + * \return None. + */ +/*************************************************************************************************/ +void HciVsSetTxPower(int txPower); + +#ifdef __cplusplus +}; +#endif + +#endif /* HCI_VS_H */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/cfg/cfg_stack.h b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/cfg/cfg_stack.h new file mode 100644 index 00000000000..3055a8ca077 --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/cfg/cfg_stack.h @@ -0,0 +1,71 @@ +/*************************************************************************************************/ +/*! + * \file cfg_stack.h + * + * \brief Stack configuration. + * + * $Date: 2011-10-14 21:35:03 -0700 (Fri, 14 Oct 2011) $ + * $Revision: 191 $ + * + * Copyright (c) 2009-2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + + */ +/*************************************************************************************************/ +#ifndef CFG_STACK_H +#define CFG_STACK_H + + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************************************************** + HCI +**************************************************************************************************/ + +/*! Vendor specific targets */ +#define HCI_VS_GENERIC 0 +#define HCI_VS_EMM 1 + +/*! Vendor specific target configuration */ +#ifndef HCI_VS_TARGET +#define HCI_VS_TARGET HCI_VS_GENERIC +#endif + +/************************************************************************************************** + DM +**************************************************************************************************/ + +/*! Maximum number of connections */ +#ifndef DM_CONN_MAX +#define DM_CONN_MAX 3 +#endif + +/************************************************************************************************** + L2C +**************************************************************************************************/ + +/************************************************************************************************** + ATT +**************************************************************************************************/ + +/************************************************************************************************** + SMP +**************************************************************************************************/ + + + +#ifdef __cplusplus +}; +#endif + +#endif /* CFG_STACK_H */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/att_api.h b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/att_api.h new file mode 100644 index 00000000000..9b455f8d4c6 --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/att_api.h @@ -0,0 +1,942 @@ +/*************************************************************************************************/ +/*! + * \file att_api.h + * + * \brief Attribute protocol client and server API. + * + * $Date: 2012-05-07 19:54:28 -0700 (Mon, 07 May 2012) $ + * $Revision: 315 $ + * + * Copyright (c) 2009-2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + */ +/*************************************************************************************************/ +#ifndef ATT_API_H +#define ATT_API_H + +#include "wsf_timer.h" +#include "att_defs.h" +#include "att_uuid.h" +#include "dm_api.h" +#include "cfg_stack.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************************************************** + Macros +**************************************************************************************************/ + +/*! ATT server attribute settings */ +#define ATTS_SET_UUID_128 0x01 /*! Set if the UUID is 128 bits in length */ +#define ATTS_SET_WRITE_CBACK 0x02 /*! Set if the group callback is executed when + this attribute is written by a client device */ +#define ATTS_SET_READ_CBACK 0x04 /*! Set if the group callback is executed when + this attribute is read by a client device */ +#define ATTS_SET_VARIABLE_LEN 0x08 /*! Set if the attribute has a variable length */ +#define ATTS_SET_ALLOW_OFFSET 0x10 /*! Set if writes are allowed with an offset */ +#define ATTS_SET_CCC 0x20 /*! Set if the attribute is a client characteristic + configuration descriptor */ +#define ATTS_SET_ALLOW_SIGNED 0x40 /*! Set if signed writes are allowed */ +#define ATTS_SET_REQ_SIGNED 0x80 /*! Set if signed writes are required if link + is not encrypted */ + +/*! ATT server attribute permissions */ +#define ATTS_PERMIT_READ 0x01 /*! Set if attribute can be read */ +#define ATTS_PERMIT_READ_AUTH 0x02 /*! Set if attribute read requires authentication */ +#define ATTS_PERMIT_READ_AUTHORIZ 0x04 /*! Set if attribute read requires authorization */ +#define ATTS_PERMIT_READ_ENC 0x08 /*! Set if attribute read requires encryption */ +#define ATTS_PERMIT_WRITE 0x10 /*! Set if attribute can be written */ +#define ATTS_PERMIT_WRITE_AUTH 0x20 /*! Set if attribute write requires authentication */ +#define ATTS_PERMIT_WRITE_AUTHORIZ 0x40 /*! Set if attribute write requires authorization */ +#define ATTS_PERMIT_WRITE_ENC 0x80 /*! Set if attribute write requires encryption */ + +/*! ATT client characteristic discovery and configuration settings */ +#define ATTC_SET_UUID_128 0x01 /*! Set if the UUID is 128 bits in length */ +#define ATTC_SET_REQUIRED 0x02 /*! Set if characteristic must be discovered */ +#define ATTC_SET_DESCRIPTOR 0x04 /*! Set if this is a characteristic descriptor */ + +/*! ATT callback events */ +#define ATT_CBACK_START 0x02 /*! ATT callback event starting value */ +enum /*! Internal note: event values match method values */ +{ + /*! ATT client callback events */ + ATTC_FIND_INFO_RSP = ATT_CBACK_START, /*! Find information response */ + ATTC_FIND_BY_TYPE_VALUE_RSP, /*! Find by type value response */ + ATTC_READ_BY_TYPE_RSP, /*! Read by type value response */ + ATTC_READ_RSP, /*! Read response */ + ATTC_READ_LONG_RSP, /*! Read long response */ + ATTC_READ_MULTIPLE_RSP, /*! Read multiple response */ + ATTC_READ_BY_GROUP_TYPE_RSP, /*! Read group type response */ + ATTC_WRITE_RSP, /*! Write response */ + ATTC_WRITE_CMD_RSP, /*! Write command response */ + ATTC_PREPARE_WRITE_RSP, /*! Prepare write response */ + ATTC_EXECUTE_WRITE_RSP, /*! Execute write response */ + ATTC_HANDLE_VALUE_NTF, /*! Handle value notification */ + ATTC_HANDLE_VALUE_IND, /*! Handle value indication */ + /*! ATT server callback events */ + ATTS_HANDLE_VALUE_CNF, /*! Handle value confirmation */ + ATTS_CCC_STATE_IND /*! Client chracteristic configuration state change */ +}; + +/*! ATT callback events */ +#define ATT_CBACK_END ATTS_CCC_STATE_IND /*! ATT callback event ending value */ + +/*! Base value for HCI error status values passed through ATT */ +#define ATT_HCI_ERR_BASE 0x20 + +/************************************************************************************************** + Data Types +**************************************************************************************************/ + +/*! Configurable parameters */ +typedef struct +{ + wsfTimerTicks_t discIdleTimeout; /*! ATT server service discovery connection idle timeout in seconds */ + uint16_t mtu; /*! desired ATT MTU */ + uint8_t transTimeout; /*! transcation timeout in seconds */ + uint8_t numPrepWrites; /*! number of queued prepare writes supported by server */ +} attCfg_t; + +/*! + * Attribute server data types + */ + +/*! Attribute structure */ +typedef struct +{ + uint8_t const *pUuid; /*! Pointer to the attributes UUID */ + uint8_t *pValue; /*! Pointer to the attributes value */ + uint16_t *pLen; /*! Pointer to the length of the attributes value */ + uint16_t maxLen; /*! Maximum length of attributes value */ + uint8_t settings; /*! Attribute settings */ + uint8_t permissions; /*! Attribute permissions */ +} attsAttr_t; + +/*! Attribute group read callback */ +typedef uint8_t (*attsReadCback_t)(dmConnId_t connId, uint16_t handle, uint8_t operation, + uint16_t offset, attsAttr_t *pAttr); + +/*! Attribute group write callback */ +typedef uint8_t (*attsWriteCback_t)(dmConnId_t connId, uint16_t handle, uint8_t operation, + uint16_t offset, uint16_t len, uint8_t *pValue, + attsAttr_t *pAttr); + +/*! Attribute group */ +typedef struct attsGroup_tag +{ + struct attsGroup_tag *pNext; /*! For internal use only */ + attsAttr_t *pAttr; /*! Pointer to attribute list for this group */ + attsReadCback_t readCback; /*! Read callback function */ + attsWriteCback_t writeCback; /*! Write callback function */ + uint16_t startHandle; /*! The handle of the first attribute in this group */ + uint16_t endHandle; /*! The handle of the last attribute in this group */ +} attsGroup_t; + +/*! Client characteristc configuration settings */ +typedef struct +{ + uint16_t handle; /*! Client characteristc configuration descriptor handle */ + uint16_t valueRange; /*! Acceptable value range of the descriptor value */ + uint8_t secLevel; /*! Security level of characteristic value */ +} attsCccSet_t; + +/*! ATT client structure for characteristic and descriptor discovery */ +typedef struct attcDiscChar_tag +{ + uint8_t const *pUuid; /*! Pointer to UUID */ + uint8_t settings; /*! Characteristic discovery settings */ +} attcDiscChar_t; + +/*! ATT client structure for characteristic and descriptor configuration */ +typedef struct +{ + uint8_t const *pValue; /*! Pointer to default value or NULL */ + uint8_t valueLen; /*! Default value length */ + uint8_t hdlIdx; /*! Index of its handle in handle list */ +} attcDiscCfg_t; + +/*! ATT client discovery control block */ +typedef struct +{ + attcDiscChar_t **pCharList; /*! Characterisic list for discovery */ + uint16_t *pHdlList; /*! Characteristic handle list */ + attcDiscCfg_t *pCfgList; /*! Characterisic list for configuration */ + uint8_t charListLen; /*! Characteristic and handle list length */ + uint8_t cfgListLen; /*! Configuration list length */ + + /* the following are for internal use only */ + uint16_t svcStartHdl; + uint16_t svcEndHdl; + uint8_t charListIdx; + uint8_t endHdlIdx; +} attcDiscCb_t; + +/*! + * ATT callback parameters: + * + * \param hdr.event Callback event + * \param hdr.param DM connection ID + * \param hdr.status Event status: ATT_SUCCESS or error status + * \param pValue Pointer to value data, valid if valueLen > 0 + * \param valueLen Length of value data + * \param handle Attribute handle + */ +typedef struct +{ + wsfMsgHdr_t hdr; /*! Header structure */ + uint8_t *pValue; /*! Value */ + uint16_t valueLen; /*! Value length */ + uint16_t handle; /*! Attribute handle */ + bool_t continuing; /*! TRUE if more response packets expected */ +} attEvt_t; + +/*! ATTS client characteristic configuration callback structure */ +typedef struct +{ + wsfMsgHdr_t hdr; /*! Header structure */ + uint16_t handle; /*! CCCD handle */ + uint16_t value; /*! CCCD value */ + uint8_t idx; /*! CCCD settings index */ +} attsCccEvt_t; + +/*! ATT callback type */ +typedef void (*attCback_t)(attEvt_t *pEvt); + +/*! ATTS authorization callback type */ +typedef uint8_t (*attsAuthorCback_t)(dmConnId_t connId, uint8_t permit, uint16_t handle); + +/*! ATTS client characteristic configuration callback */ +typedef void (*attsCccCback_t)(attsCccEvt_t *pEvt); + +/************************************************************************************************** + Global Variables +**************************************************************************************************/ + +/*! Configuration pointer */ +extern attCfg_t *pAttCfg; + +/************************************************************************************************** + Function Declarations +**************************************************************************************************/ + +/*************************************************************************************************/ +/*! + * \fn AttRegister + * + * \brief Register a callback with ATT. + * + * \param cback Client callback function. + * + * \return None. + */ +/*************************************************************************************************/ +void AttRegister(attCback_t cback); + +/*************************************************************************************************/ +/*! + * \fn AttConnRegister + * + * \brief Register a connection callback with ATT. The callback is typically used to + * manage the attribute server database. + * + * \param cback Client callback function. + * + * \return None. + */ +/*************************************************************************************************/ +void AttConnRegister(dmCback_t cback); + + +/*************************************************************************************************/ +/*! + * \fn AttGetMtu + * + * \brief Get the attribute protocol MTU of a connection. + * + * \param connId DM connection ID. + * + * \return MTU of the connection. + */ +/*************************************************************************************************/ +uint16_t AttGetMtu(dmConnId_t connId); + +/*************************************************************************************************/ +/*! + * \fn AttsInit + * + * \brief Initialize ATT server. + * + * \return None. + */ +/*************************************************************************************************/ +void AttsInit(void); + +/*************************************************************************************************/ +/*! + * \fn AttsIndInit + * + * \brief Initialize ATT server for indications/notifications. + * + * \return None. + */ +/*************************************************************************************************/ +void AttsIndInit(void); + +/*************************************************************************************************/ +/*! + * \fn AttsSignInit + * + * \brief Initialize ATT server for data signing. + * + * \return None. + */ +/*************************************************************************************************/ +void AttsSignInit(void); + +/*************************************************************************************************/ +/*! + * \fn AttsAuthorRegister + * + * \brief Register an authorization callback with the attribute server. + * + * \param cback Client callback function. + * + * \return None. + */ +/*************************************************************************************************/ +void AttsAuthorRegister(attsAuthorCback_t cback); + +/*************************************************************************************************/ +/*! + * \fn AttsAddGroup + * + * \brief Add an attribute group to the attribute server. + * + * \param pGroup Pointer to an attribute group structure. + * + * \return None. + */ +/*************************************************************************************************/ +void AttsAddGroup(attsGroup_t *pGroup); + +/*************************************************************************************************/ +/*! + * \fn AttsRemoveGroup + * + * \brief Remove an attribute group from the attribute server. + * + * \param startHandle Start handle of attribute group to be removed. + * + * \return None. + */ +/*************************************************************************************************/ +void AttsRemoveGroup(uint16_t startHandle); + +/*************************************************************************************************/ +/*! + * \fn AttsSetAttr + * + * \brief Set an attribute value in the attribute server. + * + * \param handle Attribute handle. + * \param valueLen Attribute length. + * \param pValue Attribute value. + * + * \return ATT_SUCCESS if successful otherwise error. + */ +/*************************************************************************************************/ +uint8_t AttsSetAttr(uint16_t handle, uint16_t valueLen, uint8_t *pValue); + +/*************************************************************************************************/ +/*! + * \fn AttsGetAttr + * + * \brief Get an attribute value in the attribute server. + * + * \param handle Attribute handle. + * \param pLen Returned attribute length pointer. + * \param pValue Returned attribute value pointer. + * + * \return ATT_SUCCESS if successful otherwise error. + * \return This function returns the attribute length in pLen and a pointer to the attribute + * value in pValue. + */ +/*************************************************************************************************/ +uint8_t AttsGetAttr(uint16_t handle, uint16_t *pLen, uint8_t **pValue); + +/*************************************************************************************************/ +/*! + * \fn AttsHandleValueInd + * + * \brief Send an attribute protocol Handle Value Indication. + * + * \param connId DM connection ID. + * \param handle Attribute handle. + * \param valueLen Length of value data. + * \param pValue Pointer to value data. + * + * \return None. + */ +/*************************************************************************************************/ +void AttsHandleValueInd(dmConnId_t connId, uint16_t handle, uint16_t valueLen, uint8_t *pValue); + +/*************************************************************************************************/ +/*! + * \fn AttsHandleValueNtf + * + * \brief Send an attribute protocol Handle Value Notification. + * + * \param connId DM connection ID. + * \param handle Attribute handle. + * \param valueLen Length of value data. + * \param pValue Pointer to value data. + * + * \return None. + */ +/*************************************************************************************************/ +void AttsHandleValueNtf(dmConnId_t connId, uint16_t handle, uint16_t valueLen, uint8_t *pValue); + +/*************************************************************************************************/ +/*! + * \fn AttsCccRegister + * + * \brief Register the utility service for managing client characteristic + * configuration descriptors. This function is typically called once on + * system initialization. + * + * \param setLen Length of settings array. + * \param pSet Array of CCC descriptor settings. + * \param cback Client callback function. + * + * \return None. + */ +/*************************************************************************************************/ +void AttsCccRegister(uint8_t setLen, attsCccSet_t *pSet, attsCccCback_t cback); + +/*************************************************************************************************/ +/*! + * \fn AttsCccInitTable + * + * \brief Initialize the client characteristic configuration descriptor value table for a + * connection. The table is initialized with the values from pCccTbl. If pCccTbl + * is NULL the table will be initialized to zero. + * + * This function must be called when a connection is established or when a + * device is bonded. + * + * \param connId DM connection ID. + * \param pCccTbl Pointer to the descriptor value array. The length of the array + * must equal the value of setLen passed to AttsCccRegister(). + * + * \return None. + */ +/*************************************************************************************************/ +void AttsCccInitTable(dmConnId_t connId, uint16_t *pCccTbl); + +/*************************************************************************************************/ +/*! + * \fn AttsCccClearTable + * + * \brief Clear and deallocate the client characteristic configuration descriptor value + * table for a connection. This function must be called when a connection is closed. + * + * \param connId DM connection ID. + * + * \return None. + */ +/*************************************************************************************************/ +void AttsCccClearTable(dmConnId_t connId); + +/*************************************************************************************************/ +/*! + * \fn AttsCccGet + * + * \brief Get the value of a client characteristic configuration descriptor by its index. + * If not found, return zero. + * + * \param connId DM connection ID. + * \param idx Index of descriptor in CCC descriptor handle table. + * + * \return Value of the descriptor. + */ +/*************************************************************************************************/ +uint16_t AttsCccGet(dmConnId_t connId, uint8_t idx); + +/*************************************************************************************************/ +/*! + * \fn AttsCccSet + * + * \brief Set the value of a client characteristic configuration descriptor by its index. + * + * \param connId DM connection ID. + * \param idx Index of descriptor in CCC descriptor handle table. + * \param value Value of the descriptor. + * + * \return None. + */ +/*************************************************************************************************/ +void AttsCccSet(dmConnId_t connId, uint8_t idx, uint16_t value); + +/*************************************************************************************************/ +/*! + * \fn AttsCccEnabled + * + * \brief Check if a client characteristic configuration descriptor is enabled and if + * the characteristic's security level has been met. + * + * \param connId DM connection ID. + * \param idx Index of descriptor in CCC descriptor handle table. + * + * \return Value of the descriptor if security level is met, otherwise zero. + */ +/*************************************************************************************************/ +uint16_t AttsCccEnabled(dmConnId_t connId, uint8_t idx); + +/*************************************************************************************************/ +/*! + * \fn AttsSetCsrk + * + * \brief Set the peer's data signing key on this connection. This function + * is typically called from the ATT connection callback when the connection is + * established. The caller is responsible for maintaining the memory that + * contains the key. + * + * \param connId DM connection ID. + * \param pCsrk Pointer to data signing key (CSRK). + * + * \return None. + */ +/*************************************************************************************************/ +void AttsSetCsrk(dmConnId_t connId, uint8_t *pCsrk); + +/*************************************************************************************************/ +/*! + * \fn AttsSetSignCounter + * + * \brief Set the peer's sign counter on this connection. This function + * is typically called from the ATT connection callback when the connection is + * established. ATT maintains the value of the sign counter internally and + * sets the value when a signed packet is successfully received. + * + * \param connId DM connection ID. + * \param signCounter Sign counter. + * + * \return None. + */ +/*************************************************************************************************/ +void AttsSetSignCounter(dmConnId_t connId, uint32_t signCounter); + +/*************************************************************************************************/ +/*! + * \fn AttsGetSignCounter + * + * \brief Get the current value peer's sign counter on this connection. This function + * is typically called from the ATT connection callback when the connection is + * closed so the application can store the sign counter for use on future + * connections. + * + * \param connId DM connection ID. + * + * \return Sign counter. + */ +/*************************************************************************************************/ +uint32_t AttsGetSignCounter(dmConnId_t connId); + +/*************************************************************************************************/ +/*! + * \fn AttcInit + * + * \brief Initialize ATT client. + * + * \return None. + */ +/*************************************************************************************************/ +void AttcInit(void); + +/*************************************************************************************************/ +/*! + * \fn AttcSignInit + * + * \brief Initialize ATT client for data signing. + * + * \return None. + */ +/*************************************************************************************************/ +void AttcSignInit(void); + +/*************************************************************************************************/ +/*! + * \fn AttcFindInfoReq + * + * \brief Initiate an attribute protocol Find Information Request. + * + * \param connId DM connection ID. + * \param startHandle Attribute start handle. + * \param endHandle Attribute end handle. + * \param continuing TRUE if ATTC continues sending requests until complete. + * + * \return None. + */ +/*************************************************************************************************/ +void AttcFindInfoReq(dmConnId_t connId, uint16_t startHandle, uint16_t endHandle, bool_t continuing); + +/*************************************************************************************************/ +/*! + * \fn AttcFindByTypeValueReq + * + * \brief Initiate an attribute protocol Find By Type Value Request. + * + * \param connId DM connection ID. + * \param startHandle Attribute start handle. + * \param endHandle Attribute end handle. + * \param uuid16 16-bit UUID to find. + * \param valueLen Length of value data. + * \param pValue Pointer to value data. + * \param continuing TRUE if ATTC continues sending requests until complete. + * + * \return None. + */ +/*************************************************************************************************/ +void AttcFindByTypeValueReq(dmConnId_t connId, uint16_t startHandle, uint16_t endHandle, + uint16_t uuid16, uint16_t valueLen, uint8_t *pValue, bool_t continuing); + +/*************************************************************************************************/ +/*! + * \fn AttcReadByTypeReq + * + * \brief Initiate an attribute protocol Read By Type Request. + * + * \param connId DM connection ID. + * \param startHandle Attribute start handle. + * \param endHandle Attribute end handle. + * \param uuidLen Length of UUID (2 or 16). + * \param pUuid Pointer to UUID data. + * \param continuing TRUE if ATTC continues sending requests until complete. + * + * \return None. + */ +/*************************************************************************************************/ +void AttcReadByTypeReq(dmConnId_t connId, uint16_t startHandle, uint16_t endHandle, + uint8_t uuidLen, uint8_t *pUuid, bool_t continuing); + +/*************************************************************************************************/ +/*! + * \fn AttcReadReq + * + * \brief Initiate an attribute protocol Read Request. + * + * \param connId DM connection ID. + * \param handle Attribute handle. + * + * \return None. + */ +/*************************************************************************************************/ +void AttcReadReq(dmConnId_t connId, uint16_t handle); + +/*************************************************************************************************/ +/*! + * \fn AttcReadLongReq + * + * \brief Initiate an attribute protocol Read Long Request. + * + * \param connId DM connection ID. + * \param handle Attribute handle. + * \param offset Read attribute data starting at this offset. + * \param continuing TRUE if ATTC continues sending requests until complete. + * + * \return None. + */ +/*************************************************************************************************/ +void AttcReadLongReq(dmConnId_t connId, uint16_t handle, uint16_t offset, bool_t continuing); + +/*************************************************************************************************/ +/*! + * \fn AttcReadMultipleReq + * + * \brief Initiate an attribute protocol Read Multiple Request. + * + * \param connId DM connection ID. + * \param numHandles Number of handles in attribute handle list. + * \param pHandles List of attribute handles. + * + * \return None. + */ +/*************************************************************************************************/ +void AttcReadMultipleReq(dmConnId_t connId, uint8_t numHandles, uint16_t *pHandles); + +/*************************************************************************************************/ +/*! + * \fn AttcReadByGroupTypeReq + * + * \brief Initiate an attribute protocol Read By Group Type Request. + * + * \param connId DM connection ID. + * \param startHandle Attribute start handle. + * \param endHandle Attribute end handle. + * \param uuidLen Length of UUID (2 or 16). + * \param pUuid Pointer to UUID data. + * \param continuing TRUE if ATTC continues sending requests until complete. + * + * \return None. + */ +/*************************************************************************************************/ +void AttcReadByGroupTypeReq(dmConnId_t connId, uint16_t startHandle, uint16_t endHandle, + uint8_t uuidLen, uint8_t *pUuid, bool_t continuing); + +/*************************************************************************************************/ +/*! + * \fn AttcWriteReq + * + * \brief Initiate an attribute protocol Write Request. + * + * \param connId DM connection ID. + * \param handle Attribute handle. + * \param valueLen Length of value data. + * \param pValue Pointer to value data. + * + * \return None. + */ +/*************************************************************************************************/ +void AttcWriteReq(dmConnId_t connId, uint16_t handle, uint16_t valueLen, uint8_t *pValue); + +/*************************************************************************************************/ +/*! + * \fn AttcWriteCmd + * + * \brief Initiate an attribute protocol Write Command. + * + * \param connId DM connection ID. + * \param handle Attribute handle. + * \param valueLen Length of value data. + * \param pValue Pointer to value data. + * + * \return None. + */ +/*************************************************************************************************/ +void AttcWriteCmd(dmConnId_t connId, uint16_t handle, uint16_t valueLen, uint8_t *pValue); + +/*************************************************************************************************/ +/*! + * \fn AttcSignedWriteCmd + * + * \brief Initiate an attribute protocol signed Write Command. + * + * \param connId DM connection ID. + * \param handle Attribute handle. + * \param signCounter Value of the sign counter. + * \param valueLen Length of value data. + * \param pValue Pointer to value data. + * + * \return None. + */ +/*************************************************************************************************/ +void AttcSignedWriteCmd(dmConnId_t connId, uint16_t handle, uint32_t signCounter, + uint16_t valueLen, uint8_t *pValue); + +/*************************************************************************************************/ +/*! + * \fn AttcPrepareWriteReq + * + * \brief Initiate an attribute protocol Prepare Write Request. + * + * \param connId DM connection ID. + * \param handle Attribute handle. + * \param offset Write attribute data starting at this offset. + * \param valueLen Length of value data. + * \param pValue Pointer to value data. + * \param valueByRef TRUE if pValue data is accessed by reference rather than copied. + * \param continuing TRUE if ATTC continues sending requests until complete. + * + * \return None. + */ +/*************************************************************************************************/ +void AttcPrepareWriteReq(dmConnId_t connId, uint16_t handle, uint16_t offset, uint16_t valueLen, + uint8_t *pValue, bool_t valueByRef, bool_t continuing); + +/*************************************************************************************************/ +/*! + * \fn AttcExecuteWriteReq + * + * \brief Initiate an attribute protocol Execute Write Request. + * + * \param connId DM connection ID. + * \param writeAll TRUE to write all queued writes, FALSE to cancel all queued writes. + * + * \return None. + */ +/*************************************************************************************************/ +void AttcExecuteWriteReq(dmConnId_t connId, bool_t writeAll); + +/*************************************************************************************************/ +/*! + * \fn AttcCancelReq + * + * \brief Cancel an attribute protocol request in progress. + * + * \param connId DM connection ID. + * + * \return None. + */ +/*************************************************************************************************/ +void AttcCancelReq(dmConnId_t connId); + +/*************************************************************************************************/ +/*! + * \fn AttcDiscService + * + * \brief This utility function discovers the given service on a peer device. Function + * AttcFindByTypeValueReq() is called to initiate the discovery procedure. + * + * \param connId DM connection ID. + * \param pCb Pointer to discovery control block. + * \param uuidLen Length of service UUID (2 or 16). + * \param pUuid Pointer to service UUID. + * + * \return None. + */ +/*************************************************************************************************/ +void AttcDiscService(dmConnId_t connId, attcDiscCb_t *pCb, uint8_t uuidLen, uint8_t *pUuid); + +/*************************************************************************************************/ +/*! + * \fn AttcDiscServiceCmpl + * + * \brief This utility function processes a service discovery result. It should be called + * when an ATTC_FIND_BY_TYPE_VALUE_RSP callback event is received after service + * discovery is initiated by calling AttcDiscService(). + * + * \param pCb Pointer to discovery control block. + * \param pMsg ATT callback event message. + * + * \return ATT_SUCCESS if successful otherwise error. + */ +/*************************************************************************************************/ +uint8_t AttcDiscServiceCmpl(attcDiscCb_t *pCb, attEvt_t *pMsg); + +/*************************************************************************************************/ +/*! + * \fn AttcDiscCharStart + * + * \brief This utility function starts characteristic and characteristic descriptor + * discovery for a service on a peer device. The service must have been previously + * discovered by calling AttcDiscService() and AttcDiscServiceCmpl(). + * + * \param connId DM connection ID. + * \param pCb Pointer to discovery control block. + * + * \return None. + */ +/*************************************************************************************************/ +void AttcDiscCharStart(dmConnId_t connId, attcDiscCb_t *pCb); + +/*************************************************************************************************/ +/*! + * \fn AttcDiscCharCmpl + * + * \brief This utility function processes a characteristic discovery result. It should be + * called when an ATTC_READ_BY_TYPE_RSP or ATTC_FIND_INFO_RSP callback event is + * received after characteristic discovery is initiated by calling AttcDiscCharStart(). + * + * \param pCb Pointer to discovery control block. + * \param pMsg ATT callback event message. + * + * \return ATT_CONTINUING if successful and the discovery procedure is continuing. + * ATT_SUCCESS if the discovery procedure completed successfully. + * Otherwise the discovery procedure failed. + */ +/*************************************************************************************************/ +uint8_t AttcDiscCharCmpl(attcDiscCb_t *pCb, attEvt_t *pMsg); + +/*************************************************************************************************/ +/*! + * \fn AttcDiscConfigStart + * + * \brief This utility function starts characteristic configuration for characteristics on a + * peer device. The characteristics must have been previously discovered by calling + * AttcDiscCharStart() and AttcDiscCharCmpl(). + * + * \param connId DM connection ID. + * \param pCb Pointer to discovery control block. + * + * \return ATT_CONTINUING if successful and configuration procedure is continuing. + * ATT_SUCCESS if nothing to configure. + */ +/*************************************************************************************************/ +uint8_t AttcDiscConfigStart(dmConnId_t connId, attcDiscCb_t *pCb); + +/*************************************************************************************************/ +/*! + * \fn AttcDiscConfigCmpl + * + * \brief This utility function initiates the next characteristic configuration procedure. + * It should be called when an ATTC_READ_RSP or ATTC_WRITE_RSP callback event is received + * after characteristic configuration is initiated by calling AttcDiscConfigStart(). + * + * \param connId DM connection ID. + * \param pCb Pointer to discovery control block. + * + * \return ATT_CONTINUING if successful and configuration procedure is continuing. + * ATT_SUCCESS if configuration procedure completed successfully. + */ +/*************************************************************************************************/ +uint8_t AttcDiscConfigCmpl(dmConnId_t connId, attcDiscCb_t *pCb); + +/*************************************************************************************************/ +/*! + * \fn AttcDiscConfigResume + * + * \brief This utility function resumes the characteristic configuration procedure. It can + * be called when an ATTC_READ_RSP or ATTC_WRITE_RSP callback event is received + * with failure status to attempt the read or write procedure again. + * + * \param connId DM connection ID. + * \param pCb Pointer to discovery control block. + * + * \return ATT_CONTINUING if successful and configuration procedure is continuing. + * ATT_SUCCESS if configuration procedure completed successfully. + */ +/*************************************************************************************************/ +uint8_t AttcDiscConfigResume(dmConnId_t connId, attcDiscCb_t *pCb); + +/*************************************************************************************************/ +/*! + * \fn AttcMtuReq + * + * \brief For internal use only. + * + * \param connId DM connection ID. + * \param mtu Attribute protocol MTU. + * + * \return None. + */ +/*************************************************************************************************/ +void AttcMtuReq(dmConnId_t connId, uint16_t mtu); + +/*************************************************************************************************/ +/*! + * \fn AttsErrorTest + * + * \brief For testing purposes only. + * + * \param status ATT status + * + * \return None. + */ +/*************************************************************************************************/ +void AttsErrorTest(uint8_t status); + +#ifdef __cplusplus +}; +#endif + +#endif /* ATT_API_H */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/att_defs.h b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/att_defs.h new file mode 100644 index 00000000000..0146a064b91 --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/att_defs.h @@ -0,0 +1,221 @@ +/*************************************************************************************************/ +/*! + * \file att_defs.h + * + * \brief Attribute protocol constants and definitions from the Bluetooth specification. + * + * $Date: 2012-09-11 16:18:57 -0700 (Tue, 11 Sep 2012) $ + * $Revision: 349 $ + * + * Copyright (c) 2009-2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + */ +/*************************************************************************************************/ +#ifndef ATT_DEFS_H +#define ATT_DEFS_H + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************************************************** + Macros +**************************************************************************************************/ + +/*! Attribute PDU format */ +#define ATT_HDR_LEN 1 /*! Attribute PDU header length */ +#define ATT_AUTH_SIG_LEN 12 /*! Authentication signature length */ +#define ATT_DEFAULT_MTU 23 /*! Default value of ATT_MTU */ +#define ATT_MAX_MTU 517 /*! Maximum value of ATT_MTU */ +#define ATT_DEFAULT_PAYLOAD_LEN 20 /*! Default maximum payload length for most PDUs */ + +/*! Attribute value parameters */ +#define ATT_VALUE_MAX_LEN 512 /*! Maximum attribute value length */ +#define ATT_VALUE_MAX_OFFSET 511 /*! Maximum attribute value offset */ + +/*! Transaction timeout */ +#define ATT_MAX_TRANS_TIMEOUT 30 /*! Maximum transaction timeout in seconds */ + +/*! Error codes */ +#define ATT_SUCCESS 0x00 /*! Operation successful */ +#define ATT_ERR_HANDLE 0x01 /*! Invalid handle */ +#define ATT_ERR_READ 0x02 /*! Read not permitted */ +#define ATT_ERR_WRITE 0x03 /*! Write not permitted */ +#define ATT_ERR_INVALID_PDU 0x04 /*! Invalid pdu */ +#define ATT_ERR_AUTH 0x05 /*! Insufficient authentication */ +#define ATT_ERR_NOT_SUP 0x06 /*! Request not supported */ +#define ATT_ERR_OFFSET 0x07 /*! Invalid offset */ +#define ATT_ERR_AUTHOR 0x08 /*! Insufficient authorization */ +#define ATT_ERR_QUEUE_FULL 0x09 /*! Prepare queue full */ +#define ATT_ERR_NOT_FOUND 0x0A /*! Attribute not found */ +#define ATT_ERR_NOT_LONG 0x0B /*! Attribute not long */ +#define ATT_ERR_KEY_SIZE 0x0C /*! Insufficient encryption key size */ +#define ATT_ERR_LENGTH 0x0D /*! Invalid attribute value length */ +#define ATT_ERR_UNLIKELY 0x0E /*! Other unlikely error */ +#define ATT_ERR_ENC 0x0F /*! Insufficient encryption */ +#define ATT_ERR_GROUP_TYPE 0x10 /*! Unsupported group type */ +#define ATT_ERR_RESOURCES 0x11 /*! Insufficient resources */ +#define ATT_ERR_CCCD 0xFD /*! CCCD improperly configured */ +#define ATT_ERR_IN_PROGRESS 0xFE /*! Procedure already in progress */ +#define ATT_ERR_RANGE 0xFF /*! Value out of range */ + +/*! Proprietary internal error codes */ +#define ATT_ERR_MEMORY 0x70 /*! Out of memory */ +#define ATT_ERR_TIMEOUT 0x71 /*! Transaction timeout */ +#define ATT_ERR_OVERFLOW 0x72 /*! Transaction overflow */ +#define ATT_ERR_INVALID_RSP 0x73 /*! Invalid response PDU */ +#define ATT_ERR_CANCELLED 0x74 /*! Request cancelled */ +#define ATT_ERR_UNDEFINED 0x75 /*! Other undefined error */ +#define ATT_ERR_REQ_NOT_FOUND 0x76 /*! Required characteristic not found */ +#define ATT_CONTINUING 0x77 /*! Procedure continuing */ + +/*! Application error codes */ +#define ATT_ERR_VALUE_RANGE 0x80 /*! Value out of range */ + +/*! PDU types */ +#define ATT_PDU_ERR_RSP 0x01 /*! Error response */ +#define ATT_PDU_MTU_REQ 0x02 /*! Exchange mtu request */ +#define ATT_PDU_MTU_RSP 0x03 /*! Exchange mtu response */ +#define ATT_PDU_FIND_INFO_REQ 0x04 /*! Find information request */ +#define ATT_PDU_FIND_INFO_RSP 0x05 /*! Find information response */ +#define ATT_PDU_FIND_TYPE_REQ 0x06 /*! Find by type value request */ +#define ATT_PDU_FIND_TYPE_RSP 0x07 /*! Find by type value response */ +#define ATT_PDU_READ_TYPE_REQ 0x08 /*! Read by type request */ +#define ATT_PDU_READ_TYPE_RSP 0x09 /*! Read by type response */ +#define ATT_PDU_READ_REQ 0x0A /*! Read request */ +#define ATT_PDU_READ_RSP 0x0B /*! Read response */ +#define ATT_PDU_READ_BLOB_REQ 0x0C /*! Read blob request */ +#define ATT_PDU_READ_BLOB_RSP 0x0D /*! Read blob response */ +#define ATT_PDU_READ_MULT_REQ 0x0E /*! Read multiple request */ +#define ATT_PDU_READ_MULT_RSP 0x0F /*! Read multiple response */ +#define ATT_PDU_READ_GROUP_TYPE_REQ 0x10 /*! Read by group type request */ +#define ATT_PDU_READ_GROUP_TYPE_RSP 0x11 /*! Read by group type response */ +#define ATT_PDU_WRITE_REQ 0x12 /*! Write request */ +#define ATT_PDU_WRITE_RSP 0x13 /*! Write response */ +#define ATT_PDU_WRITE_CMD 0x52 /*! Write command */ +#define ATT_PDU_SIGNED_WRITE_CMD 0xD2 /*! Signed write command */ +#define ATT_PDU_PREP_WRITE_REQ 0x16 /*! Prepare write request */ +#define ATT_PDU_PREP_WRITE_RSP 0x17 /*! Prepare write response */ +#define ATT_PDU_EXEC_WRITE_REQ 0x18 /*! Execute write request */ +#define ATT_PDU_EXEC_WRITE_RSP 0x19 /*! Execute write response */ +#define ATT_PDU_VALUE_NTF 0x1B /*! Handle value notification */ +#define ATT_PDU_VALUE_IND 0x1D /*! Handle value indication */ +#define ATT_PDU_VALUE_CNF 0x1E /*! Handle value confirmation */ +#define ATT_PDU_MAX 0x1F /*! PDU Maximum */ + +/*! Length of PDU fixed length fields */ +#define ATT_ERR_RSP_LEN 5 +#define ATT_MTU_REQ_LEN 3 +#define ATT_MTU_RSP_LEN 3 +#define ATT_FIND_INFO_REQ_LEN 5 +#define ATT_FIND_INFO_RSP_LEN 2 +#define ATT_FIND_TYPE_REQ_LEN 7 +#define ATT_FIND_TYPE_RSP_LEN 1 +#define ATT_READ_TYPE_REQ_LEN 5 +#define ATT_READ_TYPE_RSP_LEN 2 +#define ATT_READ_REQ_LEN 3 +#define ATT_READ_RSP_LEN 1 +#define ATT_READ_BLOB_REQ_LEN 5 +#define ATT_READ_BLOB_RSP_LEN 1 +#define ATT_READ_MULT_REQ_LEN 1 +#define ATT_READ_MULT_RSP_LEN 1 +#define ATT_READ_GROUP_TYPE_REQ_LEN 5 +#define ATT_READ_GROUP_TYPE_RSP_LEN 2 +#define ATT_WRITE_REQ_LEN 3 +#define ATT_WRITE_RSP_LEN 1 +#define ATT_WRITE_CMD_LEN 3 +#define ATT_SIGNED_WRITE_CMD_LEN (ATT_WRITE_CMD_LEN + ATT_AUTH_SIG_LEN) +#define ATT_PREP_WRITE_REQ_LEN 5 +#define ATT_PREP_WRITE_RSP_LEN 5 +#define ATT_EXEC_WRITE_REQ_LEN 2 +#define ATT_EXEC_WRITE_RSP_LEN 1 +#define ATT_VALUE_NTF_LEN 3 +#define ATT_VALUE_IND_LEN 3 +#define ATT_VALUE_CNF_LEN 1 + +/*! Find information response format */ +#define ATT_FIND_HANDLE_16_UUID 0x01 /*! Handle and 16 bit UUID */ +#define ATT_FIND_HANDLE_128_UUID 0x02 /*! Handle and 128 bit UUID */ + +/*! Execute write request flags */ +#define ATT_EXEC_WRITE_CANCEL 0x00 /*! Cancel all prepared writes */ +#define ATT_EXEC_WRITE_ALL 0x01 /*! Write all pending prepared writes */ + +/*! PDU masks */ +#define ATT_PDU_MASK_SERVER 0x01 /*! Server bit mask */ +#define ATT_PDU_MASK_COMMAND 0x40 /*! Command bit mask */ +#define ATT_PDU_MASK_SIGNED 0x80 /*! Auth signature bit mask */ + +/*! Handles */ +#define ATT_HANDLE_NONE 0x0000 +#define ATT_HANDLE_START 0x0001 +#define ATT_HANDLE_MAX 0xFFFF + +/*! UUID lengths */ +#define ATT_NO_UUID_LEN 0 /*! Length when no UUID is present ;-) */ +#define ATT_16_UUID_LEN 2 /*! Length in bytes of a 16 bit UUID */ +#define ATT_128_UUID_LEN 16 /*! Length in bytes of a 128 bit UUID */ + +/*! GATT characteristic properties */ +#define ATT_PROP_BROADCAST 0x01 /*! Permit broadcasts */ +#define ATT_PROP_READ 0x02 /*! Permit reads */ +#define ATT_PROP_WRITE_NO_RSP 0x04 /*! Permit writes without response */ +#define ATT_PROP_WRITE 0x08 /*! Permit writes with response */ +#define ATT_PROP_NOTIFY 0x10 /*! Permit notifications */ +#define ATT_PROP_INDICATE 0x20 /*! Permit indications */ +#define ATT_PROP_AUTHENTICATED 0x40 /*! Permit signed writes */ +#define ATT_PROP_EXTENDED 0x80 /*! More properties defined in extended properties */ + +/*! GATT characteristic extended properties */ +#define ATT_EXT_PROP_RELIABLE_WRITE 0x0001 /*! Permit reliable writes */ +#define ATT_EXT_PROP_WRITEABLE_AUX 0x0002 /*! Permit write to characteristic descriptor */ + +/*! GATT client characteristic configuration */ +#define ATT_CLIENT_CFG_NOTIFY 0x0001 /*! Notify the value */ +#define ATT_CLIENT_CFG_INDICATE 0x0002 /*! Indicate the value */ + +/*! GATT server characteristic configuration */ +#define ATT_SERVER_CFG_BROADCAST 0x0001 /*! Broadcast the value */ + +/*! GATT characteristic format */ +#define ATT_FORMAT_BOOLEAN 0x01 /*! Boolean */ +#define ATT_FORMAT_2BIT 0x02 /*! Unsigned 2 bit integer */ +#define ATT_FORMAT_NIBBLE 0x03 /*! Unsigned 4 bit integer */ +#define ATT_FORMAT_UINT8 0x04 /*! Unsigned 8 bit integer */ +#define ATT_FORMAT_UINT12 0x05 /*! Unsigned 12 bit integer */ +#define ATT_FORMAT_UINT16 0x06 /*! Unsigned 16 bit integer */ +#define ATT_FORMAT_UINT24 0x07 /*! Unsigned 24 bit integer */ +#define ATT_FORMAT_UINT32 0x08 /*! Unsigned 32 bit integer */ +#define ATT_FORMAT_UINT48 0x09 /*! Unsigned 48 bit integer */ +#define ATT_FORMAT_UINT64 0x0A /*! Unsigned 64 bit integer */ +#define ATT_FORMAT_UINT128 0x0B /*! Unsigned 128 bit integer */ +#define ATT_FORMAT_SINT8 0x0C /*! Signed 8 bit integer */ +#define ATT_FORMAT_SINT12 0x0D /*! Signed 12 bit integer */ +#define ATT_FORMAT_SINT16 0x0E /*! Signed 16 bit integer */ +#define ATT_FORMAT_SINT24 0x0F /*! Signed 24 bit integer */ +#define ATT_FORMAT_SINT32 0x10 /*! Signed 32 bit integer */ +#define ATT_FORMAT_SINT48 0x11 /*! Signed 48 bit integer */ +#define ATT_FORMAT_SINT64 0x12 /*! Signed 64 bit integer */ +#define ATT_FORMAT_SINT128 0x13 /*! Signed 128 bit integer */ +#define ATT_FORMAT_FLOAT32 0x14 /*! IEEE-754 32 bit floating point */ +#define ATT_FORMAT_FLOAT64 0x15 /*! IEEE-754 64 bit floating point */ +#define ATT_FORMAT_SFLOAT 0x16 /*! IEEE-11073 16 bit SFLOAT */ +#define ATT_FORMAT_FLOAT 0x17 /*! IEEE-11073 32 bit FLOAT */ +#define ATT_FORMAT_DUINT16 0x18 /*! IEEE-20601 format */ +#define ATT_FORMAT_UTF8 0x19 /*! UTF-8 string */ +#define ATT_FORMAT_UTF16 0x1A /*! UTF-16 string */ +#define ATT_FORMAT_STRUCT 0x1B /*! Opaque structure */ + +#ifdef __cplusplus +}; +#endif + +#endif /* ATT_DEFS_H */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/att_handler.h b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/att_handler.h new file mode 100644 index 00000000000..4c2bf5ae551 --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/att_handler.h @@ -0,0 +1,67 @@ +/*************************************************************************************************/ +/*! + * \file att_handler.h + * + * \brief Interface to ATT event handler. + * + * $Date: 2012-03-29 13:24:04 -0700 (Thu, 29 Mar 2012) $ + * $Revision: 287 $ + * + * Copyright (c) 2009-2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + */ +/*************************************************************************************************/ +#ifndef ATT_HANDLER_H +#define ATT_HANDLER_H + +#include "wsf_os.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************************************************** + Function Declarations +**************************************************************************************************/ + +/*************************************************************************************************/ +/*! + * \fn AttHandlerInit + * + * \brief ATT handler init function called during system initialization. + * + * \param handlerID WSF handler ID for ATT. + * + * \return None. + */ +/*************************************************************************************************/ +void AttHandlerInit(wsfHandlerId_t handlerId); + + +/*************************************************************************************************/ +/*! + * \fn AttHandler + * + * \brief WSF event handler for ATT. + * + * \param event WSF event mask. + * \param pMsg WSF message. + * + * \return None. + */ +/*************************************************************************************************/ +void AttHandler(wsfEventMask_t event, wsfMsgHdr_t *pMsg); + +#ifdef __cplusplus +}; +#endif + +#endif /* ATT_HANDLER_H */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/att_uuid.h b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/att_uuid.h new file mode 100644 index 00000000000..0e08d20209b --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/att_uuid.h @@ -0,0 +1,431 @@ +/*************************************************************************************************/ +/*! + * \file att_uuid.h + * + * \brief Attribute protocol UUIDs from the Bluetooth specification. + * + * $Date: 2014-08-11 17:41:56 -0500 (Mon, 11 Aug 2014) $ + * $Revision: 14613 $ + * + * Copyright (c) 2011-2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + */ +/*************************************************************************************************/ +#ifndef ATT_UUID_H +#define ATT_UUID_H + +#include "att_defs.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************************************************** + Macros +**************************************************************************************************/ + +/*! Service UUIDs */ +#define ATT_UUID_GAP_SERVICE 0x1800 /*! Generic Access Profile Service */ +#define ATT_UUID_GATT_SERVICE 0x1801 /*! Generic Attribute Profile Service */ +#define ATT_UUID_IMMEDIATE_ALERT_SERVICE 0x1802 /*! Immediate Alert Service */ +#define ATT_UUID_LINK_LOSS_SERVICE 0x1803 /*! Link Loss Service */ +#define ATT_UUID_TX_POWER_SERVICE 0x1804 /*! Tx Power Service */ +#define ATT_UUID_CURRENT_TIME_SERVICE 0x1805 /*! Current Time Service */ +#define ATT_UUID_REF_TIME_UPDATE_SERVICE 0x1806 /*! Reference Time Update Service */ +#define ATT_UUID_DST_CHANGE_SERVICE 0x1807 /*! Next DST Change Service */ +#define ATT_UUID_GLUCOSE_SERVICE 0x1808 /*! Glucose Service */ +#define ATT_UUID_HEALTH_THERM_SERVICE 0x1809 /*! Health Thermometer Service */ +#define ATT_UUID_DEVICE_INFO_SERVICE 0x180A /*! Device Information Service */ +#define ATT_UUID_NETWORK_AVAIL_SERVICE 0x180B /*! Network Availability Service */ +#define ATT_UUID_WATCHDOG_SERVICE 0x180C /*! Watchdog Service */ +#define ATT_UUID_HEART_RATE_SERVICE 0x180D /*! Heart Rate Service */ +#define ATT_UUID_PHONE_ALERT_SERVICE 0x180E /*! Phone Alert Status Service */ +#define ATT_UUID_BATTERY_SERVICE 0x180F /*! Battery Service */ +#define ATT_UUID_BLOOD_PRESSURE_SERVICE 0x1810 /*! Blood Pressure Service */ +#define ATT_UUID_ALERT_NOTIF_SERVICE 0x1811 /*! Alert Notification Service */ +#define ATT_UUID_HID_SERVICE 0x1812 /*! Human Interface Device Service */ +#define ATT_UUID_SCAN_PARAM_SERVICE 0x1813 /*! Scan Parameter Service */ +#define ATT_UUID_WEIGHT_SCALE_SERVICE 0x181D /*! Weight Scale Service */ + +/*! GATT UUIDs */ +#define ATT_UUID_PRIMARY_SERVICE 0x2800 /*! Primary Service */ +#define ATT_UUID_SECONDARY_SERVICE 0x2801 /*! Secondary Service */ +#define ATT_UUID_INCLUDE 0x2802 /*! Include */ +#define ATT_UUID_CHARACTERISTIC 0x2803 /*! Characteristic */ + +/*! Descriptor UUIDs */ +#define ATT_UUID_CHARACTERISTIC_EXT 0x2900 /*! Characteristic Extended Properties */ +#define ATT_UUID_CHAR_USER_DESC 0x2901 /*! Characteristic User Description */ +#define ATT_UUID_CLIENT_CHAR_CONFIG 0x2902 /*! Client Characteristic Configuration */ +#define ATT_UUID_SERVER_CHAR_CONFIG 0x2903 /*! Server Characteristic Configuration */ +#define ATT_UUID_CHAR_PRES_FORMAT 0x2904 /*! Characteristic Presentation Format */ +#define ATT_UUID_AGGREGATE_FORMAT 0x2905 /*! Characteristic Aggregate Format */ +#define ATT_UUID_VALID_RANGE 0x2906 /*! Valid Range */ +#define ATT_UUID_HID_REPORT_ID_MAPPING 0x2908 /*! HID Report ID Mapping */ + +/*! Characteristic UUIDs */ +#define ATT_UUID_DEVICE_NAME 0x2A00 /*! Device Name */ +#define ATT_UUID_APPEARANCE 0x2A01 /*! Appearance */ +#define ATT_UUID_PERIPH_PRIVACY_FLAG 0x2A02 /*! Peripheral Privacy Flag */ +#define ATT_UUID_RECONN_ADDR 0x2A03 /*! Reconnection Address */ +#define ATT_UUID_PREF_CONN_PARAM 0x2A04 /*! Peripheral Preferred Connection Parameters */ +#define ATT_UUID_SERVICE_CHANGED 0x2A05 /*! Service Changed */ +#define ATT_UUID_ALERT_LEVEL 0x2A06 /*! Alert Level */ +#define ATT_UUID_TX_POWER_LEVEL 0x2A07 /*! Tx Power Level */ +#define ATT_UUID_DATE_TIME 0x2A08 /*! Date Time */ +#define ATT_UUID_DAY_OF_WEEK 0x2A09 /*! Day of Week */ +#define ATT_UUID_DAY_DATE_TIME 0x2A0A /*! Day Date Time */ +#define ATT_UUID_EXACT_TIME_100 0x2A0B /*! Exact Time 100 */ +#define ATT_UUID_EXACT_TIME_256 0x2A0C /*! Exact Time 256 */ +#define ATT_UUID_DST_OFFSET 0x2A0D /*! DST Offset */ +#define ATT_UUID_TIME_ZONE 0x2A0E /*! Time Zone */ +#define ATT_UUID_LOCAL_TIME_INFO 0x2A0F /*! Local Time Information */ +#define ATT_UUID_SECONDARY_TIME_ZONE 0x2A10 /*! Secondary Time Zone */ +#define ATT_UUID_TIME_WITH_DST 0x2A11 /*! Time with DST */ +#define ATT_UUID_TIME_ACCURACY 0x2A12 /*! Time Accuracy */ +#define ATT_UUID_TIME_SOURCE 0x2A13 /*! Time Source */ +#define ATT_UUID_REFERENCE_TIME_INFO 0x2A14 /*! Reference Time Information */ +#define ATT_UUID_TIME_BROADCAST 0x2A15 /*! Time Broadcast */ +#define ATT_UUID_TIME_UPDATE_CP 0x2A16 /*! Time Update Control Point */ +#define ATT_UUID_TIME_UPDATE_STATE 0x2A17 /*! Time Update State */ +#define ATT_UUID_GLUCOSE_MEAS 0x2A18 /*! Glucose Measurement */ +#define ATT_UUID_BATTERY_LEVEL 0x2A19 /*! Battery Level */ +#define ATT_UUID_BATTERY_POWER_STATE 0x2A1A /*! Battery Power State */ +#define ATT_UUID_BATTERY_LEVEL_STATE 0x2A1B /*! Battery Level State */ +#define ATT_UUID_TEMP_MEAS 0x2A1C /*! Temperature Measurement */ +#define ATT_UUID_TEMP_TYPE 0x2A1D /*! Temperature Type */ +#define ATT_UUID_INTERMEDIATE_TEMP 0x2A1E /*! Intermediate Temperature */ +#define ATT_UUID_TEMP_C 0x2A1F /*! Temperature Celsius */ +#define ATT_UUID_TEMP_F 0x2A20 /*! Temperature Fahrenheit */ +#define ATT_UUID_MEAS_INTERVAL 0x2A21 /*! Measurement Interval */ +#define ATT_UUID_HID_BOOT_REPORT_MAP 0x2A22 /*! HID Boot Report Mapping */ +#define ATT_UUID_SYSTEM_ID 0x2A23 /*! System ID */ +#define ATT_UUID_MODEL_NUMBER 0x2A24 /*! Model Number String */ +#define ATT_UUID_SERIAL_NUMBER 0x2A25 /*! Serial Number String */ +#define ATT_UUID_FIRMWARE_REV 0x2A26 /*! Firmware Revision String */ +#define ATT_UUID_HARDWARE_REV 0x2A27 /*! Hardware Revision String */ +#define ATT_UUID_SOFTWARE_REV 0x2A28 /*! Software Revision String */ +#define ATT_UUID_MANUFACTURER_NAME 0x2A29 /*! Manufacturer Name String */ +#define ATT_UUID_11073_CERT_DATA 0x2A2A /*! IEEE 11073-20601 Regulatory Certification Data List */ +#define ATT_UUID_CURRENT_TIME 0x2A2B /*! Current Time */ +#define ATT_UUID_ELEVATION 0x2A2C /*! Elevation */ +#define ATT_UUID_LATITUDE 0x2A2D /*! Latitude */ +#define ATT_UUID_LONGITUDE 0x2A2E /*! Longitude */ +#define ATT_UUID_POSITION_2D 0x2A2F /*! Position 2D */ +#define ATT_UUID_POSITION_3D 0x2A30 /*! Position 3D */ +#define ATT_UUID_VENDOR_ID 0x2A31 /*! Vendor ID */ +#define ATT_UUID_PRODUCT_ID 0x2A32 /*! Product ID */ +#define ATT_UUID_HID_VERSION 0x2A33 /*! HID Version */ +#define ATT_UUID_GLUCOSE_MEAS_CONTEXT 0x2A34 /*! Glucose Measurement Context */ +#define ATT_UUID_BP_MEAS 0x2A35 /*! Blood Pressure Measurement */ +#define ATT_UUID_INTERMEDIATE_BP 0x2A36 /*! Intermediate Cuff Pressure */ +#define ATT_UUID_HR_MEAS 0x2A37 /*! Heart Rate Measurement */ +#define ATT_UUID_HR_SENSOR_LOC 0x2A38 /*! Body Sensor Location */ +#define ATT_UUID_HR_CP 0x2A39 /*! Heart Rate Control Point */ +#define ATT_UUID_REMOVABLE 0x2A3A /*! Removable */ +#define ATT_UUID_SERVICE_REQ 0x2A3B /*! Service Required */ +#define ATT_UUID_SCI_TEMP_C 0x2A3C /*! Scientific Temperature in Celsius */ +#define ATT_UUID_STRING 0x2A3D /*! String */ +#define ATT_UUID_NETWORK_AVAIL 0x2A3E /*! Network Availability */ +#define ATT_UUID_ALERT_STATUS 0x2A3F /*! Alert Status */ +#define ATT_UUID_RINGER_CP 0x2A40 /*! Ringer Control Point */ +#define ATT_UUID_RINGER_SETTING 0x2A41 /*! Ringer Setting */ +#define ATT_UUID_ALERT_CAT_ID_MASK 0x2A42 /*! Alert Category ID Bit Mask */ +#define ATT_UUID_ALERT_CAT_ID 0x2A43 /*! Alert Category ID */ +#define ATT_UUID_ALERT_NOTIF_CP 0x2A44 /*! Alert Notification Control Point */ +#define ATT_UUID_UNREAD_ALERT_STATUS 0x2A45 /*! Unread Alert Status */ +#define ATT_UUID_NEW_ALERT 0x2A46 /*! New Alert */ +#define ATT_UUID_SUP_NEW_ALERT_CAT 0x2A47 /*! Supported New Alert Category */ +#define ATT_UUID_SUP_UNREAD_ALERT_CAT 0x2A48 /*! Supported Unread Alert Category */ +#define ATT_UUID_BP_FEATURE 0x2A49 /*! Blood Pressure Feature */ +#define ATT_UUID_HID_INFO 0x2A4A /*! HID Information */ +#define ATT_UUID_REPORT_MAP 0x2A4B /*! Report Map */ +#define ATT_UUID_HID_CP 0x2A4C /*! HID Control Point */ +#define ATT_UUID_REPORT 0x2A4D /*! Report */ +#define ATT_UUID_PROTOCOL_MODE 0x2A4E /*! Protocol Mode */ +#define ATT_UUID_SCAN_INT_WIND 0x2A4F /*! Scan Interval Window */ +#define ATT_UUID_PNP_ID 0x2A50 /*! PnP ID */ +#define ATT_UUID_GLUCOSE_FEATURE 0x2A51 /*! Glucose Feature */ +#define ATT_UUID_RACP 0x2A52 /*! Record Access Control Point */ +#define ATT_UUID_WEIGHT_MEAS 0x2A9D /*! Weight Measurement */ +#define ATT_UUID_WEIGHT_SCALE_FEATURE 0x2A9E /*! Weight Scale Feature */ + +/* remove when adopted */ +#define ATT_UUID_GENERIC_CTRL_SERVICE 0xF011 +#define ATT_UUID_COMMAND_ENUM 0xE010 /*! Command Enumeration */ +#define ATT_UUID_GENERIC_COMMAND_CP 0xE011 /*! Generic Command Control Point */ + +/*! Unit UUIDs */ +#define ATT_UUID_UNITLESS 0x2700 /*! unitless */ +#define ATT_UUID_LENGTH_M 0x2701 /*! length metre */ +#define ATT_UUID_MASS_KG 0x2702 /*! mass kilogram */ +#define ATT_UUID_TIME_SEC 0x2703 /*! time second */ +#define ATT_UUID_ELECTRIC_CURRENT_AMP 0x2704 /*! electric current ampere */ +#define ATT_UUID_THERMO_TEMP_K 0x2705 /*! thermodynamic temperature kelvin */ +#define ATT_UUID_AMOUNT_OF_SUBSTANCE_MOLE 0x2706 /*! amount of substance mole */ +#define ATT_UUID_LUMINOUS_INTENSITY_CAND 0x2707 /*! luminous intensity candela */ +#define ATT_UUID_AREA_SQ_M 0x2710 /*! area square metres */ +#define ATT_UUID_VOLUME_CU_M 0x2711 /*! volume cubic metres */ +#define ATT_UUID_VELOCITY_MPS 0x2712 /*! velocity metres per second */ +#define ATT_UUID_ACCELERATION_MPS_SQ 0x2713 /*! acceleration metres per second squared */ +#define ATT_UUID_WAVENUMBER_RECIPROCAL_M 0x2714 /*! wavenumber reciprocal metre */ +#define ATT_UUID_DENSITY_KG_PER_CU_M 0x2715 /*! density kilogram per cubic metre */ +#define ATT_UUID_SURFACE_DENS_KG_PER_SQ_M 0x2716 /*! surface density kilogram per square metre */ +#define ATT_UUID_SPECIFIC_VOL_CU_M_PER_KG 0x2717 /*! specific volume cubic metre per kilogram */ +#define ATT_UUID_CURRENT_DENS_AMP_PER_SQ_M 0x2718 /*! current density ampere per square metre */ +#define ATT_UUID_MAG_FIELD_STR_AMP_PER_M 0x2719 /*! magnetic field strength ampere per metre */ +#define ATT_UUID_AMOUNT_CONC_MOLE_PER_CU_M 0x271A /*! amount concentration mole per cubic metre */ +#define ATT_UUID_MASS_CONC_KG_PER_CU_M 0x271B /*! mass concentration kilogram per cubic metre */ +#define ATT_UUID_LUM_CAND_PER_SQ_M 0x271C /*! luminance candela per square metre */ +#define ATT_UUID_REFRACTIVE_INDEX 0x271D /*! refractive index */ +#define ATT_UUID_RELATIVE_PERMEABILITY 0x271E /*! relative permeability */ +#define ATT_UUID_PLANE_ANGLE_R 0x2720 /*! plane angle radian */ +#define ATT_UUID_SOLID_ANGLE_STER 0x2721 /*! solid angle steradian */ +#define ATT_UUID_FREQUENCY_HERTZ 0x2722 /*! frequency hertz */ +#define ATT_UUID_FORCE_NEWT 0x2723 /*! force newton */ +#define ATT_UUID_PRESSURE_PASCAL 0x2724 /*! pressure pascal */ +#define ATT_UUID_ENERGY_J 0x2725 /*! energy joule */ +#define ATT_UUID_POWER_W 0x2726 /*! power watt */ +#define ATT_UUID_ELECTRIC_CHG_C 0x2727 /*! electric charge coulomb */ +#define ATT_UUID_ELECTRIC_POTENTIAL_VOLT 0x2728 /*! electric potential difference volt */ +#define ATT_UUID_CAPACITANCE_F 0x2729 /*! capacitance farad */ +#define ATT_UUID_ELECTRIC_RESISTANCE_OHM 0x272A /*! electric resistance ohm */ +#define ATT_UUID_ELECTRIC_COND_SIEMENS 0x272B /*! electric conductance siemens */ +#define ATT_UUID_MAGNETIC_FLEX_WEBER 0x272C /*! magnetic flex weber */ +#define ATT_UUID_MAGNETIC_FLEX_DENS_TESLA 0x272D /*! magnetic flex density tesla */ +#define ATT_UUID_INDUCTANCE_H 0x272E /*! inductance henry */ +#define ATT_UUID_C_TEMP_DEG_C 0x272F /*! Celsius temperature degree Celsius */ +#define ATT_UUID_LUMINOUS_FLUX_LUMEN 0x2730 /*! luminous flux lumen */ +#define ATT_UUID_ILLUMINANCE_LUX 0x2731 /*! illuminance lux */ +#define ATT_UUID_RADIONUCLIDE_BECQUEREL 0x2732 /*! activity referred to a radionuclide becquerel */ +#define ATT_UUID_ABSORBED_DOSE_GRAY 0x2733 /*! absorbed dose gray */ +#define ATT_UUID_DOSE_EQUIVALENT_SIEVERT 0x2734 /*! dose equivalent sievert */ +#define ATT_UUID_CATALYTIC_ACTIVITY_KATAL 0x2735 /*! catalytic activity katal */ +#define ATT_UUID_DYNAMIC_VISC_PASCAL_SEC 0x2740 /*! dynamic viscosity pascal second */ +#define ATT_UUID_MOMENT_OF_FORCE_NEWT_M 0x2741 /*! moment of force newton metre */ +#define ATT_UUID_SURFACE_TENSION_NEWT_PER_M 0x2742 /*! surface tension newton per metre */ +#define ATT_UUID_ANG_VELOCITY_R_PER_SEC 0x2743 /*! angular velocity radian per second */ +#define ATT_UUID_ANG_ACCEL_R_PER_SEC_SQD 0x2744 /*! angular acceleration radian per second squared */ +#define ATT_UUID_HEAT_FLUX_DEN_W_PER_SQ_M 0x2745 /*! heat flux density watt per square metre */ +#define ATT_UUID_HEAT_CAP_J_PER_K 0x2746 /*! heat capacity joule per kelvin */ +#define ATT_UUID_SPEC_HEAT_CAP_J_PER_KG_K 0x2747 /*! specific heat capacity joule per kilogram kelvin */ +#define ATT_UUID_SPEC_ENERGY_J_PER_KG 0x2748 /*! specific energy joule per kilogram */ +#define ATT_UUID_THERMAL_COND_W_PER_M_K 0x2749 /*! thermal conductivity watt per metre kelvin */ +#define ATT_UUID_ENERGY_DENSITY_J_PER_CU_M 0x274A /*! energy density joule per cubic metre */ +#define ATT_UUID_ELEC_FIELD_STR_VOLT_PER_M 0x274B /*! electric field strength volt per metre */ +#define ATT_UUID_ELEC_CHG_DENS_C_PER_CU_M 0x274C /*! electric charge density coulomb per cubic metre */ +#define ATT_UUID_SURF_CHG_DENS_C_PER_SQ_M 0x274D /*! surface charge density coulomb per square metre */ +#define ATT_UUID_ELEC_FLUX_DENS_C_PER_SQ_M 0x274E /*! electric flux density coulomb per square metre */ +#define ATT_UUID_PERMITTIVITY_F_PER_M 0x274F /*! permittivity farad per metre */ +#define ATT_UUID_PERMEABILITY_H_PER_M 0x2750 /*! permeability henry per metre */ +#define ATT_UUID_MOLAR_ENERGY_J_PER_MOLE 0x2751 /*! molar energy joule per mole */ +#define ATT_UUID_MOLAR_ENTROPY_J_PER_MOLE_K 0x2752 /*! molar entropy joule per mole kelvin */ +#define ATT_UUID_EXPOSURE_C_PER_KG 0x2753 /*! exposure coulomb per kilogram */ +#define ATT_UUID_DOSE_RATE_GRAY_PER_SEC 0x2754 /*! absorbed dose rate gray per second */ +#define ATT_UUID_RT_INTENSITY_W_PER_STER 0x2755 /*! radiant intensity watt per steradian */ +#define ATT_UUID_RCE_W_PER_SQ_METER_STER 0x2756 /*! radiance watt per square meter steradian */ +#define ATT_UUID_CATALYTIC_KATAL_PER_CU_M 0x2757 /*! catalytic activity concentration katal per cubic metre */ +#define ATT_UUID_TIME_MIN 0x2760 /*! time minute */ +#define ATT_UUID_TIME_HR 0x2761 /*! time hour */ +#define ATT_UUID_TIME_DAY 0x2762 /*! time day */ +#define ATT_UUID_PLANE_ANGLE_DEG 0x2763 /*! plane angle degree */ +#define ATT_UUID_PLANE_ANGLE_MIN 0x2764 /*! plane angle minute */ +#define ATT_UUID_PLANE_ANGLE_SEC 0x2765 /*! plane angle second */ +#define ATT_UUID_AREA_HECTARE 0x2766 /*! area hectare */ +#define ATT_UUID_VOLUME_L 0x2767 /*! volume litre */ +#define ATT_UUID_MASS_TONNE 0x2768 /*! mass tonne */ +#define ATT_UUID_PRESSURE_BAR 0x2780 /*! pressure bar */ +#define ATT_UUID_PRESSURE_MM 0x2781 /*! pressure millimetre of mercury */ +#define ATT_UUID_LENGTH_ANGSTROM 0x2782 /*! length angstrom */ +#define ATT_UUID_LENGTH_NAUTICAL_MILE 0x2783 /*! length nautical mile */ +#define ATT_UUID_AREA_BARN 0x2784 /*! area barn */ +#define ATT_UUID_VELOCITY_KNOT 0x2785 /*! velocity knot */ +#define ATT_UUID_LOG_RADIO_QUANT_NEPER 0x2786 /*! logarithmic radio quantity neper */ +#define ATT_UUID_LOG_RADIO_QUANT_BEL 0x2787 /*! logarithmic radio quantity bel */ +#define ATT_UUID_LOG_RADIO_QUANT_DB 0x2788 /*! logarithmic radio quantity decibel */ +#define ATT_UUID_LENGTH_YARD 0x27A0 /*! length yard */ +#define ATT_UUID_LENGTH_PARSEC 0x27A1 /*! length parsec */ +#define ATT_UUID_LENGTH_IN 0x27A2 /*! length inch */ +#define ATT_UUID_LENGTH_FOOT 0x27A3 /*! length foot */ +#define ATT_UUID_LENGTH_MILE 0x27A4 /*! length mile */ +#define ATT_UUID_PRESSURE_POUND_PER_SQ_IN 0x27A5 /*! pressure pound-force per square inch */ +#define ATT_UUID_VELOCITY_KPH 0x27A6 /*! velocity kilometre per hour */ +#define ATT_UUID_VELOCITY_MPH 0x27A7 /*! velocity mile per hour */ +#define ATT_UUID_ANG_VELOCITY_RPM 0x27A8 /*! angular velocity revolution per minute */ +#define ATT_UUID_ENERGY_GRAM_CALORIE 0x27A9 /*! energy gram calorie */ +#define ATT_UUID_ENERGY_KG_CALORIE 0x27AA /*! energy kilogram calorie */ +#define ATT_UUID_ENERGY_KILOWATT_HR 0x27AB /*! energy kilowatt hour */ +#define ATT_UUID_THERM_TEMP_F 0x27AC /*! thermodynamic temperature degree Fahrenheit */ +#define ATT_UUID_PERCENTAGE 0x27AD /*! percentage */ +#define ATT_UUID_PER_MILLE 0x27AE /*! per mille */ +#define ATT_UUID_PERIOD_BEATS_PER_MIN 0x27AF /*! period beats per minute */ +#define ATT_UUID_ELECTRIC_CHG_AMP_HRS 0x27B0 /*! electric charge ampere hours */ +#define ATT_UUID_MASS_DENSITY_MG_PER_DL 0x27B1 /*! mass density milligram per decilitre */ +#define ATT_UUID_MASS_DENSITY_MMOLE_PER_L 0x27B2 /*! mass density millimole per litre */ +#define ATT_UUID_TIME_YEAR 0x27B3 /*! time year */ +#define ATT_UUID_TIME_MONTH 0x27B4 /*! time month */ + +/*! Wicentric proprietary UUIDs */ + +/*! Base UUID: E0262760-08C2-11E1-9073-0E8AC72EXXXX */ +#define ATT_UUID_WICENTRIC_BASE 0x2E, 0xC7, 0x8A, 0x0E, 0x73, 0x90, \ + 0xE1, 0x11, 0xC2, 0x08, 0x60, 0x27, 0x26, 0xE0 + +/*! Macro for building Wicentric UUIDs */ +#define ATT_UUID_WICENTRIC_BUILD(part) UINT16_TO_BYTES(part), ATT_UUID_WICENTRIC_BASE + +/*! Partial proprietary service UUIDs */ +#define ATT_UUID_P1_SERVICE_PART 0x1001 /*! Proprietary service P1 */ + +/*! Partial proprietary characteristic UUIDs */ +#define ATT_UUID_D1_DATA_PART 0x0001 /*! Proprietary data D1 */ + +/* Proprietary services */ +#define ATT_UUID_P1_SERVICE ATT_UUID_WICENTRIC_BUILD(ATT_UUID_P1_SERVICE_PART) + +/* Proprietary characteristics */ +#define ATT_UUID_D1_DATA ATT_UUID_WICENTRIC_BUILD(ATT_UUID_D1_DATA_PART) + +/************************************************************************************************** + Global Variables +**************************************************************************************************/ + +/*! Service UUIDs */ +extern const uint8_t attGapSvcUuid[ATT_16_UUID_LEN]; /*! Generic Access Profile Service */ +extern const uint8_t attGattSvcUuid[ATT_16_UUID_LEN]; /*! Generic Attribute Profile Service */ +extern const uint8_t attIasSvcUuid[ATT_16_UUID_LEN]; /*! Immediate Alert Service */ +extern const uint8_t attLlsSvcUuid[ATT_16_UUID_LEN]; /*! Link Loss Service */ +extern const uint8_t attTpsSvcUuid[ATT_16_UUID_LEN]; /*! Tx Power Service */ +extern const uint8_t attCtsSvcUuid[ATT_16_UUID_LEN]; /*! Current Time Service */ +extern const uint8_t attRtusSvcUuid[ATT_16_UUID_LEN]; /*! Reference Time Update Service */ +extern const uint8_t attNdcsSvcUuid[ATT_16_UUID_LEN]; /*! Next DST Change Service */ +extern const uint8_t attGlsSvcUuid[ATT_16_UUID_LEN]; /*! Glucose Service */ +extern const uint8_t attHtsSvcUuid[ATT_16_UUID_LEN]; /*! Health Thermometer Service */ +extern const uint8_t attDisSvcUuid[ATT_16_UUID_LEN]; /*! Device Information Service */ +extern const uint8_t attNwaSvcUuid[ATT_16_UUID_LEN]; /*! Network Availability Service */ +extern const uint8_t attWdsSvcUuid[ATT_16_UUID_LEN]; /*! Watchdog Service */ +extern const uint8_t attHrsSvcUuid[ATT_16_UUID_LEN]; /*! Heart Rate Service */ +extern const uint8_t attPassSvcUuid[ATT_16_UUID_LEN]; /*! Phone Alert Status Service */ +extern const uint8_t attBasSvcUuid[ATT_16_UUID_LEN]; /*! Battery Service */ +extern const uint8_t attBpsSvcUuid[ATT_16_UUID_LEN]; /*! Blood Pressure Service */ +extern const uint8_t attAnsSvcUuid[ATT_16_UUID_LEN]; /*! Alert Notification Service */ +extern const uint8_t attHidSvcUuid[ATT_16_UUID_LEN]; /*! Human Interface Device Service */ +extern const uint8_t attSpsSvcUuid[ATT_16_UUID_LEN]; /*! Scan Parameter Service */ +extern const uint8_t attWssSvcUuid[ATT_16_UUID_LEN]; /*! Weight scale service */ + +/*! GATT UUIDs */ +extern const uint8_t attPrimSvcUuid[ATT_16_UUID_LEN]; /*! Primary Service */ +extern const uint8_t attSecSvcUuid[ATT_16_UUID_LEN]; /*! Secondary Service */ +extern const uint8_t attIncUuid[ATT_16_UUID_LEN]; /*! Include */ +extern const uint8_t attChUuid[ATT_16_UUID_LEN]; /*! Characteristic */ + +/*! Descriptor UUIDs */ +extern const uint8_t attChExtUuid[ATT_16_UUID_LEN]; /*! Characteristic Extended Properties */ +extern const uint8_t attChUserDescUuid[ATT_16_UUID_LEN]; /*! Characteristic User Description */ +extern const uint8_t attCliChCfgUuid[ATT_16_UUID_LEN]; /*! Client Characteristic Configuration */ +extern const uint8_t attSrvChCfgUuid[ATT_16_UUID_LEN]; /*! Server Characteristic Configuration */ +extern const uint8_t attChPresFmtUuid[ATT_16_UUID_LEN]; /*! Characteristic Presentation Format */ +extern const uint8_t attAggFmtUuid[ATT_16_UUID_LEN]; /*! Characteristic Aggregate Format */ +extern const uint8_t attValRangeUuid[ATT_16_UUID_LEN]; /*! Valid Range */ +extern const uint8_t attHidRimUuid[ATT_16_UUID_LEN]; /*! HID Report ID Mapping */ + +/*! Characteristic UUIDs */ +extern const uint8_t attDnChUuid[ATT_16_UUID_LEN]; /*! Device Name */ +extern const uint8_t attApChUuid[ATT_16_UUID_LEN]; /*! Appearance */ +extern const uint8_t attPpfChUuid[ATT_16_UUID_LEN]; /*! Peripheral Privacy Flag */ +extern const uint8_t attRaChUuid[ATT_16_UUID_LEN]; /*! Reconnection Address */ +extern const uint8_t attPpcpChUuid[ATT_16_UUID_LEN]; /*! Peripheral Preferred Connection Parameters */ +extern const uint8_t attScChUuid[ATT_16_UUID_LEN]; /*! Service Changed */ +extern const uint8_t attAlChUuid[ATT_16_UUID_LEN]; /*! Alert Level */ +extern const uint8_t attTxpChUuid[ATT_16_UUID_LEN]; /*! Tx Power Level */ +extern const uint8_t attDtChUuid[ATT_16_UUID_LEN]; /*! Date Time */ +extern const uint8_t attDwChUuid[ATT_16_UUID_LEN]; /*! Day of Week */ +extern const uint8_t attDdtChUuid[ATT_16_UUID_LEN]; /*! Day Date Time */ +extern const uint8_t attEt100ChUuid[ATT_16_UUID_LEN]; /*! Exact Time 100 */ +extern const uint8_t attEt256ChUuid[ATT_16_UUID_LEN]; /*! Exact Time 256 */ +extern const uint8_t attDstoChUuid[ATT_16_UUID_LEN]; /*! DST Offset */ +extern const uint8_t attTzChUuid[ATT_16_UUID_LEN]; /*! Time Zone */ +extern const uint8_t attLtiChUuid[ATT_16_UUID_LEN]; /*! Local Time Information */ +extern const uint8_t attStzChUuid[ATT_16_UUID_LEN]; /*! Secondary Time Zone */ +extern const uint8_t attTdstChUuid[ATT_16_UUID_LEN]; /*! Time with DST */ +extern const uint8_t attTaChUuid[ATT_16_UUID_LEN]; /*! Time Accuracy */ +extern const uint8_t attTsChUuid[ATT_16_UUID_LEN]; /*! Time Source */ +extern const uint8_t attRtiChUuid[ATT_16_UUID_LEN]; /*! Reference Time Information */ +extern const uint8_t attTbChUuid[ATT_16_UUID_LEN]; /*! Time Broadcast */ +extern const uint8_t attTucpChUuid[ATT_16_UUID_LEN]; /*! Time Update Control Point */ +extern const uint8_t attTusChUuid[ATT_16_UUID_LEN]; /*! Time Update State */ +extern const uint8_t attGlmChUuid[ATT_16_UUID_LEN]; /*! Glucose Measurement */ +extern const uint8_t attBlChUuid[ATT_16_UUID_LEN]; /*! Battery Level */ +extern const uint8_t attBpsChUuid[ATT_16_UUID_LEN]; /*! Battery Power State */ +extern const uint8_t attBlsChUuid[ATT_16_UUID_LEN]; /*! Battery Level State */ +extern const uint8_t attTmChUuid[ATT_16_UUID_LEN]; /*! Temperature Measurement */ +extern const uint8_t attTtChUuid[ATT_16_UUID_LEN]; /*! Temperature Type */ +extern const uint8_t attItChUuid[ATT_16_UUID_LEN]; /*! Intermediate Temperature */ +extern const uint8_t attTcelChUuid[ATT_16_UUID_LEN]; /*! Temperature Celsius */ +extern const uint8_t attTfahChUuid[ATT_16_UUID_LEN]; /*! Temperature Fahrenheit */ +extern const uint8_t attMiChUuid[ATT_16_UUID_LEN]; /*! Measurement Interval */ +extern const uint8_t attHbrpChUuid[ATT_16_UUID_LEN]; /*! HID Boot Report Mapping */ +extern const uint8_t attSidChUuid[ATT_16_UUID_LEN]; /*! System ID */ +extern const uint8_t attMnsChUuid[ATT_16_UUID_LEN]; /*! Model Number String */ +extern const uint8_t attSnsChUuid[ATT_16_UUID_LEN]; /*! Serial Number String */ +extern const uint8_t attFrsChUuid[ATT_16_UUID_LEN]; /*! Firmware Revision String */ +extern const uint8_t attHrsChUuid[ATT_16_UUID_LEN]; /*! Hardware Revision String */ +extern const uint8_t attSrsChUuid[ATT_16_UUID_LEN]; /*! Software Revision String */ +extern const uint8_t attMfnsChUuid[ATT_16_UUID_LEN]; /*! Manufacturer Name String */ +extern const uint8_t attIeeeChUuid[ATT_16_UUID_LEN]; /*! IEEE 11073-20601 Regulatory Certification Data List */ +extern const uint8_t attCtChUuid[ATT_16_UUID_LEN]; /*! Current Time */ +extern const uint8_t attElChUuid[ATT_16_UUID_LEN]; /*! Elevation */ +extern const uint8_t attLatChUuid[ATT_16_UUID_LEN]; /*! Latitude */ +extern const uint8_t attLongChUuid[ATT_16_UUID_LEN]; /*! Longitude */ +extern const uint8_t attP2dChUuid[ATT_16_UUID_LEN]; /*! Position 2D */ +extern const uint8_t attP3dChUuid[ATT_16_UUID_LEN]; /*! Position 3D */ +extern const uint8_t attVidChUuid[ATT_16_UUID_LEN]; /*! Vendor ID */ +extern const uint8_t attPidChUuid[ATT_16_UUID_LEN]; /*! Product ID */ +extern const uint8_t attHidvChUuid[ATT_16_UUID_LEN]; /*! HID Version */ +extern const uint8_t attGlmcChUuid[ATT_16_UUID_LEN]; /*! Glucose Measurement Context */ +extern const uint8_t attBpmChUuid[ATT_16_UUID_LEN]; /*! Blood Pressure Measurement */ +extern const uint8_t attIcpChUuid[ATT_16_UUID_LEN]; /*! Intermediate Cuff Pressure */ +extern const uint8_t attHrmChUuid[ATT_16_UUID_LEN]; /*! Heart Rate Measurement */ +extern const uint8_t attBslChUuid[ATT_16_UUID_LEN]; /*! Body Sensor Location */ +extern const uint8_t attHrcpChUuid[ATT_16_UUID_LEN]; /*! Heart Rate Control Point */ +extern const uint8_t attRemChUuid[ATT_16_UUID_LEN]; /*! Removable */ +extern const uint8_t attSrChUuid[ATT_16_UUID_LEN]; /*! Service Required */ +extern const uint8_t attStcChUuid[ATT_16_UUID_LEN]; /*! Scientific Temperature in Celsius */ +extern const uint8_t attStrChUuid[ATT_16_UUID_LEN]; /*! String */ +extern const uint8_t attNwaChUuid[ATT_16_UUID_LEN]; /*! Network Availability */ +extern const uint8_t attAsChUuid[ATT_16_UUID_LEN]; /*! Alert Status */ +extern const uint8_t attRcpChUuid[ATT_16_UUID_LEN]; /*! Ringer Control Point */ +extern const uint8_t attRsChUuid[ATT_16_UUID_LEN]; /*! Ringer Setting */ +extern const uint8_t attAcbmChUuid[ATT_16_UUID_LEN]; /*! Alert Category ID Bit Mask */ +extern const uint8_t attAcChUuid[ATT_16_UUID_LEN]; /*! Alert Category ID */ +extern const uint8_t attAncpChUuid[ATT_16_UUID_LEN]; /*! Alert Notification Control Point */ +extern const uint8_t attUasChUuid[ATT_16_UUID_LEN]; /*! Unread Alert Status */ +extern const uint8_t attNaChUuid[ATT_16_UUID_LEN]; /*! New Alert */ +extern const uint8_t attSnacChUuid[ATT_16_UUID_LEN]; /*! Supported New Alert Category */ +extern const uint8_t attSuacChUuid[ATT_16_UUID_LEN]; /*! Supported Unread Alert Category */ +extern const uint8_t attBpfChUuid[ATT_16_UUID_LEN]; /*! Blood Pressure Feature */ +extern const uint8_t attHidiChUuid[ATT_16_UUID_LEN]; /*! HID Information */ +extern const uint8_t attRmChUuid[ATT_16_UUID_LEN]; /*! Report Map */ +extern const uint8_t attHidcpChUuid[ATT_16_UUID_LEN]; /*! HID Control Point */ +extern const uint8_t attRepChUuid[ATT_16_UUID_LEN]; /*! Report */ +extern const uint8_t attPmChUuid[ATT_16_UUID_LEN]; /*! Protocol Mode */ +extern const uint8_t attSiwChUuid[ATT_16_UUID_LEN]; /*! Scan Interval Window */ +extern const uint8_t attPnpChUuid[ATT_16_UUID_LEN]; /*! PnP ID */ +extern const uint8_t attGlfChUuid[ATT_16_UUID_LEN]; /*! Glucose Feature */ +extern const uint8_t attRacpChUuid[ATT_16_UUID_LEN]; /*! Record Access Control Point */ +extern const uint8_t attWmChUuid[ATT_16_UUID_LEN]; /*! Weight measurement */ +extern const uint8_t attWsfChUuid[ATT_16_UUID_LEN]; /*! Weight scale feature */ + +#ifdef __cplusplus +}; +#endif + +#endif /* ATT_UUID_H */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/dm_api.h b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/dm_api.h new file mode 100644 index 00000000000..64ddd6b8155 --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/dm_api.h @@ -0,0 +1,1235 @@ +/*************************************************************************************************/ +/*! + * \file dm_api.h + * + * \brief Device Manager subsystem API. + * + * $Date: 2012-09-11 16:18:57 -0700 (Tue, 11 Sep 2012) $ + * $Revision: 349 $ + * + * Copyright (c) 2009-2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + */ +/*************************************************************************************************/ +#ifndef DM_API_H +#define DM_API_H + +#include "hci_api.h" +#include "cfg_stack.h" +#include "smp_defs.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************************************************** + Macros +**************************************************************************************************/ + +/*! Device role */ +#define DM_ROLE_MASTER HCI_ROLE_MASTER /*! Role is master */ +#define DM_ROLE_SLAVE HCI_ROLE_SLAVE /*! Role is slave */ + +/*! The GAP discovery mode */ +#define DM_DISC_MODE_NONE 0 /*! GAP non-discoverable */ +#define DM_DISC_MODE_LIMITED 1 /*! GAP limited discoverable mode */ +#define DM_DISC_MODE_GENERAL 2 /*! GAP general discoverable mode */ + +/*! The type of connectable or discoverable of advertising */ +#define DM_ADV_CONN_UNDIRECT 0 /*! Connectable undirected advertising */ +#define DM_ADV_CONN_DIRECT 1 /*! Connectable directed advertising */ +#define DM_ADV_DISC_UNDIRECT 2 /*! Discoverable undirected advertising */ +#define DM_ADV_NONCONN_UNDIRECT 3 /*! Non-connectable undirected advertising */ +#define DM_ADV_SCAN_RESPONSE 4 /*! Scan response */ +#define DM_ADV_NONE 255 /*! For internal use only */ + +/*! Whether data is located in the advertising data or the scan response data */ +#define DM_DATA_LOC_ADV 0 /*! Locate data in the advertising data */ +#define DM_DATA_LOC_SCAN 1 /*! Locate data in the scan response data */ + +/*! The scan type */ +#define DM_SCAN_TYPE_PASSIVE 0 /*! Passive scan */ +#define DM_SCAN_TYPE_ACTIVE 1 /*! Active scan */ + +/*! Advertising channel map */ +#define DM_ADV_CHAN_37 HCI_ADV_CHAN_37 /*! Advertising channel 37 */ +#define DM_ADV_CHAN_38 HCI_ADV_CHAN_38 /*! Advertising channel 38 */ +#define DM_ADV_CHAN_39 HCI_ADV_CHAN_39 /*! Advertising channel 39 */ +#define DM_ADV_CHAN_ALL (HCI_ADV_CHAN_37 | HCI_ADV_CHAN_38 | HCI_ADV_CHAN_39) + +/*! The client ID parameter to function DmConnRegister() */ +#define DM_CLIENT_ID_ATT 0 /*! Identifier for attribute protocol, for internal use only */ +#define DM_CLIENT_ID_SMP 1 /*! Identifier for security manager protocol, for internal use only */ +#define DM_CLIENT_ID_DM 2 /*! Identifier for device manager, for internal use only */ +#define DM_CLIENT_ID_APP 3 /*! Identifier for the application */ +#define DM_CLIENT_ID_MAX 4 /*! For internal use only */ + +/*! Unknown connection ID or other error */ +#define DM_CONN_ID_NONE 0 + +/*! The address type */ +#define DM_ADDR_PUBLIC 0 /*! Public address */ +#define DM_ADDR_RANDOM 1 /*! Random address */ + +/*! Advertising data types */ +#define DM_ADV_TYPE_FLAGS 0x01 /*! Flag bits */ +#define DM_ADV_TYPE_16_UUID_PART 0x02 /*! Partial list of 16 bit UUIDs */ +#define DM_ADV_TYPE_16_UUID 0x03 /*! Complete list of 16 bit UUIDs */ +#define DM_ADV_TYPE_128_UUID_PART 0x06 /*! Partial list of 128 bit UUIDs */ +#define DM_ADV_TYPE_128_UUID 0x07 /*! Complete list of 128 bit UUIDs */ +#define DM_ADV_TYPE_SHORT_NAME 0x08 /*! Shortened local name */ +#define DM_ADV_TYPE_LOCAL_NAME 0x09 /*! Complete local name */ +#define DM_ADV_TYPE_TX_POWER 0x0A /*! TX power level */ +#define DM_ADV_TYPE_CONN_INTERVAL 0x12 /*! Slave preferred connection interval */ +#define DM_ADV_TYPE_SIGNED_DATA 0x13 /*! Signed data */ +#define DM_ADV_TYPE_16_SOLICIT 0x14 /*! Service soliticiation list of 16 bit UUIDs */ +#define DM_ADV_TYPE_128_SOLICIT 0x15 /*! Service soliticiation list of 128 bit UUIDs */ +#define DM_ADV_TYPE_SERVICE_DATA 0x16 /*! Service data */ +#define DM_ADV_TYPE_PUBLIC_TARGET 0x17 /*! Public target address */ +#define DM_ADV_TYPE_RANDOM_TARGET 0x18 /*! Random target address */ +#define DM_ADV_TYPE_APPEARANCE 0x19 /*! Device appearance */ +#define DM_ADV_TYPE_MANUFACTURER 0xFF /*! Manufacturer specific data */ + +/*! Bit mask for flags advertising data type */ +#define DM_FLAG_LE_LIMITED_DISC 0x01 /*! Limited discoverable flag */ +#define DM_FLAG_LE_GENERAL_DISC 0x02 /*! General discoverable flag */ +#define DM_FLAG_LE_BREDR_NOT_SUP 0x04 /*! BR/EDR not supported flag */ + +/*! Advertising data element indexes */ +#define DM_AD_LEN_IDX 0 /*! Advertising data element len */ +#define DM_AD_TYPE_IDX 1 /*! Advertising data element type */ +#define DM_AD_DATA_IDX 2 /*! Advertising data element data */ + +/*! Timeouts defined by the GAP specification; in units of milliseconds */ +#define DM_GAP_LIM_ADV_TIMEOUT 180000 /*! Maximum advertising duration in limited discoverable mode */ +#define DM_GAP_GEN_DISC_SCAN_MIN 10240 /*! Minimum scan duration for general discovery */ +#define DM_GAP_LIM_DISC_SCAN_MIN 10240 /*! Minimum scan duration for limited discovery */ +#define DM_GAP_CONN_PARAM_TIMEOUT 30000 /*! Connection parameter update timeout */ +#define DM_GAP_SCAN_FAST_PERIOD 30720 /*! Minimum time to perform scanning when user initiated */ +#define DM_GAP_ADV_FAST_PERIOD 30000 /*! Minimum time to perform advertising when user initiated */ + +/*! + * Advertising, scanning, and connection parameters defined in the GAP specification. + * In units of 625 microseconds. + */ +#define DM_GAP_SCAN_FAST_INT_MIN 48 /*! Minimum scan interval when user initiated */ +#define DM_GAP_SCAN_FAST_INT_MAX 96 /*! Maximum scan interval when user initiated */ +#define DM_GAP_SCAN_FAST_WINDOW 48 /*! Scan window when user initiated */ +#define DM_GAP_SCAN_SLOW_INT_1 2048 /*! Scan interval 1 when background scannning */ +#define DM_GAP_SCAN_SLOW_WINDOW_1 18 /*! Scan window 1 when background scanning */ +#define DM_GAP_SCAN_SLOW_INT_2 4096 /*! Scan interval 2 when background scannning */ +#define DM_GAP_SCAN_SLOW_WINDOW_2 18 /*! Scan window 2 when background scanning */ +#define DM_GAP_ADV_FAST_INT_MIN 48 /*! Minimum advertising interval when user initiated */ +#define DM_GAP_ADV_FAST_INT_MAX 96 /*! Maximum advertising interval when user initiated */ +#define DM_GAP_ADV_SLOW_INT_MIN 1600 /*! Minimum advertising interval when background advertising */ +#define DM_GAP_ADV_SLOW_INT_MAX 1920 /*! Maximum advertising interval when background advertising */ + +/*! GAP connection establishment latency */ +#define DM_GAP_CONN_EST_LATENCY 0 + +/*! GAP connection intervals in 1.25ms units */ +#define DM_GAP_INITIAL_CONN_INT_MIN 24 /*! Minimum initial connection interval */ +#define DM_GAP_INITIAL_CONN_INT_MAX 40 /*! Maximum initial onnection interval */ + +/*! GAP connection establishment minimum and maximum connection event lengths */ +#define DM_GAP_CONN_EST_MIN_CE_LEN 0 +#define DM_GAP_CONN_EST_MAX_CE_LEN 0 + +/*! GAP peripheral privacy flag characteristic values */ +#define DM_GAP_PRIV_DISABLED 0 +#define DM_GAP_PRIV_ENABLED 1 + +/*! Connection establishment supervision timeout default, in 10ms units */ +#define DM_DEFAULT_EST_SUP_TIMEOUT 2000 + +/*! Pairing authentication/security properties bit mask */ +#define DM_AUTH_BOND_FLAG SMP_AUTH_BOND_FLAG /*! Bonding requested */ +#define DM_AUTH_MITM_FLAG SMP_AUTH_MITM_FLAG /*! MITM (authenticated pairing) requested */ + +/*! Key distribution bit mask */ +#define DM_KEY_DIST_LTK SMP_KEY_DIST_ENC /*! Distribute LTK used for encryption */ +#define DM_KEY_DIST_IRK SMP_KEY_DIST_ID /*! Distribute IRK used for privacy */ +#define DM_KEY_DIST_CSRK SMP_KEY_DIST_SIGN /*! Distribute CSRK used for signed data */ + +/*! Key type used in DM_SEC_KEY_IND */ +#define DM_KEY_LOCAL_LTK 0x01 /*! LTK generated locally for this device */ +#define DM_KEY_PEER_LTK 0x02 /*! LTK received from peer device */ +#define DM_KEY_IRK 0x04 /*! IRK and identity info of peer device */ +#define DM_KEY_CSRK 0x08 /*! CSRK of peer device */ + +/*! Base value for HCI error status values for DM_SEC_PAIR_CMPL_IND */ +#define DM_SEC_HCI_ERR_BASE 0x20 + +#define DM_SEC_LEVEL_NONE 0 /*! Connection has no security */ +#define DM_SEC_LEVEL_ENC 1 /*! Connection is encrypted with unauthenticated key */ +#define DM_SEC_LEVEL_ENC_AUTH 2 /*! Connection is encrypted with authenticated key */ + +/*! Random address types */ +#define DM_RAND_ADDR_STATIC 0xC0 /*! Static address */ +#define DM_RAND_ADDR_RESOLV 0x80 /*! Resolvable private address */ +#define DM_RAND_ADDR_NONRESOLV 0x00 /*! Non-resolvable private address */ + +/*! Get the type of random address */ +#define DM_RAND_ADDR_GET(addr) ((addr)[5] & 0xC0) + +/*! Set the type of random address */ +#define DM_RAND_ADDR_SET(addr, type) {(addr)[5] = ((addr)[5] & 0x3F) | (type);} + +/*! Connection busy/idle state */ +#define DM_CONN_IDLE 0 /*! Connection is idle */ +#define DM_CONN_BUSY 1 /*! Connection is busy */ + +/*! Connection busy/idle state bitmask */ +#define DM_IDLE_SMP_PAIR 0x0001 /*! SMP pairing in progress */ +#define DM_IDLE_DM_ENC 0x0002 /*! DM Encryption setup in progress */ +#define DM_IDLE_ATTS_DISC 0x0004 /*! ATTS service discovery in progress */ +#define DM_IDLE_APP_DISC 0x0008 /*! App framework service discovery in progress */ +#define DM_IDLE_USER_1 0x0010 /*! For use by user application */ +#define DM_IDLE_USER_2 0x0020 /*! For use by user application */ +#define DM_IDLE_USER_3 0x0040 /*! For use by user application */ +#define DM_IDLE_USER_4 0x0080 /*! For use by user application */ + +/*! DM callback events */ +#define DM_CBACK_START 0x20 /*! DM callback event starting value */ +enum +{ + DM_RESET_CMPL_IND = DM_CBACK_START, /*! Reset complete */ + DM_ADV_START_IND, /*! Advertising started */ + DM_ADV_STOP_IND, /*! Advertising stopped */ + DM_ADV_NEW_ADDR_IND, /*! New resolvable address has been generated */ + DM_SCAN_START_IND, /*! Scanning started */ + DM_SCAN_STOP_IND, /*! Scanning stopped */ + DM_SCAN_REPORT_IND, /*! Scan data received from peer device */ + DM_CONN_OPEN_IND, /*! Connection opened */ + DM_CONN_CLOSE_IND, /*! Connection closed */ + DM_CONN_UPDATE_IND, /*! Connection update complete */ + DM_SEC_PAIR_CMPL_IND, /*! Pairing completed successfully */ + DM_SEC_PAIR_FAIL_IND, /*! Pairing failed or other security failure */ + DM_SEC_ENCRYPT_IND, /*! Connection encrypted */ + DM_SEC_ENCRYPT_FAIL_IND, /*! Encryption failed */ + DM_SEC_AUTH_REQ_IND, /*! PIN or OOB data requested for pairing */ + DM_SEC_KEY_IND, /*! Security key indication */ + DM_SEC_LTK_REQ_IND, /*! LTK requested for encyption */ + DM_SEC_PAIR_IND, /*! Incoming pairing request from master */ + DM_SEC_SLAVE_REQ_IND, /*! Incoming security request from slave */ + DM_PRIV_RESOLVED_ADDR_IND, /*! Private address resolved */ + DM_HW_ERROR_IND, /*! Hardware Error */ + DM_VENDOR_SPEC_IND, /*! Vendor specific event */ +}; + +#define DM_CBACK_END DM_VENDOR_SPEC_IND /*! DM callback event ending value */ + +/************************************************************************************************** + Data Types +**************************************************************************************************/ + +/*! Connection identifier */ +typedef uint8_t dmConnId_t; + +/*! Configuration structure */ +typedef struct +{ + uint8_t dummy; +} dmCfg_t; + +/*! LTK data type */ +typedef struct +{ + uint8_t key[SMP_KEY_LEN]; + uint8_t rand[SMP_RAND8_LEN]; + uint16_t ediv; +} dmSecLtk_t; + +/*! IRK data type */ +typedef struct +{ + uint8_t key[SMP_KEY_LEN]; + bdAddr_t bdAddr; + uint8_t addrType; +} dmSecIrk_t; + +/*! CSRK data type */ +typedef struct +{ + uint8_t key[SMP_KEY_LEN]; +} dmSecCsrk_t; + +/*! union of key types */ +typedef union +{ + dmSecLtk_t ltk; + dmSecIrk_t irk; + dmSecCsrk_t csrk; +} dmSecKey_t; + +/*! Data type for DM_SEC_PAIR_CMPL_IND */ +typedef struct +{ + wsfMsgHdr_t hdr; /*! Header */ + uint8_t auth; /*! Authentication and bonding flags */ +} dmSecPairCmplIndEvt_t; + +/*! Data type for DM_SEC_ENCRYPT_IND */ +typedef struct +{ + wsfMsgHdr_t hdr; /*! Header */ + bool_t usingLtk; /*! TRUE if connection encrypted with LTK */ +} dmSecEncryptIndEvt_t; + +/*! Data type for DM_SEC_AUTH_REQ_IND */ +typedef struct +{ + wsfMsgHdr_t hdr; /*! Header */ + bool_t oob; /*! Out-of-band data requested */ + bool_t display; /*! TRUE if pin is to be displayed */ +} dmSecAuthReqIndEvt_t; + +/*! Data type for DM_SEC_PAIR_IND */ +typedef struct +{ + wsfMsgHdr_t hdr; /*! Header */ + uint8_t auth; /*! Authentication and bonding flags */ + bool_t oob; /*! Out-of-band pairing data present or not present */ + uint8_t iKeyDist; /*! Initiator key distribution flags */ + uint8_t rKeyDist; /*! Responder key distribution flags */ +} dmSecPairIndEvt_t; + +/*! Data type for DM_SEC_SLAVE_REQ_IND */ +typedef struct +{ + wsfMsgHdr_t hdr; /*! Header */ + uint8_t auth; /*! Authentication and bonding flags */ +} dmSecSlaveIndEvt_t; + +/*! Data type for DM_SEC_KEY_IND */ +typedef struct +{ + wsfMsgHdr_t hdr; /*! Header */ + dmSecKey_t keyData; /*! Key data */ + uint8_t type; /*! Key type */ + uint8_t secLevel; /*! Security level of pairing when key was exchanged */ + uint8_t encKeyLen; /*! Length of encryption key used when data was transferred */ +} dmSecKeyIndEvt_t; + +/*! Data type for DM_ADV_NEW_ADDR_IND */ +typedef struct +{ + wsfMsgHdr_t hdr; /*! Header */ + bdAddr_t addr; /*! New resolvable private address */ + bool_t firstTime; /*! TRUE when address is generated for the first time */ +} dmAdvNewAddrIndEvt_t; + +/*! Union of DM callback event data types */ +typedef union +{ + wsfMsgHdr_t hdr; + hciLeAdvReportEvt_t scanReport; + hciLeConnCmplEvt_t connOpen; + hciLeConnUpdateCmplEvt_t connUpdate; + hciDisconnectCmplEvt_t connClose; + dmSecPairCmplIndEvt_t pairCmpl; + dmSecEncryptIndEvt_t encryptInd; + dmSecAuthReqIndEvt_t authReq; + dmSecPairIndEvt_t pairInd; + dmSecSlaveIndEvt_t slaveInd; + dmSecKeyIndEvt_t keyInd; + hciLeLtkReqEvt_t ltkReqInd; + hciVendorSpecEvt_t vendorSpec; + dmAdvNewAddrIndEvt_t advNewAddr; +} dmEvt_t; + +/*! Callback type */ +typedef void (*dmCback_t)(dmEvt_t *pDmEvt); + +/************************************************************************************************** + Function Declarations +**************************************************************************************************/ + +/*************************************************************************************************/ +/*! + * \fn DmRegister + * + * \brief Register a callback with DM for scan and advertising events. + * + * \param cback Client callback function. + * + * \return None. + */ +/*************************************************************************************************/ +void DmRegister(dmCback_t cback); + +/*************************************************************************************************/ +/*! + * \fn DmFindAdType + * + * \brief Find an advertising data element in the given advertising or scan response data. + * + * \param adType Advertising data element type to find. + * \param dataLen Data length. + * \param pData Pointer to advertising or scan response data. + * + * \return Pointer to the advertising data element byte array or NULL if not found. + */ +/*************************************************************************************************/ +uint8_t *DmFindAdType(uint8_t adType, uint8_t dataLen, uint8_t *pData); + +/*************************************************************************************************/ +/*! + * \fn DmAdvInit + * + * \brief Initialize DM advertising. + * + * \return None. + */ +/*************************************************************************************************/ +void DmAdvInit(void); + +/*************************************************************************************************/ +/*! + * \fn DmAdvStart + * + * \brief Start advertising using the given advertising type and duration. + * + * \param advType Advertising type. + * \param duration The advertising duration, in milliseconds. + * + * \return None. + */ +/*************************************************************************************************/ +void DmAdvStart(uint8_t advType, uint16_t duration); + +/*************************************************************************************************/ +/*! + * \fn DmAdvStop + * + * \brief Stop advertising. + * + * \return None. + */ +/*************************************************************************************************/ +void DmAdvStop(void); + +/*************************************************************************************************/ +/*! + * \fn DmAdvSetInterval + * + * \brief Set the minimum and maximum advertising intervals. + * + * \param intervalMin Minimum advertising interval. + * \param intervalMax Maximum advertising interval. + * + * \return None. + */ +/*************************************************************************************************/ +void DmAdvSetInterval(uint16_t intervalMin, uint16_t intervalMax); + +/*************************************************************************************************/ +/*! + * \fn DmAdvSetChannelMap + * + * \brief Include or exclude certain channels from the advertising channel map. + * + * \param channelMap Advertising channel map. + * + * \return None. + */ +/*************************************************************************************************/ +void DmAdvSetChannelMap(uint8_t channelMap); + +/*************************************************************************************************/ +/*! + * \fn DmAdvSetData + * + * \brief Set the advertising or scan response data to the given data. + * + * \param location Data location. + * \param len Length of the data. Maximum length is 31 bytes. + * \param pData Pointer to the data. + * + * \return None. + */ +/*************************************************************************************************/ +void DmAdvSetData(uint8_t location, uint8_t len, uint8_t *pData); + +/*************************************************************************************************/ +/*! + * \fn DmAdvSetAddrType + * + * \brief Set the local address type used while advertising. This function can be used to + * configure advertising to use a random address. + * + * \param addrType Address type. + * + * \return None. + */ +/*************************************************************************************************/ +void DmAdvSetAddrType(uint8_t addrType); + +/*************************************************************************************************/ +/*! + * \fn DmAdvSetAdValue + * + * \brief Set the value of an advertising data element in the given advertising or + * scan response data. If the element already exists in the data then it is replaced + * with the new value. If the element does not exist in the data it is appended + * to it, space permitting. + * + * \param adType Advertising data element type. + * \param len Length of the value. Maximum length is 29 bytes. + * \param pValue Pointer to the value. + * \param pAdvDataLen Advertising or scan response data length. The new length is returned + * in this parameter. + * \param pAdvData Pointer to advertising or scan response data. + * + * \return TRUE if the element was successfully added to the data, FALSE otherwise. + */ +/*************************************************************************************************/ +bool_t DmAdvSetAdValue(uint8_t adType, uint8_t len, uint8_t *pValue, uint8_t *pAdvDataLen, + uint8_t *pAdvData); + +/*************************************************************************************************/ +/*! + * \fn DmAdvSetName + * + * \brief Set the device name in the given advertising or scan response data. If the + * name can only fit in the data if it is shortened, the name is shortened + * and the AD type is changed to DM_ADV_TYPE_SHORT_NAME. + * + * \param len Length of the name. Maximum length is 29 bytes. + * \param pValue Pointer to the name in UTF-8 format. + * \param pAdvDataLen Advertising or scan response data length. The new length is returned + * in this parameter. + * \param pAdvData Pointer to advertising or scan response data. + * + * \return TRUE if the element was successfully added to the data, FALSE otherwise. + */ +/*************************************************************************************************/ +bool_t DmAdvSetName(uint8_t len, uint8_t *pValue, uint8_t *pAdvDataLen, uint8_t *pAdvData); + +/*************************************************************************************************/ +/*! + * \fn DmAdvPrivInit + * + * \brief Initialize private advertising. + * + * \return None. + */ +/*************************************************************************************************/ +void DmAdvPrivInit(void); + +/*************************************************************************************************/ +/*! + * \fn DmAdvPrivStart + * + * \brief Start using a private resolvable address. + * + * \param changeInterval Interval between automatic address changes, in seconds. + * + * \return None. + */ +/*************************************************************************************************/ +void DmAdvPrivStart(uint16_t changeInterval); + +/*************************************************************************************************/ +/*! + * \fn DmAdvPrivStop + * + * \brief Stop using a private resolvable address. + * + * \return None. + */ +/*************************************************************************************************/ +void DmAdvPrivStop(void); + +/*************************************************************************************************/ +/*! + * \fn DmScanInit + * + * \brief Initialize DM scanning. + * + * \return None. + */ +/*************************************************************************************************/ +void DmScanInit(void); + +/*************************************************************************************************/ +/*! + * \fn DmScanStart + * + * \brief Start scanning. + * + * \param mode Discoverability mode. + * \param scanType Scan type. + * \param filterDup Filter duplicates. Set to TRUE to filter duplicate responses received + * from the same device. Set to FALSE to receive all responses. + * \param duration The scan duration, in milliseconds. If set to zero, scanning will + * continue until DmScanStop() is called. + * + * \return None. + */ +/*************************************************************************************************/ +void DmScanStart(uint8_t mode, uint8_t scanType, bool_t filterDup, uint16_t duration); + +/*************************************************************************************************/ +/*! + * \fn DmScanStop + * + * \brief Stop scanning. + * + * \return None. + */ +/*************************************************************************************************/ +void DmScanStop(void); + +/*************************************************************************************************/ +/*! + * \fn DmScanSetInterval + * + * \brief Set the scan interval and window. + * + * \param scanInterval The scan interval. + * \param scanWindow The scan window. + * + * \return None. + */ +/*************************************************************************************************/ +void DmScanSetInterval(uint16_t scanInterval, uint16_t scanWindow); + +/*************************************************************************************************/ +/*! + * \fn DmScanSetAddrType + * + * \brief Set the local address type used while scanning. This function can be used to + * configure scanning to use a random address. + * + * \param addrType Address type. + * + * \return None. + */ +/*************************************************************************************************/ +void DmScanSetAddrType(uint8_t addrType); + +/*************************************************************************************************/ +/*! + * \fn DmConnInit + * + * \brief Initialize DM connection manager. + * + * \return None. + */ +/*************************************************************************************************/ +void DmConnInit(void); + +/*************************************************************************************************/ +/*! + * \fn DmConnMasterInit + * + * \brief Initialize DM connection manager for operation as master. + * + * \return None. + */ +/*************************************************************************************************/ +void DmConnMasterInit(void); + +/*************************************************************************************************/ +/*! + * \fn DmConnSlaveInit + * + * \brief Initialize DM connection manager for operation as slave. + * + * \return None. + */ +/*************************************************************************************************/ +void DmConnSlaveInit(void); + +/*************************************************************************************************/ +/*! + * \fn DmConnRegister + * + * \brief Register with the DM connection manager. + * + * \param clientId The client identifier. + * \param cback Client callback function. + * + * \return None. + */ +/*************************************************************************************************/ +void DmConnRegister(uint8_t clientId, dmCback_t cback); + +/*************************************************************************************************/ +/*! + * \fn DmConnOpen + * + * \brief Open a connection to a peer device with the given address. + * + * \param clientId The client identifier. + * \param addrType Address type. + * \param pAddr Peer device address. + * + * \return Connection identifier. + */ +/*************************************************************************************************/ +dmConnId_t DmConnOpen(uint8_t clientId, uint8_t addrType, uint8_t *pAddr); + +/*************************************************************************************************/ +/*! + * \fn DmConnClose + * + * \brief Close the connection with the give connection identifier. + * + * \param clientId The client identifier. + * \param connId Connection identifier. + * \param reason Reason connection is being closed. + * + * \return None. + */ +/*************************************************************************************************/ +void DmConnClose(uint8_t clientId, dmConnId_t connId, uint8_t reason); + +/*************************************************************************************************/ +/*! + * \fn DmConnAccept + * + * \brief Accept a connection from the given peer device by initiating directed advertising. + * + * \param clientId The client identifier. + * \param addrType Address type. + * \param pAddr Peer device address. + * + * \return Connection identifier. + */ +/*************************************************************************************************/ +dmConnId_t DmConnAccept(uint8_t clientId, uint8_t addrType, uint8_t *pAddr); + +/*************************************************************************************************/ +/*! + * \fn DmConnUpdate + * + * \brief Update the connection parameters of an open connection + * + * \param connId Connection identifier. + * \param pConnSpec Connection specification. + * + * \return None. + */ +/*************************************************************************************************/ +void DmConnUpdate(dmConnId_t connId, hciConnSpec_t *pConnSpec); + +/*************************************************************************************************/ +/*! + * \fn DmConnSetScanInterval + * + * \brief Set the scan interval and window for created connections created with DmConnOpen(). + * + * \param scanInterval The scan interval. + * \param scanWindow The scan window. + * + * \return None. + */ +/*************************************************************************************************/ +void DmConnSetScanInterval(uint16_t scanInterval, uint16_t scanWindow); + +/*************************************************************************************************/ +/*! + * \fn DmConnSetConnSpec + * + * \brief Set the connection specification parameters for connections created with DmConnOpen(). + * + * \param pConnSpec Connection spec parameters. + * + * \return None. + */ +/*************************************************************************************************/ +void DmConnSetConnSpec(hciConnSpec_t *pConnSpec); + +/*************************************************************************************************/ +/*! + * \fn DmConnSetAddrType + * + * \brief Set the local address type used for connections created with DmConnOpen(). + * + * \param addrType Address type. + * + * \return None. + */ +/*************************************************************************************************/ +void DmConnSetAddrType(uint8_t addrType); + +/*************************************************************************************************/ +/*! + * \fn DmConnSetIdle + * + * \brief Configure a bit in the connection idle state mask as busy or idle. + * + * \param connId Connection identifier. + * \param idleMask Bit in the idle state mask to configure. + * \param idle DM_CONN_BUSY or DM_CONN_IDLE. + * + * \return None. + */ +/*************************************************************************************************/ +void DmConnSetIdle(dmConnId_t connId, uint16_t idleMask, uint8_t idle); + +/*************************************************************************************************/ +/*! + * \fn DmConnCheckIdle + * + * \brief Check if a connection is idle. + * + * \param connId Connection identifier. + * + * \return Zero if connection is idle, nonzero if busy. + */ +/*************************************************************************************************/ +uint16_t DmConnCheckIdle(dmConnId_t connId); + +/*************************************************************************************************/ +/*! + * \fn DmDevReset + * + * \brief Reset the device. + * + * \return None. + */ +/*************************************************************************************************/ +void DmDevReset(void); + +/*************************************************************************************************/ +/*! + * \fn DmDevRole + * + * \brief Return the device role indicating master or slave. + * + * \return Device role. + */ +/*************************************************************************************************/ +uint8_t DmDevRole(void); + +/*************************************************************************************************/ +/*! + * \fn DmDevSetRandAddr + * + * \brief Set the random address to be used by the local device. + * + * \param pAddr Random address. + * + * \return None. + */ +/*************************************************************************************************/ +void DmDevSetRandAddr(uint8_t *pAddr); + +/*************************************************************************************************/ +/*! + * \fn DmDevWhiteListAdd + * + * \brief Add a peer device to the white list. Note that this function cannot be called + * while advertising, scanning, or connecting with white list filtering active. + * + * \param addrType Address type. + * \param pAddr Peer device address. + * + * \return None. + */ +/*************************************************************************************************/ +void DmDevWhiteListAdd(uint8_t addrType, uint8_t *pAddr); + +/*************************************************************************************************/ +/*! + * \fn DmDevWhiteListRemove + * + * \brief Remove a peer device from the white list. Note that this function cannot be called + * while advertising, scanning, or connecting with white list filtering active. + * + * \param addrType Address type. + * \param pAddr Peer device address. + * + * \return None. + */ +/*************************************************************************************************/ +void DmDevWhiteListRemove(uint8_t addrType, uint8_t *pAddr); + +/*************************************************************************************************/ +/*! + * \fn DmDevWhiteListClear + * + * \brief Clear the white list. Note that this function cannot be called while + * advertising, scanning, or connecting with white list filtering active. + * + * \return None. + */ +/*************************************************************************************************/ +void DmDevWhiteListClear(void); + +/*************************************************************************************************/ +/*! + * \fn DmDevVsInit + * + * \brief Vendor-specific controller initialization function. + * + * \param param Vendor-specific parameter. + * + * \return None. + */ +/*************************************************************************************************/ +void DmDevVsInit(uint8_t param); + +/*************************************************************************************************/ +/*! + * \fn DmSecInit + * + * \brief Initialize DM security. + * + * \return None. + */ +/*************************************************************************************************/ +void DmSecInit(void); + +/*************************************************************************************************/ +/*! + * \fn DmSecPairReq + * + * \brief This function is called by a master device to initiate pairing. + * + * \param connId DM connection ID. + * \param oob Out-of-band pairing data present or not present. + * \param auth Authentication and bonding flags. + * \param iKeyDist Initiator key distribution flags. + * \param rKeyDist Responder key distribution flags. + * + * \return None. + */ +/*************************************************************************************************/ +void DmSecPairReq(dmConnId_t connId, bool_t oob, uint8_t auth, uint8_t iKeyDist, uint8_t rKeyDist); + +/*************************************************************************************************/ +/*! + * \fn DmSecPairRsp + * + * \brief This function is called by a slave device to proceed with pairing after a + * DM_SEC_PAIR_IND event is received. + * + * \param connId DM connection ID. + * \param oob Out-of-band pairing data present or not present. + * \param auth Authentication and bonding flags. + * \param iKeyDist Initiator key distribution flags. + * \param rKeyDist Responder key distribution flags. + * + * \return None. + */ +/*************************************************************************************************/ +void DmSecPairRsp(dmConnId_t connId, bool_t oob, uint8_t auth, uint8_t iKeyDist, uint8_t rKeyDist); + +/*************************************************************************************************/ +/*! + * \fn DmSecCancelReq + * + * \brief This function is called to cancel the pairing process. + * + * \param connId DM connection ID. + * \param reason Failure reason. + * + * \return None. + */ +/*************************************************************************************************/ +void DmSecCancelReq(dmConnId_t connId, uint8_t reason); + +/*************************************************************************************************/ +/*! + * \fn DmSecAuthRsp + * + * \brief This function is called in response to a DM_SEC_AUTH_REQ_IND event to provide + * PIN or OOB data during pairing. + * + * \param connId DM connection ID. + * \param authDataLen Length of PIN or OOB data. + * \param pAuthData pointer to PIN or OOB data. + * + * \return None. + */ +/*************************************************************************************************/ +void DmSecAuthRsp(dmConnId_t connId, uint8_t authDataLen, uint8_t *pAuthData); + +/*************************************************************************************************/ +/*! + * \fn DmSecSlaveReq + * + * \brief This function is called by a slave device to request that the master initiates + * pairing or link encryption. + * + * \param connId DM connection ID. + * \param auth Authentication flags. + * + * \return None. + */ +/*************************************************************************************************/ +void DmSecSlaveReq(dmConnId_t connId, uint8_t auth); + +/*************************************************************************************************/ +/*! + * \fn DmSecEncryptReq + * + * \brief This function is called by a master device to initiate link encryption. + * + * \param connId DM connection ID. + * \param secLevel Security level of pairing when LTK was exchanged. + * \param pLtk Pointer to LTK parameter structure. + * + * \return None. + */ +/*************************************************************************************************/ +void DmSecEncryptReq(dmConnId_t connId, uint8_t secLevel, dmSecLtk_t *pLtk); + +/*************************************************************************************************/ +/*! + * \fn DmSecLtkRsp + * + * \brief This function is called by a slave in response to a DM_SEC_LTK_REQ_IND event + * to provide the long term key used for encryption. + * + * \param connId DM connection ID. + * \param keyFound TRUE if key found. + * \param secLevel Security level of pairing when key was exchanged. + * \param pKey Pointer to the key, if found. + * + * \return None. + */ +/*************************************************************************************************/ +void DmSecLtkRsp(dmConnId_t connId, bool_t keyFound, uint8_t secLevel, uint8_t *pKey); + +/*************************************************************************************************/ +/*! + * \fn DmSecSetLocalCsrk + * + * \brief This function sets the local CSRK used by the device. + * + * \param pCsrk Pointer to CSRK. + * + * \return None. + */ +/*************************************************************************************************/ +void DmSecSetLocalCsrk(uint8_t *pCsrk); + +/*************************************************************************************************/ +/*! + * \fn DmSecSetLocalIrk + * + * \brief This function sets the local IRK used by the device. + * + * \param pCsrk Pointer to IRK. + * + * \return None. + */ +/*************************************************************************************************/ +void DmSecSetLocalIrk(uint8_t *pIrk); + +/*************************************************************************************************/ +/*! + * \fn DmPrivInit + * + * \brief Initialize DM privacy module. + * + * \return None. + */ +/*************************************************************************************************/ +void DmPrivInit(void); + +/*************************************************************************************************/ +/*! + * \fn DmPrivResolveAddr + * + * \brief Resolve a private resolvable address. When complete the client's callback function + * is called with a DM_PRIV_RESOLVED_ADDR_IND event. The client must wait to receive + * this event before executing this function again. + * + * \param pAddr Peer device address. + * \param pIrk The peer's identity resolving key. + * \param param Client-defined parameter returned with callback event. + * + * \return None. + */ +/*************************************************************************************************/ +void DmPrivResolveAddr(uint8_t *pAddr, uint8_t *pIrk, uint16_t param); + +/*************************************************************************************************/ +/*! + * \fn DmL2cConnUpdateCnf + * + * \brief For internal use only. L2C calls this function to send the result of an L2CAP + * connection update response to DM. + * + * \param handle Connection handle. + * \param reason Connection update response reason code. + * \return None. + */ +/*************************************************************************************************/ +void DmL2cConnUpdateCnf(uint16_t handle, uint16_t reason); + +/*************************************************************************************************/ +/*! + * \fn DmL2cConnUpdateInd + * + * \brief For internal use only. L2C calls this function when it receives a connection update + * request from a peer device. + * + * \param identifier Identifier value. + * \param handle Connection handle. + * \param pConnSpec Connection spec parameters. + * \return None. + */ +/*************************************************************************************************/ +void DmL2cConnUpdateInd(uint8_t identifier, uint16_t handle, hciConnSpec_t *pConnSpec); + +/*************************************************************************************************/ +/*! + * \fn DmConnIdByHandle + * + * \brief For internal use only. Find the connection ID with matching handle. + * + * \param handle Handle to find. + * + * \return Connection ID or DM_CONN_ID_NONE if error. + */ +/*************************************************************************************************/ +dmConnId_t DmConnIdByHandle(uint16_t handle); + +/*************************************************************************************************/ +/*! + * \fn DmConnInUse + * + * \brief For internal use only. Return TRUE if the connection is in use. + * + * \param connId Connection ID. + * + * \return TRUE if the connection is in use, FALSE otherwise. + */ +/*************************************************************************************************/ +bool_t DmConnInUse(dmConnId_t connId); + +/*************************************************************************************************/ +/*! + * \fn DmConnPeerAddrType + * + * \brief For internal use only. Return the peer address type. + * + * \param connId Connection ID. + * + * \return Peer address type. + */ +/*************************************************************************************************/ +uint8_t DmConnPeerAddrType(dmConnId_t connId); + +/*************************************************************************************************/ +/*! + * \fn DmConnPeerAddr + * + * \brief For internal use only. Return the peer device address. + * + * \param connId Connection ID. + * + * \return Pointer to peer device address. + */ +/*************************************************************************************************/ +uint8_t *DmConnPeerAddr(dmConnId_t connId); + +/*************************************************************************************************/ +/*! + * \fn DmConnLocalAddrType + * + * \brief For internal use only. Return the local address type. + * + * \param connId Connection ID. + * + * \return Local address type. + */ +/*************************************************************************************************/ +uint8_t DmConnLocalAddrType(dmConnId_t connId); + +/*************************************************************************************************/ +/*! + * \fn DmConnLocalAddr + * + * \brief For internal use only. Return the local address. + * + * \param connId Connection ID. + * + * \return Pointer to local address. + */ +/*************************************************************************************************/ +uint8_t *DmConnLocalAddr(dmConnId_t connId); + +/*************************************************************************************************/ +/*! + * \fn DmConnSecLevel + * + * \brief For internal use only. Return the security level of the connection. + * + * \param connId Connection ID. + * + * \return Security level of the connection. + */ +/*************************************************************************************************/ +uint8_t DmConnSecLevel(dmConnId_t connId); + +/*************************************************************************************************/ +/*! + * \fn DmSmpEncryptReq + * + * \brief For internal use only. This function is called by SMP to request encryption. + * + * \param connId DM connection ID. + * \param secLevel Security level of pairing when key was exchanged. + * \param pKey Pointer to key. + * + * \return None. + */ +/*************************************************************************************************/ +void DmSmpEncryptReq(dmConnId_t connId, uint8_t secLevel, uint8_t *pKey); + +/*************************************************************************************************/ +/*! + * \fn DmSmpCbackExec + * + * \brief For internal use only. Execute DM callback from SMP procedures. + * + * \param pDmEvt Pointer to callback event data. + * + * \return None. + */ +/*************************************************************************************************/ +void DmSmpCbackExec(dmEvt_t *pDmEvt); + +/*************************************************************************************************/ +/*! + * \fn DmSecGetLocalCsrk + * + * \brief For internal use only. This function gets the local CSRK used by the device. + * + * \return Pointer to CSRK. + */ +/*************************************************************************************************/ +uint8_t *DmSecGetLocalCsrk(void); + +/*************************************************************************************************/ +/*! + * \fn DmSecGetLocalIrk + * + * \brief For internal use only. This function gets the local IRK used by the device. + * + * \return Pointer to IRK. + */ +/*************************************************************************************************/ +uint8_t *DmSecGetLocalIrk(void); + +#ifdef __cplusplus +}; +#endif + +#endif /* DM_API_H */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/dm_handler.h b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/dm_handler.h new file mode 100644 index 00000000000..231bbd06a70 --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/dm_handler.h @@ -0,0 +1,67 @@ +/*************************************************************************************************/ +/*! + * \file dm_handler.h + * + * \brief Interface to DM event handler. + * + * $Date: 2012-03-29 13:24:04 -0700 (Thu, 29 Mar 2012) $ + * $Revision: 287 $ + * + * Copyright (c) 2009-2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + */ +/*************************************************************************************************/ +#ifndef DM_HANDLER_H +#define DM_HANDLER_H + +#include "wsf_os.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************************************************** + Function Declarations +**************************************************************************************************/ + +/*************************************************************************************************/ +/*! + * \fn DmHandlerInit + * + * \brief DM handler init function called during system initialization. + * + * \param handlerID WSF handler ID for DM. + * + * \return None. + */ +/*************************************************************************************************/ +void DmHandlerInit(wsfHandlerId_t handlerId); + + +/*************************************************************************************************/ +/*! + * \fn DmHandler + * + * \brief WSF event handler for DM. + * + * \param event WSF event mask. + * \param pMsg WSF message. + * + * \return None. + */ +/*************************************************************************************************/ +void DmHandler(wsfEventMask_t event, wsfMsgHdr_t *pMsg); + +#ifdef __cplusplus +}; +#endif + +#endif /* DM_HANDLER_H */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/hci_api.h b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/hci_api.h new file mode 100644 index 00000000000..a9a89e95048 --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/hci_api.h @@ -0,0 +1,375 @@ +/*************************************************************************************************/ +/*! + * \file hci_api.h + * + * \brief HCI subsystem API. + * + * $Date: 2011-10-14 21:35:03 -0700 (Fri, 14 Oct 2011) $ + * $Revision: 191 $ + * + * Copyright (c) 2009-2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + */ +/*************************************************************************************************/ +#ifndef HCI_API_H +#define HCI_API_H + +#include "wsf_types.h" +#include "hci_defs.h" +#include "wsf_os.h" +#include "bda.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************************************************** + Macros +**************************************************************************************************/ + +/*! Internal event values for the HCI event and sec callbacks */ +#define HCI_RESET_SEQ_CMPL_CBACK_EVT 0 /*! Reset sequence complete */ +#define HCI_LE_CONN_CMPL_CBACK_EVT 1 /*! LE connection complete */ +#define HCI_DISCONNECT_CMPL_CBACK_EVT 2 /*! LE disconnect complete */ +#define HCI_LE_CONN_UPDATE_CMPL_CBACK_EVT 3 /*! LE connection update complete */ +#define HCI_LE_CREATE_CONN_CANCEL_CMD_CMPL_CBACK_EVT 4 /*! LE create connection cancel command complete */ +#define HCI_LE_ADV_REPORT_CBACK_EVT 5 /*! LE advertising report */ +#define HCI_READ_RSSI_CMD_CMPL_CBACK_EVT 6 /*! Read RSSI command complete */ +#define HCI_LE_READ_CHAN_MAP_CMD_CMPL_CBACK_EVT 7 /*! LE Read channel map command complete */ +#define HCI_READ_TX_PWR_LVL_CMD_CMPL_CBACK_EVT 8 /*! Read transmit power level command complete */ +#define HCI_READ_REMOTE_VER_INFO_CMPL_CBACK_EVT 9 /*! Read remote version information complete */ +#define HCI_LE_READ_REMOTE_FEAT_CMPL_CBACK_EVT 10 /*! LE read remote features complete */ +#define HCI_LE_LTK_REQ_REPL_CMD_CMPL_CBACK_EVT 11 /*! LE LTK request reply command complete */ +#define HCI_LE_LTK_REQ_NEG_REPL_CMD_CMPL_CBACK_EVT 12 /*! LE LTK request negative reply command complete */ +#define HCI_ENC_KEY_REFRESH_CMPL_CBACK_EVT 13 /*! Encryption key refresh complete */ +#define HCI_ENC_CHANGE_CBACK_EVT 14 /*! Encryption change */ +#define HCI_LE_LTK_REQ_CBACK_EVT 15 /*! LE LTK request */ +#define HCI_VENDOR_SPEC_CMD_STATUS_CBACK_EVT 16 /*! Vendor specific command status */ +#define HCI_VENDOR_SPEC_CMD_CMPL_CBACK_EVT 17 /*! Vendor specific command complete */ +#define HCI_VENDOR_SPEC_CBACK_EVT 18 /*! Vendor specific */ +#define HCI_HW_ERROR_CBACK_EVT 19 /*! Hardware error */ +#define HCI_LE_ENCRYPT_CMD_CMPL_CBACK_EVT 20 /*! LE encrypt command complete */ +#define HCI_LE_RAND_CMD_CMPL_CBACK_EVT 21 /*! LE rand command complete */ + +/************************************************************************************************** + Data Types +**************************************************************************************************/ + +/*! Connection specification type */ +typedef struct +{ + uint16_t connIntervalMin; + uint16_t connIntervalMax; + uint16_t connLatency; + uint16_t supTimeout; + uint16_t minCeLen; + uint16_t maxCeLen; +} hciConnSpec_t; + +/*! LE connection complete event */ +typedef struct +{ + wsfMsgHdr_t hdr; + uint8_t status; + uint16_t handle; + uint8_t role; + uint8_t addrType; + bdAddr_t peerAddr; + uint16_t connInterval; + uint16_t connLatency; + uint16_t supTimeout; + uint8_t clockAccuracy; +} hciLeConnCmplEvt_t; + +/*! Disconnect complete event */ +typedef struct +{ + wsfMsgHdr_t hdr; + uint8_t status; + uint16_t handle; + uint8_t reason; +} hciDisconnectCmplEvt_t; + +/*! LE connection update complete event */ +typedef struct +{ + wsfMsgHdr_t hdr; + uint8_t status; + uint16_t handle; + uint16_t connInterval; + uint16_t connLatency; + uint16_t supTimeout; +} hciLeConnUpdateCmplEvt_t; + +/*! LE create connection cancel command complete event */ +typedef struct +{ + wsfMsgHdr_t hdr; + uint8_t status; +} hciLeCreateConnCancelCmdCmplEvt_t; + +/*! LE advertising report event */ +typedef struct +{ + wsfMsgHdr_t hdr; + uint8_t *pData; + uint8_t len; + int8_t rssi; + uint8_t eventType; + uint8_t addrType; + bdAddr_t addr; +} hciLeAdvReportEvt_t; + +/*! Read RSSI command complete event */ +typedef struct +{ + wsfMsgHdr_t hdr; + uint8_t status; + uint8_t handle; + int8_t rssi; +} hciReadRssiCmdCmplEvt_t; + +/*! LE Read channel map command complete event */ +typedef struct +{ + wsfMsgHdr_t hdr; + uint8_t status; + uint16_t handle; + uint8_t chanMap[HCI_CHAN_MAP_LEN]; +} hciReadChanMapCmdCmplEvt_t; + +/*! Read transmit power level command complete event */ +typedef struct +{ + wsfMsgHdr_t hdr; + uint8_t status; + uint8_t handle; + int8_t pwrLvl; +} hciReadTxPwrLvlCmdCmplEvt_t; + +/*! Read remote version information complete event */ +typedef struct +{ + wsfMsgHdr_t hdr; + uint8_t status; + uint16_t handle; + uint8_t version; + uint16_t mfrName; + uint16_t subversion; +} hciReadRemoteVerInfoCmplEvt_t; + +/*! LE read remote features complete event */ +typedef struct +{ + wsfMsgHdr_t hdr; + uint8_t status; + uint16_t handle; + uint8_t features[HCI_FEAT_LEN]; +} hciLeReadRemoteFeatCmplEvt_t; + +/*! LE LTK request reply command complete event */ +typedef struct +{ + wsfMsgHdr_t hdr; + uint8_t status; + uint16_t handle; +} hciLeLtkReqReplCmdCmplEvt_t; + +/*! LE LTK request negative reply command complete event */ +typedef struct +{ + wsfMsgHdr_t hdr; + uint8_t status; + uint16_t handle; +} hciLeLtkReqNegReplCmdCmplEvt_t; + +/*! Encryption key refresh complete event */ +typedef struct +{ + wsfMsgHdr_t hdr; + uint8_t status; + uint16_t handle; +} hciEncKeyRefreshCmpl_t; + +/*! Encryption change event */ +typedef struct +{ + wsfMsgHdr_t hdr; + uint8_t status; + uint16_t handle; + uint8_t enabled; +} hciEncChangeEvt_t; + +/*! LE LTK request event */ +typedef struct +{ + wsfMsgHdr_t hdr; + uint16_t handle; + uint8_t randNum[HCI_RAND_LEN]; + uint16_t encDiversifier; +} hciLeLtkReqEvt_t; + +/*! Vendor specific command status event */ +typedef struct +{ + wsfMsgHdr_t hdr; + uint16_t opcode; +} hciVendorSpecCmdStatusEvt_t; + +/*! Vendor specific command complete event */ +typedef struct +{ + wsfMsgHdr_t hdr; + uint16_t opcode; + uint8_t param[1]; +} hciVendorSpecCmdCmplEvt_t; + +/*! Vendor specific event */ +typedef struct +{ + wsfMsgHdr_t hdr; + uint8_t param[1]; +} hciVendorSpecEvt_t; + +/*! Hardware error event */ +typedef struct +{ + wsfMsgHdr_t hdr; + uint8_t code; +} hciHwErrorEvt_t; + +/*! LE encrypt command complete event */ +typedef struct +{ + wsfMsgHdr_t hdr; + uint8_t status; + uint8_t data[HCI_ENCRYPT_DATA_LEN]; +} hciLeEncryptCmdCmplEvt_t; + +/*! LE rand command complete event */ +typedef struct +{ + wsfMsgHdr_t hdr; + uint8_t status; + uint8_t randNum[HCI_RAND_LEN]; +} hciLeRandCmdCmplEvt_t; + + +/*! Union of all event types */ +typedef union +{ + wsfMsgHdr_t hdr; + wsfMsgHdr_t resetSeqCmpl; + hciLeConnCmplEvt_t leConnCmpl; + hciDisconnectCmplEvt_t disconnectCmpl; + hciLeConnUpdateCmplEvt_t leConnUpdateCmpl; + hciLeCreateConnCancelCmdCmplEvt_t leCreateConnCancelCmdCmpl; + hciLeAdvReportEvt_t leAdvReport; + hciReadRssiCmdCmplEvt_t readRssiCmdCmpl; + hciReadChanMapCmdCmplEvt_t readChanMapCmdCmpl; + hciReadTxPwrLvlCmdCmplEvt_t readTxPwrLvlCmdCmpl; + hciReadRemoteVerInfoCmplEvt_t readRemoteVerInfoCmpl; + hciLeReadRemoteFeatCmplEvt_t leReadRemoteFeatCmpl; + hciLeLtkReqReplCmdCmplEvt_t leLtkReqReplCmdCmpl; + hciLeLtkReqNegReplCmdCmplEvt_t leLtkReqNegReplCmdCmpl; + hciEncKeyRefreshCmpl_t encKeyRefreshCmpl; + hciEncChangeEvt_t encChange; + hciLeLtkReqEvt_t leLtkReq; + hciVendorSpecCmdStatusEvt_t vendorSpecCmdStatus; + hciVendorSpecCmdCmplEvt_t vendorSpecCmdCmpl; + hciVendorSpecEvt_t vendorSpec; + hciHwErrorEvt_t hwError; + hciLeEncryptCmdCmplEvt_t leEncryptCmdCmpl; + hciLeRandCmdCmplEvt_t leRandCmdCmpl; +} hciEvt_t; + +/************************************************************************************************** + Callback Function Types +**************************************************************************************************/ + +typedef void (*hciEvtCback_t)(hciEvt_t *pEvent); +typedef void (*hciSecCback_t)(hciEvt_t *pEvent); +typedef void (*hciAclCback_t)(uint8_t *pData); +typedef void (*hciFlowCback_t)(uint16_t handle, bool_t flowDisabled); + +/************************************************************************************************** + Function Declarations +**************************************************************************************************/ + +/*! Initialization, registration, and reset */ +void HciEvtRegister(hciEvtCback_t evtCback); +void HciSecRegister(hciSecCback_t secCback); +void HciAclRegister(hciAclCback_t aclCback, hciFlowCback_t flowCback); +void HciResetSequence(void); +void HciVsInit(uint8_t param); + +/*! Optimization interface */ +uint8_t *HciGetBdAddr(void); +uint8_t HciGetWhiteListSize(void); +int8_t HciGetAdvTxPwr(void); +uint16_t HciGetBufSize(void); +uint8_t HciGetNumBufs(void); +uint8_t *HciGetSupStates(void); +uint8_t HciGetLeSupFeat(void); + +/*! ACL data interface */ +void HciSendAclData(uint8_t *pAclData); + +/*! Command interface */ +void HciDisconnectCmd(uint16_t handle, uint8_t reason); +void HciLeAddDevWhiteListCmd(uint8_t addrType, uint8_t *pAddr); +void HciLeClearWhiteListCmd(void); +void HciLeConnUpdateCmd(uint16_t handle, hciConnSpec_t *pConnSpec); +void HciLeCreateConnCmd(uint16_t scanInterval, uint16_t scanWindow, uint8_t filterPolicy, + uint8_t peerAddrType, uint8_t *pPeerAddr, uint8_t ownAddrType, + hciConnSpec_t *pConnSpec); +void HciLeCreateConnCancelCmd(void); +void HciLeEncryptCmd(uint8_t *pKey, uint8_t *pData); +void HciLeLtkReqNegReplCmd(uint16_t handle); +void HciLeLtkReqReplCmd(uint16_t handle, uint8_t *pKey); +void HciLeRandCmd(void); +void HciLeReadAdvTXPowerCmd(void); +void HciLeReadBufSizeCmd(void); +void HciLeReadChanMapCmd(uint16_t handle); +void HciLeReadLocalSupFeatCmd(void); +void HciLeReadRemoteFeatCmd(uint16_t handle); +void HciLeReadSupStatesCmd(void); +void HciLeReadWhiteListSizeCmd(void); +void HciLeRemoveDevWhiteListCmd(uint8_t addrType, uint8_t *pAddr); +void HciLeSetAdvEnableCmd(uint8_t enable); +void HciLeSetAdvDataCmd(uint8_t len, uint8_t *pData); +void HciLeSetAdvParamCmd(uint16_t advIntervalMin, uint16_t advIntervalMax, uint8_t advType, + uint8_t ownAddrType, uint8_t directAddrType, uint8_t *pDirectAddr, + uint8_t advChanMap, uint8_t advFiltPolicy); +void HciLeSetEventMaskCmd(uint8_t *pLeEventMask); +void HciLeSetHostChanClassCmd(uint8_t *pChanMap); +void HciLeSetRandAddrCmd(uint8_t *pAddr); +void HciLeSetScanEnableCmd(uint8_t enable, uint8_t filterDup); +void HciLeSetScanParamCmd(uint8_t scanType, uint16_t scanInterval, uint16_t scanWindow, + uint8_t ownAddrType, uint8_t scanFiltPolicy); +void HciLeSetScanRespDataCmd(uint8_t len, uint8_t *pData); +void HciLeStartEncryptionCmd(uint16_t handle, uint8_t *pRand, uint16_t diversifier, uint8_t *pKey); +void HciReadBdAddrCmd(void); +void HciReadBufSizeCmd(void); +void HciReadLocalSupFeatCmd(void); +void HciReadLocalVerInfoCmd(void); +void HciReadRemoteVerInfoCmd(uint16_t handle); +void HciReadRssiCmd(uint16_t handle); +void HciReadTxPwrLvlCmd(uint16_t handle, uint8_t type); +void HciResetCmd(void); +void HciSetEventMaskCmd(uint8_t *pEventMask); +void HciVendorSpecificCmd(uint16_t opcode, uint8_t len, uint8_t *pData); + +#ifdef __cplusplus +}; +#endif + +#endif /* HCI_API_H */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/hci_defs.h b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/hci_defs.h new file mode 100644 index 00000000000..acd2c60f7f4 --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/hci_defs.h @@ -0,0 +1,462 @@ +/*************************************************************************************************/ +/*! + * \file hci_defs.h + * + * \brief HCI constants and definitions from the Bluetooth specification. + * + * $Date: 2012-06-26 21:53:53 -0700 (Tue, 26 Jun 2012) $ + * $Revision: 337 $ + * + * Copyright (c) 2009-2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + */ +/*************************************************************************************************/ +#ifndef HCI_DEFS_H +#define HCI_DEFS_H + +#ifdef __cplusplus +extern "C" { +#endif + +/*! Packet definitions */ +#define HCI_CMD_HDR_LEN 3 /*! Command packet header length */ +#define HCI_ACL_HDR_LEN 4 /*! ACL packet header length */ +#define HCI_EVT_HDR_LEN 2 /*! Event packet header length */ +#define HCI_EVT_PARAM_MAX_LEN 255 /*! Maximum length of event packet parameters */ +#define HCI_PB_FLAG_MASK 0x1000 /*! ACL packet boundary flag mask */ +#define HCI_PB_START 0x0000 /*! Packet boundary flag, start */ +#define HCI_PB_CONTINUE 0x1000 /*! Packet boundary flag, continue */ +#define HCI_HANDLE_MASK 0x0FFF /*! Mask for handle bits in ACL packet */ +#define HCI_HANDLE_NONE 0xFFFF /*! Value for invalid handle */ + +/*! Packet types */ +#define HCI_CMD_TYPE 1 /*! HCI command packet */ +#define HCI_ACL_TYPE 2 /*! HCI ACL data packet */ +#define HCI_EVT_TYPE 4 /*! HCI event packet */ + +/*! Error codes */ +#define HCI_SUCCESS 0x00 /*! Success */ +#define HCI_ERR_UNKNOWN_CMD 0x01 /*! Unknown HCI command */ +#define HCI_ERR_UNKNOWN_HANDLE 0x02 /*! Unknown connection identifier */ +#define HCI_ERR_HARDWARE_FAILURE 0x03 /*! Hardware failure */ +#define HCI_ERR_PAGE_TIMEOUT 0x04 /*! Page timeout */ +#define HCI_ERR_AUTH_FAILURE 0x05 /*! Authentication failure */ +#define HCI_ERR_KEY_MISSING 0x06 /*! PIN or key missing */ +#define HCI_ERR_MEMORY_EXCEEDED 0x07 /*! Memory capacity exceeded */ +#define HCI_ERR_CONN_TIMEOUT 0x08 /*! Connection timeout */ +#define HCI_ERR_CONN_LIMIT 0x09 /*! Connection limit exceeded */ +#define HCI_ERR_SYNCH_CONN_LIMIT 0x0A /*! Synchronous connection limit exceeded */ +#define HCI_ERR_ACL_CONN_EXISTS 0x0B /*! ACL connection already exists */ +#define HCI_ERR_CMD_DISALLOWED 0x0C /*! Command disallowed */ +#define HCI_ERR_REJ_RESOURCES 0x0D /*! Connection rejected limited resources */ +#define HCI_ERR_REJ_SECURITY 0x0E /*! Connection rejected security reasons */ +#define HCI_ERR_REJ_BD_ADDR 0x0F /*! Connection rejected unacceptable BD_ADDR */ +#define HCI_ERR_ACCEPT_TIMEOUT 0x10 /*! Connection accept timeout exceeded */ +#define HCI_ERR_UNSUP_FEAT 0x11 /*! Unsupported feature or parameter value */ +#define HCI_ERR_INVALID_PARAM 0x12 /*! Invalid HCI command parameters */ +#define HCI_ERR_REMOTE_TERMINATED 0x13 /*! Remote user terminated connection */ +#define HCI_ERR_REMOTE_RESOURCES 0x14 /*! Remote device low resources */ +#define HCI_ERR_REMOTE_POWER_OFF 0x15 /*! Remote device power off */ +#define HCI_ERR_LOCAL_TERMINATED 0x16 /*! Connection terminated by local host */ +#define HCI_ERR_REPEATED_ATTEMPTS 0x17 /*! Repeated attempts */ +#define HCI_ERR_PAIRING_NOT_ALLOWED 0x18 /*! Pairing not allowed */ +#define HCI_ERR_UNKNOWN_LMP_PDU 0x19 /*! Unknown LMP PDU */ +#define HCI_ERR_UNSUP_REMOTE_FEAT 0x1A /*! Unsupported remote feature */ +#define HCI_ERR_SCO_OFFSET 0x1B /*! SCO offset rejected */ +#define HCI_ERR_SCO_INTERVAL 0x1C /*! SCO interval rejected */ +#define HCI_ERR_SCO_MODE 0x1D /*! SCO air mode rejected */ +#define HCI_ERR_LMP_PARAM 0x1E /*! Invalid LMP parameters */ +#define HCI_ERR_UNSPECIFIED 0x1F /*! Unspecified error */ +#define HCI_ERR_UNSUP_LMP_PARAM 0x20 /*! Unsupported LMP parameter value */ +#define HCI_ERR_ROLE_CHANGE 0x21 /*! Role change not allowed */ +#define HCI_ERR_LL_RESP_TIMEOUT 0x22 /*! LL response timeout */ +#define HCI_ERR_LMP_COLLISION 0x23 /*! LMP error transaction collision */ +#define HCI_ERR_LMP_PDU 0x24 /*! LMP pdu not allowed */ +#define HCI_ERR_ENCRYPT_MODE 0x25 /*! Encryption mode not acceptable */ +#define HCI_ERR_LINK_KEY 0x26 /*! Link key can not be changed */ +#define HCI_ERR_UNSUP_QOS 0x27 /*! Requested qos not supported */ +#define HCI_ERR_INSTANT_PASSED 0x28 /*! Instant passed */ +#define HCI_ERR_UNSUP_UNIT_KEY 0x29 /*! Pairing with unit key not supported */ +#define HCI_ERR_TRANSACT_COLLISION 0x2A /*! Different transaction collision */ +#define HCI_ERR_CHANNEL_CLASS 0x2E /*! Channel classification not supported */ +#define HCI_ERR_MEMORY 0x2F /*! Insufficient security */ +#define HCI_ERR_PARAMETER_RANGE 0x30 /*! Parameter out of mandatory range */ +#define HCI_ERR_ROLE_SWITCH_PEND 0x32 /*! Role switch pending */ +#define HCI_ERR_RESERVED_SLOT 0x34 /*! Reserved slot violation */ +#define HCI_ERR_ROLE_SWITCH 0x35 /*! Role switch failed */ +#define HCI_ERR_INQ_TOO_LARGE 0x36 /*! Extended inquiry response too large */ +#define HCI_ERR_UNSUP_SSP 0x37 /*! Secure simple pairing not supported by host */ +#define HCI_ERR_HOST_BUSY_PAIRING 0x38 /*! Host busy - pairing */ +#define HCI_ERR_NO_CHANNEL 0x39 /*! Connection rejected no suitable channel */ +#define HCI_ERR_CONTROLLER_BUSY 0x3A /*! Controller busy */ +#define HCI_ERR_CONN_INTERVAL 0x3B /*! Unacceptable connection interval */ +#define HCI_ERR_ADV_TIMEOUT 0x3C /*! Directed advertising timeout */ +#define HCI_ERR_MIC_FAILURE 0x3D /*! Connection terminated due to MIC failure */ +#define HCI_ERR_CONN_FAIL 0x3E /*! Connection failed to be established */ +#define HCI_ERR_MAC_CONN_FAIL 0x3F /*! MAC connection failed */ + +/*! Command groups */ +#define HCI_OGF_NOP 0x00 /*! No operation */ +#define HCI_OGF_LINK_CONTROL 0x01 /*! Link control */ +#define HCI_OGF_LINK_POLICY 0x02 /*! Link policy */ +#define HCI_OGF_CONTROLLER 0x03 /*! Controller and baseband */ +#define HCI_OGF_INFORMATIONAL 0x04 /*! Informational parameters */ +#define HCI_OGF_STATUS 0x05 /*! Status parameters */ +#define HCI_OGF_TESTING 0x06 /*! Testing */ +#define HCI_OGF_LE_CONTROLLER 0x08 /*! LE controller */ +#define HCI_OGF_VENDOR_SPEC 0x3F /*! Vendor specific */ + +/*! NOP command */ +#define HCI_OCF_NOP 0x00 + +/*! Link control commands */ +#define HCI_OCF_DISCONNECT 0x06 +#define HCI_OCF_READ_REMOTE_VER_INFO 0x1D + +/*! Link policy commands (none used for LE) */ + +/*! Controller and baseband commands */ +#define HCI_OCF_SET_EVENT_MASK 0x01 +#define HCI_OCF_RESET 0x03 +#define HCI_OCF_READ_TX_PWR_LVL 0x2D +#define HCI_OCF_SET_CONTROLLER_TO_HOST_FC 0x31 +#define HCI_OCF_HOST_BUFFER_SIZE 0x33 +#define HCI_OCF_HOST_NUM_CMPL_PKTS 0x35 + +/*! Informational commands */ +#define HCI_OCF_READ_LOCAL_VER_INFO 0x01 +#define HCI_OCF_READ_LOCAL_SUP_CMDS 0x02 +#define HCI_OCF_READ_LOCAL_SUP_FEAT 0x03 +#define HCI_OCF_READ_BUF_SIZE 0x05 +#define HCI_OCF_READ_BD_ADDR 0x09 + +/*! Status commands */ +#define HCI_OCF_READ_RSSI 0x05 + +/*! LE controller commands */ +#define HCI_OCF_LE_SET_EVENT_MASK 0x01 +#define HCI_OCF_LE_READ_BUF_SIZE 0x02 +#define HCI_OCF_LE_READ_LOCAL_SUP_FEAT 0x03 +#define HCI_OCF_LE_SET_RAND_ADDR 0x05 +#define HCI_OCF_LE_SET_ADV_PARAM 0x06 +#define HCI_OCF_LE_READ_ADV_TX_POWER 0x07 +#define HCI_OCF_LE_SET_ADV_DATA 0x08 +#define HCI_OCF_LE_SET_SCAN_RESP_DATA 0x09 +#define HCI_OCF_LE_SET_ADV_ENABLE 0x0A +#define HCI_OCF_LE_SET_SCAN_PARAM 0x0B +#define HCI_OCF_LE_SET_SCAN_ENABLE 0x0C +#define HCI_OCF_LE_CREATE_CONN 0x0D +#define HCI_OCF_LE_CREATE_CONN_CANCEL 0x0E +#define HCI_OCF_LE_READ_WHITE_LIST_SIZE 0x0F +#define HCI_OCF_LE_CLEAR_WHITE_LIST 0x10 +#define HCI_OCF_LE_ADD_DEV_WHITE_LIST 0x11 +#define HCI_OCF_LE_REMOVE_DEV_WHITE_LIST 0x12 +#define HCI_OCF_LE_CONN_UPDATE 0x13 +#define HCI_OCF_LE_SET_HOST_CHAN_CLASS 0x14 +#define HCI_OCF_LE_READ_CHAN_MAP 0x15 +#define HCI_OCF_LE_READ_REMOTE_FEAT 0x16 +#define HCI_OCF_LE_ENCRYPT 0x17 +#define HCI_OCF_LE_RAND 0x18 +#define HCI_OCF_LE_START_ENCRYPTION 0x19 +#define HCI_OCF_LE_LTK_REQ_REPL 0x1A +#define HCI_OCF_LE_LTK_REQ_NEG_REPL 0x1B +#define HCI_OCF_LE_READ_SUP_STATES 0x1C +#define HCI_OCF_LE_RECEIVER_TEST 0x1D +#define HCI_OCF_LE_TRANSMITTER_TEST 0x1E +#define HCI_OCF_LE_TEST_END 0x1F + +/*! Opcode manipulation macros */ +#define HCI_OPCODE(ogf, ocf) (((ogf) << 10) + (ocf)) +#define HCI_OGF(opcode) ((opcode) >> 10) +#define HCI_OCF(opcode) ((opcode) & 0x03FF) + +/*! Command opcodes */ +#define HCI_OPCODE_NOP HCI_OPCODE(HCI_OGF_NOP, HCI_OCF_NOP) + +#define HCI_OPCODE_DISCONNECT HCI_OPCODE(HCI_OGF_LINK_CONTROL, HCI_OCF_DISCONNECT) +#define HCI_OPCODE_READ_REMOTE_VER_INFO HCI_OPCODE(HCI_OGF_LINK_CONTROL, HCI_OCF_READ_REMOTE_VER_INFO) + +#define HCI_OPCODE_SET_EVENT_MASK HCI_OPCODE(HCI_OGF_CONTROLLER, HCI_OCF_SET_EVENT_MASK) +#define HCI_OPCODE_RESET HCI_OPCODE(HCI_OGF_CONTROLLER, HCI_OCF_RESET) +#define HCI_OPCODE_READ_TX_PWR_LVL HCI_OPCODE(HCI_OGF_CONTROLLER, HCI_OCF_READ_TX_PWR_LVL) +#define HCI_OPCODE_SET_CONTROLLER_TO_HOST_FC HCI_OPCODE(HCI_OGF_CONTROLLER, HCI_OCF_SET_CONTROLLER_TO_HOST_FC) +#define HCI_OPCODE_HOST_BUFFER_SIZE HCI_OPCODE(HCI_OGF_CONTROLLER, HCI_OCF_HOST_BUFFER_SIZE) +#define HCI_OPCODE_HOST_NUM_CMPL_PKTS HCI_OPCODE(HCI_OGF_CONTROLLER, HCI_OCF_HOST_NUM_CMPL_PKTS) + +#define HCI_OPCODE_READ_LOCAL_VER_INFO HCI_OPCODE(HCI_OGF_INFORMATIONAL, HCI_OCF_READ_LOCAL_VER_INFO) +#define HCI_OPCODE_READ_LOCAL_SUP_CMDS HCI_OPCODE(HCI_OGF_INFORMATIONAL, HCI_OCF_READ_LOCAL_SUP_CMDS) +#define HCI_OPCODE_READ_LOCAL_SUP_FEAT HCI_OPCODE(HCI_OGF_INFORMATIONAL, HCI_OCF_READ_LOCAL_SUP_FEAT) +#define HCI_OPCODE_READ_BUF_SIZE HCI_OPCODE(HCI_OGF_INFORMATIONAL, HCI_OCF_READ_BUF_SIZE) +#define HCI_OPCODE_READ_BD_ADDR HCI_OPCODE(HCI_OGF_INFORMATIONAL, HCI_OCF_READ_BD_ADDR) + +#define HCI_OPCODE_READ_RSSI HCI_OPCODE(HCI_OGF_STATUS, HCI_OCF_READ_RSSI) + +#define HCI_OPCODE_LE_SET_EVENT_MASK HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_SET_EVENT_MASK) +#define HCI_OPCODE_LE_READ_BUF_SIZE HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_READ_BUF_SIZE) +#define HCI_OPCODE_LE_READ_LOCAL_SUP_FEAT HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_READ_LOCAL_SUP_FEAT) +#define HCI_OPCODE_LE_SET_RAND_ADDR HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_SET_RAND_ADDR) +#define HCI_OPCODE_LE_SET_ADV_PARAM HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_SET_ADV_PARAM) +#define HCI_OPCODE_LE_READ_ADV_TX_POWER HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_READ_ADV_TX_POWER) +#define HCI_OPCODE_LE_SET_ADV_DATA HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_SET_ADV_DATA) +#define HCI_OPCODE_LE_SET_SCAN_RESP_DATA HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_SET_SCAN_RESP_DATA) +#define HCI_OPCODE_LE_SET_ADV_ENABLE HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_SET_ADV_ENABLE) +#define HCI_OPCODE_LE_SET_SCAN_PARAM HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_SET_SCAN_PARAM) +#define HCI_OPCODE_LE_SET_SCAN_ENABLE HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_SET_SCAN_ENABLE) +#define HCI_OPCODE_LE_CREATE_CONN HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_CREATE_CONN) +#define HCI_OPCODE_LE_CREATE_CONN_CANCEL HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_CREATE_CONN_CANCEL) +#define HCI_OPCODE_LE_READ_WHITE_LIST_SIZE HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_READ_WHITE_LIST_SIZE) +#define HCI_OPCODE_LE_CLEAR_WHITE_LIST HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_CLEAR_WHITE_LIST) +#define HCI_OPCODE_LE_ADD_DEV_WHITE_LIST HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_ADD_DEV_WHITE_LIST) +#define HCI_OPCODE_LE_REMOVE_DEV_WHITE_LIST HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_REMOVE_DEV_WHITE_LIST) +#define HCI_OPCODE_LE_CONN_UPDATE HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_CONN_UPDATE) +#define HCI_OPCODE_LE_SET_HOST_CHAN_CLASS HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_SET_HOST_CHAN_CLASS) +#define HCI_OPCODE_LE_READ_CHAN_MAP HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_READ_CHAN_MAP) +#define HCI_OPCODE_LE_READ_REMOTE_FEAT HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_READ_REMOTE_FEAT) +#define HCI_OPCODE_LE_ENCRYPT HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_ENCRYPT) +#define HCI_OPCODE_LE_RAND HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_RAND) +#define HCI_OPCODE_LE_START_ENCRYPTION HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_START_ENCRYPTION) +#define HCI_OPCODE_LE_LTK_REQ_REPL HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_LTK_REQ_REPL) +#define HCI_OPCODE_LE_LTK_REQ_NEG_REPL HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_LTK_REQ_NEG_REPL) +#define HCI_OPCODE_LE_READ_SUP_STATES HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_READ_SUP_STATES) +#define HCI_OPCODE_LE_RECEIVER_TEST HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_RECEIVER_TEST) +#define HCI_OPCODE_LE_TRANSMITTER_TEST HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_TRANSMITTER_TEST) +#define HCI_OPCODE_LE_TEST_END HCI_OPCODE(HCI_OGF_LE_CONTROLLER, HCI_OCF_LE_TEST_END) + +/*! Command parameter lengths */ +#define HCI_LEN_NOP 0 + +#define HCI_LEN_DISCONNECT 3 +#define HCI_LEN_READ_REMOTE_VER_INFO 2 + +#define HCI_LEN_SET_EVENT_MASK 8 +#define HCI_LEN_RESET 0 +#define HCI_LEN_READ_TX_PWR_LVL 3 +#define HCI_LEN_SET_CONTROLLER_TO_HOST_FC 1 +#define HCI_LEN_HOST_BUFFER_SIZE 8 +#define HCI_LEN_HOST_NUM_CMPL_PKTS 1 + +#define HCI_LEN_READ_LOCAL_VER_INFO 0 +#define HCI_LEN_READ_LOCAL_SUP_CMDS 0 +#define HCI_LEN_READ_LOCAL_SUP_FEAT 0 +#define HCI_LEN_READ_BUF_SIZE 0 +#define HCI_LEN_READ_BD_ADDR 0 + +#define HCI_LEN_READ_RSSI 2 + +#define HCI_LEN_LE_SET_EVENT_MASK 8 +#define HCI_LEN_LE_READ_BUF_SIZE 0 +#define HCI_LEN_LE_READ_LOCAL_SUP_FEAT 0 +#define HCI_LEN_LE_SET_RAND_ADDR 6 +#define HCI_LEN_LE_SET_ADV_PARAM 15 +#define HCI_LEN_LE_READ_ADV_TX_POWER 0 +#define HCI_LEN_LE_SET_ADV_DATA 32 +#define HCI_LEN_LE_SET_SCAN_RESP_DATA 32 +#define HCI_LEN_LE_SET_ADV_ENABLE 1 +#define HCI_LEN_LE_SET_SCAN_PARAM 7 +#define HCI_LEN_LE_SET_SCAN_ENABLE 2 +#define HCI_LEN_LE_CREATE_CONN 25 +#define HCI_LEN_LE_CREATE_CONN_CANCEL 0 +#define HCI_LEN_LE_READ_WHITE_LIST_SIZE 0 +#define HCI_LEN_LE_CLEAR_WHITE_LIST 0 +#define HCI_LEN_LE_ADD_DEV_WHITE_LIST 7 +#define HCI_LEN_LE_REMOVE_DEV_WHITE_LIST 7 +#define HCI_LEN_LE_CONN_UPDATE 14 +#define HCI_LEN_LE_SET_HOST_CHAN_CLASS 5 +#define HCI_LEN_LE_READ_CHAN_MAP 2 +#define HCI_LEN_LE_READ_REMOTE_FEAT 2 +#define HCI_LEN_LE_ENCRYPT 32 +#define HCI_LEN_LE_RAND 0 +#define HCI_LEN_LE_START_ENCRYPTION 28 +#define HCI_LEN_LE_LTK_REQ_REPL 18 +#define HCI_LEN_LE_LTK_REQ_NEG_REPL 2 +#define HCI_LEN_LE_READ_SUP_STATES 0 +#define HCI_LEN_LE_RECEIVER_TEST 1 +#define HCI_LEN_LE_TRANSMITTER_TEST 3 +#define HCI_LEN_LE_TEST_END 0 + +/*! Events */ +#define HCI_DISCONNECT_CMPL_EVT 0x05 +#define HCI_ENC_CHANGE_EVT 0x08 +#define HCI_READ_REMOTE_VER_INFO_CMPL_EVT 0x0C +#define HCI_CMD_CMPL_EVT 0x0E +#define HCI_CMD_STATUS_EVT 0x0F +#define HCI_HW_ERROR_EVT 0x10 +#define HCI_NUM_CMPL_PKTS_EVT 0x13 +#define HCI_DATA_BUF_OVERFLOW_EVT 0x1A +#define HCI_ENC_KEY_REFRESH_CMPL_EVT 0x30 +#define HCI_LE_META_EVT 0x3E +#define HCI_VENDOR_SPEC_EVT 0xFF + +/*! LE Subevents */ +#define HCI_LE_CONN_CMPL_EVT 0x01 +#define HCI_LE_ADV_REPORT_EVT 0x02 +#define HCI_LE_CONN_UPDATE_CMPL_EVT 0x03 +#define HCI_LE_READ_REMOTE_FEAT_CMPL_EVT 0x04 +#define HCI_LE_LTK_REQ_EVT 0x05 + +/*! Event parameter lengths */ +#define HCI_LEN_DISCONNECT_CMPL 4 +#define HCI_LEN_ENC_CHANGE 5 +#define HCI_LEN_LE_CONN_CMPL 19 +#define HCI_LEN_LE_CONN_UPDATE_CMPL 9 +#define HCI_LEN_LE_READ_REMOTE_FEAT_CMPL 12 +#define HCI_LEN_LE_LTK_REQ 13 + +/*! Supported commands */ +#define HCI_SUP_DISCONNECT 0x20 /*! Byte 0 */ +#define HCI_SUP_READ_REMOTE_VER_INFO 0x80 /*! Byte 2 */ +#define HCI_SUP_SET_EVENT_MASK 0x40 /*! Byte 5 */ +#define HCI_SUP_RESET 0x80 /*! Byte 5 */ +#define HCI_SUP_READ_TX_PWR_LVL 0x04 /*! Byte 10 */ +#define HCI_SUP_SET_CONTROLLER_TO_HOST_FC 0x20 /*! Byte 10 */ +#define HCI_SUP_HOST_BUFFER_SIZE 0x40 /*! Byte 10 */ +#define HCI_SUP_HOST_NUM_CMPL_PKTS 0x80 /*! Byte 10 */ +#define HCI_SUP_READ_LOCAL_VER_INFO 0x08 /*! Byte 14 */ +#define HCI_SUP_READ_LOCAL_SUP_FEAT 0x20 /*! Byte 14 */ +#define HCI_SUP_READ_BD_ADDR 0x02 /*! Byte 15 */ +#define HCI_SUP_READ_RSSI 0x20 /*! Byte 15 */ +#define HCI_SUP_LE_SET_EVENT_MASK 0x01 /*! Byte 25 */ +#define HCI_SUP_LE_READ_BUF_SIZE 0x02 /*! Byte 25 */ +#define HCI_SUP_LE_READ_LOCAL_SUP_FEAT 0x04 /*! Byte 25 */ +#define HCI_SUP_LE_SET_RAND_ADDR 0x10 /*! Byte 25 */ +#define HCI_SUP_LE_SET_ADV_PARAM 0x20 /*! Byte 25 */ +#define HCI_SUP_LE_READ_ADV_TX_POWER 0x40 /*! Byte 25 */ +#define HCI_SUP_LE_SET_ADV_DATA 0x80 /*! Byte 25 */ +#define HCI_SUP_LE_SET_SCAN_RESP_DATA 0x01 /*! Byte 26 */ +#define HCI_SUP_LE_SET_ADV_ENABLE 0x02 /*! Byte 26 */ +#define HCI_SUP_LE_SET_SCAN_PARAM 0x04 /*! Byte 26 */ +#define HCI_SUP_LE_SET_SCAN_ENABLE 0x08 /*! Byte 26 */ +#define HCI_SUP_LE_CREATE_CONN 0x10 /*! Byte 26 */ +#define HCI_SUP_LE_CREATE_CONN_CANCEL 0x20 /*! Byte 26 */ +#define HCI_SUP_LE_READ_WHITE_LIST_SIZE 0x40 /*! Byte 26 */ +#define HCI_SUP_LE_CLEAR_WHITE_LIST 0x80 /*! Byte 26 */ +#define HCI_SUP_LE_ADD_DEV_WHITE_LIST 0x01 /*! Byte 27 */ +#define HCI_SUP_LE_REMOVE_DEV_WHITE_LIST 0x02 /*! Byte 27 */ +#define HCI_SUP_LE_CONN_UPDATE 0x04 /*! Byte 27 */ +#define HCI_SUP_LE_SET_HOST_CHAN_CLASS 0x08 /*! Byte 27 */ +#define HCI_SUP_LE_READ_CHAN_MAP 0x10 /*! Byte 27 */ +#define HCI_SUP_LE_READ_REMOTE_FEAT 0x20 /*! Byte 27 */ +#define HCI_SUP_LE_ENCRYPT 0x40 /*! Byte 27 */ +#define HCI_SUP_LE_RAND 0x80 /*! Byte 27 */ +#define HCI_SUP_LE_START_ENCRYPTION 0x01 /*! Byte 28 */ +#define HCI_SUP_LE_LTK_REQ_REPL 0x02 /*! Byte 28 */ +#define HCI_SUP_LE_LTK_REQ_NEG_REPL 0x04 /*! Byte 28 */ +#define HCI_SUP_LE_READ_SUP_STATES 0x08 /*! Byte 28 */ +#define HCI_SUP_LE_RECEIVER_TEST 0x10 /*! Byte 28 */ +#define HCI_SUP_LE_TRANSMITTER_TEST 0x20 /*! Byte 28 */ +#define HCI_SUP_LE_TEST_END 0x40 /*! Byte 28 */ + +/*! Event mask */ +#define HCI_EVT_MASK_DISCONNECT_CMPL 0x10 /*! Byte 0 */ +#define HCI_EVT_MASK_ENC_CHANGE 0x80 /*! Byte 0 */ +#define HCI_EVT_MASK_READ_REMOTE_VER_INFO_CMPL 0x08 /*! Byte 1 */ +#define HCI_EVT_MASK_HW_ERROR 0x80 /*! Byte 1 */ +#define HCI_EVT_MASK_DATA_BUF_OVERFLOW 0x02 /*! Byte 3 */ +#define HCI_EVT_MASK_ENC_KEY_REFRESH_CMPL 0x80 /*! Byte 5 */ +#define HCI_EVT_MASK_LE_META 0x20 /*! Byte 7 */ + +/*! LE event mask */ +#define HCI_EVT_MASK_LE_CONN_CMPL_EVT 0x01 /*! Byte 0 */ +#define HCI_EVT_MASK_LE_ADV_REPORT_EVT 0x02 /*! Byte 0 */ +#define HCI_EVT_MASK_LE_CONN_UPDATE_CMPL_EVT 0x04 /*! Byte 0 */ +#define HCI_EVT_MASK_LE_READ_REMOTE_FEAT_CMPL_EVT 0x08 /*! Byte 0 */ +#define HCI_EVT_MASK_LE_LTK_REQ_EVT 0x10 /*! Byte 0 */ + +/*! LE supported features */ +#define HCI_LE_SUP_FEAT_ENCRYPTION 0x01 + +/*! Advertising command parameters */ +#define HCI_ADV_MIN_INTERVAL 0x0020 /*! Minimum advertising interval */ +#define HCI_ADV_NONCONN_MIN_INTERVAL 0x00A0 /*! Minimum nonconnectable adv. interval */ +#define HCI_ADV_MAX_INTERVAL 0x4000 /*! Maximum advertising interval */ +#define HCI_ADV_TYPE_CONN_UNDIRECT 0x00 /*! Connectable undirected advertising */ +#define HCI_ADV_TYPE_CONN_DIRECT 0x01 /*! Connectable directed advertising */ +#define HCI_ADV_TYPE_DISC_UNDIRECT 0x02 /*! Discoverable undirected advertising */ +#define HCI_ADV_TYPE_NONCONN_UNDIRECT 0x03 /*! Nonconnectable undirected advertising */ +#define HCI_ADV_CHAN_37 0x01 /*! Advertising channel 37 */ +#define HCI_ADV_CHAN_38 0x02 /*! Advertising channel 38 */ +#define HCI_ADV_CHAN_39 0x04 /*! Advertising channel 39 */ +#define HCI_ADV_FILT_NONE 0x00 /*! No scan request or connection filtering */ +#define HCI_ADV_FILT_SCAN 0x01 /*! White list filters scan requests */ +#define HCI_ADV_FILT_CONN 0x02 /*! White list filters connections */ +#define HCI_ADV_FILT_ALL 0x03 /*! White list filters scan req. and conn. */ + +/*! Scan command parameters */ +#define HCI_SCAN_TYPE_PASSIVE 0 /*! Passive scan */ +#define HCI_SCAN_TYPE_ACTIVE 1 /*! Active scan */ +#define HCI_SCAN_INTERVAL_MIN 0x0004 /*! Minimum scan interval */ +#define HCI_SCAN_INTERVAL_MAX 0x4000 /*! Maximum scan interval */ +#define HCI_SCAN_INTERVAL_DEFAULT 0x0010 /*! Default scan interval */ +#define HCI_SCAN_WINDOW_MIN 0x0004 /*! Minimum scan window */ +#define HCI_SCAN_WINDOW_MAX 0x4000 /*! Maximum scan window */ +#define HCI_SCAN_WINDOW_DEFAULT 0x0010 /*! Default scan window */ + +/*! Connection command parameters */ +#define HCI_CONN_INTERVAL_MIN 0x0006 /*! Minimum connection interval */ +#define HCI_CONN_INTERVAL_MAX 0x0C80 /*! Maximum connection interval */ +#define HCI_CONN_LATENCY_MAX 0x01F3 /*! Maximum connection latency */ +#define HCI_SUP_TIMEOUT_MIN 0x000A /*! Minimum supervision timeout */ +#define HCI_SUP_TIMEOUT_MAX 0x0C80 /*! Maximum supervision timeout */ + +/*! Connection event parameters */ +#define HCI_ROLE_MASTER 0 /*! Role is master */ +#define HCI_ROLE_SLAVE 1 /*! Role is slave */ +#define HCI_CLOCK_500PPM 0x00 /*! 500 ppm clock accuracy */ +#define HCI_CLOCK_250PPM 0x01 /*! 250 ppm clock accuracy */ +#define HCI_CLOCK_150PPM 0x02 /*! 150 ppm clock accuracy */ +#define HCI_CLOCK_100PPM 0x03 /*! 100 ppm clock accuracy */ +#define HCI_CLOCK_75PPM 0x04 /*! 75 ppm clock accuracy */ +#define HCI_CLOCK_50PPM 0x05 /*! 50 ppm clock accuracy */ +#define HCI_CLOCK_30PPM 0x06 /*! 30 ppm clock accuracy */ +#define HCI_CLOCK_20PPM 0x07 /*! 20 ppm clock accuracy */ + +/*! Advertising report event parameters */ +#define HCI_ADV_CONN_UNDIRECT 0x00 /*! Connectable undirected advertising */ +#define HCI_ADV_CONN_DIRECT 0x01 /*! Connectable directed advertising */ +#define HCI_ADV_DISC_UNDIRECT 0x02 /*! Discoverable undirected advertising */ +#define HCI_ADV_NONCONN_UNDIRECT 0x03 /*! Non-connectable undirected advertising */ +#define HCI_ADV_SCAN_RESPONSE 0x04 /*! Scan response */ + +/*! Misc command parameters */ +#define HCI_READ_TX_PWR_CURRENT 0 /*! Read current tx power */ +#define HCI_READ_TX_PWR_MAX 1 /*! Read maximum tx power */ +#define HCI_TX_PWR_MIN -30 /*! Minimum tx power dBm */ +#define HCI_TX_PWR_MAX 20 /*! Maximum tx power dBm */ +#define HCI_VERSION 6 /*! HCI specification version */ +#define HCI_RSSI_MIN -127 /*! Minimum RSSI dBm */ +#define HCI_RSSI_MAX 20 /*! Maximum RSSI dBm */ +#define HCI_ADDR_TYPE_PUBLIC 0 /*! Public device address */ +#define HCI_ADDR_TYPE_RANDOM 1 /*! Random device address */ +#define HCI_FILT_NONE 0 /*! No white list filtering */ +#define HCI_FILT_WHITE_LIST 1 /*! White list filtering */ +#define HCI_ROLE_MASTER 0 /*! Role is master */ +#define HCI_ROLE_SLAVE 1 /*! Role is slave */ + +/*! Parameter lengths */ +#define HCI_EVT_MASK_LEN 8 /*! Length of event mask byte array */ +#define HCI_LE_EVT_MASK_LEN 8 /*! Length of LE event mask byte array */ +#define HCI_FEAT_LEN 8 /*! Length of features byte array */ +#define HCI_ADV_DATA_LEN 31 /*! Length of advertising data */ +#define HCI_SCAN_DATA_LEN 31 /*! Length of scan response data */ +#define HCI_CHAN_MAP_LEN 5 /*! Length of channel map byte array */ +#define HCI_KEY_LEN 16 /*! Length of encryption key */ +#define HCI_ENCRYPT_DATA_LEN 16 /*! Length of data used in encryption */ +#define HCI_RAND_LEN 8 /*! Length of random number */ +#define HCI_LE_STATES_LEN 8 /*! Length of LE states byte array */ + +/*! Wicentric company ID */ +#define HCI_ID_WICENTRIC 0x005F + +#ifdef __cplusplus +}; +#endif + +#endif /* HCI_DEFS_H */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/hci_handler.h b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/hci_handler.h new file mode 100644 index 00000000000..49a4e79cbd2 --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/hci_handler.h @@ -0,0 +1,67 @@ +/*************************************************************************************************/ +/*! + * \file hci_handler.h + * + * \brief Interface to HCI event handler. + * + * $Date: 2012-03-29 13:24:04 -0700 (Thu, 29 Mar 2012) $ + * $Revision: 287 $ + * + * Copyright (c) 2009-2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + */ +/*************************************************************************************************/ +#ifndef HCI_HANDLER_H +#define HCI_HANDLER_H + +#include "wsf_os.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************************************************** + Function Declarations +**************************************************************************************************/ + +/*************************************************************************************************/ +/*! + * \fn HciHandlerInit + * + * \brief HCI handler init function called during system initialization. + * + * \param handlerID WSF handler ID for HCI. + * + * \return None. + */ +/*************************************************************************************************/ +void HciHandlerInit(wsfHandlerId_t handlerId); + + +/*************************************************************************************************/ +/*! + * \fn HciHandler + * + * \brief WSF event handler for HCI. + * + * \param event WSF event mask. + * \param pMsg WSF message. + * + * \return None. + */ +/*************************************************************************************************/ +void HciHandler(wsfEventMask_t event, wsfMsgHdr_t *pMsg); + +#ifdef __cplusplus +}; +#endif + +#endif /* HCI_HANDLER_H */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/l2c_api.h b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/l2c_api.h new file mode 100644 index 00000000000..0143647e510 --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/l2c_api.h @@ -0,0 +1,173 @@ +/*************************************************************************************************/ +/*! + * \file l2c_api.h + * + * \brief L2CAP subsystem API. + * + * $Date: 2012-03-07 22:32:20 -0800 (Wed, 07 Mar 2012) $ + * $Revision: 268 $ + * + * Copyright (c) 2009-2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + */ +/*************************************************************************************************/ +#ifndef L2C_API_H +#define L2C_API_H + +#include "hci_api.h" +#include "l2c_defs.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************************************************** + Macros +**************************************************************************************************/ + +/*! Control callback message events */ +#define L2C_CTRL_FLOW_ENABLE_IND 0 /*! Data flow enabled */ +#define L2C_CTRL_FLOW_DISABLE_IND 1 /*! Data flow disabled */ + +/************************************************************************************************** + Callback Function Types +**************************************************************************************************/ + +/*************************************************************************************************/ +/*! + * \fn l2cDataCback_t + * + * \brief This callback function sends a received L2CAP packet to the client. + * + * \param handle The connection handle. + * \param len The length of the L2CAP payload data in pPacket. + * \param pPacket A buffer containing the packet. + * + * \return None. + */ +/*************************************************************************************************/ +typedef void (*l2cDataCback_t)(uint16_t handle, uint16_t len, uint8_t *pPacket); + +/*************************************************************************************************/ +/*! + * \fn l2cCtrlCback_t + * + * \brief This callback function sends control messages to the client. + * + * \param pMsg Pointer to message structure. + * + * \return None. + */ +/*************************************************************************************************/ +typedef void (*l2cCtrlCback_t)(wsfMsgHdr_t *pMsg); + +/************************************************************************************************** + Function Declarations +**************************************************************************************************/ + +/*************************************************************************************************/ +/*! + * \fn L2cInit + * + * \brief Initialize L2C subsystem. + * + * \return None. + */ +/*************************************************************************************************/ +void L2cInit(void); + +/*************************************************************************************************/ +/*! + * \fn L2cMasterInit + * + * \brief Initialize L2C for operation as a Bluetooth LE master. + * + * \return None. + */ +/*************************************************************************************************/ +void L2cMasterInit(void); + +/*************************************************************************************************/ +/*! + * \fn L2cSlaveInit + * + * \brief Initialize L2C for operation as a Bluetooth LE slave. + * + * \return None. + */ +/*************************************************************************************************/ +void L2cSlaveInit(void); + +/*************************************************************************************************/ +/*! + * \fn L2cRegister + * + * \brief called by the L2C client, such as ATT or SMP, to register for the given CID. + * + * \param cid channel identifier. + * \param dataCback Callback function for L2CAP data received for this CID. + * \param ctrlCback Callback function for control events for this CID. + * + * \return None. + */ +/*************************************************************************************************/ +void L2cRegister(uint16_t cid, l2cDataCback_t dataCback, l2cCtrlCback_t ctrlCback); + +/*************************************************************************************************/ +/*! + * \fn L2cDataReq + * + * \brief Send an L2CAP data packet on the given CID. + * + * \param cid The channel identifier. + * \param handle The connection handle. The client receives this handle from DM. + * \param len The length of the payload data in pPacket. + * \param pPacket A buffer containing the packet. + * + * \return None. + */ +/*************************************************************************************************/ +void L2cDataReq(uint16_t cid, uint16_t handle, uint16_t len, uint8_t *pL2cPacket); + +/*************************************************************************************************/ +/*! + * \fn L2cDmConnUpdateReq + * + * \brief This function is called by DM to send an L2CAP connection update request. + * + * \param handle The connection handle. + * \param pConnSpec Pointer to the connection specification structure. + * + * \return None. + */ +/*************************************************************************************************/ +void L2cDmConnUpdateReq(uint16_t handle, hciConnSpec_t *pConnSpec); + +/*************************************************************************************************/ +/*! + * \fn L2cDmConnUpdateRsp + * + * \brief This function is called by DM to send an L2CAP connection update response. + * + * \param identifier Identifier value previously passed from L2C to DM. + * \param handle The connection handle. + * \param result Connection update response result. + * + * \return None. + */ +/*************************************************************************************************/ +void L2cDmConnUpdateRsp(uint8_t identifier, uint16_t handle, uint16_t result); + +#ifdef __cplusplus +}; +#endif + +#endif /* L2C_API_H */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/l2c_defs.h b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/l2c_defs.h new file mode 100644 index 00000000000..3cddf36e476 --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/l2c_defs.h @@ -0,0 +1,76 @@ +/*************************************************************************************************/ +/*! + * \file l2c_defs.h + * + * \brief L2CAP constants and definitions from the Bluetooth specification. + * + * $Date: 2011-10-14 21:35:03 -0700 (Fri, 14 Oct 2011) $ + * $Revision: 191 $ + * + * Copyright (c) 2009-2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + */ +/*************************************************************************************************/ +#ifndef L2C_DEFS_H +#define L2C_DEFS_H + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************************************************** + Macros +**************************************************************************************************/ + +/*! Packet definitions */ +#define L2C_HDR_LEN 4 /*! L2CAP packet header length */ +#define L2C_MIN_MTU 23 /*! Minimum packet payload MTU for LE */ +#define L2C_SIG_HDR_LEN 4 /*! L2CAP signaling command header length */ + +/*! Start of L2CAP payload in an HCI ACL packet buffer */ +#define L2C_PAYLOAD_START (HCI_ACL_HDR_LEN + L2C_HDR_LEN) + +/*! L2CAP signaling packet base length, including HCI header */ +#define L2C_SIG_PKT_BASE_LEN (HCI_ACL_HDR_LEN + L2C_HDR_LEN + L2C_SIG_HDR_LEN) + +/*! Signaling packet parameter lengths */ +#define L2C_SIG_CONN_UPDATE_REQ_LEN 8 +#define L2C_SIG_CONN_UPDATE_RSP_LEN 2 +#define L2C_SIG_CMD_REJ_LEN 2 + +/*! Connection identifiers */ +#define L2C_CID_ATT 0x0004 /*! CID for attribute protocol */ +#define L2C_CID_LE_SIGNALING 0x0005 /*! CID for LE signaling */ +#define L2C_CID_SMP 0x0006 /*! CID for security manager protocol */ + +/*! Signaling codes */ +#define L2C_SIG_CMD_REJ 0x01 /*! Comand reject */ +#define L2C_SIG_CONN_UPDATE_REQ 0x12 /*! Connection parameter update request */ +#define L2C_SIG_CONN_UPDATE_RSP 0x13 /*! Connection parameter update response */ + +/*! Signaling response code flag */ +#define L2C_SIG_RSP_FLAG 0x01 + +/*! Command reject reason codes */ +#define L2C_REJ_NOT_UNDERSTOOD 0x0000 /*! Command not understood */ +#define L2C_REJ_MTU_EXCEEDED 0x0001 /*! Signaling MTU exceeded */ +#define L2C_REJ_INVALID_CID 0x0002 /*! Invalid CID in request */ + +/*! Connection parameter update result */ +#define L2C_CONN_PARAM_ACCEPTED 0x0000 /*! Connection parameters accepted */ +#define L2C_CONN_PARAM_REJECTED 0x0001 /*! Connection parameters rejected */ + + +#ifdef __cplusplus +}; +#endif + +#endif /* L2C_DEFS_H */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/l2c_handler.h b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/l2c_handler.h new file mode 100644 index 00000000000..e94006e8582 --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/l2c_handler.h @@ -0,0 +1,66 @@ +/*************************************************************************************************/ +/*! + * \file l2c_handler.h + * + * \brief L2CAP handler interface. + * + * $Date $ + * $Revision $ + * + * Copyright (c) 2009-2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + */ +/*************************************************************************************************/ +#ifndef L2C_HANDLER_H +#define L2C_HANDLER_H + +#include "wsf_os.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************************************************** + Function Declarations +**************************************************************************************************/ + +/*************************************************************************************************/ +/*! + * \fn L2cSlaveHandlerInit + * + * \brief Event handler initialization function for L2C when operating as a slave. + * + * \param handlerId ID for this event handler. + * + * \return None. + */ +/*************************************************************************************************/ +void L2cSlaveHandlerInit(wsfHandlerId_t handlerId); + +/*************************************************************************************************/ +/*! + * \fn L2cSlaveHandler + * + * \brief The WSF event handler for L2C when operating as a slave. + * + * \param event Event mask. + * \param pMsg Pointer to message. + * + * \return None. + */ +/*************************************************************************************************/ +void L2cSlaveHandler(wsfEventMask_t event, wsfMsgHdr_t *pMsg); + +#ifdef __cplusplus +}; +#endif + +#endif /* L2C_HANDLER_H */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/smp_api.h b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/smp_api.h new file mode 100644 index 00000000000..b40add0b5b5 --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/smp_api.h @@ -0,0 +1,195 @@ +/*************************************************************************************************/ +/*! + * \file smp_api.h + * + * \brief SMP subsystem API. + * + * $Date: 2011-10-14 21:35:03 -0700 (Fri, 14 Oct 2011) $ + * $Revision: 191 $ + * + * Copyright (c) 2010-2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + */ +/*************************************************************************************************/ +#ifndef SMP_API_H +#define SMP_API_H + +#include "wsf_os.h" +#include "smp_defs.h" +#include "dm_api.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************************************************** + Macros +**************************************************************************************************/ + +/*! Event handler messages for SMP state machines */ +enum +{ + SMP_MSG_API_PAIR_REQ = 1, /*! API pairing request */ + SMP_MSG_API_PAIR_RSP, /*! API pairing response */ + SMP_MSG_API_CANCEL_REQ, /*! API cancel request */ + SMP_MSG_API_AUTH_RSP, /*! API pin response */ + SMP_MSG_API_SECURITY_REQ, /*! API security request */ + SMP_MSG_CMD_PKT, /*! SMP command packet received */ + SMP_MSG_CMD_PAIRING_FAILED, /*! SMP pairing failed packet received */ + SMP_MSG_DM_ENCRYPT_CMPL, /*! Link encrypted */ + SMP_MSG_DM_ENCRYPT_FAILED, /*! Link encryption failed */ + SMP_MSG_DM_CONN_CLOSE, /*! Connection closed */ + SMP_MSG_WSF_AES_CMPL, /*! AES calculation complete */ + SMP_MSG_INT_SEND_NEXT_KEY, /*! Send next key to be distributed */ + SMP_MSG_INT_MAX_ATTEMPTS, /*! Maximum pairing attempts reached */ + SMP_MSG_INT_PAIRING_CMPL, /*! Pairing complete */ + SMP_MSG_INT_TIMEOUT, /*! Pairing protocol timeout */ + SMP_NUM_MSGS +}; + +/************************************************************************************************** + Data Types +**************************************************************************************************/ + +/*! Configurable parameters */ +typedef struct +{ + uint16_t attemptTimeout; /*! 'Repeated attempts' timeout in msec */ + uint8_t ioCap; /*! I/O Capability */ + uint8_t minKeyLen; /*! Minimum encryption key length */ + uint8_t maxKeyLen; /*! Maximum encryption key length */ + uint8_t maxAttempts; /*! Attempts to trigger 'repeated attempts' timeout */ + uint8_t auth; /*! Device authentication requirements */ +} smpCfg_t; + +/*! Data type for SMP_MSG_API_PAIR_REQ and SMP_MSG_API_PAIR_RSP */ +typedef struct +{ + wsfMsgHdr_t hdr; + uint8_t oob; + uint8_t auth; + uint8_t iKeyDist; + uint8_t rKeyDist; +} smpDmPair_t; + +/*! Data type for SMP_MSG_API_AUTH_RSP */ +typedef struct +{ + wsfMsgHdr_t hdr; + uint8_t authData[SMP_OOB_LEN]; + uint8_t authDataLen; +} smpDmAuthRsp_t; + +/*! Data type for SMP_MSG_API_SECURITY_REQ */ +typedef struct +{ + wsfMsgHdr_t hdr; + uint8_t auth; +} smpDmSecurityReq_t; + +/*! Union SMP DM message data types */ +typedef union +{ + wsfMsgHdr_t hdr; + smpDmPair_t pair; + smpDmAuthRsp_t authRsp; + smpDmSecurityReq_t securityReq; +} smpDmMsg_t; + +/************************************************************************************************** + Global Variables; +**************************************************************************************************/ + +/*! Configuration pointer */ +extern smpCfg_t *pSmpCfg; + +/************************************************************************************************** + Function Declarations +**************************************************************************************************/ + +/*************************************************************************************************/ +/*! + * \fn SmpiInit + * + * \brief Initialize SMP initiator role. + * + * \return None. + */ +/*************************************************************************************************/ +void SmpiInit(void); + +/*************************************************************************************************/ +/*! + * \fn SmprInit + * + * \brief Initialize SMP responder role. + * + * \return None. + */ +/*************************************************************************************************/ +void SmprInit(void); + +/*************************************************************************************************/ +/*! + * \fn SmpNonInit + * + * \brief Use this SMP init function when SMP is not supported. + * + * \return None. + */ +/*************************************************************************************************/ +void SmpNonInit(void); + +/*************************************************************************************************/ +/*! + * \fn SmpDmMsgSend + * + * \brief This function is called by DM to send a message to SMP. + * + * \param pMsg Pointer to message structure. + * + * \return None. + */ +/*************************************************************************************************/ +void SmpDmMsgSend(smpDmMsg_t *pMsg); + +/*************************************************************************************************/ +/*! + * \fn SmpDmEncryptInd + * + * \brief This function is called by DM to notify SMP of encrypted link status. + * + * \param pMsg Pointer to HCI message structure. + * + * \return None. + */ +/*************************************************************************************************/ +void SmpDmEncryptInd(wsfMsgHdr_t *pMsg); + +/*************************************************************************************************/ +/*! + * \fn SmpDmGetStk + * + * \brief Return the STK for the given connection. + * + * \param connId Connection identifier. + * \param pSecLevel Returns the security level of pairing when STK was created. + * + * \return Pointer to STK or NULL if not available. + */ +/*************************************************************************************************/ +uint8_t *SmpDmGetStk(dmConnId_t connId, uint8_t *pSecLevel); + +#ifdef __cplusplus +}; +#endif + +#endif /* SMP_API_H */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/smp_defs.h b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/smp_defs.h new file mode 100644 index 00000000000..91362248fb6 --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/smp_defs.h @@ -0,0 +1,122 @@ +/*************************************************************************************************/ +/*! + * \file smp_defs.h + * + * \brief Security manager constants and definitions from the Bluetooth specification. + * + * $Date: 2011-10-14 21:35:03 -0700 (Fri, 14 Oct 2011) $ + * $Revision: 191 $ + * + * Copyright (c) 2010-2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + */ +/*************************************************************************************************/ +#ifndef SMP_DEFS_H +#define SMP_DEFS_H + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************************************************** + Macros +**************************************************************************************************/ + +/*! PDU format */ +#define SMP_HDR_LEN 1 /*! Attribute PDU header length */ + +/*! Protocol timeout */ +#define SMP_TIMEOUT 30 /*! Protocol timeout in seconds */ + +/*! Encryption key size */ +#define SMP_KEY_SIZE_MAX 16 /*! Maximum encryption key size */ +#define SMP_KEY_SIZE_MIN 7 /*! Minimum encryption key size */ + +/*! OOB and PIN data lengths in bytes */ +#define SMP_OOB_LEN 16 +#define SMP_PIN_LEN 3 + +/*! Error codes */ +#define SMP_ERR_PASSKEY_ENTRY 0x01 /*! User input of passkey failed */ +#define SMP_ERR_OOB 0x02 /*! OOB data is not available */ +#define SMP_ERR_AUTH_REQ 0x03 /*! Authentication requirements cannot be met */ +#define SMP_ERR_CONFIRM_VALUE 0x04 /*! Confirm value does not match */ +#define SMP_ERR_PAIRING_NOT_SUP 0x05 /*! Pairing is not supported by the device */ +#define SMP_ERR_ENC_KEY_SIZE 0x06 /*! Insufficient encryption key size */ +#define SMP_ERR_COMMAND_NOT_SUP 0x07 /*! Command not supported */ +#define SMP_ERR_UNSPECIFIED 0x08 /*! Unspecified reason */ +#define SMP_ERR_ATTEMPTS 0x09 /*! Repeated attempts */ +#define SMP_ERR_INVALID_PARAM 0x0A /*! Invalid parameter or command length */ + +/*! Proprietary internal error codes */ +#define SMP_ERR_MEMORY 0xE0 /*! Out of memory */ +#define SMP_ERR_TIMEOUT 0xE1 /*! Transaction timeout */ + +/*! Command codes */ +#define SMP_CMD_PAIR_REQ 0x01 /*! Pairing Request */ +#define SMP_CMD_PAIR_RSP 0x02 /*! Pairing Response */ +#define SMP_CMD_PAIR_CNF 0x03 /*! Pairing Confirm */ +#define SMP_CMD_PAIR_RAND 0x04 /*! Pairing Random */ +#define SMP_CMD_PAIR_FAIL 0x05 /*! Pairing Failed */ +#define SMP_CMD_ENC_INFO 0x06 /*! Encryption Information */ +#define SMP_CMD_MASTER_ID 0x07 /*! Master Identification */ +#define SMP_CMD_ID_INFO 0x08 /*! Identity Information */ +#define SMP_CMD_ID_ADDR_INFO 0x09 /*! Identity Address Information */ +#define SMP_CMD_SIGN_INFO 0x0A /*! Signing Information */ +#define SMP_CMD_SECURITY_REQ 0x0B /*! Security Request */ +#define SMP_CMD_MAX 0x0C /*! Command code maximum */ + +/*! Command packet lengths */ +#define SMP_PAIR_REQ_LEN 7 +#define SMP_PAIR_RSP_LEN 7 +#define SMP_PAIR_CNF_LEN 17 +#define SMP_PAIR_RAND_LEN 17 +#define SMP_PAIR_FAIL_LEN 2 +#define SMP_ENC_INFO_LEN 17 +#define SMP_MASTER_ID_LEN 11 +#define SMP_ID_INFO_LEN 17 +#define SMP_ID_ADDR_INFO_LEN 8 +#define SMP_SIGN_INFO_LEN 17 +#define SMP_SECURITY_REQ_LEN 2 + +/*! I/O capabilities */ +#define SMP_IO_DISP_ONLY 0x00 /*! DisplayOnly */ +#define SMP_IO_DISP_YES_NO 0x01 /*! DisplayYesNo */ +#define SMP_IO_KEY_ONLY 0x02 /*! KeyboardOnly */ +#define SMP_IO_NO_IN_NO_OUT 0x03 /*! NoInputNoOutput */ +#define SMP_IO_KEY_DISP 0x04 /*! KeyboardDisplay */ + +/*! OOB data present */ +#define SMP_OOB_DATA_NONE 0x00 +#define SMP_OOB_DATA_PRESENT 0x01 + +/*! Authentication/security properties bit mask */ +#define SMP_AUTH_BOND_MASK 0x03 /*! Mask for bonding bits */ +#define SMP_AUTH_BOND_FLAG 0x01 /*! Bonding requested */ +#define SMP_AUTH_MITM_FLAG 0x04 /*! MITM (authenticated pairing) requested */ + +/*! Key distribution bit mask */ +#define SMP_KEY_DIST_ENC 0x01 /*! Distribute LTK */ +#define SMP_KEY_DIST_ID 0x02 /*! Distribute IRK */ +#define SMP_KEY_DIST_SIGN 0x04 /*! Distribute CSRK */ +#define SMP_KEY_DIST_MASK (SMP_KEY_DIST_ENC | SMP_KEY_DIST_ID | SMP_KEY_DIST_SIGN) + +/*! Various parameter lengths */ +#define SMP_RAND_LEN 16 +#define SMP_CONFIRM_LEN 16 +#define SMP_KEY_LEN 16 +#define SMP_RAND8_LEN 8 + +#ifdef __cplusplus +}; +#endif + +#endif /* SMP_DEFS_H */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/smp_handler.h b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/smp_handler.h new file mode 100644 index 00000000000..d96fa41d496 --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/stack/include/smp_handler.h @@ -0,0 +1,67 @@ +/*************************************************************************************************/ +/*! + * \file smp_handler.h + * + * \brief Interface to SMP event handler. + * + * $Date: 2012-03-29 13:24:04 -0700 (Thu, 29 Mar 2012) $ + * $Revision: 287 $ + * + * Copyright (c) 2010-2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + */ +/*************************************************************************************************/ +#ifndef SMP_HANDLER_H +#define SMP_HANDLER_H + +#include "wsf_os.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************************************************** + Function Declarations +**************************************************************************************************/ + +/*************************************************************************************************/ +/*! + * \fn SmpHandlerInit + * + * \brief SMP handler init function called during system initialization. + * + * \param handlerID WSF handler ID for SMP. + * + * \return None. + */ +/*************************************************************************************************/ +void SmpHandlerInit(wsfHandlerId_t handlerId); + + +/*************************************************************************************************/ +/*! + * \fn SmpHandler + * + * \brief WSF event handler for SMP. + * + * \param event WSF event mask. + * \param pMsg WSF message. + * + * \return None. + */ +/*************************************************************************************************/ +void SmpHandler(wsfEventMask_t event, wsfMsgHdr_t *pMsg); + +#ifdef __cplusplus +}; +#endif + +#endif /* SMP_HANDLER_H */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/util/bda.h b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/util/bda.h new file mode 100644 index 00000000000..5bd96bad0af --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/util/bda.h @@ -0,0 +1,109 @@ +/*************************************************************************************************/ +/*! + * \file bda.h + * + * \brief Bluetooth device address utilities. + * + * $Date: 2012-05-08 10:58:07 -0700 (Tue, 08 May 2012) $ + * $Revision: 316 $ + * + * Copyright (c) 2009-2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + */ +/*************************************************************************************************/ +#ifndef BDA_H +#define BDA_H + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************************************************** + Macros +**************************************************************************************************/ + +/*! BD address length */ +#define BDA_ADDR_LEN 6 + +/*! BD address string length */ +#define BDA_ADDR_STR_LEN (BDA_ADDR_LEN * 2) + +/************************************************************************************************** + Data Types +**************************************************************************************************/ + +/*! BD address data type */ +typedef uint8_t bdAddr_t[BDA_ADDR_LEN]; + +/************************************************************************************************** + Function Declarations +**************************************************************************************************/ + +/*************************************************************************************************/ +/*! + * \fn BdaCpy + * + * \brief Copy a BD address from source to destination. + * + * \param pDst Pointer to destination. + * \param pSrc Pointer to source. + * + * \return None. + */ +/*************************************************************************************************/ +void BdaCpy(uint8_t *pDst, uint8_t *pSrc); + + +/*************************************************************************************************/ +/*! + * \fn BdaCmp + * + * \brief Compare two BD addresses. + * + * \param pAddr1 First address. + * \param pAddr2 Second address. + * + * \return TRUE if addresses match, FALSE otherwise. + */ +/*************************************************************************************************/ +bool_t BdaCmp(uint8_t *pAddr1, uint8_t *pAddr2); + +/*************************************************************************************************/ +/*! + * \fn BdaClr + * + * \brief Set a BD address to all zeros. + * + * \param pDst Pointer to destination. + * + * \return pDst + BDA_ADDR_LEN + */ +/*************************************************************************************************/ +uint8_t *BdaClr(uint8_t *pDst); + +/*************************************************************************************************/ +/*! + * \fn Bda2Str + * + * \brief Convert a BD address to a string. + * + * \param pAddr Pointer to BD address. + * + * \return Pointer to string. + */ +/*************************************************************************************************/ +char *Bda2Str(uint8_t *pAddr); + +#ifdef __cplusplus +}; +#endif + +#endif /* BDA_H */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/generic/wsf_os_int.h b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/generic/wsf_os_int.h new file mode 100644 index 00000000000..25a4d31a619 --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/generic/wsf_os_int.h @@ -0,0 +1,105 @@ +/*************************************************************************************************/ +/*! + * \file wsf_os_int.h + * + * \brief Software foundation OS platform-specific interface file. + * + * $Date: 2012-10-01 13:53:07 -0700 (Mon, 01 Oct 2012) $ + * $Revision: 357 $ + * + * Copyright (c) 2009-2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + */ +/*************************************************************************************************/ +#ifndef WSF_OS_INT_H +#define WSF_OS_INT_H + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************************************************** + Macros +**************************************************************************************************/ + +/* Task events */ +#define WSF_MSG_QUEUE_EVENT 0x01 /* Message queued for event handler */ +#define WSF_TIMER_EVENT 0x02 /* Timer expired for event handler */ +#define WSF_HANDLER_EVENT 0x04 /* Event set for event handler */ + +/* Derive task from handler ID */ +#define WSF_TASK_FROM_ID(handlerID) (((handlerID) >> 4) & 0x0F) + +/* Derive handler from handler ID */ +#define WSF_HANDLER_FROM_ID(handlerID) ((handlerID) & 0x0F) + +/************************************************************************************************** + Data Types +**************************************************************************************************/ + +/* Event handler ID data type */ +typedef uint8_t wsfHandlerId_t; + +/* Event handler event mask data type */ +typedef uint8_t wsfEventMask_t; + +/* Task ID data type */ +typedef wsfHandlerId_t wsfTaskId_t; + +/* Task event mask data type */ +typedef uint8_t wsfTaskEvent_t; + +/************************************************************************************************** + Function Declarations +**************************************************************************************************/ + +/*************************************************************************************************/ +/*! + * \fn wsfOsReadyToSleep + * + * \brief Check if WSF is ready to sleep. + * + * \param None. + * + * \return Return TRUE if there are no pending WSF task events set, FALSE otherwise. + */ +/*************************************************************************************************/ +bool_t wsfOsReadyToSleep(void); + +/*************************************************************************************************/ +/*! + * \fn wsfOsDispatcher + * + * \brief Event dispatched. Designed to be called repeatedly from infinite loop. + * + * \param None. + * + * \return None. + */ +/*************************************************************************************************/ +void wsfOsDispatcher(void); + +/*************************************************************************************************/ +/*! + * \fn WsfOsShutdown + * + * \brief Shutdown OS. + * + * \return None. + */ +/*************************************************************************************************/ +void WsfOsShutdown(void); + +#ifdef __cplusplus +}; +#endif + +#endif /* WSF_OS_INT_H */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/generic/wsf_types.h b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/generic/wsf_types.h new file mode 100644 index 00000000000..421ee6db43f --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/generic/wsf_types.h @@ -0,0 +1,61 @@ +/*************************************************************************************************/ +/*! + * \file wsf_types.h + * + * \brief Platform-independent data types. + * + * $Date: 2012-04-28 22:02:14 -0700 (Sat, 28 Apr 2012) $ + * $Revision: 306 $ + * + * Copyright (c) 2009-2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + */ +/*************************************************************************************************/ +#ifndef WSF_TYPES_H +#define WSF_TYPES_H + +/************************************************************************************************** + Macros +**************************************************************************************************/ + +#ifndef NULL +#define NULL 0 +#endif + +#ifndef TRUE +#define TRUE 1 +#endif + +#ifndef FALSE +#define FALSE 0 +#endif + +/************************************************************************************************** + Data Types +**************************************************************************************************/ + +/* Integer data types */ +#if ((defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L)) && \ + (__ICC8051__ == 0)) || defined(__CC_ARM) || defined(__IAR_SYSTEMS_ICC__) +#include +#else +typedef signed char int8_t; +typedef unsigned char uint8_t; +typedef signed short int16_t; +typedef unsigned short uint16_t; +typedef signed long int32_t; +typedef unsigned long uint32_t; +#endif + +/* Boolean data type */ +typedef uint8_t bool_t; + +#endif /* WSF_TYPES_H */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/include/wsf_buf.h b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/include/wsf_buf.h new file mode 100644 index 00000000000..5dfe19cb4e1 --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/include/wsf_buf.h @@ -0,0 +1,137 @@ +/*************************************************************************************************/ +/*! + * \file wsf_buf.h + * + * \brief Buffer pool service. + * + * $Date: 2013-05-13 15:20:24 -0700 (Mon, 13 May 2013) $ + * $Revision: 612 $ + * + * Copyright (c) 2009-2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + */ +/*************************************************************************************************/ +#ifndef WSF_BUF_H +#define WSF_BUF_H + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************************************************** + Macros +**************************************************************************************************/ + +/*! Length of the buffer statistics array */ +#define WSF_BUF_STATS_MAX_LEN 128 + +/************************************************************************************************** + Data Types +**************************************************************************************************/ + +/*! Buffer pool descriptor structure */ +typedef struct +{ + uint16_t len; /*! length of buffers in pool */ + uint8_t num; /*! number of buffers in pool */ +} wsfBufPoolDesc_t; + + +/************************************************************************************************** + Function Declarations +**************************************************************************************************/ + +/*************************************************************************************************/ +/*! + * \fn WsfBufInit + * + * \brief Initialize the buffer pool service. This function should only be called once + * upon system initialization. + * + * \param bufMemLen Length in bytes of memory pointed to by pBufMem. + * \param pBufMem Memory in which to store the pools used by the buffer pool service. + * \param numPools Number of buffer pools. + * \param pDesc Array of buffer pool descriptors, one for each pool. + * + * \return TRUE if initialization was successful, FALSE otherwise. + */ +/*************************************************************************************************/ +bool_t WsfBufInit(uint16_t bufMemLen, uint8_t *pBufMem, uint8_t numPools, wsfBufPoolDesc_t *pDesc); + +/*************************************************************************************************/ +/*! + * \fn WsfBufAlloc + * + * \brief Allocate a buffer. + * + * \param len Length of buffer to allocate. + * + * \return Pointer to allocated buffer or NULL if allocation fails. + */ +/*************************************************************************************************/ +void *WsfBufAlloc(uint16_t len); + +/*************************************************************************************************/ +/*! + * \fn WsfBufFree + * + * \brief Free a buffer. + * + * \param pBuf Buffer to free. + * + * \return None. + */ +/*************************************************************************************************/ +void WsfBufFree(void *pBuf); + +/*************************************************************************************************/ +/*! + * \fn WsfBufGetMaxAlloc + * + * \brief Diagnostic function to get maximum allocated buffers from a pool. + * + * \param pool Buffer pool number. + * + * \return Number of allocated buffers. + */ +/*************************************************************************************************/ +uint8_t WsfBufGetMaxAlloc(uint8_t pool); + +/*************************************************************************************************/ +/*! + * \fn WsfBufGetNumAlloc + * + * \brief Diagnostic function to get the number of currently allocated buffers in a pool. + * + * \param pool Buffer pool number. + * + * \return Number of allocated buffers. + */ +/*************************************************************************************************/ +uint8_t WsfBufGetNumAlloc(uint8_t pool); + +/*************************************************************************************************/ +/*! + * \fn WsfBufGetAllocStats + * + * \brief Diagnostic function to get the buffer allocation statistics. + * + * \return Buffer allocation statistics array. + */ +/*************************************************************************************************/ +uint8_t *WsfBufGetAllocStats(void); + + +#ifdef __cplusplus +}; +#endif + +#endif /* WSF_BUF_H */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/include/wsf_msg.h b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/include/wsf_msg.h new file mode 100644 index 00000000000..f579562e81d --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/include/wsf_msg.h @@ -0,0 +1,123 @@ +/*************************************************************************************************/ +/*! + * \file wsf_msg.h + * + * \brief Message passing service. + * + * $Date: 2013-07-02 15:08:09 -0700 (Tue, 02 Jul 2013) $ + * $Revision: 779 $ + * + * Copyright (c) 2009-2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + */ +/*************************************************************************************************/ +#ifndef WSF_MSG_H +#define WSF_MSG_H + +#include "wsf_queue.h" +#include "wsf_os.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************************************************** + Function Declarations +**************************************************************************************************/ + +/*************************************************************************************************/ +/*! + * \fn WsfMsgAlloc + * + * \brief Allocate a message buffer to be sent with WsfMsgSend(). + * + * \param len Message length in bytes. + * + * \return Pointer to message buffer or NULL if allocation failed. + */ +/*************************************************************************************************/ +void *WsfMsgAlloc(uint16_t len); + +/*************************************************************************************************/ +/*! + * \fn WsfMsgFree + * + * \brief Free a message buffer allocated with WsfMsgAlloc(). + * + * \param pMsg Pointer to message buffer. + * + * \return None. + */ +/*************************************************************************************************/ +void WsfMsgFree(void *pMsg); + +/*************************************************************************************************/ +/*! + * \fn WsfMsgSend + * + * \brief Send a message to an event handler. + * + * \param handlerId Event handler ID. + * \param pMsg Pointer to message buffer. + * + * \return None. + */ +/*************************************************************************************************/ +void WsfMsgSend(wsfHandlerId_t handlerId, void *pMsg); + +/*************************************************************************************************/ +/*! + * \fn WsfMsgEnq + * + * \brief Enqueue a message. + * + * \param pQueue Pointer to queue. + * \param handerId Set message handler ID to this value. + * \param pElem Pointer to message buffer. + * + * \return None. + */ +/*************************************************************************************************/ +void WsfMsgEnq(wsfQueue_t *pQueue, wsfHandlerId_t handlerId, void *pMsg); + +/*************************************************************************************************/ +/*! + * \fn WsfMsgDeq + * + * \brief Dequeue a message. + * + * \param pQueue Pointer to queue. + * \param pHandlerId Handler ID of returned message; this is a return parameter. + * + * \return Pointer to message that has been dequeued or NULL if queue is empty. + */ +/*************************************************************************************************/ +void *WsfMsgDeq(wsfQueue_t *pQueue, wsfHandlerId_t *pHandlerId); + +/*************************************************************************************************/ +/*! + * \fn WsfMsgPeek + * + * \brief Get the next message without removing it from the queue. + * + * \param pQueue Pointer to queue. + * \param pHandlerId Handler ID of returned message; this is a return parameter. + * + * \return Pointer to the next message on the queue or NULL if queue is empty. + */ +/*************************************************************************************************/ +void *WsfMsgPeek(wsfQueue_t *pQueue, wsfHandlerId_t *pHandlerId); + +#ifdef __cplusplus +}; +#endif + +#endif /* WSF_MSG_H */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/include/wsf_os.h b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/include/wsf_os.h new file mode 100644 index 00000000000..c755e5ad1b3 --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/include/wsf_os.h @@ -0,0 +1,147 @@ +/*************************************************************************************************/ +/*! + * \file wsf_os.h + * + * \brief Software foundation OS API. + * + * $Date: 2012-10-22 14:09:36 -0700 (Mon, 22 Oct 2012) $ + * $Revision: 359 $ + * + * Copyright (c) 2009-2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + */ +/*************************************************************************************************/ +#ifndef WSF_OS_H +#define WSF_OS_H + +#include "wsf_os_int.h" +#include "wsf_queue.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************************************************** + Data Types +**************************************************************************************************/ + +/*! Common message structure passed to event handler */ +typedef struct +{ + uint16_t param; /*! General purpose parameter passed to event handler */ + uint8_t event; /*! General purpose event value passed to event handler */ + uint8_t status; /*! General purpose status value passed to event handler */ +} wsfMsgHdr_t; + +/************************************************************************************************** + Callback Function Types +**************************************************************************************************/ + +/*************************************************************************************************/ +/*! + * \fn wsfEventHandler_t + * + * \brief Event handler callback function. + * + * \param event Mask of events set for the event handler. + * \param pMsg Pointer to message for the event handler. + * + * \return None. + */ +/*************************************************************************************************/ +typedef void (*wsfEventHandler_t)(wsfEventMask_t event, wsfMsgHdr_t *pMsg); + +/************************************************************************************************** + Function Declarations +**************************************************************************************************/ + +/*************************************************************************************************/ +/*! + * \fn WsfSetEvent + * + * \brief Set an event for an event handler. + * + * \param handlerId Handler ID. + * \param event Event or events to set. + * + * \return None. + */ +/*************************************************************************************************/ +void WsfSetEvent(wsfHandlerId_t handlerId, wsfEventMask_t event); + +/*************************************************************************************************/ +/*! + * \fn WsfTaskLock + * + * \brief Lock task scheduling. + * + * \return None. + */ +/*************************************************************************************************/ +void WsfTaskLock(void); + +/*************************************************************************************************/ +/*! + * \fn WsfTaskUnlock + * + * \brief Unlock task scheduling. + * + * \return None. + */ +/*************************************************************************************************/ +void WsfTaskUnlock(void); + +/*************************************************************************************************/ +/*! + * \fn WsfTaskSetReady + * + * \brief Set the task used by the given handler as ready to run. + * + * \param handlerId Event handler ID. + * \param event Task event mask. + * + * \return None. + */ +/*************************************************************************************************/ +void WsfTaskSetReady(wsfHandlerId_t handlerId, wsfTaskEvent_t event); + +/*************************************************************************************************/ +/*! + * \fn WsfTaskMsgQueue + * + * \brief Return the task message queue used by the given handler. + * + * \param handlerId Event handler ID. + * + * \return Task message queue. + */ +/*************************************************************************************************/ +wsfQueue_t *WsfTaskMsgQueue(wsfHandlerId_t handlerId); + +/*************************************************************************************************/ +/*! + * \fn WsfOsSetNextHandler + * + * \brief Set the next WSF handler function in the WSF OS handler array. This function + * should only be called as part of the OS initialization procedure. + * + * \param handler WSF handler function. + * + * \return WSF handler ID for this handler. + */ +/*************************************************************************************************/ +wsfHandlerId_t WsfOsSetNextHandler(wsfEventHandler_t handler); + +#ifdef __cplusplus +}; +#endif + +#endif /* WSF_OS_H */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/include/wsf_queue.h b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/include/wsf_queue.h new file mode 100644 index 00000000000..c3a607298e9 --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/include/wsf_queue.h @@ -0,0 +1,155 @@ +/*************************************************************************************************/ +/*! + * \file wsf_queue.h + * + * \brief General purpose queue service. + * + * $Date: 2011-10-14 21:35:03 -0700 (Fri, 14 Oct 2011) $ + * $Revision: 191 $ + * + * Copyright (c) 2009-2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + */ +/*************************************************************************************************/ +#ifndef WSF_QUEUE_H +#define WSF_QUEUE_H + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************************************************** + Macros +**************************************************************************************************/ + +/*! Initialize a queue */ +#define WSF_QUEUE_INIT(pQueue) {(pQueue)->pHead = NULL; (pQueue)->pTail = NULL;} + +/************************************************************************************************** + Data Types +**************************************************************************************************/ + +/*! Queue structure */ +typedef struct +{ + void *pHead; /*! head of queue */ + void *pTail; /*! tail of queue */ +} wsfQueue_t; + +/************************************************************************************************** + Function Declarations +**************************************************************************************************/ + +/*************************************************************************************************/ +/*! + * \fn WsfQueueEnq + * + * \brief Enqueue an element to the tail of a queue. + * + * \param pQueue Pointer to queue. + * \param pElem Pointer to element. + * + * \return None. + */ +/*************************************************************************************************/ +void WsfQueueEnq(wsfQueue_t *pQueue, void *pElem); + +/*************************************************************************************************/ +/*! + * \fn WsfQueueDeq + * + * \brief Dequeue an element from the head of a queue. + * + * \param pQueue Pointer to queue. + * + * \return Pointer to element that has been dequeued or NULL if queue is empty. + */ +/*************************************************************************************************/ +void *WsfQueueDeq(wsfQueue_t *pQueue); + +/*************************************************************************************************/ +/*! + * \fn WsfQueuePush + * + * \brief Push an element to the head of a queue. + * + * \param pQueue Pointer to queue. + * \param pElem Pointer to element. + * + * \return None. + */ +/*************************************************************************************************/ +void WsfQueuePush(wsfQueue_t *pQueue, void *pElem); + +/*************************************************************************************************/ +/*! + * \fn WsfQueueInsert + * + * \brief Insert an element into a queue. This function is typically used when iterating + * over a queue. + * + * \param pQueue Pointer to queue. + * \param pElem Pointer to element to be inserted. + * \param pPrev Pointer to previous element in the queue before element to be inserted. + * Note: set pPrev to NULL if pElem is first element in queue. + * \return None. + */ +/*************************************************************************************************/ +void WsfQueueInsert(wsfQueue_t *pQueue, void *pElem, void *pPrev); + +/*************************************************************************************************/ +/*! + * \fn WsfQueueRemove + * + * \brief Remove an element from a queue. This function is typically used when iterating + * over a queue. + * + * \param pQueue Pointer to queue. + * \param pElem Pointer to element to be removed. + * \param pPrev Pointer to previous element in the queue before element to be removed. + * + * \return None. + */ +/*************************************************************************************************/ +void WsfQueueRemove(wsfQueue_t *pQueue, void *pElem, void *pPrev); + +/*************************************************************************************************/ +/*! + * \fn WsfQueueCount + * + * \brief Count the number of elements in a queue. + * + * \param pQueue Pointer to queue. + * + * \return Number of elements in queue. + */ +/*************************************************************************************************/ +uint16_t WsfQueueCount(wsfQueue_t *pQueue); + +/*************************************************************************************************/ +/*! + * \fn WsfQueueEmpty + * + * \brief Return TRUE if queue is empty. + * + * \param pQueue Pointer to queue. + * + * \return TRUE if queue is empty, FALSE otherwise. + */ +/*************************************************************************************************/ +bool_t WsfQueueEmpty(wsfQueue_t *pQueue); + + +#ifdef __cplusplus +}; +#endif + +#endif /* WSF_QUEUE_H */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/include/wsf_sec.h b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/include/wsf_sec.h new file mode 100644 index 00000000000..d25a50c566d --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/include/wsf_sec.h @@ -0,0 +1,111 @@ +/*************************************************************************************************/ +/*! + * \file wsf_sec.h + * + * \brief AES and random number security service API. + * + * $Date: 2011-10-14 21:35:03 -0700 (Fri, 14 Oct 2011) $ + * $Revision: 191 $ + * + * Copyright (c) 2010-2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + + */ +/*************************************************************************************************/ +#ifndef WSF_SEC_H +#define WSF_SEC_H + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************************************************** + Data Types +**************************************************************************************************/ + +/*! AES callback parameters structure */ +typedef struct +{ + wsfMsgHdr_t hdr; /*! header */ + uint8_t *pCiphertext; /*! pointer to 16 bytes of ciphertext data */ +} wsfSecAes_t; + +/*! AES callback function type */ +typedef void (*wsfSecAesCback_t)(wsfSecAes_t *pMsg); + +/************************************************************************************************** + Function Declarations +**************************************************************************************************/ + +/*************************************************************************************************/ +/*! + * \fn WsfSecInit + * + * \brief Initialize the security service. This function should only be called once + * upon system initialization. + * + * \return None. + */ +/*************************************************************************************************/ +void WsfSecInit(void); + +/*************************************************************************************************/ +/*! + * \fn WsfSecRandInit + * + * \brief Initialize the random number service. This function should only be called once + * upon system initialization. + * + * \return None. + */ +/*************************************************************************************************/ +void WsfSecRandInit(void); + +/*************************************************************************************************/ +/*! + * \fn WsfSecAes + * + * \brief Execute an AES calculation. When the calculation completes, a WSF message will be + * sent to the specified handler. This function returns a token value that + * the client can use to match calls to this function with messages. + * + * \param pKey Pointer to 16 byte key. + * \param pPlaintext Pointer to 16 byte plaintext. + * \param handlerId WSF handler ID. + * \param param Client-defined parameter returned in message. + * \param event Event for client's WSF handler. + * + * \return Token value. + */ +/*************************************************************************************************/ +uint8_t WsfSecAes(uint8_t *pKey, uint8_t *pPlaintext, wsfHandlerId_t handlerId, + uint16_t param, uint8_t event); + +/*************************************************************************************************/ +/*! + * \fn WsfSecRand + * + * \brief This function returns up to 16 bytes of random data to a buffer provided by the + * client. + * + * \param pRand Pointer to returned random data. + * \param randLen Length of random data. + * + * \return None. + */ +/*************************************************************************************************/ +void WsfSecRand(uint8_t *pRand, uint8_t randLen); + +#ifdef __cplusplus +}; +#endif + +#endif /* WSF_SEC_H */ diff --git a/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/include/wsf_timer.h b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/include/wsf_timer.h new file mode 100644 index 00000000000..c849d7a70e2 --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_Maxim/exactLE/wsf/include/wsf_timer.h @@ -0,0 +1,161 @@ +/*************************************************************************************************/ +/*! + * \file wsf_timer.h + * + * \brief Timer service. + * + * $Date: 2013-07-19 17:17:05 -0700 (Fri, 19 Jul 2013) $ + * $Revision: 843 $ + * + * Copyright (c) 2009-2016 ARM Limited. All rights reserved. + * + * SPDX-License-Identifier: LicenseRef-PBL + * + * Licensed under the Permissive Binary License, Version 1.0 (the "License"); you may not use + * this file except in compliance with the License. You may obtain a copy of the License at + * + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and limitations under the License. + */ +/*************************************************************************************************/ +#ifndef WSF_TIMER_H +#define WSF_TIMER_H + +#include "wsf_os.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/************************************************************************************************** + Macros +**************************************************************************************************/ + +/************************************************************************************************** + Data Types +**************************************************************************************************/ + +/*! Timer ticks data type */ +typedef uint16_t wsfTimerTicks_t; + +/*! Timer structure */ +typedef struct wsfTimer_tag +{ + struct wsfTimer_tag *pNext; /*! pointer to next timer in queue */ + wsfTimerTicks_t ticks; /*! number of ticks until expiration */ + wsfHandlerId_t handlerId; /*! event handler for this timer */ + bool_t isStarted; /*! TRUE if timer has been started */ + wsfMsgHdr_t msg; /*! application-defined timer event parameters */ +} wsfTimer_t; + + +/************************************************************************************************** + Function Declarations +**************************************************************************************************/ + +/*************************************************************************************************/ +/*! + * \fn WsfTimerInit + * + * \brief Initialize the timer service. This function should only be called once + * upon system initialization. + * + * \param msPerTick Sets the number of milliseconds per timer tick. + * + * \return None. + */ +/*************************************************************************************************/ +void WsfTimerInit(uint8_t msPerTick); + +/*************************************************************************************************/ +/*! + * \fn WsfTimerStartSec + * + * \brief Start a timer in units of seconds. Before this function is called parameter + * pTimer->handlerId must be set to the event handler for this timer and parameter + * pTimer->msg must be set to any application-defined timer event parameters. + * + * \param pTimer Pointer to timer. + * \param sec Seconds until expiration. + * + * \return None. + */ +/*************************************************************************************************/ +void WsfTimerStartSec(wsfTimer_t *pTimer, wsfTimerTicks_t sec); + +/*************************************************************************************************/ +/*! + * \fn WsfTimerStartMs + * + * \brief Start a timer in units of milliseconds. + * + * \param pTimer Pointer to timer. + * \param ms Milliseconds until expiration. + * + * \return None. + */ +/*************************************************************************************************/ +void WsfTimerStartMs(wsfTimer_t *pTimer, wsfTimerTicks_t ms); + +/*************************************************************************************************/ +/*! + * \fn WsfTimerStop + * + * \brief Stop a timer. + * + * \param pTimer Pointer to timer. + * + * \return None. + */ +/*************************************************************************************************/ +void WsfTimerStop(wsfTimer_t *pTimer); + +/*************************************************************************************************/ +/*! + * \fn WsfTimerUpdate + * + * \brief Update the timer service with the number of elapsed ticks. This function is + * typically called only from timer porting code. + * + * \param ticks Number of ticks since last update. + * + * \return None. + */ +/*************************************************************************************************/ +void WsfTimerUpdate(wsfTimerTicks_t ticks); + +/*************************************************************************************************/ +/*! + * \fn WsfTimerNextExpiration + * + * \brief Return the number of ticks until the next timer expiration. Note that this + * function can return zero even if a timer is running, indicating the timer + * has expired but has not yet been serviced. + * + * \param pTimerRunning Returns TRUE if a timer is running, FALSE if no timers running. + * + * \return The number of ticks until the next timer expiration. + */ +/*************************************************************************************************/ +wsfTimerTicks_t WsfTimerNextExpiration(bool_t *pTimerRunning); + +/*************************************************************************************************/ +/*! + * \fn WsfTimerServiceExpired + * + * \brief Service expired timers for the given task. This function is typically called only + * WSF OS porting code. + * + * \param taskId OS Task ID of task servicing timers. + * + * \return Pointer to next expired timer or NULL if there are no expired timers. + */ +/*************************************************************************************************/ +wsfTimer_t *WsfTimerServiceExpired(wsfTaskId_t taskId); + +#ifdef __cplusplus +}; +#endif + +#endif /* WSF_TIMER_H */ diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/TOOLCHAIN_ARM_STD/exactLE.ar b/targets/TARGET_Maxim/TARGET_MAX32620/TOOLCHAIN_ARM_STD/exactLE.ar index 552ae00492cdbc1ae00aa692ebc212895b939282..f05e395dfdb8b7e03178f4a021deaaa2ccb14ff5 100644 GIT binary patch literal 3274448 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� z`5rtNfo;HRR|j1Km-o9Mp3*v#)?3-OVi=}cpu+%QZ`;Z+$tbN+~{uhHP~Txxyp_qFZd-3+-7 zx{mJmwQquVw-$n|cNt?e4!*DL#<#9st<2!HWrkoClL}S_ng09QriOgKubnDpWhMnC~;PwQr=v?ezO-sJ|Ec<^@%sGyWeb8&#He64EUa)57tXh(17&TOb5*q zcoxVcCsG5M^ymnFwNi3u7C6+@ zLhXUn!0tN%{YJy2gsIAU5YR0r3>Y)GP!cKI{IMqF<%^z;C8^GsJ z97eaqTNTX>9E0iv?dH?Kbp!D3J?gtwHIvO3>1MjwEb67H^+sh7{?P4&@$}KuxSf_d zN`K-O%}=W1gZ7c|x78Ls?4AC!go4Z8z&&!#PfXJ{q<$->UoBeSVRUDn@=iVPPh8MY zaQU0VCv#nJWuJK)>#^XhG!(wKx!?El{yJ6o-e!H9WjDmfvBLMZiMo;gkg4(M=P=5^0(mf zw{?&FIwT(h^fN)>dmFzEZQI$?*^}JUySpd*05B}|Jt?F*8YQ3VXp;ock8ycsiB!z#0(|MllXE;kw;ai*#?l-nK!ne419^c}g%=25E`HhX^6}PZ&appI+ zT;JmOjZJ^s%k?d;H_vZze+u4%#`vmt8JpkY-W~BRt{tl|Ztb5)X@j@mTO7W))yt1= z{{KXMeN$5tY~eO+O!yz;rnhyA(I^q7?Ts?37Q024W9uf~J+=cM3?D9OzqI3(fB)}S zcE9jSg7L*2GloQb-S3>-y6n3bbj63pzJ9?j%Ib$GjSnsQdVGo8>(eRAmmJ?(a_YJj zvpeTVO>xPrZXbK>@KDQQvF>laTP)Lgl!%X+ZgFMl_;2jt()Ky+ammvqS<+E5B-YlR zIyuzwJ2mZzcA4upPfG3gqjU>*Ry(DuM(L_$>8e%fs)yDDrJF6aSIgt$DBU2mpUR_b z$A-psu$|^~h*kIYJ^7EKbWZzYFbax~3z zmM!t>-gwQLRY~cCi!y#6&rU|xKey|8u!87tDl!Om}5}7DL@% zpR{sS7F9|F$f(p|M%YZTCC8%E1UNqR!9G{ zKH#vnj}^tdSaGZ*HX~LVD~rWqGh^kkS+Uu%xv^tj?EPNs177TdUhFn6_8~8JyBE8| ziyil3cY3i8d$EsrvAew3N4?m`yx7MvQ)f2v(1ADlK5Va-JkMpnHv8Cd)bV`xF*ASu zh!N7|X!eoX1tLAJ5Z%T;G*yNAdb&+SRNZ8{W9nTe3C%MVa0b)Tl7M z#h%?!nBJ1RqH7odC%|2 zbwH4vnjoSlU+ddN=-o;y%&{P}(IK>of;suF-Fthbm9lC;PDFtfcXH=OOg`D(b{(fz zbnU*rd-wHid$^Rw9+PaiY~xgwz=D7Dz&l~|fTY6ombMKcJLer&vo!T z2Uj?_Qrx7R>uwC8@!~rGer>|ms5w_(QiOZFIg_K|H$S=0mbS}pA zXdmz5#o{^jF(D@PEp_-y#gj_z+g-;Ud0c!7a(o^y^UR zT`snmH{5-~?%UhiB3`k!zhkZmm8RCGFKUx{CN%z3a9kF- zzW;4t>iY`^>-DT!kiNpZRG5=jcy8}E_{94BGMQ^S>+`9xQCuYXYdV)7@%<8%zf%a# zmngqUt(gp`Bv=Mml*6jOoAIa+*D;23h#|%}4it%bK0S~p8MpXrKYQas923Cr@Yg)? zur_cEn8)#YWPVkQaj?vH!uR*U{JWSA<-LrN|3SvcU*~r#G4vc`jPe{u%>3_S+~Tig z!~E|iM*jCOM*a&C^Ej>*!2IhKZe$ES>}TG7AzBzi-*(0=kRj%A^BLnf@`xdl$6bwh z>4;hr8^^QUJboYJ7H|;fI=%yP=F58XIJURff`14#2^DWpF&(rc)Xqh9j(Z3?4)5+idIMR=&E#BBPa?t_h*KBu}UqM`Zbq34yaATqoX$-86*FlQJnRMQkk~&8Ll-Pi0=DH=!<35bK1V=IqOCb6n- zh7ELdVkot~5iW2*R`wrkILzBsHRMg|U#3B<#x5iz0X)FlsdedA<$P>fE< zrH-%fPiOT0p44y(b5#W|IJj_{NR4N(JhED1`7D-GK8v-JgOh5lo*blNjpQj;O2iVu zd0qQ@$>tz~4bs-cUmw~UhnoDBgha2l+>q4Y^ySR_!2=un2b!9jL)Tl*!3~|OAF0`A zN3OXX)Wf-Yd)2DThCJWV@q7*fW?opu+r1M+oau)3I4N++l{_>)maH|rxK%aOM@bSJ zBPETIl0=jw$5PC>2R3KzE2{~HbKVCm$WPZya2aV+3 z4_-eNF$R0fE~s{j3p_mloUH+lrN=VB@fStr>EfmFbG{(5{@t!$XYuz2pP_Zo`yclF->;g- z=W;D0SMMKlc>F!0k1=^~cX)X84s?(Qu?&at!;rrXwGKQ&TkCS_d^;W9DeyigHTeHD z?=4Qg!#GaM$kh2Rb@Yt^GjARAF?iKsmG2Q?{9Fox=KTXwAPVZS5E=2em=2ov*GK>_ zSVx%eQDR8r#t_9DQ#}5jV~FBSD&9<=7RlpzWS;spd6d56il^l|cI$CM@$`9&;&Gj5 z=Br_u)AH7R66FfuCWLNAB-n zqdpIEh6fQ>_`CAI)>n>nQ{NN7tOxb+XDWHzUV$=G-&5c%M7j=?G5jTVOnu)o^x@}k zpzkS1AK&AxkQ)4dTHl8OO?@#m5bMG6;dMcv?>P2(Oeyp*ECR2~-c!S`v zzO*@E(7aLXoB0ka9`oh6soP}``^;CjGuLUSJ{`2a-vP6-U{6h-dcm_`bmBYye}F96NU>J*k^G|3&J~5_?Z~5bkID;;BknO zVWM7$U)BJz=JB^sSNg`Ow%O|=Y_l61n;NCf_Vl*dCs{$mHoHr7y0+P(;^ES(TV5`? zT&$pFYDp*dmoz3?`zjvu$0d$U6%Pw(>nxU$qiuq9DzTJ2Uhy#HE=wQdb66l<_gpb$ z>_78(z!`*}!=}$XjQV))*w^@Nht~vct;JC5JLB!gcf^N^R*2=r>3I7+J7%;$_~I*X zi4Rqt@>Ue5#d4;Vw#SFWiZ$&%BR=$gc~m{DuKhh&0oQAbbLPd3&!HT<(3P;}EB+y9 z8Euj|zVTXeW&CEtcGp37!yv}RM?DsDIdFIxVCv?8y@>r{Y5f7mNhCE9v2LcrGD8lF8I}tTp*j1u%=yCy0DIQ!LRr`8_(o%n7ul(b!`_6kEJgM%OqL1`_4#<>%uzL4NVR8(loqa zcpMlC_ipdpo!r^h)6=@6V0hfQ%Qw9a%+fKx6-L#Z<+`)Aw*xCLU?By%z&|?NkDbFu zhBN5{w`5YufuVk`N4D<3c=}u$9v`&cpA`ukdk!vkaETbe@qEqhhZ09V!@;EvE^}~9 zTyK?Uo+Gbx@InV)|do9W7XKoL@8U&*^XwSn*otxG+U2=KJg;8P`|s};JMzWi8<6w8Je!erwRc(A z6MYJ^f77mZfstROcZv8{Lw}{WSbSW`*?yJYJh4v60f8?Q|H;f$sPtBeZ&`S?XhQ#G z633wV=&#zYm7l+8H~ZTV>O*KZ+lPV^^Ya|>Hih}QYQ9${Rw>NSN3@&$ls;HuA#QT; z+Z?>jz_eSfb#RG;e*(QakpBY>5Qo{h4xzoMf}fXGc$MO6h1qN?yoI91!WT_z2Wys> zcCco7iS_w|dTA%C&zHtVb&&MpE1auU-s^u`_ueW*9N6ph`%C#=$SB9;MYjLa8?xz~ zL$ws?tOt4geor3H19>`~pPR^Is9CP!%T&Bl#hes?KzmP|PT^th0QGs8kjdj2Q!itl zcgFm5%9wKk7{?j!_w8=IZhtO?2jl6rOveP;dd8Ue%DGe2znL*kN(gLrg~@r5p!IjKWBa_K-NCFxo}p z28Gc+60cVn?Idxd!e}pvuT~i4m-rfmQ4fi`6xQ__RPEZY>M@|&>wpkYEj-}uDn=wc z=#}jc{%PBl4)hOW0qldLSsRx`JtqNm^p6YCWC{gyIR}8w0CHvG3m@Zv8+r(2@$5I%t@Nnh1ix#S&rj;!@IMwDfR0a zekz)dj0|JdKg+z+I#o*gX0+@~CI=?_lVeB5VJMv*&m8F=7N%*Yw2?F0infceolDg7 zz{&mt>7$8;L^65wa5_0K3?t8E2KL1;^E@~znNtk|akxr!)fydX*97LN5Ni!7}_52X4V4>WH&n8W%rlpAUN znS-6%`jZFdvi|htXLlWj9~}&+(~NZy&3@iYGFkf2ag%*7QW#>9$)=RuINKi52vMe! z|N5~!JPi{{mR=3_ub=Xtp5-K~a4sw-13e*@lNmgaoJ-3|KA2`LC+AhpUwFYqi!NDw zj;$sa;o-OlIjL6*@|lazy*lXq*$$7-u3AQ}-lvU{sgKXLTDQrgO^M0d4q+7uDrkK> z9Uh+{`TI-2*XyAPPpojPdVvq%6huyK3{ zIEGD^U&k)*QN`136UBQ{@n#@qh~j-4GUi)G5<(R3X~@Xq#-Mp{t0U*#$wd779=6%o z)?ypPMjkhoo9&`)(VoZtc5FJ3!*C@wz6a1@Ee>KkQ{R4UTHhw@%XU@`+5&)|LP40) z&MM(<@K^_(htBsOkgn6H6xCb<4&KuS z4^1AK?{fwZyOF$?4BpBdyb=g?yHw@iEi`!Y$roJqZ?|2l4Bo07`Wg-1YJ-Q@q}F-c z4qiRdcz&x59+E9y#?ZIM;JLPow}DsXfuKT>ig|A=)`^JkM^&LuVtwEtF$jHsxHBLrm$Iz zS3FknaLbUWjy+!Sm@irMxSvXPg=ELR%9K8^AX`@P82O7HFN%-tu#Xkhvyn=!z{;%5 zPsHPWeSNXXy6QRK?U>y6)oT`uk9A{jkz7l* zuaB73vD-Lb+y|m*22=DZEJ-<=g;9ayK_9kX^gP-1-Fm(n%YEwSbYv%5uuW&u_gXA> zc`nWP%=+?o@^tlmwesdY_05>~;ymj8YV|Qb-!T;I*iOTa&A*A}W5?F8>5Xm1=GXMB zy2rpk{B4bc>o**%f4jgJQowcV2FAwle`0Jnok>n$rIhsO2Wt+Jty$>>GqyUKjjY22|Int;)7AC5TXN+uHBL?6khzYo8yZNTy@tBO z{gXFOjGUz+Y2JA*bkr5r&ur^WN^^!fZ95A?xVl5Bk<@tFAC1qrztNJxYdhWi3TA8tGq!`H`e#v`r@Wz82&80qIaX;=_Dyzh;qG8336 zmcsgchACGt$WLTO$NLZ2*Adpsw8(|^GYjiyV!eooy2ARIh4nKN*@Y@QclEaI*|WDB zlOLt&m0G{DvtgSFyJ1|aR~^Lyp~}=0wpax-w&b4PDNXfyG-DGl@uhnZiX7}YxY)rZ z4xZuQQU{kgIOgD)4lWnZTjg6U{>Z?z+xmvWjA&Q(yM~-!J-%YeJxA_|lSCJFmSK_QV>6+23gA^*GKi`TS-;JFK6fJjDEdK|8GftuWuM)9&gqh55dlc2_4A z_K%N=_bcq@KT{l1xJB~IMWxCg5XYB`7r3KBnBA26d?*fCoxQXdo{Ud5tsklnTtRzAWCmS$cp<+%JKΞI~rVe!@yi^V~8<6{78&R6cS_d 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%0DKpAoJv4m*lv181XKaE1;Nj^bPdJ;v3p z$|^`ZR?t#GY8Pe~iX!KRLKsp(?rR*t+nX75pFjP|? zo+B3!7k43&$>e#p3tQ8$OVAvn5GT__ZKhjacnr}a^fg>u5>IfVD)Kb7aflX<(nh?v zErJ%?$|EzV#pwDXDqH`?fZ~^{)%EkkDhv5ED_GjuQ5#7l&X27{5#t<`wV~R|RY{bG zD!x9GmEsvxDV+6LH6YZZb;hDHpkJsULRI5XOBqseQ44}4TGgV?XpAbXPdtlDQda9@ z$(}AfHaTXYs<>3EQX*9H`eY>8gVQmySL+ObNfpBtD@d^$$EwBUk*>&!I1W(6A(tt& z3;Sl$OpH)v(I}m;8B0`lcec;(?1(ndQv#gjfk|{%FnCTYnnD}8aVYXjbx~JO_sUpV zTN?$(DV~&|n6BV`tOjRdG1Sdvte=OH>GIgeSdilE4P8sgFEahy9Q9G+Og8$FZ&I1pAG01CU0DAmt&jCa&!;-+@qv=~uctrb@I42AsbNcA&Q+eEb zA5pj>k-)<9@|yJZBp5`WrziWNRiR)}dpNG<{-RK=S`RL;Hr%J`WodI@;hY(do9`%waUcjf`2!%WD>l#wiDXFzguV0NOl zCmHQrO*e=#b6iPqX3}{cs;9t|Io;iB!t~UiZo*e3T2tSHrOtOTpN_aLb6-RV1R54B z3Rl&attttG0=0pPz{0@%Kz(3VXi)%%X2)j)LdzO(Xf}a*{8>~Ms0{_mPOUC3UQ%5W zTvA;e3@kgfIv5Pp!>1lT_3)_*g+lmyPGCuWsD5c_;1l%?3(FT)IB*u=g6hEH`r5Mc zP#`qFY<8e7boT539RW5w5GtErwW?Uihb%G&gGKb*SKUTSe z1_D@xz|q~zQyx0L0^tVoxU<-|L#QZ5HV;sl-yk;_T|Up|2cfEO_cItJ#o$Vs%W--pgR|u$ zQGu6iI-0xI3VNd;j2nemcM?4$ZoWDqZ34$TS9GtcizRy6V=gdsJMyYTw-Qp1Bvy9C zJD~!LWq2nc99tvM1&7;kBj{MAPFF+`vxJOZxT_oHTEc6D{7wc}Og%};Gt+Qh#eZsAS7z!cC8OHWtm zJU0O44AwDc)y6w&BJD9eesTW0gkZ3WYF~Fx7shS5KB{ebB!-UkK})cJCKn>u>KNs= zntPg-N?Nd9LhBaU(SyNgJVAGR;du82MzYO5SvORtksF(3-Azw_E^ry=B7%2e;Vz z>td{@B#EwG2O=)s1*(sAMAcW^wstnt_xU|7GE{wgSGWEW*I!g{21RvobA4L`YmL-p zXkc=gA8{5%5~vzFgmf1)$IU<~C@R`@V(_gw(jn;;?RBx0xFyGmZH0c%NeOf^E7~h! z)aAvJpis+6Mbp8C1`?~_Wzkjg8)gu4VkVp~QP;D)S!S(VBalLPl%xOYc72?zM>sP@ zDM*3Hplcsx?@oGjWph1H$VZi%Y@bI*Sq1Go z!_6vKpC>{YLiHKxiwC-_lS#QT1IV;2nx%@=T4}ZchH6zjOM4ktVEuIrsAjq30avV4 z$N^N4zJZ)qjWe{Y^e-G3k7W8jU-8cyIdZT8$xy|f?hINFe|Xc6BKLW6KfLr0m`|LJwi%yFW_()a|1jM@-+gYvGgq}fCE&iu>u;z}nCu_5 z3_xk0=WH}TjpGi%dCu0~gB{#G`AjM4K14sDQ$OqIV{4$#^af(9pQn}sQRVkgZU8zm zJ$4<4nk*mq4M^pHo&pX;bJmZ5Gbv5?K3fL9(Qjna#tizPmn6G1ALt7v zSz5{Xu1J7bsnIRTATF!ftc?{cK~v7Y%GwyG!w ztVp6g!)uukEuR?<*VQeSLcr3^c{c zAUAHH-+24VAKk7{F?W*)KT1 zeLOG?bk8?X4Sp~B$lsCYw4(oj{v7x@tonjw?u>!*XMzAA3IrfB6y>YEkbj11IbgPzv&a50qF5- zcn1(Q-@)fVbo$oZ15nz3z3ju_*34T$uPprw8|mL=cXo)-FaD>mOzZ_c@6zP|rC%I) zeoxR)<=6HGvdMy33cN84L{GLgcR)I`t+@kH+NWOjNp<>42|yD^o#?EQcXl3t!tkb2S58$ITq3h>|alOS(hbhFg&)r68+zLFAO zNzhL+W45nkrmqA)+e!c0MDZM7NvW@7hOeZ^PZIRagP?C71by?sHw$Kp!Z`i#!`UUJ z9UG+9VkbD-;z7ub9BF$Dx#I}lTR&?le&CR#chr~QCmMkCD?Ya{`7R-$V6X%4q7xmz zDp5ZRi^gc5SN+Dkpm*^_xI2ND=@VUeJlCA)5EKWzp1vs7F7Wm|Z75QYt!D8%68hnw zd?we=rY+vqm+DpAn97x0FH3IJ;`Q?Xx!Sw2eT&z2x*xkg`cCVpok?&9UWb`v`vHHI!9ma1EJwHDzY@{EGP3ufF zwqPrr9<=Jl%1~LulDbeBzg}rfMzEbhGSS#jR(DpY!Py6?Q4Z#i7UFk^KEK2atilgc z@yks8Ys|t%*G|fi$C7KxYs+ga5QWl6oBYXHASwb$QTAD!RUm)aC9K)l+d8+rvm3wg znzpEigr%Wv@3eG4goi*pw zxu>5wZ+>~GazWL?>YBx8*EK9%w!HCUO)H`;t>>NJ-qF>aT(#!Hb)Q&oebVZ+K4o2D zecHOp`mA-W^?7T9^(E^%>nqj`*4M0?t*=`ft#4YJtnXO2S+`r8tvjtP)(@?%){m`w ztb48dtp}_Jt%t1b)=#aUTMt{mwEoBXmGx_DhxMrSxV6)I!up-{d+QI@)7BrYXRYU~ z=dC|mFIa!EUb0@cUbSAc-mv~^?Xmu5?X}*r{$cI2{$;&w{oDGFwcftOzSQouKV@HT zUul2Zz6!@XU1ML1!=Juje-TGPU1wj9gSl?7zh>WL-(r8=-e}*7gS$4_-?6`If6u<% z7Uji-!6F<6e2g{0J_cEdZIgsW#|DqFY&y-GvX+j+&icBjz&QhQmNYQyZ`qJMo zDDd)R`D+qf&0EQMb0O2ZiLQB9V*7H6r$36Ry~>Va14PwM@Un(zTu2_1JkE@yGDECx0Uo61)zD`81FTtf0;H4SM$Egcoh(& zyt`00*!;}i#|%)k2hBF^by>Cyzz>s z<=W+T1B!=e%FB;8Rq+n%hgYI_$kvSd<|>{p6F<9jb~)t>bsBW}@v0S%`fa-WcnylD z%h-?CsCc>!`|+ZRM`tL|<;QDNyn`K@FE6QhbY>e}e)`ra9-6Fi7=-8r zZ-EwqslOJ0NA=m{1%UOXdEY?+QC{hGunGFKjJW!H42pD_lmBhtQJ(a|2#&~*JmOxh z+J~(aZUwJ`0;o&t+l@1bO?~^pqp~1S5eT{}bI?71L??R?83Z8D`q*Lo#!t}Kn`fx;&tM9{1U(zRj zQ<%OD;89zn{KL_WuD;1i-!RyqYa@8N3(xuZ|%}z^2Je`uH8eJ-Lc^5xRXl1@*M{rOv|%5iKoN7 zi~+zb-vYxfj`nozz6c)GZC$=a;3Y|sy0kuCuQn>XXENS4X7@J3?g+!~{mkyY;H8_F zaJysC;Zl0%GrM16cE^LK^BG5%y6N4(>`nzQ8@s*AZiw0KW_GVK?Ba+_*KQZHdjoh= zl`eAp^7&z9cLB5eQD%3CVHZc)x^_Rp>^=uxfzm~epIsWrDW4ZAuI9~UcJsi~`TTcO zQsU9)RAzS^c)dy&Ia(ht-y4+O8pYMTam?;U!!GVoT)RgyyIa63%EIn0W%q1mmySs? z+tF*_>G2XrM!9xh!Qe~nNRMy(z#E&!E{;j{=o01WgY^@Bg)`w%cJo>IR^x>!~S6>a&cLR7-5A>z=)iQmz8TxS4 zm85Vdd)rLMC&E@J_!t^ck(U;5gwHo?xw3n;z--xuC-lUJd%}ASBUwRFFI2z2=cL&pV zt&hH&z%%vT3?B6xG=HI^)uN!f)+Ub?>Ak4c=VZ;KJX<5Bin-)`_Iy*cos zYa4i42VwpF$KX+XG;ce2>FPm<*(DyLEYne7*j>l$?(nfYkJ;S`UVtK|E*-yfS^g1E z=O48l;?bv$<=@jPeq7(_Oy5g}K04w}>nmpZb}Js&NBxdj9{UV^bflfuHI)rVr}f`wqfd>=rrS)|%ed7&%bOfH(*Ua<7VymUR{Q8nFn!AmeKb~SeXUGilaIa{rmxM= zM@J88edSDF(nnu_>058;qazEozN4AGD}40r!@SVUzYT^y9KGo3dmTJ8|8DTnSIpY^ zCPUv`qrIJ^+PNOjH-m>LyBFD_>sKs(_Zs?e6r>x!hgkf!`^4`8rf-L#kB+?7`Pahq zJ?W$Gh2y;Wx69CnqqJRpe*n+Szt_M!!%3q2tJAxk>6?oAmhP`+8v1_B^p$|8*FZ?2 z);E%+cY&dgj`G&&wOM*=!AsX4bh7w08v1ZVxT`P9;ui(4GEI8FgT$Hj?>0jp9VxEk zcN2JK{%!Gz-?1!ybibtY4@Z@|`bM$%Jq(_{_b~Hs0gK-#OiHxAX@3Pl%)cnp_pqUFhN15xOy3UhFci9%uFvI6-*bk(5<}l?rtc;2(zTD{n7;jn zzEVTq7^W{5nSPWTyHtC7>sW7jj0aEGmvTejE8v;s5diP#H2NN4W%j0yWZ=<2F%+OcN^xX#D*=h7WgQsK= zr7jej&cAtvzQ@5c^Dhs)+EgehBes$-K3%J^xdPzU&sS9b>GVDfo{l@IL{`g-r}q(M_kJbUVa{Q8cN%v8 zX_VU%W_MSXc3)CDAJ&M_-#TOlSQt6l8T=1y=ZD)308RxC1Bf!)3 zYQJIkCGe;&>UATxIu{%|STs{kLIv9kaVBOS`uzyH7B?)y(b|!|vOL-48Rn+q1O$u(JDmW;dVp zlRFH%mQkPcSU>q3cng#+au7v%@&0P^5l;JkTFG^r{}CRPoAs&)Jl%dzFznt1o>{Nv zffrD^$kF<^-KetrEVE1RC75>G47<?h0mi9eCM{3!9YP=b7Cx%l-)O&-6v5I&3xW$*ge{?`viDqK5qjr zoAmBdcK0y5pJ#SoGwhBt>|V?4?guZM^iD>9L*wsWX7?e4H`7}Lo-W_rMt?==Gt)Z{ zJVeF4{Q8XwW%nPr=B;Gu z-3gvf?_UkOF_zw4;AtJC(l5O)DZBq>c4srYyA8XC8s%Hc?9${u8@svSQTfWuf}_J6 z%26V?s)KY8cD7G&hxoI+0CIs!lmuLj(*21-^qsEQAT=S1k!*=@+u?lNWfU}m?2*=;iH{>{i|8mG+kc7dnUm?^zU zWp@O#dkq?mna}GCyKfqHuLjSwdlh)u>HQseW_q`SmrXuDtn41a?2bZanRa&=cHc7W9txgm_c`!ZQNgN9 z$APz_Ww@`R_B)Q*y_Kc62|V3?PcriP8!WwD;AK<3NoDs~X19~sU1!)m*|6Kr>|O<) zxqk1L-s_az3C!+XX7^^p?qtL6sm$(X@U$(;YWy$oi+RtvU z;!R_AzpwI7hrbHEqy}&mU2vYjdSy1eWR|>_vg9>lo%yOP;`b7GJF?(y#dD5q(lHg! z3cX!-dqf-+0^IF zS@HtYveS26mb?*#+38!KC2ucy>$7O*$?4hg_JWs9Jy?fHL^gK!gO`oI-e7k6a*MOm zcNKWq#Baom?DTB_FPnOmSJKb;tJ={9@Uqf3Gdte8EP1=LD!hi zuVi+1`Zj@=O+A=ACp&#NWXT(KYIgd1!OJFoxmfthhSv*THuY+s4{tS_@3zfNzdl)~ zd8$5N3m&rCy>itzT62|i8O3`TybUfZb+1WlN+z%IbnovuwZ304-Wng?d5pKgheyxc zO}m@H!_ewp+U_BY_oNT+PAD_=(Mww6U2UoKp3QjUeRz8i*3>uKhj%06HTdu_4e{vf z0xysze)PV9w5wzrz|(m_Ui$m@8SgsqqPWM_m)7wu@Q{V>wf}6?XY_$9;5i;2(l-j9 zOTfdcWbU=@Q$kz^MDL#xhdz1uL>X`F<&Hn`u(a>;&S1Rp;E^5T;Zcjr3ozbP@Wv_L zaD$h_col{|ikFVxbGS)1)6oFllS&`?Yu>$#Hx+{=wIhljt%qpdml-c=@bIdu%L_8z z4d6WtU8HZM!8?ZWqMuIXA6{j1_2n>L8+bbZ$kp+C4ZuwAIzt~+xV)b-UN3lvqKqH1 z*5&<>@kV?m6+fz8+AimfHF#q)@WvZFEUo(L3m7~sb^G$B8ayn~`|?T*9@Q_ubj&q) zSOW6pRTw-hP5APv4IY*fe0dE9kNPdY_%#~5<1+A~25&+JUYo(gExoVZq`@o5z*}eV zCK|kNvU=5P@B#+!O2)eiy!DV%JHoA@Z~R7J@g-03f(Eah=^JbCFtzm6H{Rf(yL5TA zOkcp@VM^xmc>9=Y@G#YKdGvm$*?vn59;Q4lkL#Oj@GzBedBd5$3WJ9!fXn0hstq27 zSeN%_bV_FY8o+CUoXX=&gU9u4G4#zdcy}{>_ky=T>6>rxxW3%0Q{`K3@UCV0Mu4aF zg$y3o*I?+YGAMO%o!%OQ z$Mx+r^er}cW0=0D!PDtI+u(71dkuYc2JbJ2dh5%6@CqQO`qE(V9%Q`npH0=Pr3UX7 z##;wotJ1g3;C-0!c7dnUvE1ODz{<4c80JKo^+8oc`%uf*V8VenQkUbVsdw88sN zp4V>F;2}wFefcWmtuuHV4Bi~Z+hFjnGkDKqvTvsMHiLJA!Ml&~wu3hca;kru3|=?m z?KF5>4Ib~;c7cZ|OMO2!cqcJ^uNm>X$KY{&xt~wzyEg-Ggu#0t18=Osdnf~Myutfv z242A6J)D6z)!_Y4240E5`*jB1T!Z&$24021+nIq^ZSa1Vf!AR0{$TKOS@|{^yr&Hw zFW;!a`=i0T12?&5eQpC!*VAVW9@n?d(D$6d`xw*L3!d&LpEr11-wlSoKO4LeOy5Q$ zelHk2u5XK>?=J@LZruEv>Aly8-%AFM>)UDQd)eT{nZBou_`PcIxW3m6eXkk3aZKM{ zBYtlfJg#rV7gFu_uLkci44h_q$AYKJcaOp2`T~Z&zZtx%n7*mt>GIuc@VLGTL*H8& zc-01PpTV2V>^2y@e;GV(x6$Ceoq-oMc>l@3YcqHj`f@}|_QTw6(%|K0;H@)w!!z)D z4PJf*-c<%~WCq>_gEuMz?*@Z+cn01^gLkCC%V*_w8+ZlCGa3i!og}~fd&JOpbOzo| zgEu|{?`eZ~dD_4XW@g}RF?gjJc-sx$tPH%J25)u--Y$bTCj)P+(an}HWFc&BIJl^DD;GVm%4p4=u@^}D>>8VugN4Emx5uPg&EY4GM};Po23@(jEU z2CpImZ==BrW#DZwc$FD=+YR1X8F)Jl-hvFgT?Vfz18=Xv`)~$c?w3;aZ(#=BSc6xc zffq1%i!$&^3|>tJUWLJ1oPpP1@M<&gq6Uwi_4)NfNrP9Hf!AyB>ND^*7`%oIyp0BL zNe12)gSRvTZ@a-eCj)P%!CRJrx69ytBm-}+!CRhzm;2>Z{rhMJ-dKazn1L5Cc;{x| zl^DE_W#Cm9yl@6ygTZUcz>6BZNCsZg;H}8O>os`I8F(8EUNi%5qrr=1;B7H@Eg5** z4c^KOyqyNGH3M&#!HZ|$?KODkW#Hvrm#Tl~XW)%Bcx@SY0fX0`fmdSiIx_Go3|?mj zUW38w%D{^nybCh$k_N9k1FzTMB{J|f7`&vxOR)LwMuXR5@M;)u3wV0ozRKVo!+1Nv zTc+-NRvWz6ZSQ@>)az6AV2#21DdWvGcxw$_3*%KAybBE;?FD1r&oqKJPQ~xz25&gy zB@Ny>gLgZ=oBFOY>|SK>Xe>5)HyFH67`)dJ7n66J!MoVt!P~>T*Wj%;cpqZCM-1L2 z2JdL_P;~C~G|Ra!EqprAj#xcXEN=jXV1I4>#S|~EPka(be%QouKdc}%4_#+9hFn?&OiS1&du!wyK}_NF;Ot; zzEOAOR{rA7bpF@wyIYK{%XUjev`(oUT{&#eR3W}7W4&i;uGo_|?D&aA(#l(_XZ7~(TUvW-EO$?n=-t;?JE>~h z%i@R^T1FI|u(F^kwsPCcIY(^Yx4w34(e{14wd1R{@4KRw{Kgg?Bbg(Lj#lnC>E`aq zH?&VFO<5XUHL+>qzOA*^#9pMhpz_cUA67+ivSqsL1^e!knJ@p)dH{X&rLlIkzl|I; zKcns%QCW3G!4)#CYsKWT4_Fh$#G9{Jy!XQH+VahBtv_?vW0&4(O%k#UsU#Nv{hhA2 zUZfI~VNj};D%GyLhE?XR8Chvf&V2wj?t_kG&g9lB=Kbx0iQ;W*_vW|v?z!^Lkvj@b zKKOBb-@X1$=wF=ks4w&y9^ zlJRkLFDNI?r18o-*WXF8`t}u**O0rpeI8=B8Fj7;dDVqDuWzTik@o=b2~Nx-9fvIt zCy#hw$IJGp9WRSfm)z0RadV59Oq`P|A8Nh!teZQ;#oBqe|hmil_M&TpVIq)MfRrTK0qn@>Aw91PhR}feZo3u&pm=-HL;Su{dS+2 zNQmOLdEZvFn48g7y3Q)P>(b3*D@Rs7EK?#TPk7*#`nomt$*`imz_V|5sdHf60Ag&)$Fh z>)%dSN%5yO1E(J{S?}+6idQK&P@~Sus~m-rar$!NQ1^Z+KJ=SaKh9jp zPse8zanOG8RrbXcp58;5htFsNOg0~0<@k(A6D|b*N_=SjmFrvp|0;aOrjad#e>Fbz zn^PXH2L6ljp|x5rI~)FW_#6cpk7onCmf$lkjqDuw(;VmMG_vLJ|0q7kq_KA{{OMf< z`mHFn`yKl>i|zZii0kgyiN6zNyQXhqa?S%g_iY}PR|)AT5g+#evBcz8ABAu2v^yqO zPK(QyGwq*`iW9f*+uU?>J9_McoUsfeK@-M+rsF40mTmBj)l+7szQ;Pe;aggE?z@iZ z+`jL+rk(pX_VL}=ba2&QT25TK{pI5#e_5HkXT2DPkz{=n#+0UQFWV7OuzlaPO}h6% zLUBnE*a(H ze~9!i>BGMjqhSZ)qsJT5MO56lHRF2}pW_g>0#;vJ;J*?d`kn2~Ocsa#dH5U;+2XzH z=Q*t)rMC^Tc6f_4QF8MSU#0!e!Oc1?+SZ(kcmfA!W-upp;}KCGdsq$~h&{?Y$||W3O9_HJ zG{&uotDn;MReWaGM_OX@aZqGc)~WIXD`Uy%dT`T$+32rC+_c;>SUa*L zLb4pb0Ub4SbVi3uRzwmposL@}`zAgUQ6OD+9aK3iT~A)n+BCV+>3>0$I;s3N;qz^L zCaJJ_zG3fsscRlax(B@FPddJf&u#d8Xb|>qN4W3fL(elQ?t`&^2g2Wp&k2LDkFi|b zh0loxVE;!5zZD;PhC0yv$1S|L2OoN_I@t8zhw%5~b24=BdDS-fKZpfL0-s_|S7$F53nF7x1BH zuUz&b{9nRnRvOtW@Td24W~Y(S+7rENGbfE~H~jbDL(fuihuy^U`%QT7#fP4un(=9Z z-#fT+BHiuH&8G-!-JxSfis53oHQXMalb4%!P~Nb-;dyy^2j}JI9Ws1G-l4lFYG<&vfNMQTyB4sszMV!X8FDwaTp65`Z@+*Di8leFIjKG z_xIX%*?VYvoK7^{Gw>-pd|hwuWjUXEuhMSX|JwUt-z<0f{$A$2X`Axl{jyE%uYcQl zc3z*pG!K1g-g-Ol5+y)J z>eBFcr7q>eb`w77`|Ecnk28&tdDeSxbNIVtGu@mg)lT1?bY`|WboDoYI-@UV47{i} z=Q50dn21#6AAV8UA!i>>>p@NUq_0~;7ZnZO>-kM_!t(Co> z_qz0;;k~y1-`H+5&ClPh^+7Bbz9;hsvpyHR5A}&`>gz;&G3s;e;bQwwfA;GS^5KJg zkZXw_)CXrx^*zmp|Hl6Qzvceo{TSE&Tk`gUbbfG;`ffZUemCxEKIr5B|GgJ~zxsHZ z(|-sbx{uKpJ%^`@T<&jT3g^eAe)YYSm3Ovxb#}x$lBX7w)h#L@7;lSp7tAayDlO>g zibj&Lf*A#qSMI>ME)j#xJ=gxe!sUGa{U;l$eZ6`gGf zNTcxxU{6<9cPx=Oy|lEX7@o~tJ*Ss`8X@Bu@{W+StA#7Hy2Ji8LpxLyd(p4UKK_72T2Ucr4)x7L_fVQCwPFw4lDW5qZ#9 zn2fb|$*|Kp6OApgNU{f!XsisCH7uzMh37+8GSa;=mP|A@l+~RTY6#08Pc^1~LWM}I zYKgUXMq{V9bmD!}d{NbbC{gaVBdZg5iN7m0r)b&?ymLSJ{EsBsRrZ(4>?h1KE?8Pr zJT+J}YX&6Q#PN>i zwjR`nA*hvMy!zV`Us>2%Fs*7*LF1(IQ>QPC#oNNGW===-rB8Wzqq5gHX%bk4^qH<2 zg86+q+8wetC6pfYC#~mn*-^5F_f20v<=l*Eb5&+lsvz;P4ae-aP9`#?b{D##Sd&j+DfSG{ z=X9e>?3XZoMO%8+rWPViPsF-c#hYW^DC&rK*a`VIfB&W(-T)M<{=I+Ais;tq$eOrQ z#drpK;+-y(r+E%K^mJXB4@krG_Q;ym38!8TUXg4UgUdpl8PlD%r5p1B#wA_*nVz;{ zWh$WQZp$8gbaY>EKpH%~@quYFJG(xbTJS5D7|jKIT4YK-ePwqHol7h-t+_3ZFX;>4 zpMSvNGj#}t*`AJga&5nnldS0jQ8_(J#mQKr|GeoTR@UYvSq4d;E-KX|&8*XO?y|Rs zaC#i~0+?NQ_rvON#=kxlMcJTcrd4Lv)YTSAVuI|`V`_DpMS8Q-H$Bna57U>>5$Wj6 z&~bHO*5BEDe$1!%63Nc)$V%@x*GjiSMy>--Pv@t?h9fHy$!^@T;D=<-N`k5SmddPsq)2j4WVV>MOl$_pt^>|_2ES&;YG6s8EksP;>FeF3(Bf$!gQ-? z=1IEoHeDZ_E|89&yeV;knp_Sz09SyU!a?XT6B@2>s7R}#xjhm0Hb|XhDRE=cXHMZy zbHijxeqZf8n75>y1XP5>W%c!;I^6BnpH(oeq9U}ksyq}9)zvMo3)hx4G=%DEP7gv5 z4lkM?!e0d{YnOy;>q7ORng;2k!quV*R@E$C;&`fC0<(%~1J#Sqsa<>y>{cxb)kzKM z?jI^rb*pp5dAM(s5h-6(UsWF_t$-?6s_tu_>Z*mIu=XxVF&7!%mn^NSM>?0()Gw)} zsE1Ib6~^?}6EUa2bOP#YtB`XasVQGzrXM+3RaR~KRMj90>z33aTRh&yj^ybbm#3XB7hLRS7H>goD3n#sp7d^p2n89svHBc*?&};#p7m6)_xSxR~J*rmvLYISkKb z_)Lc9GaO=g0mBO!u3`9Wh8q|@hvDT6pDXj1-W_wUbD6wJ%H@y9C83GQn;C9lIL>ez z%im6hFJL&qa1X<)8D7iq#~Hqe;foo*gyBmWzKr3^8NQO?&oF#7!`CqUIflQ$@D~~W zGQ-z1{8ff;WcVhAZ(;Zwto&}3^`Su379nnB@=a1s?@l?_CMN$b3;$gvznz7@oyqTD z;qPGbEiC*NCjSu&|05>9n}xrd$?s!$8^b?g_-73Ng5gIP{td&AG5lMGpJezchM!^h zPYmy3_(g_aVfb~1cQgDZt3PusZ~uEb!)GvjCd2a>E@ODUb)C__V?(!hu2Ptu&E??f z+!cnLp4P4N$ZaOKMYodEv&tO&^M=n+_1ZZXHAlR~@ZTB!hX@+>DSp>XaVdE4XbCU2 z8O{+)4So)G{@r}C89rC6GH?z~tMtkb5~UvbFeV=+{ysUSF9*Ld_l6%Xe(#azF?pW2 z$0I+O$qyE*J@R}e&le3I`5{bxh#2jWk6`i<;;$!}@gK?LBgNew`JqgHsJPA}Ka9x_ z6Cd-)M=|**F~=hx&E%uS{#0j(+BAmA$A~99^23=N*drgy#_X9dy zJRydA34aljUnE{t zo8>tAFJ|(K#iu>;OPKr;@nMhrQYODt1eKiDkaEOjOn#a8?Xgb!9s8Fv`Q@Tl$>+=P zS2FpP;#g1k&oKFC#C^2+4z9)cG zPWUe{`4>b?$%E4V7n%Hv;%p^9NXoy=#ZX7RKlJ zE^)4h|0Bldc&qr3hkrNYb9|3@$=CoQN8HEw9N#a#=izT-e2yO!mwEU*4>F@i~4% z)Oh$$GCs$@7l(NGPcc5nPm5nsLseIfc!u#gepYPu@c+d496v8U@8R!ae2!lb4IciB zjL-2);s_7_6~^cIRq^l9I{1!=yY%G#KOeX!|0u#29Z!+n0*Jd+^2LiynN5xYd{+jJ7{6e(ce=Ry=2n zpQCMzzs7hr+Wvw#(IfwiXf(#l(e^dsG-G@kZC@|0F~;lB_LZVb$%9DGX#0!eVPiZV zZC@?kR`NP2|D0%4n8w4=_Ls$6l^&WujJC1i56$;R+p9&wBTtAi9^4})8S}@{HlC*#_kW}9 z5^*yrQrBqvFl(^~A8P&eFfAo}ldNkzc%n7WgC|>i4mJ5FS-l<{u#WQJ4_V(DY4T6B zW_j=l)^3`(sB5$xv^IHgk+sZ&r&xI&e6sb_Av!e0e~$GP4?f(g^x)an;T~LSZKHx! z*Jyi|^;r*|X;pdfY1UC5TxdOeuntZ3kFh@M!ADr9dGL|eOEi&E7s|)_oClA!YCZT= z>z~6loAei3w|MXj>p~Ac)_R8;uDV9sqpaV0@O0~Y9z5P^^WZVoOb;Gy?Wcy|>KkW0 z+K6<8k#(wJ!GH|tWxWJm7c;o>QUsalP(^Td4$(=+xl_Q7JU!cKpg zFP3`nA>wck9wGK%Jvi0BjuiJQJX`8JRD4BYnkI~~4--uae@)_1;xvVqN<3Qp=R`-} z84`~XPby5sG{!z$-08t%MZ1T8gqW)^RogN4k>br0%=jH8zU{%|#5D>#{G-JkMt+a6 zh1kgO7Z|>R;ZHE!!SD)(moQw;@GOR>GJHJ4BN*O~H0X=c^9;jV4Llm(X|G&;5x&B} z6n-tk=P~?IhR|9Q-}bp4uS|5j}G;K#)GQL$3;ZQ>OVzE8YkjQ5l5 z*TvF_CO;&O!u%!`{uQyogLjFg9{i%X(}VvczTwgTrWoO||A-h~VCr8kp7h{_;wv6p zBYxx2|BM*xiSGjOxG`UuWbYQ(kidxllVYR?KPBG6cuDDd8lOq_xnhS$-(2wz5C1pf zdByLN{3cKT&78iPOidV*tW*O|owlC*b~&u*1JwgcUB3@*jyyJp3Pt#UA~)i*G6H z@V_hfI8W*SuDIT#e~Z}b(SL_{40cldJ8;LDx+Wpfn^F+*74H0&ye9(d`K`u!eyg#b z-)gMqw;JpDt;TwOr?H;jX{_gW8teI;#(I9Iv7X;)tkX&uyN$m?<(PkzEuYtrOZ|BM zcpFb1;i3bP?s2x9|L0Gz1x?rTPqgu525!KXX8`3NZ;M8S?^f>5l=~dHAF{*{I_LKW_r?Bl>*uz(QG2%t;FDx;F++SMG*+&ms&Y47ySn{kO z`(#_5abuUMbR2C94D%xY7!~g$Y|%s*9dL(oKSeG&%g>TK)|O`r*}umA{De=i<(W<7 z%KSLemgh?4kFy2k7x7T^BL7(Wi#_+hARRH~8s%QC+*_4<$g=K-&gJ(%Kff#Z&dCNl=}_GwQHPwv43dEa<~73{DsK=H}aR< zYFnV&5cVQlp4(_IME(*UW{U!HN7*7k?wPjCFMGcwrV@Ueo*2SC)X6XVFk8?(#vWng z$qw9HTg)RDoni&KI4p1hxt3Fp>~}0tOL(L$8py3s><@g2wt|@zzyH~mY zQ0~8!`)}o{o?}W5DkrWf!<2ila;egiKOO2tE)L+D2R9!bNej7XKi$e*ulzSC_dCjc z8ZNbm=g38Splb>a-9on~^-zA3KFUXOo0Kc_0qsiW1KNws2ecoV4`@&8!ISL`?i6|8 z7F;?ci!dF$L@pgPLM{&N$c1a)rRvKx)effGPJO9T_2t8=zARAnWu~ex^H_a3#dhk; z6x*pUb5(sgUDX#HAS&w%COh-UZcx>iVpU&?RDCJ5o%(Xx5Z9LyR$nHo`T|$i7nvV- zsQjo?`Ej;tS3gkx%as2)%72UU$0Sd-x8=(JPUXKu`8PP_Y-50tb{ zo5GrRuj2iP`QNYnY4D}+n*V_Eznl5rr~J1v|A&PDR}|-G``R^C7$y4gwyi2 zl)M0Z8|{m(DV-^QPdF{_R=ghNu2JsCmHP?h(xiv<^(yyr<$hYZS1b2g<$giAUsCS% z%Dq9kH!1h)%Dq*&o0R)q%jriyDV%;3okT0_W4X@3pHR40;q?kXp)kfj$^V_g7zZVO zQeljT68~OdjEfTgLE&2zeoA4ClTwb(Pxk8=FD3q?!WcItenw%8pAtW-Fvd}dpHmp) zslXoxw89v_ zBz{q0jAIh-QW)cz#4jj}aZTbk6+T$uJqlx-lk&eQjPXw5KP!xJPvTb<#`q=i8wz9m zk$9iN7>6YOr@|PIB>soO7?&jem%N8 z{Y(5?h0)$6eoSGsbBP~S80}i(KPZg$E%EOaMmv}IErrqECH}j@X!jEDRT%AG;^!4c zKOphz3Zp-e_(_G)FG&15h0#Aq{IbI6CnSDFVe}Ug|3zW+8xlXKF!~RPpHUe7h{Vq- zjQ&L8KPrrVMdGIvM*kx5OA4c(k@!yvqraic#^Q$@2b9Es4SU%XVyl}l_IC-df~*ZY zd$e?hmp3fU`n?IB2@J-bjg`Ac%1nRP@JVR|SV~G!yF~2fP ztAC(fNxA|UfR604eMpRC%Xy2}SP43irf9J>@#q=}y>@0} z4~?$+=17N9?3EVJ#GZY%vF`SGG8v0Dtf}o>9qV2iY3qq4LbbIEBemzHQCVEKsa{xd;b7r%@D~jRcoPu^m@3p1@v*73kSRbqj;DksHjrzBrs#K_nHr z9trJ=MboA;Sc(lyx=mZKQ(WY=;nVFP{MvT(iD3LbmBGGuK%y6V+7A(;B4y4Xs zeGr9Eg^?}N(Hu*!x(FGiN+%Ra7egYHMWd)fiBL^2hz%KQyE~Je&7Ez*pz?26+Z8LJ zKcU)%t!Z^28d^tf|4P#9h`PschmuZP4|-1Ku8TzyogF^)p~wi`Phf0|DQ`n)yEtsC zB-}d?XX63kHmhKE#p3d_Xc8_r=q;C&{|w4X)JB|kPGySROjD;Z7W)_SGOreU2ugNTXuaoeY;MDrsiDR9czhocgLc<3qY-_$wCF< zorKQ%&hf(@RL9ytkFr3gfWRi&W8uqN^fpX!0rE zj5)}GMe&ZB&JLA>bVJ==C`Ws|BLk0ym|zjrOVv$e)x=Y&8+Z@XY|hr})6CYrgaewX z4}q%eW+oWNhRjyR3Cd6y@|&mh(d|r9ya^k?Oq+uD)j7L7($-eq8i{u-ZmI0)klT0F zcFO%=6X(Q}t>v9)0Be#}YSvKP|ANh+Bj}WE#{A~xnsxI1GMOt(&EcHZKBqp?5}S{m zqr)XDB8k|nWOq-jA+pl#4P1UUU585^c>m!B&9W0I4#u%ppq%E^bSC31@#Y9^%;v_M zDnoHGI+`lb;t_2BR@>PYZ(h3ydp~o4wAX z7)|7;&sc$7jh)#tQXdMIw5ZOb8M0V6qFaxx&1Zx~|29^n4P6w*`ZX;hiNY0$gfsZ2 zT0y_F7|Od0Qz1hW3M@TG6 ze6yc`a%9E5JD*AQ7p&jOn!f_K`pR`;e;yTuxf+p~`L53RGMjc+w=>g<`<;FHts(WN zx1YJ#Al3H2e%?>K27CX|kJ?O2^n*+)-KV6vl?u^)PB4vt?p*qb<-l*e`coM9xi!rk zE|_NNuAdOutt$7UB+Xnrix9@FIjfc7{#2%!t7j3!h(&gD_kMKte;eG70`FRU7G%8; zn#H|uYdr%iUBNi&hA4KvH+w^r)xP>O$3NrRmjAkwf8EHa&|M?Pos)cAKH$YN+`T5+ z!{KnS*g2aIB_77IL%1atTd|_Jc_u{5@u#kC*?FkI{c~}9S{GVczaTyUcCgfZ5}Dl) z>OO&zw=0?7RdBf_N_-T@9YcteJ+Q^dT}1f^HD=R><{CH@lO< z|I!DugMY1ea3QIm9%#rcmoce}ewS1aKGvBh2!oGuX1xQCZ^nUdV7cn6iekkcn1Aph zK%Xby8B4a$gY`kYDB)K=Tz9&6s_~RC_0n}cP3?GzX8ow#{h5bHXVoAQlzKWZi{VZgc=OOWyt*K=|yc z%K;n6Sc-$z?w8Yj6!z^%s{ArP`!}=G_b>wqKd8(fxPgIWe)ih4%zWpibY~9i|8&if zyJg}$F7kWg!^i`9OvQp`ek>))Zk*(jh4i8}=RRX_eLi?s$#|`}c(BhJ-0b||U8O-U zzsUJ?#w8yAH6!l?+W0Yu&tg*PY`-PQ(wV-JVn4~uIlhuoU&#z#Ns*tVWR|a_#8(pZ zlg#kVgBiYgFvB+wihc8-*f$S~ee*vA$`+tV85>N4y?i1kSSRHoD;Q#i^ zjVuGa4U)g?>3!PCf)4n%8azA}d-c=N?0+VbDhBg6IQ{$z?0?Vensf@U-`koze~hQI z&i#VluZ;fpB+qyo)$<~1VWT>hqO2CX zqR1CBg+;sO<(7AL;}y(li%JSxy2L>)62nFgUv#jYKWwx$);`J_XB}-FYmK)iSpmx) ziEx&kgI)V3<};|nHE`cUA6 z6Hl6a@|07iPAi;V6f7<&oi*pwxu>5wZ+>~GazWL?>YBx8*EK9TXW8h{m9yC-EG}t-DllzZL=Pk;c$)^DsG)??P=)^DvRtS7DCTTfX}ThCa}T7R;hw{}@CST9;HS+7{HTCZDgSi7w~ z)|(c#&nYi13>IPI;$y4{_A$r|yjCf!;rKGfvJX+2bEvcX3{V!=t>c{iL5C@B30&HH zO<(%^^^7M=P?O+l-ZhLz``l^WMAy79HpZcNYT0~zA5R2zIXm274^qba800YFUYhqu zq~6rG3Jl61eQDnHjCU;v>3C}xkM=91y?peg^(|$*tsoQ_1)$TrkmU=uHgfZVbZUK* z84p`prRBYFlsCQ4`S5Xf${_{}wY|QH~I27(A`-MwVXMUt8BPqHEr2#!LF}hB3Pr`q+K+ zU~j(AzU-rn_~~>MGP@6hr)6gRcBy@Tb=)8E;r)Qw-2on=>|Q#(8y#NPCza%B@bd5- z-ty9M;JjUmM|})ke!SNdPsi7fw^#9K-(9-=c>5Jk=b;}j7XnJhVN#pFz7dLdP(Qq} zil^;qm*>lP#iJ34ED-4Cx<@kTS= zv&c}&dsJh2T?Jk)b)4z~l-Czk`_=7~csi{_(7fNP{y^*7NctQV@~{4mE&7Cx3kfzs zKy|7D{@9LAh9T}6ZC4rI0?(@`fV#B4n_$<}HxCVn+9c`2w!N;t8&&+Ug|fVA!P9k_ zJe0R^+mZ5U1dsBmREA2W=`?0HYS^W1f+>FVnZxWRv$VTj*`34e{uUL;Oz#zjU2F&K z+I<{6Do&l=>%h}_Mk@W%dxNq|^CG%*m>)2^8x6bICfc=o2eZ2+OS@Z@-7_7tuHDO- z-ED?lY)kFhy^Pu2k)_?8%I>9Qh~pvsHa=MmsheO{pCI?Nx@ahmmNEO@#dVViH)?o;5I^(v61-O0-C zLT2|SX1B<&i*3bSyEihs^Rl#Cq3qT$yK9);YQrwJF?a2*Vs;y|wA-ZYp3UqwFuSdW zU2L1~+O1=D*JNpTowD1&>`rHPdkwqTrrotWjoIChrQPe4-E){-I#0x`S2r7Wu^qf? zm(Jlc>(%Bg?QT(amovLjj31`mdkwp^-8|KM`m9jnjP55N0dJSmMUHMCyd7=Egp=CQ zxr(cKi^=-$uhK=1*2nEu!zkHpA`&jmdlnNKGrbKUX}dU1K=O$D zNAS#ij)JFkkUmi5#qG8#yUj|j!)#=By9~QHzQDEnb!K;cmUerU-4UAr?>y|R^oo#3ULH(`rrkG>{^)B3Q@udDAFgs1wV^|gUV^-5p59=r(; zGk)s~eb^@0)who6yTV7`r zZQrcpSH<-0_le)%&}hu`=HUiUrfYXUD_{{0;b6sEp5L*KoIzE{CB^(DcZ??g%dB^h1oSp2pc`hINayMV=S zn@{|%WAS^$(09L~?`jsmo!~8Yq9p(7_|dt9W_klyu+a67`bJ$I7K`6h@Y3bqEEd1n zhCUq2;p&^p;x`Yxx-{{-4-qiqx53c2)zEh*c$6kxUvBV;-#?(t)VImdcb}o}HIPhw zo52gFiQk`@zFmgCZHB%lnZDP+LzcQ1*`n(@mfpRFzIzOPSF`l)S3F0Hlh5@1au&Z_ z6q+vIhYWq|So}tSw@534tK&C;>1#CfZ8!8C&h$mW({o8utM%Q9K?PLz+Ggm(F)MC; z`4)H-MwjpZWA9r4qpI$_&)msl2(N^oMn#>3NCQG%1PCZKuNe{vBqjk-V<*XELI&~} zlSvGUH7H-Gi;wLWw(d5&+g-ok z|J-wK&OMpA3<24GyBxSV_jmrk^Z%dMJ#+58=bm#EJUK?B$Wq@{O?J-kYoX{F=TlMc?-oeOGJxqTr#4TTZ60Osn4!@DP>%zG1r^E59EU^()8E`@ze# zv`yBpKF)bjr0)sAg&OWo;sKIc&aWtTvAvIF_y2-NX_a<=3f@wogFLBEw@VwSQ8|wa zuH=1Ov+Ds*<`>%tS$1jvOx11{c!}iq8e#Vck6cRzTEp{bJiE%PzLEvf0f7FOmFSBkaDQ*?kY0P|LYWu}j-bQTwCg zKfqJ-+XP-B`5hK^zopqVkU7=vh+-Gphgo*15LCPS!K3s@2P${^b@aHf`;w5$I6pwR zYWItZU2Ioo+5H~ERlCmtOC6*#p4~&>QT-kv5}b_lS%j;0j{wX1#r9~H-A^N2wL1nZ zb&$Szc7F;U+5Ik&;AEUI!d1Jk153NtDR#FaT($cSu+%~N;@KSskL-S*NN_SvIl@)D z6Ts4LwPN>LgsXNvAYlk>xp;Qd!6Umr6ijJ1SF@W1p0tbY=6L#uo1@vy14-&2mGSH@ z6?T8D*`2G|Em7>2DRyUTcB>M!TP^JVFU{`j=y%j|u2<}08$Bz(zW`4y=avNRwhOzj zX?CB~>~<-3mne2eHM=_#v^y;9{*7k0Q?omw*u^%1R(?A)yZaNg`?#=sOtX8XX7`JV zUFy53?a;AMv-@0vb`J@=*y4;k*%p6`af4dFM-;o*2GO$nYw*YZDtCIjdR*A0=ZxfJ9BjeI^I?W!zkBea62PZC zlGAxvxamoR_h5oNhUY-LO;h}DJiEKW+nE55CM_kx+X>!q0{Z@#Aa5t$D<)!hB0*jh z@4pk#Hx6DR_0f(A8Hw@6rlEn1wPmnk3(!}%) zgZE$p?P}J7#L8tPL0-~jr)bZjgV+t8V>t`nM1s7o%M;UgJV9R56^ZFPnjr5QZ({lm zCdkXpPE6na1bMS^64N)FAn)A-d7TRrYcD4fez z-*6lrZQahtpyE1z7rauXKS&bif3ESCF1LT@AbHnmyy`f-V4J=2Use|g&B?*~s59T$4n;h7`)R2Krj3KHp~ z``4Sn!z**k9q%^pe`)?Hap>^ixJ=`nP7)BI$@{p*V?C30 zQx#rR<9QSwrAz8-(0J+K9e|wdQhFrsVvTnYJej^Z3h(!LkE`b6h+-Fy=q!EDYrLc2 zc_Ameq*vN~P~)9Y^x>Az;;q+sor4P3( z7Vm2sFH7Ok9BrA80~*h(@Gyjr%ga-E7@EiB6)HRox#RLm6&{Ajad~A54@2L$ylRDq zA#Ge>eKqVRGZctZ*gL$|p4h7}&VkGQ-Mg-3l} zy!NtB;pI8-_A9)_4!i>jZ;1nMRN-Caz&oh$mOAhbDLf1*;^y~=!pnEy9aVS*3h$%Z z^){yP@KbErjcUAO;HBdlr|Y~#;px}!iO6Jsu*!iquJG14@Fo=AS_dAxb<%E`1J9%I zDjj&~3eWGr%TjnX4m_{It99VzDZDxdUZKKkaNw0HyiE?gGKIIrfmf~YZdQ07(%MTs zcx8}Nd$~p7>Fs5oqVGcrZ=I%ZKX}zbUyH)i^&MCAwL0)lD7cE>&c-tI! ztZ%ZNVkl!>Zv|R@J>bdf4VRw9`vrb%LA6{~zxn+Ul{1oH@rE>Bp~Azd#mm%q)e3Jw z;r%ZRqEx#r3hy?B_pHVnQg}NQ-eVeXA9!+Ha)-k6X}kl9zB?7(|G{8TP2VAfcbCHZ zu*Mrxc)Jwd8jW{C;oYO~eu2TNYL_0u;n65>_xCEiZjG0v@E%Zj|A8MmRbQdPdsyLp zRpV7FygyTT_i4Nq@MJlEQsJ%9coBv7gu*+3#Hr~U1`kb$=l4qr?`^l8H=?9(RN?9R z4k-G*tnePz^o=U%`-;NT^&L|5J*DuLYx<5T>HDg})Ab!w^nFd?(Ra{lxg1y0_l&~R z^^Gg~o>h1Qn!X7oea|U8U0*sbT3H{@D?IvUNljlCc(NV5pzw5kd5XS63h!Uh->CWu z!ISO&TMAFtSFPy#wgazT;eE$}w?*N-?7(YLc&|9{Iu+gz9C#6h_ag`1kiz>b2i~y4 z8*|`|D7?RR;O$d*KXc&iS9m{n;2ltSuRHKY72e-D@D3`xe{kR(Qh2|1;2lwTCmeW3 z72ewpyfKCMI|tq|g?G|{cULuoSqjhN zz{^v3GaPuO3NOupSFP}7I`FnAyjc#sPK7tyfj6Y^XaS&j?PWya&2`}IS9o;a5KrHz z!pm^r9a4Dn9C$|+UZw-@n8KUyz&oMvE^y#YD7*_Dc%Grj_IHs3FH7NNIq>on-o*~Q zQiXSk1Fu@)UFyKwqVN_t@H!RVWe&U{g?G6FZ$#l;;lSIk@VpMZQH7W7z&oVyavXR^ z72ZMz-Z6!j>%cpq@UC>=O(?uY4m=NTdS(Cj0S8`|!pn2uRyy!Jw@BuWtML39Z$#mJP~p+NjcRwl!n;=C(K9)fH>&W;6y8FOcSzxtE4+)r z!y^gH9R=^1EDO?*lDiE2Re3w`u;(PbfDlgd$OkVX!?zt~Y`YX9P@WbPtz7L@Tv5rY z6{}XRTDhXo>&1UK^KVgM;mVaOz21`5%Zp2ScuU${zFNP_B{h-GJWDUx9ea>lPcGqJ z9;E8GL@SpFc`sZ{1P|N;_`CeBx^Rguwzx?jA_bqs=;$w%|!ebLzN17)V7XI0Uw=i?O zaBkM&ngwMG?ymU9*F7$Z|IJR8SKVS9c6n0|zI0;zVQ67xj3h%XhdPa1U+1r@^Pn5K z$V)k#?kyd@X1H{O^V8lNLNBcr>R_iHVq{Vwl`e&|b2Ur{%X zkDV8n{eE~C;k5Dh*e*(4E>f3%{e-uyCCu_%hg%+Cd5=tZnUTlF+jmi}e^4{LfO5OI z<@i0`A(l7mu;ESj9$B!XGkf9^p32S^#7Jiou1mpB_f8m>W)HE&GY=;rO|1)zob()? zmrk~jy?q@UZ5iq;M9k4$U*W0C9!frmUm@hdY9*p>aVK%Tkov6t^CA5V9^+|N#?CqFWg$B^Gyt$vnw=P!Z0 zN1wf$a_eo|)_~k0o!*88SNz-E|Bjp;G=|ucS%=xlc}B&8B`p=T+5P(} z>Rx^F4wtuL+-p49|JEJ5{T1UG##{ZLn7Af;{*tEGjJGR{6da$Qh#sV{NjzAH{CVe% zr_W6t(Or@c+9b7vvIV=It*S-6`dkmUhbu?q33*A6 zo7?pAal=InRU73NID>Lp?)uz>n$z?ZbVa3|bfwk%uKmOCS8=_0JuTnt%&Z>ae~;oX z+wZyio1K))>bnnhQhS|KO@GP8tm{%vM){SRdXVwb;GKr`r);vDvBKyi@_cDE+mSx* znj3y~CD+FC+Q(K@<0HkB9(U5MRktp$`R<#TJ$`b&tLVCy-(mOg7U1yW$iJkZASe*dZ)HBk5xdgjVK2WR_# z`R1&_`Tkx0{r+PAYJZ-ebg;Yyhm)xvy(ep_=Wt5SyfM$~^Kj#GiF7BZ^zra7opTtwbONw1O_6V*(md%!o93FpQ{?FOrq_@jwy*M%dzV9=f`;plKpf&C666{w$i`GU&OUtfL{Z92)|12oj}<=;-86D zlG1MGl5)rnBaf-x1Fktc4TD*dwma<^Co9 zA0v+k)=j*W{(O@E2!02%4yV6F`D(k*mCZ|^ONMd1yXPj2QOM^<+}ZBq=2?>9q*k*W z{EB24ks}i>?~#dQ95Zmt_LkpGV-DGu$S&pm^zqtdit{QVWcw8y3ze`$PAT4%I2Pfc z_gY3LTjDt!S?BSmBZubrjyQQZ7UOst$KOrtJmOxQF_yGAdn|cz7TB&Hws`*G*WYv% zz5b@Vh+Xx8u?+uT^t2SFuiLd-xTAE@LBrOiIOu&_1U1gKw*>H5#!?h3aCJ?!_dUb%hQGkN}H zVXAAk>|bAHixveJ-P&>MuRHDGziD|QY!CTTYiOH2q@yjZ=1alf1YdbGz4c4&NhfRB zZ`v1yj=X8K{w6fPa8XAGdV8alc^7RpdtW3FPNtjY-4x)U_kWS+FRdw?SbAx){}TK* zbagI$#_P{D)3}tk*dlu6EmeTu);RJ)2HPPyPC0Y=#nz-q070hALaTy4qTU+v{8VTD$wHJSeR< z#ISMWY1$|z8x5h>_NgYgjhkcGxaIV06cv&Uvy>_6TyFrrDv;r=IFa>Ac?{y1#`#f+ z<9Rz<^898$1sc~$dg(#LtvJ3;=ZNcx8<$2n=;IID>y>o$Z&@XCNa zFXB$e{tm>&V;S}hq2qMy??jwCal9bnPRIUTh&znqkkD~D_U}d<44v6GMcnDw--Eb& zaeNDhq5ZauAnZOI-;N=B0AUZ}crk|TA%s1QgKlzkogYQm$8ga64_)>M!aj}z&18z~ zQH1TsaU_Q9F@${z$ICb{#^z%ZYFjNh-h*?u_H_q?S25SlIrC<-RF>*WHB#N4Bu}y@ z#gppscxHIgJTp^gdFG@J8>zdD)Vqz;dyLfGM(Q3Tb+3_nui+UnJog!%`whdxtyACJinRo7X@8M~=y*2aBbCQNqnE?2g;9{@HylwZ4J)XU(_oj>_ z-`E+h4Nxe)fsGjFH%T9f(Vb7S8N zo6>E@iE_P$GubQO`~FYPeLC((Iw~@Uc6;`u?oGKjc_isR_x&i7b5b8_n>EYh_T9;Q zlJ>gqr4*c-vQXPZy}eG(Ng1g2{r?5_)!*mK&rzAHHtDu$OVjyWE@CHW2P= z_bx9iTJ9b>qP>BEp7u~jxF^(Z3b%%OLVd6h=x&Wf!aZ99{X4qbdb|1|Z4b8s4n!i@^SOWR z%9SO>2n?ZeV+Umfbs%W7zkaYJ&{!X+Dq4x4-hpUjAiCDKhHvWJ92#m3MzL9R zKF>pQSGcXOwJ(gFq@`d(`IhCyD~k)O8|#}<2F>}=P%EIEM zMTM)DLy}l2wnl>eYYW0X(NN!Qy?xs!&$#ZvaC^whwAXq0y=Rn>DD_R?q zhZNxLXN=Hb$JQ93?YLf)q?-!#G@7AtlTgrAY%c(l-`{O7vw>(B9iw9Gw*C$s7X;Bi z^!7{%j#bQvZY$yLwov=BUbFJVc|kimU#`pw=nLcJyFDy4NIjB`W(F06ZXE~>puHl| zQi1FfV+I!ZedSG?8hn9@THh%N1#MliRjXQvRM3wZ1L0uEo=#@cdS^p%X8YX3uI$HBMk-JtwXodJ8{i~{r8k{9zCrX|+(Q;=}A$_gs5uI%Y2NA?A0q`}r3pP44Lvzwx+1G8d6G%|>D zMNY~Kw)Tb4xrADm1-rsHiCy{e`DYy8sY6iA4)lbhJ5HH6&MG(^l?4eZj)wYAT{Z*6 zO4vLn^C+?NMYS5G@pg>Po%i+-7KCw!(1&5*DOf$`@86V$B5crQCRI9XigdL`FyP&KwQjZlB6ZRYl2Yox1+l_J z+(2tvf3y!bG8h2c;>lvL1@=X?Apivw^hJlJuqaUeOjXu3H2Jm!HY7xnks6xn8Uq_j z0vlFMGg?7YU0rQub$QLk0NsG9WfJT6HrDS#tVl9_{1(LmVsLrd5p)H(Rh)(nHKT#X zrmC1Kg5CXL`vobp%q3Pzri>}#)2uj7*`KOik7lnaGXqtDKzU=Muc0Zhp>dseSyh#9 zb4{f$;A?28YY5brH#PYhHm)s#AQ0G4;lp16{Pmjx^$os8-^L~$BI4Df3D#_^+hhic zTLQI-NdvWYH`LeN0J}9Cd<|Sftow(m$+p$owhgzBJRy}E8fzK@q!my^n{4|sq_$?g zFCc?UCYc+Q^G%y;8j;UU8yh#(Q__8?(kf;6YfG3}VKM`a^))ED8#h)~tNBMs)|A(( zAvGIOgbkbOQ7pFL;z|{gaan2sTdGCDqP5l31vdB^8_U=E8hKQabDmGC8zqZYJCTLa z;H&kOH)1$%C7&lW;5SntDtEGA1C_XvEpDyPSFffPdFPO~h>A@$wN(MC$Hu1e4d987 zCySQnFQ4Q5Z`$>z zXgF2F9u3dXaGHi^YIv50XKQ$lhUaQHou{AX6PPZY4cW@;at&XhVXuZ4YWlC#a2~fe zEY0By5PNxD#pU!4-gH-K@_a6*cjTta*W^VSF45ArO2ex)e6@zxYWP|Wmut9E!#)kK z({PQ3*K2r#hU+wZy@ne#yh+11X!u4A->l(VG#t=ytA>Lb4rzF+hQk`(uGL>RuWzrc zZq}{IBV11J(oGl9~{!UGPmlppnO@6l)|87mbN5dl; zen7(yY51cWeni8MYWOj&KK??(-_`Id8vdS!zpvpRX!xjxf2iRfu_a1>l*CTHce%jS zCA-m|U!utA4bL2#+|c9(OA>OL`|HL(dwjQON9J69H+x*epVsha*o&81LHG{#YROP5DXDOs7ijo0HbdmU37K>wm-hT!&h}qqwy!eCU68xLr*oQ9PWWGhoUof+p~b&~{Z7c~ zeXa}g-vHCKOYeLM{|cDqf=Nt!fsrHZW?oI7m;K15&&wVW`beh>{1G8H`-f~Tem3hB zab=}7qL&;_<0&%$BWrrHvUx_ zU&l*XyN#c(@pW9lmfQG68ehl7EYrp>(fB%E!TumVjxft_mBwGiekSD9M&0uVw#~Y1WS!|5{CcEql@?FW2Pd>>(jHua`+r%{FNA4eZ}DRQq+BypA0aaEv)3qN!nrYix7*io5Bs!@ zAJO^~b#(zNL>-a&o#m0X~ro%`n!p=WV!#%~1OL3}YSpkPZ77 z?G;asnq7u*Gkd{?Z(!S%{xrjAWGOcNb?gD9Kgz%|6i+GrSB4Q_wSrGxhOvPi74p>_ z-@<~z9`&ag#*OSkrGL&aHnG1Hcqx}(&z39wPlgd@dzJnw!`RAxEimRWo z2(o!f|CC{DXNDLbnEF?-9A*5JVJu|Ni}IpmW*Ft{KWz9~cD?d@o?)zIU$Wt=*+JB& zbQ#9C*o`*)G)uAJ!|Yk=*oDh5j<8`H{x;iS!!NSSZTPF~tyCGC()$v7-iE)!_So>( zScwfk#ePW*Pq+-@n{2NQA7Tq__yu+(S+dFAH(0X`KhGv;;4NH+@f@SQAf(GMzRuch z_*u5lhF@mCoV*2x{)24PhM!??;eME|CweA35BJBH3;YJc<{8QCH@IIV`E?wpuqOrH z&v7c-DsVl=9=1?mKgTneOJHgi^RV&Quf+Y|W{zjFZwY)q$FtbSZSvV{o4|D2KF^rL z)(D)-@m%(}lAn3FDWbh2q$516;Q}@*Z1_?3s4e~o+hM~Guw6pmV_e@=>?WK1A-2YbKgv1; zKf?L>>{m#POmdEq&pv9i{}@{#_-6Wx*aZSpG2|E}?3V&l|DR)A$^Ks0Tg36*Y#{`s z-^=k`>@zldcd?L=oBW;Z>o)!l)?nlBU@nZ$NT10cWc31@`uiEJ<4$sNIYvMGtc@RG zKeh3@*=yiU^1J!k3_LQA&)BF00?Xf13eH9$$lp_muI ze@`Tqzb6vQ-xG=D?}^0n_e5fuSHf6L^*!oG(r$P0wW-K&Cwz~K;nQfAw!_6fBk(uK zzthENJ!z8Do}h&P4cB)XEw+jVlC}-cOUdtXu?6rAJnr<8e>dWhzYD9TlK*E|3yb_m zv4$V{EiP6lHciK*N`8EKC=5^7aJmfr;GiJ{5xFib@K0Wu{Yq8ofE=;hkWQC zCx4xby-Pk8#GN4D=VE^(pBC1|f8%2=mPCG~i_tp##;}XgdiTah=t&gx2e67B`TZ`o zOe%;hrXN0?{e`qX43jxY?$z^ zF1C{VUZEfMdAvQ7_(GB+oTm@rUSP^Exh37g-z9unL5s_~!4$kwvTjYC0$oIqcd>gl+Jwm@xD)d4>$3+5vTG)A9gcpkN$3*xiMK~4@=jnP> zgnvSW=Zo-1MEIYX`7;KEe3ig59aut<>!HQDDP1xgi&yjT5-l8yU-NKU99-qE7U9KO zc$o;NMZH!2wQ<5f7$C=A6q=MM;>qHWVkJ!l+O{o4B^ig{zbySMEI8p z-z)ru!e8WKoiJpyGuB1^hnR^&0=Ec^i;TcalA!f zv@ect5E$)=Kn*>IC;kZ#?v=5G}1x7pJxK?1a7mhawjCR9uoxo^6 z9M=nscEmA${CRnyJ#oBVV6-caZx$Hsi=2UaqxNllUSQOd4UdZc=yRgK1TRnJ|M{ex z>w8MzFA05L5%>v#pA`6u0)JWHF97Fb_E0{)I_V3y(S%!;k10RV);9Q^@(ka><>NEC z06q!}3_{k0?|(Xa12;8oPI#rm`t`Q;=2-q&(ODdCZM?IkKmMwUXCnhx{?S2=T40X6 zDXUZ3l?JgMB-K|qKXB8=DN9+dxQ*6~^hKlf>pP>Ubz8kSM=j~YL@|olSsyhcwujmV zwg&jrbRG~TlhbV@RfWF6v!JDDnp)zvt!bw#zQ$>%F>d>uej?+moL(xo`KFl`M3ffu z@r_`A6yNl=2GHx&OkJarH(NVt8ViAHos_sb&w|>xHGdXO#I3ipWrLPUjZx0iy}Zv* zSKJ~!Q@wG^@r)G9uHN35rgrf*`5FGaPFvUMl>o+1BQnLx8pSIxMLHA}KQU9JMMa&hJ?&i~AAO|i+gP+xS=^X^w^~%R6+ptY~Bb%z$ogfyrN4Tal>I7Gq%nC=}21d3J%w2$8d_*6Zxx-isH zvU*jiWXBjNlm>&rN?KRiS6@_&ME6$)gTBFNz)W=Paw`Q-#G%tu(PNB7V(XQ}$uUc8 z-jorFBh4De#AX$(YV8Yc;www^`+8^;jKNRC`l3>*)JjaS$5&3FzA#OzuQvx$iR+n; zni8r6bH#67EuGO$J{Bt~Btbbw^p15?w47*sHE%0=eWG!T@I7%2ev(^zf@s_htp*C) z+i5v(d;;xjC@PW{03hx#c69SQ4f<{z7YMU%GR!X!7%xBDjYDx!xWBHa3IhR3c==#! zxQi+RNifS=xiU|$x)O>Wx0a^FmJL*ls^iMd20TS^^fPad zI`yZKUk>Y6H@0?!DzMy7proy}KeQ^^HxO!S-70&D^;6=-?^gI7Z1GC}Ko9?fwZ50H ziE=|Y+F99)Ps4|zHBnztNrw>A{c@p2tGT|z~>e}48#`^L~U#_pByfnALcYSFteeYPB>npFQ87yYC;kMk|23lLA zKbo71u>;m6(gOL4N^R_PZvAnuSB&a8ohVMbE=)&RyhlmX(4}7AR>r0@I5m3T7$O^g!?G0 zHPqS`4s?gQgOMFJ*wt5JVJu)Z6po_Mdv4oCe_QEqdsjWxL(}GsMTKN<2#N-aigDf_ z4g|Ye`>`I@jz}m#Pn3L9iAAdrX)0@DsTg%eidJLjfNQ76TokEVjE|v7;b_APTowI| zp(wmQM(1Xv&8=Mnp^ecFJ*cLqod>N`VqmNa1w0t14WX?VrePZwQU(mBJQV{w4$Iry z*Y))dL@ZB)Jw%pnm3FIqJyK<3yhi=Cq(v)Tqzb|sqq6~bdqafj)T|AVDpOn+l zL=X7Rf+okFfF2>e-!{%(KH_#lXD=IZO`Nq{*t@^8mU6pV=hRN~7dw7KnR1!(M*o|^}VK*L#ny*7yaG#~Fa(a&!Vq1x&BktpbI4Tl)86PL^DPP3LiDz$we?l*i zXi>y??~mf-#o;;0pX7@%+dHxRv#{v~-lWBOOPD)Y$ln^uH--7lmbqrR+;?-cvU+E8 zvshBKxmhkQN^5vFH)}J0^2ugyJKjjPcJWu0x$P_$Z$f^7IpzEX5_6T}G)djLge6;u zrOZy17wfgF{*WwN2x|;PH>aK6x zbi<7|-x6pI;+@U*?w-i4{n5eOcHF-6&bx+Pcf0O!?Q!jOjkxY}J>YuK^^ogf*GF9+ zb3Nkvxa(2Ze%E8JPq|oSaeh%DJ{7*ib-8f~Qi7if=Aw_Z=edlTBAMd55uj7Lof+o$ zktu>%0-wG~l1`pSG#)QWNrEqV9UAW%$fRzfOJ2<^yWJ|t%A`=?U7_)IgOhGf`zLjl zzW;-~Q?Ru42);AFjx)?ZhB*I%#`_g``(yB$HQo>u*DE}k)cG3kD0qH_C++?&&7QtF zs51K2PddrF5+`ata>3gyN$@4_vzor!!Mi^O?=2`(^(A@i`eZ)VY5HygkD8Zs(r%{4 zi-MOcN$@4_*I2hewYy*ANxMHYd6Bz?ju*khf2>?*x_G=-1WzpAV6_8X-;V`PEb9=L z_fx^6D~Vh@yRQqLY-jO!ZwQ{0OJ7glJA#K|+FABRwM1qrX#x%Q6DRw`q*!_uS_eJoeEz&2?^>RKU?9w=a zoV5E1=vMQ46g+u-;PXB!zyBA7Mfo*^fuDjG>-zW`@Kk-IjLMm=5BkiI?9%ZgO`ium z{I{G;A3k}s>6Y5Hmv zefZqb()SDeKml6iw5InEw*x#izq`Sc^?}biEqy(jz6S*l z$>C0x-x^KdBZ@xy?2~wO6lnS$2M_-(C-wb3evsAljVk)+vr(z!3d4iN6RJ1 z^2^rJ_gtLx{S*URwLXq0`mhXxrSFH}0b2EO6g*#y^!*JIpz2GC090VL1p(-!3hEOTk+mBYhD~U#FsPm7*`C>5G7eEL)D!PVS(V-(f`` zEk_~q`-GO?5y3OHm^?aPqNQ)2qOVNRcZHU|{ot*V%HYfN{RrV|eT*skusnv9zQYKo zIP!Ws27G-CecLsCOOXy)zgSko($}KtD*>-QhCZryHGR7keOQje(l=YvNA032hQ2?b zl2m#&hbJS zm0!1zOWq2csQI9NMB2r&Eml63gGc$0c1uB0`!%Ugx7#l4Ml`$sfEyXrZWnm?&-443 zV)rJM08q)xnZ~%pqvK8RRJ*0% zC6eEEVVBk+A}8%Wq1o+H>^`E{{eotfp5Nt~s%-l7c6C756-!20b_1H-QN=DTA0+d8 zi)Qx_c!}iq4Pp0gkw%%{m$m-j9mVc$#qMFzAIR(IkKjoiq!P*EPR}oO8dSe~gj~k? zqGs0vo~+*y#qQ@dyIJ5#9i%dz-37w#h-P=MW;a){i{+%Oa^9`kElJRBsj&NiW_PP* zw@k77fMPeK*{x5|Zj-S4kY;zCX17_f`=Dair`hdF&~8N7{itSlhGut2vAb8Xo2uCz zNzm?t!tNuQ-5<@e_ZyEWcCj3oRli5U1GIh@zL=ohQDOH{&F*J3y9X7!Sbog1OZQEx z-6ILweMQ)POtVYtY?40dehgkz0{Bv<^U5+4<2{!kFAop@h7+(m3ZCq9i5@R~xmfQq z5#9mtWE*hOSAvK9yAw#?A@B|)z}s?BV)>WVj)S#b|CU` z2)sn}m0ppUz9ZlzqOZ)Gn7*UnC8Do7J28D@;3ZNYRXK_A4kgH2x-c<)2NLAX&rM9< zNP@gS#^Gh6oyb0u!9}i&J?=aPlFEA|4v(IZa-M8|;L$r}>5|0BJsNKuJX}halRSE+ zr0ScsC^qkJ5mV*m#o=M;K^w0s4(|gRuO$wTo`Z6`BIP^5lWC_Qd47+^8wPI(zlG9C z9e02yijIpW@KA;N!0SL*jDz&ixYh?AUTs+JSd;lX^J9b%hYlJiU#jtjHo-2!iI6 zb2Z*Dc(PpZ2*cw2Ju<82cfVqn^vZI1P2(LN}?JsJ!FlAG=}l`oK`Z;(b?Z2OfoopKOcwb&Z#<@Uj)&LmDp&yn4v#`oK?^rB82vor*qm zaTc#y(-%>Ac?wV0H>B_uE4(F|zG3i452f!ag{SKqRrD=Ycr!J92f?cr`tlW?u5Uuo zSKz>7TPEwR*n#I!cqwORCt$Zydi~$rfAjg z_tAl8C1rJS#x4#~RSD@(|Q_>evc)Gq5 zioRPF-s^6Ae#e#c^(#DGA1&xF(?|CWNEXNUY5F|iWkE*Q(V)W9^?4P2w<)|;n!Y^n zWI69pc)Gq)Mc?fT@7EY4s`Xn2o=o3Pg{SM=qUgI*;eA%q*8-kQ-(3n%*B4Rr4J*7G zHGM-$`tDYEy1spizIz;a`xV|^2i^gNcb@}qRN+17z&oh$9(LdzQg|P8;2lwTA9vs# zRe1Xycw-9hQwpzItB+&g$@+cVfpA z3hzY+-U)^Gk^^r-;eE$}=ecFF{T+7TWhuNP4!k^t_p-v9tM&J#3hyrz-cMcjaYVJk z`>w*Hxt{8HV+(j*$Z0(Eio&}~;|(eLzNheLE}N=vMB#m3;r(x%tGxXR?*|Hx##$3f>4kP!SHv=Z=C@UVSgV*H|Eg@Fb6X@FG(3iw79{ zX9*NuK~ZU`S8+upt5&R9xoYK#BCofQhns(k3JX`RTmuve^Lq|<`rrG*f4=8F;QA!_$p>k3 zweHrT0G7Lr1P1zBw}!X^OE+0;!SNoP8>=b?gI6)v&N=gDvs9MqN;Oj5o+MAQC&iQM z@pxu<(mXR$XL;tN4jZYvjMTf0)O(E7-A3vjBXzHldavObF+BGfp8E~Y1BT~8!}Aft z^N`_r80~qMX_o(`ae51m|L!(%n>i()1}|F=_CE6%o+)MPLD_nS4bLvabGPBS$MEbn zJbMh!Uc-}U*`lc9*gU)SN%t$#U5JzN%)1_Pm1o{wok@2bj8*n_M|ykkjq(~VzJ~J> z3}f9=?~44wmEHlq!nJp~H?NIWB=s&YEL`ku!eXjxynJELp6%Y7OWK#O2(G?`$$(|c zBCUPVaBG)$*|MJA0G50XU>}j*Al8cP4Gi?OhdRPNp>|WaHPjR8!_t$1?$$^o+_N=+ zRiN8?yZRw*54QpiL?T$ntbgswl_kXp3`PdlTHhSzcSI1>fgmhVjKN{+e zSl?AzpH=d$Om6G#+uq;2wJ(Gc3$-o_c7<`$+}}IU7Ytd!SZotZw+8$3dyyJ!l+)eY z9$MSc3rZTR=|S44m}!;k{x#^Wii%eSmn}b|n!w^=q9RuEiXf~PVbRLM;-y7}tCmBO zSUI*vg8gd?_#(HI?a4E)dobJ{@-kTxlUY8aj0A&bJ~|3{J^(4PRL}ibTs9i$H&+Tp z10l)Qo&hhVB@_wuwErp8H#O@RWy=fFDo5|KI@Cd3G~68m9ql{Z6YLs53poo7Hh?8G zI>KA?JH5+la=gtsm1_#thr(Tf!4(B)*>qG^HVb>rIXPhE(@`L<5%s(Pmn6!0Qpf}7 zPt3pqel3SlEiq!C>F_Mtgq^{#jtk^B%9B^*6iO^rSZyJ=-Nxi01z5=-Mrg2OYmCr# zTrx`1O$B-y&Cs|>DCjD-7l6s{@3xoOKs1crQ89K~e}|3>Xd(RGo+-hxiW$*uCEVQ> zYG2lCR-QO7Xh#psm01CO;lWU!JuJjGqOj4-paNRtc>wJdiIxgv#~3rPK=}s!l!O8- z+n*4rpx@j*z@BQE5Y=XZ*(IM^tI0bJ#o~MVQ)?DPt4-5)_tT4IyFB&cx8*vPO&PmD zHs&+ZP=G<|ZT)7uoW3G{U7T5A6qwhRyqM20EwQejf|w1GIDwzEg*wBy#|J>FhXV;yBB(kI_{YB&ZnME}Fkt z4rN_Hn=?ieHqXgCO6+`*r6>)$V|4Dkw}-GGjN61htdo8UR*(7nHzo1H23=-SrL(3; zS8EhQ<~Tj3R3}-aH!*z${e7ok#wGN$_VhY*Ts@&^e{XPmC{FeDM|=BlS8q#YC*36} zr4C#WD@?=6T%L9WT>rptvPao0v3ETX#c!-3_pdHKrQ4hFJFxRg-P2w{074AbCP6H#F8X21qNQh&I{w zWk_w!dS5^WmrOD@DCe6t*EAxZn>IFXs;8v;P^DGM@Yj|wv%+Ks8tZFNayM?QtXA`n zlB_AORYPhvq6ix{)uUK!!Nrv-B;&Hw0=86(f<{qrq3}D{u6HBK7fv2K;6!MCDEvY@iZXvc;|S`RdiwBJUjX7E!UOrnV|T_1M@{ zz5zV(M7C&o{&H$KlU0cBK{Ps%i1Ll)wRP+41yg^+23Zh-)zCDhs6-T-YM3Ge8_Jui zk$O}zJ;EC7YQ;(SKvy)}wgV5Vg4o{;7w57zJVojV(1R-aUBL4mlWsnaz@sc|E7DER zbKCiC)-pWEqNhS=ex$T78V&OYaN3_jdgy977qeqS!)^^HX*iiJgFbrhXS!sTZPV}3 z@ErE4TXJch#>w}-Con~G<7xEEikzN)KW~#8n%rPt5psIQ>c&5N{7GdrFT}09T`(~w zatdeSnXGj(3Qyl*dXOp|_5`3MvB&o?S_?-y+Id@S%guva_!_$xa-vXq&qIFbd+-e+FUNR?!sXDzu~%SvVU*w= z<;sRUv|?Ttk7nBi^QPkE@}5LKy~LAh8s%aW!&7ZX$anIh^$UxOrzpWDpaT)w2=Ra3 zK3_B-#bTwc(SGwq7WQ|-ZcarjtupGzliI-c!TR;VFzd!W$q*K7HMhRNwo(>LJU{2# zk+!uJEiWlu*%52+i$vl~-TWf)ShV{^oCRf_mW`!d-gw)H-@yKK7P36m0-f<2_@7Q5 zlwImhwHW8*eYy3z=2UNS&U86W#pD#5^3{r01{h-FH0LIUj<>WcdM^^P!0q0q) zNqv+a@T@f!>37M4L#AK)I*-OH#KTl#?j-MCAPSemn4LIRrZQN1>8F&^Cmr!fr*u-L z^Tt6)gx3xQiSX!~v_yFHt@5x;9DJERnlmELN&I8*WLXfF=QM9w<&BZPOk$W$%BcOz zIwVOw1~x|!a0$+{agaU?H&`VOb*@S}#tsxt2h|Djs2)mis5~!t6iz&9U-5W(3NKaR zEyTI1uTZf|;ZmQ@D^qwh>W#;%S9miWcr6MK!>qXaA_`Ca)(XK^8^tLbM!=8hL^xR= z`rMpaR0OTxBAw)sk2W8X;dkMi*sb?;u-$Z}lSG%v?h<7!ENiP{4>N+TVY;gDfCo#Kc?b*OSEjOwAN zWSy8ifSs^0O9DY$Cx*UkE)HtP>CY$mldHWg#=`WRq?)9Y>5S6i^`~QSuInVdR0kMB zvr9$X6cIOBiTl!t^fG8U94r2O#Jd0o^+RO)NN4&pyE?u8k#(j`1oJeu!2j<)7l@kf zxy~o`GrCQ4{?XZ;3qkn5b=rZ#>qZL4#jypy&!WU^O&(gLiu>G!+b z={l8p$0`4fLBGfyUCZik8wFCBbn@JZr_0XI?`l5#^Sdw&0bO@u)4NJbO8@_#-6b>p zKXG!G$a_1U+n%4>Wla^cW`o&gPKbGA)>IP(>o1bz+cTA-&NYzXlW$yYA?N3IP0qwR zKesFPRGss4yZTRScG&s3U9Ek1V%=|bRrI#jnm%`aZWm1|oxIW}A8VfR+${Ovf4XzS z&d=?NH)%{vl(J1Sv8FZ3Syboeb`_kT+a)_aIom~Ib>fXORZUJNleGBJ>@$XJE%E%^ zF5acapR^ULv@{_MZdX&_{M@edbGy#o+^#kBpx1IPX2*tx-5O3}s}O(k z8Ez80%BC+x!yXN%X?T{Ve-77A&t^?GN0Vo8xmSwu*1?|s`I`RAG<-RGUA_#34w_pw zCNMp7r@3W6R^;^L^N3AuXmW#nL&&KZXl|K3zI>``zQ1%Uv*4nfFD5DB+{9U|Td_~+ z`%C3L7Qmnp-wg!8Etbj+0r6kkh+kH=YFB}5(|aa2-ay&qY3w6HZoaddrO9Wpe#M>}JGv%4^(Z{RbHrF2h*BzK(=Z5M7fr*Y4Klhe`6DdLU-G3bGup}b=pAZW zg;~DF8Z&eW<_1!GFi^?#F4HJ8->Vws<~w_%M)0d4gfprHf3@IOn)ypxXTI+=e2jUC zM+?fqExF1rzuYh6;N?PY@$xyHEh!Rn6w!$2Wv+q3>m(oV%Q;5l;24F@G3G093}qZ6 zKOA2pFzj=DwZO2$@mhglkDSpU@?9tLQE$#)F|Ie~G#Cg+))`@l7~w?cPU2Jk06tp} z3`Se=WoEdiqc?C<)8;8}uKBb|eV(Pcr?d8wyQqYTw|#CbmI*;oKjk zEs6v26NNe4`S!V<8+B!s+~}#Mc}6kAb7KkJCzn>Xc6GJkGvgZn;GoY}#iQHO(x{s- zw{QRNGYu5wU1JtTQK30`p`x`vuqL+DAZIs8HSd!sy^Jav9&wYSQH4yV5}VI!2%cC%}nst zG8wyMQle+C(##%xaIm#663ACBrCgbeSj{fZjMP{KNUiiV=yaLNXK`3-fzMBo^K*+< zPtMOZMSOa0Xk~DDVNq#Gtm(N4M437}H{nP$IoJ96jNRK%CSywyx~6T{e2hNICZF1A z#;J`JW@quIGo|)a(}Jg5th_`0(@FpPGbPw;_UP7A}H%?ZJnmq!zVJ!!M% z%*~iL|AMnTFPQdCqH!LL*~yjQNaAPaA9+q|oT)q-(@PmK<@tcd!!XLyt@8c=pz5mv zrg6V?Qr`&#fM?D3Z3gz>kaFoqK%#IAnYnAnUrM8Nl1IbV3>gTYc(ZVLabO6?^%D0L z9F#r-<6?3&Q8HHgzJhR7-v}_J!;6E4c%+Mt12|ND`+&)=bi^TdGf1kw#}Ov=VaROh zs|Qcj_eIFmcqAjY8;2Tx2sj;w7YBysmcF}jPI2VkWJhtHi$gk@z7q%lFLJjimv?|E zeKcQ^oaA-jT($cyu(Vq(c*JeTq1sIX$U~TPQlD;jDR^X8+K@cjKUId24#Ltd-BJ*b z4%#Oa|E>I10nmMxbRv69x4Q*AvP<`v;a(h2 zYw?cYT-A31ygY6(!op1hOjhCnJ=$e!I^z@a1C(}1q;k9V` zs=@Ojj1IbP;_2&D^wD(^j~7vRG>2L8s4rCWI|QCAXZjX09&be9@o!_mrF`l7_A5Lp z$9Vci6&@Z5#O2W*QZjw?d?ud0qY97ad&lD)Q+Nv$-a?$K<#GbNQiOSNpy^opD6O~@ zE$78^ibq`*Wb%~iQ02YgWsLUgmQM1>2QMPS-(3`YuPIurBoOKu%hReQi$0mc2P1Nb-;H)j99+w{37AZ>y%+_b1xk z-1fH#)n4ImQlO zIKhrQ;+r#;@;00G_=F4Rp0VKt7w7%cUthgAIF|3fWAWCpuH)aEDBQ=EE;u}T66KWl z%HizDRlzE5*X2LaMz#w4WO@JG`LHo>jM6ao)xx0>ZYOQ5xcUBy)Uo2MhN1f_++6=Z z|MimN(3VD8OSjkil78{%#M1Qarm_X4!DT}81lMfpeG7U|aJ|2_^d9GWe<}3-T|0iwy3ez3#=f+DGxw!`t;g@VvTnT4<2}v}la&Rp<{mHg zFXpk+PbQ;GS++-@q`9+SE%z5%vJ^$;p6eNt%mdrfPa1RocI;=r&3xigp4!Dj)J`s# zaLr|T|NLtD=;t~Kv%K%T8uq7;()qm4wS>v9@gL{1>-}DiFFc4m-fQNKo;5igv#GO& zE6QJ#|`coIK<=|rR~jqqVg7#wQXOxf;(7b0~9oMonNsd7%K%j4Ld zx`jM!GIeH-?5Vp%;S~E>?nO1`%DSJ%HPh|4a&!xod;5aCTc~al&r#CBv~0?ik|!%) z<0$bx2QT+ugq&TYc&C;;v>;npC4RV&NBq5znf?oJ~olZsOL%^qn_~cSD6=m&#pp$ zw$}^UufO#ZiKz3`aGNdK~RI$Yq<}l)qHI7^bl+L8S9M9Dzu*&%1W5 zH?PUNWbvW^e-cHqB{(K$q{{`#3L3Ghb5|(Z+fyIy%cndNcPWl#IIh7#S0d}I|K{us z_~kFk<88p(+4+n-%f4)+B57=MPD+jWd*khlyyU$s>oBzyZ_C@ig$kP^{Vh1uZ@SK} zlYVyAgQsD=UbgSY_i|p?k?s>X@n!DZowUcj7vCxxmH24yd*A=bIY~#ZOa%N<995Zj z?so4%Dk?IEjGD|ld0KvQZpuVW%O}vtD>4Unr|p@s*K=>`NXmW5_a{Bz#+RJuCM|S7 zDcvAWDl%{1ow6r+Z_>T)k#qGuDfLCt{R}6llHHy?se4oIO&&?Q&wW4AQJ&dmbYu>l zn=`va3wAXzvzg7l~ z+cNJkuiGD-lkaWSGN5Nx=ei8gC7=wfK8t#b=FFY4=Q{W4`PJ0)w4dwrWFZaGmElCW zK6vo?@08EpcgmB`(D2RbDfge~DEj~R1Let_{tx;x*~;|!Pm=AsEzph?^j-4#Pm=iu zAo6=@>%&DEAeWd|@cHc~uso~nV_D36JdIr;oW4L*)&dr5wx5RLSf5DAi6pl4%8!WT z63A1QhE6z^{NmO2713$Ow$=ckr`fg-N7eF(m1=39G@Sn=`TQrzu|7GD-8LuZRh|DN zIk9~#Xe@EcvOK@t1iCQV1jBl)d49WzDSLCA-)=%%H$wgpTkGg6Ur)#U+0!D(FRPX1 zt87~So!@RkK80iK1$81A-ptvtp<%a%lh|{JPwyg3m!!#) zxtyNOn=Vo~4>DRg-(ToSrwE&ZEg^a5=rVG2IMJp2p?$Y}9mV zntUdg)B6q6&D7+xxLi!f0cDmZpUvg;{MmG~HTfJapM0+~hmG3m;}Q*Ds^JA1zD&cH zYxoKcdo`S`;T#Pw)Nrnb7il<8!%MXMFXj0!lf{F#!uI^HWi3j1(D&F)0w*C3eJ@_G z$mz{;l}&DFa(rJe7qSVD6@+)~C*RwwVESI%jtvdF zS((D8@5LWWoz%zh{cr{3)V%2$Ga%ok$Z2m9J3pDV+vF*lJcapf@>ETp%06I|do;O+ z&9cd7X!03soC;Pr`u^OWzBKllO+HhT&t%Wo0kFVb+9hA(EVB0uI_+)Fh1C2W%-cVXq|YJsWGa$_}Ud--2# z$!VUk8>>Cr)E|uh8UIunLhrnup?MUQO<0S3{l$ z8C~Bl$cuq#u871-fN9R7#8RKxA7pF#vMqb2JV%q~X!3=ce4!@K)#SM>L*xfZLVAnX z1Wn8r&V{wbe`UkV*()|&!k)C@6>OgkuVjNZyoxp3a4D;>;ngh9hS#t;HheWZK?MOv zJ)Ijfd+hbUh|#waN-8#Q5<=dnQ{&*AbVntTbX6>`$yM$Osd>v$Qv9DM5EC>pKr zfXTxOHrOiyQ!&%}4!;-rDg7D7BKB>8DZLp+9@`}_r7y!+!oEsGI10`%yzHYkoXa9M zoWtsEIGZiA;f3r%VA3V^y@wAzs0)|)*TD4dS>jiK=~|Qc05GLh;=RE1UR2^PU^!Qx z(z_nmtH>7v=PLLuDm>vbjBD6E=$|Qw#$2@5Q-{Ex;5da<3ru6Gc}6N*EHI6s=3)Jd zIRcMz`3&|?D0tFGW2AXlKjWtYQ~xs0n905_FpYucVLgq91*S32JYzQN5t!0E59>?( zL`g5LSMiL7KdE8*22eWUM>QPOFn!A=9j%XXy@DxzxrU20Oy77(NBji}CVi<2COM`U zTaNHM7NYzz_HzYO{MQsr@{Oo?Qdx#0$5_fr$iw+p{d z_`|~g82R61Y(M$}i@DTY=F}7EP^Lj?S z#{@n=KJb?W29@Jy1wJJ3cLe?se9G4te9G5P$tR`cV&sqdEJ{Cpmqd2F0xuG{P~epU zR|$Nbz)b?*BrsJq>FW{rcJh&ES?&*s@W%xYO@-S<)8stfju8JZL^$Px^!-fW*9HCu zflmnhJAvO7nA#ha1NDDY4j%Fy${}6EyHMy^AaIVrO9d_#xJ+Qbz`UN3&lVBhA;O~q z^Kw9Xh6Ua$rFYp)PQ~F2YQ~IIWG5zyIye#q&?{wQKuSXbZ6MA?(LJz-= zkiMNlFRw@NJ|TFIi|{7}J}B@v1b$IqUZ2o&RN$Wo`7hv8K99qve7-?G3We7P`Xyf8 z@XHWR{nSR`Hw&L%_Xwx!i29in_?M&KnI&)<;m?`+NKWBtUl#o;cwUl!UabEEIk_bt z6h1X}xFxHFUoHG=gincqTS6BD`4z&i6@HoUsgb}LA2P=S=>(?yQuut~Q#}%1 zAbhXzbA=C&87=e|ew*;yg^$L^%MX=s34+p|H^ZQ{Y;GKP+&Wz;_9Z`r!Oe3yl0Gx_*+fkPBb+h_6yo zRIJX0pR#a>FA~MNB<7Mzw7LU7o4Srs@rrc~KJ1t5D-SebuiVB>HBG(%wou+w+Z5(; zXl0Y)5*w)!oAw6$H5+RhtFiCmwr!KVcTU%32X7f_-m8w0mQ)F%X_K z7khihQ^_X{#M&LQvG9}@h;m9LlZ44KY4kO1st?=pSd3-AH)6exrrzzLp86p4o@!+% z+gepvy66NB1*A^VjCm(z>ofwsjhlH_r1Ub( zfx-Ki7zBTLP3@)zUkpj(rpiieSsp`DUDw#eZ3i~{8X9ZrHac=PmT!oqo)$X7X5lfS z(#GsDf_+&B0mjgG(@?586TkCQq)R?B(8@})TXq;~7srznuZ}BO8CSCW|FQQjfN>Sq-T3U)YrU4Owd98|LadBz%f^-^S+->YL=S5% zfous$29r3^>aq3;WJ^f05yTCG7$P1?oRp-5(qJfGKE9N;HiZ-ju0%=_n$lD@Bqa$1 zwWWz4z+X;iqolO_e`g+d=Z^NS*4Q|t)!3`KXU=cVoH;Z1-nsYAnQ`S5xp9iuxpGQf zImK?AI2#<}x{8bF0IO^5>#vHm_Ohzoy|{C-LhcPHT2$VFdUo$>@88|pPmYn%rWU&+ z#~aEdGK}GvctaQhxDQ`AH`dq#LmPLVJ4*~%Tyyf_N<6NR9BY{J;aOE}s#W2NCk>=N zJi4FN72)hT_~&GEXh&%=)`0sgo=wi?8gONh$2WzZ;hUL0Yj%czPG;8JdGi-!pSSS* zoC|U<4CF1kD1S-8@)ax3^6GGSM{0@poT*TO0v;dv`*BWa$KN$@TxA8)aI`)ZUhCLv z!qH>7l1=br`h)O8fOH%^^FBfeGAP_r2JRT>^cXl=D~FO*S?@rP2b3_xN}joX-F|#y zcqIm|(U2E`fLP_OHgNs;26QlnyetEk4@Hl~z@0*xUJv>Pj7MrasCv9;;D&&s_X{d0 z+#^WP<=qDyz0XiV;qVylz&!?BfdU~`xE_JC*Xw&3I4{za-Q94nN}QTP;D&oc;uK%S zX1Q-l+)SyX8}1#6Q=jJCaPLao>?!0Wqq0=r^eJ%Z5=U4HZspFExLE?`ip!BWsL6wy zynKnHcWe|C?vOk$5%I7Bxbx&OMbt+qJR))Qj*mhOaCl{82a-ov6E^~!+5ckUMuDU6 z)hf8jdjq&E1w!nGqd6h5?;fci>G5gRzOsS00;lQ@w%xv08S=Ji^5|6~$)aD-kkWMolQ_C}DID#!q3c(U?-=wwkmQkG3P*cx=(w6v#zw#=9HlE`^3)V)jLpY^u+yMhurr~g^*f@M9amcFyE`T&Dm&P2b z+%6pJIcp3-nMep2;q!?E6OBfvEvjoK}MpBv7b2nICL>r z95tGYqe0rxZQ z#)#Vi4|I*wahId8XS5Efa1;aABXVJ`*#^cQRs>>&+f9C+YO&k|*2`VJdR<8oaDl+o z>*WUMq{3~N`UyRK{}HEbQ z1f%O{s`@WRCFp)iYwq43y!^_v;1{v-?n}qh(_cG2JMXoLf`bhw(pl>8OUGxAY&*di ztpuBPVn+JR`@AQ7Nogl$CVP>3&xz#pt>wh`4im!9S1Y`jYsaweE89?iA|*BXL>fyu z;q`c{yu*b7tT%gNh9~8Oj}cuINE$5;(28=NG5WjHTYsW7IrWq$HBk63KNV|Kvc<1W ztk_S|3WJkn&4lb3Ty}g}>GzR*A1@2KwtyPu#$|Nw&^!!U+jf6&`xRde-gWRx$7cI) z3ufMz{O4@klYBcUwxsz)swW+*TZd3H;kHSm0lO0htR`4z>&{A?JCk0^_WF13sqd>*bBhQmZ>5#CTEl18pen-x$PK@@CJ4ECFEosEs*PhW^k*B)sTfXgr4eLR$8ON zlfu}0pFkS=bNzf+!h82;4$cZD2k#HQc6{zY^A$&rr=zvfhL57Y4VcKBg!+5$&ZaZ? z3wxd}3s&$JxRRG|w#FsFDy-fd2>!zaJ3y`DDHs_2<|)sN-7h`(R{5Vj_*TWYUZ3zD zV#8m4i=BTjdb-}TmGvl})20G>zI_fHeESOD_}ka{$f`|m`Y%>FPRG_6+}7VREPbBc zstb;)nu?W}zkU+8g1quvDl02y-MyvWHBY0i`;Q8Xk-e1ZZ&U{&9{lPb-EbM6cHXN1 zt=b|TZDHMg>%ouK&JU&p(fb0g9Zw&)Kj;@%k3b`?qaL({HK{F1W9ma~k%tvxqis>g z+aiDX!MB#(RX={ql^b6A;akiH>-vh`9`QYi->J9#zbzX+^me%~^!AYN-|duBZ-?m2 z_lax8d*ve;Gma3=?Kk?w+haWEg4dMI#5t?mOx%;q{*r&e$_vP5&m0vsQ#K=eJ@%cY z>!S9VsNawN>DzJd73r`J`l$aktjvCY&|8&CJ=K2|zY9%#;i*$BWA>4v;CkLm?~G}g zlHf-S%h3I4;tMmzZ()lHK0WGvbxuLmXeN%b(SP#_E*ni7D=6q2ttcoPtwdZ?uygdO zQ=XY+JXb*^FEUh_KdQ>y$;*87B%Tpvf4PpQ6hy8FKDU7S&kjxpY&w=zz6JS5j*?c< zl5pPqhOv8p!~8>)OYHKlnpECqoMF{lQYi zVoZp$(P}th(U|bFci`^-*%K+akMa@VXS2DL#I>LjYx#?_bSAG~CGHzy<^LLvvd3Z@ zVYA6&v5NV)9;E*5N_9QJJ&Run_&p0{-^y0z4CCc3MwH98v1Q4_OSiFAGe?(hd%Ds) zT%PmJsAuf|U`GZ|faQG~cRX>|<67Pt3ZBO`Sitq#bZ99b6^gaC#j!Oeu5e=SggS`` z@LUSv<++QTb*XUHg`T^_*z&#lTMxcIap^-CUtgVp{S$ryoml>UT;I}$eZbqTC%{bQQtPU zJb5^00#1AvXN*#OKey5^N0Y{YW4B_Z=cP5CJho^AXT#zeoD+U;)kjB_7U;hjsXxx+ zx&*MYIrVasa}aqC1b5X0?#%kKVTikpig{2RpcL(ZEjO~4WBKx7u zUi7K^u07%P@*Z{P))OGp3D2hvEU~rmhh(rVO!$m42$R9t&*eLlKQ5Q$=INLW-y--{7=3< zv2P?fcmu{guk!J5>hP;_JnTR092Y6uh;b91k-oozKT**rDIKGv{ojXu%MYHc!^-|@ zq*O5MKdfpbS5J4ew!b`josi?hmO(!LSywYRcqiSH@^Gd2n+w!EDf6lmmIqgd2mN1N zeZFVh@7r-QCHAM(?NlK+n_4(qdd-_Juu9tNV_)Vw-%i4+CR=fnxq1zn&*As(Tq% zWL%j?Uq0@$Dsn1MVVA(;KEH45W!_h^knZ)A=Tw|xp67AI0?$L==b@{*r}dQcXNcjK zk0*!4?h2RidrVPqS#Ii2R`O$(*HhVgGQ~so7Ti!IdMw`E9FaC73(&Wfo+nG|Qi7uk zT0_qtPY%3%Jk{1N)z1P4LSv!iQ|0_z@jp$n9^I&DR$xIJ@x(_QI+iu`R8mc-h5=Q> zOkP8k?!{HcSwr!J)N|OZ-?H4I;OW%w=%o4y3yR%L#Bu(nA0AI_O=q-IM(PiB+a+_` ziP6&!k9#|SFsv&O;+pcq<33k}7_o@*APH@sKJ2Rz;}(%RgI|jZuIo8GL5+bx@2vf} zzMLc)CU0P7|l~mj6)K}-D@9O;_aeIk6{Q8jSDfH$~jQkGpK0|N*MDHKt zw75E!4Fn2uh6B8}>AfDBXyX*pTfGmY_k*N=?&h@MkK}dnNA`$#{MMY{ykL>mOY?FI zwDyjmKMRWsEqgSiu;oUn|5Q2!q#h~kg5iPzyd}#g>lF+fI2G`Ga#_)jXB8|N^%c~Q zZ(~bGsW-10s2{hyMZBg1;_MPTdX2w_H;O}6UQpDZjpNJNqR~?`JiX8~<61|q+PLEPB1U-a>-&e z{E;!C?+WORSe@FUGEB zCuexBs{YnX(D<{YBU}7Mya!6dyIyD+^L^?JhIg~LGEDVumL&E(nG(cXV*8vF?XTWY zQ9nu#W{&$aW{;)>*^20Of#Z_%@LpQRFICn|U zR6Om>4LT&Rz?fw*%Dy#}`~2e%r@dFeJFV>>(n}V z%vSs>FM(ux^4VgNzbJSyzt^&hpc(7K=li)w13}-S1OI7NrTizn`SRF*dKMGPF3U!q zcu7z9En*i@FU_>erWAFTqus~~szeP{A4PA#y(4Qg+ACNR@pC=IISQL;*UWflaCE0J zo|8YZQQyZtWBd+%2J6VTw+B96+Oc}g_M%TPY*-I+<;wQ;>+!b_TiW+yL-cl<$KDrM zNt_+Kb_Z5=S6{;ScitwKQr=eBw!5>dV_R2eTW@P`XSmO1Xsh^bga5#`!v65i9(!+S zwYsjpGc^CQqjrOqpLtMjN4N+36J2(03!YwSe0rsEzWAhCG93F@wO_xgZ)cAqb$X@o z$%}|P*6dX0xnt$->6ON(wo%N*PE}{bI^kz7VS1(U>6ON(R~qNz47p1|>~l(6V_ksx z->I?FD~&tX5RYv!@;;wlX?&I1GeRx6?l9K$O5@WjjaM{otZr`EM4OzL>!dsSiW)bx z@9gW0Z?#p;lb1^00AKH>rs_tN)U+|MQmvz1-Pl;)*wRqZ++5wb`Lbd#T3YzJ(k+q* zHf(8Wz^W`*sD-C&sJ^GZq`*iE_F3#^(B_mQAHCo7P1OsH?xGq5c|_ zi?sKAT)m~ZMqLNFa>6^6U zEmzkzp`KedH*IMk)vGrEr)}QiP)uw$qb$@kz0&xHeWmf8ySw^3+it?jG3{{S$4iZs zZFpg^y``hGb;mAjZ`|2VX}h|ylnK3Xz&6NzcxBNN3Ac7&qhqkJVG>rEL9Z)3-PaiH zcwbY0B`XZD2Ap1umi}Oyx76WJcRyb8U(?zbV6_`J*JC-5KqWLpS~ChmYM^?c2OT}! zL5E%8omh4SN1MVsyL)d6Z0hXW+1lS8DP)1GTf26L`vN5In$G@6=dQqpa94jTu-A6) z4pj7A4+)#Xf#&W2y)SC*4HFcw9V-IYL^|6eT!)5ktmM*#jhrFSF1Lpg!@Yt2?m!!I zk=B6H9pjbCTf6l1gwWqbKvm+4f>Tc~1H22bKGb>{U76^*XqN$R#Xn{C+(7L^4FHG zZ0qa~H0|!`>F({1azjv#)J@_qWxn^q4=QIyk2lOb zC+!pvYVp5~T({p%e@WN$pwH7G{66SD`nxDIfO@IWfCH^h!ZVZaihfS&p0AWZ{CTGy zZK6N^po%`pgz)>I+aZ85RH(#(w(auA&!tU@loE*l8^4&_vs<5%XY1d6|L=crZtSx{ z)9Yrg*Q9gwCR?d1f9qw(}jkcUK=T0kQ&Ry25Id@aLcA;In zMZ2cnX{Fv}rQS^qeD9>hb7JETRSCpz+DVU&h`#k-dip2ZI<^lmUo}!z1{NOVR=7m zd50`7ZcBGr-n%XDJ(l-#miP0P_X{wrUgsq!KZM^0eZA7_{Ky&AISqAA8?@4HwbE|0 z(mrFQ?X%Kux6Y03 zJVdYzeiG+@OtD!K=eKDz$)_8%2!gLDTIGQFG#C*98anh#;d~l&iI8IOQ#qdo*dnAF z{4~y|hXE1N48E81>0&B^*Wl0Ke0snUVTQr?aX#HhMerH?nVe5I5)oz^{B+Kz8=na2 z27eak(@PK$W^sPh-hxj9W}UAnT5*T$OM`k5W*hP|IG+Y7B4ikRKj+iQC4%4J&*6OP zh$74}_?evldBw(#HqQ3V;(WSzh>&IQ=W;%sXd=ut`13fQZa^Z;Gx+m4|I><%oqwF= zFEHqAj!(7m*#`eSgI;LR=Nohmm-nzOFUR0tV9>b+eW9Vxg$6&s`Sj98gn+@%Gw4O^ zxIDkckRb`Xe*H|+2hfLT?>0qKauQaHQ*)5~m{F2+f0xlQMC`eK_7aC(JJ z3;s&>9a%ou$nRl)<)AHgpMy?ff8d~#S&M^CVU-R#l`VD9X>7KG_OgGcMWB>K~!D{$YxkR-#O^Z*k3y6%h{J5^hepJ9CSHrb@fED)yLz-pIb>pljHGgRW(tbkJ9@=-7wsaV1;s;MeiK71d`G`yNhYf>h#X;iwQN z2GKOeuyB1`fD?&my60IezuU+v3GK-q-jh_dtuW0xTFG&K{IjjSSD#2bJAXzeo2#F zv=`>DWqoK&nQ6^nKa=#|aN5U4Bu#dsy)Yks8yFU-3nO=CXV3$sVkcX0k}wnfrE z=X3^N*O>HM!f8KSDETxd%d|4#%q8@vF<7RR#eO60`v|A!vbQAt4NlKvuS@#VoSx5) zO8RS@UcjD{G+qBPt!#Ek(n8*O?0}>jIe#JhoTPI(eLm}x^uwIaVV{unHcnr_DkVM0 z>0Gv2(xSWz+20{u1=lA^QXk5|kK=gc@68sEVKd`WuXC6y-(2IEAQ(0&)Pr5Jqz9;vLL`-%ixJOY78=zI1(|I3nX+GQL^Hx5;>j zVw6i?d`KU{}N-{rG7mWgQk8) z{BKhXeP5s$dj5c7=m8O2kAFc-^&dy9*Z&gYBVRei$QPs-`RXW!{tXl(Ux?yAmv)EH z`-n!l4^s?1xZThQ-H=hdeC*2^q?^bm76W& z92u7q4sy9ZkW)@Hl!b{oA0n6!^ccmE z`*Vts$n}MOqz}oDDX z6hq#llBRWyDgQH)ru#S1FH#J7M=6H9A5jc>UJEhg&88UTFQgdq0+L=%G4dBl`VvW( zQw({uUOLIUf?~*{`y91Lh+?!yhm0dKroE>r{dC*qF0w21+)pv|ykEw2A0d6eA!**< zK|d?$?@~Fbp-?{A=0f14}QDGTXG z*Gtl`kzy3ORnl#ej!=wpcTtRT_aLV8e=lMxcaUPp-zQ_94{~`v$n8P8%17l;KB5Uv zG`ADtFUfR%JplbRNq=49paR$9ahd)MV$x#-G3oI<#n9sg8KWwkUW=IOc`3z^3n-Vv z>kU2Xh^Br(G0vxFDF&Y85T2hmKal4)Xnvj`-?-%e2gRWOThe5I%18F5^!bve^P6aX z{Q{q#SEv*}uaI6!eCV+OG1aGrV$`Qj#tky2^NiBB%D9Wlg}%MA{F|jdw^5A2#E_&_ zKm3ZsIqVA@RN?wPA^FcxjKmR{PWB*szlfOhBfF3uFU$B98NZE~^m&J3)RX!p#Wc>f z?E;$H1MyV$D3|q2)GiTO{w`U5KgFnrZWpQt*@fzH55=el@0ZY<+YNeAI-L)^UxI!> z(hpM%8X`HL_eT&<5sh{nK}_^m6a#k!#lSUC3|uqCz=aT#{0d`3^l)Kjd~r z`lEzH`~=0&;~7bhP>gcFE9n;{{W4l8FyFK8lggFX?<47f}rP{JH=> z*AIAZ7o>B$AUz`S{StpO#Yi8N>0}3@c|DMy*8|Etf^^b@>O=aWi8y^w##BGzKPBU5 zWjsPL?70Xr$t|E5a!X}gPBHXT`qmK*9M>B-rFV$ZL0>2NJu<#o#)C4xL&jgC82I}n z{WVE{9WnJ|u0QHAmHuZ-@9nbuE~!tiq)Go=H1Z%~vg$|Fn#UWNaa(=Lj!ilDk5tm&sV2N8Ij^+ac4ro{-D?3F4b&I_XDx@P3B)Qc3fE z33?&uT(sw0nZ88Qq&KC1Os0oqyoX|xdyk}5zk38U>6kY+F;vR~3iE$+H@0I-fB>w@)kC2?N$~~!fh<3MNoGwalmGnK5ZkP1u zB#q2G|K}wgmh=}SjZVq=`y~w{ar%prZj90r{ zM&kHCl5~@#agy@-TqWuIB@JV8{2xnttE3;0^fi+H6G_)g8YerKw^`B;N_vx|4@ml2 zNk1fMG#W4OVM$*t=|7e97D@jfNu!f-JT5A{ycS9SUrC1~{ivj`m-PRWG&1r0-;gw3 z7;_pgL%2M2UQXX7=}$`fZb^R}ouH654R7s-Yfc-sIL3z1@Y2C%!-ym5s5jhIXzo$2 zZO%zsk9QVwuMTp%X$<$lRj7~rQ!2wdu#2(AZ=fBJ>#_4^Gz(AKyc-^zy<2wmb?(>& zACTDWn(%-Nr}Czz{+qhOF5F4Un_BxOt56r7tSQxDQf@s#c;4tKW|rz*j_Pa(Z*PTl zxSe)83askh)!wzcBTOt^U{xgCetku6Z|hBc!S3G8ySp43O|ozW--%k-vrqUk>Cyz7 z``*OoHot(7ldHC+D))s4OiLOkFzV<@hdtyHudeO-Oe*?@1$-&X%qRjK4gI_Q_G(1Vd+YT zZD0Gtt-Tw%Z`_5$zHt8*+zskF+w$`p!#BW*tv^2>8L*%bqtm&+g}d9g;Jkv1Sj%?d zH0EHnioMI7tiDzhNc)L1lyDt3Mc=-?Yj~arPsOc-@MLs|K@eB z`!}z3EoZH(an`yTXN{|I*0>sHjjM6ixEjY*wNh8(l)4(H)YUkvU5)d=BG)PZY`=r*!61(9)Y^PWDhFh-> z_u91doaNUD;Ww)kpc^LlFb((O_9;AX?QBk_^4Yc7JRdpq+9}*C*rw#2NEIa=jBWNL zd9pTihmVRRhh;m998V~T*R)1)a5%PMd=#KSe8i!M23*Z;SW{1HyJjSeyA%vgx^T~p zlJL+~EIl19#XdY6a>w6He9}!Z-jG!C)NoWMjiKmd77arur>Y_7WR3&OPYxYJVAysB5 zMNIEIR7jQwpD=JkNT=^MDk$9L29Dl^yrAK{GQ))iZX0O&9;AZ8{g>s`uLA|q`xX@x z?o|UfjyYHX4X5-wY~cJbSP#-vP`CpIZg7V9?r7pZW8m)diTBVZZo7dC%oN`zOxy+o zHxAsk81=|EaCNg7dsPWTtm;8~8dG-Fz6GO#nVuf30;2xM8yB{nuaQXAZcSI#p$(v)~o(C>nfwXe}3&()k zb{Pfk5ebU;-;=QV5^LMCpe8j+g7dU!(Gn9sj>*Hj%kjg zUhWTEa1TqIDrgiqRTibG<3FM69cV;6ybRo!Jf?_v6z(PT2O+(&>*SHj}pHUg*jKR0<{-~tKA zyWK_JQcVXE^QXY=iy_a%EnS%y?$3Z5Nnj;Pm^To4o7Siuod{XgA#Ibz=U+RJiwmOQhUC#sw!4+`9G7@rIjz-%Aj8 z%_WJI`zzoQX}4QGl9+xOmnJ6fkAdq~Mvl`DGA>ID_Zi>@6Ofm5d1CTz1TGPIzXmSW zb@CqEx759e)Y|(|{K44s%ZUCGzhwL{bY$JYVQ6iKz4)%T6;uO$)CUMh_pWOV+{?g4 zkWM%%N8v6paF=ct?M67TY~1+bh_5yQs4V&L8Zj;^PK zqp`P=_q2iA3jlp5CS00^d%(cWZ4}Q7gd=+>dAAt2H-J<2BfS-_&A?sS6txQ;S!`Un zfqN0SG4QEeJc`)3fPs6gIVvw*!&wII(k+Y)f=}{hX}C9F1KrNg0*6Zn$D!NU<$lM& zy#rj2#ARr>Ck$N2)xvI6u3y8^oKL;nF5p7o6OM*i%6^|Va4!O<`b(yU>o9Po*F^h4 zmWJD6;GP9;1bixYu7;~NaC_0XPf6T74Y%6BmEwE&fW*z$aElDwW5Cr&+yV_Z%fP(@ z9NCTZ%hqte!Le??WPImV^3Kz6Zy2~b;FP?D8txwq+%^q&zJ{Y~h+b}&R&I`l`?7(1 z0=NRCQ9UluaC;2gtH2dW9F0F!KWH~_>G*E1>T#ilt1@soz@h1Qxd9D_;eewa{lJwY zjr3cBpDOnv9P9OcLMyj04(@pkw<-?qWerF5b}RP{4Tm9_EAAZ)hoP1$E_qwjei&-G z;^t~NvYDHH`5JCb99*e}TN?+rLBnCl<63UBhAWGM>(FrPf+!Y(Qp{zxz^(e4TqtdEADv>has7bqkB^lek!~S+;_AD-2Ql=F@ToLzS;`kVj3{X zpl}oe*Q3%$t{484idMK)B_-w+GSl0@U<0{i)q%Bi6n6^5mBeWbfw4m^;{pXu2+f?xfKBJ8t8JD`a@=Ln%B zQ5?cgU)aU7cXsA1j7ZZwX;xa2H`$xwP4%XEz1|sKpLgc_TUdq0g(^`04B_`by-XVW zoAvx47DArNw&$WuRF$2<9&TNoyRH|zxV5k6ySVX$l`FBvcR!}Ti51OTJ33l0Z>zh# zucf~m6RJAGSnC?=ZS&>McZ7F^d$Fu_%g)xG9!!eE!sk2Ny1Qt_b6Og`r4LI~W9mZR zWoy@#mLRdcXZL0HH#U56L(+C6T^(%LQ`*wh(6XU;Es`+B3bU_1&|TYTc9{5v$R~=e z?2B~nEbK<^@ts2S3ZGFu+GA}2 z*h6jVwgn)m^1<)O7qe}rH|3k&l#g$AqV_?X-juJhuG+Evi`#yC34vDig?smOwuf=) zuPwB4JL$KVxW@^c5qZ_&73*Q;%{pDIEyVIHFUNyZbpWYP8sH?;| z+9`Yk&d|j6cAILuteAZ>R?o22xv_8i87ct@tN56yQ(TSDNEh7Vxzj{!ouXUMO~qfe zqc@DvO}KSsdsioI5)<Idmqoz0IvwJsnG1?>#oh5d| zXaIiQ1~@)2=00@3fR?3yD(vw-PoG%3itPQw_hK2>Dqn$-My_l zoOh%MJ^yHTGSI7HrOCW4t!;h%y{%#cB0Zm~oI}|3rhM_Ymva~^<|SF(E-JRJE?HYr zWNvF$)70=jWK7=EPU`?l4Zb;EOyQHa%}WqwYX3g7O>fG_w>g~Nln=WnVjsrZin^9y z72kJI?zkA;?Xabawl|bJEjHCvS2u8+N@%F%B;Tg7a!YO9h8A)^Xlkz51e|<-TD-b& zHSOjY-B*#^&YGHO-$N;!aG%@tRF)Pe+;3*esM(0BoKpvp7UUEETY+ zqPYgzqmgO5y**v6I5>N|^KqfQ{r#QvX3ZJq(F;^Nc$ky63_8i6lMOnB&2Y$@7!4xvey>EYy?bgIEmV>C}%1rKIU z9CXm>>{FmAiR_sPeS;3#Vp)lKZdW`CHiAJJ14G4elSlr!NvcE?z5+KSbVIO$`-Q)%n$x6=nI2)mN3} z)Bd()`PCJbwR=hof93X`9`aX?>BQVlZp-xGI>}xwXn}qfk56VMm*T#iEiEm@>sx4; z4_V|DO)tA!P;Sfm)#0}G_L4RrKDMT%rLl4Ab*GbM9kNtk-Bi3KD*%46c1fgv2t^Q53~OL0u)s(`5`3C-mlO%S&M!fBkN zf-1`_mwc=e!L5M7V&M*;041BsIslxiBhl*kk8rHx9szDEO=grq@xA~WEIYi5`#ky9 zQD3|OKaz(b0i)q;bVP?SK(??mh7TM=II??{fg>LtN++B?_qNo)?bUG9zmz-^w@<^R zX*e40==$9Q9O+Hvs(wSUiF-i9QGQjfiF-`L>2q&Q+_M@^pL=WK$Y)9ENAmzwx#k>~ zSAo;Vg{s}mIWB*JjM*ea28E+INt@&HT{P;T0wGp7{?4-{(z>goE8JVyy-Gc!tyvR$ zjtf>ZSdFPJ2vg5-d3g~p(4OP61g+ql;{pYroKu$)3`BaK_HV8qf3LVGf;lhm1tQr` z2QJ`8A(fJM!BA!L=+%qTYSU_nvkbWoAL}WP&XLio$NT|Gulc2)Mfs}EdQ8XEUM)TS zy@AUv3lua5mM>eWg)S9rQ)8!B$fZ|bA!Y;scpuU6)&5noFG(E zR{DE8LCC1?|J><8F`IXKj?nZRA^z=UdX7-Ax}teYV|B~)93l0kv2~ym(=@dYg6g%z zD$Q1_)K@}1mzqCvX1S;52-%-WsVS6Er{@Umz~qM5rlHwJ({qHvt^Kro-m2)!!&TFB zggRDs!y?Kw+7zJJ7by)eJx9o%-5P5?P^`4+IYQ1EWwCCOj(!&lU|-_ol%LbiU<#O? zBc!Hl;6q#!CX6(cjAj`q%i_LEk&bj5NpTc?WH=Ka@1J7tL|%*2(=sXxe9#3zGoipHg7N zME{#X>)+NW|LM-T%7i>07MZ}bDCWcB8u=7saSB?W!iU8yDiPN#Vl2S!gcX`|N{f(0g5G&lS6FN0JPGT_!#o=V9v{X7^z;# zqe$UMZ^*OfIa0OAGKo#emZUg#=ewJIO?kkS7qSp zG#vF+g)231%^FUhhiKxqX*eq1Ol{IoaIp6d=bJg z_Idlkl(_`uQJ9`Xy-j^f#P`^3aBlyW(_7C&oijy05dg}D_)M-8=XL{NI-s^wjC;-?~!>0Kwy#r~ScCwqL!!M6;)#fBuGzU$CjY-j!?dX>oo z%`ZseD+K8@KGez}_&IE|RzB(XnEpW?bBmp{Wzb2iQp3|+><8!rwhEX_T%yr57u(5C zVLze|^D@v}Y$rdJ?Q`(c41OBRcksOi-^-4Yp=|jx4E_w(>)`tgzK<0;_%jXuO!lhw zJv#|IZ#(r*XHPizvkd+$cCUj!+u)mYhQaq6^c;i6+;h$T3?HGL^jw3UXVCKvdVxV_ z8}xbXQ(ApISe>fPLFcj>2Yn&;g;4F|VF5PR!OvsAr4vO44`%g@Ip~YncO7&-d(1&E zW?yp9OW1&eUdn1f)Awsirn&UAK2wyo*a@6cL{m4Qx%3;*--)JgLNr(YHpvIc=~CF6 z`1EZq(@J3r9sCsb3i@l5pUOt??UZN=G`Ic^$)|6anN}KK=PSxjV@n+Qy};=Cz3gQu zN_dff2KzRMX#N?jU-E^1KGxyj`&f}9KYSA${F&@$XdjX%@~884ucGqP**7I$*mD;9 zilmqD`piDkb_kTmq> z_-aW*e@+J_je2l;qoh$EPS;2p_2P7`q-ie8S@02ChWSxeLUmTFP*=}9!@#goCYa7XCx?e2m`r=#OKQn0Ba zzK)5>KLd@gI}NM8AB|n)pRUGcqeE-nA)2s@+}hZEfODEEr?zhl*)hyMWl2?Mqa-p{ zLM8og^kvZPw*L3(5;soCdRNX`SI%lzPLUg@c%3V!)Rpu8{I1X^rpHOs<0LVZ zT^}7eCVExmBk9=V*;qH2)4DF6zU=pVW&H4XNCfg>M2de@?YI{uM?yA*&_1wyQFT?P)XEcm-E1-0Y>UVZWRK1#+XkxuV`R8Y9D z0fg1rXmb^*>_p*z;|3W&3#6fbb$s*!y$jr60_E<-d7ntR z;|bzAV2DJ@eFL~e%H4{Nmk91f;1Vgf4ku6|@jQ`Zm@GJsEl<){l@J+mwDBYEUwT8f`KS8>Rm$`jWOdd05$s+zbF z4M%cF9-UJr?gb5}`>L9_Q4N4X6B@W7T&; z!{M`ot2}aCr~G8+>^L~Dh9iGmW#@}K2T#tqe#K8?}I5drGx%)L74qb5vG#s^oTRjeHxcoS{ z5e>IE4sKM#Es290({OZeQTmy_+~dGa;99PNM;@5I+{aMZfB6(DdW|AHviB&?zZEk^ zV>=a;yj3NoVrv@saZ|8;x!1Y*a+f8%mrXx?|I&Q9Ygy3nG0nf6WVQX2>#-1lV zLxTgYzsg7s{c6Dm+N~xfc;Io0lY?USnu~*rf+@9>lEinjNqUHm|N9qI2tNI>Pkl;$ zhx&s*@O|o2;awewiP!UFdQiwq;rT8Ow&jSt*gdDH=P+S>mtTH)pmF!EU0AUxKyUB@ z7cJg>Nnq*XzNLkQg+AtgGC7#cb1w=;^ZI#SJ?rA#0eUpzBKmkvD&IRaE9f8hXJj1- zp?;4Js2Zl)HJr(1uSN}hyoLos{&)Ph{~cC87snnJ)mYTI2YL+-h}s2) zC{}uswP>#&i>x$EbtFBdg#tHr_D2F@Whh?BK*#Q0sybDej5hIPPH6O)`b``b?ITkDowpB_O|mZuz(PH=$W_M*IwXC<9gIy< z2uhG1Jx``WkMv+BFXf_ONpKD?r(oy+FFz%i&N<72^LRR2;T`TdEcy%8elD-Q&}TkJ zyv6n5?cHp*l$%;H^`g2oV}IVJK(L~=u6jeB)RkBW~tp+jVd8iAJcRcLpK+&Sg6UP@dKw&Pn++ zu2rE92NhX2?@PHo`HrN|Qfr)h8#Hnq?DjY(Hqg(7a-)2Z)Bf_+XUAW@BfPzJcUQmK z)v>RzI}zXc;*xd0$Gea5cleVleny?D{rAR^ep1D!o$9BZ>bXbQv{U`GQ++HyJ%_ts z%%uZj<(hV?7fzU)VmQOMZ{KldMxEY|YYUzR1fx z#T?97dymCRo8FIXdOxz(UVfc!-`Usc+&$9Kqtx(WGR#~O;C*IuE`QL1Ev~RX)%1R3 z)BBO36VQfc+D30U)b=i`gJYMz#~Sux<0Q{ixuv#lLkrF2Y-+C91YGGltoXccZSm^D z)y1?&T77+8RZT_h<`yhxC_A0pWUXRzMP2>ITCw4sOl!DiliHX~rZhHB+PY0uw$eL)vfE_%{Nm~Y; zWYEd10r}~Dw+P7wKZWxHiVYubr~FjTkG?NVHTY?qPwy~ANHh3e&ZqbOB6tn{49=(b zup-Pb_&(03ch(~K*an9^G7UP*pywI%0z>|JTzpqTMJElP zX9qutJ)_a&<3CrUX}`5+LDPG2>O&UzKgC=t70Bn`iBDmF;ozql{8Scp@Y4)_8Y^({ zy$0XQUM0iJkc8PV&hoJafP?Qd_$EEm;HMk(EQ6kH&>05pH|RO+i&7sthmx>xyHnpx zcDLkHl!X1`oct`-tJTNDa@n;G`a>7W;}Q_(JlcD;!GlY`D@4@!D2 z*Jqxg&pZ~Ed`u;Qz6%Wg0`?J2UJ}kHXMIe1A$!jf{fpEjAN{{|&=$K>($p=)x`t(1GuYQ8P1meU%g2rrQwH+q|Gq*0sYcHM|7MLQ z{FMg%LGQnJ8SFB>Hpz>yv`GT&yIPt^ltbj^dMM1dwD6q7O(FPAYHA3?3HV8IBXJb~2tp9c~*TWZ<`gTZtKOy>ywL{(~pd{&SHHrMoVFXl> zSpm6*0Va%aI#1Ft2B#NEI#<#al16)RK8(^ua!_ARS4kT6=JWa@B3Y2p`X@Gm}=+49;_>Xy$i!#g&nQ^t>Vbu0a1_`bQXpOIy(k9 z>Gb0&S-&UT+tv+_Q2w>8Kit~e(S74C^_{VLl3QojJv!I+K!^VAwAjMUaW?9t zN8cU2JuQVD;kMm7TKEg+{6sHsdZmlknxDqGR#D~Gs1uePXghc94(sY;1Jj*wcrRHi zz2Qw++%vwlsJJLxR$3CvGd}U0lfC3mH!pe2pT=FlzV4r^J#$@l9WD7Vd)dqTq-`r> z0iV;qA-dgA-_Om^kY(S;V%;7l-3Z+>pY~1A5ETCg=mwth=J(-oYo5x@`*d#4AD&vB zHD_(}5?T0xJ8s7;(c#1`HkaLv!S&hn<6Z)JrXTmb1?Me1+g{v^{n`@G#;GWg0zGEY zbCe3|_@sfOXFA0rtUCT@19vHSO16&6HE>z*)wmgqhzem9*tO^Qu(7?S30F|wR z!nGT?0?>G5w1dJeGI0Aq({r{83U?Fi7u=A|EjoI%K&8NT5f2!qM;l$$qN#{-yN? z<|17MDvQF+hP**d9$p>T^12OqL%=QK62u=R?-G!@evbi1?`ufE2!2XGIu9vND&$gl z7C3s;S3%X+?gtX*1%vt&`MOY0IJ}17@^~Wt_`&E`gvK**`x3-WB#7%mhZ;(t+;@N* zOaRx94!<`6+&FOeB!JtC4w^{0?*g|k0eORHjJWb-yOFbOEL;ots_#&7gTN)zfeh;S zY6G_qxV_|nEQ6A<88}rWXTd3U1h&}-q8>kzNBwajK`@68HuOc?r6KYI;= zbsW7U3?Q9wbnQ^M#|&HmI6BV>hvIEqi-9Wx4zJWW4kov8xdtu*9Lb`eSHt}P$GU#| zfvb@?N>9d*@OR;-<6Z%-0cj+Uu9XV+DFauqSmY-h`K7qwiZon$99)@(qqQB}P|+8cz3@H|x=$;i&!H%H68r=sKowT{zb57XnVTTc(CdW>rF;`y1s0vy$oev;Rt>G?= zgDcQ*fjGD_4VM=OSEJz;#ldaWa8yUt9%g+b8ZJK$Za~Aql(sx->m>YC7y>RyOTcA- z2kMJjGP`>jV^@166OqDE3|x=m{Btp5`xT+#R+X$P5gy^d4fqbjC;Qp1cfI!`sb4=S0o2L zLBH^dg%`EI9C?OGYwweuU?k|{I^AiP<2|hWrPHL;88sKfS6N675Sks}HMl;wJXjno zU9gB_yfuUua@IT@81f$?UvST;C&0!;t%MZvPfvZw$1UTn z$x|iUx~nI?*4_Qx-1@vOzF=oCi?l2H5^2YC`%hUJ+1&5kd)WJAEQA+&dxDm*8@Gy( zsP{2SIa{=lerA6|$gcZKPWvW%ecqX8?t`5QyPCHBpnZbr6Dj$kCf$DS{6O_*BV2;v zllO%OAA8X`Cv3pljiR{DX5{ejr-@rgK$3jdfHg$HDKy_gL?9 zvJK8zpQG|rpmEyo()XK&3%_go(^wGaz&W$OTia8cOz)9?c6`3=Z?JMcK*CPnWxww` zrpKuH8Fj1n-y5&*$u*yL`<{0D=I%7pZr{^x-^v54S@T(T_*&T>fts!2?rnW$xu^G1 zw>{rtxQ}=4YVX?J5k5l`@9yvHIztiIzx>Q4tlAOY74Gd6S7UPPU8!#ho@jrY-b>wK zHr?-fS7-lC3Hx1h@U+`^e^=isoMzK|sZZ~vKE0Q^=D?~g5}?Km+-uu$8*p$OH?jm_ zcAj`!$xrPqKJE6svAVg1Jc2jKf!*|8>eG9vpS8Wz|5{BZqnC5|>gA*@gHAH&WP?sI z=v4Lu)%B95Z}Q~#eWk{y_W7uTZy9`xt&x2C zwncv5&iv7@>@p45+VJ~* zzd_G2=uCsoGU&MmJb&9Q0C_=AaAMTXdq!;9<+yOAdND z`wD34@03h_>*SXor7e~#Y3e5AxBg%96es)5u~1(Jy^ztIRSJTCKJ(%HA$fG>lOH;* zD?v2z$q)T&4%*AEk~Cd|$q(Hx>2gl{*iWDctX>!2H@Lk{O7UpCP< zNI&?S#C$*NdYOK+^gr)ojOI{Nx#fthU1I*F53_o>Jd{Jt%%Aj&FKJx z$l~>NZz79f3`|9l_ZDnmS*Fi`;Ym9{uPB$~Hgy6E; z!0I)woDw%q$$D4LT3618dQ}6r^$fHT&C~-Tr!T*j)p7AL`(@mLiy`ui2STR2#0Eh| zuISi>-^VA7T_%rLTm`(JdxKNh=?;91+*1sCT+vfr-6`kk4t72~gO2Gn9eP`LhHvcd zy}oZ7U!HxNSWsRNScxYb-i3Z|FOBoTFX|Ax$QY|S;8ns|UDe@Y$TL@Um^*L&g6#7a zo}Y7;mv(5yyD1OKqjwk-O7WxjFDj_xEe5U(0L3G$I=<4tT?(F(t>bTC74SH zAOqMueA~d$GkS^SQKWGD4BP|YjzD3qJqM`i3DBVqaYS35Mrg@mkk`P!5OO_cx~d4 z_Xco&O`a-uqrlngPP_x07isDhvK#JQiBo(PoAQ#OILRX)WD0J$bcst7FjpMyFHiEw zmzsi`yc~(6cZU?*aQPBPGAX#>R!E%c-)^{4iBq4X+;Epl9KDO9;D*~EakB)>#?kqT zCb0WO9dLR-Q1VP%M}oM$E;zi_^MBJ~L21WHIh;1Vgf11Clz<&L@FXbolRrz&j2 ziIJ=b#Ok=jz=ePt%!&e)jOD2*9| z=tt-L-x#%o9})6Zfcwqwke& zxTiE+ymdBS&~Sk`@?Oz!d2w*ZG~A*%xCsqMb#$wTcWKlv`EhXB8V+5;RbGLHg9@&= zG7X1AS6q#TD~N;Js^ON!!9_G2K26%?QlCx2PlW;Cc4`T@Jn}%-1}&NW8-zTg29w|^ z9L2!(@J#sgAii7D7+nR0rYDto<<^|99rDJfoERK%ASnR>mDx@umU zym0DjzYkdqxwjK%% zV3msoT0^8eSj$syjg$q4HU{}|dFOo^Vpp(&r&e|r2M=`a-&tTj?ekA1Wz>%|Z|afIb%8@`YVV8;ZG3(re~=KwOCFs!KA0i2S-~Z;PF9dJykj6` z)w0o)K&XdwIv#{pJ^7sf^6{COqZ9s-D^c#)#)GHc`{+}{_3yBrl%GBnxwVpx2Se6R zNPf~7D|lqMJa?>hN6$Q-cVxmpNTp`;+J`#Bzsg80&k41L2137D5VTO*OpYs$L=K_c zP*FNrV`ngxr&dK?KA!AZ9=va3sFUQA#aGBi9)I%lb!^FJ4jzcKMn+DKFwe=70FzM5?>FaGvdR7f|k9$1Zf0f3bKR(+-=?ljF8QG&r$hCt@ z8i@=Y>flG;j{I|kT92%lHacj?3|t>-Pe!f-ofVN8hlVz88@n~)S#rZ)MbIZ+JI*pM z9{9V*XI4cbSLJwz{lWHMrFlqB_VE77A<*A{JagQWku=JNp^N9zu}o-@GrVZrYqd#a z$q~X>8HK|vP21knia~=B6_K@g7(SAhtE9y)1tmX(< zn};o%G0K)BzBpy{^@;S6dyZu=PXK2${Sf?5l0F%AA=HcoLT#QvpodZd19YDI56`G! z1O9P~Wz%_5UOw(+#7(JTd6f}bwBu=y`O8!^)A?0kaedmUvXrM_@u%7buFHP9GeVYJb|kR*5YB!U z7-%aP@Q%Od@l;(Gc>+BqeK-*G2d!W$`t0Mp2R)1)v?%!8<8#o1vWGo+8KcAtpbiB+ z_2cgqMMAx3tyyRn^#2NIGdzd)uDo%tM@jj`5z0^N^iW&>?8xiC(Cs?$(lk8aebmPQ!~;=vw53%4lbyn^V+{La6K!SI~?i^bh1+(hNIR%tA7!l-#CZ( z`90PNty^0o|JFuVoyF~R-3hlJXhk1r8;gJ!dYRXo+E!hw$PQ?)`r8kRtM-F+A+&SO z@I#$!S^DV1k#C>G8@iLXv7yS8AM>7akOiR67wGu)iRRlpOJ6z8N?tjRX@VD{S1!jn z&UOJP>*XXU@pe zuTQ-DMYM78k3mt1lv?xj&9&ZB$!tdCi^pc?4C40!QgsBlo}tR*(W@8TPW?Pa;8UkOxZ{lCNTiM6C?vVbHaA(OjZ7pDUdy@PjCcyY!*@hJ z#woh1-4S|zB7N|A+*O{Rn2X;E{EF}^9gO@cBV|X=bHN?IT2Q^2<5^_%P#r(=L=NCQ zxHU*uOYbn`%$PO$G>)Gd4g^wudLU9$t?ptWNU_EWl3Duy&)&DdM^)YVpLryiJP3Ip z@(6Jf0wxILL4;tX<~2hifuu=zsOZcj8JI{OV-g^!)u4c=RI$2UZ0&BewoAKii&neZ z#Rgm3YD?RIZfgrx+S*kU+YME_v#$U8|NhQBXXf0?OfnIrc6ZJvH|PG&`JUf-pL^## zzIWd63Lci8(`b7Q`TWV$pC-C0hRuf%D?=u>fO(1&;U z{3*X=LmuA`Mt`8|*Mq)oS%=WCpABT~_xPS4eV+TCzh=#?s`Vb5>2FDRJr;@?dnKl;70ICzfE-{I-o)ZNor*n}@Eba?x^yBhj>7W;r9Ed3U- z<64Z1#$PKK%?>=3wwiiRzK@rJulyvcT2yVIa-g2tJU6b?06cC z?S!&0hT?PMQaP1k{9u1u{9ty}pEM1q(8|pIT?xD6_r%?1-D|o1-0_6bZ#!w;#Ep)( z$h;;g^M)!=SbhHoKm2J$vK#(toBODFysCM6ZrX*?aGfh2ts2BB4Xp`OWZtkVZnt%h zIB~mF$q%wJvPBP!96VK?QA9Z=r_ zpPr*~r};=}F2{`_J=`nCN%rAzk_Bhb@QLDWo4lRfZQd1lOKSBdvDz;G);>E5x)VD~ zdN0AG+;UIpBAg32i?YYZn(SAVwk^51b?Ma%`+!Maw5YA!v)R?V)$i}YWZsJ6r9~wR zi;I>mflsS{>xwFTu*%!NXm#o0O@26Sg3~%@!?sdaQ-iCzcqyDb{?^_VppEGB_Rt2I z&>h#ktsRst%rIeiR=H^Xo1q_*)f*!ni;<3T4u}}(m_lr%W5o!|wAIoP1=|xqg}vUM zZSAdIeCb_b>Ikb++qM@iZW4+G`^UtZB~3_-bd1wBPveXNUGJKFK4GgljKm? z)7O6niX0^;RaJdsvtxs6byOf3sIj@e2}De;)yqC$Fg=x(PD!}u?SzlkZ~&Ru)#I^l zsSj&o0Ha*f)DSMEK^TAHNrfU(eMVhP&DCL5#7M{1)URz`Q5>T7Qkz(HwPRgvmBUq6 zzrLY#AxhYS*~BTdwuC;?Yy>a#gKvs%>(S)=(Uwwl4|A z>S|XxT+&$~8jF#RQTaDH8fz=+T+SHj*oQ?r_R}eHMviO~)5~UqY%$1I_G5&nbrQ{3 z4gPW5pXTc|6KC*`=l*u-jUB@J_!GE4tv6^U!QgM>{xrX?8JodBk^9r!r)Clj{z=^b zP3a8=6@C24+@I#KHIr=cPcg_-IG*O)H8X_`>B@J8L7r)lXB*@>2K^Us{WN!~nF|c~ zLUyAPA8~~Fg=|Ft;xOw_{Hea(I)Agl-^|tte_GNd4l{jti%5rdCcwgS405hPp37z` z@l*P?s}tkcETNap2HC=vD|q5CyH_4?p_ss7wndSNvrO+F#}@1S;|>1tEKcX2VDL|1 zzf$%#TCl@cuiwT7b^eJ4|3ucS^G`DPC$S2hf3m?pnWgIdQw;to><`K&UkjUJ@Hfh- z2LGuBIn5xa8{`awoN17!8RYW}@^piIK6_oHpVs>L~k^c(F6hzAZoe%0n8iu~VkT7G4GhauDW zBjtX`w3l4Umq4cVIm!dYmjhWE6JoOI(I#;u|}P|kd^7=MeMj3VyFx)*cGC$zuD|s;ZGwCaVYBj=dg^>5C#7W4E{#h&R)S- zPxVj9Ada_3bh4SX3iR0~MC4K4U*=(zlo^E^}k6BxfpKRq)uFkW?H zydjyMks0PVRwQIQ+=v4%LCDoyPGBd|{|QfRJi}~b4+;5UE+?|BLVlCWNvul9^bE@| zC$lsmYxzrI|B3!V`l!uhn5VEmk{}FmxILlB#CdkNLB7r)cNpaL2D!!{(>WVyNPmGM zQ~ZgFO#Xk8VAv!dH^|da{uJbLT)E~8Ce6`CeKYAUZNCuNSRUhYgRrk5`%cEL74|-| zKf~BV!vDL%rt&9Fw!a8@J`zRxD8FRak-bN22j+UlnjxE!=ncZAvlePPmI~P^>@~vX z>4CmYB=2Udhit@qBkb&(7#koN={-O;(s__<;2#tA56A|77&hU*Lg@m27ul|4cT*+fnvpmynHolnI;KG3BS6Y~+W|Ws+SZ-0OtgKsNL>lYIm9A%4O^4P@ZIOMR}49+#_V8Jji67nj?Fj6`zTD`e!8%bSFZ{Bn7-kdbdL<6j4*3;E}AyO2>1T)tMwC=V`g7c%nq zK{@^UKrXVTxJ2DsS-YmR*tN2*z7oI0U29yfV#yIC7Nt2O(Z!`jC7aroEib;f+PlfK zwWF`b)794D?df$m{C$pXM2FVFX$HOh?QQ*B)H9$gtI^H?Eo<*}wQTL(A;N?QE$P|X zhrd3?eMy~!0hHCf|hYpSG;VSr=uO) zSG~Y?bhLO{w`eSRM9|aI-QntUj2GQf&WpGMba5I_V(<8om1@jTuD)Uc|C339v0%6bh)nluv_Pn&0dt5qt{h*ZsK8!`M&1G zExq8`{6EMR7;JDIUe7jkke>EFP=I#0dNFT`RR^)Z2MrSS5^9toXJW_cIWt(V+zjsO zL=63|_BPhtyP9s-d)oWteWMq#_IepD7J+FEi~W5rzTK$H)4?z@^%3Qpfy}TB1CqDX z-$x_TnZCsrQ##wcy~v24GN7S?EN==|m+a53h`gsN-(2xh$)F{f--sO!6sw>J^1Bwd zg}7MrKAI6*Qqhe&+=nBen=rtcv~y7gA+ouT>;V-dYWv?X$V6x%p7W2TDf~SJB?p=Ix(!^r9JT?didDX40XHIcuTT z3_f7s4_1Z6Wjtn{XIJ+o?G<&h^{1u2!`rpF&o}AR7x4s8$@fk+Y*|OQ#sNOrfTH2b z7T4X{O7({Juf1YTuKAWJkJ(8L9cAJf6K&@+GdL;yzjqbE{e;}4#{9V*Qbd9nNfTpZ<3vX4(5n;I&r z9C?n)3Ijd);*H`N0%kC5{I%LW`x^-0|-t`ifBnCcArRpWjmIS3>5RTyxCz-)km8!k~(vc@Y zuqEyVfK*%-JZMf)8i{+@fFpiAFP&qgW}{Y z%d7!6hr;CdIRlQ!p`;E{DT92;fU^Qebu5hxa~~WKum2X|Q3jk1_tIb5MqIhTC5dp6 za5Vy#FafSX;HY@WMAElG;3$n`BH`QuH${U*#Q6j+c>uL;x=MvUvuHrW zz)gd@G_uM50{*JLR~3Djo)79f3LJ%z`rZUCS1N-o_0iIRs*lz=)8Izw!*WMZAB{T{ zCSIh^4%|k_(#ZS<+o{0a2pp9s@d=QTI4lVS(?IUKfa{|hVPyJ@xImP+4m7A}^qm53 zuZ$FSqANk1%Mlf0@sg@p^jIP;>}NuPTxV`Zj2({ys21&iURj6aM6@s85&D8 zxJQ5+xBNtVxfG3YSD5r2hQBN$@;(BbY)d4|`)?X>&jRNT!}Iyiz=qot zpMTazBXPwB+@-*k!=G^IdO_U( z;9kwgjliWLEa7M@m-?PH;PwGP=^`ABVAlym4@ED!A$6;NDhn zD$i#r!l>=wJ>X+_j-zj*f+HP~ z^mQn>ym4?hDmV-w5%uj;aP!B(J)q#|*%v8&k0`kOad3wfT){ZFqY7@pIJlDv?xJyU zZz{NjsYzG)xgXLo6+sp#)hj^Eg2161z>G-cWv)^H@|CoF^g`dQc z4V<3`!oSC>8T*_RU`w2~{MPGh?*!QTrBb#~vWr>5yxoAy4%=5KO; z#r+@d`JPRluXz5$Grwh1i+#>lID=tQt+U1CmOM_)0c-LgXFiiWPT&O$a$iyZm1gXT z`nRv|G5wGE&jpw7KEw*Z4d|{NZg9`%X&ZiOUVVFZnc$5Yc*^VkvitY$c^v_~s_b|<(N51eurJIgq0pyhsF5Jk*lW5GO7`qg~M{P>?ZpO@YAHN<#TBvOvD zn-@9lDI)C>Ez_P*YvXCRb1iBK>f)|PotZ3;`zi{AF@ zz1^GgtHgea0{bGnaB_9~dkgHJTp?vA4Hvw<({mvVZA5!Ya1uxErYG=|goOwSQnwiMQlOXaYM z@s9m%@s80uq%_oz-MG~H{HQsqHXy!p%~54XoYEY^jgHgHnYqo}ka>d}?&q=`uHosp zahG+sWe+%#&PhGc`+zhVxJked05|N(<@@Y7spvPy7DRg$4S5a&UKvl zNzKh!@GEt+cWn^_OUpUI5_ed%$nWXtYo{~ai@Lg9p0+j@wpDhw_PYAIU0bo>y{Wy+ zOB6xy-0bc0_Rto@PLJP@%~3AwvTNz?z=3T8P1Dk)r6q8Tj-d$~3_&Kf!f^>-8rdkA zGBz%5+1lRGwh>>0?eX-qdwYW($~oDM*t@iGaUZr)1(#K#T)NTTR*}XDiLI6_YyBH1 zw$k$Ye}vVFXEsJ@6{ED`6a{+Po!(B6#DRlJx^C@j*QhL{1E^zk0HTti9mImULV*?X zv9MiV%n_JpbYux_7+UoXJ?-1Dr(Ngf-A1%}VVnx-B2=ubxpQT&0hjk;2|S93(i)#Bd#jF-j{(vum}EFN}r* zb(j#lOA04nO%Vo`kfzW+mGG4r@;_@zsbW`DLPl*J=>S>?&W5$FhDJw| zV~xgMCBij;RjoEgX+?ZqqC{%fpa>h+HlSE|(MjhLjZ8`@H%SBr&Mv`CM?_o#00Onz zde>@4Q&YuCN0Z6{#;LogZbJNCa=Ihr(&(sjR5UpheKAU_O)eq|@A|MPt=LlCLYT=Q zn+>wXAY0iIgb%5(8vNt9Kh4u>CeGj=&;4mWT{H0p{{-$&^WBW0VJNY1N;Amm206nZPcz8V4e|_wJj)>1%t`;dsUN*~@LqvHF$EcBsPVQBxCg=foK*#iOq^B6Ak!KiRU^KZ#!?l3;;_==<5-%&QyVnH z|4+0rOBf4wU+MAj>}~jyerl6u_#e~Z6AbtS_JY7u8#QB>)?+%n&49PD#|56+tQonu zUx!aL;Ei&U!9Up`rx@fZ207IrPi6Os_-Vg}1^q!^9%<}$;ZN%>7VH|;`=_&QioXf| zej!u+Sim%)$7e8?@Tc}_f`2_^x|i}&;SVSH7qB@xc>%NND}+C-JzLmxga33EFZ^j;ojAAj;b*X)h%Q5G(-ttT=>2E0 zyM;fk?O4EOrT5QbSB1J9{Id=IM)?9ZPlwMj;Ei%F`;%N?;qm7g@J4wa`!4X*A1K?z z@$^}pY-Vjjrfx_aPxV4SwWoA*8cSEoE8RSUy`+>+x_K6(J=J8WJkrfsY`4Hu{iK_x zu^J&$eWaUF{z5-Q$c5}XlsIA1&Bd%&Cl|3VpuLb2Jp(e#iR?U~ z{=~7wm5KPs|FpO#i{#%MU&N!zr25=nl>K1nh*p*N6?L7b0s723XTGdNJ(a5wid)<(8ZaHDKyeB>uR z)f5hT8p(zp!jYcOlYO1GznS8F9I_dDpClW450eeON63cWXUT@%=g3B5IZAf>#OYlJ zTvCrnC-n1lLO)b;{T*aOKoYtBG_tGk4`u;vawEG)*w{BlhB$G!O^ps_!E((umuU55 zzF0hO%CvThX2*@WU-(}y`~{cKf-5!u1y>8(Ez&nvaLnMNd_28*LdGT+F3%Hkj*u@G zGSbccR|y&E=W?Bpkq<7f7Bcd~lWg_@N~6$I~p`z9S#vpE+L2?@7E2KxDX?bqv_3qL}ajjq!ymmhkN;3^~mt0{>rUocR!_VO&=> zuUo^5JlG!i>3XW@rOmucg02PYGd_*}g+qnM#h_f;>PIi6^XL?yxQNt}8Egxf&ZcpxmNDhar_2SG$G}GRjO)(uU&stBq0Nk{N!?(4IXLklKVFsG^|4 z3Lo&VHo`?{t|dj0`d0C>h(4teeTpObltuEmm<6BL8V?-n#1pp@bXU|*h!{=`&RRE6 zY1ovql51N>AD8i_k# zz|Fv9z_cJLr0;eO7vv3C2%HUWQjfHaxKe?WO^ibwPc95$0L%1|?PnN_5;7;`>^>sj&c~EiB z!JW>INz*5A)UL0^Mf&J^TIiGK?QeuErV!w(#YOg=27Qkx`nJGd>KicVdmJ*&dr3oS zCqw0>rtd{XAEs1-`f3gOPC{1OmDD%epl?jk=Tr2h8T3(k=2C)$k@~72tLe)^fm1nC z`C*DDm_F+N6h@X`9&q9M@2>$;^%Vg}^-KEtamn&K2^{H@bA;uB z6da8Uk#Ktz9KD4_!tGaZG+su+9Z+yn#=#9LI9ex(r0<}DQ~4CIETF58L%`YLM&&}| zw$vxf2~OM$12+SA5C2lwF)%ty1iC5(pFyh7(T<$pf0tybd!FcBy;-y6o`JBOR zL|mGJyKo$wUBTs#gDX;S1>@k#6&#ibBBrlF!Cf>C&aL3+JxkVyv0VHLj^1}7;RY1k z;&E{M6&x+CMAA2?;EKk<9a3<`3T`Iu@kk4rBfzQarx<>?p*E}Heve96P90qsi6a|0 zzjV*WdeP^k09)b;OO`L^Gyvk?M7#l*#4FXH6Y~bln8qUv@&+XE(mTgzpcZwX<3nw< zo8LtrTlFsPrbBt4yzOc`*C*?gM8wWv=?@6u*ko@Z{^`C?El(B6VW_+rRXN_V3+0Shp@y4;;&A)I!=@nIi7MUZ=cq%) z&S7c$_Vve&V&|}WgX3lF99G}f9&c}9ykc62>?2kK92KVfMfd`JaBLEuv2$3xgz{KzqM=Yq9dcnfHxbt5Y3Zf6UHV3jE}Xx^(}xdcXm2pG3VZsx^>s=Pg*|=! zx}efg4khyVMpPgfD0HCe0|two!_vB)d}rY2p>$=b^O5DwABa)Hf?>uxh88=A<=Eg_ z9Xfi%&nL+)K_{A;#hZw7zjj@16V98hUDLF-fsT;z!%WI6rh48>O5oeO*;eMeQ2C%?szrLWjXB)>PEhuhbtEZ1 zII<>!G^?timOc-*x}v$pRka$GOf*2-Iy|`P#0MGMTXxU~3GsOXjI4`VK+|(p=dkRP z{sIGk{D>J3+Nf}bIjXqOxf`123z^gJPY(&$S00+1B4?7L+21?ShE-PA-jbKsNYov@ zeR+9ECrFJ9j`%zwIevULk%TtD(8B8k$>I(InISsx`3)k!D7QwpJ1c2bwb_eKcoooNM&~ zR}FV*q(0+Z>m$HTk)8m{Te8);)~B!@b&XV};Iw^SeLMW#UQW^)oNFzPz|mSXCH?g|Iz4yVB`8N6V4 z&Z$H1u$yf|O9y8TPdQl**G~*i8y% zzG^W2ZB}m^N-XlPti@SYe0S;+q&-+5PW~-8#`JzXhwZ&~2YpX6$mnPZWa7%mh^HhqYmlP7wnn-Jg#8DpXtxTYZWa$gZbiqq7p+< z8{)2|kFnWnyZATeLViu!cXh!|XRqkp(bekf>F(;@+H03*E5hlMje!zE1qPFL+A`HT zMC~-~v>A7CxI1+E{mZ7|&W8Jn77SRxX=!Fms%Yx-^lj~>b%w6K_O7j57u);(fBj{M zwCekFllYQh{gC@&jo+0&1|#SthP8? zye+|Ivn5iTwiH|H*>P#^LtPr{GsNE-F3yCrjx&DJah`oXvD6qbpEgste4c%rcEm|0 z#-+JYl1pG=>4S4=inj{<0+^6Yv$$we+21&urpWDCHJ{d2jfizq5hr4WNMxxXCtTEv z-v;LBmxms>x>$v)5%-A|EP5Tzc)^Wou5GXTUv_z|$jSQ|L z7(kO)ZjG(up24#yHzml4{;;Ji=ZocprEY}~8e)8!o*tY5i?DEWeg6>iTlF1 zwG`vi?Ag+5-vMLmxN+RKH;D;ww_h zLcUZHTgQ#@X~y_8mn|(`vUmxVgKn`^>osyM{BL+2SDRkb{g?c9nxiSmcc;l_gKRO# zRz_#qLPrg(+@H?mXh!p=xkM@Jx{&A`99qQjfuS_WX<1f@HYqf0%;DI z_%8L~X$4a=wB|wlfYNC4c~a!(@Q5Gq>q`8Tz7$1f;LFp?W`k^DzX?T&_^j*`icEZ$ zNs3JTmU{m<_FH8!miR37{_*T7oqvMC-zeJ*{)q-T$si}QuM7RuW-U0qtB*g$;6KIS zKgHmmYVc1r_)j(XPc`_b8T``>{^vEoKbQp+DcN+`jqE&O=L^0%@alEI$&8N``^d(DZZ2ap0+%lk@@yfO3mJO3 ze}#~tpUag(Mm$`u5^_G2FD4#3oHOZZZ=pR0pmXc%>GQO}_Q^XUuWR$RY~AeQ`;5cW z*MZsUV!mmiWLxoagv5ew`=%X^HBCjX<(ss1T34TAVz#&tAsZv!mWWEru$2fax1@7i zT=7yFdym)C+ub#BfFgWN%|lyMd3t+#`d!%R(nq=8*6R!17cbTBKSq0i6e5{3S#YA? z)TAqQTHCMK?rBFktM1@F?Deiex#*osipjkZ=h!@bVnaZESH})LsCd~KAOm1Y2vE_{ z5zcc>wk2_fgxZ~NGp6Kqu9lQe~ho3a00STOUv3kC8*zU1Z3mG!!VFV z6M!hlBJfugf4E#!(RMGj&yL%_&ZZxJ9Cy#1*>T3rez9(}`1oW<84AvBKcKdt_>q%J zg`x?=Ds>&6Q(_Au?dOYP^C4|LoPo`UwDpiS9-4_afY_jBuxzV2mz2cCC)g5`l2fLn zPEAYC$o!DGq?Y34g5EFaeSu6VF7=gK-Y+oVc>Z_@?VrTi4Y){LQtu#`8gDh^hr{T5 z)_{8*atghq2qWWt0J5s@ZD8so2)4vwE1(Wnj`t~cbarZz!KT4bx4JsOa{ZZoHj1uQY zg9;b#P85L5JC((Yz{xg3vb^udy^4DYxQ$^rYiR4dY@-yu6!dp)q>=VNSK}gmw12q@ zm&!qMAAUPfJH<~7&W}bol1p)^xCay*`A5P%tl%hoB-|qkE@>Rx;|eZW!Og|Jn!dxp zQT`|&)5gIaRd6)xA=78ncT&O88G}f;Hx(Ryo<+pHr{HFcgG;f8@TKQ+NMLB+STgE1cIksCY zwp)y^H0!xTV!Op+yT!CG&0@FS>3I5cA;ZmUzVF2!m)>_Og0quP2{v`0=)nD#?tJoP+k1O=<&LjP-+F*@*rt_Vwi;w@NsMk8o}=)(<^@ zNw|lk?%@~?5FGu-qrK2QcBK&9=_M#1ge*Dfq0J-9IYO#WnpdW|N@?VMIG&EL(j=uYQU}e`s`K2h0#gn*n!3b1 zCD%>!z{YvdyeN4(h|gmb;iZxBlC92zHbvm+@CbemjpumcdC=mEmqyLgQM#0;DmV{H zJROVP7^}ba&;jSmZ=|%H=bY-?>C70LIyHN!dn|`p4n6()*xf_l{JU@VWV^Euo;I0m zb3Yp}9l0l98oVld-$+u*0Hln7`Df_?^EXIlxc|ek8fT6(*J&zTI}F}~_t{W$z?%GA z06ZStw!*eSwvn9jTp)#|t%yIJ7Ju}Z;eGT6*dE>w8?+I9rRQi&AM|X6* zbwO)m!208#T)%I`VmTJD9$~(=w=U>_+p3+1c8#Q@?DKiwx}Xj6RUPF&x#4+|JS4T3 z*N?q_aongo>Gw6?KFy}GcbK>QtrrG<{TO_2Xb8-AKl@ff?e_9#-b$EXKeESma?RR6 z!Tyx7_mkHJYy%B}iw^A_NwnQIVzbqcWVOe?!!`rCW<4-#1B*|QAM||T_L1bo@4c09 z(K_Jo97#(INI(ar|uj{F|7~GEwYWhpK?Vx{4Q$%=ErX( zR8x&0tqa#8+&Z}J8?mO4Tm8t)j>NI|t?S{|06%g&juIvR=a3f4pBC5RQ?`;_BdJ#M zsUMl$24CbRubh3BT#})Kazm+Fe5$4Vd4xs0D1$t@uceSJS zs2?BI$dz!XIw7~?sB^7elWkNtR3}%!kIJ3uhQexfbEQ@{4C%=s*W-Z{#E_GACpIrq zoz#@iOuZ8Fz=+BE)prKn4e#!GYj%HnJIb)`igJXSn-)kp^1Y3-%_#q>E6UmE`K`12 zcaB(E8{WO`y$1s9$fw$Ya*(bcpcWlh6TW^VW#PV&xH@uWqcb`Phx?9(clW-tsQ;dJ zAZy#pfB06yytF{#e#h0v+ZUO4k0d(Up?{ip5%kA-8s6RYc3wX)j+Sz&Z^zZvtJ&yu zcb<9INL)4RZz;cJgt;xB&q~VlTRz{6D=TGo>V2?Zz=e{Ydkb2N zzti>iSE#>lp|*rlMSn-l^8Ws-ar%4uxcwb^4E;TG!v2mndC~KaQEx{}oEz%xSzD;3 z8Tpg-)X%jZFMB(BU6|gU9|7?C-ND=k{9JjY? zHA8(JDQ2O*o<((lsvWU8Ji&gc^+^wU@AS4j^j<4^FZJ~Mcu(&r2inlnJ7^?9Pe)&FYk2oo zj5*ZPuPn#NFxPSQ_cmhGaMPF*SH=3T6g^$*(~SDG*2Amr)$CU4@#xd&+0@(7r?2CE z`Z~+~xk)ML*_Y$WO}T^qr%uq*>7|Tb{PJfF)xW*(I+hCtvViHL+H6+v?n(bjawF!Z zMQ@z0fBR7V7)$y|VDQ181Rln95Z5EP4&izn*OL#X9VGlu0*4=@_k~viFFnTQ*N+V( zR{klizwf~IwD>WTwfs@GFlFe_Lyta`IC@+9p+Q12JKJyCZ{Ba&54Q~8SJMt2eU!V; zYj>s{OmdnQ7VfW=nDP<6U#$@M%*De=_WKa7l>bA!<#w;ehT{dR3 z1@E5R%AXb+4-Dj(Mh8Oq$%FRmzxetQOS|(i}Zd z5B-CkubFu(xLVZzG+v8WA1KeddVhTW`+tu6hSmzwMD6zDO_;GZZ!7b5wKBWC!qK$I zQB}EU-jX(Z{=D9TOYG!dgo`%Hd)tzj-vb^w*tAba!&g;S8Swkz=f*|9M}Br_s?+M6 z?zHkAMYUl)ZHp^$E{BWPO|oS_+VC;!0lWL_!>wX}wSb+!YS(Kh+Wb?|gnirweT zW{Yon`KlU^bD{GwCwpgqBYWr2diKun2KLU_6>R8J0qbbPyLY|yQ#=u8_ooGt4>e*u zr6=I6Bgq!Hu41FvUF7}`0d{Hw+^@h}CXLJFUmdW10vbMn5$=C51}^?WfE`K;q@HR7 zZoR<4eGMDUY$f;E{TtwV1!A}hzaQ?z6}5&_j#J}lu^}B<%PAd{21*O1f#PJRvQAN2 zzKu6pO8126x%B3@`@ZqWXna=OX#9C6c^^B;``Ag|$4>G-rqvTZc^Di!EeGo5yA-d} z|Ehnp_7C;{@($}v^s$2Su|Ex%a@gD{?+kRLn6Gu#p@u30IYsGX193BkX3yI_QW4i) zepS}gQ zXhl4T#mj~oq5pe0CPz=m`jM)Xx{=>y;dxEJKCJa4b(X4;H#1K>wrj+avXNDf{0{f{ zRj1xtZXIj2+|Ycwxi;%j@Hqbb#4CZZ-yUAYa<1Q)F*cAgW2k;?cFMky$`sPNZ^VpW zC}zADn=5Y_v9`PtIQrc+fgF4NNJ&c_>=fi&-ox&AgdRhuZ|`b)KynH@%w2o@qv5b|0VMOLjA}n{6~fV%YoAU z^b6}Z)pv|o^M367EHH`x49u*rjgDUbwb7&n$ExY~&aRQf>X!ox_aCkP4G<{>^&@X& zJT&@7&qJf;+!i2m?XLu~zPoG0d`6m$>A#7mUn`mS|Ge!R*VUSGliV){Y%>N5Y(q&o zQ-_bhPRU6grn1Yx?7{^sHOJ((4o~@W$`ty|Z*sHKHd6(K$!|YCva^0< zW7fa-<4t)L)i3>`uEPC0$CxiE-#WyQ#(`&2hEv3S-!p~7sp8)E%-Z31{_t6E6wom}gWTh_mOE8fLY=$*}}y^DPZIZeQrL%+J>9kcs8 z%F)VOlUwWB%d-%=b)S}w)*rRnixct>zd$vj&BLJUa`RpeESgKh`_j&VfdT%`L>u7g zcM^RZG#3}lS@7w#h9gA#EA6N2#Wp%V4foM+pp#L>cFe_g%<+}m*p4}67np7>J1nVJ zj9;yJZKK0gS?35((juDE#0434(Ox#j7{8j_0-Ng5Tz$vozy4lb+`=Qj`b@85)?Zwf?-bnp)}Oa7 zc>Nc*rk9OXtcx#xblROe{&@7>!9QO8e$nG2Ijx-!zx$(Qrw%>W)ccCRtM|X2|HhuH z|J?ub`QKi%^;_rre(*2m*Gw+Cd@0!Fb-`;hH?S=do ze0Qz5;g_5K{gRiS`M2H2|K;7+Z+O)DmrI+xpDc7d(fyOXj~%`J?lGD_a^u2hP2QK^ zFA06`BEg(+#y2+Tdlv}<=7gQ*gj>uBx0(}nnG<%K6ZV)BZZq5Vnr*k6ZFiV$cbaYc z%(l;%ZFiY%cbmaUKoJQ;=aAjFBE|VpeAi>f1aXGX=j6X7Li^;TdD4P2yqSHw5_jA7 zB-|FiH|}=p9hN)IcbTd)-@d_;WJ=21UYTtEVdi!OaN~+p9^unA`8rrA69)UIm{Y9G z+*=u>p^jAsKe~g!=6Xz~XbT(cZIyYXKdGlSU z!Vl1HCSOOyQ6f!ReJ*7$Gb+#>B z+rH&yOQP2ABv`ROi*VA=-sZa%nI_@&ve_V8*goK?y=cZ_@V9b*YU7%*8vNr7a=bxK z;NdB6nn^JD+qggVYt7gU{)yb5#w5)ovfIRcKGqQ|EScRXe*uvt3U$`W*P93u`IX^1QGq)tv?-_yx9_BEZH$gGM?d(VR#j8O(A zg#W7~W51e|PmwH0 z9SDDtWLl>Y_+OBmi~SO?$o~ft<>)4h}*hU`}4dm-;v3;>E!d-w{-GU_C=kXhK++14!jun zM_iJ`5kxW-QHI&fN`y>(hPWiNgnWw2R+cDadUg|+aJtAak^BLwub}zz7lL5b5r2w1c9R|7GAYWmS9R~Rm2D#866UT`(6dyGm zX-KBLNkeBR=zEe$WsH|I*;W9Omg5pOy;G4pJsZgVb>!2W#@L&}rg9|tRbf**$u7q~ zGS!;JiDl?^rI0IxEi+dsWM{~x_L)@9*p*~o##j&8pJeP7vXP$8kzK>sSIAxwO8;}h z{pVyO+)1*L?%xV~Ot_<|aDU>|BHRYDp?{EU=%;>4`twmnq`#bOxZg!K+#eS5Z^?%K zF|wh@hH@aA+KUVS0!uAQ9x_DB#w!BL54kJD)M`}l)IAw>)hI~ZW&kFlFVGj%Y zMPa`r?32Ql_2NT3X1p+VkUc|idR{DK$r-vx$g_q2Vj-gw@$hJ5JUki`mr*%f21yQ= zi-n9v!sQYn;~WH+mk4<#67c~!MB5jONkj!r|sb{u&Q69lpJ?C^*4K@<^uxVy{S3U1Uh(x>^gwjg=(>%wiGJ`Ypq7IE9z z>Fq+CExn*w#c3oLKELMjc|C339&nhdWwEKp>jlr6?lZ*V_)@30v$fODTz)XD_HA-) zZ*S}K`Fl_<(gobBq5I$+ATGbBtqruSAvbSND!L_IdWea# zM2j~PTV+`!kBcLDlq`?vvoxa5l88PRB@IH-4Sn7e8%pR zAlQ*`FGY##K!T&uM?bD^j3V9}fqOU#oV|dt17UFVO?X*n)dyY? z*=by8!a=hE?{9WU)JLdH2uJPd-*Kt9e&8rP;V2%7`!@q_uY#ktA#o2Ha0e6|VI=Mj z1MVPjlpcyVUcq%4aEE}iBLjq^5l!m*lmR!4_fx{qMS3NU#xXU&uLIX0aO5s==ngtu z8QyPYxzLar30I@w2p;*zCh+}Z9QDK+PsuoL zqzb@{54AO#bxGi*^1p4rEEV55+cAsCVtZy|duI98Be_jc+m9DxnT)Ya##ko%+dG4s zF?qiTze!KoY(4G=x$4l`)pd7|Udj zXR}u~ScPMh4CfYOnT)YadU`f{`+5uc*NWxdWloo@Yf5ku#avtfn%bSsLwpX8-?z`AlAX z=V&^U;)=~?#%445%VlgfQ+b`!y>81r5`_w&Fvb87V*tRnq4_kB+Aid8GxfKCenzw~ zHk%pt-2P^7m$#=~8;$9G4%?Fo!*;!Ki#WyrpcdO16O@x76^PAd#%42PvzeId+2C3& zC)OI9>ziDwOI@p%>F3CFFAQRU3g;&EM4r^sJvgK=-gKVCaE=%$#J-t>v;DzBsIRZ9 zs;Q`5P5W-Am#^y3Vw7E>Jgg+irnfx0#az2oz{%CHK<{PDv_u;;Yb8{4PnNLPJml=q1 zF7r~%WxgyE2V17yIF~sy(p+Y5SFzvI)9W>U8$7~XW^u{#Qf+oKioKZyJYm7TnU}C- z%>TrB&QzzBB@erO2P@-_Ex>nY27Sako%ZO%?QG#&$Lvo3(+HPu8}hGAd&24*;J)s5 z!q{`b6V9vwQ?kY*pY}93tt;Yv2~M_n+7O!uw%eVD+RNOf(64Eg;SlC3Eld&T4F9B$ zEq>z|;fWVJP<6i3?3?3!aMYZF)H$~}yT@EMaNw#PCzT#P?g2Uk5bup4zf0;Yi#}0gAPWlW@pWR8C%)cskl0WG?d^&!r zdANql;WR$!w)=MYY}I!6p-Sseik;=eA7evt0n_aAY?lA-$(g5Ee?Bk^=9FjI-NjD3 zAw>t_*Dk_mA!S}IW%vRR()YxzhuB|^1-DkX*?p99N@syc=QN&9X7@)CXAzIns>E1?7%Q?1+~)lF7wo=@tQ9Qv*zVlGOmK3Y=T3#Poe#)NK@?#SDDSP^=tWZA6P$nku_EVb6kY>_3 zW5{Hu{80Lty$qVqL))?PwzEa2S*vMtP_w?KNw+oM`VwhP8yi4-&|+cG&JN^%^U!Hl zKmRz(x4)b=W||r|oa0OEFL3AhYLT~!w2a|g-$lNR{>l+c?gF&8#;ja-M*l@VRj$o` z^BB9|HjC{?tJzO!C7Vi|^_Pz*xj=oNKKABoXV!Jm<5~UFkhVF)*0GzdriJ!l^TPSV zmW7uLTNl!ItXf&oVgJg*r{ktBI`IO&5;c3r1Mlv8Zy{K^>%h65>9+W;nsfds3%I3^ zpw-Oo&vd7sI(*tZb^3{`aBuN_Ap91l?_{5+F(${yKA&El z<1WM45~!!Ty&%lEkfR$Ha?TtV?nb@dZ>oN@@)O4nRTdwo{)!r#^A(IRc8qz-h;TRB z$>6sgVm!E8-%8M9@6Pdk74_~D{ls=WEyrZ1l)mn!))?nZ9k%-pRsQ4!W`7;+l12>T zm=4@6`aSG+>i>7AJwA+DcyKfYHTfOXo{OcSZ1GK@@&_uZHa%QUIc>67+-Zjq105uT z`QOAn9eUiIqXnp7gt1kq*eXMtV#$m%g;zHR*Uh?HuJyK}f8r28Xt4yMSZ=JM9r0Kt z4Y}0Su5!4fb7{zZwQ?U@g{tCZFG$8i1&cC9iB&t+)mAxNO|ey|3D}B)vk0xsjTxEA zu?SC|4R#?-`v~(a?8`H6+GXBt`cx8ezE&jrgVmgtA7!oToZ`@_s4c2GeyK#Ng^`plBqqB~G@=UyH{B#82ubKZo#NUYW zx9+y=p&D>QK9}X+%;W#`S=9gJ%U|sa!-&5!GYk_l+}*f7>awsS4r%^~o65}oT?xD6 z_r%?1-D|o1-1P~&OayEY7t#1|mkAB?@}$h0E0Sw7Z-$#2*W}7$@^v!}aYzFKDppNn z=Lc$+laD(~Mhu(I165{Tzbk%s+#c&~mc8dH4eHnc;x9fn$iAs0PuxCe3Aqs;_dh5y zt!C?Gvq82PWUE1rGsy7PMw_0*68FEwoE5aVfWA@E@)1_ zzg>|{EQ4LGlQUVBPM*dJbnA-fD=giRw4$+^NV z6*i?KX$fPygiZM%IhAbi9#c7yOmCcIOS#A(gQA)9JWG8y3jYVlUZ#c1MtC1&Gb*ct zYz#$Q#y%7-OMYc!n#+<;Ia|meOXK(pgp31*T(%1tLpzsqgbcDaE+f-i-z*`|6*3Bk z`{QxV{WFCOenl>)2^o!z%h>b7@!&z^GLhe%Jzq0^JGgM<-qq*XY-B^0UcKJywt||~ z>+0SV3DW6rkK_d|;z(XC-Q67#{o4D$e+-giSJ&2#iBXZ%csj;c0RM17iJaEe<>~ac zxrjy9)zN+?Cp8t10T)(PdsmyHDnu(CWRZ?cAT4X4!`n4JiL{s)b)ga2swX}D6 zdUh~QvfJwE=;#I+G~fKYxySEX+~#fBx*3T_2Jgoz<(v1BbUOwpkBOVtSdM?wujWl@VbJJtMZG>yS z@FUAA?k_js=(%1g{K%5}h(lS8_c{3eQNc-l^!}&fz6F8a0i==oD6EQm6+)i`!In6R zN5yS`M{^k5BL*COM}*$Nq>=jWfrF|q9`ASbZYGVy{X0M^j=m4^tOUW9xNW#sardDh z>cZff47gLk(L0_rQXgKqbovf~B!S+Mq>;Gqi}XqNSAmmtKyLE>umSfvaChOoL>fvv z8N8zKc)5Uo+wksmpA-~7BQ6Q=Wc#APeGa&RC~(v9jus8>b5Y`^;~g$4eNp13 zT~c4N0e2~IlpfNDE)c|x;9gB%wSuEDR_c4!fU8q*2@39@0oSbHD1NDre%Gq;Zd7pO zE^$2uTpMt*{E`)1y#dz;9J(COZ;FDW=Y<;YJ|*5M3U00ecb^h3#V^xm#67IwXqbtF zdtAZcXH`VpvkDGBw<6+RRB+SA!M&>B@N+MszPAT@hhmKNiP3(UmlSRSUsJ_^V93e2kD+{wy#=LOFF z&fA@~FEV~c#mZ(3+uL_nru?$NY2rJy|OvTC+851;RcXuny1;??Jc!(Mo46KczuB=XuE0?WuXR$T#RIb^qcuaqQ#t#E{Z2~JOsAcvDaZH2(eJa`>>RhvUx{?d z6EQrdo#oXzJ`0b@@+*`EcEgYDB&>*WXA#aBG2awt1#&;_1Y0m|==~g)Q=V;ioBXES z0!3TV)27@Uoc&mZRGYc3qNk;%BJDJiGX=WRsnin&QP$?!pRY6@FQZc2IR|N;=CaWIvBC6)FQ<=LkB#~z~;vIWU6+kNRc zr;#vBImmz?%OM~0{1T^{djHc!C<$|JDE0ne>f!ge#b?IZjVopiEU+Cn6g%Yv?E-_D%IY_mJvUv$_E|L?w)koVX-1DB;Aw-hW4qD;P8 zXi4##eYXVB77guq?DW9R=N-2eoOcFV3pE9yZViUAB2-*~7^w_B?-A8jgcXy@z)EAwA4&CW%8F3{RIPF7Iul=)2g zDaZ1Crhct_ccOeVdHLp}eA}{e(bn=sAJE#Gy}AG;Os!gNYX!ktEP5iv8RwL}?n#_b zipwqVQEk(Sq%AnBREu*=)G|NJ_GAsyo~Sh9Ka|!Q|B-6X45K~miTj*p^s~K{7YdQixy$*Y)kBH z3*WpNV^~v&vUJ;dV`p3V-tG^?cr|fBj(g_8*V=ye8VWl-{o8xH&Qj4hTf~)y6Z>9- zO7InR!4NN6>}*TyY>Rh$ch8pI!maf6SM7iJUK`a}llD%3cTenW%Qyp9>}(6D(sV7X zrw`*-PhY=eLaP#I2c#ThSZiv=#|3IbU(=G$Z~one$Ud?FBU8&w{NaZvwFje$F{~-) zSz>2f_<0paV{Jv9%NaY{($$Ucr2D)>R<_)kO``advfacJaG; z{AY8=oy`CVgIC) zt?V|P9LKtJay(nBlM@W*cWf+I=Z~E;Iys5GW|p-B2ER%g*Cr@Md>E!d+^*VVvbL-^u8SSf*#)KU~3w82LrhXO5#AdO81j9D5 z*@o{bW$E@nny|a*YdU;3qy3fA(D|EwDZr-lL@B6GN&>ZbI*;>PlqbnYxNK(M6Eckq z8D*~apOKfMjmc^pK+5VSKoXXl^OGD>xTBHD*0LieqKlD0)?N9?y1H%hpYs zyglKLyJ#3cPVV%1K+fjU4)H`rcDJ{UJNt$Pb!%4!^bMb_6 zM>@i!X=sth8X{*A#}m4-GtJlOYHtJCRQsm(@a0NGKI)OANuMLqQWWOwhvqTP5hHwx zrmv%ypDmKv;)jdWLr1;s*L#_C@X(QxO@`ipr$jl?+&I2;vcH4+3{;&KeQ%i%%qj?ze+)qpz) z54Qxtmbg^h02<7%4ezJF4TF0PZYpjBIC{sGM(TSW4l1q-@81h02)4w1$$K26cj%r?km9E7zHjD?})pizGl2)aF|U9nm2P9Yk-8GEW8~d2tTiMivf4(T<8-xibvvH2HZyA zC?3*>p&^K?FyK0Xvk4sOlKSQtaD9qCbd?~E607E8m!glxY^m>exL0xefJ4*g>7)21 z?)wJZ!-_r%FLD29z&!$-%x{u{yTyPztl-r1QyUDpqY5rX(MQi8H6JIH^o@6Z>QzPG zc;}+tR&e;47|bu6b@5vBLixqd(TKQd3JyO*BjWND+<51rN)_CA=c1|=+<51rniU+i z2P-aW561kqDL6Wl6baX-;OO}f3AanZVMvOIyHCMksELSsSixZkiHLh#!C`0!;wVoR zT+%!X+=a?Of^No*@toD@e9Wm>WvI|Ii15(omp)aPD^Z`nQeTUw*Sl2t`gw8bvWu53 zUAA;74pV901=4@}ysTuocFZb@b5_+<5Xw2LX_ybh83hZQAOFB1=d(_>aPLrU{n}r$ zc@H~m$1?*d`=2^(pK2ZI%)&P-Qr;eZ*s*l@;n9@Dr|^Z5ydlkh%GCH_?JjBR+~Fsl zN;qW!;{JdMVUwo*`Pj@;@NHPJD0TSeMF}r``s$k(S%=FPO*u~IrILnm0>siib`j2+ z*iM^lPeSiIFTMHNHXh%@j&Hwk)1&dDPHV!vxY26sbE7X>ZI3=!nRI-bTMJi!aLk^@ zCEVp%=Ff8u;L9Iu>V?BI`==CS4J8%W3+4>(*jQeWGE_fiN~|AaiC-B_jDHZPGCH%` z-}=XC)%q#F7g)Y~IBT>n@s+^QBhY6xIp?EHOWd)K3Es$Wc3GTs%?iXd!1t;L9WT99?U;9b z6KT6@MV`~KaEQ&FjqkhsU3~pW+<9@MbI+qN6qdBfaQQ=!RwW#-AG&+F%G#ju2Bt2)6L|$8ryu>}gL^ zi1T;|X3ss8_O#tz$$OF=v^(8xAi=TIZpBONs5b3)2s+#*PkV>AEs6O(y}hu5LE60f zAi|#>W8C~N`d*71ZqCht77<(QG)wF>3*RLeJI$i(z1QuVjGbnQon~!4cq7pj!6#Du{>`N`$ITG4aYWNh5 z=%aK7M}94(xw^LAwc63tRI$?0q<-3lf01T&r2}WH@-VX zdn+AT`4CRCh$#fDh*wrsJDe+PYA;_^w|Y%|!>1aXn%Aydzu}52JuR(m-c6f*?bmMU z=Q-W!Z-)|~7M>^Zq}^XARJFu!2IMGF@#E~F%I|Gb*6 zb+@%#`Sj5FzkKM~^Jkgv`@`MY>EHZCV#>GPNbAo1W9E;(nGm<_`FD#uY^Cpi=DQtb ztm=*CzyC(Vs$&)3{=4EUlmGs5hi~gT%xtaiDJgU=?`-d{Z1q%J+1z(+e`#ay^480% z>stJdm1XVAd=0C5x3@amdb^gcUcbF|O~XZNws&qXt#CB>*In-2w$`z&@l!3=ty{gW zyRKvViWSU_Ij+f_gPHu^|4X%rH2!}UX5!A+YkjB5d<#Dq^n)Kh_xz83T$Nl!$AUBg zq1?DW>NM8y)M@{g@-!;ndbr(mb1->T$=VqvN?lcQb{{#1jSF&q3X z+@DgT84G(zV6T8p-&eRJ7?xxcBc5DoXg~RSoor!`N>6T|e*YmMm%}ze-@UNuegGHA zx57Sxs~i`}y|8h^t`IWW(wMNKS1twECYHeW5lAN!R>JlnEG3D`g!W7K37N`(zF$E3 z!XMvfP5Y&_B^OOYH2nW%2#n7ZFuSm6(m4qWcC>bugoQvXFEQeHEfVh3lgPi0Y%C~l z5dM6hFx>BhO!^K8+ebDQGWot%DCaU3EV+z@R4!vti_5eid)E72wGrFZ>+RU&qB(fO zMo!_)r|G@n{rG%5{CanEVn-}n+}hpM+ef7Gblcg9J)dl`fdQV?wYTKuH4^Q9Z(m*> zd^_4(7;Tp9^kai#3E$DSDbiNQ$#0v)#z2t~%AyOo(aFexlyU3o^!TL+Bp3hIwiTXH ztD*gF`WijMUDjr(7W3NJ#Jk}%t&2Y{Tj6LNp?)5Ziwx~UxRe}(kxRhqA*(n)guF1g zG6U{Dv!0Jy>iZ{w6Vb3XEGkPsa+CM}V8Ho++f9qr!pJ1hcuDt&j+;MV452Yh8hLBn zC*{OugNG#ub|l;gaEGG6eI8@g-Y~d3;U?2Y-gy}N1`!$U#XwSde$!xg<5Ks5JUdg{ zw?N}3rH#tPhN}seiaV;{C?1KU`c!c*0@naH(ubl9;^rD~c^IfEJ%mdb2Un`#C|xpM zqrPedN9mC`B!{O17B|hn{i_sU%la_xPe{h*iWAaP!I2a4_5ay>8~CWIJ8%5lnaRu~ znIuCJAV3I{5O9LLOx_c!D<_bAI=n z-}#-Fd+vGpomM4?f5YO6nClaoZ`rhE*y|IDD+^0XB+gH_1M8AI zC<&x{T6Op=R`!t%#VN4o*y}a*r;393pw~1g+k><)Pgrm`gB>B7``tWZ6naAmgTnAm z!;aNSM;mkg9M0vIBQ0!xxG%)!{&U3INxW_`Pnw;+ zty`$h$?D$$EwTRENUkgSXm!pf;m#1|@4Yp^%#q0q~aXTLS%_Ez*eLfQSUS6UZ4 z@QmeDIKrfGe%voO$W_4!rIV@j`BN$fMrox) zZO*?dsbqUlt|`4#&J)BvA)8pyS0B12$A&O!B6)Vt(S#wMn-0p$+MGXz9ii*9ok7Je zs)Z$nL!mBqK(dkiJbN-E-^t}tDu0*1)PJ+r_;pE-#VFZdhaQc>*Nx8_zP>?K{?0A` zZZFFf<{0*p0P6KLKGMi27JsxKH$4;lNvOjw4v}IKy{!d;t75|f0 zrQm=1s?0}Eoz4|xo5vaN%<6IWv0OqH<{tS?mjgI=pMu}*n%&DNT@R-o7;_!$vK+{Z z^8BJpa9FxiyK{Top|0%7(z+1}>(wrnJBEJPWynpA`aRcW%uSD?16|ghm-^f}34@9I zRzw{3MCAFO!-@N-+ylEXc3yU&`cO|Ecb|fL+toELoNWMK0|K~XNdM(GP z<}`pw7`|JW`gqn5>VetbV;tADT8`Zk*_<;U#7(Q`%Z!>B`8)pO2OKV$0S z=HV`(riSkD9O`?QdD`B+H&$owUEx89I|XXvChawLlibi(V&{$SoINX&4+uO@6T`Ni zE|$_m;ivQrL|FH+$ox*W$UXA=PPSlrKgo&D2uI33YfzHep3>t9PJJ99h>zTOEE4KG zb~^ie$09AA(+?@7Vz4v)z)^85h781zDaDYcuRc z7ryYc9=EU`B_W|(DOHu>)Pu=~l-#;A%yK8~orF3veQ)Z4W0A)0X$K`8JHPyng~w)L z>%$2>6p9kY+HmTDE|J1a{ciF;)@?Z}j4c7pKy4O53#>0-Le$&Fr!jwO9-ZbVM_Fny`4}LJKXLa9XNhS-M8_w+!La5at zk8f6w5OnnXt}iuOdZ)rS^&ktSb~~haEi4tO6Y@=a9X%$b(BKgs6?p1Q{csENS|F8i zxem%HlpJWMY2UTJ}2V-deO4Sge`g<{HwB~h;D(Ut@s0NRzE^tpE`&z z_ZNzkR<)E(;k&Yz2S$!#m8&KBlY~Dn4_qbjr;J*yv)`sT-62o5Wq2{O4tFv$kL8;1 zGov;^iN_bFu&t7dHuN%tel+mz2`Z&*Zn@ZpJhyEajF|Qp4$->Qh3HF=-vN}X&QMKc z9&>zR9bxEu)tpHbem{t_3HpzY3TamiZp}V8V~^Y7TRvh){DF5UjNzsQ?vseO7y3o5 zb(dL1HnekSO#fdCFBtj};>bon$YDJ+DkS|PjGAC&3u{iItc_Ze7}Cr7wPB1s9}3SM zisyGz_`6sO`~&Zgk3%zp0j(@PCGoyeQa_gG0Z3Xd9z?#~^Zs3I+8Ik)3gtv^60~(b z_rfr(Htr1^!Mjti$^KL#+;2c{^(ZlKpv1gEGNyd|^A@%jW#tWfp`7z})OEi(tFJzX zVrN6vAt8u6l-}SJ#pZo;j^JRQ2!BG#KYr1>r{D0L^(59YGn61kp=`~5(fg+pa&1P8 zQteS{saz|jNwrd`Lk{F;<3?)d`abU5ypz6l(2I1zLi_hWG%X`*_eo+i-d#hBsXnK` z&Gl*?T;zVEj46*>7t;v`sPA)DqmRi7(0}d6_s-4LIjrE5_vF(pa5lzimhg1275!@T zNqu{J*<4```g_;gzkxp9^(pvoy}nb-6q64meS=a{cZMZ?72jG`sdXaMfwzaPCs|}p z`^l8YnWHu`+mZJP`%5-jc5B$3jeeH%PseRNH)r4N{loD>k>w}$%m(+QlS!PL^{e?C zCH_Q-|M$mB#0Q{L8%}kQ-#HZHm74g!8n!-WdM^1fyu%(dJa+7~@mBOU`1`9KZ&4eTcdrDw0Dya zT6s@`q@NuYc;A)K-ww_g0d=U7KhWyp(fW}JxORLaonr-kbg&#Rk9(iqB-RPuyeA;@w) z!LFe6t%EO(H1r9CxjB2y-^f89!&2WVPR6MbW}Z*KmP+|7`Fq2GURrP_`f8JdQ}N#z z#CJw8p*s`zS;6V}pBPNW|FqzwZUZQTzb%;BO((%*McjQZUQlomzn5wbCg8oC(&_Mqq10EKva?jE@goHovB z?az76J+icGYLDFKxdFL67N5H-fxDZ+nf$JJ(D+2+zLZg0vI+ghlVZwfeiCy|d1r-K zCB?v;=67pxn$2nn?Kzr;zT*mxsP9;hZ)x*Tt$3s2cGQUD@!TUxUFipB@bX63ph?f! zPC=EPk2)23|88&+m#Y?%k7?sKorb97sr=40$RIhka(qU)nNDs7xwnOFDydr`gQDm4 zxL35?7*?b_JebDwlQ}29JNaN*G{v=HhH3tdzB8G=7tVh8C-d3#;(WMp{E-QmcK)0R zC*n8%E1z35odLY84JTc#VFk|99fTcjkti zp;q6Ne;z9v=67?Wc}O*#N`{?3W9o17<^|1oODMU_j?N95*-VrS#4!~yYjieSIMs$4y>+GGetSWrcE%hDhs;IUj~A zLWQ9!-!CE<|CU;2xip)5Yov3zkf)0$=j;*9B6_u^gp*m=U~fO#n0?s$=i`fJOhr#j zK0WK3yq`{Q@GB6%OOYnAIQ+D?@FdH%4ks9t?rR>lVBFGuF7;LSe4iV40!rb0#B&5s8SY$u=7BqwpLwsv@`>#)b5`G*9XMmN z`SBfdbIz%-^rqh}_1l(P#639=_U;iM5!0O0G1?;}L;gg(JCE8$eDiioWe#aNSNhVZ z9Wt?8`J^!uTQPWK=!e*+W;&kIt9)P2a@fz@Bc=3>KfWUfeucLYDOK*j5@va9;mw1> zLR0_a(B=Z?yuqYlGdq`Sj|jH?qb_6O8>kCtPErJmp4Ab0{-zCCDt zIkfzY7kl2`-5`9DJi0RC7^ux&dPWeIiaw0oZO!?oaMRG2f(=8I8n&?Rq;ZJh+l8fB z!g8D@X*{+fcVS z`10*UkK%dbflARTjY*l<Cq$zl7D%)>N1 z__7{Uc#Pphe5>>Yo;)s>xfI@NQfV`ZHQs^e?YoI_52L z*32BiX0%K6wSOp-Hb~>nwGq>|)?g>1^{g?Hc-FjUDelp}=8S}!LqVM5lz4JKzWs6? zH=$JJI)b6<>^y*C^M>Y=*07huB%e zsPU|MQb8~`w8F>En(eY=S&)p{SDX!eGwJyDnDR^({%1Th8UKZ6P@dNxJ8fQ{@C_?);`#(J`5XJM zvFF+k*rab0>dho~Jpq>~yw~L(F?Q_(&WPf(of(Jh2Zbp9W9K9Am&b4Ed3>}j$nJk= zKh+ou=d0+0@qm$2o!ycv8#(dP7*EEt_CqFBc)#qt?|bU-e%kpk!cU6E_p%iJ{hII{ zN0SbkB#ta8rURY7c%Nd}Dsg2zJ4KS1Mbo&ibB9Ley;7K8(}Zb9NOulCErru4hoegO zw(#w$5L&}yu_^zBkcy0J$rijF?(Uzw}fBo-(VRGOM04b$@WwbVxX8 z=i18-qdjN#L)4pcds(;AFG#^C<5j)KPNyWv@5I$FB=iYGCj1qODCsNYDvdCL+YE+SZ>#P=}R^3xH8wu_(_50A=!t% zVTtchNSOVyyB2dH`+Q#fKNK>5V)^4V>7M+hxa!zkjDvM9O-v9erWZtcpZ02T#^6h% zu)o=VC}bL}MZ1$MjpH7oxlkYQK-~y4WS=pn8N)YQ>8n0+{3oLh14fqZR)6ns)vV-` zc6>qO-JdHA*G!VzNWA+~12p=Tn*TyG^ce~&Iyd@5Y_{~(Z+p~h zJZ=e7f7mn#U!ycT*Z;rz9`!f2Q@)5Pxi*K*`{ca?A@cj#Y5EdrebpwOLfs@Ot>BwB z_*v${2WAdf<+)nw5$^2G6escTC2h}MxD2E4r&+6^`x&nVxhnT56Yzb~B3>O90||p3 zKDVF1%ERSBjKk7@*e~^M4Z~f=pRT4E`ag%6gWiEl&>8KJw$H<#sRO@~jim3{EZOH43dq22ZougGeW4Ap#GD?xC50z-z#-!M&B{*LmCFmexm{zLo4 z*d_Xl?EAe}OLA8Rr7y_ccy}f;%(@GY86OiueVG3-g%{-IwX%KH*=(=evlm49ZDwYk z!IeX34F^~*)mR$$GA8;5O?ipK4_NO;zxyXihcI5hGGcYj{v_#-?>@isjF4ms+t6D5 z2$nhUu1zxzPr5bj!;Yk+VN8BvHiGSgHHc@IpZU%0#^LF=&l^cg`rF|oW7>x`No;RM zBuTOtfurehM(kT?aRl4X!?q!zhvuoQm=Q2_uNQF|v-FmwuT3mcg@p>%&1O^t`5RdN z=0yK=Z0Wwd@Sk2n)IYqtw^OwB+$VlZ^n_|cQ$%-mmv}Q6V1tNt*{)N%DpzvMhcp(ILy8%{JU{M9@PT0Us zT30lO%{e^GY_9?5gpQC4YOd3Nc-U;K&7LvSgB3~N^S%$8AXf|~g?3Qg#Y!ambhsyH zq3$jkGDg43Y(0p<)fHk6iY4#l#l}(97b^xMUy;#zgvzMhIWV%M3+tqoJayI>X!JKi zVw5@?`PqgO%#%Y2c(*kL9)NulmjCoLv@yS=RaJ-28ec!`Kg?4+$DbK`3eU=1bNm<0 zwRFD!FzEu?OBl9YDAv!!+2o%RG9w-9Vo9h9@q&EgORp-lzgkMh7xVbIz6kj~Q-Gx_Z{akmvo_Py-Z8x% z@mnRmTA|k)o;%UUb-Jp_-=wMUCNt#;>b*&wD@Uk4FLCGmCTtG{{q|rGv)hzo=`;Uy zoZj4Mr+rx4mb0sOD(o($IpsHI0)0Q-&E`uZw^nK7*1F-8Fdx0MxpM~%^S?A0!kSH* z(WG7_jU!CPyA<=|w64xkX!4v%$H?tRqr%zD!gNz2VNc)Lk3KY<&79&!-`9yZ0LE<> zX7xWagJC9X9@@ww{SDsP;@C%Wuz zAif;<64?)uW1FxaG+{qT+Ce{IKS*T;Mq^W8!hX<%{h$f^L2b7*b+kuqOVn>~-nd9< zGH{mlr&k!|)KqRec0|(#jo%Q^XMAkYs^!a<`l>wD*VcJzmuUjwOT6d8YHP2nfmtPubJ2wTpgPaBo~6qd zYZX&-!!pH?5;vVxyXrhu@kewmk00$%-7?RrsyZJXdAv5}wl(vwa3_LhpU>?3+g3d<^76=mgK zPhp{}u(+_Yq(lsqSC$q9ib@MHuU}qX;qrN1es6^CCe!s8GSL!SCc>Dox zaS47Eo+7ct7s$x;Btf=&r`$}D<5Y1Iw;xFhm3m6Vl1dMj4FrnH#S*`#!s{=s^p%wR%lsaX*HhxF05jaYrM@Cq znJ+FXDiQ;t&nNndE4&p5v8>EjR2d){T&}V*Phn+6VMUp*u) z;R`7}6=EsHQRXW0c*_GmaF=_E{bkL?k`RDASP)TBS|0FJmU>*prG?O_7wW?X z^RkKxKQhSUDJ?52_Cg(nes3jG;V<%)_)5i+qCzo%q?S~;T!r59qCiDSg{QazODhU} zWu;Vjs#yp-U`ud0dsE$5r9+R+Lj2D29xl zfZvZ2R#77QT;*5^SQ+q@1&Y0*ztmUk_j<}vQ_70Viamv>29-!^z~d|O`zuNUK3^#m zTaI$*EAhK311@MS;PM8_%PYkqzgSktf+z&B%{o~PR-@HqO|Y7+7OT~oXic&vfBs|N z$%sV!I4uUtd2xQWW8bq7k8&ZOm_Osv9(Apb|0cxmxy143D~Sgs3lpmN7t7|d-tv;I zp&)*-^Z&1x7u3KjR}eR1hRUqhL&9f};o{Aosb$E64E*TzdxYhZ!LZLD!{;{_cAg2g z&!mgbC&!~wer(@q-DSDQygOl!>0aY~hD#)ex{gpCRh7{T=EoP&E;$f?5Wh=V7uF-b z&wup$#n%M~;#ICIa3h(m+a;`!+67N?71f9!+%HZS7cYlR5dzeWUl6}b8K?g<#d-1d zP2KhkAkP0AdG18K%GH4zp64x6p8Jx$oJuwygYdt&e7Ja>sO5PJ@#%Ep%h-BNQpWAx zWW&mg+b@MY>O5L=zC53yY+k%h)a~Is$l%Gi>mk9DaeHmXU6&+&wGODyqRW#@BE$b} z9XOC~<+{d1d2r`W<1WKJf^oJ%?kRkhcIx8Gg1UbE3IfIGD|j>73=J9EFO59ve3=e; zl(KovB`TXPB~w6ugi!)-#OF;WJ6!Zw$GxM zi+_i?)pFsUx2qfYyA+KWUZ$R8g)Zm#bGEk^FQ+>HRBg*wFIC&3&cDZ@Cr#UOudqzg zi)_yKHmRP$vTqQ4U-WxO{hdUcN4yzZcP8yhyvMrRvd4UH!hNRujpz-3ma=s5b-n`e zC|51o9&bkb`DNUbv8o1T+?#w0{`-=R?+aAa{|mOw7hi_e`q_gtN52<#3)Q^*c#`EF z%^UyVP4;oOOZJ^B8&Q;VaH~|7&ik(NWOSe@*zQfPyr2RJV;^iT7?p$uZm}z1&(p+q>=J z^`w@oHX%-XaJmj>=y0YE zPuAfnIy_Z}vvhcx4o}zN89JP;!!ubw@{@|Ie9hGP=jiY(9d_t&t`6tv@N6B<*Wo!j zJXeP=(_yD1KXpUo%c=7((BXMHd^tP9%QJP6jcg(NJB~M^X)&@zY_F=k(>W4f)nEf_ z(qJR2(O?t1LW2`vl1!16!iOCi4YsheR<*yC{cjCUWdEeWN$jWwC$sNru#G*S!71!^ z4Nhf^8l1*fXt14qS%W9R=$2Z(bT&nUGZ^fvL@y&OssG**g-GvY_CGXu3VTh1r?O`? zIE(Go;Aw1|22W?JHFyTQQiHSEYz>~tQZzV+{fA;`A7UC|5cgj-*umb^;9Pc8gY($m zYVd6Kpa$o&Z5lj>HEQr&R;|I8v4tA!WDX53VCfn>j~O)ha<&Ftn6Yd09Cc~vqVg@E ze3z^IVW*L0Yw!vtXmBliAD?K-C9op)rUtKMeHy%qeM5tse5PZ(sopUd`rd z@Qv6^uEb9A-^4yfy;LrN6|;9WxP-l?!KLi)G`NgCsKMo|U4tvwjT&6ZuGZiy*c=VM zk|k^KRcticmXf?*V*f*fzs!ED!7lcc24BtY(_lBYdMl}=@I35#4fe9DG}y=TG}zCq z8XRDMh_;m!p2&Ws!HcC~CnZLKRk0^E{)KF}23NC<8hi~~sliKFr3No$vov@aOVHqJ z*{~8hsKA!PC;(BM8GwHVR=_ejreRA1o5xHXQ}@QeE@xjydrJHR_|Z8!cXCX_L3EDJ zEgat@VI!;M*ezibyNY9)K1eqtu(_J&&CJg6k0gH!`%koY6kkxnR`x!}a(sy_%rOmh zq{BSJ%L+z4OE)C5Cpo5Wb-KaE9^#m$3eycK><*6U6CmA?%GPo0ko?owN{;39*qNK- zbjg1bo5wMAmD6!RPZq~=d>Jf(V>!M|_U~vPDLs3n=O?q19RHhyr?8)LJYB+5+4ni7 z;oEdW7W+EK^!c4`n8t47n1(ac4b$089B-HWXRt4E{HTPp*&L3kPm*q!2?I>BJnJR@ z9QJ3P-!zPsZkWY>!|~&izk|KSajS%L*~=XJC7j2e=9s2q(halO!yL=`mCtVDn5IY4 z4RhE!j`Jiumo4FVhlDR@Wl5TLae}%hp(YZ`-D*%-6Pjr~{q+I0xqyj(*e^ZC= z)nRq7o%kDd{;PD@t-}j-IA4cn>hR+zFUm#n;TV?aMHp&`Uep$me-aLZaTEO(V~=o} zNAw}?-z~qNl74`*Zpa<k1>`-82r-n z2$%9P>AUi|QzXX@!l3Yy=mDY#4?#(MuXFr1r%og&>5zOb7ttDysXd~2ZYSEyr1Qp- zo@MOUgkQp%CIcwK{W4JmzJuuBBK_QbKX)G@ig3)RpX5KCDB^JvMYvv~lpdmx`zzeP zlPD7L5K-vsJDfgG6ngs?qTv6CDC9DmWb7b{@D>tgf>SrABBzqx!7u3<^bOJr z(&MFcB7L=-HgZbmu2H;i5C#7UqE9k*hA8p@jkJ`$Ormgi6Qy(!Md7CR9pPs<{uNQg zBk2k5CQ1+Zt{@8cDxS`@-2K;_=8*iv$7v&{k8t`Hryml12xtDFJtloPICXOB;?%ET zO8-;5y#9ojJILiCchK(5`Bv(^kAm+!`;uRq&K(+2_yeDaraJ+X*{0zze5z| z;V@Bze}pLHr1q5P0H;|L&ua{CL{QX+Dx#1thsVE(=svk!Cwaa@_(_CI6yg4e)1Pzt zFGP`Fzvc8pP8r1q_iUn&ZxvCL!?i?_j#f@_!h=)}dx%0A&kzN_BtPiCaBQRe#q-mN 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

IGnnp{-pJVKPpD?+5| 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

&4%ZfiF}efP(H~W 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�w3Cs-gqcRdw|PC=PXF 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 O@=-Tq!xA8uy#Egc=c#G{ delta 540630 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 z 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 JKpP1${|7bHv8ez6 diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/TOOLCHAIN_GCC_ARM/libexactLE.a b/targets/TARGET_Maxim/TARGET_MAX32620/TOOLCHAIN_GCC_ARM/libexactLE.a index 9a2c2f8fbaa52272d499b72c54d21f2ce5a77c9e..ecc6df531e513aa5aea9e033c7ebc8ccc480f2ed 100644 GIT binary patch delta 189812 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 diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/TOOLCHAIN_IAR/exactLE.a b/targets/TARGET_Maxim/TARGET_MAX32620/TOOLCHAIN_IAR/exactLE.a index 987a5aa54102088a1f1254be8107493d2d265645..e4728cce3a04f4b024188f789a1a8e5f3880fdd0 100644 GIT binary patch literal 3278636 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

vM?-?>FW~sM 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%0DJNldxAb4c>5ytNaNzFo)I-8x)0 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 z z>8OVOOMjg5tJY0+e`huG<-25&)=jizSA&^-BBOvtyl0ID&7+}@^~Z^>S~uj~q)=e*H=%K8e`ZV-o{<={8RqLiN zU~-ZA_v+}W>=f|3HFTWd><>oF0%LS|B%7|m=`V?kH8@#E*+8oX2^pVm}g2*PWE@au!{TY~WYK{#1LeHraRV}h)eehvIS=zEpG{|3At zKUz~0eH?iI0{SHap9}mj==8S?(aHKL4S0pX$+C*7Ph*nkt-y~V?iKi#fKwl|3Y`9a zA&V&~?-z*If=;t0<^MhKotpCK)6I85qvt8nt-$X>JVxN>Z%w66{9$XV|1;K9suh>s zdMsO7kC82!*7^#@SpO*NEAN(&)>mgWuOic|=Gq%-{1!))zD{ zvDAF9v}(j!#Z&LBt%g6Z+O@ScO@8rQ87V)ciIpG@Frre^Yu)plp$xMGHQ2~XO&(xo zr6vzBv{I7?8ic9oja4nMBOAQ%#@gyo)%3!Oti=r%V`s_QE zh0VLd=3S~$Kv_{qQGR)mHAVJ{@}jch{1T_5U||LlozA89qC#iE((>YRC*P-9uvEia zQdG2@^NB81zPwnA<}b@HDP3H=Oq;g+>ZPSCE3_$P6>3>R#&YbA6`=4C zU9~>V-J<#s3!8VPRX0}YO}WD6T~0e4<<+>csjB8YJavk#<+|PEXR`zIZwe2ach&pt zhR$;Q$&j5_>b>KJ&Aa@KOGa7iY8q;qY6m%?X2?w(Ht!0XcZJQnYQ!OeVe>BeEF0WT zOZQj|n|IaA7L&{MbK9|{aSJJ3J4$OdVLPRC6yfqDYZ&Zapjy~^SPht%*$niz~Z)z9Byox9sx+UnU`&k4wG&(>a7A##8ZF0I;#e>yR^{6T zz6kJ=0$T1f;~WOhRL5=h867JoKW=A7PoF5CVsy=RBswN? zvlW|zjFKW86CAOQT%KZb*kIZ+qhtG&Z`k9GDN~YNNrGZ|KG&nzV!Lb}r8UYN{pR*5 zN-`Nkt%p%gUV_cV5*2TCe3B!>p&HIaGRqr=B#ANGnvMmN@+O`J2ipQO&qWsyRtwB=r!Nn)0W=e2`~$5Ka*teS{+IfmB4IKkZ=VgkQo%^R+6H+=ecLJ&vtlg6S>567@D2j zi7#Vh4#voi>+Bb94rWplz~23y6_v+I&4vpb(lkJ^TQsJ5hMh3zI7CM9O0nzZEV0VB0QflZk7JID zg!~5x&QL#_lNH~?goFMlLEN9m2wu$CHwi-C;{-u}k|6TaCu=hC`yN5ul&1(H-!lYp z^PVL*kFn0po=F(}fu87;ra=NEptt z`S?ef6wpnA?88P1CD1ypJB8p8&l_n zD%;-!$BMEsLk?%z+8dCLIuE=7=qLOJU@9I?MW&!|8EEH^9X-LkJ7SON7UN!NEjU4_ zg4upJRnd+N+GM1+oJ5Q9_Lw-lN}##@fjWiGgcOa%b--h5I2!`(?GF`*1)CX76>8w= zc%jt5gK2;o(}Ws$7!Ri!=ym=e?ugcuHBo3`9bPT8_aszfOc!ckh` zzADncCDMN)(mO?Zw@9}d!4JK22tsZ(LF8`|_zpml`!L}-SmP4JX!)^#FB8Pt_9#KB zzexY1NdJEVnoMfGaRk9XgCO`rSppiM8*Kol|J*nLy#Ewiz_C;=I{P?+=x4!!W{pq* z_e|AY5Q(oh1S9=n$?Ga;WE<#3WvSlOHWcFUBRzOqPy)i2BJf8bZxj`mSDH$wY#Dxm z#rIHb1C#OCxl(4*K>7oeQdXIT{tzX3GT*nXKr}(> zPLs<}_-MM6c}NV&dx0WBf&PHh@>M1Z*CauFw*yC$`NOZkN9|Ag(!HX9zheg22L2v= ztzaTP`s0HF@dcNA)r_H)`xEfVa$~u)(DIHBQQqY<1M)~Ng;4q}17Dp=)?I_!O zlpji71^9*{?}$bo7M?tWlGh2oq13n77SInvbWnNMfN!gyYeDe+ctax(OFGv-9 zhH`(e!LwSnpY<&AYQfhc=vol0-#Z$4NoSGwKKM3k1&MgDJhFk4`e8`%5URc{;2VlO zvVoKG(8UIo_X+qm3Az>p>$hP}KpvW$hfw-$2j5Wi^J(Nkg+b+6<_@jD>;#{zFQS9W z`!a|_(JwkBAP;M-LFG*b-%Wz91;OoiuSQ*d+Q- zX3GhEGTVaeEcJ*s>$y*6d)0~(@X|Y*QN)H9w@^K7yGU(fV*O|4Q^X(o&n!iJ7j6*E zuL|z^3c!bf(|sa*CEx+zR)Jpw_%iSqfnNtm_Ev2IuLFDo^gMynyi9I2Bu;(!4d818 z{Q*E3=w!G@Bm!u}>ZDzRQ?Gm)_@Di0X5G4oY$sm>EpR%RncHzmcCwxPZy=}ro!QKK zBoUBoCqD)>8)TxH;q#L}7_nlG15WLwhTxOiA~{`B$rf*hF29B4=x}wkoDpf#w(f5l zoKEGEfz~7yK{(ky{srk4K(Z~PQ^AOZ+KBL5fJ8!HTC)*;ezs;}pblnew#b>z7CAHU z%fv5>sqD_`nkr|#+bdCQ+|Z&eIQ5xWB$?yjQIERPA6zy3hk)T&s{zJVLq6xKzNWsa z-pjZ-Pv8uuKr1v>2aKphDk>TxwYjElt&S<03X?hbj>S<0JvXO_Usy40O-MYECLANb9WW&mx$huQ7bOZ4pAtOy5z!o;@2^;lb zh&SPw*UgPh>zmWo;b7N>mKt|TRb4G2!g?=spVMU9*ihTDWoTUIB{FS@f@$@B?&67S z$i;K!je`rOq0>^QH~I7rX+aF1+0-09vuOy2FX_5&*r+FL)RSNKFJjaq-eC>9MUN=w zf}GYQ$~vblkKp@<8uB=uCUI;tqn718}&Rv!<`nq!tj7r9QKn8!-{Sghhm z?)?5qlX-HvW*X1H^O`A zXk%~8SYzKJ<2UUOTz92+VaM}~um`SNIQ@3-EAb1bL*k{D$#E_QD;wBb?4;VV8SnVw zyCKiQX3lab-SzR?;x`v%97RoHPEQ;UT@UqJM@4i|YD~Wp^U<;Co!{$?G#gUQ$4;*q znQG`bJ#kZObm|{EPp^qi?e2V`pN)#`T9|6+s*X3#jXK(v8u|8kpT)H;)!3Pr`s=sZ z++X5or8$hsk3c(93vXoaPyK1{n-P}w$L-2dYDwb^Dxb|%9L^t5T~X)mANP+O72omW z{^(IZhDPz72|hE@@n;G!oANta?r%$J5VwsYm_`I+owDMEMktMEzxj* z(%w2mdaX(_Jg!=b>^~IWF8No1Kg*#!A$e_w^1!FsMdh{!_!MgrjwuS@jN?|Toqt)f z^0%zD4ePA5c)G-jci(KSySA>TI+}Ui&CP&*R=kOBtk$p!dNk$9w-*!^ITkM|zT(P~ zrOQf}uP7_8Sb5detFF1$U0GFKvv!@Q_WJd8^$m^Q4Nc808#irk-Eu>EMrKy_yqx*D z3+AM48+y1Ltc%oqmt1<;LST9LVH=Ur6k(3EL`9E?85uh&ZuFS3<1QLMVd5lJ^5iM; zQxm3H6O*RTn0fImTk`BVb5l~&NCi%xv83UuTPm+T+%e&|kNkAPWaXaszmzcg2mcWj z^TR*IH75Oe?5jVBjM((bsf;>H_L(pKq%M~g{HfyJ?=QcyEC0E#WL!Jq-Ybec8?Qp^ zT-}tJ=2%c)+iI_J=U-dVa(!!dS@VLbD+)_0y+w<2Yv+5GU)j95%2D0ikhApa&Be=> z&sny)esgwy(Q@xqSJZ4;S+uEaMdgO8mR{9ZQnz{GLTXzIu+)hs%bLM1ru~Wm2d4#o ztB`59w%TjA=h4>_``9fZw&&ryS2c)+5x7tQq|YtPD(q}x#i!G0V#^G^A9GgFM-d-z z{O86q;|SuL4*!&D6?Qhj`PK>K=UWuOgeX6HiGRWepN()N;;S=b&^nzUm@ic0(5I%* zje{EU#z7+tr!sOc2-TauQ--`zqlGSL?SHy1*yzUF1vhs%b(u~LA_9Hy)9l91AA4=f z*c)+OEY9XYr{gN2f8{R#uQ&h#U+mB00Eh|T#$tde)U^!;lVUMM8)6l@Cu^s0+bFgc zH){#-c}P4UppRfAHYlJY5#Jty;G^RoC_NV6E9c=GG5I--M#qjP9G^L#zK4_r<_hFBm ze9)o^v?77(AtyJQdxE!JE&{_hsF0w5JEP8RBE1`Ryo$a-2Zb5H zwb^sfEh>X}2o2tLxgUJ#ym3`#8Ko@>T6r%+5lJIX8DA{;WSw6pg*8FSpdm-`bMZ9@ zJ}H9ak%clODWp08-z15I-&7ZQ$F7G~(lZ z36S`L%bkpyI+Swn1)nUJ_q{>neH(l?f)*Tt>oFZeOv)ojA(Vbu;2Vm(?`!1A?iEU2 z2l#fX#p$lW`q?q`rG6NuJdnJD_@S$N)f7w<;9DUP4LpLl_I^AHKFUk?gO7bclJ_cp z+I~=O70-C2Yr|VWwDKyg*k*+^k~a}Q3M8+xc3s29`VhOKazpQm%36?>z5u(YtV7rp zwQ>(H#=k3SD`|dVcSSWdR=Zo=e78j^_v^K>*}bkt=lPbUHr3Q=UE!(;c*N*(z@cI) z-2OGyR?^E+mB;UFJ{9kT*VQ(xZ4Bh~r|>q=UbMGwu-#E_;GR=AlDnfi6V;PYf9gsKCW{?_6-fd8=&rv7T$Xnm@XMw%)(uGV?gWg7zEZ!tf#(9J?nv~n0_JIO zG7nh-9RE4}Yk+k?TmpXt@G|Hp=}+=>^$|$Bn~nfqho#3)011B`Fb!LotpcZ^vKi0I z-y2l=yTJbwb6}yM_W_QLkh==a>@;v0X!lrz=7t*a;2o#IY4A<}&L77-lbO*YQU)Uy z=&8Wv&Sm1)@75a4ia@_iW&mBgJIja%>l)B^Xz0~C`4_Qf;N2SfRvmo;H zK8Zi3FZZXJ+2j5=O>I-SSq-tA8_vjzS*(PyzGz{eW{@>l5S$;<`3 zOhd2L(dTe$1+8cO?K*l2+Xp-b{YUD5pN^i!cRG&I(8=?>3`Q&ljsSl`Lw`j_&th)@ zr};t+W_BF-dm8**9sfMuKehA^K;MC-qRjuPj(+0 zBhU9T7~uopQsA-vXOWo|>gWquIq(}b^ffyABDNlQj9inT|F`Jq`D`cfF&g?EI(h+n z0QhAZ`eQnJ5&Hq~-)rbE=;({tYrvD_+6m>;PEr|+teE`)_*XS_GSia52wR{}fWM`o zllhhmMz)lV1s?C8Aj~XYM=xb_fG26_**f|PRsg(2Lod6%l9epKh242D6 z6OdMBcB77dHM<@7k~pccncbtKU&9^+Ua6r!siUuE&jY_)u8AQ3r#kv|>=^Ju4gGgI zx|8(+Z_v;`)Y09{h_P`}Ll2BK8sAlH3g~P3`wq2!GyG$T=rt@GxJ{b2K);1L`Z~50 zc&dhem5yG^)&gIqp*QO2>)AHo75)hxC#&e_^*9V2JCil^Z|LZatQ~lr|IZ9Fdrn8+ zz+MIZH4Xikj^51v0Njh^q#DfZ|LN!(*{8r?$22SHG@oek2>)C{?G?%A8_7+7V~*F+ zEzG9Fqk{O=f%acQfZTmNQs^Y{WYL}yA1TJC#HWh>Eb&F+{!4tNXivfyY4o9`{<0wa z3qg2&5Pp*er*3|y1}Ax63BvCW!oLxO9{|1(^?3w&X?OGsz^9`=vjyG>{9eo#c7eYO zd;;bWS_2UO-++(8d`asz!bf0k9t(Lg|1{t?fxb`Bvw)vKe3ifpffu2@B>yVlRj3%5 zo07ab;H7APGsYR=ZNTf%zcNMs{lKZaB? z;PhI8{wyT^zX1O_1d`b+;YK`5{tNkY1br;OSuPiVvY1%3x`C(8bw(El;u*CBqrpuY(G7r-|O{CB|V#Kvo(6Ujdb z{40o;2)Y?e~ty626979QzJhi1o8UD zhL-w`b&S#}-c*A#FDSmT&grT1@_6&cN`G8EIfE$t^p>Cv|CwwC4h`eSrDW;;HiYVG za<)EszDNdHbB0O=j#}YD^x`u!L^5(|xHC}{=f=q^+GJUz{@j*KStOcS$1cl+)q*xX zOBRZop-Y#g;{NE;WwE$rx^#cJ`nqQM%hgvl+h4A}w%Pu2_0`Sxm#eRDwk$XJoElj! zwW_As=4CLls^ASuEvqHTqBHeXnn~Sd-&|R4w!Xf(vRvvjn)>F-a*}0M?uP2ddVMPKn8^`mERa060WFke%RyE^z#FKS1g z9(1e~r8m3R){tjr^nm7OtVVR&28hj@Vg09V+kkzWK6PNjHG68;wm7kxQ1`a-yQ-!I z4h-X(c(Ctiy`C-j%raVa1ou=*3vL-o3vQVKRZy2Lm9-7-CVih%38JwW&grq{FDoy$ z7Nix-nPV+zgy6cGChJx6Q?t`kGgEWtWoM>cot0@_+t_5qi)@yX($I+0)!bfmUiZ3& z#^#pVDs1VkA-~s1a5iuB!n1aB^TOrs^m*xXam~%9>w+vE&$OnLl8@{v??x2XgjpzM zX|@9iEuM|_l_Uh`3JGW0)}(?<(v~+huES<)s{?8^TWzhmImv0HborKM952+IRzxjd zT~lqn8oRM8v604Oou8VO=5DHA1NYu*s@4>iKwts)&h2z;tgB1)B%zp1b?(54N=0R5 zrDe|L`4tsKW$Lj>;shoqKQT#I7L*iUS;P-!3S?AIO_C=o2|j*c)6#6`()j_#lG3Y} zmtI|jGnSSXm1%`aC+s*g3EUN>r6mPR@{5-_8!NA`slox2cdHA!T1#TvF(yQp+pym*Ui@?D_NN=ggmd#CEJxM_;uPQD_ zYph&WzH&L$uc#0-jpc?;d-VVr|0!0>i=Fx9*DNboqB8kwLpRKS)>ZK`G;`U?4?vt=T2>DZL!)?ic|T9YhhNSjinL!m?kj`)!!s|WUk&*Vy@ zSu_PF%Y@J53Y+hV0VlhJ-$Y0A5J)?#)m_+pujuRzw6UeOj!$Zzy^V1W*5{X?n~gu0 zF1q=4fTV!kTWFmF^k8$k^X32C`BgjJa~3;9D?2js8?yZzXC9*9!L95xZOLu%hFm;} zObeUuxm)n3PJLQ)(;z3+QRjvgJ+^i?KkDaUepRpom04Y`hh1^vs3iNz(cay5%Tbr-fPMT?Q=)3X zg%7=5r%!ytb4|O;vxBL|Uv7^oL%r6xz6D9@QB5w-cDwPI6~_U2^G=_51VfILq8=t9r zb5Y;1^`5WW7j=~RW~Ef?)^ykP1z8^D6Jt`Q>ru}SJuE4%`!_J0oaTx6B<54)lgQT#e5ThL z3n)$bBxbY2XWCj8zs~cVz4zEj+<)8+hmxosMHQ!MrEhpxN=b*uZgW^%6eB}W>N)8S z?_s;Az1KcXIfi?`xXp7#)N)@EQ~IVU)>Fz!L!ZLvShGmSI0v&Xjbd{rb|`Z}H5*_K zX~ZFFH}KpM$L?sajaLt2a~(S5S>c;$Ri^(S@BV^(#7w8mA57*k==d~C#5OWVM0a(3 zalCbI#IdsYDN_qQkJzJ*vKhNQ*IhI7lc(ktH+bx75Z_Yd?$ z>L0QvF83vp39Fq=kFy)Q$}Fqnt#dv;wnVX}ADN6gJwxqrWa<%%;c&{IPL@VE_9l$7 z?L9c&5pz`GMv>~hXmeQh$Jwg8o`tEb;TYBK^oi1*y^NtPiW6?lf2H7+QF&3zPi^m4 zdyR?Z^*zz1i1B4Yuk@f-9^j+$aSx1DU5eG_VsrEQ?rmG_I5de_ixbf9QMT^r)<^o& zO|Lnk=jL`GHsX=~e3O~S=OgYmn&(jZ)gzwoj~lh>=yyCnv9P|#m~vlITWQZ7F(XdJ zd|J|Du@nGjGqxq<#iLEqsymf5Q%7cN%Isfv(cQJVR(GFUx8g1~>nR6mW$8|DO|eCZ zyxZcV`<3X$MGKCyw3D6p`{0+dKivS0XXkbxHsay_e1n{9Ma_e3X~j^@W_xDd}UcB`@Z z8HzX85pl2&eW|aMW-(Q>eU52pM;4{(*VebQO_gg(Ina@3iR0HJ@v&dK#U61q-4$`L z5l7Qe?SAQFZKA%OxPApD%j~}5cy?Ec6(+wU<5DigD8}YoTS@13218wgacXJb#F)}P zQ|vcAODC=Lnbyoa6?4jY>b8$qilu|4DP4v+l)WB+t=B{ zq9$}H`$;=fhhkOsu_th#9KV-DixL_$t})yHaIb}>yHxrTI##YDV3w;I^9{2i3_OVCJy%vn%M?Ir`O6?AeC1WIwr8Dfud5#{7IWHa~$yJ~5 z=dLCE_&as(p1=>pJ2LfWmhamQN9k^zJiNf6&J@ggQ~RMw#R-pic3R4O)2)zbJkIjs zlTI1`T2F^+*7oyxpPn}+2b;N<%d+$`#pTIU_S#E(R*kpxO^d|*(>Kju%i^d&E%!dp ztiQ)|{!aU-qmOvL(QA$|^lmpAdhakynKot`=Dk<&9C)QT;ZD2n7)zek@rVa>gWYF} zDNgun*S+nJcrqN6@{4|}(b7HMbMYzTr$5e{hi8;&b#Z)+W38v%{(=8V#jI7B_rGkX zS>JH%e*2iNTe0#`+dD${v<x(^DN0y*naJ-B;tugy#{=)Zg%#jy&0G zh^Z?2@K~ki%l6AUihR@A>Uh#MzN6B^X2*3t>M{22Fix5FV!zci)id*y^0(Xq)F~5kBiydk2|mQ-0D$!cbaBQW8JG0rnFc1OxLiK zk2}kI45kU4U$)1h9?H=;|OM%-{?7rmfTI|%e)R)T}@)iA9u=QNn4+P%7goRF`KpW2VGcSjP*QS_;k^W zi2X4CucIC;e2~X;J2t`9!kDR1Q@@Wj$M@PRJvYVQYmYo8rMM1#1NY??CED}U#AsKV z1GSvHk}>9GyUmto(JvU&3||DIM@55z_I>m`vdvMM?E$rFJa}Wogbi= zUip4kL3^BMza7urQAZ{tWyA=_M<={!74>;A-m&vw;F#7Wcq&A(Y|65p%r{E35HXTcvr@ zJ*@>}-VBr+p*hSnsylE@s|`*f)DgrE&2pU#lAzee96x^raY22a%^cM4mq6v98yZ1B^=9YfrDDm}`C0`k->EP>wE7`}&h2*TE{3!{d}EFPqw1 zZH0Xt_EqKO#4U_V>G*K=|7Y)A;G?R}wedBVWF~eWp4K+!Yrkr>=bX@5 zn^ynwJFcZ9LgJr?Sewy*R&OPqg3jvgj?m| zj+g2etw&9eelNFd$klbzdN^O@72=Q=V3hs^n<#L39n@K zRu9d|teRel-}FQFXow^9cHg9bH^)rhw&JZF*dq17+tf-23 z>u|MtTb<*;Bzf<*o&ItUGtf*>Ta^z3d=l!m8ZeKW*=m=t~oi3D@{u@%9~plJPWtNTw>5)LC+rOhZ{Y4mf04I>b`+RjqAsrD-zK z$dYMfsWc`bjYa*|yuxE5C$-m|T|MNSp4BVzEOlGo$^VYXDR|?o-qlAYXwpKtKRCNL zd#{M3MV9#42d4H89LZ2^-4Qx`^z2>{vG>>yPL*jmLXo59I?((xk51id!IO@XxX_?VdQ#QbfXDD2Zx%X`H#-`+2{_9^GV*7+&@w@1>tEQ1z{rS80e%OYaV z&yL(3NqKvFO5RL712>nAU;LIm@Ys8Q{+so^vjfj-*Y934!}{LTz<>6qMZ`SItM(&P z&b2Fvd4K%JitWhxgkEpttWYFUIenYY`tk&fS{(nl@*~$^Pfh6E6^TSdkFB?F$lfh_ zyMw!rb%&OGH}&mq;dJBax(83g7wnH*IfT>fdbeSAm>#jdmoDrNSl<)x)uPNQ<+C5w zgLXA#%v+PYf&vK7&9X)ADLo3htb-(DXoPH}-H47zItkkTpd^K_~VjY;! z`yif9gls3ml_J+hG9TY{*fIyTyT`i6wkIoO`DS{^zQ-!tUh3gYtWmtP;#+@xVI$^t zsIT3qnAawZ5vA3pgEyTF3^xj^Yug|xQF^|p>}RiP{?g;Wd1 z$SRAL3hBmeuVJN%>l7DZhM(5s4QXjJ?22u?gJhh{b-q3nNfo)%kKws8cLDmkrmI~z z`|arKDYAT1WN*Xz5LWLhwzWmJS#++-!NP5xknLcMp0|w>S0BOeRNH|R+!NAze*Omi zYzL>mF#VZA)doba6VD1>gZ|^Ur4ATr`?k~rqQ?`me9?9=mdn3)+f;94KK|Toc_8%> z{n>#&f9$pvTmjR57H8KC=Rd^XGY_P_U4`1&Hm)t=oxWPOCi1=7opmrqz0{4>s`T*# zdWu(tVqwR-x%$^NG3?ud0S*K{Ajs+H>><4#V( zDs*-~$Mo@iPoj1w_v$k^34}F-7{~0q04J^BY+E*$QA#ROw+2ziWo&A7aq*56546 zedA7K9u#j^TCs+aGUFVLXMD+)8GrBBT8XirX{~#jY~5NLb%iqi9N4I>q~47&k595% zztF<9+2cGl4|a(4hG*ycevKzp&4^P%kNb8XD+$H8tNZ7vFo(Dly$)k#k8q{-I53Jh zdYnC}2h!AN(EVLamL-~!r(a9k5|uEoAM+O3zeR4wD|nh!ltWC9_Ed*>sqd@-+aYmK zi|r6tmCO+b2K&-ct5H8l((Xcz1i38_W#Fk^dtdVSU%Oks_1Er=Q$xGu+H%@!^F!ib zcIfb8*HK<+QZm4Sd)4D#k@rhm&qR!+%->naO&W5m)ruwe2`S_FpZm8>lljnUNE`Vw zq|bEuJ5~N_^`Pmj-P`AfDnc4ZD*Eib7`1FYOvizeNbAu;GLN(lW~6Tack*hfkoV?o z)6}RzYV)>vAuSD3n?Px4ky?*Av!+ohM!iWG^(MKK%~aOf^AO&JzxJz^Xe!PDk(Yf;EVN^_Sm#U7He{)5DQab*mGP7#r}lHUoEthDElV>X z7Yqg6oZ%1eW#6@}%+-cYf(s4y5P36&HDD~fz2Ay|$Ld5a56%iZOr zWj=2qKDaC@tSBxH1Se9&eGS zsJzgPL<&7+!7^W{ywp?TEe;h|cuPV>K~GtzIN&Y!1xhOX#btrgfYP=3_o9q z--AzaiaZ`qC>ZklL;j+2UpXX}mij#vLF(XkmzH`9E6NMYOZ|oA{zA9U6DkP?Dtsj# zPg#k_TTx!*_LWvt6qW`{ic0+DAveD6DJ=Jvmsfa;i@YTj#lBKsFyJZkqJRQLg@Iyk zi6?|mXz48vl`xG`x5w)%3;Mxb<}C`8`btWfQxCEbggzw|!Sa%_ptqvL>n3Si0=Woy{Kfu~P_d^l6hu~w%iZomUzsOZUR>@iD))PX zh5pi#P+57fq}1z!vEpE%Cs5>f7ghMmy>1WE50+FEh1@=$F96Y@!k|Bd&y@;Mm!WcZ zF{;B~=q+-W_`M-izb{l+_Lt(LWs|-hSFZXPRMWSpG*}2Ng5Hu6Phm-^yCUEzFGT&9 z2Lo=8EV7DHe-SJ>yF;aD_=SOrVrb_>qxE^c#es?f$~sA&|exX@`VB={-S`-TZSH6 zT2xx(Ekt*$KoJGKeor7!UL5rMOHjdO=nwwlfV(2-M(qXNzF=8dMaUBf;X8OZV_g-y za+^2FFHW`ejbSCO+>YjrZ7oeMeA=o7tGaa6ce>`nXf~{NY=Zjuf({=BHnq36wl8$G zH+61q-{j(PhOUcUbKT{u$@jPwwq)^7BR{m3(gN= z#j)Xk;93G!d#)9W4(iWlNh!Aq;~%tkS#f_xnpRzp;TIMs6P0?)lw;~dc`ei{MUxf% zwOMSMQ2d&&E!mW){lqdXlSnn{r(KhkToZO%tm32mL%?o}Op#*jQ3YkjWvasq#!}7* z@<+0be{;N5e3*a4ev_qgnkusPIPF%^;u+1(B;_qo{P{%i%i#t5v_nK=lto0y zFH>|m5%Dh~&ev=X(fqTQH1wps9P%$F?$zw$h%X9QXoFj*+3yk03sFrPiC#|p0Y)Jr z;$1;>3vng!DIu;Q!ha1BN?l8QOo)0S{8_F{r-@jMI~DOenq46pH`+k@hp=5l1b-V5 znfNsEyXrLfMe0=ZhhRCH{>a=-#Ak)rN`!wm@l!%1lL+~rBYstg zdx$@R%|zl8ur)=5o~RmZcM~iUAu2T!!ITFtX^iSY;&dS%R*0e%;v29nL_7rhNyNux z7G+^0Nf;WHMI!b2K56I!k^0Z~~ z&qDkQX~aK4L_2+%xD>V!iN}O^jfnWaB7*PN#N|S~PCO19Q$&RSo(TE>n^-NxABf20 zTf`b=_8R&8FVZW87$hS69Yz0@i15D?(MbM5{5np2Cc^&|aW(!e_(vgP1zD!+AfgbR z#H(Shmv}C0V-eTDJ{Ivg*n}dYKF=be{IZFNcP|fp+Bkc3y2SD z_Ma$k0qHt4dE$@Jq=}GIM0^mlNh0{lh-=X#iI8`ZqAw;Qo|o8&ra?rz3K7A#n79r$ z1BpLEl@P%%?UqJR1*FeG(GstR?JFYM;gv+>^J*gUNgG_OpE@G)+dxFTbwt$HdSZ)^ zr^gF4t`^devyr$7f5bzuMMi|&8;FoA?Vm#KR??8Worv~v8xig1PU3MP{)vckxsQl? z`~ngA`yvtf`3e!~eT@ixzCqjvk;FEk*-1tEv@0gs(JzPx(Y1;2e~j3PE<^ktnmiHd zJViu0$B0PhSt9tKBW^*F64B3IAaPw7gG!&m(rDeG`%1Y~rnG*F+39m?g>d7Z8zt zJ`w2_5;1-j6H%XK#N$FNBBFe0OOEZE7W`>6?h@iRVKa_+6hjPg7w!whM=>N2khM~JAu79#2oH+`AUP9pT~A|ih`5_fAS0tgI-w~$6U+lWYK z2k|kqOX8D4+(Cr=yNO>H(ylDq-+iRfKJF)?oc0ot&ORda{|fOd+7R?f%q=D$xjOt? zbJX0zmE5$mke2Rd;li7B%MR=3EOofF&Q>bGe>Lc2W&do*)?Ek}hC?vwKw9T2HRdE& zjd{8bK->t7YAntYKl<_WFU2c%fl}=JxmsW> zi#oOjZ`Nmar0lfsvfZXDvOp;^Ke>v`h^nDkZImr`r^TCf(`8w=cv(|*;IQT?Z7?@Y zX5+=JBI>Tkl@G;|x-(^${WjZfyNv&qWo_A!w$r)Gaa-!{l-uoh*zUyO5y;w92QKR+N~cdHS0~)=qfXvuHVs$Fn{`7S zn5gav?3<_2L49eC(zZ%-UiNX5CZ=f2&{V<4dkS#@;kvR@)83%P5%DzB=oM zKvuidET}XKBv-TZPzt(x02jWjt^{Y{Em6uWPOdV>(eF|yGkmUanNkFy$?RsvyYoY` zREFQ3mnl^+Oea$nW0`z8VVSH@iY!mABDncS-6p9BX8b!X8+kwQarVE{;^%dAUZu~d zE?4?hCs)69QSI=QCiPRZhubU>dC&T1pFRV=%@WjnqBHZ`EX#)R1cveWG@m+1x7Mm$ z)g(7p#=9K{SDE%ImG;Wyrfr;$aRl>bZT*}D6V=PJwn{awRBBw2Ts4e6;Hy%N_&L#4 zN)hzKWOha4sDNQv1oTPJwX$8vGPy>na&>Z5nTh0e*NF?$4K9$?)v4}p*D7_^Bv&0{ z72#HzVBiibMeu~2%qlV}!YUem2dP(z)FoGuY$UEbIVp;7vkgj*waL}vOntaXsnPg9 ztHyez1_tqDHV>CxB|x4$W*Gl%8!d*>y;geiwB-CdHR^gI+lL zla4p5!<%(o9oVd`N-0cDlG%cCqAF?cXtS;xu9H?-pH>RBC08M1WhJ^vcPKU5ldFdD zIbsLODB82wg1fe=vxqka)48qu@3 z_GN7z{y2z^FLk<6>C}~6on{+!k~ggOL@M1NRk}&3^qJ(UWW1TXpq_fifcCU3>lUfV zXO$v1Csz^UNR(=4eI;0R@n!wtW~tOxrPM9SRm#|ioG2Y6KfJ~;W=fs5DV@5LtCI_Q z=q?lM9HwchH*1r1r<#{;SNhzVTzzKf$^fxyY#fzBS?_=Lay2aNRN7$RO6IU+ymy?y z4K1#8*4X}FQN?qcQfSvFrw|X;ic_f3HeXlhcBRm6Fjb%+|2q$n=V&vdSMEj<>A0OO z1f7nhj+MkOX-~PAT9as1+F_R-}XxWACd=q#I z7lKD(u7h%4CyjWIDSVcQ_|+Im=zkp%^lyky;8;cCSMf@p_#;d+Qh?A`9(M|P`J}NG z;cDU`>}DW-1IGsvA42|!&|^9ZwghSM=)Cj;cw0@Jjx9Yz$m5ZBGwuVQ12puQuW%6& z`rJW;y!}Mf&o2~h#b`r*9^poOfC&E1G~{;=w)`k8PKWNvn*aI4!_Y@z zfQWc&6y2imGep#H5Ahi4S>cZqzCwiF|4Bsod_X*otxJzfowP z3L4|bcp~a;77^`N9)pT_A=24sZ$zYfufi__*L?xIf=C}hJ68CL!ru^)-XDmluc;Wz zSZ;F^7AveKqMSMveJc_19w4HA4iUeHd=ZiU?-l(H5%H)S|Femp=M$%4ydxsLI^};e z5&wsj|C7qUPx*Tghv6*>dlVj4*r)JKBL2Buise0rhxrn>F5+JFTSf0v^ka&CR?+{a=rKyA|HA@aqa6Q~0dH zUlS2;NMY(s&`5VG5pre`5uQ&(`M}(oHhwGgDO{p(xx$qSuU1&6aGk;~BI@%Ng*y~J z3M{c>JSY7mwiuG0fN@>XuaL$)<=2Y-6Y&X*^YqWexT*ZpU7#o7eg;hc3i3llK3w$2 z*f>Y|yNMX*7SSJLn2$8lT}m2b)=EX!kxsz`k2K`95FxKi;jIjZ++8aCe&Qq8bxwcG zA-+x;au1VsV4g!7a-JeW&X4Gi_%A5`6U0YR@AP*H@xMqT{+~!=?l4Fi@rQ_rZ_j~0 z?io%X{WD2J-V{Y=lg6B4x}s;1#u%}X^kc}s!X-rXk1L2@$Ne5yf;qxE(vZ7_G~|9p z(RYv@kA9)(Jw){92NdpC_;rQfRQRaEClvk=IPMPYRwRvdgvFY`*%SDgz3jssW}x!x z0UObUq9V>xUlGhvUlE+Iz9Ps)5i)!}c0CgpLLFkh`ntfazAo@+Ck1o&JX$CE1x`LD zmaDH0772mYCwIl8R^%>tlp4kv^%a6oeT5J})1*I?!yQKMGRIv(?k1l`Tq;L?j7xIk ztlR~TkwxzQ#z-LN|LD1LclS)Qy0r{}}jK zPZWvjlMc;_8_Z37{{p@Nv^(;#?&-)EpYC_A8C|;Pu8E~9$DR@7EdXB!6N_{4`S`Ly zo*cWtpGd!NgYSkoStR4-&Am3JUzXxeB(DT~w~s>J4-N9rt))vO?`!-!7c^klYlNN0Hjo0rF z26^Wx&P4Lw1>b1$+gcaXZ{}&_Z3W+G+RM8Jc{!(%ms&r%{?QITy>H)b`dY{s6n2bdyF9O zC*bRjiHTmt%d2XN>BoB?T_XLi0w1O)!(6<)-x=f;Degq_{sO+w4wE)~d}&)3(@)Nw z5GRqmZt#t!J^$SxkN0r8MDo(sk8XU~0Y1GwS7_oA%G(3J(dd^EiOIY0H1f^^Uylkm zLVSIE%OLOK)5v=oe9s#Nsq1)o+nZzhU2+HwGNQa}@QtSZeaRpXL-2_5z6HL~ zlwTnp%JlqVNE%U|7ku3++z9dY@r*$py0UbM>Z2cgqj}z1fkvmX(*3 zyIgMRqy3f^7fY(7v_kW6)unF@E)BuNG{k7m0{bd43hRhdq<>1WaN!~s3o8iC?}&7C zws+RA#np`)HB@v%>&A^un>s~)bA5Y$d*?=&Yif~1c+0w`aHOfev8i2z!-1t$zHoK0 zX62Hapf@ngBixL`bTt|Bi1*DM_3N8NzPDysJ`Q_tZ(hrDZZ(CCzedIF;^e6cV<6}i z2HJ*ow>ksOb+`rtZNn0#-U{e#<6JwqXbn$2U8ByQmjsSoU!$L~Ej@6$>>3jRLZOtuB?XD}z@{8U1p8WEXVo$-9MIINbY20KuGNa6AjqO@ zY-)5}+1kEgZPTWPh^s8WsGz=m zu31%$l9OyIa+Sw#B$>2cu;H*VV|rpM163=+$XKm+aj@1HwKiB&0Rz!x?-_8 z!_`+V(=({DRI_qe5vVBWdEsT=l}nH)s%o7pehA55yScfgaSi%TdwqLzQ%7`c(esJ+ zwFb4YCLd!*+nRiIjh4-gO&wuRQv<9BRusES8w*S8i%ZwJ3+pR9g$+$^T$h#9=XZ8> zx^nZX^5tRZYQ!>L7u2`4q5tC~XB8+t_><7nbl7}+4Ac4XdSIlX*(3?Hew4H!bHi9v z4o&{@E->7u0C$4~z76ZvC-7}VdpBfOiY$oNQS%*9g@P83cCNUdM~%N@qq)pBcQ&_} z61$;eT|8aDTV?B}VczSTHZ`?3n^Qq_Qwgi1w`E-Y81BYaj^>7Qxf|P?w=}hz{hGGm z=A6i@py|__n>OQKU=X0+)e?FZ7zUOzG8C+BNi5nZg-itEn8*sl!q=<>Tqjht8 z!ziR`d>=w^XMOwnrno}Vi^8OVVvM$FZAeW}fM<-Q_rNpfI#HT>>}X@wo5ZNKHcBYi zSl@L+ht@7Xx}aEx{g^Te^v?WoB$yM-SL>7!vFrHk_ zTsC~Z=^S~(t15g9hs^Qox5VMF5hn{ZcXZP?H>LiKfYwzlIj)f6{UugwGW z{DCe=>(}DJy1t>aSxpS|czWhc!rMDr&2>tTg7(g?VO;doZ&Uh&d{j(&B;%8j z;RdHCsI%#^bvhQUAohSHA1Mq%65VeT-R4XRCt}c3)hCx9Izqev`Diy>(Iq^8nHZphog`C^rX7e8P;nWU3o2^OiCT{AuX@QtEDJ4XBR*EVgk>TwtX8|lX-&6I zFs|9j1h}0qks~9PVWW-@O|vh1UKoo9cfz0TMet8HC2Z0#Mk ziFcTX+VR}p+F0LNKYZtNW7FEr>%(%|EArc$TJnc^aKE*Dcb#~zw2Ty0EgzEBH*Z?k zstIGG?3!@cCm@$h) z%7f{m&IW@UFM(Pb^+^@Kh+b3PBzZbzUDPjC{73Yf;aTE+&@=S6Mo7tSs4yE|L1lrS zV+cRj6n?hgSs*k6sJT?(F@;Z)r#(Jq2(L1QpDR{_9!iPDXa3(e(AOZ`8ZCfS(P)Z) zo{Z1-qq$V=)J8>d7e3|3oI~s|(A<@OzllzZ+l^*GD8RGN3o;-z7 za!Io%;^%SUzlx*(D~_J1zp;Z1%9|TU%hL!A^5rRm2Kvf4{_8+r4*eUYyi{=m=((U5 zDw?MNF2gnZ-(=+HA<$HbStQLfvL6Tka(I&d8EC!;4XJPu|HA(C^A!xhBfVO>B1xDN)|VX74iPjbOvTSy-XG&Eh?U${Vo^+#Vz) zlPouT>q$bGk-Lmvb7&C?-R2;0n!o%Q{*gy{;u}N-yrtFC@W!T%4K4hV#z+>M=r$Cp z_By8r@OH-@*=w`@ki$HnPr>Xg-EmIU9;ZSky|+i>$j0#I#Z zn`moq-qg7+#-mq$W0O|>(R2`i-5qQa;rdODVN|>+l38gm%Ws2>u{)Yt)`hviVTz{| zANx*b>^m8J0yOrW%*ycCcQRw&$#h|J>C#|<_SuTQwO)VCp!tq{C(}_d_MMDrEibx2 zZusb@KOZlpu{V}uZ!9}E<3X;# z@UB+-sAlXt8NOm1`%cFAg=eB~ViNg{eJ7Ln!x8-*Rb}}56c2Cy9$VnJx85-J~ z+wdJAzVgrmV7MgQ(%Mjua9UWwHIu!mwdL^B zZw^*kW>dzWpU#97#&w0BelxRDlbrX*f2{bY!}gG?SIo@F?Fp5haP=N{6ut8LP^9PJ zNr!Oc=AD@SmGA#`>xy}={p94tl>c~Cxb7YrFD?yr&FJ61{dK`~r z&T<^oaxZc#2iv!a0x`I~+omK>fb8;g>a=2TLi&V)*N0jT-#wJk)_d&9P)+EnP{zp# zf_i@A?ex_2x5qgQdi?CJw`?}4$5qnV-R=tQe{(`+O{fAs)ZxD~ZISy--v@7?Mo6aynBCg)FY~zViA|SNGjR7oyh2r@<8e;Fr25oS{Zfm2rp4e;2E$WZg&6||64E6T~t_-j) zh3kOt*t;#?8He`#)0=9h|Fq-8qhh}O7_~at7k-27J@r@P4oyaD7dZ!f{T)NUiqF;1 zQA15%)}Xca%luspT5G>-JFaB=y6ibz>8;)Mz|3C9L9I_sV*mc9%*S^hp13b{kGL-@ zG+|%Lp7c=0KKmY#Gk%|K&$xZoJ?Z-_d&uuRocZ+Nig@< z-XqhG*__T2GH}8*wE53p;r7~xtY|oZi-8ohlWu}P9eG!aW6Z^H0 zc_9tUk6LDT&-%`v?G}x89T5xb`#_5|17a>P75@(WJMo`}|MWRWnx_M0OI{RlM{sRR z?GZVS1DV+=J&ptR9){X_UK_$|M|o}O`6aGJkCsB@2kuB}&*hQG`lj26nFebw+t`FXb zQ5&aUa$f0qw!HL{uJp8%_B7{7yL0c$nnrqQEj%LjTL$>TQp$GCly&TK`Tfflx#Sxc z*SdP#XBvg{%ku_nU9;zIUgQ#*ce-e+@91c1Oc#}2pFa=`EnZS}>19ioEnks2X>!(- zv!>{sp=7<}X;7mtWv6^b{4Bl$P-| zAz$0`)jN@|(D|AXWh1Zo3Z2({)yVKqueDsW?3*-9pV*yvaB$%Ax58_k=iG3w zp85QWW8Zu+#{0WREeHSl{c}F^#p!ST>BTR+F|K~gpGh;Lm1B+YjC|{Ug?Xi)A$wI|XMG z)|)3x&cI7khs9xa*qnA}iZj*ea5|l7&UEKE$9U%iN4M3n&FZ+->ey~|?65j^S{=Kr zj@zux-B#!AR_7g7=bcvPT~_DaR_Eue&VRD9M0Ll~tHZw)pQJVt`PP^YDBmq#qz+SY ztBnNstWF{Piimv4rUl{kq|4ZFLt=Bb;A#;^{Rtv(J7=#X!prf2|12B z_N(a8!dq(9(ZVy7BIt0*RAg>c4J|#>5v;zfwhdV~d9&Jl>RectQVP92nMxTO5x1`J z7E;hZzsO~5W5F#{teJ9;{#&L?8z8vJXCkh@>ee&w30RV$ zPOL?Kd15V3oVBL_Ct+SfoQOFL5%zR5iMahvA!gzZNJJbLFufdiI?^yAv4}VU2m3v%q!vI0}LO7?FOe z{Qp2i{{EAQd~+)u`Q;Wo@MHd_IlI+#78{CP-u97oX?OxzlDB} zQ9!>nM$}k`9ryJv3hq*wNyVUG4v;$Pt`ax2O*&yfbOFgH>jBr_2HzA}85)zUFI=Lj znB+a1qs_53uGsZr#iy(OJot=G*NNjHug}Cso#XlRIFzejZ&7^oqk94AMzl-Q?=Dcf z4h(S58r?A+`@qL~VtQys(y^^Rgn!vqH81f^@RcJ0^2s&}Bwu{Gzn?9{Jt~e7?gL?z zw;2_wrz_hy!V}5c3BE3)Aaxxt@BcH%lYL|ac^Pv@XWsoD@ag)o4bvsk??Lcw*Md#I z@%qgdQtdfa@i~Df z@Neu#&*Mg)t-_5k0KzEmH{d%AKlYCt{L@ihLsNTahv6HFGkrmUWq=ZwbZ7p8qC*b) zBKifz|5euFF;_9Tlc$y%DDLyW)sh!>eIY4+s+x=0z0+^cA37H zbj(z|u`!r-k(x#zQ;1%8%SPPyduE&Oqm&*^N@;AZCWImZ~ zu-dBN88^a4SE>I0XsG87!wR2%$)#lD^6d9P)QsXaQ5u#?^<{Tm7Eymqr2EYPpIs+_ z`n4C=Oqa{MbhEUjSB=20u2YS=J`-QW5QjqI<bgiuYM|NAr7o88|6ClBYdHbx03p)q(Nr)L!U~zwxdI{&=7Br0eiPU+5x2o z0}%h?W_tJ@G3HL5S_Xpe#rf{QisfpW+4&l1?VXZCYy`aw^c5=n79brP9L?n1Eh+7X z%iViS^my?#1I@S0UkB}u`Z>h6qt|Re6UEb@FOB*+#E+xb44))k0Udpb0(rkSg=dMk zLGO$DIZW?_Y4*m7Ch=86c)H#r;Ag{I=xLyzHH7Dw!l%i75g!=BD@@_%iY1`AcS3Ux zNq@>fH{jZ5pt-+7cQ$OHy9qR9XfEEY%}jA0!fr8y?~7hj{~YlM=$I)Shj`2sK3hBo zx;N_QFqyHjiMire2z$v8{`=@P3WyA8kL}Y>PGK5c$qi2G?*$|!!y4ye(f~Hw4%{jy((7O$^AM{-Y znsrOFTRQ(L(0dH@b)b6<^m@=Vqown=f!=SRZv_32fxZ?>|L-{Zoj5up+P1XaxAP1% z-~R{V=xYr$)8oD;-I4BzqrVnMe=m;yNgUk=+Jf@s4SO=mgZrfJM1DD@lIFgs*Wt(U zo^%fABK&j0K)Mvy-$fq#6ulJm*KqApbRFo+aDBd_yFqjEf^97_{+B_28rKUI{X@`S z!ZoX$@=t(f_3$1+n){x1!h`b|(ySYr8slqO(vuKzJM`7%6@os6uz(6*4Ei}-U!>?Y zp#KH&*WsV>+d=O&$h#BtcOWlc@qftIwbG)}h?cNu@~Uk^Lr1s`SIwK&3!Eq##_`)m z(iE;f4a3n_+R^86%NTIGV1xD2nxTJ!Ugs#d^9dSwnt{ z^>jVv{FdnH($JWJzeG>hW6p0$G+lFkOQPwT^IH;4*PP$dXu9V7mPXU9h?z1gLLN1{ zYkI6Aa!EBUGixg+YP4kRXbX0cdpf5+r zIDKPw={j$0`_NYF%r@dQ-CCNB7UDEN7^rA6n2pms;T48)!Z?NKtA_9J#@5DRDk1#C z8p<=<)YGajTpw#Ks`zebZ|-c8RWN4EZp@h7m@&JW#VCU@V|HW4>`eQ6#*Ep?^SIiZ zw=}hzjl_%@vopP(if&j)u#;odjM3L&!`{4|PP{3WZg=gYrK!grGiH~tP{)kfVZ|Zt zpc>uG=M5d}PQS$|wo@l@+l+;e?c~9u-;HN1rOji*iN2?HENea^0)HHrKL~Eq@9-5nXTGsd}lChm)L$C z484V6S}Z+s>rtS~7P1XY9&-N7KV<*ey+h*oQzym5cl*VxbLuR!((Bq5lSd3VJ(ovv zj%0Oh_x-)!8ERWBTy2ZXaWqLrAHu5m@>)PqF9BYc)?Q87XEBDw#DwJC{Z(S2a|VVT;ITk>?1jm+naB1 z-o4mp{4Vopq#Mc**~jocssDpFWSmn6nk$>T7Y{V7J~Fp1(q+v}>8CNLfja)W>Zu2` z5Y$HGPCsUkh=u3$&As_s4(lsTkvIV zA4d-P-Z`Q1PzOsy%%lDy$Get!7msg0EOO5|W{ZdgS}tQ_p^&ac}8IRhJ>YHp19Li-m#{pP#3rRF;O^Xq(}fenQrD@|7|Mk>dS zq9t_n^##ZG*Ih4it;fFi-ron)-pi~Lxi;3iV9YL*^@e^(6b;vB9^E_b_MrWQC3jqZ z@3bXB=ZWlT-p~|jZmaHkcXr*{+JSSwd+=?WBYWDSkRD<`IYqoUWZ#dsrYCc4ub>6~ zdMNw2rsJ=NoX0N>4J;P97xw2ymIQL^ei{(2y0uRP-aU8Ica=WtMS=AgH4wQgLhqit zD3toP(?Y2%sk-aSk?s$VFohR~M7JiFDb0yI)cjDygA&L+!kp+i%8j_QbL)i5=y&@$ zVzzz2_O^BWHPgoriOgR;dZ+JiFSjioL~ELIOw4E8oW60{SwohKetyoBx_iCX&iI!1 zKPCp>I?*oXHXnJ|_dRdskmaU#{qIf;S5AG;@$Say9{=6G6OW#Jxf&)JkNb~LJXJO6 zJux`=6k0+q+V*_5jY-f0si0-Bj@i~SP{*P#^(fm-VV$?jHZS{F%DfeQsX)iP%la(y zY_hg4?JF3t&I_?-GA;95{lAM$6I#f{eX|B0++aESOl0l#ET!JXuE@YqF^kuh&ug`C zLF8DoR#L|zPb}^}VuOLW`s*v3cl#WD1JJ^GOw60scWMd!T@hdNz#Faz`MpQQ5pVPC zW)Dov*`yiE?8V|pWwRUkAg>l9`-nAC(`B76VB~Pp5&OK&|-9ADefrX%9ulp)Ik7_GeU>dH+2#u z&pe{>!LkUrS^g<7La=rhO%SpYs8+=fY5-GOO2i)D?MVn&psY zWG_>e-3KTi%U)-;%Tx|9x#z#_usyP8$kH?6OB28R`cP%}Bp7sDa{Tq7r2|v;9X**k zF|+^YXtgg6We=q6vD|0>g6)3m=f%C_LdQ4wLYm3H58gO>(m8RWPqs+sYr#`q>qwDzA`!nDy|4X*pkr%s8loI2Ib|1aTxA87g+9sEhcpqrpAIQf%F zJ8%}Kq_s;MJgk{EVGN0~$08bHXEIp+#5}FoawCn+sbr!OT$HbQ%2ZuU)rMc~4`D9y z^2b_k75D>HPA~o_uhq!LCt;0_`!VY9Z^c;HNYu8{NW(GMJ|T^GU~2}9(x~l9&GJ$j z>yUOhu#;5Ue-7SbjR_rHki)rQwhA*Pbvpsdkh1B$fAfK4yc>AzmtE5JsOS){Rv zWF8TG^NEPOfY_$&x?sZzbtYX*1YJVJhDMm-k@O-W_Ii9u(U%Zgu|G)B+(RNdu^*2J zC8~%ph{8RS;z}HyMw}tU3L^BWRrE?C_*gf>rL5E;U1=%+%3nwS4rQe-4BHE&=V;|h zdjTi{DZhnyzEqi;z2v?bn%o16w7s*1h|J$WL_TgJVk6AW#C1Y!BNkwP91;22MJyEJ zHX`zMC$R|oyNHe0TSSC%_YhH7_Y#|gxSxpp>?I=ceMHFTz8xB-`Ld$Fs_3r~5$_vB z6!rlkGWkv7RoGucL}45zUMR#7BElb6^!JEsg?N&9u@FB{^f4j|^;zPY$Iov3u0kX)UNm6D2dW!jTe+L_5sdnVG;oeLMrEZ=3cqUdLNsOrg5 z>P$|qI>t6~kyOXnMi7erEUZ(KtAreIkq%t||Ei6wX1h?=v@)q**MY@)wo(n_buyc8 z!lr^7iYyj%=wzmCtea9VRnc~y`m(m{aPD;MO1&** zxBYh89T+?!SzXFf>QQ1+IAa zv+uO+vfgHC=3w&tKi9$6ipigB!k7;wQyXJR;0~je1jap?Hs)T*O#4!#r@KB}m<+Ib zv%0L6w7}YRnfzTAvos999Vt8QyKJ|iT?J*RZlyI(X}&PInj1?ENol3#R%v5Kn#@u| zGmW}@T=7O^;cZ%81aQIIwVb@vA=v6sYGGphNvWkZ>(6SFI@H$XS)avkt^D<6eO9Vf ztklB%Jeg`?K#95typ;tc?6(Ae9ZjB)LlAJ{@)P-eqXddP^=>s^Iw}ndRe( zDx!TO;mf*lhht~zu9VyCyKT3le|fXo>%e2h!=x-4Jntk^ALBGs7EOD+IyXvnFejAi z;PEP%>bQ_~-F4w&#Nzps(g%-oUg)ITJw~VdPF|FOG{27g zPhtuzF#=2dLVN(^Co%kzuQVXU)x;nkl7Z=0sxSB;hhOS3{Byu{;D1Qb$H^DgEIXEl z@Q`ms`gO1>3?zR$kaGAn8u2ZK+0dnQF&^@XNN*(({Jp?&OJH3X$aMJC(z;rFNoj{a z?|C5kP5@_Ihy2n%09{h>5BhxIxTTsk>K$zHqZ%t$le$i_`q#%!)MlrI{6ZiCRn6jV9aG z1z@=OWQSaRfhJl5qy1UPl4gw|Pp)Tyh2In512woQ%H-x$8AUENVdX$BAt5SCRGCk9 zsRJ5jsimMk(|If%=I$@(o6**agcEeIV-QAY!$u7xY`{GV#lDGRo^j zg*+@PN#oIfSsqMVchfMQTpX(#^t&CD zE}H>UFdc6(acD#jAkE<44L;Tr^_6`A$Z~rS|3(~XyR7x*^IQ1efGJ}j6>>+&Wk)SJbZ#3n1kvpcJ94kkVw-kJ%$?r1;c{5Lw-+u6Qjv~K7jQyG5WBYB#LJtUI|6T5h=_l_M2v1bM*MV=pQINWhm-m4|p1jwLAa6p^=<@p+ z@ag4;p+>qy`rQG(TU59a;`MXl#-+SKpN9=g1AiRA48-ys!lgn0cv zRT9$=T|l}-@|J^dH2OVhkcTEQqP(Ai?=}@~gn0cf$Bj`hKNPuiiS(-n-)Q8$X^;mM zMwB-MzMU%E2=V%T7IP|HKU_+eNWZ%gc#~0(x{jCUERV^<6QgvAD9bd>im_&3f=F2zJj@824i_WL@(D6a#2<%r1f)UOyRPuVL9 z-_Ty)CXE)I(OyweX-T<@?#y=aYjCrKi`py7qv{{pUJ*Z-hFPK3#`?~BkuR+mnLm^s z_Eq#S4`p2d(em*Dal?kq9rf#*OrM*7Y`aD6O)XI!nGQY{SkI4nHNhqySt!OIV};tq z$y1yh$K1(NHHsJyw7{mr6+m9=G#&({y$hWVgXW}6ryFsdZJ;B#o@1a}aP2nGZMdcm zdi+jYFEP+vxL#?XZ^m_)Kf2Ma5G{zM<0U`YX=#}`_f8EIka6V4NCyqKx5oiE>+xa3dc4( z(3N^H;_o+wPZi$*eW@Y*`=;=0@jU3|hVYk6;pd3gL1WQJxm587Q}}f8SI}$qV5I+n zDSU>=uwm845Iz;O?rg#(=7PRe_dxu7Q}`@#v4Q4>qe{?s8ThLV;WqT#)u8V;gx8zG z&lj{oR2igJ{9b{w4_M+f8RE8^(&ar9^6=sV-+eQ`AH=dgS^j!r^-@r*V)%vC`< zKkN}Gn)wBJ2OjAlluN>HaY?w4|MG%Y9{d;KzZm}|_%FqO8UD-hUxD@Kj&Px;JlwFh z0e3&#hoT-ZtYPwKYFKObpy`bmM};R&20h|A%rd}XlHn;SHOr75Mj7-l$)JZxhGr#% zxnV)c+-P2m7W3-t3d7`1YlFrBYF&F%lO&=!(kxcs)Ov#`1^~a+p8E*hdPczQSQPglwypyO$FicxTm>50gB4Xc424*r-gA=wXUPkGM$6?#iev`;3`n88gW; zW|C#hBulZow6So^B+Hmdmd4fwv-y?AF_SF5rNM%+!k`^;$$Wgp zJ3sog#l`QMWsiNI*h4u}pVs}E z%3aY^Ed9cj$*{PTXkoyb!#J@kZ?HBGi}razzfZ{P3QzPJE8@{>^7wuJD35+k9{rj; zi~Y-@Jo+_x^lK@{z~fifQVy=8?~vr{4fBr`ZxFkc7hjCh>1adPap@ED)5GitlW!jl z{CZdl66_u!UMj+lj}YddqLd4#%hK_5d6xEE8dRdhzj2 zm)-)r8|ofG=0b!WA0aFcVP{HDe`luNMQJ;@5sj+S>AOfKXryMW0M~js>ASiXs&IW* zmLeshS|SpYFWQlrwWP1nHa>7iKFgiE8X`nQ z{-l}!>(AH(P_D8GpqxJ`6{g0i;8rT2YCkCz*s6`C;87}|p(ay>vyrUsSP`0?0YAQB ze5nqk6>rpKWuW~hQw@&cy0hb=4*ynkB$+n)QZmyv4o4g__&Km{YoT1JfNq;i6%uA2 z8xUpoF*JPQX6=4*yo% z4P@Rs1e?+>YM7}~0|le6mi zv7QUKZkhIt7sD|O%a0S$8U;U=EC;C4rb*Aa22Zd4c{ z=3;9n5i^u7B6ff6CSsbhhltknkfIM0Gcc=FbRTiH5U(hFjW`F#6B04Ad6PIn`)JfU z3)>^Dpi?k|B7$}iF`bqBqCvx8n6OR~qLO$Pwx|*@t>X4XTI^X(L?5psqAf&-ld-jw zhqRT9u!NB1kf!HOYR5RwR`~E0W60Cx-ZAcEx5g zN};6)S=P#jeDc9E%AsAbJZ0S|f9?VvK&3D)dZu(NOO~5aUN$P~_p%Z-9{rc)!?bnx zJ`%WI7QXJIA@gtKTZaO?%*-MwOs^!LY#+Ej0>1q+MElWoM^lk}I(<1RVxLYROji|6 zMn0hEdHIhVZC9cuEyfp6@^pXl=`!f2U$0brdQvCBXLNcVn?}iZlj755P+qf681T+G zzN=?RgK`EA?UF;K>_aN#MewmcsjuuiK=!qR_&4&s4!&+EPd?e#6kmM0*UlMTx_#i& z)0KU51bG9alvj(6qs!Bq7xNLXUjz6$;2-be%jFjad2(z(ghcZG0KOaIg@KNjcP%=! zuAdxRMv%7=d@ZAp_e+C3IW~@6 z_lHr+tHBLJFF!PisJy3fg|V+qd5N{)!%S?Ldl5cq2H)?4k8PaeL8|g+e*YE!M!ppb zFg;M?hQq-3J6!8yA-#XQP+99#JUX1jg;8F59;Piy9z;vWbQ?O`!;S50*X!rVpXsZt zlF|z8Sou+Wm36B&07Spa8b{4P^jBHt9k#>1xEki6?LOtkT+=65-kN3k^_@5haV-xE zQ6*piW1;fXC_IfC+{sgzhDRMgRjG?oyuhbA2AapWZ#K~=>fj>z7AE@U=JfAq^lBMt zpMKoN<5KQsjz6=LXT>JidR&gBHgAo~yS%o_(_5;?dWXgE-btR&Z9?|$Lr#($Bv7u>)j>p zh4?Km=5Ixjy!N>ARz$$t(6$+gwPU|`-m>BlJUSzrH?E}+zDj9m-L$TGy=#_#Q9*Tk z>-zTkjjj;X>Tu?jDb^ctHQU01fYZ&-`n^buECeo;Yv`^GiR zoA8QjO<*Ym`lY~d2(M`JBeRgqmX>-~ULX*>Vr)ih4Hr99D&|%)vrSCx*y&%~UP5XvE zqKs%~R&%X_k17Xqik8id<}Gg@Ue@N$X7et&4=(~o3x3Rk;o*eqn>IDIH#ht@NIGr7 z#I~6xPAL{XcFf_}F^4T3JT$XF?Nm$LVpL%C0K?I7QSK-?u|MwgoFg)9s^?P?HsB|Y zKenefysXSrG(2drpuMw8znS<~)T|7y4lmQ`nw2YR!^?^htzhMuwwjs*>$^vdTV~J5 zpr@+ur~J?n;suQDsf~Sjpx21n&ugsBd3Y+v%7MC%TpYhh@)7pEs%30WSTXe0Qlx ziLD5U)C|Y6^wbQ?B+F!Lwq=^-T+4LJEF30=H-CveAD1ox#b2NMr#iz@Nm#6!8;R0n9T@@$a<$9n2 z8=KZ{jxIUF!dG+v7KqOnSwt zmC`G0%9!G>T^Xoa5k|&py^Djj#;CQynkw&76*E-5DqLL?tPL*LWa-n-=(*W?zW)z< z?*d;{aqW-Kc_il$!b5@z8t^0{286r_A>b$N~12CLRssnlB^wXIDQtyS9w+p1NoV6B&0FZ{pX*|X1?y>k*`{l)vg_n!IW zE=ADqYg22viij>v8oEyuQ{b&YaO-+#-L zvoTpScdk7=OJ%GE#7aMGim^s;$)BA5`d>ZGyhWSgGcWDa z%s;}MZs{PVnTKJjbTHG*6TxRrEi+B?IuFS>`Xg-Bom!*|IG#K68`I&p zQ{NISpI%X0gNw+P*gyZ5UKnk>PC90?(OG6|4Vnv$Yw8;Lxnfh~0t|5-YkhHaVKd)) zt7pQ98v{o-3ofiBxk&nQ5BW_St1Fiq;)xp6Tqf%l+}$XP51KhBV`VTYV8T`6ACQSJy>nmsx6N zP4Jp~XZ$zME~8qav&+%h<f;YfoB86?@6p+1>)d4jv&E4Mx_|!Y?6Oui+!nA!ouYZn zf;5=r|H!;*YIwlFwCL<|T6EhCbFS2UN-^p1{udS_imqXfu3^qA{a>E&fJGP5(& z&3*6m#gqCxkm(=ZE79VU7G1m?S|=5qUXD&LN2iyg)5~9I7jEwFtoOI(qRY^{dw9yz zGOrXN{7X*{f7!*)(Z$Qn{j3;|PA|*7=~XeLMR#T9&dHYcJotIye=*vz*YsKhM_Oup zOa^l<+}wKM3rDaEFh{3muNX-ydz@ouG`dBGu|nkkZ(C%@xtbxLUzVwSB@@iXl;E*u zm_svE{}-p2Bkk&JpJILt>s1#HVga)ov!sJrz&sv&=AvcJEt=Q%1 zzJR$uKKlY@JD(}ozC8x{A}wHsp){9kQ_P_m=FG^uFlS`V&Os1dS={x7#eRpw%mJ4G zr&yK&e>y{I6PjV3%Fr)-_8$(4YZ11i?)n^R*TZ=+IVT>E{F>4}(;es+&NJrY|nLJDIb7Ic=qEJlkuVLSRW4Nf(!a2vy z{WuucaIu0WU^*AhU)~JjrH~S_;#M;d=)wV)_W^lIw&7yMgXSgBCB}$Hfjq_9aIu0L zqnpl!L!f^N;z{n3E?unHZ(agjI28Jiz^AqF_buV$#Al$(%yxtPI77NH{z>9E(AR0< zCt1Q1#T3xq7*lAh$h6TjLC0(1=YSrq(epr$)#wt?<23qW(1{wo0<=$~SAjO2OH7pY zqlaIO@Dh#x1`EGW+zz@!3%}bEo-B5QzF744-KWFSgMYHu`EC{dF7tfQ^3AM!#&M z-?Pz2Z1jmCTQu}dx6uVQ`Vt#`rH$^e(f?+nAGgsj+vvaAXh+D_4gHR{(Nk>n92;F~ zqbqE5i;eEE(f8QsP8p^h$E5=_7dMU22gI$uo74&a$y+egR2zm|be69-rG3ft58MB`w|8GH;LmrPr zCjG_sFEVbN{k;UN#MxS_g8>|=DzHUdTT8ak?=%@1ViN9Y3<%7yhGZ#kpmuA@KzzwP z)9Rh0yshFh)0Ouu3wLIw@}HzGM5U6LVT#T`cBG;irqm3m zZ1{u(TGg6iYMWuzYeq<>Rk0bSWM)%SYzE|8&k62(_H9n&al&kP%Ognwb-}ud#x+9C zDFn)!>oWo?gDtWm`*^mLue5Sr)l}0G4AcheBYD#nEFuhUT}ZH^F;Gz*tXLIjY+bP` z7}i4uG-!&^11Gozz|>e?(-aac{hJzEA*TVG#TV81u+}Kc4-_lov;cXF6T~}Tq51_VkhrRpZZYr;@Y^V$A5$10W1}g(A zTB|}qb(I(oRy9C=LtUU{O=CD$sFeUTw^T6wD(V^$C7emqPp?Jkrx!Cls%mO$12)a1 zzh0K~uw=^cSRJTq2p1y#K=)A%W!=ZGDOipi*VJ6qm-B?lkj_RR{Udkvx&z*(>^0Uvu=UzCoO7ZCT4O_|+Q6UX5T89BF~WF&XSDAii(} zyMXAji*Q$J*2w?f!?5K{%+P<=XC(7gExh2H@ z4ZJ73xd*@29s}8NyXH%648I%Nho`l^E|Ltt>k~!Ff$mf8p19qu#cb>mr@ve0+rDqY zqW8LopX$HZZ=^&CD|+6o+xPx29ATe}d#+DBCC&MUp`|0q2oWj2+mF;0pGbN2m9g84 z{3Rhx&gm)jyLTD+pxo>p$8McY1?}18kvU}eecS)6-h?S)yVO=pR9bSztYV0AK$t6-GjGI|I5dV-2SIKS+mc17jC=FzdfY8_o<`v z&+ImIPmvnV@oSn5pWIV??}Gbg_@^R=J~P(vlY2ZnXOElX59N9In4W8dXLp|8kdd;} zwRN%o=zQl^$DQIE=lS#RGUDE#!i{*#`~^zCgY&j^y8Rvg+x(~aM@lV*%l}^aKSus{ z%Kv3`-matbkG$i%*O6q}T|MnCWQ8kVNxILGlrD7@DP=Ouq%MACwm+1MxFtR3`}6(7 z!}*FkpZ4s`@Ehr(uHy20yt{|*GBhAPM{>kyJ{jPc;y1J-#}vuo+!glm^*DEmt&VTH z52d(bc8}E3OXx9jTiwNUNA5BxN{Q{6qDsQM2iCY_;8H2^k7G%0KKSVOQH~@0C!ic- zWqG-bvipYPo8nIQp|vj8?pT$+TTJg6acGYaTV1<{?GlnNM$CU|nm=iOY{rMJ$;{ldgsBtqaWSSDJF@p zyY6t_k>HQL$8krT-*Xpx0(a-=y$8|z+|)V3KYE+<>(7ll!Edw|!&1^ub?u(5%6My+ zbDQff@3_bF$31nl_>>+`C?uuJ9l9R9XUE_FZSLq^_fE%F_n{7#2Q`rCpQ38tEnGd$ zZH5Fr9iM+V^la}udQ|)nKe~sH9zBWlBS()mKDr*Id%S<5%w=_#xbqA@WIIu=4#TQ) zC${J9E7&(`^_1;F=pE7^3Via2RS_e3VL3==VfbLMVv)ho6?r+=+j;Huz@-Bya zoKuAUT#k`gd`FwZe^ z4y59F9+CU|foYr*`o!cqh5qMqIL9GB_{YqSc8bs+VqmF}@qZc0;wYR;IM+JW~cXSPVX&F@2$@9ENJDpL@6)f>J2d)-J4vSowqp3;Nir(_(~#Q_R|67 zaud9-M-bl4V{H#{0oI)m7YeLsf?FiSD53{zd59Nc4G$6VP9)+(;Y8wDLYzW8TZm+0 zfe@z==L#%ZgM<7ti1Uo~2V%Yua`jq~5OSRs4o8~JaC~SCQ9=|8aV`;h#^K_c|1Awmzi-m652deS3= zXdt52T8PN6T<-;?*OJDfigx0eLTn&H=?)_De=`yJ-b#eBcMy@zHX_owhlu>{AVT>E zh{*516H(X?5|QqAiN^`?Jt8uJj!x#6>%_!#A-afI%(0i4A;eFKnL<26M0!6bBE1)g z*eCWE#7l(uH4*Z?FiJ7R8hZ*kp(29=+%q6|z8Q) z3f+h6yo77Q_lmrPh0fxHYotC{V_1oB=W#=;&v;EA^eWKjx(%|Lt}afvPAW21DS|%i zt16f+QW33S@)H`JC@HDW2}+;ihgP4Hpo8hq&7)w}Zg6jOZ88d{3_ecWa%B~v+=jAb zG%EOIc$Te=lfiZ$8 z$V^So7BK}p*`#gyf-Jv?9pPCp%o!Iu!f~8qjB}i0yyGOt$&N%vvSXTq1&px^@bbc_QPw?K$##D(&vDB=p`;6cPKG7`^5+-ihZogqXm`JhM>5qIh~h1V&( zorpX2gT(WNc!D@r$d%=BE+O6}jS<>sM5Gso9yA;6b0m=R#{$WpOoSfk#A1xlhy_@E zt>`j^O+<`z)+_oBBGSDdNV(r54S7!xF@oAh#7N^=g}+pYL4h1Ten1){w@-n?k#DY; zWizk*qKO*vzrD#7f5BdRzqgh=}8Y9Un;yEZcBGT<3qWo?lLhc<3w=3MC za3_%I?*>+(avr8X^0AMIa(PkFZz}p-BCO&wBJ_&KkL8j`MERu>Q7-2wx%xb5v}$U zhEKrAkTm2TQOK_coVh|w1;))n`4C~h7ZNd&tRnhRKEy1H$ceL!RsIv_7_0dwf));^ z>DAsC5OMb%c*B3UW6U;716==4c%2J`QDGf zN&Q&wraJ`@JCRA|8+9oib)z1#EDSI4YZSoevM`i~0%XZ}bX4>&knzDBgggN^E8H>r zIM|z%C(9exnc&;1r7PUy&rVkNe(^LckJrM@%bRc^ZAf{{n{3zy^_8{+q^;e9pU!s?_}IaaPuia1 zv!{FF6!l1oaNXI{y&HV2cgh>77@4kJ-gm)wg9_KdE-!UzSe~?XFh`Pi4)|`=1*vPh zyyrA|vaR$Z?>FFEKL~jjpAptiwzYob)qro^AmqKL$-{_Hx=8u`41Db>T!))L4AVTW z#*M_Rk8#RBlDsY88;o7K(6~)`=#Hd|BrgGc?J8UcyMABS#@FIotd38==0sLH5y{*3)bP({0o12+S=m$`6zjmM)oJT9`Mt?*}}xXppg@ zyi#A@!o@|tg0zA&&hQm9;KPPm9MO2;tkkUZ)XdbJnOT`>7tP4@RW&sEP;g@U^!kRt zRZZoMfy$clmGuqHEj1O*zUe{V^y%~nG`BW3VzF2A*(K%aGt;Nxe@+(v&z>Q#Gkwz+ zRfD&pu@#A#&rI-Wscx-XK_Rs@EAY)teO1j$Uvj~mw34QVl}+V!K0nlI_NBDtWKT(> z(#A{S=Cnc&Aa z%<9_m@Q!WEH==?(I9gbMCsB}ru!bMA$ z=zRKK({tw*UdS&3iWgl}vgjgIN6~`9Qk~h{j6*K!n7d@rqT+)2c|{8Y4J)n)R$#vx z=uog=ana%crGiwtnEP9YeWZ4#cNY9*2J)8{70(SY)x}Hl7L=T=+Vrf<8L6n#khlem zphPdduxK$#W9h=hOG}u)!np|3j`y`_Z=9NF=5ldKQ6O*e#S07O8%&|xu)?OBTty2} z%%w|9P;!z@6;V-Ufle}MvtUsMR0O-SP*24lJ%uNF3Xkm+O>^@@o-wU&+hzJkw@I`V zi@NPt7NkYj>xY-;YMq`s$|9{f*tEK)0yiT42;R_cZ+Zl^GHuX|p;dl;4x$}Myd{=- zV9dXkrWrd8t>?>2NUJMvyQ;bVO9~1%SY@k`E5}>~Xdbp}IdEReNUNw?`Ts(fNbToe z&?$Nfk9D=Twh;cyZgco$<43nijBbCyH2(NlQ-*POy*PS<<|J0%*^bzjk%eKj|D>{a^)V?XQmITM!07j^0lI;KGTd4sOM zKR?FXa|+cRUywy|oY&J|e338G3yR_J=j5pA_TqxGwu~!Z5&}o#XMd449SPhFf4j54 zNb3UMCFYwBjhU0h`rKmzCQTzv=$bFm%%~~gbDIRvyv|ed%)CqkpYF`GN(aeTt@unC zc6p|M8!q&TZt`7V25K0GO?E=F%|5u$jB{4xJrlELrDqLx&%`IbB~uE`IDhS5nsHvy z+-&T+WZx30&lGDP4>kGR)KFR8QZA#X>XXpghD+kVdjrKRtx^Ogyw3woBjV42cLP{K zAzi$rpMa)Z(lneDyd_OhbRCdONNAW2NNFOC@Np`f zZ-IDi#E%!(;JR3&ug7(}M&E$zM>KjfuHV&YzL82qdZxTvLGRS``#R`1L9#p-)rdwMl;$*TE4&_~79Le;4R=c;ml9=E);|1^PKO@GU@wzX|-qi9-AYt%CGN zpfB@c;jD^(1avE|Hzbs8 zAd;K1Wukx?ekte+&|5Jb(hZ<*!t#V{AnA3$B}d^Ja!Gv4kHlxS?W|8I1H+S;9{g++cB& z7QWsRK3?1gdaD-BWksfQ;gGgnp!wF{a2~m=$fR6YI`UJ5KVfp*(xU{g&_yu?IA5-*6uB zge822_&MlHwD6ZK;WNbn(4TAJTsCDo7uKiz19Vx)&lCRG0!%KfTt5yCp-Kxsi48+J z7rrFmhLbmI;aqlQIv2hy$OFAk3qQ{iey+F}bX>^KBUXg2nSP$Q5;WVV;qU?y*R>jb zZRnc(1+x9<;Wr~Zys4!}e8a+DC>{XKC0wTb?}x4_Z=PKK^&0vgGyEA#c#+r-I*uKJ zbRO|LOZfTX1JI+j@V{Ha7YH|GFW16HgwkUAi{yrw#ps_+`795eJ`MaOT6ikxB^u2Q zG?!^~F6iYNT?D#Jqf0?oYV@U`P3OYUhy9Zteg(oep#L?TM>Jdb7mM|vw`k!vS;Ci! z?V$JJ{$j@ewk7-`@i6FTwQz3OX*w6a2zdc?2}iHeVMAL>_@&}4&n_ zf!?i!yTY9_%0D2+fG!J-Ts`7sOL)1M3OW(@8&f{(N2g~X+^2<~Wr<%Q%To_OAK|ZQ z{7WqSK~V|%_gZ+JC48m07W6$FrAvoH4WW-tZ$kJEE&NtX{2Hl`9{z6#PsVt_l(*Bu zze+p~x?KzZsU^Hl^nm^o?w@9S>Z8-IBm7-0{EwFS4N@OH{BH=q5UcG>d7oSOuN3ik zs(D=tKi+)GK?Ij*7N>ze!Kb3*evxVkZx!c&ZqmZ%S;DUp7lCfm!pkh-YeXaHb}gLw z)#)_|-=KxBx5U3j=2s8D9pS5!gmNBnw}t;&@mq+H@|gJ!1KX-7wK$36B%&E%b03Kc5PO_^}ee@gE(> zm~{7;T%~D-Z&dxGN&i&!cP9N?)!t3I*(Z|^rN72TU#05P$rxjb37-gEo4NjoxCT@3YYl z+35eU(Z8|L@7risoKg1t&-|QhqjPNZVjI2EMqgv2Z?)0)+vp$K=;v(o8#ekQ8|~$c zkaE<2l#M`DhI6B^~r$*watIOZt4!Z=ioYOVO2}??QW+rs!7CGjYvlUh;1P zy%N_xMR$Q-fNQSqWcZt)5nVnLk^UR#uOq#wD%^u6cr9qIR%Q4ppf~!A4>U=i1^O8X z;BA2PV$i?Cb%&y_0DT*-0Wy3YF4&5(pi?55`L8TBhbHqz9#=KLH`u}(Rqsh9ndR5Pgb;ZBvx#rKQilYBIvIn zoX?n)_eB@;}Iu6fcV>`&ZU8x-fB%PoEbl@0Z{4y5Ck!JoX4SD7Sd z@Lv}Gks`tCnfPVnHw(WU{ALSo$6V3Sip`fRSJbL2?rSZ#X|8DtR$|Ggb)W1&^Hqjl zL){8&z-+QqHngs&4I1&x%LUNkaWb;{tmsS0J{9fDg7NW@2*7WhJ5>ui46L zYpxCkOeq$hKwWwL8W{=e2_do(i#5Zdjg6u8$YGy4l|XZORS>gq*xI-yltgo|7VGN5 za=2WP%Mejgtxc=38kAawJy$ki_v-LY(qXsd6uR-QP?W*|YeE(zWJwMkrltW@m)bwdOV}l&&?qS)p{T`OPxZwe4e{Wv0vG z)AY|W)8#(?n*U5QU6!lvZ>Gx){&oLQy4L*845e$$@61rT*8FCN(zWI{JCv?9zu7ax z=LN8iG?lW=q`Bw6?r$bN!nA*}3bbeFYENg-1nA*}pH2&FU zx-+c}YPOj!El1}!)17Iph1q7hGeZ%r8Juk@Fw>gBjP#HO)*NP}ha`n$Tl18W9#Y1d zsf=_pMz%Fq8R@1LA;ZkJ<|Bh0h|zl?c`f4^>?w=@YsNA{hgZOOtuaDc*m4%?3Te}N z8llcG+q9`{Th2oL;w)RvLOmnx-Xhb~VwNqZp}vtVLXQ#Z9B0{b$`)pH;kKNzDH#FC zsc{iX)yzq#z2um!gEnvd?15)&SXcLBcwqOEFP~6N`f(h!O*S%1RFv1&HdKf{$5X8A zd&C6~Jcx9@!-|>~{hSW64gHZ1JV^uzhmJO2s+O}643ECYK-4yCCm)chzjGn%M^=21 zvm%Tm8Ss5cefU@trX|NC__U!C$DvqGX0Qe}Usc{{$r*I+lUw6FidrjQq%$h2p~fmJ z8%9l551eCBz5-(zV`UT1w7?K(1xnOf!t_I!h0k){MI+K`sS?dCO)!BFn>NVASw7Z7 zEwtfh0I^p`iZqB5T;$jd`kE(`L>RW&S?bH{!lfWpcIQCFV zOkB5d!bgmf6$4oYZ?VL(hR63{Vg2Nhy|c!}b>~REJ&M<(c>Lw5ly>rH9fYw>%+4WUBKf zjMFKWb@8+dGcBJ=t1J#=iofI|3s1alp~Gy)#0DuUvvTx}+ zw~wK{kk;byr?k0KoZXc7@!mG*vMJxB=J;z8jk7e$y4s)zPN`98nWgXvG^vxpd-p^TkU?-Wgkc#`uJ?Wd9ld^e2zJlm6%por!+W-6zZQ zi(H-QdoP_Bd#~f`s}jZ6PnG#j>GD;lH2SJ@6MbdEM~-oixTeOu99O+Kad_F7HrG@~ z_ZUbz$xnKD;+VGhvhi(bd9J+ooXKc?Gsd@#-?O~q4z$gayT&}poHfoH`y}lr{SiS< zH@LD+Yg@W!BU<)Zdt5%(8QwDYOX-RiEw8bxL&P}`J4Tgtlr#!o`jcq=!i^Ph?O2yZ z=i;#w>e}!z{+luyA06R$`>X5IyQWS^!dWSM-))qZ?5h?j?pH*TI-{h^z+H7kVqLyd z)@tM4ntGqVV_vLC>>+o2h&yMGA&Zt8D-L$Y_fDB$#OH}odf3O^JpJULY+su@MUvUx zMaqh9;~X2~l$zuTY-xs%M=a=Z?RKg2Ydpf=ljJwJJR-LTrC8R9I_WGEIHSktO*|qC zJmz(3j~ULkZ1yxBkqn+Nb+Y1e?Y44_vT%77mm{RP$FJ+1%^ zP<$NXHBRV_-6kf)ZrzPM;bal=J4-bFpSDlYPMgX-*wy|xO6l>k)roPCu(0qCFAsaa zNDP0!UF?8_sS^wxpcm5mcKfbFj@a1u{W9GB{w6ng;+(y!CnB}DbGppBAouCrH}#hK zb)VdWHy~}JhRAVEkCC!#m&}zjoKihbKnhbU6`$BGw3D=!gU2Wn%37*;JiC*sy`kKm z2YZ|nq6$JhOfTLMFZ)}@&X#;(IyID{oioYCIbLz@s`km6q_k1s*;O5u=IL2-*geeX z-9_s4pHx58w_Yz(RvACD>yTsE;U1%gb8#jSPw{HR=}E@fPU@_tL-Ed}3C6V>=L@mD z7=5a73Q_EP-A!Vb>E~8u?(@4l>^Efu`Vhl6cTe(!*j-_ckGkD&#fDnF5$E%DR$V?>rz|U3>@sp@@V&b( zX@bgWia7N3_T&k}wD5!7zd4ZU&(JJ1_u#K>lAr5G@{cvi%%v{(Q1^Ea2;BRPQI1Ht zusc$DZnvd$yGn^xA1<-ngPXvo)7L3J$ah*>+m$wnH6e+*cDV;H8&LNJ2V!Au_^Dpk zD9Hkw7H2BijwD^TbVxSnNOkW!;6mN&HZ{(s@#v6Loht@X4cd?@)E$7D9qRsjFYgIq zd&xcc*Y+ffh5cFecn)P@Mvh)@PnuxFGNkG@cc}Y?-eEWwP0!oYkgC&9D5=;(-op2T zc9*hegPZoOb9~f&Pp>`B9mkBb9=X)>eRU7Epp~u0C>f@rhkw*vgB<8S<)OPJ^M8rz z$6_r!i;gMvoL(Wkf9MKc*$*5^ePb_*i<7uG1 z-+n9CAJ3k1oiWCdr@HMqdbAxs`n2O@H{6R0I7avede(IGgz04?{9AE$UU&rT?V9cP z_U2r%bB{BC$O+fcC&|RnFlGWHQ zFCQbCP^(A$S8eiMRD8~4tuF>2dW-)0tYL?`AC|pKsLg zL|ts?9fflr!?M=)94p4EUfy5Bxvc0Jum?jLrO;oGaUObraQp%_Hl|IC(n@(2xWZ+e zuDC`)lF>?76Q}jWE2}a5Xf^R#_($Didt<}B#jp`Q@u6`K@vVl#EUhwc^F!m_bnt|!DT>E> z&zWeEb7Dx&Fx>a?3uzW7H4D>DQ=072j55jf$I25)dHye-DR1-NjpuSc=U}G6`~5wW z{o-`aEe!AW{4-{qG1ARwdp!60L~p^O!t}z);f32lz| zT<-I86B=Cy9gd%3j6CMBSS!YQ~17q$Cu^na`KIDeul3z5>$<2b#1qUSTm!QUO;xx=v)+hBZeRPQA? zCpcG@ok+R7r!H}6;oo2W^x?UOCwE>SyE^gQk&bPf^C!IIdH*>v?EUuPZKK8e`y9jG zUl%jQZ{(y*&eq^*OqN-SoUIwI>bCR8;n4u- zv60^D#P1%OG<^4=NpWKOUwf{PHPRmS(%Jr)_n%?v_^5RULfdeBiPQm4Y?Fq+tI1E2 zPY<+V?>#a8E&dbz+x$QKTj4MU?G6+*ae+EaAQ}|90>)v6ZLo znkTTr!sF6=!cWSiQ+md3A1yrH$KS1UP3U=h&(u)7)f35?&|}JTXs79VdmP^lbCT~s zw{e2Au1$$QPFdzBi(c%EMTu3zCLMj)lXkFf=Tot#Z_ZD7%6YmY>FSBM z<^KF(_iZ`jawm#uiBGjQi0PgG{Lg=!*yG+dNzM(%2>Hz4-qQW6!(!{1vaHfW?RP=X z*gdT)-P<}>ill|x*p3`23-5}5YSBT*aI~o5p%aR|vw9Y8M-CjJGmO2dJvV{t62CWm zYO!}xPt14c_>26;Im;JsbKmXS`m4k4t#3TMY@2iIRQQXn7x=^J$M;;~*J*c;Nwxcb zw`YHsdmF4cCE<-Uzv#VaPma{vJ{P+>5qX{U>BF1y|N4e;7uU=Ear6e`o_YfRDz_Ca5voIN5(1_k_OVMWbImUK=}N1dP+xL*qX@f8R0SQ{09Fe10)fLF)kj zT8x-E6JOck& z>joT=K=x?|lJ7Ni3XKd9?_}iIpp7RsZCrroz~Kjs7@=_pVmQ|gIFdn12jxh{C}|_- z?_wmT)4ieRy!c(A5hrBt2cJ&=Qt^%1ef+L)TgpAS4}3cPxZ>l?gYN%58{Y$(JUnxS z?#Q_ZzuDf2S(?$DF;V^{7$xD_VbaXW2i@z{vzpcaD%iKq*MR4>Q}5!8AbdIN6G~}? zjnjN)WPOIm7mF1a4 zyjV-TzOB))Zll$F(H58MKbfuf20lxo|0%dt&fxOYdgHWry+1R0*4e6uHSFllcJmZ- zgTAHRq2|;LdQ&^+h{C0PEzXiR?#@#t7%9-or%upLmxq;K(R+ftZ=QI!Gdv3R26~M8 z@c1A4;q?<|s}WDEpCb=r{+($S_k8@YcbA@KLCdP zpLb8{ojL*1!V!$o>v}{bc+Bg|)hK&MO=p)2bDE}qshpolM$0#R-qmJ(Jb2%d z-^*FSF#jC1B!g3=c+if*As=^7>zx{U&i9DZwA4>gsk;v)YO=--AS<@ld`6M)CmZ#$ zFy4gVKK{d_M~!km0kwDvYSHNZe5g62Y?FHz9Xy(0_-+gN#)=cQ`R|Xrmy!R>ojBcYu3>}TRPch(;Wda&SLoQ@>29W#-<{{MaHqyLI;B$#>Cv-El0p4&zy_`=onMzOQ%HjvvqP zPsPY^zHHm=T?UGjzjYf|2kLSsuFLnlly{Or=k5_H`B+cjNH#e?#rg%I-h7Fak3cy> z)VrXZihAoEae66gB;CJro=AD4hu5Zz{XNj|{TCc2{mY)~6HiHVym53sQVL1?gUqwZ z^V%zpJHbd3MRookbJ;EH82Qub)a$^T=G-c9~D zq#JS!`R=3%GQ=%%4?fmDVGktA{5g|UIQ)0F8@V|ByUyJ)yTbhUwI5x0;&!~pE^937 zEE}!GxJ`>OQj4*%-EsPeLuKAq@dWkiVfT(#4|_Yq@s}NTpJArjfcC&Xf@y{&RQ9A- z&o6X8)mUAE|DDy#3eSTj#iqUb^4THH%^ZZ~p19qVI#)@Ju}GbbIflV$H7R2J@qM)N zbf30oHrMUQvUE%u-AgTBd^s4>($g!Z#k_Lbo}>_$QLclpx#Ra7-NCx{`OlVZf=^xC zJBDMQcJ$kF9v$fO6&95E?!XPHcd3H9Te@eSjQoUEn{g!4LcX12Ue|6-2Og})y+d-mKy zf6k2TjI8YZg4y{Q`B`%_GjnF7GtSJyylnrBoY{FZa`JQX3vx0FXJyZtHFHLO#>~9D znKQFz7iP@L$t;|ao|j)ZYc9UHhs*k6y2*5A^`l#V-cq-jU(7L1oNzfD!qN911|snE z$`D>Uy-tBY`sx1>?!>ze{Po9T2*So=wy1``{O|TTMd(ix=rCf*|4y7mD`lvp6eSfj zw4|!MiXH9ZR!91u%i&3PioSm?M_h@M$7T2T2azQZ857dZxNte*=R3tQ|6GodjZQJh zKP1(Nq`Wy!VgBJbXY-PN;K%`oGsP+J2d#EGoWlMC6Lds|P3;`cSo4w^L#JM+Q`mlv zShvl`&LL^2mmV%hsHag>FCFR)>ws3r`nepVmN|v|b2#1RrQs3zzpMm@8>S-vDSJV3 zx(c>ym&0aRF(^g-4~02eS_(Lg3zKw=MpkV9hE-!_S2feGb^?t*sBd1f1gd2;@VKNM zJKSs?sEvInl>UB*w$H(m+lGoc)^8aa?NKztnTPR|Wa&jzPwqtmm=>Dlb`b~wE^I=x$*-kY4>o1NaTIlZ?y zy|+5CFImWObF?!2oKuaB#+*}B5YWNP|H7ta#A#}CYOH6Kop+i#-uW|iBsjX-(d7GF z2)SqK47IEOKjkUnLj2v>*o`~DolHKt4hlF+2p?&eLvFM!UQwrp#&F^v*g&21 z?}Xeyo{3hHM)zDzd`*ZNA`-uXc$`CSFfRTmL<8yb)!Di+4&%htH?XNX{TE;}P-2|J zIIj3jAvcuAKEYxw{YN@PJMmp?5=TTP))PlLj7`2F=SI@K>U4*Xgt(RT-|#+zxY*b% zPmFMgZ;*b+I9`{#yx&E7sSw+VNasEx^!+y?{C5x$?*StG|DA}!dXSjl5Z@yr{QJa< zh4=ySc!zkH2>pIYywuqIUW{=Vn}(yDeoTK9?vq699>0%RhE48>koyd=44VWK5$^?J z88*cug8$dV3aq9ko+M2GJIZ5|Skm~1D#DJ2vPk4k<9{T55S!EzgF^h7h~5AGLPY!z zh~P(&$a?>n2>bgx@hxm7O@xqt65p0hMecz3U!+fwCLraYiAlLIeIZ_zRVtN35lN*+ z6Jb}#qLhCE5%R|qA(w{$h!2IBK!h<(Btm{NaTPWxB%Uh7=|t!|l?Zv$i3fy8Cn8fb zh{!}1u@3EuI9`a^MCA7@BFgJrBIM)~VRwZ@6yAIy2V`}8uN1E@u)K5KTuUfw1+Ap(yt*xpIRdH;D-OyqlpMTT8Yr3jR-xiAs)by z@I>gbjtD(A5Rv|7BGT_5u0eYsBK@xsuMy%FViGpZB_jQA5Ru+CBGS8?_c0+DBI5s!i1@w4Boq-5@!lmO zKkpL{z_f_46U)XOX)4uv3&gS`?VALAHlZ_9~Dr;LbnDv6Mffr6A@ON9JJ zBJ8V$2)$d0cfiDn6R?Rg5%qa35%SxK$*3YC((NF=j;s=q&Micg(``hgcL%Xoh;I^+ zukFOQusJCa^|XTsJ-$tR5B5leKHnjJ6NiKlG4B2z5%su-2)!O7qSNXkeu{pUi2Uv) z-UT}(o&Y-}LhomYzZK$nBKUqmguX8lp=S>f`t2t|pWhIn$LqvHh(f#`XnOaPbBVyJ*)6j6+KCX zrx0-yoI(^1kwHX$vx!KT2T?HHvxq3qbBVC$xx{xcZXv!8yCtH3IiL6t4g(-UUI}pz z`d#8t+>(|5G9qrS7ZZ=*R;v705MM)oOMDb|P5e*vw?vGC>WI+qO5!W9XCnC55TW0- zM3nbBBFcL`@ki*2h>+7k>_Y!a9PJRd5Fz(=BIMplgxu{!$i0sUdG`|`??K`p(T@@_ zp7{as6SPafS21QzMLK2pIj5^J^R%xn?Qv$>=_>8CuP$vgaUEmhveBr?W&UwrFS-)2#)gbdjIXw!yp6vnh6S zOo#hM*B0~cTdLH#U})7rUlDQ~a9BFs^Hry7@vMmCS%#?2B}(PRL#uMcwtk^Xd+E@o z%{#Q|CgVc3^^Jx}m4S9HQ+ix9w0b0&N&qobgdW!#gGW@AKjB*ZFG;wz3<1tdltLE| ztwMMZ4LNjlvS1uVFcp@NV+k(U6*}^8QHEgWa;4U#L#vj4ufj;mtS|P>&&a-cqk}`O zXQWP-E1fPITAlRUxEDI{7O_#5jG;!kQUf}{nuhF|Pwyc&ARVngWWAw>>wu*$cW$<*?DrGQHKa|F;mk&?q&BtRy?8cZ)?#-?a)YiO&dRMJ8;cBT;y;7-e zXjSqd`=;|rmDX(VY>eF$v)SF@x)DkhBvh7x!FiR^XZ6tPqYp%+2~}Fv$xB!x)wx=! zvu0@3NjA#{$TN*2jEnLUnxsZ+l}6VLtw#DiRu)i`eV_)rmI_^`6uS1SQ)ml{DL-L# z-&QXbYF7$fKeP&QU~Rf1xQN&@79?EgY*Ss)dZpL8q16i$6(NU#MkHIRmbbX)p8xp^ zxXnc#fp1XC-Y~SvP7bMR91b2qoxFs4=Y`7FHYu&}hHEH0Pz%Ku zy6sSkZ5~?1^nT*;$aR~a&{BpF=gmqZyhIzyqUzI6wDi|c+^Q71WoQ*TO|vK-SD&9? zyVK+)T<&_^q5AjRlu}!VRw;cHwO$%jAEmBvKB;v2hSKSdq1EXOt)MXYw~jRDCbX3& zT!SvY!2DkZ7Uwpl+Bb(*HN96@f#R|cf-j>|EzVoiPaL;HN*^;|*ksiT1$L!U z=RT#*y+f;xZs_Q(t?FR3a5W353H2vy?psQ!9Yd>>Zs^7%r>{2@H99kW81HpU#$fKtG zgsL)xIlr%T`rgp$q(3jox~b|rvNWG3JC#Zg4XsN03zrj66tr1$a`a)P!k(d3L7%Ca zDpk1JG9mJaQsak1tHwkmZMvV}!uBwmpHNZ;U*}^=n@5LM8~r(7no5cOWR00esSJi@ zl~n3SL#qsH#dKKp9JwtOBs_6FmM5!m>Jv({E|?Tvs*3Vp`HC9h$iQVmW@>u2h$-M< zvTf5BWcfwx2+x9H&bZhSj^i9-oZ}qh9VaC|7*7Ta zhxU?wTH%Z2NBC>Ns^{ebC=vGuxqwLGXXFDN3(bhskjPb)M6RABW-6ScFkfLQ@i$oA z3!JzgdXvU#7Op~MytP24+pg#ig?9iaBK$tmze7G0a&_NC&|K9w5lVCQUfdtCutwnr z^ap*I^c(o0QsdslLNSGt6>@c4_Lau!x43tWRc^!!;a~N0{8Ttsn^Df4#E*n{nD{qi zl~#5W7Lt+f#X>FR&(%&Nz6p;zflY5YfRM1XleL3(82p3Zq2> z%5KFqka~?)c!I)YBJ3y!NPS94zm0kzLeE=>(Emvy_+BKwjrQ}peMzF*Og5kG`oD}0rRe7>ddU4xqcpP6XdpBKUR^!S^^3e9scW_ZkuM-y?$mGa~rM z#2Iul5%gJ#E><+Y)|2|Q5Fu|p5%RVXA!jEM@qR-50QF4--`cQp}w9YpYLCxUM`5qwV*QGTxxk-t9?QGTB)|M+;re;g71 zQ;Fa|NBN(p{Ff6U_X;B9wiCg32N8025E1_|BKUqr1mA1K53ul*2t7X`LQnSyAnbpv z!bu9J5n)G}3Ud^mqp%q0oQ(d4n1EHk!0a1Q?hJ<>cPiXL{0Ht=z^Y$imACSL448d8 z?pMnHC-jG%{!HNu3cD4)s_;#PZz()TL_T>VWj;?Lf}X1Ad_|Wkx>nI^6@3R0<+qy% zy&of@{9aK0y~_Us<^Q>&V{uz2{}|$Uq)WtoA%%$abBNHVMA2o6Zc}uJqIW2|Q_;^8 z(Jo#iqMqI+qMi;DA=f(^2)RBY^v)(ik9;EZUZVV~m4A!!-=zGpGl%4VQ29SjgxqI| zko$W@f1qgRaqvevClHZNG7;%y5@9#_3QHAULS+A=uu5UA!X|}n3a?XGiFy>jg8h<) z9XzP;5#sOBPZLod&lCTOb_>kD8~qco>P3_j{h{AsBFkwE5cwGcq+KSHhJU*9_bYmd zqOVYNo1$-5^!PY*5lDAGX^eY5B=#cTXbZIW^+edk<3yCxvkLbs{1fpM z=u12v{mNK_t|k5j{fNT*ffG+fx};Gq`xHK_@O9!O^p`~3Ke_TdE(!T2BK@gEgr7yk zZ$1(ESg3G`!g?a)wqT__@csIBJP84EBXV4M-;|FCgY7%mnoEQo6%&z}UfK_HsKBc61Lg`^V_Nl>a{E{}K`D z`hfhT>O;~Vtl)whp&%S~F$;3lg z)I>x&*uGHOO{v1miAb-Oh;m#@gxn4y;@?Mvo$V%q?{Omdo>lZOfz#9oqaP$fP8AX5Q4ge? zMk3-j0a+ex#Gj!51F|1|oQU{OD}0HF{`5^?)l0B9((mKBP2mxR@kxgNWa2xJNkqK4 zz~Mi|b`?OzFQz~Ax`ar*h$zn{72X0I4t+L2t^ohd3>WzNmiQXlqoQ9YBK~^{KU2sr z%oyJZta=&!ATaI#zA#WYM&U`sS73KU$ju=_kGVw1U8r!G!pnh_yMpu|&`uQAD{LWR ze&k8$A&~9{&@=JOv5o#n=RP9zctGK9g`El?Q~0F9rxm_Hgnq9AXC82O`?} zXGG}jJ{9`?81@0=e8@B+{Ff=ZUeQ~DGh^{wK^k(lk;XIWJ&OJT5%GUUMEnmG?Z#Mx zbTV+}7(5@6M*M8jkT*xs^GV~GvRKijM3l=iBFgP@g_R1gP}rz&wZgRu*8_*|MR}4& zdRu|K|CgKw#52|sBA$7c5l7&;g^00y8F3WuJH*kb6YTfUpL44Kw{#&cdYeCW$uNV< z`X5^#z)j)FH*nL?Y>8=VlYtDFA?X?TexEoK!&u@heBVc$jjR#RL{^Ds8z02*V}9fa z)0OfmNPe7;9LbOFnInE=4~vi=)uTq_NAxHe`O*AX;vzX}lpn>T=a3(}W7Hx)ULQxi zNPZtHKTbyvDnCX)nRpq74MY^(1Y#M6s>BNUU9S8{+(&w){GL{Rj14O^KEfu}$?t3B zm;DeS#Fc8(gC_aiBDTIk_eK8}S!D7{|EZ)`<0Dw&8d-$$vBZt&28o+x5z8SkFL>MKiTpHyvB8=@~BAU-7L>SwpL^Pk}L>Sv;L>SxUL}{$N2s>HMVKQ{(z?EzZ z%7=W1L!sdds32t9QC`y!u?+cQ-2KWA$qU-GF7IaK`Aq0(ceG!oZMx@tC|mH_9eNQ9 z-*Ge4#u7G0+85iZnfA@#Lve+iZ0De8UrZNOARYOtrSTiI$!C}M2`Yl}O=t4a{`7p1 z&kQ54c}+VZpIL^7WyO-iaHb5_<6!ujBk=K6fa%P1uTgxa|9LQ=hs;7UJ%MO~mVEpJ ziqvZ1=H)hA=;jrK!Li<%FSD9iPP=S;t>Akc_Dw#RuXNtHYE6IO-wllKNNM=HO`;G=EWon78t zn!NFfIg-3x;2TVSj|Y=kA8gxnk>s5QzQO3XO_Mjl5EoJ2PVil&!ga9c_msM@ey0o| zFAaQy(eHjuUeW;a9tPhnx?<|uu3v6_Sie&TkXHh}!RYrNnmn_6i&P&kgKse9cV0tS zztacM?-KBB7({-5ugRM-fV>aEhbr#l?B#b!V_3g429S3J_%J-_+fV_Wz z@5(;XFkFYQ+HyC@~t;s7KK;9GJYggeq*voGYjKI`y-T?B>1K(iE??p{s(E##( z55608#nkmSpx(cfuL1mCrTkoTb`Z@~caj(~44`mMV}qroY;u$y+>tyiV|~AB29HYs3029Y9___y*G-{D&s*q5@B8 zysh9HO#e3)g<{I989?47@ZF>!h)&Ja4@3BV$hK%has(Wk@Wi$_y$uSH7I0LKMe8umA3|bgQ<`I(&S+X)vvq}P!2jc6p6pGWA1| zOGkNo@pIvAo#BJA3;4|OgXu^76@J4skC(x>Bf)qc^eBJI`we~$jj#DWAp#n0Uj7*u zy1bXb_pZ~BXZDwrht2B)6|GIHgUzW8X+EDXBWu=7>?NO*J=5n)2W|e(&dQQhMs`MK zj=U<1yS}j4?{I{*!Qv{5Ze_EjHZfVkhl>>K)d}9z=IZ8_rk3&*xLQ+ZprR`p>gs~^ zEg}`mvQwK{>aZVwtw?QZs4QUVSG2ASR5g{?foKZW_Vu79dW^i%1*zpNElo8m zT5*Db5y?=DoRGA#roO7d@VEHLlFq19 z$elG)6uk$S1=`ZVmZ8vO$3Pawbyr=jlG=s$vfM58|fO_z?J1JmvQRM#erSCpbm z3qKz8R*g;qy#(nS{2sYG@V7vZ0}u6=y949eaIx}}bdz!+{A|QGoeL#btkHb)VvX+= zixAGTF`UQP60j>p8}7(FqF$5d!ke9ILEjVdGvw>^MuhFq!oP;=2Q>N{xZbJJ z_u`ss@=blXi*Kh!KZNU>Q66Tv+@)7hE?5ootA{@adWXi(b^WGuVH?#yfPP#Hf7cQ| zPW&h6UM(Dz5OOYTzd8zZyV;YWeEB_q>0EeC$=!25fV~>d!($Rc&V|>Oa(7(i<3iVF zt)F2$J0av;cvDtkp@)lWG@9>`ZnDvL+h~4gU^?gYOr6LM6F5P|AR23oI8`-mf%@Re@|K#_!SJ~% zffd^I$~K)?qY?Gmb)&qNC$y;8#6|JjPpNH;Gs%nJl*H>pgMffu@ersB^;MBN|y$&@m| zp!=JeWX`bqn;K zS;FuFG&;kAs+xkqkar!-111(IU(sywTT#&l}UqJ(kq87&)T{tT>D?K$cHD_j4X4*wFGJRDIO+E}w#PsR)4S}ng${PcfHRUVo z8=6~cDw=)MgTCq0=@DpdZEQqSZ$7)EJbh;RH2lxW;{Vw*|Q^QJ(o_v0&)$B`Y%gLUSMx_@UeMMR!tF|&& z>AR?*Y1N8geMPlzR_ctj@}|1wHT4zCE0)hKhQIktxc^?Ml!2w%YD=5&MmyK zsGu-VSX#QMG*FVaWJzJ^!m~3F5C|;DFT{UIEXgaKSGXilTy%b+^bSWXSyZ~DXyKxz zOLV@{C5sjZ7Gwn$%nCCWFS@8?(M1?M7A+_&)tMLMEt`>0URuKZ70yMNzc6pf($c~}esQ5i`|`G$Is~h7 zTwGEV$Xk5z!h-n*Qz$pAun527l!pT#030?TFN5A zl@Tal>6^+F7Z##)HII@aoy=R9SG;JRHNzzrEif~vq?9h{Qv@msT3%p5-jex96jfE_ zv)^e`SG3mDRxU@|X)153!JXE;1)KSVeJw{VEJtTu*SI_tO{2E8GT0o*3|3^|Ft4oi z?8=Pn@~rHt^o;V^nHd$qbX?DxS)SU`*5XT%^WD!!sFIU8hwx zus25rLmo{SDK%OBf~)Zi9my*#cx7v_754&7fI0Y!=$WQTTvTXv@V5AY0bf= z)io8kUqn*G!rk1^+Eg(JsRrK{5ZqGUv@&QbB(o?i8Ysq)O&eWmgaSNfEKBn=>u=C$ znz7SNWByVS((20Fu4*>y@?RGu+r_afF;WqRvSYL@voU{3T_Uxgv@c%7p_cuxt7G;B zUrK_dH~w;xB6KX_f|2uIS7CtGPm2tPr>(@eyuKw^KE0y01{aYlzkmKO9eK})t3 zvwdrhshs3W`ywLK1}Rt`ZW^(7)0HIGpp%!(oOA4_&}kodhKihN6_{32*T_+Q(=oW} zjr(68lM9KduaI}3W2VbV=5TPCikDbx9in`_+YhyHXBSS(G`-~_0XA8wqT13oxU+MN} zgH_(jHw91Sm^o1Qk+Z+#6An#YO(UdozM(SM7_6_v^Z*`?zUB|GaqH-QT%s#hDZ8TfXo6+r;Pg+%hZXrk^Cguz7c2z7KCuTQKdFGc_jQ`++tH0AZ z|KSlQE&IdtS)Z(1Q1KiO)QaRBr@G2+_vV+aEBpW0dlUGoiY$M;-h0`@5(r{M#7o!$ zl7*0jfZ8U3JP5MMqNr#Rvhaf0%mQ%_h=>as*9o{ZDy_J*4er>|fUUM$+d*x|cARds z?N-3<0TnyrIP(8~>sH-Y@9`c4?KtzFU+R;WQ>W_GsZ;B%Ter@s`l-23M|e;2S|{;# z^3*L6>qmPd4kXB%(4*Ezu8TM@So(XdkB5JT^vA4^hCfC6%Nk)RBSq9MT}$6tyDL1qkK1DBo#JKgw*SyH`qfv80KnVfO=m{(OB3VH8d3J` zi?46}a@D=ZKlJl&{`!KZCoTO4&)Po0m-oyYZ(TU^omXnS z_2zkRZjL&s;)T`i%NA_g_vELyO?u@0>{rfX9$GH?zvI6nxQuaA3bHcs{onUSlBeW` zf_^Qn`L2B(^$GR$Q$4<0JH?J03hv5(Y~MSLiS=&ZS%X~Ys|o0<3Eq{y$v*eKtKCHf z1)ULtlf5plU4IE%XYW5WZfHpYdf3hAVZvJ586jL~?^w&z7P%>+&C|X@L~de>Bn-9F zM2fuq*(*2rTt0D&>k-#dA!9fA@|U_E(f*x=-*u5cJm2uIF#KYjtHkw4p6{Ojj7Y#& zSxbzj91*`SDzG`acWcgOE-Q{Pmz@DQ<|D_}F63zDVwNjhSpsuefn0WUAs3Ug>3112 zn|?EQGe?(EC;5h7tlJ4mMAgx2*v!TBn>m{P6^4Xnjw=Fkca@@jyO6ud+4P&anEstc z?q-fV19Hzt?yX(O-Q;Zg&0NH~9T(*%iCb0_+|wD6V2?mKY986(6YE+-#xW)@Oibtz zB-X7c6+?Gai8i#D0RIG$68Zc50zH%+4A; z3vs>@L-Tyc+B)I-0QyasJkf4pVq6z#XK$QA9lk!o)qB2Cw(t2|2`gv#UL3vz;c9AyA?HrC0j%O4<2V#yS{LK+ zm`kwJkjAwbK>ed0bI>ZV~ji5Lxmq)Fa%N_vzmoXZ@mG z(e7wZOhim%OjJyCOiWB{Ok7NSbg!5`(XH<274GPj?&z!C(W~6i*SMosyQ8ml$E@4RvA7bNfL&m{ystZ7J_HaxA(Lzu;ch+j;IlFERU%+K zb*BjEd5)vDg3%>vJu}^^A7F&bw!k3%v4o+jgdxmQ&-e%>%s3?sW`^z*W{^`awqA#7 zoC0hg<|STPf><{uJXtN+cFaE=0qSxD&V$EtIl|a**CTK&#KqYYG9jv8;+VT7#GEYQ zTm?%2<1Lu*BaVr^UcuFbNVFc1X6EiCOt7y@$c7rgGsOEyQ&}P#PmkA$V^F?Fh>7Wl@ELX6~rE;qGs%Y|v!$ z+is-CgXlZLTs#AjCJqmb!Gw4ar6`z1hzCrbf>aA2zEHtS6y~L*A;wE!H*S;z*r^y`wD)d;C==BLl(yW zRlyjHHR3NS_=$o`F%}tqqk^3ZO0(_=UyU)#_)Q89z*r`pqu~7teoTnG24Kvy{KE;c zAR0?J1#2flEQCr3^Pr|ih=r1H(O_e+^+p@VP?EOv(3PbvJ#-yua1PBR_2keraZejc2s4B@kq{Gju*(V#P&lR*ANH}&8-wVs1zoifuf6Nwk$qVOdA^DRpct=k`*@B5(B`RZl~#qTrFtx@@zAedi$hM%AA zUZME4g03s|^0~oJj!|SDir=?gMip=s2&jJ>*;uNPh3*r^hI~q6w3pmY=wGe}%{7*9N){ zgppseA|gMWfNiL&zr&{?S9U9RO7weBSKHhrCp? zgi~A%Qf17co@cP?;)KIOWYwTxJlfc!lh>n@=hsc^(aF<#c2c#kM<=gGCr?@!NVk=H zdUWy{(|dIC0#2(RNhhnzgwDbC!_LqjiG4sSt%mmf^3U9`x|2JJ+L= z=jg?U(!UE8)}xabT1m~Eg9FBF$VpmLA4xGy(}dQiv+bs6rM@1WJimnpUExZx&otWd ze?=!xZP#?aLY~U#$I-^qdxJ++#WQxRLg?XfCoF#={;3c7*fJ0EAwMpvx2vD4zdOlw zg6l-rU{|s$>_>buH61?~g>u~2(;rV5PrB>q339<7mbM|DyS7ZLH(6IuqSHKr`RVW$c+8D%(w(Iv4H&0(oQv!0U@8mtT90O}HG9H1+lXrycAW3D3;X}i z9cP@#Fx-Jd^9+nT&gBNq1BXitoIB2!1mNFu$JuU{o^9tIQ*e&GHf=4zzgyg63eInr zt;ZBxk105Fe@O54_zkoKg!Gt#^S>ALn1b_fhMBvFJ*MCqyKIV%8`nLi;A~TXp|`Mm zww-&nouzT~^uzY3d$yf>ww-%S!AU#UdhYBo1!vlP4A{91xru(bv9>Of=?d2y=HD|} zpozC5G5No{?QHMa{8)R>c5XlB2DI8L?BXu8e+TRT#jWUDj7>o84c?0W7505=yRa3_ zE!?hbMdyP~Z$C3n?GN6HF0^-NwOG#fc<@$qIJ)4i=wLd{ICv|XbfLDQD;gT=8l02Q z#@Xiy`o=JOOCw#oq*Ptj`0pJ zxf}7n@W!wl-DVOVI5Y#W4XQdBfV@#_4&V;pV--Fh(1*`4!xermU>5qDjmODT**7BI zQt{=0j{%>e@G8LlM*3Rd1F%)D;~Rl51g`UAS6T%;1(5Pkwcs(}mcmy8zG=i?3;ZkK zwmebt%MjJ>G~R~zB%I6F_#MDc18xD5|9ZehM*L5Kw*uGlYy|$8fjBn!;ZMOn^>Op2A-Nq?(;h{|4}0_*7=8_zu9a z2L5~CGYtF#;MKsVDEdDEZU(N)^9k?|fou8q03Y7VkN+KbHE>P;CGd9OnqMdIIgmFC zkmdgt@I%DsD%|Bl`$BI>(?G zcve4ue#?QE1D~Vhza02e2EGD#1Rg~?KdK~W08di%Hvpdoe7M5ffL9whZ2mdwc|I`$pLsTG1tKPO?3fqs$<(ON?Z_x zmjKT&;(frg47?sV)wp%~7T~8Dcq{Nc178Dtih;KQpJw3efX^`S`+?6f@JE5qH}I!` zFEsFNz!w=fZvZSY@ZSM1H}Lm?`waXe;ME4c7kIsae+j(Fz`q6FV&IWzo68Nn5Aaq4 zKOXoh1Gj*$G4RpAZ#3{s;M(z%h zLqztG{^&2qsMRGGoZ&vM^BTf4ipTLMJsI-9#4{NzLpA2KF@k}+Ism3$ac%~Z9 zRE&g?EBs?Bm$yq3|vpHXv0Z&M+fGkTp00p~z{&cl@yb3?z+@U}+t3P#ab zTaU{Pn<@paqA>4J1S((bdej_yt{&vAial2k&M)q{da&o}LHo*NrO~8sD+@fE(xc|s zqvqI^I}O!mp@6R~T~=89eyOyg;txyRqvq&*b_-BVw6&bgV{H0HuP!&MZlE4DM|tO| z|74eO>f(p0DgMy(J!+0UR}bPU!}PE>3v$%+NK9CQo~sA-1gcNPYutZuB;XO%bM;`) z)r0wS|F5Vy%KgjkKWHMe`EgE|*hc`4dbGsZxD9cpq`0`ex@vK8WmR=WF>bssYpANn z6{}(#HmvN3=IZL=>bkO0#5XqA^ZHsD$&IiE+-F|ZP+=9%vG=knt4o(Oj$K|=-sEc( zolg%Gyn#>bzj@_2Z;G_&FUC&WUS2T!>(=^+0hB*FR&{eEC$%+4(0-Ose^sf`s~3L z2m2D(G6(w{Sd)YO1z3ZF{SjEbgZ(S8S_kU@R_$P~0bA-|F9P#9*e`)qI@nXd${p^B4)#-ES36icuvHFr3$SY(?0R6U9qejg*DCDt4z!8#FN6O&<*$d|t)y5A ze}wXv!yl#m7s4N-{0rfaQ~tT|_fq~D@b^)EFZ>D0p9g<`<(~xq0Oikuf1vWG!Jnl3 zDew%RQm z0DQIGzrNLuU$`Y_P-NPU{kOIjo^a@Xo%U~ozaCS;gPU^N2G*(I-(_v>xh*wsv}K8 zcSro#h+T)K>$2PRGHvTHFGF0Lw|%xhk2Q!JQMMo0W=*pE-vPVHH@Rrew8FVosx{wN zVKr7%SClnXlw0Zz*}`4PwRKHa>9W$Q>e9v470_|l^aZ8mR#k0%bCXqH+E7|kf$Pf~ zt)@Dwvbk2?p$&N*S}&4=D`HEl`Os*puxcu5>Tsv6pQcFiDlcs+waV&hn@X!{8^M2B zX?0aOawspas$F80)*{bFtD$146q8lrZ*KBIb-M}@@z(E3Tg(((jc(-^=1;L|>hSCv?azaCMByr0nka`7Z>&|Z#9CZY zR@&THVO2F*%S#)r%7%)Hl+hLCqHyvYRPNC$%cf%ni<>JeaTPrHH`UcyjWwt;*4*-j zDpXrj9m;Ie&PCyH?L6wWthr%XMNmWe`88H8sV$|lglr}hW~OWj-7@}q(D73% zYAYJ-3PQy;pbhG3EbwTq7;7~)m-#FdH>IN9S5X79>e1Fk6_<=vRq5nWq#LrKY8hJ} z6de?(Q~Cc!BKrx%2X^qO*1Ss#@gOl8P=}Q`&^~uxS?5 zszn=W5G`Qgif=u5N~@RDp{x07G%Z$fvdu_WU)tEXysiOVuC#Vk6FR+BQB&VUC4HOk z)T(6_wHCf%9-gAS4!f{&GQkwE9Hnl+P-9UumNc z)st>WTvk`JxC&hyU00_+dgIPH6HOAn>kAn_|B`ylR8<&*O=Uhg%uAb^SYi%HC4sdZ zm4%tfDx5q8HP8Mm(;i&}n{F=pL%Kb<59>FSF}SIgVV;#GMOhiIhZdWssZ{nuIXKxS zj6W0MPMfk^1#CW?3Nc3n7mFp( zkAR)Z@wLm$4X#r$^621T~>2>RU@CH zc*3IpGr;LDEN{S6?Vkdxni|zSN0F;58u4i0Z0Jl3XeaXO%5%o1`+g5wJMFwWJnT6J z_4Bg4Sx#6>0-h74vSeB=c0%=Z#mM0-BBye^V)ADDQH^|_RF%WToK@zlD7(lhkLm>K zL1ER^>nD-TERfEabq*)AWhcKmXHK3sY@CI0R8<-HZsO`jJ&xI4{&|Y+ zz`3lNN~)L%>YA6}8RXAHJtb9@aISY&Kq`#S>)O;yD;nw=#lq~2iE^ZeoAk)|C=;LJ z;a?QYE}B9qn`dG3t#$@Av28)9-ZMuM7V%d5Bu!P>}b;vDGj zX)2#!K5AC7uz;*#D&(w2DeBZngJ*YDDb_Q_L=~2{3!^rGcP&<-VL2NzV2#-&I{#=4 z6xUwM1eOac!irkX%V7oZ)0_2=R^_w9oRf7`);443x&g^_{rMM2{+datt12IDx3e>C zAA!EnDzB3rS3c3wtdz!z3TsiBHEELCB`FL~ zjL67Z$ok1IoEP*U)~nLsIQe>Gzcne6{CTs+A@OX?G$??KUygSYzEm}Gjz#B?Br*m| z!{#zB<-ylZCjq-BUpl}*_9Z=9?Nz!%TgVMROLA{&xP;6x7nk$Jt){9LBLY){EfgzX zKV$tR5rXfdI$wx^ajfX=*@AC9cr|cxcao|!Q}}M@pBT{l*z{P=vy&;Buq!eZUtqr+ zISpeMhs!6H2SjP(>`FAMN)+VJE6mBVYuT969VQ%O4o#7IRVnk~wH7bKtP1=gohT@p zI%@%!^7(l7%F3)O!%Cq6y>_{e3x53qAnSp3t>i*I;|&xP$Vc<&!ursm#cXT8zM*+_ z!vx63wkxk%f|pPG?ZL>0GxgD5DgAPh-tM7zwl#Ayx7Rtf6-%(h#(O5p)lkvcT#ZQ{ z(o|O?yjndhS&zDWhx3tZp7N??RdSw0N8r1u!4CrpyeXnNUHPhJ>CA+r0Hc2V8?HF38SlmS6OA=nv1Jf82q}{EN zh22{N>DZ*`54>B&QlH(Oy5MpH)0n;JU`yJswZaY$TuTMctT3_X@+7&1{kIV1>8^`a z$Fs7Oqe4V};-#x1uZdXgxz>G?%X5=E@v?$M@zTq${N}AGW=si^xU1CtjacSM2goz? zVy(Jc_j>y(8*ziWrtC(rr}4Xg_C1f#OA>L&EDbOl2luH2!+R5_6C#rJmks6EO2Uy) zWFQ16hfQ`ya z+0b-(hVTR-ULqWXdl?A_3$dH?DW>I6y?*%p*!2!{$Wk}w&HEQG@_ zpAZhmdmiBk+z&`N%2ou*PQiUh#4#?Yyplaeh&u^S!99_LV}*EvFjYuJplnqBTg20G z-z6b5iT+BMiFzVLN8|mGPyi5dXd~zVh=GLA3{57Sfc7KI#r>9q6H#A;lkg5fcq-&0 zLXx}H9?M3|ok3;8tpAemM zH{++_o=z3sslsE>m*Ou%`vQ`F5MVYs7w?(OJ`-{i&Okd8VtrOXI136rfblhGZ^BwA z=n!JFvYfCU^-Op%`XgZj6le$=p(sO$PI@C@vke-K^{1uDWTp!i03B^1gCuR{MNY{fm1ge#y}MYt0EhVW`AwxQ3*uR>V?S>6Of z)K4-X>t`h35QI}f%01gwjB?Mh6{6f{*@{r^dA0(Sd%mssuaO7TMD;l|@1jenK7c~CQIgAICO4+Tw$kr$n=rE8|UaL(RdCMN= z9+Xzirsy!3dxSuT;oQSp+Tsb(VR{jw!}KOZhr!$<1UgJ#LUfn}LUb6+LGrdU%t26v zvTfZ`9dQ70beQ7^(P0J>qQe|d*lKIr33Qkfh@-<`4iW+#=0rkt7|cboFqn&EVTKSQ z(~}87WD$-OVkqG_bwSx_^8QMBefe;P&s8_4Um!_kWnfN{m4G=(Rs!ZESqYevWF?$J zh)Nhsh)PH$L?vKOl9iB7h)T#HMB$OOymT{@Fj3vSj>2aVN8z&xQTQA}6n+9>5;`~` z3O|t$g`Y%-LZ3>ALZc}1lFri!QRtr#TJlnOS?E0C$#@D94#Px2h(b>$9D#vCh{6^U zqOe{<6m}{h3X8EP1PWV3h{9qHl7&5!5QUvVh{Db!L}6zUqL8x*$78?|qL611qL8R+ zSxAgkS;+Z>DC7b{6!L6B6!IKG6mlUU3U@9c3U?mi8A6;-m}hIevT$fRS-1-cQMh74 z6t092g)1dQ;T993P-TQDOgSM6Q$dKrR1%^vO9)XIA0Y}~MTkNzB}AbvB1EC82~n6D zLKLQ!5QV8DL}BU)QJ9MfQJ4lo6sD07g=r#0VVVgS$svTNjvPX=5G@QZkwZup;!@%$ z#ASpi#N~u2#1(`n#Fd07#8reSL@Qww{{=cUNl52HsKlRVl2(=uQ5Ly4zEe~HTt})b3cjnalDaE7roqq zwljrMEIPG1g=m4Z^$@O1C zs>29Z$!{a*xOgEy-A3g1HhyL~KE&8xfv{k=8v!Q23otiu@kD<86fyb5 zEh(!p?64f&5=-W|%!yeR-O+EMT#bnX&auQYj-ns)EtLF@Ez%5=D&NN<%l~FeEP+Gi zz#&Y#(vk%pW2mqw`8b#`BqQw}JB+Kw3@DIe#PKEkM#Q24vf_ zFOXj);AiL*NfM8eowdWjTM#ZV*R-PbnEq;@8OH%f2E;kGICacLyc_uK@c#mST38@{ z4{%z((CIe-&jqgYdl@OI!j{chl`2L352KBp^Ok+z^1>UV*gJRs12~SK(Kn z`1MEK{|3LWRQ$17uHXau=yoe;_JCFoX!Jl@Wf0g$g*CGBiWcd^R}Mn8vntA(1o#%? zD{ryAF-@!nyXB&48U9p4c$khK|M63S)uoM1Sweq^7|p{3!}}m<->0Y}*4z zGPDq2ffM_#V8%79Z5BnRo!2_f+s9}u54u)L?GgxN{W@fO?66Qbx z!gZeGkc&YN^Bp#KSdj<_*SXU6gGsNmr6~wA+{rhvtT6lGSfrq>2qOt>fT*kk3k-`O zLG~UFx9&j04pU|n6%@}YoI8KoT%09D3syCu(AwZbb#-I4i8MF}K4O+t2cua5(e;-& z-K4AvC+`}HdEPKMtg5!M4iR-V#qvNQ> z^If!2p%b!)m*ONP6b0ldvVaH~QjF6@7!FGUVk%K1jlRGjvlL{@N(-RC3DwHtCVU79 z3JoX;Q$qW*p~+ul2B|{y+!S6kxv*G%$1a|eKYxDV+*zmN6ZDkg;+X}7_%9K4Eu6d* zg~5ndmr2i=J$HW5tl10Zn{=k4m?oSt`lX7^ zuaso+%y~ugipkY~L5o&S^M~|Y+2XXyyq+stdai6Sb=?DuU`XxFfRLUmTY9c+De_lA zNQ($PSGM$A*-~0|5w9?=ZZ59~Pyr9wVYFrafIDUNw9|8COV5=pJy*7bm~z!?RL@P} z0TWE9Tfswx_1qNRb5nRzV|ve(E%l2ykrYEcwX$kSn$Jp2Ew6xTVmZ{*s-SsSI7!Ak zFG*>Oo2#nJ7ugy(AaEj#xAR3s`EwUx53I)Kom$tpNI&-_Gg#GG1gkoWu(^^}ZlzXt zdnP}M`3#n(?r6p{NW{J4ZZ@5vjAn?@N!zIsUO#pAS1(;mU+SLyQ&(?Z=@nLFn;7ca zB$DI3y}Uzqh&I=w3CXU9=h%idQu3f|@7h$*a!+SOLjQ<@y{^)gE%|%hLtkuxKk}Z= zSj%;Z9ez(|oW+=XI^!+GMYt}_yHrHv?RAyh)7d8h(7LCyZ$kcF5q(c*zl3`_6GUtT zFvRv(v5Ab0iaU@e;tuR^?bwsBWaplQLYx5_wsVgdwgbP}`y*na_PfM}eR=(6?{!sK z-qGGOl2M*R%VNBHf3qxVa@@XGMgHD%qRV5Le#+jLo37itAaci^jKbM_eKF4+aP|G; z2W~5F-wv1SK%RTYxVQI+CA;>BLU+mu|K>Un)60Dz#uIm7nyX;Qu07UutM{%7DZ@`P5IY<6V`X1c0L{9jqx7m9pZH*kCU|*E!-U~ zRS7BXj=KGc;)`vT44vq;;he3mVVRKM#*(&L-ff?Kk@wxFUu;X=b6|E~@2bt6mqn~Q z4u($px?THTbnV)cF>TkLgenp1YKz+6H_r0rdry;P&x!T!ja`;8Ie+g7{eHX0?TTo3 ztrPopM!^t(5c^(t506DDT^W-0y*(MjrtFPrD#=^1H>qFiUU$Tby`GqVN2>SsBn$%{ z6@8$OKv=A3>pM!c<0KsNQhCOQ&vSTeL_6|QdA{Lh9)Y=r&yl%xXNg36-jJ(?*k!t7 z7t4?<>msE-AGL4Si%Eh2X&X6sb(op2h z(CMUKrE9pRGrldOPfBA(FJEH@(=`6Q@w-p$u@>pQ-8$=tBjq+~# zY^I1j_}sEh2NGh|zVdQsYrn{Y8Re+kX4M=R<7ZiWvLJt~{^%;fQ2OduCalrygm}oZM2D zH(C0whVN?W`!#&Ot`{fG9rBsM2lGf<t(SLw!D-vu2W=?0%iHgr5BAK- z7DJOxsLFr1AnqO4`|SnM@AMtHe4O9qP4fjpdE)Xovg*I$bAD z%iDUu6&us(ia&@x6e(*mKB28;Q=;?%i|X4pd%uWd zc&rTTBmei7|9i>*@ooLuBd#Ih~fK5?t z30Ng0ZHiqN(H84t3bAiRf~T!dd+&8P0%3$FgyaDZe#c5X*V#^)7i?jUEWIu5M@N*_mdRzvB&19ppCfsHVaRjA%9!=z zd`XY0`h`UES3;hL{rHTPv8rBVY5MtPKO;!?2}hNE_z#xdtjj|yv}CB|{^NW@M<+dc z!aJ5xy1$zg3F3g|&hTwGV7V++-n=azeuVYC@R#=YD+WCL?|WMEc8I*a^IH(6jH(t&rmj}%z)4b;zv&p&MY3g~|Qcu60 zORnwoY@WUMgp%Bg^Syw1EqK<>-W!`I`aE~>wVlyz_Q=d_@IR+pq+g|PxVAGM&*|Jo z%o>T%9zAx&(Ry@haId%<<1fjT zJk;y9*zb$?irC{i{?Iuya(k*3L+ZEa@^D0LsS zpGmqG>Sq%BA)iWk8nv-6uI6Mos_NqzLl}%Bxh!H;r+vI z2mie3kBw>1%ZO=7yx7K{I}ZGG|o z`2$gX`?ekW`frc*Z_gXtAI}SMa7TRto*g9_{o10zF}kgPyC>z)*DpSnxH;$fUvESI5pK*f5JSxiLLeMtCLQ|8G zf~jn0@c=GdUak#GhTE{U-i8~hZMb8a4R_DCq4>y#)_>bD?+-RCdD(`ox7cvQS{v@* z0a&=*Puo!c$MG>?{&aXa_}!sBx2~>e99*;X=G&KKTpbgPhfDWkh4YA{`Qv#yp25@3 zEUR%OP)8p#eEqxUfA!5<|Mv4gzTUa!m=hzxZHdVjbgqi}%YwGM&pR}?>XD_F-jO?R z_7(Si@@voA4e{8#^>;iEtQ;O+0j=l|t2JfE9~AIFvc!7H8FR`mZ+ z_lI$rBRD>Oc5dv;zc@H@{pyDvo_AczU;DzgMRULC^eWLD$@T`={;*cc&p@@2X6f`<;ATRKk;45u@=7I z>LD)O8R}LHf*nMe3e?Q=f`IWZ~zT)Pk=RLOS zk;oGth@ZGL?y-M4ec|p~rk-)`H9sUhWi8D?GrNhcug9MzKFi-1_03Dyju~~% zHTMqQ``~~4Vb$VmZhNZNeIMO@#q!g|&M7aCc&zlEq*te(F*WJqDL175dH5gR{9shV zV?Y1+>>rYz!uCx#xbE=*_s##?@F#0WWX^o<<;t?OFMj#t?5n4y^nGbg{W<^r;pjiD zpL%lhD;4?gzWc$h*Y-?0;b%A9F!hWL`xpO%>EFI`jc@Ruho3erW8ir=fB2t=PTF(d z`+t3E>VMS!ztIJxRyPZ*J<&{p-%YBKoVVCOj}^RlybIlWzQQ`(Jjv*4%#o zwh;?SXse#JHQ!jHdw>zgYx zN^`C{>70$97M}NL?bLV2exA7P;G`u_^gn0YpJpx^^W~`DmOnW5%k#FK^58d5o&VbG z7cz(b?B8zxX3u$__8&Agr~liZ-g|2FHD{mr(e%ge|Mrd2yI+3%(0B3Qc*lHo+Q4-k zbACJiiR*vU_>VI;^x5@g|8s_CrypF~>X|s|(VM<{cVY8@{r|OY_(QKQY|PodCCNSW zxh2yFj5wj_rq%;fZ=Ue{f^9XUN^h+A@a3z1w|LU<*x7Gx?43Qn^TUIchei(`@yqAV zzWLYhEPL<|^ZH)@U%x5L+4^wVQwLspqw$80U9Ud0Zrw%uN1osQ^t;z@Jz?|hAH4jB ztc$mOK4?yI{h!~gUiNM6TYYC8@B8ha*3A25>Vgv|jlW{M_n})~y0EY)@w>E5Uu>Md zvhwePZ`%Co)9?Q7ygdijv%Wk~^l>}?-B2UKpT`veV;;_*$K`~3YywH+%5@<%|GD$r z0)N2rfQ6y4*%`!cWE{g(2^}ys|3iMrxFf=~5XI>(`!$Xx6!Ku#D#6cM_#+ z$|cA^Wm;jDQga=mOe-u>YP7SJ+O4HbC}8has;|yarV+4+fF`0;;Rh?J8a{~dEUEo3 z_316*^OQ*gyrRjsIQ$#IaHtiICIr8+gfo??f|1HpL9x`uBleCHB^2vs8U zzko197FEVCR=C_KLAoWxGnHyS5?2$4JavR6N*6iHuX5kaa8#aLKY;!c;yKb9g;c%2 zQpK+zgpex$GrMqb)c)wUq9WmU{I(W|4bja(CPo#%R3hssZEC;^FksFKL)UWwAQIDpgf3$RqR zSQ)7b2rL1Wdzg|A1?tZFlH(lt(NPt-AaU8M*lS`|M_(JYCi1$7>peH1#tKx8VKOKO zog0a|Qzo+wsUCQQHXNlS!c5ei5}~U&E(*THhQm8mO9>*}m?vcwrF5@AX0v^TdV z)zlEan#L)S@F43>kLu8~varROAGQNT&+ElyD?@QM-;xyLKv@D%M% z;p7TLiH8RwguBdd>8~KMzB2JLbo7G6%cM|Pf5`Ed)xAO`DS-$E;Fq6xK6}0`ghV`H#awHjS`Eh&;ebjN5ABSjgT)h=uS* zLe%pUj0gS_akS6-fHXq+F(HQ5UkOhTVm~2<-PeRLH1I8997Y;?7>!cK5cY$4GeXo+ zGGH7QzA3~L@j^lz3+@@jkH?~vuorA+5hh^4&UnaoD@3H5OV$sFdJol zkvRCjN*wuhDEvL*$nUSjk>6Lukxx`CAoA%C$od&hi2BJQME&FeQm$FVk^hAXE+s_% zO@zq*Qb6W^C2{1xia7GPQQ@}|NB;K{NB*0MBmWl(k^fr^NB$oWM}GT>Lym71J^*z} zJXygOLiC5#3f`*V^9sJA;M)q0MBB)INr-YZDcDMga$HY{a3&*MaCy7csU{Z`!j&7zn6%koE-|j&v1;b4~e5(9|KmNiT*$w^6w`^ z`M(Ba`M)6!I@&%Vlr~pDFI?^b7a?sv#snIDbYq_b4*LY?fzpH@MnA@&+Al~}`vt?* ze!)l#6UL_~vsYt~CGoLpA0bWcBV?$31U%Uxm7FtCV)?#{nw9Uh{Rs1E+5--mqorh~ z7_l-_%z!d8lvHj$pr+)LQa(6Aj1espqb1~Kh1~K0^TEW?lqV5FxFLjSijxVE$RY%j zp@d+HB1&P05u)%Ysx0gXLUd^qS=oD}$M3TI-TGW znv-c~s9@F=>&4_Z0n^q<*+_~=0hXV6Yj*)Mm@X?zG`hDHpyI*9K1iE2;BprQ9R{Ln2NH*yl%4H(OhZYCY;W+Q$kT@L6Ka^`!2e+RUNQK|xgiX{_dwT`@-9S&)b%IlmN5K$pj#0jnT-U?x5wb8 zhe@dN{wL_VQr;`_{PM}UEsT6?L3gz+Qo#RU`4aN|{7zDoq2#kb*A@9T8vIT^0>7s~ z*A@9D6!_&EdIWw`LAN%bq&5;<-ggat!;Zl36VP4L1%6eN{qo6Y1JZ=5ze_;Z(gl78 z41S}IAfIbW*W_CbI^CZ~AA#SUpzBKe4l4BXJH_Dl9Q+=&z0Ke;pu^k1VeVCgnDgIN zpnERDp8xbSh4uF~el8>Rgz3@}un}T=cLSLGE(Bc)61owdZj;FN@RcsBSW@9PwmB|q zLiU853As7BmX%@A+5dC0Z2OwoIk|Q~7c6bI$i<1@(q=p*KW0mtycT&`Wks=l`5*Mg z0*yl*7GN7bqM4~Q7&0omsJXFpNrgzupF1-RH_$ay;bO#!MpXj_Fe^1e95}=Wwci~$ zG}DiuL8JIB!EjNwtzs485z)4-U&iG7u=?Lmgq^8!^ z6)$fntuHRGDqT`rhx>lYpgIe)2B{2?w^-v|lg88MlxAdSjK%-lEdHN3Uivew)Y(+3 zEURxuX1I~EC3R+&7XeK^+|xuRyf3>Vf#KHxcEx9?P(+OVfPG$Yxn} zsoxe;j}a%_>N7=|n^xiZGchY8r+i#aX;w~U#<~Ptc>^^U4l^7e!gESJ)VA8>U2He)S@IkWW9xwTIWv=={2P-%NuKdpeX(U z`~8Knhj>}#l7EIQ0n^I&m#N2yQ;!j+9wScvr;anla7e)%N{5ajoS#vUWszMla;s#hgJ`L$(Cfs_QoSBx9BO?7fK_aSm^vt-Z-mZSG z{_Z5#39b`egI&q4u`YgSz&@UE^@Ydnj&Q}e^ zwy48~feu^4j??~pgs{xIETioGSBH*qbaV0R3Y|~UF%4ZXKReXkzc=@|Nq3fxG@!4h zw5+(iVet~R-F&pY=5d)BIpgIX^wDp1`csO`$hp-i<$LWl+qXLXlXjeq`w(zbR7JIU zL4qA{ls#&h$Pp>6vY~Vd?;13${p9I7w$s+|kQD(a+@n6~t=)o0@aftKZAQUAM9a_c@7RkVQ z?XB&i#3=#sL*(s9pBwR$1L7@t3sr4V;b}ST zJowP_kb!fic_s)qZ$Dx@Z$HwG_+NtXgF$$#Q#ShuiWP+C1mQD-@bVzM8TjAuOG4hf zt>#AfnI-!eao+Azj2}Op6Mq4I-rluY;eQ1FukdqS^AqP3g^vav ziC=`m3*l#-X`Hw7JYe9r0e{rMw*u#*;6|1H7{BH?6JOX5IvnPKcc_dTCx+vSIY!_T z9dq*F{VXy#@SYal!6JhLuW1>F%VlJ6Ap1;QA|rzXZ)nNHT`@8^=t>%$Wzdy0I?LcI zX>^__gem!WooVouG&%fa; zoabnuSpMLEt6%)V4Y*3CuEr5LIHGuY6)vK|eN3S!Ab&-uh$93SFK+f6nBe zW;5=YyyU3DNvb2Bya;BQ-bKc|(emiold8+vOJW`q4Z~QymW0k#MW$EP)bp%k!%?Ve z?dP9*0{J_N!=|<@y-WGkSC=+b)-~7<<*@8D6(4^`mdv5VH5Esu3`*7H>~aDLGr5cMHC`wVA@FN`LEGsUSRcL6OCieqqs zV7%w6sQ>tbu0QqR);u;l8fTTU$DtOerw1P#{~p)R{Eu91<7~uq{{=VxtbUwtqt1Tr zQ7^mkOZHE_@}``&_IZ;{euVed&6cmXcc8TPEK*y&gSLw__bAsWVV$zuwjy5OjX2QD zW&2&pyk~&ciru)=!G8;jONADA{XTyxzwe$-A@T;(HZ^_E75w&{{=8jaMd#B4y%FBt z-ji_$47oqI)xKZDZRBl-xIh7Z(qi%?+<9S3BdjlQ%fLYIN4TTlnS-rY-Lu`Q$w=CK zaK}}3`*E{_H~Ib9U+uV9NQ>LaHCFAPYsACtQ(eCNNL2bwtG%+wv>wr@HW4fgjpwYJ_)<*YX|jJxS86 z@IHI6wQdb=t8k0L_has5iHSvspS-`jrhZFFjVr~|v7zRp>NN$?ANX6T<(Fb)^6uVG zMm^~d8?^g%@7BUK+n-l8Io&9Ozuo4_&^(!Y$CQWm#YKzskB#=RQ}HkZTqpn9nBcBTdjr=JSc;u!hvJ8?Wrt;S1+^49}J(;AG*7iKhusMhJN-36UQ^ zbWeutZDi&cW4OLpflLrXc%Cj|*GhP3{w^Jooe{Z$K;Iiz?c z7J7Vlie=UhNBrUS(_0DBt9u0jd&fn;51fuilepdDGq0|pxL7YL2f)nWX)j0>`qb4nn^;w z%1YQ&S_zwMTMU!pVE9OJK+~P#gzTWGE}1vx_U~nX%X5^&k#3ZG2p+6xbrFXL51x@C z4$~N(O(G5toIC|*DR?#^9!w>Kc(7Kh@MS9eUP3T=kP!TyAOziW3V(?Z3xKx>k;ylN z$bYyC5Kop2LWEBz1Roj+C7%*P=0}M1?Sy!6zM$g2QaBbAr=Y|Xb%Vh!Xy9W z8Y+T#j57O!$v%oW+8fVDxg0^1T!!E=#RE#V*&j3so)2=_AiD;-AExOaY%XUXc?3D; zgMv8jWYlK8lHXFHm?955(t0xr_73QR9S1pBIBqctxESRMcBsGrx|h(+&kQC4juoV& zll2CFUt|ztEjx#MSLkXLo#sJ)>oj7(D}(5s z0v$(Cu)6^PvM;Cz3sV*ApYpP;=-6lO#?Pe703FT5k`CQWI?@H_%cb;66>oyzd{=@_ z=i5gShT?ZC=q@oCDSt4(_+&pn@}&#K??ljDYextC59W8j!B2OuQ2d?%U038gWtd++ z&WLoO_?-&6uC&`j2ETzeyO8{z?IOQn7%;j$Fdax2O1|-+>xz6oHTYrZh2{4P&|RhC zO%U83X_!g1e1jEXDEWQ@y30&P${);ctHBRLMY>S@UISfMT+3%2f!{*Vb*27Z zGWem3Nk{oM{?ziD$!8vE^Cu$2Wfp%QR<>ch%kgyAOT>gm1Bb;-#zJQ`1 zvmF%KfZ%?z7vMC){dY2666Z+ zQYS1*Jn#4!-(S22oO#$TO6<~JKo6we4fui+79~D&{EQzc{sH_GCoD=Fa{P=>5>)UR z;0%r^G0^cdevlXeJjn@*5^0W~@q@+bz~?w&QNru^89ziU0Pb_bV9CevGu{$4z_}{5 zU6fen_!*xpt^vNv35yapIex|u7xw_a+X;&@^b#09Qap{gCye-CIex~ch~EOA%KT6*%=pDpmZMz%K!Qw!#+!XPfK%TYx`_ z{5Pn0z9XHBc&>-Y|3To<@bitD_=~_fr}Ozt{6pYe8*%+k{Bz)cfj>jxBGO(9X!#R> zH$z@s-eJH`K>oVCS-{US>cb11bC#w*Hr*5~9KtE3oKc)1&L|#-UnYLzMPqZlJknAQ zGhj<_IHu876$#WU=}}v$si4}5RHC7#jGsja6$1Y>0&NLH+lBLdcvV+)m zh?7yEVA(n?6@$!-G>7p)f@wbE0|m=L@?broV0(D~1SKKr@RXHSSJ#z^N*vB}lt~(W zrJ0#oSgJxfQ=Qc+W>|L4VPWHQ52wo>mub^AHZ_#h)H^I{{0cYF0V=DmtMzAzfWuXd z0)zquwUlac-q7F}QgexPO_$UM(DC4cnNA*LI6O-k`~$U{SZ`2es;enR1yt28F|+l@ z1q&FUd_GD(Gbea@Yg|) zhER{)!~nga9t|Ow@=fotn@D4^>X?0x-9%+PH(ej~4LDn^Rn&UyCKevKf*jqy!*m)9 zJEBKsp|u5n5QhLo!XL&dgzBMR@x!kN6L8+X3mQMiO5dX)=sqWLGA=H@e=>7C) z2py(Q)zDNIs8_>)^oFLEfT5=Ywfc)TWZoqrod}lD=M~S)DxNvvdnP-&Il%zNp&n94 zCD6jo?9mVkSyzW!Wel#dqqkD}|6L6s>^*n8%|zt!qv!u_(sAV=3a*HasGK@kNBFpGy6Rp&diL#Hb~au(h}| zLL_WEQb^3!L(@zO8y8l>w#byIj^6J?r$l!|yb}X|^zK8`>Zh7Nsdq6{B*%OE?67km zynU!oj2_TY;)~f*v~b}*WTzQHJ1{$wLUFU25)!!Z~!wj|#Y zYio(G3OOE{mbq<2iLf%a(O2)J8R&KGg6!Mul+(7H9WrgbOk1yHa-l3@*LR=h`C_Zq zNEr@IbE`NHq_pGCuWFZZ{&Lviw^rG5vsGfe{k(&`4F9vFPS{3`tu|a4y2fkQ8RYBO z;A8E7_vx#?%?175E|Iwo^Og9{ugdi1d)ucb!+&d)c(`q<U5nly5+3AWkVu?9oUsO)YhRI3a%{Q zFy99dn-6 zJJ}nv{m``j(D)LnKU(M^uC}}_AE_SVZcEwfYA=;N#6vBy+o?BY*FenriOLtd&JI!k zElG*5bEa#3{Lmrsi$jNk+xu^;73f%g1*CAqcZ^hz1b* z{}N))-~K|$FNgf{hmUxU)7nQ`kx1d57gqEin4H2B2X{N;pS*g{ZHsX;d^;GD$>ob zzjT23HY&gN$|{amhhrA21C{tviy(Otw-;fVeV|N0iGd%p$?P~nApAfra5_ioKFtuq zB0fjmjfunm$;8i5_i-T+KOl<=sSYF+mH5Gz3RUA&c(%gPGhpoyN0|vv5aLuqA5PK} z&W6EU!V_&x7%C_g5r+`d36UQ^JQD}0RA8E?aCyjQseQ(s@jO_>1Me58_zMY_;2MZBK{7-R3YvpgpfS2M4hU;2~kh?5uy_BCq!W$CPd*LBP@ZT zNJ8*=f)MGSCPd{tLx@U#mJsEZhm=mY4;zT{aS(ywXW;5y!bQ0HnJ{07-w>YHy}APE zK8|C1D%FJ&c-`oivP+|%qV;|hmBNw8N9Nr}<&A^tKUUs6Cn57rP3dB?xun!6CZ@mIvJ_4SJm8xOz@pYHBP)9kv94ZcLw2 z7_3FQQy8;#FeC$7XN(d7%b)HPf#)c-i-5=IA7hmSSYUOh1n7Q_I~zV@vdmAco}PF) z{$G%Ic?qK2X-Xul@w!ta^Fd}mNzDft9&NI7U}4#vLSP^`t`ffd!~hNQ7O6nqGGFPB z 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

KgD|m^gZyQI|eq%w-hOA`%-Y? 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


i6q|@`oQnC+IXlh&%Q%ZJl>D1EmbU9{T1VRy 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 -Pj}gxFQrLz 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�uVXLvI#|y>-^jo| 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%0D$h*S8jOieN&G5}0mh)IX=%oo?Sqzx#N6s0 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 z z&ye_M*OIk(a&@BD71|(9KaAfNCZ!H?Ot-V?Hu(=4reh~~gt6`FAxTEpL+(bydw>5Z zj8OS_m-_28 zew{=V#Y%WoRGM^~M#|wxewr3HA+nE zB~e7AnkZtoglK`By%{fOZ?gE*7xxz={%|=-GeJ(qU;vN7A-bh`U#FBC-H#;48du*r zI?m}!Xs*F9ZQkHGv1!rR`q=0gqwsNL(8QbUOaAxv$4Lpx&!N3|%Wda#Lfaqboj0sr z=zs93?Ec2EM{!r=$je-E|6!uoT{$VC!I<~5Q{5AJ_TBxZ%u!=sdFEiP-dOi}ij=tN z{vm0``=2Ao4X z7RBf>!o_0CcMQtXe!|GwFC{%h6nZdE&Gleq59^M6TON0BmhP8G_q#xKTCSmfdNj(+ z$DlC@Sj8fYV(}eO6pN!oQCxl_nvcOHI?5D*#h}s1q_yVB0i=L)uxAc_O-Vc_&*q9`UVq&gbE2NFffy!cJ?I#URvaLJVTjn`C$;BZHX9%Oj~3uYds~w@C1g%+in@mXI!*fja{~sWW#$= zTzu&F>#lg)t+BsIji<slyb{ zuMaaas^Rzn9M8uz0(=fYf|rq7y;}(GTN_7id&!MuaJgHS4I6*~#(MaOG5 z8C~xWNEQ)_$utfXI&*AknMTiTr zV^l&4pMAFKT|N(fx&%GcffUlr}UXh0G0-i*4nGw?i9e zeDhPv1f%tn)O(EboS}*OA~Y$~4q|^FI}>zYg=k+1pAEbf85l45=Y!5g`Ae6$60{x| zQ;FO^wN9IWO?^v&JAvJj-vmkvttMVg&F&X)Kqce~bWmDgoh9)Vpnl*f5?>37qRRhc z?U&}Y*+bx)5ikfN!YQDXfUThKf$x_1F3=;uW(0T8ta}TZ1XJJ<2y6z14zAz{&_Yxc zlz)z&0i6zvy2f!Q=;aFkRp8CQW(3{@ZddR-z-?#|Onv()#q?0BC`F%uz6K9wiarNE z1f0$JPWnEBB_e`_68``?9T=6HN9ZTeZNO%h{YrcUXl5B+NcV7G`c_B+Gj zWq6Pd^c51jNAXYw{F{QY8p+(Szp0S+N>2ecBe(##0@yS$mO0tW$WK#$IdC)hA_2OS z)xe<>Mb}J09q@hyF9Y`Doow<~0k;C10bUHeRl%15?*=w4bT#m6z-9zC0Dle4_30?3 zH^ad-B^mLG~ z!V9r3s!b*wwkitog(5pNJ*@B);P@Hg6cz%Ho*A|PZJ-~oU@!12U^78J;A&vgLbHI6 zK%X1oa|@gaheXB0xxo8?%@q9wI2SRFmGV`g5LvfQSgVr zt>?i0rh;xb6ryKf2Ji)8q`)Hs_y*XGp1R5Z0obG9pMbXln-=&L_z4AT=zN{KFzi1P z_>jIN>>&;genlVwczi{ep9y^yawC~Z2Er-cylJn>mo((z`>8?nJIW5xSb0K{zt&C0V51RfC)(FFf5z^iAXHIxBf0eq4NJOoVgw*&tN7NG7p;b(y95f*T< z_ka^A|3#^Eu^-_;br#{HOt@GqQs-9q!-1EKK;52wVjG7CIzXO8!m2`Uh@tXafn{4Tm^nL9`Tj0XP+yB1HTTfPa|A+Y*j{1fB+k z3nV|rB^HGfWs1{)AIEPh1LS`c@Y}$HB`$SQ{gV&vckn{Md}#l|90k*~@R`7{uzZ|s zsf8cOg1{L3hWITC-;U!yt^&TpWJBKuS2%oTX9?^M2vB~B$H{2=%6#mYZ+;T^?+X8U z3qP5?3H-Iff6u~CWuF5dQuyEL7J)RLqA9YVP>RU{(-r(H@F!wz8kn+!4Cm%3Sqqe zpM-bPWCz=pl*6$=^`gi3f$Uht>*C<^iaD>VVcO@>FX~jPmbfCqp2p2owW1 zD|jMsi-M;EuT}6o;8q1M1b#@tRlw$B$2tgESn{d-Mz6ktmg?~9P z?qv+gUk^M59TxF8nE`A*cI;ZF09F2d;M1pS)c?TaWbGCY1>EG+LlKXYb%0;!4&&D? z@;;R5$=qbrrxOp_0r0<5@INi`Q+WU?|4Z;|M}++!B6%}>J9h0KgG2Ag zumG7%#Zl-e&=+9hak2#JIE)J8A;1m=j{tTlI1jk{q_F&{z-IU;6f<~?Re_lh_)_t( z0N8x&*rr;xKqLJ$0GgiF=2sj2$+u@oByehsQe$mrw^>e<7B^Bj#kKCEDgB|_)%2&w#);D4{kw_4=S z*VzU*_$P!FQh+Mn0)D;1zZ*EH;D>>m75p@Ci-Pw8uT}8hfLlWt@Be?m;qs7!lYIuf zUcui0U#H+7f!h@PJMbn2NA@!lLrv`k+#)JJ3H*wQQik6DZi|O5|$^6s`yOs9g>goj|m7kv`h_qsI>%8#RE|JE5QG|BClKIYj^@^ z`d&QfW`m#T3*#+ec^xKN!UIqRc0#~CE$o3(pyJ2D&sO-)1LrFEufV$%+y!htc6>)f zge~~aM0qRj{OS!y~2+O_4g=`m$E^?vD3{UoNSnd-^j)QrzreVlTYE> zaU9fg{wswQTXJa7BIx)WY0oA{`4?@Mfext+wmzC<%ufr4+#9Gcp!x; z{)`mN3M>2u*rDJbftwZlJITw(&MxNRHP4diCkw=(&%STADdJ?wp*}oi5e6!V0IiUS z$H_*3zu=58&a=p`;{mArN#OexdD7?C6^GLyP_N*#fP)Gy2X0ny0JufLO~7jvd@->3 z*zwgISy<&?55E5K98&~kz~bQwo?=?#5s#DI4}SLCFy3X6zlsN-^7n#YsL21#B7Zge zC>~}VrwIJpB5*B_02YZt5%>xGb_E}^$Y0MRpz`|N*;aZCagIk2w za>e6hw}HP&!S`C^w{VN7{3pTp&ky_8J1ib0z>kCkoNT9s|1jGF{Di`P$-;k>y$jr_@ISHecd`EfziRU7{r|H? z;Bh|7^YTz>z{!JEs2fG`%R^dM!=F|IsFMA#i^@;#hBNhJ@{Gh_` z0&Z6DM`4A~_YyDlD*qt(YZUpPLh`8pc6>n{k%-~4BG4b$eC+J6Y#4C6!XIhjzs^d5 zpHujgE&RW+`M@tL{0mGzy?^XDw{|HU{&JQXq?4^O1vvk0b`|hl3V)-8-^I2A?@;&; zTKMm>XMrD5_^(JlfB)I>#qvMk(5?u4W>N4@_5<*@3jY@i{{t2^2>k_xp8#w=c6?Ws z1$ge| zC1Gw}5l99$A3OVjjR3w*;pbWSJ!}&2CWU{xh5sWvANUT1UjuB0j|lw4R>0vtML-8O zA3OV*Z2*2q;cv0bWcR{8gXf2$&| z@3MG^)Aj;yQw08I;rG`*0!}|KY$1w}ivJD1SKa8u2(;D)?_IILjhGhzFqZ3&3BnFzlc7g)!d$6Clu{2u!mmOy&wz{yE?$VxiHD zP^CpaRa-{-6g~y0;)}pvYx3#+e+3*`O$Xo&z?Um{3-Edc-wk}7f*%HcPQgzDn~xnQ za#1Z%`F{n!po;g?}=)Fz52{vDW(v1UeNDZ(BT! z(LMuitqCh6ldAX|@Gn>RKLW2;@bAFaDL8U4dfC7td{|%r95yKeX~3HmJREqdg2w=F zQ*bHpJqn%-yhFjWfge)vIl%2TX84FeB^=BLYc@R3As`ZVO5s1s`7-@jg3&tQFjoQ!vEaDKUMn?_&SCEyM;eNi%UZv zQ{g8AhthAyY5F7J@PHzaM*{M}iiI`_IBALLf(;24{$%ZZ;CzK&W8qKbg^srSiwCC< zfG^WeO>Go^y_#$~!{thgf@rqIf@Au~i>dG>3xoz*@2BS*&5BQov|yc8O|&?$%0Bo> zId5Ys{7Lo+Oguxb`2?!; z)rW6Rx10Roa>9dSvi~P?ip3N-xyTye+f%JLLN+|6d{-a-km*+WXZs}ZqWNJyh0ks~ zH|#*aZt9bV2hXzdC!J@-=lAh{y)49L1RKl4^1GBWgxMRNyS?BmE^72Yg1?2T$pPEBfHIeelLU_})JFB^8tX|EW3v|J(=1 z4Ux$Kp%i8I!Q=YiGyC8R``}9ztdqi96$iqP_rb69!T;=of9Qjc^}z|DrFoHnQDLm} z6nVoA9G}w%H}t{l`(Qd&)_f=d5B9;&^}&A+Vc4HMd>(QT_?JF7ZkVZF@H6`0v3>CD zK6r5-++t!KdMN^Qey#Zs-qr^{)d#=X2mhxJ?(a6W3H^C}@EnPC5~BcDO9vC*+6TAy z!LRng2NX{wJ%s55lI6gwfT{T>d=2nT z!02mod@t}+^dUPXegXJrG+d)4{uFo%TE1wBdx2LhK=@ASFc9tj>1g>J5_^CPfK3l) z08aq!C;2VF4GT zCoA%_{bD2J(G}zt*a+OD@Sg^r4V)wS{{S8dY|0-7*7FpH{@FP24ka}4ZK%LQ8VzxN(62Kz6#ise-`+9CAAs` zw(QX`rjHON&jijGBR(}Ic`xt=;H}bP<-iZ4>rG$m5`Pu&9JDQk&_TFOhr_`tEIdgM z+kvwblXZ{+VCr0vhmU~Y0;VcN_-9}ZuispW6GtGAfldA?z*nDx*;2`$1AHp@Zi#i; zP`U>S6Q#oyz@Gs_h6ivv@OFT;5q|oz&D?X-A+>eLf|J+s?9QT3Ggn|f^m{>06&jv?2`C#;scXB-v3VaHXJU3 zLy8nQ2wV;YQzW*bM;i(LXo&{{{}ln2NL&E?7V@-R;;F#DqZZLil=NQ!oPY!sO56e* zRmrpD3@&gD9B!U~c^zrO9l)!niZA&|!CSy9V4g*i|243NwqlA+1fU^i$;h&FBbb(1 zBo3dt?2)W=V_T#%+GzcLu=D9LW8CeUUObjfEYB-0;eSi%FLxO0;Xm{E-+cbJfd4Jz ze~b9vV*Xdia|L6$0{*jvD=6U#O1Od&uAqb~DB%i9ikXf8OSpy-;f-q$f4GKHuA!7` zDCHVTxrS1%p_E6Vlq)FZ3QEZ@N#~RIe2@4`O7cCznUv&vNJ+k@NauvKhYaz2t^g+hPb?pl zpU*Yqa}D`C3i&0sBxE-}U7zP3qv=a)>&vSet82=e8_RJG=aObWKNf6ppc&V)*5UN9 zW{#^W>#NFZaq?D^zoxpJU!&`<%*WBp^mY6RnFYv+5K~;1dIEoXRk@WH^5(Cpsw=N* zUXI&r8)|T!ZUEPp3Wbf0b%C1lDlSmHV(C(GkXe;*7B~BbovUlAmah&rmoHvX%YD~0 zSg>ARTOU~BZ!YI|1XpvB(A}uz{G>5TMA&K7^2*?fU^$&lR_<>qZ(d&6&{W&Fd@1)S zF2)tNk(T?#-KgXpm)wE{59Y0_NK{qhas)@$^@0mC<3ilp$`$p^5Q2@Hgg(J(S`lcj zSzKNf2;x#&4o=8kv3%tT{V57@GjLN=&C}sQ@ zY{-Yk*T1^^8>bz@Nh+_MJtofR{BPPo!<*dSVQd(d={9BrJpGMxTSxUXUPy?IGLkN| z^*0(IY%3};CjF9@WW0LX=>EnXaM8vZ2kvzy8)tu*oo;OKjvf@*T+`BAUNY9$duVXd zP_##<2!~SnqtqjR&EgeHP=PC#));5Bj*7D9 z=a(205gSK&enAmVNEwxsoL>;~QV@z(QJ&F%+K?m-#%&#yYR@k!GQ87)YWew&JnI+t37u5@Vy_lp5M} zav7U%d zSl}r&IxZcRG_ipibVE)kT6wr$zzm?!7&eJ4 zkY8j>5=$M_!V#ukv#Eh3?K7AWzgNR18Y zFDNkjrBW0MPk`XE_GKLNoGS(R7hl^(6SYwWqu|^4ZaFOy*v855_BM)57m#{sC6c|`@r52b^WZLrGkgOidGQCw7E@f>Qb z3W|yiPa02i(OBb<@Lpmp8#f42`WMoh*y1N-w1N`jl+!3%3Ja{pFCaq;3lxT89%_CHL(NZNs3H_n z^CNwPEKwM;cVWohg&})~UNXsr)Sd{>p(;>_7NkN%4p-)=2`C6>9`3-gazaV#)5sKH zplF6*ErA7;kuq$np$agFJf%5y)dPxQltOGL1=&r`?Ny^^coa0Xon_2 zCJ{2$@NVa>aK#%wM{az-^76`>%Ef{5r8P@2VlZldbK~5)-_rQG z(51%G5^az%>XEb|bU1X95mTxSH0J)E<}fNsHLotRI=DR0AVzQI`OT_(6~+N4a$gz@ zoY=i-$qC(;W0-5|si~^=V@R8e0dErqk9|3oQ>jVTm@|7wj{8>I3B#g|?g_)( zM)qmLGK|zINYFX=XD&3R&CpIV#=JOefpP1L!*XcQw*&(yWk6TnfY);<3f3WKRehia zHfUcU5rVO5mev?LfqRP4*quGp=$)tX3I(mt(+B(-uuM&OKgIjKhy}uU;H3dm*)a6kgfT9Kh%~Sg%)xZDAEzTv@%e zvZ}m3urv@ZsUZ<_Qlr_AlieYAe55d}4>qDEoq*F4Y(%Eg$?xTQ)#4KgG{ZM$eJ~-^ zOr^|PDMFD57e|^HXk2lEue^ z;m?_ks~UJAI9_M4sg4|Vo*khS!L|HE7QrkE=D_|ek>UBO6BZ8(yS%0WWvQyBT0}`# zi?~%Vh`EeLDQ1ysI6b9;?D#;yv$Vx#IB-AihJb2VZ)FWHTul>- zdKE7Qp;Dl-#Uzx)cWq5`l^=lx`;_(C`V~$7a@2t17??G*XrQ-%($wjV^~bRnuWqhs zDz98w891J&yg-ig_otPJ!VK1+B2#;4^`?U*XD@47f|%LtTY|~2EE`sza2I(9|4o?1 zJQ4ReZJ`#!l-79zA96lEf5WW*@ir7ww5Cp}5*bpvym4vy(rOsoT4lne#jJlqNO+*x zQ;V*~AgX>~jhunTG^T|srhv(`f!aV7%~`8uT5^$$CGgK*DdkPU8neOH#T!mYnX~Oy z1$7jC5i?XkD-X?;Ea;e07Ok~KfZDC&9At)bcb!k{qY>aO+=&`ll#Z3=lzCO-(qMf} zv)OpbRw>+US(7g2miq)x)5yH@Ak3)OgsL8&h_0-s{>D<=VA8k8!P&Ky&6Vohd@bt8 zisjZ|g`k+@KXHW3whoPn-q$a`I_3E0#Pq_a=PgO11T79U9_Qw7Y-&EPi$}s(L#Pb( zW%R|W0XXx7-5Kfegzq!SlW#P|o+qxkB+e)Dsg1X^zu>H}b~vfU=andEZ6-sDAmH|C z;P?c+#TsJD{=^kzNqxCw|5*(Y6+{S~u!0DdTwYPDo?wVFZS;J0^8elW@_%=}obb+< zr}I0r2FvSS=%Sa)+AEgE`Pz1s_c|Eb&$rRH*=OD(Ly9AqtAirkypNE>_et-O zZQ`~HmO6LJy4+mOt$9bdUFJ*JF(PH5Z<4QsM|=F1Gkq}!BN@N$L_->cYL**)FvfLy z*GylYbSc9n7=o9uQ_zWboOb(DzaBZnMmTkFVmNJTWhlUjgH2kLNaZ_ztwc*ITkp|FZtQ z-tldZ9_BgU&f2_(e@o_}LnYNcp$SqD}YDwK*P)?(s0K zjTztg|IzE}L@+jrO82x#Hgun6Jim>scwyH42S_^Vr&F7RychNAI3GHTfR|m|%c`s! z4%B9lDl&Ogw;BISl=yoyp>Ww;ai3D=xjTWlv^#SyeoyAVy%~Z(=SXW%L?E7$gWx?G zW`rq96k(l$--zJn9LZ^#bKpZ{00mB|zx{-%_a43@OQff-;k`($_wb#_mQ$5%amZ32 zA~WYmZWBeu^y|$Y#vGMzmo@`k9$E`g^=?1a6%ho6_WdAi%a znd}v;+}|6^mIV$`wB3=TTphbA9^3a}Z;NMtZ=zc}sb9yulwH3b?y>!9vE}A;IWo)$ zJ6Y^L5moJ$IY+9S!tx%-J2HgU2uNu+>)yl0acXlRhVr^Bo>w!o8g?MHX1mDTmAoMi zK6wXTPH{fbJd-4{vVv;UWmWkh>FzrA(`(Cw%t$HgMs0yr^}|CZivaRNZIl_{(8*yH z!t>Df;Pd!u{mEx|ppH=Vj-5eG&dG{A1<95PiIF}*sX3yI%vVCxMfEU)EKpPkPva2e zgwxz&)a9l*G~B|?hjs1%W_H||+;I=Dc4L|oKUXwVV>@1`GrY9=&t>HJ4fBz1Io$@2 zE1CigOWc^o=hJa+F~C#!a#Z5xBUZ@&nPfwwJ2XCY=bFA~+`hD?8apGA41_|%f1Sqv zW{UX6BliUNaHJ8b;FE#j(6JAyx^bzS&sGqhlq{}q#Dog}jhVc0u*7ILCg?)H11m#6 zF=;7(lWsW-TAE4MSJEg%aWqHG(%qQ-NLn&(eD?m1>m{*n5T}oyV9gKY4{cC$i}?w+ z+y;c5<;S_xej}t7!Yk@Aa<4YM$SDo*pj*+!FEX2UIf`4R|DE2ot?%@<2D^2Xt!+*0 zr_)!w+sits0ZH%Z_Lci1Mn?41Iy1UzGi)Q%J}Qll=+)Bj|Ds3AvOB8XyUPZ=TPhoc zi&K}S*+xe7kqM^lE}QbsvFT_~J6t1Ck=pXQx&qq9>a2|cw()^<+fJ8<8e1K`k?4N1 zioezC*f!_Lja4&4{f)WQ?sV8Tv*_I5oFg|?**5!wGkvzr-qb77yX*FQG`t{0c^74W z&sWE$Q}wxha#)9m#5i;pMPt!jw>lLGUVio9&fc$+2T}l(WAdT<-!>dOW@LP3PYew( z@?|>XARXYm=I)C)qasyNf+5;@Qd%5@U1@qej?xvZ(IJ9n#4401Hg@}U4 zIe)!9u-E_kVAsfqeZqatkw>bgBaoC7S7r*gK%V~)f+VH>`n`S@a1ADtu9<%b-H4e! zYl8gsPe30Fyx$wYEh^PDxV;iRL0+D08z~$0E9cKdOD^ABJN@-e!?DqEFghkK!{d-x`3(xj%jcqK({-d1KN!h3kj{4cxP z10}Gm&49l4IY*wTLV3c+2Z*z2epip?+TEk|XNNjlMLN8PGppX{wjmQ>oe(-pMjqAPY-?05@TA!WzJ&h}%qp0o*{Kic4`q0!&Cq z!fIS6K}1|?qoPAygIbH$YJ%E|7887NqgE3@>(cs8w94YrBtn|EwetIZ&pCHy0N?(9 zzt5i!neUwE?9X}5InQ~{bMI7aoka-?hA_5@*cDJLeW9W)Kz4~C&82nO7MS$s1%awI zXlmz|G(&2g>F5j?x#M~Y?A)R_w4g+BD1kdRREhsypt=&}4)p-n){W#&P#z(?Jzp$X z6y^_629MT1=k(mfD&Y(bg)B}A8Kpl#eru_S+wM-<4WV+EwNw~uC{pK_#6hB5IjRh& ziK)49PdRg7M@4r)eeVjiR0L0*CebtV)R7G`J)w*)-wAi@ic4pTs zL*{bQ@QZ%m4;vmVU51OWXa#Fa;R%0ot^XH=&bidauKA<&$gSptUh%AdAGR7P#pu3V z77M`=N9zi&z;j1qxHRTei99YS33_St_RNs1d+4+D?nZNXYeqnfTTmxP{UY#L&C5mZ zeP+nG$J`@MrPku^5f_c5SQ2?}y+>@m9cHfn&wkw6Wfy!6{j{7bWe(Z-6#3 zU^4WFeAJ#Nq6)m z3vbWHvM|!6h{%cs@k+q@pyWbrNp?`KT6>3fR%c~-$KVGD@8~0;bk!9m2RHB>V zApA_I=t|l^?KxqqG4`b*(KWNdk=Z9C<2yS|uyS96$aURQR&lV#9RJ6__SU_DhqIn5 z%4xl*;_0mU*`cE3eX}d9M)O|I;x{6lFmgWZtgj(Y4bP40)E?v_fr6cLw_W9}=&U(+ zXyVYYWV)KUrPa>N?W}QTZf99%&51Mj1jbfz=FZd{{j8?5+WGE|P)P~m$8u36w}B&N z;p)yBwYjOHqO4UZzAkfP46*m>tyhmB@{649EuU3?Uh_bf`!_HTU76WuRIc;p6?;eg zqvP!zXSAps-kxsB!%I7ju{l-YnzsYZ!GCr482`#J&u=jr&AYul$77gP+_|K}9M|s? zFL)6gD(txMXVn|7@?oWJ==0b)ReSN<$;bBFRgq;hB)U1$3rf^T^WdW@=3!tkwoXGI z!g=m-ZN0T9p=15YKb>!nU5A}(rp5S>Yt(f0QP=AuV*)J6h{g;)?EQj|$U6j&l*uoY^ z5)*yQZ_oouv*~JTljP60Qm6WeuEin|omXwyzq~-ufyr$2cP5>?+LmTt{Fie9rf6 z)n?@TXEixBnl1~rt5j%ZHjJNDPTa~7eH~7WBWdrhu^c(#E`Fkz%{}_hGPd-86GV{{ zXc<-WMUD0JS6Qcu+NxK$7iM*g3oBjsnl(xKTZ0_nI33!nr9qlSIm3TA7_Qm6^FZGd z!kg{#>;d-w#F5(G7|~H_h0PRd^@FA+YF|mTMc6wcC(zN?oVNQruVJ*9ISoZA`*Ny% zS?PVog!$PpnNHB5Y>{`UU8W625^pX_aSVCADOOZgRfW1Kz3GT?b_rn*jBcCy;TW}T z!gE6JS)MWFdG=ZQsAe-nRX!T|GsfbCSXEJ0vG(eU_4Lz_$?Wkq_ChDbOx!lt;uKk0 zWtZc&&R(|$$10wRedqaRA|6{HNn)XImiodU&HaAZz>q!Na0k`C>@=se&ST3XBMCT3 z$|Ivw?-V=F_Mme6e-*JV%?l)9jqEw9woji#-d zgCi$yQrGdoDVvA9OUstRUm-|Vty^uwB?DG~b!$Pgm#(Z`do9{7uSC~Ouxo2@M~UZo z?3pzS?9#PsOXZ0hN=yw-+RL4UC}LeTb(U*t)>W0;ydmdV_Jr{_0$Zls4$WXuD-Uq> zFPG-r1Jebz9Y4WKZ5Y;(rc?kXMChNl?6AMObLGsQiv~|0nwYh{C~lu4_B*YNupN}j2B(|w zh_2BM{*}~_n(!H&Id7m6L$C5`<{aqTEV781BW>nCCN&^@4Lv_sSA z?X*-?(I)zKVdnA73)HjhtDR!pTR+NameUQjrNs$b9%haEz`?f@}fYFxMEF6qgF+JqLgu{AaCI=7=Nx)ws z2BQ&}#QP7$4Y^mi!c3H(g~Egy@Avm@TRCYc^kF@g?v6iUXOA7li%T*wjz|r08r|m3 zYFa^CQd~PtO^x|eOTsaO#DkXsY+F^5)~w~~Z99fLx?*X^ z0+=x2S>VZ&i~h`o7vdpiJlGA>BxXJzfkZv_8u-4-f|ui=tO+=7EkkCS3z>Eq9aPpk z?slM}K3X6h|GS7wknK?9*~#fdQ1$|QTh-EKvdjr~^^&Wvfy<>+0UA5;994_QsfN3U z^ornqQn4Bv6rRtK zsz6W0=R8qinL~Oz&h}=}=+qD#+O%TptOTuo<7m+vifOAc`L&Oym#|TZwgFY7ZO5s~ z$do{=GNMCJMh@zRI*QBYqWH*K@MNam7Vx?WwEAfolqYrR8>f%tqNubSas%HU9?4Z@J5`=`DU1|&1AJ4c57b>E zCMJZx)qGHLP#}6ccs15sD{>l2cb6IgV@Y%;KRz2hwgn85njevkys4(M60B~uYsl%8 zRtqOk4#k>X*)IlNCAW>T1D&XH3&+{U-fcv!nyM(NplB|gT9_#d%Y;zX-*xW?-Vn zH0q1sipOeK;&@rRr(%$2Asj8@>(;k)R+jEmlHl$AE%F;D=#eu<2Gdh~wP{I*1Dk87 zk31ZBt2SEjqUR3UPWMfQetf& zFss&I^-_x}4K5TBa|$NSplQ+KI9+NgqM5wCqo=7NI z#Og{gU+YeEB~BRH{@27ii<0+OJa6QVziQb~^Plm((~8G0oCCvK*B@$UeV*kWHnYXZ zopjam5#~P={&7z6q=n^(OYcf>rL^zOdOy)UjIn#V6BDBGy~uk!_w7XS)qc8Mw6dg$ zhl5>nHI37Ff7W-2?v#WxO4OE} z7uX#{(X+Lx#dZ5(nUxnt6_xSwR*RQsRao=YG*Y4HRPqEM7xl7%D7b5g)flLJ?b?QG zGt8nRhR?hXpRNtp`L1ibPEou^jO666Tw+tvpncZ;f9eY+HXB>Ky{}DEZ66Y@sC3C{ zg{MRAYl;uQot7H*R3&$(xM!c&f1jyL)xB@)T%0wE6BN=P4*sc6mHKWZKEkO=^xwFm zBs_#`g0=OEU`dXYaBHi`#o&iwpgi;V_>7ME*|!(r4&7EkT_hTc5v)nSuYd{zGHko{SY6jhc-3;A9b!oH}U^P3!^^cB^C%1FrI zx4eMB?owrVd)>u>Y7}44 zI;GPoRgP9Ab>ozW3b27y!2W~BpjL8*t3%OblucC^hAw=ZgAX(&l1ATFNsZ4wKFTO6|sZO%2U-($odsYM#lHq_V8Bhp}l-u6!x^PtiC&J5Hb6 zTqURR6s80jaEXiYfQyebJ- z5)<3qD=rwZwPxX`72O_FK8fw>3+J!N1eWU6mc*?Uo$!>=ct{wWB$;Z2|A|&itMW z9ym4~M?V-Mmn}n9y`UJ}ZFNeIPTZeGc!#?pGQVpVY*C)X_RlMS(}JehIW^QyPF78n zqUCCD@AFGt$DhvPIm$8rwEkC5{qKJKHK-|k%GgVZSrZIkKFg#2DGB7Z3(3|p9qyU>&wKN zWfPHO9rS{T{*E@CQWi`QOUt+>@q!u+lAdIdX#_gWDlrR{E5NYWNFLLbaTe3a5o;uDcvt)Z+WnIw`vE&dxi#*rjGdFN;S}{#j z&GwMu*S>4Z4bEt3JpI67G3t&Y*N2|g4MoO2VdwA47G0nc;qQclQ}hxV&xD7uC>^o?f7)Y4jqvsb&zA`GKC9 z?NsUqd%W%1 zDsdO67oKECPeuctiMir(hq*!14eNSb*P1!!GwjbV3I1>}r{XU7o;XX&?geMU8Y=3y z_Wd^PlJnv|cIa;|m>kZn`Fv$(4YYzmJBB_0AA_jr{k;WtIJfHjo#`zt&;)ZoQk8jo zKUy##d{5x+n3SChlEY;c#`v^P%wrphZV%!*%}LxF!voTOIQXHycoTV|>;8tE>ZH00 zaDpv9Vvb4b@CTB>#FQBGLrU58or688h)MG#wLcax;K^)yqFozWR@v$5-k9`qAKo_! zH-M=P=6yjLj7F6?BV{;;=RhM5WH3rEYG83@tC+~q^LEW^poO@fr>*OPhVV-7^#*7q z4Gx!1mv`Z6FgQ@O5C6U5K;Ko(o|SQphpJqScHp%t>z?+$*=W@F!3_E~4# zT~xe3?w76y>7sSEVQmf1O57< z8soOQ9{ejF3V;y-+0uB+QJWh!wl;m0khmQw`qppn9wLmCo$Ex>&Kq~G>08%#W8WIm zrmvsAc6)a!UftWbnmBz8^SUTxwTAkHa=%i}2+(kQqy;*NnS1ql@g0XNnpS*XQG~Pb z)g?>AVsaVW=KcPtbpx3oz0s)@y`~U$lRxaoFDvA@y1&M|z>`b*we@SOSX#P#+w#uk z;gzZR_VT@buC%B7MB3|zMf&T9&Gfv|iqfY_4^@cnV5*T83+(>wKA9-LQWWrn=lT$MAPr|`Tlm*wpJ#)lh<- zeXGKG5NGbuRjAO2EN{-P7?k%BxW712mVd8T#AufBohn820-~)&;6adi=ZUU{hO}ev z&c(w>HL3ae{tL8<{U*dO-_JX>VoiDVpvdd2QQNRPOO_YJ0~Bidbe>XWPgp7r(wjo$ z4R7tNNu4r<1*Wm}oi)zcfY&L?hP0rJ`}!$-f-7=yyVF5iPSy%tTg?4WPQd8iE;ayG-X&%-W#?DM(au4n6)1d>5(s81cYwByFG8kXuG9hPtnts%(~Ysl&t#$R3X z$Ahsa4iW6SP2YCLl9i%;eLJ_Fx(;qUj`g-Wa^^pKjT9g$KdNtdudv?6X`t~T-Wl(F zrfOAdC^dj+&Y&-B1VrAsN56e`Tg9C0ZKWd6P;~t0!DpQvEjgwb7QlkYlQA6v{?H;X zCq_w$7CX@Hf`ZagnO~k*I{@e?D8lmxc{Tsc8oKhJfzBgT^1(*w*`WHuKD)HdQ+Vcs z2T+?j>>6Jk4_;TS5il(}+m6nl%oJJ_J} zf{YV32)X!0EtXvMVqes&($ZlU{<a85K;hr$QxV8~WX&>J%FJk1i z^W!nHfr~9MFvsUNbId@4KfTtIBLco!Tdn``A_>`)VfC4q2^TLt+c;w>SjR8UFIkVH z7jC!3PtISpXjX0skMuo%O zGb&=I@9|UeJQhAu+0r7$Ww-9@o1HH5j1D8J5opblgIS-{Nl6**e zBCaHSJ-L=@R@4FiaAkrm^0HeyWU)!@DFHMmp}6ZEtwve6PPy>BYgZoU%oH?t0b|fC1?2d zuY}nzu%qa+efe2!*#-ur-p6K`uzvY^3QuYFnStFSlTwDRawp9QT(WBS$QgmVSH0vP zWY_tV?K1+r`5_k-<8fE6m+hdj#n&@GrZ78lq2lYg6m(~-^iAlkSlQI=MeHjgFz%QU z@=p23A~{XrXBLx#HzM-ZKPad~#>9x2?@^=Tgs43=a(xn$kb(z+n@j6qm;%?_-Y4pv z9ks!&hR@ftB*tBBYhRLx^8|lP{CqtXF$w)(oZo+aI45v7j-wR5{_P17QT6q#J|*qa zFz*8|G%N^pL&+~&cH)4S*0HU!-k!Z|?$M39u#l!ZCZ930day!^RL505OkC#QiEu3^>*ptPjatR=-fR)Rw8RtGR5Wp4PR;79%)0R{ zYy$j0d_8}+7K9hn-6JhNz1j8SMz@+@#V5@>FVf1M|FMc>6IMyL!36OUlt^EXk*RtS z<=V?K6`PS5iE~WNFzIxk9)Ew|4X`VWKF|~}JUJcyV5L<(KC&7O$m}l*xFX;S++O7B zXb5bTeh>lKRyK7+j2E24Zi?61c6tUp4Tp<{=ZgYOm1_dlz0(5by`sC^GVZOc6!(hi zY4Y%zfW3x|pCcQH{zqF+CX4Pr#5r?*-t&P#4%{RJWrAwz2UWivFi#M7X80 zr&8qoQ7_lNp6Nf*EJvyq#l-dJWqfT88c3gNG%jd0U_u#iU=`IqsmuB!eJwvFBL$Mr zcR59`L<&dyQyL^!0{p{i2n&^bQPT;F3!i7ak8Dp2P!z(kFLw#_5HbFhaD`L~&4T(4dm;bM6 z>k9JEa9-%e=CI3HWP@yOvCmd7SfrX1+g8tc#e4+XF5?Rjp)Z~iuUx(4W669M*czk( zvwoC`bW`CVU^JoW_8S#kjK!= zE+^W0T+$f&7-qzzdm<*Cbf#UeJ-B>5&mhW~{9!oQH&uq0ID3*;w70;<1AA55Vg8x9 zFZ6B1V+v2;vwlZ?WJP#6rg+s1yE;+YyGtv=)n=aSlTJJ{7~0Ur7|i&r<5$_T-R2ake4Fe(;-YoTi=HnwX@RX)dE+uw`#d^hbwm-O7j{ycqIVC zt?KPP;mScJPKv1|dGMLqb*MJz{o!DnlM#o!_P(=(lTEo5J=y$ZWopUblK7p=DwCxP zotENy3g9O(4o0#8t5h1k?!eb`a8&B{Qyo;qWZ8iPl#>v&o>Cd;pJv==+c2d5CLS*< z`LgnZzP~M*QIen2JWIv-dcGUQs_CKT$cU~?zb;3``tVwfs8`Ea+It%0@lrnL4kusr zlP@-`Q8q5q530{o2;VUUojAg#Y!#Tn27Qq%qLa|+Vq%}P%0Bsrp3&9x#Nbl(KuYz zRAt8)mcvy|<-VTtropwe+?lS9EKK3*hbg1o2h}?hXRuN5V34nILt{>k51x>Kt02bJ zPhE7&0!N%KoECjo2Xzpu!-N5y-mU)1=`D{{Hq_j`oYPKOy0=y0fgHQ3%nlT-$ixZv zj{z}0wSDQ%`W20{W=A&a8kA{Zt(49r(G^a3M#yIy>fk(--F~tyKiZ6_E#GP6^)Zb! zwN|W_HDAxoT56*C*U#Chc}lF!frgko&p~~IjEMuMV6EHcEVMy z{c}o#esyc*dOr#7;)-F4rFi?of~Z(Vhsg7MxU#gW4L-?k3(nsO^wk4z5~A~KCCcb z8Xz1w_(u#Ul?ehvt4^4a$x63ny)j|_)6woncBa+5&_7{kl9%$*^*Q#TD>=reR1j?* zx8SHHq@MD2o02)P>G<(r*NeAAU8bdClvo^<1v~ILT&A0a9&=HTaX0ZYFZh4TzVi)p ztblePUr)c{9}b>))cP@xmzPX=_yfx_j^rlsk_kB%D(`7vBy2{TKLd>hJI2yQRNp40jK|a>VByy*sKSbAKE< z=nS6Jf9On-lG9LbZolv?S9hOr;qJ~#8;=id$-KM;y_d3@lv7Gk#dp{H{d0_PDIQuY z^`9&&jue!{@DNW7OG6aoKq;m%aYWxJKJ-V=VF-Rz4HbgYAOp?dT;;@R;|*}AV|Mt+&mcVO_gm@pTpQDOY#=~rTXQ8_nwv}%RQm*y`n2R^?2z-$7e;B*)Z6m{Ao8OUcLR~)aGzgSkfEO*)C%W(eLb!a`5P}Soxj=Nx_mvoyMGhBe- zH^U*|R0cZyJ5)7ZKZFOfTX$o8z`xz!e9{f~s-=0$E0#aC{P1$RX>P|o_o3i2xHkwK zyz1Y;MfV%H=;j+B)GfKMTdmXl~JVVMxK;L%<^nG`r z+@tTiJz6L|&;pvvyL5b4dHzzXnVs!IXEAN<((icYE3KVnlosK$VaaQy))Mhc-;&x{ZGDZ%l?|RPS(>x- z@umKiTTc-=hhvmDGYI7{&C913vu0)PYFJ_}DMm3kP{7GTXs7Km{62q!e>WOwjk7vjHw?mIqy=|+3GI~nW@$j;O>DD2PfwnFzo*6V!EW~Z@%qb?Q?gGia-IJl z{?&o}fO1mq2{Z?kkw(~zl}9mXg00mE|YHvI2|! zJh7=MS-Wd@nOP17gJ%trZ>hqCKB{FbzGPLl(SCfA_~?g&YGvKicL2YJ`@=z}gadsC z(!jZewY$*dAjV<$5)&fT_hM=Z9OA}KhH-sS%VmA8WLCFn2-I(n`Qh)5)t}pghVJRR zb6(G`_P!5A?JUvv%*diz;CH=PXYF2ULd1ME?wu^5tp?vK z-7T}Lu@YkY@dBAoct*B*!E7%F3=1)4jeI$Qw}MakiHUis?WV_Uw{W2nCvPZgXK@pC zK0Pg_$K4*c-@<2dIP~a?Lq-Jgo3Ya9H3`qkN4`(xcgMrS!vwGe$ty44+CV6#<}Td*%d07ao)5M(ELQIRZbSO~zMQmt z=p1Xs{61T3E}GtIlq8m5i1EY_xoE(!9Yhe!O)3$v)r)cQ?Y_#K7NNbrxJIN=Q1zxn zu5dNMD||4&Sh?u<;UI4XsDLXaPTdkvvElld=4I|Q3a3ch)rX}_jB(uinAh2|{Kw}) zGw6NHioP_FcmG-KcHr!it<;;a^;!p16>%l%^Z*JfK?TR-O2ou3+oikFJgqhLJ`+=x zr=&-6DE45)&YX2N{GXjeCJAh3&#sf~XT2|5Q6-kfJr@jngJ9qjxWhCeu7~mZ3e(s7 zn#Eo_4S7R`VjjeaeX~Fiwo4qVl*%0&0s6_!_$a0ss^4|5L{*iFmTdtmFR7zb>e$Ay zXIHf)%xX34M89EU8@K(yCcnxTFB~gm5Sl`7*9q-C8dHsWvXh(v>!K!GIIg47Cxr9m zwXC`W&c>r?9I%Y{Ifw&0EL41;?;W`8*(I)a^(ty|2;YKuD>d|d9K^Gvw}&N90DMMM zkE|FjO_G#soD1&r_2y(6`mB_uPsVZZpy9wp)8s|c@Ip6#7mXBb%FqrzVLuXg$5?@& z;E5?gk(bska6bdHB3>j-VKO}Kj}M^z(XjEcu%}A1rmDi%J2O%NrF<&7Kpx>A)V6wh zeDfcWUf|kM!Fk1n{EZy&j_2|68Nm~|NF!A-qfD+NQSGrju z+{n4IF!OwzveiDJUa-e|u+1%sf;F;hN5i4Y*_{7)NHwk_N`JCJednuNgSZOm4alny z(U{R00F#`}C!u8Uu@B~EcNk*>^7VtY4Nu|i4oU4Eyxk#9`u?)o#xzyf8#|psGusCr z`(m!UV>sLxJ9*X8yFQbh5RIRO8M;H)_DT3qjR<11-d;1TG zuH5H47J}Y4QG%rhj4yJW{)s2BHTb;hjpO62n23VtEU^Ty+gW1dm@Cq2%X7pEU#-Jp zUmEy*HJEm272RZprn#fBza2N;L!#L1Bgl)(1q4xDAjT(eO92j}E ziLZA+a8y)^DI`A}92~t|=pBk!XM|O(rzWtRLYm$Yh`htY;ex|l&&o=DdhqCtY{2`v zfpUVYXGnd$lVO3D{_oLB_z>x#nu?l@MVnjk+SC%S%m6tZc4#?f{V2TGv&PN}EI(g+ z^f?nyyCU8!SIPhID<)VA_~xAQ$gYFukDTWrL}VwznxK<;Xsnyf-@Bf#UUUIHekjdque!xG6&r$t{@q{6D0=E;b}rpnltBUc%Q-kRjZ(;5*U@Q8Yi zRE|7Y+U@ef@vwKciQR$ABTp!gl&h8z;+h{Al@T7Cvk8Z^sU;$y z4zDUF*Go$^Jm(RiENZVb#uy(+Dk=5dv_Tf$7ibx zK2#RRCLI`cf^HPw6|m8CngO`OlUq|@oD-e`z4&sWi{=;@v}^sQ-Rw7DXicmY_;g$) z<8_Zt^$JUmS>>Wdsa3$&`?pc7`1r*tOjiFln&@zY9%NKu2e!MUJqhbSuOYebyR<>c z<-B8E>aXq6E|$h0%@Aj_yY!`;OI^kxkFp!Njyl<}CK5R<;MZT*J`n$tz-2A!_c{znkNOsS(v|}hga|z!(?<5^D0;3eU){T2knHEd!PUJ5 zriZQym|8?v>By3$-}!)N?Ch$ryHbSrsF>&NN(AM2E{r>Kyhq#oU8SYvp!<){*;d|F znvgU1=ykRE{)>D4khwI-9L>aX|AR$ua@X1n=&8-?yVmEguU!uh!0rJ?r+=Hj)SrU_ zN|%Xl+bCT=A%9?)sVrDPjEQ)>#-6f%74op>VSkg~@3;NOXZx4oPu?OmEf=;tdhn@0 z%ryB_pwR#LV6O#*QN4PaI;yKX5ErP}-11a~5}>>l=`DvO+XM1beaE90rJg0!4XyAk zayUE?EOPF2ui_UZ91_n)CAJta>o^|sqQ#<-#{(rCr#~0Y&pbn0p7{3E;Qlyhey;uT z2qc8#K#s>>0{#;5$7FF#wm(6pN|dQAP+5qRnyEyfzGixhSvRf)k8+Q{9o{me@~Jt- zc^MZN*D|lq6^Z-dAcr@I`|Q(TP@Ocqq+iEv*UcH>Zl5#4%uD=e&PZ4LZ6l1lt@zOh z+=bzlg!Q)J{Ax{$C%_T*_))=6j7ibE^u%1XE_!5&`gtnFbese6R8&V>w;}K=4z-D` zM$YV_MKF70O|HEha4+ryjB&{we9G;yuTo6Yzo@S5SbZ&6hI>LY+=lo?b&3AkS)op2 z#K@4ne3Xm7N;avCV;bvREKhWNHxynXb#mMZKfs4bXbs$xPxQ|P9oyHB(qrohlm_)B zDKa?ENZRu0?bUdG1Kz=Wh{NMJ+bqSa6YF*}L3orio4aW$P zh`%%i3HTa%W#Pz_3FF&@n1Db2i^m^h_|IYv{Nqns@SkNES)s{`CJz0HWu(yU>i^|W zX1?UDDFZG}-)>oAyJi0W`a^N}u^Y>X4{e(|EUN%t`p}>s`$JT|DNg!t8Oe*RkbTGS zA))*`hR2_U;ufK_Cwk3GUiycad8Y^X`*{NFxfOUFaN zigm&ar7cPt5PD!(e#&Wh;e{odF?#>opJgOAn^tJDiP7?!!(FMC;ZnTgXXxUeT7yD= zA03|+8n*Vdlrs&qAB~cqE{`R^2gM=~IRyGcCPD-Vf}i~{GNI1PCT4}YE}Q7)M{;P+ zm7|j(@|V;P95RGyU@_FAC%c@0(MC^J{d8nz=(aLfa;Wi{RClQD@~nBG>cQFZCN#=b zH|AwAkQVyG<#zwjO@p(O66M(9Bh-Fc;-FB~;MA^`sCaE5o4WB%)^)yCt6}Kagrs55`$M;VmQC}Eir((3cRAPOikDFK0N*z>i7b-!Ck&ia6F1 z>xk&cwM2B}Mj|-U!1~2BOWZ<2fhBGu7Fy!x#GhDr;tS$JOB^Qt)DlOCqYUvC@o7u^ zo%NGNJw&kP7;%Or@Zhv8@Lxpq7;=T}+7ic!`G$~Eh)ft2A>OhC z;Metl_d-gEC}1NI1>8bhV2Djb9A0iGf)hU{VtzLgF~9F6BHtF`Wrnzqh=u)^M5KR+ z7({}H`32p0gou_uM#Mn>iiix`iEmosH$-H7mIxNN5Rv}{A{zE0aj_wOM?^U<>+mbY z|FT3YvDAP@41CrSZvumC>0T00&>xBAhIohgf+gCCXvlsYe}D)+zE4Dh{z8O|{5KJt z`iuyUd_jE65{HNo?yrbw__st13AAi&M9`Cns3?_)im!v3u36NnpdLrFyXDLOorh;)TS2+U82{}AFFB8J3AMEaRTG+H=rD1aCB7yGA)SBc z7qGmCh>DI8QBfZe75$5N0rmjmVhj2z5PE})2)!YJScW}-SZ)b8@(51y6yocc4McP( zlZbMmpJP2R#6Vz>EF7XEhU$o6L}VPP>9(fl5Pxk^Ze&3a8(Gk4#5hBY*YpXRj=sTI zY;hlw>8BFkFu3E(a(DIq>K#0nxd^)*DW;Tj@@_Ie^%4e^rt#LYys?pET(m?cE$6L-o4e>KFu)Q+Y=g!_#PoZch=t-EA~L*3M22?aH-_jSBJqbr)ba`OO-p=Agg|r>F>C%t zM81PW2=O6emmv-l@3q7?Dn2N_)e(OuqTugTgg8q4&Jf3l$nZa!{!dN+7ZK@?Yq~Tg zd=K@U27>LDNF;(i$wbIlKO!2`pLpC5X~chE{0C^lKq4{@A!4T)Dic6oB%%i+HQgp6 z-Dpi8LyR-USmN(2F^-5K98bg!HGznwcp4E)aUl^yat1L7R-eT$$Z#%kB2*cVgb*zxVm4exge+V^#H_fIh^_G|BDQ6}4wn+SHvof7u#AK@ zORONKnxc}}B}5IezbR^of5%QtOgF_k9e=G3U#H`5A`UbKFX6=FmbjUSj%_4nnc@~A z>bZ@G2HeT#71`rokboZFLqt#SB@Q#i79vFWK_W6dLIex95y819h!DD86OsREBJ%%+ zIKmXq5ZB=#PqaTnxzH8u+!ew|opiMMrlFL5o- z2Ri&75sScn9X>$37PCc%KO#2ZoS?&>N>*)x>O{h5Q+!TDg$IdaO>u~b)#Ym!3mr$C-kU+^|8tL}(@dAYyg-7jcp)z9(+P6ya$#AE$rfDoex>p{)et`Q;^S9>mj4 zkxZ<|G$BHbNh4yB7(fJT2NKUP#USD>IK@i3DTWcTs*EJ!v|xgLaO++MYAR^&LBGTPL zyxbIU|B{GuA0ndMM}a{a0-8uDHN`d} z8t^L}ev*icPZP^b@f+f8*ldWEILA~G&EV@~tMG zWr;P!7E`Pxev8GDi1gPJQO-?7=yQ_uFJp}BN%#$PGvaX!4-tlhpA(^YG!mg#-AhEv z?&k}=erg)BD{>u{26H(#s zh^S~M5wh?HA}VSnqJr0msNi)XDtL>C3f?B-6tkBI4fS0j%IP2?-2o!fy-$4G6dwSC z)bl^q5ufOYzYu?IiLj=3YWinHjNzA>eo)g75y644HT@e+|CWe`^l18b#6OziC=uIu zUp(jkRP0tH_%N-AICuS<_$a0oZ+)=8yNFl;6Nu+vvm#!M^FDDQbUWgErsz+EUXV#d z`a#6Sm`%hE%qHR%%qAilFfxJj9~I@2fQ(~^sL(@10pp2a-6SGb%E?3=1oMe^VUr@B zhE0lygJB`@P8?{66D)By(Q64W@k-1h;uoeUBL3VGB|&~cg>#6g@OkG9mnrd(kba?p+ zouFD1YKQ?$BjQm^BOR_I_L|~a;xgC;h*!ZbK>QgtDf(L_-2Jslyl0r@iPN8=`X``6zT9w6Y5fVc?hFDO!mc@H-)NqBIBda4Noy=#DzMp&K>M3 z%Dg`qy7afmoL`!hl0d;C<&sbA0imvi!{Xh;b#t;+b4E6qDWU%Z`4H%T}%UmmyjMhm; zsU&O+eq4ZU9Ac~p)ovM36>3`MN)PoPGiF$*d&_|3vc2Y6@hZuZP~bi%$%KUA!$ODe zLz1*d%oI1x`Li=`y2}Xp??)0@@@h+ETN^43scb2(B%}-3%UlD}i!-m0ZMs;u=_1vp z`cGUblTU}K&6j!o#<*Kto2*-9H|ws-yxx~tXU>rzbHX@Vj^fODDrfU8i7CeIp(zJ5 zGTjSx)B+VX&o?;bw0n>iH!A9CWoG7emt@|EFOaJN zm5#eo#mUi`u`qt9`)VDrIHm>Fss&4QRH=#zza5_vx@yMY#B}sVwtlHjP#&#tG%a$t z3ECKcOWY>ct=49wovDWo7Gv4j>Xd>t8nVG9)+v;?g*QhevyeRX7g~PJ?$=G@w z8&t7UVm?_oY?%9I9kD@0{QY59O5u)^hq5Shy&TH*<`o>u^`=*XEcq5)z(!R-IAo@z zR*RTn3k`V!lGL_#Xv)ZkBt1q(WC>ez3HPcJq#T-R7N!?v*2*;Z>ooVpwEwt2cbI#t zjtHrUzS}3Hn1543oW8aq^BQ?Q_r{xVy}kF3@6MzY4{<-Jvpk@(NEuwAB;W}h^|*@S zf)I+!9h*KBVq7hy_=3#qWrKdLQ$DFu%9;BPXKq%1HE&^5mxKR;Nzoxvws4P5@n6x* z!&BtQo|q2Sd|AmGq0UDKtO)rRCc544YTBQecSY#uJ5vX`J2b6bmB-l@%Jw8DhEhj) z5(Zu*rSx4{GtB<7#C@v7u2)jrp;v!BVEO$Qr44ldSx0`LBI_?rbcaf|L#W9@b1zK9 zPYlS+TxedMd7Uim6P^BJRV^epl4`&U!AP=Cb+W&zWE8{Da}$PSxIfnspQ#AR!y}4^ z2X)k!(W3LPZk)1=nNLO+FkD5*zI~(Xd3JD0PMW~pP#0bKW@#D0b%jjZ6_YmOq_nej z+M_z{cPg!1QvIj4W&L_J0p*gqUNQ)G9kQ11V``DR)%s|QigYakr%p7$JRXx)wmv4U z(|Sv%HA9{ITq{D}U-x&r<25ZVw7bN!VmPnZc=N3{Hrbp+og{(T7R${zTQ=v!WXU>N zk}BOUHr?)inwAx)3mWM<>hIbCnoQBO&b@JccP|Eh@nl^v`I0vDVmnAX!)&fw|knVO;xn^ z-;axQ?R1hB%jp^Vx^V!U@9r{wnt2l!)_04c)i|5uPjnH5s)(jf$3}`cBb4*|v=yNX zva{WxhZpxtaG#~qo~hDGcHpW@a`$XS3oprXySRqH`7s4ttZ5fT3&yD_G`dQA%|njG*An${39F3ex!-l&5& zhjQk`t#NPC!CO?05o0I2-J3P-R?-$r#e48tx!6GQmV$MMPI0@;mEl38q&I5%FI3_8 z>fk-9@bFVZ-R}D|ZHuBwHiR_oezg!5s=7E!FXN0Y%DgEuV;|H>ACPUk|7vTP`w>lg zSdygHX50|!@D3a3ZqiYYs;I6@6H`KeT{m=~`w1QKxDv?sDu={}3J+%VbN^aLJSiiL zO={PDT2r4=<+L^=rd*&DL#^jy-CpSURZ+8c{Hjj!w3;K&0!#H-;5l9Dv#L~1yPPGm z?>DFdYPgcCb$o|T+oC%ORe9_Vn7WHHuicn%OZ=v|TV0#2+rY8nOtr+3m1;Y`c_>sVTQ|E*-rgzVi)w;bp z#oMYaNjp=MhyGNp#nF*{M<@DYOapF^4TzjV>r?|~p0v!pt8@NI6@OuNPI73>qr=nP z?KILPRL$! z@Obb_9k3)iXkY3yU#Pug-ty6D?!%gPDCBDxxW@gJ4jxgp$`$1sP5U~A_IFMDR?(!! z+pTF`iYBMhcbe9tX#IbN73!F#9VKnCnjlrG7yr;vy(;;LUk-G;|3}mMbPEBp8=UhN(D#zg$K4I_JltdwOJFP}7NcRrnJ~R-dbOsn)%2S*eUql+R40;PzI()g zIV}n1uqR0X(vfJHg_Z#YkPbmf@$hXm;qLb&deF_0a^jwqJ7EP;JQ6plB<4KU}5f^T5^Cjs5TvMmZH8q)iuaFQXtP72`o zhec2nPBx@dNWnfBtPoC`u6#QR;KT;)oC;H%%m{n29P2-5ghfn-+lk=J*T4b@Mv@DEi*UULESM$mdK84giPITI1?Mn~ zisv&t9~L(q=9O&0&tUS`VP3JKAwjW^5!jhNCIJQU{*Gg9Yn%iufW%E_7(&BKCvu3F zMiesM*%05+$g32}$PtYh@d*C}B7q5u zBNHS7nIMf}uzUcp;698c!{7{@5#Z~gY_&Vm1&jf~OR) zAcRX&hA}i78Qu!JGBC)3A7I4An6Jd2q9;rM*VW$vlTq*<(vhy6I3KrI#078=0*BF>I17>nyGRAN;!>Gu^Fotj(kOiMkI%J}R;dr>)08Pl(JR$`7DqmEfk%D*65iIpxp3DW?;e7kYn{|fK z(06rwnDlM9?9lWshM&c($WZAf5hr8a0Tu+GgDso{u)JfqN!kkQr8!@F;G$nE>G@ z7=B)ecZn~+;b;Kp7~5=M!LM=c!!R0rI*<)M3&;lllkqQN<_uKjOd_J8mlDySB^s+W zUN;c)pAnl$Knw3D&Vln75iR{4kS%Rv7!CW7VKnqJ9nKhpd5?;-HICCb9Y{`{1>~4} zfo$kPV8QP&-GPh`48r&qLTjkf3HC6-@8N={6MP6P3>e}sI{s6}zl4h`9sd$!MWEoZ zL%8r@3D$TiuwWx!+k%H z;Sz@b3$uw~$j%am_h9^2>jd?{!j*=&Q-_4)0++DtHUXivPm+2XXfZWCh<6 zp~dt93*iz!C>!B_gEPRw>kX05Fe)wtGXHd9688Thd|^-LGXV-(q!W~r4vqwfXn7To z4X9-pJ-!LZ^gA@-4fisfG+b4b0W7=$4FR&kY>hV1#B?4_3}W8Sgw?0;MnfzF7Q78N z42Ch*0U#@=CH)o1gbr_HJjQkl>3gv*5dVnlTpce)BK!{410Z|6jNv~)=zt@Vp${;O zd^Z7uBT_I;Y$Sw!e<85oU2K!UWHewA>1e<*9bc>CZ_x1@bo^!_&H;A7s;mq`yIjHv=i0jhg-t5#{dza{j+V#QZ-HknTK(lLGa5yxUW62Zx=F~IL|Qx7co z5IzeGqsP;M%r~Fmw=n;g@k5Hg05a1)RT-zEKH2p8#S(Dw{~g57K^!eDI* z@m?saz`{EWF_vNEp8#b3Nx*_naV{Vo`Q<}mpf5fRvN9g}{|)$3@ZYEyn2erpVK|Jj z*Wv9zW_*G4PUwaVLs-9N_%jFY zj`81wFRb_p625@v3=^8WQ8bgj=_c|CERd4-pSzrOQM7L9iOg{Dr_| zOzY`D=AXg%c)0TE_=OD9ouXV50>HvMu^9oGVJj0P!gW{2Kg0N+LkZRKJ4naaw-M2h zy+jDYmWU1a8Ain(;`i_iB|RO-ZQzIja6(}?0}Ww3(k%uigOd+1 zejpSYp!q%;Mtl=PO#BOW%gGr3q|xxPnhYERrICp6QH|O8DttPSoLC4ffby}Jbg*^@ z!_Wm@Wf&D7V0f?)f79U}VBvPy52mR25kxFRV}XTFLpFjWV7i<`!fy<5G4UDf1;Ay4 zVA%i`WI<6NVz0l4@xL|1(;EMv@dJ%t0@;uw3}cAC1+tt$Q;{DVR3Q-?&mtoBi(omv zFvC_7MuJ5;?41TWgsKWy_$-!S;&XV4h1hI}7l>%+tH6RxI43cT_;-QqP%pzR==tfY z{KZ5}%VosZP%d#2=6@Z(yoe!C1aT+vD0~2c1p{!vU>F5H1Ehz*4j_B<2huTA@dZE( zT^g_e8;s2`Iy4$s_&nZx4rKaq7zzP=sSxR~O6~>9^Z(!Y1=FaP5m?>CPY~wH1|0DZ zJdO!0Y&C>UL<7bF3otWg09ny|;ypN^kdDQuieWT(EwLA8NYb%JJWIsX+e13i?_)TK z44;yK4B68`z=ksx$OcR$b_?Mp9UIbx3?tp`3}fHe!Z6Y`F$}e_h2xutzKnkH3_}|ZOI-P{9-Pt#i&YqBk z1V{iyNr14)5*855L`T7K zVO-$%Jh!U4D}nj`-ap>=^Z6|)4NskOZr!?7eV0@BoO>=angXmqCo$Kgn<;-$bF=`N z{(91=-Rn&GRw8QmPGC4{_w%HY|0_VIKR^s~I^H4wN9c@wIsX5QSAGs|gfPgImc!hP7lM!>Oc^a5hj!6PinW8@d}2HU3Is3cRO@K~UF$ zyuky&3e@z+fxP}D(x}iMnDi-=jym6v_W)L)-n9-e8H0h9Uullvz?qmrsb>OIpt+Ry z#jF+){lORH;VEj{sKS^-m$6?zFd~ zWR76CNLCq7k_N0e7tV-4-e3@Eq#1A0%_hCvq&J)N6DGZ%xCPA%SoxFY_=GeHP+E;Q zybE;*$T6l5u%dq}KEKJpjV1%rG3rePR-S~)Wzutj706^Mkm;6F{vXY8ttsDP%3m|_ z5HJiroJWZmj=v{DVF@09>weK3F~D>vED69cE~hWW32#tq;xq~{z1~b3e@jW@309IG z2+fEzev&6h55hV!(s-ixNY~(th%^fN4Y2Z8sNX<7SURo^n~vrVtQZRI7^vF+PzvC) z*+ju$d>D{M2G;;9W8uFKWCk}=J`7#6Dc?vrZm^T|OwA&E6Emqq9kXM=uv!e$tvE@afM!I- z7_SpXsnK>j$i|0l>`0mxthh?q1!Kx6?ZX8}m#2FHQy`$u^)S_#@`r$xn{>zHCjBhs4XFJl{Q(i9+)?tUq4t~nAXIpE=~n|QTBoDA z;e-WP1>}w2BciK~K~1li0qqw^{s1EQBZ#PE3n@n>Tne0t@A_*@{yoIUF^fh-E7}aK z+@d>nl14xBJg}k>IwkJY%0;*DP=FguMiU}V1+q5J2I}bFTZrhzt^roe#1|9gcj}IH zK&F3!h%WaT@*jggKX4}0@;87LvoOw6j&xs8{x>YeLenFE=4iHmoGb=|39bfKKA}7I zlirHDz=U(~!C=alA_J}h?uMqwC#eLcqmB$9jo)}U5kJ{jBI>|YBD&tWCN4E`EwJKJ ztV5|q`{$E9KmiJ{nTX$dyNOSj_$+W{Bwih9-0*;j?-6@pO4h`q#G$C9CjLf5`e6J_ zY_?HEwEH9?T9LPvCusjUz)GL)=ta6eN=zD+tC@%bUQIp6%9m$iDG{%}7ZLeX5%CiYHtF#u&IB^wW?~vDFVK;O_J5obIS6orwaN{A*2Y1EwRt zdrbNtq_c28;zY~`09z|A!xRcmD(1qrh<>?Z9#*~*n~;b&A5%8OW~k%D1^E0XF2uY6 z@db3vz;JY6-vaqleGjaB4{JGrcrJ&I?wti43uHkj0MqdkPM(PNU-^^j4tvIRt80&C=%;+3o#S%;sF##?Z4^%T3 zlw+FhQQ%A%8ukELM_vMkIW)%`z>1}qrXwFW{DOS+klzwe%xEX&H(>JElpmn{Q!Fku<;N&TCH~2jCqS8@1tbSp@eedx(ztOY zkogS;wz9*S$^owOr%l3BSicp-;j@= z

fojEj_C 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

*L$s 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%0AB7;ZNwZ*cZIL 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
  • y5V13U36Hwd_oKvEr^7S+|)HsDPj+Jne- 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%0D^(UjOhl_xi_@-*Z<7vXA`U{jPg;U-@ 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

    GXwyqHhb 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

    4)5l8~v38g2{W4XxjadHaMi)*pX;@$KJ^kw${e8 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%0DN+U6lbR_V# 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%0A+Ki#E%-h1KbKMCu7s_P-8SEn zCOCSc{r6?9a9=^D4DYik1dGI&H^h(qknlLWcq6o9>Cc3+crB+)H5B^*f1D{4sZcBMkNZ zK8D-0#{HkBxsYu1noUom&+(>X9;d9|<*1mkp*>hf{Y3NV z!|ui~^cEfU6u5tr+ zc3*&mejH5W17ELi4-Px#u@$a?j{{yGho*k7L-RPwj-K@gw8?G7Lc2*%eM{+Ag1u{2 zp8NaEkFTh=`X`LgC^^u10tKA*wGtI&4P>Pb`jUrJ`U;8ln>oHHdMe4I* zrU}Ha!80AyXJ_O8w#5|)xqWnCpIzhrBV_Q8v#8I0g+80-zK|K~T<%_qydUi=Y|e8x z=9(c(oiWEeqb)kPTKG_hW>ca=)6NHTh`+~%o{jz!!cW17b1`nY`#=Qs_B&@!aQt+C z)^7f5u_48ls9nG8{B_TBn}cgZ*T09kLw;i^LmoRQ+ahxpV5h1HFR zJMBTg%j|UoH@F%`igpK`F=oiONnY>xvR8lcWUsM9k{#Nk(!G%OvEQ|A3)Z)<=)S#u zMI>h#-Dn*ehx>%B4&<0Y>j1zSV}{)ICX6#Sbp1+D0MxZ?8JFENSVf2Nx_oMIrcaU%J5)Z%ewZ zc+G;_;^!j_|LwPJTRgF8gQveO>Go4=7TjJ;;rMUAU1+e;JqqiM4cEZKGq=J zLp(yhk2pnCZYGYEL!|iLbk8wIcbz`>?S@G@F__)?Ys>rGbHs&DWF~C9c>cU*u(sWy zeY#z%efLma2N#^z!3Pg*e7n=Y&yE?-_sbzJjh9nu2AW&)&i}TeC^msng1d_R2|Fdq z{OIpnf?7w!-sDNJ@E5f;a;O{|IUZCs>p8w%442AhXQ=~lDH2uNuQ~KZb?yY~i^~wLUn$K@|BYW1~3lH|3I<;?KinrV$ z-cV;+cjUm{SKPlVdSGJ5*vuI{b6)&`_-DRFC4LL^p`i!xfDC^yR(1$sONG0EAPFz zc-E%Ki|cEieDjNY|MU8JovzI}+ka;X(=HnE?wjEQn~P@SQR|;ENH_<-68z@kHxEB2 zex>-$$8Q0C3-Mco-(vjA@GHk}$v=~qoJIglhox^USS&cW9MpG?g}yv(iSIjSq=lPX zRJyQaj*%GZ zE9eM+%ZiAXS0*RCdbjC@s#{;K_($Vsu4nY0)>n1bzw%0H{g?NRd-#yie}!IsNy&)R4Bv6f3GJMjX zl8h8j-vU+qii;rK$LgQn#LimiIlLN{?qgLOx_{LlpH66ehVEPSk2kaOcsHvVbv1rO z0Dgoo5-z%5)t_D@qxX>)i$-9dq5D<`$zD4k&%WNSj_<+lF{F^guslw~>70qiaLM?e zjte+7&Xr?!1M=__zOU7zAMsrVE5HOeJ|e` z0vd&9yR+)_zLHa@!1d;6Or-Xs{eL=-UkRufItN$-OYy|H2*~SJ*-w0qfPC%)R1D$2 z1WWi^VIv@)AISa>AllS=XJo&WUl>P+NrbP(AKky&4Uqi9VCg>91lixg{ENuV~X99LO|QdS01DX%CiF2UVO$`QJZ zELAKpbS{ch=?n-B@Zti}g>wt2(i|>lU0gMn6$dI5Om6!mOOWooq;W!%gu6IpNN2

    F*_o^cx9|mSmCczT8EA!2L3OjUecM1gPmR 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 literal 966844 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

      *HTT`kJ=~{;P+C)%UxQ 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%0A(%43gf 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%0A`k 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�OhF$FVasEH49C`cK%KS#Kiv-fm1O%eu%s!QjUFpf!W6n zh4X=VYw`A>myFAR@h7|{;x)sb?c?bch)6#|qF)fw3<%%9v_S788lfKfA z=!fL-g3@~IUt@2Ask~Nj=g+2|@H|KM&UJt;EW)-2jSJ-C-YVkWD&pQMmX(ym1@eyA zQS99E;@f4$y;Z~o@@wJ(`NoQxs=R2r5fKZ9vf>RBX*u#nQ-kA-yy61+xIn(IA3M(H zMauZ&+huY~PI{GyZpe5jxX`2 zIbIqLo)Di3t8N|I<)89}$qzo@x0arN$XYVhlM25Pd;RA+UL!6%^5qe0aO>b45Bx@? zSW8nNrpEELb-y{^lQNPpIqh?qIPb=diAO8^r6RiCy3zXEW&X+8SNd&HHtM>oR6I$f ziRiy=*bOfd8QJtAK_3zp#ODeADcQFFh=POodPx5a7WeD(7_J$x`HKDL$g{nmj8#lM zg=|&ehfaRz9oO*!3_T&b5`mJ)lpvgv@A>I!s}Kk$kd&{SBB#Jdd->=)TiIHpP((&3 zgeX7?@u^>!KyWEvOtTq-ZXsiwJdwT#51xm>53l3+9e{{}l0V8QC&FD?M%D=Y%uB&? z>K!R}Cf}8`J8@6KUWoR~)mCBVu z=%?YrT+J8*&oA)I->>q&qw<|NavqS4-pxn`!Zdk$b8t7Xo26zg@-C6 z-N`6~6w^^Wqyx*{MlY!D+Wx5F=qXxpc_O!>GU)qU1YsagKjPI zBSU1p$&kPZZZkvH-rOIE@e?RQ}bF5c^JB;$5g_WNx4*@!%u|taW2c1NmfVT=a%7%>c z$q|^_D$se29k7Ws($rYe*yE(hFV*7tp^zH3?E(eHl}0)3M$>$$Cg=Kjr%@^z`OK$)^baBXHo2rh>2 zFlRTjwV6C@)gjilNeVOznAg7#+xL~7mEB!kFnO;DYzcIXXX|d-w|9tDdM^gDTn#BL z)f<|cI|4eVs*9*qLs--6BrVj#Nb3Td+k5*0J({2%v~lTpTsj_?j>o0rap^csz_h>l zxO63Cc^j_niZAtDw%fV|cKeeZ;CnDJLE9k;(&eMqu#oB4+*8CRd!J-HjA zZd4Ka99O>$UwAre+M9ctdbU|Bk+6aXl5%bz8m&41=$mcU!o=eRBgr>>rXuM`XXc`t zf4BcY#h-q1{t<1&Zh0$@@?E7v22Q z{$ZTuhWUEpQ1IZqfolhnPbSR&{QfJ3U5hggxfi>ScJ5wW;XXPj<=~xk70l2N3@;y< zv2o$ZjQocxrXIOxBsKlX5qyVS_~b~U=gE=e{Ch^+wbtWV?Ymc5a^4L29lhe;HfHpn z-!xi1x_WgJcYxr24Wnz4PVP>=eF$dqQ>OU6&v z6&D=y?9Lzb><$j6XQ2+%3V}x!YGwU{Xh+a`JO{PjlKEKXw=&;)+k11ll`oR{#G!*H zPVGuRFk0t+oS9*dYwa(x#( zf-BL#$p2k1TKD4AScUv~Mm7A%Pr-8H9SL_rWDO~H$E+RYvj*15@3rz43EGgCrN z0W7U{B_PHpWRXfzC`5^#2#*#j`9CChB6M4zgrbn^P(EQ@sO0`rly!QR+Hhf>6v;^* z(#;n`b@^xwmLieNVT_N~KE~O$6*QFxCenRW`~TQ`8~7@VGjDj#IZ4hT0SyEd72zZV z3@9YwGgz(U>yXH&fJ$51BqYH^LpUZugIEj*8q(IK)>`cDw%B#I*zHH4+ErT$-EF(} zV{L-Eb+zrLeY(|_b{DMeX6>$d|NrZrxzF5pP9X8)eV_Mv&irz6%{6n)HQ#gJ=gfbu zaUFjTm%5?gQa99LEV@v1*YUUZVHktk<2iRq2H5tL4A3ZJ$-o@QWG?*izcgppUSl=j z9XPel-~Xj}=j-C3!^ToPyDeQ^*szeQqH)Kf%icI=nY?%hG=wNcF7G7XfxDntlby{j z((jVTR_8OM*kyiR$G-~7WA2MF;(2_&43zS#$z$MhGmAVotw{GW90QXEjmdK}ipSi! z=@g7Qn@t4PXuL!)h?DQ!WhF!cVltT+&24Z5$%$o_l`~2X)uM4D5vCRWt&!Z z*im-BTj&qaJc{Jxsd>ts)_$8%uar>-@*sR10W2@7Dh|aOhO&4N0;idY&-qandr{GU z8U@PYdeqGxEJiI+7Hkt~KhQ0ZlLbc$NPEJ+7#|i#+7py=i96d9D2uDL9Ei9)?1md1 z3^0D~%u}Cfn^};vovHc<5jYyTb}eUgP@lbKoA7&layLM(#zb250Q@pWblBsNV?VLH zW&*R_9>K?!`!?j5mU1$tKq=?XcLNqCww2%c^F07LlP}gAamn-@g533fW#Ik#&RF`) zut}ybfPq#%3VjujGvzbuZZdtmjA2yuwe*?snoQrJQR@4NrO!<7Wcq#!xyn)0w-}Sw z)E8YXj{2U!2XiRygkZge9LKodeFp*dc=;IQx)8?ka<+s26R?h&aR*V?{S-c1-^Gwy zi!kbgR~*adpii1x8-}4z7Mc4MytgbA7cE%0Sl}nMnRi#Nj0FN_N^(LL$fVTz)oXd; zbI~U=7@I<$nC8KvcV=jw%hBVYPriy~x&<83ChrGj3mg7c_-hcbLC4<(`b+dG2On=? z*bhpX*YRQche3^_If2g_29)TPzwz+nlOFG9-i`~a6UGZl^vaJwKg0rx3#%U+FDTI~ zzXCmK#s9k}K1clz_^BL~;&4lVE6em3sL9~(vf^nDz_<`>SX=@A8&>=RAJ3PJ6IT4S z;J9t@@?Ra3&Cg<(I_uj@jagS%M{DY{&O7q z%M%}wcoWM<#uq&C<2(;rqGjk_*8150&s*|*s~qt0_N@(!|4(0h&@G#TaGBuar}_9R zeEd}w&j-sgi)Vi8ES~Z2^YL}y{|O&1Rz%x$!2be1eBmH}AN(K2=e?T$1pIVY<1-Ob ze+m9Fd}_f{ezfQuE{SJD=Tz0THncR}Sl6<>vAVTkb%)$E(GD*WDh^VIARY#Ew6%Bw z+>0p~>)uN-4=6irFyenRbWZ}sQ2JZZE+ZrscWp; z++4G@acg~i2W{k(3m&U-YrJCzGfDI+B6zPz`Iegn8sr@u{vZw(qLI-1atDSPCl1() z<~L+mmA7t5fs3kB;Gz_`ChTOf+MtDsXCdP@USN z4xO2t7VU{1aZFaIXmn3)&!Ho;cL9I{5Kg8#Uw}Cu8w}MFm=nqV*x>kVb$F=yds_(x zs@+4F5nxO)jh7u0{aGq)hte{0jc?%JMLkDQ;ovD*Rr zWU4l34`u)HXhJvgtu^|C15CNRze(=HU{06axv{%;&p^}eo=dvZ#01A>bF=zud!l>t zqKDdWuSQc~hf@Wb{TK4txb8CB;pOcHKWsVaE@(M2PkM=xsgf*Uxa((Y8YwXna zHYt@|Cj9*Et8)?Ryw9!k;1PeFYkLkKncdA6bTq5Oj&3EoO-m-)F}=44_iUUl%>X3n z0^YSDwF|4u``+7?8+|gKekMzGN&9xzo;dRBse!IJvCgK7u2TGm`H@h@!71@g@o473 z_={873rlh5$m!Cdssn=!gkK#mad`L$oYJM=<+N47SH1le?HQ1EabgeeI{Z{^kAFm{ z!)L2W(c=V#1>!=i(3= zW)WeL4@6+8C6Jx?Cm60VBDc&gD2v7oE(^I;k<+1;6wqRt(umm?kkViUrr5sC1C+j=Yfy>~I2yZR9mK2pJCk4Ewf)t6XNTc|PnH2G> zNRjVq(x_5vNFleL6yeBf)UY@yJJZ3vj*r#2fW_S=P`DfA|5n}5ZxMin`nhg{Wb|R@ zE*NC9CFjFM2(oVx8A}~jxQd+t;=`le>|C$%%(IoaUnOH-`n_rQg}MPJD>vajc_|9U z23lGL(amEiie1ZEq%X}$)Urj_(gJmjMYRp;;fN7X+`hmESqmxh1-i(S$5v!x;sPpV zrf9Go27+kC;FpF#&Bjt%TPt?}eOdt~6RjBKW6{ceNaG^#0K;i;fw@{^6nRm#>}%d=y&P(Z|LwJG8}8jFGw-DUSl|LCU20(!mt*L64N(< zGJTvp^gpV@PcR&X=58?Q8>CoMh?8TwOwegqXeN^)pIM;Pb0y=Ur-D4n*-9SryL5P$ z=D$n|2vINSB6JLQ%gX;Q4Y2I41o+n_lSEDJD_3J!)Mg!Lh*tfd?yg!Ms%tc~nlT3;DQ%6gNc z9kWPLek|j%W@0sxwGygiEoAS>mNTj4I3$ueG%uG-*HP}Y%OyO_SL&dH2m?HTgiMR( z7nhCygizV~9!EvLVkdM&x!fz}ZCpJnJ{lNc5!wI~eV9X6$m}(FS3>S;OG?@s{9=5V zue3KP{U)oCuQcm8~r zW2H0s${0n0WcqG`+zP)k@P2)tv-HV(%n169LT=|M^v%VJY|6(mOqZ;D*FbJGW*pD5#)4AckMQBV zG_EbrsfXbW{V6>5{MZ9I7J~YqS{(HeB2lvyHgGgd(Y28^5=wEwq9qHWbmvAXPQddM z&P6FMV9CdfQfvSoL=nT|KxF(@Zid}VG%Vm9o10s=Y*X_X zj+c}~h%|`(&+bd277Oi2@Ri^{fzNyK31S4S2W6TEG+zfw6d%WO0P(ki{vIFpE#>b5 z{V3umgEGDcv>zV~2Z{d_sBuIwe#S6DGi04LK}0orR0`yroEF$k`eHPF6G~;-w(g`rXF##wK`O_9Z4vqJk z#ZR<4AcR(;{Gb&dMSLQUh$`^NU#OOVpXY`}6j6}Ih43Q8qZbR^u!y?J^|OALs4d{H zbHgHPo9k!%R7Lw?d)%;yy3h49ewum+{9m|X5%pQu&-kd^c=$OtETaC-^)o(CeHZ-q z-LQ!Ik?UuCzWN#X-@0KD^@{6f{4DiH@UOdJ5jEuc8DF5z!`Lgq$8iyLk?Uvt9C;t! zTwzW9If@qCXrj_LXSZXEgl z_VHPG_!!6dOMLt+AHUGYSNiyMKEBT4`CfCg#WTO#ef+%^PkA1@F^=+o?c<;J@z45r z8a*|R>CgE14D*7FIH|vnU*O}H`}muD{H;FzE+5}x@vPqi;QtE!Um*EoeuDo?@EMvv z3jTxWGmex=T(7_{1)s0^AA-LJ^7slR@h^b?0r))4{~P!}fUnT}8Sr%Y3I>#JSPg<- zgm`>4ll0^91#SiS63t%>{!j4pdld7}2Tw6(Ys!dX9Bkikf|5d zyQ;Z$ZNv7Jjji&glEC!xxw}}*;Ni_cV_&^i^Z=aA@4(9dp1(D9t*zTS>N=XYwdUt{ z)HS!%*R`~0#H|-DTWoHY^W9Jf)q=+L0*L1u*seF{`7p(o%zmG_%ntVZJP=)zCvExJ z&|Q-$P5W8l3rwy)Xz&7)EpN@U<=uR}bzR`*>#ghpH(zgU7rOa+tGm$6*K4nEp~=^6 zCfDAf+d}h=sl)lMFbc^oyM0SzO;clCLu1?0VQ+M3z?zzhmDOc6Yb)1ns9IN9S|Kla zXg~+CT;9}Je`_^h#mzcstR}yp`}K-Ze^)Hs9H^O%0?<9vFCOgOjD8y-T-uG;M41Sdgr2Yunbg zp|RaDI0?g(r5zoPZArm}gKKwsQ3@_vFhoR%nU-toptNY|wnMwLXhm~-ecASQ0j;+q zn|1B+L`&DVZrI$Cf|jSCOw5Rx!83V*HMC7EYwj zY8%(DGIgtC>Q+Z=*LcsaB!iJB3rj)EQ_%ANtD)uctM9vpEf?+YD!AO)_#WAGrTeRP z5_q}%O#U|i4dO1v^Ke5W;k>Hg+P-V<%$XZ{`LEAh7#KG@baLkDK%hDj9#}Uway&CP z)OT|3_~Y5RDtG9*b%VJ@m#Fc5UwJJpxPR0AW$Djd6)TPfXcKbTl;vr&)Ii3p;M^(4 zr_H^fuPGzv`3VB14yp6{LT4f>kQ;~xdR6Z3__yMf@!VL(ZRvST`Q|HUj+HzyA(j?9 z+*weN-5(fWxim1oV6Z>Bi~O>1#ql&~p?~PQ*|BKsfu@s9$6hU2mc4v;XLNRYzv@OT-Hh3f9`A38EdO}Ze*7P*-rrOW%9>AzT^O4lbIR6vgm*};ir*hU|2E+J zdNbpp*!;}zqjW4;dLGLrfcN9sNa-(GHp)G;DlJyfq`D6siS7y@e<`29zYn!XqlY@8 zyP|svngZP{`>|ISE@SD6j{!2D8>lU<9je}q&$nvPqH3tRyAk#>t0S=K$=fa+O#xUa z4Gc_(jcdC2NM27?&!@`pp+X zvF54rGt~Kgz55TBl^matpY>e4X-;gZr0U(N!l4&>o6@_~KxRHm5{-F^%;8f=8!&ruK2PtJhFvpm7CFg8FO%_EP^zWJnON-ZEoILk|UZul{LDJei#SCQVV z!R#ncDS4C!B9b|Ru(Pg|j2}c+k)NSK?e!YGH&cV!YxT{9C?o+YH1Ky5X$&?eNs;&i zq_Z7Bu4+)KmOPY0mBb@RsVkIfBt`mLNvoY}OBueEJcQbHcn2veznv6`c90?;0$!Nz zZc-qv_K;rh009a1-%EZoY+mZ{{iMZ8fHA6WZ1863Gp2_lK*u!(Dj@G?WyoODS%wVy zzW^em9lPVHQ@cD+(FI_h=$ic2bw!LWfapXQhS*rjg_d$1(|hL5nw*`>_1qyw-<@kx zcnoaGP>vYlMYBDe*chSwF>;rVmwSY+K_>-WFf0aC*t^(~t{Auvh z@KpS7EteKV{PhSUU5R>-BEC$A6OzaL3AGE};y~1w7fLQGXgEhk;&n7 z0V!JILQ?e9MWpB{j#w5>762&}0}^gw!t3#&1MtqAa3aS*pJP3wO>{Uxq`hbard_7P zSO=EZ*7r-4WuY{h7Se?8Dt0zg&@lZ{d9Pf)Pwv;#Mn1q|*X2#fVPd#W`VSnMPTq-4 z8OzXT(so+X$XyMd`lO#hDR;6M7 za%Lr`oIl?e@{=F@@aG%FTrv5|oPe%m`idaOKJq)iz7|WL%qb*Drthv%>U+}CCv$QH zea}Fy&R;n2{_@S9m8kE9T0U9%mO^ec_1$jiGvhj$zI~7@A4U0|vGkdDfMoh!gxrQv z=(`eYpy}VKXQ}VikQ+^XJ1u>f^5T+}uX~jGzHRA?o<-mDkgL@3Hu3lG#RZA_VycKs zR=(Mg8;!nJOCP4xi28Ox4iENW&R@P~EPd!gaS{CY&)*jzSFPi1;@6iuJ5gUG5tmF~ zG2}*5zMYo7IcL%L5y*{Zy!@l3k8f{uEZ^7h!80LFp6u z{$=QJ>U#knTka!}JFM49#?z7hD?ax6ya0tV^Ncda{SF>m-zvzRKp68a#)ppj96RrE z04@C|s1}c8=Y4)L4p+gQ`vldeoDuAvpvq&>$9#f{SY$t_b{K$mSirk_Y|1TC;%L-6 zbXZC{2LE`N$sSK3ycyyPhvhO9USyr$!6Y<8ZLwnUW4Zjcw8;(2P#<>v)SsP;(zLqzfk=a{AMfubx-^h{LqR6 z6&#@AGE|l;%ls};mw^8wCY_0&;p1n4@3rF1K^DsMFcRC(j(@L5e^^mp!iCiui|666 zIuGy6t|L0XAo{D*is!q7eb|XSza1Gz{xd%QF(3b=k53$Qa^Cy8f8_KuFix+onE1q8>knwT{Wu6RCPQ&P19bow|pudCX zUsu<9bEAViZ*1Gz+}@6}Ee=9`B+S1L-%oVDLE^J;#fwoqQK*ZG*N@V5(bCoHtE1(G ztsMMdR}DI9wW$IdaZzH(i4>B?)0F)B8cu3KKYp=Mp>%F5F9m5E{Eh}6W&MM{sI zwQJUGs9tS{tY2AKxz<*+s&wN`>sMEXKd->+P&D)z>8a837;F`_m#&$Qt&1w_o$R@1nTjQJNVII(OZ+lJg;sr|@8jH6q zELyl=ab3ga#SL}yH#Zb5E@~`J;n-6+_7sjig=1fN4v;la=*a=PHvT__V^3nZVQ zy82s_=hWKR(T>yQjUybPIdD(-(>B~CR z%;|6J`LCzWsPoYpvx0qJJG#0ua56A+>%c%yq{uOLUh^9jY3PfbiGb|nMXgTN|e^op?vorq9sTVh8=Q)`4j5FEc zX#EMoX&&gQJ!Q`gs)5hoL+;Y14|IaQC)BrY z>H|j~D*MVwCy(_0WrAhToT&yT&UAWZ?o*HSl*dpnb=4(rzH+GNir95T`Y#vU{&BWg zy0lo$VA`QT=d#Y12Gz1Xy=bQbHIUz=uDqo$+B5x)?!hk9w63SL^7ZHHnhu}B&-$m- zg`4{RbLS@qryLjzZ#*8HvGIlTa?dZjw699akYqH>SU%7h&U)dc!R(?bDsntB< z0_#cm6?be1zb_+2W`Zh!-YW7l^e#SNW8C#2fN?EpRNo$t@O9*oej{o0tz$X4Ys50s ztTT6{h`&Q~j=B%gbgp9?i7s@8=t8@XMVCQ_P$AQo=G?tEa05nzcuL_B?O9qodT}h; z&Hg*JH;8r%Y~C`$!4Am~$SSE0>N=JTWr#61ICi5Kl$@=VVt|fCDTb))xI+lT`gip9W>R$w7o;)^8z2CT*lxHTHmR!L&F4 zIt{DGXFwN2{x^(={#&pjQg0V2(ti|`@}C2xJooK`GnIOhJn~H-Y14vG!3}!;2`DCw zG@@5l%q=Vg0v5!=AS)rFWCI+NTUIcL$TEuQr~$6@BpjPPnM0MGJar`HP9+hfUMZuF zn~sFpy1b~mI835pSk^*RWSgB(%U%k~yp8(|DmWS}>o$xfdn%jsTu-P^+6i!b>cxo$s=#3A`yKjoflAXNq0{IolZ>9CP%aORiPR86DL3KEqgamrw35Ay;L^ z8}CQpk-paf{{}g>Kg%Iw0F-0oFYvMD{s6fs3QRc}Gg{7{?*$mQS0m2v{P|uFIg_tE z<&l8-`t{X~Qr}-%`ly#KnZ7SUZnYEb`R^~^pDcaEgU}_@mxV!G=R|w{`}MUz&eV6Z zmQ1GaF32UrCi?Y#%hGq@S@iWoj@TW)^Xt1ZnkXNpfVgDkyBczL>Uf*@^?eO;roNYG z!DRZr3%O+D*{^SUZbBc1qB!d7#RtF))aPIX+km(jEk7+tcm0gdRtLfVvpe`Q)FDs&B=r^WRqnGXL;anPe;WKsEB^02=_gBh?Rcg? zkZy!BB>q8*??+Ux#s7;D1r6a;%&VZ^u;Nd9;-^UY9yF5+?Z@^yXz@efpRxFeTX*We zL|p{_St~y3iJz*7QEWkfIW9w$c;cr?{_JlPzuXfamUt7(s}?qT;v?!75AV$OBf7rC zEYf{Xm(TE9b$;Y`Tj}`>`KXUS=;Qy&#~-!$iAevH#Zw;*xEn{_k7@jcFa9+jFB3s4 zVEXZ#7}}A~0pAX~2OnY(uK-UKZJNIp{Erb3$A|Ij!T$kqztHhFgZ~lQhgeO$1-xT^!~bR$qTe#u(Q6|a z7Pno)$ncB3V=*@wmXSZO4+Al-^???XBM^Ns$n}kF+^-Ouy_KyE0#>AECa!L^ z5RuyIvEQ&TA&+m{da+TOLPr7_SGjK8nsqg6OE+w&T;~AYu*LAc^&2Wz)l|hcUNe7T zkvM?cYHC)MRpP%5eiL*dgA?F42QsI@Z6;Cqs`b_DYu0U8v%aQ$RYG>7|_ke}ddv?epp&kNK%CZ}(S60+e@A?g;s{q(r zxC9$~OMsD^w`f5^O9~yCLPw_1k+Sct_f-pJU$wBo***6L8hDsDRPPrjQPMKs0aAG7 z+qcF&vMwUZh~3e?#UlW|uzuUtt=n3M1>fA*+Su0Y&4uE2nKW!b(i#Xs{nqwoz}l_N zdI|CFhkN21w$*zRG_*C}-q_|1!`Xt?j$}cFjkobi0*^*x>N9DeZE^RU0)?AflB>40 zP^b{MAn^I?EutxiNBV3=J#Da?BR2-c$MXSl*tdvo=h^mTmG*NW{NwE4^>mO7Phh1gn@SE5BZRD+iCj8n?!I9;z*QKf6-r z0x4oNrO=Ts5-^!X-(+DaE59i#zh3a@Xi$~jx558kqa)>~ws#F3Dcavvbfn~P7IdV< zkARMJuzN#QkgA@y+ASE*7FEZjJGvK1@Tx?``2Zso-1iu7b_JsnksmyZ`{F*+9TJpLRxfec@<8Z0&~BivA~If48^n$>ZS}v6r6& zZf^VwfrtACBPYHAjAKTh`qYA0bl3R2$Bqsx9}n~#5tx00lXdLQChAJh9RPxE7Bv05 z2lc;n#k5bCJ$`)OrK_fW>1eu(q9ZEu5~3p21i{hGiS1~*Z3@eE%T(eDH9l?#sJY#N z8ERn0kwZOSI67X+$uP9>8mETA&hpNCdV{Azd1%?Fx*RnvEbr`^8aTkPuBpKT&rE0g zA49uOIRd;U5Qo5MUVgV1qdD&OzHw(Fnc-+AFq)8s72ep?p{n$ztN|i5?=8#dyM1a? z&)1IjmSvsE&YE;`Zj+k3zOMiw_hP(s0kxSCyBFi7x#vjP>F1i8ia1^_?XCRHbAe9> zb2sYI@?xKwSJLDb75T7W{bG#OF}rTZ=RC|5BDcFo`||sb!U+mr(ZG zy2~E!ABUFTQ<>iHU??*$2afY{2gi9WaGWb*pRWR;{ibJJch2;O%L;F=px^h(?F|b)~T``jd z2kX?8Gdb&pi{1LATlMSudT&$kVTI9oMZevG(XWRN{<51e1_$#*D-LL=t%a8Sh{ye>x zcFq45l_n$UamK?taYts8; z&W!n&ir~RLmDe73BzIR{aq`nxPd+^u$Of_;Yih4vQ!~#5Gr!p%$anD4hkItkjvhTv z#@w42Mc;oRP!$|d$JqvE-8|8^6UgJEvTmlSr_fsi{ahCxLt8v%t%Ncg|BNk?p`R`H z^{V_Y4Q8S>0UpNu=A6WuH)r^4j9@lKFdL_0Hm1#7cKV^N>2LJB@if{$)JFt+zo6E8 z2GTwqh)n>hoO2}dRQAl>1L=nY2SSI{fwVt|hG=zct*m2VpsX`zw)KS${=?3qU03N@ zm9C~7e>!$^|7mw7uzxafy)k$3h27o1ArwtMq+kn<_5v zyL;;Kqfb@Nc+OvTonBpta(AJhH&#yU_tv25snZwEkfhwm(DX7GR4N9|2Yp&>a<6xBL%BLkSEwLY%)) zAPfth?w>OLP$0bo81`V|4=z3HPxjt{G?YDe?8k>04isk=DZ&ND3S!@+BG;4*ge>NBTliFc1}H5h)4{QORH6;0P1| z9CqxlVK|ryQlwu_iu|u5g_2dID7OI8fZ|$19?EVYMY(SzMfgpm&_e@64F3@66tR^q z81yYVyqOgFw2-2l+encgo15j_PKx?=k|O^dq*FDZ3x(fB9>BM|Nw3m|)0Zf9FL|_s z09KIyN68}}4p{1cfE11MNmAr-PzaWj`_G?n;DvWD|0$!)MRR?Fh<2#v|sA#c3=w}l$Lf;JzlHM8k=g=({)5hl;zy9cig_n zz2W;Zy3_Zk^@Kix;>U72f{*0fQJK?GnR7=1{`><6@(o}lMu*%vFqTTmu+n)GTQNe; zZ6EMvS)S82ynvyMK+YY~43l(WFs{c^7z{(#p(RzaRv1?Ci*#NX`(w!~-_6MZnIx@v zSx$%4=VF})=FwR4khMbR!*wX9V|b&L>L$BPXMrg;mMrXQ5Id8!8kIS5sRou+86%h{ zW65J!HR2;zBUfh;eP?0#Y`v`Wooga8Q3tL{i$czI42$p;_#qvC5|r^j({wVLBonI` zP1a>%mH7}T^*lfxtI`)qu__UkpNZ8<3}mCN@Vu1xt3fGG!_?IKI4M@`ACh8~BRoA5 z!*(huRy8~%)t1ZA4WQGYhY-BrJgjn>e*=_yvQcK1rbgCQ8amEBT9}aAX_=20Cn>8!;&sf zyG&9{r7ThmcdjNXs-N~yiq%qZ_~=@F{(+u^Ll-1<7$#1cbS&jgC6Q#l7$UCYQHDO` z%le=h#AV|@j>UNN{Rb-gn4QoOm1|#^w{Zti@zES*XvWHQfk|Xh3=Mfxl6HiD7vy$H zBRWFT-teL;Ma~I@Vffs{@dbt%x#e2UEqb0w;ZRfdjiZ!n)pD*D=zGLv5}sW?xkn(k zCK2uWJ_4VN4IOeCa%}$~J~Bo?S$)2J*m8W`dl7}FoQx?g=g;@W{Lvj1m^CwzuZ+PF z^eu+m3dH%HzaG0SeXI{1>)|io$02u%#Crev_5I1xH%W^o)0Z_%dCZ&|t$uyokTdN( z`7HVlLT-~$Vo|@o*DZZ`;EPLEzO>7eo4xky+Xy*RK0Mq<)Yk;L^*Y`retloJ^vO2} z2q!Dw4@OzO=>>`MVL20*OkW}7MpM2$mOd&Z(O z7a?YJCnLTRm2BLT5z|@nF`tas+}`d$d;hO7q0Ih0flmb;{DfPGB`-Yh1Hjg7c_)Z+TQ?8 zK-9zP+n)Fw^&I#-EB(u!_zTo;z|XhhU-QIYqynf{nH4{djiFr#N6e>yrIg>iYH zm&cDPYNHiD7d$UhG4hMS*IN9w;Q95;#8-iDviR%48%Gn$%rD_0mN{s)&p6d##fS8h zEv)sizs7p};479sJ~zJZ<8715jQ^=Go+guxljn|GH^&6CDH~-NKgEhC59v#VDTS@e*!*y=1_jL#}8!58tM1}7qztjp|8if z*4S`UTXTnFs+WAZWA&F_;OWaZ!`_p#ym&1j7tc?aWcJx!hRtQMaO|_ajPw%hJL&*a z$r9{UKfhQ9`wT3@`m;#;3@n>0i+u)`MHWSM5*3@&uGQ#bB=jCc7;a;EX>zN}$m*u{ zEoIxcxW^CRm*WQrzMgoYhArOk8~HE^UwmjI9A`fVRMVBM=r4I{QkzaZS6`QTPVdSSl;LqV%zps zz;_gb);D&Px3}GD{8C0c8Uv#mmz}4~FQ?2erw$mT4j7~k7zpUm!244N43b(kOdT*t zju%fIFlhH2%s4BiKXt(192Txq2MoOMbPKuvb`J==-Snvg2JIsl2G*wo&T(`gb-*BH ze%Zj<%W-c><;EJzp0a1~v~|FYa$85|$l_k?yC<=J03{1E`c|dPFMFE8WsKG5|KrRr zx8paDdGFc*1JVAj9x#v`&T_y&;zvASFj$@z`*@5H>+Tp$-2(W1xq9qLfrMtL!)MM< zzpn510NOu&)PV`Af--`SGp>E%$bJ?6($UcKA1e#>9eef6J&%7|g?R(1ryT5lZUjd{Y$T%}o0GfvZ5-qxiT)ZxK*HBg9RB2G1+7lSRw5Ms#k>Xf> z5n-IvTGdo?ib?D6a^e;EnH5FaP zRQXYLU`F>XO+(c$AKg2UU$E@-zOEVFFz?&-;!$;KSs-$1w@y*plyPQq_^EC+`_}%Y zO_4mNRt3xZ2lsbfoIO}DT}&wF?&&;1Q_7`it=id5-DOLjTQ;?zHuTt&`zfEM3i}T2 z+#R0yLI?*C#>)|dtiIrb8D|Pq;DDMjxL+MOnfKKGlDh_$Uoz|{!qW(cWM~{9+F1i{ z>}QDz0@QnGrwRvOc%*4?f27N4gUFeDY0ra44xoM5iV(AwL;Hk+ zr|wb91|w6w{CM)!h!4UTvsybiemsn7pVa{>8a1#{+XJAdZ4B783ha0Q^emu3Vdeja zZNgEb_<)3R-3j=JvkULbxHtX2wC>P;0O5)dI3n~DyO`-rp6hJ9au+d+JT~ZM!yOyk z+#sNZUfGbwh9eMU0#TF=VC+T$3n5CPq(~18fc!%e!F$do1p{1-mGEyK=N=Z?vN>UUqMhb++b)-OutRO`uV`)UQxyz*7 zg!4fmVZT*cF;l~}Q0uX1x4S3q3{mlO}A5Lm>8Q9_bYhQkW)WJIG@? z+zU#Rw4WxAY4T-K4DTmNG5q^<{4dD^w{V&~=FFR*G)1jT zq5m7C(DQ9l%%xwELjP|-w?vitt&Zm&AoD?p!cmT0<9Eyt zHF6!do(WTA+FTvV;f$hs^ld;>eZ)?vWeJ03-p2iF#^|7Ey{I#KVVJ{0ClDD^m+wFh zz2G_&LmXFA=8NpaQLe=*pONG0YL~AV1vYU^X#6X+oKdle6|xNXmWAX=UBJBgD3|F#AVE- zEg1>Jg`M)KxZ2FSD_6z>fkbfvc-kg7;H#YzLoSBv62^`h!$q8eABivwb}%eJZhw|! z^JLp;dwU)3T(+$WRA#90{%0eirm0EB^DI_(|$(;16&BiOW#m1hx5Zfu}`K$7QJR z!E?~!`%M&R2=DnUza2l|i4TkZL{M0rNiaws!5Ozi0O3<~AJ<`Qze}um!i#45_+lS_ zwT~y9%Q&XL(Z_H0@vT1o!xqmqb+5%!-$5Vmw;ubrFP^Vz#!=r7!9R@lWjoUP>d(P{ z3ZFsE{}KKp@DFHywD2frH8>kSiin%FZH;jU9VOGjhg^E+FQvDQv*(x=7Qhy! z?C9905)ERfE*^I*M%n>|2(?p?Z|6Uc?L2=9k7Z61X$&h`ytQLu-K=Q~*mm_yc)~2A zC!`Q>Zl0n#5F}&z&?}p=eCoSyH3dvc0h8)e_rkARUb&%0o?WgvS7#Zq7oxXrDl`R5 zN&%Bn_rfPG`F4#fTc%M{mQPcbPgB68qyS*wP4@bJ_j6*jtk-P0P2>N(d*Pj*vEDUg zlB51zg(f*!oCTZY2#g3$I=y^PY(nhtW%}lF+Q$R{XD@Ez4i>00!EpfG2vAAQN`qCm z^JXpW8`yawW8?AAtc5QSfHTPg;EV?V=br}C4&ZL<-yiN)2d3nGdT@$*3Rd(c0D?2Y zvIZLNW6X-!(??HDbB+s0LJpR5h&p1;S75|I*QXfT{BPcZc(>a!>0Eev0LW zX{#Ag-11Gkf1%jUuRnQa()o+}$H{&0u%XtM6P?l)!2R!XH#dMjkCnZ2a>9(M!{9~H zT`OSMk2MRam-{=L=ESN6AoL`_MbE$RWK()qzuW`X*JdR?vA%=bm1LzBt_Z8{ASK%&(d@{f(|S&{C&YPgjqzrNZjbqhC9k*&m38VowcD zR=ipKLea)M#s9SPVYD>E9B^4co$7yb{~_9NjsEK8{3B28{2qEUD?0GPBNum*r z&T-+;^Y@ko`X)sG`4z{y;ZXIsrs^HtuueHH`ooi%XTlnQ#t|_w`VW17)3q)(J9bE5 zV7b~NV#b*XuGG_gX#k^LB$iw$$x^pnhO%bQur0aXhu@&Ji$9STTYIOP+5MDbz0c`` zsv{TY2HHZgM|zIE8ebO3bM8ow9}5&r?04ic)OmfyF~^^-rXF{E4v_12ucXZk45+y; z_VG4)YEXGo*iOfpX($lF-nwHRkJk2#-w83{j=?-1cFJZ$fsE{+vj4D6Qvm&=wS+cH zw*Uz@YLXbxTLE)o)!HH&&<}(U5FH^76u;nE#1WYxL6#9xuvA-$s2j~?L z6}GIeVmP)ouOUS~%Se$=IVm#X))v8D%Sp5K#kOb;*$NHmEqN4j9pj<*22vDOw!m`r z1*p(Bme!6^hjs&?WjQ;%h_xzhM=YY-8SOU~{ivqvGT?(9F%KZFG-pQGBBA~nM1 zljMhvd?z7MoF0TCu`F2_$q$i7E1%TizaYgRnuS@Ai9y2s@k|U#?%Qp_NWTu0>26^- z($QQ3Ax^zW$C+?~JoLY$!~dNW`Up+R#2}spO0!~Dk;fokO$t3Xl45Yzk|N*Rb@;uc z$o~LnFzW1m@|N#M8J-KM6)EITfKG#)m?y)aev#oA^uN$@uaaW$6W%l}4`mgI6U=TQ zT#zvc7ZgAmDTWai2AQ24b)51TxQVO5(J6i>v(+C69`)y9;yTKma=CX9H8^V`pIS_G=qR~wp1B{=m6!n>+ABLRm7)Q4epV7#1K$|p7M}3><@wr{#ZMifw z)QvtFvLC?*!@za#haB6VyIcrD~g z5XSyB^OE|o-BBaISdP+8)8Yjsi$;s_>31fii}9Jvl8+hV)3&XluA>g{9Qp6HIx-B} zGb~^PtWPrJj+?L2I1@12H)yz!ZiIbf}T$fD00WuP?5w z9|zM!l<%9MbPOZ^ZQ%?bQ9tzXVKMB)AV+?jdKrF}-{?CBG6myzQ(_E{1WcLd45Gz~ zND=lktmZgDH3X+10EiJCK!Z96fTbMoScBo3nwpB0)nzqnaW`qzy2{cD+&AnGlJN%1 zIoMn*2Nt7YEB_m0M!dpd*Kdt87)>Fe!sDFuCYKlBIALoptpcD=Q0e`|a5q248QsHr}zV?N$fTH>}|j@u?eUVZ(8U zXA9K@C0MP*^B^PGZShMLj@HBtRTiE_vBpFsFPjUPNEw7l8H6z#{00?mcp|#16KI>1 zK^SA1WrG)qZnaSgcd=RQU{Y{O;Nn1D;K~5@GZcQPQUML0d)djBMN zAw&Y^WIVE$5@3gjzrDG?`qQu7ST={gWfEC53x59KY}_B<;cZ#W*X-%=$9(_hP$Lrk zFO$fk*rV|L_|40DMsumk#rPrmY@0)-jPoF5e!OS4(k`G&b-vPG@Rvc(#DR7Fe!18v z<*pk+?pmEM^PpQjf*dzc*yE-i>mX-484U=i#b-2fw`(~NaejR!{9bs_Chq12<*qZ4 z7UgcOy&3TrkmK*WEU#=(f|B>kJ!;7@o-Uc(7cDuH59JQwW9kmCdK_}HK}yDQUxweL zWAIau<0c8qXKxN=Hf*h_Yq(u+m0%mhJrRv_&qcB=;{0E{aG`L;3l}XY7T>u~M8Bty zSu1z9ffH#fLjnQ&pX8w}GrF6`Wys5#zpaS(n^3de=jSK;X~EcAcf^;7>u zk^i!*B<`Z;*+06H$Ler>#rv&<+>C;@9uvpZwZ)w@;#<4yN)Lr1u zbHl=FpX+D*B01v!fEyN8f9d)ezeMs+y!V9F7d`P2r+lV@Sn7{?;>W2UdH76`yh+!W z^O?@{0r^)fc`oFy`}i={2ICmdwZb^^fCIXYJYP7BBfr7N*ZBBbef$m|zu(6{LfrhTBW)JFw9UPx)qt;_{H{Esl3Rz97Ox39S-%Z)!Q~MKCor+%slduy@K zlxn{BQlEvURP(*HSY%2y-&>1Crc`WRt2GuOxfhNwmJ4?(w(`!K(uNH?;*F}RzIkOM zE~~+KtpLuUd~1UpRM}d$xuww;xV8?z58Gku>+4$AHMYl%0$kT)o4|m7ePe3_?O$xD zYrl2nw)$I*|Ay8U!!>VhY?JA+s$F6oep?)v3eSZ<7Q1!Z?Ty4#aGuE|;~hN}oO*J# zj`*Z%H`cXmZ**dWZ)lUc8-emB%&o?jRdsP!hE;Ky>Q>z9b9(6Z7vwO|!r#Juo?r>gN$539dLq(ryk1vluF|;}@R)pH`MeWo395WAA-9M=w z4CKY{I-~2}D>nx@bq_>~I?{UM$GV;{B^-)IIszz(I*y#-=e;{9k&4vDmzSV+6Jil* zwY5i7?(X=$uD!PfU_=5fP^EU#h(s}TIfg-&9SJ}pfc8*3kG-0CxU85em>8Q9iyWs8ez0Z1mS)RV1qLYm?RK^zz@bEmM2S();Jc-WThd%Jee_uIl{TDIb{nflFRK8oeUx zrPWjac(i!RBd5lNUOsyA5=xYGc3oN$FX@~;W&hOZ?DJl#s%V}Xh<6PJx)NGSIv<-F znNkuDUw=Dk4qj|AXUHYQVN04t(JP_r* zO3L}~X*)jy10SxT4*0SA=ve81KLShPLH_XqBka{eHp<@^^Vnah)) z)d&UQcl1e`ApACqW4)9OYU(N8l%R6{3Q&*H+76j+)tNh8r8ztIrteF;H*_D&HB{!@ z{(+pGMFN{02|-6?XyYL` zD$0#PM#3ZlcH)(al0wf6Ql!r(#ctb7(i(*=bvVe)A;m7E06I3yWl5r(A&7$E2YnM0n3d#lM0*u!opMgyqTSY! zuhmECbCtS@JmNn<3Vsu5t^7%)5QSY|DS}iAS%~m0q}M5RE9vF9=Y$lA|`jTDt{ zBYhw2M3ACTJ4jKeJ4w+PJ4sQ9yGaq>MOv%`c*3K=`^ck`-K5pZ0id8$d&u9Y)cvGL z_h+OfFvUO$eMD9y`Rj(yNvF zBI*0J{S3$v=t8-#kwUHjWVFLq#t75FvHxgmB(x7h_d~QR@@%c_jvIn#j~z=xb6U_eS=G@6EU`y*q7x z=p$I#Mg4oUdOX?2qTU_?cZvEt?duXn^)*^G9)|Cvp)0O0S#zBitxUYoaGYo21!f+@ z3!OYOtDF}ihVy|*c|6NiW`?};sLa(cbj5HKbdOGVzn0?zpL!o9Mf$@Ghuk+vq5m1s zEgw?qS&6eg|b5q%k4=b$cw>zz9er=d}40Bjmwum(Y?SKi?vC+JF~&qPO2 zKM|ancmXOQU5j@jQoI1|(!3b_LVT~5`>u}vqmCyUGWbFCH!0eE3TcglL<~0Ig_`_k zyhxMQv;Cbb4z2$@&;f&Bxb+Y^1@#MAltQ0Nn4mH5+1dyeW_FnIll9v^rsz2Gc*-J) zyglP3OWu}calu@J3V9nok93B=qn|4*Rhm4okWuLleW@v`A8VY z%2X`-$b1u?os|djua_?qiUvg%IUrY->4xzQ02UZ9tsg z`SUH+W1srY*TT%#ukU)ut??@Z@7H(8(r1QEGJU;}V_*86U*B&neKHr3Aep}Z9;LpL zS&4R*xjcftD#(qde0wc@<_#fP`5qjlzCKHztR*9qZvb*wvxhl<`^~*PQD5^ekgR;y zK(2I{w&DG|%hHGM3*wULyB~6+X}|AV`pm0PGJP+NQs0FIiTYxSj#$1~kQ+_;He32; zoJC*TDD{2W(uW~CV)?!axzWtuNqAOeLks6Gnn+v(|NZkf4{~_d80P%rrNz<*uefCT z?n2~>VcLd|mw&YM;c+^mz8^!bd=&aFnUkn59?K)@n*+Jg^zRl+AKt-6)OS1NMpM40 zEPZ%A7*XH%Ah%q{+r-}=*=RJ=zYDZrvi^udZZzxjHcKDA2#HIk?{3Jg(D63$m+$+Q zz9m|a`kufiWSysc337ZU``vdCFwP2`b*19()H0sKI-L4`gipYdi_MeQIxEES{uIR4 zR}Z-t5ytuP9!Er;ANu@bO}wqyIRtsm^N+uC&zB|2cYzwm^N;r#29)O?AF_CU zZFm@b%nb|6i)abUCu8qv*Nwy7jxxXY~rfeu=1W?oFU(4yR7s)zi9J+4}Px|{{#5> zP1)4{dH6qS@jrF_tZ&3~9+Iz!{MKunT${@kKsy=-#omLi!FPOJT?m8|N+_{wBnB}s%F0SKwx^p6Qq$Zgy?$-A-PO)j)?PJhZ(5}X(3WWBRhtO#bTNu!0x!hIN%SWw2p- zHY=Ido$^|)upQ^Oo9i1#uxDx~NQNeN4|F6EbP?Qjoy}W4i1AUUGGqJgr7ko#q#L~X znDeKG!mV|kceJ;@&7!n-!1(Svp`#GC^xhFYsSB8s9ArzK)=Hh$!n;cck6EP*0jCTB zn`fE%dSUpKA>f)-e7w8ukun7Q7QgU#4FS6+o17mU-?bxKj{0}?+?L)1i_UYu2+BJU z42Ef&VTs>V*Y9YDQRJ0!x(z?N!Go>7eZ8UFz+s-Z2^`+t8904yp!9TCV0U~1uGyU+ zXR#QUldC?iW(-wl?hMGKzo9(PD#oPuDxAI=S{cZFq@$}ly2m-+6zy4dgy)ZPdk)<; zDSD{Qxd?aQE>)0r+?*H6mUK>xiXQ4P;ayJ*RqeiO>5)mfyW0Xi%;VUrfn{&L5;#_b zd>*;$p5DM$OPhvPh4KpId{HPb?acVVt8%Ky37HZ7*kDl2jyd%jxT|#9{?hNA|FOZ$ zY<2iCoF5BB2RcH%MaP&=ZX%!KICF&%#WQ3$&y?g$Se42x-D6H>RpDe7PeWzMxvZ)q z**JBzx67Qna?V6$Tc@%nCOMUb-^X3V5dEWdp+LHGKF9sfb3}58$UW=h92AoOX@K)t zk^v>Bhn%BE?kOWD)J;`@vW)iVgaOa6_}rH(&AI#jKxxjMwK;befgSP04**~3OoM%6 zZWRzUoJESwcWzA(H_h!19>3u>2=_Y#N3=|1_mEz&df1;9Jj;A%%Y#iSc$89s2?`bv zkQ)Wdkq*uR%2_=g+dsX+Z?v)sqG`vXatd{6$6X<CfjHS@1qw6?MMHd=f zbRpoa>Ou`2T^DFwli#{7RLRkWxhmyCuf5fBMT{==km$m=eyh5;g(>YdRqH}OjYXHt zbLgPU!$%K99`WEA44$qM_1FrPqGF1TMZG;9xtl7((0jfksx_k|?<4}Bjhu;v5b9MX zik?r3)e38Z%F1=}%tY0=AZ5*PY?)?ap{ybg;SH3>!pMb$^0$!3Le~jO+y7k*humI< zW5GJWaL7NT!#~Gx$bSKJ3*>us_|v4&cLFpM3*rwoJxPj%a)5M>gO8y8%mDO45AhJ> zr;tZ}QBWfLiECgu@e5f%)s-+j1J4oAOjLFQ!*fv&&}oGziwKk0v7pXnLBUAH zA}WhN7Xlsw#nLBFv}{tenLHfPW|PPxb6MymGX^9aM}9JgDmi7=k(4`~M3Ci@I_fwA z)z_vuY0=f4>#(n8P%Y7YLKp1Z05b zbsdT-4%0*OHBCgh$E|`GInF67SbYnNlZm4u<6o)eOxt`1a<(%%_z zA>>w!Lf=KvM19S8O;*0kA;+=icmDF#M-%$YyLK{t?T{OdzOPvN@az_sOy6wuo`64O0dY4$j%$wJeFp*d{5=dgdA=cBo;jc_-;eMK;A7mfeD6AG z!hZ^nt#1S5*aks-F4scT2dm`uFdFP$L}JhcOGdhfWNDGUk>uPs+#fmv#l_*?#FD3Q zxVrTn9PX7aN6(p|GW`EG9!~srW^lMa0nfFbd=2Q67T*TmI9>|RcSGZd!@b)upv2+c zZ}A*i9|ym|4Rdh0h9wU7Fqrq70Lb^ce(Ia3j)OnwhJ^)}YgpoN{~640OaRjV%=I(< z1?qR?-2ojIT&@uz4mS;P^R0Md6m6XB?~52b{AfK36>iK4`^%))PNNeHpy-vPlJD^>?25nd-aX zY4pW$z%_f~FPHY1X2t&u@llI^#Unpk{SkbH6+h&Oze4WdsI}rRa{a9DTr~^)BrIU2 zJcXY4LiJwoJW*=mmwV!i)s5gwtoRyF`~uYqexntChbMlKx)*%675`_R_$BHy;2*T& zKktcOs=fyPQ7itqC;mO^S@2)9;(zRkzefEE{CBPR|M0|LtKKA!`Dp5I-vbiDPfHgf zZH5&;-POhREm!lvPqyNhc;YKn41Asyzs3{4Tzv@qJS+ZYPkgny9sJc+{N0}T73zNQ zRaX3`Jn^g4-+;f-inqTDgz%*OCgS&6@&D*af4%x=@Q18;-Wy``zX1QJ6@Lo+VT*qq z{1+|$f57u@4%6Oj+s7^beAmzRjVR`qa1j;t#E(<+J-mF2Qvn@j?tw|yeQtPjmx|%d z-7Dm;v-I&h9q%bIj{HU+zuCvP`}i&&|4|?RDIfn=KK_W0KjGtlWbu3tf8NLc+~QgO zGZs(z{|3JgpQ-Q@Cq5qE7nh>Vqne)ro@3%F&CdoOhCIIyQ=TXEa}ZD61SHRQ7@tKI{?P>5_Quz#}{1Etu;a{iuiTI-W0r>HAgv8GPe+qv5 zWFUMo_#5B{5xxu_*bozQRn)f*d>zK$Q5|0oz7o7??+)-hM{uW(-v>VT|6%W40IRC5 z{NZzNo&?lDs6_?5383MX7XgA*OJ0`*!^41zEt*`C3#8_8$-TjdsNkznYl}|Xv7L6R z{m(-?wL`4T==^2CPVJ~)YoWC>ZKt+$zCN_J9cVi(Gt)8O@3+q0=k9ZILT-3`-}L{T z4fn3S_FiZ0efHUBpPRFOdo9$@Rs191zleJN)}y}9g3m%d{tN#c_>jTB2L69TKC0?} z1b!;&^?3Xz_+ixR<1^Y9Aiprj-V?y66@);?Q)^;fy+miDKu5k|enTSO(GcGn8|Y3Y ztuh3rQy_LXVE>eHaL(m^fN=r-8E+L((ER^%+~=E)bmNZula6%bj+m2< zbmNYg!$>!>)xjGvNAG;_M$FOsKs*t1mN^l2+&e**>75`|?(4fux4Xo>6=a!imjR57 zEh5WwyGz{XyIi-s#C^WYb-PR4=eyi#7a2qUa;IJQzL(`ryYBm_#%Z_4a`uflL6NF) zQZlMeIHYPF$%uiF&TJ=1Pr`CGlr+S5w)S;Pl%a;MB$p7N(Z5Q(yfYRmkf8sczLy#hI-e>( z-Ec~sAWG?jRTB~o$tgv*>=AKkSlibd$Ipz~)=2Hz4b74I^7@4fBlUef2}EY8zWZ)dzSazkJLEnDKf9or+z%a)YK z`g=A50=v0mGw~*E7z!wCiw<;mmu)XWGdsIu*c735Nd$Xt+B5<#*mL9TXliY2X{_DQ zn4TuVo}2PmB4KYS(7RJuz*51idkf3A#e3uZT^;_FCPG~wsUiIaZ(tDh&Lv}a3=#Z( ziqe35tx8JDV=3%eGmf`QHR#?g+i7oaa2I-eXe$`A3+3Ha?$fvBlRfSc8%T9^yZQyB zx|c8S=(;Hbz<&}vG?W#dv5ez zCEvggddl*S4ffphZ;Pi8jLhEkYGbYS06A-czELN>uSu^SXQaWku$-ADb9o%4X)Au- z#c##0H}_)XoOQasd|Q7!-kXZY7I$=aA>&%SGLS#x<4?5-&*)}`fsBF(NsGWo|g z@NQOr=$G+@KxZ7UMmq5aJOUt{nUewaAl)oKwbh0cyiw>aJ2(4nMD@AbYa{B%3X&w1 zV?;?x9LSBforIO>#D$^kXu+U0@9yU>F1Gi*R7P#O?zba}$M z@X?AF@}r4W;S&|v;S(2!<_*4U`27#vQ}^p5;S<%N&)zw0xa7gR>wbRZou8h>-W43b zKIg=Rd1cX>!HVJHsJ(wCf4Cz0tAo$onRDXeT$X}b+=pY8{_5z*(2JZC)vCN&mH*_Z z75UY{m9wF*@bEJimxTYzD%^WV=y~)N(Tmv1{GRM+zBThuBs#RJt4HUaa&m7Wmvw|u ze5w(Xsq*0Bw@%jQMTeq~L}$t_pC&t&(7YMX+qoR!7k_bz?7qphE`IblV=r zYC2SNU`jM6nth@m#M)y+Bh63lZQu1~Dzd97X_ZbnG<5sRx0eo--ck5G>qF5er9~_9 z=HAOygsLj+TVhNntK{y1(#TLEKMJm-E;V2BBh9b$ApR6~H8J*7_K9|DN(nV(pXjzK zibH#9_aHh{^H8$zU}$J$b@S|3p1F8V)_;Xc9=YS9;ZU@YBY<5>jO_IIV5qd=D0-@{ zN6pcZ=Fo{L;r!?y?Yd@o!>;hc%a3F)3?C{Q!b}_ZtGdXM(24S_5U%S@gKLH_84NFc zx74>jg!<$s>k3g{ZLO?)aM$YL)w{wA@{eRM2p^inqx&DJ3tt16NAeupGZ^;hjth5DYm0kp~sa6?Z{Ryw|gU8@!YX%?CpE4 zoH$}~;k+1C%)Y`E!5QG_34BjeAB%!zzy2*Fx_~t9VvMG^@aMrxor_tP0^y!$^kHcN)en{KTD8 zhl?NFi#x621>OZC&GubUcrts6$>kZ`#WiM4u2D1HRg;Apt}0Wa?~=PfwYmtwFo z-K31}o-59&Ee9`&!2qJQ5az0wk_CxJ2FC4aSL{R`)JL<(!BvtiMjey_6ow3J>}U-7Y6%` zbw!jeJPS@&7yBsZSfX?lpS~_kX$zN-zd(!I--%F8CE(!2z? zigx$rD_!W@M7lT6>74yYaqhYBbuv}zT=(EY)d-%K6KTZkFm7MF!;6)!MHAD7JJd4wGDNo+;k zUT{I6LdCsD_4ta3^%$#l&pCKUgQyFFa43gr&?}I5rx$_!_0XWn$XRM-rbO<|ApHQn?nzeB8z2 zu`OLz2n)VdUsYDI%*t`lXI5@O-kM3_^FmWY)50@C7llefi$a{(fQ4Ei{Jg~8sBFZ) zE(o75n=F>CxBqG_*lzC_C}_969kBf4kly-!`>!JMUjSdwhTS-deqYg_gR-8#`bq0R z3%2491k$_kQkuNflkKn;Rng%ucr@_;&^%)pgiLPlK%_E z{|)HuE!d?;9>>25%Hw}Tz5|~9Rrx!hTkk>V@GEfZW}Z3npy!iE`Ng1<(ccn9=Yn!K zL>Xv77ye*kIrK(VJ>vn+?#3T1tjBpVq5+Tp5qX^7Z%OyyubM1dj=Q!dZ@}9D(52aE zkNieE9w5CoEWn57#T`i0vkY|WO&C9xV|*AvfbkpK6~CP{hNv8*=-<7n{zIVb=RVNc z7{5=l9(woK1DRsFN9zaD>$l83%8srr{$j{bZFlv^jb!-qU~Ns)3l z6e)K-k#ctvDR(iE-VDn2xwD4+9#FPBq{_L2hUJfuNBQHR;XCYINZ}9IyN|*>_O7Gw zE%t6B)^nE;DR*avAI4wFq(ktYLHZElL6Sab@1O}kfUq~@KZJOYq#wjzzohr#dXe6T za~mCh(Fnz;vf`WKwEa`y!958LF-l?qDgI=bOp4$4Q%Glx(o1{ z275K&-~7caZ^Bh4T`jM3;yZ;l(=*69NLef<(X-o$Y+%{)bJp+o%ILhC~O2|Ei!K9qrV@l53?zb`VI9A@|ZFf5U7SiqV zxyi(Kz53=t4iD&2$*V7E=+o22Pv1R|YaXR-w7-q78v0~Sz%hRMz6ZHX&UXgZ5`DgU zzWV7ag&ZDYqmuW0cN_ZjFKa)2AA;PPQQAhI?{^G+`bCiRgo$ zzNL`MMBffWpRB24=-UgqYce?BuNwL;Rq}rQ`(B3qn^BQI-{Mo~D}`Jp=i6!Mn{x_% zsSNe)H}uIf1v>rC_i%>#esAd0OPrs+DOiZ>RsT)04~)4Et%F=4%DBE@sgdNTuMKjU zjNhLa`sA4ijeh$63UYXSj!NGC@!7BYhg)8fpT0uKWzxSELm#HtnEEzDu2I#S#M{3o z41G8yNq+qshFm7kg_DN9C8yArkIGE+t%IB%zonr))hYD-1LW3apl=#3fE1zne=asp-+#G zpT3(i)b|NPpZ5@!Ftj*t2C z`)b_W_(?P>y@3)_UpM61aUk_wr=+Q`ydvUCj(@5Zk%(Poe=k#Bsa8}jK@HRR{;9qw ze{@=of2s(3K4Je<+zjpA_ly8^4K2-eZR-&Ltf{rJwqaC3TNii#a=UbyfGY=*v2AhJ zwr#7dKi+Nb<-Iwfk5)5N@N3=xYb zgON^*@V0vaA1)IN0lV3#rR%8<7eCqRH+VX@7yw`Dl;v7?IC;*b^NG-~|16jCTqC?I z>k9=2fj0&!<=XHE#bx0I#or;{sjJc6mz+G0pDwV42c5E9>pM=K^%q)ig8!&f2G<@= zp7k>%{N^W}vRoThp!h6+Z7#$B?lZrxpT~P!CGx19`f!`V-`*E1s^U;>h#W59_xprjeOYE6O=L&DxJ+=nUqIB)xmW?jmx9~DLnZt= z*e(`a3xX56)9v1Y@jFG@t-eb8X>dDtsM5|F+`cTTbdzpZ7W9xIx+^Qvt{@n$)GmZB zx4#DlJ9RI7HKR&o-*zyIKYbfSZ_zX+phwlLtCmk8f4eM zeRyj!Apt>S$y?w{;TE00t`{B##HE1tTwwc|(Ow92X?@2QkGq0V-UZSgAnbP6$Q)1+ zLfKs&k#?+L1VTku)92ZYP^P9w0y#%H)F{Of_Gx*fy>hmY-IKuo0E0OO{s#j81GaMk zGgN2be<0S8YJvX+W4nIfe<1Kbfa##OhIS%$biCiaZy3&ldQ*NyQs!P-p^f0#3Ev*yvjj^D~}wjk51fPQAT8@ITO4e#!v~{10@x z_N5ye`vd<2U8&prmqKHd_)2Gd-wYyk%CN>>mF1^Utb7Cb_sww}5XAfpVt(o^{q^fw zH#Tl+Tci0P=4TM|^W6F$&~M<*of`t(!nyTEpj$bWQvxkBhHnDwJ#V^qzjdNJyS*a3 z&ng*d+H-qoU;Zp>-$T1%L-sE2?EQrYxrexJ_k!m`C3UGuv+UjR_RjP3qE9?fx(i2Q zH*x#!n&(52_EgvQ#~j-;Cgg|pgAR3l7Fy<3!;}YEfsNIH&EQx8cPDPeHU#Z4rn}}+2C@=!{P!uX% z7o5JXT&)Y^E2oU3CIm_shb7tD8?AR|a!lZdA?y;&CA=tANZ7oCOY1N|{L~UID)pLZS3QRZ{M4 zA3?Um5!Z<}ML2MfV=<_bFd0X|kQs8}uz8@8<&DC&b^14)@DF8`(yyv?DH@7}tOdUzo zw;vze{t3GTa};tdnlb2M)&KG^JQs1linD<8`R&YI^Q01g=BWLQ{0J(OQ zQ6I9BsINf9qiaic$9BdMm2O@nIir55hpz$uf>B=!{;UI2mY^-=krtJgZ>D4EUCgjih6cQ*Z&!K z;)gW<0{F?``J0W$zYcyr@|?rue-8dS z;Xi+9=pqy7Sfvq7Jc&*NY-FR3++ZmN**R?xk{3l3-vMw=ZRbwnbr5aFi3*Y~l5ikk zH^A_dYUt{RRJy1yVU$qE8K8}DC^a};AmfB9ArMHKwM%tu8XK8ZYX?QK8JQporQ`x4 z)%R{Sfk^5g1B7Ik__QyOrP1>C`7$1h(KDQd17`BHXoHvR2^_>u39w7e*E9y$r2xAW zkC&weQ;||&OT+}Jzy@YMh@Da%V3!Q&QGi`)t7~ZtuuB1UDTM%ft{_et-lx%dnS;9m z>{5VTN(~_VV7Un%l0YjN24xAbOLi2NM0YHOkdJl+ZQ_Pf1JDZKkV2k%CvC~ zp-V}zot$IjlHJHDflIc?7`UbUXlT}+UBn5cBRRbD)3Fdr#3s#0q!o=xN*`mE*6j{I z5A@N22Z!$4|G8m_(oq7WQY5_l>62FEfuV;_W)*%KpNA3S1PCa^?s)nn-VQ%Gv?^!6 zb#NwPg|MBP;bnqvdirFxLN^sDY|{|2O)7;1zusY-#GF03dfdQI zlHvxYF?BLlk^P{AbkTSk#;QOgX&8g@CD7TpfnO$%h3l)NIME}dSQTC;T?)^eq*zG4 zN6J;hfpCShv%}e8ln^k47S0}q3*E+@AnOh845gfzbmArPOSCykUsNUK-u4m1?JIZ* zT}3R{9vsMH=cqzn8qQc#-)C^HGtB}e%cX;D>-4{|jJ<)o!<%pgU2>1%T+OvX%X6Kk zK28&+ry+Mta`qRxA&Kj^+3v%brn-&-I=@QE$@N115p(TObs!QZhWf^n>otzyan!e( z8Be+syxG5hf!viI8L|)IgVowe@5X>~{Mip)E2eyWK824dcexsP%JKGRqMWzg%V(-* zmq?_)yzO>FPPZ#_Zw!6AA$Mh3jg#~0d(O~Dy-a@ndl_=q*wwCYuf8G!izL4p#?Uth za`LQpX&XJx+YNowm8@U?1|jEneZBqrlA(`}P$oZp-+&zFq&Io>T{Js=J&2uQ^3yjT za`kq#>)WfZ+t8y0bkg@Z|Z(g|Q60qi4yeP9j*u#W)tQLf!;h(E~k zPTOAOE(~BF0qlb&*}!Fu+c~#FmX#d>&|+FvNmfzT zJmg??%E|%F$%gqU{m;tIhI*T~+XFa*?*=D^$k0{*s^H5%@wIVZ=>4>LSAY-WH8-t( zL}^F@l{ek6#_>%xQ4?p|kV^wA--b`dtMW3?*=S=WXcz+xgDDK9pmcZxIeDKhW;tP4 zkWTElU*ZXv;*>k?BRCml(w3@Yq`U||JQjVD#6Ee=nhiLJF+aV@Yu1cH(a{Xdn(u~9 zb1btaFM>XoMG)c}U7ciHz=)w4RGTa)_p%lO)pC3zZFc)NkkfS(*Lj*sD5uBfq^EOQ z$4wc^C6yeAB$Z-t3=_M4H?H+_&1ZC8Rcj}U;@9X%O=kW&Q^!;T^+23z~nEL+J z=%1c8)CbQ505RH@BHDnowWtOGNci0K2efaNO!zuqazvu3*LFR>WCBt3?CmOFaM zEUVrnpYORI`PN2P{UmFvi!ZS5G5Oj~*w!ZRc&c#t>6<<4 zI%D;T+w7nw2>sCz-+9CKu2j6GE160MFzJrR`bQVH#(Vm9#(j_25KpzndOI0QL}_V_ zC*!FNbia<+C~WTfq-^eo*_E+O8ha9{+e8MDNTAZp_I1bYLPM)vpmfL)PXExTUF($8 zv;UqlyYpxnjYT_po9R;kS#+!k9q*3!+x(j3Hq8e%-@xV@*n9()q1DkJP^G$Xo z-J82yuWdW~I^1u7gRTC-R{xm2Ejh6H23!60Zqe9aSC6xn-kRKcY99z`o33lIaV&W0 z`trc$8`yjUo3DG{_V!q}>%IYB?pKyf^&$Fjye+mRnd*;q5N_-`PWv%%6$Uon+SXN# z8{5{XefO@x@r5?&HPG3p?h2NOA75qWSrUs*A%%rp?bjy0mz2Vx;+j?fI(` z_(vP>NYl#O6RQdlTBJBS(!`DT+}>X(AxCUgB1K8{VW|`T1AFP!=6cyyZwCTNm&vw! zyd1SlN^#`rY@d(dxC(s6G|*Nmn-UC2V)w(YRN2x8!KngP>BjwWA4nGYyquSQEnt zEV||7OYHtrIl3y_?U$0m5^=g?!WYgmCOA>rbSJuFoiDU?;>&T-g+kGVK|9@kar{Ns z`AQeYdLp_^BR#K)3W&jd^maguLZuhiY$AGn&v&}gh3k99y0DX4#txl6V_n#?E4nZk zXRHf`c+rKqcQ(NboIBhN&bbrDq|PVBeaGuJ88;WEyfqs)2d232s1nM)6hv$Q#%$a~ z4dBDD;532G#(mX7ikoabDU@s^r4oDhcy^cx>?lkG=4=kjG2b``30e?4H2T86@gBzV zAor}S4d^HiQ8zp@>BK(zr4R~X8+Q`rMjS4kpji@qA<55_O4h-f~ z=7CDqi=~)?6MGTo1gjb}BiogZh?f#-R6m6!Mhww);`sgPF8@1ai7vOk+uY`i^C& zZzd*?)~Bb9pT0$q%cOtX4Sl$+#_Zo9GNBi9Kzt_Qq7WUU3I-1qU(_cF593y{Pa)0!w8#U z@SJTagXb=BcYVIK%T+%~fJ3?{3&C;rX-4QIi)#|sNIOjuFF5S0=Kn@#K?x*!36y=e z(cEP~5gEO|t$=XF&-RD!??{h%R#4fx##?*bZGLU$P2>m8tv7Ixu& z7vYuX8*HsuZgz=W10`v&?u;^oPBKOI=R z(MY}rC?lQAZgwg`XA3Gp45xRLp4(@3v=dZjl#hCIJbZ1CfqRA8jn}m{3O4JM0~AEn za69e@pf2K3MAZnQYPeQ_e7+w{ecX&Q775G9h({#@uTrY%2nm@Vu+LI-P%^HH! z%xD%_$6mSklQWuUx6XX!ndaf5!S@V5RG0IOM^AprR;#|&H7Y0sr;iOMj7spllg}39P3uAb?x-e|EE)2Tp!uU@_mp1T1 zjl7%(z~{rEYlCNioEXm~GKW0eN&1D&%&P3n2%yAe}h=eu<+gZL3Pk zO_w2dOH;qHz(_?CWD0R0kHuI>;sDcRW9r+46Iy5&rc^U*MI`{Pp%Uv zoka1C`G#dV&Oh;sToiXmqvt>YFHW+Jy&$!Q(bhdDVaJ%SRgo0Zo> z?#fY8mi4D7Ga&;HLyqIZ{+_SoIc|TAk16+Q$UTNK$^juJiE`d{mtxV#q}?5m)9vbM zCz4yA1pHTSFhRj=q0D4);((6o}G*C&jX`Jal8p*dPi&}ZZjXORq%{<3i} zKL^W;!)OYee80hGisE?@b)v(Zn>7PU+)LcWPcbkYtjM!&#rOLhnLO(*C(q+AkZ22c zJ7sy+Q^?50rQKu}=I*fe!fs*I)rA3^}KcoIrhCFW&orrV!C78d^1?cZ@ zojlunx0Qn_bj&Hsv(EGIh2Vc=)L#VtO@l81uM=@VJU*TBEn;tVVzh`x7hhoAWbphG zrPIUrdHCBs{QVw&pNId9hyQ|y|9gYygXA9!p8ffT!L$AigJ=DZz<(N)Kg8&O=HI~o zCGuA&K7D)pii{!kq1}WSoc@Hb$h{1xbNhn{fkaoLk5Xp*c2+1>SA!3}7;D6w5@yb}0Wf z^|9`b%BmW=vbiC-6<%9vySw{3RDMIex0Bfo@s8Sf5+fjg*0lA+dpf%NT`UeaYZJFs zW5nxya4T{J2vwnyo&*3eye) zR!OPovxajZV@2LnatGh6UTOQdxtoxi5M!MXa+AMmq}htRoPgh(W|Uh)vBavA&~;w) z!sx{jwwGs3JJKF`E^+mq`OzBbL2)$i#B}N33V6l&&B~D`>vl*UI&l!ML&r^7p`6kz zs}xa6^nW{U37nXZM%`r12wV35QYg+8VKc|*1Yhaa7VW+_`@XFE!ygVc7VW&LXm@SV z&ZeT>6{rfsK1K67z34~+m6ypdS@7*H?MPzAFHxpc=oZuFT)z25g563?lM5Bl2K^LM z8%!CnZV5mKDg;IV72^8lGEykHoOHed+CT}KlvmR17q@XPAq9+J8R?}H!+vOU9}neQ zZVo}#eHegi8Q8^!mEi5ToH|ZnBBM(qjZSFVNei!LY?U1xw3;){RL zg=-|bFx(UA7Z5B?qS2tXXxF_t_hsLo^+62b4IIL+{Nrm4W}&n;UA2abc{af{ur^qe zVX&q-VloWP1i=vO!U4{*SpOZ&tj+5es_zfvQ zK_^Ku>wizmp;cfTVr^`&O)l+TNSKN|Ng4ukNHGOaC3g#MRJqkSO^7yusBB*5rKVL{ z?ouehp=sm>^D1!~_$A)$(zdFk98bWTs6T8J&Q%BUSd5XRLVR;IF!jyF39U5`v_(gO zZTfMdnSgDU<6Lq2qf#YGI5xWN7Rbq1DoLH^YQnC|xPns7Uh+VZwA_`*Q%Z$yc2+f2_&3jd~L+LZ2!hM%_=0dInp1)8OZU*C`7#zZ(2Ix&Y^Qm8*W1)dD`> zDa*62bMox(rGhnC=9J}GJx-qW#TKt!+V4u9EBI0t!XSMV^_!hz@+>nLQxR&{D(BNNn^6XE(#pBZ{Uwp1;p4ggS81-2;G}yXP353t6*w2|RxXlK&_0%faLKrtm)m{}A$ZivJCGRLj~*`7A8<+rXEo z`l;X_KptXpdn-sdz0Ldt+O=<4)WxRk}XbAM0V^*vO=fvE(f+eI2(@ zg!$`wfnKt?uAX@R2D}SRtw~C)&G#iVFv&q8HT19x3WCHenkW27Ip|R(&Ao8-voqEW z#FCUyvy&ICEXMT2d9}t9*zJLaRFQPUWKH>v=vd!?maZpeiibf>+S?BcT(~9{1h}Tf z4GoRgHwU<;0M``YngU!?fNKhHO>s9qC%`q)fb5Euw7sLtWeoPkdHI=;waXzo4Jz-6 z4c?k`2X~pcBJs<0hMlo}dv$Exc2@Ls^>%a*bh=>&6F;xOji=^dO7P$NgT>fl{%hKxmeD*juDo5-l_%C#W$Nq3#{v`3n;~e3dMD@AD zHHrGMa7|J<2Ck{*08ve)yDNqj`l#3v?2rZQ(%ZX#_P|pQ9J`HJqQ`Fwm1Z3Ymrgm9 z6|o{urmV>JR47uKD&8fvL#4wdkth30qfZQxpDPHbG;&F|vVK%6rKx$5cYa!V@SUGR zrX?pD*?naA@!gLPKe;QrH0x;l?!jRzGWpmCw$I-cvins!`_P`jCwAx8g^z|J?WxLx zmqngTlt!sz?_dsMgAvb^ST!0eHPSTc_PskQiudk)aWCA>r(R4s$SJri(#WYxqXp7V z`)~xY#Xh*_-W@OP$n6h#&{BI2WQ)|w;bKUI5NXW1{otF~E7^AF;K=HIdynq5qmXel zMw-5ya>pRU3+r)GRwx^=D(63dR)w}-qtR5v2*45;mI7n>L9#-?V?j=PK7vkUaa1Y# zk|{t-+k@GC+R7YsQU#bXAz4=|PzWpsG$t^Lm>A}P*f^j3Qo)OeRhBRJEy#RWNS-*%B`k`9%u|HH^NxD*sM2;W|S`Y-706p&^4@8U@+F@lu zkytQlNx{^S!Xi;mimxV8bgr4S!Lrtn0&uXFw8nN{Lo2cX8le0JmZLKqETT=sfP}_w zQsp<3UTQo0=Pu_C^2N5>8@gB7PQJ>rZXsPVF)S4D2u|WSYb06286(NeX;1>q?r8v{ zJFcu1R+lH!xkWpVPMDZB3=Dt^(S`o=QfI2m>>w|pyMwTXiBimii6}KY$UNs*7>Ene zg}HOOy3h?<7kVwark}np8pEVtxN$@m=IZJ8%faGdB8e`{^NHvxLtk`a-i5^zIHNBX z5AY6Y4R_H*S~F)mO_Gi$t~$Epk}*NCXvTdw5zXdx&xdBw6;Zly?@mOQtY^@{G#wum z5O9?f5D>SM^bu=7Ei-4y%@=Q|$#ZODY5~?;wq1aWLL5o~7ERtHPU#rSDl82sl)>qk%FUWVZ9_uE71L0a5 zAP~kwfWUw-9s&d{z=F_{WU%i@_Yr@D^y^m zY3dn>3xLO28VHGdOP-0C^)lZuN3o8|vjHmPnSixWf^tHY`2E8&CVu~*l86Qy&Wy41 zCVe@*$KhHT=)llxEEKo_y@wb3cY+Z>JN!L+S=UbGV z9-EbrGn3ZAXFc=d$t9JX)Q%>fjlJmBEBi7T^sPiUoyZ;Mvx?P#WIDqYX^?ea?nViQ-L!aCOW9ZAr z+I*$AbKt%GYk-{YALlTWU;j2jE|dO!!qBJZtDnB7GVI@v4Sjf=OY+nA?-}Z=jHJ&O z%g&hkY9pDA-yM+C!-l3)KGhFm7s;}ytheVB@p{PcYXayP4blk5Xy&gbRDX?++X zNq+iPK`xW|{D`3s*)jD!fyzwI_YFheoKxug1>~Aky-B?1yR;;IzVi%y2awM)0Jn{h z;~M5oFQLF3zegZP50zXGP6fFA4mxkHyISuX9(})n9Q#at^OX><2fe)|;~fs*HsW}D ztBgb{B24!8vg&H#Dl4m(+PU$)yHl!7^wwUjjP0m zg+|Wk$^ zEnez4$Gf8x&XFIn5u^SQ9B=ac@iW(`C*n4ZQUxLu{34_NufbOsJQ24#5m8J1>6CB1 zV(>)NGOD3Y8c{o0=_7)cQ4MwCkJ^ya77?EKt?c0!c=$RG-|FFS_VBlO_**^v-5&nK z9{y7v{;v$4KTL?A)rtH;5C0W|=lOlx!~ev?|JvZG?;V5Z@i|!C&1AHkSL z6kiO!2*>aTFzc6qzsTSl!2ba9)W!O>;7@?(A0Xu0!Hx2 zg#QS5CNAzo^!_pU707=DAIkqF_z~nkp!m!Xym&&K0>B&ZI1|*a?e@+MS9Or7qasU= z>#y&e2c0xfxK%pRC1X$;-%~Mhi&fcjx*|I zOS~m@OKW_`+W0nLT)Q2>u3hRX63lC3Z%6-aiBwl#FGV->BpP~DQ8PRX3cm^n;M6U4 z9uQaUa&Qb!gk#`+-M$B{4%?~W`{Mn5Ne%bqnbZ?pE18Zhb+_5@TC=3N6I^3YB6XXM ztu-QRI_?VT3vnQ|y){YSg<$Gqy&dsxjET+Sbbv>Wb=N2RZ*iA2>jI55j(1>WJ;J&~ z3HK!G8KkvwFy4WlvFSt?#u|fTvvNWxc7uiE9R^l7@Ov2Gg9ChUfDaDv!2v!vzy}BT z;FiX6U-XdSweSp~v;jVNoFNYI!2v!vzz6#{$fU>203RIN7T|-qZ6)w~=>Mel$N9P* z+P+VC|Kt9T!3X2b+pFU|>#|9rhnPshfeo^G%lfb#&`R2fryB|K8 zZH135mJ&<6Hkz__33bvhV`S*?Gi*1^~6EjYh+Vwq!}%?*8&60e%N^BhW2-Un&z_GHF|lZY2|jHrkgB$ zzl+Qp1?@NQocYTond(e7)fBvf_MP3En$XDNAfKU( zr%D*|B2wsqsKiNP|7f8>7o;6QJOg$Eu$v&D0ZNuiK_m@%UVZ@F! zsJK`YX-o!+Eg^jX9|voEW6>RT0=2Hw$m`W^w#m&(Cnl>-s4JZ5WS$|-+h3e13Rg;$ zt?e@uU_v=L%#4Yg++0I%MD!|mq%A&uFH~({woRlBOm-)63|u&2bsN6MyVG&xDI*0d zrJNDw@I+d}062+;PSG`8>B4-Uh%SgbiAGX2>Z0;Or4qNy>8fN`O_jLFa>lsZCZbYf z#@N+-e2VV87wa3Rrad*V@`zg8loL^F4rDIW%304;x^N?(v98%l7Z!oD35Di`D!}Sk zLW+fM5hx=Ov;VWJWbLsEu;6ZFd9l59qX4Vq7RqCl-ARgr_K;%X{xB&P;E#h+&vT0Z z5h)gj-;!dE=Y~M9z(P+7dHPD5jg?9u%+N>3CCj(49C~+xPDUpQNv7V9vmX6^lJ)2; z(HG=jBgJ`qTa^>BLg@1`P(rPLLcSP~Yf{|LzX2`40)0~PzX#n499B4Nm*;{~PLL}o zKOg*TOb{YbSdIs`&TFcW6BON+xtdLir7(vS6OQwYzGVf5h8v&LnGY!}-STjPs633Yips+WhsZ+( ztDkJY;kD;>8>kRSbs=eqdMIPexF8S{FE_Syf(7Zs`@}C{2!RMnC(0d9vrdlvl53j?Fl+!9c4mmSv9XFvc z6S<_4(>kaxp&5hT+C*cWR9tVF39mZvA;6MKsioN;A6_&2D$C%Fy&-U zDmibvKg68mxp|Yf-K!(%c4ZFZ0JiJZw-#~(DEB6>zJG|M_33Hjr|+APYw{`s@6~rn zaay0;Ly+;)w-9n%U%knz?=C~1p09rTJ_5O$y~@CQ^$|i_h;m*J{aEzV_ur6{AIKh^ zUVSS{()#fDl;o$c8FKX=U1YubK4j>_EhWiM-={Lv_X9(pzNP&1{Tt-`{-pEvZ`qvm z`C`hB*}o{{G8wAc`fGtvpX-AE^boY$pU zOrgo1WhU2(p`L$n*(ulR(pk_fKqm)5-{+L&T6>&4>kF-qfajF36F`#4nEWTfe^k}- z2heAoJde*4`E*g9^~E%U`h1I1S|@^Vzo!{c{@nSEhc`jatT){Xlb>PCd-9hXJRc#| z9)5+vQ+^fr_frm^X*i!7!1Gqnd?$Dw!ZBrirl3%L^NfWJ75t(H!dYp}#q1PdquZq^ zJ()@|sDY(~!&19=spUW;QRId{E+2Ilj1HPC_r(eu?>H8WaU7^(rhvo_;1Gd26eOWS zMmkW!^|7vg#q=bM$^g+9Ao>DCUx4Tf5PbonFF^DKh`s>P*Ox4xxR*}bb7oBMDj}wA&jUb-0l!vxP@~K)jphr^Y;ZUvNVL4;d7-^Ka&|;_u|Ef?Ca(8DzO(Se%^UW>~rR~T*Kii>4OE-#v6^NwYgd6jsoeu>jV&lc8G?rml~ z$qN9u6bBy0hsSCIY$5VELzliEz+yDOMm&i|LbG@yPUH=($dH}uk*mazXoIRDCa6K` zlk*3SLhdm`K*k9?a38LAzYjTGM{%8BrQ~SvV)|FenMwD36AGChPp((VX&uz(cOIMu zS~q2X2e}*cK?Z#YdDGyx7E^@d&wj`)4T_mmGbe9Un!!;&XUBFfG5Z7`<3rI0H{8TH{Vl|+5Y2UJ_KJGL`UPf+7pLaQojGPQ(0 zhm$}GETJ+CuIonkPnCAD`aUtjdsin~Lf2{rl$KC8U?taTM|paE%yqecq9ycJ)NjPc zPPx`yItxlm=!Ze~Ic2#5s5ALbICYfIllpW~p7psjgZg~y1s6Zb`li9t68U`(|F(z! zorez_6P-(J9{B4(33Q;PvIsmyI0ob+V3r~uQGCXhOndVGzi7xjZ3AY#?FOYjaa%_2 zRp1(Bi*1RdI~VQWM68gS*}xm0Hp##S8Q35L8)RUE3~Z2r4KlDn1~$mR1{v5OQBg-41=m2NbppVO-BjKA^z9Hlm&J-m6=p| zrp;4jIYGf=C{`Xn{9AS0f%Gt(dc1!esopWBoTH|Ii^5wthY~WBmOP*##2eey^oJE$|`c8>sY@CgMMW})WIO?;Qx=K4#Ea$zwkMC zCP-WVxwSyrZJf#gX-kY@f7DjOv}G|ou4S=Cd}8E^C9-BXN91#0dDNaYv? z7-FNs3ru+rk1u)O4m*R`D^Tt-LBcp9=Ac6Lo*ngk@1CjUbS`9diXh`yPW|@(qa)I1 z^l2h(EYS^s@?EOO5r;B#`a9x)O+lK3?ci)$A31~t7%E;oS{>Of@_YqOev9IFkz#1? z1*Mg8i1o1D@wIh$I=;l(NFxW{Nb|p3H8GB%$J*G)Vl(lK{1RU-iw;#uIrF8pK86!P z+EfKJGVZ~L$D*^6NWDhJ&)}ePHsVQMBjamO^c|U1Zb42K^YFjK1ybKELzu8vD8+mx*!i zA0fx_XMg3U1;un2Wn}zk$gNj$r!q2Lj+=iYQl)^lTGn1~LYCQr*&kyQz8ybtOCsBWyJ^=Nc-#Rgl%pow&WJmo!dU(!X zooJY3eLCe^|B_~K{*$a`K)4HM6Q^glCgOO=CeBRbdDzl!^;MNhNsVmzbX!VCZ|q#*e?L}MST`iM zVn=5KESq*N+8>W|B|_MWja@zQzJZi*ef@EX-oP5O@%Vn9%!ac63Me_uyD znPiBDrjD-K4upo-*2RtEWKnOjb_5EkQCZOrLBw=$1fjQnOJH$r4lJ&L#Wk?F1{T-A z;u=_71B>f;_A~ryaJ}z$_U2`5frEzfp4i~6$=)+mbPB^o#+|WuYj$kib~gHQ>dlQA z_bG_u5X5l^;y46x9DGI~u(+-%*YO5|U7x|O&rEiG;`c`SP1D&nx4M*{3tOwJfzgIm zSM?ZH){*8Rc={h{ewp8^3uD*D==Xo5C9;#A|E)-*y}i8tOHZ8h5hsn6Wy!ND=JEXj(q%_-bziAaIuH_Y~d?k5QvZDpKw(Ci8&?ZuxNdhz+ z!51yP*jY+j6AhDDq_}P}4Ke02_b^a0_i%2gQWK7ubmF=DCC*{dsVXUV+((deS^A*r z=wTW+mmI4Hz7Ta@+ix|L)3dlYd2PSn!wG#Y1KaOY7$e=Dsgt%}&PjbPe-Am@33QV2 z0<#Psc1OkwlyWIhowOV+^JcfJaP4#*Wp%zq$?36K201fn9o*E${CILnC8u>z-vZ4T z^d65~JLK4BZ`y|fOcN)43Ua(o?1x_GIBrkiW6FIVa(hrlIbM4v%6Z#egt?tbyW1hB z+r@1m$xq*4hWeg0^yz8ir|-*)=%D#TcAe=n=97H&o5(&duLz+>>I@$5r#Y}m!@d0@kqLE#rS z%lg@{F<<05g>mIKA+OgF^4;M140u#z@~qoI{}>q1*HxAMNqvKQvMZJ{Z#AQ;6Lt^wIIfXW_@uEbwX9!Fkp^SN%oeHaKm!&aW-Q6#ioH7lG$m$@ zprNO}ueZ0kv+g$AypP@04e_0=ecf>%Y`}(iZztdaybub6P}|+z*I@z@T5!2g%?;Sd z3RVEr0Se%1)^Fi8r79p7TH_yxci?9k+$=?E*KTNz)R)&UTo|eE>q&HVV>`w5%gd@O z%Bsq0mR47l->{@Af=v$*_;R-vFYfJYyR|=-XzT2XZR5^^u8w46F~X8AWv5KV?i|}1j&F>XUBwrO-yly*WI}!tE3_CXl7q3|YKDB+IXA5<7cWr6w=VU6WjV@J&`DSm5h`Q)-0P}&OUFr4Y-M(WO*ZZaCF8yBRBN*-?9Z*i|vu+ zWlPFq{XLtp_hNI$=7tt1#85+FTXdkiyKH+2n%UVMi!5$vXuLi^4zvWwfdDxWAO`~E zK!6+wkOKj7z}#7zv9;euAe_=Ia>lv>J0levz5U!l zR@81+gyuoeDp%&OB26pSz*Rj4av-q^|FGZs@tMVgTLwdKhl}e5&&vr(uJB~IynZnJcGhKo z^UUJ&_RM_XnW|Zj)Ga(38eEBbE3)UA?9v%W=6o}^^pYcyZxA_9^ZZEj_l-vZQ@Ib0_-BM+mTxw+VQ0w*imlmCLd`UX%4m5wvROLZGW+y9D6WwO?GMCp^Mr- z*?wdDcY&(F>(o){qQql6CKcS6unMNm`b6T}J0?y0PU7MnQwwg~F@wG5_AwViBFlzF z;C+5pC~W8T2J{fZG~=yqT0A@<)4R4LvPHfS7RwUMO|&M5wK)ouP0(E6vRcEuQNVIo zuf@`cO1{~)<|#|>e1(vJ*$_raG2MzGX|8}RWFLBj;Zc1r^L9 z^11f@Yj&cXJj`?KFDuz!3owkOq%ga#AiaEIFa+PRK%tBUPOuazGex2ROyVS3cnE38 zzAx*3#90qV#dWqFYTW=gOhmmlOtK9Ql^ZdESNzgvjQd2C$~B-yq$oa)(l+skUgz?N zjtebqz=S)IHq0@mWkTlLbfpXC+tbyBQ?_+Msq_mYbh^4CS{Ej(=)$}@o5+*Z&|iRw zz8-WkZj4SvQ;P0Ul=Egb?x9bD7U1IinJWJ>d7RwuS&uo+`=5HUNnsK$Acd8LTlbEFI{sEFI{sObv7wtBD{$aBIjdO=2cq z62F9A!f=;PlslegogCX!wl66oAm%snN)8ElN(G z;zuE8CavS94CRtaPV1n)D>P%!dpvTlL5_X)rhO=oxuYrw!s2yefAzA$aeD$EQ|@BO z9Yz`DWUhfy&fD&HA(u(J7vh5JcCo@r^3!)2OEEEuDI4`!(ED~3KjW&Qg1 zPZ{c)hUH$LFNR1G^&P+m_hiB@v8)ov@t*Ofmr!8Nzh1~ahceDTSqnj_@9X&JdkR_W zGCXedd?K&Y8_1aYmO^ej%BWBO%%Hvk{A$-RUEn7_lJ=B81_Ee#b(IYT$^ZexMFYt} z00l9_Wjy#r@K1%qF>_)hif>-qpWqY53Vk!EP6YGBH3Le|`F!-JQ?7W%=dpJ3dd5Fr zJmVkN)zJ5GodT}1CPsADZHVl1<(sXJ+4c1#!_$*(Mf!UhHBUz zC2TMUPQKm;qCsiFir5P1d>=*j`3uY=z;FcK9|8dyZrOD3Zv+uHx{|9MyLcMqP-wF+uh z{`S_|p}HC0wDB4*3tpqh!E0niiP*@A0Ku`tDp|dwIGS5R1PJ?ReXbZ-63qdh(UcGW z7ItB;Bl^Gg zW`VL&)Mknl09e6EeC2B(1=bf0HWlrzEgB48Dv|Ryh#eP;&IS0 zzz4q}#f6|zp2u;ED#MP`c&?4+u((1(tU+RYg&MhTP=h-pZOvp}C7z;Rf_7V%s-)c8 zK7vp!1|wa?2mp`c!+vNZVWG-P-<04XSedS4Bc4RVm|0BY__wt6(vY3&k$Ve6g8!pZ zrIM5LNB$iMRT&M)IH7#Gk^_-cflH+8SfKN~$$2=9WK7kNGm}=m35A)+^(r~7gZf}E z9+mDyiPp_Zh7W(=D5=q&^Phwq$DjS>wPM08G%5nXbC6@7DJK95CFgCo5cl$xsPm?W zP=M*?q!!5Oc4dt~4cqnV+YGrIoukqjuf79@KI&znzWw-MUM0vgy#zTwDwqV^=*e-DaxpicO?_`;io`4#CQg_)0#@`U6s^c za93kXG!#nrCWIE!oMnB;wjw*W(;xzX``XcfS}s>Yf1MaT z4OAx@D0zSCL~jUpXhvwBwFi{P+9^-svS^Op5dIiUyDosf&p3I`+o{$Uz`yR4wB&HOZKO zj397{i!Ts^s+OmLl?GLv$Y1N>Z}RZH9{zTN=VM^6!BgL(;A5aEeCU1P&%vLNyv-i~ z|1I!bgINCxc&<0RH_2z{jUXLSiaY3&_Ga$6b9?$a2e1JiH~9ue6R)?;p%Pf!$I|Qe z_kRw;2{?A)nzSPUaVP-K0WL=aa2{|bo&aFaO5eND=;IGCM!T@mp zzbfcUaMaX*xwiO2xyycRI|z{R)iDMjV)EK~fRqI$=DwPxt^s!3`VMHm<$? zG&GnS^(TIK;3mK}F(>)5sq9=?m~HLn(!gxDFt&Z!u0Mr&xoFpVnwQ(IAIy0>ciz)5 zFPFi*JpE|V!rY_b#f3+ek$7JCSZLv-qoH}&P7fpQQ_rNg_J1cY=k*W_(0Z$X;vfyW zO)%)%X55jrvx_Ul*jv4Kx@_&=^hIv%p9WKLR9>ix_!K*tyH&oF7IhOVRZ0JFJP}W~8El;6w83tf%{V#d2e`rU3 za&^))DdT-5URvfH**h4TpMA(05@}kaxI-VNVPz!_Bb(+zc&AOPM5Z?5_fVfoe5-9( zN!x8JDK~2?E2-LUZj@Bu5N_}ONuYS=Di$;;!mc$jxZn+}7*^&e!xXGeFtu7% zL>ZA`+z=b*78hUw)Pc^%1#2b6UPI2c$%VE>b247@ZzT`;ZqNcu01j#aCd6x?vvJj5SM{`v z&?x>UDQ3aXNnxt}Jt+0tJIkF-<(PjEmg@~6F?7n5#IVYgM2j*d(UW}EqbFkH{6Hy3h=NX9jy7YX*qSpVZBwVLmTOUR zdTcI-oSC$an=+J3Dmkr#`t;^jT}FBjK3X^VDCBNo#*_AempP%zhat!7#QtI$N#eLY zfsZNoBIFV%qa3e26Xm?^R^sAwth~wFZV%*iyLxl4pT0XFccWJsc(1;HGW6+b8>eB{udH4UFIUSe zYnJ#&PpDj0waf+pjBo$Hf2lO%*#B3u=M#>eKm(!I95^br_^5)mE3W0bUg^~?ezNB_$+b449!~_7a>bpB=CV-3rG-=6PPr0jL37;u{2-Vs zbOG9X)X8(oPLm~Ki&K_sJ>}$CKVA0rf50irwGKOZ)?X-7mAA2-a;<;XSa^8gjP4A!1wPqUwoQ2<9i@`G(fSq!!Wv=>& z)d>D(qkgTczQm&Ge~(eW)m1;&8UTN{QGcha{xS)S@VZg|aaVn*KmmSh)PKQMzrZ>O z{-ja=6<7Tt>s#cpw&?TwzN@~>`UUve`niSc`&(Cig_Q%{-!SUWciN)bDr*+_1@ilY zE#x|Z6Ub%ZXV_BIR~hxDkC-exc-Nr*exv?+m;M?n4*prAzSmWMg>?t`pBVLzv0gvN zk$J+y{~7pfqyA~ut3;@b$m;^|fA6Z#w~n}Yd-3d0^7LiE^dCxw{7(&e{sQ}@hu5+^ zj`fqAYi0AZJp4irf0c({>)~(m@Y_9n%ERB~;UDzyAM@~k?&1H&!~cVa|AvSEp~3T! z{g%OVJWhJ}JZCP-FI($8gQxsV4}UrMg_s|FjL{du3h+z7Z&dsm@b5vsRPpZz|4n>0 zDZU4J{xsobKVJycI68Xd9{GrmC zt2|4zAtFfU|HIz9z{gcx=i+BZ(u^$GSjGlSF=8a!LAKG;FF_#aVab;93&~(Zoai~W z1bU2TWHU0xn3v-~NNJL$Bqa%X{tZb}o8aD%#Ieb%geHwmNK4x^ar#e#3pBMzZlX51 z_xwI64neMV<}d+lh~wk_@Q&f7T`WRW`=vq)GXAM@~{&#UDwL9 zPt0^(ExT-{JN3Hzy3ncD-PuJ>z3$#Fa_V(=cac-CyT6Ncy&OHGJ&Sa`HSYc{*7b5& z4f(~oUY-%I0I<%%!J*;K;l824Idg_P`}(^(`}@@ut67pd zY-aq)F-yn&Af(D=t6Cb`*EO}SU(woBzf682UTZb)&(qbnJ#N=3?rlgHDYuL8AIUbEp zbO4R*%7n+uPy+f}JMCx+vbH*5AlCdKZ0+rx(ax^E_JQa?cYhoskYdr#SQ}cjc?G-#+qKv|XvrsUo`YU5U*u0q~XGLjwatgX5C7@Il(=u7%=en+Rzr zAHqR!hM)QFfkdBA%4sa}Jwx5@0zL7*?a{b9ExJ8AIP8~H8Qr=qy3OtDesi=_4%2Wo zOea8~bKWybYWL*+nc@~(tElh0m}+@$B&9s5S_-n`|!=<&JZ&SHR^ zwczZBMz0>{q@mJWSk6t;X$K~SQ1ibCseG@um`vr*xqM=1TfBRMWyWY`noeZ0-f8ei zO5GrwV#@i9|AjRKDpmaSf-wd4OHYaq%rqq@LHDZvJD0HG z$UY*-b;gftf~HmczdLjgKee3~%jX+7XzIQYut8J*c+jAkI{{>HYRP@^pOrixFD|hG zbUd*qcXU=>S?|mP1O{4>vJTr9jTJc&-?zgmn{l`>5{SI@YPymq5-2&W&jKnCz~DOZ z0Fx)aWo)S7qB_>ErC9Ta#^%vKHQRM+L1bU746wi&k%}Fh(wy7;%cQNV&e63dMqQM* zzx_1m(~Ibj=6K)yd*)q9`LcU*%0kDE_Z>R1sBTKhky%JXTlOEkf4?<*daN)Om}8Aj z$$3{YP@a4E${m67;IYXuYfjbik0e)zgD<~p$3VF1M^`3u%4Z$^=}1oH{G%3PfpTk3 z{xPd^=HWnP$x&Eg$`LEiJDOXbcPxn1+{(bQK#6tSDw!7hhmjyajF%^a^Fl}8wX3iA zlH_~qAA0TB)@iYiByZm_t*-uLZXoA4V}X;u3;e@fx9zg#%{cs#4tm){FNK}9(wkB;RO6&*)j(WKsgOnx`{aKoI#AKmeA!<3h7iI7N8E?8te z#WAoVe|0E;k2N|kr|96UH?!xLGXv)dX=Ek+|dGSN^{^|_9~|& zx8%XG1w~U!0skPb#SLMtMj84i! zt)=sti=^J4_01QVTA4xC;g!A5_p$!+e;aGO$lBdJ^=P0XAM-xv*omFtvf#1s@!X2w zKc3h*sVsQ(#Lfbw1R{q{y!k-c-MwG6ThjiTHR)>#sI2H% zI1-8FmzMSJexxJDZ>!)*P-}EX;5g^!sUN=jOt|1jR@uzMVa(lpsgvn}=5M~5UpDpF zBuVMLn`vy19n*Knv#-X(g(yAi@T4-9FEGk~`qdTE)`wo@=I81b2h zC(X-2TlZ4(_}Y_!NplWV%G$tQuD}ZM<^$=h4w!EtmN(-CWt+S3_(>yo%{^Y@if@9su-DC5skRNI7{dBT*Y<491wW8%S#&X)N@;8os ztT%6Ta_HHHUmV-|H7}f+km>Qj=@f#xC_rend{HdNhE_|FJST2P91QkMIZ7=ezPnH) zKWO1ERg2PrLOgKI%+XC@&Sbm%>A&G6%oNB8gzTo6-wG5?cVf<;(-EXd|7gEI8`L!I z*j4xta7&mgfw&St1quUWI85Fa4eWyMz?VSnZdVXU01E^%8C5u{W`+1(tq|V@3YrQ) zfk5hzKa2X1eXnde(M&?x`}j#blI}HZ5Km4tmkH?Uut6! zh;F`>{2i9Hfpn&FA=86%mQ*^b6#X5ffGVP?mi10)s_5+{k4lL*pz?lF49);4lx!u% z;KWJ0ENeR{8aqOY>#>s*?Yf6FV!LIs-UYlBd89u?3cY(sOM$Z>eYfpiiU5oEkw-m( zKLfzxPsk(v1Ei4qFe%dijPz}m^*AXS{RAln^An^uTGppX>n!WDq!`?Nq>YyKc~T7W z7fI3X1Eebyo~^~Q{s(!q^DCqPq#Po}_yhC^KD`pu7$kHreTr^AHXn6s41t()_bm%8qgSL`rF)Qd*FiQrv`2Kzl5g z&M8Xga=%U5AYGG^M&Iv*s5Ysxi0B zZ7T1!x2cGBV-H9s(`>@QSuKM@_ll{Dig_fD3|ys5>cC3q1l~Goqs@CT0qdvlkk((O zG+&yT=BpgN_Tt?*ebQ`ZC?DINt z*+nmUn2BCYU?({DHXe?mYgT5u<~f?|=ajLFDQZs-?^Z7inpA{|l}V$`DQ*vjni^|l zrpP##DAke7RQry{Y^4izWztMjS3br@+BH|{!fek(7cPkth!<>_o_sL;P-suydvf>Y zyjQQES1aXMTh3Pbv#7>jIWDhUENIR|IqoMXY(&hM6*3?Tlv+FuGEwV0xaCUMHJRx$ zA4=<06H`k~rBaHgawZMbn^xF)6qSDK>r|~&VgNEx$p@wmD-lsk`<}o?xxE~ArLZ!( z3sp^c^q!iQM_ewNgNZoXcAu~|gpJA7R7O%0aZ-6dYjGtMG zhJwhy18Jm?C&Zn67il+s_L8o|&sosoo9*ocn{TkJ&oLeS`vNK2`wddm^S6{kdw#C? zH_4-%Y!g7a-;-}eeK~fyb)=Y59i;gA*iVY`+g1J^(88toIZVFAvIyapdPtYy=OJl5 zeg=}(!HF;FJMf=LE@&fu`ID}|6NeP-+eC_b;-rwfU-2)HqW?c8MSlo&W;_0iGzwUL z9%uvfl0uG9=R%BQF?sx4T}Fy>x09k=7b&i9KPj&J!=zDMPg3alB54!)1IqsK|F<9} z1L6O{Ht=vd>>uEY7}?mrz&|O6CJKfes-RT;D~Q`aOddau@=1%-ZmNq#ME-@s?>_mL z38L~Z5`MGEzd|S?6L%^po;)Zj|H9x$k^HLy74pkTZs516eR-$nwW%0mCr>H%-4nQo`UOl`yU!|ImUby5E*eAAM z#?Vf(eu@G6GZ{pcpa|Q^x^>u&f%>ithEB2R91v6PMm)V`Ox$8}OfcopBnj&wm#-P5 z$n^x}(3tu*%}wR8pq9h56FJ@I4#=57>)^wM@iWN{Dmkr#`oda?P6XZMk=uf~fF*2P zcmyf<$HfVsh8)MA?T|SL$~pQ3KBnB4Ajd5sl*6=^Ksj%{S76SiQ||`I>3U_3Lzkbv zEs$%nt8;yO`|$-sAN4Z$>HAum`T`45?UQ?K0)5jUw@hkte|g(?i=l6Z67_3e6mnRC z#|5vx=L~)L@h`zo-*+K*(>QJ8J!j9jCe>eABT&Xq-yF!TNkd=U(5L^8@zZxdO5srvo&{Q`0;(`a8+d8)ryRwel9tAiXKRpWy9di=4WFQTOV^nC(yE5>OXe?49` z^p&1Q-)|w8&i%F!YrnqVxHdBQwXYF!cr!FEc>DW=p$|)g1V4RWfLuEB@3)4&veW1b zSEkqBM#$;@;+CJVeQjy#`(r~Nrr3n~J^{JaD&HjD@q5G2hptQT8^7PDsjsCf)n7y> z)OQ;)`Hb=gZ~LA!^x@I?+rsAe=9Kf>H9t8(pm58t5f}5VypAjcQfP~ zRlZ5Q{r!-kul6+hJ_EViO+_m1)%TX6PyU~P9Q(T;A3R25s+e^V26vTa40;4{^Z9!_ zvurs1DrrFD4L`z-`OB zbtWi1{Qt4R^S_i2fTu1ygsqS2C@4MrKLz>)CoOE7Dilu-|3?tN&Y6&5>jg)a<)_QG z{dGqEPhI(!$hQ4=8~ML+fPccsA8_TDSUbV*Gx8sD<&M{d{%{^Pb+>?L3hrh|gZv=l3AJ)Ya z9r!=lU*p5yVC1VCHw*Lm?&ja|;WLi>pCjImYxF(EKMj5X`uq*W zKSz1+e8y5zXJa4;Q2oZ6`lHaSbOcUL*uY^S?-S=V5bww>>fKeY ztM%?Gcj|TTvR>%a>)utq(5crwn2Vfx-Q8W})O)S5CEM8|u1h&v@HsqZf4WDbvrl`; zBDD*<3x3P)49zKMSueWoXJF>@b(8jz^?F4S)J<&AS9UqAew_qo@@Yr+S zhV9rAN1aj;7<~{)Dk{g0B+j_e8-v?s?*NxA-;Lc}4I?~CrA4+v3#&#Nx;z`gu^D_- zbZ~u_?4*`0)AsK0HtgV!$~JkcrM@*%zoxAv(pcHJU_qpDXds4d*73-#ODh&tRn%0} zE?!hqxdA6kZ61n8>RVS^<>iAz?RUjHW9>bCom&Qn62pDn*awCk9py}DPi%|D;50dL z!@AC@#Z}kfyLJ)3uU#ndnn?NDUdVRGwxO~(?xyn93&9WfZX4*Lj{d%`_U@s<&3#)U zrH$8BVwd)oc;`T*8Ldi0%96E9=2f!IZT5jWl}+3(&=c*6Y`|H_UD3hr-pJC5g_WK0 zflb(pu&H~~vQJW;i*4DMH?d$5-uWxF#Pq1ijZ@aB+ zebegp70nxOs997c0R`IIS2r}_+dS1m_Wm+CrO-YLL!DZo3pK88YiVn5UB9-iy>WF) zcGcPq>(*|72ZWZ@O|9lx7_IB=^EFb~^`WjiqTRzN>VdaQ!&2(ON-G;~X<4`JBPD-msixctZC;uYwmW=?p;ppw9D>Y zmczZXdzZU;N{GE+oOX+@IbnP^o$19VyLZ_=vy4r_Ti~2&a5&mo-re7ah--0jX5z&1 z*}cog*wA zCEyQd;p=AKbN*RD4bXI#KgkUjQf&8?g8lX4SYp+jiwcLVXxI0T#w=SWFIvo0hLW$s&+z02};^FnQ27UdUm z_p)tHj8r%s_vzdO`LJce`4z*98Nw2a8H}RMn0im^^RRKmO&Lxxt4w z{b|Ex$FQ?C_`&2y8iGgj<`o?a9M7AVdn{b?$yn!(pTz>lLx@dFmh9&7BYHP7_ohOt zRgw(6ULUle_sP+!yu8s!D7It&fhUsz?7p-jRq?7F$>*wjFF#PFcKPk!QF~x=yPPH{%Dkp4hv8ciG-p+=`ssS{2`)IGIQsV&2vr2M(0YpK*+P1+AwF zWVc}1jz|@D0b6<(V=P|f>_)8WNF3UIkh>kr4xDPyV^&og#BnPrF1Eb<-%i$Zckbly z-sa@J&+Xc?|I+4a*%zJ%p5^n7%eUgHlYMpEB^-Dvo?KVABKAzO7Ibgy&14evg;>qV zmqGKl#z)4OzxA1s+7aY$eRCuU`oh+l9bX2`kH>e6fv$)@v!iwg^5bvrNP@l)uetln zp!tdT-D99D63^USdpGhEZ{D2*eIZd8u^yAXw2`~-wfEaTI96_j_8&TN^1hP?tO~=xr1%p`t*qOb?a**($}r?cSv93ckGb9#-H9HeT~1iL;4!OWNh-(N5_h+ zUhMOnX6?iG#nuUYPq$LN_*K%rdMCH$?LT=ac5u&r?pwdK`SRv~?7^;X&JoHIfv4=A zV-M+#YWL~Z(Eb=oR$WMo_+To87&IzzMQ?z9j&tRO9RO|%x^2w`#|n! zO(0k8Gk|ed^GO+&UZ`B<=Xffr8|z6};ap)KFE+bzpk3@xUX=!UZ|UE*|-t zeW;XV{8b#qfLaTw{ASx8N2A;n^03cMBfVDP zje#W>d~u_~7sD8cokIdrkgXulTTH%4okjwH)NJxFVoLj4?41SNmnskufNd+7f1_mq z{v?&qK1d^?V2AJ}P-Pe;1zQ8Tw=*9`N5LZ9WLb6OYZUee`OC=9RM?`m@Ow%gg;$Z* zDU4se+OpbU3C@CBQP(pc{ohE6O5RC|{%#@#(B@sFt!m3EI@v|O**?>Uz?v=OBeEM* z8qrT40IUJhQp*}71>h-8iop>4#tO^2i#&|9g5SV+?<9}T?IO*!tlgxzZugPG_!I+GqpQ&s#17SW(rZi6HwIN28CLrahSiEG!B>73Ex8ueSI+WP~M*0_vGxw=9=Zx zhlB4_-Jh;%z#WlE4G~AbZLzPPe)ofU59RL3;U2-}>Dz<1O~0FWP7u&{>A{T5^vm6= z>cGur&XD@)+c!?%Davv0i*j6mOd2msf>Mq<+f?3VPe0L)l|;1T<~>{O)Z;9St<&#m zkhM{?V?Tjt#}v&(yE#o57hM=F(S>EJ`~9AlkJ&`93f zi`UuDgWiHD2M08=RleMtV%!1bUZKT1VE8qMT+Oh^`y|-09pvW#Kw^hGab)E z;>il|u)AN;hgCXpSd^Ou$~{!qlj6!OBgL({QqfkG{t77N|Ajo{|BJK+D?^S=CxbGd zcqQgnkk;W5Nm`G+XrvAH9*|-@H+Pap`?)8K z{iLGA`4rB_PXbar^k;w;;Q7X5ISO$xBcR2YDP`nQZYB9f8@m==G|8f1W@@ewO5u&QOq9tZOJDKOgV_ls!|N z27LU>&mr8Sd{kHw`vefq4XBdGxjdgR6?rdmZeyL7ZCOw)zjfrkKzC7va@WB~D&UIx z2FwEf3UdPGPC8sF!uH}yJAu=WCx5UkuD%4emF+V1t;c}yQg{QFOZz9I%7|fLzHdH+ zRr(x{+zl8ja}7{pvi*u<&JR5t-LTI!YSggE8;b*3SAy^;fw@bySa2NQG= z%plRH$L1T5GXuw$;a&JJekQquk^_-IeS1{gBoBbmx|zPB#DDwCW5}CC0TrHr9Iq4G zA#)FuOt~*W?v;QoCv#QFdFy>}w*NK{Z@vEvIbAP)QAuFEUVZ-#xs@v4Bwl?> zF)_40J#GB-Er(pasYu1W`t}<7w;BBO`aWpr!=;%}->1{m_ftb3q7&--4`eo}e3N*u@1n9)fAznQe%E&y@NFcR>)($dw@dS&6H*pYt*G4=g9 zcKnI`2 z)r;bI^5q`H*D0Pa$lmY7IY*1EkAdIhq=m%0m&tSfbQt;jojA*fZEs*sTG)Eti8DXn z`k{-TWW8qa{9XBL4}Z$T7a9|v@|S_fe<<>smM627g2%lk>w5+#wQ=^J262zWms}`& z0iU~};W+o~tPgLS)1%<*Q0az$XK+|o3W|MN>~(#A|4=tk(dd&#KHJ?(Z5qgeksF)Z zvtZ6mPv{-TD?AEv}l-Qey+Q70U{B zd)i%nQUY!3m$j^I2Rgg0etA=y3H@$sYHg`sWwx%hX;o8wTT`mPwn%&PxGLRkYFpLR z1mw5TulkJ|h@iXEwywpj+#X4{nspmitFCN5H`{!L!pJ4stCuWX+7qqbyr^o?!X=$O zT}yg8Yr1->mQ+QvU}S-rXgpvRjGP4{6JmOrb5o2ZEqjnsG~qg~$`AKt9>tVBNU1Zv zB|4mNkZODmIs=piBWJe* zlClRWEpJ-y{P1?o!84qz z03!2Xklf}=1d1Fe%NxxPqhEVZGN)rTA?<6+}v9ij>(m^ziivT=cUt(`U`P}>KoneR2LNb?jdBA2NMpz>M} zFaD4vhVKw5j8p}rcu^>}Z5YACwvCtKV*i7oTI_5vV2gbW<;AXruT0vgZ4s=Bb|nX$ z)2`7uZV&4Ds`+@QpGh_5P_SDv6o}AV9z>VUCqe{GvNX^>i_YkFSV{Sm+?-7!tXlkP5gu$dRie7Yt36s{}Q2mE_V;AQjjpzrd?3x>P3R zUiT4%YU3?9fSM?{TfG_PTVsYIe0cRueV@P-TOw155~<)t3j7F#(s9)KaSWZztduH= zRpXo0NdG~<1fd?uvA<-T5M7Fo*__KTV|5-Sb$q#!({KK-fSeh$j*V%`4JtXUgZgYc zj!v=ZE|1(o$oW~y9)X-`i5h|&$Di%xwPN6udjcO*?q0~T&6JZn8I*F~djB4B8<6e| z-g+xAHFdqR5}<&ezIQ+_oqp^v^ieMZ_3g(8QzS;7;bF-6S^SP5&+PBtL9PyI?6001 z)b}Dj`Whl?U5bmLErR5Acm)wt-<6OnLmKtrE|oxiwD|S4WAoWK&v+A9{Hm*~7uqJj zj)HreRy7BJ^41}MDpDK(#d9UcvG_@D*5b!O$%PZV3O#N@ZKrrTi59+_Gy_Tt-|Ys^ zSwRb6hm#iKkuy%9g>M)fKXwS&U~9$E!pD2!ql%}#4?1zycd~nP#mje_#$HUAo zfb1^}`RPua?VTkSK>`Zx5V97y@{7g69|49sztNQ+v0B03Z{)wzm0xPz;o`&gc|lqo z?$Wzm`T5qPF5bRd7pgQ`d>L*~^^s4Fm5sc6#wgEc+4CO$n1}yo5C3l-e$2y%oxa-j zU1ab?IbCY-tiQy=)8U#9%)idVuki3~9=_MZCp`Ra5C13NJ5dkUH(Gq30?%vMrTDLa zXBRsZ|6TCEMV#w9<>@5v&k^6G`2PUE4e_@rK7@t*CZyFWeg^ml!2glr=@9N!RB)@} zmx6x^Jn*8TKRu^!_G&zl3Hm(Sn@vY;)$mv*uGHM->>BN)%2*v0*%!n$v=1#ce5+`J)XR!gc9k27G z9Nq~Gwv-|&cPholc~zBL-}+blIQfz=rKx`mB{ zo3$#PgeuG=ALXgOP_xk=n;qU3L;se+x181k7jA0kvCRo?aI!AavM$opVe45`f&-Gs zq7v}G%qpNV;J8AY>pNqy#JGe?r1~aSZixdxrZHl^R9h zKd(5YO{pv@VHj?(?cY55cF(#L{%SIhYg=j6zYQ|$ksi!}RP z;01yu*vc;;EJM`Gt)sguJtkT_}-=#Axx=}h9D7D6}u6$sB%MLmO+nuCqvKnzrW{JzH zoc$JDQ%z~kZ3b2%bpQTvX*F6o-D2xHc5WRx(wN^6IQ-Bgfp~6)i_}G{g`Pf*XNaw0v=M|Nf^-ijeRIyBM+=<*K*&?5&ks zVvPl^C@P)TTUE^-QMS4{<@jpM8NsE!y}d=H;n7HdGDi-a+|hAh|ISk_b+h&lA9-d{ zZ_CKuhMZ%Q(AFuD;BnL!V~gjBu3y)o%;E58RZe)cD0nT>=q&4`q~f)JC=K0O`Xj%Kd4X0gYGg)io-nwwdF1W`k36xk*GbL|-)ghu!rpQ?2 zjuu(Z_crV**d4rAyU}{_u0Zk|BY)Dc_wcmlZ}i?j7Ad+f*|1|;-HYKBheIWymmdbr zFA2Wf5)S^Tpyc`O)rTy6Pj=dFJH)fESMKP=7UxqSd1SvJ60TkW4gq= zW|m8hUQD&EV`s^(K%Fg_f8Zjx{X#7WIe}cq7ZxJg3zkH49S2*8z?qgK2(MU(!va@dq%U^g87=3yB0v(3KY3%cFZBDvd!@+6z(1zkw7&G`tY!b0aA- z8%a^VnH2d1OR(`PNMY3x!~8YMYZms!u4DQPdt0GZXIZz9zgl_CLgU^^9{Ol7B3_6F zSyt9bibi#jVi3AXk={p&M&Ch-^gBt>$gQMEkCS4M5~S$FU8LxAlJrXDH4F0hkgu`F zE8S^eVusKq8#4st0EWQ|;u>=7)7528DO_Gmse9ia0J3TI^m}m?1%f1MF%>dVE7Jt! z891cIOl?vQr3zJpF_|*aY&ID4($p*s2JlE4j6upoEiQ=@FpVsDrOSONXOB3kvcC20 z@7QjD05B8fn24Duzt&N0Po#Rd*>ap<*^bQq8lKFI#O2fP78g+8`D?pk*l49JZ~64(t<&$30lP%0o{^bq6m!C@qT2N1H&ZFa)yky3=Cr{W^D2mM zz^0TtEQrWR;GWAwv#dj^!B`&5X|vIG<>mDxH%nE7G0dbQb6nUR2RA5#U96O1y4ABA zozc#&J}bc0v9YG2YKfKS9NS}s3c{-=1*Zh21uhQG3|t;44O|o8?1w?r3J~fDFdm#f z76dN}aK;v3>1BoVtrQ_etJ&}Zbe%megx#LE;^x`5Pru@YmYk(nfZP6yl*8)x5-C=% zsInueY-$eFMUE4L+_KMSd9sP z2$oyc5m1)<9w`RlC!|=F-ylUl1OhS#t2`d8EWa7F0ITRu#Xm+KtLNjOn;|C%MSv88 zx%`5^N`xHw6X=y7>+%&+5$g`tN_jY8?UaWLvg9E$i4@I-h&(h3Nip=Y@M7W#xDoS$ zQ`B)H!ng{&vVH-*Vso58xz`;o6=8kSc9le=Bi&H3tUO>rdC9#<$I3i_I?W1Hc`gI2 zTZa*JG##Hv&6rQ-eAeZ01w@~WAL8$X+!IEFWt@?|RLOxz_$}@!oyPSn?T?9AeT-*rbklxsF#8L@V0Mu#NT(4cU%S_ zr`w0yM}nWedmxui`@RJ^t#5{{&bNIpLvFRoH;K1>B_%0+m!3vnHRSqCMJn#q_fbP1 zo_G@c`ujBGZc_Os@#_1ZhCVLk41W6ZO8tG|c=fG>oE|@YOZn-$9daw}>RjJmeV;M( z6)Qp0JJr6(Y4lwQxu!Jqbs7551PN^4etfVj#_SaQIEUOS%^36u z;^zJPb;#uh?E6=*b=3DFK1g=Lcjl;npqvyt@(PHl??;g9MOqLaJar{dpN-s23~1o) z8GZHCF22H0&k3 zAyuIK)gHda!#8>OjUIl`!$0WZ`EykV*7vlB|GI}iYVi0^(E2-rXZc@x_){MKA}oG7 zP`<>&FY@r-Bb{&a@z&nmnl z&e>51u=cg_*i|o6Kg{D$h7*E3)Di$W5}PUKzBhHDlUD5nBxI)Z(JE*T&$*$d~qVmAQTJT_V%ZafZo zTRU!5zjj=TtnOq znc8VsU)w;-<}4_eKCiN_!kpdxSx{~kl-p7vC>DjHGvkEcW8aKaI>-wo73(C#93d@3W z1z~$ycZ6P?Zx)m*C|Y0wv*#9P&n-U9?jgVDtKUP(^)U1kFm{A3tXWcBm2m+>fp!;c z{QOC$$}@M}BxUU_r7%vzm7rHMfB$o!Gi4nQ#<*5%K7jI!N zSSYZ9VFD0yrizuz3IwJU;0#ggqL4KeFMbJIkq`>nFZ^?Ja)mF<1$F_UFwZu$g+hGM z4Twe-10f66`BM&T82ov;5)N1j91}f9)t*1@F!xv037CgLWZb1 zSZZT1f)U$R6r5+jqYqwfzpoF@wt=9*Ikv4SIA4wwvx0Li3q`CTjF`x>f+aT8C(LR3qN%w~i@V1H+P@i?AD7>DuMtO_^WQlgS zAO=h9vPEbwdCV0;lL&sCL5evulN2C{S)`bD5mL;dIi#34Wu%x(*N|eaRFO_Wdr9rN zXcYqULsQCP09jC_6_hv<4e0rgAo1%0fKU(N%W)fGS|^~ znd4y4K4D~HqwzAO(Ri85$YdjEQARrjpd=s=WXf%YM5q*WliWL~Ozsu5lt3W@nAm6= z%F9S9EJ{UPF^t7Hz|tv~gw3#hhRw;M>zm!G-x?^uws`?dUqTx{DTCuy>IE#VN8i(N z&35G(086@!HIS=i=TwmEf;fSiOqS~cdIuUZ3seU!cOw#v;?^F>={(Bn_*x~W>wTCV zGlJI9fi%X?B)473fk>b}HCJ_#&^`Fpx|#6DkmHT#4Ie~;%r%wqH<06XVmoB6fpSiM z1|L)IpA0#fn@aA>ptzhd5DBkCZk1*X`U2vnzNHxC2pY_K_1LrCmpyVD0H~@$8s+Tg zg5AEKfH(X59?1Ct*WU2xdjfKgD}DBJ#nuP=RovH;+G78+ld7v1*Dg#GkHG`O5F9+l ze6~DeJjVaCXD8uNVT7~uq-KvW)%bf-OD%W)p43veioYkdFE}mq_oT+DYzKc&YN@5i z-;-L(`&h{3d5oUY-h$#64Ee9rLus^8~c40|~1^KLzpQ9F$tCW6v zR{NTf&s+LM5C0Dy{$D-(sE7Z(hc9&cVn1I0$ithS)A$&k=gHSz;MhmD&+9pDgGav8 z!^b@QE)V}+5C0(#|49%340!z96D%`5r@aUsKfh$zC(q+}@5C6qTiP44eg(b+Jb(8v zpPtmN1z)51V(>R0&SwDgtHB>YnQIh(Bls=gS1NuD`0t~9tKxgW{{`a1ioXjyvK`ND z#FlVO-=Xr;!;;vm`9xq6fsMIcrJc*kU#17M^X-Yv)Lr9vU#oI}9qnkiOXfU!VzWK8 zEq3W&h&Egp4{aMJ@W_UA_#hJ$OvcXHYzPU!9R`%c?Xaz}dL7)V2{ec>le6&OcBi;G zYdfv0wm1MJey-Xi9e9|y$IF_en=ag#pdGX+kdP;dt(R_?>B{39lTuFG$Qe%CG%K(o zV2y?b22anPp%q&ecWRxt2d2yv%53 znx5FQF5cjEG_|5?mumovxSl!=V9gN7qDiu7k~70BT+_&J%{`-l1JtPBm_?J+xBdaU zc(Y$JULZJ$t^5MwNtD5BB0x#%4XO{KgwDSLkq5`Fwx%@ON6gh8u;9k6u(SZ~+g8Q` z&2+X!M{U;pnTP3y3- z+{fiF4wueDsmbE5?UJ$J)JMnitllJCy;&#l9kR+s9vur?9e301Teac#Edi%*bVoNm zFBmC{-M`;YV&#!x) zuH+)2m+zx1xk&KkI=YgJ?B5Gg&L1an9<8@BEhI1%{iljQ{y9_pubg@OI`J47o zw;v(^6leq;=P9mH;R)s`JA6pl*#V3YJAb9Z1;98j7?kU{p%(!_6&kZ>l@Z4psPS_0 zuq+9F0xbt7NUT7mqyW^+CY@{ph^z)1Kty+O3z!aTkr;wu?5`#d;Exz>0fItNK@-)I z0suqI2Eh$9I|%0pb8 zW$hpjeRq=rpRkj(4tN?;Smy2{#bDk~ican!#o%NzIVQ7=3d9g$m<2Q?a{|}=Y;|E; z*t#aE`Gtf`bOEB|gcxFUl&0LUNfQf|T1>Z0)B^3}gke!@cz4?&nlYQD^B9>-G*5T* z+7{9J>AN0;&p1&DP?o5~0B52SQ^EtUbF&~uHRNM9i8bQ#aiA^ipK?)J-Uqh94Q_fUjZ$gVOht? zFNBW^QY?$VCWT(&Kq*iBCtbz;5h*%Emvl^Dp{Tf`n~yetFUGRJi|JVA_kdFW7nzQB ze2WzK8?iLRtNsfp^_(Qda{n7r)K5GJ>z@&{^NIgp|K@-eqaC$Ohn!$$>frE`JeFg+YWA@O82YJV3-G%U3hdXLAs^H^C9@m(#ye@pKV0BW@WJXc}P4f-tHlck^pxo;Y zmx^GC#t)ZNpzpeM__@KdxXcoY@XeLe)HehiBtQ#Ijw{G z-lG|V?()dJ6Kh42k*}kVAc7%t!jq8W__MvdRt)+0Jb{lXw;ytHFCd+(D+A@c^(G_! z&{A)`&q7YuD|2uHecwt`pH-65N4*Sw?JI&DuaP%++qc2cho_qaKYd#u$Hm(ly!s9p z`moGM@YDA^A0;HU2dUq$9BJKObr1f01Zgy-U! z7O>Y1y>?RHi})bf36)sn_5J81BJv78roI~?7eiVQpE7(HsE@wz;@p-sR4IV!lrOvq zu-COq7b1t@%)anW*;n4dUT1yb$+(+e=CwSXFT7q9qA$9eK|h2KuN`@&^S2q-6!Q0g zK8uge{{Z4&Gx+}x@$VV@VZ>iH_`gS-IytAP?={d9`0#fP`L{rm_;8INKNWTV8gVT@ z8~nGx>-vek=Ce+hUk!er!FPfGvB7T#p9&#s1U&Z?*&*cdeHXSKaq@VdO}0L2@O+u_ zG4QP04q=P>O`iDX)cq5-{=z6v{Ik0~`PSE6`ID@pF22AzVeove{g;O~Pl9ItEZ&eR zkgxFY*LwI>9=_efZ}aevc=%6vcw&WhVEy0r@PF^&e_`sfQptu_Jtxuhs^?7730c-6QXK)pJA* zuX;|J_NwP37+&?9G>vK%OsnqZy1qfC+i+P=qPr=kA3fXeXuCdCJL^&p^N6ryjO2N7 zsYh7y@K8L8tHZ0+C?56*I{t5ioNmKUA?=wjE}r>#tLh1wb<>x1)3+)MtOmF~3#`rp zs~uNj3Guy`Jv+NT3#{%=!}(v^-zu796@>!R z!q(Ir`@Bh%2-0O50^Ih6auoP2H#aYoJ42Ek_kD$-uq1@Sw7URlkZ;@m3Mbi^jKYFT zr%W!8EGxh8GRJ-2g6dH{fM|<}`8Z zcLW7lR%0mGHnzjm_bZIS@680{GZ5O!x^?&u3`{z1{l0t#ESGNM_aV2=r~u87fO}8s zmFt4|mADIdBj}*zZbX7n+`1M*I*+nCzE;WUdT%h589F-Bl-q8ULDZr?HCM?xVGm+v z`x+p3y_1`Yd=OE4y|vSJK~5$(Sea{}oRgoy$CP`&At!TF$$c3Vmoo+;;p327r5S_1 zfVipeHOR>gigZ2ptoLP)T&Z4gkZwOW?DqWxyxHGY$oXOV-tg$#0=dVL#_MB0uWWq< zT|J!+u7rq@>P1W8zjKMhdI9PFx43YjCJ%t5Wz#CZ0Fj^t2PGxbj1~3(x6;G0b{M9agvOG;v zNg=BpjGkzWZAoRK{8WoKng-7?f0rwNn)N97R2xIqpStp=%MCN^q=n>AMKAAUqy2xG zVo-m+$fuI>ts^N0`IF@QZJm^Z$HZ%z0p&#gPY<7O+#Sp(_yrGjdHT}%+GXJJd~lq* z6@%vu#_?tTT=4iq%;qNq6Y#y(Cf+?0VF+%#u{WBuZoCoypW26ndfchiSaXK$jCPzX z*Awm9wxwNOkyOK!Mp;=H=RdSc zrp2nhW*-<0L4o{08Q#jJ>+VOt)<+R} zn^y(OlKEyiP}^ zn4a*)JCinw`HJ-+@C_uKr6^Y^Fd9fh(U43ON+U#_{fg7{zJiX3O7tNUmG(<~Tjx5v zjSmJN3T&q13>i}li0H)_oKJTdG*uMideAgjfboar#45mev+aej2hImw3>(ZaDD9)R z+XzffM0qjA+J@m{7L~~LMH}V%qP$#RACnyW;ukniOmWJc^bz!$2x+%Hf)C4TQw^`R z*F^YpG`w6Uqg$!hL^ur{`m8x|lsMngo5lYMmFfCSjnzs{#sTrafzbO50U0mwOYy<* zIep%MYr%HwpyjSdf>|%+bRK1Oe3g=u>x1|^A!i1y<6TH({7iBQC8u>zAK&bI!vjdr zx|tV;9NX*-k0HS{)qN3i>@VAaX(NH-@kxA4xvxWRBhn~mnh3r1UW&%mL&h7t^=^Qi zu2;<6D8PEX`nEu>(W?x+SKrfyK0R&x^nC?#E7H&x#DbvPrR~wmIkjNn>Z3x*RqcJ@pQQr!jN6!E-XKGa|d{RD>MIoSN=5XPh5Pyr#<=Br(F4yWEa0qqH*$j zngQj{f`7t?QfMWDry%ms;S(tuqLv3C?2VAU2T<@4-U2874M9-_w;pc z85~Ls_jM;C<$xQPGod}PEfxbTJ#oXj&Z@;#*WkN$5x=ipDDj#|`PyE{cE`4%GQ4R> zmakq2ez*4-Iba+Y%{lysi>w4{ZU!J<^O;B_d_X+9mTU*=GC4cA~P0 zZ#8-VEqVes0-FQmj&?)Cc1K$Gb zHD=m^&MVGwFGNqL-c?G^?X#;>m#)NtH|MUQa-cJLSHiuqDC3S)%J%DXY>d5yyL%@o#QMh9r{2ITKudxSSL6LFH^9L%A+J@L&NktqIF>D@-GxGQobL@@>)QiRbWod7 z4By7wTISuL_b$jaXdzHt-n&8X6Ohw7D6Zpc5oh~! zxlel;<$uV{4i02y`~#wQt`XZSReC z_C(|3wgHYy_ygD%Siuo;!sw}GPMq`R>`Y_39UcCrv9BBX_d9XcXPd@;@1%vTk05UH zPcYA!fMK~$>GawTVb?yt9IU<_$T0K23O==WFKm6&E-2qQSV=j*Q|ohBOlw*s2X_D0 zGy}?gg=}9cG02}}O>x>r`2yMZr$uPGO+7E$)Fg z>3euW10il9Y$oJAG_h&WV*@MD2o!gH}X zZb)oyOf(GwC2ZNzWZy7j4cj)?_xBHVt9Wxf8dcHd(P7D3nORF_){>dEWXek|{q{ZUqgHz*bG_@! z?vl*zlI+e}GFz87t#8MVu)YDuz-uoUSxctR(BRi+c9*1M&(2yhv%4f^v2Z4Zi zLYsS{vFKnApvWi~IVa7!Ry=vUFQ3kzJ<~_|`L$~LRAAaReX=L8aGrej)T-d?4SAg% zf!80(D~%n=zwG$b-5*cBKeoE#(T*#wylC$qCx4S4tPKCty~TO2e`oTy$E+jw7Dt=M zj#*b%b|58ha`ook(CbISf7uXx>Ezd}NNo8_&y+s5?~0DyfyhZ%Jg?f@TAW{5dpQ5< zmwp(2+tP*~91V}=hr%br;on~I-B)ASw|QzsQ*S7lbDX<3w---d{F`U?94OoSWW(4G znX<3fDjPkT+Z^fL*I`9EI+zw|jvYcxhiavCeJ}jby-gjw9&MQN z!#jFE)bO98&dK5L32foc#P9sIb8`550?l@cAyb7S+ypB2Prh?y z0F}3_5oJ1oeMJnsFjv4tnmRKYn?l7ODeNd>BATT(e_~VU49X!>Oew`uMC@WHB4I1?|_+PIuInQJ8I{J7{($BRR*`DBpaWO|^0s`t2MwIeOj{ssY6@vSP4g4h96@mx-eYltP8K`MHftL=d5dn(ghRo`8JCe!bJHX`cL{k&;rbh zkCS5RJfrw;sQiCX>AxTkAi=Leiy{Ae(BN!*1%kmKw!0#L;jqG#*cBx6&dZ*a=dGdWNR7>syYu@PMr2#%E|Qty@ZBWBWNAo9k3J0!It2vmvXZW zeLDJpN3Irfcj`=oK8Co=36=I~$niR{z4{L3IDHZyQ|?QUODZ{Ddj`sR>s^40zg%+N zU*3A-kkj>=Hh8bT`ysd9tx7nrzP~f{>1pHFzF$C&*U}rj`bu#Z>h|f|$4_4k_9f%@A`C2h>XQXF)h?hf5f^cBIu9L!?NGsYbJ zw}l(rB%^14@5l}9-b_iJ? z)KSnJ7}P%nTIZyNtf!qg^JiGkfp2xvLe}$6ocWhpM_qi_`kBFVQvclG2_N{4i+95X z2nV>_nD^xQh|__*7d}8|{5mk7&i8d7zX?2(IEHjX+zX~&;x-=#zZ5)whcbUBcrImp zG?9M~_%_73Oq2frc;5OE#ZS1C*z->fZ@&rQ0-XIG=fl-0C&sYU8wUMq;07q~^=+*1 z2JIf-#sCS3v|GJCNVwe%PpGN!f&#?%aeMo+RV@we>zZ2EuV`(mUpC(PvEY8LJq-fj z=55h!(Ph!C6p?t-pv2dAChlCF*dj^HBi|MsZUx?Gggo*bGyvjC17fN?Vj5(C=(=e1 zPF1Q6|A1!^0a-*q77>s|1Y{8bSwujhvU?!Ax7pmYdAfavf)iZT8e!AMX&#H#6}i;yPlue*!lWTG00(R>%78m7-pk z;dEljMEner6ABD=(i;?4G5wsQiK=0$9Om5CP1d01>eJV1Cu^XJ}=&4&+w_59Qa=UQSE^MW2&G3R!Oa`!Zi)je<4KXF*eZOpuh9O)k!OKb%k-dmwvVbWDRwa4iiKux0g$jA8 zDK>N{5gR(}2eX-um&pImZGXt6@c z?8Q)0Kc}k9Ud$?Q;Q06j-UXslWm4{SA3@#?(gu}x6$>JPWzj7OMfm1rGWA^rhMNPu zfwRs`K7kbco@NZX%Of`*a`i^Ojy{5jY4p4kavXoQm)D8`cdPXTKBnB=kb4|y zl;bVQKsj%{(=j*wjKSV|*FsL$tEZixzIMpnB(=G}y!xIt^ieN^pT4i8*}mTx`nYT` z_~{Gb-fOh8UEkjJwLnhySI>JteYdH5*`*AOSKpr+`gprDP~U!haO=d#Gkg|utL&)j z`v^Gm`i?@b7HPb``d*;E7xB?^7Ex;+o_tLAhF6ea>Z^ua71F2=Q3)(p083o^R@$GG z{oCgDVv_Pesl11tmE%ZHP z7e6>u@E)>zksPvnoz8|nt_?cS`u!-FH97(Lf9k|JXD^n`^tU=`_945PrS-mUs5?RF2Iu~pu8v%VPJ8;7$W9&9lL&ObYN(EG;4X!THdpk_pIeTYkALF-m{i>9EMRj-lFb$+3i?k#>-_b?^(-x z)~on9HwE~wKD!s+SvInJ@w0pJvzB){Ga0|R-u0l(?#0)p^Yv@ju4?r4jg+;#Z}Qva zKfzx7t@3L5g4y0}^%vCoZdY*{`@1bLfd$^SwOf%gd#^k8zh88CZbwINUPrX!tyg8w zJFM?>d#^lDhCS`pbM~J2vgR7u4{uxPBfVwFiFV9&cD!?^{gmcQ#Wo*-&RK^$diOLG z9`mm!e02ooFtwHRmi0c`F!^w#qYABjs3HIGX4D#!efGMwsBv!K zxYau_%PRZbG3wg)OpTn{Y}aCyO+Fl$W6cq+8JGbCz4P9)5kH8HtppCFsB52oDp`xE z>>xk~_$!0vbU_8CwUKXN9s9VLMPM(a$#fjBphN)+@J?4=5aUZsvv|*22zkEi6>}LZ z9kOQ>HkBf#&sOGCXPQ zf)tfjlA_Q;QslG!tb8#k%JEe)<*z42`VFLzZzM(fGE%(PZX!h^T1cTs%u~o;O&;%} z`Ffh~pj%0ie+wz{&vx*k!ZY}1iFh!tDBqd8uPEN{%N4~H$)u%xS+4_%TG}l^LkdNK z3on{+?K05}i>(tlrfhERLpgiS5&dAQjrgcFfDoCq78lqFY8+H!WhB1yw{qJ6L?c6i z>6M9c^U96C7lAzxrI?$UC^eBKyox5W1Qm+P8AxWNGuqkJX9eaX+E`OjwZzJE4%@Us z1>x0`f>Q$10v88o1}+bj2Cfm*0IUpFfHyh(9{}`J5WFaW8DJG)K66TMMxD6pgs&mR z2-Ye7I#8N{cncLH{oN`(uIOGxKTL}JPl0k<^A}Y5XF$1U`2`S`KdRFIg%tcR75{t1 zJ7|;40VnxT!PP>{W4HqBqFAIzjlfa#3jrkN7#WnK5zHI7dIpU|0#Vi>fn_TPl#G?0nm_6y^Xj{biEg`AOh?4>T82s zI{F?r^ieN^pT2#NTWM#zzP;n}rlAkFhXg-;K}<+qb8qnKYk{2ZFIFcBe)?`pQ{R(@ zKKaD~jeh!g8iG9GRh^o6+xNc=eYn&T{Pa!1O`Fd3XoZ~aFNShLeO-`~Un)vQ6L0%I zYv@B%0^7GAA1oCyI|W`SkSV`xbb_KsK+X9az;gOH(m0>x7au6~y@-!FpFaY*LZo@a zD@ZW)eFkzXkVbtGd>E*YxSK?@J8iEMwbivt)Ac&>OdTk%sib`8(0HctWDC7jq z87XbNu5w*`XiL0vAkvIhB_d_X+9mTU+2*zp4AelPvWeTIdZIm%4MXueyWmE%H?p*1 zVP$80U=wz+ZR*~%Y!wtX4h?SZ+tS{=t-rsbw-nWE@9&J1FI(1hYZiNx#olDGH(BgW z7JHM$-ej>i>G-U0nMfT_fr&-(wFzduUevEo3!IeodXe>dk@b3!^?Knm0*T?Fc;^=P zp$5I3{jL=me5GHSD%;-Kl^Bk9b`SRr4Z6ztx(Fcx#wDd8F}{iVj0z2_NlQo<;(viH zsXpt9bhg&1`Rq9u34iZWS+5rpU~dw56?MUoH&lK>aW|~sG^iV9p9XXDWb%@-f@7yv zSoCo5!sO@kYx7GxuOuR+`p}HBqGQ%mr&f^5vkH#pjpkdu9d_==#;~VWa5dG3P`V`0 zS>GAhF0zMrA7qI`Cjx?oDgU>V^+e%3)?C~?Gs2v(b@93~JwG#Drd63^Azn=8}zRAT%{iz#fanfNqkJXU69+aU{P60CG2}e3N+F_eZ!Zb^G)}<=4LXkZUv*skm3)fT2&%SL!>659Vl0 ztGEYpoI~F5Z6ui2eP+iT>% z>cp9UnH*X1J|`{g!3A7yO~GJ%%E-TzgQG$YFpYD;rxy6IRpH9N(z*fso4Nqn-|Wi2 z%A%8w|1$F5?aD8)2EeC|$p~B9J^YAEK40=3b-0C19073-Pq^gmTlu}J0Ixs8uMGZK zLmtn6>zf|_B@h1-5C2OK|9kLJ=;6bGxP(bqA%287f3cB|fd3uhWr|-4{yxOHcrbrC zc+R;Z#cu@vDB}Dz&ip9&Pb1EU8u?-H3~a_U%-=oWa}lRL^6BCt>^18&$cXh^)RglK z;3I@p{xT{6MN;lR+%Sg!b0`TDQ&EF6N5pZ7$3qDY7m;MIhZ3~ePOo;IRZ`;sE^x4j zafZo4h}rV)vrQK2YH`R3K^td}(EvK)X70=JxGGVjja(iyvI@u3594Upp}SQl24XH*$GEG-uvEJQz*lw;4Zv0Nxa2L-!DzhCT?@s{HYum! zQdT<F!T%M3mJ^(68gaMk24-O(l-zzv^#!U6=yzW1hXl7yorne&jIlRb@-)afgaEL&jtrcv z42wPBf62ONQ zIli^%5S^S{B;bqVBi7ua12zyNfV|J`X4$~;DJVJZz$1G<-teC<&2QGFweyoxE%`Ak zvZ7;eM{N12o32Q%{q>Ic2Y&afH*aoy>(x^$FHZi+@7^4J?=x?`Ds2In!`83i9NKlt zsTEDVq2pF$-|k?^z7c{x{x^GH0$*2g-aA?>$uijT#%^2!y*7}Pl)#>lQ`M;k& z^uyXf0fc>`VhGxH>Z2-=m{b)7Pvw=DPc{$Vb{8=TxK=3>m6XHVw+`=k=z+U7J*w82 zcC*)L8R%5PD3f5zHq;hLtCB!$K~<7G_g|1Hhq?s1BtqsK@Pd4!dlDQ1QxH(%KX;$A zRcSEdJhqOK4qNX4`{|T;=NoY_Vs1op2YLbHwOUdP(V1+$Lv$z7P~fR@L0u7%KAxl1 zPR`ZRX%LC}$$8ov{)zfX_$qzA3q+s^mS3-hFJM9;4}GtI1tlMWx(V{nCk(o3onONk zeX3=Q%ngjuo+id<$BP()iAZHvYPT#X)S~fQ8DspmF$Uds#*i|1Fh*rN8G}zJV~7TK zF-Cq5W6<|9Mm_~mYF%K&$oy*vL#p^$mSykjJtNgdyWc<8J^ zzDxR>0aHWnwamv7b`UZ7zL_!jz5_A&yjSOc5HZVroG`ldxW<1|R2<6tt^+8dsRLDd+@cKmsG>+?h7)bYQ2&EIOM+-?M zlf9}zL6((=2I4aOIE`$6z3AB6?1I2E@OER}Cj1l~&c>6?XK=%y`x$`)%rP=`e-m`} zawy{qJZBf{mGMPPI@^lh(DA`#w~y1*;D8F#J2ai?Vj-uq6%3DSk;n9Wbkmy7upqx7 z16c8^J-X{ax5dJnBxk?O8J+Q0pyPF7JIwfS+#bNsraJ_>VKkU@GRF{;&ad}utPS#z z2F?zCz0;sG_2TIvA&TFtLC3N8gU|0Viyv+e2~qt1F-v}O2ZIayYnH+&ey8J3&!&A> zaz)Vm%zTaFw>L|E@3#1HL1l>I_fgPo575qkfBb%B@xzlsLKMG6cwk-Xa0&pQ-xZ)U z{WXu$D1Jkr%VwT_z~YCdN{Hh3DCk->-j4kC{mSA89a{-e{1yS3P5U}QXZl-i@p~BQ z0!ta`C7`=R>bnW>RI+%9E* z++be}s><@@IIYl~96;8ffbXEbD(wC&sNENAm3#O{vlm&At?6Y9HsJYXD7s~4l z+r$ga^OWXPRnj5>IWAVug4vXnL^}uiNS4k{ZLPR#aaD41K8UDAW?!ti5^Ju+nk%v9 zO02me5(T3-5^JtRx}%RZSJLu!+a*UJea=B8MhnRtDOM=Sw>d{i(~hiEwVvBYSGqdZ zTrslD{sSXpW>Bkx1!GPHjrlHX$Sc-diCvV$E=nSFzqED?Ra;`sl~{9S4i(#|=j*(W z(kKE;@ua@4v9`u}dS+9=Vi0StbY8I=-bHs~Ph)IyH}7Wci?oV9O9xYv@VE*eqfksq zv|S+hP(kI0HCH0GT8^#mN<;<6UV9~?5?_BMf@BsAmKUDp-j!%zR3eeB>Vy$furPPI zY8XQnLs3;e_F5$%mYq4s#g3)#2F*Q;auK6_DlC;w_+qsG0_s8h*bNcsA?CKSFGl+d zbnXMl_k%A+>%;(k*T_RG;tHf?e01LV*s3*R35!hhIY?*3W6hxBn44hI8ehUm>#W#6$mx3-zZ1XzM+1uuKf{x?Q_S#~v`#ie0 zSajyPaeG}~%Sj|9ybp8~5&A(a+{gN7hK+0d`S#%(o0{sf-G_f$ARr3&;a48fK0J&N z`vV)z-<{of*}@M61Xa-4-a9frG?CuP4|DthcV_EsChjc6SxndX6lyYU;46^k6*e&U z@wqY?*cH+isS)5z;J$u1C6Gy1`mZubiHp^(h%s4oC>Hev1JMNjtpJ)#2Kcc)8-4(A zdWILvYSC=bKZNvF3w{*ow5+07eJaGUeI=gIxkNqb;1{ZYci>V{hv41JKG3AP1OQi< z3Jqs1myo++HmL-}SKZ@#ucR0Y@l`s$TF2Lfe%_D7f?CXxwFP$4m@_wNGi8`DyK;|Q z+{IrxJ+u?|x^dc0H|?GK#$pjjECPu|Ah8G}7J`fggmMThV~v4KCuX-n`fWzbfiOgO^)&-kiL`B zR{bGcHYj!#=EYl%aU+JkDWyji$G!#$Q&;!u?Qpyt5y-(R1c=; z4$QfuvXb2d<=jC&7orLr!KR;cn~zFR@jovDkzJkRCjb%l$5;FzRm>&)5Q14mAN9*S z7Oed0i;KU1`P)`L{Gw%N!q<97Uf+M z8tEsuy!x4?<(D<*^{L@WZl^1s7xU6)tw$)MgPZp=1{y)+TH(J!EsIei5W2Fo{(3z|B6Bj{B%0 zNrH(M++J(P*XX!Nm(aLE5YV(r20$~UoS>NbUY zCrqFp(S!K0tg!+?Gcv?Q52MfuxoW0l5c}eyFM&}uR#)%9PVQXdBGZ?Tf{5)gLBcSjXfs zz70RaoA4^or8nJ~6NEP)vc*bQgO20Ec2H=*z&Z0S{A{`r&?S&ZI$nDQ()sniCd+z1 zXVr^oD}nqT!4KDLGRVOk0G)k3O#bJQu-jLTNhdc8@@4KLCcnq=v&ZFX(AnjHmhf-* zZ|Co^_}Nxh_-;u~OdHu)A~BzIthS~WXPGk0@Bg{5T$&O}$IfHRbGB0X<2*N-BS)i_ zOJoRxe-v(YIdF-((t%IR5GIWPZ|+IXpqD!IW$I?Y=3XcME(gC%y#=sYONf7`gI^&> zA8>IGLW#_G0~Nq2!sh^B%Ii>~zG{+)3vfoqzam~6=9Q@LhiT$ZQ@;SbC(J8RzX{XC zpP^2`l%fba2qkKzb#oNJi!rTdZ#8JNf4zfGs0#tV*}}Iu_%*5*@Ov!$wGO^QjRGc3 z5K7cO4?Y0+Dhq!L(z`9#_Xo}L>9A1!xdrnaY@RD^0*#y)%=(az{xRTImq7UQ7Cj%E zk9+WUJosmTnZ-G?4CQ|VfX^HQ7bEd%z`W+fpAPsOq`5W|J_j(L-G;s%2?}62$B5qo zcmU}$G~5H2&pSik&jbS7K!4EJYq&vR_%{dq7f62?Kk~Z;Fy|;=Gze!c{KTR+o9I*f zhsMIAWs?w1+QwP+>9e%qquIt7nWksWWkj2L zHg&>g%x+7asT5AF?fiOEYpv%F+Efd7&<=fAuiMx9u-?W{7M!d#!rWTa?n-epkN8GM zlF6+*I$D!mZQZ@wyW3i}ifth}LNV_2-mR&Z>Qp=2*@a%4GhIJ#nQj}`r+y=OAn+c& zYq}>jL+{bsAq2*W+$@irHhSF@UY=8GR2X=A2HhM^st2Y!;SO$Od@m*8yQYKxTSulR z`)3A*QH$hur}_tP?49TtO{MVUkBWY5(-y=^;_ z+uN_&T-Q(|LGpLDwgD?dS`%M{x6DqTIo`FaySJlr*X6yMnH1Wxv!|mc+1vKEPRfI&$2rg3!h`*b6ff(=ecA}wmDU7e>d&; z=Z@UmHuqL6d~SVRTd93Gy3ARoLBU-HK1Yids2a%&m~ zaW+KS$geHC^o(1dudQi)zFd{GQ_Ou3RNGhI-15mKliPT}_^l5f-jRI1@aB7;uYpYY zlE)L^KJ^HoK9#r&d4%^o@@#SG*UO&5(dCJ&o?nyL)UFZ-w>63PX!U`T=PKps@nZGU zCmt*={`#V)@^K{k8*d~f=~RL}$yYyrVzT(l|6KB1qG(%t$=NjrROK0uH4UrEMY>Mp zl-Ev{W4!h}a>1}FKe+AURr}8vTm7Ra9)!>8pWlM*TpcQPoEE&#mcXzqET23VLV z;Gu@WA9){%Se={F7(sC)&7J9tbIi}z5^QWpi}YljmU2SWDSP(S`W$nJD9ccu4wt#3 zPLZWZe}NZYf!NlDdq_DxaW!KQ!+o7NVm?d56^!cw6#;C4)911{mR`>oeA!MqZmwmF zN?L9Y(V#xvD}q zrVv}om}2aX`ubq7g%`&CNO@7Rz%k4}QS-tzI#OO?A93?byTJTNd6k)VE!Dh`kqa*) zB?23{=9aT<=`N(i(nL(DT-aiC!ayO9@WPxHUMr5A7X?Vd3+)zOn7T*WE;J+Hg?mhR zVcH)luW))m<3o7imdS;e+}3);K8(0^`O9uAx_!YNg?AR*m4A0$%kl%#Yk1}q?ikV* zCbVN{+;7=9hF+J)s||sS%EQc4(7l0&{nGr!l(MNI$X_`zhakt}C>t;MbV#~_F!C|j ziZIp@RjL=2MTx*6XelzeC=kC#$Ja3i{wBudfe4oHn|1yN8H4^qh#Qgr?}+Kb`KOFA zd=%@Jo)?H#^Xmfug_-z1PHvN66#Sh6@`Q4Hwze5(k#2oy-nkB!5cr7;lT{8#2Q$g3M@pj~2 zkG&Q@u8j;FzlZU|T0BXZ;Reug&GEzMkYUf4&w%dZ$m9J>J`9Zi5kIpgG4JIGeZ&j_ zD|{Deo8Rjb3ZI4nze-Iw_C7 z)aP5ymglU`MDd8NM_vvHk?}CrMba?Ktx&8UL z%EODsrD-IlQjzL*;1e7_)qHUo1l}xxghxGi!YN-Y_;gmWx;YJ?z7q9D2VUsWmpa~W zxRgI=(G%u0=9Fcda`J;6%*)xdt}ae$%_L8GsxGZ<1;wk3gX%YCOqEQ35i)r;smZC4 z@tGmDU&mKM&xdzPte_Knhlmw)Vg;R8K_^zwnXZ<@-d&N5BMXeZL!@omV+9>ojlv#} zNCBYHKZzA|Vg(&ai9=T&X$2f-v5COP-XXF(Gd@1rUCx=Wo*eC;8Jd_Hi=J1;*@U5* z|4jLia(ZfDZl1FejQ5XE%;DB%JT)^tF>rkfTKF9iF2c2vjf0F*#)-;{6?9?+oj+~` zonQ~<`03~b{Ex4iPEf~OnmPf+EFL0~$-&W)J;|Yw(NuCUH9asjGC4Cb1^tL*k|t|Y zsh92>nMx&+UBPzIzVYkFCvF&5i$A6w&ijDq>D zl}gh4dcl5L%ko!34u5xH4R}zgq=7Lv4jB;3R&kjYYeFW;EnmtckEKkQqPSAIz16$x}yHlohV0)ti+bv}@l5{_hAoRtb=b#{u`(;@X!6HWYGsK@8 zv9JE=2!6gBhW`h;Z)G9=d=eKXYFnRsyX=b*SFVPP)QEpry}48yH68O98bN1pgiV@z z!{kS?0K)~I%#}EXtMJQ)Zajj{)I~lfyT+d#L~Ag%aK zNZaLK2RdFS_KWj}fphge_}O%S4!Q*LNGGCq#H8aMvn^)%JJ3a4k1vAG=2r|61+NGB znQKITPvU3y<4n+*u>dLzPa$RVI}3ECA7{_!Yp!@4RzVeS$-AN z6v|o3*z{cGEIr$MD=NCW+d4WsdXp{P-7Qxu$+BRvCl*nRBTM1ooxXg93*-KwRB{-G ztuS(}^3Lu&hSC!(I97P>Fyx(qDjZ@Ov{zYJN>5rHxHwQl(|MG3Tw~!mx2^@8zGF)i zw*SMBK#F&U2?->42bjQ_@D>9gCVZatFZaZv#F{mm&Tsq(v1F zu^70^%+t@RX;DR;uBaHB7~D6S(z!gKwW4BhVmuXGa%UDa`qLn^aj$?_PAtspH6M!F zM08>@`lt2|B=K)Q2u3GvNRFoVr$z(G9B&7eqUm+;6dk;Aynk$DK#(K-qa!ctpBb4L zSK_$cAJFxudxIcFw#1Bb_?V!FfMMpDk;2B1Kf=DZU;-S z9y+>nORBU}vFT)OWBta#RP9hhO+$TS|KOg+!T!2EgEfscsdyh+zU|CjS$t4qd{E<# zw(8hWG{fg?d{Cn?sBv8J#s@WG11&t1%o!SJ2gP2Bqc+uJFU77T%j^r|b;a3e4ad$R zh`kiYUW(@sm}^0(GmWBzqw^AkOIqlX#}W@jar6sV@E^uOjT1-rF~WNoQpnw+^02!% z^nt_!9QFPNtRd&8>Jf`TRayKv_eBE>K>NS!nF0gjJ8sOFzkr*yjxYxpsA=w+k2B7Q#Vs8?EvQfk@aDIkkyG}MNY39NWCsCo+`t&W8$kX;R&?cVE zUS^$`#$cmE<#7+9lv_xu6cx*U4>pBZH}^$Zm+XgYLV?J)VgY&YR&^Sd5&rY@kua5qvIvPqLM0lFpwSn)fM zHvF0WKF~EIX1!*bFn&LNcD+x}Qtu<6v-$lPbi5?wC-)3u@+)l_?;oAm+YxSE&Zi%~ zVdJI^q9~q)zt_+3&cMCfpc05GaUY`Tx$axi`Qj0)hx^->-Zmv$=LCCbc~oJQgMIEW zr=owg`R z-g45HsG}2pDZ4N4f=fx;KV(N;;2%<7NLFatgDqxjlUNh<^lt6gm4q|Mo|bKGJvOJF zw(gFW9d_%w+jg|I^t7eh5RfF>Gpcmk)U%_l4UQ(Qezja>UT4kF^>lUEl?Nl~vgx{V zr|wF;r7g!frAHB;6=w69ikkL$S0+ELzU1Uo_s;}cOKz??dCScm40N*GOtYuw=FZxL z>e0I31Kp*c9-DOb&_jP`h721)4goiY1}4VFxNKS7XSVi$l96w>Nk6uPMyCTs>dc%u zz7%8C>a;?rwWR5-@9OE)6wkQ91IPOA4L4-$0#Tpba}kCg#@sB-n!QuX+%ZR2y4p;C zGl{ZpwW*&R;)C}fqn&jRI9v;ke2mTNaa0_fh2`itMJz?>J1JJJ9&pda3h$}($i%)6 zQ`2S}JNA9(tl?2=)KPh{YIWwC>kMQzJJdNB2%o{u+pAekv#D~9_pz*s|M4BXr$={p z#vaYlYgNz6`q(H`&&r;<)UzUkt*0$rUCFj^3q;|>i+*Tjag&Ld9sT3j64{$lTh2cp zSrIN0=g_(i)Uo$L?Q3)bTPmsK^uEbSXmbTF>$1~rJ~3};-m?5t@=nb=EpJWUoc^w? zJvz~^wqcXz#-P9d&b?hf`1|jl2Ejr6Sk~<0av#>;fA2;G??S#G{QdV|fUcNM7ramb z*xtPS6)HI3(GaY~kL@shnZ_2aaR)=Z*~4x`+U7?(gR|+{H68br8Ey!+d;DP)a~m7i;r{lfX#Xcrw%gPw8{G4sXZH1V zQdzjaeZdj!Z@d0a_RsJ(8W|s&NM6%>MX(LKK|0Zv-UZ*!jmCh+rf8UgHg4Pg`RSk? znrhqFH8Q>vi8Q%Z=JmIUGxm)GWzDL+Qxp3pRn`B53l^<{EGoxyj*vq*&nRU>>x~qP z*!{&D^Il#DjDl8@4s+aj2*}(DL{PSHzC-cc;TFKJ!2QA7F%Pl;Y__X=0drat?m+zS z7JesS-UEjIGJt0QJ^?Z5FDG6H$|`mn0C53?me*S_mE*?&H-~vej^c9x&JepDxK;~q zFMkD4Nq#$Uy%zqxVVd=wE}oJoN((}f`h-a$E>NrFB)Gr&I3~&RkR}kQ)2XLbW+b6pfz+o!e-fZFj#Nl_ox({%>h5ri&zg~R|@OBG-$iY`j ze>uNQd%oh}iv@46wB_N+ZzfQ7#qmmq;G{PLQ);ouNe4bb z-Q~cGz4D9I8y$R^hc8q2IrwEBK6r-SuKSda`SxCmp4h+l;IDh|(;oaw3x>2+CCoDx zY4SVAgV%d-rw5OF@XI~;b`O4=2R{IqW>7TSqFbiF0el$!rTCff*8%?(;BE~+1GokB zkU|QcW@c9-O;IxGI{+^M{fveO0dx48HT;)=Tae~3kpA<4w@5mGzXkZ!C}8kE0n9ZD zkDlFuO^^e4Sbf4wq>76oD7dFG~$x4Q3al(gD@Q z$y)sC@T-CQ43+wfc=(Ed)ZE#N^tmk=slqvU*k55pxIWb;QG1EUX%7?6JhTHuH z(>xw*XjRc*npfv`zri$*Cm!1LXp)g;&++iLspfq0TSpPj_9Epx_R%X-eei}9aZn-7 zDD+>OjcmwcGnIMiEe z@v`S;Z4I*U=2%+;YnlTG`uB|NudUsP^l1O|baLj#$rKtkG|`5FgQHz6KYqh?YG7h2 zmE=xv66UWET=$PAr*ZBbu5uE`Bf`RKE&^Kl?42B$kRIb-0B{Tg`yN!BnwkLujG%6! z#!_R`DHsN6Era0oHt2fLAAWl3T<1#oMfCfw%g7zAG%Ji2UwJ$G$5K7D$?X5UO2MYf z@bOV~$EJq5S!>u@qpx_nTl$LI-vL|eGN=ajk7VSH9B3Os4)opjj?58@8#WX$yTf%kuo=1 zyt5)Qh3Lb>Y7T2=MFwqn8hB^@{Q40N!>ILpUV^Z;@Jq{TViZTefCU>>@SHi==6^Z2 zSRZA1q~+W}J{KkxlT#3i4vg*_Ol@wvKy(wrV;QUV>>C*!+zlUYQ~gsTsp$}b57nUe zyJ^9Qtx|lJaN{I7Ffl$fvbSm&doO<8FdrrBpIhJhqovCPHaD^{mk~l=eCOl>nU$le+G-Yvp?0>-gjr8`tYf5&FepB)oJ%G zIJoQCypq%JEjoC{y~PJt-CJ^S^}P!Zo_TNS!Nk3b4wm10!ofB7o_O%Adlw(9xOd4x zmFOG%#`Egnsn6vtS^W433AQKsj4CaC{Dd{CoKQ!5m$WPIsa?+vx=>&94-T&vUGh5 zPk8*F!PV4xS^M^MoeNRl!JtG?YmwBtAGNMuRaW&))XF+1Ier+Wvsaa^tsE|Sh;3iL zYX9ozpD-;*v`-$Qd?sieds9CAk)IWoyoUc5-nEUb+dMq>kgn^AO=~*Zo24D^A6CN; zHa9<0TFP3>s($>P^5HKHC))4Y)+KfGw9>-%yV}c#Uo(8ywzaFu&e<@$Sz6H2UMU>d zn#NVHTK%&p5}^9hFk0MFvTfJ1hikXj0QXq%|AnWU9zL;s>H5ODX?(At zh-${KW%*6F$+?V^*Dk-Q1{wLVyKP`>I*nMyu~VC|L!pB*R@$(ObGu#IoE-`savfk^ zjXya^m2zYS#SUmUNp0|YD7Nk=F^1q)%-TUDrp(}rL#3439GIL_7<)G1t@@-!u6r zC)XaC9K(EE+gx~2W^DrR4?U^cm#fcyP53U>d@(U{;fqTV28h?e_Z7Dl-d=DACakb6 z(`@0zAQ!f4L#BaxKO~GryzIFL<{^k0tQuIg$1rs%wT4XZo zns@;tYLQN?(CjgV=^{L}xHgtz0skUn zto7eujD`B&7;nWhCJ)ac&{2Hdk13DzmfUPO5M*GYdv-9 z^0Bag9Px$%r9Q#9P^oVdk4CP*c$c<9SCKK+^aNw9@fRXqjkUa$G1hMCx(#8i?nS%- z*ZV5Q3vlEwV)D68=Z`Zk#+tA5(K@N0Q!oE=LWsc!Yh4<~GseJZn&g)-#`sA&45Hw- z2hZMod5{5raiFi1&%w>h*P$?oaq6&k@B&uoxIEU$osV-gT%O$M2-TH>CqGs!*2*U= zUK-@d%A17#UGV^sCnZ}$PcmR3Pd+>d8piSV12&l5~L!9G9By#K4E)A^VNos2uucZ06dYKUAPp=G^CcLl^L^j=zK!?R5Bb)>xxo0(|u0pREfaRV; z%>L71y-n8&x(AWR;gow+)A{xO?Cj`sc>Q{-)~4&l>xBf?>+`z^blWxFj(mQ1Sp2XI zNr>Y2X3%Z38R@jo@4FU1-rEdO{Qd)U=DG${!GE9M7OZu$G6TIz6Grjt0iAqp*vydj z`Mt~HhowP66u-X)9Ue*j^g(M=-M;5Wwvi?WxBtZiV~vu^@1*&{=VDd zhbcBIzmI~hSL5x-?{D$B>Gq*Z5~A97GU&1yzaEPplC$y~$dcbXEq>?E!S5qk^82yH zZ~Ywneg(QVjkhCz{F={8k6*RL??qT63M|KAU7+i<8R_(;-um(m(4C^!mm-Vb+{?xYY(C;r>3w*hqb1I=}pZ_W(lCwpkS_RW~18;pI}CLD_$bv}0OMi_`C z80NPR`zT*3EdOVnYgB-(HTG<;J~{S395Gqj*X+W9TY zLej>GeKV8$W}s!71>X%L<5|--xGKOQ_upS@wQ$UEz2-DR3klQLEIaz}x@AXhUAycG zq_1Cg^!_zusbghFS0y)@`4{-;>%!7`2C`@ew;k~);2j!f{BaB41(>!l361Ad?-zhi z(C}4=O`siJ(g28Q7dLLf{M33W;N~!|DA;4vZ~=B~UxRe3g@0q1CciV(1Ax;{-Xiru z2ftc93OL=SBIlT+0`%eu;B7m)Z#(7Js2>5AZ+OWsQa^L>6)F#llx;^>3fP1KIM+NC zux&TD#)HoWY}?6IIpr&5ylnht;0w7dODIxT0WPxOey99-Y7#K_0u23)4t|}w3-GNL z{tXVkO7dzF_~#sa zqdcPWG5<{e7KXH(A59cxs8S1G?%*#_HGnU)@S7a`g<>Okk%hm^!CypKi`s7CM;v^! z;`QeJW!iVZ!50hOV7brnfP*jb@FnVN4t}ABU#M)mI@%Gk{&Xl+bV+MM0rpK?{33Ow zgFnH;pP*jn;7|1MC#ttQ_{Hi$2VSDS=)g<8@=Mi|4t}|ZU#|Yu!LRi2vTvhoJ4N>O zFZGzwZjqrt^C0{KiywD`e(k|4%qKQ*#Gm8A7g+F8;QK6?^m{#c%!BXt;17H7-+1t6 zJ@{)L{5=nT2Jpq`Q>nDSNEIwl>TfU}e5<3~;aPx-0e5ToLcp&E%(qVBuK-ND$7?h^ z3HWN@@!~A_*8%PTe~v8a-%C8wk7)Q=z_uOaVi0mlHf#J8|1rIn)TXtGg%8eL95>SuwKvJF|2nJUFQZoeM82Y`E4S78%NVT-^S52 zug*2`Y%tBM1A*1-2GhJcxBDB+uy8yr`VC>dZud8Y^}5~P5Z3G3bZ#*9*1I;Hji%mu z*QT@4)LV~))t*MwYm6%A{-l}9tTW^N7_AGr`Zk~;v3@zW%sOZP01DrXX~H`{Yx7fP-M3=i5T*ugXUcQdw(jU?O?I_)_ipcQYuO4bQa?+qE^9Fjv`r}nOsCMpAcaZj znu-3N+nElIOdXBEX?iADX0=@P(g^pP(-@eh@t);rh%gf%vXv@#FAXwFAX~l}O(r=veaABWi;46LJUcDlayVjlHA?+wIYw9*psrwinZ8wSO?? zv6LztCkt7!K8{ARWIwB&ERnxWFX^$V?C+DQ?DM+{+g}Tl)l5U#w?A~rFN>a4&*m*M z2D9~{!R+5bZ{X&Zk>O8n`Q(z4zQAbq`!LiEOkaPot7O};H^O}$2Eb>p3QTaz)>aQ+ zEC#p>%9}z1T$%&_?1>kij;1WgpbXpFEbToa6JMHj2gcncfk|_FLSmRoA4(hh9&pTh zjj`{IPA-joUwGO#8UCF%|20dEO8yp1fFVJaU^FrqQ*A0L94!sYQysx5tIk#jmFg+_ zW?&gAPKuP1N zC_<~{KE}xJXI!q-9>zm3@MjFo6AX<~FUHEk7&b+djL%Y{Jg5e>DHG^k&V10_#29q1 zVvIq#nKAg?$r$imj8X1S8DlmaWQ#;AWAx(#jH{vU%@}kaW{iG+gfa3TWDNR`F-HEwjBzojEJG{ozh#VZ_&dh+aH`Ju zrAmF0G5CLq@dgzrF=DVjPq;^^FEGYM{37GMN_~Yfv?9^9tS7p?66K>@4SxB^W8F>!NgCDlGnC_y4{c_NL(Kbg#U7UaTlrD2Dd zii@tzJaU979wfOija=}-NOBLKp*1JFTmy6F96;V#V^1xiP>K=|r}oJWy`t`|c9LSeMy(-cw5%W5HX-7^{>lW>{NR5XN$_k}+=OlNfK1 zS9y6)JcTd@T%Ka+;c0|%(eR9wg%!`-$WKS!f>8l;lI+4jx;i^UV-_LCJPN}QX!(2=DHhTrRuVfW)(v(P=_(fwu?y6<^(<#^sk)l0>EyWX~0=vq9w z5zv{ovo9unnWi(>cnoxQFm>(8lI{TLWR7bl>QV5|`mSof<8KV9*Spp!Xn(J<-r zdjsf7kk4Y%BtVGb_f}08P^A0o^LxPJ$2Ef?ir)u7C--PT5{}=Ux*s}Q9Rl4~4PeD@ z@#tQQSI`a%Z<6l;-9iH({wL7M!ih9q-X*aA4|{aq1KmLk3dcp(4#cGM>z&4$b0PBm z;Me;R(3yH=twDh(evg4}yUz@;&#xG7W`>`+@1ppf47zPu@Oz2HZ?&e6;x`UDJexCu z-@eaU{1Tcvir?2kw=08NW`EDZnr`~LW)6P!pv&fZOj!IX=HT}#(D8-H4}O0?XYpIB ziKF`a&!EG*Pe$9?<7Qd!B_$|S^Rh!L7r+t3C zpflI^f;spNf-al;_kN3?p^qBB2eah&6N}$PbF}Z*S@LVbMK%3xw)lMs&l$YeP3kPQ z9dw-ruwohk+s~~xgYF>mcz@s zQFI@+_$>!51L>B6ABHdtp8(ye5K1S`^y>W%=)MUw>)oNr$dBhoi>SXk5rldDgETZY zGzsba{z01X@IVO9k8WnukAr`Z#-I~(c?Z!XX+IOj5-r0tPE&>+CJf>4uRD(P@XYDV zB4dcMp$>=XSbDrL4``V^I7zw{iH~FE^2L!JFZhDP-40GAg zqevBpY4Sfye1_Q`FU|zshSvbLJzAXals{X>%f?>-yzTLVzL{)~7cX(jpQFYAUxn)# z1f0z6;LjEB057rdcRTp=)!PA&TKM-m`1SI!G-KiEvD1VCNcp}B_`MeX8xFo!eIM}q zE&NX%e7*V&;J>!;>ArG&Hzn` zk`CZ+0=7La_$Nrg=KepA6ZS}WqZM&jl zOIxxFhga{qymxbL;JqL|$~r#Ey4pQ$wtprtgL88ShW3j6o0~g07Lf^4U*?Uvtsi_gSmRZh^m9pAyzdE+nkFqPx zw83`F9!V_SVW;&c896L|=#x%I=fz}%>jb8b!+X7xBK4%PO;a&(;RrlstB+Hxl$loTx)q}+C)ABqHXSvw47V}@9k06+>bsk zmilCT-0bwpd=@KxqGB8U_&DqAjHh)S^xr}A@@{Qj-W5n*L-X<;ZC-v^ zprJw=68wqE2&LC_p1*=I^rFQ)WQkVsh8l~gW`jt~K)@FkD005_8phkj@Eysr4sFH*LWm_9xMde z$rzcU`isV*siH@CC1a@Xi1rH_PpLT1?e1fY{C>ve+PoY@Lxj)L=VYVs^@Kq$8arp} zbFxAAQs$%5DaOd3W(@ip7$g4x<8$;m+1DubO2Vk`CdTJ#GjufO)r7(SHpb^Gbvt9I z9leGzI{#Y6>y>&PV|4CM8ACMB@y^zsky=S6K!zgFqLY-g27~?DDdNqDW@RE}+ZwSESA_)C%5JwpD9>255@fLC->f~Do z7lRBVUfg1M;gYumxyv!NWdT{Q-_i>7TN+w_66r9&Co{%?pTZae>j&PtQ33M+`k3iJ zy0l(xI)4$8xHe&E0`L^-Wm#M=3A_kwr_JvaT#36u=Lg?N_q`a9!_sM&vH~F6Xu@A$ z?BvbLWazjSG3hV_5>_RY8nzn33(c?*KjEi4bNgA*M!J}DPQ4F+j%_i)@VgTkcKbdz z3*Cbr9nZuzJjm0eKdI@=SpNs;>|pA8B1^ibL1zyu`N>UzeD;xnb^jDU^3K;4|3A>l zTtXg$X`jz;X+`iU#$x*ZjO2H!rW0m!@GH0Y@xEkW-G2Md1s&&`38Z28zxbIkBD@K7 z2bu6f5r}NMFM$s0Wky&IqJ>uOva|JKg1i+vpNma}N4Exa&m)iHVjlja^XonBoM_`N zzuqfA$NrL^-0O&=_zi(>J8*vR`F+^pcd90i;`a&AZS$D{_W3QSOt+8sHbWG@m7wFp z&JRAn>n(n(G;tKamxE5P=MGDs-#=LV$mQT)CQx(gjn0pRmH>D+XG%QbxzzqO#l zb0#DB{6;N)=9Z7*_X^ON`_^Xa^ZS;?4^vS>6u%#VE}QXdIxpQ{Oo>_fZ3o>JjkhDe zeXq0lp$QVA+V|&K^7}W7A0C&p^7|?1S~cE|{Pxv=iMikK*p(2~zGl$1*^G4B=Xbls zuUgYY@%uB-Wi$Vtu=w%W#}LKue`m>W)w*jQR?{MLgmoA!-Z{5Dwp_@Y{18GGIc zI=s(igzesX`UTLjEZ0BtjAwuOqPx&4eHa(ZT(@GKPr6rlbW5tzbi^|-_RnNL)1ou= zknUeRe$}9>L_XWM7(a$6x+^VyY$pThXtavIFzf}LS(n31BzV%TX$SLf2HnRIvtHRT zLri{KS~|^f>|#k7+FaH~pUJ+Vu@M-C`E4#!!GkZfxm?7S=WKInboFyIdPK1*kzMbb z?%$hIRW02+tDsLeHL{1g1n9XJ>_IJrp`Tf70(`G@ByX7NpG*#p^zWq>z{mj3Hb^DbuV+Sb zdf(*aRBC#9b60=OhMINw-_*eWo9ZQ9msr1R7_$l|ZV`sb_I;zHRl{poJ^Cs=nTqwUW4-HG@A^PL4+7i0 zv*oHQdpg@Xuh@-yY&VRy#wK^iXQahvq-kYGNBbt$yN>m)Q~fjh@UXA8wa6p2xr|b< zF+0f6p3Q|r^;rLb8>Rybf+J@%hx%gHjS(Kz#_ZxK+d{?7(S3t>lbUa0%{j!e-gSIN zT5wld8s~ECT6{*Ds6XR2tLCjb@0n~yqdNMA)GX54)Un<*z7YdkGqVy>``H;iqYfRJ zS*>+`w`haMtcXk@enndArm4uF4Nn8_tanv{ox*y3jmitl_a7K>`x?0@ds@u%atzs< zqsGz5bgx2qSE4>C+029TZRL9PR%aGX#@YPV zqk>l=&kw$Unj6DEwVxFVDZT+|-!u&hkw`XMaC;ma!9W zh35`$wIJ>+LmkBmMS()9&f(7TbrzN`x#rzj4zEPKy&P{Z_jL3m;di1Zxn(E(PH0yY zJ9b^!wd=~Z?%s}_ZQbIKLL<6+w+Pr9zFxp4AvFNE1Y6VZEMoZ;II-Ai*aO_z+O{>> zdU?l=tx59j>22BBwb`r!jrCO<@GfV#?C7|(Eot7~tbCINN{A(rJ6n3Uqv0gb4Q%Ob z*|BSzaigKzbomt>J-fP-mv{DD-bF7PZCg>m`rHq?)Y84Jtv9(dc*Qdf5#H(E%FC3g ztE02Gt-Jg3uHKGLdyG2jf-#ESdc@ny@&;|T!P0wAPEK{~)oGnubK|_DBn~^W zqpF^3iA!IY>c9uc9E`Kt?j0H9Mg??V>^-vZI-Bj@d3Sl^?PYuXhWkgI@dR8Ql{bwI zBwZYV6 zYJ3p-Wg}2S^A+~0_Us!O9o!AoHSCdsV7Gp&kJP8}w`IdUm}9@k9I`$>8_gm6DCZs_ z^0(>UgZp8Bs9VmrTAO_)>2EoI1pB+$99;NFmRrtMS#CMkWx3@%8=b%9?9-Y4`diMV zi`sIg_GoMWbSh)Vxh`6lxwZ~kt6AzYe|D|3CfspuJR)7@J=4>HlXO+JcWPqaMuRZuMV46k*p;(n5eW3*}4b$XTDdS_~6TmlzG{x%NFiraNEZ&3{s*4@` zI&ZueO8c5kb3ote(3c86MB{*q0}g(XhhL;#>)=n2qgYJ&0vOWroJtc4a2hVhCmoik z#~l1p55H9L{4o;>ARlzgFIWHM;8%M1mFl|={$vk-vU=LW)0~$_xtKuMKB|RqWqPuT z>1L+|6Mwk}^KfSqh`-T;Z?|9yFz>Zs((^nr6A1H|4mOcX@iJUL9{${d3`!`MVgCIG z;QvCpS;IVkjDh&2kaO{nXQt24a1-FSApH{jSpEvYn=O7*fGH%V`3muG0nGYQjlh2o z7=K6y@RI;2OKa8e4*{=4+R(p1VgyLg(4LiQIU9q(dweNss?;#0!Ao(yH#_(xYOjVX z1dkE(Ul{#&K(n0BW#)k=L}T!X!1)u_qFlE@RbZ`^12Af9TojI<2=Z~_g;k^;WI=wN zn-4I^$4MAAeS^tI!p_$XO4hmuY1D`HiZzPniDn1P-P1uD!p3-~gXqS1xoAOlj}(rD zq0}d8P(fkqj*ix37X(_{yW3i}*4AZYiDgVJ1|WDsvTHhp4(Jrx6r}1fusT&Q$4&5) zbi+<;MI305Gb^t1a@{j1($qMDVn0ZGujs6;NhSvl9Ds_%{@U7&NRReUPbX(?oJ^r* zLlZnvVQ{o-fAsMg6Vp<6cWN|+*Bzz7EBi-g)bz;s-qF;|#CURy%}b69Dtu~>rp6hK z4~$K+rL}cEhOBF5s-v?Z-NLrE$r)*5;3q45cGuSKP0e)m&kXmXiBSagz_+Cjkq8TJ zNb<6zs*xwO>^!UIH?|_c1<=EK? z&`FgO%h>QMHvFP=-Fb{hN#UdNV#)jz_7$c>%dFV&%NdFgFcxcrsr@4ZsXqk6uW(oP z*h}U^*2hOOAF_{<%!kO|reywwr+Gxe;s1W&aH9Rt56ha7dhCU#Cz-eXaA%_L#CDbF z>svGZ7kxFWNVV(P!?lc8JybK?*VoXO_Z0B~F5ohGs3|DDGtpP+l(~QSs)s6v?{6)5 zqHnmeZ^2U~?JdI(wEpUe{^1r)8E~jOwEjoWwx9)_ceT5s=4i_Po!JZgg!lcOBz-Q!qU5)ZriGcRU+@H{lm>?v_Euz>o1=O zuxw9F`{bcCq!N>dD2`ybd3bW0dimrwia6-WYaM>7*0HzSar%{ z(!0LOVTp&!SKZZG`1sXp3Ofq72RU_z)MH@b1WGW-pTUSy0w{oKikF<6nM!QloT%(g zoOkZpq{x#=OA%33sK{+Jx2o-(Wpq2>1H}V5p&pSF$cG{s(`UjI@nmeIA`b^OKy*`( zmtO(_4if=bP?oQPzk)nFz2KC5W&gR@Je5ZV_*WQ~N1_t-9F?#91==yR77bCp#XeC6 z1r+3C+AAF_4aL}Si#~5*tM&$0uOOI2zy+t+i7o>vj^eop94DUBAR=b)k@FTVP)fXB z!c|~`cx?HWGlrMkHH=YC6c<1z4$VNvc|T6!AdEuJn!i)3V z1dc7es2AQ|a7X^#dD6raG+SKqT-eGq(R?xMJm>6-HB-!wT$tiAg@NMP*5xm|t?2dz zcNE@PaF=OsnP!bCl?!Wo7@EP_9|l}Lxl)*Mxv<6Pg#kBV;IUBs)+E6dd&%uhCe%R>}vlNR0E|yx2#byQKA;9R3 zT7*@aviL=4BWo32(pV9F1h{@;II=?V4;By*d)W4cB%2jH3orb9w zlaEe_YtYR>|4T8#>~AR+oeIVqWSvo^=yWsS{EfllmVZgm|NIVQG9P?SVB8+)FEB14 zjB%8FEb0vTSWycZb7eGs;|mM(1J~KW6p#ul5Q(_r%M${(J1-JfaG>OIK<0ehf<)}n zOBrJjKq@OND~)mj%8M5jFcv}G8cDh&Grd6m`BvVWK=Yt(H?Ez8GW^FpaQJOO2kwzh z1vKVAR}s6Ke?dpG(OdjCT%`ksi526z$-v7vB7FrOg$WC9n!r1W^~$&+Cf!!6A%^Zk z;4sW#c-!i<4|L2e38W4A>A`s~=yqs4Bg2pLK&sJnKLZ^noC${RdSqD5QH#$^^B}FE zd%31F*JK&!>|l7jK1({kzvL$q8Rhj{m%86&`00vI1KkR%V$(jKUzNoV_mBkA`urL} zSE2EYX5)7a=;Q_i4emh+QT&EL$9ZYOZ2b0H?ZZ7RA&TEknr=RRcUb&*&oe~vyBl;- zmWq>pI`4YpfmNF`5(pam!RVu@`KN>aZQ>ZZYc>-{Mtdc&1VMK z=l3TTzl5fb;`esY;e|XS`27Bl#ScjdQT%=esoVEGt-1L!(6 z-j03^z`j5J7y0S?qgWI2`ucSLd3Nv>#paswq~qBR24?Yda1l&@@ko?Fx;l?;Bj|WP zk{_SB3{iBuEPi-RkU+YNzz=_6NP-Tp85v=RSMMn3t^yV7HSZMU$1SEEBiCo@+t<&k zZ@(#U9zMVC@bgh8La1+l0b8E4?{I1&X0K|`zF4aE`v>|*N2!cwRM%>2*yHW})=mNyB)a3qd!4i@8D0A@iFyr zjrubOzu3bsR-be5OFaA%IfcRSE5KU&j6=T^?#2w3Kj6V%wqTZj(u2Pbm_yQq-!eQ? z^6*$BOtNLT-m4t=1oa}oc(`di4nNTNLZL5G*8}F0@iYzJ0+??m0ly+q-7g1h=>H0M zh6H|8#s9R1`Ibyo{D09f?*Xdf{{-*?qz%7fFlw{ltW@#k(KUxlEIvG-`fh2$+e-MZ zdV8JGg?IJX(<=C`%6@&Qg72y9hbs7<%6_PVU(bUdw1&N>rf-_ysp+RR@7>Nc=r*_= zY0xe3Yz!K71E5K74@d(Fhfj?ex)%(dmr!s|t3t~YhN|`db3N*m>y!o%*np=&Vb=sL^NU zXKK!qI#Y9Aa@~Ood1q+OlQ=_jKFk~*Z%A6#O*q$xeL!y%ibfc*W_+v}A8W?Pn(^_G zD1pA1DXtT zsN{#rfzwk1j&^#6-@RE0#`}2)B^I6N^6)c1Juz^73XZ9x9!^@j-9bia!AIrAn(?t_ zJhqDHtvD-Zdw*D(@!U%}4(FnTqQm2-880oLO*3AQzfH~fvWH)ITAfMl_=IS&Cp;~A z;)zvj0{r3a>ba7<^1cge`uY;>WrwiYt)j}89pb({rL&ZDL)}wRAH96I!+k*D9hF3n9w`9Q+Z@n(je%Cf=lh;fhI(;Nx<4IeD+Rtq#b@}jXgo@hg zS{)IC zEaQysh-$*cTI~>{!plx=aH=j)dt9mkvy%un1%tvuqC(W7Ro_qu+IMj5q!raML)Q>S zeQO!lLmh%K^4UewaUwH+J!43(IPoa`M3qW43remO`#~60OXW~2MPG%55H}MB5wZl| z%D7nzQo&3Fa=>50eCS7s(D?$bxPFGGxPGQqT)!|k^%OcGZmo*obk=@3PD$N5j7haeFVPLnH-*lT% zLB|pz9QEYM_Wp=$9Y#TTp}JgJ7s(5Egz&<0k_#`pr%YQt#kCiXSa@>b7)YXn;p;-= zE8Al{g)L@(E^H$^joVy!;m$c~UJ1<$cipkoi|0K!gqx7dBG)qZg!GNSUgY9)?ly{3SE2kF4Cn=$w?kdF1_Z_w&ot-%Q8 zL$6py3@}JkK4OM^tU;(k=nEMmzl1RsIN^g>@Q7FFe69_|WAG(TFb1Cr#?87u^q2j} zf015?u$G~#iu{pO`B-B?s`BMghInHzPWfBX?U8!WZlm8$?e=_t(4ydx1>&uB;DUK(+gO`l(bRj{}eQn zXe7((OC;mTb5ML@BVVok7IYvRwf4JkaSphw1j4kDXRwSDb8shJBbeZy zX#y^XylffNHK3DufDBw}38W4A=}ungG46n z^ZTO3kMoNmir?2~;fGg*;N3)5@D0%Q3YXxY8J8iC?mXxSS47a=W9T%l6Lf|LvrPIu zn$GmA8+3LsQ|#d^>HKjaKQqo-HDlKOWy4Qb{1VU^JjqDI;PZPI=wy8Wu2m=kTA$ws zL6^{YMzitz2aDepO&`_1CqcI&g5N(O&x{e#KLDLQpG}ePd34QK?M;1#hVirb$y%W^ zUky4l?@!fv>_6-~9lAGxPV9ex zB`tm!A_-CaCP0_Xxcs%nFEIzdPlL|fkD5#(zkM%Q{MO9DZ!wT&-p$3Y3v}kXRm{P! z4|LhI?>>v)+Bx`rC`*1nwD?ud!S8v{wb~ukX@C4KI4j-X^P>3W2bq_Ej>>X=@cF&L z;>YJWgEL<=zXw2<&G>!S;wRr&v+(m!}n3?SW$J-TzwPPY%QAreUUCm!8K(D6A?CVyjo;z&ri-02Y?AA-uMe**q$a~HOit4Jr4M`Ft12V z!wgt}r{>cD-eEFO{y)Ps`Jbju0lyS!L%#?YqXlrG##aI^K>8vL zHv>iyxd&N3E5%~DH*-=fuB}ab_ja9fQxBGk$Vpe(7n-j@w(F9+*60Acs=jr``L^d% z+-M=YD!_H7N>`V;4m{mEdLwm_eP7#6898!WZ*mnysaiX)OX{}&0W0{rk!h}!vr{yXK~&Mk)Pa%dndwMWz%&ZgM0Qc0so9z+En3MBv}j{>)L0!g zR!5E1QDb$~SREA#EJpWsmUBxTJ(gG^hI_-TQUSx9sZfZM!PD)4)6HowpO7ELA-6WvJXJ*Ce7`4e<3tkqHBthjktJvzDV=7*V^ zS9!`~Dv^JPT;Y!Sp&&00u9=~_nkYMD(>AZZx#g2f3~i0jp7JOtAA*9bp?)YY0e8p< zX)Vb>W0LBSf%0VLf0b8>5=W&5hK=C{?*DRAm;o{OgH^fKXGv&T6t;#%p9L`WOQ=66 zG9GL^iwp{~=cUYtZV30W>G)RkB(afwGGP#NPn#RpB7p$_^#;+85m_+)ts#v3vly3Y zodyuIkIX-pF_?>N5ruQ=1^2#f6;bp{h5%j6g{3Xx;`VwCe)*8+2`>ywF1%#u zP@aKX_gk0Wq`l-~u!SMUH5Z0v`Ue~(ZvarQPIp<1HdM#?knHli}=Hl{%?-L|g@ zE=A!)H$}wb*Mn8gm$Wm8)65*QjB(=jt}Vg^*T06WJj+;28K>x|DpnKWpif} zPr4s7;RW8(kOYO{OcYFLQ4yyP11^P#hi!fr1Gw5QD3o&d2g`_t?_H3c%Gf)xR&dn( zP>T%q1-Gb#lhLU6>NF$M1gZ*=&V)mtHkJ-iXXM1_A7&yQ0!_TIB5$GO79_g@RNFbeG?~g&Z zMdR(rueS>KrK#6eA@KQK1iEbc@iL1a`7%Vc@3o+73DC}ezkOe}_{n2u7JlCWT{it) zjmMVh?+RUWRQswxmreU7EPnDhoTYuQ0$n!k`?ST+OxdXRJqfyOuE*jt(*4B{NgzMY zA>7)NK@QwbgRav6R{Tk%?fEwfx*Fth{+WA~{Qdzyb59|u?gO2fpM*{LCK5Kk_kyk& zdE~bmKL+xvuGI=3f!ar+wqavqZOz8oO|xi-)Nb0aG0+v6Uqj@iO;Sy$A@T~gJZBA& zy;BqWCIcCETCBW3!i7|ALt2PSt1a6>V-$HkMax@9rUEyOHg$&ADVMZqV02;FQQ^D&$hoo(?&cv!+B&<*aFuOF4IHuw-z&xlFFKI@A#;NV#uX&mF!* z7K`9t0X~r~bKnbAp9S+1YQTaEu-0AYz!!V;3)PJdev!Jxfm=NKMe3k~KT+N5z*{`} z6V>}1{1WvM2X6D|m#9wwZ=Q^_Y5bH!zf^t6fwy_(mwF0U%hgj3eTPTC+*80>ss7uc zztp2&DZYmdNdZ1R7h8{=0=3hlKUu8;-aJY9sY(TE6X=Px*@1U?pQ?5_^rx#U z9r!Y@{OM}Q!LL%|4&39>uTrmc@T=AB4t%*szgpb`ym{;8GxY5a{gvuNfX$l;@ee!r ztJP-#n>PdEzv|#$to{`+9@09jR^NB<*Q#FtUT4rK{~HIN6wjmSH|5o8B_H)V6sUex z0l3Lzp!|9VKcFrIJZj-NKW(@T`0zCb zEe?K-hhL+<;NZ{l@MozP9DId`uTTvI>Dmh5qm=zkhqKjn4t}kNU#sqS@aK5=bJRB- ze5Hr4RL?m0bJcGg_&l{TJ=yRExy~!UPMzuCt2}&_I@iJ1c=#Gs@8Ih^e4X0t;2S)A zgWBfc8$EoZy3D~hdH5#vVh4YLhrd8Bg=}mgm5=$xP%ZxhIAxXR7t1R>_^lrN2@n3d z2S4M%`S{W{f&5o`aHR!vM`yDK4|wqFEtve?HGJK2A0Okh+-wT%EdcOrQKEC9Oh43Q| z{c82kfH@=_OX7b9c)dlx1Oveh(}4eKwT=UW!0}p&Z>wz%T&D&!%xEcEaifMgK1*RH zcaH-%sRuR8XZTW_^zwNPuM@aR{cjCd2#nme3wG08>Ta#FBLJkPy9cL6_NS(%ce`IN zRr9C?y9&CEHKAIttBczRC1Gj>LvPr2$J+>PV99oMh#SFGvR!52#!aCw;aa!ejbJMU z+*&v4TI<|eH|kpJ+*&to#5V;MhWp3ICuaI*MkdB9DrWjeM)~p`@P|KTyZIYY9jmQ# zThpXlQ|Gp(NwO$N3dJvMe9vfY0l1kDR{U%*&((COeU2U??b%ngi z)awnyCQ~ofs%`#ZyykFPhXHh*yG3&a*kD_|pJ@q^tvpdCsZfpYr|JNMysY!J86*GXmRT-RZAIv;xOfrsgImUjKzn}rwb+KupYJ=#A#ot(LG zGKJwBn$TXKYisBM`#}Gmk^QxGNKena*3bF`S^YQiKzKHVS*U%1jThBle7*jg8~1+bi$5?DqFy zHjK%3RM({g>1pWGG)|?)CibV=K$NcE+s*^cc>kEt^wcG1CEGYLnHuN**Ic|pBJ1LL z)p=$Zev1Qd@3XeT9W9UboWrG^%bR<^8)@4~yx$}nw`ps7Uo&}4Z;$rl?#@3cU{GEg zZJftUd+d*DnL%YRi>+2-tCiSlCAM0LtyW^ImDp+}((|lsUxMRtaxgBLp4c}v5X>vS zWjdPJHrIeI2gXrawV{r;%{j{5siTXVbtz-ebabVwhX+QEo z8$vS})xx8CU}*2LXiN3Tcx<&2Tdl-aEB;!^#dBtKx;nO6iLF-VFhgYo}(O@|Vhoh?^g+0)t9dByIImhRn_K^5HK5+c!)um5-JWFBHe>w2A2-?l_~rPb_8H53ebFu0%0yC2tzXv~)XWZ8ZV|D0>-2W5l{)sn|avFjH%Pq8Jc+>D612I?tQVXlL@76~*Vg&%n?aITkWgL+I$ za7B^UXp^uHCXJ*7<}vs<&Kg7O;|#rt4IN<Pl;7BbX(h<)|2Kt_{hUR~L~-RRTjt8oD12cEar~?VvnWqx3F$#_l!CQXyrQU3AOY zK5fndxBF>hGdklhELlJ&{lOnlfrtL!KTs?d;nqLMi#`CrKM_Em86c)@JP810E79a5 zF=?a5hUlI{b%H~fZ#0t-b12l!+N2GHq@^mQ=%8cWN6UkYEee`Ra(;#Yoxe4 zyh*Iylp50-aaj4dT&R~Tm0%1tx^l(`0-Gf@q}2I@_i9^^eOeO;s}b9&UZ&Ir#!xTg zC8nz9ix?-g?*1$E;*FKHmHGR%+ij?fayjN|ww>_}N-U4m^}%vT`#90nzddlvP4yC4 zy6#ZwO45&L_p~pC%SggdPuk7+E~WYy*DC1UA>0-$H9VRCT@k-?qOCftSe2YhFv=Ko zlZ=rMmeQ#y#&=4S#eXlFDEu*0Qa`#T`LARQx?32dUAP3IPV;KU_y?4z^SzcanEnal z8Kv%Ke34Rr${0-E#2DA*&5Y5AN<>FBhl=$a!bCYzUWI6b%*RsA3-jzqd7&8ruM;&d z%+XwUVXB6KnnAXy9p<{+E|})Iuv{84431#|OKq~aLNi3AxiGZb$oX!!5s!LlBW|%= zSjugy+ZlBG6}J`KZcbBxN|`Xl{g?~W)2)tED~)Fi2-8b(FvaJ-CYKzq3&I+=b}p>h zMiTsxHcw(gSc5GR&p$x?h%Z0ANy)+=dcDUl^* zCD~4(A%r9(5Fp%d4T-=$e{II@V z%Q1T>gS_-wy*G3z9>MH1eZ4xo98XVnf~9!+u_S%?mB1lHL7#wE-mm#)VT!Sy;m~s! zU_2B^m1p$qV%8RIV7Gis&j!i|^?v%;-TEmX&3(t79_309C}|ocaqgJ_8;87-M-#9V8LU9!jEk-ZqySSZeCO=W`PGPe{{GY9Lsu6U zmB0Af{K`8MI9q?X1t#S?3pm~{*4e!J^|t{yxsL(FttT!je_Mc?YxMLcEALK+54W(m zD88$K+h+9iCgXdj!-pY2Tom6&fOE?`8Q+&3J`5$3@_h$58P^SFGQNLz_%KvW%6BSH zzOymb*!IPcHYwjKgENpx>#xq?Gee{FTmOFB0$iCTgKx_l;Eb*fI6SffH(9@W&`B3V zw795t`!a9|qo-&2_^g!i#bo43;FuTdEDn#y5N^r3XxuwI+-1P6v}Eut-(w!`hDmUx z$ef$McTR%iIY$@wg-LLO9`4CWaQ9lA$@|Rp*}OBzmg5r!XWMZOaITX)A>fO7;{0)g ze72w7ZHSrnKUqGL@Y%pc)w9pH#o@!$Ok5OSCvf;baJIZY-#9?*&&zLS&iJz@HliK=F9Q0gsKaQu@NXZqhgz+LF*?d6|@%-}6!i`!14ePJX0HezLeBf;U4NN?r@1VoCBM09gaQWo# zV-84(;nY<_PHo&l22$K4AYpVQ3l{2aK4fMa~(o}UBvR}OAT4&2v(J8t-v=D=;kI}@9~goE4S zmG_0fQP2D>b8sUb?nVc<+`--J;oc6Mz28@4iF>_+ z!y`gm6yJw{v-OOjA;A4L%28rudJh3N+mY?%cfImH3S1YIEU$epz;rw7TkYrU5_EyZ zvL^dAyYM&d>NYlSY7peq7R!3jm*E17W!Et0XJ)aidvr8=L^$eDb^{8O%lH`eoBJ~9 z>&LO_>;|0W4GtVnI2282bL#r>feb%Zl^fS|EHf~cZX4ja%S{W_uKPOMwpLYzQ3A1*q68SuJnIm&S;Y!F` zgRmKT6N!;&(yTksk#DURf2Q6f65z`{eR;?LEWa@sPJb5nG1dN<^3o@T2Lh4d}zLCD*Ku-WRbf@{WaRo{es zAPAeSz873m-zN2OO%OI){T$ba9QoJ5HSs&JDu((B!e*;-K6{OeV{hu&kZ*PL?7yzO z9Qr#P{W{2ZIdUW9yB(QRKkMRHe4vRj>*Dya9PWQ})q#+Hp7Z@u#+s*Y2mmIjPrpe0Fr+_Qoeat6sF~TD8~tIi7k{yuAJQ-N^h?!}kUrt*6KZuxzueO= zS9Kx%N>9I1s#2C=aTUY;Pd6a{W@Ua0n$GGkbL1B|{8hlXCdw!ec>0$(awYWlIx_M1 zdGcpG`B6{yO^*G*)BlSnKkdo?<;n4B$b@ms&mvDg*ORL~`2t5~`F2BQb#V-?!t*Hu zIfZ})BF|R0L!Jeh%Vt%m|F=W_8(eQS@+Tm-LC>E7)ISQj0W$MO`JW*_fa`@uej4&P zuD2Sw+&nxML$1X0>RcnU*p*mlZ-mTOV$_rG63F9DdWRt6tzDqM0Wy+6U(onBLIzx3 zn=}5$Lh@Yoh>vAyAzT%(mL|r@lAd`kYbz~Dt6NTftg*Btt!vS$S(5g$ z^aV!Tf*HJZ4-;?aVVJw~GFZ!$`uM9*C z-baWufY0B_MF5vy?h?e`U2>r#^Nej0X1mgvF;vD_Iy00SRL0!a@Tiy(+m{|p!*ZE2 z;uR^7j}8nS9!!r74<(P#(pYi;pA&!Kp1S(|HoR*r1FK=#8ft4B;hO_%@QU5sH`gU$ z`jtf(=e))U#Wz18-7wp6LIk$sM+WNmEiOm1E)y*-=>sOrSaWjt*ibs-1qSbSLeTLc zF}xNoZRnMe3x{E=ja>snH2$`~E^9}NiNdJWWU7!sD`GucZ47d4Mg_7l31#Ie8codA z9c>#$UF3;O;s+&8YbILu?C(sp*0io$muMY6GJ+4RXA+lhtZuBWuCLzI)L370MMHg} zZ#a`^*|%G5*f2DlJeEm~Bzp%^hlhqo#|C;v6B}SdV*>+{qvInuKRP6~me9y78K?Ke4g8p(d3%au8=&5B40~z6*q{ zatJlqK0Y{D-M^g4qpVVrOwqVh(YRF6xKz=&RMEIp(YRF6xKwi6uC|&;;}OR6cF4*^ z!KSH-#-#!y9Ae4CRH`vjRWvTOZ%5I%RMEIp(YVxTrYCx!Eq)T+4xp{YPohUZsD0~D z2lnpW)!Nb0xhKir&F&N@@;UEE?@b>a=m}fMEFj+h7mQ2c^~`hdHFUB*H)f>B9Q6%! zhX3DSFzP%k>CmK7qW}1Vb9S%krk7rMSzGTS`WDjKKWS2#p=VFwva$h3$)$t7VBLjCrc#@l<{L+IB0I z!Z6av3Fd@Gn`ZXkvE#{(=z&gM2(OpkuEWqfMRt+Pu^6ftxEF&ud@O ze#ef4m|B|t)|;P3-tJ!4enESkNp)F&XaDr}1TYV5D|xIW@#_-`e{LRZ4*vABXOmTJ zSn#k~R$^*`xtJ!opcyM|jEd#gWz*)Pbg6X+@riaCcPitj=cOG^JXN~YwA{nlu$Y*j z;-cR@x3gWeG2=@O+49m=gT)U?^R3SznhI@+H z7Ic&o_)CtAWfEJqB-R{AoWJ(GWN&ILB|0pzs_GhR1bJjIHHJ67M{3+vf@*FcA`cg3 zv+vv6Xr!qkrh@-zl8Kg_D(pWot%{d87t@GmNN`bt1!o3mKaLgoMKS*GfFc83i%>Cb zEDBMw7lyaY`siswsx3Wf`%!C9qI_-joCU0PT<#BSuW)}>3=8g!^lg8I&ni>H=2(2v zG|9E**!!S4I()=5C)T~W2Ou!~g!@Jk#5vKk8IH{ca`g5kx_P-@{al7azk+^R+oGd& zq}7z6XW*+&ZLmztPm*iac=lSMM^n3NE#Q6QM3n=3paEl4wMjx4Ir4RfiM&@lz z+&=o~m;31-H3ps#E=M7-+2k6Aqfep=Wb;BF{T{JRC4H0Kiw2fZRl4W@j^pW`6>7TFE zJLm&{uaVzFAGi{z`ziW2D)m|V(0`6T3jcZf*d~2~ z{!L1KfqqK2PrjXx`zNf6;eu@#D>Ho#eFw$LyCb8C1BY%a9l7+j`0ds<(L6(oE?5X{ zWEQIoS7l*b-0or>T1LUlk(hIM{ntnM9*{_5SqNV5@vF`x=5c5YJaa}iS1c_E~7 ztD6d7y;?I*ZCNuia0$9a!!HMv<=8BPpTh13ALc;Ij| zA){iJODHkWOQmA0J6*~Oj}nt)T~bqghZGen6@c-)5K?#WDMe#R zNJy1mt9J*+hOiSFa_m-p2rq`mBcB|7R~dr{@XH|c@GcW5#pZC9l~Eqnd!Rq+$>W}!@npGiI*o)u6y#C={XSB;uGy=EsfxQZ)aS zQVAMk|9w6#n6`D_Ma17o;cSTZQ6(YV*D&OxvrTZQ3SBowvki49Jr6QEvpBZVCj2p7 zYyN2uaB_zU!n7l#RcUs z8uGo-sZfja%W)z4l&u%j*(DzVpUH3saF&Bf*mAVuT9PpVyMT+zU!TP>GF(4!EA^%P zYq?(s$;r05YZBap9`56l;GXnw-<||F8;QE<{(cf%vxi%Zhj~;v4tlt)li*(N;d&>* z-RI%%0M6DKE6`r^Y!3bp+UG9dTt^+<*Yd>q{e^tCzucm!B<;s7pXmp01#Xei)3f>W z`92O@8T5>HGydp^_4z()Z~`zGUi*BHID9WR;3&SY0w-gngNfq%zQcE`gZ1x?dg&wW}xHSmF|6<3VK;ry#uf{X#LMlDyr~4M*Y`UmQaUnhv z_5t8_m}}Sb`F`c_A*~nNceE*Rr-v!8&Eia}M;-dI20qzo`cRjznZ*=(VbR>%Jy})(4MCRJ(`!|OV zKLNx=@%<6FeClsoZMM9dbMWm0E}#6p!{K{D4!*wtE}#58?eJ~M!N&n-yV1LzUw_+y zs{nxa@5KffReuM7<1^lOKHpm$z7_+H;`>0Je7|t`Z2D1r{|#I|<3US(w!F5!qxdcb z&g$JV`{jMJ!)Mcv;(LFde7|(~Z2t=Jv7z9e0WP2M6sLEB_T8zY%6M=-c;b$^mmR?E zF?!d#0Jxb>z?*>MoRHbD(|6|2$NeqS#e;`9`}~T+{Qy5K7*5<={LxX~?xp)AaJHY$ z6O_hX=i&at!4XeKzPEe0X&8JgU!|Zl?okhSmV>KuaKH0#s~p^X2e%BB?A9Mni3RD} zc?a{i*Tc0rxU(F-8$8@)4vudY=*Y*jxNf>>2Zx`Z;)we@4>u0n8ib>G!Tdc6_fCfo zKU>8S_dW2*e8Yr&1UQ>76C~bKUb zLNscs!13H#EmbE^;Q{Wrlc(I#K92VcmpNL#cev7#Y5n2akc_s=f*4?9wV7QF@sf|9-I z(Xq^U4`GQ7_IO3xzI}W5CA(S<9BA9OXGjd4_8(~5o$P48a!Y+edkkI#*8ZER>x^>#P+rs}(UYnyA+bqyOgrqk79 z$Hx+DuoF*qgw)_+5fN&?!fcb(*k1Ha=j@3N^mC{~-5v5_lEM0L@il(*NVvwv z#|8#Ni5(m5^W~bJ;Uh;lY&m%XEV7ar?&isCpOLtBD^1Ul(E;6Up1}cJMBndOJ|FMP1;@`dAUMg6!*;?AQ<4j+rVz@S zJc;pBXzIG*52mralNYc=i7prW2fnkOQ(627`)Kha?8T3;JM*W!4y<^;hzgBfJSP*p z4SV)KzaCIOXD4RNd%Q%oe6`;FwtSHG|K!;jz7K1`>tmHlr@9AJ306u~YkhTXvziuI zQBl*&XY8I+Qdv?JTU2s($vGv`J#x|gmvRHX+uKT_Y;d*awEL799~tW$l9$f*UDM``lUeX?tcMD2>Nn1x#A|N2;EnUa(|Y54 zI5Rvxq5?a?G{KfN_!VVnt**`~lw-}iKvUG{kh*ujE@)Vl&5)88n0bM@@Il;@@-a+LcTc&t5V+xuBm^4`XS`(Cc!H8vygs^`W@u=2Vqs}RB+As z7puAG44)3ds?_tcodfz7bsprubo4bLeXF_%@*|FZM@Zi$_4~M^zdWR0psoqYJDj#< zt1VDRLi&YjJS2B|_=W1$kbaT6D#WzUXpU{#s6dR_h? zUD%9u!UL7lR;%fXITEC*{QL>^5W+9SigX~oyX6HEnLOSYjOTy?cN zmE=I?ddKK*7*l7mmJ?J@ZL&W#)C>EuZP(T{26>aE%3vf4Q8)IX_q6TVpWM`ni|$m< zb)D@;kG8dCjrWG(ES(tI-OXY~mPi}9&RX;h6J!QP)A^_882pV+%rW~L4G03}wk{@*(K|Mr31Z|E;mGjO zbT&ecL{NwOcJ8mwnoIUFVe4UMBYUlr0fKW}jW|Jo>jQ!*Z3S%qUOKOws zqDYMerP{aiK(ei2ctl%N&Xv8kd>}<@%frc{wdJ~^wPm~4thkHJZdf~r-K7UHl{_+X zu(*q?XACB2_4cjeF0x&0Su)Go6#-UW81yU+^R@)dof`FqWBjxiI!#a(3B zsmATm@(`PH*P1ms7~K?R<6DhIkvC7|q{fsj=cIt5wPibiw(^L{mC4;!<{1*_fy|Fb z)nvwUY&y%a-9760I_0A@3J_$j<;sToX8zK0vY1Z-@ zDl?ECJ!ob#2ZOUE&JP~*=sjr8I2?2~gFF{jm-&9y?4Nm#_L4a%L|S2X^#7AP%D6_x zrKfZ8=R4|nKsU*kUvQMU!z+6tB^ZY7Yums!>>S{@Hb%#I+;vcOb(E;N535A& zp;H}CA1Xb$auUso_K*F#G`65yLuSsk=Ba+>Qmv_NpZOTmTYCT6cAaPJ)mt{}afbQ1SJ3?F zXW2SsC50JR3S-#>#(Bbb&HeG9HcC3;k4q)vpQjJ0<*{Y9bSIt~k-VbK*2W%-;csNe zf?DkXQyI#O7;yYxlG=Uz06;nz8$!J&(zA9D!g4`-8IFppR~{GqUe-&3Xs^Ha#$> zy|n!o{pI)X>%V))Q~i&_dUyQ^BDm_?i9eR`3Ddf4QR=v&%iUGfJ>I|O!L7f3Ev%4F z6YJN&1{Sda5yv=O1>a4nU+tjGU0U3cRd)Z({*pr@62{#am*Q`PS(9~YBI)Qm+a0ji zs01>N86%VzS`_QbuEk}1e4L=T0uG=u*jzm|3yAbW^loL(-gES;UfAOS-PEXEGcq#03Cd(JnSaGz5p?shV^>c zA;7_nR)9Hh(W4oKV~#|3&?^<^iao|_7|GeI_gfs9S5un(16QE84%21@LP zTTU6~<5tl>q%9I~mmRm{^5FV9`b&(pW$-po?lD_zK_a^>u}ft$!WHV$YDVWOLkfGvues#ABDj{xxld`8uU8rwrUx^nnx01>i^4F_If= z%;4*$jP%m<@eh&|{bBmx!T+KMRP?9{F>8q`m-3F$hfTt9`t@S?S*$4|ND}!o`bgv^ z`i)}PT0TAga>~fh?etShy@GzT**u3E_%)P~uh*LJyXg-o^=A4Ae+&IhO1+gnGV$m1 zFHq{8^ijX>p^rkmmp;PZM<2MqppWnm)8C@hN9d!TK0$x0vEq#S`Yh#Ey}5~#a zYmsYyH(@BxEsRnI7L!lZpA}y1k~Qv(!A2?o<3u49;MVJQL+#e}+xTUyPU-yHf-z*Hp~YBR2(4R@G0;k>Hyf@^ zg>kX+tiugyvM7u%FpL`f@I!>Rf%yR8ET)R%6E9f;{h6_*07W6`UsA)Ye zBM&vrjOBT(i6xJ{SpQgxWsDV2%mL|QSL?}k>?KCVvs>`T4F0GN?;F;ZkjoLDjlL8U zrv>o)Ame$YW?|xoF-VoaNYB}5-x`gkX06s%%4VV2uB0B}nBGWuKYfIA4%LJ?;&JMG zmAaY!A#5UsPu@3D?!kt2_N^@+!f(W=K}gH4}I|MGV&q##P`w%UJd|&FGGDA z(?9sk*WL6nS9&YM!FLb+Zp^{p(@yw@O!z10r_9EEgg*qC@ns`E%Kdf7O=z6Q=*N}% zHhkIvXM503z>nRmt(nGN3IUGg;$6V@ckEw_;p!S46N5l7qTzGJ?57h1=|9u;LeE^ZHT z%ro=n^1UAw@Pipz@BWLbQf@LYM?vSKetoyn!@U`Gi0(DP;km5q%4p^yqO>VwG_N>T z3#v@gjhVun1Dw>ghUj+1wa<4xa44?Sf$27a_4(=z&d^QDcY(uqvjLaF_xZK~moR#I z#L)Tq>vs6qjp?HJt~EG~n4B-;@R?yRlJ7>~7FjZrCPhDguXp$`42UbmzkYe&4jkLf zI%4Ry;*b4B?lbuB2d=~EkQV2s`>XS^{opv_(Gj~9f5K-t{u?;ChY(I@seQf*+_Sb{ zVYm|)#kUwZw_i=hx8C8y@HZ*nCg3nk1a7kO9&-5bm=YJ2zd_(E2SJnNZ^Yrl<4#-@ z-%Ehw{bAi?e78D$M-4cN?{45M2VwTQ9oI5$n1I&<$7ic`woDlW2+k-z3Y^t3$X?%K zaF+iQz`4$Hydh8AeFkSa$oEYvIR1kk?&WCQ3mv_^d=wY*3^4%@1IK>F{H`=%toQHY z&&7QMxDNtE9EMDB#QEtSTc^M6VIYAwAzk2Xy0(g<_`U&LKINFTKFhb(q#DKdeBkoo zyTai^7Q{vI9R_ZP(Yu~s-j6zb8w@at?=OLCb&1Ti&sPExTYvaHDlUqz61aT$4mf-q zqv)dedV$-i)uDg={C&*fYcR+tzK4O!r~am!ISl(>Qx3j`z~#gDB8P8d4!$G6?KXPX z^UM2?!?!sH-`9Z4r~geyquTa;K@Pr!z~$4vS2=uJa_|l0$@gK0@8TSMp9e0V_K4SJ z%iEHJZ$5DO)Zbo*&(=>=|KncxZ6-a}^V|2`4qsbT{@5|$?g!55b%_4g=lh+*XX_`F zKf^a2H>1seF1}9SDga=#P6LeMy9&4tm&jcE`Fpp+XYcnYzWag8r#=47;j{Ns6yG27 zGAzDa5jJV`6-UL z7U1xI;C^ZNf&g=|*W-(0@cuY-%pZPkiz8ooO@lE=ozO0@C$ec0dm@d^^-#f0ZBJw+ z1|hh>p2${ayQBy9!w zalGdkb7bB_{54`{@s#baa>C-cS6%~uIt6hv_3EFI;#i}7AFex$%=jM(t{H!^d~=mc z723`8%z-SGqv?mN8u7m$Tr++`%z@ZnIOP9rNWUCw+vdBm5rIbU!I)nJb5Q%K5bu#w5m`)FNge1$g_?7 zVaV(=93!ZI0`l7+Z!+?_X-Yi_nQw)tzZ&v8a6M?`H$&!3VVjXZ1Nj-?`KFine}c^K zs#yL%LQX+v`Iei(3CZHkWtr-L%$XpYiSZ9Z2Azy?lxco~W8O-me;;H}2KX<9@UsH* z6Pj7#;a}$&9p_;J2(mWcgC$}MCY(8i+5qR(#!w5LP@0{|7 zO@zSoL-_nZ4G4&Ngs_zYS_zQgu#o~<36S70J*@;tuy0lZMhkR!*d_zc_M7mqRRdV4 zFyUdd5)C$4nw8Lm)~Z8YxHyeLPQvAB3~~}KP-8$CE>WY+iD!}NF5 z-a&4A40Yk6Hkk~0hBBIvA8Se>q^#zxWB7hp`oH?>f=X+n@psOmNcC*?P{V&>M` zpBflyNcHySJeHq@W{-sHZKYXFb0*DG>1|!P>`4p^^`?(I^tsq!`GM^p*r15&2ic6~V%mr!V*HFrzS-S; zWPEfinMq??bWb{YR9Yy%OtYXlt3vm%T$L5>ZP7K4?@{1`EW?bewj3sqZ+ByR1{(h7?OPOVIHLI3pt0g-gYY>Td?Y9MDiOru zXMVsYLc#cg!*kp3rf3Tou#|Q-1 zgv?S9uC$|B0vaYbwJXv8*n@k2`^pg>#9wqj|DD#Z9#^Y)mFQOwt~#WzZrir#VYQ+3 zu{C1IK!??fDTLCKe~@GRe^{0foi=+w<~71ctirC4iW4+Wu&Vvy^ValN++Wh)33CY> zmK&N##eX35USaz~v`hnk{r_}1lA1q6dv*P|z zG4ik-p<5;85;gDP_*>N7r#j+y3-&(Z;%}>jX$JMdJ9d<;)?Ay~OFw?%si$9tw04xX z&t+OO@A&xL?dP^Ly$<1OY1gGey5-Z_|NTK#z2xE2H=pX5arcZjANc+Gs#LgVysfmo z^8V5f()7cs`)Slb=R|WP+RK>ED^xY|^=5_G%-8u!nS80WrR_g?OnvZ2KeO$kOAnI- zC;w0uLy4Im&8W+sfLREs&-+VO>+nr5h4J*u{{1)8Ue@*dWo(CsOJK5s1_W+?fJm!3 z@lq=3Dsn5NAX%vggB3^D)zc*%^dakVw({|{3Ji(*RuPul`w`G95y zCKyZ5n$tBypqJ=%k-5n09?--hENe7oZ#?)?SJ))OHC-+uV>ws0TyZ^_NAcMTT)gIb zEsyGRmzTOipSYo(>&o29csBiZvn&1*V|@S{1riLOD~FLJ-YUusozK+3;AqyZeEaGd&r0EE=4}JGJFAwO&{U1*QV9%c0^{8 zHL+$PyZ5kV_5fu>Mp6=4cAFvcizuT!hv=i0cy<8H8t? zGI);DM<#BdzeEfV$Z2~yje;$&8My^nx}d=yvlfT6i~Q zEXu!*eiuH8K_Bh&R{FrdjXo;*?ezC6_5aY{s?@vaufgs=`Y8N+=_B3u(MMyvpZ?Xx z>Hr$!!<11OAE#f3ovZW@J_~0m(Xpg2mKVl#7SlIw8+;z=mP6>Z5Mmf3gcQ9MWjr&} z9T;1L3!S$RE^achjyH!s%`CaAG>jF6F}im&8QnV?I>{tbEhLlAvpIy1P9(MHp0`IW z3+;l!XqP#(yfL=Tzwy@Tw@tgf^cC?tU?-q${?Q}zZ&iE@Ok&)}>AKx~AMAA9iq=P%RkaV7J6M?@;(g_trsFxaQ+|-3o zqiY6^*TRL0lj=yEKG$^1wZd>=uqY&7?u})7*=tHV<|}Q?V3i?7XDNi#Ei7(yUD(xz z3!~HNas`E5Yq&skx?H6;U+WAPM#0nNDzjX8d`W|11U+4@nB}TBTo`>@nh|I|skt7P zXLkA=1ld#O7~`4y7{+#{+;@TA1IAO>44-w5Ja$!iyWSCAjt3@sm@2*?cJ{ZaZ`m3o9e()%iXJfr`fKAy!t zgg*ZWvw*C0O(2k+ zKP7U!oB!a5H~zsNF_@0U>Eljer{tV#8ht#0*x?x;5NU@p`WT&O(#P$}n~T#EJXOUK zl-zhI5+}`^c7Q^r6?mvgyD=*q`SD1SX+jnKHT);+*omVYO04s0l*C=nK+iEhQZ^IL z?YB>(P%I}}L>%+NXPlH>2dOuqps$s}ngHW*V0M#Pi2|*b%!hF(S_rpunam=?AV|2U zbR8JYtAS(PGS6svacm1d1emUFC``A2lR6fJX)j!F#UJC_vb-BOX-kCB*=yV#!YA#D zYvRhCin2IAe}Az;r%UM7_@g5>;4>Vb0nTy|W2t?<&pCV;0mMb|eFZq_a|SaR-!~k- zgE{#A892*9n7zg*BK2aTsviKi(hBfxnO@@IN&vDt!tM24250%F0p~ilDcw8q$LpzZ zpENjl;>h=a6&(MIxVGF3eh9c$M{h45!-d?#Cg6|2@qS=F>=T*w{sjJ9+?-X4KQIM{ zVL%*le!9C?M;~nR)4dZon=XctN%`Ie9Q&H@e7+w#d>HA)Mdj~TdFJo@HQD@OSeumZ z0^qh8z3ch;dx^uh)BvOMcNcK^v>OjT+xko7;QJA9JKT(!Yd?SItC-Mft0Q-s>X@T~(bpYrlRz2)Pam@bO%Se|^JboltJrz78g;4khR?EE5d zd#Lo>Gz|7LoiHA#=Qzq@%`oBQ^AAq01+EKmiL>#E<5!uj%;-0uli2dorz4JW@qgg% z1kQb5U=`PRe18ty9Z)h|%y`9-ucoQ6^Oa2->+5*BGN1F6@752h;C$sQ=DgtZmEnE- z6SnM62$Ek+g{zaNb~L}7)L7G2L{voZy3dwmU10?30Da|ZQ47b7A78dka|H^r`h+GJ^MQotu?Ld)+Jhp zkBlJEOycs5)s3~)_0^l28tZGWXsA#04QCRlHML>G&~WltCN+W&K&B244Ub~uIaYPk zi47YVkQ^N!8Nqgg(Jfu6+NRp|_;*ty|J~dm*Y$}Fd;5Xy85u`n8JtPjz_r>9WBubt zy2&v((2cG7Lwy5>6U$pKsOicKAI8Ro1gl~+vF7-u=Cw7rM~#^d~k}H`JsuM-JkX3kQ1+Zr=sMRv}Ebj}H!3_b+GiD65pD_=&gTC*Fb$y~R(w z6+iKY%`EnVZnERV?ljbUdyAiVD}LfFojE$tgNKp(xt8K5-VWruUw7(yi`^+Eg3#ajk zH~&>kZ(_q>!he7BtfuhX?DzG{5w+dd$2>c`eUnLft<#5hI7yuB@5u~|&?ZD3-cxA> z-peEh`Nk_P?~gFb%hD`%Jn(I?+3~;^`H?#w^0c<^yn>TU`y$#8=es|=^bH(wcLq}S zViqpVdus_ifqzHv$GG;TFJIRBi`yHJKop<9xczD1R^+j`{ZB~XIMVSQ7kl0Jn3v)O zY^ejX*DVHT%W@fTuCpBb^2GHUoaONOY&i4mzFa46msL7``M%V#{prj=YOs2^hVPmK ztACp(vHI7rv01;Cp4#f)GOS?01#hLdpVnJxWA%>)d9tQvj*g|e2h-Zp-+{}G^_QS5 zZ4M9}KV%VbbAW2ZGp7d@Dgyg86HMMX*pYEy2lB>_wsr07$qU^)k{K8p>m&ZgYy@pe zXTrPY2?6F6d}g>eHI|a-&w+hHUGBj%b70?^<4&G(*D|?`;ohD!S7`U3=twhyJu{Rino~U2 z!_O4+b&G=(wRuG=#<8pErB)EWWnTPpF}G-kG46tTO9;P0wlmv3Hq?JCq+cZ;EXj^` z<&qy){tED1$J4G{)|ssoSF0sIuKq_*@-d}dxolChQXF5}_)iFSy-jv)ISmlUr}*YU z&en0cd;ldIe}h^LJ=g8DD_6Cl_%-Tc$iKB}l(!?KuTxh*{+**g6w)`S;gCFA9Sg}# zUj5IO`bq?Rv(@b({2b3b;T&~;NI%!p&s9GP>F0U+d1{V*Mj_2ORz$~ww0TjXwuJPR zp1x9zg!EOOzDnH^($80K3dsx9M?&&KFaARHnUH>wr(dML5YnIH>Ge(-J9UVm{phgs zQ5@yJapH4k@GDQQbmlG8^J6sDRpMf|Cm;3X*EllczsZyT+>?Fti=XuLCp`I4$ZTRx zi>ff5{221ta!t8h{Q)x9+*vHj3vqMv0nK}oaxLWDxaJ-K%DW(QDm7^2>mc(Uv+-X6 zd72~N2bt-^llXsQHvTFx63inR9P?8NbFQn5%rT&n8!`Q# z1?C)W@VV&V!JcbDm(Q}W(LPukv{nnl*7+J>&ahWo0`x5o!kQk5lAa;HhQMB+XK@fI zYJ3n82KXGyi490u1Hj;fH^QQ!4u_dNH$318m!&btfMVKeO+bPL&nbEe&1 zZ8#eIq`l5DFXw2y>IrM~Y|!Q+t8*JaXdg!%GULdRC#!=MJg?6E-y;)S#Yb$fjVz0A z5;7R#q+#~^EN*jU^M{FMaVJXA_FU2S-1auuO>IjSccR!A-Ul%*9K;0U$jHHJtlSKa z;{{@}uDJmwLhJe(Ya1JyQ@!2Iy{Y={-rDBcbX~*7jp=mt*zvK%8Z2|j>vFSn>|WQT zMn?1szFk*l07ECB7+7;SJ%l$&t&kGS)V>`3F5jllb?qo3*>@76D(*xX4sX5? zOLJ01X1ZNdv^_UkGts78sETszSSi|`%XcqJ&5_jcW1~Y;S8U|spuP38x47-Uk&QDo zM~yW-d8Rz>Ky>l+jB+RbJf9)$>6T$EmgEV2m5iMfir5?NmN*ICrWWA3T_~7 z0*rhldV6kaw9UG(<-4^w{efdD<~g^;e{EavZVq!~rJ6@udeb9mdQt*XX8oOz%t_imj+vUV3u2SfV3JJ&coI;%MuR z9JGdZsv~iTTIx0-Y+3(IVWp1t@Jid~n6S0R{@XIxshfuDJ9eyTuNMn;7BT1XW&LOU zzT~=@{nXYuctIamYku`j#-^kaBPV8mN?Uik=i`>)ypJ}tpWj}xOns2)&uBkhGxK}( z?Q7dhL@v2cTcDf!`0>Tm-`q|eudHo4Z2``vv8g>lYjY(p`u*%@Ms|$sU_Eg$h3Dy5 z{^=bvCe+i3rz*rMoUJQB#Q=u0)+KGhaPs-#u1pLaadh;ZH7NF&9@BD=85PX5~uCy0?6 zD@})!vvQ_gPK0jJHVN5W8yOBfmnJDgCAe+$(R8i!v9^B+eJFR*$54VGS<}3XJ_Hzw z5gP_CqQ6~f%X95Yf0=RzEb}lNnLkV)WY^J8=p|5|O&+1V9OhW)U#iqNeI$OIKI-j8 z`lz?lZ93ME+jM9bX*x8~=~ANgLzHM@p+u_|LdkK(I*tLg_=}-?2p4)pAzWPiwvIi_ zG2>QY7}0kMVLZ#y!6$pzavgfBWD_0lbV)(skv`9mV!$bcltk7^* zo3D_xBD)tx56L%f$TQ|zX1EfCaiJvw$2^#ubN77pC2hP7Bb($AgF;I)0MD8MF?M4b z`a(sjSc{B8D%PPN$ku?ExkaSL*Lf_&=EN@6*S)>*jAMhQI{EnNOz6e9|!=%vTKC zY*>@A{W?GN>0%htamP!z$QZXnGV&3UcW32N6R(UuhH6P?kJ0Zl^?)IoF1A(gN{JoN z^~L;%p)gtp69<{kxj21{W+dlBZyJ46D#l-VZecu@=M)oVi8w3e^9NC-r7*b4^Mjd@ z8lmqvc9kesfpq0C&tl7Zj*aT#9>A^nW)DNL4u7bw!0k+!hCztw6H>REAd`<)+~}@I=!O#k|JXA6 ze20OPh6V<0ERJpE^Nl8=O1<+0R zRlwOifg-rBHnnsPiRPuT%+=TW3pX~=2W5h8ZmsvhT_zvI}89hClSD){b z!111DG&42{*5~^iaB^>x3~n;MuQ+@dbHqjE?;F4^FnW5H??t8@R`nC$UTg)&KVoq) z9eB+OGZ%I+yu1-O8LLeAyMdE|74l*e#`3?)!`%;DKf*}Qv4V~`Ki#ue<(KY3;B2}W zLd1pmOxR$ad>?c8mgV4k7&tpV8kl%~y*%Uaq3GhG@;B?eXj5oD-)`V+c|koX-;022 zGkVwa`R;Z2RvTbc{yvc>-+wxMYjg0;Kw{h7jG1dce>;J*!B;5eQ#8+JS?!?lka1MUuklerPDqi}x!E@5zX zTqW*7FWtrGXK|RKh$D{HVQoGbcp-4M|MAxq9dQehVHdZ{!C{&wj<|LYchJF+myWpO z9&XUVRSHVuxTW1q_a(rsfgZu~rixJV`MCE2XY1KMzleJf5mDs8eI7VlA3-24zT&0( z*T7wgaHhM>0LfRrzpK-n`@+#LICJ`|zP5If(_fACwHpOF_35vR*Go#l>8}oEyHqtKRn*m9q1T;l^1`eXZ5aJe+9$D;qj?(dgU@6 z+cA;9SYH?7U#sqcyekMRSN8?iOn;sFEab5utXzEy*GC=s`@uEw8`LjD@+>buv(&Fc z`q`d-w)!vVUmsw~Rm>Uq;;Kf>JwD{<&k5=4B)?yB^lPDi)RF5$_y*Mi`B#qql90Yh zT?ILthjP^&(r*+K-3x-Sa%o>z=CgT`qklQB7d!G@xK23on}TcB=Uny9ki6Neues{O zA^kkh)a*R<&5*vr(^sfJg!Gl3zEZ8_!^5~ZUjOiUl66&Te@H*y)6Z8g3F#Mj`UUDW zA^lnE-646QJo{{VaXcNv=`T`W4B^l5^yjF*4e1wq`o-$IA^lQMzf?UD(kDE9LbCQb zlR+LQ`=x`gLU;)#T-H%O+mqKjGUpKc9GUp5JbB2I$36L0Prloc$^RZlCjUo0`SYIq zWl#PG$m}v4GkDzW8OZ;RYyO_)@v(XMG5Zxclh8#zNoQIL`b&!wYntYT$1etR=zH6aukDqbOqx`SXGr#a4&sBdk zGMlLi==ax674 z*n?B__9)uKBWIYG@gy8Q9C*?P)}EaMXvuo;IvM8)G~wsTDmUC7e5(%tIB=zrfeL5n z7{bG5ZdB)}*Q9gGoJY>WlbxKW%?Nd;I_^2M2}jd}*G_cmP@$6^dLzPY&?XnITyk4hHyr3cfg z(XNDYjs(Sf1EgXyv1q2v+fGC9zzMn?vcdXB0u?Q~zHfgwf$;z$Zcf-^A7ir81yg=I}!qDt& zJH!yGch((q;C8_fOZY4sju7JiFd%fmFai)d$;Pz2Gi(f!b86=FS|A%M9#)>Bq8o5B zuCZ5Ttu~l3=2Uk1?S3Cz-JO>w11LiDS z=rJC3<}E6$cn)sjm>a6d$fuTfI;`Lb(N-Mn(=(qW!za-S&wxJ9cDnJxssHah2Zz@) z)zAJ3II=!BXWz&ib?S}b|C8t4xYjTOf6MX5b7qPD;}6c+y{3Qf)2HfqrYq5(crdYK z(Zh0mXidKkTejqmZKaQ0wY;>mv_pr~<768s0!Lo%DOrWTksTEe-170#KUZ%gcHxQN zBORW2o729q{oMA7Q3$E88w`s>%V7P z`D6DEqz2Rqo!S!v+FuV=&DZGh>C|umm! zE-P3Jqs-N+7+)dRxNoCTR%tAlVXjjoHFmZoVpf z&>V-mS~mvwXUW!C$g<`23Oyw7co}bD9-BLlK1f&7$GUbkec)>7V{H~Mu9bSBIR=OD zO_b3i*rAErN`H^pg1gsj)kIHdV>sfm@a!2}P9^>TeVo*hEg}$*WeHExzf`G1^pV*V zee8!$(?`9qGjJd10R3h93<=NF4N->vdiqE-Lmw?QN*`zKj?wSXOS}0t9+zFMVl*lS9J z7-bG;AYd;Piefd#+^r*tHqvI69?%ov~9m03Td_#&}ceU2rb;2!C6LyCK`5K{Nv!Z4`st+j>=M9=O?HfEbA%GlX>(u^A<$}yTY)5qw# z6@Cmu69yI)>(LvVW8Hf6Eyt*duBc|M(4%HKM$LN47&>{+m3QfQj-=>WC-=~k!@M-w7Ff{*~@;;^h1b-;Zf z52tDLtISzA+{qY&<)Ol4`7oJDAH5q<<>4R?O*9*`!zUf64_k#&vP%g_~S zPv^yi689I9$q-B)(r)mNAZ(qkeg&}Q1!eF_=>4L44C zZY5+F_kqOZUkq`hpS#R772>1!h+|!E!XNqU*|>GU?Gmm2N7@6Ib@+4njyZg2ZE;b2 zF9*)8Cwm>FYvSGp+{zLoz_aP{wqu)1|A2qr@~jSGP8^2->nxvN4)RGC2GI0Y;SBO; zGW>v-t_c=f0FrGJ@E~we>2jEGil@E<+)A4{_%?s9^>F_+3GN{ew*-AZitooBu4NM3 zOk~c@Um7@@Cr|{}XB%9Mfp7!Bxz2K&pC`_55AxaeNEu@0W2@ye36BF8RnI=(>wuG? z3LIwild|}HZ!n7tn;qdhsa8!A}4BSdf27fZXpF4bq za`2r5PR2?H!%Kc<0{;i@kH8%dr0m6&7H8W7nZwg)f=dG@W3|yd1e`o7ATKvzY@eeZ z?rXr=vw+JSoS$wz9<3J|z3chu4gqJ=#p6L7(+&7c*iFE-n`_te`M%`v;b|={itpRN zVb(Fh`Fu-2V)M7wpriOU0Ebz`1n2X;*x_53gYQ+q<Nm)^48?w zYXT0lunEpD?@Jv%-m`R3_4iuf@+t4P9li!l7s>b2Jo(n5QEmG+<>1>4Tt4}`$>G}= z#b@rz*8rE#{qZ%2Z?nVqO5B%m=j`71fQ#yXZ};xsHRtQO1+y{3;q!5afO`yj;$$ud zpY7)3YSD=qPMpl?4DP*Nx|@Kr^^9qxIL7-M57*(~h^Hg&_a5#_2UjU5ja!Y3%rr8+ zeg}tXt2pxUoPvux?%+5#q$BPo4|fM}wFqZ<7vYaC3inxu4?j!A5%)?&L{S3wRp4xW z1cA7CtC#L~f$K*&)3xIu`FM73|6uB9+8*Ew&hFv!Y&gCLr~hqkY!s=fc~i4oB&I&Q zcawfn250wXG3y1N-Lu=33q0e7XrYgowd~tnjc>ze2D-6vcN9hUoLj5>&{lOwfAZ9J zM~=gmhxsjLLZ^pLa`5EVwIMv}I**l5-%$K~L-F$svRkvbZPo7m%G!1hh1B3-AuIUdP;0+E9NMct zG#w7K`}V@2uHp8uX0Sf|^$PtJiP0nB4_*XY)of(!I}PQN`%rs^j~p4+M(-V1;ba*_|6E>C|xlL2!3LrMyRYH47BAKK1wVYloyDRd{V%OO2Z#UlL zookyu8H(Fhi`!PS_a{D_dnA2qICEY2>oP&l%Ia$lXVPgL>q~9u863bxbYGqvf5!21 z4G2!M<2WC9!<3m5R81k2HF*-_r_j`O!yimzc_%Mmi4t8djtBU(LQZAPz>yJrVm_Uj z0yU(cm=lH=lLpUY$hRG)OwaCH$(^1>kvC7|Xl4rJq=2E+&~SEcGNFh=>9J9Kyf8gU z^A)$P?hf{WHiUOnhFUJ_`8wsJGzt);)^cS-eKQXTI!9gdiQo`iv42n7p36^zVej5u ztsO0$dy@REUvLJB+g5|OVb96lRsDMBIorT$-s2^z51PTkH4@>zT59d;O12&ENsrJn z!>HOmFq*<_m#>nj*_9ePJdQ8FsMdAs5VT+3LG2po&ZIIosO`8wVDI2Scd~C_FrCD= z{(3S4Bm7P)jR9!I_~2j?=l4_4kB*OUB$tI|>5;?e|*F4 z1~t8W#_l;Kl_gcNMI~pKoKv#AWPQo=0L0rcRl*mYu~=zIS*$$9eG*|u>L^DbUUdhK zxH|(Wdoc@_d_8L230#cek8$m*ZoX3Xm;N^(fm;ynJAdh)=Iv(KcgPMHD`KHnx}Qb@ zQA=}N{%{Ljjkl|%4v)QVF*sY6df;4VIk;Vb*Hhv6+StY+kI%<2I_BA3QXtOVav&i5 zqd!(`-#0tf;_B_Y=I|Tmy5`!=o8^`B)NhdU_k7ivK z$5vc{FR5KKV)CpXALX6r8Wzze(i}@8fz7mBueZgn8qJgh=;YD9bTW4#o=wAM>uqz3 zfAZ8eN9ODC&XDXILh=onm3fBDR)k)+a|z{o@Yy?n@(m&WRbseodJtBo?hdZmYgemx zLFR&pc4g`V_7Z+vtyQ0fe?bsd7TQfu!)AX6-JqlYt|xyFGDj2b%G6KnC43q>yAr;u z|25=HfGJbY1lPpZsB(1dqd{1in(y4Aag4UhA!kRCGPN$GZ%`LNeu)#mHKcD+`yk)s z=&ugxH>ztP-{I&-L;B6?7Rax3^fU@=T^y$4xe#bw97}}vhU6_?`yH zTSIY}mhSYwels9Uj>%+CtY)Vc0Yfj~D#4k8wHmt5zPi?os09svbvKw9!wz7I0yJS(2k#Rr< zB3W8PCcm)HkpLw64A` znLK)AAj*>70b^~=PhKqSC6n?)KY29WlkDaD0o%9CuO{E7oe6I8`&kg~buJSgHVLSE zhzzA+BXnplx9KAg6V;&}8%YpCOdtpuu`}5<4XT@MQ!5N&cBgu->uf)Iw5`o+Y!gG; z$(XrwgG}AKLH$FGo06K^1ZOMxz(l1})sfnu!Xvb9wMVE;(W5lRRAc{8Q++tE**Ft4 zj8ojdG*;ZdRNTK*+`m-Zza&dLc4JR=jW85a+`p8yN>DVr=d48ryCsTd_ac{N?Ojyd zzhn(DrH&6A2{vWvU5V~4Mzh+O-KOJqtejOG>}5QC3cLI9j2J>2BhQQ}XT@YU{)86i zgF7;-KjZyJXS)BXkj+L@7N)p=DQsSmT?|{2rrt(W+`r^*Vu>=b7Zp}CyH_;3hdXS; z@MulsQX@5_v{%TjOM{e-rDxkleIJucj{D!I$2h-?2tOyTe7A$ z(Ua;aJ=r0eM0@=SG7+Vg<%6%_W+b@UO*B1c|E2M|j#?d}eXc-p1#b)fYzm3?6Hir$ zQ9Ej9zIypQP(z?7DM0S z=yT1@I$vhEi)CqD=jzUO6}YxK2HR`;E(c|B##ca;!pP&hF~R94x(oX4za}NXMB@57mFy=pZ^!mvhv7y= z#^cUEp0bu*4>(o7jPgEX7z4N!lo4+=ec;Zg51bfa08Wk`W3yuo!;xMCec+nu11AUh zfs_46C@a_5x%r6qwYo;Bt@M$p7W$CUJ;cBjDCE>RTU#AbYA5}q*`{z{=1 z^MJ#Y`^>(ltBvJ9RMMCUm;Fq8%}30Ushb#nP^p{gA6DvR^f#K_m{{DuoiY-A1$|W3 z9rTgNUGx$DYWf%|Uqe4*Y*_!iCOV2-gD1k^ZM1p0%+j`I~Dv=M=_?ejPaSxc6{{ zp`2G3Wn__&cPTQ`E2PLS7u#2giUB~laPOTiSJ13@cnKE<_0#1F@`V9OxNwi3E?1DR zC58(RlGEkl^H%EXT*HO2RwSen%4 z8&?_Lm4)%Tw?apjSE>;8CRxQWdAd~?6nm55!Vr4KTzDo)zA)^bG1o|e82v7z2ZiVd;m7c#9D&b=c?KR0M;@h&hxc*HZDuns9>%v)?lKR%L;7L26c1bG zs~it8=4UA$t{4ko{Y6hoXt8yxdZeHnd}Ptrf6Cu1>` zX92_UFkeI;^|P2h>SZN;#9KojnORT2)8w zpinVPf>5<8Hl)oT$Bu}lWfdEgd5xskOFbG1NvjwpA#^d!l%yP(`BYFw{YZXMPWGFn z$bZO3xkQGqv|-KCz`Q1cxC=2(AJ2U9axyxNKAy2qiAf+#F=VD%Mjs;xpfV{er;o%D zMLNN3`lvKSMMjJjri8I7w48xq$9@v!N)RY{GD_kuXQ1bpF3V;eEm74Xvy8jl1hS4e z=(&6kp&+eNC<8Jco^8R8IR^a^lY&#YzkIh60d98wu*}^cpGDW<(v3cbI$#|!&xZ|+ zbuebVoKf5j+}#!gU)m48pKfABHeGZNaZ%~62d>KK>DhFBzKa|_ zb}PClzDs~(pSRBDkK>fopGn~Lz;aS%x^yda8Z0e1}-65{m*24u~k_< z3=86-_{xEE`_*K8=KyERd%eRK^gmP4=K&{Ugu&SQ_shH9;luDJj%oXRoATtl$l>EN zj4q1rl05mk9KI1v7s+>U62A8!j_qTN-VNN_43F!55`y4NMLh#ts|zsKkHD8P*2ou~ zXU2NS2@}Tt^G*D@xIMttf}8Z14~ru%NY{kjw8s39H?s8}!G+8BMc~+9$cI~0Tom88 zfa5dIcaI>z<(s!Q%ZH+ii{d*MxP17ocKBB3;JXgE?MClW{5=e1 zKJ6AeKU>~)Iryr8%cs119KH=X_^!#5@9hp>O%A>f<;nLi4j;z=x~Tg5U7mdPs5IOE z8Z=!b-!|a#slS^XzNQ>}ugR0|YYrcN=!lCd@AvZLTev=3-px7q&I2x=@^(9X_z^WR ze`XxY0M}vkuJ;H8_x^au;lmFoaiQ`WzOMn7&;2n6o!GYT#X0zv0GCgBuX6ZWa_|l0 z$@e~o&z2{uybt8bchcc&%aOm5>io*P1vp!OI~=|zaUFNgfbIrvkI}o{e?V~C_Z`69 zgD^HD%SlJy$Grf9g-y3yP|>)Zz|}%ezS$1$6t3NLUku!FgPY^v*5YC5;(i0%BL-*Z zsmz~``y>)g7#x4o(M6TxTfi}#`CCK~Tomq~9UOn_(naBZ;@}o*SS0S34h}z)#F4KF z<;DMj`wegvft0=A0b93T;uvg4pk_G^7#R7=vj=bV8Tr5>YeV$;`1;z-^&9g%AOF0q zl2UL!{(5Hp%+AL>+JoZ{14Dho_GE~QYwS*q_u?#3e&}X?bSgF0 zHn3-ZZL+y5m4R8Myd!VoAtRc=z$t_LlG}U?38V{((u|`-sh<9}J^Pd1u@3~*CO39w zu0L?Y2oB)nmxH?6(ezMnvKv{yF7IsDHIJspl6`~2$C5q6Lt~lYK}ox@9U*NSy9S2# zz`oZ0`eZf_1==&fp|_A#0_SjndX=@mN$wu{j|L4Gz3+>V4AWkh=(FTYNg zcZ|t8Ufu+u&X;$ra0kpgTK=6dZ%V%-<{z<;&RC7Dk%u`{1dW*uF@tB;bBAM^a>j`4 zxRa;aArUhje=)rCx&%IlW)8)a@%Auqv{lg;NPI+ZP~(ow)nYydt&4-{rB;9+$HO#? zpQ+ay4JM8kac_0-d@;vY6xPM@VlJ$oquytg@M()6te>Yo7SdOG`bza+NI&1x&sSdz z>Cf`?XQ{sp>7S>*6O!w_@;*=f6nfUJcF$9sN>~?HXR8@bgT?V8I$U38tA!!`^VQOj z-0b0>uV|6Sx;VZn#7DGsalF6?^DmL|*+)OWLbN@EU#fP6kMyCiQ!dqyHTA_d4>ILip|K zTaX`d^xqHZ+tn{2|GlICZAjmt;%LktJNnt##zlX;L_Ht!(~f>+NWV)pK&E{W?Ut$w zL;5{Zo`a5_wl5Aj@_`V(OYpZk`X1TJG;G%k*>jD^S3 zRccR2f1am5PrWOoU+w8vtA7aT*LeChYV|amI>+<1o_?*`9MYe!c7pvJ`Q)C$IA4O`hE8$ya!Ck0%d% z@-3eHI!~r;59?Uok9hKzJ^4GH`~%3ZK>aefiuH?Ss8>UtYvdJ>-vJrF#6{l@IR*JV zBacJ=Ib_Z=82=NHUxw@DM*cgy(Lg+a&BL8s_w0Ud|p20BB(-|sB%J@3hz^xhW!^L^jk)80JqbIx;q=Q+!J-t9Th z`3R2LvrO**f7Fs60{^&7Q|Sl5KLwtTp_D%aej1MVX#R)bQG{3C%isYgKb6iFVKEyw zL*!RT`7_0Nn&&W{4J)_TYhLMlhPYSrfI<2~@iooQm;4m*bImJ#rixdgqj5EPnqYb)E|k?JPxm_JD&BeFVoH`UsHv2pH<9 zM*AVDfxPwTR1eK!e4vRBK&?34IIdVR8c+4}fm-QT16(_YaU0^-yB=OdSeqKZ*7fir z!f3}oNIfdU=$PYlr2%e4RJ`M6L>C&X_QN;mQe$*$Vkz06i;c0`cDyOK#_wcijVae@ zo;9Xi$4SZ>uUvoQtntdlfmQAruUvntHG1Xx>)Ys+>#uL4Dc5PwMpJIB@p4mZ5Ngrk zvPo;byxPM{tk%l~t(1(ThEcoLug3XC?K*$6pRWsL;a2U>N6Fqp^C;hSs8=duMel64?VMS)Q)WOKd9# z&uA}4CK+}O?n$IGOi~Eiq~mhFpEmvBDB(CzvTJL5Q5qLNfg3CB3(YB{aYtexF&rQD zRPMOED;B989OAio^`^_ELoO#z9a}N7Cz6Q>ZaZ_Xj&iP!uz|o@IAq`0+145B=-S)~ zc4JFqZLDQW+lIBVuC|Sl&aUQ-?HB9MgVhbS74@|c(u-R+v|S#FwQla{ifoN-wBk(^ zB=M;wwz0WuJqn?Kb}ZDqsd>ZZb(^`b7HO872U~U{ z-9@Ccs>1yn6PU8vHg!chI<~ZTwQZ6JT7|ZnR-0vkMjy0@RVOXq*|oN9a|{jA*}N{& zX=m+>bhI^Zu(j)mY=|^>M$+|FBC+VWBKv0mR!V?OsAIafzH zS4WBX=-6;#q|%z8gB>B5^D5`+$hd^axjO3F(h-TZY=}%gVkX!%GVKE@?aIhEJ>^^- zRi;};ZPJ$8s?GR9%5BvqTY!FRg4`Mf#pPTb>bMekR5 zHON)iSkAYO{6hTd@GCwvHJR5vB;&Zcv;jZGor$AH{ODS#FxWNHqoyXJ>~Ubca&&0j z>gQfq2WL;~V=omPIKC;|y+8VnX!uMt%d(=!mPYAZ>3ADmK^@%=CrgFmoad6W;9#me zx_@2$AyF~qQ4xN&yQ2G>FHJx2rp2Z8p~~Mr)e&t50`okxQ_*G7&%9WWr;h3H>4n=H zq2r8bS#l~|Rjt(0zuX>1Ok48svvp0y>t6CC=0}&JvkZb}U)&>%!91A#rT_l$T|l8j-T}P<6CXy1vR=cG?l76&;glRY+?% zbbNiDn28!!bst~VPQsgfBYCP71zr)L7kP;E6A~x z9xZ)%dQ=_(qg1-yQthH@_RP-X>ks_p*bA}@*{ZCWLGbz${ceX_9-N&wv~FlzE8cV{ zw7U3-&{O%VOP)CG2wZg4)g!WX#JFN&bN#! zFIy{`r7$l8Da|t6V5eKwP(HE$zsb;Zm2_pL99qG&ioT_!TPyx44uSJxq@yb)7KZah zm`UM~`Y)wIrG)|>u=4Xl3kt;odEmvEgFGCtO#UrYVvtn-nK2J*^eqZ~;P#3N$iMQq zptw+b)6z*s+jOyzmYSEN?=tm=WzT*z%4zmF=)w5mv==f~U7&I(U^Og<7UyPO1jKvw zf*{PBa>38LXzhc5Ig(Q^&DJ=j(oBh#JL28S8G|UJO)bLx`ceRM#O36HM++ku-0?q6 z-(dTOfSR34`c7q0CElSuVIh*28LslBzVzr&Pl|N8&}>vW(;!YWDN_H+gLPV&`yLC(EGTtogw<-~$+xZr<6uHNq@eT#G=C6(wS|90tA zOM2iKAiqXBo09TSP4cL^l)HiSeC^5V9__IT?R_ib_h{!G*Qp)0#4Xxm)rHz)74*7~ za^TUVGV=YTmk99zQq=FGqS)I|H);Gzc@xDd+Htgm`x3Z4BXTAZci30!Eu0b|H-EIvj^E z#!nUtYACG58taUc$Kou{(;>7}W8t*RMlZYBRshFtwq+U;XKpr-cC!^3_0HBZHdttFFW^KKEpztnE53EgZAG^i?k~6_|IX08d9qh<%PdFB zs_ft~AiRKHNYB)p;Y8}2%8L{hR7z;fU)gBB&;wSMq|I|~*jIRK!EO1s8=Y%3Febok zfah7jvu&MaLqJujZSBc}ssIv#Gt^tlMSn z-DbT&17p6=1~_af%QMUFt_VlNx4x~$!$lhZ!tC%dpLqc%shI$-@Vu2>s&R2$$wu$M zS)fH@;aZdpmOV+a!|X|Ft%k&9EE`C>+Bky@Jm=t^AxuG`sE+-^|j(|xqjYtYwe+^tCCRB)pG-(8n$xZnou z|IQ0@=zZ$dLFjJn{08?PoGn84YsX;sfgwMvoXv#fjS~2GY5oD7|J~|dwq#5@5W|gB znE7xo!Yf(dI~4A;^-8V*Ejb_Y(=Jzz#ingg_o^kM%4)v^_nbSCUUI!!)DtQZ529e(_#Lt+%Pv1L%e}z0ixcaT+J$Nkv%JQ2?q0eQE zzXh*ANUzf?uz)+v^o{VMO1cSpFnup>??9K}Uho~{-;8@i(l_Fs5OmsR+yj!wz228d zZ%`|mLTDGRWD0#ytze=zU9Mc>iXyI93LR7{l|moF>IR$zCAjC~CBd}ok`djmz*&KK zwl4#5c>=LN8A5mIel+~O4v$7GrJPBByTjw2+LylH;qSC~lRU2x-q z+R1Z*LypfTg`}(W;}Iqi`FK>Vh7unWaN8*#3ra|FJ()&|>7P~PZTk$;OSG@GX6bZ=^P@6}JF69uUlL($60$nCg#dh^3i?`#87?0E04Ll2j z0(wx@RVPyJYqHXQY1T)!jgI~!WJ*z4wiC`Y8CVzUE!$2-iK5ehCmTgaXmSQ9%QoRV z3(+PVH%{P?vE_brUS>YrHlwfD_S6|?jts0;BYwm)KHRQ>oNQAmk**`UR`rRF-)-UP z5gh1y>L$p^K0N{6Jr*9$1R1CwhKSV9_$qr3i!SRJ$j9a!rui zk2u0(N|J$cZn@vVg%y|kaltKjT79})G`S2xcxOQFqH$>OQ|ah;m4ydYC&b&4A>KzU zJabPGq~GT<#QRSRuVE7Xjzcb!_G9AIuQ%7Z%=n1s90-JIERRwU{Js z`>nwBr4DOnXd*w;pn) zzNY*jyseNk=g(w#_gQ!yS}+LjqmavFemQF4bxnfzC&*<|-%IgqXzF|ABzT)4mq~r^ zvhcP}g7>}*@qT3CT|EijQOI4P({198mqt{=)OTAD9w%;u^^nV?{SH`oZ%|p~`F0O* z@Ekg%qr^eTnelGoNIw8M`?~)d$dx0WYVettf#b!Mn|pD(9y6p=u-ppBEkHW)=2>zd zcgnrUk~?z}xh}{x;l_t}OD2)K4;O2N?)>=+%i%A z-xJ^-ph4ATGJl3zq>k&NCw10n364bCFYmER=E6$bg`^SXD(y-AB3gpL?3v8bq!z80 zP9IVJo}C#ezy;os_Dn<@hK8|1y^j^U;l#l8BR%nfOoi9%Nn@WMi|vWW`cot5KeO_G zoHImS)rLJ@DM8t?^a`nbnaENrX;DsV? zALzX%;Rl9(FOB(E&3RHV!KbiLF@+q zJp+LH+~7-Z6nB7s+DhlwG!ydiobzGuzc&%c{|R6EMdA_g={6`5U-PA3BAx^f%RwEA z#813qwr7*{E7s)26^R$UW2U!Y_aO9_7gr=oc+a6jJ{~$3g6Ee(6^i6nJHzE;G*=^i zua$m*FaLVc20rc2vPg9J(k~Nn@V8j`cly#d$X96ltn|0|(l?2>gXfn?qu+ad>Ft8I z&fl`qKkG~H5RZfBmr0ZV?|tcA;>Y0sXr=R3*Mxj=r8ow@z>6yqfA)^qzFWoAd?QW1 zSis`c3-qPf?QuLP7E68UCE^?(zs->^5e>fdY4UtXLrxQK@TE_8(x;0%eCacs^cms{ zzVw++`b_bRFa0zp{WLL?6P*tEczEFXnhvGnVqf|!Cw-RK=}VvOq|X-b^`*~o(&vc3 z^QF&q(&vi&!n8K|c8Fdhk6$3J_wkFI{ENg}ed&vx^u^*H zU-}X!-Q}0c%GByAg)pBm>~i?;JN%z?pBVX+!++c2-)-qL8#v!~_1^~Dw=nxDj`{N5H=a$BQ+8C-{ePyh!sO z0nck(x#qtDex8N@1MoLl{BOXIS$rX$GyfWVSmzIeUkKjdT?qbqOTG*It>BkwdHR|x zL}g9>`@#Ph=}UC_m%-z!if)f0@g#U8d-XpG9x7?ym__0*;IFmhPs4LJKe3qhTCShN zrz36_TBSkrd`&S6rM78)gX9;9ZQwa1ReuzTG4LsiKe2B}^$4zZoab}W$n_(miCrTr zR_q$=9fKn-`h~nSrakug9R|V+-U>WjNvC{{k3`RFU$x&^AN|28dB3wh`e&2zj*mpR zWYh6}ABlBvsHf!pUi|8ew?M~7A{|pId1SPnyWm<<$HS#%uQ~QWjLX3qe=X`gt^Bnx z{v~6M=R@OQGDgpbcIied#}}dJVUm6ZE%^phF8vAG@uoHCDA0~K6=8SS@m{%pPmi95 zNp_PZ?|GPXTr7GXCLI@xo`*>|+4JF;a@nmGzUN^Qp7wn4roQZMTi(66uDRPTS_jn#D+iAlzdk`5#3h*f*EMJwtfR9PKiaxf0vY8s^DMtVaW8`wV9*OwTE zAIA|nCr8>lM;l_XXxj!lbJKq7qN)DGhSaqQxWeO$!Ey0xYb-Z`=Sy(;{v`m*OO>O; zCjbXk(yd!{70X*My*x^fayq_|(Oj-OE|R**NWZttnyOfABsGb{%$~jR*buz9#P+0y zN5|m1vahFqa3mr6`ufL4lA>>LC@}!DQF@f*-w`pQ-t>t*ecpk5hvzkkt$W=#&xPrF zHH`CXXwI>|{=|UQnkHJm&oWJKMXNVgZi0Td77#5@cTZshWX>r!pqb;@U`m+Lxj(!8)XN(0C$RXOqr;q| z!GW}B&e37c(P7TfA^hJ|_Vn%Wof)2wy^Q@o z%IPNPj7$6T%NUDJ`%h6FI2Sy11mEm!CXMWyCgV_$LEc965%oI zmT-M=&)UGFiILIFq$)Elo{*Je69aR6jQ0C4FkYo~Vr6RA(BLq3k_gt#lNwMr4C98J zC6IG;m~(Vk+2!|%Ze7hsRqHC)2`5SpJ+ zzOenzI5t$frwu1|kEMna;aIygz!YNx*A5I`H?RuUn6Z(eL=W}~!iF7kqcu;olh&6; z5^maFIVzUYS=;gT;#hHBS@+ti?(XiCa#yGR8kcR9Eq!?3Ly(0tJ6nEPRD`?Z$3H9{ zlqs4bMmoJKc&PO7iOPV4xZtcIaou_N)QMo6|F!MhzfNfrPnFAZl^Z`g1{|MOmb_zU z+M%Cv0GO6iIB;l)+N%8X;j&M~ZckN54ZaA|DPB=@dbAp4oE5!l;r?}pTZ*5kNzQvI z?~H%iSrt97uJl;mX}^E+m7}g)-jTwW@}?bbDSDzhIrUn)1XPmM(2QL98803tzWtm2 z`LsqxpMpkbAe=BC%?1L(|INBhRu0uU|1gM%()PKP^|6la+`a-Ve~#l-F`gvL(S(`$VWd9{6L`wo?u;kt((_Eey9q};FFjiBq~iST|b6CuXC^e6#C+Zgh4a1U#DA=hhH7BCn-o#_yw%@K`X zITE;etz23JGUp0uGfi)imoa_5UP=l*mgLi#4y!IGje#z>L>2F(Ln z%HN{-Hdk6y?5y^epMfQhHf@FL@M#CXneLBt1un50T!b_V}d> z%#V_Pn-Cu-#TES%q<0GO8B!QWJw%H1hc*8NQlx*Gv{HL(yhn(~$fJ`UCq1COG}dY_ zjdyD=jp)38VEU~>e4liU@<7B&{D?g2@e@*1`d>-0#PexVRQ4C7NdFb-Td*fF>4n%k zoD}*0L-W5Sh5YYGFV^6`^KmNYo=6RRgPin#P)$9hP0~2Iw^B z=6&$z2RDSTn{%_&ahAp{%?>wEN3?}(!r89^);x_hH#;m8?S&;?ePvBg*NB+xvgr*d z;)TUH^84{UQ-dPqWI=iF;Rg+C(52adqN%)qVdD3+i0h2(o3iXM?b>rJ`4wHEL6>I- zik|R77)JyxxHbPa<7pD-r_>eGcs7k{k4c`2veyA1u`uOlgSF68P~{u%xbs{MjBCfM z3%p7L<06y|uzjYpC2ZG~vLz}sE-q%-;0CrT0A;J#o2~JO?))#4P+-zinZJ+F%k=>L15)F%clx$!zi+e#&cJ>s~q)~C_k`1b@Y#8{i zvMn06IXhVU9P(~t)@m%=EM=o&Al5pKg&VDAUgovC&s8{Vt*NML5QVM$jIww2##&KS zGG(Ld?sHWhYYtOWk%t=%0e_5e)n5{tnMZB=cB)$&KJMV|NK89JJ=V~1C401FSk+(& z9)B>&h`wv};|lUonUdXjz}5LSkYcK8XZ$V7>H9RCGF!>tr1oJb8Pbmp@7Bv2fj7W> zDECInq1?BSqTKsH>5%ecak>=5zK>iFN1jtKE0DCG-q zn@Svd{i0)0-sbl0!ebRFlxPB_GWRhZatBG@jK>GizCj_rpyRoukd8$^21<7W&+2$C z6{Nge9tT`{?;_3;Qphg@WqAy&*L2b`)!w1&v;)ug=-vj!AQGWHsy##CyU9ZiRT1PF zLi@F62H;5k4u`+Z;qe$y%6vxtZD}4?{50;J6U5^&#FzhGhkvKTza!1_x=p={Nl~t> z|6MvA<;`XM0o@+=sK;tLq75@1k5f`Vj2oU&A&l2mq<9ReBHgFk?FRMO90F}(ylKY| zD32$e!`i)S+|yyI)CcV<(vC~vu~hjl_5DR8q_`X=pA`96C7w5klJzMfov9s|qMZm$ zhpl+9k@bV9d?KGlic^J6z!y|ANO1}vtE~5Fq_{<7Q}YQLck=Sd7*O&F7q>|!23 zU&vvO__yN6Kv{H&EY~&R8% z+*uKT_YOy{YXZ4P9l5;|$Z;hp{(Is56UbGdzihe3AZO~x%;xwKEoa8kHy~#RgRwb7 zId}XK&y45yX<(L}FnGG)Cm^@MD%j}f;w`Sy(=TK(Q_B#9w*qoD#J5B49MiZa67(iV?mC?Ktya1@yc2TvH1@ZU zD@7ukvrG%|TJkuqEe~TT>tG;LI&|0CJ|>6_eoI47v3>-6k&Hw=BG~ zC&Bw?$Ys(l3vthB^edkPZzbd|vK7iVLnR|+$ z`cB7Wp9$U-kTdOvCYK=yFAll2I^8C&et%`*;ZTMkyoZsPiGF{!@Gh7HuLSpKcn%yF zT>Y+qoT;xF4?+6HA!pKUP#5n579Q^%7=rNr26AmG+4tAQ`=f=|q$Pv!iqIID;BAJS zsjnHYL3lC9t@mlB7+1f)w(!h&2*Ud!j-tM%JiA+5ylOOx>EBJ0=+_LnOz`fq@Y*NAdmrSC z{*&o<)WYkS1n*Cf%jEpM1kYZkzFm{xZGxN`Pm}3)pM`hjBzPZ%TqgSc+QQo!gvT2Z zgug%zRUQ}I{#}Df#nks|E$tgG8gCusGQoSRg}2SZ`wVb!n>1t;dMD(}crtOMk3!DA z4|@i3^wvZ*%(EZ$`#VSObxr#90@CEOJt*aV=g55+a;CoKewK1!C})>@$da3ZbOy?8 zcH|y!O5@F>5CY|HbmX3FO3R%_Aq2{O(vf?nNxyzU8uetL+|!QS%S~yySrkH`+%(*5 z+x3{$oGw?syU=pSm0nEEv-Vf2J(U{we{^}0_G1v}w^Y^1@>`mvw@bXa_W7)|+-@kR zmg6Ga96??#O$F%7P*uX`5HZLthh341*TUx^`zIgXd@h$AW&TX@%~bg~Z~W;~#Z^XB z=AY)IPZM!p`V1$1hV&O?MDnp+xF7#CWxt~Z^6`GlpFWGGK3>SjJ372$_Ch}18NSQo zcrZsk>2u_(Fvs#2$okJyyQAvVd>H)r^UqWEHD3DZ;wgPhk`DtQzx?Uq=f3oX;&~sx z(ve>%>!(f@3N92c`{WmiJe)WthlZBEIP3!-8+S zOvuN(O@DiYCBAtY#DH z*{~-3h~{|(n2quOBk&BoLzsnc1J7%oSL9hZKmS|vyaLX`d{IhZ1SLO9v}&GsvoK%u zX+A9ZX?QffU>jFOY}3o5C4=?A-VzCY8JgHM!K|8Qz<;?r~|q!(noMKq>tbl zNFQmBSM<1JP2BJ|1y5gUZ9sfrU~n`(ni?Efv0^ly>Zji!nS%W=g;A5xss z@zTqdrmH9!?RVWok5G(`(S4BxPR~y&-jUaZ#^{nr3D~}dCb@9bAcN!ar*WKnpPKW> zMM;l8boj;697kSt5ZA7Is;jzEyAs2ZJ&A$QhSb1FVt6#NGdOiPv1@Qo!t%6Y=hYs5 zjL#A~DSO8|J%ez$!zHY-p5fGJ3SAi+N%XL9V^A|OEG84!n;I2zT~K_4wLv=|#{hiy z00_59F*>sGD%hX~Z9QBajSX29*YOR#iP3mZ(yFsgSd*0AhtO^=l;6pVf?sPpd1-9L z$lQ)4!)?($dm@qQ+P<*?RW}aVw)W2ISR}Fs{>?q)iF5Rh4i0-cGReRmOlMGqm_E~0 z^ZA)k`s*H)&X+7H?DD(#@tjl`4UEePi?8e%+_h_Pz*joGK?HdPn!rnh%&XV) z<{Z}8i_bmh3btR7$-Fs?m#f4*7T1PP;I+Zd5VW8^P=lbQ<-ShLI9H_}NvD>((hPqy zh_Wu92$j3yd#@W&Bl+Zk(mtt95hLfYW?iH!wo$q}u;&|lVmbLHo?t2pa?27tHZ4~y zJBAZ{>WQ!J=}+MxTlvaU%|F?MV5ym*Um1Fz$=G9z6wVNMV!txBlF|oFrZtknIfpgz z(Z0dqU6mulC-A8=p};_VU~rO&YXGjG2k~q^!O$MTLoRlz@{Rjs-0$8Bd}UCa&Krww zhxcOKE#eh|4`--fRn8YVJnDG4V?^cf=-zQsj5JP9S~queMYhH^W+Y@XZLG~w-0w@p zmpSPAdcsR-kbtLL&S6aqE-?SU>99tBLQMkK{L%J5V4S@;znnwre(9+GjVgFgp9#Vy1UKRuMfDa@4h;qI_>xl(X!fp|PQ z_0S#3{p(arI9hs`no&-5%o1$9S~<&QMI__k%o+m5d%!ZXRKD1peuKAVw3=)+GMCa}f~ zq;9;+ham%7R#~5^lh)hRNIc5=!&e19`SGuGt${!J#n?7Vd&em7j-fz)ULm|=sQ+M< zrwn8c6fOsLrpwQbAqTQZ17Us!3gKG~4H!el+5%LzN3%90!O-BSrPV7(Bi%GeoEBv; z!4(^FL^bI}95ASnBOIX80O3r%Xan&pn7>wyB3i-ovlSP0oJShg?j~S8L%pyg97W}y z22#jFRQ`d8bTgN35KzgHFSx zV}KNwiy_A2T)YJ|gcEWf>3aMjMY)_ys4sgiv{v;BsjKJNNMC|;b(PL1*TCs@ZWw>^ zLvvVFgI6+6@w|dbTR2{|oWSY?g*-$`ES*TXD;enoPK7*WO}G;>2MbhQw1N!mBA%8u z-nmfdZpgWT=Y(C%7f}C9)`2~YenhX13%o?x7y3UzPBt~-(dsf#4fL!mH>4|*kG7nv zl06w7xOk^SP7W!g>E0AUcuTdM1j8RwbrGT8`b=tP3Yz6Mh_5X8qp# zAZK(!v^R#`{`ioEhuK4hAiPgPj^n@tJ&eYUm(N*vEm}AT?@`DZ42qd!SHH(CyrxO; zz6-f>olauv-h^Y>E{sI@1LXFrL;2Up@m!&tQRF6E^Ef6=FmnBfka9ZVVaS;@Mw#Oq zwVbKfBapL$!7%F;PbBBI3-Qc(j;n+WEV~ImSzitKO~_TrRQ1Q`_Yo~;lKud>t%kAa z=Zu`j+qg8??)fpuO||mf0Xd!@%(hI&bNoDspDp(u$i0L(%9Y{AKsmSEw}&$;_q&iY z<>Im+LlE9iA$O5Zx5;B*Z2cBODT8M&FF|-KA!p8?$?*Cuyp>weho|Figxq=?NFP52 zYU}q63s2r&BRvT32avm5W7y;|FgD&&be5^_YAqOqR|&aH^t;Z&!@ZLXK0J0j!tEL2 zec!_4Il(}@U*d=B?+|&0e}f!vS={gkMA-FRyo2}58(_! zatTXrmJ*Y4w9vH6y~&cp?Ya!abLH-b94p0gZF_KfO0)3_SETD(;U>#TH+pl#qWM0A)UV&)K( zmg9XseyNjxs$=P0LZ_2n$QNafe2LsyKI}=9IOUg!zxL8t{xs!L(u}RCeh#$1@$nUrKGVlj2p7Y`79R6vC z|4)l2UV7(tS|a076B7+ZIOoj9_*$xY>Npz@lia z*IrIs2&MSVLVFp@Y(5*!!V}U#oz6LJ7Nowe`LN`n(TOdW)kHXn=`v4XSmIiyzSw*h z#>ZxNUdJ$5TMavVxMJVj$&8haneU_%oV~xRS`&k9T;1(Hv01AdCGCN^Gpn|!_I3c} zrl%^7yOQc7>phb)`*Dd@(t**!0)z+&+%hj!J>%os-#&*;cMfE@u|Ir6Uq+ z*$}A=G%zyfVa_b}1P$bw$e)ras?SU;aCA@FORl~BDd{r#2A645&0w9=>8EVgnlpNwJBr9R=GK|*#419&;Dydt5=>T*v@idyV;ystg$q0)wZ*S&zZ&Ql?m=f zj3?Z#(rdxoK8|wZdVQ_3oD`^6eXoUGtU`XR3}f}Tns7yc;|2Tm<*DxF$Tze6sg?P3`Wr1}M~WU?511CXCc&()Tx7%?1Z+)#@R!arw|0&gWL{+w)8sE=J0 z=t~Q-5LC+&#!x|S&^y->1LQzqI24=&Tpuuq{ zLQuVcyza0PbdZd%RkaG$AQ2&i5BhA_5DYiuw|4ZFlru(`;G38ZzFkw|l1B%K5C(?K zj}GUV7-Ex>o}jHHy33XT)de$GYuZPNroW2MOsdacx~pDs}s(KobFx^ ziwBqBC+n-*tOIi0OwhsTmjG|K%V!~H(kN<<$F!X3f-gYM4hG}44CUN*A)XwQ$gfWW zS@!!4o-X*STF#Vh^mFmPW#QrUl7X@=-uECER>__W4_v(8LeBIX(-?yA{tUUfD%q3a zfr~d2#wn)0#vUjLZ$9K$t_c&>cbSEU(_4lhymKMP^UH*Z@Gj8hve}L817*GOr~4xc zIa3}n4c-H2)~^V5mR0D%0T^GxgS7|@su<53zB=< z!sE4vfpQ!KCLh_~LylvOc)VsXP>yyVw%jV%K!p)cIdk3x$!&m~sR!>O8G`idweWB% z%Ro8l!OOGa3Wq&At_EYl<+tOiuCA|IBQ3g4?EmxYxXvSZc3c%~jI8ar{03bAuW;q* zsdP$CIn8BPHWEy+n$>~)n~wz#>wWw*pVLh)h`1W*93CnZiS6bPl%`6%LCv&9`Rje@ zrP53~?8Oyve_1c&pO$6jJQr5>=->%g0k zFT&E)@k=HG`8W8|mx*h@|BIE*En7^;$BpX<_}`icz22-Q?$_^_VZcSp1WZSCh#-IztHhF^o9;F^hlB%FjDZ*EGv4 zEnya>+fFjcx26Z9Ouy3Mw}ZbQavYPhp$|>7uE8;4@!hAU2B2Nacg~GVZhNmM*h2yU&JaOuHe^qO}a{YC! z^~&{Ew$3Y8c?mTpaq5z>W}H>qcvqOx&W-Lc<&KB3zTOo4B5Ed8(>JN>$bn3JOYTUF z#>Pfsqsp6PZ+tW!=vlH}UX|b*Y8r*n_qaT*)sgngt81+~#o$*}`*&33LBv&|wdTaRYR2X2+0%!( zoD0X%QTSA&)mmb2PhyCkN#H|k^^URlaBqz6Fv%emy^n5*^(NrJWK26SF(yutj*iV8 zvG(S!u1LqGi>t${*T!OcgsZoRmsu1W?Ozp*8PR4JrCDr{)GJQ8Cx($_|= zY-^3g+VLHxZPVs0T^dYgYTek`)*0*Q+T0myg?AGpyJ7QH?VGQPAj8H;hm_YK9bK)e zn9Z9vw61S%+Y}qzz7y_Sk=6N}Ar(u*gOvrgY-!uDHb&geuI7#H7wh}k>W12idiYB* zC{lm(<;aRRQILcW_t?hfuJury0$Rc5P0brNuQRpOI&HbKtrLy8WmD&tb~b}-7R#{1 zZaL{SDy@jbcD~G*vf4JGZ#uTLqgm}XYO7IgWVO4|Cl)gmuvG5sTHCfch6d?uUKi=K zkvbzCZOt2O?K&bGBF&wVbbXabEIO`8zfPSSA`vvURWIXL(SmAkvkO-(>4#~*YNM`7 zU)VLguGl`7>hImwpV~egA5JAkJYUi|7mmtkuQF$=7GxmeGX}}os^x6e67kV7+%8pG z6Z8o!&3uC>dn>4%ty<1j4ci^$TsTU9j2Rn?$WBr48jgp9sj13J94v!-7 zm7}j5rA3Iq5J;w!V9H`>4s62E6xfZQYFWekwuIv zkJd=Nd2DoYv~|j)q;!YahNDOE>bec@$E7nwT9f7B)j4d+jC;dL4~(o!wI4-go@V|^ zCyO#gTCL@KUKOp<@`@oEWhJIo*zDFq<~Mx zvT%IDl_2u_Jd{{Y9_eS3LOGa034Hfc_Bu7%eg>}Aq#Xw2s6Ri-(`JK}K$7$ehoWRW zRF_67my*JWr->Bu&7{zC9Vz1Fhe>?#k)7Wl#74#gteq6)TtSLTb&vx5N>b#ziWKo% zNs(_GDdJyGib}tM6v}NUT_8jcX}u6TNP)kT6!^PHk#B$$jWkG#bop@$>3hf{{d!VV z`UX;b_2I`N*5gg2kb4U$(%(vo#@$DHk@g=I7UB-_(B~df;2$8xSKD`zt`ch3IpDm9 zJj#17X;_H&kphPwP?_)lkRsn-ks{xNq{#P4Qsg`3F^PeO?i3-6xooiJuzVfRJjRL; zEh0krd?+D{PaZPtKu*(;7~v=kEOUm2#F=`skQiq^$kR0B%I-BJkn$rAwHYR6UKzJrn1v90ZGKU*&*6W^5d?pB-%wn z;`Gi&NgFckKrYmf=(%hl9%eq5$u(H_mjm)|`_-nlqzt*NML5QVL{{YmUyy|Gpl zl}y<^Cr1=@#7yhoJrTK&Dqc$E7R zDe!nF!19VnSK(R=I&B&154r>w0O{*AWQ78@5RDMW~)h;kT)GEmMf zcRePiOv>E{Ia972lfVkXyAN`$syN?Yw;n&T@Z^}D0Pkpqc;|-G`k4!4kbW0HE))H3 zvhZ+v$`FKi59BhzdjfK%{dk>W2*NuO*0x5Z)TdWuo5=79LJ1 z8G`Wcgj|bGw~4FYKU#PgvN8nWJ)NO`w%bcggA?M>?PVtQ9fq9gkMJaTZ-HDyr`yD> z@3$>H9Lf+>-yb0{6a5w~PwU6Iks%20T*zf|{`OgT@^NzlygiWPoahF(zK1QmaxF~# z9>Oo*GUxs-B%aaAJGuR@Jhey>tUrKSg`#Ab)Uv4{F{H(R*k) zlp5$8G{#%DTy1K2H}*L8gtN56-Z4BlHYBuPxc^y4nRcz<^3&&6Gm{puylb*GPRRtk zN)9aZ=h*S6IRvE%_(mT;$MN=9B)x5#TM-WY9X|Q_@&=j1R)r#Y`8FI)uA=gK_ZLa9(Bn!%fpkN0Hl;D<~E@LuOjFBeJh z`>gcc4nGQhzm1DbAV}fojhlby6 zrEj(HnEPgn=WW@o4*!6|f70PU>+s)l_@6lZe}GS+99}|b5{}(`7XG#RcsvBUMs$IniPYsRJG=Gs({}5Q5xKGQc8th9BX3w~+cxK( zk+HXgt-=OMtOQ z_uH4J?auwy^l7_ucy;YHdHvO|GwRVI-%_s*+8R6c6JDxOtS5WoD;2uMNUMuA4cpgl zXlseJ!|--}N2GZz4Eo(DA0Y=}Z+Vd*iVo*j&Z-q=rYw;{77P4t^J$cqT@TIecmWdjpTg5__;|sfim->>AvY z@W&xbEEyl@?N1DQHs|&QUf;F^-O)6tGH_E9n5s&%EYNM(Np0R8!L;SOFJUtKcSkT7 z!RJrb&f#-R>q}4u^~Tw(on$+l9T%^i&idnXM))}+{G7vBW2#T9|C|y2rpTr%w_(@Q zZCKB>YiL^qjLZ7RU}F)(@{2XSiR!+(s=C^Sc<=Ux-gwRS-l~SGM0M?&HHk#U=-$zA zIkuOV)>GQUqkUW%9~v4N7s1%T$Vz)BZsRbL5X|8-5;uuvn|6!$jI`2A8DKnZ3+Vd! zRLB|O``TCEaLOjq$CWuF{G1Vf&Imu=b8Tf$-wxlIk^Ra7Io$-EacNugjMq8j9LDxe zV5FaO7)w+9;Gt@{)g7aE*UY3cUIUPG7@Kn#%d^th+xv!>i8Qxrt=boCMnWc2&Imte zg#Q{E;j6c+uZ_>xVFmsgn&YbiCbY>{$?DbdsT$_foW0R!(k@NSVQB6dx~~s+PhTd= z!e`PDoxgDWGcOk8$s-uyOJjG)%!sC?&We{u(=s*qVwIP?BU!von$<(L?96b=&#o^85&* zoWT0uzQNd@_U?J5_(MB;C}W}+pKmPS^YRey=TshPLN8N8>BBtK(SuQlX}f+}>X$>E zOs(f_(?~XjZ50Zh7GxoO-jD%Qwp_Eee8cw_eu5EA+WH7hGL3wTwq$EnpG*iMi-Cy} zKY{RDqO@kg_ZnD<3UR46o`=bi{EP|wWsGl-dx}dlFIGuhpq=<#sGVU#UVimQe))+O z@-SPJ@;H?8jiiu=nWHqd0E9GTyo40rbC6Z)4^?HpC@F;2lOkUmDda9AMW#)pFgv?~ z6mp%Ukn18v<+f=4YSPn{=Oli6ijhZUyGc?1UQ#HPAVqv1DdcvNBK}%ZSa-?KrZD}G zpF>d@`57*(J$7BJjp!ktO_$pyw&-GXxou(#8%Fe3)>i7WLy?bx-^uhiih8Ei_<$yH zF-WpecCzt_!6qRwuCjsTXF?NjPRg+p!YMDYkeCe?t7-zrtTNr@XbfSJkcb$i*&qgL zhY3bvm1c)E*Qf?6wX-`KEh{lmg_G5fXTPi~hLprYfhUXQ^#n$e#KPH=4VK*#Jhpmb zkw(OMmJOoa6FinR#RMg_!?}5~Sj7gbOk;&{x^TkMcHOIRn2}xgs);PS*_M4!m;KXM zt(G*EV0M`gehJj4tzKV^o^2t=u`%roHJj2xnl&wfMpUXEvl}KlQG!1$pj>LhS(5S{ zjE6jDJIcL*JmdyI=|^`MgmO199<$Uw&=3sI4uCGfZ1w;t;u#pvRt{;)gAnjaHP2a! z@oc#e>LKNzj7+abB;zslOF1f+XRNmiVD64%3gpZGvQa2UFy1TBaF*>vP|STNw%^9M zWci%6d7r>9|2W0vY%T4#!({w{BPJ;DY6`WyK)J6n(h0n($~x%y7a?;CD#5&{whU|w zPL?*_FeZ`yuj}He&Y6A$Og|vB@vN*m7TkT&pdhk6#3(L5&H8OVf6+ z9K#H(e?Gu$xp|N~h&cA68LpIb%Y8VUZZ{-*!7caC;dHs28ySM|O3L&dp%U@_x_BLs zlXDUz%neZx-gd}k(k_2x;Vsgo2H`ynxr;ol(g&`7$1FT^-UZ?1Eek%+UA$Jvnfjuu zWeCFSgj^>2z0JZ4PlER$$gS1sHgWa)g@uPh8G`it9TGFquX1_1zAGldyA*Pn;Jwkp zJ9`qmyCB!1({19`mv-2uKguV;`)P*y(O%o&ojVEMO2}nW--Ly?%EIGz?D>|>=NRPV zla^gs9G?R@dp`I&SBn;B^h>SHs#p6MOe}s-E)f-8-my*7oj>X*oU2x|VO_tlY*$NV7MYtwMfL8yku5 zNcb%EVEvZpw@vp{1WfFFIp8(2B0f4goZ8NhAxcJ>&8cHgy;HIquhiYB$g$%Qi>Iq- z{}7*|UMgsrd<=Ad`c%t}H&2&oPWm+UQo+kV!%3fE*<3UKOtk{vlV2`wwe;gn?SAka zYAVchT#uhESI(Q$j`DwPL_z5~`wO7UyttW;>+y5t?Gesk9cGGuHiw}3c(wCOP&`fO zFw=75&GZWK-$=Q{B%^#T=rkc84>9w=x0nc|FY%?8pa{F{8~ z4dV6S57_BAw)sA!-)E%{`tmo*_O{b+_NAAK+kE^5PXCk&+Nr18zf?TrlbX+{S`Eop_`+L6lgD?LA@!vka#lc(P z)OUfHo*tYS4~xWHAHUYgzsTnbo$Dgb^T|gY`NfXi{SwjQlV9)1FOl_=kA||(mxwET z@=KlbajEF>rH92HA73U>FyqS*!uY(`N}r9`gAV^U4*z9`|Bl1|v%~+!;s4_B({PP8 zf#sj>@O0hIF61R?Hg14pnkUR`wD$pD`XccS&GP~?8!sn*3fy1+y4X{VHS$6@GEE7=IIpus^9m5D-+l>1x%6SoV?ey!@3kv+^^`6B8nj|H{`xg&z3B7b2GQEk=f54T zTZ5}Itmrkm$XfrRhBYY4zx1G%-nIN|53n168zpbTYHLMeH}5xN+hHNao4bKtF9v?= zuQg0he4r=M?{Ud^YQSS4H=6Ks0EcVD9xqlpMIXH02=%5$hT@|=NyF2fy`aHj42v4L z6d^?i{{vXNU{(t>wqm6Sb!?07Nkt;nwS8j)(#N{=z~0v0SsjZ+_OxHVCzU~#UbrCh zvZU?(CoY3aA<`L8%0z|Kk0!?ku8p)$pvIo@ns4f?fx&LNHiM}7-qE)9=$`gH5y-1r z1(xSWla-s#uK@X zCq_3!Dz6*q3$noX8KLIZyyVur=Al9*G zpS?G+2m556Y`#k0Mu01^iQ~|4LN7AE*nLHx)qZ&LO=i#FKwoM{MH0BZiJ`>6tGe;T z_%8*o-jbK`*st!2m+|=af|v2Bug-cGv)@E^8&UAH5Wn8U_?`@bJS|r$8PZBZ zlY!{8w`;*K6fKU<(k0SnjvoVy4^2(xbt`;+yo=(eI9jc(mlAp1E!}x-k3$Nq3|M1> zPkVZ$jkisPT+tJP%P}n8;i?{ephZ;%>u;zOUjXezI{8EtTouGWND)}sL(ZRo)N*K% z=`x=5XJ_>}5^q682$8fB3Yh@~%9aw{+VVN3%?DtFh^-QbUKg)ZpM&{L7phC8pn}}d z;tEpOc65-QrPuLn(VJeZlv(9Y7=V__LRGm#2C67`>gXZu((85F^?DsNc0c0*zMB+E z50iH4bvpQ#EUjiy=o=Xib2n%!CgVhhU5uiL(bBW z7z)`yP6vz$AskfU7eYBwz1i7eLEHE*aZgz;ac5Fkb-RT+&MVxF+JuIva zka}TEpEA}N8Vl#aDPx_fvCzxeVBwVV0?#e387sIo|2AyQ5W^C$Z+`20vIUoFbcknz zjv?lSVu^mU-tYnQhit}W*#X+!OF*gI*%}L{dp641SUi?kn9rnMm?};d%R4DnYphk- zVPRBw0a<02$el9U*&(VwpsQ39mWU^-rq_J+8Vi7@jDjOg{uD^`$!|lpk z&=OpSd7UlUps%lp$Cwr+xTswKx&+rzC@z+)SJ%TOxK2VuEWvg0X3%M2?A|~g*TVy# zp)R%OMhUKioMB7a)he4%pK8faLa%D+MWVN&N-n5E1aB4cNpY#6mb_JfeUyYMB8AHG zt^%_uYsIVkR8mx-gcLInAfS%E+X(BsT%77|;8+O?yql3a=tRodMxZ7S%i(x2;R0kF zf|AUO#*hK(k6S45cp+Vx*K0W?q5A<$HGVc;!oox6$`FLN3vywdP9pmi)Wy5U!t2%YL3sB= zj#H)y6XAW>!t2q(L3kgZ0Ivyo^6-=64wUO*-VbWRMCD$Au}1yaoH#jUpllO<63?_V z3_*CiwVW35#-@vRlZB@z3)v@4$Y|?#2joHq4AdOEcz0QN zIQeA=((m1nTcy)UCThR0TXJl7 zxsWc8#2mZr_p*hzRm%tISGZh1IaxA1jN-?BGhrU&OxrTf9J8+}XY^PIIXf7P9f-_C z?j|i~Fo<`HVJvzNjtw@W-vc>ZUdM&^B1X>TI^~CuQ2^!8 zlrm7xE%#R3qP6ODo4DnE2Xdy|v$bFl-oIpscLqQVUil<==Rq!$cG+R!ojVEMb&zYZ zE2@v(`aWXene#KKzJHgYeud|x>sv92e)AxgNqw)d@Tw-ki)V=U0Sm8Y61>035brq) z&)ic4wcpE-!_CyV;P%Hl3=%V58Ya>2D#$gDLsMH(+ULgu79Owl3_ksM;vhT-xlH=w z-z~fgRMtSe-)D$dwK82_Q+|+sO^`F`x>!lv_Pf!-L8yIdvv{QtSNBmp_x_RINxnvQ4txpFsIax*Nsf5owlcR%EY5XaL1x7;!i z&y_30ypHM* zY~|J3%rJttAJO>}tk0}Jzp9pk8SF4SaT#@*( zcg*xs@hteCcyUGI1@D;Yv&C`nTfMA&}-my3MV{f}1q67Vls{5f9R zu)WR|4d53PruDtlm%d7F&U1;Cew8o1LiB%^zQ*IDUb^rbflZpJfUrGMX--Y9+s{=cmBqYnQ(<)@^}{~h=Oi~ldC>%c|P z%%2WZ#0+mNusw^#QXj8o-yiAv^L%Zv()mi}GKc4)L=%|4+u?6@_y-*RQx5;A!*d^1 z6Nvw`!$0Hj&w}Umi*M+-xzHcTqdt5FBtHdX>q5kxt@*j&U&b%2`7n+zh5Q4WuK~Xh zypeAPUxxgPboyrSgXpijHBbLQ9O5f9zZ3jfIPTT_E#SEU*EY?+4g4KA?$G=P!N-Bm z#mm(9)8PLNKMo1K+N3Xvdxqbwj8H}u0 zv1_n*tRKtAxMYOufxJaMX33abq%%S6*if&vA}ui>SGbvsW15u<6#WbDuv&4&s9w3~ zUx>){lX5|$e*qtt5z1))GDNNwl+k{8t`(Hg{xykQD=4G=%l)`kP)7TgTym|TjCPh> zrnhkNFS+DuK_%~Bl86<7I^JK?^cGJ3s@8ht`s?Z~77{SD!5+vKdZ zOs^*OH-)#F)LDe-ttPGUH-)#F)LEVBttPGUH-)#F)LFJ^7Lmqku#DDhLFM&J4Jzed zkBJ?eoaLBYZt7p4DOY2jZ^q~@xU<+B>+vnDRB_HiN)_2Z*yAnKR54=%cHBr}SKL99 zQ4W}l8%gcpx=Xz(R7PDFPmP)gxl*%lIFS&$aApqnn0OzPUchIP<-$C}@SL`fxyjV9 zw>FfiXpOYMDK0$qY39_}tkW}vN#mnfZ=yf$siUJ{VdxhcN(`q4y|uDKgCnE=YZt8T z>5qq3n{`T&j*iV8vG(S!u1LqGi>r|ki*>%Pvn#SOwm!P`;+ncD8D#v%mIzX%khTom z&~|ww#^^L4H~VSZl-}+~W@_Eo+144uE5#ZRIY*u2ivQtPzk%C=54=9W#JTiV$SvRSMRChV5m zNCV5XA`;tY;FvC}Z4>&YV@o@l)o!D<8r4QxqueG-W+$TDCQG;hlUBB7J0`Uc3Op|b z#F|}J{Ib0mo7R3#3c%e4YW(&pevtl}o&c1QUH)yUyp2^%W-Qb2W#h7qp21za1_#DP z+v`HC?70PJ@lot3IZ|m&K9$@16P0k*Koe}gA-%V}#g-l!92@TO+iFiDmj$pkG?!hO z^-`Xb%Vm}lom%cnGyJpG+LTX(%3blj*Nv!=eDXl@%sa*EsI%9c{->x*&>5FrS7i^Z zz=a0p-1X*ylUK*g9;bwmTX5zsaLag0qRiHXQ7S9Q%CXFVbDJzBdPl8Ik%A`)o*cFm zPu~nBM}|)zIibKnd;pJK=H6u7`8j~)M|dz!Ot43mUNq*@GH7vGP+V@o+4#j>zJ?5( zl*c`3SxfXX$>6OeGdJd07wKQ}m3{XA^$X7YZ*5=oHD`YK*JRn5zlea9XMO>`nC_G> zr8lIu56AJEYAp^B+1sDm9_t&!yDGc|i}xpDBV$8DgTtdRvQ$g4%A;K9R3t)AZhql- z)zIOZC>K33?ql(x!(7%S!UyBs@n!L1k$IBn7`Sc$Y9P84@ML6E7kH7P%2$vqF9%m(|9yyjO7Ki zjqDdh!Lh|6??~RUVr=#F_CqDf&$hhu)QsqJ$%TjVx*tsL@6J2&aV*+0^7lU?!b69{ zJ0EH(ek!qZ_rhDwh;I*XujtMTm+$_~Q6u%6qavJ)v)vwyi}17YLg+q(4W~YQY(-%~ z^f_4{#_jiXUYS&SgrG+#Is4F@p;wtV!Zhp~7rT7G>zwZEw>m0HyNyqJ(7L$@qU#=~z+?lvuxN`<3& zM@(6rscRO!^n+Pq<`b8tu1&qSrR2#wfIsU{;j!XS33Q(x%1eSCNykx#!tU}o`?MuF z3%!%KSFD`&L|O9VEd`H0mlP`tpG>80N#1cr+4IlrX3wZzZj8Q&UY!X|^UAiT!l}16 zwJoV`nz6v7$5Z9kNB^An;(?YK7)RyXRSU+G$yC##f*(wMGI@R38~3*qK4Ik97Y`<% zOI~qkfA_P=H)GMDkUFnS6@$+|Li%7*9LkHAU*EL2eD`CYW&0F7%HA><<o3IR0rWo9V$)?2| z^{VE~Z#F1f{oD)d-ttgE^bUD8p$(@L;#`{g>%x-8A=J3B=!nV1GFZ042*0suad@OV z*>px;`IjC|bcd6$pMTJd-GzrPOLd%)ckZA5wX8eu(Db+{`<6C&dS+9!aH|79`^=Ipm%3-#b(vUAgnq zNuGyl+&-8R<T()ehR*Cy3o&m08CrN8g{jH$EY zul`Kal5{T|e)e~_H@#H4cxYYIOVj1wV*E9WLxJpwW}wF1KlNsy=Z+S3N4n>Cf9<7$TUdh^nvb`=a`YvP+?mnSz1G9nE8K}5 z$baI&B+ELmZlL=!-AS~h>XWHYuqDcpZK<8f;zjJ62W8)s53!XGKl`Gbdqf#p2goy` zA5Qiqn-5jV{twG@LmhV~#pX6k^AA3YBJL5=rXBFC`Z)X+Sqv%)_+M_C5h4!f0{k+#6&tpa&isKp*;+*mjX5|;~ zo7;V$drP-oK#camw_hhzJgjEa|$`3qpD65@ZKKuBlg zf?g(RSea!?IsBDl<2?U=d!epgvMU$qLIETxd{YqC|K@QQKbICLWl)NgSIdO+RTWA@ zc~TLXRYjGf88Th-i{*-5Sb-yJO&*P&La>dfBgGUW11LZAbJ;5F1LTSanRK}}Vw9U(_6rL=X;g<54p>bnEtkWjQEmKvnKp1bO>f_~0aF~)TlJ!X zwL+{WKTCb|r=ktEZhl2isoO5+j~DbqKSLTD2y z+GjH3SiJ%2@tB@=JyCBo3wSAYZ1IX>qypz2uh* z@itN@`%cocv{(6j80eEPSBAu_><7uCy+1?>qtAn+R|xS@QpEoi=_(;UMhXi>8nscs zzafQwpC+vk;xnYc`y46S?_pAu_XSdl3afB4@{R`45Li~yp zdOb^ue9w_Kz~GA%gW$KMDE9?Y#w`1M0)OoH3MrULLY&XSy64+bLEMezs*m)-pi?d){ z3op>HC_Wo)F+q4?k%YZ@9~$5?wD0%qQHL~~8zO{e%LX1=dEsmvX-F<3R;!2?Yh3hn zHn__?RAn93GH36;;#;TOR&;ye{(?L5??e@v=j@T~je##U$5fh42{_HXP=q6i71mg2 zwNu7I6{KF6l1~|Hg~nQb@>s>Dj_4+-*IC(Nt@K(;*$-MXz(zH{STV9OkwX@Q+Go=M z9Q-DzA!VJoa(()@zKx-4Mat67)1~3cl}%~(4D*Aq3uDm4~rnGF^Okr!~y^3P^T+5X>FCtS5I0F9DO0fEZaYAjq$v%#`2MHfhA zy&3WvHB@Ae;l@pl5B$jn-Ja3z_M?YdE%-GW9+&WDmZNt_#rQb!4ynuXCfpyj82P!H z9uu1=*&^@AL!_<{l@H5!ie-B_Phplrt)(7vtEm+@$iO{CEKYS3vIt#2TY+rWNMw$onn!1)*{ z@;{;JA3>*G2>X4|KHL`4jy;r*&IM+uK-sCYPPX@hkR1vN3eZ(@F$uHLp#ic z0TL0_lggIiXDHyixUV$BN+hVb&!SJ!4JiTVT8`uU3ERH`ZVKO77F1RNry`B-k0?Ou z2r0L>3Y={7e*mWjStkr%&Nm)zP~ap7@%=>#N=$e3lADtMFUAPf#SAwffsZ|*C|{kl z`J;VBfyU_j@l$d2z!hQ#QGNNC6*#lp{ z!Q`8Xi-P3i#|Sbw@ht()Prr04eEb-5;Tr{RhgmtuX8n#Ud~*ffsea!AuF(hI{B_Cp z@?#u%ocIcX^V8lTg^!;jT=?GNlkdw4A3w*q@O=-s-9Fk&Hkfk%(si4HQ+q3b+h(b? zzc)ads-#@5@X4DUC%&72Yf z4l8`}l;l*u>wNNkLE*!xfd?nP@A%}Kg=>~UTYG z7pg>J+vNMD!iQbRgA?C>0JlTv)yU+l#Z!cAFS799#CINWe)jK83SWr_-@gEdTcea< z*6;TUpS*55)$bLb^*bAtlI@lE6i$5Gf!mc*yVUdP?Ft`mXLxYpyBoOOKKTBk@Zq+| z<~xQhT=s@V5}S-0h9)T}@d<3J=a*LCN^o(b>zll{p!z+5pL(6X3J+-VdwQPX&nhxK)O=2nX@TL#GY#nV(XFpctAf8}!{Y>k%yubwUaP*>vUt^R%i`%l(c(=kVwovKdAif_h z*W|TE{sNv~9((k}6xQ%_*hWoWXXKy5wrTo#tXY#c82EWCs_D;Q2Q<0Zz@NbmY5E1+ zhE}#VhzUXZ{#(Fq((sG;g1AY1nSozq$cx#Bwfsw%ZaZIL;FoY)dU>x(-??;K`YLWq ze~YXD^t8WKnQZHCRrJ4re7hq59`gGY`7e;~RAhd#6LJtA1*tz&{VWWQ4=Z?lVzomM zOSh6O{zvSTCH#CW#UOkLlP&(eG6D79rsdzv$QJ(-ioQeB*D|uje?-wA(e!nUZ1GPh z`dc)8gpn=&7Zv^8ntm(OZSj{H$J0{wxQ0KIJ)_AX_9sQAXBgF%p5&Fv12@TJXD$QD zZH9cnkl$j+?=j?08}c^{`R9sUfb#yL$W;D(I{Aq}ay4WO5q{r48^`mtLMGU3oKHS0 zWNP+oyj01XWZ^CO3|1v%I;YLX8kn_1bl|3h9dcK-XFNJV2q4KTr z7I8lz5V_AfTG01uak3%)0-O&&1NnnCehK>;&As^~XB{=6dBK>iYBdfp=Zd64Nn(4|67%eLOSqi|nHIC_4#+M4qiCF9@9!_@h>ZTm_|aoaj}v~K_cH!at#yJ1)^jq7zY?lN@^V_Gm+ zEMg2}Y`T;iOZ=8?#N7nhS9>hgs~21jN=~E~TQ2wwBk^*Ww-eg11uq9DPu8v9%fZQ$ z^&%@ok)?W(6{5(f(WVMfCKiIV=(uG(@kVV|0%1{7)G&6h5EY9W?WnNvy4`=Js9Mx$ zV5O{Esc!dQDeDGfcXc)5O1oU$$w8%EuHGe8C|5U&hi3xQ3f^JmVt%Vg%NL6^O2Z{> zG{PdZR5lh$O|HaS!P6^Xr4}DeO@^JoNNREwEbP0Z1Bnzo)@MyJSGMsHUIF5<;mAQ= z6;9&qQPRvCl>}5SDAls=N62XBC6fh+8C-Uu3NV*R5vs*j74KcLVK%< z%1eq$i>fQiON;lFm4tkL~(>(A#}&PL;HqCF6xXAcJ+p;ipq*(BLnTQ z%4+XwCkuvX9bcX(+5iiNqTc0HJle`zl3jK#SuYUM(oz~%TL#}* zFA(-xVA*Ad6^l*}?+%*br3WtS1!7N2B)SEQUOSq{%HuHW1!9~I%6ft5rlkt)BQ3k^ z@I?vB|3lUb1b5qj=K_8ag9``ebF=B+!5=E?1!5G>h?eIo>7IgK^=Q3E3B@C$M;sHS z%Y&r^C=Q?HjtN7x7 z8hl`|TVCB3yyeb=q5D2~@NL{f#PwU*J!DNz`F6i}>BSa9@IAC#GQ0cwtvR6(Y_qL$ zpFapM@-?}~^66V00)1YzLuh#G@K&lR{f<7Ee;?yk?<^Fsmu5ctAX~fbIN60$X*q>C zKgxlY5X1r-V;DQzw#n9}k|38B78c7eOQw`5WNAFvwv4vSmaV@w70=0SoAHHG=CLf6 z#b2<{Tok_+%6tyGXgPgDCF>$?8dw4$fMHfnvFskiG%9E|9=?O}p@#35jJ-*WIt&*+ z8D+ni{Ei_(ABEXIF}WSXU_Qz1VnP*WbuJW)spVq~W@r z;;1#rhRUT;MM|nC%>t{Yc!#i0#;m=wNj@khvZLPhBySfJZkzZfw>PDUKQybYnPSXF zJCEWDF|o8$*d>D;O<}A{*dv1+P2pB49Te|jmOb*hj3Em*O75X}FJlKNeuJ=2Mq)q7 zEy6Cj1`hm5255xhR>l$(ZxQy&y<$;9RO%8+MAQGNvakk0ot z68XNKo;eqNbmv@i1sBFcruD*5v$!x|c)c)|Cd{>1aA6!~%0+$0+Xw?GUN4N{Ot}J* zYq{WBb_%#~S>W};v6E@N?EMG=&V}PH9WLy4JIuwFY5}`mP~wnHhmtNQGSJW$ly!41 zJu>GCzCUp3;dR9^pANBlEZFVFY*o&M<3Cd_d*5ypTsU`R%4OH<9KnV2&V;!(2`-$g z(&3`J1Q|}l26lun^xiB8ags}i&~XRU3a*+{z*Q%>a57D&UTQ-ZY7LDD!g{nGBSo4# zVq}kR^0+X^!|0K^BG7?92!Z|9B&Gl^FjGiApC_{bEL*<{mjEj&sx zE|9k%CS$u>DQ>eS3X(D2`$>*j6Zw|n8b}lNmg1WCDa6xojeCUTR%@c&Qe4BnN$Jh_ zgC&b$pOmiA*<)Gv~DyW@wvPF^HGK}AIpq`USMm?#Wbd9FFVY={7qZr2qE@6BI zHuWbpj^F*(2qPv8gISc0y=MkcI))si@;V7E;iglf5vW|+2Qq91<`^nXdC~1Wz(!d>A=5G<>7lGqr4*9XWd7wT=SMqZ6 zL}UIA9E~LzWE;asP!E&Y%aeQQ$W@Z*EFO};G(Uxxrw*(Tq1pL}}-E&vW3t~@xkw-Y$oMgkF@f?2;Fg^%B70^`It z0vsRvoW-5*QiTtv5gwfQuJy@xv%-hdk1OAM1x`R*+xroPPn_Ny+j~E70ZE2fZkzr0 zDTPm*79IIc_~d&`;lm>b4^I8}P2imNZv%4Bev-%fw}GqSEY=^H$3EVKj&MJAz~Pjx zoez$!(94y4v~T$FAvit-oEk_+p&vg#xVH)%<)J`)Z?QJDzwdy=xdT>m*-FN6u}ldc zKng!+3(XPW=zKug&~zTC-;Uv@;;skoP82}6WgKPouUT&4>ZAdVfbqyIw;MQF?kW$y zQJ;Lr6h7QC^FZw|>vzH@-`^F!wH|ykP}sRbuSRBjw*e>Hi_0tzPW9XGlkZlAkKPDT zaN_&0Prm0AKHSdp;KcW$Prmhq$@bE@f`Sv@xxo49zat7CZbNv`_(aeafTQ}*`Cg`z zOxH#!W0U;}xcP_)H=Pm?oNzPNCvp6lK;X=BR{|%?rF(D+B%8SPz#T(6mAeE#3WWO& zemNwF@C3H^|6=hWwFdju1-+uHq zdKgjcN2gNF)3zVgr~jv#e;SJi^CHzhYHyKQCOuXs!^u~hk^)9j9=-TgLLP22&gS2B z>`z^uA9<{fbX%Cxuw|&Eg#iDz&K%CJ|7NcumtFsjR@-Zhv^3T>sjJhqM4BSCt&!v! zbQUDqkh0{Qz9wC3QzU}L_LOz)b=C3h{Cp+_3nP_CsGgO!9%C7$wX^ZkjI@Q(N_;DtuhB@||(E4 z!rFFtBra~aH%;iVgzg}OiEt5_5_iXk+VP1#1zv9i= zc$0sV?}Z%Jg`@XPwWatYJX{xIv#zwLq>@dtO}km%w8=YX<`m@24$RM4;5F5Q*wjE% z3Y-GH7{jYmI}onZmXaIv+LK-z%J6P%G~-8k`Sc0I^a|3Pdhko6#qcu&z4laJ%Fztr z|65?9tYu_WTsaDumkQ&bx>Z~waJdRjZr2*+!s)$ZI1j1nD`moMcR)^qi5>U3XT1*% zCEuNvJNw=%tuEgf_WAB~I_A0{*uMAf&gk7KIfD_-_JkWg`8M?sIe{S0cJS^|hK7Wz z$vscwz;J(j0B%8IJ0Qw2jSh9Z^=*h+KWK{=Q3j z4)S`?A0LfN&lUn3i6p(as0HufC71Wc5;je|8$M6$*Q6?#u+@p)vC;0K!-HO+aLIxA z=-&89f|}q$#!D_c5F2&_P-$LztLh~OV8`5w)y&DYjC-|Fqj7NxVO@V8cER|B-Z+a8 z?q|Bj;P>T{ov}gOw|G}GEpRD$uW1;veCl{swrqH02&=urUk;i@UUTgI+Y3iJ@IYfa z^hrq&o*z}ujQnNNSORU*91K~G8oT42V+W%A<~`}TQO#j|G$?|<9qy6IMn@0z#G~f$ zd(96Ls)o}MYVAvh1H~;v%E96VG!GazEU$$;DBM8mf#Zfz#(MJLaRU>fc>uX#72@Q< z;Ra3;kB_y8osJJr_Ovsk98{k4sRtIp)uUu0{!8U&Z|l-`^3_&sgz%&5X$~ez_8_LP z7(bH7#J1GG74k~_q*`QnLcrU7BYR7B>6*#Pbl(7AOLU_#6jGVJgUfKL~;T$m2HJQ_PE?c9E2Uj_Yvc(w+MOcdAW%=2z!ec5!3W3E99~N zl$(fyFxHrYn~opaX?d&wvJ63ZsSZJYMkb&>Yc>4^tQs<{8DfPzR_h>3Elo_Vhkmhw z-)V1Cecr^|uj<>Oue33F>@c>eOj+Jhdzi)K1G|U$wW1FV4OXIq4G>`$N+o;N{(Hr{%Ge*uF)P|7vd& zUmu%>v2&}PmdEBmmLZ5m{8m7Ix1wLK=?8dupHTGYLZ56?9*b!BA+`tdrxg5!n*L%o z2>H{B{;;M`@bbQ?=*fTRlZveS4;^E7LjSa)zenRc%pQXLJw^YRroV)j_j^VEZRlTA zKb@Bsk_BM$M_j|tWCNOfosoYg zZ$F*OtT2;ZuHjGP{8CF3$Y0jka*Sc9*6vGW134Bs`f@{G&YsZpm4?2OJ+0}h4ShBHv8F%U(4Wm-(DdgT`g0li@0B5l ziU0cecmrQwDygqA^fiq9{mKx8eWsp&3(ME^^@hHlE!6Z4hQ5KV)b!g7{Weyl>9-sD z?W|hUHyQdSwnfwLGW6D@yk|uN1GpceK=&jRqi4E$!pFzA4gS8{nedj#@>0MI3D zHt^qu{4Pa)0rDQmbU#h{S0K|pj+9Twe7>2;EahUz-&OK&hrAYgnyyIs{}nQw(pC$3 z?lin*gx;!89;<*nrsS`KOjB|168OC&E9Lh={tgjZ;0I_WO{d6fW7i# zA=h(x7hBD3$1Lly0<5P!DC8!tuVkMSvXy^3J1rjy1WVq+I)&VZv;v%eJ|pCFxm?Qr zBII^1pT+iwcdi{=E@Gb+GClJYz}D@gkmquFx%)&&IRl|xnYqz!&D?0m!+Vjt7xB%T zqvvnk+ZpR_?HfFR7l%WGZ1ZMAOh{D%y3vu?U}6~VP8$dDI%g1XmDuKJ34USxO7Ro^ zs4KOXLe(X<6Y*%d?%29oIxX#I=@c}N=Q%3%c89~VaPm~H zw!`*-UTL(PJfB-sM$5^?xuq~#PQJ`7h0*d-yKtlBSL<3PN~Y#( z=_t?XwIF|k_1eC;52Fv9ind;erM!`({o@3unkp~v$z#16On)0m`_&1_%eUS|lCyg! z2$d-i=zk}K^14vIha^AwPSE7bLK}&l=Y&*9<$J|a3_T}klGH|G&pRP4($v?9+yzJ*=1drPV2K@o_YmZ~84i{pfS+r6oM}%Pllaq@f;S z3p?7{Dz|gc>0G4QIp`ED((D{`p0v{F3@Enj92IsBIulu1I>U%9J4dCRqteb%Y3Hc2 zb5z+ms_Yz9c8)4^&G~JO;R*~;c^%sVZ~v6KcUQP18tpoAB-Yt?2xm2H_s0^6=;$TG zadcMCP$U&qiX4ePC*a^=tUCa$-TXZv+J?X?SH!OAWC2$jHzL8;B2J z!2*;KuIj=v2cvPNj(lx{alQ%igRXQpKD^Plp0**l9j8w}DIWyGq&~C0a`F#x@?g_b<#DZ~s-F=hgK?DDX!D4$6{$y|t*W9Alv+Q* zRsT4R$46Hm-D?-|+Fl)GF{R-|-+{qczu6i-V)&4-KDCNYtd^tRTKs|l%EdvFV)yY? zGf0g!JNUN4$(7(rvbr0s(hdGDu9Mze-DqvIXCtPa!9E z>*(k{d~LTUKuo-%G*l+iP(Id5D=`ye&|39HZ|?+$oyESfzAw@BS`=_lw0xIw2=cMi zda94SObDHhyovCrM_z_J&PQHmWS&P}hLoO1UWT0BM_y*6$s;eb{Cfz2Im?7K9m=e|Yu4U1YwudyvX!2F%Caln__5F}?v5Yo>(Wi6)5xcH^8YM* zS9x#ZHWTL58NH5I(y6t49j~+@#r$%Dzz-m&3Fk3RUx zKj!lFU}$BQYFcCFbIlRA$DT&@~3l8hIrl=?#qG0J+_R6Iy!O% zA2Qf{%LHFY;UlD#n^yLzelWLzg_d=6fF;S$`_QX9dqtg=^-kh-3L%zt>foyaVg46F zJ{UTB=RYLd-O-!V`*`o8FXY!u+3KX5+UKrov~{oi$|>*L#?enbD7jtokE4Iw)~B|q z@gm8cs(YKz-S@(b{3#_fHr|PNM)l*ppGU9e#D=$G?VgiU0&{xVx*5mOPdW6P+PmyN zxVOJ2zv0_hX({K?X8yT71e?f1ecka;Y%tWPS>5sl!s&@Qgzui{cT9&1^~MIf`{SX} zq0rbM3?}<8!Eg=PbK&^z(f-i1NzDFaSK&9zS74&Kkk{a6t@|`%xm>#L1b#(IZxizZg?_}_Cx`$`3MVnShTWw608{@9NWe-9<|H>@F2PsI3#4r1OySGu;ZG1|zp$#HCGwQb z*IMsTBgSi#T>1~qLCd&hS7vMU(G^HvqYsu3bUp|OLke<$O=E?9Q8<2q0RuPV`8VMk z8y9e7;fwR|Yx(_TNPqxq8#1_IpBHPre44QZB!9{>W?`RX>`ao6i8UJTV{8SXJyz7Q=GvzBC(zky=#(0Pz}!W2VK=Rm?&QVcyAw2+?8EexJ#&Y}1#eEB=ZP`^5o zQFuMYkMZUGcsh+yy1?zE_#qfVQw%(J%d$$W+4neKPLQu1cme58@Z|$}B|AulzK>$$ zJ4i7qe-Xte#M*mEC!={(uC#6Gw55>rLFU3gz7{$P$%Xs>O6r=Od zm5hCrv4<(fiS~08Kf`ih+BYVx)hU;#wFcQw%b05Qg+0 zlZ>746N*9pONx>HD~fUF`2xkT@c$jfjc^!5G459XNHKQSOBAEfzfioJv6m@ErTebM><0x4PcwM7$xxv&P|UCa64dRF>P7U zGX&@9>2c1t8Ld-_Si`Sr4*TLad0iI^-bJUFHzas*3Q1?Lk6T}y|9Icx6qF7xcCQ_B zv867Lh@s0VarR1w(s9>=fOD-$j|+R(4hyk0=ZdRw5GD80S%P+LdbD1x#)X2{bbWf1 zj;$^hTsS|c(}Ux+8rLpfMGVw*XuVnuK2BMd9;IWeD+O0YdR*hRx?0dyrAO=4>T?7o z&MN72q+_c$39fU~;~KBkn*}W{jpdw!>+XNRb z=jm{%SICv%N-hh!T@d1aARR)ra`wdxH+uYtX-bbvz1mupQx~~z7Noc#$+Uu0S>AhX zf~yrhfJ0LHid>IPM_-Xs14(a@o=byL7xaA8TDr4hvQ^qN+mvVLf$T-zJi$!7iKPsg_Txz!T6>yB}aI zggEdZ{!sjHVwt3m3;8RC{Fou*Q6!)8N&Mr6e8P~wY{;KAWIO_Be4jDouNpFL*2spMf*M>(>eI*@B(^5#TO>4LiM1i%0IcVyW8GEnaf^ zfT6}8acP{C ze>CK$I-C?xB!2|tmpWX>P&7_S;*lOFi-ja_!6@m z3FXSRx{1Th>JyPjxZQaw!rG>G^F9=+tAHs%KT>~+!-lt++Q<7?;2uCjr=Wk$fJX*K zWy|n6+(_3s;8p^l;$Eq?mNAz3WQ^NAj+0e?H{MZvRjDxF-@sJiM`K&o@j`Jcf+QX! z4$0QO6X}GbeNL1(?eIWYyIfJ$LEw~P?QN5 z+`xStI5{?{6Xf;}1P&1o$AD9VY~ycy;xLS~FtvS*cz1Dv?!lGC3RI9ax= zpUHPZ;rpoobF9JlRp9tJT*YA9g! zMQ-ighG!?)f8P;!C%$Ij{M4^q;rodPUpH{=LQj!f{Z1%+PkZov6*xcjds^Xp&V%n6 z;5vk!BDeaTTa)a+ZwtIr|J4KMr+&=}-;X``_5(*_O$N96-CC2Z-!}!=sebPV&QJaB zR`_r`$b%E#G2ohno+7vU{T(3%e0<-7Z!U07{Wm43-TlxV(zy8vW(?UfQ%0mq-Qgyv4*^06Jj zPxcShx6;5J1MW$H2!|IzJP^(-_b8s3@D?g1nB{&0I9YD1Ks)h03mk@iN-+7BZcFm* z@!%^0&QHH26ux~Pd{+UdUKeCV&H5cz_}=Kj_buSmap1-`r!m>y3q1H%00+vHVAk&< zh3`!se3$v;`+~w3_2B!CPrgOllkJUp@T~(5he%2=+dHW6b$Rez0i2)x`>?_n_uzX1 zI1K5OVAii-N3y*KJouIY=cm2h3SXZG-zac?+IvjlyU2s@1aN-ZJGm*@-T@E3Gl28c z-t!f{ArHQT!1-zKM-;w`J@`HioS*jom%^9u;G2n)sh{>X11Ha?V;+1R!1-zK`xU;! z9(*4M&QE(^Qur?M;0x~ZcfQ&IoNVu99())0QLNjoF>UX2Uca@cu->2BubHVq1;QU-KpI7*<@!&h@vwjFvEr!SQ$T0#|9^-l^cuATk8v>ojm5QgHlTzQEmT;2uzL z3y2JX_`YP|zM$avw*Y~A$-sR_!O=T*3dFY@gG?QNKT~ia0wFlzUILElPlw-10wFlz zrsJkr;tDO8BW{I)TknB8N5PeN;93=2xd-kd1y}8XyGp^y^OjS4->2YeJop|^aP=Oz zuPL}~9=M+=I9#%Mp!yYI|KfCFhra5%b@(nMZBe2(F*-6D>%`V2 z16C|#@|XdGaqbPZXk>I?s5{0T$BpWJW4qEs(e7AL|PQ8N72$E z3i5`|O3q_Puz~Zg2yj|2HxUPMxxNK4#+?Xx>^*W5aS*p_cO#}jXN5d=pWH+o#KhDS znmn0Len=)ww&tyhgdmuHlT>1BiZwsg)=y>m%3us)3IR=$kRgcID0==GtW?vVX6R32 z=W6+jkSAlCvXNW{8TU=L z+yt2dor4N6JET*{Gq^mLJ)p_wvcG9^Ija*VKMTK--J;3W>}Q%>!m6ln1Pi~O-KfbS z_H|93&(0DjPYb`8-Jr>Z?8`#7>YvY^5i;Ev7qA+85uIi(pUGZ5ekrWD6{b#d&AzSrDFPJNI%cZf$F_V`blF2W)#{wFB838yJS1#r7OuiEL zAAF$#T4+F3iRB33LRw3&0?fke3lCJO-srur^497Wx(oPJ5AZGy;KR1#^swzXofaOj z?qq1O0I_AeS|>OCRvP)%7h84?a$PUd>>Oowj{gBp=7pc^aouX`jzSLDEbzZ5LGuo8pZJ;W11~fB3`a`yj^y!}S*3jWc*wYRX&jH4RNvh*H)`zg zHYw|`dvvrfv|+>GP&9s|D?U8hH#C@lY^{jXh1F+Bf);PSM*F(p4+`)0#<~awkJa^& zz2vJo($ccKCE8ru))r~mwJ8imG}`*c*0#vb=(dLan@Y<|c;M;W6Lyq?RDai$oFr`C z-O|>$YxkZuLB=yB9csh3b`smPdtdYJeGz2X8EN5oQLC1=I;)u7yPN8^)i&;m4s{;H zDi6piO3wQ0ZY;I>NOT$Xd$QN-AVv1WvtP2aTifazcSqsCytQ^~q*d+h)<{cZZIjjE zmPf#rNK>S?HKJtZkZ40nk&V`%5tV3dibUWXUE59jT6aZu?Nz9n8`Z*VchxrS-m23y z@7pPw(i1WtGmARM`ue-u`};aaVk3R=M7wbF+>Q}p71iEY+tQB5zJcNPBH_3>5rwDr zs_uBWr@W-RtTNW!S=k*c?d&e8EQx3Rb#wQs(p$FWggfi6yS7F1I@>+eg|n&R<+^*M z?@)Y1PmA+4uQZsIR2;u}EIy`tj+F07G`LJueL#;3D8@$@U!dYde1tq$>a}(%v)Id* zuIl01!lgkh9A=JRUnkF+ndK@LV|!w`i>14I>Ga*P-<)bK%O{4czwWHR?ySG=tiSH= z4MU0KIG|I?Xn%s%nQ%TyDS%?J?F}66kB#;WjabWWq@1xNokWdau#HTNj8jEdz+h}} zh~Hf}*L*NOni%T3D2|(aAnWPJ3&DGlU@`_UHyHIznQaOrEl zocuts^5LGR(-&>=u^C$v3&c-TU&Y60&QCJ}RGDTExOvy5ugwyRO`e~of@a`()cw7? z;H9aOW?3|?GlQ~xehIPKv)G~Br4uXHw|Cu;L)ptSEnB>;rhUHBfp>MLyiT9@z(wU0 zI+Sx(X64x4b=Ny^7G=hXPYoWQ>A*>CC~+vSG~@EzKQ&TW-1IlROzc z@cH%IgzuWh%)N8bMS|B61@k(h4w<&s=E9UC&V~A?!zFD7sEO2G?k6oWhgl9VVUfW} z(Fv#4eHazD6uW@BdK$WNF3IRx3W0trJ3Tyk zo&PBgiI~ovBvY4Ayk5k-`yunzA*N%E^mH6hTq9ycEU;bFLrfdCWnqUGfXN*VyFiDi z=Y^CDvP|!FN$+z>Kj4zy<&u8TCB4TbJ?@g;>5|^*h=Gf?k41v+DJ4xuDmJ0%(c!xLwVWVi*GCs8it-6oQ0q|CujJhmcfnh%L-qI06X!06S!tchS-g7>6+yJkjCy#e5--;Q@>J$uh*k~X9L&nqkivJ z_$1z`es}n+-@OVSPRcwu@!bzxhtN~x)_=1Lll^zTz&r6R1kO+YtycIBc<>bgM^`Wz z-0F8w;oB>~PW2n{S-&e3zAg{GYk_N$l|$@Szi%si(m8@t{eI}Pe!o=saIxgUiSPHo z(Vc({ZuMKeHo1SLa|tKDBH;Y&-?J6I9#Oax-xlE7WaSXM)$iR3-+m9iJABsfUWE@g z4?H;4?|$I?oL>TGCHrrW2j4W{{Pf@H3SXxO-%{Y}g`Og}{_9lu_IdCf^jW_{3SYMe z-xa|5>A!C(d~!TE?T_#Itlv)+zL-b-egmAJ{wrFS+`rP+&Z&Ntz&TwnKY}{Qdlah9 zcHpG(u&5r7K8?RBt_wKz{3o$rz{XT5ApQVw`H1N@Ws69kg7|6tRNNnwN#Wb-!S?~+WO)L{BeP$AuJAP~d@o=-h(+OK-ai3{ z=i!v_GE&t3+p-~PG@U2V)PDi&G!=I~aI#+}E4X3 z{Z+wH`4pUR)9}h_K6F&B9IsBeh?2kxy3uFwPb zUIm9;&4W`r?pJUn9=InIT)7ACrwXpx1NT=2Cy#fk-#HjB_-}{Vu)~()&Q8QeqcN`L z0~bO%?ca9%DDd`fgfX}hY#Z@PXB+X-((uNO96!E|_-D58Vr(1nqg3;>ZN!E3HrZh* zrs6a|)v^@dwWGAWzAw==g!xqQ?z-L>eWHzz^d&H9wR|KV>yD(Kuj23s)=uoxk0-iD`iAiVI}vHwQCitBHpst0H(SOn`}#(E>xKrY ze;VmSLYdwL$=tG&E-9_BH|x-iow2Tqn$c?miRfqqCA5}AiKsOkEv;&cj|}t;V*c;Y zU@A1(HNEKO_(+QVeM*8b$hU0JUPnv(G)D^==1Y^kL;mt=BPN6VZlfj>s{aWi=T!PW zkndCY*@m5bwHF&?4^QW}99RqYBR;Cg_C+4)LA)A2j93QpRdB5ocs!Y}EheuK^eX*E zMIXdf{+*iKWaOV}`6^O zi+x{{TMYaxUcW*cGs{|AOvpjJ75js&qw?B}`~^n-0>f7WthLeiG6dOPBmZnR4|;h` zC+qH|8h$_90QoLS06jSpmm$c`XA#Ix$OPzjY5I2dCdhwO^gWvXLN*3D`R;W#yF$}< z@b)GBE6ip$Y5KYBU7Fl!v~MoYf7C92F8i>CKb?JCle>-lr}Kq4WcDEL(!QwSdkp-1 zqrCanf*pb&h^LIVNirTUFnkLvH1rD@E!-hP5Q_!s`4_QwY5K*6elfcUH`X!)*%Cv) zgk7%bm$F+l`Al}VCNDGcFJt#>`W1$L1$#u(uQK$j*q1f^8biN^J*nx}8v3>Dhnjw! zp${|CSm0GB$%AOhpJ{(L;UzRj|`FeU+iF zVj)ex(a>*XXKDI#4E;H*T+?qd^qbflH2r2nznN{*^tFb*mbGa5IzwN_+BJQ|&_`I0 zrr&Dlx3XbHPu~dMZOF$JnLed_*^s|($UidVpF*ZXnyxXk*(~(eDA+P50bT%IkoP?+6m)W>}T_$8pKa;(n>8G-txNv?ASh^<6 z#=o~hrgJFGZXvlI54Oa&Qpg7(ufp~fLVg1Bhp;X4{|WL-kPiy|8>e9d0kpWfEMo_S zJcG+?*yl94js>R^+Ik)?V4K-qO|D}1YVtYkRZT8qn~B)YzmENjCKt0;glyGk1)Dq5 z!sjC@fN!H!LT={rT6Rdt^<0jyf7A4}tl%^&zlGn(;zDlY_)Y9#A=7hR0glJN3YnhE z3b2Cf{#jQ34lak;LqewK@&f8<)2K;I&~2BqU7e=w$yFsgLV z7-i&4V`aDH9|P_)6mJ?;@G?P9BVpaiMipF6@MPVWMm79T@Z<`Oq#Eukc(Pt@HGEm{ zWRNLER*NE|Wd^w@Gg^jx3Vx#~G+L&Yx>1xGEd!y77sW=)^y+LB<&xVC6)uV;9~??@ zxI`3Ns@Eo50$iHU8{)~f6!lLtr}Csi{y@^q?fjflif&1l=pX+nr4+kSw#s_KElqXQ z0{Et#Ug@xt*ij&QWgX zD7SM|*f}cf92Its3Oh%IouksuQEBI>v~yJ2IV$ZO@PR}2)4ReYI9!G8 z{#XJp3@#atqq#jpkyKPEawPhkfR+c9^9K*Z4N5c?2WNC3KF~FM38QFW7+m3v1F?(Z z#;cCT@W$PP@z&m<(H6XLuwO{H8|Zt!ENLr=Mw;8AJ6o%w4ToAQqSOTEVoOUzvHR$? zkW#MeY`wG#-sRY|a(ej?arZ!g8t-zhoSoCHitbtK!jWcme%t8ixNn`@r!DegykA+l zx>pF7VmNfhN2n9xBhEWN5;@eoqqQvBS{j{5QFUQAdOkubX@r#W5wgp3*Luz1G@9eQ z-_mT4+un_!L2d=4w8-NHs`KfddfF?~KmMtGoEFIU#@_7|sPT^uw@J3+)IzyZ`$vvn z8`m*|Lf}ZMWNU16w64F8ytPt72J_k7=gwzH=;X5|lZxT+3{&&A?cHym#rd1>2)}-1 zNa?nFC&KBvlO{k4&f$qP)USJ(%(^iR_b`pA_8%Bnt>)0p#EXpQ(9ML}iI7C)I;b))7(G5fM2M=pXC0%=0x@Lfo=lODV?vn?q_>&jE+jtRteV zBchQm-R*;XORhRe5)O;9j)?ZOM50@oBF+vHMIE3lJ?6LUap^=Lc&UH@eiw}&%@n#_&+t9^d zF{F#1aDFe(WJ)!;i=lBVmvuyxbwmW;OPVvLtRo_MddNB=s@-2!is!Xre$b_a5zc)Xa+rUC>RbE5vi!;uB zt|Jut#;@6mWgSzNvwK2I$dyrG8&Vq%J<7NTY+z;ENM(G;U}^5vudLRTD}ob&XQQ2wK#-YE~|A)elF*A2^V%x$)_j+0n%z>fc;;+LK>|^wFcgJeqrQ3Onr^r=6IwX-4(0 zdq3a7mgU6Qb8O`&|Cq~`H9Uzu!|tX$q2Amjb9wIS``A6}A76iBMs@H#7CzRSb6-xZ zql1O=jy?Lqi&rk@HDtVor;8e%{%FoS*gt>hhUKW^hx>At-MRJjM=e~92QI*IFFtq; z+OmYVWj}Ar%3iA_sLQ*`8qRK5#&sB1jx}c|^K-|q`=nzpKFa%6^yr+1Y2eN6U3rjt zl=he&Xr$2eu1@@{8cw3unA$zX5Jb5#wM zeLuc0c>BrT>$kl8)Qsif2CJ`G;mN1&?yY+0*p}SmEOd8ANndYA?sLbsOga8ZY*)uh zcxyxaFV#AEoScrjbmLd@sho~49DVCic5+G}@Sf_&s~?-OamLw?_dbRFTM#RGWOysp zo{YhI@N=qtsYmV6pOa2${ZR)sP~9j{9HI?}pkitq^pun?#?B!4DE~72Xp$iXl2_oT z$~1}6;rjr`u2Hbqf_EKaSubqzvNj;jpsci9n-x2h8=hFXnP*L?1}OZ*M;6zi{&K4lWpgCzlG{YS2RO0oXt7Q)k){EtKq z&Mm|mmue!sf@x`mDBZ7bursKtB9tJmopb5cxz_}*4cweVVjxfWfSM#Qh^fJBRCq1w z7Z#+rFPcp0hlHCjr1OcsLpk&Nl@EfgQYYL*n^Y`UM~VaB*cKk7l3 zW16-er+C1+z+r+mJ3un{K*gukqiKv?3{OfFqg?#w`OpNO?^NziOpY%HYXG||9a{9d z9nf-CKj-qRgV$h;Y?*Uu)11rsNWnaGPL17ts;O~v%BeAU(xFzz_IlLX9NTjREym!f zq{X=AwMFsi(4rQ0prH;=b63lwaIv7oen^LMnN4WfS72{lop;ToYjdv)UJvTpIir`( zxs>lb9BaJJIGoZcK&><7tDW;^yUr+_Q-)3*C2n~*B@W(nYROL|qAPGbqL!CkJ?Wa< zYlGMEPB=6&=Q7?2s{}oIKOK6t6UfR%-Ep|_;x)!WlMba?kk~}&z@Z4P z$5khZLwOVesCPcamvfN?P(Mw^rB0JUqRG9M!=J!)BEOVx5ptijq7vZNpvFZL<}C*hCXG+)r@#bbBg{;ZTLySTYuE=d zKwK2ea(9#^`(@aIIPSN7z+El$6uI&JNa3Ti90jL#{0g|`mYV-{+iz2Gz{&k~vA{d= z%>&MP%S9tJU3>=L=8Ql0TSNL#Y<-w`F*8tZn$q>8oeOKYT zTHu}dp7mM3Un_jL!1Lh5cM>=L>yC%#R<`5AvVDSU7B;Cq+P`h8I0yU~O19^l%9o+7vY`!9v>sK7h5cM>j)e)_Kf zIC=iVjVKRJd<%f{(|>&m-&;KRF7{c!%N0J{5WCjz8sO@Mo+7vYdtBiY4+

      o}Zrr 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

      s0sMq^4URs>57yAoz`wjg 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

      =q_P#rq9Q$8)VR6Z#e?I=9mp_PWFRWyoG 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

      Yx5*d+deK%unOcgc;9l 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

      q2!Ht^pW0# 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�tH;Tgrzg7_#dPD!QJ~xnNc;e^ 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 literal 424398 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

      pyL%dBD+Wa%m{Q&mL1h{g3Ym@1m* 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 Wzqji_$8f*%Z|Qeg{7idby8j11(j~$G diff --git a/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_GCC_ARM/startup_max32610.S b/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_GCC_ARM/startup_max32610.S index 227ecb3565d..31af57d3158 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_GCC_ARM/startup_max32610.S +++ b/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_GCC_ARM/startup_max32610.S @@ -51,7 +51,7 @@ #ifdef __STACK_SIZE .equ Stack_Size, __STACK_SIZE #else - .equ Stack_Size, 0x00001000 + .equ Stack_Size, 0x00000800 #endif .globl __StackTop .globl __StackLimit @@ -66,7 +66,7 @@ __StackTop: #ifdef __HEAP_SIZE .equ Heap_Size, __HEAP_SIZE #else - .equ Heap_Size, 0x00004000 + .equ Heap_Size, 0x00003000 #endif .globl __HeapBase .globl __HeapLimit diff --git a/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_IAR/MAX32610.icf b/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_IAR/MAX32610.icf index 3e0cd5e85f0..96d5c1555b1 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_IAR/MAX32610.icf +++ b/targets/TARGET_Maxim/TARGET_MAX32610/device/TOOLCHAIN_IAR/MAX32610.icf @@ -15,8 +15,8 @@ define region ROM_region = mem:[from __region_ROM_start__ to __region_ROM define region RAM_region = mem:[from __region_RAM_start__ to __region_RAM_end__]; /* Stack and Heap */ -define symbol __size_cstack__ = 0x1000; -define symbol __size_heap__ = 0x4000; +define symbol __size_cstack__ = 0x0800; +define symbol __size_heap__ = 0x3000; define block CSTACK with alignment = 8, size = __size_cstack__ { }; define block HEAP with alignment = 8, size = __size_heap__ { }; From 21ab8682a66684739634eec799dddace8ea68b5b Mon Sep 17 00:00:00 2001 From: Jeremy Brodt Date: Wed, 12 Oct 2016 09:07:03 -0500 Subject: [PATCH 18/89] Reduced stack/heap size due to mbed test failures. --- .../device/TOOLCHAIN_GCC_ARM/startup_max32600.S | 4 ++-- .../TARGET_MAX32600/device/TOOLCHAIN_IAR/MAX32600.icf | 4 ++-- .../device/TOOLCHAIN_GCC_ARM/startup_max32620.S | 2 +- .../TARGET_MAX32620/device/TOOLCHAIN_IAR/MAX32620.icf | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_GCC_ARM/startup_max32600.S b/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_GCC_ARM/startup_max32600.S index 227ecb3565d..31af57d3158 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_GCC_ARM/startup_max32600.S +++ b/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_GCC_ARM/startup_max32600.S @@ -51,7 +51,7 @@ #ifdef __STACK_SIZE .equ Stack_Size, __STACK_SIZE #else - .equ Stack_Size, 0x00001000 + .equ Stack_Size, 0x00000800 #endif .globl __StackTop .globl __StackLimit @@ -66,7 +66,7 @@ __StackTop: #ifdef __HEAP_SIZE .equ Heap_Size, __HEAP_SIZE #else - .equ Heap_Size, 0x00004000 + .equ Heap_Size, 0x00003000 #endif .globl __HeapBase .globl __HeapLimit diff --git a/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_IAR/MAX32600.icf b/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_IAR/MAX32600.icf index 3e0cd5e85f0..96d5c1555b1 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_IAR/MAX32600.icf +++ b/targets/TARGET_Maxim/TARGET_MAX32600/device/TOOLCHAIN_IAR/MAX32600.icf @@ -15,8 +15,8 @@ define region ROM_region = mem:[from __region_ROM_start__ to __region_ROM define region RAM_region = mem:[from __region_RAM_start__ to __region_RAM_end__]; /* Stack and Heap */ -define symbol __size_cstack__ = 0x1000; -define symbol __size_heap__ = 0x4000; +define symbol __size_cstack__ = 0x0800; +define symbol __size_heap__ = 0x3000; define block CSTACK with alignment = 8, size = __size_cstack__ { }; define block HEAP with alignment = 8, size = __size_heap__ { }; diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_GCC_ARM/startup_max32620.S b/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_GCC_ARM/startup_max32620.S index 12006b3247b..d844878c8b7 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_GCC_ARM/startup_max32620.S +++ b/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_GCC_ARM/startup_max32620.S @@ -51,7 +51,7 @@ #ifdef __STACK_SIZE .equ Stack_Size, __STACK_SIZE #else - .equ Stack_Size, 0x00002000 + .equ Stack_Size, 0x00001000 #endif .globl __StackTop .globl __StackLimit diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_IAR/MAX32620.icf b/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_IAR/MAX32620.icf index 203c221868c..7edf37819cb 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_IAR/MAX32620.icf +++ b/targets/TARGET_Maxim/TARGET_MAX32620/device/TOOLCHAIN_IAR/MAX32620.icf @@ -15,7 +15,7 @@ define region ROM_region = mem:[from __region_ROM_start__ to __region_ROM define region RAM_region = mem:[from __region_RAM_start__ to __region_RAM_end__]; /* Stack and Heap */ -define symbol __size_cstack__ = 0x2000; +define symbol __size_cstack__ = 0x1000; define symbol __size_heap__ = 0x4000; define block CSTACK with alignment = 8, size = __size_cstack__ { }; define block HEAP with alignment = 8, size = __size_heap__ { }; From 69c2feb512ea00b00183f4d44d82d698fd9de7a4 Mon Sep 17 00:00:00 2001 From: ccli8 Date: Wed, 3 Aug 2016 14:06:44 +0800 Subject: [PATCH 19/89] Add NUC472 support for USBH --- .../USBHost/USBHost/USBHostTypes.h | 3 + .../USBHost/USBHost/USBHALHost_NUC472.cpp | 361 ++++++++++++++++++ .../device/StdDriver/nuc472_clk.h | 4 +- 3 files changed, 366 insertions(+), 2 deletions(-) create mode 100644 libraries/USBHost/USBHost/USBHALHost_NUC472.cpp diff --git a/features/unsupported/USBHost/USBHost/USBHostTypes.h b/features/unsupported/USBHost/USBHost/USBHostTypes.h index 23daefaf55b..5d9dd22968f 100644 --- a/features/unsupported/USBHost/USBHost/USBHostTypes.h +++ b/features/unsupported/USBHost/USBHost/USBHostTypes.h @@ -72,7 +72,10 @@ enum ENDPOINT_TYPE { #define OR_CONTROL_CLE 0x00000010 #define OR_CONTROL_BLE 0x00000020 #define OR_CONTROL_HCFS 0x000000C0 +#define OR_CONTROL_HC_RSET 0x00000000 +#define OR_CONTROL_HC_RES 0x00000040 #define OR_CONTROL_HC_OPER 0x00000080 +#define OR_CONTROL_HC_SUSP 0x000000C0 // ----------------- HcCommandStatus Register ----------------- #define OR_CMD_STATUS_HCR 0x00000001 #define OR_CMD_STATUS_CLF 0x00000002 diff --git a/libraries/USBHost/USBHost/USBHALHost_NUC472.cpp b/libraries/USBHost/USBHost/USBHALHost_NUC472.cpp new file mode 100644 index 00000000000..e0fdca2c170 --- /dev/null +++ b/libraries/USBHost/USBHost/USBHALHost_NUC472.cpp @@ -0,0 +1,361 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined(TARGET_NUC472) + +#include "mbed.h" +#include "USBHALHost.h" +#include "dbg.h" +#include "pinmap.h" + +#define HCCA_SIZE sizeof(HCCA) +#define ED_SIZE sizeof(HCED) +#define TD_SIZE sizeof(HCTD) + +#define TOTAL_SIZE (HCCA_SIZE + (MAX_ENDPOINT*ED_SIZE) + (MAX_TD*TD_SIZE)) + +static volatile MBED_ALIGN(256) uint8_t usb_buf[TOTAL_SIZE]; // 256 bytes aligned! + +USBHALHost * USBHALHost::instHost; + +USBHALHost::USBHALHost() +{ + instHost = this; + memInit(); + memset((void*)usb_hcca, 0, HCCA_SIZE); + for (int i = 0; i < MAX_ENDPOINT; i++) { + edBufAlloc[i] = false; + } + for (int i = 0; i < MAX_TD; i++) { + tdBufAlloc[i] = false; + } +} + +void USBHALHost::init() +{ + // Unlock protected registers + SYS_UnlockReg(); + + // NOTE: Configure as OTG device first; otherwise, program will trap in wait loop CLK_STATUS_PLL2STB_Msk below. + SYS->USBPHY = SYS_USBPHY_LDO33EN_Msk | SYS_USBPHY_USBROLE_ON_THE_GO; + + // NOTE: Enable OTG here; otherwise, program will trap in wait loop CLK_STATUS_PLL2STB_Msk below. + CLK_EnableModuleClock(OTG_MODULE); + OTG->PHYCTL = (OTG->PHYCTL | OTG_PHYCTL_OTGPHYEN_Msk) & ~OTG_PHYCTL_IDDETEN_Msk; + //OTG->CTL |= OTG_CTL_OTGEN_Msk | OTG_CTL_BUSREQ_Msk; + + // PB.0: USB0 external VBUS regulator status + // USB_OC + // PB.1: USB0 external VBUS regulator enable + // NCT3520U low active (USB_PWR_EN) + pin_function(PB_0, SYS_GPB_MFPL_PB0MFP_USB0_OTG5V_ST); + pin_function(PB_1, SYS_GPB_MFPL_PB1MFP_USB0_OTG5V_EN); + + // PB.2: USB1 differential signal D- + // PB.3: USB1 differential signal D+ + //pin_function(PB_2, SYS_GPB_MFPL_PB2MFP_USB1_D_N); + //pin_function(PB_3, SYS_GPB_MFPL_PB3MFP_USB1_D_P); + + // Set PB.4 output high to enable USB power + //gpio_t gpio; + //gpio_init_out_ex(&gpio, PB_4, 1); + + // NOTE: + // 1. Set USBH clock source to PLL2; otherwise, program will trap in wait loop CLK_STATUS_PLL2STB_Msk below. + // 2. Don't set CLK_PLL2CTL_PLL2CKEN_Msk. USBH will work abnormally with it enabled. + CLK->CLKSEL0 &= ~CLK_CLKSEL0_USBHSEL_Msk; + // Enable PLL2, 480 MHz / 2 / (1+4) => 48 MHz output + CLK->PLL2CTL = /*CLK_PLL2CTL_PLL2CKEN_Msk | */ (4 << CLK_PLL2CTL_PLL2DIV_Pos); + // Wait PLL2 stable ... + while (!(CLK->STATUS & CLK_STATUS_PLL2STB_Msk)); + + // Select USB Host clock source from PLL2, clock divied by 1 + CLK_SetModuleClock(USBH_MODULE, CLK_CLKSEL0_USBHSEL_PLL2, CLK_CLKDIV0_USB(1)); + + // Enable USB Host clock + CLK_EnableModuleClock(USBH_MODULE); + + // Lock protected registers + SYS_LockReg(); + + // Overcurrent flag is high active + USBH->HcMiscControl &= ~USBH_HcMiscControl_OCAL_Msk; + + // Disable HC interrupts + USBH->HcInterruptDisable = OR_INTR_ENABLE_MIE; + + // Needed by some controllers + USBH->HcControl = 0; + + // Software reset + USBH->HcCommandStatus = OR_CMD_STATUS_HCR; + while (USBH->HcCommandStatus & OR_CMD_STATUS_HCR); + + // Put HC in reset state + USBH->HcControl = (USBH->HcControl & ~OR_CONTROL_HCFS) | OR_CONTROL_HC_RSET; + // HCD must wait 10ms for HC reset complete + wait_ms(100); + + USBH->HcControlHeadED = 0; // Initialize Control ED list head to 0 + USBH->HcBulkHeadED = 0; // Initialize Bulk ED list head to 0 + USBH->HcHCCA = (uint32_t) usb_hcca; + + USBH->HcFmInterval = DEFAULT_FMINTERVAL; // Frame interval = 12000 - 1 + // MPS = 10,104 + USBH->HcPeriodicStart = FI * 90 / 100; // 90% of frame interval + USBH->HcLSThreshold = 0x628; // Low speed threshold + + // Put HC in operational state + USBH->HcControl = (USBH->HcControl & (~OR_CONTROL_HCFS)) | OR_CONTROL_HC_OPER; + + // FIXME: Ports are power switched. All ports are powered at the same time. Doesn't match BSP sample. + USBH->HcRhDescriptorA = USBH->HcRhDescriptorA & ~USBH_HcRhDescriptorA_NPS_Msk & ~USBH_HcRhDescriptorA_PSM_Msk; + // Issue SetGlobalPower command + USBH->HcRhStatus = USBH_HcRhStatus_LPSC_Msk; + // Power On To Power Good Time, in 2 ms units + wait_ms(((USBH->HcRhDescriptorA & USBH_HcRhDescriptorA_POTPGT_Msk) >> USBH_HcRhDescriptorA_POTPGT_Pos) * 2); + + // Clear Interrrupt Status + USBH->HcInterruptStatus |= USBH->HcInterruptStatus; + // Enable interrupts we care about + USBH->HcInterruptEnable = OR_INTR_ENABLE_MIE | OR_INTR_ENABLE_WDH | OR_INTR_ENABLE_RHSC; + + + // Unlock protected registers + SYS_UnlockReg(); + + // NOTE: Configure as USB host after USBH init above; otherwise system will crash. + SYS->USBPHY = (SYS->USBPHY & ~SYS_USBPHY_USBROLE_Msk) | SYS_USBPHY_USBROLE_STD_USBH; + + // Lock protected registers + SYS_LockReg(); + + NVIC_SetVector(USBH_IRQn, (uint32_t)(_usbisr)); + NVIC_EnableIRQ(USBH_IRQn); + + // Check for any connected devices + if (USBH->HcRhPortStatus[0] & OR_RH_PORT_CCS) { + // Device connected + wait_ms(150); + deviceConnected(0, 1, USBH->HcRhPortStatus[0] & OR_RH_PORT_LSDA); + } +} + +uint32_t USBHALHost::controlHeadED() +{ + return USBH->HcControlHeadED; +} + +uint32_t USBHALHost::bulkHeadED() +{ + return USBH->HcBulkHeadED; +} + +uint32_t USBHALHost::interruptHeadED() +{ + // FIXME: Only support one INT ED? + return usb_hcca->IntTable[0]; +} + +void USBHALHost::updateBulkHeadED(uint32_t addr) +{ + USBH->HcBulkHeadED = addr; +} + + +void USBHALHost::updateControlHeadED(uint32_t addr) +{ + USBH->HcControlHeadED = addr; +} + +void USBHALHost::updateInterruptHeadED(uint32_t addr) +{ + // FIXME: Only support one INT ED? + usb_hcca->IntTable[0] = addr; +} + + +void USBHALHost::enableList(ENDPOINT_TYPE type) +{ + switch(type) { + case CONTROL_ENDPOINT: + USBH->HcCommandStatus = OR_CMD_STATUS_CLF; + USBH->HcControl |= OR_CONTROL_CLE; + break; + case ISOCHRONOUS_ENDPOINT: + // FIXME + break; + case BULK_ENDPOINT: + USBH->HcCommandStatus = OR_CMD_STATUS_BLF; + USBH->HcControl |= OR_CONTROL_BLE; + break; + case INTERRUPT_ENDPOINT: + USBH->HcControl |= OR_CONTROL_PLE; + break; + } +} + + +bool USBHALHost::disableList(ENDPOINT_TYPE type) +{ + switch(type) { + case CONTROL_ENDPOINT: + if(USBH->HcControl & OR_CONTROL_CLE) { + USBH->HcControl &= ~OR_CONTROL_CLE; + return true; + } + return false; + case ISOCHRONOUS_ENDPOINT: + // FIXME + return false; + case BULK_ENDPOINT: + if(USBH->HcControl & OR_CONTROL_BLE){ + USBH->HcControl &= ~OR_CONTROL_BLE; + return true; + } + return false; + case INTERRUPT_ENDPOINT: + if(USBH->HcControl & OR_CONTROL_PLE) { + USBH->HcControl &= ~OR_CONTROL_PLE; + return true; + } + return false; + } + return false; +} + + +void USBHALHost::memInit() +{ + usb_hcca = (volatile HCCA *)usb_buf; + usb_edBuf = usb_buf + HCCA_SIZE; + usb_tdBuf = usb_buf + HCCA_SIZE + (MAX_ENDPOINT*ED_SIZE); +} + +volatile uint8_t * USBHALHost::getED() +{ + for (int i = 0; i < MAX_ENDPOINT; i++) { + if ( !edBufAlloc[i] ) { + edBufAlloc[i] = true; + return (volatile uint8_t *)(usb_edBuf + i*ED_SIZE); + } + } + perror("Could not allocate ED\r\n"); + return NULL; //Could not alloc ED +} + +volatile uint8_t * USBHALHost::getTD() +{ + int i; + for (i = 0; i < MAX_TD; i++) { + if ( !tdBufAlloc[i] ) { + tdBufAlloc[i] = true; + return (volatile uint8_t *)(usb_tdBuf + i*TD_SIZE); + } + } + perror("Could not allocate TD\r\n"); + return NULL; //Could not alloc TD +} + + +void USBHALHost::freeED(volatile uint8_t * ed) +{ + int i; + i = (ed - usb_edBuf) / ED_SIZE; + edBufAlloc[i] = false; +} + +void USBHALHost::freeTD(volatile uint8_t * td) +{ + int i; + i = (td - usb_tdBuf) / TD_SIZE; + tdBufAlloc[i] = false; +} + + +void USBHALHost::resetRootHub() +{ + // Reset port1 + USBH->HcRhPortStatus[0] = OR_RH_PORT_PRS; + while (USBH->HcRhPortStatus[0] & OR_RH_PORT_PRS); + USBH->HcRhPortStatus[0] = OR_RH_PORT_PRSC; +} + + +void USBHALHost::_usbisr(void) +{ + if (instHost) { + instHost->UsbIrqhandler(); + } +} + +void USBHALHost::UsbIrqhandler() +{ + uint32_t ints = USBH->HcInterruptStatus; + + // Root hub status change interrupt + if (ints & OR_INTR_STATUS_RHSC) { + uint32_t ints_roothub = USBH->HcRhStatus; + uint32_t ints_port1 = USBH->HcRhPortStatus[0]; + + if (ints_port1 & OR_RH_PORT_CSC) { + if (ints_roothub & OR_RH_STATUS_DRWE) { + // When DRWE is on, Connect Status Change means a remote wakeup event. + } else { + if (ints_port1 & OR_RH_PORT_CCS) { + // Root device connected + + // wait 150ms to avoid bounce + wait_ms(150); + + //Hub 0 (root hub), Port 1 (count starts at 1), Low or High speed + deviceConnected(0, 1, ints_port1 & OR_RH_PORT_LSDA); + } else { + // Root device disconnected + + if (!(ints & OR_INTR_STATUS_WDH)) { + usb_hcca->DoneHead = 0; + } + + // wait 200ms to avoid bounce + wait_ms(200); + + deviceDisconnected(0, 1, NULL, usb_hcca->DoneHead & 0xFFFFFFFE); + + if (ints & OR_INTR_STATUS_WDH) { + usb_hcca->DoneHead = 0; + USBH->HcInterruptStatus = OR_INTR_STATUS_WDH; + } + } + } + USBH->HcRhPortStatus[0] = OR_RH_PORT_CSC; + } + + // Reset completed + if (ints_port1 & OR_RH_PORT_PRSC) { + USBH->HcRhPortStatus[0] = OR_RH_PORT_PRSC; + } + + USBH->HcInterruptStatus = OR_INTR_STATUS_RHSC; + } + + // Writeback Done Head interrupt + if (ints & OR_INTR_STATUS_WDH) { + transferCompleted(usb_hcca->DoneHead & 0xFFFFFFFE); + USBH->HcInterruptStatus = OR_INTR_STATUS_WDH; + } +} +#endif diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/device/StdDriver/nuc472_clk.h b/targets/TARGET_NUVOTON/TARGET_NUC472/device/StdDriver/nuc472_clk.h index df51c2159f7..23ccf398226 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/device/StdDriver/nuc472_clk.h +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/device/StdDriver/nuc472_clk.h @@ -92,8 +92,8 @@ extern "C" #define CLK_CLKSEL0_PCLKSEL_HCLK (0x00UL< Date: Fri, 5 Aug 2016 14:27:42 +0800 Subject: [PATCH 20/89] Remove sal-stack-lwip.a from IAR linker configuration file Locate *lwip_* in XRAM to fix IRAM OOM --- .../TARGET_NUC472/device/TOOLCHAIN_IAR/NUC472_442.icf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/device/TOOLCHAIN_IAR/NUC472_442.icf b/targets/TARGET_NUVOTON/TARGET_NUC472/device/TOOLCHAIN_IAR/NUC472_442.icf index 9addb2df098..479e48eef88 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/device/TOOLCHAIN_IAR/NUC472_442.icf +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/device/TOOLCHAIN_IAR/NUC472_442.icf @@ -26,7 +26,7 @@ define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; /* NOTE: Vector table base requires to be aligned to the power of vector table size. Give a safe value here. */ define block IRAMVEC with alignment = 1024, size = 4 * (16 + 142) { }; /* Move non-critical libraries to external SRAM while internal SRAM is insufficient. */ -define block XRAM_NC with alignment = 8 { readwrite object sal-stack-lwip.a }; +define block XRAM_NC with alignment = 8 { zeroinit object *lwip_* }; initialize by copy { readwrite }; From f90c6ebea0ccb02ae630c78e22d2152a78e9f213 Mon Sep 17 00:00:00 2001 From: ccli8 Date: Tue, 9 Aug 2016 09:58:33 +0800 Subject: [PATCH 21/89] Support NUMAKER_PFM_M453 --- platform/retarget.cpp | 2 +- .../TARGET_NUMAKER_PFM_M453/PeripheralNames.h | 117 + .../TARGET_NUMAKER_PFM_M453/PeripheralPins.c | 361 + .../TARGET_NUMAKER_PFM_M453/PeripheralPins.h | 62 + .../TARGET_NUMAKER_PFM_M453/PinNames.h | 113 + .../TARGET_NUMAKER_PFM_M453/PortNames.h | 36 + .../TARGET_NUMAKER_PFM_M453/device.h | 65 + .../TARGET_NUMAKER_PFM_M453/mbed_overrides.c | 83 + .../TARGET_NUMAKER_PFM_M453/objects.h | 132 + .../TARGET_NUVOTON/TARGET_M451/analogin_api.c | 160 + targets/TARGET_NUVOTON/TARGET_M451/dma.h | 40 + targets/TARGET_NUVOTON/TARGET_M451/dma_api.c | 178 + targets/TARGET_NUVOTON/TARGET_M451/gpio_api.c | 86 + .../TARGET_NUVOTON/TARGET_M451/gpio_irq_api.c | 205 + .../TARGET_NUVOTON/TARGET_M451/gpio_object.h | 57 + targets/TARGET_NUVOTON/TARGET_M451/i2c_api.c | 1025 + .../TARGET_NUVOTON/TARGET_M451/lp_ticker.c | 208 + targets/TARGET_NUVOTON/TARGET_M451/pinmap.c | 83 + targets/TARGET_NUVOTON/TARGET_M451/port_api.c | 99 + .../TARGET_NUVOTON/TARGET_M451/pwmout_api.c | 204 + targets/TARGET_NUVOTON/TARGET_M451/rtc_api.c | 121 + .../TARGET_NUVOTON/TARGET_M451/serial_api.c | 1053 + targets/TARGET_NUVOTON/TARGET_M451/sleep.c | 118 + targets/TARGET_NUVOTON/TARGET_M451/spi_api.c | 775 + .../TARGET_NUVOTON/TARGET_M451/us_ticker.c | 268 + targets/TARGET_NUVOTON/mbed_rtx.h | 36 + .../TARGET_NUVOTON/TARGET_M451/M451Series.h | 17150 ++++++++++++++++ .../TARGET_M451/StdDriver/m451_acmp.c | 84 + .../TARGET_M451/StdDriver/m451_acmp.h | 333 + .../TARGET_M451/StdDriver/m451_can.c | 1004 + .../TARGET_M451/StdDriver/m451_can.h | 175 + .../TARGET_M451/StdDriver/m451_clk.c | 751 + .../TARGET_M451/StdDriver/m451_clk.h | 447 + .../TARGET_M451/StdDriver/m451_crc.c | 93 + .../TARGET_M451/StdDriver/m451_crc.h | 112 + .../TARGET_M451/StdDriver/m451_dac.c | 94 + .../TARGET_M451/StdDriver/m451_dac.h | 245 + .../TARGET_M451/StdDriver/m451_eadc.c | 159 + .../TARGET_M451/StdDriver/m451_eadc.h | 569 + .../TARGET_M451/StdDriver/m451_ebi.c | 178 + .../TARGET_M451/StdDriver/m451_ebi.h | 235 + .../TARGET_M451/StdDriver/m451_fmc.c | 320 + .../TARGET_M451/StdDriver/m451_fmc.h | 605 + .../TARGET_M451/StdDriver/m451_gpio.c | 102 + .../TARGET_M451/StdDriver/m451_gpio.h | 439 + .../TARGET_M451/StdDriver/m451_i2c.c | 612 + .../TARGET_M451/StdDriver/m451_i2c.h | 415 + .../TARGET_M451/StdDriver/m451_otg.h | 260 + .../TARGET_M451/StdDriver/m451_pdma.c | 389 + .../TARGET_M451/StdDriver/m451_pdma.h | 300 + .../TARGET_M451/StdDriver/m451_pwm.c | 1375 ++ .../TARGET_M451/StdDriver/m451_pwm.h | 560 + .../TARGET_M451/StdDriver/m451_rtc.c | 789 + .../TARGET_M451/StdDriver/m451_rtc.h | 272 + .../TARGET_M451/StdDriver/m451_sc.c | 299 + .../TARGET_M451/StdDriver/m451_sc.h | 269 + .../TARGET_M451/StdDriver/m451_scuart.c | 223 + .../TARGET_M451/StdDriver/m451_scuart.h | 279 + .../TARGET_M451/StdDriver/m451_spi.c | 1154 ++ .../TARGET_M451/StdDriver/m451_spi.h | 630 + .../TARGET_M451/StdDriver/m451_sys.c | 213 + .../TARGET_M451/StdDriver/m451_sys.h | 970 + .../TARGET_M451/StdDriver/m451_timer.c | 292 + .../TARGET_M451/StdDriver/m451_timer.h | 415 + .../TARGET_M451/StdDriver/m451_tk.c | 265 + .../TARGET_M451/StdDriver/m451_tk.h | 302 + .../TARGET_M451/StdDriver/m451_uart.c | 512 + .../TARGET_M451/StdDriver/m451_uart.h | 460 + .../TARGET_M451/StdDriver/m451_usbd.c | 728 + .../TARGET_M451/StdDriver/m451_usbd.h | 664 + .../TARGET_M451/StdDriver/m451_wdt.c | 71 + .../TARGET_M451/StdDriver/m451_wdt.h | 201 + .../TARGET_M451/StdDriver/m451_wwdt.c | 71 + .../TARGET_M451/StdDriver/m451_wwdt.h | 148 + .../TOOLCHAIN_ARM_MICRO/M453.sct | 28 + .../TOOLCHAIN_ARM_MICRO/sys.cpp | 28 + .../TOOLCHAIN_ARM_STD/M453.sct | 28 + .../TOOLCHAIN_ARM_STD/sys.cpp | 28 + .../TOOLCHAIN_GCC_ARM/M453.ld | 255 + .../TOOLCHAIN_GCC_ARM/retarget.c | 35 + .../TOOLCHAIN_IAR/M453.icf | 36 + .../startup_M451Series.c | 326 + .../cmsis/TARGET_NUVOTON/TARGET_M451/cmsis.h | 33 + .../TARGET_NUVOTON/TARGET_M451/cmsis_nvic.c | 39 + .../TARGET_NUVOTON/TARGET_M451/cmsis_nvic.h | 63 + .../TARGET_M451/system_M451Series.c | 111 + .../TARGET_M451/system_M451Series.h | 75 + targets/targets.json | 13 +- 88 files changed, 43016 insertions(+), 2 deletions(-) create mode 100644 targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PeripheralNames.h create mode 100644 targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PeripheralPins.c create mode 100644 targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PeripheralPins.h create mode 100644 targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PinNames.h create mode 100644 targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PortNames.h create mode 100644 targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/device.h create mode 100644 targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/mbed_overrides.c create mode 100644 targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/objects.h create mode 100644 targets/TARGET_NUVOTON/TARGET_M451/analogin_api.c create mode 100644 targets/TARGET_NUVOTON/TARGET_M451/dma.h create mode 100644 targets/TARGET_NUVOTON/TARGET_M451/dma_api.c create mode 100644 targets/TARGET_NUVOTON/TARGET_M451/gpio_api.c create mode 100644 targets/TARGET_NUVOTON/TARGET_M451/gpio_irq_api.c create mode 100644 targets/TARGET_NUVOTON/TARGET_M451/gpio_object.h create mode 100644 targets/TARGET_NUVOTON/TARGET_M451/i2c_api.c create mode 100644 targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c create mode 100644 targets/TARGET_NUVOTON/TARGET_M451/pinmap.c create mode 100644 targets/TARGET_NUVOTON/TARGET_M451/port_api.c create mode 100644 targets/TARGET_NUVOTON/TARGET_M451/pwmout_api.c create mode 100644 targets/TARGET_NUVOTON/TARGET_M451/rtc_api.c create mode 100644 targets/TARGET_NUVOTON/TARGET_M451/serial_api.c create mode 100644 targets/TARGET_NUVOTON/TARGET_M451/sleep.c create mode 100644 targets/TARGET_NUVOTON/TARGET_M451/spi_api.c create mode 100644 targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/M451Series.h create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_acmp.c create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_acmp.h create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_can.c create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_can.h create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_clk.c create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_clk.h create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_crc.c create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_crc.h create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_dac.c create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_dac.h create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_eadc.c create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_eadc.h create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_ebi.c create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_ebi.h create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_fmc.c create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_fmc.h create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_gpio.c create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_gpio.h create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_i2c.c create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_i2c.h create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_otg.h create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_pdma.c create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_pdma.h create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_pwm.c create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_pwm.h create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_rtc.c create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_rtc.h create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_sc.c create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_sc.h create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_scuart.c create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_scuart.h create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_spi.c create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_spi.h create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_sys.c create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_sys.h create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_timer.c create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_timer.h create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_tk.c create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_tk.h create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_uart.c create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_uart.h create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_usbd.c create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_usbd.h create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_wdt.c create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_wdt.h create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_wwdt.c create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_wwdt.h create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_ARM_MICRO/M453.sct create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_ARM_MICRO/sys.cpp create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_ARM_STD/M453.sct create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_ARM_STD/sys.cpp create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_GCC_ARM/M453.ld create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_GCC_ARM/retarget.c create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_IAR/M453.icf create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/startup_M451Series.c create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/cmsis.h create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/cmsis_nvic.c create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/cmsis_nvic.h create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/system_M451Series.c create mode 100644 targets/cmsis/TARGET_NUVOTON/TARGET_M451/system_M451Series.h diff --git a/platform/retarget.cpp b/platform/retarget.cpp index 3a1d3aef9ec..2bc1027139a 100644 --- a/platform/retarget.cpp +++ b/platform/retarget.cpp @@ -573,7 +573,7 @@ extern "C" int errno; register unsigned char * stack_ptr __asm ("sp"); // Dynamic memory allocation related syscall. -#if defined(TARGET_NUMAKER_PFM_NUC472) +#if defined(TARGET_NUMAKER_PFM_NUC472) || defined(TARGET_NUMAKER_PFM_M453) // Overwrite _sbrk() to support two region model. extern "C" void *__wrap__sbrk(int incr); extern "C" caddr_t _sbrk(int incr) { diff --git a/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PeripheralNames.h b/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PeripheralNames.h new file mode 100644 index 00000000000..c08e2cef5a0 --- /dev/null +++ b/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PeripheralNames.h @@ -0,0 +1,117 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MBED_PERIPHERALNAMES_H +#define MBED_PERIPHERALNAMES_H + +#include "cmsis.h" + +#ifdef __cplusplus +extern "C" { +#endif + +// NOTE: TIMER0_BASE=(APBPERIPH_BASE + 0x10000) +// TIMER1_BASE=(APBPERIPH_BASE + 0x10020) +#define NU_MODNAME(MODBASE, SUBINDEX) ((MODBASE) | (SUBINDEX)) +#define NU_MODBASE(MODNAME) ((MODNAME) & 0xFFFFFFE0) +#define NU_MODSUBINDEX(MODNAME) ((MODNAME) & 0x0000001F) + +#if 0 +typedef enum { + GPIO_A = (int) NU_MODNAME(GPIOA_BASE, 0), + GPIO_B = (int) NU_MODNAME(GPIOB_BASE, 0), + GPIO_C = (int) NU_MODNAME(GPIOC_BASE, 0), + GPIO_D = (int) NU_MODNAME(GPIOD_BASE, 0), + GPIO_E = (int) NU_MODNAME(GPIOE_BASE, 0), + GPIO_F = (int) NU_MODNAME(GPIOF_BASE, 0) +} GPIOName; +#endif + +typedef enum { + ADC_0_0 = (int) NU_MODNAME(EADC0_BASE, 0), + ADC_0_1 = (int) NU_MODNAME(EADC0_BASE, 1), + ADC_0_2 = (int) NU_MODNAME(EADC0_BASE, 2), + ADC_0_3 = (int) NU_MODNAME(EADC0_BASE, 3), + ADC_0_4 = (int) NU_MODNAME(EADC0_BASE, 4), + ADC_0_5 = (int) NU_MODNAME(EADC0_BASE, 5), + ADC_0_6 = (int) NU_MODNAME(EADC0_BASE, 6), + ADC_0_7 = (int) NU_MODNAME(EADC0_BASE, 7), + ADC_0_8 = (int) NU_MODNAME(EADC0_BASE, 8), + ADC_0_9 = (int) NU_MODNAME(EADC0_BASE, 9), + ADC_0_10 = (int) NU_MODNAME(EADC0_BASE, 10), + ADC_0_11 = (int) NU_MODNAME(EADC0_BASE, 11), + ADC_0_12 = (int) NU_MODNAME(EADC0_BASE, 12), + ADC_0_13 = (int) NU_MODNAME(EADC0_BASE, 13), + ADC_0_14 = (int) NU_MODNAME(EADC0_BASE, 14), + ADC_0_15 = (int) NU_MODNAME(EADC0_BASE, 15) +} ADCName; + +typedef enum { + UART_0 = (int) NU_MODNAME(UART0_BASE, 0), + UART_1 = (int) NU_MODNAME(UART1_BASE, 0), + UART_2 = (int) NU_MODNAME(UART2_BASE, 0), + UART_3 = (int) NU_MODNAME(UART3_BASE, 0), + // FIXME: board-specific + STDIO_UART = UART_3 +} UARTName; + +typedef enum { + SPI_0 = (int) NU_MODNAME(SPI0_BASE, 0), + SPI_1 = (int) NU_MODNAME(SPI1_BASE, 0), + SPI_2 = (int) NU_MODNAME(SPI2_BASE, 0) +} SPIName; + +typedef enum { + I2C_0 = (int) NU_MODNAME(I2C0_BASE, 0), + I2C_1 = (int) NU_MODNAME(I2C1_BASE, 0) +} I2CName; + +typedef enum { + PWM_0_0 = (int) NU_MODNAME(PWM0_BASE, 0), + PWM_0_1 = (int) NU_MODNAME(PWM0_BASE, 1), + PWM_0_2 = (int) NU_MODNAME(PWM0_BASE, 2), + PWM_0_3 = (int) NU_MODNAME(PWM0_BASE, 3), + PWM_0_4 = (int) NU_MODNAME(PWM0_BASE, 4), + PWM_0_5 = (int) NU_MODNAME(PWM0_BASE, 5), + + PWM_1_0 = (int) NU_MODNAME(PWM1_BASE, 0), + PWM_1_1 = (int) NU_MODNAME(PWM1_BASE, 1), + PWM_1_2 = (int) NU_MODNAME(PWM1_BASE, 2), + PWM_1_3 = (int) NU_MODNAME(PWM1_BASE, 3), + PWM_1_4 = (int) NU_MODNAME(PWM1_BASE, 4), + PWM_1_5 = (int) NU_MODNAME(PWM1_BASE, 5) +} PWMName; + +typedef enum { + TIMER_0 = (int) NU_MODNAME(TMR01_BASE, 0), + TIMER_1 = (int) NU_MODNAME(TMR01_BASE + 0x20, 0), + TIMER_2 = (int) NU_MODNAME(TMR23_BASE, 0), + TIMER_3 = (int) NU_MODNAME(TMR23_BASE + 0x20, 0), +} TIMERName; + +typedef enum { + RTC_0 = (int) NU_MODNAME(RTC_BASE, 0) +} RTCName; + +typedef enum { + DMA_0 = (int) NU_MODNAME(PDMA_BASE, 0) +} DMAName; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PeripheralPins.c b/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PeripheralPins.c new file mode 100644 index 00000000000..971bef3dbf2 --- /dev/null +++ b/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PeripheralPins.c @@ -0,0 +1,361 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "PeripheralPins.h" + +// ===== +// Note: Commented lines are alternative possibilities which are not used per default. +// If you change them, you will have also to modify the corresponding xxx_api.c file +// for pwmout, analogin, analogout, ... +// ===== + +#if 0 +//*** GPIO *** +const PinMap PinMap_GPIO[] = { + // GPIO A MFPL + {PA_0, GPIO_A, SYS_GPA_MFPL_PA0MFP_GPIO}, + {PA_1, GPIO_A, SYS_GPA_MFPL_PA1MFP_GPIO}, + {PA_2, GPIO_A, SYS_GPA_MFPL_PA2MFP_GPIO}, + {PA_3, GPIO_A, SYS_GPA_MFPL_PA3MFP_GPIO}, + {PA_4, GPIO_A, SYS_GPA_MFPL_PA4MFP_GPIO}, + {PA_5, GPIO_A, SYS_GPA_MFPL_PA5MFP_GPIO}, + {PA_6, GPIO_A, SYS_GPA_MFPL_PA6MFP_GPIO}, + {PA_7, GPIO_A, SYS_GPA_MFPL_PA7MFP_GPIO}, + // GPIO A MFPH + {PA_8, GPIO_A, SYS_GPA_MFPH_PA8MFP_GPIO}, + {PA_9, GPIO_A, SYS_GPA_MFPH_PA9MFP_GPIO}, + {PA_10, GPIO_A, SYS_GPA_MFPH_PA10MFP_GPIO}, + {PA_11, GPIO_A, SYS_GPA_MFPH_PA11MFP_GPIO}, + {PA_12, GPIO_A, SYS_GPA_MFPH_PA12MFP_GPIO}, + {PA_13, GPIO_A, SYS_GPA_MFPH_PA13MFP_GPIO}, + {PA_14, GPIO_A, SYS_GPA_MFPH_PA14MFP_GPIO}, + {PA_15, GPIO_A, SYS_GPA_MFPH_PA15MFP_GPIO}, + + // GPIO B MFPL + {PB_0, GPIO_B, SYS_GPB_MFPL_PB0MFP_GPIO}, + {PB_1, GPIO_B, SYS_GPB_MFPL_PB1MFP_GPIO}, + {PB_2, GPIO_B, SYS_GPB_MFPL_PB2MFP_GPIO}, + {PB_3, GPIO_B, SYS_GPB_MFPL_PB3MFP_GPIO}, + {PB_4, GPIO_B, SYS_GPB_MFPL_PB4MFP_GPIO}, + {PB_5, GPIO_B, SYS_GPB_MFPL_PB5MFP_GPIO}, + {PB_6, GPIO_B, SYS_GPB_MFPL_PB6MFP_GPIO}, + {PB_7, GPIO_B, SYS_GPB_MFPL_PB7MFP_GPIO}, + // GPIO B MFPH + {PB_8, GPIO_B, SYS_GPB_MFPH_PB8MFP_GPIO}, + {PB_9, GPIO_B, SYS_GPB_MFPH_PB9MFP_GPIO}, + {PB_10, GPIO_B, SYS_GPB_MFPH_PB10MFP_GPIO}, + {PB_11, GPIO_B, SYS_GPB_MFPH_PB11MFP_GPIO}, + {PB_12, GPIO_B, SYS_GPB_MFPH_PB12MFP_GPIO}, + {PB_13, GPIO_B, SYS_GPB_MFPH_PB13MFP_GPIO}, + {PB_14, GPIO_B, SYS_GPB_MFPH_PB14MFP_GPIO}, + {PB_15, GPIO_B, SYS_GPB_MFPH_PB15MFP_GPIO}, + + // GPIO C MFPL + {PC_0, GPIO_C, SYS_GPC_MFPL_PC0MFP_GPIO}, + {PC_1, GPIO_C, SYS_GPC_MFPL_PC1MFP_GPIO}, + {PC_2, GPIO_C, SYS_GPC_MFPL_PC2MFP_GPIO}, + {PC_3, GPIO_C, SYS_GPC_MFPL_PC3MFP_GPIO}, + {PC_4, GPIO_C, SYS_GPC_MFPL_PC4MFP_GPIO}, + {PC_5, GPIO_C, SYS_GPC_MFPL_PC5MFP_GPIO}, + {PC_6, GPIO_C, SYS_GPC_MFPL_PC6MFP_GPIO}, + {PC_7, GPIO_C, SYS_GPC_MFPL_PC7MFP_GPIO}, + // GPIO C MFPH + {PC_8, GPIO_C, SYS_GPC_MFPH_PC8MFP_GPIO}, + {PC_9, GPIO_C, SYS_GPC_MFPH_PC9MFP_GPIO}, + {PC_10, GPIO_C, SYS_GPC_MFPH_PC10MFP_GPIO}, + {PC_11, GPIO_C, SYS_GPC_MFPH_PC11MFP_GPIO}, + {PC_12, GPIO_C, SYS_GPC_MFPH_PC12MFP_GPIO}, + {PC_13, GPIO_C, SYS_GPC_MFPH_PC13MFP_GPIO}, + {PC_14, GPIO_C, SYS_GPC_MFPH_PC14MFP_GPIO}, + {PC_15, GPIO_C, SYS_GPC_MFPH_PC15MFP_GPIO}, + + // GPIO D MFPL + {PD_0, GPIO_D, SYS_GPD_MFPL_PD0MFP_GPIO}, + {PD_1, GPIO_D, SYS_GPD_MFPL_PD1MFP_GPIO}, + {PD_2, GPIO_D, SYS_GPD_MFPL_PD2MFP_GPIO}, + {PD_3, GPIO_D, SYS_GPD_MFPL_PD3MFP_GPIO}, + {PD_4, GPIO_D, SYS_GPD_MFPL_PD4MFP_GPIO}, + {PD_5, GPIO_D, SYS_GPD_MFPL_PD5MFP_GPIO}, + {PD_6, GPIO_D, SYS_GPD_MFPL_PD6MFP_GPIO}, + {PD_7, GPIO_D, SYS_GPD_MFPL_PD7MFP_GPIO}, + // GPIO D MFPH + {PD_8, GPIO_D, SYS_GPD_MFPH_PD8MFP_GPIO}, + {PD_9, GPIO_D, SYS_GPD_MFPH_PD9MFP_GPIO}, + {PD_10, GPIO_D, SYS_GPD_MFPH_PD10MFP_GPIO}, + {PD_11, GPIO_D, SYS_GPD_MFPH_PD11MFP_GPIO}, + {PD_12, GPIO_D, SYS_GPD_MFPH_PD12MFP_GPIO}, + {PD_13, GPIO_D, SYS_GPD_MFPH_PD13MFP_GPIO}, + {PD_14, GPIO_D, SYS_GPD_MFPH_PD14MFP_GPIO}, + {PD_15, GPIO_D, SYS_GPD_MFPH_PD15MFP_GPIO}, + + // GPIO E MFPL + {PE_0, GPIO_E, SYS_GPE_MFPL_PE0MFP_GPIO}, + {PE_1, GPIO_E, SYS_GPE_MFPL_PE1MFP_GPIO}, + {PE_2, GPIO_E, SYS_GPE_MFPL_PE2MFP_GPIO}, + {PE_3, GPIO_E, SYS_GPE_MFPL_PE3MFP_GPIO}, + {PE_4, GPIO_E, SYS_GPE_MFPL_PE4MFP_GPIO}, + {PE_5, GPIO_E, SYS_GPE_MFPL_PE5MFP_GPIO}, + {PE_6, GPIO_E, SYS_GPE_MFPL_PE6MFP_GPIO}, + {PE_7, GPIO_E, SYS_GPE_MFPL_PE7MFP_GPIO}, + // GPIO E MFPH + {PE_8, GPIO_E, SYS_GPE_MFPH_PE8MFP_GPIO}, + {PE_9, GPIO_E, SYS_GPE_MFPH_PE9MFP_GPIO}, + {PE_10, GPIO_E, SYS_GPE_MFPH_PE10MFP_GPIO}, + {PE_11, GPIO_E, SYS_GPE_MFPH_PE11MFP_GPIO}, + {PE_12, GPIO_E, SYS_GPE_MFPH_PE12MFP_GPIO}, + {PE_13, GPIO_E, SYS_GPE_MFPH_PE13MFP_GPIO}, + {PE_14, GPIO_E, SYS_GPE_MFPH_PE14MFP_GPIO}, + + // GPIO F MFPL + {PF_0, GPIO_F, SYS_GPF_MFPL_PF0MFP_GPIO}, + {PF_1, GPIO_F, SYS_GPF_MFPL_PF1MFP_GPIO}, + {PF_2, GPIO_F, SYS_GPF_MFPL_PF2MFP_GPIO}, + {PF_3, GPIO_F, SYS_GPF_MFPL_PF3MFP_GPIO}, + {PF_4, GPIO_F, SYS_GPF_MFPL_PF4MFP_GPIO}, + {PF_5, GPIO_F, SYS_GPF_MFPL_PF5MFP_GPIO}, + {PF_6, GPIO_F, SYS_GPF_MFPL_PF6MFP_GPIO}, + {PF_7, GPIO_F, SYS_GPF_MFPL_PF7MFP_GPIO}, +}; +#endif + +//*** ADC *** + +const PinMap PinMap_ADC[] = { + {PB_0, ADC_0_0, SYS_GPB_MFPL_PB0MFP_EADC_CH0}, + {PB_1, ADC_0_1, SYS_GPB_MFPL_PB1MFP_EADC_CH1}, + {PB_2, ADC_0_2, SYS_GPB_MFPL_PB2MFP_EADC_CH2}, + {PB_3, ADC_0_3, SYS_GPB_MFPL_PB3MFP_EADC_CH3}, + {PB_4, ADC_0_4, SYS_GPB_MFPL_PB4MFP_EADC_CH4}, + {PB_5, ADC_0_13, SYS_GPB_MFPL_PB5MFP_EADC_CH13}, + {PB_6, ADC_0_14, SYS_GPB_MFPL_PB6MFP_EADC_CH14}, + {PB_7, ADC_0_15, SYS_GPB_MFPL_PB7MFP_EADC_CH15}, + {PB_8, ADC_0_5, SYS_GPB_MFPH_PB8MFP_EADC_CH5}, + {PB_9, ADC_0_6, SYS_GPB_MFPH_PB9MFP_EADC_CH6}, + {PB_10, ADC_0_7, SYS_GPB_MFPH_PB10MFP_EADC_CH7}, + {PB_11, ADC_0_8, SYS_GPB_MFPH_PB11MFP_EADC_CH8}, + {PB_12, ADC_0_9, SYS_GPB_MFPH_PB12MFP_EADC_CH9}, + {PB_13, ADC_0_10, SYS_GPB_MFPH_PB13MFP_EADC_CH10}, + {PB_14, ADC_0_11, SYS_GPB_MFPH_PB14MFP_EADC_CH11}, + {PB_15, ADC_0_12, SYS_GPB_MFPH_PB15MFP_EADC_CH12}, + {PD_0, ADC_0_6, SYS_GPD_MFPL_PD0MFP_EADC_CH6}, + {PD_1, ADC_0_11, SYS_GPD_MFPL_PD1MFP_EADC_CH11}, + {PD_8, ADC_0_7, SYS_GPD_MFPH_PD8MFP_EADC_CH7}, + {PD_9, ADC_0_10, SYS_GPD_MFPH_PD9MFP_EADC_CH10}, + + {NC, NC, 0} +}; + +//*** I2C *** + +const PinMap PinMap_I2C_SDA[] = { + {PA_2, I2C_0, SYS_GPA_MFPL_PA2MFP_I2C0_SDA}, + {PD_4, I2C_0, SYS_GPD_MFPL_PD4MFP_I2C0_SDA}, + {PE_0, I2C_1, SYS_GPE_MFPL_PE0MFP_I2C1_SDA}, + {PE_5, I2C_1, SYS_GPE_MFPL_PE5MFP_I2C1_SDA}, + {PE_9, I2C_1, SYS_GPE_MFPH_PE9MFP_I2C1_SDA}, + {PE_11, I2C_1, SYS_GPE_MFPH_PE11MFP_I2C1_SDA}, + {PE_13, I2C_0, SYS_GPE_MFPH_PE13MFP_I2C0_SDA}, + {PF_4, I2C_1, SYS_GPF_MFPL_PF4MFP_I2C1_SDA}, + + {NC, NC, 0} +}; + +const PinMap PinMap_I2C_SCL[] = { + {PA_3, I2C_0, SYS_GPA_MFPL_PA3MFP_I2C0_SCL}, + {PC_4, I2C_1, SYS_GPC_MFPL_PC4MFP_I2C1_SCL}, + {PD_5, I2C_0, SYS_GPD_MFPL_PD5MFP_I2C0_SCL}, + {PE_4, I2C_1, SYS_GPE_MFPL_PE4MFP_I2C1_SCL}, + {PE_8, I2C_1, SYS_GPE_MFPH_PE8MFP_I2C1_SCL}, + {PE_10, I2C_1, SYS_GPE_MFPH_PE10MFP_I2C1_SCL}, + {PE_12, I2C_0, SYS_GPE_MFPH_PE12MFP_I2C0_SCL}, + {PF_3, I2C_1, SYS_GPF_MFPL_PF3MFP_I2C1_SCL}, + + + {NC, NC, 0} +}; + +//*** PWM *** + +const PinMap PinMap_PWM[] = { + {PA_0, PWM_1_5, SYS_GPA_MFPL_PA0MFP_PWM1_CH5}, + {PA_1, PWM_1_4, SYS_GPA_MFPL_PA1MFP_PWM1_CH4}, + {PA_2, PWM_1_3, SYS_GPA_MFPL_PA2MFP_PWM1_CH3}, + {PA_3, PWM_1_2, SYS_GPA_MFPL_PA3MFP_PWM1_CH2}, + {PB_8, PWM_0_2, SYS_GPB_MFPH_PB8MFP_PWM0_CH2}, + {PC_0, PWM_0_0, SYS_GPC_MFPL_PC0MFP_PWM0_CH0}, + {PC_1, PWM_0_1, SYS_GPC_MFPL_PC1MFP_PWM0_CH1}, + {PC_2, PWM_0_2, SYS_GPC_MFPL_PC2MFP_PWM0_CH2}, + {PC_3, PWM_0_3, SYS_GPC_MFPL_PC3MFP_PWM0_CH3}, + {PC_4, PWM_0_4, SYS_GPC_MFPL_PC4MFP_PWM0_CH4}, + {PC_5, PWM_0_5, SYS_GPC_MFPL_PC5MFP_PWM0_CH5}, + {PC_6, PWM_1_0, SYS_GPC_MFPL_PC6MFP_PWM1_CH0}, + {PC_7, PWM_1_1, SYS_GPC_MFPL_PC7MFP_PWM1_CH1}, + {PC_9, PWM_1_0, SYS_GPC_MFPH_PC9MFP_PWM1_CH0}, + {PC_10, PWM_1_1, SYS_GPC_MFPH_PC10MFP_PWM1_CH1}, + {PC_11, PWM_1_2, SYS_GPC_MFPH_PC11MFP_PWM1_CH2}, + {PC_12, PWM_1_3, SYS_GPC_MFPH_PC12MFP_PWM1_CH3}, + {PC_13, PWM_1_4, SYS_GPC_MFPH_PC13MFP_PWM1_CH4}, + {PC_14, PWM_1_5, SYS_GPC_MFPH_PC14MFP_PWM1_CH5}, + {PC_15, PWM_1_0, SYS_GPC_MFPH_PC15MFP_PWM1_CH0}, + {PD_6, PWM_0_5, SYS_GPD_MFPL_PD6MFP_PWM0_CH5}, + {PD_7, PWM_0_5, SYS_GPD_MFPL_PD7MFP_PWM0_CH5}, + {PD_12, PWM_1_0, SYS_GPD_MFPH_PD12MFP_PWM1_CH0}, + {PD_13, PWM_1_1, SYS_GPD_MFPH_PD13MFP_PWM1_CH1}, + {PD_14, PWM_1_2, SYS_GPD_MFPH_PD14MFP_PWM1_CH2}, + {PD_15, PWM_1_3, SYS_GPD_MFPH_PD15MFP_PWM1_CH3}, + {PE_0, PWM_0_0, SYS_GPE_MFPL_PE0MFP_PWM0_CH0}, + {PE_1, PWM_0_1, SYS_GPE_MFPL_PE1MFP_PWM0_CH1}, + {PE_2, PWM_1_1, SYS_GPE_MFPL_PE2MFP_PWM1_CH1}, + {PE_3, PWM_0_3, SYS_GPE_MFPL_PE3MFP_PWM0_CH3}, + + {NC, NC, 0} +}; + +//*** SERIAL *** + +const PinMap PinMap_UART_TX[] = { + {PA_0, UART_1, SYS_GPA_MFPL_PA0MFP_UART1_TXD}, + {PA_2, UART_0, SYS_GPA_MFPL_PA2MFP_UART0_TXD}, + {PA_8, UART_3, SYS_GPA_MFPH_PA8MFP_UART3_TXD}, + {PB_1, UART_2, SYS_GPB_MFPL_PB1MFP_UART2_TXD}, + {PB_3, UART_1, SYS_GPB_MFPL_PB3MFP_UART1_TXD}, + {PB_3, UART_3, SYS_GPB_MFPL_PB3MFP_UART3_TXD}, + {PB_4, UART_2, SYS_GPB_MFPL_PB4MFP_UART2_TXD}, + {PC_0, UART_3, SYS_GPC_MFPL_PC0MFP_UART3_TXD}, + {PC_2, UART_2, SYS_GPC_MFPL_PC2MFP_UART2_TXD}, + {PC_6, UART_0, SYS_GPC_MFPL_PC6MFP_UART0_TXD}, + {PD_1, UART_0, SYS_GPD_MFPL_PD1MFP_UART0_TXD}, + {PD_12, UART_3, SYS_GPD_MFPH_PD12MFP_UART3_TXD}, + {PE_8, UART_1, SYS_GPE_MFPH_PE8MFP_UART1_TXD}, + {PE_10, UART_3, SYS_GPE_MFPH_PE10MFP_UART3_TXD}, + {PE_12, UART_1, SYS_GPE_MFPH_PE12MFP_UART1_TXD}, + + {NC, NC, 0} +}; + +const PinMap PinMap_UART_RX[] = { + {PA_1, UART_1, SYS_GPA_MFPL_PA1MFP_UART1_RXD}, + {PA_3, UART_0, SYS_GPA_MFPL_PA3MFP_UART0_RXD}, + {PA_9, UART_3, SYS_GPA_MFPH_PA9MFP_UART3_RXD}, + {PB_0, UART_2, SYS_GPB_MFPL_PB0MFP_UART2_RXD}, + {PB_2, UART_1, SYS_GPB_MFPL_PB2MFP_UART1_RXD}, + {PB_2, UART_3, SYS_GPB_MFPL_PB2MFP_UART3_RXD}, + {PB_5, UART_2, SYS_GPB_MFPL_PB5MFP_UART2_RXD}, + {PC_1, UART_3, SYS_GPC_MFPL_PC1MFP_UART3_RXD}, + {PC_3, UART_2, SYS_GPC_MFPL_PC3MFP_UART2_RXD}, + {PC_7, UART_0, SYS_GPC_MFPL_PC7MFP_UART0_RXD}, + {PD_0, UART_0, SYS_GPD_MFPL_PD0MFP_UART0_RXD}, + {PD_6, UART_0, SYS_GPD_MFPL_PD6MFP_UART0_RXD}, + {PD_13, UART_3, SYS_GPD_MFPH_PD13MFP_UART3_RXD}, + {PE_9, UART_1, SYS_GPE_MFPH_PE9MFP_UART1_RXD}, + {PE_11, UART_3, SYS_GPE_MFPH_PE11MFP_UART3_RXD}, + {PE_13, UART_1, SYS_GPE_MFPH_PE13MFP_UART1_RXD}, + + {NC, NC, 0} +}; + +const PinMap PinMap_UART_RTS[] = { + {PA_1, UART_1, SYS_GPA_MFPL_PA1MFP_UART1_nRTS}, + {PA_3, UART_0, SYS_GPA_MFPL_PA3MFP_UART0_nRTS}, + {PA_11, UART_3, SYS_GPA_MFPH_PA11MFP_UART3_nRTS}, + {PA_15, UART_2, SYS_GPA_MFPH_PA15MFP_UART2_nRTS}, + {PB_8, UART_1, SYS_GPB_MFPH_PB8MFP_UART1_nRTS}, + {PC_1, UART_2, SYS_GPC_MFPL_PC1MFP_UART2_nRTS}, + {PD_15, UART_3, SYS_GPD_MFPH_PD15MFP_UART3_nRTS}, + {PE_11, UART_1, SYS_GPE_MFPH_PE11MFP_UART1_nRTS}, + + {NC, NC, 0} +}; + +const PinMap PinMap_UART_CTS[] = { + {PA_0, UART_1, SYS_GPA_MFPL_PA0MFP_UART1_nCTS}, + {PA_2, UART_0, SYS_GPA_MFPL_PA2MFP_UART0_nCTS}, + {PA_10, UART_3, SYS_GPA_MFPH_PA10MFP_UART3_nCTS}, + {PA_14, UART_2, SYS_GPA_MFPH_PA14MFP_UART2_nCTS}, + {PB_4, UART_1, SYS_GPB_MFPL_PB4MFP_UART1_nCTS}, + {PC_0, UART_2, SYS_GPC_MFPL_PC0MFP_UART2_nCTS}, + {PD_14, UART_3, SYS_GPD_MFPH_PD14MFP_UART3_nCTS}, + {PE_10, UART_1, SYS_GPE_MFPH_PE10MFP_UART1_nCTS}, + + {NC, NC, 0} +}; + +//*** SPI *** + +const PinMap PinMap_SPI_MOSI[] = { + {PA_5, SPI_1, SYS_GPA_MFPL_PA5MFP_SPI1_MOSI}, + {PB_0, SPI_0, SYS_GPB_MFPL_PB0MFP_SPI0_MOSI1}, + {PB_5, SPI_0, SYS_GPB_MFPL_PB5MFP_SPI0_MOSI0}, + {PB_5, SPI_1, SYS_GPB_MFPL_PB5MFP_SPI1_MOSI}, + {PC_3, SPI_2, SYS_GPC_MFPL_PC3MFP_SPI2_MOSI}, + {PC_10, SPI_2, SYS_GPC_MFPH_PC10MFP_SPI2_MOSI}, + {PD_13, SPI_2, SYS_GPD_MFPH_PD13MFP_SPI2_MOSI}, + {PE_3, SPI_1, SYS_GPE_MFPL_PE3MFP_SPI1_MOSI}, + {PE_9, SPI_0, SYS_GPE_MFPH_PE9MFP_SPI0_MOSI1}, + {PE_11, SPI_1, SYS_GPE_MFPH_PE11MFP_SPI1_MOSI}, + {PE_11, SPI_0, SYS_GPE_MFPH_PE11MFP_SPI0_MOSI0}, + + {NC, NC, 0} +}; + +const PinMap PinMap_SPI_MISO[] = { + {PA_6, SPI_1, SYS_GPA_MFPL_PA6MFP_SPI1_MISO}, + {PB_1, SPI_0, SYS_GPB_MFPL_PB1MFP_SPI0_MISO1}, + {PB_3, SPI_0, SYS_GPB_MFPL_PB3MFP_SPI0_MISO0}, + {PB_3, SPI_1, SYS_GPB_MFPL_PB3MFP_SPI1_MISO}, + {PB_6, SPI_0, SYS_GPB_MFPL_PB6MFP_SPI0_MISO0}, + {PB_6, SPI_1, SYS_GPB_MFPL_PB6MFP_SPI1_MISO}, + {PC_4, SPI_2, SYS_GPC_MFPL_PC4MFP_SPI2_MISO}, + {PC_11, SPI_2, SYS_GPC_MFPH_PC11MFP_SPI2_MISO}, + {PD_5, SPI_1, SYS_GPD_MFPL_PD5MFP_SPI1_MISO}, + {PD_14, SPI_2, SYS_GPD_MFPH_PD14MFP_SPI2_MISO}, + {PE_8, SPI_0, SYS_GPE_MFPH_PE8MFP_SPI0_MISO1}, + {PE_10, SPI_1, SYS_GPE_MFPH_PE10MFP_SPI1_MISO}, + {PE_10, SPI_0, SYS_GPE_MFPH_PE10MFP_SPI0_MISO0}, + + {NC, NC, 0} +}; + +const PinMap PinMap_SPI_SCLK[] = { + {PA_7, SPI_1, SYS_GPA_MFPL_PA7MFP_SPI1_CLK}, + {PB_2, SPI_0, SYS_GPB_MFPL_PB2MFP_SPI0_CLK}, + {PB_2, SPI_1, SYS_GPB_MFPL_PB2MFP_SPI1_CLK}, + {PB_7, SPI_0, SYS_GPB_MFPL_PB7MFP_SPI0_CLK}, + {PB_7, SPI_1, SYS_GPB_MFPL_PB7MFP_SPI1_CLK}, + {PC_0, SPI_2, SYS_GPC_MFPL_PC0MFP_SPI2_CLK}, + {PC_12, SPI_2, SYS_GPC_MFPH_PC12MFP_SPI2_CLK}, + {PD_4, SPI_1, SYS_GPD_MFPL_PD4MFP_SPI1_CLK}, + {PD_15, SPI_2, SYS_GPD_MFPH_PD15MFP_SPI2_CLK}, + {PE_0, SPI_2, SYS_GPE_MFPL_PE0MFP_SPI2_CLK}, + {PE_13, SPI_1, SYS_GPE_MFPH_PE13MFP_SPI1_CLK}, + {PE_13, SPI_0, SYS_GPE_MFPH_PE13MFP_SPI0_CLK}, + + {NC, NC, 0} +}; + +const PinMap PinMap_SPI_SSEL[] = { + {PA_4, SPI_1, SYS_GPA_MFPL_PA4MFP_SPI1_SS}, + {PB_4, SPI_0, SYS_GPB_MFPL_PB4MFP_SPI0_SS}, + {PB_4, SPI_1, SYS_GPB_MFPL_PB4MFP_SPI1_SS}, + {PC_2, SPI_2, SYS_GPC_MFPL_PC2MFP_SPI2_SS}, + {PC_13, SPI_2, SYS_GPC_MFPH_PC13MFP_SPI2_SS}, + {PD_6, SPI_1, SYS_GPD_MFPL_PD6MFP_SPI1_SS}, + {PD_12, SPI_2, SYS_GPD_MFPH_PD12MFP_SPI2_SS}, + {PE_12, SPI_1, SYS_GPE_MFPH_PE12MFP_SPI1_SS}, + {PE_12, SPI_0, SYS_GPE_MFPH_PE12MFP_SPI0_SS}, + + {NC, NC, 0} +}; diff --git a/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PeripheralPins.h b/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PeripheralPins.h new file mode 100644 index 00000000000..5b1a453de9d --- /dev/null +++ b/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PeripheralPins.h @@ -0,0 +1,62 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MBED_PERIPHERALPINS_H +#define MBED_PERIPHERALPINS_H + +#include "pinmap.h" +#include "PeripheralNames.h" + +#ifdef __cplusplus +extern "C" { +#endif + +//*** GPIO *** + +extern const PinMap PinMap_GPIO[]; + +//*** ADC *** + +extern const PinMap PinMap_ADC[]; + +//*** I2C *** + +extern const PinMap PinMap_I2C_SDA[]; +extern const PinMap PinMap_I2C_SCL[]; + +//*** PWM *** + +extern const PinMap PinMap_PWM[]; + +//*** SERIAL *** + +extern const PinMap PinMap_UART_TX[]; +extern const PinMap PinMap_UART_RX[]; +extern const PinMap PinMap_UART_RTS[]; +extern const PinMap PinMap_UART_CTS[]; + +//*** SPI *** + +extern const PinMap PinMap_SPI_MOSI[]; +extern const PinMap PinMap_SPI_MISO[]; +extern const PinMap PinMap_SPI_SCLK[]; +extern const PinMap PinMap_SPI_SSEL[]; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PinNames.h b/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PinNames.h new file mode 100644 index 00000000000..4e042cd6aca --- /dev/null +++ b/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PinNames.h @@ -0,0 +1,113 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef MBED_PINNAMES_H +#define MBED_PINNAMES_H + +#include "cmsis.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define NU_PORT_SHIFT 12 +#define NU_PINNAME_TO_PORT(name) ((unsigned int)(name) >> NU_PORT_SHIFT) +#define NU_PINNAME_TO_PIN(name) ((unsigned int)(name) & ~(0xFFFFFFFF << NU_PORT_SHIFT)) +#define NU_PORT_N_PIN_TO_PINNAME(port, pin) ((((unsigned int) (port)) << (NU_PORT_SHIFT)) | ((unsigned int) (pin))) +#define NU_PORT_BASE(port) ((GPIO_T *)(((uint32_t) GPIOA_BASE) + 0x40 * port)) +#define NU_MFP_POS(pin) ((pin % 8) * 4) +#define NU_MFP_MSK(pin) (0xful << NU_MFP_POS(pin)) + +typedef enum { + PIN_INPUT, + PIN_OUTPUT +} PinDirection; + +typedef enum { + PullNone = 0, + PullDown, + PullUp, + + PushPull, + OpenDrain, + Quasi, + + PullDefault = PullUp, +} PinMode; + +typedef enum { + // Not connected + NC = (int)0xFFFFFFFF, + + // Generic naming + PA_0 = NU_PORT_N_PIN_TO_PINNAME(0, 0), PA_1, PA_2, PA_3, PA_4, PA_5, PA_6, PA_7, PA_8, PA_9, PA_10, PA_11, PA_12, PA_13, PA_14, PA_15, + PB_0 = NU_PORT_N_PIN_TO_PINNAME(1, 0), PB_1, PB_2, PB_3, PB_4, PB_5, PB_6, PB_7, PB_8, PB_9, PB_10, PB_11, PB_12, PB_13, PB_14, PB_15, + PC_0 = NU_PORT_N_PIN_TO_PINNAME(2, 0), PC_1, PC_2, PC_3, PC_4, PC_5, PC_6, PC_7, PC_8, PC_9, PC_10, PC_11, PC_12, PC_13, PC_14, PC_15, + PD_0 = NU_PORT_N_PIN_TO_PINNAME(3, 0), PD_1, PD_2, PD_3, PD_4, PD_5, PD_6, PD_7, PD_8, PD_9, PD_10, PD_11, PD_12, PD_13, PD_14, PD_15, + PE_0 = NU_PORT_N_PIN_TO_PINNAME(4, 0), PE_1, PE_2, PE_3, PE_4, PE_5, PE_6, PE_7, PE_8, PE_9, PE_10, PE_11, PE_12, PE_13, PE_14, + PF_0 = NU_PORT_N_PIN_TO_PINNAME(5, 0), PF_1, PF_2, PF_3, PF_4, PF_5, PF_6, PF_7, + + // Arduino UNO naming + A0 = PB_0, + A1 = PB_1, + A2 = PB_2, + A3 = PB_3, + A4 = PB_4, + A5 = PB_8, + A6 = PB_9, + A7 = PB_10, + + D0 = PD_6, + D1 = PD_1, + D2 = PC_6, + D3 = PC_7, + D4 = PC_11, + D5 = PC_12, + D6 = PC_13, + D7 = PC_14, + D8 = PC_0, + D9 = PC_1, + D10 = PC_2, + D11 = PC_3, + D12 = PC_4, + D13 = PC_5, + D14 = PE_5, + D15 = PE_4, + + // FIXME: other board-specific naming + // UART naming + USBTX = PA_8, + USBRX = PA_9, + STDIO_UART_TX = USBTX, + STDIO_UART_RX = USBRX, + // LED naming + LED1 = PD_2, + LED2 = PD_3, + LED3 = PD_7, + LED4 = D0, // No real LED. Just for passing ATS. + LED_RED = LED2, + LED_GREEN = LED3, + LED_BLUE = LED1, + // Button naming + SW1 = PA_15, + SW2 = PA_14, + +} PinName; + +#ifdef __cplusplus +} +#endif + +#endif // MBED_PINNAMES_H diff --git a/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PortNames.h b/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PortNames.h new file mode 100644 index 00000000000..3adf2f8a53a --- /dev/null +++ b/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PortNames.h @@ -0,0 +1,36 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MBED_PORTNAMES_H +#define MBED_PORTNAMES_H + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + PortA = 0, + PortB = 1, + PortC = 2, + PortD = 3, + PortE = 4, + PortF = 5 +} PortName; + +#ifdef __cplusplus +} +#endif +#endif diff --git a/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/device.h b/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/device.h new file mode 100644 index 00000000000..89e12ecd417 --- /dev/null +++ b/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/device.h @@ -0,0 +1,65 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MBED_DEVICE_H +#define MBED_DEVICE_H + +#define DEVICE_PORTIN 1 +#define DEVICE_PORTOUT 1 +#define DEVICE_PORTINOUT 1 + +#define DEVICE_INTERRUPTIN 1 + +#define DEVICE_ANALOGIN 1 +#define DEVICE_ANALOGOUT 0 + +#define DEVICE_SERIAL 1 +#define DEVICE_SERIAL_FC 1 +#define DEVICE_SERIAL_ASYNCH 1 + +#define DEVICE_I2C 1 +#define DEVICE_I2CSLAVE 1 +#define DEVICE_I2C_ASYNCH 1 + +#define DEVICE_SPI 1 +#define DEVICE_SPI_ASYNCH 1 +#define DEVICE_SPISLAVE 1 + +#define DEVICE_CAN 0 + +#define DEVICE_RTC 1 + +#define DEVICE_ETHERNET 0 + +#define DEVICE_PWMOUT 1 + +#define DEVICE_SEMIHOST 0 +#define DEVICE_LOCALFILESYSTEM 0 +#define DEVICE_ID_LENGTH 24 + +#define DEVICE_SLEEP 1 + +#define DEVICE_DEBUG_AWARENESS 0 + +#define DEVICE_STDIO_MESSAGES 1 + +#define DEVICE_ERROR_RED 0 + +#define DEVICE_LOWPOWERTIMER 1 + +#include "objects.h" + +#endif diff --git a/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/mbed_overrides.c b/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/mbed_overrides.c new file mode 100644 index 00000000000..67f7b9dbb89 --- /dev/null +++ b/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/mbed_overrides.c @@ -0,0 +1,83 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "analogin_api.h" + +// NOTE: Ensurce mbed_sdk_init() will get called before C++ global object constructor. +#if defined(__CC_ARM) || defined(__GNUC__) +void mbed_sdk_init_forced(void) __attribute__((constructor(101))); +#elif defined(__ICCARM__) + // FIXME: How to achieve it in IAR? +#endif + + +void mbed_sdk_init(void) +{ + // NOTE: Support singleton semantics to be called from other init functions + static int inited = 0; + if (inited) { + return; + } + inited = 1; + + /*---------------------------------------------------------------------------------------------------------*/ + /* Init System Clock */ + /*---------------------------------------------------------------------------------------------------------*/ + /* Unlock protected registers */ + SYS_UnlockReg(); + + /* Enable HIRC clock (Internal RC 22.1184MHz) */ + CLK_EnableXtalRC(CLK_PWRCTL_HIRCEN_Msk); + /* Enable HXT clock (external XTAL 12MHz) */ + CLK_EnableXtalRC(CLK_PWRCTL_HXTEN_Msk); + /* Enable LIRC for lp_ticker */ + CLK_EnableXtalRC(CLK_PWRCTL_LIRCEN_Msk); + /* Enable LXT for RTC */ + CLK_EnableXtalRC(CLK_PWRCTL_LXTEN_Msk); + + /* Wait for HIRC clock ready */ + CLK_WaitClockReady(CLK_STATUS_HIRCSTB_Msk); + /* Wait for HXT clock ready */ + CLK_WaitClockReady(CLK_STATUS_HXTSTB_Msk); + /* Wait for LIRC clock ready */ + CLK_WaitClockReady(CLK_STATUS_LIRCSTB_Msk); + /* Wait for LXT clock ready */ + CLK_WaitClockReady(CLK_STATUS_LXTSTB_Msk); + + /* Select HCLK clock source as HIRC and HCLK clock divider as 1 */ + CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_HIRC, CLK_CLKDIV0_HCLK(1)); + + /* Set core clock as 72000000 from PLL */ + CLK_SetCoreClock(72000000); + +#if DEVICE_ANALOGIN + // FIXME: Check voltage reference for EADC + /* Vref connect to AVDD */ + //SYS->VREFCTL = (SYS->VREFCTL & ~SYS_VREFCTL_VREFCTL_Msk) | SYS_VREFCTL_VREF_AVDD; +#endif + + /* Update System Core Clock */ + /* User can use SystemCoreClockUpdate() to calculate SystemCoreClock. */ + SystemCoreClockUpdate(); + + /* Lock protected registers */ + SYS_LockReg(); +} + +void mbed_sdk_init_forced(void) +{ + mbed_sdk_init(); +} diff --git a/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/objects.h b/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/objects.h new file mode 100644 index 00000000000..e06ff861eb7 --- /dev/null +++ b/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/objects.h @@ -0,0 +1,132 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MBED_OBJECTS_H +#define MBED_OBJECTS_H + +#include "cmsis.h" +#include "PortNames.h" +#include "PeripheralNames.h" +#include "PinNames.h" +#include "dma_api.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct gpio_irq_s { + //IRQn_Type irq_n; + //uint32_t irq_index; + //uint32_t event; + + PinName pin; + uint32_t irq_handler; + uint32_t irq_id; +}; + +struct port_s { + PortName port; + uint32_t mask; + PinDirection direction; +}; + +struct analogin_s { + ADCName adc; + //PinName pin; +}; + +struct serial_s { + UARTName uart; + PinName pin_tx; + PinName pin_rx; + + uint32_t baudrate; + uint32_t databits; + uint32_t parity; + uint32_t stopbits; + + void (*vec)(void); + uint32_t irq_handler; + uint32_t irq_id; + uint32_t inten_msk; + + // Async transfer related fields + DMAUsage dma_usage_tx; + DMAUsage dma_usage_rx; + int dma_chn_id_tx; + int dma_chn_id_rx; + uint32_t event; + void (*irq_handler_tx_async)(void); + void (*irq_handler_rx_async)(void); +}; + +struct spi_s { + SPIName spi; + PinName pin_miso; + PinName pin_mosi; + PinName pin_sclk; + PinName pin_ssel; + + //void (*vec)(void); + + // Async transfer related fields + DMAUsage dma_usage; + int dma_chn_id_tx; + int dma_chn_id_rx; + uint32_t event; + //void (*irq_handler_tx_async)(void); + //void (*irq_handler_rx_async)(void); +}; + +struct i2c_s { + I2CName i2c; + //void (*vec)(void); + int slaveaddr_state; + + uint32_t tran_ctrl; + char * tran_beg; + char * tran_pos; + char * tran_end; + int inten; + + // Async transfer related fields + DMAUsage dma_usage; + uint32_t event; + int stop; + uint32_t address; +}; + +struct pwmout_s { + PWMName pwm; + //PinName pin; + uint32_t period_us; + uint32_t pulsewidth_us; +}; + +struct sleep_s { + uint32_t start_us; + uint32_t end_us; + uint32_t period_us; + int powerdown; +}; + +#ifdef __cplusplus +} +#endif + +#include "gpio_object.h" + +#endif diff --git a/targets/TARGET_NUVOTON/TARGET_M451/analogin_api.c b/targets/TARGET_NUVOTON/TARGET_M451/analogin_api.c new file mode 100644 index 00000000000..6ea0173958c --- /dev/null +++ b/targets/TARGET_NUVOTON/TARGET_M451/analogin_api.c @@ -0,0 +1,160 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "analogin_api.h" + +#if DEVICE_ANALOGIN + +#include "cmsis.h" +#include "pinmap.h" +#include "PeripheralPins.h" +#include "nu_modutil.h" + +struct nu_adc_var { + uint32_t en_msk; +}; + +static struct nu_adc_var adc0_var = { + .en_msk = 0 +}; +static struct nu_adc_var adc1_var = { + .en_msk = 0 +}; +static struct nu_adc_var adc2_var = { + .en_msk = 0 +}; +static struct nu_adc_var adc3_var = { + .en_msk = 0 +}; +static struct nu_adc_var adc4_var = { + .en_msk = 0 +}; +static struct nu_adc_var adc5_var = { + .en_msk = 0 +}; +static struct nu_adc_var adc6_var = { + .en_msk = 0 +}; +static struct nu_adc_var adc7_var = { + .en_msk = 0 +}; +static struct nu_adc_var adc8_var = { + .en_msk = 0 +}; +static struct nu_adc_var adc9_var = { + .en_msk = 0 +}; +static struct nu_adc_var adc10_var = { + .en_msk = 0 +}; +static struct nu_adc_var adc11_var = { + .en_msk = 0 +}; +static struct nu_adc_var adc12_var = { + .en_msk = 0 +}; +static struct nu_adc_var adc13_var = { + .en_msk = 0 +}; +static struct nu_adc_var adc14_var = { + .en_msk = 0 +}; +static struct nu_adc_var adc15_var = { + .en_msk = 0 +}; + +static const struct nu_modinit_s adc_modinit_tab[] = { + {ADC_0_0, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc0_var}, + {ADC_0_1, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc1_var}, + {ADC_0_2, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc2_var}, + {ADC_0_3, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc3_var}, + {ADC_0_4, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc4_var}, + {ADC_0_5, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc5_var}, + {ADC_0_6, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc6_var}, + {ADC_0_7, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc7_var}, + {ADC_0_8, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc8_var}, + {ADC_0_9, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc9_var}, + {ADC_0_10, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc10_var}, + {ADC_0_11, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc11_var}, + {ADC_0_12, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc12_var}, + {ADC_0_13, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc13_var}, + {ADC_0_14, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc14_var}, + {ADC_0_15, EADC_MODULE, 0, CLK_CLKDIV0_EADC(8), EADC_RST, ADC00_IRQn, &adc15_var}, +}; + +void analogin_init(analogin_t *obj, PinName pin) +{ + obj->adc = (ADCName) pinmap_peripheral(pin, PinMap_ADC); + MBED_ASSERT(obj->adc != (ADCName) NC); + + const struct nu_modinit_s *modinit = get_modinit(obj->adc, adc_modinit_tab); + MBED_ASSERT(modinit != NULL); + MBED_ASSERT(modinit->modname == obj->adc); + + EADC_T *eadc_base = (EADC_T *) NU_MODBASE(obj->adc); + + // NOTE: All channels (identified by ADCName) share a ADC module. This reset will also affect other channels of the same ADC module. + if (! ((struct nu_adc_var *) modinit->var)->en_msk) { + // Reset this module if no channel enabled + SYS_ResetModule(modinit->rsetidx); + + // Select clock source of paired channels + CLK_SetModuleClock(modinit->clkidx, modinit->clksrc, modinit->clkdiv); + // Enable clock of paired channels + CLK_EnableModuleClock(modinit->clkidx); + + // Power on ADC + //ADC_POWER_ON(ADC); + + // Set the ADC internal sampling time, input mode as single-end and enable the A/D converter + EADC_Open(eadc_base, EADC_CTL_DIFFEN_SINGLE_END); + EADC_SetInternalSampleTime(eadc_base, 6); + } + + uint32_t chn = NU_MODSUBINDEX(obj->adc); + + // Wire pinout + pinmap_pinout(pin, PinMap_ADC); + + // Configure the sample module Nmod for analog input channel Nch and software trigger source + EADC_ConfigSampleModule(EADC, chn, EADC_SOFTWARE_TRIGGER, chn); + + ((struct nu_adc_var *) modinit->var)->en_msk |= 1 << chn; +} + +uint16_t analogin_read_u16(analogin_t *obj) +{ + EADC_T *eadc_base = (EADC_T *) NU_MODBASE(obj->adc); + uint32_t chn = NU_MODSUBINDEX(obj->adc); + + EADC_START_CONV(eadc_base, 1 << chn); + while (EADC_GET_PENDING_CONV(eadc_base) & (1 << chn)); + uint16_t conv_res_12 = EADC_GET_CONV_DATA(eadc_base, chn); + // Just 12 bits are effective. Convert to 16 bits. + // conv_res_12: 0000 b11b10b9b8 b7b6b5b4 b3b2b1b0 + // conv_res_16: b11b10b9b8 b7b6b5b4 b3b2b1b0 b11b10b9b8 + uint16_t conv_res_16 = (conv_res_12 << 4) | (conv_res_12 >> 8); + + return conv_res_16; +} + +float analogin_read(analogin_t *obj) +{ + uint16_t value = analogin_read_u16(obj); + return (float) value * (1.0f / (float) 0xFFFF); +} + +#endif diff --git a/targets/TARGET_NUVOTON/TARGET_M451/dma.h b/targets/TARGET_NUVOTON/TARGET_M451/dma.h new file mode 100644 index 00000000000..1faf3c05813 --- /dev/null +++ b/targets/TARGET_NUVOTON/TARGET_M451/dma.h @@ -0,0 +1,40 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MBED_DMA_H +#define MBED_DMA_H + +#include "cmsis.h" + +#ifdef __cplusplus +extern "C" { +#endif + +#define DMA_CAP_NONE (0 << 0) + +#define DMA_EVENT_ABORT (1 << 0) +#define DMA_EVENT_TRANSFER_DONE (1 << 1) +#define DMA_EVENT_TIMEOUT (1 << 2) +#define DMA_EVENT_ALL (DMA_EVENT_ABORT | DMA_EVENT_TRANSFER_DONE | DMA_EVENT_TIMEOUT) +#define DMA_EVENT_MASK DMA_EVENT_ALL + +void dma_set_handler(int channelid, uint32_t handler, uint32_t id, uint32_t event); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/targets/TARGET_NUVOTON/TARGET_M451/dma_api.c b/targets/TARGET_NUVOTON/TARGET_M451/dma_api.c new file mode 100644 index 00000000000..ddecc9ca634 --- /dev/null +++ b/targets/TARGET_NUVOTON/TARGET_M451/dma_api.c @@ -0,0 +1,178 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "dma_api.h" +#include "string.h" +#include "cmsis.h" +#include "mbed_assert.h" +#include "PeripheralNames.h" +#include "nu_modutil.h" +#include "nu_bitutil.h" +#include "dma.h" + +struct nu_dma_chn_s { + void (*handler)(uint32_t, uint32_t); + uint32_t id; + uint32_t event; +}; + +static int dma_inited = 0; +static uint32_t dma_chn_mask = 0; +static struct nu_dma_chn_s dma_chn_arr[PDMA_CH_MAX]; + +static void pdma_vec(void); +static const struct nu_modinit_s dma_modinit = {DMA_0, PDMA_MODULE, 0, 0, PDMA_RST, PDMA_IRQn, (void *) pdma_vec}; + + +void dma_init(void) +{ + if (dma_inited) { + return; + } + + dma_inited = 1; + dma_chn_mask = 0; + memset(dma_chn_arr, 0x00, sizeof (dma_chn_arr)); + + // Reset this module + SYS_ResetModule(dma_modinit.rsetidx); + + // Enable IP clock + CLK_EnableModuleClock(dma_modinit.clkidx); + + PDMA_Open(0); + + NVIC_SetVector(dma_modinit.irq_n, (uint32_t) dma_modinit.var); + NVIC_EnableIRQ(dma_modinit.irq_n); +} + +int dma_channel_allocate(uint32_t capabilities) +{ + if (! dma_inited) { + dma_init(); + } + +#if 1 + int i = nu_cto(dma_chn_mask); + if (i != 32) { + dma_chn_mask |= 1 << i; + memset(dma_chn_arr + i, 0x00, sizeof (struct nu_dma_chn_s)); + return i; + } +#else + int i; + + for (i = 0; i < PDMA_CH_MAX; i ++) { + if ((dma_chn_mask & (1 << i)) == 0) { + // Channel available + dma_chn_mask |= 1 << i; + memset(dma_chn_arr + i, 0x00, sizeof (struct nu_dma_chn_s)); + return i; + } + } +#endif + + // No channel available + return DMA_ERROR_OUT_OF_CHANNELS; +} + +int dma_channel_free(int channelid) +{ + if (channelid != DMA_ERROR_OUT_OF_CHANNELS) { + dma_chn_mask &= ~(1 << channelid); + } + + return 0; +} + +void dma_set_handler(int channelid, uint32_t handler, uint32_t id, uint32_t event) +{ + MBED_ASSERT(dma_chn_mask & (1 << channelid)); + + dma_chn_arr[channelid].handler = (void (*)(uint32_t, uint32_t)) handler; + dma_chn_arr[channelid].id = id; + dma_chn_arr[channelid].event = event; + + // Set interrupt vector if someone has removed it. + NVIC_SetVector(dma_modinit.irq_n, (uint32_t) dma_modinit.var); + NVIC_EnableIRQ(dma_modinit.irq_n); +} + +static void pdma_vec(void) +{ + uint32_t intsts = PDMA_GET_INT_STATUS(); + + // Abort + if (intsts & PDMA_INTSTS_ABTIF_Msk) { + uint32_t abtsts = PDMA_GET_ABORT_STS(); + // Clear all Abort flags + PDMA_CLR_ABORT_FLAG(abtsts); + + while (abtsts) { + int chn_id = nu_ctz(abtsts); + if (dma_chn_mask & (1 << chn_id)) { + struct nu_dma_chn_s *dma_chn = dma_chn_arr + chn_id; + if (dma_chn->handler && (dma_chn->event & DMA_EVENT_ABORT)) { + dma_chn->handler(dma_chn->id, DMA_EVENT_ABORT); + } + } + abtsts &= ~(1 << chn_id); + } + } + + // Transfer done + if (intsts & PDMA_INTSTS_TDIF_Msk) { + uint32_t tdsts = PDMA_GET_TD_STS(); + // Clear all transfer done flags + PDMA_CLR_TD_FLAG(tdsts); + + while (tdsts) { + int chn_id = nu_ctz(tdsts); + if (dma_chn_mask & (1 << chn_id)) { + struct nu_dma_chn_s *dma_chn = dma_chn_arr + chn_id; + if (dma_chn->handler && (dma_chn->event & DMA_EVENT_TRANSFER_DONE)) { + dma_chn->handler(dma_chn->id, DMA_EVENT_TRANSFER_DONE); + } + } + tdsts &= ~(1 << chn_id); + } + } + + // Table empty + if (intsts & PDMA_INTSTS_TEIF_Msk) { + uint32_t scatsts = PDMA_GET_EMPTY_STS(); + // Clear all table empty flags + PDMA_CLR_EMPTY_FLAG(scatsts); + } + + // Timeout + uint32_t reqto = intsts & PDMA_INTSTS_REQTOFn_Msk; + if (reqto) { + // Clear all Timeout flags + PDMA->INTSTS = reqto; + + while (reqto) { + int chn_id = nu_ctz(reqto) >> PDMA_INTSTS_REQTOFn_Pos; + if (dma_chn_mask & (1 << chn_id)) { + struct nu_dma_chn_s *dma_chn = dma_chn_arr + chn_id; + if (dma_chn->handler && (dma_chn->event & DMA_EVENT_TIMEOUT)) { + dma_chn->handler(dma_chn->id, DMA_EVENT_TIMEOUT); + } + } + reqto &= ~(1 << (chn_id + PDMA_INTSTS_REQTOFn_Pos)); + } + } +} diff --git a/targets/TARGET_NUVOTON/TARGET_M451/gpio_api.c b/targets/TARGET_NUVOTON/TARGET_M451/gpio_api.c new file mode 100644 index 00000000000..39f4e8e30ba --- /dev/null +++ b/targets/TARGET_NUVOTON/TARGET_M451/gpio_api.c @@ -0,0 +1,86 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gpio_api.h" +#include "mbed_assert.h" +#include "pinmap.h" +#include "mbed_error.h" +#include "PeripheralPins.h" + +uint32_t gpio_set(PinName pin) +{ + if (pin == (PinName) NC) { + return 0; + } + + uint32_t pin_index = NU_PINNAME_TO_PIN(pin); + +#if 1 + pin_function(pin, 0 << NU_MFP_POS(pin_index)); +#else + pinmap_pinout(pin, PinMap_GPIO); +#endif + + return (uint32_t)(1 << pin_index); // Return the pin mask +} + +void gpio_init(gpio_t *obj, PinName pin) +{ + obj->pin = pin; + + if (obj->pin == (PinName) NC) { + return; + } + + obj->mask = gpio_set(pin); +} + +void gpio_mode(gpio_t *obj, PinMode mode) +{ + if (obj->pin == (PinName) NC) { + return; + } + + pin_mode(obj->pin, mode); +} + +void gpio_dir(gpio_t *obj, PinDirection direction) +{ + if (obj->pin == (PinName) NC) { + return; + } + + uint32_t pin_index = NU_PINNAME_TO_PIN(obj->pin); + uint32_t port_index = NU_PINNAME_TO_PORT(obj->pin); + GPIO_T *gpio_base = NU_PORT_BASE(port_index); + + uint32_t mode_intern = GPIO_MODE_INPUT; + + switch (direction) { + case PIN_INPUT: + mode_intern = GPIO_MODE_INPUT; + break; + + case PIN_OUTPUT: + mode_intern = GPIO_MODE_OUTPUT; + break; + + default: + return; + } + + GPIO_SetMode(gpio_base, 1 << pin_index, mode_intern); +} diff --git a/targets/TARGET_NUVOTON/TARGET_M451/gpio_irq_api.c b/targets/TARGET_NUVOTON/TARGET_M451/gpio_irq_api.c new file mode 100644 index 00000000000..c2adef9954b --- /dev/null +++ b/targets/TARGET_NUVOTON/TARGET_M451/gpio_irq_api.c @@ -0,0 +1,205 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "gpio_irq_api.h" + +#if DEVICE_INTERRUPTIN + +#include "gpio_api.h" +#include "cmsis.h" +#include "pinmap.h" +#include "PeripheralPins.h" +#include "nu_bitutil.h" + +#define NU_MAX_PIN_PER_PORT 16 + +struct nu_gpio_irq_var { + gpio_irq_t * obj_arr[NU_MAX_PIN_PER_PORT]; + IRQn_Type irq_n; + void (*vec)(void); +}; + +static void gpio_irq_0_vec(void); +static void gpio_irq_1_vec(void); +static void gpio_irq_2_vec(void); +static void gpio_irq_3_vec(void); +static void gpio_irq_4_vec(void); +static void gpio_irq_5_vec(void); +static void gpio_irq(struct nu_gpio_irq_var *var); + +//EINT0_IRQn +static struct nu_gpio_irq_var gpio_irq_var_arr[] = { + {{NULL}, GPA_IRQn, gpio_irq_0_vec}, + {{NULL}, GPB_IRQn, gpio_irq_1_vec}, + {{NULL}, GPC_IRQn, gpio_irq_2_vec}, + {{NULL}, GPD_IRQn, gpio_irq_3_vec}, + {{NULL}, GPE_IRQn, gpio_irq_4_vec}, + {{NULL}, GPF_IRQn, gpio_irq_5_vec} +}; + +#define NU_MAX_PORT (sizeof (gpio_irq_var_arr) / sizeof (gpio_irq_var_arr[0])) + +int gpio_irq_init(gpio_irq_t *obj, PinName pin, gpio_irq_handler handler, uint32_t id) +{ + if (pin == NC) { + return -1; + } + + uint32_t pin_index = NU_PINNAME_TO_PIN(pin); + uint32_t port_index = NU_PINNAME_TO_PORT(pin); + if (pin_index >= NU_MAX_PIN_PER_PORT || port_index >= NU_MAX_PORT) { + return -1; + } + + obj->pin = pin; + obj->irq_handler = (uint32_t) handler; + obj->irq_id = id; + + //gpio_set(pin); + + // Configure de-bounce clock source and sampling cycle time + GPIO_SET_DEBOUNCE_TIME(GPIO_DBCTL_DBCLKSRC_LIRC, GPIO_DBCTL_DBCLKSEL_16); + + struct nu_gpio_irq_var *var = gpio_irq_var_arr + port_index; + + MBED_ASSERT(pin_index < NU_MAX_PIN_PER_PORT); + var->obj_arr[pin_index] = obj; + + // NOTE: InterruptIn requires IRQ enabled by default. + gpio_irq_enable(obj); + + return 0; +} + +void gpio_irq_free(gpio_irq_t *obj) +{ + uint32_t pin_index = NU_PINNAME_TO_PIN(obj->pin); + uint32_t port_index = NU_PINNAME_TO_PORT(obj->pin); + struct nu_gpio_irq_var *var = gpio_irq_var_arr + port_index; + + NVIC_DisableIRQ(var->irq_n); + NU_PORT_BASE(port_index)->INTEN = 0; + + MBED_ASSERT(pin_index < NU_MAX_PIN_PER_PORT); + var->obj_arr[pin_index] = NULL; +} + +void gpio_irq_set(gpio_irq_t *obj, gpio_irq_event event, uint32_t enable) +{ + uint32_t pin_index = NU_PINNAME_TO_PIN(obj->pin); + uint32_t port_index = NU_PINNAME_TO_PORT(obj->pin); + GPIO_T *gpio_base = NU_PORT_BASE(port_index); + + switch (event) { + case IRQ_RISE: + if (enable) { + GPIO_ENABLE_DEBOUNCE(gpio_base, 1 << pin_index); + GPIO_EnableInt(gpio_base, pin_index, GPIO_INT_RISING); + } + else { + gpio_base->INTEN &= ~(GPIO_INT_RISING << pin_index); + } + break; + + case IRQ_FALL: + if (enable) { + GPIO_ENABLE_DEBOUNCE(gpio_base, 1 << pin_index); + GPIO_EnableInt(gpio_base, pin_index, GPIO_INT_FALLING); + } + else { + gpio_base->INTEN &= ~(GPIO_INT_FALLING << pin_index); + } + break; + } +} + +void gpio_irq_enable(gpio_irq_t *obj) +{ + //uint32_t pin_index = NU_PINNAME_TO_PIN(obj->pin); + uint32_t port_index = NU_PINNAME_TO_PORT(obj->pin); + struct nu_gpio_irq_var *var = gpio_irq_var_arr + port_index; + + NVIC_SetVector(var->irq_n, (uint32_t) var->vec); + NVIC_EnableIRQ(var->irq_n); +} + +void gpio_irq_disable(gpio_irq_t *obj) +{ + //uint32_t pin_index = NU_PINNAME_TO_PIN(obj->pin); + uint32_t port_index = NU_PINNAME_TO_PORT(obj->pin); + struct nu_gpio_irq_var *var = gpio_irq_var_arr + port_index; + + NVIC_DisableIRQ(var->irq_n); +} + +static void gpio_irq_0_vec(void) +{ + gpio_irq(gpio_irq_var_arr + 0); +} +static void gpio_irq_1_vec(void) +{ + gpio_irq(gpio_irq_var_arr + 1); +} +static void gpio_irq_2_vec(void) +{ + gpio_irq(gpio_irq_var_arr + 2); +} +static void gpio_irq_3_vec(void) +{ + gpio_irq(gpio_irq_var_arr + 3); +} +static void gpio_irq_4_vec(void) +{ + gpio_irq(gpio_irq_var_arr + 4); +} +static void gpio_irq_5_vec(void) +{ + gpio_irq(gpio_irq_var_arr + 5); +} + +static void gpio_irq(struct nu_gpio_irq_var *var) +{ + uint32_t port_index = var->irq_n - GPA_IRQn; + GPIO_T *gpio_base = NU_PORT_BASE(port_index); + + uint32_t intsrc = gpio_base->INTSRC; + uint32_t inten = gpio_base->INTEN; + while (intsrc) { + int pin_index = nu_ctz(intsrc); + gpio_irq_t *obj = var->obj_arr[pin_index]; + if (inten & (GPIO_INT_RISING << pin_index)) { + if (GPIO_PIN_DATA(port_index, pin_index)) { + if (obj->irq_handler) { + ((gpio_irq_handler) obj->irq_handler)(obj->irq_id, IRQ_RISE); + } + } + } + + if (inten & (GPIO_INT_FALLING << pin_index)) { + if (! GPIO_PIN_DATA(port_index, pin_index)) { + if (obj->irq_handler) { + ((gpio_irq_handler) obj->irq_handler)(obj->irq_id, IRQ_FALL); + } + } + } + + intsrc &= ~(1 << pin_index); + } + // Clear all interrupt flags + gpio_base->INTSRC = gpio_base->INTSRC; +} + +#endif diff --git a/targets/TARGET_NUVOTON/TARGET_M451/gpio_object.h b/targets/TARGET_NUVOTON/TARGET_M451/gpio_object.h new file mode 100644 index 00000000000..282bae437b7 --- /dev/null +++ b/targets/TARGET_NUVOTON/TARGET_M451/gpio_object.h @@ -0,0 +1,57 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MBED_GPIO_OBJECT_H +#define MBED_GPIO_OBJECT_H + +#include "mbed_assert.h" +#include "cmsis.h" +#include "PortNames.h" +#include "PeripheralNames.h" +#include "PinNames.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef struct { + PinName pin; + uint32_t mask; +} gpio_t; + +static inline void gpio_write(gpio_t *obj, int value) +{ + MBED_ASSERT(obj->pin != (PinName)NC); + uint32_t pin_index = NU_PINNAME_TO_PIN(obj->pin); + uint32_t port_index = NU_PINNAME_TO_PORT(obj->pin); + + GPIO_PIN_DATA(port_index, pin_index) = value ? 1 : 0; +} + +static inline int gpio_read(gpio_t *obj) +{ + MBED_ASSERT(obj->pin != (PinName)NC); + uint32_t pin_index = NU_PINNAME_TO_PIN(obj->pin); + uint32_t port_index = NU_PINNAME_TO_PORT(obj->pin); + + return (GPIO_PIN_DATA(port_index, pin_index) ? 1 : 0); +} + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/targets/TARGET_NUVOTON/TARGET_M451/i2c_api.c b/targets/TARGET_NUVOTON/TARGET_M451/i2c_api.c new file mode 100644 index 00000000000..92b5c7a9f0f --- /dev/null +++ b/targets/TARGET_NUVOTON/TARGET_M451/i2c_api.c @@ -0,0 +1,1025 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "i2c_api.h" + +#if DEVICE_I2C + +#include "cmsis.h" +#include "pinmap.h" +#include "PeripheralPins.h" +#include "nu_modutil.h" +#include "nu_miscutil.h" +#include "nu_bitutil.h" +#include "critical.h" + +#define NU_I2C_DEBUG 0 + +#if NU_I2C_DEBUG +struct i2c_s MY_I2C; +struct i2c_s MY_I2C_2; +char MY_I2C_STATUS[64]; +int MY_I2C_STATUS_POS = 0; +uint32_t MY_I2C_TIMEOUT; +uint32_t MY_I2C_ELAPSED; +uint32_t MY_I2C_T1; +uint32_t MY_I2C_T2; +#endif + +struct nu_i2c_var { + i2c_t * obj; + void (*vec)(void); +}; + +static void i2c0_vec(void); +static void i2c1_vec(void); +static void i2c_irq(i2c_t *obj); +static void i2c_fsm_reset(i2c_t *obj, uint32_t i2c_ctl); + +static struct nu_i2c_var i2c0_var = { + .obj = NULL, + .vec = i2c0_vec, +}; +static struct nu_i2c_var i2c1_var = { + .obj = NULL, + .vec = i2c1_vec, +}; + +static uint32_t i2c_modinit_mask = 0; + +static const struct nu_modinit_s i2c_modinit_tab[] = { + {I2C_0, I2C0_MODULE, 0, 0, I2C0_RST, I2C0_IRQn, &i2c0_var}, + {I2C_1, I2C1_MODULE, 0, 0, I2C1_RST, I2C1_IRQn, &i2c1_var}, + + {NC, 0, 0, 0, 0, (IRQn_Type) 0, NULL} +}; + +static int i2c_do_tran(i2c_t *obj, char *buf, int length, int read, int naklastdata); +static int i2c_do_write(i2c_t *obj, char data, int naklastdata); +static int i2c_do_read(i2c_t *obj, char *data, int naklastdata); +static int i2c_do_trsn(i2c_t *obj, uint32_t i2c_ctl, int sync); +#define NU_I2C_TIMEOUT_STAT_INT 500000 +#define NU_I2C_TIMEOUT_STOP 500000 +static int i2c_poll_status_timeout(i2c_t *obj, int (*is_status)(i2c_t *obj), uint32_t timeout); +static int i2c_poll_tran_heatbeat_timeout(i2c_t *obj, uint32_t timeout); +static int i2c_is_stat_int(i2c_t *obj); +static int i2c_is_stop_det(i2c_t *obj); +static int i2c_is_trsn_done(i2c_t *obj); +static int i2c_is_tran_started(i2c_t *obj); +static int i2c_addr2data(int address, int read); +#if DEVICE_I2CSLAVE +// Convert mbed address to BSP address. +static int i2c_addr2bspaddr(int address); +#endif // #if DEVICE_I2CSLAVE +static void i2c_enable_int(i2c_t *obj); +static void i2c_disable_int(i2c_t *obj); +static int i2c_set_int(i2c_t *obj, int inten); + + +#if DEVICE_I2C_ASYNCH +static void i2c_buffer_set(i2c_t *obj, const void *tx, size_t tx_length, void *rx, size_t rx_length); +static void i2c_enable_vector_interrupt(i2c_t *obj, uint32_t handler, int enable); +static void i2c_rollback_vector_interrupt(i2c_t *obj); +#endif + +#define TRANCTRL_STARTED (1) +#define TRANCTRL_NAKLASTDATA (1 << 1) + +void i2c_init(i2c_t *obj, PinName sda, PinName scl) +{ + uint32_t i2c_sda = pinmap_peripheral(sda, PinMap_I2C_SDA); + uint32_t i2c_scl = pinmap_peripheral(scl, PinMap_I2C_SCL); + obj->i2c.i2c = (I2CName) pinmap_merge(i2c_sda, i2c_scl); + MBED_ASSERT((int)obj->i2c.i2c != NC); + + const struct nu_modinit_s *modinit = get_modinit(obj->i2c.i2c, i2c_modinit_tab); + MBED_ASSERT(modinit != NULL); + MBED_ASSERT(modinit->modname == obj->i2c.i2c); + + // Reset this module + SYS_ResetModule(modinit->rsetidx); + + // Enable IP clock + CLK_EnableModuleClock(modinit->clkidx); + + pinmap_pinout(sda, PinMap_I2C_SDA); + pinmap_pinout(scl, PinMap_I2C_SCL); + +#if DEVICE_I2C_ASYNCH + obj->i2c.dma_usage = DMA_USAGE_NEVER; + obj->i2c.event = 0; + obj->i2c.stop = 0; + obj->i2c.address = 0; +#endif + + // NOTE: Setting I2C bus clock to 100 KHz is required. See I2C::I2C in common/I2C.cpp. + I2C_Open((I2C_T *) NU_MODBASE(obj->i2c.i2c), 100000); + // NOTE: INTEN bit and FSM control bits (STA, STO, SI, AA) are packed in one register CTL. We cannot control interrupt through + // INTEN bit without impacting FSM control bits. Use NVIC_EnableIRQ/NVIC_DisableIRQ instead for interrupt control. + I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); + i2c_base->CTL |= (I2C_CTL_INTEN_Msk | I2C_CTL_I2CEN_Msk); + + // Enable sync-moce vector interrupt. + struct nu_i2c_var *var = (struct nu_i2c_var *) modinit->var; + var->obj = obj; + obj->i2c.tran_ctrl = 0; + obj->i2c.stop = 0; + i2c_enable_vector_interrupt(obj, (uint32_t) var->vec, 1); + + // Mark this module to be inited. + int i = modinit - i2c_modinit_tab; + i2c_modinit_mask |= 1 << i; +} + +int i2c_start(i2c_t *obj) +{ + return i2c_do_trsn(obj, I2C_CTL_STA_Msk | I2C_CTL_SI_Msk, 1); +} + +int i2c_stop(i2c_t *obj) +{ + return i2c_do_trsn(obj, I2C_CTL_STO_Msk | I2C_CTL_SI_Msk, 1); +} + +void i2c_frequency(i2c_t *obj, int hz) +{ + I2C_SetBusClockFreq((I2C_T *) NU_MODBASE(obj->i2c.i2c), hz); +} + +int i2c_read(i2c_t *obj, int address, char *data, int length, int stop) +{ + int i; + + if (i2c_start(obj)) { + i2c_stop(obj); + return I2C_ERROR_BUS_BUSY; + } + + if (i2c_do_write(obj, i2c_addr2data(address, 1), 0)) { + i2c_stop(obj); + return I2C_ERROR_NO_SLAVE; + } + + // Read in bytes + length = i2c_do_tran(obj, data, length, 1, 1); + + // If not repeated start, send stop. + if (stop) { + i2c_stop(obj); + } + + return length; +} + +int i2c_write(i2c_t *obj, int address, const char *data, int length, int stop) +{ + int i; + + if (i2c_start(obj)) { + i2c_stop(obj); + return I2C_ERROR_BUS_BUSY; + } + + if (i2c_do_write(obj, i2c_addr2data(address, 0), 0)) { + i2c_stop(obj); + return I2C_ERROR_NO_SLAVE; + } + + // Write out bytes + length = i2c_do_tran(obj, (char *) data, length, 0, 1); + + if (stop) { + i2c_stop(obj); + } + + return length; +} + +void i2c_reset(i2c_t *obj) +{ + i2c_stop(obj); +} + +int i2c_byte_read(i2c_t *obj, int last) +{ + char data = 0; + + i2c_do_read(obj, &data, last); + return data; +} + +int i2c_byte_write(i2c_t *obj, int data) +{ + return i2c_do_write(obj, (data & 0xFF), 0); +} + +#if DEVICE_I2CSLAVE + +// See I2CSlave.h +#define NoData 0 // the slave has not been addressed +#define ReadAddressed 1 // the master has requested a read from this slave (slave = transmitter) +#define WriteGeneral 2 // the master is writing to all slave +#define WriteAddressed 3 // the master is writing to this slave (slave = receiver) + +void i2c_slave_mode(i2c_t *obj, int enable_slave) +{ + I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); + + i2c_disable_int(obj); + + obj->i2c.slaveaddr_state = NoData; + + // Switch to not addressed mode + I2C_SET_CONTROL_REG(i2c_base, I2C_CTL_SI_Msk | I2C_CTL_AA_Msk); + + i2c_enable_int(obj); +} + +int i2c_slave_receive(i2c_t *obj) +{ + int slaveaddr_state; + + i2c_disable_int(obj); + slaveaddr_state = obj->i2c.slaveaddr_state; + i2c_enable_int(obj); + + return slaveaddr_state; +} + +int i2c_slave_read(i2c_t *obj, char *data, int length) +{ + return i2c_do_tran(obj, data, length, 1, 1); +} + +int i2c_slave_write(i2c_t *obj, const char *data, int length) +{ + return i2c_do_tran(obj, (char *) data, length, 0, 1); +} + +void i2c_slave_address(i2c_t *obj, int idx, uint32_t address, uint32_t mask) +{ + I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); + + i2c_disable_int(obj); + + I2C_SetSlaveAddr(i2c_base, 0, i2c_addr2bspaddr(address), I2C_GCMODE_ENABLE); + + i2c_enable_int(obj); +} + +static int i2c_addr2bspaddr(int address) +{ + return (address >> 1); +} + +#endif // #if DEVICE_I2CSLAVE + +static void i2c_enable_int(i2c_t *obj) +{ + I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); + const struct nu_modinit_s *modinit = get_modinit(obj->i2c.i2c, i2c_modinit_tab); + + core_util_critical_section_enter(); + + // Enable I2C interrupt + NVIC_EnableIRQ(modinit->irq_n); + obj->i2c.inten = 1; + + core_util_critical_section_exit(); +} + +static void i2c_disable_int(i2c_t *obj) +{ + I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); + const struct nu_modinit_s *modinit = get_modinit(obj->i2c.i2c, i2c_modinit_tab); + + core_util_critical_section_enter(); + + // Disable I2C interrupt + NVIC_DisableIRQ(modinit->irq_n); + obj->i2c.inten = 0; + + core_util_critical_section_exit(); +} + +static int i2c_set_int(i2c_t *obj, int inten) +{ + I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); + int inten_back; + + core_util_critical_section_enter(); + + inten_back = obj->i2c.inten; + + core_util_critical_section_exit(); + + if (inten) { + i2c_enable_int(obj); + } + else { + i2c_disable_int(obj); + } + + return inten_back; +} + +int i2c_allow_powerdown(void) +{ + uint32_t modinit_mask = i2c_modinit_mask; + while (modinit_mask) { + int i2c_idx = nu_ctz(modinit_mask); + const struct nu_modinit_s *modinit = i2c_modinit_tab + i2c_idx; + struct nu_i2c_var *var = (struct nu_i2c_var *) modinit->var; + if (var->obj) { + // Disallow entering power-down mode if I2C transfer is enabled. + if (i2c_active(var->obj)) { + return 0; + } + } + modinit_mask &= ~(1 << i2c_idx); + } + + return 1; +} + +static int i2c_do_tran(i2c_t *obj, char *buf, int length, int read, int naklastdata) +{ + I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); + int err = 0; + int tran_len = 0; + + i2c_disable_int(obj); + obj->i2c.tran_ctrl = naklastdata ? (TRANCTRL_STARTED | TRANCTRL_NAKLASTDATA) : TRANCTRL_STARTED; + obj->i2c.tran_beg = buf; + obj->i2c.tran_pos = buf; + obj->i2c.tran_end = buf + length; + i2c_enable_int(obj); + + if (i2c_poll_tran_heatbeat_timeout(obj, NU_I2C_TIMEOUT_STAT_INT)) { + err = I2C_ERROR_BUS_BUSY; +#if NU_I2C_DEBUG + MY_I2C_2 = obj->i2c; + while (1); +#endif + } + else { + i2c_disable_int(obj); + obj->i2c.tran_ctrl = 0; + tran_len = obj->i2c.tran_pos - obj->i2c.tran_beg; + obj->i2c.tran_beg = NULL; + obj->i2c.tran_pos = NULL; + obj->i2c.tran_end = NULL; + i2c_enable_int(obj); + } + + return tran_len; +} + +static int i2c_do_write(i2c_t *obj, char data, int naklastdata) +{ + char data_[1]; + data_[0] = data; + return i2c_do_tran(obj, data_, 1, 0, naklastdata) == 1 ? 0 : I2C_ERROR_BUS_BUSY; +} + +static int i2c_do_read(i2c_t *obj, char *data, int naklastdata) +{ + return i2c_do_tran(obj, data, 1, 1, naklastdata) == 1 ? 0 : I2C_ERROR_BUS_BUSY; +} + +static int i2c_do_trsn(i2c_t *obj, uint32_t i2c_ctl, int sync) +{ + I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); + int err = 0; + + i2c_disable_int(obj); + + if (i2c_poll_status_timeout(obj, i2c_is_trsn_done, NU_I2C_TIMEOUT_STAT_INT)) { + err = I2C_ERROR_BUS_BUSY; +#if NU_I2C_DEBUG + MY_I2C_2 = obj->i2c; + while (1); +#endif + } + else { +#if 1 + // NOTE: Avoid duplicate Start/Stop. Otherwise, we may meet strange error. + uint32_t status = I2C_GET_STATUS(i2c_base); + + switch (status) { + case 0x08: // Start + case 0x10: // Master Repeat Start + if (i2c_ctl & I2C_CTL_STA_Msk) { + return 0; + } + else { + break; + } + case 0xF8: // Bus Released + if (i2c_ctl & (I2C_CTL_STA_Msk | I2C_CTL_STO_Msk) == I2C_CTL_STO_Msk) { + return 0; + } + else { + break; + } + } +#endif + I2C_SET_CONTROL_REG(i2c_base, i2c_ctl); + if (sync && i2c_poll_status_timeout(obj, i2c_is_trsn_done, NU_I2C_TIMEOUT_STAT_INT)) { + err = I2C_ERROR_BUS_BUSY; +#if NU_I2C_DEBUG + MY_I2C_2 = obj->i2c; + while (1); +#endif + } + } + + i2c_enable_int(obj); + + return err; +} + +static int i2c_poll_status_timeout(i2c_t *obj, int (*is_status)(i2c_t *obj), uint32_t timeout) +{ + uint32_t t1, t2, elapsed = 0; + int status_assert = 0; + + t1 = us_ticker_read(); + while (1) { + status_assert = is_status(obj); + if (status_assert) { + break; + } + + t2 = us_ticker_read(); + elapsed = (t2 > t1) ? (t2 - t1) : ((uint64_t) t2 + 0xFFFFFFFF - t1 + 1); + if (elapsed >= timeout) { +#if NU_I2C_DEBUG + MY_I2C_T1 = t1; + MY_I2C_T2 = t2; + MY_I2C_ELAPSED = elapsed; + MY_I2C_TIMEOUT = timeout; + MY_I2C_2 = obj->i2c; + while (1); +#endif + break; + } + } + + return (elapsed >= timeout); +} + +static int i2c_poll_tran_heatbeat_timeout(i2c_t *obj, uint32_t timeout) +{ + uint32_t t1, t2, elapsed = 0; + I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); + int tran_started; + char *tran_pos = NULL; + char *tran_pos2 = NULL; + + i2c_disable_int(obj); + tran_pos = obj->i2c.tran_pos; + i2c_enable_int(obj); + t1 = us_ticker_read(); + while (1) { + i2c_disable_int(obj); + tran_started = i2c_is_tran_started(obj); + i2c_enable_int(obj); + if (! tran_started) { // Transfer completed or stopped + break; + } + + i2c_disable_int(obj); + tran_pos2 = obj->i2c.tran_pos; + i2c_enable_int(obj); + t2 = us_ticker_read(); + if (tran_pos2 != tran_pos) { // Transfer on-going + t1 = t2; + tran_pos = tran_pos2; + continue; + } + + elapsed = (t2 > t1) ? (t2 - t1) : ((uint64_t) t2 + 0xFFFFFFFF - t1 + 1); + if (elapsed >= timeout) { // Transfer idle +#if NU_I2C_DEBUG + MY_I2C = obj->i2c; + MY_I2C_T1 = t1; + MY_I2C_T2 = t2; + MY_I2C_ELAPSED = elapsed; + MY_I2C_TIMEOUT = timeout; + MY_I2C_2 = obj->i2c; + while (1); +#endif + break; + } + } + + return (elapsed >= timeout); +} +static int i2c_is_stat_int(i2c_t *obj) +{ + I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); + + return !! (i2c_base->CTL & I2C_CTL_SI_Msk); +} + +static int i2c_is_stop_det(i2c_t *obj) +{ + I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); + + return ! (i2c_base->CTL & I2C_CTL_STO_Msk); +} + +static int i2c_is_trsn_done(i2c_t *obj) +{ + I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); + int i2c_int; + uint32_t status; + int inten_back; + + inten_back = i2c_set_int(obj, 0); + i2c_int = !! (i2c_base->CTL & I2C_CTL_SI_Msk); + status = I2C_GET_STATUS(i2c_base); + i2c_set_int(obj, inten_back); + + return (i2c_int || status == 0xF8); +} + +static int i2c_is_tran_started(i2c_t *obj) +{ + I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); + int started; + int inten_back; + + inten_back = i2c_set_int(obj, 0); + started = !! (obj->i2c.tran_ctrl & TRANCTRL_STARTED); + i2c_set_int(obj, inten_back); + + return started; +} + +static int i2c_addr2data(int address, int read) +{ + return read ? (address | 1) : (address & 0xFE); +} + +static void i2c0_vec(void) +{ + i2c_irq(i2c0_var.obj); +} +static void i2c1_vec(void) +{ + i2c_irq(i2c1_var.obj); +} + +static void i2c_irq(i2c_t *obj) +{ + I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); + uint32_t status; + int data_recv = 0; + + if (I2C_GET_TIMEOUT_FLAG(i2c_base)) { + I2C_ClearTimeoutFlag(i2c_base); + return; + } + + status = I2C_GET_STATUS(i2c_base); +#if NU_I2C_DEBUG + if (MY_I2C_STATUS_POS < (sizeof (MY_I2C_STATUS) / sizeof (MY_I2C_STATUS[0]))) { + MY_I2C_STATUS[MY_I2C_STATUS_POS ++] = status; + } + else { + memset(MY_I2C_STATUS, 0x00, sizeof (MY_I2C_STATUS)); + MY_I2C_STATUS_POS = 0; + } +#endif + + switch (status) { + // Master Transmit + case 0x28: // Master Transmit Data ACK + case 0x18: // Master Transmit Address ACK + case 0x08: // Start + case 0x10: // Master Repeat Start + if ((obj->i2c.tran_ctrl & TRANCTRL_STARTED) && obj->i2c.tran_pos) { + if (obj->i2c.tran_pos < obj->i2c.tran_end) { + I2C_SET_DATA(i2c_base, *obj->i2c.tran_pos ++); + I2C_SET_CONTROL_REG(i2c_base, I2C_CTL_SI_Msk | I2C_CTL_AA_Msk); + } + else { + if (status == 0x18) { + obj->i2c.tran_ctrl &= ~TRANCTRL_STARTED; + i2c_disable_int(obj); + break; + } + // Go Master Repeat Start + i2c_fsm_reset(obj, I2C_CTL_STA_Msk | I2C_CTL_SI_Msk); + } + } + else { + i2c_disable_int(obj); + } + break; + case 0x30: // Master Transmit Data NACK + case 0x20: // Master Transmit Address NACK + // Go Master Repeat Start + i2c_fsm_reset(obj, I2C_CTL_STA_Msk | I2C_CTL_SI_Msk); + break; + case 0x38: // Master Arbitration Lost + i2c_fsm_reset(obj, I2C_CTL_SI_Msk | I2C_CTL_AA_Msk); + break; + + case 0x48: // Master Receive Address NACK + // Go Master Repeat Start + i2c_fsm_reset(obj, I2C_CTL_STA_Msk | I2C_CTL_SI_Msk); + break; + case 0x40: // Master Receive Address ACK + case 0x50: // Master Receive Data ACK + case 0x58: // Master Receive Data NACK + if ((obj->i2c.tran_ctrl & TRANCTRL_STARTED) && obj->i2c.tran_pos) { + if (obj->i2c.tran_pos < obj->i2c.tran_end) { + if (status == 0x50 || status == 0x58) { + *obj->i2c.tran_pos ++ = I2C_GET_DATA(i2c_base); + } + + if (status == 0x58) { +#if NU_I2C_DEBUG + if (obj->i2c.tran_pos != obj->i2c.tran_end) { + MY_I2C = obj->i2c; + while (1); + } +#endif + // Go Master Repeat Start + i2c_fsm_reset(obj, I2C_CTL_STA_Msk | I2C_CTL_SI_Msk); + } + else { + uint32_t i2c_ctl = I2C_CTL_SI_Msk | I2C_CTL_AA_Msk; + if ((obj->i2c.tran_end - obj->i2c.tran_pos) == 1 && + obj->i2c.tran_ctrl & TRANCTRL_NAKLASTDATA) { + // Last data + i2c_ctl &= ~I2C_CTL_AA_Msk; + } + I2C_SET_CONTROL_REG(i2c_base, i2c_ctl); + } + } + else { + obj->i2c.tran_ctrl &= ~TRANCTRL_STARTED; + i2c_disable_int(obj); + break; + } + } + else { + i2c_disable_int(obj); + } + break; + + //case 0x00: // Bus error + + // Slave Transmit + case 0xB8: // Slave Transmit Data ACK + case 0xA8: // Slave Transmit Address ACK + case 0xB0: // Slave Transmit Arbitration Lost + if ((obj->i2c.tran_ctrl & TRANCTRL_STARTED) && obj->i2c.tran_pos) { + if (obj->i2c.tran_pos < obj->i2c.tran_end) { + uint32_t i2c_ctl = I2C_CTL_SI_Msk | I2C_CTL_AA_Msk; + + I2C_SET_DATA(i2c_base, *obj->i2c.tran_pos ++); + if (obj->i2c.tran_pos == obj->i2c.tran_end && + obj->i2c.tran_ctrl & TRANCTRL_NAKLASTDATA) { + // Last data + i2c_ctl &= ~I2C_CTL_AA_Msk; + } + I2C_SET_CONTROL_REG(i2c_base, i2c_ctl); + } + else { + obj->i2c.tran_ctrl &= ~TRANCTRL_STARTED; + i2c_disable_int(obj); + break; + } + } + else { + i2c_disable_int(obj); + } + obj->i2c.slaveaddr_state = ReadAddressed; + break; + //case 0xA0: // Slave Transmit Repeat Start or Stop + case 0xC0: // Slave Transmit Data NACK + case 0xC8: // Slave Transmit Last Data ACK + obj->i2c.slaveaddr_state = NoData; + i2c_fsm_reset(obj, I2C_CTL_SI_Msk | I2C_CTL_AA_Msk); + break; + + // Slave Receive + case 0x80: // Slave Receive Data ACK + case 0x88: // Slave Receive Data NACK + case 0x60: // Slave Receive Address ACK + case 0x68: // Slave Receive Arbitration Lost + obj->i2c.slaveaddr_state = WriteAddressed; + if ((obj->i2c.tran_ctrl & TRANCTRL_STARTED) && obj->i2c.tran_pos) { + if (obj->i2c.tran_pos < obj->i2c.tran_end) { + if (status == 0x80 || status == 0x88) { + *obj->i2c.tran_pos ++ = I2C_GET_DATA(i2c_base); + } + + if (status == 0x88) { +#if NU_I2C_DEBUG + if (obj->i2c.tran_pos != obj->i2c.tran_end) { + MY_I2C = obj->i2c; + while (1); + } +#endif + obj->i2c.slaveaddr_state = NoData; + i2c_fsm_reset(obj, I2C_CTL_SI_Msk | I2C_CTL_AA_Msk); + } + else { + uint32_t i2c_ctl = I2C_CTL_SI_Msk | I2C_CTL_AA_Msk; + if ((obj->i2c.tran_end - obj->i2c.tran_pos) == 1 && + obj->i2c.tran_ctrl & TRANCTRL_NAKLASTDATA) { + // Last data + i2c_ctl &= ~I2C_CTL_AA_Msk; + } + I2C_SET_CONTROL_REG(i2c_base, i2c_ctl); + } + } + else { + obj->i2c.tran_ctrl &= ~TRANCTRL_STARTED; + i2c_disable_int(obj); + break; + } + } + else { + i2c_disable_int(obj); + } + break; + //case 0xA0: // Slave Receive Repeat Start or Stop + + // GC mode + //case 0xA0: // GC mode Repeat Start or Stop + case 0x90: // GC mode Data ACK + case 0x98: // GC mode Data NACK + case 0x70: // GC mode Address ACK + case 0x78: // GC mode Arbitration Lost + obj->i2c.slaveaddr_state = WriteAddressed; + if ((obj->i2c.tran_ctrl & TRANCTRL_STARTED) && obj->i2c.tran_pos) { + if (obj->i2c.tran_pos < obj->i2c.tran_end) { + if (status == 0x90 || status == 0x98) { + *obj->i2c.tran_pos ++ = I2C_GET_DATA(i2c_base); + } + + if (status == 0x98) { +#if NU_I2C_DEBUG + if (obj->i2c.tran_pos != obj->i2c.tran_end) { + MY_I2C = obj->i2c; + while (1); + } +#endif + obj->i2c.slaveaddr_state = NoData; + i2c_fsm_reset(obj, I2C_CTL_SI_Msk | I2C_CTL_AA_Msk); + } + else { + uint32_t i2c_ctl = I2C_CTL_SI_Msk | I2C_CTL_AA_Msk; + if ((obj->i2c.tran_end - obj->i2c.tran_pos) == 1 && + obj->i2c.tran_ctrl & TRANCTRL_NAKLASTDATA) { + // Last data + i2c_ctl &= ~I2C_CTL_AA_Msk; + } + I2C_SET_CONTROL_REG(i2c_base, i2c_ctl); + } + } + else { + obj->i2c.tran_ctrl &= ~TRANCTRL_STARTED; + i2c_disable_int(obj); + break; + } + } + else { + i2c_disable_int(obj); + } + break; + + case 0xF8: // Bus Released + break; + + default: + i2c_fsm_reset(obj, I2C_CTL_SI_Msk | I2C_CTL_AA_Msk); + } +} + +static void i2c_fsm_reset(i2c_t *obj, uint32_t i2c_ctl) +{ + I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); + + obj->i2c.stop = 0; + + obj->i2c.tran_ctrl = 0; + + I2C_SET_CONTROL_REG(i2c_base, i2c_ctl); + obj->i2c.slaveaddr_state = NoData; +} + +#if DEVICE_I2C_ASYNCH + +void i2c_transfer_asynch(i2c_t *obj, const void *tx, size_t tx_length, void *rx, size_t rx_length, uint32_t address, uint32_t stop, uint32_t handler, uint32_t event, DMAUsage hint) +{ + // NOTE: M451 I2C only supports 7-bit slave address. The mbed I2C address passed in is shifted left by 1 bit (7-bit addr << 1). + MBED_ASSERT((address & 0xFFFFFF00) == 0); + + // NOTE: First transmit and then receive. + + (void) hint; + obj->i2c.dma_usage = DMA_USAGE_NEVER; + obj->i2c.stop = stop; + obj->i2c.address = address; + obj->i2c.event = event; + i2c_buffer_set(obj, tx, tx_length, rx, rx_length); + + //I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); + + i2c_enable_vector_interrupt(obj, handler, 1); + i2c_start(obj); +} + +uint32_t i2c_irq_handler_asynch(i2c_t *obj) +{ + int event = 0; + + I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); + uint32_t status = I2C_GET_STATUS(i2c_base); + switch (status) { + case 0x08: // Start + case 0x10: {// Master Repeat Start + if (obj->tx_buff.buffer && obj->tx_buff.pos < obj->tx_buff.length) { + I2C_SET_DATA(i2c_base, (i2c_addr2data(obj->i2c.address, 0))); + I2C_SET_CONTROL_REG(i2c_base, I2C_CTL_SI_Msk); + } + else if (obj->rx_buff.buffer && obj->rx_buff.pos < obj->rx_buff.length) { + I2C_SET_DATA(i2c_base, (i2c_addr2data(obj->i2c.address, 1))); + I2C_SET_CONTROL_REG(i2c_base, I2C_CTL_SI_Msk); + } + else { + event = I2C_EVENT_TRANSFER_COMPLETE; + if (obj->i2c.stop) { + I2C_SET_CONTROL_REG(i2c_base, I2C_CTL_STO_Msk | I2C_CTL_SI_Msk); + } + } + break; + } + + case 0x18: // Master Transmit Address ACK + case 0x28: // Master Transmit Data ACK + if (obj->tx_buff.buffer && obj->tx_buff.pos < obj->tx_buff.length) { + uint8_t *tx = (uint8_t *)obj->tx_buff.buffer; + I2C_SET_DATA(i2c_base, tx[obj->tx_buff.pos ++]); + I2C_SET_CONTROL_REG(i2c_base, I2C_CTL_SI_Msk); + } + else if (obj->rx_buff.buffer && obj->rx_buff.pos < obj->rx_buff.length) { + I2C_SET_CONTROL_REG(i2c_base, I2C_CTL_STA_Msk | I2C_CTL_SI_Msk); + } + else { + event = I2C_EVENT_TRANSFER_COMPLETE; + if (obj->i2c.stop) { + I2C_SET_CONTROL_REG(i2c_base, I2C_CTL_STO_Msk | I2C_CTL_SI_Msk); + } + } + break; + + case 0x20: // Master Transmit Address NACK + event = I2C_EVENT_ERROR_NO_SLAVE; + if (obj->i2c.stop) { + I2C_SET_CONTROL_REG(i2c_base, I2C_CTL_STO_Msk | I2C_CTL_SI_Msk); + } + break; + + case 0x30: // Master Transmit Data NACK + if (obj->tx_buff.buffer && obj->tx_buff.pos < obj->tx_buff.length) { + event = I2C_EVENT_TRANSFER_EARLY_NACK; + I2C_SET_CONTROL_REG(i2c_base, I2C_CTL_STO_Msk | I2C_CTL_SI_Msk); + } + else if (obj->rx_buff.buffer && obj->rx_buff.pos < obj->rx_buff.length) { + I2C_SET_CONTROL_REG(i2c_base, I2C_CTL_STA_Msk | I2C_CTL_SI_Msk); + } + else { + event = I2C_EVENT_TRANSFER_COMPLETE; + if (obj->i2c.stop) { + I2C_SET_CONTROL_REG(i2c_base, I2C_CTL_STO_Msk | I2C_CTL_SI_Msk); + } + } + break; + + case 0x38: // Master Arbitration Lost + I2C_SET_CONTROL_REG(i2c_base, I2C_CTL_SI_Msk); // Enter not addressed SLV mode + event = I2C_EVENT_ERROR; + break; + + case 0x50: // Master Receive Data ACK + if (obj->rx_buff.buffer && obj->rx_buff.pos < obj->rx_buff.length) { + uint8_t *rx = (uint8_t *) obj->rx_buff.buffer; + rx[obj->rx_buff.pos ++] = I2C_GET_DATA(((I2C_T *) NU_MODBASE(obj->i2c.i2c))); + } + case 0x40: // Master Receive Address ACK + I2C_SET_CONTROL_REG(i2c_base, I2C_CTL_SI_Msk | ((obj->rx_buff.pos != obj->rx_buff.length - 1) ? I2C_CTL_AA_Msk : 0)); + break; + + case 0x48: // Master Receive Address NACK + event = I2C_EVENT_ERROR_NO_SLAVE; + if (obj->i2c.stop) { + I2C_SET_CONTROL_REG(i2c_base, I2C_CTL_STO_Msk | I2C_CTL_SI_Msk); + } + break; + + case 0x58: // Master Receive Data NACK + if (obj->rx_buff.buffer && obj->rx_buff.pos < obj->rx_buff.length) { + uint8_t *rx = (uint8_t *) obj->rx_buff.buffer; + rx[obj->rx_buff.pos ++] = I2C_GET_DATA(((I2C_T *) NU_MODBASE(obj->i2c.i2c))); + } + I2C_SET_CONTROL_REG(i2c_base, I2C_CTL_STA_Msk | I2C_CTL_SI_Msk); + break; + + case 0x00: // Bus error + event = I2C_EVENT_ERROR; + i2c_reset(obj); + break; + + default: + event = I2C_EVENT_ERROR; + if (obj->i2c.stop) { + I2C_SET_CONTROL_REG(i2c_base, I2C_CTL_STO_Msk | I2C_CTL_SI_Msk); + } + } + + if (event) { + i2c_rollback_vector_interrupt(obj); + } + + return (event & obj->i2c.event); +} + +uint8_t i2c_active(i2c_t *obj) +{ + const struct nu_modinit_s *modinit = get_modinit(obj->i2c.i2c, i2c_modinit_tab); + MBED_ASSERT(modinit != NULL); + MBED_ASSERT(modinit->modname == obj->i2c.i2c); + + // Vector will be changed for async transfer. Use it to judge if async transfer is on-going. + uint32_t vec = NVIC_GetVector(modinit->irq_n); + struct nu_i2c_var *var = (struct nu_i2c_var *) modinit->var; + return (vec && vec != (uint32_t) var->vec); +} + +void i2c_abort_asynch(i2c_t *obj) +{ + i2c_rollback_vector_interrupt(obj); + i2c_stop(obj); +} + +static void i2c_buffer_set(i2c_t *obj, const void *tx, size_t tx_length, void *rx, size_t rx_length) +{ + obj->tx_buff.buffer = (void *) tx; + obj->tx_buff.length = tx_length; + obj->tx_buff.pos = 0; + obj->rx_buff.buffer = rx; + obj->rx_buff.length = rx_length; + obj->rx_buff.pos = 0; +} + +static void i2c_enable_vector_interrupt(i2c_t *obj, uint32_t handler, int enable) +{ + const struct nu_modinit_s *modinit = get_modinit(obj->i2c.i2c, i2c_modinit_tab); + MBED_ASSERT(modinit != NULL); + MBED_ASSERT(modinit->modname == obj->i2c.i2c); + + if (enable) { + NVIC_SetVector(modinit->irq_n, handler); + i2c_enable_int(obj); + } + else { + i2c_disable_int(obj); + } + +} + +static void i2c_rollback_vector_interrupt(i2c_t *obj) +{ + const struct nu_modinit_s *modinit = get_modinit(obj->i2c.i2c, i2c_modinit_tab); + MBED_ASSERT(modinit != NULL); + MBED_ASSERT(modinit->modname == obj->i2c.i2c); + + struct nu_i2c_var *var = (struct nu_i2c_var *) modinit->var; + i2c_enable_vector_interrupt(obj, (uint32_t) var->vec, 1); +} + +#endif + +#endif diff --git a/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c b/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c new file mode 100644 index 00000000000..3e510fc9eef --- /dev/null +++ b/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c @@ -0,0 +1,208 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "lp_ticker_api.h" + +#if DEVICE_LOWPOWERTIMER + +#include "sleep_api.h" +#include "nu_modutil.h" +#include "nu_miscutil.h" +#include "critical.h" + +// lp_ticker tick = us = timestamp +// clock of timer peripheral = ms +#define US_PER_TICK (1) + +#define MS_PER_TMR2_INT (1000 * 10) +#define TMR2_FIRE_FREQ (1000 / MS_PER_TMR2_INT) +#define MS_PER_TMR2_CLK 1 +#define TMR2_CLK_FREQ (1000 / MS_PER_TMR2_CLK) + +#define MS_PER_TMR3_CLK 1 +#define TMR3_CLK_FREQ (1000 / MS_PER_TMR3_CLK) + +static void tmr2_vec(void); +static void tmr3_vec(void); +static void lp_ticker_arm_cd(void); + +static int lp_ticker_inited = 0; +static volatile uint32_t counter_major = 0; +static volatile int cd_major_minor_ms = 0; +static volatile int cd_minor_ms = 0; +static volatile uint32_t wakeup_tick = (uint32_t) -1; + +// NOTE: To wake the system from power down mode, timer clock source must be ether LXT or LIRC. +// NOTE: TIMER_2 for normal counting and TIMER_3 for scheduled wakeup +static const struct nu_modinit_s timer2_modinit = {TIMER_2, TMR2_MODULE, CLK_CLKSEL1_TMR2SEL_LXT, 0, TMR2_RST, TMR2_IRQn, (void *) tmr2_vec}; +static const struct nu_modinit_s timer3_modinit = {TIMER_3, TMR3_MODULE, CLK_CLKSEL1_TMR3SEL_LXT, 0, TMR3_RST, TMR3_IRQn, (void *) tmr3_vec}; + +#define TMR_CMP_MIN 2 +#define TMR_CMP_MAX 0xFFFFFFu + +void lp_ticker_init(void) +{ + if (lp_ticker_inited) { + return; + } + lp_ticker_inited = 1; + + counter_major = 0; + cd_major_minor_ms = 0; + cd_minor_ms = 0; + wakeup_tick = (uint32_t) -1; + + // Reset module + SYS_ResetModule(timer2_modinit.rsetidx); + SYS_ResetModule(timer3_modinit.rsetidx); + + // Select IP clock source + CLK_SetModuleClock(timer2_modinit.clkidx, timer2_modinit.clksrc, timer2_modinit.clkdiv); + CLK_SetModuleClock(timer3_modinit.clkidx, timer3_modinit.clksrc, timer3_modinit.clkdiv); + // Enable IP clock + CLK_EnableModuleClock(timer2_modinit.clkidx); + CLK_EnableModuleClock(timer3_modinit.clkidx); + + // Configure clock + uint32_t clk_timer2 = TIMER_GetModuleClock((TIMER_T *) NU_MODBASE(timer2_modinit.modname)); + uint32_t prescale_timer2 = clk_timer2 / TMR2_CLK_FREQ - 1; + MBED_ASSERT((prescale_timer2 != (uint32_t) -1) && prescale_timer2 <= 127); + uint32_t cmp_timer2 = MS_PER_TMR2_INT / MS_PER_TMR2_CLK; + MBED_ASSERT(cmp_timer2 >= TMR_CMP_MIN && cmp_timer2 <= TMR_CMP_MAX); + // Continuous mode + // NOTE: TIMER_CTL_CNTDATEN_Msk exists in NUC472, but not in M451. In M451, TIMER_CNT is updated continuously by default. + ((TIMER_T *) NU_MODBASE(timer2_modinit.modname))->CTL = TIMER_PERIODIC_MODE | prescale_timer2/* | TIMER_CTL_CNTDATEN_Msk*/; + ((TIMER_T *) NU_MODBASE(timer2_modinit.modname))->CMP = cmp_timer2; + + // Set vector + NVIC_SetVector(timer2_modinit.irq_n, (uint32_t) timer2_modinit.var); + NVIC_SetVector(timer3_modinit.irq_n, (uint32_t) timer3_modinit.var); + + NVIC_EnableIRQ(timer2_modinit.irq_n); + NVIC_EnableIRQ(timer3_modinit.irq_n); + + TIMER_EnableInt((TIMER_T *) NU_MODBASE(timer2_modinit.modname)); + TIMER_EnableWakeup((TIMER_T *) NU_MODBASE(timer2_modinit.modname)); + + // Schedule wakeup to match semantics of lp_ticker_get_compare_match() + lp_ticker_set_interrupt(wakeup_tick); + + // Start timer + TIMER_Start((TIMER_T *) NU_MODBASE(timer2_modinit.modname)); +} + +timestamp_t lp_ticker_read() +{ + if (! lp_ticker_inited) { + lp_ticker_init(); + } + + TIMER_T * timer2_base = (TIMER_T *) NU_MODBASE(timer2_modinit.modname); + + do { + uint64_t major_minor_ms; + uint32_t minor_ms; + + // NOTE: As TIMER_CNT = TIMER_CMP and counter_major has increased by one, TIMER_CNT doesn't change to 0 for one tick time. + // NOTE: As TIMER_CNT = TIMER_CMP or TIMER_CNT = 0, counter_major (ISR) may not sync with TIMER_CNT. So skip and fetch stable one at the cost of 1 clock delay on this read. + do { + core_util_critical_section_enter(); + + // NOTE: Order of reading minor_us/carry here is significant. + minor_ms = TIMER_GetCounter(timer2_base) * MS_PER_TMR2_CLK; + uint32_t carry = (timer2_base->INTSTS & TIMER_INTSTS_TIF_Msk) ? 1 : 0; + // When TIMER_CNT approaches TIMER_CMP and will wrap soon, we may get carry but TIMER_CNT not wrapped. Hanlde carefully carry == 1 && TIMER_CNT is near TIMER_CMP. + if (carry && minor_ms > (MS_PER_TMR2_INT / 2)) { + major_minor_ms = (counter_major + 1) * MS_PER_TMR2_INT; + } + else { + major_minor_ms = (counter_major + carry) * MS_PER_TMR2_INT + minor_ms; + } + + core_util_critical_section_exit(); + } + while (minor_ms == 0 || minor_ms == MS_PER_TMR2_INT); + + // Add power-down compensation + return (major_minor_ms * 1000 / US_PER_TICK); + } + while (0); +} + +void lp_ticker_set_interrupt(timestamp_t timestamp) +{ + uint32_t now = lp_ticker_read(); + wakeup_tick = timestamp; + + TIMER_Stop((TIMER_T *) NU_MODBASE(timer3_modinit.modname)); + + int delta = (timestamp > now) ? (timestamp - now) : (uint32_t) ((uint64_t) timestamp + 0xFFFFFFFFu - now); + // NOTE: If this event was in the past, arm an interrupt to be triggered immediately. + cd_major_minor_ms = delta * US_PER_TICK / 1000; + + lp_ticker_arm_cd(); +} + +void lp_ticker_disable_interrupt(void) +{ + TIMER_DisableInt((TIMER_T *) NU_MODBASE(timer3_modinit.modname)); +} + +void lp_ticker_clear_interrupt(void) +{ + TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(timer3_modinit.modname)); +} + +static void tmr2_vec(void) +{ + TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(timer2_modinit.modname)); + TIMER_ClearWakeupFlag((TIMER_T *) NU_MODBASE(timer2_modinit.modname)); + counter_major ++; +} + +static void tmr3_vec(void) +{ + TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(timer3_modinit.modname)); + TIMER_ClearWakeupFlag((TIMER_T *) NU_MODBASE(timer3_modinit.modname)); + cd_major_minor_ms -= cd_minor_ms; + if (cd_major_minor_ms > 0) { + lp_ticker_arm_cd(); + } +} + +static void lp_ticker_arm_cd(void) +{ + TIMER_T * timer3_base = (TIMER_T *) NU_MODBASE(timer3_modinit.modname); + + // Reset 8-bit PSC counter, 24-bit up counter value and CNTEN bit + timer3_base->CTL |= TIMER_CTL_RSTCNT_Msk; + // One-shot mode, Clock = 1 KHz + uint32_t clk_timer3 = TIMER_GetModuleClock((TIMER_T *) NU_MODBASE(timer3_modinit.modname)); + uint32_t prescale_timer3 = clk_timer3 / TMR3_CLK_FREQ - 1; + MBED_ASSERT((prescale_timer3 != (uint32_t) -1) && prescale_timer3 <= 127); + // NOTE: TIMER_CTL_CNTDATEN_Msk exists in NUC472, but not in M451. In M451, TIMER_CNT is updated continuously by default. + timer3_base->CTL &= ~(TIMER_CTL_OPMODE_Msk | TIMER_CTL_PSC_Msk/* | TIMER_CTL_CNTDATEN_Msk*/); + timer3_base->CTL |= TIMER_ONESHOT_MODE | prescale_timer3/* | TIMER_CTL_CNTDATEN_Msk*/; + + cd_minor_ms = cd_major_minor_ms; + cd_minor_ms = NU_CLAMP(cd_minor_ms, TMR_CMP_MIN * MS_PER_TMR3_CLK, TMR_CMP_MAX * MS_PER_TMR3_CLK); + timer3_base->CMP = cd_minor_ms / MS_PER_TMR3_CLK; + + TIMER_EnableInt(timer3_base); + TIMER_EnableWakeup((TIMER_T *) NU_MODBASE(timer3_modinit.modname)); + TIMER_Start(timer3_base); +} +#endif diff --git a/targets/TARGET_NUVOTON/TARGET_M451/pinmap.c b/targets/TARGET_NUVOTON/TARGET_M451/pinmap.c new file mode 100644 index 00000000000..274c07fe256 --- /dev/null +++ b/targets/TARGET_NUVOTON/TARGET_M451/pinmap.c @@ -0,0 +1,83 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "mbed_assert.h" +#include "pinmap.h" +#include "PortNames.h" +#include "mbed_error.h" + +/** + * Configure pin multi-function + */ +void pin_function(PinName pin, int data) +{ + MBED_ASSERT(pin != (PinName)NC); + uint32_t pin_index = NU_PINNAME_TO_PIN(pin); + uint32_t port_index = NU_PINNAME_TO_PORT(pin); + __IO uint32_t *GPx_MFPx = ((__IO uint32_t *) &SYS->GPA_MFPL) + port_index * 2 + (pin_index / 8); + //uint32_t MFP_Pos = NU_MFP_POS(pin_index); + uint32_t MFP_Msk = NU_MFP_MSK(pin_index); + + // E.g.: SYS->GPA_MFPL = (SYS->GPA_MFPL & (~SYS_GPA_MFPL_PA0MFP_Msk) ) | SYS_GPA_MFPL_PA0MFP_SC0_CD ; + *GPx_MFPx = (*GPx_MFPx & (~MFP_Msk)) | data; + + // [TODO] Disconnect JTAG-DP + SW-DP signals. + // Warning: Need to reconnect under reset + //if ((pin == PA_13) || (pin == PA_14)) { + // + //} + //if ((pin == PA_15) || (pin == PB_3) || (pin == PB_4)) { + // + //} +} + +/** + * Configure pin pull-up/pull-down + */ +void pin_mode(PinName pin, PinMode mode) +{ + MBED_ASSERT(pin != (PinName)NC); + uint32_t pin_index = NU_PINNAME_TO_PIN(pin); + uint32_t port_index = NU_PINNAME_TO_PORT(pin); + GPIO_T *gpio_base = NU_PORT_BASE(port_index); + + uint32_t mode_intern = GPIO_MODE_INPUT; + + switch (mode) { + case PullUp: + mode_intern = GPIO_MODE_INPUT; + break; + + case PullDown: + case PullNone: + // NOTE: Not support + return; + + case PushPull: + mode_intern = GPIO_MODE_OUTPUT; + break; + + case OpenDrain: + mode_intern = GPIO_MODE_OPEN_DRAIN; + break; + + case Quasi: + mode_intern = GPIO_MODE_QUASI; + break; + } + + GPIO_SetMode(gpio_base, 1 << pin_index, mode_intern); +} diff --git a/targets/TARGET_NUVOTON/TARGET_M451/port_api.c b/targets/TARGET_NUVOTON/TARGET_M451/port_api.c new file mode 100644 index 00000000000..84278d0dbb1 --- /dev/null +++ b/targets/TARGET_NUVOTON/TARGET_M451/port_api.c @@ -0,0 +1,99 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "port_api.h" +#include "gpio_api.h" +#include "pinmap.h" +#include "mbed_error.h" + +#if DEVICE_PORTIN || DEVICE_PORTOUT || DEVICE_PORTINOUT + +PinName port_pin(PortName port, int pin_n) +{ + return (PinName) NU_PORT_N_PIN_TO_PINNAME(port, pin_n); +} + +void port_init(port_t *obj, PortName port, int mask, PinDirection dir) +{ + obj->port = port; + obj->mask = mask; + obj->direction = dir; + + uint32_t i; + obj->direction = dir; + for (i = 0; i < GPIO_PIN_MAX; i++) { + if (obj->mask & (1 << i)) { + gpio_set(port_pin(port, i)); + } + } + + port_dir(obj, dir); +} + +void port_dir(port_t *obj, PinDirection dir) +{ + uint32_t i; + obj->direction = dir; + for (i = 0; i < GPIO_PIN_MAX; i++) { + if (obj->mask & (1 << i)) { + if (dir == PIN_OUTPUT) { + GPIO_SetMode(NU_PORT_BASE(obj->port), 1 << i, GPIO_MODE_OUTPUT); + } else { // PIN_INPUT + GPIO_SetMode(NU_PORT_BASE(obj->port), 1 << i, GPIO_MODE_INPUT); + } + } + } +} + +void port_mode(port_t *obj, PinMode mode) +{ + uint32_t i; + + for (i = 0; i < GPIO_PIN_MAX; i++) { + if (obj->mask & (1 << i)) { + pin_mode(port_pin(obj->port, i), mode); + } + } +} + +void port_write(port_t *obj, int value) +{ + uint32_t i; + uint32_t port_index = obj->port; + + for (i = 0; i < GPIO_PIN_MAX; i++) { + if (obj->mask & (1 << i)) { + GPIO_PIN_DATA(port_index, i) = (value & obj->mask) ? 1 : 0; + } + } +} + +int port_read(port_t *obj) +{ + uint32_t i; + uint32_t port_index = obj->port; + int value = 0; + + for (i = 0; i < GPIO_PIN_MAX; i++) { + if (obj->mask & (1 << i)) { + value = value | (GPIO_PIN_DATA(port_index, i) << i); + } + } + + return value; +} + +#endif diff --git a/targets/TARGET_NUVOTON/TARGET_M451/pwmout_api.c b/targets/TARGET_NUVOTON/TARGET_M451/pwmout_api.c new file mode 100644 index 00000000000..f89dc4f6a00 --- /dev/null +++ b/targets/TARGET_NUVOTON/TARGET_M451/pwmout_api.c @@ -0,0 +1,204 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "pwmout_api.h" + +#if DEVICE_PWMOUT + +#include "cmsis.h" +#include "pinmap.h" +#include "PeripheralPins.h" +#include "nu_modutil.h" +#include "nu_miscutil.h" +#include "nu_bitutil.h" + +struct nu_pwm_var { + uint32_t en_msk; +}; + +static struct nu_pwm_var pwm0_var = { + .en_msk = 0 +}; + +static struct nu_pwm_var pwm1_var = { + .en_msk = 0 +}; + +static uint32_t pwm_modinit_mask = 0; + +static const struct nu_modinit_s pwm_modinit_tab[] = { + {PWM_0_0, PWM0_MODULE, CLK_CLKSEL2_PWM0SEL_PCLK0, 0, PWM0_RST, PWM0P0_IRQn, &pwm0_var}, + {PWM_0_1, PWM0_MODULE, CLK_CLKSEL2_PWM0SEL_PCLK0, 0, PWM0_RST, PWM0P0_IRQn, &pwm0_var}, + {PWM_0_2, PWM0_MODULE, CLK_CLKSEL2_PWM0SEL_PCLK0, 0, PWM0_RST, PWM0P1_IRQn, &pwm0_var}, + {PWM_0_3, PWM0_MODULE, CLK_CLKSEL2_PWM0SEL_PCLK0, 0, PWM0_RST, PWM0P1_IRQn, &pwm0_var}, + {PWM_0_4, PWM0_MODULE, CLK_CLKSEL2_PWM0SEL_PCLK0, 0, PWM0_RST, PWM0P2_IRQn, &pwm0_var}, + {PWM_0_5, PWM0_MODULE, CLK_CLKSEL2_PWM0SEL_PCLK0, 0, PWM0_RST, PWM0P2_IRQn, &pwm0_var}, + + {PWM_1_0, PWM1_MODULE, CLK_CLKSEL2_PWM1SEL_PCLK1, 0, PWM1_RST, PWM1P0_IRQn, &pwm1_var}, + {PWM_1_1, PWM1_MODULE, CLK_CLKSEL2_PWM1SEL_PCLK1, 0, PWM1_RST, PWM1P0_IRQn, &pwm1_var}, + {PWM_1_2, PWM1_MODULE, CLK_CLKSEL2_PWM1SEL_PCLK1, 0, PWM1_RST, PWM1P1_IRQn, &pwm1_var}, + {PWM_1_3, PWM1_MODULE, CLK_CLKSEL2_PWM1SEL_PCLK1, 0, PWM1_RST, PWM1P1_IRQn, &pwm1_var}, + {PWM_1_4, PWM1_MODULE, CLK_CLKSEL2_PWM1SEL_PCLK1, 0, PWM1_RST, PWM1P2_IRQn, &pwm1_var}, + {PWM_1_5, PWM1_MODULE, CLK_CLKSEL2_PWM1SEL_PCLK1, 0, PWM1_RST, PWM1P2_IRQn, &pwm1_var}, + + {NC, 0, 0, 0, 0, (IRQn_Type) 0, NULL} +}; + +static void pwmout_config(pwmout_t* obj); + +void pwmout_init(pwmout_t* obj, PinName pin) +{ + obj->pwm = (PWMName) pinmap_peripheral(pin, PinMap_PWM); + MBED_ASSERT((int) obj->pwm != NC); + + const struct nu_modinit_s *modinit = get_modinit(obj->pwm, pwm_modinit_tab); + MBED_ASSERT(modinit != NULL); + MBED_ASSERT(modinit->modname == obj->pwm); + + // NOTE: All channels (identified by PWMName) share a PWM module. This reset will also affect other channels of the same PWM module. + if (! ((struct nu_pwm_var *) modinit->var)->en_msk) { + // Reset this module if no channel enabled + SYS_ResetModule(modinit->rsetidx); + } + + PWM_T *pwm_base = (PWM_T *) NU_MODBASE(obj->pwm); + uint32_t chn = NU_MODSUBINDEX(obj->pwm); + + // NOTE: Channels 0/1/2/3/4/5 share a clock source. + if ((((struct nu_pwm_var *) modinit->var)->en_msk & 0x3F) == 0) { + // Select clock source of paired channels + CLK_SetModuleClock(modinit->clkidx, modinit->clksrc, modinit->clkdiv); + // Enable clock of paired channels + CLK_EnableModuleClock(modinit->clkidx); + } + + // Wire pinout + pinmap_pinout(pin, PinMap_PWM); + + // Default: period = 10 ms, pulse width = 0 ms + obj->period_us = 1000 * 10; + obj->pulsewidth_us = 0; + pwmout_config(obj); + + // Enable output of the specified PWM channel + PWM_EnableOutput(pwm_base, 1 << chn); + PWM_Start(pwm_base, 1 << chn); + + ((struct nu_pwm_var *) modinit->var)->en_msk |= 1 << chn; + + // Mark this module to be inited. + int i = modinit - pwm_modinit_tab; + pwm_modinit_mask |= 1 << i; +} + +void pwmout_free(pwmout_t* obj) +{ + PWM_T *pwm_base = (PWM_T *) NU_MODBASE(obj->pwm); + uint32_t chn = NU_MODSUBINDEX(obj->pwm); + PWM_ForceStop(pwm_base, 1 << chn); + + const struct nu_modinit_s *modinit = get_modinit(obj->pwm, pwm_modinit_tab); + MBED_ASSERT(modinit != NULL); + MBED_ASSERT(modinit->modname == obj->pwm); + ((struct nu_pwm_var *) modinit->var)->en_msk &= ~(1 << chn); + + + if ((((struct nu_pwm_var *) modinit->var)->en_msk & 0x3F) == 0) { + CLK_DisableModuleClock(modinit->clkidx); + } + + // Mark this module to be deinited. + int i = modinit - pwm_modinit_tab; + pwm_modinit_mask &= ~(1 << i); +} + +void pwmout_write(pwmout_t* obj, float value) +{ + obj->pulsewidth_us = NU_CLAMP((uint32_t) (value * obj->period_us), 0, obj->period_us); + pwmout_config(obj); +} + +float pwmout_read(pwmout_t* obj) +{ + return NU_CLAMP((((float) obj->pulsewidth_us) / obj->period_us), 0.0f, 1.0f); +} + +void pwmout_period(pwmout_t* obj, float seconds) +{ + pwmout_period_us(obj, seconds * 1000000.0f); +} + +void pwmout_period_ms(pwmout_t* obj, int ms) +{ + pwmout_period_us(obj, ms * 1000); +} + +// Set the PWM period, keeping the duty cycle the same. +void pwmout_period_us(pwmout_t* obj, int us) +{ + uint32_t period_us_old = obj->period_us; + uint32_t pulsewidth_us_old = obj->pulsewidth_us; + obj->period_us = us; + obj->pulsewidth_us = NU_CLAMP(obj->period_us * pulsewidth_us_old / period_us_old, 0, obj->period_us); + pwmout_config(obj); +} + +void pwmout_pulsewidth(pwmout_t* obj, float seconds) +{ + pwmout_pulsewidth_us(obj, seconds * 1000000.0f); +} + +void pwmout_pulsewidth_ms(pwmout_t* obj, int ms) +{ + pwmout_pulsewidth_us(obj, ms * 1000); +} + +void pwmout_pulsewidth_us(pwmout_t* obj, int us) +{ + obj->pulsewidth_us = NU_CLAMP(us, 0, obj->period_us); + pwmout_config(obj); +} + +int pwmout_allow_powerdown(void) +{ + uint32_t modinit_mask = pwm_modinit_mask; + while (modinit_mask) { + int pwm_idx = nu_ctz(modinit_mask); + const struct nu_modinit_s *modinit = pwm_modinit_tab + pwm_idx; + if (modinit->modname != NC) { + PWM_T *pwm_base = (PWM_T *) NU_MODBASE(modinit->modname); + uint32_t chn = NU_MODSUBINDEX(modinit->modname); + // Disallow entering power-down mode if PWM counter is enabled. + if ((pwm_base->CNTEN & (1 << chn)) && pwm_base->CMPDAT[chn]) { + return 0; + } + } + modinit_mask &= ~(1 << pwm_idx); + } + + return 1; +} + +static void pwmout_config(pwmout_t* obj) +{ + PWM_T *pwm_base = (PWM_T *) NU_MODBASE(obj->pwm); + uint32_t chn = NU_MODSUBINDEX(obj->pwm); + // NOTE: Support period < 1s + //PWM_ConfigOutputChannel(pwm_base, chn, 1000 * 1000 / obj->period_us, obj->pulsewidth_us * 100 / obj->period_us); + PWM_ConfigOutputChannel2(pwm_base, chn, 1000 * 1000, obj->pulsewidth_us * 100 / obj->period_us, obj->period_us); +} + +#endif diff --git a/targets/TARGET_NUVOTON/TARGET_M451/rtc_api.c b/targets/TARGET_NUVOTON/TARGET_M451/rtc_api.c new file mode 100644 index 00000000000..9ee5dfd1385 --- /dev/null +++ b/targets/TARGET_NUVOTON/TARGET_M451/rtc_api.c @@ -0,0 +1,121 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "rtc_api.h" + +#if DEVICE_RTC + +#include "wait_api.h" +#include "mbed_error.h" +#include "nu_modutil.h" +#include "nu_miscutil.h" + +#define YEAR0 1900 +//#define EPOCH_YR 1970 +static int rtc_inited = 0; + +static const struct nu_modinit_s rtc_modinit = {RTC_0, RTC_MODULE, 0, 0, 0, RTC_IRQn, NULL}; + +void rtc_init(void) +{ + if (rtc_inited) { + return; + } + rtc_inited = 1; + + // Enable IP clock + CLK_EnableModuleClock(rtc_modinit.clkidx); + + RTC_Open(NULL); +} + +void rtc_free(void) +{ + // FIXME +} + +int rtc_isenabled(void) +{ + return rtc_inited; +} + +/* + struct tm + tm_sec seconds after the minute 0-61 + tm_min minutes after the hour 0-59 + tm_hour hours since midnight 0-23 + tm_mday day of the month 1-31 + tm_mon months since January 0-11 + tm_year years since 1900 + tm_wday days since Sunday 0-6 + tm_yday days since January 1 0-365 + tm_isdst Daylight Saving Time flag +*/ + +time_t rtc_read(void) +{ + if (! rtc_inited) { + rtc_init(); + } + + S_RTC_TIME_DATA_T rtc_datetime; + RTC_GetDateAndTime(&rtc_datetime); + + struct tm timeinfo; + + // Convert struct tm to S_RTC_TIME_DATA_T + timeinfo.tm_year = rtc_datetime.u32Year - YEAR0; + timeinfo.tm_mon = rtc_datetime.u32Month - 1; + timeinfo.tm_mday = rtc_datetime.u32Day; + timeinfo.tm_wday = rtc_datetime.u32DayOfWeek; + timeinfo.tm_hour = rtc_datetime.u32Hour; + timeinfo.tm_min = rtc_datetime.u32Minute; + timeinfo.tm_sec = rtc_datetime.u32Second; + + // Convert to timestamp + time_t t = mktime(&timeinfo); + + return t; +} + +void rtc_write(time_t t) +{ + if (! rtc_inited) { + rtc_init(); + } + + // Convert timestamp to struct tm + struct tm *timeinfo = localtime(&t); + + S_RTC_TIME_DATA_T rtc_datetime; + + // Convert S_RTC_TIME_DATA_T to struct tm + rtc_datetime.u32Year = timeinfo->tm_year + YEAR0; + rtc_datetime.u32Month = timeinfo->tm_mon + 1; + rtc_datetime.u32Day = timeinfo->tm_mday; + rtc_datetime.u32DayOfWeek = timeinfo->tm_wday; + rtc_datetime.u32Hour = timeinfo->tm_hour; + rtc_datetime.u32Minute = timeinfo->tm_min; + rtc_datetime.u32Second = timeinfo->tm_sec; + rtc_datetime.u32TimeScale = RTC_CLOCK_24; + + // NOTE: Timing issue with write to RTC registers. This delay is empirical, not rational. + RTC_SetDateAndTime(&rtc_datetime); + //nu_nop(6000); + wait_us(100); +} + +#endif diff --git a/targets/TARGET_NUVOTON/TARGET_M451/serial_api.c b/targets/TARGET_NUVOTON/TARGET_M451/serial_api.c new file mode 100644 index 00000000000..274828c91c1 --- /dev/null +++ b/targets/TARGET_NUVOTON/TARGET_M451/serial_api.c @@ -0,0 +1,1053 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "serial_api.h" + +#if DEVICE_SERIAL + +#include "cmsis.h" +#include "mbed_error.h" +#include "mbed_assert.h" +#include "PeripheralPins.h" +#include "nu_modutil.h" +#include "nu_bitutil.h" + +#if DEVICE_SERIAL_ASYNCH +#include "dma_api.h" +#include "dma.h" +#endif + +struct nu_uart_var { + serial_t * obj; + uint32_t fifo_size_tx; + uint32_t fifo_size_rx; + void (*vec)(void); +#if DEVICE_SERIAL_ASYNCH + void (*vec_async)(void); + uint8_t pdma_perp_tx; + uint8_t pdma_perp_rx; +#endif +}; + +static void uart0_vec(void); +static void uart1_vec(void); +static void uart2_vec(void); +static void uart3_vec(void); +static void uart_irq(serial_t *obj); + +#if DEVICE_SERIAL_ASYNCH +static void uart0_vec_async(void); +static void uart1_vec_async(void); +static void uart2_vec_async(void); +static void uart3_vec_async(void); +static void uart_irq_async(serial_t *obj); + +static void uart_dma_handler_tx(uint32_t id, uint32_t event); +static void uart_dma_handler_rx(uint32_t id, uint32_t event); + +static void serial_tx_enable_interrupt(serial_t *obj, uint32_t address, uint8_t enable); +static void serial_rx_enable_interrupt(serial_t *obj, uint32_t address, uint8_t enable); +static int serial_write_async(serial_t *obj); +static int serial_read_async(serial_t *obj); + +static uint32_t serial_rx_event_check(serial_t *obj); +static uint32_t serial_tx_event_check(serial_t *obj); + +static int serial_is_tx_complete(serial_t *obj); +static void serial_tx_enable_event(serial_t *obj, int event, uint8_t enable); + +static void serial_tx_buffer_set(serial_t *obj, const void *tx, size_t length, uint8_t width); +static void serial_rx_buffer_set(serial_t *obj, void *rx, size_t length, uint8_t width); +static void serial_rx_set_char_match(serial_t *obj, uint8_t char_match); +static void serial_rx_enable_event(serial_t *obj, int event, uint8_t enable); +static int serial_is_rx_complete(serial_t *obj); + +static void serial_check_dma_usage(DMAUsage *dma_usage, int *dma_ch); +static int serial_is_irq_en(serial_t *obj, SerialIrq irq); +#endif + +static struct nu_uart_var uart0_var = { + .obj = NULL, + .fifo_size_tx = 16, + .fifo_size_rx = 16, + .vec = uart0_vec, +#if DEVICE_SERIAL_ASYNCH + .vec_async = uart0_vec_async, + .pdma_perp_tx = PDMA_UART0_TX, + .pdma_perp_rx = PDMA_UART0_RX +#endif +}; +static struct nu_uart_var uart1_var = { + .obj = NULL, + .fifo_size_tx = 16, + .fifo_size_rx = 16, + .vec = uart1_vec, +#if DEVICE_SERIAL_ASYNCH + .vec_async = uart1_vec_async, + .pdma_perp_tx = PDMA_UART1_TX, + .pdma_perp_rx = PDMA_UART1_RX +#endif +}; +static struct nu_uart_var uart2_var = { + .obj = NULL, + .fifo_size_tx = 16, + .fifo_size_rx = 16, + .vec = uart2_vec, +#if DEVICE_SERIAL_ASYNCH + .vec_async = uart2_vec_async, + .pdma_perp_tx = PDMA_UART2_TX, + .pdma_perp_rx = PDMA_UART2_RX +#endif +}; +static struct nu_uart_var uart3_var = { + .obj = NULL, + .fifo_size_tx = 16, + .fifo_size_rx = 16, + .vec = uart3_vec, +#if DEVICE_SERIAL_ASYNCH + .vec_async = uart3_vec_async, + .pdma_perp_tx = PDMA_UART3_TX, + .pdma_perp_rx = PDMA_UART3_RX +#endif +}; + + +int stdio_uart_inited = 0; +serial_t stdio_uart; +static uint32_t uart_modinit_mask = 0; + +static const struct nu_modinit_s uart_modinit_tab[] = { + {UART_0, UART0_MODULE, CLK_CLKSEL1_UARTSEL_HIRC, CLK_CLKDIV0_UART(1), UART0_RST, UART0_IRQn, &uart0_var}, + {UART_1, UART1_MODULE, CLK_CLKSEL1_UARTSEL_HIRC, CLK_CLKDIV0_UART(1), UART1_RST, UART1_IRQn, &uart1_var}, + {UART_2, UART2_MODULE, CLK_CLKSEL1_UARTSEL_HIRC, CLK_CLKDIV0_UART(1), UART2_RST, UART2_IRQn, &uart2_var}, + {UART_3, UART3_MODULE, CLK_CLKSEL1_UARTSEL_HIRC, CLK_CLKDIV0_UART(1), UART3_RST, UART3_IRQn, &uart3_var}, + + {NC, 0, 0, 0, 0, (IRQn_Type) 0, NULL} +}; + +extern void mbed_sdk_init(void); + +void serial_init(serial_t *obj, PinName tx, PinName rx) +{ + // NOTE: serial_init() gets called from _sys_open() timing of which is before main()/mbed_hal_init(). + mbed_sdk_init(); + + // Determine which UART_x the pins are used for + uint32_t uart_tx = pinmap_peripheral(tx, PinMap_UART_TX); + uint32_t uart_rx = pinmap_peripheral(rx, PinMap_UART_RX); + // Get the peripheral name (UART_x) from the pins and assign it to the object + obj->serial.uart = (UARTName) pinmap_merge(uart_tx, uart_rx); + MBED_ASSERT((int)obj->serial.uart != NC); + + const struct nu_modinit_s *modinit = get_modinit(obj->serial.uart, uart_modinit_tab); + MBED_ASSERT(modinit != NULL); + MBED_ASSERT(modinit->modname == obj->serial.uart); + + // Reset this module + SYS_ResetModule(modinit->rsetidx); + + // Select IP clock source + CLK_SetModuleClock(modinit->clkidx, modinit->clksrc, modinit->clkdiv); + // Enable IP clock + CLK_EnableModuleClock(modinit->clkidx); + + pinmap_pinout(tx, PinMap_UART_TX); + pinmap_pinout(rx, PinMap_UART_RX); + // FIXME: Why PullUp? + //if (tx != NC) { + // pin_mode(tx, PullUp); + //} + //if (rx != NC) { + // pin_mode(rx, PullUp); + //} + obj->serial.pin_tx = tx; + obj->serial.pin_rx = rx; + + // Configure the UART module and set its baudrate + serial_baud(obj, 9600); + // Configure data bits, parity, and stop bits + serial_format(obj, 8, ParityNone, 1); + + obj->serial.vec = ((struct nu_uart_var *) modinit->var)->vec; + +#if DEVICE_SERIAL_ASYNCH + obj->serial.dma_usage_tx = DMA_USAGE_NEVER; + obj->serial.dma_usage_rx = DMA_USAGE_NEVER; + obj->serial.event = 0; + obj->serial.dma_chn_id_tx = DMA_ERROR_OUT_OF_CHANNELS; + obj->serial.dma_chn_id_rx = DMA_ERROR_OUT_OF_CHANNELS; +#endif + + // For stdio management + if (obj == &stdio_uart) { + stdio_uart_inited = 1; + /* NOTE: Not required anymore because stdio_uart will be manually initialized in mbed-drivers/source/retarget.cpp from mbed beta */ + //memcpy(&stdio_uart, obj, sizeof(serial_t)); + } + + // Mark this module to be inited. + int i = modinit - uart_modinit_tab; + uart_modinit_mask |= 1 << i; +} + +void serial_free(serial_t *obj) +{ +#if DEVICE_SERIAL_ASYNCH + if (obj->serial.dma_chn_id_tx != DMA_ERROR_OUT_OF_CHANNELS) { + dma_channel_free(obj->serial.dma_chn_id_tx); + obj->serial.dma_chn_id_tx = DMA_ERROR_OUT_OF_CHANNELS; + } + if (obj->serial.dma_chn_id_rx != DMA_ERROR_OUT_OF_CHANNELS) { + dma_channel_free(obj->serial.dma_chn_id_rx); + obj->serial.dma_chn_id_rx = DMA_ERROR_OUT_OF_CHANNELS; + } +#endif + + UART_Close((UART_T *) NU_MODBASE(obj->serial.uart)); + + const struct nu_modinit_s *modinit = get_modinit(obj->serial.uart, uart_modinit_tab); + MBED_ASSERT(modinit != NULL); + MBED_ASSERT(modinit->modname == obj->serial.uart); + + UART_DISABLE_INT(((UART_T *) NU_MODBASE(obj->serial.uart)), (UART_INTEN_RDAIEN_Msk | UART_INTEN_THREIEN_Msk | UART_INTEN_RXTOIEN_Msk)); + NVIC_DisableIRQ(modinit->irq_n); + + // Disable IP clock + CLK_DisableModuleClock(modinit->clkidx); + + ((struct nu_uart_var *) modinit->var)->obj = NULL; + + if (obj == &stdio_uart) { + stdio_uart_inited = 0; + } + + // Mark this module to be deinited. + int i = modinit - uart_modinit_tab; + uart_modinit_mask &= ~(1 << i); +} + +void serial_baud(serial_t *obj, int baudrate) { + // Flush Tx FIFO. Otherwise, output data may get lost on this change. + while (! UART_IS_TX_EMPTY(((UART_T *) obj->serial.uart))); + + obj->serial.baudrate = baudrate; + UART_Open((UART_T *) NU_MODBASE(obj->serial.uart), baudrate); +} + +void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_bits) { + // Flush Tx FIFO. Otherwise, output data may get lost on this change. + while (! UART_IS_TX_EMPTY(((UART_T *) obj->serial.uart))); + + // TODO: Assert for not supported parity and data bits + obj->serial.databits = data_bits; + obj->serial.parity = parity; + obj->serial.stopbits = stop_bits; + + uint32_t databits_intern = (data_bits == 5) ? UART_WORD_LEN_5 : + (data_bits == 6) ? UART_WORD_LEN_6 : + (data_bits == 7) ? UART_WORD_LEN_7 : + UART_WORD_LEN_8; + uint32_t parity_intern = (parity == ParityOdd || parity == ParityForced1) ? UART_PARITY_ODD : + (parity == ParityEven || parity == ParityForced0) ? UART_PARITY_EVEN : + UART_PARITY_NONE; + uint32_t stopbits_intern = (stop_bits == 2) ? UART_STOP_BIT_2 : UART_STOP_BIT_1; + UART_SetLine_Config((UART_T *) NU_MODBASE(obj->serial.uart), + 0, // Don't change baudrate + databits_intern, + parity_intern, + stopbits_intern); +} + +#if DEVICE_SERIAL_FC + +void serial_set_flow_control(serial_t *obj, FlowControl type, PinName rxflow, PinName txflow) +{ + UART_T *uart_base = (UART_T *) NU_MODBASE(obj->serial.uart); + + // First, disable flow control completely. + uart_base->INTEN &= ~(UART_INTEN_ATORTSEN_Msk | UART_INTEN_ATOCTSEN_Msk); + + if ((type == FlowControlRTS || type == FlowControlRTSCTS) && rxflow != NC) { + // Check if RTS pin matches. + uint32_t uart_rts = pinmap_peripheral(rxflow, PinMap_UART_RTS); + MBED_ASSERT(uart_rts == obj->serial.uart); + // Enable the pin for RTS function + pinmap_pinout(rxflow, PinMap_UART_RTS); + // nRTS pin output is high level active + uart_base->MODEM = (uart_base->MODEM & ~UART_MODEM_RTSACTLV_Msk); + uart_base->FIFO = (uart_base->FIFO & ~UART_FIFO_RTSTRGLV_Msk) | UART_FIFO_RTSTRGLV_8BYTES; + // Enable RTS + uart_base->INTEN |= UART_INTEN_ATORTSEN_Msk; + } + + if ((type == FlowControlCTS || type == FlowControlRTSCTS) && txflow != NC) { + // Check if CTS pin matches. + uint32_t uart_cts = pinmap_peripheral(txflow, PinMap_UART_CTS); + MBED_ASSERT(uart_cts == obj->serial.uart); + // Enable the pin for CTS function + pinmap_pinout(txflow, PinMap_UART_CTS); + // nCTS pin input is high level active + uart_base->MODEMSTS = (uart_base->MODEMSTS & ~UART_MODEMSTS_CTSACTLV_Msk); + // Enable CTS + uart_base->INTEN |= UART_INTEN_ATOCTSEN_Msk; + } +} + +#endif //DEVICE_SERIAL_FC + +void serial_irq_handler(serial_t *obj, uart_irq_handler handler, uint32_t id) +{ + // Flush Tx FIFO. Otherwise, output data may get lost on this change. + while (! UART_IS_TX_EMPTY(((UART_T *) obj->serial.uart))); + + const struct nu_modinit_s *modinit = get_modinit(obj->serial.uart, uart_modinit_tab); + MBED_ASSERT(modinit != NULL); + MBED_ASSERT(modinit->modname == obj->serial.uart); + + ((struct nu_uart_var *) modinit->var)->obj = obj; + obj->serial.irq_handler = (uint32_t) handler; + obj->serial.irq_id = id; + + // Restore sync-mode vector + obj->serial.vec = ((struct nu_uart_var *) modinit->var)->vec; +} + +void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable) +{ + if (enable) { + const struct nu_modinit_s *modinit = get_modinit(obj->serial.uart, uart_modinit_tab); + MBED_ASSERT(modinit != NULL); + MBED_ASSERT(modinit->modname == obj->serial.uart); + + NVIC_SetVector(modinit->irq_n, (uint32_t) obj->serial.vec); + NVIC_EnableIRQ(modinit->irq_n); + + switch (irq) { + // NOTE: Setting inten_msk first to avoid race condition + case RxIrq: + obj->serial.inten_msk = obj->serial.inten_msk | (UART_INTEN_RDAIEN_Msk | UART_INTEN_RXTOIEN_Msk); + UART_ENABLE_INT(((UART_T *) NU_MODBASE(obj->serial.uart)), (UART_INTEN_RDAIEN_Msk | UART_INTEN_RXTOIEN_Msk)); + break; + case TxIrq: + obj->serial.inten_msk = obj->serial.inten_msk | UART_INTEN_THREIEN_Msk; + UART_ENABLE_INT(((UART_T *) NU_MODBASE(obj->serial.uart)), UART_INTEN_THREIEN_Msk); + break; + } + } else { // disable + switch (irq) { + case RxIrq: + UART_DISABLE_INT(((UART_T *) NU_MODBASE(obj->serial.uart)), (UART_INTEN_RDAIEN_Msk | UART_INTEN_RXTOIEN_Msk)); + obj->serial.inten_msk = obj->serial.inten_msk & ~(UART_INTEN_RDAIEN_Msk | UART_INTEN_RXTOIEN_Msk); + break; + case TxIrq: + UART_DISABLE_INT(((UART_T *) NU_MODBASE(obj->serial.uart)), UART_INTEN_THREIEN_Msk); + obj->serial.inten_msk = obj->serial.inten_msk & ~UART_INTEN_THREIEN_Msk; + break; + } + } +} + +int serial_getc(serial_t *obj) +{ + // TODO: Fix every byte access requires accompaniness of one interrupt. This degrades performance much. + while (! serial_readable(obj)); + int c = UART_READ(((UART_T *) NU_MODBASE(obj->serial.uart))); + + // Simulate clear of the interrupt flag + if (obj->serial.inten_msk & (UART_INTEN_RDAIEN_Msk | UART_INTEN_RXTOIEN_Msk)) { + UART_ENABLE_INT(((UART_T *) NU_MODBASE(obj->serial.uart)), (UART_INTEN_RDAIEN_Msk | UART_INTEN_RXTOIEN_Msk)); + } + + return c; +} + +void serial_putc(serial_t *obj, int c) +{ + // TODO: Fix every byte access requires accompaniness of one interrupt. This degrades performance much. + while (! serial_writable(obj)); + UART_WRITE(((UART_T *) NU_MODBASE(obj->serial.uart)), c); + + // Simulate clear of the interrupt flag + if (obj->serial.inten_msk & UART_INTEN_THREIEN_Msk) { + UART_ENABLE_INT(((UART_T *) NU_MODBASE(obj->serial.uart)), UART_INTEN_THREIEN_Msk); + } +} + +int serial_readable(serial_t *obj) +{ + //return UART_IS_RX_READY(((UART_T *) NU_MODBASE(obj->serial.uart))); + return ! UART_GET_RX_EMPTY(((UART_T *) NU_MODBASE(obj->serial.uart))); +} + +int serial_writable(serial_t *obj) +{ + return ! UART_IS_TX_FULL(((UART_T *) NU_MODBASE(obj->serial.uart))); +} + +void serial_pinout_tx(PinName tx) +{ + pinmap_pinout(tx, PinMap_UART_TX); +} + +void serial_break_set(serial_t *obj) +{ + ((UART_T *) NU_MODBASE(obj->serial.uart))->LINE |= UART_LINE_BCB_Msk; +} + +void serial_break_clear(serial_t *obj) +{ + ((UART_T *) NU_MODBASE(obj->serial.uart))->LINE &= ~UART_LINE_BCB_Msk; +} + +static void uart0_vec(void) +{ + uart_irq(uart0_var.obj); +} + +static void uart1_vec(void) +{ + uart_irq(uart1_var.obj); +} + +static void uart2_vec(void) +{ + uart_irq(uart2_var.obj); +} + +static void uart3_vec(void) +{ + uart_irq(uart3_var.obj); +} + +static void uart_irq(serial_t *obj) +{ + UART_T *uart_base = (UART_T *) NU_MODBASE(obj->serial.uart); + + if (uart_base->INTSTS & (UART_INTSTS_RDAINT_Msk | UART_INTSTS_RXTOINT_Msk)) { + // Simulate clear of the interrupt flag. Temporarily disable the interrupt here and to be recovered on next read. + UART_DISABLE_INT(uart_base, (UART_INTEN_RDAIEN_Msk | UART_INTEN_RXTOIEN_Msk)); + if (obj->serial.irq_handler) { + ((uart_irq_handler) obj->serial.irq_handler)(obj->serial.irq_id, RxIrq); + } + } + + if (uart_base->INTSTS & UART_INTSTS_THREINT_Msk) { + // Simulate clear of the interrupt flag. Temporarily disable the interrupt here and to be recovered on next write. + UART_DISABLE_INT(uart_base, UART_INTEN_THREIEN_Msk); + if (obj->serial.irq_handler) { + ((uart_irq_handler) obj->serial.irq_handler)(obj->serial.irq_id, TxIrq); + } + } + + // FIXME: Ignore all other interrupt flags. Clear them. Otherwise, program will get stuck in interrupt. + uart_base->INTSTS = uart_base->INTSTS; + uart_base->FIFOSTS = uart_base->FIFOSTS; +} + + +#if DEVICE_SERIAL_ASYNCH +int serial_tx_asynch(serial_t *obj, const void *tx, size_t tx_length, uint8_t tx_width, uint32_t handler, uint32_t event, DMAUsage hint) +{ + // NOTE: tx_width is deprecated. Assume its value is databits ceiled to the nearest number among 8, 16, and 32. + tx_width = (obj->serial.databits <= 8) ? 8 : (obj->serial.databits <= 16) ? 16 : 32; + + MBED_ASSERT(tx_width == 8 || tx_width == 16 || tx_width == 32); + + obj->serial.dma_usage_tx = hint; + serial_check_dma_usage(&obj->serial.dma_usage_tx, &obj->serial.dma_chn_id_tx); + + // UART IRQ is necessary for both interrupt way and DMA way + serial_tx_enable_event(obj, event, 1); + serial_tx_buffer_set(obj, tx, tx_length, tx_width); + //UART_HAL_DisableTransmitter(obj->serial.address); + //UART_HAL_FlushTxFifo(obj->serial.address); + //UART_HAL_EnableTransmitter(obj->serial.address); + + int n_word = 0; + if (obj->serial.dma_usage_tx == DMA_USAGE_NEVER) { + // Interrupt way + n_word = serial_write_async(obj); + serial_tx_enable_interrupt(obj, handler, 1); + } else { + // DMA way + const struct nu_modinit_s *modinit = get_modinit(obj->serial.uart, uart_modinit_tab); + MBED_ASSERT(modinit != NULL); + MBED_ASSERT(modinit->modname == obj->serial.uart); + + PDMA->CHCTL |= 1 << obj->serial.dma_chn_id_tx; // Enable this DMA channel + PDMA_SetTransferMode(obj->serial.dma_chn_id_tx, + ((struct nu_uart_var *) modinit->var)->pdma_perp_tx, // Peripheral connected to this PDMA + 0, // Scatter-gather disabled + 0); // Scatter-gather descriptor address + PDMA_SetTransferCnt(obj->serial.dma_chn_id_tx, + (tx_width == 8) ? PDMA_WIDTH_8 : (tx_width == 16) ? PDMA_WIDTH_16 : PDMA_WIDTH_32, + tx_length); + PDMA_SetTransferAddr(obj->serial.dma_chn_id_tx, + (uint32_t) tx, // NOTE: + // NUC472: End of source address + // M451: Start of source address + PDMA_SAR_INC, // Source address incremental + (uint32_t) obj->serial.uart, // Destination address + PDMA_DAR_FIX); // Destination address fixed + PDMA_SetBurstType(obj->serial.dma_chn_id_tx, + PDMA_REQ_SINGLE, // Single mode + 0); // Burst size + PDMA_EnableInt(obj->serial.dma_chn_id_tx, + PDMA_INT_TRANS_DONE); // Interrupt type + // Register DMA event handler + dma_set_handler(obj->serial.dma_chn_id_tx, (uint32_t) uart_dma_handler_tx, (uint32_t) obj, DMA_EVENT_ALL); + serial_tx_enable_interrupt(obj, handler, 1); + ((UART_T *) NU_MODBASE(obj->serial.uart))->INTEN |= UART_INTEN_TXPDMAEN_Msk; // Start DMA transfer + } + + return n_word; +} + +void serial_rx_asynch(serial_t *obj, void *rx, size_t rx_length, uint8_t rx_width, uint32_t handler, uint32_t event, uint8_t char_match, DMAUsage hint) +{ + // NOTE: rx_width is deprecated. Assume its value is databits ceiled to the nearest number among 8, 16, and 32. + rx_width = (obj->serial.databits <= 8) ? 8 : (obj->serial.databits <= 16) ? 16 : 32; + + MBED_ASSERT(rx_width == 8 || rx_width == 16 || rx_width == 32); + + obj->serial.dma_usage_rx = hint; + serial_check_dma_usage(&obj->serial.dma_usage_rx, &obj->serial.dma_chn_id_rx); + // DMA doesn't support char match, so fall back to IRQ if it is requested. + if (obj->serial.dma_usage_rx != DMA_USAGE_NEVER && + (event & SERIAL_EVENT_RX_CHARACTER_MATCH) && + char_match != SERIAL_RESERVED_CHAR_MATCH) { + obj->serial.dma_usage_rx = DMA_USAGE_NEVER; + dma_channel_free(obj->serial.dma_chn_id_rx); + obj->serial.dma_chn_id_rx = DMA_ERROR_OUT_OF_CHANNELS; + } + + // UART IRQ is necessary for both interrupt way and DMA way + serial_rx_enable_event(obj, event, 1); + serial_rx_buffer_set(obj, rx, rx_length, rx_width); + serial_rx_set_char_match(obj, char_match); + //UART_HAL_DisableReceiver(obj->serial.address); + //UART_HAL_FlushRxFifo(obj->serial.address); + //UART_HAL_EnableReceiver(obj->serial.address); + + if (obj->serial.dma_usage_rx == DMA_USAGE_NEVER) { + // Interrupt way + serial_rx_enable_interrupt(obj, handler, 1); + } else { + // DMA way + const struct nu_modinit_s *modinit = get_modinit(obj->serial.uart, uart_modinit_tab); + MBED_ASSERT(modinit != NULL); + MBED_ASSERT(modinit->modname == obj->serial.uart); + + PDMA->CHCTL |= 1 << obj->serial.dma_chn_id_rx; // Enable this DMA channel + PDMA_SetTransferMode(obj->serial.dma_chn_id_rx, + ((struct nu_uart_var *) modinit->var)->pdma_perp_rx, // Peripheral connected to this PDMA + 0, // Scatter-gather disabled + 0); // Scatter-gather descriptor address + PDMA_SetTransferCnt(obj->serial.dma_chn_id_rx, + (rx_width == 8) ? PDMA_WIDTH_8 : (rx_width == 16) ? PDMA_WIDTH_16 : PDMA_WIDTH_32, + rx_length); + PDMA_SetTransferAddr(obj->serial.dma_chn_id_rx, + (uint32_t) obj->serial.uart, // Source address + PDMA_SAR_FIX, // Source address fixed + (uint32_t) rx, // NOTE: + // NUC472: End of destination address + // M451: Start of destination address + PDMA_DAR_INC); // Destination address incremental + PDMA_SetBurstType(obj->serial.dma_chn_id_rx, + PDMA_REQ_SINGLE, // Single mode + 0); // Burst size + PDMA_EnableInt(obj->serial.dma_chn_id_rx, + PDMA_INT_TRANS_DONE); // Interrupt type + // Register DMA event handler + dma_set_handler(obj->serial.dma_chn_id_rx, (uint32_t) uart_dma_handler_rx, (uint32_t) obj, DMA_EVENT_ALL); + serial_rx_enable_interrupt(obj, handler, 1); + ((UART_T *) NU_MODBASE(obj->serial.uart))->INTEN |= UART_INTEN_RXPDMAEN_Msk; // Start DMA transfer + } +} + +void serial_tx_abort_asynch(serial_t *obj) +{ + // Flush Tx FIFO. Otherwise, output data may get lost on this change. + while (! UART_IS_TX_EMPTY(((UART_T *) obj->serial.uart))); + + if (obj->serial.dma_usage_tx != DMA_USAGE_NEVER) { + if (obj->serial.dma_chn_id_tx != DMA_ERROR_OUT_OF_CHANNELS) { + PDMA_DisableInt(obj->serial.dma_chn_id_tx, PDMA_INT_TRANS_DONE); + // FIXME: On NUC472, next PDMA transfer will fail with PDMA_STOP() called. Cause is unknown. + //PDMA_STOP(obj->serial.dma_chn_id_tx); + PDMA->CHCTL &= ~(1 << obj->serial.dma_chn_id_tx); + } + UART_DISABLE_INT(((UART_T *) NU_MODBASE(obj->serial.uart)), UART_INTEN_TXPDMAEN_Msk); + } + + // Necessary for both interrupt way and DMA way + serial_irq_set(obj, TxIrq, 0); + // FIXME: more complete abort operation + //UART_HAL_DisableTransmitter(obj->serial.serial.address); + //UART_HAL_FlushTxFifo(obj->serial.serial.address); +} + +void serial_rx_abort_asynch(serial_t *obj) +{ + if (obj->serial.dma_usage_rx != DMA_USAGE_NEVER) { + if (obj->serial.dma_chn_id_rx != DMA_ERROR_OUT_OF_CHANNELS) { + PDMA_DisableInt(obj->serial.dma_chn_id_rx, PDMA_INT_TRANS_DONE); + // FIXME: On NUC472, next PDMA transfer will fail with PDMA_STOP() called. Cause is unknown. + //PDMA_STOP(obj->serial.dma_chn_id_rx); + PDMA->CHCTL &= ~(1 << obj->serial.dma_chn_id_rx); + } + UART_DISABLE_INT(((UART_T *) NU_MODBASE(obj->serial.uart)), UART_INTEN_RXPDMAEN_Msk); + } + + // Necessary for both interrupt way and DMA way + serial_irq_set(obj, RxIrq, 0); + // FIXME: more complete abort operation + //UART_HAL_DisableReceiver(obj->serial.serial.address); + //UART_HAL_FlushRxFifo(obj->serial.serial.address); +} + +uint8_t serial_tx_active(serial_t *obj) +{ + return serial_is_irq_en(obj, TxIrq); +} + +uint8_t serial_rx_active(serial_t *obj) +{ + return serial_is_irq_en(obj, RxIrq); +} + +int serial_irq_handler_asynch(serial_t *obj) +{ + int event_rx = 0; + int event_tx = 0; + + // Necessary for both interrup way and DMA way + if (serial_is_irq_en(obj, RxIrq)) { + event_rx = serial_rx_event_check(obj); + if (event_rx) { + serial_rx_abort_asynch(obj); + } + } + + if (serial_is_irq_en(obj, TxIrq)) { + event_tx = serial_tx_event_check(obj); + if (event_tx) { + serial_tx_abort_asynch(obj); + } + } + + return (obj->serial.event & (event_rx | event_tx)); +} + +int serial_allow_powerdown(void) +{ + uint32_t modinit_mask = uart_modinit_mask; + while (modinit_mask) { + int uart_idx = nu_ctz(modinit_mask); + const struct nu_modinit_s *modinit = uart_modinit_tab + uart_idx; + if (modinit->modname != NC) { + UART_T *uart_base = (UART_T *) NU_MODBASE(modinit->modname); + // Disallow entering power-down mode if Tx FIFO has data to flush + if (! UART_IS_TX_EMPTY((uart_base))) { + return 0; + } + // Disallow entering power-down mode if async Rx transfer (not PDMA) is on-going + if (uart_base->INTEN & (UART_INTEN_RDAIEN_Msk | UART_INTEN_RXTOIEN_Msk)) { + return 0; + } + // Disallow entering power-down mode if async Rx transfer (PDMA) is on-going + if (uart_base->INTEN & UART_INTEN_RXPDMAEN_Msk) { + return 0; + } + } + modinit_mask &= ~(1 << uart_idx); + } + + return 1; +} + +static void uart0_vec_async(void) +{ + uart_irq_async(uart0_var.obj); +} + +static void uart1_vec_async(void) +{ + uart_irq_async(uart1_var.obj); +} + +static void uart2_vec_async(void) +{ + uart_irq_async(uart2_var.obj); +} + +static void uart3_vec_async(void) +{ + uart_irq_async(uart3_var.obj); +} + +static void uart_irq_async(serial_t *obj) +{ + if (serial_is_irq_en(obj, RxIrq)) { + (*obj->serial.irq_handler_rx_async)(); + } + if (serial_is_irq_en(obj, TxIrq)) { + (*obj->serial.irq_handler_tx_async)(); + } +} + +static void serial_rx_set_char_match(serial_t *obj, uint8_t char_match) +{ + obj->char_match = char_match; + obj->char_found = 0; +} + +static void serial_tx_enable_event(serial_t *obj, int event, uint8_t enable) +{ + obj->serial.event &= ~SERIAL_EVENT_TX_MASK; + obj->serial.event |= (event & SERIAL_EVENT_TX_MASK); + + //if (event & SERIAL_EVENT_TX_COMPLETE) { + //} +} + +static void serial_rx_enable_event(serial_t *obj, int event, uint8_t enable) +{ + obj->serial.event &= ~SERIAL_EVENT_RX_MASK; + obj->serial.event |= (event & SERIAL_EVENT_RX_MASK); + + //if (event & SERIAL_EVENT_RX_COMPLETE) { + //} + //if (event & SERIAL_EVENT_RX_OVERRUN_ERROR) { + //} + if (event & SERIAL_EVENT_RX_FRAMING_ERROR) { + UART_ENABLE_INT(((UART_T *) NU_MODBASE(obj->serial.uart)), UART_INTEN_RLSIEN_Msk); + } + if (event & SERIAL_EVENT_RX_PARITY_ERROR) { + UART_ENABLE_INT(((UART_T *) NU_MODBASE(obj->serial.uart)), UART_INTEN_RLSIEN_Msk); + } + if (event & SERIAL_EVENT_RX_OVERFLOW) { + UART_ENABLE_INT(((UART_T *) NU_MODBASE(obj->serial.uart)), UART_INTEN_BUFERRIEN_Msk); + } + //if (event & SERIAL_EVENT_RX_CHARACTER_MATCH) { + //} +} + +static int serial_is_tx_complete(serial_t *obj) +{ + // NOTE: Exclude tx fifo empty check due to no such interrupt on DMA way + //return (obj->tx_buff.pos == obj->tx_buff.length) && UART_GET_TX_EMPTY(((UART_T *) NU_MODBASE(obj->serial.uart))); + // FIXME: Premature abort??? + return (obj->tx_buff.pos == obj->tx_buff.length); +} + +static int serial_is_rx_complete(serial_t *obj) +{ + //return (obj->rx_buff.pos == obj->rx_buff.length) && UART_GET_RX_EMPTY(((UART_T *) NU_MODBASE(obj->serial.uart))); + return (obj->rx_buff.pos == obj->rx_buff.length); +} + +static uint32_t serial_tx_event_check(serial_t *obj) +{ + UART_T *uart_base = (UART_T *) NU_MODBASE(obj->serial.uart); + + if (uart_base->INTSTS & UART_INTSTS_THREINT_Msk) { + // Simulate clear of the interrupt flag. Temporarily disable the interrupt here and to be recovered on next write. + UART_DISABLE_INT(uart_base, UART_INTEN_THREIEN_Msk); + } + + uint32_t event = 0; + + if (obj->serial.dma_usage_tx == DMA_USAGE_NEVER) { + serial_write_async(obj); + } + + if (serial_is_tx_complete(obj)) { + event |= SERIAL_EVENT_TX_COMPLETE; + } + + return event; +} + +static uint32_t serial_rx_event_check(serial_t *obj) +{ + UART_T *uart_base = (UART_T *) NU_MODBASE(obj->serial.uart); + + if (uart_base->INTSTS & (UART_INTSTS_RDAINT_Msk | UART_INTSTS_RXTOINT_Msk)) { + // Simulate clear of the interrupt flag. Temporarily disable the interrupt here and to be recovered on next read. + UART_DISABLE_INT(uart_base, (UART_INTEN_RDAIEN_Msk | UART_INTEN_RXTOIEN_Msk)); + } + + uint32_t event = 0; + + if (uart_base->FIFOSTS & UART_FIFOSTS_BIF_Msk) { + uart_base->FIFOSTS = UART_FIFOSTS_BIF_Msk; + } + if (uart_base->FIFOSTS & UART_FIFOSTS_FEF_Msk) { + uart_base->FIFOSTS = UART_FIFOSTS_FEF_Msk; + event |= SERIAL_EVENT_RX_FRAMING_ERROR; + } + if (uart_base->FIFOSTS & UART_FIFOSTS_PEF_Msk) { + uart_base->FIFOSTS = UART_FIFOSTS_PEF_Msk; + event |= SERIAL_EVENT_RX_PARITY_ERROR; + } + + if (uart_base->FIFOSTS & UART_FIFOSTS_RXOVIF_Msk) { + uart_base->FIFOSTS = UART_FIFOSTS_RXOVIF_Msk; + event |= SERIAL_EVENT_RX_OVERFLOW; + } + + if (obj->serial.dma_usage_rx == DMA_USAGE_NEVER) { + serial_read_async(obj); + } + + if (serial_is_rx_complete(obj)) { + event |= SERIAL_EVENT_RX_COMPLETE; + } + if ((obj->char_match != SERIAL_RESERVED_CHAR_MATCH) && obj->char_found) { + event |= SERIAL_EVENT_RX_CHARACTER_MATCH; + // FIXME: Timing to reset char_found? + //obj->char_found = 0; + } + + return event; +} + +static void uart_dma_handler_tx(uint32_t id, uint32_t event_dma) +{ + serial_t *obj = (serial_t *) id; + + // FIXME: Pass this error to caller + if (event_dma & DMA_EVENT_ABORT) { + } + // Expect UART IRQ will catch this transfer done event + if (event_dma & DMA_EVENT_TRANSFER_DONE) { + obj->tx_buff.pos = obj->tx_buff.length; + } + // FIXME: Pass this error to caller + if (event_dma & DMA_EVENT_TIMEOUT) { + } + + uart_irq_async(obj); +} + +static void uart_dma_handler_rx(uint32_t id, uint32_t event_dma) +{ + serial_t *obj = (serial_t *) id; + + // FIXME: Pass this error to caller + if (event_dma & DMA_EVENT_ABORT) { + } + // Expect UART IRQ will catch this transfer done event + if (event_dma & DMA_EVENT_TRANSFER_DONE) { + obj->rx_buff.pos = obj->rx_buff.length; + } + // FIXME: Pass this error to caller + if (event_dma & DMA_EVENT_TIMEOUT) { + } + + uart_irq_async(obj); +} + +static int serial_write_async(serial_t *obj) +{ + const struct nu_modinit_s *modinit = get_modinit(obj->serial.uart, uart_modinit_tab); + MBED_ASSERT(modinit != NULL); + MBED_ASSERT(modinit->modname == obj->serial.uart); + + UART_T *uart_base = (UART_T *) NU_MODBASE(obj->serial.uart); + + uint32_t tx_fifo_max = ((struct nu_uart_var *) modinit->var)->fifo_size_tx; + uint32_t tx_fifo_busy = (uart_base->FIFOSTS & UART_FIFOSTS_TXPTR_Msk) >> UART_FIFOSTS_TXPTR_Pos; + if (uart_base->FIFOSTS & UART_FIFOSTS_TXFULL_Msk) { + tx_fifo_busy = tx_fifo_max; + } + uint32_t tx_fifo_free = tx_fifo_max - tx_fifo_busy; + if (tx_fifo_free == 0) { + // Simulate clear of the interrupt flag + if (obj->serial.inten_msk & UART_INTEN_THREIEN_Msk) { + UART_ENABLE_INT(((UART_T *) NU_MODBASE(obj->serial.uart)), UART_INTEN_THREIEN_Msk); + } + return 0; + } + + uint32_t bytes_per_word = obj->tx_buff.width / 8; + + uint8_t *tx = (uint8_t *)(obj->tx_buff.buffer) + bytes_per_word * obj->tx_buff.pos; + int n_words = 0; + while (obj->tx_buff.pos < obj->tx_buff.length && tx_fifo_free >= bytes_per_word) { + switch (bytes_per_word) { + case 4: + UART_WRITE(((UART_T *) NU_MODBASE(obj->serial.uart)), *tx ++); + UART_WRITE(((UART_T *) NU_MODBASE(obj->serial.uart)), *tx ++); + case 2: + UART_WRITE(((UART_T *) NU_MODBASE(obj->serial.uart)), *tx ++); + case 1: + UART_WRITE(((UART_T *) NU_MODBASE(obj->serial.uart)), *tx ++); + } + + n_words ++; + tx_fifo_free -= bytes_per_word; + obj->tx_buff.pos ++; + } + + if (n_words) { + // Simulate clear of the interrupt flag + if (obj->serial.inten_msk & UART_INTEN_THREIEN_Msk) { + UART_ENABLE_INT(((UART_T *) NU_MODBASE(obj->serial.uart)), UART_INTEN_THREIEN_Msk); + } + } + + return n_words; +} + +static int serial_read_async(serial_t *obj) +{ + const struct nu_modinit_s *modinit = get_modinit(obj->serial.uart, uart_modinit_tab); + MBED_ASSERT(modinit != NULL); + MBED_ASSERT(modinit->modname == obj->serial.uart); + + uint32_t rx_fifo_busy = (((UART_T *) NU_MODBASE(obj->serial.uart))->FIFOSTS & UART_FIFOSTS_RXPTR_Msk) >> UART_FIFOSTS_RXPTR_Pos; + //uint32_t rx_fifo_free = ((struct nu_uart_var *) modinit->var)->fifo_size_rx - rx_fifo_busy; + //if (rx_fifo_free == 0) { + // return 0; + //} + + uint32_t bytes_per_word = obj->rx_buff.width / 8; + + uint8_t *rx = (uint8_t *)(obj->rx_buff.buffer) + bytes_per_word * obj->rx_buff.pos; + int n_words = 0; + while (obj->rx_buff.pos < obj->rx_buff.length && rx_fifo_busy >= bytes_per_word) { + switch (bytes_per_word) { + case 4: + *rx ++ = UART_READ(((UART_T *) NU_MODBASE(obj->serial.uart))); + *rx ++ = UART_READ(((UART_T *) NU_MODBASE(obj->serial.uart))); + case 2: + *rx ++ = UART_READ(((UART_T *) NU_MODBASE(obj->serial.uart))); + case 1: + *rx ++ = UART_READ(((UART_T *) NU_MODBASE(obj->serial.uart))); + } + + n_words ++; + rx_fifo_busy -= bytes_per_word; + obj->rx_buff.pos ++; + + if ((obj->serial.event & SERIAL_EVENT_RX_CHARACTER_MATCH) && + obj->char_match != SERIAL_RESERVED_CHAR_MATCH) { + uint8_t *rx_cmp = rx; + switch (bytes_per_word) { + case 4: + rx_cmp -= 2; + case 2: + rx_cmp --; + case 1: + rx_cmp --; + } + if (*rx_cmp == obj->char_match) { + obj->char_found = 1; + break; + } + } + } + + if (n_words) { + // Simulate clear of the interrupt flag + if (obj->serial.inten_msk & (UART_INTEN_RDAIEN_Msk | UART_INTEN_RXTOIEN_Msk)) { + UART_ENABLE_INT(((UART_T *) NU_MODBASE(obj->serial.uart)), (UART_INTEN_RDAIEN_Msk | UART_INTEN_RXTOIEN_Msk)); + } + } + + return n_words; +} + +static void serial_tx_buffer_set(serial_t *obj, const void *tx, size_t length, uint8_t width) +{ + obj->tx_buff.buffer = (void *) tx; + obj->tx_buff.length = length; + obj->tx_buff.pos = 0; + obj->tx_buff.width = width; +} + +static void serial_rx_buffer_set(serial_t *obj, void *rx, size_t length, uint8_t width) +{ + obj->rx_buff.buffer = rx; + obj->rx_buff.length = length; + obj->rx_buff.pos = 0; + obj->rx_buff.width = width; +} + +static void serial_tx_enable_interrupt(serial_t *obj, uint32_t handler, uint8_t enable) +{ + const struct nu_modinit_s *modinit = get_modinit(obj->serial.uart, uart_modinit_tab); + MBED_ASSERT(modinit != NULL); + MBED_ASSERT(modinit->modname == obj->serial.uart); + + // Necessary for both interrupt way and DMA way + ((struct nu_uart_var *) modinit->var)->obj = obj; + // With our own async vector, tx/rx handlers can be different. + obj->serial.vec = ((struct nu_uart_var *) modinit->var)->vec_async; + obj->serial.irq_handler_tx_async = (void (*)(void)) handler; + serial_irq_set(obj, TxIrq, enable); +} + +static void serial_rx_enable_interrupt(serial_t *obj, uint32_t handler, uint8_t enable) +{ + const struct nu_modinit_s *modinit = get_modinit(obj->serial.uart, uart_modinit_tab); + MBED_ASSERT(modinit != NULL); + MBED_ASSERT(modinit->modname == obj->serial.uart); + + // Necessary for both interrupt way and DMA way + ((struct nu_uart_var *) modinit->var)->obj = obj; + // With our own async vector, tx/rx handlers can be different. + obj->serial.vec = ((struct nu_uart_var *) modinit->var)->vec_async; + obj->serial.irq_handler_rx_async = (void (*) (void)) handler; + serial_irq_set(obj, RxIrq, enable); +} + +static void serial_check_dma_usage(DMAUsage *dma_usage, int *dma_ch) +{ + if (*dma_usage != DMA_USAGE_NEVER) { + if (*dma_ch == DMA_ERROR_OUT_OF_CHANNELS) { + *dma_ch = dma_channel_allocate(DMA_CAP_NONE); + } + if (*dma_ch == DMA_ERROR_OUT_OF_CHANNELS) { + *dma_usage = DMA_USAGE_NEVER; + } + } + else { + dma_channel_free(*dma_ch); + *dma_ch = DMA_ERROR_OUT_OF_CHANNELS; + } +} + +static int serial_is_irq_en(serial_t *obj, SerialIrq irq) +{ + int inten_msk = 0; + + switch (irq) { + case RxIrq: + inten_msk = obj->serial.inten_msk & (UART_INTEN_RDAIEN_Msk | UART_INTEN_RXTOIEN_Msk); + break; + case TxIrq: + inten_msk = obj->serial.inten_msk & UART_INTEN_THREIEN_Msk; + break; + } + + return !! inten_msk; +} + +#endif // #if DEVICE_SERIAL_ASYNCH +#endif // #if DEVICE_SERIAL diff --git a/targets/TARGET_NUVOTON/TARGET_M451/sleep.c b/targets/TARGET_NUVOTON/TARGET_M451/sleep.c new file mode 100644 index 00000000000..bd6f08fcd44 --- /dev/null +++ b/targets/TARGET_NUVOTON/TARGET_M451/sleep.c @@ -0,0 +1,118 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "sleep_api.h" +#include "serial_api.h" +#include "lp_ticker_api.h" + +#if DEVICE_SLEEP + +#include "cmsis.h" +#include "device.h" +#include "objects.h" +#include "PeripheralPins.h" + +void us_ticker_prepare_sleep(struct sleep_s *obj); +void us_ticker_wakeup_from_sleep(struct sleep_s *obj); +static void mbed_enter_sleep(struct sleep_s *obj); +static void mbed_exit_sleep(struct sleep_s *obj); + +int serial_allow_powerdown(void); +int spi_allow_powerdown(void); +int i2c_allow_powerdown(void); +int pwmout_allow_powerdown(void); + +/** + * Enter Idle mode. + */ +void sleep(void) +{ + struct sleep_s sleep_obj; + sleep_obj.powerdown = 0; + mbed_enter_sleep(&sleep_obj); + mbed_exit_sleep(&sleep_obj); +} + +/** + * Enter Power-down mode while no peripheral is active; otherwise, enter Idle mode. + */ +void deepsleep(void) +{ + struct sleep_s sleep_obj; + sleep_obj.powerdown = 1; + mbed_enter_sleep(&sleep_obj); + mbed_exit_sleep(&sleep_obj); +} + + +void mbed_enter_sleep(struct sleep_s *obj) +{ + // Check if serial allows entering power-down mode + if (obj->powerdown) { + obj->powerdown = serial_allow_powerdown(); + } + // Check if spi allows entering power-down mode + if (obj->powerdown) { + obj->powerdown = spi_allow_powerdown(); + } + // Check if i2c allows entering power-down mode + if (obj->powerdown) { + obj->powerdown = i2c_allow_powerdown(); + } + // Check if pwmout allows entering power-down mode + if (obj->powerdown) { + obj->powerdown = pwmout_allow_powerdown(); + } + // TODO: Check if other peripherals allow entering power-down mode + + obj->start_us = lp_ticker_read(); + // Let us_ticker prepare for power-down or reject it. + us_ticker_prepare_sleep(obj); + + // NOTE(STALE): To pass mbed-drivers test, timer requires to be fine-grained, so its implementation needs HIRC rather than LIRC/LXT as its clock source. + // But as CLK_PowerDown()/CLK_Idle() is called, HIRC will be disabled and timer cannot keep counting and alarm. To overcome the dilemma, + // just make CPU halt and compromise power saving. + // NOTE: As CLK_PowerDown()/CLK_Idle() is called, HIRC/HXT will be disabled in normal mode, but not in ICE mode. This may cause confusion in development. + + if (obj->powerdown) { // Power-down mode (HIRC/HXT disabled, LIRC/LXT enabled) + SYS_UnlockReg(); + CLK_PowerDown(); + SYS_LockReg(); + } + else { // CPU halt mode (HIRC/HXT enabled, LIRC/LXT enabled) + SYS_UnlockReg(); + CLK_Idle(); + SYS_LockReg(); + } + __NOP(); + __NOP(); + __NOP(); + __NOP(); + + obj->end_us = lp_ticker_read(); + obj->period_us = (obj->end_us > obj->start_us) ? (obj->end_us - obj->start_us) : (uint32_t) ((uint64_t) obj->end_us + 0xFFFFFFFFu - obj->start_us); + // Let us_ticker recover from power-down. + us_ticker_wakeup_from_sleep(obj); +} + +void mbed_exit_sleep(struct sleep_s *obj) +{ + // TODO: TO BE CONTINUED + + (void)obj; +} + +#endif diff --git a/targets/TARGET_NUVOTON/TARGET_M451/spi_api.c b/targets/TARGET_NUVOTON/TARGET_M451/spi_api.c new file mode 100644 index 00000000000..fb2c28d39c8 --- /dev/null +++ b/targets/TARGET_NUVOTON/TARGET_M451/spi_api.c @@ -0,0 +1,775 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "spi_api.h" + +#if DEVICE_SPI + +#include "cmsis.h" +#include "pinmap.h" +#include "PeripheralPins.h" +#include "nu_modutil.h" +#include "nu_miscutil.h" +#include "nu_bitutil.h" + +#if DEVICE_SPI_ASYNCH +#include "dma_api.h" +#include "dma.h" +#endif + +#define NU_SPI_FRAME_MIN 8 +#define NU_SPI_FRAME_MAX 32 +#define NU_SPI_FIFO_DEPTH 8 + +struct nu_spi_var { +#if DEVICE_SPI_ASYNCH + uint8_t pdma_perp_tx; + uint8_t pdma_perp_rx; +#endif +}; + +static struct nu_spi_var spi0_var = { +#if DEVICE_SPI_ASYNCH + .pdma_perp_tx = PDMA_SPI0_TX, + .pdma_perp_rx = PDMA_SPI0_RX +#endif +}; +static struct nu_spi_var spi1_var = { +#if DEVICE_SPI_ASYNCH + .pdma_perp_tx = PDMA_SPI1_TX, + .pdma_perp_rx = PDMA_SPI1_RX +#endif +}; +static struct nu_spi_var spi2_var = { +#if DEVICE_SPI_ASYNCH + .pdma_perp_tx = PDMA_SPI2_TX, + .pdma_perp_rx = PDMA_SPI2_RX +#endif +}; + +#if DEVICE_SPI_ASYNCH +static void spi_enable_vector_interrupt(spi_t *obj, uint32_t handler, uint8_t enable); +static void spi_master_enable_interrupt(spi_t *obj, uint8_t enable); +static uint32_t spi_master_write_asynch(spi_t *obj, uint32_t tx_limit); +static uint32_t spi_master_read_asynch(spi_t *obj); +static uint32_t spi_event_check(spi_t *obj); +static void spi_enable_event(spi_t *obj, uint32_t event, uint8_t enable); +static void spi_buffer_set(spi_t *obj, const void *tx, size_t tx_length, void *rx, size_t rx_length); +static void spi_check_dma_usage(DMAUsage *dma_usage, int *dma_ch_tx, int *dma_ch_rx); +static uint8_t spi_get_data_width(spi_t *obj); +static int spi_is_tx_complete(spi_t *obj); +static int spi_is_rx_complete(spi_t *obj); +static int spi_writeable(spi_t * obj); +static int spi_readable(spi_t * obj); +static void spi_dma_handler_tx(uint32_t id, uint32_t event_dma); +static void spi_dma_handler_rx(uint32_t id, uint32_t event_dma); +#endif + +static uint32_t spi_modinit_mask = 0; + +static const struct nu_modinit_s spi_modinit_tab[] = { + {SPI_0, SPI0_MODULE, CLK_CLKSEL2_SPI0SEL_PCLK0, MODULE_NoMsk, SPI0_RST, SPI0_IRQn, &spi0_var}, + {SPI_1, SPI1_MODULE, CLK_CLKSEL2_SPI1SEL_PCLK1, MODULE_NoMsk, SPI1_RST, SPI1_IRQn, &spi1_var}, + {SPI_2, SPI2_MODULE, CLK_CLKSEL2_SPI2SEL_PCLK0, MODULE_NoMsk, SPI2_RST, SPI2_IRQn, &spi2_var}, + + {NC, 0, 0, 0, 0, (IRQn_Type) 0, NULL} +}; + +void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel) { + // Determine which SPI_x the pins are used for + uint32_t spi_mosi = pinmap_peripheral(mosi, PinMap_SPI_MOSI); + uint32_t spi_miso = pinmap_peripheral(miso, PinMap_SPI_MISO); + uint32_t spi_sclk = pinmap_peripheral(sclk, PinMap_SPI_SCLK); + uint32_t spi_ssel = pinmap_peripheral(ssel, PinMap_SPI_SSEL); + uint32_t spi_data = pinmap_merge(spi_mosi, spi_miso); + uint32_t spi_cntl = pinmap_merge(spi_sclk, spi_ssel); + obj->spi.spi = (SPIName) pinmap_merge(spi_data, spi_cntl); + MBED_ASSERT((int)obj->spi.spi != NC); + + const struct nu_modinit_s *modinit = get_modinit(obj->spi.spi, spi_modinit_tab); + MBED_ASSERT(modinit != NULL); + MBED_ASSERT(modinit->modname == obj->spi.spi); + + // Reset this module + SYS_ResetModule(modinit->rsetidx); + + // Select IP clock source + CLK_SetModuleClock(modinit->clkidx, modinit->clksrc, modinit->clkdiv); + // Enable IP clock + CLK_EnableModuleClock(modinit->clkidx); + + SPI_T *spi_base = (SPI_T *) NU_MODBASE(obj->spi.spi); + + pinmap_pinout(mosi, PinMap_SPI_MOSI); + pinmap_pinout(miso, PinMap_SPI_MISO); + pinmap_pinout(sclk, PinMap_SPI_SCLK); + pinmap_pinout(ssel, PinMap_SPI_SSEL); + + obj->spi.pin_mosi = mosi; + obj->spi.pin_miso = miso; + obj->spi.pin_sclk = sclk; + obj->spi.pin_ssel = ssel; + + + // Configure the SPI data format and frequency + //spi_format(obj, 8, 0, SPI_MSB); // 8 bits, mode 0 + //spi_frequency(obj, 1000000); + +#if DEVICE_SPI_ASYNCH + obj->spi.dma_usage = DMA_USAGE_NEVER; + obj->spi.event = 0; + obj->spi.dma_chn_id_tx = DMA_ERROR_OUT_OF_CHANNELS; + obj->spi.dma_chn_id_rx = DMA_ERROR_OUT_OF_CHANNELS; +#endif + + // Mark this module to be inited. + int i = modinit - spi_modinit_tab; + spi_modinit_mask |= 1 << i; +} + +void spi_free(spi_t *obj) +{ +#if DEVICE_SPI_ASYNCH + if (obj->spi.dma_chn_id_tx != DMA_ERROR_OUT_OF_CHANNELS) { + dma_channel_free(obj->spi.dma_chn_id_tx); + obj->spi.dma_chn_id_tx = DMA_ERROR_OUT_OF_CHANNELS; + } + if (obj->spi.dma_chn_id_rx != DMA_ERROR_OUT_OF_CHANNELS) { + dma_channel_free(obj->spi.dma_chn_id_rx); + obj->spi.dma_chn_id_rx = DMA_ERROR_OUT_OF_CHANNELS; + } +#endif + + SPI_Close((SPI_T *) NU_MODBASE(obj->spi.spi)); + + const struct nu_modinit_s *modinit = get_modinit(obj->spi.spi, spi_modinit_tab); + MBED_ASSERT(modinit != NULL); + MBED_ASSERT(modinit->modname == obj->spi.spi); + + SPI_DisableInt(((SPI_T *) NU_MODBASE(obj->spi.spi)), (SPI_FIFO_RXOV_INT_MASK | SPI_FIFO_RXTH_INT_MASK | SPI_FIFO_TXTH_INT_MASK)); + NVIC_DisableIRQ(modinit->irq_n); + + // Disable IP clock + CLK_DisableModuleClock(modinit->clkidx); + + //((struct nu_spi_var *) modinit->var)->obj = NULL; + + // Mark this module to be deinited. + int i = modinit - spi_modinit_tab; + spi_modinit_mask &= ~(1 << i); +} +void spi_format(spi_t *obj, int bits, int mode, int slave) +{ + MBED_ASSERT(bits >= NU_SPI_FRAME_MIN && bits <= NU_SPI_FRAME_MAX); + + SPI_T *spi_base = (SPI_T *) NU_MODBASE(obj->spi.spi); + + // NOTE 1: All configurations should be ready before enabling SPI peripheral. + // NOTE 2: Re-configuration is allowed only as SPI peripheral is idle. + while (SPI_IS_BUSY(spi_base)); + SPI_DISABLE(spi_base); + + SPI_Open(spi_base, + slave ? SPI_SLAVE : SPI_MASTER, + (mode == 0) ? SPI_MODE_0 : (mode == 1) ? SPI_MODE_1 : (mode == 2) ? SPI_MODE_2 : SPI_MODE_3, + bits, + SPI_GetBusClock(spi_base)); + // NOTE: Hardcode to be MSB first. + SPI_SET_MSB_FIRST(spi_base); + + if (! slave) { + // Master + if (obj->spi.pin_ssel != NC) { + // Configure SS as low active. + SPI_EnableAutoSS(spi_base, SPI_SS, SPI_SS_ACTIVE_LOW); + } + else { + SPI_DisableAutoSS(spi_base); + } + } + else { + // Slave + // Configure SS as low active. + spi_base->SSCTL &= ~SPI_SSCTL_SSACTPOL_Msk; + } + + // NOTE: M451's SPI_Open() will enable SPI transfer (SPI_CTL_SPIEN_Msk). This will violate judgement of spi_active(). Disable it. + SPI_DISABLE(spi_base); +} + +void spi_frequency(spi_t *obj, int hz) +{ + SPI_T *spi_base = (SPI_T *) NU_MODBASE(obj->spi.spi); + + while (SPI_IS_BUSY(spi_base)); + SPI_DISABLE(spi_base); + + SPI_SetBusClock((SPI_T *) NU_MODBASE(obj->spi.spi), hz); +} + + +int spi_master_write(spi_t *obj, int value) +{ + SPI_T *spi_base = (SPI_T *) NU_MODBASE(obj->spi.spi); + + // NOTE: Data in receive FIFO can be read out via ICE. + SPI_ENABLE(spi_base); + + // Wait for tx buffer empty + while(! spi_writeable(obj)); + SPI_WRITE_TX(spi_base, value); + + // Wait for rx buffer full + while (! spi_readable(obj)); + int value2 = SPI_READ_RX(spi_base); + + SPI_DISABLE(spi_base); + + return value2; +} + +#if DEVICE_SPISLAVE +int spi_slave_receive(spi_t *obj) +{ + SPI_T *spi_base = (SPI_T *) NU_MODBASE(obj->spi.spi); + + SPI_ENABLE(spi_base); + + return spi_readable(obj); +}; + +int spi_slave_read(spi_t *obj) +{ + SPI_T *spi_base = (SPI_T *) NU_MODBASE(obj->spi.spi); + + SPI_ENABLE(spi_base); + + // Wait for rx buffer full + while (! spi_readable(obj)); + int value = SPI_READ_RX(spi_base); + return value; +} + +void spi_slave_write(spi_t *obj, int value) +{ + SPI_T *spi_base = (SPI_T *) NU_MODBASE(obj->spi.spi); + + SPI_ENABLE(spi_base); + + // Wait for tx buffer empty + while(! spi_writeable(obj)); + SPI_WRITE_TX(spi_base, value); +} +#endif + +#if DEVICE_SPI_ASYNCH +void spi_master_transfer(spi_t *obj, const void *tx, size_t tx_length, void *rx, size_t rx_length, uint8_t bit_width, uint32_t handler, uint32_t event, DMAUsage hint) +{ + //MBED_ASSERT(bits >= NU_SPI_FRAME_MIN && bits <= NU_SPI_FRAME_MAX); + SPI_T *spi_base = (SPI_T *) NU_MODBASE(obj->spi.spi); + SPI_SET_DATA_WIDTH(spi_base, bit_width); + + obj->spi.dma_usage = hint; + spi_check_dma_usage(&obj->spi.dma_usage, &obj->spi.dma_chn_id_tx, &obj->spi.dma_chn_id_rx); + uint32_t data_width = spi_get_data_width(obj); + // Conditions to go DMA way: + // (1) No DMA support for non-8 multiple data width. + // (2) tx length >= rx length. Otherwise, as tx DMA is done, no bus activity for remaining rx. + if ((data_width % 8) || + (tx_length < rx_length)) { + obj->spi.dma_usage = DMA_USAGE_NEVER; + dma_channel_free(obj->spi.dma_chn_id_tx); + obj->spi.dma_chn_id_tx = DMA_ERROR_OUT_OF_CHANNELS; + dma_channel_free(obj->spi.dma_chn_id_rx); + obj->spi.dma_chn_id_rx = DMA_ERROR_OUT_OF_CHANNELS; + } + + // SPI IRQ is necessary for both interrupt way and DMA way + spi_enable_event(obj, event, 1); + spi_buffer_set(obj, tx, tx_length, rx, rx_length); + + SPI_ENABLE(spi_base); + + if (obj->spi.dma_usage == DMA_USAGE_NEVER) { + // Interrupt way + spi_master_write_asynch(obj, NU_SPI_FIFO_DEPTH / 2); + spi_enable_vector_interrupt(obj, handler, 1); + spi_master_enable_interrupt(obj, 1); + } else { + // DMA way + const struct nu_modinit_s *modinit = get_modinit(obj->spi.spi, spi_modinit_tab); + MBED_ASSERT(modinit != NULL); + MBED_ASSERT(modinit->modname == obj->spi.spi); + + // Configure tx DMA + PDMA->CHCTL |= 1 << obj->spi.dma_chn_id_tx; // Enable this DMA channel + PDMA_SetTransferMode(obj->spi.dma_chn_id_tx, + ((struct nu_spi_var *) modinit->var)->pdma_perp_tx, // Peripheral connected to this PDMA + 0, // Scatter-gather disabled + 0); // Scatter-gather descriptor address + PDMA_SetTransferCnt(obj->spi.dma_chn_id_tx, + (data_width == 8) ? PDMA_WIDTH_8 : (data_width == 16) ? PDMA_WIDTH_16 : PDMA_WIDTH_32, + tx_length); + PDMA_SetTransferAddr(obj->spi.dma_chn_id_tx, + (uint32_t) tx, // NOTE: + // NUC472: End of source address + // M451: Start of source address + PDMA_SAR_INC, // Source address incremental + (uint32_t) &spi_base->TX, // Destination address + PDMA_DAR_FIX); // Destination address fixed + PDMA_SetBurstType(obj->spi.dma_chn_id_tx, + PDMA_REQ_SINGLE, // Single mode + 0); // Burst size + PDMA_EnableInt(obj->spi.dma_chn_id_tx, + PDMA_INT_TRANS_DONE); // Interrupt type + // Register DMA event handler + dma_set_handler(obj->spi.dma_chn_id_tx, (uint32_t) spi_dma_handler_tx, (uint32_t) obj, DMA_EVENT_ALL); + + // Configure rx DMA + PDMA->CHCTL |= 1 << obj->spi.dma_chn_id_rx; // Enable this DMA channel + PDMA_SetTransferMode(obj->spi.dma_chn_id_rx, + ((struct nu_spi_var *) modinit->var)->pdma_perp_rx, // Peripheral connected to this PDMA + 0, // Scatter-gather disabled + 0); // Scatter-gather descriptor address + PDMA_SetTransferCnt(obj->spi.dma_chn_id_rx, + (data_width == 8) ? PDMA_WIDTH_8 : (data_width == 16) ? PDMA_WIDTH_16 : PDMA_WIDTH_32, + rx_length); + PDMA_SetTransferAddr(obj->spi.dma_chn_id_rx, + (uint32_t) &spi_base->RX, // Source address + PDMA_SAR_FIX, // Source address fixed + (uint32_t) rx, // NOTE: + // NUC472: End of destination address + // M451: Start of destination address + PDMA_DAR_INC); // Destination address incremental + PDMA_SetBurstType(obj->spi.dma_chn_id_rx, + PDMA_REQ_SINGLE, // Single mode + 0); // Burst size + PDMA_EnableInt(obj->spi.dma_chn_id_rx, + PDMA_INT_TRANS_DONE); // Interrupt type + // Register DMA event handler + dma_set_handler(obj->spi.dma_chn_id_rx, (uint32_t) spi_dma_handler_rx, (uint32_t) obj, DMA_EVENT_ALL); + + // Start tx/rx DMA transfer + spi_enable_vector_interrupt(obj, handler, 1); + // NOTE: It is safer to start rx DMA first and then tx DMA. Otherwise, receive FIFO is subject to overflow by tx DMA. + SPI_TRIGGER_RX_PDMA(((SPI_T *) NU_MODBASE(obj->spi.spi))); + SPI_TRIGGER_TX_PDMA(((SPI_T *) NU_MODBASE(obj->spi.spi))); + spi_master_enable_interrupt(obj, 1); + } +} + +/** + * Abort an SPI transfer + * This is a helper function for event handling. When any of the events listed occurs, the HAL will abort any ongoing + * transfers + * @param[in] obj The SPI peripheral to stop + */ +void spi_abort_asynch(spi_t *obj) +{ + SPI_T *spi_base = (SPI_T *) NU_MODBASE(obj->spi.spi); + + if (obj->spi.dma_usage != DMA_USAGE_NEVER) { + // Receive FIFO Overrun in case of tx length > rx length on DMA way + if (spi_base->STATUS & SPI_STATUS_RXOVIF_Msk) { + spi_base->STATUS = SPI_STATUS_RXOVIF_Msk; + } + + if (obj->spi.dma_chn_id_tx != DMA_ERROR_OUT_OF_CHANNELS) { + PDMA_DisableInt(obj->spi.dma_chn_id_tx, 0); + // FIXME: On NUC472, next PDMA transfer will fail with PDMA_STOP() called. Cause is unknown. + //PDMA_STOP(obj->spi.dma_chn_id_tx); + PDMA->CHCTL &= ~(1 << obj->spi.dma_chn_id_tx); + } + SPI_DISABLE_TX_PDMA(((SPI_T *) NU_MODBASE(obj->spi.spi))); + + if (obj->spi.dma_chn_id_rx != DMA_ERROR_OUT_OF_CHANNELS) { + PDMA_DisableInt(obj->spi.dma_chn_id_rx, 0); + // FIXME: On NUC472, next PDMA transfer will fail with PDMA_STOP() called. Cause is unknown. + //PDMA_STOP(obj->spi.dma_chn_id_rx); + PDMA->CHCTL &= ~(1 << obj->spi.dma_chn_id_rx); + } + SPI_DISABLE_RX_PDMA(((SPI_T *) NU_MODBASE(obj->spi.spi))); + } + + // Necessary for both interrupt way and DMA way + spi_enable_vector_interrupt(obj, 0, 0); + spi_master_enable_interrupt(obj, 0); + + // FIXME: SPI H/W may get out of state without the busy check. + while (SPI_IS_BUSY(spi_base)); + SPI_DISABLE(spi_base); + + SPI_ClearRxFIFO(spi_base); + SPI_ClearTxFIFO(spi_base); +} + +/** + * Handle the SPI interrupt + * Read frames until the RX FIFO is empty. Write at most as many frames as were read. This way, + * it is unlikely that the RX FIFO will overflow. + * @param[in] obj The SPI peripheral that generated the interrupt + * @return + */ +uint32_t spi_irq_handler_asynch(spi_t *obj) +{ + // Check for SPI events + uint32_t event = spi_event_check(obj); + if (event) { + spi_abort_asynch(obj); + } + + return (obj->spi.event & event) | ((event & SPI_EVENT_COMPLETE) ? SPI_EVENT_INTERNAL_TRANSFER_COMPLETE : 0); +} + +uint8_t spi_active(spi_t *obj) +{ + SPI_T *spi_base = (SPI_T *) NU_MODBASE(obj->spi.spi); + // FIXME + /* + if ((obj->rx_buff.buffer && obj->rx_buff.pos < obj->rx_buff.length) + || (obj->tx_buff.buffer && obj->tx_buff.pos < obj->tx_buff.length) ){ + return 1; + } else { + // interrupts are disabled, all transaction have been completed + // TODO: checking rx fifo, it reports data eventhough RFDF is not set + return DSPI_HAL_GetIntMode(obj->spi.address, kDspiRxFifoDrainRequest); + }*/ + + //return SPI_IS_BUSY(spi_base); + return (spi_base->CTL & SPI_CTL_SPIEN_Msk); +} + +int spi_allow_powerdown(void) +{ + uint32_t modinit_mask = spi_modinit_mask; + while (modinit_mask) { + int spi_idx = nu_ctz(modinit_mask); + const struct nu_modinit_s *modinit = spi_modinit_tab + spi_idx; + if (modinit->modname != NC) { + SPI_T *spi_base = (SPI_T *) NU_MODBASE(modinit->modname); + // Disallow entering power-down mode if SPI transfer is enabled. + if (spi_base->CTL & SPI_CTL_SPIEN_Msk) { + return 0; + } + } + modinit_mask &= ~(1 << spi_idx); + } + + return 1; +} + +static int spi_writeable(spi_t * obj) +{ + // Receive FIFO must not be full to avoid receive FIFO overflow on next transmit/receive + //return (! SPI_GET_TX_FIFO_FULL_FLAG(((SPI_T *) NU_MODBASE(obj->spi.spi)))) && (SPI_GET_RX_FIFO_COUNT(((SPI_T *) NU_MODBASE(obj->spi.spi))) < NU_SPI_FIFO_DEPTH); + return (! SPI_GET_TX_FIFO_FULL_FLAG(((SPI_T *) NU_MODBASE(obj->spi.spi)))); +} + +static int spi_readable(spi_t * obj) +{ + return ! SPI_GET_RX_FIFO_EMPTY_FLAG(((SPI_T *) NU_MODBASE(obj->spi.spi))); +} + +static void spi_enable_event(spi_t *obj, uint32_t event, uint8_t enable) +{ + obj->spi.event &= ~SPI_EVENT_ALL; + obj->spi.event |= (event & SPI_EVENT_ALL); + if (event & SPI_EVENT_RX_OVERFLOW) { + SPI_EnableInt((SPI_T *) NU_MODBASE(obj->spi.spi), SPI_FIFO_RXOV_INT_MASK); + } +} + +static void spi_enable_vector_interrupt(spi_t *obj, uint32_t handler, uint8_t enable) +{ + const struct nu_modinit_s *modinit = get_modinit(obj->spi.spi, spi_modinit_tab); + MBED_ASSERT(modinit != NULL); + MBED_ASSERT(modinit->modname == obj->spi.spi); + + if (enable) { + NVIC_SetVector(modinit->irq_n, handler); + NVIC_EnableIRQ(modinit->irq_n); + } + else { + //NVIC_SetVector(modinit->irq_n, handler); + NVIC_DisableIRQ(modinit->irq_n); + } +} + +static void spi_master_enable_interrupt(spi_t *obj, uint8_t enable) +{ + SPI_T *spi_base = (SPI_T *) NU_MODBASE(obj->spi.spi); + + if (enable) { + // For SPI0, it could be 0 ~ 7. For SPI1 and SPI2, it could be 0 ~ 3. + if (spi_base == (SPI_T *) SPI0_BASE) { + SPI_SetFIFO(spi_base, 4, 4); + } + else { + SPI_SetFIFO(spi_base, 2, 2); + } + //SPI_SET_SUSPEND_CYCLE(spi_base, 4); + // Enable tx/rx FIFO threshold interrupt + SPI_EnableInt(spi_base, SPI_FIFO_RXTH_INT_MASK | SPI_FIFO_TXTH_INT_MASK); + } + else { + SPI_DisableInt(spi_base, SPI_FIFO_RXTH_INT_MASK | SPI_FIFO_TXTH_INT_MASK); + } +} + +static uint32_t spi_event_check(spi_t *obj) +{ + SPI_T *spi_base = (SPI_T *) NU_MODBASE(obj->spi.spi); + uint32_t event = 0; + + if (obj->spi.dma_usage == DMA_USAGE_NEVER) { + uint32_t n_rec = spi_master_read_asynch(obj); + spi_master_write_asynch(obj, n_rec); + } + + if (spi_is_tx_complete(obj) && spi_is_rx_complete(obj)) { + event |= SPI_EVENT_COMPLETE; + } + + // Receive FIFO Overrun + if (spi_base->STATUS & SPI_STATUS_RXOVIF_Msk) { + spi_base->STATUS = SPI_STATUS_RXOVIF_Msk; + // In case of tx length > rx length on DMA way + if (obj->spi.dma_usage == DMA_USAGE_NEVER) { + event |= SPI_EVENT_RX_OVERFLOW; + } + } + + // Receive Time-Out + if (spi_base->STATUS & SPI_STATUS_RXTOIF_Msk) { + spi_base->STATUS = SPI_STATUS_RXTOIF_Msk; + //event |= SPI_EVENT_ERROR; + } + // Transmit FIFO Under-Run + if (spi_base->STATUS & SPI_STATUS_TXUFIF_Msk) { + spi_base->STATUS = SPI_STATUS_TXUFIF_Msk; + event |= SPI_EVENT_ERROR; + } + + return event; +} + +/** + * Send words from the SPI TX buffer until the send limit is reached or the TX FIFO is full + * tx_limit is provided to ensure that the number of SPI frames (words) in flight can be managed. + * @param[in] obj The SPI object on which to operate + * @param[in] tx_limit The maximum number of words to send + * @return The number of SPI words that have been transfered + */ +static uint32_t spi_master_write_asynch(spi_t *obj, uint32_t tx_limit) +{ + uint32_t n_words = 0; + uint32_t tx_rmn = obj->tx_buff.length - obj->tx_buff.pos; + uint32_t rx_rmn = obj->rx_buff.length - obj->rx_buff.pos; + uint32_t max_tx = NU_MAX(tx_rmn, rx_rmn); + max_tx = NU_MIN(max_tx, tx_limit); + uint8_t data_width = spi_get_data_width(obj); + uint8_t bytes_per_word = (data_width + 7) / 8; + uint8_t *tx = (uint8_t *)(obj->tx_buff.buffer) + bytes_per_word * obj->tx_buff.pos; + SPI_T *spi_base = (SPI_T *) NU_MODBASE(obj->spi.spi); + + while ((n_words < max_tx) && spi_writeable(obj)) { + if (spi_is_tx_complete(obj)) { + // Transmit dummy as transmit buffer is empty + SPI_WRITE_TX(spi_base, 0); + } + else { + switch (bytes_per_word) { + case 4: + SPI_WRITE_TX(spi_base, nu_get32_le(tx)); + tx += 4; + break; + case 2: + SPI_WRITE_TX(spi_base, nu_get16_le(tx)); + tx += 2; + break; + case 1: + SPI_WRITE_TX(spi_base, *((uint8_t *) tx)); + tx += 1; + break; + } + + obj->tx_buff.pos ++; + } + n_words ++; + } + + //Return the number of words that have been sent + return n_words; +} + +/** + * Read SPI words out of the RX FIFO + * Continues reading words out of the RX FIFO until the following condition is met: + * o There are no more words in the FIFO + * OR BOTH OF: + * o At least as many words as the TX buffer have been received + * o At least as many words as the RX buffer have been received + * This way, RX overflows are not generated when the TX buffer size exceeds the RX buffer size + * @param[in] obj The SPI object on which to operate + * @return Returns the number of words extracted from the RX FIFO + */ +static uint32_t spi_master_read_asynch(spi_t *obj) +{ + uint32_t n_words = 0; + uint32_t tx_rmn = obj->tx_buff.length - obj->tx_buff.pos; + uint32_t rx_rmn = obj->rx_buff.length - obj->rx_buff.pos; + uint32_t max_rx = NU_MAX(tx_rmn, rx_rmn); + uint8_t data_width = spi_get_data_width(obj); + uint8_t bytes_per_word = (data_width + 7) / 8; + uint8_t *rx = (uint8_t *)(obj->rx_buff.buffer) + bytes_per_word * obj->rx_buff.pos; + SPI_T *spi_base = (SPI_T *) NU_MODBASE(obj->spi.spi); + + while ((n_words < max_rx) && spi_readable(obj)) { + if (spi_is_rx_complete(obj)) { + // Disregard as receive buffer is full + SPI_READ_RX(spi_base); + } + else { + switch (bytes_per_word) { + case 4: { + uint32_t val = SPI_READ_RX(spi_base); + nu_set32_le(rx, val); + rx += 4; + break; + } + case 2: { + uint16_t val = SPI_READ_RX(spi_base); + nu_set16_le(rx, val); + rx += 2; + break; + } + case 1: + *rx ++ = SPI_READ_RX(spi_base); + break; + } + + obj->rx_buff.pos ++; + } + n_words ++; + } + + // Return the number of words received + return n_words; +} + +static void spi_buffer_set(spi_t *obj, const void *tx, size_t tx_length, void *rx, size_t rx_length) +{ + obj->tx_buff.buffer = (void *) tx; + obj->tx_buff.length = tx_length; + obj->tx_buff.pos = 0; + obj->tx_buff.width = spi_get_data_width(obj); + obj->rx_buff.buffer = rx; + obj->rx_buff.length = rx_length; + obj->rx_buff.pos = 0; + obj->rx_buff.width = spi_get_data_width(obj); +} + +static void spi_check_dma_usage(DMAUsage *dma_usage, int *dma_ch_tx, int *dma_ch_rx) +{ + if (*dma_usage != DMA_USAGE_NEVER) { + if (*dma_ch_tx == DMA_ERROR_OUT_OF_CHANNELS) { + *dma_ch_tx = dma_channel_allocate(DMA_CAP_NONE); + } + if (*dma_ch_rx == DMA_ERROR_OUT_OF_CHANNELS) { + *dma_ch_rx = dma_channel_allocate(DMA_CAP_NONE); + } + + if (*dma_ch_tx == DMA_ERROR_OUT_OF_CHANNELS || *dma_ch_rx == DMA_ERROR_OUT_OF_CHANNELS) { + *dma_usage = DMA_USAGE_NEVER; + } + } + + if (*dma_usage == DMA_USAGE_NEVER) { + dma_channel_free(*dma_ch_tx); + *dma_ch_tx = DMA_ERROR_OUT_OF_CHANNELS; + dma_channel_free(*dma_ch_rx); + *dma_ch_rx = DMA_ERROR_OUT_OF_CHANNELS; + } +} + +static uint8_t spi_get_data_width(spi_t *obj) +{ + SPI_T *spi_base = (SPI_T *) NU_MODBASE(obj->spi.spi); + + return ((spi_base->CTL & SPI_CTL_DWIDTH_Msk) >> SPI_CTL_DWIDTH_Pos); +} + +static int spi_is_tx_complete(spi_t *obj) +{ + // ???: Exclude tx fifo empty check due to no such interrupt on DMA way + return (obj->tx_buff.pos == obj->tx_buff.length); + //return (obj->tx_buff.pos == obj->tx_buff.length && SPI_GET_TX_FIFO_EMPTY_FLAG(((SPI_T *) NU_MODBASE(obj->spi.spi)))); +} + +static int spi_is_rx_complete(spi_t *obj) +{ + return (obj->rx_buff.pos == obj->rx_buff.length); +} + +static void spi_dma_handler_tx(uint32_t id, uint32_t event_dma) +{ + spi_t *obj = (spi_t *) id; + + // FIXME: Pass this error to caller + if (event_dma & DMA_EVENT_ABORT) { + } + // Expect SPI IRQ will catch this transfer done event + if (event_dma & DMA_EVENT_TRANSFER_DONE) { + obj->tx_buff.pos = obj->tx_buff.length; + } + // FIXME: Pass this error to caller + if (event_dma & DMA_EVENT_TIMEOUT) { + } + + const struct nu_modinit_s *modinit = get_modinit(obj->spi.spi, spi_modinit_tab); + MBED_ASSERT(modinit != NULL); + MBED_ASSERT(modinit->modname == obj->spi.spi); + + void (*vec)(void) = (void (*)(void)) NVIC_GetVector(modinit->irq_n); + vec(); +} + +static void spi_dma_handler_rx(uint32_t id, uint32_t event_dma) +{ + spi_t *obj = (spi_t *) id; + + // FIXME: Pass this error to caller + if (event_dma & DMA_EVENT_ABORT) { + } + // Expect SPI IRQ will catch this transfer done event + if (event_dma & DMA_EVENT_TRANSFER_DONE) { + obj->rx_buff.pos = obj->rx_buff.length; + } + // FIXME: Pass this error to caller + if (event_dma & DMA_EVENT_TIMEOUT) { + } + + const struct nu_modinit_s *modinit = get_modinit(obj->spi.spi, spi_modinit_tab); + MBED_ASSERT(modinit != NULL); + MBED_ASSERT(modinit->modname == obj->spi.spi); + + void (*vec)(void) = (void (*)(void)) NVIC_GetVector(modinit->irq_n); + vec(); +} + +#endif + +#endif diff --git a/targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c b/targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c new file mode 100644 index 00000000000..ab78dcca000 --- /dev/null +++ b/targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c @@ -0,0 +1,268 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "us_ticker_api.h" +#include "sleep_api.h" +#include "mbed_assert.h" +#include "nu_modutil.h" +#include "nu_miscutil.h" +#include "critical.h" + +#define US_PER_TICK 1 + +// NOTE: mbed-drivers-test-timeout test requires 100 us timer granularity. +// NOTE: us_ticker will alarm the system for its counting, so make the counting period as long as possible for better power saving. +#define US_PER_TMR0HIRES_INT (1000 * 1000 * 10) +#define TMR0HIRES_FIRE_FREQ (1000 * 1000 / US_PER_TMR0HIRES_INT) +#define US_PER_TMR0HIRES_CLK 1 +#define TMR0HIRES_CLK_FREQ (1000 * 1000 / US_PER_TMR0HIRES_CLK) + +#define US_PER_TMR1LORES_CLK 100 +#define TMR1LORES_CLK_FREQ (1000 * 1000 / US_PER_TMR1LORES_CLK) +#define US_PER_TMR1HIRES_CLK 1 +#define TMR1HIRES_CLK_FREQ (1000 * 1000 / US_PER_TMR1HIRES_CLK) + +// Determine to use lo-res/hi-res timer according to CD period +#define CD_TMR_SEP_US 1000 + +static void tmr0_vec(void); +static void tmr1_vec(void); +static void us_ticker_arm_cd(void); + +static int us_ticker_inited = 0; +static volatile uint32_t counter_major = 0; +static volatile uint32_t pd_comp_us = 0; // Power-down compenstaion for normal counter +static volatile int cd_major_minor_us = 0; +static volatile int cd_minor_us = 0; +static volatile int cd_hires_tmr_armed = 0; // Flag of armed or not of hi-res timer for CD counter + +// NOTE: PCLK is set up in mbed_sdk_init(), invocation of which must be before C++ global object constructor. See init_api.c for details. +// NOTE: Choose clock source of timer: +// 1. HIRC: Be the most accurate but might cause unknown HardFault. +// 2. HXT: Less accurate and cannot pass mbed-drivers test. +// 3. PCLK(HXT): Less accurate but can pass mbed-drivers test. +// NOTE: TIMER_0 for normal counter, TIMER_1 for countdown. +static const struct nu_modinit_s timer0hires_modinit = {TIMER_0, TMR0_MODULE, CLK_CLKSEL1_TMR0SEL_PCLK0, 0, TMR0_RST, TMR0_IRQn, (void *) tmr0_vec}; +static const struct nu_modinit_s timer1lores_modinit = {TIMER_1, TMR1_MODULE, CLK_CLKSEL1_TMR1SEL_LIRC, 0, TMR1_RST, TMR1_IRQn, (void *) tmr1_vec}; +static const struct nu_modinit_s timer1hires_modinit = {TIMER_1, TMR1_MODULE, CLK_CLKSEL1_TMR1SEL_PCLK0, 0, TMR1_RST, TMR1_IRQn, (void *) tmr1_vec}; + +#define TMR_CMP_MIN 2 +#define TMR_CMP_MAX 0xFFFFFFu + +void us_ticker_init(void) +{ + if (us_ticker_inited) { + return; + } + + counter_major = 0; + pd_comp_us = 0; + cd_major_minor_us = 0; + cd_minor_us = 0; + cd_hires_tmr_armed = 0; + us_ticker_inited = 1; + + // Reset IP + SYS_ResetModule(timer0hires_modinit.rsetidx); + SYS_ResetModule(timer1lores_modinit.rsetidx); + + // Select IP clock source + CLK_SetModuleClock(timer0hires_modinit.clkidx, timer0hires_modinit.clksrc, timer0hires_modinit.clkdiv); + CLK_SetModuleClock(timer1lores_modinit.clkidx, timer1lores_modinit.clksrc, timer1lores_modinit.clkdiv); + // Enable IP clock + CLK_EnableModuleClock(timer0hires_modinit.clkidx); + CLK_EnableModuleClock(timer1lores_modinit.clkidx); + + // Timer for normal counter + uint32_t clk_timer0 = TIMER_GetModuleClock((TIMER_T *) NU_MODBASE(timer0hires_modinit.modname)); + uint32_t prescale_timer0 = clk_timer0 / TMR0HIRES_CLK_FREQ - 1; + MBED_ASSERT((prescale_timer0 != (uint32_t) -1) && prescale_timer0 <= 127); + uint32_t cmp_timer0 = US_PER_TMR0HIRES_INT / US_PER_TMR0HIRES_CLK; + MBED_ASSERT(cmp_timer0 >= TMR_CMP_MIN && cmp_timer0 <= TMR_CMP_MAX); + // NOTE: TIMER_CTL_CNTDATEN_Msk exists in NUC472, but not in M451. In M451, TIMER_CNT is updated continuously by default. + ((TIMER_T *) NU_MODBASE(timer0hires_modinit.modname))->CTL = TIMER_PERIODIC_MODE | prescale_timer0/* | TIMER_CTL_CNTDATEN_Msk*/; + ((TIMER_T *) NU_MODBASE(timer0hires_modinit.modname))->CMP = cmp_timer0; + + NVIC_SetVector(timer0hires_modinit.irq_n, (uint32_t) timer0hires_modinit.var); + NVIC_SetVector(timer1lores_modinit.irq_n, (uint32_t) timer1lores_modinit.var); + + NVIC_EnableIRQ(timer0hires_modinit.irq_n); + NVIC_EnableIRQ(timer1lores_modinit.irq_n); + + TIMER_EnableInt((TIMER_T *) NU_MODBASE(timer0hires_modinit.modname)); + TIMER_Start((TIMER_T *) NU_MODBASE(timer0hires_modinit.modname)); +} + +uint32_t us_ticker_read() +{ + if (! us_ticker_inited) { + us_ticker_init(); + } + + TIMER_T * timer0_base = (TIMER_T *) NU_MODBASE(timer0hires_modinit.modname); + + do { + uint32_t major_minor_us; + uint32_t minor_us; + + // NOTE: As TIMER_CNT = TIMER_CMP and counter_major has increased by one, TIMER_CNT doesn't change to 0 for one tick time. + // NOTE: As TIMER_CNT = TIMER_CMP or TIMER_CNT = 0, counter_major (ISR) may not sync with TIMER_CNT. So skip and fetch stable one at the cost of 1 clock delay on this read. + do { + core_util_critical_section_enter(); + + // NOTE: Order of reading minor_us/carry here is significant. + minor_us = TIMER_GetCounter(timer0_base) * US_PER_TMR0HIRES_CLK; + uint32_t carry = (timer0_base->INTSTS & TIMER_INTSTS_TIF_Msk) ? 1 : 0; + // When TIMER_CNT approaches TIMER_CMP and will wrap soon, we may get carry but TIMER_CNT not wrapped. Hanlde carefully carry == 1 && TIMER_CNT is near TIMER_CMP. + if (carry && minor_us > (US_PER_TMR0HIRES_INT / 2)) { + major_minor_us = (counter_major + 1) * US_PER_TMR0HIRES_INT; + } + else { + major_minor_us = (counter_major + carry) * US_PER_TMR0HIRES_INT + minor_us; + } + + core_util_critical_section_exit(); + } + while (minor_us == 0 || minor_us == US_PER_TMR0HIRES_INT); + + // Add power-down compensation + return (major_minor_us + pd_comp_us) / US_PER_TICK; + } + while (0); +} + +void us_ticker_disable_interrupt(void) +{ + TIMER_DisableInt((TIMER_T *) NU_MODBASE(timer1lores_modinit.modname)); +} + +void us_ticker_clear_interrupt(void) +{ + TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(timer1lores_modinit.modname)); +} + +void us_ticker_set_interrupt(timestamp_t timestamp) +{ + TIMER_Stop((TIMER_T *) NU_MODBASE(timer1lores_modinit.modname)); + + int delta = (int) (timestamp - us_ticker_read()); + // NOTE: If this event was in the past, arm an interrupt to be triggered immediately. + cd_major_minor_us = delta * US_PER_TICK; + + us_ticker_arm_cd(); +} + +void us_ticker_prepare_sleep(struct sleep_s *obj) +{ + // Reject power-down if hi-res timer (HIRC/HXT) is now armed for CD counter. + if (obj->powerdown) { + obj->powerdown = ! cd_hires_tmr_armed; + } + + core_util_critical_section_enter(); + + if (obj->powerdown) { + // NOTE: On entering power-down mode, HIRC/HXT will be disabled in normal mode, but not in ICE mode. This may cause confusion in development. + // To not be inconsistent due to above, always disable clock source of normal counter, and then re-enable it and make compensation on wakeup from power-down. + CLK_DisableModuleClock(timer0hires_modinit.clkidx); + } + + core_util_critical_section_exit(); +} + +void us_ticker_wakeup_from_sleep(struct sleep_s *obj) +{ + core_util_critical_section_enter(); + + if (obj->powerdown) { + // Calculate power-down compensation + pd_comp_us += obj->period_us; + + CLK_EnableModuleClock(timer0hires_modinit.clkidx); + } + + core_util_critical_section_exit(); +} + +static void tmr0_vec(void) +{ + TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(timer0hires_modinit.modname)); + counter_major ++; +} + +static void tmr1_vec(void) +{ + TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(timer1lores_modinit.modname)); + cd_major_minor_us -= cd_minor_us; + cd_hires_tmr_armed = 0; + if (cd_major_minor_us <= 0) { + // NOTE: us_ticker_set_interrupt() may get called in us_ticker_irq_handler(); + us_ticker_irq_handler(); + } + else { + us_ticker_arm_cd(); + } +} + +static void us_ticker_arm_cd(void) +{ + TIMER_T * timer1_base = (TIMER_T *) NU_MODBASE(timer1lores_modinit.modname); + uint32_t tmr1_clk_freq; + uint32_t us_per_tmr1_clk; + + /** + * Reserve CD_TMR_SEP_US-plus alarm period for hi-res timer + * 1. period >= CD_TMR_SEP_US * 2. Divide into two rounds: + * CD_TMR_SEP_US * n (lo-res timer) + * CD_TMR_SEP_US + period % CD_TMR_SEP_US (hi-res timer) + * 2. period < CD_TMR_SEP_US * 2. Just one round: + * period (hi-res timer) + */ + if (cd_major_minor_us >= CD_TMR_SEP_US * 2) { + cd_minor_us = cd_major_minor_us - cd_major_minor_us % CD_TMR_SEP_US - CD_TMR_SEP_US; + + CLK_SetModuleClock(timer1lores_modinit.clkidx, timer1lores_modinit.clksrc, timer1lores_modinit.clkdiv); + tmr1_clk_freq = TMR1LORES_CLK_FREQ; + us_per_tmr1_clk = US_PER_TMR1LORES_CLK; + + cd_hires_tmr_armed = 0; + } + else { + cd_minor_us = cd_major_minor_us; + + CLK_SetModuleClock(timer1hires_modinit.clkidx, timer1hires_modinit.clksrc, timer1hires_modinit.clkdiv); + tmr1_clk_freq = TMR1HIRES_CLK_FREQ; + us_per_tmr1_clk = US_PER_TMR1HIRES_CLK; + + cd_hires_tmr_armed = 1; + } + + // Reset 8-bit PSC counter, 24-bit up counter value and CNTEN bit + timer1_base->CTL |= TIMER_CTL_RSTCNT_Msk; + // One-shot mode, Clock = 1 MHz + uint32_t clk_timer1 = TIMER_GetModuleClock((TIMER_T *) NU_MODBASE(timer1lores_modinit.modname)); + uint32_t prescale_timer1 = clk_timer1 / tmr1_clk_freq - 1; + MBED_ASSERT((prescale_timer1 != (uint32_t) -1) && prescale_timer1 <= 127); + // NOTE: TIMER_CTL_CNTDATEN_Msk exists in NUC472, but not in M451. In M451, TIMER_CNT is updated continuously by default. + timer1_base->CTL &= ~(TIMER_CTL_OPMODE_Msk | TIMER_CTL_PSC_Msk/* | TIMER_CTL_CNTDATEN_Msk*/); + timer1_base->CTL |= TIMER_ONESHOT_MODE | prescale_timer1/* | TIMER_CTL_CNTDATEN_Msk*/; + + cd_minor_us = NU_CLAMP(cd_minor_us, TMR_CMP_MIN * us_per_tmr1_clk, TMR_CMP_MAX * us_per_tmr1_clk); + timer1_base->CMP = cd_minor_us / us_per_tmr1_clk; + + TIMER_EnableInt(timer1_base); + TIMER_Start(timer1_base); +} diff --git a/targets/TARGET_NUVOTON/mbed_rtx.h b/targets/TARGET_NUVOTON/mbed_rtx.h index 5cbc71ae0d9..e948d3117cf 100644 --- a/targets/TARGET_NUVOTON/mbed_rtx.h +++ b/targets/TARGET_NUVOTON/mbed_rtx.h @@ -53,6 +53,42 @@ #error "no toolchain defined" #endif +#elif defined(TARGET_NUMAKER_PFM_M453) + +#ifndef OS_TASKCNT +#define OS_TASKCNT 14 +#endif +#ifndef OS_MAINSTKSIZE +#define OS_MAINSTKSIZE 256 +#endif +#ifndef OS_CLOCK +#define OS_CLOCK 72000000 +#endif + +#if defined(__CC_ARM) + extern uint32_t Image$$ARM_LIB_HEAP$$ZI$$Base[]; + extern uint32_t Image$$ARM_LIB_HEAP$$ZI$$Length[]; + extern uint32_t Image$$ARM_LIB_STACK$$ZI$$Base[]; + extern uint32_t Image$$ARM_LIB_STACK$$ZI$$Length[]; + #define HEAP_START ((unsigned char*) Image$$ARM_LIB_HEAP$$ZI$$Base) + #define HEAP_SIZE ((uint32_t) Image$$ARM_LIB_HEAP$$ZI$$Length) + #define ISR_STACK_START ((unsigned char*)Image$$ARM_LIB_STACK$$ZI$$Base) + #define ISR_STACK_SIZE ((uint32_t)Image$$ARM_LIB_STACK$$ZI$$Length) +#elif defined(__GNUC__) + extern uint32_t __StackTop[]; + extern uint32_t __StackLimit[]; + extern uint32_t __end__[]; + extern uint32_t __HeapLimit[]; + #define HEAP_START ((unsigned char*)__end__) + #define HEAP_SIZE ((uint32_t)((uint32_t)__HeapLimit - (uint32_t)HEAP_START)) + #define ISR_STACK_START ((unsigned char*)__StackLimit) + #define ISR_STACK_SIZE ((uint32_t)((uint32_t)__StackTop - (uint32_t)__StackLimit)) +#elif defined(__ICCARM__) + /* No region declarations needed */ +#else + #error "no toolchain defined" +#endif + #endif #endif // MBED_MBED_RTX_H diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/M451Series.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/M451Series.h new file mode 100644 index 00000000000..516a181b6cb --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/M451Series.h @@ -0,0 +1,17150 @@ +/****************************************************************************** + * @file M451Series.h + * @version V3.10 + * $Revision: 179 $ + * $Date: 15/09/04 3:45p $ + * @brief CMSIS Cortex-M4 Core Peripheral Access Layer Header File for M451 Series MCU + * + * @note + * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ + + +/** + \mainpage Introduction + * + * + * This user manual describes the usage of M451 Series MCU device driver + * + * Disclaimer + * + * The Software is furnished "AS IS", without warranty as to performance or results, and + * the entire risk as to performance or results is assumed by YOU. Nuvoton disclaims all + * warranties, express, implied or otherwise, with regard to the Software, its use, or + * operation, including without limitation any and all warranties of merchantability, fitness + * for a particular purpose, and non-infringement of intellectual property rights. + * + * Copyright Notice + * + * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved. + */ + +/** + * \page PG_REV Revision History + * + * Revision 3.01.001 + * \li Added Nu-LB-M451, NuEdu and USB device sample code. + * \li Added a lacking macro SYS_IS_LVR_RST() to SYS driver. + * \li Added a sample code DAC_PDMA_ScatterGather_PWMTrigger to use PDMA scatter gather mode and trigger DAC by PWM. + * \li Added counter type constant definitions: PWM_UP_COUNTER, PWM_DOWN_COUNTER, and PWM_UP_DOWN_COUNTER. + * \li Added DAC_PDMA_PWMTrigger sample code to use PDMA and trigger DAC by PWM. + * \li Added a sample code EADC_PDMA_PWM_Trigger to trigger EADC with PWM and copy result by PDMA. + * \li Added a new function to control systick and select systick clock source CLK_EnableSysTick() and CLK_DisableSysTick() in CLK driver. + * \li Added 'NMIEN' and 'NMISTS' control registers to M451Series.h for NMI control. + * \li Added PDMA_ScatterGather_PingPongBuffer sample code to create ping-pong buffer with PDMA scatter gather mode. + * \li Added 'PE_DRVCTL' register of GPIO to M451Series.h for GPIO driving strength control. + * \li Added a sample code PWM_PDMA_Capture to transfer PWM capture data by PDMA. + * \li Added SCLIB_ActivateDelay API for initial SC with non-standard H/W design in SC driver + * \li Fixed the bug of EADC_IS_INT_FLAG_OV() that accesses the incorrect register. + * \li Fixed the bug of EADC_IS_SAMPLE_MODULE_OV() that accesses the incorrect register. + * \li Fixed the bug of EADC_SetExtendSampleTime() for position shift error in EADC driver. + * \li Fixed the bug of EADC_SetTriggerDelayTime() for position shift error in EADC driver. + * \li Fixed the bug of PWM_ENABLE_OUTPUT_INVERTER () that output inverter function cannot be disabled. + * \li Fixed the bug of PWM_MASK_OUTPUT() in PWM driver that mask function cannot be disabled. + * \li Fixed CAN_STATUS_LEC_Msk from 0x03 to 0x07. + * \li Fixed the bug of CLK_SysTickDelay() that COUNTFLAG may not be cleared in CLK driver. + * \li Fixed CTL and PINCTL regsiter synchronize issue by waiting synchronized ready flag in SC driver. + * \li Fixed DAC_SetDelayTime() calculation error in DAC driver because the dac->TCTL only used 10 bits, not 14 bits. + * \li Fixed EADC_CMP_ADCMPIE_DISABLE definition error. + * \li Fixed EADC_CMP_ADCMPIE_DISABLE definition error. + * \li Fixed IAR entry point from __iar_program_start to Reset_Handler + * \li Fixed PWM_ConfigOutputChannel() return value bug in PWM driver. + * \li Fixed the bug of PWM_ConfigSyncPhase() that cannot configure synchronized source for channel2~5. + * \li Fixed SC_SET_STOP_BIT_LEN definition error. + * \li Fixed SCUART baudrate return error in SCUART_Open and SCUART_SetLineConfig API of SCUART driver. + * \li Fixed SCUART_PARITY_NONE/SCUART_PARITY_EVEN/SCUART_PARITY_ODD definition bug in SCUART driver. + * \li Fixed u32DataWidth setting error by sc->UARTCTL in SCUART_SetLineConfig API of SCUART driver. + * \li Fixed SMBD_Enable constant value definition error in I2C driver. + * \li Fixed the problem that MSC device detection is aborted due to REQUEST_SENSE command not ready. + * \li Fixed UART clock setting bug in UART_Open(), UART_SetLine_Config() and UART_SelectIrDAMode() of UART driver. + * \li Improved compatibility of USBH driver for pen driver. + * \li Improved EADC_ConfigSampleModule() to support rising and falling trigger at the same time. + * \li Improved EBI_SRAM sample code to add PDMA data transfer with EBI. + * \li Improved SC driver to support more than one SC port. + * \li Improved USBH driver to support composite HID devices + * \li Improved USBD driver to support more USB device sample code. + * \li Modified I2C_STOP() from #define to inline and add waiting STO bit clear to 0 . This modified is safe for next START coming soon. + * \li Removed CRC clock enabled in CRC_Open(). User should enable CRC clock in system initialization before any CRC operation. + * \li Removed FMC_ReadDID() in FMC driver. This function was no longer supported. + * \li Removed I2C_CTL_STA_STO_SI and I2C_CTL_STA_STO_SI_AA definitions to avoid STOP and START write to control bit at the same time. + * + * Revision 3.00.005 + * \li Fixed EADC_CTL_DMOF_STRAIGHT_BINARY and EADC_CTL_DMOF_TWOS_COMPLEMENT definition error in EADC driver. + * \li Fixed EADC_FALLING_EDGE_TRIGGER definition error in EADC driver. + * \li Fixed EADC_RISING_EDGE_TRIGGER definition error in EADC driver. + * \li Fixed UART transmit data bug in UART_TEST_HANDLE() of UART_TxRxFunction sample code. + * \li Fixed the data missing bug when BULK IN transfer is end by max packet size packet at last packet in USBD_VCOM sample code. + * \li Fixed program user configuration area without erase in USBD_MassStorage_DataFlash sample code. + * \li Fixed the bug of switching HCLK to HIRC before enabling PLL in CLK_SetCoreClock() of CLK driver. + * \li Fixed isochronous transfer bugs of USB Host library. + * \li Fixed Clear Modem Status Interrupt flag bug in UART_ClearIntFlag() of UART driver. + * \li Fixed the time-out flag clear bug in I2C_ClearTimeoutFlag() of I2C driver. + * \li Replaced PERIOD0~5 with PERIOD[6] in PWM_T, and modified PERIOD bit field constant definition in M451Series.h. + * \li Replaced CMPDAT0~5 with CMPDAT0[6] in PWM_T, and modified CMPDAT bit field constant definition in M451Series.h. + * \li Replaced CNT0~5 with CNT[6] in PWM_T, and modified CNT bit field constant definition in M451Series.h. + * \li Replaced PBUF0~5 with PBUF[6] in PWM_T, and modified PBUF bit field constant definition in M451Series.h. + * \li Replaced CMPBUF0~5 with CMPBUF[6] in PWM_T, and modified CMPBUF bit field constant definition in M451Series.h. + * \li Replaced CURSCAT0~CURSCAT11 with CURSCAT[12] in PDMA_T of M451Series.h. + * \li Modified CLK_WaitClockReady() time-out to about 300 ms in CLK driver. + * \li Updated USB USBD_MassStorage_DataFlash sample code and USB Driver to pass USB-IF MSC test. (The MassStorage size must be greater than 64 KB; otherwise, Command Set test will fail in MSC test). + * \li Replaced old HID library file (open source) with Nuvoton HID library in USB Host library. + * \li Added USBH_Audio_Class and USBH_UAC_HID sample code for USB Host to support UAC + HID device. + * + * Revision 3.00.004 + * \li Fixed the time-out from 5 ms to 300 ms in CLK_WaitClockReady() of CLK driver. + * \li Fixed the bug of UART_ClearIntFlag() in UART driver to only clear one flag at one time. + * \li Fixed the missing parameter, UART clock source LXT, for CLK_SetModuleClock() in UART driver. + * \li Fixed the bug of clearing data and CTS wake-up flag to clear one flag at one time in UART1_IRQHandler() of UART_Wakeup sample code. + * \li Fixed the bug of RS485_HANDLE() in the UART_RS485_Slave sample code to only clear one flag at one time. + * \li Fixed the bug of clearing auto baud rate detect finished and time-out flag to clear one flag at one time in AutoBaudRate_RxTest() of UART_AutoBaudRate_Slave sample code. + * \li Fixed NVIC_EnableIRQ() to NVIC_DisableIRQ() after chip wake-up in I2C_Wakeup_Slave sample code. + * \li Fixed multi-function setting error of SC CD pin in USBD_CCID sample code. + * \li Fixed PD.7 (Headphone output control pin) output mode configuration in WAU8822_Setup() of USBD_Audio_NAU8822 sample code. + * \li Fixed wrong CLK_WaitClockReady parameter in I2C_GCMode_Slave sample code. + * \li Fixed UART data transfer bug of USBD_VCOM sample code. + * \li Updated CLK driver to avoid HIRC force enabled in CLK_SetHCLK() and CLK_SetCoreClock(). + * \li Updated USBD driver to pass USB-IF MSC test. + * \li Updated USBD_MassStorage_DataFlash sample code to pass USB-IF MSC test. + * \li Updated driver of VCOM for win8 certification in USBD_VCOM sample code. + * \li Added HID Media key supporting in USBD_Audio_HID_NAU8822 sample code. + * \li Added new sample code USBH_UAC_HID of USB Host to support UAC + HID device. + * \li Added new sample code USBH_Audio_Class to support USB audio class device (UAC). + * + * Revision 3.00.003 + * \li Added USBD_Audio_HID_NAU8822 sample code. + * + * Revision 3.00.002 + * \li Fixed serial number code in device descriptor. + * \li Fixed EBI_Open API did not perform u32CSActiveLevel parameters to set CS pin polar. + * \li Fixed SMBus bus time-out and Clock Lo time-out API. + * \li Fixed I2C0,1 IP reset of SYS_IPRST1. + * \li Fixed include path of CMSIS. + * \li Fixed SPI_CLR_UNIT_TRANS_INT_FLAG( ) definition. + * \li Fixed USBD_INT_WAKEUP definition. + * \li Modified USBD driver to support USB remote wake-up function. + * + * Revision 3.00.001 + * \li Initial Release. +*/ + +#ifndef __M451SERIES_H__ +#define __M451SERIES_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +/******************************************************************************/ +/* Processor and Core Peripherals */ +/******************************************************************************/ +/** @addtogroup CMSIS Device CMSIS Definitions + Configuration of the Cortex-M4 Processor and Core Peripherals + @{ +*/ + +/* + * ========================================================================== + * ---------- Interrupt Number Definition ----------------------------------- + * ========================================================================== + */ + +typedef enum IRQn +{ + /****** Cortex-M4 Processor Exceptions Numbers ***************************************************/ + NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */ + MemoryManagement_IRQn = -12, /*!< 4 Memory Management Interrupt */ + BusFault_IRQn = -11, /*!< 5 Bus Fault Interrupt */ + UsageFault_IRQn = -10, /*!< 6 Usage Fault Interrupt */ + SVCall_IRQn = -5, /*!< 11 SV Call Interrupt */ + DebugMonitor_IRQn = -4, /*!< 12 Debug Monitor Interrupt */ + PendSV_IRQn = -2, /*!< 14 Pend SV Interrupt */ + SysTick_IRQn = -1, /*!< 15 System Tick Interrupt */ + + /****** M451 Specific Interrupt Numbers ********************************************************/ + + BOD_IRQn = 0, /*!< Brown Out detection Interrupt */ + IRC_IRQn = 1, /*!< Internal RC Interrupt */ + PWRWU_IRQn = 2, /*!< Power Down Wake Up Interrupt */ + RAMPE_IRQn = 3, /*!< SRAM parity check failed Interrupt */ + CKFAIL_IRQn = 4, /*!< Clock failed Interrupt */ + RTC_IRQn = 6, /*!< Real Time Clock Interrupt */ + TAMPER_IRQn = 7, /*!< Tamper detection Interrupt */ + WDT_IRQn = 8, /*!< Watchdog Timer Interrupt */ + WWDT_IRQn = 9, /*!< Window Watchdog Timer Interrupt */ + EINT0_IRQn = 10, /*!< External Input 0 Interrupt */ + EINT1_IRQn = 11, /*!< External Input 1 Interrupt */ + EINT2_IRQn = 12, /*!< External Input 2 Interrupt */ + EINT3_IRQn = 13, /*!< External Input 3 Interrupt */ + EINT4_IRQn = 14, /*!< External Input 4 Interrupt */ + EINT5_IRQn = 15, /*!< External Input 5 Interrupt */ + GPA_IRQn = 16, /*!< GPIO Port A Interrupt */ + GPB_IRQn = 17, /*!< GPIO Port B Interrupt */ + GPC_IRQn = 18, /*!< GPIO Port C Interrupt */ + GPD_IRQn = 19, /*!< GPIO Port D Interrupt */ + GPE_IRQn = 20, /*!< GPIO Port E Interrupt */ + GPF_IRQn = 21, /*!< GPIO Port F Interrupt */ + SPI0_IRQn = 22, /*!< SPI0 Interrupt */ + SPI1_IRQn = 23, /*!< SPI1 Interrupt */ + BRAKE0_IRQn = 24, /*!< BRAKE0 Interrupt */ + PWM0P0_IRQn = 25, /*!< PWM0P0 Interrupt */ + PWM0P1_IRQn = 26, /*!< PWM0P1 Interrupt */ + PWM0P2_IRQn = 27, /*!< PWM0P2 Interrupt */ + BRAKE1_IRQn = 28, /*!< BRAKE1 Interrupt */ + PWM1P0_IRQn = 29, /*!< PWM1P0 Interrupt */ + PWM1P1_IRQn = 30, /*!< PWM1P1 Interrupt */ + PWM1P2_IRQn = 31, /*!< PWM1P2 Interrupt */ + TMR0_IRQn = 32, /*!< Timer 0 Interrupt */ + TMR1_IRQn = 33, /*!< Timer 1 Interrupt */ + TMR2_IRQn = 34, /*!< Timer 2 Interrupt */ + TMR3_IRQn = 35, /*!< Timer 3 Interrupt */ + UART0_IRQn = 36, /*!< UART 0 Interrupt */ + UART1_IRQn = 37, /*!< UART 1 Interrupt */ + I2C0_IRQn = 38, /*!< I2C 0 Interrupt */ + I2C1_IRQn = 39, /*!< I2C 1 Interrupt */ + PDMA_IRQn = 40, /*!< Peripheral DMA Interrupt */ + DAC_IRQn = 41, /*!< DAC Interrupt */ + ADC00_IRQn = 42, /*!< ADC0 Source 0 Interrupt */ + ADC01_IRQn = 43, /*!< ADC0 Source 1 Interrupt */ + ACMP01_IRQn = 44, /*!< Analog Comparator 0 and 1 Interrupt */ + ADC02_IRQn = 46, /*!< ADC0 Source 2 Interrupt */ + ADC03_IRQn = 47, /*!< ADC0 Source 3 Interrupt */ + UART2_IRQn = 48, /*!< UART2 Interrupt */ + UART3_IRQn = 49, /*!< UART3 Interrupt */ + SPI2_IRQn = 51, /*!< SPI2 Interrupt */ + USBD_IRQn = 53, /*!< USB device Interrupt */ + USBH_IRQn = 54, /*!< USB host Interrupt */ + USBOTG_IRQn = 55, /*!< USB OTG Interrupt */ + CAN0_IRQn = 56, /*!< CAN0 Interrupt */ + SC0_IRQn = 58, /*!< Smart Card 0 Interrupt */ + TK_IRQn = 63 /*!< Touch Key Interrupt */ +} IRQn_Type; + + +/* + * ========================================================================== + * ----------- Processor and Core Peripheral Section ------------------------ + * ========================================================================== + */ + +/* Configuration of the Cortex-M# Processor and Core Peripherals */ +#define __CM4_REV 0x0201 /*!< Core Revision r2p1 */ +#define __NVIC_PRIO_BITS 4 /*!< Number of Bits used for Priority Levels */ +#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */ +#define __MPU_PRESENT 1 /*!< MPU present or not */ +#define __FPU_PRESENT 1 /*!< FPU present or not */ + +/*@}*/ /* end of group CMSIS */ + +#include "core_cm4.h" /* Cortex-M4 processor and core peripherals */ +#include "system_M451Series.h" /* M451 System include file */ +#include + + + +/******************************************************************************/ +/* Device Specific Peripheral registers structures */ +/******************************************************************************/ + +/** @addtogroup REGISTER Control Register + + @{ + +*/ + + +/*---------------------- Analog Comparator Controller -------------------------*/ +/** + @addtogroup ACMP Analog Comparator Controller(ACMP) + Memory Mapped Structure for ACMP Controller +@{ */ + + +typedef struct +{ + + +/** + * @var ACMP_T::CTL + * Offset: 0x00 Analog Comparator 0 Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |ACMPEN |Comparator Enable Bit + * | | |0 = Comparator 0 Disabled. + * | | |1 = Comparator 0 Enabled. + * |[1] |ACMPIE |Comparator Interrupt Enable Bit + * | | |0 = Comparator 0 interrupt Disabled. + * | | |1 = Comparator 0 interrupt Enabled. + * | | |If WKEN (ACMP_CTL0[16]) is set to 1, the wake-up interrupt function will be enabled as well. + * |[2] |HYSEN |Comparator Hysteresis Enable Bit + * | | |0 = Comparator 0 hysteresis Disabled. + * | | |1 = Comparator 0 hysteresis Enabled. + * |[3] |ACMPOINV |Comparator Output Inverse + * | | |0 = Comparator 0 output inverse Disabled. + * | | |1 = Comparator 0 output inverse Enabled. + * |[5:4] |NEGSEL |Comparator Negative Input Selection + * | | |00 = ACMP0_N pin. + * | | |01 = Internal comparator reference voltage (CRV). + * | | |10 = Band-gap voltage. + * | | |11 = DAC output. + * |[7:6] |POSSEL |Comparator Positive Input Selection + * | | |00 = Input from ACMP0_P0. + * | | |01 = Input from ACMP0_P1. + * | | |10 = Input from ACMP0_P2. + * | | |11 = Input from ACMP0_P3. + * |[9:8] |INTPOL |Interrupt Condition Polarity Selection + * | | |ACMPIF0 will be set to 1 when comparator output edge condition is detected. + * | | |00 = Rising edge or falling edge. + * | | |01 = Rising edge. + * | | |10 = Falling edge. + * | | |11 = Reserved. + * |[12] |OUTSEL |Comparator Output Select + * | | |0 = Comparator 0 output to ACMP0_O pin is unfiltered comparator output. + * | | |1 = Comparator 0 output to ACMP0_O pin is from filter output. + * |[15:13] |FILTSEL |Comparator Output Filter Count Selection + * | | |000 = Filter function is Disabled. + * | | |001 = ACMP0 output is sampled 1 consecutive PCLK. + * | | |010 = ACMP0 output is sampled 2 consecutive PCLKs. + * | | |011 = ACMP0 output is sampled 4 consecutive PCLKs. + * | | |100 = ACMP0 output is sampled 8 consecutive PCLKs. + * | | |101 = ACMP0 output is sampled 16 consecutive PCLKs. + * | | |110 = ACMP0 output is sampled 32 consecutive PCLKs. + * | | |111 = ACMP0 output is sampled 64 consecutive PCLKs. + * |[16] |WKEN |Power Down Wake-Up Enable Bit + * | | |0 = Wake-up function Disabled. + * | | |1 = Wake-up function Enabled. + * --------------------------------------------------------------------------------------------------- + * Offset: 0x04 Analog Comparator 1 Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |ACMPEN |Comparator Enable Bit + * | | |0 = Comparator 1 Disabled. + * | | |1 = Comparator 1 Enabled. + * |[1] |ACMPIE |Comparator Interrupt Enable Bit + * | | |0 = Comparator 1 interrupt Disabled. + * | | |1 = Comparator 1 interrupt Enabled. + * | | |If WKEN (ACMP_CTL1[16]) is set to 1, the wake-up interrupt function will be enabled as well. + * |[2] |HYSEN |Comparator Hysteresis Enable Bit + * | | |0 = Comparator 1 hysteresis Disabled. + * | | |1 = Comparator 1 hysteresis Enabled. + * |[3] |ACMPOINV |Comparator Output Inverse Control + * | | |0 = Comparator 1 output inverse Disabled. + * | | |1 = Comparator 1 output inverse Enabled. + * |[5:4] |NEGSEL |Comparator Negative Input Selection + * | | |00 = ACMP1_N pin. + * | | |01 = Internal comparator reference voltage (CRV). + * | | |10 = Band-gap voltage. + * | | |11 = DAC output. + * |[7:6] |POSSEL |Comparator Positive Input Selection + * | | |00 = Input from ACMP1_P0. + * | | |01 = Input from ACMP1_P1. + * | | |10 = Input from ACMP1_P2. + * | | |11 = Input from ACMP1_P3. + * |[9:8] |INTPOL |Interrupt Condition Polarity Selection + * | | |ACMPIF1 will be set to 1 when comparator output edge condition is detected. + * | | |00 = Rising edge or falling edge. + * | | |01 = Rising edge. + * | | |10 = Falling edge. + * | | |11 = Reserved. + * |[12] |OUTSEL |Comparator Output Select + * | | |0 = Comparator 1 output to ACMP1_O pin is unfiltered comparator output. + * | | |1 = Comparator 1 output to ACMP1_O pin is from filter output. + * |[15:13] |FILTSEL |Comparator Output Filter Count Selection + * | | |000 = Filter function is Disabled. + * | | |001 = ACMP1 output is sampled 1 consecutive PCLK. + * | | |010 = ACMP1 output is sampled 2 consecutive PCLKs. + * | | |011 = ACMP1 output is sampled 4 consecutive PCLKs. + * | | |100 = ACMP1 output is sampled 8 consecutive PCLKs. + * | | |101 = ACMP1 output is sampled 16 consecutive PCLKs. + * | | |110 = ACMP1 output is sampled 32 consecutive PCLKs. + * | | |111 = ACMP1 output is sampled 64 consecutive PCLKs. + * |[16] |WKEN |Power Down Wakeup Enable Bit + * | | |0 = Wake-up function Disabled. + * | | |1 = Wake-up function Enabled. + * @var ACMP_T::STATUS + * Offset: 0x08 Analog Comparator Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |ACMPIF0 |Comparator 0 Interrupt Flag + * | | |This bit is set by hardware when the edge condition defined by INTPOL (ACMP_CTL0[9:8]) is detected on comparator 0 output. + * | | |This will generate an interrupt if ACMPIE (ACMP_CTL0[1]) is set to 1. + * | | |Note: Write 1 to clear this bit to 0. + * |[1] |ACMPIF1 |Comparator 1 Interrupt Flag + * | | |This bit is set by hardware when the edge condition defined by INTPOL (ACMP_CTL1[9:8]) is detected on comparator 1 output. + * | | |This will cause an interrupt if ACMPIE (ACMP_CTL1[1]) is set to 1. + * | | |Note: Write 1 to clear this bit to 0. + * |[4] |ACMPO0 |Comparator 0 Output + * | | |Synchronized to the PCLK to allow reading by software. + * | | |Cleared when the comparator 0 is disabled, i.e. ACMPEN (ACMP_CTL0[0]) is cleared to 0. + * |[5] |ACMPO1 |Comparator 1 Output + * | | |Synchronized to the PCLK to allow reading by software. + * | | |Cleared when the comparator 1 is disabled, i.e. ACMPEN (ACMP_CTL1[0]) is cleared to 0. + * |[8] |WKIF0 |Comparator 0 Power Down Wake-Up Interrupt Flag + * | | |This bit will be set to 1 when ACMP0 wake-up interrupt event occurs. + * | | |0 = No power down wake-up occurred. + * | | |1 = Power down wake-up occurred. + * | | |Note: Write 1 to clear this bit to 0. + * |[9] |WKIF1 |Comparator 1 Power Down Wake-Up Interrupt Flag + * | | |This bit will be set to 1 when ACMP1 wake-up interrupt event occurs. + * | | |0 = No power down wake-up occurred. + * | | |1 = Power down wake-up occurred. + * | | |Note: Write 1 to clear this bit to 0. + * @var ACMP_T::VREF + * Offset: 0x0C Analog Comparator Reference Voltage Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[3:0] |CRVCTL |Comparator Reference Voltage Setting + * | | |CRV = CRV source voltage * (1/6+CRVCTL/24). + * |[6] |CRVSSEL |CRV Source Voltage Selection + * | | |0 = VDDA is selected as CRV source voltage. + * | | |1 = The reference voltage defined by SYS_VREFCTL register is selected as CRV source voltage. + */ + + __IO uint32_t CTL[2]; /* Offset: 0x00 Analog Comparator Control Register */ + __IO uint32_t STATUS; /* Offset: 0x08 Analog Comparator Status Register */ + __IO uint32_t VREF; /* Offset: 0x0C Analog Comparator Reference Voltage Control Register */ + +} ACMP_T; + + + +/** + @addtogroup ACMP_CONST ACMP Bit Field Definition + Constant Definitions for ACMP Controller +@{ */ + +#define ACMP_CTL_ACMPEN_Pos (0) /*!< ACMP_T::CTL: ACMPEN Position */ +#define ACMP_CTL_ACMPEN_Msk (0x1ul << ACMP_CTL_ACMPEN_Pos) /*!< ACMP_T::CTL: ACMPEN Mask */ + +#define ACMP_CTL_ACMPIE_Pos (1) /*!< ACMP_T::CTL: ACMPIE Position */ +#define ACMP_CTL_ACMPIE_Msk (0x1ul << ACMP_CTL_ACMPIE_Pos) /*!< ACMP_T::CTL: ACMPIE Mask */ + +#define ACMP_CTL_HYSEN_Pos (2) /*!< ACMP_T::CTL: HYSEN Position */ +#define ACMP_CTL_HYSEN_Msk (0x1ul << ACMP_CTL_HYSEN_Pos) /*!< ACMP_T::CTL: HYSEN Mask */ + +#define ACMP_CTL_ACMPOINV_Pos (3) /*!< ACMP_T::CTL: ACMPOINV Position */ +#define ACMP_CTL_ACMPOINV_Msk (0x1ul << ACMP_CTL_ACMPOINV_Pos) /*!< ACMP_T::CTL: ACMPOINV Mask */ + +#define ACMP_CTL_NEGSEL_Pos (4) /*!< ACMP_T::CTL: NEGSEL Position */ +#define ACMP_CTL_NEGSEL_Msk (0x3ul << ACMP_CTL_NEGSEL_Pos) /*!< ACMP_T::CTL: NEGSEL Mask */ + +#define ACMP_CTL_POSSEL_Pos (6) /*!< ACMP_T::CTL: POSSEL Position */ +#define ACMP_CTL_POSSEL_Msk (0x3ul << ACMP_CTL_POSSEL_Pos) /*!< ACMP_T::CTL: POSSEL Mask */ + +#define ACMP_CTL_INTPOL_Pos (8) /*!< ACMP_T::CTL: INTPOL Position */ +#define ACMP_CTL_INTPOL_Msk (0x3ul << ACMP_CTL_INTPOL_Pos) /*!< ACMP_T::CTL: INTPOL Mask */ + +#define ACMP_CTL_OUTSEL_Pos (12) /*!< ACMP_T::CTL: OUTSEL Position */ +#define ACMP_CTL_OUTSEL_Msk (0x1ul << ACMP_CTL_OUTSEL_Pos) /*!< ACMP_T::CTL: OUTSEL Mask */ + +#define ACMP_CTL_FILTSEL_Pos (13) /*!< ACMP_T::CTL: FILTSEL Position */ +#define ACMP_CTL_FILTSEL_Msk (0x7ul << ACMP_CTL_FILTSEL_Pos) /*!< ACMP_T::CTL: FILTSEL Mask */ + +#define ACMP_CTL_WKEN_Pos (16) /*!< ACMP_T::CTL: WKEN Position */ +#define ACMP_CTL_WKEN_Msk (0x1ul << ACMP_CTL_WKEN_Pos) /*!< ACMP_T::CTL: WKEN Mask */ + +#define ACMP_STATUS_ACMPIF0_Pos (0) /*!< ACMP_T::STATUS: ACMPIF0 Position */ +#define ACMP_STATUS_ACMPIF0_Msk (0x1ul << ACMP_STATUS_ACMPIF0_Pos) /*!< ACMP_T::STATUS: ACMPIF0 Mask */ + +#define ACMP_STATUS_ACMPIF1_Pos (1) /*!< ACMP_T::STATUS: ACMPIF1 Position */ +#define ACMP_STATUS_ACMPIF1_Msk (0x1ul << ACMP_STATUS_ACMPIF1_Pos) /*!< ACMP_T::STATUS: ACMPIF1 Mask */ + +#define ACMP_STATUS_ACMPO0_Pos (4) /*!< ACMP_T::STATUS: ACMPO0 Position */ +#define ACMP_STATUS_ACMPO0_Msk (0x1ul << ACMP_STATUS_ACMPO0_Pos) /*!< ACMP_T::STATUS: ACMPO0 Mask */ + +#define ACMP_STATUS_ACMPO1_Pos (5) /*!< ACMP_T::STATUS: ACMPO1 Position */ +#define ACMP_STATUS_ACMPO1_Msk (0x1ul << ACMP_STATUS_ACMPO1_Pos) /*!< ACMP_T::STATUS: ACMPO1 Mask */ + +#define ACMP_STATUS_WKIF0_Pos (8) /*!< ACMP_T::STATUS: WKIF0 Position */ +#define ACMP_STATUS_WKIF0_Msk (0x1ul << ACMP_STATUS_WKIF0_Pos) /*!< ACMP_T::STATUS: WKIF0 Mask */ + +#define ACMP_STATUS_WKIF1_Pos (9) /*!< ACMP_T::STATUS: WKIF1 Position */ +#define ACMP_STATUS_WKIF1_Msk (0x1ul << ACMP_STATUS_WKIF1_Pos) /*!< ACMP_T::STATUS: WKIF1 Mask */ + +#define ACMP_VREF_CRVCTL_Pos (0) /*!< ACMP_T::VREF: CRVCTL Position */ +#define ACMP_VREF_CRVCTL_Msk (0xful << ACMP_VREF_CRVCTL_Pos) /*!< ACMP_T::VREF: CRVCTL Mask */ + +#define ACMP_VREF_CRVSSEL_Pos (6) /*!< ACMP_T::VREF: CRVSSEL Position */ +#define ACMP_VREF_CRVSSEL_Msk (0x1ul << ACMP_VREF_CRVSSEL_Pos) /*!< ACMP_T::VREF: CRVSSEL Mask */ + +/**@}*/ /* ACMP_CONST */ +/**@}*/ /* end of ACMP register group */ + + +/*---------------------- Enhanced Analog to Digital Converter -------------------------*/ +/** + @addtogroup Enhanced Analog to Digital Converter(EADC) + Memory Mapped Structure for EADC Controller +@{ */ + + +typedef struct +{ + + +/** + * @var EADC_T::DAT + * Offset: 0x00-0x48 A/D Data Register n for Sample Module n, n=0~18 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |RESULT |A/D Conversion Result + * | | |This field contains 12 bits conversion result. + * | | |When DMOF (EADC_CTL[9]) is set to 0, 12-bit ADC conversion result with unsigned format will be filled in RESULT[11:0] and zero will be filled in RESULT[15:12]. + * | | |When DMOF (EADC_CTL[9]) set to 1, 12-bit ADC conversion result with 2'complement format will be filled in RESULT[11:0] and signed bits to will be filled in RESULT[15:12]. + * |[16] |OV |Overrun Flag + * | | |If converted data in RESULT[11:0] has not been read before new conversion result is loaded to this register, OV is set to 1. + * | | |0 = Data in RESULT[11:0] is recent conversion result. + * | | |1 = Data in RESULT[11:0] is overwrite. + * | | |Note: It is cleared by hardware after EADC_DAT register is read. + * |[17] |VALID |Valid Flag + * | | |This bit is set to 1 when corresponding sample module channel analog input conversion is completed and cleared by hardware after EADC_DAT register is read. + * | | |0 = Data in RESULT[11:0] bits is not valid. + * | | |1 = Data in RESULT[11:0] bits is valid. + * @var EADC_T::CURDAT + * Offset: 0x4C EADC PDMA Current Transfer Data Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[17:0] |CURDAT |ADC PDMA Current Transfer Data Register + * | | |This register is a shadow register of EADC_DATn (n=0~18) for PDMA support. + * | | |This is a read only register. + * @var EADC_T::CTL + * Offset: 0x50 A/D Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |ADCEN |A/D Converter Enable Bit + * | | |0 = Disabled. + * | | |1 = Enabled. + * | | |Note: Before starting A/D conversion function, this bit should be set to 1. + * | | |Clear it to 0 to disable A/D converter analog circuit power consumption. + * |[1] |ADCRST |ADC A/D Converter Control Circuits Reset + * | | |0 = No effect. + * | | |1 = Cause ADC control circuits reset to initial state, but not change the ADC registers value. + * | | |Note: ADCRST bit remains 1 during ADC reset, when ADC reset end, the ADCRST bit is automatically cleared to 0. + * |[2] |ADCIEN0 |Specific Sample Module A/D ADINT0 Interrupt Enable Bit + * | | |The A/D converter generates a conversion end ADIF0 (EADC_STATUS2[0]) upon the end of specific sample module A/D conversion. + * | | |If ADCIEN0 bit is set then conversion end interrupt request ADINT0 is generated. + * | | |0 = Specific sample module A/D ADINT0 interrupt function Disabled. + * | | |1 = Specific sample module A/D ADINT0 interrupt function Enabled. + * |[3] |ADCIEN1 |Specific Sample Module A/D ADINT1 Interrupt Enable Bit + * | | |The A/D converter generates a conversion end ADIF1 (EADC_STATUS2[1]) upon the end of specific sample module A/D conversion. + * | | |If ADCIEN1 bit is set then conversion end interrupt request ADINT1 is generated. + * | | |0 = Specific sample module A/D ADINT1 interrupt function Disabled. + * | | |1 = Specific sample module A/D ADINT1 interrupt function Enabled. + * |[4] |ADCIEN2 |Specific Sample Module A/D ADINT2 Interrupt Enable Bit + * | | |The A/D converter generates a conversion end ADIF2 (EADC_STATUS2[2]) upon the end of specific sample module A/D conversion. + * | | |If ADCIEN2 bit is set then conversion end interrupt request ADINT2 is generated. + * | | |0 = Specific sample module A/D ADINT2 interrupt function Disabled. + * | | |1 = Specific sample module A/D ADINT2 interrupt function Enabled. + * |[5] |ADCIEN3 |Specific Sample Module A/D ADINT3 Interrupt Enable Bit + * | | |The A/D converter generates a conversion end ADIF3 (EADC_STATUS2[3]) upon the end of specific sample module A/D conversion. + * | | |If ADCIEN3 bit is set then conversion end interrupt request ADINT3 is generated. + * | | |0 = Specific sample module A/D ADINT3 interrupt function Disabled. + * | | |1 = Specific sample module A/D ADINT3 interrupt function Enabled. + * |[8] |DIFFEN |Differential Analog Input Mode Enable Bit + * | | |0 = Single-end analog input mode. + * | | |1 = Differential analog input mode. + * |[9] |DMOF |ADC Differential Input Mode Output Format + * | | |0 = A/D conversion result will be filled in RESULT (EADC_DATn[15:0] , n= 0 ~18) with unsigned format. + * | | |1 = A/D conversion result will be filled in RESULT (EADC_DATn[15:0] , n= 0 ~18) with 2'complement format. + * |[11] |PDMAEN |PDMA Transfer Enable Bit + * | | |When A/D conversion is completed, the converted data is loaded into EADC_DATn (n: 0 ~ 18) register, user can enable this bit to generate a PDMA data transfer request. + * | | |0 = PDMA data transfer Disabled. + * | | |1 = PDMA data transfer Enabled. + * | | |Note: When set this bit field to 1, user must set ADCIENn (EADC_CTL[5:2], n=0~3) = 0 to disable interrupt. + * |[18:16] |SMPTSEL |ADC Internal Sampling Time Selection + * | | |ADC internal sampling cycle = SMPTSEL + 1. + * | | |000 = 1 ADC clock sampling time. + * | | |001 = 2 ADC clock sampling time. + * | | |010 = 3 ADC clock sampling time. + * | | |011 = 4 ADC clock sampling time. + * | | |100 = 5 ADC clock sampling time. + * | | |101 = 6 ADC clock sampling time. + * | | |110 = 7 ADC clock sampling time. + * | | |111 = 8 ADC clock sampling time. + * @var EADC_T::SWTRG + * Offset: 0x54 A/D Sample Module Software Start Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[18:0] |SWTRG |A/D Sample Module + * | | |0~18 Software Force To Start ADC Conversion + * | | |0 = No effect. + * | | |1 = Cause an ADC conversion when the priority is given to sample module. + * | | |Note: After write this register to start ADC conversion, the EADC_PENDSTS register will show which sample module will conversion. + * | | |If user want to disable the conversion of the sample module, user can write EADC_PENDSTS register to clear it. + * @var EADC_T::PENDSTS + * Offset: 0x58 A/D Start of Conversion Pending Flag Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[18:0] |STPF |A/D Sample Module 0~18 Start Of Conversion Pending Flag + * | | |Read: + * | | |0 = There is no pending conversion for sample module. + * | | |1 = Sample module ADC start of conversion is pending. + * | | |Write: + * | | |1 = clear pending flag and cancel the conversion for sample module. + * | | |Note: This bit remains 1 during pending state, when the respective ADC conversion is end, the STPFn (n=0~18) bit is automatically cleared to 0 + * @var EADC_T::OVSTS + * Offset: 0x5C A/D Sample Module Start of Conversion Overrun Flag Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[18:0] |SPOVF |A/D SAMPLE0~18 Overrun Flag + * | | |0 = No sample module event overrun. + * | | |1 = Indicates a new sample module event is generated while an old one event is pending. + * | | |Note: This bit is cleared by writing 1 to it. + * @var EADC_T::SCTL + * Offset: 0x80-0x8C A/D Sample Module n Control Register, n=0~3 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[3:0] |CHSEL |A/D Sample Module Channel Selection + * | | |00H = EADC_CH0. + * | | |01H = EADC_CH1. + * | | |02H = EADC_CH2. + * | | |03H = EADC_CH3. + * | | |04H = EADC_CH4. + * | | |05H = EADC_CH5. + * | | |06H = EADC_CH6. + * | | |07H = EADC_CH7. + * | | |08H = EADC_CH8. + * | | |09H = EADC_CH9. + * | | |0AH = EADC_CH10. + * | | |0BH = EADC_CH11. + * | | |0CH = EADC_CH12. + * | | |0DH = EADC_CH13. + * | | |0EH = EADC_CH14. + * | | |0FH = EADC_CH15. + * |[4] |EXTREN |A/D External Trigger Rising Edge Enable Bit + * | | |0 = Rising edge Disabled when A/D selects STADC as trigger source. + * | | |1 = Rising edge Enabled when A/D selects STADC as trigger source. + * |[5] |EXTFEN |A/D External Trigger Falling Edge Enable Bit + * | | |0 = Falling edge Disabled when A/D selects STADC as trigger source. + * | | |1 = Falling edge Enabled when A/D selects STADC as trigger source. + * |[7:6] |TRGDLYDIV |A/D Sample Module Start Of Conversion Trigger Delay Clock Divider Selection + * | | |Trigger delay clock frequency: + * | | |00 = ADC_CLK/1. + * | | |01 = ADC_CLK/2. + * | | |10 = ADC_CLK/4. + * | | |11 = ADC_CLK/16. + * |[15:8] |TRGDLYCNT |A/D Sample Module Start Of Conversion Trigger Delay Time + * | | |Trigger delay time = TRGDLYCNT x ADC_CLK x n (n=1,2,4,16 from TRGDLYDIV setting). + * |[20:16] |TRGSEL |A/D Sample Module Start Of Conversion Trigger Source Selection + * | | |0H = Disable trigger. + * | | |1H = External trigger from STADC pin input. + * | | |2H = ADC ADINT0 interrupt EOC (End of conversion) pulse trigger. + * | | |3H = ADC ADINT1 interrupt EOC (End of conversion) pulse trigger. + * | | |4H = Timer0 overflow pulse trigger. + * | | |5H = Timer1 overflow pulse trigger. + * | | |6H = Timer2 overflow pulse trigger. + * | | |7H = Timer3 overflow pulse trigger. + * | | |8H = PWM0TG0. + * | | |9H = PWM0TG1. + * | | |AH = PWM0TG2. + * | | |BH = PWM0TG3. + * | | |CH = PWM0TG4. + * | | |DH = PWM0TG5. + * | | |EH = PWM1TG0. + * | | |FH = PWM1TG1. + * | | |10H = PWM1TG2. + * | | |11H = PWM1TG3. + * | | |12H = PWM1TG4. + * | | |13H = PWM1TG5. + * | | |other = Reserved. + * |[22] |INTPOS |Interrupt Flag Position Select + * | | |0 = Set ADIFn (EADC_STATUS2[n], n=0~3) at A/D end of conversion. + * | | |1 = Set ADIFn (EADC_STATUS2[n], n=0~3) at A/D start of conversion. + * |[23] |DBMEN |Double Buffer Mode Enable Bit + * | | |0 = Sample has one sample result register. (default). + * | | |1 = Sample has two sample result registers. + * |[31:24] |EXTSMPT |ADC Sampling Time Extend + * | | |When A/D converting at high conversion rate, the sampling time of analog input voltage may not enough if input channel loading is heavy, user can extend A/D sampling time after trigger source is coming to get enough sampling time. + * | | |The range of start delay time is from 0~255 ADC clock. + * @var EADC_T::SCTL + * Offset: 0x90-0xBC A/D Sample Module n Control Register, n=4~15 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[3:0] |CHSEL |A/D Sample Module Channel Selection + * | | |00H = EADC_CH0. + * | | |01H = EADC_CH1. + * | | |02H = EADC_CH2. + * | | |03H = EADC_CH3. + * | | |04H = EADC_CH4. + * | | |05H = EADC_CH5. + * | | |06H = EADC_CH6. + * | | |07H = EADC_CH7. + * | | |08H = EADC_CH8. + * | | |09H = EADC_CH9. + * | | |0AH = EADC_CH10. + * | | |0BH = EADC_CH11. + * | | |0CH = EADC_CH12. + * | | |0DH = EADC_CH13. + * | | |0EH = EADC_CH14. + * | | |0FH = EADC_CH15. + * |[4] |EXTREN |A/D External Trigger Rising Edge Enable Bit + * | | |0 = Rising edge Disabled when A/D selects STADC as trigger source. + * | | |1 = Rising edge Enabled when A/D selects STADC as trigger source. + * |[5] |EXTFEN |A/D External Trigger Falling Edge Enable Bit + * | | |0 = Falling edge Disabled when A/D selects STADC as trigger source. + * | | |1 = Falling edge Enabled when A/D selects STADC as trigger source. + * |[7:6] |TRGDLYDIV[1:0]|A/D Sample Module Start Of Conversion Trigger Delay Clock Divider Selection + * | | |Trigger delay clock frequency: + * | | |00 = ADC_CLK/1. + * | | |01 = ADC_CLK/2. + * | | |10 = ADC_CLK/4. + * | | |11 = ADC_CLK/16. + * |[15:8] |TRGDLYCNT[7:0]|A/D Sample Module Start Of Conversion Trigger Delay Time + * | | |Trigger delay time = TRGDLYCNT x ADC_CLK x n (n=1,2,4,16 from TRGDLYDIV setting). + * |[20:16] |TRGSEL |A/D Sample Module Start Of Conversion Trigger Source Selection + * | | |0H = Disable trigger. + * | | |1H = External trigger from STADC pin input. + * | | |2H = ADC ADINT0 interrupt EOC pulse trigger. + * | | |3H = ADC ADINT1 interrupt EOC pulse trigger. + * | | |4H = Timer0 overflow pulse trigger. + * | | |5H = Timer1 overflow pulse trigger. + * | | |6H = Timer2 overflow pulse trigger. + * | | |7H = Timer3 overflow pulse trigger. + * | | |8H = PWM0TG0. + * | | |9H = PWM0TG1. + * | | |AH = PWM0TG2. + * | | |BH = PWM0TG3. + * | | |CH = PWM0TG4. + * | | |DH = PWM0TG5. + * | | |EH = PWM1TG0. + * | | |FH = PWM1TG1. + * | | |10H = PWM1TG2. + * | | |11H = PWM1TG3. + * | | |12H = PWM1TG4. + * | | |13H = PWM1TG5. + * | | |other = Reserved. + * |[22] |INTPOS |Interrupt Flag Position Select + * | | |0 = Set ADIFn (EADC_STATUS2[n], n=0~3) at A/D end of conversion. + * | | |1 = Set ADIFn (EADC_STATUS2[n], n=0~3) at A/D start of conversion. + * |[31:24] |EXTSMPT |ADC Sampling Time Extend + * | | |When A/D converting at high conversion rate, the sampling time of analog input voltage may not enough if input channel loading is heavy, SW can extend A/D sampling time after trigger source is coming to get enough sampling time. + * | | |The range of start delay time is from 0~255 ADC clock. + * @var EADC_T::SCTL + * Offset: 0xC0~0xC8 A/D Sample Module n Control Register, n=16~18 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:24] |EXTSMPT |ADC Sampling Time Extend + * | | |When A/D converting at high conversion rate, the sampling time of analog input voltage may not enough if input channel loading is heavy, SW can extend A/D sampling time after trigger source is coming to get enough sampling time. + * | | |The range of start delay time is from 0~255 ADC clock. + * @var EADC_T::INTSRC + * Offset: 0xDC ADC interrupt n Source Enable Control Register, n=0~3 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |SPLIE0 |Sample Module 0 Interrupt Enable Bit + * | | |0 = Sample Module 0 interrupt Disabled. + * | | |1 = Sample Module 0 interrupt Enabled. + * |[1] |SPLIE1 |Sample Module 1 Interrupt Enable Bit + * | | |0 = Sample Module 1 interrupt Disabled. + * | | |1 = Sample Module 1 interrupt Enabled. + * |[2] |SPLIE2 |Sample Module 2 Interrupt Enable Bit + * | | |0 = Sample Module 2 interrupt Disabled. + * | | |1 = Sample Module 2 interrupt Enabled. + * |[3] |SPLIE3 |Sample Module 3 Interrupt Enable Bit + * | | |0 = Sample Module 3 interrupt Disabled. + * | | |1 = Sample Module 3 interrupt Enabled. + * |[4] |SPLIE4 |Sample Module 4 Interrupt Enable Bit + * | | |0 = Sample Module 4 interrupt Disabled. + * | | |1 = Sample Module 4 interrupt Enabled. + * |[5] |SPLIE5 |Sample Module 5 Interrupt Enable Bit + * | | |0 = Sample Module 5 interrupt Disabled. + * | | |1 = Sample Module 5 interrupt Enabled. + * |[6] |SPLIE6 |Sample Module 6 Interrupt Enable Bit + * | | |0 = Sample Module 6 interrupt Disabled. + * | | |1 = Sample Module 6 interrupt Enabled. + * |[7] |SPLIE7 |Sample Module 7 Interrupt Enable Bit + * | | |0 = Sample Module 7 interrupt Disabled. + * | | |1 = Sample Module 7 interrupt Enabled. + * |[8] |SPLIE8 |Sample Module 8 Interrupt Enable Bit + * | | |0 = Sample Module 8 interrupt Disabled. + * | | |1 = Sample Module 8 interrupt Enabled. + * |[9] |SPLIE9 |Sample Module 9 Interrupt Enable Bit + * | | |0 = Sample Module 9 interrupt Disabled. + * | | |1 = Sample Module 9 interrupt Enabled. + * |[10] |SPLIE10 |Sample Module 10 Interrupt Enable Bit + * | | |0 = Sample Module 10 interrupt Disabled. + * | | |1 = Sample Module 10 interrupt Enabled. + * |[11] |SPLIE11 |Sample Module 11 Interrupt Enable Bit + * | | |0 = Sample Module 11 interrupt Disabled. + * | | |1 = Sample Module 11 interrupt Enabled. + * |[12] |SPLIE12 |Sample Module 12 Interrupt Enable Bit + * | | |0 = Sample Module 12 interrupt Disabled. + * | | |1 = Sample Module 12 interrupt Enabled. + * |[13] |SPLIE13 |Sample Module 13 Interrupt Enable Bit + * | | |0 = Sample Module 13 interrupt Disabled. + * | | |1 = Sample Module 13 interrupt Enabled. + * |[14] |SPLIE14 |Sample Module 14 Interrupt Enable Bit + * | | |0 = Sample Module 14 interrupt Disabled. + * | | |1 = Sample Module 14 interrupt Enabled. + * |[15] |SPLIE15 |Sample Module 15 Interrupt Enable Bit + * | | |0 = Sample Module 15 interrupt Disabled. + * | | |1 = Sample Module 15 interrupt Enabled. + * |[16] |SPLIE16 |Sample Module 16 Interrupt Enable Bit + * | | |0 = Sample Module 16 interrupt Disabled. + * | | |1 = Sample Module 16 interrupt Enabled. + * |[17] |SPLIE17 |Sample Module 17 Interrupt Enable Bit + * | | |0 = Sample Module 17 interrupt Disabled. + * | | |1 = Sample Module 17 interrupt Enabled. + * |[18] |SPLIE18 |Sample Module 18 Interrupt Enable Bit + * | | |0 = Sample Module 18 interrupt Disabled. + * | | |1 = Sample Module 18 interrupt Enabled. + * @var EADC_T::CMP + * Offset: 0xEC A/D Result Compare Register n, n=0~3 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |ADCMPEN |A/D Result Compare Enable Bit + * | | |0 = Compare Disabled. + * | | |1 = Compare Enabled. + * | | |Set this bit to 1 to enable compare CMPDAT (EADC_CMPn[27:16], n=0~3) with specified sample module conversion result when converted data is loaded into EADC_DAT register. + * |[1] |ADCMPIE |A/D Result Compare Interrupt Enable Bit + * | | |0 = Compare function interrupt Disabled. + * | | |1 = Compare function interrupt Enabled. + * | | |If the compare function is enabled and the compare condition matches the setting of CMPCOND (EADC_CMPn[2], n=0~3) and CMPMCNT (EADC_CMPn[11:8], n=0~3), ADCMPFn (EADC_STATUS2[7:4], n=0~3) will be asserted, in the meanwhile, if ADCMPIE is set to 1, a compare interrupt request is generated. + * |[2] |CMPCOND |Compare Condition + * | | |0= Set the compare condition as that when a 12-bit A/D conversion result is less than the 12-bit CMPDAT (EADC_CMPn + * | | |[27:16]), the internal match counter will increase one. + * | | |1= Set the compare condition as that when a 12-bit A/D conversion result is greater or equal to the 12-bit CMPDAT (EADC_CMPn [27:16]), the internal match counter will increase one. + * | | |Note: When the internal counter reaches the value to (CMPMCNT (EADC_CMPn[11:8], n=0~3) +1), the CMPF bit will be set. + * |[7:3] |CMPSPL |Compare Sample Module Selection + * | | |00000 = Sample Module 0 conversion result EADC_DAT0 is selected to be compared. + * | | |00001 = Sample Module 1 conversion result EADC_DAT1 is selected to be compared. + * | | |00010 = Sample Module 2 conversion result EADC_DAT2 is selected to be compared. + * | | |00011 = Sample Module 3 conversion result EADC_DAT3 is selected to be compared. + * | | |00100 = Sample Module 4 conversion result EADC_DAT4 is selected to be compared. + * | | |00101 = Sample Module 5 conversion result EADC_DAT5 is selected to be compared. + * | | |00110 = Sample Module 6 conversion result EADC_DAT6 is selected to be compared. + * | | |00111 = Sample Module 7 conversion result EADC_DAT7 is selected to be compared. + * | | |01000 = Sample Module 8 conversion result EADC_DAT8 is selected to be compared. + * | | |01001 = Sample Module 9 conversion result EADC_DAT9 is selected to be compared. + * | | |01010 = Sample Module 10 conversion result EADC_DAT10 is selected to be compared. + * | | |01011 = Sample Module 11 conversion result EADC_DAT11 is selected to be compared. + * | | |01100 = Sample Module 12 conversion result EADC_DAT12 is selected to be compared. + * | | |01101 = Sample Module 13 conversion result EADC_DAT13 is selected to be compared. + * | | |01110 = Sample Module 14 conversion result EADC_DAT14 is selected to be compared. + * | | |01111 = Sample Module 15 conversion result EADC_DAT15 is selected to be compared. + * | | |10000 = Sample Module 16 conversion result EADC_DAT16 is selected to be compared. + * | | |10001 = Sample Module 17 conversion result EADC_DAT17 is selected to be compared. + * | | |10010 = Sample Module 18 conversion result EADC_DAT18 is selected to be compared. + * |[11:8] |CMPMCNT |Compare Match Count + * | | |When the specified A/D sample module analog conversion result matches the compare condition defined by CMPCOND (EADC_CMPn[2], n=0~3), the internal match counter will increase 1. + * | | |If the compare result does not meet the compare condition, the internal compare match counter will reset to 0. + * | | |When the internal counter reaches the value to (CMPMCNT +1), the ADCMPFn (EADC_STATUS2[7:4], n=0~3) will be set. + * |[15] |CMPWEN |Compare Window Mode Enable Bit + * | | |0 = ADCMPF0 (EADC_STATUS2[4]) will be set when EADC_CMP0 compared condition matched. + * | | |ADCMPF2 (EADC_STATUS2[6]) will be set when EADC_CMP2 compared condition matched. + * | | |1 = ADCMPF0 (EADC_STATUS2[4]) will be set when both EADC_CMP0 and EADC_CMP1 compared condition matched. + * | | |ADCMPF2 (EADC_STATUS2[6]) will be set when both EADC_CMP2 and EADC_CMP3 compared condition matched. + * | | |Note: This bit is only present in EADC_CMP0 and EADC_CMP2 register. + * |[27:16] |CMPDAT |Comparison Data + * | | |The 12 bits data is used to compare with conversion result of specified sample module. + * | | |User can use it to monitor the external analog input pin voltage transition without imposing a load on software. + * @var EADC_T::STATUS0 + * Offset: 0xF0 A/D Status Register 0 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |VALID |EADC_DAT0~15 Data Valid Flag + * | | |It is a mirror of VALID bit in sample module A/D result data register EADC_DATn. (n=0~18). + * |[31:16] |OV |EADC_DAT0~15 Overrun Flag + * | | |It is a mirror to OV bit in sample module A/D result data register EADC_DATn. (n=0~18). + * @var EADC_T::STATUS1 + * Offset: 0xF4 A/D Status Register 1 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[2:0] |VALID |EADC_DAT16~18 Data Valid Flag + * | | |It is a mirror of VALID bit in sample module A/D result data register EADC_DATn. (n=0~18). + * |[18:16] |OV |EADC_DAT16~18 Overrun Flag + * | | |It is a mirror to OV bit in sample module A/D result data register EADC_DATn. (n=0~18). + * @var EADC_T::STATUS2 + * Offset: 0xF8 A/D Status Register 2 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |ADIF0 |A/D ADINT0 Interrupt Flag + * | | |0 = No ADINT0 interrupt pulse received. + * | | |1 = ADINT0 interrupt pulse has been received. + * | | |Note1: This bit is cleared by writing 1 to it. + * | | |Note2:This bit indicates whether an A/D conversion of specific sample module has been completed + * |[1] |ADIF1 |A/D ADINT1 Interrupt Flag + * | | |0 = No ADINT1 interrupt pulse received. + * | | |1 = ADINT1 interrupt pulse has been received. + * | | |Note1: This bit is cleared by writing 1 to it. + * | | |Note2:This bit indicates whether an A/D conversion of specific sample module has been completed + * |[2] |ADIF2 |A/D ADINT2 Interrupt Flag + * | | |0 = No ADINT2 interrupt pulse received. + * | | |1 = ADINT2 interrupt pulse has been received. + * | | |Note1: This bit is cleared by writing 1 to it. + * | | |Note2:This bit indicates whether an A/D conversion of specific sample module has been completed + * |[3] |ADIF3 |A/D ADINT3 Interrupt Flag + * | | |0 = No ADINT3 interrupt pulse received. + * | | |1 = ADINT3 interrupt pulse has been received. + * | | |Note1: This bit is cleared by writing 1 to it. + * | | |Note2:This bit indicates whether an A/D conversion of specific sample module has been completed + * |[4] |ADCMPF0 |ADC Compare 0 Flag + * | | |When the specific sample module A/D conversion result meets setting condition in EADC_CMP0 then this bit is set to 1. + * | | |0 = Conversion result in EADC_DAT does not meet EADC_CMP0 register setting. + * | | |1 = Conversion result in EADC_DAT meets EADC_CMP0 register setting. + * | | |Note: This bit is cleared by writing 1 to it. + * |[5] |ADCMPF1 |ADC Compare 1 Flag + * | | |When the specific sample module A/D conversion result meets setting condition in EADC_CMP1 then this bit is set to 1. + * | | |0 = Conversion result in EADC_DAT does not meet EADC_CMP1 register setting. + * | | |1 = Conversion result in EADC_DAT meets EADC_CMP1 register setting. + * | | |Note: This bit is cleared by writing 1 to it. + * |[6] |ADCMPF2 |ADC Compare 2 Flag + * | | |When the specific sample module A/D conversion result meets setting condition in EADC_CMP2 then this bit is set to 1. + * | | |0 = Conversion result in EADC_DAT does not meet EADC_CMP2 register setting. + * | | |1 = Conversion result in EADC_DAT meets EADC_CMP2 register setting. + * | | |Note: This bit is cleared by writing 1 to it. + * |[7] |ADCMPF3 |ADC Compare 3 Flag + * | | |When the specific sample module A/D conversion result meets setting condition in EADC_CMP3 then this bit is set to 1. + * | | |0 = Conversion result in EADC_DAT does not meet EADC_CMP3 register setting. + * | | |1 = Conversion result in EADC_DAT meets EADC_CMP3 register setting. + * | | |Note: This bit is cleared by writing 1 to it. + * |[8] |ADOVIF0 |A/D ADINT0 Interrupt Flag Overrun + * | | |0 = ADINT0 interrupt flag is not overwritten to 1. + * | | |1 = ADINT0 interrupt flag is overwritten to 1. + * | | |Note: This bit is cleared by writing 1 to it. + * |[9] |ADOVIF1 |A/D ADINT1 Interrupt Flag Overrun + * | | |0 = ADINT1 interrupt flag is not overwritten to 1. + * | | |1 = ADINT1 interrupt flag is overwritten to 1. + * | | |Note: This bit is cleared by writing 1 to it. + * |[10] |ADOVIF2 |A/D ADINT2 Interrupt Flag Overrun + * | | |0 = ADINT2 interrupt flag is not overwritten to 1. + * | | |1 = ADINT2 interrupt flag is s overwritten to 1. + * | | |Note: This bit is cleared by writing 1 to it. + * |[11] |ADOVIF3 |A/D ADINT3 Interrupt Flag Overrun + * | | |0 = ADINT3 interrupt flag is not overwritten to 1. + * | | |1 = ADINT3 interrupt flag is overwritten to 1. + * | | |Note: This bit is cleared by writing 1 to it. + * |[12] |ADCMPO0 |ADC Compare 0 Output Status + * | | |The 12 bits compare0 data CMPDAT0 (EADC_CMP0[27:16]) is used to compare with conversion result of specified sample module. + * | | |User can use it to monitor the external analog input pin voltage status. + * | | |0 = Conversion result in EADC_DAT less than CMPDAT0 setting. + * | | |1 = Conversion result in EADC_DAT great than or equal CMPDAT0 + * | | |setting. + * |[13] |ADCMPO1 |ADC Compare 1 Output Status + * | | |The 12 bits compare1 data CMPDAT1 (EADC_CMP1[27:16]) is used to compare with conversion result of specified sample module. + * | | |User can use it to monitor the external analog input pin voltage status. + * | | |0 = Conversion result in EADC_DAT less than CMPDAT1 setting. + * | | |1 = Conversion result in EADC_DAT great than or equal CMPDAT1 + * | | |setting. + * |[14] |ADCMPO2 |ADC Compare 2 Output Status + * | | |The 12 bits compare2 data CMPDAT2 (EADC_CMP2[27:16]) is used to compare with conversion result of specified sample module. + * | | |User can use it to monitor the external analog input pin voltage status. + * | | |0 = Conversion result in EADC_DAT less than CMPDAT2 setting. + * | | |1 = Conversion result in EADC_DAT great than or equal CMPDAT2 + * | | |setting. + * |[15] |ADCMPO3 |ADC Compare 3 Output Status + * | | |The 12 bits compare3 data CMPDAT3 (EADC_CMP3[27:16]) is used to compare with conversion result of specified sample module. + * | | |User can use it to monitor the external analog input pin voltage status. + * | | |0 = Conversion result in EADC_DAT less than CMPDAT3 setting. + * | | |1 = Conversion result in EADC_DAT great than or equal CMPDAT3 + * | | |setting. + * |[20:16] |CHANNEL |Current Conversion Channel + * | | |This filed reflects ADC current conversion channel when BUSY=1. + * | | |It is read only. + * | | |00H = EADC_CH0. + * | | |01H = EADC_CH1. + * | | |02H = EADC_CH2. + * | | |03H = EADC_CH3. + * | | |04H = EADC_CH4. + * | | |05H = EADC_CH5. + * | | |06H = EADC_CH6. + * | | |07H = EADC_CH7. + * | | |08H = EADC_CH8. + * | | |09H = EADC_CH9. + * | | |0AH = EADC_CH10. + * | | |0BH = EADC_CH11. + * | | |0CH = EADC_CH12. + * | | |0DH = EADC_CH13. + * | | |0EH = EADC_CH14. + * | | |0FH = EADC_CH15. + * | | |10H = VBG. + * | | |11H = VTEMP. + * | | |12H = VBAT. + * |[23] |BUSY |Busy/Idle + * | | |0 = EADC is in idle state. + * | | |1 = EADC is busy at conversion. + * | | |Note: This bit is read only. + * |[24] |ADOVIF |All A/D Interrupt Flag Overrun Bits Check + * | | |n=0~3. + * | | |0 = None of ADINT interrupt flag ADOVIFn (EADC_STATUS2[11:8]) is overwritten to 1. + * | | |1 = Any one of ADINT interrupt flag ADOVIFn (EADC_STATUS2[11:8]) is overwritten to 1. + * | | |Note: This bit will keep 1 when any ADOVIFn Flag is equal to 1. + * |[25] |STOVF |For All A/D Sample Module Start Of Conversion Overrun Flags Check + * | | |n=0~18. + * | | |0 = None of sample module event overrun flag SPOVFn (EADC_OVSTS[n]) is set to 1. + * | | |1 = Any one of sample module event overrun flag SPOVFn (EADC_OVSTS[n]) is set to 1. + * | | |Note: This bit will keep 1 when any SPOVFn Flag is equal to 1. + * |[26] |AVALID |For All Sample Module A/D Result Data Register EADC_DAT Data Valid Flag Check + * | | |n=0~18. + * | | |0 = None of sample module data register valid flag VALIDn (EADC_DATn[17]) is set to 1. + * | | |1 = Any one of sample module data register valid flag VALIDn (EADC_DATn[17]) is set to 1. + * | | |Note: This bit will keep 1 when any VALIDn Flag is equal to 1. + * |[27] |AOV |For All Sample Module A/D Result Data Register Overrun Flags Check + * | | |n=0~18. + * | | |0 = None of sample module data register overrun flag OVn (EADC_DATn[16]) is set to 1. + * | | |1 = Any one of sample module data register overrun flag OVn (EADC_DATn[16]) is set to 1. + * | | |Note: This bit will keep 1 when any OVn Flag is equal to 1. + * @var EADC_T::STATUS3 + * Offset: 0xFC A/D Status Register 3 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[4:0] |CURSPL |ADC Current Sample Module + * | | |This register show the current ADC is controlled by which sample module control logic modules. + * | | |If the ADC is Idle, this bit filed will set to 0x1F. + * | | |This is a read only register. + * @var EADC_T::DDAT + * Offset: 0x100-0x10C A/D Double Data Register n for Sample Module n, n=0~3 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |RESULT |A/D Conversion Results + * | | |This field contains 12 bits conversion results. + * | | |When the DMOF (EADC_CTL[9]) is set to 0, 12-bit ADC conversion result with unsigned format will be filled in RESULT [11:0] and zero will be filled in RESULT [15:12]. + * | | |When DMOF (EADC_CTL[9]) set to 1, 12-bit ADC conversion result with 2'complement format will be filled in RESULT [11:0] and signed bits to will be filled in RESULT [15:12]. + * |[16] |OV |Overrun Flag + * | | |0 = Data in RESULT (EADC_DATn[15:0], n=0~3) is recent conversion result. + * | | |1 = Data in RESULT (EADC_DATn[15:0], n=0~3) is overwrite. + * | | |If converted data in RESULT[15:0] has not been read before new conversion result is loaded to this register, OV is set to 1. + * | | |It is cleared by hardware after EADC_DDAT register is read. + * |[17] |VALID |Valid Flag + * | | |0 = Double data in RESULT (EADC_DDATn[15:0]) is not valid. + * | | |1 = Double data in RESULT (EADC_DDATn[15:0]) is valid. + * | | |This bit is set to 1 when corresponding sample module channel analog input conversion is completed and cleared by hardware after EADC_DDATn register is read. + * | | |(n=0~3). + */ + + __I uint32_t DAT[19]; /* Offset: 0x00-0x48 A/D Data Register n for Sample Module n, n=0~18 */ + __I uint32_t CURDAT; /* Offset: 0x4C EADC PDMA Current Transfer Data Register */ + __IO uint32_t CTL; /* Offset: 0x50 A/D Control Register */ + __O uint32_t SWTRG; /* Offset: 0x54 A/D Sample Module Software Start Register */ + __IO uint32_t PENDSTS; /* Offset: 0x58 A/D Start of Conversion Pending Flag Register */ + __IO uint32_t OVSTS; /* Offset: 0x5C A/D Sample Module Start of Conversion Overrun Flag Register */ + __I uint32_t RESERVE0[8]; + __IO uint32_t SCTL[19]; /* Offset: 0x80-0xC8 A/D Sample Module n Control Register, n=0~3 */ + __I uint32_t RESERVE1[1]; + __IO uint32_t INTSRC[4]; /* Offset: 0xDC ADC interrupt n Source Enable Control Register, n=0~3 */ + __IO uint32_t CMP[4]; /* Offset: 0xEC A/D Result Compare Register n, n=0~3 */ + __I uint32_t STATUS0; /* Offset: 0xF0 A/D Status Register 0 */ + __I uint32_t STATUS1; /* Offset: 0xF4 A/D Status Register 1 */ + __IO uint32_t STATUS2; /* Offset: 0xF8 A/D Status Register 2 */ + __I uint32_t STATUS3; /* Offset: 0xFC A/D Status Register 3 */ + __I uint32_t DDAT[4]; /* Offset: 0x100-0x10C A/D Double Data Register n for Sample Module n, n=0~3 */ + +} EADC_T; + + + +/** + @addtogroup EADC_CONST EADC Bit Field Definition + Constant Definitions for EADC Controller +@{ */ +#define EADC_DAT_RESULT_Pos (0) /*!< EADC_T::DAT: RESULT Position */ +#define EADC_DAT_RESULT_Msk (0xfffful << EADC_DAT_RESULT_Pos) /*!< EADC_T::DAT: RESULT Mask */ + +#define EADC_DAT_OV_Pos (16) /*!< EADC_T::DAT: OV Position */ +#define EADC_DAT_OV_Msk (0x1ul << EADC_DAT_OV_Pos) /*!< EADC_T::DAT: OV Mask */ + +#define EADC_DAT_VALID_Pos (17) /*!< EADC_T::DAT: VALID Position */ +#define EADC_DAT_VALID_Msk (0x1ul << EADC_DAT_VALID_Pos) /*!< EADC_T::DAT: VALID Mask */ + +#define EADC_CURDAT_CURDAT_Pos (0) /*!< EADC_T::CURDAT: CURDAT Position */ +#define EADC_CURDAT_CURDAT_Msk (0x3fffful << EADC_CURDAT_CURDAT_Pos) /*!< EADC_T::CURDAT: CURDAT Mask */ + +#define EADC_CTL_ADCEN_Pos (0) /*!< EADC_T::CTL: ADCEN Position */ +#define EADC_CTL_ADCEN_Msk (0x1ul << EADC_CTL_ADCEN_Pos) /*!< EADC_T::CTL: ADCEN Mask */ + +#define EADC_CTL_ADRST_Pos (1) /*!< EADC_T::CTL: ADRST Position */ +#define EADC_CTL_ADRST_Msk (0x1ul << EADC_CTL_ADRST_Pos) /*!< EADC_T::CTL: ADRST Mask */ + +#define EADC_CTL_ADCIEN0_Pos (2) /*!< EADC_T::CTL: ADCIEN0 Position */ +#define EADC_CTL_ADCIEN0_Msk (0x1ul << EADC_CTL_ADCIEN0_Pos) /*!< EADC_T::CTL: ADCIEN0 Mask */ + +#define EADC_CTL_ADCIEN1_Pos (3) /*!< EADC_T::CTL: ADCIEN1 Position */ +#define EADC_CTL_ADCIEN1_Msk (0x1ul << EADC_CTL_ADCIEN1_Pos) /*!< EADC_T::CTL: ADCIEN1 Mask */ + +#define EADC_CTL_ADCIEN2_Pos (4) /*!< EADC_T::CTL: ADCIEN2 Position */ +#define EADC_CTL_ADCIEN2_Msk (0x1ul << EADC_CTL_ADCIEN2_Pos) /*!< EADC_T::CTL: ADCIEN2 Mask */ + +#define EADC_CTL_ADCIEN3_Pos (5) /*!< EADC_T::CTL: ADCIEN3 Position */ +#define EADC_CTL_ADCIEN3_Msk (0x1ul << EADC_CTL_ADCIEN3_Pos) /*!< EADC_T::CTL: ADCIEN3 Mask */ + +#define EADC_CTL_DIFFEN_Pos (8) /*!< EADC_T::CTL: DIFFEN Position */ +#define EADC_CTL_DIFFEN_Msk (0x1ul << EADC_CTL_DIFFEN_Pos) /*!< EADC_T::CTL: DIFFEN Mask */ + +#define EADC_CTL_DMOF_Pos (9) /*!< EADC_T::CTL: DMOF Position */ +#define EADC_CTL_DMOF_Msk (0x1ul << EADC_CTL_DMOF_Pos) /*!< EADC_T::CTL: DMOF Mask */ + +#define EADC_CTL_PDMAEN_Pos (11) /*!< EADC_T::CTL: PDMAEN Position */ +#define EADC_CTL_PDMAEN_Msk (0x1ul << EADC_CTL_PDMAEN_Pos) /*!< EADC_T::CTL: PDMAEN Mask */ + +#define EADC_CTL_SMPTSEL_Pos (16) /*!< EADC_T::CTL: SMPTSEL Position */ +#define EADC_CTL_SMPTSEL_Msk (0x7ul << EADC_CTL_SMPTSEL_Pos) /*!< EADC_T::CTL: SMPTSEL Mask */ + +#define EADC_SWTRG_SWTRG_Pos (0) /*!< EADC_T::SWTRG: SWTRG Position */ +#define EADC_SWTRG_SWTRG_Msk (0x7fffful << EADC_SWTRG_SWTRG_Pos) /*!< EADC_T::SWTRG: SWTRG Mask */ + +#define EADC_PENDSTS_STPF_Pos (0) /*!< EADC_T::PENDSTS: STPF Position */ +#define EADC_PENDSTS_STPF_Msk (0x7fffful << EADC_PENDSTS_STPF_Pos) /*!< EADC_T::PENDSTS: STPF Mask */ + +#define EADC_OVSTS_SPOVF_Pos (0) /*!< EADC_T::OVSTS: SPOVF Position */ +#define EADC_OVSTS_SPOVF_Msk (0x7fffful << EADC_OVSTS_SPOVF_Pos) /*!< EADC_T::OVSTS: SPOVF Mask */ + +#define EADC_SCTL_CHSEL_Pos (0) /*!< EADC_T::SCTL: CHSEL Position */ +#define EADC_SCTL_CHSEL_Msk (0xful << EADC_SCTL_CHSEL_Pos) /*!< EADC_T::SCTL: CHSEL Mask */ + +#define EADC_SCTL_EXTREN_Pos (4) /*!< EADC_T::SCTL: EXTREN Position */ +#define EADC_SCTL_EXTREN_Msk (0x1ul << EADC_SCTL_EXTREN_Pos) /*!< EADC_T::SCTL: EXTREN Mask */ + +#define EADC_SCTL_EXTFEN_Pos (5) /*!< EADC_T::SCTL: EXTFEN Position */ +#define EADC_SCTL_EXTFEN_Msk (0x1ul << EADC_SCTL_EXTFEN_Pos) /*!< EADC_T::SCTL: EXTFEN Mask */ + +#define EADC_SCTL_TRGDLYDIV_Pos (6) /*!< EADC_T::SCTL: TRGDLYDIV Position */ +#define EADC_SCTL_TRGDLYDIV_Msk (0x3ul << EADC_SCTL_TRGDLYDIV_Pos) /*!< EADC_T::SCTL: TRGDLYDIV Mask */ + +#define EADC_SCTL_TRGDLYCNT_Pos (8) /*!< EADC_T::SCTL: TRGDLYCNT Position */ +#define EADC_SCTL_TRGDLYCNT_Msk (0xfful << EADC_SCTL_TRGDLYCNT_Pos) /*!< EADC_T::SCTL: TRGDLYCNT Mask */ + +#define EADC_SCTL_TRGSEL_Pos (16) /*!< EADC_T::SCTL: TRGSEL Position */ +#define EADC_SCTL_TRGSEL_Msk (0x1ful << EADC_SCTL_TRGSEL_Pos) /*!< EADC_T::SCTL: TRGSEL Mask */ + +#define EADC_SCTL_INTPOS_Pos (22) /*!< EADC_T::SCTL: INTPOS Position */ +#define EADC_SCTL_INTPOS_Msk (0x1ul << EADC_SCTL_INTPOS_Pos) /*!< EADC_T::SCTL: INTPOS Mask */ + +#define EADC_SCTL_DBMEN_Pos (23) /*!< EADC_T::SCTL: DBMEN Position */ +#define EADC_SCTL_DBMEN_Msk (0x1ul << EADC_SCTL_DBMEN_Pos) /*!< EADC_T::SCTL: DBMEN Mask */ + +#define EADC_SCTL_EXTSMPT_Pos (24) /*!< EADC_T::SCTL: EXTSMPT Position */ +#define EADC_SCTL_EXTSMPT_Msk (0xfful << EADC_SCTL_EXTSMPT_Pos) /*!< EADC_T::SCTL: EXTSMPT Mask */ + +#define EADC_INTSRC_SPLIE_Pos (0) /*!< EADC_T::INTSRC: SPLIE Position */ +#define EADC_INTSRC_SPLIE_Msk (0x7FFFFul << EADC_INTSRC_SPLIE_Pos) /*!< EADC_T::INTSRC: SPLIE Mask */ + +#define EADC_CMP_ADCMPEN_Pos (0) /*!< EADC_T::CMP: ADCMPEN Position */ +#define EADC_CMP_ADCMPEN_Msk (0x1ul << EADC_CMP_ADCMPEN_Pos) /*!< EADC_T::CMP: ADCMPEN Mask */ + +#define EADC_CMP_ADCMPIE_Pos (1) /*!< EADC_T::CMP: ADCMPIE Position */ +#define EADC_CMP_ADCMPIE_Msk (0x1ul << EADC_CMP_ADCMPIE_Pos) /*!< EADC_T::CMP: ADCMPIE Mask */ + +#define EADC_CMP_CMPCOND_Pos (2) /*!< EADC_T::CMP: CMPCOND Position */ +#define EADC_CMP_CMPCOND_Msk (0x1ul << EADC_CMP_CMPCOND_Pos) /*!< EADC_T::CMP: CMPCOND Mask */ + +#define EADC_CMP_CMPSPL_Pos (3) /*!< EADC_T::CMP: CMPSPL Position */ +#define EADC_CMP_CMPSPL_Msk (0x1ful << EADC_CMP_CMPSPL_Pos) /*!< EADC_T::CMP: CMPSPL Mask */ + +#define EADC_CMP_CMPMCNT_Pos (8) /*!< EADC_T::CMP: CMPMCNT Position */ +#define EADC_CMP_CMPMCNT_Msk (0xful << EADC_CMP_CMPMCNT_Pos) /*!< EADC_T::CMP: CMPMCNT Mask */ + +#define EADC_CMP_CMPWEN_Pos (15) /*!< EADC_T::CMP: CMPWEN Position */ +#define EADC_CMP_CMPWEN_Msk (0x1ul << EADC_CMP_CMPWEN_Pos) /*!< EADC_T::CMP: CMPWEN Mask */ + +#define EADC_CMP_CMPDAT_Pos (16) /*!< EADC_T::CMP: CMPDAT Position */ +#define EADC_CMP_CMPDAT_Msk (0xffful << EADC_CMP_CMPDAT_Pos) /*!< EADC_T::CMP: CMPDAT Mask */ + +#define EADC_STATUS0_VALID_Pos (0) /*!< EADC_T::STATUS0: VALID Position */ +#define EADC_STATUS0_VALID_Msk (0xfffful << EADC_STATUS0_VALID_Pos) /*!< EADC_T::STATUS0: VALID Mask */ + +#define EADC_STATUS0_OV_Pos (16) /*!< EADC_T::STATUS0: OV Position */ +#define EADC_STATUS0_OV_Msk (0xfffful << EADC_STATUS0_OV_Pos) /*!< EADC_T::STATUS0: OV Mask */ + +#define EADC_STATUS1_VALID_Pos (0) /*!< EADC_T::STATUS1: VALID Position */ +#define EADC_STATUS1_VALID_Msk (0x7ul << EADC_STATUS1_VALID_Pos) /*!< EADC_T::STATUS1: VALID Mask */ + +#define EADC_STATUS1_OV_Pos (16) /*!< EADC_T::STATUS1: OV Position */ +#define EADC_STATUS1_OV_Msk (0x7ul << EADC_STATUS1_OV_Pos) /*!< EADC_T::STATUS1: OV Mask */ + +#define EADC_STATUS2_ADIF0_Pos (0) /*!< EADC_T::STATUS2: ADIF0 Position */ +#define EADC_STATUS2_ADIF0_Msk (0x1ul << EADC_STATUS2_ADIF0_Pos) /*!< EADC_T::STATUS2: ADIF0 Mask */ + +#define EADC_STATUS2_ADIF1_Pos (1) /*!< EADC_T::STATUS2: ADIF1 Position */ +#define EADC_STATUS2_ADIF1_Msk (0x1ul << EADC_STATUS2_ADIF1_Pos) /*!< EADC_T::STATUS2: ADIF1 Mask */ + +#define EADC_STATUS2_ADIF2_Pos (2) /*!< EADC_T::STATUS2: ADIF2 Position */ +#define EADC_STATUS2_ADIF2_Msk (0x1ul << EADC_STATUS2_ADIF2_Pos) /*!< EADC_T::STATUS2: ADIF2 Mask */ + +#define EADC_STATUS2_ADIF3_Pos (3) /*!< EADC_T::STATUS2: ADIF3 Position */ +#define EADC_STATUS2_ADIF3_Msk (0x1ul << EADC_STATUS2_ADIF3_Pos) /*!< EADC_T::STATUS2: ADIF3 Mask */ + +#define EADC_STATUS2_ADCMPF0_Pos (4) /*!< EADC_T::STATUS2: ADCMPF0 Position */ +#define EADC_STATUS2_ADCMPF0_Msk (0x1ul << EADC_STATUS2_ADCMPF0_Pos) /*!< EADC_T::STATUS2: ADCMPF0 Mask */ + +#define EADC_STATUS2_ADCMPF1_Pos (5) /*!< EADC_T::STATUS2: ADCMPF1 Position */ +#define EADC_STATUS2_ADCMPF1_Msk (0x1ul << EADC_STATUS2_ADCMPF1_Pos) /*!< EADC_T::STATUS2: ADCMPF1 Mask */ + +#define EADC_STATUS2_ADCMPF2_Pos (6) /*!< EADC_T::STATUS2: ADCMPF2 Position */ +#define EADC_STATUS2_ADCMPF2_Msk (0x1ul << EADC_STATUS2_ADCMPF2_Pos) /*!< EADC_T::STATUS2: ADCMPF2 Mask */ + +#define EADC_STATUS2_ADCMPF3_Pos (7) /*!< EADC_T::STATUS2: ADCMPF3 Position */ +#define EADC_STATUS2_ADCMPF3_Msk (0x1ul << EADC_STATUS2_ADCMPF3_Pos) /*!< EADC_T::STATUS2: ADCMPF3 Mask */ + +#define EADC_STATUS2_ADOVIF0_Pos (8) /*!< EADC_T::STATUS2: ADOVIF0 Position */ +#define EADC_STATUS2_ADOVIF0_Msk (0x1ul << EADC_STATUS2_ADOVIF0_Pos) /*!< EADC_T::STATUS2: ADOVIF0 Mask */ + +#define EADC_STATUS2_ADOVIF1_Pos (9) /*!< EADC_T::STATUS2: ADOVIF1 Position */ +#define EADC_STATUS2_ADOVIF1_Msk (0x1ul << EADC_STATUS2_ADOVIF1_Pos) /*!< EADC_T::STATUS2: ADOVIF1 Mask */ + +#define EADC_STATUS2_ADOVIF2_Pos (10) /*!< EADC_T::STATUS2: ADOVIF2 Position */ +#define EADC_STATUS2_ADOVIF2_Msk (0x1ul << EADC_STATUS2_ADOVIF2_Pos) /*!< EADC_T::STATUS2: ADOVIF2 Mask */ + +#define EADC_STATUS2_ADOVIF3_Pos (11) /*!< EADC_T::STATUS2: ADOVIF3 Position */ +#define EADC_STATUS2_ADOVIF3_Msk (0x1ul << EADC_STATUS2_ADOVIF3_Pos) /*!< EADC_T::STATUS2: ADOVIF3 Mask */ + +#define EADC_STATUS2_ADCMPO0_Pos (12) /*!< EADC_T::STATUS2: ADCMPO0 Position */ +#define EADC_STATUS2_ADCMPO0_Msk (0x1ul << EADC_STATUS2_ADCMPO0_Pos) /*!< EADC_T::STATUS2: ADCMPO0 Mask */ + +#define EADC_STATUS2_ADCMPO1_Pos (13) /*!< EADC_T::STATUS2: ADCMPO1 Position */ +#define EADC_STATUS2_ADCMPO1_Msk (0x1ul << EADC_STATUS2_ADCMPO1_Pos) /*!< EADC_T::STATUS2: ADCMPO1 Mask */ + +#define EADC_STATUS2_ADCMPO2_Pos (14) /*!< EADC_T::STATUS2: ADCMPO2 Position */ +#define EADC_STATUS2_ADCMPO2_Msk (0x1ul << EADC_STATUS2_ADCMPO2_Pos) /*!< EADC_T::STATUS2: ADCMPO2 Mask */ + +#define EADC_STATUS2_ADCMPO3_Pos (15) /*!< EADC_T::STATUS2: ADCMPO3 Position */ +#define EADC_STATUS2_ADCMPO3_Msk (0x1ul << EADC_STATUS2_ADCMPO3_Pos) /*!< EADC_T::STATUS2: ADCMPO3 Mask */ + +#define EADC_STATUS2_CHANNEL_Pos (16) /*!< EADC_T::STATUS2: CHANNEL Position */ +#define EADC_STATUS2_CHANNEL_Msk (0x1ful << EADC_STATUS2_CHANNEL_Pos) /*!< EADC_T::STATUS2: CHANNEL Mask */ + +#define EADC_STATUS2_BUSY_Pos (23) /*!< EADC_T::STATUS2: BUSY Position */ +#define EADC_STATUS2_BUSY_Msk (0x1ul << EADC_STATUS2_BUSY_Pos) /*!< EADC_T::STATUS2: BUSY Mask */ + +#define EADC_STATUS2_ADOVIF_Pos (24) /*!< EADC_T::STATUS2: ADOVIF Position */ +#define EADC_STATUS2_ADOVIF_Msk (0x1ul << EADC_STATUS2_ADOVIF_Pos) /*!< EADC_T::STATUS2: ADOVIF Mask */ + +#define EADC_STATUS2_STOVF_Pos (25) /*!< EADC_T::STATUS2: STOVF Position */ +#define EADC_STATUS2_STOVF_Msk (0x1ul << EADC_STATUS2_STOVF_Pos) /*!< EADC_T::STATUS2: STOVF Mask */ + +#define EADC_STATUS2_AVALID_Pos (26) /*!< EADC_T::STATUS2: AVALID Position */ +#define EADC_STATUS2_AVALID_Msk (0x1ul << EADC_STATUS2_AVALID_Pos) /*!< EADC_T::STATUS2: AVALID Mask */ + +#define EADC_STATUS2_AOV_Pos (27) /*!< EADC_T::STATUS2: AOV Position */ +#define EADC_STATUS2_AOV_Msk (0x1ul << EADC_STATUS2_AOV_Pos) /*!< EADC_T::STATUS2: AOV Mask */ + +#define EADC_STATUS3_CURSPL_Pos (0) /*!< EADC_T::STATUS3: CURSPL Position */ +#define EADC_STATUS3_CURSPL_Msk (0x1ful << EADC_STATUS3_CURSPL_Pos) /*!< EADC_T::STATUS3: CURSPL Mask */ + +#define EADC_DDAT_RESULT_Pos (0) /*!< EADC_T::DDAT: RESULT Position */ +#define EADC_DDAT_RESULT_Msk (0xfffful << EADC_DDAT_RESULT_Pos) /*!< EADC_T::DDAT: RESULT Mask */ + +#define EADC_DDAT_OV_Pos (16) /*!< EADC_T::DDAT: OV Position */ +#define EADC_DDAT_OV_Msk (0x1ul << EADC_DDAT_OV_Pos) /*!< EADC_T::DDAT: OV Mask */ + +#define EADC_DDAT_VALID_Pos (17) /*!< EADC_T::DDAT: VALID Position */ +#define EADC_DDAT_VALID_Msk (0x1ul << EADC_DDAT_VALID_Pos) /*!< EADC_T::DDAT: VALID Mask */ + + +/**@}*/ /* EADC_CONST */ +/**@}*/ /* end of EADC register group */ + + +/*---------------------- Controller Area Network Controller -------------------------*/ +/** + @addtogroup CAN Controller Area Network Controller(CAN) + Memory Mapped Structure for CAN Controller +@{ */ + + +typedef struct +{ + + + +/** + * @var CAN_IF_T::CREQ + * Offset: 0x20, 0x80 IFn (Register Map Note 2) Command Request Registers + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[5:0] |MessageNumber|Message Number + * | | |0x01-0x20: Valid Message Number, the Message Object in the Message + * | | |RAM is selected for data transfer. + * | | |0x00: Not a valid Message Number, interpreted as 0x20. + * | | |0x21-0x3F: Not a valid Message Number, interpreted as 0x01-0x1F. + * |[15] |Busy |Busy Flag + * | | |0 = Read/write action has finished. + * | | |1 = Writing to the IFn Command Request Register is in progress. + * | | |This bit can only be read by the software. + * @var CAN_IF_T::CMASK + * Offset: 0x24, 0x84 IFn Command Mask Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |DAT_B |Access Data Bytes [7:4] + * | | |Write Operation: + * | | |0 = Data Bytes [7:4] unchanged. + * | | |1 = Transfer Data Bytes [7:4] to Message Object. + * | | |Read Operation: + * | | |0 = Data Bytes [7:4] unchanged. + * | | |1 = Transfer Data Bytes [7:4] to IFn Message Buffer Register. + * |[1] |DAT_A |Access Data Bytes [3:0] + * | | |Write Operation: + * | | |0 = Data Bytes [3:0] unchanged. + * | | |1 = Transfer Data Bytes [3:0] to Message Object. + * | | |Read Operation: + * | | |0 = Data Bytes [3:0] unchanged. + * | | |1 = Transfer Data Bytes [3:0] to IFn Message Buffer Register. + * |[2] |TxRqst_NewDat|Access Transmission Request Bit When Write Operation + * | | |0 = TxRqst bit unchanged. + * | | |1 = Set TxRqst bit. + * | | |Note: If a transmission is requested by programming bit TxRqst/NewDat in the IFn Command Mask Register, bit TxRqst in the IFn Message Control Register will be ignored. + * | | |Access New Data Bit when Read Operation. + * | | |0 = NewDat bit remains unchanged. + * | | |1 = Clear NewDat bit in the Message Object. + * | | |Note: A read access to a Message Object can be combined with the reset of the control bits IntPnd and NewDat. + * | | |The values of these bits transferred to the IFn Message Control Register always reflect the status before resetting these bits. + * |[3] |ClrIntPnd |Clear Interrupt Pending Bit + * | | |Write Operation: + * | | |When writing to a Message Object, this bit is ignored. + * | | |Read Operation: + * | | |0 = IntPnd bit (CAN_IFn_MCON[13]) remains unchanged. + * | | |1 = Clear IntPnd bit in the Message Object. + * |[4] |Control |Control Access Control Bits + * | | |Write Operation: + * | | |0 = Control Bits unchanged. + * | | |1 = Transfer Control Bits to Message Object. + * | | |Read Operation: + * | | |0 = Control Bits unchanged. + * | | |1 = Transfer Control Bits to IFn Message Buffer Register. + * |[5] |Arb |Access Arbitration Bits + * | | |Write Operation: + * | | |0 = Arbitration bits unchanged. + * | | |1 = Transfer Identifier + Dir (CAN_IFn_ARB2[13]) + Xtd (CAN_IFn_ARB2[14]) + MsgVal (CAN_IFn_APB2[15]) to Message Object. + * | | |Read Operation: + * | | |0 = Arbitration bits unchanged. + * | | |1 = Transfer Identifier + Dir + Xtd + MsgVal to IFn Message Buffer Register. + * |[6] |Mask |Access Mask Bits + * | | |Write Operation: + * | | |0 = Mask bits unchanged. + * | | |1 = Transfer Identifier Mask + MDir + MXtd to Message Object. + * | | |Read Operation: + * | | |0 = Mask bits unchanged. + * | | |1 = Transfer Identifier Mask + MDir + MXtd to IFn Message Buffer Register. + * |[7] |WR_RD |Write / Read Mode + * | | |0 = Read: Transfer data from the Message Object addressed by the Command Request Register into the selected Message Buffer Registers. + * | | |1 = Write: Transfer data from the selected Message Buffer Registers to the Message Object addressed by the Command Request Register. + * @var CAN_IF_T::MASK1 + * Offset: 0x28, 0x88 IFn Mask 1 Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |Msk[15:0] |Identifier Mask 15-0 + * | | |0 = The corresponding bit in the identifier of the message object cannot inhibit the match in the acceptance filtering. + * | | |1 = The corresponding identifier bit is used for acceptance filtering. + * @var CAN_IF_T::MASK2 + * Offset: 0x2C, 0x8C IFn Mask 2 Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[12:0] |Msk[28:16]|Identifier Mask 28-16 + * | | |0 = The corresponding bit in the identifier of the message object cannot inhibit the match in the acceptance filtering. + * | | |1 = The corresponding identifier bit is used for acceptance filtering. + * |[14] |MDir |Mask Message Direction + * | | |0 = The message direction bit (Dir (CAN_IFn_ARB2[13])) has no effect on the acceptance filtering. + * | | |1 = The message direction bit (Dir) is used for acceptance filtering. + * |[15] |MXtd |Mask Extended Identifier + * | | |0 = The extended identifier bit (IDE) has no effect on the acceptance filtering. + * | | |1 = The extended identifier bit (IDE) is used for acceptance filtering. + * | | |Note: When 11-bit ("standard") Identifiers are used for a Message Object, the identifiers of received Data Frames are written into bits ID28 to ID18 (CAN_IFn_ARB2[12:2]). + * | | |For acceptance filtering, only these bits together with mask bits Msk28 to Msk18 (CAN_IFn_MASK2[12:2]) are considered. + * @var CAN_IF_T::ARB1 + * Offset: 0x30, 0x90 IFn Arbitration 1 Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |ID[15:0] |Message Identifier 15-0 + * | | |ID28 - ID0, 29-bit Identifier ("Extended Frame"). + * | | |ID28 - ID18, 11-bit Identifier ("Standard Frame") + * @var CAN_IF_T::ARB2 + * Offset: 0x34, 0x94 IFn Arbitration 2 Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[12:0] |ID[28:16] |Message Identifier 28-16 + * | | |ID28 - ID0, 29-bit Identifier ("Extended Frame"). + * | | |ID28 - ID18, 11-bit Identifier ("Standard Frame") + * |[13] |Dir |Message Direction + * | | |0 = Direction is receive. + * | | |On TxRqst, a Remote Frame with the identifier of this Message Object is transmitted. + * | | |On reception of a Data Frame with matching identifier, that message is stored in this Message Object. + * | | |1 = Direction is transmit. + * | | |On TxRqst, the respective Message Object is transmitted as a Data Frame. + * | | |On reception of a Remote Frame with matching identifier, the TxRqst bit (CAN_IFn_CMASK[2]) of this Message Object is set (if RmtEn (CAN_IFn_MCON[9]) = one). + * |[14] |Xtd |Extended Identifier + * | | |0 = The 11-bit ("standard") Identifier will be used for this Message Object. + * | | |1 = The 29-bit ("extended") Identifier will be used for this Message Object. + * |[15] |MsgVal |Message Valid + * | | |0 = The Message Object is ignored by the Message Handler. + * | | |1 = The Message Object is configured and should be considered by the Message Handler. + * | | |Note: The application software must reset the MsgVal bit of all unused Messages Objects during the initialization before it resets bit Init (CAN_CON[0]). + * | | |This bit must also be reset before the identifier Id28-0 (CAN_IFn_ARB1/2), the control bits Xtd (CAN_IFn_ARB2[14]), Dir (CAN_IFn_APB2[13]), or the Data Length Code DLC3-0 (CAN_IFn_MCON[3:0]) are modified, or if the Messages Object is no longer required. + * @var CAN_IF_T::MCON + * Offset: 0x38, 0x98 IFn Message Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[3:0] |DLC |Data Length Code + * | | |0-8: Data Frame has 0-8 data bytes. + * | | |9-15: Data Frame has 8 data bytes + * | | |Note: The Data Length Code of a Message Object must be defined the same as in all the corresponding objects with the same identifier at other nodes. + * | | |When the Message Handler stores a data frame, it will write the DLC to the value given by the received message. + * | | |Data 0: 1st data byte of a CAN Data Frame + * | | |Data 1: 2nd data byte of a CAN Data Frame + * | | |Data 2: 3rd data byte of a CAN Data Frame + * | | |Data 3: 4th data byte of a CAN Data Frame + * | | |Data 4: 5th data byte of a CAN Data Frame + * | | |Data 5: 6th data byte of a CAN Data Frame + * | | |Data 6: 7th data byte of a CAN Data Frame + * | | |Data 7 : 8th data byte of a CAN Data Frame + * | | |Note: The Data 0 Byte is the first data byte shifted into the shift register of the CAN Core during a reception while the Data 7 byte is the last. + * | | |When the Message Handler stores a Data Frame, it will write all the eight data bytes into a Message Object. + * | | |If the Data Length Code is less than 8, the remaining bytes of the Message Object will be overwritten by unspecified values. + * |[7] |EoB |End Of Buffer + * | | |0 = Message Object belongs to a FIFO Buffer and is not the last Message Object of that FIFO Buffer. + * | | |1 = Single Message Object or last Message Object of a FIFO Buffer. + * | | |Note: This bit is used to concatenate two or more Message Objects (up to 32) to build a FIFO Buffer. + * | | |For single Message Objects (not belonging to a FIFO Buffer), this bit must always be set to one. + * |[8] |TxRqst |Transmit Request + * | | |0 = This Message Object is not waiting for transmission. + * | | |1 = The transmission of this Message Object is requested and is not yet done. + * |[9] |RmtEn |Remote Enable Control + * | | |0 = At the reception of a Remote Frame, TxRqst (CAN_IFn_MCON[8]) is left unchanged. + * | | |1 = At the reception of a Remote Frame, TxRqst is set. + * |[10] |RxIE |Receive Interrupt Enable Control + * | | |0 = IntPnd (CAN_IFn_MCON[13]) will be left unchanged after a successful reception of a frame. + * | | |1 = IntPnd will be set after a successful reception of a frame. + * |[11] |TxIE |Transmit Interrupt Enable Control + * | | |0 = IntPnd (CAN_IFn_MCON[13]) will be left unchanged after the successful transmission of a frame. + * | | |1 = IntPnd will be set after a successful transmission of a frame. + * |[12] |UMask |Use Acceptance Mask + * | | |0 = Mask ignored. + * | | |1 = Use Mask (Msk28-0, MXtd, and MDir) for acceptance filtering. + * | | |Note: If the UMask bit is set to one, the Message Object's mask bits have to be programmed during initialization of the Message Object before MsgVal bit (CAN_IFn_APB2[15]) is set to one. + * |[13] |IntPnd |Interrupt Pending + * | | |0 = This message object is not the source of an interrupt. + * | | |1 = This message object is the source of an interrupt. + * | | |The Interrupt Identifier in the Interrupt Register will point to this message object if there is no other interrupt source with higher priority. + * |[14] |MsgLst |Message Lost (only valid for Message Objects with direction = receive). + * | | |0 = No message lost since last time this bit was reset by the CPU. + * | | |1 = The Message Handler stored a new message into this object when NewDat was still set, the CPU has lost a message. + * |[15] |NewDat |New Data + * | | |0 = No new data has been written into the data portion of this Message Object by the Message Handler since last time this flag was cleared by the application software. + * | | |1 = The Message Handler or the application software has written new data into the data portion of this Message Object. + * @var CAN_IF_T::DAT_A1 + * Offset: 0x3C, 0x9C IFn Data A1 Register (Register Map Note 3) + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |Data0 |Data Byte 0 + * | | |1st data byte of a CAN Data Frame + * |[15:8] |Data1 |Data Byte 1 + * | | |2nd data byte of a CAN Data Frame + * @var CAN_IF_T::DAT_A2 + * Offset: 0x40, 0xA0 IFn Data A2 Register (Register Map Note 3) + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |Data2 |Data Byte 2 + * | | |3rd data byte of CAN Data Frame + * |[15:8] |Data3 |Data Byte 3 + * | | |4th data byte of CAN Data Frame + * @var CAN_IF_T::DAT_B1 + * Offset: 0x44, 0xA4 IFn Data B1 Register (Register Map Note 3) + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |Data4 |Data Byte 4 + * | | |5th data byte of CAN Data Frame + * |[15:8] |Data5 |Data Byte 5 + * | | |6th data byte of CAN Data Frame + * @var CAN_IF_T::DAT_B2 + * Offset: 0x48, 0xA8 IFn Data B2 Register (Register Map Note 3) + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |Data6 |Data Byte 6 + * | | |7th data byte of CAN Data Frame. + * |[15:8] |Data7 |Data Byte 7 + * | | |8th data byte of CAN Data Frame. + */ + + __IO uint32_t CREQ; /* Offset: 0x20, 0x80 IFn (Register Map Note 2) Command Request Registers */ + __IO uint32_t CMASK; /* Offset: 0x24, 0x84 IFn Command Mask Register */ + __IO uint32_t MASK1; /* Offset: 0x28, 0x88 IFn Mask 1 Register */ + __IO uint32_t MASK2; /* Offset: 0x2C, 0x8C IFn Mask 2 Register */ + __IO uint32_t ARB1; /* Offset: 0x30, 0x90 IFn Arbitration 1 Register */ + __IO uint32_t ARB2; /* Offset: 0x34, 0x94 IFn Arbitration 2 Register */ + __IO uint32_t MCON; /* Offset: 0x38, 0x98 IFn Message Control Register */ + __IO uint32_t DAT_A1; /* Offset: 0x3C, 0x9C IFn Data A1 Register (Register Map Note 3) */ + __IO uint32_t DAT_A2; /* Offset: 0x40, 0xA0 IFn Data A2 Register (Register Map Note 3) */ + __IO uint32_t DAT_B1; /* Offset: 0x44, 0xA4 IFn Data B1 Register (Register Map Note 3) */ + __IO uint32_t DAT_B2; /* Offset: 0x48, 0xA8 IFn Data B2 Register (Register Map Note 3) */ + __I uint32_t RESERVE0[13]; + +} CAN_IF_T; + + + + +typedef struct +{ + + + +/** + * @var CAN_T::CON + * Offset: 0x00 Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |Init |Init Initialization + * | | |0 = Normal Operation. + * | | |1 = Initialization is started. + * |[1] |IE |Module Interrupt Enable Control + * | | |0 = Disabled. + * | | |1 = Enabled. + * |[2] |SIE |Status Change Interrupt Enable Control + * | | |0 = Disabled - No Status Change Interrupt will be generated. + * | | |1 = Enabled - An interrupt will be generated when a message transfer is successfully completed or a CAN bus error is detected. + * |[3] |EIE |Error Interrupt Enable Control + * | | |0 = Disabled - No Error Status Interrupt will be generated. + * | | |1 = Enabled - A change in the bits BOff (CAN_STATUS[7]) or EWarn (CAN_STATUS[6]) in the Status Register will generate an interrupt. + * |[5] |DAR |Automatic Re-Transmission Disable Control + * | | |0 = Automatic Retransmission of disturbed messages enabled. + * | | |1 = Automatic Retransmission disabled. + * |[6] |CCE |Configuration Change Enable Control + * | | |0 = No write access to the Bit Timing Register. + * | | |1 = Write access to the Bit Timing Register (CAN_BTIME) allowed. (while Init bit (CAN_CON[0]) = 1). + * |[7] |Test |Test Mode Enable Control + * | | |0 = Normal Operation. + * | | |1 = Test Mode. + * @var CAN_T::STATUS + * Offset: 0x04 Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[2:0] |LEC |Last Error Code (Type Of The Last Error To Occur On The CAN Bus) + * | | |The LEC field holds a code, which indicates the type of the last error to occur on the CAN bus. + * | | |This field will be cleared to '0' when a message has been transferred (reception or transmission) without error. + * | | |The unused code '7' may be written by the CPU to check for updates. + * | | |The following table describes the error code. + * |[3] |TxOK |Transmitted A Message Successfully + * | | |0 = Since this bit was reset by the CPU, no message has been successfully transmitted. + * | | |This bit is never reset by the CAN Core. + * | | |1 = Since this bit was last reset by the CPU, a message has been successfully (error free and acknowledged by at least one other node) transmitted. + * |[4] |RxOK |Received A Message Successfully + * | | |0 = No message has been successfully received since this bit was last reset by the CPU. + * | | |This bit is never reset by the CAN Core. + * | | |1 = A message has been successfully received since this bit was last reset by the CPU (independent of the result of acceptance filtering). + * |[5] |EPass |Error Passive (Read Only) + * | | |0 = The CAN Core is error active. + * | | |1 = The CAN Core is in the error passive state as defined in the CAN Specification. + * |[6] |EWarn |Error Warning Status (Read Only) + * | | |0 = Both error counters are below the error warning limit of 96. + * | | |1 = At least one of the error counters in the EML has reached the error warning limit of 96. + * |[7] |BOff |Bus-Off Status (Read Only) + * | | |0 = The CAN module is not in bus-off state. + * | | |1 = The CAN module is in bus-off state. + * @var CAN_T::ERR + * Offset: 0x08 Error Counter Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |TEC |Transmit Error Counter + * | | |Actual state of the Transmit Error Counter. Values between 0 and 255. + * |[14:8] |REC |Receive Error Counter + * | | |Actual state of the Receive Error Counter. Values between 0 and 127. + * |[15] |RP |Receive Error Passive + * | | |0 = The Receive Error Counter is below the error passive level. + * | | |1 = The Receive Error Counter has reached the error passive level as defined in the CAN Specification. + * @var CAN_T::BTIME + * Offset: 0x0C Bit Timing Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[5:0] |BRP |Baud Rate Prescaler + * | | |0x01-0x3F: The value by which the oscillator frequency is divided for generating the bit time quanta. + * | | |The bit time is built up from a multiple of this quanta. + * | | |Valid values for the Baud Rate Prescaler are [ 0 ... 63 ]. + * | | |The actual interpretation by the hardware of this value is such that one more than the value programmed here is used. + * |[7:6] |SJW |(Re)Synchronization Jump Width + * | | |0x0-0x3: Valid programmed values are [0 ... 3]. + * | | |The actual interpretation by the hardware of this value is such that one more than the value programmed here is used. + * |[11:8] |TSeg1 |Time Segment Before The Sample Point Minus Sync_Seg + * | | |0x01-0x0F: valid values for TSeg1 are [1 ... 15]. + * | | |The actual interpretation by the hardware of this value is such that one more than the value programmed is used. + * |[14:12] |TSeg2 |Time Segment After Sample Point + * | | |0x0-0x7: Valid values for TSeg2 are [0 ... 7]. + * | | |The actual interpretation by the hardware of this value is such that one more than the value programmed here is used. + * @var CAN_T::IIDR + * Offset: 0x10 Interrupt Identifier Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |IntId |Interrupt Identifier (Indicates The Source Of The Interrupt) + * | | |If several interrupts are pending, the CAN Interrupt Register will point to the pending interrupt with the highest priority, disregarding their chronological order. + * | | |An interrupt remains pending until the application software has cleared it. + * | | |If IntId is different from 0x0000 and IE (CAN_IFn_MCON[1]) is set, the IRQ interrupt signal to the EIC is active. + * | | |The interrupt remains active until IntId is back to value 0x0000 (the cause of the interrupt is reset) or until IE is reset. + * | | |The Status Interrupt has the highest priority. + * | | |Among the message interrupts, the Message Object' s interrupt priority decreases with increasing message number. + * | | |A message interrupt is cleared by clearing the Message Object's IntPnd bit (CAN_IFn_MCON[13]). + * | | |The Status Interrupt is cleared by reading the Status Register. + * @var CAN_T::TEST + * Offset: 0x14 Test Register (Register Map Note 1) + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[1:0] |Res |Reserved + * | | |There are reserved bits. + * | | |These bits are always read as '0' and must always be written with '0'. + * |[2] |Basic |Basic Mode + * | | |0 = Basic Mode disabled. + * | | |1= IF1 Registers used as Tx Buffer, IF2 Registers used as Rx Buffer. + * |[3] |Silent |Silent Mode + * | | |0 = Normal operation. + * | | |1 = The module is in Silent Mode. + * |[4] |LBack |Loop Back Mode Enable Control + * | | |0 = Loop Back Mode is disabled. + * | | |1 = Loop Back Mode is enabled. + * |[6:5] |Tx10 |Tx[1:0]: Control Of CAN_TX Pin + * | | |00 = Reset value, CAN_TX pin is controlled by the CAN Core. + * | | |01 = Sample Point can be monitored at CAN_TX pin. + * | | |10 = CAN_TX pin drives a dominant ('0') value. + * | | |11 = CAN_TX pin drives a recessive ('1') value. + * |[7] |Rx |Monitors The Actual Value Of CAN_RX Pin (Read Only) + * | | |0 = The CAN bus is dominant (CAN_RX = '0'). + * | | |1 = The CAN bus is recessive (CAN_RX = '1'). + * @var CAN_T::BRPE + * Offset: 0x18 Baud Rate Prescaler Extension Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[3:0] |BRPE |BRPE: Baud Rate Prescaler Extension + * | | |0x00-0x0F: By programming BRPE, the Baud Rate Prescaler can be extended to values up to 1023. + * | | |The actual interpretation by the hardware is that one more than the value programmed by BRPE (MSBs) and BTIME (LSBs) is used. + * @var CAN_T::IF + * Offset: 0x20~0xFC CAN Interface Registers + * --------------------------------------------------------------------------------------------------- + * CAN interface structure. Refer to \ref CAN_IF_T for detail information. + * + * @var CAN_T::TXREQ1 + * Offset: 0x100 Transmission Request Register 1 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |TxRqst[16:1]|Transmission Request Bits 16-1 (Of All Message Objects) + * | | |0 = This Message Object is not waiting for transmission. + * | | |1 = The transmission of this Message Object is requested and is not yet done. + * | | |These bits are read only. + * @var CAN_T::TXREQ2 + * Offset: 0x104 Transmission Request Register 2 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |TxRqst[32:17]|Transmission Request Bits 32-17 (Of All Message Objects) + * | | |0 = This Message Object is not waiting for transmission. + * | | |1 = The transmission of this Message Object is requested and is not yet done. + * | | |These bits are read only. + * @var CAN_T::NDAT1 + * Offset: 0x120 New Data Register 1 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |NewData[16:1]|New Data Bits 16-1 (Of All Message Objects) + * | | |0 = No new data has been written into the data portion of this Message Object by the Message Handler since the last time this flag was cleared by the application software. + * | | |1 = The Message Handler or the application software has written new data into the data portion of this Message Object. + * @var CAN_T::NDAT2 + * Offset: 0x124 New Data Register 2 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |NewData[32:17]|New Data Bits 32-17 (Of All Message Objects) + * | | |0 = No new data has been written into the data portion of this Message Object by the Message Handler since the last time this flag was cleared by the application software. + * | | |1 = The Message Handler or the application software has written new data into the data portion of this Message Object. + * @var CAN_T::IPND1 + * Offset: 0x140 Interrupt Pending Register 1 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |IntPnd[16:1]|Interrupt Pending Bits 16-1 (Of All Message Objects) + * | | |0 = This message object is not the source of an interrupt. + * | | |1 = This message object is the source of an interrupt. + * @var CAN_T::IPND2 + * Offset: 0x144 Interrupt Pending Register 2 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |IntPnd[32:17]|Interrupt Pending Bits 32-17(Of All Message Objects) + * | | |0 = This message object is not the source of an interrupt. + * | | |1 = This message object is the source of an interrupt. + * @var CAN_T::MVLD1 + * Offset: 0x160 Message Valid Register 1 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |MsgVal[16:1]|Message Valid Bits 16-1 (Of All Message Objects) (Read Only) + * | | |0 = This Message Object is ignored by the Message Handler. + * | | |1 = This Message Object is configured and should be considered by the Message Handler. + * | | |Ex. + * | | |CAN_MVLD1[0] means Message object No.1 is valid or not. + * | | |If CAN_MVLD1[0] is set, message object No.1 is configured. + * @var CAN_T::MVLD2 + * Offset: 0x164 Message Valid Register 2 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |MsgVal[32:17]|Message Valid Bits 32-17 (Of All Message Objects) (Read Only) + * | | |0 = This Message Object is ignored by the Message Handler. + * | | |1 = This Message Object is configured and should be considered by the Message Handler. + * | | |Ex.CAN_MVLD2[15] means Message object No.32 is valid or not. + * | | |If CAN_MVLD2[15] is set, message object No.32 is configured. + * @var CAN_T::WU_EN + * Offset: 0x168 Wake-up Enable Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |WAKUP_EN |Wake-Up Enable Control + * | | |0 = The wake-up function Disabled. + * | | |1 = The wake-up function Enabled. + * | | |Note: User can wake-up system when there is a falling edge in the CAN_Rx pin. + * @var CAN_T::WU_STATUS + * Offset: 0x16C Wake-up Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |WAKUP_STS |Wake-Up Status + * | | |0 = No wake-up event occurred. + * | | |1 = Wake-up event occurred. + * | | |Note: This bit can be cleared by writing '0'. + */ + + __IO uint32_t CON; /* Offset: 0x00 Control Register */ + __IO uint32_t STATUS; /* Offset: 0x04 Status Register */ + __I uint32_t ERR; /* Offset: 0x08 Error Counter Register */ + __IO uint32_t BTIME; /* Offset: 0x0C Bit Timing Register */ + __I uint32_t IIDR; /* Offset: 0x10 Interrupt Identifier Register */ + __IO uint32_t TEST; /* Offset: 0x14 Test Register (Register Map Note 1) */ + __IO uint32_t BRPE; /* Offset: 0x18 Baud Rate Prescaler Extension Register */ + __I uint32_t RESERVE0[1]; + __IO CAN_IF_T IF[2]; /* Offset: 0x20~0xFC CAN Interface Registers */ + __I uint32_t RESERVE1[8]; + __I uint32_t TXREQ1; /* Offset: 0x100 Transmission Request Register 1 */ + __I uint32_t TXREQ2; /* Offset: 0x104 Transmission Request Register 2 */ + __I uint32_t RESERVE3[6]; + __I uint32_t NDAT1; /* Offset: 0x120 New Data Register 1 */ + __I uint32_t NDAT2; /* Offset: 0x124 New Data Register 2 */ + __I uint32_t RESERVE4[6]; + __I uint32_t IPND1; /* Offset: 0x140 Interrupt Pending Register 1 */ + __I uint32_t IPND2; /* Offset: 0x144 Interrupt Pending Register 2 */ + __I uint32_t RESERVE5[6]; + __I uint32_t MVLD1; /* Offset: 0x160 Message Valid Register 1 */ + __I uint32_t MVLD2; /* Offset: 0x164 Message Valid Register 2 */ + __IO uint32_t WU_EN; /* Offset: 0x168 Wake-up Enable Register */ + __IO uint32_t WU_STATUS; /* Offset: 0x16C Wake-up Status Register */ + +} CAN_T; + + + +/** + @addtogroup CAN_CONST CAN Bit Field Definition + Constant Definitions for CAN Controller +@{ */ +/* CAN CON Bit Field Definitions */ +#define CAN_CON_TEST_Pos 7 /*!< CAN_T::CON: TEST Position */ +#define CAN_CON_TEST_Msk (0x1ul << CAN_CON_TEST_Pos) /*!< CAN_T::CON: TEST Mask */ + +#define CAN_CON_CCE_Pos 6 /*!< CAN_T::CON: CCE Position */ +#define CAN_CON_CCE_Msk (0x1ul << CAN_CON_CCE_Pos) /*!< CAN_T::CON: CCE Mask */ + +#define CAN_CON_DAR_Pos 5 /*!< CAN_T::CON: DAR Position */ +#define CAN_CON_DAR_Msk (0x1ul << CAN_CON_DAR_Pos) /*!< CAN_T::CON: DAR Mask */ + +#define CAN_CON_EIE_Pos 3 /*!< CAN_T::CON: EIE Position */ +#define CAN_CON_EIE_Msk (0x1ul << CAN_CON_EIE_Pos) /*!< CAN_T::CON: EIE Mask */ + +#define CAN_CON_SIE_Pos 2 /*!< CAN_T::CON: SIE Position */ +#define CAN_CON_SIE_Msk (0x1ul << CAN_CON_SIE_Pos) /*!< CAN_T::CON: SIE Mask */ + +#define CAN_CON_IE_Pos 1 /*!< CAN_T::CON: IE Position */ +#define CAN_CON_IE_Msk (0x1ul << CAN_CON_IE_Pos) /*!< CAN_T::CON: IE Mask */ + +#define CAN_CON_INIT_Pos 0 /*!< CAN_T::CON: INIT Position */ +#define CAN_CON_INIT_Msk (0x1ul << CAN_CON_INIT_Pos) /*!< CAN_T::CON: INIT Mask */ + +/* CAN STATUS Bit Field Definitions */ +#define CAN_STATUS_BOFF_Pos 7 /*!< CAN_T::STATUS: BOFF Position */ +#define CAN_STATUS_BOFF_Msk (0x1ul << CAN_STATUS_BOFF_Pos) /*!< CAN_T::STATUS: BOFF Mask */ + +#define CAN_STATUS_EWARN_Pos 6 /*!< CAN_T::STATUS: EWARN Position */ +#define CAN_STATUS_EWARN_Msk (0x1ul << CAN_STATUS_EWARN_Pos) /*!< CAN_T::STATUS: EWARN Mask */ + +#define CAN_STATUS_EPASS_Pos 5 /*!< CAN_T::STATUS: EPASS Position */ +#define CAN_STATUS_EPASS_Msk (0x1ul << CAN_STATUS_EPASS_Pos) /*!< CAN_T::STATUS: EPASS Mask */ + +#define CAN_STATUS_RXOK_Pos 4 /*!< CAN_T::STATUS: RXOK Position */ +#define CAN_STATUS_RXOK_Msk (0x1ul << CAN_STATUS_RXOK_Pos) /*!< CAN_T::STATUS: RXOK Mask */ + +#define CAN_STATUS_TXOK_Pos 3 /*!< CAN_T::STATUS: TXOK Position */ +#define CAN_STATUS_TXOK_Msk (0x1ul << CAN_STATUS_TXOK_Pos) /*!< CAN_T::STATUS: TXOK Mask */ + +#define CAN_STATUS_LEC_Pos 0 /*!< CAN_T::STATUS: LEC Position */ +#define CAN_STATUS_LEC_Msk (0x7ul << CAN_STATUS_LEC_Pos) /*!< CAN_T::STATUS: LEC Mask */ + +/* CAN ERR Bit Field Definitions */ +#define CAN_ERR_RP_Pos 15 /*!< CAN_T::ERR: RP Position */ +#define CAN_ERR_RP_Msk (0x1ul << CAN_ERR_RP_Pos) /*!< CAN_T::ERR: RP Mask */ + +#define CAN_ERR_REC_Pos 8 /*!< CAN_T::ERR: REC Position */ +#define CAN_ERR_REC_Msk (0x7Ful << CAN_ERR_REC_Pos) /*!< CAN_T::ERR: REC Mask */ + +#define CAN_ERR_TEC_Pos 0 /*!< CAN_T::ERR: TEC Position */ +#define CAN_ERR_TEC_Msk (0xFFul << CAN_ERR_TEC_Pos) /*!< CAN_T::ERR: TEC Mask */ + +/* CAN BTIME Bit Field Definitions */ +#define CAN_BTIME_TSEG2_Pos 12 /*!< CAN_T::BTIME: TSEG2 Position */ +#define CAN_BTIME_TSEG2_Msk (0x7ul << CAN_BTIME_TSEG2_Pos) /*!< CAN_T::BTIME: TSEG2 Mask */ + +#define CAN_BTIME_TSEG1_Pos 8 /*!< CAN_T::BTIME: TSEG1 Position */ +#define CAN_BTIME_TSEG1_Msk (0xFul << CAN_BTIME_TSEG1_Pos) /*!< CAN_T::BTIME: TSEG1 Mask */ + +#define CAN_BTIME_SJW_Pos 6 /*!< CAN_T::BTIME: SJW Position */ +#define CAN_BTIME_SJW_Msk (0x3ul << CAN_BTIME_SJW_Pos) /*!< CAN_T::BTIME: SJW Mask */ + +#define CAN_BTIME_BRP_Pos 0 /*!< CAN_T::BTIME: BRP Position */ +#define CAN_BTIME_BRP_Msk (0x3Ful << CAN_BTIME_BRP_Pos) /*!< CAN_T::BTIME: BRP Mask */ + +/* CAN IIDR Bit Field Definitions */ +#define CAN_IIDR_INTID_Pos 0 /*!< CAN_T::IIDR: INTID Position */ +#define CAN_IIDR_INTID_Msk (0xFFFFul << CAN_IIDR_INTID_Pos) /*!< CAN_T::IIDR: INTID Mask */ + +/* CAN TEST Bit Field Definitions */ +#define CAN_TEST_RX_Pos 7 /*!< CAN_T::TEST: RX Position */ +#define CAN_TEST_RX_Msk (0x1ul << CAN_TEST_RX_Pos) /*!< CAN_T::TEST: RX Mask */ + +#define CAN_TEST_TX_Pos 5 /*!< CAN_T::TEST: TX Position */ +#define CAN_TEST_TX_Msk (0x3ul << CAN_TEST_TX_Pos) /*!< CAN_T::TEST: TX Mask */ + +#define CAN_TEST_LBACK_Pos 4 /*!< CAN_T::TEST: LBACK Position */ +#define CAN_TEST_LBACK_Msk (0x1ul << CAN_TEST_LBACK_Pos) /*!< CAN_T::TEST: LBACK Mask */ + +#define CAN_TEST_SILENT_Pos 3 /*!< CAN_T::TEST: Silent Position */ +#define CAN_TEST_SILENT_Msk (0x1ul << CAN_TEST_SILENT_Pos) /*!< CAN_T::TEST: Silent Mask */ + +#define CAN_TEST_BASIC_Pos 2 /*!< CAN_T::TEST: Basic Position */ +#define CAN_TEST_BASIC_Msk (0x1ul << CAN_TEST_BASIC_Pos) /*!< CAN_T::TEST: Basic Mask */ + +/* CAN BPRE Bit Field Definitions */ +#define CAN_BRPE_BRPE_Pos 0 /*!< CAN_T::BRPE: BRPE Position */ +#define CAN_BRPE_BRPE_Msk (0xFul << CAN_BRPE_BRPE_Pos) /*!< CAN_T::BRPE: BRPE Mask */ + +/* CAN IFn_CREQ Bit Field Definitions */ +#define CAN_IF_CREQ_BUSY_Pos 15 /*!< CAN_IF_T::CREQ: BUSY Position */ +#define CAN_IF_CREQ_BUSY_Msk (0x1ul << CAN_IF_CREQ_BUSY_Pos) /*!< CAN_IF_T::CREQ: BUSY Mask */ + +#define CAN_IF_CREQ_MSGNUM_Pos 0 /*!< CAN_IF_T::CREQ: MSGNUM Position */ +#define CAN_IF_CREQ_MSGNUM_Msk (0x3Ful << CAN_IF_CREQ_MSGNUM_Pos) /*!< CAN_IF_T::CREQ: MSGNUM Mask */ + +/* CAN IFn_CMASK Bit Field Definitions */ +#define CAN_IF_CMASK_WRRD_Pos 7 /*!< CAN_IF_T::CMASK: WRRD Position */ +#define CAN_IF_CMASK_WRRD_Msk (0x1ul << CAN_IF_CMASK_WRRD_Pos) /*!< CAN_IF_T::CMASK: WRRD Mask */ + +#define CAN_IF_CMASK_MASK_Pos 6 /*!< CAN_IF_T::CMASK: MASK Position */ +#define CAN_IF_CMASK_MASK_Msk (0x1ul << CAN_IF_CMASK_MASK_Pos) /*!< CAN_IF_T::CMASK: MASK Mask */ + +#define CAN_IF_CMASK_ARB_Pos 5 /*!< CAN_IF_T::CMASK: ARB Position */ +#define CAN_IF_CMASK_ARB_Msk (0x1ul << CAN_IF_CMASK_ARB_Pos) /*!< CAN_IF_T::CMASK: ARB Mask */ + +#define CAN_IF_CMASK_CONTROL_Pos 4 /*!< CAN_IF_T::CMASK: CONTROL Position */ +#define CAN_IF_CMASK_CONTROL_Msk (0x1ul << CAN_IF_CMASK_CONTROL_Pos) /*!< CAN_IF_T::CMASK: CONTROL Mask */ + +#define CAN_IF_CMASK_CLRINTPND_Pos 3 /*!< CAN_IF_T::CMASK: CLRINTPND Position */ +#define CAN_IF_CMASK_CLRINTPND_Msk (0x1ul << CAN_IF_CMASK_CLRINTPND_Pos) /*!< CAN_IF_T::CMASK: CLRINTPND Mask */ + +#define CAN_IF_CMASK_TXRQSTNEWDAT_Pos 2 /*!< CAN_IF_T::CMASK: TXRQSTNEWDAT Position */ +#define CAN_IF_CMASK_TXRQSTNEWDAT_Msk (0x1ul << CAN_IF_CMASK_TXRQSTNEWDAT_Pos) /*!< CAN_IF_T::CMASK: TXRQSTNEWDAT Mask */ + +#define CAN_IF_CMASK_DATAA_Pos 1 /*!< CAN_IF_T::CMASK: DATAA Position */ +#define CAN_IF_CMASK_DATAA_Msk (0x1ul << CAN_IF_CMASK_DATAA_Pos) /*!< CAN_IF_T::CMASK: DATAA Mask */ + +#define CAN_IF_CMASK_DATAB_Pos 0 /*!< CAN_IF_T::CMASK: DATAB Position */ +#define CAN_IF_CMASK_DATAB_Msk (0x1ul << CAN_IF_CMASK_DATAB_Pos) /*!< CAN_IF_T::CMASK: DATAB Mask */ + +/* CAN IFn_MASK1 Bit Field Definitions */ +#define CAN_IF_MASK1_MSK_Pos 0 /*!< CAN_IF_T::MASK1: MSK Position */ +#define CAN_IF_MASK1_MSK_Msk (0xFFul << CAN_IF_MASK1_MSK_Pos) /*!< CAN_IF_T::MASK1: MSK Mask */ + +/* CAN IFn_MASK2 Bit Field Definitions */ +#define CAN_IF_MASK2_MXTD_Pos 15 /*!< CAN_IF_T::MASK2: MXTD Position */ +#define CAN_IF_MASK2_MXTD_Msk (0x1ul << CAN_IF_MASK2_MXTD_Pos) /*!< CAN_IF_T::MASK2: MXTD Mask */ + +#define CAN_IF_MASK2_MDIR_Pos 14 /*!< CAN_IF_T::MASK2: MDIR Position */ +#define CAN_IF_MASK2_MDIR_Msk (0x1ul << CAN_IF_MASK2_MDIR_Pos) /*!< CAN_IF_T::MASK2: MDIR Mask */ + +#define CAN_IF_MASK2_MSK_Pos 0 /*!< CAN_IF_T::MASK2: MSK Position */ +#define CAN_IF_MASK2_MSK_Msk (0x1FFul << CAN_IF_MASK2_MSK_Pos) /*!< CAN_IF_T::MASK2: MSK Mask */ + +/* CAN IFn_ARB1 Bit Field Definitions */ +#define CAN_IF_ARB1_ID_Pos 0 /*!< CAN_IF_T::ARB1: ID Position */ +#define CAN_IF_ARB1_ID_Msk (0xFFFFul << CAN_IF_ARB1_ID_Pos) /*!< CAN_IF_T::ARB1: ID Mask */ + +/* CAN IFn_ARB2 Bit Field Definitions */ +#define CAN_IF_ARB2_MSGVAL_Pos 15 /*!< CAN_IF_T::ARB2: MSGVAL Position */ +#define CAN_IF_ARB2_MSGVAL_Msk (0x1ul << CAN_IF_ARB2_MSGVAL_Pos) /*!< CAN_IF_T::ARB2: MSGVAL Mask */ + +#define CAN_IF_ARB2_XTD_Pos 14 /*!< CAN_IF_T::ARB2: XTD Position */ +#define CAN_IF_ARB2_XTD_Msk (0x1ul << CAN_IF_ARB2_XTD_Pos) /*!< CAN_IF_T::ARB2: XTD Mask */ + +#define CAN_IF_ARB2_DIR_Pos 13 /*!< CAN_IF_T::ARB2: DIR Position */ +#define CAN_IF_ARB2_DIR_Msk (0x1ul << CAN_IF_ARB2_DIR_Pos) /*!< CAN_IF_T::ARB2: DIR Mask */ + +#define CAN_IF_ARB2_ID_Pos 0 /*!< CAN_IF_T::ARB2: ID Position */ +#define CAN_IF_ARB2_ID_Msk (0x1FFFul << CAN_IF_ARB2_ID_Pos) /*!< CAN_IF_T::ARB2: ID Mask */ + +/* CAN IFn_MCON Bit Field Definitions */ +#define CAN_IF_MCON_NEWDAT_Pos 15 /*!< CAN_IF_T::MCON: NEWDAT Position */ +#define CAN_IF_MCON_NEWDAT_Msk (0x1ul << CAN_IF_MCON_NEWDAT_Pos) /*!< CAN_IF_T::MCON: NEWDAT Mask */ + +#define CAN_IF_MCON_MSGLST_Pos 14 /*!< CAN_IF_T::MCON: MSGLST Position */ +#define CAN_IF_MCON_MSGLST_Msk (0x1ul << CAN_IF_MCON_MSGLST_Pos) /*!< CAN_IF_T::MCON: MSGLST Mask */ + +#define CAN_IF_MCON_INTPND_Pos 13 /*!< CAN_IF_T::MCON: INTPND Position */ +#define CAN_IF_MCON_INTPND_Msk (0x1ul << CAN_IF_MCON_INTPND_Pos) /*!< CAN_IF_T::MCON: INTPND Mask */ + +#define CAN_IF_MCON_UMASK_Pos 12 /*!< CAN_IF_T::MCON: UMASK Position */ +#define CAN_IF_MCON_UMASK_Msk (0x1ul << CAN_IF_MCON_UMASK_Pos) /*!< CAN_IF_T::MCON: UMASK Mask */ + +#define CAN_IF_MCON_TXIE_Pos 11 /*!< CAN_IF_T::MCON: TXIE Position */ +#define CAN_IF_MCON_TXIE_Msk (0x1ul << CAN_IF_MCON_TXIE_Pos) /*!< CAN_IF_T::MCON: TXIE Mask */ + +#define CAN_IF_MCON_RXIE_Pos 10 /*!< CAN_IF_T::MCON: RXIE Position */ +#define CAN_IF_MCON_RXIE_Msk (0x1ul << CAN_IF_MCON_RXIE_Pos) /*!< CAN_IF_T::MCON: RXIE Mask */ + +#define CAN_IF_MCON_RMTEN_Pos 9 /*!< CAN_IF_T::MCON: RMTEN Position */ +#define CAN_IF_MCON_RMTEN_Msk (0x1ul << CAN_IF_MCON_RMTEN_Pos) /*!< CAN_IF_T::MCON: RMTEN Mask */ + +#define CAN_IF_MCON_TXRQST_Pos 8 /*!< CAN_IF_T::MCON: TXRQST Position */ +#define CAN_IF_MCON_TXRQST_Msk (0x1ul << CAN_IF_MCON_TXRQST_Pos) /*!< CAN_IF_T::MCON: TXRQST Mask */ + +#define CAN_IF_MCON_EOB_Pos 7 /*!< CAN_IF_T::MCON: EOB Position */ +#define CAN_IF_MCON_EOB_Msk (0x1ul << CAN_IF_MCON_EOB_Pos) /*!< CAN_IF_T::MCON: EOB Mask */ + +#define CAN_IF_MCON_DLC_Pos 0 /*!< CAN_IF_T::MCON: DLC Position */ +#define CAN_IF_MCON_DLC_Msk (0xFul << CAN_IF_MCON_DLC_Pos) /*!< CAN_IF_T::MCON: DLC Mask */ + +/* CAN IFn_DATA_A1 Bit Field Definitions */ +#define CAN_IF_DAT_A1_DATA1_Pos 8 /*!< CAN_IF_T::DATAA1: DATA1 Position */ +#define CAN_IF_DAT_A1_DATA1_Msk (0xFFul << CAN_IF_DAT_A1_DATA1_Pos) /*!< CAN_IF_T::DATAA1: DATA1 Mask */ + +#define CAN_IF_DAT_A1_DATA0_Pos 0 /*!< CAN_IF_T::DATAA1: DATA0 Position */ +#define CAN_IF_DAT_A1_DATA0_Msk (0xFFul << CAN_IF_DAT_A1_DATA0_Pos) /*!< CAN_IF_T::DATAA1: DATA0 Mask */ + +/* CAN IFn_DATA_A2 Bit Field Definitions */ +#define CAN_IF_DAT_A2_DATA3_Pos 8 /*!< CAN_IF_T::DATAA1: DATA3 Position */ +#define CAN_IF_DAT_A2_DATA3_Msk (0xFFul << CAN_IF_DAT_A2_DATA3_Pos) /*!< CAN_IF_T::DATAA1: DATA3 Mask */ + +#define CAN_IF_DAT_A2_DATA2_Pos 0 /*!< CAN_IF_T::DATAA1: DATA2 Position */ +#define CAN_IF_DAT_A2_DATA2_Msk (0xFFul << CAN_IF_DAT_A2_DATA2_Pos) /*!< CAN_IF_T::DATAA1: DATA2 Mask */ + +/* CAN IFn_DATA_B1 Bit Field Definitions */ +#define CAN_IF_DAT_B1_DATA5_Pos 8 /*!< CAN_IF_T::DATAB1: DATA5 Position */ +#define CAN_IF_DAT_B1_DATA5_Msk (0xFFul << CAN_IF_DAT_B1_DATA5_Pos) /*!< CAN_IF_T::DATAB1: DATA5 Mask */ + +#define CAN_IF_DAT_B1_DATA4_Pos 0 /*!< CAN_IF_T::DATAB1: DATA4 Position */ +#define CAN_IF_DAT_B1_DATA4_Msk (0xFFul << CAN_IF_DAT_B1_DATA4_Pos) /*!< CAN_IF_T::DATAB1: DATA4 Mask */ + +/* CAN IFn_DATA_B2 Bit Field Definitions */ +#define CAN_IF_DAT_B2_DATA7_Pos 8 /*!< CAN_IF_T::DATAB2: DATA7 Position */ +#define CAN_IF_DAT_B2_DATA7_Msk (0xFFul << CAN_IF_DAT_B2_DATA7_Pos) /*!< CAN_IF_T::DATAB2: DATA7 Mask */ + +#define CAN_IF_DAT_B2_DATA6_Pos 0 /*!< CAN_IF_T::DATAB2: DATA6 Position */ +#define CAN_IF_DAT_B2_DATA6_Msk (0xFFul << CAN_IF_DAT_B2_DATA6_Pos) /*!< CAN_IF_T::DATAB2: DATA6 Mask */ + +/* CAN IFn_TXRQST1 Bit Field Definitions */ +#define CAN_TXRQST1_TXRQST_Pos 0 /*!< CAN_T::TXRQST1: TXRQST Position */ +#define CAN_TXRQST1_TXRQST_Msk (0xFFFFul << CAN_TXRQST1_TXRQST_Pos) /*!< CAN_T::TXRQST1: TXRQST Mask */ + +/* CAN IFn_TXRQST2 Bit Field Definitions */ +#define CAN_TXRQST2_TXRQST_Pos 0 /*!< CAN_T::TXRQST2: TXRQST Position */ +#define CAN_TXRQST2_TXRQST_Msk (0xFFFFul << CAN_TXRQST2_TXRQST_Pos) /*!< CAN_T::TXRQST2: TXRQST Mask */ + +/* CAN IFn_NDAT1 Bit Field Definitions */ +#define CAN_NDAT1_NEWDATA_Pos 0 /*!< CAN_T::NDAT1: NEWDATA Position */ +#define CAN_NDAT1_NEWDATA_Msk (0xFFFFul << CAN_NDAT1_NEWDATA_Pos) /*!< CAN_T::NDAT1: NEWDATA Mask */ + +/* CAN IFn_NDAT2 Bit Field Definitions */ +#define CAN_NDAT2_NEWDATA_Pos 0 /*!< CAN_T::NDAT2: NEWDATA Position */ +#define CAN_NDAT2_NEWDATA_Msk (0xFFFFul << CAN_NDAT2_NEWDATA_Pos) /*!< CAN_T::NDAT2: NEWDATA Mask */ + +/* CAN IFn_IPND1 Bit Field Definitions */ +#define CAN_IPND1_INTPND_Pos 0 /*!< CAN_T::IPND1: INTPND Position */ +#define CAN_IPND1_INTPND_Msk (0xFFFFul << CAN_IPND1_INTPND_Pos) /*!< CAN_T::IPND1: INTPND Mask */ + +/* CAN IFn_IPND2 Bit Field Definitions */ +#define CAN_IPND2_INTPND_Pos 0 /*!< CAN_T::IPND2: INTPND Position */ +#define CAN_IPND2_INTPND_Msk (0xFFFFul << CAN_IPND2_INTPND_Pos) /*!< CAN_T::IPND2: INTPND Mask */ + +/* CAN IFn_MVLD1 Bit Field Definitions */ +#define CAN_MVLD1_MSGVAL_Pos 0 /*!< CAN_T::MVLD1: MSGVAL Position */ +#define CAN_MVLD1_MSGVAL_Msk (0xFFFFul << CAN_MVLD1_MSGVAL_Pos) /*!< CAN_T::MVLD1: MSGVAL Mask */ + +/* CAN IFn_MVLD2 Bit Field Definitions */ +#define CAN_MVLD2_MSGVAL_Pos 0 /*!< CAN_T::MVLD2: MSGVAL Position */ +#define CAN_MVLD2_MSGVAL_Msk (0xFFFFul << CAN_MVLD2_MSGVAL_Pos) /*!< CAN_T::MVLD2: MSGVAL Mask */ + +/* CAN WUEN Bit Field Definitions */ +#define CAN_WUEN_WAKUP_EN_Pos 0 /*!< CAN_T::WU_EN: WAKUP_EN Position */ +#define CAN_WUEN_WAKUP_EN_Msk (0x1ul << CAN_WUEN_WAKUP_EN_Pos) /*!< CAN_T::WU_EN: WAKUP_EN Mask */ + +/* CAN WUSTATUS Bit Field Definitions */ +#define CAN_WUSTATUS_WAKUP_STS_Pos 0 /*!< CAN_T::WU_STATUS: WAKUP_STS Position */ +#define CAN_WUSTATUS_WAKUP_STS_Msk (0x1ul << CAN_WUSTATUS_WAKUP_STS_Pos) /*!< CAN_T::WU_STATUS: WAKUP_STS Mask */ + + +/**@}*/ /* CAN_CONST */ +/**@}*/ /* end of CAN register group */ + + +/*---------------------- System Clock Controller -------------------------*/ +/** + @addtogroup CLK System Clock Controller(CLK) + Memory Mapped Structure for CLK Controller +@{ */ + + +typedef struct +{ + + + + +/** + * @var CLK_T::PWRCTL + * Offset: 0x00 System Power-down Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |HXTEN |External 4~24 MHz High-Speed Crystal Enable Bit (Write Protect) + * | | |The bit default value is set by flash controller user configuration register CONFIG0 [26:24]. + * | | |When the default clock source is from external 4~24 MHz high-speed crystal, this bit is set to 1 automatically. + * | | |0 = External 4 ~ 24 MHz high speed crystal oscillator (HXT) Disabled. + * | | |1 = External 4 MH~ 24 z high speed crystal oscillator (HXT) Enabled. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[1] |LXTEN |External 32.768 KHz Low-Speed Crystal Enable Bit (Write Protect) + * | | |0 = External 32.768 kHz low-speed crystal oscillator (LXT) Disabled. + * | | |1 = External 32.768 kHz low-speed crystal oscillator (LXT) Enabled. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[2] |HIRCEN |Internal 22.1184 MHz High-Speed Oscillator Enable Bit (Write Protect) + * | | |0 = Internal 22.1184 MHz high-speed RC oscillator (HIRC) Disabled. + * | | |1 = Internal 22.1184 MHz high-speed RC oscillator (HIRC) Enabled. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[3] |LIRCEN |Internal 10 KHz Low-Speed Oscillator Enable Bit (Write Protect) + * | | |0 = Internal 10 kHz low speed RC oscillator (LIRC) Disabled. + * | | |1 = Internal 10 kHz low speed RC oscillator (LIRC) Enabled. + * |[4] |PDWKDLY |Enable The Wake-Up Delay Counter (Write Protect) + * | | |When the chip wakes up from Power-down mode, the clock control will delay certain clock cycles to wait system clock stable. + * | | |The delayed clock cycle is 4096 clock cycles when chip work at external 4~24 MHz high-speed crystal, and 256 clock cycles when chip work at internal 22.1184 MHz high-speed oscillator. + * | | |0 = Clock cycles delay Disabled. + * | | |1 = Clock cycles delay Enabled. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[5] |PDWKIEN |Power-Down Mode Wake-Up Interrupt Enable Bit (Write Protect) + * | | |0 = Power-down Mode Wake-up Interrupt Disabled. + * | | |1 = Power-down Mode Wake-up Interrupt Enabled. + * | | |Note1: The interrupt will occur when both PDWKIF and PDWKIEN are high. + * | | |Note2: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[6] |PDWKIF |Power-Down Mode Wake-Up Interrupt Status + * | | |Set by "Power-down wake-up event", it indicates that resume from Power-down mode + * | | |The flag is set if the EINT0~5, GPIO, USBH, USBD, OTG, UART0~3, WDT, CAN0, ACMP01, BOD, RTC, TMR0~3, I2C0~1 or TK wake-up occurred. + * | | |Note1: Write 1 to clear the bit to 0. + * | | |Note2: This bit works only if PDWKIEN (CLK_PWRCTL[5]) set to 1. + * |[7] |PDEN |System Power-Down Enable (Write Protect) + * | | |When this bit is set to 1, Power-down mode is enabled and chip Power-down behavior will depend on the PDWTCPU bit. + * | | |(a) If the PDWTCPU is 0, then the chip enters Power-down mode immediately after the PDEN bit set.(default) + * | | |(b) if the PDWTCPU is 1, then the chip keeps active till the CPU sleep mode is also active and then the chip enters Power-down mode. + * | | |When chip wakes up from Power-down mode, this bit is auto cleared. + * | | |Users need to set this bit again for next Power-down. + * | | |In Power-down mode, external 4~24 MHz high-speed crystal and the internal 22.1184 MHz high-speed oscillator will be disabled in this mode, but the external 32.768 kHz low-speed crystal and internal 10 kHz low-speed oscillator are not controlled by Power-down mode. + * | | |In Power-down mode, the PLL and system clock are disabled, and ignored the clock source selection. + * | | |The clocks of peripheral are not controlled by Power-down mode, if the peripheral clock source is from external 32.768 kHz low-speed crystal or the internal 10 kHz low-speed oscillator. + * | | |0 = Chip operating normally or chip in idle mode because of WFI command. + * | | |1 = Chip enters Power-down mode instant or wait CPU sleep command WFI. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[8] |PDWTCPU |This Bit Control The Power-Down Entry Condition (Write Protect) + * | | |0 = Chip enters Power-down mode when the PDEN bit is set to 1. + * | | |1 = Chip enters Power-down mode when the both PDWTCPU and PDEN bits are set to 1 and CPU run WFI instruction. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[11:10] |HXTGAIN |4~24 MHz High-Speed Crystal Gain Control Bit + * | | |(Write Protect) + * | | |This is a protected register. Please refer to open lock sequence to program it. + * | | |Gain control is used to enlarge the gain of crystal to make sure crystal work normally. + * | | |If gain control is enabled, crystal will consume more power than gain control off. + * | | |00 = HXT frequency is lower than from 8 MHz. + * | | |01 = HXT frequency is from 8 MHz to 12 MHz. + * | | |10 = HXT frequency is from 12 MHz to 16 MHz. + * | | |11 = HXT frequency is higher than 16 MHz. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[12] |HXTSELTYP |4~24 MHz High-Speed Crystal Type Select Bit (Write Protect) + * | | |This is a protected register. Please refer to open lock sequence to program it. + * | | |0 = Select INV type. + * | | |1 = Select GM type. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * @var CLK_T::AHBCLK + * Offset: 0x04 AHB Devices Clock Enable Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[1] |PDMACKEN |PDMA Controller Clock Enable Bit + * | | |0 = PDMA peripheral clock Disabled. + * | | |1 = PDMA peripheral clock Enabled. + * |[2] |ISPCKEN |Flash ISP Controller Clock Enable Bit + * | | |0 = Flash ISP peripheral clock Disabled. + * | | |1 = Flash ISP peripheral clock Enabled. + * |[3] |EBICKEN |EBI Controller Clock Enable Bit + * | | |0 = EBI peripheral clock Disabled. + * | | |1 = EBI peripheral clock Enabled. + * |[4] |USBHCKEN |USB HOST Controller Clock Enable Bit + * | | |0 = USB HOST peripheral clock Disabled. + * | | |1 = USB HOST peripheral clock Enabled. + * |[7] |CRCCKEN |CRC Generator Controller Clock Enable Bit + * | | |0 = CRC peripheral clock Disabled. + * | | |1 = CRC peripheral clock Enabled. + * |[15] |FMCIDLE |Flash Memory Controller Clock Enable Bit In IDLE Mode + * | | |0 = FMC peripheral clock Disabled when chip operating at IDLE mode. + * | | |1 = FMC peripheral clock Enabled when chip operating at IDLE mode. + * @var CLK_T::APBCLK0 + * Offset: 0x08 APB Devices Clock Enable Control Register 0 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |WDTCKEN |Watchdog Timer Clock Enable Bit (Write Protect) + * | | |0 = Watchdog Timer Clock Disabled. + * | | |1 = Watchdog Timer Clock Enabled. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[1] |RTCCKEN |Real-Time-Clock APB Interface Clock Enable Bit + * | | |This bit is used to control the RTC APB clock only. + * | | |The RTC peripheral clock source is selected from RTCSEL(CLK_CLKSEL3[8]). + * | | |It can be selected to external 32.768 kHz low speed crystal or internal 10 kHz low speed oscillator. + * | | |0 = RTC Clock Disabled. + * | | |1 = RTC Clock Enabled. + * |[2] |TMR0CKEN |Timer0 Clock Enable Bit + * | | |0 = Timer0 Clock Disabled. + * | | |1 = Timer0 Clock Enabled. + * |[3] |TMR1CKEN |Timer1 Clock Enable Bit + * | | |0 = Timer1 Clock Disabled. + * | | |1 = Timer1 Clock Enabled. + * |[4] |TMR2CKEN |Timer2 Clock Enable Bit + * | | |0 = Timer2 Clock Disabled. + * | | |1 = Timer2 Clock Enabled. + * |[5] |TMR3CKEN |Timer3 Clock Enable Bit + * | | |0 = Timer3 Clock Disabled. + * | | |1 = Timer3 Clock Enabled. + * |[6] |CLKOCKEN |CLKO Clock Enable Bit + * | | |0 = CLKO Clock Disabled. + * | | |1 = CLKO Clock Enabled. + * |[7] |ACMP01CKEN|Analog Comparator 0/1 Clock Enable Bit + * | | |0 = Analog Comparator 0/1 Clock Disabled. + * | | |1 = Analog Comparator 0/1 Clock Enabled. + * |[8] |I2C0CKEN |I2C0 Clock Enable Bit + * | | |0 = I2C0 Clock Disabled. + * | | |1 = I2C0 Clock Enabled. + * |[9] |I2C1CKEN |I2C1 Clock Enable Bit + * | | |0 = I2C1 Clock Disabled. + * | | |1 = I2C1 Clock Enabled. + * |[12] |SPI0CKEN |SPI0 Clock Enable Bit + * | | |0 = SPI0 Clock Disabled. + * | | |1 = SPI0 Clock Enabled. + * |[13] |SPI1CKEN |SPI1 Clock Enable Bit + * | | |0 = SPI1 Clock Disabled. + * | | |1 = SPI1 Clock Enabled. + * |[14] |SPI2CKEN |SPI2 Clock Enable Bit + * | | |0 = SPI2 Clock Disabled. + * | | |1 = SPI2 Clock Enabled. + * |[16] |UART0CKEN |UART0 Clock Enable Bit + * | | |0 = UART0 clock Disabled. + * | | |1 = UART0 clock Enabled. + * |[17] |UART1CKEN |UART1 Clock Enable Bit + * | | |0 = UART1 clock Disabled. + * | | |1 = UART1 clock Enabled. + * |[18] |UART2CKEN |UART2 Clock Enable Bit + * | | |0 = UART2 clock Disabled. + * | | |1 = UART2 clock Enabled. + * |[19] |UART3CKEN |UART3 Clock Enable Bit + * | | |0 = UART3 clock Disabled. + * | | |1 = UART3 clock Enabled. + * |[24] |CAN0CKEN |CAN0 Clock Enable Bit + * | | |0 = CAN0 clock Disabled. + * | | |1 = CAN0 clock Enabled. + * |[26] |OTGCKEN |USB OTG Clock Enable Bit + * | | |0 = USB OTG clock Disabled. + * | | |1 = USB OTG clock Enabled. + * |[27] |USBDCKEN |USB Device Clock Enable Bit + * | | |0 = USB Device clock Disabled. + * | | |1 = USB Device clock Enabled. + * |[28] |EADCCKEN |Enhanced Analog-Digital-Converter (EADC) Clock Enable Bit + * | | |0 = EADC clock Disabled. + * | | |1 = EADC clock Enabled. + * @var CLK_T::APBCLK1 + * Offset: 0x0C APB Devices Clock Enable Control Register 1 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |SC0CKEN |SC0 Clock Enable Bit + * | | |0 = SC0 Clock Disabled. + * | | |1 = SC0 Clock Enabled. + * |[12] |DACCKEN |DAC Clock Enable Bit + * | | |0 = DAC Clock Disabled. + * | | |1 = DAC Clock Enabled. + * |[16] |PWM0CKEN |PWM0 Clock Enable Bit + * | | |0 = PWM0 Clock Disabled. + * | | |1 = PWM0 Clock Enabled. + * |[17] |PWM1CKEN |PWM1 Clock Enable Bit + * | | |0 = PWM1 Clock Disabled. + * | | |1 = PWM1 Clock Enabled. + * |[25] |TKCKEN |Touch Key Clock Enable Bit + * | | |0 = Touch Key Clock Disabled. + * | | |1 = Touch key Clock Enabled. + * @var CLK_T::CLKSEL0 + * Offset: 0x10 Clock Source Select Control Register 0 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[2:0] |HCLKSEL |HCLK Clock Source Selection (Write Protect) + * | | |Before clock switching, the related clock sources (both pre-select and new-select) must be turned on. + * | | |The default value is reloaded from the value of CFOSC (CONFIG0[26:24]) in user configuration register of Flash controller by any reset. + * | | |Therefore the default value is either 000b or 111b. + * | | |000 = Clock source from external 4~24 MHz high-speed crystal clock. + * | | |001 = Clock source from external 32.768 kHz low-speed crystal clock. + * | | |010 = Clock source from PLL clock. + * | | |011 = Clock source from internal 10 kHz low-speed oscillator clock. + * | | |111= Clock source from internal 22.1184 MHz high-speed oscillator clock. + * | | |Other = Reserved. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[5:3] |STCLKSEL |Cortex-M4 SysTick Clock Source Selection (Write Protect) + * | | |If SYST_CTRL[2]=0, SysTick uses listed clock source below. + * | | |000 = Clock source from external 4~24 MHz high-speed crystal clock. + * | | |001 = Clock source from external 32.768 kHz low-speed crystal clock. + * | | |010 = Clock source from external 4~24 MHz high-speed crystal clock/2. + * | | |011 = Clock source from HCLK/2. + * | | |111 = Clock source from internal 22.1184 MHz high-speed oscillator clock/2. + * | | |Note: if SysTick clock source is not from HCLK (i.e. + * | | |SYST_CTRL[2] = 0), SysTick clock source must less than or equal to HCLK/2. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[6] |PCLK0SEL |PCLK0 Clock Source Selection (Write Protect) + * | | |0 = APB0 BUS clock source from HCLK. + * | | |1 = APB0 BUS clock source from HCLK/2. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[7] |PCLK1SEL |PCLK1 Clock Source Selection (Write Protect) + * | | |0 = APB1 BUS clock source from HCLK. + * | | |1 = APB1 BUS clock source from HCLK/2. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * @var CLK_T::CLKSEL1 + * Offset: 0x14 Clock Source Select Control Register 1 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[1:0] |WDTSEL |Watchdog Timer Clock Source Selection (Write Protect) + * | | |00 = Reserved. + * | | |01 = Clock source from external 32.768 kHz low-speed crystal clock. + * | | |10 = Clock source from PCLK0/2048 clock. + * | | |11 = Clock source from internal 10 kHz low-speed oscillator clock. + * |[10:8] |TMR0SEL |TIMER0 Clock Source Selection + * | | |000 = Clock source from external 4~24 MHz high-speed crystal clock. + * | | |001 = Clock source from external 32.768 kHz low-speed crystal clock. + * | | |010 = Clock source from PCLK0. + * | | |011 = Clock source from external clock T0 pin + * | | |101 = Clock source from internal 10 kHz low-speed oscillator clock. + * | | |111 = Clock source from internal 22.1184 MHz high-speed oscillator clock. + * | | |Others = Reserved. + * |[14:12] |TMR1SEL |TIMER1 Clock Source Selection + * | | |000 = Clock source from external 4~24 MHz high-speed crystal clock. + * | | |001 = Clock source from external 32.768 kHz low-speed crystal clock. + * | | |010 = Clock source from PCLK0. + * | | |011 = Clock source from external clock T1 pin + * | | |101 = Clock source from internal 10 kHz low-speed oscillator clock. + * | | |111 = Clock source from internal 22.1184 MHz high-speed oscillator clock. + * | | |Others = Reserved. + * |[18:16] |TMR2SEL |TIMER2 Clock Source Selection + * | | |000 = Clock source from external 4~24 MHz high-speed crystal clock. + * | | |001 = Clock source from external 32.768 kHz low-speed crystal clock. + * | | |010 = Clock source from PCLK1. + * | | |011 = Clock source from external clock T2 pin + * | | |101 = Clock source from internal 10 kHz low-speed oscillator clock. + * | | |111 = Clock source from internal 22.1184 MHz high-speed oscillator clock. + * | | |Others = Reserved. + * |[22:20] |TMR3SEL |TIMER3 Clock Source Selection + * | | |000 = Clock source from external 4~24 MHz high-speed crystal clock. + * | | |001 = Clock source from external 32.768 kHz low-speed crystal clock. + * | | |010 = Clock source from PCLK1. + * | | |011 = Clock source from external clock T3 pin. + * | | |101 = Clock source from internal 10 kHz low-speed oscillator clock. + * | | |111 = Clock source from internal 22.1184 MHz high-speed oscillator clock. + * | | |Others = Reserved. + * |[25:24] |UARTSEL |UART Clock Source Selection + * | | |00 = Clock source from external 4~24 MHz high-speed crystal clock (HXT). + * | | |01 = Clock source from PLL clock. + * | | |10 = Clock source from 32.768 kHz external low speed crystal oscillator (LXT). + * | | |11 = Clock source from internal 22.1184 MHz high-speed oscillator clock (HIRC). + * |[29:28] |CLKOSEL |Clock Divider Clock Source Selection + * | | |00 = Clock source from external 4~24 MHz high-speed crystal clock. + * | | |01 = Clock source from external 32.768 kHz low-speed crystal clock. + * | | |10 = Clock source from HCLK. + * | | |11 = Clock source from internal 22.1184 MHz high-speed oscillator clock. + * |[31:30] |WWDTSEL |Window Watchdog Timer Clock Source Selection + * | | |10 = Clock source from PCLK0/2048 clock. + * | | |11 = Clock source from internal 10 kHz low-speed oscillator clock. + * | | |Others = Reserved. + * @var CLK_T::CLKSEL2 + * Offset: 0x18 Clock Source Select Control Register 2 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |PWM0SEL |PWM0 Clock Source Selection + * | | |The peripheral clock source of PWM0 is defined by PWM0SEL. + * | | |0 = Clock source from PLL clock. + * | | |1 = Clock source from PCLK0. + * |[1] |PWM1SEL |PWM1 Clock Source Selection + * | | |The peripheral clock source of PWM1 is defined by PWM1SEL. + * | | |0 = Clock source from PLL clock. + * | | |1 = Clock source from PCLK1. + * |[3:2] |SPI0SEL |SPI0 Clock Source Selection + * | | |00 = Clock source from external 4~24 MHz high speed crystal oscillator clock. + * | | |01 = Clock source from PLL clock. + * | | |10 = Clock source from PCLK0. + * | | |11 = Clock source from internal 22.1184 MHz high speed oscillator clock. + * |[5:4] |SPI1SEL |SPI1 Clock Source Selection + * | | |00 = Clock source from external 4~24 MHz high speed crystal oscillator clock. + * | | |01 = Clock source from PLL clock. + * | | |10 = Clock source from PCLK1. + * | | |11 = Clock source from internal 22.1184 MHz high speed oscillator clock. + * |[7:6] |SPI2SEL |SPI2 Clock Source Selection + * | | |00 = Clock source from external 4~24 MHz high speed crystal oscillator clock. + * | | |01 = Clock source from PLL clock. + * | | |10 = Clock source from PCLK0. + * | | |11 = Clock source from internal 22.1184 MHz high speed oscillator clock. + * @var CLK_T::CLKSEL3 + * Offset: 0x1C Clock Source Select Control Register 3 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[1:0] |SC0SEL |SC0 Clock Source Selection + * | | |00 = Clock source from external 4~24 MHz high-speed crystal clock. + * | | |01 = Clock source from PLL clock. + * | | |10 = Clock source from PCLK0. + * | | |11 = Clock source from internal 22.1184 MHz high-speed oscillator clock. + * |[8] |RTCSEL |RTC Clock Source Selection + * | | |0 = Clock source from external 32.768 kHz low-speed oscillator. + * | | |1 = Clock source from internal 10 kHz low speed RC oscillator. + * @var CLK_T::CLKDIV0 + * Offset: 0x20 Clock Divider Number Register 0 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[3:0] |HCLKDIV |HCLK Clock Divide Number From HCLK Clock Source + * | | |HCLK clock frequency = (HCLK clock source frequency) / (HCLKDIV + 1). + * |[7:4] |USBDIV |USB Clock Divide Number From PLL Clock + * | | |USB clock frequency = (PLL frequency) / (USBDIV + 1). + * |[11:8] |UARTDIV |UART Clock Divide Number From UART Clock Source + * | | |UART clock frequency = (UART clock source frequency) / (UARTDIV + 1). + * |[23:16] |EADCDIV |EADC Clock Divide Number From EADC Clock Source + * | | |EADC clock frequency = (EADC clock source frequency) / (EADCDIV + 1). + * @var CLK_T::CLKDIV1 + * Offset: 0x24 Clock Divider Number Register 1 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |SC0DIV |SC0 Clock Divide Number From SC0 Clock Source + * | | |SC0 clock frequency = (SC0 clock source frequency ) / (SC0DIV + 1). + * @var CLK_T::PLLCTL + * Offset: 0x40 PLL Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[8:0] |FBDIV |PLL Feedback Divider Control Pins (Write Protect) + * | | |Refer to the formulas below the table. + * |[13:9] |INDIV |PLL Input Divider Control Pins (Write Protect) + * | | |Refer to the formulas below the table. + * |[15:14] |OUTDIV |PLL Output Divider Control Pins (Write Protect) + * | | |Refer to the formulas below the table. + * |[16] |PD |Power-Down Mode (Write Protect) + * | | |If set the PDEN bit to 1 in CLK_PWRCTL register, the PLL will enter Power-down mode, too. + * | | |0 = PLL is in normal mode. + * | | |1 = PLL is in Power-down mode (default). + * |[17] |BP |PLL Bypass Control (Write Protect) + * | | |0 = PLL is in normal mode (default). + * | | |1 = PLL clock output is same as PLL input clock FIN. + * |[18] |OE |PLL OE (FOUT Enable) Pin Control (Write Protect) + * | | |0 = PLL FOUT Enabled. + * | | |1 = PLL FOUT is fixed low. + * |[19] |PLLSRC |PLL Source Clock Selection (Write Protect) + * | | |0 = PLL source clock from external 4~24 MHz high-speed crystal (HXT). + * | | |1 = PLL source clock from internal 22.1184 MHz high-speed oscillator (HIRC). + * |[23] |STBSEL |PLL Stable Counter Selection (Write Protect) + * | | |0 = PLL stable time is 6144 PLL source clock (suitable for source clock is equal to or less than 12MHz). + * | | |1 = PLL stable time is 12288 PLL source clock (suitable for source clock is larger than 12MHz). + * @var CLK_T::STATUS + * Offset: 0x50 Clock Status Monitor Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |HXTSTB |External 4~24 MHz High-Speed Crystal Clock Source Stable Flag (Read Only) + * | | |0 = External 4~24 MHz high-speed crystal clock is not stable or disabled. + * | | |1 = External 4~24 MHz high-speed crystal clock is stable and enabled. + * |[1] |LXTSTB |External 32.768 kHz Low-Speed Crystal Clock Source Stable Flag (Read Only) + * | | |0 = External 32.768 kHz low-speed crystal clock is not stable or disabled. + * | | |1 = External 32.768 kHz low-speed crystal clock is stabled and enabled. + * |[2] |PLLSTB |Internal PLL Clock Source Stable Flag (Read Only) + * | | |0 = Internal PLL clock is not stable or disabled. + * | | |1 = Internal PLL clock is stable and enabled. + * |[3] |LIRCSTB |Internal 10 KHz Low-Speed Oscillator Clock Source Stable Flag (Read Only) + * | | |0 = Internal 10 kHz low-speed oscillator clock is not stable or disabled. + * | | |1 = Internal 10 kHz low-speed oscillator clock is stable and enabled. + * |[4] |HIRCSTB |Internal 22.1184 MHz High-Speed Oscillator Clock Source Stable Flag (Read Only) + * | | |0 = Internal 22.1184 MHz high-speed oscillator clock is not stable or disabled. + * | | |1 = Internal 22.1184 MHz high-speed oscillator clock is stable and enabled. + * |[7] |CLKSFAIL |Clock Switching Fail Flag (Read Only) + * | | |This bit is updated when software switches system clock source. + * | | |If switch target clock is stable, this bit will be set to 0. + * | | |If switch target clock is not stable, this bit will be set to 1. + * | | |0 = Clock switching success. + * | | |1 = Clock switching failure. + * | | |Note: Write 1 to clear the bit to 0. + * @var CLK_T::CLKOCTL + * Offset: 0x60 Clock Output Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[3:0] |FREQSEL |Clock Output Frequency Selection + * | | |The formula of output frequency is + * | | |Fout = Fin/2(N+1). + * | | |Fin is the input clock frequency. + * | | |Fout is the frequency of divider output clock. + * | | |N is the 4-bit value of FREQSEL[3:0]. + * |[4] |CLKOEN |Clock Output Enable Bit + * | | |0 =Clock Output function Disabled. + * | | |1 = Clock Output function Enabled. + * |[5] |DIV1EN |Clock Output Divide One Enable Bit + * | | |0 = Clock Output will output clock with source frequency divided by FREQSEL. + * | | |1 = Clock Output will output clock with source frequency. + * |[6] |CLK1HZEN |Clock Output 1Hz Enable Bit + * | | |0 = 1 Hz clock output for 32.768kHz frequency compensation Disabled. + * | | |1 = 1 Hz clock output for 332.768kHz frequency compensation Enabled. + * @var CLK_T::CLKDCTL + * Offset: 0x70 Clock Fail Detector Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[4] |HXTFDEN |HXT Clock Fail Detector Enable Bit + * | | |0 = HXT clock Fail detector Disabled. + * | | |1 = HXT clock Fail detector Enabled. + * |[5] |HXTFIEN |HXT Clock Fail Interrupt Enable Bit + * | | |0 = HXT clock Fail interrupt Disabled. + * | | |1 = HXT clock Fail interrupt Enabled. + * |[12] |LXTFDEN |LXT Clock Fail Detector Enable Bit + * | | |0 = LXT clock Fail detector Disabled. + * | | |1 = LXT clock Fail detector Enabled. + * |[13] |LXTFIEN |LXT Clock Fail Interrupt Enable Bit + * | | |0 = LXT clock Fail interrupt Disabled. + * | | |1 = LXT clock Fail interrupt Enabled. + * |[16] |HXTFQDEN |HXT Clock Frequency Monitor Enable Bit + * | | |0 = HXT clock frequency monitor Disabled. + * | | |1 = HXT clock frequency monitor Enabled. + * |[17] |HXTFQIEN |HXT Clock Frequency Monitor Interrupt Enable Bit + * | | |0 = HXT clock frequency monitor fail interrupt Disabled. + * | | |1 = HXT clock frequency monitor fail interrupt Enabled. + * @var CLK_T::CLKDSTS + * Offset: 0x74 Clock Fail Detector Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |HXTFIF |HXT Clock Fail Interrupt Flag + * | | |0 = HXT clock normal. + * | | |1 = HXT clock stop + * | | |Note: Write 1 to clear the bit to 0. + * |[1] |LXTFIF |LXT Clock Fail Interrupt Flag + * | | |0 = LXT clock normal. + * | | |1 = LXT stop + * | | |Note: Write 1 to clear the bit to 0. + * |[8] |HXTFQIF |HXT Clock Frequency Monitor Interrupt Flag + * | | |0 = HXT clock normal. + * | | |1 = HXT clock frequency abnormal + * | | |Note: Write 1 to clear the bit to 0. + * @var CLK_T::CDUPB + * Offset: 0x78 Clock Frequency Detector Upper Boundary Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[9:0] |UPERBD |HXT Clock Frequency Detector Upper Boundary + * | | |The bits define the high value of frequency monitor window. + * | | |When HXT frequency monitor value higher than this register, the HXT frequency detect fail interrupt flag will set to 1. + * @var CLK_T::CDLOWB + * Offset: 0x7C Clock Frequency Detector Low Boundary Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[9:0] |LOWERBD |HXT Clock Frequency Detector Low Boundary + * | | |The bits define the low value of frequency monitor window. + * | | |When HXT frequency monitor value lower than this register, the HXT frequency detect fail interrupt flag will set to 1. + */ + + __IO uint32_t PWRCTL; /* Offset: 0x00 System Power-down Control Register */ + __IO uint32_t AHBCLK; /* Offset: 0x04 AHB Devices Clock Enable Control Register */ + __IO uint32_t APBCLK0; /* Offset: 0x08 APB Devices Clock Enable Control Register 0 */ + __IO uint32_t APBCLK1; /* Offset: 0x0C APB Devices Clock Enable Control Register 1 */ + __IO uint32_t CLKSEL0; /* Offset: 0x10 Clock Source Select Control Register 0 */ + __IO uint32_t CLKSEL1; /* Offset: 0x14 Clock Source Select Control Register 1 */ + __IO uint32_t CLKSEL2; /* Offset: 0x18 Clock Source Select Control Register 2 */ + __IO uint32_t CLKSEL3; /* Offset: 0x1C Clock Source Select Control Register 3 */ + __IO uint32_t CLKDIV0; /* Offset: 0x20 Clock Divider Number Register 0 */ + __IO uint32_t CLKDIV1; /* Offset: 0x24 Clock Divider Number Register 1 */ + __I uint32_t RESERVE0[6]; + __IO uint32_t PLLCTL; /* Offset: 0x40 PLL Control Register */ + __I uint32_t RESERVE1[3]; + __I uint32_t STATUS; /* Offset: 0x50 Clock Status Monitor Register */ + __I uint32_t RESERVE2[3]; + __IO uint32_t CLKOCTL; /* Offset: 0x60 Clock Output Control Register */ + __I uint32_t RESERVE3[3]; + __IO uint32_t CLKDCTL; /* Offset: 0x70 Clock Fail Detector Control Register */ + __IO uint32_t CLKDSTS; /* Offset: 0x74 Clock Fail Detector Status Register */ + __IO uint32_t CDUPB; /* Offset: 0x78 Clock Frequency Detector Upper Boundary Register */ + __IO uint32_t CDLOWB; /* Offset: 0x7C Clock Frequency Detector Low Boundary Register */ + +} CLK_T; + + + +/** + @addtogroup CLK_CONST CLK Bit Field Definition + Constant Definitions for CLK Controller +@{ */ + +#define CLK_PWRCTL_HXTEN_Pos (0) /*!< CLK_T::PWRCTL: HXTEN Position */ +#define CLK_PWRCTL_HXTEN_Msk (0x1ul << CLK_PWRCTL_HXTEN_Pos) /*!< CLK_T::PWRCTL: HXTEN Mask */ + +#define CLK_PWRCTL_LXTEN_Pos (1) /*!< CLK_T::PWRCTL: LXTEN Position */ +#define CLK_PWRCTL_LXTEN_Msk (0x1ul << CLK_PWRCTL_LXTEN_Pos) /*!< CLK_T::PWRCTL: LXTEN Mask */ + +#define CLK_PWRCTL_HIRCEN_Pos (2) /*!< CLK_T::PWRCTL: HIRCEN Position */ +#define CLK_PWRCTL_HIRCEN_Msk (0x1ul << CLK_PWRCTL_HIRCEN_Pos) /*!< CLK_T::PWRCTL: HIRCEN Mask */ + +#define CLK_PWRCTL_LIRCEN_Pos (3) /*!< CLK_T::PWRCTL: LIRCEN Position */ +#define CLK_PWRCTL_LIRCEN_Msk (0x1ul << CLK_PWRCTL_LIRCEN_Pos) /*!< CLK_T::PWRCTL: LIRCEN Mask */ + +#define CLK_PWRCTL_PDWKDLY_Pos (4) /*!< CLK_T::PWRCTL: PDWKDLY Position */ +#define CLK_PWRCTL_PDWKDLY_Msk (0x1ul << CLK_PWRCTL_PDWKDLY_Pos) /*!< CLK_T::PWRCTL: PDWKDLY Mask */ + +#define CLK_PWRCTL_PDWKIEN_Pos (5) /*!< CLK_T::PWRCTL: PDWKIEN Position */ +#define CLK_PWRCTL_PDWKIEN_Msk (0x1ul << CLK_PWRCTL_PDWKIEN_Pos) /*!< CLK_T::PWRCTL: PDWKIEN Mask */ + +#define CLK_PWRCTL_PDWKIF_Pos (6) /*!< CLK_T::PWRCTL: PDWKIF Position */ +#define CLK_PWRCTL_PDWKIF_Msk (0x1ul << CLK_PWRCTL_PDWKIF_Pos) /*!< CLK_T::PWRCTL: PDWKIF Mask */ + +#define CLK_PWRCTL_PDEN_Pos (7) /*!< CLK_T::PWRCTL: PDEN Position */ +#define CLK_PWRCTL_PDEN_Msk (0x1ul << CLK_PWRCTL_PDEN_Pos) /*!< CLK_T::PWRCTL: PDEN Mask */ + +#define CLK_PWRCTL_PDWTCPU_Pos (8) /*!< CLK_T::PWRCTL: PDWTCPU Position */ +#define CLK_PWRCTL_PDWTCPU_Msk (0x1ul << CLK_PWRCTL_PDWTCPU_Pos) /*!< CLK_T::PWRCTL: PDWTCPU Mask */ + +#define CLK_PWRCTL_HXTGAIN_Pos (10) /*!< CLK_T::PWRCTL: HXTGAIN Position */ +#define CLK_PWRCTL_HXTGAIN_Msk (0x3ul << CLK_PWRCTL_HXTGAIN_Pos) /*!< CLK_T::PWRCTL: HXTGAIN Mask */ + +#define CLK_PWRCTL_HXTSELTYP_Pos (12) /*!< CLK_T::PWRCTL: HXTSELTYP Position */ +#define CLK_PWRCTL_HXTSELTYP_Msk (0x1ul << CLK_PWRCTL_HXTSELTYP_Pos) /*!< CLK_T::PWRCTL: HXTSELTYP Mask */ + +#define CLK_AHBCLK_PDMACKEN_Pos (1) /*!< CLK_T::AHBCLK: PDMACKEN Position */ +#define CLK_AHBCLK_PDMACKEN_Msk (0x1ul << CLK_AHBCLK_PDMACKEN_Pos) /*!< CLK_T::AHBCLK: PDMACKEN Mask */ + +#define CLK_AHBCLK_ISPCKEN_Pos (2) /*!< CLK_T::AHBCLK: ISPCKEN Position */ +#define CLK_AHBCLK_ISPCKEN_Msk (0x1ul << CLK_AHBCLK_ISPCKEN_Pos) /*!< CLK_T::AHBCLK: ISPCKEN Mask */ + +#define CLK_AHBCLK_EBICKEN_Pos (3) /*!< CLK_T::AHBCLK: EBICKEN Position */ +#define CLK_AHBCLK_EBICKEN_Msk (0x1ul << CLK_AHBCLK_EBICKEN_Pos) /*!< CLK_T::AHBCLK: EBICKEN Mask */ + +#define CLK_AHBCLK_USBHCKEN_Pos (4) /*!< CLK_T::AHBCLK: USBHCKEN Position */ +#define CLK_AHBCLK_USBHCKEN_Msk (0x1ul << CLK_AHBCLK_USBHCKEN_Pos) /*!< CLK_T::AHBCLK: USBHCKEN Mask */ + +#define CLK_AHBCLK_CRCCKEN_Pos (7) /*!< CLK_T::AHBCLK: CRCCKEN Position */ +#define CLK_AHBCLK_CRCCKEN_Msk (0x1ul << CLK_AHBCLK_CRCCKEN_Pos) /*!< CLK_T::AHBCLK: CRCCKEN Mask */ + +#define CLK_AHBCLK_FMCIDLE_Pos (15) /*!< CLK_T::AHBCLK: FMCIDLE Position */ +#define CLK_AHBCLK_FMCIDLE_Msk (0x1ul << CLK_AHBCLK_FMCIDLE_Pos) /*!< CLK_T::AHBCLK: FMCIDLE Mask */ + +#define CLK_APBCLK0_WDTCKEN_Pos (0) /*!< CLK_T::APBCLK0: WDTCKEN Position */ +#define CLK_APBCLK0_WDTCKEN_Msk (0x1ul << CLK_APBCLK0_WDTCKEN_Pos) /*!< CLK_T::APBCLK0: WDTCKEN Mask */ + +#define CLK_APBCLK0_RTCCKEN_Pos (1) /*!< CLK_T::APBCLK0: RTCCKEN Position */ +#define CLK_APBCLK0_RTCCKEN_Msk (0x1ul << CLK_APBCLK0_RTCCKEN_Pos) /*!< CLK_T::APBCLK0: RTCCKEN Mask */ + +#define CLK_APBCLK0_TMR0CKEN_Pos (2) /*!< CLK_T::APBCLK0: TMR0CKEN Position */ +#define CLK_APBCLK0_TMR0CKEN_Msk (0x1ul << CLK_APBCLK0_TMR0CKEN_Pos) /*!< CLK_T::APBCLK0: TMR0CKEN Mask */ + +#define CLK_APBCLK0_TMR1CKEN_Pos (3) /*!< CLK_T::APBCLK0: TMR1CKEN Position */ +#define CLK_APBCLK0_TMR1CKEN_Msk (0x1ul << CLK_APBCLK0_TMR1CKEN_Pos) /*!< CLK_T::APBCLK0: TMR1CKEN Mask */ + +#define CLK_APBCLK0_TMR2CKEN_Pos (4) /*!< CLK_T::APBCLK0: TMR2CKEN Position */ +#define CLK_APBCLK0_TMR2CKEN_Msk (0x1ul << CLK_APBCLK0_TMR2CKEN_Pos) /*!< CLK_T::APBCLK0: TMR2CKEN Mask */ + +#define CLK_APBCLK0_TMR3CKEN_Pos (5) /*!< CLK_T::APBCLK0: TMR3CKEN Position */ +#define CLK_APBCLK0_TMR3CKEN_Msk (0x1ul << CLK_APBCLK0_TMR3CKEN_Pos) /*!< CLK_T::APBCLK0: TMR3CKEN Mask */ + +#define CLK_APBCLK0_CLKOCKEN_Pos (6) /*!< CLK_T::APBCLK0: CLKOCKEN Position */ +#define CLK_APBCLK0_CLKOCKEN_Msk (0x1ul << CLK_APBCLK0_CLKOCKEN_Pos) /*!< CLK_T::APBCLK0: CLKOCKEN Mask */ + +#define CLK_APBCLK0_ACMP01CKEN_Pos (7) /*!< CLK_T::APBCLK0: ACMP01CKEN Position */ +#define CLK_APBCLK0_ACMP01CKEN_Msk (0x1ul << CLK_APBCLK0_ACMP01CKEN_Pos) /*!< CLK_T::APBCLK0: ACMP01CKEN Mask */ + +#define CLK_APBCLK0_I2C0CKEN_Pos (8) /*!< CLK_T::APBCLK0: I2C0CKEN Position */ +#define CLK_APBCLK0_I2C0CKEN_Msk (0x1ul << CLK_APBCLK0_I2C0CKEN_Pos) /*!< CLK_T::APBCLK0: I2C0CKEN Mask */ + +#define CLK_APBCLK0_I2C1CKEN_Pos (9) /*!< CLK_T::APBCLK0: I2C1CKEN Position */ +#define CLK_APBCLK0_I2C1CKEN_Msk (0x1ul << CLK_APBCLK0_I2C1CKEN_Pos) /*!< CLK_T::APBCLK0: I2C1CKEN Mask */ + +#define CLK_APBCLK0_SPI0CKEN_Pos (12) /*!< CLK_T::APBCLK0: SPI0CKEN Position */ +#define CLK_APBCLK0_SPI0CKEN_Msk (0x1ul << CLK_APBCLK0_SPI0CKEN_Pos) /*!< CLK_T::APBCLK0: SPI0CKEN Mask */ + +#define CLK_APBCLK0_SPI1CKEN_Pos (13) /*!< CLK_T::APBCLK0: SPI1CKEN Position */ +#define CLK_APBCLK0_SPI1CKEN_Msk (0x1ul << CLK_APBCLK0_SPI1CKEN_Pos) /*!< CLK_T::APBCLK0: SPI1CKEN Mask */ + +#define CLK_APBCLK0_SPI2CKEN_Pos (14) /*!< CLK_T::APBCLK0: SPI2CKEN Position */ +#define CLK_APBCLK0_SPI2CKEN_Msk (0x1ul << CLK_APBCLK0_SPI2CKEN_Pos) /*!< CLK_T::APBCLK0: SPI2CKEN Mask */ + +#define CLK_APBCLK0_UART0CKEN_Pos (16) /*!< CLK_T::APBCLK0: UART0CKEN Position */ +#define CLK_APBCLK0_UART0CKEN_Msk (0x1ul << CLK_APBCLK0_UART0CKEN_Pos) /*!< CLK_T::APBCLK0: UART0CKEN Mask */ + +#define CLK_APBCLK0_UART1CKEN_Pos (17) /*!< CLK_T::APBCLK0: UART1CKEN Position */ +#define CLK_APBCLK0_UART1CKEN_Msk (0x1ul << CLK_APBCLK0_UART1CKEN_Pos) /*!< CLK_T::APBCLK0: UART1CKEN Mask */ + +#define CLK_APBCLK0_UART2CKEN_Pos (18) /*!< CLK_T::APBCLK0: UART2CKEN Position */ +#define CLK_APBCLK0_UART2CKEN_Msk (0x1ul << CLK_APBCLK0_UART2CKEN_Pos) /*!< CLK_T::APBCLK0: UART2CKEN Mask */ + +#define CLK_APBCLK0_UART3CKEN_Pos (19) /*!< CLK_T::APBCLK0: UART3CKEN Position */ +#define CLK_APBCLK0_UART3CKEN_Msk (0x1ul << CLK_APBCLK0_UART3CKEN_Pos) /*!< CLK_T::APBCLK0: UART3CKEN Mask */ + +#define CLK_APBCLK0_CAN0CKEN_Pos (24) /*!< CLK_T::APBCLK0: CAN0CKEN Position */ +#define CLK_APBCLK0_CAN0CKEN_Msk (0x1ul << CLK_APBCLK0_CAN0CKEN_Pos) /*!< CLK_T::APBCLK0: CAN0CKEN Mask */ + +#define CLK_APBCLK0_OTGCKEN_Pos (26) /*!< CLK_T::APBCLK0: OTGCKEN Position */ +#define CLK_APBCLK0_OTGCKEN_Msk (0x1ul << CLK_APBCLK0_OTGCKEN_Pos) /*!< CLK_T::APBCLK0: OTGCKEN Mask */ + +#define CLK_APBCLK0_USBDCKEN_Pos (27) /*!< CLK_T::APBCLK0: USBDCKEN Position */ +#define CLK_APBCLK0_USBDCKEN_Msk (0x1ul << CLK_APBCLK0_USBDCKEN_Pos) /*!< CLK_T::APBCLK0: USBDCKEN Mask */ + +#define CLK_APBCLK0_EADCCKEN_Pos (28) /*!< CLK_T::APBCLK0: EADCCKEN Position */ +#define CLK_APBCLK0_EADCCKEN_Msk (0x1ul << CLK_APBCLK0_EADCCKEN_Pos) /*!< CLK_T::APBCLK0: EADCCKEN Mask */ + +#define CLK_APBCLK1_SC0CKEN_Pos (0) /*!< CLK_T::APBCLK1: SC0CKEN Position */ +#define CLK_APBCLK1_SC0CKEN_Msk (0x1ul << CLK_APBCLK1_SC0CKEN_Pos) /*!< CLK_T::APBCLK1: SC0CKEN Mask */ + +#define CLK_APBCLK1_DACCKEN_Pos (12) /*!< CLK_T::APBCLK1: DACCKEN Position */ +#define CLK_APBCLK1_DACCKEN_Msk (0x1ul << CLK_APBCLK1_DACCKEN_Pos) /*!< CLK_T::APBCLK1: DACCKEN Mask */ + +#define CLK_APBCLK1_PWM0CKEN_Pos (16) /*!< CLK_T::APBCLK1: PWM0CKEN Position */ +#define CLK_APBCLK1_PWM0CKEN_Msk (0x1ul << CLK_APBCLK1_PWM0CKEN_Pos) /*!< CLK_T::APBCLK1: PWM0CKEN Mask */ + +#define CLK_APBCLK1_PWM1CKEN_Pos (17) /*!< CLK_T::APBCLK1: PWM1CKEN Position */ +#define CLK_APBCLK1_PWM1CKEN_Msk (0x1ul << CLK_APBCLK1_PWM1CKEN_Pos) /*!< CLK_T::APBCLK1: PWM1CKEN Mask */ + +#define CLK_APBCLK1_TKCKEN_Pos (25) /*!< CLK_T::APBCLK1: TKCKEN Position */ +#define CLK_APBCLK1_TKCKEN_Msk (0x1ul << CLK_APBCLK1_TKCKEN_Pos) /*!< CLK_T::APBCLK1: TKCKEN Mask */ + +#define CLK_CLKSEL0_HCLKSEL_Pos (0) /*!< CLK_T::CLKSEL0: HCLKSEL Position */ +#define CLK_CLKSEL0_HCLKSEL_Msk (0x7ul << CLK_CLKSEL0_HCLKSEL_Pos) /*!< CLK_T::CLKSEL0: HCLKSEL Mask */ + +#define CLK_CLKSEL0_STCLKSEL_Pos (3) /*!< CLK_T::CLKSEL0: STCLKSEL Position */ +#define CLK_CLKSEL0_STCLKSEL_Msk (0x7ul << CLK_CLKSEL0_STCLKSEL_Pos) /*!< CLK_T::CLKSEL0: STCLKSEL Mask */ + +#define CLK_CLKSEL0_PCLK0SEL_Pos (6) /*!< CLK_T::CLKSEL0: PCLK0SEL Position */ +#define CLK_CLKSEL0_PCLK0SEL_Msk (0x1ul << CLK_CLKSEL0_PCLK0SEL_Pos) /*!< CLK_T::CLKSEL0: PCLK0SEL Mask */ + +#define CLK_CLKSEL0_PCLK1SEL_Pos (7) /*!< CLK_T::CLKSEL0: PCLK1SEL Position */ +#define CLK_CLKSEL0_PCLK1SEL_Msk (0x1ul << CLK_CLKSEL0_PCLK1SEL_Pos) /*!< CLK_T::CLKSEL0: PCLK1SEL Mask */ + +#define CLK_CLKSEL1_WDTSEL_Pos (0) /*!< CLK_T::CLKSEL1: WDTSEL Position */ +#define CLK_CLKSEL1_WDTSEL_Msk (0x3ul << CLK_CLKSEL1_WDTSEL_Pos) /*!< CLK_T::CLKSEL1: WDTSEL Mask */ + +#define CLK_CLKSEL1_TMR0SEL_Pos (8) /*!< CLK_T::CLKSEL1: TMR0SEL Position */ +#define CLK_CLKSEL1_TMR0SEL_Msk (0x7ul << CLK_CLKSEL1_TMR0SEL_Pos) /*!< CLK_T::CLKSEL1: TMR0SEL Mask */ + +#define CLK_CLKSEL1_TMR1SEL_Pos (12) /*!< CLK_T::CLKSEL1: TMR1SEL Position */ +#define CLK_CLKSEL1_TMR1SEL_Msk (0x7ul << CLK_CLKSEL1_TMR1SEL_Pos) /*!< CLK_T::CLKSEL1: TMR1SEL Mask */ + +#define CLK_CLKSEL1_TMR2SEL_Pos (16) /*!< CLK_T::CLKSEL1: TMR2SEL Position */ +#define CLK_CLKSEL1_TMR2SEL_Msk (0x7ul << CLK_CLKSEL1_TMR2SEL_Pos) /*!< CLK_T::CLKSEL1: TMR2SEL Mask */ + +#define CLK_CLKSEL1_TMR3SEL_Pos (20) /*!< CLK_T::CLKSEL1: TMR3SEL Position */ +#define CLK_CLKSEL1_TMR3SEL_Msk (0x7ul << CLK_CLKSEL1_TMR3SEL_Pos) /*!< CLK_T::CLKSEL1: TMR3SEL Mask */ + +#define CLK_CLKSEL1_UARTSEL_Pos (24) /*!< CLK_T::CLKSEL1: UARTSEL Position */ +#define CLK_CLKSEL1_UARTSEL_Msk (0x3ul << CLK_CLKSEL1_UARTSEL_Pos) /*!< CLK_T::CLKSEL1: UARTSEL Mask */ + +#define CLK_CLKSEL1_CLKOSEL_Pos (28) /*!< CLK_T::CLKSEL1: CLKOSEL Position */ +#define CLK_CLKSEL1_CLKOSEL_Msk (0x3ul << CLK_CLKSEL1_CLKOSEL_Pos) /*!< CLK_T::CLKSEL1: CLKOSEL Mask */ + +#define CLK_CLKSEL1_WWDTSEL_Pos (30) /*!< CLK_T::CLKSEL1: WWDTSEL Position */ +#define CLK_CLKSEL1_WWDTSEL_Msk (0x3ul << CLK_CLKSEL1_WWDTSEL_Pos) /*!< CLK_T::CLKSEL1: WWDTSEL Mask */ + +#define CLK_CLKSEL2_PWM0SEL_Pos (0) /*!< CLK_T::CLKSEL2: PWM0SEL Position */ +#define CLK_CLKSEL2_PWM0SEL_Msk (0x1ul << CLK_CLKSEL2_PWM0SEL_Pos) /*!< CLK_T::CLKSEL2: PWM0SEL Mask */ + +#define CLK_CLKSEL2_PWM1SEL_Pos (1) /*!< CLK_T::CLKSEL2: PWM1SEL Position */ +#define CLK_CLKSEL2_PWM1SEL_Msk (0x1ul << CLK_CLKSEL2_PWM1SEL_Pos) /*!< CLK_T::CLKSEL2: PWM1SEL Mask */ + +#define CLK_CLKSEL2_SPI0SEL_Pos (2) /*!< CLK_T::CLKSEL2: SPI0SEL Position */ +#define CLK_CLKSEL2_SPI0SEL_Msk (0x3ul << CLK_CLKSEL2_SPI0SEL_Pos) /*!< CLK_T::CLKSEL2: SPI0SEL Mask */ + +#define CLK_CLKSEL2_SPI1SEL_Pos (4) /*!< CLK_T::CLKSEL2: SPI1SEL Position */ +#define CLK_CLKSEL2_SPI1SEL_Msk (0x3ul << CLK_CLKSEL2_SPI1SEL_Pos) /*!< CLK_T::CLKSEL2: SPI1SEL Mask */ + +#define CLK_CLKSEL2_SPI2SEL_Pos (6) /*!< CLK_T::CLKSEL2: SPI2SEL Position */ +#define CLK_CLKSEL2_SPI2SEL_Msk (0x3ul << CLK_CLKSEL2_SPI2SEL_Pos) /*!< CLK_T::CLKSEL2: SPI2SEL Mask */ + +#define CLK_CLKSEL3_SC0SEL_Pos (0) /*!< CLK_T::CLKSEL3: SC0SEL Position */ +#define CLK_CLKSEL3_SC0SEL_Msk (0x3ul << CLK_CLKSEL3_SC0SEL_Pos) /*!< CLK_T::CLKSEL3: SC0SEL Mask */ + +#define CLK_CLKSEL3_RTCSEL_Pos (8) /*!< CLK_T::CLKSEL3: RTCSEL Position */ +#define CLK_CLKSEL3_RTCSEL_Msk (0x1ul << CLK_CLKSEL3_RTCSEL_Pos) /*!< CLK_T::CLKSEL3: RTCSEL Mask */ + +#define CLK_CLKDIV0_HCLKDIV_Pos (0) /*!< CLK_T::CLKDIV0: HCLKDIV Position */ +#define CLK_CLKDIV0_HCLKDIV_Msk (0xful << CLK_CLKDIV0_HCLKDIV_Pos) /*!< CLK_T::CLKDIV0: HCLKDIV Mask */ + +#define CLK_CLKDIV0_USBDIV_Pos (4) /*!< CLK_T::CLKDIV0: USBDIV Position */ +#define CLK_CLKDIV0_USBDIV_Msk (0xful << CLK_CLKDIV0_USBDIV_Pos) /*!< CLK_T::CLKDIV0: USBDIV Mask */ + +#define CLK_CLKDIV0_UARTDIV_Pos (8) /*!< CLK_T::CLKDIV0: UARTDIV Position */ +#define CLK_CLKDIV0_UARTDIV_Msk (0xful << CLK_CLKDIV0_UARTDIV_Pos) /*!< CLK_T::CLKDIV0: UARTDIV Mask */ + +#define CLK_CLKDIV0_EADCDIV_Pos (16) /*!< CLK_T::CLKDIV0: EADCDIV Position */ +#define CLK_CLKDIV0_EADCDIV_Msk (0xfful << CLK_CLKDIV0_EADCDIV_Pos) /*!< CLK_T::CLKDIV0: EADCDIV Mask */ + +#define CLK_CLKDIV1_SC0DIV_Pos (0) /*!< CLK_T::CLKDIV1: SC0DIV Position */ +#define CLK_CLKDIV1_SC0DIV_Msk (0xfful << CLK_CLKDIV1_SC0DIV_Pos) /*!< CLK_T::CLKDIV1: SC0DIV Mask */ + +#define CLK_PLLCTL_FBDIV_Pos (0) /*!< CLK_T::PLLCTL: FBDIV Position */ +#define CLK_PLLCTL_FBDIV_Msk (0x1fful << CLK_PLLCTL_FBDIV_Pos) /*!< CLK_T::PLLCTL: FBDIV Mask */ + +#define CLK_PLLCTL_INDIV_Pos (9) /*!< CLK_T::PLLCTL: INDIV Position */ +#define CLK_PLLCTL_INDIV_Msk (0x1ful << CLK_PLLCTL_INDIV_Pos) /*!< CLK_T::PLLCTL: INDIV Mask */ + +#define CLK_PLLCTL_OUTDIV_Pos (14) /*!< CLK_T::PLLCTL: OUTDIV Position */ +#define CLK_PLLCTL_OUTDIV_Msk (0x3ul << CLK_PLLCTL_OUTDIV_Pos) /*!< CLK_T::PLLCTL: OUTDIV Mask */ + +#define CLK_PLLCTL_PD_Pos (16) /*!< CLK_T::PLLCTL: PD Position */ +#define CLK_PLLCTL_PD_Msk (0x1ul << CLK_PLLCTL_PD_Pos) /*!< CLK_T::PLLCTL: PD Mask */ + +#define CLK_PLLCTL_BP_Pos (17) /*!< CLK_T::PLLCTL: BP Position */ +#define CLK_PLLCTL_BP_Msk (0x1ul << CLK_PLLCTL_BP_Pos) /*!< CLK_T::PLLCTL: BP Mask */ + +#define CLK_PLLCTL_OE_Pos (18) /*!< CLK_T::PLLCTL: OE Position */ +#define CLK_PLLCTL_OE_Msk (0x1ul << CLK_PLLCTL_OE_Pos) /*!< CLK_T::PLLCTL: OE Mask */ + +#define CLK_PLLCTL_PLLSRC_Pos (19) /*!< CLK_T::PLLCTL: PLLSRC Position */ +#define CLK_PLLCTL_PLLSRC_Msk (0x1ul << CLK_PLLCTL_PLLSRC_Pos) /*!< CLK_T::PLLCTL: PLLSRC Mask */ + +#define CLK_PLLCTL_STBSEL_Pos (23) /*!< CLK_T::PLLCTL: STBSEL Position */ +#define CLK_PLLCTL_STBSEL_Msk (0x1ul << CLK_PLLCTL_STBSEL_Pos) /*!< CLK_T::PLLCTL: STBSEL Mask */ + +#define CLK_STATUS_HXTSTB_Pos (0) /*!< CLK_T::STATUS: HXTSTB Position */ +#define CLK_STATUS_HXTSTB_Msk (0x1ul << CLK_STATUS_HXTSTB_Pos) /*!< CLK_T::STATUS: HXTSTB Mask */ + +#define CLK_STATUS_LXTSTB_Pos (1) /*!< CLK_T::STATUS: LXTSTB Position */ +#define CLK_STATUS_LXTSTB_Msk (0x1ul << CLK_STATUS_LXTSTB_Pos) /*!< CLK_T::STATUS: LXTSTB Mask */ + +#define CLK_STATUS_PLLSTB_Pos (2) /*!< CLK_T::STATUS: PLLSTB Position */ +#define CLK_STATUS_PLLSTB_Msk (0x1ul << CLK_STATUS_PLLSTB_Pos) /*!< CLK_T::STATUS: PLLSTB Mask */ + +#define CLK_STATUS_LIRCSTB_Pos (3) /*!< CLK_T::STATUS: LIRCSTB Position */ +#define CLK_STATUS_LIRCSTB_Msk (0x1ul << CLK_STATUS_LIRCSTB_Pos) /*!< CLK_T::STATUS: LIRCSTB Mask */ + +#define CLK_STATUS_HIRCSTB_Pos (4) /*!< CLK_T::STATUS: HIRCSTB Position */ +#define CLK_STATUS_HIRCSTB_Msk (0x1ul << CLK_STATUS_HIRCSTB_Pos) /*!< CLK_T::STATUS: HIRCSTB Mask */ + +#define CLK_STATUS_CLKSFAIL_Pos (7) /*!< CLK_T::STATUS: CLKSFAIL Position */ +#define CLK_STATUS_CLKSFAIL_Msk (0x1ul << CLK_STATUS_CLKSFAIL_Pos) /*!< CLK_T::STATUS: CLKSFAIL Mask */ + +#define CLK_CLKOCTL_FREQSEL_Pos (0) /*!< CLK_T::CLKOCTL: FREQSEL Position */ +#define CLK_CLKOCTL_FREQSEL_Msk (0xful << CLK_CLKOCTL_FREQSEL_Pos) /*!< CLK_T::CLKOCTL: FREQSEL Mask */ + +#define CLK_CLKOCTL_CLKOEN_Pos (4) /*!< CLK_T::CLKOCTL: CLKOEN Position */ +#define CLK_CLKOCTL_CLKOEN_Msk (0x1ul << CLK_CLKOCTL_CLKOEN_Pos) /*!< CLK_T::CLKOCTL: CLKOEN Mask */ + +#define CLK_CLKOCTL_DIV1EN_Pos (5) /*!< CLK_T::CLKOCTL: DIV1EN Position */ +#define CLK_CLKOCTL_DIV1EN_Msk (0x1ul << CLK_CLKOCTL_DIV1EN_Pos) /*!< CLK_T::CLKOCTL: DIV1EN Mask */ + +#define CLK_CLKOCTL_CLK1HZEN_Pos (6) /*!< CLK_T::CLKOCTL: CLK1HZEN Position */ +#define CLK_CLKOCTL_CLK1HZEN_Msk (0x1ul << CLK_CLKOCTL_CLK1HZEN_Pos) /*!< CLK_T::CLKOCTL: CLK1HZEN Mask */ + +#define CLK_CLKDCTL_HXTFDEN_Pos (4) /*!< CLK_T::CLKDCTL: HXTFDEN Position */ +#define CLK_CLKDCTL_HXTFDEN_Msk (0x1ul << CLK_CLKDCTL_HXTFDEN_Pos) /*!< CLK_T::CLKDCTL: HXTFDEN Mask */ + +#define CLK_CLKDCTL_HXTFIEN_Pos (5) /*!< CLK_T::CLKDCTL: HXTFIEN Position */ +#define CLK_CLKDCTL_HXTFIEN_Msk (0x1ul << CLK_CLKDCTL_HXTFIEN_Pos) /*!< CLK_T::CLKDCTL: HXTFIEN Mask */ + +#define CLK_CLKDCTL_LXTFDEN_Pos (12) /*!< CLK_T::CLKDCTL: LXTFDEN Position */ +#define CLK_CLKDCTL_LXTFDEN_Msk (0x1ul << CLK_CLKDCTL_LXTFDEN_Pos) /*!< CLK_T::CLKDCTL: LXTFDEN Mask */ + +#define CLK_CLKDCTL_LXTFIEN_Pos (13) /*!< CLK_T::CLKDCTL: LXTFIEN Position */ +#define CLK_CLKDCTL_LXTFIEN_Msk (0x1ul << CLK_CLKDCTL_LXTFIEN_Pos) /*!< CLK_T::CLKDCTL: LXTFIEN Mask */ + +#define CLK_CLKDCTL_HXTFQDEN_Pos (16) /*!< CLK_T::CLKDCTL: HXTFQDEN Position */ +#define CLK_CLKDCTL_HXTFQDEN_Msk (0x1ul << CLK_CLKDCTL_HXTFQDEN_Pos) /*!< CLK_T::CLKDCTL: HXTFQDEN Mask */ + +#define CLK_CLKDCTL_HXTFQIEN_Pos (17) /*!< CLK_T::CLKDCTL: HXTFQIEN Position */ +#define CLK_CLKDCTL_HXTFQIEN_Msk (0x1ul << CLK_CLKDCTL_HXTFQIEN_Pos) /*!< CLK_T::CLKDCTL: HXTFQIEN Mask */ + +#define CLK_CLKDSTS_HXTFIF_Pos (0) /*!< CLK_T::CLKDSTS: HXTFIF Position */ +#define CLK_CLKDSTS_HXTFIF_Msk (0x1ul << CLK_CLKDSTS_HXTFIF_Pos) /*!< CLK_T::CLKDSTS: HXTFIF Mask */ + +#define CLK_CLKDSTS_LXTFIF_Pos (1) /*!< CLK_T::CLKDSTS: LXTFIF Position */ +#define CLK_CLKDSTS_LXTFIF_Msk (0x1ul << CLK_CLKDSTS_LXTFIF_Pos) /*!< CLK_T::CLKDSTS: LXTFIF Mask */ + +#define CLK_CLKDSTS_HXTFQIF_Pos (8) /*!< CLK_T::CLKDSTS: HXTFQIF Position */ +#define CLK_CLKDSTS_HXTFQIF_Msk (0x1ul << CLK_CLKDSTS_HXTFQIF_Pos) /*!< CLK_T::CLKDSTS: HXTFQIF Mask */ + +#define CLK_CDUPB_UPERBD_Pos (0) /*!< CLK_T::CDUPB: UPERBD Position */ +#define CLK_CDUPB_UPERBD_Msk (0x3fful << CLK_CDUPB_UPERBD_Pos) /*!< CLK_T::CDUPB: UPERBD Mask */ + +#define CLK_CDLOWB_LOWERBD_Pos (0) /*!< CLK_T::CDLOWB: LOWERBD Position */ +#define CLK_CDLOWB_LOWERBD_Msk (0x3fful << CLK_CDLOWB_LOWERBD_Pos) /*!< CLK_T::CDLOWB: LOWERBD Mask */ + + +/**@}*/ /* CLK_CONST */ +/**@}*/ /* end of CLK register group */ + + + +/*---------------------- Cyclic Redundancy Check Controller -------------------------*/ +/** + @addtogroup CRC Cyclic Redundancy Check Controller(CRC) + Memory Mapped Structure for CRC Controller +@{ */ + + +typedef struct +{ + + + + +/** + * @var CRC_T::CTL + * Offset: 0x00 CRC Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |CRCEN |CRC Channel Enable Bit + * | | |0 = No effect. + * | | |1 = CRC operation Enabled. + * |[1] |CRCRST |CRC Engine Reset + * | | |0 = No effect. + * | | |1 = Reset the internal CRC state machine and internal buffer. + * | | |The others contents of CRC_CTL register will not be cleared. + * | | |Note1: This bit will be cleared automatically. + * | | |Note2: Setting this bit will reload the initial seed value (CRC_SEED register). + * |[24] |DATREV |Write Data Bit Order Reverse + * | | |This bit is used to enable the bit order reverse function for write data value in CRC_DAT register. + * | | |0 = Bit order reversed for CRC write data in Disabled. + * | | |1 = Bit order reversed for CRC write data in Enabled (per byte). + * | | |Note: If the write data is 0xAABBCCDD, the bit order reverse for CRC write data in is 0x55DD33BB. + * |[25] |CHKSREV |Checksum Bit Order Reverse + * | | |This bit is used to enable the bit order reverse function for write data value in CRC_CHECKSUM register. + * | | |0 = Bit order reverse for CRC checksum Disabled. + * | | |1 = Bit order reverse for CRC checksum Enabled. + * | | |Note: If the checksum result is 0xDD7B0F2E, the bit order reverse for CRC checksum is 0x74F0DEBB. + * |[26] |DATFMT |Write Data 1's Complement + * | | |This bit is used to enable the 1's complement function for write data value in CRC_DAT register. + * | | |0 = 1's complement for CRC writes data in Disabled. + * | | |1 = 1's complement for CRC writes data in Enabled. + * |[27] |CHKSFMT |Checksum 1's Complement + * | | |This bit is used to enable the 1's complement function for checksum result in CRC_CHECKSUM register. + * | | |0 = 1's complement for CRC checksum Disabled. + * | | |1 = 1's complement for CRC checksum Enabled. + * |[29:28] |DATLEN |CPU Write Data Length + * | | |This field indicates the write data length. + * | | |00 = Data length is 8-bit mode. + * | | |01 = Data length is 16-bit mode. + * | | |1x = Data length is 32-bit mode. + * | | |Note: When the write data length is 8-bit mode, the valid data in CRC_DAT register is only DATA[7:0] bits; if the write data length is 16-bit mode, the valid data in CRC_DAT register is only DATA[15:0] + * |[31:30] |CRCMODE |CRC Polynomial Mode + * | | |This field indicates the CRC operation polynomial mode. + * | | |00 = CRC-CCITT Polynomial mode. + * | | |01 = CRC-8 Polynomial mode. + * | | |10 = CRC-16 Polynomial mode. + * | | |11 = CRC-32 Polynomial mode. + * @var CRC_T::DAT + * Offset: 0x04 CRC Write Data Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:0] |DATA |CRC Write Data Bits + * | | |User can write data directly by CPU mode or use PDMA function to write data to this field to perform CRC operation. + * | | |Note: When the write data length is 8-bit mode, the valid data in CRC_DAT register is only DATA[7:0] bits; if the write data length is 16-bit mode, the valid data in CRC_DAT register is only DATA[15:0]. + * @var CRC_T::SEED + * Offset: 0x08 CRC Seed Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:0] |SEED |CRC Seed Value + * | | |This field indicates the CRC seed value. + * @var CRC_T::CHECKSUM + * Offset: 0x0C CRC Checksum Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:0] |CHECKSUM |CRC Checksum Results + * | | |This field indicates the CRC checksum result. + */ + + __IO uint32_t CTL; /* Offset: 0x00 CRC Control Register */ + __IO uint32_t DAT; /* Offset: 0x04 CRC Write Data Register */ + __IO uint32_t SEED; /* Offset: 0x08 CRC Seed Register */ + __I uint32_t CHECKSUM; /* Offset: 0x0C CRC Checksum Register */ + +} CRC_T; + + + +/** + @addtogroup CRC_CONST CRC Bit Field Definition + Constant Definitions for CRC Controller +@{ */ + +#define CRC_CTL_CRCEN_Pos (0) /*!< CRC_T::CTL: CRCEN Position */ +#define CRC_CTL_CRCEN_Msk (0x1ul << CRC_CTL_CRCEN_Pos) /*!< CRC_T::CTL: CRCEN Mask */ + +#define CRC_CTL_CRCRST_Pos (1) /*!< CRC_T::CTL: CRCRST Position */ +#define CRC_CTL_CRCRST_Msk (0x1ul << CRC_CTL_CRCRST_Pos) /*!< CRC_T::CTL: CRCRST Mask */ + +#define CRC_CTL_DATREV_Pos (24) /*!< CRC_T::CTL: DATREV Position */ +#define CRC_CTL_DATREV_Msk (0x1ul << CRC_CTL_DATREV_Pos) /*!< CRC_T::CTL: DATREV Mask */ + +#define CRC_CTL_CHKSREV_Pos (25) /*!< CRC_T::CTL: CHKSREV Position */ +#define CRC_CTL_CHKSREV_Msk (0x1ul << CRC_CTL_CHKSREV_Pos) /*!< CRC_T::CTL: CHKSREV Mask */ + +#define CRC_CTL_DATFMT_Pos (26) /*!< CRC_T::CTL: DATFMT Position */ +#define CRC_CTL_DATFMT_Msk (0x1ul << CRC_CTL_DATFMT_Pos) /*!< CRC_T::CTL: DATFMT Mask */ + +#define CRC_CTL_CHKSFMT_Pos (27) /*!< CRC_T::CTL: CHKSFMT Position */ +#define CRC_CTL_CHKSFMT_Msk (0x1ul << CRC_CTL_CHKSFMT_Pos) /*!< CRC_T::CTL: CHKSFMT Mask */ + +#define CRC_CTL_DATLEN_Pos (28) /*!< CRC_T::CTL: DATLEN Position */ +#define CRC_CTL_DATLEN_Msk (0x3ul << CRC_CTL_DATLEN_Pos) /*!< CRC_T::CTL: DATLEN Mask */ + +#define CRC_CTL_CRCMODE_Pos (30) /*!< CRC_T::CTL: CRCMODE Position */ +#define CRC_CTL_CRCMODE_Msk (0x3ul << CRC_CTL_CRCMODE_Pos) /*!< CRC_T::CTL: CRCMODE Mask */ + +#define CRC_DAT_DATA_Pos (0) /*!< CRC_T::DAT: DATA Position */ +#define CRC_DAT_DATA_Msk (0xfffffffful << CRC_DAT_DATA_Pos) /*!< CRC_T::DAT: DATA Mask */ + +#define CRC_SEED_SEED_Pos (0) /*!< CRC_T::SEED: SEED Position */ +#define CRC_SEED_SEED_Msk (0xfffffffful << CRC_SEED_SEED_Pos) /*!< CRC_T::SEED: SEED Mask */ + +#define CRC_CHECKSUM_CHECKSUM_Pos (0) /*!< CRC_T::CHECKSUM: CHECKSUM Position */ +#define CRC_CHECKSUM_CHECKSUM_Msk (0xfffffffful << CRC_CHECKSUM_CHECKSUM_Pos) /*!< CRC_T::CHECKSUM: CHECKSUM Mask */ + +/**@}*/ /* CRC_CONST */ +/**@}*/ /* end of CRC register group */ + + +/*---------------------- Digital to Analog Converter -------------------------*/ +/** + @addtogroup DAC Digital to Analog Converter(DAC) + Memory Mapped Structure for DAC Controller +@{ */ + + +typedef struct +{ + + + +/** + * @var DAC_T::CTL + * Offset: 0x00 DAC Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |DACEN |DAC Enable Bit + * | | |0 = DAC is Disabled. + * | | |1 = DAC is Enabled. + * |[1] |DACIEN |DAC Interrupt Enable Bit + * | | |0 = Interrupt is Disabled. + * | | |1 = Interrupt is Enabled. + * |[2] |DMAEN |DMA Mode Enable Bit + * | | |0 = DMA mode Disabled. + * | | |1 = DMA mode Enabled. + * |[3] |DMAURIEN |DMA Under-Run Interrupt Enable Bit + * | | |0 = DMA under run interrupt Disabled. + * | | |1 = DMA under run interrupt Enabled. + * |[4] |TRGEN |Trigger Mode Enable Bit + * | | |0 = DAC event trigger mode Disabled. + * | | |1 = DAC event trigger mode Enabled. + * |[7:5] |TRGSEL |Trigger Source Selection + * | | |000 = Software trigger. + * | | |001 = External pin STDAC trigger. + * | | |010 = Timer 0 trigger. + * | | |011 = Timer 1 trigger. + * | | |100 = Timer 2 trigger. + * | | |101 = Timer 3 trigger. + * | | |110 = PWM0 trigger. + * | | |111 = PWM1 trigger. + * |[8] |BYPASS |Bypass Buffer Mode + * | | |0 = Output voltage buffer Enabled. + * | | |1 = Output voltage buffer Disabled. + * |[10] |LALIGN |DAC Data Left-Aligned Enabled Control + * | | |0 = Right alignment. + * | | |1 = Left alignment. + * |[13:12] |ETRGSEL |External Pin Trigger Selection + * | | |00 = Low level trigger. + * | | |01 = High level trigger. + * | | |10 = Falling edge trigger. + * | | |11 = Rising edge trigger. + * @var DAC_T::SWTRG + * Offset: 0x04 DAC Software Trigger Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |SWTRG |Software Trigger + * | | |0 = Software trigger Disabled. + * | | |1 = Software trigger Enabled. + * | | |User writes this bit to generate one shot pulse and it is cleared to 0 by hardware automatically; Reading this bit will always get 0. + * @var DAC_T::DAT + * Offset: 0x08 DAC Data Holding Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |DAC_DAT |DAC 12-Bit Holding Data + * | | |These bits are written by user software which specifies 12-bit conversion data for DAC output. + * | | |The unused bits (DAC_DAT[3:0] in left-alignment mode and DAC_DAT[15:12] in right alignment mode) are ignored by DAC controller hardware. + * | | |12 bit left alignment: user has to load data into DAC_DAT[15:4] bits. + * | | |12 bit right alignment: user has to load data into DAC_DAT[11:0] bits. + * @var DAC_T::DATOUT + * Offset: 0x0C DAC Data Output Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[11:0] |DATOUT |DAC 12-Bit Output Data + * | | |These bits are current digital data for DAC output conversion. + * | | |It is loaded from DAC_DAT register and user cannot write it directly. + * @var DAC_T::STATUS + * Offset: 0x10 DAC Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |FINISH |DAC Conversion Complete Finish Flag + * | | |0 = DAC is in conversion state. + * | | |1 = DAC conversion finish. + * | | |This bit set to 1 when conversion time counter counts to SETTLET. + * | | |It is cleared to 0 when DAC starts a new conversion. + * | | |User writes 1 to clear this bit to 0. + * |[1] |DMAUDR |DMA Under Run Interrupt Flag + * | | |0 = No DMA under-run error condition occurred. + * | | |1 = DMA under-run error condition occurred. + * | | |User writes 1 to clear this bit. + * |[8] |BUSY |DAC Busy Flag (Read Only) + * | | |0 = DAC is ready for next conversion. + * | | |1 = DAC is busy in conversion. + * | | |This is read only bit. + * @var DAC_T::TCTL + * Offset: 0x14 DAC Timing Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[9:0] |SETTLET |DAC Output Settling Time + * | | |User software needs to write appropriate value to these bits to meet DAC conversion settling time base on PCLK (APB clock) speed. + * | | |For example, DAC controller clock speed is 72MHz and DAC conversion setting time is 1 us, SETTLET value must be greater than 0x48. + */ + + __IO uint32_t CTL; /* Offset: 0x00 DAC Control Register */ + __IO uint32_t SWTRG; /* Offset: 0x04 DAC Software Trigger Control Register */ + __IO uint32_t DAT; /* Offset: 0x08 DAC Data Holding Register */ + __I uint32_t DATOUT; /* Offset: 0x0C DAC Data Output Register */ + __IO uint32_t STATUS; /* Offset: 0x10 DAC Status Register */ + __IO uint32_t TCTL; /* Offset: 0x14 DAC Timing Control Register */ + +} DAC_T; + + + +/** + @addtogroup DAC_CONST DAC Bit Field Definition + Constant Definitions for DAC Controller +@{ */ + +#define DAC_CTL_DACEN_Pos (0) /*!< DAC_T::CTL: DACEN Position */ +#define DAC_CTL_DACEN_Msk (0x1ul << DAC_CTL_DACEN_Pos) /*!< DAC_T::CTL: DACEN Mask */ + +#define DAC_CTL_DACIEN_Pos (1) /*!< DAC_T::CTL: DACIEN Position */ +#define DAC_CTL_DACIEN_Msk (0x1ul << DAC_CTL_DACIEN_Pos) /*!< DAC_T::CTL: DACIEN Mask */ + +#define DAC_CTL_DMAEN_Pos (2) /*!< DAC_T::CTL: DMAEN Position */ +#define DAC_CTL_DMAEN_Msk (0x1ul << DAC_CTL_DMAEN_Pos) /*!< DAC_T::CTL: DMAEN Mask */ + +#define DAC_CTL_DMAURIEN_Pos (3) /*!< DAC_T::CTL: DMAURIEN Position */ +#define DAC_CTL_DMAURIEN_Msk (0x1ul << DAC_CTL_DMAURIEN_Pos) /*!< DAC_T::CTL: DMAURIEN Mask */ + +#define DAC_CTL_TRGEN_Pos (4) /*!< DAC_T::CTL: TRGEN Position */ +#define DAC_CTL_TRGEN_Msk (0x1ul << DAC_CTL_TRGEN_Pos) /*!< DAC_T::CTL: TRGEN Mask */ + +#define DAC_CTL_TRGSEL_Pos (5) /*!< DAC_T::CTL: TRGSEL Position */ +#define DAC_CTL_TRGSEL_Msk (0x7ul << DAC_CTL_TRGSEL_Pos) /*!< DAC_T::CTL: TRGSEL Mask */ + +#define DAC_CTL_BYPASS_Pos (8) /*!< DAC_T::CTL: BYPASS Position */ +#define DAC_CTL_BYPASS_Msk (0x1ul << DAC_CTL_BYPASS_Pos) /*!< DAC_T::CTL: BYPASS Mask */ + +#define DAC_CTL_LALIGN_Pos (10) /*!< DAC_T::CTL: LALIGN Position */ +#define DAC_CTL_LALIGN_Msk (0x1ul << DAC_CTL_LALIGN_Pos) /*!< DAC_T::CTL: LALIGN Mask */ + +#define DAC_CTL_ETRGSEL_Pos (12) /*!< DAC_T::CTL: ETRGSEL Position */ +#define DAC_CTL_ETRGSEL_Msk (0x3ul << DAC_CTL_ETRGSEL_Pos) /*!< DAC_T::CTL: ETRGSEL Mask */ + +#define DAC_SWTRG_SWTRG_Pos (0) /*!< DAC_T::SWTRG: SWTRG Position */ +#define DAC_SWTRG_SWTRG_Msk (0x1ul << DAC_SWTRG_SWTRG_Pos) /*!< DAC_T::SWTRG: SWTRG Mask */ + +#define DAC_DAT_DAC_DAT_Pos (0) /*!< DAC_T::DAT: DAC_DAT Position */ +#define DAC_DAT_DAC_DAT_Msk (0xfffful << DAC_DAT_DAC_DAT_Pos) /*!< DAC_T::DAT: DAC_DAT Mask */ + +#define DAC_DATOUT_DATOUT_Pos (0) /*!< DAC_T::DATOUT: DATOUT Position */ +#define DAC_DATOUT_DATOUT_Msk (0xffful << DAC_DATOUT_DATOUT_Pos) /*!< DAC_T::DATOUT: DATOUT Mask */ + +#define DAC_STATUS_FINISH_Pos (0) /*!< DAC_T::STATUS: FINISH Position */ +#define DAC_STATUS_FINISH_Msk (0x1ul << DAC_STATUS_FINISH_Pos) /*!< DAC_T::STATUS: FINISH Mask */ + +#define DAC_STATUS_DMAUDR_Pos (1) /*!< DAC_T::STATUS: DMAUDR Position */ +#define DAC_STATUS_DMAUDR_Msk (0x1ul << DAC_STATUS_DMAUDR_Pos) /*!< DAC_T::STATUS: DMAUDR Mask */ + +#define DAC_STATUS_BUSY_Pos (8) /*!< DAC_T::STATUS: BUSY Position */ +#define DAC_STATUS_BUSY_Msk (0x1ul << DAC_STATUS_BUSY_Pos) /*!< DAC_T::STATUS: BUSY Mask */ + +#define DAC_TCTL_SETTLET_Pos (0) /*!< DAC_T::TCTL: SETTLET Position */ +#define DAC_TCTL_SETTLET_Msk (0x3fful << DAC_TCTL_SETTLET_Pos) /*!< DAC_T::TCTL: SETTLET Mask */ + +/**@}*/ /* DAC_CONST */ +/**@}*/ /* end of DAC register group */ + + +/*---------------------- External Bus Interface Controller -------------------------*/ +/** + @addtogroup EBI External Bus Interface Controller(EBI) + Memory Mapped Structure for EBI Controller +@{ */ + + +typedef struct +{ + + + + +/** + * @var EBI_T::CTL0 + * Offset: 0x00 External Bus Interface Bank0 Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |EN |EBI Enable Bit + * | | |This bit is the functional enable bit for EBI. + * | | |0 = EBI function Disabled. + * | | |1 = EBI function Enabled. + * |[1] |DW16 |EBI Data Width 16-Bit Select + * | | |This bit defines if the EBI data width is 8-bit or 16-bit. + * | | |0 = EBI data width is 8-bit. + * | | |1 = EBI data width is 16-bit. + * |[2] |CSPOLINV |Chip Select Pin Polar Inverse + * | | |This bit defines the active level of EBI chip select pin (EBI_nCS). + * | | |0 = Chip select pin (EBI_nCS) is active low. + * | | |1 = Chip select pin (EBI_nCS) is active high. + * |[10:8] |MCLKDIV |External Output Clock Divider + * | | |The frequency of EBI output clock (MCLK) is controlled by MCLKDIV as follow: + * | | |000 = HCLK/1. + * | | |001 = HCLK/2. + * | | |010 = HCLK/4. + * | | |011 = HCLK/8. + * | | |100 = HCLK/16. + * | | |101 = HCLK/32. + * | | |110 = Reserved. + * | | |111 = Reserved. + * |[18:16] |TALE |Extend Time Of ALE + * | | |The EBI_ALE high pulse period (tALE) to latch the address can be controlled by TALE. + * | | |tALE = (TALE+1)*EBI_MCLK. + * | | |Note: This field only available in EBI_CTL0 register + * |[24] |WBUFEN |EBI Write Buffer Enable Bit + * | | |0 = EBI write buffer Disabled. + * | | |1 = EBI write buffer Enabled. + * | | |Note: This bit only available in EBI_CTL0 register + * @var EBI_T::TCTL0 + * Offset: 0x04 External Bus Interface Bank0 Timing Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:3] |TACC |EBI Data Access Time + * | | |TACC define data access time (tACC). + * | | |tACC = (TACC +1) * EBI_MCLK. + * |[10:8] |TAHD |EBI Data Access Hold Time + * | | |TAHD define data access hold time (tAHD). + * | | |tAHD = (TAHD +1) * EBI_MCLK. + * |[15:12] |W2X |Idle Cycle After Write + * | | |This field defines the number of W2X idle cycle. + * | | |W2X idle cycle = (W2X * EBI_MCLK). + * | | |When write action is finish, W2X idle cycle is inserted and EBI_nCS return to idle state. + * |[22] |RAHDOFF |Access Hold Time Disable Control When Read + * | | |0 = The Data Access Hold Time (tAHD) during EBI reading is Enabled. + * | | |1 = The Data Access Hold Time (tAHD) during EBI reading is Disabled. + * |[23] |WAHDOFF |Access Hold Time Disable Control When Write + * | | |0 = The Data Access Hold Time (tAHD) during EBI writing is Enabled. + * | | |1 = The Data Access Hold Time (tAHD) during EBI writing is Disabled. + * |[27:24] |R2R |Idle Cycle Between Read-To-Read + * | | |This field defines the number of R2R idle cycle. + * | | |R2R idle cycle = (R2R * EBI_MCLK). + * | | |When read action is finish and next action is going to read, R2R idle cycle is inserted and EBI_nCS return to idle state. + * @var EBI_T::CTL1 + * Offset: 0x10 External Bus Interface Bank1 Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |EN |EBI Enable Bit + * | | |This bit is the functional enable bit for EBI. + * | | |0 = EBI function Disabled. + * | | |1 = EBI function Enabled. + * |[1] |DW16 |EBI Data Width 16-Bit Select + * | | |This bit defines if the EBI data width is 8-bit or 16-bit. + * | | |0 = EBI data width is 8-bit. + * | | |1 = EBI data width is 16-bit. + * |[2] |CSPOLINV |Chip Select Pin Polar Inverse + * | | |This bit defines the active level of EBI chip select pin (EBI_nCS). + * | | |0 = Chip select pin (EBI_nCS) is active low. + * | | |1 = Chip select pin (EBI_nCS) is active high. + * |[10:8] |MCLKDIV |External Output Clock Divider + * | | |The frequency of EBI output clock (MCLK) is controlled by MCLKDIV as follow: + * | | |000 = HCLK/1. + * | | |001 = HCLK/2. + * | | |010 = HCLK/4. + * | | |011 = HCLK/8. + * | | |100 = HCLK/16. + * | | |101 = HCLK/32. + * | | |110 = Reserved. + * | | |111 = Reserved. + * |[18:16] |TALE |Extend Time Of ALE + * | | |The EBI_ALE high pulse period (tALE) to latch the address can be controlled by TALE. + * | | |tALE = (TALE+1)*EBI_MCLK. + * | | |Note: This field only available in EBI_CTL0 register + * |[24] |WBUFEN |EBI Write Buffer Enable Bit + * | | |0 = EBI write buffer Disabled. + * | | |1 = EBI write buffer Enabled. + * | | |Note: This bit only available in EBI_CTL0 register + * @var EBI_T::TCTL1 + * Offset: 0x14 External Bus Interface Bank1 Timing Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:3] |TACC |EBI Data Access Time + * | | |TACC define data access time (tACC). + * | | |tACC = (TACC +1) * EBI_MCLK. + * |[10:8] |TAHD |EBI Data Access Hold Time + * | | |TAHD define data access hold time (tAHD). + * | | |tAHD = (TAHD +1) * EBI_MCLK. + * |[15:12] |W2X |Idle Cycle After Write + * | | |This field defines the number of W2X idle cycle. + * | | |W2X idle cycle = (W2X * EBI_MCLK). + * | | |When write action is finish, W2X idle cycle is inserted and EBI_nCS return to idle state. + * |[22] |RAHDOFF |Access Hold Time Disable Control When Read + * | | |0 = The Data Access Hold Time (tAHD) during EBI reading is Enabled. + * | | |1 = The Data Access Hold Time (tAHD) during EBI reading is Disabled. + * |[23] |WAHDOFF |Access Hold Time Disable Control When Write + * | | |0 = The Data Access Hold Time (tAHD) during EBI writing is Enabled. + * | | |1 = The Data Access Hold Time (tAHD) during EBI writing is Disabled. + * |[27:24] |R2R |Idle Cycle Between Read-To-Read + * | | |This field defines the number of R2R idle cycle. + * | | |R2R idle cycle = (R2R * EBI_MCLK). + * | | |When read action is finish and next action is going to read, R2R idle cycle is inserted and EBI_nCS return to idle state. + */ + + __IO uint32_t CTL0; /* Offset: 0x00 External Bus Interface Bank0 Control Register */ + __IO uint32_t TCTL0; /* Offset: 0x04 External Bus Interface Bank0 Timing Control Register */ + __I uint32_t RESERVE0[2]; + __IO uint32_t CTL1; /* Offset: 0x10 External Bus Interface Bank1 Control Register */ + __IO uint32_t TCTL1; /* Offset: 0x14 External Bus Interface Bank1 Timing Control Register */ + +} EBI_T; + + + +/** + @addtogroup EBI_CONST EBI Bit Field Definition + Constant Definitions for EBI Controller +@{ */ + +#define EBI_CTL0_EN_Pos (0) /*!< EBI_T::CTL0: EN Position */ +#define EBI_CTL0_EN_Msk (0x1ul << EBI_CTL0_EN_Pos) /*!< EBI_T::CTL0: EN Mask */ + +#define EBI_CTL0_DW16_Pos (1) /*!< EBI_T::CTL0: DW16 Position */ +#define EBI_CTL0_DW16_Msk (0x1ul << EBI_CTL0_DW16_Pos) /*!< EBI_T::CTL0: DW16 Mask */ + +#define EBI_CTL0_CSPOLINV_Pos (2) /*!< EBI_T::CTL0: CSPOLINV Position */ +#define EBI_CTL0_CSPOLINV_Msk (0x1ul << EBI_CTL0_CSPOLINV_Pos) /*!< EBI_T::CTL0: CSPOLINV Mask */ + +#define EBI_CTL0_MCLKDIV_Pos (8) /*!< EBI_T::CTL0: MCLKDIV Position */ +#define EBI_CTL0_MCLKDIV_Msk (0x7ul << EBI_CTL0_MCLKDIV_Pos) /*!< EBI_T::CTL0: MCLKDIV Mask */ + +#define EBI_CTL0_TALE_Pos (16) /*!< EBI_T::CTL0: TALE Position */ +#define EBI_CTL0_TALE_Msk (0x7ul << EBI_CTL0_TALE_Pos) /*!< EBI_T::CTL0: TALE Mask */ + +#define EBI_CTL0_WBUFEN_Pos (24) /*!< EBI_T::CTL0: WBUFEN Position */ +#define EBI_CTL0_WBUFEN_Msk (0x1ul << EBI_CTL0_WBUFEN_Pos) /*!< EBI_T::CTL0: WBUFEN Mask */ + +#define EBI_TCTL0_TACC_Pos (3) /*!< EBI_T::TCTL0: TACC Position */ +#define EBI_TCTL0_TACC_Msk (0x1ful << EBI_TCTL0_TACC_Pos) /*!< EBI_T::TCTL0: TACC Mask */ + +#define EBI_TCTL0_TAHD_Pos (8) /*!< EBI_T::TCTL0: TAHD Position */ +#define EBI_TCTL0_TAHD_Msk (0x7ul << EBI_TCTL0_TAHD_Pos) /*!< EBI_T::TCTL0: TAHD Mask */ + +#define EBI_TCTL0_W2X_Pos (12) /*!< EBI_T::TCTL0: W2X Position */ +#define EBI_TCTL0_W2X_Msk (0xful << EBI_TCTL0_W2X_Pos) /*!< EBI_T::TCTL0: W2X Mask */ + +#define EBI_TCTL0_RAHDOFF_Pos (22) /*!< EBI_T::TCTL0: RAHDOFF Position */ +#define EBI_TCTL0_RAHDOFF_Msk (0x1ul << EBI_TCTL0_RAHDOFF_Pos) /*!< EBI_T::TCTL0: RAHDOFF Mask */ + +#define EBI_TCTL0_WAHDOFF_Pos (23) /*!< EBI_T::TCTL0: WAHDOFF Position */ +#define EBI_TCTL0_WAHDOFF_Msk (0x1ul << EBI_TCTL0_WAHDOFF_Pos) /*!< EBI_T::TCTL0: WAHDOFF Mask */ + +#define EBI_TCTL0_R2R_Pos (24) /*!< EBI_T::TCTL0: R2R Position */ +#define EBI_TCTL0_R2R_Msk (0xful << EBI_TCTL0_R2R_Pos) /*!< EBI_T::TCTL0: R2R Mask */ + +#define EBI_CTL1_EN_Pos (0) /*!< EBI_T::CTL1: EN Position */ +#define EBI_CTL1_EN_Msk (0x1ul << EBI_CTL1_EN_Pos) /*!< EBI_T::CTL1: EN Mask */ + +#define EBI_CTL1_DW16_Pos (1) /*!< EBI_T::CTL1: DW16 Position */ +#define EBI_CTL1_DW16_Msk (0x1ul << EBI_CTL1_DW16_Pos) /*!< EBI_T::CTL1: DW16 Mask */ + +#define EBI_CTL1_CSPOLINV_Pos (2) /*!< EBI_T::CTL1: CSPOLINV Position */ +#define EBI_CTL1_CSPOLINV_Msk (0x1ul << EBI_CTL1_CSPOLINV_Pos) /*!< EBI_T::CTL1: CSPOLINV Mask */ + +#define EBI_CTL1_MCLKDIV_Pos (8) /*!< EBI_T::CTL1: MCLKDIV Position */ +#define EBI_CTL1_MCLKDIV_Msk (0x7ul << EBI_CTL1_MCLKDIV_Pos) /*!< EBI_T::CTL1: MCLKDIV Mask */ + +#define EBI_CTL1_TALE_Pos (16) /*!< EBI_T::CTL1: TALE Position */ +#define EBI_CTL1_TALE_Msk (0x7ul << EBI_CTL1_TALE_Pos) /*!< EBI_T::CTL1: TALE Mask */ + +#define EBI_CTL1_WBUFEN_Pos (24) /*!< EBI_T::CTL1: WBUFEN Position */ +#define EBI_CTL1_WBUFEN_Msk (0x1ul << EBI_CTL1_WBUFEN_Pos) /*!< EBI_T::CTL1: WBUFEN Mask */ + +#define EBI_TCTL1_TACC_Pos (3) /*!< EBI_T::TCTL1: TACC Position */ +#define EBI_TCTL1_TACC_Msk (0x1ful << EBI_TCTL1_TACC_Pos) /*!< EBI_T::TCTL1: TACC Mask */ + +#define EBI_TCTL1_TAHD_Pos (8) /*!< EBI_T::TCTL1: TAHD Position */ +#define EBI_TCTL1_TAHD_Msk (0x7ul << EBI_TCTL1_TAHD_Pos) /*!< EBI_T::TCTL1: TAHD Mask */ + +#define EBI_TCTL1_W2X_Pos (12) /*!< EBI_T::TCTL1: W2X Position */ +#define EBI_TCTL1_W2X_Msk (0xful << EBI_TCTL1_W2X_Pos) /*!< EBI_T::TCTL1: W2X Mask */ + +#define EBI_TCTL1_RAHDOFF_Pos (22) /*!< EBI_T::TCTL1: RAHDOFF Position */ +#define EBI_TCTL1_RAHDOFF_Msk (0x1ul << EBI_TCTL1_RAHDOFF_Pos) /*!< EBI_T::TCTL1: RAHDOFF Mask */ + +#define EBI_TCTL1_WAHDOFF_Pos (23) /*!< EBI_T::TCTL1: WAHDOFF Position */ +#define EBI_TCTL1_WAHDOFF_Msk (0x1ul << EBI_TCTL1_WAHDOFF_Pos) /*!< EBI_T::TCTL1: WAHDOFF Mask */ + +#define EBI_TCTL1_R2R_Pos (24) /*!< EBI_T::TCTL1: R2R Position */ +#define EBI_TCTL1_R2R_Msk (0xful << EBI_TCTL1_R2R_Pos) /*!< EBI_T::TCTL1: R2R Mask */ + +/**@}*/ /* EBI_CONST */ +/**@}*/ /* end of EBI register group */ + + +/*---------------------- Flash Memory Controller -------------------------*/ +/** + @addtogroup FMC Flash Memory Controller(FMC) + Memory Mapped Structure for FMC Controller +@{ */ + + +typedef struct +{ + + + + +/** + * @var FMC_T::ISPCTL + * Offset: 0x00 ISP Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |ISPEN |ISP Enable Bit (Write Protect) + * | | |ISP function enable bit. Set this bit to enable ISP function. + * | | |0 = ISP function Disabled. + * | | |1 = ISP function Enabled. + * |[1] |BS |Boot Select (Write Protect) + * | | |When MBS in CONFIG0 is 1, set/clear this bit to select next booting from LDROM/APROM, respectively. + * | | |This bit also functions as chip booting status flag, which can be used to check where chip booted from. + * | | |This bit is initiated with the inverted value of CBS[1] (CONFIG0[7]) after any reset is happened except CPU reset (CPU is 1) or system reset (SYS) is happened. + * | | |0 = Booting from APROM when MBS (CONFIG0[5]) is 1. + * | | |1 = Booting from LDROM when MBS (CONFIG0[5]) is 1. + * |[3] |APUEN |APROM Update Enable Bit (Write Protect) + * | | |0 = APROM cannot be updated when the chip runs in APROM. + * | | |1 = APROM can be updated when the chip runs in APROM. + * |[4] |CFGUEN |CONFIG Update Enable Bit (Write Protect) + * | | |0 = CONFIG cannot be updated. + * | | |1 = CONFIG can be updated. + * |[5] |LDUEN |LDROM Update Enable Bit (Write Protect) + * | | |LDROM update enable bit. + * | | |0 = LDROM cannot be updated. + * | | |1 = LDROM can be updated. + * |[6] |ISPFF |ISP Fail Flag (Write Protect) + * | | |This bit is set by hardware when a triggered ISP meets any of the following conditions: + * | | |This bit needs to be cleared by writing 1 to it. + * | | |(1) APROM writes to itself if APUEN is set to 0. + * | | |(2) LDROM writes to itself if LDUEN is set to 0. + * | | |(3) CONFIG is erased/programmed if CFGUEN is set to 0. + * | | |(4) SPROM is erased/programmed if SPUEN is set to 0 + * | | |(5) SPROM is programmed at SPROM secured mode. + * | | |(6) Page Erase command at LOCK mode with ICE connection + * | | |(7) Erase or Program command at brown-out detected + * | | |(8) Destination address is illegal, such as over an available range. + * | | |(9) Invalid ISP commands + * |[16] |BL |Boot Loader Booting (Write Protect) + * | | |This bit is initiated with the inverted value of MBS (CONFIG0[5]). + * | | |Any reset, except CPU reset (CPU is 1) or system reset (SYS), BL will be reloaded. + * | | |This bit is used to check chip boot from Boot Loader or not. + * | | |User should keep original value of this bit when updating FMC_ISPCTL register. + * | | |0 = Booting from APROM or LDROM. + * | | |1 = Booting from Boot Loader. + * @var FMC_T::ISPADDR + * Offset: 0x04 ISP Address Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:0] |ISPADDR |ISP Address + * | | |The NuMicro M451 series is equipped with embedded flash. + * | | |ISPADDR[1:0] must be kept 00 for ISP 32-bit operation. + * | | |ISPADDR[2:0] must be kept 000 for ISP 64-bit operation. + * | | |For Checksum Calculation command, this field is the flash starting address for checksum calculation, 2 Kbytes alignment is necessary for checksum calculation. + * @var FMC_T::ISPDAT + * Offset: 0x08 ISP Data Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:0] |ISPDAT |ISP Data + * | | |Write data to this register before ISP program operation. + * | | |Read data from this register after ISP read operation. + * | | |For Run Checksum Calculation command, ISPDAT is the memory size (byte) and 2 Kbytes alignment. + * | | |For ISP Read Checksum command, ISPDAT is the checksum result. + * | | |If ISPDAT = 0x0000_0000, it means that (1) the checksum calculation is in progress, (2) the memory range for checksum calculation is incorrect, or (3) all of data are 0. + * @var FMC_T::ISPCMD + * Offset: 0x0C ISP CMD Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[6:0] |CMD |ISP CMD + * | | |ISP command table is shown below: + * | | |0x00= FLASH Read. + * | | |0x04= Read Unique ID. + * | | |0x0B= Read Company ID. + * | | |0x0C= Read Device ID. + * | | |0x0D= Read Checksum. + * | | |0x21= FLASH 32-bit Program. + * | | |0x22= FLASH Page Erase. + * | | |0x27= FLASH Multi-Word Program. + * | | |0x2D= Run Checksum Calculation. + * | | |0x2E= Vector Remap. + * | | |0x61= FLASH 64-bit Program. + * | | |The other commands are invalid. + * @var FMC_T::ISPTRG + * Offset: 0x10 ISP Trigger Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |ISPGO |ISP Start Trigger (Write Protect) + * | | |Write 1 to start ISP operation and this bit will be cleared to 0 by hardware automatically when ISP operation is finished. + * | | |0 = ISP operation is finished. + * | | |1 = ISP is progressed. + * @var FMC_T::DFBA + * Offset: 0x14 Data Flash Base Address + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:0] |DFBA |Data Flash Base Address + * | | |This register indicates Data Flash start address. It is a read only register. + * | | |The Data Flash is shared with APROM. the content of this register is loaded from CONFIG1 + * | | |This register is valid when DFEN (CONFIG0[0]) =0 . + * @var FMC_T::FTCTL + * Offset: 0x18 Flash Access Time Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[6:4] |FOM |Frequency Optimization Mode (Write Protect) + * | | |The NuMicro M451 series support adjustable flash access timing to optimize the flash access cycles in different working frequency. + * | | |001 = Frequency <= 12MHz. + * | | |010 = Frequency <= 36MHz. + * | | |100 = Frequency <= 60MHz. + * | | |Others = Frequency <= 72MHz. + * @var FMC_T::ISPSTS + * Offset: 0x40 ISP Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |ISPBUSY |ISP Busy Flag (Read Only) + * | | |Write 1 to start ISP operation and this bit will be cleared to 0 by hardware automatically when ISP operation is finished. + * | | |This bit is the mirror of ISPGO(FMC_ISPTRG[0]). + * | | |0 = ISP operation is finished. + * | | |1 = ISP is progressed. + * |[2:1] |CBS |Boot Selection Of CONFIG (Read Only) + * | | |This bit is initiated with the CBS (CONFIG0[7:6]) after any reset is happened except CPU reset (CPU is 1) or system reset (SYS) is happened. + * | | |The following function is valid when MBS (FMC_ISPSTS[3])= 1. + * | | |00 = LDROM with IAP mode. + * | | |01 = LDROM without IAP mode. + * | | |10 = APROM with IAP mode. + * | | |11 = APROM without IAP mode. + * |[3] |MBS |Boot From Boot Loader Selection Flag (Read Only) + * | | |This bit is initiated with the MBS (CONFIG0[5]) after any reset is happened except CPU reset (CPU is 1) or system reset (SYS) is happened + * | | |0 = Booting from Boot Loader. + * | | |1 = Booting + * | | |from LDROM/APROM.(see CBS bit setting) + * |[5] |PGFF |Flash Program With Fast Verification Flag (Read Only) + * | | |This bit is set if data is mismatched at ISP programming verification. + * | | |This bit is clear by performing ISP flash erase or ISP read CID operation. + * | | |0 = Flash Program is success. + * | | |1 = Flash Program is fail. Program data is different with data in the flash memory + * |[6] |ISPFF |ISP Fail Flag (Write Protect) + * | | |This bit is the mirror of ISPFF (FMC_ISPCTL[6]), it needs to be cleared by writing 1 to FMC_ISPCTL[6] or FMC_ISPSTS[6]. + * | | |This bit is set by hardware when a triggered ISP meets any of the following conditions: + * | | |(1) APROM writes to itself if APUEN is set to 0. + * | | |(2) LDROM writes to itself if LDUEN is set to 0. + * | | |(3) CONFIG is erased/programmed if CFGUEN is set to 0. + * | | |(4) SPROM is erased/programmed if SPUEN is set to 0 + * | | |(5) SPROM is programmed at SPROM secured mode. + * | | |(6) Page Erase command at LOCK mode with ICE connection + * | | |(7) Erase or Program command at brown-out detected + * | | |(8) Destination address is illegal, such as over an available range. + * | | |(9) Invalid ISP commands + * |[23:9] |VECMAP |Vector Page Mapping Address (Read Only) + * | | |All access to 0x0000_0000~0x0000_01FF is remapped to the flash memory address {VECMAP[14:0], 9'h000} ~ {VECMAP[14:0], 9'h1FF} + * @var FMC_T::MPDAT0 + * Offset: 0x80 ISP Data0 Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:0] |ISPDAT0 |ISP Data 0 + * | | |This register is the first 32-bit data for 32-bit/64-bit/multi-word programming, and it is also the mirror of FMC_ISPDAT, both registers keep the same data + * @var FMC_T::MPDAT1 + * Offset: 0x84 ISP Data1 Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:0] |ISPDAT1 |ISP Data 1 + * | | |This register is the second 32-bit data for 64-bit/multi-word programming. + * @var FMC_T::MPDAT2 + * Offset: 0x88 ISP Data2 Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:0] |ISPDAT2 |ISP Data 2 + * | | |This register is the third 32-bit data for multi-word programming. + * @var FMC_T::MPDAT3 + * Offset: 0x8C ISP Data3 Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:0] |ISPDAT3 |ISP Data 3 + * | | |This register is the fourth 32-bit data for multi-word programming. + * @var FMC_T::MPSTS + * Offset: 0xC0 ISP Multi-Program Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |MPBUSY |ISP Multi-Word Program Busy Flag (Read Only) + * | | |Write 1 to start ISP Multi-Word program operation and this bit will be cleared to 0 by hardware automatically when ISP Multi-Word program operation is finished. + * | | |This bit is the mirror of ISPGO(FMC_ISPTRG[0]). + * | | |0 = ISP Multi-Word program operation is finished. + * | | |1 = ISP Multi-Word program operation + * | | |is progressed. + * |[1] |PPGO |ISP Multi-Program Status (Read Only) + * | | |0 = ISP multi-word program operation is not active. + * | | |1 = ISP multi-word program operation is in progress. + * |[2] |ISPFF |ISP Fail Flag (Read Only) + * | | |This bit is the mirror of ISPFF (FMC_ISPCTL[6]), it needs to be cleared by writing 1 to FMC_ISPCTL[6] or FMC_ISPSTS[6]. + * | | |This bit is set by hardware when a triggered ISP meets any of the following conditions: + * | | |(1) APROM writes to itself if APUEN is set to 0. + * | | |(2) LDROM writes to itself if LDUEN is set to 0. + * | | |(3) CONFIG is erased/programmed if CFGUEN is set to 0. + * | | |(4) SPROM is erased/programmed if SPUEN is set to 0 + * | | |(5) SPROM is programmed at SPROM secured mode. + * | | |(6) Page Erase command at LOCK mode with ICE connection + * | | |(7) Erase or Program command at brown-out detected + * | | |(8) Destination address is illegal, such as over an available range. + * | | |(9) Invalid ISP commands + * |[4] |D0 |ISP DATA 0 Flag (Read Only) + * | | |This bit is set when FMC_MPDAT0 is written and auto-clear to 0 when the FMC_MPDAT0 data is programmed to flash complete. + * | | |0 = FMC_MPDAT0 register is empty, or program to flash complete. + * | | |1 = FMC_MPDAT0 register has been written, and not program to flash complete. + * |[5] |D1 |ISP DATA 1 Flag (Read Only) + * | | |This bit is set when FMC_MPDAT1 is written and auto-clear to 0 when the FMC_MPDAT1 data is programmed to flash complete. + * | | |0 = FMC_MPDAT1 register is empty, or program to flash complete. + * | | |1 = FMC_MPDAT1 register has been written, and not program to flash complete. + * |[6] |D2 |ISP DATA 2 Flag (Read Only) + * | | |This bit is set when FMC_MPDAT2 is written and auto-clear to 0 when the FMC_MPDAT2 data is programmed to flash complete. + * | | |0 = FMC_MPDAT2 register is empty, or program to flash complete. + * | | |1 = FMC_MPDAT2 register has been written, and not program to flash complete. + * |[7] |D3 |ISP DATA 3 Flag (Read Only) + * | | |This bit is set when FMC_MPDAT3 is written and auto-clear to 0 when the FMC_MPDAT3 data is programmed to flash complete. + * | | |0 = FMC_MPDAT3 register is empty, or program to flash complete. + * | | |1 = FMC_MPDAT3 register has been written, and not program to flash complete. + * @var FMC_T::MPADDR + * Offset: 0xC4 ISP Multi-Program Address Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:0] |MPADDR |ISP Multi-Word Program Address + * | | |MPADDR is the address of ISP multi-word program operation when ISPGO flag is 1. + * | | |MPADDR will keep the final ISP address when ISP multi-word program is complete. + */ + + __IO uint32_t ISPCTL; /* Offset: 0x00 ISP Control Register */ + __IO uint32_t ISPADDR; /* Offset: 0x04 ISP Address Register */ + __IO uint32_t ISPDAT; /* Offset: 0x08 ISP Data Register */ + __IO uint32_t ISPCMD; /* Offset: 0x0C ISP CMD Register */ + __IO uint32_t ISPTRG; /* Offset: 0x10 ISP Trigger Control Register */ + __I uint32_t DFBA; /* Offset: 0x14 Data Flash Base Address */ + __IO uint32_t FTCTL; /* Offset: 0x18 Flash Access Time Control Register */ + __I uint32_t RESERVE0[9]; + __I uint32_t ISPSTS; /* Offset: 0x40 ISP Status Register */ + __I uint32_t RESERVE1[15]; + __IO uint32_t MPDAT0; /* Offset: 0x80 ISP Data0 Register */ + __IO uint32_t MPDAT1; /* Offset: 0x84 ISP Data1 Register */ + __IO uint32_t MPDAT2; /* Offset: 0x88 ISP Data2 Register */ + __IO uint32_t MPDAT3; /* Offset: 0x8C ISP Data3 Register */ + __I uint32_t RESERVE2[12]; + __I uint32_t MPSTS; /* Offset: 0xC0 ISP Multi-Program Status Register */ + __I uint32_t MPADDR; /* Offset: 0xC4 ISP Multi-Program Address Register */ + +} FMC_T; + + + + +/** + @addtogroup FMC_CONST FMC Bit Field Definition + Constant Definitions for FMC Controller +@{ */ + +#define FMC_ISPCTL_ISPEN_Pos (0) /*!< FMC_T::ISPCTL: ISPEN Position */ +#define FMC_ISPCTL_ISPEN_Msk (0x1ul << FMC_ISPCTL_ISPEN_Pos) /*!< FMC_T::ISPCTL: ISPEN Mask */ + +#define FMC_ISPCTL_BS_Pos (1) /*!< FMC_T::ISPCTL: BS Position */ +#define FMC_ISPCTL_BS_Msk (0x1ul << FMC_ISPCTL_BS_Pos) /*!< FMC_T::ISPCTL: BS Mask */ + +#define FMC_ISPCTL_APUEN_Pos (3) /*!< FMC_T::ISPCTL: APUEN Position */ +#define FMC_ISPCTL_APUEN_Msk (0x1ul << FMC_ISPCTL_APUEN_Pos) /*!< FMC_T::ISPCTL: APUEN Mask */ + +#define FMC_ISPCTL_CFGUEN_Pos (4) /*!< FMC_T::ISPCTL: CFGUEN Position */ +#define FMC_ISPCTL_CFGUEN_Msk (0x1ul << FMC_ISPCTL_CFGUEN_Pos) /*!< FMC_T::ISPCTL: CFGUEN Mask */ + +#define FMC_ISPCTL_LDUEN_Pos (5) /*!< FMC_T::ISPCTL: LDUEN Position */ +#define FMC_ISPCTL_LDUEN_Msk (0x1ul << FMC_ISPCTL_LDUEN_Pos) /*!< FMC_T::ISPCTL: LDUEN Mask */ + +#define FMC_ISPCTL_ISPFF_Pos (6) /*!< FMC_T::ISPCTL: ISPFF Position */ +#define FMC_ISPCTL_ISPFF_Msk (0x1ul << FMC_ISPCTL_ISPFF_Pos) /*!< FMC_T::ISPCTL: ISPFF Mask */ + +#define FMC_ISPCTL_BL_Pos (16) /*!< FMC_T::ISPCTL: BL Position */ +#define FMC_ISPCTL_BL_Msk (0x1ul << FMC_ISPCTL_BL_Pos) /*!< FMC_T::ISPCTL: BL Mask */ + +#define FMC_ISPADDR_ISPADDR_Pos (0) /*!< FMC_T::ISPADDR: ISPADDR Position */ +#define FMC_ISPADDR_ISPADDR_Msk (0xfffffffful << FMC_ISPADDR_ISPADDR_Pos) /*!< FMC_T::ISPADDR: ISPADDR Mask */ + +#define FMC_ISPDAT_ISPDAT_Pos (0) /*!< FMC_T::ISPDAT: ISPDAT Position */ +#define FMC_ISPDAT_ISPDAT_Msk (0xfffffffful << FMC_ISPDAT_ISPDAT_Pos) /*!< FMC_T::ISPDAT: ISPDAT Mask */ + +#define FMC_ISPCMD_CMD_Pos (0) /*!< FMC_T::ISPCMD: CMD Position */ +#define FMC_ISPCMD_CMD_Msk (0x7ful << FMC_ISPCMD_CMD_Pos) /*!< FMC_T::ISPCMD: CMD Mask */ + +#define FMC_ISPTRG_ISPGO_Pos (0) /*!< FMC_T::ISPTRG: ISPGO Position */ +#define FMC_ISPTRG_ISPGO_Msk (0x1ul << FMC_ISPTRG_ISPGO_Pos) /*!< FMC_T::ISPTRG: ISPGO Mask */ + +#define FMC_DFBA_DFBA_Pos (0) /*!< FMC_T::DFBA: DFBA Position */ +#define FMC_DFBA_DFBA_Msk (0xfffffffful << FMC_DFBA_DFBA_Pos) /*!< FMC_T::DFBA: DFBA Mask */ + +#define FMC_FTCTL_FOM_Pos (4) /*!< FMC_T::FTCTL: FOM Position */ +#define FMC_FTCTL_FOM_Msk (0x7ul << FMC_FTCTL_FOM_Pos) /*!< FMC_T::FTCTL: FOM Mask */ + +#define FMC_ISPSTS_ISPBUSY_Pos (0) /*!< FMC_T::ISPSTS: ISPBUSY Position */ +#define FMC_ISPSTS_ISPBUSY_Msk (0x1ul << FMC_ISPSTS_ISPBUSY_Pos) /*!< FMC_T::ISPSTS: ISPBUSY Mask */ + +#define FMC_ISPSTS_CBS_Pos (1) /*!< FMC_T::ISPSTS: CBS Position */ +#define FMC_ISPSTS_CBS_Msk (0x3ul << FMC_ISPSTS_CBS_Pos) /*!< FMC_T::ISPSTS: CBS Mask */ + +#define FMC_ISPSTS_MBS_Pos (3) /*!< FMC_T::ISPSTS: MBS Position */ +#define FMC_ISPSTS_MBS_Msk (0x1ul << FMC_ISPSTS_MBS_Pos) /*!< FMC_T::ISPSTS: MBS Mask */ + +#define FMC_ISPSTS_PGFF_Pos (5) /*!< FMC_T::ISPSTS: PGFF Position */ +#define FMC_ISPSTS_PGFF_Msk (0x1ul << FMC_ISPSTS_PGFF_Pos) /*!< FMC_T::ISPSTS: PGFF Mask */ + +#define FMC_ISPSTS_ISPFF_Pos (6) /*!< FMC_T::ISPSTS: ISPFF Position */ +#define FMC_ISPSTS_ISPFF_Msk (0x1ul << FMC_ISPSTS_ISPFF_Pos) /*!< FMC_T::ISPSTS: ISPFF Mask */ + +#define FMC_ISPSTS_VECMAP_Pos (9) /*!< FMC_T::ISPSTS: VECMAP Position */ +#define FMC_ISPSTS_VECMAP_Msk (0x7ffful << FMC_ISPSTS_VECMAP_Pos) /*!< FMC_T::ISPSTS: VECMAP Mask */ + +#define FMC_MPDAT0_ISPDAT0_Pos (0) /*!< FMC_T::MPDAT0: ISPDAT0 Position */ +#define FMC_MPDAT0_ISPDAT0_Msk (0xfffffffful << FMC_MPDAT0_ISPDAT0_Pos) /*!< FMC_T::MPDAT0: ISPDAT0 Mask */ + +#define FMC_MPDAT1_ISPDAT1_Pos (0) /*!< FMC_T::MPDAT1: ISPDAT1 Position */ +#define FMC_MPDAT1_ISPDAT1_Msk (0xfffffffful << FMC_MPDAT1_ISPDAT1_Pos) /*!< FMC_T::MPDAT1: ISPDAT1 Mask */ + +#define FMC_MPDAT2_ISPDAT2_Pos (0) /*!< FMC_T::MPDAT2: ISPDAT2 Position */ +#define FMC_MPDAT2_ISPDAT2_Msk (0xfffffffful << FMC_MPDAT2_ISPDAT2_Pos) /*!< FMC_T::MPDAT2: ISPDAT2 Mask */ + +#define FMC_MPDAT3_ISPDAT3_Pos (0) /*!< FMC_T::MPDAT3: ISPDAT3 Position */ +#define FMC_MPDAT3_ISPDAT3_Msk (0xfffffffful << FMC_MPDAT3_ISPDAT3_Pos) /*!< FMC_T::MPDAT3: ISPDAT3 Mask */ + +#define FMC_MPSTS_MPBUSY_Pos (0) /*!< FMC_T::MPSTS: MPBUSY Position */ +#define FMC_MPSTS_MPBUSY_Msk (0x1ul << FMC_MPSTS_MPBUSY_Pos) /*!< FMC_T::MPSTS: MPBUSY Mask */ + +#define FMC_MPSTS_PPGO_Pos (1) /*!< FMC_T::MPSTS: PPGO Position */ +#define FMC_MPSTS_PPGO_Msk (0x1ul << FMC_MPSTS_PPGO_Pos) /*!< FMC_T::MPSTS: PPGO Mask */ + +#define FMC_MPSTS_ISPFF_Pos (2) /*!< FMC_T::MPSTS: ISPFF Position */ +#define FMC_MPSTS_ISPFF_Msk (0x1ul << FMC_MPSTS_ISPFF_Pos) /*!< FMC_T::MPSTS: ISPFF Mask */ + +#define FMC_MPSTS_D0_Pos (4) /*!< FMC_T::MPSTS: D0 Position */ +#define FMC_MPSTS_D0_Msk (0x1ul << FMC_MPSTS_D0_Pos) /*!< FMC_T::MPSTS: D0 Mask */ + +#define FMC_MPSTS_D1_Pos (5) /*!< FMC_T::MPSTS: D1 Position */ +#define FMC_MPSTS_D1_Msk (0x1ul << FMC_MPSTS_D1_Pos) /*!< FMC_T::MPSTS: D1 Mask */ + +#define FMC_MPSTS_D2_Pos (6) /*!< FMC_T::MPSTS: D2 Position */ +#define FMC_MPSTS_D2_Msk (0x1ul << FMC_MPSTS_D2_Pos) /*!< FMC_T::MPSTS: D2 Mask */ + +#define FMC_MPSTS_D3_Pos (7) /*!< FMC_T::MPSTS: D3 Position */ +#define FMC_MPSTS_D3_Msk (0x1ul << FMC_MPSTS_D3_Pos) /*!< FMC_T::MPSTS: D3 Mask */ + +#define FMC_MPADDR_MPADDR_Pos (0) /*!< FMC_T::MPADDR: MPADDR Position */ +#define FMC_MPADDR_MPADDR_Msk (0xfffffffful << FMC_MPADDR_MPADDR_Pos) /*!< FMC_T::MPADDR: MPADDR Mask */ + +/**@}*/ /* FMC_CONST */ +/**@}*/ /* end of FMC register group */ + + +/*---------------------- General Purpose Input/Output Controller -------------------------*/ +/** + @addtogroup GPIO General Purpose Input/Output Controller(GPIO) + Memory Mapped Structure for GPIO Controller +@{ */ + + +typedef struct +{ + + + +/** + * @var GPIO_T::MODE + * Offset: 0x00/0x40/0x80/0xC0/0x100/0x140 Port A-F I/O Mode Control + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[2n+1:2n]|MODEn |Port A-F I/O Pin[n] Mode Control + * | | |Determine each I/O mode of Px.n pins. + * | | |00 = Px.n is in Input mode. + * | | |01 = Px.n is in Push-pull Output mode. + * | | |10 = Px.n is in Open-drain Output mode. + * | | |11 = Px.n is in Quasi-bidirectional mode. + * | | |Note1: The initial value of this field is defined by CIOINI (CONFIG0 [10]). + * | | |If CIOINI is set to 0, the default value is 0xFFFF_FFFF and all pins will be quasi-bidirectional mode after chip powered on. + * | | |If CIOINI is set to 1, the default value is 0x0000_0000 and all pins will be + * | | |input mode after chip powered on. + * | | |Note2: + * | | |n=0~15 for port A/B/C/D. + * | | |n=0~14 for port E. + * | | |n=0~7 for port F. + * @var GPIO_T::DINOFF + * Offset: 0x04/0x44/0x84/0xC4/0x104/0x144 Port A-F Digital Input Path Disable Control + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[n+16] |DINOFFn |Port A-F Pin[n] Digital Input Path Disable Control + * | | |Each of these bits is used to control if the digital input path of corresponding Px.n pin is disabled. + * | | |If input is analog signal, users can disable Px.n digital input path to avoid input current leakage. + * | | |0 = Px.n digital input path Enabled. + * | | |1 = Px.n digital input path Disabled (digital input tied to low). + * | | |Note: + * | | |n=0~15 for port A/B/C/D. + * | | |n=0~14 for port E. + * | | |n=0~7 for port F. + * @var GPIO_T::DOUT + * Offset: 0x08/0x48/0x88/0xC8/0x108/0x148 Port A-F Data Output Value + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[n] |DOUTn |Port A-F Pin[n] Output Value + * | | |Each of these bits controls the status of a Px.n pin when the Px.n is configured as Push-pull output, Open-drain output or Quasi-bidirectional mode. + * | | |0 = Px.n will drive Low if the Px.n pin is configured as Push-pull output, Open-drain output or Quasi-bidirectional mode. + * | | |1 = Px.n will drive High if the Px.n pin is configured as Push-pull output or Quasi-bidirectional mode. + * | | |Note: + * | | |n=0~15 for port A/B/C/D. + * | | |n=0~14 for port E. + * | | |n=0~7 for port F. + * @var GPIO_T::DATMSK + * Offset: 0x0C/0x4C/0x8C/0xCC/0x10C/0x14C Port A-F Data Output Write Mask + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[n] |DMASKn |Port A-F Pin[n] Data Output Write Mask + * | | |These bits are used to protect the corresponding DOUT (Px_DOUT[n]) bit. + * | | |When the DATMSK (Px_DATMSK[n]) bit is set to 1, the corresponding DOUT (Px_DOUT[n]) bit is protected. + * | | |If the write signal is masked, writing data to the protect bit is ignored. + * | | |0 = Corresponding DOUT (Px_DOUT[n]) bit can be updated. + * | | |1 = Corresponding DOUT (Px_DOUT[n]) bit protected. + * | | |Note1: This function only protects the corresponding DOUT (Px_DOUT[n]) bit, and will not protect the corresponding PDIO (Pxn_PDIO[0]) bit. + * | | |Note2: + * | | |n=0~15 for port A/B/C/D. + * | | |n=0~14 for port E. + * | | |n=0~7 for port F. + * @var GPIO_T::PIN + * Offset: 0x10/0x50/0x90/0xD0/0x110/0x150 Port A-F Pin Value + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[n] |PINn |Port A-F Pin[n] Pin Value + * | | |Each bit of the register reflects the actual status of the respective Px.n pin. + * | | |If the bit is 1, it indicates the corresponding pin status is high; else the pin status is low. + * | | |Note: + * | | |n=0~15 for port A/B/C/D. + * | | |n=0~14 for port E. + * | | |n=0~7 for port F. + * @var GPIO_T::DBEN + * Offset: 0x14/0x54/0x94/0xD4/0x114/0x154 Port A-F De-Bounce Enable Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[n] |DBENn |Port A-F Pin[n] Input Signal De-Bounce Enable Bit + * | | |The DBEN[n] bit is used to enable the de-bounce function for each corresponding bit. + * | | |If the input signal pulse width cannot be sampled by continuous two de-bounce sample cycle, the input signal transition is seen as the signal bounce and will not trigger the interrupt. + * | | |The de-bounce clock source is controlled by DBCLKSRC (GPIO_DBCTL [4]), one de-bounce sample cycle period is controlled by DBCLKSEL (GPIO_DBCTL [3:0]). + * | | |0 = Px.n de-bounce function Disabled. + * | | |1 = Px.n de-bounce function Enabled. + * | | |The de-bounce function is valid only for edge triggered interrupt. + * | | |If the interrupt mode is level triggered, the de-bounce enable bit is ignored. + * | | |Note: + * | | |n=0~15 for port A/B/C/D. + * | | |n=0~14 for port E. + * | | |n=0~7 for port F. + * @var GPIO_T::INTTYPE + * Offset: 0x18/0x58/0x98/0xD8/0x118/0x158 Port A-F Interrupt Trigger Type Control + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[n] |TYPEn |Port A-F Pin[n] Edge Or Level Detection Interrupt Trigger Type Control + * | | |TYPE (Px_INTTYPE[n]) bit is used to control the triggered interrupt is by level trigger or by edge trigger. + * | | |If the interrupt is by edge trigger, the trigger source can be controlled by de-bounce. + * | | |If the interrupt is by level trigger, the input source is sampled by one HCLK clock and generates the interrupt. + * | | |0 = Edge trigger interrupt. + * | | |1 = Level trigger interrupt. + * | | |If the pin is set as the level trigger interrupt, only one level can be set on the registers RHIEN (Px_INTEN[n+16])/FLIEN (Px_INTEN[n]). + * | | |If both levels to trigger interrupt are set, the setting is ignored and no interrupt will occur. + * | | |The de-bounce function is valid only for edge triggered interrupt. + * | | |If the interrupt mode is level triggered, the de-bounce enable bit is ignored. + * | | |Note: + * | | |n=0~15 for port A/B/C/D. + * | | |n=0~14 for port E. + * | | |n=0~7 for port F. + * @var GPIO_T::INTEN + * Offset: 0x1C/0x5C/0x9C/0xDC/0x11C/0x15C Port A-F Interrupt Enable Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[n] |FLIENn |Port A-F Pin[n] Falling Edge or Low Level Interrupt Trigger Type Enable Bit + * | | |The FLIEN (Px_INTEN[n]) bit is used to enable the interrupt for each of the corresponding input Px.n pin. + * | | |Set bit to 1 also enable the pin wake-up function. + * | | |When setting the FLIEN (Px_INTEN[n]) bit to 1 : + * | | |If the interrupt is level trigger (TYPE (Px_INTTYPE[n]) bit is set to 1), the input Px.n pin will generate the interrupt while this pin state is at low level. + * | | |If the interrupt is edge trigger(TYPE (Px_INTTYPE[n]) bit is set to 0), the input Px.n pin will generate the interrupt while this pin state changed from high to low. + * | | |0 = Px.n level low or high to low interrupt Disabled. + * | | |1 = Px.n level low or high to low interrupt Enabled. + * | | |Note: + * | | |n=0~15 for port A/B/C/D. + * | | |n=0~14 for port E. + * | | |n=0~7 for port F. + * @var GPIO_T::INTSRC + * Offset: 0x20/0x60/0xA0/0xE0/0x120/0x160 Port A-F Interrupt Source Flag + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[n] |INTSRCn |Port A-F Pin[n] Interrupt Source Flag + * | | |Write Operation : + * | | |0 = No action. + * | | |1 = Clear the corresponding pending interrupt. + * | | |Read Operation : + * | | |0 = No interrupt at Px.n. + * | | |1 = Px.n generates an interrupt. + * | | |Note: + * | | |n=0~15 for port A/B/C/D. + * | | |n=0~14 for port E. + * | | |n=0~7 for port F. + * @var GPIO_T::SMTEN + * Offset: 0x24/0x64/0xA4/0xE4/0x124/0x164 Port A-F Input Schmitt Trigger Enable Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[n] |SMTENn |Port A-F Pin[n] Input Schmitt Trigger Enable Bit + * | | |0 = Px.n input Schmitt trigger function Disabled. + * | | |1 = Px.n input Schmitt trigger function Enabled. + * | | |Note: + * | | |n=0~15 for port A/B/C/D. + * | | |n=0~14 for port E. + * | | |n=0~7 for port F. + * @var GPIO_T::SLEWCTL + * Offset: 0x28/0x68/0xA8/0xE8/0x128/0x168 Port A-F High Slew Rate Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[n] |HSRENn |Port A-F Pin[n] High Slew Rate Control + * | | |0 = Px.n output with basic slew rate. + * | | |1 = Px.n output with higher slew rate. + * | | |Note: + * | | |n=0~15 for port A/B/C/D. + * | | |n=0~14 for port E. + * | | |n=0~7 for port F. + * @var GPIO_T::DRVCTL + * Offset: 0x2C Port E High Drive Strength Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[n] |HDRVENn |Port E Pin[n] Driving Strength Control + * | | |0 = Px.n output with basic driving strength. + * | | |1 = Px.n output with high driving strength. + * | | |Note: + * | | |n=8,9..13 for port E. + */ + + __IO uint32_t MODE; /* Offset: 0x00/0x40/0x80/0xC0/0x100/0x140 Port A-F I/O Mode Control */ + __IO uint32_t DINOFF; /* Offset: 0x04/0x44/0x84/0xC4/0x104/0x144 Port A-F Digital Input Path Disable Control */ + __IO uint32_t DOUT; /* Offset: 0x08/0x48/0x88/0xC8/0x108/0x148 Port A-F Data Output Value */ + __IO uint32_t DATMSK; /* Offset: 0x0C/0x4C/0x8C/0xCC/0x10C/0x14C Port A-F Data Output Write Mask */ + __I uint32_t PIN; /* Offset: 0x10/0x50/0x90/0xD0/0x110/0x150 Port A-F Pin Value */ + __IO uint32_t DBEN; /* Offset: 0x14/0x54/0x94/0xD4/0x114/0x154 Port A-F De-Bounce Enable Control Register */ + __IO uint32_t INTTYPE; /* Offset: 0x18/0x58/0x98/0xD8/0x118/0x158 Port A-F Interrupt Trigger Type Control */ + __IO uint32_t INTEN; /* Offset: 0x1C/0x5C/0x9C/0xDC/0x11C/0x15C Port A-F Interrupt Enable Control Register */ + __IO uint32_t INTSRC; /* Offset: 0x20/0x60/0xA0/0xE0/0x120/0x160 Port A-F Interrupt Source Flag */ + __IO uint32_t SMTEN; /* Offset: 0x24/0x64/0xA4/0xE4/0x124/0x164 Port A-F Input Schmitt Trigger Enable Register */ + __IO uint32_t SLEWCTL; /* Offset: 0x28/0x68/0xA8/0xE8/0x128/0x168 Port A-F High Slew Rate Control Register */ + __IO uint32_t DRVCTL; /* Offset: 0x12C Port E High Drive Strength Control Register */ + +} GPIO_T; + + + + +typedef struct +{ + + + +/** + * @var GPIO_DBCTL_T::DBCTL + * Offset: 0x440 Interrupt De-bounce Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[3:0] |DBCLKSEL |De-Bounce Sampling Cycle Selection + * | | |0000 = Sample interrupt input once per 1 clocks. + * | | |0001 = Sample interrupt input once per 2 clocks. + * | | |0010 = Sample interrupt input once per 4 clocks. + * | | |0011 = Sample interrupt input once per 8 clocks. + * | | |0100 = Sample interrupt input once per 16 clocks. + * | | |0101 = Sample interrupt input once per 32 clocks. + * | | |0110 = Sample interrupt input once per 64 clocks. + * | | |0111 = Sample interrupt input once per 128 clocks. + * | | |1000 = Sample interrupt input once per 256 clocks. + * | | |1001 = Sample interrupt input once per 2*256 clocks. + * | | |1010 = Sample interrupt input once per 4*256 clocks. + * | | |1011 = Sample interrupt input once per 8*256 clocks. + * | | |1100 = Sample interrupt input once per 16*256 clocks. + * | | |1101 = Sample interrupt input once per 32*256 clocks. + * | | |1110 = Sample interrupt input once per 64*256 clocks. + * | | |1111 = Sample interrupt input once per 128*256 clocks. + * |[4] |DBCLKSRC |De-Bounce Counter Clock Source Selection + * | | |0 = De-bounce counter clock source is the HCLK. + * | | |1 = De-bounce counter clock source is the internal 10 kHz internal low speed oscillator. + * |[5] |ICLKON |Interrupt Clock On Mode + * | | |0 = Edge detection circuit is active only if I/O pin corresponding RHIEN (Px_INTEN[n+16])/FLIEN (Px_INTEN[n]) bit is set to 1. + * | | |1 = All I/O pins edge detection circuit is always active after reset. + * | | |Note: It is recommended to disable this bit to save system power if no special application concern. + */ + + __IO uint32_t DBCTL; /* Offset: 0x440 Interrupt De-bounce Control Register */ + +} GPIO_DBCTL_T; + + + + +/** + @addtogroup GPIO_CONST GPIO Bit Field Definition + Constant Definitions for GPIO Controller +@{ */ + +#define GPIO_MODE_MODE0_Pos (0) /*!< GPIO_T::MODE: MODE0 Position */ +#define GPIO_MODE_MODE0_Msk (0x3ul << GPIO_MODE_MODE0_Pos) /*!< GPIO_T::MODE: MODE0 Mask */ + +#define GPIO_MODE_MODE1_Pos (2) /*!< GPIO_T::MODE: MODE1 Position */ +#define GPIO_MODE_MODE1_Msk (0x3ul << GPIO_MODE_MODE1_Pos) /*!< GPIO_T::MODE: MODE1 Mask */ + +#define GPIO_MODE_MODE2_Pos (4) /*!< GPIO_T::MODE: MODE2 Position */ +#define GPIO_MODE_MODE2_Msk (0x3ul << GPIO_MODE_MODE2_Pos) /*!< GPIO_T::MODE: MODE2 Mask */ + +#define GPIO_MODE_MODE3_Pos (6) /*!< GPIO_T::MODE: MODE3 Position */ +#define GPIO_MODE_MODE3_Msk (0x3ul << GPIO_MODE_MODE3_Pos) /*!< GPIO_T::MODE: MODE3 Mask */ + +#define GPIO_MODE_MODE4_Pos (8) /*!< GPIO_T::MODE: MODE4 Position */ +#define GPIO_MODE_MODE4_Msk (0x3ul << GPIO_MODE_MODE4_Pos) /*!< GPIO_T::MODE: MODE4 Mask */ + +#define GPIO_MODE_MODE5_Pos (10) /*!< GPIO_T::MODE: MODE5 Position */ +#define GPIO_MODE_MODE5_Msk (0x3ul << GPIO_MODE_MODE5_Pos) /*!< GPIO_T::MODE: MODE5 Mask */ + +#define GPIO_MODE_MODE6_Pos (12) /*!< GPIO_T::MODE: MODE6 Position */ +#define GPIO_MODE_MODE6_Msk (0x3ul << GPIO_MODE_MODE6_Pos) /*!< GPIO_T::MODE: MODE6 Mask */ + +#define GPIO_MODE_MODE7_Pos (14) /*!< GPIO_T::MODE: MODE7 Position */ +#define GPIO_MODE_MODE7_Msk (0x3ul << GPIO_MODE_MODE7_Pos) /*!< GPIO_T::MODE: MODE7 Mask */ + +#define GPIO_MODE_MODE8_Pos (16) /*!< GPIO_T::MODE: MODE8 Position */ +#define GPIO_MODE_MODE8_Msk (0x3ul << GPIO_MODE_MODE8_Pos) /*!< GPIO_T::MODE: MODE8 Mask */ + +#define GPIO_MODE_MODE9_Pos (18) /*!< GPIO_T::MODE: MODE9 Position */ +#define GPIO_MODE_MODE9_Msk (0x3ul << GPIO_MODE_MODE9_Pos) /*!< GPIO_T::MODE: MODE9 Mask */ + +#define GPIO_MODE_MODE10_Pos (20) /*!< GPIO_T::MODE: MODE10 Position */ +#define GPIO_MODE_MODE10_Msk (0x3ul << GPIO_MODE_MODE10_Pos) /*!< GPIO_T::MODE: MODE10 Mask */ + +#define GPIO_MODE_MODE11_Pos (22) /*!< GPIO_T::MODE: MODE11 Position */ +#define GPIO_MODE_MODE11_Msk (0x3ul << GPIO_MODE_MODE11_Pos) /*!< GPIO_T::MODE: MODE11 Mask */ + +#define GPIO_MODE_MODE12_Pos (24) /*!< GPIO_T::MODE: MODE12 Position */ +#define GPIO_MODE_MODE12_Msk (0x3ul << GPIO_MODE_MODE12_Pos) /*!< GPIO_T::MODE: MODE12 Mask */ + +#define GPIO_MODE_MODE13_Pos (26) /*!< GPIO_T::MODE: MODE13 Position */ +#define GPIO_MODE_MODE13_Msk (0x3ul << GPIO_MODE_MODE13_Pos) /*!< GPIO_T::MODE: MODE13 Mask */ + +#define GPIO_MODE_MODE14_Pos (28) /*!< GPIO_T::MODE: MODE14 Position */ +#define GPIO_MODE_MODE14_Msk (0x3ul << GPIO_MODE_MODE14_Pos) /*!< GPIO_T::MODE: MODE14 Mask */ + +#define GPIO_MODE_MODE15_Pos (30) /*!< GPIO_T::MODE: MODE15 Position */ +#define GPIO_MODE_MODE15_Msk (0x3ul << GPIO_MODE_MODE15_Pos) /*!< GPIO_T::MODE: MODE15 Mask */ + +#define GPIO_DINOFF_DINOFF0_Pos (16) /*!< GPIO_T::DINOFF: DINOFF0 Position */ +#define GPIO_DINOFF_DINOFF0_Msk (0x1ul << GPIO_DINOFF_DINOFF0_Pos) /*!< GPIO_T::DINOFF: DINOFF0 Mask */ + +#define GPIO_DINOFF_DINOFF1_Pos (17) /*!< GPIO_T::DINOFF: DINOFF1 Position */ +#define GPIO_DINOFF_DINOFF1_Msk (0x1ul << GPIO_DINOFF_DINOFF1_Pos) /*!< GPIO_T::DINOFF: DINOFF1 Mask */ + +#define GPIO_DINOFF_DINOFF2_Pos (18) /*!< GPIO_T::DINOFF: DINOFF2 Position */ +#define GPIO_DINOFF_DINOFF2_Msk (0x1ul << GPIO_DINOFF_DINOFF2_Pos) /*!< GPIO_T::DINOFF: DINOFF2 Mask */ + +#define GPIO_DINOFF_DINOFF3_Pos (19) /*!< GPIO_T::DINOFF: DINOFF3 Position */ +#define GPIO_DINOFF_DINOFF3_Msk (0x1ul << GPIO_DINOFF_DINOFF3_Pos) /*!< GPIO_T::DINOFF: DINOFF3 Mask */ + +#define GPIO_DINOFF_DINOFF4_Pos (20) /*!< GPIO_T::DINOFF: DINOFF4 Position */ +#define GPIO_DINOFF_DINOFF4_Msk (0x1ul << GPIO_DINOFF_DINOFF4_Pos) /*!< GPIO_T::DINOFF: DINOFF4 Mask */ + +#define GPIO_DINOFF_DINOFF5_Pos (21) /*!< GPIO_T::DINOFF: DINOFF5 Position */ +#define GPIO_DINOFF_DINOFF5_Msk (0x1ul << GPIO_DINOFF_DINOFF5_Pos) /*!< GPIO_T::DINOFF: DINOFF5 Mask */ + +#define GPIO_DINOFF_DINOFF6_Pos (22) /*!< GPIO_T::DINOFF: DINOFF6 Position */ +#define GPIO_DINOFF_DINOFF6_Msk (0x1ul << GPIO_DINOFF_DINOFF6_Pos) /*!< GPIO_T::DINOFF: DINOFF6 Mask */ + +#define GPIO_DINOFF_DINOFF7_Pos (23) /*!< GPIO_T::DINOFF: DINOFF7 Position */ +#define GPIO_DINOFF_DINOFF7_Msk (0x1ul << GPIO_DINOFF_DINOFF7_Pos) /*!< GPIO_T::DINOFF: DINOFF7 Mask */ + +#define GPIO_DINOFF_DINOFF8_Pos (24) /*!< GPIO_T::DINOFF: DINOFF8 Position */ +#define GPIO_DINOFF_DINOFF8_Msk (0x1ul << GPIO_DINOFF_DINOFF8_Pos) /*!< GPIO_T::DINOFF: DINOFF8 Mask */ + +#define GPIO_DINOFF_DINOFF9_Pos (25) /*!< GPIO_T::DINOFF: DINOFF9 Position */ +#define GPIO_DINOFF_DINOFF9_Msk (0x1ul << GPIO_DINOFF_DINOFF9_Pos) /*!< GPIO_T::DINOFF: DINOFF9 Mask */ + +#define GPIO_DINOFF_DINOFF10_Pos (26) /*!< GPIO_T::DINOFF: DINOFF10 Position */ +#define GPIO_DINOFF_DINOFF10_Msk (0x1ul << GPIO_DINOFF_DINOFF10_Pos) /*!< GPIO_T::DINOFF: DINOFF10 Mask */ + +#define GPIO_DINOFF_DINOFF11_Pos (27) /*!< GPIO_T::DINOFF: DINOFF11 Position */ +#define GPIO_DINOFF_DINOFF11_Msk (0x1ul << GPIO_DINOFF_DINOFF11_Pos) /*!< GPIO_T::DINOFF: DINOFF11 Mask */ + +#define GPIO_DINOFF_DINOFF12_Pos (28) /*!< GPIO_T::DINOFF: DINOFF12 Position */ +#define GPIO_DINOFF_DINOFF12_Msk (0x1ul << GPIO_DINOFF_DINOFF12_Pos) /*!< GPIO_T::DINOFF: DINOFF12 Mask */ + +#define GPIO_DINOFF_DINOFF13_Pos (29) /*!< GPIO_T::DINOFF: DINOFF13 Position */ +#define GPIO_DINOFF_DINOFF13_Msk (0x1ul << GPIO_DINOFF_DINOFF13_Pos) /*!< GPIO_T::DINOFF: DINOFF13 Mask */ + +#define GPIO_DINOFF_DINOFF14_Pos (30) /*!< GPIO_T::DINOFF: DINOFF14 Position */ +#define GPIO_DINOFF_DINOFF14_Msk (0x1ul << GPIO_DINOFF_DINOFF14_Pos) /*!< GPIO_T::DINOFF: DINOFF14 Mask */ + +#define GPIO_DINOFF_DINOFF15_Pos (31) /*!< GPIO_T::DINOFF: DINOFF15 Position */ +#define GPIO_DINOFF_DINOFF15_Msk (0x1ul << GPIO_DINOFF_DINOFF15_Pos) /*!< GPIO_T::DINOFF: DINOFF15 Mask */ + +#define GPIO_DOUT_DOUT0_Pos (0) /*!< GPIO_T::DOUT: DOUT0 Position */ +#define GPIO_DOUT_DOUT0_Msk (0x1ul << GPIO_DOUT_DOUT0_Pos) /*!< GPIO_T::DOUT: DOUT0 Mask */ + +#define GPIO_DOUT_DOUT1_Pos (1) /*!< GPIO_T::DOUT: DOUT1 Position */ +#define GPIO_DOUT_DOUT1_Msk (0x1ul << GPIO_DOUT_DOUT1_Pos) /*!< GPIO_T::DOUT: DOUT1 Mask */ + +#define GPIO_DOUT_DOUT2_Pos (2) /*!< GPIO_T::DOUT: DOUT2 Position */ +#define GPIO_DOUT_DOUT2_Msk (0x1ul << GPIO_DOUT_DOUT2_Pos) /*!< GPIO_T::DOUT: DOUT2 Mask */ + +#define GPIO_DOUT_DOUT3_Pos (3) /*!< GPIO_T::DOUT: DOUT3 Position */ +#define GPIO_DOUT_DOUT3_Msk (0x1ul << GPIO_DOUT_DOUT3_Pos) /*!< GPIO_T::DOUT: DOUT3 Mask */ + +#define GPIO_DOUT_DOUT4_Pos (4) /*!< GPIO_T::DOUT: DOUT4 Position */ +#define GPIO_DOUT_DOUT4_Msk (0x1ul << GPIO_DOUT_DOUT4_Pos) /*!< GPIO_T::DOUT: DOUT4 Mask */ + +#define GPIO_DOUT_DOUT5_Pos (5) /*!< GPIO_T::DOUT: DOUT5 Position */ +#define GPIO_DOUT_DOUT5_Msk (0x1ul << GPIO_DOUT_DOUT5_Pos) /*!< GPIO_T::DOUT: DOUT5 Mask */ + +#define GPIO_DOUT_DOUT6_Pos (6) /*!< GPIO_T::DOUT: DOUT6 Position */ +#define GPIO_DOUT_DOUT6_Msk (0x1ul << GPIO_DOUT_DOUT6_Pos) /*!< GPIO_T::DOUT: DOUT6 Mask */ + +#define GPIO_DOUT_DOUT7_Pos (7) /*!< GPIO_T::DOUT: DOUT7 Position */ +#define GPIO_DOUT_DOUT7_Msk (0x1ul << GPIO_DOUT_DOUT7_Pos) /*!< GPIO_T::DOUT: DOUT7 Mask */ + +#define GPIO_DOUT_DOUT8_Pos (8) /*!< GPIO_T::DOUT: DOUT8 Position */ +#define GPIO_DOUT_DOUT8_Msk (0x1ul << GPIO_DOUT_DOUT8_Pos) /*!< GPIO_T::DOUT: DOUT8 Mask */ + +#define GPIO_DOUT_DOUT9_Pos (9) /*!< GPIO_T::DOUT: DOUT9 Position */ +#define GPIO_DOUT_DOUT9_Msk (0x1ul << GPIO_DOUT_DOUT9_Pos) /*!< GPIO_T::DOUT: DOUT9 Mask */ + +#define GPIO_DOUT_DOUT10_Pos (10) /*!< GPIO_T::DOUT: DOUT10 Position */ +#define GPIO_DOUT_DOUT10_Msk (0x1ul << GPIO_DOUT_DOUT10_Pos) /*!< GPIO_T::DOUT: DOUT10 Mask */ + +#define GPIO_DOUT_DOUT11_Pos (11) /*!< GPIO_T::DOUT: DOUT11 Position */ +#define GPIO_DOUT_DOUT11_Msk (0x1ul << GPIO_DOUT_DOUT11_Pos) /*!< GPIO_T::DOUT: DOUT11 Mask */ + +#define GPIO_DOUT_DOUT12_Pos (12) /*!< GPIO_T::DOUT: DOUT12 Position */ +#define GPIO_DOUT_DOUT12_Msk (0x1ul << GPIO_DOUT_DOUT12_Pos) /*!< GPIO_T::DOUT: DOUT12 Mask */ + +#define GPIO_DOUT_DOUT13_Pos (13) /*!< GPIO_T::DOUT: DOUT13 Position */ +#define GPIO_DOUT_DOUT13_Msk (0x1ul << GPIO_DOUT_DOUT13_Pos) /*!< GPIO_T::DOUT: DOUT13 Mask */ + +#define GPIO_DOUT_DOUT14_Pos (14) /*!< GPIO_T::DOUT: DOUT14 Position */ +#define GPIO_DOUT_DOUT14_Msk (0x1ul << GPIO_DOUT_DOUT14_Pos) /*!< GPIO_T::DOUT: DOUT14 Mask */ + +#define GPIO_DOUT_DOUT15_Pos (15) /*!< GPIO_T::DOUT: DOUT15 Position */ +#define GPIO_DOUT_DOUT15_Msk (0x1ul << GPIO_DOUT_DOUT15_Pos) /*!< GPIO_T::DOUT: DOUT15 Mask */ + +#define GPIO_DATMSK_DMASK0_Pos (0) /*!< GPIO_T::DATMSK: DMASK0 Position */ +#define GPIO_DATMSK_DMASK0_Msk (0x1ul << GPIO_DATMSK_DMASK0_Pos) /*!< GPIO_T::DATMSK: DMASK0 Mask */ + +#define GPIO_DATMSK_DMASK1_Pos (1) /*!< GPIO_T::DATMSK: DMASK1 Position */ +#define GPIO_DATMSK_DMASK1_Msk (0x1ul << GPIO_DATMSK_DMASK1_Pos) /*!< GPIO_T::DATMSK: DMASK1 Mask */ + +#define GPIO_DATMSK_DMASK2_Pos (2) /*!< GPIO_T::DATMSK: DMASK2 Position */ +#define GPIO_DATMSK_DMASK2_Msk (0x1ul << GPIO_DATMSK_DMASK2_Pos) /*!< GPIO_T::DATMSK: DMASK2 Mask */ + +#define GPIO_DATMSK_DMASK3_Pos (3) /*!< GPIO_T::DATMSK: DMASK3 Position */ +#define GPIO_DATMSK_DMASK3_Msk (0x1ul << GPIO_DATMSK_DMASK3_Pos) /*!< GPIO_T::DATMSK: DMASK3 Mask */ + +#define GPIO_DATMSK_DMASK4_Pos (4) /*!< GPIO_T::DATMSK: DMASK4 Position */ +#define GPIO_DATMSK_DMASK4_Msk (0x1ul << GPIO_DATMSK_DMASK4_Pos) /*!< GPIO_T::DATMSK: DMASK4 Mask */ + +#define GPIO_DATMSK_DMASK5_Pos (5) /*!< GPIO_T::DATMSK: DMASK5 Position */ +#define GPIO_DATMSK_DMASK5_Msk (0x1ul << GPIO_DATMSK_DMASK5_Pos) /*!< GPIO_T::DATMSK: DMASK5 Mask */ + +#define GPIO_DATMSK_DMASK6_Pos (6) /*!< GPIO_T::DATMSK: DMASK6 Position */ +#define GPIO_DATMSK_DMASK6_Msk (0x1ul << GPIO_DATMSK_DMASK6_Pos) /*!< GPIO_T::DATMSK: DMASK6 Mask */ + +#define GPIO_DATMSK_DMASK7_Pos (7) /*!< GPIO_T::DATMSK: DMASK7 Position */ +#define GPIO_DATMSK_DMASK7_Msk (0x1ul << GPIO_DATMSK_DMASK7_Pos) /*!< GPIO_T::DATMSK: DMASK7 Mask */ + +#define GPIO_DATMSK_DMASK8_Pos (8) /*!< GPIO_T::DATMSK: DMASK8 Position */ +#define GPIO_DATMSK_DMASK8_Msk (0x1ul << GPIO_DATMSK_DMASK8_Pos) /*!< GPIO_T::DATMSK: DMASK8 Mask */ + +#define GPIO_DATMSK_DMASK9_Pos (9) /*!< GPIO_T::DATMSK: DMASK9 Position */ +#define GPIO_DATMSK_DMASK9_Msk (0x1ul << GPIO_DATMSK_DMASK9_Pos) /*!< GPIO_T::DATMSK: DMASK9 Mask */ + +#define GPIO_DATMSK_DMASK10_Pos (10) /*!< GPIO_T::DATMSK: DMASK10 Position */ +#define GPIO_DATMSK_DMASK10_Msk (0x1ul << GPIO_DATMSK_DMASK10_Pos) /*!< GPIO_T::DATMSK: DMASK10 Mask */ + +#define GPIO_DATMSK_DMASK11_Pos (11) /*!< GPIO_T::DATMSK: DMASK11 Position */ +#define GPIO_DATMSK_DMASK11_Msk (0x1ul << GPIO_DATMSK_DMASK11_Pos) /*!< GPIO_T::DATMSK: DMASK11 Mask */ + +#define GPIO_DATMSK_DMASK12_Pos (12) /*!< GPIO_T::DATMSK: DMASK12 Position */ +#define GPIO_DATMSK_DMASK12_Msk (0x1ul << GPIO_DATMSK_DMASK12_Pos) /*!< GPIO_T::DATMSK: DMASK12 Mask */ + +#define GPIO_DATMSK_DMASK13_Pos (13) /*!< GPIO_T::DATMSK: DMASK13 Position */ +#define GPIO_DATMSK_DMASK13_Msk (0x1ul << GPIO_DATMSK_DMASK13_Pos) /*!< GPIO_T::DATMSK: DMASK13 Mask */ + +#define GPIO_DATMSK_DMASK14_Pos (14) /*!< GPIO_T::DATMSK: DMASK14 Position */ +#define GPIO_DATMSK_DMASK14_Msk (0x1ul << GPIO_DATMSK_DMASK14_Pos) /*!< GPIO_T::DATMSK: DMASK14 Mask */ + +#define GPIO_DATMSK_DMASK15_Pos (15) /*!< GPIO_T::DATMSK: DMASK15 Position */ +#define GPIO_DATMSK_DMASK15_Msk (0x1ul << GPIO_DATMSK_DMASK15_Pos) /*!< GPIO_T::DATMSK: DMASK15 Mask */ + +#define GPIO_PIN_PIN0_Pos (0) /*!< GPIO_T::PIN: PIN0 Position */ +#define GPIO_PIN_PIN0_Msk (0x1ul << GPIO_PIN_PIN0_Pos) /*!< GPIO_T::PIN: PIN0 Mask */ + +#define GPIO_PIN_PIN1_Pos (1) /*!< GPIO_T::PIN: PIN1 Position */ +#define GPIO_PIN_PIN1_Msk (0x1ul << GPIO_PIN_PIN1_Pos) /*!< GPIO_T::PIN: PIN1 Mask */ + +#define GPIO_PIN_PIN2_Pos (2) /*!< GPIO_T::PIN: PIN2 Position */ +#define GPIO_PIN_PIN2_Msk (0x1ul << GPIO_PIN_PIN2_Pos) /*!< GPIO_T::PIN: PIN2 Mask */ + +#define GPIO_PIN_PIN3_Pos (3) /*!< GPIO_T::PIN: PIN3 Position */ +#define GPIO_PIN_PIN3_Msk (0x1ul << GPIO_PIN_PIN3_Pos) /*!< GPIO_T::PIN: PIN3 Mask */ + +#define GPIO_PIN_PIN4_Pos (4) /*!< GPIO_T::PIN: PIN4 Position */ +#define GPIO_PIN_PIN4_Msk (0x1ul << GPIO_PIN_PIN4_Pos) /*!< GPIO_T::PIN: PIN4 Mask */ + +#define GPIO_PIN_PIN5_Pos (5) /*!< GPIO_T::PIN: PIN5 Position */ +#define GPIO_PIN_PIN5_Msk (0x1ul << GPIO_PIN_PIN5_Pos) /*!< GPIO_T::PIN: PIN5 Mask */ + +#define GPIO_PIN_PIN6_Pos (6) /*!< GPIO_T::PIN: PIN6 Position */ +#define GPIO_PIN_PIN6_Msk (0x1ul << GPIO_PIN_PIN6_Pos) /*!< GPIO_T::PIN: PIN6 Mask */ + +#define GPIO_PIN_PIN7_Pos (7) /*!< GPIO_T::PIN: PIN7 Position */ +#define GPIO_PIN_PIN7_Msk (0x1ul << GPIO_PIN_PIN7_Pos) /*!< GPIO_T::PIN: PIN7 Mask */ + +#define GPIO_PIN_PIN8_Pos (8) /*!< GPIO_T::PIN: PIN8 Position */ +#define GPIO_PIN_PIN8_Msk (0x1ul << GPIO_PIN_PIN8_Pos) /*!< GPIO_T::PIN: PIN8 Mask */ + +#define GPIO_PIN_PIN9_Pos (9) /*!< GPIO_T::PIN: PIN9 Position */ +#define GPIO_PIN_PIN9_Msk (0x1ul << GPIO_PIN_PIN9_Pos) /*!< GPIO_T::PIN: PIN9 Mask */ + +#define GPIO_PIN_PIN10_Pos (10) /*!< GPIO_T::PIN: PIN10 Position */ +#define GPIO_PIN_PIN10_Msk (0x1ul << GPIO_PIN_PIN10_Pos) /*!< GPIO_T::PIN: PIN10 Mask */ + +#define GPIO_PIN_PIN11_Pos (11) /*!< GPIO_T::PIN: PIN11 Position */ +#define GPIO_PIN_PIN11_Msk (0x1ul << GPIO_PIN_PIN11_Pos) /*!< GPIO_T::PIN: PIN11 Mask */ + +#define GPIO_PIN_PIN12_Pos (12) /*!< GPIO_T::PIN: PIN12 Position */ +#define GPIO_PIN_PIN12_Msk (0x1ul << GPIO_PIN_PIN12_Pos) /*!< GPIO_T::PIN: PIN12 Mask */ + +#define GPIO_PIN_PIN13_Pos (13) /*!< GPIO_T::PIN: PIN13 Position */ +#define GPIO_PIN_PIN13_Msk (0x1ul << GPIO_PIN_PIN13_Pos) /*!< GPIO_T::PIN: PIN13 Mask */ + +#define GPIO_PIN_PIN14_Pos (14) /*!< GPIO_T::PIN: PIN14 Position */ +#define GPIO_PIN_PIN14_Msk (0x1ul << GPIO_PIN_PIN14_Pos) /*!< GPIO_T::PIN: PIN14 Mask */ + +#define GPIO_PIN_PIN15_Pos (15) /*!< GPIO_T::PIN: PIN15 Position */ +#define GPIO_PIN_PIN15_Msk (0x1ul << GPIO_PIN_PIN15_Pos) /*!< GPIO_T::PIN: PIN15 Mask */ + +#define GPIO_DBEN_DBEN0_Pos (0) /*!< GPIO_T::DBEN: DBEN0 Position */ +#define GPIO_DBEN_DBEN0_Msk (0x1ul << GPIO_DBEN_DBEN0_Pos) /*!< GPIO_T::DBEN: DBEN0 Mask */ + +#define GPIO_DBEN_DBEN1_Pos (1) /*!< GPIO_T::DBEN: DBEN1 Position */ +#define GPIO_DBEN_DBEN1_Msk (0x1ul << GPIO_DBEN_DBEN1_Pos) /*!< GPIO_T::DBEN: DBEN1 Mask */ + +#define GPIO_DBEN_DBEN2_Pos (2) /*!< GPIO_T::DBEN: DBEN2 Position */ +#define GPIO_DBEN_DBEN2_Msk (0x1ul << GPIO_DBEN_DBEN2_Pos) /*!< GPIO_T::DBEN: DBEN2 Mask */ + +#define GPIO_DBEN_DBEN3_Pos (3) /*!< GPIO_T::DBEN: DBEN3 Position */ +#define GPIO_DBEN_DBEN3_Msk (0x1ul << GPIO_DBEN_DBEN3_Pos) /*!< GPIO_T::DBEN: DBEN3 Mask */ + +#define GPIO_DBEN_DBEN4_Pos (4) /*!< GPIO_T::DBEN: DBEN4 Position */ +#define GPIO_DBEN_DBEN4_Msk (0x1ul << GPIO_DBEN_DBEN4_Pos) /*!< GPIO_T::DBEN: DBEN4 Mask */ + +#define GPIO_DBEN_DBEN5_Pos (5) /*!< GPIO_T::DBEN: DBEN5 Position */ +#define GPIO_DBEN_DBEN5_Msk (0x1ul << GPIO_DBEN_DBEN5_Pos) /*!< GPIO_T::DBEN: DBEN5 Mask */ + +#define GPIO_DBEN_DBEN6_Pos (6) /*!< GPIO_T::DBEN: DBEN6 Position */ +#define GPIO_DBEN_DBEN6_Msk (0x1ul << GPIO_DBEN_DBEN6_Pos) /*!< GPIO_T::DBEN: DBEN6 Mask */ + +#define GPIO_DBEN_DBEN7_Pos (7) /*!< GPIO_T::DBEN: DBEN7 Position */ +#define GPIO_DBEN_DBEN7_Msk (0x1ul << GPIO_DBEN_DBEN7_Pos) /*!< GPIO_T::DBEN: DBEN7 Mask */ + +#define GPIO_DBEN_DBEN8_Pos (8) /*!< GPIO_T::DBEN: DBEN8 Position */ +#define GPIO_DBEN_DBEN8_Msk (0x1ul << GPIO_DBEN_DBEN8_Pos) /*!< GPIO_T::DBEN: DBEN8 Mask */ + +#define GPIO_DBEN_DBEN9_Pos (9) /*!< GPIO_T::DBEN: DBEN9 Position */ +#define GPIO_DBEN_DBEN9_Msk (0x1ul << GPIO_DBEN_DBEN9_Pos) /*!< GPIO_T::DBEN: DBEN9 Mask */ + +#define GPIO_DBEN_DBEN10_Pos (10) /*!< GPIO_T::DBEN: DBEN10 Position */ +#define GPIO_DBEN_DBEN10_Msk (0x1ul << GPIO_DBEN_DBEN10_Pos) /*!< GPIO_T::DBEN: DBEN10 Mask */ + +#define GPIO_DBEN_DBEN11_Pos (11) /*!< GPIO_T::DBEN: DBEN11 Position */ +#define GPIO_DBEN_DBEN11_Msk (0x1ul << GPIO_DBEN_DBEN11_Pos) /*!< GPIO_T::DBEN: DBEN11 Mask */ + +#define GPIO_DBEN_DBEN12_Pos (12) /*!< GPIO_T::DBEN: DBEN12 Position */ +#define GPIO_DBEN_DBEN12_Msk (0x1ul << GPIO_DBEN_DBEN12_Pos) /*!< GPIO_T::DBEN: DBEN12 Mask */ + +#define GPIO_DBEN_DBEN13_Pos (13) /*!< GPIO_T::DBEN: DBEN13 Position */ +#define GPIO_DBEN_DBEN13_Msk (0x1ul << GPIO_DBEN_DBEN13_Pos) /*!< GPIO_T::DBEN: DBEN13 Mask */ + +#define GPIO_DBEN_DBEN14_Pos (14) /*!< GPIO_T::DBEN: DBEN14 Position */ +#define GPIO_DBEN_DBEN14_Msk (0x1ul << GPIO_DBEN_DBEN14_Pos) /*!< GPIO_T::DBEN: DBEN14 Mask */ + +#define GPIO_DBEN_DBEN15_Pos (15) /*!< GPIO_T::DBEN: DBEN15 Position */ +#define GPIO_DBEN_DBEN15_Msk (0x1ul << GPIO_DBEN_DBEN15_Pos) /*!< GPIO_T::DBEN: DBEN15 Mask */ + +#define GPIO_INTTYPE_TYPE0_Pos (0) /*!< GPIO_T::INTTYPE: TYPE0 Position */ +#define GPIO_INTTYPE_TYPE0_Msk (0x1ul << GPIO_INTTYPE_TYPE0_Pos) /*!< GPIO_T::INTTYPE: TYPE0 Mask */ + +#define GPIO_INTTYPE_TYPE1_Pos (1) /*!< GPIO_T::INTTYPE: TYPE1 Position */ +#define GPIO_INTTYPE_TYPE1_Msk (0x1ul << GPIO_INTTYPE_TYPE1_Pos) /*!< GPIO_T::INTTYPE: TYPE1 Mask */ + +#define GPIO_INTTYPE_TYPE2_Pos (2) /*!< GPIO_T::INTTYPE: TYPE2 Position */ +#define GPIO_INTTYPE_TYPE2_Msk (0x1ul << GPIO_INTTYPE_TYPE2_Pos) /*!< GPIO_T::INTTYPE: TYPE2 Mask */ + +#define GPIO_INTTYPE_TYPE3_Pos (3) /*!< GPIO_T::INTTYPE: TYPE3 Position */ +#define GPIO_INTTYPE_TYPE3_Msk (0x1ul << GPIO_INTTYPE_TYPE3_Pos) /*!< GPIO_T::INTTYPE: TYPE3 Mask */ + +#define GPIO_INTTYPE_TYPE4_Pos (4) /*!< GPIO_T::INTTYPE: TYPE4 Position */ +#define GPIO_INTTYPE_TYPE4_Msk (0x1ul << GPIO_INTTYPE_TYPE4_Pos) /*!< GPIO_T::INTTYPE: TYPE4 Mask */ + +#define GPIO_INTTYPE_TYPE5_Pos (5) /*!< GPIO_T::INTTYPE: TYPE5 Position */ +#define GPIO_INTTYPE_TYPE5_Msk (0x1ul << GPIO_INTTYPE_TYPE5_Pos) /*!< GPIO_T::INTTYPE: TYPE5 Mask */ + +#define GPIO_INTTYPE_TYPE6_Pos (6) /*!< GPIO_T::INTTYPE: TYPE6 Position */ +#define GPIO_INTTYPE_TYPE6_Msk (0x1ul << GPIO_INTTYPE_TYPE6_Pos) /*!< GPIO_T::INTTYPE: TYPE6 Mask */ + +#define GPIO_INTTYPE_TYPE7_Pos (7) /*!< GPIO_T::INTTYPE: TYPE7 Position */ +#define GPIO_INTTYPE_TYPE7_Msk (0x1ul << GPIO_INTTYPE_TYPE7_Pos) /*!< GPIO_T::INTTYPE: TYPE7 Mask */ + +#define GPIO_INTTYPE_TYPE8_Pos (8) /*!< GPIO_T::INTTYPE: TYPE8 Position */ +#define GPIO_INTTYPE_TYPE8_Msk (0x1ul << GPIO_INTTYPE_TYPE8_Pos) /*!< GPIO_T::INTTYPE: TYPE8 Mask */ + +#define GPIO_INTTYPE_TYPE9_Pos (9) /*!< GPIO_T::INTTYPE: TYPE9 Position */ +#define GPIO_INTTYPE_TYPE9_Msk (0x1ul << GPIO_INTTYPE_TYPE9_Pos) /*!< GPIO_T::INTTYPE: TYPE9 Mask */ + +#define GPIO_INTTYPE_TYPE10_Pos (10) /*!< GPIO_T::INTTYPE: TYPE10 Position */ +#define GPIO_INTTYPE_TYPE10_Msk (0x1ul << GPIO_INTTYPE_TYPE10_Pos) /*!< GPIO_T::INTTYPE: TYPE10 Mask */ + +#define GPIO_INTTYPE_TYPE11_Pos (11) /*!< GPIO_T::INTTYPE: TYPE11 Position */ +#define GPIO_INTTYPE_TYPE11_Msk (0x1ul << GPIO_INTTYPE_TYPE11_Pos) /*!< GPIO_T::INTTYPE: TYPE11 Mask */ + +#define GPIO_INTTYPE_TYPE12_Pos (12) /*!< GPIO_T::INTTYPE: TYPE12 Position */ +#define GPIO_INTTYPE_TYPE12_Msk (0x1ul << GPIO_INTTYPE_TYPE12_Pos) /*!< GPIO_T::INTTYPE: TYPE12 Mask */ + +#define GPIO_INTTYPE_TYPE13_Pos (13) /*!< GPIO_T::INTTYPE: TYPE13 Position */ +#define GPIO_INTTYPE_TYPE13_Msk (0x1ul << GPIO_INTTYPE_TYPE13_Pos) /*!< GPIO_T::INTTYPE: TYPE13 Mask */ + +#define GPIO_INTTYPE_TYPE14_Pos (14) /*!< GPIO_T::INTTYPE: TYPE14 Position */ +#define GPIO_INTTYPE_TYPE14_Msk (0x1ul << GPIO_INTTYPE_TYPE14_Pos) /*!< GPIO_T::INTTYPE: TYPE14 Mask */ + +#define GPIO_INTTYPE_TYPE15_Pos (15) /*!< GPIO_T::INTTYPE: TYPE15 Position */ +#define GPIO_INTTYPE_TYPE15_Msk (0x1ul << GPIO_INTTYPE_TYPE15_Pos) /*!< GPIO_T::INTTYPE: TYPE15 Mask */ + +#define GPIO_INTEN_FLIEN0_Pos (0) /*!< GPIO_T::INTEN: FLIEN0 Position */ +#define GPIO_INTEN_FLIEN0_Msk (0x1ul << GPIO_INTEN_FLIEN0_Pos) /*!< GPIO_T::INTEN: FLIEN0 Mask */ + +#define GPIO_INTEN_FLIEN1_Pos (1) /*!< GPIO_T::INTEN: FLIEN1 Position */ +#define GPIO_INTEN_FLIEN1_Msk (0x1ul << GPIO_INTEN_FLIEN1_Pos) /*!< GPIO_T::INTEN: FLIEN1 Mask */ + +#define GPIO_INTEN_FLIEN2_Pos (2) /*!< GPIO_T::INTEN: FLIEN2 Position */ +#define GPIO_INTEN_FLIEN2_Msk (0x1ul << GPIO_INTEN_FLIEN2_Pos) /*!< GPIO_T::INTEN: FLIEN2 Mask */ + +#define GPIO_INTEN_FLIEN3_Pos (3) /*!< GPIO_T::INTEN: FLIEN3 Position */ +#define GPIO_INTEN_FLIEN3_Msk (0x1ul << GPIO_INTEN_FLIEN3_Pos) /*!< GPIO_T::INTEN: FLIEN3 Mask */ + +#define GPIO_INTEN_FLIEN4_Pos (4) /*!< GPIO_T::INTEN: FLIEN4 Position */ +#define GPIO_INTEN_FLIEN4_Msk (0x1ul << GPIO_INTEN_FLIEN4_Pos) /*!< GPIO_T::INTEN: FLIEN4 Mask */ + +#define GPIO_INTEN_FLIEN5_Pos (5) /*!< GPIO_T::INTEN: FLIEN5 Position */ +#define GPIO_INTEN_FLIEN5_Msk (0x1ul << GPIO_INTEN_FLIEN5_Pos) /*!< GPIO_T::INTEN: FLIEN5 Mask */ + +#define GPIO_INTEN_FLIEN6_Pos (6) /*!< GPIO_T::INTEN: FLIEN6 Position */ +#define GPIO_INTEN_FLIEN6_Msk (0x1ul << GPIO_INTEN_FLIEN6_Pos) /*!< GPIO_T::INTEN: FLIEN6 Mask */ + +#define GPIO_INTEN_FLIEN7_Pos (7) /*!< GPIO_T::INTEN: FLIEN7 Position */ +#define GPIO_INTEN_FLIEN7_Msk (0x1ul << GPIO_INTEN_FLIEN7_Pos) /*!< GPIO_T::INTEN: FLIEN7 Mask */ + +#define GPIO_INTEN_FLIEN8_Pos (8) /*!< GPIO_T::INTEN: FLIEN8 Position */ +#define GPIO_INTEN_FLIEN8_Msk (0x1ul << GPIO_INTEN_FLIEN8_Pos) /*!< GPIO_T::INTEN: FLIEN8 Mask */ + +#define GPIO_INTEN_FLIEN9_Pos (9) /*!< GPIO_T::INTEN: FLIEN9 Position */ +#define GPIO_INTEN_FLIEN9_Msk (0x1ul << GPIO_INTEN_FLIEN9_Pos) /*!< GPIO_T::INTEN: FLIEN9 Mask */ + +#define GPIO_INTEN_FLIEN10_Pos (10) /*!< GPIO_T::INTEN: FLIEN10 Position */ +#define GPIO_INTEN_FLIEN10_Msk (0x1ul << GPIO_INTEN_FLIEN10_Pos) /*!< GPIO_T::INTEN: FLIEN10 Mask */ + +#define GPIO_INTEN_FLIEN11_Pos (11) /*!< GPIO_T::INTEN: FLIEN11 Position */ +#define GPIO_INTEN_FLIEN11_Msk (0x1ul << GPIO_INTEN_FLIEN11_Pos) /*!< GPIO_T::INTEN: FLIEN11 Mask */ + +#define GPIO_INTEN_FLIEN12_Pos (12) /*!< GPIO_T::INTEN: FLIEN12 Position */ +#define GPIO_INTEN_FLIEN12_Msk (0x1ul << GPIO_INTEN_FLIEN12_Pos) /*!< GPIO_T::INTEN: FLIEN12 Mask */ + +#define GPIO_INTEN_FLIEN13_Pos (13) /*!< GPIO_T::INTEN: FLIEN13 Position */ +#define GPIO_INTEN_FLIEN13_Msk (0x1ul << GPIO_INTEN_FLIEN13_Pos) /*!< GPIO_T::INTEN: FLIEN13 Mask */ + +#define GPIO_INTEN_FLIEN14_Pos (14) /*!< GPIO_T::INTEN: FLIEN14 Position */ +#define GPIO_INTEN_FLIEN14_Msk (0x1ul << GPIO_INTEN_FLIEN14_Pos) /*!< GPIO_T::INTEN: FLIEN14 Mask */ + +#define GPIO_INTEN_FLIEN15_Pos (15) /*!< GPIO_T::INTEN: FLIEN15 Position */ +#define GPIO_INTEN_FLIEN15_Msk (0x1ul << GPIO_INTEN_FLIEN15_Pos) /*!< GPIO_T::INTEN: FLIEN15 Mask */ + +#define GPIO_INTEN_RHIEN0_Pos (16) /*!< GPIO_T::INTEN: RHIEN0 Position */ +#define GPIO_INTEN_RHIEN0_Msk (0x1ul << GPIO_INTEN_RHIEN0_Pos) /*!< GPIO_T::INTEN: RHIEN0 Mask */ + +#define GPIO_INTEN_RHIEN1_Pos (17) /*!< GPIO_T::INTEN: RHIEN1 Position */ +#define GPIO_INTEN_RHIEN1_Msk (0x1ul << GPIO_INTEN_RHIEN1_Pos) /*!< GPIO_T::INTEN: RHIEN1 Mask */ + +#define GPIO_INTEN_RHIEN2_Pos (18) /*!< GPIO_T::INTEN: RHIEN2 Position */ +#define GPIO_INTEN_RHIEN2_Msk (0x1ul << GPIO_INTEN_RHIEN2_Pos) /*!< GPIO_T::INTEN: RHIEN2 Mask */ + +#define GPIO_INTEN_RHIEN3_Pos (19) /*!< GPIO_T::INTEN: RHIEN3 Position */ +#define GPIO_INTEN_RHIEN3_Msk (0x1ul << GPIO_INTEN_RHIEN3_Pos) /*!< GPIO_T::INTEN: RHIEN3 Mask */ + +#define GPIO_INTEN_RHIEN4_Pos (20) /*!< GPIO_T::INTEN: RHIEN4 Position */ +#define GPIO_INTEN_RHIEN4_Msk (0x1ul << GPIO_INTEN_RHIEN4_Pos) /*!< GPIO_T::INTEN: RHIEN4 Mask */ + +#define GPIO_INTEN_RHIEN5_Pos (21) /*!< GPIO_T::INTEN: RHIEN5 Position */ +#define GPIO_INTEN_RHIEN5_Msk (0x1ul << GPIO_INTEN_RHIEN5_Pos) /*!< GPIO_T::INTEN: RHIEN5 Mask */ + +#define GPIO_INTEN_RHIEN6_Pos (22) /*!< GPIO_T::INTEN: RHIEN6 Position */ +#define GPIO_INTEN_RHIEN6_Msk (0x1ul << GPIO_INTEN_RHIEN6_Pos) /*!< GPIO_T::INTEN: RHIEN6 Mask */ + +#define GPIO_INTEN_RHIEN7_Pos (23) /*!< GPIO_T::INTEN: RHIEN7 Position */ +#define GPIO_INTEN_RHIEN7_Msk (0x1ul << GPIO_INTEN_RHIEN7_Pos) /*!< GPIO_T::INTEN: RHIEN7 Mask */ + +#define GPIO_INTEN_RHIEN8_Pos (24) /*!< GPIO_T::INTEN: RHIEN8 Position */ +#define GPIO_INTEN_RHIEN8_Msk (0x1ul << GPIO_INTEN_RHIEN8_Pos) /*!< GPIO_T::INTEN: RHIEN8 Mask */ + +#define GPIO_INTEN_RHIEN9_Pos (25) /*!< GPIO_T::INTEN: RHIEN9 Position */ +#define GPIO_INTEN_RHIEN9_Msk (0x1ul << GPIO_INTEN_RHIEN9_Pos) /*!< GPIO_T::INTEN: RHIEN9 Mask */ + +#define GPIO_INTEN_RHIEN10_Pos (26) /*!< GPIO_T::INTEN: RHIEN10 Position */ +#define GPIO_INTEN_RHIEN10_Msk (0x1ul << GPIO_INTEN_RHIEN10_Pos) /*!< GPIO_T::INTEN: RHIEN10 Mask */ + +#define GPIO_INTEN_RHIEN11_Pos (27) /*!< GPIO_T::INTEN: RHIEN11 Position */ +#define GPIO_INTEN_RHIEN11_Msk (0x1ul << GPIO_INTEN_RHIEN11_Pos) /*!< GPIO_T::INTEN: RHIEN11 Mask */ + +#define GPIO_INTEN_RHIEN12_Pos (28) /*!< GPIO_T::INTEN: RHIEN12 Position */ +#define GPIO_INTEN_RHIEN12_Msk (0x1ul << GPIO_INTEN_RHIEN12_Pos) /*!< GPIO_T::INTEN: RHIEN12 Mask */ + +#define GPIO_INTEN_RHIEN13_Pos (29) /*!< GPIO_T::INTEN: RHIEN13 Position */ +#define GPIO_INTEN_RHIEN13_Msk (0x1ul << GPIO_INTEN_RHIEN13_Pos) /*!< GPIO_T::INTEN: RHIEN13 Mask */ + +#define GPIO_INTEN_RHIEN14_Pos (30) /*!< GPIO_T::INTEN: RHIEN14 Position */ +#define GPIO_INTEN_RHIEN14_Msk (0x1ul << GPIO_INTEN_RHIEN14_Pos) /*!< GPIO_T::INTEN: RHIEN14 Mask */ + +#define GPIO_INTEN_RHIEN15_Pos (31) /*!< GPIO_T::INTEN: RHIEN15 Position */ +#define GPIO_INTEN_RHIEN15_Msk (0x1ul << GPIO_INTEN_RHIEN15_Pos) /*!< GPIO_T::INTEN: RHIEN15 Mask */ + +#define GPIO_INTSRC_INTSRC0_Pos (0) /*!< GPIO_T::INTSRC: INTSRC0 Position */ +#define GPIO_INTSRC_INTSRC0_Msk (0x1ul << GPIO_INTSRC_INTSRC0_Pos) /*!< GPIO_T::INTSRC: INTSRC0 Mask */ + +#define GPIO_INTSRC_INTSRC1_Pos (1) /*!< GPIO_T::INTSRC: INTSRC1 Position */ +#define GPIO_INTSRC_INTSRC1_Msk (0x1ul << GPIO_INTSRC_INTSRC1_Pos) /*!< GPIO_T::INTSRC: INTSRC1 Mask */ + +#define GPIO_INTSRC_INTSRC2_Pos (2) /*!< GPIO_T::INTSRC: INTSRC2 Position */ +#define GPIO_INTSRC_INTSRC2_Msk (0x1ul << GPIO_INTSRC_INTSRC2_Pos) /*!< GPIO_T::INTSRC: INTSRC2 Mask */ + +#define GPIO_INTSRC_INTSRC3_Pos (3) /*!< GPIO_T::INTSRC: INTSRC3 Position */ +#define GPIO_INTSRC_INTSRC3_Msk (0x1ul << GPIO_INTSRC_INTSRC3_Pos) /*!< GPIO_T::INTSRC: INTSRC3 Mask */ + +#define GPIO_INTSRC_INTSRC4_Pos (4) /*!< GPIO_T::INTSRC: INTSRC4 Position */ +#define GPIO_INTSRC_INTSRC4_Msk (0x1ul << GPIO_INTSRC_INTSRC4_Pos) /*!< GPIO_T::INTSRC: INTSRC4 Mask */ + +#define GPIO_INTSRC_INTSRC5_Pos (5) /*!< GPIO_T::INTSRC: INTSRC5 Position */ +#define GPIO_INTSRC_INTSRC5_Msk (0x1ul << GPIO_INTSRC_INTSRC5_Pos) /*!< GPIO_T::INTSRC: INTSRC5 Mask */ + +#define GPIO_INTSRC_INTSRC6_Pos (6) /*!< GPIO_T::INTSRC: INTSRC6 Position */ +#define GPIO_INTSRC_INTSRC6_Msk (0x1ul << GPIO_INTSRC_INTSRC6_Pos) /*!< GPIO_T::INTSRC: INTSRC6 Mask */ + +#define GPIO_INTSRC_INTSRC7_Pos (7) /*!< GPIO_T::INTSRC: INTSRC7 Position */ +#define GPIO_INTSRC_INTSRC7_Msk (0x1ul << GPIO_INTSRC_INTSRC7_Pos) /*!< GPIO_T::INTSRC: INTSRC7 Mask */ + +#define GPIO_INTSRC_INTSRC8_Pos (8) /*!< GPIO_T::INTSRC: INTSRC8 Position */ +#define GPIO_INTSRC_INTSRC8_Msk (0x1ul << GPIO_INTSRC_INTSRC8_Pos) /*!< GPIO_T::INTSRC: INTSRC8 Mask */ + +#define GPIO_INTSRC_INTSRC9_Pos (9) /*!< GPIO_T::INTSRC: INTSRC9 Position */ +#define GPIO_INTSRC_INTSRC9_Msk (0x1ul << GPIO_INTSRC_INTSRC9_Pos) /*!< GPIO_T::INTSRC: INTSRC9 Mask */ + +#define GPIO_INTSRC_INTSRC10_Pos (10) /*!< GPIO_T::INTSRC: INTSRC10 Position */ +#define GPIO_INTSRC_INTSRC10_Msk (0x1ul << GPIO_INTSRC_INTSRC10_Pos) /*!< GPIO_T::INTSRC: INTSRC10 Mask */ + +#define GPIO_INTSRC_INTSRC11_Pos (11) /*!< GPIO_T::INTSRC: INTSRC11 Position */ +#define GPIO_INTSRC_INTSRC11_Msk (0x1ul << GPIO_INTSRC_INTSRC11_Pos) /*!< GPIO_T::INTSRC: INTSRC11 Mask */ + +#define GPIO_INTSRC_INTSRC12_Pos (12) /*!< GPIO_T::INTSRC: INTSRC12 Position */ +#define GPIO_INTSRC_INTSRC12_Msk (0x1ul << GPIO_INTSRC_INTSRC12_Pos) /*!< GPIO_T::INTSRC: INTSRC12 Mask */ + +#define GPIO_INTSRC_INTSRC13_Pos (13) /*!< GPIO_T::INTSRC: INTSRC13 Position */ +#define GPIO_INTSRC_INTSRC13_Msk (0x1ul << GPIO_INTSRC_INTSRC13_Pos) /*!< GPIO_T::INTSRC: INTSRC13 Mask */ + +#define GPIO_INTSRC_INTSRC14_Pos (14) /*!< GPIO_T::INTSRC: INTSRC14 Position */ +#define GPIO_INTSRC_INTSRC14_Msk (0x1ul << GPIO_INTSRC_INTSRC14_Pos) /*!< GPIO_T::INTSRC: INTSRC14 Mask */ + +#define GPIO_INTSRC_INTSRC15_Pos (15) /*!< GPIO_T::INTSRC: INTSRC15 Position */ +#define GPIO_INTSRC_INTSRC15_Msk (0x1ul << GPIO_INTSRC_INTSRC15_Pos) /*!< GPIO_T::INTSRC: INTSRC15 Mask */ + +#define GPIO_SMTEN_SMTEN0_Pos (0) /*!< GPIO_T::SMTEN: SMTEN0 Position */ +#define GPIO_SMTEN_SMTEN0_Msk (0x1ul << GPIO_SMTEN_SMTEN0_Pos) /*!< GPIO_T::SMTEN: SMTEN0 Mask */ + +#define GPIO_SMTEN_SMTEN1_Pos (1) /*!< GPIO_T::SMTEN: SMTEN1 Position */ +#define GPIO_SMTEN_SMTEN1_Msk (0x1ul << GPIO_SMTEN_SMTEN1_Pos) /*!< GPIO_T::SMTEN: SMTEN1 Mask */ + +#define GPIO_SMTEN_SMTEN2_Pos (2) /*!< GPIO_T::SMTEN: SMTEN2 Position */ +#define GPIO_SMTEN_SMTEN2_Msk (0x1ul << GPIO_SMTEN_SMTEN2_Pos) /*!< GPIO_T::SMTEN: SMTEN2 Mask */ + +#define GPIO_SMTEN_SMTEN3_Pos (3) /*!< GPIO_T::SMTEN: SMTEN3 Position */ +#define GPIO_SMTEN_SMTEN3_Msk (0x1ul << GPIO_SMTEN_SMTEN3_Pos) /*!< GPIO_T::SMTEN: SMTEN3 Mask */ + +#define GPIO_SMTEN_SMTEN4_Pos (4) /*!< GPIO_T::SMTEN: SMTEN4 Position */ +#define GPIO_SMTEN_SMTEN4_Msk (0x1ul << GPIO_SMTEN_SMTEN4_Pos) /*!< GPIO_T::SMTEN: SMTEN4 Mask */ + +#define GPIO_SMTEN_SMTEN5_Pos (5) /*!< GPIO_T::SMTEN: SMTEN5 Position */ +#define GPIO_SMTEN_SMTEN5_Msk (0x1ul << GPIO_SMTEN_SMTEN5_Pos) /*!< GPIO_T::SMTEN: SMTEN5 Mask */ + +#define GPIO_SMTEN_SMTEN6_Pos (6) /*!< GPIO_T::SMTEN: SMTEN6 Position */ +#define GPIO_SMTEN_SMTEN6_Msk (0x1ul << GPIO_SMTEN_SMTEN6_Pos) /*!< GPIO_T::SMTEN: SMTEN6 Mask */ + +#define GPIO_SMTEN_SMTEN7_Pos (7) /*!< GPIO_T::SMTEN: SMTEN7 Position */ +#define GPIO_SMTEN_SMTEN7_Msk (0x1ul << GPIO_SMTEN_SMTEN7_Pos) /*!< GPIO_T::SMTEN: SMTEN7 Mask */ + +#define GPIO_SMTEN_SMTEN8_Pos (8) /*!< GPIO_T::SMTEN: SMTEN8 Position */ +#define GPIO_SMTEN_SMTEN8_Msk (0x1ul << GPIO_SMTEN_SMTEN8_Pos) /*!< GPIO_T::SMTEN: SMTEN8 Mask */ + +#define GPIO_SMTEN_SMTEN9_Pos (9) /*!< GPIO_T::SMTEN: SMTEN9 Position */ +#define GPIO_SMTEN_SMTEN9_Msk (0x1ul << GPIO_SMTEN_SMTEN9_Pos) /*!< GPIO_T::SMTEN: SMTEN9 Mask */ + +#define GPIO_SMTEN_SMTEN10_Pos (10) /*!< GPIO_T::SMTEN: SMTEN10 Position */ +#define GPIO_SMTEN_SMTEN10_Msk (0x1ul << GPIO_SMTEN_SMTEN10_Pos) /*!< GPIO_T::SMTEN: SMTEN10 Mask */ + +#define GPIO_SMTEN_SMTEN11_Pos (11) /*!< GPIO_T::SMTEN: SMTEN11 Position */ +#define GPIO_SMTEN_SMTEN11_Msk (0x1ul << GPIO_SMTEN_SMTEN11_Pos) /*!< GPIO_T::SMTEN: SMTEN11 Mask */ + +#define GPIO_SMTEN_SMTEN12_Pos (12) /*!< GPIO_T::SMTEN: SMTEN12 Position */ +#define GPIO_SMTEN_SMTEN12_Msk (0x1ul << GPIO_SMTEN_SMTEN12_Pos) /*!< GPIO_T::SMTEN: SMTEN12 Mask */ + +#define GPIO_SMTEN_SMTEN13_Pos (13) /*!< GPIO_T::SMTEN: SMTEN13 Position */ +#define GPIO_SMTEN_SMTEN13_Msk (0x1ul << GPIO_SMTEN_SMTEN13_Pos) /*!< GPIO_T::SMTEN: SMTEN13 Mask */ + +#define GPIO_SMTEN_SMTEN14_Pos (14) /*!< GPIO_T::SMTEN: SMTEN14 Position */ +#define GPIO_SMTEN_SMTEN14_Msk (0x1ul << GPIO_SMTEN_SMTEN14_Pos) /*!< GPIO_T::SMTEN: SMTEN14 Mask */ + +#define GPIO_SMTEN_SMTEN15_Pos (15) /*!< GPIO_T::SMTEN: SMTEN15 Position */ +#define GPIO_SMTEN_SMTEN15_Msk (0x1ul << GPIO_SMTEN_SMTEN15_Pos) /*!< GPIO_T::SMTEN: SMTEN15 Mask */ + +#define GPIO_SLEWCTL_HSREN0_Pos (0) /*!< GPIO_T::SLEWCTL: HSREN0 Position */ +#define GPIO_SLEWCTL_HSREN0_Msk (0x1ul << GPIO_SLEWCTL_HSREN0_Pos) /*!< GPIO_T::SLEWCTL: HSREN0 Mask */ + +#define GPIO_SLEWCTL_HSREN1_Pos (1) /*!< GPIO_T::SLEWCTL: HSREN1 Position */ +#define GPIO_SLEWCTL_HSREN1_Msk (0x1ul << GPIO_SLEWCTL_HSREN1_Pos) /*!< GPIO_T::SLEWCTL: HSREN1 Mask */ + +#define GPIO_SLEWCTL_HSREN2_Pos (2) /*!< GPIO_T::SLEWCTL: HSREN2 Position */ +#define GPIO_SLEWCTL_HSREN2_Msk (0x1ul << GPIO_SLEWCTL_HSREN2_Pos) /*!< GPIO_T::SLEWCTL: HSREN2 Mask */ + +#define GPIO_SLEWCTL_HSREN3_Pos (3) /*!< GPIO_T::SLEWCTL: HSREN3 Position */ +#define GPIO_SLEWCTL_HSREN3_Msk (0x1ul << GPIO_SLEWCTL_HSREN3_Pos) /*!< GPIO_T::SLEWCTL: HSREN3 Mask */ + +#define GPIO_SLEWCTL_HSREN4_Pos (4) /*!< GPIO_T::SLEWCTL: HSREN4 Position */ +#define GPIO_SLEWCTL_HSREN4_Msk (0x1ul << GPIO_SLEWCTL_HSREN4_Pos) /*!< GPIO_T::SLEWCTL: HSREN4 Mask */ + +#define GPIO_SLEWCTL_HSREN5_Pos (5) /*!< GPIO_T::SLEWCTL: HSREN5 Position */ +#define GPIO_SLEWCTL_HSREN5_Msk (0x1ul << GPIO_SLEWCTL_HSREN5_Pos) /*!< GPIO_T::SLEWCTL: HSREN5 Mask */ + +#define GPIO_SLEWCTL_HSREN6_Pos (6) /*!< GPIO_T::SLEWCTL: HSREN6 Position */ +#define GPIO_SLEWCTL_HSREN6_Msk (0x1ul << GPIO_SLEWCTL_HSREN6_Pos) /*!< GPIO_T::SLEWCTL: HSREN6 Mask */ + +#define GPIO_SLEWCTL_HSREN7_Pos (7) /*!< GPIO_T::SLEWCTL: HSREN7 Position */ +#define GPIO_SLEWCTL_HSREN7_Msk (0x1ul << GPIO_SLEWCTL_HSREN7_Pos) /*!< GPIO_T::SLEWCTL: HSREN7 Mask */ + +#define GPIO_SLEWCTL_HSREN8_Pos (8) /*!< GPIO_T::SLEWCTL: HSREN8 Position */ +#define GPIO_SLEWCTL_HSREN8_Msk (0x1ul << GPIO_SLEWCTL_HSREN8_Pos) /*!< GPIO_T::SLEWCTL: HSREN8 Mask */ + +#define GPIO_SLEWCTL_HSREN9_Pos (9) /*!< GPIO_T::SLEWCTL: HSREN9 Position */ +#define GPIO_SLEWCTL_HSREN9_Msk (0x1ul << GPIO_SLEWCTL_HSREN9_Pos) /*!< GPIO_T::SLEWCTL: HSREN9 Mask */ + +#define GPIO_SLEWCTL_HSREN10_Pos (10) /*!< GPIO_T::SLEWCTL: HSREN10 Position */ +#define GPIO_SLEWCTL_HSREN10_Msk (0x1ul << GPIO_SLEWCTL_HSREN10_Pos) /*!< GPIO_T::SLEWCTL: HSREN10 Mask */ + +#define GPIO_SLEWCTL_HSREN11_Pos (11) /*!< GPIO_T::SLEWCTL: HSREN11 Position */ +#define GPIO_SLEWCTL_HSREN11_Msk (0x1ul << GPIO_SLEWCTL_HSREN11_Pos) /*!< GPIO_T::SLEWCTL: HSREN11 Mask */ + +#define GPIO_SLEWCTL_HSREN12_Pos (12) /*!< GPIO_T::SLEWCTL: HSREN12 Position */ +#define GPIO_SLEWCTL_HSREN12_Msk (0x1ul << GPIO_SLEWCTL_HSREN12_Pos) /*!< GPIO_T::SLEWCTL: HSREN12 Mask */ + +#define GPIO_SLEWCTL_HSREN13_Pos (13) /*!< GPIO_T::SLEWCTL: HSREN13 Position */ +#define GPIO_SLEWCTL_HSREN13_Msk (0x1ul << GPIO_SLEWCTL_HSREN13_Pos) /*!< GPIO_T::SLEWCTL: HSREN13 Mask */ + +#define GPIO_SLEWCTL_HSREN14_Pos (14) /*!< GPIO_T::SLEWCTL: HSREN14 Position */ +#define GPIO_SLEWCTL_HSREN14_Msk (0x1ul << GPIO_SLEWCTL_HSREN14_Pos) /*!< GPIO_T::SLEWCTL: HSREN14 Mask */ + +#define GPIO_SLEWCTL_HSREN15_Pos (15) /*!< GPIO_T::SLEWCTL: HSREN15 Position */ +#define GPIO_SLEWCTL_HSREN15_Msk (0x1ul << GPIO_SLEWCTL_HSREN15_Pos) /*!< GPIO_T::SLEWCTL: HSREN15 Mask */ + +#define GPIO_DRVCTL_HDRVEN8_Pos (8) /*!< GPIO_T::DRVCTL: HDRVEN8 Position */ +#define GPIO_DRVCTL_HDRVEN8_Msk (0x1ul << GPIO_DRVCTL_HDRVEN8_Pos) /*!< GPIO_T::DRVCTL: HDRVEN8 Mask */ + +#define GPIO_DRVCTL_HDRVEN9_Pos (9) /*!< GPIO_T::DRVCTL: HDRVEN9 Position */ +#define GPIO_DRVCTL_HDRVEN9_Msk (0x1ul << GPIO_DRVCTL_HDRVEN9_Pos) /*!< GPIO_T::DRVCTL: HDRVEN9 Mask */ + +#define GPIO_DRVCTL_HDRVEN10_Pos (10) /*!< GPIO_T::DRVCTL: HDRVEN10 Position */ +#define GPIO_DRVCTL_HDRVEN10_Msk (0x1ul << GPIO_DRVCTL_HDRVEN10_Pos) /*!< GPIO_T::DRVCTL: HDRVEN10 Mask */ + +#define GPIO_DRVCTL_HDRVEN11_Pos (11) /*!< GPIO_T::DRVCTL: HDRVEN11 Position */ +#define GPIO_DRVCTL_HDRVEN11_Msk (0x1ul << GPIO_DRVCTL_HDRVEN11_Pos) /*!< GPIO_T::DRVCTL: HDRVEN11 Mask */ + +#define GPIO_DRVCTL_HDRVEN12_Pos (12) /*!< GPIO_T::DRVCTL: HDRVEN12 Position */ +#define GPIO_DRVCTL_HDRVEN12_Msk (0x1ul << GPIO_DRVCTL_HDRVEN12_Pos) /*!< GPIO_T::DRVCTL: HDRVEN12 Mask */ + +#define GPIO_DRVCTL_HDRVEN13_Pos (13) /*!< GPIO_T::DRVCTL: HDRVEN13 Position */ +#define GPIO_DRVCTL_HDRVEN13_Msk (0x1ul << GPIO_DRVCTL_HDRVEN13_Pos) /*!< GPIO_T::DRVCTL: HDRVEN13 Mask */ + +#define GPIO_DBCTL_DBCLKSEL_Pos (0) /*!< GPIO_T::DBCTL: DBCLKSEL Position */ +#define GPIO_DBCTL_DBCLKSEL_Msk (0xFul << GPIO_DBCTL_DBCLKSEL_Pos) /*!< GPIO_T::DBCTL: DBCLKSEL Mask */ + +#define GPIO_DBCTL_DBCLKSRC_Pos (4) /*!< GPIO_T::DBCTL: DBCLKSRC Position */ +#define GPIO_DBCTL_DBCLKSRC_Msk (1ul << GPIO_DBCTL_DBCLKSRC_Pos) /*!< GPIO_T::DBCTL: DBCLKSRC Mask */ + +#define GPIO_DBCTL_ICLKON_Pos (5) /*!< GPIO_T::DBCTL: ICLKON Position */ +#define GPIO_DBCTL_ICLKON_Msk (1ul << GPIO_DBCTL_ICLKON_Pos) /*!< GPIO_T::DBCTL: ICLKON Mask */ + + +/**@}*/ /* GPIO_CONST */ +/**@}*/ /* end of GPIO register group */ + + +/*---------------------- Inter-IC Bus Controller -------------------------*/ +/** + @addtogroup I2C Inter-IC Bus Controller(I2C) + Memory Mapped Structure for I2C Controller +@{ */ + + +typedef struct +{ + + + + +/** + * @var I2C_T::CTL + * Offset: 0x00 I2C Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[2] |AA |Assert Acknowledge Control + * | | |When AA =1 prior to address or data is received, + * | | |an acknowledged (low level to SDA) will be returned during the acknowledge clock pulse on the SCL line when + * | | |1. A slave is acknowledging the address sent from master. + * | | |2. The receiver devices are acknowledging the data sent by transmitter. + * | | |When AA=0 prior to address or data received, + * | | |a Not acknowledged (high level to SDA) will be returned during the acknowledge clock pulse on the SCL line. + * |[3] |SI |I2C Interrupt Flag + * | | |When a new I2C state is present in the I2C_STATUS register, the SI flag is set by hardware. + * | | |If bit INTEN (I2C_CTL [7]) is set, the I2C interrupt is requested. + * | | |SI must be cleared by software. + * | | |Clear SI by writing 1 to this bit. + * | | |For ACKMEN is set in slave read mode, the SI flag is set in 8th clock period for user to confirm the acknowledge bit and 9th clock period for user to read the data in the data buffer. + * |[4] |STO |I2C STOP Control + * | | |In Master mode, setting STO to transmit a STOP condition to bus then I2C controller will check the bus condition if a STOP condition is detected. + * | | |This bit will be cleared by hardware automatically. + * |[5] |STA |I2C START Control + * | | |Setting STA to logic 1 to enter Master mode, the I2C hardware sends a START or repeat START condition to bus when the bus is free. + * |[6] |I2CEN |I2C Controller Enable Bit + * | | |Set to enable I2C serial function controller. + * | | |When I2CEN=1 the I2C serial function enable. + * | | |The multi-function pin function must set to SDA, and SCL of I2C function first. + * | | |0 = Disabled. + * | | |1 = Enabled. + * |[7] |INTEN |Enable Interrupt + * | | |0 = I2C interrupt Disabled. + * | | |1 = I2C interrupt Enabled. + * @var I2C_T::ADDR0 + * Offset: 0x04 I2C Slave Address Register0 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |GC |General Call Function + * | | |0 = General Call Function Disabled. + * | | |1 = General Call Function Enabled. + * |[7:1] |ADDR |I2C Address + * | | |The content of this register is irrelevant when I2C is in Master mode. + * | | |In the slave mode, the seven most significant bits must be loaded with the chip's own address. + * | | |The I2C hardware will react if either of the address is matched. + * @var I2C_T::DAT + * Offset: 0x08 I2C Data Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |DAT |I2C Data + * | | |Bit [7:0] is located with the 8-bit transferred/received data of I2C serial port. + * @var I2C_T::STATUS + * Offset: 0x0C I2C Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |STATUS |I2C Status + * | | |The three least significant bits are always 0. + * | | |The five most significant bits contain the status code. + * | | |There are 28 possible status codes. + * | | |When the content of I2C_STATUS is F8H, no serial interrupt is requested. + * | | |Others I2C_STATUS values correspond to defined I2C states. + * | | |When each of these states is entered, a status interrupt is requested (SI = 1). + * | | |A valid status code is present in I2C_STATUS one cycle after SI is set by hardware and is still present one cycle after SI has been reset by software. + * | | |In addition, states 00H stands for a Bus Error. + * | | |A Bus Error occurs when a START or STOP condition is present at an illegal position in the formation frame. + * | | |Example of illegal position are during the serial transfer of an address byte, a data byte or an acknowledge bit. + * | | |Note: + * | | |1. + * | | |If the BUSEN and ACKMEN are enabled in slave received mode, there is SI interrupt in the 8th clock. + * | | |The user can read the I2C_STATUS = 0xf0 for the function condition has done. + * | | |2. + * | | |If the BUSEN and PECEN are enabled, the status of PECERR, I2C_BUSSTS[3], is used to substitute for I2C_STATUS to check the ACK status in the last frame when the byte count done interrupt has active and the PEC frame has been transformed. + * @var I2C_T::CLKDIV + * Offset: 0x10 I2C Clock Divided Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |DIVIDER |I2C Clock Divided + * | | |Indicates the I2C clock rate: Data Baud Rate of I2C = (system clock) / (4x (I2C_CLKDIV+1)). + * | | |Note: The minimum value of I2C_CLKDIV is 4. + * @var I2C_T::TOCTL + * Offset: 0x14 I2C Time-out Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |TOIF |Time-Out Flag + * | | |This bit is set by hardware when I2C time-out happened and it can interrupt CPU if I2C interrupt enable bit (INTEN) is set to 1. + * | | |Note: Software can write 1 to clear this bit. + * |[1] |TOCDIV4 |Time-Out Counter Input Clock Divided By 4 + * | | |When Enabled, The time-out period is extend 4 times. + * | | |0 = Disabled. + * | | |1 = Enabled. + * |[2] |TOCEN |Time-Out Counter Enable Bit + * | | |When Enabled, the 14-bit time-out counter will start counting when SI is clear. + * | | |Setting flag SI to '1' will reset counter and re-start up counting after SI is cleared. + * | | |0 = Disabled. + * | | |1 = Enabled. + * @var I2C_T::ADDR1 + * Offset: 0x18 I2C Slave Address Register1 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |GC |General Call Function + * | | |0 = General Call Function Disabled. + * | | |1 = General Call Function Enabled. + * |[7:1] |ADDR |I2C Address + * | | |The content of this register is irrelevant when I2C is in Master mode. + * | | |In the slave mode, the seven most significant bits must be loaded with the chip's own address. + * | | |The I2C hardware will react if either of the address is matched. + * @var I2C_T::ADDR2 + * Offset: 0x1C I2C Slave Address Register2 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |GC |General Call Function + * | | |0 = General Call Function Disabled. + * | | |1 = General Call Function Enabled. + * |[7:1] |ADDR |I2C Address + * | | |The content of this register is irrelevant when I2C is in Master mode. + * | | |In the slave mode, the seven most significant bits must be loaded with the chip's own address. + * | | |The I2C hardware will react if either of the address is matched. + * @var I2C_T::ADDR3 + * Offset: 0x20 I2C Slave Address Register3 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |GC |General Call Function + * | | |0 = General Call Function Disabled. + * | | |1 = General Call Function Enabled. + * |[7:1] |ADDR |I2C Address + * | | |The content of this register is irrelevant when I2C is in Master mode. + * | | |In the slave mode, the seven most significant bits must be loaded with the chip's own address. + * | | |The I2C hardware will react if either of the address is matched. + * @var I2C_T::ADDRMSK0 + * Offset: 0x24 I2C Slave Address Mask Register0 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:1] |ADDRMSK |I2C Address Mask + * | | |0 = Mask Disabled (the received corresponding register bit should be exact the same as address register.). + * | | |1 = Mask Enabled (the received corresponding address bit is don't care.). + * | | |I2C bus controllers support multiple address recognition with four address mask register. + * | | |When the bit in the address mask register is set to one, it means the received corresponding address bit is don't-care. + * | | |If the bit is set to zero, that means the received corresponding register bit should be exact the same as address register. + * @var I2C_T::ADDRMSK1 + * Offset: 0x28 I2C Slave Address Mask Register1 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:1] |ADDRMSK |I2C Address Mask + * | | |0 = Mask Disabled (the received corresponding register bit should be exact the same as address register.). + * | | |1 = Mask Enabled (the received corresponding address bit is don't care.). + * | | |I2C bus controllers support multiple address recognition with four address mask register. + * | | |When the bit in the address mask register is set to one, it means the received corresponding address bit is don't-care. + * | | |If the bit is set to zero, that means the received corresponding register bit should be exact the same as address register. + * @var I2C_T::ADDRMSK2 + * Offset: 0x2C I2C Slave Address Mask Register2 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:1] |ADDRMSK |I2C Address Mask + * | | |0 = Mask Disabled (the received corresponding register bit should be exact the same as address register.). + * | | |1 = Mask Enabled (the received corresponding address bit is don't care.). + * | | |I2C bus controllers support multiple address recognition with four address mask register. + * | | |When the bit in the address mask register is set to one, it means the received corresponding address bit is don't-care. + * | | |If the bit is set to zero, that means the received corresponding register bit should be exact the same as address register. + * @var I2C_T::ADDRMSK3 + * Offset: 0x30 I2C Slave Address Mask Register3 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:1] |ADDRMSK |I2C Address Mask + * | | |0 = Mask Disabled (the received corresponding register bit should be exact the same as address register.). + * | | |1 = Mask Enabled (the received corresponding address bit is don't care.). + * | | |I2C bus controllers support multiple address recognition with four address mask register. + * | | |When the bit in the address mask register is set to one, it means the received corresponding address bit is don't-care. + * | | |If the bit is set to zero, that means the received corresponding register bit should be exact the same as address register. + * @var I2C_T::WKCTL + * Offset: 0x3C I2C Wake-up Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |WKEN |I2C Wake-Up Enable Bit + * | | |0 = I2C wake-up function Disabled. + * | | |1= I2C wake-up function Enabled. + * @var I2C_T::WKSTS + * Offset: 0x40 I2C Wake-up Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |WKIF |I2C Wake-Up Flag + * | | |When chip is woken up from Power-down mode by I2C, this bit is set to 1. + * | | |Software can write 1 to clear this bit. + * @var I2C_T::BUSCTL + * Offset: 0x44 I2C Bus Management Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |ACKMEN |Acknowledge Control By Manual + * | | |In order to allow ACK control in slave reception including the command and data, slave byte control mode must be enabled by setting the ACKMEN bit. + * | | |0 = Slave byte control Disabled. + * | | |1 = Slave byte control Enabled. + * | | |The 9th bit can response the ACK or NACK according the received data by user. + * | | |When the byte is received, stretching the SCLK signal low between the 8th and 9th SCLK pulse. + * | | |Note: If the BMDEN =1 and this bit is enabled, the information of I2C_STATUS will be fixed as 0xF0 in slave receive condition. + * |[1] |PECEN |Packet Error Checking Calculation Enable Bit + * | | |0 = Packet Error Checking Calculation Disabled. + * | | |1 = Packet Error Checking Calculation Enabled. + * |[2] |BMDEN |Bus Management Device Default Address Enable Bit + * | | |0 = Device default address Disable. + * | | |When the address 0'b1100001x coming and the both of BMDEN and ACKMEN are enabled, the device responses NACKed. + * | | |1 = Device default address Enabled. + * | | |When the address 0'b1100001x coming and the both of BMDEN and ACKMEN are enabled, the device responses ACKed. + * |[3] |BMHEN |Bus Management Host Enable Bit + * | | |0 = Host function Disabled. + * | | |1 = Host function Enabled and the SUSCON will be used as CONTROL function. + * |[4] |ALERTEN |Bus Management Alert Enable Bit + * | | |Device Mode (BMHEN =0). + * | | |0 = Release the BM_ALERT pin high and Alert Response Header disabled: 0001100x followed by NACK if both of BMDEN and ACKMEN are enabled. + * | | |1 = Drive BM_ALERT pin low and Alert Response Address Header enables: 0001100x followed by ACK if both of BMDEN and ACKMEN are enabled. + * | | |Host Mode (BMHEN =1). + * | | |0 = BM_ALERT pin not supported. + * | | |1 = BM_ALERT pin supported. + * |[5] |SCTLOSTS |Suspend/Control Data Output Status + * | | |0 = The output of SUSCON pin is low. + * | | |1 = The output of SUSCON pin is high. + * |[6] |SCTLOEN |Suspend Or Control Pin Output Enable Bit + * | | |0 = The SUSCON pin in input. + * | | |1 = The output enable is active on the SUSCON pin. + * |[7] |BUSEN |BUS Enable Bit + * | | |0 = The system management function is Disabled. + * | | |1 = The system management function is Enable. + * | | |Note: When the bit is enabled, the internal 14-bit counter is used to calculate the time out event of clock low condition. + * |[8] |PECTXEN |Packet Error Checking Byte Transmission/Reception + * | | |This bit is set by software, and cleared by hardware when the PEC is transferred, or when a STOP condition or an Address Matched is received + * | | |0 = No PEC transfer. + * | | |1 = PEC transmission/reception is requested. + * | | |Note: 1.This bit has no effect in slave mode when ACKMEN =0. + * |[9] |TIDLE |Timer Check In Idle State + * | | |The BUSTOUT is used to calculate the time-out of clock low in bus active and the idle period in bus Idle. + * | | |This bit is used to define which condition is enabled. + * | | |0 = The BUSTOUT is used to calculate the clock low period in bus active. + * | | |1 = The BUSTOUT is used to calculate the IDLE period in bus Idle. + * | | |Note: The BUSY (I2C_BUSSTS[0]) indicate the current bus state. + * |[10] |PECCLR |PEC Clear At Repeat Start + * | | |The calculation of PEC starts when PECEN is set to 1 and it is clear when the STA or STO bit is detected. + * | | |This PECCLR bit is used to enable the condition of REPEAT START can clear the PEC calculation. + * | | |0 = The PEC calculation is cleared by "Repeat Start" function is Disabled. + * | | |1 = The PEC calculation is cleared by "Repeat Start" function is Enabled. + * |[11] |ACKM9SI |Acknowledge Manual Enable Extra SI Interrupt + * | | |0 = There is no SI interrupt in the 9th clock cycle when the BUSEN =1 and ACKMEN =1. + * | | |1 = There is SI interrupt in the 9th clock cycle when the BUSEN =1 and ACKMEN =1. + * @var I2C_T::BUSTCTL + * Offset: 0x48 I2C Bus Management Timer Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |BUSTOEN |Bus Time Out Enable Bit + * | | |0 = Indicates the bus clock low time-out detection is Disabled. + * | | |1 = Indicates the bus clock low time-out detection is Enabled + * | | |bus clock is low for more than Time-out (in BIDLE=0) or high more than Time-out(in BIDLE =1), + * |[1] |CLKTOEN |Cumulative Clock Low Time Out Enable Bit + * | | |0 = Indicates the cumulative clock low time-out detection is Disabled. + * | | |1 = Indicates the cumulative clock low time-out detection is Enabled. + * | | |For Master, it calculates the period from START to ACK + * | | |For Slave, it calculates the period from START to STOP + * |[2] |BUSTOIEN |Time-Out Interrupt Enable Bit + * | | |BUSY =1. + * | | |0 = Indicates the SCLK low time-out interrupt is Disabled. + * | | |1 = Indicates the SCLK low time-out interrupt is Enabled. + * | | |BUSY =0. + * | | |0 = Indicates the bus IDLE time-out interrupt is Disabled. + * | | |1 = Indicates the bus IDLE time-out interrupt is Enabled. + * |[3] |CLKTOIEN |Extended Clock Time Out Interrupt Enable Bit + * | | |0 = Indicates the time extended interrupt is Disabled. + * | | |1 = Indicates the time extended interrupt is Enabled. + * |[4] |TORSTEN |Time Out Reset Enable Bit + * | | |0 = Indicates the I2C state machine reset is Disable. + * | | |1 = Indicates the I2C state machine reset is Enable. (The clock and data bus will be released to high) + * |[5] |PECIEN |Packet Error Checking Byte Count Done Interrupt Enable Bit + * | | |0 = Indicates the byte count done interrupt is Disabled. + * | | |1 = Indicates the byte count done interrupt is Enabled. + * | | |Note: This bit is used in PECEN =1. + * @var I2C_T::BUSSTS + * Offset: 0x4C I2C Bus Management Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |BUSY |Bus Busy + * | | |Indicates that a communication is in progress on the bus. + * | | |It is set by hardware when a START condition is detected. + * | | |It is cleared by hardware when a STOP condition is detected. + * | | |0 = The bus is IDLE (both SCLK and SDA High). + * | | |1 = The bus is busy. + * |[1] |BCDONE |Byte Count Transmission/Receive Done + * | | |0 = Indicates the transmission/ receive is not finished when the PECEN is set. + * | | |1 = Indicates the transmission/ receive is finished when the PECEN is set. + * | | |Note: Software can write 1 to clear this bit. + * |[2] |PECERR |PEC Error In Reception + * | | |0 = Indicates the PEC value equal the received PEC data packet. + * | | |1 = Indicates the PEC value doesn't match the receive PEC data packet. + * | | |Note: Software can write 1 to clear this bit. + * |[3] |ALERT |SMBus Alert Status + * | | |Device Mode (BMHEN =0). + * | | |0 = Indicates SMALERT pin state is low. + * | | |1 = Indicates SMALERT pin state is high + * | | |Host Mode (BMHEN =1). + * | | |0 = No SMBALERT event. + * | | |1 = Indicates there is SMBALERT event (falling edge) is detected in SMALERT pin when the BMHEN = 1 (SMBus host configuration) and the ALERTEN = 1. + * | | |Note: 1. + * | | |The SMALERT pin is an open-drain pin, the pull-high resistor is must in the system. + * | | |2. + * | | |Software can write 1 to clear this bit. + * |[4] |SCTLDIN |Bus Suspend Or Control Signal Input Status + * | | |0 = The input status of SUSCON pin is 0. + * | | |1 = The input status of SUSCON pin is 1. + * |[5] |BUSTO |Bus Time-out Status + * | | |0 = Indicates that there is no any time-out or external clock time-out. + * | | |1 = Indicates that a time-out or external clock time-out occurred. + * | | |In bus busy, the bit indicates the total clock low time-out event occurred otherwise, it indicates the bus idle time-out event occurred. + * | | |Note: Software can write 1 to clear this bit. + * |[6] |CLKTO |Clock Low Cumulate Time-out Status + * | | |0 = Indicates that the cumulative clock low is no any time-out. + * | | |1 = Indicates that the cumulative clock low time-out occurred. + * | | |Note: Software can write 1 to clear this bit. + * @var I2C_T::PKTSIZE + * Offset: 0x50 I2C Packet Error Checking Byte Number Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |PLDSIZE |Transfer Byte Number + * | | |The transmission or receive byte number in one transaction when the PECEN is set. + * | | |The maximum transaction or receive byte is 255 Bytes. + * @var I2C_T::PKTCRC + * Offset: 0x54 I2C Packet Error Checking Byte Value Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |PECCRC |Packet Error Checking Byte Value + * | | |This byte indicates the packet error checking content after transmission or receive byte count by using the C(x) = X8 + X2 + X + 1. + * | | |I t is read only. + * @var I2C_T::BUSTOUT + * Offset: 0x58 I2C Bus Management Timer Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |BUSTO |Bus Management Time-out Value + * | | |Indicate the bus time-out value in bus is IDLE or SCLK low. + * | | |Note: If the user wants to revise the value of BUSTOUT, the TORSTEN (I2C_BUSTCTL[4]) bit shall be set to 1 and clear to 0 first in the BUSEN(I2C_BUSCTL[7]) is set. + * @var I2C_T::CLKTOUT + * Offset: 0x5C I2C Bus Management Clock Low Timer Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |CLKTO |Bus Clock Low Timer + * | | |The field is used to configure the cumulative clock extension time-out. + * | | |Note: If the user wants to revise the value of CLKLTOUT, the TORSTEN bit shall be set to 1 and d clear to 0 first in the BUSEN is set. + */ + + __IO uint32_t CTL; /* Offset: 0x00 I2C Control Register */ + __IO uint32_t ADDR0; /* Offset: 0x04 I2C Slave Address Register0 */ + __IO uint32_t DAT; /* Offset: 0x08 I2C Data Register */ + __I uint32_t STATUS; /* Offset: 0x0C I2C Status Register */ + __IO uint32_t CLKDIV; /* Offset: 0x10 I2C Clock Divided Register */ + __IO uint32_t TOCTL; /* Offset: 0x14 I2C Time-out Control Register */ + __IO uint32_t ADDR1; /* Offset: 0x18 I2C Slave Address Register1 */ + __IO uint32_t ADDR2; /* Offset: 0x1C I2C Slave Address Register2 */ + __IO uint32_t ADDR3; /* Offset: 0x20 I2C Slave Address Register3 */ + __IO uint32_t ADDRMSK0; /* Offset: 0x24 I2C Slave Address Mask Register0 */ + __IO uint32_t ADDRMSK1; /* Offset: 0x28 I2C Slave Address Mask Register1 */ + __IO uint32_t ADDRMSK2; /* Offset: 0x2C I2C Slave Address Mask Register2 */ + __IO uint32_t ADDRMSK3; /* Offset: 0x30 I2C Slave Address Mask Register3 */ + __I uint32_t RESERVE0[2]; + __IO uint32_t WKCTL; /* Offset: 0x3C I2C Wake-up Control Register */ + __IO uint32_t WKSTS; /* Offset: 0x40 I2C Wake-up Status Register */ + __IO uint32_t BUSCTL; /* Offset: 0x44 I2C Bus Management Control Register */ + __IO uint32_t BUSTCTL; /* Offset: 0x48 I2C Bus Management Timer Control Register */ + __IO uint32_t BUSSTS; /* Offset: 0x4C I2C Bus Management Status Register */ + __IO uint32_t PKTSIZE; /* Offset: 0x50 I2C Packet Error Checking Byte Number Register */ + __I uint32_t PKTCRC; /* Offset: 0x54 I2C Packet Error Checking Byte Value Register */ + __IO uint32_t BUSTOUT; /* Offset: 0x58 I2C Bus Management Timer Register */ + __IO uint32_t CLKTOUT; /* Offset: 0x5C I2C Bus Management Clock Low Timer Register */ + +} I2C_T; + + + +/** + @addtogroup I2C_CONST I2C Bit Field Definition + Constant Definitions for I2C Controller +@{ */ + +#define I2C_CTL_AA_Pos (2) /*!< I2C_T::CTL: AA Position */ +#define I2C_CTL_AA_Msk (0x1ul << I2C_CTL_AA_Pos) /*!< I2C_T::CTL: AA Mask */ + +#define I2C_CTL_SI_Pos (3) /*!< I2C_T::CTL: SI Position */ +#define I2C_CTL_SI_Msk (0x1ul << I2C_CTL_SI_Pos) /*!< I2C_T::CTL: SI Mask */ + +#define I2C_CTL_STO_Pos (4) /*!< I2C_T::CTL: STO Position */ +#define I2C_CTL_STO_Msk (0x1ul << I2C_CTL_STO_Pos) /*!< I2C_T::CTL: STO Mask */ + +#define I2C_CTL_STA_Pos (5) /*!< I2C_T::CTL: STA Position */ +#define I2C_CTL_STA_Msk (0x1ul << I2C_CTL_STA_Pos) /*!< I2C_T::CTL: STA Mask */ + +#define I2C_CTL_I2CEN_Pos (6) /*!< I2C_T::CTL: I2CEN Position */ +#define I2C_CTL_I2CEN_Msk (0x1ul << I2C_CTL_I2CEN_Pos) /*!< I2C_T::CTL: I2CEN Mask */ + +#define I2C_CTL_INTEN_Pos (7) /*!< I2C_T::CTL: INTEN Position */ +#define I2C_CTL_INTEN_Msk (0x1ul << I2C_CTL_INTEN_Pos) /*!< I2C_T::CTL: INTEN Mask */ + +#define I2C_ADDR0_GC_Pos (0) /*!< I2C_T::ADDR0: GC Position */ +#define I2C_ADDR0_GC_Msk (0x1ul << I2C_ADDR0_GC_Pos) /*!< I2C_T::ADDR0: GC Mask */ + +#define I2C_ADDR0_ADDR_Pos (1) /*!< I2C_T::ADDR0: ADDR Position */ +#define I2C_ADDR0_ADDR_Msk (0x7ful << I2C_ADDR0_ADDR_Pos) /*!< I2C_T::ADDR0: ADDR Mask */ + +#define I2C_DAT_DAT_Pos (0) /*!< I2C_T::DAT: DAT Position */ +#define I2C_DAT_DAT_Msk (0xfful << I2C_DAT_DAT_Pos) /*!< I2C_T::DAT: DAT Mask */ + +#define I2C_STATUS_STATUS_Pos (0) /*!< I2C_T::STATUS: STATUS Position */ +#define I2C_STATUS_STATUS_Msk (0xfful << I2C_STATUS_STATUS_Pos) /*!< I2C_T::STATUS: STATUS Mask */ + +#define I2C_CLKDIV_DIVIDER_Pos (0) /*!< I2C_T::CLKDIV: DIVIDER Position */ +#define I2C_CLKDIV_DIVIDER_Msk (0xfful << I2C_CLKDIV_DIVIDER_Pos) /*!< I2C_T::CLKDIV: DIVIDER Mask */ + +#define I2C_TOCTL_TOIF_Pos (0) /*!< I2C_T::TOCTL: TOIF Position */ +#define I2C_TOCTL_TOIF_Msk (0x1ul << I2C_TOCTL_TOIF_Pos) /*!< I2C_T::TOCTL: TOIF Mask */ + +#define I2C_TOCTL_TOCDIV4_Pos (1) /*!< I2C_T::TOCTL: TOCDIV4 Position */ +#define I2C_TOCTL_TOCDIV4_Msk (0x1ul << I2C_TOCTL_TOCDIV4_Pos) /*!< I2C_T::TOCTL: TOCDIV4 Mask */ + +#define I2C_TOCTL_TOCEN_Pos (2) /*!< I2C_T::TOCTL: TOCEN Position */ +#define I2C_TOCTL_TOCEN_Msk (0x1ul << I2C_TOCTL_TOCEN_Pos) /*!< I2C_T::TOCTL: TOCEN Mask */ + +#define I2C_ADDR1_GC_Pos (0) /*!< I2C_T::ADDR1: GC Position */ +#define I2C_ADDR1_GC_Msk (0x1ul << I2C_ADDR1_GC_Pos) /*!< I2C_T::ADDR1: GC Mask */ + +#define I2C_ADDR1_ADDR_Pos (1) /*!< I2C_T::ADDR1: ADDR Position */ +#define I2C_ADDR1_ADDR_Msk (0x7ful << I2C_ADDR1_ADDR_Pos) /*!< I2C_T::ADDR1: ADDR Mask */ + +#define I2C_ADDR2_GC_Pos (0) /*!< I2C_T::ADDR2: GC Position */ +#define I2C_ADDR2_GC_Msk (0x1ul << I2C_ADDR2_GC_Pos) /*!< I2C_T::ADDR2: GC Mask */ + +#define I2C_ADDR2_ADDR_Pos (1) /*!< I2C_T::ADDR2: ADDR Position */ +#define I2C_ADDR2_ADDR_Msk (0x7ful << I2C_ADDR2_ADDR_Pos) /*!< I2C_T::ADDR2: ADDR Mask */ + +#define I2C_ADDR3_GC_Pos (0) /*!< I2C_T::ADDR3: GC Position */ +#define I2C_ADDR3_GC_Msk (0x1ul << I2C_ADDR3_GC_Pos) /*!< I2C_T::ADDR3: GC Mask */ + +#define I2C_ADDR3_ADDR_Pos (1) /*!< I2C_T::ADDR3: ADDR Position */ +#define I2C_ADDR3_ADDR_Msk (0x7ful << I2C_ADDR3_ADDR_Pos) /*!< I2C_T::ADDR3: ADDR Mask */ + +#define I2C_ADDRMSK0_ADDRMSK_Pos (1) /*!< I2C_T::ADDRMSK0: ADDRMSK Position */ +#define I2C_ADDRMSK0_ADDRMSK_Msk (0x7ful << I2C_ADDRMSK0_ADDRMSK_Pos) /*!< I2C_T::ADDRMSK0: ADDRMSK Mask */ + +#define I2C_ADDRMSK1_ADDRMSK_Pos (1) /*!< I2C_T::ADDRMSK1: ADDRMSK Position */ +#define I2C_ADDRMSK1_ADDRMSK_Msk (0x7ful << I2C_ADDRMSK1_ADDRMSK_Pos) /*!< I2C_T::ADDRMSK1: ADDRMSK Mask */ + +#define I2C_ADDRMSK2_ADDRMSK_Pos (1) /*!< I2C_T::ADDRMSK2: ADDRMSK Position */ +#define I2C_ADDRMSK2_ADDRMSK_Msk (0x7ful << I2C_ADDRMSK2_ADDRMSK_Pos) /*!< I2C_T::ADDRMSK2: ADDRMSK Mask */ + +#define I2C_ADDRMSK3_ADDRMSK_Pos (1) /*!< I2C_T::ADDRMSK3: ADDRMSK Position */ +#define I2C_ADDRMSK3_ADDRMSK_Msk (0x7ful << I2C_ADDRMSK3_ADDRMSK_Pos) /*!< I2C_T::ADDRMSK3: ADDRMSK Mask */ + +#define I2C_WKCTL_WKEN_Pos (0) /*!< I2C_T::WKCTL: WKEN Position */ +#define I2C_WKCTL_WKEN_Msk (0x1ul << I2C_WKCTL_WKEN_Pos) /*!< I2C_T::WKCTL: WKEN Mask */ + +#define I2C_WKSTS_WKIF_Pos (0) /*!< I2C_T::WKSTS: WKIF Position */ +#define I2C_WKSTS_WKIF_Msk (0x1ul << I2C_WKSTS_WKIF_Pos) /*!< I2C_T::WKSTS: WKIF Mask */ + +#define I2C_BUSCTL_ACKMEN_Pos (0) /*!< I2C_T::BUSCTL: ACKMEN Position */ +#define I2C_BUSCTL_ACKMEN_Msk (0x1ul << I2C_BUSCTL_ACKMEN_Pos) /*!< I2C_T::BUSCTL: ACKMEN Mask */ + +#define I2C_BUSCTL_PECEN_Pos (1) /*!< I2C_T::BUSCTL: PECEN Position */ +#define I2C_BUSCTL_PECEN_Msk (0x1ul << I2C_BUSCTL_PECEN_Pos) /*!< I2C_T::BUSCTL: PECEN Mask */ + +#define I2C_BUSCTL_BMDEN_Pos (2) /*!< I2C_T::BUSCTL: BMDEN Position */ +#define I2C_BUSCTL_BMDEN_Msk (0x1ul << I2C_BUSCTL_BMDEN_Pos) /*!< I2C_T::BUSCTL: BMDEN Mask */ + +#define I2C_BUSCTL_BMHEN_Pos (3) /*!< I2C_T::BUSCTL: BMHEN Position */ +#define I2C_BUSCTL_BMHEN_Msk (0x1ul << I2C_BUSCTL_BMHEN_Pos) /*!< I2C_T::BUSCTL: BMHEN Mask */ + +#define I2C_BUSCTL_ALERTEN_Pos (4) /*!< I2C_T::BUSCTL: ALERTEN Position */ +#define I2C_BUSCTL_ALERTEN_Msk (0x1ul << I2C_BUSCTL_ALERTEN_Pos) /*!< I2C_T::BUSCTL: ALERTEN Mask */ + +#define I2C_BUSCTL_SCTLOSTS_Pos (5) /*!< I2C_T::BUSCTL: SCTLOSTS Position */ +#define I2C_BUSCTL_SCTLOSTS_Msk (0x1ul << I2C_BUSCTL_SCTLOSTS_Pos) /*!< I2C_T::BUSCTL: SCTLOSTS Mask */ + +#define I2C_BUSCTL_SCTLOEN_Pos (6) /*!< I2C_T::BUSCTL: SCTLOEN Position */ +#define I2C_BUSCTL_SCTLOEN_Msk (0x1ul << I2C_BUSCTL_SCTLOEN_Pos) /*!< I2C_T::BUSCTL: SCTLOEN Mask */ + +#define I2C_BUSCTL_BUSEN_Pos (7) /*!< I2C_T::BUSCTL: BUSEN Position */ +#define I2C_BUSCTL_BUSEN_Msk (0x1ul << I2C_BUSCTL_BUSEN_Pos) /*!< I2C_T::BUSCTL: BUSEN Mask */ + +#define I2C_BUSCTL_PECTXEN_Pos (8) /*!< I2C_T::BUSCTL: PECTXEN Position */ +#define I2C_BUSCTL_PECTXEN_Msk (0x1ul << I2C_BUSCTL_PECTXEN_Pos) /*!< I2C_T::BUSCTL: PECTXEN Mask */ + +#define I2C_BUSCTL_TIDLE_Pos (9) /*!< I2C_T::BUSCTL: TIDLE Position */ +#define I2C_BUSCTL_TIDLE_Msk (0x1ul << I2C_BUSCTL_TIDLE_Pos) /*!< I2C_T::BUSCTL: TIDLE Mask */ + +#define I2C_BUSCTL_PECCLR_Pos (10) /*!< I2C_T::BUSCTL: PECCLR Position */ +#define I2C_BUSCTL_PECCLR_Msk (0x1ul << I2C_BUSCTL_PECCLR_Pos) /*!< I2C_T::BUSCTL: PECCLR Mask */ + +#define I2C_BUSCTL_ACKM9SI_Pos (11) /*!< I2C_T::BUSCTL: ACKM9SI Position */ +#define I2C_BUSCTL_ACKM9SI_Msk (0x1ul << I2C_BUSCTL_ACKM9SI_Pos) /*!< I2C_T::BUSCTL: ACKM9SI Mask */ + +#define I2C_BUSTCTL_BUSTOEN_Pos (0) /*!< I2C_T::BUSTCTL: BUSTOEN Position */ +#define I2C_BUSTCTL_BUSTOEN_Msk (0x1ul << I2C_BUSTCTL_BUSTOEN_Pos) /*!< I2C_T::BUSTCTL: BUSTOEN Mask */ + +#define I2C_BUSTCTL_CLKTOEN_Pos (1) /*!< I2C_T::BUSTCTL: CLKTOEN Position */ +#define I2C_BUSTCTL_CLKTOEN_Msk (0x1ul << I2C_BUSTCTL_CLKTOEN_Pos) /*!< I2C_T::BUSTCTL: CLKTOEN Mask */ + +#define I2C_BUSTCTL_BUSTOIEN_Pos (2) /*!< I2C_T::BUSTCTL: BUSTOIEN Position */ +#define I2C_BUSTCTL_BUSTOIEN_Msk (0x1ul << I2C_BUSTCTL_BUSTOIEN_Pos) /*!< I2C_T::BUSTCTL: BUSTOIEN Mask */ + +#define I2C_BUSTCTL_CLKTOIEN_Pos (3) /*!< I2C_T::BUSTCTL: CLKTOIEN Position */ +#define I2C_BUSTCTL_CLKTOIEN_Msk (0x1ul << I2C_BUSTCTL_CLKTOIEN_Pos) /*!< I2C_T::BUSTCTL: CLKTOIEN Mask */ + +#define I2C_BUSTCTL_TORSTEN_Pos (4) /*!< I2C_T::BUSTCTL: TORSTEN Position */ +#define I2C_BUSTCTL_TORSTEN_Msk (0x1ul << I2C_BUSTCTL_TORSTEN_Pos) /*!< I2C_T::BUSTCTL: TORSTEN Mask */ + +#define I2C_BUSTCTL_PECIEN_Pos (5) /*!< I2C_T::BUSTCTL: PECIEN Position */ +#define I2C_BUSTCTL_PECIEN_Msk (0x1ul << I2C_BUSTCTL_PECIEN_Pos) /*!< I2C_T::BUSTCTL: PECIEN Mask */ + +#define I2C_BUSSTS_BUSY_Pos (0) /*!< I2C_T::BUSSTS: BUSY Position */ +#define I2C_BUSSTS_BUSY_Msk (0x1ul << I2C_BUSSTS_BUSY_Pos) /*!< I2C_T::BUSSTS: BUSY Mask */ + +#define I2C_BUSSTS_BCDONE_Pos (1) /*!< I2C_T::BUSSTS: BCDONE Position */ +#define I2C_BUSSTS_BCDONE_Msk (0x1ul << I2C_BUSSTS_BCDONE_Pos) /*!< I2C_T::BUSSTS: BCDONE Mask */ + +#define I2C_BUSSTS_PECERR_Pos (2) /*!< I2C_T::BUSSTS: PECERR Position */ +#define I2C_BUSSTS_PECERR_Msk (0x1ul << I2C_BUSSTS_PECERR_Pos) /*!< I2C_T::BUSSTS: PECERR Mask */ + +#define I2C_BUSSTS_ALERT_Pos (3) /*!< I2C_T::BUSSTS: ALERT Position */ +#define I2C_BUSSTS_ALERT_Msk (0x1ul << I2C_BUSSTS_ALERT_Pos) /*!< I2C_T::BUSSTS: ALERT Mask */ + +#define I2C_BUSSTS_SCTLDIN_Pos (4) /*!< I2C_T::BUSSTS: SCTLDIN Position */ +#define I2C_BUSSTS_SCTLDIN_Msk (0x1ul << I2C_BUSSTS_SCTLDIN_Pos) /*!< I2C_T::BUSSTS: SCTLDIN Mask */ + +#define I2C_BUSSTS_BUSTO_Pos (5) /*!< I2C_T::BUSSTS: BUSTO Position */ +#define I2C_BUSSTS_BUSTO_Msk (0x1ul << I2C_BUSSTS_BUSTO_Pos) /*!< I2C_T::BUSSTS: BUSTO Mask */ + +#define I2C_BUSSTS_CLKTO_Pos (6) /*!< I2C_T::BUSSTS: CLKTO Position */ +#define I2C_BUSSTS_CLKTO_Msk (0x1ul << I2C_BUSSTS_CLKTO_Pos) /*!< I2C_T::BUSSTS: CLKTO Mask */ + +#define I2C_PKTSIZE_PLDSIZE_Pos (0) /*!< I2C_T::PKTSIZE: PLDSIZE Position */ +#define I2C_PKTSIZE_PLDSIZE_Msk (0xfful << I2C_PKTSIZE_PLDSIZE_Pos) /*!< I2C_T::PKTSIZE: PLDSIZE Mask */ + +#define I2C_PKTCRC_PECCRC_Pos (0) /*!< I2C_T::PKTCRC: PECCRC Position */ +#define I2C_PKTCRC_PECCRC_Msk (0xfful << I2C_PKTCRC_PECCRC_Pos) /*!< I2C_T::PKTCRC: PECCRC Mask */ + +#define I2C_BUSTOUT_BUSTO_Pos (0) /*!< I2C_T::BUSTOUT: BUSTO Position */ +#define I2C_BUSTOUT_BUSTO_Msk (0xfful << I2C_BUSTOUT_BUSTO_Pos) /*!< I2C_T::BUSTOUT: BUSTO Mask */ + +#define I2C_CLKTOUT_CLKTO_Pos (0) /*!< I2C_T::CLKTOUT: CLKTO Position */ +#define I2C_CLKTOUT_CLKTO_Msk (0xfful << I2C_CLKTOUT_CLKTO_Pos) /*!< I2C_T::CLKTOUT: CLKTO Mask */ + + +/**@}*/ /* I2C_CONST */ +/**@}*/ /* end of I2C register group */ + +/*---------------------- USB On-The-Go Controller -------------------------*/ +/** + @addtogroup OTG USB On-The-Go Controller(OTG) + Memory Mapped Structure for OTG Controller +@{ */ + + +typedef struct +{ + + +/** + * @var OTG_T::CTL + * Offset: 0x00 OTG Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |VBUSDROP |Drop VBUS Control + * | | |If user application running on this OTG A-device wants to conserve power, set this bit to drop VBUS. + * | | |BUSREQ (OTG_CTL[1]) will be also cleared no matter A-device or B-device. + * | | |0 = Not drop the VBUS. + * | | |1 = Drop the VBUS. + * |[1] |BUSREQ |OTG Bus Request + * | | |If OTG A-device wants to do data transfers via USB bus, setting this bit will drive VBUS high to detect USB device connection. + * | | |If user won't use the bus any more, clearing this bit will drop VBUS to save power. + * | | |This bit will be cleared when A-device goes to A_wait_vfall state. A_wait_vfall state is defined in OTG specification. + * | | |This bit will be also cleared if VBUSDROP (OTG_CTL[0]) bit is set or IDSTS (OTG_STATUS[1]) changed. + * | | |If user of an OTG-B Device wants to request VBUS, setting this bit will run SRP protocol. + * | | |This bit will be cleared if SRP failure (OTG A-device does not provide VBUS after B-device issues ARP in specified interval, defined in OTG specification). + * | | |This bit will be also cleared if VBUSDROP (OTG_CTL[0]) bit is set IDSTS (OTG_STATUS[1]) changed. + * | | |0 = Not launch VBUS in OTG A-device or not request SRP in OTG B-device. + * | | |1 = Launch VBUS in OTG A-device or request SRP in OTG B-device. + * |[2] |HNPREQEN |OTG HNP Request Enable Bit + * | | |When USB frame as A-device, set this bit when A-device allows to process Host Negotiation Protocol. + * | | |This bit will be cleared when OTG state changes from a_suspend to a_peripheral or goes back to a_idle state. + * | | |When USB frame is as B-device, set this bit after the OTG A-device successfully sends a SetFeature (b_hnp_enable) command to the OTG B-device to start role change. + * | | |This bit will be cleared when OTG state changes from b_peripheral to b_wait_acon or goes back to b_idle state. + * | | |0 = HNP request Disabled. + * | | |1 = HNP request Enabled (A-device can change role from Host to Peripheral or B-device can change role from Peripheral to Host). + * | | |Note: Refer to OTG specification to get a_suspend, a_peripheral, a_idle and b_idle state. + * |[4] |OTGEN |OTG Function Enable Bit + * | | |User needs to set this bit to enable OTG function while USB frame configured as OTG device. + * | | |When USB frame not configured as OTG device, this bit is must be low. + * | | |0 = OTG function Disabled. + * | | |1 = OTG function Enabled. + * |[5] |WKEN |OTG ID Pin Wake-Up Enable Bit + * | | |0 = OTG ID pin status change wake-up function Disabled. + * | | |1 = OTG ID pin status change wake-up function Enabled. + * @var OTG_T::PHYCTL + * Offset: 0x04 OTG PHY Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |OTGPHYEN |OTG PHY Enable + * | | |When USB frame is configured as OTG-device, user needs to set this bit before using OTG function. + * | | |If device is not configured as OTG-device, this bit is "don't care". + * | | |0 = OTG PHY Disabled. + * | | |1 = OTG PHY Enabled. + * |[1] |IDDETEN |ID Detection Enable Bit + * | | |0 = Detect ID pin status Disabled. + * | | |1 = Detect ID pin status Enabled. + * |[4] |VBENPOL |Off-Chip USB VBUS Power Switch Enable Polarity + * | | |The OTG controller will enable off-chip USB VBUS power switch to provide VBUS power when need. + * | | |A USB_VBUS_EN pin is used to control the off-chip USB VBUS power switch. + * | | |The polarity of enabling off-chip USB VBUS power switch (high active or low active) depends on the selected component. + * | | |Set this bit as following according to the polarity of off-chip USB VBUS power switch. + * | | |0 = The off-chip USB VBUS power switch enable is active high. + * | | |1 = The off-chip USB VBUS power switch enable is active low. + * |[5] |VBSTSPOL |Off-Chip USB VBUS Power Switch Status Polarity + * | | |The polarity of off-chip USB VBUS power switch valid signal depends on the selected component. + * | | |A USB_VBUS_ST pin is used to monitor the valid signal of the off-chip USB VBUS power switch. + * | | |Set this bit as following according to the polarity of off-chip USB VBUS power switch. + * | | |0 = The polarity of off-chip USB VBUS power switch valid status is high. + * | | |1 = The polarity of off-chip USB VBUS power switch valid status is low. + * @var OTG_T::INTEN + * Offset: 0x08 OTG Interrupt Enable Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |ROLECHGIEN|Role (Host Or Peripheral) Changed Interrupt Enable Bit + * | | |0 = Interrupt Disabled. + * | | |1 = Interrupt Enabled. + * |[1] |VBEIEN |VBUS Error Interrupt Enable Bit + * | | |0 = Interrupt Disabled. + * | | |1 = Interrupt Enabled. + * | | |Note: VBUS error means going to a_vbus_err state. Please refer to A-device state diagram in OTG spec. + * |[2] |SRPFIEN |SRP Fail Interrupt Enable Bit + * | | |0 = Interrupt Disabled. + * | | |1 = Interrupt Enabled. + * |[3] |HNPFIEN |HNP Fail Interrupt Enable Bit + * | | |0 = Interrupt Disabled. + * | | |1 = Interrupt Enabled. + * |[4] |GOIDLEIEN |OTG Device Goes to IDLE State Interrupt Enable Bit + * | | |0 = Interrupt Disabled. + * | | |1 = Interrupt Enabled. + * | | |Note: Going to idle state means going to a_idle or b_idle state. + * | | |Please refer to A-device state diagram and B-device state diagram in OTG spec. + * |[5] |IDCHGIEN |IDSTS Changed Interrupt Enable Bit + * | | |If this bit is set to 1 and IDSTS (OTG_STATUS[1]) status is changed from high to low or from low to high, a interrupt will be asserted. + * | | |0 = Interrupt Disabled. + * | | |1 = Interrupt Enabled. + * |[6] |PDEVIEN |Act As Peripheral Interrupt Enable Bit + * | | |If this bit is set to 1 and the device is changed as a peripheral, a interrupt will be asserted. + * | | |0 = This device as a peripheral interrupt Disabled. + * | | |1 = This device as a peripheral interrupt Enabled. + * |[7] |HOSTIEN |Act As Host Interrupt Enable Bit + * | | |If this bit is set to 1 and the device is changed as a host, a interrupt will be asserted. + * | | |0 = This device as a host interrupt Disabled. + * | | |1 = This device as a host interrupt Enabled. + * |[8] |BVLDCHGIEN|B-Device Session Valid Status Changed Interrupt Enable Bit + * | | |If this bit is set to 1 and BVLD (OTG_STATUS[3]) status is changed from high to low or from low to high, a interrupt will be asserted. + * | | |0 = Interrupt Disabled. + * | | |1 = Interrupt Enabled. + * |[9] |AVLDCHGIEN|A-Device Session Valid Status Changed Interrupt Enable Bit + * | | |If this bit is set to 1 and AVLD (OTG_STATUS[4]) status is changed from high to low or from low to high, a interrupt will be asserted. + * | | |0 = Interrupt Disabled. + * | | |1 = Interrupt Enabled. + * |[10] |VBCHGIEN |VBUSVLD Status Changed + * | | |Interrupt Enable Bit + * | | |If this bit is set to 1 and VBUSVLD (OTG_STATUS[5]) status is changed from high to low or from low to high, a interrupt will be asserted. + * | | |0 = Interrupt Disabled. + * | | |1 = Interrupt Enabled. + * |[11] |SECHGIEN |SESSEND Status Changed Interrupt Enable Bit + * | | |If this bit is set to 1 and SESSEND (OTG_STATUS[2]) status is changed from high to low or from low to high, a interrupt will be asserted. + * | | |0 = Interrupt Disabled. + * | | |1 = Interrupt Enabled. + * |[13] |SRPDETIEN |SRP Detected Interrupt Enable Bit + * | | |0 = Interrupt Disabled. + * | | |1 = Interrupt Enabled. + * @var OTG_T::INTSTS + * Offset: 0x0C OTG Interrupt Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |ROLECHGIF |OTG Role Change Interrupt Status + * | | |This flag is set when the role of an OTG device changed from a host to a peripheral, or changed from a peripheral to a host while USB_ID pin status does not change. + * | | |0 = OTG device role not changed. + * | | |1 = OTG device role changed. + * | | |Note: Write 1 to clear this flag. + * |[1] |VBEIF |VBUS Error Interrupt Status + * | | |This bit will be set when voltage on VBUS cannot reach a minimum valid threshold 4.4V within a maximum time of 100ms after OTG A-device starting to drive VBUS high. + * | | |0 = OTG A-device drives VBUS over threshold voltage before this interval expires. + * | | |1 = OTG A-device cannot drive VBUS over threshold voltage before this interval expires. + * | | |Note: Write 1 to clear this flag and recover from the VBUS error state. + * |[2] |SRPFIF |SRP Fail Interrupt Status + * | | |After initiating SRP, an OTG B-device will wait for the OTG A-device to drive VBUS high at least TB_SRP_FAIL minimum, defined in OTG specification. + * | | |This flag is set when the OTG B-device does not get VBUS high after this interval. + * | | |0 = OTG B-device gets VBUS high before this interval. + * | | |1 = OTG B-device does not get VBUS high before this interval. + * | | |Note: Write 1 to clear this flag. + * |[3] |HNPFIF |HNP Fail Interrupt Status + * | | |When A-device has granted B-device to be host and USB bus is in SE0 (both USB_D+ and USB_D- low) state, this bit will be set when A-device does not connect after specified interval expires. + * | | |0 = A-device connects to B-device before specified interval expires. + * | | |1 = A-device does not connect to B-device before specified interval expires. + * | | |Note: Write 1 to clear this flag. + * |[4] |GOIDLEIF |OTG Device Goes to IDLE Interrupt Status + * | | |Flag is set if the OTG device transfers from non-idle state to idle state. + * | | |The OTG device will be neither a host nor a peripheral. + * | | |0 = OTG device does not go back to idle state (a_idle or b_idle). + * | | |1 = OTG device goes back to idle state (a_idle or b_idle). + * | | |Note 1: Going to idle state means going to a_idle or b_idle state. Please refer to OTG specification for the details of a_idle state and b_idle state. + * | | |Note 2: Write 1 to clear this flag. + * |[5] |IDCHGIF |ID State Change Interrupt Status + * | | |0 = IDSTS (OTG_STATUS[1]) not toggled. + * | | |1 = IDSTS (OTG_STATUS[1]) from high to low or from low to high. + * | | |Note: Write 1 to clear this flag. + * |[6] |PDEVIF |Act As Peripheral Interrupt Status + * | | |0 = This device does not act as a peripheral. + * | | |1 = This device acts as a peripheral. + * | | |Note: Write 1 to clear this flag. + * |[7] |HOSTIF |Act As Host Interrupt Status + * | | |0 = This device does not act as a host. + * | | |1 = This device acts as a host. + * | | |Note: Write 1 to clear this flag. + * |[8] |BVLDCHGIF |B-Device Session Valid State Change Interrupt Status + * | | |0 = BVLD (OTG_STATUS[3]) is not toggled. + * | | |1 = BVLD (OTG_STATUS[3]) from high to low or low to high. + * | | |Note: Write 1 to clear this status. + * |[9] |AVLDCHGIF |A-Device Session Valid State Change Interrupt Status + * | | |0 = AVLD (OTG_STATUS[4]) not toggled. + * | | |1 = AVLD (OTG_STATUS[4]) from high to low or low to high. + * | | |Note: Write 1 to clear this status. + * |[10] |VBCHGIF |VBUSVLD State Change Interrupt Status + * | | |0 = VBUSVLD (OTG_STATUS[5]) not toggled. + * | | |1 = VBUSVLD (OTG_STATUS[5]) from high to low or from low to high. + * | | |Note: Write 1 to clear this status. + * |[11] |SECHGIF |SESSEND State Change Interrupt Status + * | | |0 = SESSEND (OTG_STATUS[2]) not toggled. + * | | |1 = SESSEND (OTG_STATUS[2]) from high to low or from low to high. + * | | |Note: Write 1 to clear this flag. + * |[13] |SRPDETIF |SRP Detected Interrupt Status + * | | |0 = SRP not detected. + * | | |1 = SRP detected. + * | | |Note: Write 1 to clear this status. + * @var OTG_T::STATUS + * Offset: 0x10 OTG Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |OVERCUR |Over Current Condition + * | | |The voltage on VBUS cannot reach a minimum VBUS valid threshold, 4.4V minimum, within a maximum time of 100ms after OTG A-device drives VBUS high. + * | | |0 = OTG A-device drives VBUS successfully. + * | | |1 = OTG A-device cannot drives VBUS high in this interval. + * |[1] |IDSTS |USB_ID Pin State Of Mini-B/Micro-Plug + * | | |0 = Mini-A/Micro-A plug is attached. + * | | |1 = Mini-B/Micro-B plug is attached. + * |[2] |SESSEND |Session End Status + * | | |When VBUS voltage is lower than 0.4V, this bit will be set to 1. + * | | |Session end means no meaningful power on VBUS. + * | | |0 = Session is not end. + * | | |1 = Session is end. + * |[3] |BVLD |B-Device Session Valid Status + * | | |0 = B-device session is not valid. + * | | |1 = B-device session is valid. + * |[4] |AVLD |A-Device Session Valid Status + * | | |0 = A-device session is not valid. + * | | |1 = A-device session is valid. + * |[5] |VBUSVLD |VBUS Valid Status + * | | |When VBUS is larger than 4.7V, this bit will be set to 1. + * | | |0 = VBUS is not valid. + * | | |1 = VBUS is valid. + */ + + __IO uint32_t CTL; /* Offset: 0x00 OTG Control Register */ + __IO uint32_t PHYCTL; /* Offset: 0x04 OTG PHY Control Register */ + __IO uint32_t INTEN; /* Offset: 0x08 OTG Interrupt Enable Register */ + __IO uint32_t INTSTS; /* Offset: 0x0C OTG Interrupt Status Register */ + __I uint32_t STATUS; /* Offset: 0x10 OTG Status Register */ + +} OTG_T; + + + +/** + @addtogroup OTG_CONST OTG Bit Field Definition + Constant Definitions for OTG Controller +@{ */ + +#define OTG_CTL_VBUSDROP_Pos (0) /*!< OTG_T::CTL: VBUSDROP Position */ +#define OTG_CTL_VBUSDROP_Msk (0x1ul << OTG_CTL_VBUSDROP_Pos) /*!< OTG_T::CTL: VBUSDROP Mask */ + +#define OTG_CTL_BUSREQ_Pos (1) /*!< OTG_T::CTL: BUSREQ Position */ +#define OTG_CTL_BUSREQ_Msk (0x1ul << OTG_CTL_BUSREQ_Pos) /*!< OTG_T::CTL: BUSREQ Mask */ + +#define OTG_CTL_HNPREQEN_Pos (2) /*!< OTG_T::CTL: HNPREQEN Position */ +#define OTG_CTL_HNPREQEN_Msk (0x1ul << OTG_CTL_HNPREQEN_Pos) /*!< OTG_T::CTL: HNPREQEN Mask */ + +#define OTG_CTL_OTGEN_Pos (4) /*!< OTG_T::CTL: OTGEN Position */ +#define OTG_CTL_OTGEN_Msk (0x1ul << OTG_CTL_OTGEN_Pos) /*!< OTG_T::CTL: OTGEN Mask */ + +#define OTG_CTL_WKEN_Pos (5) /*!< OTG_T::CTL: WKEN Position */ +#define OTG_CTL_WKEN_Msk (0x1ul << OTG_CTL_WKEN_Pos) /*!< OTG_T::CTL: WKEN Mask */ + +#define OTG_PHYCTL_OTGPHYEN_Pos (0) /*!< OTG_T::PHYCTL: OTGPHYEN Position */ +#define OTG_PHYCTL_OTGPHYEN_Msk (0x1ul << OTG_PHYCTL_OTGPHYEN_Pos) /*!< OTG_T::PHYCTL: OTGPHYEN Mask */ + +#define OTG_PHYCTL_IDDETEN_Pos (1) /*!< OTG_T::PHYCTL: IDDETEN Position */ +#define OTG_PHYCTL_IDDETEN_Msk (0x1ul << OTG_PHYCTL_IDDETEN_Pos) /*!< OTG_T::PHYCTL: IDDETEN Mask */ + +#define OTG_PHYCTL_VBENPOL_Pos (4) /*!< OTG_T::PHYCTL: VBENPOL Position */ +#define OTG_PHYCTL_VBENPOL_Msk (0x1ul << OTG_PHYCTL_VBENPOL_Pos) /*!< OTG_T::PHYCTL: VBENPOL Mask */ + +#define OTG_PHYCTL_VBSTSPOL_Pos (5) /*!< OTG_T::PHYCTL: VBSTSPOL Position */ +#define OTG_PHYCTL_VBSTSPOL_Msk (0x1ul << OTG_PHYCTL_VBSTSPOL_Pos) /*!< OTG_T::PHYCTL: VBSTSPOL Mask */ + +#define OTG_INTEN_ROLECHGIEN_Pos (0) /*!< OTG_T::INTEN: ROLECHGIEN Position */ +#define OTG_INTEN_ROLECHGIEN_Msk (0x1ul << OTG_INTEN_ROLECHGIEN_Pos) /*!< OTG_T::INTEN: ROLECHGIEN Mask */ + +#define OTG_INTEN_VBEIEN_Pos (1) /*!< OTG_T::INTEN: VBEIEN Position */ +#define OTG_INTEN_VBEIEN_Msk (0x1ul << OTG_INTEN_VBEIEN_Pos) /*!< OTG_T::INTEN: VBEIEN Mask */ + +#define OTG_INTEN_SRPFIEN_Pos (2) /*!< OTG_T::INTEN: SRPFIEN Position */ +#define OTG_INTEN_SRPFIEN_Msk (0x1ul << OTG_INTEN_SRPFIEN_Pos) /*!< OTG_T::INTEN: SRPFIEN Mask */ + +#define OTG_INTEN_HNPFIEN_Pos (3) /*!< OTG_T::INTEN: HNPFIEN Position */ +#define OTG_INTEN_HNPFIEN_Msk (0x1ul << OTG_INTEN_HNPFIEN_Pos) /*!< OTG_T::INTEN: HNPFIEN Mask */ + +#define OTG_INTEN_GOIDLEIEN_Pos (4) /*!< OTG_T::INTEN: GOIDLEIEN Position */ +#define OTG_INTEN_GOIDLEIEN_Msk (0x1ul << OTG_INTEN_GOIDLEIEN_Pos) /*!< OTG_T::INTEN: GOIDLEIEN Mask */ + +#define OTG_INTEN_IDCHGIEN_Pos (5) /*!< OTG_T::INTEN: IDCHGIEN Position */ +#define OTG_INTEN_IDCHGIEN_Msk (0x1ul << OTG_INTEN_IDCHGIEN_Pos) /*!< OTG_T::INTEN: IDCHGIEN Mask */ + +#define OTG_INTEN_PDEVIEN_Pos (6) /*!< OTG_T::INTEN: PDEVIEN Position */ +#define OTG_INTEN_PDEVIEN_Msk (0x1ul << OTG_INTEN_PDEVIEN_Pos) /*!< OTG_T::INTEN: PDEVIEN Mask */ + +#define OTG_INTEN_HOSTIEN_Pos (7) /*!< OTG_T::INTEN: HOSTIEN Position */ +#define OTG_INTEN_HOSTIEN_Msk (0x1ul << OTG_INTEN_HOSTIEN_Pos) /*!< OTG_T::INTEN: HOSTIEN Mask */ + +#define OTG_INTEN_BVLDCHGIEN_Pos (8) /*!< OTG_T::INTEN: BVLDCHGIEN Position */ +#define OTG_INTEN_BVLDCHGIEN_Msk (0x1ul << OTG_INTEN_BVLDCHGIEN_Pos) /*!< OTG_T::INTEN: BVLDCHGIEN Mask */ + +#define OTG_INTEN_AVLDCHGIEN_Pos (9) /*!< OTG_T::INTEN: AVLDCHGIEN Position */ +#define OTG_INTEN_AVLDCHGIEN_Msk (0x1ul << OTG_INTEN_AVLDCHGIEN_Pos) /*!< OTG_T::INTEN: AVLDCHGIEN Mask */ + +#define OTG_INTEN_VBCHGIEN_Pos (10) /*!< OTG_T::INTEN: VBCHGIEN Position */ +#define OTG_INTEN_VBCHGIEN_Msk (0x1ul << OTG_INTEN_VBCHGIEN_Pos) /*!< OTG_T::INTEN: VBCHGIEN Mask */ + +#define OTG_INTEN_SECHGIEN_Pos (11) /*!< OTG_T::INTEN: SECHGIEN Position */ +#define OTG_INTEN_SECHGIEN_Msk (0x1ul << OTG_INTEN_SECHGIEN_Pos) /*!< OTG_T::INTEN: SECHGIEN Mask */ + +#define OTG_INTEN_SRPDETIEN_Pos (13) /*!< OTG_T::INTEN: SRPDETIEN Position */ +#define OTG_INTEN_SRPDETIEN_Msk (0x1ul << OTG_INTEN_SRPDETIEN_Pos) /*!< OTG_T::INTEN: SRPDETIEN Mask */ + +#define OTG_INTSTS_ROLECHGIF_Pos (0) /*!< OTG_T::INTSTS: ROLECHGIF Position */ +#define OTG_INTSTS_ROLECHGIF_Msk (0x1ul << OTG_INTSTS_ROLECHGIF_Pos) /*!< OTG_T::INTSTS: ROLECHGIF Mask */ + +#define OTG_INTSTS_VBEIF_Pos (1) /*!< OTG_T::INTSTS: VBEIF Position */ +#define OTG_INTSTS_VBEIF_Msk (0x1ul << OTG_INTSTS_VBEIF_Pos) /*!< OTG_T::INTSTS: VBEIF Mask */ + +#define OTG_INTSTS_SRPFIF_Pos (2) /*!< OTG_T::INTSTS: SRPFIF Position */ +#define OTG_INTSTS_SRPFIF_Msk (0x1ul << OTG_INTSTS_SRPFIF_Pos) /*!< OTG_T::INTSTS: SRPFIF Mask */ + +#define OTG_INTSTS_HNPFIF_Pos (3) /*!< OTG_T::INTSTS: HNPFIF Position */ +#define OTG_INTSTS_HNPFIF_Msk (0x1ul << OTG_INTSTS_HNPFIF_Pos) /*!< OTG_T::INTSTS: HNPFIF Mask */ + +#define OTG_INTSTS_GOIDLEIF_Pos (4) /*!< OTG_T::INTSTS: GOIDLEIF Position */ +#define OTG_INTSTS_GOIDLEIF_Msk (0x1ul << OTG_INTSTS_GOIDLEIF_Pos) /*!< OTG_T::INTSTS: GOIDLEIF Mask */ + +#define OTG_INTSTS_IDCHGIF_Pos (5) /*!< OTG_T::INTSTS: IDCHGIF Position */ +#define OTG_INTSTS_IDCHGIF_Msk (0x1ul << OTG_INTSTS_IDCHGIF_Pos) /*!< OTG_T::INTSTS: IDCHGIF Mask */ + +#define OTG_INTSTS_PDEVIF_Pos (6) /*!< OTG_T::INTSTS: PDEVIF Position */ +#define OTG_INTSTS_PDEVIF_Msk (0x1ul << OTG_INTSTS_PDEVIF_Pos) /*!< OTG_T::INTSTS: PDEVIF Mask */ + +#define OTG_INTSTS_HOSTIF_Pos (7) /*!< OTG_T::INTSTS: HOSTIF Position */ +#define OTG_INTSTS_HOSTIF_Msk (0x1ul << OTG_INTSTS_HOSTIF_Pos) /*!< OTG_T::INTSTS: HOSTIF Mask */ + +#define OTG_INTSTS_BVLDCHGIF_Pos (8) /*!< OTG_T::INTSTS: BVLDCHGIF Position */ +#define OTG_INTSTS_BVLDCHGIF_Msk (0x1ul << OTG_INTSTS_BVLDCHGIF_Pos) /*!< OTG_T::INTSTS: BVLDCHGIF Mask */ + +#define OTG_INTSTS_AVLDCHGIF_Pos (9) /*!< OTG_T::INTSTS: AVLDCHGIF Position */ +#define OTG_INTSTS_AVLDCHGIF_Msk (0x1ul << OTG_INTSTS_AVLDCHGIF_Pos) /*!< OTG_T::INTSTS: AVLDCHGIF Mask */ + +#define OTG_INTSTS_VBCHGIF_Pos (10) /*!< OTG_T::INTSTS: VBCHGIF Position */ +#define OTG_INTSTS_VBCHGIF_Msk (0x1ul << OTG_INTSTS_VBCHGIF_Pos) /*!< OTG_T::INTSTS: VBCHGIF Mask */ + +#define OTG_INTSTS_SECHGIF_Pos (11) /*!< OTG_T::INTSTS: SECHGIF Position */ +#define OTG_INTSTS_SECHGIF_Msk (0x1ul << OTG_INTSTS_SECHGIF_Pos) /*!< OTG_T::INTSTS: SECHGIF Mask */ + +#define OTG_INTSTS_SRPDETIF_Pos (13) /*!< OTG_T::INTSTS: SRPDETIF Position */ +#define OTG_INTSTS_SRPDETIF_Msk (0x1ul << OTG_INTSTS_SRPDETIF_Pos) /*!< OTG_T::INTSTS: SRPDETIF Mask */ + +#define OTG_STATUS_OVERCUR_Pos (0) /*!< OTG_T::STATUS: OVERCUR Position */ +#define OTG_STATUS_OVERCUR_Msk (0x1ul << OTG_STATUS_OVERCUR_Pos) /*!< OTG_T::STATUS: OVERCUR Mask */ + +#define OTG_STATUS_IDSTS_Pos (1) /*!< OTG_T::STATUS: IDSTS Position */ +#define OTG_STATUS_IDSTS_Msk (0x1ul << OTG_STATUS_IDSTS_Pos) /*!< OTG_T::STATUS: IDSTS Mask */ + +#define OTG_STATUS_SESSEND_Pos (2) /*!< OTG_T::STATUS: SESSEND Position */ +#define OTG_STATUS_SESSEND_Msk (0x1ul << OTG_STATUS_SESSEND_Pos) /*!< OTG_T::STATUS: SESSEND Mask */ + +#define OTG_STATUS_BVLD_Pos (3) /*!< OTG_T::STATUS: BVLD Position */ +#define OTG_STATUS_BVLD_Msk (0x1ul << OTG_STATUS_BVLD_Pos) /*!< OTG_T::STATUS: BVLD Mask */ + +#define OTG_STATUS_AVLD_Pos (4) /*!< OTG_T::STATUS: AVLD Position */ +#define OTG_STATUS_AVLD_Msk (0x1ul << OTG_STATUS_AVLD_Pos) /*!< OTG_T::STATUS: AVLD Mask */ + +#define OTG_STATUS_VBUSVLD_Pos (5) /*!< OTG_T::STATUS: VBUSVLD Position */ +#define OTG_STATUS_VBUSVLD_Msk (0x1ul << OTG_STATUS_VBUSVLD_Pos) /*!< OTG_T::STATUS: VBUSVLD Mask */ + +/**@}*/ /* OTG_CONST */ +/**@}*/ /* end of OTG register group */ + + +/*---------------------- Peripheral Direct Memory Access Controller -------------------------*/ +/** + @addtogroup PDMA Peripheral Direct Memory Access Controller(PDMA) + Memory Mapped Structure for PDMA Controller +@{ */ + + +typedef struct +{ + + +/** + * @var DSCT_T::CTL + * Offset: 0x00/0x10/0x20/0x30/0x40/0x50/0x60/0x70/0x80/0x90/0xA0/0xB0 Descriptor Table Control Register of PDMA Channel 0~11 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[1:0] |OPMODE |PDMA Operation Mode Selection + * | | |0 = Idle state: Channel is stopped or this table is complete, when PDMA finish channel table task, OPMODE will be cleared to idle state automatically. + * | | |1 = Basic mode: The descriptor table only has one task. + * | | |When this task is finished, the PDMA_INTSTS[x] will be asserted. + * | | |2 = Scatter-Gather mode: When operating in this mode, user must give the next descriptor table address in PDMA_DSCT_NEXT register; PDMA controller will ignore this task, then load the next task to execute. + * | | |3 = Reserved. + * | | |Note: Before filling transfer task in the Descriptor Table, user must check if the descriptor table is complete. + * |[2] |TXTYPE |Transfer Type + * | | |0 = Burst transfer type. + * | | |1 = Single transfer type. + * |[6:4] |BURSIZE |Burst Size + * | | |This field is used for peripheral to determine the burst size or used for determine the re-arbitration size. + * | | |000 = 128 Transfers. + * | | |001 = 64 Transfers. + * | | |010 = 32 Transfers. + * | | |011 = 16 Transfers. + * | | |100 = 8 Transfers. + * | | |101 = 4 Transfers. + * | | |110 = 2 Transfers. + * | | |111 = 1 Transfers. + * | | |Note: This field is only useful in burst transfer type. + * |[7] |TBINTDIS |Table Interrupt Disable + * | | |This field can be used to decide whether to enable table interrupt or not. + * | | |If the TBINTDIS bit is enabled when PDMA controller finishes transfer task, it will not generates interrupt. + * | | |0 = Table interrupt Enabled. + * | | |1 = Table interrupt Disabled. + * | | |Note: If this bit set to '1', the TEMPTYF will not be set. + * |[9:8] |SAINC |Source Address Increment + * | | |This field is used to set the source address increment size. + * | | |11 = No increment (fixed address). + * | | |Others = Increment and size is depended on TXWIDTH selection. + * |[11:10] |DAINC |Destination Address Increment + * | | |This field is used to set the destination address increment size. + * | | |11 = No increment (fixed address). + * | | |Others = Increment and size is depended on TXWIDTH selection. + * |[13:12] |TXWIDTH |Transfer Width Selection + * | | |This field is used for transfer width. + * | | |00 = One byte (8 bit) is transferred for every operation. + * | | |01= One half-word (16 bit) is transferred for every operation. + * | | |10 = One word (32-bit) is transferred for every operation. + * | | |11 = Reserved. + * | | |Note: The PDMA transfer source address (PDMA_DSCT_SA) and PDMA transfer destination address (PDMA_DSCT_DA) should be alignment under the TXWIDTH selection + * |[29:16] |TXCNT |Transfer Count + * | | |The TXCNT represents the required number of PDMA transfer, the real transfer count is (TXCNT + 1); The maximum transfer count is 16384 , every transfer may be byte, half-word or word that is dependent on TXWIDTH field. + * | | |Note: When PDMA finish each transfer data, this field will be decrease immediately. + * @var DSCT_T::SA + * Offset: 0x04/0x14/0x24/0x34/0x44/0x54/0x64/0x74/0x84/0x94/0xA4/0xB4 Source Address Register of PDMA Channel 0~11 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:0] |SA |PDMA Transfer Source Address Register + * | | |This field indicates a 32-bit source address of PDMA controller. + * @var DSCT_T::DA + * Offset: 0x08/0x18/0x28/0x38/0x48/0x58/0x68/0x78/0x88/0x98/0xA8/0xB8 Destination Address Register of PDMA Channel 0~11 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:0] |DA |PDMA Transfer Destination Address Register + * | | |This field indicates a 32-bit destination address of PDMA controller. + * @var DSCT_T::NEXT + * Offset: 0x0C/0x1C/0x2C/0x3C/0x4C/0x5C/0x6C/0x7C/0x8C/0x9C/0xAC/0xBC First Scatter-Gather Descriptor Table Offset Address of PDMA Channel 0~11 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:2] |NEXT |PDMA Next Descriptor Table Offset Address Register + * | | |This field indicates the offset of next descriptor table address in system memory. + * | | |The system memory based address is 0x2000_0000 (PDMA_SCATBA), if the next descriptor table is 0x2000_0100, then this field must fill in 0x0100. + * | | |Note1: The next descriptor table address must be word boundary. + * | | |Note2: Before filled transfer task in the descriptor table, user must check if the descriptor table is complete. + */ + + __IO uint32_t CTL; /* Offset: 0x00/0x10/0x20/0x30/0x40/0x50/0x60/0x70/0x80/0x90/0xA0/0xB0 Descriptor Table Control Register of PDMA Channel 0~11 */ + __IO uint32_t SA; /* Offset: 0x04/0x14/0x24/0x34/0x44/0x54/0x64/0x74/0x84/0x94/0xA4/0xB4 Source Address Register of PDMA Channel 0~11 */ + __IO uint32_t DA; /* Offset: 0x08/0x18/0x28/0x38/0x48/0x58/0x68/0x78/0x88/0x98/0xA8/0xB8 Destination Address Register of PDMA Channel 0~11 */ + __IO uint32_t NEXT; /* Offset: 0x0C/0x1C/0x2C/0x3C/0x4C/0x5C/0x6C/0x7C/0x8C/0x9C/0xAC/0xBC First Scatter-Gather Descriptor Table Offset Address of PDMA Channel 0~11 */ + +} DSCT_T; + + + + +typedef struct +{ + + +/** + * @var PDMA_T::DSCT + * Offset: 0x0000 ~ 0x00BC DMA Embedded Description Table 0~11 + * --------------------------------------------------------------------------------------------------- + * @var PDMA_T::CURSCAT + * Offset: 0xC0 ~ 0xEC Current Scatter-Gather Descriptor Table Address of PDMA Channel 0~11 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:0] |CURADDR |PDMA Current Description Address Register (Read Only) + * | | |This field indicates a 32-bit current external description address of PDMA controller. + * | | |Note: This field is read only and only used for Scatter-Gather mode to indicate the current external description address. + * @var PDMA_T::CHCTL + * Offset: 0x400 PDMA Channel Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[11:0] |CHENn |PDMA Channel Enable Bit + * | | |Set this bit to 1 to enable PDMAn operation. + * | | |If each channel is not set as enabled, each channel cannot be active. + * | | |0 = PDMA channel [n] Disabled. + * | | |1 = PDMA channel [n] Enabled. + * | | |Note1: If software stops each PDMA transfer by setting PDMA_STOP register, this bit will be cleared automatically after finishing current transfer. + * | | |Note2: Software reset (writing 0xFFFF_FFFF to PDMA_STOP register) will also clear this bit. + * @var PDMA_T::STOP + * Offset: 0x404 PDMA Transfer Stop Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[11:0] |STOPn |PDMA Transfer Stop Control Register (Write Only) + * | | |User can stop the PDMA transfer by STOPn bit field or by software reset (writing '0xFFFF_FFFF' to PDMA_STOP register). + * | | |By bit field: + * | | |0 = No effect. + * | | |1 = Stop PDMA transfer[n]. + * | | |When software set PDMA_STOP bit, the operation will finish the on-going transfer channel and then clear the channel enable bit (PDMA_CHCTL [CHEN]) and request active flag. + * | | |By write 0xFFFF_FFFF to PDMA_STOP: + * | | |Setting all PDMA_STOP bit to "1" will generate software reset to reset internal state machine (the DSCT will not be reset). + * | | |When software reset, the operation will be stopped imminently that include the on-going transfer and the channel enable bit (PDMA_CHCTL [CHEN]) and request active flag will be cleared to '0'. + * | | |Note: User can poll channel enable bit to know if the on-going transfer is finished. + * @var PDMA_T::SWREQ + * Offset: 0x408 PDMA Software Request Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[11:0] |SWREQn |PDMA Software Request Register (Write Only) + * | | |Set this bit to 1 to generate a software request to PDMA [n]. + * | | |0 = No effect. + * | | |1 = Generate a software request. + * | | |Note1: User can read PDMA_TRGSTS register to know which channel is on active. + * | | |Active flag may be triggered by software request or peripheral request. + * | | |Note2: If user does not enable each PDMA channel, the software request will be ignored. + * @var PDMA_T::TRGSTS + * Offset: 0x40C PDMA Channel Request Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[11:0] |REQSTSn |PDMA Channel Request Status (Read Only) + * | | |This flag indicates whether channel[n] have a request or not, no matter request from software or peripheral. + * | | |When PDMA controller finishes channel transfer, this bit will be cleared automatically. + * | | |0 = PDMA Channel n has no request. + * | | |1 = PDMA Channel n has a request. + * | | |Note1: If software stops each PDMA transfer by setting PDMA_STOP register, this bit will be cleared automatically after finishing current transfer. + * | | |Note2: Software reset (writing 0xFFFF_FFFF to PDMA_STOP register) will also clear this bit. + * @var PDMA_T::PRISET + * Offset: 0x410 PDMA Fixed Priority Setting Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[11:0] |FPRISETn |PDMA Fixed Priority Setting Register + * | | |Set this bit to 1 to enable fixed priority level. + * | | |Write Operation: + * | | |0 = No effect. + * | | |1 = Set PDMA channel [n] to fixed priority channel. + * | | |Read Operation: + * | | |0 = Corresponding PDMA channel is round-robin priority. + * | | |1 = Corresponding PDMA channel is fixed priority. + * | | |Note: This field only set to fixed priority, clear fixed priority use PDMA_PRICLR register. + * @var PDMA_T::PRICLR + * Offset: 0x414 PDMA Fixed Priority Clear Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[11:0] |FPRICLRn |PDMA Fixed Priority Clear Register (Write Only) + * | | |Set this bit to 1 to clear fixed priority level. + * | | |0 = No effect. + * | | |1 = Clear PDMA channel [n] fixed priority setting. + * | | |Note: User can read PDMA_PRISET register to know the channel priority. + * @var PDMA_T::INTEN + * Offset: 0x418 PDMA Interrupt Enable Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[11:0] |INTENn |PDMA Interrupt Enable Register + * | | |This field is used for enabling PDMA channel[n] interrupt. + * | | |0 = PDMA channel n interrupt Disabled. + * | | |1 = PDMA channel n interrupt Enabled. + * |[31:12] |Reserved |should be keep 0. + * @var PDMA_T::INTSTS + * Offset: 0x41C PDMA Interrupt Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |ABTIF |PDMA Read/Write Target Abort Interrupt Flag (Read-Only) + * | | |This bit indicates that PDMA has target abort error; Software can read PDMA_ABTSTS register to find which channel has target abort error. + * | | |0 = No AHB bus ERROR response received. + * | | |1 = AHB bus ERROR response received. + * |[1] |TDIF |Transfer Done Interrupt Flag (Read Only) + * | | |This bit indicates that PDMA controller has finished transmission; User can read PDMA_TDSTS register to indicate which channel finished transfer. + * | | |0 = Not finished yet. + * | | |1 = PDMA channel has finished transmission. + * |[2] |TEIF |Table Empty Interrupt Flag (Read Only) + * | | |This bit indicates that PDMA controller has finished each table transmission and the operation is Stop mode. + * | | |User can read TEIF register to indicate which channel finished transfer. + * | | |0 = PDMA channel transfer is not finished. + * | | |1 = PDMA channel transfer is finished and the operation is in idle state. + * |[8:15] |REQTOFn |Request Time-out Flag For Each Channel [N](M45xD/M45xC Only) + * | | |This flag indicates that PDMA controller has waited peripheral request for a period defined by PDMA_TOCn, user can write 1 to clear these bits. + * | | |0 = No request time-out. + * | | |1 = Peripheral request time-out. + * @var PDMA_T::ABTSTS + * Offset: 0x420 PDMA Channel Read/Write Target Abort Flag Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[11:0] |ABTIFn |PDMA Read/Write Target Abort Interrupt Status Flag + * | | |This bit indicates which PDMA controller has target abort error; User can write 1 to clear these bits. + * | | |0 = No AHB bus ERROR response received when channel n transfer. + * | | |1 = AHB bus ERROR response received when channel n transfer. + * @var PDMA_T::TDSTS + * Offset: 0x424 PDMA Channel Transfer Done Flag Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[11:0] |TDIFn |Transfer Done Flag Register + * | | |This bit indicates whether PDMA controller channel transfer has been finished or not, user can write 1 to clear these bits. + * | | |0 = PDMA channel transfer has not finished. + * | | |1 = PDMA channel has finished transmission. + * @var PDMA_T::SCATSTS + * Offset: 0x428 PDMA Scatter-Gather Table Empty Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[11:0] |TEMPTYFn |Scatter-Gather Table Empty Flag Register + * | | |This bit indicates which PDMA channel n Scatter Gather table is empty when SWREQn set to high or channel has finished transmission and the operation mode is Stop mode. + * | | |User can write 1 to clear these bits. + * | | |0 = PDMA channel scatter-gather table is not empty. + * | | |1 = PDMA channel scatter-gather table is empty and PDMA SWREQ has be set. + * @var PDMA_T::TACTSTS + * Offset: 0x42C PDMA Transfer Active Flag Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[11:0] |TXACTFn |Transfer On Active Flag Register (Read Only) + * | | |This bit indicates which PDMA channel is in active. + * | | |0 = PDMA channel is not finished. + * | | |1 = PDMA channel is active. + * @var PDMA_T::TOUTEN + * Offset: 0x434 PDMA Time-out Enable register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |TOUTENn |PDMA Time-Out Enable Bits + * | | |0 = PDMA Channel n time-out function Disable. + * | | |1 = PDMA Channel n time-out function Enable. + * @var PDMA_T::TOUTIEN + * Offset: 0x438 PDMA Time-out Interrupt Enable register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |TOUTIENn |PDMA Time-Out Interrupt Enable Bits + * | | |0 = PDMA Channel n time-out interrupt Disable. + * | | |1 = PDMA Channel n time-out interrupt Enable. + * @var PDMA_T::SCATBA + * Offset: 0x43C PDMA Scatter-Gather Descriptor Table Base Address Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:16] |SCATBA |PDMA Scatter-Gather Descriptor Table Address Register + * | | |In Scatter-Gather mode, this is the base address for calculating the next link - list address. + * | | |The next link address equation is. + * | | |Next Link Address = PDMA_SCATBA + PDMA_DSCT_NEXT. + * | | |Note: Only useful in Scatter-Gather mode. + * @var PDMA_T::TOC0_1 + * Offset: 0x440 PDMA Time-out Counter Ch1 and Ch0 Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:16] |TOC1 |Time-Out Counter For Channel 1 + * | | |This controls the period of time-out function for channel 1. The calculation unit is based on 10 kHz clock. + * |[15:0] |TOC0 |Time-Out Counter For Channel 0 + * | | |This controls the period of time-out function for channel 0. The calculation unit is based on 10 kHz clock. + * @var PDMA_T::TOC2_3 + * Offset: 0x444 PDMA Time-out Counter Ch3 and Ch2 Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:16] |TOC3 |Time-Out Counter For Channel 3 + * | | |This controls the period of time-out function for channel 3. The calculation unit is based on 10 kHz clock. + * |[15:0] |TOC2 |Time-Out Counter For Channel 2 + * | | |This controls the period of time-out function for channel 2. The calculation unit is based on 10 kHz clock. + * @var PDMA_T::TOC4_5 + * Offset: 0x448 PDMA Time-out Counter Ch5 and Ch4 Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:16] |TOC5 |Time-Out Counter For Channel 5 + * | | |This controls the period of time-out function for channel 5. The calculation unit is based on 10 kHz clock. + * |[15:0] |TOC4 |Time-Out Counter For Channel 4 + * | | |This controls the period of time-out function for channel 4. The calculation unit is based on 10 kHz clock. + * @var PDMA_T::TOC6_7 + * Offset: 0x44C PDMA Time-out Counter Ch7 and Ch6 Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:16] |TOC7 |Time-Out Counter For Channel 7 + * | | |This controls the period of time-out function for channel 7. The calculation unit is based on 10 kHz clock. + * |[15:0] |TOC6 |Time-Out Counter For Channel 6 + * | | |This controls the period of time-out function for channel 6. The calculation unit is based on 10 kHz clock. + * @var PDMA_T::REQSEL0_3 + * Offset: 0x480 PDMA Request Source Select Register 0 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[4:0] |REQSRC0 |Channel 0 Request Source Selection + * | | |This filed defines which peripheral is connected to PDMA channel 0. + * | | |User can configure the peripheral by setting REQSRC0. + * | | |1 = Channel connects to SPI0_TX. + * | | |2 = Channel connects to SPI1_TX. + * | | |3 = Channel connects to SPI2_TX. + * | | |4 = Channel connects to UART0_TX. + * | | |5 = Channel connects to UART1_TX. + * | | |6 = Channel connects to UART2_TX. + * | | |7 = Channel connects to UART3_TX. + * | | |8 = Channel connects to DAC_TX. + * | | |9 = Channel connects to ADC_RX. + * | | |11 = Channel connects to PWM0_P1_RX. + * | | |12 = Channel connects to PWM0_P2_RX. + * | | |13 = Channel connects to PWM0_P3_RX. + * | | |14 = Channel connects to PWM1_P1_RX. + * | | |15 = Channel connects to PWM1_P2_RX. + * | | |16 = Channel connects to PWM1_P3_RX. + * | | |17 = Channel connects to SPI0_RX. + * | | |18 = Channel connects to SPI1_RX. + * | | |19 = Channel connects to SPI2_RX. + * | | |20 = Channel connects to UART0_RX. + * | | |21 = Channel connects to UART1_RX. + * | | |22 = Channel connects to UART2_RX. + * | | |23 = Channel connects to UART3_RX. + * | | |31 = Disable PDMA. + * | | |Others = Reserved. + * | | |Note 1: A peripheral can't assign to two channels at the same time. + * | | |Note 2: This field is useless when transfer between memory and memory. + * |[12:8] |REQSRC1 |Channel 1 Request Source Selection + * | | |This filed defines which peripheral is connected to PDMA channel 1. + * | | |User can configure the peripheral setting by REQSRC1. + * | | |Note: The channel configuration is the same as REQSRC0 field. + * | | |Please refer to the explanation of REQSRC0. + * |[20:16] |REQSRC2 |Channel 2 Request Source Selection + * | | |This filed defines which peripheral is connected to PDMA channel 2. + * | | |User can configure the peripheral setting by REQSRC2. + * | | |Note: The channel configuration is the same as REQSRC0 field. + * | | |Please refer to the explanation of REQSRC0. + * |[28:24] |REQSRC3 |Channel 3 Request Source Selection + * | | |This filed defines which peripheral is connected to PDMA channel 3. + * | | |User can configure the peripheral setting by REQSRC3. + * | | |Note: The channel configuration is the same as REQSRC0 field. + * | | |Please refer to the explanation of REQSRC0. + * @var PDMA_T::REQSEL4_7 + * Offset: 0x484 PDMA Request Source Select Register 1 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[4:0] |REQSRC4 |Channel 4 Request Source Selection + * | | |This filed defines which peripheral is connected to PDMA channel 4. + * | | |User can configure the peripheral setting by REQSRC4. + * | | |Note: The channel configuration is the same as REQSRC0 field. + * | | |Please refer to the explanation of REQSRC0. + * |[12:8] |REQSRC5 |Channel 5 Request Source Selection + * | | |This filed defines which peripheral is connected to PDMA channel 5. + * | | |User can configure the peripheral setting by REQSRC5. + * | | |Note: The channel configuration is the same as REQSRC0 field. + * | | |Please refer to the explanation of REQSRC0. + * |[20:16] |REQSRC6 |Channel 6 Request Source Selection + * | | |This filed defines which peripheral is connected to PDMA channel 6. + * | | |User can configure the peripheral setting by REQSRC6. + * | | |Note: The channel configuration is the same as REQSRC0 field. + * | | |Please refer to the explanation of REQSRC0. + * |[28:24] |REQSRC7 |Channel 7 Request Source Selection + * | | |This filed defines which peripheral is connected to PDMA channel 7. + * | | |User can configure the peripheral setting by REQSRC7. + * | | |Note: The channel configuration is the same as REQSRC0 field. + * | | |Please refer to the explanation of REQSRC0. + * @var PDMA_T::REQSEL8_11 + * Offset: 0x488 PDMA Request Source Select Register 2 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[4:0] |REQSRC8 |Channel 8 Request Source Selection + * | | |This filed defines which peripheral is connected to PDMA channel 8. + * | | |User can configure the peripheral setting by REQSRC8. + * | | |Note: The channel configuration is the same as REQSRC0 field. + * | | |Please refer to the explanation of REQSRC0. + * |[12:8] |REQSRC9 |Channel 9 Request Source Selection + * | | |This filed defines which peripheral is connected to PDMA channel 9. + * | | |User can configure the peripheral setting by REQSRC9. + * | | |Note: The channel configuration is the same as REQSRC0 field. + * | | |Please refer to the explanation of REQSRC0. + * |[20:16] |REQSRC10 |Channel 10 Request Source Selection + * | | |This filed defines which peripheral is connected to PDMA channel 10. + * | | |User can configure the peripheral setting by REQSRC10. + * | | |Note: The channel configuration is the same as REQSRC0 field. + * | | |Please refer to the explanation of REQSRC0. + * |[28:24] |REQSRC11 |Channel 11 Request Source Selection + * | | |This filed defines which peripheral is connected to PDMA channel 11. + * | | |User can configure the peripheral setting by REQSRC11. + * | | |Note: The channel configuration is the same as REQSRC0 field. + * | | |Please refer to the explanation of REQSRC0. + */ + + DSCT_T DSCT[12]; /* Offset: 0x0000 ~ 0x00BC DMA Embedded Description Table 0~11 */ + __I uint32_t CURSCAT[12]; + __I uint32_t RESERVE0[196]; /* Offset: 0xC0 ~ 0xEC Current Scatter-Gather Descriptor Table Address of PDMA Channel 0~11 */ + __IO uint32_t CHCTL; /* Offset: 0x400 PDMA Channel Control Register */ + __O uint32_t STOP; /* Offset: 0x404 PDMA Transfer Stop Control Register */ + __O uint32_t SWREQ; /* Offset: 0x408 PDMA Software Request Register */ + __I uint32_t TRGSTS; /* Offset: 0x40C PDMA Channel Request Status Register */ + __IO uint32_t PRISET; /* Offset: 0x410 PDMA Fixed Priority Setting Register */ + __O uint32_t PRICLR; /* Offset: 0x414 PDMA Fixed Priority Clear Register */ + __IO uint32_t INTEN; /* Offset: 0x418 PDMA Interrupt Enable Register */ + __IO uint32_t INTSTS; /* Offset: 0x41C PDMA Interrupt Status Register */ + __IO uint32_t ABTSTS; /* Offset: 0x420 PDMA Channel Read/Write Target Abort Flag Register */ + __IO uint32_t TDSTS; /* Offset: 0x424 PDMA Channel Transfer Done Flag Register */ + __IO uint32_t SCATSTS; /* Offset: 0x428 PDMA Scatter-Gather Table Empty Status Register */ + __I uint32_t TACTSTS; + __I uint32_t RESERVE1[1]; /* Offset: 0x42C PDMA Transfer Active Flag Register */ + __IO uint32_t TOUTEN; /* Offset: 0x434 PDMA Time-out Enable register */ + __IO uint32_t TOUTIEN; /* Offset: 0x438 PDMA Time-out Interrupt Enable register */ + __IO uint32_t SCATBA; /* Offset: 0x43C PDMA Scatter-Gather Descriptor Table Base Address Register */ + __IO uint32_t TOC0_1; /* Offset: 0x440 PDMA Time-out Counter Ch1 and Ch0 Register */ + __IO uint32_t TOC2_3; /* Offset: 0x444 PDMA Time-out Counter Ch3 and Ch2 Register */ + __IO uint32_t TOC4_5; /* Offset: 0x448 PDMA Time-out Counter Ch5 and Ch4 Register */ + __IO uint32_t TOC6_7; + __I uint32_t RESERVE2[12]; /* Offset: 0x44C PDMA Time-out Counter Ch7 and Ch6 Register */ + __IO uint32_t REQSEL0_3; /* Offset: 0x480 PDMA Request Source Select Register 0 */ + __IO uint32_t REQSEL4_7; /* Offset: 0x484 PDMA Request Source Select Register 1 */ + __IO uint32_t REQSEL8_11; /* Offset: 0x484 PDMA Request Source Select Register 2 */ + +} PDMA_T; + + + +/** + @addtogroup PDMA_CONST PDMA Bit Field Definition + Constant Definitions for PDMA Controller +@{ */ + +#define PDMA_DSCT_CTL_OPMODE_Pos (0) /*!< DSCT_T::CTL: OPMODE Position */ +#define PDMA_DSCT_CTL_OPMODE_Msk (0x3ul << PDMA_DSCT_CTL_OPMODE_Pos) /*!< DSCT_T::CTL: OPMODE Mask */ + +#define PDMA_DSCT_CTL_TXTYPE_Pos (2) /*!< DSCT_T::CTL: TXTYPE Position */ +#define PDMA_DSCT_CTL_TXTYPE_Msk (1ul << PDMA_DSCT_CTL_TXTYPE_Pos) /*!< DSCT_T::CTL: TXTYPE Mask */ + +#define PDMA_DSCT_CTL_BURSIZE_Pos (4) /*!< DSCT_T::CTL: BURSIZE Position */ +#define PDMA_DSCT_CTL_BURSIZE_Msk (0x7ul << PDMA_DSCT_CTL_BURSIZE_Pos) /*!< DSCT_T::CTL: BURSIZE Mask */ + +#define PDMA_DSCT_CTL_TBINTDIS_Pos (7) /*!< DSCT_T::CTL: TBINTDIS Position */ +#define PDMA_DSCT_CTL_TBINTDIS_Msk (1ul << PDMA_DSCT_CTL_TBINTDIS_Pos) /*!< DSCT_T::CTL: TBINTDIS Mask */ + +#define PDMA_DSCT_CTL_SAINC_Pos (8) /*!< DSCT_T::CTL: SAINC Position */ +#define PDMA_DSCT_CTL_SAINC_Msk (0x3ul << PDMA_DSCT_CTL_SAINC_Pos) /*!< DSCT_T::CTL: SAINC Mask */ + +#define PDMA_DSCT_CTL_DAINC_Pos (10) /*!< DSCT_T::CTL: DAINC Position */ +#define PDMA_DSCT_CTL_DAINC_Msk (0x3ul << PDMA_DSCT_CTL_DAINC_Pos) /*!< DSCT_T::CTL: DAINC Mask */ + +#define PDMA_DSCT_CTL_TXWIDTH_Pos (12) /*!< DSCT_T::CTL: TXWIDTH Position */ +#define PDMA_DSCT_CTL_TXWIDTH_Msk (0x3ul << PDMA_DSCT_CTL_TXWIDTH_Pos) /*!< DSCT_T::CTL: TXWIDTH Mask */ + +#define PDMA_DSCT_CTL_TXCNT_Pos (16) /*!< DSCT_T::CTL: TXCNT Position */ +#define PDMA_DSCT_CTL_TXCNT_Msk (0x3FFFul << PDMA_DSCT_CTL_TXCNT_Pos) /*!< DSCT_T::CTL: TXCNT Mask */ + +#define PDMA_DSCT_SA_SA_Pos (0) /*!< DSCT_T::SA: SA Position */ +#define PDMA_DSCT_SA_SA_Msk (0xFFFFFFFFul << PDMA_DSCT_SA_SA_Pos) /*!< DSCT_T::SA: SA Mask */ + +#define PDMA_DSCT_DA_DA_Pos (0) /*!< DSCT_T::DA: DA Position */ +#define PDMA_DSCT_DA_DA_Msk (0xFFFFFFFFul << PDMA_DSCT_DA_DA_Pos) /*!< DSCT_T::DA: DA Mask */ + +#define PDMA_DSCT_NEXT_NEXT_Pos (0) /*!< DSCT_T::NEXT: NEXT Position */ +#define PDMA_DSCT_NEXT_NEXT_Msk (0xFFFFul << PDMA_DSCT_NEXT_NEXT_Pos) /*!< DSCT_T::NEXT: NEXT Mask */ + +#define PDMA_CURSCAT_CURADDR_Pos (0) /*!< PDMA_T::CURSCAT: CURADDR Position */ +#define PDMA_CURSCAT_CURADDR_Msk (0xfffffffful << PDMA_CURSCAT_CURADDR_Pos) /*!< PDMA_T::CURSCAT: CURADDR Mask */ + +#define PDMA_CHCTL_CHENn_Pos (0) /*!< PDMA_T::CHCTL: CHENn Position */ +#define PDMA_CHCTL_CHENn_Msk (0xffful << PDMA_CHCTL_CHENn_Pos) /*!< PDMA_T::CHCTL: CHENn Mask */ + +#define PDMA_STOP_STOPn_Pos (0) /*!< PDMA_T::STOP: STOPn Position */ +#define PDMA_STOP_STOPn_Msk (0xffful << PDMA_STOP_STOPn_Pos) /*!< PDMA_T::STOP: STOPn Mask */ + +#define PDMA_SWREQ_SWREQn_Pos (0) /*!< PDMA_T::SWREQ: SWREQn Position */ +#define PDMA_SWREQ_SWREQn_Msk (0xffful << PDMA_SWREQ_SWREQn_Pos) /*!< PDMA_T::SWREQ: SWREQn Mask */ + +#define PDMA_TRGSTS_REQSTSn_Pos (0) /*!< PDMA_T::TRGSTS: REQSTSn Position */ +#define PDMA_TRGSTS_REQSTSn_Msk (0xffful << PDMA_TRGSTS_REQSTSn_Pos) /*!< PDMA_T::TRGSTS: REQSTSn Mask */ + +#define PDMA_PRISET_FPRISETn_Pos (0) /*!< PDMA_T::PRISET: FPRISETn Position */ +#define PDMA_PRISET_FPRISETn_Msk (0xffful << PDMA_PRISET_FPRISETn_Pos) /*!< PDMA_T::PRISET: FPRISETn Mask */ + +#define PDMA_PRICLR_FPRICLRn_Pos (0) /*!< PDMA_T::PRICLR: FPRICLRn Position */ +#define PDMA_PRICLR_FPRICLRn_Msk (0xffful << PDMA_PRICLR_FPRICLRn_Pos) /*!< PDMA_T::PRICLR: FPRICLRn Mask */ + +#define PDMA_INTEN_INTENn_Pos (0) /*!< PDMA_T::INTEN: INTENn Position */ +#define PDMA_INTEN_INTENn_Msk (0xffful << PDMA_INTEN_INTENn_Pos) /*!< PDMA_T::INTEN: INTENn Mask */ + +#define PDMA_INTSTS_ABTIF_Pos (0) /*!< PDMA_T::INTSTS: ABTIF Position */ +#define PDMA_INTSTS_ABTIF_Msk (0x1ul << PDMA_INTSTS_ABTIF_Pos) /*!< PDMA_T::INTSTS: ABTIF Mask */ + +#define PDMA_INTSTS_TDIF_Pos (1) /*!< PDMA_T::INTSTS: TDIF Position */ +#define PDMA_INTSTS_TDIF_Msk (0x1ul << PDMA_INTSTS_TDIF_Pos) /*!< PDMA_T::INTSTS: TDIF Mask */ + +#define PDMA_INTSTS_TEIF_Pos (2) /*!< PDMA_T::INTSTS: TEIF Position */ +#define PDMA_INTSTS_TEIF_Msk (0x1ul << PDMA_INTSTS_TEIF_Pos) /*!< PDMA_T::INTSTS: TEIF Mask */ + +#define PDMA_INTSTS_REQTOFn_Pos (8) /*!< PDMA_T::INTSTS: REQTOFn Position */ +#define PDMA_INTSTS_REQTOFn_Msk (0xfful << PDMA_INTSTS_REQTOFn_Pos) /*!< PDMA_T::INTSTS: REQTOFn Mask */ + +#define PDMA_ABTSTS_ABTIFn_Pos (0) /*!< PDMA_T::ABTSTS: ABTIFn Position */ +#define PDMA_ABTSTS_ABTIFn_Msk (0xffful << PDMA_ABTSTS_ABTIFn_Pos) /*!< PDMA_T::ABTSTS: ABTIFn Mask */ + +#define PDMA_TDSTS_TDIFn_Pos (0) /*!< PDMA_T::TDSTS: TDIFn Position */ +#define PDMA_TDSTS_TDIFn_Msk (0xffful << PDMA_TDSTS_TDIFn_Pos) /*!< PDMA_T::TDSTS: TDIFn Mask */ + +#define PDMA_SCATSTS_TEMPTYFn_Pos (0) /*!< PDMA_T::SCATSTS: TEMPTYFn Position */ +#define PDMA_SCATSTS_TEMPTYFn_Msk (0xffful << PDMA_SCATSTS_TEMPTYFn_Pos) /*!< PDMA_T::SCATSTS: TEMPTYFn Mask */ + +#define PDMA_TACTSTS_TXACTFn_Pos (0) /*!< PDMA_T::TACTSTS: TXACTFn Position */ +#define PDMA_TACTSTS_TXACTFn_Msk (0xffful << PDMA_TACTSTS_TXACTFn_Pos) /*!< PDMA_T::TACTSTS: TXACTFn Mask */ + +#define PDMA_TOUTEN_TOUTENn_Pos (0) /*!< PDMA_T::TOUTEN: TOUTENn Position */ +#define PDMA_TOUTEN_TOUTENn_Msk (0xfful << PDMA_TOUTEN_TOUTENn_Pos) /*!< PDMA_T::TOUTEN: TOUTENn Mask */ + +#define PDMA_TOUTIEN_TOUTIENn_Pos (0) /*!< PDMA_T::TOUTIEN: TOUTIENn Position */ +#define PDMA_TOUTIEN_TOUTIENn_Msk (0xfful << PDMA_TOUTIEN_TOUTIENn_Pos) /*!< PDMA_T::TOUTIEN: TOUTIENn Mask */ + +#define PDMA_SCATBA_SCATBA_Pos (16) /*!< PDMA_T::SCATBA: SCATBA Position */ +#define PDMA_SCATBA_SCATBA_Msk (0xfffful << PDMA_SCATBA_SCATBA_Pos) /*!< PDMA_T::SCATBA: SCATBA Mask */ + +#define PDMA_TOC0_1_TOC0_Pos (0) /*!< PDMA_T::TOC0_1: TOC0 Position */ +#define PDMA_TOC0_1_TOC0_Msk (0xfffful << PDMA_TOC0_1_TOC0_Pos) /*!< PDMA_T::TOC0_1: TOC0 Mask */ + +#define PDMA_TOC0_1_TOC1_Pos (16) /*!< PDMA_T::TOC0_1: TOC1 Position */ +#define PDMA_TOC0_1_TOC1_Msk (0xfffful << PDMA_TOC0_1_TOC1_Pos) /*!< PDMA_T::TOC0_1: TOC1 Mask */ + +#define PDMA_TOC2_3_TOC2_Pos (0) /*!< PDMA_T::TOC2_3: TOC2 Position */ +#define PDMA_TOC2_3_TOC2_Msk (0xfffful << PDMA_TOC2_3_TOC2_Pos) /*!< PDMA_T::TOC2_3: TOC2 Mask */ + +#define PDMA_TOC2_3_TOC3_Pos (16) /*!< PDMA_T::TOC2_3: TOC3 Position */ +#define PDMA_TOC2_3_TOC3_Msk (0xfffful << PDMA_TOC2_3_TOC3_Pos) /*!< PDMA_T::TOC2_3: TOC3 Mask */ + +#define PDMA_TOC4_5_TOC4_Pos (0) /*!< PDMA_T::TOC4_5: TOC4 Position */ +#define PDMA_TOC4_5_TOC4_Msk (0xfffful << PDMA_TOC4_5_TOC4_Pos) /*!< PDMA_T::TOC4_5: TOC4 Mask */ + +#define PDMA_TOC4_5_TOC5_Pos (16) /*!< PDMA_T::TOC4_5: TOC5 Position */ +#define PDMA_TOC4_5_TOC5_Msk (0xfffful << PDMA_TOC4_5_TOC5_Pos) /*!< PDMA_T::TOC4_5: TOC5 Mask */ + +#define PDMA_TOC6_7_TOC6_Pos (0) /*!< PDMA_T::TOC6_7: TOC6 Position */ +#define PDMA_TOC6_7_TOC6_Msk (0xfffful << PDMA_TOC6_7_TOC6_Pos) /*!< PDMA_T::TOC6_7: TOC6 Mask */ + +#define PDMA_TOC6_7_TOC7_Pos (16) /*!< PDMA_T::TOC6_7: TOC7 Position */ +#define PDMA_TOC6_7_TOC7_Msk (0xfffful << PDMA_TOC6_7_TOC7_Pos) /*!< PDMA_T::TOC6_7: TOC7 Mask */ + +#define PDMA_REQSEL0_3_REQSRC0_Pos (0) /*!< PDMA_T::REQSEL0_3: REQSRC0 Position */ +#define PDMA_REQSEL0_3_REQSRC0_Msk (0x1ful << PDMA_REQSEL0_3_REQSRC0_Pos) /*!< PDMA_T::REQSEL0_3: REQSRC0 Mask */ + +#define PDMA_REQSEL0_3_REQSRC1_Pos (8) /*!< PDMA_T::REQSEL0_3: REQSRC1 Position */ +#define PDMA_REQSEL0_3_REQSRC1_Msk (0x1ful << PDMA_REQSEL0_3_REQSRC1_Pos) /*!< PDMA_T::REQSEL0_3: REQSRC1 Mask */ + +#define PDMA_REQSEL0_3_REQSRC2_Pos (16) /*!< PDMA_T::REQSEL0_3: REQSRC2 Position */ +#define PDMA_REQSEL0_3_REQSRC2_Msk (0x1ful << PDMA_REQSEL0_3_REQSRC2_Pos) /*!< PDMA_T::REQSEL0_3: REQSRC2 Mask */ + +#define PDMA_REQSEL0_3_REQSRC3_Pos (24) /*!< PDMA_T::REQSEL0_3: REQSRC3 Position */ +#define PDMA_REQSEL0_3_REQSRC3_Msk (0x1ful << PDMA_REQSEL0_3_REQSRC3_Pos) /*!< PDMA_T::REQSEL0_3: REQSRC3 Mask */ + +#define PDMA_REQSEL4_7_REQSRC4_Pos (0) /*!< PDMA_T::REQSEL4_7: REQSRC4 Position */ +#define PDMA_REQSEL4_7_REQSRC4_Msk (0x1ful << PDMA_REQSEL4_7_REQSRC4_Pos) /*!< PDMA_T::REQSEL4_7: REQSRC4 Mask */ + +#define PDMA_REQSEL4_7_REQSRC5_Pos (8) /*!< PDMA_T::REQSEL4_7: REQSRC5 Position */ +#define PDMA_REQSEL4_7_REQSRC5_Msk (0x1ful << PDMA_REQSEL4_7_REQSRC5_Pos) /*!< PDMA_T::REQSEL4_7: REQSRC5 Mask */ + +#define PDMA_REQSEL4_7_REQSRC6_Pos (16) /*!< PDMA_T::REQSEL4_7: REQSRC6 Position */ +#define PDMA_REQSEL4_7_REQSRC6_Msk (0x1ful << PDMA_REQSEL4_7_REQSRC6_Pos) /*!< PDMA_T::REQSEL4_7: REQSRC6 Mask */ + +#define PDMA_REQSEL4_7_REQSRC7_Pos (24) /*!< PDMA_T::REQSEL4_7: REQSRC7 Position */ +#define PDMA_REQSEL4_7_REQSRC7_Msk (0x1ful << PDMA_REQSEL4_7_REQSRC7_Pos) /*!< PDMA_T::REQSEL4_7: REQSRC7 Mask */ + +#define PDMA_REQSEL8_11_REQSRC8_Pos (0) /*!< PDMA_T::REQSEL8_11: REQSRC8 Position */ +#define PDMA_REQSEL8_11_REQSRC8_Msk (0x1ful << PDMA_REQSEL8_11_REQSRC8_Pos) /*!< PDMA_T::REQSEL8_11: REQSRC8 Mask */ + +#define PDMA_REQSEL8_11_REQSRC9_Pos (8) /*!< PDMA_T::REQSEL8_11: REQSRC9 Position */ +#define PDMA_REQSEL8_11_REQSRC9_Msk (0x1ful << PDMA_REQSEL8_11_REQSRC9_Pos) /*!< PDMA_T::REQSEL8_11: REQSRC9 Mask */ + +#define PDMA_REQSEL8_11_REQSRC10_Pos (16) /*!< PDMA_T::REQSEL8_11: REQSRC10 Position */ +#define PDMA_REQSEL8_11_REQSRC10_Msk (0x1ful << PDMA_REQSEL8_11_REQSRC10_Pos) /*!< PDMA_T::REQSEL8_11: REQSRC10 Mask */ + +#define PDMA_REQSEL8_11_REQSRC11_Pos (24) /*!< PDMA_T::REQSEL8_11: REQSRC11 Position */ +#define PDMA_REQSEL8_11_REQSRC11_Msk (0x1ful << PDMA_REQSEL8_11_REQSRC11_Pos) /*!< PDMA_T::REQSEL8_11: REQSRC11 Mask */ + +/**@}*/ /* PDMA_CONST */ +/**@}*/ /* end of PDMA register group */ + + +/*---------------------- Pulse Width Modulation Controller -------------------------*/ +/** + @addtogroup PWM Pulse Width Modulation Controller(PWM) + Memory Mapped Structure for PWM Controller +@{ */ + + +typedef struct +{ + + +/** + * @var PWM_T::CTL0 + * Offset: 0x00 PWM Control Register 0 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[5:0] |CTRLDn |Center Re-Load + * | | |Each bit n controls the corresponding PWM channel n. + * | | |In up-down counter type, PERIOD will load to PBUF at the end point of each period. + * | | |CMPDAT will load to CMPBUF at the center point of a period. + * |[13:8] |WINLDENn |Window Load Enable + * | | |Each bit n controls the corresponding PWM channel n. + * | | |0 = PERIOD will load to PBUF at the end point of each period. + * | | |CMPDAT will load to CMPBUF at the end point or center point of each period by setting CTRLD bit. + * | | |1 = PERIOD will load to PBUF at the end point of each period. + * | | |CMPDAT will load to CMPBUF at the end point of each period when valid reload window is set. + * | | |The valid reload window is set by software write 1 to PWM_LOAD register and cleared by hardware after load success. + * |[21:16] |IMMLDENn |Immediately Load Enable + * | | |Each bit n controls the corresponding PWM channel n. + * | | |0 = PERIOD will load to PBUF at the end point of each period. + * | | |CMPDAT will load to CMPBUF at the end point or center point of each period by setting CTRLD bit. + * | | |1 = PERIOD/CMPDAT will load to PBUF and CMPBUF immediately when software update PERIOD/CMPDAT. + * | | |Note: If IMMLDENn is enabled, WINLDENn and CTRLDn will be invalid. + * |[24] |GROUPEN |Group Function Enable + * | | |0 = The output waveform of each PWM channel are independent. + * | | |1 = Unify the PWM_CH2 and PWM_CH4 to output the same waveform as PWM_CH0 and unify the PWM_CH3 and PWM_CH5 to output the same waveform as PWM_CH1. + * |[30] |DBGHALT |ICE Debug Mode Counter Halt (Write Protect) + * | | |If counter halt is enabled, PWM all counters will keep current value until exit ICE debug mode. + * | | |0 = ICE debug mode counter halt disable. + * | | |1 = ICE debug mode counter halt enable. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[31] |DBGTRIOFF |ICE Debug Mode Acknowledge Disable (Write Protect) + * | | |0 = ICE debug mode acknowledgement effects PWM output. + * | | |PWM pin will be forced as tri-state while ICE debug mode acknowledged. + * | | |1 = ICE debug mode acknowledgement disabled. + * | | |PWM pin will keep output no matter ICE debug mode acknowledged or not. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * @var PWM_T::CTL1 + * Offset: 0x04 PWM Control Register 1 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[11:0] |CNTTYPEn |PWM Counter Behavior Type + * | | |Each bit n controls corresponding PWM channel n. + * | | |00 = Up counter type (supports in capture mode). + * | | |01 = Down count type (supports in capture mode). + * | | |10 = Up-down counter type. + * | | |11 = Reserved. + * |[21:16] |CNTMODEn |PWM Counter Mode + * | | |Each bit n controls the corresponding PWM channel n. + * | | |0 = Auto-reload mode. + * | | |1 = One-shot mode. + * |[26:24] |OUTMODEn |PWM Output Mode + * | | |Each bit n controls the + * | | |output mode of + * | | |corresponding PWM channel n. + * | | |0 = PWM independent mode. + * | | |1 = PWM complementary mode. + * | | |Note: When operating in group function, these bits must all set to the same mode. + * @var PWM_T::SYNC + * Offset: 0x08 PWM Synchronization Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[2:0] |PHSENn |SYNC Phase Enable + * | | |Each bit n controls corresponding PWM channel n. + * | | |0 = PWM counter disable to load PHS value. + * | | |1 = PWM counter enable to load PHS value. + * |[13:8] |SINSRCn |PWM_SYNC_IN Source Selection + * | | |Each bit n controls corresponding PWM channel n. + * | | |00 = Synchronize source from SYNC_IN or SWSYNC. + * | | |01 = Counter equal to 0. + * | | |10 = Counter equal to PWM_CMPDATm, m denotes 1, 3, 5. + * | | |11 = SYNC_OUT will not be generated. + * |[16] |SNFLTEN |PWM_SYNC_IN Noise Filter Enable + * | | |0 = Noise filter of input pin PWM_SYNC_IN is Disabled. + * | | |1 = Noise filter of input pin PWM_SYNC_IN is Enabled. + * |[19:17] |SFLTCSEL |SYNC Edge Detector Filter Clock Selection + * | | |000 = Filter clock = HCLK. + * | | |001 = Filter clock = HCLK/2. + * | | |010 = Filter clock = HCLK/4. + * | | |011 = Filter clock = HCLK/8. + * | | |100 = Filter clock = HCLK/16. + * | | |101 = Filter clock = HCLK/32. + * | | |110 = Filter clock = HCLK/64. + * | | |111 = Filter clock = HCLK/128. + * |[22:20] |SFLTCNT |SYNC Edge Detector Filter Count + * | | |The register bits control the counter number of edge detector. + * |[23] |SINPINV |SYNC Input Pin Inverse + * | | |0 = The state of pin SYNC is passed to the negative edge detector. + * | | |1 = The inverted state of pin SYNC is passed to the negative edge detector. + * |[26:24] |PHSDIRn |PWM Phase Direction Control + * | | |Each bit n controls corresponding PWM channel n. + * | | |0 = Control PWM counter count decrement after synchronizing. + * | | |1 = Control PWM counter count increment after synchronizing. + * @var PWM_T::SWSYNC + * Offset: 0x0C PWM Software Control Synchronization Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[2:0] |SWSYNCn |Software SYNC Function + * | | |Each bit n controls corresponding PWM channel n. + * | | |When SINSRCn (PWM_SYNC[13:8]) is selected to 0, SYNC_OUT source is come from SYNC_IN or this bit. + * @var PWM_T::CLKSRC + * Offset: 0x10 PWM Clock Source Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[2:0] |ECLKSRC0 |PWM_CH01 External Clock Source Select + * | | |000 = PWMx_CLK, x denotes 0 or 1. + * | | |001 = TIMER0 overflow. + * | | |010 = TIMER1 overflow. + * | | |011 = TIMER2 overflow. + * | | |100 = TIMER3 overflow. + * | | |Others = Reserved. + * |[10:8] |ECLKSRC2 |PWM_CH23 External Clock Source Select + * | | |000 = PWMx_CLK, x denotes 0 or 1. + * | | |001 = TIMER0 overflow. + * | | |010 = TIMER1 overflow. + * | | |011 = TIMER2 overflow. + * | | |100 = TIMER3 overflow. + * | | |Others = Reserved. + * |[18:16] |ECLKSRC4 |PWM_CH45 External Clock Source Select + * | | |000 = PWMx_CLK, x denotes 0 or 1. + * | | |001 = TIMER0 overflow. + * | | |010 = TIMER1 overflow. + * | | |011 = TIMER2 overflow. + * | | |100 = TIMER3 overflow. + * | | |Others = Reserved. + * @var PWM_T::CLKPSC0_1 + * Offset: 0x14 PWM Clock Pre-scale Register 0 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[11:0] |CLKPSC |PWM Counter Clock Pre-Scale + * | | |The clock of PWM counter is decided by clock prescaler. + * | | |Each PWM pair share one PWM counter clock prescaler. + * | | |The clock of PWM counter is divided by (CLKPSC+ 1). + * @var PWM_T::CLKPSC2_3 + * Offset: 0x18 PWM Clock Pre-scale Register 2 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[11:0] |CLKPSC |PWM Counter Clock Pre-Scale + * | | |The clock of PWM counter is decided by clock prescaler. + * | | |Each PWM pair share one PWM counter clock prescaler. + * | | |The clock of PWM counter is divided by (CLKPSC+ 1). + * @var PWM_T::CLKPSC4_5 + * Offset: 0x1C PWM Clock Pre-scale Register 4 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[11:0] |CLKPSC |PWM Counter Clock Pre-Scale + * | | |The clock of PWM counter is decided by clock prescaler. + * | | |Each PWM pair share one PWM counter clock prescaler. + * | | |The clock of PWM counter is divided by (CLKPSC+ 1). + * @var PWM_T::CNTEN + * Offset: 0x20 PWM Counter Enable Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[5:0] |CNTENn |PWM Counter Enable + * | | |Each bit n controls the corresponding PWM channel n. + * | | |0 = PWM Counter and clock prescaler Stop Running. + * | | |1 = PWM Counter and clock prescaler Start Running. + * @var PWM_T::CNTCLR + * Offset: 0x24 PWM Clear Counter Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[5:0] |CNTCLRn |Clear PWM Counter Control Bit + * | | |It is automatically cleared by hardware. Each bit n controls the corresponding PWM channel n. + * | | |0 = No effect. + * | | |1 = Clear 16-bit PWM counter to 0000H. + * @var PWM_T::LOAD + * Offset: 0x28 PWM Load Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[5:0] |LOADn |Re-Load PWM Comparator Register (CMPDAT) Control Bit + * | | |This bit is software write, hardware clear when current PWM period end. + * | | |Each bit n controls the corresponding PWM channel n. + * | | |Write Operation: + * | | |0 = No effect. + * | | |1 = Set load window of window loading mode. + * | | |Read Operation: + * | | |0 = No load window is set. + * | | |1 = Load window is set. + * | | |Note: This bit only use in window loading mode, WINLDENn(PWM_CTL0[13:8]) = 1. + * @var PWM_T::PERIOD + * Offset: 0x30~0x44 PWM Period Register 0~5 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |PERIOD |PWM Period Register + * | | |Up-Count mode: In this mode, PWM counter counts from 0 to PERIOD, and restarts from 0. + * | | |Down-Count mode: In this mode, PWM counter counts from PERIOD to 0, and restarts from PERIOD. + * | | |PWM period time = (PERIOD+1) * PWM_CLK period. + * | | |Up-Down-Count mode: In this mode, PWM counter counts from 0 to PERIOD, then decrements to 0 and repeats again. + * | | |PWM period time = 2 * PERIOD * PWM_CLK period. + * @var PWM_T::CMPDAT + * Offset: 0x50~0x64 PWM Comparator Register 0~5 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |CMP |PWM Comparator Register + * | | |CMP use to compare with CNTR to generate PWM waveform, interrupt and trigger EADC/DAC. + * | | |In independent mode, CMPDAT0~5 denote as 6 independent PWM_CH0~5 compared point. + * | | |In complementary mode, CMPDAT0, 2, 4 denote as first compared point, and CMPDAT1, 3, 5 denote as second compared point for the corresponding 3 complementary pairs PWM_CH0 and PWM_CH1, PWM_CH2 and PWM_CH3, PWM_CH4 and PWM_CH5. + * @var PWM_T::DTCTL0_1 + * Offset: 0x70 PWM Dead-Time Control Register 0 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[11:0] |DTCNT |Dead-Time Counter (Write Protect) + * | | |The dead-time can be calculated from the following formula: + * | | |Dead-time = (DTCNT[11:0]+1) * PWM_CLK period. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[16] |DTEN |Enable Dead-Time Insertion For PWM Pair (PWM_CH0, PWM_CH1) (PWM_CH2, PWM_CH3) (PWM_CH4, PWM_CH5) (Write Protect) + * | | |Dead-time insertion is only active when this pair of complementary PWM is enabled. + * | | |If dead- time insertion is inactive, the outputs of pin pair are complementary without any delay. + * | | |0 = Dead-time insertion Disabled on the pin pair. + * | | |1 = Dead-time insertion Enabled on the pin pair. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[24] |DTCKSEL |Dead-Time Clock Select (Write Protect) (M45xD/M45xC Only) + * | | |0 = Dead-time clock source from PWM_CLK. + * | | |1 = Dead-time clock source from prescaler output. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * @var PWM_T::DTCTL2_3 + * Offset: 0x74 PWM Dead-Time Control Register 2 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[11:0] |DTCNT |Dead-Time Counter (Write Protect) + * | | |The dead-time can be calculated from the following formula: + * | | |Dead-time = (DTCNT[11:0]+1) * PWM_CLK period. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[16] |DTEN |Enable Dead-Time Insertion For PWM Pair (PWM_CH0, PWM_CH1) (PWM_CH2, PWM_CH3) (PWM_CH4, PWM_CH5) (Write Protect) + * | | |Dead-time insertion is only active when this pair of complementary PWM is enabled. + * | | |If dead- time insertion is inactive, the outputs of pin pair are complementary without any delay. + * | | |0 = Dead-time insertion Disabled on the pin pair. + * | | |1 = Dead-time insertion Enabled on the pin pair. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[24] |DTCKSEL |Dead-Time Clock Select (Write Protect) (M45xD/M45xC Only) + * | | |0 = Dead-time clock source from PWM_CLK. + * | | |1 = Dead-time clock source from prescaler output. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * @var PWM_T::DTCTL4_5 + * Offset: 0x78 PWM Dead-Time Control Register 4 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[11:0] |DTCNT |Dead-Time Counter (Write Protect) + * | | |The dead-time can be calculated from the following formula: + * | | |Dead-time = (DTCNT[11:0]+1) * PWM_CLK period. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[16] |DTEN |Enable Dead-Time Insertion For PWM Pair (PWM_CH0, PWM_CH1) (PWM_CH2, PWM_CH3) (PWM_CH4, PWM_CH5) (Write Protect) + * | | |Dead-time insertion is only active when this pair of complementary PWM is enabled. + * | | |If dead- time insertion is inactive, the outputs of pin pair are complementary without any delay. + * | | |0 = Dead-time insertion Disabled on the pin pair. + * | | |1 = Dead-time insertion Enabled on the pin pair. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[24] |DTCKSEL |Dead-Time Clock Select (Write Protect) (M45xD/M45xC Only) + * | | |0 = Dead-time clock source from PWM_CLK. + * | | |1 = Dead-time clock source from prescaler output. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * @var PWM_T::PHS0_1 + * Offset: 0x80 PWM Counter Phase Register 0 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |PHS |PWM Synchronous Start Phase Bits + * | | |PHS determines the PWM synchronous start phase value. These bits only use in synchronous function. + * @var PWM_T::PHS2_3 + * Offset: 0x84 PWM Counter Phase Register 2 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |PHS |PWM Synchronous Start Phase Bits + * | | |PHS determines the PWM synchronous start phase value. These bits only use in synchronous function. + * @var PWM_T::PHS4_5 + * Offset: 0x88 PWM Counter Phase Register 4 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |PHS |PWM Synchronous Start Phase Bits + * | | |PHS determines the PWM synchronous start phase value. These bits only use in synchronous function. + * @var PWM_T::CNT + * Offset: 0x90~0xA4 PWM Counter Register 0~5 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |CNT |PWM Data Register (Read Only) + * | | |User can monitor CNTR to know the current value in 16-bit period counter. + * |[16] |DIRF |PWM Direction Indicator Flag (Read Only) + * | | |0 = Counter is Down count. + * | | |1 = Counter is UP count. + * @var PWM_T::WGCTL0 + * Offset: 0xB0 PWM Generation Register 0 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[11:0] |ZPCTLn |PWM Zero Point Control + * | | |Each bit n controls the corresponding PWM channel n. + * | | |00 = Do nothing. + * | | |01 = PWM zero point output Low. + * | | |10 = PWM zero point output High. + * | | |11 = PWM zero point output Toggle. + * | | |PWM can control output level when PWM counter count to zero. + * |[27:16] |PRDPCTLn |PWM Period (Center) Point Control + * | | |Each bit n controls the corresponding PWM channel n. + * | | |00 = Do nothing. + * | | |01 = PWM period (center) point output Low. + * | | |10 = PWM period (center) point output High. + * | | |11 = PWM period (center) point output Toggle. + * | | |PWM can control output level when PWM counter count to (PERIODn+1). + * | | |Note: This bit is center point control when PWM counter operating in up-down counter type. + * @var PWM_T::WGCTL1 + * Offset: 0xB4 PWM Generation Register 1 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[11:0] |CMPUCTLn |PWM Compare Up Point Control + * | | |Each bit n controls the corresponding PWM channel n. + * | | |00 = Do nothing. + * | | |01 = PWM compare up point output Low. + * | | |10 = PWM compare up point output High. + * | | |11 = PWM compare up point output Toggle. + * | | |PWM can control output level when PWM counter up count to CMPDAT. + * | | |Note: In complementary mode, CMPUCTL1, 3, 5 use as another CMPUCTL for channel 0, 2, 4. + * |[27:16] |CMPDCTLn |PWM Compare Down Point Control + * | | |Each bit n controls the corresponding PWM channel n. + * | | |00 = Do nothing. + * | | |01 = PWM compare down point output Low. + * | | |10 = PWM compare down point output High. + * | | |11 = PWM compare down point output Toggle. + * | | |PWM can control output level when PWM counter down count to CMPDAT. + * | | |Note: In complementary mode, CMPDCTL1, 3, 5 use as another CMPDCTL for channel 0, 2, 4. + * @var PWM_T::MSKEN + * Offset: 0xB8 PWM Mask Enable Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[5:0] |MSKENn |PWM Mask Enable + * | | |Each bit n controls the corresponding PWM channel n. + * | | |The PWM output signal will be masked when this bit is enabled. + * | | |The corresponding PWM channel n will output MSKDATn (PWM_MSK[5:0]) data. + * | | |0 = PWM output signal is non-masked. + * | | |1 = PWM output signal is masked and output MSKDATn data. + * @var PWM_T::MSK + * Offset: 0xBC PWM Mask Data Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[5:0] |MSKDATn |PWM Mask Data Bit + * | | |This data bit control the state of PWMn output pin, if corresponding mask function is enabled. + * | | |Each bit n controls the corresponding PWM channel n. + * | | |0 = Output logic low to PWMn. + * | | |1 = Output logic high to PWMn. + * @var PWM_T::BNF + * Offset: 0xC0 PWM Brake Noise Filter Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |BRK0NFEN |PWM Brake 0 Noise Filter Enable + * | | |0 = Noise filter of PWM Brake 0 Disabled. + * | | |1 = Noise filter of PWM Brake 0 Enabled. + * |[3:1] |BRK0NFSEL |Brake 0 Edge Detector Filter Clock Selection + * | | |000 = Filter clock = HCLK. + * | | |001 = Filter clock = HCLK/2. + * | | |010 = Filter clock = HCLK/4. + * | | |011 = Filter clock = HCLK/8. + * | | |100 = Filter clock = HCLK/16. + * | | |101 = Filter clock = HCLK/32. + * | | |110 = Filter clock = HCLK/64. + * | | |111 = Filter clock = HCLK/128. + * |[6:4] |BRK0FCNT |Brake 0 Edge Detector Filter Count + * | | |The register bits control the Brake0 filter counter to count from 0 to BRK1FCNT. + * |[7] |BRK0PINV |Brake 0 Pin Inverse + * | | |0 = The state of pin PWMx_BRAKE0 is passed to the negative edge detector. + * | | |1 = The inverted state of pin PWMx_BRAKE10 is passed to the negative edge detector. + * |[8] |BRK1NFEN |PWM Brake 1 Noise Filter Enable + * | | |0 = Noise filter of PWM Brake 1 Disabled. + * | | |1 = Noise filter of PWM Brake 1 Enabled. + * |[11:9] |BRK1NFSEL |Brake 1 Edge Detector Filter Clock Selection + * | | |000 = Filter clock = HCLK. + * | | |001 = Filter clock = HCLK/2. + * | | |010 = Filter clock = HCLK/4. + * | | |011 = Filter clock = HCLK/8. + * | | |100 = Filter clock = HCLK/16. + * | | |101 = Filter clock = HCLK/32. + * | | |110 = Filter clock = HCLK/64. + * | | |111 = Filter clock = HCLK/128. + * |[14:12] |BRK1FCNT |Brake 1 Edge Detector Filter Count + * | | |The register bits control the Brake1 filter counter to count from 0 to BRK1FCNT. + * |[15] |BRK1PINV |Brake 1 Pin Inverse + * | | |0 = The state of pin PWMx_BRAKE1 is passed to the negative edge detector. + * | | |1 = The inverted state of pin PWMx_BRAKE1 is passed to the negative edge detector. + * |[16] |BK0SRC |Brake 0 Pin Source Select (M45xD/M45xC Only) + * | | |For PWM0 setting: + * | | |0 = Brake 0 pin source come from PWM0_BRAKE0. + * | | |1 = Brake 0 pin source come from PWM1_BRAKE0. + * | | |For PWM1 setting: + * | | |0 = Brake 0 pin source come from PWM1_BRAKE0. + * | | |1 = Brake 0 pin source come from PWM0_BRAKE0. + * |[24] |BK1SRC |Brake 1 Pin Source Select (M45xD/M45xC Only) + * | | |For PWM0 setting: + * | | |0 = Brake 1 pin source come from PWM0_BRAKE1. + * | | |1 = Brake 1 pin source come from PWM1_BRAKE1. + * | | |For PWM1 setting: + * | | |0 = Brake 1 pin source come from PWM1_BRAKE1. + * | | |1 = Brake 1 pin source come from PWM0_BRAKE1. + * @var PWM_T::FAILBRK + * Offset: 0xC4 PWM System Fail Brake Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |CSSBRKEN |Clock Security System Detection Trigger PWM Brake Function 0 Enable + * | | |0 = Brake Function triggered by CSS detection Disabled. + * | | |1 = Brake Function triggered by CSS detection Enabled. + * |[1] |BODBRKEN |Brown-Out Detection Trigger PWM Brake Function 0 Enable + * | | |0 = Brake Function triggered by BOD Disabled. + * | | |1 = Brake Function triggered by BOD Enabled. + * |[2] |RAMBRKEN |SRAM Parity Error Detection Trigger PWM Brake Function 0 Enable + * | | |0 = Brake Function triggered by SRAM parity error detection Disabled. + * | | |1 = Brake Function triggered by SRAM parity error detection Enabled. + * |[3] |CORBRKEN |Core Lockup Detection Trigger PWM Brake Function 0 Enable + * | | |0 = Brake Function triggered by Core lockup detection Disabled. + * | | |1 = Brake Function triggered by Core lockup detection Enabled. + * @var PWM_T::BRKCTL0_1 + * Offset: 0xC8 PWM Brake Edge Detect Control Register 0 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |CPO0EBEN |Enable ACMP0_O Digital Output As Edge-Detect Brake Source (Write Protect) + * | | |0 = ACMP0_O as edge-detect brake source Disabled. + * | | |1 = ACMP0_O as edge-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[1] |CPO1EBEN |Enable ACMP1_O Digital Output As Edge-Detect Brake Source (Write Protect) + * | | |0 = ACMP1_O as edge-detect brake source Disabled. + * | | |1 = ACMP1_O as edge-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[4] |BRKP0EEN |Enable PWMx_BRAKE0 Pin As Edge-Detect Brake Source (Write Protect) + * | | |0 = BKP0 pin as edge-detect brake source Disabled. + * | | |1 = BKP0 pin as edge-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[5] |BRKP1EEN |Enable PWMx_BRAKE1 Pin As Edge-Detect Brake Source (Write Protect) + * | | |0 = BKP1 pin as edge-detect brake source Disabled. + * | | |1 = BKP1 pin as edge-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[7] |SYSEBEN |Enable System Fail As Edge-Detect Brake Source (Write Protect) + * | | |0 = System Fail condition as edge-detect brake source Disabled. + * | | |1 = System Fail condition as edge-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[8] |CPO0LBEN |Enable ACMP0_O Digital Output As Level-Detect Brake Source (Write Protect) + * | | |0 = ACMP0_O as level-detect brake source Disabled. + * | | |1 = ACMP0_O as level-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[9] |CPO1LBEN |Enable ACMP1_O Digital Output As Level-Detect Brake Source (Write Protect) + * | | |0 = ACMP1_O as level-detect brake source Disabled. + * | | |1 = ACMP1_O as level-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[12] |BRKP0LEN |Enable BKP0 Pin As Level-Detect Brake Source (Write Protect) + * | | |0 = PWMx_BRAKE0 pin as level-detect brake source Disabled. + * | | |1 = PWMx_BRAKE0 pin as level-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[13] |BRKP1LEN |Enable BKP1 Pin As Level-Detect Brake Source (Write Protect) + * | | |0 = PWMx_BRAKE1 pin as level-detect brake source Disabled. + * | | |1 = PWMx_BRAKE1 pin as level-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[15] |SYSLBEN |Enable System Fail As Level-Detect Brake Source (Write Protect) + * | | |0 = System Fail condition as level-detect brake source Disabled. + * | | |1 = System Fail condition as level-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[17:16] |BRKAEVEN |PWM Brake Action Select For Even Channel (Write Protect) + * | | |00 = PWM even channel level-detect brake function not affect channel output. + * | | |01 = PWM even channel output tri-state when level-detect brake happened. + * | | |10 = PWM even channel output low level when level-detect brake happened. + * | | |11 = PWM even channel output high level when level-detect brake happened. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[19:18] |BRKAODD |PWM Brake Action Select For Odd Channel (Write Protect) + * | | |00 = PWM odd channel level-detect brake function not affect channel output. + * | | |01 = PWM odd channel output tri-state when level-detect brake happened. + * | | |10 = PWM odd channel output low level when level-detect brake happened. + * | | |11 = PWM odd channel output high level when level-detect brake happened. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * @var PWM_T::BRKCTL2_3 + * Offset: 0xCC PWM Brake Edge Detect Control Register 2 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |CPO0EBEN |Enable ACMP0_O Digital Output As Edge-Detect Brake Source (Write Protect) + * | | |0 = ACMP0_O as edge-detect brake source Disabled. + * | | |1 = ACMP0_O as edge-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[1] |CPO1EBEN |Enable ACMP1_O Digital Output As Edge-Detect Brake Source (Write Protect) + * | | |0 = ACMP1_O as edge-detect brake source Disabled. + * | | |1 = ACMP1_O as edge-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[4] |BRKP0EEN |Enable PWMx_BRAKE0 Pin As Edge-Detect Brake Source (Write Protect) + * | | |0 = BKP0 pin as edge-detect brake source Disabled. + * | | |1 = BKP0 pin as edge-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[5] |BRKP1EEN |Enable PWMx_BRAKE1 Pin As Edge-Detect Brake Source (Write Protect) + * | | |0 = BKP1 pin as edge-detect brake source Disabled. + * | | |1 = BKP1 pin as edge-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[7] |SYSEBEN |Enable System Fail As Edge-Detect Brake Source (Write Protect) + * | | |0 = System Fail condition as edge-detect brake source Disabled. + * | | |1 = System Fail condition as edge-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[8] |CPO0LBEN |Enable ACMP0_O Digital Output As Level-Detect Brake Source (Write Protect) + * | | |0 = ACMP0_O as level-detect brake source Disabled. + * | | |1 = ACMP0_O as level-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[9] |CPO1LBEN |Enable ACMP1_O Digital Output As Level-Detect Brake Source (Write Protect) + * | | |0 = ACMP1_O as level-detect brake source Disabled. + * | | |1 = ACMP1_O as level-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[12] |BRKP0LEN |Enable BKP0 Pin As Level-Detect Brake Source (Write Protect) + * | | |0 = PWMx_BRAKE0 pin as level-detect brake source Disabled. + * | | |1 = PWMx_BRAKE0 pin as level-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[13] |BRKP1LEN |Enable BKP1 Pin As Level-Detect Brake Source (Write Protect) + * | | |0 = PWMx_BRAKE1 pin as level-detect brake source Disabled. + * | | |1 = PWMx_BRAKE1 pin as level-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[15] |SYSLBEN |Enable System Fail As Level-Detect Brake Source (Write Protect) + * | | |0 = System Fail condition as level-detect brake source Disabled. + * | | |1 = System Fail condition as level-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[17:16] |BRKAEVEN |PWM Brake Action Select For Even Channel (Write Protect) + * | | |00 = PWM even channel level-detect brake function not affect channel output. + * | | |01 = PWM even channel output tri-state when level-detect brake happened. + * | | |10 = PWM even channel output low level when level-detect brake happened. + * | | |11 = PWM even channel output high level when level-detect brake happened. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[19:18] |BRKAODD |PWM Brake Action Select For Odd Channel (Write Protect) + * | | |00 = PWM odd channel level-detect brake function not affect channel output. + * | | |01 = PWM odd channel output tri-state when level-detect brake happened. + * | | |10 = PWM odd channel output low level when level-detect brake happened. + * | | |11 = PWM odd channel output high level when level-detect brake happened. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * @var PWM_T::BRKCTL4_5 + * Offset: 0xD0 PWM Brake Edge Detect Control Register 4 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |CPO0EBEN |Enable ACMP0_O Digital Output As Edge-Detect Brake Source (Write Protect) + * | | |0 = ACMP0_O as edge-detect brake source Disabled. + * | | |1 = ACMP0_O as edge-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[1] |CPO1EBEN |Enable ACMP1_O Digital Output As Edge-Detect Brake Source (Write Protect) + * | | |0 = ACMP1_O as edge-detect brake source Disabled. + * | | |1 = ACMP1_O as edge-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[4] |BRKP0EEN |Enable PWMx_BRAKE0 Pin As Edge-Detect Brake Source (Write Protect) + * | | |0 = BKP0 pin as edge-detect brake source Disabled. + * | | |1 = BKP0 pin as edge-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[5] |BRKP1EEN |Enable PWMx_BRAKE1 Pin As Edge-Detect Brake Source (Write Protect) + * | | |0 = BKP1 pin as edge-detect brake source Disabled. + * | | |1 = BKP1 pin as edge-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[7] |SYSEBEN |Enable System Fail As Edge-Detect Brake Source (Write Protect) + * | | |0 = System Fail condition as edge-detect brake source Disabled. + * | | |1 = System Fail condition as edge-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[8] |CPO0LBEN |Enable ACMP0_O Digital Output As Level-Detect Brake Source (Write Protect) + * | | |0 = ACMP0_O as level-detect brake source Disabled. + * | | |1 = ACMP0_O as level-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[9] |CPO1LBEN |Enable ACMP1_O Digital Output As Level-Detect Brake Source (Write Protect) + * | | |0 = ACMP1_O as level-detect brake source Disabled. + * | | |1 = ACMP1_O as level-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[12] |BRKP0LEN |Enable BKP0 Pin As Level-Detect Brake Source (Write Protect) + * | | |0 = PWMx_BRAKE0 pin as level-detect brake source Disabled. + * | | |1 = PWMx_BRAKE0 pin as level-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[13] |BRKP1LEN |Enable BKP1 Pin As Level-Detect Brake Source (Write Protect) + * | | |0 = PWMx_BRAKE1 pin as level-detect brake source Disabled. + * | | |1 = PWMx_BRAKE1 pin as level-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[15] |SYSLBEN |Enable System Fail As Level-Detect Brake Source (Write Protect) + * | | |0 = System Fail condition as level-detect brake source Disabled. + * | | |1 = System Fail condition as level-detect brake source Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[17:16] |BRKAEVEN |PWM Brake Action Select For Even Channel (Write Protect) + * | | |00 = PWM even channel level-detect brake function not affect channel output. + * | | |01 = PWM even channel output tri-state when level-detect brake happened. + * | | |10 = PWM even channel output low level when level-detect brake happened. + * | | |11 = PWM even channel output high level when level-detect brake happened. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[19:18] |BRKAODD |PWM Brake Action Select For Odd Channel (Write Protect) + * | | |00 = PWM odd channel level-detect brake function not affect channel output. + * | | |01 = PWM odd channel output tri-state when level-detect brake happened. + * | | |10 = PWM odd channel output low level when level-detect brake happened. + * | | |11 = PWM odd channel output high level when level-detect brake happened. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * @var PWM_T::POLCTL + * Offset: 0xD4 PWM Pin Polar Inverse Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[5:0] |PINVn |PWM PIN Polar Inverse Control + * | | |The register controls polarity state of PWM output. + * | | |Each bit n controls the corresponding PWM channel n. + * | | |0 = PWM output polar inverse Disabled. + * | | |1 = PWM output polar inverse Enabled. + * @var PWM_T::POEN + * Offset: 0xD8 PWM Output Enable Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[5:0] |POENn |PWM Pin Output Enable + * | | |Each bit n controls the corresponding PWM channel n. + * | | |0 = PWM pin at tri-state. + * | | |1 = PWM pin in output mode. + * @var PWM_T::SWBRK + * Offset: 0xDC PWM Software Brake Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[2:0] |BRKETRGn |PWM Edge Brake Software Trigger (Write Only) (Write Protect) (M45xD/M45xC Only) + * | | |Each bit n controls the corresponding PWM pair n. + * | | |Write 1 to this bit will trigger edge brake, and set BRKEIFn to 1 in PWM_INTSTS1 register. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[10:8] |BRKLTRGn |PWM Level Brake Software Trigger (Write Only) (Write Protect) + * | | |Each bit n controls the corresponding PWM pair n. + * | | |Write 1 to this bit will trigger level brake, and set BRKLIFn to 1 in PWM_INTSTS1 register. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * @var PWM_T::INTEN0 + * Offset: 0xE0 PWM Interrupt Enable Register 0 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[5:0] |ZIENn |PWM Zero Point Interrupt Enable + * | | |Each bit n controls the corresponding PWM channel n. + * | | |0 = Zero point interrupt Disabled. + * | | |1 = Zero point interrupt Enabled. + * | | |Note: Odd channels will read always 0 at complementary mode. + * |[7] |IFAIEN0_1 |PWM_CH0/1 Interrupt Flag Accumulator Interrupt Enable + * | | |0 = Interrupt Flag accumulator interrupt Disabled. + * | | |1 = Interrupt Flag accumulator interrupt Enabled. + * |[13:8] |PIENn |PWM Period Point Interrupt Enable + * | | |Each bit n controls the corresponding PWM channel n. + * | | |0 = Period point interrupt Disabled. + * | | |1 = Period point interrupt Enabled. + * | | |Note1: When up-down counter type period point means center point. + * | | |Note2: Odd channels will read always 0 at complementary mode. + * |[15] |IFAIEN2_3 |PWM_CH2/3 Interrupt Flag Accumulator Interrupt Enable + * | | |0 = Interrupt Flag accumulator interrupt Disabled. + * | | |1 = Interrupt Flag accumulator interrupt Enabled. + * |[21:16] |CMPUIENn |PWM Compare Up Count Interrupt Enable + * | | |Each bit n controls the corresponding PWM channel n. + * | | |0 = Compare up count interrupt Disabled. + * | | |1 = Compare up count interrupt Enabled. + * | | |Note: In complementary mode, CMPUIEN1, 3, 5 use as another CMPUIEN for channel 0, 2, 4. + * |[23] |IFAIEN4_5 |PWM_CH4/5 Interrupt Flag Accumulator Interrupt Enable + * | | |0 = Interrupt Flag accumulator interrupt Disabled. + * | | |1 = Interrupt Flag accumulator interrupt Enabled. + * |[29:24] |CMPDIENn |PWM Compare Down Count Interrupt Enable + * | | |Each bit n controls the corresponding PWM channel n. + * | | |0 = Compare down count interrupt Disabled. + * | | |1 = Compare down count interrupt Enabled. + * | | |Note: In complementary mode, CMPDIEN1, 3, 5 use as another CMPDIEN for channel 0, 2, 4. + * @var PWM_T::INTEN1 + * Offset: 0xE4 PWM Interrupt Enable Register 1 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |BRKEIEN0_1|PWM Edge-Detect Brake Interrupt Enable For Channel0/1 (Write Protect) + * | | |0 = Edge-detect Brake interrupt for channel0/1 Disabled. + * | | |1 = Edge-detect Brake interrupt for channel0/1 Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[1] |BRKEIEN2_3|PWM Edge-Detect Brake Interrupt Enable For Channel2/3 (Write Protect) + * | | |0 = Edge-detect Brake interrupt for channel2/3 Disabled. + * | | |1 = Edge-detect Brake interrupt for channel2/3 Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[2] |BRKEIEN4_5|PWM Edge-Detect Brake Interrupt Enable For Channel4/5 (Write Protect) + * | | |0 = Edge-detect Brake interrupt for channel4/5 Disabled. + * | | |1 = Edge-detect Brake interrupt for channel4/5 Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[8] |BRKLIEN0_1|PWM Level-Detect Brake Interrupt Enable For Channel0/1 (Write Protect) + * | | |0 = Level-detect Brake interrupt for channel0/1 Disabled. + * | | |1 = Level-detect Brake interrupt for channel0/1 Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[9] |BRKLIEN2_3|PWM Level-Detect Brake Interrupt Enable For Channel2/3 (Write Protect) + * | | |0 = Level-detect Brake interrupt for channel2/3 Disabled. + * | | |1 = Level-detect Brake interrupt for channel2/3 Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[10] |BRKLIEN4_5|PWM Level-Detect Brake Interrupt Enable For Channel4/5 (Write Protect) + * | | |0 = Level-detect Brake interrupt for channel4/5 Disabled. + * | | |1 = Level-detect Brake interrupt for channel4/5 Enabled. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * @var PWM_T::INTSTS0 + * Offset: 0xE8 PWM Interrupt Flag Register 0 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[5:0] |ZIFn |PWM Zero Point Interrupt Flag + * | | |Each bit n controls the corresponding PWM channel n. + * | | |This bit is set by hardware when PWM counter reaches zero, software can write 1 to clear this bit to zero. + * |[7] |IFAIF0_1 |PWM_CH0/1 Interrupt Flag Accumulator Interrupt Flag + * | | |Flag is set by hardware when condition match IFSEL0_1 in PWM_IFA register, software can clear this bit by writing 1 to it. + * |[13:8] |PIFn |PWM Period Point Interrupt Flag + * | | |This bit is set by hardware when PWM counter reaches PWM_PERIODn, software can write 1 to clear this bit to zero. + * | | |Each bit n controls the corresponding PWM channel n. + * |[15] |IFAIF2_3 |PWM_CH2/3 Interrupt Flag Accumulator Interrupt Flag + * | | |Flag is set by hardware when condition match IFSEL2_3 in PWM_IFA register, software can clear this bit by writing 1 to it. + * |[21:16] |CMPUIFn |PWM Compare Up Count Interrupt Flag + * | | |Flag is set by hardware when PWM counter up count and reaches PWM_CMPDATn, software can clear this bit by writing 1 to it. + * | | |Each bit n controls the corresponding PWM channel n. + * | | |Note1: If CMPDAT equal to PERIOD, this flag is not working in up counter type selection. + * | | |Note2: In complementary mode, CMPUIF1, 3, 5 use as another CMPUIF for channel 0, 2, 4. + * |[23] |IFAIF4_5 |PWM_CH4/5 Interrupt Flag Accumulator Interrupt Flag + * | | |Flag is set by hardware when condition match IFSEL4_5 in PWM_IFA register, software can clear this bit by writing 1 to it. + * |[29:24] |CMPDIFn |PWM Compare Down Count Interrupt Flag + * | | |Each bit n controls the corresponding PWM channel n. + * | | |Flag is set by hardware when PWM counter down count and reaches PWM_CMPDATn, software can clear this bit by writing 1 to it. + * | | |Note1: If CMPDAT equal to PERIOD, this flag is not working in down counter type selection. + * | | |Note2: In complementary mode, CMPDIF1, 3, 5 use as another CMPDIF for channel 0, 2, 4. + * @var PWM_T::INTSTS1 + * Offset: 0xEC PWM Interrupt Flag Register 1 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |BRKEIF0 |PWM Channel0 Edge-Detect Brake Interrupt Flag (Write Protect) + * | | |0 = PWM channel0 edge-detect brake event do not happened. + * | | |1 = When PWM channel0 edge-detect brake event happened, this bit is set to 1, writing 1 to clear. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[1] |BRKEIF1 |PWM Channel1 Edge-Detect Brake Interrupt Flag (Write Protect) + * | | |0 = PWM channel1 edge-detect brake event do not happened. + * | | |1 = When PWM channel1 edge-detect brake event happened, this bit is set to 1, writing 1 to clear. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[2] |BRKEIF2 |PWM Channel2 Edge-Detect Brake Interrupt Flag (Write Protect) + * | | |0 = PWM channel2 edge-detect brake event do not happened. + * | | |1 = When PWM channel2 edge-detect brake event happened, this bit is set to 1, writing 1 to clear. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[3] |BRKEIF3 |PWM Channel3 Edge-Detect Brake Interrupt Flag (Write Protect) + * | | |0 = PWM channel3 edge-detect brake event do not happened. + * | | |1 = When PWM channel3 edge-detect brake event happened, this bit is set to 1, writing 1 to clear. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[4] |BRKEIF4 |PWM Channel4 Edge-Detect Brake Interrupt Flag (Write Protect) + * | | |0 = PWM channel4 edge-detect brake event do not happened. + * | | |1 = When PWM channel4 edge-detect brake event happened, this bit is set to 1, writing 1 to clear. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[5] |BRKEIF5 |PWM Channel5 Edge-Detect Brake Interrupt Flag (Write Protect) + * | | |0 = PWM channel5 edge-detect brake event do not happened. + * | | |1 = When PWM channel5 edge-detect brake event happened, this bit is set to 1, writing 1 to clear. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[8] |BRKLIF0 |PWM Channel0 Level-Detect Brake Interrupt Flag (Write Protect) + * | | |0 = PWM channel0 level-detect brake event do not happened. + * | | |1 = When PWM channel0 level-detect brake event happened, this bit is set to 1, writing 1 to clear. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[9] |BRKLIF1 |PWM Channel1 Level-Detect Brake Interrupt Flag (Write Protect) + * | | |0 = PWM channel1 level-detect brake event do not happened. + * | | |1 = When PWM channel1 level-detect brake event happened, this bit is set to 1, writing 1 to clear. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[10] |BRKLIF2 |PWM Channel2 Level-Detect Brake Interrupt Flag (Write Protect) + * | | |0 = PWM channel2 level-detect brake event do not happened. + * | | |1 = When PWM channel2 level-detect brake event happened, this bit is set to 1, writing 1 to clear. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[11] |BRKLIF3 |PWM Channel3 Level-Detect Brake Interrupt Flag (Write Protect) + * | | |0 = PWM channel3 level-detect brake event do not happened. + * | | |1 = When PWM channel3 level-detect brake event happened, this bit is set to 1, writing 1 to clear. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[12] |BRKLIF4 |PWM Channel4 Level-Detect Brake Interrupt Flag (Write Protect) + * | | |0 = PWM channel4 level-detect brake event do not happened. + * | | |1 = When PWM channel4 level-detect brake event happened, this bit is set to 1, writing 1 to clear. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[13] |BRKLIF5 |PWM Channel5 Level-Detect Brake Interrupt Flag (Write Protect) + * | | |0 = PWM channel5 level-detect brake event do not happened. + * | | |1 = When PWM channel5 level-detect brake event happened, this bit is set to 1, writing 1 to clear. + * | | |Note: This register is write protected. Refer to SYS_REGLCTL register. + * |[16] |BRKESTS0 |PWM Channel0 Edge-Detect Brake Status + * | | |0 = PWM channel0 edge-detect brake state is released. + * | | |1 = When PWM channel0 edge-detect brake detects a falling edge of any enabled brake source; this flag will be set to indicate the PWM channel0 at brake state, writing 1 to clear. + * |[17] |BRKESTS1 |PWM Channel1 Edge-Detect Brake Status + * | | |0 = PWM channel1 edge-detect brake state is released. + * | | |1 = When PWM channel1 edge-detect brake detects a falling edge of any enabled brake source; this flag will be set to indicate the PWM channel1 at brake state, writing 1 to clear. + * |[18] |BRKESTS2 |PWM Channel2 Edge-Detect Brake Status + * | | |0 = PWM channel2 edge-detect brake state is released. + * | | |1 = When PWM channel2 edge-detect brake detects a falling edge of any enabled brake source; this flag will be set to indicate the PWM channel2 at brake state, writing 1 to clear. + * |[19] |BRKESTS3 |PWM Channel3 Edge-Detect Brake Status + * | | |0 = PWM channel3 edge-detect brake state is released. + * | | |1 = When PWM channel3 edge-detect brake detects a falling edge of any enabled brake source; this flag will be set to indicate the PWM channel3 at brake state, writing 1 to clear. + * |[20] |BRKESTS4 |PWM Channel4 Edge-Detect Brake Status + * | | |0 = PWM channel4 edge-detect brake state is released. + * | | |1 = When PWM channel4 edge-detect brake detects a falling edge of any enabled brake source; this flag will be set to indicate the PWM channel4 at brake state, writing 1 to clear. + * |[21] |BRKESTS5 |PWM Channel5 Edge-Detect Brake Status + * | | |0 = PWM channel5 edge-detect brake state is released. + * | | |1 = When PWM channel5 edge-detect brake detects a falling edge of any enabled brake source; this flag will be set to indicate the PWM channel5 at brake state, writing 1 to clear. + * |[24] |BRKLSTS0 |PWM Channel0 Level-Detect Brake Status (Read Only) + * | | |0 = PWM channel0 level-detect brake state is released. + * | | |1 = When PWM channel0 level-detect brake detects a falling edge of any enabled brake source; this flag will be set to indicate the PWM channel0 at brake state. + * | | |Note: This bit is read only and auto cleared by hardware. + * | | |When enabled brake source return to high level, PWM will release brake state until current PWM period finished. + * | | |The PWM waveform will start output from next full PWM period. + * |[25] |BRKLSTS1 |PWM Channel1 Level-Detect Brake Status (Read Only) + * | | |0 = PWM channel1 level-detect brake state is released. + * | | |1 = When PWM channel1 level-detect brake detects a falling edge of any enabled brake source; this flag will be set to indicate the PWM channel1 at brake state. + * | | |Note: This bit is read only and auto cleared by hardware. + * | | |When enabled brake source return to high level, PWM will release brake state until current PWM period finished. + * | | |The PWM waveform will start output from next full PWM period. + * |[26] |BRKLSTS2 |PWM Channel2 Level-Detect Brake Status (Read Only) + * | | |0 = PWM channel2 level-detect brake state is released. + * | | |1 = When PWM channel2 level-detect brake detects a falling edge of any enabled brake source; this flag will be set to indicate the PWM channel2 at brake state. + * | | |Note: This bit is read only and auto cleared by hardware. + * | | |When enabled brake source return to high level, PWM will release brake state until current PWM period finished. + * | | |The PWM waveform will start output from next full PWM period. + * |[27] |BRKLSTS3 |PWM Channel3 Level-Detect Brake Status (Read Only) + * | | |0 = PWM channel3 level-detect brake state is released. + * | | |1 = When PWM channel3 level-detect brake detects a falling edge of any enabled brake source; this flag will be set to indicate the PWM channel3 at brake state. + * | | |Note: This bit is read only and auto cleared by hardware. + * | | |When enabled brake source return to high level, PWM will release brake state until current PWM period finished. + * | | |The PWM waveform will start output from next full PWM period. + * |[28] |BRKLSTS4 |PWM Channel4 Level-Detect Brake Status (Read Only) + * | | |0 = PWM channel4 level-detect brake state is released. + * | | |1 = When PWM channel4 level-detect brake detects a falling edge of any enabled brake source; this flag will be set to indicate the PWM channel4 at brake state. + * | | |Note: This bit is read only and auto cleared by hardware. + * | | |When enabled brake source return to high level, PWM will release brake state until current PWM period finished. + * | | |The PWM waveform will start output from next full PWM period. + * |[29] |BRKLSTS5 |PWM Channel5 Level-Detect Brake Status (Read Only) + * | | |0 = PWM channel5 level-detect brake state is released. + * | | |1 = When PWM channel5 level-detect brake detects a falling edge of any enabled brake source; this flag will be set to indicate the PWM channel5 at brake state. + * | | |Note: This bit is read only and auto cleared by hardware. + * | | |When enabled brake source return to high level, PWM will release brake state until current PWM period finished. + * | | |The PWM waveform will start output from next full PWM period. + * @var PWM_T::IFA + * Offset: 0xF0 PWM Interrupt Flag Accumulator Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[3:0] |IFCNT0_1 |PWM_CH0 And PWM_CH1 Interrupt Flag Counter + * | | |The register sets the count number which defines how many times of PWM_CH0 and PWM_CH1 period occurs to set bit IFAIF0_1 to request the PWM period interrupt. + * | | |PWM flag will be set in every IFCNT0_1 [3:0] times of PWM period. + * |[6:4] |IFSEL0_1 |PWM_CH0 And PWM_CH1 Interrupt Flag Accumulator Source Select + * | | |000 = CNT equal to Zero in channel 0. + * | | |001 = CNT equal to PERIOD in channel 0. + * | | |010 = CNT equal to CMPU in channel 0. + * | | |011 = CNT equal to CMPD in channel 0. + * | | |100 = CNT equal to Zero in channel 1. + * | | |101 = CNT equal to PERIOD in channel 1. + * | | |110 = CNT equal to CMPU in channel 1. + * | | |111 = CNT equal to CMPD in channel 1. + * |[7] |IFAEN0_1 |PWM_CH0 And PWM_CH1 Interrupt Flag Accumulator Enable + * | | |0 = PWM_CH0 and PWM_CH1 interrupt flag accumulator disable. + * | | |1 = PWM_CH0 and PWM_CH1 interrupt flag accumulator enable. + * |[11:8] |IFCNT2_3 |PWM_CH2 And PWM_CH3 Interrupt Flag Counter + * | | |The register sets the count number which defines how many times of PWM_CH2 and PWM_CH3 period occurs to set bit IFAIF2_3 to request the PWM period interrupt. + * | | |PWM flag will be set in every IFCNT2_3[3:0] times of PWM period. + * |[14:12] |IFSEL2_3 |PWM_CH2 And PWM_CH3 Interrupt Flag Accumulator Source Select + * | | |000 = CNT equal to Zero in channel 2. + * | | |001 = CNT equal to PERIOD in channel 2. + * | | |010 = CNT equal to CMPU in channel 2. + * | | |011 = CNT equal to CMPD in channel 2. + * | | |100 = CNT equal to Zero in channel 3. + * | | |101 = CNT equal to PERIOD in channel 3. + * | | |110 = CNT equal to CMPU in channel 3. + * | | |111 = CNT equal to CMPD in channel 3. + * |[15] |IFAEN2_3 |PWM_CH2 And PWM_CH3 Interrupt Flag Accumulator Enable + * | | |0 = PWM_CH2 and PWM_CH3 interrupt flag accumulator disable. + * | | |1 = PWM_CH2 and PWM_CH3 interrupt flag accumulator enable. + * |[19:16] |IFCNT4_5 |PWM_CH4 And PWM_CH5 Interrupt Flag Counter + * | | |The register sets the count number which defines how many times of PWM_CH4 and PWM_CH5 period occurs to set bit IFAIF4_5 to request the PWM period interrupt. + * | | |PWM flag will be set in every IFCNT4_5[3:0] times of PWM period. + * |[22:20] |IFSEL4_5 |PWM_CH4 And PWM_CH5 Interrupt Flag Accumulator Source Select + * | | |000 = CNT equal to Zero in channel 4. + * | | |001 = CNT equal to PERIOD in channel 4. + * | | |010 = CNT equal to CMPU in channel 4. + * | | |011 = CNT equal to CMPD in channel 4. + * | | |100 = CNT equal to Zero in channel 5. + * | | |101 = CNT equal to PERIOD in channel 5. + * | | |110 = CNT equal to CMPU in channel 5. + * | | |111 = CNT equal to CMPD in channel 5. + * |[23] |IFAEN4_5 |PWM_CH4 And PWM_CH5 Interrupt Flag Accumulator Enable + * | | |0 = PWM_CH4 and PWM_CH5 interrupt flag accumulator disable. + * | | |1 = PWM_CH4 and PWM_CH5 interrupt flag accumulator enable. + * @var PWM_T::DACTRGEN + * Offset: 0xF4 PWM Trigger DAC Enable Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[5:0] |ZTEn |PWM Zero Point Trigger DAC Enable + * | | |0 = PWM period point trigger DAC function Disabled. + * | | |1 = PWM period point trigger DAC function Enabled. + * | | |PWM can trigger EADC/DAC/DMA to start action when PWM counter down count to zero if this bit is set to 1. + * | | |Each bit n controls the corresponding PWM channel n. + * |[13:8] |PTEn |PWM Period Point Trigger DAC Enable + * | | |0 = PWM period point trigger DAC function Disabled. + * | | |1 = PWM period point trigger DAC function Enabled. + * | | |PWM can trigger DAC to start action when PWM counter up count to (PERIODn+1) if this bit is set to 1. + * | | |Each bit n controls the corresponding PWM channel n. + * |[21:16] |CUTRGEn |PWM Compare Up Count Point Trigger DAC Enable + * | | |0 = PWM Compare Up point trigger DAC function Disabled. + * | | |1 = PWM Compare Up point trigger DAC function Enabled. + * | | |PWM can trigger DAC to start action when PWM counter up count to CMPDAT if this bit is set to 1. + * | | |Each bit n controls the corresponding PWM channel n. + * | | |Note1: This bit should keep at 0 when PWM counter operating in down counter type. + * | | |Note2: In complementary mode, CUTRGE1, 3, 5 use as another CUTRGE for channel 0, 2, 4. + * |[29:24] |CDTRGEn |PWM Compare Down Count Point Trigger DAC Enable + * | | |0 = PWM Compare Down count point trigger DAC function Disabled. + * | | |1 = PWM Compare Down count point trigger DAC function Enabled. + * | | |PWM can trigger DAC to start action when PWM counter down count to CMPDAT if this bit is set to 1. + * | | |Each bit n controls the corresponding PWM channel n. + * | | |Note1: This bit should keep at 0 when PWM counter operating in up counter type. + * | | |Note2: In complementary mode, CDTRGE1, 3, 5 use as another CDTRGE for channel 0, 2, 4. + * @var PWM_T::EADCTS0 + * Offset: 0xF8 PWM Trigger EADC Source Select Register 0 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[3:0] |TRGSEL0 |PWM_CH0 Trigger EADC Source Select + * | | |0000 = PWM_CH0 zero point. + * | | |0001 = PWM_CH0 period point. + * | | |0010 = PWM_CH0 zero or period point. + * | | |0011 = PWM_CH0 up-count CMPDAT point. + * | | |0100 = PWM_CH0 down-count CMPDAT point. + * | | |0101 = PWM_CH1 zero point. + * | | |0110 = PWM_CH1 period point. + * | | |0111 = PWM_CH1 zero or period point. + * | | |1000 = PWM_CH1 up-count CMPDAT point. + * | | |1001 = PWM_CH1 down-count CMPDAT point. + * | | |1010 = PWM_CH0 up-count free CMPDAT point. + * | | |1011 = PWM_CH0 down-count free CMPDAT point. + * | | |1100 = PWM_CH2 up-count free CMPDAT point. + * | | |1101 = PWM_CH2 down-count free CMPDAT point. + * | | |1110 = PWM_CH4 up-count free CMPDAT point. + * | | |1111 = PWM_CH4 down-count free CMPDAT point. + * |[7] |TRGEN0 |PWM_CH0 Trigger EADC enable bit + * |[11:8] |TRGSEL1 |PWM_CH1 Trigger EADC Source Select + * | | |0000 = PWM_CH0 zero point. + * | | |0001 = PWM_CH0 period point. + * | | |0010 = PWM_CH0 zero or period point. + * | | |0011 = PWM_CH0 up-count CMPDAT point. + * | | |0100 = PWM_CH0 down-count CMPDAT point. + * | | |0101 = PWM_CH1 zero point. + * | | |0110 = PWM_CH1 period point. + * | | |0111 = PWM_CH1 zero or period point. + * | | |1000 = PWM_CH1 up-count CMPDAT point. + * | | |1001 = PWM_CH1 down-count CMPDAT point. + * | | |1010 = PWM_CH0 up-count free CMPDAT point. + * | | |1011 = PWM_CH0 down-count free CMPDAT point. + * | | |1100 = PWM_CH2 up-count free CMPDAT point. + * | | |1101 = PWM_CH2 down-count free CMPDAT point. + * | | |1110 = PWM_CH4 up-count free CMPDAT point. + * | | |1111 = PWM_CH4 down-count free CMPDAT point. + * |[15] |TRGEN1 |PWM_CH1 Trigger EADC enable bit + * |[19:16] |TRGSEL2 |PWM_CH2 Trigger EADC Source Select + * | | |0000 = PWM_CH2 zero point. + * | | |0001 = PWM_CH2 period point. + * | | |0010 = PWM_CH2 zero or period point. + * | | |0011 = PWM_CH2 up-count CMPDAT point. + * | | |0100 = PWM_CH2 down-count CMPDAT point. + * | | |0101 = PWM_CH3 zero point. + * | | |0110 = PWM_CH3 period point. + * | | |0111 = PWM_CH3 zero or period point. + * | | |1000 = PWM_CH3 up-count CMPDAT point. + * | | |1001 = PWM_CH3 down-count CMPDAT point. + * | | |1010 = PWM_CH0 up-count free CMPDAT point. + * | | |1011 = PWM_CH0 down-count free CMPDAT point. + * | | |1100 = PWM_CH2 up-count free CMPDAT point. + * | | |1101 = PWM_CH2 down-count free CMPDAT point. + * | | |1110 = PWM_CH4 up-count free CMPDAT point. + * | | |1111 = PWM_CH4 down-count free CMPDAT point. + * |[23] |TRGEN2 |PWM_CH2 Trigger EADC enable bit + * |[27:24] |TRGSEL3 |PWM_CH3 Trigger EADC Source Select + * | | |0000 = PWM_CH2 zero point. + * | | |0001 = PWM_CH2 period point. + * | | |0010 = PWM_CH2 zero or period point. + * | | |0011 = PWM_CH2 up-count CMPDAT point. + * | | |0100 = PWM_CH2 down-count CMPDAT point. + * | | |0101 = PWM_CH3 zero point. + * | | |0110 = PWM_CH3 period point. + * | | |0111 = PWM_CH3 zero or period point. + * | | |1000 = PWM_CH3 up-count CMPDAT point. + * | | |1001 = PWM_CH3 down-count CMPDAT point. + * | | |1010 = PWM_CH0 up-count free CMPDAT point. + * | | |1011 = PWM_CH0 down-count free CMPDAT point. + * | | |1100 = PWM_CH2 up-count free CMPDAT point. + * | | |1101 = PWM_CH2 down-count free CMPDAT point. + * | | |1110 = PWM_CH4 up-count free CMPDAT point. + * | | |1111 = PWM_CH4 down-count free CMPDAT point. + * |[31] |TRGEN3 |PWM_CH3 Trigger EADC enable bit + * @var PWM_T::EADCTS1 + * Offset: 0xFC PWM Trigger EADC Source Select Register 1 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[3:0] |TRGSEL4 |PWM_CH4 Trigger EADC Source Select + * | | |0000 = PWM_CH4 zero point. + * | | |0001 = PWM_CH4 period point. + * | | |0010 = PWM_CH4 zero or period point. + * | | |0011 = PWM_CH4 up-count CMPDAT point. + * | | |0100 = PWM_CH4 down-count CMPDAT point. + * | | |0101 = PWM_CH5 zero point. + * | | |0110 = PWM_CH5 period point. + * | | |0111 = PWM_CH5 zero or period point. + * | | |1000 = PWM_CH5 up-count CMPDAT point. + * | | |1001 = PWM_CH5 down-count CMPDAT point. + * | | |1010 = PWM_CH0 up-count free CMPDAT point. + * | | |1011 = PWM_CH0 down-count free CMPDAT point. + * | | |1100 = PWM_CH2 up-count free CMPDAT point. + * | | |1101 = PWM_CH2 down-count free CMPDAT point. + * | | |1110 = PWM_CH4 up-count free CMPDAT point. + * | | |1111 = PWM_CH4 down-count free CMPDAT point. + * |[7] |TRGEN4 |PWM_CH4 Trigger EADC enable bit + * |[11:8] |TRGSEL5 |PWM_CH5 Trigger EADC Source Select + * | | |0000 = PWM_CH4 zero point. + * | | |0001 = PWM_CH4 period point. + * | | |0010 = PWM_CH4 zero or period point. + * | | |0011 = PWM_CH4 up-count CMPDAT point. + * | | |0100 = PWM_CH4 down-count CMPDAT point. + * | | |0101 = PWM_CH5 zero point. + * | | |0110 = PWM_CH5 period point. + * | | |0111 = PWM_CH5 zero or period point. + * | | |1000 = PWM_CH5 up-count CMPDAT point. + * | | |1001 = PWM_CH5 down-count CMPDAT point. + * | | |1010 = PWM_CH0 up-count free CMPDAT point. + * | | |1011 = PWM_CH0 down-count free CMPDAT point. + * | | |1100 = PWM_CH2 up-count free CMPDAT point. + * | | |1101 = PWM_CH2 down-count free CMPDAT point. + * | | |1110 = PWM_CH4 up-count free CMPDAT point. + * | | |1111 = PWM_CH4 down-count free CMPDAT point. + * |[15] |TRGEN5 |PWM_CH5 Trigger EADC enable bit + * @var PWM_T::FTCMPDAT0_1 + * Offset: 0x100 PWM Free Trigger Compare Register 0 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |FTCMP |PWM Free Trigger Compare Register + * | | |FTCMP use to compare with even CNTR to trigger EADC. + * | | |FTCMPDAT0, 2, 4 corresponding complementary pairs PWM_CH0and PWM_CH1, PWM_CH2 and PWM_CH3, PWM_CH4 and PWM_CH5. + * @var PWM_T::FTCMPDAT2_3 + * Offset: 0x104 PWM Free Trigger Compare Register 2 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |FTCMP |PWM Free Trigger Compare Register + * | | |FTCMP use to compare with even CNTR to trigger EADC. + * | | |FTCMPDAT0, 2, 4 corresponding complementary pairs PWM_CH0and PWM_CH1, PWM_CH2 and PWM_CH3, PWM_CH4 and PWM_CH5. + * @var PWM_T::FTCMPDAT4_5 + * Offset: 0x108 PWM Free Trigger Compare Register 4 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |FTCMP |PWM Free Trigger Compare Register + * | | |FTCMP use to compare with even CNTR to trigger EADC. + * | | |FTCMPDAT0, 2, 4 corresponding complementary pairs PWM_CH0and PWM_CH1, PWM_CH2 and PWM_CH3, PWM_CH4 and PWM_CH5. + * @var PWM_T::SSCTL + * Offset: 0x110 PWM Synchronous Start Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[5:0] |SSENn |PWM Synchronous Start Function Enable + * | | |When synchronous start function is enabled, the PWM counter enable register (PWM_CNTEN) can be enabled by writing PWM synchronous start trigger bit (CNTSEN). + * | | |Each bit n controls the corresponding PWM channel n. + * | | |0 = PWM synchronous start function Disabled. + * | | |1 = PWM synchronous start function Enabled. + * @var PWM_T::SSTRG + * Offset: 0x114 PWM Synchronous Start Trigger Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |CNTSEN |PWM Counter Synchronous Start Enable (Write Only) + * | | |PMW counter synchronous enable function is used to make selected PWM channels (include PWM0_CHx and PWM1_CHx) start counting at the same time. + * | | |Writing this bit to 1 will also set the counter enable bit (CNTENn, n denotes channel 0 to 5) if correlated PWM channel counter synchronous start function is enabled. + * | | |Note: This bit only present in PWM0_BA. + * @var PWM_T::STATUS + * Offset: 0x120 PWM Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[5:0] |CNTMAXFn |Time-Base Counter Equal To 0xFFFF Latched Flag + * | | |Each bit n controls the corresponding PWM channel n. + * | | |0 = indicates the time-base counter never reached its maximum value 0xFFFF. + * | | |1 = indicates the time-base counter reached its maximum value, software can write 1 to clear this bit. + * |[10:8] |SYNCINFn |Input Synchronization Latched Flag + * | | |Each bit n controls the corresponding PWM channel n. + * | | |0 = Indicates no SYNC_IN event has occurred. + * | | |1 = Indicates an SYNC_IN event has occurred, software can write 1 to clear this bit. + * |[21:16] |ADCTRGFn |EADC Start Of Conversion Flag + * | | |Each bit n controls the corresponding PWM channel n. + * | | |0 = Indicates no EADC start of conversion trigger event has occurred. + * | | |1 = Indicates an EADC start of conversion trigger event has occurred, software can write 1 to clear this bit. + * |[24] |DACTRGF |DAC Start Of Conversion Flag + * | | |0 = Indicates no DAC start of conversion trigger event has occurred. + * | | |1 = Indicates an DAC start of conversion trigger event has occurred, software can write 1 to clear this bit + * @var PWM_T::CAPINEN + * Offset: 0x200 PWM Capture Input Enable Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[5:0] |CAPINENn |Capture Input Enable + * | | |Each bit n controls the corresponding PWM channel n. + * | | |0 = PWM Channel capture input path Disabled. + * | | |The input of PWM channel capture function is always regarded as 0. + * | | |1 = PWM Channel capture input path Enabled. + * | | |The input of PWM channel capture function comes from correlative multifunction pin. + * @var PWM_T::CAPCTL + * Offset: 0x204 PWM Capture Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[5:0] |CAPENn |Capture Function Enable + * | | |Each bit n controls the corresponding PWM channel n. + * | | |0 = Capture function Disabled. RCAPDAT/FCAPDAT register will not be updated. + * | | |1 = Capture function Enabled. + * | | |Capture latched the PWM counter value when detected rising or falling edge of input signal and saved to RCAPDAT (Rising latch) and FCAPDAT (Falling latch). + * |[13:8] |CAPINVn |Capture Inverter Enable + * | | |Each bit n controls the corresponding PWM channel n. + * | | |0 = Capture source inverter Disabled. + * | | |1 = Capture source inverter Enabled. Reverse the input signal from GPIO. + * |[21:16] |RCRLDENn |Rising Capture Reload Enable + * | | |Each bit n controls the corresponding PWM channel n. + * | | |0 = Rising capture reload counter Disabled. + * | | |1 = Rising capture reload counter Enabled. + * |[29:24] |FCRLDENn |Falling Capture Reload Enable + * | | |Each bit n controls the corresponding PWM channel n. + * | | |0 = Falling capture reload counter Disabled. + * | | |1 = Falling capture reload counter Enabled. + * @var PWM_T::CAPSTS + * Offset: 0x208 PWM Capture Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[5:0] |CRLIFOVn |Capture Rising Latch Interrupt Flag Overrun Status (Read Only) + * | | |This flag indicates if rising latch happened when the corresponding CRLIF is 1. + * | | |Each bit n controls the corresponding PWM channel n. + * | | |Note: This bit will be cleared automatically when user clear corresponding CRLIF. + * |[13:8] |CFLIFOVn |Capture Falling Latch Interrupt Flag Overrun Status (Read Only) + * | | |This flag indicates if falling latch happened when the corresponding CFLIF is 1. + * | | |Each bit n controls the corresponding PWM channel n. + * | | |Note: This bit will be cleared automatically when user clear corresponding CFLIF. + * @var PWM_T::RCAPDAT0 + * Offset: 0x20C PWM Rising Capture Data Register 0 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |RCAPDAT |PWM Rising Capture Data Register (Read Only) + * | | |When rising capture condition happened, the PWM counter value will be saved in this register. + * @var PWM_T::FCAPDAT0 + * Offset: 0x210 PWM Falling Capture Data Register 0 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |FCAPDAT |PWM Falling Capture Data Register (Read Only) + * | | |When falling capture condition happened, the PWM counter value will be saved in this register. + * @var PWM_T::RCAPDAT1 + * Offset: 0x214 PWM Rising Capture Data Register 1 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |RCAPDAT |PWM Rising Capture Data Register (Read Only) + * | | |When rising capture condition happened, the PWM counter value will be saved in this register. + * @var PWM_T::FCAPDAT1 + * Offset: 0x218 PWM Falling Capture Data Register 1 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |FCAPDAT |PWM Falling Capture Data Register (Read Only) + * | | |When falling capture condition happened, the PWM counter value will be saved in this register. + * @var PWM_T::RCAPDAT2 + * Offset: 0x21C PWM Rising Capture Data Register 2 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |RCAPDAT |PWM Rising Capture Data Register (Read Only) + * | | |When rising capture condition happened, the PWM counter value will be saved in this register. + * @var PWM_T::FCAPDAT2 + * Offset: 0x220 PWM Falling Capture Data Register 2 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |FCAPDAT |PWM Falling Capture Data Register (Read Only) + * | | |When falling capture condition happened, the PWM counter value will be saved in this register. + * @var PWM_T::RCAPDAT3 + * Offset: 0x224 PWM Rising Capture Data Register 3 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |RCAPDAT |PWM Rising Capture Data Register (Read Only) + * | | |When rising capture condition happened, the PWM counter value will be saved in this register. + * @var PWM_T::FCAPDAT3 + * Offset: 0x228 PWM Falling Capture Data Register 3 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |FCAPDAT |PWM Falling Capture Data Register (Read Only) + * | | |When falling capture condition happened, the PWM counter value will be saved in this register. + * @var PWM_T::RCAPDAT4 + * Offset: 0x22C PWM Rising Capture Data Register 4 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |RCAPDAT |PWM Rising Capture Data Register (Read Only) + * | | |When rising capture condition happened, the PWM counter value will be saved in this register. + * @var PWM_T::FCAPDAT4 + * Offset: 0x230 PWM Falling Capture Data Register 4 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |FCAPDAT |PWM Falling Capture Data Register (Read Only) + * | | |When falling capture condition happened, the PWM counter value will be saved in this register. + * @var PWM_T::RCAPDAT5 + * Offset: 0x234 PWM Rising Capture Data Register 5 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |RCAPDAT |PWM Rising Capture Data Register (Read Only) + * | | |When rising capture condition happened, the PWM counter value will be saved in this register. + * @var PWM_T::FCAPDAT5 + * Offset: 0x238 PWM Falling Capture Data Register 5 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |FCAPDAT |PWM Falling Capture Data Register (Read Only) + * | | |When falling capture condition happened, the PWM counter value will be saved in this register. + * @var PWM_T::PDMACTL + * Offset: 0x23C PWM PDMA Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |CHEN0_1 |Channel 0/1 PDMA Enable + * | | |0 = Channel 0/1 PDMA function Disabled. + * | | |1 = Channel 0/1 PDMA function Enabled for the channel 0/1 captured data and transfer to memory. + * |[2:1] |CAPMOD0_1 |Select PWM_RCAPDAT0/1 Or PWM_FCAPDAT0/1 To Do PDMA Transfer + * | | |00 = Reserved. + * | | |01 = PWM_RCAPDAT0/1. + * | | |10 = PWM_FCAPDAT0/1. + * | | |11 = Both PWM_RCAPDAT0/1 and PWM_FCAPDAT0/1. + * |[3] |CAPORD0_1 |Capture Channel 0/1 Rising/Falling Order + * | | |Set this bit to determine whether the PWM_RCAPDAT0/1 or PWM_FCAPDAT0/1 is the first captured data transferred to memory through PDMA when CAPMOD0_1 = 11. + * | | |0 = PWM_FCAPDAT0/1 is the first captured data to memory. + * | | |1 = PWM_RCAPDAT0/1 is the first captured data to memory. + * |[4] |CHSEL0_1 |Select Channel 0/1 To Do PDMA Transfer + * | | |0 = Channel0. + * | | |1 = Channel1. + * |[8] |CHEN2_3 |Channel 2/3 PDMA Enable + * | | |0 = Channel 2/3 PDMA function Disabled. + * | | |1 = Channel 2/3 PDMA function Enabled for the channel 2/3 captured data and transfer to memory. + * |[10:9] |CAPMOD2_3 |Select PWM_RCAPDAT2/3 Or PWM_FCAODAT2/3 To Do PDMA Transfer + * | | |00 = Reserved. + * | | |01 = PWM_RCAPDAT2/3. + * | | |10 = PWM_FCAPDAT2/3. + * | | |11 = Both PWM_RCAPDAT2/3 and PWM_FCAPDAT2/3. + * |[11] |CAPORD2_3 |Capture Channel 2/3 Rising/Falling Order + * | | |Set this bit to determine whether the PWM_RCAPDAT2/3 or PWM_FCAPDAT2/3 is the first captured data transferred to memory through PDMA when CAPMOD2_3 = 11. + * | | |0 = PWM_FCAPDAT2/3 is the first captured data to memory. + * | | |1 = PWM_RCAPDAT2/3 is the first captured data to memory. + * |[12] |CHSEL2_3 |Select Channel 2/3 To Do PDMA Transfer + * | | |0 = Channel2. + * | | |1 = Channel3. + * |[16] |CHEN4_5 |Channel 4/5 PDMA Enable + * | | |0 = Channel 4/5 PDMA function Disabled. + * | | |1 = Channel 4/5 PDMA function Enabled for the channel 4/5 captured data and transfer to memory. + * |[18:17] |CAPMOD4_5 |Select PWM_RCAPDAT4/5 Or PWM_FCAPDAT4/5 To Do PDMA Transfer + * | | |00 = Reserved. + * | | |01 = PWM_RCAPDAT4/5. + * | | |10 = PWM_FCAPDAT4/5. + * | | |11 = Both PWM_RCAPDAT4/5 and PWM_FCAPDAT4/5. + * |[19] |CAPORD4_5 |Capture Channel 4/5 Rising/Falling Order + * | | |Set this bit to determine whether the PWM_RCAPDAT4/5 or PWM_FCAPDAT4/5 is the first captured data transferred to memory through PDMA when CAPMOD4_5 = 11. + * | | |0 = PWM_FCAPDAT4/5 is the first captured data to memory. + * | | |1 = PWM_RCAPDAT4/5 is the first captured data to memory. + * |[20] |CHSEL4_5 |Select Channel 4/5 To Do PDMA Transfer + * | | |0 = Channel4. + * | | |1 = Channel5. + * @var PWM_T::PDMACAP0_1 + * Offset: 0x240 PWM Capture Channel 01 PDMA Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |CAPBUF |PWM Capture PDMA Register + * | | |(Read Only) + * | | |This register is use as a buffer to transfer PWM capture rising or falling data to memory by PDMA. + * @var PWM_T::PDMACAP2_3 + * Offset: 0x244 PWM Capture Channel 23 PDMA Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |CAPBUF |PWM Capture PDMA Register + * | | |(Read Only) + * | | |This register is use as a buffer to transfer PWM capture rising or falling data to memory by PDMA. + * @var PWM_T::PDMACAP4_5 + * Offset: 0x248 PWM Capture Channel 45 PDMA Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |CAPBUF |PWM Capture PDMA Register + * | | |(Read Only) + * | | |This register is use as a buffer to transfer PWM capture rising or falling data to memory by PDMA. + * @var PWM_T::CAPIEN + * Offset: 0x250 PWM Capture Interrupt Enable Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[5:0] |CAPRIENn |PWM Capture Rising Latch Interrupt Enable + * | | |Each bit n controls the corresponding PWM channel n. + * | | |0 = Capture rising edge latch interrupt Disabled. + * | | |1 = Capture rising edge latch interrupt Enabled. + * | | |Note: When Capture with PDMA operating, CINTENR corresponding channel CAPRIEN must be disabled. + * |[13:8] |CAPFIENn |PWM Capture Falling Latch Interrupt Enable + * | | |Each bit n controls the corresponding PWM channel n. + * | | |0 = Capture falling edge latch interrupt Disabled. + * | | |1 = Capture falling edge latch interrupt Enabled. + * | | |Note: When Capture with PDMA operating, CINTENR corresponding channel CAPFIEN must be disabled. + * @var PWM_T::CAPIF + * Offset: 0x254 PWM Capture Interrupt Flag Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[5:0] |CRLIFn |PWM Capture Rising Latch Interrupt Flag + * | | |This bit is writing 1 to clear. Each bit n controls the corresponding PWM channel n. + * | | |0 = No capture rising latch condition happened. + * | | |1 = Capture rising latch condition happened, this flag will be set to high. + * | | |Note: When Capture with PDMA operating, CIFR corresponding channel CRLIF will cleared by hardware after PDMA transfer data. + * |[13:8] |CFLIFn |PWM Capture Falling Latch Interrupt Flag + * | | |This bit is writing 1 to clear. Each bit n controls the corresponding PWM channel n. + * | | |0 = No capture falling latch condition happened. + * | | |1 = Capture falling latch condition happened, this flag will be set to high. + * | | |Note: When Capture with PDMA operating, CIFR corresponding channel CFLIF will cleared by hardware after PDMA transfer data. + * @var PWM_T::PBUF + * Offset: 0x304~0x318 PWM PERIOD0~5 Buffer + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |PBUF |PWM Period Register Buffer + * | | |(Read Only) + * | | |Used as PERIOD active register. + * @var PWM_T::CMPBUF + * Offset: 0x31C~0x330 PWM CMPDAT0~5 Buffer + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |CMPBUF |PWM Comparator Register Buffer + * | | |(Read Only) + * | | |Used as CMP active register. + * @var PWM_T::FTCBUF0_1 + * Offset: 0x340 PWM FTCMPDAT0_1 Buffer + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |FTCMPBUF |PWM FTCMPDAT Buffer (Read Only) + * | | |Used as FTCMPDAT active register. + * @var PWM_T::FTCBUF2_3 + * Offset: 0x344 PWM FTCMPDAT2_3 Buffer + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |FTCMPBUF |PWM FTCMPDAT Buffer (Read Only) + * | | |Used as FTCMPDAT active register. + * @var PWM_T::FTCBUF4_5 + * Offset: 0x348 PWM FTCMPDAT4_5 Buffer + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |FTCMPBUF |PWM FTCMPDAT Buffer (Read Only) + * | | |Used as FTCMPDAT active register. + * @var PWM_T::FTCI + * Offset: 0x34C PWM FTCMPDAT Indicator Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[2:0] |FTCMUn |PWM FTCMPDAT Up Indicator + * | | |Indicator will be set to high when FTCMPDATn equal to PERIODn and DIRF=1, software can write 1 to clear this bit. + * | | |Each bit n controls the corresponding PWM channel n. + * |[10:8] |FTCMDn |PWM FTCMPDAT Down Indicator + * | | |Indicator will be set to high when FTCMPDATn equal to PERIODn and DIRF=0, software can write 1 to clear this bit. + * | | |Each bit n controls the corresponding PWM channel n. + */ + + __IO uint32_t CTL0; /* Offset: 0x00 PWM Control Register 0 */ + __IO uint32_t CTL1; /* Offset: 0x04 PWM Control Register 1 */ + __IO uint32_t SYNC; /* Offset: 0x08 PWM Synchronization Register */ + __IO uint32_t SWSYNC; /* Offset: 0x0C PWM Software Control Synchronization Register */ + __IO uint32_t CLKSRC; /* Offset: 0x10 PWM Clock Source Register */ + __IO uint32_t CLKPSC0_1; /* Offset: 0x14 PWM Clock Pre-scale Register 0 */ + __IO uint32_t CLKPSC2_3; /* Offset: 0x18 PWM Clock Pre-scale Register 2 */ + __IO uint32_t CLKPSC4_5; /* Offset: 0x1C PWM Clock Pre-scale Register 4 */ + __IO uint32_t CNTEN; /* Offset: 0x20 PWM Counter Enable Register */ + __IO uint32_t CNTCLR; /* Offset: 0x24 PWM Clear Counter Register */ + __IO uint32_t LOAD; /* Offset: 0x28 PWM Load Register */ + __I uint32_t RESERVE0[1]; + __IO uint32_t PERIOD[6]; /* Offset: 0x30~0x44 PWM Period Register 0~5 */ + __I uint32_t RESERVE1[2]; + __IO uint32_t CMPDAT[6]; /* Offset: 0x50~0x64 PWM Comparator Register 0~5 */ + __I uint32_t RESERVE2[2]; + __IO uint32_t DTCTL0_1; /* Offset: 0x70 PWM Dead-Time Control Register 0 */ + __IO uint32_t DTCTL2_3; /* Offset: 0x74 PWM Dead-Time Control Register 2 */ + __IO uint32_t DTCTL4_5; /* Offset: 0x78 PWM Dead-Time Control Register 4 */ + __I uint32_t RESERVE3[1]; + __IO uint32_t PHS0_1; /* Offset: 0x80 PWM Counter Phase Register 0 */ + __IO uint32_t PHS2_3; /* Offset: 0x84 PWM Counter Phase Register 2 */ + __IO uint32_t PHS4_5; /* Offset: 0x88 PWM Counter Phase Register 4 */ + __I uint32_t RESERVE4[1]; + __I uint32_t CNT[6]; /* Offset: 0x90~0xA4 PWM Counter Register 0~5 */ + __I uint32_t RESERVE5[2]; + __IO uint32_t WGCTL0; /* Offset: 0xB0 PWM Generation Register 0 */ + __IO uint32_t WGCTL1; /* Offset: 0xB4 PWM Generation Register 1 */ + __IO uint32_t MSKEN; /* Offset: 0xB8 PWM Mask Enable Register */ + __IO uint32_t MSK; /* Offset: 0xBC PWM Mask Data Register */ + __IO uint32_t BNF; /* Offset: 0xC0 PWM Brake Noise Filter Register */ + __IO uint32_t FAILBRK; /* Offset: 0xC4 PWM System Fail Brake Control Register */ + __IO uint32_t BRKCTL0_1; /* Offset: 0xC8 PWM Brake Edge Detect Control Register 0 */ + __IO uint32_t BRKCTL2_3; /* Offset: 0xCC PWM Brake Edge Detect Control Register 2 */ + __IO uint32_t BRKCTL4_5; /* Offset: 0xD0 PWM Brake Edge Detect Control Register 4 */ + __IO uint32_t POLCTL; /* Offset: 0xD4 PWM Pin Polar Inverse Register */ + __IO uint32_t POEN; /* Offset: 0xD8 PWM Output Enable Register */ + __O uint32_t SWBRK; /* Offset: 0xDC PWM Software Brake Control Register */ + __IO uint32_t INTEN0; /* Offset: 0xE0 PWM Interrupt Enable Register 0 */ + __IO uint32_t INTEN1; /* Offset: 0xE4 PWM Interrupt Enable Register 1 */ + __IO uint32_t INTSTS0; /* Offset: 0xE8 PWM Interrupt Flag Register 0 */ + __IO uint32_t INTSTS1; /* Offset: 0xEC PWM Interrupt Flag Register 1 */ + __IO uint32_t IFA; /* Offset: 0xF0 PWM Interrupt Flag Accumulator Register */ + __IO uint32_t DACTRGEN; /* Offset: 0xF4 PWM Trigger DAC Enable Register */ + __IO uint32_t EADCTS0; /* Offset: 0xF8 PWM Trigger EADC Source Select Register 0 */ + __IO uint32_t EADCTS1; /* Offset: 0xFC PWM Trigger EADC Source Select Register 1 */ + __IO uint32_t FTCMPDAT0_1; /* Offset: 0x100 PWM Free Trigger Compare Register 0 */ + __IO uint32_t FTCMPDAT2_3; /* Offset: 0x104 PWM Free Trigger Compare Register 2 */ + __IO uint32_t FTCMPDAT4_5; /* Offset: 0x108 PWM Free Trigger Compare Register 4 */ + __I uint32_t RESERVE6[1]; + __IO uint32_t SSCTL; /* Offset: 0x110 PWM Synchronous Start Control Register */ + __O uint32_t SSTRG; /* Offset: 0x114 PWM Synchronous Start Trigger Register */ + __I uint32_t RESERVE7[2]; + __IO uint32_t STATUS; /* Offset: 0x120 PWM Status Register */ + __I uint32_t RESERVE8[55]; + __IO uint32_t CAPINEN; /* Offset: 0x200 PWM Capture Input Enable Register */ + __IO uint32_t CAPCTL; /* Offset: 0x204 PWM Capture Control Register */ + __I uint32_t CAPSTS; /* Offset: 0x208 PWM Capture Status Register */ + __I uint32_t RCAPDAT0; /* Offset: 0x20C PWM Rising Capture Data Register 0 */ + __I uint32_t FCAPDAT0; /* Offset: 0x210 PWM Falling Capture Data Register 0 */ + __I uint32_t RCAPDAT1; /* Offset: 0x214 PWM Rising Capture Data Register 1 */ + __I uint32_t FCAPDAT1; /* Offset: 0x218 PWM Falling Capture Data Register 1 */ + __I uint32_t RCAPDAT2; /* Offset: 0x21C PWM Rising Capture Data Register 2 */ + __I uint32_t FCAPDAT2; /* Offset: 0x220 PWM Falling Capture Data Register 2 */ + __I uint32_t RCAPDAT3; /* Offset: 0x224 PWM Rising Capture Data Register 3 */ + __I uint32_t FCAPDAT3; /* Offset: 0x228 PWM Falling Capture Data Register 3 */ + __I uint32_t RCAPDAT4; /* Offset: 0x22C PWM Rising Capture Data Register 4 */ + __I uint32_t FCAPDAT4; /* Offset: 0x230 PWM Falling Capture Data Register 4 */ + __I uint32_t RCAPDAT5; /* Offset: 0x234 PWM Rising Capture Data Register 5 */ + __I uint32_t FCAPDAT5; /* Offset: 0x238 PWM Falling Capture Data Register 5 */ + __IO uint32_t PDMACTL; /* Offset: 0x23C PWM PDMA Control Register */ + __I uint32_t PDMACAP0_1; /* Offset: 0x240 PWM Capture Channel 01 PDMA Register */ + __I uint32_t PDMACAP2_3; /* Offset: 0x244 PWM Capture Channel 23 PDMA Register */ + __I uint32_t PDMACAP4_5; /* Offset: 0x248 PWM Capture Channel 45 PDMA Register */ + __I uint32_t RESERVE9[1]; + __IO uint32_t CAPIEN; /* Offset: 0x250 PWM Capture Interrupt Enable Register */ + __IO uint32_t CAPIF; /* Offset: 0x254 PWM Capture Interrupt Flag Register */ + __I uint32_t RESERVE10[43]; + __I uint32_t PBUF[6]; /* Offset: 0x304~0x318 PWM PERIOD0~5 Buffer */ + __I uint32_t CMPBUF[6]; /* Offset: 0x31C~0x330 PWM CMPDAT0~5 Buffer */ + __I uint32_t RESERVE11[3]; + __I uint32_t FTCBUF0_1; /* Offset: 0x340 PWM FTCMPDAT0_1 Buffer */ + __I uint32_t FTCBUF2_3; /* Offset: 0x344 PWM FTCMPDAT2_3 Buffer */ + __I uint32_t FTCBUF4_5; /* Offset: 0x348 PWM FTCMPDAT4_5 Buffer */ + __IO uint32_t FTCI; /* Offset: 0x34C PWM FTCMPDAT Indicator Register */ + +} PWM_T; + + + +/** + @addtogroup PWM_CONST PWM Bit Field Definition + Constant Definitions for PWM Controller +@{ */ + +#define PWM_CTL0_CTRLDn_Pos (0) /*!< PWM_T::CTL0: CTRLDn Position */ +#define PWM_CTL0_CTRLDn_Msk (0x3ful << PWM_CTL0_CTRLDn_Pos) /*!< PWM_T::CTL0: CTRLDn Mask */ + +#define PWM_CTL0_CTRLD0_Pos (0) /*!< PWM_T::CTL0: CTRLD0 Position */ +#define PWM_CTL0_CTRLD0_Msk (0x1ul << PWM_CTL0_CTRLD0_Pos) /*!< PWM_T::CTL0: CTRLD0 Mask */ + +#define PWM_CTL0_CTRLD1_Pos (1) /*!< PWM_T::CTL0: CTRLD1 Position */ +#define PWM_CTL0_CTRLD1_Msk (0x1ul << PWM_CTL0_CTRLD1_Pos) /*!< PWM_T::CTL0: CTRLD1 Mask */ + +#define PWM_CTL0_CTRLD2_Pos (2) /*!< PWM_T::CTL0: CTRLD2 Position */ +#define PWM_CTL0_CTRLD2_Msk (0x1ul << PWM_CTL0_CTRLD2_Pos) /*!< PWM_T::CTL0: CTRLD2 Mask */ + +#define PWM_CTL0_CTRLD3_Pos (3) /*!< PWM_T::CTL0: CTRLD3 Position */ +#define PWM_CTL0_CTRLD3_Msk (0x1ul << PWM_CTL0_CTRLD3_Pos) /*!< PWM_T::CTL0: CTRLD3 Mask */ + +#define PWM_CTL0_CTRLD4_Pos (4) /*!< PWM_T::CTL0: CTRLD4 Position */ +#define PWM_CTL0_CTRLD4_Msk (0x1ul << PWM_CTL0_CTRLD4_Pos) /*!< PWM_T::CTL0: CTRLD4 Mask */ + +#define PWM_CTL0_CTRLD5_Pos (5) /*!< PWM_T::CTL0: CTRLD5 Position */ +#define PWM_CTL0_CTRLD5_Msk (0x1ul << PWM_CTL0_CTRLD5_Pos) /*!< PWM_T::CTL0: CTRLD5 Mask */ + +#define PWM_CTL0_WINLDENn_Pos (8) /*!< PWM_T::CTL0: WINLDENn Position */ +#define PWM_CTL0_WINLDENn_Msk (0x3ful << PWM_CTL0_WINLDENn_Pos) /*!< PWM_T::CTL0: WINLDENn Mask */ + +#define PWM_CTL0_WINLDEN0_Pos (8) /*!< PWM_T::CTL0: WINLDEN0 Position */ +#define PWM_CTL0_WINLDEN0_Msk (0x1ul << PWM_CTL0_WINLDEN0_Pos) /*!< PWM_T::CTL0: WINLDEN0 Mask */ + +#define PWM_CTL0_WINLDEN1_Pos (9) /*!< PWM_T::CTL0: WINLDEN1 Position */ +#define PWM_CTL0_WINLDEN1_Msk (0x1ul << PWM_CTL0_WINLDEN1_Pos) /*!< PWM_T::CTL0: WINLDEN1 Mask */ + +#define PWM_CTL0_WINLDEN2_Pos (10) /*!< PWM_T::CTL0: WINLDEN2 Position */ +#define PWM_CTL0_WINLDEN2_Msk (0x1ul << PWM_CTL0_WINLDEN2_Pos) /*!< PWM_T::CTL0: WINLDEN2 Mask */ + +#define PWM_CTL0_WINLDEN3_Pos (11) /*!< PWM_T::CTL0: WINLDEN3 Position */ +#define PWM_CTL0_WINLDEN3_Msk (0x1ul << PWM_CTL0_WINLDEN3_Pos) /*!< PWM_T::CTL0: WINLDEN3 Mask */ + +#define PWM_CTL0_WINLDEN4_Pos (12) /*!< PWM_T::CTL0: WINLDEN4 Position */ +#define PWM_CTL0_WINLDEN4_Msk (0x1ul << PWM_CTL0_WINLDEN4_Pos) /*!< PWM_T::CTL0: WINLDEN4 Mask */ + +#define PWM_CTL0_WINLDEN5_Pos (13) /*!< PWM_T::CTL0: WINLDEN5 Position */ +#define PWM_CTL0_WINLDEN5_Msk (0x1ul << PWM_CTL0_WINLDEN5_Pos) /*!< PWM_T::CTL0: WINLDEN5 Mask */ + +#define PWM_CTL0_IMMLDENn_Pos (16) /*!< PWM_T::CTL0: IMMLDENn Position */ +#define PWM_CTL0_IMMLDENn_Msk (0x3ful << PWM_CTL0_IMMLDENn_Pos) /*!< PWM_T::CTL0: IMMLDENn Mask */ + +#define PWM_CTL0_IMMLDEN0_Pos (16) /*!< PWM_T::CTL0: IMMLDEN0 Position */ +#define PWM_CTL0_IMMLDEN0_Msk (0x1ul << PWM_CTL0_IMMLDEN0_Pos) /*!< PWM_T::CTL0: IMMLDEN0 Mask */ + +#define PWM_CTL0_IMMLDEN1_Pos (17) /*!< PWM_T::CTL0: IMMLDEN1 Position */ +#define PWM_CTL0_IMMLDEN1_Msk (0x1ul << PWM_CTL0_IMMLDEN1_Pos) /*!< PWM_T::CTL0: IMMLDEN1 Mask */ + +#define PWM_CTL0_IMMLDEN2_Pos (18) /*!< PWM_T::CTL0: IMMLDEN2 Position */ +#define PWM_CTL0_IMMLDEN2_Msk (0x1ul << PWM_CTL0_IMMLDEN2_Pos) /*!< PWM_T::CTL0: IMMLDEN2 Mask */ + +#define PWM_CTL0_IMMLDEN3_Pos (19) /*!< PWM_T::CTL0: IMMLDEN3 Position */ +#define PWM_CTL0_IMMLDEN3_Msk (0x1ul << PWM_CTL0_IMMLDEN3_Pos) /*!< PWM_T::CTL0: IMMLDEN3 Mask */ + +#define PWM_CTL0_IMMLDEN4_Pos (20) /*!< PWM_T::CTL0: IMMLDEN4 Position */ +#define PWM_CTL0_IMMLDEN4_Msk (0x1ul << PWM_CTL0_IMMLDEN4_Pos) /*!< PWM_T::CTL0: IMMLDEN4 Mask */ + +#define PWM_CTL0_IMMLDEN5_Pos (21) /*!< PWM_T::CTL0: IMMLDEN5 Position */ +#define PWM_CTL0_IMMLDEN5_Msk (0x1ul << PWM_CTL0_IMMLDEN5_Pos) /*!< PWM_T::CTL0: IMMLDEN5 Mask */ + +#define PWM_CTL0_GROUPEN_Pos (24) /*!< PWM_T::CTL0: GROUPEN Position */ +#define PWM_CTL0_GROUPEN_Msk (0x1ul << PWM_CTL0_GROUPEN_Pos) /*!< PWM_T::CTL0: GROUPEN Mask */ + +#define PWM_CTL0_DBGHALT_Pos (30) /*!< PWM_T::CTL0: DBGHALT Position */ +#define PWM_CTL0_DBGHALT_Msk (0x1ul << PWM_CTL0_DBGHALT_Pos) /*!< PWM_T::CTL0: DBGHALT Mask */ + +#define PWM_CTL0_DBGTRIOFF_Pos (31) /*!< PWM_T::CTL0: DBGTRIOFF Position */ +#define PWM_CTL0_DBGTRIOFF_Msk (0x1ul << PWM_CTL0_DBGTRIOFF_Pos) /*!< PWM_T::CTL0: DBGTRIOFF Mask */ + +#define PWM_CTL1_CNTTYPEn_Pos (0) /*!< PWM_T::CTL1: CNTTYPEn Position */ +#define PWM_CTL1_CNTTYPEn_Msk (0xffful << PWM_CTL1_CNTTYPEn_Pos) /*!< PWM_T::CTL1: CNTTYPEn Mask */ + +#define PWM_CTL1_CNTTYPE0_Pos (0) /*!< PWM_T::CTL1: CNTTYPE0 Position */ +#define PWM_CTL1_CNTTYPE0_Msk (0x3ul << PWM_CTL1_CNTTYPE0_Pos) /*!< PWM_T::CTL1: CNTTYPE0 Mask */ + +#define PWM_CTL1_CNTTYPE1_Pos (2) /*!< PWM_T::CTL1: CNTTYPE1 Position */ +#define PWM_CTL1_CNTTYPE1_Msk (0x3ul << PWM_CTL1_CNTTYPE1_Pos) /*!< PWM_T::CTL1: CNTTYPE1 Mask */ + +#define PWM_CTL1_CNTTYPE2_Pos (4) /*!< PWM_T::CTL1: CNTTYPE2 Position */ +#define PWM_CTL1_CNTTYPE2_Msk (0x3ul << PWM_CTL1_CNTTYPE2_Pos) /*!< PWM_T::CTL1: CNTTYPE2 Mask */ + +#define PWM_CTL1_CNTTYPE3_Pos (6) /*!< PWM_T::CTL1: CNTTYPE3 Position */ +#define PWM_CTL1_CNTTYPE3_Msk (0x3ul << PWM_CTL1_CNTTYPE3_Pos) /*!< PWM_T::CTL1: CNTTYPE3 Mask */ + +#define PWM_CTL1_CNTTYPE4_Pos (8) /*!< PWM_T::CTL1: CNTTYPE4 Position */ +#define PWM_CTL1_CNTTYPE4_Msk (0x3ul << PWM_CTL1_CNTTYPE4_Pos) /*!< PWM_T::CTL1: CNTTYPE4 Mask */ + +#define PWM_CTL1_CNTTYPE5_Pos (10) /*!< PWM_T::CTL1: CNTTYPE5 Position */ +#define PWM_CTL1_CNTTYPE5_Msk (0x3ul << PWM_CTL1_CNTTYPE5_Pos) /*!< PWM_T::CTL1: CNTTYPE5 Mask */ + +#define PWM_CTL1_CNTMODEn_Pos (16) /*!< PWM_T::CTL1: CNTMODEn Position */ +#define PWM_CTL1_CNTMODEn_Msk (0x3ful << PWM_CTL1_CNTMODEn_Pos) /*!< PWM_T::CTL1: CNTMODEn Mask */ + +#define PWM_CTL1_CNTMODE0_Pos (16) /*!< PWM_T::CTL1: CNTMODE0 Position */ +#define PWM_CTL1_CNTMODE0_Msk (0x1ul << PWM_CTL1_CNTMODE0_Pos) /*!< PWM_T::CTL1: CNTMODE0 Mask */ + +#define PWM_CTL1_CNTMODE1_Pos (17) /*!< PWM_T::CTL1: CNTMODE1 Position */ +#define PWM_CTL1_CNTMODE1_Msk (0x1ul << PWM_CTL1_CNTMODE1_Pos) /*!< PWM_T::CTL1: CNTMODE1 Mask */ + +#define PWM_CTL1_CNTMODE2_Pos (18) /*!< PWM_T::CTL1: CNTMODE2 Position */ +#define PWM_CTL1_CNTMODE2_Msk (0x1ul << PWM_CTL1_CNTMODE2_Pos) /*!< PWM_T::CTL1: CNTMODE2 Mask */ + +#define PWM_CTL1_CNTMODE3_Pos (19) /*!< PWM_T::CTL1: CNTMODE3 Position */ +#define PWM_CTL1_CNTMODE3_Msk (0x1ul << PWM_CTL1_CNTMODE3_Pos) /*!< PWM_T::CTL1: CNTMODE3 Mask */ + +#define PWM_CTL1_CNTMODE4_Pos (20) /*!< PWM_T::CTL1: CNTMODE4 Position */ +#define PWM_CTL1_CNTMODE4_Msk (0x1ul << PWM_CTL1_CNTMODE4_Pos) /*!< PWM_T::CTL1: CNTMODE4 Mask */ + +#define PWM_CTL1_CNTMODE5_Pos (21) /*!< PWM_T::CTL1: CNTMODE5 Position */ +#define PWM_CTL1_CNTMODE5_Msk (0x1ul << PWM_CTL1_CNTMODE5_Pos) /*!< PWM_T::CTL1: CNTMODE5 Mask */ + +#define PWM_CTL1_OUTMODEn_Pos (24) /*!< PWM_T::CTL1: OUTMODEn Position */ +#define PWM_CTL1_OUTMODEn_Msk (0x7ul << PWM_CTL1_OUTMODEn_Pos) /*!< PWM_T::CTL1: OUTMODEn Mask */ + +#define PWM_CTL1_OUTMODE0_Pos (24) /*!< PWM_T::CTL1: OUTMODE0 Position */ +#define PWM_CTL1_OUTMODE0_Msk (0x1ul << PWM_CTL1_OUTMODE0_Pos) /*!< PWM_T::CTL1: OUTMODE0 Mask */ + +#define PWM_CTL1_OUTMODE2_Pos (25) /*!< PWM_T::CTL1: OUTMODE2 Position */ +#define PWM_CTL1_OUTMODE2_Msk (0x1ul << PWM_CTL1_OUTMODE2_Pos) /*!< PWM_T::CTL1: OUTMODE2 Mask */ + +#define PWM_CTL1_OUTMODE4_Pos (26) /*!< PWM_T::CTL1: OUTMODE4 Position */ +#define PWM_CTL1_OUTMODE4_Msk (0x1ul << PWM_CTL1_OUTMODE4_Pos) /*!< PWM_T::CTL1: OUTMODE4 Mask */ + +#define PWM_SYNC_PHSENn_Pos (0) /*!< PWM_T::SYNC: PHSENn Position */ +#define PWM_SYNC_PHSENn_Msk (0x7ul << PWM_SYNC_PHSENn_Pos) /*!< PWM_T::SYNC: PHSENn Mask */ + +#define PWM_SYNC_PHSEN0_Pos (0) /*!< PWM_T::SYNC: PHSEN0 Position */ +#define PWM_SYNC_PHSEN0_Msk (0x1ul << PWM_SYNC_PHSEN0_Pos) /*!< PWM_T::SYNC: PHSEN0 Mask */ + +#define PWM_SYNC_PHSEN2_Pos (1) /*!< PWM_T::SYNC: PHSEN2 Position */ +#define PWM_SYNC_PHSEN2_Msk (0x1ul << PWM_SYNC_PHSEN2_Pos) /*!< PWM_T::SYNC: PHSEN2 Mask */ + +#define PWM_SYNC_PHSEN4_Pos (2) /*!< PWM_T::SYNC: PHSEN4 Position */ +#define PWM_SYNC_PHSEN4_Msk (0x1ul << PWM_SYNC_PHSEN4_Pos) /*!< PWM_T::SYNC: PHSEN4 Mask */ + +#define PWM_SYNC_SINSRCn_Pos (8) /*!< PWM_T::SYNC: SINSRCn Position */ +#define PWM_SYNC_SINSRCn_Msk (0x3ful << PWM_SYNC_SINSRCn_Pos) /*!< PWM_T::SYNC: SINSRCn Mask */ + +#define PWM_SYNC_SINSRC0_Pos (8) /*!< PWM_T::SYNC: SINSRC0 Position */ +#define PWM_SYNC_SINSRC0_Msk (0x3ul << PWM_SYNC_SINSRC0_Pos) /*!< PWM_T::SYNC: SINSRC0 Mask */ + +#define PWM_SYNC_SINSRC2_Pos (10) /*!< PWM_T::SYNC: SINSRC2 Position */ +#define PWM_SYNC_SINSRC2_Msk (0x3ul << PWM_SYNC_SINSRC2_Pos) /*!< PWM_T::SYNC: SINSRC2 Mask */ + +#define PWM_SYNC_SINSRC4_Pos (12) /*!< PWM_T::SYNC: SINSRC4 Position */ +#define PWM_SYNC_SINSRC4_Msk (0x3ul << PWM_SYNC_SINSRC4_Pos) /*!< PWM_T::SYNC: SINSRC4 Mask */ + +#define PWM_SYNC_SNFLTEN_Pos (16) /*!< PWM_T::SYNC: SNFLTEN Position */ +#define PWM_SYNC_SNFLTEN_Msk (0x1ul << PWM_SYNC_SNFLTEN_Pos) /*!< PWM_T::SYNC: SNFLTEN Mask */ + +#define PWM_SYNC_SFLTCSEL_Pos (17) /*!< PWM_T::SYNC: SFLTCSEL Position */ +#define PWM_SYNC_SFLTCSEL_Msk (0x7ul << PWM_SYNC_SFLTCSEL_Pos) /*!< PWM_T::SYNC: SFLTCSEL Mask */ + +#define PWM_SYNC_SFLTCNT_Pos (20) /*!< PWM_T::SYNC: SFLTCNT Position */ +#define PWM_SYNC_SFLTCNT_Msk (0x7ul << PWM_SYNC_SFLTCNT_Pos) /*!< PWM_T::SYNC: SFLTCNT Mask */ + +#define PWM_SYNC_SINPINV_Pos (23) /*!< PWM_T::SYNC: SINPINV Position */ +#define PWM_SYNC_SINPINV_Msk (0x1ul << PWM_SYNC_SINPINV_Pos) /*!< PWM_T::SYNC: SINPINV Mask */ + +#define PWM_SYNC_PHSDIRn_Pos (24) /*!< PWM_T::SYNC: PHSDIRn Position */ +#define PWM_SYNC_PHSDIRn_Msk (0x7ul << PWM_SYNC_PHSDIRn_Pos) /*!< PWM_T::SYNC: PHSDIRn Mask */ + +#define PWM_SYNC_PHSDIR0_Pos (24) /*!< PWM_T::SYNC: PHSDIR0 Position */ +#define PWM_SYNC_PHSDIR0_Msk (0x1ul << PWM_SYNC_PHSDIR0_Pos) /*!< PWM_T::SYNC: PHSDIR0 Mask */ + +#define PWM_SYNC_PHSDIR2_Pos (25) /*!< PWM_T::SYNC: PHSDIR2 Position */ +#define PWM_SYNC_PHSDIR2_Msk (0x1ul << PWM_SYNC_PHSDIR2_Pos) /*!< PWM_T::SYNC: PHSDIR2 Mask */ + +#define PWM_SYNC_PHSDIR4_Pos (26) /*!< PWM_T::SYNC: PHSDIR4 Position */ +#define PWM_SYNC_PHSDIR4_Msk (0x1ul << PWM_SYNC_PHSDIR4_Pos) /*!< PWM_T::SYNC: PHSDIR4 Mask */ + +#define PWM_SWSYNC_SWSYNCn_Pos (0) /*!< PWM_T::SWSYNC: SWSYNCn Position */ +#define PWM_SWSYNC_SWSYNCn_Msk (0x7ul << PWM_SWSYNC_SWSYNCn_Pos) /*!< PWM_T::SWSYNC: SWSYNCn Mask */ + +#define PWM_SWSYNC_SWSYNC0_Pos (0) /*!< PWM_T::SWSYNC: SWSYNC0 Position */ +#define PWM_SWSYNC_SWSYNC0_Msk (0x1ul << PWM_SWSYNC_SWSYNC0_Pos) /*!< PWM_T::SWSYNC: SWSYNC0 Mask */ + +#define PWM_SWSYNC_SWSYNC2_Pos (1) /*!< PWM_T::SWSYNC: SWSYNC2 Position */ +#define PWM_SWSYNC_SWSYNC2_Msk (0x1ul << PWM_SWSYNC_SWSYNC2_Pos) /*!< PWM_T::SWSYNC: SWSYNC2 Mask */ + +#define PWM_SWSYNC_SWSYNC4_Pos (2) /*!< PWM_T::SWSYNC: SWSYNC4 Position */ +#define PWM_SWSYNC_SWSYNC4_Msk (0x1ul << PWM_SWSYNC_SWSYNC4_Pos) /*!< PWM_T::SWSYNC: SWSYNC4 Mask */ + +#define PWM_CLKSRC_ECLKSRC0_Pos (0) /*!< PWM_T::CLKSRC: ECLKSRC0 Position */ +#define PWM_CLKSRC_ECLKSRC0_Msk (0x7ul << PWM_CLKSRC_ECLKSRC0_Pos) /*!< PWM_T::CLKSRC: ECLKSRC0 Mask */ + +#define PWM_CLKSRC_ECLKSRC2_Pos (8) /*!< PWM_T::CLKSRC: ECLKSRC2 Position */ +#define PWM_CLKSRC_ECLKSRC2_Msk (0x7ul << PWM_CLKSRC_ECLKSRC2_Pos) /*!< PWM_T::CLKSRC: ECLKSRC2 Mask */ + +#define PWM_CLKSRC_ECLKSRC4_Pos (16) /*!< PWM_T::CLKSRC: ECLKSRC4 Position */ +#define PWM_CLKSRC_ECLKSRC4_Msk (0x7ul << PWM_CLKSRC_ECLKSRC4_Pos) /*!< PWM_T::CLKSRC: ECLKSRC4 Mask */ + +#define PWM_CLKPSC0_1_CLKPSC_Pos (0) /*!< PWM_T::CLKPSC0_1: CLKPSC Position */ +#define PWM_CLKPSC0_1_CLKPSC_Msk (0xffful << PWM_CLKPSC0_1_CLKPSC_Pos) /*!< PWM_T::CLKPSC0_1: CLKPSC Mask */ + +#define PWM_CLKPSC2_3_CLKPSC_Pos (0) /*!< PWM_T::CLKPSC2_3: CLKPSC Position */ +#define PWM_CLKPSC2_3_CLKPSC_Msk (0xffful << PWM_CLKPSC2_3_CLKPSC_Pos) /*!< PWM_T::CLKPSC2_3: CLKPSC Mask */ + +#define PWM_CLKPSC4_5_CLKPSC_Pos (0) /*!< PWM_T::CLKPSC4_5: CLKPSC Position */ +#define PWM_CLKPSC4_5_CLKPSC_Msk (0xffful << PWM_CLKPSC4_5_CLKPSC_Pos) /*!< PWM_T::CLKPSC4_5: CLKPSC Mask */ + +#define PWM_CNTEN_CNTENn_Pos (0) /*!< PWM_T::CNTEN: CNTENn Position */ +#define PWM_CNTEN_CNTENn_Msk (0x3ful << PWM_CNTEN_CNTENn_Pos) /*!< PWM_T::CNTEN: CNTENn Mask */ + +#define PWM_CNTEN_CNTEN0_Pos (0) /*!< PWM_T::CNTEN: CNTEN0 Position */ +#define PWM_CNTEN_CNTEN0_Msk (0x1ul << PWM_CNTEN_CNTEN0_Pos) /*!< PWM_T::CNTEN: CNTEN0 Mask */ + +#define PWM_CNTEN_CNTEN1_Pos (1) /*!< PWM_T::CNTEN: CNTEN1 Position */ +#define PWM_CNTEN_CNTEN1_Msk (0x1ul << PWM_CNTEN_CNTEN1_Pos) /*!< PWM_T::CNTEN: CNTEN1 Mask */ + +#define PWM_CNTEN_CNTEN2_Pos (2) /*!< PWM_T::CNTEN: CNTEN2 Position */ +#define PWM_CNTEN_CNTEN2_Msk (0x1ul << PWM_CNTEN_CNTEN2_Pos) /*!< PWM_T::CNTEN: CNTEN2 Mask */ + +#define PWM_CNTEN_CNTEN3_Pos (3) /*!< PWM_T::CNTEN: CNTEN3 Position */ +#define PWM_CNTEN_CNTEN3_Msk (0x1ul << PWM_CNTEN_CNTEN3_Pos) /*!< PWM_T::CNTEN: CNTEN3 Mask */ + +#define PWM_CNTEN_CNTEN4_Pos (4) /*!< PWM_T::CNTEN: CNTEN4 Position */ +#define PWM_CNTEN_CNTEN4_Msk (0x1ul << PWM_CNTEN_CNTEN4_Pos) /*!< PWM_T::CNTEN: CNTEN4 Mask */ + +#define PWM_CNTEN_CNTEN5_Pos (5) /*!< PWM_T::CNTEN: CNTEN5 Position */ +#define PWM_CNTEN_CNTEN5_Msk (0x1ul << PWM_CNTEN_CNTEN5_Pos) /*!< PWM_T::CNTEN: CNTEN5 Mask */ + +#define PWM_CNTCLR_CNTCLRn_Pos (0) /*!< PWM_T::CNTCLR: CNTCLRn Position */ +#define PWM_CNTCLR_CNTCLRn_Msk (0x3ful << PWM_CNTCLR_CNTCLRn_Pos) /*!< PWM_T::CNTCLR: CNTCLRn Mask */ + +#define PWM_CNTCLR_CNTCLR0_Pos (0) /*!< PWM_T::CNTCLR: CNTCLR0 Position */ +#define PWM_CNTCLR_CNTCLR0_Msk (0x1ul << PWM_CNTCLR_CNTCLR0_Pos) /*!< PWM_T::CNTCLR: CNTCLR0 Mask */ + +#define PWM_CNTCLR_CNTCLR1_Pos (1) /*!< PWM_T::CNTCLR: CNTCLR1 Position */ +#define PWM_CNTCLR_CNTCLR1_Msk (0x1ul << PWM_CNTCLR_CNTCLR1_Pos) /*!< PWM_T::CNTCLR: CNTCLR1 Mask */ + +#define PWM_CNTCLR_CNTCLR2_Pos (2) /*!< PWM_T::CNTCLR: CNTCLR2 Position */ +#define PWM_CNTCLR_CNTCLR2_Msk (0x1ul << PWM_CNTCLR_CNTCLR2_Pos) /*!< PWM_T::CNTCLR: CNTCLR2 Mask */ + +#define PWM_CNTCLR_CNTCLR3_Pos (3) /*!< PWM_T::CNTCLR: CNTCLR3 Position */ +#define PWM_CNTCLR_CNTCLR3_Msk (0x1ul << PWM_CNTCLR_CNTCLR3_Pos) /*!< PWM_T::CNTCLR: CNTCLR3 Mask */ + +#define PWM_CNTCLR_CNTCLR4_Pos (4) /*!< PWM_T::CNTCLR: CNTCLR4 Position */ +#define PWM_CNTCLR_CNTCLR4_Msk (0x1ul << PWM_CNTCLR_CNTCLR4_Pos) /*!< PWM_T::CNTCLR: CNTCLR4 Mask */ + +#define PWM_CNTCLR_CNTCLR5_Pos (5) /*!< PWM_T::CNTCLR: CNTCLR5 Position */ +#define PWM_CNTCLR_CNTCLR5_Msk (0x1ul << PWM_CNTCLR_CNTCLR5_Pos) /*!< PWM_T::CNTCLR: CNTCLR5 Mask */ + +#define PWM_LOAD_LOADn_Pos (0) /*!< PWM_T::LOAD: LOADn Position */ +#define PWM_LOAD_LOADn_Msk (0x3ful << PWM_LOAD_LOADn_Pos) /*!< PWM_T::LOAD: LOADn Mask */ + +#define PWM_LOAD_LOAD0_Pos (0) /*!< PWM_T::LOAD: LOAD0 Position */ +#define PWM_LOAD_LOAD0_Msk (0x1ul << PWM_LOAD_LOAD0_Pos) /*!< PWM_T::LOAD: LOAD0 Mask */ + +#define PWM_LOAD_LOAD1_Pos (1) /*!< PWM_T::LOAD: LOAD1 Position */ +#define PWM_LOAD_LOAD1_Msk (0x1ul << PWM_LOAD_LOAD1_Pos) /*!< PWM_T::LOAD: LOAD1 Mask */ + +#define PWM_LOAD_LOAD2_Pos (2) /*!< PWM_T::LOAD: LOAD2 Position */ +#define PWM_LOAD_LOAD2_Msk (0x1ul << PWM_LOAD_LOAD2_Pos) /*!< PWM_T::LOAD: LOAD2 Mask */ + +#define PWM_LOAD_LOAD3_Pos (3) /*!< PWM_T::LOAD: LOAD3 Position */ +#define PWM_LOAD_LOAD3_Msk (0x1ul << PWM_LOAD_LOAD3_Pos) /*!< PWM_T::LOAD: LOAD3 Mask */ + +#define PWM_LOAD_LOAD4_Pos (4) /*!< PWM_T::LOAD: LOAD4 Position */ +#define PWM_LOAD_LOAD4_Msk (0x1ul << PWM_LOAD_LOAD4_Pos) /*!< PWM_T::LOAD: LOAD4 Mask */ + +#define PWM_LOAD_LOAD5_Pos (5) /*!< PWM_T::LOAD: LOAD5 Position */ +#define PWM_LOAD_LOAD5_Msk (0x1ul << PWM_LOAD_LOAD5_Pos) /*!< PWM_T::LOAD: LOAD5 Mask */ + +#define PWM_PERIOD_PERIOD_Pos (0) /*!< PWM_T::PERIOD: PERIOD Position */ +#define PWM_PERIOD_PERIOD_Msk (0xfffful << PWM_PERIOD_PERIOD_Pos) /*!< PWM_T::PERIOD: PERIOD Mask */ + +#define PWM_CMPDAT_CMP_Pos (0) /*!< PWM_T::CMPDAT: CMP Position */ +#define PWM_CMPDAT_CMP_Msk (0xfffful << PWM_CMPDAT_CMP_Pos) /*!< PWM_T::CMPDAT: CMP Mask */ + +#define PWM_DTCTL0_1_DTCNT_Pos (0) /*!< PWM_T::DTCTL0_1: DTCNT Position */ +#define PWM_DTCTL0_1_DTCNT_Msk (0xffful << PWM_DTCTL0_1_DTCNT_Pos) /*!< PWM_T::DTCTL0_1: DTCNT Mask */ + +#define PWM_DTCTL0_1_DTEN_Pos (16) /*!< PWM_T::DTCTL0_1: DTEN Position */ +#define PWM_DTCTL0_1_DTEN_Msk (0x1ul << PWM_DTCTL0_1_DTEN_Pos) /*!< PWM_T::DTCTL0_1: DTEN Mask */ + +#define PWM_DTCTL0_1_DTCKSEL_Pos (24) /*!< PWM_T::DTCTL0_1: DTCKSEL Position */ +#define PWM_DTCTL0_1_DTCKSEL_Msk (0x1ul << PWM_DTCTL0_1_DTCKSEL_Pos) /*!< PWM_T::DTCTL0_1: DTCKSEL Mask */ + +#define PWM_DTCTL2_3_DTCNT_Pos (0) /*!< PWM_T::DTCTL2_3: DTCNT Position */ +#define PWM_DTCTL2_3_DTCNT_Msk (0xffful << PWM_DTCTL2_3_DTCNT_Pos) /*!< PWM_T::DTCTL2_3: DTCNT Mask */ + +#define PWM_DTCTL2_3_DTEN_Pos (16) /*!< PWM_T::DTCTL2_3: DTEN Position */ +#define PWM_DTCTL2_3_DTEN_Msk (0x1ul << PWM_DTCTL2_3_DTEN_Pos) /*!< PWM_T::DTCTL2_3: DTEN Mask */ + +#define PWM_DTCTL2_3_DTCKSEL_Pos (24) /*!< PWM_T::DTCTL2_3: DTCKSEL Position */ +#define PWM_DTCTL2_3_DTCKSEL_Msk (0x1ul << PWM_DTCTL2_3_DTCKSEL_Pos) /*!< PWM_T::DTCTL2_3: DTCKSEL Mask */ + +#define PWM_DTCTL4_5_DTCNT_Pos (0) /*!< PWM_T::DTCTL4_5: DTCNT Position */ +#define PWM_DTCTL4_5_DTCNT_Msk (0xffful << PWM_DTCTL4_5_DTCNT_Pos) /*!< PWM_T::DTCTL4_5: DTCNT Mask */ + +#define PWM_DTCTL4_5_DTEN_Pos (16) /*!< PWM_T::DTCTL4_5: DTEN Position */ +#define PWM_DTCTL4_5_DTEN_Msk (0x1ul << PWM_DTCTL4_5_DTEN_Pos) /*!< PWM_T::DTCTL4_5: DTEN Mask */ + +#define PWM_DTCTL4_5_DTCKSEL_Pos (24) /*!< PWM_T::DTCTL4_5: DTCKSEL Position */ +#define PWM_DTCTL4_5_DTCKSEL_Msk (0x1ul << PWM_DTCTL4_5_DTCKSEL_Pos) /*!< PWM_T::DTCTL4_5: DTCKSEL Mask */ + +#define PWM_PHS0_1_PHS_Pos (0) /*!< PWM_T::PHS0_1: PHS Position */ +#define PWM_PHS0_1_PHS_Msk (0xfffful << PWM_PHS0_1_PHS_Pos) /*!< PWM_T::PHS0_1: PHS Mask */ + +#define PWM_PHS2_3_PHS_Pos (0) /*!< PWM_T::PHS2_3: PHS Position */ +#define PWM_PHS2_3_PHS_Msk (0xfffful << PWM_PHS2_3_PHS_Pos) /*!< PWM_T::PHS2_3: PHS Mask */ + +#define PWM_PHS4_5_PHS_Pos (0) /*!< PWM_T::PHS4_5: PHS Position */ +#define PWM_PHS4_5_PHS_Msk (0xfffful << PWM_PHS4_5_PHS_Pos) /*!< PWM_T::PHS4_5: PHS Mask */ + +#define PWM_CNT_CNT_Pos (0) /*!< PWM_T::CNT: CNT Position */ +#define PWM_CNT_CNT_Msk (0xfffful << PWM_CNT_CNT_Pos) /*!< PWM_T::CNT: CNT Mask */ + +#define PWM_CNT_DIRF_Pos (16) /*!< PWM_T::CNT: DIRF Position */ +#define PWM_CNT_DIRF_Msk (0x1ul << PWM_CNT_DIRF_Pos) /*!< PWM_T::CNT: DIRF Mask */ + +#define PWM_WGCTL0_ZPCTLn_Pos (0) /*!< PWM_T::WGCTL0: ZPCTLn Position */ +#define PWM_WGCTL0_ZPCTLn_Msk (0xffful << PWM_WGCTL0_ZPCTLn_Pos) /*!< PWM_T::WGCTL0: ZPCTLn Mask */ + +#define PWM_WGCTL0_ZPCTL0_Pos (0) /*!< PWM_T::WGCTL0: ZPCTL0 Position */ +#define PWM_WGCTL0_ZPCTL0_Msk (0x3ul << PWM_WGCTL0_ZPCTL0_Pos) /*!< PWM_T::WGCTL0: ZPCTL0 Mask */ + +#define PWM_WGCTL0_ZPCTL1_Pos (2) /*!< PWM_T::WGCTL0: ZPCTL1 Position */ +#define PWM_WGCTL0_ZPCTL1_Msk (0x3ul << PWM_WGCTL0_ZPCTL1_Pos) /*!< PWM_T::WGCTL0: ZPCTL1 Mask */ + +#define PWM_WGCTL0_ZPCTL2_Pos (4) /*!< PWM_T::WGCTL0: ZPCTL2 Position */ +#define PWM_WGCTL0_ZPCTL2_Msk (0x3ul << PWM_WGCTL0_ZPCTL2_Pos) /*!< PWM_T::WGCTL0: ZPCTL2 Mask */ + +#define PWM_WGCTL0_ZPCTL3_Pos (6) /*!< PWM_T::WGCTL0: ZPCTL3 Position */ +#define PWM_WGCTL0_ZPCTL3_Msk (0x3ul << PWM_WGCTL0_ZPCTL3_Pos) /*!< PWM_T::WGCTL0: ZPCTL3 Mask */ + +#define PWM_WGCTL0_ZPCTL4_Pos (8) /*!< PWM_T::WGCTL0: ZPCTL4 Position */ +#define PWM_WGCTL0_ZPCTL4_Msk (0x3ul << PWM_WGCTL0_ZPCTL4_Pos) /*!< PWM_T::WGCTL0: ZPCTL4 Mask */ + +#define PWM_WGCTL0_ZPCTL5_Pos (10) /*!< PWM_T::WGCTL0: ZPCTL5 Position */ +#define PWM_WGCTL0_ZPCTL5_Msk (0x3ul << PWM_WGCTL0_ZPCTL5_Pos) /*!< PWM_T::WGCTL0: ZPCTL5 Mask */ + +#define PWM_WGCTL0_PRDPCTLn_Pos (16) /*!< PWM_T::WGCTL0: PRDPCTLn Position */ +#define PWM_WGCTL0_PRDPCTLn_Msk (0xffful << PWM_WGCTL0_PRDPCTLn_Pos) /*!< PWM_T::WGCTL0: PRDPCTLn Mask */ + +#define PWM_WGCTL0_PRDPCTL0_Pos (16) /*!< PWM_T::WGCTL0: PRDPCTL0 Position */ +#define PWM_WGCTL0_PRDPCTL0_Msk (0x3ul << PWM_WGCTL0_PRDPCTL0_Pos) /*!< PWM_T::WGCTL0: PRDPCTL0 Mask */ + +#define PWM_WGCTL0_PRDPCTL1_Pos (18) /*!< PWM_T::WGCTL0: PRDPCTL1 Position */ +#define PWM_WGCTL0_PRDPCTL1_Msk (0x3ul << PWM_WGCTL0_PRDPCTL1_Pos) /*!< PWM_T::WGCTL0: PRDPCTL1 Mask */ + +#define PWM_WGCTL0_PRDPCTL2_Pos (20) /*!< PWM_T::WGCTL0: PRDPCTL2 Position */ +#define PWM_WGCTL0_PRDPCTL2_Msk (0x3ul << PWM_WGCTL0_PRDPCTL2_Pos) /*!< PWM_T::WGCTL0: PRDPCTL2 Mask */ + +#define PWM_WGCTL0_PRDPCTL3_Pos (22) /*!< PWM_T::WGCTL0: PRDPCTL3 Position */ +#define PWM_WGCTL0_PRDPCTL3_Msk (0x3ul << PWM_WGCTL0_PRDPCTL3_Pos) /*!< PWM_T::WGCTL0: PRDPCTL3 Mask */ + +#define PWM_WGCTL0_PRDPCTL4_Pos (24) /*!< PWM_T::WGCTL0: PRDPCTL4 Position */ +#define PWM_WGCTL0_PRDPCTL4_Msk (0x3ul << PWM_WGCTL0_PRDPCTL4_Pos) /*!< PWM_T::WGCTL0: PRDPCTL4 Mask */ + +#define PWM_WGCTL0_PRDPCTL5_Pos (26) /*!< PWM_T::WGCTL0: PRDPCTL5 Position */ +#define PWM_WGCTL0_PRDPCTL5_Msk (0x3ul << PWM_WGCTL0_PRDPCTL5_Pos) /*!< PWM_T::WGCTL0: PRDPCTL5 Mask */ + +#define PWM_WGCTL1_CMPUCTLn_Pos (0) /*!< PWM_T::WGCTL1: CMPUCTLn Position */ +#define PWM_WGCTL1_CMPUCTLn_Msk (0xffful << PWM_WGCTL1_CMPUCTLn_Pos) /*!< PWM_T::WGCTL1: CMPUCTLn Mask */ + +#define PWM_WGCTL1_CMPUCTL0_Pos (0) /*!< PWM_T::WGCTL1: CMPUCTL0 Position */ +#define PWM_WGCTL1_CMPUCTL0_Msk (0x3ul << PWM_WGCTL1_CMPUCTL0_Pos) /*!< PWM_T::WGCTL1: CMPUCTL0 Mask */ + +#define PWM_WGCTL1_CMPUCTL1_Pos (2) /*!< PWM_T::WGCTL1: CMPUCTL1 Position */ +#define PWM_WGCTL1_CMPUCTL1_Msk (0x3ul << PWM_WGCTL1_CMPUCTL1_Pos) /*!< PWM_T::WGCTL1: CMPUCTL1 Mask */ + +#define PWM_WGCTL1_CMPUCTL2_Pos (4) /*!< PWM_T::WGCTL1: CMPUCTL2 Position */ +#define PWM_WGCTL1_CMPUCTL2_Msk (0x3ul << PWM_WGCTL1_CMPUCTL2_Pos) /*!< PWM_T::WGCTL1: CMPUCTL2 Mask */ + +#define PWM_WGCTL1_CMPUCTL3_Pos (6) /*!< PWM_T::WGCTL1: CMPUCTL3 Position */ +#define PWM_WGCTL1_CMPUCTL3_Msk (0x3ul << PWM_WGCTL1_CMPUCTL3_Pos) /*!< PWM_T::WGCTL1: CMPUCTL3 Mask */ + +#define PWM_WGCTL1_CMPUCTL4_Pos (8) /*!< PWM_T::WGCTL1: CMPUCTL4 Position */ +#define PWM_WGCTL1_CMPUCTL4_Msk (0x3ul << PWM_WGCTL1_CMPUCTL4_Pos) /*!< PWM_T::WGCTL1: CMPUCTL4 Mask */ + +#define PWM_WGCTL1_CMPUCTL5_Pos (10) /*!< PWM_T::WGCTL1: CMPUCTL5 Position */ +#define PWM_WGCTL1_CMPUCTL5_Msk (0x3ul << PWM_WGCTL1_CMPUCTL5_Pos) /*!< PWM_T::WGCTL1: CMPUCTL5 Mask */ + +#define PWM_WGCTL1_CMPDCTLn_Pos (16) /*!< PWM_T::WGCTL1: CMPDCTLn Position */ +#define PWM_WGCTL1_CMPDCTLn_Msk (0xffful << PWM_WGCTL1_CMPDCTLn_Pos) /*!< PWM_T::WGCTL1: CMPDCTLn Mask */ + +#define PWM_WGCTL1_CMPDCTL0_Pos (16) /*!< PWM_T::WGCTL1: CMPDCTL0 Position */ +#define PWM_WGCTL1_CMPDCTL0_Msk (0x3ul << PWM_WGCTL1_CMPDCTL0_Pos) /*!< PWM_T::WGCTL1: CMPDCTL0 Mask */ + +#define PWM_WGCTL1_CMPDCTL1_Pos (18) /*!< PWM_T::WGCTL1: CMPDCTL1 Position */ +#define PWM_WGCTL1_CMPDCTL1_Msk (0x3ul << PWM_WGCTL1_CMPDCTL1_Pos) /*!< PWM_T::WGCTL1: CMPDCTL1 Mask */ + +#define PWM_WGCTL1_CMPDCTL2_Pos (20) /*!< PWM_T::WGCTL1: CMPDCTL2 Position */ +#define PWM_WGCTL1_CMPDCTL2_Msk (0x3ul << PWM_WGCTL1_CMPDCTL2_Pos) /*!< PWM_T::WGCTL1: CMPDCTL2 Mask */ + +#define PWM_WGCTL1_CMPDCTL3_Pos (22) /*!< PWM_T::WGCTL1: CMPDCTL3 Position */ +#define PWM_WGCTL1_CMPDCTL3_Msk (0x3ul << PWM_WGCTL1_CMPDCTL3_Pos) /*!< PWM_T::WGCTL1: CMPDCTL3 Mask */ + +#define PWM_WGCTL1_CMPDCTL4_Pos (24) /*!< PWM_T::WGCTL1: CMPDCTL4 Position */ +#define PWM_WGCTL1_CMPDCTL4_Msk (0x3ul << PWM_WGCTL1_CMPDCTL4_Pos) /*!< PWM_T::WGCTL1: CMPDCTL4 Mask */ + +#define PWM_WGCTL1_CMPDCTL5_Pos (26) /*!< PWM_T::WGCTL1: CMPDCTL5 Position */ +#define PWM_WGCTL1_CMPDCTL5_Msk (0x3ul << PWM_WGCTL1_CMPDCTL5_Pos) /*!< PWM_T::WGCTL1: CMPDCTL5 Mask */ + +#define PWM_MSKEN_MSKENn_Pos (0) /*!< PWM_T::MSKEN: MSKENn Position */ +#define PWM_MSKEN_MSKENn_Msk (0x3ful << PWM_MSKEN_MSKENn_Pos) /*!< PWM_T::MSKEN: MSKENn Mask */ + +#define PWM_MSKEN_MSKEN0_Pos (0) /*!< PWM_T::MSKEN: MSKEN0 Position */ +#define PWM_MSKEN_MSKEN0_Msk (0x1ul << PWM_MSKEN_MSKEN0_Pos) /*!< PWM_T::MSKEN: MSKEN0 Mask */ + +#define PWM_MSKEN_MSKEN1_Pos (1) /*!< PWM_T::MSKEN: MSKEN1 Position */ +#define PWM_MSKEN_MSKEN1_Msk (0x1ul << PWM_MSKEN_MSKEN1_Pos) /*!< PWM_T::MSKEN: MSKEN1 Mask */ + +#define PWM_MSKEN_MSKEN2_Pos (2) /*!< PWM_T::MSKEN: MSKEN2 Position */ +#define PWM_MSKEN_MSKEN2_Msk (0x1ul << PWM_MSKEN_MSKEN2_Pos) /*!< PWM_T::MSKEN: MSKEN2 Mask */ + +#define PWM_MSKEN_MSKEN3_Pos (3) /*!< PWM_T::MSKEN: MSKEN3 Position */ +#define PWM_MSKEN_MSKEN3_Msk (0x1ul << PWM_MSKEN_MSKEN3_Pos) /*!< PWM_T::MSKEN: MSKEN3 Mask */ + +#define PWM_MSKEN_MSKEN4_Pos (4) /*!< PWM_T::MSKEN: MSKEN4 Position */ +#define PWM_MSKEN_MSKEN4_Msk (0x1ul << PWM_MSKEN_MSKEN4_Pos) /*!< PWM_T::MSKEN: MSKEN4 Mask */ + +#define PWM_MSKEN_MSKEN5_Pos (5) /*!< PWM_T::MSKEN: MSKEN5 Position */ +#define PWM_MSKEN_MSKEN5_Msk (0x1ul << PWM_MSKEN_MSKEN5_Pos) /*!< PWM_T::MSKEN: MSKEN5 Mask */ + +#define PWM_MSK_MSKDATn_Pos (0) /*!< PWM_T::MSK: MSKDATn Position */ +#define PWM_MSK_MSKDATn_Msk (0x3ful << PWM_MSK_MSKDATn_Pos) /*!< PWM_T::MSK: MSKDATn Mask */ + +#define PWM_MSK_MSKDAT0_Pos (0) /*!< PWM_T::MSK: MSKDAT0 Position */ +#define PWM_MSK_MSKDAT0_Msk (0x1ul << PWM_MSK_MSKDAT0_Pos) /*!< PWM_T::MSK: MSKDAT0 Mask */ + +#define PWM_MSK_MSKDAT1_Pos (1) /*!< PWM_T::MSK: MSKDAT1 Position */ +#define PWM_MSK_MSKDAT1_Msk (0x1ul << PWM_MSK_MSKDAT1_Pos) /*!< PWM_T::MSK: MSKDAT1 Mask */ + +#define PWM_MSK_MSKDAT2_Pos (2) /*!< PWM_T::MSK: MSKDAT2 Position */ +#define PWM_MSK_MSKDAT2_Msk (0x1ul << PWM_MSK_MSKDAT2_Pos) /*!< PWM_T::MSK: MSKDAT2 Mask */ + +#define PWM_MSK_MSKDAT3_Pos (3) /*!< PWM_T::MSK: MSKDAT3 Position */ +#define PWM_MSK_MSKDAT3_Msk (0x1ul << PWM_MSK_MSKDAT3_Pos) /*!< PWM_T::MSK: MSKDAT3 Mask */ + +#define PWM_MSK_MSKDAT4_Pos (4) /*!< PWM_T::MSK: MSKDAT4 Position */ +#define PWM_MSK_MSKDAT4_Msk (0x1ul << PWM_MSK_MSKDAT4_Pos) /*!< PWM_T::MSK: MSKDAT4 Mask */ + +#define PWM_MSK_MSKDAT5_Pos (5) /*!< PWM_T::MSK: MSKDAT5 Position */ +#define PWM_MSK_MSKDAT5_Msk (0x1ul << PWM_MSK_MSKDAT5_Pos) /*!< PWM_T::MSK: MSKDAT5 Mask */ + +#define PWM_BNF_BRK0NFEN_Pos (0) /*!< PWM_T::BNF: BRK0NFEN Position */ +#define PWM_BNF_BRK0NFEN_Msk (0x1ul << PWM_BNF_BRK0NFEN_Pos) /*!< PWM_T::BNF: BRK0NFEN Mask */ + +#define PWM_BNF_BRK0NFSEL_Pos (1) /*!< PWM_T::BNF: BRK0NFSEL Position */ +#define PWM_BNF_BRK0NFSEL_Msk (0x7ul << PWM_BNF_BRK0NFSEL_Pos) /*!< PWM_T::BNF: BRK0NFSEL Mask */ + +#define PWM_BNF_BRK0FCNT_Pos (4) /*!< PWM_T::BNF: BRK0FCNT Position */ +#define PWM_BNF_BRK0FCNT_Msk (0x7ul << PWM_BNF_BRK0FCNT_Pos) /*!< PWM_T::BNF: BRK0FCNT Mask */ + +#define PWM_BNF_BRK0PINV_Pos (7) /*!< PWM_T::BNF: BRK0PINV Position */ +#define PWM_BNF_BRK0PINV_Msk (0x1ul << PWM_BNF_BRK0PINV_Pos) /*!< PWM_T::BNF: BRK0PINV Mask */ + +#define PWM_BNF_BRK1NFEN_Pos (8) /*!< PWM_T::BNF: BRK1NFEN Position */ +#define PWM_BNF_BRK1NFEN_Msk (0x1ul << PWM_BNF_BRK1NFEN_Pos) /*!< PWM_T::BNF: BRK1NFEN Mask */ + +#define PWM_BNF_BRK1NFSEL_Pos (9) /*!< PWM_T::BNF: BRK1NFSEL Position */ +#define PWM_BNF_BRK1NFSEL_Msk (0x7ul << PWM_BNF_BRK1NFSEL_Pos) /*!< PWM_T::BNF: BRK1NFSEL Mask */ + +#define PWM_BNF_BRK1FCNT_Pos (12) /*!< PWM_T::BNF: BRK1FCNT Position */ +#define PWM_BNF_BRK1FCNT_Msk (0x7ul << PWM_BNF_BRK1FCNT_Pos) /*!< PWM_T::BNF: BRK1FCNT Mask */ + +#define PWM_BNF_BRK1PINV_Pos (15) /*!< PWM_T::BNF: BRK1PINV Position */ +#define PWM_BNF_BRK1PINV_Msk (0x1ul << PWM_BNF_BRK1PINV_Pos) /*!< PWM_T::BNF: BRK1PINV Mask */ + +#define PWM_BNF_BK0SRC_Pos (16) /*!< PWM_T::BNF: BK0SRC Position */ +#define PWM_BNF_BK0SRC_Msk (0x1ul << PWM_BNF_BK0SRC_Pos) /*!< PWM_T::BNF: BK0SRC Mask */ + +#define PWM_BNF_BK1SRC_Pos (24) /*!< PWM_T::BNF: BK1SRC Position */ +#define PWM_BNF_BK1SRC_Msk (0x1ul << PWM_BNF_BK1SRC_Pos) /*!< PWM_T::BNF: BK1SRC Mask */ + +#define PWM_FAILBRK_CSSBRKEN_Pos (0) /*!< PWM_T::FAILBRK: CSSBRKEN Position */ +#define PWM_FAILBRK_CSSBRKEN_Msk (0x1ul << PWM_FAILBRK_CSSBRKEN_Pos) /*!< PWM_T::FAILBRK: CSSBRKEN Mask */ + +#define PWM_FAILBRK_BODBRKEN_Pos (1) /*!< PWM_T::FAILBRK: BODBRKEN Position */ +#define PWM_FAILBRK_BODBRKEN_Msk (0x1ul << PWM_FAILBRK_BODBRKEN_Pos) /*!< PWM_T::FAILBRK: BODBRKEN Mask */ + +#define PWM_FAILBRK_RAMBRKEN_Pos (2) /*!< PWM_T::FAILBRK: RAMBRKEN Position */ +#define PWM_FAILBRK_RAMBRKEN_Msk (0x1ul << PWM_FAILBRK_RAMBRKEN_Pos) /*!< PWM_T::FAILBRK: RAMBRKEN Mask */ + +#define PWM_FAILBRK_CORBRKEN_Pos (3) /*!< PWM_T::FAILBRK: CORBRKEN Position */ +#define PWM_FAILBRK_CORBRKEN_Msk (0x1ul << PWM_FAILBRK_CORBRKEN_Pos) /*!< PWM_T::FAILBRK: CORBRKEN Mask */ + +#define PWM_BRKCTL0_1_CPO0EBEN_Pos (0) /*!< PWM_T::BRKCTL0_1: CPO0EBEN Position */ +#define PWM_BRKCTL0_1_CPO0EBEN_Msk (0x1ul << PWM_BRKCTL0_1_CPO0EBEN_Pos) /*!< PWM_T::BRKCTL0_1: CPO0EBEN Mask */ + +#define PWM_BRKCTL0_1_CPO1EBEN_Pos (1) /*!< PWM_T::BRKCTL0_1: CPO1EBEN Position */ +#define PWM_BRKCTL0_1_CPO1EBEN_Msk (0x1ul << PWM_BRKCTL0_1_CPO1EBEN_Pos) /*!< PWM_T::BRKCTL0_1: CPO1EBEN Mask */ + +#define PWM_BRKCTL0_1_BRKP0EEN_Pos (4) /*!< PWM_T::BRKCTL0_1: BRKP0EEN Position */ +#define PWM_BRKCTL0_1_BRKP0EEN_Msk (0x1ul << PWM_BRKCTL0_1_BRKP0EEN_Pos) /*!< PWM_T::BRKCTL0_1: BRKP0EEN Mask */ + +#define PWM_BRKCTL0_1_BRKP1EEN_Pos (5) /*!< PWM_T::BRKCTL0_1: BRKP1EEN Position */ +#define PWM_BRKCTL0_1_BRKP1EEN_Msk (0x1ul << PWM_BRKCTL0_1_BRKP1EEN_Pos) /*!< PWM_T::BRKCTL0_1: BRKP1EEN Mask */ + +#define PWM_BRKCTL0_1_SYSEBEN_Pos (7) /*!< PWM_T::BRKCTL0_1: SYSEBEN Position */ +#define PWM_BRKCTL0_1_SYSEBEN_Msk (0x1ul << PWM_BRKCTL0_1_SYSEBEN_Pos) /*!< PWM_T::BRKCTL0_1: SYSEBEN Mask */ + +#define PWM_BRKCTL0_1_CPO0LBEN_Pos (8) /*!< PWM_T::BRKCTL0_1: CPO0LBEN Position */ +#define PWM_BRKCTL0_1_CPO0LBEN_Msk (0x1ul << PWM_BRKCTL0_1_CPO0LBEN_Pos) /*!< PWM_T::BRKCTL0_1: CPO0LBEN Mask */ + +#define PWM_BRKCTL0_1_CPO1LBEN_Pos (9) /*!< PWM_T::BRKCTL0_1: CPO1LBEN Position */ +#define PWM_BRKCTL0_1_CPO1LBEN_Msk (0x1ul << PWM_BRKCTL0_1_CPO1LBEN_Pos) /*!< PWM_T::BRKCTL0_1: CPO1LBEN Mask */ + +#define PWM_BRKCTL0_1_BRKP0LEN_Pos (12) /*!< PWM_T::BRKCTL0_1: BRKP0LEN Position */ +#define PWM_BRKCTL0_1_BRKP0LEN_Msk (0x1ul << PWM_BRKCTL0_1_BRKP0LEN_Pos) /*!< PWM_T::BRKCTL0_1: BRKP0LEN Mask */ + +#define PWM_BRKCTL0_1_BRKP1LEN_Pos (13) /*!< PWM_T::BRKCTL0_1: BRKP1LEN Position */ +#define PWM_BRKCTL0_1_BRKP1LEN_Msk (0x1ul << PWM_BRKCTL0_1_BRKP1LEN_Pos) /*!< PWM_T::BRKCTL0_1: BRKP1LEN Mask */ + +#define PWM_BRKCTL0_1_SYSLBEN_Pos (15) /*!< PWM_T::BRKCTL0_1: SYSLBEN Position */ +#define PWM_BRKCTL0_1_SYSLBEN_Msk (0x1ul << PWM_BRKCTL0_1_SYSLBEN_Pos) /*!< PWM_T::BRKCTL0_1: SYSLBEN Mask */ + +#define PWM_BRKCTL0_1_BRKAEVEN_Pos (16) /*!< PWM_T::BRKCTL0_1: BRKAEVEN Position */ +#define PWM_BRKCTL0_1_BRKAEVEN_Msk (0x3ul << PWM_BRKCTL0_1_BRKAEVEN_Pos) /*!< PWM_T::BRKCTL0_1: BRKAEVEN Mask */ + +#define PWM_BRKCTL0_1_BRKAODD_Pos (18) /*!< PWM_T::BRKCTL0_1: BRKAODD Position */ +#define PWM_BRKCTL0_1_BRKAODD_Msk (0x3ul << PWM_BRKCTL0_1_BRKAODD_Pos) /*!< PWM_T::BRKCTL0_1: BRKAODD Mask */ + +#define PWM_BRKCTL2_3_CPO0EBEN_Pos (0) /*!< PWM_T::BRKCTL2_3: CPO0EBEN Position */ +#define PWM_BRKCTL2_3_CPO0EBEN_Msk (0x1ul << PWM_BRKCTL2_3_CPO0EBEN_Pos) /*!< PWM_T::BRKCTL2_3: CPO0EBEN Mask */ + +#define PWM_BRKCTL2_3_CPO1EBEN_Pos (1) /*!< PWM_T::BRKCTL2_3: CPO1EBEN Position */ +#define PWM_BRKCTL2_3_CPO1EBEN_Msk (0x1ul << PWM_BRKCTL2_3_CPO1EBEN_Pos) /*!< PWM_T::BRKCTL2_3: CPO1EBEN Mask */ + +#define PWM_BRKCTL2_3_BRKP0EEN_Pos (4) /*!< PWM_T::BRKCTL2_3: BRKP0EEN Position */ +#define PWM_BRKCTL2_3_BRKP0EEN_Msk (0x1ul << PWM_BRKCTL2_3_BRKP0EEN_Pos) /*!< PWM_T::BRKCTL2_3: BRKP0EEN Mask */ + +#define PWM_BRKCTL2_3_BRKP1EEN_Pos (5) /*!< PWM_T::BRKCTL2_3: BRKP1EEN Position */ +#define PWM_BRKCTL2_3_BRKP1EEN_Msk (0x1ul << PWM_BRKCTL2_3_BRKP1EEN_Pos) /*!< PWM_T::BRKCTL2_3: BRKP1EEN Mask */ + +#define PWM_BRKCTL2_3_SYSEBEN_Pos (7) /*!< PWM_T::BRKCTL2_3: SYSEBEN Position */ +#define PWM_BRKCTL2_3_SYSEBEN_Msk (0x1ul << PWM_BRKCTL2_3_SYSEBEN_Pos) /*!< PWM_T::BRKCTL2_3: SYSEBEN Mask */ + +#define PWM_BRKCTL2_3_CPO0LBEN_Pos (8) /*!< PWM_T::BRKCTL2_3: CPO0LBEN Position */ +#define PWM_BRKCTL2_3_CPO0LBEN_Msk (0x1ul << PWM_BRKCTL2_3_CPO0LBEN_Pos) /*!< PWM_T::BRKCTL2_3: CPO0LBEN Mask */ + +#define PWM_BRKCTL2_3_CPO1LBEN_Pos (9) /*!< PWM_T::BRKCTL2_3: CPO1LBEN Position */ +#define PWM_BRKCTL2_3_CPO1LBEN_Msk (0x1ul << PWM_BRKCTL2_3_CPO1LBEN_Pos) /*!< PWM_T::BRKCTL2_3: CPO1LBEN Mask */ + +#define PWM_BRKCTL2_3_BRKP0LEN_Pos (12) /*!< PWM_T::BRKCTL2_3: BRKP0LEN Position */ +#define PWM_BRKCTL2_3_BRKP0LEN_Msk (0x1ul << PWM_BRKCTL2_3_BRKP0LEN_Pos) /*!< PWM_T::BRKCTL2_3: BRKP0LEN Mask */ + +#define PWM_BRKCTL2_3_BRKP1LEN_Pos (13) /*!< PWM_T::BRKCTL2_3: BRKP1LEN Position */ +#define PWM_BRKCTL2_3_BRKP1LEN_Msk (0x1ul << PWM_BRKCTL2_3_BRKP1LEN_Pos) /*!< PWM_T::BRKCTL2_3: BRKP1LEN Mask */ + +#define PWM_BRKCTL2_3_SYSLBEN_Pos (15) /*!< PWM_T::BRKCTL2_3: SYSLBEN Position */ +#define PWM_BRKCTL2_3_SYSLBEN_Msk (0x1ul << PWM_BRKCTL2_3_SYSLBEN_Pos) /*!< PWM_T::BRKCTL2_3: SYSLBEN Mask */ + +#define PWM_BRKCTL2_3_BRKAEVEN_Pos (16) /*!< PWM_T::BRKCTL2_3: BRKAEVEN Position */ +#define PWM_BRKCTL2_3_BRKAEVEN_Msk (0x3ul << PWM_BRKCTL2_3_BRKAEVEN_Pos) /*!< PWM_T::BRKCTL2_3: BRKAEVEN Mask */ + +#define PWM_BRKCTL2_3_BRKAODD_Pos (18) /*!< PWM_T::BRKCTL2_3: BRKAODD Position */ +#define PWM_BRKCTL2_3_BRKAODD_Msk (0x3ul << PWM_BRKCTL2_3_BRKAODD_Pos) /*!< PWM_T::BRKCTL2_3: BRKAODD Mask */ + +#define PWM_BRKCTL4_5_CPO0EBEN_Pos (0) /*!< PWM_T::BRKCTL4_5: CPO0EBEN Position */ +#define PWM_BRKCTL4_5_CPO0EBEN_Msk (0x1ul << PWM_BRKCTL4_5_CPO0EBEN_Pos) /*!< PWM_T::BRKCTL4_5: CPO0EBEN Mask */ + +#define PWM_BRKCTL4_5_CPO1EBEN_Pos (1) /*!< PWM_T::BRKCTL4_5: CPO1EBEN Position */ +#define PWM_BRKCTL4_5_CPO1EBEN_Msk (0x1ul << PWM_BRKCTL4_5_CPO1EBEN_Pos) /*!< PWM_T::BRKCTL4_5: CPO1EBEN Mask */ + +#define PWM_BRKCTL4_5_BRKP0EEN_Pos (4) /*!< PWM_T::BRKCTL4_5: BRKP0EEN Position */ +#define PWM_BRKCTL4_5_BRKP0EEN_Msk (0x1ul << PWM_BRKCTL4_5_BRKP0EEN_Pos) /*!< PWM_T::BRKCTL4_5: BRKP0EEN Mask */ + +#define PWM_BRKCTL4_5_BRKP1EEN_Pos (5) /*!< PWM_T::BRKCTL4_5: BRKP1EEN Position */ +#define PWM_BRKCTL4_5_BRKP1EEN_Msk (0x1ul << PWM_BRKCTL4_5_BRKP1EEN_Pos) /*!< PWM_T::BRKCTL4_5: BRKP1EEN Mask */ + +#define PWM_BRKCTL4_5_SYSEBEN_Pos (7) /*!< PWM_T::BRKCTL4_5: SYSEBEN Position */ +#define PWM_BRKCTL4_5_SYSEBEN_Msk (0x1ul << PWM_BRKCTL4_5_SYSEBEN_Pos) /*!< PWM_T::BRKCTL4_5: SYSEBEN Mask */ + +#define PWM_BRKCTL4_5_CPO0LBEN_Pos (8) /*!< PWM_T::BRKCTL4_5: CPO0LBEN Position */ +#define PWM_BRKCTL4_5_CPO0LBEN_Msk (0x1ul << PWM_BRKCTL4_5_CPO0LBEN_Pos) /*!< PWM_T::BRKCTL4_5: CPO0LBEN Mask */ + +#define PWM_BRKCTL4_5_CPO1LBEN_Pos (9) /*!< PWM_T::BRKCTL4_5: CPO1LBEN Position */ +#define PWM_BRKCTL4_5_CPO1LBEN_Msk (0x1ul << PWM_BRKCTL4_5_CPO1LBEN_Pos) /*!< PWM_T::BRKCTL4_5: CPO1LBEN Mask */ + +#define PWM_BRKCTL4_5_BRKP0LEN_Pos (12) /*!< PWM_T::BRKCTL4_5: BRKP0LEN Position */ +#define PWM_BRKCTL4_5_BRKP0LEN_Msk (0x1ul << PWM_BRKCTL4_5_BRKP0LEN_Pos) /*!< PWM_T::BRKCTL4_5: BRKP0LEN Mask */ + +#define PWM_BRKCTL4_5_BRKP1LEN_Pos (13) /*!< PWM_T::BRKCTL4_5: BRKP1LEN Position */ +#define PWM_BRKCTL4_5_BRKP1LEN_Msk (0x1ul << PWM_BRKCTL4_5_BRKP1LEN_Pos) /*!< PWM_T::BRKCTL4_5: BRKP1LEN Mask */ + +#define PWM_BRKCTL4_5_SYSLBEN_Pos (15) /*!< PWM_T::BRKCTL4_5: SYSLBEN Position */ +#define PWM_BRKCTL4_5_SYSLBEN_Msk (0x1ul << PWM_BRKCTL4_5_SYSLBEN_Pos) /*!< PWM_T::BRKCTL4_5: SYSLBEN Mask */ + +#define PWM_BRKCTL4_5_BRKAEVEN_Pos (16) /*!< PWM_T::BRKCTL4_5: BRKAEVEN Position */ +#define PWM_BRKCTL4_5_BRKAEVEN_Msk (0x3ul << PWM_BRKCTL4_5_BRKAEVEN_Pos) /*!< PWM_T::BRKCTL4_5: BRKAEVEN Mask */ + +#define PWM_BRKCTL4_5_BRKAODD_Pos (18) /*!< PWM_T::BRKCTL4_5: BRKAODD Position */ +#define PWM_BRKCTL4_5_BRKAODD_Msk (0x3ul << PWM_BRKCTL4_5_BRKAODD_Pos) /*!< PWM_T::BRKCTL4_5: BRKAODD Mask */ + +#define PWM_POLCTL_PINVn_Pos (0) /*!< PWM_T::POLCTL: PINVn Position */ +#define PWM_POLCTL_PINVn_Msk (0x3ful << PWM_POLCTL_PINVn_Pos) /*!< PWM_T::POLCTL: PINVn Mask */ + +#define PWM_POLCTL_PINV0_Pos (0) /*!< PWM_T::POLCTL: PINV0 Position */ +#define PWM_POLCTL_PINV0_Msk (0x1ul << PWM_POLCTL_PINV0_Pos) /*!< PWM_T::POLCTL: PINV0 Mask */ + +#define PWM_POLCTL_PINV1_Pos (1) /*!< PWM_T::POLCTL: PINV1 Position */ +#define PWM_POLCTL_PINV1_Msk (0x1ul << PWM_POLCTL_PINV1_Pos) /*!< PWM_T::POLCTL: PINV1 Mask */ + +#define PWM_POLCTL_PINV2_Pos (2) /*!< PWM_T::POLCTL: PINV2 Position */ +#define PWM_POLCTL_PINV2_Msk (0x1ul << PWM_POLCTL_PINV2_Pos) /*!< PWM_T::POLCTL: PINV2 Mask */ + +#define PWM_POLCTL_PINV3_Pos (3) /*!< PWM_T::POLCTL: PINV3 Position */ +#define PWM_POLCTL_PINV3_Msk (0x1ul << PWM_POLCTL_PINV3_Pos) /*!< PWM_T::POLCTL: PINV3 Mask */ + +#define PWM_POLCTL_PINV4_Pos (4) /*!< PWM_T::POLCTL: PINV4 Position */ +#define PWM_POLCTL_PINV4_Msk (0x1ul << PWM_POLCTL_PINV4_Pos) /*!< PWM_T::POLCTL: PINV4 Mask */ + +#define PWM_POLCTL_PINV5_Pos (5) /*!< PWM_T::POLCTL: PINV5 Position */ +#define PWM_POLCTL_PINV5_Msk (0x1ul << PWM_POLCTL_PINV5_Pos) /*!< PWM_T::POLCTL: PINV5 Mask */ + +#define PWM_POEN_POENn_Pos (0) /*!< PWM_T::POEN: POENn Position */ +#define PWM_POEN_POENn_Msk (0x3ful << PWM_POEN_POENn_Pos) /*!< PWM_T::POEN: POENn Mask */ + +#define PWM_POEN_POEN0_Pos (0) /*!< PWM_T::POEN: POEN0 Position */ +#define PWM_POEN_POEN0_Msk (0x1ul << PWM_POEN_POEN0_Pos) /*!< PWM_T::POEN: POEN0 Mask */ + +#define PWM_POEN_POEN1_Pos (1) /*!< PWM_T::POEN: POEN1 Position */ +#define PWM_POEN_POEN1_Msk (0x1ul << PWM_POEN_POEN1_Pos) /*!< PWM_T::POEN: POEN1 Mask */ + +#define PWM_POEN_POEN2_Pos (2) /*!< PWM_T::POEN: POEN2 Position */ +#define PWM_POEN_POEN2_Msk (0x1ul << PWM_POEN_POEN2_Pos) /*!< PWM_T::POEN: POEN2 Mask */ + +#define PWM_POEN_POEN3_Pos (3) /*!< PWM_T::POEN: POEN3 Position */ +#define PWM_POEN_POEN3_Msk (0x1ul << PWM_POEN_POEN3_Pos) /*!< PWM_T::POEN: POEN3 Mask */ + +#define PWM_POEN_POEN4_Pos (4) /*!< PWM_T::POEN: POEN4 Position */ +#define PWM_POEN_POEN4_Msk (0x1ul << PWM_POEN_POEN4_Pos) /*!< PWM_T::POEN: POEN4 Mask */ + +#define PWM_POEN_POEN5_Pos (5) /*!< PWM_T::POEN: POEN5 Position */ +#define PWM_POEN_POEN5_Msk (0x1ul << PWM_POEN_POEN5_Pos) /*!< PWM_T::POEN: POEN5 Mask */ + +#define PWM_SWBRK_BRKETRGn_Pos (0) /*!< PWM_T::SWBRK: BRKETRGn Position */ +#define PWM_SWBRK_BRKETRGn_Msk (0x7ul << PWM_SWBRK_BRKETRGn_Pos) /*!< PWM_T::SWBRK: BRKETRGn Mask */ + +#define PWM_SWBRK_BRKETRG0_Pos (0) /*!< PWM_T::SWBRK: BRKETRG0 Position */ +#define PWM_SWBRK_BRKETRG0_Msk (0x1ul << PWM_SWBRK_BRKETRG0_Pos) /*!< PWM_T::SWBRK: BRKETRG0 Mask */ + +#define PWM_SWBRK_BRKETRG2_Pos (1) /*!< PWM_T::SWBRK: BRKETRG2 Position */ +#define PWM_SWBRK_BRKETRG2_Msk (0x1ul << PWM_SWBRK_BRKETRG2_Pos) /*!< PWM_T::SWBRK: BRKETRG2 Mask */ + +#define PWM_SWBRK_BRKETRG4_Pos (2) /*!< PWM_T::SWBRK: BRKETRG4 Position */ +#define PWM_SWBRK_BRKETRG4_Msk (0x1ul << PWM_SWBRK_BRKETRG4_Pos) /*!< PWM_T::SWBRK: BRKETRG4 Mask */ + +#define PWM_SWBRK_BRKLTRGn_Pos (8) /*!< PWM_T::SWBRK: BRKLTRGn Position */ +#define PWM_SWBRK_BRKLTRGn_Msk (0x7ul << PWM_SWBRK_BRKLTRGn_Pos) /*!< PWM_T::SWBRK: BRKLTRGn Mask */ + +#define PWM_SWBRK_BRKLTRG0_Pos (8) /*!< PWM_T::SWBRK: BRKLTRG0 Position */ +#define PWM_SWBRK_BRKLTRG0_Msk (0x1ul << PWM_SWBRK_BRKLTRG0_Pos) /*!< PWM_T::SWBRK: BRKLTRG0 Mask */ + +#define PWM_SWBRK_BRKLTRG2_Pos (9) /*!< PWM_T::SWBRK: BRKLTRG2 Position */ +#define PWM_SWBRK_BRKLTRG2_Msk (0x1ul << PWM_SWBRK_BRKLTRG2_Pos) /*!< PWM_T::SWBRK: BRKLTRG2 Mask */ + +#define PWM_SWBRK_BRKLTRG4_Pos (10) /*!< PWM_T::SWBRK: BRKLTRG4 Position */ +#define PWM_SWBRK_BRKLTRG4_Msk (0x1ul << PWM_SWBRK_BRKLTRG4_Pos) /*!< PWM_T::SWBRK: BRKLTRG4 Mask */ + +#define PWM_INTEN0_ZIENn_Pos (0) /*!< PWM_T::INTEN0: ZIENn Position */ +#define PWM_INTEN0_ZIENn_Msk (0x3ful << PWM_INTEN0_ZIENn_Pos) /*!< PWM_T::INTEN0: ZIENn Mask */ + +#define PWM_INTEN0_ZIEN0_Pos (0) /*!< PWM_T::INTEN0: ZIEN0 Position */ +#define PWM_INTEN0_ZIEN0_Msk (0x1ul << PWM_INTEN0_ZIEN0_Pos) /*!< PWM_T::INTEN0: ZIEN0 Mask */ + +#define PWM_INTEN0_ZIEN1_Pos (1) /*!< PWM_T::INTEN0: ZIEN1 Position */ +#define PWM_INTEN0_ZIEN1_Msk (0x1ul << PWM_INTEN0_ZIEN1_Pos) /*!< PWM_T::INTEN0: ZIEN1 Mask */ + +#define PWM_INTEN0_ZIEN2_Pos (2) /*!< PWM_T::INTEN0: ZIEN2 Position */ +#define PWM_INTEN0_ZIEN2_Msk (0x1ul << PWM_INTEN0_ZIEN2_Pos) /*!< PWM_T::INTEN0: ZIEN2 Mask */ + +#define PWM_INTEN0_ZIEN3_Pos (3) /*!< PWM_T::INTEN0: ZIEN3 Position */ +#define PWM_INTEN0_ZIEN3_Msk (0x1ul << PWM_INTEN0_ZIEN3_Pos) /*!< PWM_T::INTEN0: ZIEN3 Mask */ + +#define PWM_INTEN0_ZIEN4_Pos (4) /*!< PWM_T::INTEN0: ZIEN4 Position */ +#define PWM_INTEN0_ZIEN4_Msk (0x1ul << PWM_INTEN0_ZIEN4_Pos) /*!< PWM_T::INTEN0: ZIEN4 Mask */ + +#define PWM_INTEN0_ZIEN5_Pos (5) /*!< PWM_T::INTEN0: ZIEN5 Position */ +#define PWM_INTEN0_ZIEN5_Msk (0x1ul << PWM_INTEN0_ZIEN5_Pos) /*!< PWM_T::INTEN0: ZIEN5 Mask */ + +#define PWM_INTEN0_IFAIEN0_1_Pos (7) /*!< PWM_T::INTEN0: IFAIEN0_1 Position */ +#define PWM_INTEN0_IFAIEN0_1_Msk (0x1ul << PWM_INTEN0_IFAIEN0_1_Pos) /*!< PWM_T::INTEN0: IFAIEN0_1 Mask */ + +#define PWM_INTEN0_PIENn_Pos (8) /*!< PWM_T::INTEN0: PIENn Position */ +#define PWM_INTEN0_PIENn_Msk (0x3ful << PWM_INTEN0_PIENn_Pos) /*!< PWM_T::INTEN0: PIENn Mask */ + +#define PWM_INTEN0_PIEN0_Pos (8) /*!< PWM_T::INTEN0: PIEN0 Position */ +#define PWM_INTEN0_PIEN0_Msk (0x1ul << PWM_INTEN0_PIEN0_Pos) /*!< PWM_T::INTEN0: PIEN0 Mask */ + +#define PWM_INTEN0_PIEN1_Pos (9) /*!< PWM_T::INTEN0: PIEN1 Position */ +#define PWM_INTEN0_PIEN1_Msk (0x1ul << PWM_INTEN0_PIEN1_Pos) /*!< PWM_T::INTEN0: PIEN1 Mask */ + +#define PWM_INTEN0_PIEN2_Pos (10) /*!< PWM_T::INTEN0: PIEN2 Position */ +#define PWM_INTEN0_PIEN2_Msk (0x1ul << PWM_INTEN0_PIEN2_Pos) /*!< PWM_T::INTEN0: PIEN2 Mask */ + +#define PWM_INTEN0_PIEN3_Pos (11) /*!< PWM_T::INTEN0: PIEN3 Position */ +#define PWM_INTEN0_PIEN3_Msk (0x1ul << PWM_INTEN0_PIEN3_Pos) /*!< PWM_T::INTEN0: PIEN3 Mask */ + +#define PWM_INTEN0_PIEN4_Pos (12) /*!< PWM_T::INTEN0: PIEN4 Position */ +#define PWM_INTEN0_PIEN4_Msk (0x1ul << PWM_INTEN0_PIEN4_Pos) /*!< PWM_T::INTEN0: PIEN4 Mask */ + +#define PWM_INTEN0_PIEN5_Pos (13) /*!< PWM_T::INTEN0: PIEN5 Position */ +#define PWM_INTEN0_PIEN5_Msk (0x1ul << PWM_INTEN0_PIEN5_Pos) /*!< PWM_T::INTEN0: PIEN5 Mask */ + +#define PWM_INTEN0_IFAIEN2_3_Pos (15) /*!< PWM_T::INTEN0: IFAIEN2_3 Position */ +#define PWM_INTEN0_IFAIEN2_3_Msk (0x1ul << PWM_INTEN0_IFAIEN2_3_Pos) /*!< PWM_T::INTEN0: IFAIEN2_3 Mask */ + +#define PWM_INTEN0_CMPUIENn_Pos (16) /*!< PWM_T::INTEN0: CMPUIENn Position */ +#define PWM_INTEN0_CMPUIENn_Msk (0x3ful << PWM_INTEN0_CMPUIENn_Pos) /*!< PWM_T::INTEN0: CMPUIENn Mask */ + +#define PWM_INTEN0_CMPUIEN0_Pos (16) /*!< PWM_T::INTEN0: CMPUIEN0 Position */ +#define PWM_INTEN0_CMPUIEN0_Msk (0x1ul << PWM_INTEN0_CMPUIEN0_Pos) /*!< PWM_T::INTEN0: CMPUIEN0 Mask */ + +#define PWM_INTEN0_CMPUIEN1_Pos (17) /*!< PWM_T::INTEN0: CMPUIEN1 Position */ +#define PWM_INTEN0_CMPUIEN1_Msk (0x1ul << PWM_INTEN0_CMPUIEN1_Pos) /*!< PWM_T::INTEN0: CMPUIEN1 Mask */ + +#define PWM_INTEN0_CMPUIEN2_Pos (18) /*!< PWM_T::INTEN0: CMPUIEN2 Position */ +#define PWM_INTEN0_CMPUIEN2_Msk (0x1ul << PWM_INTEN0_CMPUIEN2_Pos) /*!< PWM_T::INTEN0: CMPUIEN2 Mask */ + +#define PWM_INTEN0_CMPUIEN3_Pos (19) /*!< PWM_T::INTEN0: CMPUIEN3 Position */ +#define PWM_INTEN0_CMPUIEN3_Msk (0x1ul << PWM_INTEN0_CMPUIEN3_Pos) /*!< PWM_T::INTEN0: CMPUIEN3 Mask */ + +#define PWM_INTEN0_CMPUIEN4_Pos (20) /*!< PWM_T::INTEN0: CMPUIEN4 Position */ +#define PWM_INTEN0_CMPUIEN4_Msk (0x1ul << PWM_INTEN0_CMPUIEN4_Pos) /*!< PWM_T::INTEN0: CMPUIEN4 Mask */ + +#define PWM_INTEN0_CMPUIEN5_Pos (21) /*!< PWM_T::INTEN0: CMPUIEN5 Position */ +#define PWM_INTEN0_CMPUIEN5_Msk (0x1ul << PWM_INTEN0_CMPUIEN5_Pos) /*!< PWM_T::INTEN0: CMPUIEN5 Mask */ + +#define PWM_INTEN0_IFAIEN4_5_Pos (23) /*!< PWM_T::INTEN0: IFAIEN4_5 Position */ +#define PWM_INTEN0_IFAIEN4_5_Msk (0x1ul << PWM_INTEN0_IFAIEN4_5_Pos) /*!< PWM_T::INTEN0: IFAIEN4_5 Mask */ + +#define PWM_INTEN0_CMPDIENn_Pos (24) /*!< PWM_T::INTEN0: CMPDIENn Position */ +#define PWM_INTEN0_CMPDIENn_Msk (0x3ful << PWM_INTEN0_CMPDIENn_Pos) /*!< PWM_T::INTEN0: CMPDIENn Mask */ + +#define PWM_INTEN0_CMPDIEN0_Pos (24) /*!< PWM_T::INTEN0: CMPDIEN0 Position */ +#define PWM_INTEN0_CMPDIEN0_Msk (0x1ul << PWM_INTEN0_CMPDIEN0_Pos) /*!< PWM_T::INTEN0: CMPDIEN0 Mask */ + +#define PWM_INTEN0_CMPDIEN1_Pos (25) /*!< PWM_T::INTEN0: CMPDIEN1 Position */ +#define PWM_INTEN0_CMPDIEN1_Msk (0x1ul << PWM_INTEN0_CMPDIEN1_Pos) /*!< PWM_T::INTEN0: CMPDIEN1 Mask */ + +#define PWM_INTEN0_CMPDIEN2_Pos (26) /*!< PWM_T::INTEN0: CMPDIEN2 Position */ +#define PWM_INTEN0_CMPDIEN2_Msk (0x1ul << PWM_INTEN0_CMPDIEN2_Pos) /*!< PWM_T::INTEN0: CMPDIEN2 Mask */ + +#define PWM_INTEN0_CMPDIEN3_Pos (27) /*!< PWM_T::INTEN0: CMPDIEN3 Position */ +#define PWM_INTEN0_CMPDIEN3_Msk (0x1ul << PWM_INTEN0_CMPDIEN3_Pos) /*!< PWM_T::INTEN0: CMPDIEN3 Mask */ + +#define PWM_INTEN0_CMPDIEN4_Pos (28) /*!< PWM_T::INTEN0: CMPDIEN4 Position */ +#define PWM_INTEN0_CMPDIEN4_Msk (0x1ul << PWM_INTEN0_CMPDIEN4_Pos) /*!< PWM_T::INTEN0: CMPDIEN4 Mask */ + +#define PWM_INTEN0_CMPDIEN5_Pos (29) /*!< PWM_T::INTEN0: CMPDIEN5 Position */ +#define PWM_INTEN0_CMPDIEN5_Msk (0x1ul << PWM_INTEN0_CMPDIEN5_Pos) /*!< PWM_T::INTEN0: CMPDIEN5 Mask */ + +#define PWM_INTEN1_BRKEIEN0_1_Pos (0) /*!< PWM_T::INTEN1: BRKEIEN0_1 Position */ +#define PWM_INTEN1_BRKEIEN0_1_Msk (0x1ul << PWM_INTEN1_BRKEIEN0_1_Pos) /*!< PWM_T::INTEN1: BRKEIEN0_1 Mask */ + +#define PWM_INTEN1_BRKEIEN2_3_Pos (1) /*!< PWM_T::INTEN1: BRKEIEN2_3 Position */ +#define PWM_INTEN1_BRKEIEN2_3_Msk (0x1ul << PWM_INTEN1_BRKEIEN2_3_Pos) /*!< PWM_T::INTEN1: BRKEIEN2_3 Mask */ + +#define PWM_INTEN1_BRKEIEN4_5_Pos (2) /*!< PWM_T::INTEN1: BRKEIEN4_5 Position */ +#define PWM_INTEN1_BRKEIEN4_5_Msk (0x1ul << PWM_INTEN1_BRKEIEN4_5_Pos) /*!< PWM_T::INTEN1: BRKEIEN4_5 Mask */ + +#define PWM_INTEN1_BRKLIEN0_1_Pos (8) /*!< PWM_T::INTEN1: BRKLIEN0_1 Position */ +#define PWM_INTEN1_BRKLIEN0_1_Msk (0x1ul << PWM_INTEN1_BRKLIEN0_1_Pos) /*!< PWM_T::INTEN1: BRKLIEN0_1 Mask */ + +#define PWM_INTEN1_BRKLIEN2_3_Pos (9) /*!< PWM_T::INTEN1: BRKLIEN2_3 Position */ +#define PWM_INTEN1_BRKLIEN2_3_Msk (0x1ul << PWM_INTEN1_BRKLIEN2_3_Pos) /*!< PWM_T::INTEN1: BRKLIEN2_3 Mask */ + +#define PWM_INTEN1_BRKLIEN4_5_Pos (10) /*!< PWM_T::INTEN1: BRKLIEN4_5 Position */ +#define PWM_INTEN1_BRKLIEN4_5_Msk (0x1ul << PWM_INTEN1_BRKLIEN4_5_Pos) /*!< PWM_T::INTEN1: BRKLIEN4_5 Mask */ + +#define PWM_INTSTS0_ZIFn_Pos (0) /*!< PWM_T::INTSTS0: ZIFn Position */ +#define PWM_INTSTS0_ZIFn_Msk (0x3ful << PWM_INTSTS0_ZIFn_Pos) /*!< PWM_T::INTSTS0: ZIFn Mask */ + +#define PWM_INTSTS0_ZIF0_Pos (0) /*!< PWM_T::INTSTS0: ZIF0 Position */ +#define PWM_INTSTS0_ZIF0_Msk (0x1ul << PWM_INTSTS0_ZIF0_Pos) /*!< PWM_T::INTSTS0: ZIF0 Mask */ + +#define PWM_INTSTS0_ZIF1_Pos (1) /*!< PWM_T::INTSTS0: ZIF1 Position */ +#define PWM_INTSTS0_ZIF1_Msk (0x1ul << PWM_INTSTS0_ZIF1_Pos) /*!< PWM_T::INTSTS0: ZIF1 Mask */ + +#define PWM_INTSTS0_ZIF2_Pos (2) /*!< PWM_T::INTSTS0: ZIF2 Position */ +#define PWM_INTSTS0_ZIF2_Msk (0x1ul << PWM_INTSTS0_ZIF2_Pos) /*!< PWM_T::INTSTS0: ZIF2 Mask */ + +#define PWM_INTSTS0_ZIF3_Pos (3) /*!< PWM_T::INTSTS0: ZIF3 Position */ +#define PWM_INTSTS0_ZIF3_Msk (0x1ul << PWM_INTSTS0_ZIF3_Pos) /*!< PWM_T::INTSTS0: ZIF3 Mask */ + +#define PWM_INTSTS0_ZIF4_Pos (4) /*!< PWM_T::INTSTS0: ZIF4 Position */ +#define PWM_INTSTS0_ZIF4_Msk (0x1ul << PWM_INTSTS0_ZIF4_Pos) /*!< PWM_T::INTSTS0: ZIF4 Mask */ + +#define PWM_INTSTS0_ZIF5_Pos (5) /*!< PWM_T::INTSTS0: ZIF5 Position */ +#define PWM_INTSTS0_ZIF5_Msk (0x1ul << PWM_INTSTS0_ZIF5_Pos) /*!< PWM_T::INTSTS0: ZIF5 Mask */ + +#define PWM_INTSTS0_IFAIF0_1_Pos (7) /*!< PWM_T::INTSTS0: IFAIF0_1 Position */ +#define PWM_INTSTS0_IFAIF0_1_Msk (0x1ul << PWM_INTSTS0_IFAIF0_1_Pos) /*!< PWM_T::INTSTS0: IFAIF0_1 Mask */ + +#define PWM_INTSTS0_PIFn_Pos (8) /*!< PWM_T::INTSTS0: PIFn Position */ +#define PWM_INTSTS0_PIFn_Msk (0x3ful << PWM_INTSTS0_PIFn_Pos) /*!< PWM_T::INTSTS0: PIFn Mask */ + +#define PWM_INTSTS0_PIF0_Pos (8) /*!< PWM_T::INTSTS0: PIF0 Position */ +#define PWM_INTSTS0_PIF0_Msk (0x1ul << PWM_INTSTS0_PIF0_Pos) /*!< PWM_T::INTSTS0: PIF0 Mask */ + +#define PWM_INTSTS0_PIF1_Pos (9) /*!< PWM_T::INTSTS0: PIF1 Position */ +#define PWM_INTSTS0_PIF1_Msk (0x1ul << PWM_INTSTS0_PIF1_Pos) /*!< PWM_T::INTSTS0: PIF1 Mask */ + +#define PWM_INTSTS0_PIF2_Pos (10) /*!< PWM_T::INTSTS0: PIF2 Position */ +#define PWM_INTSTS0_PIF2_Msk (0x1ul << PWM_INTSTS0_PIF2_Pos) /*!< PWM_T::INTSTS0: PIF2 Mask */ + +#define PWM_INTSTS0_PIF3_Pos (11) /*!< PWM_T::INTSTS0: PIF3 Position */ +#define PWM_INTSTS0_PIF3_Msk (0x1ul << PWM_INTSTS0_PIF3_Pos) /*!< PWM_T::INTSTS0: PIF3 Mask */ + +#define PWM_INTSTS0_PIF4_Pos (12) /*!< PWM_T::INTSTS0: PIF4 Position */ +#define PWM_INTSTS0_PIF4_Msk (0x1ul << PWM_INTSTS0_PIF4_Pos) /*!< PWM_T::INTSTS0: PIF4 Mask */ + +#define PWM_INTSTS0_PIF5_Pos (13) /*!< PWM_T::INTSTS0: PIF5 Position */ +#define PWM_INTSTS0_PIF5_Msk (0x1ul << PWM_INTSTS0_PIF5_Pos) /*!< PWM_T::INTSTS0: PIF5 Mask */ + +#define PWM_INTSTS0_IFAIF2_3_Pos (15) /*!< PWM_T::INTSTS0: IFAIF2_3 Position */ +#define PWM_INTSTS0_IFAIF2_3_Msk (0x1ul << PWM_INTSTS0_IFAIF2_3_Pos) /*!< PWM_T::INTSTS0: IFAIF2_3 Mask */ + +#define PWM_INTSTS0_CMPUIFn_Pos (16) /*!< PWM_T::INTSTS0: CMPUIFn Position */ +#define PWM_INTSTS0_CMPUIFn_Msk (0x3ful << PWM_INTSTS0_CMPUIFn_Pos) /*!< PWM_T::INTSTS0: CMPUIFn Mask */ + +#define PWM_INTSTS0_CMPUIF0_Pos (16) /*!< PWM_T::INTSTS0: CMPUIF0 Position */ +#define PWM_INTSTS0_CMPUIF0_Msk (0x1ul << PWM_INTSTS0_CMPUIF0_Pos) /*!< PWM_T::INTSTS0: CMPUIF0 Mask */ + +#define PWM_INTSTS0_CMPUIF1_Pos (17) /*!< PWM_T::INTSTS0: CMPUIF1 Position */ +#define PWM_INTSTS0_CMPUIF1_Msk (0x1ul << PWM_INTSTS0_CMPUIF1_Pos) /*!< PWM_T::INTSTS0: CMPUIF1 Mask */ + +#define PWM_INTSTS0_CMPUIF2_Pos (18) /*!< PWM_T::INTSTS0: CMPUIF2 Position */ +#define PWM_INTSTS0_CMPUIF2_Msk (0x1ul << PWM_INTSTS0_CMPUIF2_Pos) /*!< PWM_T::INTSTS0: CMPUIF2 Mask */ + +#define PWM_INTSTS0_CMPUIF3_Pos (19) /*!< PWM_T::INTSTS0: CMPUIF3 Position */ +#define PWM_INTSTS0_CMPUIF3_Msk (0x1ul << PWM_INTSTS0_CMPUIF3_Pos) /*!< PWM_T::INTSTS0: CMPUIF3 Mask */ + +#define PWM_INTSTS0_CMPUIF4_Pos (20) /*!< PWM_T::INTSTS0: CMPUIF4 Position */ +#define PWM_INTSTS0_CMPUIF4_Msk (0x1ul << PWM_INTSTS0_CMPUIF4_Pos) /*!< PWM_T::INTSTS0: CMPUIF4 Mask */ + +#define PWM_INTSTS0_CMPUIF5_Pos (21) /*!< PWM_T::INTSTS0: CMPUIF5 Position */ +#define PWM_INTSTS0_CMPUIF5_Msk (0x1ul << PWM_INTSTS0_CMPUIF5_Pos) /*!< PWM_T::INTSTS0: CMPUIF5 Mask */ + +#define PWM_INTSTS0_IFAIF4_5_Pos (23) /*!< PWM_T::INTSTS0: IFAIF4_5 Position */ +#define PWM_INTSTS0_IFAIF4_5_Msk (0x1ul << PWM_INTSTS0_IFAIF4_5_Pos) /*!< PWM_T::INTSTS0: IFAIF4_5 Mask */ + +#define PWM_INTSTS0_CMPDIFn_Pos (24) /*!< PWM_T::INTSTS0: CMPDIFn Position */ +#define PWM_INTSTS0_CMPDIFn_Msk (0x3ful << PWM_INTSTS0_CMPDIFn_Pos) /*!< PWM_T::INTSTS0: CMPDIFn Mask */ + +#define PWM_INTSTS0_CMPDIF0_Pos (24) /*!< PWM_T::INTSTS0: CMPDIF0 Position */ +#define PWM_INTSTS0_CMPDIF0_Msk (0x1ul << PWM_INTSTS0_CMPDIF0_Pos) /*!< PWM_T::INTSTS0: CMPDIF0 Mask */ + +#define PWM_INTSTS0_CMPDIF1_Pos (25) /*!< PWM_T::INTSTS0: CMPDIF1 Position */ +#define PWM_INTSTS0_CMPDIF1_Msk (0x1ul << PWM_INTSTS0_CMPDIF1_Pos) /*!< PWM_T::INTSTS0: CMPDIF1 Mask */ + +#define PWM_INTSTS0_CMPDIF2_Pos (26) /*!< PWM_T::INTSTS0: CMPDIF2 Position */ +#define PWM_INTSTS0_CMPDIF2_Msk (0x1ul << PWM_INTSTS0_CMPDIF2_Pos) /*!< PWM_T::INTSTS0: CMPDIF2 Mask */ + +#define PWM_INTSTS0_CMPDIF3_Pos (27) /*!< PWM_T::INTSTS0: CMPDIF3 Position */ +#define PWM_INTSTS0_CMPDIF3_Msk (0x1ul << PWM_INTSTS0_CMPDIF3_Pos) /*!< PWM_T::INTSTS0: CMPDIF3 Mask */ + +#define PWM_INTSTS0_CMPDIF4_Pos (28) /*!< PWM_T::INTSTS0: CMPDIF4 Position */ +#define PWM_INTSTS0_CMPDIF4_Msk (0x1ul << PWM_INTSTS0_CMPDIF4_Pos) /*!< PWM_T::INTSTS0: CMPDIF4 Mask */ + +#define PWM_INTSTS0_CMPDIF5_Pos (29) /*!< PWM_T::INTSTS0: CMPDIF5 Position */ +#define PWM_INTSTS0_CMPDIF5_Msk (0x1ul << PWM_INTSTS0_CMPDIF5_Pos) /*!< PWM_T::INTSTS0: CMPDIF5 Mask */ + +#define PWM_INTSTS1_BRKEIFn_Pos (0) /*!< PWM_T::INTSTS1: BRKEIFn Position */ +#define PWM_INTSTS1_BRKEIFn_Msk (0x3ful << PWM_INTSTS1_BRKEIFn_Pos) /*!< PWM_T::INTSTS1: BRKEIFn Mask */ + +#define PWM_INTSTS1_BRKEIF0_Pos (0) /*!< PWM_T::INTSTS1: BRKEIF0 Position */ +#define PWM_INTSTS1_BRKEIF0_Msk (0x1ul << PWM_INTSTS1_BRKEIF0_Pos) /*!< PWM_T::INTSTS1: BRKEIF0 Mask */ + +#define PWM_INTSTS1_BRKEIF1_Pos (1) /*!< PWM_T::INTSTS1: BRKEIF1 Position */ +#define PWM_INTSTS1_BRKEIF1_Msk (0x1ul << PWM_INTSTS1_BRKEIF1_Pos) /*!< PWM_T::INTSTS1: BRKEIF1 Mask */ + +#define PWM_INTSTS1_BRKEIF2_Pos (2) /*!< PWM_T::INTSTS1: BRKEIF2 Position */ +#define PWM_INTSTS1_BRKEIF2_Msk (0x1ul << PWM_INTSTS1_BRKEIF2_Pos) /*!< PWM_T::INTSTS1: BRKEIF2 Mask */ + +#define PWM_INTSTS1_BRKEIF3_Pos (3) /*!< PWM_T::INTSTS1: BRKEIF3 Position */ +#define PWM_INTSTS1_BRKEIF3_Msk (0x1ul << PWM_INTSTS1_BRKEIF3_Pos) /*!< PWM_T::INTSTS1: BRKEIF3 Mask */ + +#define PWM_INTSTS1_BRKEIF4_Pos (4) /*!< PWM_T::INTSTS1: BRKEIF4 Position */ +#define PWM_INTSTS1_BRKEIF4_Msk (0x1ul << PWM_INTSTS1_BRKEIF4_Pos) /*!< PWM_T::INTSTS1: BRKEIF4 Mask */ + +#define PWM_INTSTS1_BRKEIF5_Pos (5) /*!< PWM_T::INTSTS1: BRKEIF5 Position */ +#define PWM_INTSTS1_BRKEIF5_Msk (0x1ul << PWM_INTSTS1_BRKEIF5_Pos) /*!< PWM_T::INTSTS1: BRKEIF5 Mask */ + +#define PWM_INTSTS1_BRKLIFn_Pos (8) /*!< PWM_T::INTSTS1: BRKLIFn Position */ +#define PWM_INTSTS1_BRKLIFn_Msk (0x3ful << PWM_INTSTS1_BRKLIFn_Pos) /*!< PWM_T::INTSTS1: BRKLIFn Mask */ + +#define PWM_INTSTS1_BRKLIF0_Pos (8) /*!< PWM_T::INTSTS1: BRKLIF0 Position */ +#define PWM_INTSTS1_BRKLIF0_Msk (0x1ul << PWM_INTSTS1_BRKLIF0_Pos) /*!< PWM_T::INTSTS1: BRKLIF0 Mask */ + +#define PWM_INTSTS1_BRKLIF1_Pos (9) /*!< PWM_T::INTSTS1: BRKLIF1 Position */ +#define PWM_INTSTS1_BRKLIF1_Msk (0x1ul << PWM_INTSTS1_BRKLIF1_Pos) /*!< PWM_T::INTSTS1: BRKLIF1 Mask */ + +#define PWM_INTSTS1_BRKLIF2_Pos (10) /*!< PWM_T::INTSTS1: BRKLIF2 Position */ +#define PWM_INTSTS1_BRKLIF2_Msk (0x1ul << PWM_INTSTS1_BRKLIF2_Pos) /*!< PWM_T::INTSTS1: BRKLIF2 Mask */ + +#define PWM_INTSTS1_BRKLIF3_Pos (11) /*!< PWM_T::INTSTS1: BRKLIF3 Position */ +#define PWM_INTSTS1_BRKLIF3_Msk (0x1ul << PWM_INTSTS1_BRKLIF3_Pos) /*!< PWM_T::INTSTS1: BRKLIF3 Mask */ + +#define PWM_INTSTS1_BRKLIF4_Pos (12) /*!< PWM_T::INTSTS1: BRKLIF4 Position */ +#define PWM_INTSTS1_BRKLIF4_Msk (0x1ul << PWM_INTSTS1_BRKLIF4_Pos) /*!< PWM_T::INTSTS1: BRKLIF4 Mask */ + +#define PWM_INTSTS1_BRKLIF5_Pos (13) /*!< PWM_T::INTSTS1: BRKLIF5 Position */ +#define PWM_INTSTS1_BRKLIF5_Msk (0x1ul << PWM_INTSTS1_BRKLIF5_Pos) /*!< PWM_T::INTSTS1: BRKLIF5 Mask */ + +#define PWM_INTSTS1_BRKESTS0_Pos (16) /*!< PWM_T::INTSTS1: BRKESTS0 Position */ +#define PWM_INTSTS1_BRKESTS0_Msk (0x1ul << PWM_INTSTS1_BRKESTS0_Pos) /*!< PWM_T::INTSTS1: BRKESTS0 Mask */ + +#define PWM_INTSTS1_BRKESTS1_Pos (17) /*!< PWM_T::INTSTS1: BRKESTS1 Position */ +#define PWM_INTSTS1_BRKESTS1_Msk (0x1ul << PWM_INTSTS1_BRKESTS1_Pos) /*!< PWM_T::INTSTS1: BRKESTS1 Mask */ + +#define PWM_INTSTS1_BRKESTS2_Pos (18) /*!< PWM_T::INTSTS1: BRKESTS2 Position */ +#define PWM_INTSTS1_BRKESTS2_Msk (0x1ul << PWM_INTSTS1_BRKESTS2_Pos) /*!< PWM_T::INTSTS1: BRKESTS2 Mask */ + +#define PWM_INTSTS1_BRKESTS3_Pos (19) /*!< PWM_T::INTSTS1: BRKESTS3 Position */ +#define PWM_INTSTS1_BRKESTS3_Msk (0x1ul << PWM_INTSTS1_BRKESTS3_Pos) /*!< PWM_T::INTSTS1: BRKESTS3 Mask */ + +#define PWM_INTSTS1_BRKESTS4_Pos (20) /*!< PWM_T::INTSTS1: BRKESTS4 Position */ +#define PWM_INTSTS1_BRKESTS4_Msk (0x1ul << PWM_INTSTS1_BRKESTS4_Pos) /*!< PWM_T::INTSTS1: BRKESTS4 Mask */ + +#define PWM_INTSTS1_BRKESTS5_Pos (21) /*!< PWM_T::INTSTS1: BRKESTS5 Position */ +#define PWM_INTSTS1_BRKESTS5_Msk (0x1ul << PWM_INTSTS1_BRKESTS5_Pos) /*!< PWM_T::INTSTS1: BRKESTS5 Mask */ + +#define PWM_INTSTS1_BRKLSTS0_Pos (24) /*!< PWM_T::INTSTS1: BRKLSTS0 Position */ +#define PWM_INTSTS1_BRKLSTS0_Msk (0x1ul << PWM_INTSTS1_BRKLSTS0_Pos) /*!< PWM_T::INTSTS1: BRKLSTS0 Mask */ + +#define PWM_INTSTS1_BRKLSTS1_Pos (25) /*!< PWM_T::INTSTS1: BRKLSTS1 Position */ +#define PWM_INTSTS1_BRKLSTS1_Msk (0x1ul << PWM_INTSTS1_BRKLSTS1_Pos) /*!< PWM_T::INTSTS1: BRKLSTS1 Mask */ + +#define PWM_INTSTS1_BRKLSTS2_Pos (26) /*!< PWM_T::INTSTS1: BRKLSTS2 Position */ +#define PWM_INTSTS1_BRKLSTS2_Msk (0x1ul << PWM_INTSTS1_BRKLSTS2_Pos) /*!< PWM_T::INTSTS1: BRKLSTS2 Mask */ + +#define PWM_INTSTS1_BRKLSTS3_Pos (27) /*!< PWM_T::INTSTS1: BRKLSTS3 Position */ +#define PWM_INTSTS1_BRKLSTS3_Msk (0x1ul << PWM_INTSTS1_BRKLSTS3_Pos) /*!< PWM_T::INTSTS1: BRKLSTS3 Mask */ + +#define PWM_INTSTS1_BRKLSTS4_Pos (28) /*!< PWM_T::INTSTS1: BRKLSTS4 Position */ +#define PWM_INTSTS1_BRKLSTS4_Msk (0x1ul << PWM_INTSTS1_BRKLSTS4_Pos) /*!< PWM_T::INTSTS1: BRKLSTS4 Mask */ + +#define PWM_INTSTS1_BRKLSTS5_Pos (29) /*!< PWM_T::INTSTS1: BRKLSTS5 Position */ +#define PWM_INTSTS1_BRKLSTS5_Msk (0x1ul << PWM_INTSTS1_BRKLSTS5_Pos) /*!< PWM_T::INTSTS1: BRKLSTS5 Mask */ + +#define PWM_IFA_IFCNT0_1_Pos (0) /*!< PWM_T::IFA: IFCNT0_1 Position */ +#define PWM_IFA_IFCNT0_1_Msk (0xful << PWM_IFA_IFCNT0_1_Pos) /*!< PWM_T::IFA: IFCNT0_1 Mask */ + +#define PWM_IFA_IFSEL0_1_Pos (4) /*!< PWM_T::IFA: IFSEL0_1 Position */ +#define PWM_IFA_IFSEL0_1_Msk (0x7ul << PWM_IFA_IFSEL0_1_Pos) /*!< PWM_T::IFA: IFSEL0_1 Mask */ + +#define PWM_IFA_IFAEN0_1_Pos (7) /*!< PWM_T::IFA: IFAEN0_1 Position */ +#define PWM_IFA_IFAEN0_1_Msk (0x1ul << PWM_IFA_IFAEN0_1_Pos) /*!< PWM_T::IFA: IFAEN0_1 Mask */ + +#define PWM_IFA_IFCNT2_3_Pos (8) /*!< PWM_T::IFA: IFCNT2_3 Position */ +#define PWM_IFA_IFCNT2_3_Msk (0xful << PWM_IFA_IFCNT2_3_Pos) /*!< PWM_T::IFA: IFCNT2_3 Mask */ + +#define PWM_IFA_IFSEL2_3_Pos (12) /*!< PWM_T::IFA: IFSEL2_3 Position */ +#define PWM_IFA_IFSEL2_3_Msk (0x7ul << PWM_IFA_IFSEL2_3_Pos) /*!< PWM_T::IFA: IFSEL2_3 Mask */ + +#define PWM_IFA_IFAEN2_3_Pos (15) /*!< PWM_T::IFA: IFAEN2_3 Position */ +#define PWM_IFA_IFAEN2_3_Msk (0x1ul << PWM_IFA_IFAEN2_3_Pos) /*!< PWM_T::IFA: IFAEN2_3 Mask */ + +#define PWM_IFA_IFCNT4_5_Pos (16) /*!< PWM_T::IFA: IFCNT4_5 Position */ +#define PWM_IFA_IFCNT4_5_Msk (0xful << PWM_IFA_IFCNT4_5_Pos) /*!< PWM_T::IFA: IFCNT4_5 Mask */ + +#define PWM_IFA_IFSEL4_5_Pos (20) /*!< PWM_T::IFA: IFSEL4_5 Position */ +#define PWM_IFA_IFSEL4_5_Msk (0x7ul << PWM_IFA_IFSEL4_5_Pos) /*!< PWM_T::IFA: IFSEL4_5 Mask */ + +#define PWM_IFA_IFAEN4_5_Pos (23) /*!< PWM_T::IFA: IFAEN4_5 Position */ +#define PWM_IFA_IFAEN4_5_Msk (0x1ul << PWM_IFA_IFAEN4_5_Pos) /*!< PWM_T::IFA: IFAEN4_5 Mask */ + +#define PWM_DACTRGEN_ZTEn_Pos (0) /*!< PWM_T::DACTRGEN: ZTEn Position */ +#define PWM_DACTRGEN_ZTEn_Msk (0x3ful << PWM_DACTRGEN_ZTEn_Pos) /*!< PWM_T::DACTRGEN: ZTEn Mask */ + +#define PWM_DACTRGEN_ZTE0_Pos (0) /*!< PWM_T::DACTRGEN: ZTE0 Position */ +#define PWM_DACTRGEN_ZTE0_Msk (0x1ul << PWM_DACTRGEN_ZTE0_Pos) /*!< PWM_T::DACTRGEN: ZTE0 Mask */ + +#define PWM_DACTRGEN_ZTE1_Pos (1) /*!< PWM_T::DACTRGEN: ZTE1 Position */ +#define PWM_DACTRGEN_ZTE1_Msk (0x1ul << PWM_DACTRGEN_ZTE1_Pos) /*!< PWM_T::DACTRGEN: ZTE1 Mask */ + +#define PWM_DACTRGEN_ZTE2_Pos (2) /*!< PWM_T::DACTRGEN: ZTE2 Position */ +#define PWM_DACTRGEN_ZTE2_Msk (0x1ul << PWM_DACTRGEN_ZTE2_Pos) /*!< PWM_T::DACTRGEN: ZTE2 Mask */ + +#define PWM_DACTRGEN_ZTE3_Pos (3) /*!< PWM_T::DACTRGEN: ZTE3 Position */ +#define PWM_DACTRGEN_ZTE3_Msk (0x1ul << PWM_DACTRGEN_ZTE3_Pos) /*!< PWM_T::DACTRGEN: ZTE3 Mask */ + +#define PWM_DACTRGEN_ZTE4_Pos (4) /*!< PWM_T::DACTRGEN: ZTE4 Position */ +#define PWM_DACTRGEN_ZTE4_Msk (0x1ul << PWM_DACTRGEN_ZTE4_Pos) /*!< PWM_T::DACTRGEN: ZTE4 Mask */ + +#define PWM_DACTRGEN_ZTE5_Pos (5) /*!< PWM_T::DACTRGEN: ZTE5 Position */ +#define PWM_DACTRGEN_ZTE5_Msk (0x1ul << PWM_DACTRGEN_ZTE5_Pos) /*!< PWM_T::DACTRGEN: ZTE5 Mask */ + +#define PWM_DACTRGEN_PTEn_Pos (8) /*!< PWM_T::DACTRGEN: PTEn Position */ +#define PWM_DACTRGEN_PTEn_Msk (0x3ful << PWM_DACTRGEN_PTEn_Pos) /*!< PWM_T::DACTRGEN: PTEn Mask */ + +#define PWM_DACTRGEN_PTE0_Pos (8) /*!< PWM_T::DACTRGEN: PTE0 Position */ +#define PWM_DACTRGEN_PTE0_Msk (0x1ul << PWM_DACTRGEN_PTE0_Pos) /*!< PWM_T::DACTRGEN: PTE0 Mask */ + +#define PWM_DACTRGEN_PTE1_Pos (9) /*!< PWM_T::DACTRGEN: PTE1 Position */ +#define PWM_DACTRGEN_PTE1_Msk (0x1ul << PWM_DACTRGEN_PTE1_Pos) /*!< PWM_T::DACTRGEN: PTE1 Mask */ + +#define PWM_DACTRGEN_PTE2_Pos (10) /*!< PWM_T::DACTRGEN: PTE2 Position */ +#define PWM_DACTRGEN_PTE2_Msk (0x1ul << PWM_DACTRGEN_PTE2_Pos) /*!< PWM_T::DACTRGEN: PTE2 Mask */ + +#define PWM_DACTRGEN_PTE3_Pos (11) /*!< PWM_T::DACTRGEN: PTE3 Position */ +#define PWM_DACTRGEN_PTE3_Msk (0x1ul << PWM_DACTRGEN_PTE3_Pos) /*!< PWM_T::DACTRGEN: PTE3 Mask */ + +#define PWM_DACTRGEN_PTE4_Pos (12) /*!< PWM_T::DACTRGEN: PTE4 Position */ +#define PWM_DACTRGEN_PTE4_Msk (0x1ul << PWM_DACTRGEN_PTE4_Pos) /*!< PWM_T::DACTRGEN: PTE4 Mask */ + +#define PWM_DACTRGEN_PTE5_Pos (13) /*!< PWM_T::DACTRGEN: PTE5 Position */ +#define PWM_DACTRGEN_PTE5_Msk (0x1ul << PWM_DACTRGEN_PTE5_Pos) /*!< PWM_T::DACTRGEN: PTE5 Mask */ + +#define PWM_DACTRGEN_CUTRGEn_Pos (16) /*!< PWM_T::DACTRGEN: CUTRGEn Position */ +#define PWM_DACTRGEN_CUTRGEn_Msk (0x3ful << PWM_DACTRGEN_CUTRGEn_Pos) /*!< PWM_T::DACTRGEN: CUTRGEn Mask */ + +#define PWM_DACTRGEN_CUTRGE0_Pos (16) /*!< PWM_T::DACTRGEN: CUTRGE0 Position */ +#define PWM_DACTRGEN_CUTRGE0_Msk (0x1ul << PWM_DACTRGEN_CUTRGE0_Pos) /*!< PWM_T::DACTRGEN: CUTRGE0 Mask */ + +#define PWM_DACTRGEN_CUTRGE1_Pos (17) /*!< PWM_T::DACTRGEN: CUTRGE1 Position */ +#define PWM_DACTRGEN_CUTRGE1_Msk (0x1ul << PWM_DACTRGEN_CUTRGE1_Pos) /*!< PWM_T::DACTRGEN: CUTRGE1 Mask */ + +#define PWM_DACTRGEN_CUTRGE2_Pos (18) /*!< PWM_T::DACTRGEN: CUTRGE2 Position */ +#define PWM_DACTRGEN_CUTRGE2_Msk (0x1ul << PWM_DACTRGEN_CUTRGE2_Pos) /*!< PWM_T::DACTRGEN: CUTRGE2 Mask */ + +#define PWM_DACTRGEN_CUTRGE3_Pos (19) /*!< PWM_T::DACTRGEN: CUTRGE3 Position */ +#define PWM_DACTRGEN_CUTRGE3_Msk (0x1ul << PWM_DACTRGEN_CUTRGE3_Pos) /*!< PWM_T::DACTRGEN: CUTRGE3 Mask */ + +#define PWM_DACTRGEN_CUTRGE4_Pos (20) /*!< PWM_T::DACTRGEN: CUTRGE4 Position */ +#define PWM_DACTRGEN_CUTRGE4_Msk (0x1ul << PWM_DACTRGEN_CUTRGE4_Pos) /*!< PWM_T::DACTRGEN: CUTRGE4 Mask */ + +#define PWM_DACTRGEN_CUTRGE5_Pos (21) /*!< PWM_T::DACTRGEN: CUTRGE5 Position */ +#define PWM_DACTRGEN_CUTRGE5_Msk (0x1ul << PWM_DACTRGEN_CUTRGE5_Pos) /*!< PWM_T::DACTRGEN: CUTRGE5 Mask */ + +#define PWM_DACTRGEN_CDTRGEn_Pos (24) /*!< PWM_T::DACTRGEN: CDTRGEn Position */ +#define PWM_DACTRGEN_CDTRGEn_Msk (0x3ful << PWM_DACTRGEN_CDTRGEn_Pos) /*!< PWM_T::DACTRGEN: CDTRGEn Mask */ + +#define PWM_DACTRGEN_CDTRGE0_Pos (24) /*!< PWM_T::DACTRGEN: CDTRGE0 Position */ +#define PWM_DACTRGEN_CDTRGE0_Msk (0x1ul << PWM_DACTRGEN_CDTRGE0_Pos) /*!< PWM_T::DACTRGEN: CDTRGE0 Mask */ + +#define PWM_DACTRGEN_CDTRGE1_Pos (25) /*!< PWM_T::DACTRGEN: CDTRGE1 Position */ +#define PWM_DACTRGEN_CDTRGE1_Msk (0x1ul << PWM_DACTRGEN_CDTRGE1_Pos) /*!< PWM_T::DACTRGEN: CDTRGE1 Mask */ + +#define PWM_DACTRGEN_CDTRGE2_Pos (26) /*!< PWM_T::DACTRGEN: CDTRGE2 Position */ +#define PWM_DACTRGEN_CDTRGE2_Msk (0x1ul << PWM_DACTRGEN_CDTRGE2_Pos) /*!< PWM_T::DACTRGEN: CDTRGE2 Mask */ + +#define PWM_DACTRGEN_CDTRGE3_Pos (27) /*!< PWM_T::DACTRGEN: CDTRGE3 Position */ +#define PWM_DACTRGEN_CDTRGE3_Msk (0x1ul << PWM_DACTRGEN_CDTRGE3_Pos) /*!< PWM_T::DACTRGEN: CDTRGE3 Mask */ + +#define PWM_DACTRGEN_CDTRGE4_Pos (28) /*!< PWM_T::DACTRGEN: CDTRGE4 Position */ +#define PWM_DACTRGEN_CDTRGE4_Msk (0x1ul << PWM_DACTRGEN_CDTRGE4_Pos) /*!< PWM_T::DACTRGEN: CDTRGE4 Mask */ + +#define PWM_DACTRGEN_CDTRGE5_Pos (29) /*!< PWM_T::DACTRGEN: CDTRGE5 Position */ +#define PWM_DACTRGEN_CDTRGE5_Msk (0x1ul << PWM_DACTRGEN_CDTRGE5_Pos) /*!< PWM_T::DACTRGEN: CDTRGE5 Mask */ + +#define PWM_EADCTS0_TRGSEL0_Pos (0) /*!< PWM_T::EADCTS0: TRGSEL0 Position */ +#define PWM_EADCTS0_TRGSEL0_Msk (0xful << PWM_EADCTS0_TRGSEL0_Pos) /*!< PWM_T::EADCTS0: TRGSEL0 Mask */ + +#define PWM_EADCTS0_TRGEN0_Pos (7) /*!< PWM_T::EADCTS0: TRGEN0 Position */ +#define PWM_EADCTS0_TRGEN0_Msk (0x1ul << PWM_EADCTS0_TRGEN0_Pos) /*!< PWM_T::EADCTS0: TRGEN0 Mask */ + +#define PWM_EADCTS0_TRGSEL1_Pos (8) /*!< PWM_T::EADCTS0: TRGSEL1 Position */ +#define PWM_EADCTS0_TRGSEL1_Msk (0xful << PWM_EADCTS0_TRGSEL1_Pos) /*!< PWM_T::EADCTS0: TRGSEL1 Mask */ + +#define PWM_EADCTS0_TRGEN1_Pos (15) /*!< PWM_T::EADCTS0: TRGEN1 Position */ +#define PWM_EADCTS0_TRGEN1_Msk (0x1ul << PWM_EADCTS0_TRGEN1_Pos) /*!< PWM_T::EADCTS0: TRGEN1 Mask */ + +#define PWM_EADCTS0_TRGSEL2_Pos (16) /*!< PWM_T::EADCTS0: TRGSEL2 Position */ +#define PWM_EADCTS0_TRGSEL2_Msk (0xful << PWM_EADCTS0_TRGSEL2_Pos) /*!< PWM_T::EADCTS0: TRGSEL2 Mask */ + +#define PWM_EADCTS0_TRGEN2_Pos (23) /*!< PWM_T::EADCTS0: TRGEN2 Position */ +#define PWM_EADCTS0_TRGEN2_Msk (0x1ul << PWM_EADCTS0_TRGEN2_Pos) /*!< PWM_T::EADCTS0: TRGEN2 Mask */ + +#define PWM_EADCTS0_TRGSEL3_Pos (24) /*!< PWM_T::EADCTS0: TRGSEL3 Position */ +#define PWM_EADCTS0_TRGSEL3_Msk (0xful << PWM_EADCTS0_TRGSEL3_Pos) /*!< PWM_T::EADCTS0: TRGSEL3 Mask */ + +#define PWM_EADCTS0_TRGEN3_Pos (31) /*!< PWM_T::EADCTS0: TRGEN3 Position */ +#define PWM_EADCTS0_TRGEN3_Msk (0x1ul << PWM_EADCTS0_TRGEN3_Pos) /*!< PWM_T::EADCTS0: TRGEN3 Mask */ + +#define PWM_EADCTS1_TRGSEL4_Pos (0) /*!< PWM_T::EADCTS1: TRGSEL4 Position */ +#define PWM_EADCTS1_TRGSEL4_Msk (0xful << PWM_EADCTS1_TRGSEL4_Pos) /*!< PWM_T::EADCTS1: TRGSEL4 Mask */ + +#define PWM_EADCTS1_TRGEN4_Pos (7) /*!< PWM_T::EADCTS1: TRGEN4 Position */ +#define PWM_EADCTS1_TRGEN4_Msk (0x1ul << PWM_EADCTS1_TRGEN4_Pos) /*!< PWM_T::EADCTS1: TRGEN4 Mask */ + +#define PWM_EADCTS1_TRGSEL5_Pos (8) /*!< PWM_T::EADCTS1: TRGSEL5 Position */ +#define PWM_EADCTS1_TRGSEL5_Msk (0xful << PWM_EADCTS1_TRGSEL5_Pos) /*!< PWM_T::EADCTS1: TRGSEL5 Mask */ + +#define PWM_EADCTS1_TRGEN5_Pos (15) /*!< PWM_T::EADCTS1: TRGEN5 Position */ +#define PWM_EADCTS1_TRGEN5_Msk (0x1ul << PWM_EADCTS1_TRGEN5_Pos) /*!< PWM_T::EADCTS1: TRGEN5 Mask */ + +#define PWM_FTCMPDAT0_1_FTCMP_Pos (0) /*!< PWM_T::FTCMPDAT0_1: FTCMP Position */ +#define PWM_FTCMPDAT0_1_FTCMP_Msk (0xfffful << PWM_FTCMPDAT0_1_FTCMP_Pos) /*!< PWM_T::FTCMPDAT0_1: FTCMP Mask */ + +#define PWM_FTCMPDAT2_3_FTCMP_Pos (0) /*!< PWM_T::FTCMPDAT2_3: FTCMP Position */ +#define PWM_FTCMPDAT2_3_FTCMP_Msk (0xfffful << PWM_FTCMPDAT2_3_FTCMP_Pos) /*!< PWM_T::FTCMPDAT2_3: FTCMP Mask */ + +#define PWM_FTCMPDAT4_5_FTCMP_Pos (0) /*!< PWM_T::FTCMPDAT4_5: FTCMP Position */ +#define PWM_FTCMPDAT4_5_FTCMP_Msk (0xfffful << PWM_FTCMPDAT4_5_FTCMP_Pos) /*!< PWM_T::FTCMPDAT4_5: FTCMP Mask */ + +#define PWM_SSCTL_SSENn_Pos (0) /*!< PWM_T::SSCTL: SSENn Position */ +#define PWM_SSCTL_SSENn_Msk (0x3ful << PWM_SSCTL_SSENn_Pos) /*!< PWM_T::SSCTL: SSENn Mask */ + +#define PWM_SSCTL_SSEN0_Pos (0) /*!< PWM_T::SSCTL: SSEN0 Position */ +#define PWM_SSCTL_SSEN0_Msk (0x1ul << PWM_SSCTL_SSEN0_Pos) /*!< PWM_T::SSCTL: SSEN0 Mask */ + +#define PWM_SSCTL_SSEN1_Pos (1) /*!< PWM_T::SSCTL: SSEN1 Position */ +#define PWM_SSCTL_SSEN1_Msk (0x1ul << PWM_SSCTL_SSEN1_Pos) /*!< PWM_T::SSCTL: SSEN1 Mask */ + +#define PWM_SSCTL_SSEN2_Pos (2) /*!< PWM_T::SSCTL: SSEN2 Position */ +#define PWM_SSCTL_SSEN2_Msk (0x1ul << PWM_SSCTL_SSEN2_Pos) /*!< PWM_T::SSCTL: SSEN2 Mask */ + +#define PWM_SSCTL_SSEN3_Pos (3) /*!< PWM_T::SSCTL: SSEN3 Position */ +#define PWM_SSCTL_SSEN3_Msk (0x1ul << PWM_SSCTL_SSEN3_Pos) /*!< PWM_T::SSCTL: SSEN3 Mask */ + +#define PWM_SSCTL_SSEN4_Pos (4) /*!< PWM_T::SSCTL: SSEN4 Position */ +#define PWM_SSCTL_SSEN4_Msk (0x1ul << PWM_SSCTL_SSEN4_Pos) /*!< PWM_T::SSCTL: SSEN4 Mask */ + +#define PWM_SSCTL_SSEN5_Pos (5) /*!< PWM_T::SSCTL: SSEN5 Position */ +#define PWM_SSCTL_SSEN5_Msk (0x1ul << PWM_SSCTL_SSEN5_Pos) /*!< PWM_T::SSCTL: SSEN5 Mask */ + +#define PWM_SSTRG_CNTSEN_Pos (0) /*!< PWM_T::SSTRG: CNTSEN Position */ +#define PWM_SSTRG_CNTSEN_Msk (0x1ul << PWM_SSTRG_CNTSEN_Pos) /*!< PWM_T::SSTRG: CNTSEN Mask */ + +#define PWM_STATUS_CNTMAXFn_Pos (0) /*!< PWM_T::STATUS: CNTMAXFn Position */ +#define PWM_STATUS_CNTMAXFn_Msk (0x3ful << PWM_STATUS_CNTMAXFn_Pos) /*!< PWM_T::STATUS: CNTMAXFn Mask */ + +#define PWM_STATUS_CNTMAXF0_Pos (0) /*!< PWM_T::STATUS: CNTMAXF0 Position */ +#define PWM_STATUS_CNTMAXF0_Msk (0x1ul << PWM_STATUS_CNTMAXF0_Pos) /*!< PWM_T::STATUS: CNTMAXF0 Mask */ + +#define PWM_STATUS_CNTMAXF1_Pos (1) /*!< PWM_T::STATUS: CNTMAXF1 Position */ +#define PWM_STATUS_CNTMAXF1_Msk (0x1ul << PWM_STATUS_CNTMAXF1_Pos) /*!< PWM_T::STATUS: CNTMAXF1 Mask */ + +#define PWM_STATUS_CNTMAXF2_Pos (2) /*!< PWM_T::STATUS: CNTMAXF2 Position */ +#define PWM_STATUS_CNTMAXF2_Msk (0x1ul << PWM_STATUS_CNTMAXF2_Pos) /*!< PWM_T::STATUS: CNTMAXF2 Mask */ + +#define PWM_STATUS_CNTMAXF3_Pos (3) /*!< PWM_T::STATUS: CNTMAXF3 Position */ +#define PWM_STATUS_CNTMAXF3_Msk (0x1ul << PWM_STATUS_CNTMAXF3_Pos) /*!< PWM_T::STATUS: CNTMAXF3 Mask */ + +#define PWM_STATUS_CNTMAXF4_Pos (4) /*!< PWM_T::STATUS: CNTMAXF4 Position */ +#define PWM_STATUS_CNTMAXF4_Msk (0x1ul << PWM_STATUS_CNTMAXF4_Pos) /*!< PWM_T::STATUS: CNTMAXF4 Mask */ + +#define PWM_STATUS_CNTMAXF5_Pos (5) /*!< PWM_T::STATUS: CNTMAXF5 Position */ +#define PWM_STATUS_CNTMAXF5_Msk (0x1ul << PWM_STATUS_CNTMAXF5_Pos) /*!< PWM_T::STATUS: CNTMAXF5 Mask */ + +#define PWM_STATUS_SYNCINFn_Pos (8) /*!< PWM_T::STATUS: SYNCINFn Position */ +#define PWM_STATUS_SYNCINFn_Msk (0x7ul << PWM_STATUS_SYNCINFn_Pos) /*!< PWM_T::STATUS: SYNCINFn Mask */ + +#define PWM_STATUS_SYNCINF0_Pos (8) /*!< PWM_T::STATUS: SYNCINF0 Position */ +#define PWM_STATUS_SYNCINF0_Msk (0x1ul << PWM_STATUS_SYNCINF0_Pos) /*!< PWM_T::STATUS: SYNCINF0 Mask */ + +#define PWM_STATUS_SYNCINF2_Pos (9) /*!< PWM_T::STATUS: SYNCINF2 Position */ +#define PWM_STATUS_SYNCINF2_Msk (0x1ul << PWM_STATUS_SYNCINF2_Pos) /*!< PWM_T::STATUS: SYNCINF2 Mask */ + +#define PWM_STATUS_SYNCINF4_Pos (10) /*!< PWM_T::STATUS: SYNCINF4 Position */ +#define PWM_STATUS_SYNCINF4_Msk (0x1ul << PWM_STATUS_SYNCINF4_Pos) /*!< PWM_T::STATUS: SYNCINF4 Mask */ + +#define PWM_STATUS_ADCTRGFn_Pos (16) /*!< PWM_T::STATUS: ADCTRGFn Position */ +#define PWM_STATUS_ADCTRGFn_Msk (0x3ful << PWM_STATUS_ADCTRGFn_Pos) /*!< PWM_T::STATUS: ADCTRGFn Mask */ + +#define PWM_STATUS_ADCTRGF0_Pos (16) /*!< PWM_T::STATUS: ADCTRGF0 Position */ +#define PWM_STATUS_ADCTRGF0_Msk (0x1ul << PWM_STATUS_ADCTRGF0_Pos) /*!< PWM_T::STATUS: ADCTRGF0 Mask */ + +#define PWM_STATUS_ADCTRGF1_Pos (17) /*!< PWM_T::STATUS: ADCTRGF1 Position */ +#define PWM_STATUS_ADCTRGF1_Msk (0x1ul << PWM_STATUS_ADCTRGF1_Pos) /*!< PWM_T::STATUS: ADCTRGF1 Mask */ + +#define PWM_STATUS_ADCTRGF2_Pos (18) /*!< PWM_T::STATUS: ADCTRGF2 Position */ +#define PWM_STATUS_ADCTRGF2_Msk (0x1ul << PWM_STATUS_ADCTRGF2_Pos) /*!< PWM_T::STATUS: ADCTRGF2 Mask */ + +#define PWM_STATUS_ADCTRGF3_Pos (19) /*!< PWM_T::STATUS: ADCTRGF3 Position */ +#define PWM_STATUS_ADCTRGF3_Msk (0x1ul << PWM_STATUS_ADCTRGF3_Pos) /*!< PWM_T::STATUS: ADCTRGF3 Mask */ + +#define PWM_STATUS_ADCTRGF4_Pos (20) /*!< PWM_T::STATUS: ADCTRGF4 Position */ +#define PWM_STATUS_ADCTRGF4_Msk (0x1ul << PWM_STATUS_ADCTRGF4_Pos) /*!< PWM_T::STATUS: ADCTRGF4 Mask */ + +#define PWM_STATUS_ADCTRGF5_Pos (21) /*!< PWM_T::STATUS: ADCTRGF5 Position */ +#define PWM_STATUS_ADCTRGF5_Msk (0x1ul << PWM_STATUS_ADCTRGF5_Pos) /*!< PWM_T::STATUS: ADCTRGF5 Mask */ + +#define PWM_STATUS_DACTRGF_Pos (24) /*!< PWM_T::STATUS: DACTRGF Position */ +#define PWM_STATUS_DACTRGF_Msk (0x1ul << PWM_STATUS_DACTRGF_Pos) /*!< PWM_T::STATUS: DACTRGF Mask */ + +#define PWM_CAPINEN_CAPINENn_Pos (0) /*!< PWM_T::CAPINEN: CAPINENn Position */ +#define PWM_CAPINEN_CAPINENn_Msk (0x3ful << PWM_CAPINEN_CAPINENn_Pos) /*!< PWM_T::CAPINEN: CAPINENn Mask */ + +#define PWM_CAPINEN_CAPINEN0_Pos (0) /*!< PWM_T::CAPINEN: CAPINEN0 Position */ +#define PWM_CAPINEN_CAPINEN0_Msk (0x1ul << PWM_CAPINEN_CAPINEN0_Pos) /*!< PWM_T::CAPINEN: CAPINEN0 Mask */ + +#define PWM_CAPINEN_CAPINEN1_Pos (1) /*!< PWM_T::CAPINEN: CAPINEN1 Position */ +#define PWM_CAPINEN_CAPINEN1_Msk (0x1ul << PWM_CAPINEN_CAPINEN1_Pos) /*!< PWM_T::CAPINEN: CAPINEN1 Mask */ + +#define PWM_CAPINEN_CAPINEN2_Pos (2) /*!< PWM_T::CAPINEN: CAPINEN2 Position */ +#define PWM_CAPINEN_CAPINEN2_Msk (0x1ul << PWM_CAPINEN_CAPINEN2_Pos) /*!< PWM_T::CAPINEN: CAPINEN2 Mask */ + +#define PWM_CAPINEN_CAPINEN3_Pos (3) /*!< PWM_T::CAPINEN: CAPINEN3 Position */ +#define PWM_CAPINEN_CAPINEN3_Msk (0x1ul << PWM_CAPINEN_CAPINEN3_Pos) /*!< PWM_T::CAPINEN: CAPINEN3 Mask */ + +#define PWM_CAPINEN_CAPINEN4_Pos (4) /*!< PWM_T::CAPINEN: CAPINEN4 Position */ +#define PWM_CAPINEN_CAPINEN4_Msk (0x1ul << PWM_CAPINEN_CAPINEN4_Pos) /*!< PWM_T::CAPINEN: CAPINEN4 Mask */ + +#define PWM_CAPINEN_CAPINEN5_Pos (5) /*!< PWM_T::CAPINEN: CAPINEN5 Position */ +#define PWM_CAPINEN_CAPINEN5_Msk (0x1ul << PWM_CAPINEN_CAPINEN5_Pos) /*!< PWM_T::CAPINEN: CAPINEN5 Mask */ + +#define PWM_CAPCTL_CAPENn_Pos (0) /*!< PWM_T::CAPCTL: CAPENn Position */ +#define PWM_CAPCTL_CAPENn_Msk (0x3ful << PWM_CAPCTL_CAPENn_Pos) /*!< PWM_T::CAPCTL: CAPENn Mask */ + +#define PWM_CAPCTL_CAPEN0_Pos (0) /*!< PWM_T::CAPCTL: CAPEN0 Position */ +#define PWM_CAPCTL_CAPEN0_Msk (0x1ul << PWM_CAPCTL_CAPEN0_Pos) /*!< PWM_T::CAPCTL: CAPEN0 Mask */ + +#define PWM_CAPCTL_CAPEN1_Pos (1) /*!< PWM_T::CAPCTL: CAPEN1 Position */ +#define PWM_CAPCTL_CAPEN1_Msk (0x1ul << PWM_CAPCTL_CAPEN1_Pos) /*!< PWM_T::CAPCTL: CAPEN1 Mask */ + +#define PWM_CAPCTL_CAPEN2_Pos (2) /*!< PWM_T::CAPCTL: CAPEN2 Position */ +#define PWM_CAPCTL_CAPEN2_Msk (0x1ul << PWM_CAPCTL_CAPEN2_Pos) /*!< PWM_T::CAPCTL: CAPEN2 Mask */ + +#define PWM_CAPCTL_CAPEN3_Pos (3) /*!< PWM_T::CAPCTL: CAPEN3 Position */ +#define PWM_CAPCTL_CAPEN3_Msk (0x1ul << PWM_CAPCTL_CAPEN3_Pos) /*!< PWM_T::CAPCTL: CAPEN3 Mask */ + +#define PWM_CAPCTL_CAPEN4_Pos (4) /*!< PWM_T::CAPCTL: CAPEN4 Position */ +#define PWM_CAPCTL_CAPEN4_Msk (0x1ul << PWM_CAPCTL_CAPEN4_Pos) /*!< PWM_T::CAPCTL: CAPEN4 Mask */ + +#define PWM_CAPCTL_CAPEN5_Pos (5) /*!< PWM_T::CAPCTL: CAPEN5 Position */ +#define PWM_CAPCTL_CAPEN5_Msk (0x1ul << PWM_CAPCTL_CAPEN5_Pos) /*!< PWM_T::CAPCTL: CAPEN5 Mask */ + +#define PWM_CAPCTL_CAPINVn_Pos (8) /*!< PWM_T::CAPCTL: CAPINVn Position */ +#define PWM_CAPCTL_CAPINVn_Msk (0x3ful << PWM_CAPCTL_CAPINVn_Pos) /*!< PWM_T::CAPCTL: CAPINVn Mask */ + +#define PWM_CAPCTL_CAPINV0_Pos (8) /*!< PWM_T::CAPCTL: CAPINV0 Position */ +#define PWM_CAPCTL_CAPINV0_Msk (0x1ul << PWM_CAPCTL_CAPINV0_Pos) /*!< PWM_T::CAPCTL: CAPINV0 Mask */ + +#define PWM_CAPCTL_CAPINV1_Pos (9) /*!< PWM_T::CAPCTL: CAPINV1 Position */ +#define PWM_CAPCTL_CAPINV1_Msk (0x1ul << PWM_CAPCTL_CAPINV1_Pos) /*!< PWM_T::CAPCTL: CAPINV1 Mask */ + +#define PWM_CAPCTL_CAPINV2_Pos (10) /*!< PWM_T::CAPCTL: CAPINV2 Position */ +#define PWM_CAPCTL_CAPINV2_Msk (0x1ul << PWM_CAPCTL_CAPINV2_Pos) /*!< PWM_T::CAPCTL: CAPINV2 Mask */ + +#define PWM_CAPCTL_CAPINV3_Pos (11) /*!< PWM_T::CAPCTL: CAPINV3 Position */ +#define PWM_CAPCTL_CAPINV3_Msk (0x1ul << PWM_CAPCTL_CAPINV3_Pos) /*!< PWM_T::CAPCTL: CAPINV3 Mask */ + +#define PWM_CAPCTL_CAPINV4_Pos (12) /*!< PWM_T::CAPCTL: CAPINV4 Position */ +#define PWM_CAPCTL_CAPINV4_Msk (0x1ul << PWM_CAPCTL_CAPINV4_Pos) /*!< PWM_T::CAPCTL: CAPINV4 Mask */ + +#define PWM_CAPCTL_CAPINV5_Pos (13) /*!< PWM_T::CAPCTL: CAPINV5 Position */ +#define PWM_CAPCTL_CAPINV5_Msk (0x1ul << PWM_CAPCTL_CAPINV5_Pos) /*!< PWM_T::CAPCTL: CAPINV5 Mask */ + +#define PWM_CAPCTL_RCRLDENn_Pos (16) /*!< PWM_T::CAPCTL: RCRLDENn Position */ +#define PWM_CAPCTL_RCRLDENn_Msk (0x3ful << PWM_CAPCTL_RCRLDENn_Pos) /*!< PWM_T::CAPCTL: RCRLDENn Mask */ + +#define PWM_CAPCTL_RCRLDEN0_Pos (16) /*!< PWM_T::CAPCTL: RCRLDEN0 Position */ +#define PWM_CAPCTL_RCRLDEN0_Msk (0x1ul << PWM_CAPCTL_RCRLDEN0_Pos) /*!< PWM_T::CAPCTL: RCRLDEN0 Mask */ + +#define PWM_CAPCTL_RCRLDEN1_Pos (17) /*!< PWM_T::CAPCTL: RCRLDEN1 Position */ +#define PWM_CAPCTL_RCRLDEN1_Msk (0x1ul << PWM_CAPCTL_RCRLDEN1_Pos) /*!< PWM_T::CAPCTL: RCRLDEN1 Mask */ + +#define PWM_CAPCTL_RCRLDEN2_Pos (18) /*!< PWM_T::CAPCTL: RCRLDEN2 Position */ +#define PWM_CAPCTL_RCRLDEN2_Msk (0x1ul << PWM_CAPCTL_RCRLDEN2_Pos) /*!< PWM_T::CAPCTL: RCRLDEN2 Mask */ + +#define PWM_CAPCTL_RCRLDEN3_Pos (19) /*!< PWM_T::CAPCTL: RCRLDEN3 Position */ +#define PWM_CAPCTL_RCRLDEN3_Msk (0x1ul << PWM_CAPCTL_RCRLDEN3_Pos) /*!< PWM_T::CAPCTL: RCRLDEN3 Mask */ + +#define PWM_CAPCTL_RCRLDEN4_Pos (20) /*!< PWM_T::CAPCTL: RCRLDEN4 Position */ +#define PWM_CAPCTL_RCRLDEN4_Msk (0x1ul << PWM_CAPCTL_RCRLDEN4_Pos) /*!< PWM_T::CAPCTL: RCRLDEN4 Mask */ + +#define PWM_CAPCTL_RCRLDEN5_Pos (21) /*!< PWM_T::CAPCTL: RCRLDEN5 Position */ +#define PWM_CAPCTL_RCRLDEN5_Msk (0x1ul << PWM_CAPCTL_RCRLDEN5_Pos) /*!< PWM_T::CAPCTL: RCRLDEN5 Mask */ + +#define PWM_CAPCTL_FCRLDENn_Pos (24) /*!< PWM_T::CAPCTL: FCRLDENn Position */ +#define PWM_CAPCTL_FCRLDENn_Msk (0x3ful << PWM_CAPCTL_FCRLDENn_Pos) /*!< PWM_T::CAPCTL: FCRLDENn Mask */ + +#define PWM_CAPCTL_FCRLDEN0_Pos (24) /*!< PWM_T::CAPCTL: FCRLDEN0 Position */ +#define PWM_CAPCTL_FCRLDEN0_Msk (0x1ul << PWM_CAPCTL_FCRLDEN0_Pos) /*!< PWM_T::CAPCTL: FCRLDEN0 Mask */ + +#define PWM_CAPCTL_FCRLDEN1_Pos (25) /*!< PWM_T::CAPCTL: FCRLDEN1 Position */ +#define PWM_CAPCTL_FCRLDEN1_Msk (0x1ul << PWM_CAPCTL_FCRLDEN1_Pos) /*!< PWM_T::CAPCTL: FCRLDEN1 Mask */ + +#define PWM_CAPCTL_FCRLDEN2_Pos (26) /*!< PWM_T::CAPCTL: FCRLDEN2 Position */ +#define PWM_CAPCTL_FCRLDEN2_Msk (0x1ul << PWM_CAPCTL_FCRLDEN2_Pos) /*!< PWM_T::CAPCTL: FCRLDEN2 Mask */ + +#define PWM_CAPCTL_FCRLDEN3_Pos (27) /*!< PWM_T::CAPCTL: FCRLDEN3 Position */ +#define PWM_CAPCTL_FCRLDEN3_Msk (0x1ul << PWM_CAPCTL_FCRLDEN3_Pos) /*!< PWM_T::CAPCTL: FCRLDEN3 Mask */ + +#define PWM_CAPCTL_FCRLDEN4_Pos (28) /*!< PWM_T::CAPCTL: FCRLDEN4 Position */ +#define PWM_CAPCTL_FCRLDEN4_Msk (0x1ul << PWM_CAPCTL_FCRLDEN4_Pos) /*!< PWM_T::CAPCTL: FCRLDEN4 Mask */ + +#define PWM_CAPCTL_FCRLDEN5_Pos (29) /*!< PWM_T::CAPCTL: FCRLDEN5 Position */ +#define PWM_CAPCTL_FCRLDEN5_Msk (0x1ul << PWM_CAPCTL_FCRLDEN5_Pos) /*!< PWM_T::CAPCTL: FCRLDEN5 Mask */ + +#define PWM_CAPSTS_CRLIFOVn_Pos (0) /*!< PWM_T::CAPSTS: CRLIFOVn Position */ +#define PWM_CAPSTS_CRLIFOVn_Msk (0x3ful << PWM_CAPSTS_CRLIFOVn_Pos) /*!< PWM_T::CAPSTS: CRLIFOVn Mask */ + +#define PWM_CAPSTS_CRLIFOV0_Pos (0) /*!< PWM_T::CAPSTS: CRLIFOV0 Position */ +#define PWM_CAPSTS_CRLIFOV0_Msk (0x1ul << PWM_CAPSTS_CRLIFOV0_Pos) /*!< PWM_T::CAPSTS: CRLIFOV0 Mask */ + +#define PWM_CAPSTS_CRLIFOV1_Pos (1) /*!< PWM_T::CAPSTS: CRLIFOV1 Position */ +#define PWM_CAPSTS_CRLIFOV1_Msk (0x1ul << PWM_CAPSTS_CRLIFOV1_Pos) /*!< PWM_T::CAPSTS: CRLIFOV1 Mask */ + +#define PWM_CAPSTS_CRLIFOV2_Pos (2) /*!< PWM_T::CAPSTS: CRLIFOV2 Position */ +#define PWM_CAPSTS_CRLIFOV2_Msk (0x1ul << PWM_CAPSTS_CRLIFOV2_Pos) /*!< PWM_T::CAPSTS: CRLIFOV2 Mask */ + +#define PWM_CAPSTS_CRLIFOV3_Pos (3) /*!< PWM_T::CAPSTS: CRLIFOV3 Position */ +#define PWM_CAPSTS_CRLIFOV3_Msk (0x1ul << PWM_CAPSTS_CRLIFOV3_Pos) /*!< PWM_T::CAPSTS: CRLIFOV3 Mask */ + +#define PWM_CAPSTS_CRLIFOV4_Pos (4) /*!< PWM_T::CAPSTS: CRLIFOV4 Position */ +#define PWM_CAPSTS_CRLIFOV4_Msk (0x1ul << PWM_CAPSTS_CRLIFOV4_Pos) /*!< PWM_T::CAPSTS: CRLIFOV4 Mask */ + +#define PWM_CAPSTS_CRLIFOV5_Pos (5) /*!< PWM_T::CAPSTS: CRLIFOV5 Position */ +#define PWM_CAPSTS_CRLIFOV5_Msk (0x1ul << PWM_CAPSTS_CRLIFOV5_Pos) /*!< PWM_T::CAPSTS: CRLIFOV5 Mask */ + +#define PWM_CAPSTS_CFLIFOVn_Pos (8) /*!< PWM_T::CAPSTS: CFLIFOVn Position */ +#define PWM_CAPSTS_CFLIFOVn_Msk (0x3ful << PWM_CAPSTS_CFLIFOVn_Pos) /*!< PWM_T::CAPSTS: CFLIFOVn Mask */ + +#define PWM_CAPSTS_CFLIFOV0_Pos (8) /*!< PWM_T::CAPSTS: CFLIFOV0 Position */ +#define PWM_CAPSTS_CFLIFOV0_Msk (0x1ul << PWM_CAPSTS_CFLIFOV0_Pos) /*!< PWM_T::CAPSTS: CFLIFOV0 Mask */ + +#define PWM_CAPSTS_CFLIFOV1_Pos (9) /*!< PWM_T::CAPSTS: CFLIFOV1 Position */ +#define PWM_CAPSTS_CFLIFOV1_Msk (0x1ul << PWM_CAPSTS_CFLIFOV1_Pos) /*!< PWM_T::CAPSTS: CFLIFOV1 Mask */ + +#define PWM_CAPSTS_CFLIFOV2_Pos (10) /*!< PWM_T::CAPSTS: CFLIFOV2 Position */ +#define PWM_CAPSTS_CFLIFOV2_Msk (0x1ul << PWM_CAPSTS_CFLIFOV2_Pos) /*!< PWM_T::CAPSTS: CFLIFOV2 Mask */ + +#define PWM_CAPSTS_CFLIFOV3_Pos (11) /*!< PWM_T::CAPSTS: CFLIFOV3 Position */ +#define PWM_CAPSTS_CFLIFOV3_Msk (0x1ul << PWM_CAPSTS_CFLIFOV3_Pos) /*!< PWM_T::CAPSTS: CFLIFOV3 Mask */ + +#define PWM_CAPSTS_CFLIFOV4_Pos (12) /*!< PWM_T::CAPSTS: CFLIFOV4 Position */ +#define PWM_CAPSTS_CFLIFOV4_Msk (0x1ul << PWM_CAPSTS_CFLIFOV4_Pos) /*!< PWM_T::CAPSTS: CFLIFOV4 Mask */ + +#define PWM_CAPSTS_CFLIFOV5_Pos (13) /*!< PWM_T::CAPSTS: CFLIFOV5 Position */ +#define PWM_CAPSTS_CFLIFOV5_Msk (0x1ul << PWM_CAPSTS_CFLIFOV5_Pos) /*!< PWM_T::CAPSTS: CFLIFOV5 Mask */ + +#define PWM_RCAPDAT0_RCAPDAT_Pos (0) /*!< PWM_T::RCAPDAT0: RCAPDAT Position */ +#define PWM_RCAPDAT0_RCAPDAT_Msk (0xfffful << PWM_RCAPDAT0_RCAPDAT_Pos) /*!< PWM_T::RCAPDAT0: RCAPDAT Mask */ + +#define PWM_FCAPDAT0_FCAPDAT_Pos (0) /*!< PWM_T::FCAPDAT0: FCAPDAT Position */ +#define PWM_FCAPDAT0_FCAPDAT_Msk (0xfffful << PWM_FCAPDAT0_FCAPDAT_Pos) /*!< PWM_T::FCAPDAT0: FCAPDAT Mask */ + +#define PWM_RCAPDAT1_RCAPDAT_Pos (0) /*!< PWM_T::RCAPDAT1: RCAPDAT Position */ +#define PWM_RCAPDAT1_RCAPDAT_Msk (0xfffful << PWM_RCAPDAT1_RCAPDAT_Pos) /*!< PWM_T::RCAPDAT1: RCAPDAT Mask */ + +#define PWM_FCAPDAT1_FCAPDAT_Pos (0) /*!< PWM_T::FCAPDAT1: FCAPDAT Position */ +#define PWM_FCAPDAT1_FCAPDAT_Msk (0xfffful << PWM_FCAPDAT1_FCAPDAT_Pos) /*!< PWM_T::FCAPDAT1: FCAPDAT Mask */ + +#define PWM_RCAPDAT2_RCAPDAT_Pos (0) /*!< PWM_T::RCAPDAT2: RCAPDAT Position */ +#define PWM_RCAPDAT2_RCAPDAT_Msk (0xfffful << PWM_RCAPDAT2_RCAPDAT_Pos) /*!< PWM_T::RCAPDAT2: RCAPDAT Mask */ + +#define PWM_FCAPDAT2_FCAPDAT_Pos (0) /*!< PWM_T::FCAPDAT2: FCAPDAT Position */ +#define PWM_FCAPDAT2_FCAPDAT_Msk (0xfffful << PWM_FCAPDAT2_FCAPDAT_Pos) /*!< PWM_T::FCAPDAT2: FCAPDAT Mask */ + +#define PWM_RCAPDAT3_RCAPDAT_Pos (0) /*!< PWM_T::RCAPDAT3: RCAPDAT Position */ +#define PWM_RCAPDAT3_RCAPDAT_Msk (0xfffful << PWM_RCAPDAT3_RCAPDAT_Pos) /*!< PWM_T::RCAPDAT3: RCAPDAT Mask */ + +#define PWM_FCAPDAT3_FCAPDAT_Pos (0) /*!< PWM_T::FCAPDAT3: FCAPDAT Position */ +#define PWM_FCAPDAT3_FCAPDAT_Msk (0xfffful << PWM_FCAPDAT3_FCAPDAT_Pos) /*!< PWM_T::FCAPDAT3: FCAPDAT Mask */ + +#define PWM_RCAPDAT4_RCAPDAT_Pos (0) /*!< PWM_T::RCAPDAT4: RCAPDAT Position */ +#define PWM_RCAPDAT4_RCAPDAT_Msk (0xfffful << PWM_RCAPDAT4_RCAPDAT_Pos) /*!< PWM_T::RCAPDAT4: RCAPDAT Mask */ + +#define PWM_FCAPDAT4_FCAPDAT_Pos (0) /*!< PWM_T::FCAPDAT4: FCAPDAT Position */ +#define PWM_FCAPDAT4_FCAPDAT_Msk (0xfffful << PWM_FCAPDAT4_FCAPDAT_Pos) /*!< PWM_T::FCAPDAT4: FCAPDAT Mask */ + +#define PWM_RCAPDAT5_RCAPDAT_Pos (0) /*!< PWM_T::RCAPDAT5: RCAPDAT Position */ +#define PWM_RCAPDAT5_RCAPDAT_Msk (0xfffful << PWM_RCAPDAT5_RCAPDAT_Pos) /*!< PWM_T::RCAPDAT5: RCAPDAT Mask */ + +#define PWM_FCAPDAT5_FCAPDAT_Pos (0) /*!< PWM_T::FCAPDAT5: FCAPDAT Position */ +#define PWM_FCAPDAT5_FCAPDAT_Msk (0xfffful << PWM_FCAPDAT5_FCAPDAT_Pos) /*!< PWM_T::FCAPDAT5: FCAPDAT Mask */ + +#define PWM_PDMACTL_CHEN0_1_Pos (0) /*!< PWM_T::PDMACTL: CHEN0_1 Position */ +#define PWM_PDMACTL_CHEN0_1_Msk (0x1ul << PWM_PDMACTL_CHEN0_1_Pos) /*!< PWM_T::PDMACTL: CHEN0_1 Mask */ + +#define PWM_PDMACTL_CAPMOD0_1_Pos (1) /*!< PWM_T::PDMACTL: CAPMOD0_1 Position */ +#define PWM_PDMACTL_CAPMOD0_1_Msk (0x3ul << PWM_PDMACTL_CAPMOD0_1_Pos) /*!< PWM_T::PDMACTL: CAPMOD0_1 Mask */ + +#define PWM_PDMACTL_CAPORD0_1_Pos (3) /*!< PWM_T::PDMACTL: CAPORD0_1 Position */ +#define PWM_PDMACTL_CAPORD0_1_Msk (0x1ul << PWM_PDMACTL_CAPORD0_1_Pos) /*!< PWM_T::PDMACTL: CAPORD0_1 Mask */ + +#define PWM_PDMACTL_CHSEL0_1_Pos (4) /*!< PWM_T::PDMACTL: CHSEL0_1 Position */ +#define PWM_PDMACTL_CHSEL0_1_Msk (0x1ul << PWM_PDMACTL_CHSEL0_1_Pos) /*!< PWM_T::PDMACTL: CHSEL0_1 Mask */ + +#define PWM_PDMACTL_CHEN2_3_Pos (8) /*!< PWM_T::PDMACTL: CHEN2_3 Position */ +#define PWM_PDMACTL_CHEN2_3_Msk (0x1ul << PWM_PDMACTL_CHEN2_3_Pos) /*!< PWM_T::PDMACTL: CHEN2_3 Mask */ + +#define PWM_PDMACTL_CAPMOD2_3_Pos (9) /*!< PWM_T::PDMACTL: CAPMOD2_3 Position */ +#define PWM_PDMACTL_CAPMOD2_3_Msk (0x3ul << PWM_PDMACTL_CAPMOD2_3_Pos) /*!< PWM_T::PDMACTL: CAPMOD2_3 Mask */ + +#define PWM_PDMACTL_CAPORD2_3_Pos (11) /*!< PWM_T::PDMACTL: CAPORD2_3 Position */ +#define PWM_PDMACTL_CAPORD2_3_Msk (0x1ul << PWM_PDMACTL_CAPORD2_3_Pos) /*!< PWM_T::PDMACTL: CAPORD2_3 Mask */ + +#define PWM_PDMACTL_CHSEL2_3_Pos (12) /*!< PWM_T::PDMACTL: CHSEL2_3 Position */ +#define PWM_PDMACTL_CHSEL2_3_Msk (0x1ul << PWM_PDMACTL_CHSEL2_3_Pos) /*!< PWM_T::PDMACTL: CHSEL2_3 Mask */ + +#define PWM_PDMACTL_CHEN4_5_Pos (16) /*!< PWM_T::PDMACTL: CHEN4_5 Position */ +#define PWM_PDMACTL_CHEN4_5_Msk (0x1ul << PWM_PDMACTL_CHEN4_5_Pos) /*!< PWM_T::PDMACTL: CHEN4_5 Mask */ + +#define PWM_PDMACTL_CAPMOD4_5_Pos (17) /*!< PWM_T::PDMACTL: CAPMOD4_5 Position */ +#define PWM_PDMACTL_CAPMOD4_5_Msk (0x3ul << PWM_PDMACTL_CAPMOD4_5_Pos) /*!< PWM_T::PDMACTL: CAPMOD4_5 Mask */ + +#define PWM_PDMACTL_CAPORD4_5_Pos (19) /*!< PWM_T::PDMACTL: CAPORD4_5 Position */ +#define PWM_PDMACTL_CAPORD4_5_Msk (0x1ul << PWM_PDMACTL_CAPORD4_5_Pos) /*!< PWM_T::PDMACTL: CAPORD4_5 Mask */ + +#define PWM_PDMACTL_CHSEL4_5_Pos (20) /*!< PWM_T::PDMACTL: CHSEL4_5 Position */ +#define PWM_PDMACTL_CHSEL4_5_Msk (0x1ul << PWM_PDMACTL_CHSEL4_5_Pos) /*!< PWM_T::PDMACTL: CHSEL4_5 Mask */ + +#define PWM_PDMACAP0_1_CAPBUF_Pos (0) /*!< PWM_T::PDMACAP0_1: CAPBUF Position */ +#define PWM_PDMACAP0_1_CAPBUF_Msk (0xfffful << PWM_PDMACAP0_1_CAPBUF_Pos) /*!< PWM_T::PDMACAP0_1: CAPBUF Mask */ + +#define PWM_PDMACAP2_3_CAPBUF_Pos (0) /*!< PWM_T::PDMACAP2_3: CAPBUF Position */ +#define PWM_PDMACAP2_3_CAPBUF_Msk (0xfffful << PWM_PDMACAP2_3_CAPBUF_Pos) /*!< PWM_T::PDMACAP2_3: CAPBUF Mask */ + +#define PWM_PDMACAP4_5_CAPBUF_Pos (0) /*!< PWM_T::PDMACAP4_5: CAPBUF Position */ +#define PWM_PDMACAP4_5_CAPBUF_Msk (0xfffful << PWM_PDMACAP4_5_CAPBUF_Pos) /*!< PWM_T::PDMACAP4_5: CAPBUF Mask */ + +#define PWM_CAPIEN_CAPRIENn_Pos (0) /*!< PWM_T::CAPIEN: CAPRIENn Position */ +#define PWM_CAPIEN_CAPRIENn_Msk (0x3ful << PWM_CAPIEN_CAPRIENn_Pos) /*!< PWM_T::CAPIEN: CAPRIENn Mask */ + +#define PWM_CAPIEN_CAPRIEN0_Pos (0) /*!< PWM_T::CAPIEN: CAPRIEN0 Position */ +#define PWM_CAPIEN_CAPRIEN0_Msk (0x1ul << PWM_CAPIEN_CAPRIEN0_Pos) /*!< PWM_T::CAPIEN: CAPRIEN0 Mask */ + +#define PWM_CAPIEN_CAPRIEN1_Pos (1) /*!< PWM_T::CAPIEN: CAPRIEN1 Position */ +#define PWM_CAPIEN_CAPRIEN1_Msk (0x1ul << PWM_CAPIEN_CAPRIEN1_Pos) /*!< PWM_T::CAPIEN: CAPRIEN1 Mask */ + +#define PWM_CAPIEN_CAPRIEN2_Pos (2) /*!< PWM_T::CAPIEN: CAPRIEN2 Position */ +#define PWM_CAPIEN_CAPRIEN2_Msk (0x1ul << PWM_CAPIEN_CAPRIEN2_Pos) /*!< PWM_T::CAPIEN: CAPRIEN2 Mask */ + +#define PWM_CAPIEN_CAPRIEN3_Pos (3) /*!< PWM_T::CAPIEN: CAPRIEN3 Position */ +#define PWM_CAPIEN_CAPRIEN3_Msk (0x1ul << PWM_CAPIEN_CAPRIEN3_Pos) /*!< PWM_T::CAPIEN: CAPRIEN3 Mask */ + +#define PWM_CAPIEN_CAPRIEN4_Pos (4) /*!< PWM_T::CAPIEN: CAPRIEN4 Position */ +#define PWM_CAPIEN_CAPRIEN4_Msk (0x1ul << PWM_CAPIEN_CAPRIEN4_Pos) /*!< PWM_T::CAPIEN: CAPRIEN4 Mask */ + +#define PWM_CAPIEN_CAPRIEN5_Pos (5) /*!< PWM_T::CAPIEN: CAPRIEN5 Position */ +#define PWM_CAPIEN_CAPRIEN5_Msk (0x1ul << PWM_CAPIEN_CAPRIEN5_Pos) /*!< PWM_T::CAPIEN: CAPRIEN5 Mask */ + +#define PWM_CAPIEN_CAPFIENn_Pos (8) /*!< PWM_T::CAPIEN: CAPFIENn Position */ +#define PWM_CAPIEN_CAPFIENn_Msk (0x3ful << PWM_CAPIEN_CAPFIENn_Pos) /*!< PWM_T::CAPIEN: CAPFIENn Mask */ + +#define PWM_CAPIEN_CAPFIEN0_Pos (8) /*!< PWM_T::CAPIEN: CAPFIEN0 Position */ +#define PWM_CAPIEN_CAPFIEN0_Msk (0x1ul << PWM_CAPIEN_CAPFIEN0_Pos) /*!< PWM_T::CAPIEN: CAPFIEN0 Mask */ + +#define PWM_CAPIEN_CAPFIEN1_Pos (9) /*!< PWM_T::CAPIEN: CAPFIEN1 Position */ +#define PWM_CAPIEN_CAPFIEN1_Msk (0x1ul << PWM_CAPIEN_CAPFIEN1_Pos) /*!< PWM_T::CAPIEN: CAPFIEN1 Mask */ + +#define PWM_CAPIEN_CAPFIEN2_Pos (10) /*!< PWM_T::CAPIEN: CAPFIEN2 Position */ +#define PWM_CAPIEN_CAPFIEN2_Msk (0x1ul << PWM_CAPIEN_CAPFIEN2_Pos) /*!< PWM_T::CAPIEN: CAPFIEN2 Mask */ + +#define PWM_CAPIEN_CAPFIEN3_Pos (11) /*!< PWM_T::CAPIEN: CAPFIEN3 Position */ +#define PWM_CAPIEN_CAPFIEN3_Msk (0x1ul << PWM_CAPIEN_CAPFIEN3_Pos) /*!< PWM_T::CAPIEN: CAPFIEN3 Mask */ + +#define PWM_CAPIEN_CAPFIEN4_Pos (12) /*!< PWM_T::CAPIEN: CAPFIEN4 Position */ +#define PWM_CAPIEN_CAPFIEN4_Msk (0x1ul << PWM_CAPIEN_CAPFIEN4_Pos) /*!< PWM_T::CAPIEN: CAPFIEN4 Mask */ + +#define PWM_CAPIEN_CAPFIEN5_Pos (13) /*!< PWM_T::CAPIEN: CAPFIEN5 Position */ +#define PWM_CAPIEN_CAPFIEN5_Msk (0x1ul << PWM_CAPIEN_CAPFIEN5_Pos) /*!< PWM_T::CAPIEN: CAPFIEN5 Mask */ + +#define PWM_CAPIF_CRLIFn_Pos (0) /*!< PWM_T::CAPIF: CRLIFn Position */ +#define PWM_CAPIF_CRLIFn_Msk (0x3ful << PWM_CAPIF_CRLIFn_Pos) /*!< PWM_T::CAPIF: CRLIFn Mask */ + +#define PWM_CAPIF_CRLIF0_Pos (0) /*!< PWM_T::CAPIF: CRLIF0 Position */ +#define PWM_CAPIF_CRLIF0_Msk (0x1ul << PWM_CAPIF_CRLIF0_Pos) /*!< PWM_T::CAPIF: CRLIF0 Mask */ + +#define PWM_CAPIF_CRLIF1_Pos (1) /*!< PWM_T::CAPIF: CRLIF1 Position */ +#define PWM_CAPIF_CRLIF1_Msk (0x1ul << PWM_CAPIF_CRLIF1_Pos) /*!< PWM_T::CAPIF: CRLIF1 Mask */ + +#define PWM_CAPIF_CRLIF2_Pos (2) /*!< PWM_T::CAPIF: CRLIF2 Position */ +#define PWM_CAPIF_CRLIF2_Msk (0x1ul << PWM_CAPIF_CRLIF2_Pos) /*!< PWM_T::CAPIF: CRLIF2 Mask */ + +#define PWM_CAPIF_CRLIF3_Pos (3) /*!< PWM_T::CAPIF: CRLIF3 Position */ +#define PWM_CAPIF_CRLIF3_Msk (0x1ul << PWM_CAPIF_CRLIF3_Pos) /*!< PWM_T::CAPIF: CRLIF3 Mask */ + +#define PWM_CAPIF_CRLIF4_Pos (4) /*!< PWM_T::CAPIF: CRLIF4 Position */ +#define PWM_CAPIF_CRLIF4_Msk (0x1ul << PWM_CAPIF_CRLIF4_Pos) /*!< PWM_T::CAPIF: CRLIF4 Mask */ + +#define PWM_CAPIF_CRLIF5_Pos (5) /*!< PWM_T::CAPIF: CRLIF5 Position */ +#define PWM_CAPIF_CRLIF5_Msk (0x1ul << PWM_CAPIF_CRLIF5_Pos) /*!< PWM_T::CAPIF: CRLIF5 Mask */ + +#define PWM_CAPIF_CFLIFn_Pos (8) /*!< PWM_T::CAPIF: CFLIFn Position */ +#define PWM_CAPIF_CFLIFn_Msk (0x3ful << PWM_CAPIF_CFLIFn_Pos) /*!< PWM_T::CAPIF: CFLIFn Mask */ + +#define PWM_CAPIF_CFLIF0_Pos (8) /*!< PWM_T::CAPIF: CFLIF0 Position */ +#define PWM_CAPIF_CFLIF0_Msk (0x1ul << PWM_CAPIF_CFLIF0_Pos) /*!< PWM_T::CAPIF: CFLIF0 Mask */ + +#define PWM_CAPIF_CFLIF1_Pos (9) /*!< PWM_T::CAPIF: CFLIF1 Position */ +#define PWM_CAPIF_CFLIF1_Msk (0x1ul << PWM_CAPIF_CFLIF1_Pos) /*!< PWM_T::CAPIF: CFLIF1 Mask */ + +#define PWM_CAPIF_CFLIF2_Pos (10) /*!< PWM_T::CAPIF: CFLIF2 Position */ +#define PWM_CAPIF_CFLIF2_Msk (0x1ul << PWM_CAPIF_CFLIF2_Pos) /*!< PWM_T::CAPIF: CFLIF2 Mask */ + +#define PWM_CAPIF_CFLIF3_Pos (11) /*!< PWM_T::CAPIF: CFLIF3 Position */ +#define PWM_CAPIF_CFLIF3_Msk (0x1ul << PWM_CAPIF_CFLIF3_Pos) /*!< PWM_T::CAPIF: CFLIF3 Mask */ + +#define PWM_CAPIF_CFLIF4_Pos (12) /*!< PWM_T::CAPIF: CFLIF4 Position */ +#define PWM_CAPIF_CFLIF4_Msk (0x1ul << PWM_CAPIF_CFLIF4_Pos) /*!< PWM_T::CAPIF: CFLIF4 Mask */ + +#define PWM_CAPIF_CFLIF5_Pos (13) /*!< PWM_T::CAPIF: CFLIF5 Position */ +#define PWM_CAPIF_CFLIF5_Msk (0x1ul << PWM_CAPIF_CFLIF5_Pos) /*!< PWM_T::CAPIF: CFLIF5 Mask */ + +#define PWM_PBUF_PBUF_Pos (0) /*!< PWM_T::PBUF: PBUF Position */ +#define PWM_PBUF_PBUF_Msk (0xfffful << PWM_PBUF_PBUF_Pos) /*!< PWM_T::PBUF: PBUF Mask */ + +#define PWM_CMPBUF_CMPBUF_Pos (0) /*!< PWM_T::CMPBUF: CMPBUF Position */ +#define PWM_CMPBUF_CMPBUF_Msk (0xfffful << PWM_CMPBUF_CMPBUF_Pos) /*!< PWM_T::CMPBUF: CMPBUF Mask */ + +#define PWM_FTCBUF0_1_FTCMPBUF_Pos (0) /*!< PWM_T::FTCBUF0_1: FTCMPBUF Position */ +#define PWM_FTCBUF0_1_FTCMPBUF_Msk (0xfffful << PWM_FTCBUF0_1_FTCMPBUF_Pos) /*!< PWM_T::FTCBUF0_1: FTCMPBUF Mask */ + +#define PWM_FTCBUF2_3_FTCMPBUF_Pos (0) /*!< PWM_T::FTCBUF2_3: FTCMPBUF Position */ +#define PWM_FTCBUF2_3_FTCMPBUF_Msk (0xfffful << PWM_FTCBUF2_3_FTCMPBUF_Pos) /*!< PWM_T::FTCBUF2_3: FTCMPBUF Mask */ + +#define PWM_FTCBUF4_5_FTCMPBUF_Pos (0) /*!< PWM_T::FTCBUF4_5: FTCMPBUF Position */ +#define PWM_FTCBUF4_5_FTCMPBUF_Msk (0xfffful << PWM_FTCBUF4_5_FTCMPBUF_Pos) /*!< PWM_T::FTCBUF4_5: FTCMPBUF Mask */ + +#define PWM_FTCI_FTCMUn_Pos (0) /*!< PWM_T::FTCI: FTCMUn Position */ +#define PWM_FTCI_FTCMUn_Msk (0x7ul << PWM_FTCI_FTCMUn_Pos) /*!< PWM_T::FTCI: FTCMUn Mask */ + +#define PWM_FTCI_FTCMU0_Pos (0) /*!< PWM_T::FTCI: FTCMU0 Position */ +#define PWM_FTCI_FTCMU0_Msk (0x1ul << PWM_FTCI_FTCMU0_Pos) /*!< PWM_T::FTCI: FTCMU0 Mask */ + +#define PWM_FTCI_FTCMU2_Pos (1) /*!< PWM_T::FTCI: FTCMU2 Position */ +#define PWM_FTCI_FTCMU2_Msk (0x1ul << PWM_FTCI_FTCMU2_Pos) /*!< PWM_T::FTCI: FTCMU2 Mask */ + +#define PWM_FTCI_FTCMU4_Pos (2) /*!< PWM_T::FTCI: FTCMU4 Position */ +#define PWM_FTCI_FTCMU4_Msk (0x1ul << PWM_FTCI_FTCMU4_Pos) /*!< PWM_T::FTCI: FTCMU4 Mask */ + +#define PWM_FTCI_FTCMDn_Pos (8) /*!< PWM_T::FTCI: FTCMDn Position */ +#define PWM_FTCI_FTCMDn_Msk (0x7ul << PWM_FTCI_FTCMDn_Pos) /*!< PWM_T::FTCI: FTCMDn Mask */ + +#define PWM_FTCI_FTCMD0_Pos (8) /*!< PWM_T::FTCI: FTCMD0 Position */ +#define PWM_FTCI_FTCMD0_Msk (0x1ul << PWM_FTCI_FTCMD0_Pos) /*!< PWM_T::FTCI: FTCMD0 Mask */ + +#define PWM_FTCI_FTCMD2_Pos (9) /*!< PWM_T::FTCI: FTCMD2 Position */ +#define PWM_FTCI_FTCMD2_Msk (0x1ul << PWM_FTCI_FTCMD2_Pos) /*!< PWM_T::FTCI: FTCMD2 Mask */ + +#define PWM_FTCI_FTCMD4_Pos (10) /*!< PWM_T::FTCI: FTCMD4 Position */ +#define PWM_FTCI_FTCMD4_Msk (0x1ul << PWM_FTCI_FTCMD4_Pos) /*!< PWM_T::FTCI: FTCMD4 Mask */ + +/**@}*/ /* PWM_CONST */ +/**@}*/ /* end of PWM register group */ + + +/*---------------------- Real Time Clock Controller -------------------------*/ +/** + @addtogroup RTC Real Time Clock Controller(RTC) + Memory Mapped Structure for RTC Controller +@{ */ + + +typedef struct +{ + + + + +/** + * @var RTC_T::INIT + * Offset: 0x00 RTC Initiation Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |INIT[0]/ACTIVE|RTC Active Status (Read Only) + * | | |0 = RTC is at reset state. + * | | |1 = RTC is at normal active state. + * |[31:1] |INIT[31:1]|RTC Initiation + * | | |When RTC block is powered on, RTC is at reset state. + * | | |User has to write a number (0x a5eb1357) to INIT to make RTC leaving reset state. + * | | |Once the INIT is written as 0xa5eb1357, the RTC will be in un-reset state permanently. + * | | |The INIT is a write-only field and read value will be always 0. + * @var RTC_T::RWEN + * Offset: 0x04 RTC Access Enable Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |RWEN |RTC Register Access Enable Password (Write Only) + * | | |Writing 0xA965 to this register will enable RTC access and keep 1024 RTC clock. + * |[16] |RWENF |RTC Register Access Enable Flag (Read Only) + * | | |0 = RTC register read/write Disabled. + * | | |1 = RTC register read/write Enabled. + * | | |This bit will be set after RTC_RWEN[15:0] register is load a 0xA965, and be cleared automatically after 1024 RTC clock. + * @var RTC_T::FREQADJ + * Offset: 0x08 RTC Frequency Compensation Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[5:0] |FRACTION |Fraction Part + * | | |Formula = (fraction part of detected value) x 60. + * | | |Note: Digit in RTC_FREQADJ must be expressed as hexadecimal number. + * |[11:8] |INTEGER |Integer Part + * @var RTC_T::TIME + * Offset: 0x0C Time Loading Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[3:0] |SEC |1-Sec Time Digit (0~9) + * |[6:4] |TENSEC |10-Sec Time Digit (0~5) + * |[11:8] |MIN |1-Min Time Digit (0~9) + * |[14:12] |TENMIN |10-Min Time Digit (0~5) + * |[19:16] |HR |1-Hour Time Digit (0~9) + * |[21:20] |TENHR |10-Hour Time Digit (0~2) + * @var RTC_T::CAL + * Offset: 0x10 RTC Calendar Loading Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[3:0] |DAY |1-Day Calendar Digit (0~9) + * |[5:4] |TENDAY |10-Day Calendar Digit (0~3) + * |[11:8] |MON |1-Month Calendar Digit (0~9) + * |[12] |TENMON |10-Month Calendar Digit (0~1) + * |[19:16] |YEAR |1-Year Calendar Digit (0~9) + * |[23:20] |TENYEAR |10-Year Calendar Digit (0~9) + * @var RTC_T::CLKFMT + * Offset: 0x14 Time Scale Selection Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |24HEN |24-Hour / 12-Hour Time Scale Selection + * | | |Indicates that RTC_TIME and RTC_TALM are in 24-hour time scale or 12-hour time scale + * | | |0 = 12-hour time scale with AM and PM indication selected. + * | | |1 = 24-hour time scale selected. + * @var RTC_T::WEEKDAY + * Offset: 0x18 Day of the Week Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[2:0] |WEEKDAY |Day Of The Week Register + * | | |000 = Sunday. + * | | |001 = Monday. + * | | |010 = Tuesday. + * | | |011 = Wednesday. + * | | |100 = Thursday. + * | | |101 = Friday. + * | | |110 = Saturday. + * | | |111 = Reserved. + * @var RTC_T::TALM + * Offset: 0x1C Time Alarm Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[3:0] |SEC |1-Sec Time Digit of Alarm Setting (0~9) + * |[6:4] |TENSEC |10-Sec Time Digit of Alarm Setting (0~5) + * |[11:8] |MIN |1-Min Time Digit of Alarm Setting (0~9) + * |[14:12] |TENMIN |10-Min Time Digit of Alarm Setting (0~5) + * |[19:16] |HR |1-Hour Time Digit of Alarm Setting (0~9) + * |[21:20] |TENHR |10-Hour Time Digit of Alarm Setting (0~2) + * @var RTC_T::CALM + * Offset: 0x20 Calendar Alarm Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[3:0] |DAY |1-Day Calendar Digit of Alarm Setting (0~9) + * |[5:4] |TENDAY |10-Day Calendar Digit of Alarm Setting (0~3) + * |[11:8] |MON |1-Month Calendar Digit of Alarm Setting (0~9) + * |[12] |TENMON |10-Month Calendar Digit of Alarm Setting (0~1) + * |[19:16] |YEAR |1-Year Calendar Digit of Alarm Setting (0~9) + * |[23:20] |TENYEAR |10-Year Calendar Digit of Alarm Setting (0~9) + * @var RTC_T::LEAPYEAR + * Offset: 0x24 RTC Leap Year Indicator Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |LEAPYEAR |Leap Year Indication Register (Read Only) + * | | |0 = This year is not a leap year. + * | | |1 = This year is leap year. + * @var RTC_T::INTEN + * Offset: 0x28 RTC Interrupt Enable Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |ALMIEN |Alarm Interrupt Enable Bit + * | | |0 = RTC Alarm interrupt Disabled. + * | | |1 = RTC Alarm interrupt Enabled. + * |[1] |TICKIEN |Time Tick Interrupt Enable Bit + * | | |0 = RTC Time Tick interrupt Disabled. + * | | |1 = RTC Time Tick interrupt Enabled. + * |[2] |SNPDIEN |Snoop Detection Interrupt Enable Bit + * | | |0 = Snoop detected interrupt Disabled. + * | | |1 = Snoop detected interrupt Enabled. + * @var RTC_T::INTSTS + * Offset: 0x2C RTC Interrupt Indicator Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |ALMIF |RTC Alarm Interrupt Flag + * | | |When RTC time counters RTC_TIME and RTC_CAL match the alarm setting time registers RTC_TALM and RTC_CALM, this bit will be set to 1 and an interrupt will be generated if RTC Alarm Interrupt enabled ALMIEN (RTC_INTEN[0]) is set to 1. + * | | |Chip will be waken up if RTC Alarm Interrupt is enabled when chip is at Power-down mode. + * | | |0 = Alarm condition is not matched. + * | | |1 = Alarm condition is matched. + * | | |Note: Write 1 to clear this bit. + * |[1] |TICKIF |RTC Time Tick Interrupt Flag + * | | |When RTC time tick happened, this bit will be set to 1 and an interrupt will be generated if RTC Tick Interrupt enabled TICKIEN (RTC_INTEN[1]) is set to 1. + * | | |Chip will also be waken up if RTC Tick Interrupt is enabled and this bit is set to 1 when chip is running at Power-down mode. + * | | |0 = Tick condition does not occur. + * | | |1 = Tick condition occur. + * | | |Note: Write 1 to clear to clear this bit. + * |[2] |SNPDIF |Snoop Detect Interrupt Flag + * | | |When tamper pin transition event is detected, this bit is set to 1 and an interrupt is generated if Snoop Detection Interrupt enabled SNPDIEN (RTC_INTEN[2]) is set to1. + * | | |Chip will be waken up from Power-down mode if spare register snooper detect interrupt is enabled. + * | | |0 = No snoop event is detected. + * | | |1 = Snoop event is detected. + * | | |Note: Write 1 to clear this bit. + * @var RTC_T::TICK + * Offset: 0x30 RTC Time Tick Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[2:0] |TICK |Time Tick Register + * | | |These bits are used to select RTC time tick period for Periodic Time Tick Interrupt request. + * | | |000 = Time tick is 1 second. + * | | |001 = Time tick is 1/2 second. + * | | |010 = Time tick is 1/4 second. + * | | |011 = Time tick is 1/8 second. + * | | |100 = Time tick is 1/16 second. + * | | |101 = Time tick is 1/32 second. + * | | |110 = Time tick is 1/64 second. + * | | |111 = Time tick is 1/28 second. + * | | |Note: This register can be read back after the RTC register access enable bit RWENF (RTC_RWEN[16]) is active. + * @var RTC_T::TAMSK + * Offset: 0x34 Time Alarm Mask Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |MSEC |Mask 1-Sec Time Digit of Alarm Setting (0~9) + * |[1] |MTENSEC |Mask 10-Sec Time Digit of Alarm Setting (0~5) + * |[2] |MMIN |Mask 1-Min Time Digit of Alarm Setting (0~9) + * |[3] |MTENMIN |Mask 10-Min Time Digit of Alarm Setting (0~5) + * |[4] |MHR |Mask 1-Hour Time Digit of Alarm Setting (0~9) + * |[5] |MTENHR |Mask 10-Hour Time Digit of Alarm Setting (0~2) + * @var RTC_T::CAMSK + * Offset: 0x38 Calendar Alarm Mask Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |MDAY |Mask 1-Day Calendar Digit of Alarm Setting (0~9) + * |[1] |MTENDAY |Mask 10-Day Calendar Digit of Alarm Setting (0~3) + * |[2] |MMON |Mask 1-Month Calendar Digit of Alarm Setting (0~9) + * |[3] |MTENMON |Mask 10-Month Calendar Digit of Alarm Setting (0~1) + * |[4] |MYEAR |Mask 1-Year Calendar Digit of Alarm Setting (0~9) + * |[5] |MTENYEAR |Mask 10-Year Calendar Digit of Alarm Setting (0~9) + * @var RTC_T::SPRCTL + * Offset: 0x3C RTC Spare Functional Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |SNPDEN |Snoop Detection Enable Bit + * | | |0 = TAMPER pin detection is Disabled. + * | | |1 = TAMPER pin detection is Enabled. + * |[1] |SNPTYPE0 |Snoop Detection Level + * | | |This bit controls TAMPER detect event is high level/rising edge or low level/falling edge. + * | | |0 = Low level/Falling edge detection. + * | | |1 = High level/Rising edge detection. + * |[2] |SPRRWEN |Spare Register Enable Bit + * | | |0 = Spare register is Disabled. + * | | |1 = Spare register is Enabled. + * | | |Note: When spare register is disabled, RTC_SPR0 ~ RTC_SPR19 cannot be accessed. + * |[3] |SNPTYPE1 |Snoop Detection Mode + * | | |This bit controls TAMPER pin is edge or level detection + * | | |0 = Level detection. + * | | |1 = Edge detection. + * |[5] |SPRCSTS |SPR Clear Flag + * | | |This bit indicates if the RTC_SPR0 ~RTC_SPR19 content is cleared when specify snoop event is detected. + * | | |0 = Spare register content is not cleared. + * | | |1 = Spare register content is cleared. + * | | |Writes 1 to clear this bit. + * |[7] |SPRRWRDY |SPR Register Ready + * | | |This bit indicates if the registers RTC_SPRCTL, RTC_SPR0 ~ RTC_SPR19 are ready to be accessed. + * | | |After user writing registers RTC_SPRCTL, RTC_SPR0 ~ RTC_SPR19, read this bit to check if these registers are updated done is necessary. + * | | |0 = RTC_SPRCTL, RTC_SPR0 ~ RTC_SPR19 updating is in progress. + * | | |1 = RTC_SPRCTL, RTC_SPR0 ~ RTC_SPR19 are updated done and ready to be accessed. + * | | |Note: This bit is read only and any write to it won't take any effect. + * @var RTC_T::SPR + * Offset: 0x40 ~ 0x8C RTC Spare Register 0 ~ 19 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:0] |SPARE |Spare Register + * | | |This field is used to store back-up information defined by user. + * | | |This field will be cleared by hardware automatically once a snooper pin event is detected. + * | | |Before storing back-up information in to RTC_SPRx register, user should write 0xA965 to RTC_RWEN[15:0] to make sure register read/write enable bit REWNF (RTC_RWEN[16]) is enabled. + * @var RTC_T::LXTCTL + * Offset: 0x100 RTC 32.768 kHz Oscillator Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |LXTEN |Backup Domain 32K Oscillator Enable Bit + * | | |0 = Oscillator is Disabled. + * | | |1 = Oscillator is Enabled. + * | | |This bit controls 32 kHz oscillator on/off. + * | | |User can set either LXTEN in RTC domain or system manager control register CLK_PWRCTL[1] (LXTEN) to enable 32 kHz oscillator. + * | | |If this bit is set 1, X32 kHz oscillator keep running after system power is turned off, if this bit is clear to 0, oscillator is turned off when system power is turned off. + * |[3:1] |GAIN |Oscillator Gain Option + * | | |User can select oscillator gain according to crystal external loading and operating temperature range. + * | | |The larger gain value corresponding to stronger driving capability and higher power consumption. + * | | |000 = L0 mode. + * | | |001 = L1 mode. + * | | |010 = L2 mode. + * | | |011 = L3 mode. + * | | |100 = L4 mode. + * | | |101 = L5 mode. + * | | |110 = L6 mode. + * | | |111 = L7 mode (Default). + * @var RTC_T::LXTOCTL + * Offset: 0x104 X32KO Pin Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[1:0] |OPMODE |GPF0 Operation Mode + * | | |00 = X32KO (PF.0) is input only mode, without pull-up resistor. + * | | |01 = X32KO (PF.0) is output push pull mode. + * | | |10 = X32KO (PF.0) is open drain mode. + * | | |11 = X32KO (PF.0) is input only mode with internal pull up. + * |[2] |DOUT |IO Output Data + * | | |0 = X32KO (PF.0) output low. + * | | |1 = X32KO (PF.0) output high. + * |[3] |CTLSEL |IO Pin State Backup Selection + * | | |When low speed 32 kHz oscillator is disabled, X32KO (PF.0) pin can be used as GPIO function. + * | | |User can program CTLSEL bit to decide X32KO (PF.0) I/O function is controlled by system power domain GPIO module or VBAT power domain RTC_LXTOCTL control register. + * | | |0 = X32KO (PF.0) pin I/O function is controlled by GPIO module. + * | | |It becomes floating when system power is turned off. + * | | |1 = X32KO (PF.0) pin I/O function is controlled by VBAT power domain, X32KO (PF.0) pin function and I/O status are controlled by OPMODE[1:0] and DOUT after CTLSEL it set to 1. + * | | |I/O pin keeps the previous state after system power is turned off. + * @var RTC_T::LXTICTL + * Offset: 0x108 X32KI Pin Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[1:0] |OPMODE |IO Operation Mode + * | | |00 = X32KI (PF.1) is input only mode, without pull-up resistor. + * | | |01 = X32KI (PF.1) is output push pull mode. + * | | |10 = X32KI (PF.1) is open drain mode. + * | | |11 = X32KI (PF.1) is input only mode with internal pull up. + * |[2] |DOUT |IO Output Data + * | | |0 = X32KI (PF.1) output low. + * | | |1 = X32KI (PF.1) output high. + * |[3] |CTLSEL |IO Pin State Backup Selection + * | | |When low speed 32 kHz oscillator is disabled, X32KI (PF.1) pin can be used as GPIO function. + * | | |User can program CTLSEL bit to decide X32KI (PF.1) I/O function is controlled by system power domain GPIO module or VBAT power domain RTC_LXTICTL control register. + * | | |0 = X32KI (PF.1) pin I/O function is controlled by GPIO module. + * | | |It becomes floating state when system power is turned off. + * | | |1 = X32KI (PF.1) pin I/O function is controlled by VBAT power domain, X32KI (PF.1) pin function and I/O status are controlled by OPMODE[1:0] and DOUT after CTLSEL it set to 1. + * | | |I/O pin keeps the previous state after system power is turned off. + * @var RTC_T::TAMPCTL + * Offset: 0x10C TAMPER Pin Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[1:0] |OPMODE |IO Operation Mode + * | | |00 = TAMPER (PF.2) is input only mode, without pull-up resistor. + * | | |01 = TAMPER (PF.2) is output push pull mode. + * | | |10 = TAMPER (PF.2) is open drain mode. + * | | |11 = TAMPER (PF.2) is input only mode with internal pull up. + * |[2] |DOUT |IO Output Data + * | | |0 = TAMPER (PF.2) output low. + * | | |1 = TAMPER (PF.2) output high. + * |[3] |CTLSEL |IO Pin State Backup Selection + * | | |When tamper function is disabled, TAMPER pin can be used as GPIO function. + * | | |User can program CTLSEL bit to decide PF.2 I/O function is controlled by system power domain GPIO module or VBAT power domain RTC_TAMPCTL control register. + * | | |0 =TAMPER (PF.2) I/O function is controlled by GPIO module. + * | | |It becomes floating state when system power is turned off. + * | | |1 =TAMPER (PF.2) I/O function is controlled by VBAT power domain. + * | | |PF.2 function and I/O status are controlled by OPMODE[1:0] and DOUT after CTLSEL it set to 1. + * | | |I/O pin state keeps previous state after system power is turned off. + */ + + __IO uint32_t INIT; /* Offset: 0x00 RTC Initiation Register */ + __O uint32_t RWEN; /* Offset: 0x04 RTC Access Enable Register */ + __IO uint32_t FREQADJ; /* Offset: 0x08 RTC Frequency Compensation Register */ + __IO uint32_t TIME; /* Offset: 0x0C Time Loading Register */ + __IO uint32_t CAL; /* Offset: 0x10 RTC Calendar Loading Register */ + __IO uint32_t CLKFMT; /* Offset: 0x14 Time Scale Selection Register */ + __IO uint32_t WEEKDAY; /* Offset: 0x18 Day of the Week Register */ + __IO uint32_t TALM; /* Offset: 0x1C Time Alarm Register */ + __IO uint32_t CALM; /* Offset: 0x20 Calendar Alarm Register */ + __I uint32_t LEAPYEAR; /* Offset: 0x24 RTC Leap Year Indicator Register */ + __IO uint32_t INTEN; /* Offset: 0x28 RTC Interrupt Enable Register */ + __IO uint32_t INTSTS; /* Offset: 0x2C RTC Interrupt Indicator Register */ + __IO uint32_t TICK; /* Offset: 0x30 RTC Time Tick Register */ + __IO uint32_t TAMSK; /* Offset: 0x34 Time Alarm Mask Register */ + __IO uint32_t CAMSK; /* Offset: 0x38 Calendar Alarm Mask Register */ + __IO uint32_t SPRCTL; /* Offset: 0x3C RTC Spare Functional Control Register */ + __IO uint32_t SPR[20]; /* Offset: 0x40 ~ 0x8C RTC Spare Register 0 ~ 19 */ + __I uint32_t RESERVE0[28]; + __IO uint32_t LXTCTL; /* Offset: 0x100 RTC 32.768 kHz Oscillator Control Register */ + __IO uint32_t LXTOCTL; /* Offset: 0x104 X32KO Pin Control Register */ + __IO uint32_t LXTICTL; /* Offset: 0x108 X32KI Pin Control Register */ + __IO uint32_t TAMPCTL; /* Offset: 0x10C TAMPER Pin Control Register */ + +} RTC_T; + + + +/** + @addtogroup RTC_CONST RTC Bit Field Definition + Constant Definitions for RTC Controller +@{ */ + +#define RTC_INIT_ACTIVE_Pos (0) /*!< RTC_T::INIT: ACTIVE Position */ +#define RTC_INIT_ACTIVE_Msk (0x1ul << RTC_INIT_ACTIVE_Pos) /*!< RTC_T::INIT: ACTIVE Mask */ + +#define RTC_INIT_INIT_Pos (0) /*!< RTC_T::INIT: INIT Position */ +#define RTC_INIT_INIT_Msk (0xfffffffful << RTC_INIT_INIT_Pos) /*!< RTC_T::INIT: INIT Mask */ + +#define RTC_RWEN_RWEN_Pos (0) /*!< RTC_T::RWEN: RWEN Position */ +#define RTC_RWEN_RWEN_Msk (0xfffful << RTC_RWEN_RWEN_Pos) /*!< RTC_T::RWEN: RWEN Mask */ + +#define RTC_RWEN_RWENF_Pos (16) /*!< RTC_T::RWEN: RWENF Position */ +#define RTC_RWEN_RWENF_Msk (0x1ul << RTC_RWEN_RWENF_Pos) /*!< RTC_T::RWEN: RWENF Mask */ + +#define RTC_FREQADJ_FRACTION_Pos (0) /*!< RTC_T::FREQADJ: FRACTION Position */ +#define RTC_FREQADJ_FRACTION_Msk (0x3ful << RTC_FREQADJ_FRACTION_Pos) /*!< RTC_T::FREQADJ: FRACTION Mask */ + +#define RTC_FREQADJ_INTEGER_Pos (8) /*!< RTC_T::FREQADJ: INTEGER Position */ +#define RTC_FREQADJ_INTEGER_Msk (0xful << RTC_FREQADJ_INTEGER_Pos) /*!< RTC_T::FREQADJ: INTEGER Mask */ + +#define RTC_TIME_SEC_Pos (0) /*!< RTC_T::TIME: SEC Position */ +#define RTC_TIME_SEC_Msk (0xful << RTC_TIME_SEC_Pos) /*!< RTC_T::TIME: SEC Mask */ + +#define RTC_TIME_TENSEC_Pos (4) /*!< RTC_T::TIME: TENSEC Position */ +#define RTC_TIME_TENSEC_Msk (0x7ul << RTC_TIME_TENSEC_Pos) /*!< RTC_T::TIME: TENSEC Mask */ + +#define RTC_TIME_MIN_Pos (8) /*!< RTC_T::TIME: MIN Position */ +#define RTC_TIME_MIN_Msk (0xful << RTC_TIME_MIN_Pos) /*!< RTC_T::TIME: MIN Mask */ + +#define RTC_TIME_TENMIN_Pos (12) /*!< RTC_T::TIME: TENMIN Position */ +#define RTC_TIME_TENMIN_Msk (0x7ul << RTC_TIME_TENMIN_Pos) /*!< RTC_T::TIME: TENMIN Mask */ + +#define RTC_TIME_HR_Pos (16) /*!< RTC_T::TIME: HR Position */ +#define RTC_TIME_HR_Msk (0xful << RTC_TIME_HR_Pos) /*!< RTC_T::TIME: HR Mask */ + +#define RTC_TIME_TENHR_Pos (20) /*!< RTC_T::TIME: TENHR Position */ +#define RTC_TIME_TENHR_Msk (0x3ul << RTC_TIME_TENHR_Pos) /*!< RTC_T::TIME: TENHR Mask */ + +#define RTC_CAL_DAY_Pos (0) /*!< RTC_T::CAL: DAY Position */ +#define RTC_CAL_DAY_Msk (0xful << RTC_CAL_DAY_Pos) /*!< RTC_T::CAL: DAY Mask */ + +#define RTC_CAL_TENDAY_Pos (4) /*!< RTC_T::CAL: TENDAY Position */ +#define RTC_CAL_TENDAY_Msk (0x3ul << RTC_CAL_TENDAY_Pos) /*!< RTC_T::CAL: TENDAY Mask */ + +#define RTC_CAL_MON_Pos (8) /*!< RTC_T::CAL: MON Position */ +#define RTC_CAL_MON_Msk (0xful << RTC_CAL_MON_Pos) /*!< RTC_T::CAL: MON Mask */ + +#define RTC_CAL_TENMON_Pos (12) /*!< RTC_T::CAL: TENMON Position */ +#define RTC_CAL_TENMON_Msk (0x1ul << RTC_CAL_TENMON_Pos) /*!< RTC_T::CAL: TENMON Mask */ + +#define RTC_CAL_YEAR_Pos (16) /*!< RTC_T::CAL: YEAR Position */ +#define RTC_CAL_YEAR_Msk (0xful << RTC_CAL_YEAR_Pos) /*!< RTC_T::CAL: YEAR Mask */ + +#define RTC_CAL_TENYEAR_Pos (20) /*!< RTC_T::CAL: TENYEAR Position */ +#define RTC_CAL_TENYEAR_Msk (0xful << RTC_CAL_TENYEAR_Pos) /*!< RTC_T::CAL: TENYEAR Mask */ + +#define RTC_CLKFMT_24HEN_Pos (0) /*!< RTC_T::CLKFMT: 24HEN Position */ +#define RTC_CLKFMT_24HEN_Msk (0x1ul << RTC_CLKFMT_24HEN_Pos) /*!< RTC_T::CLKFMT: 24HEN Mask */ + +#define RTC_WEEKDAY_WEEKDAY_Pos (0) /*!< RTC_T::WEEKDAY: WEEKDAY Position */ +#define RTC_WEEKDAY_WEEKDAY_Msk (0x7ul << RTC_WEEKDAY_WEEKDAY_Pos) /*!< RTC_T::WEEKDAY: WEEKDAY Mask */ + +#define RTC_TALM_SEC_Pos (0) /*!< RTC_T::TALM: SEC Position */ +#define RTC_TALM_SEC_Msk (0xful << RTC_TALM_SEC_Pos) /*!< RTC_T::TALM: SEC Mask */ + +#define RTC_TALM_TENSEC_Pos (4) /*!< RTC_T::TALM: TENSEC Position */ +#define RTC_TALM_TENSEC_Msk (0x7ul << RTC_TALM_TENSEC_Pos) /*!< RTC_T::TALM: TENSEC Mask */ + +#define RTC_TALM_MIN_Pos (8) /*!< RTC_T::TALM: MIN Position */ +#define RTC_TALM_MIN_Msk (0xful << RTC_TALM_MIN_Pos) /*!< RTC_T::TALM: MIN Mask */ + +#define RTC_TALM_TENMIN_Pos (12) /*!< RTC_T::TALM: TENMIN Position */ +#define RTC_TALM_TENMIN_Msk (0x7ul << RTC_TALM_TENMIN_Pos) /*!< RTC_T::TALM: TENMIN Mask */ + +#define RTC_TALM_HR_Pos (16) /*!< RTC_T::TALM: HR Position */ +#define RTC_TALM_HR_Msk (0xful << RTC_TALM_HR_Pos) /*!< RTC_T::TALM: HR Mask */ + +#define RTC_TALM_TENHR_Pos (20) /*!< RTC_T::TALM: TENHR Position */ +#define RTC_TALM_TENHR_Msk (0x3ul << RTC_TALM_TENHR_Pos) /*!< RTC_T::TALM: TENHR Mask */ + +#define RTC_CALM_DAY_Pos (0) /*!< RTC_T::CALM: DAY Position */ +#define RTC_CALM_DAY_Msk (0xful << RTC_CALM_DAY_Pos) /*!< RTC_T::CALM: DAY Mask */ + +#define RTC_CALM_TENDAY_Pos (4) /*!< RTC_T::CALM: TENDAY Position */ +#define RTC_CALM_TENDAY_Msk (0x3ul << RTC_CALM_TENDAY_Pos) /*!< RTC_T::CALM: TENDAY Mask */ + +#define RTC_CALM_MON_Pos (8) /*!< RTC_T::CALM: MON Position */ +#define RTC_CALM_MON_Msk (0xful << RTC_CALM_MON_Pos) /*!< RTC_T::CALM: MON Mask */ + +#define RTC_CALM_TENMON_Pos (12) /*!< RTC_T::CALM: TENMON Position */ +#define RTC_CALM_TENMON_Msk (0x1ul << RTC_CALM_TENMON_Pos) /*!< RTC_T::CALM: TENMON Mask */ + +#define RTC_CALM_YEAR_Pos (16) /*!< RTC_T::CALM: YEAR Position */ +#define RTC_CALM_YEAR_Msk (0xful << RTC_CALM_YEAR_Pos) /*!< RTC_T::CALM: YEAR Mask */ + +#define RTC_CALM_TENYEAR_Pos (20) /*!< RTC_T::CALM: TENYEAR Position */ +#define RTC_CALM_TENYEAR_Msk (0xful << RTC_CALM_TENYEAR_Pos) /*!< RTC_T::CALM: TENYEAR Mask */ + +#define RTC_LEAPYEAR_LEAPYEAR_Pos (0) /*!< RTC_T::LEAPYEAR: LEAPYEAR Position */ +#define RTC_LEAPYEAR_LEAPYEAR_Msk (0x1ul << RTC_LEAPYEAR_LEAPYEAR_Pos) /*!< RTC_T::LEAPYEAR: LEAPYEAR Mask */ + +#define RTC_INTEN_ALMIEN_Pos (0) /*!< RTC_T::INTEN: ALMIEN Position */ +#define RTC_INTEN_ALMIEN_Msk (0x1ul << RTC_INTEN_ALMIEN_Pos) /*!< RTC_T::INTEN: ALMIEN Mask */ + +#define RTC_INTEN_TICKIEN_Pos (1) /*!< RTC_T::INTEN: TICKIEN Position */ +#define RTC_INTEN_TICKIEN_Msk (0x1ul << RTC_INTEN_TICKIEN_Pos) /*!< RTC_T::INTEN: TICKIEN Mask */ + +#define RTC_INTEN_SNPDIEN_Pos (2) /*!< RTC_T::INTEN: SNPDIEN Position */ +#define RTC_INTEN_SNPDIEN_Msk (0x1ul << RTC_INTEN_SNPDIEN_Pos) /*!< RTC_T::INTEN: SNPDIEN Mask */ + +#define RTC_INTSTS_ALMIF_Pos (0) /*!< RTC_T::INTSTS: ALMIF Position */ +#define RTC_INTSTS_ALMIF_Msk (0x1ul << RTC_INTSTS_ALMIF_Pos) /*!< RTC_T::INTSTS: ALMIF Mask */ + +#define RTC_INTSTS_TICKIF_Pos (1) /*!< RTC_T::INTSTS: TICKIF Position */ +#define RTC_INTSTS_TICKIF_Msk (0x1ul << RTC_INTSTS_TICKIF_Pos) /*!< RTC_T::INTSTS: TICKIF Mask */ + +#define RTC_INTSTS_SNPDIF_Pos (2) /*!< RTC_T::INTSTS: SNPDIF Position */ +#define RTC_INTSTS_SNPDIF_Msk (0x1ul << RTC_INTSTS_SNPDIF_Pos) /*!< RTC_T::INTSTS: SNPDIF Mask */ + +#define RTC_TICK_TICK_Pos (0) /*!< RTC_T::TICK: TICK Position */ +#define RTC_TICK_TICK_Msk (0x7ul << RTC_TICK_TICK_Pos) /*!< RTC_T::TICK: TICK Mask */ + +#define RTC_TAMSK_MSEC_Pos (0) /*!< RTC_T::TAMSK: MSEC Position */ +#define RTC_TAMSK_MSEC_Msk (0x1ul << RTC_TAMSK_MSEC_Pos) /*!< RTC_T::TAMSK: MSEC Mask */ + +#define RTC_TAMSK_MTENSEC_Pos (1) /*!< RTC_T::TAMSK: MTENSEC Position */ +#define RTC_TAMSK_MTENSEC_Msk (0x1ul << RTC_TAMSK_MTENSEC_Pos) /*!< RTC_T::TAMSK: MTENSEC Mask */ + +#define RTC_TAMSK_MMIN_Pos (2) /*!< RTC_T::TAMSK: MMIN Position */ +#define RTC_TAMSK_MMIN_Msk (0x1ul << RTC_TAMSK_MMIN_Pos) /*!< RTC_T::TAMSK: MMIN Mask */ + +#define RTC_TAMSK_MTENMIN_Pos (3) /*!< RTC_T::TAMSK: MTENMIN Position */ +#define RTC_TAMSK_MTENMIN_Msk (0x1ul << RTC_TAMSK_MTENMIN_Pos) /*!< RTC_T::TAMSK: MTENMIN Mask */ + +#define RTC_TAMSK_MHR_Pos (4) /*!< RTC_T::TAMSK: MHR Position */ +#define RTC_TAMSK_MHR_Msk (0x1ul << RTC_TAMSK_MHR_Pos) /*!< RTC_T::TAMSK: MHR Mask */ + +#define RTC_TAMSK_MTENHR_Pos (5) /*!< RTC_T::TAMSK: MTENHR Position */ +#define RTC_TAMSK_MTENHR_Msk (0x1ul << RTC_TAMSK_MTENHR_Pos) /*!< RTC_T::TAMSK: MTENHR Mask */ + +#define RTC_CAMSK_MDAY_Pos (0) /*!< RTC_T::CAMSK: MDAY Position */ +#define RTC_CAMSK_MDAY_Msk (0x1ul << RTC_CAMSK_MDAY_Pos) /*!< RTC_T::CAMSK: MDAY Mask */ + +#define RTC_CAMSK_MTENDAY_Pos (1) /*!< RTC_T::CAMSK: MTENDAY Position */ +#define RTC_CAMSK_MTENDAY_Msk (0x1ul << RTC_CAMSK_MTENDAY_Pos) /*!< RTC_T::CAMSK: MTENDAY Mask */ + +#define RTC_CAMSK_MMON_Pos (2) /*!< RTC_T::CAMSK: MMON Position */ +#define RTC_CAMSK_MMON_Msk (0x1ul << RTC_CAMSK_MMON_Pos) /*!< RTC_T::CAMSK: MMON Mask */ + +#define RTC_CAMSK_MTENMON_Pos (3) /*!< RTC_T::CAMSK: MTENMON Position */ +#define RTC_CAMSK_MTENMON_Msk (0x1ul << RTC_CAMSK_MTENMON_Pos) /*!< RTC_T::CAMSK: MTENMON Mask */ + +#define RTC_CAMSK_MYEAR_Pos (4) /*!< RTC_T::CAMSK: MYEAR Position */ +#define RTC_CAMSK_MYEAR_Msk (0x1ul << RTC_CAMSK_MYEAR_Pos) /*!< RTC_T::CAMSK: MYEAR Mask */ + +#define RTC_CAMSK_MTENYEAR_Pos (5) /*!< RTC_T::CAMSK: MTENYEAR Position */ +#define RTC_CAMSK_MTENYEAR_Msk (0x1ul << RTC_CAMSK_MTENYEAR_Pos) /*!< RTC_T::CAMSK: MTENYEAR Mask */ + +#define RTC_SPRCTL_SNPDEN_Pos (0) /*!< RTC_T::SPRCTL: SNPDEN Position */ +#define RTC_SPRCTL_SNPDEN_Msk (0x1ul << RTC_SPRCTL_SNPDEN_Pos) /*!< RTC_T::SPRCTL: SNPDEN Mask */ + +#define RTC_SPRCTL_SNPTYPE0_Pos (1) /*!< RTC_T::SPRCTL: SNPTYPE0 Position */ +#define RTC_SPRCTL_SNPTYPE0_Msk (0x1ul << RTC_SPRCTL_SNPTYPE0_Pos) /*!< RTC_T::SPRCTL: SNPTYPE0 Mask */ + +#define RTC_SPRCTL_SPRRWEN_Pos (2) /*!< RTC_T::SPRCTL: SPRRWEN Position */ +#define RTC_SPRCTL_SPRRWEN_Msk (0x1ul << RTC_SPRCTL_SPRRWEN_Pos) /*!< RTC_T::SPRCTL: SPRRWEN Mask */ + +#define RTC_SPRCTL_SNPTYPE1_Pos (3) /*!< RTC_T::SPRCTL: SNPTYPE1 Position */ +#define RTC_SPRCTL_SNPTYPE1_Msk (0x1ul << RTC_SPRCTL_SNPTYPE1_Pos) /*!< RTC_T::SPRCTL: SNPTYPE1 Mask */ + +#define RTC_SPRCTL_SPRCSTS_Pos (5) /*!< RTC_T::SPRCTL: SPRCSTS Position */ +#define RTC_SPRCTL_SPRCSTS_Msk (0x1ul << RTC_SPRCTL_SPRCSTS_Pos) /*!< RTC_T::SPRCTL: SPRCSTS Mask */ + +#define RTC_SPRCTL_SPRRWRDY_Pos (7) /*!< RTC_T::SPRCTL: SPRRWRDY Position */ +#define RTC_SPRCTL_SPRRWRDY_Msk (0x1ul << RTC_SPRCTL_SPRRWRDY_Pos) /*!< RTC_T::SPRCTL: SPRRWRDY Mask */ + +#define RTC_SPR_SPARE_Pos (0) /*!< RTC_T::SPR: SPARE Position */ +#define RTC_SPR_SPARE_Msk (0xfffffffful << RTC_SPR_SPARE_Pos) /*!< RTC_T::SPR: SPARE Mask */ + +#define RTC_LXTCTL_LXTEN_Pos (0) /*!< RTC_T::LXTCTL: LXTEN Position */ +#define RTC_LXTCTL_LXTEN_Msk (0x1ul << RTC_LXTCTL_LXTEN_Pos) /*!< RTC_T::LXTCTL: LXTEN Mask */ + +#define RTC_LXTCTL_GAIN_Pos (1) /*!< RTC_T::LXTCTL: GAIN Position */ +#define RTC_LXTCTL_GAIN_Msk (0x7ul << RTC_LXTCTL_GAIN_Pos) /*!< RTC_T::LXTCTL: GAIN Mask */ + +#define RTC_LXTOCTL_OPMODE_Pos (0) /*!< RTC_T::LXTOCTL: OPMODE Position */ +#define RTC_LXTOCTL_OPMODE_Msk (0x3ul << RTC_LXTOCTL_OPMODE_Pos) /*!< RTC_T::LXTOCTL: OPMODE Mask */ + +#define RTC_LXTOCTL_DOUT_Pos (2) /*!< RTC_T::LXTOCTL: DOUT Position */ +#define RTC_LXTOCTL_DOUT_Msk (0x1ul << RTC_LXTOCTL_DOUT_Pos) /*!< RTC_T::LXTOCTL: DOUT Mask */ + +#define RTC_LXTOCTL_CTLSEL_Pos (3) /*!< RTC_T::LXTOCTL: CTLSEL Position */ +#define RTC_LXTOCTL_CTLSEL_Msk (0x1ul << RTC_LXTOCTL_CTLSEL_Pos) /*!< RTC_T::LXTOCTL: CTLSEL Mask */ + +#define RTC_LXTICTL_OPMODE_Pos (0) /*!< RTC_T::LXTICTL: OPMODE Position */ +#define RTC_LXTICTL_OPMODE_Msk (0x3ul << RTC_LXTICTL_OPMODE_Pos) /*!< RTC_T::LXTICTL: OPMODE Mask */ + +#define RTC_LXTICTL_DOUT_Pos (2) /*!< RTC_T::LXTICTL: DOUT Position */ +#define RTC_LXTICTL_DOUT_Msk (0x1ul << RTC_LXTICTL_DOUT_Pos) /*!< RTC_T::LXTICTL: DOUT Mask */ + +#define RTC_LXTICTL_CTLSEL_Pos (3) /*!< RTC_T::LXTICTL: CTLSEL Position */ +#define RTC_LXTICTL_CTLSEL_Msk (0x1ul << RTC_LXTICTL_CTLSEL_Pos) /*!< RTC_T::LXTICTL: CTLSEL Mask */ + +#define RTC_TAMPCTL_OPMODE_Pos (0) /*!< RTC_T::TAMPCTL: OPMODE Position */ +#define RTC_TAMPCTL_OPMODE_Msk (0x3ul << RTC_TAMPCTL_OPMODE_Pos) /*!< RTC_T::TAMPCTL: OPMODE Mask */ + +#define RTC_TAMPCTL_DOUT_Pos (2) /*!< RTC_T::TAMPCTL: DOUT Position */ +#define RTC_TAMPCTL_DOUT_Msk (0x1ul << RTC_TAMPCTL_DOUT_Pos) /*!< RTC_T::TAMPCTL: DOUT Mask */ + +#define RTC_TAMPCTL_CTLSEL_Pos (3) /*!< RTC_T::TAMPCTL: CTLSEL Position */ +#define RTC_TAMPCTL_CTLSEL_Msk (0x1ul << RTC_TAMPCTL_CTLSEL_Pos) /*!< RTC_T::TAMPCTL: CTLSEL Mask */ + +/**@}*/ /* RTC_CONST */ +/**@}*/ /* end of RTC register group */ + + +/*---------------------- Smart Card Host Interface Controller -------------------------*/ +/** + @addtogroup SC Smart Card Host Interface Controller(SC) + Memory Mapped Structure for SC Controller +@{ */ + + +typedef struct +{ + + +/** + * @var SC_T::DAT + * Offset: 0x00 SC Receiving/Transmit Holding Buffer Register. + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |DAT |Receiving/ Transmit Holding Buffer + * | | |Write Operation: + * | | |By writing data to DAT, the SC will send out an 8-bit data. + * | | |Note: If SCEN(SC_CTL[0]) is not enabled, DAT cannot be programmed. + * | | |Read Operation: + * | | |By reading DAT, the SC will return an 8-bit received data. + * @var SC_T::CTL + * Offset: 0x04 SC Control Register. + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |SCEN |SC Engine Enable Bit + * | | |Set this bit to 1 to enable SC operation. + * | | |If this bit is cleared, SC will force all transition to IDLE state. + * |[1] |RXOFF |RX Transition Disable Control + * | | |0 = The receiver Enabled. + * | | |1 = The receiver Disabled. + * | | |Note: + * | | |If AUTOCEN (SC_CTL[3])is enabled, these fields must be ignored. + * |[2] |TXOFF |TX Transition Disable Control + * | | |0 = The transceiver Enabled. + * | | |1 = The transceiver Disabled. + * |[3] |AUTOCEN |Auto Convention Enable Bit + * | | |0 = Auto-convention Disabled. + * | | |1 = Auto-convention Enabled. + * | | |When hardware receives TS in answer to reset state and the TS is direct convention, CONSEL(SC_CTL[5:4]) will be set to 00 automatically, otherwise if the TS is inverse convention, and CONSEL (SC_CTL[5:4]) will be set to 11. + * | | |If software enables auto convention function, the setting step must be done before Answer to Reset state and the first data must be 0x3B or 0x3F. + * | | |After hardware received first data and stored it at buffer, + * | | |hardware will decided the convention and change the CONSEL (SC_CTL[5:4]) bits automatically. + * | | |If the first data is not 0x3B or 0x3F, hardware will generate an interrupt if ACERRIEN (SC_INTEN[10]) = 1 to CPU. + * |[5:4] |CONSEL |Convention Selection + * | | |00 = Direct convention. + * | | |01 = Reserved. + * | | |10 = Reserved. + * | | |11 = Inverse convention. + * | | |Note: + * | | |If AUTOCEN(SC_CTL[3]) enabled, this fields are ignored. + * |[7:6] |RXTRGLV |Rx Buffer Trigger Level + * | | |When the number of bytes in the receiving buffer equals the RXTRGLV, the RDAIF will be set (if SC_INTEN [RDAIEN] is enabled, an interrupt will be generated). + * | | |00 = INTR_RDA Trigger Level with 01 Bytes. + * | | |01 = INTR_RDA Trigger Level with 02 Bytes. + * | | |10 = INTR_RDA Trigger Level with 03 Bytes. + * | | |11 = Reserved. + * |[12:8] |BGT |Block Guard Time (BGT) + * | | |Block guard time means the minimum bit length between the leading edges of two consecutive characters between different transfer directions. + * | | |This field indicates the counter for the bit length of block guard time. + * | | |According to ISO7816-3, in T = 0 mode, software must fill 15 (real block guard time = 16.5) to this field; in T = 1 mode, software must fill 21 (real block guard time = 22.5) to it. + * | | |Note: + * | | |The real block guard time is BGT + 1. + * |[14:13] |TMRSEL |Timer Selection + * | | |00 = All internal timer function Disabled. + * | | |01 = Internal 24 bit timer Enabled. + * | | |Software can configure it by setting SC_TMRCTL0 [23:0]. + * | | |SC_TMRCTL1 and SC_TMRCTL2 will be ignored in this mode. + * | | |10 = internal 24 bit timer and 8 bit internal timer Enabled. + * | | |Software can configure the 24 bit timer by setting SC_TMRCTL0 [23:0] and configure the 8 bit timer by setting SC_TMRCTL1[7:0]. + * | | |SC_TMRCTL2 will be ignored in this mode. + * | | |11 = Internal 24 bit timer and two 8 bit timers Enabled. + * | | |Software can configure them by setting SC_TMRCTL0 [23:0], SC_TMRCTL1 [7:0] and SC_TMRCTL2 [7:0]. + * |[15] |NSB |Stop Bit Length + * | | |This field indicates the length of stop bit. + * | | |0 = The stop bit length is 2 ETU. + * | | |1= The stop bit length is 1 ETU. + * | | |Note: + * | | |The default stop bit length is 2. SMC and UART adopts NSB to program the stop bit length + * |[18:16] |RXRTY |RX Error Retry Count Number + * | | |This field indicates the maximum number of receiver retries that are allowed when parity error has occurred + * | | |Note1: The real retry number is RXRTY + 1, so 8 is the maximum retry number. + * | | |Note2: This field cannot be changed when RXRTYEN enabled. + * | | |The change flow is to disable RXRTYEN first and then fill in new retry value. + * |[19] |RXRTYEN |RX Error Retry Enable Bit + * | | |This bit enables receiver retry function when parity error has occurred. + * | | |0 = RX error retry function Disabled. + * | | |1 = RX error retry function Enabled. + * | | |Note: + * | | |Software must fill in the RXRTY value before enabling this bit. + * |[22:20] |TXRTY |TX Error Retry Count Number + * | | |This field indicates the maximum number of transmitter retries that are allowed when parity error has occurred. + * | | |Note1: The real retry number is TXRTY + 1, so 8 is the maximum retry number. + * | | |Note2: This field cannot be changed when TXRTYEN enabled. + * | | |The change flow is to disable TXRTYEN first and then fill in new retry value. + * |[23] |TXRTYEN |TX Error Retry Enable Bit + * | | |This bit enables transmitter retry function when parity error has occurred. + * | | |0 = TX error retry function Disabled. + * | | |1 = TX error retry function Enabled. + * |[25:24] |CDDBSEL |Card Detect De-Bounce Selection + * | | |This field indicates the card detect de-bounce selection. + * | | |00 = De-bounce sample card insert once per 384 (128 * 3) peripheral clocks and de-bounce sample card removal once per 128 peripheral clocks. + * | | |01 = De-bounce sample card insert once per 192 (64 * 3) peripheral clocks and de-bounce sample card removal once per 64 peripheral clocks. + * | | |10 = De-bounce sample card insert once per 96 (32 * 3) peripheral clocks and de-bounce sample card removal once per 32 peripheral clocks. + * | | |11 = De-bounce sample card insert once per 48 (16 * 3) peripheral clocks and de-bounce sample card removal once per 16 peripheral clocks. + * |[26] |CDLV |Card Detect Level + * | | |0 = When hardware detects the card detect pin (SC_CD) from high to low, it indicates a card is detected. + * | | |1 = When hardware detects the card detect pin from low to high, it indicates a card is detected. + * | | |Note: Software must select card detect level before Smart Card engine enabled. + * |[30] |SYNC |SYNC Flag Indicator + * | | |Due to synchronization, software should check this bit before writing a new value to RXRTY and TXRTY. + * | | |0 = Synchronizing is completion, user can write new data to RXRTY and TXRTY. + * | | |1 = Last value is synchronizing. + * | | |Note: This bit is read only. + * |[31] |ICEDEBUG |ICE Debug Mode Acknowledge Disable Control + * | | |0 = ICE debug mode acknowledgement affects SC counting. + * | | |SC internal counter will be held while CPU is held by ICE. + * | | |1 = ICE debug mode acknowledgement Disabled. + * | | |SC internal counter will keep going no matter CPU is held by ICE or not. + * @var SC_T::ALTCTL + * Offset: 0x08 SC Alternate Control Register. + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |TXRST |TX Software Reset + * | | |When TXRST is set, all the bytes in the transmit buffer and TX internal state machine will be cleared. + * | | |0 = No effect. + * | | |1 = Reset the TX internal state machine and pointers. + * | | |Note: + * | | |This bit will be auto cleared after reset is complete. + * |[1] |RXRST |Rx Software Reset + * | | |When RXRST is set, all the bytes in the receiver buffer and Rx internal state machine will be cleared. + * | | |0 = No effect. + * | | |1 = Reset the Rx internal state machine and pointers. + * | | |Note: + * | | |This bit will be auto cleared after reset is complete. + * |[2] |DACTEN |Deactivation Sequence Generator Enable Bit + * | | |This bit enables SC controller to initiate the card by deactivation sequence + * | | |0 = No effect. + * | | |1 = Deactivation sequence generator Enabled. + * | | |Note1: + * | | |When the deactivation sequence completed, this bit will be cleared automatically and the INITIF(SC_INTSTS[8]) will be set to 1. + * | | |Note2: + * | | |This field will be cleared by TXRST (SC_ALTCTL[0]) and RXRST(SC_ALTCTL[1]). + * | | |So don't fill this bit, TXRST, and RXRST at the same time. + * | | |Note3: + * | | |If SCEN (SC_CTL[0]) is not enabled, this filed cannot be programmed. + * |[3] |ACTEN |Activation Sequence Generator Enable Bit + * | | |This bit enables SC controller to initiate the card by activation sequence + * | | |0 = No effect. + * | | |1 = Activation sequence generator Enabled. + * | | |Note1: + * | | |When the activation sequence completed, this bit will be cleared automatically and the INITIF(SC_INTSTS[8]) will be set to 1. + * | | |Note2: + * | | |This field will be cleared by TXRST(SC_ALTCTL[0]) and RXRST(SC_ALTCTL[1]), so don't fill this bit, TXRST(SC_ALTCTL[0]), and RXRST(SC_ALTCTL[1]) at the same time. + * | | |Note3: + * | | |If SCEN(SC_CTL[0]) is not enabled, this filed cannot be programmed. + * |[4] |WARSTEN |Warm Reset Sequence Generator Enable Bit + * | | |This bit enables SC controller to initiate the card by warm reset sequence + * | | |0 = No effect. + * | | |1 = Warm reset sequence generator Enabled. + * | | |Note1: + * | | |When the warm reset sequence completed, this bit will be cleared automatically and the INITIF(SC_INTSTS[8]) will be set to 1. + * | | |Note2: + * | | |This field will be cleared by TXRST(SC_ALTCTL[0]) and RXRST(SC_ALTCTL[1]), so don't fill this bit, TXRST, and RXRST at the same time. + * | | |Note3: + * | | |If SCEN(SC_CTL[0]) is not enabled, this filed cannot be programmed. + * |[5] |CNTEN0 |Internal Timer0 Start Enable Bit + * | | |This bit enables Timer 0 to start counting. + * | | |Software can fill 0 to stop it and set 1 to reload and count. + * | | |0 = Stops counting. + * | | |1 = Start counting. + * | | |Note1: + * | | |This field is used for internal 24 bit timer when TMRSEL (SC_CTL[14:13]) = 01. + * | | |Note2: + * | | |If the operation mode is not in auto-reload mode (SC_TMRCTL0[26] = 0), this bit will be auto-cleared by hardware. + * | | |Note3: + * | | |This field will be cleared by TXRST(SC_ALTCTL[0]) and RXRST(SC_ALTCTL[1]). + * | | |So don't fill this bit, TXRST and RXRST at the same time. + * | | |Note4: If SCEN(SC_CTL[0]) is not enabled, this filed cannot be programmed. + * |[6] |CNTEN1 |Internal Timer1 Start Enable Bit + * | | |This bit enables Timer 1 to start counting. + * | | |Software can fill 0 to stop it and set 1 to reload and count. + * | | |0 = Stops counting. + * | | |1 = Start counting. + * | | |Note1: + * | | |This field is used for internal 8 bit timer when TMRSEL(SC_CTL[14:13]) = 10 or TMRSEL(SC_CTL[14:13]) = 11. + * | | |Don't filled CNTEN1 when TMRSEL(SC_CTL[14:13]) = 00 or TMRSEL(SC_CTL[14:13]) = 01. + * | | |Note2: + * | | |If the operation mode is not in auto-reload mode (SC_TMRCTL1[26] = 0), this bit will be auto-cleared by hardware. + * | | |Note3: + * | | |This field will be cleared by TXRST(SC_ALTCTL[0]) and RXRST(SC_ALTCTL[1]), so don't fill this bit, TXRST(SC_ALTCTL[0]), and RXRST(SC_ALTCTL[1]) at the same time. + * | | |Note4: + * | | |If SCEN(SC_CTL[0]) is not enabled, this filed cannot be programmed. + * |[7] |CNTEN2 |Internal Timer2 Start Enable Bit + * | | |This bit enables Timer 2 to start counting. + * | | |Software can fill 0 to stop it and set 1 to reload and count. + * | | |0 = Stops counting. + * | | |1 = Start counting. + * | | |Note1: + * | | |This field is used for internal 8 bit timer when TMRSEL(SC_CTL[14:13]) = 11. + * | | |Don't filled CNTEN2 when TMRSEL(SC_CTL[14:13]) = 00 or TMRSEL(SC_CTL[14:13]) = 01 or TMRSEL(SC_CTL[14:13]) = 10. + * | | |Note2: + * | | |If the operation mode is not in auto-reload mode (SC_TMRCTL2[26] = 0), this bit will be auto-cleared by hardware. + * | | |Note3: + * | | |This field will be cleared by TXRST(SC_ALTCTL[0]) and RXRST(SC_ALTCTL[1]). + * | | |So don't fill this bit, TXRST(SC_ALTCTL[0]), and RXRST(SC_ALTCTL[1]) at the same time. + * | | |Note4: + * | | |If SCEN(SC_CTL[0]) is not enabled, this filed cannot be programmed. + * |[9:8] |INITSEL |Initial Timing Selection + * | | |This fields indicates the timing of hardware initial state (activation or warm-reset or deactivation). + * | | |Unit: SC clock + * | | |Activation: refer to SC Activation Sequence in Figure 6.17-4 + * | | |Warm-reset: refer to Warm-Reset Sequence in Figure 6.17-5 + * | | |Deactivation: refer to Deactivation Sequence in Figure 6.17-6 + * |[12] |RXBGTEN |Receiver Block Guard Time Function Enable Bit + * | | |0 = Receiver block guard time function Disabled. + * | | |1 = Receiver block guard time function Enabled. + * |[13] |ACTSTS0 |Internal Timer0 Active State (Read Only) + * | | |This bit indicates the timer counter status of timer0. + * | | |0 = Timer0 is not active. + * | | |1 = Timer0 is active. + * |[14] |ACTSTS1 |Internal Timer1 Active State (Read Only) + * | | |This bit indicates the timer counter status of timer1. + * | | |0 = Timer1 is not active. + * | | |1 = Timer1 is active. + * |[15] |ACTSTS2 |Internal Timer2 Active State (Read Only) + * | | |This bit indicates the timer counter status of timer2. + * | | |0 = Timer2 is not active. + * | | |1 = Timer2 is active. + * @var SC_T::EGT + * Offset: 0x0C SC Extend Guard Time Register. + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |EGT |Extended Guard Time + * | | |This field indicates the extended guard timer value. + * | | |Note: + * | | |The counter is ETU base and the real extended guard time is EGT. + * @var SC_T::RXTOUT + * Offset: 0x10 SC Receive buffer Time-out Register. + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[8:0] |RFTM |SC Receiver FIFO Time-out (ETU Base) + * | | |The time-out counter resets and starts counting whenever the RX buffer received a new data word. + * | | |Once the counter decrease to 1 and no new data is received or CPU does not read data by reading SC_DAT buffer, a receiver time-out interrupt INT_RTMR will be generated(if RXTOIF(SC_INTEN[9]) = 1 ). + * | | |Note1: The counter unit is ETU based and the interval of time-out is RFTM + 0.5. + * | | |Note2: + * | | |Filling all 0 to this field indicates to disable this function. + * @var SC_T::ETUCTL + * Offset: 0x14 SC ETU Control Register. + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[11:0] |ETURDIV |ETU Rate Divider + * | | |The field indicates the clock rate divider. + * | | |The real ETU is ETURDIV + 1. + * | | |Note: + * | | |Software can configure this field, but this field must be greater than 0x004. + * |[15] |CMPEN |Compensation Mode Enable Bit + * | | |This bit enables clock compensation function. + * | | |When this bit enabled, hardware will alternate between n clock cycles and n-1 clock cycles, where n is the value to be written into the ETURDIV . + * | | |0 = Compensation function Disabled. + * | | |1 = Compensation function Enabled. + * @var SC_T::INTEN + * Offset: 0x18 SC Interrupt Enable Control Register. + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |RDAIEN |Receive Data Reach Interrupt Enable Bit + * | | |This field is used for received data reaching trigger level RXTRGLV (SC_CTL[7:6]) interrupt enable. + * | | |0 = Receive data reach trigger level interrupt Disabled. + * | | |1 = Receive data reach trigger level interrupt Enabled. + * |[1] |TBEIEN |Transmit Buffer Empty Interrupt Enable Bit + * | | |This field is used for transmit buffer empty interrupt enable. + * | | |0 = Transmit buffer empty interrupt Disabled. + * | | |1 = Transmit buffer empty interrupt Enabled. + * |[2] |TERRIEN |Transfer Error Interrupt Enable Bit + * | | |This field is used for transfer error interrupt enable. + * | | |The transfer error states is at SC_STATUS register which includes receiver break error BEF(SC_STATUS[6]), frame error FEF(SC_STATUS[5]), parity error PEF(SC_STATUS[4]), receiver buffer overflow error RXOV(SC_STATUS[0]), transmit buffer overflow error TXOV(SC_STATUS[8]), receiver retry over limit error RXOVERR(SC_STATUS[22]) and transmitter retry over limit error TXOVERR (SC_STATUS[30]). + * | | |0 = Transfer error interrupt Disabled. + * | | |1 = Transfer error interrupt Enabled. + * |[3] |TMR0IEN |Timer0 Interrupt Enable Bit + * | | |This field is used to enable TMR0 interrupt enable. + * | | |0 = Timer0 interrupt Disabled. + * | | |1 = Timer0 interrupt Enabled. + * |[4] |TMR1IEN |Timer1 Interrupt Enable Bit + * | | |This field is used to enable the TMR1 interrupt. + * | | |0 = Timer1 interrupt Disabled. + * | | |1 = Timer1 interrupt Enabled. + * |[5] |TMR2IEN |Timer2 Interrupt Enable Bit + * | | |This field is used for TMR2 interrupt enable. + * | | |0 = Timer2 interrupt Disabled. + * | | |1 = Timer2 interrupt Enabled. + * |[6] |BGTIEN |Block Guard Time Interrupt Enable Bit + * | | |This field is used for block guard time interrupt enable. + * | | |0 = Block guard time Disabled. + * | | |1 = Block guard time Enabled. + * |[7] |CDIEN |Card Detect Interrupt Enable Bit + * | | |This field is used for card detect interrupt enable. The card detect status is CINSERT(SC_STATUS[12]) + * | | |0 = Card detect interrupt Disabled. + * | | |1 = Card detect interrupt Enabled. + * |[8] |INITIEN |Initial End Interrupt Enable Bit + * | | |This field is used for activation (ACTEN(SC_ALTCTL[3] = 1)), deactivation ((DACTEN SC_ALTCTL[2]) = 1) and warm reset (WARSTEN (SC_ALTCTL [4])) sequence interrupt enable. + * | | |0 = Initial end interrupt Disabled. + * | | |1 = Initial end interrupt Enabled. + * |[9] |RXTOIF |Receiver Buffer Time-Out Interrupt Enable Bit + * | | |This field is used for receiver buffer time-out interrupt enable. + * | | |0 = Receiver buffer time-out interrupt Disabled. + * | | |1 = Receiver buffer time-out interrupt Enabled. + * |[10] |ACERRIEN |Auto Convention Error Interrupt Enable Bit + * | | |This field is used for auto-convention error interrupt enable. + * | | |0 = Auto-convention error interrupt Disabled. + * | | |1 = Auto-convention error interrupt Enabled. + * @var SC_T::INTSTS + * Offset: 0x1C SC Interrupt Status Register. + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |RDAIF |Receive Data Reach Interrupt Status Flag (Read Only) + * | | |This field is used for received data reaching trigger level RXTRGLV (SC_CTL[7:6]) interrupt status flag. + * | | |Note: This field is the status flag of received data reaching RXTRGLV (SC_CTL[7:6]). + * | | |If software reads data from SC_DAT and receiver buffer data byte number is less than RXTRGLV (SC_CTL[7:6]), this bit will be cleared automatically. + * |[1] |TBEIF |Transmit Buffer Empty Interrupt Status Flag (Read Only) + * | | |This field is used for transmit buffer empty interrupt status flag. + * | | |Note: This field is the status flag of transmit buffer empty state. + * | | |If software wants to clear this bit, software must write data to DAT(SC_DAT[7:0]) buffer and then this bit will be cleared automatically. + * |[2] |TERRIF |Transfer Error Interrupt Status Flag (Read Only) + * | | |This field is used for transfer error interrupt status flag. + * | | |The transfer error states is at SC_STATUS register which includes receiver break error BEF(SC_STATUS[6]), frame error FEF(SC_STATUS[5]), parity error PEF(SC_STATUS[4]) and receiver buffer overflow error RXOV(SC_STATUS[0]), transmit buffer overflow error TXOV(SC_STATUS[8]), receiver retry over limit error RXOVERR(SC_STATUS[22]) and transmitter retry over limit error TXOVERR(SC_STATUS[30]). + * | | |Note: This field is the status flag of + * | | |BEF(SC_STATUS[6]), FEF(SC_STATUS[5]), PEF(SC_STATUS[4]), RXOV(SC_STATUS[0]), TXOV(SC_STATUS[8]), RXOVERR(SC_STATUS[22]) or TXOVERR(SC_STATUS[30]). + * | | |So, if software wants to clear this bit, software must write 1 to each field. + * |[3] |TMR0IF |Timer0 Interrupt Status Flag (Read Only) + * | | |This field is used for TMR0 interrupt status flag. + * | | |Note: This bit is read only, but it can be cleared by writing 1 to it. + * |[4] |TMR1IF |Timer1 Interrupt Status Flag (Read Only) + * | | |This field is used for TMR1 interrupt status flag. + * | | |Note: This bit is read only, but it can be cleared by writing 1 to it. + * |[5] |TMR2IF |Timer2 Interrupt Status Flag (Read Only) + * | | |This field is used for TMR2 interrupt status flag. + * | | |Note: This bit is read only, but it can be cleared by writing 1 to it. + * |[6] |BGTIF |Block Guard Time Interrupt Status Flag (Read Only) + * | | |This field is used for block guard time interrupt status flag. + * | | |Note1: This bit is valid when RXBGTEN (SC_ALTCTL[12]) is enabled. + * | | |Note2: This bit is read only, but it can be cleared by writing "1" to it. + * |[7] |CDIF |Card Detect Interrupt Status Flag (Read Only) + * | | |This field is used for card detect interrupt status flag. + * | | |The card detect status is CINSERT (SC_STATUS[12]) and CREMOVE(SC_STATUS[11]). + * | | |Note: + * | | |This field is the status flag of CINSERT(SC_STATUS[12]) or CREMOVE(SC_STATUS[11])]. + * | | |So if software wants to clear this bit, software must write 1 to this field. + * |[8] |INITIF |Initial End Interrupt Status Flag (Read Only) + * | | |This field is used for activation (ACTEN(SC_ALTCTL[3])), deactivation (DACTEN (SC_ALTCTL[2])) and warm reset (WARSTEN (SC_ALTCTL[4])) sequence interrupt status flag. + * | | |Note: This bit is read only, but it can be cleared by writing 1 to it. + * |[9] |RBTOIF |Receiver Buffer Time-Out Interrupt Status Flag (Read Only) + * | | |This field is used for receiver buffer time-out interrupt status flag. + * | | |Note: This field is the status flag of receiver buffer time-out state. + * | | |If software wants to clear this bit, software must read all receiver buffer remaining data by reading SC_DAT buffer,. + * |[10] |ACERRIF |Auto Convention Error Interrupt Status Flag (Read Only) + * | | |This field indicates auto convention sequence error. + * | | |If the received TS at ATR state is neither 0x3B nor 0x3F, this bit will be set. + * | | |Note: This bit is read only, but it can be cleared by writing 1 to it. + * @var SC_T::STATUS + * Offset: 0x20 SC Status Register. + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |RXOV |RX Overflow Error Status Flag (Read Only) + * | | |This bit is set when RX buffer overflow. + * | | |If the number of received bytes is greater than Rx Buffer size (4 bytes), this bit will be set. + * | | |Note: This bit is read only, but it can be cleared by writing 1 to it. + * |[1] |RXEMPTY |Receiver Buffer Empty Status Flag(Read Only) + * | | |This bit indicates RX buffer empty or not. + * | | |When the last byte of Rx buffer has been read by CPU, hardware sets this bit high. + * | | |It will be cleared when SC receives any new data. + * |[2] |RXFULL |Receiver Buffer Full Status Flag (Read Only) + * | | |This bit indicates RX buffer full or not. + * | | |This bit is set when RX pointer is equal to 4, otherwise it is cleared by hardware. + * |[4] |PEF |Receiver Parity Error Status Flag (Read Only) + * | | |This bit is set to logic 1 whenever the received character does not have a valid + * | | |"parity bit". + * | | |Note1: + * | | |This bit is read only, but it can be cleared by writing 1 to it. + * | | |Note2: + * | | |If CPU sets receiver retries function by setting RXRTYEN(SC_CTL[19]) , hardware will not set this flag. + * |[5] |FEF |Receiver Frame Error Status Flag (Read Only) + * | | |This bit is set to logic 1 whenever the received character does not have a valid "stop bit" (that is, the stop bit following the last data bit or parity bit is detected as logic 0). + * | | |Note1: + * | | |This bit is read only, but it can be cleared by writing 1 to it. + * | | |Note2: + * | | |If CPU sets receiver retries function by setting RXRTYEN(SC_CTL[19]) , hardware will not set this flag. + * |[6] |BEF |Receiver Break Error Status Flag (Read Only) + * | | |This bit is set to logic 1 whenever the received data input (RX) held in the "spacing state" (logic 0) is longer than a full word transmission time (that is, the total time of "start bit" + data bits + parity + stop bits). + * | | |. + * | | |Note1: + * | | |This bit is read only, but it can be cleared by writing 1 to it. + * | | |Note2: + * | | |If CPU sets receiver retries function by setting RXRTYEN(SC_CTL[19]) , hardware will not set this flag. + * |[8] |TXOV |TX Overflow Error Interrupt Status Flag (Read Only) + * | | |If TX buffer is full, an additional write to DAT(SC_DAT[7:0]) will cause this bit be set to "1" by hardware. + * | | |Note: This bit is read only, but it can be cleared by writing 1 to it. + * |[9] |TXEMPTY |Transmit Buffer Empty Status Flag (Read Only) + * | | |This bit indicates TX buffer empty or not. + * | | |When the last byte of TX buffer has been transferred to Transmitter Shift Register, hardware sets this bit high. + * | | |It will be cleared when writing data into DAT(SC_DAT[7:0]) (TX buffer not empty). + * |[10] |TXFULL |Transmit Buffer Full Status Flag (Read Only) + * | | |This bit indicates TX buffer full or not.This bit is set when TX pointer is equal to 4, otherwise is cleared by hardware. + * |[11] |CREMOVE |Card Detect Removal Status Of SC_CD Pin (Read Only) + * | | |This bit is set whenever card has been removal. + * | | |0 = No effect. + * | | |1 = Card removed. + * | | |Note1: This bit is read only, but it can be cleared by writing "1" to it. + * | | |Note2: Card detect engine will start after SCEN (SC_CTL[0])set. + * |[12] |CINSERT |Card Detect Insert Status Of SC_CD Pin (Read Only) + * | | |This bit is set whenever card has been inserted. + * | | |0 = No effect. + * | | |1 = Card insert. + * | | |Note1: This bit is read only, but it can be cleared by writing "1" to it. + * | | |Note2: The + * | | |card detect engine will start after SCEN (SC_CTL[0]) set. + * |[13] |CDPINSTS |Card Detect Status Of SC_CD Pin Status (Read Only) + * | | |This bit is the pin status flag of SC_CD + * | | |0 = The SC_CD pin state at low. + * | | |1 = The SC_CD pin state at high. + * |[17:16] |RXPOINT |Receiver Buffer Pointer Status Flag (Read Only) + * | | |This field indicates the RX buffer pointer status flag. + * | | |When SC receives one byte from external device, RXPOINT(SC_STATUS[17:16]) increases one. + * | | |When one byte of RX buffer is read by CPU, RXPOINT(SC_STATUS[17:16]) decreases one. + * |[21] |RXRERR |Receiver Retry Error (Read Only) + * | | |This bit is set by hardware when RX has any error and retries transfer. + * | | |Note1: This bit is read only, but it can be cleared by writing 1 to it. + * | | |Note2 This bit is a flag and cannot generate any interrupt to CPU. + * | | |Note3: If CPU enables receiver retry function by setting RXRTYEN (SC_CTL[19]) , the PEF(SC_STATUS[4]) flag will be ignored (hardware will not set PEF(SC_STATUS[4])). + * |[22] |RXOVERR |Receiver Over Retry Error (Read Only) + * | | |This bit is set by hardware when RX transfer error retry over retry number limit. + * | | |Note1: This bit is read only, but it can be cleared by writing 1 to it. + * | | |Note2: If CPU enables receiver retries function by setting RXRTYEN (SC_CTL[19]), the PEF(SC_STATUS[4]) flag will be ignored (hardware will not set PEF(SC_STATUS[4])). + * |[23] |RXACT |Receiver In Active Status Flag (Read Only) + * | | |This bit is set by hardware when RX transfer is in active. + * | | |This bit is cleared automatically when RX transfer is finished. + * |[25:24] |TXPOINT |Transmit Buffer Pointer Status Flag (Read Only) + * | | |This field indicates the TX buffer pointer status flag. + * | | |When CPU writes data into SC_DAT, TXPOINT increases one. + * | | |When one byte of TX Buffer is transferred to transmitter shift register, TXPOINT decreases one. + * |[29] |TXRERR |Transmitter Retry Error (Read Only) + * | | |This bit is set by hardware when transmitter re-transmits. + * | | |Note1: This bit is read only, but it can be cleared by writing 1 to it. + * | | |Note2 This bit is a flag and cannot generate any interrupt to CPU. + * |[30] |TXOVERR |Transmitter Over Retry Error (Read Only) + * | | |This bit is set by hardware when transmitter re-transmits over retry number limitation. + * | | |Note: This bit is read only, but it can be cleared by writing 1 to it. + * |[31] |TXACT |Transmit In Active Status Flag (Read Only) + * | | |0 = This bit is cleared automatically when TX transfer is finished or the last byte transmission has completed. + * | | |1 = This bit is set by hardware when TX transfer is in active and the STOP bit of the last byte has been transmitted. + * @var SC_T::PINCTL + * Offset: 0x24 SC Pin Control State Register. + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |PWREN |SC_PWREN Pin Signal + * | | |Software can set PWREN (SC_PINCTL[0]) and PWRINV (SC_PINCTL[11])to decide SC_PWR pin is in high or low level. + * | | |Write this field to drive SC_PWR pin + * | | |Refer PWRINV (SC_PINCTL[11]) description for programming SC_PWR pin voltage level. + * | | |Read this field to get SC_PWR pin status. + * | | |0 = SC_PWR pin status is low. + * | | |1 = SC_PWR pin status is high. + * | | |Note: When operating at activation, warm reset or deactivation mode, this bit will be changed automatically. + * | | |So don't fill this field when operating in these modes. + * |[1] |SCRST |SC_RST Pin Signal + * | | |This bit is the pin status of SC_RST but user can drive SC_RST pin to high or low by setting this bit. + * | | |Write this field to drive SC_RST pin. + * | | |0 = Drive SC_RST pin to low. + * | | |1 = Drive SC_RST pin to high. + * | | |Read this field to get SC_RST pin status. + * | | |0 = SC_RST pin status is low. + * | | |1 = SC_RST pin status is high. + * | | |Note: When operating at activation, warm reset or deactivation mode, this bit will be changed automatically. + * | | |So don't fill this field when operating in these modes. + * |[5] |CSTOPLV |SC Clock Stop Level + * | | |This field indicates the clock polarity control in clock stop mode. + * | | |0 = SC_CLK stopped in low level. + * | | |1 = SC_CLK stopped in high level. + * |[6] |CLKKEEP |SC Clock Enable Bit + * | | |0 = SC clock generation Disabled. + * | | |1 = SC clock always keeps free running. + * | | |Note: When operating in activation, warm reset or deactivation mode, this bit will be changed automatically. + * | | |So don't fill this field when operating in these modes. + * |[9] |SCDOUT |SC Data Output Pin + * | | |This bit is the pin status of SCDATOUT but user can drive SCDATOUT pin to high or low by setting this bit. + * | | |0 = Drive SCDATOUT pin to low. + * | | |1 = Drive SCDATOUT pin to high. + * | | |Note: When SC is at activation, warm reset or deactivation mode, this bit will be changed automatically. + * | | |So don't fill this field when SC is in these modes. + * |[11] |PWRINV |SC_POW Pin Inverse + * | | |This bit is used for inverse the SC_POW pin. + * | | |There are four kinds of combination for SC_POW pin setting by PWRINV(SC_PINCTL[11]) and PWREN(SC_PINCTL[0]). + * | | |PWRINV (SC_PINCTL[11]) is bit 1 and PWREN(SC_PINCTL[0]) is bit 0 for SC_POW_Pin as high or low voltage selection. + * | | |00 = SC_POW_ Pin is 0. + * | | |01 = SC_POW _Pin is 1. + * | | |10 = SC_POW _Pin is 1. + * | | |11 = SC_POW_ Pin is 0. + * | | |Note: Software must select PWRINV (SC_PINCTL[11]) before Smart Card is enabled by SCEN (SC_CTL[0]). + * |[12] |SCDOSTS |SC Data Pin Output Status + * | | |This bit is the pin status of SCDATOUT + * | | |0 = SCDATOUT pin to low. + * | | |1 = SCDATOUT pin to high. + * | | |Note: When SC is operated at activation, warm reset or deactivation mode, this bit will be changed automatically. + * | | |This bit is not allowed to program when SC is operated at these modes. + * |[16] |DATSTS |This bit is the pin status of SC_DAT + * | | |0 = The SC_DAT pin is low. + * | | |1 = The SC_DAT pin is high. + * |[17] |PWRSTS |SC_PWR Pin Signal + * | | |This bit is the pin status of SC_PWR + * | | |0 = SC_PWR pin to low. + * | | |1 = SC_PWR pin to high. + * | | |Note: When SC is operated at activation, warm reset or deactivation mode, this bit will be changed automatically. + * | | |This bit is not allowed to program when SC is operated at these modes. + * |[18] |RSTSTS |SCRST Pin Signals + * | | |This bit is the pin status of SC_RST + * | | |0 = SC_RST pin is low. + * | | |1 = SC_RST pin is high. + * | | |Note: When SC is operated at activation, warm reset or deactivation mode, this bit will be changed automatically. + * | | |This bit is not allowed to program when SC is operated at these modes. + * |[30] |SYNC |SYNC Flag Indicator + * | | |Due to synchronization, software should check this bit when writing a new value to SC_PINCTL register. + * | | |0 = Synchronizing is completion, user can write new data to SC_PINCTL register. + * | | |1 = Last value is synchronizing. + * | | |Note: This bit is read only. + * |[31] |LOOPBK |Loop Back Test + * | | |0 = loop back test Disabled. + * | | |1 = Enabling loop back test and the internal SCDATOUT will connect to internal SC_DATA_I. + * @var SC_T::TMRCTL0 + * Offset: 0x28 SC Internal Timer Control Register 0. + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[23:0] |CNT |Timer 0 Counter Value (ETU Base) + * | | |This field indicates the internal timer operation values. + * |[27:24] |OPMODE |Timer 0 Operation Mode Selection + * | | |This field indicates the internal 24-bit timer operation selection. + * | | |Refer to 6.17.5.4 for programming Timer0 + * @var SC_T::TMRCTL1 + * Offset: 0x2C SC Internal Timer Control Register 1. + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |CNT |Timer 1 Counter Value (ETU Base) + * | | |This field indicates the internal timer operation values. + * |[27:24] |OPMODE |Timer 1 Operation Mode Selection + * | | |This field indicates the internal 8-bit timer operation selection. + * | | |Refer to 6.17.5.4 for programming Timer1 + * @var SC_T::TMRCTL2 + * Offset: 0x30 SC Internal Timer Control Register 2. + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |CNT |Timer 2 Counter Value (ETU Base) + * | | |This field indicates the internal timer operation values. + * |[27:24] |OPMODE |Timer 2 Operation Mode Selection + * | | |This field indicates the internal 8-bit timer operation selection + * | | |Refer to 6.17.5.4 for programming Timer2 + * @var SC_T::UARTCTL + * Offset: 0x34 SC UART Mode Control Register. + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |UARTEN |UART Mode Enable Bit + * | | |0 = Smart Card mode. + * | | |1 = UART mode. + * | | |Note1: When operating in UART mode, user must set CONSEL (SC_CTL[5:4]) = 00 and AUTOCEN(SC_CTL[3]) = 0. + * | | |Note2: When operating in Smart Card mode, user must set UARTEN(SC_UARTCTL [0]) = 00. + * | | |Note3: When UART is enabled, hardware will generate a reset to reset FIFO and internal state machine. + * |[5:4] |WLS10 |Word Length Selection + * | | |00 = Word length is 8 bits. + * | | |01 = Word length is 7 bits. + * | | |10 = Word length is 6 bits. + * | | |11 = Word length is 5 bits. + * | | |Note: In smart card mode, this WLS must be '00' + * |[6] |PBOFF |Parity Bit Disable Control + * | | |0 = Parity bit is generated or checked between the "last data word bit" and "stop bit" of the serial data. + * | | |1 = Parity bit is not generated (transmitting data) or checked (receiving data) during transfer. + * | | |Note: In smart card mode, this field must be '0' (default setting is with parity bit) + * |[7] |OPE |Odd Parity Enable Bit + * | | |0 = Even number of logic 1's are transmitted or check the data word and parity bits in receiving mode. + * | | |1 = Odd number of logic 1's are transmitted or check the data word and parity bits in receiving mode. + * | | |Note: This bit has effect only when PBOFF bit is '0'. + * @var SC_T::TMRDAT0 + * Offset: 0x38 SC Timer Current Data Register A. + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[23:0] |CNT0 |Timer0 Current Data Value (Read Only) + * | | |This field indicates the current count values of timer0. + * @var SC_T::TMRDAT1_2 + * Offset: 0x3C SC Timer Current Data Register B. + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |CNT1 |Timer1 Current Data Value (Read Only) + * | | |This field indicates the current count values of timer1. + * |[15:8] |CNT2 |Timer2 Current Data Value (Read Only) + * | | |This field indicates the current count values of timer2. + */ + + __IO uint32_t DAT; /* Offset: 0x00 SC Receiving/Transmit Holding Buffer Register. */ + __IO uint32_t CTL; /* Offset: 0x04 SC Control Register. */ + __IO uint32_t ALTCTL; /* Offset: 0x08 SC Alternate Control Register. */ + __IO uint32_t EGT; /* Offset: 0x0C SC Extend Guard Time Register. */ + __IO uint32_t RXTOUT; /* Offset: 0x10 SC Receive buffer Time-out Register. */ + __IO uint32_t ETUCTL; /* Offset: 0x14 SC ETU Control Register. */ + __IO uint32_t INTEN; /* Offset: 0x18 SC Interrupt Enable Control Register. */ + __IO uint32_t INTSTS; /* Offset: 0x1C SC Interrupt Status Register. */ + __IO uint32_t STATUS; /* Offset: 0x20 SC Status Register. */ + __IO uint32_t PINCTL; /* Offset: 0x24 SC Pin Control State Register. */ + __IO uint32_t TMRCTL0; /* Offset: 0x28 SC Internal Timer Control Register 0. */ + __IO uint32_t TMRCTL1; /* Offset: 0x2C SC Internal Timer Control Register 1. */ + __IO uint32_t TMRCTL2; /* Offset: 0x30 SC Internal Timer Control Register 2. */ + __IO uint32_t UARTCTL; /* Offset: 0x34 SC UART Mode Control Register. */ + __I uint32_t TMRDAT0; /* Offset: 0x38 SC Timer Current Data Register A. */ + __I uint32_t TMRDAT1_2; /* Offset: 0x3C SC Timer Current Data Register B. */ + +} SC_T; + + + +/** + @addtogroup SC_CONST SC Bit Field Definition + Constant Definitions for SC Controller +@{ */ + +#define SC_DAT_DAT_Pos (0) /*!< SC_T::DAT: DAT Position */ +#define SC_DAT_DAT_Msk (0xfful << SC_DAT_DAT_Pos) /*!< SC_T::DAT: DAT Mask */ + +#define SC_CTL_SCEN_Pos (0) /*!< SC_T::CTL: SCEN Position */ +#define SC_CTL_SCEN_Msk (0x1ul << SC_CTL_SCEN_Pos) /*!< SC_T::CTL: SCEN Mask */ + +#define SC_CTL_RXOFF_Pos (1) /*!< SC_T::CTL: RXOFF Position */ +#define SC_CTL_RXOFF_Msk (0x1ul << SC_CTL_RXOFF_Pos) /*!< SC_T::CTL: RXOFF Mask */ + +#define SC_CTL_TXOFF_Pos (2) /*!< SC_T::CTL: TXOFF Position */ +#define SC_CTL_TXOFF_Msk (0x1ul << SC_CTL_TXOFF_Pos) /*!< SC_T::CTL: TXOFF Mask */ + +#define SC_CTL_AUTOCEN_Pos (3) /*!< SC_T::CTL: AUTOCEN Position */ +#define SC_CTL_AUTOCEN_Msk (0x1ul << SC_CTL_AUTOCEN_Pos) /*!< SC_T::CTL: AUTOCEN Mask */ + +#define SC_CTL_CONSEL_Pos (4) /*!< SC_T::CTL: CONSEL Position */ +#define SC_CTL_CONSEL_Msk (0x3ul << SC_CTL_CONSEL_Pos) /*!< SC_T::CTL: CONSEL Mask */ + +#define SC_CTL_RXTRGLV_Pos (6) /*!< SC_T::CTL: RXTRGLV Position */ +#define SC_CTL_RXTRGLV_Msk (0x3ul << SC_CTL_RXTRGLV_Pos) /*!< SC_T::CTL: RXTRGLV Mask */ + +#define SC_CTL_BGT_Pos (8) /*!< SC_T::CTL: BGT Position */ +#define SC_CTL_BGT_Msk (0x1ful << SC_CTL_BGT_Pos) /*!< SC_T::CTL: BGT Mask */ + +#define SC_CTL_TMRSEL_Pos (13) /*!< SC_T::CTL: TMRSEL Position */ +#define SC_CTL_TMRSEL_Msk (0x3ul << SC_CTL_TMRSEL_Pos) /*!< SC_T::CTL: TMRSEL Mask */ + +#define SC_CTL_NSB_Pos (15) /*!< SC_T::CTL: NSB Position */ +#define SC_CTL_NSB_Msk (0x1ul << SC_CTL_NSB_Pos) /*!< SC_T::CTL: NSB Mask */ + +#define SC_CTL_RXRTY_Pos (16) /*!< SC_T::CTL: RXRTY Position */ +#define SC_CTL_RXRTY_Msk (0x7ul << SC_CTL_RXRTY_Pos) /*!< SC_T::CTL: RXRTY Mask */ + +#define SC_CTL_RXRTYEN_Pos (19) /*!< SC_T::CTL: RXRTYEN Position */ +#define SC_CTL_RXRTYEN_Msk (0x1ul << SC_CTL_RXRTYEN_Pos) /*!< SC_T::CTL: RXRTYEN Mask */ + +#define SC_CTL_TXRTY_Pos (20) /*!< SC_T::CTL: TXRTY Position */ +#define SC_CTL_TXRTY_Msk (0x7ul << SC_CTL_TXRTY_Pos) /*!< SC_T::CTL: TXRTY Mask */ + +#define SC_CTL_TXRTYEN_Pos (23) /*!< SC_T::CTL: TXRTYEN Position */ +#define SC_CTL_TXRTYEN_Msk (0x1ul << SC_CTL_TXRTYEN_Pos) /*!< SC_T::CTL: TXRTYEN Mask */ + +#define SC_CTL_CDDBSEL_Pos (24) /*!< SC_T::CTL: CDDBSEL Position */ +#define SC_CTL_CDDBSEL_Msk (0x3ul << SC_CTL_CDDBSEL_Pos) /*!< SC_T::CTL: CDDBSEL Mask */ + +#define SC_CTL_CDLV_Pos (26) /*!< SC_T::CTL: CDLV Position */ +#define SC_CTL_CDLV_Msk (0x1ul << SC_CTL_CDLV_Pos) /*!< SC_T::CTL: CDLV Mask */ + +#define SC_CTL_SYNC_Pos (30) /*!< SC_T::CTL: SYNC Position */ +#define SC_CTL_SYNC_Msk (0x1ul << SC_CTL_SYNC_Pos) /*!< SC_T::CTL: SYNC Mask */ + +#define SC_CTL_ICEDEBUG_Pos (31) /*!< SC_T::CTL: ICEDEBUG Position */ +#define SC_CTL_ICEDEBUG_Msk (0x1ul << SC_CTL_ICEDEBUG_Pos) /*!< SC_T::CTL: ICEDEBUG Mask */ + +#define SC_ALTCTL_TXRST_Pos (0) /*!< SC_T::ALTCTL: TXRST Position */ +#define SC_ALTCTL_TXRST_Msk (0x1ul << SC_ALTCTL_TXRST_Pos) /*!< SC_T::ALTCTL: TXRST Mask */ + +#define SC_ALTCTL_RXRST_Pos (1) /*!< SC_T::ALTCTL: RXRST Position */ +#define SC_ALTCTL_RXRST_Msk (0x1ul << SC_ALTCTL_RXRST_Pos) /*!< SC_T::ALTCTL: RXRST Mask */ + +#define SC_ALTCTL_DACTEN_Pos (2) /*!< SC_T::ALTCTL: DACTEN Position */ +#define SC_ALTCTL_DACTEN_Msk (0x1ul << SC_ALTCTL_DACTEN_Pos) /*!< SC_T::ALTCTL: DACTEN Mask */ + +#define SC_ALTCTL_ACTEN_Pos (3) /*!< SC_T::ALTCTL: ACTEN Position */ +#define SC_ALTCTL_ACTEN_Msk (0x1ul << SC_ALTCTL_ACTEN_Pos) /*!< SC_T::ALTCTL: ACTEN Mask */ + +#define SC_ALTCTL_WARSTEN_Pos (4) /*!< SC_T::ALTCTL: WARSTEN Position */ +#define SC_ALTCTL_WARSTEN_Msk (0x1ul << SC_ALTCTL_WARSTEN_Pos) /*!< SC_T::ALTCTL: WARSTEN Mask */ + +#define SC_ALTCTL_CNTEN0_Pos (5) /*!< SC_T::ALTCTL: CNTEN0 Position */ +#define SC_ALTCTL_CNTEN0_Msk (0x1ul << SC_ALTCTL_CNTEN0_Pos) /*!< SC_T::ALTCTL: CNTEN0 Mask */ + +#define SC_ALTCTL_CNTEN1_Pos (6) /*!< SC_T::ALTCTL: CNTEN1 Position */ +#define SC_ALTCTL_CNTEN1_Msk (0x1ul << SC_ALTCTL_CNTEN1_Pos) /*!< SC_T::ALTCTL: CNTEN1 Mask */ + +#define SC_ALTCTL_CNTEN2_Pos (7) /*!< SC_T::ALTCTL: CNTEN2 Position */ +#define SC_ALTCTL_CNTEN2_Msk (0x1ul << SC_ALTCTL_CNTEN2_Pos) /*!< SC_T::ALTCTL: CNTEN2 Mask */ + +#define SC_ALTCTL_INITSEL_Pos (8) /*!< SC_T::ALTCTL: INITSEL Position */ +#define SC_ALTCTL_INITSEL_Msk (0x3ul << SC_ALTCTL_INITSEL_Pos) /*!< SC_T::ALTCTL: INITSEL Mask */ + +#define SC_ALTCTL_ADACEN_Pos (11) /*!< SC_T::ALTCTL: ADACEN Position */ +#define SC_ALTCTL_ADACEN_Msk (0x1ul << SC_ALTCTL_ADACEN_Pos) /*!< SC_T::ALTCTL: ADACEN Mask */ + +#define SC_ALTCTL_RXBGTEN_Pos (12) /*!< SC_T::ALTCTL: RXBGTEN Position */ +#define SC_ALTCTL_RXBGTEN_Msk (0x1ul << SC_ALTCTL_RXBGTEN_Pos) /*!< SC_T::ALTCTL: RXBGTEN Mask */ + +#define SC_ALTCTL_ACTSTS0_Pos (13) /*!< SC_T::ALTCTL: ACTSTS0 Position */ +#define SC_ALTCTL_ACTSTS0_Msk (0x1ul << SC_ALTCTL_ACTSTS0_Pos) /*!< SC_T::ALTCTL: ACTSTS0 Mask */ + +#define SC_ALTCTL_ACTSTS1_Pos (14) /*!< SC_T::ALTCTL: ACTSTS1 Position */ +#define SC_ALTCTL_ACTSTS1_Msk (0x1ul << SC_ALTCTL_ACTSTS1_Pos) /*!< SC_T::ALTCTL: ACTSTS1 Mask */ + +#define SC_ALTCTL_ACTSTS2_Pos (15) /*!< SC_T::ALTCTL: ACTSTS2 Position */ +#define SC_ALTCTL_ACTSTS2_Msk (0x1ul << SC_ALTCTL_ACTSTS2_Pos) /*!< SC_T::ALTCTL: ACTSTS2 Mask */ + +#define SC_ALTCTL_OUTSEL_Pos (16) /*!< SC_T::ALTCTL: OUTSEL Position */ +#define SC_ALTCTL_OUTSEL_Msk (0x1ul << SC_ALTCTL_OUTSEL_Pos) /*!< SC_T::ALTCTL: OUTSEL Mask */ + +#define SC_EGT_EGT_Pos (0) /*!< SC_T::EGT: EGT Position */ +#define SC_EGT_EGT_Msk (0xfful << SC_EGT_EGT_Pos) /*!< SC_T::EGT: EGT Mask */ + +#define SC_RXTOUT_RFTM_Pos (0) /*!< SC_T::RXTOUT: RFTM Position */ +#define SC_RXTOUT_RFTM_Msk (0x1fful << SC_RXTOUT_RFTM_Pos) /*!< SC_T::RXTOUT: RFTM Mask */ + +#define SC_ETUCTL_ETURDIV_Pos (0) /*!< SC_T::ETUCTL: ETURDIV_ Position */ +#define SC_ETUCTL_ETURDIV_Msk (0xffful << SC_ETUCTL_ETURDIV_Pos) /*!< SC_T::ETUCTL: ETURDIV_ Mask */ + +#define SC_ETUCTL_CMPEN_Pos (15) /*!< SC_T::ETUCTL: CMPEN_ Position */ +#define SC_ETUCTL_CMPEN_Msk (0x1ul << SC_ETUCTL_CMPEN_Pos) /*!< SC_T::ETUCTL: CMPEN_ Mask */ + +#define SC_INTEN_RDAIEN_Pos (0) /*!< SC_T::INTEN: RDAIEN Position */ +#define SC_INTEN_RDAIEN_Msk (0x1ul << SC_INTEN_RDAIEN_Pos) /*!< SC_T::INTEN: RDAIEN Mask */ + +#define SC_INTEN_TBEIEN_Pos (1) /*!< SC_T::INTEN: TBEIEN Position */ +#define SC_INTEN_TBEIEN_Msk (0x1ul << SC_INTEN_TBEIEN_Pos) /*!< SC_T::INTEN: TBEIEN Mask */ + +#define SC_INTEN_TERRIEN_Pos (2) /*!< SC_T::INTEN: TERRIEN Position */ +#define SC_INTEN_TERRIEN_Msk (0x1ul << SC_INTEN_TERRIEN_Pos) /*!< SC_T::INTEN: TERRIEN Mask */ + +#define SC_INTEN_TMR0IEN_Pos (3) /*!< SC_T::INTEN: TMR0IEN_Position */ +#define SC_INTEN_TMR0IEN_Msk (0x1ul << SC_INTEN_TMR0IEN_Pos) /*!< SC_T::INTEN: TMR0IEN Mask */ + +#define SC_INTEN_TMR1IEN_Pos (4) /*!< SC_T::INTEN: TMR1IEN Position */ +#define SC_INTEN_TMR1IEN_Msk (0x1ul << SC_INTEN_TMR1IEN_Pos) /*!< SC_T::INTEN: TMR1IEN Mask */ + +#define SC_INTEN_TMR2IEN_Pos (5) /*!< SC_T::INTEN: TMR2IEN Position */ +#define SC_INTEN_TMR2IEN_Msk (0x1ul << SC_INTEN_TMR2IEN_Pos) /*!< SC_T::INTEN: TMR2IEN Mask */ + +#define SC_INTEN_BGTIEN_Pos (6) /*!< SC_T::INTEN: BGTIEN Position */ +#define SC_INTEN_BGTIEN_Msk (0x1ul << SC_INTEN_BGTIEN_Pos) /*!< SC_T::INTEN: BGTIEN Mask */ + +#define SC_INTEN_CDIEN_Pos (7) /*!< SC_T::INTEN: CDIEN Position */ +#define SC_INTEN_CDIEN_Msk (0x1ul << SC_INTEN_CDIEN_Pos) /*!< SC_T::INTEN: CDIEN Mask */ + +#define SC_INTEN_INITIEN_Pos (8) /*!< SC_T::INTEN: INITIEN Position */ +#define SC_INTEN_INITIEN_Msk (0x1ul << SC_INTEN_INITIEN_Pos) /*!< SC_T::INTEN: INITIEN Mask */ + +#define SC_INTEN_RXTOIF_Pos (9) /*!< SC_T::INTEN: RXTOIF Position */ +#define SC_INTEN_RXTOIF_Msk (0x1ul << SC_INTEN_RXTOIF_Pos) /*!< SC_T::INTEN: RXTOIF Mask */ + +#define SC_INTEN_ACERRIEN_Pos (10) /*!< SC_T::INTEN: ACERRIEN Position */ +#define SC_INTEN_ACERRIEN_Msk (0x1ul << SC_INTEN_ACERRIEN_Pos) /*!< SC_T::INTEN: ACERRIEN Mask */ + +#define SC_INTSTS_RDAIF_Pos (0) /*!< SC_T::INTSTS: RDAIF Position */ +#define SC_INTSTS_RDAIF_Msk (0x1ul << SC_INTSTS_RDAIF_Pos) /*!< SC_T::INTSTS: RDAIF Mask */ + +#define SC_INTSTS_TBEIF_Pos (1) /*!< SC_T::INTSTS: TBEIF Position */ +#define SC_INTSTS_TBEIF_Msk (0x1ul << SC_INTSTS_TBEIF_Pos) /*!< SC_T::INTSTS: TBEIF Mask */ + +#define SC_INTSTS_TERRIF_Pos (2) /*!< SC_T::INTSTS: TERRIF Position */ +#define SC_INTSTS_TERRIF_Msk (0x1ul << SC_INTSTS_TERRIF_Pos) /*!< SC_T::INTSTS: TERRIF Mask */ + +#define SC_INTSTS_TMR0IF_Pos (3) /*!< SC_T::INTSTS: TMR0IF Position */ +#define SC_INTSTS_TMR0IF_Msk (0x1ul << SC_INTSTS_TMR0IF_Pos) /*!< SC_T::INTSTS: TMR0IF Mask */ + +#define SC_INTSTS_TMR1IF_Pos (4) /*!< SC_T::INTSTS: TMR1IF Position */ +#define SC_INTSTS_TMR1IF_Msk (0x1ul << SC_INTSTS_TMR1IF_Pos) /*!< SC_T::INTSTS: TMR1IF Mask */ + +#define SC_INTSTS_TMR2IF_Pos (5) /*!< SC_T::INTSTS: TMR2IF Position */ +#define SC_INTSTS_TMR2IF_Msk (0x1ul << SC_INTSTS_TMR2IF_Pos) /*!< SC_T::INTSTS: TMR2IF Mask */ + +#define SC_INTSTS_BGTIF_Pos (6) /*!< SC_T::INTSTS: BGTIF Position */ +#define SC_INTSTS_BGTIF_Msk (0x1ul << SC_INTSTS_BGTIF_Pos) /*!< SC_T::INTSTS: BGTIF Mask */ + +#define SC_INTSTS_CDIF_Pos (7) /*!< SC_T::INTSTS: CDIF Position */ +#define SC_INTSTS_CDIF_Msk (0x1ul << SC_INTSTS_CDIF_Pos) /*!< SC_T::INTSTS: CDIF Mask */ + +#define SC_INTSTS_INITIF_Pos (8) /*!< SC_T::INTSTS: INITIF Position */ +#define SC_INTSTS_INITIF_Msk (0x1ul << SC_INTSTS_INITIF_Pos) /*!< SC_T::INTSTS: INITIF Mask */ + +#define SC_INTSTS_RBTOIF_Pos (9) /*!< SC_T::INTSTS: RBTOIF Position */ +#define SC_INTSTS_RBTOIF_Msk (0x1ul << SC_INTSTS_RBTOIF_Pos) /*!< SC_T::INTSTS: RBTOIF Mask */ + +#define SC_INTSTS_ACERRIF_Pos (10) /*!< SC_T::INTSTS: ACERRIF Position */ +#define SC_INTSTS_ACERRIF_Msk (0x1ul << SC_INTSTS_ACERRIF_Pos) /*!< SC_T::INTSTS: ACERRIF Mask */ + +#define SC_STATUS_RXOV_Pos (0) /*!< SC_T::STATUS: RXO Position */ +#define SC_STATUS_RXOV_Msk (0x1ul << SC_STATUS_RXOV_Pos) /*!< SC_T::STATUS: RXO Mask */ + +#define SC_STATUS_RXEMPTY_Pos (1) /*!< SC_T::STATUS: RXEMPTY Position */ +#define SC_STATUS_RXEMPTY_Msk (0x1ul << SC_STATUS_RXEMPTY_Pos) /*!< SC_T::STATUS: RXEMPTY Mask */ + +#define SC_STATUS_RXFULL_Pos (2) /*!< SC_T::STATUS: RXFULL Position */ +#define SC_STATUS_RXFULL_Msk (0x1ul << SC_STATUS_RXFULL_Pos) /*!< SC_T::STATUS: RXFULL Mask */ + +#define SC_STATUS_PEF_Pos (4) /*!< SC_T::STATUS: PEF Position */ +#define SC_STATUS_PEF_Msk (0x1ul << SC_STATUS_PEF_Pos) /*!< SC_T::STATUS: PEF Mask */ + +#define SC_STATUS_FEF_Pos (5) /*!< SC_T::STATUS: FEF Position */ +#define SC_STATUS_FEF_Msk (0x1ul << SC_STATUS_FEF_Pos) /*!< SC_T::STATUS: FEF Mask */ + +#define SC_STATUS_BEF_Pos (6) /*!< SC_T::STATUS: BEF Position */ +#define SC_STATUS_BEF_Msk (0x1ul << SC_STATUS_BEF_Pos) /*!< SC_T::STATUS: BEF Mask */ + +#define SC_STATUS_TXOV_Pos (8) /*!< SC_T::STATUS: TXOV Position */ +#define SC_STATUS_TXOV_Msk (0x1ul << SC_STATUS_TXOV_Pos) /*!< SC_T::STATUS: TXOV Mask */ + +#define SC_STATUS_TXEMPTY_Pos (9) /*!< SC_T::STATUS: TXEMPTY Position */ +#define SC_STATUS_TXEMPTY_Msk (0x1ul << SC_STATUS_TXEMPTY_Pos) /*!< SC_T::STATUS: TXEMPTY Mask */ + +#define SC_STATUS_TXFULL_Pos (10) /*!< SC_T::STATUS: TXFULL Position */ +#define SC_STATUS_TXFULL_Msk (0x1ul << SC_STATUS_TXFULL_Pos) /*!< SC_T::STATUS: TXFULL Mask */ + +#define SC_STATUS_CREMOVE_Pos (11) /*!< SC_T::STATUS: CREMOVE Position */ +#define SC_STATUS_CREMOVE_Msk (0x1ul << SC_STATUS_CREMOVE_Pos) /*!< SC_T::STATUS: CREMOVE Mask */ + +#define SC_STATUS_CINSERT_Pos (12) /*!< SC_T::STATUS: CINSERT Position */ +#define SC_STATUS_CINSERT_Msk (0x1ul << SC_STATUS_CINSERT_Pos) /*!< SC_T::STATUS: CINSERT Mask */ + +#define SC_STATUS_CDPINSTS_Pos (13) /*!< SC_T::STATUS: CDPINSTS Position */ +#define SC_STATUS_CDPINSTS_Msk (0x1ul << SC_STATUS_CDPINSTS_Pos) /*!< SC_T::STATUS: CDPINSTS Mask */ + +#define SC_STATUS_RXPOINT_Pos (16) /*!< SC_T::STATUS: RXPOINT Position */ +#define SC_STATUS_RXPOINT_Msk (0x3ul << SC_STATUS_RXPOINT_Pos) /*!< SC_T::STATUS: RXPOINT Mask */ + +#define SC_STATUS_RXRERR_Pos (21) /*!< SC_T::STATUS: RXRERR Position */ +#define SC_STATUS_RXRERR_Msk (0x1ul << SC_STATUS_RXRERR_Pos) /*!< SC_T::STATUS: RXRERR Mask */ + +#define SC_STATUS_RXOVERR_Pos (22) /*!< SC_T::STATUS: RXOVERR Position */ +#define SC_STATUS_RXOVERR_Msk (0x1ul << SC_STATUS_RXOVERR_Pos) /*!< SC_T::STATUS: RXOVERR Mask */ + +#define SC_STATUS_RXACT_Pos (23) /*!< SC_T::STATUS: RXACT Position */ +#define SC_STATUS_RXACT_Msk (0x1ul << SC_STATUS_RXACT_Pos) /*!< SC_T::STATUS: RXACT Msk */ + +#define SC_STATUS_TXPOINT_Pos (24) /*!< SC_T::STATUS: TXPOINT Position */ +#define SC_STATUS_TXPOINT_Msk (0x3ul << SC_STATUS_TXPOINT_Pos) /*!< SC_T::STATUS: TXPOINT Msk */ + +#define SC_STATUS_TXRERR_Pos (29) /*!< SC_T::STATUS: TXRERR Position */ +#define SC_STATUS_TXRERR_Msk (0x1ul << SC_STATUS_TXRERR_Pos) /*!< SC_T::STATUS: TXRERR Msk */ + +#define SC_STATUS_TXOVERR_Pos (30) /*!< SC_T::STATUS: TXOVERR_ Position */ +#define SC_STATUS_TXOVERR_Msk (0x1ul << SC_STATUS_TXOVERR_Pos) /*!< SC_T::STATUS: TXOVERR_ Msk */ + +#define SC_STATUS_TXACT_Pos (31) /*!< SC_T::STATUS: TXACT Position */ +#define SC_STATUS_TXACT_Msk (0x1ul << SC_STATUS_TXACT_Pos) /*!< SC_T::STATUS: TXACT Msk */ + +#define SC_PINCTL_PWREN_Pos (0) /*!< SC_T::PINCTL: PWREN Position */ +#define SC_PINCTL_PWREN_Msk (0x1ul << SC_PINCTL_PWREN_Pos) /*!< SC_T::PINCTL: PWREN Msk */ + +#define SC_PINCTL_SCRST_Pos (1) /*!< SC_T::PINCTL: SCRST Position */ +#define SC_PINCTL_SCRST_Msk (0x1ul << SC_PINCTL_SCRST_Pos) /*!< SC_T::PINCTL: SCRST Msk */ + +#define SC_PINCTL_CSTOPLV_Pos (5) /*!< SC_T::PINCTL: CSTOPLV Position */ +#define SC_PINCTL_CSTOPLV_Msk (0x1ul << SC_PINCTL_CSTOPLV_Pos) /*!< SC_T::PINCTL: CSTOPLV Msk */ + +#define SC_PINCTL_CLKKEEP_Pos (6) /*!< SC_T::PINCTL: CLKKEEP Position */ +#define SC_PINCTL_CLKKEEP_Msk (0x1ul << SC_PINCTL_CLKKEEP_Pos) /*!< SC_T::PINCTL: CLKKEEP Msk */ + +#define SC_PINCTL_SCDOUT_Pos (9) /*!< SC_T::PINCTL: SCDOUT Position */ +#define SC_PINCTL_SCDOUT_Msk (0x1ul << SC_PINCTL_SCDOUT_Pos) /*!< SC_T::PINCTL: SCDOUT Msk */ + +#define SC_PINCTL_PWRINV_Pos (11) /*!< SC_T::PINCTL: PWRINV Position */ +#define SC_PINCTL_PWRINV_Msk (0x1ul << SC_PINCTL_PWRINV_Pos) /*!< SC_T::PINCTL: PWRINV Msk */ + +#define SC_PINCTL_SCDOSTS_Pos (12) /*!< SC_T::PINCTL: SCDOSTS Position */ +#define SC_PINCTL_SCDOSTS_Msk (0x1ul << SC_PINCTL_SCDOSTS_Pos) /*!< SC_T::PINCTL: SCDOSTS Msk */ + +#define SC_PINCTL_DATSTS_Pos (16) /*!< SC_T::PINCTL: DATSTS Position */ +#define SC_PINCTL_DATSTS_Msk (0x1ul << SC_PINCTL_DATSTS_Pos) /*!< SC_T::PINCTL: DATSTS Msk */ + +#define SC_PINCTL_PWRSTS_Pos (17) /*!< SC_T::PINCTL: PWRSTS Position */ +#define SC_PINCTL_PWRSTS_Msk (0x1ul << SC_PINCTL_PWRSTS_Pos) /*!< SC_T::PINCTL: PWRSTS Msk */ + +#define SC_PINCTL_RSTSTS_Pos (18) /*!< SC_T::PINCTL: RSTSTS Position */ +#define SC_PINCTL_RSTSTS_Msk (0x1ul << SC_PINCTL_RSTSTS_Pos) /*!< SC_T::PINCTL: RSTSTS Msk */ + +#define SC_PINCTL_SYNC_Pos (30) /*!< SC_T::PINCTL: SYNC Position */ +#define SC_PINCTL_SYNC_Msk (0x1ul << SC_PINCTL_SYNC_Pos) /*!< SC_T::PINCTL: SYNC Msk */ + +#define SC_PINCTL_LOOPBK_Pos (31) /*!< SC_T::PINCTL: LOOPBK Position */ +#define SC_PINCTL_LOOPBK_Msk (0x1ul << SC_PINCTL_LOOPBK_Pos) /*!< SC_T::PINCTL: LOOPBK Msk */ + +#define SC_TMRCTL0_CNT_Pos (0) /*!< SC_T::TMRCTL0: CNT Position */ +#define SC_TMRCTL0_CNT_Msk (0xfffffful << SC_TMRCTL0_CNT_Pos) /*!< SC_T::TMRCTL0: CNT Msk */ + +#define SC_TMRCTL0_OPMODE_Pos (24) /*!< SC_T::TMRCTL0: OPMODE Position */ +#define SC_TMRCTL0_OPMODE_Msk (0xful << SC_TMRCTL0_OPMODE_Pos) /*!< SC_T::TMRCTL0: OPMODE Msk */ + +#define SC_TMRCTL1_CNT_Pos (0) /*!< SC_T::TMRCTL1: CNT Position */ +#define SC_TMRCTL1_CNT_Msk (0xfful << SC_TMRCTL1_CNT_Pos) /*!< SC_T::TMRCTL1: CNT Msk */ + +#define SC_TMRCTL1_OPMODE_Pos (24) /*!< SC_T::TMRCTL1: OPMODE Position */ +#define SC_TMRCTL1_OPMODE_Msk (0xful << SC_TMRCTL1_OPMODE_Pos) /*!< SC_T::TMRCTL1: OPMODE Msk */ + +#define SC_TMRCTL2_CNT_Pos (0) /*!< SC_T::TMRCTL2: CNT Position */ +#define SC_TMRCTL2_CNT_Msk (0xfful << SC_TMRCTL2_CNT_Pos) /*!< SC_T::TMRCTL2: CNT Msk */ + +#define SC_TMRCTL2_OPMODE_Pos (24) /*!< SC_T::TMRCTL2: OPMODE Position */ +#define SC_TMRCTL2_OPMODE_Msk (0xful << SC_TMRCTL2_OPMODE_Pos) /*!< SC_T::TMRCTL2: OPMODE Msk */ + +#define SC_UARTCTL_UARTEN_Pos (0) /*!< SC_T::UARTCTL: UARTEN Position */ +#define SC_UARTCTL_UARTEN_Msk (0x1ul << SC_UARTCTL_UARTEN_Pos) /*!< SC_T::UARTCTL: UARTEN Msk */ + +#define SC_UARTCTL_WLS_Pos (4) /*!< SC_T::UARTCTL: WLS Position */ +#define SC_UARTCTL_WLS_Msk (0x3ul << SC_UARTCTL_WLS10_Pos) /*!< SC_T::UARTCTL: WLS Msk */ + +#define SC_UARTCTL_PBOFF_Pos (6) /*!< SC_T::UARTCTL: PBOFF Position */ +#define SC_UARTCTL_PBOFF_Msk (0x1ul << SC_UARTCTL_PBOFF_Pos) /*!< SC_T::UARTCTL: PBOFF Msk */ + +#define SC_UARTCTL_OPE_Pos (7) /*!< SC_T::UARTCTL: OPE Position */ +#define SC_UARTCTL_OPE_Msk (0x1ul << SC_UARTCTL_OPE_Pos) /*!< SC_T::UARTCTL: OPE Msk */ + +#define SC_TMRDAT0_CNT0_Pos (0) /*!< SC_T::TMRDAT0: CNT0 Position */ +#define SC_TMRDAT0_CNT0_Msk (0xfffffful << SC_TMRDAT0_CNT0_Pos) /*!< SC_T::TMRDAT0: CNT0 Msk */ + +#define SC_TMRDAT1_2_CNT1_Pos (0) /*!< SC_T::TMRDAT1_2: CNT1 Position */ +#define SC_TMRDAT1_2_CNT1_Msk (0xfful << SC_TMRDAT1_2_CNT1_Pos) /*!< SC_T::TMRDAT1_2: CNT1 Msk */ + +#define SC_TMRDAT1_2_CNT2_Pos (8) /*!< SC_T::TMRDAT1_2: CNT2 Position */ +#define SC_TMRDAT1_2_CNT2_Msk (0xfful << SC_TMRDAT1_2_CNT2_Pos) /*!< SC_T::TMRDAT1_2: CNT2 Msk */ + +/**@}*/ /* SC_CONST */ +/**@}*/ /* end of SC register group */ + + +/*---------------------- Serial Peripheral Interface Controller -------------------------*/ +/** + @addtogroup SPI Serial Peripheral Interface Controller(SPI) + Memory Mapped Structure for SPI Controller +@{ */ + + +typedef struct +{ + + +/** + * @var SPI_T::CTL + * Offset: 0x00 Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |SPIEN |SPI Transfer Control Enable Bit + * | | |In Master mode, the transfer will start when there is data in the FIFO buffer after this is set to 1. + * | | |In Slave mode, this device is ready to receive data when this bit is set to 1. + * | | |0 = Transfer control Disabled. + * | | |1 = Transfer control Enabled. + * | | |Note: Before changing the configurations of SPI_CTL, SPI_CLKDIV, SPI_SSCTL and SPI_FIFOCTL registers, user shall clear the SPIEN (SPI_CTL[0]) and confirm the SPIENSTS (SPI_STATUS[15]) is 0. + * |[1] |RXNEG |Receive On Negative Edge + * | | |0 = Received data input signal is latched on the rising edge of SPI bus clock. + * | | |1 = Received data input signal is latched on the falling edge of SPI bus clock. + * |[2] |TXNEG |Transmit On Negative Edge + * | | |0 = Transmitted data output signal is changed on the rising edge of SPI bus clock. + * | | |1 = Transmitted data output signal is changed on the falling edge of SP bus clock. + * |[3] |CLKPOL |Clock Polarity + * | | |0 = SPI bus clock is idle low. + * | | |1 = SPI bus clock is idle high. + * |[7:4] |SUSPITV |Suspend Interval (Master Only) + * | | |The four bits provide configurable suspend interval between two successive transmit/receive transaction in a transfer. + * | | |The definition of the suspend interval is the interval between the last clock edge of the preceding transaction word and the first clock edge of the following transaction word. + * | | |The default value is 0x3. + * | | |The period of the suspend interval is obtained according to the following equation. + * | | |(SUSPITV[3:0] + 0.5) * period of SPICLK clock cycle + * | | |Example: + * | | |SUSPITV = 0x0 ... 0.5 SPICLK clock cycle. + * | | |SUSPITV = 0x1 ... 1.5 SPICLK clock cycle. + * | | |... + * | | |SUSPITV = 0xE ... 14.5 SPICLK clock cycle. + * | | |SUSPITV = 0xF ... 15.5 SPICLK clock cycle. + * |[12:8] |DWIDTH |Data Width + * | | |This field specifies how many bits can be transmitted / received in one transaction. + * | | |The minimum bit length is 8 bits and can up to 32 bits. + * | | |DWIDTH = 0x08 ... 8 bits. + * | | |DWIDTH = 0x09 ... 9 bits. + * | | |... + * | | |DWIDTH = 0x1F ... 31 bits. + * | | |DWIDTH = 0x00 ... 32 bits. + * |[13] |LSB |Send LSB First + * | | |0 = The MSB, which bit of transmit/receive register depends on the setting of DWIDTH, is transmitted/received first. + * | | |1 = The LSB, bit 0 of the SPI TX register, is sent first to the SPI data output pin, and the first bit received from the SPI data input pin will be put in the LSB position of the RX register (bit 0 of SPI_RX). + * |[16] |TWOBIT |2-Bit Transfer Mode Enable Bit (Only Supported in SPI0) + * | | |0 = 2-Bit Transfer mode Disabled. + * | | |1 = 2-Bit Transfer mode Enabled. + * | | |Note: When 2-Bit Transfer mode is enabled, the first serial transmitted bit data is from the first FIFO buffer data, and the 2nd + * | | |serial transmitted bit data is from the second FIFO buffer data. + * | | |As the same as transmitted function, the first received bit data is stored into the first FIFO buffer and the 2nd received bit data is stored into the second FIFO buffer at the same time. + * |[17] |UNITIEN |Unit Transfer Interrupt Enable Bit + * | | |0 = SPI unit transfer interrupt Disabled. + * | | |1 = SPI unit transfer interrupt Enabled. + * |[18] |SLAVE |Slave Mode Control + * | | |0 = Master mode. + * | | |1 = Slave mode. + * |[19] |REORDER |Byte Reorder Function Enable Bit + * | | |0 = Byte Reorder function Disabled. + * | | |1 = Byte Reorder function Enabled. A byte suspend interval will be inserted among each byte. + * | | |The period of the byte suspend interval depends on the setting of SUSPITV. + * | | |Note: + * | | |1. Byte Reorder function is only available if DWIDTH is defined as 16, 24, and 32 bits. + * | | |2. Byte Reorder function is not supported when the Quad or Dual I/O mode is enabled. + * |[20] |QDIODIR |Quad Or Dual I/O Mode Direction Control (Only Supported in SPI0) + * | | |0 = Quad or Dual Input mode. + * | | |1 = Quad or Dual Output mode. + * |[21] |DUALIOEN |Dual I/O Mode Enable Bit (Only Supported in SPI0) + * | | |0 = Dual I/O mode Disabled. + * | | |1 = Dual I/O mode Enabled. + * |[22] |QUADIOEN |Quad I/O Mode Enable Bit (Only Supported in SPI0) + * | | |0 = Quad I/O mode Disabled. + * | | |1 = Quad I/O mode Enabled. + * @var SPI_T::CLKDIV + * Offset: 0x04 Clock Divider Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |DIVIDER |Clock Divider + * | | |The value in this field is the frequency divider for generating the peripheral clock, fspi_eclk, and the SPI bus clock of SPI master. + * | | |The frequency is obtained according to the following equation. + * | | | fspi_eclk = fspi_clock_src / (DIVIDER + 1) + * | | |where fspi_clock_src is the peripheral clock source, which is defined in the clock control register CLK_CLKSEL2. + * @var SPI_T::SSCTL + * Offset: 0x08 Slave Select Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |SS |Slave Selection Control (Master Only) + * | | |If AUTOSS bit is cleared to 0, + * | | |0 = set the SPIn_SS line to inactive state. + * | | |1 = set the SPIn_SS line to active state + * | | |If the AUTOSS bit is set to 1, + * | | |0 = Keep the SPIn_SS line at inactive state. + * | | |1 = SPIn_SS line will be automatically driven to active state for the duration of data transfer, and will be driven to inactive state for the rest of the time. + * | | |The active state of SPIn_SS is specified in SSACTPOL (SPI_SSCTL[2]). + * |[2] |SSACTPOL |Slave Selection Active Polarity + * | | |This bit defines the active polarity of slave selection signal (SPIn_SS). + * | | |0 = The slave selection signal SPIn_SS is active low. + * | | |1 = The slave selection signal SPIn_SS is active high. + * |[3] |AUTOSS |Automatic Slave Selection Function Enable Bit (Master Only) + * | | |0 = Automatic slave selection function Disabled. + * | | |Slave selection signal will be asserted/de-asserted according to SS (SPI_SSCTL[0]). + * | | |1 = Automatic slave selection function Enabled. + * |[4] |SLV3WIRE |Slave 3-Wire Mode Enable Bit + * | | |Slave 3-wire mode is only available in SPI0. + * | | |In Slave 3-wire mode, the SPI controller can work with 3-wire interface including SPI0_CLK, SPI0_MISO, and SPI0_MOSI. + * | | |0 = 4-wire bi-direction interface. + * | | |1 = 3-wire bi-direction interface. + * |[5] |SLVTOIEN |Slave Mode Time-Out Interrupt Enable Bit (Only Supported in SPI0) + * | | |0 = Slave mode time-out interrupt Disabled. + * | | |1 = Slave mode time-out interrupt Enabled. + * |[6] |SLVTORST |Slave Mode Time-Out Reset Control (Only Supported in SPI0) + * | | |0 = When Slave mode time-out event occurs, the TX and RX control circuit will not be reset. + * | | |1 = When Slave mode time-out event occurs, the TX and RX control circuit will be reset by hardware. + * |[8] |SLVBEIEN |Slave Mode Bit Count Error Interrupt Enable Bit + * | | |0 = Slave mode bit count error interrupt Disabled. + * | | |1 = Slave mode bit count error interrupt Enabled. + * |[9] |SLVURIEN |Slave Mode TX Under Run Interrupt Enable Bit + * | | |0 = Slave mode TX under run interrupt Disabled. + * | | |1 = Slave mode TX under run interrupt Enabled. + * |[12] |SSACTIEN |Slave Select Active Interrupt Enable Bit + * | | |0 = Slave select active interrupt Disabled. + * | | |1 = Slave select active interrupt Enabled. + * |[13] |SSINAIEN |Slave Select Inactive Interrupt Enable Bit + * | | |0 = Slave select inactive interrupt Disabled. + * | | |1 = Slave select inactive interrupt Enabled. + * |[31:16] |SLVTOCNT |Slave Mode Time-Out Period (Only Supported in SPI0) + * | | |In Slave mode, these bits indicate the time-out period when there is bus clock input during slave select active. + * | | |The clock source of the time-out counter is Slave peripheral clock. + * | | |If the value is 0, it indicates the slave mode time-out function is disabled. + * @var SPI_T::PDMACTL + * Offset: 0x0C SPI PDMA Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |TXPDMAEN |Transmit PDMA Enable Bit + * | | |0 = Transmit PDMA function Disabled. + * | | |1 = Transmit PDMA function Enabled. + * | | |Note: In SPI master mode with full duplex transfer, if both TX and RX PDMA functions are enabled, RX PDMA function cannot be enabled prior to TX PDMA function. + * | | |User can enable TX PDMA function firstly or enable both functions simultaneously. + * |[1] |RXPDMAEN |Receive PDMA Enable Bit + * | | |0 = Receiver PDMA function Disabled. + * | | |1 = Receiver PDMA function Enabled. + * |[2] |PDMARST |PDMA Reset + * | | |0 = No effect. + * | | |1 = Reset the PDMA control logic of the SPI controller. This bit will be automatically cleared to 0. + * @var SPI_T::FIFOCTL + * Offset: 0x10 SPI FIFO Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |RXRST |Receive Reset + * | | |0 = No effect. + * | | |1 = Reset receive FIFO pointer and receive circuit. The RXFULL bit will be cleared to 0 and the RXEMPTY bit will be set to 1. + * | | |This bit will be cleared to 0 by hardware about 3 system clock cycles + 3 peripheral clock cycles after it is set to 1. + * | | |User can read TXRXRST (SPI_STATUS[23]) to check if reset is accomplished or not. + * | | |Note: If there is slave receive time-out event, the RXRST will be set 1 when the SLVTORST (SPI_SSCTL[6]) is enabled. + * |[1] |TXRST |Transmit Reset + * | | |0 = No effect. + * | | |1 = Reset transmit FIFO pointer and transmit circuit. The TXFULL bit will be cleared to 0 and the TXEMPTY bit will be set to 1. + * | | |This bit will be cleared to 0 by hardware about 3 system clock cycles + 3 peripheral clock cycles after it is set to 1. + * | | |User can read TXRXRST (SPI_STATUS[23]) to check if reset is accomplished or not. + * | | |Note: If there is slave receive time-out event, the TXRST will be set to 1 when the SLVTORST (SPI_SSCTL[6]) is enabled. + * |[2] |RXTHIEN |Receive FIFO Threshold Interrupt Enable Bit + * | | |0 = RX FIFO threshold interrupt Disabled. + * | | |1 = RX FIFO threshold interrupt Enabled. + * |[3] |TXTHIEN |Transmit FIFO Threshold Interrupt Enable Bit + * | | |0 = TX FIFO threshold interrupt Disabled. + * | | |1 = TX FIFO threshold interrupt Enabled. + * |[4] |RXTOIEN |Slave Receive Time-Out Interrupt Enable Bit + * | | |0 = Receive time-out interrupt Disabled. + * | | |1 = Receive time-out interrupt Enabled. + * |[5] |RXOVIEN |Receive FIFO Overrun Interrupt Enable Bit + * | | |0 = Receive FIFO overrun interrupt Disabled. + * | | |1 = Receive FIFO overrun interrupt Enabled. + * |[6] |TXUFPOL |TX Underflow Data Polarity + * | | |0 = The SPI data out is keep 0 if there is TX underflow event in Slave mode. + * | | |1 = The SPI data out is keep 1 if there is TX underflow event in Slave mode. + * | | |Note: The TX underflow event occurs if there is not any data in TX FIFO when the slave selection signal is active. + * |[7] |TXUFIEN |TX Underflow Interrupt Enable Bit + * | | |In Slave mode, when TX underflow event occurs, this interrupt flag will be set to 1. + * | | |0 = Slave TX underflow interrupt Disabled. + * | | |1 = Slave TX underflow interrupt Enabled. + * |[8] |RXFBCLR |Receive FIFO Buffer Clear + * | | |0 = No effect. + * | | |1 = Clear receive FIFO pointer. The RXFULL bit will be cleared to 0 and the RXEMPTY bit will be set to 1. + * | | |This bit will be cleared to 0 by hardware about 1 system clock after it is set to 1. + * | | |Note: The RX shift register will not be cleared. + * |[9] |TXFBCLR |Transmit FIFO Buffer Clear + * | | |0 = No effect. + * | | |1 = Clear transmit FIFO pointer. The TXFULL bit will be cleared to 0 and the TXEMPTY bit will be set to 1. + * | | |This bit will be cleared to 0 by hardware about 1 system clock after it is set to 1. + * | | |Note: The TX shift register will not be cleared. + * |[26:24] |RXTH |Receive FIFO Threshold + * | | |If the valid data count of the receive FIFO buffer is larger than the RXTH setting, the RXTHIF bit will be set to 1, else the RXTHIF bit will be cleared to 0. + * | | |In SPI0, RXTH is a 3-bit wide configuration; in SPI1 and SPI2, 2-bit wide only (SPI_FIFOCTL[25:24]). + * |[30:28] |TXTH |Transmit FIFO Threshold + * | | |If the valid data count of the transmit FIFO buffer is less than or equal to the TXTH setting, the TXTHIF bit will be set to 1, else the TXTHIF bit will be cleared to 0. + * | | |In SPI0, TXTH is a 3-bit wide configuration; in SPI1 and SPI2, 2-bit wide only (SPI_FIFOCTL[29:28]). + * @var SPI_T::STATUS + * Offset: 0x14 SPI Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |BUSY |Busy Status (Read Only) + * | | |0 = SPI controller is in idle state. + * | | |1 = SPI controller is in busy state. + * | | |The following listing are the bus busy conditions: + * | | |a. SPI_CTL[0] = 1 and the TXEMPTY = 0. + * | | |b. For SPI Master mode, the TXEMPTY = 1 but the current transaction is not finished yet. + * | | |c. For SPI Slave mode, the SPI_CTL[0] = 1 and there is serial clock input into the SPI core logic when slave select is active. + * | | |d. For SPI Slave mode, the SPI_CTL[0] = 1 and the transmit buffer or transmit shift register is not empty even if the slave select is inactive. + * |[1] |UNITIF |Unit Transfer Interrupt Flag + * | | |0 = No transaction has been finished since this bit was cleared to 0. + * | | |1 = SPI controller has finished one unit transfer. + * | | |Note: This bit will be cleared by writing 1 to it. + * |[2] |SSACTIF |Slave Select Active Interrupt Flag + * | | |0 = Slave select active interrupt was cleared or not occurred. + * | | |1 = Slave select active interrupt event occurred. + * | | |Note: Only available in Slave mode. This bit will be cleared by writing 1 to it. + * |[3] |SSINAIF |Slave Select Inactive Interrupt Flag + * | | |0 = Slave select inactive interrupt was cleared or not occurred. + * | | |1 = Slave select inactive interrupt event occurred. + * | | |Note: Only available in Slave mode. This bit will be cleared by writing 1 to it. + * |[4] |SSLINE |Slave Select Line Bus Status (Read Only) + * | | |0 = The slave select line status is 0. + * | | |1 = The slave select line status is 1. + * | | |Note: This bit is only available in Slave mode. + * | | |If SSACTPOL (SPI_SSCTL[2]) is set 0, and the SSLINE is 1, the SPI slave select is in inactive status. + * |[5] |SLVTOIF |Slave Time-Out Interrupt Flag (Only Supported in SPI0) + * | | |When the Slave Select is active and the value of SLVTOCNT is not 0, as the bus clock is detected, the slave time-out counter in SPI controller logic will be started. + * | | |When the value of time-out counter is greater than or equal to the value of SLVTOCNT (SPI_SSCTL[31:16]) before one transaction is done, the slave time-out interrupt event will be asserted. + * | | |0 = Slave time-out is not active. + * | | |1 = Slave time-out is active. + * | | |Note: This bit will be cleared by writing 1 to it. + * |[6] |SLVBEIF |Slave Mode Bit Count Error Interrupt Flag + * | | |In Slave mode, when the slave select line goes to inactive state, if bit counter is mismatch with DWIDTH, this interrupt flag will be set to 1. + * | | |0 = No Slave mode bit count error event. + * | | |1 = Slave mode bit count error event occurs. + * | | |Note: If the slave select active but there is no any bus clock input, the SLVBCEIF also active when the slave select goes to inactive state. + * | | |This bit will be cleared by writing 1 to it. + * |[7] |SLVURIF |Slave Mode TX Under Run Interrupt Flag + * | | |In Slave mode, if TX underflow event occurs and the slave select line goes to inactive state, this interrupt flag will be set to 1. + * | | |0 = No Slave TX under run event. + * | | |1 = Slave TX under run occurs. + * | | |Note: This bit will be cleared by writing 1 to it. + * |[8] |RXEMPTY |Receive FIFO Buffer Empty Indicator (Read Only) + * | | |0 = Receive FIFO buffer is not empty. + * | | |1 = Receive FIFO buffer is empty. + * |[9] |RXFULL |Receive FIFO Buffer Full Indicator (Read Only) + * | | |0 = Receive FIFO buffer is not full. + * | | |1 = Receive FIFO buffer is full. + * |[10] |RXTHIF |Receive FIFO Threshold Interrupt Flag (Read Only) + * | | |0 = The valid data count within the RX FIFO buffer is smaller than or equal to the setting value of RXTH. + * | | |1 = The valid data count within the receive FIFO buffer is larger than the setting value of RXTH. + * |[11] |RXOVIF |Receive FIFO Overrun Interrupt Flag + * | | |When the receive FIFO buffer is full, the follow-up data will be dropped and this bit will be set to 1. + * | | |0 = No FIFO is over run. + * | | |1 = Receive FIFO over run. + * | | |Note: This bit will be cleared by writing 1 to it. + * |[12] |RXTOIF |Receive Time-Out Interrupt Flag + * | | |0 = No receive FIFO time-out event. + * | | |1 = Receive FIFO buffer is not empty and no read operation on receive FIFO buffer over 64 SPI clock period in Master mode or over 576 peripheral clock period in Slave mode. + * | | |When the received FIFO buffer is read by software, the time-out status will be cleared automatically. + * | | |Note: This bit will be cleared by writing 1 to it. + * |[15] |SPIENSTS |SPI Enable Status (Read Only) + * | | |0 = The SPI controller is disabled. + * | | |1 = The SPI controller is enabled. + * | | |Note: The SPI peripheral clock is asynchronous with the system clock. + * | | |In order to make sure the SPI control logic is disabled, this bit indicates the real status of SPI controller. + * |[16] |TXEMPTY |Transmit FIFO Buffer Empty Indicator (Read Only) + * | | |0 = Transmit FIFO buffer is not empty. + * | | |1 = Transmit FIFO buffer is empty. + * |[17] |TXFULL |Transmit FIFO Buffer Full Indicator (Read Only) + * | | |0 = Transmit FIFO buffer is not full. + * | | |1 = Transmit FIFO buffer is full. + * |[18] |TXTHIF |Transmit FIFO Threshold Interrupt Flag (Read Only) + * | | |0 = The valid data count within the transmit FIFO buffer is larger than the setting value of TXTH. + * | | |1 = The valid data count within the transmit FIFO buffer is less than or equal to the setting value of TXTH. + * |[19] |TXUFIF |TX Underflow Interrupt Flag + * | | |When the TX underflow event occurs, this bit will be set to 1, the state of data output pin depends on the setting of TXUFPOL. + * | | |0 = No effect. + * | | |1 = No data in Transmit FIFO and TX shift register when the slave selection signal is active. + * | | |Note 1: This bit will be cleared by writing 1 to it. + * | | |Note 2: If reset slave's transmission circuit when slave selection signal is active, this flag will be set to 1 after 2 peripheral clock cycles + 3 system clock cycles since the reset operation is done. + * |[23] |TXRXRST |TX or RX Reset Status (Read Only) + * | | |0 = The reset function of TXRST or RXRST is done. + * | | |1 = Doing the reset function of TXRST or RXRST. + * | | |Note: Both the reset operations of TXRST and RXRST need 3 system clock cycles + 2 peripheral clock cycles. + * | | |User can check the status of this bit to monitor the reset function is doing or done. + * |[27:24] |RXCNT |Receive FIFO Data Count (Read Only) + * | | |This bit field indicates the valid data count of receive FIFO buffer. + * |[31:28] |TXCNT |Transmit FIFO Data Count (Read Only) + * | | |This bit field indicates the valid data count of transmit FIFO buffer. + * @var SPI_T::TX + * Offset: 0x20 Data Transmit Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:0] |TX |Data Transmit Register + * | | |The data transmit registers pass through the transmitted data into the 8-/4-level transmit FIFO buffer. + * | | |The number of valid bits depends on the setting of DWIDTH (SPI_CTL[12:8]). + * | | |For example, if DWIDTH is set to 0x08, the bits TX[7:0] will be transmitted. + * | | |If DWIDTH is set to 0x00, the SPI controller will perform a 32-bit transfer. + * | | |Note: In Master mode, SPI controller will start to transfer after 5 peripheral clock cycles after user writes to this register. + * @var SPI_T::RX + * Offset: 0x30 Data Receive Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:0] |RX |Data Receive Register + * | | |There are 8-/4-level FIFO buffers in this controller. + * | | |The data receive register holds the data received from SPI data input pin. + * | | |If the RXEMPTY (SPI_STATUS[8]) is not set to 1, the receive FIFO buffers can be accessed through software by reading this register. + * | | |This is a read only register. + * @var SPI_T::I2SCTL + * Offset: 0x60 I2S Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |I2SEN |I2S Controller Enable Bit + * | | |0 = Disabled. + * | | |1 = Enabled. + * | | |Note: If enable this bit, I2Sn_BCLK will start to output in master mode. + * |[1] |TXEN |Transmit Enable Bit + * | | |0 = Data transmit Disabled. + * | | |1 = Data transmit Enabled. + * |[2] |RXEN |Receive Enable Bit + * | | |0 = Data receiving Disabled. + * | | |1 = Data receiving Enabled. + * |[3] |MUTE |Transmit Mute Enable Bit + * | | |0 = Transmit data is shifted from buffer. + * | | |1= Transmit channel zero. + * |[5:4] |WDWIDTH |Word Width + * | | |00 = data is 8-bit. + * | | |01 = data is 16-bit. + * | | |10 = data is 24-bit. + * | | |11 = data is 32-bit. + * |[6] |MONO |Monaural Data + * | | |0 = Data is stereo format. + * | | |1 = Data is monaural format. + * |[7] |ORDER |Stereo Data Order In FIFO + * | | |0 = Left channel data at high byte. + * | | |1 = Left channel data at low byte. + * |[8] |SLAVE |Slave Mode + * | | |I2S can operate as master or slave. + * | | |For Master mode, I2Sn_BCLK and I2Sn_LRCLK pins are output mode and send bit clock from NuMicro M451 series to Audio CODEC chip. + * | | |In Slave mode, I2Sn_BCLK and I2Sn_LRCLK pins are input mode and I2Sn_BCLK and I2Sn_LRCLK signals are received from outer Audio CODEC chip. + * | | |0 = Master mode. + * | | |1 = Slave mode. + * |[15] |MCLKEN |Master Clock Enable Bit + * | | |If MCLKEN is set to 1, I2S controller will generate master clock on I2Sn_MCLK pin for external audio devices. + * | | |0 = Master clock Disabled. + * | | |1 = Master clock Enabled. + * |[16] |RZCEN |Right Channel Zero Cross Detection Enable Bit + * | | |If this bit is set to 1, when right channel data sign bit change or next shift data bits are all 0 then RZCIF flag in SPI_I2SSTS register is set to 1. + * | | |This function is only available in transmit operation. + * | | |0 = Right channel zero cross detection Disabled. + * | | |1 = Right channel zero cross detection Enabled. + * |[17] |LZCEN |Left Channel Zero Cross Detection Enable Bit + * | | |If this bit is set to 1, when left channel data sign bit changes or next shift data bits are all 0 then LZCIF flag in SPI_I2SSTS register is set to 1. + * | | |This function is only available in transmit operation. + * | | |0 = Left channel zero cross detection Disabled. + * | | |1 = Left channel zero cross detection Enabled. + * |[23] |RXLCH |Receive Left Channel Enable Bit + * | | |When monaural format is selected (MONO = 1), I2S controller will receive right channel data if RXLCH is set to 0, and receive left channel data if RXLCH is set to 1. + * | | |0 = Receive right channel data in Mono mode. + * | | |1 = Receive left channel data in Mono mode. + * |[24] |RZCIEN |Right Channel Zero-Cross Interrupt Enable Bit + * | | |Interrupt occurs if this bit is set to 1 and right channel zero-cross event occurs. + * | | |0 = Interrupt Disabled. + * | | |1 = Interrupt Enabled. + * |[25] |LZCIEN |Left Channel Zero-Cross Interrupt Enable Bit + * | | |Interrupt occurs if this bit is set to 1 and left channel zero-cross event occurs. + * | | |0 = Interrupt Disabled. + * | | |1 = Interrupt Enabled. + * |[29:28] |FORMAT |Data Format Selection + * | | |00 = I2S data format. + * | | |01 = MSB justified data format. + * | | |10 = PCM mode A. + * | | |11 = PCM mode B. + * @var SPI_T::I2SCLK + * Offset: 0x64 I2S Clock Divider Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[5:0] |MCLKDIV |Master Clock Divider + * | | |If MCLKEN is set to 1, I2S controller will generate master clock for external audio devices. + * | | |The master clock rate, F_MCLK, is determined by the following expressions. + * | | |If MCLKDIV >= 1, F_MCLK = F_I2SCLK/(2x(MCLKDIV)). + * | | |If MCLKDIV = 0, F_MCLK = F_I2SCLK. + * | | |F_I2SCLK is the frequency of I2S peripheral clock. + * | | |In general, the master clock rate is 256 times sampling clock rate. + * |[16:8] |BCLKDIV |Bit Clock Divider + * | | |The I2S controller will generate bit clock in Master mode. + * | | |The bit clock rate, F_BCLK, is determined by the following expression. + * | | |F_BCLK = F_I2SCLK /(2x(BCLKDIV + 1)) , where F_I2SCLK is the frequency of I2S peripheral clock. + * @var SPI_T::I2SSTS + * Offset: 0x68 I2S Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[4] |RIGHT |Right Channel (Read Only) + * | | |This bit indicates the current transmit data is belong to which channel. + * | | |0 = Left channel. + * | | |1 = Right channel. + * |[8] |RXEMPTY |Receive FIFO Buffer Empty Indicator (Read Only) + * | | |0 = Receive FIFO buffer is not empty. + * | | |1 = Receive FIFO buffer is empty. + * |[9] |RXFULL |Receive FIFO Buffer Full Indicator (Read Only) + * | | |0 = Receive FIFO buffer is not full. + * | | |1 = Receive FIFO buffer is full. + * |[10] |RXTHIF |Receive FIFO Threshold Interrupt Flag (Read Only) + * | | |0 = The valid data count within the Rx FIFO buffer is smaller than or equal to the setting value of RXTH. + * | | |1 = The valid data count within the receive FIFO buffer is larger than the setting value of RXTH. + * | | |Note: If RXTHIEN = 1 and RXTHIF = 1, the SPI/I2S controller will generate a SPI interrupt request. + * |[11] |RXOVIF |Receive FIFO Overrun Interrupt Flag + * | | |When the receive FIFO buffer is full, the follow-up data will be dropped and this bit will be set to 1. + * | | |Note: This bit will be cleared by writing 1 to it. + * |[12] |RXTOIF |Receive Time-Out Interrupt Flag + * | | |0 = No receive FIFO time-out event. + * | | |1 = Receive FIFO buffer is not empty and no read operation on receive FIFO buffer over 64 SPI clock period in Master mode or over 576 peripheral clock period in Slave mode. + * | | |When the received FIFO buffer is read by software, the time-out status will be cleared automatically. + * | | |Note: This bit will be cleared by writing 1 to it. + * |[15] |I2SENSTS |I2S Enable Status (Read Only) + * | | |0 = The SPI/I2S control logic is disabled. + * | | |1 = The SPI/I2S control logic is enabled. + * | | |Note: The SPI peripheral clock is asynchronous with the system clock. + * | | |In order to make sure the SPI/I2S controller logic is disabled, this bit indicates the real status of SPI/I2S controller logic for user. + * |[16] |TXEMPTY |Transmit FIFO Buffer Empty Indicator (Read Only) + * | | |0 = Transmit FIFO buffer is not empty. + * | | |1 = Transmit FIFO buffer is empty. + * |[17] |TXFULL |Transmit FIFO Buffer Full Indicator (Read Only) + * | | |0 = Transmit FIFO buffer is not full. + * | | |1 = Transmit FIFO buffer is full. + * |[18] |TXTHIF |Transmit FIFO Threshold Interrupt Flag (Read Only) + * | | |0 = The valid data count within the transmit FIFO buffer is larger than the setting value of TXTH. + * | | |1 = The valid data count within the transmit FIFO buffer is less than or equal to the setting value of TXTH. + * | | |Note: If TXTHIEN = 1 and TXTHIF = 1, the SPI controller will generate a SPI interrupt request. + * |[19] |TXUFIF |Transmit FIFO Underflow Interrupt Flag + * | | |When the transmit FIFO buffer is empty and there is no datum written into the FIFO buffer, if there is more bus clock input, + * | | | the output data depends on the setting of TXUFPOL and this bit will be set to 1. + * | | |Note: This bit will be cleared by writing 1 to it. + * |[20] |RZCIF |Right Channel Zero Cross Interrupt Flag + * | | |0 = No zero cross event occurred on right channel. + * | | |1 = Zero cross event occurred on right channel. + * |[21] |LZCIF |Left Channel Zero Cross Interrupt Flag + * | | |0 = No zero cross event occurred on left channel. + * | | |1 = Zero cross event occurred on left channel. + * |[23] |TXRXRST |TX or RX Reset Status (Read Only) + * | | |0 = The reset function of TXRST or RXRST is done. + * | | |1 = Doing the reset function of TXRST or RXRST. + * | | |Note: Both the reset operations of TXRST and RXRST need 3 system clock cycles + 3 peripheral clock cycles. + * | | |User can check the status of this bit to monitor the reset function is doing or done. + * |[26:24] |RXCNT |Receive FIFO Data Count (Read Only) + * | | |This bit field indicates the valid data count of receive FIFO buffer. + * |[30:28] |TXCNT |Transmit FIFO Data Count (Read Only) + * | | |This bit field indicates the valid data count of transmit FIFO buffer. + */ + + __IO uint32_t CTL; /* Offset: 0x00 Control Register */ + __IO uint32_t CLKDIV; /* Offset: 0x04 Clock Divider Register */ + __IO uint32_t SSCTL; /* Offset: 0x08 Slave Select Control Register */ + __IO uint32_t PDMACTL; /* Offset: 0x0C SPI PDMA Control Register */ + __IO uint32_t FIFOCTL; /* Offset: 0x10 SPI FIFO Control Register */ + __IO uint32_t STATUS; /* Offset: 0x14 SPI Status Register */ + __I uint32_t RESERVE0[2]; + __O uint32_t TX; /* Offset: 0x20 Data Transmit Register */ + __I uint32_t RESERVE1[3]; + __I uint32_t RX; /* Offset: 0x30 Data Receive Register */ + __I uint32_t RESERVE2[11]; + __IO uint32_t I2SCTL; /* Offset: 0x60 I2S Control Register */ + __IO uint32_t I2SCLK; /* Offset: 0x64 I2S Clock Divider Control Register */ + __IO uint32_t I2SSTS; /* Offset: 0x68 I2S Status Register */ + +} SPI_T; + + + +/** + @addtogroup SPI_CONST SPI Bit Field Definition + Constant Definitions for SPI Controller +@{ */ + +#define SPI_CTL_SPIEN_Pos (0) /*!< SPI_T::CTL: SPIEN Position */ +#define SPI_CTL_SPIEN_Msk (0x1ul << SPI_CTL_SPIEN_Pos) /*!< SPI_T::CTL: SPIEN Mask */ + +#define SPI_CTL_RXNEG_Pos (1) /*!< SPI_T::CTL: RXNEG Position */ +#define SPI_CTL_RXNEG_Msk (0x1ul << SPI_CTL_RXNEG_Pos) /*!< SPI_T::CTL: RXNEG Mask */ + +#define SPI_CTL_TXNEG_Pos (2) /*!< SPI_T::CTL: TXNEG Position */ +#define SPI_CTL_TXNEG_Msk (0x1ul << SPI_CTL_TXNEG_Pos) /*!< SPI_T::CTL: TXNEG Mask */ + +#define SPI_CTL_CLKPOL_Pos (3) /*!< SPI_T::CTL: CLKPOL Position */ +#define SPI_CTL_CLKPOL_Msk (0x1ul << SPI_CTL_CLKPOL_Pos) /*!< SPI_T::CTL: CLKPOL Mask */ + +#define SPI_CTL_SUSPITV_Pos (4) /*!< SPI_T::CTL: SUSPITV Position */ +#define SPI_CTL_SUSPITV_Msk (0xful << SPI_CTL_SUSPITV_Pos) /*!< SPI_T::CTL: SUSPITV Mask */ + +#define SPI_CTL_DWIDTH_Pos (8) /*!< SPI_T::CTL: DWIDTH Position */ +#define SPI_CTL_DWIDTH_Msk (0x1ful << SPI_CTL_DWIDTH_Pos) /*!< SPI_T::CTL: DWIDTH Mask */ + +#define SPI_CTL_LSB_Pos (13) /*!< SPI_T::CTL: LSB Position */ +#define SPI_CTL_LSB_Msk (0x1ul << SPI_CTL_LSB_Pos) /*!< SPI_T::CTL: LSB Mask */ + +#define SPI_CTL_TWOBIT_Pos (16) /*!< SPI_T::CTL: TWOBIT Position */ +#define SPI_CTL_TWOBIT_Msk (0x1ul << SPI_CTL_TWOBIT_Pos) /*!< SPI_T::CTL: TWOBIT Mask */ + +#define SPI_CTL_UNITIEN_Pos (17) /*!< SPI_T::CTL: UNITIEN Position */ +#define SPI_CTL_UNITIEN_Msk (0x1ul << SPI_CTL_UNITIEN_Pos) /*!< SPI_T::CTL: UNITIEN Mask */ + +#define SPI_CTL_SLAVE_Pos (18) /*!< SPI_T::CTL: SLAVE Position */ +#define SPI_CTL_SLAVE_Msk (0x1ul << SPI_CTL_SLAVE_Pos) /*!< SPI_T::CTL: SLAVE Mask */ + +#define SPI_CTL_REORDER_Pos (19) /*!< SPI_T::CTL: REORDER Position */ +#define SPI_CTL_REORDER_Msk (0x1ul << SPI_CTL_REORDER_Pos) /*!< SPI_T::CTL: REORDER Mask */ + +#define SPI_CTL_QDIODIR_Pos (20) /*!< SPI_T::CTL: QDIODIR Position */ +#define SPI_CTL_QDIODIR_Msk (0x1ul << SPI_CTL_QDIODIR_Pos) /*!< SPI_T::CTL: QDIODIR Mask */ + +#define SPI_CTL_DUALIOEN_Pos (21) /*!< SPI_T::CTL: DUALIOEN Position */ +#define SPI_CTL_DUALIOEN_Msk (0x1ul << SPI_CTL_DUALIOEN_Pos) /*!< SPI_T::CTL: DUALIOEN Mask */ + +#define SPI_CTL_QUADIOEN_Pos (22) /*!< SPI_T::CTL: QUADIOEN Position */ +#define SPI_CTL_QUADIOEN_Msk (0x1ul << SPI_CTL_QUADIOEN_Pos) /*!< SPI_T::CTL: QUADIOEN Mask */ + +#define SPI_CLKDIV_DIVIDER_Pos (0) /*!< SPI_T::CLKDIV: DIVIDER Position */ +#define SPI_CLKDIV_DIVIDER_Msk (0xfful << SPI_CLKDIV_DIVIDER_Pos) /*!< SPI_T::CLKDIV: DIVIDER Mask */ + +#define SPI_SSCTL_SS_Pos (0) /*!< SPI_T::SSCTL: SS Position */ +#define SPI_SSCTL_SS_Msk (0x1ul << SPI_SSCTL_SS_Pos) /*!< SPI_T::SSCTL: SS Mask */ + +#define SPI_SSCTL_SSACTPOL_Pos (2) /*!< SPI_T::SSCTL: SSACTPOL Position */ +#define SPI_SSCTL_SSACTPOL_Msk (0x1ul << SPI_SSCTL_SSACTPOL_Pos) /*!< SPI_T::SSCTL: SSACTPOL Mask */ + +#define SPI_SSCTL_AUTOSS_Pos (3) /*!< SPI_T::SSCTL: AUTOSS Position */ +#define SPI_SSCTL_AUTOSS_Msk (0x1ul << SPI_SSCTL_AUTOSS_Pos) /*!< SPI_T::SSCTL: AUTOSS Mask */ + +#define SPI_SSCTL_SLV3WIRE_Pos (4) /*!< SPI_T::SSCTL: SLV3WIRE Position */ +#define SPI_SSCTL_SLV3WIRE_Msk (0x1ul << SPI_SSCTL_SLV3WIRE_Pos) /*!< SPI_T::SSCTL: SLV3WIRE Mask */ + +#define SPI_SSCTL_SLVTOIEN_Pos (5) /*!< SPI_T::SSCTL: SLVTOIEN Position */ +#define SPI_SSCTL_SLVTOIEN_Msk (0x1ul << SPI_SSCTL_SLVTOIEN_Pos) /*!< SPI_T::SSCTL: SLVTOIEN Mask */ + +#define SPI_SSCTL_SLVTORST_Pos (6) /*!< SPI_T::SSCTL: SLVTORST Position */ +#define SPI_SSCTL_SLVTORST_Msk (0x1ul << SPI_SSCTL_SLVTORST_Pos) /*!< SPI_T::SSCTL: SLVTORST Mask */ + +#define SPI_SSCTL_SLVBEIEN_Pos (8) /*!< SPI_T::SSCTL: SLVBEIEN Position */ +#define SPI_SSCTL_SLVBEIEN_Msk (0x1ul << SPI_SSCTL_SLVBEIEN_Pos) /*!< SPI_T::SSCTL: SLVBEIEN Mask */ + +#define SPI_SSCTL_SLVURIEN_Pos (9) /*!< SPI_T::SSCTL: SLVURIEN Position */ +#define SPI_SSCTL_SLVURIEN_Msk (0x1ul << SPI_SSCTL_SLVURIEN_Pos) /*!< SPI_T::SSCTL: SLVURIEN Mask */ + +#define SPI_SSCTL_SSACTIEN_Pos (12) /*!< SPI_T::SSCTL: SSACTIEN Position */ +#define SPI_SSCTL_SSACTIEN_Msk (0x1ul << SPI_SSCTL_SSACTIEN_Pos) /*!< SPI_T::SSCTL: SSACTIEN Mask */ + +#define SPI_SSCTL_SSINAIEN_Pos (13) /*!< SPI_T::SSCTL: SSINAIEN Position */ +#define SPI_SSCTL_SSINAIEN_Msk (0x1ul << SPI_SSCTL_SSINAIEN_Pos) /*!< SPI_T::SSCTL: SSINAIEN Mask */ + +#define SPI_SSCTL_SLVTOCNT_Pos (16) /*!< SPI_T::SSCTL: SLVTOCNT Position */ +#define SPI_SSCTL_SLVTOCNT_Msk (0xfffful << SPI_SSCTL_SLVTOCNT_Pos) /*!< SPI_T::SSCTL: SLVTOCNT Mask */ + +#define SPI_PDMACTL_TXPDMAEN_Pos (0) /*!< SPI_T::PDMACTL: TXPDMAEN Position */ +#define SPI_PDMACTL_TXPDMAEN_Msk (0x1ul << SPI_PDMACTL_TXPDMAEN_Pos) /*!< SPI_T::PDMACTL: TXPDMAEN Mask */ + +#define SPI_PDMACTL_RXPDMAEN_Pos (1) /*!< SPI_T::PDMACTL: RXPDMAEN Position */ +#define SPI_PDMACTL_RXPDMAEN_Msk (0x1ul << SPI_PDMACTL_RXPDMAEN_Pos) /*!< SPI_T::PDMACTL: RXPDMAEN Mask */ + +#define SPI_PDMACTL_PDMARST_Pos (2) /*!< SPI_T::PDMACTL: PDMARST Position */ +#define SPI_PDMACTL_PDMARST_Msk (0x1ul << SPI_PDMACTL_PDMARST_Pos) /*!< SPI_T::PDMACTL: PDMARST Mask */ + +#define SPI_FIFOCTL_RXRST_Pos (0) /*!< SPI_T::FIFOCTL: RXRST Position */ +#define SPI_FIFOCTL_RXRST_Msk (0x1ul << SPI_FIFOCTL_RXRST_Pos) /*!< SPI_T::FIFOCTL: RXRST Mask */ + +#define SPI_FIFOCTL_TXRST_Pos (1) /*!< SPI_T::FIFOCTL: TXRST Position */ +#define SPI_FIFOCTL_TXRST_Msk (0x1ul << SPI_FIFOCTL_TXRST_Pos) /*!< SPI_T::FIFOCTL: TXRST Mask */ + +#define SPI_FIFOCTL_RXTHIEN_Pos (2) /*!< SPI_T::FIFOCTL: RXTHIEN Position */ +#define SPI_FIFOCTL_RXTHIEN_Msk (0x1ul << SPI_FIFOCTL_RXTHIEN_Pos) /*!< SPI_T::FIFOCTL: RXTHIEN Mask */ + +#define SPI_FIFOCTL_TXTHIEN_Pos (3) /*!< SPI_T::FIFOCTL: TXTHIEN Position */ +#define SPI_FIFOCTL_TXTHIEN_Msk (0x1ul << SPI_FIFOCTL_TXTHIEN_Pos) /*!< SPI_T::FIFOCTL: TXTHIEN Mask */ + +#define SPI_FIFOCTL_RXTOIEN_Pos (4) /*!< SPI_T::FIFOCTL: RXTOIEN Position */ +#define SPI_FIFOCTL_RXTOIEN_Msk (0x1ul << SPI_FIFOCTL_RXTOIEN_Pos) /*!< SPI_T::FIFOCTL: RXTOIEN Mask */ + +#define SPI_FIFOCTL_RXOVIEN_Pos (5) /*!< SPI_T::FIFOCTL: RXOVIEN Position */ +#define SPI_FIFOCTL_RXOVIEN_Msk (0x1ul << SPI_FIFOCTL_RXOVIEN_Pos) /*!< SPI_T::FIFOCTL: RXOVIEN Mask */ + +#define SPI_FIFOCTL_TXUFPOL_Pos (6) /*!< SPI_T::FIFOCTL: TXUFPOL Position */ +#define SPI_FIFOCTL_TXUFPOL_Msk (0x1ul << SPI_FIFOCTL_TXUFPOL_Pos) /*!< SPI_T::FIFOCTL: TXUFPOL Mask */ + +#define SPI_FIFOCTL_TXUFIEN_Pos (7) /*!< SPI_T::FIFOCTL: TXUFIEN Position */ +#define SPI_FIFOCTL_TXUFIEN_Msk (0x1ul << SPI_FIFOCTL_TXUFIEN_Pos) /*!< SPI_T::FIFOCTL: TXUFIEN Mask */ + +#define SPI_FIFOCTL_RXFBCLR_Pos (8) /*!< SPI_T::FIFOCTL: RXFBCLR Position */ +#define SPI_FIFOCTL_RXFBCLR_Msk (0x1ul << SPI_FIFOCTL_RXFBCLR_Pos) /*!< SPI_T::FIFOCTL: RXFBCLR Mask */ + +#define SPI_FIFOCTL_TXFBCLR_Pos (9) /*!< SPI_T::FIFOCTL: TXFBCLR Position */ +#define SPI_FIFOCTL_TXFBCLR_Msk (0x1ul << SPI_FIFOCTL_TXFBCLR_Pos) /*!< SPI_T::FIFOCTL: TXFBCLR Mask */ + +#define SPI_FIFOCTL_RXTH_Pos (24) /*!< SPI_T::FIFOCTL: RXTH Position */ +#define SPI_FIFOCTL_RXTH_Msk (0x7ul << SPI_FIFOCTL_RXTH_Pos) /*!< SPI_T::FIFOCTL: RXTH Mask */ + +#define SPI_FIFOCTL_TXTH_Pos (28) /*!< SPI_T::FIFOCTL: TXTH Position */ +#define SPI_FIFOCTL_TXTH_Msk (0x7ul << SPI_FIFOCTL_TXTH_Pos) /*!< SPI_T::FIFOCTL: TXTH Mask */ + +#define SPI_STATUS_BUSY_Pos (0) /*!< SPI_T::STATUS: BUSY Position */ +#define SPI_STATUS_BUSY_Msk (0x1ul << SPI_STATUS_BUSY_Pos) /*!< SPI_T::STATUS: BUSY Mask */ + +#define SPI_STATUS_UNITIF_Pos (1) /*!< SPI_T::STATUS: UNITIF Position */ +#define SPI_STATUS_UNITIF_Msk (0x1ul << SPI_STATUS_UNITIF_Pos) /*!< SPI_T::STATUS: UNITIF Mask */ + +#define SPI_STATUS_SSACTIF_Pos (2) /*!< SPI_T::STATUS: SSACTIF Position */ +#define SPI_STATUS_SSACTIF_Msk (0x1ul << SPI_STATUS_SSACTIF_Pos) /*!< SPI_T::STATUS: SSACTIF Mask */ + +#define SPI_STATUS_SSINAIF_Pos (3) /*!< SPI_T::STATUS: SSINAIF Position */ +#define SPI_STATUS_SSINAIF_Msk (0x1ul << SPI_STATUS_SSINAIF_Pos) /*!< SPI_T::STATUS: SSINAIF Mask */ + +#define SPI_STATUS_SSLINE_Pos (4) /*!< SPI_T::STATUS: SSLINE Position */ +#define SPI_STATUS_SSLINE_Msk (0x1ul << SPI_STATUS_SSLINE_Pos) /*!< SPI_T::STATUS: SSLINE Mask */ + +#define SPI_STATUS_SLVTOIF_Pos (5) /*!< SPI_T::STATUS: SLVTOIF Position */ +#define SPI_STATUS_SLVTOIF_Msk (0x1ul << SPI_STATUS_SLVTOIF_Pos) /*!< SPI_T::STATUS: SLVTOIF Mask */ + +#define SPI_STATUS_SLVBEIF_Pos (6) /*!< SPI_T::STATUS: SLVBEIF Position */ +#define SPI_STATUS_SLVBEIF_Msk (0x1ul << SPI_STATUS_SLVBEIF_Pos) /*!< SPI_T::STATUS: SLVBEIF Mask */ + +#define SPI_STATUS_SLVURIF_Pos (7) /*!< SPI_T::STATUS: SLVURIF Position */ +#define SPI_STATUS_SLVURIF_Msk (0x1ul << SPI_STATUS_SLVURIF_Pos) /*!< SPI_T::STATUS: SLVURIF Mask */ + +#define SPI_STATUS_RXEMPTY_Pos (8) /*!< SPI_T::STATUS: RXEMPTY Position */ +#define SPI_STATUS_RXEMPTY_Msk (0x1ul << SPI_STATUS_RXEMPTY_Pos) /*!< SPI_T::STATUS: RXEMPTY Mask */ + +#define SPI_STATUS_RXFULL_Pos (9) /*!< SPI_T::STATUS: RXFULL Position */ +#define SPI_STATUS_RXFULL_Msk (0x1ul << SPI_STATUS_RXFULL_Pos) /*!< SPI_T::STATUS: RXFULL Mask */ + +#define SPI_STATUS_RXTHIF_Pos (10) /*!< SPI_T::STATUS: RXTHIF Position */ +#define SPI_STATUS_RXTHIF_Msk (0x1ul << SPI_STATUS_RXTHIF_Pos) /*!< SPI_T::STATUS: RXTHIF Mask */ + +#define SPI_STATUS_RXOVIF_Pos (11) /*!< SPI_T::STATUS: RXOVIF Position */ +#define SPI_STATUS_RXOVIF_Msk (0x1ul << SPI_STATUS_RXOVIF_Pos) /*!< SPI_T::STATUS: RXOVIF Mask */ + +#define SPI_STATUS_RXTOIF_Pos (12) /*!< SPI_T::STATUS: RXTOIF Position */ +#define SPI_STATUS_RXTOIF_Msk (0x1ul << SPI_STATUS_RXTOIF_Pos) /*!< SPI_T::STATUS: RXTOIF Mask */ + +#define SPI_STATUS_SPIENSTS_Pos (15) /*!< SPI_T::STATUS: SPIENSTS Position */ +#define SPI_STATUS_SPIENSTS_Msk (0x1ul << SPI_STATUS_SPIENSTS_Pos) /*!< SPI_T::STATUS: SPIENSTS Mask */ + +#define SPI_STATUS_TXEMPTY_Pos (16) /*!< SPI_T::STATUS: TXEMPTY Position */ +#define SPI_STATUS_TXEMPTY_Msk (0x1ul << SPI_STATUS_TXEMPTY_Pos) /*!< SPI_T::STATUS: TXEMPTY Mask */ + +#define SPI_STATUS_TXFULL_Pos (17) /*!< SPI_T::STATUS: TXFULL Position */ +#define SPI_STATUS_TXFULL_Msk (0x1ul << SPI_STATUS_TXFULL_Pos) /*!< SPI_T::STATUS: TXFULL Mask */ + +#define SPI_STATUS_TXTHIF_Pos (18) /*!< SPI_T::STATUS: TXTHIF Position */ +#define SPI_STATUS_TXTHIF_Msk (0x1ul << SPI_STATUS_TXTHIF_Pos) /*!< SPI_T::STATUS: TXTHIF Mask */ + +#define SPI_STATUS_TXUFIF_Pos (19) /*!< SPI_T::STATUS: TXUFIF Position */ +#define SPI_STATUS_TXUFIF_Msk (0x1ul << SPI_STATUS_TXUFIF_Pos) /*!< SPI_T::STATUS: TXUFIF Mask */ + +#define SPI_STATUS_TXRXRST_Pos (23) /*!< SPI_T::STATUS: TXRXRST Position */ +#define SPI_STATUS_TXRXRST_Msk (0x1ul << SPI_STATUS_TXRXRST_Pos) /*!< SPI_T::STATUS: TXRXRST Mask */ + +#define SPI_STATUS_RXCNT_Pos (24) /*!< SPI_T::STATUS: RXCNT Position */ +#define SPI_STATUS_RXCNT_Msk (0xful << SPI_STATUS_RXCNT_Pos) /*!< SPI_T::STATUS: RXCNT Mask */ + +#define SPI_STATUS_TXCNT_Pos (28) /*!< SPI_T::STATUS: TXCNT Position */ +#define SPI_STATUS_TXCNT_Msk (0xful << SPI_STATUS_TXCNT_Pos) /*!< SPI_T::STATUS: TXCNT Mask */ + +#define SPI_TX_TX_Pos (0) /*!< SPI_T::TX: TX Position */ +#define SPI_TX_TX_Msk (0xfffffffful << SPI_TX_TX_Pos) /*!< SPI_T::TX: TX Mask */ + +#define SPI_RX_RX_Pos (0) /*!< SPI_T::RX: RX Position */ +#define SPI_RX_RX_Msk (0xfffffffful << SPI_RX_RX_Pos) /*!< SPI_T::RX: RX Mask */ + +#define SPI_I2SCTL_I2SEN_Pos (0) /*!< SPI_T::I2SCTL: I2SEN Position */ +#define SPI_I2SCTL_I2SEN_Msk (0x1ul << SPI_I2SCTL_I2SEN_Pos) /*!< SPI_T::I2SCTL: I2SEN Mask */ + +#define SPI_I2SCTL_TXEN_Pos (1) /*!< SPI_T::I2SCTL: TXEN Position */ +#define SPI_I2SCTL_TXEN_Msk (0x1ul << SPI_I2SCTL_TXEN_Pos) /*!< SPI_T::I2SCTL: TXEN Mask */ + +#define SPI_I2SCTL_RXEN_Pos (2) /*!< SPI_T::I2SCTL: RXEN Position */ +#define SPI_I2SCTL_RXEN_Msk (0x1ul << SPI_I2SCTL_RXEN_Pos) /*!< SPI_T::I2SCTL: RXEN Mask */ + +#define SPI_I2SCTL_MUTE_Pos (3) /*!< SPI_T::I2SCTL: MUTE Position */ +#define SPI_I2SCTL_MUTE_Msk (0x1ul << SPI_I2SCTL_MUTE_Pos) /*!< SPI_T::I2SCTL: MUTE Mask */ + +#define SPI_I2SCTL_WDWIDTH_Pos (4) /*!< SPI_T::I2SCTL: WDWIDTH Position */ +#define SPI_I2SCTL_WDWIDTH_Msk (0x3ul << SPI_I2SCTL_WDWIDTH_Pos) /*!< SPI_T::I2SCTL: WDWIDTH Mask */ + +#define SPI_I2SCTL_MONO_Pos (6) /*!< SPI_T::I2SCTL: MONO Position */ +#define SPI_I2SCTL_MONO_Msk (0x1ul << SPI_I2SCTL_MONO_Pos) /*!< SPI_T::I2SCTL: MONO Mask */ + +#define SPI_I2SCTL_ORDER_Pos (7) /*!< SPI_T::I2SCTL: ORDER Position */ +#define SPI_I2SCTL_ORDER_Msk (0x1ul << SPI_I2SCTL_ORDER_Pos) /*!< SPI_T::I2SCTL: ORDER Mask */ + +#define SPI_I2SCTL_SLAVE_Pos (8) /*!< SPI_T::I2SCTL: SLAVE Position */ +#define SPI_I2SCTL_SLAVE_Msk (0x1ul << SPI_I2SCTL_SLAVE_Pos) /*!< SPI_T::I2SCTL: SLAVE Mask */ + +#define SPI_I2SCTL_MCLKEN_Pos (15) /*!< SPI_T::I2SCTL: MCLKEN Position */ +#define SPI_I2SCTL_MCLKEN_Msk (0x1ul << SPI_I2SCTL_MCLKEN_Pos) /*!< SPI_T::I2SCTL: MCLKEN Mask */ + +#define SPI_I2SCTL_RZCEN_Pos (16) /*!< SPI_T::I2SCTL: RZCEN Position */ +#define SPI_I2SCTL_RZCEN_Msk (0x1ul << SPI_I2SCTL_RZCEN_Pos) /*!< SPI_T::I2SCTL: RZCEN Mask */ + +#define SPI_I2SCTL_LZCEN_Pos (17) /*!< SPI_T::I2SCTL: LZCEN Position */ +#define SPI_I2SCTL_LZCEN_Msk (0x1ul << SPI_I2SCTL_LZCEN_Pos) /*!< SPI_T::I2SCTL: LZCEN Mask */ + +#define SPI_I2SCTL_RXLCH_Pos (23) /*!< SPI_T::I2SCTL: RXLCH Position */ +#define SPI_I2SCTL_RXLCH_Msk (0x1ul << SPI_I2SCTL_RXLCH_Pos) /*!< SPI_T::I2SCTL: RXLCH Mask */ + +#define SPI_I2SCTL_RZCIEN_Pos (24) /*!< SPI_T::I2SCTL: RZCIEN Position */ +#define SPI_I2SCTL_RZCIEN_Msk (0x1ul << SPI_I2SCTL_RZCIEN_Pos) /*!< SPI_T::I2SCTL: RZCIEN Mask */ + +#define SPI_I2SCTL_LZCIEN_Pos (25) /*!< SPI_T::I2SCTL: LZCIEN Position */ +#define SPI_I2SCTL_LZCIEN_Msk (0x1ul << SPI_I2SCTL_LZCIEN_Pos) /*!< SPI_T::I2SCTL: LZCIEN Mask */ + +#define SPI_I2SCTL_FORMAT_Pos (28) /*!< SPI_T::I2SCTL: FORMAT Position */ +#define SPI_I2SCTL_FORMAT_Msk (0x3ul << SPI_I2SCTL_FORMAT_Pos) /*!< SPI_T::I2SCTL: FORMAT Mask */ + +#define SPI_I2SCLK_MCLKDIV_Pos (0) /*!< SPI_T::I2SCLK: MCLKDIV Position */ +#define SPI_I2SCLK_MCLKDIV_Msk (0x3ful << SPI_I2SCLK_MCLKDIV_Pos) /*!< SPI_T::I2SCLK: MCLKDIV Mask */ + +#define SPI_I2SCLK_BCLKDIV_Pos (8) /*!< SPI_T::I2SCLK: BCLKDIV Position */ +#define SPI_I2SCLK_BCLKDIV_Msk (0x1fful << SPI_I2SCLK_BCLKDIV_Pos) /*!< SPI_T::I2SCLK: BCLKDIV Mask */ + +#define SPI_I2SSTS_RIGHT_Pos (4) /*!< SPI_T::I2SSTS: RIGHT Position */ +#define SPI_I2SSTS_RIGHT_Msk (0x1ul << SPI_I2SSTS_RIGHT_Pos) /*!< SPI_T::I2SSTS: RIGHT Mask */ + +#define SPI_I2SSTS_RXEMPTY_Pos (8) /*!< SPI_T::I2SSTS: RXEMPTY Position */ +#define SPI_I2SSTS_RXEMPTY_Msk (0x1ul << SPI_I2SSTS_RXEMPTY_Pos) /*!< SPI_T::I2SSTS: RXEMPTY Mask */ + +#define SPI_I2SSTS_RXFULL_Pos (9) /*!< SPI_T::I2SSTS: RXFULL Position */ +#define SPI_I2SSTS_RXFULL_Msk (0x1ul << SPI_I2SSTS_RXFULL_Pos) /*!< SPI_T::I2SSTS: RXFULL Mask */ + +#define SPI_I2SSTS_RXTHIF_Pos (10) /*!< SPI_T::I2SSTS: RXTHIF Position */ +#define SPI_I2SSTS_RXTHIF_Msk (0x1ul << SPI_I2SSTS_RXTHIF_Pos) /*!< SPI_T::I2SSTS: RXTHIF Mask */ + +#define SPI_I2SSTS_RXOVIF_Pos (11) /*!< SPI_T::I2SSTS: RXOVIF Position */ +#define SPI_I2SSTS_RXOVIF_Msk (0x1ul << SPI_I2SSTS_RXOVIF_Pos) /*!< SPI_T::I2SSTS: RXOVIF Mask */ + +#define SPI_I2SSTS_RXTOIF_Pos (12) /*!< SPI_T::I2SSTS: RXTOIF Position */ +#define SPI_I2SSTS_RXTOIF_Msk (0x1ul << SPI_I2SSTS_RXTOIF_Pos) /*!< SPI_T::I2SSTS: RXTOIF Mask */ + +#define SPI_I2SSTS_I2SENSTS_Pos (15) /*!< SPI_T::I2SSTS: I2SENSTS Position */ +#define SPI_I2SSTS_I2SENSTS_Msk (0x1ul << SPI_I2SSTS_I2SENSTS_Pos) /*!< SPI_T::I2SSTS: I2SENSTS Mask */ + +#define SPI_I2SSTS_TXEMPTY_Pos (16) /*!< SPI_T::I2SSTS: TXEMPTY Position */ +#define SPI_I2SSTS_TXEMPTY_Msk (0x1ul << SPI_I2SSTS_TXEMPTY_Pos) /*!< SPI_T::I2SSTS: TXEMPTY Mask */ + +#define SPI_I2SSTS_TXFULL_Pos (17) /*!< SPI_T::I2SSTS: TXFULL Position */ +#define SPI_I2SSTS_TXFULL_Msk (0x1ul << SPI_I2SSTS_TXFULL_Pos) /*!< SPI_T::I2SSTS: TXFULL Mask */ + +#define SPI_I2SSTS_TXTHIF_Pos (18) /*!< SPI_T::I2SSTS: TXTHIF Position */ +#define SPI_I2SSTS_TXTHIF_Msk (0x1ul << SPI_I2SSTS_TXTHIF_Pos) /*!< SPI_T::I2SSTS: TXTHIF Mask */ + +#define SPI_I2SSTS_TXUFIF_Pos (19) /*!< SPI_T::I2SSTS: TXUFIF Position */ +#define SPI_I2SSTS_TXUFIF_Msk (0x1ul << SPI_I2SSTS_TXUFIF_Pos) /*!< SPI_T::I2SSTS: TXUFIF Mask */ + +#define SPI_I2SSTS_RZCIF_Pos (20) /*!< SPI_T::I2SSTS: RZCIF Position */ +#define SPI_I2SSTS_RZCIF_Msk (0x1ul << SPI_I2SSTS_RZCIF_Pos) /*!< SPI_T::I2SSTS: RZCIF Mask */ + +#define SPI_I2SSTS_LZCIF_Pos (21) /*!< SPI_T::I2SSTS: LZCIF Position */ +#define SPI_I2SSTS_LZCIF_Msk (0x1ul << SPI_I2SSTS_LZCIF_Pos) /*!< SPI_T::I2SSTS: LZCIF Mask */ + +#define SPI_I2SSTS_TXRXRST_Pos (23) /*!< SPI_T::I2SSTS: TXRXRST Position */ +#define SPI_I2SSTS_TXRXRST_Msk (0x1ul << SPI_I2SSTS_TXRXRST_Pos) /*!< SPI_T::I2SSTS: TXRXRST Mask */ + +#define SPI_I2SSTS_RXCNT_Pos (24) /*!< SPI_T::I2SSTS: RXCNT Position */ +#define SPI_I2SSTS_RXCNT_Msk (0x7ul << SPI_I2SSTS_RXCNT_Pos) /*!< SPI_T::I2SSTS: RXCNT Mask */ + +#define SPI_I2SSTS_TXCNT_Pos (28) /*!< SPI_T::I2SSTS: TXCNT Position */ +#define SPI_I2SSTS_TXCNT_Msk (0x7ul << SPI_I2SSTS_TXCNT_Pos) /*!< SPI_T::I2SSTS: TXCNT Mask */ + +/**@}*/ /* SPI_CONST */ +/**@}*/ /* end of SPI register group */ + + +/*---------------------- System Manger Controller -------------------------*/ +/** + @addtogroup SYS System Manger Controller(SYS) + Memory Mapped Structure for SYS Controller +@{ */ + + +typedef struct +{ + +/** + * @var SYS_T::PDID + * Offset: 0x00 Part Device Identification Number Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:0] |PDID |Part Device Identification Number (Read Only) + * | | |This register reflects device part number code. + * | | |Software can read this register to identify which device is used. + * @var SYS_T::RSTSTS + * Offset: 0x04 System Reset Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |PORF |POR Reset Flag + * | | |The POR reset flag is set by the "Reset Signal" from the Power-On Reset (POR) Controller or bit CHIPRST (SYS_IPRST0[0]) to indicate the previous reset source. + * | | |0 = No reset from POR or CHIPRST. + * | | |1 = Power-On Reset (POR) or CHIPRST had issued the reset signal to reset the system. + * | | |Note: Write 1 to clear this bit to 0. + * |[1] |PINRF |nRESET Pin Reset Flag + * | | |The nRESET pin reset flag is set by the "Reset Signal" from the nRESET Pin to indicate the previous reset source. + * | | |0 = No reset from nRESET pin. + * | | |1 = Pin nRESET had issued the reset signal to reset the system. + * | | |Note: Write 1 to clear this bit to 0. + * |[2] |WDTRF |WDT Reset Flag + * | | |The WDT reset flag is set by the "Reset Signal" from the Watchdog Timer or Window Watchdog Timer to indicate the previous reset source. + * | | |0 = No reset from watchdog timer or window watchdog timer. + * | | |1 = The watchdog timer or window watchdog timer had issued the reset signal to reset the system. + * | | |Note1: + * | | |Write 1 to clear this bit to 0. + * | | |Note2: Watchdog Timer register RSTF(WDT_CTL[2]) bit is set if the system has been reset by WDT time-out reset. + * | | |Window Watchdog Timer register WWDTRF(WWDT_STATUS[1]) bit is set if the system has been reset by WWDT time-out reset. + * |[3] |LVRF |LVR Reset Flag + * | | |The LVR reset flag is set by the "Reset Signal" from the Low-Voltage-Reset Controller to indicate the previous reset source. + * | | |0 = No reset from LVR. + * | | |1 = LVR controller had issued the reset signal to reset the system. + * | | |Note: Write 1 to clear this bit to 0. + * |[4] |BODRF |BOD Reset Flag + * | | |The BOD reset flag is set by the "Reset Signal" from the Brown-Out-Detector to indicate the previous reset source. + * | | |0 = No reset from BOD. + * | | |1 = The BOD had issued the reset signal to reset the system. + * | | |Note: Write 1 to clear this bit to 0. + * |[5] |SYSRF |System Reset Flag + * | | |The system reset flag is set by the "Reset Signal" from the Cortex-M4 Core to indicate the previous reset source. + * | | |0 = No reset from Cortex-M4. + * | | |1 = The Cortex-M4 had issued the reset signal to reset the system by writing 1 to the bit SYSRESETREQ(AIRCR[2], Application Interrupt and Reset Control Register, address = 0xE000ED0C) in system control registers of Cortex-M4 core. + * | | |Note: Write 1 to clear this bit to 0. + * |[7] |CPURF |CPU Reset Flag + * | | |The CPU reset flag is set by hardware if software writes CPURST (SYS_IPRST0[1]) 1 to reset Cortex-M4 Core and Flash Memory Controller (FMC). + * | | |0 = No reset from CPU. + * | | |1 = The Cortex-M4 Core and FMC are reset by software setting CPURST to 1. + * | | |Note: Write 1 to clear this bit to 0. + * |[8] |CPULKRF |CPU Lockup Reset Flag + * | | |The CPU reset flag is set by hardware if Cortex-M4 lockup happened. + * | | |0 = No reset from CPU lockup happened. + * | | |1 = The Cortex-M4 lockup happened and chip is reset. + * | | |Note: Write 1 to clear this bit to 0. + * @var SYS_T::IPRST0 + * Offset: 0x08 Peripheral Reset Control Register 0 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |CHIPRST |Chip One-Shot Reset (Write Protect) + * | | |Setting this bit will reset the whole chip, including Processor core and all peripherals, and this bit will automatically return to 0 after the 2 clock cycles. + * | | |The CHIPRST is same as the POR reset, all the chip controllers is reset and the chip setting from flash are also reload. + * | | |About the difference between CHIPRST and SYSRESETREQ, please refer to section 5.2.2 + * | | |0 = Chip normal operation. + * | | |1 = Chip one shot reset. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[1] |CPURST |Processor Core One-Shot Reset (Write Protect) + * | | |Setting this bit will only reset the processor core and Flash Memory Controller(FMC), and this bit will automatically return to 0 after the 2 clock cycles. + * | | |0 = Processor core normal operation. + * | | |1 = Processor core one-shot reset. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[2] |PDMARST |PDMA Controller Reset (Write Protect) + * | | |Setting this bit to 1 will generate a reset signal to the PDMA. + * | | |User needs to set this bit to 0 to release from reset state. + * | | |0 = PDMA controller normal operation. + * | | |1 = PDMA controller reset. + * |[3] |EBIRST |EBI Controller Reset (Write Protect) + * | | |Set this bit to 1 will generate a reset signal to the EBI. + * | | |User needs to set this bit to 0 to release from the reset state. + * | | |0 = EBI controller normal operation. + * | | |1 = EBI controller reset. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[4] |USBHRST |USBH Controller Reset (Write Protect) + * | | |Set this bit to 1 will generate a reset signal to the USB host controller. + * | | |User needs to set this bit to 0 to release from the reset state. + * | | |0 = USBH controller normal operation. + * | | |1 = USBH controller reset. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[7] |CRCRST |CRC Calculation Unit Reset (Write Protect) + * | | |Set this bit to 1 will generate a reset signal to the CRC calculation module. + * | | |User needs to set this bit to 0 to release from the reset state. + * | | |0 = CRC Calculation unit normal operation. + * | | |1 = CRC Calculation unit reset. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * @var SYS_T::IPRST1 + * Offset: 0x0C Peripheral Reset Control Register 1 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[1] |GPIORST |GPIO Controller Reset + * | | |0 = GPIO controller normal operation. + * | | |1 = GPIO controller reset. + * |[2] |TMR0RST |Timer0 Controller Reset + * | | |0 = Timer0 controller normal operation. + * | | |1 = Timer0 controller reset. + * |[3] |TMR1RST |Timer1 Controller Reset + * | | |0 = Timer1 controller normal operation. + * | | |1 = Timer1 controller reset. + * |[4] |TMR2RST |Timer2 Controller Reset + * | | |0 = Timer2 controller normal operation. + * | | |1 = Timer2 controller reset. + * |[5] |TMR3RST |Timer3 Controller Reset + * | | |0 = Timer3 controller normal operation. + * | | |1 = Timer3 controller reset. + * |[7] |ACMP01RST |Analog Comparator 0/1 Controller Reset + * | | |0 = Analog Comparator 0/1 controller normal operation. + * | | |1 = Analog Comparator 0/1 controller reset. + * |[8] |I2C0RST |I2C0 Controller Reset + * | | |0 = I2C0 controller normal operation. + * | | |1 = I2C0 controller reset. + * |[9] |I2C1RST |I2C1 Controller Reset + * | | |0 = I2C1 controller normal operation. + * | | |1 = I2C1 controller reset. + * |[12] |SPI0RST |SPI0 Controller Reset + * | | |0 = SPI0 controller normal operation. + * | | |1 = SPI0 controller reset. + * |[13] |SPI1RST |SPI1 Controller Reset + * | | |0 = SPI1 controller normal operation. + * | | |1 = SPI1 controller reset. + * |[14] |SPI2RST |SPI2 Controller Reset + * | | |0 = SPI2 controller normal operation. + * | | |1 = SPI2 controller reset. + * |[16] |UART0RST |UART0 Controller Reset + * | | |0 = UART0 controller normal operation. + * | | |1 = UART0 controller reset. + * |[17] |UART1RST |UART1 Controller Reset + * | | |0 = UART1 controller normal operation. + * | | |1 = UART1 controller reset. + * |[18] |UART2RST |UART2 Controller Reset + * | | |0 = UART2 controller normal operation. + * | | |1 = UART2 controller reset. + * |[19] |UART3RST |UART3 Controller Reset + * | | |0 = UART3 controller normal operation. + * | | |1 = UART3 controller reset. + * |[24] |CAN0RST |CAN0 Controller Reset + * | | |0 = CAN0 controller normal operation. + * | | |1 = CAN0 controller reset. + * |[26] |OTGRST |OTG Controller Reset + * | | |0 = OTG controller normal operation. + * | | |1 = OTG controller reset. + * |[27] |USBDRST |USB Device Controller Reset + * | | |0 = USB device controller normal operation. + * | | |1 = USB device controller reset. + * |[28] |EADCRST |EADC Controller Reset + * | | |0 = EADC controller normal operation. + * | | |1 = EADC controller reset. + * @var SYS_T::IPRST2 + * Offset: 0x10 Peripheral Reset Control Register 2 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |SC0RST |SC0 Controller Reset + * | | |0 = SC0 controller normal operation. + * | | |1 = SC0 controller reset. + * |[12] |DACRST |DAC Controller Reset + * | | |0 = DAC controller normal operation. + * | | |1 = DAC controller reset. + * |[16] |PWM0RST |PWM0 Controller Reset + * | | |0 = PWM0 controller normal operation. + * | | |1 = PWM0 controller reset. + * |[17] |PWM1RST |PWM1 Controller Reset + * | | |0 = PWM1 controller normal operation. + * | | |1 = PWM1 controller reset. + * |[25] |TKRST |Touch Key Controller Reset + * | | |0 = Touch Key controller normal operation. + * | | |1 = Touch Key controller reset. + * @var SYS_T::BODCTL + * Offset: 0x18 Brown-Out Detector Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |BODEN |Brown-Out Detector Enable Bit (Write Protect) + * | | |The default value is set by flash controller user configuration register CBODEN (CONFIG0 [23]). + * | | |0 = Brown-out Detector function Disabled. + * | | |1 = Brown-out Detector function Enabled. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[2:1] |BODVL |Brown-Out Detector Threshold Voltage Selection (Write Protect) + * | | |The default value is set by flash controller user configuration register CBOV (CONFIG0 [22:21]). + * | | |00 = Brown-Out Detector Threshold Voltage is 2.2V + * | | |01 = Brown-Out Detector Threshold Voltage is 2.7V + * | | |10 = Brown-Out Detector Threshold Voltage is 3.7V + * | | |11 = Brown-Out Detector Threshold Voltage is 4.5V + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[3] |BODRSTEN |Brown-Out Reset Enable Bit (Write Protect) + * | | |The default value is set by flash controller user configuration register CBORST(CONFIG0[20]) bit . + * | | |0 = Brown-out "INTERRUPT" function Enabled. + * | | |1 = Brown-out "RESET" function Enabled. + * | | |Note1: + * | | |While the Brown-out Detector function is enabled (BODEN high) and BOD reset function is enabled (BODRSTEN high), BOD will assert a signal to reset chip when the detected voltage is lower than the threshold (BODOUT high). + * | | |While the BOD function is enabled (BODEN high) and BOD interrupt function is enabled (BODRSTEN low), BOD will assert an interrupt if BODOUT is high. + * | | |BOD interrupt will keep till to the BODEN set to 0. + * | | |BOD interrupt can be blocked by disabling the NVIC BOD interrupt or disabling BOD function (set BODEN low). + * | | |Note2: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[4] |BODIF |Brown-Out Detector Interrupt Flag + * | | |0 = Brown-out Detector does not detect any voltage draft at VDD down through or up through the voltage of BODVL setting. + * | | |1 = When Brown-out Detector detects the VDD is dropped down through the voltage of BODVL setting or the VDD is raised up through the voltage of BODVL setting, this bit is set to 1 and the brown-out interrupt is requested if brown-out interrupt is enabled. + * | | |Note: Write 1 to clear this bit to 0. + * |[5] |BODLPM |Brown-Out Detector Low Power Mode (Write Protect) + * | | |0 = BOD operate in normal mode (default). + * | | |1 = BOD Low Power mode Enabled. + * | | |Note1: The BOD consumes about 100uA in normal mode, the low power mode can reduce the current to about 1/10 but slow the BOD response. + * | | |Note2: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[6] |BODOUT |Brown-Out Detector Output Status + * | | |0 = Brown-out Detector output status is 0. + * | | |It means the detected voltage is higher than BODVL setting or BODEN is 0. + * | | |1 = Brown-out Detector output status is 1. + * | | |It means the detected voltage is lower than BODVL setting. + * | | |If the BODEN is 0, BOD function disabled , this bit always responds 0000. + * |[7] |LVREN |Low Voltage Reset Enable Bit (Write Protect) + * | | |The LVR function resets the chip when the input power voltage is lower than LVR circuit setting. + * | | |LVR function is enabled by default. + * | | |0 = Low Voltage Reset function Disabled. + * | | |1 = Low Voltage Reset function Enabled + * | | |Note1: After enabling the bit, the LVR function will be active with 100us delay for LVR output stable (default). + * | | |Note2: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[10:8] |BODDGSEL |Brown-Out Detector Output De-Glitch Time Select (Write Protect) + * | | |000 = BOD output is sampled by RC10K clock. + * | | |001 = 4 system clock (HCLK). + * | | |010 = 8 system clock (HCLK). + * | | |011 = 16 system clock (HCLK). + * | | |100 = 32 system clock (HCLK). + * | | |101 = 64 system clock (HCLK). + * | | |110 = 128 system clock (HCLK). + * | | |111 = 256 system clock (HCLK). + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[14:12] |LVRDGSEL |LVR Output De-Glitch Time Select (Write Protect) + * | | |000 = Without de-glitch function. + * | | |001 = 4 system clock (HCLK). + * | | |010 = 8 system clock (HCLK). + * | | |011 = 16 system clock (HCLK). + * | | |100 = 32 system clock (HCLK). + * | | |101 = 64 system clock (HCLK). + * | | |110 = 128 system clock (HCLK). + * | | |111 = 256 system clock (HCLK). + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * @var SYS_T::IVSCTL + * Offset: 0x1C Internal Voltage Source Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |VTEMPEN |Temperature Sensor Enable Bit + * | | |This bit is used to enable/disable temperature sensor function. + * | | |0 = Temperature sensor function Disabled (default). + * | | |1 = Temperature sensor function Enabled. + * | | |Note: After this bit is set to 1, the value of temperature sensor output can be obtained from ADC conversion result. + * | | |Please refer to ADC function chapter for details. + * |[1] |VBATUGEN |VBAT Unity Gain Buffer Enable Bit + * | | |This bit is used to enable/disable VBAT unity gain buffer function. + * | | |0 = VBAT unity gain buffer function Disabled (default). + * | | |1 = VBAT unity gain buffer function Enabled. + * | | |Note: After this bit is set to 1, the value of VBAT unity gain buffer output voltage can be obtained from ADC conversion result + * @var SYS_T::PORCTL + * Offset: 0x24 Power-On-Reset Controller Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |POROFF |Power-On-Reset Enable Bit (Write Protect) + * | | |When powered on, the POR circuit generates a reset signal to reset the whole chip function, but noise on the power may cause the POR active again. + * | | |User can disable internal POR circuit to avoid unpredictable noise to cause chip reset by writing 0x5AA5 to this field. + * | | |The POR function will be active again when this field is set to another value or chip is reset by other reset source, including: + * | | |nRESET, Watchdog, LVR reset, BOD reset, ICE reset command and the software-chip reset function + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * @var SYS_T::VREFCTL + * Offset: 0x28 VREF Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[4:0] |VREFCTL |VREF Control Bits (Write Protect) + * | | |00011 = VREF is internal 2.65V. + * | | |00111 = VREF is internal 2.048V. + * | | |01011 = VREF is internal 3.072V. + * | | |01111 = VREF is internal 4.096V. + * | | |Others = Reserved. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * @var SYS_T::USBPHY + * Offset: 0x2C USB PHY Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[1:0] |USBROLE |USB Role Option (Write Protect) + * | | |These two bits are used to select the role of USB. + * | | |00 = Standard USB Device mode. + * | | |01 = Standard USB Host mode. + * | | |10 = ID dependent mode. + * | | |11 = On-The-Go device mode. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[8] |LDO33EN |USB LDO33 Enable Bit (Write Protect) + * | | |0 = USB LDO33 Disabled. + * | | |1 = USB LDO33 Enabled. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * @var SYS_T::GPA_MFPL + * Offset: 0x30 GPIOA Low Byte Multiple Function Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[3:0] |PA0MFP |PA.0 Multi-function Pin Selection + * |[7:4] |PA1MFP |PA.1 Multi-function Pin Selection + * |[11:8] |PA2MFP |PA.2 Multi-function Pin Selection + * |[15:12] |PA3MFP |PA.3 Multi-function Pin Selection + * |[19:16] |PA4MFP |PA.4 Multi-function Pin Selection + * |[23:20] |PA5MFP |PA.5 Multi-function Pin Selection + * |[27:24] |PA6MFP |PA.6 Multi-function Pin Selection + * |[31:28] |PA7MFP |PA.7 Multi-function Pin Selection + * @var SYS_T::GPA_MFPH + * Offset: 0x34 GPIOA High Byte Multiple Function Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[3:0] |PA8MFP |PA.8 Multi-function Pin Selection + * |[7:4] |PA9MFP |PA.9 Multi-function Pin Selection + * |[11:8] |PA10MFP |PA.10 Multi-function Pin Selection + * |[15:12] |PA11MFP |PA.11 Multi-function Pin Selection + * |[19:16] |PA12MFP |PA.12 Multi-function Pin Selection + * |[23:20] |PA13MFP |PA.13 Multi-function Pin Selection + * |[27:24] |PA14MFP |PA.14 Multi-function Pin Selection + * |[31:28] |PA15MFP |PA.15 Multi-function Pin Selection + * @var SYS_T::GPB_MFPL + * Offset: 0x38 GPIOB Low Byte Multiple Function Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[3:0] |PB0MFP |PB.0 Multi-function Pin Selection + * |[7:4] |PB1MFP |PB.1 Multi-function Pin Selection + * |[11:8] |PB2MFP |PB.2 Multi-function Pin Selection + * |[15:12] |PB3MFP |PB.3 Multi-function Pin Selection + * |[19:16] |PB4MFP |PB.4 Multi-function Pin Selection + * |[23:20] |PB5MFP |PB.5 Multi-function Pin Selection + * |[27:24] |PB6MFP |PB.6 Multi-function Pin Selection + * |[31:28] |PB7MFP |PB.7 Multi-function Pin Selection + * @var SYS_T::GPB_MFPH + * Offset: 0x3C GPIOB High Byte Multiple Function Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[3:0] |PB8MFP |PB.8 Multi-function Pin Selection + * |[7:4] |PB9MFP |PB.9 Multi-function Pin Selection + * |[11:8] |PB10MFP |PB.10 Multi-function Pin Selection + * |[15:12] |PB11MFP |PB.11 Multi-function Pin Selection + * |[19:16] |PB12MFP |PB.12 Multi-function Pin Selection + * |[23:20] |PB13MFP |PB.13 Multi-function Pin Selection + * |[27:24] |PB14MFP |PB.14 Multi-function Pin Selection + * |[31:28] |PB15MFP |PB.15 Multi-function Pin Selection + * @var SYS_T::GPC_MFPL + * Offset: 0x40 GPIOC Low Byte Multiple Function Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[3:0] |PC0MFP |PC.0 Multi-function Pin Selection + * |[7:4] |PC1MFP |PC.1 Multi-function Pin Selection + * |[11:8] |PC2MFP |PC.2 Multi-function Pin Selection + * |[15:12] |PC3MFP |PC.3 Multi-function Pin Selection + * |[19:16] |PC4MFP |PC.4 Multi-function Pin Selection + * |[23:20] |PC5MFP |PC.5 Multi-function Pin Selection + * |[27:24] |PC6MFP |PC.6 Multi-function Pin Selection + * |[31:28] |PC7MFP |PC.7 Multi-function Pin Selection + * @var SYS_T::GPC_MFPH + * Offset: 0x44 GPIOC High Byte Multiple Function Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[3:0] |PC8MFP |PC.8 Multi-function Pin Selection + * |[7:4] |PC9MFP |PC.9 Multi-function Pin Selection + * |[11:8] |PC10MFP |PC.10 Multi-function Pin Selection + * |[15:12] |PC11MFP |PC.11 Multi-function Pin Selection + * |[19:16] |PC12MFP |PC.12 Multi-function Pin Selection + * |[23:20] |PC13MFP |PC.13 Multi-function Pin Selection + * |[27:24] |PC14MFP |PC.14 Multi-function Pin Selection + * |[31:28] |PC15MFP |PC.15 Multi-function Pin Selection + * @var SYS_T::GPD_MFPL + * Offset: 0x48 GPIOD Low Byte Multiple Function Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[3:0] |PD0MFP |PD.0 Multi-function Pin Selection + * |[7:4] |PD1MFP |PD.1 Multi-function Pin Selection + * |[11:8] |PD2MFP |PD.2 Multi-function Pin Selection + * |[15:12] |PD3MFP |PD.3 Multi-function Pin Selection + * |[19:16] |PD4MFP |PD.4 Multi-function Pin Selection + * |[23:20] |PD5MFP |PD.5 Multi-function Pin Selection + * |[27:24] |PD6MFP |PD.6 Multi-function Pin Selection + * |[31:28] |PD7MFP |PD.7 Multi-function Pin Selection + * @var SYS_T::GPD_MFPH + * Offset: 0x4C GPIOD High Byte Multiple Function Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[3:0] |PD8MFP |PD.8 Multi-function Pin Selection + * |[7:4] |PD9MFP |PD.9 Multi-function Pin Selection + * |[11:8] |PD10MFP |PD.10 Multi-function Pin Selection + * |[15:12] |PD11MFP |PD.11 Multi-function Pin Selection + * |[19:16] |PD12MFP |PD.12 Multi-function Pin Selection + * |[23:20] |PD13MFP |PD.13 Multi-function Pin Selection + * |[27:24] |PD14MFP |PD.14 Multi-function Pin Selection + * |[31:28] |PD15MFP |PD.15 Multi-function Pin Selection + * @var SYS_T::GPE_MFPL + * Offset: 0x50 GPIOE Low Byte Multiple Function Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[3:0] |PE0MFP |PE.0 Multi-function Pin Selection + * |[7:4] |PE1MFP |PE.1 Multi-function Pin Selection + * |[11:8] |PE2MFP |PE.2 Multi-function Pin Selection + * |[15:12] |PE3MFP |PE.3 Multi-function Pin Selection + * |[19:16] |PE4MFP |PE.4 Multi-function Pin Selection + * |[23:20] |PE5MFP |PE.5 Multi-function Pin Selection + * |[27:24] |PE6MFP |PE.6 Multi-function Pin Selection + * |[31:28] |PE7MFP |PE.7 Multi-function Pin Selection + * @var SYS_T::GPE_MFPH + * Offset: 0x54 GPIOE High Byte Multiple Function Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[3:0] |PE8MFP |PE.8 Multi-function Pin Selection + * |[7:4] |PE9MFP |PE.9 Multi-function Pin Selection + * |[11:8] |PE10MFP |PE.10 Multi-function Pin Selection + * |[15:12] |PE11MFP |PE.11 Multi-function Pin Selection + * |[19:16] |PE12MFP |PE.12 Multi-function Pin Selection + * |[23:20] |PE13MFP |PE.13 Multi-function Pin Selection + * |[27:24] |PE14_MFP |PE.14 Multi-function Pin Selection + * @var SYS_T::GPF_MFPL + * Offset: 0x58 GPIOF Low Byte Multiple Function Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[3:0] |PF0MFP |PF.0 Multi-function Pin Selection + * |[7:4] |PF1MFP |PF.1 Multi-function Pin Selection + * |[11:8] |PF2MFP |PF.2 Multi-function Pin Selection + * |[15:12] |PF3MFP |PF.3 Multi-function Pin Selection + * |[19:16] |PF4MFP |PF.4 Multi-function Pin Selection + * |[23:20] |PF5MFP |PF.5 Multi-function Pin Selection + * |[27:24] |PF6MFP |PF.6 Multi-function Pin Selection + * |[31:28] |PF7MFP |PF.7 Multi-function Pin Selection + * @var SYS_T::SRAM_INTCTL + * Offset: 0xC0 System SRAM Interrupt Enable Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |PERRIEN |SRAM Parity Check Error Interrupt Enable Bit + * | | |0 = SRAM parity check error interrupt Disabled. + * | | |1 = SRAM parity check error interrupt Enabled. + * @var SYS_T::SRAM_STATUS + * Offset: 0xC4 System SRAM Parity Error Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |PERRIF |SRAM Parity Check Error Flag + * | | |0 = No System SRAM parity error. + * | | |1 = System SRAM parity error occur. + * @var SYS_T::SRAM_ERRADDR + * Offset: 0xC8 System SRAM Parity Check Error Address Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:0] |ERRADDR |System SRAM Parity Error Address + * | | |This register shows system SRAM parity error byte address. + * @var SYS_T::SRAM_BISTCTL + * Offset: 0xD0 System SRAM BIST Test Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |SRBIST0 |1st + * | | |SRAM BIST Enable Bit + * | | |This bit enables BIST test for SRAM located in address 0x2000_0000 ~0x2000_3FFF + * | | |0 = system SRAM BIST Disabled. + * | | |1 = system SRAM BIST Enabled. + * |[1] |SRBIST1 |2nd + * | | |SRAM BIST Enable Bit + * | | |This bit enables BIST test for SRAM located in address 0x2000_4000 ~0x2000_7FFF + * | | |0 = system SRAM BIST Disabled. + * | | |1 = system SRAM BIST Enabled. + * |[2] |CRBIST |CACHE BIST Enable Bit + * | | |This bit enables BIST test for CACHE RAM + * | | |0 = system CACHE BIST Disabled. + * | | |1 = system CACHE BIST Enabled. + * |[3] |CANBIST |CAN BIST Enable Bit + * | | |This bit enables BIST test for CAN RAM + * | | |0 = system CAN BIST Disabled. + * | | |1 = system CAN BIST Enabled. + * |[4] |USBBIST |USB BIST Enable Bit + * | | |This bit enables BIST test for USB RAM + * | | |0 = system USB BIST Disabled. + * | | |1 = system USB BIST Enabled. + * @var SYS_T::SRAM_BISTSTS + * Offset: 0xD4 System SRAM BIST Test Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |SRBISTEF0 |1st System SRAM BIST Fail Flag + * | | |0 = 1st system SRAM BIST test pass. + * | | |1 = 1st system SRAM BIST test fail. + * |[1] |SRBISTEF1 |2nd System SRAM BIST Fail Flag + * | | |0 = 2nd system SRAM BIST test pass. + * | | |1 = 2nd system SRAM BIST test fail. + * |[2] |CRBISTEF |CACHE SRAM BIST Fail Flag + * | | |0 = System CACHE RAM BIST test pass. + * | | |1 = System CACHE RAM BIST test fail. + * |[3] |CANBEF |CAN SRAM BIST Fail Flag + * | | |0 = CAN SRAM BIST test pass. + * | | |1 = CAN SRAM BIST test fail. + * |[4] |USBBEF |USB SRAM BIST Fail Flag + * | | |0 = USB SRAM BIST test pass. + * | | |1 = USB SRAM BIST test fail. + * |[16] |SRBEND0 |1st SRAM BIST Test Finish + * | | |0 = 1st system SRAM BIST active. + * | | |1 = 1st system SRAM BIST finish. + * |[17] |SRBEND1 |2nd SRAM BIST Test Finish + * | | |0 = 2nd system SRAM BIST is active. + * | | |1 = 2nd system SRAM BIST finish. + * |[18] |CRBEND |CACHE SRAM BIST Test Finish + * | | |0 = System CACHE RAM BIST is active. + * | | |1 = System CACHE RAM BIST test finish. + * |[19] |CANBEND |CAN SRAM BIST Test Finish + * | | |0 = CAN SRAM BIST is active. + * | | |1 = CAN SRAM BIST test finish. + * |[20] |USBBEND |USB SRAM BIST Test Finish + * | | |0 = USB SRAM BIST is active. + * | | |1 = USB SRAM BIST test finish. + * @var SYS_T::IRCTCTL + * Offset: 0xF0 IRC Trim Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[1:0] |FREQSEL |Trim Frequency Selection + * | | |This field indicates the target frequency of internal 22.1184 MHz high-speed oscillator auto trim. + * | | |During auto trim operation, if clock error detected with CESTOPEN is set to 1 or trim retry limitation count reached, this field will be cleared to 00 automatically. + * | | |00 = Disable HIRC auto trim function. + * | | |01 = Enable HIRC auto trim function and trim HIRC to 22.1184 MHz. + * | | |10 = Enable HIRC auto trim function and trim HIRC to 24 MHz. + * | | |11 = Reserved. + * |[5:4] |LOOPSEL |Trim Calculation Loop Selection + * | | |This field defines that trim value calculation is based on how many 32.768 kHz clock. + * | | |00 = Trim value calculation is based on average difference in 4 32.768 kHz clock. + * | | |01 = Trim value calculation is based on average difference in 8 32.768 kHz clock. + * | | |10 = Trim value calculation is based on average difference in 16 32.768 kHz clock. + * | | |11 = Trim value calculation is based on average difference in 32 32.768 kHz clock. + * | | |Note: For example, if LOOPSEL is set as 00, auto trim circuit will calculate trim value based on the average frequency difference in 4 32.768 kHz clock. + * |[7:6] |RETRYCNT |Trim Value Update Limitation Count + * | | |This field defines that how many times the auto trim circuit will try to update the HIRC trim value before the frequency of HIRC locked. + * | | |Once the HIRC locked, the internal trim value update counter will be reset. + * | | |If the trim value update counter reached this limitation value and frequency of HIRC still doesn't lock, the auto trim operation will be disabled and FREQSEL will be cleared to 00. + * | | |00 = Trim retry count limitation is 64 loops. + * | | |01 = Trim retry count limitation is 128 loops. + * | | |10 = Trim retry count limitation is 256 loops. + * | | |11 = Trim retry count limitation is 512 loops. + * |[8] |CESTOPEN |Clock Error Stop Enable Bit + * | | |0 = The trim operation is keep going if clock is inaccuracy. + * | | |1 = The trim operation is stopped if clock is inaccuracy. + * @var SYS_T::IRCTIEN + * Offset: 0xF4 IRC Trim Interrupt Enable Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[1] |TFAILIEN |Trim Failure Interrupt Enable Bit + * | | |This bit controls if an interrupt will be triggered while HIRC trim value update limitation count reached and HIRC frequency still not locked on target frequency set by FREQSEL(SYS_IRCTCTL[1:0]). + * | | |If this bit is high and TFAILIF(SYS_IRCTSTS[1]) is set during auto trim operation, an interrupt will be triggered to notify that HIRC trim value update limitation count was reached. + * | | |0 = Disable TFAILIF(SYS_IRCTSTS[1]) status to trigger an interrupt to CPU. + * | | |1 = Enable TFAILIF(SYS_IRCTSTS[1]) status to trigger an interrupt to CPU. + * |[2] |CLKEIEN |Clock Error Interrupt Enable Bit + * | | |This bit controls if CPU would get an interrupt while clock is inaccuracy during auto trim operation. + * | | |If this bit is set to1, and CLKERRIF(SYS_IRCTSTS[2]) is set during auto trim operation, an interrupt will be triggered to notify the clock frequency is inaccuracy. + * | | |0 = Disable CLKERRIF(SYS_IRCTSTS[2]) status to trigger an interrupt to CPU. + * | | |1 = Enable CLKERRIF(SYS_IRCTSTS[2]) status to trigger an interrupt to CPU. + * @var SYS_T::IRCTISTS + * Offset: 0xF8 IRC Trim Interrupt Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |FREQLOCK |HIRC Frequency Lock Status + * | | |This bit indicates the internal 22.1184 MHz high-speed oscillator frequency is locked. + * | | |This is a status bit and doesn't trigger any interrupt. + * |[1] |TFAILIF |Trim Failure Interrupt Status + * | | |This bit indicates that internal 22.1184 MHz high-speed oscillator trim value update limitation count reached and the internal 22.1184 MHz high-speed oscillator clock frequency still doesn't be locked. + * | | |Once this bit is set, the auto trim operation stopped and FREQSEL(SYS_iRCTCTL[1:0]) will be cleared to 00 by hardware automatically. + * | | |If this bit is set and TFAILIEN(SYS_IRCTIEN[1]) is high, an interrupt will be triggered to notify that HIRC trim value update limitation count was reached. + * | | |Write 1 to clear this to 0. + * | | |0 = Trim value update limitation count does not reach. + * | | |1 = Trim value update limitation count reached and internal 22.1184 MHz high-speed oscillator frequency still not locked. + * |[2] |CLKERRIF |Clock Error Interrupt Status + * | | |When the frequency of external 32.768 kHz low-speed crystal or internal 22.1184 MHz high-speed oscillator is shift larger to unreasonable value, this bit will be set and to be an indicate that clock frequency is inaccuracy + * | | |Once this bit is set to 1, the auto trim operation stopped and FREQSEL(SYS_IRCTCL[1:0]) will be cleared to 00 by hardware automatically if CESTOPEN(SYS_IRCTCTL[8]) is set to 1. + * | | |If this bit is set and CLKEIEN(SYS_IRCTIEN[2]) is high, an interrupt will be triggered to notify the clock frequency is inaccuracy. + * | | |Write 1 to clear this to 0. + * | | |0 = Clock frequency is accuracy. + * | | |1 = Clock frequency is inaccuracy. + * @var SYS_T::REGLCTL + * Offset: 0x100 Register Lock Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |REGLCTL |Register Lock Control Code + * | | |Write operation: + * | | |Some registers have write-protection function. + * | | |Writing these registers have to disable the protected function by writing the sequence value "59h", "16h", "88h" to this field. + * | | |After this sequence is completed, the REGLCTL bit will be set to 1 and write-protection registers can be normal write. + * | | |Read operation: + * | | |0 = Write-protection Enabled for writing protected registers. + * | | |Any write to the protected register is ignored. + * | | |1 = Write-protection Disabled for writing protected registers. + * | | |The Protected registers are: + * | | |SYS_IPRST0: address 0x4000_0008 + * | | |SYS_BODCTL: address 0x4000_0018 + * | | |SYS_PORCTL: address 0x4000_0024 + * | | |SYS_VREFCTL: address 0x4000_0028 + * | | |SYS_USBPHY: address 0x4000_002C + * | | |CLK_PWRCTL: address 0x4000_0200 (bit[6] is not protected for power wake-up interrupt clear) + * | | |SYS_SRAM_BISTCTL: address 0x4000_00D0 + * | | |CLK_APBCLK0 [0]: address 0x4000_0208 (bit[0] is watchdog clock enable) + * | | |CLK_CLKSEL0: address 0x4000_0210 (for HCLK and CPU STCLK clock source select) + * | | |CLK_CLKSEL1 [1:0]: address 0x4000_0214 (for watchdog clock source select) + * | | |CLK_CLKSEL1 [31:30]: address 0x4000_0214 (for window watchdog clock source select) + * | | |CLK_CLKDSTS: address 0x4000_0274 + * | | |NMIEN: address 0x4000_0300 + * | | |FMC_ISPCTL: address 0x4000_C000 (Flash ISP Control register) + * | | |FMC_ISPTRG: address 0x4000_C010 (ISP Trigger Control register) + * | | |FMC_ISPSTS: address 0x4000_C040 + * | | |WDT_CTL: address 0x4004_0000 + * | | |FMC_FTCTL: address 0x4000_5018 + * | | |FMC_ICPCMD: address 0x4000_501C + * | | |CLK_PLLCTL: address 0x40000240 + * | | |PWM_CTL0: address 0x4005_8000 + * | | |PWM_CTL0: address 0x4005_9000 + * | | |PWM_DTCTL0_1: address 0x4005_8070 + * | | |PWM_DTCTL0_1: address 0x4005_9070 + * | | |PWM_DTCTL2_3: address 0x4005_8074 + * | | |PWM_DTCTL2_3: address 0x4005_9074 + * | | |PWM_DTCTL4_5: address 0x4005_8078 + * | | |PWM_DTCTL4_5: address 0x4005_9078 + * | | |PWM_BRKCTL0_1: address 0x4005_80C8 + * | | |PWM_BRKCTL0_1: address 0x4005_90C8 + * | | |PWM_BRKCTL2_3: address0x4005_80CC + * | | |PWM_BRKCTL2_3: address0x4005_90CC + * | | |PWM_BRKCTL4_5: address0x4005_80D0 + * | | |PWM_BRKCTL4_5: address0x4005_90D0 + * | | |PWM_INTEN1: address0x4005_80E4 + * | | |PWM_INTEN1: address0x4005_90E4 + * | | |PWM_INTSTS1: address0x4005_80EC + * | | |PWM_INTSTS1: address0x4005_90EC + */ + + __I uint32_t PDID; /* Offset: 0x00 Part Device Identification Number Register */ + __IO uint32_t RSTSTS; /* Offset: 0x04 System Reset Status Register */ + __IO uint32_t IPRST0; /* Offset: 0x08 Peripheral Reset Control Register 0 */ + __IO uint32_t IPRST1; /* Offset: 0x0C Peripheral Reset Control Register 1 */ + __IO uint32_t IPRST2; /* Offset: 0x10 Peripheral Reset Control Register 2 */ + __I uint32_t RESERVE0[1]; + __IO uint32_t BODCTL; /* Offset: 0x18 Brown-Out Detector Control Register */ + __IO uint32_t IVSCTL; /* Offset: 0x1C Internal Voltage Source Control Register */ + __I uint32_t RESERVE1[1]; + __IO uint32_t PORCTL; /* Offset: 0x24 Power-On-Reset Controller Register */ + __IO uint32_t VREFCTL; /* Offset: 0x28 VREF Control Register */ + __IO uint32_t USBPHY; /* Offset: 0x2C USB PHY Control Register */ + __IO uint32_t GPA_MFPL; /* Offset: 0x30 GPIOA Low Byte Multiple Function Control Register */ + __IO uint32_t GPA_MFPH; /* Offset: 0x34 GPIOA High Byte Multiple Function Control Register */ + __IO uint32_t GPB_MFPL; /* Offset: 0x38 GPIOB Low Byte Multiple Function Control Register */ + __IO uint32_t GPB_MFPH; /* Offset: 0x3C GPIOB High Byte Multiple Function Control Register */ + __IO uint32_t GPC_MFPL; /* Offset: 0x40 GPIOC Low Byte Multiple Function Control Register */ + __IO uint32_t GPC_MFPH; /* Offset: 0x44 GPIOC High Byte Multiple Function Control Register */ + __IO uint32_t GPD_MFPL; /* Offset: 0x48 GPIOD Low Byte Multiple Function Control Register */ + __IO uint32_t GPD_MFPH; /* Offset: 0x4C GPIOD High Byte Multiple Function Control Register */ + __IO uint32_t GPE_MFPL; /* Offset: 0x50 GPIOE Low Byte Multiple Function Control Register */ + __IO uint32_t GPE_MFPH; /* Offset: 0x54 GPIOE High Byte Multiple Function Control Register */ + __IO uint32_t GPF_MFPL; /* Offset: 0x58 GPIOF Low Byte Multiple Function Control Register */ + __I uint32_t RESERVE2[25]; + __IO uint32_t SRAM_INTCTL; /* Offset: 0xC0 System SRAM Interrupt Enable Control Register */ + __I uint32_t SRAM_STATUS; /* Offset: 0xC4 System SRAM Parity Error Status Register */ + __I uint32_t SRAM_ERRADDR; /* Offset: 0xC8 System SRAM Parity Check Error Address Register */ + __I uint32_t RESERVE3[1]; + __IO uint32_t SRAM_BISTCTL; /* Offset: 0xD0 System SRAM BIST Test Control Register */ + __I uint32_t SRAM_BISTSTS; /* Offset: 0xD4 System SRAM BIST Test Status Register */ + __I uint32_t RESERVE4[6]; + __IO uint32_t IRCTCTL; /* Offset: 0xF0 IRC Trim Control Register */ + __IO uint32_t IRCTIEN; /* Offset: 0xF4 IRC Trim Interrupt Enable Register */ + __IO uint32_t IRCTISTS; /* Offset: 0xF8 IRC Trim Interrupt Status Register */ + __I uint32_t RESERVE5[1]; + __IO uint32_t REGLCTL; /* Offset: 0x100 Register Lock Control Register */ + +} SYS_T; + + + +/** + @addtogroup SYS_CONST SYS Bit Field Definition + Constant Definitions for SYS Controller +@{ */ + +#define SYS_PDID_PDID_Pos (0) /*!< SYS_T::PDID: PDID Position */ +#define SYS_PDID_PDID_Msk (0xfffffffful << SYS_PDID_PDID_Pos) /*!< SYS_T::PDID: PDID Mask */ + +#define SYS_RSTSTS_PORF_Pos (0) /*!< SYS_T::RSTSTS: PORF Position */ +#define SYS_RSTSTS_PORF_Msk (0x1ul << SYS_RSTSTS_PORF_Pos) /*!< SYS_T::RSTSTS: PORF Mask */ + +#define SYS_RSTSTS_PINRF_Pos (1) /*!< SYS_T::RSTSTS: PINRF Position */ +#define SYS_RSTSTS_PINRF_Msk (0x1ul << SYS_RSTSTS_PINRF_Pos) /*!< SYS_T::RSTSTS: PINRF Mask */ + +#define SYS_RSTSTS_WDTRF_Pos (2) /*!< SYS_T::RSTSTS: WDTRF Position */ +#define SYS_RSTSTS_WDTRF_Msk (0x1ul << SYS_RSTSTS_WDTRF_Pos) /*!< SYS_T::RSTSTS: WDTRF Mask */ + +#define SYS_RSTSTS_LVRF_Pos (3) /*!< SYS_T::RSTSTS: LVRF Position */ +#define SYS_RSTSTS_LVRF_Msk (0x1ul << SYS_RSTSTS_LVRF_Pos) /*!< SYS_T::RSTSTS: LVRF Mask */ + +#define SYS_RSTSTS_BODRF_Pos (4) /*!< SYS_T::RSTSTS: BODRF Position */ +#define SYS_RSTSTS_BODRF_Msk (0x1ul << SYS_RSTSTS_BODRF_Pos) /*!< SYS_T::RSTSTS: BODRF Mask */ + +#define SYS_RSTSTS_SYSRF_Pos (5) /*!< SYS_T::RSTSTS: SYSRF Position */ +#define SYS_RSTSTS_SYSRF_Msk (0x1ul << SYS_RSTSTS_SYSRF_Pos) /*!< SYS_T::RSTSTS: SYSRF Mask */ + +#define SYS_RSTSTS_CPURF_Pos (7) /*!< SYS_T::RSTSTS: CPURF Position */ +#define SYS_RSTSTS_CPURF_Msk (0x1ul << SYS_RSTSTS_CPURF_Pos) /*!< SYS_T::RSTSTS: CPURF Mask */ + +#define SYS_RSTSTS_CPULKRF_Pos (8) /*!< SYS_T::RSTSTS: CPULKRF Position */ +#define SYS_RSTSTS_CPULKRF_Msk (0x1ul << SYS_RSTSTS_CPULKRF_Pos) /*!< SYS_T::RSTSTS: CPULKRF Mask */ + +#define SYS_IPRST0_CHIPRST_Pos (0) /*!< SYS_T::IPRST0: CHIPRST Position */ +#define SYS_IPRST0_CHIPRST_Msk (0x1ul << SYS_IPRST0_CHIPRST_Pos) /*!< SYS_T::IPRST0: CHIPRST Mask */ + +#define SYS_IPRST0_CPURST_Pos (1) /*!< SYS_T::IPRST0: CPURST Position */ +#define SYS_IPRST0_CPURST_Msk (0x1ul << SYS_IPRST0_CPURST_Pos) /*!< SYS_T::IPRST0: CPURST Mask */ + +#define SYS_IPRST0_PDMARST_Pos (2) /*!< SYS_T::IPRST0: PDMARST Position */ +#define SYS_IPRST0_PDMARST_Msk (0x1ul << SYS_IPRST0_PDMARST_Pos) /*!< SYS_T::IPRST0: PDMARST Mask */ + +#define SYS_IPRST0_EBIRST_Pos (3) /*!< SYS_T::IPRST0: EBIRST Position */ +#define SYS_IPRST0_EBIRST_Msk (0x1ul << SYS_IPRST0_EBIRST_Pos) /*!< SYS_T::IPRST0: EBIRST Mask */ + +#define SYS_IPRST0_USBHRST_Pos (4) /*!< SYS_T::IPRST0: USBHRST Position */ +#define SYS_IPRST0_USBHRST_Msk (0x1ul << SYS_IPRST0_USBHRST_Pos) /*!< SYS_T::IPRST0: USBHRST Mask */ + +#define SYS_IPRST0_CRCRST_Pos (7) /*!< SYS_T::IPRST0: CRCRST Position */ +#define SYS_IPRST0_CRCRST_Msk (0x1ul << SYS_IPRST0_CRCRST_Pos) /*!< SYS_T::IPRST0: CRCRST Mask */ + +#define SYS_IPRST1_GPIORST_Pos (1) /*!< SYS_T::IPRST1: GPIORST Position */ +#define SYS_IPRST1_GPIORST_Msk (0x1ul << SYS_IPRST1_GPIORST_Pos) /*!< SYS_T::IPRST1: GPIORST Mask */ + +#define SYS_IPRST1_TMR0RST_Pos (2) /*!< SYS_T::IPRST1: TMR0RST Position */ +#define SYS_IPRST1_TMR0RST_Msk (0x1ul << SYS_IPRST1_TMR0RST_Pos) /*!< SYS_T::IPRST1: TMR0RST Mask */ + +#define SYS_IPRST1_TMR1RST_Pos (3) /*!< SYS_T::IPRST1: TMR1RST Position */ +#define SYS_IPRST1_TMR1RST_Msk (0x1ul << SYS_IPRST1_TMR1RST_Pos) /*!< SYS_T::IPRST1: TMR1RST Mask */ + +#define SYS_IPRST1_TMR2RST_Pos (4) /*!< SYS_T::IPRST1: TMR2RST Position */ +#define SYS_IPRST1_TMR2RST_Msk (0x1ul << SYS_IPRST1_TMR2RST_Pos) /*!< SYS_T::IPRST1: TMR2RST Mask */ + +#define SYS_IPRST1_TMR3RST_Pos (5) /*!< SYS_T::IPRST1: TMR3RST Position */ +#define SYS_IPRST1_TMR3RST_Msk (0x1ul << SYS_IPRST1_TMR3RST_Pos) /*!< SYS_T::IPRST1: TMR3RST Mask */ + +#define SYS_IPRST1_ACMP01RST_Pos (7) /*!< SYS_T::IPRST1: ACMP01RST Position */ +#define SYS_IPRST1_ACMP01RST_Msk (0x1ul << SYS_IPRST1_ACMP01RST_Pos) /*!< SYS_T::IPRST1: ACMP01RST Mask */ + +#define SYS_IPRST1_I2C0RST_Pos (8) /*!< SYS_T::IPRST1: I2C0RST Position */ +#define SYS_IPRST1_I2C0RST_Msk (0x1ul << SYS_IPRST1_I2C0RST_Pos) /*!< SYS_T::IPRST1: I2C0RST Mask */ + +#define SYS_IPRST1_I2C1RST_Pos (9) /*!< SYS_T::IPRST1: I2C1RST Position */ +#define SYS_IPRST1_I2C1RST_Msk (0x1ul << SYS_IPRST1_I2C1RST_Pos) /*!< SYS_T::IPRST1: I2C1RST Mask */ + +#define SYS_IPRST1_SPI0RST_Pos (12) /*!< SYS_T::IPRST1: SPI0RST Position */ +#define SYS_IPRST1_SPI0RST_Msk (0x1ul << SYS_IPRST1_SPI0RST_Pos) /*!< SYS_T::IPRST1: SPI0RST Mask */ + +#define SYS_IPRST1_SPI1RST_Pos (13) /*!< SYS_T::IPRST1: SPI1RST Position */ +#define SYS_IPRST1_SPI1RST_Msk (0x1ul << SYS_IPRST1_SPI1RST_Pos) /*!< SYS_T::IPRST1: SPI1RST Mask */ + +#define SYS_IPRST1_SPI2RST_Pos (14) /*!< SYS_T::IPRST1: SPI2RST Position */ +#define SYS_IPRST1_SPI2RST_Msk (0x1ul << SYS_IPRST1_SPI2RST_Pos) /*!< SYS_T::IPRST1: SPI2RST Mask */ + +#define SYS_IPRST1_UART0RST_Pos (16) /*!< SYS_T::IPRST1: UART0RST Position */ +#define SYS_IPRST1_UART0RST_Msk (0x1ul << SYS_IPRST1_UART0RST_Pos) /*!< SYS_T::IPRST1: UART0RST Mask */ + +#define SYS_IPRST1_UART1RST_Pos (17) /*!< SYS_T::IPRST1: UART1RST Position */ +#define SYS_IPRST1_UART1RST_Msk (0x1ul << SYS_IPRST1_UART1RST_Pos) /*!< SYS_T::IPRST1: UART1RST Mask */ + +#define SYS_IPRST1_UART2RST_Pos (18) /*!< SYS_T::IPRST1: UART2RST Position */ +#define SYS_IPRST1_UART2RST_Msk (0x1ul << SYS_IPRST1_UART2RST_Pos) /*!< SYS_T::IPRST1: UART2RST Mask */ + +#define SYS_IPRST1_UART3RST_Pos (19) /*!< SYS_T::IPRST1: UART3RST Position */ +#define SYS_IPRST1_UART3RST_Msk (0x1ul << SYS_IPRST1_UART3RST_Pos) /*!< SYS_T::IPRST1: UART3RST Mask */ + +#define SYS_IPRST1_CAN0RST_Pos (24) /*!< SYS_T::IPRST1: CAN0RST Position */ +#define SYS_IPRST1_CAN0RST_Msk (0x1ul << SYS_IPRST1_CAN0RST_Pos) /*!< SYS_T::IPRST1: CAN0RST Mask */ + +#define SYS_IPRST1_OTGRST_Pos (26) /*!< SYS_T::IPRST1: OTGRST Position */ +#define SYS_IPRST1_OTGRST_Msk (0x1ul << SYS_IPRST1_OTGRST_Pos) /*!< SYS_T::IPRST1: OTGRST Mask */ + +#define SYS_IPRST1_USBDRST_Pos (27) /*!< SYS_T::IPRST1: USBDRST Position */ +#define SYS_IPRST1_USBDRST_Msk (0x1ul << SYS_IPRST1_USBDRST_Pos) /*!< SYS_T::IPRST1: USBDRST Mask */ + +#define SYS_IPRST1_EADCRST_Pos (28) /*!< SYS_T::IPRST1: EADCRST Position */ +#define SYS_IPRST1_EADCRST_Msk (0x1ul << SYS_IPRST1_EADCRST_Pos) /*!< SYS_T::IPRST1: EADCRST Mask */ + +#define SYS_IPRST2_SC0RST_Pos (0) /*!< SYS_T::IPRST2: SC0RST Position */ +#define SYS_IPRST2_SC0RST_Msk (0x1ul << SYS_IPRST2_SC0RST_Pos) /*!< SYS_T::IPRST2: SC0RST Mask */ + +#define SYS_IPRST2_DACRST_Pos (12) /*!< SYS_T::IPRST2: DACRST Position */ +#define SYS_IPRST2_DACRST_Msk (0x1ul << SYS_IPRST2_DACRST_Pos) /*!< SYS_T::IPRST2: DACRST Mask */ + +#define SYS_IPRST2_PWM0RST_Pos (16) /*!< SYS_T::IPRST2: PWM0RST Position */ +#define SYS_IPRST2_PWM0RST_Msk (0x1ul << SYS_IPRST2_PWM0RST_Pos) /*!< SYS_T::IPRST2: PWM0RST Mask */ + +#define SYS_IPRST2_PWM1RST_Pos (17) /*!< SYS_T::IPRST2: PWM1RST Position */ +#define SYS_IPRST2_PWM1RST_Msk (0x1ul << SYS_IPRST2_PWM1RST_Pos) /*!< SYS_T::IPRST2: PWM1RST Mask */ + +#define SYS_IPRST2_TKRST_Pos (25) /*!< SYS_T::IPRST2: TKRST Position */ +#define SYS_IPRST2_TKRST_Msk (0x1ul << SYS_IPRST2_TKRST_Pos) /*!< SYS_T::IPRST2: TKRST Mask */ + +#define SYS_BODCTL_BODEN_Pos (0) /*!< SYS_T::BODCTL: BODEN Position */ +#define SYS_BODCTL_BODEN_Msk (0x1ul << SYS_BODCTL_BODEN_Pos) /*!< SYS_T::BODCTL: BODEN Mask */ + +#define SYS_BODCTL_BODVL_Pos (1) /*!< SYS_T::BODCTL: BODVL Position */ +#define SYS_BODCTL_BODVL_Msk (0x3ul << SYS_BODCTL_BODVL_Pos) /*!< SYS_T::BODCTL: BODVL Mask */ + +#define SYS_BODCTL_BODRSTEN_Pos (3) /*!< SYS_T::BODCTL: BODRSTEN Position */ +#define SYS_BODCTL_BODRSTEN_Msk (0x1ul << SYS_BODCTL_BODRSTEN_Pos) /*!< SYS_T::BODCTL: BODRSTEN Mask */ + +#define SYS_BODCTL_BODIF_Pos (4) /*!< SYS_T::BODCTL: BODIF Position */ +#define SYS_BODCTL_BODIF_Msk (0x1ul << SYS_BODCTL_BODIF_Pos) /*!< SYS_T::BODCTL: BODIF Mask */ + +#define SYS_BODCTL_BODLPM_Pos (5) /*!< SYS_T::BODCTL: BODLPM Position */ +#define SYS_BODCTL_BODLPM_Msk (0x1ul << SYS_BODCTL_BODLPM_Pos) /*!< SYS_T::BODCTL: BODLPM Mask */ + +#define SYS_BODCTL_BODOUT_Pos (6) /*!< SYS_T::BODCTL: BODOUT Position */ +#define SYS_BODCTL_BODOUT_Msk (0x1ul << SYS_BODCTL_BODOUT_Pos) /*!< SYS_T::BODCTL: BODOUT Mask */ + +#define SYS_BODCTL_LVREN_Pos (7) /*!< SYS_T::BODCTL: LVREN Position */ +#define SYS_BODCTL_LVREN_Msk (0x1ul << SYS_BODCTL_LVREN_Pos) /*!< SYS_T::BODCTL: LVREN Mask */ + +#define SYS_BODCTL_BODDGSEL_Pos (8) /*!< SYS_T::BODCTL: BODDGSEL Position */ +#define SYS_BODCTL_BODDGSEL_Msk (0x7ul << SYS_BODCTL_BODDGSEL_Pos) /*!< SYS_T::BODCTL: BODDGSEL Mask */ + +#define SYS_BODCTL_LVRDGSEL_Pos (12) /*!< SYS_T::BODCTL: LVRDGSEL Position */ +#define SYS_BODCTL_LVRDGSEL_Msk (0x7ul << SYS_BODCTL_LVRDGSEL_Pos) /*!< SYS_T::BODCTL: LVRDGSEL Mask */ + +#define SYS_IVSCTL_VTEMPEN_Pos (0) /*!< SYS_T::IVSCTL: VTEMPEN Position */ +#define SYS_IVSCTL_VTEMPEN_Msk (0x1ul << SYS_IVSCTL_VTEMPEN_Pos) /*!< SYS_T::IVSCTL: VTEMPEN Mask */ + +#define SYS_IVSCTL_VBATUGEN_Pos (1) /*!< SYS_T::IVSCTL: VBATUGEN Position */ +#define SYS_IVSCTL_VBATUGEN_Msk (0x1ul << SYS_IVSCTL_VBATUGEN_Pos) /*!< SYS_T::IVSCTL: VBATUGEN Mask */ + +#define SYS_PORCTL_POROFF_Pos (0) /*!< SYS_T::PORCTL: POROFF Position */ +#define SYS_PORCTL_POROFF_Msk (0xfffful << SYS_PORCTL_POROFF_Pos) /*!< SYS_T::PORCTL: POROFF Mask */ + +#define SYS_VREFCTL_VREFCTL_Pos (0) /*!< SYS_T::VREFCTL: VREFCTL Position */ +#define SYS_VREFCTL_VREFCTL_Msk (0x1ful << SYS_VREFCTL_VREFCTL_Pos) /*!< SYS_T::VREFCTL: VREFCTL Mask */ + +#define SYS_USBPHY_USBROLE_Pos (0) /*!< SYS_T::USBPHY: USBROLE Position */ +#define SYS_USBPHY_USBROLE_Msk (0x3ul << SYS_USBPHY_USBROLE_Pos) /*!< SYS_T::USBPHY: USBROLE Mask */ + +#define SYS_USBPHY_LDO33EN_Pos (8) /*!< SYS_T::USBPHY: LDO33EN Position */ +#define SYS_USBPHY_LDO33EN_Msk (0x1ul << SYS_USBPHY_LDO33EN_Pos) /*!< SYS_T::USBPHY: LDO33EN Mask */ + +#define SYS_GPA_MFPL_PA0MFP_Pos (0) /*!< SYS_T::GPA_MFPL: PA0MFP Position */ +#define SYS_GPA_MFPL_PA0MFP_Msk (0xful << SYS_GPA_MFPL_PA0MFP_Pos) /*!< SYS_T::GPA_MFPL: PA0MFP Mask */ + +#define SYS_GPA_MFPL_PA1MFP_Pos (4) /*!< SYS_T::GPA_MFPL: PA1MFP Position */ +#define SYS_GPA_MFPL_PA1MFP_Msk (0xful << SYS_GPA_MFPL_PA1MFP_Pos) /*!< SYS_T::GPA_MFPL: PA1MFP Mask */ + +#define SYS_GPA_MFPL_PA2MFP_Pos (8) /*!< SYS_T::GPA_MFPL: PA2MFP Position */ +#define SYS_GPA_MFPL_PA2MFP_Msk (0xful << SYS_GPA_MFPL_PA2MFP_Pos) /*!< SYS_T::GPA_MFPL: PA2MFP Mask */ + +#define SYS_GPA_MFPL_PA3MFP_Pos (12) /*!< SYS_T::GPA_MFPL: PA3MFP Position */ +#define SYS_GPA_MFPL_PA3MFP_Msk (0xful << SYS_GPA_MFPL_PA3MFP_Pos) /*!< SYS_T::GPA_MFPL: PA3MFP Mask */ + +#define SYS_GPA_MFPL_PA4MFP_Pos (16) /*!< SYS_T::GPA_MFPL: PA4MFP Position */ +#define SYS_GPA_MFPL_PA4MFP_Msk (0xful << SYS_GPA_MFPL_PA4MFP_Pos) /*!< SYS_T::GPA_MFPL: PA4MFP Mask */ + +#define SYS_GPA_MFPL_PA5MFP_Pos (20) /*!< SYS_T::GPA_MFPL: PA5MFP Position */ +#define SYS_GPA_MFPL_PA5MFP_Msk (0xful << SYS_GPA_MFPL_PA5MFP_Pos) /*!< SYS_T::GPA_MFPL: PA5MFP Mask */ + +#define SYS_GPA_MFPL_PA6MFP_Pos (24) /*!< SYS_T::GPA_MFPL: PA6MFP Position */ +#define SYS_GPA_MFPL_PA6MFP_Msk (0xful << SYS_GPA_MFPL_PA6MFP_Pos) /*!< SYS_T::GPA_MFPL: PA6MFP Mask */ + +#define SYS_GPA_MFPL_PA7MFP_Pos (28) /*!< SYS_T::GPA_MFPL: PA7MFP Position */ +#define SYS_GPA_MFPL_PA7MFP_Msk (0xful << SYS_GPA_MFPL_PA7MFP_Pos) /*!< SYS_T::GPA_MFPL: PA7MFP Mask */ + +#define SYS_GPA_MFPH_PA8MFP_Pos (0) /*!< SYS_T::GPA_MFPH: PA8MFP Position */ +#define SYS_GPA_MFPH_PA8MFP_Msk (0xful << SYS_GPA_MFPH_PA8MFP_Pos) /*!< SYS_T::GPA_MFPH: PA8MFP Mask */ + +#define SYS_GPA_MFPH_PA9MFP_Pos (4) /*!< SYS_T::GPA_MFPH: PA9MFP Position */ +#define SYS_GPA_MFPH_PA9MFP_Msk (0xful << SYS_GPA_MFPH_PA9MFP_Pos) /*!< SYS_T::GPA_MFPH: PA9MFP Mask */ + +#define SYS_GPA_MFPH_PA10MFP_Pos (8) /*!< SYS_T::GPA_MFPH: PA10MFP Position */ +#define SYS_GPA_MFPH_PA10MFP_Msk (0xful << SYS_GPA_MFPH_PA10MFP_Pos) /*!< SYS_T::GPA_MFPH: PA10MFP Mask */ + +#define SYS_GPA_MFPH_PA11MFP_Pos (12) /*!< SYS_T::GPA_MFPH: PA11MFP Position */ +#define SYS_GPA_MFPH_PA11MFP_Msk (0xful << SYS_GPA_MFPH_PA11MFP_Pos) /*!< SYS_T::GPA_MFPH: PA11MFP Mask */ + +#define SYS_GPA_MFPH_PA12MFP_Pos (16) /*!< SYS_T::GPA_MFPH: PA12MFP Position */ +#define SYS_GPA_MFPH_PA12MFP_Msk (0xful << SYS_GPA_MFPH_PA12MFP_Pos) /*!< SYS_T::GPA_MFPH: PA12MFP Mask */ + +#define SYS_GPA_MFPH_PA13MFP_Pos (20) /*!< SYS_T::GPA_MFPH: PA13MFP Position */ +#define SYS_GPA_MFPH_PA13MFP_Msk (0xful << SYS_GPA_MFPH_PA13MFP_Pos) /*!< SYS_T::GPA_MFPH: PA13MFP Mask */ + +#define SYS_GPA_MFPH_PA14MFP_Pos (24) /*!< SYS_T::GPA_MFPH: PA14MFP Position */ +#define SYS_GPA_MFPH_PA14MFP_Msk (0xful << SYS_GPA_MFPH_PA14MFP_Pos) /*!< SYS_T::GPA_MFPH: PA14MFP Mask */ + +#define SYS_GPA_MFPH_PA15MFP_Pos (28) /*!< SYS_T::GPA_MFPH: PA15MFP Position */ +#define SYS_GPA_MFPH_PA15MFP_Msk (0xful << SYS_GPA_MFPH_PA15MFP_Pos) /*!< SYS_T::GPA_MFPH: PA15MFP Mask */ + +#define SYS_GPB_MFPL_PB0MFP_Pos (0) /*!< SYS_T::GPB_MFPL: PB0MFP Position */ +#define SYS_GPB_MFPL_PB0MFP_Msk (0xful << SYS_GPB_MFPL_PB0MFP_Pos) /*!< SYS_T::GPB_MFPL: PB0MFP Mask */ + +#define SYS_GPB_MFPL_PB1MFP_Pos (4) /*!< SYS_T::GPB_MFPL: PB1MFP Position */ +#define SYS_GPB_MFPL_PB1MFP_Msk (0xful << SYS_GPB_MFPL_PB1MFP_Pos) /*!< SYS_T::GPB_MFPL: PB1MFP Mask */ + +#define SYS_GPB_MFPL_PB2MFP_Pos (8) /*!< SYS_T::GPB_MFPL: PB2MFP Position */ +#define SYS_GPB_MFPL_PB2MFP_Msk (0xful << SYS_GPB_MFPL_PB2MFP_Pos) /*!< SYS_T::GPB_MFPL: PB2MFP Mask */ + +#define SYS_GPB_MFPL_PB3MFP_Pos (12) /*!< SYS_T::GPB_MFPL: PB3MFP Position */ +#define SYS_GPB_MFPL_PB3MFP_Msk (0xful << SYS_GPB_MFPL_PB3MFP_Pos) /*!< SYS_T::GPB_MFPL: PB3MFP Mask */ + +#define SYS_GPB_MFPL_PB4MFP_Pos (16) /*!< SYS_T::GPB_MFPL: PB4MFP Position */ +#define SYS_GPB_MFPL_PB4MFP_Msk (0xful << SYS_GPB_MFPL_PB4MFP_Pos) /*!< SYS_T::GPB_MFPL: PB4MFP Mask */ + +#define SYS_GPB_MFPL_PB5MFP_Pos (20) /*!< SYS_T::GPB_MFPL: PB5MFP Position */ +#define SYS_GPB_MFPL_PB5MFP_Msk (0xful << SYS_GPB_MFPL_PB5MFP_Pos) /*!< SYS_T::GPB_MFPL: PB5MFP Mask */ + +#define SYS_GPB_MFPL_PB6MFP_Pos (24) /*!< SYS_T::GPB_MFPL: PB6MFP Position */ +#define SYS_GPB_MFPL_PB6MFP_Msk (0xful << SYS_GPB_MFPL_PB6MFP_Pos) /*!< SYS_T::GPB_MFPL: PB6MFP Mask */ + +#define SYS_GPB_MFPL_PB7MFP_Pos (28) /*!< SYS_T::GPB_MFPL: PB7MFP Position */ +#define SYS_GPB_MFPL_PB7MFP_Msk (0xful << SYS_GPB_MFPL_PB7MFP_Pos) /*!< SYS_T::GPB_MFPL: PB7MFP Mask */ + +#define SYS_GPB_MFPH_PB8MFP_Pos (0) /*!< SYS_T::GPB_MFPH: PB8MFP Position */ +#define SYS_GPB_MFPH_PB8MFP_Msk (0xful << SYS_GPB_MFPH_PB8MFP_Pos) /*!< SYS_T::GPB_MFPH: PB8MFP Mask */ + +#define SYS_GPB_MFPH_PB9MFP_Pos (4) /*!< SYS_T::GPB_MFPH: PB9MFP Position */ +#define SYS_GPB_MFPH_PB9MFP_Msk (0xful << SYS_GPB_MFPH_PB9MFP_Pos) /*!< SYS_T::GPB_MFPH: PB9MFP Mask */ + +#define SYS_GPB_MFPH_PB10MFP_Pos (8) /*!< SYS_T::GPB_MFPH: PB10MFP Position */ +#define SYS_GPB_MFPH_PB10MFP_Msk (0xful << SYS_GPB_MFPH_PB10MFP_Pos) /*!< SYS_T::GPB_MFPH: PB10MFP Mask */ + +#define SYS_GPB_MFPH_PB11MFP_Pos (12) /*!< SYS_T::GPB_MFPH: PB11MFP Position */ +#define SYS_GPB_MFPH_PB11MFP_Msk (0xful << SYS_GPB_MFPH_PB11MFP_Pos) /*!< SYS_T::GPB_MFPH: PB11MFP Mask */ + +#define SYS_GPB_MFPH_PB12MFP_Pos (16) /*!< SYS_T::GPB_MFPH: PB12MFP Position */ +#define SYS_GPB_MFPH_PB12MFP_Msk (0xful << SYS_GPB_MFPH_PB12MFP_Pos) /*!< SYS_T::GPB_MFPH: PB12MFP Mask */ + +#define SYS_GPB_MFPH_PB13MFP_Pos (20) /*!< SYS_T::GPB_MFPH: PB13MFP Position */ +#define SYS_GPB_MFPH_PB13MFP_Msk (0xful << SYS_GPB_MFPH_PB13MFP_Pos) /*!< SYS_T::GPB_MFPH: PB13MFP Mask */ + +#define SYS_GPB_MFPH_PB14MFP_Pos (24) /*!< SYS_T::GPB_MFPH: PB14MFP Position */ +#define SYS_GPB_MFPH_PB14MFP_Msk (0xful << SYS_GPB_MFPH_PB14MFP_Pos) /*!< SYS_T::GPB_MFPH: PB14MFP Mask */ + +#define SYS_GPB_MFPH_PB15MFP_Pos (28) /*!< SYS_T::GPB_MFPH: PB15MFP Position */ +#define SYS_GPB_MFPH_PB15MFP_Msk (0xful << SYS_GPB_MFPH_PB15MFP_Pos) /*!< SYS_T::GPB_MFPH: PB15MFP Mask */ + +#define SYS_GPC_MFPL_PC0MFP_Pos (0) /*!< SYS_T::GPC_MFPL: PC0MFP Position */ +#define SYS_GPC_MFPL_PC0MFP_Msk (0xful << SYS_GPC_MFPL_PC0MFP_Pos) /*!< SYS_T::GPC_MFPL: PC0MFP Mask */ + +#define SYS_GPC_MFPL_PC1MFP_Pos (4) /*!< SYS_T::GPC_MFPL: PC1MFP Position */ +#define SYS_GPC_MFPL_PC1MFP_Msk (0xful << SYS_GPC_MFPL_PC1MFP_Pos) /*!< SYS_T::GPC_MFPL: PC1MFP Mask */ + +#define SYS_GPC_MFPL_PC2MFP_Pos (8) /*!< SYS_T::GPC_MFPL: PC2MFP Position */ +#define SYS_GPC_MFPL_PC2MFP_Msk (0xful << SYS_GPC_MFPL_PC2MFP_Pos) /*!< SYS_T::GPC_MFPL: PC2MFP Mask */ + +#define SYS_GPC_MFPL_PC3MFP_Pos (12) /*!< SYS_T::GPC_MFPL: PC3MFP Position */ +#define SYS_GPC_MFPL_PC3MFP_Msk (0xful << SYS_GPC_MFPL_PC3MFP_Pos) /*!< SYS_T::GPC_MFPL: PC3MFP Mask */ + +#define SYS_GPC_MFPL_PC4MFP_Pos (16) /*!< SYS_T::GPC_MFPL: PC4MFP Position */ +#define SYS_GPC_MFPL_PC4MFP_Msk (0xful << SYS_GPC_MFPL_PC4MFP_Pos) /*!< SYS_T::GPC_MFPL: PC4MFP Mask */ + +#define SYS_GPC_MFPL_PC5MFP_Pos (20) /*!< SYS_T::GPC_MFPL: PC5MFP Position */ +#define SYS_GPC_MFPL_PC5MFP_Msk (0xful << SYS_GPC_MFPL_PC5MFP_Pos) /*!< SYS_T::GPC_MFPL: PC5MFP Mask */ + +#define SYS_GPC_MFPL_PC6MFP_Pos (24) /*!< SYS_T::GPC_MFPL: PC6MFP Position */ +#define SYS_GPC_MFPL_PC6MFP_Msk (0xful << SYS_GPC_MFPL_PC6MFP_Pos) /*!< SYS_T::GPC_MFPL: PC6MFP Mask */ + +#define SYS_GPC_MFPL_PC7MFP_Pos (28) /*!< SYS_T::GPC_MFPL: PC7MFP Position */ +#define SYS_GPC_MFPL_PC7MFP_Msk (0xful << SYS_GPC_MFPL_PC7MFP_Pos) /*!< SYS_T::GPC_MFPL: PC7MFP Mask */ + +#define SYS_GPC_MFPH_PC8MFP_Pos (0) /*!< SYS_T::GPC_MFPH: PC8MFP Position */ +#define SYS_GPC_MFPH_PC8MFP_Msk (0xful << SYS_GPC_MFPH_PC8MFP_Pos) /*!< SYS_T::GPC_MFPH: PC8MFP Mask */ + +#define SYS_GPC_MFPH_PC9MFP_Pos (4) /*!< SYS_T::GPC_MFPH: PC9MFP Position */ +#define SYS_GPC_MFPH_PC9MFP_Msk (0xful << SYS_GPC_MFPH_PC9MFP_Pos) /*!< SYS_T::GPC_MFPH: PC9MFP Mask */ + +#define SYS_GPC_MFPH_PC10MFP_Pos (8) /*!< SYS_T::GPC_MFPH: PC10MFP Position */ +#define SYS_GPC_MFPH_PC10MFP_Msk (0xful << SYS_GPC_MFPH_PC10MFP_Pos) /*!< SYS_T::GPC_MFPH: PC10MFP Mask */ + +#define SYS_GPC_MFPH_PC11MFP_Pos (12) /*!< SYS_T::GPC_MFPH: PC11MFP Position */ +#define SYS_GPC_MFPH_PC11MFP_Msk (0xful << SYS_GPC_MFPH_PC11MFP_Pos) /*!< SYS_T::GPC_MFPH: PC11MFP Mask */ + +#define SYS_GPC_MFPH_PC12MFP_Pos (16) /*!< SYS_T::GPC_MFPH: PC12MFP Position */ +#define SYS_GPC_MFPH_PC12MFP_Msk (0xful << SYS_GPC_MFPH_PC12MFP_Pos) /*!< SYS_T::GPC_MFPH: PC12MFP Mask */ + +#define SYS_GPC_MFPH_PC13MFP_Pos (20) /*!< SYS_T::GPC_MFPH: PC13MFP Position */ +#define SYS_GPC_MFPH_PC13MFP_Msk (0xful << SYS_GPC_MFPH_PC13MFP_Pos) /*!< SYS_T::GPC_MFPH: PC13MFP Mask */ + +#define SYS_GPC_MFPH_PC14MFP_Pos (24) /*!< SYS_T::GPC_MFPH: PC14MFP Position */ +#define SYS_GPC_MFPH_PC14MFP_Msk (0xful << SYS_GPC_MFPH_PC14MFP_Pos) /*!< SYS_T::GPC_MFPH: PC14MFP Mask */ + +#define SYS_GPC_MFPH_PC15MFP_Pos (28) /*!< SYS_T::GPC_MFPH: PC15MFP Position */ +#define SYS_GPC_MFPH_PC15MFP_Msk (0xful << SYS_GPC_MFPH_PC15MFP_Pos) /*!< SYS_T::GPC_MFPH: PC15MFP Mask */ + +#define SYS_GPD_MFPL_PD0MFP_Pos (0) /*!< SYS_T::GPD_MFPL: PD0MFP Position */ +#define SYS_GPD_MFPL_PD0MFP_Msk (0xful << SYS_GPD_MFPL_PD0MFP_Pos) /*!< SYS_T::GPD_MFPL: PD0MFP Mask */ + +#define SYS_GPD_MFPL_PD1MFP_Pos (4) /*!< SYS_T::GPD_MFPL: PD1MFP Position */ +#define SYS_GPD_MFPL_PD1MFP_Msk (0xful << SYS_GPD_MFPL_PD1MFP_Pos) /*!< SYS_T::GPD_MFPL: PD1MFP Mask */ + +#define SYS_GPD_MFPL_PD2MFP_Pos (8) /*!< SYS_T::GPD_MFPL: PD2MFP Position */ +#define SYS_GPD_MFPL_PD2MFP_Msk (0xful << SYS_GPD_MFPL_PD2MFP_Pos) /*!< SYS_T::GPD_MFPL: PD2MFP Mask */ + +#define SYS_GPD_MFPL_PD3MFP_Pos (12) /*!< SYS_T::GPD_MFPL: PD3MFP Position */ +#define SYS_GPD_MFPL_PD3MFP_Msk (0xful << SYS_GPD_MFPL_PD3MFP_Pos) /*!< SYS_T::GPD_MFPL: PD3MFP Mask */ + +#define SYS_GPD_MFPL_PD4MFP_Pos (16) /*!< SYS_T::GPD_MFPL: PD4MFP Position */ +#define SYS_GPD_MFPL_PD4MFP_Msk (0xful << SYS_GPD_MFPL_PD4MFP_Pos) /*!< SYS_T::GPD_MFPL: PD4MFP Mask */ + +#define SYS_GPD_MFPL_PD5MFP_Pos (20) /*!< SYS_T::GPD_MFPL: PD5MFP Position */ +#define SYS_GPD_MFPL_PD5MFP_Msk (0xful << SYS_GPD_MFPL_PD5MFP_Pos) /*!< SYS_T::GPD_MFPL: PD5MFP Mask */ + +#define SYS_GPD_MFPL_PD6MFP_Pos (24) /*!< SYS_T::GPD_MFPL: PD6MFP Position */ +#define SYS_GPD_MFPL_PD6MFP_Msk (0xful << SYS_GPD_MFPL_PD6MFP_Pos) /*!< SYS_T::GPD_MFPL: PD6MFP Mask */ + +#define SYS_GPD_MFPL_PD7MFP_Pos (28) /*!< SYS_T::GPD_MFPL: PD7MFP Position */ +#define SYS_GPD_MFPL_PD7MFP_Msk (0xful << SYS_GPD_MFPL_PD7MFP_Pos) /*!< SYS_T::GPD_MFPL: PD7MFP Mask */ + +#define SYS_GPD_MFPH_PD8MFP_Pos (0) /*!< SYS_T::GPD_MFPH: PD8MFP Position */ +#define SYS_GPD_MFPH_PD8MFP_Msk (0xful << SYS_GPD_MFPH_PD8MFP_Pos) /*!< SYS_T::GPD_MFPH: PD8MFP Mask */ + +#define SYS_GPD_MFPH_PD9MFP_Pos (4) /*!< SYS_T::GPD_MFPH: PD9MFP Position */ +#define SYS_GPD_MFPH_PD9MFP_Msk (0xful << SYS_GPD_MFPH_PD9MFP_Pos) /*!< SYS_T::GPD_MFPH: PD9MFP Mask */ + +#define SYS_GPD_MFPH_PD10MFP_Pos (8) /*!< SYS_T::GPD_MFPH: PD10MFP Position */ +#define SYS_GPD_MFPH_PD10MFP_Msk (0xful << SYS_GPD_MFPH_PD10MFP_Pos) /*!< SYS_T::GPD_MFPH: PD10MFP Mask */ + +#define SYS_GPD_MFPH_PD11MFP_Pos (12) /*!< SYS_T::GPD_MFPH: PD11MFP Position */ +#define SYS_GPD_MFPH_PD11MFP_Msk (0xful << SYS_GPD_MFPH_PD11MFP_Pos) /*!< SYS_T::GPD_MFPH: PD11MFP Mask */ + +#define SYS_GPD_MFPH_PD12MFP_Pos (16) /*!< SYS_T::GPD_MFPH: PD12MFP Position */ +#define SYS_GPD_MFPH_PD12MFP_Msk (0xful << SYS_GPD_MFPH_PD12MFP_Pos) /*!< SYS_T::GPD_MFPH: PD12MFP Mask */ + +#define SYS_GPD_MFPH_PD13MFP_Pos (20) /*!< SYS_T::GPD_MFPH: PD13MFP Position */ +#define SYS_GPD_MFPH_PD13MFP_Msk (0xful << SYS_GPD_MFPH_PD13MFP_Pos) /*!< SYS_T::GPD_MFPH: PD13MFP Mask */ + +#define SYS_GPD_MFPH_PD14MFP_Pos (24) /*!< SYS_T::GPD_MFPH: PD14MFP Position */ +#define SYS_GPD_MFPH_PD14MFP_Msk (0xful << SYS_GPD_MFPH_PD14MFP_Pos) /*!< SYS_T::GPD_MFPH: PD14MFP Mask */ + +#define SYS_GPD_MFPH_PD15MFP_Pos (28) /*!< SYS_T::GPD_MFPH: PD15MFP Position */ +#define SYS_GPD_MFPH_PD15MFP_Msk (0xful << SYS_GPD_MFPH_PD15MFP_Pos) /*!< SYS_T::GPD_MFPH: PD15MFP Mask */ + +#define SYS_GPE_MFPL_PE0MFP_Pos (0) /*!< SYS_T::GPE_MFPL: PE0MFP Position */ +#define SYS_GPE_MFPL_PE0MFP_Msk (0xful << SYS_GPE_MFPL_PE0MFP_Pos) /*!< SYS_T::GPE_MFPL: PE0MFP Mask */ + +#define SYS_GPE_MFPL_PE1MFP_Pos (4) /*!< SYS_T::GPE_MFPL: PE1MFP Position */ +#define SYS_GPE_MFPL_PE1MFP_Msk (0xful << SYS_GPE_MFPL_PE1MFP_Pos) /*!< SYS_T::GPE_MFPL: PE1MFP Mask */ + +#define SYS_GPE_MFPL_PE2MFP_Pos (8) /*!< SYS_T::GPE_MFPL: PE2MFP Position */ +#define SYS_GPE_MFPL_PE2MFP_Msk (0xful << SYS_GPE_MFPL_PE2MFP_Pos) /*!< SYS_T::GPE_MFPL: PE2MFP Mask */ + +#define SYS_GPE_MFPL_PE3MFP_Pos (12) /*!< SYS_T::GPE_MFPL: PE3MFP Position */ +#define SYS_GPE_MFPL_PE3MFP_Msk (0xful << SYS_GPE_MFPL_PE3MFP_Pos) /*!< SYS_T::GPE_MFPL: PE3MFP Mask */ + +#define SYS_GPE_MFPL_PE4MFP_Pos (16) /*!< SYS_T::GPE_MFPL: PE4MFP Position */ +#define SYS_GPE_MFPL_PE4MFP_Msk (0xful << SYS_GPE_MFPL_PE4MFP_Pos) /*!< SYS_T::GPE_MFPL: PE4MFP Mask */ + +#define SYS_GPE_MFPL_PE5MFP_Pos (20) /*!< SYS_T::GPE_MFPL: PE5MFP Position */ +#define SYS_GPE_MFPL_PE5MFP_Msk (0xful << SYS_GPE_MFPL_PE5MFP_Pos) /*!< SYS_T::GPE_MFPL: PE5MFP Mask */ + +#define SYS_GPE_MFPL_PE6MFP_Pos (24) /*!< SYS_T::GPE_MFPL: PE6MFP Position */ +#define SYS_GPE_MFPL_PE6MFP_Msk (0xful << SYS_GPE_MFPL_PE6MFP_Pos) /*!< SYS_T::GPE_MFPL: PE6MFP Mask */ + +#define SYS_GPE_MFPL_PE7MFP_Pos (28) /*!< SYS_T::GPE_MFPL: PE7MFP Position */ +#define SYS_GPE_MFPL_PE7MFP_Msk (0xful << SYS_GPE_MFPL_PE7MFP_Pos) /*!< SYS_T::GPE_MFPL: PE7MFP Mask */ + +#define SYS_GPE_MFPH_PE8MFP_Pos (0) /*!< SYS_T::GPE_MFPH: PE8MFP Position */ +#define SYS_GPE_MFPH_PE8MFP_Msk (0xful << SYS_GPE_MFPH_PE8MFP_Pos) /*!< SYS_T::GPE_MFPH: PE8MFP Mask */ + +#define SYS_GPE_MFPH_PE9MFP_Pos (4) /*!< SYS_T::GPE_MFPH: PE9MFP Position */ +#define SYS_GPE_MFPH_PE9MFP_Msk (0xful << SYS_GPE_MFPH_PE9MFP_Pos) /*!< SYS_T::GPE_MFPH: PE9MFP Mask */ + +#define SYS_GPE_MFPH_PE10MFP_Pos (8) /*!< SYS_T::GPE_MFPH: PE10MFP Position */ +#define SYS_GPE_MFPH_PE10MFP_Msk (0xful << SYS_GPE_MFPH_PE10MFP_Pos) /*!< SYS_T::GPE_MFPH: PE10MFP Mask */ + +#define SYS_GPE_MFPH_PE11MFP_Pos (12) /*!< SYS_T::GPE_MFPH: PE11MFP Position */ +#define SYS_GPE_MFPH_PE11MFP_Msk (0xful << SYS_GPE_MFPH_PE11MFP_Pos) /*!< SYS_T::GPE_MFPH: PE11MFP Mask */ + +#define SYS_GPE_MFPH_PE12MFP_Pos (16) /*!< SYS_T::GPE_MFPH: PE12MFP Position */ +#define SYS_GPE_MFPH_PE12MFP_Msk (0xful << SYS_GPE_MFPH_PE12MFP_Pos) /*!< SYS_T::GPE_MFPH: PE12MFP Mask */ + +#define SYS_GPE_MFPH_PE13MFP_Pos (20) /*!< SYS_T::GPE_MFPH: PE13MFP Position */ +#define SYS_GPE_MFPH_PE13MFP_Msk (0xful << SYS_GPE_MFPH_PE13MFP_Pos) /*!< SYS_T::GPE_MFPH: PE13MFP Mask */ + +#define SYS_GPE_MFPH_PE14MFP_Pos (24) /*!< SYS_T::GPE_MFPH: PE14MFP Position */ +#define SYS_GPE_MFPH_PE14MFP_Msk (0xful << SYS_GPE_MFPH_PE14MFP_Pos) /*!< SYS_T::GPE_MFPH: PE14MFP Mask */ + +#define SYS_GPF_MFPL_PF0MFP_Pos (0) /*!< SYS_T::GPF_MFPL: PF0MFP Position */ +#define SYS_GPF_MFPL_PF0MFP_Msk (0xful << SYS_GPF_MFPL_PF0MFP_Pos) /*!< SYS_T::GPF_MFPL: PF0MFP Mask */ + +#define SYS_GPF_MFPL_PF1MFP_Pos (4) /*!< SYS_T::GPF_MFPL: PF1MFP Position */ +#define SYS_GPF_MFPL_PF1MFP_Msk (0xful << SYS_GPF_MFPL_PF1MFP_Pos) /*!< SYS_T::GPF_MFPL: PF1MFP Mask */ + +#define SYS_GPF_MFPL_PF2MFP_Pos (8) /*!< SYS_T::GPF_MFPL: PF2MFP Position */ +#define SYS_GPF_MFPL_PF2MFP_Msk (0xful << SYS_GPF_MFPL_PF2MFP_Pos) /*!< SYS_T::GPF_MFPL: PF2MFP Mask */ + +#define SYS_GPF_MFPL_PF3MFP_Pos (12) /*!< SYS_T::GPF_MFPL: PF3MFP Position */ +#define SYS_GPF_MFPL_PF3MFP_Msk (0xful << SYS_GPF_MFPL_PF3MFP_Pos) /*!< SYS_T::GPF_MFPL: PF3MFP Mask */ + +#define SYS_GPF_MFPL_PF4MFP_Pos (16) /*!< SYS_T::GPF_MFPL: PF4MFP Position */ +#define SYS_GPF_MFPL_PF4MFP_Msk (0xful << SYS_GPF_MFPL_PF4MFP_Pos) /*!< SYS_T::GPF_MFPL: PF4MFP Mask */ + +#define SYS_GPF_MFPL_PF5MFP_Pos (20) /*!< SYS_T::GPF_MFPL: PF5MFP Position */ +#define SYS_GPF_MFPL_PF5MFP_Msk (0xful << SYS_GPF_MFPL_PF5MFP_Pos) /*!< SYS_T::GPF_MFPL: PF5MFP Mask */ + +#define SYS_GPF_MFPL_PF6MFP_Pos (24) /*!< SYS_T::GPF_MFPL: PF6MFP Position */ +#define SYS_GPF_MFPL_PF6MFP_Msk (0xful << SYS_GPF_MFPL_PF6MFP_Pos) /*!< SYS_T::GPF_MFPL: PF6MFP Mask */ + +#define SYS_GPF_MFPL_PF7MFP_Pos (28) /*!< SYS_T::GPF_MFPL: PF7MFP Position */ +#define SYS_GPF_MFPL_PF7MFP_Msk (0xful << SYS_GPF_MFPL_PF7MFP_Pos) /*!< SYS_T::GPF_MFPL: PF7MFP Mask */ + +#define SYS_SRAM_INTCTL_PERRIEN_Pos (0) /*!< SYS_T::SRAM_INTCTL: PERRIEN Position */ +#define SYS_SRAM_INTCTL_PERRIEN_Msk (0x1ul << SYS_SRAM_INTCTL_PERRIEN_Pos) /*!< SYS_T::SRAM_INTCTL: PERRIEN Mask */ + +#define SYS_SRAM_STATUS_PERRIF_Pos (0) /*!< SYS_T::SRAM_STATUS: PERRIF Position */ +#define SYS_SRAM_STATUS_PERRIF_Msk (0x1ul << SYS_SRAM_STATUS_PERRIF_Pos) /*!< SYS_T::SRAM_STATUS: PERRIF Mask */ + +#define SYS_SRAM_ERRADDR_ERRADDR_Pos (0) /*!< SYS_T::SRAM_ERRADDR: ERRADDR Position */ +#define SYS_SRAM_ERRADDR_ERRADDR_Msk (0xfffffffful << SYS_SRAM_ERRADDR_ERRADDR_Pos) /*!< SYS_T::SRAM_ERRADDR: ERRADDR Mask */ + +#define SYS_SRAM_BISTCTL_SRBIST0_Pos (0) /*!< SYS_T::SRAM_BISTCTL: SRBIST0 Position */ +#define SYS_SRAM_BISTCTL_SRBIST0_Msk (0x1ul << SYS_SRAM_BISTCTL_SRBIST0_Pos) /*!< SYS_T::SRAM_BISTCTL: SRBIST0 Mask */ + +#define SYS_SRAM_BISTCTL_SRBIST1_Pos (1) /*!< SYS_T::SRAM_BISTCTL: SRBIST1 Position */ +#define SYS_SRAM_BISTCTL_SRBIST1_Msk (0x1ul << SYS_SRAM_BISTCTL_SRBIST1_Pos) /*!< SYS_T::SRAM_BISTCTL: SRBIST1 Mask */ + +#define SYS_SRAM_BISTCTL_CRBIST_Pos (2) /*!< SYS_T::SRAM_BISTCTL: CRBIST Position */ +#define SYS_SRAM_BISTCTL_CRBIST_Msk (0x1ul << SYS_SRAM_BISTCTL_CRBIST_Pos) /*!< SYS_T::SRAM_BISTCTL: CRBIST Mask */ + +#define SYS_SRAM_BISTCTL_CANBIST_Pos (3) /*!< SYS_T::SRAM_BISTCTL: CANBIST Position */ +#define SYS_SRAM_BISTCTL_CANBIST_Msk (0x1ul << SYS_SRAM_BISTCTL_CANBIST_Pos) /*!< SYS_T::SRAM_BISTCTL: CANBIST Mask */ + +#define SYS_SRAM_BISTCTL_USBBIST_Pos (4) /*!< SYS_T::SRAM_BISTCTL: USBBIST Position */ +#define SYS_SRAM_BISTCTL_USBBIST_Msk (0x1ul << SYS_SRAM_BISTCTL_USBBIST_Pos) /*!< SYS_T::SRAM_BISTCTL: USBBIST Mask */ + +#define SYS_SRAM_BISTSTS_SRBISTEF0_Pos (0) /*!< SYS_T::SRAM_BISTSTS: SRBISTEF0 Position */ +#define SYS_SRAM_BISTSTS_SRBISTEF0_Msk (0x1ul << SYS_SRAM_BISTSTS_SRBISTEF0_Pos) /*!< SYS_T::SRAM_BISTSTS: SRBISTEF0 Mask */ + +#define SYS_SRAM_BISTSTS_SRBISTEF1_Pos (1) /*!< SYS_T::SRAM_BISTSTS: SRBISTEF1 Position */ +#define SYS_SRAM_BISTSTS_SRBISTEF1_Msk (0x1ul << SYS_SRAM_BISTSTS_SRBISTEF1_Pos) /*!< SYS_T::SRAM_BISTSTS: SRBISTEF1 Mask */ + +#define SYS_SRAM_BISTSTS_CRBISTEF_Pos (2) /*!< SYS_T::SRAM_BISTSTS: CRBISTEF Position */ +#define SYS_SRAM_BISTSTS_CRBISTEF_Msk (0x1ul << SYS_SRAM_BISTSTS_CRBISTEF_Pos) /*!< SYS_T::SRAM_BISTSTS: CRBISTEF Mask */ + +#define SYS_SRAM_BISTSTS_CANBEF_Pos (3) /*!< SYS_T::SRAM_BISTSTS: CANBEF Position */ +#define SYS_SRAM_BISTSTS_CANBEF_Msk (0x1ul << SYS_SRAM_BISTSTS_CANBEF_Pos) /*!< SYS_T::SRAM_BISTSTS: CANBEF Mask */ + +#define SYS_SRAM_BISTSTS_USBBEF_Pos (4) /*!< SYS_T::SRAM_BISTSTS: USBBEF Position */ +#define SYS_SRAM_BISTSTS_USBBEF_Msk (0x1ul << SYS_SRAM_BISTSTS_USBBEF_Pos) /*!< SYS_T::SRAM_BISTSTS: USBBEF Mask */ + +#define SYS_SRAM_BISTSTS_SRBEND0_Pos (16) /*!< SYS_T::SRAM_BISTSTS: SRBEND0 Position */ +#define SYS_SRAM_BISTSTS_SRBEND0_Msk (0x1ul << SYS_SRAM_BISTSTS_SRBEND0_Pos) /*!< SYS_T::SRAM_BISTSTS: SRBEND0 Mask */ + +#define SYS_SRAM_BISTSTS_SRBEND1_Pos (17) /*!< SYS_T::SRAM_BISTSTS: SRBEND1 Position */ +#define SYS_SRAM_BISTSTS_SRBEND1_Msk (0x1ul << SYS_SRAM_BISTSTS_SRBEND1_Pos) /*!< SYS_T::SRAM_BISTSTS: SRBEND1 Mask */ + +#define SYS_SRAM_BISTSTS_CRBEND_Pos (18) /*!< SYS_T::SRAM_BISTSTS: CRBEND Position */ +#define SYS_SRAM_BISTSTS_CRBEND_Msk (0x1ul << SYS_SRAM_BISTSTS_CRBEND_Pos) /*!< SYS_T::SRAM_BISTSTS: CRBEND Mask */ + +#define SYS_SRAM_BISTSTS_CANBEND_Pos (19) /*!< SYS_T::SRAM_BISTSTS: CANBEND Position */ +#define SYS_SRAM_BISTSTS_CANBEND_Msk (0x1ul << SYS_SRAM_BISTSTS_CANBEND_Pos) /*!< SYS_T::SRAM_BISTSTS: CANBEND Mask */ + +#define SYS_SRAM_BISTSTS_USBBEND_Pos (20) /*!< SYS_T::SRAM_BISTSTS: USBBEND Position */ +#define SYS_SRAM_BISTSTS_USBBEND_Msk (0x1ul << SYS_SRAM_BISTSTS_USBBEND_Pos) /*!< SYS_T::SRAM_BISTSTS: USBBEND Mask */ + +#define SYS_IRCTCTL_FREQSEL_Pos (0) /*!< SYS_T::IRCTCTL: FREQSEL Position */ +#define SYS_IRCTCTL_FREQSEL_Msk (0x3ul << SYS_IRCTCTL_FREQSEL_Pos) /*!< SYS_T::IRCTCTL: FREQSEL Mask */ + +#define SYS_IRCTCTL_LOOPSEL_Pos (4) /*!< SYS_T::IRCTCTL: LOOPSEL Position */ +#define SYS_IRCTCTL_LOOPSEL_Msk (0x3ul << SYS_IRCTCTL_LOOPSEL_Pos) /*!< SYS_T::IRCTCTL: LOOPSEL Mask */ + +#define SYS_IRCTCTL_RETRYCNT_Pos (6) /*!< SYS_T::IRCTCTL: RETRYCNT Position */ +#define SYS_IRCTCTL_RETRYCNT_Msk (0x3ul << SYS_IRCTCTL_RETRYCNT_Pos) /*!< SYS_T::IRCTCTL: RETRYCNT Mask */ + +#define SYS_IRCTCTL_CESTOPEN_Pos (8) /*!< SYS_T::IRCTCTL: CESTOPEN Position */ +#define SYS_IRCTCTL_CESTOPEN_Msk (0x1ul << SYS_IRCTCTL_CESTOPEN_Pos) /*!< SYS_T::IRCTCTL: CESTOPEN Mask */ + +#define SYS_IRCTIEN_TFAILIEN_Pos (1) /*!< SYS_T::IRCTIEN: TFAILIEN Position */ +#define SYS_IRCTIEN_TFAILIEN_Msk (0x1ul << SYS_IRCTIEN_TFAILIEN_Pos) /*!< SYS_T::IRCTIEN: TFAILIEN Mask */ + +#define SYS_IRCTIEN_CLKEIEN_Pos (2) /*!< SYS_T::IRCTIEN: CLKEIEN Position */ +#define SYS_IRCTIEN_CLKEIEN_Msk (0x1ul << SYS_IRCTIEN_CLKEIEN_Pos) /*!< SYS_T::IRCTIEN: CLKEIEN Mask */ + +#define SYS_IRCTISTS_FREQLOCK_Pos (0) /*!< SYS_T::IRCTISTS: FREQLOCK Position */ +#define SYS_IRCTISTS_FREQLOCK_Msk (0x1ul << SYS_IRCTISTS_FREQLOCK_Pos) /*!< SYS_T::IRCTISTS: FREQLOCK Mask */ + +#define SYS_IRCTISTS_TFAILIF_Pos (1) /*!< SYS_T::IRCTISTS: TFAILIF Position */ +#define SYS_IRCTISTS_TFAILIF_Msk (0x1ul << SYS_IRCTISTS_TFAILIF_Pos) /*!< SYS_T::IRCTISTS: TFAILIF Mask */ + +#define SYS_IRCTISTS_CLKERRIF_Pos (2) /*!< SYS_T::IRCTISTS: CLKERRIF Position */ +#define SYS_IRCTISTS_CLKERRIF_Msk (0x1ul << SYS_IRCTISTS_CLKERRIF_Pos) /*!< SYS_T::IRCTISTS: CLKERRIF Mask */ + +#define SYS_REGLCTL_REGLCTL_Pos (0) /*!< SYS_T::REGLCTL: REGLCTL Position */ +#define SYS_REGLCTL_REGLCTL_Msk (0xfful << SYS_REGLCTL_REGLCTL_Pos) /*!< SYS_T::REGLCTL: REGLCTL Mask */ + +/**@}*/ /* SYS_CONST */ + + +typedef struct +{ + +/** + * @var SYS_INT_T::NMIEN + * Offset: 0x00 NMI Source Interrupt Enable Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |BODOUT |BOD NMI Source Enable (Write Protect) + * | | |0 = BOD NMI source Disabled. + * | | |1 = BOD NMI source Enabled. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[1] |IRC_INT |IRC TRIM NMI Source Enable (Write Protect) + * | | |0 = IRC TRIM NMI source Disabled. + * | | |1 = IRC TRIM NMI source Enabled. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[2] |PWRWU_INT |Power-Down Mode Wake-Up NMI Source Enable (Write Protect) + * | | |0 = Power-down mode wake-up NMI source Disabled. + * | | |1 = Power-down mode wake-up NMI source Enabled. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[3] |SRAM_PERR |SRAM ParityCheck Error NMI Source Enable (Write Protect) + * | | |0 = SRAM parity check error NMI source Disabled. + * | | |1 = SRAM parity check error NMI source Enabled. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[4] |CLKFAIL |Clock Fail Detected NMI Source Enable (Write Protect) + * | | |0 = Clock fail detected interrupt NMI source Disabled. + * | | |1 = Clock fail detected interrupt NMI source Enabled. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[6] |RTC_INT |RTC NMI Source Enable (Write Protect) + * | | |0 = RTC NMI source Disabled. + * | | |1 = RTC NMI source Enabled. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[7] |TAMPER_INT|TAMPER_INT NMI Source Enable (Write Protect) + * | | |0 = Backup register tamper detected interrupt.NMI source Disabled. + * | | |1 = Backup register tamper detected interrupt.NMI source Enabled. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[8] |EINT0 |External Interrupt From PA.0, PD.2 Or PE.4 Pin NMI Source Enable (Write Protect) + * | | |0 = External interrupt from PA.0, PD.2 or PE.4 pin NMI source Disabled. + * | | |1 = External interrupt from PA.0, PD.2 or PE.4 pin NMI source Enabled. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[9] |EINT1 |External Interrupt From PB.0, PD.3 Or PE.5 Pin NMI Source Enable (Write Protect) + * | | |0 = External interrupt from PB.0, PD.3 or PE.5 pin NMI source Disabled. + * | | |1 = External interrupt from PB.0, PD.3 or PE.5 pin NMI source Enabled. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[10] |EINT2 |External Interrupt From PC.0 Pin NMI Source Enable (Write Protect) + * | | |0 = External interrupt from PC.0 pin NMI source Disabled. + * | | |1 = External interrupt from PC.0 pin NMI source Enabled. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[11] |EINT3 |External Interrupt From PD.0 Pin NMI Source Enable (Write Protect) + * | | |0 = External interrupt from PD.0 pin NMI source Disabled. + * | | |1 = External interrupt from PD.0 pin NMI source Enabled. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[12] |EINT4 |External Interrupt From PE.0 Pin NMI Source Enable (Write Protect) + * | | |0 = External interrupt from PE.0 pin NMI source Disabled. + * | | |1 = External interrupt from PE.0 pin NMI source Enabled. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[13] |EINT5 |External Interrupt From PF.0 Pin NMI Source Enable (Write Protect) + * | | |0 = External interrupt from PF.0 pin NMI source Disabled. + * | | |1 = External interrupt from PF.0 pin NMI source Enabled. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[14] |UART0_INT |UART0 NMI Source Enable (Write Protect) + * | | |0 = UART0 NMI source Disabled. + * | | |1 = UART0 NMI source Enabled. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[15] |UART1_INT |UART1 NMI Source Enable (Write Protect) + * | | |0 = UART1 NMI source Disabled. + * | | |1 = UART1 NMI source Enabled. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * @var SYS_INT_T::NMISTS + * Offset: 0x04 NMI source interrupt Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |BODOUT |BOD Interrupt Flag (Read Only) + * | | |0 = BOD interrupt is deasserted. + * | | |1 = BOD interrupt is asserted. + * |[1] |IRC_INT |IRC TRIM Interrupt Flag (Read Only) + * | | |0 = HIRC TRIM interrupt is deasserted. + * | | |1 = HIRC TRIM interrupt is asserted. + * |[2] |PWRWU_INT |Power-Down Mode Wake-Up Interrupt Flag (Read Only) + * | | |0 = Power-down mode wake-up interrupt is deasserted. + * | | |1 = Power-down mode wake-up interrupt is asserted. + * |[3] |SRAM_PERR |SRAM ParityCheck Error Interrupt Flag (Read Only) + * | | |0 = SRAM parity check error interrupt is deasserted. + * | | |1 = SRAM parity check error interrupt is asserted. + * |[4] |CLKFAIL |Clock Fail Detected Interrupt Flag (Read Only) + * | | |0 = Clock fail detected interrupt is deasserted. + * | | |1 = Clock fail detected interrupt is asserted. + * |[6] |RTC_INT |RTC Interrupt Flag (Read Only) + * | | |0 = RTC interrupt is deasserted. + * | | |1 = RTC interrupt is asserted. + * |[7] |TAMPER_INT|TAMPER_INT Interrupt Flag (Read Only) + * | | |0 = Backup register tamper detected interrupt is deasserted. + * | | |1 = Backup register tamper detected interrupt is asserted. + * |[8] |EINT0 |External Interrupt From PA.0, PD.2 Or PE.4 Pin Interrupt Flag (Read Only) + * | | |0 = External Interrupt from PA.0, PD.2 or PE.4 interrupt is deasserted. + * | | |1 = External Interrupt from PA.0, PD.2 or PE.4 interrupt is asserted. + * |[9] |EINT1 |External Interrupt From PB.0, PD.3 Or PE.5 Pin Interrupt Flag (Read Only) + * | | |0 = External Interrupt from PB.0, PD.3 or PE.5 interrupt is deasserted. + * | | |1 = External Interrupt from PB.0, PD.3 or PE.5 interrupt is asserted. + * |[10] |EINT2 |External Interrupt From PC.0 Pin Interrupt Flag (Read Only) + * | | |0 = External Interrupt from PC.0 interrupt is deasserted. + * | | |1 = External Interrupt from PC.0 interrupt is asserted. + * |[11] |EINT3 |External Interrupt From PD.0 Pin Interrupt Flag (Read Only) + * | | |0 = External Interrupt from PD.0 interrupt is deasserted. + * | | |1 = External Interrupt from PD.0 interrupt is asserted. + * |[12] |EINT4 |External Interrupt From PE.0 Pin Interrupt Flag (Read Only) + * | | |0 = External Interrupt from PE.0 interrupt is deasserted. + * | | |1 = External Interrupt from PE.0 interrupt is asserted. + * |[13] |EINT5 |External Interrupt From PF.0 Pin Interrupt Flag (Read Only) + * | | |0 = External Interrupt from PF.0 interrupt is deasserted. + * | | |1 = External Interrupt from PF.0 interrupt is asserted. + * |[14] |UART0_INT |UART0 Interrupt Flag (Read Only) + * | | |0 = UART1 interrupt is deasserted. + * | | |1 = UART1 interrupt is asserted. + * |[15] |UART1_INT |UART1 Interrupt Flag (Read Only) + * | | |0 = UART1 interrupt is deasserted. + * | | |1 = UART1 interrupt is asserted. + */ + + __IO uint32_t NMIEN; /* Offset: 0x00 NMI Source Interrupt Enable Register */ + __I uint32_t NMISTS; /* Offset: 0x04 NMI source interrupt Status Register */ + +} SYS_INT_T; + + + +/** + @addtogroup INT_CONST INT Bit Field Definition + Constant Definitions for SYS Controller +@{ */ + +#define SYS_NMIEN_BODOUT_Pos (0) /*!< SYS_INT_T::NMIEN: BODOUT Position */ +#define SYS_NMIEN_BODOUT_Msk (0x1ul << SYS_NMIEN_BODOUT_Pos ) /*!< SYS_INT_T::NMIEN: BODOUT Mask */ + +#define SYS_NMIEN_IRC_INT_Pos (1) /*!< SYS_INT_T::NMIEN: IRC_INT Position */ +#define SYS_NMIEN_IRC_INT_Msk (0x1ul << SYS_NMIEN_IRC_INT_Pos ) /*!< SYS_INT_T::NMIEN: IRC_INT Mask */ + +#define SYS_NMIEN_PWRWU_INT_Pos (2) /*!< SYS_INT_T::NMIEN: PWRWU_INT Position */ +#define SYS_NMIEN_PWRWU_INT_Msk (0x1ul << SYS_NMIEN_PWRWU_INT_Pos ) /*!< SYS_INT_T::NMIEN: PWRWU_INT Mask */ + +#define SYS_NMIEN_SRAM_PERR_Pos (3) /*!< SYS_INT_T::NMIEN: SRAM_PERR Position */ +#define SYS_NMIEN_SRAM_PERR_Msk (0x1ul << SYS_NMIEN_SRAM_PERR_Pos ) /*!< SYS_INT_T::NMIEN: SRAM_PERR Mask */ + +#define SYS_NMIEN_CLKFAIL_Pos (4) /*!< SYS_INT_T::NMIEN: CLKFAIL Position */ +#define SYS_NMIEN_CLKFAIL_Msk (0x1ul << SYS_NMIEN_CLKFAIL_Pos ) /*!< SYS_INT_T::NMIEN: CLKFAIL Mask */ + +#define SYS_NMIEN_RTC_INT_Pos (6) /*!< SYS_INT_T::NMIEN: RTC_INT Position */ +#define SYS_NMIEN_RTC_INT_Msk (0x1ul << SYS_NMIEN_RTC_INT_Pos ) /*!< SYS_INT_T::NMIEN: RTC_INT Mask */ + +#define SYS_NMIEN_TAMPER_INT_Pos (7) /*!< SYS_INT_T::NMIEN: TAMPER_INT Position */ +#define SYS_NMIEN_TAMPER_INT_Msk (0x1ul << SYS_NMIEN_TAMPER_INT_Pos ) /*!< SYS_INT_T::NMIEN: TAMPER_INT Mask */ + +#define SYS_NMIEN_EINT0_Pos (8) /*!< SYS_INT_T::NMIEN: EINT0 Position */ +#define SYS_NMIEN_EINT0_Msk (0x1ul << SYS_NMIEN_EINT0_Pos ) /*!< SYS_INT_T::NMIEN: EINT0 Mask */ + +#define SYS_NMIEN_EINT1_Pos (9) /*!< SYS_INT_T::NMIEN: EINT1 Position */ +#define SYS_NMIEN_EINT1_Msk (0x1ul << SYS_NMIEN_EINT1_Pos ) /*!< SYS_INT_T::NMIEN: EINT1 Mask */ + +#define SYS_NMIEN_EINT2_Pos (10) /*!< SYS_INT_T::NMIEN: EINT2 Position */ +#define SYS_NMIEN_EINT2_Msk (0x1ul << SYS_NMIEN_EINT2_Pos ) /*!< SYS_INT_T::NMIEN: EINT2 Mask */ + +#define SYS_NMIEN_EINT3_Pos (11) /*!< SYS_INT_T::NMIEN: EINT3 Position */ +#define SYS_NMIEN_EINT3_Msk (0x1ul << SYS_NMIEN_EINT3_Pos ) /*!< SYS_INT_T::NMIEN: EINT3 Mask */ + +#define SYS_NMIEN_EINT4_Pos (12) /*!< SYS_INT_T::NMIEN: EINT4 Position */ +#define SYS_NMIEN_EINT4_Msk (0x1ul << SYS_NMIEN_EINT4_Pos ) /*!< SYS_INT_T::NMIEN: EINT4 Mask */ + +#define SYS_NMIEN_EINT5_Pos (13) /*!< SYS_INT_T::NMIEN: EINT5 Position */ +#define SYS_NMIEN_EINT5_Msk (0x1ul << SYS_NMIEN_EINT5_Pos ) /*!< SYS_INT_T::NMIEN: EINT5 Mask */ + +#define SYS_NMIEN_UART0_INT_Pos (14) /*!< SYS_INT_T::NMIEN: UART0_INT Position */ +#define SYS_NMIEN_UART0_INT_Msk (0x1ul << SYS_NMIEN_UART0_INT_Pos ) /*!< SYS_INT_T::NMIEN: UART0_INT Mask */ + +#define SYS_NMIEN_UART1_INT_Pos (15) /*!< SYS_INT_T::NMIEN: UART1_INT Position */ +#define SYS_NMIEN_UART1_INT_Msk (0x1ul << SYS_NMIEN_UART1_INT_Pos ) /*!< SYS_INT_T::NMIEN: UART1_INT Mask */ + +#define SYS_NMISTS_BODOUT_Pos (0) /*!< SYS_INT_T::NMISTS: BODOUT Position */ +#define SYS_NMISTS_BODOUT_Msk (0x1ul << SYS_NMISTS_BODOUT_Pos ) /*!< SYS_INT_T::NMISTS: BODOUT Mask */ + +#define SYS_NMISTS_IRC_INT_Pos (1) /*!< SYS_INT_T::NMISTS: IRC_INT Position */ +#define SYS_NMISTS_IRC_INT_Msk (0x1ul << SYS_NMISTS_IRC_INT_Pos ) /*!< SYS_INT_T::NMISTS: IRC_INT Mask */ + +#define SYS_NMISTS_PWRWU_INT_Pos (2) /*!< SYS_INT_T::NMISTS: PWRWU_INT Position */ +#define SYS_NMISTS_PWRWU_INT_Msk (0x1ul << SYS_NMISTS_PWRWU_INT_Pos ) /*!< SYS_INT_T::NMISTS: PWRWU_INT Mask */ + +#define SYS_NMISTS_SRAM_PERR_Pos (3) /*!< SYS_INT_T::NMISTS: SRAM_PERR Position */ +#define SYS_NMISTS_SRAM_PERR_Msk (0x1ul << SYS_NMISTS_SRAM_PERR_Pos ) /*!< SYS_INT_T::NMISTS: SRAM_PERR Mask */ + +#define SYS_NMISTS_CLKFAIL_Pos (4) /*!< SYS_INT_T::NMISTS: CLKFAIL Position */ +#define SYS_NMISTS_CLKFAIL_Msk (0x1ul << SYS_NMISTS_CLKFAIL_Pos ) /*!< SYS_INT_T::NMISTS: CLKFAIL Mask */ + +#define SYS_NMISTS_RTC_INT_Pos (6) /*!< SYS_INT_T::NMISTS: RTC_INT Position */ +#define SYS_NMISTS_RTC_INT_Msk (0x1ul << SYS_NMISTS_RTC_INT_Pos ) /*!< SYS_INT_T::NMISTS: RTC_INT Mask */ + +#define SYS_NMISTS_TAMPER_INT_Pos (7) /*!< SYS_INT_T::NMISTS: TAMPER_INT Position */ +#define SYS_NMISTS_TAMPER_INT_Msk (0x1ul << SYS_NMISTS_TAMPER_INT_Pos ) /*!< SYS_INT_T::NMISTS: TAMPER_INT Mask */ + +#define SYS_NMISTS_EINT0_Pos (8) /*!< SYS_INT_T::NMISTS: EINT0 Position */ +#define SYS_NMISTS_EINT0_Msk (0x1ul << SYS_NMISTS_EINT0_Pos ) /*!< SYS_INT_T::NMISTS: EINT0 Mask */ + +#define SYS_NMISTS_EINT1_Pos (9) /*!< SYS_INT_T::NMISTS: EINT1 Position */ +#define SYS_NMISTS_EINT1_Msk (0x1ul << SYS_NMISTS_EINT1_Pos ) /*!< SYS_INT_T::NMISTS: EINT1 Mask */ + +#define SYS_NMISTS_EINT2_Pos (10) /*!< SYS_INT_T::NMISTS: EINT2 Position */ +#define SYS_NMISTS_EINT2_Msk (0x1ul << SYS_NMISTS_EINT2_Pos ) /*!< SYS_INT_T::NMISTS: EINT2 Mask */ + +#define SYS_NMISTS_EINT3_Pos (11) /*!< SYS_INT_T::NMISTS: EINT3 Position */ +#define SYS_NMISTS_EINT3_Msk (0x1ul << SYS_NMISTS_EINT3_Pos ) /*!< SYS_INT_T::NMISTS: EINT3 Mask */ + +#define SYS_NMISTS_EINT4_Pos (12) /*!< SYS_INT_T::NMISTS: EINT4 Position */ +#define SYS_NMISTS_EINT4_Msk (0x1ul << SYS_NMISTS_EINT4_Pos ) /*!< SYS_INT_T::NMISTS: EINT4 Mask */ + +#define SYS_NMISTS_EINT5_Pos (13) /*!< SYS_INT_T::NMISTS: EINT5 Position */ +#define SYS_NMISTS_EINT5_Msk (0x1ul << SYS_NMISTS_EINT5_Pos ) /*!< SYS_INT_T::NMISTS: EINT5 Mask */ + +#define SYS_NMISTS_UART0_INT_Pos (14) /*!< SYS_INT_T::NMISTS: UART0_INT Position */ +#define SYS_NMISTS_UART0_INT_Msk (0x1ul << SYS_NMISTS_UART0_INT_Pos ) /*!< SYS_INT_T::NMISTS: UART0_INT Mask */ + +#define SYS_NMISTS_UART1_INT_Pos (15) /*!< SYS_INT_T::NMISTS: UART1_INT Position */ +#define SYS_NMISTS_UART1_INT_Msk (0x1ul << SYS_NMISTS_UART1_INT_Pos ) /*!< SYS_INT_T::NMISTS: UART1_INT Mask */ + +/**@}*/ /* INT_CONST */ +/**@}*/ /* end of SYS register group */ + + +/*---------------------- Touch Key Controller -------------------------*/ +/** + @addtogroup TK Touch Key Controller(TK) + Memory Mapped Structure for TK Controller +@{ */ + + +typedef struct +{ + + +/** + * @var TK_T::CTL + * Offset: 0x00 Touch Key Scan Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |TKSEN0 |TK0 Scan Enable Bit + * | | |This bit is ignored if TKREN0 (TK_REFCTL[0]) is "1" except SCANALL (TK_REFCTL[23]) is "1". + * | | |0 = TKDAT0 (TK_DAT0[7:0]) is invalid. + * | | |1 = TK0 is always enable for Touch Key scan. TKDAT0 (TK_DAT0[7:0]) is valid. + * |[1] |TKSEN1 |TK1 Scan Enable Bit + * | | |This bit is ignored if TKREN1 (TK_REFCTL[1]) is "1". + * | | |0 = TKDAT1 (TK_DAT0[15:8]) is invalid. + * | | |1 = TK1 is always enable for Touch Key scan. TKDAT1 (TK_DAT0[15:8]) is valid. + * |[2] |TKSEN2 |TK2 Scan Enable Bit + * | | |This bit is ignored if TKREN2 (TK_REFCTL[2]) is "1". + * | | |0 = TKDAT2 (TK_DAT0[23:16]) is invalid. + * | | |1 = TK2 is always enable for Touch Key scan. TKDAT2 (TK_DAT0[23:16]) is valid. + * |[3] |TKSEN3 |TK3 Scan Enable Bit + * | | |0 = TKDAT3 (TK_DAT0[31:24]) is invalid. + * | | |1 = TK3 is always enable for Touch Key scan. TKDAT3 (TK_DAT0[31:24]) is valid. + * | | |This bit is ignored if TKREN3 (TK_REFCTL[3]) is "1". + * |[4] |TKSEN4 |TK4 Scan Enable Bit + * | | |This bit is ignored if TKREN4 (TK_REFCTL[4]) is "1". + * | | |0 = TKDAT4 (TK_DAT1[7:0]) is invalid. + * | | |1 = TK4 is always enable for Touch Key scan. TKDAT4 (TK_DAT1[7:0]) is valid. + * |[5] |TKSEN5 |TK5 Scan Enable Bit + * | | |This bit is ignored if TKREN5 (TK_REFCTL[5]) is "1". + * | | |0 = TKDAT5 (TK_DAT1[15:8]) is invalid. + * | | |1 = TK5 is always enable for Touch Key scan. TKDAT5 (TK_DAT1[15:8]) is valid. + * |[6] |TKSEN6 |TK6 Scan Enable Bit + * | | |This bit is ignored if TKREN6 (TK_REFCTL[6]) is "1". + * | | |0 = TKDAT6 (TK_DAT1[23:16]) is invalid. + * | | |1 = TK6 is always enable for Touch Key scan. TKDAT6 (TK_DAT1[23:16]) is valid. + * |[7] |TKSEN7 |TK7 Scan Enable + * | | |This bit is ignored if TKREN7 (TK_REFCTL[7]) is "1". + * | | |0 = TKDAT7 (TK_DAT1[31:24]) is invalid. + * | | |1 = TK7 is always enable for Touch Key scan. TKDAT7 (TK_DAT1[31:24]) is valid. + * |[8] |TKSEN8 |TK8 Scan Enable Bit + * | | |This bit is ignored if TKREN8 (TK_REFCTL[8]) is "1". + * | | |0 = TKDAT8 (TK_DAT2[7:0]) is invalid. + * | | |1 = TK8 is always enable for Touch Key scan. TKDAT8 (TK_DAT2[7:0]) is valid. + * |[9] |TKSEN9 |TK9 Scan Enable Bit + * | | |This bit is ignored if TKREN9 (TK_REFCTL[9]) is "1". + * | | |0 = TKDAT9 (TK_DAT2[15:8]) is invalid. + * | | |1 = TK9 is always enable for Touch Key scan. TKDAT9 (TK_DAT2[15:8]) is valid. + * |[10] |TKSEN10 |TK10 Scan Enable Bit + * | | |This bit is ignored if TKREN10 (TK_REFCTL[10]) is "1". + * | | |0 = TKDAT10 (TK_DAT2[23:16]) is invalid. + * | | |1 = TK10 is always enable for Touch Key scan. TKDAT10 (TK_DAT2[23:16]) is valid. + * |[11] |TKSEN11 |TK11 Scan Enable + * | | |This bit is ignored if TKREN11 (TK_REFCTL[11]) is "1". + * | | |0 = TKDAT11 (TK_DAT2[31:24]) is invalid. + * | | |1 = TK11 is always enable for Touch Key scan. TKDAT11 (TK_DAT2[31:24]) is valid. + * |[12] |TKSEN12 |TK12 Scan Enable Bit + * | | |This bit is ignored if TKREN12 (TK_REFCTL[12]) is "1". + * | | |0 = TKDAT12 (TK_DAT3[7:0]) is invalid. + * | | |1 = TK12 is always enable for Touch Key scan. TKDAT12 (TK_DAT3[7:0]) is valid. + * |[13] |TKSEN13 |TK13 Scan Enable Bit + * | | |This bit is ignored if TKREN13 (TK_REFCTL[13]) is "1". + * | | |0 = TKDAT13 (TK_DAT3[15:8]) is invalid. + * | | |1 = TK13 is always enable for key scan. TKDAT13 (TK_DAT3[15:8]) is valid. + * |[14] |TKSEN14 |TK14 Scan Enable Bit + * | | |This bit is ignored if TKREN14 (TK_REFCTL[14]) is "1". + * | | |0 = TKDAT14 (TK_DAT3[23:16]) is invalid. + * | | |1 = TK14 is always enabled for key scan. TKDAT14 (TK_DAT3[23:16]) is valid. + * |[15] |TKSEN15 |TK15 Scan Enable Bit + * | | |This bit is ignored if TKREN15 (TK_REFCTL[15]) is "1". + * | | |0 = TKDAT15 (TK_DAT3[31:24]) is invalid. + * | | |1 = TK15 is always enabled for key scan. TKDAT15 (TK_DAT3[31:24]) is valid. + * |[16] |TKSEN16 |TK16 Scan Enable Bit + * | | |This bit is ignored if TKREN16 (TK_REFCTL[16]) is "1". + * | | |0 = TKDAT16 (TK_DAT4[7:0]) is invalid. + * | | |1 = TK16 is always enabled for key scan. TKDAT16 (TK_DAT4[7:0]) is valid. + * |[22:20] |AVCCHSEL |AVCCH Voltage Select + * | | |000 = 1/16 VDD. + * | | |001 = 1/8 VDD. + * | | |010 = 3/16 VDD. + * | | |011 = 1/4 VDD. + * | | |100 = 5/16 VDD. + * | | |101 = 3/8 VDD. + * | | |110 = 7/16 VDD. + * | | |111 = 1/2 VDD. + * |[24] |SCAN |Scan + * | | |Write an '1' to this bit will immediately initiate key scan on all channels which are enabled. + * | | |This bit will be self-cleared after key scan started. + * |[25] |TMRTRGEN |Timer Trigger Enable Bit + * | | |0 = Disable timer to trigger key scan. + * | | |1 = Enable timer triggers key scan periodically. Key scan will be initiated by Timer0 periodically. + * |[31] |TKEN |Touch Key Scan Enable Bit + * | | |0 = Disable Touch Key Function. + * | | |1 = Enable Touch Key Function. + * @var TK_T::REFCTL + * Offset: 0x04 Touch Key Reference Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |TKREN0 |TK0 Reference Enable Bit + * | | |0 = TK0 is not reference. + * | | |1 = TK0 is set as reference, and TKDAT0 (TK_DAT0[7:0]) is invalid except SCANALL (TK_REFCTL[23]) is "1". + * |[1] |TKREN1 |TK1 Reference Enable Bit + * | | |0 = TK1 is not reference. + * | | |1 = TK1 is set as reference, and TKDAT1 (TK_DAT0[15:8]) is invalid. + * |[2] |TKREN2 |TK2 Reference Enable Bit + * | | |0 = TK2 is not reference. + * | | |1 = TK2 is set as reference, and TKDAT2 (TK_DAT0[23:16]) is invalid. + * |[3] |TKREN3 |TK3 Reference Enable Bit + * | | |0 = TK3 is not reference. + * | | |1 = TK3 is set as reference, and TKDAT3 (TK_DAT0[31:24]) is invalid. + * |[4] |TKREN4 |TK4 Reference Enable Bit + * | | |0 = TK4 is not reference. + * | | |1 = TK4 is set as reference, and TKDAT4 (TK_DAT1[7:0]) is invalid. + * |[5] |TKREN5 |TK5 Reference Enable Bit + * | | |0 = TK5 is not reference. + * | | |1 = TK5 is set as reference, and TKDAT5 (TK_DAT1[15:8]) is invalid. + * |[6] |TKREN6 |TK6 Reference Enable Bit + * | | |0 = TK6 is not reference. + * | | |1 = TK6 is set as reference, and TKDAT6 (TK_DAT1[23:16]) is invalid. + * |[7] |TKREN7 |TK7 Reference Enable Bit + * | | |0 = TK7 is not reference. + * | | |1 = TK7 is set as reference, and TKDAT7 (TK_DAT1[31:24]) is invalid. + * |[8] |TKREN8 |TK8 Reference Enable Bit + * | | |0 = TK8 is not reference. + * | | |1 = TK8 is set as reference, and TKDAT8 (TK_DAT2[7:0]) is invalid. + * |[9] |TKREN9 |TK9 Reference Enable Bit + * | | |0 = TK9 is not reference. + * | | |1 = TK9 is set as reference, and TKDAT9 (TK_DAT2[15:8]) is invalid. + * |[10] |TKREN10 |TK10 Reference Enable Bit + * | | |0 = TK10 is not reference. + * | | |1 = TK10 is set as reference, and TKDAT10 (TK_DAT2[23:16]) is invalid. + * |[11] |TKREN11 |TK11 Reference Enable Bit + * | | |0 = TK11 is not reference. + * | | |1 = TK11 is set as reference, and TKDAT11 (TK_DAT2[31:24]) is invalid. + * |[12] |TKREN12 |TK12 Reference Enable Bit + * | | |0 = TK12 is not reference. + * | | |1 = TK12 is set as reference, and TKDAT12 (TK_DAT3[7:0]) is invalid. + * |[13] |TKREN13 |TK13 Reference Enable Bit + * | | |0 = TK13 is not reference. + * | | |1 = TK13 is set as reference, and TKDAT13 (TK_DAT3[15:8]) is invalid. + * |[14] |TKREN14 |TK14 Reference Enable Bit + * | | |0 = TK14 is not reference. + * | | |1 = TK14 is set as reference, and TKDAT14 (TK_DAT3[23:16]) is invalid. + * |[15] |TKREN15 |TK15 Reference Enable Bit + * | | |0 = TK15 is not reference. + * | | |1 = TK15 is set as reference, and TKDAT15 (TK_DAT3[31:24]) is invalid. + * |[16] |TKREN16 |TK16 Reference Enable Bit + * | | |0 = TK16 is not reference. + * | | |1 = TK16 is set as reference, and TKDAT16 (TK_DAT4[7:0]) is invalid. + * | | |Note: This bit is forced to "1" automatically if none is set as reference. + * |[23] |SCANALL |All Key Scan Enable Bit + * | | |This function is used for low power key scanning operation. + * | | |TKDAT0 (TK_DAT0[7:0]) is the only one valid data when key scan is complete. + * | | |0 = Disable All Keys Scan function. + * | | |1 = Enable All Keys Scan function. + * |[25:24] |SENTCTL |Touch Key Sensing Time Control + * | | |00 = 128 x SENPTCTL. + * | | |01 = 255 x SENPTCTL. + * | | |10 = 511 x SENPTCTL. + * | | |11 = 1023 x SENPTCTL. + * |[29:28] |SENPTCTL |Touch Key Sensing Pulse Width Time Control + * | | |00 = 1us. + * | | |01 = 2us. + * | | |10 = 4us. + * | | |11 = 8us. + * @var TK_T::CCBDAT0 + * Offset: 0x08 Touch Key Complement Capacitor Bank Data Register 0 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |CCBDAT0 |TK0 Complement CB Data + * | | |This is register is used for TK0 sensitivity adjustment. + * |[15:8] |CCBDAT1 |TK1 Complement CB Data + * | | |This is register is used for TK1 sensitivity adjustment. + * |[23:16] |CCBDAT2 |TK2 Complement CB Data + * | | |This is register is used for TK2 sensitivity adjustment. + * |[31:24] |CCBDAT3 |TK3 Complement CB Data + * | | |This is register is used for TK3 sensitivity adjustment. + * @var TK_T::CCBDAT1 + * Offset: 0x0C Touch Key Complement Capacitor Bank Data Register 1 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |CCBDAT4 |TK4 Complement CB Data + * | | |This is register is used for TK4 sensitivity adjustment. + * |[15:8] |CCBDAT5 |TK5 Complement CB Data + * | | |This is register is used for TK5 sensitivity adjustment. + * |[23:16] |CCBDAT6 |TK6 Complement CB Data + * | | |This is register is used for TK6 sensitivity adjustment. + * |[31:24] |CCBDAT7 |TK7 Complement CB Data + * | | |This is register is used for TK7 sensitivity adjustment. + * @var TK_T::CCBDAT2 + * Offset: 0x10 Touch Key Complement Capacitor Bank Data Register 2 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |CCBDAT8 |TK8 Complement CB Data + * | | |This is register is used for TK8 sensitivity adjustment. + * |[15:8] |CCBDAT9 |TK9 Complement CB Data + * | | |This is register is used for TK9 sensitivity adjustment. + * |[23:16] |CCBDAT10 |TK10 Complement CB Data + * | | |This is register is used for TK10 sensitivity adjustment. + * |[31:24] |CCBDAT11 |TK11 Complement CB Data + * | | |This is register is used for TK11 sensitivity adjustment. + * @var TK_T::CCBDAT3 + * Offset: 0x14 Touch Key Complement Capacitor Bank Data Register 3 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |CCBDAT12 |TK12 Complement CB Data + * | | |This is register is used for TK12 sensitivity adjustment. + * |[15:8] |CCBDAT13 |TK13 Complement CB Data + * | | |This is register is used for TK13 sensitivity adjustment. + * |[23:16] |CCBDAT14 |TK14 Complement CB Data + * | | |This is register is used for TK14 sensitivity adjustment. + * |[31:24] |CCBDAT15 |TK15 Complement CB Data + * | | |This is register is used for TK15 sensitivity adjustment. + * @var TK_T::CCBDAT4 + * Offset: 0x18 Touch Key Complement Capacitor Bank Data Register 4 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |CCBDAT16 |TK16 Complement CB Data + * | | |This is register is used for TK16 sensitivity adjustment. + * |[31:24] |REFCBDAT |Reference CB Data + * @var TK_T::IDLESEL + * Offset: 0x1C Touch Key Idle State Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:0] |IDLSn |TKn Idle State Control + * | | |This register is ignored if both TKSENn (TK_CTL[n]) and POLENn (TK_POLCTL[n+8]) are "0" or TKRENn (TK_REFCTL[n]) is "1". + * | | |00 = TKn connected to GND. + * | | |01 = TKn connected to AVCCH. + * | | |10 = TKn connected to VDD. + * | | |11 = TKn connected to VDD. + * | | |n = 0 to 15. + * @var TK_T::POLSEL + * Offset: 0x20 Touch Key Polarity Select Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:0] |POLSELn |TKn Polarity Select + * | | |This register is ignored if POLENn (TK_POLCTL[n+8]) is "0", or either TKSENn (TK_CTL[n]) or TKRENn (TK_REFCTL[n]) is "1". + * | | |00 = TKn connected to Gnd. + * | | |01 = TKn connected to AVCCH. + * | | |10 = TKn connected to VDD. + * | | |11 = TKn connected to VDD. + * @var TK_T::POLCTL + * Offset: 0x24 Touch Key Polarity Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[1:0] |IDLS16 |TK16 Idle State Control + * | | |This register is ignored if both TKSEN16 (TK_CTL[16]) and POLEN16 (TK_POLCTL[24]) are "0" or TKREN16 (TK_REFCTL[16]) is "1". + * | | |00 = TK16 connected to Gnd. + * | | |01 = TK16 connected to AVCCH. + * | | |10 = TK16 connected to VDD. + * | | |11 = TK16 connected to VDD. + * |[3:2] |POLSEL16 |TK16 Polarity Control + * | | |This register is ignored if POLEN16 (TK_POLCTL[24]) is "0", or either TKSEN16 (TK_CTL[16]) or TKREN16 (TK_REFCTL[16]) is "1". + * | | |00 = TK16 connected to Gnd. + * | | |01 = TK16 connected to AVCCH. + * | | |10 = TK16 connected to VDD. + * | | |11 = TK16 connected to VDD. + * |[5:4] |CBPOLSEL |Capacitor Bank Polarity Select + * | | |00 = Gnd. + * | | |01 = AVCCH. + * | | |10 = VDD. + * | | |11 = VDD. + * |[8] |POLEN0 |TK0 Polarity Function Enable Control + * | | |0 = Disabled. + * | | |1 = Enabled. + * |[9] |POLEN1 |TK1 Polarity Function Enable Control + * | | |0 = Disabled. + * | | |1 = Enabled. + * |[10] |POLEN2 |TK2 Polarity Function Enable Control + * | | |0 = Disabled. + * | | |1 = Enabled. + * |[11] |POLEN3 |TK3 Polarity Function Enable Control + * | | |0 = Disabled. + * | | |1 = Enabled. + * |[12] |POLEN4 |TK4 Polarity Function Enable Control + * | | |0 = Disabled. + * | | |1 = Enabled. + * |[13] |POLEN5 |TK5 Polarity Function Enable Control + * | | |0 = Disabled. + * | | |1 = Enabled. + * |[14] |POLEN6 |TK6 Polarity Function Enable Control + * | | |0 = Disabled. + * | | |1 = Enabled. + * |[15] |POLEN7 |TK7 Polarity Function Enable Control + * | | |0 = Disabled. + * | | |1 = Enabled. + * |[16] |POLEN8 |TK8 Polarity Function Enable Control + * | | |0 = Disabled. + * | | |1 = Enabled. + * |[17] |POLEN9 |TK9 Polarity Function Enable Control + * | | |0 = Disabled. + * | | |1 = Enabled. + * |[18] |POLEN10 |TK10 Polarity Function Enable Control + * | | |0 = Disabled. + * | | |1 = Enabled. + * |[19] |POLEN11 |TK11 Polarity Function Enable Control + * | | |0 = Disabled. + * | | |1 = Enabled. + * |[20] |POLEN12 |TK12 Polarity Function Enable Control + * | | |0 = Disabled. + * | | |1 = Enabled. + * |[21] |POLEN13 |TK13 Polarity Function Enable Control + * | | |0 = Disabled. + * | | |1 = Enabled. + * |[22] |POLEN14 |TK14 Polarity Function Enable Control + * | | |0 = Disabled. + * | | |1 = Enabled. + * |[23] |POLEN15 |TK15 Polarity Function Enable Control + * | | |0 = Disabled. + * | | |1 = Enabled. + * |[24] |POLEN16 |TK16 Polarity Function Enable Control + * | | |0 = Disabled. + * | | |1 = Enabled. + * |[31] |SPOTINIT |Touch Key Sensing Initial Potential Control + * | | |0 = Key pad is connected to Gnd before sensing. + * | | |1 = Key pad is connected to AVCCH before sensing. + * @var TK_T::STATUS + * Offset: 0x28 Touch Key Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |BUSY |Touch Key Busy (Read Only) + * | | |0 = Key scan is complete or stopped. + * | | |1 = Key scan is proceeding. + * |[1] |SCIF |Touch Key Scan Complete Interrupt Flag + * | | |This bit will be cleared by writing a "1" to this bit. + * | | |0 = Key scan is proceeding and data is not ready for read. + * | | |1 = Key scan is complete and data is ready for read in TKDATx registers. + * | | |Note1: The Touch Key interrupt asserts if SCINTEN bit of TK_INTEN register is set. + * | | |Note2: The Touch Key interrupt also asserts if SCTHIEN bit of TK_INTEN register is set and any channel data value is greater/less than its threshold setting + * |[8] |TKIF0 |TK0 Interrupt Flag + * | | |This bit will be cleared by writing a "1" to this bit. + * | | |0 = No threshold control event with TK0. + * | | |1 = Threshold control event occurs with TK0. + * |[9] |TKIF1 |TK1 Interrupt Flag + * | | |This bit will be cleared by writing a "1" to this bit. + * | | |0 = No threshold control event with TK1. + * | | |1 = Threshold control event occurs with TK1. + * |[10] |TKIF2 |TK2 Interrupt Flag + * | | |This bit will be cleared by writing a "1" to this bit. + * | | |0 = No threshold control event with TK2. + * | | |1 = Threshold control event occurs with TK2. + * |[11] |TKIF3 |TK3 Interrupt Flag + * | | |This bit will be cleared by writing a "1" to this bit. + * | | |0 = No threshold control event with TK3. + * | | |1 = Threshold control event occurs with TK3. + * |[12] |TKIF4 |TK4 Interrupt Flag + * | | |This bit will be cleared by writing a "1" to this bit. + * | | |0 = No threshold control event with TK4. + * | | |1 = Threshold control event occurs with TK4. + * |[13] |TKIF5 |TK5 Interrupt Flag + * | | |This bit will be cleared by writing a "1" to this bit. + * | | |0 = No threshold control event with TK5. + * | | |1 = Threshold control event occurs with TK5. + * |[14] |TKIF6 |TK6 Interrupt Flag + * | | |This bit will be cleared by writing a "1" to this bit. + * | | |0 = No threshold control event with TK6. + * | | |1 = Threshold control event occurs with TK6. + * |[15] |TKIF7 |TK7 Interrupt Flag + * | | |This bit will be cleared by writing a "1" to this bit. + * | | |0 = No threshold control event with TK7. + * | | |1 = Threshold control event occurs with TK7. + * |[16] |TKIF8 |TK8 Interrupt Flag + * | | |This bit will be cleared by writing a "1" to this bit. + * | | |0 = No threshold control event with TK8. + * | | |1 = Threshold control event occurs with TK8. + * |[17] |TKIF9 |TK9 Interrupt Flag + * | | |This bit will be cleared by writing a "1" to this bit. + * | | |0 = No threshold control event with TK9. + * | | |1 = Threshold control event occurs with TK9. + * |[18] |TKIF10 |TK10 Interrupt Flag + * | | |This bit will be cleared by writing a "1" to this bit. + * | | |0 = No threshold control event with TK10. + * | | |1 = Threshold control event occurs with TK10. + * |[19] |TKIF11 |TK11 Interrupt Flag + * | | |This bit will be cleared by writing a "1" to this bit. + * | | |0 = No threshold control event with TK11. + * | | |1 = Threshold control event occurs with TK11. + * |[20] |TKIF12 |TK12 Interrupt Flag + * | | |This bit will be cleared by writing a "1" to this bit. + * | | |0 = No threshold control event with TK12. + * | | |1 = Threshold control event occurs with TK12. + * |[21] |TKIF13 |TK13 Interrupt Flag + * | | |This bit will be cleared by writing a "1" to this bit. + * | | |0 = No threshold control event with TK13. + * | | |1 = Threshold control event occurs with TK13. + * |[22] |TKIF14 |TK14 Interrupt Flag + * | | |This bit will be cleared by writing a "1" to this bit. + * | | |0 = No threshold control event with TK14. + * | | |1 = Threshold control event occurs with TK14. + * |[23] |TKIF15 |TK15 Interrupt Flag + * | | |This bit will be cleared by writing a "1" to this bit. + * | | |0 = No threshold control event with TK15. + * | | |1 = Threshold control event occurs with TK15. + * |[24] |TKIF16 |TK16 Interrupt Flag + * | | |This bit will be cleared by writing a "1" to this bit. + * | | |0 = No threshold control event with TK16. + * | | |1 = Threshold control event occurs with TK16. + * @var TK_T::DAT0 + * Offset: 0x2C Touch Key Data Register 0 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |TKDAT0 |TK0 Sensing Result Data (Read Only) + * | | |This data is invalid if TKSEN0 (TK_CTL[0]) is "0" or TKREN0 (TK_REFCTL[0]) is "1" except SCANALL (TK_REFCTL[23]) is "1". + * |[15:8] |TKDAT1 |TK1 Sensing Result Data (Read Only) + * | | |This data is invalid if TKSEN1 (TK_CTL[1]) is "0" or TKREN1 (TK_REFCTL[1]) is "1". + * |[23:16] |TKDAT2 |TK2 Sensing Result Data (Read Only) + * | | |This data is invalid if TKSEN2 (TK_CTL[2]) is "0" or TKREN2 (TK_REFCTL[2]) is "1". + * |[31:24] |TKDAT3 |TK3 Sensing Result Data (Read Only) + * | | |This data is invalid if TKSEN3 (TK_CTL[3]) is "0" or TKREN3 (TK_REFCTL[3]) is "1". + * @var TK_T::DAT1 + * Offset: 0x30 Touch Key Data Register 1 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |TKDAT4 |TK0 Sensing Result Data (Read Only) + * | | |This data is invalid if TKSEN4 (TK_CTL[4]) is "0" or TKREN4 (TK_REFCTL[4]) is "1". + * |[15:8] |TKDAT5 |TK5 Sensing Result Data (Read Only) + * | | |This data is invalid if TKSEN5 (TK_CTL[5]) is "0" or TKREN5 (TK_REFCTL[5]) is "1". + * |[23:16] |TKDAT6 |TK6 Sensing Result Data (Read Only) + * | | |This data is invalid if TKSEN6 (TK_CTL[6]) is "0" or TKREN6 (TK_REFCTL[6]) is "1". + * |[31:24] |TKDAT7 |TK7 Sensing Result Data (Read Only) + * | | |This data is invalid if TKSEN7 (TK_CTL[7]) is "0" or TKREN7 (TK_REFCTL[7]) is "1". + * @var TK_T::DAT2 + * Offset: 0x34 Touch Key Data Register 2 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |TKDAT8 |TK8 Sensing Result Data (Read Only) + * | | |This data is invalid if TKSEN8 (TK_CTL[8]) is "0" or TKREN8 (TK_REFCTL[8]) is "1". + * |[15:8] |TKDAT9 |TK9 Sensing Result Data (Read Only) + * | | |This data is invalid if TKSEN9 (TK_CTL[9]) is "0" or TKREN9 (TK_REFCTL[9]) is "1". + * |[23:16] |TKDAT10 |TK10 Sensing Result Data (Read Only) + * | | |This data is invalid if TKSEN10 (TK_CTL[10]) is "0" or TKREN10 (TK_REFCTL[10]) is "1". + * |[31:24] |TKDAT11 |TK11 Sensing Result Data (Read Only) + * | | |This data is invalid if TKSEN11 (TK_CTL[11]) is "0" or TKREN11 (TK_REFCTL[11]) is "1". + * @var TK_T::DAT3 + * Offset: 0x38 Touch Key Data Register 3 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |TKDAT12 |TK12 Sensing Result Data (Read Only) + * | | |This data is invalid if TKSEN12 (TK_CTL[12]) is "0" or TKREN12 (TK_REFCTL[12]) is "1". + * |[15:8] |TKDAT13 |TK13 Sensing Result Data (Read Only) + * | | |This data is invalid if TKSEN13 (TK_CTL[13]) is "0" or TKREN13 (TK_REFCTL[13]) is "1". + * |[23:16] |TKDAT14 |TK14 Sensing Result Data (Read Only) + * | | |This data is invalid if TKSEN14 (TK_CTL[14]) is "0" or TKREN14 (TK_REFCTL[14]) is "1". + * |[31:24] |TKDAT15 |TK15 Sensing Result Data (Read Only) + * | | |This data is invalid if TKSEN15 (TK_CTL[15]) is "0" or TKREN15 (TK_REFCTL[15]) is "1". + * @var TK_T::DAT4 + * Offset: 0x3C Touch Key Data Register 4 + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |TKDAT16 |TK16 Sensing Result Data (Read Only) + * | | |This data is invalid if TKSEN16 (TK_CTL[16]) is "0" or TKREN16 (TK_REFCTL[16]) is "1". + * @var TK_T::INTEN + * Offset: 0x40 Touch Key Interrupt Enable Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |SCTHIEN |Touch Key Scan Complete With High/Low Threshold Control Interrupt Enable Bit + * | | |0 = Key scan complete with threshold control interrupt is disable. + * | | |1 = Key scan complete with threshold control interrupt is enable. + * |[1] |SCINTEN |Touch Key Scan Complete Interrupt Enable + * | | |Bit + * | | |0 = Key scan complete without threshold control interrupt is disable. + * | | |1 = Key scan complete without threshold control interrupt is enable. + * |[31] |THIMOD |Touch Key Threshold Interrupt Mode Select + * | | |0 = Edge trigger mode. + * | | |1 = Level trigger mode. + * @var TK_T::TH0_1 + * Offset: 0x44 Touch Key TK0/TK1 Threshold Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |LTH0 |Low Threshold Of TK0 + * | | |Low level for TK0 threshold control. + * |[15:8] |HTH0 |High Threshold Of TK0 + * | | |High level for TK0 threshold control. + * |[23:16] |LTH1 |Low Threshold Of TK1 + * | | |Low level for TK1 threshold control. + * |[31:24] |HTH1 |High Threshold Of TK1 + * | | |High level for TK1 threshold control. + * @var TK_T::TH2_3 + * Offset: 0x48 Touch Key TK2/TK3 Threshold Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |LTH2 |Low Threshold Of TK2 + * | | |Low level for TK2 threshold control. + * |[15:8] |HTH2 |High Threshold Of TK2 + * | | |High level for TK2 threshold control. + * |[23:16] |LTH3 |Low Threshold Of TK3 + * | | |Low level for TK3 threshold control. + * |[31:24] |HTH3 |High Threshold Of TK3 + * | | |High level for TK3 threshold control. + * @var TK_T::TH4_5 + * Offset: 0x4C Touch Key TK4/TK5 Threshold Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |LTH4 |Low Threshold Of TK4 + * | | |Low level for TK4 threshold control. + * |[15:8] |HTH4 |High Threshold Of TK4 + * | | |High level for TK4 threshold control. + * |[23:16] |LTH5 |Low Threshold Of TK5 + * | | |Low level for TK5 threshold control. + * |[31:24] |HTH5 |High Threshold Of TK5 + * | | |High level for TK5 threshold control. + * @var TK_T::TH6_7 + * Offset: 0x50 Touch Key TK6/TK7 Threshold Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |LTH6 |Low Threshold Of TK6 + * | | |Low level for TK6 threshold control. + * |[15:8] |HTH6 |High Threshold Of TK6 + * | | |High level for TK6 threshold control. + * |[23:16] |LTH7 |Low Threshold Of TK7 + * | | |Low level for TK7 threshold control. + * |[31:24] |HTH7 |High Threshold Of TK7 + * | | |High level for TK7 threshold control. + * @var TK_T::TH8_9 + * Offset: 0x54 Touch Key TK8/TK9 Threshold Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |LTH8 |Low Threshold Of TK8 + * | | |Low level for TK8 threshold control. + * |[15:8] |HTH8 |High Threshold Of TK8 + * | | |High level for TK8 threshold control. + * |[23:16] |LTH9 |Low Threshold Of TK9 + * | | |Low level for TK9 threshold control. + * |[31:24] |HTH9 |High Threshold Of TK9 + * | | |High level for TK9 threshold control. + * @var TK_T::TH10_11 + * Offset: 0x58 Touch Key TK10/TK11 Threshold Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |LTH10 |Low Threshold Of TK10 + * | | |Low level for TK10 threshold control. + * |[15:8] |HTH10 |High Threshold Of TK10 + * | | |High level for TK10 threshold control. + * |[23:16] |LTH11 |Low Threshold Of TK11 + * | | |Low level for TK11 threshold control. + * |[31:24] |HTH11 |High Threshold Of TK11 + * | | |High level for TK11 threshold control. + * @var TK_T::TH12_13 + * Offset: 0x5C Touch Key TK12/TK13 Threshold Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |LTH12 |Low Threshold Of TK12 + * | | |Low level for TK12 threshold control. + * |[15:8] |HTH12 |High Threshold Of TK12 + * | | |High level for TK12 threshold control. + * |[23:16] |LTH13 |Low Threshold Of TK13 + * | | |Low level for TK13 threshold control. + * |[31:24] |HTH13 |High Threshold Of TK13 + * | | |High level for TK13 threshold control. + * @var TK_T::TH14_15 + * Offset: 0x60 Touch Key TK14/TK15 Threshold Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |LTH14 |Low Threshold Of TK14 + * | | |Low level for TK14 threshold control. + * |[15:8] |HTH14 |High Threshold Of TK14 + * | | |High level for TK14 threshold control. + * |[23:16] |LTH15 |Low Threshold Of TK15 + * | | |Low level for TK15 threshold control. + * |[31:24] |HTH15 |High Threshold Of TK15 + * | | |High level for TK15 threshold control. + * @var TK_T::TH16 + * Offset: 0x64 Touch Key TK16 Threshold Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |LTH16 |Low Threshold Of TK16 + * | | |Low level for TK16 threshold control. + * |[15:8] |HTH16 |High Threshold Of TK16 + * | | |High level for TK16 threshold control. + */ + + __IO uint32_t CTL; /* Offset: 0x00 Touch Key Scan Control Register */ + __IO uint32_t REFCTL; /* Offset: 0x04 Touch Key Reference Control Register */ + __IO uint32_t CCBDAT0; /* Offset: 0x08 Touch Key Complement Capacitor Bank Data Register 0 */ + __IO uint32_t CCBDAT1; /* Offset: 0x0C Touch Key Complement Capacitor Bank Data Register 1 */ + __IO uint32_t CCBDAT2; /* Offset: 0x10 Touch Key Complement Capacitor Bank Data Register 2 */ + __IO uint32_t CCBDAT3; /* Offset: 0x14 Touch Key Complement Capacitor Bank Data Register 3 */ + __IO uint32_t CCBDAT4; /* Offset: 0x18 Touch Key Complement Capacitor Bank Data Register 4 */ + __IO uint32_t IDLESEL; /* Offset: 0x1C Touch Key Idle State Control Register */ + __IO uint32_t POLSEL; /* Offset: 0x20 Touch Key Polarity Select Register */ + __IO uint32_t POLCTL; /* Offset: 0x24 Touch Key Polarity Control Register */ + __IO uint32_t STATUS; /* Offset: 0x28 Touch Key Status Register */ + __I uint32_t DAT0; /* Offset: 0x2C Touch Key Data Register 0 */ + __I uint32_t DAT1; /* Offset: 0x30 Touch Key Data Register 1 */ + __I uint32_t DAT2; /* Offset: 0x34 Touch Key Data Register 2 */ + __I uint32_t DAT3; /* Offset: 0x38 Touch Key Data Register 3 */ + __I uint32_t DAT4; /* Offset: 0x3C Touch Key Data Register 4 */ + __IO uint32_t INTEN; /* Offset: 0x40 Touch Key Interrupt Enable Register */ + __IO uint32_t TH0_1; /* Offset: 0x44 Touch Key TK0/TK1 Threshold Control Register */ + __IO uint32_t TH2_3; /* Offset: 0x48 Touch Key TK2/TK3 Threshold Control Register */ + __IO uint32_t TH4_5; /* Offset: 0x4C Touch Key TK4/TK5 Threshold Control Register */ + __IO uint32_t TH6_7; /* Offset: 0x50 Touch Key TK6/TK7 Threshold Control Register */ + __IO uint32_t TH8_9; /* Offset: 0x54 Touch Key TK8/TK9 Threshold Control Register */ + __IO uint32_t TH10_11; /* Offset: 0x58 Touch Key TK10/TK11 Threshold Control Register */ + __IO uint32_t TH12_13; /* Offset: 0x5C Touch Key TK12/TK13 Threshold Control Register */ + __IO uint32_t TH14_15; /* Offset: 0x60 Touch Key TK14/TK15 Threshold Control Register */ + __IO uint32_t TH16; /* Offset: 0x64 Touch Key TK16 Threshold Control Register */ + +} TK_T; + + + +/** + @addtogroup TK_CONST TK Bit Field Definition + Constant Definitions for TK Controller +@{ */ + + +#define TK_CTL_TKSEN0_Pos (0) /*!< TK_T::CTL: TKSEN0 Position */ +#define TK_CTL_TKSEN0_Msk (0x1ul << TK_CTL_TKSEN0_Pos) /*!< TK_T::CTL: TKSEN0 Mask */ + +#define TK_CTL_TKSEN1_Pos (1) /*!< TK_T::CTL: TKSEN1 Position */ +#define TK_CTL_TKSEN1_Msk (0x1ul << TK_CTL_TKSEN1_Pos) /*!< TK_T::CTL: TKSEN1 Mask */ + +#define TK_CTL_TKSEN2_Pos (2) /*!< TK_T::CTL: TKSEN2 Position */ +#define TK_CTL_TKSEN2_Msk (0x1ul << TK_CTL_TKSEN2_Pos) /*!< TK_T::CTL: TKSEN2 Mask */ + +#define TK_CTL_TKSEN3_Pos (3) /*!< TK_T::CTL: TKSEN3 Position */ +#define TK_CTL_TKSEN3_Msk (0x1ul << TK_CTL_TKSEN3_Pos) /*!< TK_T::CTL: TKSEN3 Mask */ + +#define TK_CTL_TKSEN4_Pos (4) /*!< TK_T::CTL: TKSEN4 Position */ +#define TK_CTL_TKSEN4_Msk (0x1ul << TK_CTL_TKSEN4_Pos) /*!< TK_T::CTL: TKSEN4 Mask */ + +#define TK_CTL_TKSEN5_Pos (5) /*!< TK_T::CTL: TKSEN5 Position */ +#define TK_CTL_TKSEN5_Msk (0x1ul << TK_CTL_TKSEN5_Pos) /*!< TK_T::CTL: TKSEN5 Mask */ + +#define TK_CTL_TKSEN6_Pos (6) /*!< TK_T::CTL: TKSEN6 Position */ +#define TK_CTL_TKSEN6_Msk (0x1ul << TK_CTL_TKSEN6_Pos) /*!< TK_T::CTL: TKSEN6 Mask */ + +#define TK_CTL_TKSEN7_Pos (7) /*!< TK_T::CTL: TKSEN7 Position */ +#define TK_CTL_TKSEN7_Msk (0x1ul << TK_CTL_TKSEN7_Pos) /*!< TK_T::CTL: TKSEN7 Mask */ + +#define TK_CTL_TKSEN8_Pos (8) /*!< TK_T::CTL: TKSEN8 Position */ +#define TK_CTL_TKSEN8_Msk (0x1ul << TK_CTL_TKSEN8_Pos) /*!< TK_T::CTL: TKSEN8 Mask */ + +#define TK_CTL_TKSEN9_Pos (9) /*!< TK_T::CTL: TKSEN9 Position */ +#define TK_CTL_TKSEN9_Msk (0x1ul << TK_CTL_TKSEN9_Pos) /*!< TK_T::CTL: TKSEN9 Mask */ + +#define TK_CTL_TKSEN10_Pos (10) /*!< TK_T::CTL: TKSEN10 Position */ +#define TK_CTL_TKSEN10_Msk (0x1ul << TK_CTL_TKSEN10_Pos) /*!< TK_T::CTL: TKSEN10 Mask */ + +#define TK_CTL_TKSEN11_Pos (11) /*!< TK_T::CTL: TKSEN11 Position */ +#define TK_CTL_TKSEN11_Msk (0x1ul << TK_CTL_TKSEN11_Pos) /*!< TK_T::CTL: TKSEN11 Mask */ + +#define TK_CTL_TKSEN12_Pos (12) /*!< TK_T::CTL: TKSEN12 Position */ +#define TK_CTL_TKSEN12_Msk (0x1ul << TK_CTL_TKSEN12_Pos) /*!< TK_T::CTL: TKSEN12 Mask */ + +#define TK_CTL_TKSEN13_Pos (13) /*!< TK_T::CTL: TKSEN13 Position */ +#define TK_CTL_TKSEN13_Msk (0x1ul << TK_CTL_TKSEN13_Pos) /*!< TK_T::CTL: TKSEN13 Mask */ + +#define TK_CTL_TKSEN14_Pos (14) /*!< TK_T::CTL: TKSEN14 Position */ +#define TK_CTL_TKSEN14_Msk (0x1ul << TK_CTL_TKSEN14_Pos) /*!< TK_T::CTL: TKSEN14 Mask */ + +#define TK_CTL_TKSEN15_Pos (15) /*!< TK_T::CTL: TKSEN15 Position */ +#define TK_CTL_TKSEN15_Msk (0x1ul << TK_CTL_TKSEN15_Pos) /*!< TK_T::CTL: TKSEN15 Mask */ + +#define TK_CTL_TKSEN16_Pos (16) /*!< TK_T::CTL: TKSEN16 Position */ +#define TK_CTL_TKSEN16_Msk (0x1ul << TK_CTL_TKSEN16_Pos) /*!< TK_T::CTL: TKSEN16 Mask */ + +#define TK_CTL_AVCCHSEL_Pos (20) /*!< TK_T::CTL: AVCCHSEL Position */ +#define TK_CTL_AVCCHSEL_Msk (0x7ul << TK_CTL_AVCCHSEL_Pos) /*!< TK_T::CTL: AVCCHSEL Mask */ + +#define TK_CTL_SCAN_Pos (24) /*!< TK_T::CTL: SCAN Position */ +#define TK_CTL_SCAN_Msk (0x1ul << TK_CTL_SCAN_Pos) /*!< TK_T::CTL: SCAN Mask */ + +#define TK_CTL_TMRTRGEN_Pos (25) /*!< TK_T::CTL: TMRTRGEN Position */ +#define TK_CTL_TMRTRGEN_Msk (0x1ul << TK_CTL_TMRTRGEN_Pos) /*!< TK_T::CTL: TMRTRGEN Mask */ + +#define TK_CTL_TKEN_Pos (31) /*!< TK_T::CTL: TKEN Position */ +#define TK_CTL_TKEN_Msk (0x1ul << TK_CTL_TKEN_Pos) /*!< TK_T::CTL: TKEN Mask */ + +#define TK_REFCTL_TKREN0_Pos (0) /*!< TK_T::REFCTL: TKREN0 Position */ +#define TK_REFCTL_TKREN0_Msk (0x1ul << TK_REFCTL_TKREN0_Pos) /*!< TK_T::REFCTL: TKREN0 Mask */ + +#define TK_REFCTL_TKREN1_Pos (1) /*!< TK_T::REFCTL: TKREN1 Position */ +#define TK_REFCTL_TKREN1_Msk (0x1ul << TK_REFCTL_TKREN1_Pos) /*!< TK_T::REFCTL: TKREN1 Mask */ + +#define TK_REFCTL_TKREN2_Pos (2) /*!< TK_T::REFCTL: TKREN2 Position */ +#define TK_REFCTL_TKREN2_Msk (0x1ul << TK_REFCTL_TKREN2_Pos) /*!< TK_T::REFCTL: TKREN2 Mask */ + +#define TK_REFCTL_TKREN3_Pos (3) /*!< TK_T::REFCTL: TKREN3 Position */ +#define TK_REFCTL_TKREN3_Msk (0x1ul << TK_REFCTL_TKREN3_Pos) /*!< TK_T::REFCTL: TKREN3 Mask */ + +#define TK_REFCTL_TKREN4_Pos (4) /*!< TK_T::REFCTL: TKREN4 Position */ +#define TK_REFCTL_TKREN4_Msk (0x1ul << TK_REFCTL_TKREN4_Pos) /*!< TK_T::REFCTL: TKREN4 Mask */ + +#define TK_REFCTL_TKREN5_Pos (5) /*!< TK_T::REFCTL: TKREN5 Position */ +#define TK_REFCTL_TKREN5_Msk (0x1ul << TK_REFCTL_TKREN5_Pos) /*!< TK_T::REFCTL: TKREN5 Mask */ + +#define TK_REFCTL_TKREN6_Pos (6) /*!< TK_T::REFCTL: TKREN6 Position */ +#define TK_REFCTL_TKREN6_Msk (0x1ul << TK_REFCTL_TKREN6_Pos) /*!< TK_T::REFCTL: TKREN6 Mask */ + +#define TK_REFCTL_TKREN7_Pos (7) /*!< TK_T::REFCTL: TKREN7 Position */ +#define TK_REFCTL_TKREN7_Msk (0x1ul << TK_REFCTL_TKREN7_Pos) /*!< TK_T::REFCTL: TKREN7 Mask */ + +#define TK_REFCTL_TKREN8_Pos (8) /*!< TK_T::REFCTL: TKREN8 Position */ +#define TK_REFCTL_TKREN8_Msk (0x1ul << TK_REFCTL_TKREN8_Pos) /*!< TK_T::REFCTL: TKREN8 Mask */ + +#define TK_REFCTL_TKREN9_Pos (9) /*!< TK_T::REFCTL: TKREN9 Position */ +#define TK_REFCTL_TKREN9_Msk (0x1ul << TK_REFCTL_TKREN9_Pos) /*!< TK_T::REFCTL: TKREN9 Mask */ + +#define TK_REFCTL_TKREN10_Pos (10) /*!< TK_T::REFCTL: TKREN10 Position */ +#define TK_REFCTL_TKREN10_Msk (0x1ul << TK_REFCTL_TKREN10_Pos) /*!< TK_T::REFCTL: TKREN10 Mask */ + +#define TK_REFCTL_TKREN11_Pos (11) /*!< TK_T::REFCTL: TKREN11 Position */ +#define TK_REFCTL_TKREN11_Msk (0x1ul << TK_REFCTL_TKREN11_Pos) /*!< TK_T::REFCTL: TKREN11 Mask */ + +#define TK_REFCTL_TKREN12_Pos (12) /*!< TK_T::REFCTL: TKREN12 Position */ +#define TK_REFCTL_TKREN12_Msk (0x1ul << TK_REFCTL_TKREN12_Pos) /*!< TK_T::REFCTL: TKREN12 Mask */ + +#define TK_REFCTL_TKREN13_Pos (13) /*!< TK_T::REFCTL: TKREN13 Position */ +#define TK_REFCTL_TKREN13_Msk (0x1ul << TK_REFCTL_TKREN13_Pos) /*!< TK_T::REFCTL: TKREN13 Mask */ + +#define TK_REFCTL_TKREN14_Pos (14) /*!< TK_T::REFCTL: TKREN14 Position */ +#define TK_REFCTL_TKREN14_Msk (0x1ul << TK_REFCTL_TKREN14_Pos) /*!< TK_T::REFCTL: TKREN14 Mask */ + +#define TK_REFCTL_TKREN15_Pos (15) /*!< TK_T::REFCTL: TKREN15 Position */ +#define TK_REFCTL_TKREN15_Msk (0x1ul << TK_REFCTL_TKREN15_Pos) /*!< TK_T::REFCTL: TKREN15 Mask */ + +#define TK_REFCTL_TKREN16_Pos (16) /*!< TK_T::REFCTL: TKREN16 Position */ +#define TK_REFCTL_TKREN16_Msk (0x1ul << TK_REFCTL_TKREN16_Pos) /*!< TK_T::REFCTL: TKREN16 Mask */ + +#define TK_REFCTL_SCANALL_Pos (23) /*!< TK_T::REFCTL: SCANALL Position */ +#define TK_REFCTL_SCANALL_Msk (0x1ul << TK_REFCTL_SCANALL_Pos) /*!< TK_T::REFCTL: SCANALL Mask */ + +#define TK_REFCTL_SENTCTL_Pos (24) /*!< TK_T::REFCTL: SENTCTL Position */ +#define TK_REFCTL_SENTCTL_Msk (0x3ul << TK_REFCTL_SENTCTL_Pos) /*!< TK_T::REFCTL: SENTCTL Mask */ + +#define TK_REFCTL_SENPTCTL_Pos (28) /*!< TK_T::REFCTL: SENPTCTL Position */ +#define TK_REFCTL_SENPTCTL_Msk (0x3ul << TK_REFCTL_SENPTCTL_Pos) /*!< TK_T::REFCTL: SENPTCTL Mask */ + +#define TK_CCBDAT0_CCBDAT0_Pos (0) /*!< TK_T::CCBDAT0: CCBDAT0 Position */ +#define TK_CCBDAT0_CCBDAT0_Msk (0xfful << TK_CCBDAT0_CCBDAT0_Pos) /*!< TK_T::CCBDAT0: CCBDAT0 Mask */ + +#define TK_CCBDAT0_CCBDAT1_Pos (8) /*!< TK_T::CCBDAT0: CCBDAT1 Position */ +#define TK_CCBDAT0_CCBDAT1_Msk (0xfful << TK_CCBDAT0_CCBDAT1_Pos) /*!< TK_T::CCBDAT0: CCBDAT1 Mask */ + +#define TK_CCBDAT0_CCBDAT2_Pos (16) /*!< TK_T::CCBDAT0: CCBDAT2 Position */ +#define TK_CCBDAT0_CCBDAT2_Msk (0xfful << TK_CCBDAT0_CCBDAT2_Pos) /*!< TK_T::CCBDAT0: CCBDAT2 Mask */ + +#define TK_CCBDAT0_CCBDAT3_Pos (24) /*!< TK_T::CCBDAT0: CCBDAT3 Position */ +#define TK_CCBDAT0_CCBDAT3_Msk (0xfful << TK_CCBDAT0_CCBDAT3_Pos) /*!< TK_T::CCBDAT0: CCBDAT3 Mask */ + +#define TK_CCBDAT1_CCBDAT4_Pos (0) /*!< TK_T::CCBDAT1: CCBDAT4 Position */ +#define TK_CCBDAT1_CCBDAT4_Msk (0xfful << TK_CCBDAT1_CCBDAT4_Pos) /*!< TK_T::CCBDAT1: CCBDAT4 Mask */ + +#define TK_CCBDAT1_CCBDAT5_Pos (8) /*!< TK_T::CCBDAT1: CCBDAT5 Position */ +#define TK_CCBDAT1_CCBDAT5_Msk (0xfful << TK_CCBDAT1_CCBDAT5_Pos) /*!< TK_T::CCBDAT1: CCBDAT5 Mask */ + +#define TK_CCBDAT1_CCBDAT6_Pos (16) /*!< TK_T::CCBDAT1: CCBDAT6 Position */ +#define TK_CCBDAT1_CCBDAT6_Msk (0xfful << TK_CCBDAT1_CCBDAT6_Pos) /*!< TK_T::CCBDAT1: CCBDAT6 Mask */ + +#define TK_CCBDAT1_CCBDAT7_Pos (24) /*!< TK_T::CCBDAT1: CCBDAT7 Position */ +#define TK_CCBDAT1_CCBDAT7_Msk (0xfful << TK_CCBDAT1_CCBDAT7_Pos) /*!< TK_T::CCBDAT1: CCBDAT7 Mask */ + +#define TK_CCBDAT2_CCBDAT8_Pos (0) /*!< TK_T::CCBDAT2: CCBDAT8 Position */ +#define TK_CCBDAT2_CCBDAT8_Msk (0xfful << TK_CCBDAT2_CCBDAT8_Pos) /*!< TK_T::CCBDAT2: CCBDAT8 Mask */ + +#define TK_CCBDAT2_CCBDAT9_Pos (8) /*!< TK_T::CCBDAT2: CCBDAT9 Position */ +#define TK_CCBDAT2_CCBDAT9_Msk (0xfful << TK_CCBDAT2_CCBDAT9_Pos) /*!< TK_T::CCBDAT2: CCBDAT9 Mask */ + +#define TK_CCBDAT2_CCBDAT10_Pos (16) /*!< TK_T::CCBDAT2: CCBDAT10 Position */ +#define TK_CCBDAT2_CCBDAT10_Msk (0xfful << TK_CCBDAT2_CCBDAT10_Pos) /*!< TK_T::CCBDAT2: CCBDAT10 Mask */ + +#define TK_CCBDAT2_CCBDAT11_Pos (24) /*!< TK_T::CCBDAT2: CCBDAT11 Position */ +#define TK_CCBDAT2_CCBDAT11_Msk (0xfful << TK_CCBDAT2_CCBDAT11_Pos) /*!< TK_T::CCBDAT2: CCBDAT11 Mask */ + +#define TK_CCBDAT3_CCBDAT12_Pos (0) /*!< TK_T::CCBDAT3: CCBDAT12 Position */ +#define TK_CCBDAT3_CCBDAT12_Msk (0xfful << TK_CCBDAT3_CCBDAT12_Pos) /*!< TK_T::CCBDAT3: CCBDAT12 Mask */ + +#define TK_CCBDAT3_CCBDAT13_Pos (8) /*!< TK_T::CCBDAT3: CCBDAT13 Position */ +#define TK_CCBDAT3_CCBDAT13_Msk (0xfful << TK_CCBDAT3_CCBDAT13_Pos) /*!< TK_T::CCBDAT3: CCBDAT13 Mask */ + +#define TK_CCBDAT3_CCBDAT14_Pos (16) /*!< TK_T::CCBDAT3: CCBDAT14 Position */ +#define TK_CCBDAT3_CCBDAT14_Msk (0xfful << TK_CCBDAT3_CCBDAT14_Pos) /*!< TK_T::CCBDAT3: CCBDAT14 Mask */ + +#define TK_CCBDAT3_CCBDAT15_Pos (24) /*!< TK_T::CCBDAT3: CCBDAT15 Position */ +#define TK_CCBDAT3_CCBDAT15_Msk (0xfful << TK_CCBDAT3_CCBDAT15_Pos) /*!< TK_T::CCBDAT3: CCBDAT15 Mask */ + +#define TK_CCBDAT4_CCBDAT16_Pos (0) /*!< TK_T::CCBDAT4: CCBDAT16 Position */ +#define TK_CCBDAT4_CCBDAT16_Msk (0xfful << TK_CCBDAT4_CCBDAT16_Pos) /*!< TK_T::CCBDAT4: CCBDAT16 Mask */ + +#define TK_CCBDAT4_REFCBDAT_Pos (24) /*!< TK_T::CCBDAT4: REFCBDAT Position */ +#define TK_CCBDAT4_REFCBDAT_Msk (0xfful << TK_CCBDAT4_REFCBDAT_Pos) /*!< TK_T::CCBDAT4: REFCBDAT Mask */ + +#define TK_IDLESEL_IDLS_Pos (0) /*!< TK_T::IDLESEL: IDLS Position */ +#define TK_IDLESEL_IDLS_Msk (0xfffffffful << TK_IDLESEL_IDLS_Pos) /*!< TK_T::IDLESEL: IDLS Mask */ + +#define TK_IDLESEL_IDLSn_Pos (0) /*!< TK_T::IDLESEL: IDLSn Position */ +#define TK_IDLESEL_IDLSn_Msk (0x3ul << TK_IDLESEL_IDLSn_Pos) /*!< TK_T::IDLESEL: IDLSn Mask */ + +#define TK_POLSEL_POLSEL_Pos (0) /*!< TK_T::POLSEL: POLSEL Position */ +#define TK_POLSEL_POLSEL_Msk (0xfffffffful << TK_POLSEL_POLSEL_Pos) /*!< TK_T::POLSEL: POLSEL Mask */ + +#define TK_POLSEL_POLSELn_Pos (0) /*!< TK_T::POLSEL: POLSELn Position */ +#define TK_POLSEL_POLSELn_Msk (0x3ul << TK_POLSEL_POLSELn_Pos) /*!< TK_T::POLSEL: POLSELn Mask */ + +#define TK_POLCTL_IDLS16_Pos (0) /*!< TK_T::POLCTL: IDLS16 Position */ +#define TK_POLCTL_IDLS16_Msk (0x3ul << TK_POLCTL_IDLS16_Pos) /*!< TK_T::POLCTL: IDLS16 Mask */ + +#define TK_POLCTL_POLSEL16_Pos (2) /*!< TK_T::POLCTL: POLSEL16 Position */ +#define TK_POLCTL_POLSEL16_Msk (0x3ul << TK_POLCTL_POLSEL16_Pos) /*!< TK_T::POLCTL: POLSEL16 Mask */ + +#define TK_POLCTL_CBPOLSEL_Pos (4) /*!< TK_T::POLCTL: CBPOLSEL Position */ +#define TK_POLCTL_CBPOLSEL_Msk (0x3ul << TK_POLCTL_CBPOLSEL_Pos) /*!< TK_T::POLCTL: CBPOLSEL Mask */ + +#define TK_POLCTL_POLEN0_Pos (8) /*!< TK_T::POLCTL: POLEN0 Position */ +#define TK_POLCTL_POLEN0_Msk (0x1ul << TK_POLCTL_POLEN0_Pos) /*!< TK_T::POLCTL: POLEN0 Mask */ + +#define TK_POLCTL_POLEN1_Pos (9) /*!< TK_T::POLCTL: POLEN1 Position */ +#define TK_POLCTL_POLEN1_Msk (0x1ul << TK_POLCTL_POLEN1_Pos) /*!< TK_T::POLCTL: POLEN1 Mask */ + +#define TK_POLCTL_POLEN2_Pos (10) /*!< TK_T::POLCTL: POLEN2 Position */ +#define TK_POLCTL_POLEN2_Msk (0x1ul << TK_POLCTL_POLEN2_Pos) /*!< TK_T::POLCTL: POLEN2 Mask */ + +#define TK_POLCTL_POLEN3_Pos (11) /*!< TK_T::POLCTL: POLEN3 Position */ +#define TK_POLCTL_POLEN3_Msk (0x1ul << TK_POLCTL_POLEN3_Pos) /*!< TK_T::POLCTL: POLEN3 Mask */ + +#define TK_POLCTL_POLEN4_Pos (12) /*!< TK_T::POLCTL: POLEN4 Position */ +#define TK_POLCTL_POLEN4_Msk (0x1ul << TK_POLCTL_POLEN4_Pos) /*!< TK_T::POLCTL: POLEN4 Mask */ + +#define TK_POLCTL_POLEN5_Pos (13) /*!< TK_T::POLCTL: POLEN5 Position */ +#define TK_POLCTL_POLEN5_Msk (0x1ul << TK_POLCTL_POLEN5_Pos) /*!< TK_T::POLCTL: POLEN5 Mask */ + +#define TK_POLCTL_POLEN6_Pos (14) /*!< TK_T::POLCTL: POLEN6 Position */ +#define TK_POLCTL_POLEN6_Msk (0x1ul << TK_POLCTL_POLEN6_Pos) /*!< TK_T::POLCTL: POLEN6 Mask */ + +#define TK_POLCTL_POLEN7_Pos (15) /*!< TK_T::POLCTL: POLEN7 Position */ +#define TK_POLCTL_POLEN7_Msk (0x1ul << TK_POLCTL_POLEN7_Pos) /*!< TK_T::POLCTL: POLEN7 Mask */ + +#define TK_POLCTL_POLEN8_Pos (16) /*!< TK_T::POLCTL: POLEN8 Position */ +#define TK_POLCTL_POLEN8_Msk (0x1ul << TK_POLCTL_POLEN8_Pos) /*!< TK_T::POLCTL: POLEN8 Mask */ + +#define TK_POLCTL_POLEN9_Pos (17) /*!< TK_T::POLCTL: POLEN9 Position */ +#define TK_POLCTL_POLEN9_Msk (0x1ul << TK_POLCTL_POLEN9_Pos) /*!< TK_T::POLCTL: POLEN9 Mask */ + +#define TK_POLCTL_POLEN10_Pos (18) /*!< TK_T::POLCTL: POLEN10 Position */ +#define TK_POLCTL_POLEN10_Msk (0x1ul << TK_POLCTL_POLEN10_Pos) /*!< TK_T::POLCTL: POLEN10 Mask */ + +#define TK_POLCTL_POLEN11_Pos (19) /*!< TK_T::POLCTL: POLEN11 Position */ +#define TK_POLCTL_POLEN11_Msk (0x1ul << TK_POLCTL_POLEN11_Pos) /*!< TK_T::POLCTL: POLEN11 Mask */ + +#define TK_POLCTL_POLEN12_Pos (20) /*!< TK_T::POLCTL: POLEN12 Position */ +#define TK_POLCTL_POLEN12_Msk (0x1ul << TK_POLCTL_POLEN12_Pos) /*!< TK_T::POLCTL: POLEN12 Mask */ + +#define TK_POLCTL_POLEN13_Pos (21) /*!< TK_T::POLCTL: POLEN13 Position */ +#define TK_POLCTL_POLEN13_Msk (0x1ul << TK_POLCTL_POLEN13_Pos) /*!< TK_T::POLCTL: POLEN13 Mask */ + +#define TK_POLCTL_POLEN14_Pos (22) /*!< TK_T::POLCTL: POLEN14 Position */ +#define TK_POLCTL_POLEN14_Msk (0x1ul << TK_POLCTL_POLEN14_Pos) /*!< TK_T::POLCTL: POLEN14 Mask */ + +#define TK_POLCTL_POLEN15_Pos (23) /*!< TK_T::POLCTL: POLEN15 Position */ +#define TK_POLCTL_POLEN15_Msk (0x1ul << TK_POLCTL_POLEN15_Pos) /*!< TK_T::POLCTL: POLEN15 Mask */ + +#define TK_POLCTL_POLEN16_Pos (24) /*!< TK_T::POLCTL: POLEN16 Position */ +#define TK_POLCTL_POLEN16_Msk (0x1ul << TK_POLCTL_POLEN16_Pos) /*!< TK_T::POLCTL: POLEN16 Mask */ + +#define TK_POLCTL_SPOTINIT_Pos (31) /*!< TK_T::POLCTL: SPOTINIT Position */ +#define TK_POLCTL_SPOTINIT_Msk (0x1ul << TK_POLCTL_SPOTINIT_Pos) /*!< TK_T::POLCTL: SPOTINIT Mask */ + +#define TK_STATUS_BUSY_Pos (0) /*!< TK_T::STATUS: BUSY Position */ +#define TK_STATUS_BUSY_Msk (0x1ul << TK_STATUS_BUSY_Pos) /*!< TK_T::STATUS: BUSY Mask */ + +#define TK_STATUS_SCIF_Pos (1) /*!< TK_T::STATUS: SCIF Position */ +#define TK_STATUS_SCIF_Msk (0x1ul << TK_STATUS_SCIF_Pos) /*!< TK_T::STATUS: SCIF Mask */ + +#define TK_STATUS_TKIF0_Pos (8) /*!< TK_T::STATUS: TKIF0 Position */ +#define TK_STATUS_TKIF0_Msk (0x1ul << TK_STATUS_TKIF0_Pos) /*!< TK_T::STATUS: TKIF0 Mask */ + +#define TK_STATUS_TKIF1_Pos (9) /*!< TK_T::STATUS: TKIF1 Position */ +#define TK_STATUS_TKIF1_Msk (0x1ul << TK_STATUS_TKIF1_Pos) /*!< TK_T::STATUS: TKIF1 Mask */ + +#define TK_STATUS_TKIF2_Pos (10) /*!< TK_T::STATUS: TKIF2 Position */ +#define TK_STATUS_TKIF2_Msk (0x1ul << TK_STATUS_TKIF2_Pos) /*!< TK_T::STATUS: TKIF2 Mask */ + +#define TK_STATUS_TKIF3_Pos (11) /*!< TK_T::STATUS: TKIF3 Position */ +#define TK_STATUS_TKIF3_Msk (0x1ul << TK_STATUS_TKIF3_Pos) /*!< TK_T::STATUS: TKIF3 Mask */ + +#define TK_STATUS_TKIF4_Pos (12) /*!< TK_T::STATUS: TKIF4 Position */ +#define TK_STATUS_TKIF4_Msk (0x1ul << TK_STATUS_TKIF4_Pos) /*!< TK_T::STATUS: TKIF4 Mask */ + +#define TK_STATUS_TKIF5_Pos (13) /*!< TK_T::STATUS: TKIF5 Position */ +#define TK_STATUS_TKIF5_Msk (0x1ul << TK_STATUS_TKIF5_Pos) /*!< TK_T::STATUS: TKIF5 Mask */ + +#define TK_STATUS_TKIF6_Pos (14) /*!< TK_T::STATUS: TKIF6 Position */ +#define TK_STATUS_TKIF6_Msk (0x1ul << TK_STATUS_TKIF6_Pos) /*!< TK_T::STATUS: TKIF6 Mask */ + +#define TK_STATUS_TKIF7_Pos (15) /*!< TK_T::STATUS: TKIF7 Position */ +#define TK_STATUS_TKIF7_Msk (0x1ul << TK_STATUS_TKIF7_Pos) /*!< TK_T::STATUS: TKIF7 Mask */ + +#define TK_STATUS_TKIF8_Pos (16) /*!< TK_T::STATUS: TKIF8 Position */ +#define TK_STATUS_TKIF8_Msk (0x1ul << TK_STATUS_TKIF8_Pos) /*!< TK_T::STATUS: TKIF8 Mask */ + +#define TK_STATUS_TKIF9_Pos (17) /*!< TK_T::STATUS: TKIF9 Position */ +#define TK_STATUS_TKIF9_Msk (0x1ul << TK_STATUS_TKIF9_Pos) /*!< TK_T::STATUS: TKIF9 Mask */ + +#define TK_STATUS_TKIF10_Pos (18) /*!< TK_T::STATUS: TKIF10 Position */ +#define TK_STATUS_TKIF10_Msk (0x1ul << TK_STATUS_TKIF10_Pos) /*!< TK_T::STATUS: TKIF10 Mask */ + +#define TK_STATUS_TKIF11_Pos (19) /*!< TK_T::STATUS: TKIF11 Position */ +#define TK_STATUS_TKIF11_Msk (0x1ul << TK_STATUS_TKIF11_Pos) /*!< TK_T::STATUS: TKIF11 Mask */ + +#define TK_STATUS_TKIF12_Pos (20) /*!< TK_T::STATUS: TKIF12 Position */ +#define TK_STATUS_TKIF12_Msk (0x1ul << TK_STATUS_TKIF12_Pos) /*!< TK_T::STATUS: TKIF12 Mask */ + +#define TK_STATUS_TKIF13_Pos (21) /*!< TK_T::STATUS: TKIF13 Position */ +#define TK_STATUS_TKIF13_Msk (0x1ul << TK_STATUS_TKIF13_Pos) /*!< TK_T::STATUS: TKIF13 Mask */ + +#define TK_STATUS_TKIF14_Pos (22) /*!< TK_T::STATUS: TKIF14 Position */ +#define TK_STATUS_TKIF14_Msk (0x1ul << TK_STATUS_TKIF14_Pos) /*!< TK_T::STATUS: TKIF14 Mask */ + +#define TK_STATUS_TKIF15_Pos (23) /*!< TK_T::STATUS: TKIF15 Position */ +#define TK_STATUS_TKIF15_Msk (0x1ul << TK_STATUS_TKIF15_Pos) /*!< TK_T::STATUS: TKIF15 Mask */ + +#define TK_STATUS_TKIF16_Pos (24) /*!< TK_T::STATUS: TKIF16 Position */ +#define TK_STATUS_TKIF16_Msk (0x1ul << TK_STATUS_TKIF16_Pos) /*!< TK_T::STATUS: TKIF16 Mask */ + +#define TK_DAT0_TKDAT0_Pos (0) /*!< TK_T::DAT0: TKDAT0 Position */ +#define TK_DAT0_TKDAT0_Msk (0xfful << TK_DAT0_TKDAT0_Pos) /*!< TK_T::DAT0: TKDAT0 Mask */ + +#define TK_DAT0_TKDAT1_Pos (8) /*!< TK_T::DAT0: TKDAT1 Position */ +#define TK_DAT0_TKDAT1_Msk (0xfful << TK_DAT0_TKDAT1_Pos) /*!< TK_T::DAT0: TKDAT1 Mask */ + +#define TK_DAT0_TKDAT2_Pos (16) /*!< TK_T::DAT0: TKDAT2 Position */ +#define TK_DAT0_TKDAT2_Msk (0xfful << TK_DAT0_TKDAT2_Pos) /*!< TK_T::DAT0: TKDAT2 Mask */ + +#define TK_DAT0_TKDAT3_Pos (24) /*!< TK_T::DAT0: TKDAT3 Position */ +#define TK_DAT0_TKDAT3_Msk (0xfful << TK_DAT0_TKDAT3_Pos) /*!< TK_T::DAT0: TKDAT3 Mask */ + +#define TK_DAT1_TKDAT4_Pos (0) /*!< TK_T::DAT1: TKDAT4 Position */ +#define TK_DAT1_TKDAT4_Msk (0xfful << TK_DAT1_TKDAT4_Pos) /*!< TK_T::DAT1: TKDAT4 Mask */ + +#define TK_DAT1_TKDAT5_Pos (8) /*!< TK_T::DAT1: TKDAT5 Position */ +#define TK_DAT1_TKDAT5_Msk (0xfful << TK_DAT1_TKDAT5_Pos) /*!< TK_T::DAT1: TKDAT5 Mask */ + +#define TK_DAT1_TKDAT6_Pos (16) /*!< TK_T::DAT1: TKDAT6 Position */ +#define TK_DAT1_TKDAT6_Msk (0xfful << TK_DAT1_TKDAT6_Pos) /*!< TK_T::DAT1: TKDAT6 Mask */ + +#define TK_DAT1_TKDAT7_Pos (24) /*!< TK_T::DAT1: TKDAT7 Position */ +#define TK_DAT1_TKDAT7_Msk (0xfful << TK_DAT1_TKDAT7_Pos) /*!< TK_T::DAT1: TKDAT7 Mask */ + +#define TK_DAT2_TKDAT8_Pos (0) /*!< TK_T::DAT2: TKDAT8 Position */ +#define TK_DAT2_TKDAT8_Msk (0xfful << TK_DAT2_TKDAT8_Pos) /*!< TK_T::DAT2: TKDAT8 Mask */ + +#define TK_DAT2_TKDAT9_Pos (8) /*!< TK_T::DAT2: TKDAT9 Position */ +#define TK_DAT2_TKDAT9_Msk (0xfful << TK_DAT2_TKDAT9_Pos) /*!< TK_T::DAT2: TKDAT9 Mask */ + +#define TK_DAT2_TKDAT10_Pos (16) /*!< TK_T::DAT2: TKDAT10 Position */ +#define TK_DAT2_TKDAT10_Msk (0xfful << TK_DAT2_TKDAT10_Pos) /*!< TK_T::DAT2: TKDAT10 Mask */ + +#define TK_DAT2_TKDAT11_Pos (24) /*!< TK_T::DAT2: TKDAT11 Position */ +#define TK_DAT2_TKDAT11_Msk (0xfful << TK_DAT2_TKDAT11_Pos) /*!< TK_T::DAT2: TKDAT11 Mask */ + +#define TK_DAT3_TKDAT12_Pos (0) /*!< TK_T::DAT3: TKDAT12 Position */ +#define TK_DAT3_TKDAT12_Msk (0xfful << TK_DAT3_TKDAT12_Pos) /*!< TK_T::DAT3: TKDAT12 Mask */ + +#define TK_DAT3_TKDAT13_Pos (8) /*!< TK_T::DAT3: TKDAT13 Position */ +#define TK_DAT3_TKDAT13_Msk (0xfful << TK_DAT3_TKDAT13_Pos) /*!< TK_T::DAT3: TKDAT13 Mask */ + +#define TK_DAT3_TKDAT14_Pos (16) /*!< TK_T::DAT3: TKDAT14 Position */ +#define TK_DAT3_TKDAT14_Msk (0xfful << TK_DAT3_TKDAT14_Pos) /*!< TK_T::DAT3: TKDAT14 Mask */ + +#define TK_DAT3_TKDAT15_Pos (24) /*!< TK_T::DAT3: TKDAT15 Position */ +#define TK_DAT3_TKDAT15_Msk (0xfful << TK_DAT3_TKDAT15_Pos) /*!< TK_T::DAT3: TKDAT15 Mask */ + +#define TK_DAT4_TKDAT16_Pos (0) /*!< TK_T::DAT4: TKDAT16 Position */ +#define TK_DAT4_TKDAT16_Msk (0xfful << TK_DAT4_TKDAT16_Pos) /*!< TK_T::DAT4: TKDAT16 Mask */ + +#define TK_INTEN_SCTHIEN_Pos (0) /*!< TK_T::INTEN: SCTHIEN Position */ +#define TK_INTEN_SCTHIEN_Msk (0x1ul << TK_INTEN_SCTHIEN_Pos) /*!< TK_T::INTEN: SCTHIEN Mask */ + +#define TK_INTEN_SCINTEN_Pos (1) /*!< TK_T::INTEN: SCINTEN Position */ +#define TK_INTEN_SCINTEN_Msk (0x1ul << TK_INTEN_SCINTEN_Pos) /*!< TK_T::INTEN: SCINTEN Mask */ + +#define TK_INTEN_THIMOD_Pos (31) /*!< TK_T::INTEN: THIMOD Position */ +#define TK_INTEN_THIMOD_Msk (0x1ul << TK_INTEN_THIMOD_Pos) /*!< TK_T::INTEN: THIMOD Mask */ + +#define TK_TH0_1_LTH0_Pos (0) /*!< TK_T::TH0_1: LTH0 Position */ +#define TK_TH0_1_LTH0_Msk (0xfful << TK_TH0_1_LTH0_Pos) /*!< TK_T::TH0_1: LTH0 Mask */ + +#define TK_TH0_1_HTH0_Pos (8) /*!< TK_T::TH0_1: HTH0 Position */ +#define TK_TH0_1_HTH0_Msk (0xfful << TK_TH0_1_HTH0_Pos) /*!< TK_T::TH0_1: HTH0 Mask */ + +#define TK_TH0_1_LTH1_Pos (16) /*!< TK_T::TH0_1: LTH1 Position */ +#define TK_TH0_1_LTH1_Msk (0xfful << TK_TH0_1_LTH1_Pos) /*!< TK_T::TH0_1: LTH1 Mask */ + +#define TK_TH0_1_HTH1_Pos (24) /*!< TK_T::TH0_1: HTH1 Position */ +#define TK_TH0_1_HTH1_Msk (0xfful << TK_TH0_1_HTH1_Pos) /*!< TK_T::TH0_1: HTH1 Mask */ + +#define TK_TH2_3_LTH2_Pos (0) /*!< TK_T::TH2_3: LTH2 Position */ +#define TK_TH2_3_LTH2_Msk (0xfful << TK_TH2_3_LTH2_Pos) /*!< TK_T::TH2_3: LTH2 Mask */ + +#define TK_TH2_3_HTH2_Pos (8) /*!< TK_T::TH2_3: HTH2 Position */ +#define TK_TH2_3_HTH2_Msk (0xfful << TK_TH2_3_HTH2_Pos) /*!< TK_T::TH2_3: HTH2 Mask */ + +#define TK_TH2_3_LTH3_Pos (16) /*!< TK_T::TH2_3: LTH3 Position */ +#define TK_TH2_3_LTH3_Msk (0xfful << TK_TH2_3_LTH3_Pos) /*!< TK_T::TH2_3: LTH3 Mask */ + +#define TK_TH2_3_HTH3_Pos (24) /*!< TK_T::TH2_3: HTH3 Position */ +#define TK_TH2_3_HTH3_Msk (0xfful << TK_TH2_3_HTH3_Pos) /*!< TK_T::TH2_3: HTH3 Mask */ + +#define TK_TH4_5_LTH4_Pos (0) /*!< TK_T::TH4_5: LTH4 Position */ +#define TK_TH4_5_LTH4_Msk (0xfful << TK_TH4_5_LTH4_Pos) /*!< TK_T::TH4_5: LTH4 Mask */ + +#define TK_TH4_5_HTH4_Pos (8) /*!< TK_T::TH4_5: HTH4 Position */ +#define TK_TH4_5_HTH4_Msk (0xfful << TK_TH4_5_HTH4_Pos) /*!< TK_T::TH4_5: HTH4 Mask */ + +#define TK_TH4_5_LTH5_Pos (16) /*!< TK_T::TH4_5: LTH5 Position */ +#define TK_TH4_5_LTH5_Msk (0xfful << TK_TH4_5_LTH5_Pos) /*!< TK_T::TH4_5: LTH5 Mask */ + +#define TK_TH4_5_HTH5_Pos (24) /*!< TK_T::TH4_5: HTH5 Position */ +#define TK_TH4_5_HTH5_Msk (0xfful << TK_TH4_5_HTH5_Pos) /*!< TK_T::TH4_5: HTH5 Mask */ + +#define TK_TH6_7_LTH6_Pos (0) /*!< TK_T::TH6_7: LTH6 Position */ +#define TK_TH6_7_LTH6_Msk (0xfful << TK_TH6_7_LTH6_Pos) /*!< TK_T::TH6_7: LTH6 Mask */ + +#define TK_TH6_7_HTH6_Pos (8) /*!< TK_T::TH6_7: HTH6 Position */ +#define TK_TH6_7_HTH6_Msk (0xfful << TK_TH6_7_HTH6_Pos) /*!< TK_T::TH6_7: HTH6 Mask */ + +#define TK_TH6_7_LTH7_Pos (16) /*!< TK_T::TH6_7: LTH7 Position */ +#define TK_TH6_7_LTH7_Msk (0xfful << TK_TH6_7_LTH7_Pos) /*!< TK_T::TH6_7: LTH7 Mask */ + +#define TK_TH6_7_HTH7_Pos (24) /*!< TK_T::TH6_7: HTH7 Position */ +#define TK_TH6_7_HTH7_Msk (0xfful << TK_TH6_7_HTH7_Pos) /*!< TK_T::TH6_7: HTH7 Mask */ + +#define TK_TH8_9_LTH8_Pos (0) /*!< TK_T::TH8_9: LTH8 Position */ +#define TK_TH8_9_LTH8_Msk (0xfful << TK_TH8_9_LTH8_Pos) /*!< TK_T::TH8_9: LTH8 Mask */ + +#define TK_TH8_9_HTH8_Pos (8) /*!< TK_T::TH8_9: HTH8 Position */ +#define TK_TH8_9_HTH8_Msk (0xfful << TK_TH8_9_HTH8_Pos) /*!< TK_T::TH8_9: HTH8 Mask */ + +#define TK_TH8_9_LTH9_Pos (16) /*!< TK_T::TH8_9: LTH9 Position */ +#define TK_TH8_9_LTH9_Msk (0xfful << TK_TH8_9_LTH9_Pos) /*!< TK_T::TH8_9: LTH9 Mask */ + +#define TK_TH8_9_HTH9_Pos (24) /*!< TK_T::TH8_9: HTH9 Position */ +#define TK_TH8_9_HTH9_Msk (0xfful << TK_TH8_9_HTH9_Pos) /*!< TK_T::TH8_9: HTH9 Mask */ + +#define TK_TH10_11_LTH10_Pos (0) /*!< TK_T::TH10_11: LTH10 Position */ +#define TK_TH10_11_LTH10_Msk (0xfful << TK_TH10_11_LTH10_Pos) /*!< TK_T::TH10_11: LTH10 Mask */ + +#define TK_TH10_11_HTH10_Pos (8) /*!< TK_T::TH10_11: HTH10 Position */ +#define TK_TH10_11_HTH10_Msk (0xfful << TK_TH10_11_HTH10_Pos) /*!< TK_T::TH10_11: HTH10 Mask */ + +#define TK_TH10_11_LTH11_Pos (16) /*!< TK_T::TH10_11: LTH11 Position */ +#define TK_TH10_11_LTH11_Msk (0xfful << TK_TH10_11_LTH11_Pos) /*!< TK_T::TH10_11: LTH11 Mask */ + +#define TK_TH10_11_HTH11_Pos (24) /*!< TK_T::TH10_11: HTH11 Position */ +#define TK_TH10_11_HTH11_Msk (0xfful << TK_TH10_11_HTH11_Pos) /*!< TK_T::TH10_11: HTH11 Mask */ + +#define TK_TH12_13_LTH12_Pos (0) /*!< TK_T::TH12_13: LTH12 Position */ +#define TK_TH12_13_LTH12_Msk (0xfful << TK_TH12_13_LTH12_Pos) /*!< TK_T::TH12_13: LTH12 Mask */ + +#define TK_TH12_13_HTH12_Pos (8) /*!< TK_T::TH12_13: HTH12 Position */ +#define TK_TH12_13_HTH12_Msk (0xfful << TK_TH12_13_HTH12_Pos) /*!< TK_T::TH12_13: HTH12 Mask */ + +#define TK_TH12_13_LTH13_Pos (16) /*!< TK_T::TH12_13: LTH13 Position */ +#define TK_TH12_13_LTH13_Msk (0xfful << TK_TH12_13_LTH13_Pos) /*!< TK_T::TH12_13: LTH13 Mask */ + +#define TK_TH12_13_HTH13_Pos (24) /*!< TK_T::TH12_13: HTH13 Position */ +#define TK_TH12_13_HTH13_Msk (0xfful << TK_TH12_13_HTH13_Pos) /*!< TK_T::TH12_13: HTH13 Mask */ + +#define TK_TH14_15_LTH14_Pos (0) /*!< TK_T::TH14_15: LTH14 Position */ +#define TK_TH14_15_LTH14_Msk (0xfful << TK_TH14_15_LTH14_Pos) /*!< TK_T::TH14_15: LTH14 Mask */ + +#define TK_TH14_15_HTH14_Pos (8) /*!< TK_T::TH14_15: HTH14 Position */ +#define TK_TH14_15_HTH14_Msk (0xfful << TK_TH14_15_HTH14_Pos) /*!< TK_T::TH14_15: HTH14 Mask */ + +#define TK_TH14_15_LTH15_Pos (16) /*!< TK_T::TH14_15: LTH15 Position */ +#define TK_TH14_15_LTH15_Msk (0xfful << TK_TH14_15_LTH15_Pos) /*!< TK_T::TH14_15: LTH15 Mask */ + +#define TK_TH14_15_HTH15_Pos (24) /*!< TK_T::TH14_15: HTH15 Position */ +#define TK_TH14_15_HTH15_Msk (0xfful << TK_TH14_15_HTH15_Pos) /*!< TK_T::TH14_15: HTH15 Mask */ + +#define TK_TH16_LTH16_Pos (0) /*!< TK_T::TH16: LTH16 Position */ +#define TK_TH16_LTH16_Msk (0xfful << TK_TH16_LTH16_Pos) /*!< TK_T::TH16: LTH16 Mask */ + +#define TK_TH16_HTH16_Pos (8) /*!< TK_T::TH16: HTH16 Position */ +#define TK_TH16_HTH16_Msk (0xfful << TK_TH16_HTH16_Pos) /*!< TK_T::TH16: HTH16 Mask */ + +/**@}*/ /* TK_CONST */ +/**@}*/ /* end of TK register group */ + + +/*---------------------- Timer Controller -------------------------*/ +/** + @addtogroup TMR Timer Controller(TMR) + Memory Mapped Structure for TMR Controller +@{ */ + + +typedef struct +{ + + + + +/** + * @var TIMER_T::CTL + * Offset: 0x00 Timer Control and Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |PSC |Prescale Counter + * | | |Timer input clock or event source is divided by (PSC+1) before it is fed to the timer up counter. + * | | |If this field is 0 (PSC = 0), then there is no scaling. + * |[17] |WKTKEN |Wake-Up Touch-Key Scan Enable Bit + * | | |If this bit is set to 1, timer time-out interrupt in Power-down mode can be triggered Touch-Key start scan. + * | | |0 = Timer time-out interrupt signal trigger Touch-Key start scan Disabled. + * | | |1 = Timer time-out interrupt signal trigger Touch-Key start scan Enabled. + * | | |Note: This bit is only available in TIMER0_CTL. + * |[18] |TRGSSEL |Trigger Source Select Bit + * | | |This bit is used to select trigger source is form Timer time-out interrupt signal or capture interrupt signal. + * | | |0 = Timer time-out interrupt signal is used to trigger PWM, EADC and DAC. + * | | |1 = Capture interrupt signal is used to trigger PWM, EADC and DAC. + * |[19] |TRGPWM |Trigger PWM Enable Bit + * | | |If this bit is set to 1, timer time-out interrupt or capture interrupt can be triggered PWM. + * | | |0 = Timer interrupt trigger PWM Disabled. + * | | |1 = Timer interrupt trigger PWM Enabled. + * | | |Note: If TRGSSEL (TIMERx_CTL[18]) = 0, time-out interrupt signal will trigger PWM. + * | | |If TRGSSEL (TIMERx_CTL[18]) = 1, capture interrupt signal will trigger PWM. + * |[20] |TRGDAC |Trigger DAC Enable Bit + * | | |If this bit is set to 1, timer time-out interrupt or capture interrupt can be triggered DAC. + * | | |0 = Timer interrupt trigger DAC Disabled. + * | | |1 = Timer interrupt trigger DAC Enabled. + * | | |Note: If TRGSSEL (TIMERx_CTL[18]) = 0, time-out interrupt signal will trigger DAC. + * | | |If TRGSSEL (TIMERx_CTL[18]) = 1, capture interrupt signal will trigger DAC. + * |[21] |TRGEADC |Trigger EADC Enable Bit + * | | |If this bit is set to 1, timer time-out interrupt or capture interrupt can be triggered EADC. + * | | |0 = Timer interrupt trigger EADC Disabled. + * | | |1 = Timer interrupt trigger EADC Enabled. + * | | |Note: If TRGSSEL (TIMERx_CTL[18]) = 0, time-out interrupt signal will trigger EADC. + * | | |If TRGSSEL (TIMERx_CTL[18]) = 1, capture interrupt signal will trigger EADC. + * |[22] |TGLPINSEL |Toggle-Output Pin Select + * | | |0 = Toggle mode output to Tx_OUT (Timer Event Counter Pin). + * | | |1 = Toggle mode output to Tx_EXT(Timer External Capture Pin). + * |[23] |WKEN |Wake-Up Function Enable Bit + * | | |If this bit is set to 1, while timer interrupt flag TIF (TIMERx_INTSTS[0]) is 1 and INTEN (TIMERx_CTL[29]) is enabled, the timer interrupt signal will generate a wake-up trigger event to CPU. + * | | |0 = Wake-up function Disabled if timer interrupt signal generated. + * | | |1 = Wake-up function Enabled if timer interrupt signal generated. + * |[24] |EXTCNTEN |Event Counter Mode Enable Bit + * | | |This bit is for external counting pin function enabled. + * | | |0 = Event counter mode Disabled. + * | | |1 = Event counter mode Enabled. + * | | |Note: When timer is used as an event counter, this bit should be set to 1 and select HCLK as timer clock source. + * |[25] |ACTSTS |Timer Active Status Bit (Read Only) + * | | |This bit indicates the 24-bit up counter status. + * | | |0 = 24-bit up counter is not active. + * | | |1 = 24-bit up counter is active. + * |[26] |RSTCNT |Timer Counter Reset Bit + * | | |Setting this bit will reset the 24-bit up counter value CNT (TIMERx_CNT[23:0]) and also force CNTEN (TIMERx_CTL[30]) to 0 if ACTSTS (TIMERx_CTL[25]) is 1. + * | | |0 = No effect. + * | | |1 = Reset internal 8-bit prescale counter, 24-bit up counter value and CNTEN bit. + * |[28:27] |OPMODE |Timer Counting Mode Select + * | | |00 = The Timer controller is operated in One-shot mode. + * | | |01 = The Timer controller is operated in Periodic mode. + * | | |10 = The Timer controller is operated in Toggle-output mode. + * | | |11 = The Timer controller is operated in Continuous Counting mode. + * |[29] |INTEN |Timer Interrupt Enable Bit + * | | |0 = Timer Interrupt Disabled. + * | | |1 = Timer Interrupt Enabled. + * | | |Note: If this bit is enabled, when the timer interrupt flag TIF is set to 1, the timer interrupt signal is generated and inform to CPU. + * |[30] |CNTEN |Timer Counting Enable Bit + * | | |0 = Stops/Suspends counting. + * | | |1 = Starts counting. + * | | |Note1: In stop status, and then set CNTEN to 1 will enable the 24-bit up counter to keep counting from the last stop counting value. + * | | |Note2: This bit is auto-cleared by hardware in one-shot mode (TIMER_CTL[28:27] = 00) when the timer interrupt flag TIF (TIMERx_INTSTS[0]) is generated. + * |[31] |ICEDEBUG |ICE Debug Mode Acknowledge Disable + * | | |0 = ICE debug mode acknowledgement effects TIMER counting. + * | | |TIMER counter will be held while CPU is held by ICE. + * | | |1 = ICE debug mode acknowledgement Disabled. + * | | |TIMER counter will keep going no matter CPU is held by ICE or not. + * @var TIMER_T::CMP + * Offset: 0x04 Timer Compare Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[23:0] |CMPDAT |Timer Compared Value + * | | |CMPDAT is a 24-bit compared value register. + * | | |When the internal 24-bit up counter value is equal to CMPDAT value, the TIF (TIMERx_INTSTS[0] Timer Interrupt Flag) will set to 1. + * | | |Time-out period = (Period of timer clock input) * (8-bit PSC + 1) * (24-bit CMPDAT). + * | | |Note1: Never write 0x0 or 0x1 in CMPDAT field, or the core will run into unknown state. + * | | |Note2: When timer is operating at continuous counting mode, the 24-bit up counter will keep counting continuously even if user writes a new value into CMPDAT field. + * | | |But if timer is operating at other modes, the 24-bit up counter will restart counting from 0 and using newest CMPDAT value to be the timer compared value while user writes a new value into CMPDAT field. + * @var TIMER_T::INTSTS + * Offset: 0x08 Timer Interrupt Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |TIF |Timer Interrupt Flag + * | | |This bit indicates the interrupt flag status of Timer while 24-bit timer up counter CNT (TIMERx_CNT[23:0]) value reaches to CMPDAT (TIMERx_CMP[23:0]) value. + * | | |0 = No effect. + * | | |1 = CNT value matches the CMPDAT value. + * | | |Note: This bit is cleared by writing 1 to it. + * |[1] |TWKF |Timer Wake-Up Flag + * | | |This bit indicates the interrupt wake-up flag status of timer. + * | | |0 = Timer does not cause CPU wake-up. + * | | |1 = CPU wake-up from Idle or Power-down mode if timer time-out interrupt signal generated. + * | | |Note: This bit is cleared by writing 1 to it. + * @var TIMER_T::CNT + * Offset: 0x0C Timer Data Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[23:0] |CNT |Timer Data Register + * | | |This field can be reflected the internal 24-bit timer counter value or external event input counter value from Tx_CNT (x=0~3) pin. + * | | |If EXTCNTEN (TIMERx_CTL[24] ) is 0, user can read CNT value for getting current 24- bit counter value . + * | | |If EXTCNTEN (TIMERx_CTL[24] ) is 1, user can read CNT value for getting current 24- bit event input counter value. + * @var TIMER_T::CAP + * Offset: 0x10 Timer Capture Data Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[23:0] |CAPDAT |Timer Capture Data Register + * | | |When CAPEN (TIMERx_EXTCTL[3]) bit is set, CAPFUNCS (TIMERx_EXTCTL[4]) bit is 0, and a transition on Tx_EXT pin matched the CAPEDGE (TIMERx_EXTCTL[2:1]) setting, CAPIF (TIMERx_EINTSTS[0]) will set to 1 and the current timer counter value CNT (TIMERx_CNT[23:0]) will be auto-loaded into this CAPDAT field. + * @var TIMER_T::EXTCTL + * Offset: 0x14 Timer External Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |CNTPHASE |Timer External Count Phase + * | | |This bit indicates the detection phase of external counting pin Tx_CNT (x= 0~3). + * | | |0 = A Falling edge of external counting pin will be counted. + * | | |1 = A Rising edge of external counting pin will be counted. + * |[2:1] |CAPEDGE |Timer External Capture Pin Edge Detect + * | | |00 = A Falling edge on Tx_EXT (x= 0~3) pin will be detected. + * | | |01 = A Rising edge on Tx_EXT (x= 0~3) pin will be detected. + * | | |10 = Either Rising or Falling edge on Tx_EXT (x= 0~3) pin will be detected. + * | | |11 = Reserved. + * |[3] |CAPEN |Timer External Capture Pin Enable + * | | |This bit enables the Tx_EXT pin. + * | | |0 =Tx_EXT (x= 0~3) pin Disabled. + * | | |1 =Tx_EXT (x= 0~3) pin Enabled. + * |[4] |CAPFUNCS |Capture Function Selection + * | | |0 = External Capture Mode Enabled. + * | | |1 = External Reset Mode Enabled. + * | | |Note1: When CAPFUNCS is 0, transition on Tx_EXT (x= 0~3) pin is using to save the 24-bit timer counter value. + * | | |Note2: When CAPFUNCS is 1, transition on Tx_EXT (x= 0~3) pin is using to reset the 24-bit timer counter value. + * |[5] |CAPIEN |Timer External Capture Interrupt Enable + * | | |0 = Tx_EXT (x= 0~3) pin detection Interrupt Disabled. + * | | |1 = Tx_EXT (x= 0~3) pin detection Interrupt Enabled. + * | | |Note: CAPIEN is used to enable timer external interrupt. + * | | |If CAPIEN enabled, timer will rise an interrupt when CAPIF (TIMERx_EINTSTS[0]) is 1. + * | | |For example, while CAPIEN = 1, CAPEN = 1, and CAPEDGE = 00, a 1 to 0 transition on the Tx_EXT pin will cause the CAPIF to be set then the interrupt signal is generated and sent to NVIC to inform CPU. + * |[6] |CAPDBEN |Timer External Capture Pin De-Bounce Enable + * | | |0 = Tx_EXT (x= 0~3) pin de-bounce Disabled. + * | | |1 = Tx_EXT (x= 0~3) pin de-bounce Enabled. + * | | |Note: If this bit is enabled, the edge detection of Tx_EXT pin is detected with de-bounce circuit. + * |[7] |CNTDBEN |Timer Counter Pin De-Bounce Enable + * | | |0 = Tx_CNT (x= 0~3) pin de-bounce Disabled. + * | | |1 = Tx_CNT (x= 0~3) pin de-bounce Enabled. + * | | |Note: If this bit is enabled, the edge detection of Tx_CNT pin is detected with de-bounce circuit. + * @var TIMER_T::EINTSTS + * Offset: 0x18 Timer External Interrupt Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |CAPIF |Timer External Capture Interrupt Flag + * | | |This bit indicates the timer external capture interrupt flag status. + * | | |0 = Tx_EXT (x= 0~3) pin interrupt did not occur. + * | | |1 = Tx_EXT (x= 0~3) pin interrupt occurred. + * | | |Note1: This bit is cleared by writing 1 to it. + * | | |Note2: When CAPEN (TIMERx_EXTCTL[3]) bit is set, CAPFUNCS (TIMERx_EXTCTL[4]) bit is 0, and a transition on Tx_EXT (x= 0~3) pin matched the CAPEDGE (TIMERx_EXTCTL[2:1]) setting, this bit will set to 1 by hardware. + * | | |Note3: There is a new incoming capture event detected before CPU clearing the CAPIF status. + * | | |If the above condition occurred, the Timer will keep register TIMERx_CAP unchanged and drop the new capture value. + */ + + __IO uint32_t CTL; /* Offset: 0x00 Timer Control and Status Register */ + __IO uint32_t CMP; /* Offset: 0x04 Timer Compare Register */ + __IO uint32_t INTSTS; /* Offset: 0x08 Timer Interrupt Status Register */ + __I uint32_t CNT; /* Offset: 0x0C Timer Data Register */ + __I uint32_t CAP; /* Offset: 0x10 Timer Capture Data Register */ + __IO uint32_t EXTCTL; /* Offset: 0x14 Timer External Control Register */ + __IO uint32_t EINTSTS; /* Offset: 0x18 Timer External Interrupt Status Register */ + +} TIMER_T; + + + +/** + @addtogroup TMR_CONST TMR Bit Field Definition + Constant Definitions for TMR Controller +@{ */ + +#define TIMER_CTL_PSC_Pos (0) /*!< TIMER_T::CTL: PSC Position */ +#define TIMER_CTL_PSC_Msk (0xfful << TIMER_CTL_PSC_Pos) /*!< TIMER_T::CTL: PSC Mask */ + +#define TIMER_CTL_WKTKEN_Pos (17) /*!< TIMER_T::CTL: WKTKEN Position */ +#define TIMER_CTL_WKTKEN_Msk (0x1ul << TIMER_CTL_WKTKEN_Pos) /*!< TIMER_T::CTL: WKTKEN Mask */ + +#define TIMER_CTL_TRGSSEL_Pos (18) /*!< TIMER_T::CTL: TRGSSEL Position */ +#define TIMER_CTL_TRGSSEL_Msk (0x1ul << TIMER_CTL_TRGSSEL_Pos) /*!< TIMER_T::CTL: TRGSSEL Mask */ + +#define TIMER_CTL_TRGPWM_Pos (19) /*!< TIMER_T::CTL: TRGPWM Position */ +#define TIMER_CTL_TRGPWM_Msk (0x1ul << TIMER_CTL_TRGPWM_Pos) /*!< TIMER_T::CTL: TRGPWM Mask */ + +#define TIMER_CTL_TRGDAC_Pos (20) /*!< TIMER_T::CTL: TRGDAC Position */ +#define TIMER_CTL_TRGDAC_Msk (0x1ul << TIMER_CTL_TRGDAC_Pos) /*!< TIMER_T::CTL: TRGDAC Mask */ + +#define TIMER_CTL_TRGEADC_Pos (21) /*!< TIMER_T::CTL: TRGEADC Position */ +#define TIMER_CTL_TRGEADC_Msk (0x1ul << TIMER_CTL_TRGEADC_Pos) /*!< TIMER_T::CTL: TRGEADC Mask */ + +#define TIMER_CTL_TGLPINSEL_Pos (22) /*!< TIMER_T::CTL: TGLPINSEL Position */ +#define TIMER_CTL_TGLPINSEL_Msk (0x1ul << TIMER_CTL_TGLPINSEL_Pos) /*!< TIMER_T::CTL: TGLPINSEL Mask */ + +#define TIMER_CTL_WKEN_Pos (23) /*!< TIMER_T::CTL: WKEN Position */ +#define TIMER_CTL_WKEN_Msk (0x1ul << TIMER_CTL_WKEN_Pos) /*!< TIMER_T::CTL: WKEN Mask */ + +#define TIMER_CTL_EXTCNTEN_Pos (24) /*!< TIMER_T::CTL: EXTCNTEN Position */ +#define TIMER_CTL_EXTCNTEN_Msk (0x1ul << TIMER_CTL_EXTCNTEN_Pos) /*!< TIMER_T::CTL: EXTCNTEN Mask */ + +#define TIMER_CTL_ACTSTS_Pos (25) /*!< TIMER_T::CTL: ACTSTS Position */ +#define TIMER_CTL_ACTSTS_Msk (0x1ul << TIMER_CTL_ACTSTS_Pos) /*!< TIMER_T::CTL: ACTSTS Mask */ + +#define TIMER_CTL_RSTCNT_Pos (26) /*!< TIMER_T::CTL: RSTCNT Position */ +#define TIMER_CTL_RSTCNT_Msk (0x1ul << TIMER_CTL_RSTCNT_Pos) /*!< TIMER_T::CTL: RSTCNT Mask */ + +#define TIMER_CTL_OPMODE_Pos (27) /*!< TIMER_T::CTL: OPMODE Position */ +#define TIMER_CTL_OPMODE_Msk (0x3ul << TIMER_CTL_OPMODE_Pos) /*!< TIMER_T::CTL: OPMODE Mask */ + +#define TIMER_CTL_INTEN_Pos (29) /*!< TIMER_T::CTL: INTEN Position */ +#define TIMER_CTL_INTEN_Msk (0x1ul << TIMER_CTL_INTEN_Pos) /*!< TIMER_T::CTL: INTEN Mask */ + +#define TIMER_CTL_CNTEN_Pos (30) /*!< TIMER_T::CTL: CNTEN Position */ +#define TIMER_CTL_CNTEN_Msk (0x1ul << TIMER_CTL_CNTEN_Pos) /*!< TIMER_T::CTL: CNTEN Mask */ + +#define TIMER_CTL_ICEDEBUG_Pos (31) /*!< TIMER_T::CTL: ICEDEBUG Position */ +#define TIMER_CTL_ICEDEBUG_Msk (0x1ul << TIMER_CTL_ICEDEBUG_Pos) /*!< TIMER_T::CTL: ICEDEBUG Mask */ + +#define TIMER_CMP_CMPDAT_Pos (0) /*!< TIMER_T::CMP: CMPDAT Position */ +#define TIMER_CMP_CMPDAT_Msk (0xfffffful << TIMER_CMP_CMPDAT_Pos) /*!< TIMER_T::CMP: CMPDAT Mask */ + +#define TIMER_INTSTS_TIF_Pos (0) /*!< TIMER_T::INTSTS: TIF Position */ +#define TIMER_INTSTS_TIF_Msk (0x1ul << TIMER_INTSTS_TIF_Pos) /*!< TIMER_T::INTSTS: TIF Mask */ + +#define TIMER_INTSTS_TWKF_Pos (1) /*!< TIMER_T::INTSTS: TWKF Position */ +#define TIMER_INTSTS_TWKF_Msk (0x1ul << TIMER_INTSTS_TWKF_Pos) /*!< TIMER_T::INTSTS: TWKF Mask */ + +#define TIMER_CNT_CNT_Pos (0) /*!< TIMER_T::CNT: CNT Position */ +#define TIMER_CNT_CNT_Msk (0xfffffful << TIMER_CNT_CNT_Pos) /*!< TIMER_T::CNT: CNT Mask */ + +#define TIMER_CAP_CAPDAT_Pos (0) /*!< TIMER_T::CAP: CAPDAT Position */ +#define TIMER_CAP_CAPDAT_Msk (0xfffffful << TIMER_CAP_CAPDAT_Pos) /*!< TIMER_T::CAP: CAPDAT Mask */ + +#define TIMER_EXTCTL_CNTPHASE_Pos (0) /*!< TIMER_T::EXTCTL: CNTPHASE Position */ +#define TIMER_EXTCTL_CNTPHASE_Msk (0x1ul << TIMER_EXTCTL_CNTPHASE_Pos) /*!< TIMER_T::EXTCTL: CNTPHASE Mask */ + +#define TIMER_EXTCTL_CAPEDGE_Pos (1) /*!< TIMER_T::EXTCTL: CAPEDGE Position */ +#define TIMER_EXTCTL_CAPEDGE_Msk (0x3ul << TIMER_EXTCTL_CAPEDGE_Pos) /*!< TIMER_T::EXTCTL: CAPEDGE Mask */ + +#define TIMER_EXTCTL_CAPEN_Pos (3) /*!< TIMER_T::EXTCTL: CAPEN Position */ +#define TIMER_EXTCTL_CAPEN_Msk (0x1ul << TIMER_EXTCTL_CAPEN_Pos) /*!< TIMER_T::EXTCTL: CAPEN Mask */ + +#define TIMER_EXTCTL_CAPFUNCS_Pos (4) /*!< TIMER_T::EXTCTL: CAPFUNCS Position */ +#define TIMER_EXTCTL_CAPFUNCS_Msk (0x1ul << TIMER_EXTCTL_CAPFUNCS_Pos) /*!< TIMER_T::EXTCTL: CAPFUNCS Mask */ + +#define TIMER_EXTCTL_CAPIEN_Pos (5) /*!< TIMER_T::EXTCTL: CAPIEN Position */ +#define TIMER_EXTCTL_CAPIEN_Msk (0x1ul << TIMER_EXTCTL_CAPIEN_Pos) /*!< TIMER_T::EXTCTL: CAPIEN Mask */ + +#define TIMER_EXTCTL_CAPDBEN_Pos (6) /*!< TIMER_T::EXTCTL: CAPDBEN Position */ +#define TIMER_EXTCTL_CAPDBEN_Msk (0x1ul << TIMER_EXTCTL_CAPDBEN_Pos) /*!< TIMER_T::EXTCTL: CAPDBEN Mask */ + +#define TIMER_EXTCTL_CNTDBEN_Pos (7) /*!< TIMER_T::EXTCTL: CNTDBEN Position */ +#define TIMER_EXTCTL_CNTDBEN_Msk (0x1ul << TIMER_EXTCTL_CNTDBEN_Pos) /*!< TIMER_T::EXTCTL: CNTDBEN Mask */ + +#define TIMER_EINTSTS_CAPIF_Pos (0) /*!< TIMER_T::EINTSTS: CAPIF Position */ +#define TIMER_EINTSTS_CAPIF_Msk (0x1ul << TIMER_EINTSTS_CAPIF_Pos) /*!< TIMER_T::EINTSTS: CAPIF Mask */ + +/**@}*/ /* TIMER_CONST */ +/**@}*/ /* end of TIMER register group */ + + +/*---------------------- Universal Asynchronous Receiver/Transmitter Controller -------------------------*/ +/** + @addtogroup UART Universal Asynchronous Receiver/Transmitter Controller(UART) + Memory Mapped Structure for UART Controller +@{ */ + + +typedef struct +{ + + + + +/** + * @var UART_T::DAT + * Offset: 0x00 UART Receive/Transmit Buffer Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |DAT |Receiving/Transmit Buffer + * | | |Write Operation: + * | | |By writing one byte to this register, the data byte will be stored in transmitter FIFO. + * | | |The UART Controller will send out the data stored in transmitter FIFO top location through the UART_TXD. + * | | |Read Operation: + * | | |By reading this register, the UART will return an 8-bit data received from receiving FIFO. + * @var UART_T::INTEN + * Offset: 0x04 UART Interrupt Enable Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |RDAIEN |Receive Data Available Interrupt Enable Bit + * | | |0 = Receive data available interrupt Disabled. + * | | |1 = Receive data available interrupt Enabled. + * |[1] |THREIEN |Transmit Holding Register Empty Interrupt Enable Bit + * | | |0 = Transmit holding register empty interrupt Disabled. + * | | |1 = Transmit holding register empty interrupt Enabled. + * |[2] |RLSIEN |Receive Line Status Interrupt Enable Bit + * | | |0 = Receive Line Status interrupt Disabled. + * | | |1 = Receive Line Status interrupt Enabled. + * |[3] |MODEMIEN |Modem Status Interrupt Enable Bit + * | | |0 = Modem status interrupt Disabled. + * | | |1 = Modem status interrupt Enabled. + * |[4] |RXTOIEN |RX Time-Out Interrupt Enable Bit + * | | |0 = RX time-out interrupt Disabled. + * | | |1 = RX time-out interrupt Enabled. + * |[5] |BUFERRIEN |Buffer Error Interrupt Enable Bit + * | | |0 = Buffer error interrupt Disabled. + * | | |1 = Buffer error interrupt Enabled. + * |[8] |LINIEN |LIN Bus Interrupt Enable Bit (Not Available In UART2/UART3) + * | | |0 = LIN bus interrupt Disabled. + * | | |1 = LIN bus interrupt Enabled. + * | | |Note: This bit is used for LIN function mode. + * |[9] |WKCTSIEN |nCTS Wake-Up Interrupt Enable Bit + * | | |0 = nCTS wake-up system function Disabled. + * | | |1 = Wake-up system function Enabled, when the system is in Power-down mode, an external nCTS change will wake-up system from Power-down mode. + * |[10] |WKDATIEN |Incoming Data Wake-Up Interrupt Enable Bit + * | | |0 = Incoming data wake-up system function Disabled. + * | | |1 = Incoming data wake-up system function Enabled, when the system is in Power-down mode, incoming data will wake-up system from Power-down mode. + * | | |Note: Hardware will clear this bit when the incoming data wake-up operation finishes and "system clock" work stable + * |[11] |TOCNTEN |Time-Out Counter Enable Bit + * | | |0 = Time-out counter Disabled. + * | | |1 = Time-out counter Enabled. + * |[12] |ATORTSEN |nRTS Auto-Flow Control Enable Bit + * | | |0 = nRTS auto-flow control Disabled. + * | | |1 = nRTS auto-flow control Enabled. + * | | |Note: When nRTS auto-flow is enabled, if the number of bytes in the RX FIFO equals the RTSTRGLV (UART_FIFO[19:16]), the UART will de-assert nRTS signal. + * |[13] |ATOCTSEN |nCTS Auto-Flow Control Enable Bit + * | | |0 = nCTS auto-flow control Disabled. + * | | |1 = nCTS auto-flow control Enabled. + * | | |Note: When nCTS auto-flow is enabled, the UART will send data to external device if nCTS input assert (UART will not send data to device until nCTS is asserted). + * |[14] |TXPDMAEN |TX DMA Enable Bit + * | | |This bit can enable or disable TX DMA service. + * | | |0 = TX DMA Disabled. + * | | |1 = TX DMA Enabled. + * |[15] |RXPDMAEN |RX DMA Enable Bit + * | | |This bit can enable or disable RX DMA service. + * | | |0 = RX DMA Disabled. + * | | |1 = RX DMA Enabled. + * |[18] |ABRIEN |Auto-Baud Rate Interrupt Enable Bit + * | | |0 = Auto-baud rate interrupt Disabled. + * | | |1 = Auto-baud rate interrupt Enabled. + * @var UART_T::FIFO + * Offset: 0x08 UART FIFO Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[1] |RXRST |RX Field Software Reset + * | | |When RXRST (UART_FIFO[1]) is set, all the byte in the receiver FIFO and RX internal state machine are cleared. + * | | |0 = No effect. + * | | |1 = Reset the RX internal state machine and pointers. + * | | |Note: This bit will automatically clear at least 3 UART peripheral clock cycles. + * |[2] |TXRST |TX Field Software Reset + * | | |When TXRST (UART_FIFO[2]) is set, all the byte in the transmit FIFO and TX internal state machine are cleared. + * | | |0 = No effect. + * | | |1 = Reset the TX internal state machine and pointers. + * | | |Note: This bit will automatically clear at least 3 UART peripheral clock cycles. + * |[7:4] |RFITL |RX FIFO Interrupt Trigger Level + * | | |When the number of bytes in the receive FIFO equals the RFITL, the RDAIF will be set (if RDAIEN (UART_INTEN [0]) enabled, and an interrupt will be generated). + * | | |0000 = RX FIFO Interrupt Trigger Level is 1 byte. + * | | |0001 = RX FIFO Interrupt Trigger Level is 4 bytes. + * | | |0010 = RX FIFO Interrupt Trigger Level is 8 bytes. + * | | |0011 = RX FIFO Interrupt Trigger Level is 14 bytes. + * | | |Others = Reserved. + * |[8] |RXOFF |Receiver Disable + * | | |The receiver is disabled or not (set 1 to disable receiver) + * | | |0 = Receiver Enabled. + * | | |1 = Receiver Disabled. + * | | |Note: This bit is used for RS-485 Normal Multi-drop mode. + * | | |It should be programmed before RS485NMM (UART_ALTCTL [8]) is programmed. + * |[19:16] |RTSTRGLV |nRTS Trigger Level For Auto-Flow Control Use + * | | |0000 = nRTS Trigger Level is 1 bytes. + * | | |0001 = nRTS Trigger Level is 4bytes. + * | | |0010 = nRTS Trigger Level is 8 bytes. + * | | |0011 = nRTS Trigger Level is 14 bytes. + * | | |Others = Reserved. + * | | |Note: This field is used for auto nRTS flow control. + * @var UART_T::LINE + * Offset: 0x0C UART Line Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[1:0] |WLS |Word Length Selection + * | | |This field sets UART word length. + * | | |00 = 5 bits. + * | | |01 = 6 bits. + * | | |10 = 7 bits. + * | | |11 = 8 bits. + * |[2] |NSB |Number Of "STOP Bit" + * | | |0 = One "STOP bit" is generated in the transmitted data. + * | | |1 = When select 5-bit word length, 1.5 "STOP bit" is generated in the transmitted data. + * | | |When select 6-, 7- and 8-bit word length, 2 "STOP bit" is generated in the transmitted data. + * |[3] |PBE |Parity Bit Enable Bit + * | | |0 = No parity bit generated Disabled. + * | | |1 = Parity bit generated Enabled. + * | | |Note : Parity bit is generated on each outgoing character and is checked on each incoming data. + * |[4] |EPE |Even Parity Enable Bit + * | | |0 = Odd number of logic 1's is transmitted and checked in each word. + * | | |1 = Even number of logic 1's is transmitted and checked in each word. + * | | |Note:This bit has effect only when PBE (UART_LINE[3]) is set. + * |[5] |SPE |Stick Parity Enable Bit + * | | |0 = Stick parity Disabled. + * | | |1 = Stick parity Enabled. + * | | |Note: If PBE (UART_LINE[3]) and EPE (UART_LINE[4]) are logic 1, the parity bit is transmitted and checked as logic 0. + * | | |If PBE (UART_LINE[3]) is 1 and EPE (UART_LINE[4]) is 0 then the parity bit is transmitted and checked as 1. + * |[6] |BCB |Break Control Bit + * | | |0 = Break Control Disabled. + * | | |1 = Break Control Enabled. + * | | |Note: When this bit is set to logic 1, the serial data output (TX) is forced to the Spacing State (logic 0). + * | | |This bit acts only on TX line and has no effect on the transmitter logic. + * @var UART_T::MODEM + * Offset: 0x10 UART Modem Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[1] |RTS |nRTS (Request-To-Send) Signal Control + * | | |This bit is direct control internal nRTS signal active or not, and then drive the nRTS pin output with RTSACTLV bit configuration. + * | | |0 = nRTS signal is active. + * | | |1 = nRTS signal is inactive. + * | | |Note1: This nRTS signal control bit is not effective when nRTS auto-flow control is enabled in UART function mode. + * | | |Note2: This nRTS signal control bit is not effective when RS-485 auto direction mode (AUD) is enabled in RS-485 function mode. + * |[9] |RTSACTLV |nRTS Pin Active Level + * | | |This bit defines the active level state of nRTS pin output. + * | | |0 =n RTS pin output is high level active. + * | | |1 = nRTS pin output is low level active. (Default) + * | | |Note1: Refer to Figure 6.21-10 and Figure 6.21-11 for UART function mode. + * | | |Note2: Refer to Figure 6.21-21 and Figure 6.21-22 for RS-485 function mode. + * |[13] |RTSSTS |nRTS Pin Status (Read Only) + * | | |This bit mirror from nRTS pin output of voltage logic status. + * | | |0 = nRTS pin output is low level voltage logic state. + * | | |1 = nRTS pin output is high level voltage logic state. + * @var UART_T::MODEMSTS + * Offset: 0x14 UART Modem Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |CTSDETF |Detect nCTS State Change Flag (Read Only) + * | | |This bit is set whenever nCTS input has change state, and it will generate Modem interrupt to CPU when MODEMIEN (UART_INTEN [3]) is set to 1. + * | | |0 = nCTS input has not change state. + * | | |1 = nCTS input has change state. + * | | |Note: This bit is read only, but can be cleared by writing "1" to it. + * |[4] |CTSSTS |nCTS Pin Status (Read Only) + * | | |This bit mirror from nCTS pin input of voltage logic status. + * | | |0 = nCTS pin input is low level voltage logic state. + * | | |1 = nCTS pin input is high level voltage logic state. + * | | |Note: This bit echoes when UART Controller peripheral clock is enabled, and nCTS multi-function port is selected. + * |[8] |CTSACTLV |nCTS Pin Active Level + * | | |This bit defines the active level state of nCTS pin input. + * | | |0 = nCTS pin input is high level active. + * | | |1 = nCTS pin input is low level active. (Default) + * @var UART_T::FIFOSTS + * Offset: 0x18 UART FIFO Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |RXOVIF |RX Overflow Error Interrupt Flag (Read Only) + * | | |This bit is set when RX FIFO overflow. + * | | |If the number of bytes of received data is greater than RX_FIFO (UART_DAT) size, 16 bytes this bit will be set. + * | | |0 = RX FIFO is not overflow. + * | | |1 = RX FIFO is overflow. + * | | |Note: This bit is read only, but can be cleared by writing "1" to it. + * |[1] |ABRDIF |Auto-Baud Rate Detect Interrupt (Read Only) + * | | |0 = Auto-baud rate detect function is not finished. + * | | |1 = Auto-baud rate detect function is finished. + * | | |This bit is set to logic "1" when auto-baud rate detect function is finished. + * | | |Note: This bit is read only, but can be cleared by writing "1" to it. + * |[2] |ABRDTOIF |Auto-Baud Rate Time-Out Interrupt (Read Only) + * | | |0 = Auto-baud rate counter is underflow. + * | | |1 = Auto-baud rate counter is overflow. + * | | |Note1: This bit is set to logic "1" in Auto-baud Rate Detect mode and the baud rate counter is overflow. + * | | |Note2: This bit is read only, but can be cleared by writing "1" to it. + * |[3] |ADDRDETF |RS-485 Address Byte Detect Flag (Read Only) + * | | |0 = Receiver detects a data that is not an address bit (bit 9 ='0'). + * | | |1 = Receiver detects a data that is an address bit (bit 9 ='1'). + * | | |Note1: This field is used for RS-485 function mode and ADDRDEN (UART_ALTCTL[15]) is set to 1 to enable Address detection mode . + * | | |Note2: This bit is read only, but can be cleared by writing '1' to it. + * |[4] |PEF |Parity Error Flag (Read Only) + * | | |This bit is set to logic 1 whenever the received character does not have a valid "parity bit". + * | | |0 = No parity error is generated. + * | | |1 = Parity error is generated. + * | | |Note: This bit is read only, but can be cleared by writing '1' to it. + * |[5] |FEF |Framing Error Flag (Read Only) + * | | |This bit is set to logic 1 whenever the received character does not have a valid "stop bit" (that is, the stop bit following the last data bit or parity bit is detected as logic 0). + * | | |0 = No framing error is generated. + * | | |1 = Framing error is generated. + * | | |Note: This bit is read only, but can be cleared by writing '1' to it. + * |[6] |BIF |Break Interrupt Flag (Read Only) + * | | |This bit is set to logic 1 whenever the received data input (RX) is held in the "spacing state" (logic 0) for longer than a full word transmission time (that is, the total time of "start bit" + data bits + parity + stop bits). + * | | |0 = No Break interrupt is generated. + * | | |1 = Break interrupt is generated. + * | | |Note: This bit is read only, but can be cleared by writing '1' to it. + * |[13:8] |RXPTR |RX FIFO Pointer (Read Only) + * | | |This field indicates the RX FIFO Buffer Pointer. + * | | |When UART receives one byte from external device, RXPTR increases one. + * | | |When one byte of RX FIFO is read by CPU, RXPTR decreases one. + * | | |The Maximum value shown in RXPTR is 15. + * | | |When the using level of RX FIFO Buffer equal to 16, the RXFULL bit is set to 1 and RXPTR will show 0. + * | | |As one byte of RX FIFO is read by CPU, the RXFULL bit is cleared to 0 and RXPTR will show 15. + * |[14] |RXEMPTY |Receiver FIFO Empty (Read Only) + * | | |This bit initiate RX FIFO empty or not. + * | | |0 = RX FIFO is not empty. + * | | |1 = RX FIFO is empty. + * | | |Note: When the last byte of RX FIFO has been read by CPU, hardware sets this bit high. + * | | |It will be cleared when UART receives any new data. + * |[15] |RXFULL |Receiver FIFO Full (Read Only) + * | | |This bit initiates RX FIFO full or not. + * | | |0 = RX FIFO is not full. + * | | |1 = RX FIFO is full. + * | | |Note: This bit is set when the number of usage in RX FIFO Buffer is equal to 16, otherwise is cleared by hardware. + * |[21:16] |TXPTR |TX FIFO Pointer (Read Only) + * | | |This field indicates the TX FIFO Buffer Pointer. + * | | |When CPU writes one byte into UART_DAT, TXPTR increases one. + * | | |When one byte of TX FIFO is transferred to Transmitter Shift Register, TXPTR decreases one. + * | | |The Maximum value shown in TXPTR is 15. + * | | |When the using level of TX FIFO Buffer equal to 16, the TXFULL bit is set to 1 and TXPTR will show 0. + * | | |As one byte of TX FIFO is transferred to Transmitter Shift Register, the TXFULL bit is cleared to 0 and TXPTR will show 15. + * |[22] |TXEMPTY |Transmitter FIFO Empty (Read Only) + * | | |This bit indicates TX FIFO empty or not. + * | | |0 = TX FIFO is not empty. + * | | |1 = TX FIFO is empty. + * | | |Note: When the last byte of TX FIFO has been transferred to Transmitter Shift Register, hardware sets this bit high. + * | | |It will be cleared when writing data into DAT (TX FIFO not empty). + * |[23] |TXFULL |Transmitter FIFO Full (Read Only) + * | | |This bit indicates TX FIFO full or not. + * | | |0 = TX FIFO is not full. + * | | |1 = TX FIFO is full. + * | | |Note: This bit is set when the number of usage in TX FIFO Buffer is equal to 16, otherwise is cleared by hardware. + * |[24] |TXOVIF |TX Overflow Error Interrupt Flag (Read Only) + * | | |If TX FIFO (UART_DAT) is full, an additional write to UART_DAT will cause this bit to logic 1. + * | | |0 = TX FIFO is not overflow. + * | | |1 = TX FIFO is overflow. + * | | |Note: This bit is read only, but can be cleared by writing "1" to it. + * |[28] |TXEMPTYF |Transmitter Empty Flag (Read Only) + * | | |This bit is set by hardware when TX FIFO (UART_DAT) is empty and the STOP bit of the last byte has been transmitted. + * | | |0 = TX FIFO is not empty. + * | | |1 = TX FIFO is empty. + * | | |Note: This bit is cleared automatically when TX FIFO is not empty or the last byte transmission has not completed. + * @var UART_T::INTSTS + * Offset: 0x1C UART Interrupt Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |RDAIF |Receive Data Available Interrupt Flag (Read Only) + * | | |When the number of bytes in the RX FIFO equals the RFITL then the RDAIF(UART_INTSTS[0]) will be set. + * | | |If RDAIEN (UART_INTEN [0]) is enabled, the RDA interrupt will be generated. + * | | |0 = No RDA interrupt flag is generated. + * | | |1 = RDA interrupt flag is generated. + * | | |Note: This bit is read only and it will be cleared when the number of unread bytes of RX FIFO drops below the threshold level (RFITL(UART_FIFO[7:4])). + * |[1] |THREIF |Transmit Holding Register Empty Interrupt Flag (Read Only) + * | | |This bit is set when the last data of TX FIFO is transferred to Transmitter Shift Register. + * | | |If THREIEN (UART_INTEN[1]) is enabled, the THRE interrupt will be generated. + * | | |0 = No THRE interrupt flag is generated. + * | | |1 = THRE interrupt flag is generated. + * | | |Note: This bit is read only and it will be cleared when writing data into UART_DAT (TX FIFO not empty). + * |[2] |RLSIF |Receive Line Interrupt Flag (Read Only) + * | | |This bit is set when the RX receive data have parity error, frame error or break error (at least one of 3 bits, BIF(UART_FIFOSTS[6]), FEF(UART_FIFOSTS[5]) and PEF(UART_FIFOSTS[4]), is set). + * | | |If RLSIEN (UART_INTEN [2]) is enabled, the RLS interrupt will be generated. + * | | |0 = No RLS interrupt flag is generated. + * | | |1 = RLS interrupt flag is generated. + * | | |Note1: In RS-485 function mode, this field is set include receiver detect and received address byte character (bit9 = '1') bit. + * | | |At the same time, the bit of ADDRDETF (UART_FIFOSTS[3]) is also set. + * | | |Note2: This bit is read only and reset to 0 when all bits of BIF (UART_FIFOSTS[6]), FEF(UART_FIFOSTS[5]) and PEF(UART_FIFOSTS[4]) are cleared. + * | | |Note3: In RS-485 function mode, this bit is read only and reset to 0 when all bits of BIF (UART_FIFOSTS[6]) , FEF(UART_FIFOSTS[5]) and PEF(UART_FIFOSTS[4]) and ADDRDETF (UART_FIFOSTS[3]) are cleared. + * |[3] |MODEMIF |MODEM Interrupt Flag (Read Only) Channel This bit is set when the nCTS pin has state change (CTSDETF (UART_MODEMSTS[0]) = 1). If MODEMIEN (UART_INTEN [3]) is enabled, the Modem interrupt will be generated. + * | | |0 = No Modem interrupt flag is generated. + * | | |1 = Modem interrupt flag is generated. + * | | |Note: This bit is read only and reset to 0 when bit CTSDETF is cleared by a write 1 on CTSDETF(UART_MODEMSTS[0]). + * |[4] |RXTOIF |Time-Out Interrupt Flag (Read Only) + * | | |This bit is set when the RX FIFO is not empty and no activities occurred in the RX FIFO and the time-out counter equal to TOIC. + * | | |If TOUTIEN (UART_INTEN [4]) is enabled, the Tout interrupt will be generated. + * | | |0 = No Time-out interrupt flag is generated. + * | | |1 = Time-out interrupt flag is generated. + * | | |Note: This bit is read only and user can read UART_DAT (RX is in active) to clear it. + * |[5] |BUFERRIF |Buffer Error Interrupt Flag (Read Only) + * | | |This bit is set when the TX FIFO or RX FIFO overflows (TXOVIF (UART_FIFOSTS[24]) or RXOVIF (UART_FIFOSTS[0]) is set). + * | | |When BERRIF (UART_INTSTS[5])is set, the transfer is not correct. + * | | |If BFERRIEN (UART_INTEN [8]) is enabled, the buffer error interrupt will be generated. + * | | |0 = No buffer error interrupt flag is generated. + * | | |1 = Buffer error interrupt flag is generated. + * | | |Note: This bit is read only. + * | | |This bit is cleared if both of RXOVIF(UART_FIFOSTS[0]) and TXOVIF(UART_FIFOSTS[24]) are cleared to 0 by writing 1 to RXOVIF(UART_FIFOSTS[0]) and TXOVIF(UART_FIFOSTS[24]). + * |[6] |WKIF |UART Wake-up Interrupt Flag (Read Only) + * | | |This bit is set when DATWKIF (UART_INTSTS[17]) or CTSWKIF(UART_INTSTS[16]) is set to 1. + * | | |0 = No DATWKIF and CTSWKIF are generated. + * | | |1 = DATWKIF or CTSWKIF. + * | | |Note: This bit is read only. + * | | |This bit is cleared if both of DATWKIF (UART_INTSTS[17]) and CTSWKIF(UART_INTSTS[16]) are cleared to 0 by writing 1 to DATWKIF (UART_INTSTS[17]) and CTSWKIF (UART_INTSTS[17]). + * |[7] |LINIF |LIN Bus Interrupt Flag (Read Only) (Not Available in UART2/UART3 Channel) + * | | |This bit is set when LIN slave header detect (SLVHDETF (UART_LINSTS[0] =1)), LIN break detect (BRKDETF(UART_LINSTS[9])=1), bit error detect (BITEF(UART_LINSTS[9])=1), LIN slave ID parity error (SLVIDPEF(UART_LINSTS[2]) = 1) or LIN slave header error detect (SLVHEF (UART_LINSTS[1])). + * | | |If LIN_ IEN (UART_INTEN [8]) is enabled the LIN interrupt will be generated. + * | | |0 = None of SLVHDETF, BRKDETF, BITEF, SLVIDPEF and SLVHEF is generated. + * | | |1 = At least one of SLVHDETF, BRKDETF, BITEF, SLVIDPEF and SLVHEF is generated. + * | | |Note: This bit is read only. + * | | |This bit is cleared when SLVHDETF(UART_LINSTS[0]), BRKDETF(UART_LINSTS[8]), BITEF(UART_LINSTS[9]), SLVIDPEF (UART_LINSTS[2]), SLVHEF(UART_LINSTS[1]) and SLVSYNCF(UART_LINSTS[3]) all are cleared. + * |[8] |RDAINT |Receive Data Available Interrupt Indicator (Read Only) + * | | |This bit is set if RDAIEN (UART_INTEN[0]) and RDAIF (UART_INTSTS[0]) are both set to 1. + * | | |0 = No RDA interrupt is generated. + * | | |1 = RDA interrupt is generated. + * |[9] |THREINT |Transmit Holding Register Empty Interrupt Indicator (Read Only) + * | | |This bit is set if THREIEN (UART_INTEN[1])and THREIF(UART_INTSTS[1]) are both set to 1. + * | | |0 = No DATE interrupt is generated. + * | | |1 = DATE interrupt is generated. + * |[10] |RLSINT |Receive Line Status Interrupt Indicator (Read Only) + * | | |This bit is set if RLSIEN (UART_INTEN[2]) and RLSIF(UART_INTSTS[2]) are both set to 1. + * | | |0 = No RLS interrupt is generated. + * | | |1 = RLS interrupt is generated. + * |[11] |MODEMINT |MODEM Status Interrupt Indicator (Read Only) + * | | |This bit is set if MODEMIEN(UART_INTEN[3]) and MODEMIF(UART_INTSTS[4]) are both set to 1 + * | | |0 = No Modem interrupt is generated. + * | | |1 = Modem interrupt is generated. + * |[12] |RXTOINT |Time-Out Interrupt Indicator (Read Only) + * | | |This bit is set if TOUTIEN(UART_INTEN[4]) and RXTOIF(UART_INTSTS[4]) are both set to 1. + * | | |0 = No Tout interrupt is generated. + * | | |1 = Tout interrupt is generated. + * |[13] |BUFERRINT |Buffer Error Interrupt Indicator (Read Only) + * | | |This bit is set if BFERRIEN(UART_INTEN[5]) and BERRIF(UART_INTSTS[5]) are both set to 1. + * | | |0 = No buffer error interrupt is generated. + * | | |1 = Buffer error interrupt is generated. + * |[15] |LININT |LIN Bus Interrupt Indicator (Read Only)(Not Available in UART2/UART3 Channel) + * | | |This bit is set if LINIEN (UART_INTEN[8]) and LIN IF(UART_INTSTS[7]) are both set to 1. + * | | |0 = No LIN Bus interrupt is generated. + * | | |1 = The LIN Bus interrupt is generated. + * |[16] |CTSWKIF |nCTS Wake-Up Interrupt Flag (Read Only) + * | | |0 = Chip stays in power-down state. + * | | |1 = Chip wake-up from power-down state by nCTS wake-up. + * | | |Note1: If WKCTSIEN (UART_INTEN[9])is enabled, the wake-up interrupt is generated. + * | | |Note2: This bit is read only, but can be cleared by writing '1' to it. + * |[17] |DATWKIF |Data Wake-Up Interrupt Flag (Read Only) + * | | |This bit is set if chip wake-up from power-down state by data wake-up. + * | | |0 = Chip stays in power-down state. + * | | |1 = Chip wake-up from power-down state by data wake-up. + * | | |Note1: If WKDATIEN (UART_INTEN[10]) is enabled, the wake-up interrupt is generated. + * | | |Note2: This bit is read only, but can be cleared by writing '1' to it. + * |[18] |HWRLSIF |In DMA Mode, Receive Line Status Flag (Read Only) + * | | |This bit is set when the RX receive data have parity error, frame error or break error (at least one of 3 bits, BIF (UART_FIFOSTS[6]), FEF (UART_FIFOSTS[5]) and PEF (UART_FIFOSTS[4]) is set). + * | | |If RLSIEN (UART_INTEN [2]) is enabled, the RLS interrupt will be generated. + * | | |0 = No RLS interrupt flag is generated. + * | | |1 = RLS interrupt flag is generated. + * | | |Note1: In RS-485 function mode, this field include receiver detect any address byte received address byte character (bit9 = '1') bit. + * | | |Note2: In UART function mode, this bit is read only and reset to 0 when all bits of BIF(UART_FIFOSTS[6]) , FEF(UART_FIFOSTS[5]) and PEF(UART_FIFOSTS[4]) are cleared. + * | | |Note3: In RS-485 function mode, this bit is read only and reset to 0 when all bits of BIF(UART_FIFOSTS[6]) , FEF(UART_FIFOSTS[5]) and PEF(UART_FIFOSTS[4]) and ADDRDETF (UART_FIFOSTS[3]) are cleared + * |[19] |HWMODIF |In DMA Mode, MODEM Interrupt Flag (Read Only) + * | | |This bit is set when the nCTS pin has state change (CTSDETF (UART_CTSDETF[0] =1)). + * | | |If MODEMIEN (UART_INTEN [3]) is enabled, the Modem interrupt will be generated. + * | | |0 = No Modem interrupt flag is generated. + * | | |1 = Modem interrupt flag is generated. + * | | |Note: This bit is read only and reset to 0 when the bit UART_CTSDETF (US_MSR[0]) is cleared by writing 1 on CTSDETF (UART_CTSDETF [0]). + * |[20] |HWTOIF |In DMA Mode, Time-Out Interrupt Flag (Read Only) + * | | |This bit is set when the RX FIFO is not empty and no activities occurred in the RX FIFO and the time-out counter equal to TOIC (UART_TOUT[7:0]). + * | | |If TOUTIEN (UART_INTEN [4]) is enabled, the Tout interrupt will be generated. + * | | |0 = No Time-out interrupt flag is generated. + * | | |1 = Time-out interrupt flag is generated. + * | | |Note: This bit is read only and user can read UART_DAT (RX is in active) to clear it. + * |[21] |HWBUFEIF |In DMA Mode, Buffer Error Interrupt Flag (Read Only) + * | | |This bit is set when the TX or RX FIFO overflows (TXOVIF (UART_FIFOSTS [24]) or RXOVIF (UART_FIFOSTS[0]) is set). + * | | |When BERRIF (UART_INTSTS[5]) is set, the transfer maybe is not correct. + * | | |If BFERRIEN (UART_INTEN [5]) is enabled, the buffer error interrupt will be generated. + * | | |0 = No buffer error interrupt flag is generated. + * | | |1 = Buffer error interrupt flag is generated. + * | | |Note: This bit is cleared when both TXOVIF (UART_FIFOSTS[24]]) and RXOVIF (UART_FIFOSTS[0]) are cleared. + * |[26] |HWRLSINT |In DMA Mode, Receive Line Status Interrupt Indicator (Read Only) + * | | |This bit is set if RLSIEN (UART_INTEN[2])and HWRLSIF(UART_INTSTS[18]) are both set to 1. + * | | |0 = No RLS interrupt is generated in DMA mode. + * | | |1 = RLS interrupt is generated in DMA mode. + * |[27] |HWMODINT |In DMA Mode, MODEM Status Interrupt Indicator (Read Only) + * | | |This bit is set if MODEMIEN(UART_INTEN[3]) and HWMODIF(UART_INTSTS[3]) are both set to 1. + * | | |0 = No Modem interrupt is generated in DMA mode. + * | | |1 = Modem interrupt is generated in DMA mode. + * |[28] |HWTOINT |In DMA Mode, Time-Out Interrupt Indicator (Read Only) + * | | |This bit is set if TOUTIEN (UART_INTEN[4])and HWTOIF(UART_INTSTS[20]) are both set to 1. + * | | |0 = No Tout interrupt is generated in DMA mode. + * | | |1 = Tout interrupt is generated in DMA mode. + * |[29] |HWBUFEINT |In DMA Mode, Buffer Error Interrupt Indicator (Read Only) + * | | |This bit is set if BFERRIEN (UART_INTEN[5]) and HWBEIF (UART_INTSTS[5])are both set to 1. + * | | |0 = No buffer error interrupt is generated in DMA mode. + * | | |1 = Buffer error interrupt is generated in DMA mode. + * @var UART_T::TOUT + * Offset: 0x20 UART Time-out Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |TOIC |Time-Out Interrupt Comparator + * | | |The time-out counter resets and starts counting (the counting clock = baud rate) whenever the RX FIFO receives a new data word. + * | | |Once the content of time-out counter is equal to that of time-out interrupt comparator (TOIC (UART_TOUT[7:0])), a receiver time-out interrupt (RXTOINT(UART_INTSTS[12])) is generated if RXTOIEN (UART_INTEN [4]) enabled. + * | | |A new incoming data word or RX FIFO empty will clear RXTOINT(UART_INTSTS[12]). + * | | |In order to avoid receiver time-out interrupt generation immediately during one character is being received, TOIC value should be set between 40 and 255. + * | | |So, for example, if TOIC is set with 40, the time-out interrupt is generated after four characters are not received when 1 stop bit and no parity check is set for UART transfer. + * |[15:8] |DLY |TX Delay Time Value + * | | |This field is used to programming the transfer delay time between the last stop bit and next start bit. + * | | |The unit is bit time. + * @var UART_T::BAUD + * Offset: 0x24 UART Baud Rate Divisor Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |BRD |Baud Rate Divider + * | | |The field indicates the baud rate divider. + * | | |This filed is used in baud rate calculation. + * | | |The detail description is shown in Table 6.21-2. + * |[27:24] |EDIVM1 |Extra Divider For BAUD Rate Mode 1 + * | | |This field is used for baud rate calculation in mode 1 and has no effect for baud rate calculation in mode 0 and mode 2. + * | | |The detail description is shown in Table 6.21-2. + * |[28] |BAUDM0 |BAUD Rate Mode Selection Bit 0 + * | | |This bit is baud rate mode selection bit 0. + * | | |UART provides three baud rate calculation modes. + * | | |This bit combines with BAUDM1 (UART_BAUD[29]) to select baud rate calculation mode. + * | | |The detail description is shown in Table 6.21-2. + * |[29] |BAUDM1 |BAUD Rate Mode Selection Bit 1 + * | | |This bit is baud rate mode selection bit 1. + * | | |UART provides three baud rate calculation modes. + * | | |This bit combines with BAUDM0 (UART_BAUD[28]) to select baud rate calculation mode. + * | | |The detail description is shown in Table 6.21-2. + * | | |Note: In IrDA mode must be operated in mode 0. + * @var UART_T::IRDA + * Offset: 0x28 UART IrDA Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[1] |TXEN |IrDA Receiver/Transmitter Selection Enable Bit + * | | |0 = IrDA Transmitter Disabled and Receiver Enabled. (Default) + * | | |1 = IrDA Transmitter Enabled and Receiver Disabled. + * | | |Note: In IrDA function mode (FUNCSEL(UART_FUNCSEL[1:0])=10), the first received data is unreliable and it should be skipped if IrDA receiver is enabled (TXEN(UART_IRDA[1])=0) at the first time. + * |[5] |TXINV |IrDA Inverse Transmitting Output Signal + * | | |0 = None inverse transmitting signal. (Default) + * | | |1 = Inverse transmitting output signal. + * |[6] |RXINV |IrDA Inverse Receive Input Signal + * | | |0 = None inverse receiving input signal. + * | | |1 = Inverse receiving input signal. (Default) + * @var UART_T::ALTCTL + * Offset: 0x2C UART Alternate Control/Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[3:0] |BRKFL |UART LIN Break Field Length (Only Available In UART0/UART1 Channel) + * | | |This field indicates a 4-bit LIN TX break field count. + * | | |Note1: This break field length is BRKFL + 1 + * | | |Note2: According to LIN spec, the reset value is 0xC (break field length = 13). + * |[6] |LINRXEN |LIN RX Enable Bit (Only Available In UART0/UART1 Channel) + * | | |0 = LIN RX mode Disabled. + * | | |1 = LIN RX mode Enabled. + * |[7] |LINTXEN |LIN TX Break Mode Enable Bit (Only Available In UART0/UART1 Channel) + * | | |0 = LIN TX Break mode Disabled. + * | | |1 = LIN TX Break mode Enabled. + * | | |Note: When TX break field transfer operation finished, this bit will be cleared automatically. + * |[8] |RS485NMM |RS-485 Normal Multi-Drop Operation Mode (NMM) + * | | |0 = RS-485 Normal Multi-drop Operation mode (NMM) Disabled. + * | | |1 = RS-485 Normal Multi-drop Operation mode (NMM) Enabled. + * | | |Note: It cannot be active with RS-485_AAD operation mode. + * |[9] |RS485AAD |RS-485 Auto Address Detection Operation Mode (AAD) + * | | |0 = RS-485 Auto Address Detection Operation mode (AAD) Disabled. + * | | |1 = RS-485 Auto Address Detection Operation mode (AAD) Enabled. + * | | |Note: It cannot be active with RS-485_NMM operation mode. + * |[10] |RS485AUD |RS-485 Auto Direction Function (AUD) + * | | |0 = RS-485 Auto Direction Operation function (AUD) Disabled. + * | | |1 = RS-485 Auto Direction Operation function (AUD) Enabled. + * | | |Note: It can be active with RS-485_AAD or RS-485_NMM operation mode. + * |[15] |ADDRDEN |RS-485 Address Detection Enable Bit + * | | |This bit is used to enable RS-485 Address Detection mode. + * | | |0 = Address detection mode Disabled. + * | | |1 = Address detection mode Enabled. + * | | |Note: This bit is used for RS-485 any operation mode. + * |[17] |ABRIF |Auto-Baud Rate Interrupt Flag (Read Only) + * | | |This bit is set when auto-baud rate detection function finished or the auto-baud rate counter was overflow and if ABRIEN(UART_INTEN [18]) is set then the auto-baud rate interrupt will be generated. + * | | |Note: This bit is read only, but it can be cleared by writing "1" to ABRDTOIF (UART_FIFOSTS[2]) and ABRDIF(UART_FIFOSTS[1]) + * |[18] |ABRDEN |Auto-Baud Rate Detect Enable Bit + * | | |0 = Auto-baud rate detect function Disabled. + * | | |1 = Auto-baud rate detect function Enabled. + * | | |This bit is cleared automatically after auto-baud detection is finished. + * |[20:19] |ABRDBITS |Auto-Baud Rate Detect Bit Length + * | | |00 = 1-bit time from Start bit to the 1st rising edge. The input pattern shall be 0x01. + * | | |01 = 2-bit time from Start bit to the 1st rising edge. The input pattern shall be 0x02. + * | | |10 = 4-bit time from Start bit to the 1st rising edge. The input pattern shall be 0x08. + * | | |11 = 8-bit time from Start bit to the 1st rising edge. The input pattern shall be 0x80. + * | | |Note : The calculation of bit number includes the START bit. + * |[31:24] |ADDRMV |Address Match Value + * | | |This field contains the RS-485 address match values. + * | | |Note: This field is used for RS-485 auto address detection mode. + * @var UART_T::FUNCSEL + * Offset: 0x30 UART Function Select Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[1:0] |FUNCSEL |Function Select + * | | |00 = UART function. + * | | |01 = LIN function (Only Available in UART0/UART1 Channel). + * | | |10 = IrDA function. + * | | |11 = RS-485 function. + * | | |Note: In IrDA function mode (FUNCSEL(UART_FUNCSEL[1:0])=10), the first received data is unreliable and it should be skipped if IrDA receiver is enabled (TXEN(UART_IRDA[1])=0) at the first time. + * @var UART_T::LINCTL + * Offset: 0x34 UART LIN Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |SLVEN |LIN Slave Mode Enable Bit + * | | |0 = LIN slave mode Disabled. + * | | |1 = LIN slave mode Enabled. + * |[1] |SLVHDEN |LIN Slave Header Detection Enable Bit + * | | |0 = LIN slave header detection Disabled. + * | | |1 = LIN slave header detection Enabled. + * | | |Note1: This bit only valid when in LIN slave mode (SLVEN (UART_LINCTL[0]) = 1). + * | | |Note2: In LIN function mode, when detect header field (break + sync + frame ID), SLVHDETF (UART_LINSTS [0]) flag will be asserted. + * | | |If the LINIEN (UART_INTEN[8]) = 1, an interrupt will be generated. + * |[2] |SLVAREN |LIN Slave Automatic Resynchronization Mode Enable Bit + * | | |0 = LIN automatic resynchronization Disabled. + * | | |1 = LIN automatic resynchronization Enabled. + * | | |Note1: This bit only valid when in LIN slave mode (SLVEN (UART_LINCTL[0]) = 1). + * | | |Note2: When operation in Automatic Resynchronization mode, the baud rate setting must be mode2 (BAUDM1 (UART_BAUD [29]) and BAUDM0 (UART_BAUD [28]) must be 1). + * | | |Note3: The control and interactions of this field are explained in 6.21.5.9(Slave mode with automatic resynchronization). + * |[3] |SLVDUEN |LIN Slave Divider Update Method Enable Bit + * | | |0 = UART_BAUD updated is written by software (if no automatic resynchronization update occurs at the same time). + * | | |1 = UART_BAUD is updated at the next received character. + * | | |User must set the bit before checksum reception. + * | | |Note1: This bit only valid when in LIN slave mode (SLVEN (UART_LINCTL[0]) = 1). + * | | |Note2: This bit used for LIN Slave Automatic Resynchronization mode. + * | | |(for Non-Automatic Resynchronization mode, this bit should be kept cleared). + * | | |Note3: The control and interactions of this field are explained in 6.21.5.9 (Slave mode with automatic resynchronization). + * |[4] |MUTE |LIN Mute Mode Enable Bit + * | | |0 = LIN mute mode Disabled. + * | | |1 = LIN mute mode Enabled. + * | | |Note: The exit from mute mode condition and each control and interactions of this field are explained in 6.21.5.9 (LIN slave mode). + * |[8] |SENDH |LIN TX Send Header Enable Bit + * | | |The LIN TX header can be "break field" or "break and sync field" or "break, sync and frame ID field", it is depend on setting HSEL (UART_LINCTL[23:22]). + * | | |0 = Send LIN TX header Disabled. + * | | |1 = Send LIN TX header Enabled. + * | | |Note1: These registers are shadow registers of SENDH (UART_ALTCTL [7]); user can read/write it by setting SENDH (UART_ALTCTL [7]) or SENDH (UART_LINCTL [8]). + * | | |Note2: When transmitter header field (it may be "break" or "break + sync" or "break + sync + frame ID" selected by HSEL (UART_LINCTL[23:22]) field) transfer operation finished, this bit will be cleared automatically. + * |[9] |IDPEN |LIN ID Parity Enable Bit + * | | |0 = LIN frame ID parity Disabled. + * | | |1 = LIN frame ID parity Enabled. + * | | |Note1: This bit can be used for LIN master to sending header field (SENDH (UART_LINCTL[8]) = 1 and HSEL (UART_LINCTL[23:22]) = 10) or be used for enable LIN slave received frame ID parity checked. + * | | |Note2: This bit is only use when the operation header transmitter is in HSEL (UART_LINCTL[23:22]) = 10 + * |[10] |BRKDETEN |LIN Break Detection Enable Bit + * | | |When detect consecutive dominant greater than 11 bits, and are followed by a delimiter character, the BRKDETF (UART_LINSTS[8]) flag is set in UART_LINSTS register at the end of break field. + * | | |If the LINIEN (UART_INTEN [8])=1, an interrupt will be generated. + * | | |0 = LIN break detection Disabled . + * | | |1 = LIN break detection Enabled. + * |[11] |RXOFF |LIN Receiver Disable Bit + * | | |If the receiver is enabled (RXOFF (UART_LINCTL[11] ) = 0), + * | | |all received byte data will be accepted and stored in the RX-FIFO, + * | | |and if the receiver is disabled (RXOFF (UART_LINCTL[11]) = 1), all received byte data will be ignore. + * | | |0 = LIN receiver Enabled. + * | | |1 = LIN receiver Disabled. + * | | |Note: This bit is only valid when operating in LIN function mode (FUNCSEL (UART_FUNCSEL[1:0]) = 01). + * |[12] |BITERREN |Bit Error Detect Enable Bit + * | | |0 = Bit error detection function Disabled. + * | | |1 = Bit error detection Enabled. + * | | |Note: In LIN function mode, when occur bit error, the BITEF (UART_LINSTS[9]) flag will be asserted. + * | | |If the LINIEN (UART_INTEN[8]) = 1, an interrupt will be generated. + * |[19:16] |BRKFL |LIN Break Field Length + * | | |This field indicates a 4-bit LIN TX break field count. + * | | |Note1: These registers are shadow registers of BRKFL, User can read/write it by setting BRKFL (UART_ALTCTL[3:0]) or BRKFL (UART_LINCTL[19:16]). + * | | |Note2: This break field length is BRKFL + 1. + * | | |Note3: According to LIN spec, the reset value is 12 (break field length = 13). + * |[21:20] |BSL |LIN Break/Sync Delimiter Length + * | | |00 = The LIN break/sync delimiter length is 1-bit time. + * | | |01 = The LIN break/sync delimiter length is 2-bit time. + * | | |10 = The LIN break/sync delimiter length is 3-bit time. + * | | |11 = The LIN break/sync delimiter length is 4-bit time. + * | | |Note: This bit used for LIN master to sending header field. + * |[23:22] |HSEL |LIN Header Select + * | | |00 = The LIN header includes "break field". + * | | |01 = The LIN header includes "break field" and "sync field". + * | | |10 = The LIN header includes "break field", "sync field" and "frame ID field". + * | | |11 = Reserved. + * | | |Note: This bit is used to master mode for LIN to send header field (SENDH (UART_LINCTL [8]) = 1) or used to slave to indicates exit from mute mode condition (MUTE (UART_LINCTL[4]) = 1). + * |[31:24] |PID |LIN PID Bits + * | | |This field contains the LIN frame ID value when in LIN function mode, the frame ID parity can be generated by software or hardware depends on IDPEN (UART_LINCTL[9]) = 1. + * | | |If the parity generated by hardware, user fill ID0~ID5, (PID [29:24] )hardware will calculate P0 (PID[30]) and P1 (PID[31]), otherwise user must filled frame ID and parity in this field. + * | | |Note1: User can fill any 8-bit value to this field and the bit 24 indicates ID0 (LSB first). + * | | |Note2: This field can be used for LIN master mode or slave mode. + * @var UART_T::LINSTS + * Offset: 0x38 UART LIN Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |SLVHDETF |LIN Slave Header Detection Flag (Read Only) + * | | |This bit is set by hardware when a LIN header is detected in LIN slave mode and be cleared by writing 1 to it. + * | | |0 = LIN header not detected. + * | | |1 = LIN header detected (break + sync + frame ID). + * | | |Note1: This bit is read only, but it can be cleared by writing 1 to it. + * | | |Note2: This bit is only valid when in LIN slave mode (SLVEN (UART_LINCTL [0]) = 1) and enable LIN slave header detection function (SLVHDEN (UART_LINCTL [1])). + * | | |Note3: When enable ID parity check IDPEN (UART_LINCTL [9]), if hardware detect complete header ("break + sync + frame ID"), the SLVHDETF will be set whether the frame ID correct or not. + * |[1] |SLVHEF |LIN Slave Header Error Flag (Read Only) + * | | |This bit is set by hardware when a LIN header error is detected in LIN slave mode and be cleared by writing 1 to it. + * | | |The header errors include "break delimiter is too short (less than 0.5 bit time)", "frame error in sync field or Identifier field", "sync field data is not 0x55 in Non-Automatic Resynchronization mode", "sync field deviation error with Automatic Resynchronization mode", "sync field measure time-out with Automatic Resynchronization mode" and "LIN header reception time-out". + * | | |0 = LIN header error not detected. + * | | |1 = LIN header error detected. + * | | |Note1: This bit is read only, but it can be cleared by writing 1 to it. + * | | |Note2: This bit is only valid when UART is operated in LIN slave mode (SLVEN (UART_LINCTL [0]) = 1) and enables LIN slave header detection function (SLVHDEN (UART_LINCTL [1])). + * |[2] |SLVIDPEF |LIN Slave ID Parity Error Flag + * | | |This bit is set by hardware when receipted frame ID parity is not correct. + * | | |0 = No active. + * | | |1 = Receipted frame ID parity is not correct. + * | | |Note1: This bit is read only, but it can be cleared by writing 1 to it. + * | | |Note2: This bit is only valid when in LIN slave mode (SLVEN (UART_LINCTL [0])= 1) and enable LIN frame ID parity check function IDPEN (UART_LINCTL [9]). + * |[3] |SLVSYNCF |LIN Slave Sync Field (Read Only) + * | | |This bit indicates that the LIN sync field is being analyzed in Automatic Resynchronization mode. + * | | |When the receiver header have some error been detect, user must reset the internal circuit to re-search new frame header by writing 1 to this bit. + * | | |0 = The current character is not at LIN sync state. + * | | |1 = The current character is at LIN sync state. + * | | |Note1: This bit is only valid when in LIN Slave mode (SLVEN(UART_LINCTL[0]) = 1). + * | | |Note2: This bit is read only, but it can be cleared by writing 1 to it. + * | | |Note3: When writing 1 to it, hardware will reload the initial baud rate and re-search a new frame header. + * |[8] |BRKDETF |LIN Break Detection Flag (Read Only) + * | | |This bit is set by hardware when a break is detected and be cleared by writing 1 to it through software. + * | | |0 = LIN break not detected. + * | | |1 = LIN break detected. + * | | |Note1: This bit is read only, but it can be cleared by writing 1 to it. + * | | |Note2: This bit is only valid when LIN break detection function is enabled (BRKDETEN (UART_LINCTL[10]) =1). + * |[9] |BITEF |Bit Error Detect Status Flag (Read Only) + * | | |At TX transfer state, hardware will monitoring the bus state, if the input pin (SIN) state not equals to the output pin (SOUT) state, BITEF (UART_LINSTS[9]) will be set. + * | | |When occur bit error, if the LINIEN (UART_INTEN[8]) = 1, an interrupt will be generated. + * | | |Note1: This bit is read only, but it can be cleared by writing 1 to it. + * | | |Note2: This bit is only valid when enable bit error detection function (BITERREN (UART_LINCTL [12]) = 1). + */ + + __IO uint32_t DAT; /* Offset: 0x00 UART Receive/Transmit Buffer Register */ + __IO uint32_t INTEN; /* Offset: 0x04 UART Interrupt Enable Register */ + __IO uint32_t FIFO; /* Offset: 0x08 UART FIFO Control Register */ + __IO uint32_t LINE; /* Offset: 0x0C UART Line Control Register */ + __IO uint32_t MODEM; /* Offset: 0x10 UART Modem Control Register */ + __IO uint32_t MODEMSTS; /* Offset: 0x14 UART Modem Status Register */ + __IO uint32_t FIFOSTS; /* Offset: 0x18 UART FIFO Status Register */ + __IO uint32_t INTSTS; /* Offset: 0x1C UART Interrupt Status Register */ + __IO uint32_t TOUT; /* Offset: 0x20 UART Time-out Register */ + __IO uint32_t BAUD; /* Offset: 0x24 UART Baud Rate Divisor Register */ + __IO uint32_t IRDA; /* Offset: 0x28 UART IrDA Control Register */ + __IO uint32_t ALTCTL; /* Offset: 0x2C UART Alternate Control/Status Register */ + __IO uint32_t FUNCSEL; /* Offset: 0x30 UART Function Select Register */ + __IO uint32_t LINCTL; /* Offset: 0x34 UART LIN Control Register */ + __IO uint32_t LINSTS; /* Offset: 0x38 UART LIN Status Register */ + +} UART_T; + + + +/** + @addtogroup UART_CONST UART Bit Field Definition + Constant Definitions for UART Controller +@{ */ + +#define UART_DAT_DAT_Pos (0) /*!< UART_T::DAT: DAT Position */ +#define UART_DAT_DAT_Msk (0xfful << UART_DAT_DAT_Pos) /*!< UART_T::DAT: DAT Mask */ + +#define UART_INTEN_RDAIEN_Pos (0) /*!< UART_T::INTEN: RDAIEN Position */ +#define UART_INTEN_RDAIEN_Msk (0x1ul << UART_INTEN_RDAIEN_Pos) /*!< UART_T::INTEN: RDAIEN Mask */ + +#define UART_INTEN_THREIEN_Pos (1) /*!< UART_T::INTEN: THREIEN Position */ +#define UART_INTEN_THREIEN_Msk (0x1ul << UART_INTEN_THREIEN_Pos) /*!< UART_T::INTEN: THREIEN Mask */ + +#define UART_INTEN_RLSIEN_Pos (2) /*!< UART_T::INTEN: RLSIEN Position */ +#define UART_INTEN_RLSIEN_Msk (0x1ul << UART_INTEN_RLSIEN_Pos) /*!< UART_T::INTEN: RLSIEN Mask */ + +#define UART_INTEN_MODEMIEN_Pos (3) /*!< UART_T::INTEN: MODEMIEN Position */ +#define UART_INTEN_MODEMIEN_Msk (0x1ul << UART_INTEN_MODEMIEN_Pos) /*!< UART_T::INTEN: MODEMIEN Mask */ + +#define UART_INTEN_RXTOIEN_Pos (4) /*!< UART_T::INTEN: RXTOIEN Position */ +#define UART_INTEN_RXTOIEN_Msk (0x1ul << UART_INTEN_RXTOIEN_Pos) /*!< UART_T::INTEN: RXTOIEN Mask */ + +#define UART_INTEN_BUFERRIEN_Pos (5) /*!< UART_T::INTEN: BUFERRIEN Position */ +#define UART_INTEN_BUFERRIEN_Msk (0x1ul << UART_INTEN_BUFERRIEN_Pos) /*!< UART_T::INTEN: BUFERRIEN Mask */ + +#define UART_INTEN_LINIEN_Pos (8) /*!< UART_T::INTEN: LINIEN Position */ +#define UART_INTEN_LINIEN_Msk (0x1ul << UART_INTEN_LINIEN_Pos) /*!< UART_T::INTEN: LINIEN Mask */ + +#define UART_INTEN_WKCTSIEN_Pos (9) /*!< UART_T::INTEN: WKCTSIEN Position */ +#define UART_INTEN_WKCTSIEN_Msk (0x1ul << UART_INTEN_WKCTSIEN_Pos) /*!< UART_T::INTEN: WKCTSIEN Mask */ + +#define UART_INTEN_WKDATIEN_Pos (10) /*!< UART_T::INTEN: WKDATIEN Position */ +#define UART_INTEN_WKDATIEN_Msk (0x1ul << UART_INTEN_WKDATIEN_Pos) /*!< UART_T::INTEN: WKDATIEN Mask */ + +#define UART_INTEN_TOCNTEN_Pos (11) /*!< UART_T::INTEN: TOCNTEN Position */ +#define UART_INTEN_TOCNTEN_Msk (0x1ul << UART_INTEN_TOCNTEN_Pos) /*!< UART_T::INTEN: TOCNTEN Mask */ + +#define UART_INTEN_ATORTSEN_Pos (12) /*!< UART_T::INTEN: ATORTSEN Position */ +#define UART_INTEN_ATORTSEN_Msk (0x1ul << UART_INTEN_ATORTSEN_Pos) /*!< UART_T::INTEN: ATORTSEN Mask */ + +#define UART_INTEN_ATOCTSEN_Pos (13) /*!< UART_T::INTEN: ATOCTSEN Position */ +#define UART_INTEN_ATOCTSEN_Msk (0x1ul << UART_INTEN_ATOCTSEN_Pos) /*!< UART_T::INTEN: ATOCTSEN Mask */ + +#define UART_INTEN_TXPDMAEN_Pos (14) /*!< UART_T::INTEN: TXPDMAEN Position */ +#define UART_INTEN_TXPDMAEN_Msk (0x1ul << UART_INTEN_TXPDMAEN_Pos) /*!< UART_T::INTEN: TXPDMAEN Mask */ + +#define UART_INTEN_RXPDMAEN_Pos (15) /*!< UART_T::INTEN: RXPDMAEN Position */ +#define UART_INTEN_RXPDMAEN_Msk (0x1ul << UART_INTEN_RXPDMAEN_Pos) /*!< UART_T::INTEN: RXPDMAEN Mask */ + +#define UART_INTEN_ABRIEN_Pos (18) /*!< UART_T::INTEN: ABRIEN Position */ +#define UART_INTEN_ABRIEN_Msk (0x1ul << UART_INTEN_ABRIEN_Pos) /*!< UART_T::INTEN: ABRIEN Mask */ + +#define UART_FIFO_RXRST_Pos (1) /*!< UART_T::FIFO: RXRST Position */ +#define UART_FIFO_RXRST_Msk (0x1ul << UART_FIFO_RXRST_Pos) /*!< UART_T::FIFO: RXRST Mask */ + +#define UART_FIFO_TXRST_Pos (2) /*!< UART_T::FIFO: TXRST Position */ +#define UART_FIFO_TXRST_Msk (0x1ul << UART_FIFO_TXRST_Pos) /*!< UART_T::FIFO: TXRST Mask */ + +#define UART_FIFO_RFITL_Pos (4) /*!< UART_T::FIFO: RFITL Position */ +#define UART_FIFO_RFITL_Msk (0xful << UART_FIFO_RFITL_Pos) /*!< UART_T::FIFO: RFITL Mask */ + +#define UART_FIFO_RXOFF_Pos (8) /*!< UART_T::FIFO: RXOFF Position */ +#define UART_FIFO_RXOFF_Msk (0x1ul << UART_FIFO_RXOFF_Pos) /*!< UART_T::FIFO: RXOFF Mask */ + +#define UART_FIFO_RTSTRGLV_Pos (16) /*!< UART_T::FIFO: RTSTRGLV Position */ +#define UART_FIFO_RTSTRGLV_Msk (0xful << UART_FIFO_RTSTRGLV_Pos) /*!< UART_T::FIFO: RTSTRGLV Mask */ + +#define UART_LINE_WLS_Pos (0) /*!< UART_T::LINE: WLS Position */ +#define UART_LINE_WLS_Msk (0x3ul << UART_LINE_WLS_Pos) /*!< UART_T::LINE: WLS Mask */ + +#define UART_LINE_NSB_Pos (2) /*!< UART_T::LINE: NSB Position */ +#define UART_LINE_NSB_Msk (0x1ul << UART_LINE_NSB_Pos) /*!< UART_T::LINE: NSB Mask */ + +#define UART_LINE_PBE_Pos (3) /*!< UART_T::LINE: PBE Position */ +#define UART_LINE_PBE_Msk (0x1ul << UART_LINE_PBE_Pos) /*!< UART_T::LINE: PBE Mask */ + +#define UART_LINE_EPE_Pos (4) /*!< UART_T::LINE: EPE Position */ +#define UART_LINE_EPE_Msk (0x1ul << UART_LINE_EPE_Pos) /*!< UART_T::LINE: EPE Mask */ + +#define UART_LINE_SPE_Pos (5) /*!< UART_T::LINE: SPE Position */ +#define UART_LINE_SPE_Msk (0x1ul << UART_LINE_SPE_Pos) /*!< UART_T::LINE: SPE Mask */ + +#define UART_LINE_BCB_Pos (6) /*!< UART_T::LINE: BCB Position */ +#define UART_LINE_BCB_Msk (0x1ul << UART_LINE_BCB_Pos) /*!< UART_T::LINE: BCB Mask */ + +#define UART_MODEM_RTS_Pos (1) /*!< UART_T::MODEM: RTS Position */ +#define UART_MODEM_RTS_Msk (0x1ul << UART_MODEM_RTS_Pos) /*!< UART_T::MODEM: RTS Mask */ + +#define UART_MODEM_RTSACTLV_Pos (9) /*!< UART_T::MODEM: RTSACTLV Position */ +#define UART_MODEM_RTSACTLV_Msk (0x1ul << UART_MODEM_RTSACTLV_Pos) /*!< UART_T::MODEM: RTSACTLV Mask */ + +#define UART_MODEM_RTSSTS_Pos (13) /*!< UART_T::MODEM: RTSSTS Position */ +#define UART_MODEM_RTSSTS_Msk (0x1ul << UART_MODEM_RTSSTS_Pos) /*!< UART_T::MODEM: RTSSTS Mask */ + +#define UART_MODEMSTS_CTSDETF_Pos (0) /*!< UART_T::MODEMSTS: CTSDETF Position */ +#define UART_MODEMSTS_CTSDETF_Msk (0x1ul << UART_MODEMSTS_CTSDETF_Pos) /*!< UART_T::MODEMSTS: CTSDETF Mask */ + +#define UART_MODEMSTS_CTSSTS_Pos (4) /*!< UART_T::MODEMSTS: CTSSTS Position */ +#define UART_MODEMSTS_CTSSTS_Msk (0x1ul << UART_MODEMSTS_CTSSTS_Pos) /*!< UART_T::MODEMSTS: CTSSTS Mask */ + +#define UART_MODEMSTS_CTSACTLV_Pos (8) /*!< UART_T::MODEMSTS: CTSACTLV Position */ +#define UART_MODEMSTS_CTSACTLV_Msk (0x1ul << UART_MODEMSTS_CTSACTLV_Pos) /*!< UART_T::MODEMSTS: CTSACTLV Mask */ + +#define UART_FIFOSTS_RXOVIF_Pos (0) /*!< UART_T::FIFOSTS: RXOVIF Position */ +#define UART_FIFOSTS_RXOVIF_Msk (0x1ul << UART_FIFOSTS_RXOVIF_Pos) /*!< UART_T::FIFOSTS: RXOVIF Mask */ + +#define UART_FIFOSTS_ABRDIF_Pos (1) /*!< UART_T::FIFOSTS: ABRDIF Position */ +#define UART_FIFOSTS_ABRDIF_Msk (0x1ul << UART_FIFOSTS_ABRDIF_Pos) /*!< UART_T::FIFOSTS: ABRDIF Mask */ + +#define UART_FIFOSTS_ABRDTOIF_Pos (2) /*!< UART_T::FIFOSTS: ABRDTOIF Position */ +#define UART_FIFOSTS_ABRDTOIF_Msk (0x1ul << UART_FIFOSTS_ABRDTOIF_Pos) /*!< UART_T::FIFOSTS: ABRDTOIF Mask */ + +#define UART_FIFOSTS_ADDRDETF_Pos (3) /*!< UART_T::FIFOSTS: ADDRDETF Position */ +#define UART_FIFOSTS_ADDRDETF_Msk (0x1ul << UART_FIFOSTS_ADDRDETF_Pos) /*!< UART_T::FIFOSTS: ADDRDETF Mask */ + +#define UART_FIFOSTS_PEF_Pos (4) /*!< UART_T::FIFOSTS: PEF Position */ +#define UART_FIFOSTS_PEF_Msk (0x1ul << UART_FIFOSTS_PEF_Pos) /*!< UART_T::FIFOSTS: PEF Mask */ + +#define UART_FIFOSTS_FEF_Pos (5) /*!< UART_T::FIFOSTS: FEF Position */ +#define UART_FIFOSTS_FEF_Msk (0x1ul << UART_FIFOSTS_FEF_Pos) /*!< UART_T::FIFOSTS: FEF Mask */ + +#define UART_FIFOSTS_BIF_Pos (6) /*!< UART_T::FIFOSTS: BIF Position */ +#define UART_FIFOSTS_BIF_Msk (0x1ul << UART_FIFOSTS_BIF_Pos) /*!< UART_T::FIFOSTS: BIF Mask */ + +#define UART_FIFOSTS_RXPTR_Pos (8) /*!< UART_T::FIFOSTS: RXPTR Position */ +#define UART_FIFOSTS_RXPTR_Msk (0x3ful << UART_FIFOSTS_RXPTR_Pos) /*!< UART_T::FIFOSTS: RXPTR Mask */ + +#define UART_FIFOSTS_RXEMPTY_Pos (14) /*!< UART_T::FIFOSTS: RXEMPTY Position */ +#define UART_FIFOSTS_RXEMPTY_Msk (0x1ul << UART_FIFOSTS_RXEMPTY_Pos) /*!< UART_T::FIFOSTS: RXEMPTY Mask */ + +#define UART_FIFOSTS_RXFULL_Pos (15) /*!< UART_T::FIFOSTS: RXFULL Position */ +#define UART_FIFOSTS_RXFULL_Msk (0x1ul << UART_FIFOSTS_RXFULL_Pos) /*!< UART_T::FIFOSTS: RXFULL Mask */ + +#define UART_FIFOSTS_TXPTR_Pos (16) /*!< UART_T::FIFOSTS: TXPTR Position */ +#define UART_FIFOSTS_TXPTR_Msk (0x3ful << UART_FIFOSTS_TXPTR_Pos) /*!< UART_T::FIFOSTS: TXPTR Mask */ + +#define UART_FIFOSTS_TXEMPTY_Pos (22) /*!< UART_T::FIFOSTS: TXEMPTY Position */ +#define UART_FIFOSTS_TXEMPTY_Msk (0x1ul << UART_FIFOSTS_TXEMPTY_Pos) /*!< UART_T::FIFOSTS: TXEMPTY Mask */ + +#define UART_FIFOSTS_TXFULL_Pos (23) /*!< UART_T::FIFOSTS: TXFULL Position */ +#define UART_FIFOSTS_TXFULL_Msk (0x1ul << UART_FIFOSTS_TXFULL_Pos) /*!< UART_T::FIFOSTS: TXFULL Mask */ + +#define UART_FIFOSTS_TXOVIF_Pos (24) /*!< UART_T::FIFOSTS: TXOVIF Position */ +#define UART_FIFOSTS_TXOVIF_Msk (0x1ul << UART_FIFOSTS_TXOVIF_Pos) /*!< UART_T::FIFOSTS: TXOVIF Mask */ + +#define UART_FIFOSTS_TXEMPTYF_Pos (28) /*!< UART_T::FIFOSTS: TXEMPTYF Position */ +#define UART_FIFOSTS_TXEMPTYF_Msk (0x1ul << UART_FIFOSTS_TXEMPTYF_Pos) /*!< UART_T::FIFOSTS: TXEMPTYF Mask */ + +#define UART_INTSTS_RDAIF_Pos (0) /*!< UART_T::INTSTS: RDAIF Position */ +#define UART_INTSTS_RDAIF_Msk (0x1ul << UART_INTSTS_RDAIF_Pos) /*!< UART_T::INTSTS: RDAIF Mask */ + +#define UART_INTSTS_THREIF_Pos (1) /*!< UART_T::INTSTS: THREIF Position */ +#define UART_INTSTS_THREIF_Msk (0x1ul << UART_INTSTS_THREIF_Pos) /*!< UART_T::INTSTS: THREIF Mask */ + +#define UART_INTSTS_RLSIF_Pos (2) /*!< UART_T::INTSTS: RLSIF Position */ +#define UART_INTSTS_RLSIF_Msk (0x1ul << UART_INTSTS_RLSIF_Pos) /*!< UART_T::INTSTS: RLSIF Mask */ + +#define UART_INTSTS_MODEMIF_Pos (3) /*!< UART_T::INTSTS: MODEMIF Position */ +#define UART_INTSTS_MODEMIF_Msk (0x1ul << UART_INTSTS_MODEMIF_Pos) /*!< UART_T::INTSTS: MODEMIF Mask */ + +#define UART_INTSTS_RXTOIF_Pos (4) /*!< UART_T::INTSTS: RXTOIF Position */ +#define UART_INTSTS_RXTOIF_Msk (0x1ul << UART_INTSTS_RXTOIF_Pos) /*!< UART_T::INTSTS: RXTOIF Mask */ + +#define UART_INTSTS_BUFERRIF_Pos (5) /*!< UART_T::INTSTS: BUFERRIF Position */ +#define UART_INTSTS_BUFERRIF_Msk (0x1ul << UART_INTSTS_BUFERRIF_Pos) /*!< UART_T::INTSTS: BUFERRIF Mask */ + +#define UART_INTSTS_WKIF_Pos (6) /*!< UART_T::INTSTS: WKIF Position */ +#define UART_INTSTS_WKIF_Msk (0x1ul << UART_INTSTS_WKIF_Pos) /*!< UART_T::INTSTS: WKIF Mask */ + +#define UART_INTSTS_LINIF_Pos (7) /*!< UART_T::INTSTS: LINIF Position */ +#define UART_INTSTS_LINIF_Msk (0x1ul << UART_INTSTS_LINIF_Pos) /*!< UART_T::INTSTS: LINIF Mask */ + +#define UART_INTSTS_RDAINT_Pos (8) /*!< UART_T::INTSTS: RDAINT Position */ +#define UART_INTSTS_RDAINT_Msk (0x1ul << UART_INTSTS_RDAINT_Pos) /*!< UART_T::INTSTS: RDAINT Mask */ + +#define UART_INTSTS_THREINT_Pos (9) /*!< UART_T::INTSTS: THREINT Position */ +#define UART_INTSTS_THREINT_Msk (0x1ul << UART_INTSTS_THREINT_Pos) /*!< UART_T::INTSTS: THREINT Mask */ + +#define UART_INTSTS_RLSINT_Pos (10) /*!< UART_T::INTSTS: RLSINT Position */ +#define UART_INTSTS_RLSINT_Msk (0x1ul << UART_INTSTS_RLSINT_Pos) /*!< UART_T::INTSTS: RLSINT Mask */ + +#define UART_INTSTS_MODEMINT_Pos (11) /*!< UART_T::INTSTS: MODEMINT Position */ +#define UART_INTSTS_MODEMINT_Msk (0x1ul << UART_INTSTS_MODEMINT_Pos) /*!< UART_T::INTSTS: MODEMINT Mask */ + +#define UART_INTSTS_RXTOINT_Pos (12) /*!< UART_T::INTSTS: RXTOINT Position */ +#define UART_INTSTS_RXTOINT_Msk (0x1ul << UART_INTSTS_RXTOINT_Pos) /*!< UART_T::INTSTS: RXTOINT Mask */ + +#define UART_INTSTS_BUFERRINT_Pos (13) /*!< UART_T::INTSTS: BUFERRINT Position */ +#define UART_INTSTS_BUFERRINT_Msk (0x1ul << UART_INTSTS_BUFERRINT_Pos) /*!< UART_T::INTSTS: BUFERRINT Mask */ + +#define UART_INTSTS_LININT_Pos (15) /*!< UART_T::INTSTS: LININT Position */ +#define UART_INTSTS_LININT_Msk (0x1ul << UART_INTSTS_LININT_Pos) /*!< UART_T::INTSTS: LININT Mask */ + +#define UART_INTSTS_CTSWKIF_Pos (16) /*!< UART_T::INTSTS: CTSWKIF Position */ +#define UART_INTSTS_CTSWKIF_Msk (0x1ul << UART_INTSTS_CTSWKIF_Pos) /*!< UART_T::INTSTS: CTSWKIF Mask */ + +#define UART_INTSTS_DATWKIF_Pos (17) /*!< UART_T::INTSTS: DATWKIF Position */ +#define UART_INTSTS_DATWKIF_Msk (0x1ul << UART_INTSTS_DATWKIF_Pos) /*!< UART_T::INTSTS: DATWKIF Mask */ + +#define UART_INTSTS_HWRLSIF_Pos (18) /*!< UART_T::INTSTS: HWRLSIF Position */ +#define UART_INTSTS_HWRLSIF_Msk (0x1ul << UART_INTSTS_HWRLSIF_Pos) /*!< UART_T::INTSTS: HWRLSIF Mask */ + +#define UART_INTSTS_HWMODIF_Pos (19) /*!< UART_T::INTSTS: HWMODIF Position */ +#define UART_INTSTS_HWMODIF_Msk (0x1ul << UART_INTSTS_HWMODIF_Pos) /*!< UART_T::INTSTS: HWMODIF Mask */ + +#define UART_INTSTS_HWTOIF_Pos (20) /*!< UART_T::INTSTS: HWTOIF Position */ +#define UART_INTSTS_HWTOIF_Msk (0x1ul << UART_INTSTS_HWTOIF_Pos) /*!< UART_T::INTSTS: HWTOIF Mask */ + +#define UART_INTSTS_HWBUFEIF_Pos (21) /*!< UART_T::INTSTS: HWBUFEIF Position */ +#define UART_INTSTS_HWBUFEIF_Msk (0x1ul << UART_INTSTS_HWBUFEIF_Pos) /*!< UART_T::INTSTS: HWBUFEIF Mask */ + +#define UART_INTSTS_HWRLSINT_Pos (26) /*!< UART_T::INTSTS: HWRLSINT Position */ +#define UART_INTSTS_HWRLSINT_Msk (0x1ul << UART_INTSTS_HWRLSINT_Pos) /*!< UART_T::INTSTS: HWRLSINT Mask */ + +#define UART_INTSTS_HWMODINT_Pos (27) /*!< UART_T::INTSTS: HWMODINT Position */ +#define UART_INTSTS_HWMODINT_Msk (0x1ul << UART_INTSTS_HWMODINT_Pos) /*!< UART_T::INTSTS: HWMODINT Mask */ + +#define UART_INTSTS_HWTOINT_Pos (28) /*!< UART_T::INTSTS: HWTOINT Position */ +#define UART_INTSTS_HWTOINT_Msk (0x1ul << UART_INTSTS_HWTOINT_Pos) /*!< UART_T::INTSTS: HWTOINT Mask */ + +#define UART_INTSTS_HWBUFEINT_Pos (29) /*!< UART_T::INTSTS: HWBUFEINT Position */ +#define UART_INTSTS_HWBUFEINT_Msk (0x1ul << UART_INTSTS_HWBUFEINT_Pos) /*!< UART_T::INTSTS: HWBUFEINT Mask */ + +#define UART_TOUT_TOIC_Pos (0) /*!< UART_T::TOUT: TOIC Position */ +#define UART_TOUT_TOIC_Msk (0xfful << UART_TOUT_TOIC_Pos) /*!< UART_T::TOUT: TOIC Mask */ + +#define UART_TOUT_DLY_Pos (8) /*!< UART_T::TOUT: DLY Position */ +#define UART_TOUT_DLY_Msk (0xfful << UART_TOUT_DLY_Pos) /*!< UART_T::TOUT: DLY Mask */ + +#define UART_BAUD_BRD_Pos (0) /*!< UART_T::BAUD: BRD Position */ +#define UART_BAUD_BRD_Msk (0xfffful << UART_BAUD_BRD_Pos) /*!< UART_T::BAUD: BRD Mask */ + +#define UART_BAUD_EDIVM1_Pos (24) /*!< UART_T::BAUD: EDIVM1 Position */ +#define UART_BAUD_EDIVM1_Msk (0xful << UART_BAUD_EDIVM1_Pos) /*!< UART_T::BAUD: EDIVM1 Mask */ + +#define UART_BAUD_BAUDM0_Pos (28) /*!< UART_T::BAUD: BAUDM0 Position */ +#define UART_BAUD_BAUDM0_Msk (0x1ul << UART_BAUD_BAUDM0_Pos) /*!< UART_T::BAUD: BAUDM0 Mask */ + +#define UART_BAUD_BAUDM1_Pos (29) /*!< UART_T::BAUD: BAUDM1 Position */ +#define UART_BAUD_BAUDM1_Msk (0x1ul << UART_BAUD_BAUDM1_Pos) /*!< UART_T::BAUD: BAUDM1 Mask */ + +#define UART_IRDA_TXEN_Pos (1) /*!< UART_T::IRDA: TXEN Position */ +#define UART_IRDA_TXEN_Msk (0x1ul << UART_IRDA_TXEN_Pos) /*!< UART_T::IRDA: TXEN Mask */ + +#define UART_IRDA_TXINV_Pos (5) /*!< UART_T::IRDA: TXINV Position */ +#define UART_IRDA_TXINV_Msk (0x1ul << UART_IRDA_TXINV_Pos) /*!< UART_T::IRDA: TXINV Mask */ + +#define UART_IRDA_RXINV_Pos (6) /*!< UART_T::IRDA: RXINV Position */ +#define UART_IRDA_RXINV_Msk (0x1ul << UART_IRDA_RXINV_Pos) /*!< UART_T::IRDA: RXINV Mask */ + +#define UART_ALTCTL_BRKFL_Pos (0) /*!< UART_T::ALTCTL: BRKFL Position */ +#define UART_ALTCTL_BRKFL_Msk (0xful << UART_ALTCTL_BRKFL_Pos) /*!< UART_T::ALTCTL: BRKFL Mask */ + +#define UART_ALTCTL_LINRXEN_Pos (6) /*!< UART_T::ALTCTL: LINRXEN Position */ +#define UART_ALTCTL_LINRXEN_Msk (0x1ul << UART_ALTCTL_LINRXEN_Pos) /*!< UART_T::ALTCTL: LINRXEN Mask */ + +#define UART_ALTCTL_LINTXEN_Pos (7) /*!< UART_T::ALTCTL: LINTXEN Position */ +#define UART_ALTCTL_LINTXEN_Msk (0x1ul << UART_ALTCTL_LINTXEN_Pos) /*!< UART_T::ALTCTL: LINTXEN Mask */ + +#define UART_ALTCTL_RS485NMM_Pos (8) /*!< UART_T::ALTCTL: RS485NMM Position */ +#define UART_ALTCTL_RS485NMM_Msk (0x1ul << UART_ALTCTL_RS485NMM_Pos) /*!< UART_T::ALTCTL: RS485NMM Mask */ + +#define UART_ALTCTL_RS485AAD_Pos (9) /*!< UART_T::ALTCTL: RS485AAD Position */ +#define UART_ALTCTL_RS485AAD_Msk (0x1ul << UART_ALTCTL_RS485AAD_Pos) /*!< UART_T::ALTCTL: RS485AAD Mask */ + +#define UART_ALTCTL_RS485AUD_Pos (10) /*!< UART_T::ALTCTL: RS485AUD Position */ +#define UART_ALTCTL_RS485AUD_Msk (0x1ul << UART_ALTCTL_RS485AUD_Pos) /*!< UART_T::ALTCTL: RS485AUD Mask */ + +#define UART_ALTCTL_ADDRDEN_Pos (15) /*!< UART_T::ALTCTL: ADDRDEN Position */ +#define UART_ALTCTL_ADDRDEN_Msk (0x1ul << UART_ALTCTL_ADDRDEN_Pos) /*!< UART_T::ALTCTL: ADDRDEN Mask */ + +#define UART_ALTCTL_ABRIF_Pos (17) /*!< UART_T::ALTCTL: ABRIF Position */ +#define UART_ALTCTL_ABRIF_Msk (0x1ul << UART_ALTCTL_ABRIF_Pos) /*!< UART_T::ALTCTL: ABRIF Mask */ + +#define UART_ALTCTL_ABRDEN_Pos (18) /*!< UART_T::ALTCTL: ABRDEN Position */ +#define UART_ALTCTL_ABRDEN_Msk (0x1ul << UART_ALTCTL_ABRDEN_Pos) /*!< UART_T::ALTCTL: ABRDEN Mask */ + +#define UART_ALTCTL_ABRDBITS_Pos (19) /*!< UART_T::ALTCTL: ABRDBITS Position */ +#define UART_ALTCTL_ABRDBITS_Msk (0x3ul << UART_ALTCTL_ABRDBITS_Pos) /*!< UART_T::ALTCTL: ABRDBITS Mask */ + +#define UART_ALTCTL_ADDRMV_Pos (24) /*!< UART_T::ALTCTL: ADDRMV Position */ +#define UART_ALTCTL_ADDRMV_Msk (0xfful << UART_ALTCTL_ADDRMV_Pos) /*!< UART_T::ALTCTL: ADDRMV Mask */ + +#define UART_FUNCSEL_FUNCSEL_Pos (0) /*!< UART_T::FUNCSEL: FUNCSEL Position */ +#define UART_FUNCSEL_FUNCSEL_Msk (0x3ul << UART_FUNCSEL_FUNCSEL_Pos) /*!< UART_T::FUNCSEL: FUNCSEL Mask */ + +#define UART_LINCTL_SLVEN_Pos (0) /*!< UART_T::LINCTL: SLVEN Position */ +#define UART_LINCTL_SLVEN_Msk (0x1ul << UART_LINCTL_SLVEN_Pos) /*!< UART_T::LINCTL: SLVEN Mask */ + +#define UART_LINCTL_SLVHDEN_Pos (1) /*!< UART_T::LINCTL: SLVHDEN Position */ +#define UART_LINCTL_SLVHDEN_Msk (0x1ul << UART_LINCTL_SLVHDEN_Pos) /*!< UART_T::LINCTL: SLVHDEN Mask */ + +#define UART_LINCTL_SLVAREN_Pos (2) /*!< UART_T::LINCTL: SLVAREN Position */ +#define UART_LINCTL_SLVAREN_Msk (0x1ul << UART_LINCTL_SLVAREN_Pos) /*!< UART_T::LINCTL: SLVAREN Mask */ + +#define UART_LINCTL_SLVDUEN_Pos (3) /*!< UART_T::LINCTL: SLVDUEN Position */ +#define UART_LINCTL_SLVDUEN_Msk (0x1ul << UART_LINCTL_SLVDUEN_Pos) /*!< UART_T::LINCTL: SLVDUEN Mask */ + +#define UART_LINCTL_MUTE_Pos (4) /*!< UART_T::LINCTL: MUTE Position */ +#define UART_LINCTL_MUTE_Msk (0x1ul << UART_LINCTL_MUTE_Pos) /*!< UART_T::LINCTL: MUTE Mask */ + +#define UART_LINCTL_SENDH_Pos (8) /*!< UART_T::LINCTL: SENDH Position */ +#define UART_LINCTL_SENDH_Msk (0x1ul << UART_LINCTL_SENDH_Pos) /*!< UART_T::LINCTL: SENDH Mask */ + +#define UART_LINCTL_IDPEN_Pos (9) /*!< UART_T::LINCTL: IDPEN Position */ +#define UART_LINCTL_IDPEN_Msk (0x1ul << UART_LINCTL_IDPEN_Pos) /*!< UART_T::LINCTL: IDPEN Mask */ + +#define UART_LINCTL_BRKDETEN_Pos (10) /*!< UART_T::LINCTL: BRKDETEN Position */ +#define UART_LINCTL_BRKDETEN_Msk (0x1ul << UART_LINCTL_BRKDETEN_Pos) /*!< UART_T::LINCTL: BRKDETEN Mask */ + +#define UART_LINCTL_RXOFF_Pos (11) /*!< UART_T::LINCTL: RXOFF Position */ +#define UART_LINCTL_RXOFF_Msk (0x1ul << UART_LINCTL_RXOFF_Pos) /*!< UART_T::LINCTL: RXOFF Mask */ + +#define UART_LINCTL_BITERREN_Pos (12) /*!< UART_T::LINCTL: BITERREN Position */ +#define UART_LINCTL_BITERREN_Msk (0x1ul << UART_LINCTL_BITERREN_Pos) /*!< UART_T::LINCTL: BITERREN Mask */ + +#define UART_LINCTL_BRKFL_Pos (16) /*!< UART_T::LINCTL: BRKFL Position */ +#define UART_LINCTL_BRKFL_Msk (0xful << UART_LINCTL_BRKFL_Pos) /*!< UART_T::LINCTL: BRKFL Mask */ + +#define UART_LINCTL_BSL_Pos (20) /*!< UART_T::LINCTL: BSL Position */ +#define UART_LINCTL_BSL_Msk (0x3ul << UART_LINCTL_BSL_Pos) /*!< UART_T::LINCTL: BSL Mask */ + +#define UART_LINCTL_HSEL_Pos (22) /*!< UART_T::LINCTL: HSEL Position */ +#define UART_LINCTL_HSEL_Msk (0x3ul << UART_LINCTL_HSEL_Pos) /*!< UART_T::LINCTL: HSEL Mask */ + +#define UART_LINCTL_PID_Pos (24) /*!< UART_T::LINCTL: PID Position */ +#define UART_LINCTL_PID_Msk (0xfful << UART_LINCTL_PID_Pos) /*!< UART_T::LINCTL: PID Mask */ + +#define UART_LINSTS_SLVHDETF_Pos (0) /*!< UART_T::LINSTS: SLVHDETF Position */ +#define UART_LINSTS_SLVHDETF_Msk (0x1ul << UART_LINSTS_SLVHDETF_Pos) /*!< UART_T::LINSTS: SLVHDETF Mask */ + +#define UART_LINSTS_SLVHEF_Pos (1) /*!< UART_T::LINSTS: SLVHEF Position */ +#define UART_LINSTS_SLVHEF_Msk (0x1ul << UART_LINSTS_SLVHEF_Pos) /*!< UART_T::LINSTS: SLVHEF Mask */ + +#define UART_LINSTS_SLVIDPEF_Pos (2) /*!< UART_T::LINSTS: SLVIDPEF Position */ +#define UART_LINSTS_SLVIDPEF_Msk (0x1ul << UART_LINSTS_SLVIDPEF_Pos) /*!< UART_T::LINSTS: SLVIDPEF Mask */ + +#define UART_LINSTS_SLVSYNCF_Pos (3) /*!< UART_T::LINSTS: SLVSYNCF Position */ +#define UART_LINSTS_SLVSYNCF_Msk (0x1ul << UART_LINSTS_SLVSYNCF_Pos) /*!< UART_T::LINSTS: SLVSYNCF Mask */ + +#define UART_LINSTS_BRKDETF_Pos (8) /*!< UART_T::LINSTS: BRKDETF Position */ +#define UART_LINSTS_BRKDETF_Msk (0x1ul << UART_LINSTS_BRKDETF_Pos) /*!< UART_T::LINSTS: BRKDETF Mask */ + +#define UART_LINSTS_BITEF_Pos (9) /*!< UART_T::LINSTS: BITEF Position */ +#define UART_LINSTS_BITEF_Msk (0x1ul << UART_LINSTS_BITEF_Pos) /*!< UART_T::LINSTS: BITEF Mask */ + + +/**@}*/ /* UART_CONST */ +/**@}*/ /* end of UART register group */ + + +/*---------------------- Universal Serial Bus Controller -------------------------*/ +/** + @addtogroup USB Universal Serial Bus Controller(USB) + Memory Mapped Structure for USB Controller +@{ */ + +/** + * @brief USBD endpoints register + */ + +typedef struct +{ + + +/** + * @var USBD_EP_T::BUFSEG + * Offset: 0x500/0x510/0x520/0x530/0x540/0x550/0x560/0x570 Endpoint 0~7 Buffer Segmentation Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[8:3] |BUFSEG |Endpoint Buffer Segmentation + * | | |It is used to indicate the offset address for each endpoint with the USB SRAM starting address The effective starting address of the endpoint is + * | | |USB_SRAM address + { BUFSEG[8:3], 3'b000} + * | | |Where the USB_SRAM address = USBD_BA+0x100h. + * | | |Refer to the section 5.4.4.7 for the endpoint SRAM structure and its description. + * @var USBD_EP_T::MXPLD + * Offset: 0x504/0x514/0x524/0x534/0x544/0x554/0x564/0x574 Endpoint 0~7 Maximal Payload Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[8:0] |MXPLD |Maximal Payload + * | | |Define the data length which is transmitted to host (IN token) or the actual data length which is received from the host (OUT token). + * | | |It also used to indicate that the endpoint is ready to be transmitted in IN token or received in OUT token. + * | | |(1) When the register is written by CPU, + * | | |For IN token, the value of MXPLD is used to define the data length to be transmitted and indicate the data buffer is ready. + * | | |For OUT token, it means that the controller is ready to receive data from the host and the value of MXPLD is the maximal data length comes from host. + * | | |(2) When the register is read by CPU, + * | | |For IN token, the value of MXPLD is indicated by the data length be transmitted to host + * | | |For OUT token, the value of MXPLD is indicated the actual data length receiving from host. + * | | |Note: Once MXPLD is written, the data packets will be transmitted/received immediately after IN/OUT token arrived. + * @var USBD_EP_T::CFG + * Offset: 0x508/0x518/0x528/0x538/0x548/0x558/0x568/0x578 Endpoint 0~7 Configuration Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[3:0] |EPNUM |Endpoint Number + * | | |These bits are used to define the endpoint number of the current endpoint. + * |[4] |ISOCH |Isochronous Endpoint + * | | |This bit is used to set the endpoint as Isochronous endpoint, no handshake. + * | | |0 = No Isochronous endpoint. + * | | |1 = Isochronous endpoint. + * |[6:5] |STATE |Endpoint STATE + * | | |00 = Endpoint is Disabled. + * | | |01 = Out endpoint. + * | | |10 = IN endpoint. + * | | |11 = Undefined. + * |[7] |DSQSYNC |Data Sequence Synchronization + * | | |0 = DATA0 PID. + * | | |1 = DATA1 PID. + * | | |Note: It is used to specify the DATA0 or DATA1 PID in the following IN token transaction. + * | | |Hardware will toggle automatically in IN token base on the bit. + * |[9] |CSTALL |Clear STALL Response + * | | |0 = Disable the device to clear the STALL handshake in setup stage. + * | | |1 = Clear the device to response STALL handshake in setup stage. + * @var USBD_EP_T::CFGP + * Offset: 0x50C/0x51C/0x52C/0x53C/0x54C/0x55C/0x56C/0x57C Endpoint 0~7 Set Stall and Clear In/Out Ready Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |CLRRDY |Clear Ready + * | | |When the USB_MXPLD register is set by user, it means that the endpoint is ready to transmit or receive data. + * | | |If the user wants to turn off this transaction before the transaction start, users can set this bit to 1 to turn it off and it will be cleared to 0 automatically. + * | | |For IN token, write 1 to clear the IN token had ready to transmit the data to USB. + * | | |For OUT token, write 1 to clear the OUT token had ready to receive the data from USB. + * | | |This bit is write 1 only and is always 0 when it is read back. + * |[1] |SSTALL |Set STALL + * | | |0 = Disable the device to response STALL. + * | | |1 = Set the device to respond STALL automatically. + */ + + __IO uint32_t BUFSEG; /* Offset: 0x500/0x510/0x520/0x530/0x540/0x550/0x560/0x570 Endpoint 0~7 Buffer Segmentation Register */ + __IO uint32_t MXPLD; /* Offset: 0x504/0x514/0x524/0x534/0x544/0x554/0x564/0x574 Endpoint 0~7 Maximal Payload Register */ + __IO uint32_t CFG; /* Offset: 0x508/0x518/0x528/0x538/0x548/0x558/0x568/0x578 Endpoint 0~7 Configuration Register */ + __IO uint32_t CFGP; /* Offset: 0x50C/0x51C/0x52C/0x53C/0x54C/0x55C/0x56C/0x57C Endpoint 0~7 Set Stall and Clear In/Out Ready Control Register */ + +} USBD_EP_T; + + + + + +typedef struct +{ + + +/** + * @var USBD_T::INTEN + * Offset: 0x00 USB Interrupt Enable Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |BUSIEN |Bus Event Interrupt Enable + * | | |0 = BUS event interrupt Disabled. + * | | |1 = BUS event interrupt Enabled. + * |[1] |USBIEN |USB Event Interrupt Enable + * | | |0 = USB event interrupt Disabled. + * | | |1 = USB event interrupt Enabled. + * |[2] |VBDETIEN |VBUS Detection Interrupt Enable + * | | |0 = Floating detection Interrupt Disabled. + * | | |1 = Floating detection Interrupt Enabled. + * |[3] |NEVWKIEN |USB No-Event-Wake-Up Interrupt Enable + * | | |0 = No-Event-Wake-up Interrupt Disabled. + * | | |1 = No-Event-Wake-up Interrupt Enabled. + * |[8] |WKEN |Wake-Up Function Enable + * | | |0 = USB wake-up function Disabled. + * | | |1 = USB wake-up function Enabled. + * |[15] |INNAKEN |Active NAK Function And Its Status In IN Token + * | | |0 = When device responds NAK after receiving IN token, IN NAK status will not be + * | | | updated to USBD_EPSTS register, so that the USB interrupt event will not be asserted. + * | | |1 = IN NAK status will be updated to USBD_EPSTS register and the USB interrupt event + * | | | will be asserted, when the device responds NAK after receiving IN token. + * @var USBD_T::INTSTS + * Offset: 0x04 USB Interrupt Event Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |BUSIF |BUS Interrupt Status + * | | |The BUS event means that there is one of the suspense or the resume function in the bus. + * | | |0 = No BUS event occurred. + * | | |1 = Bus event occurred; check USB_ATTR[3:0] to know which kind of bus event was occurred, cleared by write 1 to USB_INTSTS[0]. + * |[1] |USBIF |USB Event Interrupt Status + * | | |The USB event includes the SETUP Token, IN Token, OUT ACK, ISO IN, or ISO OUT events in the bus. + * | | |0 = No USB event occurred. + * | | |1 = USB event occurred, check EPSTS0~7 to know which kind of USB event occurred. + * | | |Cleared by write 1 to USB_INTSTS[1] or EPEVT0~7 and SETUP (USB_INTSTS[31]). + * |[2] |VBDETIF |VBUS Detection Interrupt Status + * | | |0 = There is not attached/detached event in the USB. + * | | |1 = There is attached/detached event in the USB bus and it is cleared by write 1 to USB_INTSTS[2]. + * |[3] |NEVWKIF |USB No-Event-Wake-Up Interrupt Status + * | | |0 = No Wake-up event occurred. + * | | |1 = Wake-up event occurred, cleared by write 1 to USB_INTSTS[3]. + * |[16] |EPEVT0 |Endpoint 0's USB Event Status + * | | |0 = No event occurred on endpoint 0. + * | | |1 = USB event occurred on Endpoint 0, check USB_EPSTS[10:8] to know which kind of USB event was occurred, cleared by write 1 to USB_INTSTS[16] or USB_INTSTS[1]. + * |[17] |EPEVT1 |Endpoint 1's USB Event Status + * | | |0 = No event occurred on endpoint 1. + * | | |1 = USB event occurred on Endpoint 1, check USB_EPSTS[13:11] to know which kind of USB event was occurred, cleared by write 1 to USB_INTSTS[17] or USB_INTSTS[1]. + * |[18] |EPEVT2 |Endpoint 2's USB Event Status + * | | |0 = No event occurred on endpoint 2. + * | | |1 = USB event occurred on Endpoint 2, check USB_EPSTS[16:14] to know which kind of USB event was occurred, cleared by write 1 to USB_INTSTS[18] or USB_INTSTS[1]. + * |[19] |EPEVT3 |Endpoint 3's USB Event Status + * | | |0 = No event occurred on endpoint 3. + * | | |1 = USB event occurred on Endpoint 3, check USB_EPSTS[19:17] to know which kind of USB event was occurred, cleared by write 1 to USB_INTSTS[19] or USB_INTSTS[1]. + * |[20] |EPEVT4 |Endpoint 4's USB Event Status + * | | |0 = No event occurred on endpoint 4. + * | | |1 = USB event occurred on Endpoint 4, check USB_EPSTS[22:20] to know which kind of USB event was occurred, cleared by write 1 to USB_INTSTS[20] or USB_INTSTS[1]. + * |[21] |EPEVT5 |Endpoint 5's USB Event Status + * | | |0 = No event occurred on endpoint 5. + * | | |1 = USB event occurred on Endpoint 5, check USB_EPSTS[25:23] to know which kind of USB event was occurred, cleared by write 1 to USB_INTSTS[21] or USB_INTSTS[1]. + * |[22] |EPEVT6 |Endpoint 6's USB Event Status + * | | |0 = No event occurred on endpoint 6. + * | | |1 = USB event occurred on Endpoint 6, check USB_EPSTS[28:26] to know which kind of USB event was occurred, cleared by write 1 to USB_INTSTS[22] or USB_INTSTS[1]. + * |[23] |EPEVT7 |Endpoint 7's USB Event Status + * | | |0 = No event occurred on endpoint 7. + * | | |1 = USB event occurred on Endpoint 7, check USB_EPSTS[31:29] to know which kind of USB event was occurred, cleared by write 1 to USB_INTSTS[23] or USB_INTSTS[1]. + * |[31] |SETUP |Setup Event Status + * | | |0 = No Setup event. + * | | |1 = SETUP event occurred, cleared by write 1 to USB_INTSTS[31]. + * @var USBD_T::FADDR + * Offset: 0x08 USB Device Function Address Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[6:0] |FADDR |USB Device Function Address + * @var USBD_T::EPSTS + * Offset: 0x0C USB Endpoint Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7] |OV |Overrun + * | | |It indicates that the received data is over the maximum payload number or not. + * | | |0 = No overrun. + * | | |1 = Out Data is more than the Max Payload in MXPLD register or the Setup Data is more than 8 Bytes. + * |[10:8] |EPSTS0 |Endpoint 0 Bus Status + * | | |These bits are used to indicate the current status of this endpoint + * | | |000 = In ACK. + * | | |001 = In NAK. + * | | |010 = Out Packet Data0 ACK. + * | | |110 = Out Packet Data1 ACK. + * | | |011 = Setup ACK. + * | | |111 = Isochronous transfer end. + * |[13:11] |EPSTS1 |Endpoint 1 Bus Status + * | | |These bits are used to indicate the current status of this endpoint + * | | |000 = In ACK. + * | | |001 = In NAK. + * | | |010 = Out Packet Data0 ACK. + * | | |110 = Out Packet Data1 ACK. + * | | |011 = Setup ACK. + * | | |111 = Isochronous transfer end. + * |[16:14] |EPSTS2 |Endpoint 2 Bus Status + * | | |These bits are used to indicate the current status of this endpoint + * | | |000 = In ACK. + * | | |001 = In NAK. + * | | |010 = Out Packet Data0 ACK. + * | | |110 = Out Packet Data1 ACK. + * | | |011 = Setup ACK. + * | | |111 = Isochronous transfer end. + * |[19:17] |EPSTS3 |Endpoint 3 Bus Status + * | | |These bits are used to indicate the current status of this endpoint + * | | |000 = In ACK. + * | | |001 = In NAK. + * | | |010 = Out Packet Data0 ACK. + * | | |110 = Out Packet Data1 ACK. + * | | |011 = Setup ACK. + * | | |111 = Isochronous transfer end. + * |[22:20] |EPSTS4 |Endpoint 4 Bus Status + * | | |These bits are used to indicate the current status of this endpoint + * | | |000 = In ACK. + * | | |001 = In NAK. + * | | |010 = Out Packet Data0 ACK. + * | | |110 = Out Packet Data1 ACK. + * | | |011 = Setup ACK. + * | | |111 = Isochronous transfer end. + * |[25:23] |EPSTS5 |Endpoint 5 Bus Status + * | | |These bits are used to indicate the current status of this endpoint + * | | |000 = In ACK. + * | | |001 = In NAK. + * | | |010 = Out Packet Data0 ACK. + * | | |110 = Out Packet Data1 ACK. + * | | |011 = Setup ACK. + * | | |111 = Isochronous transfer end. + * |[28:26] |EPSTS6 |Endpoint 6 Bus Status + * | | |These bits are used to indicate the current status of this endpoint + * | | |000 = In ACK. + * | | |001 = In NAK. + * | | |010 = Out Packet Data0 ACK. + * | | |110 = Out Packet Data1 ACK. + * | | |011 = Setup ACK. + * | | |111 = Isochronous transfer end. + * |[31:29] |EPSTS7 |Endpoint 7 Bus Status + * | | |These bits are used to indicate the current status of this endpoint + * | | |000 = In ACK. + * | | |001 = In NAK. + * | | |010 = Out Packet Data0 ACK. + * | | |110 = Out Packet Data1 ACK. + * | | |011 = Setup ACK. + * | | |111 = Isochronous transfer end. + * @var USBD_T::ATTR + * Offset: 0x10 USB Bus Status and Attribution Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |USBRST |USB Reset Status + * | | |0 = Bus no reset. + * | | |1 = Bus reset when SE0 (single-ended 0) is presented more than 2.5us. + * | | |Note: This bit is read only. + * |[1] |SUSPEND |Suspend Status + * | | |0 = Bus no suspend. + * | | |1 = Bus idle more than 3ms, either cable is plugged off or host is sleeping. + * | | |Note: This bit is read only. + * |[2] |RESUME |Resume Status + * | | |0 = No bus resume. + * | | |1 = Resume from suspend. + * | | |Note: This bit is read only. + * |[3] |TOUT |Time-Out Status + * | | |0 = No time-out. + * | | |1 = No Bus response more than 18 bits time. + * | | |Note: This bit is read only. + * |[4] |PHYEN |PHY Transceiver Function Enable + * | | |0 = PHY transceiver function Disabled. + * | | |1 = PHY transceiver function Enabled. + * |[5] |RWAKEUP |Remote Wake-Up + * | | |0 = Release the USB bus from K state. + * | | |1 = Force USB bus to K (USB_D+ low, USB_D- high) state, used for remote wake-up. + * |[7] |USBEN |USB Controller Enable + * | | |0 = USB Controller Disabled. + * | | |1 = USB Controller Enabled. + * |[8] |DPPUEN |Pull-Up Resistor On USB_D+ Enable + * | | |0 = Pull-up resistor in USB_D+ pin Disabled. + * | | |1 = Pull-up resistor in USB_D+ pin Enabled. + * |[9] |PWRDN |Power Down PHY Transceiver, Low Active (M45xD/M45xC Only) + * | | |0 = Power down related circuits of PHY transceiver. + * | | |1 = Turn on related circuits of PHY transceiver. + * |[10] |BYTEM |CPU Access USB SRAM Size Mode Selection + * | | |0 = Word mode: The size of the transfer from CPU to USB SRAM can be Word only. + * | | |1 = Byte mode: The size of the transfer from CPU to USB SRAM can be Byte only. + * @var USBD_T::VBUSDET + * Offset: 0x14 USB Device VBUS Detection Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |FLDET |Device VBUS Detected + * | | |0 = Controller is not attached into the USB host. + * | | |1 =Controller is attached into the BUS. + * @var USBD_T::STBUFSEG + * Offset: 0x18 Setup Token Buffer Segmentation Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[8:3] |STBUFSEG |Setup Token Buffer Segmentation + * | | |It is used to indicate the offset address for the SETUP token with the USB Device SRAM starting address The effective starting address is + * | | |USB_SRAM address + {STBUFSEG[8:3], 3'b000} + * | | |Where the USB_SRAM address = USBD_BA+0x100h. + * | | |Note: It is used for SETUP token only. + * @var USBD_T::SE0 + * Offset: 0x90 USB Drive SE0 Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |DRVSE0 |Drive Single Ended Zero In USB Bus + * | | |The Single Ended Zero (SE0) is when both lines (USB_D+ and USB_D-) are being pulled low. + * | | |0 = None. + * | | |1 = Force USB PHY transceiver to drive SE0. + * @var USBD_T::EP + * Offset: 0x500 ~ 0x57C USB End Point 0 ~ 7 Configuration Register + * --------------------------------------------------------------------------------------------------- + */ + + __IO uint32_t INTEN; /* Offset: 0x00 USB Interrupt Enable Register */ + __IO uint32_t INTSTS; /* Offset: 0x04 USB Interrupt Event Status Register */ + __IO uint32_t FADDR; /* Offset: 0x08 USB Device Function Address Register */ + __I uint32_t EPSTS; /* Offset: 0x0C USB Endpoint Status Register */ + __IO uint32_t ATTR; /* Offset: 0x10 USB Bus Status and Attribution Register */ + __I uint32_t VBUSDET; /* Offset: 0x14 USB Device VBUS Detection Register */ + __IO uint32_t STBUFSEG; /* Offset: 0x18 Setup Token Buffer Segmentation Register */ + __I uint32_t RESERVE0[29]; + __IO uint32_t SE0; /* Offset: 0x90 USB Drive SE0 Control Register */ + __I uint32_t RESERVE1[283]; + USBD_EP_T EP[8]; /* Offset: 0x500 ~ 0x57C USB End Point 0 ~ 7 Configuration Register */ + +} USBD_T; + + + +/** + @addtogroup USB_CONST USB Bit Field Definition + Constant Definitions for USB Controller +@{ */ + +#define USBD_INTEN_BUSIEN_Pos (0) /*!< USBD_T::INTEN: BUSIEN Position */ +#define USBD_INTEN_BUSIEN_Msk (0x1ul << USBD_INTEN_BUSIEN_Pos) /*!< USBD_T::INTEN: BUSIEN Mask */ + +#define USBD_INTEN_USBIEN_Pos (1) /*!< USBD_T::INTEN: USBIEN Position */ +#define USBD_INTEN_USBIEN_Msk (0x1ul << USBD_INTEN_USBIEN_Pos) /*!< USBD_T::INTEN: USBIEN Mask */ + +#define USBD_INTEN_VBDETIEN_Pos (2) /*!< USBD_T::INTEN: VBDETIEN Position */ +#define USBD_INTEN_VBDETIEN_Msk (0x1ul << USBD_INTEN_VBDETIEN_Pos) /*!< USBD_T::INTEN: VBDETIEN Mask */ + +#define USBD_INTEN_NEVWKIEN_Pos (3) /*!< USBD_T::INTEN: NEVWKIEN Position */ +#define USBD_INTEN_NEVWKIEN_Msk (0x1ul << USBD_INTEN_NEVWKIEN_Pos) /*!< USBD_T::INTEN: NEVWKIEN Mask */ + +#define USBD_INTEN_WKEN_Pos (8) /*!< USBD_T::INTEN: WKEN Position */ +#define USBD_INTEN_WKEN_Msk (0x1ul << USBD_INTEN_WKEN_Pos) /*!< USBD_T::INTEN: WKEN Mask */ + +#define USBD_INTEN_INNAKEN_Pos (15) /*!< USBD_T::INTEN: INNAKEN Position */ +#define USBD_INTEN_INNAKEN_Msk (0x1ul << USBD_INTEN_INNAKEN_Pos) /*!< USBD_T::INTEN: INNAKEN Mask */ + +#define USBD_INTSTS_BUSIF_Pos (0) /*!< USBD_T::INTSTS: BUSIF Position */ +#define USBD_INTSTS_BUSIF_Msk (0x1ul << USBD_INTSTS_BUSIF_Pos) /*!< USBD_T::INTSTS: BUSIF Mask */ + +#define USBD_INTSTS_USBIF_Pos (1) /*!< USBD_T::INTSTS: USBIF Position */ +#define USBD_INTSTS_USBIF_Msk (0x1ul << USBD_INTSTS_USBIF_Pos) /*!< USBD_T::INTSTS: USBIF Mask */ + +#define USBD_INTSTS_VBDETIF_Pos (2) /*!< USBD_T::INTSTS: VBDETIF Position */ +#define USBD_INTSTS_VBDETIF_Msk (0x1ul << USBD_INTSTS_VBDETIF_Pos) /*!< USBD_T::INTSTS: VBDETIF Mask */ + +#define USBD_INTSTS_NEVWKIF_Pos (3) /*!< USBD_T::INTSTS: NEVWKIF Position */ +#define USBD_INTSTS_NEVWKIF_Msk (0x1ul << USBD_INTSTS_NEVWKIF_Pos) /*!< USBD_T::INTSTS: NEVWKIF Mask */ + +#define USBD_INTSTS_EPEVT0_Pos (16) /*!< USBD_T::INTSTS: EPEVT0 Position */ +#define USBD_INTSTS_EPEVT0_Msk (0x1ul << USBD_INTSTS_EPEVT0_Pos) /*!< USBD_T::INTSTS: EPEVT0 Mask */ + +#define USBD_INTSTS_EPEVT1_Pos (17) /*!< USBD_T::INTSTS: EPEVT1 Position */ +#define USBD_INTSTS_EPEVT1_Msk (0x1ul << USBD_INTSTS_EPEVT1_Pos) /*!< USBD_T::INTSTS: EPEVT1 Mask */ + +#define USBD_INTSTS_EPEVT2_Pos (18) /*!< USBD_T::INTSTS: EPEVT2 Position */ +#define USBD_INTSTS_EPEVT2_Msk (0x1ul << USBD_INTSTS_EPEVT2_Pos) /*!< USBD_T::INTSTS: EPEVT2 Mask */ + +#define USBD_INTSTS_EPEVT3_Pos (19) /*!< USBD_T::INTSTS: EPEVT3 Position */ +#define USBD_INTSTS_EPEVT3_Msk (0x1ul << USBD_INTSTS_EPEVT3_Pos) /*!< USBD_T::INTSTS: EPEVT3 Mask */ + +#define USBD_INTSTS_EPEVT4_Pos (20) /*!< USBD_T::INTSTS: EPEVT4 Position */ +#define USBD_INTSTS_EPEVT4_Msk (0x1ul << USBD_INTSTS_EPEVT4_Pos) /*!< USBD_T::INTSTS: EPEVT4 Mask */ + +#define USBD_INTSTS_EPEVT5_Pos (21) /*!< USBD_T::INTSTS: EPEVT5 Position */ +#define USBD_INTSTS_EPEVT5_Msk (0x1ul << USBD_INTSTS_EPEVT5_Pos) /*!< USBD_T::INTSTS: EPEVT5 Mask */ + +#define USBD_INTSTS_EPEVT6_Pos (22) /*!< USBD_T::INTSTS: EPEVT6 Position */ +#define USBD_INTSTS_EPEVT6_Msk (0x1ul << USBD_INTSTS_EPEVT6_Pos) /*!< USBD_T::INTSTS: EPEVT6 Mask */ + +#define USBD_INTSTS_EPEVT7_Pos (23) /*!< USBD_T::INTSTS: EPEVT7 Position */ +#define USBD_INTSTS_EPEVT7_Msk (0x1ul << USBD_INTSTS_EPEVT7_Pos) /*!< USBD_T::INTSTS: EPEVT7 Mask */ + +#define USBD_INTSTS_SETUP_Pos (31) /*!< USBD_T::INTSTS: SETUP Position */ +#define USBD_INTSTS_SETUP_Msk (0x1ul << USBD_INTSTS_SETUP_Pos) /*!< USBD_T::INTSTS: SETUP Mask */ + +#define USBD_FADDR_FADDR_Pos (0) /*!< USBD_T::FADDR: FADDR Position */ +#define USBD_FADDR_FADDR_Msk (0x7ful << USBD_FADDR_FADDR_Pos) /*!< USBD_T::FADDR: FADDR Mask */ + +#define USBD_EPSTS_OV_Pos (7) /*!< USBD_T::EPSTS: OV Position */ +#define USBD_EPSTS_OV_Msk (0x1ul << USBD_EPSTS_OV_Pos) /*!< USBD_T::EPSTS: OV Mask */ + +#define USBD_EPSTS_EPSTS0_Pos (8) /*!< USBD_T::EPSTS: EPSTS0 Position */ +#define USBD_EPSTS_EPSTS0_Msk (0x7ul << USBD_EPSTS_EPSTS0_Pos) /*!< USBD_T::EPSTS: EPSTS0 Mask */ + +#define USBD_EPSTS_EPSTS1_Pos (11) /*!< USBD_T::EPSTS: EPSTS1 Position */ +#define USBD_EPSTS_EPSTS1_Msk (0x7ul << USBD_EPSTS_EPSTS1_Pos) /*!< USBD_T::EPSTS: EPSTS1 Mask */ + +#define USBD_EPSTS_EPSTS2_Pos (14) /*!< USBD_T::EPSTS: EPSTS2 Position */ +#define USBD_EPSTS_EPSTS2_Msk (0x7ul << USBD_EPSTS_EPSTS2_Pos) /*!< USBD_T::EPSTS: EPSTS2 Mask */ + +#define USBD_EPSTS_EPSTS3_Pos (17) /*!< USBD_T::EPSTS: EPSTS3 Position */ +#define USBD_EPSTS_EPSTS3_Msk (0x7ul << USBD_EPSTS_EPSTS3_Pos) /*!< USBD_T::EPSTS: EPSTS3 Mask */ + +#define USBD_EPSTS_EPSTS4_Pos (20) /*!< USBD_T::EPSTS: EPSTS4 Position */ +#define USBD_EPSTS_EPSTS4_Msk (0x7ul << USBD_EPSTS_EPSTS4_Pos) /*!< USBD_T::EPSTS: EPSTS4 Mask */ + +#define USBD_EPSTS_EPSTS5_Pos (23) /*!< USBD_T::EPSTS: EPSTS5 Position */ +#define USBD_EPSTS_EPSTS5_Msk (0x7ul << USBD_EPSTS_EPSTS5_Pos) /*!< USBD_T::EPSTS: EPSTS5 Mask */ + +#define USBD_EPSTS_EPSTS6_Pos (26) /*!< USBD_T::EPSTS: EPSTS6 Position */ +#define USBD_EPSTS_EPSTS6_Msk (0x7ul << USBD_EPSTS_EPSTS6_Pos) /*!< USBD_T::EPSTS: EPSTS6 Mask */ + +#define USBD_EPSTS_EPSTS7_Pos (29) /*!< USBD_T::EPSTS: EPSTS7 Position */ +#define USBD_EPSTS_EPSTS7_Msk (0x7ul << USBD_EPSTS_EPSTS7_Pos) /*!< USBD_T::EPSTS: EPSTS7 Mask */ + +#define USBD_ATTR_USBRST_Pos (0) /*!< USBD_T::ATTR: USBRST Position */ +#define USBD_ATTR_USBRST_Msk (0x1ul << USBD_ATTR_USBRST_Pos) /*!< USBD_T::ATTR: USBRST Mask */ + +#define USBD_ATTR_SUSPEND_Pos (1) /*!< USBD_T::ATTR: SUSPEND Position */ +#define USBD_ATTR_SUSPEND_Msk (0x1ul << USBD_ATTR_SUSPEND_Pos) /*!< USBD_T::ATTR: SUSPEND Mask */ + +#define USBD_ATTR_RESUME_Pos (2) /*!< USBD_T::ATTR: RESUME Position */ +#define USBD_ATTR_RESUME_Msk (0x1ul << USBD_ATTR_RESUME_Pos) /*!< USBD_T::ATTR: RESUME Mask */ + +#define USBD_ATTR_TOUT_Pos (3) /*!< USBD_T::ATTR: TOUT Position */ +#define USBD_ATTR_TOUT_Msk (0x1ul << USBD_ATTR_TOUT_Pos) /*!< USBD_T::ATTR: TOUT Mask */ + +#define USBD_ATTR_PHYEN_Pos (4) /*!< USBD_T::ATTR: PHYEN Position */ +#define USBD_ATTR_PHYEN_Msk (0x1ul << USBD_ATTR_PHYEN_Pos) /*!< USBD_T::ATTR: PHYEN Mask */ + +#define USBD_ATTR_RWAKEUP_Pos (5) /*!< USBD_T::ATTR: RWAKEUP Position */ +#define USBD_ATTR_RWAKEUP_Msk (0x1ul << USBD_ATTR_RWAKEUP_Pos) /*!< USBD_T::ATTR: RWAKEUP Mask */ + +#define USBD_ATTR_USBEN_Pos (7) /*!< USBD_T::ATTR: USBEN Position */ +#define USBD_ATTR_USBEN_Msk (0x1ul << USBD_ATTR_USBEN_Pos) /*!< USBD_T::ATTR: USBEN Mask */ + +#define USBD_ATTR_DPPUEN_Pos (8) /*!< USBD_T::ATTR: DPPUEN Position */ +#define USBD_ATTR_DPPUEN_Msk (0x1ul << USBD_ATTR_DPPUEN_Pos) /*!< USBD_T::ATTR: DPPUEN Mask */ + +#define USBD_ATTR_PWRDN_Pos (9) /*!< USBD_T::ATTR: PWRDN Position */ +#define USBD_ATTR_PWRDN_Msk (0x1ul << USBD_ATTR_PWRDN_Pos) /*!< USBD_T::ATTR: PWRDN Mask */ + +#define USBD_ATTR_BYTEM_Pos (10) /*!< USBD_T::ATTR: BYTEM Position */ +#define USBD_ATTR_BYTEM_Msk (0x1ul << USBD_ATTR_BYTEM_Pos) /*!< USBD_T::ATTR: BYTEM Mask */ + +#define USBD_VBUSDET_VBUSDET_Pos (0) /*!< USBD_T::VBUSDET: VBUSDET Position */ +#define USBD_VBUSDET_VBUSDET_Msk (0x1ul << USBD_VBUSDET_VBUSDET_Pos) /*!< USBD_T::VBUSDET: VBUSDET Mask */ + +#define USBD_STBUFSEG_STBUFSEG_Pos (3) /*!< USBD_T::STBUFSEG: STBUFSEG Position */ +#define USBD_STBUFSEG_STBUFSEG_Msk (0x3ful << USBD_STBUFSEG_STBUFSEG_Pos) /*!< USBD_T::STBUFSEG: STBUFSEG Mask */ + +#define USBD_SE0_SE0_Pos (0) /*!< USBD_T::SE0: SE0 Position */ +#define USBD_SE0_SE0_Msk (0x1ul << USBD_SE0_SE0_Pos) /*!< USBD_T::SE0: SE0 Mask */ + +#define USBD_BUFSEG_BUFSEG_Pos (3) /*!< USBD_EP_T::BUFSEG: BUFSEG Position */ +#define USBD_BUFSEG_BUFSEG_Msk (0x3ful << USBD_BUFSEG_BUFSEG_Pos) /*!< USBD_EP_T::BUFSEG: BUFSEG Mask */ + +#define USBD_MXPLD_MXPLD_Pos (0) /*!< USBD_EP_T::MXPLD: MXPLD Position */ +#define USBD_MXPLD_MXPLD_Msk (0x1fful << USBD_MXPLD_MXPLD_Pos) /*!< USBD_EP_T::MXPLD: MXPLD Mask */ + +#define USBD_CFG_EPNUM_Pos (0) /*!< USBD_EP_T::CFG: EPNUM Position */ +#define USBD_CFG_EPNUM_Msk (0xful << USBD_CFG_EPNUM_Pos) /*!< USBD_EP_T::CFG: EPNUM Mask */ + +#define USBD_CFG_ISOCH_Pos (4) /*!< USBD_EP_T::CFG: ISOCH Position */ +#define USBD_CFG_ISOCH_Msk (0x1ul << USBD_CFG_ISOCH_Pos) /*!< USBD_EP_T::CFG: ISOCH Mask */ + +#define USBD_CFG_STATE_Pos (5) /*!< USBD_EP_T::CFG: STATE Position */ +#define USBD_CFG_STATE_Msk (0x3ul << USBD_CFG_STATE_Pos) /*!< USBD_EP_T::CFG: STATE Mask */ + +#define USBD_CFG_DSQSYNC_Pos (7) /*!< USBD_EP_T::CFG: DSQSYNC Position */ +#define USBD_CFG_DSQSYNC_Msk (0x1ul << USBD_CFG_DSQSYNC_Pos) /*!< USBD_EP_T::CFG: DSQSYNC Mask */ + +#define USBD_CFG_CSTALL_Pos (9) /*!< USBD_EP_T::CFG: CSTALL Position */ +#define USBD_CFG_CSTALL_Msk (0x1ul << USBD_CFG_CSTALL_Pos) /*!< USBD_EP_T::CFG: CSTALL Mask */ + +#define USBD_CFGP_CLRRDY_Pos (0) /*!< USBD_EP_T::CFGP: CLRRDY Position */ +#define USBD_CFGP_CLRRDY_Msk (0x1ul << USBD_CFGP_CLRRDY_Pos) /*!< USBD_EP_T::CFGP: CLRRDY Mask */ + +#define USBD_CFGP_SSTALL_Pos (1) /*!< USBD_EP_T::CFGP: SSTALL Position */ +#define USBD_CFGP_SSTALL_Msk (0x1ul << USBD_CFGP_SSTALL_Pos) /*!< USBD_EP_T::CFGP: SSTALL Mask */ + +/**@}*/ /* USB_CONST */ +/**@}*/ /* end of USB register group */ + + +/*---------------------- USB Host Controller -------------------------*/ +/** + @addtogroup USBH USB Host Controller(USBH) + Memory Mapped Structure for USBH Controller +@{ */ + + +typedef struct +{ + + + + +/** + * @var USBH_T::HcRevision + * Offset: 0x00 Host Controller Revision Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |REV |Revision Number + * | | |Indicates the Open HCI Specification revision number implemented by the Hardware. + * | | |Host Controller supports 1.1 specification. + * | | |(X.Y = XYh). + * @var USBH_T::HcControl + * Offset: 0x04 Host Controller Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[1:0] |CBSR |Control Bulk Service Ratio + * | | |This specifies the service ratio between Control and Bulk EDs. + * | | |Before processing any of the non-periodic lists, HC must compare the ratio specified with its internal count on how many nonempty Control EDs have been processed, in determining whether to continue serving another Control ED or switching to Bulk EDs. + * | | |The internal count will be retained when crossing the frame boundary. + * | | |In case of reset, HCD is responsible for restoring this. + * | | |Value. + * | | |00 = Number of Control EDs over Bulk EDs served is 1:1. + * | | |01 = Number of Control EDs over Bulk EDs served is 2:1. + * | | |10 = Number of Control EDs over Bulk EDs served is 3:1. + * | | |11 = Number of Control EDs over Bulk EDs served is 4:1. + * |[2] |PLE |Periodic List Enable Bit + * | | |When set, this bit enables processing of the Periodic (interrupt and Isochronous) list. + * | | |The Host Controller checks this bit prior to attempting any periodic transfers in a frame. + * | | |0 = Disable the processing of the Periodic (Interrupt and Isochronous) list after next SOF (Start-Of-Frame). + * | | |1 = Enable the processing of the Periodic (Interrupt and Isochronous) list in the next frame. + * | | |Note: To enable the processing of the Isochronous list, user has to set both PLE and IE (HcControl[3]) high. + * |[3] |IE |Isochronous List Enable Bit + * | | |Both ISOEn and PLE (HcControl[2]) high enables Host Controller to process the Isochronous list. + * | | |Either ISOEn or PLE (HcControl[2]) is low disables Host Controller to process the Isochronous list. + * | | |0 = Disable the processing of the Isochronous list after next SOF (Start-Of-Frame). + * | | |1 = Enable the processing of the Isochronous list in the next frame if the PLE (HcControl[2]) is high, too. + * |[4] |CLE |Control List Enable Bit + * | | |0 = Disable processing of the Control list after next SOF (Start-Of-Frame). + * | | |1 = Enable processing of the Control list in the next frame. + * |[5] |BLE |Bulk List Enable Bit + * | | |0 = Disable processing of the Bulk list after next SOF (Start-Of-Frame). + * | | |1 = Enable processing of the Bulk list in the next frame. + * |[7:6] |HCFS |Host Controller Functional State + * | | |This field sets the Host Controller state. + * | | |The Controller may force a state change from USBSUSPEND to USBRESUME after detecting resume signaling from a downstream port. + * | | |States are: + * | | |00 = USBSUSPEND. + * | | |01 = USBRESUME. + * | | |10 = USBOPERATIONAL. + * | | |11 = USBRESET. + * @var USBH_T::HcCommandStatus + * Offset: 0x08 Host Controller CMD Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |HCR |Host Controller Reset + * | | |This bit is set to initiate the software reset of Host Controller. + * | | |This bit is cleared by the Host Controller, upon completed of the reset operation. + * | | |This bit, when set, didn't reset the Root Hub and no subsequent reset signaling be asserted to its downstream ports. + * | | |0 = Host Controller is not in software reset state. + * | | |1 = Host Controller is in software reset state. + * |[1] |CLF |Control List Filled + * | | |Set high to indicate there is an active TD on the Control List. + * | | |It may be set by either software or the Host Controller and cleared by the Host Controller each time it begins processing the head of the Control List. + * | | |0 = No active TD found or Host Controller begins to process the head of the Control list. + * | | |1 = An active TD added or found on the Control list. + * |[2] |BLF |Bulk List Filled + * | | |Set high to indicate there is an active TD on the Bulk list. + * | | |This bit may be set by either software or the Host Controller and cleared by the Host Controller each time it begins processing the head of the Bulk list. + * | | |0 = No active TD found or Host Controller begins to process the head of the Bulk list. + * | | |1 = An active TD added or found on the Bulk list. + * |[17:16] |SOC |Schedule Overrun Count + * | | |These bits are incremented on each scheduling overrun error. + * | | |It is initialized to 00b and wraps around at 11b. + * | | |This will be incremented when a scheduling overrun is detected even if SO (HcIntSts[0]) has already been set. + * @var USBH_T::HcInterruptStatus + * Offset: 0x0C Host Controller Interrupt Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |SO |Scheduling Overrun + * | | |Set when the List Processor determines a Schedule Overrun has occurred. + * | | |0 = Schedule Overrun didn't occur. + * | | |1 = Schedule Overrun has occurred. + * |[1] |WDH |Write Back Done Head + * | | |Set after the Host Controller has written HcDoneHead to HccaDoneHead. + * | | |Further updates of the HccaDoneHead will not occur until this bit has been cleared. + * | | |0 =.Host Controller didn't update HccaDoneHead. + * | | |1 =.Host Controller has written HcDoneHead to HccaDoneHead. + * |[2] |SF |Start Of Frame + * | | |Set when the Frame Management functional block signals a 'Start of Frame' event. + * | | |Host Control generates a SOF token at the same time. + * | | |0 =.Not the start of a frame. + * | | |1 =.Indicate the start of a frame and Host Controller generates a SOF token. + * |[3] |RD |Resume Detected + * | | |Set when Host Controller detects resume signaling on a downstream port. + * | | |0 = No resume signaling detected on a downstream port. + * | | |1 = Resume signaling detected on a downstream port. + * |[5] |FNO |Frame Number Overflow + * | | |This bit is set when bit 15 of Frame Number changes from 1 to 0 or from 0 to 1. + * | | |0 = The bit 15 of Frame Number didn't change. + * | | |1 = The bit 15 of Frame Number changes from 1 to 0 or from 0 to 1. + * |[6] |RHSC |Root Hub Status Change + * | | |This bit is set when the content of HcRhSts or the content of HcRhPrt1 register has changed. + * | | |0 = The content of HcRhSts and the content of HcRhPrt1 register didn't change. + * | | |1 = The content of HcRhSts or the content of HcRhPrt1 register has changed. + * @var USBH_T::HcInterruptEnable + * Offset: 0x10 Host Controller Interrupt Enable Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |SO |Scheduling Overrun Enable Bit + * | | |Write Operation: + * | | |0 = No effect. + * | | |1 = Enable interrupt generation due to SO (HcIntSts[0]). + * | | |Read Operation: + * | | |0 = Interrupt generation due to SO (HcIntSts[0]) disabled. + * | | |1 = Interrupt generation due to SO (HcIntSts[0]) enabled. + * |[1] |WDH |Write Back Done Head Enable Bit + * | | |Write Operation: + * | | |0 = No effect. + * | | |1 = Enable interrupt generation due to WDH (HcIntSts[1]). + * | | |Read Operation: + * | | |0 = Interrupt generation due to WDH (HcIntSts[1]) disabled. + * | | |1 = Interrupt generation due to WDH (HcIntSts[1]) enabled. + * |[2] |SF |Start Of Frame Enable Bit + * | | |Write Operation: + * | | |0 = No effect. + * | | |1 = Enable interrupt generation due to SF (HcIntSts[2]). + * | | |Read Operation: + * | | |0 = Interrupt generation due to SF (HcIntSts[2]) disabled. + * | | |1 = Interrupt generation due to SF (HcIntSts[2]) enabled. + * |[3] |RD |Resume Detected Enable Bit + * | | |Write Operation: + * | | |0 = No effect. + * | | |1 = Enable interrupt generation due to RD (HcIntSts[3]). + * | | |Read Operation: + * | | |0 = Interrupt generation due to RD (HcIntSts[3]) disabled. + * | | |1 = Interrupt generation due to RD (HcIntSts[3]) enabled. + * |[5] |FNO |Frame Number Overflow Enable Bit + * | | |Write Operation: + * | | |0 = No effect. + * | | |1 = Enable interrupt generation due to FNO (HcIntSts[5]). + * | | |Read Operation: + * | | |0 = Interrupt generation due to FNO (HcIntSts[5]) disabled. + * | | |1 = Interrupt generation due to FNO (HcIntSts[5]) enabled. + * |[6] |RHSC |Root Hub Status Change Enable Bit + * | | |Write Operation: + * | | |0 = No effect. + * | | |1 = Enable interrupt generation due to RHSC (HcIntSts[6]). + * | | |Read Operation: + * | | |0 = Interrupt generation due to RHSC (HcIntSts[6]) disabled. + * | | |1 = Interrupt generation due to RHSC (HcIntSts[6]) enabled. + * |[31] |MIE |Master Interrupt Enable Bit + * | | |This bit is a global interrupt enable. + * | | |A write of '1' allows interrupts to be enabled via the specific enable bits listed above. + * | | |Write Operation: + * | | |0 = No effect. + * | | |1 = Enable interrupt generation due to RHSC (HcIntSts[6]), FNO (HcIntSts[5]), RD (HcIntSts[3]), SF (HcIntSts[2]), WDH (HcIntSts[1]) or SO (HcIntSts[0]) if the corresponding bit in HcIntEn is high. + * | | |Read Operation: + * | | |0 = Interrupt generation due to RHSC (HcIntSts[6]), FNO (HcIntSts[5]), RD (HcIntSts[3]), SF (HcIntSts[2]), WDH (HcIntSts[1]) or SO (HcIntSts[0]) disabled even if the corresponding bit in HcIntEn is high. + * | | |1 = Interrupt generation due to RHSC (HcIntSts[6]), FNO (HcIntSts[5]), RD (HcIntSts[3]), SF (HcIntSts[2]), WDH (HcIntSts[1]) or SO (HcIntSts[0]) enabled if the corresponding bit in HcIntEn is high. + * @var USBH_T::HcInterruptDisable + * Offset: 0x14 Host Controller Interrupt Disable Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |SO |Scheduling Overrun Disable Bit + * | | |Write Operation: + * | | |0 = No effect. + * | | |1 = Disable interrupt generation due to SO (HcIntSts[0]). + * | | |Read Operation: + * | | |0 = Interrupt generation due to SO (HcIntSts[0]) disabled. + * | | |1 = Interrupt generation due to SO (HcIntSts[0]) enabled. + * |[1] |WDH |Write Back Done Head Disable Bit + * | | |Write Operation: + * | | |0 = No effect. + * | | |1 = Disable interrupt generation due to WDH (HcIntSts[1]). + * | | |Read Operation: + * | | |0 = Interrupt generation due to WDH (HcIntSts[1]) disabled. + * | | |1 = Interrupt generation due to WDH (HcIntSts[1]) enabled. + * |[2] |SF |Start Of Frame Disable Bit + * | | |Write Operation: + * | | |0 = No effect. + * | | |1 = Disable interrupt generation due to SF (HcIntSts[2]). + * | | |Read Operation: + * | | |0 = Interrupt generation due to SF (HcIntSts[2]) disabled. + * | | |1 = Interrupt generation due to SF (HcIntSts[2]) enabled. + * |[3] |RD |Resume Detected Disable Bit + * | | |Write Operation: + * | | |0 = No effect. + * | | |1 = Disable interrupt generation due to RD (HcIntSts[3]). + * | | |Read Operation: + * | | |0 = Interrupt generation due to RD (HcIntSts[3]) disabled. + * | | |1 = Interrupt generation due to RD (HcIntSts[3]) enabled. + * |[5] |FNO |Frame Number Overflow Disable Bit + * | | |Write Operation: + * | | |0 = No effect. + * | | |1 = Disable interrupt generation due to FNO (HcIntSts[5]). + * | | |Read Operation: + * | | |0 = Interrupt generation due to FNO (HcIntSts[5]) disabled. + * | | |1 = Interrupt generation due to FNO (HcIntSts[5]) enabled. + * |[6] |RHSC |Root Hub Status Change Disable Bit + * | | |Write Operation: + * | | |0 = No effect. + * | | |1 = Disable interrupt generation due to RHSC (HcIntSts[6]). + * | | |Read Operation: + * | | |0 = Interrupt generation due to RHSC (HcIntSts[6]) disabled. + * | | |1 = Interrupt generation due to RHSC (HcIntSts[6]) enabled. + * |[31] |MIE |Master Interrupt Disable Bit + * | | |Global interrupt disable. Writing '1' to disable all interrupts. + * | | |Write Operation: + * | | |0 = No effect. + * | | |1 = Disable interrupt generation due to RHSC (HcIntSts[6]), FNO (HcIntSts[5]), RD (HcIntSts[3]), SF (HcIntSts[2]), WDH (HcIntSts[1]) or SO (HcIntSts[0]) if the corresponding bit in HcIntEn is high. + * | | |Read Operation: + * | | |0 = Interrupt generation due to RHSC (HcIntSts[6]), FNO (HcIntSts[5]), RD (HcIntSts[3]), SF (HcIntSts[2]), WDH (HcIntSts[1]) or SO (HcIntSts[0]) disabled even if the corresponding bit in HcIntEn is high. + * | | |1 = Interrupt generation due to RHSC (HcIntSts[6]), FNO (HcIntSts[5]), RD (HcIntSts[3]), SF (HcIntSts[2]), WDH (HcIntSts[1]) or SO (HcIntSts[0]) enabled if the corresponding bit in HcIntEn is high. + * @var USBH_T::HcHCCA + * Offset: 0x18 Host Controller Communication Area Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:8] |HCCA |Host Controller Communication Area + * | | |Pointer to indicate base address of the Host Controller Communication Area (HCCA). + * @var USBH_T::HcPeriodCurrentED + * Offset: 0x1C Host Controller Period Current ED Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:4] |PCED |Periodic Current ED + * | | |Pointer to indicate physical address of the current Isochronous or Interrupt Endpoint Descriptor. + * @var USBH_T::HcControlHeadED + * Offset: 0x20 Host Controller Control Head ED Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:4] |CHED |Control Head ED + * | | |Pointer to indicate physical address of the first Endpoint Descriptor of the Control list. + * @var USBH_T::HcControlCurrentED + * Offset: 0x24 Host Controller Control Current ED Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:4] |CCED |Control Current Head ED + * | | |Pointer to indicate the physical address of the current Endpoint Descriptor of the Control list. + * @var USBH_T::HcBulkHeadED + * Offset: 0x28 Host Controller Bulk Head ED Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:4] |BHED |Bulk Head ED + * | | |Pointer to indicate the physical address of the first Endpoint Descriptor of the Bulk list. + * @var USBH_T::HcBulkCurrentED + * Offset: 0x2C Host Controller Bulk Current ED Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:4] |BCED |Bulk Current Head ED + * | | |Pointer to indicate the physical address of the current endpoint of the Bulk list. + * @var USBH_T::HcDoneHead + * Offset: 0x30 Host Controller Done Head Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:4] |DH |Done Head + * | | |Pointer to indicate the physical address of the last completed Transfer Descriptor that was added to the Done queue. + * @var USBH_T::HcFmInterval + * Offset: 0x34 Host Controller Frame Interval Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[13:0] |FI |Frame Interval + * | | |This field specifies the length of a frame as (bit times - 1). + * | | |For 12,000 bit times in a frame, a value of 11,999 is stored here. + * |[30:16] |FSMPS |FS Largest Data Packet + * | | |This field specifies a value that is loaded into the Largest Data Packet Counter at the beginning of each frame. + * |[31] |FIT |Frame Interval Toggle + * | | |This bit is toggled by Host Controller Driver when it loads a new value into FI (HcFmIntv[13:0]). + * | | |0 = Host Controller Driver didn't load new value into FI (HcFmIntv[13:0]). + * | | |1 = Host Controller Driver loads a new value into FI (HcFmIntv[13:0]). + * @var USBH_T::HcFmRemaining + * Offset: 0x38 Host Controller Frame Remaining Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[13:0] |FR |Frame Remaining + * | | |When the Host Controller is in the USBOPERATIONAL state, this 14-bit field decrements each 12 MHz clock period. + * | | |When the count reaches 0, (end of frame) the counter reloads with Frame Interval. + * | | |In addition, the counter loads when the Host Controller transitions into USBOPERATIONAL. + * |[31] |FRT |Frame Remaining Toggle + * | | |This bit is loaded from the FIT (HcFmIntv[31]) whenever FR (HcFmRem[13:0]) reaches 0. + * @var USBH_T::HcFmNumber + * Offset: 0x3C Host Controller Frame Number Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[15:0] |FN |Frame Number + * | | |This 16-bit incrementing counter field is incremented coincident with the re-load of FR (HcFmRem[13:0]). + * | | |The count rolls over from 'FFFFh' to '0h.'. + * @var USBH_T::HcPeriodicStart + * Offset: 0x40 Host Controller Periodic Start Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[13:0] |PS |Periodic Start + * | | |This field contains a value used by the List Processor to determine where in a frame the Periodic List processing must begin. + * @var USBH_T::HcLSThreshold + * Offset: 0x44 Host Controller Low-speed Threshold Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[11:0] |LST |Low-Speed Threshold + * | | |This field contains a value which is compared to the FR (HcFmRem[13:0]) field prior to initiating a Low-speed transaction. + * | | |The transaction is started only if FR (HcFmRem[13:0]) >= this field. + * | | |The value is calculated by Host Controller Driver with the consideration of transmission and setup overhead. + * @var USBH_T::HcRhDescriptorA + * Offset: 0x48 Host Controller Root Hub Descriptor A Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[7:0] |NDP |Number Downstream Ports + * | | |USB host control supports two downstream ports and only one port is available in this series of chip. + * |[8] |PSM |Power Switching Mode + * | | |This bit is used to specify how the power switching of the Root Hub ports is controlled. + * | | |0 = Global Switching. + * | | |1 = Individual Switching. + * |[11] |OCPM |Over Current Protection Mode + * | | |This bit describes how the over current status for the Root Hub ports reported. + * | | |This bit is only valid when NOCP (HcRhDeA[12]) is cleared. + * | | |0 = Global Over current. + * | | |1 = Individual Over current. + * |[12] |NOCP |No Over Current Protection + * | | |This bit describes how the over current status for the Root Hub ports reported. + * | | |0 = Over current status is reported. + * | | |1 = Over current status is not reported. + * @var USBH_T::HcRhDescriptorB + * Offset: 0x4C Host Controller Root Hub Descriptor B Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:16] |PPCM |Port Power Control Mask + * | | |Global power switching. + * | | |This field is only valid if PowerSwitchingMode is set (individual port switching). + * | | |When set, the port only responds to individual port power switching commands (Set/ClearPortPower). + * | | |When cleared, the port only responds to global power switching commands (Set/ClearGlobalPower). + * | | |0 = Port power controlled by global power switching. + * | | |1 = Port power controlled by port power switching. + * | | |Note: PPCM[15:2] and PPCM[0] are reserved. + * @var USBH_T::HcRhStatus + * Offset: 0x50 Host Controller Root Hub Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |LPS |Clear Global Power + * | | |In global power mode (PSM (HcRhDeA[8]) = 0), this bit is written to one to clear all ports' power. + * | | |This bit always read as zero. + * | | |Write Operation: + * | | |0 = No effect. + * | | |1 = Clear global power. + * |[1] |OCI |Over Current Indicator + * | | |This bit reflects the state of the over current status pin. + * | | |This field is only valid if NOCP (HcRhDesA[12]) and OCPM (HcRhDesA[11]) are cleared. + * | | |0 = No over current condition. + * | | |1 = Over current condition. + * |[15] |DRWE |Device Remote Wakeup Enable Bit + * | | |This bit controls if port's Connect Status Change as a remote wake-up event. + * | | |Write Operation: + * | | |0 = No effect. + * | | |1 = Enable Connect Status Change as a remote wake-up event. + * | | |Read Operation: + * | | |0 = Connect Status Change as a remote wake-up event disabled. + * | | |1 = Connect Status Change as a remote wake-up event enabled. + * |[16] |LPSC |Set Global Power + * | | |In global power mode (PSM (HcRhDeA[8]) = 0), this bit is written to one to enable power to all ports. + * | | |This bit always read as zero. + * | | |Write Operation: + * | | |0 = No effect. + * | | |1 = Set global power. + * |[17] |OCIC |Over Current Indicator Change + * | | |This bit is set by hardware when a change has occurred in OCI (HcRhSts[1]). + * | | |Write 1 to clear this bit to zero. + * | | |0 = OCI (HcRhSts[1]) didn't change. + * | | |1 = OCI (HcRhSts[1]) change. + * |[31] |CRWE |Clear Remote Wake-up Enable Bit + * | | |This bit is use to clear DRWE (HcRhSts[15]). + * | | |This bit always read as zero. + * | | |Write Operation: + * | | |0 = No effect. + * | | |1 = Clear DRWE (HcRhSts[15]). + * @var USBH_T::HcRhPortStatus + * Offset: 0x54 Host Controller Root Hub Port Status [1] + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |CCS |CurrentConnectStatus (Read) Or ClearPortEnable Bit (Write) + * | | |Write Operation: + * | | |0 = No effect. + * | | |1 = Clear port enable. + * | | |Read Operation: + * | | |0 = No device connected. + * | | |1 = Device connected. + * |[1] |PES |Port Enable Status + * | | |Write Operation: + * | | |0 = No effect. + * | | |1 = Set port enable. + * | | |Read Operation: + * | | |0 = Port Disabled. + * | | |1 = Port Enabled. + * |[2] |PSS |Port Suspend Status + * | | |This bit indicates the port is suspended + * | | |Write Operation: + * | | |0 = No effect. + * | | |1 = Set port suspend. + * | | |Read Operation: + * | | |0 = Port is not suspended. + * | | |1 = Port is selectively suspended. + * |[3] |POCI |Port Over Current Indicator (Read) Or Clear Port Suspend (Write) + * | | |This bit reflects the state of the over current status pin dedicated to this port. + * | | |This field is only valid if NOCP (HcRhDeA[12]) is cleared and OCPM (HcRhDeA[11]) is set. + * | | |This bit is also used to initiate the selective result sequence for the port. + * | | |Write Operation: + * | | |0 = No effect. + * | | |1 = Clear port suspend. + * | | |Read Operation: + * | | |0 = No over current condition. + * | | |1 = Over current condition. + * |[4] |PRS |Port Reset Status + * | | |This bit reflects the reset state of the port. + * | | |Write Operation: + * | | |0 = No effect. + * | | |1 = Set port reset. + * | | |Read Operation + * | | |0 = Port reset signal is not active. + * | | |1 = Port reset signal is active. + * |[8] |PPS |Port Power Status + * | | |This bit reflects the power state of the port regardless of the power switching mode. + * | | |Write Operation: + * | | |0 = No effect. + * | | |1 = Port Power Enabled. + * | | |Read Operation: + * | | |0 = Port power is Disabled. + * | | |1 = Port power is Enabled. + * |[9] |LSDA |Low Speed Device Attached (Read) Or Clear Port Power (Write) + * | | |This bit defines the speed (and bud idle) of the attached device. + * | | |It is only valid when CCS (HcRhPrt1[0]) is set. + * | | |This bit is also used to clear port power. + * | | |Write Operation: + * | | |0 = No effect. + * | | |1 = Clear PPS (HcRhPrt1[8]). + * | | |Read Operation: + * | | |0 = Full Speed device. + * | | |1 = Low-speed device. + * |[16] |CSC |Connect Status Change + * | | |This bit indicates connect or disconnect event has been detected (CCS + * | | |(HcRhPrt1[0]) changed). + * | | |Write 1 to clear this bit to zero. + * | | |0 = No connect/disconnect event (CCS (HcRhPrt1[0]) didn't change). + * | | |1 = Hardware detection of connect/disconnect event (CCS + * | | |(HcRhPrt1[0]) changed). + * |[17] |PESC |Port Enable Status Change + * | | |This bit indicates that the port has been disabled (PES (HcRhPrt1[1]) cleared) due to a hardware event. + * | | |Write 1 to clear this bit to zero. + * | | |0 = PES (HcRhPrt1[1]) didn't change. + * | | |1 = PES (HcRhPrt1[1]) changed. + * |[18] |PSSC |Port Suspend Status Change + * | | |This bit indicates the completion of the selective resume sequence for the port. + * | | |Write 1 to clear this bit to zero. + * | | |0 = Port resume is not completed. + * | | |1 = Port resume completed. + * |[19] |OCIC |Port Over Current Indicator Change + * | | |This bit is set when POCI (HcRhPrt1[3]) changes. + * | | |Write 1 to clear this bit to zero. + * | | |0 = POCI (HcRhPrt1[3]) didn't change. + * | | |1 = POCI (HcRhPrt1[3]) changes. + * |[20] |PRSC |Port Reset Status Change + * | | |This bit indicates that the port reset signal has completed. + * | | |Write 1 to clear this bit to zero. + * | | |0 = Port reset is not complete. + * | | |1 = Port reset is complete. + * @var USBH_T::HcPhyControl + * Offset: 0x200 USB Host Controller PHY Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[27] |STBYEN |USB Transceiver Standby Enable Bit + * | | |This bit controls if USB transceiver could enter the standby mode to reduce power consumption. + * | | |0 = The USB transceiver would never enter the standby mode. + * | | |1 = The USB transceiver will enter standby mode while port is in power off state (port power is inactive). + * @var USBH_T::HcMiscControl + * Offset: 0x204 USB Host Controller Miscellaneous Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[1] |ABORT |AHB Bus ERROR Response + * | | |This bit indicates there is an ERROR response received in AHB bus. + * | | |0 = No ERROR response received. + * | | |1 = ERROR response received. + * |[3] |OCAL |Over Current Active Low + * | | |This bit controls the polarity of over current flag from external power IC. + * | | |0 = Over current flag is high active. + * | | |1 = Over current flag is low active. + * |[16] |DPRT1 |Disable Port 1 + * | | |This bit controls if the connection between USB host controller and transceiver of port 1 is disabled. + * | | |If the connection is disabled, the USB host controller will not recognize any event of USB bus. + * | | |Set this bit high, the transceiver of port 1 will also be forced into the standby mode no matter what USB host controller operation is. + * | | |0 = The connection between USB host controller and transceiver of port 1 is enabled. + * | | |1 = The connection between USB host controller and transceiver of port 1 is disabled and the transceiver of port 1 will also be forced into the standby mode. + */ + + __I uint32_t HcRevision; /* Offset: 0x00 Host Controller Revision Register */ + __IO uint32_t HcControl; /* Offset: 0x04 Host Controller Control Register */ + __IO uint32_t HcCommandStatus; /* Offset: 0x08 Host Controller CMD Status Register */ + __IO uint32_t HcInterruptStatus; /* Offset: 0x0C Host Controller Interrupt Status Register */ + __IO uint32_t HcInterruptEnable; /* Offset: 0x10 Host Controller Interrupt Enable Register */ + __IO uint32_t HcInterruptDisable; /* Offset: 0x14 Host Controller Interrupt Disable Register */ + __IO uint32_t HcHCCA; /* Offset: 0x18 Host Controller Communication Area Register */ + __IO uint32_t HcPeriodCurrentED; /* Offset: 0x1C Host Controller Period Current ED Register */ + __IO uint32_t HcControlHeadED; /* Offset: 0x20 Host Controller Control Head ED Register */ + __IO uint32_t HcControlCurrentED; /* Offset: 0x24 Host Controller Control Current ED Register */ + __IO uint32_t HcBulkHeadED; /* Offset: 0x28 Host Controller Bulk Head ED Register */ + __IO uint32_t HcBulkCurrentED; /* Offset: 0x2C Host Controller Bulk Current ED Register */ + __IO uint32_t HcDoneHead; /* Offset: 0x30 Host Controller Done Head Register */ + __IO uint32_t HcFmInterval; /* Offset: 0x34 Host Controller Frame Interval Register */ + __I uint32_t HcFmRemaining; /* Offset: 0x38 Host Controller Frame Remaining Register */ + __I uint32_t HcFmNumber; /* Offset: 0x3C Host Controller Frame Number Register */ + __IO uint32_t HcPeriodicStart; /* Offset: 0x40 Host Controller Periodic Start Register */ + __IO uint32_t HcLSThreshold; /* Offset: 0x44 Host Controller Low-speed Threshold Register */ + __IO uint32_t HcRhDescriptorA; /* Offset: 0x48 Host Controller Root Hub Descriptor A Register */ + __IO uint32_t HcRhDescriptorB; /* Offset: 0x4C Host Controller Root Hub Descriptor B Register */ + __IO uint32_t HcRhStatus; /* Offset: 0x50 Host Controller Root Hub Status Register */ + __IO uint32_t HcRhPortStatus[2]; /* Offset: 0x54 Host Controller Root Hub Port Status [1] */ + __I uint32_t RESERVE0[105]; + __IO uint32_t HcPhyControl; /* Offset: 0x200 USB Host Controller PHY Control Register */ + __IO uint32_t HcMiscControl; /* Offset: 0x204 USB Host Controller Miscellaneous Control Register */ + +} USBH_T; + + + + +/** + @addtogroup USBH_CONST USBH Bit Field Definition + Constant Definitions for USBH Controller +@{ */ + +#define USBH_HcRevision_REV_Pos (0) /*!< USBH_T::HcRevision: REV Position */ +#define USBH_HcRevision_REV_Msk (0xfful << USBH_HcRevision_REV_Pos) /*!< USBH_T::HcRevision: REV Mask */ + +#define USBH_HcControl_CBSR_Pos (0) /*!< USBH_T::HcControl: CBSR Position */ +#define USBH_HcControl_CBSR_Msk (0x3ul << USBH_HcControl_CBSR_Pos) /*!< USBH_T::HcControl: CBSR Mask */ + +#define USBH_HcControl_PLE_Pos (2) /*!< USBH_T::HcControl: CBSR Position */ +#define USBH_HcControl_PLE_Msk (0x1ul << USBH_HcControl_PLE_Pos) /*!< USBH_T::HcControl: CBSR Mask */ + +#define USBH_HcControl_IE_Pos (3) /*!< USBH_T::HcControl: IE Position */ +#define USBH_HcControl_IE_Msk (0x1ul << USBH_HcControl_IE_Pos) /*!< USBH_T::HcControl: IE Mask */ + +#define USBH_HcControl_CLE_Pos (4) /*!< USBH_T::HcControl: CLE Position */ +#define USBH_HcControl_CLE_Msk (0x1ul << USBH_HcControl_CLE_Pos) /*!< USBH_T::HcControl: CLE Mask */ + +#define USBH_HcControl_BLE_Pos (5) /*!< USBH_T::HcControl: BLE Position */ +#define USBH_HcControl_BLE_Msk (0x1ul << USBH_HcControl_BLE_Pos) /*!< USBH_T::HcControl: BLE Mask */ + +#define USBH_HcControl_HCFS_Pos (6) /*!< USBH_T::HcControl: HCFS Position */ +#define USBH_HcControl_HCFS_Msk (0x3ul << USBH_HcControl_HCFS_Pos) /*!< USBH_T::HcControl: HCFS Mask */ + +#define USBH_HcCommandStatus_HCR_Pos (0) /*!< USBH_T::HcCommandStatus: HCR Position */ +#define USBH_HcCommandStatus_HCR_Msk (0x1ul << USBH_HcCommandStatus_HCR_Pos) /*!< USBH_T::HcCommandStatus: HCR Mask */ + +#define USBH_HcCommandStatus_CLF_Pos (1) /*!< USBH_T::HcCommandStatus: CLF Position */ +#define USBH_HcCommandStatus_CLF_Msk (0x1ul << USBH_HcCommandStatus_CLF_Pos) /*!< USBH_T::HcCommandStatus: CLF Mask */ + +#define USBH_HcCommandStatus_BLF_Pos (2) /*!< USBH_T::HcCommandStatus: BLF Position */ +#define USBH_HcCommandStatus_BLF_Msk (0x1ul << USBH_HcCommandStatus_BLF_Pos) /*!< USBH_T::HcCommandStatus: BLF Mask */ + +#define USBH_HcCommandStatus_SOC_Pos (16) /*!< USBH_T::HcCommandStatus: SOC Position */ +#define USBH_HcCommandStatus_SOC_Msk (0x3ul << USBH_HcCommandStatus_SOC_Pos) /*!< USBH_T::HcCommandStatus: SOC Mask */ + +#define USBH_HcInterruptStatus_SO_Pos (0) /*!< USBH_T::HcInterruptStatus: SO Position */ +#define USBH_HcInterruptStatus_SO_Msk (0x1ul << USBH_HcInterruptStatus_SO_Pos) /*!< USBH_T::HcInterruptStatus: SO Mask */ + +#define USBH_HcInterruptStatus_WDH_Pos (1) /*!< USBH_T::HcInterruptStatus: WDH Position */ +#define USBH_HcInterruptStatus_WDH_Msk (0x1ul << USBH_HcInterruptStatus_WDH_Pos) /*!< USBH_T::HcInterruptStatus: WDH Mask */ + +#define USBH_HcInterruptStatus_SF_Pos (2) /*!< USBH_T::HcInterruptStatus: SF Position */ +#define USBH_HcInterruptStatus_SF_Msk (0x1ul << USBH_HcInterruptStatus_SF_Pos) /*!< USBH_T::HcInterruptStatus: SF Mask */ + +#define USBH_HcInterruptStatus_RD_Pos (3) /*!< USBH_T::HcInterruptStatus: RD Position */ +#define USBH_HcInterruptStatus_RD_Msk (0x1ul << USBH_HcInterruptStatus_RD_Pos) /*!< USBH_T::HcInterruptStatus: RD Mask */ + +#define USBH_HcInterruptStatus_FNO_Pos (5) /*!< USBH_T::HcInterruptStatus: FNO Position */ +#define USBH_HcInterruptStatus_FNO_Msk (0x1ul << USBH_HcInterruptStatus_FNO_Pos) /*!< USBH_T::HcInterruptStatus: FNO Mask */ + +#define USBH_HcInterruptStatus_RHSC_Pos (6) /*!< USBH_T::HcInterruptStatus: RHSC Position */ +#define USBH_HcInterruptStatus_RHSC_Msk (0x1ul << USBH_HcInterruptStatus_RHSC_Pos) /*!< USBH_T::HcInterruptStatus: RHSC Mask */ + +#define USBH_HcInterruptEnable_SO_Pos (0) /*!< USBH_T::HcInterruptEnable: SO Position */ +#define USBH_HcInterruptEnable_SO_Msk (0x1ul << USBH_HcInterruptEnable_SO_Pos) /*!< USBH_T::HcInterruptEnable: SO Mask */ + +#define USBH_HcInterruptEnable_WDH_Pos (1) /*!< USBH_T::HcInterruptEnable: WDH Position */ +#define USBH_HcInterruptEnable_WDH_Msk (0x1ul << USBH_HcInterruptEnable_WDH_Pos) /*!< USBH_T::HcInterruptEnable: WDH Mask */ + +#define USBH_HcInterruptEnable_SF_Pos (2) /*!< USBH_T::HcInterruptEnable: SF Position */ +#define USBH_HcInterruptEnable_SF_Msk (0x1ul << USBH_HcInterruptEnable_SF_Pos) /*!< USBH_T::HcInterruptEnable: SF Mask */ + +#define USBH_HcInterruptEnable_RD_Pos (3) /*!< USBH_T::HcInterruptEnable: RD Position */ +#define USBH_HcInterruptEnable_RD_Msk (0x1ul << USBH_HcInterruptEnable_RD_Pos) /*!< USBH_T::HcInterruptEnable: RD Mask */ + +#define USBH_HcInterruptEnable_FNO_Pos (5) /*!< USBH_T::HcInterruptEnable: FNO Position */ +#define USBH_HcInterruptEnable_FNO_Msk (0x1ul << USBH_HcInterruptEnable_FNO_Pos) /*!< USBH_T::HcInterruptEnable: FNO Mask */ + +#define USBH_HcInterruptEnable_RHSC_Pos (6) /*!< USBH_T::HcInterruptEnable: RHSC Position */ +#define USBH_HcInterruptEnable_RHSC_Msk (0x1ul << USBH_HcInterruptEnable_RHSC_Pos) /*!< USBH_T::HcInterruptEnable: RHSC Mask */ + +#define USBH_HcInterruptEnable_MIE_Pos (31) /*!< USBH_T::HcInterruptEnable: MIE Position */ +#define USBH_HcInterruptEnable_MIE_Msk (0x1ul << USBH_HcInterruptEnable_MIE_Pos) /*!< USBH_T::HcInterruptEnable: MIE Mask */ + +#define USBH_HcInterruptDisable_SO_Pos (0) /*!< USBH_T::HcInterruptDisable: SO Position */ +#define USBH_HcInterruptDisable_SO_Msk (0x1ul << USBH_HcInterruptDisable_SO_Pos) /*!< USBH_T::HcInterruptDisable: SO Mask */ + +#define USBH_HcInterruptDisable_WDH_Pos (1) /*!< USBH_T::HcInterruptDisable: WDH Position */ +#define USBH_HcInterruptDisable_WDH_Msk (0x1ul << USBH_HcInterruptDisable_WDH_Pos) /*!< USBH_T::HcInterruptDisable: WDH Mask */ + +#define USBH_HcInterruptDisable_SF_Pos (2) /*!< USBH_T::HcInterruptDisable: SF Position */ +#define USBH_HcInterruptDisable_SF_Msk (0x1ul << USBH_HcInterruptDisable_SF_Pos) /*!< USBH_T::HcInterruptDisable: SF Mask */ + +#define USBH_HcInterruptDisable_RD_Pos (3) /*!< USBH_T::HcInterruptDisable: RD Position */ +#define USBH_HcInterruptDisable_RD_Msk (0x1ul << USBH_HcInterruptDisable_RD_Pos) /*!< USBH_T::HcInterruptDisable: RD Mask */ + +#define USBH_HcInterruptDisable_FNO_Pos (5) /*!< USBH_T::HcInterruptDisable: FNO Position */ +#define USBH_HcInterruptDisable_FNO_Msk (0x1ul << USBH_HcInterruptDisable_FNO_Pos) /*!< USBH_T::HcInterruptDisable: FNO Mask */ + +#define USBH_HcInterruptDisable_RHSC_Pos (6) /*!< USBH_T::HcInterruptDisable: RHSC Position */ +#define USBH_HcInterruptDisable_RHSC_Msk (0x1ul << USBH_HcInterruptDisable_RHSC_Pos) /*!< USBH_T::HcInterruptDisable: RHSC Mask */ + +#define USBH_HcInterruptDisable_MIE_Pos (31) /*!< USBH_T::HcInterruptDisable: MIE Position */ +#define USBH_HcInterruptDisable_MIE_Msk (0x1ul << USBH_HcInterruptDisable_MIE_Pos) /*!< USBH_T::HcInterruptDisable: MIE Mask */ + +#define USBH_HcHCCA_HCCA_Pos (8) /*!< USBH_T::HcHCCA: HCCA Position */ +#define USBH_HcHCCA_HCCA_Msk (0xfffffful << USBH_HcHCCA_HCCA_Pos) /*!< USBH_T::HcHCCA: HCCA Mask */ + +#define USBH_HcPeriodCurrentED_PCED_Pos (4) /*!< USBH_T::HcPeriodCurrentED: PCED Position */ +#define USBH_HcPeriodCurrentED_PCED_Msk (0xffffffful << USBH_HcPeriodCurrentED_PCED_Pos) /*!< USBH_T::HcPeriodCurrentED: PCED Mask */ + +#define USBH_HcControlHeadED_CHED_Pos (4) /*!< USBH_T::HcControlHeadED: CHED Position */ +#define USBH_HcControlHeadED_CHED_Msk (0xffffffful << USBH_HcControlHeadED_CHED_Pos) /*!< USBH_T::HcControlHeadED: CHED Mask */ + +#define USBH_HcControlCurrentED_CCED_Pos (4) /*!< USBH_T::HcControlCurrentED: CCED Position */ +#define USBH_HcControlCurrentED_CCED_Msk (0xffffffful << USBH_HcControlCurrentED_CCED_Pos) /*!< USBH_T::HcControlCurrentED: CCED Mask */ + +#define USBH_HcBulkHeadED_BHED_Pos (4) /*!< USBH_T::HcBulkHeadED: BHED Position */ +#define USBH_HcBulkHeadED_BHED_Msk (0xffffffful << USBH_HcBulkHeadED_BHED_Pos) /*!< USBH_T::HcBulkHeadED: BHED Mask */ + +#define USBH_HcBulkCurrentED_BCED_Pos (4) /*!< USBH_T::HcBulkCurrentED: BCED Position */ +#define USBH_HcBulkCurrentED_BCED_Msk (0xffffffful << USBH_HcBulkCurrentED_BCED_Pos) /*!< USBH_T::HcBulkCurrentED: BCED Mask */ + +#define USBH_HcDoneHead_DH_Pos (4) /*!< USBH_T::HcDoneHead: DH Position */ +#define USBH_HcDoneHead_DH_Msk (0xffffffful << USBH_HcDoneHead_DH_Pos) /*!< USBH_T::HcDoneHead: DH Mask */ + +#define USBH_HcFmInterval_FI_Pos (0) /*!< USBH_T::HcFmInterval: FI Position */ +#define USBH_HcFmInterval_FI_Msk (0x3ffful << USBH_HcFmInterval_FI_Pos) /*!< USBH_T::HcFmInterval: FI Mask */ + +#define USBH_HcFmInterval_FSMPS_Pos (16) /*!< USBH_T::HcFmInterval: FSMPS Position */ +#define USBH_HcFmInterval_FSMPS_Msk (0x7ffful << USBH_HcFmInterval_FSMPS_Pos) /*!< USBH_T::HcFmInterval: FSMPS Mask */ + +#define USBH_HcFmInterval_FIT_Pos (31) /*!< USBH_T::HcFmInterval: FIT Position */ +#define USBH_HcFmInterval_FIT_Msk (0x1ul << USBH_HcFmInterval_FIT_Pos) /*!< USBH_T::HcFmInterval: FIT Mask */ + +#define USBH_HcFmRemaining_FR_Pos (0) /*!< USBH_T::HcFmRemaining: FR Position */ +#define USBH_HcFmRemaining_FR_Msk (0x3ffful << USBH_HcFmRemaining_FR_Pos) /*!< USBH_T::HcFmRemaining: FR Mask */ + +#define USBH_HcFmRemaining_FRT_Pos (31) /*!< USBH_T::HcFmRemaining: FRT Position */ +#define USBH_HcFmRemaining_FRT_Msk (0x1ul << USBH_HcFmRemaining_FRT_Pos) /*!< USBH_T::HcFmRemaining: FRT Mask */ + +#define USBH_HcFmNumber_FN_Pos (0) /*!< USBH_T::HcFmNumber: FN Position */ +#define USBH_HcFmNumber_FN_Msk (0xfffful << USBH_HcFmNumber_FN_Pos) /*!< USBH_T::HcFmNumber: FN Mask */ + +#define USBH_HcPeriodicStart_PS_Pos (0) /*!< USBH_T::HcPeriodicStart: PS Position */ +#define USBH_HcPeriodicStart_PS_Msk (0x3ffful << USBH_HcPeriodicStart_PS_Pos) /*!< USBH_T::HcPeriodicStart: PS Mask */ + +#define USBH_HcLSThreshold_LST_Pos (0) /*!< USBH_T::HcLSThreshold: LST Position */ +#define USBH_HcLSThreshold_LST_Msk (0xffful << USBH_HcLSThreshold_LST_Pos) /*!< USBH_T::HcLSThreshold: LST Mask */ + +#define USBH_HcRhDescriptorA_NDP_Pos (0) /*!< USBH_T::HcRhDescriptorA: NDP Position */ +#define USBH_HcRhDescriptorA_NDP_Msk (0xfful << USBH_HcRhDescriptorA_NDP_Pos) /*!< USBH_T::HcRhDescriptorA: NDP Mask */ + +#define USBH_HcRhDescriptorA_PSM_Pos (8) /*!< USBH_T::HcRhDescriptorA: PSM Position */ +#define USBH_HcRhDescriptorA_PSM_Msk (0x1ul << USBH_HcRhDescriptorA_PSM_Pos) /*!< USBH_T::HcRhDescriptorA: PSM Mask */ + +#define USBH_HcRhDescriptorA_OCPM_Pos (11) /*!< USBH_T::HcRhDescriptorA: OCPM Position */ +#define USBH_HcRhDescriptorA_OCPM_Msk (0x1ul << USBH_HcRhDescriptorA_OCPM_Pos) /*!< USBH_T::HcRhDescriptorA: OCPM Mask */ + +#define USBH_HcRhDescriptorA_NOCP_Pos (12) /*!< USBH_T::HcRhDescriptorA: NOCP Position */ +#define USBH_HcRhDescriptorA_NOCP_Msk (0x1ul << USBH_HcRhDescriptorA_NOCP_Pos) /*!< USBH_T::HcRhDescriptorA: NOCP Mask */ + +#define USBH_HcRhDescriptorB_PPCM_Pos (16) /*!< USBH_T::HcRhDescriptorB: PPCM Position */ +#define USBH_HcRhDescriptorB_PPCM_Msk (0xfffful << USBH_HcRhDescriptorB_PPCM_Pos) /*!< USBH_T::HcRhDescriptorB: PPCM Mask */ + +#define USBH_HcRhStatus_LPS_Pos (0) /*!< USBH_T::HcRhStatus: LPS Position */ +#define USBH_HcRhStatus_LPS_Msk (0x1ul << USBH_HcRhStatus_LPS_Pos) /*!< USBH_T::HcRhStatus: LPS Mask */ + +#define USBH_HcRhStatus_OCI_Pos (1) /*!< USBH_T::HcRhStatus: OCI Position */ +#define USBH_HcRhStatus_OCI_Msk (0x1ul << USBH_HcRhStatus_OCI_Pos) /*!< USBH_T::HcRhStatus: OCI Mask */ + +#define USBH_HcRhStatus_DRWE_Pos (15) /*!< USBH_T::HcRhStatus: DRWE Position */ +#define USBH_HcRhStatus_DRWE_Msk (0x1ul << USBH_HcRhStatus_DRWE_Pos) /*!< USBH_T::HcRhStatus: DRWE Mask */ + +#define USBH_HcRhStatus_LPSC_Pos (16) /*!< USBH_T::HcRhStatus: LPSC Position */ +#define USBH_HcRhStatus_LPSC_Msk (0x1ul << USBH_HcRhStatus_LPSC_Pos) /*!< USBH_T::HcRhStatus: LPSC Mask */ + +#define USBH_HcRhStatus_OCIC_Pos (17) /*!< USBH_T::HcRhStatus: OCIC Position */ +#define USBH_HcRhStatus_OCIC_Msk (0x1ul << USBH_HcRhStatus_OCIC_Pos) /*!< USBH_T::HcRhStatus: OCIC Mask */ + +#define USBH_HcRhStatus_CRWE_Pos (31) /*!< USBH_T::HcRhStatus: CRWE Position */ +#define USBH_HcRhStatus_CRWE_Msk (0x1ul << USBH_HcRhStatus_CRWE_Pos) /*!< USBH_T::HcRhStatus: CRWE Mask */ + +#define USBH_HcRhPortStatus_CCS_Pos (0) /*!< USBH_T::HcRhPortStatus: CCS Position */ +#define USBH_HcRhPortStatus_CCS_Msk (0x1ul << USBH_HcRhPortStatus_CCS_Pos) /*!< USBH_T::HcRhPortStatus: CCS Mask */ + +#define USBH_HcRhPortStatus_PES_Pos (1) /*!< USBH_T::HcRhPortStatus: PES Position */ +#define USBH_HcRhPortStatus_PES_Msk (0x1ul << USBH_HcRhPortStatus_PES_Pos) /*!< USBH_T::HcRhPortStatus: PES Mask */ + +#define USBH_HcRhPortStatus_PSS_Pos (2) /*!< USBH_T::HcRhPortStatus: PSS Position */ +#define USBH_HcRhPortStatus_PSS_Msk (0x1ul << USBH_HcRhPortStatus_PSS_Pos) /*!< USBH_T::HcRhPortStatus: PSS Mask */ + +#define USBH_HcRhPortStatus_POCI_Pos (3) /*!< USBH_T::HcRhPortStatus: POCI Position */ +#define USBH_HcRhPortStatus_POCI_Msk (0x1ul << USBH_HcRhPortStatus_POCI_Pos) /*!< USBH_T::HcRhPortStatus: POCI Mask */ + +#define USBH_HcRhPortStatus_PRS_Pos (4) /*!< USBH_T::HcRhPortStatus: PRS Position */ +#define USBH_HcRhPortStatus_PRS_Msk (0x1ul << USBH_HcRhPortStatus_PRS_Pos) /*!< USBH_T::HcRhPortStatus: PRS Mask */ + +#define USBH_HcRhPortStatus_PPS_Pos (8) /*!< USBH_T::HcRhPortStatus: PPS Position */ +#define USBH_HcRhPortStatus_PPS_Msk (0x1ul << USBH_HcRhPortStatus_PPS_Pos) /*!< USBH_T::HcRhPortStatus: PPS Mask */ + +#define USBH_HcRhPortStatus_LSDA_Pos (9) /*!< USBH_T::HcRhPortStatus: LSDA Position */ +#define USBH_HcRhPortStatus_LSDA_Msk (0x1ul << USBH_HcRhPortStatus_LSDA_Pos) /*!< USBH_T::HcRhPortStatus: LSDA Mask */ + +#define USBH_HcRhPortStatus_CSC_Pos (16) /*!< USBH_T::HcRhPortStatus: CSC Position */ +#define USBH_HcRhPortStatus_CSC_Msk (0x1ul << USBH_HcRhPortStatus_CSC_Pos) /*!< USBH_T::HcRhPortStatus: CSC Mask */ + +#define USBH_HcRhPortStatus_PESC_Pos (17) /*!< USBH_T::HcRhPortStatus: PESC Position */ +#define USBH_HcRhPortStatus_PESC_Msk (0x1ul << USBH_HcRhPortStatus_PESC_Pos) /*!< USBH_T::HcRhPortStatus: PESC Mask */ + +#define USBH_HcRhPortStatus_PSSC_Pos (18) /*!< USBH_T::HcRhPortStatus: PSSC Position */ +#define USBH_HcRhPortStatus_PSSC_Msk (0x1ul << USBH_HcRhPortStatus_PSSC_Pos) /*!< USBH_T::HcRhPortStatus: PSSC Mask */ + +#define USBH_HcRhPortStatus_OCIC_Pos (19) /*!< USBH_T::HcRhPortStatus: OCIC Position */ +#define USBH_HcRhPortStatus_OCIC_Msk (0x1ul << USBH_HcRhPortStatus_OCIC_Pos) /*!< USBH_T::HcRhPortStatus: OCIC Mask */ + +#define USBH_HcRhPortStatus_PRSC_Pos (20) /*!< USBH_T::HcRhPortStatus: PRSC Position */ +#define USBH_HcRhPortStatus_PRSC_Msk (0x1ul << USBH_HcRhPortStatus_PRSC_Pos) /*!< USBH_T::HcRhPortStatus: PRSC Mask */ + +#define USBH_HcPhyControl_STBYEN_Pos (27) /*!< USBH_T::HcPhyControl: STBYEN Position */ +#define USBH_HcPhyControl_STBYEN_Msk (0x1ul << USBH_HcPhyControl_STBYEN_Pos) /*!< USBH_T::HcPhyControl: STBYEN Mask */ + +#define USBH_HcMiscControl_ABORT_Pos (1) /*!< USBH_T::HcMiscControl: ABORT Position */ +#define USBH_HcMiscControl_ABORT_Msk (0x1ul << USBH_HcMiscControl_ABORT_Pos) /*!< USBH_T::HcMiscControl: ABORT Mask */ + +#define USBH_HcMiscControl_OCAL_Pos (3) /*!< USBH_T::HcMiscControl: OCAL Position */ +#define USBH_HcMiscControl_OCAL_Msk (0x1ul << USBH_HcMiscControl_OCAL_Pos) /*!< USBH_T::HcMiscControl: OCAL Mask */ + +#define USBH_HcMiscControl_DPRT1_Pos (16) /*!< USBH_T::HcMiscControl: DPRT1 Position */ +#define USBH_HcMiscControl_DPRT1_Msk (0x1ul << USBH_HcMiscControl_DPRT1_Pos) /*!< USBH_T::HcMiscControl: DPRT1 Mask */ + +/**@}*/ /* USBH_CONST */ +/**@}*/ /* end of USBH register group */ + + +/*---------------------- Watch Dog Timer Controller -------------------------*/ +/** + @addtogroup WDT Watch Dog Timer Controller(WDT) + Memory Mapped Structure for WDT Controller +@{ */ + + +typedef struct +{ + + + + +/** + * @var WDT_T::CTL + * Offset: 0x00 WDT Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |RSTCNT |Reset WDT Up Counter (Write Protect) + * | | |0 = No effect. + * | | |1 = Reset the internal 18-bit WDT up counter value. + * | | |Note1: This bit is write protected. Refer to the SYS_REGLCTL register. + * | | |Note2: This bit will be automatically cleared by hardware. + * |[1] |RSTEN |WDT Time-Out Reset Enable Control (Write Protect) + * | | |Setting this bit will enable the WDT time-out reset function If the WDT up counter value has not been cleared after the specific WDT reset delay period expires. + * | | |0 = WDT time-out reset function Disabled. + * | | |1 = WDT time-out reset function Enabled. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[2] |RSTF |WDT Time-Out Reset Flag + * | | |This bit indicates the system has been reset by WDT time-out reset or not. + * | | |0 = WDT time-out reset did not occur. + * | | |1 = WDT time-out reset occurred. + * | | |Note: This bit is cleared by writing 1 to it. + * |[3] |IF |WDT Time-Out Interrupt Flag + * | | |This bit will set to 1 while WDT up counter value reaches the selected WDT time-out interval + * | | |0 = WDT time-out interrupt did not occur. + * | | |1 = WDT time-out interrupt occurred. + * | | |Note: This bit is cleared by writing 1 to it. + * |[4] |WKEN |WDT Time-Out Wake-Up Function Control (Write Protect) + * | | |If this bit is set to 1, while WDT time-out interrupt flag IF (WDT_CTL[3]) is generated to 1 and interrupt enable bit INTEN (WDT_CTL[6]) is enabled, the WDT time-out interrupt signal will generate a wake-up trigger event to chip. + * | | |0 = Wake-up trigger event Disabled if WDT time-out interrupt signal generated. + * | | |1 = Wake-up trigger event Enabled if WDT time-out interrupt signal generated. + * | | |Note1: This bit is write protected. Refer to the SYS_REGLCTL register. + * | | |Note2: Chip can be woken-up by WDT time-out interrupt signal generated only if WDT clock source is selected to 10 kHz oscillator. + * |[5] |WKF |WDT Time-Out Wake-Up Flag + * | | |This bit indicates the interrupt wake-up flag status of WDT + * | | |0 = WDT does not cause chip wake-up. + * | | |1 = Chip wake-up from Idle or Power-down mode if WDT time-out interrupt signal generated. + * | | |Note1: This bit is write protected. Refer to the SYS_REGLCTL register. + * | | |Note2: This bit is cleared by writing 1 to it. + * |[6] |INTEN |WDT Time-Out Interrupt Enable Control (Write Protect) + * | | |If this bit is enabled, the WDT time-out interrupt signal is generated and inform to CPU. + * | | |0 = WDT time-out interrupt Disabled. + * | | |1 = WDT time-out interrupt Enabled. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[7] |WDTEN |WDT Enable Control (Write Protect) + * | | |0 = WDT Disabled (This action will reset the internal up counter value). + * | | |1 = WDT Enabled. + * | | |Note1: This bit is write protected. Refer to the SYS_REGLCTL register. + * | | |Note2: If CWDTEN[2:0] (combined by Config0[31] and Config0[4:3]) bits is not configure to 111, this bit is forced as 1 and user cannot change this bit to 0. + * |[10:8] |TOUTSEL |WDT Time-Out Interval Selection (Write Protect) + * | | |These three bits select the time-out interval period for the WDT. + * | | |000 = (2^4)*TWDT. + * | | |001 = (2^6)*TWDT. + * | | |010 = (2^8)*TWDT. + * | | |011 = (2^10)*TWDT. + * | | |100 = (2^12)*TWDT. + * | | |101 = (2^14)*TWDT. + * | | |110 = (2^16)*TWDT. + * | | |111 = (2^18)*TWDT. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * |[31] |ICEDEBUG |ICE Debug Mode Acknowledge Disable Control (Write Protect) + * | | |0 = ICE debug mode acknowledgement affects WDT counting. + * | | |WDT up counter will be held while CPU is held by ICE. + * | | |1 = ICE debug mode acknowledgement Disabled. + * | | |WDT up counter will keep going no matter CPU is held by ICE or not. + * | | |Note: This bit is write protected. Refer to the SYS_REGLCTL register. + * @var WDT_T::ALTCTL + * Offset: 0x04 WDT Alternative Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[1:0] |RSTDSEL |WDT Reset Delay Selection (Write Protect) + * | | |When WDT time-out happened, user has a time named WDT Reset Delay Period to clear WDT counter by setting RSTCNT (WDT_CTL[0]) to prevent WDT time-out reset happened. + * | | |User can select a suitable setting of RSTDSEL for different WDT Reset Delay Period. + * | | |00 = WDT Reset Delay Period is 1026 * WDT_CLK. + * | | |01 = WDT Reset Delay Period is 130 * WDT_CLK. + * | | |10 = WDT Reset Delay Period is 18 * WDT_CLK. + * | | |11 = WDT Reset Delay Period is 3 * WDT_CLK. + * | | |Note1: This bit is write protected. Refer to the SYS_REGLCTL register. + * | | |Note2: This register will be reset to 0 if WDT time-out reset happened. + */ + + __IO uint32_t CTL; /* Offset: 0x00 WDT Control Register */ + __IO uint32_t ALTCTL; /* Offset: 0x04 WDT Alternative Control Register */ + +} WDT_T; + + + +/** + @addtogroup WDT_CONST WDT Bit Field Definition + Constant Definitions for WDT Controller +@{ */ + +#define WDT_CTL_RSTCNT_Pos (0) /*!< WDT_T::CTL: RSTCNT Position */ +#define WDT_CTL_RSTCNT_Msk (0x1ul << WDT_CTL_RSTCNT_Pos) /*!< WDT_T::CTL: RSTCNT Mask */ + +#define WDT_CTL_RSTEN_Pos (1) /*!< WDT_T::CTL: RSTEN Position */ +#define WDT_CTL_RSTEN_Msk (0x1ul << WDT_CTL_RSTEN_Pos) /*!< WDT_T::CTL: RSTEN Mask */ + +#define WDT_CTL_RSTF_Pos (2) /*!< WDT_T::CTL: RSTF Position */ +#define WDT_CTL_RSTF_Msk (0x1ul << WDT_CTL_RSTF_Pos) /*!< WDT_T::CTL: RSTF Mask */ + +#define WDT_CTL_IF_Pos (3) /*!< WDT_T::CTL: IF Position */ +#define WDT_CTL_IF_Msk (0x1ul << WDT_CTL_IF_Pos) /*!< WDT_T::CTL: IF Mask */ + +#define WDT_CTL_WKEN_Pos (4) /*!< WDT_T::CTL: WKEN Position */ +#define WDT_CTL_WKEN_Msk (0x1ul << WDT_CTL_WKEN_Pos) /*!< WDT_T::CTL: WKEN Mask */ + +#define WDT_CTL_WKF_Pos (5) /*!< WDT_T::CTL: WKF Position */ +#define WDT_CTL_WKF_Msk (0x1ul << WDT_CTL_WKF_Pos) /*!< WDT_T::CTL: WKF Mask */ + +#define WDT_CTL_INTEN_Pos (6) /*!< WDT_T::CTL: INTEN Position */ +#define WDT_CTL_INTEN_Msk (0x1ul << WDT_CTL_INTEN_Pos) /*!< WDT_T::CTL: INTEN Mask */ + +#define WDT_CTL_WDTEN_Pos (7) /*!< WDT_T::CTL: WDTEN Position */ +#define WDT_CTL_WDTEN_Msk (0x1ul << WDT_CTL_WDTEN_Pos) /*!< WDT_T::CTL: WDTEN Mask */ + +#define WDT_CTL_TOUTSEL_Pos (8) /*!< WDT_T::CTL: TOUTSEL Position */ +#define WDT_CTL_TOUTSEL_Msk (0x7ul << WDT_CTL_TOUTSEL_Pos) /*!< WDT_T::CTL: TOUTSEL Mask */ + +#define WDT_CTL_ICEDEBUG_Pos (31) /*!< WDT_T::CTL: ICEDEBUG Position */ +#define WDT_CTL_ICEDEBUG_Msk (0x1ul << WDT_CTL_ICEDEBUG_Pos) /*!< WDT_T::CTL: ICEDEBUG Mask */ + +#define WDT_ALTCTL_RSTDSEL_Pos (0) /*!< WDT_T::ALTCTL: RSTDSEL Position */ +#define WDT_ALTCTL_RSTDSEL_Msk (0x3ul << WDT_ALTCTL_RSTDSEL_Pos) /*!< WDT_T::ALTCTL: RSTDSEL Mask */ + +/**@}*/ /* WDT_CONST */ +/**@}*/ /* end of WDT register group */ + + +/*---------------------- Window Watchdog Timer -------------------------*/ +/** + @addtogroup WWDT Window Watchdog Timer(WWDT) + Memory Mapped Structure for WWDT Controller +@{ */ + + +typedef struct +{ + + + + +/** + * @var WWDT_T::RLDCNT + * Offset: 0x00 WWDT Reload Counter Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[31:0] |WWDT_RLDCNT|WWDT Reload Counter Register + * | | |Writing 0x00005AA5 to this register will reload the WWDT counter value to 0x3F. + * | | |Note: User can only write WWDT_RLDCNT register to reload WWDT counter value when current WWDT counter value between 0 and CMPDAT (WWDT_CTL[21:16]). + * | | |If user writes WWDT_RLDCNT when current WWDT counter value is larger than CMPDAT , WWDT reset signal will generate immediately. + * @var WWDT_T::CTL + * Offset: 0x04 WWDT Control Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |WWDTEN |WWDT Enable Control Bit + * | | |Set this bit to enable WWDT counter counting. + * | | |0 = WWDT counter is stopped. + * | | |1 = WWDT counter is starting counting. + * |[1] |INTEN |WWDT Interrupt Enable Control Bit + * | | |If this bit is enabled, the WWDT counter compare match interrupt signal is generated and inform to CPU. + * | | |0 = WWDT counter compare match interrupt Disabled. + * | | |1 = WWDT counter compare match interrupt Enabled. + * |[11:8] |PSCSEL |WWDT Counter Prescale Period Selection + * | | |0000 = Pre-scale is 1; Max time-out period is 1 * 64 * TWWDT. + * | | |0001 = Pre-scale is 2; Max time-out period is 2 * 64 * TWWDT. + * | | |0010 = Pre-scale is 4; Max time-out period is 4 * 64 * TWWDT. + * | | |0011 = Pre-scale is 8; Max time-out period is 8 * 64 * TWWDT. + * | | |0100 = Pre-scale is 16; Max time-out period is 16 * 64 * TWWDT. + * | | |0101 = Pre-scale is 32; Max time-out period is 32 * 64 * TWWDT. + * | | |0110 = Pre-scale is 64; Max time-out period is 64 * 64 * TWWDT. + * | | |0111 = Pre-scale is 128; Max time-out period is 128 * 64 * TWWDT. + * | | |1000 = Pre-scale is 192; Max time-out period is 192 * 64 * TWWDT. + * | | |1001 = Pre-scale is 256; Max time-out period is 256 * 64 * TWWDT. + * | | |1010 = Pre-scale is 384; Max time-out period is 384 * 64 * TWWDT. + * | | |1011 = Pre-scale is 512; Max time-out period is 512 * 64 * TWWDT. + * | | |1100 = Pre-scale is 768; Max time-out period is 768 * 64 * TWWDT. + * | | |1101 = Pre-scale is 1024; Max time-out period is 1024 * 64 * TWWDT. + * | | |1110 = Pre-scale is 1536; Max time-out period is 1536 * 64 * TWWDT. + * | | |1111 = Pre-scale is 2048; Max time-out period is 2048 * 64 * TWWDT. + * |[21:16] |CMPDAT |WWDT Window Compare Register + * | | |Set this register to adjust the valid reload window. + * | | |Note: User can only write WWDT_RLDCNT register to reload WWDT counter value when current WWDT counter value between 0 and CMPDAT. + * | | |If user writes WWDT_RLDCNT register when current WWDT counter value larger than CMPDAT, WWDT reset signal will generate immediately. + * |[31] |ICEDEBUG |ICE Debug Mode Acknowledge Disable Control + * | | |0 = ICE debug mode acknowledgement effects WWDT counting. + * | | |WWDT down counter will be held while CPU is held by ICE. + * | | |1 = ICE debug mode acknowledgement Disabled. + * | | |WWDT down counter will keep going no matter CPU is held by ICE or not. + * @var WWDT_T::STATUS + * Offset: 0x08 WWDT Status Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[0] |WWDTIF |WWDT Compare Match Interrupt Flag + * | | |This bit indicates the interrupt flag status of WWDT while WWDT counter value matches CMPDAT (WWDT_CTL[21:16]). + * | | |0 = No effect. + * | | |1 = WWDT counter value matches CMPDAT. + * | | |Note: This bit is cleared by writing 1 to it. + * |[1] |WWDTRF |WWDT Timer-Out Reset Flag + * | | |This bit indicates the system has been reset by WWDT time-out reset or not. + * | | |0 = WWDT time-out reset did not occur. + * | | |1 = WWDT time-out reset occurred. + * | | |Note: This bit is cleared by writing 1 to it. + * @var WWDT_T::CNT + * Offset: 0x0C WWDT Counter Value Register + * --------------------------------------------------------------------------------------------------- + * |Bits |Field |Descriptions + * | :----: | :----: | :---- | + * |[5:0] |CNTDAT |WWDT Counter Value + * | | |CNTDAT will be updated continuously to monitor 6-bit WWDT down counter value. + */ + + __O uint32_t RLDCNT; /* Offset: 0x00 WWDT Reload Counter Register */ + __IO uint32_t CTL; /* Offset: 0x04 WWDT Control Register */ + __IO uint32_t STATUS; /* Offset: 0x08 WWDT Status Register */ + __I uint32_t CNT; /* Offset: 0x0C WWDT Counter Value Register */ + +} WWDT_T; + + + +/** + @addtogroup WWDT_CONST WWDT Bit Field Definition + Constant Definitions for WWDT Controller +@{ */ + +#define WWDT_RLDCNT_WWDT_RLDCNT_Pos (0) /*!< WWDT_T::RLDCNT: WWDT_RLDCNT Position */ +#define WWDT_RLDCNT_WWDT_RLDCNT_Msk (0xfffffffful << WWDT_RLDCNT_WWDT_RLDCNT_Pos) /*!< WWDT_T::RLDCNT: WWDT_RLDCNT Mask */ + +#define WWDT_CTL_WWDTEN_Pos (0) /*!< WWDT_T::CTL: WWDTEN Position */ +#define WWDT_CTL_WWDTEN_Msk (0x1ul << WWDT_CTL_WWDTEN_Pos) /*!< WWDT_T::CTL: WWDTEN Mask */ + +#define WWDT_CTL_INTEN_Pos (1) /*!< WWDT_T::CTL: INTEN Position */ +#define WWDT_CTL_INTEN_Msk (0x1ul << WWDT_CTL_INTEN_Pos) /*!< WWDT_T::CTL: INTEN Mask */ + +#define WWDT_CTL_PSCSEL_Pos (8) /*!< WWDT_T::CTL: PSCSEL Position */ +#define WWDT_CTL_PSCSEL_Msk (0xful << WWDT_CTL_PSCSEL_Pos) /*!< WWDT_T::CTL: PSCSEL Mask */ + +#define WWDT_CTL_CMPDAT_Pos (16) /*!< WWDT_T::CTL: CMPDAT Position */ +#define WWDT_CTL_CMPDAT_Msk (0x3ful << WWDT_CTL_CMPDAT_Pos) /*!< WWDT_T::CTL: CMPDAT Mask */ + +#define WWDT_CTL_ICEDEBUG_Pos (31) /*!< WWDT_T::CTL: ICEDEBUG Position */ +#define WWDT_CTL_ICEDEBUG_Msk (0x1ul << WWDT_CTL_ICEDEBUG_Pos) /*!< WWDT_T::CTL: ICEDEBUG Mask */ + +#define WWDT_STATUS_WWDTIF_Pos (0) /*!< WWDT_T::STATUS: WWDTIF Position */ +#define WWDT_STATUS_WWDTIF_Msk (0x1ul << WWDT_STATUS_WWDTIF_Pos) /*!< WWDT_T::STATUS: WWDTIF Mask */ + +#define WWDT_STATUS_WWDTRF_Pos (1) /*!< WWDT_T::STATUS: WWDTRF Position */ +#define WWDT_STATUS_WWDTRF_Msk (0x1ul << WWDT_STATUS_WWDTRF_Pos) /*!< WWDT_T::STATUS: WWDTRF Mask */ + +#define WWDT_CNT_CNTDAT_Pos (0) /*!< WWDT_T::CNT: CNTDAT Position */ +#define WWDT_CNT_CNTDAT_Msk (0x3ful << WWDT_CNT_CNTDAT_Pos) /*!< WWDT_T::CNT: CNTDAT Mask */ + +/**@}*/ /* WWDT_CONST */ +/**@}*/ /* end of WWDT register group */ + + +/**@}*/ /* end of REGISTER group */ + + +/******************************************************************************/ +/* Peripheral memory map */ +/******************************************************************************/ +/** @addtogroup MemoryMap Memory Mapping + @{ +*/ + +/* Peripheral and SRAM base address */ +#define SRAM_BASE (0x20000000UL) /*!< (SRAM ) Base Address */ +#define PERIPH_BASE (0x40000000UL) /*!< (Peripheral) Base Address */ + + +/* Peripheral memory map */ +#define AHBPERIPH_BASE PERIPH_BASE +#define APBPERIPH_BASE (PERIPH_BASE + 0x00040000) + +/*!< AHB peripherals */ +#define GCR_BASE (AHBPERIPH_BASE + 0x00000) +#define CLK_BASE (AHBPERIPH_BASE + 0x00200) +#define INT_BASE (AHBPERIPH_BASE + 0x00300) +#define GPIO_BASE (AHBPERIPH_BASE + 0x04000) +#define GPIOA_BASE (AHBPERIPH_BASE + 0x04000) +#define GPIOB_BASE (AHBPERIPH_BASE + 0x04040) +#define GPIOC_BASE (AHBPERIPH_BASE + 0x04080) +#define GPIOD_BASE (AHBPERIPH_BASE + 0x040C0) +#define GPIOE_BASE (AHBPERIPH_BASE + 0x04100) +#define GPIOF_BASE (AHBPERIPH_BASE + 0x04140) +#define GPIO_DBCTL_BASE (AHBPERIPH_BASE + 0x04440) +#define GPIO_PIN_DATA_BASE (AHBPERIPH_BASE + 0x04800) +#define PDMA_BASE (AHBPERIPH_BASE + 0x08000) +#define USBH_BASE (AHBPERIPH_BASE + 0x09000) +#define FMC_BASE (AHBPERIPH_BASE + 0x0C000) +#define EBI_BASE (AHBPERIPH_BASE + 0x10000) +#define CRC_BASE (AHBPERIPH_BASE + 0x31000) + +/*!< APB0 peripherals */ +#define WDT_BASE (APBPERIPH_BASE + 0x00000) +#define WWDT_BASE (APBPERIPH_BASE + 0x00100) +#define TMR01_BASE (APBPERIPH_BASE + 0x10000) +#define PWM0_BASE (APBPERIPH_BASE + 0x18000) +#define SPI0_BASE (APBPERIPH_BASE + 0x20000) +#define SPI2_BASE (APBPERIPH_BASE + 0x22000) +#define UART0_BASE (APBPERIPH_BASE + 0x30000) +#define UART2_BASE (APBPERIPH_BASE + 0x32000) +#define I2C0_BASE (APBPERIPH_BASE + 0x40000) +#define SC0_BASE (APBPERIPH_BASE + 0x50000) +#define CAN0_BASE (APBPERIPH_BASE + 0x60000) +#define USBD_BASE (APBPERIPH_BASE + 0x80000) +#define TK_BASE (APBPERIPH_BASE + 0xA2000) + +/*!< APB1 peripherals */ +#define RTC_BASE (APBPERIPH_BASE + 0x01000) +#define EADC0_BASE (APBPERIPH_BASE + 0x03000) +#define ACMP01_BASE (APBPERIPH_BASE + 0x05000) +#define DAC_BASE (APBPERIPH_BASE + 0x07000) +#define OTG_BASE (APBPERIPH_BASE + 0x0D000) +#define TMR23_BASE (APBPERIPH_BASE + 0x11000) +#define PWM1_BASE (APBPERIPH_BASE + 0x19000) +#define SPI1_BASE (APBPERIPH_BASE + 0x21000) +#define UART1_BASE (APBPERIPH_BASE + 0x31000) +#define UART3_BASE (APBPERIPH_BASE + 0x33000) +#define I2C1_BASE (APBPERIPH_BASE + 0x41000) +/*@}*/ /* end of group MemoryMap */ + + +/******************************************************************************/ +/* Peripheral declaration */ +/******************************************************************************/ +/** @addtogroup PeripheralDecl Peripheral Declaration + @{ +*/ + + +#define SYS ((SYS_T *) GCR_BASE) +#define SYSINT ((SYS_INT_T *) INT_BASE) +#define CLK ((CLK_T *) CLK_BASE) +#define PA ((GPIO_T *) GPIOA_BASE) +#define PB ((GPIO_T *) GPIOB_BASE) +#define PC ((GPIO_T *) GPIOC_BASE) +#define PD ((GPIO_T *) GPIOD_BASE) +#define PE ((GPIO_T *) GPIOE_BASE) +#define PF ((GPIO_T *) GPIOF_BASE) +#define GPIO ((GPIO_DBCTL_T *) GPIO_DBCTL_BASE) +#define PDMA ((PDMA_T *) PDMA_BASE) +#define USBH ((USBH_T *) USBH_BASE) +#define FMC ((FMC_T *) FMC_BASE) +#define EBI ((EBI_T *) EBI_BASE) +#define CRC ((CRC_T *) CRC_BASE) + +#define WDT ((WDT_T *) WDT_BASE) +#define WWDT ((WWDT_T *) WWDT_BASE) +#define RTC ((RTC_T *) RTC_BASE) +#define EADC ((EADC_T *) EADC0_BASE) +#define ACMP01 ((ACMP_T *) ACMP01_BASE) + +#define USBD ((USBD_T *) USBD_BASE) +#define OTG ((OTG_T *) OTG_BASE) +#define TIMER0 ((TIMER_T *) TMR01_BASE) +#define TIMER1 ((TIMER_T *) (TMR01_BASE + 0x20)) +#define TIMER2 ((TIMER_T *) TMR23_BASE) +#define TIMER3 ((TIMER_T *) (TMR23_BASE+ 0x20)) +#define PWM0 ((PWM_T *) PWM0_BASE) +#define PWM1 ((PWM_T *) PWM1_BASE) +#define DAC ((DAC_T *) DAC_BASE) +#define SPI0 ((SPI_T *) SPI0_BASE) +#define SPI1 ((SPI_T *) SPI1_BASE) +#define SPI2 ((SPI_T *) SPI2_BASE) +#define UART0 ((UART_T *) UART0_BASE) +#define UART1 ((UART_T *) UART1_BASE) +#define UART2 ((UART_T *) UART2_BASE) +#define UART3 ((UART_T *) UART3_BASE) +#define I2C0 ((I2C_T *) I2C0_BASE) +#define I2C1 ((I2C_T *) I2C1_BASE) +#define SC0 ((SC_T *) SC0_BASE) +#define CAN0 ((CAN_T *) CAN0_BASE) +#define TK ((TK_T *) TK_BASE) + +/* One Bit Mask Definitions */ +#define BIT0 0x00000001 +#define BIT1 0x00000002 +#define BIT2 0x00000004 +#define BIT3 0x00000008 +#define BIT4 0x00000010 +#define BIT5 0x00000020 +#define BIT6 0x00000040 +#define BIT7 0x00000080 +#define BIT8 0x00000100 +#define BIT9 0x00000200 +#define BIT10 0x00000400 +#define BIT11 0x00000800 +#define BIT12 0x00001000 +#define BIT13 0x00002000 +#define BIT14 0x00004000 +#define BIT15 0x00008000 +#define BIT16 0x00010000 +#define BIT17 0x00020000 +#define BIT18 0x00040000 +#define BIT19 0x00080000 +#define BIT20 0x00100000 +#define BIT21 0x00200000 +#define BIT22 0x00400000 +#define BIT23 0x00800000 +#define BIT24 0x01000000 +#define BIT25 0x02000000 +#define BIT26 0x04000000 +#define BIT27 0x08000000 +#define BIT28 0x10000000 +#define BIT29 0x20000000 +#define BIT30 0x40000000 +#define BIT31 0x80000000 + +/* Byte Mask Definitions */ +#define BYTE0_Msk (0x000000FF) +#define BYTE1_Msk (0x0000FF00) +#define BYTE2_Msk (0x00FF0000) +#define BYTE3_Msk (0xFF000000) + +#define _GET_BYTE0(u32Param) (((u32Param) & BYTE0_Msk) ) /*!< Extract Byte 0 (Bit 0~ 7) from parameter u32Param */ +#define _GET_BYTE1(u32Param) (((u32Param) & BYTE1_Msk) >> 8) /*!< Extract Byte 1 (Bit 8~15) from parameter u32Param */ +#define _GET_BYTE2(u32Param) (((u32Param) & BYTE2_Msk) >> 16) /*!< Extract Byte 2 (Bit 16~23) from parameter u32Param */ +#define _GET_BYTE3(u32Param) (((u32Param) & BYTE3_Msk) >> 24) /*!< Extract Byte 3 (Bit 24~31) from parameter u32Param */ + +#ifndef TRUE +# define TRUE 1 +#endif +#ifndef FALSE +# define FALSE 0 +#endif + +#ifndef NULL +#define NULL 0 +#endif + +#include "m451_sys.h" +#include "m451_clk.h" +#include "m451_gpio.h" +#include "m451_i2c.h" +#include "m451_crc.h" +#include "m451_ebi.h" +#include "m451_rtc.h" +#include "m451_timer.h" +#include "m451_wdt.h" +#include "m451_wwdt.h" +#include "m451_spi.h" +#include "m451_sc.h" +#include "m451_scuart.h" +#include "m451_acmp.h" +#include "m451_eadc.h" +#include "m451_dac.h" +#include "m451_can.h" +#include "m451_usbd.h" +#include "m451_fmc.h" +#include "m451_uart.h" +#include "m451_pwm.h" +#include "m451_pdma.h" +#include "m451_tk.h" +#include "m451_otg.h" + +typedef volatile unsigned char vu8; +typedef volatile unsigned long vu32; +typedef volatile unsigned short vu16; +#define M8(adr) (*((vu8 *) (adr))) +#define M16(adr) (*((vu16 *) (adr))) +#define M32(adr) (*((vu32 *) (adr))) + +#define outpw(port,value) (*((volatile unsigned int *)(port))=(value)) +#define inpw(port) (*((volatile unsigned int *)(port))) +#define outpb(port,value) (*((volatile unsigned char *)(port))=(value)) +#define inpb(port) (*((volatile unsigned char *)(port))) +#define outps(port,value) (*((volatile unsigned short *)(port))=(value)) +#define inps(port) (*((volatile unsigned short *)(port))) + +#define outp32(port,value) (*((volatile unsigned int *)(port))=(value)) +#define inp32(port) (*((volatile unsigned int *)(port))) +#define outp8(port,value) (*((volatile unsigned char *)(port))=(value)) +#define inp8(port) (*((volatile unsigned char *)(port))) +#define outp16(port,value) (*((volatile unsigned short *)(port))=(value)) +#define inp16(port) (*((volatile unsigned short *)(port))) + +/*@}*/ /* end of group PeripheralDecl */ + +#ifdef __cplusplus +} +#endif + +#endif /* __M451SERIES_H__ */ + +/*** (C) COPYRIGHT 2014~2015 Nuvoton Technology Corp. ***/ + + + diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_acmp.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_acmp.c new file mode 100644 index 00000000000..6b5edd12906 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_acmp.c @@ -0,0 +1,84 @@ +/**************************************************************************//** + * @file acmp.c + * @version V3.00 + * $Revision: 4 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series Analog Comparator(ACMP) driver source file + * + * @note + * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ + +#include "M451Series.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup ACMP_Driver ACMP Driver + @{ +*/ + + +/** @addtogroup ACMP_EXPORTED_FUNCTIONS ACMP Exported Functions + @{ +*/ + + +/** + * @brief Configure the specified ACMP module + * + * @param[in] Acmp The pointer of the specified ACMP module + * @param[in] u32ChNum Comparator number. + * @param[in] u32NegSrc Comparator negative input selection. Including: + * - \ref ACMP_CTL_NEGSEL_PIN + * - \ref ACMP_CTL_NEGSEL_CRV + * - \ref ACMP_CTL_NEGSEL_VBG + * - \ref ACMP_CTL_NEGSEL_DAC + * @param[in] u32HysteresisEn The hysteresis function option. Including: + * - \ref ACMP_CTL_HYSTERESIS_ENABLE + * - \ref ACMP_CTL_HYSTERESIS_DISABLE + * + * @return None + * + * @details Configure hysteresis function, select the source of negative input and enable analog comparator. + */ +void ACMP_Open(ACMP_T *Acmp, uint32_t u32ChNum, uint32_t u32NegSrc, uint32_t u32HysteresisEn) +{ + Acmp->CTL[u32ChNum] = (Acmp->CTL[u32ChNum] & (~(ACMP_CTL_NEGSEL_Msk | ACMP_CTL_HYSEN_Msk))) | (u32NegSrc | u32HysteresisEn | ACMP_CTL_ACMPEN_Msk); +} + +/** + * @brief Close analog comparator + * + * @param[in] Acmp The pointer of the specified ACMP module + * @param[in] u32ChNum Comparator number. + * + * @return None + * + * @details This function will clear ACMPEN bit of ACMP_CTL register to disable analog comparator. + */ +void ACMP_Close(ACMP_T *Acmp, uint32_t u32ChNum) +{ + Acmp->CTL[u32ChNum] &= (~ACMP_CTL_ACMPEN_Msk); +} + + + +/*@}*/ /* end of group ACMP_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group ACMP_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +#ifdef __cplusplus +} +#endif + +/*** (C) COPYRIGHT 2014~2015 Nuvoton Technology Corp. ***/ + diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_acmp.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_acmp.h new file mode 100644 index 00000000000..67857f42d1a --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_acmp.h @@ -0,0 +1,333 @@ +/**************************************************************************//** + * @file ACMP.h + * @version V0.10 + * $Revision: 10 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 Series ACMP Driver Header File + * + * @note + * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved. + * + ******************************************************************************/ +#ifndef __ACMP_H__ +#define __ACMP_H__ + +/*---------------------------------------------------------------------------------------------------------*/ +/* Include related headers */ +/*---------------------------------------------------------------------------------------------------------*/ +#include "M451Series.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup ACMP_Driver ACMP Driver + @{ +*/ + + +/** @addtogroup ACMP_EXPORTED_CONSTANTS ACMP Exported Constants + @{ +*/ + + + +/*---------------------------------------------------------------------------------------------------------*/ +/* ACMP_CTL constant definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define ACMP_CTL_FILTSEL_OFF (0UL << 13) /*!< ACMP_CTL setting for filter function disabled. */ +#define ACMP_CTL_FILTSEL_1PCLK (1UL << 13) /*!< ACMP_CTL setting for 1 PCLK filter count. */ +#define ACMP_CTL_FILTSEL_2PCLK (2UL << 13) /*!< ACMP_CTL setting for 2 PCLK filter count. */ +#define ACMP_CTL_FILTSEL_4PCLK (3UL << 13) /*!< ACMP_CTL setting for 4 PCLK filter count. */ +#define ACMP_CTL_FILTSEL_8PCLK (4UL << 13) /*!< ACMP_CTL setting for 8 PCLK filter count. */ +#define ACMP_CTL_FILTSEL_16PCLK (5UL << 13) /*!< ACMP_CTL setting for 16 PCLK filter count. */ +#define ACMP_CTL_FILTSEL_32PCLK (6UL << 13) /*!< ACMP_CTL setting for 32 PCLK filter count. */ +#define ACMP_CTL_FILTSEL_64PCLK (7UL << 13) /*!< ACMP_CTL setting for 64 PCLK filter count. */ +#define ACMP_CTL_INTPOL_RF (0UL << 8) /*!< ACMP_CTL setting for selecting rising edge and falling edge as interrupt condition. */ +#define ACMP_CTL_INTPOL_R (1UL << 8) /*!< ACMP_CTL setting for selecting rising edge as interrupt condition. */ +#define ACMP_CTL_INTPOL_F (2UL << 8) /*!< ACMP_CTL setting for selecting falling edge as interrupt condition. */ +#define ACMP_CTL_POSSEL_P0 (0UL << 6) /*!< ACMP_CTL setting for selecting ACMPx_P0 pin as the source of ACMP V+. */ +#define ACMP_CTL_POSSEL_P1 (1UL << 6) /*!< ACMP_CTL setting for selecting ACMPx_P1 pin as the source of ACMP V+. */ +#define ACMP_CTL_POSSEL_P2 (2UL << 6) /*!< ACMP_CTL setting for selecting ACMPx_P2 pin as the source of ACMP V+. */ +#define ACMP_CTL_POSSEL_P3 (3UL << 6) /*!< ACMP_CTL setting for selecting ACMPx_P3 pin as the source of ACMP V+. */ +#define ACMP_CTL_NEGSEL_PIN (0UL << 4) /*!< ACMP_CTL setting for selecting the voltage of ACMP negative input pin as the source of ACMP V-. */ +#define ACMP_CTL_NEGSEL_CRV (1UL << 4) /*!< ACMP_CTL setting for selecting internal comparator reference voltage as the source of ACMP V-. */ +#define ACMP_CTL_NEGSEL_VBG (2UL << 4) /*!< ACMP_CTL setting for selecting internal Band-gap voltage as the source of ACMP V-. */ +#define ACMP_CTL_NEGSEL_DAC (3UL << 4) /*!< ACMP_CTL setting for selecting DAC output voltage as the source of ACMP V-. */ +#define ACMP_CTL_HYSTERESIS_ENABLE (1UL << 2) /*!< ACMP_CTL setting for enabling the hysteresis function. */ +#define ACMP_CTL_HYSTERESIS_DISABLE (0UL << 2) /*!< ACMP_CTL setting for disabling the hysteresis function. */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* ACMP_VREF constant definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define ACMP_VREF_CRVSSEL_VDDA (0UL << 6) /*!< ACMP_VREF setting for selecting analog supply voltage VDDA as the CRV source voltage */ +#define ACMP_VREF_CRVSSEL_INTVREF (1UL << 6) /*!< ACMP_VREF setting for selecting internal reference voltage as the CRV source voltage */ + + +/*@}*/ /* end of group ACMP_EXPORTED_CONSTANTS */ + + +/** @addtogroup ACMP_EXPORTED_FUNCTIONS ACMP Exported Functions + @{ +*/ + +/*---------------------------------------------------------------------------------------------------------*/ +/* Define Macros and functions */ +/*---------------------------------------------------------------------------------------------------------*/ + + +/** + * @brief This macro is used to enable output inverse function + * @param[in] acmp The pointer of the specified ACMP module + * @param[in] u32ChNum The ACMP number + * @return None + * @details This macro will set ACMPOINV bit of ACMP_CTL register to enable output inverse function. + */ +#define ACMP_ENABLE_OUTPUT_INVERSE(acmp, u32ChNum) ((acmp)->CTL[(u32ChNum)%2] |= ACMP_CTL_ACMPOINV_Msk) + +/** + * @brief This macro is used to disable output inverse function + * @param[in] acmp The pointer of the specified ACMP module + * @param[in] u32ChNum The ACMP number + * @return None + * @details This macro will clear ACMPOINV bit of ACMP_CTL register to disable output inverse function. + */ +#define ACMP_DISABLE_OUTPUT_INVERSE(acmp, u32ChNum) ((acmp)->CTL[(u32ChNum)%2] &= ~ACMP_CTL_ACMPOINV_Msk) + +/** + * @brief This macro is used to select ACMP negative input source + * @param[in] acmp The pointer of the specified ACMP module + * @param[in] u32ChNum The ACMP number + * @param[in] u32Src is comparator negative input selection. Including: + * - \ref ACMP_CTL_NEGSEL_PIN + * - \ref ACMP_CTL_NEGSEL_CRV + * - \ref ACMP_CTL_NEGSEL_VBG + * - \ref ACMP_CTL_NEGSEL_DAC + * @return None + * @details This macro will set NEGSEL (ACMP_CTL[5:4]) to determine the source of negative input. + */ +#define ACMP_SET_NEG_SRC(acmp, u32ChNum, u32Src) ((acmp)->CTL[(u32ChNum)%2] = ((acmp)->CTL[(u32ChNum)%2] & ~ACMP_CTL_NEGSEL_Msk) | (u32Src)) + +/** + * @brief This macro is used to enable hysteresis function + * @param[in] acmp The pointer of the specified ACMP module + * @param[in] u32ChNum The ACMP number + * @return None + * @details This macro will set HYSEN bit of ACMP_CTL register to enable hysteresis function. + */ +#define ACMP_ENABLE_HYSTERESIS(acmp, u32ChNum) ((acmp)->CTL[(u32ChNum)%2] |= ACMP_CTL_HYSEN_Msk) + +/** + * @brief This macro is used to disable hysteresis function + * @param[in] acmp The pointer of the specified ACMP module + * @param[in] u32ChNum The ACMP number + * @return None + * @details This macro will clear HYSEN bit of ACMP_CTL register to disable hysteresis function. + */ +#define ACMP_DISABLE_HYSTERESIS(acmp, u32ChNum) ((acmp)->CTL[(u32ChNum)%2] &= ~ACMP_CTL_HYSEN_Msk) + +/** + * @brief This macro is used to enable interrupt + * @param[in] acmp The pointer of the specified ACMP module + * @param[in] u32ChNum The ACMP number + * @return None + * @details This macro will set ACMPIE bit of ACMP_CTL register to enable interrupt function. + * If wake-up function is enabled, the wake-up interrupt will be enabled as well. + */ +#define ACMP_ENABLE_INT(acmp, u32ChNum) ((acmp)->CTL[(u32ChNum)%2] |= ACMP_CTL_ACMPIE_Msk) + +/** + * @brief This macro is used to disable interrupt + * @param[in] acmp The pointer of the specified ACMP module + * @param[in] u32ChNum The ACMP number + * @return None + * @details This macro will clear ACMPIE bit of ACMP_CTL register to disable interrupt function. + */ +#define ACMP_DISABLE_INT(acmp, u32ChNum) ((acmp)->CTL[(u32ChNum)%2] &= ~ACMP_CTL_ACMPIE_Msk) + +/** + * @brief This macro is used to enable ACMP + * @param[in] acmp The pointer of the specified ACMP module + * @param[in] u32ChNum The ACMP number + * @return None + * @details This macro will set ACMPEN bit of ACMP_CTL register to enable analog comparator. + */ +#define ACMP_ENABLE(acmp, u32ChNum) ((acmp)->CTL[(u32ChNum)%2] |= ACMP_CTL_ACMPEN_Msk) + +/** + * @brief This macro is used to disable ACMP + * @param[in] acmp The pointer of the specified ACMP module + * @param[in] u32ChNum The ACMP number + * @return None + * @details This macro will clear ACMPEN bit of ACMP_CTL register to disable analog comparator. + */ +#define ACMP_DISABLE(acmp, u32ChNum) ((acmp)->CTL[(u32ChNum)%2] &= ~ACMP_CTL_ACMPEN_Msk) + +/** + * @brief This macro is used to get ACMP output value + * @param[in] acmp The pointer of the specified ACMP module + * @param[in] u32ChNum The ACMP number + * @return ACMP output value + * @details This macro will return the ACMP output value. + */ +#define ACMP_GET_OUTPUT(acmp, u32ChNum) (((acmp)->STATUS & (ACMP_STATUS_ACMPO0_Msk<<((u32ChNum)%2)))?1:0) + +/** + * @brief This macro is used to get ACMP interrupt flag + * @param[in] acmp The pointer of the specified ACMP module + * @param[in] u32ChNum The ACMP number + * @return ACMP interrupt occurred (1) or not (0) + * @details This macro will return the ACMP interrupt flag. + */ +#define ACMP_GET_INT_FLAG(acmp, u32ChNum) (((acmp)->STATUS & (ACMP_STATUS_ACMPIF0_Msk<<((u32ChNum)%2)))?1:0) + +/** + * @brief This macro is used to clear ACMP interrupt flag + * @param[in] acmp The pointer of the specified ACMP module + * @param[in] u32ChNum The ACMP number + * @return None + * @details This macro will write 1 to ACMPIFn bit of ACMP_STATUS register to clear interrupt flag. + */ +#define ACMP_CLR_INT_FLAG(acmp, u32ChNum) ((acmp)->STATUS = (ACMP_STATUS_ACMPIF0_Msk<<((u32ChNum)%2))) + +/** + * @brief This macro is used to clear ACMP wake-up interrupt flag + * @param[in] acmp The pointer of the specified ACMP module + * @param[in] u32ChNum The ACMP number + * @return None + * @details This macro will write 1 to WKIFn bit of ACMP_STATUS register to clear interrupt flag. + */ +#define ACMP_CLR_WAKEUP_INT_FLAG(acmp, u32ChNum) ((acmp)->STATUS = (ACMP_STATUS_WKIF0_Msk<<((u32ChNum)%2))) + +/** + * @brief This macro is used to enable ACMP wake-up function + * @param[in] acmp The pointer of the specified ACMP module + * @param[in] u32ChNum The ACMP number + * @return None + * @details This macro will set WKEN (ACMP_CTL[16]) to enable ACMP wake-up function. + */ +#define ACMP_ENABLE_WAKEUP(acmp, u32ChNum) ((acmp)->CTL[(u32ChNum)%2] |= ACMP_CTL_WKEN_Msk) + +/** + * @brief This macro is used to disable ACMP wake-up function + * @param[in] acmp The pointer of the specified ACMP module + * @param[in] u32ChNum The ACMP number + * @return None + * @details This macro will clear WKEN (ACMP_CTL[16]) to disable ACMP wake-up function. + */ +#define ACMP_DISABLE_WAKEUP(acmp, u32ChNum) ((acmp)->CTL[(u32ChNum)%2] &= ~ACMP_CTL_WKEN_Msk) + +/** + * @brief This macro is used to select ACMP positive input pin + * @param[in] acmp The pointer of the specified ACMP module + * @param[in] u32ChNum The ACMP number + * @param[in] u32Pin Comparator positive pin selection. Including: + * - \ref ACMP_CTL_POSSEL_P0 + * - \ref ACMP_CTL_POSSEL_P1 + * - \ref ACMP_CTL_POSSEL_P2 + * - \ref ACMP_CTL_POSSEL_P3 + * @return None + * @details This macro will set POSSEL (ACMP_CTL[7:6]) to determine the comparator positive input pin. + */ +#define ACMP_SELECT_P(acmp, u32ChNum, u32Pin) ((acmp)->CTL[(u32ChNum)%2] = ((acmp)->CTL[(u32ChNum)%2] & ~ACMP_CTL_POSSEL_Msk) | (u32Pin)) + +/** + * @brief This macro is used to enable ACMP filter function + * @param[in] acmp The pointer of the specified ACMP module + * @param[in] u32ChNum The ACMP number + * @return None + * @details This macro will set OUTSEL (ACMP_CTL[12]) to enable output filter function. + */ +#define ACMP_ENABLE_FILTER(acmp, u32ChNum) ((acmp)->CTL[(u32ChNum)%2] |= ACMP_CTL_OUTSEL_Msk) + +/** + * @brief This macro is used to disable ACMP filter function + * @param[in] acmp The pointer of the specified ACMP module + * @param[in] u32ChNum The ACMP number + * @return None + * @details This macro will clear OUTSEL (ACMP_CTL[12]) to disable output filter function. + */ +#define ACMP_DISABLE_FILTER(acmp, u32ChNum) ((acmp)->CTL[(u32ChNum)%2] &= ~ACMP_CTL_OUTSEL_Msk) + +/** + * @brief This macro is used to set ACMP filter function + * @param[in] acmp The pointer of the specified ACMP module + * @param[in] u32ChNum The ACMP number + * @param[in] u32Cnt is comparator filter count setting. + * - \ref ACMP_CTL_FILTSEL_OFF + * - \ref ACMP_CTL_FILTSEL_1PCLK + * - \ref ACMP_CTL_FILTSEL_2PCLK + * - \ref ACMP_CTL_FILTSEL_4PCLK + * - \ref ACMP_CTL_FILTSEL_8PCLK + * - \ref ACMP_CTL_FILTSEL_16PCLK + * - \ref ACMP_CTL_FILTSEL_32PCLK + * - \ref ACMP_CTL_FILTSEL_64PCLK + * @return None + * @details When ACMP output filter function is enabled, the output sampling count is determined by FILTSEL (ACMP_CTL[15:13]). + */ +#define ACMP_SET_FILTER(acmp, u32ChNum, u32Cnt) ((acmp)->CTL[(u32ChNum)%2] = ((acmp)->CTL[(u32ChNum)%2] & ~ACMP_CTL_FILTSEL_Msk) | (u32Cnt)) + +/** + * @brief This macro is used to select comparator reference voltage + * @param[in] acmp The pointer of the specified ACMP module + * @param[in] u32Level The comparator reference voltage setting. + * The formula is: + * comparator reference voltage = CRV source voltage x (1/6 + u32Level/24) + * The range of u32Level is 0 ~ 15. + * @return None + * @details When CRV is selected as ACMP negative input source, the CRV level is determined by CRVCTL (ACMP_VREF[3:0]). + */ +#define ACMP_CRV_SEL(acmp, u32Level) ((acmp)->VREF = ((acmp)->VREF & ~ACMP_VREF_CRVCTL_Msk) | ((u32Level)<VREF = ((acmp)->VREF & ~ACMP_VREF_CRVSSEL_Msk) | (u32Src)) + +/** + * @brief This macro is used to select ACMP interrupt condition + * @param[in] acmp The pointer of the specified ACMP module + * @param[in] u32ChNum The ACMP number + * @param[in] u32Cond Comparator interrupt condition selection. Including: + * - \ref ACMP_CTL_INTPOL_RF + * - \ref ACMP_CTL_INTPOL_R + * - \ref ACMP_CTL_INTPOL_F + * @return None + * @details The ACMP output interrupt condition can be rising edge, falling edge or any edge. + */ +#define ACMP_SELECT_INT_COND(acmp, u32ChNum, u32Cond) ((acmp)->CTL[(u32ChNum)%2] = ((acmp)->CTL[(u32ChNum)%2] & ~ACMP_CTL_INTPOL_Msk) | (u32Cond)) + + + +/* Function prototype declaration */ +void ACMP_Open(ACMP_T *, uint32_t u32ChNum, uint32_t u32NegSrc, uint32_t u32HysteresisEn); +void ACMP_Close(ACMP_T *, uint32_t u32ChNum); + + + +/*@}*/ /* end of group ACMP_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group ACMP_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +#ifdef __cplusplus +} +#endif + + +#endif //__ACMP_H__ + +/*** (C) COPYRIGHT 2014~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_can.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_can.c new file mode 100644 index 00000000000..a1ab3a90623 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_can.c @@ -0,0 +1,1004 @@ +/**************************************************************************//** + * @file can.c + * @version V2.00 + * $Revision: 8 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series CAN driver source file + * + * @note + * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ +#include "M451Series.h" + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup CAN_Driver CAN Driver + @{ +*/ + +/** @addtogroup CAN_EXPORTED_FUNCTIONS CAN Exported Functions + @{ +*/ + +/// @cond HIDDEN_SYMBOLS + +#if defined(CAN1) +static uint8_t gu8LockCanIf[2][2] = {0}; // The chip has two CANs. +#elif defined(CAN0) || defined(CAN) +static uint8_t gu8LockCanIf[1][2] = {0}; // The chip only has one CAN. +#endif + +#define RETRY_COUNTS (0x10000000) + +//#define DEBUG_PRINTF printf +#define DEBUG_PRINTF(...) + +/** + * @brief Check if any interface is available then lock it for usage. + * @param[in] tCAN The pointer to CAN module base address. + * @retval 0 IF0 is free + * @retval 1 IF1 is free + * @retval 2 No IF is free + * @details Search the first free message interface, starting from 0. If a interface is + * available, set a flag to lock the interface. + */ +static uint32_t LockIF(CAN_T *tCAN) +{ + uint32_t u32CanNo; + uint32_t u32FreeIfNo; + uint32_t u32IntMask; + +#if defined(CAN1) + u32CanNo = (tCAN == CAN1) ? 1 : 0; +#else // defined(CAN0) || defined(CAN) + u32CanNo = 0; +#endif + + u32FreeIfNo = 2; + + /* Disable CAN interrupt */ + u32IntMask = tCAN->CON & (CAN_CON_IE_Msk | CAN_CON_SIE_Msk | CAN_CON_EIE_Msk); + tCAN->CON = tCAN->CON & ~(CAN_CON_IE_Msk | CAN_CON_SIE_Msk | CAN_CON_EIE_Msk); + + /* Check interface 1 is available or not */ + if((tCAN->IF[0].CREQ & CAN_IF_CREQ_BUSY_Msk) == 0) + { + if(gu8LockCanIf[u32CanNo][0] == FALSE) + { + gu8LockCanIf[u32CanNo][0] = TRUE; + u32FreeIfNo = 0; + } + } + + /* Or check interface 2 is available or not */ + if(u32FreeIfNo == 2 && (tCAN->IF[1].CREQ & CAN_IF_CREQ_BUSY_Msk) == 0) + { + if(gu8LockCanIf[u32CanNo][1] == FALSE) + { + gu8LockCanIf[u32CanNo][1] = TRUE; + u32FreeIfNo = 1; + } + } + + /* Enable CAN interrupt */ + tCAN->CON |= u32IntMask; + + return u32FreeIfNo; +} + +/** + * @brief Check if any interface is available in a time limitation then lock it for usage. + * @param[in] tCAN The pointer to CAN module base address. + * @retval 0 IF0 is free + * @retval 1 IF1 is free + * @retval 2 No IF is free + * @details Search the first free message interface, starting from 0. If no interface is + * it will try again until time out. If a interface is available, set a flag to + * lock the interface. + */ +static uint32_t LockIF_TL(CAN_T *tCAN) +{ + uint32_t u32Count; + uint32_t u32FreeIfNo; + + for(u32Count = 0; u32Count < RETRY_COUNTS; u32Count++) + { + if((u32FreeIfNo = LockIF(tCAN)) != 2) + return u32FreeIfNo; + } + + return u32FreeIfNo; +} + +/** + * @brief Release locked interface. + * @param[in] tCAN The pointer to CAN module base address. + * @param[in] u32Info The interface number, 0 or 1. + * @return none + * @details Release the locked interface. + */ +static void ReleaseIF(CAN_T *tCAN, uint32_t u32IfNo) +{ + uint32_t u32IntMask; + uint32_t u32CanNo; + + if(u32IfNo >= 2) + return; + +#if defined(CAN1) + u32CanNo = (tCAN == CAN1) ? 1 : 0; +#else // defined(CAN0) || defined(CAN) + u32CanNo = 0; +#endif + + /* Disable CAN interrupt */ + u32IntMask = tCAN->CON & (CAN_CON_IE_Msk | CAN_CON_SIE_Msk | CAN_CON_EIE_Msk); + tCAN->CON = tCAN->CON & ~(CAN_CON_IE_Msk | CAN_CON_SIE_Msk | CAN_CON_EIE_Msk); + + gu8LockCanIf[u32CanNo][u32IfNo] = FALSE; + + /* Enable CAN interrupt */ + tCAN->CON |= u32IntMask; +} + +/** + * @brief Enter initialization mode + * @param[in] tCAN The pointer to CAN module base address. + * @param[in] Following values can be used. + * \ref CAN_CON_DAR_Msk Disable automatic retransmission. + * \ref CAN_CON_EIE_Msk Enable error interrupt. + * \ref CAN_CON_SIE_Msk Enable status interrupt. + * \ref CAN_CON_IE_Msk CAN interrupt. + * @return None + * @details This function is used to set CAN to enter initialization mode and enable access bit timing + * register. After bit timing configuration ready, user must call CAN_LeaveInitMode() + * to leave initialization mode and lock bit timing register to let new configuration + * take effect. + */ +void CAN_EnterInitMode(CAN_T *tCAN, uint8_t u8Mask) +{ + tCAN->CON = u8Mask | (CAN_CON_INIT_Msk | CAN_CON_CCE_Msk); +} + + +/** + * @brief Leave initialization mode + * @param[in] tCAN The pointer to CAN module base address. + * @return None + * @details This function is used to set CAN to leave initialization mode to let + * bit timing configuration take effect after configuration ready. + */ +void CAN_LeaveInitMode(CAN_T *tCAN) +{ + tCAN->CON &= (~(CAN_CON_INIT_Msk | CAN_CON_CCE_Msk)); + while(tCAN->CON & CAN_CON_INIT_Msk); /* Check INIT bit is released */ +} + +/** + * @brief Wait message into message buffer in basic mode. + * @param[in] tCAN The pointer to CAN module base address. + * @return None + * @details This function is used to wait message into message buffer in basic mode. Please notice the + * function is polling NEWDAT bit of MCON register by while loop and it is used in basic mode. + */ +void CAN_WaitMsg(CAN_T *tCAN) +{ + tCAN->STATUS = 0x0; /* clr status */ + + while(1) + { + if(tCAN->IF[1].MCON & CAN_IF_MCON_NEWDAT_Msk) /* check new data */ + { + DEBUG_PRINTF("New Data IN\n"); + break; + } + + if(tCAN->STATUS & CAN_STATUS_RXOK_Msk) + DEBUG_PRINTF("Rx OK\n"); + + if(tCAN->STATUS & CAN_STATUS_LEC_Msk) + { + DEBUG_PRINTF("Error\n"); + } + } +} + +/** + * @brief Get current bit rate + * @param[in] tCAN The pointer to CAN module base address. + * @return Current Bit-Rate (kilo bit per second) + * @details Return current CAN bit rate according to the user bit-timing parameter settings + */ +uint32_t CAN_GetCANBitRate(CAN_T *tCAN) +{ + uint8_t u8Tseg1, u8Tseg2; + uint32_t u32Bpr; + + u8Tseg1 = (tCAN->BTIME & CAN_BTIME_TSEG1_Msk) >> CAN_BTIME_TSEG1_Pos; + u8Tseg2 = (tCAN->BTIME & CAN_BTIME_TSEG2_Msk) >> CAN_BTIME_TSEG2_Pos; + u32Bpr = (tCAN->BTIME & CAN_BTIME_BRP_Msk) | (tCAN->BRPE << 6); + + return (SystemCoreClock / (u32Bpr + 1) / (u8Tseg1 + u8Tseg2 + 3)); +} + +/** + * @brief Switch the CAN into test mode. + * @param[in] tCAN The pointer to CAN module base address. + * @param[in] u8TestMask Specifies the configuration in test modes + * \ref CAN_TEST_BASIC_Msk Enable basic mode of test mode + * \ref CAN_TEST_SILENT_Msk Enable silent mode of test mode + * \ref CAN_TEST_LBACK_Msk Enable Loop Back Mode of test mode + * \ref CAN_TEST_TX0_Msk / \ref CAN_TEST_TX1_Msk Control CAN_TX pin bit field + * @return None + * @details Switch the CAN into test mode. There are four test mode (BASIC/SILENT/LOOPBACK/ + * LOOPBACK combined SILENT/CONTROL_TX_PIN)could be selected. After setting test mode,user + * must call CAN_LeaveInitMode() to let the setting take effect. + */ +void CAN_EnterTestMode(CAN_T *tCAN, uint8_t u8TestMask) +{ + tCAN->CON |= CAN_CON_TEST_Msk; + tCAN->TEST = u8TestMask; +} + + +/** + * @brief Leave the test mode + * @param[in] tCAN The pointer to CAN module base address. + * @return None + * @details This function is used to Leave the test mode (switch into normal mode). + */ +void CAN_LeaveTestMode(CAN_T *tCAN) +{ + tCAN->CON |= CAN_CON_TEST_Msk; + tCAN->TEST &= ~(CAN_TEST_LBACK_Msk | CAN_TEST_SILENT_Msk | CAN_TEST_BASIC_Msk); + tCAN->CON &= (~CAN_CON_TEST_Msk); +} + +/** + * @brief Get the waiting status of a received message. + * @param[in] tCAN The pointer to CAN module base address. + * @param[in] u8MsgObj Specifies the Message object number, from 0 to 31. + * @retval non-zero The corresponding message object has a new data bit is set. + * @retval 0 No message object has new data. + * @details This function is used to get the waiting status of a received message. + */ +uint32_t CAN_IsNewDataReceived(CAN_T *tCAN, uint8_t u8MsgObj) +{ + return (u8MsgObj < 16 ? tCAN->NDAT1 & (1 << u8MsgObj) : tCAN->NDAT2 & (1 << (u8MsgObj - 16))); +} + + +/** + * @brief Send CAN message in BASIC mode of test mode + * @param[in] tCAN The pointer to CAN module base address. + * @param[in] pCanMsg Pointer to the message structure containing data to transmit. + * @return TRUE: Transmission OK + * FALSE: Check busy flag of interface 0 is timeout + * @details The function is used to send CAN message in BASIC mode of test mode. Before call the API, + * the user should be call CAN_EnterTestMode(CAN_TEST_BASIC) and let CAN controller enter + * basic mode of test mode. Please notice IF1 Registers used as Tx Buffer in basic mode. + */ +int32_t CAN_BasicSendMsg(CAN_T *tCAN, STR_CANMSG_T* pCanMsg) +{ + uint32_t i = 0; + while(tCAN->IF[0].CREQ & CAN_IF_CREQ_BUSY_Msk); + + tCAN->STATUS &= (~CAN_STATUS_TXOK_Msk); + + if(pCanMsg->IdType == CAN_STD_ID) + { + /* standard ID*/ + tCAN->IF[0].ARB1 = 0; + tCAN->IF[0].ARB2 = (((pCanMsg->Id) & 0x7FF) << 2) ; + } + else + { + /* extended ID*/ + tCAN->IF[0].ARB1 = (pCanMsg->Id) & 0xFFFF; + tCAN->IF[0].ARB2 = ((pCanMsg->Id) & 0x1FFF0000) >> 16 | CAN_IF_ARB2_XTD_Msk; + + } + + if(pCanMsg->FrameType) + tCAN->IF[0].ARB2 |= CAN_IF_ARB2_DIR_Msk; + else + tCAN->IF[0].ARB2 &= (~CAN_IF_ARB2_DIR_Msk); + + tCAN->IF[0].MCON = (tCAN->IF[0].MCON & (~CAN_IF_MCON_DLC_Msk)) | pCanMsg->DLC; + tCAN->IF[0].DAT_A1 = ((uint16_t)pCanMsg->Data[1] << 8) | pCanMsg->Data[0]; + tCAN->IF[0].DAT_A2 = ((uint16_t)pCanMsg->Data[3] << 8) | pCanMsg->Data[2]; + tCAN->IF[0].DAT_B1 = ((uint16_t)pCanMsg->Data[5] << 8) | pCanMsg->Data[4]; + tCAN->IF[0].DAT_B2 = ((uint16_t)pCanMsg->Data[7] << 8) | pCanMsg->Data[6]; + + /* request transmission*/ + tCAN->IF[0].CREQ &= (~CAN_IF_CREQ_BUSY_Msk); + if(tCAN->IF[0].CREQ & CAN_IF_CREQ_BUSY_Msk) + { + DEBUG_PRINTF("Cannot clear busy for sending ...\n"); + return FALSE; + } + + tCAN->IF[0].CREQ |= CAN_IF_CREQ_BUSY_Msk; // sending + + for(i = 0; i < 0xFFFFF; i++) + { + if((tCAN->IF[0].CREQ & CAN_IF_CREQ_BUSY_Msk) == 0) + break; + } + + if(i >= 0xFFFFF) + { + DEBUG_PRINTF("Cannot send out...\n"); + return FALSE; + } + + return TRUE; +} + +/** + * @brief Get a message information in BASIC mode. + * + * @param[in] tCAN The pointer to CAN module base address. + * @param[in] pCanMsg Pointer to the message structure where received data is copied. + * + * @return FALSE No any message received. + * TRUE Receive a message success. + * + */ +int32_t CAN_BasicReceiveMsg(CAN_T *tCAN, STR_CANMSG_T* pCanMsg) +{ + + if((tCAN->IF[1].MCON & CAN_IF_MCON_NEWDAT_Msk) == 0) /* In basic mode, receive data always save in IF2 */ + { + return FALSE; + } + + tCAN->STATUS &= (~CAN_STATUS_RXOK_Msk); + + tCAN->IF[1].CMASK = CAN_IF_CMASK_ARB_Msk + | CAN_IF_CMASK_CONTROL_Msk + | CAN_IF_CMASK_DATAA_Msk + | CAN_IF_CMASK_DATAB_Msk; + + if((tCAN->IF[1].ARB2 & CAN_IF_ARB2_XTD_Msk) == 0) + { + /* standard ID*/ + pCanMsg->IdType = CAN_STD_ID; + pCanMsg->Id = (tCAN->IF[1].ARB2 >> 2) & 0x07FF; + + } + else + { + /* extended ID*/ + pCanMsg->IdType = CAN_EXT_ID; + pCanMsg->Id = (tCAN->IF[1].ARB2 & 0x1FFF) << 16; + pCanMsg->Id |= (uint32_t)tCAN->IF[1].ARB1; + } + + pCanMsg->FrameType = !((tCAN->IF[1].ARB2 & CAN_IF_ARB2_DIR_Msk) >> CAN_IF_ARB2_DIR_Pos); + + pCanMsg->DLC = tCAN->IF[1].MCON & CAN_IF_MCON_DLC_Msk; + pCanMsg->Data[0] = tCAN->IF[1].DAT_A1 & CAN_IF_DAT_A1_DATA0_Msk; + pCanMsg->Data[1] = (tCAN->IF[1].DAT_A1 & CAN_IF_DAT_A1_DATA1_Msk) >> CAN_IF_DAT_A1_DATA1_Pos; + pCanMsg->Data[2] = tCAN->IF[1].DAT_A2 & CAN_IF_DAT_A2_DATA2_Msk; + pCanMsg->Data[3] = (tCAN->IF[1].DAT_A2 & CAN_IF_DAT_A2_DATA3_Msk) >> CAN_IF_DAT_A2_DATA3_Pos; + pCanMsg->Data[4] = tCAN->IF[1].DAT_B1 & CAN_IF_DAT_B1_DATA4_Msk; + pCanMsg->Data[5] = (tCAN->IF[1].DAT_B1 & CAN_IF_DAT_B1_DATA5_Msk) >> CAN_IF_DAT_B1_DATA5_Pos; + pCanMsg->Data[6] = tCAN->IF[1].DAT_B2 & CAN_IF_DAT_B2_DATA6_Msk; + pCanMsg->Data[7] = (tCAN->IF[1].DAT_B2 & CAN_IF_DAT_B2_DATA7_Msk) >> CAN_IF_DAT_B2_DATA7_Pos; + + return TRUE; +} + +/** + * @brief Set Rx message object, include ID mask. + * @param[in] u8MsgObj Specifies the Message object number, from 0 to 31. + * @param[in] u8idType Specifies the identifier type of the frames that will be transmitted + * This parameter can be one of the following values: + * \ref CAN_STD_ID (standard ID, 11-bit) + * \ref CAN_EXT_ID (extended ID, 29-bit) + * @param[in] u32id Specifies the identifier used for acceptance filtering. + * @param[in] u8singleOrFifoLast Specifies the end-of-buffer indicator. + * This parameter can be one of the following values: + * TRUE: for a single receive object or a FIFO receive object that is the last one of the FIFO. + * FALSE: for a FIFO receive object that is not the last one. + * @retval TRUE SUCCESS + * @retval FALSE No useful interface + * @details The function is used to configure a receive message object. + */ +int32_t CAN_SetRxMsgObjAndMsk(CAN_T *tCAN, uint8_t u8MsgObj, uint8_t u8idType, uint32_t u32id, uint32_t u32idmask, uint8_t u8singleOrFifoLast) +{ + uint8_t u8MsgIfNum; + + /* Get and lock a free interface */ + if((u8MsgIfNum = LockIF_TL(tCAN)) == 2) + return FALSE; + + /* Command Setting */ + tCAN->IF[u8MsgIfNum].CMASK = CAN_IF_CMASK_WRRD_Msk | CAN_IF_CMASK_MASK_Msk | CAN_IF_CMASK_ARB_Msk | + CAN_IF_CMASK_CONTROL_Msk | CAN_IF_CMASK_DATAA_Msk | CAN_IF_CMASK_DATAB_Msk; + + if(u8idType == CAN_STD_ID) /* According STD/EXT ID format,Configure Mask and Arbitration register */ + { + tCAN->IF[u8MsgIfNum].ARB1 = 0; + tCAN->IF[u8MsgIfNum].ARB2 = CAN_IF_ARB2_MSGVAL_Msk | (u32id & 0x7FF) << 2; + } + else + { + tCAN->IF[u8MsgIfNum].ARB1 = u32id & 0xFFFF; + tCAN->IF[u8MsgIfNum].ARB2 = CAN_IF_ARB2_MSGVAL_Msk | CAN_IF_ARB2_XTD_Msk | (u32id & 0x1FFF0000) >> 16; + } + + tCAN->IF[u8MsgIfNum].MASK1 = (u32idmask & 0xFFFF); + tCAN->IF[u8MsgIfNum].MASK2 = (u32idmask >> 16) & 0xFFFF; + + //tCAN->IF[u8MsgIfNum].MCON |= CAN_IF_MCON_UMASK_Msk | CAN_IF_MCON_RXIE_Msk; + tCAN->IF[u8MsgIfNum].MCON = CAN_IF_MCON_UMASK_Msk | CAN_IF_MCON_RXIE_Msk; + if(u8singleOrFifoLast) + tCAN->IF[u8MsgIfNum].MCON |= CAN_IF_MCON_EOB_Msk; + else + tCAN->IF[u8MsgIfNum].MCON &= (~CAN_IF_MCON_EOB_Msk); + + tCAN->IF[u8MsgIfNum].DAT_A1 = 0; + tCAN->IF[u8MsgIfNum].DAT_A2 = 0; + tCAN->IF[u8MsgIfNum].DAT_B1 = 0; + tCAN->IF[u8MsgIfNum].DAT_B2 = 0; + + tCAN->IF[u8MsgIfNum].CREQ = 1 + u8MsgObj; + ReleaseIF(tCAN, u8MsgIfNum); + + return TRUE; +} + +/** + * @brief Set Rx message object + * @param[in] u8MsgObj Specifies the Message object number, from 0 to 31. + * @param[in] u8idType Specifies the identifier type of the frames that will be transmitted + * This parameter can be one of the following values: + * \ref CAN_STD_ID (standard ID, 11-bit) + * \ref CAN_EXT_ID (extended ID, 29-bit) + * @param[in] u32id Specifies the identifier used for acceptance filtering. + * @param[in] u8singleOrFifoLast Specifies the end-of-buffer indicator. + * This parameter can be one of the following values: + * TRUE: for a single receive object or a FIFO receive object that is the last one of the FIFO. + * FALSE: for a FIFO receive object that is not the last one. + * @retval TRUE SUCCESS + * @retval FALSE No useful interface + * @details The function is used to configure a receive message object. + */ +int32_t CAN_SetRxMsgObj(CAN_T *tCAN, uint8_t u8MsgObj, uint8_t u8idType, uint32_t u32id, uint8_t u8singleOrFifoLast) +{ + uint8_t u8MsgIfNum; + + /* Get and lock a free interface */ + if((u8MsgIfNum = LockIF_TL(tCAN)) == 2) + return FALSE; + + /* Command Setting */ + tCAN->IF[u8MsgIfNum].CMASK = CAN_IF_CMASK_WRRD_Msk | CAN_IF_CMASK_MASK_Msk | CAN_IF_CMASK_ARB_Msk | + CAN_IF_CMASK_CONTROL_Msk | CAN_IF_CMASK_DATAA_Msk | CAN_IF_CMASK_DATAB_Msk; + + if(u8idType == CAN_STD_ID) /* According STD/EXT ID format,Configure Mask and Arbitration register */ + { + tCAN->IF[u8MsgIfNum].ARB1 = 0; + tCAN->IF[u8MsgIfNum].ARB2 = CAN_IF_ARB2_MSGVAL_Msk | (u32id & 0x7FF) << 2; + } + else + { + tCAN->IF[u8MsgIfNum].ARB1 = u32id & 0xFFFF; + tCAN->IF[u8MsgIfNum].ARB2 = CAN_IF_ARB2_MSGVAL_Msk | CAN_IF_ARB2_XTD_Msk | (u32id & 0x1FFF0000) >> 16; + } + + //tCAN->IF[u8MsgIfNum].MCON |= CAN_IF_MCON_UMASK_Msk | CAN_IF_MCON_RXIE_Msk; + tCAN->IF[u8MsgIfNum].MCON = CAN_IF_MCON_UMASK_Msk | CAN_IF_MCON_RXIE_Msk; + if(u8singleOrFifoLast) + tCAN->IF[u8MsgIfNum].MCON |= CAN_IF_MCON_EOB_Msk; + else + tCAN->IF[u8MsgIfNum].MCON &= (~CAN_IF_MCON_EOB_Msk); + + tCAN->IF[u8MsgIfNum].DAT_A1 = 0; + tCAN->IF[u8MsgIfNum].DAT_A2 = 0; + tCAN->IF[u8MsgIfNum].DAT_B1 = 0; + tCAN->IF[u8MsgIfNum].DAT_B2 = 0; + + tCAN->IF[u8MsgIfNum].CREQ = 1 + u8MsgObj; + ReleaseIF(tCAN, u8MsgIfNum); + + return TRUE; +} + +/** + * @brief Gets the message + * @param[in] u8MsgObj Specifies the Message object number, from 0 to 31. + * @param[in] u8Release Specifies the message release indicator. + * This parameter can be one of the following values: + * TRUE: the message object is released when getting the data. + * FALSE:the message object is not released. + * @param[in] pCanMsg Pointer to the message structure where received data is copied. + * @retval TRUE Success + * @retval FALSE No any message received + * @details Gets the message, if received. + */ +int32_t CAN_ReadMsgObj(CAN_T *tCAN, uint8_t u8MsgObj, uint8_t u8Release, STR_CANMSG_T* pCanMsg) +{ + uint8_t u8MsgIfNum; + + if(!CAN_IsNewDataReceived(tCAN, u8MsgObj)) + return FALSE; + + /* Get and lock a free interface */ + if((u8MsgIfNum = LockIF_TL(tCAN)) == 2) + return FALSE; + + tCAN->STATUS &= (~CAN_STATUS_RXOK_Msk); + + /* read the message contents*/ + tCAN->IF[u8MsgIfNum].CMASK = CAN_IF_CMASK_MASK_Msk + | CAN_IF_CMASK_ARB_Msk + | CAN_IF_CMASK_CONTROL_Msk + | CAN_IF_CMASK_CLRINTPND_Msk + | (u8Release ? CAN_IF_CMASK_TXRQSTNEWDAT_Msk : 0) + | CAN_IF_CMASK_DATAA_Msk + | CAN_IF_CMASK_DATAB_Msk; + + tCAN->IF[u8MsgIfNum].CREQ = 1 + u8MsgObj; + + while(tCAN->IF[u8MsgIfNum].CREQ & CAN_IF_CREQ_BUSY_Msk) + { + /*Wait*/ + } + + if((tCAN->IF[u8MsgIfNum].ARB2 & CAN_IF_ARB2_XTD_Msk) == 0) + { + /* standard ID*/ + pCanMsg->IdType = CAN_STD_ID; + pCanMsg->Id = (tCAN->IF[u8MsgIfNum].ARB2 & CAN_IF_ARB2_ID_Msk) >> 2; + } + else + { + /* extended ID*/ + pCanMsg->IdType = CAN_EXT_ID; + pCanMsg->Id = (((tCAN->IF[u8MsgIfNum].ARB2) & 0x1FFF) << 16) | tCAN->IF[u8MsgIfNum].ARB1; + } + + pCanMsg->DLC = tCAN->IF[u8MsgIfNum].MCON & CAN_IF_MCON_DLC_Msk; + pCanMsg->Data[0] = tCAN->IF[u8MsgIfNum].DAT_A1 & CAN_IF_DAT_A1_DATA0_Msk; + pCanMsg->Data[1] = (tCAN->IF[u8MsgIfNum].DAT_A1 & CAN_IF_DAT_A1_DATA1_Msk) >> CAN_IF_DAT_A1_DATA1_Pos; + pCanMsg->Data[2] = tCAN->IF[u8MsgIfNum].DAT_A2 & CAN_IF_DAT_A2_DATA2_Msk; + pCanMsg->Data[3] = (tCAN->IF[u8MsgIfNum].DAT_A2 & CAN_IF_DAT_A2_DATA3_Msk) >> CAN_IF_DAT_A2_DATA3_Pos; + pCanMsg->Data[4] = tCAN->IF[u8MsgIfNum].DAT_B1 & CAN_IF_DAT_B1_DATA4_Msk; + pCanMsg->Data[5] = (tCAN->IF[u8MsgIfNum].DAT_B1 & CAN_IF_DAT_B1_DATA5_Msk) >> CAN_IF_DAT_B1_DATA5_Pos; + pCanMsg->Data[6] = tCAN->IF[u8MsgIfNum].DAT_B2 & CAN_IF_DAT_B2_DATA6_Msk; + pCanMsg->Data[7] = (tCAN->IF[u8MsgIfNum].DAT_B2 & CAN_IF_DAT_B2_DATA7_Msk) >> CAN_IF_DAT_B2_DATA7_Pos; + + ReleaseIF(tCAN, u8MsgIfNum); + return TRUE; +} + +/// @endcond HIDDEN_SYMBOLS + + +/** + * @brief Set bus baud-rate. + * + * @param[in] tCAN The pointer to CAN module base address. + * @param[in] u32BaudRate The target CAN baud-rate. The range of u32BaudRate is 1~1000KHz. + * + * @return u32CurrentBitRate Real baud-rate value. + * + * @details The function is used to set bus timing parameter according current clock and target baud-rate. + */ +uint32_t CAN_SetBaudRate(CAN_T *tCAN, uint32_t u32BaudRate) +{ + uint8_t u8Tseg1, u8Tseg2; + uint32_t u32Brp; + uint32_t u32Value; + + CAN_EnterInitMode(tCAN, 0); + SystemCoreClockUpdate(); + u32Value = SystemCoreClock / u32BaudRate; + +#if 0 + u8Tseg1 = 2; + u8Tseg2 = 1; + while(1) + { + if(((u32Value % (u8Tseg1 + u8Tseg2 + 3)) == 0)) + break; + if(u8Tseg1 < 7) + u8Tseg2++; + + if((u32Value % (u8Tseg1 + u8Tseg2 + 3)) == 0) + break; + if(u8Tseg1 < 15) + u8Tseg1++; + else + { + u8Tseg1 = 2; + u8Tseg2 = 1; + break; + } + } +#else + + /* Fix for most standard baud rates, include 125K */ + + u8Tseg1 = 3; + u8Tseg2 = 2; + while(1) + { + if(((u32Value % (u8Tseg1 + u8Tseg2 + 3)) == 0) | (u8Tseg1 >= 15)) + break; + + u8Tseg1++; + + if((u32Value % (u8Tseg1 + u8Tseg2 + 3)) == 0) + break; + + if(u8Tseg2 < 7) + u8Tseg2++; + } +#endif + u32Brp = SystemCoreClock / (u32BaudRate) / (u8Tseg1 + u8Tseg2 + 3) - 1; + + u32Value = ((uint32_t)u8Tseg2 << CAN_BTIME_TSEG2_Pos) | ((uint32_t)u8Tseg1 << CAN_BTIME_TSEG1_Pos) | + (u32Brp & CAN_BTIME_BRP_Msk) | (tCAN->BTIME & CAN_BTIME_SJW_Msk); + tCAN->BTIME = u32Value; + tCAN->BRPE = (u32Brp >> 6) & 0x0F; + + CAN_LeaveInitMode(tCAN); + + return (CAN_GetCANBitRate(tCAN)); +} + +/** + * @brief The function is used to disable all CAN interrupt. + * + * @param[in] tCAN The pointer to CAN module base address. + * + * @return None + * + * @details No Status Change Interrupt and Error Status Interrupt will be generated. + */ +void CAN_Close(CAN_T *tCAN) +{ + CAN_DisableInt(tCAN, (CAN_CON_IE_Msk | CAN_CON_SIE_Msk | CAN_CON_EIE_Msk)); +} + +/** + * @brief Set CAN operation mode and target baud-rate. + * + * @param[in] tCAN The pointer to CAN module base address. + * @param[in] u32BaudRate The target CAN baud-rate. The range of u32BaudRate is 1~1000KHz. + * @param[in] u32Mode The CAN operation mode. Valid values are: + * - \ref CAN_NORMAL_MODE Normal operation. + * - \ref CAN_BASIC_MODE Basic mode. + * @return u32CurrentBitRate Real baud-rate value. + * + * @details Set bus timing parameter according current clock and target baud-rate. + * In Basic mode, IF1 Registers used as Tx Buffer, IF2 Registers used as Rx Buffer. + */ +uint32_t CAN_Open(CAN_T *tCAN, uint32_t u32BaudRate, uint32_t u32Mode) +{ + uint32_t u32CurrentBitRate; + + u32CurrentBitRate = CAN_SetBaudRate(tCAN, u32BaudRate); + + if(u32Mode == CAN_BASIC_MODE) + CAN_EnterTestMode(tCAN, CAN_TEST_BASIC_Msk); + + return u32CurrentBitRate; +} + +/** + * @brief The function is used to configure a transmit object. + * + * @param[in] tCAN The pointer to CAN module base address. + * @param[in] u32MsgNum Specifies the Message object number, from 0 to 31. + * @param[in] pCanMsg Pointer to the message structure where received data is copied. + * + * @retval FALSE No useful interface. + * @retval TRUE Config message object success. + * + * @details The two sets of interface registers (IF1 and IF2) control the software access to the Message RAM. + * They buffer the data to be transferred to and from the RAM, avoiding conflicts between software accesses and message reception/transmission. + */ +int32_t CAN_SetTxMsg(CAN_T *tCAN, uint32_t u32MsgNum , STR_CANMSG_T* pCanMsg) +{ + uint8_t u8MsgIfNum; + + if((u8MsgIfNum = LockIF_TL(tCAN)) == 2) + return FALSE; + + /* update the contents needed for transmission*/ + tCAN->IF[u8MsgIfNum].CMASK = CAN_IF_CMASK_WRRD_Msk | CAN_IF_CMASK_MASK_Msk | CAN_IF_CMASK_ARB_Msk | + CAN_IF_CMASK_CONTROL_Msk | CAN_IF_CMASK_DATAA_Msk | CAN_IF_CMASK_DATAB_Msk; + + if(pCanMsg->IdType == CAN_STD_ID) + { + /* standard ID*/ + tCAN->IF[u8MsgIfNum].ARB1 = 0; + tCAN->IF[u8MsgIfNum].ARB2 = (((pCanMsg->Id) & 0x7FF) << 2) | CAN_IF_ARB2_DIR_Msk | CAN_IF_ARB2_MSGVAL_Msk; + } + else + { + /* extended ID*/ + tCAN->IF[u8MsgIfNum].ARB1 = (pCanMsg->Id) & 0xFFFF; + tCAN->IF[u8MsgIfNum].ARB2 = ((pCanMsg->Id) & 0x1FFF0000) >> 16 | + CAN_IF_ARB2_DIR_Msk | CAN_IF_ARB2_XTD_Msk | CAN_IF_ARB2_MSGVAL_Msk; + } + + if(pCanMsg->FrameType) + tCAN->IF[u8MsgIfNum].ARB2 |= CAN_IF_ARB2_DIR_Msk; + else + tCAN->IF[u8MsgIfNum].ARB2 &= (~CAN_IF_ARB2_DIR_Msk); + + tCAN->IF[u8MsgIfNum].DAT_A1 = ((uint16_t)pCanMsg->Data[1] << 8) | pCanMsg->Data[0]; + tCAN->IF[u8MsgIfNum].DAT_A2 = ((uint16_t)pCanMsg->Data[3] << 8) | pCanMsg->Data[2]; + tCAN->IF[u8MsgIfNum].DAT_B1 = ((uint16_t)pCanMsg->Data[5] << 8) | pCanMsg->Data[4]; + tCAN->IF[u8MsgIfNum].DAT_B2 = ((uint16_t)pCanMsg->Data[7] << 8) | pCanMsg->Data[6]; + + tCAN->IF[u8MsgIfNum].MCON = CAN_IF_MCON_NEWDAT_Msk | pCanMsg->DLC | CAN_IF_MCON_TXIE_Msk | CAN_IF_MCON_EOB_Msk; + tCAN->IF[u8MsgIfNum].CREQ = 1 + u32MsgNum; + + ReleaseIF(tCAN, u8MsgIfNum); + return TRUE; +} + +/** + * @brief Set transmit request bit. + * + * @param[in] tCAN The pointer to CAN module base address. + * @param[in] u32MsgNum Specifies the Message object number, from 0 to 31. + * + * @return TRUE: Start transmit message. + * + * @details If a transmission is requested by programming bit TxRqst/NewDat (IFn_CMASK[2]), the TxRqst (IFn_MCON[8]) will be ignored. + */ +int32_t CAN_TriggerTxMsg(CAN_T *tCAN, uint32_t u32MsgNum) +{ + uint8_t u8MsgIfNum; + + if((u8MsgIfNum = LockIF_TL(tCAN)) == 2) + return FALSE; + + tCAN->STATUS &= (~CAN_STATUS_TXOK_Msk); + + /* read the message contents*/ + tCAN->IF[u8MsgIfNum].CMASK = CAN_IF_CMASK_CLRINTPND_Msk + | CAN_IF_CMASK_TXRQSTNEWDAT_Msk; + + tCAN->IF[u8MsgIfNum].CREQ = 1 + u32MsgNum; + + while(tCAN->IF[u8MsgIfNum].CREQ & CAN_IF_CREQ_BUSY_Msk) + { + /*Wait*/ + } + tCAN->IF[u8MsgIfNum].CMASK = CAN_IF_CMASK_WRRD_Msk | CAN_IF_CMASK_TXRQSTNEWDAT_Msk; + tCAN->IF[u8MsgIfNum].CREQ = 1 + u32MsgNum; + + ReleaseIF(tCAN, u8MsgIfNum); + return TRUE; +} + +/** + * @brief Enable CAN interrupt. + * + * @param[in] tCAN The pointer to CAN module base address. + * @param[in] u32Mask Interrupt Mask. Valid values are: + * - \ref CAN_CON_IE_Msk Module interrupt enable. + * - \ref CAN_CON_SIE_Msk Status change interrupt enable. + * - \ref CAN_CON_EIE_Msk Error interrupt enable. + * + * @return None + * + * @details The application software has two possibilities to follow the source of a message interrupt. + * First, it can follow the IntId in the Interrupt Register and second it can poll the Interrupt Pending Register. + */ +void CAN_EnableInt(CAN_T *tCAN, uint32_t u32Mask) +{ + tCAN->CON = (tCAN->CON & ~(CAN_CON_IE_Msk | CAN_CON_SIE_Msk | CAN_CON_EIE_Msk)) | + (u32Mask & (CAN_CON_IE_Msk | CAN_CON_SIE_Msk | CAN_CON_EIE_Msk)); +} + +/** + * @brief Disable CAN interrupt. + * + * @param[in] tCAN The pointer to CAN module base address. + * @param[in] u32Mask Interrupt Mask. (CAN_CON_IE_Msk / CAN_CON_SIE_Msk / CAN_CON_EIE_Msk). + * + * @return None + * + * @details The interrupt remains active until the Interrupt Register is back to value zero (the cause of the interrupt is reset) or until IE is reset. + */ +void CAN_DisableInt(CAN_T *tCAN, uint32_t u32Mask) +{ + tCAN->CON = tCAN->CON & ~((u32Mask & (CAN_CON_IE_Msk | CAN_CON_SIE_Msk | CAN_CON_EIE_Msk))); +} + + +/** + * @brief The function is used to configure a receive message object. + * + * @param[in] tCAN The pointer to CAN module base address. + * @param[in] u32MsgNum Specifies the Message object number, from 0 to 31. + * @param[in] u32IDType Specifies the identifier type of the frames that will be transmitted. Valid values are: + * - \ref CAN_STD_ID The 11-bit identifier. + * - \ref CAN_EXT_ID The 29-bit identifier. + * @param[in] u32ID Specifies the identifier used for acceptance filtering. + * + * @retval FALSE No useful interface. + * @retval TRUE Configure a receive message object success. + * + * @details If the RxIE bit (CAN_IFn_MCON[10]) is set, the IntPnd bit (CAN_IFn_MCON[13]) + * will be set when a received Data Frame is accepted and stored in the Message Object. + */ +int32_t CAN_SetRxMsg(CAN_T *tCAN, uint32_t u32MsgNum , uint32_t u32IDType, uint32_t u32ID) +{ + uint32_t u32TimeOutCount = 0; + + while(CAN_SetRxMsgObj(tCAN, u32MsgNum, u32IDType, u32ID, TRUE) == FALSE) + { + if(++u32TimeOutCount >= RETRY_COUNTS) return FALSE; + } + + return TRUE; +} + +/** + * @brief The function is used to configure a receive message object. + * + * @param[in] tCAN The pointer to CAN module base address. + * @param[in] u32MsgNum Specifies the Message object number, from 0 to 31. + * @param[in] u32IDType Specifies the identifier type of the frames that will be transmitted. Valid values are: + * - \ref CAN_STD_ID The 11-bit identifier. + * - \ref CAN_EXT_ID The 29-bit identifier. + * @param[in] u32ID Specifies the identifier used for acceptance filtering. + * @param[in] u32IDMask Specifies the identifier mask used for acceptance filtering. + * + * @retval FALSE No useful interface. + * @retval TRUE Configure a receive message object success. + * + * @details If the RxIE bit (CAN_IFn_MCON[10]) is set, the IntPnd bit (CAN_IFn_MCON[13]) + * will be set when a received Data Frame is accepted and stored in the Message Object. + */ +int32_t CAN_SetRxMsgAndMsk(CAN_T *tCAN, uint32_t u32MsgNum , uint32_t u32IDType, uint32_t u32ID, uint32_t u32IDMask) +{ + uint32_t u32TimeOutCount = 0; + + while(CAN_SetRxMsgObjAndMsk(tCAN, u32MsgNum, u32IDType, u32ID, u32IDMask, TRUE) == FALSE) + { + if(++u32TimeOutCount >= RETRY_COUNTS) return FALSE; + } + + return TRUE; +} + +/** + * @brief The function is used to configure several receive message objects. + * + * @param[in] tCAN The pointer to CAN module base address. + * @param[in] u32MsgNum The starting MSG RAM number(0 ~ 31). + * @param[in] u32MsgCount the number of MSG RAM of the FIFO. + * @param[in] u32IDType Specifies the identifier type of the frames that will be transmitted. Valid values are: + * - \ref CAN_STD_ID The 11-bit identifier. + * - \ref CAN_EXT_ID The 29-bit identifier. + * @param[in] u32ID Specifies the identifier used for acceptance filtering. + * + * @retval FALSE No useful interface. + * @retval TRUE Configure receive message objects success. + * + * @details The Interface Registers avoid conflict between the CPU accesses to the Message RAM and CAN message reception + * and transmission by buffering the data to be transferred. + */ +int32_t CAN_SetMultiRxMsg(CAN_T *tCAN, uint32_t u32MsgNum , uint32_t u32MsgCount, uint32_t u32IDType, uint32_t u32ID) +{ + uint32_t i = 0; + uint32_t u32TimeOutCount; + uint32_t u32EOB_Flag = 0; + + for(i = 1; i < u32MsgCount; i++) + { + u32TimeOutCount = 0; + + u32MsgNum += (i - 1); + + if(i == u32MsgCount) u32EOB_Flag = 1; + + while(CAN_SetRxMsgObj(tCAN, u32MsgNum, u32IDType, u32ID, u32EOB_Flag) == FALSE) + { + if(++u32TimeOutCount >= RETRY_COUNTS) return FALSE; + } + } + + return TRUE; +} + + +/** + * @brief Send CAN message. + * @param[in] tCAN The pointer to CAN module base address. + * @param[in] u32MsgNum Specifies the Message object number, from 0 to 31. + * @param[in] pCanMsg Pointer to the message structure where received data is copied. + * + * @retval FALSE 1. When operation in basic mode: Transmit message time out. \n + * 2. When operation in normal mode: No useful interface. \n + * @retval TRUE Transmit Message success. + * + * @details The receive/transmit priority for the Message Objects is attached to the message number. + * Message Object 1 has the highest priority, while Message Object 32 has the lowest priority. + */ +int32_t CAN_Transmit(CAN_T *tCAN, uint32_t u32MsgNum , STR_CANMSG_T* pCanMsg) +{ + if((tCAN->CON & CAN_CON_TEST_Msk) && (tCAN->TEST & CAN_TEST_BASIC_Msk)) + { + return (CAN_BasicSendMsg(tCAN, pCanMsg)); + } + else + { + if(CAN_SetTxMsg(tCAN, u32MsgNum, pCanMsg) == FALSE) + return FALSE; + CAN_TriggerTxMsg(tCAN, u32MsgNum); + } + + return TRUE; +} + + +/** + * @brief Gets the message, if received. + * @param[in] tCAN The pointer to CAN module base address. + * @param[in] u32MsgNum Specifies the Message object number, from 0 to 31. + * @param[in] pCanMsg Pointer to the message structure where received data is copied. + * + * @retval FALSE No any message received. + * @retval TRUE Receive Message success. + * + * @details The Interface Registers avoid conflict between the CPU accesses to the Message RAM and CAN message reception + * and transmission by buffering the data to be transferred. + */ +int32_t CAN_Receive(CAN_T *tCAN, uint32_t u32MsgNum , STR_CANMSG_T* pCanMsg) +{ + if((tCAN->CON & CAN_CON_TEST_Msk) && (tCAN->TEST & CAN_TEST_BASIC_Msk)) + { + return (CAN_BasicReceiveMsg(tCAN, pCanMsg)); + } + else + { + return CAN_ReadMsgObj(tCAN, u32MsgNum, TRUE, pCanMsg); + } +} + +/** + * @brief Clear interrupt pending bit. + * @param[in] tCAN The pointer to CAN module base address. + * @param[in] u32MsgNum Specifies the Message object number, from 0 to 31. + * + * @return None + * + * @details An interrupt remains pending until the application software has cleared it. + */ +void CAN_CLR_INT_PENDING_BIT(CAN_T *tCAN, uint8_t u32MsgNum) +{ + uint32_t u32MsgIfNum; + + if((u32MsgIfNum = LockIF_TL(tCAN)) == 2) + u32MsgIfNum = 0; + + tCAN->IF[u32MsgIfNum].CMASK = CAN_IF_CMASK_CLRINTPND_Msk | CAN_IF_CMASK_TXRQSTNEWDAT_Msk; + tCAN->IF[u32MsgIfNum].CREQ = 1 + u32MsgNum; + + ReleaseIF(tCAN, u32MsgIfNum); +} + + +/*@}*/ /* end of group CAN_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group CAN_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +/*** (C) COPYRIGHT 2014~2015 Nuvoton Technology Corp. ***/ + diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_can.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_can.h new file mode 100644 index 00000000000..7f661c3bb04 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_can.h @@ -0,0 +1,175 @@ +/**************************************************************************//** + * @file can.h + * @version V2.00 + * $Revision: 9 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 Series CAN Driver Header File + * + * @note + * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved. + * + ******************************************************************************/ +#ifndef __CAN_H__ +#define __CAN_H__ + +#include "M451Series.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup CAN_Driver CAN Driver + @{ +*/ + +/** @addtogroup CAN_EXPORTED_CONSTANTS CAN Exported Constants + @{ +*/ +/*---------------------------------------------------------------------------------------------------------*/ +/* CAN Test Mode Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define CAN_NORMAL_MODE 0 +#define CAN_BASIC_MODE 1 + +/*---------------------------------------------------------------------------------------------------------*/ +/* Message ID Type Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define CAN_STD_ID 0 +#define CAN_EXT_ID 1 + +/*---------------------------------------------------------------------------------------------------------*/ +/* Message Frame Type Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define CAN_REMOTE_FRAME 0 +#define CAN_DATA_FRAME 1 + +/*---------------------------------------------------------------------------------------------------------*/ +/* CAN message structure */ +/*---------------------------------------------------------------------------------------------------------*/ +typedef struct +{ + uint32_t IdType; + uint32_t FrameType; + uint32_t Id; + uint8_t DLC; + uint8_t Data[8]; +} STR_CANMSG_T; + +/*---------------------------------------------------------------------------------------------------------*/ +/* CAN mask message structure */ +/*---------------------------------------------------------------------------------------------------------*/ +typedef struct +{ + uint8_t u8Xtd; + uint8_t u8Dir; + uint32_t u32Id; + uint8_t u8IdType; +} STR_CANMASK_T; + +#define MSG(id) (id) + + +/*@}*/ /* end of group CAN_EXPORTED_CONSTANTS */ + + +/** @addtogroup CAN_EXPORTED_FUNCTIONS CAN Exported Functions + @{ +*/ + +/** + * @brief Get interrupt status. + * + * @param[in] can The base address of can module. + * + * @return CAN module status register value. + * + * @details Status Interrupt is generated by bits BOff (CAN_STATUS[7]), EWarn (CAN_STATUS[6]), + * EPass (CAN_STATUS[5]), RxOk (CAN_STATUS[4]), TxOk (CAN_STATUS[3]), and LEC (CAN_STATUS[2:0]). + */ +#define CAN_GET_INT_STATUS(can) ((can)->STATUS) + +/** + * @brief Get specified interrupt pending status. + * + * @param[in] can The base address of can module. + * + * @return The source of the interrupt. + * + * @details If several interrupts are pending, the CAN Interrupt Register will point to the pending interrupt + * with the highest priority, disregarding their chronological order. + */ +#define CAN_GET_INT_PENDING_STATUS(can) ((can)->IIDR) + +/** + * @brief Disable wake-up function. + * + * @param[in] can The base address of can module. + * + * @return None + * + * @details The macro is used to disable wake-up function. + */ +#define CAN_DISABLE_WAKEUP(can) ((can)->WU_EN = 0) + +/** + * @brief Enable wake-up function. + * + * @param[in] can The base address of can module. + * + * @return None + * + * @details User can wake-up system when there is a falling edge in the CAN_Rx pin. + */ +#define CAN_ENABLE_WAKEUP(can) ((can)->WU_EN = CAN_WUEN_WAKUP_EN_Msk) + +/** + * @brief Get specified Message Object new data into bit value. + * + * @param[in] can The base address of can module. + * @param[in] u32MsgNum Specified Message Object number, valid value are from 0 to 31. + * + * @return Specified Message Object new data into bit value. + * + * @details The NewDat bit (CAN_IFn_MCON[15]) of a specific Message Object can be set/reset by the software through the IFn Message Interface Registers + * or by the Message Handler after reception of a Data Frame or after a successful transmission. + */ +#define CAN_GET_NEW_DATA_IN_BIT(can, u32MsgNum) ((u32MsgNum) < 16 ? (can)->NDAT1 & (1 << (u32MsgNum)) : (can)->NDAT2 & (1 << ((u32MsgNum)-16))) + + +/*---------------------------------------------------------------------------------------------------------*/ +/* Define CAN functions prototype */ +/*---------------------------------------------------------------------------------------------------------*/ +uint32_t CAN_SetBaudRate(CAN_T *tCAN, uint32_t u32BaudRate); +uint32_t CAN_Open(CAN_T *tCAN, uint32_t u32BaudRate, uint32_t u32Mode); +void CAN_Close(CAN_T *tCAN); +void CAN_CLR_INT_PENDING_BIT(CAN_T *tCAN, uint8_t u32MsgNum); +void CAN_EnableInt(CAN_T *tCAN, uint32_t u32Mask); +void CAN_DisableInt(CAN_T *tCAN, uint32_t u32Mask); +int32_t CAN_Transmit(CAN_T *tCAN, uint32_t u32MsgNum , STR_CANMSG_T* pCanMsg); +int32_t CAN_Receive(CAN_T *tCAN, uint32_t u32MsgNum , STR_CANMSG_T* pCanMsg); +int32_t CAN_SetMultiRxMsg(CAN_T *tCAN, uint32_t u32MsgNum , uint32_t u32MsgCount, uint32_t u32IDType, uint32_t u32ID); +int32_t CAN_SetRxMsg(CAN_T *tCAN, uint32_t u32MsgNum , uint32_t u32IDType, uint32_t u32ID); +int32_t CAN_SetRxMsgAndMsk(CAN_T *tCAN, uint32_t u32MsgNum , uint32_t u32IDType, uint32_t u32ID, uint32_t u32IDMask); +int32_t CAN_SetTxMsg(CAN_T *tCAN, uint32_t u32MsgNum , STR_CANMSG_T* pCanMsg); +int32_t CAN_TriggerTxMsg(CAN_T *tCAN, uint32_t u32MsgNum); + + +/*@}*/ /* end of group CAN_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group CAN_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +#ifdef __cplusplus +} +#endif + +#endif //__CAN_H__ + +/*** (C) COPYRIGHT 2014~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_clk.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_clk.c new file mode 100644 index 00000000000..eae295ea443 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_clk.c @@ -0,0 +1,751 @@ +/**************************************************************************//** + * @file clk.c + * @version V3.00 + * $Revision: 35 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series CLK driver source file + * + * @note + * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved. + *****************************************************************************/ + +#include "M451Series.h" + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup CLK_Driver CLK Driver + @{ +*/ + +/** @addtogroup CLK_EXPORTED_FUNCTIONS CLK Exported Functions + @{ +*/ + +/** + * @brief Disable clock divider output function + * @param None + * @return None + * @details This function disable clock divider output function. + */ +void CLK_DisableCKO(void) +{ + /* Disable CKO clock source */ + CLK_DisableModuleClock(CLKO_MODULE); +} + +/** + * @brief This function enable clock divider output module clock, + * enable clock divider output function and set frequency selection. + * @param[in] u32ClkSrc is frequency divider function clock source. Including : + * - \ref CLK_CLKSEL1_CLKOSEL_HXT + * - \ref CLK_CLKSEL1_CLKOSEL_LXT + * - \ref CLK_CLKSEL1_CLKOSEL_HCLK + * - \ref CLK_CLKSEL1_CLKOSEL_HIRC + * @param[in] u32ClkDiv is divider output frequency selection. It could be 0~15. + * @param[in] u32ClkDivBy1En is clock divided by one enabled. + * @return None + * @details Output selected clock to CKO. The output clock frequency is divided by u32ClkDiv. \n + * The formula is: \n + * CKO frequency = (Clock source frequency) / 2^(u32ClkDiv + 1) \n + * This function is just used to set CKO clock. + * User must enable I/O for CKO clock output pin by themselves. \n + */ +void CLK_EnableCKO(uint32_t u32ClkSrc, uint32_t u32ClkDiv, uint32_t u32ClkDivBy1En) +{ + /* CKO = clock source / 2^(u32ClkDiv + 1) */ + CLK->CLKOCTL = CLK_CLKOCTL_CLKOEN_Msk | u32ClkDiv | (u32ClkDivBy1En << CLK_CLKOCTL_DIV1EN_Pos); + + /* Enable CKO clock source */ + CLK_EnableModuleClock(CLKO_MODULE); + + /* Select CKO clock source */ + CLK_SetModuleClock(CLKO_MODULE, u32ClkSrc, 0); +} + +/** + * @brief Enter to Power-down mode + * @param None + * @return None + * @details This function is used to let system enter to Power-down mode. \n + * The register write-protection function should be disabled before using this function. + */ +void CLK_PowerDown(void) +{ + /* Set the processor uses deep sleep as its low power mode */ + SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; + + /* Set system Power-down enabled and Power-down entry condition */ + CLK->PWRCTL |= (CLK_PWRCTL_PDEN_Msk | CLK_PWRCTL_PDWTCPU_Msk); + + /* Chip enter Power-down mode after CPU run WFI instruction */ + __WFI(); +} + +/** + * @brief Enter to Idle mode + * @param None + * @return None + * @details This function let system enter to Idle mode. \n + * The register write-protection function should be disabled before using this function. + */ +void CLK_Idle(void) +{ + /* Set the processor uses sleep as its low power mode */ + SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk; + + /* Set chip in idle mode because of WFI command */ + CLK->PWRCTL &= ~CLK_PWRCTL_PDEN_Msk; + + /* Chip enter idle mode after CPU run WFI instruction */ + __WFI(); +} + +/** + * @brief Get external high speed crystal clock frequency + * @param None + * @return External high frequency crystal frequency + * @details This function get external high frequency crystal frequency. The frequency unit is Hz. + */ +uint32_t CLK_GetHXTFreq(void) +{ + if(CLK->PWRCTL & CLK_PWRCTL_HXTEN_Msk) + return __HXT; + else + return 0; +} + + +/** + * @brief Get external low speed crystal clock frequency + * @param None + * @return External low speed crystal clock frequency + * @details This function get external low frequency crystal frequency. The frequency unit is Hz. + */ +uint32_t CLK_GetLXTFreq(void) +{ + if(CLK->PWRCTL & CLK_PWRCTL_LXTEN_Msk) + return __LXT; + else + return 0; +} + +/** + * @brief Get PCLK0 frequency + * @param None + * @return PCLK0 frequency + * @details This function get PCLK0 frequency. The frequency unit is Hz. + */ +uint32_t CLK_GetPCLK0Freq(void) +{ + SystemCoreClockUpdate(); + if(CLK->CLKSEL0 & CLK_CLKSEL0_PCLK0SEL_Msk) + return SystemCoreClock / 2; + else + return SystemCoreClock; +} + + +/** + * @brief Get PCLK1 frequency + * @param None + * @return PCLK1 frequency + * @details This function get PCLK1 frequency. The frequency unit is Hz. + */ +uint32_t CLK_GetPCLK1Freq(void) +{ + SystemCoreClockUpdate(); + if(CLK->CLKSEL0 & CLK_CLKSEL0_PCLK1SEL_Msk) + return SystemCoreClock / 2; + else + return SystemCoreClock; +} + + +/** + * @brief Get HCLK frequency + * @param None + * @return HCLK frequency + * @details This function get HCLK frequency. The frequency unit is Hz. + */ +uint32_t CLK_GetHCLKFreq(void) +{ + SystemCoreClockUpdate(); + return SystemCoreClock; +} + + +/** + * @brief Get CPU frequency + * @param None + * @return CPU frequency + * @details This function get CPU frequency. The frequency unit is Hz. + */ +uint32_t CLK_GetCPUFreq(void) +{ + SystemCoreClockUpdate(); + return SystemCoreClock; +} + + +/** + * @brief Set HCLK frequency + * @param[in] u32Hclk is HCLK frequency. The range of u32Hclk is 25 MHz ~ 72 MHz. + * @return HCLK frequency + * @details This function is used to set HCLK frequency. The frequency unit is Hz. \n + * It would configure PLL frequency to 50MHz ~ 144MHz, + * set HCLK clock divider as 2 and switch HCLK clock source to PLL. \n + * The register write-protection function should be disabled before using this function. + */ +uint32_t CLK_SetCoreClock(uint32_t u32Hclk) +{ + uint32_t u32HIRCSTB; + + /* Read HIRC clock source stable flag */ + u32HIRCSTB = CLK->STATUS & CLK_STATUS_HIRCSTB_Msk; + + /* The range of u32Hclk is 25 MHz ~ 72 MHz */ + if(u32Hclk > FREQ_72MHZ) + u32Hclk = FREQ_72MHZ; + if(u32Hclk < FREQ_25MHZ) + u32Hclk = FREQ_25MHZ; + + /* Switch HCLK clock source to HIRC clock for safe */ + CLK->PWRCTL |= CLK_PWRCTL_HIRCEN_Msk; + CLK_WaitClockReady(CLK_STATUS_HIRCSTB_Msk); + CLK->CLKSEL0 |= CLK_CLKSEL0_HCLKSEL_Msk; + CLK->CLKDIV0 &= (~CLK_CLKDIV0_HCLKDIV_Msk); + + /* Configure PLL setting if HXT clock is enabled */ + if(CLK->PWRCTL & CLK_PWRCTL_HXTEN_Msk) + u32Hclk = CLK_EnablePLL(CLK_PLLCTL_PLLSRC_HXT, (u32Hclk << 1)); + + /* Configure PLL setting if HXT clock is not enabled */ + else + { + u32Hclk = CLK_EnablePLL(CLK_PLLCTL_PLLSRC_HIRC, (u32Hclk << 1)); + + /* Read HIRC clock source stable flag */ + u32HIRCSTB = CLK->STATUS & CLK_STATUS_HIRCSTB_Msk; + } + + /* Select HCLK clock source to PLL, + Select HCLK clock source divider as 2 + and update system core clock + */ + CLK_SetHCLK(CLK_CLKSEL0_HCLKSEL_PLL, CLK_CLKDIV0_HCLK(2)); + + /* Disable HIRC if HIRC is disabled before setting core clock */ + if(u32HIRCSTB == 0) + CLK->PWRCTL &= ~CLK_PWRCTL_HIRCEN_Msk; + + /* Return actually HCLK frequency is PLL frequency divide 2 */ + return u32Hclk >> 1; +} + +/** + * @brief This function set HCLK clock source and HCLK clock divider + * @param[in] u32ClkSrc is HCLK clock source. Including : + * - \ref CLK_CLKSEL0_HCLKSEL_HXT + * - \ref CLK_CLKSEL0_HCLKSEL_LXT + * - \ref CLK_CLKSEL0_HCLKSEL_PLL + * - \ref CLK_CLKSEL0_HCLKSEL_LIRC + * - \ref CLK_CLKSEL0_HCLKSEL_HIRC + * @param[in] u32ClkDiv is HCLK clock divider. Including : + * - \ref CLK_CLKDIV0_HCLK(x) + * @return None + * @details This function set HCLK clock source and HCLK clock divider. \n + * The register write-protection function should be disabled before using this function. + */ +void CLK_SetHCLK(uint32_t u32ClkSrc, uint32_t u32ClkDiv) +{ + uint32_t u32HIRCSTB; + + /* Read HIRC clock source stable flag */ + u32HIRCSTB = CLK->STATUS & CLK_STATUS_HIRCSTB_Msk; + + /* Switch to HIRC for Safe. Avoid HCLK too high when applying new divider. */ + CLK->PWRCTL |= CLK_PWRCTL_HIRCEN_Msk; + CLK_WaitClockReady(CLK_STATUS_HIRCSTB_Msk); + CLK->CLKSEL0 = (CLK->CLKSEL0 & (~CLK_CLKSEL0_HCLKSEL_Msk)) | CLK_CLKSEL0_HCLKSEL_HIRC; + + /* Apply new Divider */ + CLK->CLKDIV0 = (CLK->CLKDIV0 & (~CLK_CLKDIV0_HCLKDIV_Msk)) | u32ClkDiv; + + /* Switch HCLK to new HCLK source */ + CLK->CLKSEL0 = (CLK->CLKSEL0 & (~CLK_CLKSEL0_HCLKSEL_Msk)) | u32ClkSrc; + + /* Update System Core Clock */ + SystemCoreClockUpdate(); + + /* Disable HIRC if HIRC is disabled before switching HCLK source */ + if(u32HIRCSTB == 0) + CLK->PWRCTL &= ~CLK_PWRCTL_HIRCEN_Msk; +} + +/** + * @brief This function set selected module clock source and module clock divider + * @param[in] u32ModuleIdx is module index. + * @param[in] u32ClkSrc is module clock source. + * @param[in] u32ClkDiv is module clock divider. + * @return None + * @details Valid parameter combinations listed in following table: + * + * |Module index |Clock source |Divider | + * | :---------------- | :----------------------------------- | :---------------------- | + * |\ref WDT_MODULE |\ref CLK_CLKSEL1_WDTSEL_LXT | x | + * |\ref WDT_MODULE |\ref CLK_CLKSEL1_WDTSEL_PCLK0_DIV2048 | x | + * |\ref WDT_MODULE |\ref CLK_CLKSEL1_WDTSEL_LIRC | x | + * |\ref RTC_MODULE |\ref CLK_CLKSEL3_RTCSEL_LXT | x | + * |\ref RTC_MODULE |\ref CLK_CLKSEL3_RTCSEL_LIRC | x | + * |\ref TMR0_MODULE |\ref CLK_CLKSEL1_TMR0SEL_HXT | x | + * |\ref TMR0_MODULE |\ref CLK_CLKSEL1_TMR0SEL_LXT | x | + * |\ref TMR0_MODULE |\ref CLK_CLKSEL1_TMR0SEL_PCLK0 | x | + * |\ref TMR0_MODULE |\ref CLK_CLKSEL1_TMR0SEL_EXT_TRG | x | + * |\ref TMR0_MODULE |\ref CLK_CLKSEL1_TMR0SEL_LIRC | x | + * |\ref TMR0_MODULE |\ref CLK_CLKSEL1_TMR0SEL_HIRC | x | + * |\ref TMR1_MODULE |\ref CLK_CLKSEL1_TMR1SEL_HXT | x | + * |\ref TMR1_MODULE |\ref CLK_CLKSEL1_TMR1SEL_LXT | x | + * |\ref TMR1_MODULE |\ref CLK_CLKSEL1_TMR1SEL_PCLK0 | x | + * |\ref TMR1_MODULE |\ref CLK_CLKSEL1_TMR1SEL_EXT_TRG | x | + * |\ref TMR1_MODULE |\ref CLK_CLKSEL1_TMR1SEL_LIRC | x | + * |\ref TMR1_MODULE |\ref CLK_CLKSEL1_TMR1SEL_HIRC | x | + * |\ref TMR2_MODULE |\ref CLK_CLKSEL1_TMR2SEL_HXT | x | + * |\ref TMR2_MODULE |\ref CLK_CLKSEL1_TMR2SEL_LXT | x | + * |\ref TMR2_MODULE |\ref CLK_CLKSEL1_TMR2SEL_PCLK1 | x | + * |\ref TMR2_MODULE |\ref CLK_CLKSEL1_TMR2SEL_EXT_TRG | x | + * |\ref TMR2_MODULE |\ref CLK_CLKSEL1_TMR2SEL_LIRC | x | + * |\ref TMR2_MODULE |\ref CLK_CLKSEL1_TMR2SEL_HIRC | x | + * |\ref TMR3_MODULE |\ref CLK_CLKSEL1_TMR3SEL_HXT | x | + * |\ref TMR3_MODULE |\ref CLK_CLKSEL1_TMR3SEL_LXT | x | + * |\ref TMR3_MODULE |\ref CLK_CLKSEL1_TMR3SEL_PCLK1 | x | + * |\ref TMR3_MODULE |\ref CLK_CLKSEL1_TMR3SEL_EXT_TRG | x | + * |\ref TMR3_MODULE |\ref CLK_CLKSEL1_TMR3SEL_LIRC | x | + * |\ref TMR3_MODULE |\ref CLK_CLKSEL1_TMR3SEL_HIRC | x | + * |\ref CLKO_MODULE |\ref CLK_CLKSEL1_CLKOSEL_HXT | x | + * |\ref CLKO_MODULE |\ref CLK_CLKSEL1_CLKOSEL_LXT | x | + * |\ref CLKO_MODULE |\ref CLK_CLKSEL1_CLKOSEL_HCLK | x | + * |\ref CLKO_MODULE |\ref CLK_CLKSEL1_CLKOSEL_HIRC | x | + * |\ref SPI0_MODULE |\ref CLK_CLKSEL2_SPI0SEL_HXT | x | + * |\ref SPI0_MODULE |\ref CLK_CLKSEL2_SPI0SEL_PLL | x | + * |\ref SPI0_MODULE |\ref CLK_CLKSEL2_SPI0SEL_PCLK0 | x | + * |\ref SPI0_MODULE |\ref CLK_CLKSEL2_SPI0SEL_HIRC | x | + * |\ref SPI1_MODULE |\ref CLK_CLKSEL2_SPI1SEL_HXT | x | + * |\ref SPI1_MODULE |\ref CLK_CLKSEL2_SPI1SEL_PLL | x | + * |\ref SPI1_MODULE |\ref CLK_CLKSEL2_SPI1SEL_PCLK1 | x | + * |\ref SPI1_MODULE |\ref CLK_CLKSEL2_SPI1SEL_HIRC | x | + * |\ref SPI2_MODULE |\ref CLK_CLKSEL2_SPI2SEL_HXT | x | + * |\ref SPI2_MODULE |\ref CLK_CLKSEL2_SPI2SEL_PLL | x | + * |\ref SPI2_MODULE |\ref CLK_CLKSEL2_SPI2SEL_PCLK0 | x | + * |\ref SPI2_MODULE |\ref CLK_CLKSEL2_SPI2SEL_HIRC | x | + * |\ref UART0_MODULE |\ref CLK_CLKSEL1_UARTSEL_HXT |\ref CLK_CLKDIV0_UART(x) | + * |\ref UART0_MODULE |\ref CLK_CLKSEL1_UARTSEL_PLL |\ref CLK_CLKDIV0_UART(x) | + * |\ref UART0_MODULE |\ref CLK_CLKSEL1_UARTSEL_LXT |\ref CLK_CLKDIV0_UART(x) | + * |\ref UART0_MODULE |\ref CLK_CLKSEL1_UARTSEL_HIRC |\ref CLK_CLKDIV0_UART(x) | + * |\ref UART1_MODULE |\ref CLK_CLKSEL1_UARTSEL_HXT |\ref CLK_CLKDIV0_UART(x) | + * |\ref UART1_MODULE |\ref CLK_CLKSEL1_UARTSEL_PLL |\ref CLK_CLKDIV0_UART(x) | + * |\ref UART1_MODULE |\ref CLK_CLKSEL1_UARTSEL_LXT |\ref CLK_CLKDIV0_UART(x) | + * |\ref UART1_MODULE |\ref CLK_CLKSEL1_UARTSEL_HIRC |\ref CLK_CLKDIV0_UART(x) | + * |\ref UART2_MODULE |\ref CLK_CLKSEL1_UARTSEL_HXT |\ref CLK_CLKDIV0_UART(x) | + * |\ref UART2_MODULE |\ref CLK_CLKSEL1_UARTSEL_PLL |\ref CLK_CLKDIV0_UART(x) | + * |\ref UART2_MODULE |\ref CLK_CLKSEL1_UARTSEL_LXT |\ref CLK_CLKDIV0_UART(x) | + * |\ref UART2_MODULE |\ref CLK_CLKSEL1_UARTSEL_HIRC |\ref CLK_CLKDIV0_UART(x) | + * |\ref UART3_MODULE |\ref CLK_CLKSEL1_UARTSEL_HXT |\ref CLK_CLKDIV0_UART(x) | + * |\ref UART3_MODULE |\ref CLK_CLKSEL1_UARTSEL_LXT |\ref CLK_CLKDIV0_UART(x) | + * |\ref UART3_MODULE |\ref CLK_CLKSEL1_UARTSEL_PLL |\ref CLK_CLKDIV0_UART(x) | + * |\ref UART3_MODULE |\ref CLK_CLKSEL1_UARTSEL_HIRC |\ref CLK_CLKDIV0_UART(x) | + * |\ref USBH_MODULE | x |\ref CLK_CLKDIV0_USB(x) | + * |\ref USBD_MODULE | x |\ref CLK_CLKDIV0_USB(x) | + * |\ref OTG_MODULE | x |\ref CLK_CLKDIV0_USB(x) | + * |\ref EADC_MODULE | x |\ref CLK_CLKDIV0_EADC(x) | + * |\ref SC0_MODULE |\ref CLK_CLKSEL3_SC0SEL_HXT |\ref CLK_CLKDIV1_SC0(x) | + * |\ref SC0_MODULE |\ref CLK_CLKSEL3_SC0SEL_PLL |\ref CLK_CLKDIV1_SC0(x) | + * |\ref SC0_MODULE |\ref CLK_CLKSEL3_SC0SEL_PCLK0 |\ref CLK_CLKDIV1_SC0(x) | + * |\ref SC0_MODULE |\ref CLK_CLKSEL3_SC0SEL_HIRC |\ref CLK_CLKDIV1_SC0(x) | + * |\ref PWM0_MODULE |\ref CLK_CLKSEL2_PWM0SEL_PLL | x | + * |\ref PWM0_MODULE |\ref CLK_CLKSEL2_PWM0SEL_PCLK0 | x | + * |\ref PWM1_MODULE |\ref CLK_CLKSEL2_PWM1SEL_PLL | x | + * |\ref PWM1_MODULE |\ref CLK_CLKSEL2_PWM1SEL_PCLK1 | x | + * |\ref WWDT_MODULE |\ref CLK_CLKSEL1_WWDTSEL_PCLK0_DIV2048 | x | + * |\ref WWDT_MODULE |\ref CLK_CLKSEL1_WWDTSEL_LIRC | x | + */ +void CLK_SetModuleClock(uint32_t u32ModuleIdx, uint32_t u32ClkSrc, uint32_t u32ClkDiv) +{ + uint32_t u32sel = 0, u32div = 0; + + if(MODULE_CLKDIV_Msk(u32ModuleIdx) != MODULE_NoMsk) + { + /* Get clock divider control register address */ + u32div = (uint32_t)&CLK->CLKDIV0 + ((MODULE_CLKDIV(u32ModuleIdx)) * 4); + /* Apply new divider */ + M32(u32div) = (M32(u32div) & (~(MODULE_CLKDIV_Msk(u32ModuleIdx) << MODULE_CLKDIV_Pos(u32ModuleIdx)))) | u32ClkDiv; + } + + if(MODULE_CLKSEL_Msk(u32ModuleIdx) != MODULE_NoMsk) + { + /* Get clock select control register address */ + u32sel = (uint32_t)&CLK->CLKSEL0 + ((MODULE_CLKSEL(u32ModuleIdx)) * 4); + /* Set new clock selection setting */ + M32(u32sel) = (M32(u32sel) & (~(MODULE_CLKSEL_Msk(u32ModuleIdx) << MODULE_CLKSEL_Pos(u32ModuleIdx)))) | u32ClkSrc; + } +} + + +/** + * @brief Set SysTick clock source + * @param[in] u32ClkSrc is module clock source. Including: + * - \ref CLK_CLKSEL0_STCLKSEL_HXT + * - \ref CLK_CLKSEL0_STCLKSEL_LXT + * - \ref CLK_CLKSEL0_STCLKSEL_HXT_DIV2 + * - \ref CLK_CLKSEL0_STCLKSEL_HCLK_DIV2 + * - \ref CLK_CLKSEL0_STCLKSEL_HIRC_DIV2 + * @return None + * @details This function set SysTick clock source. \n + * The register write-protection function should be disabled before using this function. + */ +void CLK_SetSysTickClockSrc(uint32_t u32ClkSrc) +{ + CLK->CLKSEL0 = (CLK->CLKSEL0 & ~CLK_CLKSEL0_STCLKSEL_Msk) | u32ClkSrc; + +} + +/** + * @brief Enable clock source + * @param[in] u32ClkMask is clock source mask. Including : + * - \ref CLK_PWRCTL_HXTEN_Msk + * - \ref CLK_PWRCTL_LXTEN_Msk + * - \ref CLK_PWRCTL_HIRCEN_Msk + * - \ref CLK_PWRCTL_LIRCEN_Msk + * @return None + * @details This function enable clock source. \n + * The register write-protection function should be disabled before using this function. + */ +void CLK_EnableXtalRC(uint32_t u32ClkMask) +{ + CLK->PWRCTL |= u32ClkMask; +} + +/** + * @brief Disable clock source + * @param[in] u32ClkMask is clock source mask. Including : + * - \ref CLK_PWRCTL_HXTEN_Msk + * - \ref CLK_PWRCTL_LXTEN_Msk + * - \ref CLK_PWRCTL_HIRCEN_Msk + * - \ref CLK_PWRCTL_LIRCEN_Msk + * @return None + * @details This function disable clock source. \n + * The register write-protection function should be disabled before using this function. + */ +void CLK_DisableXtalRC(uint32_t u32ClkMask) +{ + CLK->PWRCTL &= ~u32ClkMask; +} + +/** + * @brief Enable module clock + * @param[in] u32ModuleIdx is module index. Including : + * - \ref PDMA_MODULE + * - \ref ISP_MODULE + * - \ref EBI_MODULE + * - \ref USBH_MODULE + * - \ref CRC_MODULE + * - \ref WDT_MODULE + * - \ref WWDT_MODULE + * - \ref RTC_MODULE + * - \ref TMR0_MODULE + * - \ref TMR1_MODULE + * - \ref TMR2_MODULE + * - \ref TMR3_MODULE + * - \ref CLKO_MODULE + * - \ref ACMP01_MODULE + * - \ref I2C0_MODULE + * - \ref I2C1_MODULE + * - \ref SPI0_MODULE + * - \ref SPI1_MODULE + * - \ref SPI2_MODULE + * - \ref UART0_MODULE + * - \ref UART1_MODULE + * - \ref UART2_MODULE + * - \ref UART3_MODULE + * - \ref CAN0_MODULE + * - \ref OTG_MODULE + * - \ref USBD_MODULE + * - \ref EADC_MODULE + * - \ref SC0_MODULE + * - \ref DAC_MODULE + * - \ref PWM0_MODULE + * - \ref PWM1_MODULE + * - \ref TK_MODULE + * @return None + * @details This function is used to enable module clock. + */ +void CLK_EnableModuleClock(uint32_t u32ModuleIdx) +{ + *(volatile uint32_t *)((uint32_t)&CLK->AHBCLK + (MODULE_APBCLK(u32ModuleIdx) * 4)) |= 1 << MODULE_IP_EN_Pos(u32ModuleIdx); +} + +/** + * @brief Disable module clock + * @param[in] u32ModuleIdx is module index. Including : + * - \ref PDMA_MODULE + * - \ref ISP_MODULE + * - \ref EBI_MODULE + * - \ref USBH_MODULE + * - \ref CRC_MODULE + * - \ref WDT_MODULE + * - \ref WWDT_MODULE + * - \ref RTC_MODULE + * - \ref TMR0_MODULE + * - \ref TMR1_MODULE + * - \ref TMR2_MODULE + * - \ref TMR3_MODULE + * - \ref CLKO_MODULE + * - \ref ACMP01_MODULE + * - \ref I2C0_MODULE + * - \ref I2C1_MODULE + * - \ref SPI0_MODULE + * - \ref SPI1_MODULE + * - \ref SPI2_MODULE + * - \ref UART0_MODULE + * - \ref UART1_MODULE + * - \ref UART2_MODULE + * - \ref UART3_MODULE + * - \ref CAN0_MODULE + * - \ref OTG_MODULE + * - \ref USBD_MODULE + * - \ref EADC_MODULE + * - \ref SC0_MODULE + * - \ref DAC_MODULE + * - \ref PWM0_MODULE + * - \ref PWM1_MODULE + * - \ref TK_MODULE + * @return None + * @details This function is used to disable module clock. + */ +void CLK_DisableModuleClock(uint32_t u32ModuleIdx) +{ + *(volatile uint32_t *)((uint32_t)&CLK->AHBCLK + (MODULE_APBCLK(u32ModuleIdx) * 4)) &= ~(1 << MODULE_IP_EN_Pos(u32ModuleIdx)); +} + + +/** + * @brief Set PLL frequency + * @param[in] u32PllClkSrc is PLL clock source. Including : + * - \ref CLK_PLLCTL_PLLSRC_HXT + * - \ref CLK_PLLCTL_PLLSRC_HIRC + * @param[in] u32PllFreq is PLL frequency. + * @return PLL frequency + * @details This function is used to configure PLLCTL register to set specified PLL frequency. \n + * The register write-protection function should be disabled before using this function. + */ +uint32_t CLK_EnablePLL(uint32_t u32PllClkSrc, uint32_t u32PllFreq) +{ + uint32_t u32PllSrcClk, u32NR, u32NF, u32NO, u32CLK_SRC; + uint32_t u32Tmp, u32Tmp2, u32Tmp3, u32Min, u32MinNF, u32MinNR; + + /* Disable PLL first to avoid unstable when setting PLL */ + CLK_DisablePLL(); + + /* PLL source clock is from HXT */ + if(u32PllClkSrc == CLK_PLLCTL_PLLSRC_HXT) + { + /* Enable HXT clock */ + CLK->PWRCTL |= CLK_PWRCTL_HXTEN_Msk; + + /* Wait for HXT clock ready */ + CLK_WaitClockReady(CLK_STATUS_HXTSTB_Msk); + + /* Select PLL source clock from HXT */ + u32CLK_SRC = CLK_PLLCTL_PLLSRC_HXT; + u32PllSrcClk = __HXT; + + /* u32NR start from 2 */ + u32NR = 2; + } + + /* PLL source clock is from HIRC */ + else + { + /* Enable HIRC clock */ + CLK->PWRCTL |= CLK_PWRCTL_HIRCEN_Msk; + + /* Wait for HIRC clock ready */ + CLK_WaitClockReady(CLK_STATUS_HIRCSTB_Msk); + + /* Select PLL source clock from HIRC */ + u32CLK_SRC = CLK_PLLCTL_PLLSRC_HIRC; + u32PllSrcClk = __HIRC; + + /* u32NR start from 4 when FIN = 22.1184MHz to avoid calculation overflow */ + u32NR = 4; + } + + /* Select "NO" according to request frequency */ + if((u32PllFreq <= FREQ_500MHZ) && (u32PllFreq > FREQ_250MHZ)) + { + u32NO = 0; + } + else if((u32PllFreq <= FREQ_250MHZ) && (u32PllFreq > FREQ_125MHZ)) + { + u32NO = 1; + u32PllFreq = u32PllFreq << 1; + } + else if((u32PllFreq <= FREQ_125MHZ) && (u32PllFreq >= FREQ_50MHZ)) + { + u32NO = 3; + u32PllFreq = u32PllFreq << 2; + } + else + { + /* Wrong frequency request. Just return default setting. */ + goto lexit; + } + + /* Find best solution */ + u32Min = (uint32_t) - 1; + u32MinNR = 0; + u32MinNF = 0; + for(; u32NR <= 33; u32NR++) + { + u32Tmp = u32PllSrcClk / u32NR; + if((u32Tmp > 1600000) && (u32Tmp < 16000000)) + { + for(u32NF = 2; u32NF <= 513; u32NF++) + { + u32Tmp2 = u32Tmp * u32NF; + if((u32Tmp2 >= 200000000) && (u32Tmp2 <= 500000000)) + { + u32Tmp3 = (u32Tmp2 > u32PllFreq) ? u32Tmp2 - u32PllFreq : u32PllFreq - u32Tmp2; + if(u32Tmp3 < u32Min) + { + u32Min = u32Tmp3; + u32MinNR = u32NR; + u32MinNF = u32NF; + + /* Break when get good results */ + if(u32Min == 0) + break; + } + } + } + } + } + + /* Enable and apply new PLL setting. */ + CLK->PLLCTL = u32CLK_SRC | (u32NO << 14) | ((u32MinNR - 2) << 9) | (u32MinNF - 2); + + /* Wait for PLL clock stable */ + CLK_WaitClockReady(CLK_STATUS_PLLSTB_Msk); + + /* Return actual PLL output clock frequency */ + return u32PllSrcClk / ((u32NO + 1) * u32MinNR) * u32MinNF; + +lexit: + + /* Apply default PLL setting and return */ + if(u32PllClkSrc == CLK_PLLCTL_PLLSRC_HXT) + CLK->PLLCTL = CLK_PLLCTL_72MHz_HXT; /* 72MHz */ + else + CLK->PLLCTL = CLK_PLLCTL_72MHz_HIRC; /* 71.8848MHz */ + + /* Wait for PLL clock stable */ + CLK_WaitClockReady(CLK_STATUS_PLLSTB_Msk); + + return CLK_GetPLLClockFreq(); + +} + +/** + * @brief Disable PLL + * @param None + * @return None + * @details This function set PLL in Power-down mode. \n + * The register write-protection function should be disabled before using this function. + */ +void CLK_DisablePLL(void) +{ + CLK->PLLCTL |= CLK_PLLCTL_PD_Msk; +} + + +/** + * @brief This function check selected clock source status + * @param[in] u32ClkMask is selected clock source. Including : + * - \ref CLK_STATUS_HXTSTB_Msk + * - \ref CLK_STATUS_LXTSTB_Msk + * - \ref CLK_STATUS_HIRCSTB_Msk + * - \ref CLK_STATUS_LIRCSTB_Msk + * - \ref CLK_STATUS_PLLSTB_Msk + * @retval 0 clock is not stable + * @retval 1 clock is stable + * @details To wait for clock ready by specified clock source stable flag or timeout (~300ms) + */ +uint32_t CLK_WaitClockReady(uint32_t u32ClkMask) +{ + int32_t i32TimeOutCnt = 2160000; + + while((CLK->STATUS & u32ClkMask) != u32ClkMask) + { + if(i32TimeOutCnt-- <= 0) + return 0; + } + + return 1; +} + +/** + * @brief Enable System Tick counter + * @param[in] u32ClkSrc is System Tick clock source. Including: + * - \ref CLK_CLKSEL0_STCLKSEL_HXT + * - \ref CLK_CLKSEL0_STCLKSEL_LXT + * - \ref CLK_CLKSEL0_STCLKSEL_HXT_DIV2 + * - \ref CLK_CLKSEL0_STCLKSEL_HCLK_DIV2 + * - \ref CLK_CLKSEL0_STCLKSEL_HIRC_DIV2 + * - \ref CLK_CLKSEL0_STCLKSEL_HCLK + * @param[in] u32Count is System Tick reload value. It could be 0~0xFFFFFF. + * @return None + * @details This function set System Tick clock source, reload value, enable System Tick counter and interrupt. \n + * The register write-protection function should be disabled before using this function. + */ +void CLK_EnableSysTick(uint32_t u32ClkSrc, uint32_t u32Count) +{ + /* Set System Tick counter disabled */ + SysTick->CTRL = 0; + + /* Set System Tick clock source */ + if( u32ClkSrc == CLK_CLKSEL0_STCLKSEL_HCLK ) + SysTick->CTRL |= SysTick_CTRL_CLKSOURCE_Msk; + else + CLK->CLKSEL0 = (CLK->CLKSEL0 & ~CLK_CLKSEL0_STCLKSEL_Msk) | u32ClkSrc; + + /* Set System Tick reload value */ + SysTick->LOAD = u32Count; + + /* Clear System Tick current value and counter flag */ + SysTick->VAL = 0; + + /* Set System Tick interrupt enabled and counter enabled */ + SysTick->CTRL |= SysTick_CTRL_TICKINT_Msk | SysTick_CTRL_ENABLE_Msk; +} + +/** + * @brief Disable System Tick counter + * @param None + * @return None + * @details This function disable System Tick counter. + */ +void CLK_DisableSysTick(void) +{ + /* Set System Tick counter disabled */ + SysTick->CTRL = 0; +} + + +/*@}*/ /* end of group CLK_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group CLK_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +/*** (C) COPYRIGHT 2014~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_clk.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_clk.h new file mode 100644 index 00000000000..7b4da2ba5e7 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_clk.h @@ -0,0 +1,447 @@ +/****************************************************************************** + * @file CLK.h + * @version V3.0 + * $Revision 1 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 Series CLK Header File + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. + ******************************************************************************/ +#ifndef __CLK_H__ +#define __CLK_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup CLK_Driver CLK Driver + @{ +*/ + +/** @addtogroup CLK_EXPORTED_CONSTANTS CLK Exported Constants + @{ +*/ + + +#define FREQ_25MHZ 25000000 +#define FREQ_50MHZ 50000000 +#define FREQ_72MHZ 72000000 +#define FREQ_125MHZ 125000000 +#define FREQ_200MHZ 200000000 +#define FREQ_250MHZ 250000000 +#define FREQ_500MHZ 500000000 + + +/*---------------------------------------------------------------------------------------------------------*/ +/* CLKSEL0 constant definitions. (Write-protection) */ +/*---------------------------------------------------------------------------------------------------------*/ +#define CLK_CLKSEL0_HCLKSEL_HXT (0x00UL< 250MHz is preferred.) */ +#define CLK_PLLCTL_NR(x) (((x)-2)<<9) /*!< x must be constant and 2 <= x <= 33. 1.6MHz < FIN/NR < 16MHz */ + +#define CLK_PLLCTL_NO_1 0x0000UL /*!< For output divider is 1 */ +#define CLK_PLLCTL_NO_2 0x4000UL /*!< For output divider is 2 */ +#define CLK_PLLCTL_NO_4 0xC000UL /*!< For output divider is 4 */ + +#define CLK_PLLCTL_72MHz_HXT (CLK_PLLCTL_PLLSRC_HXT | CLK_PLLCTL_NR(2) | CLK_PLLCTL_NF( 48) | CLK_PLLCTL_NO_4) /*!< Predefined PLLCTL setting for 72MHz PLL output with HXT(12MHz X'tal) */ +#define CLK_PLLCTL_144MHz_HXT (CLK_PLLCTL_PLLSRC_HXT | CLK_PLLCTL_NR(2) | CLK_PLLCTL_NF( 48) | CLK_PLLCTL_NO_2) /*!< Predefined PLLCTL setting for 144MHz PLL output with HXT(12MHz X'tal) */ +#define CLK_PLLCTL_72MHz_HIRC (CLK_PLLCTL_PLLSRC_HIRC | CLK_PLLCTL_NR(4) | CLK_PLLCTL_NF( 52) | CLK_PLLCTL_NO_4) /*!< Predefined PLLCTL setting for 71.8848MHz PLL output with HIRC(22.1184MHz IRC) */ + + +/*---------------------------------------------------------------------------------------------------------*/ +/* MODULE constant definitions. */ +/*---------------------------------------------------------------------------------------------------------*/ + +/* APBCLK(31:30)|CLKSEL(29:28)|CLKSEL_Msk(27:25) |CLKSEL_Pos(24:20)|CLKDIV(19:18)|CLKDIV_Msk(17:10)|CLKDIV_Pos(9:5)|IP_EN_Pos(4:0) */ + +#define MODULE_APBCLK(x) (((x) >>30) & 0x3) /*!< Calculate AHBCLK/APBCLK offset on MODULE index, 0x0:AHBCLK, 0x1:APBCLK0, 0x2:APBCLK1 */ +#define MODULE_CLKSEL(x) (((x) >>28) & 0x3) /*!< Calculate CLKSEL offset on MODULE index, 0x0:CLKSEL0, 0x1:CLKSEL1, 0x2:CLKSEL2, 0x3:CLKSEL3 */ +#define MODULE_CLKSEL_Msk(x) (((x) >>25) & 0x7) /*!< Calculate CLKSEL mask offset on MODULE index */ +#define MODULE_CLKSEL_Pos(x) (((x) >>20) & 0x1f) /*!< Calculate CLKSEL position offset on MODULE index */ +#define MODULE_CLKDIV(x) (((x) >>18) & 0x3) /*!< Calculate APBCLK CLKDIV on MODULE index, 0x0:CLKDIV, 0x1:CLKDIV1 */ +#define MODULE_CLKDIV_Msk(x) (((x) >>10) & 0xff) /*!< Calculate CLKDIV mask offset on MODULE index */ +#define MODULE_CLKDIV_Pos(x) (((x) >>5 ) & 0x1f) /*!< Calculate CLKDIV position offset on MODULE index */ +#define MODULE_IP_EN_Pos(x) (((x) >>0 ) & 0x1f) /*!< Calculate APBCLK offset on MODULE index */ +#define MODULE_NoMsk 0x0 /*!< Not mask on MODULE index */ +#define NA MODULE_NoMsk /*!< Not Available */ + +#define MODULE_APBCLK_ENC(x) (((x) & 0x03) << 30) /*!< MODULE index, 0x0:AHBCLK, 0x1:APBCLK0, 0x2:APBCLK1 */ +#define MODULE_CLKSEL_ENC(x) (((x) & 0x03) << 28) /*!< CLKSEL offset on MODULE index, 0x0:CLKSEL0, 0x1:CLKSEL1, 0x2:CLKSEL2, 0x3:CLKSEL3 */ +#define MODULE_CLKSEL_Msk_ENC(x) (((x) & 0x07) << 25) /*!< CLKSEL mask offset on MODULE index */ +#define MODULE_CLKSEL_Pos_ENC(x) (((x) & 0x1f) << 20) /*!< CLKSEL position offset on MODULE index */ +#define MODULE_CLKDIV_ENC(x) (((x) & 0x03) << 18) /*!< APBCLK CLKDIV on MODULE index, 0x0:CLKDIV, 0x1:CLKDIV1 */ +#define MODULE_CLKDIV_Msk_ENC(x) (((x) & 0xff) << 10) /*!< CLKDIV mask offset on MODULE index */ +#define MODULE_CLKDIV_Pos_ENC(x) (((x) & 0x1f) << 5) /*!< CLKDIV position offset on MODULE index */ +#define MODULE_IP_EN_Pos_ENC(x) (((x) & 0x1f) << 0) /*!< AHBCLK/APBCLK offset on MODULE index */ + + +//AHBCLK +#define PDMA_MODULE (MODULE_APBCLK_ENC( 0)|MODULE_IP_EN_Pos_ENC(CLK_AHBCLK_PDMACKEN_Pos) |\ + MODULE_CLKSEL_ENC(NA)|MODULE_CLKSEL_Msk_ENC(NA)|MODULE_CLKSEL_Pos_ENC(NA)|\ + MODULE_CLKDIV_ENC(NA)|MODULE_CLKDIV_Msk_ENC(NA)|MODULE_CLKDIV_Pos_ENC(NA)) /*!< PDMA Module */ + +#define ISP_MODULE (MODULE_APBCLK_ENC( 0)|MODULE_IP_EN_Pos_ENC(CLK_AHBCLK_ISPCKEN_Pos) |\ + MODULE_CLKSEL_ENC(NA)|MODULE_CLKSEL_Msk_ENC(NA)|MODULE_CLKSEL_Pos_ENC(NA)|\ + MODULE_CLKDIV_ENC(NA)|MODULE_CLKDIV_Msk_ENC(NA)|MODULE_CLKDIV_Pos_ENC(NA)) /*!< ISP Module */ + +#define EBI_MODULE (MODULE_APBCLK_ENC( 0)|MODULE_IP_EN_Pos_ENC(CLK_AHBCLK_EBICKEN_Pos) |\ + MODULE_CLKSEL_ENC(NA)|MODULE_CLKSEL_Msk_ENC(NA)|MODULE_CLKSEL_Pos_ENC(NA)|\ + MODULE_CLKDIV_ENC(NA)|MODULE_CLKDIV_Msk_ENC(NA)|MODULE_CLKDIV_Pos_ENC(NA)) /*!< EBI Module */ + +#define USBH_MODULE (MODULE_APBCLK_ENC( 0)|MODULE_IP_EN_Pos_ENC(CLK_AHBCLK_USBHCKEN_Pos) |\ + MODULE_CLKSEL_ENC(NA)|MODULE_CLKSEL_Msk_ENC(NA)|MODULE_CLKSEL_Pos_ENC(NA)|\ + MODULE_CLKDIV_ENC( 0)|MODULE_CLKDIV_Msk_ENC(0x0F)|MODULE_CLKDIV_Pos_ENC(4)) /*!< USBH Module */ + +#define CRC_MODULE (MODULE_APBCLK_ENC( 0)|MODULE_IP_EN_Pos_ENC(CLK_AHBCLK_CRCCKEN_Pos) |\ + MODULE_CLKSEL_ENC(NA)|MODULE_CLKSEL_Msk_ENC(NA)|MODULE_CLKSEL_Pos_ENC(NA)|\ + MODULE_CLKDIV_ENC(NA)|MODULE_CLKDIV_Msk_ENC(NA)|MODULE_CLKDIV_Pos_ENC(NA)) /*!< CRC Module */ + + +//APBCLK0 +#define WDT_MODULE (MODULE_APBCLK_ENC( 1)|MODULE_IP_EN_Pos_ENC(CLK_APBCLK0_WDTCKEN_Pos) |\ + MODULE_CLKSEL_ENC( 1)|MODULE_CLKSEL_Msk_ENC( 3)|MODULE_CLKSEL_Pos_ENC( 0)|\ + MODULE_CLKDIV_ENC(NA)|MODULE_CLKDIV_Msk_ENC(NA)|MODULE_CLKDIV_Pos_ENC(NA)) /*!< WDT Module */ + +#define WWDT_MODULE (MODULE_APBCLK_ENC( 1)|MODULE_IP_EN_Pos_ENC(CLK_APBCLK0_WDTCKEN_Pos) |\ + MODULE_CLKSEL_ENC( 1)|MODULE_CLKSEL_Msk_ENC( 3)|MODULE_CLKSEL_Pos_ENC(30)|\ + MODULE_CLKDIV_ENC(NA)|MODULE_CLKDIV_Msk_ENC(NA)|MODULE_CLKDIV_Pos_ENC(NA)) /*!< WWDT Module */ + +#define RTC_MODULE (MODULE_APBCLK_ENC( 1)|MODULE_IP_EN_Pos_ENC(CLK_APBCLK0_RTCCKEN_Pos) |\ + MODULE_CLKSEL_ENC( 3)|MODULE_CLKSEL_Msk_ENC( 1)|MODULE_CLKSEL_Pos_ENC( 8)|\ + MODULE_CLKDIV_ENC(NA)|MODULE_CLKDIV_Msk_ENC(NA)|MODULE_CLKDIV_Pos_ENC(NA)) /*!< RTC Module */ + +#define TMR0_MODULE (MODULE_APBCLK_ENC( 1)|MODULE_IP_EN_Pos_ENC(CLK_APBCLK0_TMR0CKEN_Pos) |\ + MODULE_CLKSEL_ENC( 1)|MODULE_CLKSEL_Msk_ENC( 7)|MODULE_CLKSEL_Pos_ENC( 8)|\ + MODULE_CLKDIV_ENC(NA)|MODULE_CLKDIV_Msk_ENC(NA)|MODULE_CLKDIV_Pos_ENC(NA)) /*!< TMR0 Module */ + +#define TMR1_MODULE (MODULE_APBCLK_ENC( 1)|MODULE_IP_EN_Pos_ENC(CLK_APBCLK0_TMR1CKEN_Pos) |\ + MODULE_CLKSEL_ENC( 1)|MODULE_CLKSEL_Msk_ENC( 7)|MODULE_CLKSEL_Pos_ENC(12)|\ + MODULE_CLKDIV_ENC(NA)|MODULE_CLKDIV_Msk_ENC(NA)|MODULE_CLKDIV_Pos_ENC(NA)) /*!< TMR1 Module */ + +#define TMR2_MODULE (MODULE_APBCLK_ENC( 1)|MODULE_IP_EN_Pos_ENC(CLK_APBCLK0_TMR2CKEN_Pos) |\ + MODULE_CLKSEL_ENC( 1)|MODULE_CLKSEL_Msk_ENC( 7)|MODULE_CLKSEL_Pos_ENC(16)|\ + MODULE_CLKDIV_ENC(NA)|MODULE_CLKDIV_Msk_ENC(NA)|MODULE_CLKDIV_Pos_ENC(NA)) /*!< TMR2 Module */ + +#define TMR3_MODULE (MODULE_APBCLK_ENC( 1)|MODULE_IP_EN_Pos_ENC(CLK_APBCLK0_TMR3CKEN_Pos) |\ + MODULE_CLKSEL_ENC( 1)|MODULE_CLKSEL_Msk_ENC( 7)|MODULE_CLKSEL_Pos_ENC(20)|\ + MODULE_CLKDIV_ENC(NA)|MODULE_CLKDIV_Msk_ENC(NA)|MODULE_CLKDIV_Pos_ENC(NA)) /*!< TMR3 Module */ + +#define CLKO_MODULE (MODULE_APBCLK_ENC( 1)|MODULE_IP_EN_Pos_ENC(CLK_APBCLK0_CLKOCKEN_Pos) |\ + MODULE_CLKSEL_ENC( 1)|MODULE_CLKSEL_Msk_ENC( 3)|MODULE_CLKSEL_Pos_ENC(28)|\ + MODULE_CLKDIV_ENC(NA)|MODULE_CLKDIV_Msk_ENC(NA)|MODULE_CLKDIV_Pos_ENC(NA)) /*!< CLKO Module */ + +#define ACMP01_MODULE (MODULE_APBCLK_ENC( 1)|MODULE_IP_EN_Pos_ENC(CLK_APBCLK0_ACMP01CKEN_Pos) |\ + MODULE_CLKSEL_ENC(NA)|MODULE_CLKSEL_Msk_ENC(NA)|MODULE_CLKSEL_Pos_ENC(NA)|\ + MODULE_CLKDIV_ENC(NA)|MODULE_CLKDIV_Msk_ENC(NA)|MODULE_CLKDIV_Pos_ENC(NA)) /*!< ACMP01 Module */ + +#define I2C0_MODULE (MODULE_APBCLK_ENC( 1)|MODULE_IP_EN_Pos_ENC(CLK_APBCLK0_I2C0CKEN_Pos) |\ + MODULE_CLKSEL_ENC(NA)|MODULE_CLKSEL_Msk_ENC(NA)|MODULE_CLKSEL_Pos_ENC(NA)|\ + MODULE_CLKDIV_ENC(NA)|MODULE_CLKDIV_Msk_ENC(NA)|MODULE_CLKDIV_Pos_ENC(NA)) /*!< I2C0 Module */ + +#define I2C1_MODULE (MODULE_APBCLK_ENC( 1)|MODULE_IP_EN_Pos_ENC(CLK_APBCLK0_I2C1CKEN_Pos) |\ + MODULE_CLKSEL_ENC(NA)|MODULE_CLKSEL_Msk_ENC(NA)|MODULE_CLKSEL_Pos_ENC(NA)|\ + MODULE_CLKDIV_ENC(NA)|MODULE_CLKDIV_Msk_ENC(NA)|MODULE_CLKDIV_Pos_ENC(NA)) /*!< I2C1 Module */ + +#define SPI0_MODULE (MODULE_APBCLK_ENC( 1)|MODULE_IP_EN_Pos_ENC(CLK_APBCLK0_SPI0CKEN_Pos) |\ + MODULE_CLKSEL_ENC( 2)|MODULE_CLKSEL_Msk_ENC( 3)|MODULE_CLKSEL_Pos_ENC( 2)|\ + MODULE_CLKDIV_ENC(NA)|MODULE_CLKDIV_Msk_ENC(NA)|MODULE_CLKDIV_Pos_ENC(NA)) /*!< SPI0 Module */ + +#define SPI1_MODULE (MODULE_APBCLK_ENC( 1)|MODULE_IP_EN_Pos_ENC(CLK_APBCLK0_SPI1CKEN_Pos) |\ + MODULE_CLKSEL_ENC( 2)|MODULE_CLKSEL_Msk_ENC( 3)|MODULE_CLKSEL_Pos_ENC( 4)|\ + MODULE_CLKDIV_ENC(NA)|MODULE_CLKDIV_Msk_ENC(NA)|MODULE_CLKDIV_Pos_ENC(NA)) /*!< SPI1 Module */ + +#define SPI2_MODULE (MODULE_APBCLK_ENC( 1)|MODULE_IP_EN_Pos_ENC(CLK_APBCLK0_SPI2CKEN_Pos) |\ + MODULE_CLKSEL_ENC( 2)|MODULE_CLKSEL_Msk_ENC( 3)|MODULE_CLKSEL_Pos_ENC( 6)|\ + MODULE_CLKDIV_ENC(NA)|MODULE_CLKDIV_Msk_ENC(NA)|MODULE_CLKDIV_Pos_ENC(NA)) /*!< SPI2 Module */ + +#define UART0_MODULE (MODULE_APBCLK_ENC( 1)|MODULE_IP_EN_Pos_ENC(CLK_APBCLK0_UART0CKEN_Pos)|\ + MODULE_CLKSEL_ENC( 1)|MODULE_CLKSEL_Msk_ENC( 3)|MODULE_CLKSEL_Pos_ENC(24)|\ + MODULE_CLKDIV_ENC( 0)|MODULE_CLKDIV_Msk_ENC(0x0F)|MODULE_CLKDIV_Pos_ENC( 8)) /*!< UART0 Module */ + +#define UART1_MODULE (MODULE_APBCLK_ENC( 1)|MODULE_IP_EN_Pos_ENC(CLK_APBCLK0_UART1CKEN_Pos)|\ + MODULE_CLKSEL_ENC( 1)|MODULE_CLKSEL_Msk_ENC( 3)|MODULE_CLKSEL_Pos_ENC(24)|\ + MODULE_CLKDIV_ENC( 0)|MODULE_CLKDIV_Msk_ENC(0x0F)|MODULE_CLKDIV_Pos_ENC( 8)) /*!< UART1 Module */ + +#define UART2_MODULE (MODULE_APBCLK_ENC( 1)|MODULE_IP_EN_Pos_ENC(CLK_APBCLK0_UART2CKEN_Pos)|\ + MODULE_CLKSEL_ENC( 1)|MODULE_CLKSEL_Msk_ENC( 3)|MODULE_CLKSEL_Pos_ENC(24)|\ + MODULE_CLKDIV_ENC( 0)|MODULE_CLKDIV_Msk_ENC(0x0F)|MODULE_CLKDIV_Pos_ENC( 8)) /*!< UART2 Module */ + +#define UART3_MODULE (MODULE_APBCLK_ENC( 1)|MODULE_IP_EN_Pos_ENC(CLK_APBCLK0_UART3CKEN_Pos)|\ + MODULE_CLKSEL_ENC( 1)|MODULE_CLKSEL_Msk_ENC( 3)|MODULE_CLKSEL_Pos_ENC(24)|\ + MODULE_CLKDIV_ENC( 0)|MODULE_CLKDIV_Msk_ENC(0x0F)|MODULE_CLKDIV_Pos_ENC( 8)) /*!< UART3 Module */ + +#define CAN0_MODULE (MODULE_APBCLK_ENC( 1)|MODULE_IP_EN_Pos_ENC(CLK_APBCLK0_CAN0CKEN_Pos) |\ + MODULE_CLKSEL_ENC(NA)|MODULE_CLKSEL_Msk_ENC(NA)|MODULE_CLKSEL_Pos_ENC(NA)|\ + MODULE_CLKDIV_ENC(NA)|MODULE_CLKDIV_Msk_ENC(NA)|MODULE_CLKDIV_Pos_ENC(NA)) /*!< CAN0 Module */ + +#define OTG_MODULE (MODULE_APBCLK_ENC( 1)|MODULE_IP_EN_Pos_ENC(CLK_APBCLK0_OTGCKEN_Pos) |\ + MODULE_CLKSEL_ENC(NA)|MODULE_CLKSEL_Msk_ENC(NA)|MODULE_CLKSEL_Pos_ENC(NA)|\ + MODULE_CLKDIV_ENC( 0)|MODULE_CLKDIV_Msk_ENC(0x0F)|MODULE_CLKDIV_Pos_ENC(4)) /*!< OTG Module */ + +#define USBD_MODULE (MODULE_APBCLK_ENC( 1)|MODULE_IP_EN_Pos_ENC(CLK_APBCLK0_USBDCKEN_Pos) |\ + MODULE_CLKSEL_ENC(NA)|MODULE_CLKSEL_Msk_ENC(NA)|MODULE_CLKSEL_Pos_ENC(NA)|\ + MODULE_CLKDIV_ENC( 0)|MODULE_CLKDIV_Msk_ENC(0x0F)|MODULE_CLKDIV_Pos_ENC(4)) /*!< USBD Module */ + +#define EADC_MODULE (MODULE_APBCLK_ENC( 1)|MODULE_IP_EN_Pos_ENC(CLK_APBCLK0_EADCCKEN_Pos) |\ + MODULE_CLKSEL_ENC(NA)|MODULE_CLKSEL_Msk_ENC(NA)|MODULE_CLKSEL_Pos_ENC(NA)|\ + MODULE_CLKDIV_ENC( 0)|MODULE_CLKDIV_Msk_ENC(0xFF)|MODULE_CLKDIV_Pos_ENC(16)) /*!< EADC Module */ + + +//APBCLK1 +#define SC0_MODULE (MODULE_APBCLK_ENC( 2UL)|MODULE_IP_EN_Pos_ENC(CLK_APBCLK1_SC0CKEN_Pos) |\ + MODULE_CLKSEL_ENC( 3)|MODULE_CLKSEL_Msk_ENC( 3)|MODULE_CLKSEL_Pos_ENC( 0)|\ + MODULE_CLKDIV_ENC( 1)|MODULE_CLKDIV_Msk_ENC(0xFF)|MODULE_CLKDIV_Pos_ENC( 0)) /*!< SC0 Module */ + +#define DAC_MODULE (MODULE_APBCLK_ENC( 2UL)|MODULE_IP_EN_Pos_ENC(CLK_APBCLK1_DACCKEN_Pos) |\ + MODULE_CLKSEL_ENC(NA)|MODULE_CLKSEL_Msk_ENC(NA)|MODULE_CLKSEL_Pos_ENC(NA)|\ + MODULE_CLKDIV_ENC(NA)|MODULE_CLKDIV_Msk_ENC(NA)|MODULE_CLKDIV_Pos_ENC(NA)) /*!< DAC Module */ + +#define PWM0_MODULE (MODULE_APBCLK_ENC( 2UL)|MODULE_IP_EN_Pos_ENC(CLK_APBCLK1_PWM0CKEN_Pos)|\ + MODULE_CLKSEL_ENC( 2)|MODULE_CLKSEL_Msk_ENC( 1)|MODULE_CLKSEL_Pos_ENC( 0)|\ + MODULE_CLKDIV_ENC(NA)|MODULE_CLKDIV_Msk_ENC(NA)|MODULE_CLKDIV_Pos_ENC(NA)) /*!< PWM0 Module */ + +#define PWM1_MODULE (MODULE_APBCLK_ENC( 2UL)|MODULE_IP_EN_Pos_ENC(CLK_APBCLK1_PWM1CKEN_Pos)|\ + MODULE_CLKSEL_ENC( 2)|MODULE_CLKSEL_Msk_ENC( 1)|MODULE_CLKSEL_Pos_ENC( 1)|\ + MODULE_CLKDIV_ENC(NA)|MODULE_CLKDIV_Msk_ENC(NA)|MODULE_CLKDIV_Pos_ENC(NA)) /*!< PWM1 Module */ + +#define TK_MODULE (MODULE_APBCLK_ENC( 2UL)|MODULE_IP_EN_Pos_ENC(CLK_APBCLK1_TKCKEN_Pos)|\ + MODULE_CLKSEL_ENC(NA)|MODULE_CLKSEL_Msk_ENC(NA)|MODULE_CLKSEL_Pos_ENC(NA)|\ + MODULE_CLKDIV_ENC(NA)|MODULE_CLKDIV_Msk_ENC(NA)|MODULE_CLKDIV_Pos_ENC(NA)) /*!< TK Module */ + + +/*@}*/ /* end of group CLK_EXPORTED_CONSTANTS */ + + +/** @addtogroup CLK_EXPORTED_FUNCTIONS CLK Exported Functions + @{ +*/ + + +/** + * @brief Get PLL clock frequency + * @param None + * @return PLL frequency + * @details This function get PLL frequency. The frequency unit is Hz. + */ +__STATIC_INLINE uint32_t CLK_GetPLLClockFreq(void) +{ + uint32_t u32PllFreq = 0, u32PllReg; + uint32_t u32FIN, u32NF, u32NR, u32NO; + uint8_t au8NoTbl[4] = {1, 2, 2, 4}; + + u32PllReg = CLK->PLLCTL; + + if(u32PllReg & (CLK_PLLCTL_PD_Msk | CLK_PLLCTL_OE_Msk)) + return 0; /* PLL is in power down mode or fix low */ + + if(u32PllReg & CLK_PLLCTL_PLLSRC_HIRC) + u32FIN = __HIRC; /* PLL source clock from HIRC */ + else + u32FIN = __HXT; /* PLL source clock from HXT */ + + if(u32PllReg & CLK_PLLCTL_BP_Msk) + return u32FIN; /* PLL is in bypass mode */ + + /* PLL is output enabled in normal work mode */ + u32NO = au8NoTbl[((u32PllReg & CLK_PLLCTL_OUTDIV_Msk) >> CLK_PLLCTL_OUTDIV_Pos)]; + u32NF = ((u32PllReg & CLK_PLLCTL_FBDIV_Msk) >> CLK_PLLCTL_FBDIV_Pos) + 2; + u32NR = ((u32PllReg & CLK_PLLCTL_INDIV_Msk) >> CLK_PLLCTL_INDIV_Pos) + 2; + + /* u32FIN is shifted 2 bits to avoid overflow */ + u32PllFreq = (((u32FIN >> 2) * u32NF) / (u32NR * u32NO) << 2); + + return u32PllFreq; +} + +/** + * @brief This function execute delay function. + * @param us Delay time. The Max value is 2^24 / CPU Clock(MHz). Ex: + * 72MHz => 233016us, 50MHz => 335544us, + 48MHz => 349525us, 28MHz => 699050us ... + * @return None + * @details Use the SysTick to generate the delay time and the unit is in us. + * The SysTick clock source is from HCLK, i.e the same as system core clock. + */ +__STATIC_INLINE void CLK_SysTickDelay(uint32_t us) +{ + SysTick->LOAD = us * CyclesPerUs; + SysTick->VAL = (0x00); + SysTick->CTRL = SysTick_CTRL_CLKSOURCE_Msk | SysTick_CTRL_ENABLE_Msk; + + /* Waiting for down-count to zero */ + while((SysTick->CTRL & SysTick_CTRL_COUNTFLAG_Msk) == 0); + + /* Disable SysTick counter */ + SysTick->CTRL = 0; +} + + +void CLK_DisableCKO(void); +void CLK_EnableCKO(uint32_t u32ClkSrc, uint32_t u32ClkDiv, uint32_t u32ClkDivBy1En); +void CLK_PowerDown(void); +void CLK_Idle(void); +uint32_t CLK_GetHXTFreq(void); +uint32_t CLK_GetLXTFreq(void); +uint32_t CLK_GetHCLKFreq(void); +uint32_t CLK_GetPCLK0Freq(void); +uint32_t CLK_GetPCLK1Freq(void); +uint32_t CLK_GetCPUFreq(void); +uint32_t CLK_SetCoreClock(uint32_t u32Hclk); +void CLK_SetHCLK(uint32_t u32ClkSrc, uint32_t u32ClkDiv); +void CLK_SetModuleClock(uint32_t u32ModuleIdx, uint32_t u32ClkSrc, uint32_t u32ClkDiv); +void CLK_SetSysTickClockSrc(uint32_t u32ClkSrc); +void CLK_EnableXtalRC(uint32_t u32ClkMask); +void CLK_DisableXtalRC(uint32_t u32ClkMask); +void CLK_EnableModuleClock(uint32_t u32ModuleIdx); +void CLK_DisableModuleClock(uint32_t u32ModuleIdx); +uint32_t CLK_EnablePLL(uint32_t u32PllClkSrc, uint32_t u32PllFreq); +void CLK_DisablePLL(void); +uint32_t CLK_WaitClockReady(uint32_t u32ClkMask); +void CLK_EnableSysTick(uint32_t u32ClkSrc, uint32_t u32Count); +void CLK_DisableSysTick(void); + + + +/*@}*/ /* end of group CLK_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group CLK_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +#ifdef __cplusplus +} +#endif + +#endif //__CLK_H__ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_crc.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_crc.c new file mode 100644 index 00000000000..346a6a5991f --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_crc.c @@ -0,0 +1,93 @@ +/**************************************************************************//** + * @file crc.c + * @version V3.00 + * $Revision: 7 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series CRC driver source file + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ +#include "M451Series.h" + + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup CRC_Driver CRC Driver + @{ +*/ + +/** @addtogroup CRC_EXPORTED_FUNCTIONS CRC Exported Functions + @{ +*/ + +/** + * @brief CRC Open + * + * @param[in] u32Mode CRC operation polynomial mode. Valid values are: + * - \ref CRC_CCITT + * - \ref CRC_8 + * - \ref CRC_16 + * - \ref CRC_32 + * @param[in] u32Attribute CRC operation data attribute. Valid values are combined with: + * - \ref CRC_CHECKSUM_COM + * - \ref CRC_CHECKSUM_RVS + * - \ref CRC_WDATA_COM + * - \ref CRC_WDATA_RVS + * @param[in] u32Seed Seed value. + * @param[in] u32DataLen CPU Write Data Length. Valid values are: + * - \ref CRC_CPU_WDATA_8 + * - \ref CRC_CPU_WDATA_16 + * - \ref CRC_CPU_WDATA_32 + * + * @return None + * + * @details This function will enable the CRC controller by specify CRC operation mode, attribute, initial seed and write data length. \n + * After that, user can start to perform CRC calculate by calling CRC_WRITE_DATA macro or CRC_DAT register directly. + */ +void CRC_Open(uint32_t u32Mode, uint32_t u32Attribute, uint32_t u32Seed, uint32_t u32DataLen) +{ + CRC->SEED = u32Seed; + CRC->CTL = u32Mode | u32Attribute | u32DataLen | CRC_CTL_CRCEN_Msk; + + /* Setting CRCRST bit will reload the initial seed value(CRC_SEED register) to CRC controller */ + CRC->CTL |= CRC_CTL_CRCRST_Msk; +} + +/** + * @brief Get CRC Checksum + * + * @param[in] None + * + * @return Checksum Result + * + * @details This macro gets the CRC checksum result by current CRC polynomial mode. + */ +uint32_t CRC_GetChecksum(void) +{ + switch(CRC->CTL & CRC_CTL_CRCMODE_Msk) + { + case CRC_CCITT: + case CRC_16: + return (CRC->CHECKSUM & 0xFFFF); + + case CRC_32: + return (CRC->CHECKSUM); + + case CRC_8: + return (CRC->CHECKSUM & 0xFF); + + default: + return 0; + } +} + +/*@}*/ /* end of group CRC_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group CRC_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +/*** (C) COPYRIGHT 2013~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_crc.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_crc.h new file mode 100644 index 00000000000..4c8c3332625 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_crc.h @@ -0,0 +1,112 @@ +/**************************************************************************//** + * @file crc.h + * @version V3.00 + * $Revision: 6 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series CRC driver header file + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. + *****************************************************************************/ +#ifndef __CRC_H__ +#define __CRC_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup CRC_Driver CRC Driver + @{ +*/ + +/** @addtogroup CRC_EXPORTED_CONSTANTS CRC Exported Constants + @{ +*/ +/*---------------------------------------------------------------------------------------------------------*/ +/* CRC Polynomial Mode Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define CRC_CCITT 0x00000000UL /*!SEED = (u32Seed); CRC->CTL |= CRC_CTL_CRCRST_Msk; } + +/** + * @brief Get CRC Seed Value + * + * @param None + * + * @return CRC seed value + * + * @details This macro gets the current CRC seed value. + */ +#define CRC_GET_SEED() (CRC->SEED) + +/** + * @brief CRC Write Data + * + * @param[in] u32Data Write data + * + * @return None + * + * @details User can write data directly to CRC Write Data Register(CRC_DAT) by this macro to perform CRC operation. + */ +#define CRC_WRITE_DATA(u32Data) (CRC->DAT = (u32Data)) + +void CRC_Open(uint32_t u32Mode, uint32_t u32Attribute, uint32_t u32Seed, uint32_t u32DataLen); +uint32_t CRC_GetChecksum(void); + +/*@}*/ /* end of group CRC_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group CRC_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +#ifdef __cplusplus +} +#endif + +#endif //__CRC_H__ + +/*** (C) COPYRIGHT 2013~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_dac.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_dac.c new file mode 100644 index 00000000000..4baffbd8012 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_dac.c @@ -0,0 +1,94 @@ +/**************************************************************************//** + * @file dac.c + * @version V2.00 + * $Revision: 8 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series DAC driver source file + * + * @note + * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ +#include "M451Series.h" + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup DAC_Driver DAC Driver + @{ +*/ + +/** @addtogroup DAC_EXPORTED_FUNCTIONS DAC Exported Functions + @{ +*/ + +/** + * @brief This function make DAC module be ready to convert. + * @param[in] dac Base address of DAC module. + * @param[in] u32Ch Not used in M451 Series DAC. + * @param[in] u32TrgSrc Decides the trigger source. Valid values are: + * - \ref DAC_WRITE_DAT_TRIGGER :Write DAC_DAT trigger + * - \ref DAC_SOFTWARE_TRIGGER :Software trigger + * - \ref DAC_LOW_LEVEL_TRIGGER :STDAC pin low level trigger + * - \ref DAC_HIGH_LEVEL_TRIGGER :STDAC pin high level trigger + * - \ref DAC_FALLING_EDGE_TRIGGER :STDAC pin falling edge trigger + * - \ref DAC_RISING_EDGE_TRIGGER :STDAC pin rising edge trigger + * - \ref DAC_TIMER0_TRIGGER :Timer 0 trigger + * - \ref DAC_TIMER1_TRIGGER :Timer 1 trigger + * - \ref DAC_TIMER2_TRIGGER :Timer 2 trigger + * - \ref DAC_TIMER3_TRIGGER :Timer 3 trigger + * - \ref DAC_PWM0_TRIGGER :PWM0 trigger + * - \ref DAC_PWM1_TRIGGER :PWM1 trigger + * @return None + * @details The DAC conversion can be started by writing DAC_DAT, software trigger or hardware trigger. + * When TRGEN (DAC_CTL[4]) is 0, the data conversion is started by writing DAC_DAT register. + * When TRGEN (DAC_CTL[4]) is 1, the data conversion is started by SWTRG (DAC_SWTRG[0]) is set to 1, + * external STDAC pin, timer event, or PWM timer event. + */ +void DAC_Open(DAC_T *dac, + uint32_t u32Ch, + uint32_t u32TrgSrc) +{ + dac->CTL &= ~(DAC_CTL_ETRGSEL_Msk | DAC_CTL_TRGSEL_Msk | DAC_CTL_TRGEN_Msk); + + dac->CTL |= (u32TrgSrc | DAC_CTL_DACEN_Msk); +} + +/** + * @brief Disable DAC analog power. + * @param[in] dac Base address of DAC module. + * @param[in] u32Ch Not used in M451 Series DAC. + * @return None + * @details Disable DAC analog power for saving power consumption. + */ +void DAC_Close(DAC_T *dac, uint32_t u32Ch) +{ + dac->CTL &= (~DAC_CTL_DACEN_Msk); +} + +/** + * @brief Set delay time for DAC to become stable. + * @param[in] dac Base address of DAC module. + * @param[in] u32Delay Decides the DAC conversion settling time, the range is from 0~(1023/PCLK*1000000) micro seconds. + * @return Real DAC conversion settling time (micro second). + * @details For example, DAC controller clock speed is 72MHz and DAC conversion setting time is 1 us, SETTLET (DAC_TCTL[9:0]) value must be greater than 0x48. + * @note User needs to write appropriate value to meet DAC conversion settling time base on PCLK (APB clock) speed. + */ +float DAC_SetDelayTime(DAC_T *dac, uint32_t u32Delay) +{ + SystemCoreClockUpdate(); + + dac->TCTL = ((SystemCoreClock * u32Delay / 1000000) & 0x3FF); + + return ((dac->TCTL) * 1000000 / SystemCoreClock); +} + + + +/*@}*/ /* end of group DAC_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group DAC_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +/*** (C) COPYRIGHT 2014~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_dac.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_dac.h new file mode 100644 index 00000000000..c0914a3a744 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_dac.h @@ -0,0 +1,245 @@ +/****************************************************************************** + * @file dac.h + * @version V0.10 + * $Revision: 12 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series DAC driver header file + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ +#ifndef __DAC_H__ +#define __DAC_H__ + +/*---------------------------------------------------------------------------------------------------------*/ +/* Include related headers */ +/*---------------------------------------------------------------------------------------------------------*/ +#include "M451Series.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup DAC_Driver DAC Driver + @{ +*/ + + +/** @addtogroup DAC_EXPORTED_CONSTANTS DAC Exported Constants + @{ +*/ + +/*---------------------------------------------------------------------------------------------------------*/ +/* DAC_CTL Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define DAC_CTL_LALIGN_RIGHT_ALIGN (0UL<SWTRG = DAC_SWTRG_SWTRG_Msk) + +/** + * @brief Enable DAC data left-aligned. + * @param[in] dac Base address of DAC module. + * @return None + * @details User has to load data into DAC_DAT[15:4] bits. DAC_DAT[31:16] and DAC_DAT[3:0] are ignored in DAC conversion. + */ +#define DAC_ENABLE_LEFT_ALIGN(dac) ((dac)->CTL |= DAC_CTL_LALIGN_Msk) + +/** + * @brief Enable DAC data right-aligned. + * @param[in] dac Base address of DAC module. + * @return None + * @details User has to load data into DAC_DAT[11:0] bits, DAC_DAT[31:12] are ignored in DAC conversion. + */ +#define DAC_ENABLE_RIGHT_ALIGN(dac) ((dac)->CTL &= ~DAC_CTL_LALIGN_Msk) + +/** + * @brief Enable output voltage buffer. + * @param[in] dac Base address of DAC module. + * @return None + * @details The DAC integrates a voltage output buffer that can be used to reduce output impedance and + * drive external loads directly without having to add an external operational amplifier. + */ +#define DAC_ENABLE_BYPASS_BUFFER(dac) ((dac)->CTL |= DAC_CTL_BYPASS_Msk) + +/** + * @brief Disable output voltage buffer. + * @param[in] dac Base address of DAC module. + * @return None + * @details This macro is used to disable output voltage buffer. + */ +#define DAC_DISABLE_BYPASS_BUFFER(dac) ((dac)->CTL &= ~DAC_CTL_BYPASS_Msk) + +/** + * @brief Enable the interrupt. + * @param[in] dac Base address of DAC module. + * @param[in] u32Ch Not used in M451 Series DAC. + * @return None + * @details This macro is used to enable DAC interrupt. + */ +#define DAC_ENABLE_INT(dac, u32Ch) ((dac)->CTL |= DAC_CTL_DACIEN_Msk) + +/** + * @brief Disable the interrupt. + * @param[in] dac Base address of DAC module. + * @param[in] u32Ch Not used in M451 Series DAC. + * @return None + * @details This macro is used to disable DAC interrupt. + */ +#define DAC_DISABLE_INT(dac, u32Ch) ((dac)->CTL &= ~DAC_CTL_DACIEN_Msk) + +/** + * @brief Enable DMA under-run interrupt. + * @param[in] dac Base address of DAC module. + * @return None + * @details This macro is used to enable DMA under-run interrupt. + */ +#define DAC_ENABLE_DMAUDR_INT(dac) ((dac)->CTL |= DAC_CTL_DMAURIEN_Msk) + +/** + * @brief Disable DMA under-run interrupt. + * @param[in] dac Base address of DAC module. + * @return None + * @details This macro is used to disable DMA under-run interrupt. + */ +#define DAC_DISABLE_DMAUDR_INT(dac) ((dac)->CTL &= ~DAC_CTL_DMAURIEN_Msk) + +/** + * @brief Enable PDMA mode. + * @param[in] dac Base address of DAC module. + * @return None + * @details DAC DMA request is generated when a hardware trigger event occurs while DMAEN (DAC_CTL[2]) is set. + */ +#define DAC_ENABLE_PDMA(dac) ((dac)->CTL |= DAC_CTL_DMAEN_Msk) + +/** + * @brief Disable PDMA mode. + * @param[in] dac Base address of DAC module. + * @return None + * @details This macro is used to disable DMA mode. + */ +#define DAC_DISABLE_PDMA(dac) ((dac)->CTL &= ~DAC_CTL_DMAEN_Msk) + +/** + * @brief Write data for conversion. + * @param[in] dac Base address of DAC module. + * @param[in] u32Ch Not used in M451 Series DAC. + * @param[in] u32Data Decides the data for conversion, valid range are between 0~0xFFF. + * @return None + * @details 12 bit left alignment: user has to load data into DAC_DAT[15:4] bits. + * 12 bit right alignment: user has to load data into DAC_DAT[11:0] bits. + */ +#define DAC_WRITE_DATA(dac, u32Ch, u32Data) ((dac)->DAT = (u32Data)) + +/** + * @brief Read DAC 12-bit holding data. + * @param[in] dac Base address of DAC module. + * @param[in] u32Ch Not used in M451 Series DAC. + * @return Return DAC 12-bit holding data. + * @details This macro is used to read DAC_DAT register. + */ +#define DAC_READ_DATA(dac, u32Ch) ((dac)->DAT) + +/** + * @brief Get the busy state of DAC. + * @param[in] dac Base address of DAC module. + * @param[in] u32Ch Not used in M451 Series DAC. + * @retval 0 Idle state. + * @retval 1 Busy state. + * @details This macro is used to read BUSY bit (DAC_STATUS[8]) to get busy state. + */ +#define DAC_IS_BUSY(dac, u32Ch) (((dac)->STATUS & DAC_STATUS_BUSY_Msk) >> DAC_STATUS_BUSY_Pos) + +/** + * @brief Get the interrupt flag. + * @param[in] dac Base address of DAC module. + * @param[in] u32Ch Not used in M451 Series DAC. + * @retval 0 DAC is in conversion state. + * @retval 1 DAC conversion finish. + * @details This macro is used to read FINISH bit (DAC_STATUS[0]) to get DAC conversion complete finish flag. + */ +#define DAC_GET_INT_FLAG(dac, u32Ch) ((dac)->STATUS & DAC_STATUS_FINISH_Msk) + +/** + * @brief Get the DMA under-run flag. + * @param[in] dac Base address of DAC module. + * @retval 0 No DMA under-run error condition occurred. + * @retval 1 DMA under-run error condition occurred. + * @details This macro is used to read DMAUDR bit (DAC_STATUS[1]) to get DMA under-run state. + */ +#define DAC_GET_DMAUDR_FLAG(dac) (((dac)->STATUS & DAC_STATUS_DMAUDR_Msk) >> DAC_STATUS_DMAUDR_Pos) + +/** + * @brief This macro clear the interrupt status bit. + * @param[in] dac Base address of DAC module. + * @param[in] u32Ch Not used in M451 Series DAC. + * @return None + * @details User writes FINISH bit (DAC_STATUS[0]) to clear DAC conversion complete finish flag. + */ +#define DAC_CLR_INT_FLAG(dac, u32Ch) ((dac)->STATUS = DAC_STATUS_FINISH_Msk) + +/** + * @brief This macro clear the DMA under-run flag. + * @param[in] dac Base address of DAC module. + * @return None + * @details User writes DMAUDR bit (DAC_STATUS[1]) to clear DMA under-run flag. + */ +#define DAC_CLR_DMAUDR_FLAG(dac) ((dac)->STATUS = DAC_STATUS_DMAUDR_Msk) + +void DAC_Open(DAC_T *dac, uint32_t u32Ch, uint32_t u32TrgSrc); +void DAC_Close(DAC_T *dac, uint32_t u32Ch); +float DAC_SetDelayTime(DAC_T *dac, uint32_t u16Delay); + +/*@}*/ /* end of group DAC_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group DAC_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +#ifdef __cplusplus +} +#endif + +#endif //__DAC_H__ + +/*** (C) COPYRIGHT 2013~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_eadc.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_eadc.c new file mode 100644 index 00000000000..741e51dcc0f --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_eadc.c @@ -0,0 +1,159 @@ +/**************************************************************************//** + * @file eadc.c + * @version V2.00 + * $Revision: 8 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series EADC driver source file + * + * @note + * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ +#include "M451Series.h" + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup EADC_Driver EADC Driver + @{ +*/ + +/** @addtogroup EADC_EXPORTED_FUNCTIONS EADC Exported Functions + @{ +*/ + +/** + * @brief This function make EADC_module be ready to convert. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32InputMode Decides the input mode. + * - \ref EADC_CTL_DIFFEN_SINGLE_END :Single end input mode. + * - \ref EADC_CTL_DIFFEN_DIFFERENTIAL :Differential input type. + * @return None + * @details This function is used to set analog input mode and enable A/D Converter. + * Before starting A/D conversion function, ADCEN bit (EADC_CTL[0]) should be set to 1. + * @note + */ +void EADC_Open(EADC_T *eadc, uint32_t u32InputMode) +{ + eadc->CTL &= (~EADC_CTL_DIFFEN_Msk); + + eadc->CTL |= (u32InputMode | EADC_CTL_ADCEN_Msk); +} + +/** + * @brief Disable EADC_module. + * @param[in] eadc The pointer of the specified EADC module.. + * @return None + * @details Clear ADCEN bit (EADC_CTL[0]) to disable A/D converter analog circuit power consumption. + */ +void EADC_Close(EADC_T *eadc) +{ + eadc->CTL &= ~EADC_CTL_ADCEN_Msk; +} + +/** + * @brief Configure the sample control logic module. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32ModuleNum Decides the sample module number, valid value are from 0 to 15. + * @param[in] u32TriggerSrc Decides the trigger source. Valid values are: + * - \ref EADC_SOFTWARE_TRIGGER : Disable trigger + * - \ref EADC_FALLING_EDGE_TRIGGER : STADC pin falling edge trigger + * - \ref EADC_RISING_EDGE_TRIGGER : STADC pin rising edge trigger + * - \ref EADC_FALLING_RISING_EDGE_TRIGGER : STADC pin both falling and rising edge trigger + * - \ref EADC_ADINT0_TRIGGER : ADC ADINT0 interrupt EOC pulse trigger + * - \ref EADC_ADINT1_TRIGGER : ADC ADINT1 interrupt EOC pulse trigger + * - \ref EADC_TIMER0_TRIGGER : Timer0 overflow pulse trigger + * - \ref EADC_TIMER1_TRIGGER : Timer1 overflow pulse trigger + * - \ref EADC_TIMER2_TRIGGER : Timer2 overflow pulse trigger + * - \ref EADC_TIMER3_TRIGGER : Timer3 overflow pulse trigger + * - \ref EADC_PWM0TG0_TRIGGER : PWM0TG0 trigger + * - \ref EADC_PWM0TG1_TRIGGER : PWM0TG1 trigger + * - \ref EADC_PWM0TG2_TRIGGER : PWM0TG2 trigger + * - \ref EADC_PWM0TG3_TRIGGER : PWM0TG3 trigger + * - \ref EADC_PWM0TG4_TRIGGER : PWM0TG4 trigger + * - \ref EADC_PWM0TG5_TRIGGER : PWM0TG5 trigger + * - \ref EADC_PWM1TG0_TRIGGER : PWM1TG0 trigger + * - \ref EADC_PWM1TG1_TRIGGER : PWM1TG1 trigger + * - \ref EADC_PWM1TG2_TRIGGER : PWM1TG2 trigger + * - \ref EADC_PWM1TG3_TRIGGER : PWM1TG3 trigger + * - \ref EADC_PWM1TG4_TRIGGER : PWM1TG4 trigger + * - \ref EADC_PWM1TG5_TRIGGER : PWM1TG5 trigger + * @param[in] u32Channel Specifies the sample module channel, valid value are from 0 to 15. + * @return None + * @details Each of ADC control logic modules 0~15 which is configurable for ADC converter channel EADC_CH0~15 and trigger source. + * sample module 16~18 is fixed for ADC channel 16, 17, 18 input sources as band-gap voltage, temperature sensor, and battery power (VBAT). + */ +void EADC_ConfigSampleModule(EADC_T *eadc, \ + uint32_t u32ModuleNum, \ + uint32_t u32TriggerSrc, \ + uint32_t u32Channel) +{ + eadc->SCTL[u32ModuleNum] &= ~(EADC_SCTL_EXTFEN_Msk | EADC_SCTL_EXTREN_Msk | EADC_SCTL_TRGSEL_Msk | EADC_SCTL_CHSEL_Msk); + eadc->SCTL[u32ModuleNum] |= (u32TriggerSrc | u32Channel); +} + + +/** + * @brief Set trigger delay time. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32ModuleNum Decides the sample module number, valid value are from 0 to 15. + * @param[in] u32TriggerDelayTime Decides the trigger delay time, valid range are between 0~0xFF. + * @param[in] u32DelayClockDivider Decides the trigger delay clock divider. Valid values are: + * - \ref EADC_SCTL_TRGDLYDIV_DIVIDER_1 : Trigger delay clock frequency is ADC_CLK/1 + * - \ref EADC_SCTL_TRGDLYDIV_DIVIDER_2 : Trigger delay clock frequency is ADC_CLK/2 + * - \ref EADC_SCTL_TRGDLYDIV_DIVIDER_4 : Trigger delay clock frequency is ADC_CLK/4 + * - \ref EADC_SCTL_TRGDLYDIV_DIVIDER_16 : Trigger delay clock frequency is ADC_CLK/16 + * @return None + * @details User can configure the trigger delay time by setting TRGDLYCNT (EADC_SCTLn[15:8], n=0~15) and TRGDLYDIV (EADC_SCTLn[7:6], n=0~15). + * Trigger delay time = (u32TriggerDelayTime) x Trigger delay clock period. + */ +void EADC_SetTriggerDelayTime(EADC_T *eadc, \ + uint32_t u32ModuleNum, \ + uint32_t u32TriggerDelayTime, \ + uint32_t u32DelayClockDivider) +{ + eadc->SCTL[u32ModuleNum] &= ~(EADC_SCTL_TRGDLYDIV_Msk | EADC_SCTL_TRGDLYCNT_Msk); + eadc->SCTL[u32ModuleNum] |= ((u32TriggerDelayTime << EADC_SCTL_TRGDLYCNT_Pos) | u32DelayClockDivider); +} + +/** + * @brief Set ADC internal sample time. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32SampleTime Decides the internal sampling time, the range is from 1~8 ADC clock. Valid value are from 1 to 8. + * @return None + * @details When A/D operation at high ADC clock rate, the sampling time of analog input voltage may not enough + * if the analog channel has heavy loading to cause fully charge time is longer. + * User can set SMPTSEL (EADC_CTL[18:16]) to select the sampling cycle in ADC. + */ +void EADC_SetInternalSampleTime(EADC_T *eadc, uint32_t u32SampleTime) +{ + eadc->CTL &= ~EADC_CTL_SMPTSEL_Msk; + + eadc->CTL |= (u32SampleTime - 1) << EADC_CTL_SMPTSEL_Pos; + +} + +/** + * @brief Set ADC extend sample time. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32ModuleNum Decides the sample module number, valid value are from 0 to 18. + * @param[in] u32ExtendSampleTime Decides the extend sampling time, the range is from 0~255 ADC clock. Valid value are from 0 to 0xFF. + * @return None + * @details When A/D converting at high conversion rate, the sampling time of analog input voltage may not enough if input channel loading is heavy, + * user can extend A/D sampling time after trigger source is coming to get enough sampling time. + */ +void EADC_SetExtendSampleTime(EADC_T *eadc, uint32_t u32ModuleNum, uint32_t u32ExtendSampleTime) +{ + eadc->SCTL[u32ModuleNum] &= ~EADC_SCTL_EXTSMPT_Msk; + + eadc->SCTL[u32ModuleNum] |= (u32ExtendSampleTime << EADC_SCTL_EXTSMPT_Pos); + +} + +/*@}*/ /* end of group EADC_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group EADC_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +/*** (C) COPYRIGHT 2014~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_eadc.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_eadc.h new file mode 100644 index 00000000000..9751d5781d4 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_eadc.h @@ -0,0 +1,569 @@ +/****************************************************************************** + * @file eadc.h + * @version V0.10 + * $Revision: 18 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series EADC driver header file + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ +#ifndef __EADC_H__ +#define __EADC_H__ + +/*---------------------------------------------------------------------------------------------------------*/ +/* Include related headers */ +/*---------------------------------------------------------------------------------------------------------*/ +#include "M451Series.h" + + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup EADC_Driver EADC Driver + @{ +*/ + +/** @addtogroup EADC_EXPORTED_CONSTANTS EADC Exported Constants + @{ +*/ + +/*---------------------------------------------------------------------------------------------------------*/ +/* EADC_CTL Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define EADC_CTL_DIFFEN_SINGLE_END (0UL<CTL |= EADC_CTL_ADRST_Msk) + +/** + * @brief Enable PDMA transfer. + * @param[in] eadc The pointer of the specified EADC module. + * @return None + * @details When A/D conversion is completed, the converted data is loaded into EADC_DATn (n: 0 ~ 18) register, + * user can enable this bit to generate a PDMA data transfer request. + * @note When set PDMAEN bit (EADC_CTL[11]), user must set ADINTENn (EADC_CTL[5:2], n=0~3) = 0 to disable interrupt. + */ +#define EADC_ENABLE_PDMA(eadc) ((eadc)->CTL |= EADC_CTL_PDMAEN_Msk) + +/** + * @brief Disable PDMA transfer. + * @param[in] eadc The pointer of the specified EADC module. + * @return None + * @details This macro is used to disable PDMA transfer. + */ +#define EADC_DISABLE_PDMA(eadc) ((eadc)->CTL &= (~EADC_CTL_PDMAEN_Msk)) + +/** + * @brief Enable double buffer mode. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32ModuleNum Decides the sample module number, valid value are from 0 to 3. + * @return None + * @details The ADC controller supports a double buffer mode in sample module 0~3. + * If user enable DBMEN (EADC_SCTLn[23], n=0~3), the double buffer mode will enable. + */ +#define EADC_ENABLE_DOUBLE_BUFFER(eadc, u32ModuleNum) ((eadc)->SCTL[(u32ModuleNum)] |= EADC_SCTL_DBMEN_Msk) + +/** + * @brief Disable double buffer mode. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32ModuleNum Decides the sample module number, valid value are from 0 to 3. + * @return None + * @details Sample has one sample result register. + */ +#define EADC_DISABLE_DOUBLE_BUFFER(eadc, u32ModuleNum) ((eadc)->SCTL[(u32ModuleNum)] &= ~EADC_SCTL_DBMEN_Msk) + +/** + * @brief Set ADIFn at A/D end of conversion. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32ModuleNum Decides the sample module number, valid value are from 0 to 15. + * @return None + * @details The A/D converter generates ADIFn (EADC_STATUS2[3:0], n=0~3) at the start of conversion. + */ +#define EADC_ENABLE_INT_POSITION(eadc, u32ModuleNum) ((eadc)->SCTL[(u32ModuleNum)] |= EADC_SCTL_INTPOS_Msk) + +/** + * @brief Set ADIFn at A/D start of conversion. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32ModuleNum Decides the sample module number, valid value are from 0 to 15. + * @return None + * @details The A/D converter generates ADIFn (EADC_STATUS2[3:0], n=0~3) at the end of conversion. + */ +#define EADC_DISABLE_INT_POSITION(eadc, u32ModuleNum) ((eadc)->SCTL[(u32ModuleNum)] &= ~EADC_SCTL_INTPOS_Msk) + +/** + * @brief Enable the interrupt. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32Mask Decides the combination of interrupt status bits. Each bit corresponds to a interrupt status. + * This parameter decides which interrupts will be enabled. Bit 0 is ADCIEN0, bit 1 is ADCIEN1..., bit 3 is ADCIEN3. + * @return None + * @details The A/D converter generates a conversion end ADIFn (EADC_STATUS2[n]) upon the end of specific sample module A/D conversion. + * If ADCIENn bit (EADC_CTL[n+2]) is set then conversion end interrupt request ADINTn is generated (n=0~3). + */ +#define EADC_ENABLE_INT(eadc, u32Mask) ((eadc)->CTL |= ((u32Mask) << EADC_CTL_ADCIEN0_Pos)) + +/** + * @brief Disable the interrupt. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32Mask Decides the combination of interrupt status bits. Each bit corresponds to a interrupt status. + * This parameter decides which interrupts will be disabled. Bit 0 is ADCIEN0, bit 1 is ADCIEN1..., bit 3 is ADCIEN3. + * @return None + * @details Specific sample module A/D ADINT0 interrupt function Disabled. + */ +#define EADC_DISABLE_INT(eadc, u32Mask) ((eadc)->CTL &= ~((u32Mask) << EADC_CTL_ADCIEN0_Pos)) + +/** + * @brief Enable the sample module interrupt. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32IntSel Decides which interrupt source will be used, valid value are from 0 to 3. + * @param[in] u32ModuleMask the combination of sample module interrupt status bits. Each bit corresponds to a sample module interrupt status. + * This parameter decides which sample module interrupts will be enabled, valid range are between 1~0x7FFFF. + * @return None + * @details There are 4 ADC interrupts ADINT0~3, and each of these interrupts has its own interrupt vector address. + */ +#define EADC_ENABLE_SAMPLE_MODULE_INT(eadc, u32IntSel, u32ModuleMask) ((eadc)->INTSRC[(u32IntSel)] |= (u32ModuleMask)) + +/** + * @brief Disable the sample module interrupt. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32IntSel Decides which interrupt source will be used, valid value are from 0 to 3. + * @param[in] u32ModuleMask the combination of sample module interrupt status bits. Each bit corresponds to a sample module interrupt status. + * This parameter decides which sample module interrupts will be disabled, valid range are between 1~0x7FFFF. + * @return None + * @details There are 4 ADC interrupts ADINT0~3, and each of these interrupts has its own interrupt vector address. + */ +#define EADC_DISABLE_SAMPLE_MODULE_INT(eadc, u32IntSel, u32ModuleMask) ((eadc)->INTSRC[(u32IntSel)] &= ~(u32ModuleMask)) + +/** + * @brief Set the input mode output format. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32Format Decides the output format. Valid values are: + * - \ref EADC_CTL_DMOF_STRAIGHT_BINARY :Select the straight binary format as the output format of the conversion result. + * - \ref EADC_CTL_DMOF_TWOS_COMPLEMENT :Select the 2's complement format as the output format of the conversion result. + * @return None + * @details The macro is used to set A/D input mode output format. + */ +#define EADC_SET_DMOF(eadc, u32Format) ((eadc)->CTL = ((eadc)->CTL & ~EADC_CTL_DMOF_Msk) | (u32Format)) + +/** + * @brief Start the A/D conversion. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32ModuleMask The combination of sample module. Each bit corresponds to a sample module. + * This parameter decides which sample module will be conversion, valid range are between 1~0x7FFFF. + * Bit 0 is sample module 0, bit 1 is sample module 1..., bit 18 is sample module 18. + * @return None + * @details After write EADC_SWTRG register to start ADC conversion, the EADC_PENDSTS register will show which SAMPLE will conversion. + */ +#define EADC_START_CONV(eadc, u32ModuleMask) ((eadc)->SWTRG = (u32ModuleMask)) + +/** + * @brief Cancel the conversion for sample module. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32ModuleMask The combination of sample module. Each bit corresponds to a sample module. + * This parameter decides which sample module will stop the conversion, valid range are between 1~0x7FFFF. + * Bit 0 is sample module 0, bit 1 is sample module 1..., bit 18 is sample module18. + * @return None + * @details If user want to disable the conversion of the sample module, user can write EADC_PENDSTS register to clear it. + */ +#define EADC_STOP_CONV(eadc, u32ModuleMask) ((eadc)->PENDSTS = (u32ModuleMask)) + +/** + * @brief Get the conversion pending flag. + * @param[in] eadc The pointer of the specified EADC module. + * @return Return the conversion pending sample module. + * @details This STPFn(EADC_PENDSTS[18:0]) bit remains 1 during pending state, when the respective ADC conversion is end, + * the STPFn (n=0~18) bit is automatically cleared to 0. + */ +#define EADC_GET_PENDING_CONV(eadc) ((eadc)->PENDSTS) + +/** + * @brief Get the conversion data of the user-specified sample module. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32ModuleNum Decides the sample module number, valid value are from 0 to 18. + * @return Return the conversion data of the user-specified sample module. + * @details This macro is used to read RESULT bit (EADC_DATn[15:0], n=0~18) field to get conversion data. + */ +#define EADC_GET_CONV_DATA(eadc, u32ModuleNum) ((eadc)->DAT[(u32ModuleNum)] & EADC_DAT_RESULT_Msk) + +/** + * @brief Get the data overrun flag of the user-specified sample module. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32ModuleMask The combination of data overrun status bits. Each bit corresponds to a data overrun status, valid range are between 1~0x7FFFF. + * @return Return the data overrun flag of the user-specified sample module. + * @details This macro is used to read OV bit (EADC_STATUS0[31:16], EADC_STATUS1[18:16]) field to get data overrun status. + */ +#define EADC_GET_DATA_OVERRUN_FLAG(eadc, u32ModuleMask) ((((eadc)->STATUS0 >> EADC_STATUS0_OV_Pos) | ((eadc)->STATUS1 & EADC_STATUS1_OV_Msk)) & (u32ModuleMask)) + +/** + * @brief Get the data valid flag of the user-specified sample module. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32ModuleMask The combination of data valid status bits. Each bit corresponds to a data valid status, valid range are between 1~0x7FFFF. + * @return Return the data valid flag of the user-specified sample module. + * @details This macro is used to read VALID bit (EADC_STATUS0[15:0], EADC_STATUS1[1:0]) field to get data overrun status. + */ +#define EADC_GET_DATA_VALID_FLAG(eadc, u32ModuleMask) ((((eadc)->STATUS0 & EADC_STATUS0_VALID_Msk) | (((eadc)->STATUS1 & EADC_STATUS1_VALID_Msk) << 16)) & (u32ModuleMask)) + +/** + * @brief Get the double data of the user-specified sample module. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32ModuleNum Decides the sample module number, valid value are from 0 to 18. + * @return Return the double data of the user-specified sample module. + * @details This macro is used to read RESULT bit (EADC_DDATn[15:0], n=0~3) field to get conversion data. + */ +#define EADC_GET_DOUBLE_DATA(eadc, u32ModuleNum) ((eadc)->DDAT[(u32ModuleNum)] & EADC_DDAT_RESULT_Msk) + +/** + * @brief Get the user-specified interrupt flags. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32Mask The combination of interrupt status bits. Each bit corresponds to a interrupt status. + * Bit 0 is ADIF0, bit 1 is ADIF1..., bit 3 is ADIF3. + * Bit 4 is ADCMPF0, bit 5 is ADCMPF1..., bit 7 is ADCMPF3. + * @return Return the user-specified interrupt flags. + * @details This macro is used to get the user-specified interrupt flags. + */ +#define EADC_GET_INT_FLAG(eadc, u32Mask) ((eadc)->STATUS2 & (u32Mask)) + +/** + * @brief Get the user-specified sample module overrun flags. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32ModuleMask The combination of sample module overrun status bits. Each bit corresponds to a sample module overrun status, valid range are between 1~0x7FFFF. + * @return Return the user-specified sample module overrun flags. + * @details This macro is used to get the user-specified sample module overrun flags. + */ +#define EADC_GET_SAMPLE_MODULE_OV_FLAG(eadc, u32ModuleMask) ((eadc)->OVSTS & (u32ModuleMask)) + +/** + * @brief Clear the selected interrupt status bits. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32Mask The combination of compare interrupt status bits. Each bit corresponds to a compare interrupt status. + * Bit 0 is ADIF0, bit 1 is ADIF1..., bit 3 is ADIF3. + * Bit 4 is ADCMPF0, bit 5 is ADCMPF1..., bit 7 is ADCMPF3. + * @return None + * @details This macro is used to clear clear the selected interrupt status bits. + */ +#define EADC_CLR_INT_FLAG(eadc, u32Mask) ((eadc)->STATUS2 = (u32Mask)) + +/** + * @brief Clear the selected sample module overrun status bits. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32ModuleMask The combination of sample module overrun status bits. Each bit corresponds to a sample module overrun status. + * Bit 0 is SPOVF0, bit 1 is SPOVF1..., bit 18 is SPOVF18. + * @return None + * @details This macro is used to clear the selected sample module overrun status bits. + */ +#define EADC_CLR_SAMPLE_MODULE_OV_FLAG(eadc, u32ModuleMask) ((eadc)->OVSTS = (u32ModuleMask)) + +/** + * @brief Check all sample module A/D result data register overrun flags. + * @param[in] eadc The pointer of the specified EADC module. + * @retval 0 None of sample module data register overrun flag is set to 1. + * @retval 1 Any one of sample module data register overrun flag is set to 1. + * @details The AOV bit (EADC_STATUS2[27]) will keep 1 when any one of sample module data register overrun flag OVn (EADC_DATn[16]) is set to 1. + */ +#define EADC_IS_DATA_OV(eadc) (((eadc)->STATUS2 & EADC_STATUS2_AOV_Msk) >> EADC_STATUS2_AOV_Pos) + +/** + * @brief Check all sample module A/D result data register valid flags. + * @param[in] eadc The pointer of the specified EADC module. + * @retval 0 None of sample module data register valid flag is set to 1. + * @retval 1 Any one of sample module data register valid flag is set to 1. + * @details The AVALID bit (EADC_STATUS2[26]) will keep 1 when any one of sample module data register valid flag VALIDn (EADC_DATn[17]) is set to 1. + */ +#define EADC_IS_DATA_VALID(eadc) (((eadc)->STATUS2 & EADC_STATUS2_AVALID_Msk) >> EADC_STATUS2_AVALID_Pos) + +/** + * @brief Check all A/D sample module start of conversion overrun flags. + * @param[in] eadc The pointer of the specified EADC module. + * @retval 0 None of sample module event overrun flag is set to 1. + * @retval 1 Any one of sample module event overrun flag is set to 1. + * @details The STOVF bit (EADC_STATUS2[25]) will keep 1 when any one of sample module event overrun flag SPOVFn (EADC_OVSTS[n]) is set to 1. + */ +#define EADC_IS_SAMPLE_MODULE_OV(eadc) (((eadc)->STATUS2 & EADC_STATUS2_STOVF_Msk) >> EADC_STATUS2_STOVF_Pos) + +/** + * @brief Check all A/D interrupt flag overrun bits. + * @param[in] eadc The pointer of the specified EADC module. + * @retval 0 None of ADINT interrupt flag is overwritten to 1. + * @retval 1 Any one of ADINT interrupt flag is overwritten to 1. + * @details The ADOVIF bit (EADC_STATUS2[24]) will keep 1 when any one of ADINT interrupt flag ADOVIFn (EADC_STATUS2[11:8]) is overwritten to 1. + */ +#define EADC_IS_INT_FLAG_OV(eadc) (((eadc)->STATUS2 & EADC_STATUS2_ADOVIF_Msk) >> EADC_STATUS2_ADOVIF_Pos) + +/** + * @brief Get the busy state of EADC. + * @param[in] eadc The pointer of the specified EADC module. + * @retval 0 Idle state. + * @retval 1 Busy state. + * @details This macro is used to read BUSY bit (EADC_STATUS2[23]) to get busy state. + */ +#define EADC_IS_BUSY(eadc) (((eadc)->STATUS2 & EADC_STATUS2_BUSY_Msk) >> EADC_STATUS2_BUSY_Pos) + +/** + * @brief Configure the comparator 0 and enable it. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32ModuleNum specifies the compare sample module, valid value are from 0 to 18. + * @param[in] u32Condition specifies the compare condition. Valid values are: + * - \ref EADC_CMP_CMPCOND_LESS_THAN :The compare condition is "less than the compare value" + * - \ref EADC_CMP_CMPCOND_GREATER_OR_EQUAL :The compare condition is "greater than or equal to the compare value + * @param[in] u16CMPData specifies the compare value, valid range are between 0~0xFFF. + * @param[in] u32MatchCount specifies the match count setting, valid range are between 0~0xF. + * @return None + * @details For example, ADC_ENABLE_CMP0(EADC, 5, ADC_ADCMPR_CMPCOND_GREATER_OR_EQUAL, 0x800, 10, EADC_CMP_CMPWEN_DISABLE, EADC_CMP_ADCMPIE_ENABLE); + * Means EADC will assert comparator 0 flag if sample module 5 conversion result is greater or + * equal to 0x800 for 10 times continuously, and a compare interrupt request is generated. + */ +#define EADC_ENABLE_CMP0(eadc,\ + u32ModuleNum,\ + u32Condition,\ + u16CMPData,\ + u32MatchCount) ((eadc)->CMP[0] |=(((u32ModuleNum) << EADC_CMP_CMPSPL_Pos)|\ + (u32Condition) |\ + ((u16CMPData) << EADC_CMP_CMPDAT_Pos)| \ + (((u32MatchCount) - 1) << EADC_CMP_CMPMCNT_Pos)|\ + EADC_CMP_ADCMPEN_Msk)) + +/** + * @brief Configure the comparator 1 and enable it. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32ModuleNum specifies the compare sample module, valid value are from 0 to 18. + * @param[in] u32Condition specifies the compare condition. Valid values are: + * - \ref EADC_CMP_CMPCOND_LESS_THAN :The compare condition is "less than the compare value" + * - \ref EADC_CMP_CMPCOND_GREATER_OR_EQUAL :The compare condition is "greater than or equal to the compare value + * @param[in] u16CMPData specifies the compare value, valid range are between 0~0xFFF. + * @param[in] u32MatchCount specifies the match count setting, valid range are between 0~0xF. + * @return None + * @details For example, ADC_ENABLE_CMP1(EADC, 5, ADC_ADCMPR_CMPCOND_GREATER_OR_EQUAL, 0x800, 10, EADC_CMP_ADCMPIE_ENABLE); + * Means EADC will assert comparator 1 flag if sample module 5 conversion result is greater or + * equal to 0x800 for 10 times continuously, and a compare interrupt request is generated. + */ +#define EADC_ENABLE_CMP1(eadc,\ + u32ModuleNum,\ + u32Condition,\ + u16CMPData,\ + u32MatchCount) ((eadc)->CMP[1] |=(((u32ModuleNum) << EADC_CMP_CMPSPL_Pos)|\ + (u32Condition) |\ + ((u16CMPData) << EADC_CMP_CMPDAT_Pos)| \ + (((u32MatchCount) - 1) << EADC_CMP_CMPMCNT_Pos)|\ + EADC_CMP_ADCMPEN_Msk)) + +/** + * @brief Configure the comparator 2 and enable it. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32ModuleNum specifies the compare sample module, valid value are from 0 to 18. + * @param[in] u32Condition specifies the compare condition. Valid values are: + * - \ref EADC_CMP_CMPCOND_LESS_THAN :The compare condition is "less than the compare value" + * - \ref EADC_CMP_CMPCOND_GREATER_OR_EQUAL :The compare condition is "greater than or equal to the compare value + * @param[in] u16CMPData specifies the compare value, valid range are between 0~0xFFF. + * @param[in] u32MatchCount specifies the match count setting, valid range are between 0~0xF. + * @return None + * @details For example, ADC_ENABLE_CMP2(EADC, 5, ADC_ADCMPR_CMPCOND_GREATER_OR_EQUAL, 0x800, 10, EADC_CMP_CMPWEN_DISABLE, EADC_CMP_ADCMPIE_ENABLE); + * Means EADC will assert comparator 2 flag if sample module 5 conversion result is greater or + * equal to 0x800 for 10 times continuously, and a compare interrupt request is generated. + */ +#define EADC_ENABLE_CMP2(eadc,\ + u32ModuleNum,\ + u32Condition,\ + u16CMPData,\ + u32MatchCount) ((eadc)->CMP[2] |=(((u32ModuleNum) << EADC_CMP_CMPSPL_Pos)|\ + (u32Condition) |\ + ((u16CMPData) << EADC_CMP_CMPDAT_Pos)| \ + (((u32MatchCount) - 1) << EADC_CMP_CMPMCNT_Pos)|\ + EADC_CMP_ADCMPEN_Msk)) + +/** + * @brief Configure the comparator 3 and enable it. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32ModuleNum specifies the compare sample module, valid value are from 0 to 18. + * @param[in] u32Condition specifies the compare condition. Valid values are: + * - \ref EADC_CMP_CMPCOND_LESS_THAN :The compare condition is "less than the compare value" + * - \ref EADC_CMP_CMPCOND_GREATER_OR_EQUAL :The compare condition is "greater than or equal to the compare value + * @param[in] u16CMPData specifies the compare value, valid range are between 0~0xFFF. + * @param[in] u32MatchCount specifies the match count setting, valid range are between 1~0xF. + * @return None + * @details For example, ADC_ENABLE_CMP3(EADC, 5, ADC_ADCMPR_CMPCOND_GREATER_OR_EQUAL, 0x800, 10, EADC_CMP_ADCMPIE_ENABLE); + * Means EADC will assert comparator 3 flag if sample module 5 conversion result is greater or + * equal to 0x800 for 10 times continuously, and a compare interrupt request is generated. + */ +#define EADC_ENABLE_CMP3(eadc,\ + u32ModuleNum,\ + u32Condition,\ + u16CMPData,\ + u32MatchCount) ((eadc)->CMP[3] |=(((u32ModuleNum) << EADC_CMP_CMPSPL_Pos)|\ + (u32Condition) |\ + ((u16CMPData) << EADC_CMP_CMPDAT_Pos)| \ + (((u32MatchCount) - 1) << EADC_CMP_CMPMCNT_Pos)|\ + EADC_CMP_ADCMPEN_Msk)) + +/** + * @brief Enable the compare window mode. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32CMP Specifies the compare register, valid value are 0 and 2. + * @return None + * @details ADCMPF0 (EADC_STATUS2[4]) will be set when both EADC_CMP0 and EADC_CMP1 compared condition matched. + */ +#define EADC_ENABLE_CMP_WINDOW_MODE(eadc, u32CMP) ((eadc)->CMP[(u32CMP)] |= EADC_CMP_CMPWEN_Msk) + +/** + * @brief Disable the compare window mode. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32CMP Specifies the compare register, valid value are 0 and 2. + * @return None + * @details ADCMPF2 (EADC_STATUS2[6]) will be set when both EADC_CMP2 and EADC_CMP3 compared condition matched. + */ +#define EADC_DISABLE_CMP_WINDOW_MODE(eadc, u32CMP) ((eadc)->CMP[(u32CMP)] &= ~EADC_CMP_CMPWEN_Msk) + +/** + * @brief Enable the compare interrupt. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32CMP Specifies the compare register, valid value are from 0 to 3. + * @return None + * @details If the compare function is enabled and the compare condition matches the setting of CMPCOND (EADC_CMPn[2], n=0~3) + * and CMPMCNT (EADC_CMPn[11:8], n=0~3), ADCMPFn (EADC_STATUS2[7:4], n=0~3) will be asserted, in the meanwhile, + * if ADCMPIE is set to 1, a compare interrupt request is generated. + */ +#define EADC_ENABLE_CMP_INT(eadc, u32CMP) ((eadc)->CMP[(u32CMP)] |= EADC_CMP_ADCMPIE_Msk) + +/** + * @brief Disable the compare interrupt. + * @param[in] eadc The pointer of the specified EADC module. + * @param[in] u32CMP Specifies the compare register, valid value are from 0 to 3. + * @return None + * @details This macro is used to disable the compare interrupt. + */ +#define EADC_DISABLE_CMP_INT(eadc, u32CMP) ((eadc)->CMP[(u32CMP)] &= ~EADC_CMP_ADCMPIE_Msk) + +/** + * @brief Disable comparator 0. + * @param[in] eadc The pointer of the specified EADC module. + * @return None + * @details This macro is used to disable comparator 0. + */ +#define EADC_DISABLE_CMP0(eadc) ((eadc)->CMP[0] = 0) + +/** + * @brief Disable comparator 1. + * @param[in] eadc The pointer of the specified EADC module. + * @return None + * @details This macro is used to disable comparator 1. + */ +#define EADC_DISABLE_CMP1(eadc) ((eadc)->CMP[1] = 0) + +/** + * @brief Disable comparator 2. + * @param[in] eadc The pointer of the specified EADC module. + * @return None + * @details This macro is used to disable comparator 2. + */ +#define EADC_DISABLE_CMP2(eadc) ((eadc)->CMP[2] = 0) + +/** + * @brief Disable comparator 3. + * @param[in] eadc The pointer of the specified EADC module. + * @return None + * @details This macro is used to disable comparator 3. + */ +#define EADC_DISABLE_CMP3(eadc) ((eadc)->CMP[3] = 0) + +/*---------------------------------------------------------------------------------------------------------*/ +/* Define EADC functions prototype */ +/*---------------------------------------------------------------------------------------------------------*/ +void EADC_Open(EADC_T *eadc, uint32_t u32InputMode); +void EADC_Close(EADC_T *eadc); +void EADC_ConfigSampleModule(EADC_T *eadc, uint32_t u32ModuleNum, uint32_t u32TriggerSource, uint32_t u32Channel); +void EADC_SetTriggerDelayTime(EADC_T *eadc, uint32_t u32ModuleNum, uint32_t u32TriggerDelayTime, uint32_t u32DelayClockDivider); +void EADC_SetInternalSampleTime(EADC_T *eadc, uint32_t u32SampleTime); +void EADC_SetExtendSampleTime(EADC_T *eadc, uint32_t u32ModuleNum, uint32_t u32ExtendSampleTime); + +/*@}*/ /* end of group EADC_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group EADC_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +#ifdef __cplusplus +} +#endif + +#endif //__EADC_H__ + +/*** (C) COPYRIGHT 2013~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_ebi.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_ebi.c new file mode 100644 index 00000000000..e4d7b7ca2f0 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_ebi.c @@ -0,0 +1,178 @@ +/**************************************************************************//** + * @file ebi.c + * @version V3.00 + * $Revision: 9 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series EBI driver source file + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ +#include "M451Series.h" + + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup EBI_Driver EBI Driver + @{ +*/ + +/** @addtogroup EBI_EXPORTED_FUNCTIONS EBI Exported Functions + @{ +*/ + +/** + * @brief Initialize EBI for specify Bank + * + * @param[in] u32Bank Bank number for EBI. Valid values are: + * - \ref EBI_BANK0 + * - \ref EBI_BANK1 + * @param[in] u32DataWidth Data bus width. Valid values are: + * - \ref EBI_BUSWIDTH_8BIT + * - \ref EBI_BUSWIDTH_16BIT + * @param[in] u32TimingClass Default timing configuration. Valid values are: + * - \ref EBI_TIMING_FASTEST + * - \ref EBI_TIMING_VERYFAST + * - \ref EBI_TIMING_FAST + * - \ref EBI_TIMING_NORMAL + * - \ref EBI_TIMING_SLOW + * - \ref EBI_TIMING_VERYSLOW + * - \ref EBI_TIMING_SLOWEST + * @param[in] u32BusMode Enable EBI separate mode. This parameter is current not used. + * @param[in] u32CSActiveLevel CS is active High/Low. Valid values are: + * - \ref EBI_CS_ACTIVE_HIGH + * - \ref EBI_CS_ACTIVE_LOW + * + * @return none + * + * @details This function is used to open specify EBI bank with different bus width, timing setting and \n + * active level of CS pin to access EBI device. + * @note Write Buffer Enable(WBUFEN) and Extend Time Of ALE(TALE) are only available in EBI bank0 control register. + */ +void EBI_Open(uint32_t u32Bank, uint32_t u32DataWidth, uint32_t u32TimingClass, uint32_t u32BusMode, uint32_t u32CSActiveLevel) +{ + volatile uint32_t *pu32EBICTL = (uint32_t *)((uint32_t)&EBI->CTL0 + (u32Bank * 0x10)); + volatile uint32_t *pu32EBITCTL = (uint32_t *)((uint32_t)&EBI->TCTL0 + (u32Bank * 0x10)); + + if(u32DataWidth == EBI_BUSWIDTH_8BIT) + *pu32EBICTL &= ~EBI_CTL0_DW16_Msk; + else + *pu32EBICTL |= EBI_CTL0_DW16_Msk; + + switch(u32TimingClass) + { + case EBI_TIMING_FASTEST: + *pu32EBICTL = (*pu32EBICTL & ~(EBI_CTL0_MCLKDIV_Msk | EBI_CTL0_TALE_Msk)) | + (EBI_MCLKDIV_1 << EBI_CTL0_MCLKDIV_Pos) | + (u32CSActiveLevel << EBI_CTL0_CSPOLINV_Pos) | EBI_CTL0_EN_Msk; + *pu32EBITCTL = 0x0; + break; + + case EBI_TIMING_VERYFAST: + *pu32EBICTL = (*pu32EBICTL & ~(EBI_CTL0_MCLKDIV_Msk | EBI_CTL0_TALE_Msk)) | + (EBI_MCLKDIV_1 << EBI_CTL0_MCLKDIV_Pos) | + (u32CSActiveLevel << EBI_CTL0_CSPOLINV_Pos) | EBI_CTL0_EN_Msk | + (0x3 << EBI_CTL0_TALE_Pos) ; + *pu32EBITCTL = 0x03003318; + break; + + case EBI_TIMING_FAST: + *pu32EBICTL = (*pu32EBICTL & ~(EBI_CTL0_MCLKDIV_Msk | EBI_CTL0_TALE_Msk)) | + (EBI_MCLKDIV_2 << EBI_CTL0_MCLKDIV_Pos) | + (u32CSActiveLevel << EBI_CTL0_CSPOLINV_Pos) | EBI_CTL0_EN_Msk; + *pu32EBITCTL = 0x0; + break; + + case EBI_TIMING_NORMAL: + *pu32EBICTL = (*pu32EBICTL & ~(EBI_CTL0_MCLKDIV_Msk | EBI_CTL0_TALE_Msk)) | + (EBI_MCLKDIV_2 << EBI_CTL0_MCLKDIV_Pos) | + (u32CSActiveLevel << EBI_CTL0_CSPOLINV_Pos) | EBI_CTL0_EN_Msk | + (0x3 << EBI_CTL0_TALE_Pos) ; + *pu32EBITCTL = 0x03003318; + break; + + case EBI_TIMING_SLOW: + *pu32EBICTL = (*pu32EBICTL & ~(EBI_CTL0_MCLKDIV_Msk | EBI_CTL0_TALE_Msk)) | + (EBI_MCLKDIV_2 << EBI_CTL0_MCLKDIV_Pos) | + (u32CSActiveLevel << EBI_CTL0_CSPOLINV_Pos) | EBI_CTL0_EN_Msk | + (0x7 << EBI_CTL0_TALE_Pos) ; + *pu32EBITCTL = 0x07007738; + break; + + case EBI_TIMING_VERYSLOW: + *pu32EBICTL = (*pu32EBICTL & ~(EBI_CTL0_MCLKDIV_Msk | EBI_CTL0_TALE_Msk)) | + (EBI_MCLKDIV_4 << EBI_CTL0_MCLKDIV_Pos) | + (u32CSActiveLevel << EBI_CTL0_CSPOLINV_Pos) | EBI_CTL0_EN_Msk | + (0x7 << EBI_CTL0_TALE_Pos) ; + *pu32EBITCTL = 0x07007738; + break; + + case EBI_TIMING_SLOWEST: + *pu32EBICTL = (*pu32EBICTL & ~(EBI_CTL0_MCLKDIV_Msk | EBI_CTL0_TALE_Msk)) | + (EBI_MCLKDIV_8 << EBI_CTL0_MCLKDIV_Pos) | + (u32CSActiveLevel << EBI_CTL0_CSPOLINV_Pos) | EBI_CTL0_EN_Msk | + (0x7 << EBI_CTL0_TALE_Pos) ; + *pu32EBITCTL = 0x07007738; + break; + + default: + *pu32EBICTL &= ~EBI_CTL0_EN_Msk; + break; + } +} + +/** + * @brief Disable EBI on specify Bank + * + * @param[in] u32Bank Bank number for EBI. Valid values are: + * - \ref EBI_BANK0 + * - \ref EBI_BANK1 + * + * @return none + * + * @details This function is used to close specify EBI function. + */ +void EBI_Close(uint32_t u32Bank) +{ + volatile uint32_t *pu32EBICTL = (uint32_t *)((uint32_t)&EBI->CTL0 + (u32Bank * 0x10)); + + *pu32EBICTL &= ~EBI_CTL0_EN_Msk; +} + +/** + * @brief Set EBI Bus Timing for specify Bank + * + * @param[in] u32Bank Bank number for EBI. Valid values are: + * - \ref EBI_BANK0 + * - \ref EBI_BANK1 + * @param[in] u32TimingConfig Configure EBI timing settings, includes TACC, TAHD, W2X and R2R setting. + * @param[in] u32MclkDiv Divider for MCLK. Valid values are: + * - \ref EBI_MCLKDIV_1 + * - \ref EBI_MCLKDIV_2 + * - \ref EBI_MCLKDIV_4 + * - \ref EBI_MCLKDIV_8 + * - \ref EBI_MCLKDIV_16 + * - \ref EBI_MCLKDIV_32 + * + * @return none + * + * @details This function is used to configure specify EBI bus timing for access EBI device. + */ +void EBI_SetBusTiming(uint32_t u32Bank, uint32_t u32TimingConfig, uint32_t u32MclkDiv) +{ + volatile uint32_t *pu32EBICTL = (uint32_t *)((uint32_t)&EBI->CTL0 + (u32Bank * 0x10)); + volatile uint32_t *pu32EBITCTL = (uint32_t *)((uint32_t)&EBI->TCTL0 + (u32Bank * 0x10)); + + *pu32EBICTL = (*pu32EBICTL & ~EBI_CTL0_MCLKDIV_Msk) | (u32MclkDiv << EBI_CTL0_MCLKDIV_Pos); + *pu32EBITCTL = u32TimingConfig; +} + +/*@}*/ /* end of group EBI_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group EBI_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +/*** (C) COPYRIGHT 2013~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_ebi.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_ebi.h new file mode 100644 index 00000000000..36af7ff5169 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_ebi.h @@ -0,0 +1,235 @@ +/**************************************************************************//** + * @file ebi.h + * @version V3.00 + * $Revision: 8 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series EBI driver header file + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. + *****************************************************************************/ +#ifndef __EBI_H__ +#define __EBI_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup EBI_Driver EBI Driver + @{ +*/ + +/** @addtogroup EBI_EXPORTED_CONSTANTS EBI Exported Constants + @{ +*/ +/*---------------------------------------------------------------------------------------------------------*/ +/* Miscellaneous Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define EBI_BANK0_BASE_ADDR 0x60000000UL /*!< EBI bank0 base address */ +#define EBI_BANK1_BASE_ADDR 0x60100000UL /*!< EBI bank1 base address */ +#define EBI_MAX_SIZE 0x00100000UL /*!< Maximum EBI size for each bank is 1 MB */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* Constants for EBI bank number */ +/*---------------------------------------------------------------------------------------------------------*/ +#define EBI_BANK0 0 /*!< EBI bank 0 */ +#define EBI_BANK1 1 /*!< EBI bank 1 */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* Constants for EBI data bus width */ +/*---------------------------------------------------------------------------------------------------------*/ +#define EBI_BUSWIDTH_8BIT 8 /*!< EBI bus width is 8-bit */ +#define EBI_BUSWIDTH_16BIT 16 /*!< EBI bus width is 16-bit */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* Constants for EBI CS Active Level */ +/*---------------------------------------------------------------------------------------------------------*/ +#define EBI_CS_ACTIVE_LOW 0 /*!< EBI CS active level is low */ +#define EBI_CS_ACTIVE_HIGH 1 /*!< EBI CS active level is high */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* Constants for EBI MCLK divider and Timing */ +/*---------------------------------------------------------------------------------------------------------*/ +#define EBI_MCLKDIV_1 0x0UL /*!< EBI output clock(MCLK) is HCLK/1 */ +#define EBI_MCLKDIV_2 0x1UL /*!< EBI output clock(MCLK) is HCLK/2 */ +#define EBI_MCLKDIV_4 0x2UL /*!< EBI output clock(MCLK) is HCLK/4 */ +#define EBI_MCLKDIV_8 0x3UL /*!< EBI output clock(MCLK) is HCLK/8 */ +#define EBI_MCLKDIV_16 0x4UL /*!< EBI output clock(MCLK) is HCLK/16 */ +#define EBI_MCLKDIV_32 0x5UL /*!< EBI output clock(MCLK) is HCLK/32 */ + +#define EBI_TIMING_FASTEST 0x0UL /*!< EBI timing is the fastest */ +#define EBI_TIMING_VERYFAST 0x1UL /*!< EBI timing is very fast */ +#define EBI_TIMING_FAST 0x2UL /*!< EBI timing is fast */ +#define EBI_TIMING_NORMAL 0x3UL /*!< EBI timing is normal */ +#define EBI_TIMING_SLOW 0x4UL /*!< EBI timing is slow */ +#define EBI_TIMING_VERYSLOW 0x5UL /*!< EBI timing is very slow */ +#define EBI_TIMING_SLOWEST 0x6UL /*!< EBI timing is the slowest */ + +/*@}*/ /* end of group EBI_EXPORTED_CONSTANTS */ + + +/** @addtogroup EBI_EXPORTED_FUNCTIONS EBI Exported Functions + @{ +*/ + +/** + * @brief Read 8-bit data on EBI bank0 + * + * @param[in] u32Addr The data address on EBI bank0. + * + * @return 8-bit Data + * + * @details This macro is used to read 8-bit data from specify address on EBI bank0. + */ +#define EBI0_READ_DATA8(u32Addr) (*((volatile unsigned char *)(EBI_BANK0_BASE_ADDR+(u32Addr)))) + +/** + * @brief Write 8-bit data to EBI bank0 + * + * @param[in] u32Addr The data address on EBI bank0. + * @param[in] u32Data Specify data to be written. + * + * @return None + * + * @details This macro is used to write 8-bit data to specify address on EBI bank0. + */ +#define EBI0_WRITE_DATA8(u32Addr, u32Data) (*((volatile unsigned char *)(EBI_BANK0_BASE_ADDR+(u32Addr))) = (u32Data)) + +/** + * @brief Read 16-bit data on EBI bank0 + * + * @param[in] u32Addr The data address on EBI bank0. + * + * @return 16-bit Data + * + * @details This macro is used to read 16-bit data from specify address on EBI bank0. + */ +#define EBI0_READ_DATA16(u32Addr) (*((volatile unsigned short *)(EBI_BANK0_BASE_ADDR+(u32Addr)))) + +/** + * @brief Write 16-bit data to EBI bank0 + * + * @param[in] u32Addr The data address on EBI bank0. + * @param[in] u32Data Specify data to be written. + * + * @return None + * + * @details This macro is used to write 16-bit data to specify address on EBI bank0. + */ +#define EBI0_WRITE_DATA16(u32Addr, u32Data) (*((volatile unsigned short *)(EBI_BANK0_BASE_ADDR+(u32Addr))) = (u32Data)) + +/** + * @brief Read 32-bit data on EBI bank0 + * + * @param[in] u32Addr The data address on EBI bank0. + * + * @return 32-bit Data + * + * @details This macro is used to read 32-bit data from specify address on EBI bank0. + */ +#define EBI0_READ_DATA32(u32Addr) (*((volatile unsigned int *)(EBI_BANK0_BASE_ADDR+(u32Addr)))) + +/** + * @brief Write 32-bit data to EBI bank0 + * + * @param[in] u32Addr The data address on EBI bank0. + * @param[in] u32Data Specify data to be written. + * + * @return None + * + * @details This macro is used to write 32-bit data to specify address on EBI bank0. + */ +#define EBI0_WRITE_DATA32(u32Addr, u32Data) (*((volatile unsigned int *)(EBI_BANK0_BASE_ADDR+(u32Addr))) = (u32Data)) + +/** + * @brief Read 8-bit data on EBI bank1 + * + * @param[in] u32Addr The data address on EBI bank1. + * + * @return 8-bit Data + * + * @details This macro is used to read 8-bit data from specify address on EBI bank1. + */ +#define EBI1_READ_DATA8(u32Addr) (*((volatile unsigned char *)(EBI_BANK1_BASE_ADDR+(u32Addr)))) + +/** + * @brief Write 8-bit data to EBI bank1 + * + * @param[in] u32Addr The data address on EBI bank1. + * @param[in] u32Data Specify data to be written. + * + * @return None + * + * @details This macro is used to write 8-bit data to specify address on EBI bank1. + */ +#define EBI1_WRITE_DATA8(u32Addr, u32Data) (*((volatile unsigned char *)(EBI_BANK1_BASE_ADDR+(u32Addr))) = (u32Data)) + +/** + * @brief Read 16-bit data on EBI bank1 + * + * @param[in] u32Addr The data address on EBI bank1. + * + * @return 16-bit Data + * + * @details This macro is used to read 16-bit data from specify address on EBI bank1. + */ +#define EBI1_READ_DATA16(u32Addr) (*((volatile unsigned short *)(EBI_BANK1_BASE_ADDR+(u32Addr)))) + +/** + * @brief Write 16-bit data to EBI bank1 + * + * @param[in] u32Addr The data address on EBI bank1. + * @param[in] u32Data Specify data to be written. + * + * @return None + * + * @details This macro is used to write 16-bit data to specify address on EBI bank1. + */ +#define EBI1_WRITE_DATA16(u32Addr, u32Data) (*((volatile unsigned short *)(EBI_BANK1_BASE_ADDR+(u32Addr))) = (u32Data)) + +/** + * @brief Read 32-bit data on EBI bank1 + * + * @param[in] u32Addr The data address on EBI bank1. + * + * @return 32-bit Data + * + * @details This macro is used to read 32-bit data from specify address on EBI bank1. + */ +#define EBI1_READ_DATA32(u32Addr) (*((volatile unsigned int *)(EBI_BANK1_BASE_ADDR+(u32Addr)))) + +/** + * @brief Write 32-bit data to EBI bank1 + * + * @param[in] u32Addr The data address on EBI bank1. + * @param[in] u32Data Specify data to be written. + * + * @return None + * + * @details This macro is used to write 32-bit data to specify address on EBI bank1. + */ +#define EBI1_WRITE_DATA32(u32Addr, u32Data) (*((volatile unsigned int *)(EBI_BANK1_BASE_ADDR+(u32Addr))) = (u32Data)) + +void EBI_Open(uint32_t u32Bank, uint32_t u32DataWidth, uint32_t u32TimingClass, uint32_t u32BusMode, uint32_t u32CSActiveLevel); +void EBI_Close(uint32_t u32Bank); +void EBI_SetBusTiming(uint32_t u32Bank, uint32_t u32TimingConfig, uint32_t u32MclkDiv); + +/*@}*/ /* end of group EBI_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group EBI_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +#ifdef __cplusplus +} +#endif + +#endif //__EBI_H__ + +/*** (C) COPYRIGHT 2013~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_fmc.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_fmc.c new file mode 100644 index 00000000000..01fcb84e95b --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_fmc.c @@ -0,0 +1,320 @@ +/**************************************************************************//** + * @file fmc.c + * @version V3.00 + * $Revision: 7 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series FMC driver source file + * + * @note + * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved. + *****************************************************************************/ + +//* Includes ------------------------------------------------------------------*/ +#include +#include "M451Series.h" + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup FMC_Driver FMC Driver + @{ +*/ + + +/** @addtogroup FMC_EXPORTED_FUNCTIONS FMC Exported Functions + @{ +*/ + + +/** + * @brief Set boot source from LDROM or APROM after next software reset + * + * @param[in] i32BootSrc + * 1: Boot from LDROM, + * 0: Boot from APROM + * + * @return None + * + * @details This function is used to switch APROM boot or LDROM boot. User need to call + * FMC_SetBootSource to select boot source first, then use CPU reset or + * System Reset Request to reset system. + * + */ +void FMC_SetBootSource(int32_t i32BootSrc) +{ + if(i32BootSrc) + FMC->ISPCTL |= FMC_ISPCTL_BS_Msk; /* Boot from LDROM */ + else + FMC->ISPCTL &= ~FMC_ISPCTL_BS_Msk;/* Boot from APROM */ +} + + +/** + * @brief Disable ISP Functions + * + * @param None + * + * @return None + * + * @details This function will clear ISPEN bit of ISPCTL to disable ISP function + * + */ +void FMC_Close(void) +{ + FMC->ISPCTL &= ~FMC_ISPCTL_ISPEN_Msk; +} + + +/** + * @brief Disable APROM update function + * + * @param None + * + * @return None + * + * @details Disable APROM update function will forbid APROM programming when boot form APROM. + * APROM update is default to be disable. + * + */ +void FMC_DisableAPUpdate(void) +{ + FMC->ISPCTL &= ~FMC_ISPCTL_APUEN_Msk; +} + + +/** + * @brief Disable User Configuration update function + * + * @param None + * + * @return None + * + * @details Disable User Configuration update function will forbid User Configuration programming. + * User Configuration update is default to be disable. + */ +void FMC_DisableConfigUpdate(void) +{ + FMC->ISPCTL &= ~FMC_ISPCTL_CFGUEN_Msk; +} + + +/** + * @brief Disable LDROM update function + * + * @param None + * + * @return None + + * @details Disable LDROM update function will forbid LDROM programming. + * LDROM update is default to be disable. + */ +void FMC_DisableLDUpdate(void) +{ + FMC->ISPCTL &= ~FMC_ISPCTL_LDUEN_Msk; +} + + +/** + * @brief Enable APROM update function + * + * @param None + * + * @return None + * + * @details Enable APROM to be able to program when boot from APROM. + * + */ +void FMC_EnableAPUpdate(void) +{ + FMC->ISPCTL |= FMC_ISPCTL_APUEN_Msk; +} + + +/** + * @brief Enable User Configuration update function + * + * @param None + * + * @return None + * + * @details Enable User Configuration to be able to program. + * + */ +void FMC_EnableConfigUpdate(void) +{ + FMC->ISPCTL |= FMC_ISPCTL_CFGUEN_Msk; +} + + +/** + * @brief Enable LDROM update function + * + * @param None + * + * @return None + * + * @details Enable LDROM to be able to program. + * + */ +void FMC_EnableLDUpdate(void) +{ + FMC->ISPCTL |= FMC_ISPCTL_LDUEN_Msk; +} + + +/** + * @brief Get the current boot source + * + * @param None + * + * @retval 0 This chip is currently booting from APROM + * @retval 1 This chip is currently booting from LDROM + * + * @note This function only show the boot source. + * User need to read ISPSTA register to know if IAP mode supported or not in relative boot. + */ +int32_t FMC_GetBootSource(void) +{ + if(FMC->ISPCTL & FMC_ISPCTL_BS_Msk) + return 1; + else + return 0; +} + + +/** + * @brief Enable FMC ISP function + * + * @param None + * + * @return None + * + * @details ISPEN bit of ISPCTL must be set before we can use ISP commands. + * Therefore, To use all FMC function APIs, user needs to call FMC_Open() first to enable ISP functions. + * + * @note ISP functions are write-protected. user also needs to unlock it by calling SYS_UnlockReg() before using all ISP functions. + * + */ +void FMC_Open(void) +{ + FMC->ISPCTL |= FMC_ISPCTL_ISPEN_Msk; +} + +/** + * @brief Get the base address of Data Flash if enabled. + * + * @param None + * + * @return The base address of Data Flash + * + * @details This function is used to return the base address of Data Flash. + * + */ +uint32_t FMC_ReadDataFlashBaseAddr(void) +{ + return FMC->DFBA; +} + + +/** + * @brief Read the User Configuration words. + * + * @param[out] u32Config The word buffer to store the User Configuration data. + * @param[in] u32Count The word count to be read. + * + * @retval 0 Success + * @retval -1 Failed + * + * @details This function is used to read the settings of user configuration. + * if u32Count = 1, Only CONFIG0 will be returned to the buffer specified by u32Config. + * if u32Count = 2, Both CONFIG0 and CONFIG1 will be returned. + */ +int32_t FMC_ReadConfig(uint32_t *u32Config, uint32_t u32Count) +{ + int32_t i; + + for(i = 0; i < u32Count; i++) + u32Config[i] = FMC_Read(FMC_CONFIG_BASE + i * 4); + + return 0; +} + + +/** + * @brief Write User Configuration + * + * @param[in] u32Config The word buffer to store the User Configuration data. + * @param[in] u32Count The word count to program to User Configuration. + * + * @retval 0 Success + * @retval -1 Failed + * + * @details User must enable User Configuration update before writing it. + * User must erase User Configuration before writing it. + * User Configuration is also be page erase. User needs to backup necessary data + * before erase User Configuration. + */ +int32_t FMC_WriteConfig(uint32_t *u32Config, uint32_t u32Count) +{ + int32_t i; + + for(i = 0; i < u32Count; i++) + { + FMC_Write(FMC_CONFIG_BASE + i * 4, u32Config[i]); + if(FMC_Read(FMC_CONFIG_BASE + i * 4) != u32Config[i]) + return -1; + } + + return 0; +} + +/** + * @brief Enable Flash Access Frequency Optimization Mode + * + * @param[in] u32Mode Optimize flash access cycle mode + * - \ref FMC_FTCTL_OPTIMIZE_DISABLE + * - \ref FMC_FTCTL_OPTIMIZE_12MHZ + * - \ref FMC_FTCTL_OPTIMIZE_36MHZ + * - \ref FMC_FTCTL_OPTIMIZE_60MHZ + * - \ref FMC_FTCTL_OPTIMIZE_72MHZ + * + * @return None + * + * @details This function will set FOM bit fields of FTCTL register to set flash access frequency optimization mode. + * + * @note The flash optimization mode (FOM) bits are write protect. + * + */ +void FMC_EnableFreqOptimizeMode(uint32_t u32Mode) +{ + FMC->FTCTL &= ~FMC_FTCTL_FOM_Msk; + FMC->FTCTL |= (u32Mode << FMC_FTCTL_FOM_Pos); +} + +/** + * @brief Disable Flash Access Frequency Optimization Mode + * + * @param None + * + * @return None + * + * @details This function will clear FOM bit fields of FTCTL register to disable flash access frequency optimization mode. + * + * @note The flash optimization mode (FOM) bits are write protect. + * + */ +void FMC_DisableFreqOptimizeMode(void) +{ + FMC->FTCTL &= ~FMC_FTCTL_FOM_Msk; +} + +/*@}*/ /* end of group FMC_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group FMC_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +/*** (C) COPYRIGHT 2014~2015 Nuvoton Technology Corp. ***/ + + diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_fmc.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_fmc.h new file mode 100644 index 00000000000..994c0b311ed --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_fmc.h @@ -0,0 +1,605 @@ +/**************************************************************************//** + * @file FMC.h + * @version V2.1 + * $Revision: 19 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 Series Flash Memory Controller Driver Header File + * + * @note + * Copyright (C) 2011~2015 Nuvoton Technology Corp. All rights reserved. + * + ******************************************************************************/ +#ifndef __FMC_H__ +#define __FMC_H__ + +#include "M451Series.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup FMC_Driver FMC Driver + @{ +*/ + +/** @addtogroup FMC_EXPORTED_CONSTANTS FMC Exported Constants + @{ +*/ + +/*---------------------------------------------------------------------------------------------------------*/ +/* Global constant definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define ISBEN 0 + +/*---------------------------------------------------------------------------------------------------------*/ +/* Define Base Address */ +/*---------------------------------------------------------------------------------------------------------*/ +#define FMC_APROM_BASE 0x00000000UL /*!< APROM Base Address */ +#define FMC_LDROM_BASE 0x00100000UL /*!< LDROM Base Address */ +#define FMC_SPROM_BASE 0x00200000UL /*!< SPROM Base Address */ +#define FMC_CONFIG_BASE 0x00300000UL /*!< CONFIG Base Address */ + +#define FMC_CONFIG0_ADDR (FMC_CONFIG_BASE) /*!< CONFIG 0 Address */ +#define FMC_CONFIG1_ADDR (FMC_CONFIG_BASE + 4) /*!< CONFIG 1 Address */ + + +#define FMC_FLASH_PAGE_SIZE 0x800 /*!< Flash Page Size (2048 Bytes) */ +#define FMC_LDROM_SIZE 0x1000 /*!< LDROM Size (4 kBytes) */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* ISPCTL constant definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define FMC_ISPCTL_BS_LDROM 0x2 /*!< ISPCTL setting to select to boot from LDROM */ +#define FMC_ISPCTL_BS_APROM 0x0 /*!< ISPCTL setting to select to boot from APROM */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* ISPCMD constant definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define FMC_ISPCMD_READ 0x00 /*!< ISP Command: Read Flash */ +#define FMC_ISPCMD_PROGRAM 0x21 /*!< ISP Command: 32-bit Program Flash */ +#define FMC_ISPCMD_WRITE_8 0x61 /*!< ISP Command: 64-bit program Flash */ +#define FMC_ISPCMD_PAGE_ERASE 0x22 /*!< ISP Command: Page Erase Flash */ +#define FMC_ISPCMD_READ_CID 0x0B /*!< ISP Command: Read Company ID */ +#define FMC_ISPCMD_READ_UID 0x04 /*!< ISP Command: Read Unique ID */ +#define FMC_ISPCMD_READ_DID 0x0C /*!< ISP Command: Read Device ID */ +#define FMC_ISPCMD_VECMAP 0x2E /*!< ISP Command: Set vector mapping */ +#define FMC_ISPCMD_CHECKSUM 0x0D /*!< ISP Command: Read Checksum */ +#define FMC_ISPCMD_CAL_CHECKSUM 0x2D /*!< ISP Command: Run Check Calculation */ +#define FMC_ISPCMD_MULTI_PROG 0x27 /*!< ISP Command: Flash Multi-Word Program */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* FTCTL constant definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define FMC_FTCTL_OPTIMIZE_DISABLE 0x00 /*!< Frequency Optimize Mode disable */ +#define FMC_FTCTL_OPTIMIZE_12MHZ 0x01 /*!< Frequency Optimize Mode <= 12Mhz */ +#define FMC_FTCTL_OPTIMIZE_36MHZ 0x02 /*!< Frequency Optimize Mode <= 36Mhz */ +#define FMC_FTCTL_OPTIMIZE_60MHZ 0x04 /*!< Frequency Optimize Mode <= 60Mhz */ +#define FMC_FTCTL_OPTIMIZE_72MHZ 0x05 /*!< Frequency Optimize Mode <= 72Mhz */ + +/*@}*/ /* end of group FMC_EXPORTED_CONSTANTS */ + +/** @addtogroup FMC_EXPORTED_FUNCTIONS FMC Exported Functions + @{ +*/ + +/*---------------------------------------------------------------------------------------------------------*/ +/* FMC Macro Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +/** + * @brief Enable ISP Function + * + * @param None + * + * @return None + * + * @details This function will set ISPEN bit of ISPCTL control register to enable ISP function. + * + */ +#define FMC_ENABLE_ISP() (FMC->ISPCTL |= FMC_ISPCTL_ISPEN_Msk) /*!< Enable ISP Function */ + +/** + * @brief Disable ISP Function + * + * @param None + * + * @return None + * + * @details This function will clear ISPEN bit of ISPCTL control register to disable ISP function. + * + */ +#define FMC_DISABLE_ISP() (FMC->ISPCTL &= ~FMC_ISPCTL_ISPEN_Msk) /*!< Disable ISP Function */ + +/** + * @brief Enable LDROM Update Function + * + * @param None + * + * @return None + * + * @details This function will set LDUEN bit of ISPCTL control register to enable LDROM update function. + * User needs to set LDUEN bit before they can update LDROM. + * + */ +#define FMC_ENABLE_LD_UPDATE() (FMC->ISPCTL |= FMC_ISPCTL_LDUEN_Msk) /*!< Enable LDROM Update Function */ + +/** + * @brief Disable LDROM Update Function + * + * @param None + * + * @return None + * + * @details This function will set ISPEN bit of ISPCTL control register to disable LDROM update function. + * + */ +#define FMC_DISABLE_LD_UPDATE() (FMC->ISPCTL &= ~FMC_ISPCTL_LDUEN_Msk) /*!< Disable LDROM Update Function */ + +/** + * @brief Enable User Configuration Update Function + * + * @param None + * + * @return None + * + * @details This function will set CFGUEN bit of ISPCTL control register to enable User Configuration update function. + * User needs to set CFGUEN bit before they can update User Configuration area. + * + */ +#define FMC_ENABLE_CFG_UPDATE() (FMC->ISPCTL |= FMC_ISPCTL_CFGUEN_Msk) /*!< Enable CONFIG Update Function */ + +/** + * @brief Disable User Configuration Update Function + * + * @param None + * + * @return None + * + * @details This function will clear CFGUEN bit of ISPCTL control register to disable User Configuration update function. + * + */ +#define FMC_DISABLE_CFG_UPDATE() (FMC->ISPCTL &= ~FMC_ISPCTL_CFGUEN_Msk) /*!< Disable CONFIG Update Function */ + + +/** + * @brief Enable APROM Update Function + * + * @param None + * + * @return None + * + * @details This function will set APUEN bit of ISPCTL control register to enable APROM update function. + * User needs to set APUEN bit before they can update APROM in APROM boot mode. + * + */ +#define FMC_ENABLE_AP_UPDATE() (FMC->ISPCTL |= FMC_ISPCTL_APUEN_Msk) /*!< Enable APROM Update Function */ + +/** + * @brief Disable APROM Update Function + * + * @param None + * + * @return None + * + * @details This function will clear APUEN bit of ISPCTL control register to disable APROM update function. + * + */ +#define FMC_DISABLE_AP_UPDATE() (FMC->ISPCTL &= ~FMC_ISPCTL_APUEN_Msk) /*!< Disable APROM Update Function */ + +/** + * @brief Next Booting Selection function + * + * @param[in] x Booting from APROM(0)/LDROM(1) + * + * @return None + * + * @details This function will set MCU next booting from LDROM/APROM. + * + * @note When use this macro, the Boot Loader booting selection MBS(CONFIG0[5]) must be set. + * + */ +#define FMC_SELECT_NEXT_BOOT(x) (FMC->ISPCTL = (FMC->ISPCTL & ~FMC_ISPCTL_BS_Msk) | ((x) << FMC_ISPCTL_BS_Pos)) /*!< Select Next Booting, x = 0 or 1 */ + +/** + * @brief Get MCU Booting Status + * + * @param None + * + * @return None + * + * @details This function will get status of chip next booting from LDROM/APROM. + * + */ +#define FMC_GET_BOOT_STATUS() ((FMC->ISPCTL & FMC_ISPCTL_BS_Msk)?1:0) /*!< Get MCU Booting Status */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* inline functions */ +/*---------------------------------------------------------------------------------------------------------*/ +/** + * @brief Program 32-bit data into specified address of flash + * + * @param[in] u32Addr Flash address include APROM, LDROM, Data Flash, and CONFIG + * @param[in] u32Data 32-bit Data to program + * + * @return None + * + * @details To program word data into Flash include APROM, LDROM, Data Flash, and CONFIG. + * The corresponding functions in CONFIG are listed in FMC section of Technical Reference Manual. + * + */ +static __INLINE void FMC_Write(uint32_t u32Addr, uint32_t u32Data) +{ + FMC->ISPCMD = FMC_ISPCMD_PROGRAM; + FMC->ISPADDR = u32Addr; + FMC->ISPDAT = u32Data; + FMC->ISPTRG = 0x1; +#if ISBEN + __ISB(); +#endif + while(FMC->ISPTRG); +} + +/** + * @brief Program 64-bit data into specified address of flash + * + * @param[in] u32Addr Flash address include APROM, LDROM, Data Flash, and CONFIG + * @param[in] u32Data0 32-bit Data to program + * @param[in] u32Data1 32-bit Data to program + * + * @return None + * + * @details To program two words data into Flash include APROM, LDROM, Data Flash, and CONFIG. + * The corresponding functions in CONFIG are listed in FMC section of Technical Reference Manual. + * + */ +static __INLINE void FMC_Write8(uint32_t u32Addr, uint32_t u32Data0, uint32_t u32Data1) +{ + FMC->ISPCMD = FMC_ISPCMD_WRITE_8; + FMC->ISPADDR = u32Addr; + FMC->MPDAT0 = u32Data0; + FMC->MPDAT1 = u32Data1; + FMC->ISPTRG = 0x1; +#if ISBEN + __ISB(); +#endif + while(FMC->ISPTRG); +} + + +/** + * @brief Read 32-bit Data from specified address of flash + * + * @param[in] u32Addr Flash address include APROM, LDROM, Data Flash, and CONFIG + * + * @return The data of specified address + * + * @details To read word data from Flash include APROM, LDROM, Data Flash, and CONFIG. + * + */ +static __INLINE uint32_t FMC_Read(uint32_t u32Addr) +{ + FMC->ISPCMD = FMC_ISPCMD_READ; + FMC->ISPADDR = u32Addr; + FMC->ISPDAT = 0; + FMC->ISPTRG = 0x1; +#if ISBEN + __ISB(); +#endif + while(FMC->ISPTRG); + + return FMC->ISPDAT; +} + +/** + * @brief Flash page erase + * + * @param[in] u32Addr Flash address including APROM, LDROM, Data Flash, and CONFIG + * + * @details To do flash page erase. The target address could be APROM, LDROM, Data Flash, or CONFIG. + * The page size is 2048 bytes. + * + * @retval 0 Success + * @retval -1 Erase failed + * + */ +static __INLINE int32_t FMC_Erase(uint32_t u32Addr) +{ + FMC->ISPCMD = FMC_ISPCMD_PAGE_ERASE; + FMC->ISPADDR = u32Addr; + FMC->ISPTRG = 0x1; +#if ISBEN + __ISB(); +#endif + while(FMC->ISPTRG); + + /* Check ISPFF flag to know whether erase OK or fail. */ + if(FMC->ISPCTL & FMC_ISPCTL_ISPFF_Msk) + { + FMC->ISPCTL |= FMC_ISPCTL_ISPFF_Msk; + return -1; + } + return 0; +} + +/** + * @brief Read Unique ID + * + * @param[in] u8Index UID index. 0 = UID[31:0], 1 = UID[63:32], 2 = UID[95:64] + * + * @return The 32-bit unique ID data of specified UID index. + * + * @details To read out 96-bit Unique ID. + * + */ +static __INLINE uint32_t FMC_ReadUID(uint8_t u8Index) +{ + FMC->ISPCMD = FMC_ISPCMD_READ_UID; + FMC->ISPADDR = (u8Index << 2); + FMC->ISPDAT = 0; + FMC->ISPTRG = 0x1; +#if ISBEN + __ISB(); +#endif + while(FMC->ISPTRG); + + return FMC->ISPDAT; +} + +/** + * @brief Read company ID + * + * @param None + * + * @return The company ID (32-bit) + * + * @details The company ID of Nuvoton is fixed to be 0xDA + * + */ +static __INLINE uint32_t FMC_ReadCID(void) +{ + FMC->ISPCMD = FMC_ISPCMD_READ_CID; /* Set ISP Command Code */ + FMC->ISPADDR = 0x0; /* Must keep 0x0 when read CID */ + FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk; /* Trigger to start ISP procedure */ +#if ISBEN + __ISB(); +#endif /* To make sure ISP/CPU be Synchronized */ + while(FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk) ; /* Waiting for ISP Done */ + + return FMC->ISPDAT; +} + +/** + * @brief Read product ID + * + * @param None + * + * @return The product ID (32-bit) + * + * @details This function is used to read product ID. + * + */ +static __INLINE uint32_t FMC_ReadPID(void) +{ + FMC->ISPCMD = FMC_ISPCMD_READ_DID; /* Set ISP Command Code */ + FMC->ISPADDR = 0x04; /* Must keep 0x4 when read PID */ + FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk; /* Trigger to start ISP procedure */ +#if ISBEN + __ISB(); +#endif /* To make sure ISP/CPU be Synchronized */ + while(FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk); /* Waiting for ISP Done */ + + return FMC->ISPDAT; +} + +/** + * @brief To read UCID + * + * @param[in] u32Index Index of the UCID to read. u32Index must be 0, 1, 2, or 3. + * + * @return The UCID of specified index + * + * @details This function is used to read unique chip ID (UCID). + * + */ +static __INLINE uint32_t FMC_ReadUCID(uint32_t u32Index) +{ + FMC->ISPCMD = FMC_ISPCMD_READ_UID; /* Set ISP Command Code */ + FMC->ISPADDR = (0x04 * u32Index) + 0x10; /* The UCID is at offset 0x10 with word alignment. */ + FMC->ISPTRG = FMC_ISPTRG_ISPGO_Msk; /* Trigger to start ISP procedure */ +#if ISBEN + __ISB(); +#endif /* To make sure ISP/CPU be Synchronized */ + while(FMC->ISPTRG & FMC_ISPTRG_ISPGO_Msk); /* Waiting for ISP Done */ + + return FMC->ISPDAT; +} + +/** + * @brief Set vector mapping address + * + * @param[in] u32PageAddr The page address to remap to address 0x0. The address must be page alignment. + * + * @return To set VECMAP to remap specified page address to 0x0. + * + * @details This function is used to set VECMAP to map specified page to vector page (0x0). + * + * @note + * VECMAP only valid when new IAP function is enabled. (CBS = 10'b or 00'b) + * + */ +static __INLINE void FMC_SetVectorPageAddr(uint32_t u32PageAddr) +{ + FMC->ISPCMD = FMC_ISPCMD_VECMAP; /* Set ISP Command Code */ + FMC->ISPADDR = u32PageAddr; /* The address of specified page which will be map to address 0x0. It must be page alignment. */ + FMC->ISPTRG = 0x1; /* Trigger to start ISP procedure */ +#if ISBEN + __ISB(); +#endif /* To make sure ISP/CPU be Synchronized */ + while(FMC->ISPTRG); /* Waiting for ISP Done */ +} + +/** + * @brief Get current vector mapping address. + * + * @param None + * + * @return The current vector mapping address. + * + * @details To get VECMAP value which is the page address for remapping to vector page (0x0). + * + * @note + * VECMAP only valid when new IAP function is enabled. (CBS = 10'b or 00'b) + * + */ +static __INLINE uint32_t FMC_GetVECMAP(void) +{ + return (FMC->ISPSTS & FMC_ISPSTS_VECMAP_Msk); +} + +/** + * @brief Get Flash Checksum + * + * @param[in] u32Addr Specific flash start address + * @param[in] i32Size Specific a size of Flash area + * + * @return A checksum value of a flash block. + * + * @details To get VECMAP value which is the page address for remapping to vector page (0x0). + * + */ +static __INLINE uint32_t FMC_GetCheckSum(uint32_t u32Addr, int32_t i32Size) +{ + FMC->ISPCMD = FMC_ISPCMD_CAL_CHECKSUM; + FMC->ISPADDR = u32Addr; + FMC->ISPDAT = i32Size; + FMC->ISPTRG = 0x1; +#if ISBEN + __ISB(); +#endif + while(FMC->ISPTRG); + + FMC->ISPCMD = FMC_ISPCMD_CHECKSUM; + FMC->ISPTRG = 0x1; + while(FMC->ISPTRG); + + return FMC->ISPDAT; +} + +/** + * @brief Program Multi-Word data into specified address of flash + * + * @param[in] u32Addr Flash address include APROM, LDROM, Data Flash, and CONFIG + * @param[in] pu32Buf A data pointer is point to a data buffer start address; + * + * @return None + * + * @details To program multi-words data into Flash include APROM, LDROM, Data Flash, and CONFIG. + * The corresponding functions in CONFIG are listed in FMC section of Technical Reference Manual. + * + */ +static __INLINE void FMC_Write256(uint32_t u32Addr, uint32_t *pu32Buf) +{ + int32_t i, idx; + volatile uint32_t *pu32IspData; + //int32_t i32Err; + + //i32Err = 0; + idx = 0; + FMC->ISPCMD = FMC_ISPCMD_MULTI_PROG; + FMC->ISPADDR = u32Addr; + +retrigger: + + //if(i32Err) + // printf("idx=%d ISPADDR = 0x%08x\n",idx, FMC->ISPADDR); + + FMC->MPDAT0 = pu32Buf[idx + 0]; + FMC->MPDAT1 = pu32Buf[idx + 1]; + FMC->MPDAT2 = pu32Buf[idx + 2]; + FMC->MPDAT3 = pu32Buf[idx + 3]; + + + + FMC->ISPTRG = 0x1; + + pu32IspData = &FMC->MPDAT0; + idx += 4; + + for(i = idx; i < 256 / 4; i += 4) // Max data length is 256 bytes (256/4 words) + { + + __set_PRIMASK(1); // Mask interrupt to avoid status check coherence error + do + { + if((FMC->MPSTS & FMC_MPSTS_MPBUSY_Msk) == 0) + { + __set_PRIMASK(0); + //printf("%d %x\n", i, FMC->MPADDR); + FMC->ISPADDR = FMC->MPADDR & (~0xful); + idx = (FMC->ISPADDR - u32Addr) / 4; + //i32Err = -1; + goto retrigger; + } + } + while(FMC->MPSTS & (3 << FMC_MPSTS_D0_Pos)); + + // Update new data for D0 + pu32IspData[0] = pu32Buf[i ]; + pu32IspData[1] = pu32Buf[i + 1]; + + do + { + if((FMC->MPSTS & FMC_MPSTS_MPBUSY_Msk) == 0) + { + __set_PRIMASK(0); + //printf("%d %x\n", i, FMC->MPADDR); + FMC->ISPADDR = FMC->MPADDR & (~0xful); + idx = (FMC->ISPADDR - u32Addr) / 4; + //i32Err = -1; + goto retrigger; + } + } + while(FMC->MPSTS & (3 << FMC_MPSTS_D2_Pos)); + + // Update new data for D2 + pu32IspData[2] = pu32Buf[i + 2]; + pu32IspData[3] = pu32Buf[i + 3]; + __set_PRIMASK(0); + } + + while(FMC->ISPSTS & FMC_ISPSTS_ISPBUSY_Msk); +} + +void FMC_Open(void); +void FMC_Close(void); +void FMC_EnableAPUpdate(void); +void FMC_DisableAPUpdate(void); +void FMC_EnableConfigUpdate(void); +void FMC_DisableConfigUpdate(void); +void FMC_EnableLDUpdate(void); +void FMC_DisableLDUpdate(void); +int32_t FMC_ReadConfig(uint32_t *u32Config, uint32_t u32Count); +int32_t FMC_WriteConfig(uint32_t *u32Config, uint32_t u32Count); +void FMC_SetBootSource(int32_t i32BootSrc); +int32_t FMC_GetBootSource(void); +uint32_t FMC_ReadDataFlashBaseAddr(void); +void FMC_EnableFreqOptimizeMode(uint32_t u32Mode); +void FMC_DisableFreqOptimizeMode(void); +/*@}*/ /* end of group FMC_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group FMC_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +#ifdef __cplusplus +} +#endif + + +#endif + diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_gpio.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_gpio.c new file mode 100644 index 00000000000..7300e4eb9fc --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_gpio.c @@ -0,0 +1,102 @@ +/**************************************************************************//** + * @file gpio.c + * @version V3.00 + * $Revision: 6 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series GPIO driver source file + * + * @note + * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ + +#include "M451Series.h" + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup GPIO_Driver GPIO Driver + @{ +*/ + +/** @addtogroup GPIO_EXPORTED_FUNCTIONS GPIO Exported Functions + @{ +*/ + +/** + * @brief Set GPIO operation mode + * + * @param[in] port GPIO port. It could be PA, PB, PC, PD, PE or PF. + * @param[in] u32PinMask The single or multiple pins of specified GPIO port. + * It could be BIT0 ~ BIT15 for PA, PB, PC and PD GPIO port. + * It could be BIT0 ~ BIT14 for PE GPIO port. + * It could be BIT0 ~ BIT7 for PF GPIO port. + * @param[in] u32Mode Operation mode. It could be \n + * GPIO_MODE_INPUT, GPIO_MODE_OUTPUT, GPIO_MODE_OPEN_DRAIN, GPIO_MODE_QUASI. + * + * @return None + * + * @details This function is used to set specified GPIO operation mode. + */ +void GPIO_SetMode(GPIO_T *port, uint32_t u32PinMask, uint32_t u32Mode) +{ + uint32_t i; + + for(i = 0; i < GPIO_PIN_MAX; i++) + { + if(u32PinMask & (1 << i)) + { + port->MODE = (port->MODE & ~(0x3 << (i << 1))) | (u32Mode << (i << 1)); + } + } +} + +/** + * @brief Enable GPIO interrupt + * + * @param[in] port GPIO port. It could be PA, PB, PC, PD, PE or PF. + * @param[in] u32Pin The pin of specified GPIO port. + * It could be 0 ~ 15 for PA, PB, PC and PD GPIO port. + * It could be 0 ~ 14 for PE GPIO port. + * It could be 0 ~ 7 for PF GPIO port. + * @param[in] u32IntAttribs The interrupt attribute of specified GPIO pin. It could be \n + * GPIO_INT_RISING, GPIO_INT_FALLING, GPIO_INT_BOTH_EDGE, GPIO_INT_HIGH, GPIO_INT_LOW. + * + * @return None + * + * @details This function is used to enable specified GPIO pin interrupt. + */ +void GPIO_EnableInt(GPIO_T *port, uint32_t u32Pin, uint32_t u32IntAttribs) +{ + port->INTTYPE |= (((u32IntAttribs >> 24) & 0xFFUL) << u32Pin); + port->INTEN |= ((u32IntAttribs & 0xFFFFFFUL) << u32Pin); +} + + +/** + * @brief Disable GPIO interrupt + * + * @param[in] port GPIO port. It could be PA, PB, PC, PD, PE or PF. + * @param[in] u32Pin The pin of specified GPIO port. + * It could be 0 ~ 15 for PA, PB, PC and PD GPIO port. + * It could be 0 ~ 14 for PE GPIO port. + * It could be 0 ~ 7 for PF GPIO port. + * + * @return None + * + * @details This function is used to enable specified GPIO pin interrupt. + */ +void GPIO_DisableInt(GPIO_T *port, uint32_t u32Pin) +{ + port->INTTYPE &= ~(1UL << u32Pin); + port->INTEN &= ~((0x00010001UL) << u32Pin); +} + + +/*@}*/ /* end of group GPIO_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group GPIO_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +/*** (C) COPYRIGHT 2014~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_gpio.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_gpio.h new file mode 100644 index 00000000000..37ca98f2754 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_gpio.h @@ -0,0 +1,439 @@ +/**************************************************************************//** + * @file GPIO.h + * @version V3.00 + * $Revision: 21 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series GPIO driver header file + * + * @note + * Copyright (C) 2011~2015 Nuvoton Technology Corp. All rights reserved. + * + ******************************************************************************/ +#ifndef __GPIO_H__ +#define __GPIO_H__ + + +#ifdef __cplusplus +extern "C" +{ +#endif + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup GPIO_Driver GPIO Driver + @{ +*/ + +/** @addtogroup GPIO_EXPORTED_CONSTANTS GPIO Exported Constants + @{ +*/ + + +#define GPIO_PIN_MAX 16 /*!< Specify Maximum Pins of Each GPIO Port */ + + +/*---------------------------------------------------------------------------------------------------------*/ +/* GPIO_MODE Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define GPIO_MODE_INPUT 0x0UL /*!< Input Mode */ +#define GPIO_MODE_OUTPUT 0x1UL /*!< Output Mode */ +#define GPIO_MODE_OPEN_DRAIN 0x2UL /*!< Open-Drain Mode */ +#define GPIO_MODE_QUASI 0x3UL /*!< Quasi-bidirectional Mode */ + + +/*---------------------------------------------------------------------------------------------------------*/ +/* GPIO Interrupt Type Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define GPIO_INT_RISING 0x00010000UL /*!< Interrupt enable by Input Rising Edge */ +#define GPIO_INT_FALLING 0x00000001UL /*!< Interrupt enable by Input Falling Edge */ +#define GPIO_INT_BOTH_EDGE 0x00010001UL /*!< Interrupt enable by both Rising Edge and Falling Edge */ +#define GPIO_INT_HIGH 0x01010000UL /*!< Interrupt enable by Level-High */ +#define GPIO_INT_LOW 0x01000001UL /*!< Interrupt enable by Level-Level */ + + +/*---------------------------------------------------------------------------------------------------------*/ +/* GPIO_INTTYPE Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define GPIO_INTTYPE_EDGE 0UL /*!< GPIO_INTTYPE Setting for Edge Trigger Mode */ +#define GPIO_INTTYPE_LEVEL 1UL /*!< GPIO_INTTYPE Setting for Edge Level Mode */ + + +/*---------------------------------------------------------------------------------------------------------*/ +/* GPIO_DBCTL Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define GPIO_DBCTL_ICLK_ON 0x00000020UL /*!< GPIO_DBCTL setting for all IO pins edge detection circuit is always active after reset */ +#define GPIO_DBCTL_ICLK_OFF 0x00000000UL /*!< GPIO_DBCTL setting for edge detection circuit is active only if IO pin corresponding GPIOx_IEN bit is set to 1 */ + +#define GPIO_DBCTL_DBCLKSRC_LIRC 0x00000010UL /*!< GPIO_DBCTL setting for de-bounce counter clock source is the internal 10 kHz */ +#define GPIO_DBCTL_DBCLKSRC_HCLK 0x00000000UL /*!< GPIO_DBCTL setting for de-bounce counter clock source is the HCLK */ + +#define GPIO_DBCTL_DBCLKSEL_1 0x00000000UL /*!< GPIO_DBCTL setting for sampling cycle = 1 clocks */ +#define GPIO_DBCTL_DBCLKSEL_2 0x00000001UL /*!< GPIO_DBCTL setting for sampling cycle = 2 clocks */ +#define GPIO_DBCTL_DBCLKSEL_4 0x00000002UL /*!< GPIO_DBCTL setting for sampling cycle = 4 clocks */ +#define GPIO_DBCTL_DBCLKSEL_8 0x00000003UL /*!< GPIO_DBCTL setting for sampling cycle = 8 clocks */ +#define GPIO_DBCTL_DBCLKSEL_16 0x00000004UL /*!< GPIO_DBCTL setting for sampling cycle = 16 clocks */ +#define GPIO_DBCTL_DBCLKSEL_32 0x00000005UL /*!< GPIO_DBCTL setting for sampling cycle = 32 clocks */ +#define GPIO_DBCTL_DBCLKSEL_64 0x00000006UL /*!< GPIO_DBCTL setting for sampling cycle = 64 clocks */ +#define GPIO_DBCTL_DBCLKSEL_128 0x00000007UL /*!< GPIO_DBCTL setting for sampling cycle = 128 clocks */ +#define GPIO_DBCTL_DBCLKSEL_256 0x00000008UL /*!< GPIO_DBCTL setting for sampling cycle = 256 clocks */ +#define GPIO_DBCTL_DBCLKSEL_512 0x00000009UL /*!< GPIO_DBCTL setting for sampling cycle = 512 clocks */ +#define GPIO_DBCTL_DBCLKSEL_1024 0x0000000AUL /*!< GPIO_DBCTL setting for sampling cycle = 1024 clocks */ +#define GPIO_DBCTL_DBCLKSEL_2048 0x0000000BUL /*!< GPIO_DBCTL setting for sampling cycle = 2048 clocks */ +#define GPIO_DBCTL_DBCLKSEL_4096 0x0000000CUL /*!< GPIO_DBCTL setting for sampling cycle = 4096 clocks */ +#define GPIO_DBCTL_DBCLKSEL_8192 0x0000000DUL /*!< GPIO_DBCTL setting for sampling cycle = 8192 clocks */ +#define GPIO_DBCTL_DBCLKSEL_16384 0x0000000EUL /*!< GPIO_DBCTL setting for sampling cycle = 16384 clocks */ +#define GPIO_DBCTL_DBCLKSEL_32768 0x0000000FUL /*!< GPIO_DBCTL setting for sampling cycle = 32768 clocks */ + + +/* Define GPIO Pin Data Input/Output. It could be used to control each I/O pin by pin address mapping. + Example 1: + + PA0 = 1; + + It is used to set GPIO PA.0 to high; + + Example 2: + + if (PA0) + PA0 = 0; + + If GPIO PA.0 pin status is high, then set GPIO PA.0 data output to low. + */ +#define GPIO_PIN_DATA(port, pin) (*((volatile uint32_t *)((GPIO_PIN_DATA_BASE+(0x40*(port))) + ((pin)<<2)))) +#define PA0 GPIO_PIN_DATA(0, 0 ) /*!< Specify PA.0 Pin Data Input/Output */ +#define PA1 GPIO_PIN_DATA(0, 1 ) /*!< Specify PA.1 Pin Data Input/Output */ +#define PA2 GPIO_PIN_DATA(0, 2 ) /*!< Specify PA.2 Pin Data Input/Output */ +#define PA3 GPIO_PIN_DATA(0, 3 ) /*!< Specify PA.3 Pin Data Input/Output */ +#define PA4 GPIO_PIN_DATA(0, 4 ) /*!< Specify PA.4 Pin Data Input/Output */ +#define PA5 GPIO_PIN_DATA(0, 5 ) /*!< Specify PA.5 Pin Data Input/Output */ +#define PA6 GPIO_PIN_DATA(0, 6 ) /*!< Specify PA.6 Pin Data Input/Output */ +#define PA7 GPIO_PIN_DATA(0, 7 ) /*!< Specify PA.7 Pin Data Input/Output */ +#define PA8 GPIO_PIN_DATA(0, 8 ) /*!< Specify PA.8 Pin Data Input/Output */ +#define PA9 GPIO_PIN_DATA(0, 9 ) /*!< Specify PA.9 Pin Data Input/Output */ +#define PA10 GPIO_PIN_DATA(0, 10) /*!< Specify PA.10 Pin Data Input/Output */ +#define PA11 GPIO_PIN_DATA(0, 11) /*!< Specify PA.11 Pin Data Input/Output */ +#define PA12 GPIO_PIN_DATA(0, 12) /*!< Specify PA.12 Pin Data Input/Output */ +#define PA13 GPIO_PIN_DATA(0, 13) /*!< Specify PA.13 Pin Data Input/Output */ +#define PA14 GPIO_PIN_DATA(0, 14) /*!< Specify PA.14 Pin Data Input/Output */ +#define PA15 GPIO_PIN_DATA(0, 15) /*!< Specify PA.15 Pin Data Input/Output */ +#define PB0 GPIO_PIN_DATA(1, 0 ) /*!< Specify PB.0 Pin Data Input/Output */ +#define PB1 GPIO_PIN_DATA(1, 1 ) /*!< Specify PB.1 Pin Data Input/Output */ +#define PB2 GPIO_PIN_DATA(1, 2 ) /*!< Specify PB.2 Pin Data Input/Output */ +#define PB3 GPIO_PIN_DATA(1, 3 ) /*!< Specify PB.3 Pin Data Input/Output */ +#define PB4 GPIO_PIN_DATA(1, 4 ) /*!< Specify PB.4 Pin Data Input/Output */ +#define PB5 GPIO_PIN_DATA(1, 5 ) /*!< Specify PB.5 Pin Data Input/Output */ +#define PB6 GPIO_PIN_DATA(1, 6 ) /*!< Specify PB.6 Pin Data Input/Output */ +#define PB7 GPIO_PIN_DATA(1, 7 ) /*!< Specify PB.7 Pin Data Input/Output */ +#define PB8 GPIO_PIN_DATA(1, 8 ) /*!< Specify PB.8 Pin Data Input/Output */ +#define PB9 GPIO_PIN_DATA(1, 9 ) /*!< Specify PB.9 Pin Data Input/Output */ +#define PB10 GPIO_PIN_DATA(1, 10) /*!< Specify PB.10 Pin Data Input/Output */ +#define PB11 GPIO_PIN_DATA(1, 11) /*!< Specify PB.11 Pin Data Input/Output */ +#define PB12 GPIO_PIN_DATA(1, 12) /*!< Specify PB.12 Pin Data Input/Output */ +#define PB13 GPIO_PIN_DATA(1, 13) /*!< Specify PB.13 Pin Data Input/Output */ +#define PB14 GPIO_PIN_DATA(1, 14) /*!< Specify PB.14 Pin Data Input/Output */ +#define PB15 GPIO_PIN_DATA(1, 15) /*!< Specify PB.15 Pin Data Input/Output */ +#define PC0 GPIO_PIN_DATA(2, 0 ) /*!< Specify PC.0 Pin Data Input/Output */ +#define PC1 GPIO_PIN_DATA(2, 1 ) /*!< Specify PC.1 Pin Data Input/Output */ +#define PC2 GPIO_PIN_DATA(2, 2 ) /*!< Specify PC.2 Pin Data Input/Output */ +#define PC3 GPIO_PIN_DATA(2, 3 ) /*!< Specify PC.3 Pin Data Input/Output */ +#define PC4 GPIO_PIN_DATA(2, 4 ) /*!< Specify PC.4 Pin Data Input/Output */ +#define PC5 GPIO_PIN_DATA(2, 5 ) /*!< Specify PC.5 Pin Data Input/Output */ +#define PC6 GPIO_PIN_DATA(2, 6 ) /*!< Specify PC.6 Pin Data Input/Output */ +#define PC7 GPIO_PIN_DATA(2, 7 ) /*!< Specify PC.7 Pin Data Input/Output */ +#define PC8 GPIO_PIN_DATA(2, 8 ) /*!< Specify PC.8 Pin Data Input/Output */ +#define PC9 GPIO_PIN_DATA(2, 9 ) /*!< Specify PC.9 Pin Data Input/Output */ +#define PC10 GPIO_PIN_DATA(2, 10) /*!< Specify PC.10 Pin Data Input/Output */ +#define PC11 GPIO_PIN_DATA(2, 11) /*!< Specify PC.11 Pin Data Input/Output */ +#define PC12 GPIO_PIN_DATA(2, 12) /*!< Specify PC.12 Pin Data Input/Output */ +#define PC13 GPIO_PIN_DATA(2, 13) /*!< Specify PC.13 Pin Data Input/Output */ +#define PC14 GPIO_PIN_DATA(2, 14) /*!< Specify PC.14 Pin Data Input/Output */ +#define PC15 GPIO_PIN_DATA(2, 15) /*!< Specify PC.15 Pin Data Input/Output */ +#define PD0 GPIO_PIN_DATA(3, 0 ) /*!< Specify PD.0 Pin Data Input/Output */ +#define PD1 GPIO_PIN_DATA(3, 1 ) /*!< Specify PD.1 Pin Data Input/Output */ +#define PD2 GPIO_PIN_DATA(3, 2 ) /*!< Specify PD.2 Pin Data Input/Output */ +#define PD3 GPIO_PIN_DATA(3, 3 ) /*!< Specify PD.3 Pin Data Input/Output */ +#define PD4 GPIO_PIN_DATA(3, 4 ) /*!< Specify PD.4 Pin Data Input/Output */ +#define PD5 GPIO_PIN_DATA(3, 5 ) /*!< Specify PD.5 Pin Data Input/Output */ +#define PD6 GPIO_PIN_DATA(3, 6 ) /*!< Specify PD.6 Pin Data Input/Output */ +#define PD7 GPIO_PIN_DATA(3, 7 ) /*!< Specify PD.7 Pin Data Input/Output */ +#define PD8 GPIO_PIN_DATA(3, 8 ) /*!< Specify PD.8 Pin Data Input/Output */ +#define PD9 GPIO_PIN_DATA(3, 9 ) /*!< Specify PD.9 Pin Data Input/Output */ +#define PD10 GPIO_PIN_DATA(3, 10) /*!< Specify PD.10 Pin Data Input/Output */ +#define PD11 GPIO_PIN_DATA(3, 11) /*!< Specify PD.11 Pin Data Input/Output */ +#define PD12 GPIO_PIN_DATA(3, 12) /*!< Specify PD.12 Pin Data Input/Output */ +#define PD13 GPIO_PIN_DATA(3, 13) /*!< Specify PD.13 Pin Data Input/Output */ +#define PD14 GPIO_PIN_DATA(3, 14) /*!< Specify PD.14 Pin Data Input/Output */ +#define PD15 GPIO_PIN_DATA(3, 15) /*!< Specify PD.15 Pin Data Input/Output */ +#define PE0 GPIO_PIN_DATA(4, 0 ) /*!< Specify PE.0 Pin Data Input/Output */ +#define PE1 GPIO_PIN_DATA(4, 1 ) /*!< Specify PE.1 Pin Data Input/Output */ +#define PE2 GPIO_PIN_DATA(4, 2 ) /*!< Specify PE.2 Pin Data Input/Output */ +#define PE3 GPIO_PIN_DATA(4, 3 ) /*!< Specify PE.3 Pin Data Input/Output */ +#define PE4 GPIO_PIN_DATA(4, 4 ) /*!< Specify PE.4 Pin Data Input/Output */ +#define PE5 GPIO_PIN_DATA(4, 5 ) /*!< Specify PE.5 Pin Data Input/Output */ +#define PE6 GPIO_PIN_DATA(4, 6 ) /*!< Specify PE.6 Pin Data Input/Output */ +#define PE7 GPIO_PIN_DATA(4, 7 ) /*!< Specify PE.7 Pin Data Input/Output */ +#define PE8 GPIO_PIN_DATA(4, 8 ) /*!< Specify PE.8 Pin Data Input/Output */ +#define PE9 GPIO_PIN_DATA(4, 9 ) /*!< Specify PE.9 Pin Data Input/Output */ +#define PE10 GPIO_PIN_DATA(4, 10) /*!< Specify PE.10 Pin Data Input/Output */ +#define PE11 GPIO_PIN_DATA(4, 11) /*!< Specify PE.11 Pin Data Input/Output */ +#define PE12 GPIO_PIN_DATA(4, 12) /*!< Specify PE.12 Pin Data Input/Output */ +#define PE13 GPIO_PIN_DATA(4, 13) /*!< Specify PE.13 Pin Data Input/Output */ +#define PE14 GPIO_PIN_DATA(4, 14) /*!< Specify PE.14 Pin Data Input/Output */ +#define PF0 GPIO_PIN_DATA(5, 0 ) /*!< Specify PF.0 Pin Data Input/Output */ +#define PF1 GPIO_PIN_DATA(5, 1 ) /*!< Specify PF.1 Pin Data Input/Output */ +#define PF2 GPIO_PIN_DATA(5, 2 ) /*!< Specify PF.2 Pin Data Input/Output */ +#define PF3 GPIO_PIN_DATA(5, 3 ) /*!< Specify PF.3 Pin Data Input/Output */ +#define PF4 GPIO_PIN_DATA(5, 4 ) /*!< Specify PF.4 Pin Data Input/Output */ +#define PF5 GPIO_PIN_DATA(5, 5 ) /*!< Specify PF.5 Pin Data Input/Output */ +#define PF6 GPIO_PIN_DATA(5, 6 ) /*!< Specify PF.6 Pin Data Input/Output */ +#define PF7 GPIO_PIN_DATA(5, 7 ) /*!< Specify PF.7 Pin Data Input/Output */ + + +/*@}*/ /* end of group GPIO_EXPORTED_CONSTANTS */ + + +/** @addtogroup GPIO_EXPORTED_FUNCTIONS GPIO Exported Functions + @{ +*/ + +/** + * @brief Clear GPIO Pin Interrupt Flag + * + * @param[in] port GPIO port. It could be PA, PB, PC, PD, PE or PF. + * @param[in] u32PinMask The single or multiple pins of specified GPIO port. + * It could be BIT0 ~ BIT15 for PA, PB, PC and PD. + * It could be BIT0 ~ BIT14 for PE. + * It could be BIT0 ~ BIT7 for PF. + * + * @return None + * + * @details Clear the interrupt status of specified GPIO pin. + */ +#define GPIO_CLR_INT_FLAG(port, u32PinMask) ((port)->INTSRC = (u32PinMask)) + +/** + * @brief Disable Pin De-bounce Function + * + * @param[in] port GPIO port. It could be PA, PB, PC, PD, PE or PF. + * @param[in] u32PinMask The single or multiple pins of specified GPIO port. + * It could be BIT0 ~ BIT15 for PA, PB, PC and PD. + * It could be BIT0 ~ BIT14 for PE. + * It could be BIT0 ~ BIT7 for PF. + * + * @return None + * + * @details Disable the interrupt de-bounce function of specified GPIO pin. + */ +#define GPIO_DISABLE_DEBOUNCE(port, u32PinMask) ((port)->DBEN &= ~(u32PinMask)) + +/** + * @brief Enable Pin De-bounce Function + * + * @param[in] port GPIO port. It could be PA, PB, PC, PD, PE or PF. + * @param[in] u32PinMask The single or multiple pins of specified GPIO port. + * It could be BIT0 ~ BIT15 for PA, PB, PC and PD. + * It could be BIT0 ~ BIT14 for PE. + * It could be BIT0 ~ BIT7 for PF. + * @return None + * + * @details Enable the interrupt de-bounce function of specified GPIO pin. + */ +#define GPIO_ENABLE_DEBOUNCE(port, u32PinMask) ((port)->DBEN |= (u32PinMask)) + +/** + * @brief Disable I/O Digital Input Path + * + * @param[in] port GPIO port. It could be PA, PB, PC, PD, PE or PF. + * @param[in] u32PinMask The single or multiple pins of specified GPIO port. + * It could be BIT0 ~ BIT15 for PA, PB, PC and PD. + * It could be BIT0 ~ BIT14 for PE. + * It could be BIT0 ~ BIT7 for PF. + * + * @return None + * + * @details Disable I/O digital input path of specified GPIO pin. + */ +#define GPIO_DISABLE_DIGITAL_PATH(port, u32PinMask) ((port)->DINOFF |= ((u32PinMask)<<16)) + +/** + * @brief Enable I/O Digital Input Path + * + * @param[in] port GPIO port. It could be PA, PB, PC, PD, PE or PF. + * @param[in] u32PinMask The single or multiple pins of specified GPIO port. + * It could be BIT0 ~ BIT15 for PA, PB, PC and PD. + * It could be BIT0 ~ BIT14 for PE. + * It could be BIT0 ~ BIT7 for PF. + * + * @return None + * + * @details Enable I/O digital input path of specified GPIO pin. + */ +#define GPIO_ENABLE_DIGITAL_PATH(port, u32PinMask) ((port)->DINOFF &= ~((u32PinMask)<<16)) + +/** + * @brief Disable I/O DOUT mask + * + * @param[in] port GPIO port. It could be PA, PB, PC, PD, PE or PF. + * @param[in] u32PinMask The single or multiple pins of specified GPIO port. + * It could be BIT0 ~ BIT15 for PA, PB, PC and PD. + * It could be BIT0 ~ BIT14 for PE. + * It could be BIT0 ~ BIT7 for PF. + * + * @return None + * + * @details Disable I/O DOUT mask of specified GPIO pin. + */ +#define GPIO_DISABLE_DOUT_MASK(port, u32PinMask) ((port)->DATMSK &= ~(u32PinMask)) + +/** + * @brief Enable I/O DOUT mask + * + * @param[in] port GPIO port. It could be PA, PB, PC, PD, PE or PF. + * @param[in] u32PinMask The single or multiple pins of specified GPIO port. + * It could be BIT0 ~ BIT15 for PA, PB, PC and PD. + * It could be BIT0 ~ BIT14 for PE. + * It could be BIT0 ~ BIT7 for PF. + * + * @return None + * + * @details Enable I/O DOUT mask of specified GPIO pin. + */ +#define GPIO_ENABLE_DOUT_MASK(port, u32PinMask) ((port)->DATMSK |= (u32PinMask)) + +/** + * @brief Get GPIO Pin Interrupt Flag + * + * @param[in] port GPIO port. It could be PA, PB, PC, PD, PE or PF. + * @param[in] u32PinMask The single or multiple pins of specified GPIO port. + * It could be BIT0 ~ BIT15 for PA, PB, PC and PD. + * It could be BIT0 ~ BIT14 for PE. + * It could be BIT0 ~ BIT7 for PF. + * + * @retval 0 No interrupt at specified GPIO pin + * @retval 1 The specified GPIO pin generate an interrupt + * + * @details Get the interrupt status of specified GPIO pin. + */ +#define GPIO_GET_INT_FLAG(port, u32PinMask) ((port)->INTSRC & (u32PinMask)) + +/** + * @brief Set De-bounce Sampling Cycle Time + * + * @param[in] u32ClkSrc The de-bounce counter clock source. It could be GPIO_DBCTL_DBCLKSRC_HCLK or GPIO_DBCTL_DBCLKSRC_LIRC. + * @param[in] u32ClkSel The de-bounce sampling cycle selection. It could be + * - \ref GPIO_DBCTL_DBCLKSEL_1 + * - \ref GPIO_DBCTL_DBCLKSEL_2 + * - \ref GPIO_DBCTL_DBCLKSEL_4 + * - \ref GPIO_DBCTL_DBCLKSEL_8 + * - \ref GPIO_DBCTL_DBCLKSEL_16 + * - \ref GPIO_DBCTL_DBCLKSEL_32 + * - \ref GPIO_DBCTL_DBCLKSEL_64 + * - \ref GPIO_DBCTL_DBCLKSEL_128 + * - \ref GPIO_DBCTL_DBCLKSEL_256 + * - \ref GPIO_DBCTL_DBCLKSEL_512 + * - \ref GPIO_DBCTL_DBCLKSEL_1024 + * - \ref GPIO_DBCTL_DBCLKSEL_2048 + * - \ref GPIO_DBCTL_DBCLKSEL_4096 + * - \ref GPIO_DBCTL_DBCLKSEL_8192 + * - \ref GPIO_DBCTL_DBCLKSEL_16384 + * - \ref GPIO_DBCTL_DBCLKSEL_32768 + * + * @return None + * + * @details Set the interrupt de-bounce sampling cycle time based on the debounce counter clock source. \n + * Example: _GPIO_SET_DEBOUNCE_TIME(GPIO_DBCTL_DBCLKSRC_LIRC, GPIO_DBCTL_DBCLKSEL_4). \n + * It's meaning the De-debounce counter clock source is internal 10 KHz and sampling cycle selection is 4. \n + * Then the target de-bounce sampling cycle time is (4)*(1/(10*1000)) s = 4*0.0001 s = 400 us, + * and system will sampling interrupt input once per 00 us. + */ +#define GPIO_SET_DEBOUNCE_TIME(u32ClkSrc, u32ClkSel) (GPIO->DBCTL = (GPIO_DBCTL_ICLKON_Msk | (u32ClkSrc) | (u32ClkSel))) + +/** + * @brief Get GPIO Port IN Data + * + * @param[in] port GPIO port. It could be PA, PB, PC, PD, PE or PF. + * + * @return The specified port data + * + * @details Get the PIN register of specified GPIO port. + */ +#define GPIO_GET_IN_DATA(port) ((port)->PIN) + +/** + * @brief Set GPIO Port OUT Data + * + * @param[in] port GPIO port. It could be PA, PB, PC, PD, PE or PF. + * @param[in] u32Data GPIO port data. + * + * @return None + * + * @details Set the Data into specified GPIO port. + */ +#define GPIO_SET_OUT_DATA(port, u32Data) ((port)->DOUT = (u32Data)) + +/** + * @brief Toggle Specified GPIO pin + * + * @param[in] u32Pin Pxy + * + * @return None + * + * @details Toggle the specified GPIO pint. + */ +#define GPIO_TOGGLE(u32Pin) ((u32Pin) ^= 1) + + +/** +* @brief Enable External GPIO interrupt +* +* @param[in] port GPIO port. It could be PA, PB, PC, PD, PE or PF. +* @param[in] u32Pin The pin of specified GPIO port. +* It could be 0 ~ 15 for PA, PB, PC and PD GPIO port. +* It could be 0 ~ 14 for PE GPIO port. +* It could be 0 ~ 7 for PF GPIO port. +* @param[in] u32IntAttribs The interrupt attribute of specified GPIO pin. It could be \n +* GPIO_INT_RISING, GPIO_INT_FALLING, GPIO_INT_BOTH_EDGE, GPIO_INT_HIGH, GPIO_INT_LOW. +* +* @return None +* +* @details This function is used to enable specified GPIO pin interrupt. +*/ +#define GPIO_EnableEINT GPIO_EnableInt + +/** +* @brief Disable External GPIO interrupt +* +* @param[in] port GPIO port. It could be PA, PB, PC, PD, PE or PF. +* @param[in] u32Pin The pin of specified GPIO port. +* It could be 0 ~ 15 for PA, PB, PC and PD GPIO port. +* It could be 0 ~ 14 for PE GPIO port. +* It could be 0 ~ 7 for PF GPIO port. +* +* @return None +* +* @details This function is used to enable specified GPIO pin interrupt. +*/ +#define GPIO_DisableEINT GPIO_DisableInt + + +void GPIO_SetMode(GPIO_T *port, uint32_t u32PinMask, uint32_t u32Mode); +void GPIO_EnableInt(GPIO_T *port, uint32_t u32Pin, uint32_t u32IntAttribs); +void GPIO_DisableInt(GPIO_T *port, uint32_t u32Pin); + + +/*@}*/ /* end of group GPIO_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group GPIO_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + + +#ifdef __cplusplus +} +#endif + +#endif // __GPIO_H__ + +/*** (C) COPYRIGHT 2013~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_i2c.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_i2c.c new file mode 100644 index 00000000000..ad77a32c20f --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_i2c.c @@ -0,0 +1,612 @@ +/**************************************************************************//** + * @file i2c.c + * @version V3.00 + * $Revision: 23 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series I2C driver source file + * + * @note + * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved. + *****************************************************************************/ +#include "M451Series.h" + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup I2C_Driver I2C Driver + @{ +*/ + + +/** @addtogroup I2C_EXPORTED_FUNCTIONS I2C Exported Functions + @{ +*/ + +/** + * @brief Enable specify I2C Controller and set Clock Divider + * + * @param[in] i2c Specify I2C port + * @param[in] u32BusClock The target I2C bus clock in Hz + * + * @return Actual I2C bus clock frequency + * + * @details The function enable the specify I2C Controller and set proper Clock Divider + * in I2C CLOCK DIVIDED REGISTER (I2CLK) according to the target I2C Bus clock. + * I2C Bus clock = PCLK / (4*(divider+1). + * + */ +uint32_t I2C_Open(I2C_T *i2c, uint32_t u32BusClock) +{ + uint32_t u32Div; + + u32Div = (uint32_t)(((SystemCoreClock * 10) / (u32BusClock * 4) + 5) / 10 - 1); /* Compute proper divider for I2C clock */ + i2c->CLKDIV = u32Div; + + /* Enable I2C */ + i2c->CTL |= I2C_CTL_I2CEN_Msk; + + return (SystemCoreClock / ((u32Div + 1) << 2)); +} + +/** + * @brief Disable specify I2C Controller + * + * @param[in] i2c Specify I2C port + * + * @return None + * + * @details Reset I2C Controller and disable specify I2C port. + * + */ + +void I2C_Close(I2C_T *i2c) +{ + /* Reset I2C Controller */ + if((uint32_t)i2c == I2C0_BASE) + { + SYS->IPRST1 |= SYS_IPRST1_I2C0RST_Msk; + SYS->IPRST1 &= ~SYS_IPRST1_I2C0RST_Msk; + } + else if((uint32_t)i2c == I2C1_BASE) + { + SYS->IPRST1 |= SYS_IPRST1_I2C1RST_Msk; + SYS->IPRST1 &= ~SYS_IPRST1_I2C1RST_Msk; + } + + /* Disable I2C */ + i2c->CTL &= ~I2C_CTL_I2CEN_Msk; +} + +/** + * @brief Clear Time-out Counter flag + * + * @param[in] i2c Specify I2C port + * + * @return None + * + * @details When Time-out flag will be set, use this function to clear I2C Bus Time-out counter flag . + * + */ +void I2C_ClearTimeoutFlag(I2C_T *i2c) +{ + i2c->TOCTL |= I2C_TOCTL_TOIF_Msk; +} + +/** + * @brief Set Control bit of I2C Controller + * + * @param[in] i2c Specify I2C port + * @param[in] u8Start Set I2C START condition + * @param[in] u8Stop Set I2C STOP condition + * @param[in] u8Si Clear SI flag + * @param[in] u8Ack Set I2C ACK bit + * + * @return None + * + * @details The function set I2C Control bit of I2C Bus protocol. + * + */ +void I2C_Trigger(I2C_T *i2c, uint8_t u8Start, uint8_t u8Stop, uint8_t u8Si, uint8_t u8Ack) +{ + uint32_t u32Reg = 0; + + if(u8Start) + u32Reg |= I2C_CTL_STA; + if(u8Stop) + u32Reg |= I2C_CTL_STO; + if(u8Si) + u32Reg |= I2C_CTL_SI; + if(u8Ack) + u32Reg |= I2C_CTL_AA; + + i2c->CTL = (i2c->CTL & ~0x3C) | u32Reg; +} + +/** + * @brief Disable Interrupt of I2C Controller + * + * @param[in] i2c Specify I2C port + * + * @return None + * + * @details The function is used for disable I2C interrupt + * + */ +void I2C_DisableInt(I2C_T *i2c) +{ + i2c->CTL &= ~I2C_CTL_INTEN_Msk; +} + +/** + * @brief Enable Interrupt of I2C Controller + * + * @param[in] i2c Specify I2C port + * + * @return None + * + * @details The function is used for enable I2C interrupt + * + */ +void I2C_EnableInt(I2C_T *i2c) +{ + i2c->CTL |= I2C_CTL_INTEN_Msk; +} + +/** + * @brief Get I2C Bus Clock + * + * @param[in] i2c Specify I2C port + * + * @return The actual I2C Bus clock in Hz + * + * @details To get the actual I2C Bus Clock frequency. + */ +uint32_t I2C_GetBusClockFreq(I2C_T *i2c) +{ + uint32_t u32Divider = i2c->CLKDIV; + + return (SystemCoreClock / ((u32Divider + 1) << 2)); +} + +/** + * @brief Set I2C Bus Clock + * + * @param[in] i2c Specify I2C port + * @param[in] u32BusClock The target I2C Bus Clock in Hz + * + * @return The actual I2C Bus Clock in Hz + * + * @details To set the actual I2C Bus Clock frequency. + */ +uint32_t I2C_SetBusClockFreq(I2C_T *i2c, uint32_t u32BusClock) +{ + uint32_t u32Div; + + u32Div = (uint32_t)(((SystemCoreClock * 10) / (u32BusClock * 4) + 5) / 10 - 1); /* Compute proper divider for I2C clock */ + i2c->CLKDIV = u32Div; + + return (SystemCoreClock / ((u32Div + 1) << 2)); +} + +/** + * @brief Get Interrupt Flag + * + * @param[in] i2c Specify I2C port + * + * @return I2C interrupt flag status + * + * @details To get I2C Bus interrupt flag. + */ +uint32_t I2C_GetIntFlag(I2C_T *i2c) +{ + return ((i2c->CTL & I2C_CTL_SI_Msk) == I2C_CTL_SI_Msk ? 1 : 0); +} + +/** + * @brief Get I2C Bus Status Code + * + * @param[in] i2c Specify I2C port + * + * @return I2C Status Code + * + * @details To get I2C Bus Status Code. + */ +uint32_t I2C_GetStatus(I2C_T *i2c) +{ + return (i2c->STATUS); +} + +/** + * @brief Read a Byte from I2C Bus + * + * @param[in] i2c Specify I2C port + * + * @return I2C Data + * + * @details To read a bytes data from specify I2C port. + */ +uint8_t I2C_GetData(I2C_T *i2c) +{ + return (i2c->DAT); +} + +/** + * @brief Send a byte to I2C Bus + * + * @param[in] i2c Specify I2C port + * @param[in] u8Data The data to send to I2C bus + * + * @return None + * + * @details This function is used to write a byte to specified I2C port + */ +void I2C_SetData(I2C_T *i2c, uint8_t u8Data) +{ + i2c->DAT = u8Data; +} + +/** + * @brief Set 7-bit Slave Address and GC Mode + * + * @param[in] i2c Specify I2C port + * @param[in] u8SlaveNo Set the number of I2C address register (0~3) + * @param[in] u8SlaveAddr 7-bit slave address + * @param[in] u8GCMode Enable/Disable GC mode (I2C_GCMODE_ENABLE / I2C_GCMODE_DISABLE) + * + * @return None + * + * @details This function is used to set 7-bit slave addresses in I2C SLAVE ADDRESS REGISTER (I2CADDR0~3) + * and enable GC Mode. + * + */ +void I2C_SetSlaveAddr(I2C_T *i2c, uint8_t u8SlaveNo, uint8_t u8SlaveAddr, uint8_t u8GCMode) +{ + switch(u8SlaveNo) + { + case 1: + i2c->ADDR1 = (u8SlaveAddr << 1) | u8GCMode; + break; + case 2: + i2c->ADDR2 = (u8SlaveAddr << 1) | u8GCMode; + break; + case 3: + i2c->ADDR3 = (u8SlaveAddr << 1) | u8GCMode; + break; + case 0: + default: + i2c->ADDR0 = (u8SlaveAddr << 1) | u8GCMode; + break; + } +} + +/** + * @brief Configure the mask bits of 7-bit Slave Address + * + * @param[in] i2c Specify I2C port + * @param[in] u8SlaveNo Set the number of I2C address mask register (0~3) + * @param[in] u8SlaveAddrMask A byte for slave address mask + * + * @return None + * + * @details This function is used to set 7-bit slave addresses. + * + */ +void I2C_SetSlaveAddrMask(I2C_T *i2c, uint8_t u8SlaveNo, uint8_t u8SlaveAddrMask) +{ + switch(u8SlaveNo) + { + case 1: + i2c->ADDRMSK1 = u8SlaveAddrMask << 1; + break; + case 2: + i2c->ADDRMSK2 = u8SlaveAddrMask << 1; + break; + case 3: + i2c->ADDRMSK3 = u8SlaveAddrMask << 1; + break; + case 0: + default: + i2c->ADDRMSK0 = u8SlaveAddrMask << 1; + break; + } +} + +/** + * @brief Enable Time-out Counter Function and support Long Time-out + * + * @param[in] i2c Specify I2C port + * @param[in] u8LongTimeout Configure DIV4 to enable Long Time-out (0/1) + * + * @return None + * + * @details This function enable Time-out Counter function and configure DIV4 to support Long + * Time-out. + * + */ +void I2C_EnableTimeout(I2C_T *i2c, uint8_t u8LongTimeout) +{ + if(u8LongTimeout) + i2c->TOCTL |= I2C_TOCTL_TOCDIV4_Msk; + else + i2c->TOCTL &= ~I2C_TOCTL_TOCDIV4_Msk; + + i2c->TOCTL |= I2C_TOCTL_TOCEN_Msk; +} + +/** + * @brief Disable Time-out Counter Function + * + * @param[in] i2c Specify I2C port + * + * @return None + * + * @details To disable Time-out Counter function in I2CTOC register. + * + */ +void I2C_DisableTimeout(I2C_T *i2c) +{ + i2c->TOCTL &= ~I2C_TOCTL_TOCEN_Msk; +} + +/** + * @brief Enable I2C Wake-up Function + * + * @param[in] i2c Specify I2C port + * + * @return None + * + * @details To enable Wake-up function of I2C Wake-up control register. + * + */ +void I2C_EnableWakeup(I2C_T *i2c) +{ + i2c->WKCTL |= I2C_WKCTL_WKEN_Msk; +} + +/** + * @brief Disable I2C Wake-up Function + * + * @param[in] i2c Specify I2C port + * + * @return None + * + * @details To disable Wake-up function of I2C Wake-up control register. + * + */ +void I2C_DisableWakeup(I2C_T *i2c) +{ + i2c->WKCTL &= ~I2C_WKCTL_WKEN_Msk; +} + +/** + * @brief To get SMBus Status + * + * @param[in] i2c Specify I2C port + * + * @return SMBus status + * + * @details To get the Bus Management status of I2C_BUSSTS register + * + */ +uint32_t I2C_SMBusGetStatus(I2C_T *i2c) +{ + return (i2c->BUSSTS); +} + +/** + * @brief Clear SMBus Interrupt Flag + * + * @param[in] i2c Specify I2C port + * @param[in] u8SMBusIntFlag Specify SMBus interrupt flag + * + * @return None + * + * @details To clear flags of I2C_BUSSTS status register if interrupt set. + * + */ +void I2C_SMBusClearInterruptFlag(I2C_T *i2c, uint8_t u8SMBusIntFlag) +{ + i2c->BUSSTS |= u8SMBusIntFlag; +} + +/** + * @brief Set SMBus Bytes Counts of Transmission or Reception + * + * @param[in] i2c Specify I2C port + * @param[in] u32PktSize Transmit / Receive bytes + * + * @return None + * + * @details The transmission or receive byte number in one transaction when PECEN is set. The maximum is 255 bytes. + * + */ +void I2C_SMBusSetPacketByteCount(I2C_T *i2c, uint32_t u32PktSize) +{ + i2c->PKTSIZE = u32PktSize; +} + +/** + * @brief Init SMBus Host/Device Mode + * + * @param[in] i2c Specify I2C port + * @param[in] u8HostDevice Init SMBus port mode(I2C_SMBH_ENABLE(1)/I2C_SMBD_ENABLE(0)) + * + * @return None + * + * @details Using SMBus communication must specify the port is a Host or a Device. + * + */ +void I2C_SMBusOpen(I2C_T *i2c, uint8_t u8HostDevice) +{ + /* Clear BMHEN, BMDEN of BUSCTL Register */ + i2c->BUSCTL &= ~(I2C_BUSCTL_BMHEN_Msk | I2C_BUSCTL_BMDEN_Msk); + + /* Set SMBus Host/Device Mode, and enable Bus Management*/ + if(u8HostDevice == I2C_SMBH_ENABLE) + i2c->BUSCTL |= (I2C_BUSCTL_BMHEN_Msk | I2C_BUSCTL_BUSEN_Msk); + else + i2c->BUSCTL |= (I2C_BUSCTL_BMDEN_Msk | I2C_BUSCTL_BUSEN_Msk); +} + +/** + * @brief Disable SMBus function + * + * @param[in] i2c Specify I2C port + * + * @return None + * + * @details Disable all SMBus function include Bus disable, CRC check, Acknowledge by manual, Host/Device Mode. + * + */ +void I2C_SMBusClose(I2C_T *i2c) +{ + + i2c->BUSCTL = 0x00; +} + +/** + * @brief Enable SMBus PEC Transmit Function + * + * @param[in] i2c Specify I2C port + * @param[in] u8PECTxEn CRC transmit enable(PECTX_ENABLE) or disable(PECTX_DISABLE) + * + * @return None + * + * @details When enable CRC check function, the Host or Device needs to transmit CRC byte. + * + */ +void I2C_SMBusPECTxEnable(I2C_T *i2c, uint8_t u8PECTxEn) +{ + i2c->BUSCTL &= ~I2C_BUSCTL_PECTXEN_Msk; + + if(u8PECTxEn) + i2c->BUSCTL |= (I2C_BUSCTL_PECEN_Msk | I2C_BUSCTL_PECTXEN_Msk); + else + i2c->BUSCTL |= I2C_BUSCTL_PECEN_Msk; +} + +/** + * @brief Get SMBus CRC value + * + * @param[in] i2c Specify I2C port + * + * @return A byte is packet error check value + * + * @details The CRC check value after a transmission or a reception by count by using CRC8 + * + */ +uint8_t I2C_SMBusGetPECValue(I2C_T *i2c) +{ + return i2c->PKTCRC; +} + +/** + * @brief Calculate Time-out of SMBus idle period + * + * @param[in] i2c Specify I2C port + * @param[in] us Time-out length(us) + * @param[in] u32Hclk I2C peripheral clock frequency + * + * @return None + * + * @details This function is used to set SMBus Time-out length when bus is in Idle state. + * + */ + +void I2C_SMBusIdleTimeout(I2C_T *i2c, uint32_t us, uint32_t u32Hclk) +{ + uint32_t u32Div, u32Hclk_kHz; + + i2c->BUSCTL |= I2C_BUSCTL_TIDLE_Msk; + u32Hclk_kHz = u32Hclk / 1000; + u32Div = (((us * u32Hclk_kHz) / 1000) >> 2) - 1; + if(u32Div > 255) + { + i2c->BUSTOUT = 0xFF; + } + else + { + i2c->BUSTOUT = u32Div; + } + +} + +/** + * @brief Calculate Time-out of SMBus active period + * + * @param[in] i2c Specify I2C port + * @param[in] ms Time-out length(ms) + * @param[in] u32Pclk peripheral clock frequency + * + * @return None + * + * @details This function is used to set SMBus Time-out length when bus is in active state. + * Time-out length is calculate the SCL line "one clock" pull low timing. + * + */ + +void I2C_SMBusTimeout(I2C_T *i2c, uint32_t ms, uint32_t u32Pclk) +{ + uint32_t u32Div, u32Pclk_kHz; + + i2c->BUSCTL &= ~I2C_BUSCTL_TIDLE_Msk; + + /* DIV4 disabled */ + i2c->TOCTL &= ~I2C_TOCTL_TOCEN_Msk; + u32Pclk_kHz = u32Pclk / 1000; + u32Div = ((ms * u32Pclk_kHz) / (16 * 1024)) - 1; + if(u32Div <= 0xFF) + { + i2c->BUSTOUT = u32Div; + return; + } + + /* DIV4 enabled */ + i2c->TOCTL |= I2C_TOCTL_TOCEN_Msk; + + i2c->BUSTOUT = (((ms * u32Pclk_kHz) / (16 * 1024 * 4)) - 1) & 0xFF; //The max value is 255 +} + +/** + * @brief Calculate Cumulative Clock low Time-out of SMBus active period + * + * @param[in] i2c Specify I2C port + * @param[in] ms Time-out length(ms) + * @param[in] u32Pclk peripheral clock frequency + * + * @return None + * + * @details This function is used to set SMBus Time-out length when bus is in Active state. + * Time-out length is calculate the SCL line "clocks" low cumulative timing. + * + */ + +void I2C_SMBusClockLoTimeout(I2C_T *i2c, uint32_t ms, uint32_t u32Pclk) +{ + uint32_t u32Div, u32Pclk_kHz; + + i2c->BUSCTL &= ~I2C_BUSCTL_TIDLE_Msk; + + /* DIV4 disabled */ + i2c->TOCTL &= ~I2C_TOCTL_TOCEN_Msk; + u32Pclk_kHz = u32Pclk / 1000; + u32Div = ((ms * u32Pclk_kHz) / (16 * 1024)) - 1; + if(u32Div <= 0xFF) + { + i2c->CLKTOUT = u32Div; + return; + } + + /* DIV4 enabled */ + i2c->TOCTL |= I2C_TOCTL_TOCEN_Msk; + i2c->CLKTOUT = (((ms * u32Pclk_kHz) / (16 * 1024 * 4)) - 1) & 0xFF; //The max value is 255 +} + +/*@}*/ /* end of group I2C_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group I2C_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +/*** (C) COPYRIGHT 2014~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_i2c.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_i2c.h new file mode 100644 index 00000000000..3d30c66b74d --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_i2c.h @@ -0,0 +1,415 @@ +/**************************************************************************//** + * @file I2C.h + * @version V3.0 + * $Revision: 19 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 Series I2C Driver Header File + * + * @note + * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved. + * + ******************************************************************************/ +#ifndef __I2C_H__ +#define __I2C_H__ + +#include "M451Series.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup I2C_Driver I2C Driver + @{ +*/ + +/** @addtogroup I2C_EXPORTED_CONSTANTS I2C Exported Constants + @{ +*/ + +/*---------------------------------------------------------------------------------------------------------*/ +/* I2C_CTL constant definitions. */ +/*---------------------------------------------------------------------------------------------------------*/ +#define I2C_CTL_STA_STO_SI 0x38UL /*!< I2C_CTL setting for I2C control bits. It would set STA, STO and SI bits */ +#define I2C_CTL_STA_STO_SI_AA 0x3CUL /*!< I2C_CTL setting for I2C control bits. It would set STA, STO, SI and AA bits */ +#define I2C_CTL_STA_SI 0x28UL /*!< I2C_CTL setting for I2C control bits. It would set STA and SI bits */ +#define I2C_CTL_STA_SI_AA 0x2CUL /*!< I2C_CTL setting for I2C control bits. It would set STA, SI and AA bits */ +#define I2C_CTL_STO_SI 0x18UL /*!< I2C_CTL setting for I2C control bits. It would set STO and SI bits */ +#define I2C_CTL_STO_SI_AA 0x1CUL /*!< I2C_CTL setting for I2C control bits. It would set STO, SI and AA bits */ +#define I2C_CTL_SI 0x08UL /*!< I2C_CTL setting for I2C control bits. It would set SI bit */ +#define I2C_CTL_SI_AA 0x0CUL /*!< I2C_CTL setting for I2C control bits. It would set SI and AA bits */ +#define I2C_CTL_STA 0x20UL /*!< I2C_CTL setting for I2C control bits. It would set STA bit */ +#define I2C_CTL_STO 0x10UL /*!< I2C_CTL setting for I2C control bits. It would set STO bit */ +#define I2C_CTL_AA 0x04UL /*!< I2C_CTL setting for I2C control bits. It would set AA bit */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* I2C GCMode constant definitions. */ +/*---------------------------------------------------------------------------------------------------------*/ +#define I2C_GCMODE_ENABLE 1 /*!< Enable I2C GC Mode */ +#define I2C_GCMODE_DISABLE 0 /*!< Disable I2C GC Mode */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* I2C SMBUS constant definitions. */ +/*---------------------------------------------------------------------------------------------------------*/ +#define I2C_SMBH_ENABLE 1 /*!< Enable SMBus Host Mode enable */ +#define I2C_SMBD_ENABLE 0 /*!< Enable SMBus Device Mode enable */ +#define I2C_PECTX_ENABLE 1 /*!< Enable SMBus Packet Error Check Transmit function */ +#define I2C_PECTX_DISABLE 0 /*!< Disable SMBus Packet Error Check Transmit function */ + +/*@}*/ /* end of group I2C_EXPORTED_CONSTANTS */ + +/** @addtogroup I2C_EXPORTED_FUNCTIONS I2C Exported Functions + @{ +*/ +/** + * @brief The macro is used to set I2C bus condition at One Time + * + * @param[in] i2c Specify I2C port + * @param[in] u8Ctrl A byte writes to I2C control register + * + * @return None + * + * @details Set I2C_CTL register to control I2C bus conditions of START, STOP, SI, ACK. + */ +#define I2C_SET_CONTROL_REG(i2c, u8Ctrl) ((i2c)->CTL = ((i2c)->CTL & ~0x3c) | (u8Ctrl)) + +/** + * @brief The macro is used to set START condition of I2C Bus + * + * @param[in] i2c Specify I2C port + * + * @return None + * + * @details Set the I2C bus START condition in I2C_CTL register. + */ +#define I2C_START(i2c) ((i2c)->CTL = ((i2c)->CTL & ~I2C_CTL_SI_Msk) | I2C_CTL_STA_Msk) + +/** + * @brief The macro is used to wait I2C bus status get ready + * + * @param[in] i2c Specify I2C port + * + * @return None + * + * @details When a new status is presented of I2C bus, the SI flag will be set in I2C_CTL register. + */ +#define I2C_WAIT_READY(i2c) while(!((i2c)->CTL & I2C_CTL_SI_Msk)) + +/** + * @brief The macro is used to Read I2C Bus Data Register + * + * @param[in] i2c Specify I2C port + * + * @return A byte of I2C data register + * + * @details I2C controller read data from bus and save it in I2CDAT register. + */ +#define I2C_GET_DATA(i2c) ((i2c)->DAT) + +/** + * @brief Write a Data to I2C Data Register + * + * @param[in] i2c Specify I2C port + * @param[in] u8Data A byte that writes to data register + * + * @return None + * + * @details When write a data to I2C_DAT register, the I2C controller will shift it to I2C bus. + */ +#define I2C_SET_DATA(i2c, u8Data) ((i2c)->DAT = (u8Data)) + +/** + * @brief Get I2C Bus status code + * + * @param[in] i2c Specify I2C port + * + * @return I2C status code + * + * @details To get this status code to monitor I2C bus event. + */ +#define I2C_GET_STATUS(i2c) ((i2c)->STATUS) + +/** + * @brief Get Time-out flag from I2C Bus + * + * @param[in] i2c Specify I2C port + * + * @retval 0 I2C Bus time-out is not happened + * @retval 1 I2C Bus time-out is happened + * + * @details When I2C bus occurs time-out event, the time-out flag will be set. + */ +#define I2C_GET_TIMEOUT_FLAG(i2c) ( ((i2c)->TOCTL & I2C_TOCTL_TOIF_Msk) == I2C_TOCTL_TOIF_Msk ? 1:0 ) + +/** + * @brief To get wake-up flag from I2C Bus + * + * @param[in] i2c Specify I2C port + * + * @retval 0 Chip is not woken-up from power-down mode + * @retval 1 Chip is woken-up from power-down mode + * + * @details I2C bus occurs wake-up event, wake-up flag will be set. + */ +#define I2C_GET_WAKEUP_FLAG(i2c) ( ((i2c)->WKSTS & I2C_WKSTS_WKIF_Msk) == I2C_WKSTS_WKIF_Msk ? 1:0 ) + +/** + * @brief To clear wake-up flag + * + * @param[in] i2c Specify I2C port + * + * @return None + * + * @details If wake-up flag is set, use this macro to clear it. + */ +#define I2C_CLEAR_WAKEUP_FLAG(i2c) ((i2c)->WKSTS = I2C_WKSTS_WKIF_Msk) + +/** + * @brief To get SMBus Status + * + * @param[in] i2c Specify I2C port + * + * @return SMBus status + * + * @details To get the Bus Management status of I2C_BUSSTS register + * + */ +#define I2C_SMBUS_GET_STATUS(i2c) ((i2c)->BUSSTS) + +/** + * @brief Get SMBus CRC value + * + * @param[in] i2c Specify I2C port + * + * @return Packet error check byte value + * + * @details The CRC check value after a transmission or a reception by count by using CRC8 + * + */ +#define I2C_SMBUS_GET_PEC_VALUE(i2c) ((i2c)->PKTCRC) + +/** + * @brief Set SMBus Bytes number of Transmission or reception + * + * @param[in] i2c Specify I2C port + * @param[in] u32PktSize Transmit / Receive bytes + * + * @return None + * + * @details The transmission or receive byte number in one transaction when PECEN is set. The maximum is 255 bytes. + * + */ +#define I2C_SMBUS_SET_PACKET_BYTE_COUNT(i2c, u32PktSize) ((i2c)->PKTSIZE = (u32PktSize)) + +/** + * @brief Enable SMBus Alert function + * + * @param[in] i2c Specify I2C port + * + * @return None + * + * @details Device Mode(BMHEN=0): If ALERTEN(I2C_BUSCTL[4]) is set, the Alert pin will pull lo, and reply ACK when get ARP from host + * Host Mode(BMHEN=1): If ALERTEN(I2C_BUSCTL[4]) is set, the Alert pin is supported to receive alert state(Lo trigger) + * + */ +#define I2C_SMBUS_ENABLE_ALERT(i2c) ((i2c)->BUSCTL |= I2C_BUSCTL_ALERTEN_Msk) + +/** + * @brief Disable SMBus Alert pin function + * + * @param[in] i2c Specify I2C port + * + * @return None + * + * @details Device Mode(BMHEN=0): If ALERTEN(I2C_BUSCTL[4]) is clear, the Alert pin will pull hi, and reply NACK when get ARP from host + * Host Mode(BMHEN=1): If ALERTEN(I2C_BUSCTL[4]) is clear, the Alert pin is not supported to receive alert state(Lo trigger) + * + */ +#define I2C_SMBUS_DISABLE_ALERT(i2c) ((i2c)->BUSCTL &= ~I2C_BUSCTL_ALERTEN_Msk) + +/** + * @brief Set SMBus SUSCON pin is output mode + * + * @param[in] i2c Specify I2C port + * + * @return None + * + * @details This function to set SUSCON(I2C_BUSCTL[6]) pin is output mode. + * + * + */ +#define I2C_SMBUS_SET_SUSCON_OUT(i2c) ((i2c)->BUSCTL |= I2C_BUSCTL_SCTLOEN_Msk) + +/** + * @brief Set SMBus SUSCON pin is input mode + * + * @param[in] i2c Specify I2C port + * + * @return None + * + * @details This function to set SUSCON(I2C_BUSCTL[6]) pin is input mode. + * + * + */ +#define I2C_SMBUS_SET_SUSCON_IN(i2c) ((i2c)->BUSCTL &= ~I2C_BUSCTL_SCTLOEN_Msk) + +/** + * @brief Set SMBus SUSCON pin output high state + * + * @param[in] i2c Specify I2C port + * + * @return None + * + * @details This function to set SUSCON(I2C_BUSCTL[6]) pin is output hi state. + * + */ +#define I2C_SMBUS_SET_SUSCON_HIGH(i2c) ((i2c)->BUSCTL |= I2C_BUSCTL_SCTLOSTS_Msk) + + +/** + * @brief Set SMBus SUSCON pin output low state + * + * @param[in] i2c Specify I2C port + * + * @return None + * + * @details This function to set SUSCON(I2C_BUSCTL[6]) pin is output lo state. + * + */ +#define I2C_SMBUS_SET_SUSCON_LOW(i2c) ((i2c)->BUSCTL &= ~I2C_BUSCTL_SCTLOSTS_Msk) + +/** + * @brief Enable SMBus Acknowledge control by manual + * + * @param[in] i2c Specify I2C port + * + * @return None + * + * @details The 9th bit can response the ACK or NACK according the received data by user. When the byte is received, SCLK line stretching to low between the 8th and 9th SCLK pulse. + * + */ +#define I2C_SMBUS_ACK_MANUAL(i2c) ((i2c)->BUSCTL |= I2C_BUSCTL_ACKMEN_Msk) + +/** + * @brief Disable SMBus Acknowledge control by manual + * + * @param[in] i2c Specify I2C port + * + * @return None + * + * @details Disable acknowledge response control by user. + * + */ +#define I2C_SMBUS_ACK_AUTO(i2c) ((i2c)->BUSCTL &= ~I2C_BUSCTL_ACKMEN_Msk) + +/** + * @brief Enable SMBus Acknowledge manual interrupt + * + * @param[in] i2c Specify I2C port + * + * @return None + * + * @details This function is used to enable SMBUS acknowledge manual interrupt on the 9th clock cycle when SMBUS=1 and ACKMEN=1 + * + */ +#define I2C_SMBUS_9THBIT_INT_ENABLE(i2c) ((i2c)->BUSCTL |= I2C_BUSCTL_ACKM9SI_Msk) + +/** + * @brief Disable SMBus Acknowledge manual interrupt + * + * @param[in] i2c Specify I2C port + * + * @return None + * + * @details This function is used to disable SMBUS acknowledge manual interrupt on the 9th clock cycle when SMBUS=1 and ACKMEN=1 + * + */ +#define I2C_SMBUS_9THBIT_INT_DISABLE(i2c) ((i2c)->BUSCTL &= ~I2C_BUSCTL_ACKM9SI_Msk) + +/** + * @brief Enable SMBus PEC clear at REPEAT START + * + * @param[in] i2c Specify I2C port + * + * @return None + * + * @details This function is used to enable the condition of REAEAT START can clear the PEC calculation. + * + */ +#define I2C_SMBUS_RST_PEC_AT_START_ENABLE(i2c) ((i2c)->BUSCTL |= I2C_BUSCTL_PECCLR_Msk) + +/** + * @brief Disable SMBus PEC clear at Repeat START + * + * @param[in] i2c Specify I2C port + * + * @return None + * + * @details This function is used to disable the condition of Repeat START can clear the PEC calculation. + * + */ +#define I2C_SMBUS_RST_PEC_AT_START_DISABLE(i2c) ((i2c)->BUSCTL &= ~I2C_BUSCTL_PECCLR_Msk) + +/*---------------------------------------------------------------------------------------------------------*/ +/* inline functions */ +/*---------------------------------------------------------------------------------------------------------*/ +/** + * @brief The macro is used to set STOP condition of I2C Bus + * + * @param[in] i2c Specify I2C port + * + * @return None + * + * @details Set the I2C bus STOP condition in I2C_CTL register. + */ +static __INLINE void I2C_STOP(I2C_T *i2c) +{ + + (i2c)->CTL |= (I2C_CTL_SI_Msk | I2C_CTL_STO_Msk); + while(i2c->CTL & I2C_CTL_STO_Msk); +} + +void I2C_ClearTimeoutFlag(I2C_T *i2c); +void I2C_Close(I2C_T *i2c); +void I2C_Trigger(I2C_T *i2c, uint8_t u8Start, uint8_t u8Stop, uint8_t u8Si, uint8_t u8Ack); +void I2C_DisableInt(I2C_T *i2c); +void I2C_EnableInt(I2C_T *i2c); +uint32_t I2C_GetBusClockFreq(I2C_T *i2c); +uint32_t I2C_GetIntFlag(I2C_T *i2c); +uint32_t I2C_GetStatus(I2C_T *i2c); +uint32_t I2C_Open(I2C_T *i2c, uint32_t u32BusClock); +uint8_t I2C_GetData(I2C_T *i2c); +void I2C_SetSlaveAddr(I2C_T *i2c, uint8_t u8SlaveNo, uint8_t u8SlaveAddr, uint8_t u8GCMode); +void I2C_SetSlaveAddrMask(I2C_T *i2c, uint8_t u8SlaveNo, uint8_t u8SlaveAddrMask); +uint32_t I2C_SetBusClockFreq(I2C_T *i2c, uint32_t u32BusClock); +void I2C_EnableTimeout(I2C_T *i2c, uint8_t u8LongTimeout); +void I2C_DisableTimeout(I2C_T *i2c); +void I2C_EnableWakeup(I2C_T *i2c); +void I2C_DisableWakeup(I2C_T *i2c); +void I2C_SetData(I2C_T *i2c, uint8_t u8Data); + +uint32_t I2C_SMBusGetStatus(I2C_T *i2c); +void I2C_SMBusClearInterruptFlag(I2C_T *i2c, uint8_t u8ClrSMBusIntFlag); +void I2C_SMBusSetPacketByteCount(I2C_T *i2c, uint32_t u32PktSize); +void I2C_SMBusOpen(I2C_T *i2c, uint8_t u8HostDevice); +void I2C_SMBusClose(I2C_T *i2c); +void I2C_SMBusPECTxEnable(I2C_T *i2c, uint8_t u8PECTxEn); +uint8_t I2C_SMBusGetPECValue(I2C_T *i2c); +void I2C_SMBusIdleTimeout(I2C_T *i2c, uint32_t us, uint32_t u32Hclk); +void I2C_SMBusTimeout(I2C_T *i2c, uint32_t ms, uint32_t u32Pclk); +void I2C_SMBusClockLoTimeout(I2C_T *i2c, uint32_t ms, uint32_t u32Pclk); +/*@}*/ /* end of group I2C_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group I2C_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +#ifdef __cplusplus +} +#endif +#endif //__I2C_H__ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_otg.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_otg.h new file mode 100644 index 00000000000..4137650aa5c --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_otg.h @@ -0,0 +1,260 @@ +/**************************************************************************//** + * @file otg.h + * @version V0.10 + * $Revision: 3 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 Series OTG Driver Header File + * + * @note + * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved. + * + ******************************************************************************/ +#ifndef __OTG_H__ +#define __OTG_H__ + +/*---------------------------------------------------------------------------------------------------------*/ +/* Include related headers */ +/*---------------------------------------------------------------------------------------------------------*/ +#include "M451Series.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup OTG_Driver OTG Driver + @{ +*/ + + +/** @addtogroup OTG_EXPORTED_CONSTANTS OTG Exported Constants + @{ +*/ + + + +/*---------------------------------------------------------------------------------------------------------*/ +/* OTG constant definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define OTG_VBUS_EN_ACTIVE_HIGH (0UL) /*!< USB VBUS power switch enable signal is active high. */ +#define OTG_VBUS_EN_ACTIVE_LOW (1UL) /*!< USB VBUS power switch enable signal is active low. */ +#define OTG_VBUS_ST_VALID_HIGH (0UL) /*!< USB VBUS power switch valid status is high. */ +#define OTG_VBUS_ST_VALID_LOW (1UL) /*!< USB VBUS power switch valid status is low. */ + + +/*@}*/ /* end of group OTG_EXPORTED_CONSTANTS */ + + +/** @addtogroup OTG_EXPORTED_FUNCTIONS OTG Exported Functions + @{ +*/ + +/*---------------------------------------------------------------------------------------------------------*/ +/* Define Macros and functions */ +/*---------------------------------------------------------------------------------------------------------*/ + + +/** + * @brief This macro is used to enable OTG function + * @param None + * @return None + * @details This macro will set OTGEN bit of OTG_CTL register to enable OTG function. + */ +#define OTG_ENABLE() (OTG->CTL |= OTG_CTL_OTGEN_Msk) + +/** + * @brief This macro is used to disable OTG function + * @param None + * @return None + * @details This macro will clear OTGEN bit of OTG_CTL register to disable OTG function. + */ +#define OTG_DISABLE() (OTG->CTL &= ~OTG_CTL_OTGEN_Msk) + +/** + * @brief This macro is used to enable USB PHY + * @param None + * @return None + * @details When the USB role is selected as OTG device, use this macro to enable USB PHY. + * This macro will set OTGPHYEN bit of OTG_PHYCTL register to enable USB PHY. + */ +#define OTG_ENABLE_PHY() (OTG->PHYCTL |= OTG_PHYCTL_OTGPHYEN_Msk) + +/** + * @brief This macro is used to disable USB PHY + * @param None + * @return None + * @details This macro will clear OTGPHYEN bit of OTG_PHYCTL register to disable USB PHY. + */ +#define OTG_DISABLE_PHY() (OTG->PHYCTL &= ~OTG_PHYCTL_OTGPHYEN_Msk) + +/** + * @brief This macro is used to enable ID detection function + * @param None + * @return None + * @details This macro will set IDDETEN bit of OTG_PHYCTL register to enable ID detection function. + */ +#define OTG_ENABLE_ID_DETECT() (OTG->PHYCTL |= OTG_PHYCTL_IDDETEN_Msk) + +/** + * @brief This macro is used to disable ID detection function + * @param None + * @return None + * @details This macro will clear IDDETEN bit of OTG_PHYCTL register to disable ID detection function. + */ +#define OTG_DISABLE_ID_DETECT() (OTG->PHYCTL &= ~OTG_PHYCTL_IDDETEN_Msk) + +/** + * @brief This macro is used to enable OTG wake-up function + * @param None + * @return None + * @details This macro will set WKEN bit of OTG_CTL register to enable OTG wake-up function. + */ +#define OTG_ENABLE_WAKEUP() (OTG->CTL |= OTG_CTL_WKEN_Msk) + +/** + * @brief This macro is used to disable OTG wake-up function + * @param None + * @return None + * @details This macro will clear WKEN bit of OTG_CTL register to disable OTG wake-up function. + */ +#define OTG_DISABLE_WAKEUP() (OTG->CTL &= ~OTG_CTL_WKEN_Msk) + +/** + * @brief This macro is used to set the polarity of USB_VBUS_EN pin + * @param[in] u32Pol The polarity selection. Valid values are listed below. + * - \ref OTG_VBUS_EN_ACTIVE_HIGH + * - \ref OTG_VBUS_EN_ACTIVE_LOW + * @return None + * @details This macro is used to set the polarity of external USB VBUS power switch enable signal. + */ +#define OTG_SET_VBUS_EN_POL(u32Pol) (OTG->PHYCTL = (OTG->PHYCTL & (~OTG_PHYCTL_VBENPOL_Msk)) | ((u32Pol)<PHYCTL = (OTG->PHYCTL & (~OTG_PHYCTL_VBSTSPOL_Msk)) | ((u32Pol)<INTEN |= (u32Mask)) + +/** + * @brief This macro is used to disable OTG related interrupts + * @param[in] u32Mask The combination of interrupt source. Each bit corresponds to a interrupt source. Valid values are listed below. + * - \ref OTG_INTEN_ROLECHGIEN_Msk + * - \ref OTG_INTEN_VBEIEN_Msk + * - \ref OTG_INTEN_SRPFIEN_Msk + * - \ref OTG_INTEN_HNPFIEN_Msk + * - \ref OTG_INTEN_GOIDLEIEN_Msk + * - \ref OTG_INTEN_IDCHGIEN_Msk + * - \ref OTG_INTEN_PDEVIEN_Msk + * - \ref OTG_INTEN_HOSTIEN_Msk + * - \ref OTG_INTEN_BVLDCHGIEN_Msk + * - \ref OTG_INTEN_AVLDCHGIEN_Msk + * - \ref OTG_INTEN_VBCHGIEN_Msk + * - \ref OTG_INTEN_SECHGIEN_Msk + * - \ref OTG_INTEN_SRPDETIEN_Msk + * @return None + * @details This macro will disable OTG related interrupts specified by u32Mask parameter. + */ +#define OTG_DISABLE_INT(u32Mask) (OTG->INTEN &= ~(u32Mask)) + +/** + * @brief This macro is used to get OTG related interrupt flags + * @param[in] u32Mask The combination of interrupt source. Each bit corresponds to a interrupt source. Valid values are listed below. + * - \ref OTG_INTSTS_ROLECHGIF_Msk + * - \ref OTG_INTSTS_VBEIF_Msk + * - \ref OTG_INTSTS_SRPFIF_Msk + * - \ref OTG_INTSTS_HNPFIF_Msk + * - \ref OTG_INTSTS_GOIDLEIF_Msk + * - \ref OTG_INTSTS_IDCHGIF_Msk + * - \ref OTG_INTSTS_PDEVIF_Msk + * - \ref OTG_INTSTS_HOSTIF_Msk + * - \ref OTG_INTSTS_BVLDCHGIF_Msk + * - \ref OTG_INTSTS_AVLDCHGIF_Msk + * - \ref OTG_INTSTS_VBCHGIF_Msk + * - \ref OTG_INTSTS_SECHGIF_Msk + * - \ref OTG_INTSTS_SRPDETIF_Msk + * @return Interrupt flags of selected sources. + * @details This macro will return OTG related interrupt flags specified by u32Mask parameter. + */ +#define OTG_GET_INT_FLAG(u32Mask) (OTG->INTSTS & (u32Mask)) + +/** + * @brief This macro is used to clear OTG related interrupt flags + * @param[in] u32Mask The combination of interrupt source. Each bit corresponds to a interrupt source. Valid values are listed below. + * - \ref OTG_INTSTS_ROLECHGIF_Msk + * - \ref OTG_INTSTS_VBEIF_Msk + * - \ref OTG_INTSTS_SRPFIF_Msk + * - \ref OTG_INTSTS_HNPFIF_Msk + * - \ref OTG_INTSTS_GOIDLEIF_Msk + * - \ref OTG_INTSTS_IDCHGIF_Msk + * - \ref OTG_INTSTS_PDEVIF_Msk + * - \ref OTG_INTSTS_HOSTIF_Msk + * - \ref OTG_INTSTS_BVLDCHGIF_Msk + * - \ref OTG_INTSTS_AVLDCHGIF_Msk + * - \ref OTG_INTSTS_VBCHGIF_Msk + * - \ref OTG_INTSTS_SECHGIF_Msk + * - \ref OTG_INTSTS_SRPDETIF_Msk + * @return None + * @details This macro will clear OTG related interrupt flags specified by u32Mask parameter. + */ +#define OTG_CLR_INT_FLAG(u32Mask) (OTG->INTSTS = (u32Mask)) + +/** + * @brief This macro is used to get OTG related status + * @param[in] u32Mask The combination of user specified source. Valid values are listed below. + * - \ref OTG_STATUS_OVERCUR_Msk + * - \ref OTG_STATUS_IDSTS_Msk + * - \ref OTG_STATUS_SESSEND_Msk + * - \ref OTG_STATUS_BVLD_Msk + * - \ref OTG_STATUS_AVLD_Msk + * - \ref OTG_STATUS_VBUSVLD_Msk + * @return The user specified status. + * @details This macro will return OTG related status specified by u32Mask parameter. + */ +#define OTG_GET_STATUS(u32Mask) (OTG->STATUS & (u32Mask)) + + + +/*@}*/ /* end of group OTG_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group OTG_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +#ifdef __cplusplus +} +#endif + + +#endif //__OTG_H__ + +/*** (C) COPYRIGHT 2014~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_pdma.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_pdma.c new file mode 100644 index 00000000000..53f4420c1c6 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_pdma.c @@ -0,0 +1,389 @@ +/**************************************************************************//** + * @file pdma.c + * @version V1.00 + * $Revision: 12 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series PDMA driver source file + * + * @note + * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ +#include "M451Series.h" + + +static uint8_t u32ChSelect[PDMA_CH_MAX]; + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup PDMA_Driver PDMA Driver + @{ +*/ + + +/** @addtogroup PDMA_EXPORTED_FUNCTIONS PDMA Exported Functions + @{ +*/ + +/** + * @brief PDMA Open + * + * @param[in] u32Mask Channel enable bits. + * + * @return None + * + * @details This function enable the PDMA channels. + */ +void PDMA_Open(uint32_t u32Mask) +{ + int volatile i; + + for(i = 0; i < PDMA_CH_MAX; i++) + { + PDMA->DSCT[i].CTL = 0; + u32ChSelect[i] = 0x1f; + } + + PDMA->CHCTL |= u32Mask; +} + +/** + * @brief PDMA Close + * + * @param None + * + * @return None + * + * @details This function disable all PDMA channels. + */ +void PDMA_Close(void) +{ + PDMA->CHCTL = 0; +} + +/** + * @brief Set PDMA Transfer Count + * + * @param[in] u32Ch The selected channel + * @param[in] u32Width Data width. Valid values are + * - \ref PDMA_WIDTH_8 + * - \ref PDMA_WIDTH_16 + * - \ref PDMA_WIDTH_32 + * @param[in] u32TransCount Transfer count + * + * @return None + * + * @details This function set the selected channel data width and transfer count. + */ +void PDMA_SetTransferCnt(uint32_t u32Ch, uint32_t u32Width, uint32_t u32TransCount) +{ + PDMA->DSCT[u32Ch].CTL &= ~(PDMA_DSCT_CTL_TXCNT_Msk | PDMA_DSCT_CTL_TXWIDTH_Msk); + PDMA->DSCT[u32Ch].CTL |= (u32Width | ((u32TransCount - 1) << PDMA_DSCT_CTL_TXCNT_Pos)); +} + +/** + * @brief Set PDMA Transfer Address + * + * @param[in] u32Ch The selected channel + * @param[in] u32SrcAddr Source address + * @param[in] u32SrcCtrl Source control attribute. Valid values are + * - \ref PDMA_SAR_INC + * - \ref PDMA_SAR_FIX + * @param[in] u32DstAddr destination address + * @param[in] u32DstCtrl destination control attribute. Valid values are + * - \ref PDMA_DAR_INC + * - \ref PDMA_DAR_FIX + * + * @return None + * + * @details This function set the selected channel source/destination address and attribute. + */ +void PDMA_SetTransferAddr(uint32_t u32Ch, uint32_t u32SrcAddr, uint32_t u32SrcCtrl, uint32_t u32DstAddr, uint32_t u32DstCtrl) +{ + PDMA->DSCT[u32Ch].SA = u32SrcAddr; + PDMA->DSCT[u32Ch].DA = u32DstAddr; + PDMA->DSCT[u32Ch].CTL &= ~(PDMA_DSCT_CTL_SAINC_Msk | PDMA_DSCT_CTL_DAINC_Msk); + PDMA->DSCT[u32Ch].CTL |= (u32SrcCtrl | u32DstCtrl); +} + +/** + * @brief Set PDMA Transfer Mode + * + * @param[in] u32Ch The selected channel + * @param[in] u32Peripheral The selected peripheral. Valid values are + * - \ref PDMA_SPI0_TX + * - \ref PDMA_SPI1_TX + * - \ref PDMA_SPI2_TX + * - \ref PDMA_UART0_TX + * - \ref PDMA_UART1_TX + * - \ref PDMA_UART2_TX + * - \ref PDMA_UART3_TX + * - \ref PDMA_DAC_TX + * - \ref PDMA_ADC_RX + * - \ref PDMA_PWM0_P1_RX + * - \ref PDMA_PWM0_P2_RX + * - \ref PDMA_PWM0_P3_RX + * - \ref PDMA_PWM1_P1_RX + * - \ref PDMA_PWM1_P2_RX + * - \ref PDMA_PWM1_P3_RX + * - \ref PDMA_SPI0_RX + * - \ref PDMA_SPI1_RX + * - \ref PDMA_SPI2_RX + * - \ref PDMA_UART0_RX + * - \ref PDMA_UART1_RX + * - \ref PDMA_UART2_RX + * - \ref PDMA_UART3_RX + * - \ref PDMA_MEM + * @param[in] u32ScatterEn Scatter-gather mode enable + * @param[in] u32DescAddr Scatter-gather descriptor address + * + * @return None + * + * @details This function set the selected channel transfer mode. Include peripheral setting. + */ +void PDMA_SetTransferMode(uint32_t u32Ch, uint32_t u32Peripheral, uint32_t u32ScatterEn, uint32_t u32DescAddr) +{ + u32ChSelect[u32Ch] = u32Peripheral; + switch(u32Ch) + { + case 0: + PDMA->REQSEL0_3 = (PDMA->REQSEL0_3 & ~PDMA_REQSEL0_3_REQSRC0_Msk) | u32Peripheral; + break; + case 1: + PDMA->REQSEL0_3 = (PDMA->REQSEL0_3 & ~PDMA_REQSEL0_3_REQSRC1_Msk) | (u32Peripheral << PDMA_REQSEL0_3_REQSRC1_Pos); + break; + case 2: + PDMA->REQSEL0_3 = (PDMA->REQSEL0_3 & ~PDMA_REQSEL0_3_REQSRC2_Msk) | (u32Peripheral << PDMA_REQSEL0_3_REQSRC2_Pos); + break; + case 3: + PDMA->REQSEL0_3 = (PDMA->REQSEL0_3 & ~PDMA_REQSEL0_3_REQSRC3_Msk) | (u32Peripheral << PDMA_REQSEL0_3_REQSRC3_Pos); + break; + case 4: + PDMA->REQSEL4_7 = (PDMA->REQSEL4_7 & ~PDMA_REQSEL4_7_REQSRC4_Msk) | u32Peripheral; + break; + case 5: + PDMA->REQSEL4_7 = (PDMA->REQSEL4_7 & ~PDMA_REQSEL4_7_REQSRC5_Msk) | (u32Peripheral << PDMA_REQSEL4_7_REQSRC5_Pos); + break; + case 6: + PDMA->REQSEL4_7 = (PDMA->REQSEL4_7 & ~PDMA_REQSEL4_7_REQSRC6_Msk) | (u32Peripheral << PDMA_REQSEL4_7_REQSRC6_Pos); + break; + case 7: + PDMA->REQSEL4_7 = (PDMA->REQSEL4_7 & ~PDMA_REQSEL4_7_REQSRC7_Msk) | (u32Peripheral << PDMA_REQSEL4_7_REQSRC7_Pos); + break; + case 8: + PDMA->REQSEL8_11 = (PDMA->REQSEL8_11 & ~PDMA_REQSEL8_11_REQSRC8_Msk) | u32Peripheral; + break; + case 9: + PDMA->REQSEL8_11 = (PDMA->REQSEL8_11 & ~PDMA_REQSEL8_11_REQSRC9_Msk) | (u32Peripheral << PDMA_REQSEL8_11_REQSRC9_Pos); + break; + case 10: + PDMA->REQSEL8_11 = (PDMA->REQSEL8_11 & ~PDMA_REQSEL8_11_REQSRC10_Msk) | (u32Peripheral << PDMA_REQSEL8_11_REQSRC10_Pos); + break; + case 11: + PDMA->REQSEL8_11 = (PDMA->REQSEL8_11 & ~PDMA_REQSEL8_11_REQSRC11_Msk) | (u32Peripheral << PDMA_REQSEL8_11_REQSRC11_Pos); + break; + default: + ; + } + + if(u32ScatterEn) + { + PDMA->DSCT[u32Ch].CTL = (PDMA->DSCT[u32Ch].CTL & ~PDMA_DSCT_CTL_OPMODE_Msk) | PDMA_OP_SCATTER; + PDMA->DSCT[u32Ch].NEXT = u32DescAddr - (PDMA->SCATBA); + } + else + PDMA->DSCT[u32Ch].CTL = (PDMA->DSCT[u32Ch].CTL & ~PDMA_DSCT_CTL_OPMODE_Msk) | PDMA_OP_BASIC; +} + +/** + * @brief Set PDMA Burst Type and Size + * + * @param[in] u32Ch The selected channel + * @param[in] u32BurstType Burst mode or single mode. Valid values are + * - \ref PDMA_REQ_SINGLE + * - \ref PDMA_REQ_BURST + * @param[in] u32BurstSize Set the size of burst mode. Valid values are + * - \ref PDMA_BURST_128 + * - \ref PDMA_BURST_64 + * - \ref PDMA_BURST_32 + * - \ref PDMA_BURST_16 + * - \ref PDMA_BURST_8 + * - \ref PDMA_BURST_4 + * - \ref PDMA_BURST_2 + * - \ref PDMA_BURST_1 + * + * @return None + * + * @details This function set the selected channel burst type and size. + */ +void PDMA_SetBurstType(uint32_t u32Ch, uint32_t u32BurstType, uint32_t u32BurstSize) +{ + PDMA->DSCT[u32Ch].CTL &= ~(PDMA_DSCT_CTL_TXTYPE_Msk | PDMA_DSCT_CTL_BURSIZE_Msk); + PDMA->DSCT[u32Ch].CTL |= (u32BurstType | u32BurstSize); +} + +/** + * @brief Enable timeout function + * + * @param[in] u32Mask Channel enable bits. + * + * @return None + * + * @details This function enable timeout function of the selected channel(s). + * @note This function is only supported in M45xD/M45xC. + */ +void PDMA_EnableTimeout(uint32_t u32Mask) +{ + PDMA->TOUTEN |= u32Mask; +} + +/** + * @brief Disable timeout function + * + * @param[in] u32Mask Channel enable bits. + * + * @return None + * + * @details This function disable timeout function of the selected channel(s). + * @note This function is only supported in M45xD/M45xC. + */ +void PDMA_DisableTimeout(uint32_t u32Mask) +{ + PDMA->TOUTEN &= ~u32Mask; +} + +/** + * @brief Set PDMA Timeout Count + * + * @param[in] u32Ch The selected channel + * @param[in] u32OnOff Enable/disable time out function + * @param[in] u32TimeOutCnt Timeout count + * + * @return None + * + * @details This function set the timeout count. + * @note This function is only supported in M45xD/M45xC. + */ +void PDMA_SetTimeOut(uint32_t u32Ch, uint32_t u32OnOff, uint32_t u32TimeOutCnt) +{ + switch(u32Ch) + { + case 0: + PDMA->TOC0_1 = (PDMA->TOC0_1 & ~PDMA_TOC0_1_TOC0_Msk) | u32TimeOutCnt; + break; + case 1: + PDMA->TOC0_1 = (PDMA->TOC0_1 & ~PDMA_TOC0_1_TOC1_Msk) | (u32TimeOutCnt << PDMA_TOC0_1_TOC1_Pos); + break; + case 2: + PDMA->TOC2_3 = (PDMA->TOC2_3 & ~PDMA_TOC2_3_TOC2_Msk) | u32TimeOutCnt; + break; + case 3: + PDMA->TOC2_3 = (PDMA->TOC2_3 & ~PDMA_TOC2_3_TOC3_Msk) | (u32TimeOutCnt << PDMA_TOC2_3_TOC3_Pos); + break; + case 4: + PDMA->TOC4_5 = (PDMA->TOC4_5 & ~PDMA_TOC4_5_TOC4_Msk) | u32TimeOutCnt; + break; + case 5: + PDMA->TOC4_5 = (PDMA->TOC4_5 & ~PDMA_TOC4_5_TOC5_Msk) | (u32TimeOutCnt << PDMA_TOC4_5_TOC5_Pos); + break; + case 6: + PDMA->TOC6_7 = (PDMA->TOC6_7 & ~PDMA_TOC6_7_TOC6_Msk) | u32TimeOutCnt; + break; + case 7: + PDMA->TOC6_7 = (PDMA->TOC6_7 & ~PDMA_TOC6_7_TOC7_Msk) | (u32TimeOutCnt << PDMA_TOC6_7_TOC7_Pos); + break; + + default: + ; + } +} + +/** + * @brief Trigger PDMA + * + * @param[in] u32Ch The selected channel + * + * @return None + * + * @details This function trigger the selected channel. + */ +void PDMA_Trigger(uint32_t u32Ch) +{ + if(u32ChSelect[u32Ch] == PDMA_MEM) + PDMA->SWREQ = (1 << u32Ch); +} + +/** + * @brief Enable Interrupt + * + * @param[in] u32Ch The selected channel + * @param[in] u32Mask The Interrupt Type. Valid values are + * - \ref PDMA_INT_TRANS_DONE + * - \ref PDMA_INT_TEMPTY + * - \ref PDMA_INT_TIMEOUT + * + * @return None + * + * @details This function enable the selected channel interrupt. + * @note PDMA_INT_TIMEOUT is only supported in M45xD/M45xC. + */ +void PDMA_EnableInt(uint32_t u32Ch, uint32_t u32Mask) +{ + switch(u32Mask) + { + case PDMA_INT_TRANS_DONE: + PDMA->INTEN |= (1 << u32Ch); + break; + case PDMA_INT_TEMPTY: + PDMA->DSCT[u32Ch].CTL &= ~PDMA_DSCT_CTL_TBINTDIS_Msk; + break; + case PDMA_INT_TIMEOUT: + PDMA->TOUTIEN |= (1 << u32Ch); + break; + + default: + ; + } +} + +/** + * @brief Disable Interrupt + * + * @param[in] u32Ch The selected channel + * @param[in] u32Mask The Interrupt Type. Valid values are + * - \ref PDMA_INT_TRANS_DONE + * - \ref PDMA_INT_TEMPTY + * - \ref PDMA_INT_TIMEOUT + * + * @return None + * + * @details This function disable the selected channel interrupt. + * @note PDMA_INT_TIMEOUT is only supported in M45xD/M45xC. + */ +void PDMA_DisableInt(uint32_t u32Ch, uint32_t u32Mask) +{ + switch(u32Mask) + { + case PDMA_INT_TRANS_DONE: + PDMA->INTEN &= ~(1 << u32Ch); + break; + case PDMA_INT_TEMPTY: + PDMA->DSCT[u32Ch].CTL |= PDMA_DSCT_CTL_TBINTDIS_Msk; + break; + case PDMA_INT_TIMEOUT: + PDMA->TOUTIEN &= ~(1 << u32Ch); + break; + + default: + ; + } +} + +/*@}*/ /* end of group PDMA_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group PDMA_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +/*** (C) COPYRIGHT 2014~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_pdma.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_pdma.h new file mode 100644 index 00000000000..7ca4b45a9e4 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_pdma.h @@ -0,0 +1,300 @@ +/**************************************************************************//** + * @file pdma.h + * @version V1.00 + * $Revision: 15 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series PDMA driver header file + * + * @note + * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved. + *****************************************************************************/ +#ifndef __PDMA_H__ +#define __PDMA_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup PDMA_Driver PDMA Driver + @{ +*/ + +/** @addtogroup PDMA_EXPORTED_CONSTANTS PDMA Exported Constants + @{ +*/ +#define PDMA_CH_MAX 12 /*!< Specify Maximum Channels of PDMA \hideinitializer */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* Operation Mode Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define PDMA_OP_STOP 0x00000000UL /*!INTSTS)) + +/** + * @brief Get Transfer Done Interrupt Status + * + * @param[in] None + * + * @return None + * + * @details Get the transfer done Interrupt status. + */ +#define PDMA_GET_TD_STS() ((uint32_t)(PDMA->TDSTS)) + +/** + * @brief Clear Transfer Done Interrupt Status + * + * @param[in] u32Mask The channel mask + * + * @return None + * + * @details Clear the transfer done Interrupt status. + */ +#define PDMA_CLR_TD_FLAG(u32Mask) ((uint32_t)(PDMA->TDSTS = (u32Mask))) + +/** + * @brief Get Target Abort Interrupt Status + * + * @param[in] None + * + * @return None + * + * @details Get the target abort Interrupt status. + */ +#define PDMA_GET_ABORT_STS() ((uint32_t)(PDMA->ABTSTS)) + +/** + * @brief Clear Target Abort Interrupt Status + * + * @param[in] u32Mask The channel mask + * + * @return None + * + * @details Clear the target abort Interrupt status. + */ +#define PDMA_CLR_ABORT_FLAG(u32Mask) ((uint32_t)(PDMA->ABTSTS = (u32Mask))) + +/** + * @brief Get Scatter-Gather Table Empty Interrupt Status + * + * @param[in] None + * + * @return None + * + * @details Get the scatter-gather table empty Interrupt status. + */ +#define PDMA_GET_EMPTY_STS() ((uint32_t)(PDMA->SCATSTS)) + +/** + * @brief Clear Scatter-Gather Table Empty Interrupt Status + * + * @param[in] u32Mask The channel mask + * + * @return None + * + * @details Clear the scatter-gather table empty Interrupt status. + */ +#define PDMA_CLR_EMPTY_FLAG(u32Mask) ((uint32_t)(PDMA->SCATSTS = (u32Mask))) + +/** + * @brief Clear Timeout Interrupt Status + * + * @param[in] u32Ch The selected channel + * + * @return None + * + * @details Clear the selected channel timeout interrupt status. + * @note This function is only supported in M45xD/M45xC. + */ +#define PDMA_CLR_TMOUT_FLAG(u32Ch) ((uint32_t)(PDMA->INTSTS = (1 << ((u32Ch) + 8)))) + +/** + * @brief Check Channel Status + * + * @param[in] u32Ch The selected channel + * + * @retval 0 Idle state + * @retval 1 Busy state + * + * @details Check the selected channel is busy or not. + */ +#define PDMA_IS_CH_BUSY(u32Ch) ((uint32_t)(PDMA->TRGSTS & (1 << (u32Ch)))? 1 : 0) + +/** + * @brief Set Source Address + * + * @param[in] u32Ch The selected channel + * @param[in] u32Addr The selected address + * + * @return None + * + * @details This macro set the selected channel source address. + */ +#define PDMA_SET_SRC_ADDR(u32Ch, u32Addr) ((uint32_t)(PDMA->DSCT[(u32Ch)].SA = (u32Addr))) + +/** + * @brief Set Destination Address + * + * @param[in] u32Ch The selected channel + * @param[in] u32Addr The selected address + * + * @return None + * + * @details This macro set the selected channel destination address. + */ +#define PDMA_SET_DST_ADDR(u32Ch, u32Addr) ((uint32_t)(PDMA->DSCT[(u32Ch)].DA = (u32Addr))) + +/** + * @brief Set Transfer Count + * + * @param[in] u32Ch The selected channel + * @param[in] u32TransCount Transfer Count + * + * @return None + * + * @details This macro set the selected channel transfer count. + */ +#define PDMA_SET_TRANS_CNT(u32Ch, u32TransCount) ((uint32_t)(PDMA->DSCT[(u32Ch)].CTL=(PDMA->DSCT[(u32Ch)].CTL&~PDMA_DSCT_CTL_TXCNT_Msk)|((u32TransCount-1) << PDMA_DSCT_CTL_TXCNT_Pos))) + +/** + * @brief Set Scatter-gather descriptor Address + * + * @param[in] u32Ch The selected channel + * @param[in] u32Addr The descriptor address + * + * @return None + * + * @details This macro set the selected channel scatter-gather descriptor address. + */ +#define PDMA_SET_SCATTER_DESC(u32Ch, u32Addr) ((uint32_t)(PDMA->DSCT[(u32Ch)].NEXT = (u32Addr) - (PDMA->SCATBA))) + +/** + * @brief Stop the channel + * + * @param[in] u32Ch The selected channel + * + * @return None + * + * @details This macro stop the selected channel. + */ +#define PDMA_STOP(u32Ch) ((uint32_t)(PDMA->STOP = (1 << (u32Ch)))) + +/*---------------------------------------------------------------------------------------------------------*/ +/* Define PWM functions prototype */ +/*---------------------------------------------------------------------------------------------------------*/ +void PDMA_Open(uint32_t u32Mask); +void PDMA_Close(void); +void PDMA_SetTransferCnt(uint32_t u32Ch, uint32_t u32Width, uint32_t u32TransCount); +void PDMA_SetTransferAddr(uint32_t u32Ch, uint32_t u32SrcAddr, uint32_t u32SrcCtrl, uint32_t u32DstAddr, uint32_t u32DstCtrl); +void PDMA_SetTransferMode(uint32_t u32Ch, uint32_t u32Peripheral, uint32_t u32ScatterEn, uint32_t u32DescAddr); +void PDMA_SetBurstType(uint32_t u32Ch, uint32_t u32BurstType, uint32_t u32BurstSize); +void PDMA_EnableTimeout(uint32_t u32Mask); +void PDMA_DisableTimeout(uint32_t u32Mask); +void PDMA_SetTimeOut(uint32_t u32Ch, uint32_t u32OnOff, uint32_t u32TimeOutCnt); +void PDMA_Trigger(uint32_t u32Ch); +void PDMA_EnableInt(uint32_t u32Ch, uint32_t u32Mask); +void PDMA_DisableInt(uint32_t u32Ch, uint32_t u32Mask); + + +/*@}*/ /* end of group PDMA_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group PDMA_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +#ifdef __cplusplus +} +#endif + +#endif //__PDMA_H__ + +/*** (C) COPYRIGHT 2014~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_pwm.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_pwm.c new file mode 100644 index 00000000000..f579cccabfe --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_pwm.c @@ -0,0 +1,1375 @@ +/**************************************************************************//** + * @file pwm.c + * @version V3.00 + * $Revision: 21 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series PWM driver source file + * + * @note + * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ +#include "M451Series.h" + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup PWM_Driver PWM Driver + @{ +*/ + + +/** @addtogroup PWM_EXPORTED_FUNCTIONS PWM Exported Functions + @{ +*/ + +/** + * @brief Configure PWM capture and get the nearest unit time. + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @param[in] u32UnitTimeNsec The unit time of counter + * @param[in] u32CaptureEdge The condition to latch the counter. This parameter is not used + * @return The nearest unit time in nano second. + * @details This function is used to Configure PWM capture and get the nearest unit time. + */ +uint32_t PWM_ConfigCaptureChannel(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32UnitTimeNsec, uint32_t u32CaptureEdge) +{ + uint32_t u32Src; + uint32_t u32PWMClockSrc; + uint32_t u32NearestUnitTimeNsec; + uint16_t u16Prescale = 1, u16CNR = 0xFFFF; + + if(pwm == PWM0) + u32Src = CLK->CLKSEL2 & CLK_CLKSEL2_PWM0SEL_Msk; + else//(pwm == PWM1) + u32Src = CLK->CLKSEL2 & CLK_CLKSEL2_PWM1SEL_Msk; + + if(u32Src == 0) + { + //clock source is from PLL clock + u32PWMClockSrc = CLK_GetPLLClockFreq(); + } + else + { + //clock source is from PCLK + SystemCoreClockUpdate(); + u32PWMClockSrc = SystemCoreClock; + } + + u32PWMClockSrc /= 1000; + for(u16Prescale = 1; u16Prescale <= 0x1000; u16Prescale++) + { + u32NearestUnitTimeNsec = (1000000 * u16Prescale) / u32PWMClockSrc; + if(u32NearestUnitTimeNsec < u32UnitTimeNsec) + { + if(u16Prescale == 0x1000) //limit to the maximum unit time(nano second) + break; + if(!((1000000 * (u16Prescale + 1) > (u32NearestUnitTimeNsec * u32PWMClockSrc)))) + break; + continue; + } + break; + } + + // convert to real register value + // every two channels share a prescaler + PWM_SET_PRESCALER(pwm, u32ChannelNum, --u16Prescale); + + // set PWM to down count type(edge aligned) + (pwm)->CTL1 = ((pwm)->CTL1 & ~(PWM_CTL1_CNTTYPE0_Msk << (2 * u32ChannelNum))) | (1UL << (2 * u32ChannelNum)); + // set PWM to auto-reload mode + (pwm)->CTL1 &= ~(PWM_CTL1_CNTMODE0_Msk << u32ChannelNum); + PWM_SET_CNR(pwm, u32ChannelNum, u16CNR); + + return (u32NearestUnitTimeNsec); +} + +/** + * @brief This function Configure PWM generator and get the nearest frequency in edge aligned auto-reload mode + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @param[in] u32Frequency Target generator frequency + * @param[in] u32DutyCycle Target generator duty cycle percentage. Valid range are between 0 ~ 100. 10 means 10%, 20 means 20%... + * @return Nearest frequency clock in nano second + * @note Since every two channels, (0 & 1), (2 & 3), shares a prescaler. Call this API to configure PWM frequency may affect + * existing frequency of other channel. + */ +uint32_t PWM_ConfigOutputChannel (PWM_T *pwm, + uint32_t u32ChannelNum, + uint32_t u32Frequency, + uint32_t u32DutyCycle) +{ + return PWM_ConfigOutputChannel2(pwm, u32ChannelNum, u32Frequency, u32DutyCycle, 1); +} + +/** + * @brief This function config PWM generator and get the nearest frequency in edge aligned auto-reload mode + * @param[in] pwm The base address of PWM module + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @param[in] u32Frequency Target generator frequency = u32Frequency / u32Frequency2 + * @param[in] u32DutyCycle Target generator duty cycle percentage. Valid range are between 0 ~ 100. 10 means 10%, 20 means 20%... + * @param[in] u32Frequency2 Target generator frequency = u32Frequency / u32Frequency2 + * @return Nearest frequency clock in nano second + * @note Since every two channels, (0 & 1), (2 & 3), (4 & 5), shares a prescaler. Call this API to configure PWM frequency may affect + * existing frequency of other channel. + */ +uint32_t PWM_ConfigOutputChannel2(PWM_T *pwm, + uint32_t u32ChannelNum, + uint32_t u32Frequency, + uint32_t u32DutyCycle, + uint32_t u32Frequency2) +{ + uint32_t u32Src; + uint32_t u32PWMClockSrc; + uint32_t i; + uint16_t u16Prescale = 1, u16CNR = 0xFFFF; + + if(pwm == PWM0) + u32Src = CLK->CLKSEL2 & CLK_CLKSEL2_PWM0SEL_Msk; + else//(pwm == PWM1) + u32Src = CLK->CLKSEL2 & CLK_CLKSEL2_PWM1SEL_Msk; + + if(u32Src == 0) + { + //clock source is from PLL clock + u32PWMClockSrc = CLK_GetPLLClockFreq(); + } + else + { + //clock source is from PCLK + SystemCoreClockUpdate(); + u32PWMClockSrc = SystemCoreClock; + } + + for(u16Prescale = 1; u16Prescale < 0xFFF; u16Prescale++)//prescale could be 0~0xFFF + { + // Note: Support frequency < 1 + i = (uint64_t) u32PWMClockSrc * u32Frequency2 / u32Frequency / u16Prescale; + // If target value is larger than CNR, need to use a larger prescaler + if(i > (0x10000)) + continue; + + u16CNR = i; + break; + } + // Store return value here 'cos we're gonna change u16Prescale & u16CNR to the real value to fill into register + i = u32PWMClockSrc / (u16Prescale * u16CNR); + + // convert to real register value + // every two channels share a prescaler + PWM_SET_PRESCALER(pwm, u32ChannelNum, --u16Prescale); + // set PWM to down count type(edge aligned) + (pwm)->CTL1 = ((pwm)->CTL1 & ~(PWM_CTL1_CNTTYPE0_Msk << (2 * u32ChannelNum))) | (1UL << (2 * u32ChannelNum)); + // set PWM to auto-reload mode + (pwm)->CTL1 &= ~(PWM_CTL1_CNTMODE0_Msk << u32ChannelNum); + + PWM_SET_CNR(pwm, u32ChannelNum, --u16CNR); + if(u32DutyCycle) + { + PWM_SET_CMR(pwm, u32ChannelNum, u32DutyCycle * (u16CNR + 1) / 100 - 1); + (pwm)->WGCTL0 &= ~((PWM_WGCTL0_PRDPCTL0_Msk | PWM_WGCTL0_ZPCTL0_Msk) << (u32ChannelNum * 2)); + (pwm)->WGCTL0 |= (PWM_OUTPUT_LOW << (u32ChannelNum * 2 + PWM_WGCTL0_PRDPCTL0_Pos)); + (pwm)->WGCTL1 &= ~((PWM_WGCTL1_CMPDCTL0_Msk | PWM_WGCTL1_CMPUCTL0_Msk) << (u32ChannelNum * 2)); + (pwm)->WGCTL1 |= (PWM_OUTPUT_HIGH << (u32ChannelNum * 2 + PWM_WGCTL1_CMPDCTL0_Pos)); + } + else + { + PWM_SET_CMR(pwm, u32ChannelNum, 0); + (pwm)->WGCTL0 &= ~((PWM_WGCTL0_PRDPCTL0_Msk | PWM_WGCTL0_ZPCTL0_Msk) << (u32ChannelNum * 2)); + (pwm)->WGCTL0 |= (PWM_OUTPUT_LOW << (u32ChannelNum * 2 + PWM_WGCTL0_ZPCTL0_Pos)); + (pwm)->WGCTL1 &= ~((PWM_WGCTL1_CMPDCTL0_Msk | PWM_WGCTL1_CMPUCTL0_Msk) << (u32ChannelNum * 2)); + (pwm)->WGCTL1 |= (PWM_OUTPUT_HIGH << (u32ChannelNum * 2 + PWM_WGCTL1_CMPDCTL0_Pos)); + } + + return(i); +} + +/** + * @brief Start PWM module + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel. + * Bit 0 is channel 0, bit 1 is channel 1... + * @return None + * @details This function is used to start PWM module. + */ +void PWM_Start(PWM_T *pwm, uint32_t u32ChannelMask) +{ + (pwm)->CNTEN |= u32ChannelMask; +} + +/** + * @brief Stop PWM module + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel. + * Bit 0 is channel 0, bit 1 is channel 1... + * @return None + * @details This function is used to stop PWM module. + */ +void PWM_Stop(PWM_T *pwm, uint32_t u32ChannelMask) +{ + uint32_t i; + for(i = 0; i < PWM_CHANNEL_NUM; i ++) + { + if(u32ChannelMask & (1 << i)) + { + (pwm)->PERIOD[i] = 0; + } + } +} + +/** + * @brief Stop PWM generation immediately by clear channel enable bit + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel. + * Bit 0 is channel 0, bit 1 is channel 1... + * @return None + * @details This function is used to stop PWM generation immediately by clear channel enable bit. + */ +void PWM_ForceStop(PWM_T *pwm, uint32_t u32ChannelMask) +{ + (pwm)->CNTEN &= ~u32ChannelMask; +} + +/** + * @brief Enable selected channel to trigger EADC + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @param[in] u32Condition The condition to trigger EADC. Combination of following conditions: + * - \ref PWM_TRIGGER_ADC_EVEN_ZERO_POINT + * - \ref PWM_TRIGGER_ADC_EVEN_PERIOD_POINT + * - \ref PWM_TRIGGER_ADC_EVEN_ZERO_OR_PERIOD_POINT + * - \ref PWM_TRIGGER_ADC_EVEN_COMPARE_UP_COUNT_POINT + * - \ref PWM_TRIGGER_ADC_EVEN_COMPARE_DOWN_COUNT_POINT + * - \ref PWM_TRIGGER_ADC_ODD_ZERO_POINT + * - \ref PWM_TRIGGER_ADC_ODD_PERIOD_POINT + * - \ref PWM_TRIGGER_ADC_ODD_ZERO_OR_PERIOD_POINT + * - \ref PWM_TRIGGER_ADC_ODD_COMPARE_UP_COUNT_POINT + * - \ref PWM_TRIGGER_ADC_ODD_COMPARE_DOWN_COUNT_POINT + * - \ref PWM_TRIGGER_ADC_CH_0_FREE_COMPARE_UP_COUNT_POINT + * - \ref PWM_TRIGGER_ADC_CH_0_FREE_COMPARE_DOWN_COUNT_POINT + * - \ref PWM_TRIGGER_ADC_CH_2_FREE_COMPARE_UP_COUNT_POINT + * - \ref PWM_TRIGGER_ADC_CH_2_FREE_COMPARE_DOWN_COUNT_POINT + * - \ref PWM_TRIGGER_ADC_CH_4_FREE_COMPARE_UP_COUNT_POINT + * - \ref PWM_TRIGGER_ADC_CH_4_FREE_COMPARE_DOWN_COUNT_POINT + * @return None + * @details This function is used to enable selected channel to trigger EADC. + */ +void PWM_EnableADCTrigger(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32Condition) +{ + if(u32ChannelNum < 4) + { + (pwm)->EADCTS0 &= ~((PWM_EADCTS0_TRGSEL0_Msk) << (u32ChannelNum * 8)); + (pwm)->EADCTS0 |= ((PWM_EADCTS0_TRGEN0_Msk | u32Condition) << (u32ChannelNum * 8)); + } + else + { + (pwm)->EADCTS1 &= ~((PWM_EADCTS1_TRGSEL4_Msk) << ((u32ChannelNum - 4) * 8)); + (pwm)->EADCTS1 |= ((PWM_EADCTS1_TRGEN4_Msk | u32Condition) << ((u32ChannelNum - 4) * 8)); + } +} + +/** + * @brief Disable selected channel to trigger EADC + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @return None + * @details This function is used to disable selected channel to trigger EADC. + */ +void PWM_DisableADCTrigger(PWM_T *pwm, uint32_t u32ChannelNum) +{ + if(u32ChannelNum < 4) + { + (pwm)->EADCTS0 &= ~(PWM_EADCTS0_TRGEN0_Msk << (u32ChannelNum * 8)); + } + else + { + (pwm)->EADCTS1 &= ~(PWM_EADCTS1_TRGEN4_Msk << ((u32ChannelNum - 4) * 8)); + } +} + +/** + * @brief Clear selected channel trigger EADC flag + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @param[in] u32Condition This parameter is not used + * @return None + * @details This function is used to clear selected channel trigger EADC flag. + */ +void PWM_ClearADCTriggerFlag(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32Condition) +{ + (pwm)->STATUS = (PWM_STATUS_ADCTRGF0_Msk << u32ChannelNum); +} + +/** + * @brief Get selected channel trigger EADC flag + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @retval 0 The specified channel trigger EADC to start of conversion flag is not set + * @retval 1 The specified channel trigger EADC to start of conversion flag is set + * @details This function is used to get PWM trigger EADC to start of conversion flag for specified channel. + */ +uint32_t PWM_GetADCTriggerFlag(PWM_T *pwm, uint32_t u32ChannelNum) +{ + return (((pwm)->STATUS & (PWM_STATUS_ADCTRGF0_Msk << u32ChannelNum)) ? 1 : 0); +} + +/** + * @brief Enable selected channel to trigger DAC + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @param[in] u32Condition The condition to trigger DAC. Combination of following conditions: + * - \ref PWM_TRIGGER_DAC_ZERO_POINT + * - \ref PWM_TRIGGER_DAC_PERIOD_POINT + * - \ref PWM_TRIGGER_DAC_COMPARE_UP_COUNT_POINT + * - \ref PWM_TRIGGER_DAC_COMPARE_DOWN_COUNT_POINT + * @return None + * @details This function is used to enable selected channel to trigger DAC. + */ +void PWM_EnableDACTrigger(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32Condition) +{ + (pwm)->DACTRGEN |= (u32Condition << u32ChannelNum); +} + +/** + * @brief Disable selected channel to trigger DAC + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @return None + * @details This function is used to disable selected channel to trigger DAC. + */ +void PWM_DisableDACTrigger(PWM_T *pwm, uint32_t u32ChannelNum) +{ + (pwm)->DACTRGEN &= ~((PWM_TRIGGER_DAC_ZERO_POINT | PWM_TRIGGER_DAC_PERIOD_POINT | PWM_TRIGGER_DAC_COMPARE_UP_COUNT_POINT | \ + PWM_TRIGGER_DAC_COMPARE_DOWN_COUNT_POINT) << u32ChannelNum); +} + +/** + * @brief Clear selected channel trigger DAC flag + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. This parameter is not used + * @param[in] u32Condition The condition to trigger DAC. This parameter is not used + * @return None + * @details This function is used to clear selected channel trigger DAC flag. + */ +void PWM_ClearDACTriggerFlag(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32Condition) +{ + (pwm)->STATUS = PWM_STATUS_DACTRGF_Msk; +} + +/** + * @brief Get selected channel trigger DAC flag + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. This parameter is not used + * @retval 0 The specified channel trigger DAC to start of conversion flag is not set + * @retval 1 The specified channel trigger DAC to start of conversion flag is set + * @details This function is used to get selected channel trigger DAC flag. + */ +uint32_t PWM_GetDACTriggerFlag(PWM_T *pwm, uint32_t u32ChannelNum) +{ + return (((pwm)->STATUS & PWM_STATUS_DACTRGF_Msk) ? 1 : 0); +} + +/** + * @brief This function enable fault brake of selected channel(s) + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel. + * @param[in] u32LevelMask Output high or low while fault brake occurs, each bit represent the level of a channel + * while fault brake occurs. Bit 0 represents channel 0, bit 1 represents channel 1... + * @param[in] u32BrakeSource Fault brake source, could be one of following source + * - \ref PWM_FB_EDGE_ACMP0 + * - \ref PWM_FB_EDGE_ACMP1 + * - \ref PWM_FB_EDGE_BKP0 + * - \ref PWM_FB_EDGE_BKP1 + * - \ref PWM_FB_EDGE_SYS_CSS + * - \ref PWM_FB_EDGE_SYS_BOD + * - \ref PWM_FB_EDGE_SYS_RAM + * - \ref PWM_FB_EDGE_SYS_COR + * - \ref PWM_FB_LEVEL_ACMP0 + * - \ref PWM_FB_LEVEL_ACMP1 + * - \ref PWM_FB_LEVEL_BKP0 + * - \ref PWM_FB_LEVEL_BKP1 + * - \ref PWM_FB_LEVEL_SYS_CSS + * - \ref PWM_FB_LEVEL_SYS_BOD + * - \ref PWM_FB_LEVEL_SYS_RAM + * - \ref PWM_FB_LEVEL_SYS_COR + * @return None + * @details This function is used to enable fault brake of selected channel(s). + * The write-protection function should be disabled before using this function. + */ +void PWM_EnableFaultBrake(PWM_T *pwm, uint32_t u32ChannelMask, uint32_t u32LevelMask, uint32_t u32BrakeSource) +{ + uint32_t i; + for(i = 0; i < PWM_CHANNEL_NUM; i ++) + { + if(u32ChannelMask & (1 << i)) + { + if((u32BrakeSource == PWM_FB_EDGE_SYS_CSS) || (u32BrakeSource == PWM_FB_EDGE_SYS_BOD) || \ + (u32BrakeSource == PWM_FB_EDGE_SYS_RAM) || (u32BrakeSource == PWM_FB_EDGE_SYS_COR) || \ + (u32BrakeSource == PWM_FB_LEVEL_SYS_CSS) || (u32BrakeSource == PWM_FB_LEVEL_SYS_BOD) || \ + (u32BrakeSource == PWM_FB_LEVEL_SYS_RAM) || (u32BrakeSource == PWM_FB_LEVEL_SYS_COR)) + { + *(__IO uint32_t *)(&((pwm)->BRKCTL0_1) + (i >> 1)) |= (u32BrakeSource & (PWM_BRKCTL0_1_SYSEBEN_Msk | PWM_BRKCTL0_1_SYSLBEN_Msk)); + (pwm)->FAILBRK |= (u32BrakeSource & 0xF); + } + else + { + *(__IO uint32_t *)(&((pwm)->BRKCTL0_1) + (i >> 1)) |= u32BrakeSource; + } + } + + if(u32LevelMask & (1 << i)) + { + if(i % 2 == 0) + { + //set brake action as high level for even channel + *(__IO uint32_t *)(&((pwm)->BRKCTL0_1) + (i >> 1)) &= ~PWM_BRKCTL0_1_BRKAEVEN_Msk; + *(__IO uint32_t *)(&((pwm)->BRKCTL0_1) + (i >> 1)) |= ((3UL) << PWM_BRKCTL0_1_BRKAEVEN_Pos); + } + else + { + //set brake action as high level for odd channel + *(__IO uint32_t *)(&((pwm)->BRKCTL0_1) + (i >> 1)) &= ~PWM_BRKCTL0_1_BRKAODD_Msk; + *(__IO uint32_t *)(&((pwm)->BRKCTL0_1) + (i >> 1)) |= ((3UL) << PWM_BRKCTL0_1_BRKAODD_Pos); + } + } + else + { + if(i % 2 == 0) + { + //set brake action as low level for even channel + *(__IO uint32_t *)(&((pwm)->BRKCTL0_1) + (i >> 1)) &= ~PWM_BRKCTL0_1_BRKAEVEN_Msk; + *(__IO uint32_t *)(&((pwm)->BRKCTL0_1) + (i >> 1)) |= ((2UL) << PWM_BRKCTL0_1_BRKAEVEN_Pos); + } + else + { + //set brake action as low level for odd channel + *(__IO uint32_t *)(&((pwm)->BRKCTL0_1) + (i >> 1)) &= ~PWM_BRKCTL0_1_BRKAODD_Msk; + *(__IO uint32_t *)(&((pwm)->BRKCTL0_1) + (i >> 1)) |= ((2UL) << PWM_BRKCTL0_1_BRKAODD_Pos); + } + } + } + +} + +/** + * @brief Enable capture of selected channel(s) + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel. + * Bit 0 is channel 0, bit 1 is channel 1... + * @return None + * @details This function is used to enable capture of selected channel(s). + */ +void PWM_EnableCapture(PWM_T *pwm, uint32_t u32ChannelMask) +{ + (pwm)->CAPINEN |= u32ChannelMask; + (pwm)->CAPCTL |= u32ChannelMask; +} + +/** + * @brief Disable capture of selected channel(s) + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel. + * Bit 0 is channel 0, bit 1 is channel 1... + * @return None + * @details This function is used to disable capture of selected channel(s). + */ +void PWM_DisableCapture(PWM_T *pwm, uint32_t u32ChannelMask) +{ + (pwm)->CAPINEN &= ~u32ChannelMask; + (pwm)->CAPCTL &= ~u32ChannelMask; +} + +/** + * @brief Enables PWM output generation of selected channel(s) + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel. + * Set bit 0 to 1 enables channel 0 output, set bit 1 to 1 enables channel 1 output... + * @return None + * @details This function is used to enable PWM output generation of selected channel(s). + */ +void PWM_EnableOutput(PWM_T *pwm, uint32_t u32ChannelMask) +{ + (pwm)->POEN |= u32ChannelMask; +} + +/** + * @brief Disables PWM output generation of selected channel(s) + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel + * Set bit 0 to 1 disables channel 0 output, set bit 1 to 1 disables channel 1 output... + * @return None + * @details This function is used to disable PWM output generation of selected channel(s). + */ +void PWM_DisableOutput(PWM_T *pwm, uint32_t u32ChannelMask) +{ + (pwm)->POEN &= ~u32ChannelMask; +} + +/** + * @brief Enables PDMA transfer of selected channel for PWM capture + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. + * @param[in] u32RisingFirst The capture order is rising, falling first. Every two channels share the same setting. Valid values are TRUE and FALSE. + * @param[in] u32Mode Captured data transferred by PDMA interrupt type. It could be either + * - \ref PWM_CAPTURE_PDMA_RISING_LATCH + * - \ref PWM_CAPTURE_PDMA_FALLING_LATCH + * - \ref PWM_CAPTURE_PDMA_RISING_FALLING_LATCH + * @return None + * @details This function is used to enable PDMA transfer of selected channel(s) for PWM capture. + * @note This function can only selects even or odd channel of pairs to do PDMA transfer. + */ +void PWM_EnablePDMA(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32RisingFirst, uint32_t u32Mode) +{ + uint32_t u32IsOddCh; + u32IsOddCh = u32ChannelNum % 2; + (pwm)->PDMACTL = ((pwm)->PDMACTL & ~((PWM_PDMACTL_CHSEL0_1_Msk | PWM_PDMACTL_CAPORD0_1_Msk | PWM_PDMACTL_CAPMOD0_1_Msk) << ((u32ChannelNum >> 1) * 8))) | \ + (((u32IsOddCh << PWM_PDMACTL_CHSEL0_1_Pos) | (u32RisingFirst << PWM_PDMACTL_CAPORD0_1_Pos) | \ + u32Mode | PWM_PDMACTL_CHEN0_1_Msk) << ((u32ChannelNum >> 1) * 8)); +} + +/** + * @brief Disables PDMA transfer of selected channel for PWM capture + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. + * @return None + * @details This function is used to enable PDMA transfer of selected channel(s) for PWM capture. + */ +void PWM_DisablePDMA(PWM_T *pwm, uint32_t u32ChannelNum) +{ + (pwm)->PDMACTL &= ~(PWM_PDMACTL_CHEN0_1_Msk << ((u32ChannelNum >> 1) * 8)); +} + +/** + * @brief Enable Dead zone of selected channel + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @param[in] u32Duration Dead zone length in PWM clock count, valid values are between 0~0xFFF, but 0 means there is no Dead zone. + * @return None + * @details This function is used to enable Dead zone of selected channel. + * The write-protection function should be disabled before using this function. + * @note Every two channels share the same setting. + */ +void PWM_EnableDeadZone(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32Duration) +{ + // every two channels share the same setting + *(__IO uint32_t *)(&((pwm)->DTCTL0_1) + (u32ChannelNum >> 1)) &= ~PWM_DTCTL0_1_DTCNT_Msk; + *(__IO uint32_t *)(&((pwm)->DTCTL0_1) + (u32ChannelNum >> 1)) |= PWM_DTCTL0_1_DTEN_Msk | u32Duration; +} + +/** + * @brief Disable Dead zone of selected channel + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @return None + * @details This function is used to disable Dead zone of selected channel. + * The write-protection function should be disabled before using this function. + */ +void PWM_DisableDeadZone(PWM_T *pwm, uint32_t u32ChannelNum) +{ + // every two channels shares the same setting + *(__IO uint32_t *)(&((pwm)->DTCTL0_1) + (u32ChannelNum >> 1)) &= ~PWM_DTCTL0_1_DTEN_Msk; +} + +/** + * @brief Enable capture interrupt of selected channel. + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @param[in] u32Edge Rising or falling edge to latch counter. + * - \ref PWM_CAPTURE_INT_RISING_LATCH + * - \ref PWM_CAPTURE_INT_FALLING_LATCH + * @return None + * @details This function is used to enable capture interrupt of selected channel. + */ +void PWM_EnableCaptureInt(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32Edge) +{ + (pwm)->CAPIEN |= (u32Edge << u32ChannelNum); +} + +/** + * @brief Disable capture interrupt of selected channel. + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @param[in] u32Edge Rising or falling edge to latch counter. + * - \ref PWM_CAPTURE_INT_RISING_LATCH + * - \ref PWM_CAPTURE_INT_FALLING_LATCH + * @return None + * @details This function is used to disable capture interrupt of selected channel. + */ +void PWM_DisableCaptureInt(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32Edge) +{ + (pwm)->CAPIEN &= ~(u32Edge << u32ChannelNum); +} + +/** + * @brief Clear capture interrupt of selected channel. + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @param[in] u32Edge Rising or falling edge to latch counter. + * - \ref PWM_CAPTURE_INT_RISING_LATCH + * - \ref PWM_CAPTURE_INT_FALLING_LATCH + * @return None + * @details This function is used to clear capture interrupt of selected channel. + */ +void PWM_ClearCaptureIntFlag(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32Edge) +{ + (pwm)->CAPIF = (u32Edge << u32ChannelNum); +} + +/** + * @brief Get capture interrupt of selected channel. + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @retval 0 No capture interrupt + * @retval 1 Rising edge latch interrupt + * @retval 2 Falling edge latch interrupt + * @retval 3 Rising and falling latch interrupt + * @details This function is used to get capture interrupt of selected channel. + */ +uint32_t PWM_GetCaptureIntFlag(PWM_T *pwm, uint32_t u32ChannelNum) +{ + return (((((pwm)->CAPIF & (PWM_CAPIF_CFLIF0_Msk << u32ChannelNum)) ? 1 : 0) << 1) | \ + (((pwm)->CAPIF & (PWM_CAPIF_CRLIF0_Msk << u32ChannelNum)) ? 1 : 0)); +} +/** + * @brief Enable duty interrupt of selected channel + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @param[in] u32IntDutyType Duty interrupt type, could be either + * - \ref PWM_DUTY_INT_DOWN_COUNT_MATCH_CMP + * - \ref PWM_DUTY_INT_UP_COUNT_MATCH_CMP + * @return None + * @details This function is used to enable duty interrupt of selected channel. + */ +void PWM_EnableDutyInt(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32IntDutyType) +{ + (pwm)->INTEN0 |= (u32IntDutyType << u32ChannelNum); +} + +/** + * @brief Disable duty interrupt of selected channel + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @return None + * @details This function is used to disable duty interrupt of selected channel. + */ +void PWM_DisableDutyInt(PWM_T *pwm, uint32_t u32ChannelNum) +{ + (pwm)->INTEN0 &= ~((PWM_DUTY_INT_DOWN_COUNT_MATCH_CMP | PWM_DUTY_INT_UP_COUNT_MATCH_CMP) << u32ChannelNum); +} + +/** + * @brief Clear duty interrupt flag of selected channel + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @return None + * @details This function is used to clear duty interrupt flag of selected channel. + */ +void PWM_ClearDutyIntFlag(PWM_T *pwm, uint32_t u32ChannelNum) +{ + (pwm)->INTSTS0 = (PWM_INTSTS0_CMPUIF0_Msk | PWM_INTSTS0_CMPDIF0_Msk) << u32ChannelNum; +} + +/** + * @brief Get duty interrupt flag of selected channel + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @return Duty interrupt flag of specified channel + * @retval 0 Duty interrupt did not occur + * @retval 1 Duty interrupt occurred + * @details This function is used to get duty interrupt flag of selected channel. + */ +uint32_t PWM_GetDutyIntFlag(PWM_T *pwm, uint32_t u32ChannelNum) +{ + return ((((pwm)->INTSTS0 & ((PWM_INTSTS0_CMPDIF0_Msk | PWM_INTSTS0_CMPUIF0_Msk) << u32ChannelNum))) ? 1 : 0); +} + +/** + * @brief This function enable fault brake interrupt + * @param[in] pwm The pointer of the specified PWM module + * @param[in] u32BrakeSource Fault brake source. + * - \ref PWM_FB_EDGE + * - \ref PWM_FB_LEVEL + * @return None + * @details This function is used to enable fault brake interrupt. + * The write-protection function should be disabled before using this function. + * @note Every two channels share the same setting. + */ +void PWM_EnableFaultBrakeInt(PWM_T *pwm, uint32_t u32BrakeSource) +{ + (pwm)->INTEN1 |= (0x7 << u32BrakeSource); +} + +/** + * @brief This function disable fault brake interrupt + * @param[in] pwm The pointer of the specified PWM module + * @param[in] u32BrakeSource Fault brake source. + * - \ref PWM_FB_EDGE + * - \ref PWM_FB_LEVEL + * @return None + * @details This function is used to disable fault brake interrupt. + * The write-protection function should be disabled before using this function. + * @note Every two channels share the same setting. + */ +void PWM_DisableFaultBrakeInt(PWM_T *pwm, uint32_t u32BrakeSource) +{ + (pwm)->INTEN1 &= ~(0x7 << u32BrakeSource); +} + +/** + * @brief This function clear fault brake interrupt of selected source + * @param[in] pwm The pointer of the specified PWM module + * @param[in] u32BrakeSource Fault brake source. + * - \ref PWM_FB_EDGE + * - \ref PWM_FB_LEVEL + * @return None + * @details This function is used to clear fault brake interrupt of selected source. + * The write-protection function should be disabled before using this function. + */ +void PWM_ClearFaultBrakeIntFlag(PWM_T *pwm, uint32_t u32BrakeSource) +{ + (pwm)->INTSTS1 = (0x3f << u32BrakeSource); +} + +/** + * @brief This function get fault brake interrupt flag of selected source + * @param[in] pwm The pointer of the specified PWM module + * @param[in] u32BrakeSource Fault brake source, could be either + * - \ref PWM_FB_EDGE + * - \ref PWM_FB_LEVEL + * @return Fault brake interrupt flag of specified source + * @retval 0 Fault brake interrupt did not occurred + * @retval 1 Fault brake interrupt occurred + * @details This function is used to get fault brake interrupt flag of selected source. + */ +uint32_t PWM_GetFaultBrakeIntFlag(PWM_T *pwm, uint32_t u32BrakeSource) +{ + return (((pwm)->INTSTS1 & (0x3f << u32BrakeSource)) ? 1 : 0); +} + +/** + * @brief Enable period interrupt of selected channel + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @param[in] u32IntPeriodType Period interrupt type. This parameter is not used. + * @return None + * @details This function is used to enable period interrupt of selected channel. + */ +void PWM_EnablePeriodInt(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32IntPeriodType) +{ + (pwm)->INTEN0 |= (PWM_INTEN0_PIEN0_Msk << u32ChannelNum); +} + +/** + * @brief Disable period interrupt of selected channel + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @return None + * @details This function is used to disable period interrupt of selected channel. + */ +void PWM_DisablePeriodInt(PWM_T *pwm, uint32_t u32ChannelNum) +{ + (pwm)->INTEN0 &= ~(PWM_INTEN0_PIEN0_Msk << u32ChannelNum); +} + +/** + * @brief Clear period interrupt of selected channel + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @return None + * @details This function is used to clear period interrupt of selected channel. + */ +void PWM_ClearPeriodIntFlag(PWM_T *pwm, uint32_t u32ChannelNum) +{ + (pwm)->INTSTS0 = (PWM_INTSTS0_PIF0_Msk << u32ChannelNum); +} + +/** + * @brief Get period interrupt of selected channel + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @return Period interrupt flag of specified channel + * @retval 0 Period interrupt did not occur + * @retval 1 Period interrupt occurred + * @details This function is used to get period interrupt of selected channel. + */ +uint32_t PWM_GetPeriodIntFlag(PWM_T *pwm, uint32_t u32ChannelNum) +{ + return ((((pwm)->INTSTS0 & (PWM_INTSTS0_PIF0_Msk << u32ChannelNum))) ? 1 : 0); +} + +/** + * @brief Enable zero interrupt of selected channel + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @return None + * @details This function is used to enable zero interrupt of selected channel. + */ +void PWM_EnableZeroInt(PWM_T *pwm, uint32_t u32ChannelNum) +{ + (pwm)->INTEN0 |= (PWM_INTEN0_ZIEN0_Msk << u32ChannelNum); +} + +/** + * @brief Disable zero interrupt of selected channel + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @return None + * @details This function is used to disable zero interrupt of selected channel. + */ +void PWM_DisableZeroInt(PWM_T *pwm, uint32_t u32ChannelNum) +{ + (pwm)->INTEN0 &= ~(PWM_INTEN0_ZIEN0_Msk << u32ChannelNum); +} + +/** + * @brief Clear zero interrupt of selected channel + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @return None + * @details This function is used to clear zero interrupt of selected channel. + */ +void PWM_ClearZeroIntFlag(PWM_T *pwm, uint32_t u32ChannelNum) +{ + (pwm)->INTSTS0 = (PWM_INTSTS0_ZIF0_Msk << u32ChannelNum); +} + +/** + * @brief Get zero interrupt of selected channel + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @return Zero interrupt flag of specified channel + * @retval 0 Zero interrupt did not occur + * @retval 1 Zero interrupt occurred + * @details This function is used to get zero interrupt of selected channel. + */ +uint32_t PWM_GetZeroIntFlag(PWM_T *pwm, uint32_t u32ChannelNum) +{ + return ((((pwm)->INTSTS0 & (PWM_INTSTS0_ZIF0_Msk << u32ChannelNum))) ? 1 : 0); +} + +/** + * @brief Enable interrupt flag accumulator of selected channel + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @param[in] u32IntFlagCnt Interrupt flag counter. Valid values are between 0~15. + * @param[in] u32IntAccSrc Interrupt flag accumulator source selection. + * - \ref PWM_IFA_EVEN_ZERO_POINT + * - \ref PWM_IFA_EVEN_PERIOD_POINT + * - \ref PWM_IFA_EVEN_COMPARE_UP_COUNT_POINT + * - \ref PWM_IFA_EVEN_COMPARE_DOWN_COUNT_POINT + * - \ref PWM_IFA_ODD_ZERO_POINT + * - \ref PWM_IFA_ODD_PERIOD_POINT + * - \ref PWM_IFA_ODD_COMPARE_UP_COUNT_POINT + * - \ref PWM_IFA_ODD_COMPARE_DOWN_COUNT_POINT + * @return None + * @details This function is used to enable interrupt flag accumulator of selected channel. + * @note Every two channels share the same setting. + */ +void PWM_EnableAcc(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32IntFlagCnt, uint32_t u32IntAccSrc) +{ + (pwm)->IFA = ((pwm)->IFA & ~((PWM_IFA_IFCNT0_1_Msk | PWM_IFA_IFSEL0_1_Msk) << ((u32ChannelNum >> 1) * 8))) | \ + ((PWM_IFA_IFAEN0_1_Msk | (u32IntAccSrc << PWM_IFA_IFSEL0_1_Pos) | u32IntFlagCnt) << ((u32ChannelNum >> 1) * 8)); +} + +/** + * @brief Disable interrupt flag accumulator of selected channel + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @return None + * @details This function is used to Disable interrupt flag accumulator of selected channel. + * @note Every two channels share the same setting. + */ +void PWM_DisableAcc(PWM_T *pwm, uint32_t u32ChannelNum) +{ + (pwm)->IFA = (pwm)->IFA & ~(PWM_IFA_IFAEN0_1_Msk << ((u32ChannelNum >> 1) * 8)); +} + +/** + * @brief Enable interrupt flag accumulator interrupt of selected channel + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @return None + * @details This function is used to enable interrupt flag accumulator interrupt of selected channel. + * @note Every two channels share the same setting. + */ +void PWM_EnableAccInt(PWM_T *pwm, uint32_t u32ChannelNum) +{ + (pwm)->INTEN0 |= (PWM_INTEN0_IFAIEN0_1_Msk << ((u32ChannelNum >> 1) * 8)); +} + +/** + * @brief Disable interrupt flag accumulator interrupt of selected channel + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @return None + * @details This function is used to disable interrupt flag accumulator interrupt of selected channel. + * @note Every two channels share the same setting. + */ +void PWM_DisableAccInt(PWM_T *pwm, uint32_t u32ChannelNum) +{ + (pwm)->INTEN0 &= ~(PWM_INTEN0_IFAIEN0_1_Msk << ((u32ChannelNum >> 1) * 8)); +} + +/** + * @brief Clear interrupt flag accumulator interrupt of selected channel + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @return None + * @details This function is used to clear interrupt flag accumulator interrupt of selected channel. + * @note Every two channels share the same setting. + */ +void PWM_ClearAccInt(PWM_T *pwm, uint32_t u32ChannelNum) +{ + (pwm)->INTSTS0 = (PWM_INTSTS0_IFAIF0_1_Msk << ((u32ChannelNum >> 1) * 8)); +} + +/** + * @brief Get interrupt flag accumulator interrupt of selected channel + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @retval 0 Accumulator interrupt did not occur + * @retval 1 Accumulator interrupt occurred + * @details This function is used to Get interrupt flag accumulator interrupt of selected channel. + * @note Every two channels share the same setting. + */ +uint32_t PWM_GetAccInt(PWM_T *pwm, uint32_t u32ChannelNum) +{ + return (((pwm)->INTSTS0 & (PWM_INTSTS0_IFAIF0_1_Msk << ((u32ChannelNum >> 1) * 8))) ? 1 : 0); +} + +/** + * @brief Clear free trigger duty interrupt flag of selected channel + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @return None + * @details This function is used to clear free trigger duty interrupt flag of selected channel. + */ +void PWM_ClearFTDutyIntFlag(PWM_T *pwm, uint32_t u32ChannelNum) +{ + (pwm)->FTCI = ((PWM_FTCI_FTCMU0_Msk | PWM_FTCI_FTCMD0_Msk) << (u32ChannelNum >> 1)); +} + +/** + * @brief Get free trigger duty interrupt flag of selected channel + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @return Duty interrupt flag of specified channel + * @retval 0 Free trigger duty interrupt did not occur + * @retval 1 Free trigger duty interrupt occurred + * @details This function is used to get free trigger duty interrupt flag of selected channel. + */ +uint32_t PWM_GetFTDutyIntFlag(PWM_T *pwm, uint32_t u32ChannelNum) +{ + return (((pwm)->FTCI & ((PWM_FTCI_FTCMU0_Msk | PWM_FTCI_FTCMD0_Msk) << (u32ChannelNum >> 1))) ? 1 : 0); +} + +/** + * @brief Enable load mode of selected channel + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @param[in] u32LoadMode PWM counter loading mode. + * - \ref PWM_LOAD_MODE_IMMEDIATE + * - \ref PWM_LOAD_MODE_WINDOW + * - \ref PWM_LOAD_MODE_CENTER + * @return None + * @details This function is used to enable load mode of selected channel. + */ +void PWM_EnableLoadMode(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32LoadMode) +{ + (pwm)->CTL0 |= (u32LoadMode << u32ChannelNum); +} + +/** + * @brief Disable load mode of selected channel + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @param[in] u32LoadMode PWM counter loading mode. + * - \ref PWM_LOAD_MODE_IMMEDIATE + * - \ref PWM_LOAD_MODE_WINDOW + * - \ref PWM_LOAD_MODE_CENTER + * @return None + * @details This function is used to disable load mode of selected channel. + */ +void PWM_DisableLoadMode(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32LoadMode) +{ + (pwm)->CTL0 &= ~(u32LoadMode << u32ChannelNum); +} + +/** + * @brief Configure synchronization phase of selected channel + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @param[in] u32SyncSrc PWM synchronize source selection. + * - \ref PWM_SYNC_OUT_FROM_SYNCIN_SWSYNC + * - \ref PWM_SYNC_OUT_FROM_COUNT_TO_ZERO + * - \ref PWM_SYNC_OUT_FROM_COUNT_TO_COMPARATOR + * - \ref PWM_SYNC_OUT_DISABLE + * @param[in] u32Direction Phase direction. Control PWM counter count decrement or increment after synchronizing. + * - \ref PWM_PHS_DIR_DECREMENT + * - \ref PWM_PHS_DIR_INCREMENT + * @param[in] u32StartPhase Synchronous start phase value. Valid values are between 0~65535. + * @return None + * @details This function is used to configure synchronization phase of selected channel. + * @note Every two channels share the same setting. + */ +void PWM_ConfigSyncPhase(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32SyncSrc, uint32_t u32Direction, uint32_t u32StartPhase) +{ + // every two channels shares the same setting + u32ChannelNum >>= 1; + (pwm)->SYNC = (((pwm)->SYNC & ~((PWM_SYNC_SINSRC0_Msk << (u32ChannelNum << 1)) | (PWM_SYNC_PHSDIR0_Msk << u32ChannelNum))) | \ + (u32Direction << PWM_SYNC_PHSDIR0_Pos << u32ChannelNum) | (u32SyncSrc << PWM_SYNC_SINSRC0_Pos) << (u32ChannelNum << 1)); + *(__IO uint32_t *)(&((pwm)->PHS0_1) + u32ChannelNum) = u32StartPhase; +} + + +/** + * @brief Enable SYNC phase of selected channel(s) + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel. + * Bit 0 is channel 0, bit 1 is channel 1... + * @return None + * @details This function is used to enable SYNC phase of selected channel(s). + * @note Every two channels share the same setting. + */ +void PWM_EnableSyncPhase(PWM_T *pwm, uint32_t u32ChannelMask) +{ + uint32_t i; + for(i = 0; i < PWM_CHANNEL_NUM; i ++) + { + if(u32ChannelMask & (1 << i)) + { + (pwm)->SYNC |= (PWM_SYNC_PHSEN0_Msk << (i >> 1)); + } + } +} + +/** + * @brief Disable SYNC phase of selected channel(s) + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel. + * Bit 0 is channel 0, bit 1 is channel 1... + * @return None + * @details This function is used to disable SYNC phase of selected channel(s). + * @note Every two channels share the same setting. + */ +void PWM_DisableSyncPhase(PWM_T *pwm, uint32_t u32ChannelMask) +{ + uint32_t i; + for(i = 0; i < PWM_CHANNEL_NUM; i ++) + { + if(u32ChannelMask & (1 << i)) + { + (pwm)->SYNC &= ~(PWM_SYNC_PHSEN0_Msk << (i >> 1)); + } + } +} + +/** + * @brief Enable PWM SYNC_IN noise filter function + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ClkCnt SYNC Edge Detector Filter Count. This controls the counter number of edge detector. + * The valid value is 0~7. + * @param[in] u32ClkDivSel SYNC Edge Detector Filter Clock Selection. + * - \ref PWM_NF_CLK_DIV_1 + * - \ref PWM_NF_CLK_DIV_2 + * - \ref PWM_NF_CLK_DIV_4 + * - \ref PWM_NF_CLK_DIV_8 + * - \ref PWM_NF_CLK_DIV_16 + * - \ref PWM_NF_CLK_DIV_32 + * - \ref PWM_NF_CLK_DIV_64 + * - \ref PWM_NF_CLK_DIV_128 + * @return None + * @details This function is used to enable PWM SYNC_IN noise filter function. + */ +void PWM_EnableSyncNoiseFilter(PWM_T *pwm, uint32_t u32ClkCnt, uint32_t u32ClkDivSel) +{ + (pwm)->SYNC = ((pwm)->SYNC & ~(PWM_SYNC_SFLTCNT_Msk | PWM_SYNC_SFLTCSEL_Msk)) | \ + ((u32ClkCnt << PWM_SYNC_SFLTCNT_Pos) | (u32ClkDivSel << PWM_SYNC_SFLTCSEL_Pos) | PWM_SYNC_SNFLTEN_Msk); +} + +/** + * @brief Disable PWM SYNC_IN noise filter function + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @return None + * @details This function is used to Disable PWM SYNC_IN noise filter function. + */ +void PWM_DisableSyncNoiseFilter(PWM_T *pwm) +{ + (pwm)->SYNC &= ~PWM_SYNC_SNFLTEN_Msk; +} + +/** + * @brief Enable PWM SYNC input pin inverse function + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @return None + * @details This function is used to enable PWM SYNC input pin inverse function. + */ +void PWM_EnableSyncPinInverse(PWM_T *pwm) +{ + (pwm)->SYNC |= PWM_SYNC_SINPINV_Msk; +} + +/** + * @brief Disable PWM SYNC input pin inverse function + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @return None + * @details This function is used to Disable PWM SYNC input pin inverse function. + */ +void PWM_DisableSyncPinInverse(PWM_T *pwm) +{ + (pwm)->SYNC &= ~PWM_SYNC_SINPINV_Msk; +} + +/** + * @brief Set PWM clock source + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @param[in] u32ClkSrcSel PWM external clock source. + * - \ref PWM_CLKSRC_PWM_CLK + * - \ref PWM_CLKSRC_TIMER0 + * - \ref PWM_CLKSRC_TIMER1 + * - \ref PWM_CLKSRC_TIMER2 + * - \ref PWM_CLKSRC_TIMER3 + * @return None + * @details This function is used to set PWM clock source. + * @note Every two channels share the same setting. + */ +void PWM_SetClockSource(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32ClkSrcSel) +{ + (pwm)->CLKSRC = (pwm)->CLKSRC & ~(PWM_CLKSRC_ECLKSRC0_Msk << ((u32ChannelNum >> 1) * PWM_CLKSRC_ECLKSRC2_Pos)) | \ + (u32ClkSrcSel << ((u32ChannelNum >> 1) * PWM_CLKSRC_ECLKSRC2_Pos)); +} + +/** + * @brief Enable PWM brake noise filter function + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32BrakePinNum Brake pin selection. Valid values are 0 or 1. + * @param[in] u32ClkCnt SYNC Edge Detector Filter Count. This controls the counter number of edge detector + * @param[in] u32ClkDivSel SYNC Edge Detector Filter Clock Selection. + * - \ref PWM_NF_CLK_DIV_1 + * - \ref PWM_NF_CLK_DIV_2 + * - \ref PWM_NF_CLK_DIV_4 + * - \ref PWM_NF_CLK_DIV_8 + * - \ref PWM_NF_CLK_DIV_16 + * - \ref PWM_NF_CLK_DIV_32 + * - \ref PWM_NF_CLK_DIV_64 + * - \ref PWM_NF_CLK_DIV_128 + * @return None + * @details This function is used to enable PWM brake noise filter function. + */ +void PWM_EnableBrakeNoiseFilter(PWM_T *pwm, uint32_t u32BrakePinNum, uint32_t u32ClkCnt, uint32_t u32ClkDivSel) +{ + (pwm)->BNF = ((pwm)->BNF & ~((PWM_BNF_BRK0FCNT_Msk | PWM_BNF_BRK0NFSEL_Msk) << (u32BrakePinNum * PWM_BNF_BRK1NFEN_Pos))) | \ + (((u32ClkCnt << PWM_BNF_BRK0FCNT_Pos) | (u32ClkDivSel << PWM_BNF_BRK0NFSEL_Pos) | PWM_BNF_BRK0NFEN_Msk) << (u32BrakePinNum * PWM_BNF_BRK1NFEN_Pos)); +} + +/** + * @brief Disable PWM brake noise filter function + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32BrakePinNum Brake pin selection. Valid values are 0 or 1. + * @return None + * @details This function is used to disable PWM brake noise filter function. + */ +void PWM_DisableBrakeNoiseFilter(PWM_T *pwm, uint32_t u32BrakePinNum) +{ + (pwm)->BNF &= ~(PWM_BNF_BRK0NFEN_Msk << (u32BrakePinNum * PWM_BNF_BRK1NFEN_Pos)); +} + +/** + * @brief Enable PWM brake pin inverse function + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32BrakePinNum Brake pin selection. Valid values are 0 or 1. + * @return None + * @details This function is used to enable PWM brake pin inverse function. + */ +void PWM_EnableBrakePinInverse(PWM_T *pwm, uint32_t u32BrakePinNum) +{ + (pwm)->BNF |= (PWM_BNF_BRK0PINV_Msk << (u32BrakePinNum * PWM_BNF_BRK1NFEN_Pos)); +} + +/** + * @brief Disable PWM brake pin inverse function + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32BrakePinNum Brake pin selection. Valid values are 0 or 1. + * @return None + * @details This function is used to disable PWM brake pin inverse function. + */ +void PWM_DisableBrakePinInverse(PWM_T *pwm, uint32_t u32BrakePinNum) +{ + (pwm)->BNF &= ~(PWM_BNF_BRK0PINV_Msk << (u32BrakePinNum * PWM_BNF_BRK1NFEN_Pos)); +} + +/** + * @brief Set PWM brake pin source + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32BrakePinNum Brake pin selection. Valid values are 0 or 1. + * @param[in] u32SelAnotherModule Select to another module. Valid values are TRUE or FALSE. + * @return None + * @details This function is used to set PWM brake pin source. + * @note This function is only supported in M45xD/M45xC. + */ +void PWM_SetBrakePinSource(PWM_T *pwm, uint32_t u32BrakePinNum, uint32_t u32SelAnotherModule) +{ + (pwm)->BNF = ((pwm)->BNF & ~(PWM_BNF_BK0SRC_Msk << (u32BrakePinNum * 8))) | (u32SelAnotherModule << (PWM_BNF_BK0SRC_Pos + u32BrakePinNum * 8)); +} + +/** + * @brief Get the time-base counter reached its maximum value flag of selected channel + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @return Count to max interrupt flag of specified channel + * @retval 0 Count to max interrupt did not occur + * @retval 1 Count to max interrupt occurred + * @details This function is used to get the time-base counter reached its maximum value flag of selected channel. + */ +uint32_t PWM_GetWrapAroundFlag(PWM_T *pwm, uint32_t u32ChannelNum) +{ + return (((pwm)->STATUS & (PWM_STATUS_CNTMAXF0_Msk << u32ChannelNum)) ? 1 : 0); +} + +/** + * @brief Clear the time-base counter reached its maximum value flag of selected channel + * @param[in] pwm The pointer of the specified PWM module + * - PWM0 : PWM Group 0 + * - PWM1 : PWM Group 1 + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @return None + * @details This function is used to clear the time-base counter reached its maximum value flag of selected channel. + */ +void PWM_ClearWrapAroundFlag(PWM_T *pwm, uint32_t u32ChannelNum) +{ + (pwm)->STATUS = (PWM_STATUS_CNTMAXF0_Msk << u32ChannelNum); +} + + +/*@}*/ /* end of group PWM_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group PWM_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +/*** (C) COPYRIGHT 2014~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_pwm.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_pwm.h new file mode 100644 index 00000000000..916131622c0 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_pwm.h @@ -0,0 +1,560 @@ +/**************************************************************************//** + * @file pwm.h + * @version V1.00 + * $Revision: 26 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series PWM driver header file + * + * @note + * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved. + *****************************************************************************/ +#ifndef __PWM_H__ +#define __PWM_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup PWM_Driver PWM Driver + @{ +*/ + +/** @addtogroup PWM_EXPORTED_CONSTANTS PWM Exported Constants + @{ +*/ +#define PWM_CHANNEL_NUM (6) /*!< PWM channel number */ +#define PWM_CH_0_MASK (0x1UL) /*!< PWM channel 0 mask \hideinitializer */ +#define PWM_CH_1_MASK (0x2UL) /*!< PWM channel 1 mask \hideinitializer */ +#define PWM_CH_2_MASK (0x4UL) /*!< PWM channel 2 mask \hideinitializer */ +#define PWM_CH_3_MASK (0x8UL) /*!< PWM channel 3 mask \hideinitializer */ +#define PWM_CH_4_MASK (0x10UL) /*!< PWM channel 4 mask \hideinitializer */ +#define PWM_CH_5_MASK (0x20UL) /*!< PWM channel 5 mask \hideinitializer */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* Counter Type Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define PWM_UP_COUNTER (0UL) /*!< Up counter type */ +#define PWM_DOWN_COUNTER (1UL) /*!< Down counter type */ +#define PWM_UP_DOWN_COUNTER (2UL) /*!< Up-Down counter type */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* Aligned Type Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define PWM_EDGE_ALIGNED (1UL) /*!< PWM working in edge aligned type(down count) */ +#define PWM_CENTER_ALIGNED (2UL) /*!< PWM working in center aligned type */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* Output Level Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define PWM_OUTPUT_NOTHING (0UL) /*!< PWM output nothing */ +#define PWM_OUTPUT_LOW (1UL) /*!< PWM output low */ +#define PWM_OUTPUT_HIGH (2UL) /*!< PWM output high */ +#define PWM_OUTPUT_TOGGLE (3UL) /*!< PWM output toggle */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* Trigger Source Select Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define PWM_TRIGGER_ADC_EVEN_ZERO_POINT (0UL) /*!< PWM trigger ADC while counter of even channel matches zero point */ +#define PWM_TRIGGER_ADC_EVEN_PERIOD_POINT (1UL) /*!< PWM trigger ADC while counter of even channel matches period point */ +#define PWM_TRIGGER_ADC_EVEN_ZERO_OR_PERIOD_POINT (2UL) /*!< PWM trigger ADC while counter of even channel matches zero or period point */ +#define PWM_TRIGGER_ADC_EVEN_COMPARE_UP_COUNT_POINT (3UL) /*!< PWM trigger ADC while counter of even channel matches up count to comparator point */ +#define PWM_TRIGGER_ADC_EVEN_COMPARE_DOWN_COUNT_POINT (4UL) /*!< PWM trigger ADC while counter of even channel matches down count to comparator point */ +#define PWM_TRIGGER_ADC_ODD_ZERO_POINT (5UL) /*!< PWM trigger ADC while counter of odd channel matches zero point */ +#define PWM_TRIGGER_ADC_ODD_PERIOD_POINT (6UL) /*!< PWM trigger ADC while counter of odd channel matches period point */ +#define PWM_TRIGGER_ADC_ODD_ZERO_OR_PERIOD_POINT (7UL) /*!< PWM trigger ADC while counter of odd channel matches zero or period point */ +#define PWM_TRIGGER_ADC_ODD_COMPARE_UP_COUNT_POINT (8UL) /*!< PWM trigger ADC while counter of odd channel matches up count to comparator point */ +#define PWM_TRIGGER_ADC_ODD_COMPARE_DOWN_COUNT_POINT (9UL) /*!< PWM trigger ADC while counter of odd channel matches down count to comparator point */ +#define PWM_TRIGGER_ADC_CH_0_FREE_COMPARE_UP_COUNT_POINT (10UL) /*!< PWM trigger ADC while counter of channel 0 matches up count to free comparator point */ +#define PWM_TRIGGER_ADC_CH_0_FREE_COMPARE_DOWN_COUNT_POINT (11UL) /*!< PWM trigger ADC while counter of channel 0 matches down count to free comparator point */ +#define PWM_TRIGGER_ADC_CH_2_FREE_COMPARE_UP_COUNT_POINT (12UL) /*!< PWM trigger ADC while counter of channel 2 matches up count to free comparator point */ +#define PWM_TRIGGER_ADC_CH_2_FREE_COMPARE_DOWN_COUNT_POINT (13UL) /*!< PWM trigger ADC while counter of channel 2 matches down count to free comparator point */ +#define PWM_TRIGGER_ADC_CH_4_FREE_COMPARE_UP_COUNT_POINT (14UL) /*!< PWM trigger ADC while counter of channel 4 matches up count to free comparator point */ +#define PWM_TRIGGER_ADC_CH_4_FREE_COMPARE_DOWN_COUNT_POINT (15UL) /*!< PWM trigger ADC while counter of channel 4 matches down count to free comparator point */ + +#define PWM_TRIGGER_DAC_ZERO_POINT (0x1UL) /*!< PWM trigger ADC while counter down count to 0 \hideinitializer */ +#define PWM_TRIGGER_DAC_PERIOD_POINT (0x100UL) /*!< PWM trigger ADC while counter matches (PERIOD + 1) \hideinitializer */ +#define PWM_TRIGGER_DAC_COMPARE_UP_COUNT_POINT (0x10000UL) /*!< PWM trigger ADC while counter up count to CMPDAT \hideinitializer */ +#define PWM_TRIGGER_DAC_COMPARE_DOWN_COUNT_POINT (0x1000000UL) /*!< PWM trigger ADC while counter down count to CMPDAT \hideinitializer */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* Fail brake Control Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define PWM_FB_EDGE_ACMP0 (PWM_BRKCTL0_1_CPO0EBEN_Msk) /*!< Comparator 0 as edge-detect fault brake source */ +#define PWM_FB_EDGE_ACMP1 (PWM_BRKCTL0_1_CPO1EBEN_Msk) /*!< Comparator 1 as edge-detect fault brake source */ +#define PWM_FB_EDGE_BKP0 (PWM_BRKCTL0_1_BRKP0EEN_Msk) /*!< BKP0 pin as edge-detect fault brake source */ +#define PWM_FB_EDGE_BKP1 (PWM_BRKCTL0_1_BRKP1EEN_Msk) /*!< BKP1 pin as edge-detect fault brake source */ +#define PWM_FB_EDGE_SYS_CSS (PWM_BRKCTL0_1_SYSEBEN_Msk | PWM_FAILBRK_CSSBRKEN_Msk) /*!< System fail condition: clock security system detection as edge-detect fault brake source */ +#define PWM_FB_EDGE_SYS_BOD (PWM_BRKCTL0_1_SYSEBEN_Msk | PWM_FAILBRK_BODBRKEN_Msk) /*!< System fail condition: brown-out detection as edge-detect fault brake source */ +#define PWM_FB_EDGE_SYS_RAM (PWM_BRKCTL0_1_SYSEBEN_Msk | PWM_FAILBRK_RAMBRKEN_Msk) /*!< System fail condition: SRAM parity error detection as edge-detect fault brake source */ +#define PWM_FB_EDGE_SYS_COR (PWM_BRKCTL0_1_SYSEBEN_Msk | PWM_FAILBRK_CORBRKEN_Msk) /*!< System fail condition: core lockup detection as edge-detect fault brake source */ + +#define PWM_FB_LEVEL_ACMP0 (PWM_BRKCTL0_1_CPO0LBEN_Msk) /*!< Comparator 0 as level-detect fault brake source */ +#define PWM_FB_LEVEL_ACMP1 (PWM_BRKCTL0_1_CPO1LBEN_Msk) /*!< Comparator 1 as level-detect fault brake source */ +#define PWM_FB_LEVEL_BKP0 (PWM_BRKCTL0_1_BRKP0LEN_Msk) /*!< BKP0 pin as level-detect fault brake source */ +#define PWM_FB_LEVEL_BKP1 (PWM_BRKCTL0_1_BRKP1LEN_Msk) /*!< BKP1 pin as level-detect fault brake source */ +#define PWM_FB_LEVEL_SYS_CSS (PWM_BRKCTL0_1_SYSLBEN_Msk | PWM_FAILBRK_CSSBRKEN_Msk) /*!< System fail condition: clock security system detection as level-detect fault brake source */ +#define PWM_FB_LEVEL_SYS_BOD (PWM_BRKCTL0_1_SYSLBEN_Msk | PWM_FAILBRK_BODBRKEN_Msk) /*!< System fail condition: brown-out detection as level-detect fault brake source */ +#define PWM_FB_LEVEL_SYS_RAM (PWM_BRKCTL0_1_SYSLBEN_Msk | PWM_FAILBRK_RAMBRKEN_Msk) /*!< System fail condition: SRAM parity error detection as level-detect fault brake source */ +#define PWM_FB_LEVEL_SYS_COR (PWM_BRKCTL0_1_SYSLBEN_Msk | PWM_FAILBRK_CORBRKEN_Msk) /*!< System fail condition: core lockup detection as level-detect fault brake source */ + +#define PWM_FB_EDGE (0UL) /*!< edge-detect fault brake */ +#define PWM_FB_LEVEL (8UL) /*!< level-detect fault brake */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* Capture Control Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define PWM_CAPTURE_INT_RISING_LATCH (1UL) /*!< PWM capture interrupt if channel has rising transition */ +#define PWM_CAPTURE_INT_FALLING_LATCH (0x100UL) /*!< PWM capture interrupt if channel has falling transition */ + +#define PWM_CAPTURE_PDMA_RISING_LATCH (0x2UL) /*!< PWM capture rising latched data transfer by PDMA */ +#define PWM_CAPTURE_PDMA_FALLING_LATCH (0x4UL) /*!< PWM capture falling latched data transfer by PDMA */ +#define PWM_CAPTURE_PDMA_RISING_FALLING_LATCH (0x6UL) /*!< PWM capture rising and falling latched data transfer by PDMA */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* Duty Interrupt Type Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define PWM_DUTY_INT_DOWN_COUNT_MATCH_CMP (PWM_INTEN0_CMPDIEN0_Msk) /*!< PWM duty interrupt triggered if down count match comparator */ +#define PWM_DUTY_INT_UP_COUNT_MATCH_CMP (PWM_INTEN0_CMPUIEN0_Msk) /*!< PWM duty interrupt triggered if up down match comparator */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* Interrupt Flag Accumulator Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define PWM_IFA_EVEN_ZERO_POINT (0UL) /*!< PWM counter equal to zero in even channel \hideinitializer */ +#define PWM_IFA_EVEN_PERIOD_POINT (1UL) /*!< PWM counter equal to period in even channel \hideinitializer */ +#define PWM_IFA_EVEN_COMPARE_UP_COUNT_POINT (2UL) /*!< PWM counter up count to comparator value in even channel \hideinitializer */ +#define PWM_IFA_EVEN_COMPARE_DOWN_COUNT_POINT (3UL) /*!< PWM counter down count to comparator value in even channel \hideinitializer */ +#define PWM_IFA_ODD_ZERO_POINT (4UL) /*!< PWM counter equal to zero in odd channel \hideinitializer */ +#define PWM_IFA_ODD_PERIOD_POINT (5UL) /*!< PWM counter equal to period in odd channel \hideinitializer */ +#define PWM_IFA_ODD_COMPARE_UP_COUNT_POINT (6UL) /*!< PWM counter up count to comparator value in odd channel \hideinitializer */ +#define PWM_IFA_ODD_COMPARE_DOWN_COUNT_POINT (7UL) /*!< PWM counter down count to comparator value in odd channel \hideinitializer */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* Load Mode Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define PWM_LOAD_MODE_IMMEDIATE (PWM_CTL0_IMMLDEN0_Msk) /*!< PWM immediately load mode \hideinitializer */ +#define PWM_LOAD_MODE_WINDOW (PWM_CTL0_WINLDEN0_Msk) /*!< PWM window load mode \hideinitializer */ +#define PWM_LOAD_MODE_CENTER (PWM_CTL0_CTRLD0_Msk) /*!< PWM center load mode \hideinitializer */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* Synchronize Control Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define PWM_SYNC_OUT_FROM_SYNCIN_SWSYNC (0UL) /*!< Synchronize source from SYNC_IN or SWSYNC \hideinitializer */ +#define PWM_SYNC_OUT_FROM_COUNT_TO_ZERO (1UL) /*!< Synchronize source from counter equal to 0 \hideinitializer */ +#define PWM_SYNC_OUT_FROM_COUNT_TO_COMPARATOR (2UL) /*!< Synchronize source from counter equal to CMPDAT1, CMPDAT3, CMPDAT5 \hideinitializer */ +#define PWM_SYNC_OUT_DISABLE (3UL) /*!< SYNC_OUT will not be generated \hideinitializer */ +#define PWM_PHS_DIR_DECREMENT (0UL) /*!< PWM counter count decrement \hideinitializer */ +#define PWM_PHS_DIR_INCREMENT (1UL) /*!< PWM counter count increment \hideinitializer */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* Noise Filter Clock Divide Select Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define PWM_NF_CLK_DIV_1 (0UL) /*!< Noise filter clock is HCLK divide by 1 \hideinitializer */ +#define PWM_NF_CLK_DIV_2 (1UL) /*!< Noise filter clock is HCLK divide by 2 \hideinitializer */ +#define PWM_NF_CLK_DIV_4 (2UL) /*!< Noise filter clock is HCLK divide by 4 \hideinitializer */ +#define PWM_NF_CLK_DIV_8 (3UL) /*!< Noise filter clock is HCLK divide by 8 \hideinitializer */ +#define PWM_NF_CLK_DIV_16 (4UL) /*!< Noise filter clock is HCLK divide by 16 \hideinitializer */ +#define PWM_NF_CLK_DIV_32 (5UL) /*!< Noise filter clock is HCLK divide by 32 \hideinitializer */ +#define PWM_NF_CLK_DIV_64 (6UL) /*!< Noise filter clock is HCLK divide by 64 \hideinitializer */ +#define PWM_NF_CLK_DIV_128 (7UL) /*!< Noise filter clock is HCLK divide by 128 \hideinitializer */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* Clock Source Select Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define PWM_CLKSRC_PWM_CLK (0UL) /*!< PWM Clock source selects to PWM0_CLK or PWM1_CLK \hideinitializer */ +#define PWM_CLKSRC_TIMER0 (1UL) /*!< PWM Clock source selects to TIMER0 overflow \hideinitializer */ +#define PWM_CLKSRC_TIMER1 (2UL) /*!< PWM Clock source selects to TIMER1 overflow \hideinitializer */ +#define PWM_CLKSRC_TIMER2 (3UL) /*!< PWM Clock source selects to TIMER2 overflow \hideinitializer */ +#define PWM_CLKSRC_TIMER3 (4UL) /*!< PWM Clock source selects to TIMER3 overflow \hideinitializer */ + + +/*@}*/ /* end of group PWM_EXPORTED_CONSTANTS */ + + +/** @addtogroup PWM_EXPORTED_FUNCTIONS PWM Exported Functions + @{ +*/ + +/** + * @brief This macro enable complementary mode + * @param[in] pwm The pointer of the specified PWM module + * @return None + * @details This macro is used to enable complementary mode of PWM module. + * \hideinitializer + */ +#define PWM_ENABLE_COMPLEMENTARY_MODE(pwm) ((pwm)->CTL1 = (pwm)->CTL1 | PWM_CTL1_OUTMODEn_Msk) + +/** + * @brief This macro disable complementary mode, and enable independent mode. + * @param[in] pwm The pointer of the specified PWM module + * @return None + * @details This macro is used to disable complementary mode of PWM module. + * \hideinitializer + */ +#define PWM_DISABLE_COMPLEMENTARY_MODE(pwm) ((pwm)->CTL1 = (pwm)->CTL1 & ~PWM_CTL1_OUTMODEn_Msk) + +/** + * @brief This macro enable group mode + * @param[in] pwm The pointer of the specified PWM module + * @return None + * @details This macro is used to enable group mode of PWM module. + * \hideinitializer + */ +#define PWM_ENABLE_GROUP_MODE(pwm) ((pwm)->CTL0 = (pwm)->CTL0 | PWM_CTL0_GROUPEN_Msk) + +/** + * @brief This macro disable group mode + * @param[in] pwm The pointer of the specified PWM module + * @return None + * @details This macro is used to disable group mode of PWM module. + * \hideinitializer + */ +#define PWM_DISABLE_GROUP_MODE(pwm) ((pwm)->CTL0 = (pwm)->CTL0 & ~PWM_CTL0_GROUPEN_Msk) + +/** + * @brief Enable timer synchronous mode of specified channel(s) + * @param[in] pwm The pointer of the specified PWM module + * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel + * Bit 0 represents channel 0, bit 1 represents channel 1... + * @return None + * @details This macro is used to enable timer synchronous mode of specified channel(s). + * \hideinitializer + */ +#define PWM_ENABLE_TIMER_SYNC(pwm, u32ChannelMask) ((pwm)->SSCTL |= (u32ChannelMask)) + +/** + * @brief Disable timer synchronous mode of specified channel(s) + * @param[in] pwm The pointer of the specified PWM module + * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel + * Bit 0 represents channel 0, bit 1 represents channel 1... + * @return None + * @details This macro is used to disable timer synchronous mode of specified channel(s). + * \hideinitializer + */ +#define PWM_DISABLE_TIMER_SYNC(pwm, u32ChannelMask) \ + do{ \ + int i;\ + for(i = 0; i < 6; i++) { \ + if((u32ChannelMask) & (1 << i)) \ + (pwm)->SSCTL &= ~(1UL << i); \ + } \ + }while(0) + +/** + * @brief This macro enable output inverter of specified channel(s) + * @param[in] pwm The pointer of the specified PWM module + * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel + * Bit 0 represents channel 0, bit 1 represents channel 1... + * @return None + * @details This macro is used to enable output inverter of specified channel(s). + * \hideinitializer + */ +#define PWM_ENABLE_OUTPUT_INVERTER(pwm, u32ChannelMask) ((pwm)->POLCTL = (u32ChannelMask)) + +/** + * @brief This macro get captured rising data + * @param[in] pwm The pointer of the specified PWM module + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @return None + * @details This macro is used to get captured rising data of specified channel. + * \hideinitializer + */ +#define PWM_GET_CAPTURE_RISING_DATA(pwm, u32ChannelNum) (*(__IO uint32_t *) (&((pwm)->RCAPDAT0) + 2 * (u32ChannelNum))) + +/** + * @brief This macro get captured falling data + * @param[in] pwm The pointer of the specified PWM module + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @return None + * @details This macro is used to get captured falling data of specified channel. + * \hideinitializer + */ +#define PWM_GET_CAPTURE_FALLING_DATA(pwm, u32ChannelNum) (*(__IO uint32_t *) (&((pwm)->FCAPDAT0) + 2 * (u32ChannelNum))) + +/** + * @brief This macro mask output logic to high or low + * @param[in] pwm The pointer of the specified PWM module + * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel + * Bit 0 represents channel 0, bit 1 represents channel 1... + * @param[in] u32LevelMask Output logic to high or low + * @return None + * @details This macro is used to mask output logic to high or low of specified channel(s). + * @note If u32ChannelMask parameter is 0, then mask function will be disabled. + * \hideinitializer + */ +#define PWM_MASK_OUTPUT(pwm, u32ChannelMask, u32LevelMask) \ + { \ + (pwm)->MSKEN = (u32ChannelMask); \ + (pwm)->MSK = (u32LevelMask); \ + } + +/** + * @brief This macro set the prescaler of the selected channel + * @param[in] pwm The pointer of the specified PWM module + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @param[in] u32Prescaler Clock prescaler of specified channel. Valid values are between 1 ~ 0xFFF + * @return None + * @details This macro is used to set the prescaler of specified channel. + * @note Every even channel N, and channel (N + 1) share a prescaler. So if channel 0 prescaler changed, + * channel 1 will also be affected. + * \hideinitializer + */ +#define PWM_SET_PRESCALER(pwm, u32ChannelNum, u32Prescaler) (*(__IO uint32_t *) (&((pwm)->CLKPSC0_1) + ((u32ChannelNum) >> 1)) = (u32Prescaler)) + +/** + * @brief This macro set the comparator of the selected channel + * @param[in] pwm The pointer of the specified PWM module + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @param[in] u32CMR Comparator of specified channel. Valid values are between 0~0xFFFF + * @return None + * @details This macro is used to set the comparator of specified channel. + * @note This new setting will take effect on next PWM period. + * \hideinitializer + */ +#define PWM_SET_CMR(pwm, u32ChannelNum, u32CMR) ((pwm)->CMPDAT[(u32ChannelNum)]= (u32CMR)) + +/** + * @brief This macro set the free trigger comparator of the selected channel + * @param[in] pwm The pointer of the specified PWM module + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @param[in] u32FTCMR Free trigger comparator of specified channel. Valid values are between 0~0xFFFF + * @return None + * @details This macro is used to set the free trigger comparator of specified channel. + * @note This new setting will take effect on next PWM period. + * \hideinitializer + */ +#define PWM_SET_FTCMR(pwm, u32ChannelNum, u32FTCMR) (*(__IO uint32_t *) (&((pwm)->FTCMPDAT0_1) + ((u32ChannelNum) >> 1)) = (u32FTCMR)) + +/** + * @brief This macro set the period of the selected channel + * @param[in] pwm The pointer of the specified PWM module + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @param[in] u32CNR Period of specified channel. Valid values are between 0~0xFFFF + * @return None + * @details This macro is used to set the period of specified channel. + * @note This new setting will take effect on next PWM period. + * @note PWM counter will stop if period length set to 0. + * \hideinitializer + */ +#define PWM_SET_CNR(pwm, u32ChannelNum, u32CNR) ((pwm)->PERIOD[(u32ChannelNum)] = (u32CNR)) + +/** + * @brief This macro set the PWM aligned type + * @param[in] pwm The pointer of the specified PWM module + * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel + * Bit 0 represents channel 0, bit 1 represents channel 1... + * @param[in] u32AlignedType PWM aligned type, valid values are: + * - \ref PWM_EDGE_ALIGNED + * - \ref PWM_CENTER_ALIGNED + * @return None + * @details This macro is used to set the PWM aligned type of specified channel(s). + * \hideinitializer + */ +#define PWM_SET_ALIGNED_TYPE(pwm, u32ChannelMask, u32AlignedType) \ + do{ \ + int i; \ + for(i = 0; i < 6; i++) { \ + if((u32ChannelMask) & (1 << i)) \ + (pwm)->CTL1 = (((pwm)->CTL1 & ~(3UL << (2 * i))) | ((u32AlignedType) << ( 2 * i))); \ + } \ + }while(0) + +/** + * @brief Set load window of window loading mode for specified channel(s) + * @param[in] pwm The pointer of the specified PWM module + * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel + * Bit 0 represents channel 0, bit 1 represents channel 1... + * @return None + * @details This macro is used to set load window of window loading mode for specified channel(s). + * \hideinitializer + */ +#define PWM_SET_LOAD_WINDOW(pwm, u32ChannelMask) ((pwm)->LOAD |= (u32ChannelMask)) + +/** + * @brief Trigger synchronous event from specified channel(s) + * @param[in] pwm The pointer of the specified PWM module + * @param[in] u32ChannelNum PWM channel number. Valid values are 0, 2, 4 + * Bit 0 represents channel 0, bit 1 represents channel 2 and bit 2 represents channel 4 + * @return None + * @details This macro is used to trigger synchronous event from specified channel(s). + * \hideinitializer + */ +#define PWM_TRIGGER_SYNC(pwm, u32ChannelNum) ((pwm)->SWSYNC |= (1 << ((u32ChannelNum) >> 1))) + +/** + * @brief Clear counter of specified channel(s) + * @param[in] pwm The pointer of the specified PWM module + * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel + * Bit 0 represents channel 0, bit 1 represents channel 1... + * @return None + * @details This macro is used to clear counter of specified channel(s). + * \hideinitializer + */ +#define PWM_CLR_COUNTER(pwm, u32ChannelMask) ((pwm)->CNTCLR |= (u32ChannelMask)) + +/** + * @brief Set output level at zero, compare up, period(center) and compare down of specified channel(s) + * @param[in] pwm The pointer of the specified PWM module + * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel + * Bit 0 represents channel 0, bit 1 represents channel 1... + * @param[in] u32ZeroLevel output level at zero point, valid values are: + * - \ref PWM_OUTPUT_NOTHING + * - \ref PWM_OUTPUT_LOW + * - \ref PWM_OUTPUT_HIGH + * - \ref PWM_OUTPUT_TOGGLE + * @param[in] u32CmpUpLevel output level at compare up point, valid values are: + * - \ref PWM_OUTPUT_NOTHING + * - \ref PWM_OUTPUT_LOW + * - \ref PWM_OUTPUT_HIGH + * - \ref PWM_OUTPUT_TOGGLE + * @param[in] u32PeriodLevel output level at period(center) point, valid values are: + * - \ref PWM_OUTPUT_NOTHING + * - \ref PWM_OUTPUT_LOW + * - \ref PWM_OUTPUT_HIGH + * - \ref PWM_OUTPUT_TOGGLE + * @param[in] u32CmpDownLevel output level at compare down point, valid values are: + * - \ref PWM_OUTPUT_NOTHING + * - \ref PWM_OUTPUT_LOW + * - \ref PWM_OUTPUT_HIGH + * - \ref PWM_OUTPUT_TOGGLE + * @return None + * @details This macro is used to Set output level at zero, compare up, period(center) and compare down of specified channel(s). + * \hideinitializer + */ +#define PWM_SET_OUTPUT_LEVEL(pwm, u32ChannelMask, u32ZeroLevel, u32CmpUpLevel, u32PeriodLevel, u32CmpDownLevel) \ + do{ \ + int i; \ + for(i = 0; i < 6; i++) { \ + if((u32ChannelMask) & (1 << i)) { \ + (pwm)->WGCTL0 = (((pwm)->WGCTL0 & ~(3UL << (2 * i))) | ((u32ZeroLevel) << (2 * i))); \ + (pwm)->WGCTL0 = (((pwm)->WGCTL0 & ~(3UL << (PWM_WGCTL0_PRDPCTLn_Pos + (2 * i)))) | ((u32PeriodLevel) << (PWM_WGCTL0_PRDPCTLn_Pos + (2 * i)))); \ + (pwm)->WGCTL1 = (((pwm)->WGCTL1 & ~(3UL << (2 * i))) | ((u32CmpUpLevel) << (2 * i))); \ + (pwm)->WGCTL1 = (((pwm)->WGCTL1 & ~(3UL << (PWM_WGCTL1_CMPDCTLn_Pos + (2 * i)))) | ((u32CmpDownLevel) << (PWM_WGCTL1_CMPDCTLn_Pos + (2 * i)))); \ + } \ + } \ + }while(0) + +/** + * @brief Trigger brake event from specified channel(s) + * @param[in] pwm The pointer of the specified PWM module + * @param[in] u32ChannelMask Combination of enabled channels. Each bit corresponds to a channel + * Bit 0 represents channel 0, bit 1 represents channel 2 and bit 2 represents channel 4 + * @param[in] u32BrakeType Type of brake trigger. PWM_FB_EDGE of this macro is only supported in M45xD/M45xC. + * - \ref PWM_FB_EDGE + * - \ref PWM_FB_LEVEL + * @return None + * @details This macro is used to trigger brake event from specified channel(s). + * \hideinitializer + */ +#define PWM_TRIGGER_BRAKE(pwm, u32ChannelMask, u32BrakeType) ((pwm)->SWBRK |= ((u32ChannelMask) << (u32BrakeType))) + +/** + * @brief Set Dead zone clock source + * @param[in] pwm The pointer of the specified PWM module + * @param[in] u32ChannelNum PWM channel number. Valid values are between 0~5 + * @param[in] u32AfterPrescaler Dead zone clock source is from prescaler output. Valid values are TRUE (after prescaler) or FALSE (before prescaler). + * @return None + * @details This macro is used to set Dead zone clock source. Every two channels share the same setting. + * @note The write-protection function should be disabled before using this function. + * @note This function is only supported in M45xD/M45xC. + * \hideinitializer + */ +#define PWM_SET_DEADZONE_CLK_SRC(pwm, u32ChannelNum, u32AfterPrescaler) \ + (*(__IO uint32_t *) (&((pwm)->DTCTL0_1) + ((u32ChannelNum) >> 1)) = (*(__IO uint32_t *) (&((pwm)->DTCTL0_1) + ((u32ChannelNum) >> 1)) & ~PWM_DTCTL0_1_DTCKSEL_Msk) | \ + ((u32AfterPrescaler) << PWM_DTCTL0_1_DTCKSEL_Pos)) + +/*---------------------------------------------------------------------------------------------------------*/ +/* Define PWM functions prototype */ +/*---------------------------------------------------------------------------------------------------------*/ +uint32_t PWM_ConfigCaptureChannel(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32UnitTimeNsec, uint32_t u32CaptureEdge); +uint32_t PWM_ConfigOutputChannel(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32Frequency, uint32_t u32DutyCycle); +uint32_t PWM_ConfigOutputChannel2(PWM_T *pwm, + uint32_t u32ChannelNum, + uint32_t u32Frequency, + uint32_t u32DutyCycle, + uint32_t u32Frequency2); +void PWM_Start(PWM_T *pwm, uint32_t u32ChannelMask); +void PWM_Stop(PWM_T *pwm, uint32_t u32ChannelMask); +void PWM_ForceStop(PWM_T *pwm, uint32_t u32ChannelMask); +void PWM_EnableADCTrigger(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32Condition); +void PWM_DisableADCTrigger(PWM_T *pwm, uint32_t u32ChannelNum); +void PWM_ClearADCTriggerFlag(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32Condition); +uint32_t PWM_GetADCTriggerFlag(PWM_T *pwm, uint32_t u32ChannelNum); +void PWM_EnableDACTrigger(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32Condition); +void PWM_DisableDACTrigger(PWM_T *pwm, uint32_t u32ChannelNum); +void PWM_ClearDACTriggerFlag(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32Condition); +uint32_t PWM_GetDACTriggerFlag(PWM_T *pwm, uint32_t u32ChannelNum); +void PWM_EnableFaultBrake(PWM_T *pwm, uint32_t u32ChannelMask, uint32_t u32LevelMask, uint32_t u32BrakeSource); +void PWM_EnableCapture(PWM_T *pwm, uint32_t u32ChannelMask); +void PWM_DisableCapture(PWM_T *pwm, uint32_t u32ChannelMask); +void PWM_EnableOutput(PWM_T *pwm, uint32_t u32ChannelMask); +void PWM_DisableOutput(PWM_T *pwm, uint32_t u32ChannelMask); +void PWM_EnablePDMA(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32RisingFirst, uint32_t u32Mode); +void PWM_DisablePDMA(PWM_T *pwm, uint32_t u32ChannelNum); +void PWM_EnableDeadZone(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32Duration); +void PWM_DisableDeadZone(PWM_T *pwm, uint32_t u32ChannelNum); +void PWM_EnableCaptureInt(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32Edge); +void PWM_DisableCaptureInt(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32Edge); +void PWM_ClearCaptureIntFlag(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32Edge); +uint32_t PWM_GetCaptureIntFlag(PWM_T *pwm, uint32_t u32ChannelNum); +void PWM_EnableDutyInt(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32IntDutyType); +void PWM_DisableDutyInt(PWM_T *pwm, uint32_t u32ChannelNum); +void PWM_ClearDutyIntFlag(PWM_T *pwm, uint32_t u32ChannelNum); +uint32_t PWM_GetDutyIntFlag(PWM_T *pwm, uint32_t u32ChannelNum); +void PWM_EnableFaultBrakeInt(PWM_T *pwm, uint32_t u32BrakeSource); +void PWM_DisableFaultBrakeInt(PWM_T *pwm, uint32_t u32BrakeSource); +void PWM_ClearFaultBrakeIntFlag(PWM_T *pwm, uint32_t u32BrakeSource); +uint32_t PWM_GetFaultBrakeIntFlag(PWM_T *pwm, uint32_t u32BrakeSource); +void PWM_EnablePeriodInt(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32IntPeriodType); +void PWM_DisablePeriodInt(PWM_T *pwm, uint32_t u32ChannelNum); +void PWM_ClearPeriodIntFlag(PWM_T *pwm, uint32_t u32ChannelNum); +uint32_t PWM_GetPeriodIntFlag(PWM_T *pwm, uint32_t u32ChannelNum); +void PWM_EnableZeroInt(PWM_T *pwm, uint32_t u32ChannelNum); +void PWM_DisableZeroInt(PWM_T *pwm, uint32_t u32ChannelNum); +void PWM_ClearZeroIntFlag(PWM_T *pwm, uint32_t u32ChannelNum); +uint32_t PWM_GetZeroIntFlag(PWM_T *pwm, uint32_t u32ChannelNum); +void PWM_EnableAcc(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32IntFlagCnt, uint32_t u32IntAccSrc); +void PWM_DisableAcc(PWM_T *pwm, uint32_t u32ChannelNum); +void PWM_EnableAccInt(PWM_T *pwm, uint32_t u32ChannelNum); +void PWM_DisableAccInt(PWM_T *pwm, uint32_t u32ChannelNum); +void PWM_ClearAccInt(PWM_T *pwm, uint32_t u32ChannelNum); +uint32_t PWM_GetAccInt(PWM_T *pwm, uint32_t u32ChannelNum); +void PWM_ClearFTDutyIntFlag(PWM_T *pwm, uint32_t u32ChannelNum); +uint32_t PWM_GetFTDutyIntFlag(PWM_T *pwm, uint32_t u32ChannelNum); +void PWM_EnableLoadMode(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32LoadMode); +void PWM_DisableLoadMode(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32LoadMode); +void PWM_ConfigSyncPhase(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32SyncSrc, uint32_t u32Direction, uint32_t u32StartPhase); +void PWM_EnableSyncPhase(PWM_T *pwm, uint32_t u32ChannelMask); +void PWM_DisableSyncPhase(PWM_T *pwm, uint32_t u32ChannelMask); +void PWM_EnableSyncNoiseFilter(PWM_T *pwm, uint32_t u32ClkCnt, uint32_t u32ClkDivSel); +void PWM_DisableSyncNoiseFilter(PWM_T *pwm); +void PWM_EnableSyncPinInverse(PWM_T *pwm); +void PWM_DisableSyncPinInverse(PWM_T *pwm); +void PWM_SetClockSource(PWM_T *pwm, uint32_t u32ChannelNum, uint32_t u32ClkSrcSel); +void PWM_EnableBrakeNoiseFilter(PWM_T *pwm, uint32_t u32BrakePinNum, uint32_t u32ClkCnt, uint32_t u32ClkDivSel); +void PWM_DisableBrakeNoiseFilter(PWM_T *pwm, uint32_t u32BrakePinNum); +void PWM_EnableBrakePinInverse(PWM_T *pwm, uint32_t u32BrakePinNum); +void PWM_DisableBrakePinInverse(PWM_T *pwm, uint32_t u32BrakePinNum); +void PWM_SetBrakePinSource(PWM_T *pwm, uint32_t u32BrakePinNum, uint32_t u32SelAnotherModule); +uint32_t PWM_GetWrapAroundFlag(PWM_T *pwm, uint32_t u32ChannelNum); +void PWM_ClearWrapAroundFlag(PWM_T *pwm, uint32_t u32ChannelNum); + + +/*@}*/ /* end of group PWM_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group PWM_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +#ifdef __cplusplus +} +#endif + +#endif //__PWM_H__ + +/*** (C) COPYRIGHT 2014~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_rtc.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_rtc.c new file mode 100644 index 00000000000..3489e4e6167 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_rtc.c @@ -0,0 +1,789 @@ +/**************************************************************************//** + * @file rtc.c + * @version V3.00 + * $Revision: 7 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series RTC driver source file + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ +#include "M451Series.h" + + +/// @cond HIDDEN_SYMBOLS + +/*---------------------------------------------------------------------------------------------------------*/ +/* Macro, type and constant definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define RTC_GLOBALS + +/*---------------------------------------------------------------------------------------------------------*/ +/* Global file scope (static) variables */ +/*---------------------------------------------------------------------------------------------------------*/ +static volatile uint32_t g_u32hiYear, g_u32loYear, g_u32hiMonth, g_u32loMonth, g_u32hiDay, g_u32loDay; +static volatile uint32_t g_u32hiHour, g_u32loHour, g_u32hiMin, g_u32loMin, g_u32hiSec, g_u32loSec; + +/// @endcond HIDDEN_SYMBOLS + + + + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup RTC_Driver RTC Driver + @{ +*/ + +/** @addtogroup RTC_EXPORTED_FUNCTIONS RTC Exported Functions + @{ +*/ + +/** + * @brief Initialize RTC module and start counting + * + * @param[in] sPt Specify the time property and current date and time. It includes: \n + * u32Year: Year value, range between 2000 ~ 2099. \n + * u32Month: Month value, range between 1 ~ 12. \n + * u32Day: Day value, range between 1 ~ 31. \n + * u32DayOfWeek: Day of the week. [RTC_SUNDAY / RTC_MONDAY / RTC_TUESDAY / + * RTC_WEDNESDAY / RTC_THURSDAY / RTC_FRIDAY / + * RTC_SATURDAY] \n + * u32Hour: Hour value, range between 0 ~ 23. \n + * u32Minute: Minute value, range between 0 ~ 59. \n + * u32Second: Second value, range between 0 ~ 59. \n + * u32TimeScale: [RTC_CLOCK_12 / RTC_CLOCK_24] \n + * u8AmPm: [RTC_AM / RTC_PM] \n + * + * @return None + * + * @details This function is used to: \n + * 1. Write initial key to let RTC start count. \n + * 2. Input parameter indicates start date/time. \n + * 3. User has to make sure that parameters of RTC date/time are reasonable. \n + * @note Null pointer for using default starting date/time. + */ +void RTC_Open(S_RTC_TIME_DATA_T *sPt) +{ + RTC->INIT = RTC_INIT_KEY; + + if(RTC->INIT != RTC_INIT_ACTIVE_Msk) + { + RTC->INIT = RTC_INIT_KEY; + while(RTC->INIT != RTC_INIT_ACTIVE_Msk); + } + + if(sPt == 0) + return ; + + /* Set RTC date and time */ + RTC_SetDateAndTime(sPt); + + /* Waiting for RTC settings stable */ + while((RTC->RWEN & RTC_RWEN_RWENF_Msk) == RTC_RWEN_RWENF_Msk); +} + +/** + * @brief Disable RTC Clock + * + * @param None + * + * @return None + * + * @details This API will disable RTC peripheral clock and stops RTC counting. + */ +void RTC_Close(void) +{ + CLK->APBCLK0 &= ~CLK_APBCLK0_RTCCKEN_Msk; +} + +/** + * @brief Set 32k Frequency Compensation Data + * + * @param[in] i32FrequencyX100 Specify the RTC clock X100, ex: 3277365 means 32773.65. + * + * @return None + * + * @details This API is used to compensate the 32 kHz frequency by current LXT frequency for RTC application. + */ +void RTC_32KCalibration(int32_t i32FrequencyX100) +{ + int32_t i32RegInt, i32RegFra; + + /* Compute integer and fraction for RTC FCR register */ + i32RegInt = (i32FrequencyX100 / 100) - RTC_FCR_REFERENCE; + i32RegFra = (((i32FrequencyX100 % 100)) * 60) / 100; + + /* Judge Integer part is reasonable */ + if((i32RegInt < 0) | (i32RegInt > 15)) + { + return ; + } + + RTC_WaitAccessEnable(); + RTC->FREQADJ = (uint32_t)((i32RegInt << 8) | i32RegFra); +} + +/** + * @brief Get Current RTC Date and Time + * + * @param[out] sPt The returned pointer is specified the current RTC value. It includes: \n + * u32Year: Year value \n + * u32Month: Month value \n + * u32Day: Day value \n + * u32DayOfWeek: Day of week \n + * u32Hour: Hour value \n + * u32Minute: Minute value \n + * u32Second: Second value \n + * u32TimeScale: [RTC_CLOCK_12 / RTC_CLOCK_24] \n + * u8AmPm: [RTC_AM / RTC_PM] \n + * + * @return None + * + * @details This API is used to get the current RTC date and time value. + */ +void RTC_GetDateAndTime(S_RTC_TIME_DATA_T *sPt) +{ + uint32_t u32Tmp; + + sPt->u32TimeScale = RTC->CLKFMT & RTC_CLKFMT_24HEN_Msk; /* 12/24-hour */ + sPt->u32DayOfWeek = RTC->WEEKDAY & RTC_WEEKDAY_WEEKDAY_Msk; /* Day of the week */ + + /* Get [Date digit] data */ + g_u32hiYear = (RTC->CAL & RTC_CAL_TENYEAR_Msk) >> RTC_CAL_TENYEAR_Pos; + g_u32loYear = (RTC->CAL & RTC_CAL_YEAR_Msk) >> RTC_CAL_YEAR_Pos; + g_u32hiMonth = (RTC->CAL & RTC_CAL_TENMON_Msk) >> RTC_CAL_TENMON_Pos; + g_u32loMonth = (RTC->CAL & RTC_CAL_MON_Msk) >> RTC_CAL_MON_Pos; + g_u32hiDay = (RTC->CAL & RTC_CAL_TENDAY_Msk) >> RTC_CAL_TENDAY_Pos; + g_u32loDay = (RTC->CAL & RTC_CAL_DAY_Msk) >> RTC_CAL_DAY_Pos; + + /* Get [Time digit] data */ + g_u32hiHour = (RTC->TIME & RTC_TIME_TENHR_Msk) >> RTC_TIME_TENHR_Pos; + g_u32loHour = (RTC->TIME & RTC_TIME_HR_Msk) >> RTC_TIME_HR_Pos; + g_u32hiMin = (RTC->TIME & RTC_TIME_TENMIN_Msk) >> RTC_TIME_TENMIN_Pos; + g_u32loMin = (RTC->TIME & RTC_TIME_MIN_Msk) >> RTC_TIME_MIN_Pos; + g_u32hiSec = (RTC->TIME & RTC_TIME_TENSEC_Msk) >> RTC_TIME_TENSEC_Pos; + g_u32loSec = (RTC->TIME & RTC_TIME_SEC_Msk) >> RTC_TIME_SEC_Pos; + + /* Compute to 20XX year */ + u32Tmp = (g_u32hiYear * 10); + u32Tmp += g_u32loYear; + sPt->u32Year = u32Tmp + RTC_YEAR2000; + + /* Compute 0~12 month */ + u32Tmp = (g_u32hiMonth * 10); + sPt->u32Month = u32Tmp + g_u32loMonth; + + /* Compute 0~31 day */ + u32Tmp = (g_u32hiDay * 10); + sPt->u32Day = u32Tmp + g_u32loDay; + + /* Compute 12/24 hour */ + if(sPt->u32TimeScale == RTC_CLOCK_12) + { + u32Tmp = (g_u32hiHour * 10); + u32Tmp += g_u32loHour; + sPt->u32Hour = u32Tmp; /* AM: 1~12. PM: 21~32. */ + + if(sPt->u32Hour >= 21) + { + sPt->u32AmPm = RTC_PM; + sPt->u32Hour -= 20; + } + else + { + sPt->u32AmPm = RTC_AM; + } + + u32Tmp = (g_u32hiMin * 10); + u32Tmp += g_u32loMin; + sPt->u32Minute = u32Tmp; + + u32Tmp = (g_u32hiSec * 10); + u32Tmp += g_u32loSec; + sPt->u32Second = u32Tmp; + } + else + { + u32Tmp = (g_u32hiHour * 10); + u32Tmp += g_u32loHour; + sPt->u32Hour = u32Tmp; + + u32Tmp = (g_u32hiMin * 10); + u32Tmp += g_u32loMin; + sPt->u32Minute = u32Tmp; + + u32Tmp = (g_u32hiSec * 10); + u32Tmp += g_u32loSec; + sPt->u32Second = u32Tmp; + } +} + +/** + * @brief Get RTC Alarm Date and Time + * + * @param[out] sPt The returned pointer is specified the RTC alarm value. It includes: \n + * u32Year: Year value \n + * u32Month: Month value \n + * u32Day: Day value \n + * u32DayOfWeek: Day of week \n + * u32Hour: Hour value \n + * u32Minute: Minute value \n + * u32Second: Second value \n + * u32TimeScale: [RTC_CLOCK_12 / RTC_CLOCK_24] \n + * u8AmPm: [RTC_AM / RTC_PM] \n + * + * @return None + * + * @details This API is used to get the RTC alarm date and time setting. + */ +void RTC_GetAlarmDateAndTime(S_RTC_TIME_DATA_T *sPt) +{ + uint32_t u32Tmp; + + sPt->u32TimeScale = RTC->CLKFMT & RTC_CLKFMT_24HEN_Msk; /* 12/24-hour */ + sPt->u32DayOfWeek = RTC->WEEKDAY & RTC_WEEKDAY_WEEKDAY_Msk; /* Day of the week */ + + /* Get alarm [Date digit] data */ + RTC_WaitAccessEnable(); + g_u32hiYear = (RTC->CALM & RTC_CALM_TENYEAR_Msk) >> RTC_CALM_TENYEAR_Pos; + g_u32loYear = (RTC->CALM & RTC_CALM_YEAR_Msk) >> RTC_CALM_YEAR_Pos; + g_u32hiMonth = (RTC->CALM & RTC_CALM_TENMON_Msk) >> RTC_CALM_TENMON_Pos; + g_u32loMonth = (RTC->CALM & RTC_CALM_MON_Msk) >> RTC_CALM_MON_Pos; + g_u32hiDay = (RTC->CALM & RTC_CALM_TENDAY_Msk) >> RTC_CALM_TENDAY_Pos; + g_u32loDay = (RTC->CALM & RTC_CALM_DAY_Msk) >> RTC_CALM_DAY_Pos; + + /* Get alarm [Time digit] data */ + RTC_WaitAccessEnable(); + g_u32hiHour = (RTC->TALM & RTC_TALM_TENHR_Msk) >> RTC_TALM_TENHR_Pos; + g_u32loHour = (RTC->TALM & RTC_TALM_HR_Msk) >> RTC_TALM_HR_Pos; + g_u32hiMin = (RTC->TALM & RTC_TALM_TENMIN_Msk) >> RTC_TALM_TENMIN_Pos; + g_u32loMin = (RTC->TALM & RTC_TALM_MIN_Msk) >> RTC_TALM_MIN_Pos; + g_u32hiSec = (RTC->TALM & RTC_TALM_TENSEC_Msk) >> RTC_TALM_TENSEC_Pos; + g_u32loSec = (RTC->TALM & RTC_TALM_SEC_Msk) >> RTC_TALM_SEC_Pos; + + /* Compute to 20XX year */ + u32Tmp = (g_u32hiYear * 10); + u32Tmp += g_u32loYear; + sPt->u32Year = u32Tmp + RTC_YEAR2000; + + /* Compute 0~12 month */ + u32Tmp = (g_u32hiMonth * 10); + sPt->u32Month = u32Tmp + g_u32loMonth; + + /* Compute 0~31 day */ + u32Tmp = (g_u32hiDay * 10); + sPt->u32Day = u32Tmp + g_u32loDay; + + /* Compute 12/24 hour */ + if(sPt->u32TimeScale == RTC_CLOCK_12) + { + u32Tmp = (g_u32hiHour * 10); + u32Tmp += g_u32loHour; + sPt->u32Hour = u32Tmp; /* AM: 1~12. PM: 21~32. */ + + if(sPt->u32Hour >= 21) + { + sPt->u32AmPm = RTC_PM; + sPt->u32Hour -= 20; + } + else + { + sPt->u32AmPm = RTC_AM; + } + + u32Tmp = (g_u32hiMin * 10); + u32Tmp += g_u32loMin; + sPt->u32Minute = u32Tmp; + + u32Tmp = (g_u32hiSec * 10); + u32Tmp += g_u32loSec; + sPt->u32Second = u32Tmp; + + } + else + { + u32Tmp = (g_u32hiHour * 10); + u32Tmp += g_u32loHour; + sPt->u32Hour = u32Tmp; + + u32Tmp = (g_u32hiMin * 10); + u32Tmp += g_u32loMin; + sPt->u32Minute = u32Tmp; + + u32Tmp = (g_u32hiSec * 10); + u32Tmp += g_u32loSec; + sPt->u32Second = u32Tmp; + } +} + +/** + * @brief Update Current RTC Date and Time + * + * @param[in] sPt Specify the time property and current date and time. It includes: \n + * u32Year: Year value, range between 2000 ~ 2099. \n + * u32Month: Month value, range between 1 ~ 12. \n + * u32Day: Day value, range between 1 ~ 31. \n + * u32DayOfWeek: Day of the week. [RTC_SUNDAY / RTC_MONDAY / RTC_TUESDAY / + * RTC_WEDNESDAY / RTC_THURSDAY / RTC_FRIDAY / + * RTC_SATURDAY] \n + * u32Hour: Hour value, range between 0 ~ 23. \n + * u32Minute: Minute value, range between 0 ~ 59. \n + * u32Second: Second value, range between 0 ~ 59. \n + * u32TimeScale: [RTC_CLOCK_12 / RTC_CLOCK_24] \n + * u8AmPm: [RTC_AM / RTC_PM] \n + * + * @return None + * + * @details This API is used to update current date and time to RTC. + */ +void RTC_SetDateAndTime(S_RTC_TIME_DATA_T *sPt) +{ + uint32_t u32RegCAL, u32RegTIME; + + if(sPt == 0) + return ; + + /*-----------------------------------------------------------------------------------------------------*/ + /* Set RTC 24/12 hour setting and Day of the Week */ + /*-----------------------------------------------------------------------------------------------------*/ + RTC_WaitAccessEnable(); + if(sPt->u32TimeScale == RTC_CLOCK_12) + { + RTC->CLKFMT &= ~RTC_CLKFMT_24HEN_Msk; + + /*-------------------------------------------------------------------------------------------------*/ + /* Important, range of 12-hour PM mode is 21 up to 32 */ + /*-------------------------------------------------------------------------------------------------*/ + if(sPt->u32AmPm == RTC_PM) + sPt->u32Hour += 20; + } + else + { + RTC->CLKFMT |= RTC_CLKFMT_24HEN_Msk; + } + + /* Set Day of the Week */ + RTC->WEEKDAY = sPt->u32DayOfWeek; + + /*-----------------------------------------------------------------------------------------------------*/ + /* Set RTC Current Date and Time */ + /*-----------------------------------------------------------------------------------------------------*/ + u32RegCAL = ((sPt->u32Year - RTC_YEAR2000) / 10) << 20; + u32RegCAL |= (((sPt->u32Year - RTC_YEAR2000) % 10) << 16); + u32RegCAL |= ((sPt->u32Month / 10) << 12); + u32RegCAL |= ((sPt->u32Month % 10) << 8); + u32RegCAL |= ((sPt->u32Day / 10) << 4); + u32RegCAL |= (sPt->u32Day % 10); + + u32RegTIME = ((sPt->u32Hour / 10) << 20); + u32RegTIME |= ((sPt->u32Hour % 10) << 16); + u32RegTIME |= ((sPt->u32Minute / 10) << 12); + u32RegTIME |= ((sPt->u32Minute % 10) << 8); + u32RegTIME |= ((sPt->u32Second / 10) << 4); + u32RegTIME |= (sPt->u32Second % 10); + + /*-----------------------------------------------------------------------------------------------------*/ + /* Set RTC Calender and Time Loading */ + /*-----------------------------------------------------------------------------------------------------*/ + RTC_WaitAccessEnable(); + RTC->CAL = (uint32_t)u32RegCAL; + RTC->TIME = (uint32_t)u32RegTIME; +} + +/** + * @brief Update RTC Alarm Date and Time + * + * @param[in] sPt Specify the time property and alarm date and time. It includes: \n + * u32Year: Year value, range between 2000 ~ 2099. \n + * u32Month: Month value, range between 1 ~ 12. \n + * u32Day: Day value, range between 1 ~ 31. \n + * u32DayOfWeek: Day of the week. [RTC_SUNDAY / RTC_MONDAY / RTC_TUESDAY / + * RTC_WEDNESDAY / RTC_THURSDAY / RTC_FRIDAY / + * RTC_SATURDAY] \n + * u32Hour: Hour value, range between 0 ~ 23. \n + * u32Minute: Minute value, range between 0 ~ 59. \n + * u32Second: Second value, range between 0 ~ 59. \n + * u32TimeScale: [RTC_CLOCK_12 / RTC_CLOCK_24] \n + * u8AmPm: [RTC_AM / RTC_PM] \n + * + * @return None + * + * @details This API is used to update alarm date and time setting to RTC. + */ +void RTC_SetAlarmDateAndTime(S_RTC_TIME_DATA_T *sPt) +{ + uint32_t u32RegCALM, u32RegTALM; + + if(sPt == 0) + return ; + + /*-----------------------------------------------------------------------------------------------------*/ + /* Set RTC 24/12 hour setting and Day of the Week */ + /*-----------------------------------------------------------------------------------------------------*/ + RTC_WaitAccessEnable(); + if(sPt->u32TimeScale == RTC_CLOCK_12) + { + RTC->CLKFMT &= ~RTC_CLKFMT_24HEN_Msk; + + /*-------------------------------------------------------------------------------------------------*/ + /* Important, range of 12-hour PM mode is 21 up to 32 */ + /*-------------------------------------------------------------------------------------------------*/ + if(sPt->u32AmPm == RTC_PM) + sPt->u32Hour += 20; + } + else + { + RTC->CLKFMT |= RTC_CLKFMT_24HEN_Msk; + } + + /* Set Day of the Week */ + RTC->WEEKDAY = sPt->u32DayOfWeek; + + /*-----------------------------------------------------------------------------------------------------*/ + /* Set RTC Alarm Date and Time */ + /*-----------------------------------------------------------------------------------------------------*/ + u32RegCALM = ((sPt->u32Year - RTC_YEAR2000) / 10) << 20; + u32RegCALM |= (((sPt->u32Year - RTC_YEAR2000) % 10) << 16); + u32RegCALM |= ((sPt->u32Month / 10) << 12); + u32RegCALM |= ((sPt->u32Month % 10) << 8); + u32RegCALM |= ((sPt->u32Day / 10) << 4); + u32RegCALM |= (sPt->u32Day % 10); + + u32RegTALM = ((sPt->u32Hour / 10) << 20); + u32RegTALM |= ((sPt->u32Hour % 10) << 16); + u32RegTALM |= ((sPt->u32Minute / 10) << 12); + u32RegTALM |= ((sPt->u32Minute % 10) << 8); + u32RegTALM |= ((sPt->u32Second / 10) << 4); + u32RegTALM |= (sPt->u32Second % 10); + + RTC_WaitAccessEnable(); + RTC->CALM = (uint32_t)u32RegCALM; + RTC->TALM = (uint32_t)u32RegTALM; +} + +/** + * @brief Update RTC Current Date + * + * @param[in] u32Year The year calendar digit of current RTC setting. + * @param[in] u32Month The month calendar digit of current RTC setting. + * @param[in] u32Day The day calendar digit of current RTC setting. + * @param[in] u32DayOfWeek The Day of the week. [RTC_SUNDAY / RTC_MONDAY / RTC_TUESDAY / + * RTC_WEDNESDAY / RTC_THURSDAY / RTC_FRIDAY / + * RTC_SATURDAY] + * + * @return None + * + * @details This API is used to update current date to RTC. + */ +void RTC_SetDate(uint32_t u32Year, uint32_t u32Month, uint32_t u32Day, uint32_t u32DayOfWeek) +{ + uint32_t u32RegCAL; + + u32RegCAL = ((u32Year - RTC_YEAR2000) / 10) << 20; + u32RegCAL |= (((u32Year - RTC_YEAR2000) % 10) << 16); + u32RegCAL |= ((u32Month / 10) << 12); + u32RegCAL |= ((u32Month % 10) << 8); + u32RegCAL |= ((u32Day / 10) << 4); + u32RegCAL |= (u32Day % 10); + + RTC_WaitAccessEnable(); + + /* Set Day of the Week */ + RTC->WEEKDAY = u32DayOfWeek & RTC_WEEKDAY_WEEKDAY_Msk; + + /* Set RTC Calender Loading */ + RTC->CAL = (uint32_t)u32RegCAL; +} + +/** + * @brief Update RTC Current Time + * + * @param[in] u32Hour The hour time digit of current RTC setting. + * @param[in] u32Minute The minute time digit of current RTC setting. + * @param[in] u32Second The second time digit of current RTC setting. + * @param[in] u32TimeMode The 24-Hour / 12-Hour Time Scale Selection. [RTC_CLOCK_12 / RTC_CLOCK_24] + * @param[in] u32AmPm 12-hour time scale with AM and PM indication. Only Time Scale select 12-hour used. [RTC_AM / RTC_PM] + * + * @return None + * + * @details This API is used to update current time to RTC. + */ +void RTC_SetTime(uint32_t u32Hour, uint32_t u32Minute, uint32_t u32Second, uint32_t u32TimeMode, uint32_t u32AmPm) +{ + uint32_t u32RegTIME; + + /* Important, range of 12-hour PM mode is 21 up to 32 */ + if((u32TimeMode == RTC_CLOCK_12) && (u32AmPm == RTC_PM)) + u32Hour += 20; + + u32RegTIME = ((u32Hour / 10) << 20); + u32RegTIME |= ((u32Hour % 10) << 16); + u32RegTIME |= ((u32Minute / 10) << 12); + u32RegTIME |= ((u32Minute % 10) << 8); + u32RegTIME |= ((u32Second / 10) << 4); + u32RegTIME |= (u32Second % 10); + + /*-----------------------------------------------------------------------------------------------------*/ + /* Set RTC 24/12 hour setting and Day of the Week */ + /*-----------------------------------------------------------------------------------------------------*/ + RTC_WaitAccessEnable(); + if(u32TimeMode == RTC_CLOCK_12) + { + RTC->CLKFMT &= ~RTC_CLKFMT_24HEN_Msk; + } + else + { + RTC->CLKFMT |= RTC_CLKFMT_24HEN_Msk; + } + + RTC->TIME = (uint32_t)u32RegTIME; +} + +/** + * @brief Update RTC Alarm Date + * + * @param[in] u32Year The year calendar digit of RTC alarm setting. + * @param[in] u32Month The month calendar digit of RTC alarm setting. + * @param[in] u32Day The day calendar digit of RTC alarm setting. + * + * @return None + * + * @details This API is used to update alarm date setting to RTC. + */ +void RTC_SetAlarmDate(uint32_t u32Year, uint32_t u32Month, uint32_t u32Day) +{ + uint32_t u32RegCALM; + + u32RegCALM = ((u32Year - RTC_YEAR2000) / 10) << 20; + u32RegCALM |= (((u32Year - RTC_YEAR2000) % 10) << 16); + u32RegCALM |= ((u32Month / 10) << 12); + u32RegCALM |= ((u32Month % 10) << 8); + u32RegCALM |= ((u32Day / 10) << 4); + u32RegCALM |= (u32Day % 10); + + RTC_WaitAccessEnable(); + + /* Set RTC Alarm Date */ + RTC->CALM = (uint32_t)u32RegCALM; +} + +/** + * @brief Update RTC Alarm Time + * + * @param[in] u32Hour The hour time digit of RTC alarm setting. + * @param[in] u32Minute The minute time digit of RTC alarm setting. + * @param[in] u32Second The second time digit of RTC alarm setting. + * @param[in] u32TimeMode The 24-Hour / 12-Hour Time Scale Selection. [RTC_CLOCK_12 / RTC_CLOCK_24] + * @param[in] u32AmPm 12-hour time scale with AM and PM indication. Only Time Scale select 12-hour used. [RTC_AM / RTC_PM] + * + * @return None + * + * @details This API is used to update alarm time setting to RTC. + */ +void RTC_SetAlarmTime(uint32_t u32Hour, uint32_t u32Minute, uint32_t u32Second, uint32_t u32TimeMode, uint32_t u32AmPm) +{ + uint32_t u32RegTALM; + + /* Important, range of 12-hour PM mode is 21 up to 32 */ + if((u32TimeMode == RTC_CLOCK_12) && (u32AmPm == RTC_PM)) + u32Hour += 20; + + u32RegTALM = ((u32Hour / 10) << 20); + u32RegTALM |= ((u32Hour % 10) << 16); + u32RegTALM |= ((u32Minute / 10) << 12); + u32RegTALM |= ((u32Minute % 10) << 8); + u32RegTALM |= ((u32Second / 10) << 4); + u32RegTALM |= (u32Second % 10); + + /*-----------------------------------------------------------------------------------------------------*/ + /* Set RTC 24/12 hour setting and Day of the Week */ + /*-----------------------------------------------------------------------------------------------------*/ + RTC_WaitAccessEnable(); + if(u32TimeMode == RTC_CLOCK_12) + { + RTC->CLKFMT &= ~RTC_CLKFMT_24HEN_Msk; + } + else + { + RTC->CLKFMT |= RTC_CLKFMT_24HEN_Msk; + } + + /* Set RTC Alarm Time */ + RTC->TALM = (uint32_t)u32RegTALM; +} + +/** + * @brief Get Day of the Week + * + * @param None + * + * @retval 0 Sunday + * @retval 1 Monday + * @retval 2 Tuesday + * @retval 3 Wednesday + * @retval 4 Thursday + * @retval 5 Friday + * @retval 6 Saturday + * + * @details This API is used to get day of the week of current RTC date. + */ +uint32_t RTC_GetDayOfWeek(void) +{ + return (RTC->WEEKDAY & RTC_WEEKDAY_WEEKDAY_Msk); +} + +/** + * @brief Set RTC Tick Period Time + * + * @param[in] u32TickSelection It is used to set the RTC tick period time for Periodic Time Tick request. \n + * It consists of: \n + * RTC_TICK_1_SEC: Time tick is 1 second \n + * RTC_TICK_1_2_SEC: Time tick is 1/2 second \n + * RTC_TICK_1_4_SEC: Time tick is 1/4 second \n + * RTC_TICK_1_8_SEC: Time tick is 1/8 second \n + * RTC_TICK_1_16_SEC: Time tick is 1/16 second \n + * RTC_TICK_1_32_SEC: Time tick is 1/32 second \n + * RTC_TICK_1_64_SEC: Time tick is 1/64 second \n + * RTC_TICK_1_128_SEC: Time tick is 1/128 second + * + * @return None + * + * @details This API is used to set RTC tick period time for each tick interrupt. + */ +void RTC_SetTickPeriod(uint32_t u32TickSelection) +{ + RTC_WaitAccessEnable(); + + RTC->TICK = (RTC->TICK & ~RTC_TICK_TICK_Msk) | u32TickSelection; +} + +/** + * @brief Enable RTC Interrupt + * + * @param[in] u32IntFlagMask Specify the interrupt source. It consists of: \n + * RTC_INTEN_ALMIEN_Msk: Alarm interrupt \n + * RTC_INTEN_TICKIEN_Msk: Tick interrupt \n + * RTC_INTEN_SNPDIEN_Msk: Snooper Pin Event Detection interrupt \n + * + * @return None + * + * @details This API is used to enable the specify RTC interrupt function. + */ +void RTC_EnableInt(uint32_t u32IntFlagMask) +{ + RTC->INTEN |= u32IntFlagMask; +} + +/** + * @brief Disable RTC Interrupt + * + * @param[in] u32IntFlagMask Specify the interrupt source. It consists of: \n + * RTC_INTEN_ALMIEN_Msk: Alarm interrupt \n + * RTC_INTEN_TICKIEN_Msk: Tick interrupt \n + * RTC_INTEN_SNPDIEN_Msk: Snooper Pin Event Detection interrupt \n + * + * @return None + * + * @details This API is used to disable the specify RTC interrupt function. + */ +void RTC_DisableInt(uint32_t u32IntFlagMask) +{ + if(u32IntFlagMask & RTC_INTEN_ALMIEN_Msk) + { + RTC->INTEN &= ~RTC_INTEN_ALMIEN_Msk; + RTC->INTSTS = RTC_INTSTS_ALMIF_Msk; + } + + if(u32IntFlagMask & RTC_INTEN_TICKIEN_Msk) + { + RTC->INTEN &= ~RTC_INTEN_TICKIEN_Msk; + RTC->INTSTS = RTC_INTSTS_TICKIF_Msk; + } + + if(u32IntFlagMask & RTC_INTEN_SNPDIEN_Msk) + { + RTC->INTEN &= ~RTC_INTEN_SNPDIEN_Msk; + RTC->INTSTS = RTC_INTSTS_SNPDIF_Msk; + } +} + +/** + * @brief Enable Spare Registers Access + * + * @param None + * + * @return None + * + * @details This API is used to enable the spare registers 0~19 can be accessed. + */ +void RTC_EnableSpareAccess(void) +{ + RTC_WaitAccessEnable(); + + RTC->SPRCTL |= RTC_SPRCTL_SPRRWEN_Msk; + + while(!(RTC->SPRCTL & RTC_SPRCTL_SPRRWRDY_Msk)); +} + +/** + * @brief Disable Spare Register + * + * @param None + * + * @return None + * + * @details This API is used to disable the spare register 0~19 cannot be accessed. + */ +void RTC_DisableSpareRegister(void) +{ + RTC_WaitAccessEnable(); + + RTC->SPRCTL &= ~RTC_SPRCTL_SPRRWEN_Msk; +} + +/** + * @brief Enable Snooper Pin Detect + * + * @param[in] u32PinCondition Snooper pin trigger condition. Possible options are + * - \ref RTC_SNOOPER_LOW_LEVEL + * - \ref RTC_SNOOPER_HIGH_LEVEL + * - \ref RTC_SNOOPER_FALLING_EDGE + * - \ref RTC_SNOOPER_RISING_EDGE + * + * @return None + * + * @details This API is used to enable the snooper pin detect function with specify trigger condition. + */ +void RTC_EnableSnooperDetection(uint32_t u32PinCondition) +{ + RTC_WaitAccessEnable(); + + RTC->SPRCTL = ((RTC->SPRCTL & ~RTC_SNOOPER_DETECT_Msk) | u32PinCondition) | RTC_SPRCTL_SNPDEN_Msk; +} + +/** + * @brief Disable Snooper Pin Detect + * + * @param None + * + * @return None + * + * @details This API is used to disable the snooper pin detect function. + */ +void RTC_DisableSnooperDetection(void) +{ + RTC_WaitAccessEnable(); + + RTC->SPRCTL &= ~RTC_SPRCTL_SNPDEN_Msk; +} + +/*@}*/ /* end of group RTC_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group RTC_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +/*** (C) COPYRIGHT 2013~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_rtc.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_rtc.h new file mode 100644 index 00000000000..fd0c44222d6 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_rtc.h @@ -0,0 +1,272 @@ +/**************************************************************************//** + * @file rtc.h + * @version V3.00 + * $Revision: 10 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series RTC driver header file + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. + *****************************************************************************/ +#ifndef __RTC_H__ +#define __RTC_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup RTC_Driver RTC Driver + @{ +*/ + +/** @addtogroup RTC_EXPORTED_CONSTANTS RTC Exported Constants + @{ +*/ +/*---------------------------------------------------------------------------------------------------------*/ +/* RTC Initial Keyword Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define RTC_INIT_KEY 0xA5EB1357UL /*!< RTC Initiation Key to make RTC leaving reset state */ +#define RTC_WRITE_KEY 0x0000A965UL /*!< RTC Register Access Enable Key to enable RTC read/write accessible and kept 1024 RTC clock */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* RTC Time Attribute Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define RTC_CLOCK_12 0 /*!< RTC as 12-hour time scale with AM and PM indication */ +#define RTC_CLOCK_24 1 /*!< RTC as 24-hour time scale */ +#define RTC_AM 1 /*!< RTC as AM indication */ +#define RTC_PM 2 /*!< RTC as PM indication */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* RTC Tick Period Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define RTC_TICK_1_SEC 0x0UL /*!< RTC time tick period is 1 second */ +#define RTC_TICK_1_2_SEC 0x1UL /*!< RTC time tick period is 1/2 second */ +#define RTC_TICK_1_4_SEC 0x2UL /*!< RTC time tick period is 1/4 second */ +#define RTC_TICK_1_8_SEC 0x3UL /*!< RTC time tick period is 1/8 second */ +#define RTC_TICK_1_16_SEC 0x4UL /*!< RTC time tick period is 1/16 second */ +#define RTC_TICK_1_32_SEC 0x5UL /*!< RTC time tick period is 1/32 second */ +#define RTC_TICK_1_64_SEC 0x6UL /*!< RTC time tick period is 1/64 second */ +#define RTC_TICK_1_128_SEC 0x7UL /*!< RTC time tick period is 1/128 second */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* RTC Day of Week Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define RTC_SUNDAY 0x0UL /*!< Day of the Week is Sunday */ +#define RTC_MONDAY 0x1UL /*!< Day of the Week is Monday */ +#define RTC_TUESDAY 0x2UL /*!< Day of the Week is Tuesday */ +#define RTC_WEDNESDAY 0x3UL /*!< Day of the Week is Wednesday */ +#define RTC_THURSDAY 0x4UL /*!< Day of the Week is Thursday */ +#define RTC_FRIDAY 0x5UL /*!< Day of the Week is Friday */ +#define RTC_SATURDAY 0x6UL /*!< Day of the Week is Saturday */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* RTC Snooper Detection Mode Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define RTC_SNOOPER_LOW_LEVEL 0x0UL /*!< Snooper pin detected is low-level trigger */ +#define RTC_SNOOPER_HIGH_LEVEL 0x2UL /*!< Snooper pin detected is high-level trigger */ +#define RTC_SNOOPER_FALLING_EDGE 0x8UL /*!< Snooper pin detected is falling-edge trigger */ +#define RTC_SNOOPER_RISING_EDGE 0xAUL /*!< Snooper pin detected is rising-edge trigger */ +#define RTC_SNOOPER_DETECT_Msk 0xAUL /*!< Snooper pin detected mask bits */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* RTC Miscellaneous Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define RTC_WAIT_COUNT 0xFFFFFFFF /*!< Initial Time-out Value */ +#define RTC_YEAR2000 2000 /*!< RTC Reference for compute year data */ +#define RTC_FCR_REFERENCE 32761 /*!< RTC Reference for frequency compensation */ + +/*@}*/ /* end of group RTC_EXPORTED_CONSTANTS */ + + +/** @addtogroup RTC_EXPORTED_STRUCTS RTC Exported Structs + @{ +*/ +/** + * @details RTC define Time Data Struct + */ +typedef struct +{ + uint32_t u32Year; /*!< Year value */ + uint32_t u32Month; /*!< Month value */ + uint32_t u32Day; /*!< Day value */ + uint32_t u32DayOfWeek; /*!< Day of week value */ + uint32_t u32Hour; /*!< Hour value */ + uint32_t u32Minute; /*!< Minute value */ + uint32_t u32Second; /*!< Second value */ + uint32_t u32TimeScale; /*!< 12-Hour, 24-Hour */ + uint32_t u32AmPm; /*!< Only Time Scale select 12-hr used */ +} S_RTC_TIME_DATA_T; + +/*@}*/ /* end of group RTC_EXPORTED_STRUCTS */ + + +/** @addtogroup RTC_EXPORTED_FUNCTIONS RTC Exported Functions + @{ +*/ + +/** + * @brief Indicate is Leap Year or not + * + * @param None + * + * @retval 0 This year is not a leap year + * @retval 1 This year is a leap year + * + * @details According to current date, return this year is leap year or not. + */ +#define RTC_IS_LEAP_YEAR() (RTC->LEAPYEAR & RTC_LEAPYEAR_LEAPYEAR_Msk ? 1:0) + +/** + * @brief Clear RTC Alarm Interrupt Flag + * + * @param None + * + * @return None + * + * @details This macro is used to clear RTC alarm interrupt flag. + */ +#define RTC_CLEAR_ALARM_INT_FLAG() (RTC->INTSTS = (RTC->INTSTS & ~(RTC_INTSTS_TICKIF_Msk | RTC_INTSTS_SNPDIF_Msk)) | RTC_INTSTS_ALMIF_Msk) + +/** + * @brief Clear RTC Tick Interrupt Flag + * + * @param None + * + * @return None + * + * @details This macro is used to clear RTC tick interrupt flag. + */ +#define RTC_CLEAR_TICK_INT_FLAG() (RTC->INTSTS = (RTC->INTSTS & ~(RTC_INTSTS_ALMIF_Msk | RTC_INTSTS_SNPDIF_Msk)) | RTC_INTSTS_TICKIF_Msk) + +/** + * @brief Clear RTC Snooper Interrupt Flag + * + * @param None + * + * @return None + * + * @details This macro is used to clear RTC snooper pin interrupt flag. + */ +#define RTC_CLEAR_SNOOPER_INT_FLAG() (RTC->INTSTS = (RTC->INTSTS & ~(RTC_INTSTS_ALMIF_Msk | RTC_INTSTS_TICKIF_Msk)) | RTC_INTSTS_SNPDIF_Msk) + +/** + * @brief Get RTC Alarm Interrupt Flag + * + * @param None + * + * @retval 0 RTC alarm interrupt did not occur + * @retval 1 RTC alarm interrupt occurred + * + * @details This macro indicates RTC alarm interrupt occurred or not. + */ +#define RTC_GET_ALARM_INT_FLAG() ((RTC->INTSTS & RTC_INTSTS_ALMIF_Msk)? 1:0) + +/** + * @brief Get RTC Time Tick Interrupt Flag + * + * @param None + * + * @retval 0 RTC time tick interrupt did not occur + * @retval 1 RTC time tick interrupt occurred + * + * @details This macro indicates RTC time tick interrupt occurred or not. + */ +#define RTC_GET_TICK_INT_FLAG() ((RTC->INTSTS & RTC_INTSTS_TICKIF_Msk)? 1:0) + +/** + * @brief Get RTC Snooper Interrupt Flag + * + * @param None + * + * @retval 0 RTC snooper pin interrupt did not occur + * @retval 1 RTC snooper pin interrupt occurred + * + * @details This macro indicates RTC snooper pin interrupt occurred or not. + */ +#define RTC_GET_SNPPOER_INT_FLAG() ((RTC->INTSTS & RTC_INTSTS_SNPDIF_Msk)? 1:0) + +/** + * @brief Read Spare Register + * + * @param[in] u32RegNum The spare register number, 0~19. + * + * @return Spare register content + * + * @details Read the specify spare register content. + * @note The returned value is valid only when SPRRDY(SPRCTL[7] SPR Register Ready) bit is set. \n + * And its controlled by RTC Access Enable Register. + */ +#define RTC_READ_SPARE_REGISTER(u32RegNum) (RTC->SPR[(u32RegNum)]) + +/** + * @brief Write Spare Register + * + * @param[in] u32RegNum The spare register number, 0~19. + * @param[in] u32RegValue The spare register value. + * + * @return None + * + * @details Write specify data to spare register. + * @note This macro is effect only when SPRRDY(SPRCTL[7] SPR Register Ready) bit is set. \n + * And its controlled by RTC Access Enable Register(RTC_RWEN). + */ +#define RTC_WRITE_SPARE_REGISTER(u32RegNum, u32RegValue) (RTC->SPR[(u32RegNum)] = (u32RegValue)) + +/** + * @brief Wait RTC Access Enable + * + * @param None + * + * @return None + * + * @details This function is used to enable the maximum RTC read/write accessible time. + */ +static __INLINE void RTC_WaitAccessEnable(void) +{ + /* To wait RWENF bit is cleared and enable RWENF bit (Access Enable bit) again */ + while((RTC->RWEN & RTC_RWEN_RWENF_Msk) == RTC_RWEN_RWENF_Msk); + RTC->RWEN = RTC_WRITE_KEY; + + /* To wait RWENF bit is set and user can access the protected-register of RTC from now on */ + while((RTC->RWEN & RTC_RWEN_RWENF_Msk) == 0x0); +} + +void RTC_Open(S_RTC_TIME_DATA_T *sPt); +void RTC_Close(void); +void RTC_32KCalibration(int32_t i32FrequencyX100); +void RTC_GetDateAndTime(S_RTC_TIME_DATA_T *sPt); +void RTC_GetAlarmDateAndTime(S_RTC_TIME_DATA_T *sPt); +void RTC_SetDateAndTime(S_RTC_TIME_DATA_T *sPt); +void RTC_SetAlarmDateAndTime(S_RTC_TIME_DATA_T *sPt); +void RTC_SetDate(uint32_t u32Year, uint32_t u32Month, uint32_t u32Day, uint32_t u32DayOfWeek); +void RTC_SetTime(uint32_t u32Hour, uint32_t u32Minute, uint32_t u32Second, uint32_t u32TimeMode, uint32_t u32AmPm); +void RTC_SetAlarmDate(uint32_t u32Year, uint32_t u32Month, uint32_t u32Day); +void RTC_SetAlarmTime(uint32_t u32Hour, uint32_t u32Minute, uint32_t u32Second, uint32_t u32TimeMode, uint32_t u32AmPm); +uint32_t RTC_GetDayOfWeek(void); +void RTC_SetTickPeriod(uint32_t u32TickSelection); +void RTC_EnableInt(uint32_t u32IntFlagMask); +void RTC_DisableInt(uint32_t u32IntFlagMask); +void RTC_EnableSpareAccess(void); +void RTC_DisableSpareRegister(void); +void RTC_EnableSnooperDetection(uint32_t u32PinCondition); +void RTC_DisableSnooperDetection(void); + +/*@}*/ /* end of group RTC_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group RTC_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +#ifdef __cplusplus +} +#endif + +#endif //__RTC_H__ + +/*** (C) COPYRIGHT 2013~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_sc.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_sc.c new file mode 100644 index 00000000000..85aa2bb7b8c --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_sc.c @@ -0,0 +1,299 @@ +/**************************************************************************//** + * @file sc.c + * @version V3.00 + * $Revision: 9 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series Smartcard(SC) driver source file + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ +#include "M451Series.h" + +// Below are variables used locally by SC driver and does not want to parse by doxygen unless HIDDEN_SYMBOLS is defined +/// @cond HIDDEN_SYMBOLS +static uint32_t u32CardStateIgnore[SC_INTERFACE_NUM] = {0}; + +/// @endcond HIDDEN_SYMBOLS + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup SC_Driver SC Driver + @{ +*/ + + +/** @addtogroup SC_EXPORTED_FUNCTIONS SC Exported Functions + @{ +*/ + +/** + * @brief This function indicates specified smartcard slot status. + * @param[in] sc The pointer of smartcard module. + * @retval TRUE Card insert. + * @retval FALSE Card remove. + * @details This function is used to check if specified smart card slot is presented. + */ +uint32_t SC_IsCardInserted(SC_T *sc) +{ + // put conditions into two variable to remove IAR compilation warning + uint32_t cond1 = ((sc->STATUS & SC_STATUS_CDPINSTS_Msk) >> SC_STATUS_CDPINSTS_Pos); + uint32_t cond2 = ((sc->CTL & SC_CTL_CDLV_Msk) >> SC_CTL_CDLV_Pos); + + if(sc == SC0 && u32CardStateIgnore[0] == 1) + return TRUE; +#if 0 /* M451 series has only one SC interface */ + else if(sc == SC1 && u32CardStateIgnore[1] == 1) + return TRUE; + else if(sc == SC2 && u32CardStateIgnore[2] == 1) + return TRUE; + else if(sc == SC3 && u32CardStateIgnore[3] == 1) + return TRUE; + else if(sc == SC4 && u32CardStateIgnore[4] == 1) + return TRUE; + else if(sc == SC5 && u32CardStateIgnore[5] == 1) + return TRUE; +#endif + else if(cond1 != cond2) + return FALSE; + else + return TRUE; +} + +/** + * @brief Reset the Tx/Rx FIFO. + * @param[in] sc The pointer of smartcard module. + * @return None + * @details This function reset both transmit and receive FIFO of specified smartcard module. + */ +void SC_ClearFIFO(SC_T *sc) +{ + sc->ALTCTL |= (SC_ALTCTL_TXRST_Msk | SC_ALTCTL_RXRST_Msk); +} + +/** + * @brief This function disable specified smartcard module. + * @param[in] sc The pointer of smartcard module. + * @return None + * @details SC will force all transition to IDLE state. + */ +void SC_Close(SC_T *sc) +{ + sc->INTEN = 0; + sc->PINCTL = 0; + sc->ALTCTL = 0; + sc->CTL = 0; +} + +/** + * @brief This function initialized smartcard module. + * @param[in] sc The pointer of smartcard module. + * @param[in] u32CD Card detect polarity, select the CD pin state which indicates card insert. Could be: + * -\ref SC_PIN_STATE_HIGH. + * -\ref SC_PIN_STATE_LOW. + * -\ref SC_PIN_STATE_IGNORE, no card detect pin, always assumes card present. + * @param[in] u32PWR Power on polarity, select the PWR pin state which could set smartcard VCC to high level. Could be: + * -\ref SC_PIN_STATE_HIGH. + * -\ref SC_PIN_STATE_LOW. + * @return None + * @details Initialization process configures smartcard and enables engine clock. + */ +void SC_Open(SC_T *sc, uint32_t u32CD, uint32_t u32PWR) +{ + uint32_t u32Reg = 0, u32Intf; + + if(sc == SC0) + u32Intf = 0; +#if 0 /* M451 series has only one SC interface */ + else if(sc == SC1) + u32Intf = 1; + else if(sc == SC2) + u32Intf = 2; + else if(sc == SC3) + u32Intf = 3; + else if(sc == SC4) + u32Intf = 4; + else if(sc == SC5) + u32Intf = 5; +#endif + else + return ; + + if(u32CD != SC_PIN_STATE_IGNORE) { + u32Reg = u32CD ? 0: SC_CTL_CDLV_Msk; + u32CardStateIgnore[u32Intf] = 0; + } else { + u32CardStateIgnore[u32Intf] = 1; + } + while(sc->PINCTL & SC_PINCTL_SYNC_Msk); + sc->PINCTL = u32PWR ? 0 : SC_PINCTL_PWRINV_Msk; + while(sc->CTL & SC_CTL_SYNC_Msk); + sc->CTL = SC_CTL_SCEN_Msk | u32Reg; +} + +/** + * @brief This function reset specified smartcard module to its default state for activate smartcard. + * @param[in] sc The pointer of smartcard module. + * @return None + * @details Reset the Tx/Rx FIFO & clock & initial default parameter. + */ +void SC_ResetReader(SC_T *sc) +{ + uint32_t u32Intf; + + if(sc == SC0) + u32Intf = 0; +#if 0 /* M451 series has only one SC interface */ + else if(sc == SC1) + u32Intf = 1; + else if(sc == SC2) + u32Intf = 2; + else if(sc == SC3) + u32Intf = 3; + else if(sc == SC4) + u32Intf = 4; + else if(sc == SC5) + u32Intf = 5; +#endif + else + return ; + + // Reset FIFO, enable auto de-activation while card removal + sc->ALTCTL |= (SC_ALTCTL_TXRST_Msk | SC_ALTCTL_RXRST_Msk | SC_ALTCTL_ADACEN_Msk); + // Set Rx trigger level to 1 character, longest card detect debounce period, disable error retry (EMV ATR does not use error retry) + while(sc->CTL & SC_CTL_SYNC_Msk); + sc->CTL &= ~(SC_CTL_RXTRGLV_Msk | SC_CTL_CDDBSEL_Msk | SC_CTL_TXRTY_Msk | SC_CTL_RXRTY_Msk); + // Enable auto convention, and all three smartcard internal timers + sc->CTL |= SC_CTL_AUTOCEN_Msk | SC_CTL_TMRSEL_Msk; + // Disable Rx timeout + sc->RXTOUT = 0; + // 372 clocks per ETU by default + sc->ETUCTL = 371; + + /* Enable necessary interrupt for smartcard operation */ + if(u32CardStateIgnore[u32Intf]) // Do not enable card detect interrupt if card present state ignore + sc->INTEN = (SC_INTEN_RDAIEN_Msk | + SC_INTEN_TERRIEN_Msk | + SC_INTEN_TMR0IEN_Msk | + SC_INTEN_TMR1IEN_Msk | + SC_INTEN_TMR2IEN_Msk | + SC_INTEN_BGTIEN_Msk | + SC_INTEN_ACERRIEN_Msk); + else + sc->INTEN = (SC_INTEN_RDAIEN_Msk | + SC_INTEN_TERRIEN_Msk | + SC_INTEN_TMR0IEN_Msk | + SC_INTEN_TMR1IEN_Msk | + SC_INTEN_TMR2IEN_Msk | + SC_INTEN_BGTIEN_Msk | + SC_INTEN_ACERRIEN_Msk | + SC_INTEN_CDIEN_Msk); + + return; +} + +/** + * @brief Set Block Guard Time. + * @param[in] sc The pointer of smartcard module. + * @param[in] u32BGT Block guard time using ETU as unit, valid range are between 1 ~ 32. + * @return None + * @details This function block guard time (BGT) of specified smartcard module. + */ +void SC_SetBlockGuardTime(SC_T *sc, uint32_t u32BGT) +{ + sc->CTL = (sc->CTL & ~SC_CTL_BGT_Msk) | ((u32BGT - 1) << SC_CTL_BGT_Pos); +} + +/** + * @brief Set character guard time. + * @param[in] sc The pointer of smartcard module. + * @param[in] u32CGT Character guard time using ETU as unit, valid range are between 11 ~ 267. + * @return None + * @details This function character guard time (CGT) of specified smartcard module. + * @note Before using this API, user should set the correct stop bit length first. + */ +void SC_SetCharGuardTime(SC_T *sc, uint32_t u32CGT) +{ + u32CGT -= sc->CTL & SC_CTL_NSB_Msk ? 11 : 12; + sc->EGT = u32CGT; +} + +/** + * @brief Stop all Timer counting. + * @param[in] sc The pointer of smartcard module. + * @return None + * @details This function stop all smartcard timer of specified smartcard module. + * @note This function stop the timers within smartcard module, \b not timer module. + */ +void SC_StopAllTimer(SC_T *sc) +{ + sc->ALTCTL &= ~(SC_ALTCTL_CNTEN0_Msk | SC_ALTCTL_CNTEN1_Msk | SC_ALTCTL_CNTEN2_Msk); +} + +/** + * @brief This function configure and start a smartcard timer of specified smartcard module. + * @param[in] sc The pointer of smartcard module. + * @param[in] u32TimerNum Timer(s) to start. Valid values are 0, 1, 2. + * @param[in] u32Mode Timer operating mode, valid values are: + * - \ref SC_TMR_MODE_0 + * - \ref SC_TMR_MODE_1 + * - \ref SC_TMR_MODE_2 + * - \ref SC_TMR_MODE_3 + * - \ref SC_TMR_MODE_4 + * - \ref SC_TMR_MODE_5 + * - \ref SC_TMR_MODE_6 + * - \ref SC_TMR_MODE_7 + * - \ref SC_TMR_MODE_8 + * - \ref SC_TMR_MODE_F + * @param[in] u32ETUCount Timer timeout duration, ETU based. For timer 0, valid range are between 1~0x1000000ETUs. + * For timer 1 and timer 2, valid range are between 1 ~ 0x100 ETUs. + * @return None + * @details Enable Timer starting, counter will count when condition match. + * @note This function start the timer within smartcard module, \b not timer module. + * @note Depend on the timer operating mode, timer may not start counting immediately. + */ +void SC_StartTimer(SC_T *sc, uint32_t u32TimerNum, uint32_t u32Mode, uint32_t u32ETUCount) +{ + uint32_t reg = u32Mode | (SC_TMRCTL0_CNT_Msk & (u32ETUCount - 1)); + + if(u32TimerNum == 0) { + sc->TMRCTL0 = reg; + sc->ALTCTL |= SC_ALTCTL_CNTEN0_Msk; + } else if(u32TimerNum == 1) { + sc->TMRCTL1 = reg; + sc->ALTCTL |= SC_ALTCTL_CNTEN1_Msk; + } else { // timer 2 + sc->TMRCTL2 = reg; + sc->ALTCTL |= SC_ALTCTL_CNTEN2_Msk; + } +} + +/** + * @brief Stop Timer counting. + * @param[in] sc The pointer of smartcard module. + * @param[in] u32TimerNum Timer(s) to stop. Valid values are 0, 1, 2. + * @return None + * @details This function stop a smartcard timer of specified smartcard module. + * @note This function stop the timer within smartcard module, \b not timer module. + */ +void SC_StopTimer(SC_T *sc, uint32_t u32TimerNum) +{ + if(u32TimerNum == 0) + sc->ALTCTL &= ~SC_ALTCTL_CNTEN0_Msk; + else if(u32TimerNum == 1) + sc->ALTCTL &= ~SC_ALTCTL_CNTEN1_Msk; + else // timer 2 + sc->ALTCTL &= ~SC_ALTCTL_CNTEN2_Msk; +} + + + +/*@}*/ /* end of group SC_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group SC_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +/*** (C) COPYRIGHT 2013~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_sc.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_sc.h new file mode 100644 index 00000000000..295e872110b --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_sc.h @@ -0,0 +1,269 @@ +/**************************************************************************//** + * @file sc.h + * @version V3.00 + * $Revision: 13 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series Smartcard (SC) driver header file + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. + *****************************************************************************/ +#ifndef __SC_H__ +#define __SC_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup SC_Driver SC Driver + @{ +*/ + +/** @addtogroup SC_EXPORTED_CONSTANTS SC Exported Constants + @{ +*/ +#define SC_INTERFACE_NUM 1 /*!< Smartcard interface numbers */ /* M451 series has only one SC interface */ +#define SC_PIN_STATE_HIGH 1 /*!< Smartcard pin status high */ +#define SC_PIN_STATE_LOW 0 /*!< Smartcard pin status low */ +#define SC_PIN_STATE_IGNORE 0xFFFFFFFF /*!< Ignore pin status */ +#define SC_CLK_ON 1 /*!< Smartcard clock on */ +#define SC_CLK_OFF 0 /*!< Smartcard clock off */ + +#define SC_TMR_MODE_0 (0ul << SC_TMRCTL0_OPMODE_Pos) /*!INTEN |= (u32Mask)) + +/** + * @brief Disable smartcard interrupt. + * @param[in] sc The pointer of smartcard module. + * @param[in] u32Mask Interrupt mask to be disabled. A combination of + * - \ref SC_INTEN_ACERRIEN_Msk + * - \ref SC_INTEN_RXTOIF_Msk + * - \ref SC_INTEN_INITIEN_Msk + * - \ref SC_INTEN_CDIEN_Msk + * - \ref SC_INTEN_BGTIEN_Msk + * - \ref SC_INTEN_TMR2IEN_Msk + * - \ref SC_INTEN_TMR1IEN_Msk + * - \ref SC_INTEN_TMR0IEN_Msk + * - \ref SC_INTEN_TERRIEN_Msk + * - \ref SC_INTEN_TBEIEN_Msk + * - \ref SC_INTEN_RDAIEN_Msk + * @return None + * @details The macro is used to disable Auto-convention error interrupt, Receiver buffer time-out interrupt, Initial end interrupt, + * Card detect interrupt, Block guard time interrupt, Timer2 interrupt, Timer1 interrupt, Timer0 interrupt, + * Transfer error interrupt, Transmit buffer empty interrupt or Receive data reach trigger level interrupt. + * \hideinitializer + */ +#define SC_DISABLE_INT(sc, u32Mask) ((sc)->INTEN &= ~(u32Mask)) + +/** + * @brief This macro set VCC pin state of smartcard interface. + * @param[in] sc The pointer of smartcard module. + * @param[in] u32State Pin state of VCC pin, valid parameters are: + * \ref SC_PIN_STATE_HIGH :Smartcard pin status high. + * \ref SC_PIN_STATE_LOW :Smartcard pin status low. + * @return None + * @details User can set PWREN (SC_PINCTL[0]) and PWRINV (SC_PINCTL[11])to decide SC_PWR pin is in high or low level. + * \hideinitializer + */ +#define SC_SET_VCC_PIN(sc, u32State) \ + do {\ + while((sc)->PINCTL & SC_PINCTL_SYNC_Msk);\ + if(u32State)\ + (sc)->PINCTL |= SC_PINCTL_PWREN_Msk;\ + else\ + (sc)->PINCTL &= ~SC_PINCTL_PWREN_Msk;\ + }while(0) + + +/** + * @brief Set CLK output status. + * @param[in] sc The pointer of smartcard module. + * @param[in] u32OnOff Clock on or off for selected smartcard module, valid values are: + * \ref SC_CLK_ON :Smartcard clock on. + * \ref SC_CLK_OFF :Smartcard clock off. + * @return None + * @details User can set CLKKEEP (SC_PINCTL[6]) to decide SC_CLK pin always keeps free running or not. + * \hideinitializer + */ +#define SC_SET_CLK_PIN(sc, u32OnOff)\ + do {\ + while((sc)->PINCTL & SC_PINCTL_SYNC_Msk);\ + if(u32OnOff)\ + (sc)->PINCTL |= SC_PINCTL_CLKKEEP_Msk;\ + else\ + (sc)->PINCTL &= ~(SC_PINCTL_CLKKEEP_Msk);\ + }while(0) + +/** + * @brief Set I/O pin state. + * @param[in] sc The pointer of smartcard module. + * @param[in] u32State Pin state of I/O pin, valid parameters are: + * \ref SC_PIN_STATE_HIGH :Smartcard pin status high. + * \ref SC_PIN_STATE_LOW :Smartcard pin status low. + * @return None + * @details User can set SCDOUT(SC_PINCTL[9]) to decide SCDOUT pin to high or low. + * \hideinitializer + */ +#define SC_SET_IO_PIN(sc, u32State)\ + do {\ + while((sc)->PINCTL & SC_PINCTL_SYNC_Msk);\ + if(u32State)\ + (sc)->PINCTL |= SC_PINCTL_SCDOUT_Msk;\ + else\ + (sc)->PINCTL &= ~SC_PINCTL_SCDOUT_Msk;\ + }while(0) + +/** + * @brief Set RST pin state. + * @param[in] sc The pointer of smartcard module. + * @param[in] u32State Pin state of RST pin, valid parameters are: + * \ref SC_PIN_STATE_HIGH :Smartcard pin status high. + * \ref SC_PIN_STATE_LOW :Smartcard pin status low. + * @return None + * @details User can set SCRST(SC_PINCTL[1]) to decide SCRST pin to high or low. + * \hideinitializer + */ +#define SC_SET_RST_PIN(sc, u32State)\ + do {\ + while((sc)->PINCTL & SC_PINCTL_SYNC_Msk);\ + if(u32State)\ + (sc)->PINCTL |= SC_PINCTL_SCRST_Msk;\ + else\ + (sc)->PINCTL &= ~SC_PINCTL_SCRST_Msk;\ + }while(0) + +/** + * @brief Read one byte from smartcard module receive FIFO. + * @param[in] sc The pointer of smartcard module. + * @return One byte read from receive FIFO. + * @details By reading DAT register, the SC will return an 8-bit received data. + * \hideinitializer + */ +#define SC_READ(sc) ((char)((sc)->DAT)) + +/** + * @brief Write one byte to smartcard module transmit FIFO. + * @param[in] sc The pointer of smartcard module. + * @param[in] u8Data Data to write to transmit FIFO. + * @return None + * @details By writing data to DAT register, the SC will send out an 8-bit data. + * \hideinitializer + */ +#define SC_WRITE(sc, u8Data) ((sc)->DAT = (u8Data)) + +/** + * @brief This macro set smartcard stop bit length. + * @param[in] sc The pointer of smartcard module. + * @param[in] u32Len Stop bit length, ether 1 or 2. + * @return None + * @details Stop bit length must be 1 for T = 1 protocol and 2 for T = 0 protocol. + * \hideinitializer + */ +#define SC_SET_STOP_BIT_LEN(sc, u32Len) ((sc)->CTL = ((sc)->CTL & ~SC_CTL_NSB_Msk) | ((u32Len) == 1 ? SC_CTL_NSB_Msk : 0)) + +/** + * @brief Enable/Disable Tx error retry, and set Tx error retry count. + * @param[in] sc The pointer of smartcard module. + * @param[in] u32Count The number of times of Tx error retry count, between 0~8. 0 means disable Tx error retry. + * @return None + * @details This macro enable/disable transmitter retry function when parity error has occurred, and set error retry count. + */ +__STATIC_INLINE void SC_SetTxRetry(SC_T *sc, uint32_t u32Count) +{ + while((sc)->CTL & SC_CTL_SYNC_Msk); + if(u32Count == 0) { // disable Tx error retry + (sc)->CTL &= ~(SC_CTL_TXRTY_Msk | SC_CTL_TXRTYEN_Msk); + } else { + (sc)->CTL = ((sc)->CTL & ~SC_CTL_TXRTY_Msk) | ((u32Count - 1) << SC_CTL_TXRTY_Pos) | SC_CTL_TXRTYEN_Msk; + } +} + +/** + * @brief Enable/Disable Rx error retry, and set Rx error retry count. + * @param[in] sc The pointer of smartcard module. + * @param[in] u32Count The number of times of Rx error retry count, between 0~8. 0 means disable Rx error retry. + * @return None + * @details This macro enable/disable receiver retry function when parity error has occurred, and set error retry count. + */ +__STATIC_INLINE void SC_SetRxRetry(SC_T *sc, uint32_t u32Count) +{ + while((sc)->CTL & SC_CTL_SYNC_Msk); + if(u32Count == 0) { // disable Rx error retry + (sc)->CTL &= ~(SC_CTL_RXRTY_Msk | SC_CTL_RXRTYEN_Msk); + } else { + (sc)->CTL = ((sc)->CTL & ~SC_CTL_RXRTY_Msk) | ((u32Count - 1) << SC_CTL_RXRTY_Pos) | SC_CTL_RXRTYEN_Msk; + } +} + + +uint32_t SC_IsCardInserted(SC_T *sc); +void SC_ClearFIFO(SC_T *sc); +void SC_Close(SC_T *sc); +void SC_Open(SC_T *sc, uint32_t u32CardDet, uint32_t u32PWR); +void SC_ResetReader(SC_T *sc); +void SC_SetBlockGuardTime(SC_T *sc, uint32_t u32BGT); +void SC_SetCharGuardTime(SC_T *sc, uint32_t u32CGT); +void SC_StopAllTimer(SC_T *sc); +void SC_StartTimer(SC_T *sc, uint32_t u32TimerNum, uint32_t u32Mode, uint32_t u32ETUCount); +void SC_StopTimer(SC_T *sc, uint32_t u32TimerNum); + + +/*@}*/ /* end of group SC_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group SC_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +#ifdef __cplusplus +} +#endif + +#endif //__SC_H__ + +/*** (C) COPYRIGHT 2013~2015 Nuvoton Technology Corp. ***/ + diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_scuart.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_scuart.c new file mode 100644 index 00000000000..aca419e2228 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_scuart.c @@ -0,0 +1,223 @@ +/**************************************************************************//** + * @file scuart.c + * @version V3.00 + * $Revision: 8 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series Smartcard UART mode (SCUART) driver source file + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ +#include "M451Series.h" + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup SCUART_Driver SCUART Driver + @{ +*/ + + +/** @addtogroup SCUART_EXPORTED_FUNCTIONS SCUART Exported Functions + @{ +*/ + +/** + * @brief Disable smartcard uart interface. + * @param sc The pointer of smartcard module. + * @return None + * @details The function is used to disable smartcard interface UART mode. + */ +void SCUART_Close(SC_T* sc) +{ + sc->INTEN = 0; + sc->UARTCTL = 0; + sc->CTL = 0; + +} + +/// @cond HIDDEN_SYMBOLS +/** + * @brief This function returns module clock of specified SC interface + * @param[in] sc The pointer of smartcard module. + * @return Module clock of specified SC interface + */ +static uint32_t SCUART_GetClock(SC_T *sc) +{ + uint32_t u32ClkSrc, u32Num, u32Clk; + + if(sc == SC0) + u32Num = 0; +#if 0 /* M451 series has only one SC interface */ + else if(sc == SC1) + u32Num = 1; + else if(sc == SC2) + u32Num = 2; + else if(sc == SC3) + u32Num = 3; + else if(sc == SC4) + u32Num = 4; + else if(sc == SC5) + u32Intf = 5; +#endif + else + return FALSE; + + u32ClkSrc = (CLK->CLKSEL3 >> (2 * u32Num)) & CLK_CLKSEL3_SC0SEL_Msk; + + // Get smartcard module clock + if(u32ClkSrc == 0) + u32Clk = __HXT; + else if(u32ClkSrc == 1) + u32Clk = CLK_GetPLLClockFreq(); + else if(u32ClkSrc == 2) { + SystemCoreClockUpdate(); + if(CLK->CLKSEL0 & CLK_CLKSEL0_PCLK0SEL_Msk) + u32Clk = SystemCoreClock / 2; + else + u32Clk = SystemCoreClock; + } else + u32Clk = __HIRC; + +#if 0 /* M451 series has only one SC interface */ + if(u32Num < 4) { + u32Clk /= (((CLK->CLKDIV1 >> (8 * u32Num)) & CLK_CLKDIV1_SC0DIV_Msk) + 1); + } else { + u32Clk /= (((CLK->CLKDIV2 >> (8 * (u32Num - 4))) & CLK_CLKDIV2_SC4DIV_Msk) + 1); + } +#else + u32Clk /= (((CLK->CLKDIV1 >> (8 * u32Num)) & CLK_CLKDIV1_SC0DIV_Msk) + 1); +#endif + + return u32Clk; +} +/// @endcond HIDDEN_SYMBOLS + +/** + * @brief Enable smartcard uart interface. + * @param[in] sc The pointer of smartcard module. + * @param[in] u32baudrate Target baudrate of smartcard module. + * @return Actual baudrate of smartcard mode. + * @details This function use to enable smartcard module UART mode and set baudrate. + * @note This function configures character width to 8 bits, 1 stop bit, and no parity. + * And can use \ref SCUART_SetLineConfig function to update these settings. + */ +uint32_t SCUART_Open(SC_T* sc, uint32_t u32baudrate) +{ + uint32_t u32Clk = SCUART_GetClock(sc), u32Div; + + // Calculate divider for target baudrate + u32Div = (u32Clk + (u32baudrate >> 1) - 1) / u32baudrate - 1; + + sc->CTL = SC_CTL_SCEN_Msk | SC_CTL_NSB_Msk; // Enable smartcard interface and stop bit = 1 + sc->UARTCTL = SCUART_CHAR_LEN_8 | SCUART_PARITY_NONE | SC_UARTCTL_UARTEN_Msk; // Enable UART mode, disable parity and 8 bit per character + sc->ETUCTL = u32Div; + + return(u32Clk / (u32Div+1)); +} + +/** + * @brief Read data from smartcard UART interface. + * @param[in] sc The pointer of smartcard module. + * @param[in] pu8RxBuf The buffer to store receive the data. + * @param[in] u32ReadBytes Target number of characters to receive. + * @return Actual character number reads to buffer. + * @details The function is used to read Rx data from RX FIFO. + * @note This function does not block and return immediately if there's no data available. + */ +uint32_t SCUART_Read(SC_T* sc, uint8_t *pu8RxBuf, uint32_t u32ReadBytes) +{ + uint32_t u32Count; + + for(u32Count = 0; u32Count < u32ReadBytes; u32Count++) { + if(SCUART_GET_RX_EMPTY(sc)) { // no data available + break; + } + pu8RxBuf[u32Count] = SCUART_READ(sc); // get data from FIFO + } + + return u32Count; +} + +/** + * @brief This function use to config smartcard UART mode line setting. + * @param[in] sc The pointer of smartcard module. + * @param[in] u32Baudrate Target baudrate of smartcard module. If this value is 0, UART baudrate will not change. + * @param[in] u32DataWidth The data length, could be: + * - \ref SCUART_CHAR_LEN_5 + * - \ref SCUART_CHAR_LEN_6 + * - \ref SCUART_CHAR_LEN_7 + * - \ref SCUART_CHAR_LEN_8 + * @param[in] u32Parity The parity setting, could be: + * - \ref SCUART_PARITY_NONE + * - \ref SCUART_PARITY_ODD + * - \ref SCUART_PARITY_EVEN + * @param[in] u32StopBits The stop bit length, could be: + * - \ref SCUART_STOP_BIT_1 + * - \ref SCUART_STOP_BIT_2 + * @return Actual baudrate of smartcard. + * @details Smartcard UART mode is operated in LIN data frame. + */ +uint32_t SCUART_SetLineConfig(SC_T* sc, uint32_t u32Baudrate, uint32_t u32DataWidth, uint32_t u32Parity, uint32_t u32StopBits) +{ + + uint32_t u32Clk = SCUART_GetClock(sc), u32Div; + + if(u32Baudrate == 0) { // keep original baudrate setting + u32Div = sc->ETUCTL & SC_ETUCTL_ETURDIV_Msk; + } else { + // Calculate divider for target baudrate + u32Div = (u32Clk + (u32Baudrate >> 1) - 1) / u32Baudrate - 1; + sc->ETUCTL = u32Div; + } + + sc->CTL = u32StopBits | SC_CTL_SCEN_Msk; // Set stop bit + sc->UARTCTL = u32Parity | u32DataWidth | SC_UARTCTL_UARTEN_Msk; // Set character width and parity + + return(u32Clk / (u32Div+1)); +} + +/** + * @brief This function use to set receive timeout count. + * @param[in] sc The pointer of smartcard module. + * @param[in] u32TOC Rx timeout counter, using baudrate as counter unit. Valid range are 0~0x1FF, + * set this value to 0 will disable timeout counter. + * @return None + * @details The time-out counter resets and starts counting whenever the RX buffer received a + * new data word. Once the counter decrease to 1 and no new data is received or CPU + * does not read any data from FIFO, a receiver time-out interrupt will be generated. + */ +void SCUART_SetTimeoutCnt(SC_T* sc, uint32_t u32TOC) +{ + sc->RXTOUT = u32TOC; +} + + +/** + * @brief Write data to smartcard UART interface. + * @param[in] sc The pointer of smartcard module. + * @param[in] pu8TxBuf The buffer containing data to send to transmit FIFO. + * @param[in] u32WriteBytes Number of data to send. + * @return None + * @details This function is to write data into transmit FIFO to send data out. + * @note This function blocks until all data write into FIFO. + */ +void SCUART_Write(SC_T* sc, uint8_t *pu8TxBuf, uint32_t u32WriteBytes) +{ + uint32_t u32Count; + + for(u32Count = 0; u32Count != u32WriteBytes; u32Count++) { + while(SCUART_GET_TX_FULL(sc)); // Wait 'til FIFO not full + sc->DAT = pu8TxBuf[u32Count]; // Write 1 byte to FIFO + } +} + + +/*@}*/ /* end of group SCUART_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group SCUART_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +/*** (C) COPYRIGHT 2013~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_scuart.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_scuart.h new file mode 100644 index 00000000000..0ab13abe696 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_scuart.h @@ -0,0 +1,279 @@ +/**************************************************************************//** + * @file sc.h + * @version V3.00 + * $Revision: 7 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series Smartcard UART mode (SCUART) driver header file + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. + *****************************************************************************/ +#ifndef __SCUART_H__ +#define __SCUART_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup SCUART_Driver SCUART Driver + @{ +*/ + +/** @addtogroup SCUART_EXPORTED_CONSTANTS SCUART Exported Constants + @{ +*/ +#define SCUART_CHAR_LEN_5 (0x3ul << SC_UARTCTL_WLS_Pos) /*!< Set SCUART word length to 5 bits */ +#define SCUART_CHAR_LEN_6 (0x2ul << SC_UARTCTL_WLS_Pos) /*!< Set SCUART word length to 6 bits */ +#define SCUART_CHAR_LEN_7 (0x1ul << SC_UARTCTL_WLS_Pos) /*!< Set SCUART word length to 7 bits */ +#define SCUART_CHAR_LEN_8 (0) /*!< Set SCUART word length to 8 bits */ + +#define SCUART_PARITY_NONE (SC_UARTCTL_PBOFF_Msk) /*!< Set SCUART transfer with no parity */ +#define SCUART_PARITY_ODD (SC_UARTCTL_OPE_Msk) /*!< Set SCUART transfer with odd parity */ +#define SCUART_PARITY_EVEN (0) /*!< Set SCUART transfer with even parity */ + +#define SCUART_STOP_BIT_1 (SC_CTL_NSB_Msk) /*!< Set SCUART transfer with one stop bit */ +#define SCUART_STOP_BIT_2 (0) /*!< Set SCUART transfer with two stop bits */ + + +/*@}*/ /* end of group SCUART_EXPORTED_CONSTANTS */ + + +/** @addtogroup SCUART_EXPORTED_FUNCTIONS SCUART Exported Functions + @{ +*/ + +/* TX Macros */ +/** + * @brief Write Data to Tx data register. + * @param[in] sc The pointer of smartcard module. + * @param[in] u8Data Data byte to transmit. + * @return None + * @details By writing data to DAT register, the SC will send out an 8-bit data. + * \hideinitializer + */ +#define SCUART_WRITE(sc, u8Data) ((sc)-> DAT = (u8Data)) + +/** + * @brief Get TX FIFO empty flag status from register. + * @param[in] sc The pointer of smartcard module. + * @return Transmit FIFO empty status. + * @retval 0 Transmit FIFO is not empty. + * @retval SC_STATUS_TXEMPTY_Msk Transmit FIFO is empty. + * @details When the last byte of TX buffer has been transferred to Transmitter Shift Register, hardware sets TXEMPTY bit (SC_STATUS[9]) high. + * It will be cleared when writing data into DAT (SC_DAT[7:0]). + * \hideinitializer + */ +#define SCUART_GET_TX_EMPTY(sc) ((sc)->STATUS & SC_STATUS_TXEMPTY_Msk) + +/** + * @brief Get TX FIFO full flag status from register. + * @param[in] sc The pointer of smartcard module. + * @retval 0 Transmit FIFO is not full. + * @retval SC_STATUS_TXFULL_Msk Transmit FIFO is full. + * @details TXFULL(SC_STATUS[10]) is set when TX pointer is equal to 4, otherwise is cleared by hardware. + * \hideinitializer + */ +#define SCUART_GET_TX_FULL(sc) ((sc)->STATUS & SC_STATUS_TXFULL_Msk) + +/** + * @brief Wait specified smartcard port transmission complete. + * @param[in] sc The pointer of smartcard module. + * @return None + * @details TXACT (SC_STATUS[31]) is cleared automatically when TX transfer is finished or the last byte transmission has completed. + * @note This macro blocks until transmit complete. + * \hideinitializer + */ +#define SCUART_WAIT_TX_EMPTY(sc) while((sc)->STATUS & SC_STATUS_TXACT_Msk) + +/** + * @brief Check specified smartcard port transmit FIFO is full or not. + * @param[in] sc The pointer of smartcard module. + * @retval 0 Transmit FIFO is not full. + * @retval 1 Transmit FIFO is full. + * @details TXFULL(SC_STATUS[10]) indicates TX buffer full or not. + * This is set when TX pointer is equal to 4, otherwise is cleared by hardware. + * \hideinitializer + */ +#define SCUART_IS_TX_FULL(sc) ((sc)->STATUS & SC_STATUS_TXFULL_Msk ? 1 : 0) + +/** + * @brief Check specified smartcard port transmission is over. + * @param[in] sc The pointer of smartcard module. + * @retval 0 Transmit is not complete. + * @retval 1 Transmit complete. + * @details TXACT (SC_STATUS[31]) is set by hardware when TX transfer is in active and the STOP bit of the last byte has been transmitted. + * \hideinitializer + */ +#define SCUART_IS_TX_EMPTY(sc) ((sc)->STATUS & SC_STATUS_TXACT_Msk ? 0 : 1) + + +/* RX Macros */ + +/** + * @brief Read Rx data register. + * @param[in] sc The pointer of smartcard module. + * @return The oldest data byte in RX FIFO. + * @details By reading DAT register, the SC will return an 8-bit received data. + * \hideinitializer + */ +#define SCUART_READ(sc) ((sc)->DAT) + +/** + * @brief Get RX FIFO empty flag status from register. + * @param[in] sc The pointer of smartcard module. + * @retval 0 Receive FIFO is not empty. + * @retval SC_STATUS_RXEMPTY_Msk Receive FIFO is empty. + * @details When the last byte of Rx buffer has been read by CPU, hardware sets RXEMPTY(SC_STATUS[1]) high. + * It will be cleared when SC receives any new data. + * \hideinitializer + */ +#define SCUART_GET_RX_EMPTY(sc) ((sc)->STATUS & SC_STATUS_RXEMPTY_Msk) + + +/** + * @brief Get RX FIFO full flag status from register. + * @param[in] sc The pointer of smartcard module. + * @retval 0 Receive FIFO is not full. + * @retval SC_STATUS_TXFULL_Msk Receive FIFO is full. + * @details RXFULLF(SC_STATUS[2]) is set when RX pointer is equal to 4, otherwise it is cleared by hardware. + * \hideinitializer + */ +#define SCUART_GET_RX_FULL(sc) ((sc)->STATUS & SC_STATUS_RXFULL_Msk) + +/** + * @brief Check if receive data number in FIFO reach FIFO trigger level or not. + * @param[in] sc The pointer of smartcard module. + * @retval 0 The number of bytes in receive FIFO is less than trigger level. + * @retval 1 The number of bytes in receive FIFO equals or larger than trigger level. + * @details RDAIF(SC_INTSTS[0]) is used for received data reaching trigger level RXTRGLV (SC_CTL[7:6]) interrupt status flag. + * @note If receive trigger level is \b not 1 byte, this macro return 0 does not necessary indicates there is no data in FIFO. + * \hideinitializer + */ +#define SCUART_IS_RX_READY(sc) ((sc)->INTSTS & SC_INTSTS_RDAIF_Msk ? 1 : 0) + +/** + * @brief Check specified smartcard port receive FIFO is full or not. + * @param[in] sc The pointer of smartcard module. + * @retval 0 Receive FIFO is not full. + * @retval 1 Receive FIFO is full. + * @details RXFULLF(SC_STATUS[2]) is set when RX pointer is equal to 4, otherwise it is cleared by hardware. + * \hideinitializer + */ +#define SCUART_IS_RX_FULL(sc) ((sc)->STATUS & SC_STATUS_RXFULL_Msk ? 1 : 0) + +/* Interrupt Macros */ + +/** + * @brief Enable specified interrupts. + * @param[in] sc The pointer of smartcard module. + * @param[in] u32Mask Interrupt masks to enable, a combination of following bits. + * - \ref SC_INTEN_RXTOIF_Msk + * - \ref SC_INTEN_TERRIEN_Msk + * - \ref SC_INTEN_TBEIEN_Msk + * - \ref SC_INTEN_RDAIEN_Msk + * @return None + * @details The macro is used to enable receiver buffer time-out interrupt, transfer error interrupt, + * transmit buffer empty interrupt or receive data reach trigger level interrupt. + * \hideinitializer + */ +#define SCUART_ENABLE_INT(sc, u32Mask) ((sc)->INTEN |= (u32Mask)) + +/** + * @brief Disable specified interrupts. + * @param[in] sc The pointer of smartcard module. + * @param[in] u32Mask Interrupt masks to disable, a combination of following bits. + * - \ref SC_INTEN_RXTOIF_Msk + * - \ref SC_INTEN_TERRIEN_Msk + * - \ref SC_INTEN_TBEIEN_Msk + * - \ref SC_INTEN_RDAIEN_Msk + * @return None + * @details The macro is used to disable receiver buffer time-out interrupt, transfer error interrupt, + * transmit buffer empty interrupt or receive data reach trigger level interrupt. + * \hideinitializer + */ +#define SCUART_DISABLE_INT(sc, u32Mask) ((sc)->INTEN &= ~(u32Mask)) + +/** + * @brief Get specified interrupt flag/status. + * @param[in] sc The pointer of smartcard module. + * @param[in] u32Type Interrupt flag/status to check, could be one of following value: + * - \ref SC_INTSTS_RBTOIF_Msk + * - \ref SC_INTSTS_TERRIF_Msk + * - \ref SC_INTSTS_TBEIF_Msk + * - \ref SC_INTSTS_RDAIF_Msk + * @return The status of specified interrupt. + * @retval 0 Specified interrupt does not happened. + * @retval 1 Specified interrupt happened. + * @details The macro is used to get receiver buffer time-out interrupt status, transfer error interrupt status, + * transmit buffer empty interrupt status or receive data reach interrupt status. + * \hideinitializer + */ +#define SCUART_GET_INT_FLAG(sc, u32Type) ((sc)->INTSTS & (u32Type) ? 1 : 0) + +/** + * @brief Clear specified interrupt flag/status. + * @param[in] sc The pointer of smartcard module. + * @param[in] u32Type Interrupt flag/status to clear, could be the combination of following values: + * - \ref SC_INTSTS_RBTOIF_Msk + * - \ref SC_INTSTS_TERRIF_Msk + * - \ref SC_INTSTS_TBEIF_Msk + * @return None + * @details The macro is used to clear receiver buffer time-out interrupt flag, transfer error interrupt flag or + * transmit buffer empty interrupt flag. + * \hideinitializer + */ +#define SCUART_CLR_INT_FLAG(sc, u32Type) ((sc)->INTSTS = (u32Type)) + +/** + * @brief Get receive error flag/status. + * @param[in] sc The pointer of smartcard module. + * @return Current receive error status, could one of following errors: + * @retval SC_STATUS_PEF_Msk Parity error. + * @retval SC_STATUS_FEF_Msk Frame error. + * @retval SC_STATUS_BEF_Msk Break error. + * @details The macro is used to get receiver parity error status, receiver frame error status or + * receiver break error status. + * \hideinitializer + */ +#define SCUART_GET_ERR_FLAG(sc) ((sc)->STATUS & (SC_STATUS_PEF_Msk | SC_STATUS_FEF_Msk | SC_STATUS_BEF_Msk)) + +/** + * @brief Clear specified receive error flag/status. + * @param[in] sc The pointer of smartcard module. + * @param[in] u32Mask Receive error flag/status to clear, combination following values: + * - \ref SC_STATUS_PEF_Msk + * - \ref SC_STATUS_FEF_Msk + * - \ref SC_STATUS_BEF_Msk + * @return None + * @details The macro is used to clear receiver parity error flag, receiver frame error flag or + * receiver break error flag. + * \hideinitializer + */ +#define SCUART_CLR_ERR_FLAG(sc, u32Mask) ((sc)->STATUS = (u32Mask)) + +void SCUART_Close(SC_T* sc); +uint32_t SCUART_Open(SC_T* sc, uint32_t u32baudrate); +uint32_t SCUART_Read(SC_T* sc, uint8_t *pu8RxBuf, uint32_t u32ReadBytes); +uint32_t SCUART_SetLineConfig(SC_T* sc, uint32_t u32Baudrate, uint32_t u32DataWidth, uint32_t u32Parity, uint32_t u32StopBits); +void SCUART_SetTimeoutCnt(SC_T* sc, uint32_t u32TOC); +void SCUART_Write(SC_T* sc, uint8_t *pu8TxBuf, uint32_t u32WriteBytes); + +/*@}*/ /* end of group SCUART_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group SCUART_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +#ifdef __cplusplus +} +#endif + +#endif //__SCUART_H__ + +/*** (C) COPYRIGHT 2013~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_spi.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_spi.c new file mode 100644 index 00000000000..ad30b8e39a9 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_spi.c @@ -0,0 +1,1154 @@ +/**************************************************************************//** + * @file spi.c + * @version V3.00 + * $Revision: 11 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series SPI driver source file + * + * @note + * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ +#include "M451Series.h" +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup SPI_Driver SPI Driver + @{ +*/ + + +/** @addtogroup SPI_EXPORTED_FUNCTIONS SPI Exported Functions + @{ +*/ + +/** + * @brief This function make SPI module be ready to transfer. + * @param[in] spi The pointer of the specified SPI module. + * @param[in] u32MasterSlave Decides the SPI module is operating in master mode or in slave mode. (SPI_SLAVE, SPI_MASTER) + * @param[in] u32SPIMode Decides the transfer timing. (SPI_MODE_0, SPI_MODE_1, SPI_MODE_2, SPI_MODE_3) + * @param[in] u32DataWidth Decides the data width of a SPI transaction. + * @param[in] u32BusClock The expected frequency of SPI bus clock in Hz. + * @return Actual frequency of SPI peripheral clock. + * @details By default, the SPI transfer sequence is MSB first, the slave selection signal is active low and the automatic + * slave selection function is disabled. + * In Slave mode, the u32BusClock shall be NULL and the SPI clock divider setting will be 0. + * The actual clock rate may be different from the target SPI clock rate. + * For example, if the SPI source clock rate is 12MHz and the target SPI bus clock rate is 7MHz, the + * actual SPI clock rate will be 6MHz. + * @note If u32BusClock = 0, DIVIDER setting will be set to the maximum value. + * @note If u32BusClock >= system clock frequency, SPI peripheral clock source will be set to APB clock and DIVIDER will be set to 0. + * @note If u32BusClock >= SPI peripheral clock source, DIVIDER will be set to 0. + * @note In slave mode, the SPI peripheral clock rate will be equal to APB clock rate. + */ +uint32_t SPI_Open(SPI_T *spi, + uint32_t u32MasterSlave, + uint32_t u32SPIMode, + uint32_t u32DataWidth, + uint32_t u32BusClock) +{ + uint32_t u32ClkSrc = 0, u32Div, u32HCLKFreq; + + if((spi == SPI1) || (spi == SPI2)) + /* Disable I2S mode */ + spi->I2SCTL &= ~SPI_I2SCTL_I2SEN_Msk; + + if(u32DataWidth == 32) + u32DataWidth = 0; + + /* Get system clock frequency */ + u32HCLKFreq = CLK_GetHCLKFreq(); + + if(u32MasterSlave == SPI_MASTER) + { + /* Default setting: slave selection signal is active low; disable automatic slave selection function. */ + spi->SSCTL = SPI_SS_ACTIVE_LOW; + + /* Default setting: MSB first, disable unit transfer interrupt, SP_CYCLE = 0. */ + spi->CTL = u32MasterSlave | (u32DataWidth << SPI_CTL_DWIDTH_Pos) | (u32SPIMode) | SPI_CTL_SPIEN_Msk; + + if(u32BusClock >= u32HCLKFreq) + { + /* Select PCLK as the clock source of SPI */ + if(spi == SPI0) + CLK->CLKSEL2 = (CLK->CLKSEL2 & (~CLK_CLKSEL2_SPI0SEL_Msk)) | CLK_CLKSEL2_SPI0SEL_PCLK0; + else if(spi == SPI1) + CLK->CLKSEL2 = (CLK->CLKSEL2 & (~CLK_CLKSEL2_SPI1SEL_Msk)) | CLK_CLKSEL2_SPI1SEL_PCLK1; + else + CLK->CLKSEL2 = (CLK->CLKSEL2 & (~CLK_CLKSEL2_SPI2SEL_Msk)) | CLK_CLKSEL2_SPI2SEL_PCLK0; + } + + /* Check clock source of SPI */ + if(spi == SPI0) + { + if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI0SEL_Msk) == CLK_CLKSEL2_SPI0SEL_HXT) + u32ClkSrc = __HXT; /* Clock source is HXT */ + else if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI0SEL_Msk) == CLK_CLKSEL2_SPI0SEL_PLL) + u32ClkSrc = CLK_GetPLLClockFreq(); /* Clock source is PLL */ + else if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI0SEL_Msk) == CLK_CLKSEL2_SPI0SEL_PCLK0) + { + /* Clock source is PCLK0 */ + if((CLK->CLKSEL0 & CLK_CLKSEL0_PCLK0SEL_Msk) == CLK_CLKSEL0_PCLK0SEL_HCLK_DIV2) + u32ClkSrc = (u32HCLKFreq / 2); + else + u32ClkSrc = u32HCLKFreq; + } + else + u32ClkSrc = __HIRC; /* Clock source is HIRC */ + } + else if(spi == SPI1) + { + if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI1SEL_Msk) == CLK_CLKSEL2_SPI1SEL_HXT) + u32ClkSrc = __HXT; /* Clock source is HXT */ + else if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI1SEL_Msk) == CLK_CLKSEL2_SPI1SEL_PLL) + u32ClkSrc = CLK_GetPLLClockFreq(); /* Clock source is PLL */ + else if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI1SEL_Msk) == CLK_CLKSEL2_SPI1SEL_PCLK1) + { + /* Clock source is PCLK1 */ + if((CLK->CLKSEL0 & CLK_CLKSEL0_PCLK1SEL_Msk) == CLK_CLKSEL0_PCLK1SEL_HCLK_DIV2) + u32ClkSrc = (u32HCLKFreq / 2); + else + u32ClkSrc = u32HCLKFreq; + } + else + u32ClkSrc = __HIRC; /* Clock source is HIRC */ + } + else + { + if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI2SEL_Msk) == CLK_CLKSEL2_SPI2SEL_HXT) + u32ClkSrc = __HXT; /* Clock source is HXT */ + else if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI2SEL_Msk) == CLK_CLKSEL2_SPI2SEL_PLL) + u32ClkSrc = CLK_GetPLLClockFreq(); /* Clock source is PLL */ + else if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI2SEL_Msk) == CLK_CLKSEL2_SPI2SEL_PCLK0) + { + /* Clock source is PCLK0 */ + if((CLK->CLKSEL0 & CLK_CLKSEL0_PCLK0SEL_Msk) == CLK_CLKSEL0_PCLK0SEL_HCLK_DIV2) + u32ClkSrc = (u32HCLKFreq / 2); + else + u32ClkSrc = u32HCLKFreq; + } + else + u32ClkSrc = __HIRC; /* Clock source is HIRC */ + } + + if(u32BusClock >= u32HCLKFreq) + { + /* Set DIVIDER = 0 */ + spi->CLKDIV = 0; + /* Return master peripheral clock rate */ + return u32ClkSrc; + } + else if(u32BusClock >= u32ClkSrc) + { + /* Set DIVIDER = 0 */ + spi->CLKDIV = 0; + /* Return master peripheral clock rate */ + return u32ClkSrc; + } + else if(u32BusClock == 0) + { + /* Set DIVIDER to the maximum value 0xFF. f_spi = f_spi_clk_src / (DIVIDER + 1) */ + spi->CLKDIV |= SPI_CLKDIV_DIVIDER_Msk; + /* Return master peripheral clock rate */ + return (u32ClkSrc / (0xFF + 1)); + } + else + { + u32Div = (((u32ClkSrc * 10) / u32BusClock + 5) / 10) - 1; /* Round to the nearest integer */ + if(u32Div > 0xFF) + { + u32Div = 0xFF; + spi->CLKDIV |= SPI_CLKDIV_DIVIDER_Msk; + /* Return master peripheral clock rate */ + return (u32ClkSrc / (0xFF + 1)); + } + else + { + spi->CLKDIV = (spi->CLKDIV & (~SPI_CLKDIV_DIVIDER_Msk)) | (u32Div << SPI_CLKDIV_DIVIDER_Pos); + /* Return master peripheral clock rate */ + return (u32ClkSrc / (u32Div + 1)); + } + } + } + else /* For slave mode, force the SPI peripheral clock rate to equal APB clock rate. */ + { + /* Default setting: slave selection signal is low level active. */ + spi->SSCTL = SPI_SS_ACTIVE_LOW; + + /* Default setting: MSB first, disable unit transfer interrupt, SP_CYCLE = 0. */ + spi->CTL = u32MasterSlave | (u32DataWidth << SPI_CTL_DWIDTH_Pos) | (u32SPIMode) | SPI_CTL_SPIEN_Msk; + + /* Set DIVIDER = 0 */ + spi->CLKDIV = 0; + + /* Select PCLK as the clock source of SPI */ + if(spi == SPI0) + { + CLK->CLKSEL2 = (CLK->CLKSEL2 & (~CLK_CLKSEL2_SPI0SEL_Msk)) | CLK_CLKSEL2_SPI0SEL_PCLK0; + /* Return slave peripheral clock rate */ + if((CLK->CLKSEL0 & CLK_CLKSEL0_PCLK0SEL_Msk) == CLK_CLKSEL0_PCLK0SEL_HCLK_DIV2) + return (u32HCLKFreq / 2); + else + return u32HCLKFreq; + } + else if(spi == SPI1) + { + CLK->CLKSEL2 = (CLK->CLKSEL2 & (~CLK_CLKSEL2_SPI1SEL_Msk)) | CLK_CLKSEL2_SPI1SEL_PCLK1; + /* Return slave peripheral clock rate */ + if((CLK->CLKSEL0 & CLK_CLKSEL0_PCLK1SEL_Msk) == CLK_CLKSEL0_PCLK1SEL_HCLK_DIV2) + return (u32HCLKFreq / 2); + else + return u32HCLKFreq; + } + else + { + CLK->CLKSEL2 = (CLK->CLKSEL2 & (~CLK_CLKSEL2_SPI2SEL_Msk)) | CLK_CLKSEL2_SPI2SEL_PCLK0; + /* Return slave peripheral clock rate */ + if((CLK->CLKSEL0 & CLK_CLKSEL0_PCLK0SEL_Msk) == CLK_CLKSEL0_PCLK0SEL_HCLK_DIV2) + return (u32HCLKFreq / 2); + else + return u32HCLKFreq; + } + } +} + +/** + * @brief Disable SPI controller. + * @param[in] spi The pointer of the specified SPI module. + * @return None + * @details This function will reset SPI controller. + */ +void SPI_Close(SPI_T *spi) +{ + if(spi == SPI0) + { + /* Reset SPI */ + SYS->IPRST1 |= SYS_IPRST1_SPI0RST_Msk; + SYS->IPRST1 &= ~SYS_IPRST1_SPI0RST_Msk; + } + else if(spi == SPI1) + { + /* Reset SPI */ + SYS->IPRST1 |= SYS_IPRST1_SPI1RST_Msk; + SYS->IPRST1 &= ~SYS_IPRST1_SPI1RST_Msk; + } + else + { + /* Reset SPI */ + SYS->IPRST1 |= SYS_IPRST1_SPI2RST_Msk; + SYS->IPRST1 &= ~SYS_IPRST1_SPI2RST_Msk; + } +} + +/** + * @brief Clear RX FIFO buffer. + * @param[in] spi The pointer of the specified SPI module. + * @return None + * @details This function will clear SPI RX FIFO buffer. The RXEMPTY (SPI_STATUS[8]) will be set to 1. + */ +void SPI_ClearRxFIFO(SPI_T *spi) +{ + spi->FIFOCTL |= SPI_FIFOCTL_RXFBCLR_Msk; +} + +/** + * @brief Clear TX FIFO buffer. + * @param[in] spi The pointer of the specified SPI module. + * @return None + * @details This function will clear SPI TX FIFO buffer. The TXEMPTY (SPI_STATUS[16]) will be set to 1. + * @note The TX shift register will not be cleared. + */ +void SPI_ClearTxFIFO(SPI_T *spi) +{ + spi->FIFOCTL |= SPI_FIFOCTL_TXFBCLR_Msk; +} + +/** + * @brief Disable the automatic slave selection function. + * @param[in] spi The pointer of the specified SPI module. + * @return None + * @details This function will disable the automatic slave selection function and set slave selection signal to inactive state. + */ +void SPI_DisableAutoSS(SPI_T *spi) +{ + spi->SSCTL &= ~(SPI_SSCTL_AUTOSS_Msk | SPI_SSCTL_SS_Msk); +} + +/** + * @brief Enable the automatic slave selection function. + * @param[in] spi The pointer of the specified SPI module. + * @param[in] u32SSPinMask Specifies slave selection pins. (SPI_SS) + * @param[in] u32ActiveLevel Specifies the active level of slave selection signal. (SPI_SS_ACTIVE_HIGH, SPI_SS_ACTIVE_LOW) + * @return None + * @details This function will enable the automatic slave selection function. Only available in Master mode. + * The slave selection pin and the active level will be set in this function. + */ +void SPI_EnableAutoSS(SPI_T *spi, uint32_t u32SSPinMask, uint32_t u32ActiveLevel) +{ + spi->SSCTL = (spi->SSCTL & (~(SPI_SSCTL_AUTOSS_Msk | SPI_SSCTL_SSACTPOL_Msk | SPI_SSCTL_SS_Msk))) | (u32SSPinMask | u32ActiveLevel | SPI_SSCTL_AUTOSS_Msk); +} + +/** + * @brief Set the SPI bus clock. + * @param[in] spi The pointer of the specified SPI module. + * @param[in] u32BusClock The expected frequency of SPI bus clock in Hz. + * @return Actual frequency of SPI bus clock. + * @details This function is only available in Master mode. The actual clock rate may be different from the target SPI bus clock rate. + * For example, if the SPI source clock rate is 12MHz and the target SPI bus clock rate is 7MHz, the actual SPI bus clock + * rate will be 6MHz. + * @note If u32BusClock = 0, DIVIDER setting will be set to the maximum value. + * @note If u32BusClock >= system clock frequency, SPI peripheral clock source will be set to APB clock and DIVIDER will be set to 0. + * @note If u32BusClock >= SPI peripheral clock source, DIVIDER will be set to 0. + */ +uint32_t SPI_SetBusClock(SPI_T *spi, uint32_t u32BusClock) +{ + uint32_t u32ClkSrc, u32HCLKFreq; + uint32_t u32Div; + + /* Get system clock frequency */ + u32HCLKFreq = CLK_GetHCLKFreq(); + + if(u32BusClock >= u32HCLKFreq) + { + /* Select PCLK as the clock source of SPI */ + if(spi == SPI0) + CLK->CLKSEL2 = (CLK->CLKSEL2 & (~CLK_CLKSEL2_SPI0SEL_Msk)) | CLK_CLKSEL2_SPI0SEL_PCLK0; + else if(spi == SPI1) + CLK->CLKSEL2 = (CLK->CLKSEL2 & (~CLK_CLKSEL2_SPI1SEL_Msk)) | CLK_CLKSEL2_SPI1SEL_PCLK1; + else + CLK->CLKSEL2 = (CLK->CLKSEL2 & (~CLK_CLKSEL2_SPI2SEL_Msk)) | CLK_CLKSEL2_SPI2SEL_PCLK0; + } + + /* Check clock source of SPI */ + if(spi == SPI0) + { + if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI0SEL_Msk) == CLK_CLKSEL2_SPI0SEL_HXT) + u32ClkSrc = __HXT; /* Clock source is HXT */ + else if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI0SEL_Msk) == CLK_CLKSEL2_SPI0SEL_PLL) + u32ClkSrc = CLK_GetPLLClockFreq(); /* Clock source is PLL */ + else if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI0SEL_Msk) == CLK_CLKSEL2_SPI0SEL_PCLK0) + { + /* Clock source is PCLK0 */ + if((CLK->CLKSEL0 & CLK_CLKSEL0_PCLK0SEL_Msk) == CLK_CLKSEL0_PCLK0SEL_HCLK_DIV2) + u32ClkSrc = (u32HCLKFreq / 2); + else + u32ClkSrc = u32HCLKFreq; + } + else + u32ClkSrc = __HIRC; /* Clock source is HIRC */ + } + else if(spi == SPI1) + { + if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI1SEL_Msk) == CLK_CLKSEL2_SPI1SEL_HXT) + u32ClkSrc = __HXT; /* Clock source is HXT */ + else if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI1SEL_Msk) == CLK_CLKSEL2_SPI1SEL_PLL) + u32ClkSrc = CLK_GetPLLClockFreq(); /* Clock source is PLL */ + else if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI1SEL_Msk) == CLK_CLKSEL2_SPI1SEL_PCLK1) + { + /* Clock source is PCLK1 */ + if((CLK->CLKSEL0 & CLK_CLKSEL0_PCLK1SEL_Msk) == CLK_CLKSEL0_PCLK1SEL_HCLK_DIV2) + u32ClkSrc = (u32HCLKFreq / 2); + else + u32ClkSrc = u32HCLKFreq; + } + else + u32ClkSrc = __HIRC; /* Clock source is HIRC */ + } + else + { + if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI2SEL_Msk) == CLK_CLKSEL2_SPI2SEL_HXT) + u32ClkSrc = __HXT; /* Clock source is HXT */ + else if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI2SEL_Msk) == CLK_CLKSEL2_SPI2SEL_PLL) + u32ClkSrc = CLK_GetPLLClockFreq(); /* Clock source is PLL */ + else if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI2SEL_Msk) == CLK_CLKSEL2_SPI2SEL_PCLK0) + { + /* Clock source is PCLK0 */ + if((CLK->CLKSEL0 & CLK_CLKSEL0_PCLK0SEL_Msk) == CLK_CLKSEL0_PCLK0SEL_HCLK_DIV2) + u32ClkSrc = (u32HCLKFreq / 2); + else + u32ClkSrc = u32HCLKFreq; + } + else + u32ClkSrc = __HIRC; /* Clock source is HIRC */ + } + + if(u32BusClock >= u32HCLKFreq) + { + /* Set DIVIDER = 0 */ + spi->CLKDIV = 0; + /* Return master peripheral clock rate */ + return u32ClkSrc; + } + else if(u32BusClock >= u32ClkSrc) + { + /* Set DIVIDER = 0 */ + spi->CLKDIV = 0; + /* Return master peripheral clock rate */ + return u32ClkSrc; + } + else if(u32BusClock == 0) + { + /* Set DIVIDER to the maximum value 0xFF. f_spi = f_spi_clk_src / (DIVIDER + 1) */ + spi->CLKDIV |= SPI_CLKDIV_DIVIDER_Msk; + /* Return master peripheral clock rate */ + return (u32ClkSrc / (0xFF + 1)); + } + else + { + u32Div = (((u32ClkSrc * 10) / u32BusClock + 5) / 10) - 1; /* Round to the nearest integer */ + if(u32Div > 0xFF) + { + u32Div = 0xFF; + spi->CLKDIV |= SPI_CLKDIV_DIVIDER_Msk; + /* Return master peripheral clock rate */ + return (u32ClkSrc / (0xFF + 1)); + } + else + { + spi->CLKDIV = (spi->CLKDIV & (~SPI_CLKDIV_DIVIDER_Msk)) | (u32Div << SPI_CLKDIV_DIVIDER_Pos); + /* Return master peripheral clock rate */ + return (u32ClkSrc / (u32Div + 1)); + } + } +} + +/** + * @brief Configure FIFO threshold setting. + * @param[in] spi The pointer of the specified SPI module. + * @param[in] u32TxThreshold Decides the TX FIFO threshold. For SPI0, it could be 0 ~ 7. For SPI1 and SPI2, it could be 0 ~ 3. + * @param[in] u32RxThreshold Decides the RX FIFO threshold. For SPI0, it could be 0 ~ 7. For SPI1 and SPI2, it could be 0 ~ 3. + * @return None + * @details Set TX FIFO threshold and RX FIFO threshold configurations. + */ +void SPI_SetFIFO(SPI_T *spi, uint32_t u32TxThreshold, uint32_t u32RxThreshold) +{ + spi->FIFOCTL = (spi->FIFOCTL & ~(SPI_FIFOCTL_TXTH_Msk | SPI_FIFOCTL_RXTH_Msk) | + (u32TxThreshold << SPI_FIFOCTL_TXTH_Pos) | + (u32RxThreshold << SPI_FIFOCTL_RXTH_Pos)); +} + +/** + * @brief Get the actual frequency of SPI bus clock. Only available in Master mode. + * @param[in] spi The pointer of the specified SPI module. + * @return Actual SPI bus clock frequency in Hz. + * @details This function will calculate the actual SPI bus clock rate according to the SPInSEL and DIVIDER settings. Only available in Master mode. + */ +uint32_t SPI_GetBusClock(SPI_T *spi) +{ + uint32_t u32Div; + uint32_t u32ClkSrc, u32HCLKFreq; + + /* Get DIVIDER setting */ + u32Div = (spi->CLKDIV & SPI_CLKDIV_DIVIDER_Msk) >> SPI_CLKDIV_DIVIDER_Pos; + + /* Get system clock frequency */ + u32HCLKFreq = CLK_GetHCLKFreq(); + + /* Check clock source of SPI */ + if(spi == SPI0) + { + if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI0SEL_Msk) == CLK_CLKSEL2_SPI0SEL_HXT) + u32ClkSrc = __HXT; /* Clock source is HXT */ + else if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI0SEL_Msk) == CLK_CLKSEL2_SPI0SEL_PLL) + u32ClkSrc = CLK_GetPLLClockFreq(); /* Clock source is PLL */ + else if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI0SEL_Msk) == CLK_CLKSEL2_SPI0SEL_PCLK0) + { + /* Clock source is PCLK0 */ + if((CLK->CLKSEL0 & CLK_CLKSEL0_PCLK0SEL_Msk) == CLK_CLKSEL0_PCLK0SEL_HCLK_DIV2) + u32ClkSrc = (u32HCLKFreq / 2); + else + u32ClkSrc = u32HCLKFreq; + } + else + u32ClkSrc = __HIRC; /* Clock source is HIRC */ + } + else if(spi == SPI1) + { + if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI1SEL_Msk) == CLK_CLKSEL2_SPI1SEL_HXT) + u32ClkSrc = __HXT; /* Clock source is HXT */ + else if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI1SEL_Msk) == CLK_CLKSEL2_SPI1SEL_PLL) + u32ClkSrc = CLK_GetPLLClockFreq(); /* Clock source is PLL */ + else if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI1SEL_Msk) == CLK_CLKSEL2_SPI1SEL_PCLK1) + { + /* Clock source is PCLK1 */ + if((CLK->CLKSEL0 & CLK_CLKSEL0_PCLK1SEL_Msk) == CLK_CLKSEL0_PCLK1SEL_HCLK_DIV2) + u32ClkSrc = (u32HCLKFreq / 2); + else + u32ClkSrc = u32HCLKFreq; + } + else + u32ClkSrc = __HIRC; /* Clock source is HIRC */ + } + else + { + if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI2SEL_Msk) == CLK_CLKSEL2_SPI2SEL_HXT) + u32ClkSrc = __HXT; /* Clock source is HXT */ + else if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI2SEL_Msk) == CLK_CLKSEL2_SPI2SEL_PLL) + u32ClkSrc = CLK_GetPLLClockFreq(); /* Clock source is PLL */ + else if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI2SEL_Msk) == CLK_CLKSEL2_SPI2SEL_PCLK0) + { + /* Clock source is PCLK0 */ + if((CLK->CLKSEL0 & CLK_CLKSEL0_PCLK0SEL_Msk) == CLK_CLKSEL0_PCLK0SEL_HCLK_DIV2) + u32ClkSrc = (u32HCLKFreq / 2); + else + u32ClkSrc = u32HCLKFreq; + } + else + u32ClkSrc = __HIRC; /* Clock source is HIRC */ + } + + /* Return SPI bus clock rate */ + return (u32ClkSrc / (u32Div + 1)); +} + +/** + * @brief Enable interrupt function. + * @param[in] spi The pointer of the specified SPI module. + * @param[in] u32Mask The combination of all related interrupt enable bits. + * Each bit corresponds to a interrupt enable bit. + * This parameter decides which interrupts will be enabled. It is combination of: + * - \ref SPI_UNIT_INT_MASK + * - \ref SPI_SSACT_INT_MASK + * - \ref SPI_SSINACT_INT_MASK + * - \ref SPI_SLVUR_INT_MASK + * - \ref SPI_SLVBE_INT_MASK + * - \ref SPI_SLVTO_INT_MASK + * - \ref SPI_TXUF_INT_MASK + * - \ref SPI_FIFO_TXTH_INT_MASK + * - \ref SPI_FIFO_RXTH_INT_MASK + * - \ref SPI_FIFO_RXOV_INT_MASK + * - \ref SPI_FIFO_RXTO_INT_MASK + * + * @return None + * @details Enable SPI related interrupts specified by u32Mask parameter. + */ +void SPI_EnableInt(SPI_T *spi, uint32_t u32Mask) +{ + /* Enable unit transfer interrupt flag */ + if((u32Mask & SPI_UNIT_INT_MASK) == SPI_UNIT_INT_MASK) + spi->CTL |= SPI_CTL_UNITIEN_Msk; + + /* Enable slave selection signal active interrupt flag */ + if((u32Mask & SPI_SSACT_INT_MASK) == SPI_SSACT_INT_MASK) + spi->SSCTL |= SPI_SSCTL_SSACTIEN_Msk; + + /* Enable slave selection signal inactive interrupt flag */ + if((u32Mask & SPI_SSINACT_INT_MASK) == SPI_SSINACT_INT_MASK) + spi->SSCTL |= SPI_SSCTL_SSINAIEN_Msk; + + /* Enable slave TX under run interrupt flag */ + if((u32Mask & SPI_SLVUR_INT_MASK) == SPI_SLVUR_INT_MASK) + spi->SSCTL |= SPI_SSCTL_SLVURIEN_Msk; + + /* Enable slave bit count error interrupt flag */ + if((u32Mask & SPI_SLVBE_INT_MASK) == SPI_SLVBE_INT_MASK) + spi->SSCTL |= SPI_SSCTL_SLVBEIEN_Msk; + + /* Enable slave time-out interrupt flag */ + if((u32Mask & SPI_SLVTO_INT_MASK) == SPI_SLVTO_INT_MASK) + spi->SSCTL |= SPI_SSCTL_SLVTOIEN_Msk; + + /* Enable slave TX underflow interrupt flag */ + if((u32Mask & SPI_TXUF_INT_MASK) == SPI_TXUF_INT_MASK) + spi->FIFOCTL |= SPI_FIFOCTL_TXUFIEN_Msk; + + /* Enable TX threshold interrupt flag */ + if((u32Mask & SPI_FIFO_TXTH_INT_MASK) == SPI_FIFO_TXTH_INT_MASK) + spi->FIFOCTL |= SPI_FIFOCTL_TXTHIEN_Msk; + + /* Enable RX threshold interrupt flag */ + if((u32Mask & SPI_FIFO_RXTH_INT_MASK) == SPI_FIFO_RXTH_INT_MASK) + spi->FIFOCTL |= SPI_FIFOCTL_RXTHIEN_Msk; + + /* Enable RX overrun interrupt flag */ + if((u32Mask & SPI_FIFO_RXOV_INT_MASK) == SPI_FIFO_RXOV_INT_MASK) + spi->FIFOCTL |= SPI_FIFOCTL_RXOVIEN_Msk; + + /* Enable RX time-out interrupt flag */ + if((u32Mask & SPI_FIFO_RXTO_INT_MASK) == SPI_FIFO_RXTO_INT_MASK) + spi->FIFOCTL |= SPI_FIFOCTL_RXTOIEN_Msk; +} + +/** + * @brief Disable interrupt function. + * @param[in] spi The pointer of the specified SPI module. + * @param[in] u32Mask The combination of all related interrupt enable bits. + * Each bit corresponds to a interrupt bit. + * This parameter decides which interrupts will be disabled. It is combination of: + * - \ref SPI_UNIT_INT_MASK + * - \ref SPI_SSACT_INT_MASK + * - \ref SPI_SSINACT_INT_MASK + * - \ref SPI_SLVUR_INT_MASK + * - \ref SPI_SLVBE_INT_MASK + * - \ref SPI_SLVTO_INT_MASK + * - \ref SPI_TXUF_INT_MASK + * - \ref SPI_FIFO_TXTH_INT_MASK + * - \ref SPI_FIFO_RXTH_INT_MASK + * - \ref SPI_FIFO_RXOV_INT_MASK + * - \ref SPI_FIFO_RXTO_INT_MASK + * + * @return None + * @details Disable SPI related interrupts specified by u32Mask parameter. + */ +void SPI_DisableInt(SPI_T *spi, uint32_t u32Mask) +{ + /* Disable unit transfer interrupt flag */ + if((u32Mask & SPI_UNIT_INT_MASK) == SPI_UNIT_INT_MASK) + spi->CTL &= ~SPI_CTL_UNITIEN_Msk; + + /* Disable slave selection signal active interrupt flag */ + if((u32Mask & SPI_SSACT_INT_MASK) == SPI_SSACT_INT_MASK) + spi->SSCTL &= ~SPI_SSCTL_SSACTIEN_Msk; + + /* Disable slave selection signal inactive interrupt flag */ + if((u32Mask & SPI_SSINACT_INT_MASK) == SPI_SSINACT_INT_MASK) + spi->SSCTL &= ~SPI_SSCTL_SSINAIEN_Msk; + + /* Disable slave TX under run interrupt flag */ + if((u32Mask & SPI_SLVUR_INT_MASK) == SPI_SLVUR_INT_MASK) + spi->SSCTL &= ~SPI_SSCTL_SLVURIEN_Msk; + + /* Disable slave bit count error interrupt flag */ + if((u32Mask & SPI_SLVBE_INT_MASK) == SPI_SLVBE_INT_MASK) + spi->SSCTL &= ~SPI_SSCTL_SLVBEIEN_Msk; + + /* Disable slave time-out interrupt flag */ + if((u32Mask & SPI_SLVTO_INT_MASK) == SPI_SLVTO_INT_MASK) + spi->SSCTL &= ~SPI_SSCTL_SLVTOIEN_Msk; + + /* Disable slave TX underflow interrupt flag */ + if((u32Mask & SPI_TXUF_INT_MASK) == SPI_TXUF_INT_MASK) + spi->FIFOCTL &= ~SPI_FIFOCTL_TXUFIEN_Msk; + + /* Disable TX threshold interrupt flag */ + if((u32Mask & SPI_FIFO_TXTH_INT_MASK) == SPI_FIFO_TXTH_INT_MASK) + spi->FIFOCTL &= ~SPI_FIFOCTL_TXTHIEN_Msk; + + /* Disable RX threshold interrupt flag */ + if((u32Mask & SPI_FIFO_RXTH_INT_MASK) == SPI_FIFO_RXTH_INT_MASK) + spi->FIFOCTL &= ~SPI_FIFOCTL_RXTHIEN_Msk; + + /* Disable RX overrun interrupt flag */ + if((u32Mask & SPI_FIFO_RXOV_INT_MASK) == SPI_FIFO_RXOV_INT_MASK) + spi->FIFOCTL &= ~SPI_FIFOCTL_RXOVIEN_Msk; + + /* Disable RX time-out interrupt flag */ + if((u32Mask & SPI_FIFO_RXTO_INT_MASK) == SPI_FIFO_RXTO_INT_MASK) + spi->FIFOCTL &= ~SPI_FIFOCTL_RXTOIEN_Msk; +} + +/** + * @brief Get interrupt flag. + * @param[in] spi The pointer of the specified SPI module. + * @param[in] u32Mask The combination of all related interrupt sources. + * Each bit corresponds to a interrupt source. + * This parameter decides which interrupt flags will be read. It is combination of: + * - \ref SPI_UNIT_INT_MASK + * - \ref SPI_SSACT_INT_MASK + * - \ref SPI_SSINACT_INT_MASK + * - \ref SPI_SLVUR_INT_MASK + * - \ref SPI_SLVBE_INT_MASK + * - \ref SPI_SLVTO_INT_MASK + * - \ref SPI_TXUF_INT_MASK + * - \ref SPI_FIFO_TXTH_INT_MASK + * - \ref SPI_FIFO_RXTH_INT_MASK + * - \ref SPI_FIFO_RXOV_INT_MASK + * - \ref SPI_FIFO_RXTO_INT_MASK + * + * @return Interrupt flags of selected sources. + * @details Get SPI related interrupt flags specified by u32Mask parameter. + */ +uint32_t SPI_GetIntFlag(SPI_T *spi, uint32_t u32Mask) +{ + uint32_t u32IntFlag = 0; + + /* Check unit transfer interrupt flag */ + if((u32Mask & SPI_UNIT_INT_MASK) && (spi->STATUS & SPI_STATUS_UNITIF_Msk)) + u32IntFlag |= SPI_UNIT_INT_MASK; + + /* Check slave selection signal active interrupt flag */ + if((u32Mask & SPI_SSACT_INT_MASK) && (spi->STATUS & SPI_STATUS_SSACTIF_Msk)) + u32IntFlag |= SPI_SSACT_INT_MASK; + + /* Check slave selection signal inactive interrupt flag */ + if((u32Mask & SPI_SSINACT_INT_MASK) && (spi->STATUS & SPI_STATUS_SSINAIF_Msk)) + u32IntFlag |= SPI_SSINACT_INT_MASK; + + /* Check slave TX under run interrupt flag */ + if((u32Mask & SPI_SLVUR_INT_MASK) && (spi->STATUS & SPI_STATUS_SLVURIF_Msk)) + u32IntFlag |= SPI_SLVUR_INT_MASK; + + /* Check slave bit count error interrupt flag */ + if((u32Mask & SPI_SLVBE_INT_MASK) && (spi->STATUS & SPI_STATUS_SLVBEIF_Msk)) + u32IntFlag |= SPI_SLVBE_INT_MASK; + + /* Check slave time-out interrupt flag */ + if((u32Mask & SPI_SLVTO_INT_MASK) && (spi->STATUS & SPI_STATUS_SLVTOIF_Msk)) + u32IntFlag |= SPI_SLVTO_INT_MASK; + + /* Check slave TX underflow interrupt flag */ + if((u32Mask & SPI_TXUF_INT_MASK) && (spi->STATUS & SPI_STATUS_TXUFIF_Msk)) + u32IntFlag |= SPI_TXUF_INT_MASK; + + /* Check TX threshold interrupt flag */ + if((u32Mask & SPI_FIFO_TXTH_INT_MASK) && (spi->STATUS & SPI_STATUS_TXTHIF_Msk)) + u32IntFlag |= SPI_FIFO_TXTH_INT_MASK; + + /* Check RX threshold interrupt flag */ + if((u32Mask & SPI_FIFO_RXTH_INT_MASK) && (spi->STATUS & SPI_STATUS_RXTHIF_Msk)) + u32IntFlag |= SPI_FIFO_RXTH_INT_MASK; + + /* Check RX overrun interrupt flag */ + if((u32Mask & SPI_FIFO_RXOV_INT_MASK) && (spi->STATUS & SPI_STATUS_RXOVIF_Msk)) + u32IntFlag |= SPI_FIFO_RXOV_INT_MASK; + + /* Check RX time-out interrupt flag */ + if((u32Mask & SPI_FIFO_RXTO_INT_MASK) && (spi->STATUS & SPI_STATUS_RXTOIF_Msk)) + u32IntFlag |= SPI_FIFO_RXTO_INT_MASK; + + return u32IntFlag; +} + +/** + * @brief Clear interrupt flag. + * @param[in] spi The pointer of the specified SPI module. + * @param[in] u32Mask The combination of all related interrupt sources. + * Each bit corresponds to a interrupt source. + * This parameter decides which interrupt flags will be cleared. It could be the combination of: + * - \ref SPI_UNIT_INT_MASK + * - \ref SPI_SSACT_INT_MASK + * - \ref SPI_SSINACT_INT_MASK + * - \ref SPI_SLVUR_INT_MASK + * - \ref SPI_SLVBE_INT_MASK + * - \ref SPI_SLVTO_INT_MASK + * - \ref SPI_TXUF_INT_MASK + * - \ref SPI_FIFO_RXOV_INT_MASK + * - \ref SPI_FIFO_RXTO_INT_MASK + * + * @return None + * @details Clear SPI related interrupt flags specified by u32Mask parameter. + */ +void SPI_ClearIntFlag(SPI_T *spi, uint32_t u32Mask) +{ + if(u32Mask & SPI_UNIT_INT_MASK) + spi->STATUS = SPI_STATUS_UNITIF_Msk; /* Clear unit transfer interrupt flag */ + + if(u32Mask & SPI_SSACT_INT_MASK) + spi->STATUS = SPI_STATUS_SSACTIF_Msk; /* Clear slave selection signal active interrupt flag */ + + if(u32Mask & SPI_SSINACT_INT_MASK) + spi->STATUS = SPI_STATUS_SSINAIF_Msk; /* Clear slave selection signal inactive interrupt flag */ + + if(u32Mask & SPI_SLVUR_INT_MASK) + spi->STATUS = SPI_STATUS_SLVURIF_Msk; /* Clear slave TX under run interrupt flag */ + + if(u32Mask & SPI_SLVBE_INT_MASK) + spi->STATUS = SPI_STATUS_SLVBEIF_Msk; /* Clear slave bit count error interrupt flag */ + + if(u32Mask & SPI_SLVTO_INT_MASK) + spi->STATUS = SPI_STATUS_SLVTOIF_Msk; /* Clear slave time-out interrupt flag */ + + if(u32Mask & SPI_TXUF_INT_MASK) + spi->STATUS = SPI_STATUS_TXUFIF_Msk; /* Clear slave TX underflow interrupt flag */ + + if(u32Mask & SPI_FIFO_RXOV_INT_MASK) + spi->STATUS = SPI_STATUS_RXOVIF_Msk; /* Clear RX overrun interrupt flag */ + + if(u32Mask & SPI_FIFO_RXTO_INT_MASK) + spi->STATUS = SPI_STATUS_RXTOIF_Msk; /* Clear RX time-out interrupt flag */ +} + +/** + * @brief Get SPI status. + * @param[in] spi The pointer of the specified SPI module. + * @param[in] u32Mask The combination of all related sources. + * Each bit corresponds to a source. + * This parameter decides which flags will be read. It is combination of: + * - \ref SPI_BUSY_MASK + * - \ref SPI_RX_EMPTY_MASK + * - \ref SPI_RX_FULL_MASK + * - \ref SPI_TX_EMPTY_MASK + * - \ref SPI_TX_FULL_MASK + * - \ref SPI_TXRX_RESET_MASK + * - \ref SPI_SPIEN_STS_MASK + * - \ref SPI_SSLINE_STS_MASK + * + * @return Flags of selected sources. + * @details Get SPI related status specified by u32Mask parameter. + */ +uint32_t SPI_GetStatus(SPI_T *spi, uint32_t u32Mask) +{ + uint32_t u32Flag = 0; + + /* Check busy status */ + if((u32Mask & SPI_BUSY_MASK) && (spi->STATUS & SPI_STATUS_BUSY_Msk)) + u32Flag |= SPI_BUSY_MASK; + + /* Check RX empty flag */ + if((u32Mask & SPI_RX_EMPTY_MASK) && (spi->STATUS & SPI_STATUS_RXEMPTY_Msk)) + u32Flag |= SPI_RX_EMPTY_MASK; + + /* Check RX full flag */ + if((u32Mask & SPI_RX_FULL_MASK) && (spi->STATUS & SPI_STATUS_RXFULL_Msk)) + u32Flag |= SPI_RX_FULL_MASK; + + /* Check TX empty flag */ + if((u32Mask & SPI_TX_EMPTY_MASK) && (spi->STATUS & SPI_STATUS_TXEMPTY_Msk)) + u32Flag |= SPI_TX_EMPTY_MASK; + + /* Check TX full flag */ + if((u32Mask & SPI_TX_FULL_MASK) && (spi->STATUS & SPI_STATUS_TXFULL_Msk)) + u32Flag |= SPI_TX_FULL_MASK; + + /* Check TX/RX reset flag */ + if((u32Mask & SPI_TXRX_RESET_MASK) && (spi->STATUS & SPI_STATUS_TXRXRST_Msk)) + u32Flag |= SPI_TXRX_RESET_MASK; + + /* Check SPIEN flag */ + if((u32Mask & SPI_SPIEN_STS_MASK) && (spi->STATUS & SPI_STATUS_SPIENSTS_Msk)) + u32Flag |= SPI_SPIEN_STS_MASK; + + /* Check SPIn_SS line status */ + if((u32Mask & SPI_SSLINE_STS_MASK) && (spi->STATUS & SPI_STATUS_SSLINE_Msk)) + u32Flag |= SPI_SSLINE_STS_MASK; + + return u32Flag; +} + + +/** + * @brief This function is used to get I2S source clock frequency. + * @param[in] i2s The pointer of the specified I2S module. + * @return I2S source clock frequency (Hz). + * @details Return the source clock frequency according to the setting of SPI1SEL (CLKSEL2[5:4]) or SPI2SEL (CLKSEL2[7:6]). + * @note Only SPI1 and SPI2 support I2S mode. + */ +static uint32_t I2S_GetSourceClockFreq(SPI_T *i2s) +{ + uint32_t u32Freq, u32HCLKFreq; + + if(i2s == SPI1) + { + if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI1SEL_Msk) == CLK_CLKSEL2_SPI1SEL_HXT) + u32Freq = __HXT; /* Clock source is HXT */ + else if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI1SEL_Msk) == CLK_CLKSEL2_SPI1SEL_PLL) + u32Freq = CLK_GetPLLClockFreq(); /* Clock source is PLL */ + else if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI1SEL_Msk) == CLK_CLKSEL2_SPI1SEL_PCLK1) + { + /* Get system clock frequency */ + u32HCLKFreq = CLK_GetHCLKFreq(); + /* Clock source is PCLK1 */ + if((CLK->CLKSEL0 & CLK_CLKSEL0_PCLK1SEL_Msk) == CLK_CLKSEL0_PCLK1SEL_HCLK_DIV2) + u32Freq = (u32HCLKFreq / 2); + else + u32Freq = u32HCLKFreq; + } + else + u32Freq = __HIRC; /* Clock source is HIRC */ + } + else + { + if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI2SEL_Msk) == CLK_CLKSEL2_SPI2SEL_HXT) + u32Freq = __HXT; /* Clock source is HXT */ + else if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI2SEL_Msk) == CLK_CLKSEL2_SPI2SEL_PLL) + u32Freq = CLK_GetPLLClockFreq(); /* Clock source is PLL */ + else if((CLK->CLKSEL2 & CLK_CLKSEL2_SPI2SEL_Msk) == CLK_CLKSEL2_SPI2SEL_PCLK0) + { + /* Get system clock frequency */ + u32HCLKFreq = CLK_GetHCLKFreq(); + /* Clock source is PCLK0 */ + if((CLK->CLKSEL0 & CLK_CLKSEL0_PCLK0SEL_Msk) == CLK_CLKSEL0_PCLK0SEL_HCLK_DIV2) + u32Freq = (u32HCLKFreq / 2); + else + u32Freq = u32HCLKFreq; + } + else + u32Freq = __HIRC; /* Clock source is HIRC */ + } + + return u32Freq; +} + +/** + * @brief This function configures some parameters of I2S interface for general purpose use. + * @param[in] i2s The pointer of the specified I2S module. + * @param[in] u32MasterSlave I2S operation mode. Valid values are listed below. + * - \ref I2S_MODE_MASTER + * - \ref I2S_MODE_SLAVE + * @param[in] u32SampleRate Sample rate + * @param[in] u32WordWidth Data length. Valid values are listed below. + * - \ref I2S_DATABIT_8 + * - \ref I2S_DATABIT_16 + * - \ref I2S_DATABIT_24 + * - \ref I2S_DATABIT_32 + * @param[in] u32Channels Audio format. Valid values are listed below. + * - \ref I2S_MONO + * - \ref I2S_STEREO + * @param[in] u32DataFormat Data format. Valid values are listed below. + * - \ref I2S_FORMAT_I2S + * - \ref I2S_FORMAT_MSB + * - \ref I2S_FORMAT_PCMA + * - \ref I2S_FORMAT_PCMB + * @return Real sample rate of master mode or peripheral clock rate of slave mode. + * @details This function will reset SPI/I2S controller and configure I2S controller according to the input parameters. + * Set TX and RX FIFO threshold to middle value. Both the TX and RX functions will be enabled. + * The actual sample rate may be different from the target sample rate. The real sample rate will be returned for reference. + * @note Only SPI1 and SPI2 support I2S mode. + * @note In slave mode, the SPI peripheral clock rate will be equal to APB clock rate. + */ +uint32_t I2S_Open(SPI_T *i2s, uint32_t u32MasterSlave, uint32_t u32SampleRate, uint32_t u32WordWidth, uint32_t u32Channels, uint32_t u32DataFormat) +{ + uint32_t u32Divider; + uint32_t u32BitRate, u32SrcClk; + uint32_t u32HCLKFreq; + + /* Reset SPI/I2S */ + if(i2s == SPI1) + { + SYS->IPRST1 |= SYS_IPRST1_SPI1RST_Msk; + SYS->IPRST1 &= ~SYS_IPRST1_SPI1RST_Msk; + } + else + { + SYS->IPRST1 |= SYS_IPRST1_SPI2RST_Msk; + SYS->IPRST1 &= ~SYS_IPRST1_SPI2RST_Msk; + } + + /* Configure I2S controller */ + i2s->I2SCTL = u32MasterSlave | u32WordWidth | u32Channels | u32DataFormat; + /* Set TX and RX FIFO threshold to middle value */ + i2s->FIFOCTL = I2S_FIFO_TX_LEVEL_WORD_2 | I2S_FIFO_RX_LEVEL_WORD_2; + + if(u32MasterSlave == SPI_MASTER) + { + /* Get the source clock rate */ + u32SrcClk = I2S_GetSourceClockFreq(i2s); + + /* Calculate the bit clock rate */ + u32BitRate = u32SampleRate * ((u32WordWidth >> SPI_I2SCTL_WDWIDTH_Pos) + 1) * 16; + u32Divider = ((u32SrcClk / u32BitRate) >> 1) - 1; + /* Set BCLKDIV setting */ + i2s->I2SCLK = (i2s->I2SCLK & ~SPI_I2SCLK_BCLKDIV_Msk) | (u32Divider << SPI_I2SCLK_BCLKDIV_Pos); + + /* Calculate bit clock rate */ + u32BitRate = u32SrcClk / ((u32Divider + 1) * 2); + /* Calculate real sample rate */ + u32SampleRate = u32BitRate / (((u32WordWidth >> SPI_I2SCTL_WDWIDTH_Pos) + 1) * 16); + + /* Enable TX function, RX function and I2S mode. */ + i2s->I2SCTL |= (SPI_I2SCTL_RXEN_Msk | SPI_I2SCTL_TXEN_Msk | SPI_I2SCTL_I2SEN_Msk); + + /* Return the real sample rate */ + return u32SampleRate; + } + else + { + /* Set BCLKDIV = 0 */ + i2s->I2SCLK &= ~SPI_I2SCLK_BCLKDIV_Msk; + /* Get system clock frequency */ + u32HCLKFreq = CLK_GetHCLKFreq(); + + if(i2s == SPI1) + { + /* Set the peripheral clock rate to equal APB clock rate */ + CLK->CLKSEL2 = (CLK->CLKSEL2 & (~CLK_CLKSEL2_SPI1SEL_Msk)) | CLK_CLKSEL2_SPI1SEL_PCLK1; + /* Enable TX function, RX function and I2S mode. */ + i2s->I2SCTL |= (SPI_I2SCTL_RXEN_Msk | SPI_I2SCTL_TXEN_Msk | SPI_I2SCTL_I2SEN_Msk); + /* Return slave peripheral clock rate */ + if((CLK->CLKSEL0 & CLK_CLKSEL0_PCLK1SEL_Msk) == CLK_CLKSEL0_PCLK1SEL_HCLK_DIV2) + return (u32HCLKFreq / 2); + else + return u32HCLKFreq; + } + else + { + /* Set the peripheral clock rate to equal APB clock rate */ + CLK->CLKSEL2 = (CLK->CLKSEL2 & (~CLK_CLKSEL2_SPI2SEL_Msk)) | CLK_CLKSEL2_SPI2SEL_PCLK0; + /* Enable TX function, RX function and I2S mode. */ + i2s->I2SCTL |= (SPI_I2SCTL_RXEN_Msk | SPI_I2SCTL_TXEN_Msk | SPI_I2SCTL_I2SEN_Msk); + /* Return slave peripheral clock rate */ + if((CLK->CLKSEL0 & CLK_CLKSEL0_PCLK0SEL_Msk) == CLK_CLKSEL0_PCLK0SEL_HCLK_DIV2) + return (u32HCLKFreq / 2); + else + return u32HCLKFreq; + } + } +} + +/** + * @brief Disable I2S function. + * @param[in] i2s The pointer of the specified I2S module. + * @return None + * @details Disable I2S function. + * @note Only SPI1 and SPI2 support I2S mode. + */ +void I2S_Close(SPI_T *i2s) +{ + i2s->I2SCTL &= ~SPI_I2SCTL_I2SEN_Msk; +} + +/** + * @brief Enable interrupt function. + * @param[in] i2s The pointer of the specified I2S module. + * @param[in] u32Mask The combination of all related interrupt enable bits. + * Each bit corresponds to a interrupt source. Valid values are listed below. + * - \ref I2S_FIFO_TXTH_INT_MASK + * - \ref I2S_FIFO_RXTH_INT_MASK + * - \ref I2S_FIFO_RXOV_INT_MASK + * - \ref I2S_FIFO_RXTO_INT_MASK + * - \ref I2S_TXUF_INT_MASK + * - \ref I2S_RIGHT_ZC_INT_MASK + * - \ref I2S_LEFT_ZC_INT_MASK + * @return None + * @details This function enables the interrupt according to the u32Mask parameter. + * @note Only SPI1 and SPI2 support I2S mode. + */ +void I2S_EnableInt(SPI_T *i2s, uint32_t u32Mask) +{ + /* Enable TX threshold interrupt flag */ + if((u32Mask & I2S_FIFO_TXTH_INT_MASK) == I2S_FIFO_TXTH_INT_MASK) + i2s->FIFOCTL |= SPI_FIFOCTL_TXTHIEN_Msk; + + /* Enable RX threshold interrupt flag */ + if((u32Mask & I2S_FIFO_RXTH_INT_MASK) == I2S_FIFO_RXTH_INT_MASK) + i2s->FIFOCTL |= SPI_FIFOCTL_RXTHIEN_Msk; + + /* Enable RX overrun interrupt flag */ + if((u32Mask & I2S_FIFO_RXOV_INT_MASK) == I2S_FIFO_RXOV_INT_MASK) + i2s->FIFOCTL |= SPI_FIFOCTL_RXOVIEN_Msk; + + /* Enable RX time-out interrupt flag */ + if((u32Mask & I2S_FIFO_RXTO_INT_MASK) == I2S_FIFO_RXTO_INT_MASK) + i2s->FIFOCTL |= SPI_FIFOCTL_RXTOIEN_Msk; + + /* Enable TX underflow interrupt flag */ + if((u32Mask & I2S_TXUF_INT_MASK) == I2S_TXUF_INT_MASK) + i2s->FIFOCTL |= SPI_FIFOCTL_TXUFIEN_Msk; + + /* Enable right channel zero cross interrupt flag */ + if((u32Mask & I2S_RIGHT_ZC_INT_MASK) == I2S_RIGHT_ZC_INT_MASK) + i2s->I2SCTL |= SPI_I2SCTL_RZCIEN_Msk; + + /* Enable left channel zero cross interrupt flag */ + if((u32Mask & I2S_LEFT_ZC_INT_MASK) == I2S_LEFT_ZC_INT_MASK) + i2s->I2SCTL |= SPI_I2SCTL_LZCIEN_Msk; +} + +/** + * @brief Disable interrupt function. + * @param[in] i2s The pointer of the specified I2S module. + * @param[in] u32Mask The combination of all related interrupt enable bits. + * Each bit corresponds to a interrupt source. Valid values are listed below. + * - \ref I2S_FIFO_TXTH_INT_MASK + * - \ref I2S_FIFO_RXTH_INT_MASK + * - \ref I2S_FIFO_RXOV_INT_MASK + * - \ref I2S_FIFO_RXTO_INT_MASK + * - \ref I2S_TXUF_INT_MASK + * - \ref I2S_RIGHT_ZC_INT_MASK + * - \ref I2S_LEFT_ZC_INT_MASK + * @return None + * @details This function disables the interrupt according to the u32Mask parameter. + * @note Only SPI1 and SPI2 support I2S mode. + */ +void I2S_DisableInt(SPI_T *i2s, uint32_t u32Mask) +{ + /* Disable TX threshold interrupt flag */ + if((u32Mask & I2S_FIFO_TXTH_INT_MASK) == I2S_FIFO_TXTH_INT_MASK) + i2s->FIFOCTL &= ~SPI_FIFOCTL_TXTHIEN_Msk; + + /* Disable RX threshold interrupt flag */ + if((u32Mask & I2S_FIFO_RXTH_INT_MASK) == I2S_FIFO_RXTH_INT_MASK) + i2s->FIFOCTL &= ~SPI_FIFOCTL_RXTHIEN_Msk; + + /* Disable RX overrun interrupt flag */ + if((u32Mask & I2S_FIFO_RXOV_INT_MASK) == I2S_FIFO_RXOV_INT_MASK) + i2s->FIFOCTL &= ~SPI_FIFOCTL_RXOVIEN_Msk; + + /* Disable RX time-out interrupt flag */ + if((u32Mask & I2S_FIFO_RXTO_INT_MASK) == I2S_FIFO_RXTO_INT_MASK) + i2s->FIFOCTL &= ~SPI_FIFOCTL_RXTOIEN_Msk; + + /* Disable TX underflow interrupt flag */ + if((u32Mask & I2S_TXUF_INT_MASK) == I2S_TXUF_INT_MASK) + i2s->FIFOCTL &= ~SPI_FIFOCTL_TXUFIEN_Msk; + + /* Disable right channel zero cross interrupt flag */ + if((u32Mask & I2S_RIGHT_ZC_INT_MASK) == I2S_RIGHT_ZC_INT_MASK) + i2s->I2SCTL &= ~SPI_I2SCTL_RZCIEN_Msk; + + /* Disable left channel zero cross interrupt flag */ + if((u32Mask & I2S_LEFT_ZC_INT_MASK) == I2S_LEFT_ZC_INT_MASK) + i2s->I2SCTL &= ~SPI_I2SCTL_LZCIEN_Msk; +} + +/** + * @brief Enable master clock (MCLK). + * @param[in] i2s The pointer of the specified I2S module. + * @param[in] u32BusClock The target MCLK clock rate. + * @return Actual MCLK clock rate + * @details Set the master clock rate according to u32BusClock parameter and enable master clock output. + * The actual master clock rate may be different from the target master clock rate. The real master clock rate will be returned for reference. + * @note Only SPI1 and SPI2 support I2S mode. + */ +uint32_t I2S_EnableMCLK(SPI_T *i2s, uint32_t u32BusClock) +{ + uint32_t u32Divider; + uint32_t u32SrcClk; + + u32SrcClk = I2S_GetSourceClockFreq(i2s); + if(u32BusClock == u32SrcClk) + u32Divider = 0; + else + { + u32Divider = (u32SrcClk / u32BusClock) >> 1; + /* MCLKDIV is a 6-bit width configuration. The maximum value is 0x3F. */ + if(u32Divider > 0x3F) + u32Divider = 0x3F; + } + + /* Write u32Divider to MCLKDIV (SPI_I2SCLK[5:0]) */ + i2s->I2SCLK = (i2s->I2SCLK & ~SPI_I2SCLK_MCLKDIV_Msk) | (u32Divider << SPI_I2SCLK_MCLKDIV_Pos); + + /* Enable MCLK output */ + i2s->I2SCTL |= SPI_I2SCTL_MCLKEN_Msk; + + if(u32Divider == 0) + return u32SrcClk; /* If MCLKDIV=0, master clock rate is equal to the source clock rate. */ + else + return ((u32SrcClk >> 1) / u32Divider); /* If MCLKDIV>0, master clock rate = source clock rate / (MCLKDIV * 2) */ +} + +/** + * @brief Disable master clock (MCLK). + * @param[in] i2s The pointer of the specified I2S module. + * @return None + * @details Clear MCLKEN bit of SPI_I2SCTL register to disable master clock output. + * @note Only SPI1 and SPI2 support I2S mode. + */ +void I2S_DisableMCLK(SPI_T *i2s) +{ + i2s->I2SCTL &= ~SPI_I2SCTL_MCLKEN_Msk; +} + +/** + * @brief Configure FIFO threshold setting. + * @param[in] i2s The pointer of the specified I2S module. + * @param[in] u32TxThreshold Decides the TX FIFO threshold. It could be 0 ~ 3. + * @param[in] u32RxThreshold Decides the RX FIFO threshold. It could be 0 ~ 3. + * @return None + * @details Set TX FIFO threshold and RX FIFO threshold configurations. + */ +void I2S_SetFIFO(SPI_T *i2s, uint32_t u32TxThreshold, uint32_t u32RxThreshold) +{ + i2s->FIFOCTL = (i2s->FIFOCTL & ~(SPI_FIFOCTL_TXTH_Msk | SPI_FIFOCTL_RXTH_Msk) | + (u32TxThreshold << SPI_FIFOCTL_TXTH_Pos) | + (u32RxThreshold << SPI_FIFOCTL_RXTH_Pos)); +} + +/*@}*/ /* end of group SPI_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group SPI_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +/*** (C) COPYRIGHT 2014~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_spi.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_spi.h new file mode 100644 index 00000000000..02d2469190a --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_spi.h @@ -0,0 +1,630 @@ +/****************************************************************************** + * @file spi.h + * @version V0.10 + * $Revision: 17 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series SPI driver header file + * + * @note + * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ +#ifndef __SPI_H__ +#define __SPI_H__ + +/*---------------------------------------------------------------------------------------------------------*/ +/* Include related headers */ +/*---------------------------------------------------------------------------------------------------------*/ +#include "M451Series.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup SPI_Driver SPI Driver + @{ +*/ + +/** @addtogroup SPI_EXPORTED_CONSTANTS SPI Exported Constants + @{ +*/ + +#define SPI_MODE_0 (SPI_CTL_TXNEG_Msk) /*!< CLKPOL=0; RXNEG=0; TXNEG=1 */ +#define SPI_MODE_1 (SPI_CTL_RXNEG_Msk) /*!< CLKPOL=0; RXNEG=1; TXNEG=0 */ +#define SPI_MODE_2 (SPI_CTL_CLKPOL_Msk | SPI_CTL_RXNEG_Msk) /*!< CLKPOL=1; RXNEG=1; TXNEG=0 */ +#define SPI_MODE_3 (SPI_CTL_CLKPOL_Msk | SPI_CTL_TXNEG_Msk) /*!< CLKPOL=1; RXNEG=0; TXNEG=1 */ + +#define SPI_SLAVE (SPI_CTL_SLAVE_Msk) /*!< Set as slave */ +#define SPI_MASTER (0x0) /*!< Set as master */ + +#define SPI_SS (SPI_SSCTL_SS_Msk) /*!< Set SS */ +#define SPI_SS_ACTIVE_HIGH (SPI_SSCTL_SSACTPOL_Msk) /*!< SS active high */ +#define SPI_SS_ACTIVE_LOW (0x0) /*!< SS active low */ + +/* SPI Interrupt Mask */ +#define SPI_UNIT_INT_MASK (0x001) /*!< Unit transfer interrupt mask */ +#define SPI_SSACT_INT_MASK (0x002) /*!< Slave selection signal active interrupt mask */ +#define SPI_SSINACT_INT_MASK (0x004) /*!< Slave selection signal inactive interrupt mask */ +#define SPI_SLVUR_INT_MASK (0x008) /*!< Slave under run interrupt mask */ +#define SPI_SLVBE_INT_MASK (0x010) /*!< Slave bit count error interrupt mask */ +#define SPI_SLVTO_INT_MASK (0x020) /*!< Slave time-out interrupt mask */ +#define SPI_TXUF_INT_MASK (0x040) /*!< Slave TX underflow interrupt mask */ +#define SPI_FIFO_TXTH_INT_MASK (0x080) /*!< FIFO TX threshold interrupt mask */ +#define SPI_FIFO_RXTH_INT_MASK (0x100) /*!< FIFO RX threshold interrupt mask */ +#define SPI_FIFO_RXOV_INT_MASK (0x200) /*!< FIFO RX overrun interrupt mask */ +#define SPI_FIFO_RXTO_INT_MASK (0x400) /*!< FIFO RX time-out interrupt mask */ + +/* SPI Status Mask */ +#define SPI_BUSY_MASK (0x01) /*!< Busy status mask */ +#define SPI_RX_EMPTY_MASK (0x02) /*!< RX empty status mask */ +#define SPI_RX_FULL_MASK (0x04) /*!< RX full status mask */ +#define SPI_TX_EMPTY_MASK (0x08) /*!< TX empty status mask */ +#define SPI_TX_FULL_MASK (0x10) /*!< TX full status mask */ +#define SPI_TXRX_RESET_MASK (0x20) /*!< TX or RX reset status mask */ +#define SPI_SPIEN_STS_MASK (0x40) /*!< SPIEN status mask */ +#define SPI_SSLINE_STS_MASK (0x80) /*!< SPIn_SS line status mask */ + + +/* I2S Data Width */ +#define I2S_DATABIT_8 (0 << SPI_I2SCTL_WDWIDTH_Pos) /*!< I2S data width is 8-bit */ +#define I2S_DATABIT_16 (1 << SPI_I2SCTL_WDWIDTH_Pos) /*!< I2S data width is 16-bit */ +#define I2S_DATABIT_24 (2 << SPI_I2SCTL_WDWIDTH_Pos) /*!< I2S data width is 24-bit */ +#define I2S_DATABIT_32 (3 << SPI_I2SCTL_WDWIDTH_Pos) /*!< I2S data width is 32-bit */ + +/* I2S Audio Format */ +#define I2S_MONO SPI_I2SCTL_MONO_Msk /*!< Monaural channel */ +#define I2S_STEREO 0 /*!< Stereo channel */ + +/* I2S Data Format */ +#define I2S_FORMAT_I2S (0<STATUS = SPI_STATUS_UNITIF_Msk) + +/** + * @brief Disable 2-bit Transfer mode. + * @param[in] spi The pointer of the specified SPI module. + * @return None. + * @details Clear TWOBIT bit of SPI_CTL register to disable 2-bit Transfer mode. + */ +#define SPI_DISABLE_2BIT_MODE(spi) ((spi)->CTL &= ~SPI_CTL_TWOBIT_Msk) + +/** + * @brief Disable Slave 3-wire mode. + * @param[in] spi The pointer of the specified SPI module. + * @return None. + * @details Clear SLV3WIRE bit of SPI_SSCTL register to disable Slave 3-wire mode. + */ +#define SPI_DISABLE_3WIRE_MODE(spi) ((spi)->SSCTL &= ~SPI_SSCTL_SLV3WIRE_Msk) + +/** + * @brief Disable Dual I/O mode. + * @param[in] spi The pointer of the specified SPI module. + * @return None. + * @details Clear DUALIOEN bit of SPI_CTL register to disable Dual I/O mode. + */ +#define SPI_DISABLE_DUAL_MODE(spi) ((spi)->CTL &= ~SPI_CTL_DUALIOEN_Msk) + +/** + * @brief Disable Quad I/O mode. + * @param[in] spi The pointer of the specified SPI module. + * @return None. + * @details Clear QUADIOEN bit of SPI_CTL register to disable Quad I/O mode. + */ +#define SPI_DISABLE_QUAD_MODE(spi) ((spi)->CTL &= ~SPI_CTL_QUADIOEN_Msk) + +/** + * @brief Enable 2-bit Transfer mode. + * @param[in] spi The pointer of the specified SPI module. + * @return None. + * @details Set TWOBIT bit of SPI_CTL register to enable 2-bit Transfer mode. + */ +#define SPI_ENABLE_2BIT_MODE(spi) ((spi)->CTL |= SPI_CTL_TWOBIT_Msk) + +/** + * @brief Enable Slave 3-wire mode. + * @param[in] spi The pointer of the specified SPI module. + * @return None. + * @details Set SLV3WIRE bit of SPI_SSCTL register to enable Slave 3-wire mode. + */ +#define SPI_ENABLE_3WIRE_MODE(spi) ((spi)->SSCTL |= SPI_SSCTL_SLV3WIRE_Msk) + +/** + * @brief Enable Dual input mode. + * @param[in] spi The pointer of the specified SPI module. + * @return None. + * @details Clear QDIODIR bit and set DUALIOEN bit of SPI_CTL register to enable Dual input mode. + */ +#define SPI_ENABLE_DUAL_INPUT_MODE(spi) ((spi)->CTL = ((spi)->CTL & (~SPI_CTL_QDIODIR_Msk)) | SPI_CTL_DUALIOEN_Msk) + +/** + * @brief Enable Dual output mode. + * @param[in] spi The pointer of the specified SPI module. + * @return None. + * @details Set QDIODIR bit and DUALIOEN bit of SPI_CTL register to enable Dual output mode. + */ +#define SPI_ENABLE_DUAL_OUTPUT_MODE(spi) ((spi)->CTL |= (SPI_CTL_QDIODIR_Msk | SPI_CTL_DUALIOEN_Msk)) + +/** + * @brief Enable Quad input mode. + * @param[in] spi The pointer of the specified SPI module. + * @return None. + * @details Clear QDIODIR bit and set QUADIOEN bit of SPI_CTL register to enable Quad input mode. + */ +#define SPI_ENABLE_QUAD_INPUT_MODE(spi) ((spi)->CTL = ((spi)->CTL & (~SPI_CTL_QDIODIR_Msk)) | SPI_CTL_QUADIOEN_Msk) + +/** + * @brief Enable Quad output mode. + * @param[in] spi The pointer of the specified SPI module. + * @return None. + * @details Set QDIODIR bit and QUADIOEN bit of SPI_CTL register to enable Quad output mode. + */ +#define SPI_ENABLE_QUAD_OUTPUT_MODE(spi) ((spi)->CTL |= (SPI_CTL_QDIODIR_Msk | SPI_CTL_QUADIOEN_Msk)) + +/** + * @brief Trigger RX PDMA function. + * @param[in] spi The pointer of the specified SPI module. + * @return None. + * @details Set RXPDMAEN bit of SPI_PDMACTL register to enable RX PDMA transfer function. + */ +#define SPI_TRIGGER_RX_PDMA(spi) ((spi)->PDMACTL |= SPI_PDMACTL_RXPDMAEN_Msk) + +/** + * @brief Trigger TX PDMA function. + * @param[in] spi The pointer of the specified SPI module. + * @return None. + * @details Set TXPDMAEN bit of SPI_PDMACTL register to enable TX PDMA transfer function. + */ +#define SPI_TRIGGER_TX_PDMA(spi) ((spi)->PDMACTL |= SPI_PDMACTL_TXPDMAEN_Msk) + +/** + * @brief Disable RX PDMA transfer. + * @param[in] spi The pointer of the specified SPI module. + * @return None. + * @details Clear RXPDMAEN bit of SPI_PDMACTL register to disable RX PDMA transfer function. + */ +#define SPI_DISABLE_RX_PDMA(spi) ( (spi)->PDMACTL &= ~SPI_PDMACTL_RXPDMAEN_Msk ) + +/** + * @brief Disable TX PDMA transfer. + * @param[in] spi The pointer of the specified SPI module. + * @return None. + * @details Clear TXPDMAEN bit of SPI_PDMACTL register to disable TX PDMA transfer function. + */ +#define SPI_DISABLE_TX_PDMA(spi) ( (spi)->PDMACTL &= ~SPI_PDMACTL_TXPDMAEN_Msk ) + +/** + * @brief Get the count of available data in RX FIFO. + * @param[in] spi The pointer of the specified SPI module. + * @return The count of available data in RX FIFO. + * @details Read RXCNT (SPI_STATUS[27:24]) to get the count of available data in RX FIFO. + */ +#define SPI_GET_RX_FIFO_COUNT(spi) (((spi)->STATUS & SPI_STATUS_RXCNT_Msk) >> SPI_STATUS_RXCNT_Pos) + +/** + * @brief Get the RX FIFO empty flag. + * @param[in] spi The pointer of the specified SPI module. + * @retval 0 RX FIFO is not empty. + * @retval 1 RX FIFO is empty. + * @details Read RXEMPTY bit of SPI_STATUS register to get the RX FIFO empty flag. + */ +#define SPI_GET_RX_FIFO_EMPTY_FLAG(spi) (((spi)->STATUS & SPI_STATUS_RXEMPTY_Msk)>>SPI_STATUS_RXEMPTY_Pos) + +/** + * @brief Get the TX FIFO empty flag. + * @param[in] spi The pointer of the specified SPI module. + * @retval 0 TX FIFO is not empty. + * @retval 1 TX FIFO is empty. + * @details Read TXEMPTY bit of SPI_STATUS register to get the TX FIFO empty flag. + */ +#define SPI_GET_TX_FIFO_EMPTY_FLAG(spi) (((spi)->STATUS & SPI_STATUS_TXEMPTY_Msk)>>SPI_STATUS_TXEMPTY_Pos) + +/** + * @brief Get the TX FIFO full flag. + * @param[in] spi The pointer of the specified SPI module. + * @retval 0 TX FIFO is not full. + * @retval 1 TX FIFO is full. + * @details Read TXFULL bit of SPI_STATUS register to get the TX FIFO full flag. + */ +#define SPI_GET_TX_FIFO_FULL_FLAG(spi) (((spi)->STATUS & SPI_STATUS_TXFULL_Msk)>>SPI_STATUS_TXFULL_Pos) + +/** + * @brief Get the datum read from RX register. + * @param[in] spi The pointer of the specified SPI module. + * @return Data in RX register. + * @details Read SPI_RX register to get the received datum. + */ +#define SPI_READ_RX(spi) ((spi)->RX) + +/** + * @brief Write datum to TX register. + * @param[in] spi The pointer of the specified SPI module. + * @param[in] u32TxData The datum which user attempt to transfer through SPI bus. + * @return None. + * @details Write u32TxData to SPI_TX register. + */ +#define SPI_WRITE_TX(spi, u32TxData) ((spi)->TX = (u32TxData)) + +/** + * @brief Set SPIn_SS pin to high state. + * @param[in] spi The pointer of the specified SPI module. + * @return None. + * @details Disable automatic slave selection function and set SPIn_SS pin to high state. + */ +#define SPI_SET_SS_HIGH(spi) ((spi)->SSCTL = ((spi)->SSCTL & (~SPI_SSCTL_AUTOSS_Msk)) | (SPI_SSCTL_SSACTPOL_Msk | SPI_SSCTL_SS_Msk)) + +/** + * @brief Set SPIn_SS pin to low state. + * @param[in] spi The pointer of the specified SPI module. + * @return None. + * @details Disable automatic slave selection function and set SPIn_SS pin to low state. + */ +#define SPI_SET_SS_LOW(spi) ((spi)->SSCTL = ((spi)->SSCTL & (~(SPI_SSCTL_AUTOSS_Msk | SPI_SSCTL_SSACTPOL_Msk))) | SPI_SSCTL_SS_Msk) + +/** + * @brief Enable Byte Reorder function. + * @param[in] spi The pointer of the specified SPI module. + * @return None. + * @details Enable Byte Reorder function. The suspend interval depends on the setting of SUSPITV (SPI_CTL[7:4]). + */ +#define SPI_ENABLE_BYTE_REORDER(spi) ((spi)->CTL |= SPI_CTL_REORDER_Msk) + +/** + * @brief Disable Byte Reorder function. + * @param[in] spi The pointer of the specified SPI module. + * @return None. + * @details Clear REORDER bit field of SPI_CTL register to disable Byte Reorder function. + */ +#define SPI_DISABLE_BYTE_REORDER(spi) ((spi)->CTL &= ~SPI_CTL_REORDER_Msk) + +/** + * @brief Set the length of suspend interval. + * @param[in] spi The pointer of the specified SPI module. + * @param[in] u32SuspCycle Decides the length of suspend interval. It could be 0 ~ 15. + * @return None. + * @details Set the length of suspend interval according to u32SuspCycle. + * The length of suspend interval is ((u32SuspCycle + 0.5) * the length of one SPI bus clock cycle). + */ +#define SPI_SET_SUSPEND_CYCLE(spi, u32SuspCycle) ((spi)->CTL = ((spi)->CTL & ~SPI_CTL_SUSPITV_Msk) | ((u32SuspCycle) << SPI_CTL_SUSPITV_Pos)) + +/** + * @brief Set the SPI transfer sequence with LSB first. + * @param[in] spi The pointer of the specified SPI module. + * @return None. + * @details Set LSB bit of SPI_CTL register to set the SPI transfer sequence with LSB first. + */ +#define SPI_SET_LSB_FIRST(spi) ((spi)->CTL |= SPI_CTL_LSB_Msk) + +/** + * @brief Set the SPI transfer sequence with MSB first. + * @param[in] spi The pointer of the specified SPI module. + * @return None. + * @details Clear LSB bit of SPI_CTL register to set the SPI transfer sequence with MSB first. + */ +#define SPI_SET_MSB_FIRST(spi) ((spi)->CTL &= ~SPI_CTL_LSB_Msk) + +/** + * @brief Set the data width of a SPI transaction. + * @param[in] spi The pointer of the specified SPI module. + * @param[in] u32Width The bit width of one transaction. + * @return None. + * @details The data width can be 8 ~ 32 bits. + */ +#define SPI_SET_DATA_WIDTH(spi, u32Width) ((spi)->CTL = ((spi)->CTL & ~SPI_CTL_DWIDTH_Msk) | (((u32Width)&0x1F) << SPI_CTL_DWIDTH_Pos)) + +/** + * @brief Get the SPI busy state. + * @param[in] spi The pointer of the specified SPI module. + * @retval 0 SPI controller is not busy. + * @retval 1 SPI controller is busy. + * @details This macro will return the busy state of SPI controller. + */ +#define SPI_IS_BUSY(spi) ( ((spi)->STATUS & SPI_STATUS_BUSY_Msk)>>SPI_STATUS_BUSY_Pos ) + +/** + * @brief Enable SPI controller. + * @param[in] spi The pointer of the specified SPI module. + * @return None. + * @details Set SPIEN (SPI_CTL[0]) to enable SPI controller. + */ +#define SPI_ENABLE(spi) ((spi)->CTL |= SPI_CTL_SPIEN_Msk) + +/** + * @brief Disable SPI controller. + * @param[in] spi The pointer of the specified SPI module. + * @return None. + * @details Clear SPIEN (SPI_CTL[0]) to disable SPI controller. + */ +#define SPI_DISABLE(spi) ((spi)->CTL &= ~SPI_CTL_SPIEN_Msk) + + +/** + * @brief Enable zero cross detection function. + * @param[in] i2s The pointer of the specified I2S module. + * @param[in] u32ChMask The mask for left or right channel. Valid values are: + * - \ref I2S_RIGHT + * - \ref I2S_LEFT + * @return None + * @details This function will set RZCEN or LZCEN bit of SPI_I2SCTL register to enable zero cross detection function. + */ +static __INLINE void I2S_ENABLE_TX_ZCD(SPI_T *i2s, uint32_t u32ChMask) +{ + if(u32ChMask == I2S_RIGHT) + i2s->I2SCTL |= SPI_I2SCTL_RZCEN_Msk; + else + i2s->I2SCTL |= SPI_I2SCTL_LZCEN_Msk; +} + +/** + * @brief Disable zero cross detection function. + * @param[in] i2s The pointer of the specified I2S module. + * @param[in] u32ChMask The mask for left or right channel. Valid values are: + * - \ref I2S_RIGHT + * - \ref I2S_LEFT + * @return None + * @details This function will clear RZCEN or LZCEN bit of SPI_I2SCTL register to disable zero cross detection function. + */ +static __INLINE void I2S_DISABLE_TX_ZCD(SPI_T *i2s, uint32_t u32ChMask) +{ + if(u32ChMask == I2S_RIGHT) + i2s->I2SCTL &= ~SPI_I2SCTL_RZCEN_Msk; + else + i2s->I2SCTL &= ~SPI_I2SCTL_LZCEN_Msk; +} + +/** + * @brief Enable I2S TX DMA function. + * @param[in] i2s The pointer of the specified I2S module. + * @return None + * @details This macro will set TXPDMAEN bit of SPI_PDMACTL register to transmit data with PDMA. + */ +#define I2S_ENABLE_TXDMA(i2s) ( (i2s)->PDMACTL |= SPI_PDMACTL_TXPDMAEN_Msk ) + +/** + * @brief Disable I2S TX DMA function. + * @param[in] i2s The pointer of the specified I2S module. + * @return None + * @details This macro will clear TXPDMAEN bit of SPI_PDMACTL register to disable TX DMA function. + */ +#define I2S_DISABLE_TXDMA(i2s) ( (i2s)->PDMACTL &= ~SPI_PDMACTL_TXPDMAEN_Msk ) + +/** + * @brief Enable I2S RX DMA function. + * @param[in] i2s The pointer of the specified I2S module. + * @return None + * @details This macro will set RXPDMAEN bit of SPI_PDMACTL register to receive data with PDMA. + */ +#define I2S_ENABLE_RXDMA(i2s) ( (i2s)->PDMACTL |= SPI_PDMACTL_RXPDMAEN_Msk ) + +/** + * @brief Disable I2S RX DMA function. + * @param[in] i2s The pointer of the specified I2S module. + * @return None + * @details This macro will clear RXPDMAEN bit of SPI_PDMACTL register to disable RX DMA function. + */ +#define I2S_DISABLE_RXDMA(i2s) ( (i2s)->PDMACTL &= ~SPI_PDMACTL_RXPDMAEN_Msk ) + +/** + * @brief Enable I2S TX function. + * @param[in] i2s The pointer of the specified I2S module. + * @return None + * @details This macro will set TXEN bit of SPI_I2SCTL register to enable I2S TX function. + */ +#define I2S_ENABLE_TX(i2s) ( (i2s)->I2SCTL |= SPI_I2SCTL_TXEN_Msk ) + +/** + * @brief Disable I2S TX function. + * @param[in] i2s The pointer of the specified I2S module. + * @return None + * @details This macro will clear TXEN bit of SPI_I2SCTL register to disable I2S TX function. + */ +#define I2S_DISABLE_TX(i2s) ( (i2s)->I2SCTL &= ~SPI_I2SCTL_TXEN_Msk ) + +/** + * @brief Enable I2S RX function. + * @param[in] i2s The pointer of the specified I2S module. + * @return None + * @details This macro will set RXEN bit of SPI_I2SCTL register to enable I2S RX function. + */ +#define I2S_ENABLE_RX(i2s) ( (i2s)->I2SCTL |= SPI_I2SCTL_RXEN_Msk ) + +/** + * @brief Disable I2S RX function. + * @param[in] i2s The pointer of the specified I2S module. + * @return None + * @details This macro will clear RXEN bit of SPI_I2SCTL register to disable I2S RX function. + */ +#define I2S_DISABLE_RX(i2s) ( (i2s)->I2SCTL &= ~SPI_I2SCTL_RXEN_Msk ) + +/** + * @brief Enable TX Mute function. + * @param[in] i2s The pointer of the specified I2S module. + * @return None + * @details This macro will set MUTE bit of SPI_I2SCTL register to enable I2S TX mute function. + */ +#define I2S_ENABLE_TX_MUTE(i2s) ( (i2s)->I2SCTL |= SPI_I2SCTL_MUTE_Msk ) + +/** + * @brief Disable TX Mute function. + * @param[in] i2s The pointer of the specified I2S module. + * @return None + * @details This macro will clear MUTE bit of SPI_I2SCTL register to disable I2S TX mute function. + */ +#define I2S_DISABLE_TX_MUTE(i2s) ( (i2s)->I2SCTL &= ~SPI_I2SCTL_MUTE_Msk ) + +/** + * @brief Clear TX FIFO. + * @param[in] i2s The pointer of the specified I2S module. + * @return None + * @details This macro will clear TX FIFO. The internal TX FIFO pointer will be reset to FIFO start point. + */ +#define I2S_CLR_TX_FIFO(i2s) ( (i2s)->FIFOCTL |= SPI_FIFOCTL_TXFBCLR_Msk ) + +/** + * @brief Clear RX FIFO. + * @param[in] i2s The pointer of the specified I2S module. + * @return None + * @details This macro will clear RX FIFO. The internal RX FIFO pointer will be reset to FIFO start point. + */ +#define I2S_CLR_RX_FIFO(i2s) ( (i2s)->FIFOCTL |= SPI_FIFOCTL_RXFBCLR_Msk ) + +/** + * @brief This function sets the recording source channel when mono mode is used. + * @param[in] i2s The pointer of the specified I2S module. + * @param[in] u32Ch left or right channel. Valid values are: + * - \ref I2S_MONO_LEFT + * - \ref I2S_MONO_RIGHT + * @return None + * @details This function selects the recording source channel of monaural mode. + */ +static __INLINE void I2S_SET_MONO_RX_CHANNEL(SPI_T *i2s, uint32_t u32Ch) +{ + u32Ch == I2S_MONO_LEFT ? + (i2s->I2SCTL |= SPI_I2SCTL_RXLCH_Msk) : + (i2s->I2SCTL &= ~SPI_I2SCTL_RXLCH_Msk); +} + +/** + * @brief Write data to I2S TX FIFO. + * @param[in] i2s The pointer of the specified I2S module. + * @param[in] u32Data The value written to TX FIFO. + * @return None + * @details This macro will write a value to TX FIFO. + */ +#define I2S_WRITE_TX_FIFO(i2s, u32Data) ( (i2s)->TX = (u32Data) ) + +/** + * @brief Read RX FIFO. + * @param[in] i2s The pointer of the specified I2S module. + * @return The value read from RX FIFO. + * @details This function will return a value read from RX FIFO. + */ +#define I2S_READ_RX_FIFO(i2s) ( (i2s)->RX ) + +/** + * @brief Get the interrupt flag. + * @param[in] i2s The pointer of the specified I2S module. + * @param[in] u32Mask The mask value for all interrupt flags. + * @return The interrupt flags specified by the u32mask parameter. + * @details This macro will return the combination interrupt flags of SPI_I2SSTS register. The flags are specified by the u32mask parameter. + */ +#define I2S_GET_INT_FLAG(i2s, u32Mask) ( (i2s)->I2SSTS & (u32Mask) ) + +/** + * @brief Clear the interrupt flag. + * @param[in] i2s The pointer of the specified I2S module. + * @param[in] u32Mask The mask value for all interrupt flags. + * @return None + * @details This macro will clear the interrupt flags specified by the u32mask parameter. + * @note Except TX and RX FIFO threshold interrupt flags, the other interrupt flags can be cleared by writing 1 to itself. + */ +#define I2S_CLR_INT_FLAG(i2s, u32Mask) ( (i2s)->I2SSTS = (u32Mask) ) + +/** + * @brief Get transmit FIFO level + * @param[in] i2s The pointer of the specified I2S module. + * @return TX FIFO level + * @details This macro will return the number of available words in TX FIFO. + */ +#define I2S_GET_TX_FIFO_LEVEL(i2s) ( ((i2s)->I2SSTS & SPI_I2SSTS_TXCNT_Msk) >> SPI_I2SSTS_TXCNT_Pos ) + +/** + * @brief Get receive FIFO level + * @param[in] i2s The pointer of the specified I2S module. + * @return RX FIFO level + * @details This macro will return the number of available words in RX FIFO. + */ +#define I2S_GET_RX_FIFO_LEVEL(i2s) ( ((i2s)->I2SSTS & SPI_I2SSTS_RXCNT_Msk) >> SPI_I2SSTS_RXCNT_Pos ) + + + +/* Function prototype declaration */ +uint32_t SPI_Open(SPI_T *spi, uint32_t u32MasterSlave, uint32_t u32SPIMode, uint32_t u32DataWidth, uint32_t u32BusClock); +void SPI_Close(SPI_T *spi); +void SPI_ClearRxFIFO(SPI_T *spi); +void SPI_ClearTxFIFO(SPI_T *spi); +void SPI_DisableAutoSS(SPI_T *spi); +void SPI_EnableAutoSS(SPI_T *spi, uint32_t u32SSPinMask, uint32_t u32ActiveLevel); +uint32_t SPI_SetBusClock(SPI_T *spi, uint32_t u32BusClock); +void SPI_SetFIFO(SPI_T *spi, uint32_t u32TxThreshold, uint32_t u32RxThreshold); +uint32_t SPI_GetBusClock(SPI_T *spi); +void SPI_EnableInt(SPI_T *spi, uint32_t u32Mask); +void SPI_DisableInt(SPI_T *spi, uint32_t u32Mask); +uint32_t SPI_GetIntFlag(SPI_T *spi, uint32_t u32Mask); +void SPI_ClearIntFlag(SPI_T *spi, uint32_t u32Mask); +uint32_t SPI_GetStatus(SPI_T *spi, uint32_t u32Mask); + +uint32_t I2S_Open(SPI_T *i2s, uint32_t u32MasterSlave, uint32_t u32SampleRate, uint32_t u32WordWidth, uint32_t u32Channels, uint32_t u32DataFormat); +void I2S_Close(SPI_T *i2s); +void I2S_EnableInt(SPI_T *i2s, uint32_t u32Mask); +void I2S_DisableInt(SPI_T *i2s, uint32_t u32Mask); +uint32_t I2S_EnableMCLK(SPI_T *i2s, uint32_t u32BusClock); +void I2S_DisableMCLK(SPI_T *i2s); +void I2S_SetFIFO(SPI_T *i2s, uint32_t u32TxThreshold, uint32_t u32RxThreshold); + + +/*@}*/ /* end of group SPI_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group SPI_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +#ifdef __cplusplus +} +#endif + +#endif //__SPI_H__ + +/*** (C) COPYRIGHT 2014~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_sys.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_sys.c new file mode 100644 index 00000000000..bc127c7e3fd --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_sys.c @@ -0,0 +1,213 @@ +/**************************************************************************//** + * @file sys.c + * @version V3.00 + * $Revision: 12 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series SYS driver source file + * + * @note + * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ + +#include "M451Series.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup SYS_Driver SYS Driver + @{ +*/ + + +/** @addtogroup SYS_EXPORTED_FUNCTIONS SYS Exported Functions + @{ +*/ + +/** + * @brief Clear reset source + * @param[in] u32Src is system reset source. Including : + * - \ref SYS_RSTSTS_CPURF_Msk + * - \ref SYS_RSTSTS_SYSRF_Msk + * - \ref SYS_RSTSTS_BODRF_Msk + * - \ref SYS_RSTSTS_LVRF_Msk + * - \ref SYS_RSTSTS_WDTRF_Msk + * - \ref SYS_RSTSTS_PINRF_Msk + * - \ref SYS_RSTSTS_PORF_Msk + * @return None + * @details This function clear the selected system reset source. + */ +void SYS_ClearResetSrc(uint32_t u32Src) +{ + SYS->RSTSTS |= u32Src; +} + +/** + * @brief Get Brown-out detector output status + * @param None + * @retval 0 System voltage is higher than BOD_VL setting or BOD_EN is 0. + * @retval 1 System voltage is lower than BOD_VL setting. + * @details This function get Brown-out detector output status. + */ +uint32_t SYS_GetBODStatus(void) +{ + return ((SYS->BODCTL & SYS_BODCTL_BODOUT_Msk) >> SYS_BODCTL_BODOUT_Pos); +} + +/** + * @brief Get reset status register value + * @param None + * @return Reset source + * @details This function get the system reset status register value. + */ +uint32_t SYS_GetResetSrc(void) +{ + return (SYS->RSTSTS); +} + +/** + * @brief Check if register is locked nor not + * @param None + * @retval 0 Write-protection function is disabled. + * 1 Write-protection function is enabled. + * @details This function check register write-protection bit setting. + */ +uint32_t SYS_IsRegLocked(void) +{ + return !(SYS->REGLCTL & 0x1); +} + +/** + * @brief Get product ID + * @param None + * @return Product ID + * @details This function get product ID. + */ +uint32_t SYS_ReadPDID(void) +{ + return SYS->PDID; +} + +/** + * @brief Reset chip with chip reset + * @param None + * @return None + * @details This function reset chip with chip reset. + * The register write-protection function should be disabled before using this function. + */ +void SYS_ResetChip(void) +{ + SYS->IPRST0 |= SYS_IPRST0_CHIPRST_Msk; +} + +/** + * @brief Reset chip with CPU reset + * @param None + * @return None + * @details This function reset CPU with CPU reset. + * The register write-protection function should be disabled before using this function. + */ +void SYS_ResetCPU(void) +{ + SYS->IPRST0 |= SYS_IPRST0_CPURST_Msk; +} + +/** + * @brief Reset selected module + * @param[in] u32ModuleIndex is module index. Including : + * - \ref PDMA_RST + * - \ref EBI_RST + * - \ref USBH_RST + * - \ref CRC_RST + * - \ref GPIO_RST + * - \ref TMR0_RST + * - \ref TMR1_RST + * - \ref TMR2_RST + * - \ref TMR3_RST + * - \ref ACMP01_RST + * - \ref I2C0_RST + * - \ref I2C1_RST + * - \ref SPI0_RST + * - \ref SPI1_RST + * - \ref SPI2_RST + * - \ref UART0_RST + * - \ref UART1_RST + * - \ref UART2_RST + * - \ref UART3_RST + * - \ref CAN0_RST + * - \ref OTG_RST + * - \ref USBD_RST + * - \ref EADC_RST + * - \ref SC0_RST + * - \ref DAC_RST + * - \ref PWM0_RST + * - \ref PWM1_RST + * - \ref TK_RST + * @return None + * @details This function reset selected module. + */ +void SYS_ResetModule(uint32_t u32ModuleIndex) +{ + /* Generate reset signal to the corresponding module */ + *(volatile uint32_t *)((uint32_t)&SYS->IPRST0 + (u32ModuleIndex >> 24)) |= 1 << (u32ModuleIndex & 0x00ffffff); + + /* Release corresponding module from reset state */ + *(volatile uint32_t *)((uint32_t)&SYS->IPRST0 + (u32ModuleIndex >> 24)) &= ~(1 << (u32ModuleIndex & 0x00ffffff)); +} + +/** + * @brief Enable and configure Brown-out detector function + * @param[in] i32Mode is reset or interrupt mode. Including : + * - \ref SYS_BODCTL_BOD_RST_EN + * - \ref SYS_BODCTL_BOD_INTERRUPT_EN + * @param[in] u32BODLevel is Brown-out voltage level. Including : + * - \ref SYS_BODCTL_BODVL_4_5V + * - \ref SYS_BODCTL_BODVL_3_7V + * - \ref SYS_BODCTL_BODVL_2_7V + * - \ref SYS_BODCTL_BODVL_2_2V + * @return None + * @details This function configure Brown-out detector reset or interrupt mode, enable Brown-out function and set Brown-out voltage level. + * The register write-protection function should be disabled before using this function. + */ +void SYS_EnableBOD(int32_t i32Mode, uint32_t u32BODLevel) +{ + /* Enable Brown-out Detector function */ + SYS->BODCTL |= SYS_BODCTL_BODEN_Msk; + + /* Enable Brown-out interrupt or reset function */ + SYS->BODCTL = (SYS->BODCTL & ~SYS_BODCTL_BODRSTEN_Msk) | i32Mode; + + /* Select Brown-out Detector threshold voltage */ + SYS->BODCTL = (SYS->BODCTL & ~SYS_BODCTL_BODVL_Msk) | u32BODLevel; +} + +/** + * @brief Disable Brown-out detector function + * @param None + * @return None + * @details This function disable Brown-out detector function. + * The register write-protection function should be disabled before using this function. + */ +void SYS_DisableBOD(void) +{ + SYS->BODCTL &= ~SYS_BODCTL_BODEN_Msk; +} + + + +/*@}*/ /* end of group SYS_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group SYS_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +#ifdef __cplusplus +} +#endif + +/*** (C) COPYRIGHT 2014~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_sys.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_sys.h new file mode 100644 index 00000000000..28b4a2618e3 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_sys.h @@ -0,0 +1,970 @@ +/**************************************************************************//** + * @file SYS.h + * @version V3.0 + * $Revision 1 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 Series SYS Header File + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. + ******************************************************************************/ + +#ifndef __SYS_H__ +#define __SYS_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup SYS_Driver SYS Driver + @{ +*/ + +/** @addtogroup SYS_EXPORTED_CONSTANTS SYS Exported Constants + @{ +*/ + + +/*---------------------------------------------------------------------------------------------------------*/ +/* Module Reset Control Resister constant definitions. */ +/*---------------------------------------------------------------------------------------------------------*/ +#define PDMA_RST ((0x0<<24) | SYS_IPRST0_PDMARST_Pos ) /*!< Reset PDMA */ +#define EBI_RST ((0x0<<24) | SYS_IPRST0_EBIRST_Pos ) /*!< Reset EBI */ +#define USBH_RST ((0x0<<24) | SYS_IPRST0_USBHRST_Pos ) /*!< Reset USBH */ +#define CRC_RST ((0x0<<24) | SYS_IPRST0_CRCRST_Pos ) /*!< Reset CRC */ + +#define GPIO_RST ((0x4<<24) | SYS_IPRST1_GPIORST_Pos ) /*!< Reset GPIO */ +#define TMR0_RST ((0x4<<24) | SYS_IPRST1_TMR0RST_Pos ) /*!< Reset TMR0 */ +#define TMR1_RST ((0x4<<24) | SYS_IPRST1_TMR1RST_Pos ) /*!< Reset TMR1 */ +#define TMR2_RST ((0x4<<24) | SYS_IPRST1_TMR2RST_Pos ) /*!< Reset TMR2 */ +#define TMR3_RST ((0x4<<24) | SYS_IPRST1_TMR3RST_Pos ) /*!< Reset TMR3 */ +#define ACMP01_RST ((0x4<<24) | SYS_IPRST1_ACMP01RST_Pos ) /*!< Reset ACMP01 */ +#define I2C0_RST ((0x4<<24) | SYS_IPRST1_I2C0RST_Pos ) /*!< Reset I2C0 */ +#define I2C1_RST ((0x4<<24) | SYS_IPRST1_I2C1RST_Pos ) /*!< Reset I2C1 */ +#define SPI0_RST ((0x4<<24) | SYS_IPRST1_SPI0RST_Pos ) /*!< Reset SPI0 */ +#define SPI1_RST ((0x4<<24) | SYS_IPRST1_SPI1RST_Pos ) /*!< Reset SPI1 */ +#define SPI2_RST ((0x4<<24) | SYS_IPRST1_SPI2RST_Pos ) /*!< Reset SPI2 */ +#define UART0_RST ((0x4<<24) | SYS_IPRST1_UART0RST_Pos ) /*!< Reset UART0 */ +#define UART1_RST ((0x4<<24) | SYS_IPRST1_UART1RST_Pos ) /*!< Reset UART1 */ +#define UART2_RST ((0x4<<24) | SYS_IPRST1_UART2RST_Pos ) /*!< Reset UART2 */ +#define UART3_RST ((0x4<<24) | SYS_IPRST1_UART3RST_Pos ) /*!< Reset UART3 */ +#define CAN0_RST ((0x4<<24) | SYS_IPRST1_CAN0RST_Pos ) /*!< Reset CAN0 */ +#define OTG_RST ((0x4<<24) | SYS_IPRST1_OTGRST_Pos ) /*!< Reset OTG */ +#define USBD_RST ((0x4<<24) | SYS_IPRST1_USBDRST_Pos ) /*!< Reset USBD */ +#define EADC_RST ((0x4<<24) | SYS_IPRST1_EADCRST_Pos ) /*!< Reset EADC */ + +#define SC0_RST ((0x8<<24) | SYS_IPRST2_SC0RST_Pos ) /*!< Reset SC0 */ +#define DAC_RST ((0x8<<24) | SYS_IPRST2_DACRST_Pos ) /*!< Reset DAC */ +#define PWM0_RST ((0x8<<24) | SYS_IPRST2_PWM0RST_Pos ) /*!< Reset PWM0 */ +#define PWM1_RST ((0x8<<24) | SYS_IPRST2_PWM1RST_Pos ) /*!< Reset PWM1 */ +#define TK_RST ((0x8<<24) | SYS_IPRST2_TKRST_Pos ) /*!< Reset TK */ + + +/*---------------------------------------------------------------------------------------------------------*/ +/* Brown Out Detector Threshold Voltage Selection constant definitions. */ +/*---------------------------------------------------------------------------------------------------------*/ +#define SYS_BODCTL_BOD_RST_EN (1UL<GPA_MFPL = (SYS->GPA_MFPL & (~SYS_GPA_MFPL_PA0MFP_Msk) ) | SYS_GPA_MFPL_PA0_MFP_SC0_CLK ; + +*/ +//PA0 MFP +#define SYS_GPA_MFPL_PA0MFP_GPIO (0ul << SYS_GPA_MFPL_PA0MFP_Pos) /*!< GPA_MFPL PA0 setting for GPIO*/ +#define SYS_GPA_MFPL_PA0MFP_UART1_nCTS (1ul << SYS_GPA_MFPL_PA0MFP_Pos) /*!< GPA_MFPL PA0 setting for UART1_nCTS*/ +#define SYS_GPA_MFPL_PA0MFP_UART1_TXD (3ul << SYS_GPA_MFPL_PA0MFP_Pos) /*!< GPA_MFPL PA0 setting for UART1_TXD*/ +#define SYS_GPA_MFPL_PA0MFP_CAN0_RXD (4ul << SYS_GPA_MFPL_PA0MFP_Pos) /*!< GPA_MFPL PA0 setting for CAN0_RXD*/ +#define SYS_GPA_MFPL_PA0MFP_SC0_CLK (5ul << SYS_GPA_MFPL_PA0MFP_Pos) /*!< GPA_MFPL PA0 setting for SC0_CLK*/ +#define SYS_GPA_MFPL_PA0MFP_PWM1_CH5 (6ul << SYS_GPA_MFPL_PA0MFP_Pos) /*!< GPA_MFPL PA0 setting for PWM1_CH5*/ +#define SYS_GPA_MFPL_PA0MFP_EBI_AD0 (7ul << SYS_GPA_MFPL_PA0MFP_Pos) /*!< GPA_MFPL PA0 setting for EBI_AD0*/ +#define SYS_GPA_MFPL_PA0MFP_INT0 (8ul << SYS_GPA_MFPL_PA0MFP_Pos) /*!< GPA_MFPL PA0 setting for INT0*/ +#define SYS_GPA_MFPL_PA0MFP_SPI1_I2SMCLK (9ul << SYS_GPA_MFPL_PA0MFP_Pos) /*!< GPA_MFPL PA0 setting for SPI1_I2SMCLK*/ + +//PA1 MFP +#define SYS_GPA_MFPL_PA1MFP_GPIO (0ul << SYS_GPA_MFPL_PA1MFP_Pos) /*!< GPA_MFPL PA1 setting for GPIO*/ +#define SYS_GPA_MFPL_PA1MFP_UART1_nRTS (1ul << SYS_GPA_MFPL_PA1MFP_Pos) /*!< GPA_MFPL PA1 setting for UART1_nRTS*/ +#define SYS_GPA_MFPL_PA1MFP_UART1_RXD (3ul << SYS_GPA_MFPL_PA1MFP_Pos) /*!< GPA_MFPL PA1 setting for UART1_RXD*/ +#define SYS_GPA_MFPL_PA1MFP_CAN0_TXD (4ul << SYS_GPA_MFPL_PA1MFP_Pos) /*!< GPA_MFPL PA1 setting for CAN0_TXD*/ +#define SYS_GPA_MFPL_PA1MFP_SC0_DAT (5ul << SYS_GPA_MFPL_PA1MFP_Pos) /*!< GPA_MFPL PA1 setting for SC0_DAT*/ +#define SYS_GPA_MFPL_PA1MFP_PWM1_CH4 (6ul << SYS_GPA_MFPL_PA1MFP_Pos) /*!< GPA_MFPL PA1 setting for PWM1_CH4*/ +#define SYS_GPA_MFPL_PA1MFP_EBI_AD1 (7ul << SYS_GPA_MFPL_PA1MFP_Pos) /*!< GPA_MFPL PA1 setting for EBI_AD1*/ +#define SYS_GPA_MFPL_PA1MFP_STADC (10ul << SYS_GPA_MFPL_PA1MFP_Pos) /*!< GPA_MFPL PA1 setting for STADC*/ + +//PA2 MFP +#define SYS_GPA_MFPL_PA2MFP_GPIO (0ul << SYS_GPA_MFPL_PA2MFP_Pos) /*!< GPA_MFPL PA2 setting for GPIO*/ +#define SYS_GPA_MFPL_PA2MFP_USB_VBUS_EN (1ul << SYS_GPA_MFPL_PA2MFP_Pos) /*!< GPA_MFPL PA2 setting for USB_VBUS_EN*/ +#define SYS_GPA_MFPL_PA2MFP_UART0_TXD (2ul << SYS_GPA_MFPL_PA2MFP_Pos) /*!< GPA_MFPL PA2 setting for UART0_TXD*/ +#define SYS_GPA_MFPL_PA2MFP_UART0_nCTS (3ul << SYS_GPA_MFPL_PA2MFP_Pos) /*!< GPA_MFPL PA2 setting for UART0_nCTS*/ +#define SYS_GPA_MFPL_PA2MFP_I2C0_SDA (4ul << SYS_GPA_MFPL_PA2MFP_Pos) /*!< GPA_MFPL PA2 setting for I2C0_SDA*/ +#define SYS_GPA_MFPL_PA2MFP_SC0_RST (5ul << SYS_GPA_MFPL_PA2MFP_Pos) /*!< GPA_MFPL PA2 setting for SC0_RST*/ +#define SYS_GPA_MFPL_PA2MFP_PWM1_CH3 (6ul << SYS_GPA_MFPL_PA2MFP_Pos) /*!< GPA_MFPL PA2 setting for PWM1_CH3*/ +#define SYS_GPA_MFPL_PA2MFP_EBI_AD2 (7ul << SYS_GPA_MFPL_PA2MFP_Pos) /*!< GPA_MFPL PA2 setting for EBI_AD2*/ + +//PA3 MFP +#define SYS_GPA_MFPL_PA3MFP_GPIO (0ul << SYS_GPA_MFPL_PA3MFP_Pos) /*!< GPA_MFPL PA3 setting for GPIO*/ +#define SYS_GPA_MFPL_PA3MFP_USB_VBUS_ST (1ul << SYS_GPA_MFPL_PA3MFP_Pos) /*!< GPA_MFPL PA3 setting for USB_VBUS_ST*/ +#define SYS_GPA_MFPL_PA3MFP_UART0_RXD (2ul << SYS_GPA_MFPL_PA3MFP_Pos) /*!< GPA_MFPL PA3 setting for UART0_RXD*/ +#define SYS_GPA_MFPL_PA3MFP_UART0_nRTS (3ul << SYS_GPA_MFPL_PA3MFP_Pos) /*!< GPA_MFPL PA3 setting for UART0_nRTS*/ +#define SYS_GPA_MFPL_PA3MFP_I2C0_SCL (4ul << SYS_GPA_MFPL_PA3MFP_Pos) /*!< GPA_MFPL PA3 setting for I2C0_SCL*/ +#define SYS_GPA_MFPL_PA3MFP_SC0_PWR (5ul << SYS_GPA_MFPL_PA3MFP_Pos) /*!< GPA_MFPL PA3 setting for SC0_PWR*/ +#define SYS_GPA_MFPL_PA3MFP_PWM1_CH2 (6ul << SYS_GPA_MFPL_PA3MFP_Pos) /*!< GPA_MFPL PA3 setting for PWM1_CH2*/ +#define SYS_GPA_MFPL_PA3MFP_EBI_AD3 (7ul << SYS_GPA_MFPL_PA3MFP_Pos) /*!< GPA_MFPL PA3 setting for EBI_AD3*/ + +//PA4 MFP +#define SYS_GPA_MFPL_PA4MFP_GPIO (0ul << SYS_GPA_MFPL_PA4MFP_Pos) /*!< GPA_MFPL PA4 setting for GPIO*/ +#define SYS_GPA_MFPL_PA4MFP_SPI1_SS (2ul << SYS_GPA_MFPL_PA4MFP_Pos) /*!< GPA_MFPL PA4 setting for SPI1_SS*/ +#define SYS_GPA_MFPL_PA4MFP_EBI_AD4 (7ul << SYS_GPA_MFPL_PA4MFP_Pos) /*!< GPA_MFPL PA4 setting for EBI_AD4*/ + +//PA5 MFP +#define SYS_GPA_MFPL_PA5MFP_GPIO (0ul << SYS_GPA_MFPL_PA5MFP_Pos) /*!< GPA_MFPL PA5 setting for GPIO*/ +#define SYS_GPA_MFPL_PA5MFP_SPI1_MOSI (2ul << SYS_GPA_MFPL_PA5MFP_Pos) /*!< GPA_MFPL PA5 setting for SPI1_MOSI*/ +#define SYS_GPA_MFPL_PA5MFP_T2_EXT (3ul << SYS_GPA_MFPL_PA5MFP_Pos) /*!< GPA_MFPL PA5 setting for T2_EXT*/ +#define SYS_GPA_MFPL_PA5MFP_EBI_AD5 (7ul << SYS_GPA_MFPL_PA5MFP_Pos) /*!< GPA_MFPL PA5 setting for EBI_AD5*/ + +//PA6 MFP +#define SYS_GPA_MFPL_PA6MFP_GPIO (0ul << SYS_GPA_MFPL_PA6MFP_Pos) /*!< GPA_MFPL PA6 setting for GPIO*/ +#define SYS_GPA_MFPL_PA6MFP_SPI1_MISO (2ul << SYS_GPA_MFPL_PA6MFP_Pos) /*!< GPA_MFPL PA6 setting for SPI1_MISO*/ +#define SYS_GPA_MFPL_PA6MFP_T1_EXT (3ul << SYS_GPA_MFPL_PA6MFP_Pos) /*!< GPA_MFPL PA6 setting for T1_EXT*/ +#define SYS_GPA_MFPL_PA6MFP_EBI_AD6 (7ul << SYS_GPA_MFPL_PA6MFP_Pos) /*!< GPA_MFPL PA6 setting for EBI_AD6*/ + +//PA7 MFP +#define SYS_GPA_MFPL_PA7MFP_GPIO (0ul << SYS_GPA_MFPL_PA7MFP_Pos) /*!< GPA_MFPL PA7 setting for GPIO*/ +#define SYS_GPA_MFPL_PA7MFP_SPI1_CLK (2ul << SYS_GPA_MFPL_PA7MFP_Pos) /*!< GPA_MFPL PA7 setting for SPI1_CLK*/ +#define SYS_GPA_MFPL_PA7MFP_T0_EXT (3ul << SYS_GPA_MFPL_PA7MFP_Pos) /*!< GPA_MFPL PA7 setting for T0_EXT*/ +#define SYS_GPA_MFPL_PA7MFP_EBI_AD7 (7ul << SYS_GPA_MFPL_PA7MFP_Pos) /*!< GPA_MFPL PA7 setting for EBI_AD7*/ + +//PA8 MFP +#define SYS_GPA_MFPH_PA8MFP_GPIO (0ul << SYS_GPA_MFPH_PA8MFP_Pos) /*!< GPA_MFPH PA8 setting for GPIO*/ +#define SYS_GPA_MFPH_PA8MFP_UART3_TXD (3ul << SYS_GPA_MFPH_PA8MFP_Pos) /*!< GPA_MFPH PA8 setting for UART3_TXD*/ + +//PA9 MFP +#define SYS_GPA_MFPH_PA9MFP_GPIO (0ul << SYS_GPA_MFPH_PA9MFP_Pos) /*!< GPA_MFPH PA9 setting for GPIO*/ +#define SYS_GPA_MFPH_PA9MFP_UART3_RXD (3ul << SYS_GPA_MFPH_PA9MFP_Pos) /*!< GPA_MFPH PA9 setting for UART3_RXD*/ + +//PA10 MFP +#define SYS_GPA_MFPH_PA10MFP_GPIO (0ul << SYS_GPA_MFPH_PA10MFP_Pos) /*!< GPA_MFPH PA10 setting for GPIO*/ +#define SYS_GPA_MFPH_PA10MFP_UART3_nCTS (3ul << SYS_GPA_MFPH_PA10MFP_Pos) /*!< GPA_MFPH PA10 setting for UART3_nCTS*/ + +//PA11 MFP +#define SYS_GPA_MFPH_PA11MFP_GPIO (0ul << SYS_GPA_MFPH_PA11MFP_Pos) /*!< GPA_MFPH PA11 setting for GPIO*/ +#define SYS_GPA_MFPH_PA11MFP_UART3_nRTS (3ul << SYS_GPA_MFPH_PA11MFP_Pos) /*!< GPA_MFPH PA11 setting for UART3_nRTS*/ + +//PA12 MFP +#define SYS_GPA_MFPH_PA12MFP_GPIO (0ul << SYS_GPA_MFPH_PA12MFP_Pos) /*!< GPA_MFPH PA12 setting for GPIO*/ +#define SYS_GPA_MFPH_PA12MFP_SPI1_I2SMCLK (2ul << SYS_GPA_MFPH_PA12MFP_Pos) /*!< GPA_MFPH PA12 setting for SPI1_I2SMCLK*/ +#define SYS_GPA_MFPH_PA12MFP_CAN0_TXD (4ul << SYS_GPA_MFPH_PA12MFP_Pos) /*!< GPA_MFPH PA12 setting for CAN0_TXD*/ + +//PA13 MFP +#define SYS_GPA_MFPH_PA13MFP_GPIO (0ul << SYS_GPA_MFPH_PA13MFP_Pos) /*!< GPA_MFPH PA13 setting for GPIO*/ +#define SYS_GPA_MFPH_PA13MFP_CAN0_RXD (4ul << SYS_GPA_MFPH_PA13MFP_Pos) /*!< GPA_MFPH PA13 setting for CAN0_RXD*/ + +//PA14 MFP +#define SYS_GPA_MFPH_PA14MFP_GPIO (0ul << SYS_GPA_MFPH_PA14MFP_Pos) /*!< GPA_MFPH PA14 setting for GPIO*/ +#define SYS_GPA_MFPH_PA14MFP_UART2_nCTS (3ul << SYS_GPA_MFPH_PA14MFP_Pos) /*!< GPA_MFPH PA14 setting for UART2_nCTS*/ +#define SYS_GPA_MFPH_PA14MFP_I2C0_SMBAL (4ul << SYS_GPA_MFPH_PA14MFP_Pos) /*!< GPA_MFPH PA14 setting for I2C0_SMBAL*/ + +//PA15 MFP +#define SYS_GPA_MFPH_PA15MFP_GPIO (0ul << SYS_GPA_MFPH_PA15MFP_Pos) /*!< GPA_MFPH PA15 setting for GPIO*/ +#define SYS_GPA_MFPH_PA15MFP_UART2_nRTS (3ul << SYS_GPA_MFPH_PA15MFP_Pos) /*!< GPA_MFPH PA15 setting for UART2_nRTS*/ +#define SYS_GPA_MFPH_PA15MFP_I2C0_SMBSUS (4ul << SYS_GPA_MFPH_PA15MFP_Pos) /*!< GPA_MFPH PA15 setting for I2C0_SMBSUS*/ + +//PB0 MFP +#define SYS_GPB_MFPL_PB0MFP_GPIO (0ul << SYS_GPB_MFPL_PB0MFP_Pos) /*!< GPB_MFPL PB0 setting for GPIO*/ +#define SYS_GPB_MFPL_PB0MFP_EADC_CH0 (1ul << SYS_GPB_MFPL_PB0MFP_Pos) /*!< GPB_MFPL PB0 setting for EADC_CH0*/ +#define SYS_GPB_MFPL_PB0MFP_SPI0_MOSI1 (2ul << SYS_GPB_MFPL_PB0MFP_Pos) /*!< GPB_MFPL PB0 setting for SPI0_MOSI1*/ +#define SYS_GPB_MFPL_PB0MFP_UART2_RXD (3ul << SYS_GPB_MFPL_PB0MFP_Pos) /*!< GPB_MFPL PB0 setting for UART2_RXD*/ +#define SYS_GPB_MFPL_PB0MFP_T2 (4ul << SYS_GPB_MFPL_PB0MFP_Pos) /*!< GPB_MFPL PB0 setting for T2*/ +#define SYS_GPB_MFPL_PB0MFP_DAC (5ul << SYS_GPB_MFPL_PB0MFP_Pos) /*!< GPB_MFPL PB0 setting for DAC*/ +#define SYS_GPB_MFPL_PB0MFP_EBI_nWRL (7ul << SYS_GPB_MFPL_PB0MFP_Pos) /*!< GPB_MFPL PB0 setting for EBI_nWRL*/ +#define SYS_GPB_MFPL_PB0MFP_INT1 (8ul << SYS_GPB_MFPL_PB0MFP_Pos) /*!< GPB_MFPL PB0 setting for INT1*/ + +//PB1 MFP +#define SYS_GPB_MFPL_PB1MFP_GPIO (0ul << SYS_GPB_MFPL_PB1MFP_Pos) /*!< GPB_MFPL PB1 setting for GPIO*/ +#define SYS_GPB_MFPL_PB1MFP_EADC_CH1 (1ul << SYS_GPB_MFPL_PB1MFP_Pos) /*!< GPB_MFPL PB1 setting for EADC_CH1*/ +#define SYS_GPB_MFPL_PB1MFP_SPI0_MISO1 (2ul << SYS_GPB_MFPL_PB1MFP_Pos) /*!< GPB_MFPL PB1 setting for SPI0_MISO1*/ +#define SYS_GPB_MFPL_PB1MFP_UART2_TXD (3ul << SYS_GPB_MFPL_PB1MFP_Pos) /*!< GPB_MFPL PB1 setting for UART2_TXD*/ +#define SYS_GPB_MFPL_PB1MFP_T3 (4ul << SYS_GPB_MFPL_PB1MFP_Pos) /*!< GPB_MFPL PB1 setting for T3*/ +#define SYS_GPB_MFPL_PB1MFP_SC0_RST (5ul << SYS_GPB_MFPL_PB1MFP_Pos) /*!< GPB_MFPL PB1 setting for SC0_RST*/ +#define SYS_GPB_MFPL_PB1MFP_PWM0_SYNC_OUT (6ul << SYS_GPB_MFPL_PB1MFP_Pos) /*!< GPB_MFPL PB1 setting for PWM0_SYNC_OUT*/ +#define SYS_GPB_MFPL_PB1MFP_EBI_nWRH (7ul << SYS_GPB_MFPL_PB1MFP_Pos) /*!< GPB_MFPL PB1 setting for EBI_nWRH*/ + +//PB2 MFP +#define SYS_GPB_MFPL_PB2MFP_GPIO (0ul << SYS_GPB_MFPL_PB2MFP_Pos) /*!< GPB_MFPL PB2 setting for GPIO*/ +#define SYS_GPB_MFPL_PB2MFP_EADC_CH2 (1ul << SYS_GPB_MFPL_PB2MFP_Pos) /*!< GPB_MFPL PB2 setting for EADC_CH2*/ +#define SYS_GPB_MFPL_PB2MFP_SPI0_CLK (2ul << SYS_GPB_MFPL_PB2MFP_Pos) /*!< GPB_MFPL PB2 setting for SPI0_CLK*/ +#define SYS_GPB_MFPL_PB2MFP_SPI1_CLK (3ul << SYS_GPB_MFPL_PB2MFP_Pos) /*!< GPB_MFPL PB2 setting for SPI1_CLK*/ +#define SYS_GPB_MFPL_PB2MFP_UART1_RXD (4ul << SYS_GPB_MFPL_PB2MFP_Pos) /*!< GPB_MFPL PB2 setting for UART1_RXD*/ +#define SYS_GPB_MFPL_PB2MFP_SC0_CD (5ul << SYS_GPB_MFPL_PB2MFP_Pos) /*!< GPB_MFPL PB2 setting for SC0_CD*/ +#define SYS_GPB_MFPL_PB2MFP_UART3_RXD (9ul << SYS_GPB_MFPL_PB2MFP_Pos) /*!< GPB_MFPL PB2 setting for UART3_RXD*/ +#define SYS_GPB_MFPL_PB2MFP_T2_EXT (11ul << SYS_GPB_MFPL_PB2MFP_Pos) /*!< GPB_MFPL PB2 setting for T2_EXT*/ + +//PB3 +#define SYS_GPB_MFPL_PB3MFP_GPIO (0ul << SYS_GPB_MFPL_PB3MFP_Pos) /*!< GPB_MFPL PB3 setting for GPIO*/ +#define SYS_GPB_MFPL_PB3MFP_EADC_CH3 (1ul << SYS_GPB_MFPL_PB3MFP_Pos) /*!< GPB_MFPL PB3 setting for EADC_CH3*/ +#define SYS_GPB_MFPL_PB3MFP_SPI0_MISO0 (2ul << SYS_GPB_MFPL_PB3MFP_Pos) /*!< GPB_MFPL PB3 setting for SPI0_MISO0*/ +#define SYS_GPB_MFPL_PB3MFP_SPI1_MISO (3ul << SYS_GPB_MFPL_PB3MFP_Pos) /*!< GPB_MFPL PB3 setting for SPI1_MISO*/ +#define SYS_GPB_MFPL_PB3MFP_UART1_TXD (4ul << SYS_GPB_MFPL_PB3MFP_Pos) /*!< GPB_MFPL PB3 setting for UART1_TXD*/ +#define SYS_GPB_MFPL_PB3MFP_UART3_TXD (9ul << SYS_GPB_MFPL_PB3MFP_Pos) /*!< GPB_MFPL PB3 setting for UART3_TXD*/ +#define SYS_GPB_MFPL_PB3MFP_T0_EXT (11ul << SYS_GPB_MFPL_PB3MFP_Pos) /*!< GPB_MFPL PB3 setting for T0_EXT*/ + +//PB4 +#define SYS_GPB_MFPL_PB4MFP_GPIO (0ul << SYS_GPB_MFPL_PB4MFP_Pos) /*!< GPB_MFPL PB4 setting for GPIO*/ +#define SYS_GPB_MFPL_PB4MFP_EADC_CH4 (1ul << SYS_GPB_MFPL_PB4MFP_Pos) /*!< GPB_MFPL PB4 setting for EADC_CH4*/ +#define SYS_GPB_MFPL_PB4MFP_SPI0_SS (2ul << SYS_GPB_MFPL_PB4MFP_Pos) /*!< GPB_MFPL PB4 setting for SPI0_SS*/ +#define SYS_GPB_MFPL_PB4MFP_SPI1_SS (3ul << SYS_GPB_MFPL_PB4MFP_Pos) /*!< GPB_MFPL PB4 setting for SPI1_SS*/ +#define SYS_GPB_MFPL_PB4MFP_UART1_nCTS (4ul << SYS_GPB_MFPL_PB4MFP_Pos) /*!< GPB_MFPL PB4 setting for UART1_nCTS*/ +#define SYS_GPB_MFPL_PB4MFP_ACMP0_N (5ul << SYS_GPB_MFPL_PB4MFP_Pos) /*!< GPB_MFPL PB4 setting for ACMP0_N*/ +#define SYS_GPB_MFPL_PB4MFP_EBI_AD7 (7ul << SYS_GPB_MFPL_PB4MFP_Pos) /*!< GPB_MFPL PB4 setting for EBI_AD7*/ +#define SYS_GPB_MFPL_PB4MFP_UART2_TXD (9ul << SYS_GPB_MFPL_PB4MFP_Pos) /*!< GPB_MFPL PB4 setting for UART2_TXD*/ +#define SYS_GPB_MFPL_PB4MFP_T1_EXT (11ul << SYS_GPB_MFPL_PB4MFP_Pos) /*!< GPB_MFPL PB4 setting for T1_EXT*/ + +//PB5 +#define SYS_GPB_MFPL_PB5MFP_GPIO (0ul << SYS_GPB_MFPL_PB5MFP_Pos) /*!< GPB_MFPL PB5 setting for GPIO*/ +#define SYS_GPB_MFPL_PB5MFP_EADC_CH13 (1ul << SYS_GPB_MFPL_PB5MFP_Pos) /*!< GPB_MFPL PB5 setting for EADC_CH13*/ +#define SYS_GPB_MFPL_PB5MFP_SPI0_MOSI0 (2ul << SYS_GPB_MFPL_PB5MFP_Pos) /*!< GPB_MFPL PB5 setting for SPI0_MOSI0*/ +#define SYS_GPB_MFPL_PB5MFP_SPI1_MOSI (3ul << SYS_GPB_MFPL_PB5MFP_Pos) /*!< GPB_MFPL PB5 setting for SPI1_MOSI*/ +#define SYS_GPB_MFPL_PB5MFP_TK3 (4ul << SYS_GPB_MFPL_PB5MFP_Pos) /*!< GPB_MFPL PB5 setting for TK3*/ +#define SYS_GPB_MFPL_PB5MFP_ACMP0_P2 (5ul << SYS_GPB_MFPL_PB5MFP_Pos) /*!< GPB_MFPL PB5 setting for ACMP0_P2*/ +#define SYS_GPB_MFPL_PB5MFP_EBI_AD6 (7ul << SYS_GPB_MFPL_PB5MFP_Pos) /*!< GPB_MFPL PB5 setting for EBI_AD6*/ +#define SYS_GPB_MFPL_PB5MFP_UART2_RXD (9ul << SYS_GPB_MFPL_PB5MFP_Pos) /*!< GPB_MFPL PB5 setting for UART2_RXD*/ + +//PB6 +#define SYS_GPB_MFPL_PB6MFP_GPIO (0ul << SYS_GPB_MFPL_PB6MFP_Pos) /*!< GPB_MFPL PB6 setting for GPIO*/ +#define SYS_GPB_MFPL_PB6MFP_EADC_CH14 (1ul << SYS_GPB_MFPL_PB6MFP_Pos) /*!< GPB_MFPL PB6 setting for EADC_CH14*/ +#define SYS_GPB_MFPL_PB6MFP_SPI0_MISO0 (2ul << SYS_GPB_MFPL_PB6MFP_Pos) /*!< GPB_MFPL PB6 setting for SPI0_MISO0*/ +#define SYS_GPB_MFPL_PB6MFP_SPI1_MISO (3ul << SYS_GPB_MFPL_PB6MFP_Pos) /*!< GPB_MFPL PB6 setting for SPI1_MISO*/ +#define SYS_GPB_MFPL_PB6MFP_TK4 (4ul << SYS_GPB_MFPL_PB6MFP_Pos) /*!< GPB_MFPL PB6 setting for TK4*/ +#define SYS_GPB_MFPL_PB6MFP_ACMP0_P1 (5ul << SYS_GPB_MFPL_PB6MFP_Pos) /*!< GPB_MFPL PB6 setting for ACMP0_P1*/ +#define SYS_GPB_MFPL_PB6MFP_EBI_AD5 (7ul << SYS_GPB_MFPL_PB6MFP_Pos) /*!< GPB_MFPL PB6 setting for EBI_AD5*/ + +//PB7 +#define SYS_GPB_MFPL_PB7MFP_GPIO (0ul << SYS_GPB_MFPL_PB7MFP_Pos) /*!< GPB_MFPL PB7 setting for GPIO*/ +#define SYS_GPB_MFPL_PB7MFP_EADC_CH15 (1ul << SYS_GPB_MFPL_PB7MFP_Pos) /*!< GPB_MFPL PB7 setting for EADC_CH15*/ +#define SYS_GPB_MFPL_PB7MFP_SPI0_CLK (2ul << SYS_GPB_MFPL_PB7MFP_Pos) /*!< GPB_MFPL PB7 setting for SPI0_CLK*/ +#define SYS_GPB_MFPL_PB7MFP_SPI1_CLK (3ul << SYS_GPB_MFPL_PB7MFP_Pos) /*!< GPB_MFPL PB7 setting for SPI1_CLK*/ +#define SYS_GPB_MFPL_PB7MFP_TK5 (4ul << SYS_GPB_MFPL_PB7MFP_Pos) /*!< GPB_MFPL PB7 setting for TK5*/ +#define SYS_GPB_MFPL_PB7MFP_ACMP0_P0 (5ul << SYS_GPB_MFPL_PB7MFP_Pos) /*!< GPB_MFPL PB7 setting for ACMP0_P0*/ +#define SYS_GPB_MFPL_PB7MFP_EBI_AD4 (7ul << SYS_GPB_MFPL_PB7MFP_Pos) /*!< GPB_MFPL PB7 setting for EBI_AD4*/ +#define SYS_GPB_MFPL_PB7MFP_STADC (10ul << SYS_GPB_MFPL_PB7MFP_Pos) /*!< GPB_MFPL PB7 setting for STADC*/ + +//PB8 +#define SYS_GPB_MFPH_PB8MFP_GPIO (0ul << SYS_GPB_MFPH_PB8MFP_Pos) /*!< GPB_MFPH PB8 setting for GPIO*/ +#define SYS_GPB_MFPH_PB8MFP_EADC_CH5 (1ul << SYS_GPB_MFPH_PB8MFP_Pos) /*!< GPB_MFPH PB8 setting for EADC_CH5*/ +#define SYS_GPB_MFPH_PB8MFP_UART1_nRTS (4ul << SYS_GPB_MFPH_PB8MFP_Pos) /*!< GPB_MFPH PB8 setting for UART1_nRTS*/ +#define SYS_GPB_MFPH_PB8MFP_PWM0_CH2 (6ul << SYS_GPB_MFPH_PB8MFP_Pos) /*!< GPB_MFPH PB8 setting for PWM0_CH2*/ + +//PB9 +#define SYS_GPB_MFPH_PB9MFP_GPIO (0ul << SYS_GPB_MFPH_PB9MFP_Pos) /*!< GPB_MFPH PB9 setting for GPIO*/ +#define SYS_GPB_MFPH_PB9MFP_EADC_CH6 (1ul << SYS_GPB_MFPH_PB9MFP_Pos) /*!< GPB_MFPH PB9 setting for EADC_CH6*/ + +//PB10 +#define SYS_GPB_MFPH_PB10MFP_GPIO (0ul << SYS_GPB_MFPH_PB10MFP_Pos) /*!< GPB_MFPH_ PB10 setting for GPIO*/ +#define SYS_GPB_MFPH_PB10MFP_EADC_CH7 (1ul << SYS_GPB_MFPH_PB10MFP_Pos) /*!< GPB_MFPH_ PB10 setting for EADC_CH7*/ + +//PB11 +#define SYS_GPB_MFPH_PB11MFP_GPIO (0ul << SYS_GPB_MFPH_PB11MFP_Pos) /*!< GPB_MFPH_ PB11 setting for GPIO*/ +#define SYS_GPB_MFPH_PB11MFP_EADC_CH8 (1ul << SYS_GPB_MFPH_PB11MFP_Pos) /*!< GPB_MFPH_ PB11 setting for EADC_CH8*/ +#define SYS_GPB_MFPH_PB11MFP_TK0 (4ul << SYS_GPB_MFPH_PB11MFP_Pos) /*!< GPB_MFPH_ PB11 setting for TK0*/ + +//PB12 +#define SYS_GPB_MFPH_PB12MFP_GPIO (0ul << SYS_GPB_MFPH_PB12MFP_Pos) /*!< GPB_MFPH_ PB12 setting for GPIO*/ +#define SYS_GPB_MFPH_PB12MFP_EADC_CH9 (1ul << SYS_GPB_MFPH_PB12MFP_Pos) /*!< GPB_MFPH_ PB12 setting for EADC_CH9*/ +#define SYS_GPB_MFPH_PB12MFP_TK1 (4ul << SYS_GPB_MFPH_PB12MFP_Pos) /*!< GPB_MFPH_ PB12 setting for TK1*/ + +//PB13 +#define SYS_GPB_MFPH_PB13MFP_GPIO (0ul << SYS_GPB_MFPH_PB13MFP_Pos) /*!< GPB_MFPH PB13 setting for GPIO*/ +#define SYS_GPB_MFPH_PB13MFP_EADC_CH10 (1ul << SYS_GPB_MFPH_PB13MFP_Pos) /*!< GPB_MFPH PB13 setting for EADC_CH10*/ + +//PB14 +#define SYS_GPB_MFPH_PB14MFP_GPIO (0ul << SYS_GPB_MFPH_PB14MFP_Pos) /*!< GPB_MFPH PB14 setting for GPIO*/ +#define SYS_GPB_MFPH_PB14MFP_EADC_CH11 (1ul << SYS_GPB_MFPH_PB14MFP_Pos) /*!< GPB_MFPH PB14 setting for EADC_CH11*/ + +//PB15 +#define SYS_GPB_MFPH_PB15MFP_GPIO (0ul << SYS_GPB_MFPH_PB15MFP_Pos) /*!< GPB_MFPH PB15 setting for GPIO*/ +#define SYS_GPB_MFPH_PB15MFP_EADC_CH12 (1ul << SYS_GPB_MFPH_PB15MFP_Pos) /*!< GPB_MFPH PB15 setting for EADC_CH12*/ +#define SYS_GPB_MFPH_PB15MFP_TK2 (4ul << SYS_GPB_MFPH_PB15MFP_Pos) /*!< GPB_MFPH PB15 setting for TK2*/ +#define SYS_GPB_MFPH_PB15MFP_ACMP0_P3 (5ul << SYS_GPB_MFPH_PB15MFP_Pos) /*!< GPB_MFPH PB15 setting for ACMP0_P3*/ +#define SYS_GPB_MFPH_PB15MFP_EBI_nCS1 (7ul << SYS_GPB_MFPH_PB15MFP_Pos) /*!< GPB_MFPH PB15 setting for EBI_nCS1*/ + +//PC0 +#define SYS_GPC_MFPL_PC0MFP_GPIO (0ul << SYS_GPC_MFPL_PC0MFP_Pos) /*!< GPC_MFPL PC0 setting for GPIO*/ +#define SYS_GPC_MFPL_PC0MFP_SPI2_CLK (2ul << SYS_GPC_MFPL_PC0MFP_Pos) /*!< GPC_MFPL PC0 setting for SPI2_CLK*/ +#define SYS_GPC_MFPL_PC0MFP_UART2_nCTS (3ul << SYS_GPC_MFPL_PC0MFP_Pos) /*!< GPC_MFPL PC0 setting for UART2_nCTS*/ +#define SYS_GPC_MFPL_PC0MFP_CAN0_TXD (4ul << SYS_GPC_MFPL_PC0MFP_Pos) /*!< GPC_MFPL PC0 setting for CAN0_TXD*/ +#define SYS_GPC_MFPL_PC0MFP_PWM0_CH0 (6ul << SYS_GPC_MFPL_PC0MFP_Pos) /*!< GPC_MFPL PC0 setting for PWM0_CH0*/ +#define SYS_GPC_MFPL_PC0MFP_EBI_AD8 (7ul << SYS_GPC_MFPL_PC0MFP_Pos) /*!< GPC_MFPL PC0 setting for EBI_AD8*/ +#define SYS_GPC_MFPL_PC0MFP_INT2 (8ul << SYS_GPC_MFPL_PC0MFP_Pos) /*!< GPC_MFPL PC0 setting for INT2*/ +#define SYS_GPC_MFPL_PC0MFP_UART3_TXD (9ul << SYS_GPC_MFPL_PC0MFP_Pos) /*!< GPC_MFPL PC0 setting for UART3_TXD*/ +#define SYS_GPC_MFPL_PC0MFP_T3_EXT (11ul << SYS_GPC_MFPL_PC0MFP_Pos) /*!< GPC_MFPL PC0 setting for T3_EXT*/ + +//PC1 +#define SYS_GPC_MFPL_PC1MFP_GPIO (0ul << SYS_GPC_MFPL_PC1MFP_Pos) /*!< GPC_MFPL PC1 setting for GPIO*/ +#define SYS_GPC_MFPL_PC1MFP_CLKO (1ul << SYS_GPC_MFPL_PC1MFP_Pos) /*!< GPC_MFPL PC1 setting for CLKO*/ +#define SYS_GPC_MFPL_PC1MFP_STDAC (2ul << SYS_GPC_MFPL_PC1MFP_Pos) /*!< GPC_MFPL PC1 setting for STDAC*/ +#define SYS_GPC_MFPL_PC1MFP_UART2_nRTS (3ul << SYS_GPC_MFPL_PC1MFP_Pos) /*!< GPC_MFPL PC1 setting for UART2_nRTS*/ +#define SYS_GPC_MFPL_PC1MFP_CAN0_RXD (4ul << SYS_GPC_MFPL_PC1MFP_Pos) /*!< GPC_MFPL PC1 setting for CAN0_RXD*/ +#define SYS_GPC_MFPL_PC1MFP_PWM0_CH1 (6ul << SYS_GPC_MFPL_PC1MFP_Pos) /*!< GPC_MFPL PC1 setting for PWM0_CH1*/ +#define SYS_GPC_MFPL_PC1MFP_EBI_AD9 (7ul << SYS_GPC_MFPL_PC1MFP_Pos) /*!< GPC_MFPL PC1 setting for EBI_AD9*/ +#define SYS_GPC_MFPL_PC1MFP_UART3_RXD (9ul << SYS_GPC_MFPL_PC1MFP_Pos) /*!< GPC_MFPL PC1 setting for UART3_RXD*/ + +//PC2 +#define SYS_GPC_MFPL_PC2MFP_GPIO (0ul << SYS_GPC_MFPL_PC2MFP_Pos) /*!< GPC_MFPL PC2 setting for GPIO*/ +#define SYS_GPC_MFPL_PC2MFP_SPI2_SS (2ul << SYS_GPC_MFPL_PC2MFP_Pos) /*!< GPC_MFPL PC2 setting for SPI2_SS*/ +#define SYS_GPC_MFPL_PC2MFP_UART2_TXD (3ul << SYS_GPC_MFPL_PC2MFP_Pos) /*!< GPC_MFPL PC2 setting for UART2_TXD*/ +#define SYS_GPC_MFPL_PC2MFP_ACMP1_O (5ul << SYS_GPC_MFPL_PC2MFP_Pos) /*!< GPC_MFPL PC2 setting for ACMP1_O*/ +#define SYS_GPC_MFPL_PC2MFP_PWM0_CH2 (6ul << SYS_GPC_MFPL_PC2MFP_Pos) /*!< GPC_MFPL PC2 setting for PWM0_CH2*/ +#define SYS_GPC_MFPL_PC2MFP_EBI_AD10 (7ul << SYS_GPC_MFPL_PC2MFP_Pos) /*!< GPC_MFPL PC2 setting for EBI_AD10*/ + +//PC3 +#define SYS_GPC_MFPL_PC3MFP_GPIO (0ul << SYS_GPC_MFPL_PC3MFP_Pos) /*!< GPC_MFPL PC3 setting for GPIO*/ +#define SYS_GPC_MFPL_PC3MFP_SPI2_MOSI (2ul << SYS_GPC_MFPL_PC3MFP_Pos) /*!< GPC_MFPL PC3 setting for SPI2_MOSI*/ +#define SYS_GPC_MFPL_PC3MFP_UART2_RXD (3ul << SYS_GPC_MFPL_PC3MFP_Pos) /*!< GPC_MFPL PC3 setting for UART2_RXD*/ +#define SYS_GPC_MFPL_PC3MFP_USB_VBUS_ST (4ul << SYS_GPC_MFPL_PC3MFP_Pos) /*!< GPC_MFPL PC3 setting for USB_VBUS_ST*/ +#define SYS_GPC_MFPL_PC3MFP_PWM0_CH3 (6ul << SYS_GPC_MFPL_PC3MFP_Pos) /*!< GPC_MFPL PC3 setting for PWM0_CH3*/ +#define SYS_GPC_MFPL_PC3MFP_EBI_AD11 (7ul << SYS_GPC_MFPL_PC3MFP_Pos) /*!< GPC_MFPL PC3 setting for EBI_AD11*/ + +//PC4 +#define SYS_GPC_MFPL_PC4MFP_GPIO (0ul << SYS_GPC_MFPL_PC4MFP_Pos) /*!< GPC_MFPL PC4 setting for GPIO*/ +#define SYS_GPC_MFPL_PC4MFP_SPI2_MISO (2ul << SYS_GPC_MFPL_PC4MFP_Pos) /*!< GPC_MFPL PC4 setting for SPI2_MISO*/ +#define SYS_GPC_MFPL_PC4MFP_I2C1_SCL (3ul << SYS_GPC_MFPL_PC4MFP_Pos) /*!< GPC_MFPL PC4 setting for I2C1_SCL*/ +#define SYS_GPC_MFPL_PC4MFP_USB_VBUS_EN (4ul << SYS_GPC_MFPL_PC4MFP_Pos) /*!< GPC_MFPL PC4 setting for USB_VBUS_EN*/ +#define SYS_GPC_MFPL_PC4MFP_PWM0_CH4 (6ul << SYS_GPC_MFPL_PC4MFP_Pos) /*!< GPC_MFPL PC4 setting for PWM0_CH4*/ +#define SYS_GPC_MFPL_PC4MFP_EBI_AD12 (7ul << SYS_GPC_MFPL_PC4MFP_Pos) /*!< GPC_MFPL PC4 setting for EBI_AD12*/ + +//PC5 +#define SYS_GPC_MFPL_PC5MFP_GPIO (0ul << SYS_GPC_MFPL_PC5MFP_Pos) /*!< GPC_MFPL PC5 setting for GPIO*/ +#define SYS_GPC_MFPL_PC5MFP_SPI2_I2SMCLK (2ul << SYS_GPC_MFPL_PC5MFP_Pos) /*!< GPC_MFPL PC5 setting for SPI2_I2SMCLK*/ +#define SYS_GPC_MFPL_PC5MFP_PWM0_CH5 (6ul << SYS_GPC_MFPL_PC5MFP_Pos) /*!< GPC_MFPL PC5 setting for PWM0_CH5*/ +#define SYS_GPC_MFPL_PC5MFP_EBI_AD13 (7ul << SYS_GPC_MFPL_PC5MFP_Pos) /*!< GPC_MFPL PC5 setting for EBI_AD13*/ + +//PC6 +#define SYS_GPC_MFPL_PC6MFP_GPIO (0ul << SYS_GPC_MFPL_PC6MFP_Pos) /*!< GPC_MFPL PC6 setting for GPIO*/ +#define SYS_GPC_MFPL_PC6MFP_I2C1_SMBAL (3ul << SYS_GPC_MFPL_PC6MFP_Pos) /*!< GPC_MFPL PC6 setting for I2C1_SMBAL*/ +#define SYS_GPC_MFPL_PC6MFP_ACMP1_O (5ul << SYS_GPC_MFPL_PC6MFP_Pos) /*!< GPC_MFPL PC6 setting for ACMP1_O*/ +#define SYS_GPC_MFPL_PC6MFP_PWM1_CH0 (6ul << SYS_GPC_MFPL_PC6MFP_Pos) /*!< GPC_MFPL PC6 setting for PWM1_CH0*/ +#define SYS_GPC_MFPL_PC6MFP_EBI_AD14 (7ul << SYS_GPC_MFPL_PC6MFP_Pos) /*!< GPC_MFPL PC6 setting for EBI_AD14*/ +#define SYS_GPC_MFPL_PC6MFP_UART0_TXD (9ul << SYS_GPC_MFPL_PC6MFP_Pos) /*!< GPC_MFPL PC6 setting for UART0_TXD*/ + +//PC7 +#define SYS_GPC_MFPL_PC7MFP_GPIO (0ul << SYS_GPC_MFPL_PC7MFP_Pos) /*!< GPC_MFPL PC7 setting for GPIO*/ +#define SYS_GPC_MFPL_PC7MFP_I2C1_SMBSUS (3ul << SYS_GPC_MFPL_PC7MFP_Pos) /*!< GPC_MFPL PC7 setting for I2C1_SMBSUS*/ +#define SYS_GPC_MFPL_PC7MFP_PWM1_CH1 (6ul << SYS_GPC_MFPL_PC7MFP_Pos) /*!< GPC_MFPL PC7 setting for PWM1_CH1*/ +#define SYS_GPC_MFPL_PC7MFP_EBI_AD15 (7ul << SYS_GPC_MFPL_PC7MFP_Pos) /*!< GPC_MFPL PC7 setting for EBI_AD15*/ +#define SYS_GPC_MFPL_PC7MFP_UART0_RXD (9ul << SYS_GPC_MFPL_PC7MFP_Pos) /*!< GPC_MFPL PC7 setting for UART0_RXD*/ + +//PC8 +#define SYS_GPC_MFPH_PC8MFP_GPIO (0ul << SYS_GPC_MFPH_PC8MFP_Pos) /*!< GPC_MFPH_ PC8 setting for GPIO*/ +#define SYS_GPC_MFPH_PC8MFP_TK7 (4ul << SYS_GPC_MFPH_PC8MFP_Pos) /*!< GPC_MFPH_ PC8 setting for TK7*/ + +//PC9 +#define SYS_GPC_MFPH_PC9MFP_GPIO (0ul << SYS_GPC_MFPH_PC9MFP_Pos) /*!< GPC_MFPH PC9 setting for GPIO*/ +#define SYS_GPC_MFPH_PC9MFP_SPI2_I2SMCLK (2ul << SYS_GPC_MFPH_PC9MFP_Pos) /*!< GPC_MFPH PC9 setting for SPI2_I2SMCLK*/ +#define SYS_GPC_MFPH_PC9MFP_PWM1_CH0 (6ul << SYS_GPC_MFPH_PC9MFP_Pos) /*!< GPC_MFPH PC9 setting for PWM1_CH0*/ + +//PC10 +#define SYS_GPC_MFPH_PC10MFP_GPIO (0ul << SYS_GPC_MFPH_PC10MFP_Pos) /*!< GPC_MFPH PC10 setting for GPIO*/ +#define SYS_GPC_MFPH_PC10MFP_SPI2_MOSI (2ul << SYS_GPC_MFPH_PC10MFP_Pos) /*!< GPC_MFPH PC10 setting for SPI2_MOSI*/ +#define SYS_GPC_MFPH_PC10MFP_PWM1_CH1 (6ul << SYS_GPC_MFPH_PC10MFP_Pos) /*!< GPC_MFPH PC10 setting for PWM1_CH1*/ + +//PC11 +#define SYS_GPC_MFPH_PC11MFP_GPIO (0ul << SYS_GPC_MFPH_PC11MFP_Pos) /*!< GPC_MFPH PC11 setting for GPIO*/ +#define SYS_GPC_MFPH_PC11MFP_SPI2_MISO (2ul << SYS_GPC_MFPH_PC11MFP_Pos) /*!< GPC_MFPH PC11 setting for SPI2_MISO*/ +#define SYS_GPC_MFPH_PC11MFP_PWM1_CH2 (6ul << SYS_GPC_MFPH_PC11MFP_Pos) /*!< GPC_MFPH PC11 setting for PWM1_CH2*/ + +//PC12 +#define SYS_GPC_MFPH_PC12MFP_GPIO (0ul << SYS_GPC_MFPH_PC12MFP_Pos) /*!< GPC_MFPH PC12 setting for GPIO*/ +#define SYS_GPC_MFPH_PC12MFP_SPI2_CLK (2ul << SYS_GPC_MFPH_PC12MFP_Pos) /*!< GPC_MFPH PC12 setting for SPI2_CLK*/ +#define SYS_GPC_MFPH_PC12MFP_PWM1_CH3 (6ul << SYS_GPC_MFPH_PC12MFP_Pos) /*!< GPC_MFPH PC12 setting for PWM1_CH3*/ + +//PC13 +#define SYS_GPC_MFPH_PC13MFP_GPIO (0ul << SYS_GPC_MFPH_PC13MFP_Pos) /*!< GPC_MFPH PC13 setting for GPIO*/ +#define SYS_GPC_MFPH_PC13MFP_SPI2_SS (2ul << SYS_GPC_MFPH_PC13MFP_Pos) /*!< GPC_MFPH PC13 setting for SPI2_SS*/ +#define SYS_GPC_MFPH_PC13MFP_PWM1_CH4 (6ul << SYS_GPC_MFPH_PC13MFP_Pos) /*!< GPC_MFPH PC13 setting for PWM1_CH4*/ + +//PC14 +#define SYS_GPC_MFPH_PC14MFP_GPIO (0ul << SYS_GPC_MFPH_PC14MFP_Pos) /*!< GPC_MFPH PC14 setting for GPIO*/ +#define SYS_GPC_MFPH_PC14MFP_PWM1_CH5 (6ul << SYS_GPC_MFPH_PC14MFP_Pos) /*!< GPC_MFPH PC14 setting for PWM1_CH5*/ + +//PC15 +#define SYS_GPC_MFPH_PC15MFP_GPIO (0ul << SYS_GPC_MFPH_PC15MFP_Pos) /*!< GPC_MFPH PC15 setting for GPIO*/ +#define SYS_GPC_MFPH_PC15MFP_PWM1_CH0 (6ul << SYS_GPC_MFPH_PC15MFP_Pos) /*!< GPC_MFPH PC15 setting for PWM1_CH0*/ + +//PD0 +#define SYS_GPD_MFPL_PD0MFP_GPIO (0ul << SYS_GPD_MFPL_PD0MFP_Pos) /*!< GPD_MFPL PD0 setting for GPIO*/ +#define SYS_GPD_MFPL_PD0MFP_EADC_CH6 (1ul << SYS_GPD_MFPL_PD0MFP_Pos) /*!< GPD_MFPL PD0 setting for EADC_CH6*/ +#define SYS_GPD_MFPL_PD0MFP_SPI1_I2SMCLK (2ul << SYS_GPD_MFPL_PD0MFP_Pos) /*!< GPD_MFPL PD0 setting for SPI1_I2SMCLK*/ +#define SYS_GPD_MFPL_PD0MFP_UART0_RXD (3ul << SYS_GPD_MFPL_PD0MFP_Pos) /*!< GPD_MFPL PD0 setting for UART0_RXD*/ +#define SYS_GPD_MFPL_PD0MFP_TK6 (4ul << SYS_GPD_MFPL_PD0MFP_Pos) /*!< GPD_MFPL PD0 setting for TK6*/ +#define SYS_GPD_MFPL_PD0MFP_ACMP1_N (5ul << SYS_GPD_MFPL_PD0MFP_Pos) /*!< GPD_MFPL PD0 setting for ACMP1_N*/ +#define SYS_GPD_MFPL_PD0MFP_INT3 (8ul << SYS_GPD_MFPL_PD0MFP_Pos) /*!< GPD_MFPL PD0 setting for INT3*/ +#define SYS_GPD_MFPL_PD0MFP_T3 (11ul << SYS_GPD_MFPL_PD0MFP_Pos) /*!< GPD_MFPL PD0 setting for T3*/ + +//PD1 +#define SYS_GPD_MFPL_PD1MFP_GPIO (0ul << SYS_GPD_MFPL_PD1MFP_Pos) /*!< GPD_MFPL PD1 setting for GPIO*/ +#define SYS_GPD_MFPL_PD1MFP_EADC_CH11 (1ul << SYS_GPD_MFPL_PD1MFP_Pos) /*!< GPD_MFPL PD1 setting for EADC_CH11*/ +#define SYS_GPD_MFPL_PD1MFP_PWM0_SYNC_IN (2ul << SYS_GPD_MFPL_PD1MFP_Pos) /*!< GPD_MFPL PD1 setting for PWM0_SYNC_IN*/ +#define SYS_GPD_MFPL_PD1MFP_UART0_TXD (3ul << SYS_GPD_MFPL_PD1MFP_Pos) /*!< GPD_MFPL PD1 setting for UART0_TXD*/ +#define SYS_GPD_MFPL_PD1MFP_TK10 (4ul << SYS_GPD_MFPL_PD1MFP_Pos) /*!< GPD_MFPL PD1 setting for TK10*/ +#define SYS_GPD_MFPL_PD1MFP_ACMP1_P2 (5ul << SYS_GPD_MFPL_PD1MFP_Pos) /*!< GPD_MFPL PD1 setting for ACMP1_P2*/ +#define SYS_GPD_MFPL_PD1MFP_T0 (6ul << SYS_GPD_MFPL_PD1MFP_Pos) /*!< GPD_MFPL PD1 setting for T0*/ +#define SYS_GPD_MFPL_PD1MFP_EBI_nRD (7ul << SYS_GPD_MFPL_PD1MFP_Pos) /*!< GPD_MFPL PD1 setting for EBI_nRD*/ + +//PD2 +#define SYS_GPD_MFPL_PD2MFP_GPIO (0ul << SYS_GPD_MFPL_PD2MFP_Pos) /*!< GPD_MFPL PD2 setting for GPIO*/ +#define SYS_GPD_MFPL_PD2MFP_STADC (1ul << SYS_GPD_MFPL_PD2MFP_Pos) /*!< GPD_MFPL PD2 setting for STADC*/ +#define SYS_GPD_MFPL_PD2MFP_T0_EXT (3ul << SYS_GPD_MFPL_PD2MFP_Pos) /*!< GPD_MFPL PD2 setting for T0_EXT*/ +#define SYS_GPD_MFPL_PD2MFP_TK11 (4ul << SYS_GPD_MFPL_PD2MFP_Pos) /*!< GPD_MFPL PD2 setting for TK11*/ +#define SYS_GPD_MFPL_PD2MFP_ACMP1_P1 (5ul << SYS_GPD_MFPL_PD2MFP_Pos) /*!< GPD_MFPL PD2 setting for ACMP1_P1*/ +#define SYS_GPD_MFPL_PD2MFP_PWM0_BRAKE0 (6ul << SYS_GPD_MFPL_PD2MFP_Pos) /*!< GPD_MFPL PD2 setting for PWM0_BRAKE0*/ +#define SYS_GPD_MFPL_PD2MFP_EBI_nWR (7ul << SYS_GPD_MFPL_PD2MFP_Pos) /*!< GPD_MFPL PD2 setting for EBI_nWR*/ +#define SYS_GPD_MFPL_PD2MFP_INT0 (8ul << SYS_GPD_MFPL_PD2MFP_Pos) /*!< GPD_MFPL PD2 setting for INT0*/ + +//PD3 +#define SYS_GPD_MFPL_PD3MFP_GPIO (0ul << SYS_GPD_MFPL_PD3MFP_Pos) /*!< GPD_MFPL PD3 setting for GPIO*/ +#define SYS_GPD_MFPL_PD3MFP_T2 (1ul << SYS_GPD_MFPL_PD3MFP_Pos) /*!< GPD_MFPL PD3 setting for T2*/ +#define SYS_GPD_MFPL_PD3MFP_T1_EXT (3ul << SYS_GPD_MFPL_PD3MFP_Pos) /*!< GPD_MFPL PD3 setting for T1_EXT*/ +#define SYS_GPD_MFPL_PD3MFP_TK12 (4ul << SYS_GPD_MFPL_PD3MFP_Pos) /*!< GPD_MFPL PD3 setting for TK12*/ +#define SYS_GPD_MFPL_PD3MFP_ACMP1_P0 (5ul << SYS_GPD_MFPL_PD3MFP_Pos) /*!< GPD_MFPL PD3 setting for ACMP1_P0*/ +#define SYS_GPD_MFPL_PD3MFP_PWM0_BRAKE1 (6ul << SYS_GPD_MFPL_PD3MFP_Pos) /*!< GPD_MFPL PD3 setting for PWM0_BRAKE1*/ +#define SYS_GPD_MFPL_PD3MFP_EBI_MCLK (7ul << SYS_GPD_MFPL_PD3MFP_Pos) /*!< GPD_MFPL PD3 setting for EBI_MCLK*/ +#define SYS_GPD_MFPL_PD3MFP_INT1 (8ul << SYS_GPD_MFPL_PD3MFP_Pos) /*!< GPD_MFPL PD3 setting for INT1*/ + +//PD4 +#define SYS_GPD_MFPL_PD4MFP_GPIO (0ul << SYS_GPD_MFPL_PD4MFP_Pos) /*!< GPD_MFPL PD4 setting for GPIO*/ +#define SYS_GPD_MFPL_PD4MFP_SPI1_CLK (2ul << SYS_GPD_MFPL_PD4MFP_Pos) /*!< GPD_MFPL PD4 setting for SPI1_CLK*/ +#define SYS_GPD_MFPL_PD4MFP_I2C0_SDA (3ul << SYS_GPD_MFPL_PD4MFP_Pos) /*!< GPD_MFPL PD4 setting for I2C0_SDA*/ +#define SYS_GPD_MFPL_PD4MFP_TK13 (4ul << SYS_GPD_MFPL_PD4MFP_Pos) /*!< GPD_MFPL PD4 setting for TK13*/ +#define SYS_GPD_MFPL_PD4MFP_PWM0_BRAKE0 (5ul << SYS_GPD_MFPL_PD4MFP_Pos) /*!< GPD_MFPL PD4 setting for PWM0_BRAKE0*/ +#define SYS_GPD_MFPL_PD4MFP_T0 (6ul << SYS_GPD_MFPL_PD4MFP_Pos) /*!< GPD_MFPL PD4 setting for T0*/ + +//PD5 +#define SYS_GPD_MFPL_PD5MFP_GPIO (0ul << SYS_GPD_MFPL_PD5MFP_Pos) /*!< GPD_MFPL PD5 setting for GPIO*/ +#define SYS_GPD_MFPL_PD5MFP_CLKO (1ul << SYS_GPD_MFPL_PD5MFP_Pos) /*!< GPD_MFPL PD5 setting for CLKO*/ +#define SYS_GPD_MFPL_PD5MFP_SPI1_MISO (2ul << SYS_GPD_MFPL_PD5MFP_Pos) /*!< GPD_MFPL PD5 setting for SPI1_MISO*/ +#define SYS_GPD_MFPL_PD5MFP_I2C0_SCL (3ul << SYS_GPD_MFPL_PD5MFP_Pos) /*!< GPD_MFPL PD5 setting for I2C0_SCL*/ +#define SYS_GPD_MFPL_PD5MFP_TK14 (4ul << SYS_GPD_MFPL_PD5MFP_Pos) /*!< GPD_MFPL PD5 setting for TK14*/ +#define SYS_GPD_MFPL_PD5MFP_PWM0_BRAKE1 (5ul << SYS_GPD_MFPL_PD5MFP_Pos) /*!< GPD_MFPL PD5 setting for PWM0_BRAKE1*/ +#define SYS_GPD_MFPL_PD5MFP_T1 (6ul << SYS_GPD_MFPL_PD5MFP_Pos) /*!< GPD_MFPL PD5 setting for T1*/ + +//PD6 +#define SYS_GPD_MFPL_PD6MFP_GPIO (0ul << SYS_GPD_MFPL_PD6MFP_Pos) /*!< GPD_MFPL PD6 setting for GPIO*/ +#define SYS_GPD_MFPL_PD6MFP_CLKO (1ul << SYS_GPD_MFPL_PD6MFP_Pos) /*!< GPD_MFPL PD6 setting for CLKO*/ +#define SYS_GPD_MFPL_PD6MFP_SPI1_SS (2ul << SYS_GPD_MFPL_PD6MFP_Pos) /*!< GPD_MFPL PD6 setting for SPI1_SS*/ +#define SYS_GPD_MFPL_PD6MFP_UART0_RXD (3ul << SYS_GPD_MFPL_PD6MFP_Pos) /*!< GPD_MFPL PD6 setting for UART0_RXD*/ +#define SYS_GPD_MFPL_PD6MFP_TK16 (4ul << SYS_GPD_MFPL_PD6MFP_Pos) /*!< GPD_MFPL PD6 setting for TK16*/ +#define SYS_GPD_MFPL_PD6MFP_ACMP0_O (5ul << SYS_GPD_MFPL_PD6MFP_Pos) /*!< GPD_MFPL PD6 setting for ACMP0_O*/ +#define SYS_GPD_MFPL_PD6MFP_PWM0_CH5 (6ul << SYS_GPD_MFPL_PD6MFP_Pos) /*!< GPD_MFPL PD6 setting for PWM0_CH5*/ +#define SYS_GPD_MFPL_PD6MFP_EBI_nWR (7ul << SYS_GPD_MFPL_PD6MFP_Pos) /*!< GPD_MFPL PD6 setting for EBI_nWR*/ + +//PD7 +#define SYS_GPD_MFPL_PD7MFP_GPIO (0ul << SYS_GPD_MFPL_PD7MFP_Pos) /*!< GPD_MFPL PD7 setting for GPIO*/ +#define SYS_GPD_MFPL_PD7MFP_PWM0_SYNC_IN (3ul << SYS_GPD_MFPL_PD7MFP_Pos) /*!< GPD_MFPL PD7 setting for PWM0_SYNC_IN*/ +#define SYS_GPD_MFPL_PD7MFP_T1 (4ul << SYS_GPD_MFPL_PD7MFP_Pos) /*!< GPD_MFPL PD7 setting for T1*/ +#define SYS_GPD_MFPL_PD7MFP_ACMP0_O (5ul << SYS_GPD_MFPL_PD7MFP_Pos) /*!< GPD_MFPL PD7 setting for ACMP0_O*/ +#define SYS_GPD_MFPL_PD7MFP_PWM0_CH5 (6ul << SYS_GPD_MFPL_PD7MFP_Pos) /*!< GPD_MFPL PD7 setting for PWM0_CH5*/ +#define SYS_GPD_MFPL_PD7MFP_EBI_nRD (7ul << SYS_GPD_MFPL_PD7MFP_Pos) /*!< GPD_MFPL PD7 setting for EBI_nRD*/ + +//PD8 +#define SYS_GPD_MFPH_PD8MFP_GPIO (0ul << SYS_GPD_MFPH_PD8MFP_Pos) /*!< GPD_MFPH PD8 setting for GPIO*/ +#define SYS_GPD_MFPH_PD8MFP_EADC_CH7 (1ul << SYS_GPD_MFPH_PD8MFP_Pos) /*!< GPD_MFPH PD8 setting for EADC_CH7*/ +#define SYS_GPD_MFPH_PD8MFP_TK8 (4ul << SYS_GPD_MFPH_PD8MFP_Pos) /*!< GPD_MFPH PD8 setting for TK8*/ +#define SYS_GPD_MFPH_PD8MFP_EBI_nCS0 (7ul << SYS_GPD_MFPH_PD8MFP_Pos) /*!< GPD_MFPH PD8 setting for EBI_nCS0*/ + +//PD9 +#define SYS_GPD_MFPH_PD9MFP_GPIO (0ul << SYS_GPD_MFPH_PD9MFP_Pos) /*!< GPD_MFPH PD9 setting for GPIO*/ +#define SYS_GPD_MFPH_PD9MFP_EADC_CH10 (1ul << SYS_GPD_MFPH_PD9MFP_Pos) /*!< GPD_MFPH PD9 setting for EADC_CH10*/ +#define SYS_GPD_MFPH_PD9MFP_TK9 (4ul << SYS_GPD_MFPH_PD9MFP_Pos) /*!< GPD_MFPH PD9 setting for TK9*/ +#define SYS_GPD_MFPH_PD9MFP_ACMP1_P3 (5ul << SYS_GPD_MFPH_PD9MFP_Pos) /*!< GPD_MFPH PD9 setting for ACMP1_P3*/ +#define SYS_GPD_MFPH_PD9MFP_EBI_ALE (7ul << SYS_GPD_MFPH_PD9MFP_Pos) /*!< GPD_MFPH PD9 setting for EBI_ALE*/ + +//PD10 +#define SYS_GPD_MFPH_PD10MFP_GPIO (0ul << SYS_GPD_MFPH_PD10MFP_Pos) /*!< GPD_MFPH PD10 setting for GPIO*/ +#define SYS_GPD_MFPH_PD10MFP_T2 (4ul << SYS_GPD_MFPH_PD10MFP_Pos) /*!< GPD_MFPH PD10 setting for T2*/ + +//PD11 +#define SYS_GPD_MFPH_PD11MFP_GPIO (0ul << SYS_GPD_MFPH_PD11MFP_Pos) /*!< GPD_MFPH PD11 setting for GPIO*/ +#define SYS_GPD_MFPH_PD11MFP_T3 (4ul << SYS_GPD_MFPH_PD11MFP_Pos) /*!< GPD_MFPH PD11 setting for T3*/ + +//PD12 +#define SYS_GPD_MFPH_PD12MFP_GPIO (0ul << SYS_GPD_MFPH_PD12MFP_Pos) /*!< GPD_MFPH PD12 setting for GPIO*/ +#define SYS_GPD_MFPH_PD12MFP_SPI2_SS (2ul << SYS_GPD_MFPH_PD12MFP_Pos) /*!< GPD_MFPH PD12 setting for SPI2_SS*/ +#define SYS_GPD_MFPH_PD12MFP_UART3_TXD (3ul << SYS_GPD_MFPH_PD12MFP_Pos) /*!< GPD_MFPH PD12 setting for UART3_TXD*/ +#define SYS_GPD_MFPH_PD12MFP_PWM1_CH0 (6ul << SYS_GPD_MFPH_PD12MFP_Pos) /*!< GPD_MFPH PD12 setting for PWM1_CH0*/ +#define SYS_GPD_MFPH_PD12MFP_EBI_ADR16 (7ul << SYS_GPD_MFPH_PD12MFP_Pos) /*!< GPD_MFPH PD12 setting for EBI_ADR16*/ + +//PD13 +#define SYS_GPD_MFPH_PD13MFP_GPIO (0ul << SYS_GPD_MFPH_PD13MFP_Pos) /*!< GPD_MFPH PD13 setting for GPIO*/ +#define SYS_GPD_MFPH_PD13MFP_SPI2_MOSI (2ul << SYS_GPD_MFPH_PD13MFP_Pos) /*!< GPD_MFPH PD13 setting for SPI2_MOSI*/ +#define SYS_GPD_MFPH_PD13MFP_UART3_RXD (3ul << SYS_GPD_MFPH_PD13MFP_Pos) /*!< GPD_MFPH PD13 setting for UART3_RXD*/ +#define SYS_GPD_MFPH_PD13MFP_PWM1_CH1 (6ul << SYS_GPD_MFPH_PD13MFP_Pos) /*!< GPD_MFPH PD13 setting for PWM1_CH1*/ +#define SYS_GPD_MFPH_PD13MFP_EBI_ADR17 (7ul << SYS_GPD_MFPH_PD13MFP_Pos) /*!< GPD_MFPH PD13 setting for EBI_ADR17*/ + +//PD14 +#define SYS_GPD_MFPH_PD14MFP_GPIO (0ul << SYS_GPD_MFPH_PD14MFP_Pos) /*!< GPD_MFPH_ PD14 setting for GPIO*/ +#define SYS_GPD_MFPH_PD14MFP_SPI2_MISO (2ul << SYS_GPD_MFPH_PD14MFP_Pos) /*!< GPD_MFPH_ PD14 setting for SPI2_MISO*/ +#define SYS_GPD_MFPH_PD14MFP_UART3_nCTS (3ul << SYS_GPD_MFPH_PD14MFP_Pos) /*!< GPD_MFPH_ PD14 setting for UART3_nCTS*/ +#define SYS_GPD_MFPH_PD14MFP_PWM1_CH2 (6ul << SYS_GPD_MFPH_PD14MFP_Pos) /*!< GPD_MFPH_ PD14 setting for PWM1_CH2*/ +#define SYS_GPD_MFPH_PD14MFP_EBI_ADR18 (7ul << SYS_GPD_MFPH_PD14MFP_Pos) /*!< GPD_MFPH_ PD14 setting for EBI_ADR18*/ + +//PD15 +#define SYS_GPD_MFPH_PD15MFP_GPIO (0ul << SYS_GPD_MFPH_PD15MFP_Pos) /*!< GPD_MFPH_ PD15 setting for GPIO*/ +#define SYS_GPD_MFPH_PD15MFP_SPI2_CLK (2ul << SYS_GPD_MFPH_PD15MFP_Pos) /*!< GPD_MFPH_ PD15 setting for SPI2_CLK*/ +#define SYS_GPD_MFPH_PD15MFP_UART3_nRTS (3ul << SYS_GPD_MFPH_PD15MFP_Pos) /*!< GPD_MFPH_ PD15 setting for UART3_nRTS*/ +#define SYS_GPD_MFPH_PD15MFP_PWM1_CH3 (6ul << SYS_GPD_MFPH_PD15MFP_Pos) /*!< GPD_MFPH_ PD15 setting for PWM1_CH3*/ +#define SYS_GPD_MFPH_PD15MFP_EBI_ADR19 (7ul << SYS_GPD_MFPH_PD15MFP_Pos) /*!< GPD_MFPH_ PD15 setting for EBI_ADR19*/ + +//PE0 +#define SYS_GPE_MFPL_PE0MFP_GPIO (0ul << SYS_GPE_MFPL_PE0MFP_Pos) /*!< GPE_MFPL PE0 setting for GPIO*/ +#define SYS_GPE_MFPL_PE0MFP_SPI2_CLK (2ul << SYS_GPE_MFPL_PE0MFP_Pos) /*!< GPE_MFPL PE0 setting for SPI2_CLK*/ +#define SYS_GPE_MFPL_PE0MFP_I2C1_SDA (3ul << SYS_GPE_MFPL_PE0MFP_Pos) /*!< GPE_MFPL PE0 setting for I2C1_SDA*/ +#define SYS_GPE_MFPL_PE0MFP_T2_EXT (4ul << SYS_GPE_MFPL_PE0MFP_Pos) /*!< GPE_MFPL PE0 setting for T2_EXT*/ +#define SYS_GPE_MFPL_PE0MFP_SC0_CD (5ul << SYS_GPE_MFPL_PE0MFP_Pos) /*!< GPE_MFPL PE0 setting for SC0_CD*/ +#define SYS_GPE_MFPL_PE0MFP_PWM0_CH0 (6ul << SYS_GPE_MFPL_PE0MFP_Pos) /*!< GPE_MFPL PE0 setting for PWM0_CH0*/ +#define SYS_GPE_MFPL_PE0MFP_EBI_nCS1 (7ul << SYS_GPE_MFPL_PE0MFP_Pos) /*!< GPE_MFPL PE0 setting for EBI_nCS1*/ +#define SYS_GPE_MFPL_PE0MFP_INT4 (8ul << SYS_GPE_MFPL_PE0MFP_Pos) /*!< GPE_MFPL PE0 setting for INT4*/ + +//PE1 +#define SYS_GPE_MFPL_PE1MFP_GPIO (0ul << SYS_GPE_MFPL_PE1MFP_Pos) /*!< GPE_MFPL PE1 setting for GPIO*/ +#define SYS_GPE_MFPL_PE1MFP_T3_EXT (3ul << SYS_GPE_MFPL_PE1MFP_Pos) /*!< GPE_MFPL PE1 setting for T3_EXT*/ +#define SYS_GPE_MFPL_PE1MFP_SC0_CD (5ul << SYS_GPE_MFPL_PE1MFP_Pos) /*!< GPE_MFPL PE1 setting for SC0_CD*/ +#define SYS_GPE_MFPL_PE1MFP_PWM0_CH1 (6ul << SYS_GPE_MFPL_PE1MFP_Pos) /*!< GPE_MFPL PE1 setting for PWM0_CH1*/ + +//PE2 +#define SYS_GPE_MFPL_PE2MFP_GPIO (0ul << SYS_GPE_MFPL_PE2MFP_Pos) /*!< GPE_MFPL PE2 setting for GPIO*/ +#define SYS_GPE_MFPL_PE2MFP_PWM1_CH1 (6ul << SYS_GPE_MFPL_PE2MFP_Pos) /*!< GPE_MFPL PE2 setting for PWM1_CH1*/ + +//PE3 +#define SYS_GPE_MFPL_PE3MFP_GPIO (0ul << SYS_GPE_MFPL_PE3MFP_Pos) /*!< GPE_MFPL PE3 setting for GPIO*/ +#define SYS_GPE_MFPL_PE3MFP_SPI1_MOSI (2ul << SYS_GPE_MFPL_PE3MFP_Pos) /*!< GPE_MFPL PE3 setting for SPI1_MOSI*/ +#define SYS_GPE_MFPL_PE3MFP_TK15 (4ul << SYS_GPE_MFPL_PE3MFP_Pos) /*!< GPE_MFPL PE3 setting for TK15*/ +#define SYS_GPE_MFPL_PE3MFP_PWM0_CH3 (6ul << SYS_GPE_MFPL_PE3MFP_Pos) /*!< GPE_MFPL PE3 setting for PWM0_CH3*/ + +//PE4 +#define SYS_GPE_MFPL_PE4MFP_GPIO (0ul << SYS_GPE_MFPL_PE4MFP_Pos) /*!< GPE_MFPL PE4 setting for GPIO*/ +#define SYS_GPE_MFPL_PE4MFP_I2C1_SCL (3ul << SYS_GPE_MFPL_PE4MFP_Pos) /*!< GPE_MFPL PE4 setting for I2C1_SCL*/ +#define SYS_GPE_MFPL_PE4MFP_SC0_PWR (5ul << SYS_GPE_MFPL_PE4MFP_Pos) /*!< GPE_MFPL PE4 setting for SC0_PWR*/ +#define SYS_GPE_MFPL_PE4MFP_PWM1_BRAKE0 (6ul << SYS_GPE_MFPL_PE4MFP_Pos) /*!< GPE_MFPL PE4 setting for PWM1_BRAKE0*/ +#define SYS_GPE_MFPL_PE4MFP_EBI_nCS0 (7ul << SYS_GPE_MFPL_PE4MFP_Pos) /*!< GPE_MFPL PE4 setting for EBI_nCS0*/ +#define SYS_GPE_MFPL_PE4MFP_INT0 (8ul << SYS_GPE_MFPL_PE4MFP_Pos) /*!< GPE_MFPL PE4 setting for INT0*/ + +//PE5 +#define SYS_GPE_MFPL_PE5MFP_GPIO (0ul << SYS_GPE_MFPL_PE5MFP_Pos) /*!< GPE_MFPL PE5 setting for GPIO*/ +#define SYS_GPE_MFPL_PE5MFP_I2C1_SDA (3ul << SYS_GPE_MFPL_PE5MFP_Pos) /*!< GPE_MFPL PE5 setting for I2C1_SDA*/ +#define SYS_GPE_MFPL_PE5MFP_SC0_RST (5ul << SYS_GPE_MFPL_PE5MFP_Pos) /*!< GPE_MFPL PE5 setting for SC0_RST*/ +#define SYS_GPE_MFPL_PE5MFP_PWM1_BRAKE1 (6ul << SYS_GPE_MFPL_PE5MFP_Pos) /*!< GPE_MFPL PE5 setting for PWM1_BRAKE1*/ +#define SYS_GPE_MFPL_PE5MFP_EBI_ALE (7ul << SYS_GPE_MFPL_PE5MFP_Pos) /*!< GPE_MFPL PE5 setting for EBI_ALE*/ +#define SYS_GPE_MFPL_PE5MFP_INT1 (8ul << SYS_GPE_MFPL_PE5MFP_Pos) /*!< GPE_MFPL PE5 setting for INT1*/ + +//PE6 +#define SYS_GPE_MFPL_PE6MFP_GPIO (0ul << SYS_GPE_MFPL_PE6MFP_Pos) /*!< GPE_MFPL PE6 setting for GPIO*/ +#define SYS_GPE_MFPL_PE6MFP_T3_EXT (3ul << SYS_GPE_MFPL_PE6MFP_Pos) /*!< GPE_MFPL PE6 setting for T3_EXT*/ + +//PE7 +#define SYS_GPE_MFPL_PE7MFP_GPIO (0ul << SYS_GPE_MFPL_PE7MFP_Pos) /*!< GPE_MFPL PE7 setting for GPIO*/ + +//PE8 +#define SYS_GPE_MFPH_PE8MFP_GPIO (0ul << SYS_GPE_MFPH_PE8MFP_Pos) /*!< GPE_MFPH PE8 setting for GPIO*/ +#define SYS_GPE_MFPH_PE8MFP_UART1_TXD (1ul << SYS_GPE_MFPH_PE8MFP_Pos) /*!< GPE_MFPH PE8 setting for UART1_TXD*/ +#define SYS_GPE_MFPH_PE8MFP_SPI0_MISO1 (2ul << SYS_GPE_MFPH_PE8MFP_Pos) /*!< GPE_MFPH PE8 setting for SPI0_MISO1*/ +#define SYS_GPE_MFPH_PE8MFP_I2C1_SCL (4ul << SYS_GPE_MFPH_PE8MFP_Pos) /*!< GPE_MFPH PE8 setting for I2C1_SCL*/ +#define SYS_GPE_MFPH_PE8MFP_SC0_PWR (5ul << SYS_GPE_MFPH_PE8MFP_Pos) /*!< GPE_MFPH PE8 setting for SC0_PWR*/ +#define SYS_GPE_MFPH_PE8MFP_CLKO (9ul << SYS_GPE_MFPH_PE8MFP_Pos) /*!< GPE_MFPH PE8 setting for CLKO*/ +#define SYS_GPE_MFPH_PE8MFP_PWM0_BRAKE0 (10ul << SYS_GPE_MFPH_PE8MFP_Pos) /*!< GPE_MFPH PE8 setting for PWM0_BRAKE0*/ +#define SYS_GPE_MFPH_PE8MFP_T1 (11ul << SYS_GPE_MFPH_PE8MFP_Pos) /*!< GPE_MFPH PE8 setting for T1*/ + +//PE9 +#define SYS_GPE_MFPH_PE9MFP_GPIO (0ul << SYS_GPE_MFPH_PE9MFP_Pos) /*!< GPE_MFPH PE9 setting for GPIO*/ +#define SYS_GPE_MFPH_PE9MFP_UART1_RXD (1ul << SYS_GPE_MFPH_PE9MFP_Pos) /*!< GPE_MFPH PE9 setting for UART1_RXD*/ +#define SYS_GPE_MFPH_PE9MFP_SPI0_MOSI1 (2ul << SYS_GPE_MFPH_PE9MFP_Pos) /*!< GPE_MFPH PE9 setting for SPI0_MOSI1*/ +#define SYS_GPE_MFPH_PE9MFP_I2C1_SDA (4ul << SYS_GPE_MFPH_PE9MFP_Pos) /*!< GPE_MFPH PE9 setting for I2C1_SDA*/ +#define SYS_GPE_MFPH_PE9MFP_SC0_RST (5ul << SYS_GPE_MFPH_PE9MFP_Pos) /*!< GPE_MFPH PE9 setting for SC0_RST*/ +#define SYS_GPE_MFPH_PE9MFP_SPI1_I2SMCLK (9ul << SYS_GPE_MFPH_PE9MFP_Pos) /*!< GPE_MFPH PE9 setting for SPI1_I2SMCLK*/ +#define SYS_GPE_MFPH_PE9MFP_PWM1_BRAKE1 (10ul << SYS_GPE_MFPH_PE9MFP_Pos) /*!< GPE_MFPH PE9 setting for PWM1_BRAKE1*/ +#define SYS_GPE_MFPH_PE9MFP_T2 (11ul << SYS_GPE_MFPH_PE9MFP_Pos) /*!< GPE_MFPH PE9 setting for T2*/ + +//PE10 +#define SYS_GPE_MFPH_PE10MFP_GPIO (0ul << SYS_GPE_MFPH_PE10MFP_Pos) /*!< GPE_MFPH PE10 setting for GPIO*/ +#define SYS_GPE_MFPH_PE10MFP_SPI1_MISO (1ul << SYS_GPE_MFPH_PE10MFP_Pos) /*!< GPE_MFPH PE10 setting for SPI1_MISO*/ +#define SYS_GPE_MFPH_PE10MFP_SPI0_MISO0 (2ul << SYS_GPE_MFPH_PE10MFP_Pos) /*!< GPE_MFPH PE10 setting for SPI0_MISO0*/ +#define SYS_GPE_MFPH_PE10MFP_UART1_nCTS (3ul << SYS_GPE_MFPH_PE10MFP_Pos) /*!< GPE_MFPH PE10 setting for UART1_nCTS*/ +#define SYS_GPE_MFPH_PE10MFP_I2C0_SMBAL (4ul << SYS_GPE_MFPH_PE10MFP_Pos) /*!< GPE_MFPH PE10 setting for I2C0_SMBAL*/ +#define SYS_GPE_MFPH_PE10MFP_SC0_DAT (5ul << SYS_GPE_MFPH_PE10MFP_Pos) /*!< GPE_MFPH PE10 setting for SC0_DAT*/ +#define SYS_GPE_MFPH_PE10MFP_UART3_TXD (9ul << SYS_GPE_MFPH_PE10MFP_Pos) /*!< GPE_MFPH PE10 setting for UART3_TXD*/ +#define SYS_GPE_MFPH_PE10MFP_I2C1_SCL (11ul << SYS_GPE_MFPH_PE10MFP_Pos) /*!< GPE_MFPH PE10 setting for I2C1_SCL*/ + +//PE11 +#define SYS_GPE_MFPH_PE11MFP_GPIO (0ul << SYS_GPE_MFPH_PE11MFP_Pos) /*!< GPE_MFPH PE11 setting for GPIO*/ +#define SYS_GPE_MFPH_PE11MFP_SPI1_MOSI (1ul << SYS_GPE_MFPH_PE11MFP_Pos) /*!< GPE_MFPH PE11 setting for SPI1_MOSI*/ +#define SYS_GPE_MFPH_PE11MFP_SPI0_MOSI0 (2ul << SYS_GPE_MFPH_PE11MFP_Pos) /*!< GPE_MFPH PE11 setting for SPI0_MOSI0*/ +#define SYS_GPE_MFPH_PE11MFP_UART1_nRTS (3ul << SYS_GPE_MFPH_PE11MFP_Pos) /*!< GPE_MFPH PE11 setting for UART1_nRTS*/ +#define SYS_GPE_MFPH_PE11MFP_I2C0_SMBSUS (4ul << SYS_GPE_MFPH_PE11MFP_Pos) /*!< GPE_MFPH PE11 setting for I2C0_SMBSUS*/ +#define SYS_GPE_MFPH_PE11MFP_SC0_CLK (5ul << SYS_GPE_MFPH_PE11MFP_Pos) /*!< GPE_MFPH PE11 setting for SC0_CLK*/ +#define SYS_GPE_MFPH_PE11MFP_UART3_RXD (9ul << SYS_GPE_MFPH_PE11MFP_Pos) /*!< GPE_MFPH PE11 setting for UART3_RXD*/ +#define SYS_GPE_MFPH_PE11MFP_I2C1_SDA (11ul << SYS_GPE_MFPH_PE11MFP_Pos) /*!< GPE_MFPH PE11 setting for I2C1_SDA*/ + +//PE12 +#define SYS_GPE_MFPH_PE12MFP_GPIO (0ul << SYS_GPE_MFPH_PE12MFP_Pos) /*!< GPE_MFPH PE12 setting for GPIO*/ +#define SYS_GPE_MFPH_PE12MFP_SPI1_SS (1ul << SYS_GPE_MFPH_PE12MFP_Pos) /*!< GPE_MFPH PE12 setting for SPI1_SS*/ +#define SYS_GPE_MFPH_PE12MFP_SPI0_SS (2ul << SYS_GPE_MFPH_PE12MFP_Pos) /*!< GPE_MFPH PE12 setting for SPI0_SS*/ +#define SYS_GPE_MFPH_PE12MFP_UART1_TXD (3ul << SYS_GPE_MFPH_PE12MFP_Pos) /*!< GPE_MFPH PE12 setting for UART1_TXD*/ +#define SYS_GPE_MFPH_PE12MFP_I2C0_SCL (4ul << SYS_GPE_MFPH_PE12MFP_Pos) /*!< GPE_MFPH PE12 setting for I2C0_SCL*/ + +//PE13 +#define SYS_GPE_MFPH_PE13MFP_GPIO (0ul << SYS_GPE_MFPH_PE13MFP_Pos) /*!< GPE_MFPH PE13 setting for GPIO*/ +#define SYS_GPE_MFPH_PE13MFP_SPI1_CLK (1ul << SYS_GPE_MFPH_PE13MFP_Pos) /*!< GPE_MFPH PE13 setting for SPI1_CLK*/ +#define SYS_GPE_MFPH_PE13MFP_SPI0_CLK (2ul << SYS_GPE_MFPH_PE13MFP_Pos) /*!< GPE_MFPH PE13 setting for SPI0_CLK*/ +#define SYS_GPE_MFPH_PE13MFP_UART1_RXD (3ul << SYS_GPE_MFPH_PE13MFP_Pos) /*!< GPE_MFPH PE13 setting for UART1_RXD*/ +#define SYS_GPE_MFPH_PE13MFP_I2C0_SDA (4ul << SYS_GPE_MFPH_PE13MFP_Pos) /*!< GPE_MFPH PE13 setting for I2C0_SDA*/ + +//PE14 +#define SYS_GPE_MFPH_PE14MFP_GPIO (0ul << SYS_GPE_MFPH_PE14MFP_Pos) /*!< GPE_MFPH PE14 setting for GPIO*/ + +//PF0 +#define SYS_GPF_MFPL_PF0MFP_GPIO (0ul << SYS_GPF_MFPL_PF0MFP_Pos) /*!< GPF_MFPL PF0 setting for GPIO*/ +#define SYS_GPF_MFPL_PF0MFP_X32_OUT (1ul << SYS_GPF_MFPL_PF0MFP_Pos) /*!< GPF_MFPL PF0 setting for X32_OUT*/ +#define SYS_GPF_MFPL_PF0MFP_INT5 (8ul << SYS_GPF_MFPL_PF0MFP_Pos) /*!< GPF_MFPL PF0 setting for INT5*/ + +//PF1 +#define SYS_GPF_MFPL_PF1MFP_GPIO (0ul << SYS_GPF_MFPL_PF1MFP_Pos) /*!< GPF_MFPL PF1 setting for GPIO*/ +#define SYS_GPF_MFPL_PF1MFP_X32_IN (1ul << SYS_GPF_MFPL_PF1MFP_Pos) /*!< GPF_MFPL PF1 setting for X32_IN*/ + +//PF2 +#define SYS_GPF_MFPL_PF2MFP_GPIO (0ul << SYS_GPF_MFPL_PF2MFP_Pos) /*!< GPF_MFPL PF2 setting for GPIO*/ +#define SYS_GPF_MFPL_PF2MFP_TAMPER (1ul << SYS_GPF_MFPL_PF2MFP_Pos) /*!< GPF_MFPL PF2 setting for TAMPER*/ + +//PF3 +#define SYS_GPF_MFPL_PF3MFP_GPIO (0ul << SYS_GPF_MFPL_PF3MFP_Pos) /*!< GPF_MFPL PF3 setting for GPIO*/ +#define SYS_GPF_MFPL_PF3MFP_XT1_OUT (1ul << SYS_GPF_MFPL_PF3MFP_Pos) /*!< GPF_MFPL PF3 setting for XT1_OUT*/ +#define SYS_GPF_MFPL_PF3MFP_I2C1_SCL (3ul << SYS_GPF_MFPL_PF3MFP_Pos) /*!< GPF_MFPL PF3 setting for I2C1_SCL*/ + +//PF4 +#define SYS_GPF_MFPL_PF4MFP_GPIO (0ul << SYS_GPF_MFPL_PF4MFP_Pos) /*!< GPF_MFPL PF4 setting for GPIO*/ +#define SYS_GPF_MFPL_PF4MFP_XT1_IN (1ul << SYS_GPF_MFPL_PF4MFP_Pos) /*!< GPF_MFPL PF4 setting for XT1_IN*/ +#define SYS_GPF_MFPL_PF4MFP_I2C1_SDA (3ul << SYS_GPF_MFPL_PF4MFP_Pos) /*!< GPF_MFPL PF4 setting for I2C1_SDA*/ + +//PF5 +#define SYS_GPF_MFPL_PF5MFP_GPIO (0ul << SYS_GPF_MFPL_PF5MFP_Pos) /*!< GPF_MFPL PF5 setting for GPIO*/ +#define SYS_GPF_MFPL_PF5MFP_ICE_CLK (1ul << SYS_GPF_MFPL_PF5MFP_Pos) /*!< GPF_MFPL PF5 setting for ICE_CLK*/ + +//PF6 +#define SYS_GPF_MFPL_PF6MFP_GPIO (0ul << SYS_GPF_MFPL_PF6MFP_Pos) /*!< GPF_MFPL PF6 setting for GPIO*/ +#define SYS_GPF_MFPL_PF6MFP_ICE_DAT (1ul << SYS_GPF_MFPL_PF6MFP_Pos) /*!< GPF_MFPL PF6 setting for ICE_DAT*/ + +//PF7 +#define SYS_GPF_MFPL_PF7MFP_GPIO (0ul << SYS_GPF_MFPL_PF7MFP_Pos) /*!< GPF_MFPL PF7 setting for GPIO*/ + + +/*@}*/ /* end of group SYS_EXPORTED_CONSTANTS */ + + +/** @addtogroup SYS_EXPORTED_FUNCTIONS SYS Exported Functions + @{ +*/ + + +/** + * @brief Clear Brown-out detector interrupt flag + * @param None + * @return None + * @details This macro clear Brown-out detector interrupt flag. + */ +#define SYS_CLEAR_BOD_INT_FLAG() (SYS->BODCTL |= SYS_BODCTL_BODIF_Msk) + +/** + * @brief Set Brown-out detector function to normal mode + * @param None + * @return None + * @details This macro set Brown-out detector to normal mode. + * The register write-protection function should be disabled before using this macro. + */ +#define SYS_CLEAR_BOD_LPM() (SYS->BODCTL &= ~SYS_BODCTL_BODLPM_Msk) + +/** + * @brief Disable Brown-out detector function + * @param None + * @return None + * @details This macro disable Brown-out detector function. + * The register write-protection function should be disabled before using this macro. + */ +#define SYS_DISABLE_BOD() (SYS->BODCTL &= ~SYS_BODCTL_BODEN_Msk) + +/** + * @brief Enable Brown-out detector function + * @param None + * @return None + * @details This macro enable Brown-out detector function. + * The register write-protection function should be disabled before using this macro. + */ +#define SYS_ENABLE_BOD() (SYS->BODCTL |= SYS_BODCTL_BODEN_Msk) + +/** + * @brief Get Brown-out detector interrupt flag + * @param None + * @retval 0 Brown-out detect interrupt flag is not set. + * @retval >=1 Brown-out detect interrupt flag is set. + * @details This macro get Brown-out detector interrupt flag. + */ +#define SYS_GET_BOD_INT_FLAG() (SYS->BODCTL & SYS_BODCTL_BODIF_Msk) + +/** + * @brief Get Brown-out detector status + * @param None + * @retval 0 System voltage is higher than BOD threshold voltage setting or BOD function is disabled. + * @retval >=1 System voltage is lower than BOD threshold voltage setting. + * @details This macro get Brown-out detector output status. + * If the BOD function is disabled, this function always return 0. + */ +#define SYS_GET_BOD_OUTPUT() (SYS->BODCTL & SYS_BODCTL_BODOUT_Msk) + +/** + * @brief Enable Brown-out detector interrupt function + * @param None + * @return None + * @details This macro enable Brown-out detector interrupt function. + * The register write-protection function should be disabled before using this macro. + */ +#define SYS_DISABLE_BOD_RST() (SYS->BODCTL &= ~SYS_BODCTL_BODRSTEN_Msk) + +/** + * @brief Enable Brown-out detector reset function + * @param None + * @return None + * @details This macro enable Brown-out detect reset function. + * The register write-protection function should be disabled before using this macro. + */ +#define SYS_ENABLE_BOD_RST() (SYS->BODCTL |= SYS_BODCTL_BODRSTEN_Msk) + +/** + * @brief Set Brown-out detector function low power mode + * @param None + * @return None + * @details This macro set Brown-out detector to low power mode. + * The register write-protection function should be disabled before using this macro. + */ +#define SYS_SET_BOD_LPM() (SYS->BODCTL |= SYS_BODCTL_BODLPM_Msk) + +/** + * @brief Set Brown-out detector voltage level + * @param[in] u32Level is Brown-out voltage level. Including : + * - \ref SYS_BODCTL_BODVL_4_5V + * - \ref SYS_BODCTL_BODVL_3_7V + * - \ref SYS_BODCTL_BODVL_2_7V + * - \ref SYS_BODCTL_BODVL_2_2V + * @return None + * @details This macro set Brown-out detector voltage level. + * The write-protection function should be disabled before using this macro. + */ +#define SYS_SET_BOD_LEVEL(u32Level) (SYS->BODCTL = (SYS->BODCTL & ~SYS_BODCTL_BODVL_Msk) | (u32Level)) + +/** + * @brief Get reset source is from Brown-out detector reset + * @param None + * @retval 0 Previous reset source is not from Brown-out detector reset + * @retval >=1 Previous reset source is from Brown-out detector reset + * @details This macro get previous reset source is from Brown-out detect reset or not. + */ +#define SYS_IS_BOD_RST() (SYS->RSTSTS & SYS_RSTSTS_BODRF_Msk) + +/** + * @brief Get reset source is from CPU reset + * @param None + * @retval 0 Previous reset source is not from CPU reset + * @retval >=1 Previous reset source is from CPU reset + * @details This macro get previous reset source is from CPU reset. + */ +#define SYS_IS_CPU_RST() (SYS->RSTSTS & SYS_RSTSTS_CPURF_Msk) + +/** + * @brief Get reset source is from LVR Reset + * @param None + * @retval 0 Previous reset source is not from Low-Voltage-Reset + * @retval >=1 Previous reset source is from Low-Voltage-Reset + * @details This macro get previous reset source is from Low-Voltage-Reset. + */ +#define SYS_IS_LVR_RST() (SYS->RSTSTS & SYS_RSTSTS_LVRF_Msk) + +/** + * @brief Get reset source is from Power-on Reset + * @param None + * @retval 0 Previous reset source is not from Power-on Reset + * @retval >=1 Previous reset source is from Power-on Reset + * @details This macro get previous reset source is from Power-on Reset. + */ +#define SYS_IS_POR_RST() (SYS->RSTSTS & SYS_RSTSTS_PORF_Msk) + +/** + * @brief Get reset source is from reset pin reset + * @param None + * @retval 0 Previous reset source is not from reset pin reset + * @retval >=1 Previous reset source is from reset pin reset + * @details This macro get previous reset source is from reset pin reset. + */ +#define SYS_IS_RSTPIN_RST() (SYS->RSTSTS & SYS_RSTSTS_PINRF_Msk) + +/** + * @brief Get reset source is from system reset + * @param None + * @retval 0 Previous reset source is not from system reset + * @retval >=1 Previous reset source is from system reset + * @details This macro get previous reset source is from system reset. + */ +#define SYS_IS_SYSTEM_RST() (SYS->RSTSTS & SYS_RSTSTS_SYSRF_Msk) + +/** + * @brief Get reset source is from window watch dog reset + * @param None + * @retval 0 Previous reset source is not from window watch dog reset + * @retval >=1 Previous reset source is from window watch dog reset + * @details This macro get previous reset source is from window watch dog reset. + */ +#define SYS_IS_WDT_RST() (SYS->RSTSTS & SYS_RSTSTS_WDTRF_Msk) + +/** + * @brief Disable Low-Voltage-Reset function + * @param None + * @return None + * @details This macro disable Low-Voltage-Reset function. + * The register write-protection function should be disabled before using this macro. + */ +#define SYS_DISABLE_LVR() (SYS->BODCTL &= ~SYS_BODCTL_LVREN_Msk) + +/** + * @brief Enable Low-Voltage-Reset function + * @param None + * @return None + * @details This macro enable Low-Voltage-Reset function. + * The register write-protection function should be disabled before using this macro. + */ +#define SYS_ENABLE_LVR() (SYS->BODCTL |= SYS_BODCTL_LVREN_Msk) + +/** + * @brief Disable Power-on Reset function + * @param None + * @return None + * @details This macro disable Power-on Reset function. + * The register write-protection function should be disabled before using this macro. + */ +#define SYS_DISABLE_POR() (SYS->PORCTL = 0x5AA5) + +/** + * @brief Enable Power-on Reset function + * @param None + * @return None + * @details This macro enable Power-on Reset function. + * The register write-protection function should be disabled before using this macro. + */ +#define SYS_ENABLE_POR() (SYS->PORCTL = 0) + +/** + * @brief Clear reset source flag + * @param[in] u32RstSrc is reset source. Including : + * - \ref SYS_RSTSTS_PORF_Msk + * - \ref SYS_RSTSTS_PINRF_Msk + * - \ref SYS_RSTSTS_WDTRF_Msk + * - \ref SYS_RSTSTS_LVRF_Msk + * - \ref SYS_RSTSTS_BODRF_Msk + * - \ref SYS_RSTSTS_SYSRF_Msk + * - \ref SYS_RSTSTS_CPURF_Msk + * - \ref SYS_RSTSTS_CPULKRF_Msk + * @return None + * @details This macro clear reset source flag. + */ +#define SYS_CLEAR_RST_SOURCE(u32RstSrc) ((SYS->RSTSTS) = (u32RstSrc) ) + + +/*---------------------------------------------------------------------------------------------------------*/ +/* static inline functions */ +/*---------------------------------------------------------------------------------------------------------*/ + + +/** + * @brief Disable register write-protection function + * @param None + * @return None + * @details This function disable register write-protection function. + * To unlock the protected register to allow write access. + */ +__STATIC_INLINE void SYS_UnlockReg(void) +{ + do + { + SYS->REGLCTL = 0x59; + SYS->REGLCTL = 0x16; + SYS->REGLCTL = 0x88; + } + while(SYS->REGLCTL == 0); +} + +/** + * @brief Enable register write-protection function + * @param None + * @return None + * @details This function is used to enable register write-protection function. + * To lock the protected register to forbid write access. + */ +__STATIC_INLINE void SYS_LockReg(void) +{ + SYS->REGLCTL = 0; +} + + +void SYS_ClearResetSrc(uint32_t u32Src); +uint32_t SYS_GetBODStatus(void); +uint32_t SYS_GetResetSrc(void); +uint32_t SYS_IsRegLocked(void); +uint32_t SYS_ReadPDID(void); +void SYS_ResetChip(void); +void SYS_ResetCPU(void); +void SYS_ResetModule(uint32_t u32ModuleIndex); +void SYS_EnableBOD(int32_t i32Mode, uint32_t u32BODLevel); +void SYS_DisableBOD(void); + + +/*@}*/ /* end of group SYS_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group SYS_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + + +#ifdef __cplusplus +} +#endif + +#endif //__SYS_H__ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_timer.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_timer.c new file mode 100644 index 00000000000..db8ce4225cc --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_timer.c @@ -0,0 +1,292 @@ +/**************************************************************************//** + * @file timer.c + * @version V3.00 + * $Revision: 6 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series Timer driver source file + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ +#include "M451Series.h" + + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup TIMER_Driver TIMER Driver + @{ +*/ + +/** @addtogroup TIMER_EXPORTED_FUNCTIONS TIMER Exported Functions + @{ +*/ + +/** + * @brief Open Timer with Operate Mode and Frequency + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * @param[in] u32Mode Operation mode. Possible options are + * - \ref TIMER_ONESHOT_MODE + * - \ref TIMER_PERIODIC_MODE + * - \ref TIMER_TOGGLE_MODE + * - \ref TIMER_CONTINUOUS_MODE + * @param[in] u32Freq Target working frequency + * + * @return Real timer working frequency + * + * @details This API is used to configure timer to operate in specified mode and frequency. + * If timer cannot work in target frequency, a closest frequency will be chose and returned. + * @note After calling this API, Timer is \b NOT running yet. But could start timer running be calling + * \ref TIMER_Start macro or program registers directly. + */ +uint32_t TIMER_Open(TIMER_T *timer, uint32_t u32Mode, uint32_t u32Freq) +{ + uint32_t u32Clk = TIMER_GetModuleClock(timer); + uint32_t u32Cmpr = 0, u32Prescale = 0; + + // Fastest possible timer working freq is (u32Clk / 2). While cmpr = 2, pre-scale = 0. + if(u32Freq > (u32Clk / 2)) + { + u32Cmpr = 2; + } + else + { + if(u32Clk > 64000000) + { + u32Prescale = 7; // real prescaler value is 8 + u32Clk >>= 3; + } + else if(u32Clk > 32000000) + { + u32Prescale = 3; // real prescaler value is 4 + u32Clk >>= 2; + } + else if(u32Clk > 16000000) + { + u32Prescale = 1; // real prescaler value is 2 + u32Clk >>= 1; + } + + u32Cmpr = u32Clk / u32Freq; + } + + timer->CTL = u32Mode | u32Prescale; + timer->CMP = u32Cmpr; + + return(u32Clk / (u32Cmpr * (u32Prescale + 1))); +} + +/** + * @brief Stop Timer Counting + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * + * @return None + * + * @details This API stops timer counting and disable all timer interrupt function. + */ +void TIMER_Close(TIMER_T *timer) +{ + timer->CTL = 0; + timer->EXTCTL = 0; +} + +/** + * @brief Create a specify Delay Time + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * @param[in] u32Usec Delay period in micro seconds. Valid values are between 100~1000000 (100 micro second ~ 1 second). + * + * @return None + * + * @details This API is used to create a delay loop for u32usec micro seconds by using timer one-shot mode. + * @note This API overwrites the register setting of the timer used to count the delay time. + * @note This API use polling mode. So there is no need to enable interrupt for the timer module used to generate delay. + */ +void TIMER_Delay(TIMER_T *timer, uint32_t u32Usec) +{ + uint32_t u32Clk = TIMER_GetModuleClock(timer); + uint32_t u32Prescale = 0, delay = (SystemCoreClock / u32Clk) + 1; + uint32_t u32Cmpr, u32NsecPerTick; + + // Clear current timer configuration/ + timer->CTL = 0; + timer->EXTCTL = 0; + + if(u32Clk <= 1000000) // min delay is 1000 us if timer clock source is <= 1 MHz + { + if(u32Usec < 1000) + u32Usec = 1000; + if(u32Usec > 1000000) + u32Usec = 1000000; + } + else + { + if(u32Usec < 100) + u32Usec = 100; + if(u32Usec > 1000000) + u32Usec = 1000000; + } + + if(u32Clk <= 1000000) + { + u32Prescale = 0; + u32NsecPerTick = 1000000000 / u32Clk; + u32Cmpr = (u32Usec * 1000) / u32NsecPerTick; + } + else + { + if(u32Clk > 64000000) + { + u32Prescale = 7; // real prescaler value is 8 + u32Clk >>= 3; + } + else if(u32Clk > 32000000) + { + u32Prescale = 3; // real prescaler value is 4 + u32Clk >>= 2; + } + else if(u32Clk > 16000000) + { + u32Prescale = 1; // real prescaler value is 2 + u32Clk >>= 1; + } + + if(u32Usec < 250) + { + u32Cmpr = (u32Usec * u32Clk) / 1000000; + } + else + { + u32NsecPerTick = 1000000000 / u32Clk; + u32Cmpr = (u32Usec * 1000) / u32NsecPerTick; + } + } + + timer->CMP = u32Cmpr; + timer->CTL = TIMER_CTL_CNTEN_Msk | TIMER_ONESHOT_MODE | u32Prescale; + + // When system clock is faster than timer clock, it is possible timer active bit cannot set in time while we check it. + // And the while loop below return immediately, so put a tiny delay here allowing timer start counting and raise active flag. + for(; delay > 0; delay--) + { + __NOP(); + } + + while(timer->CTL & TIMER_CTL_ACTSTS_Msk); +} + +/** + * @brief Enable Timer Capture Function + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * @param[in] u32CapMode Timer capture mode. Could be + * - \ref TIMER_CAPTURE_FREE_COUNTING_MODE + * - \ref TIMER_CAPTURE_COUNTER_RESET_MODE + * @param[in] u32Edge Timer capture trigger edge. Possible values are + * - \ref TIMER_CAPTURE_FALLING_EDGE + * - \ref TIMER_CAPTURE_RISING_EDGE + * - \ref TIMER_CAPTURE_FALLING_AND_RISING_EDGE + * + * @return None + * + * @details This API is used to enable timer capture function with specify capture trigger edge \n + * to get current counter value or reset counter value to 0. + * @note Timer frequency should be configured separately by using \ref TIMER_Open API, or program registers directly. + */ +void TIMER_EnableCapture(TIMER_T *timer, uint32_t u32CapMode, uint32_t u32Edge) +{ + + timer->EXTCTL = (timer->EXTCTL & ~(TIMER_EXTCTL_CAPFUNCS_Msk | TIMER_EXTCTL_CAPEDGE_Msk)) | + u32CapMode | u32Edge | TIMER_EXTCTL_CAPEN_Msk; +} + +/** + * @brief Disable Timer Capture Function + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * + * @return None + * + * @details This API is used to disable the timer capture function. + */ +void TIMER_DisableCapture(TIMER_T *timer) +{ + timer->EXTCTL &= ~TIMER_EXTCTL_CAPEN_Msk; +} + +/** + * @brief Enable Timer Counter Function + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * @param[in] u32Edge Detection edge of counter pin. Could be ether + * - \ref TIMER_COUNTER_FALLING_EDGE, or + * - \ref TIMER_COUNTER_RISING_EDGE + * + * @return None + * + * @details This function is used to enable the timer counter function with specify detection edge. + * @note Timer compare value should be configured separately by using \ref TIMER_SET_CMP_VALUE macro or program registers directly. + * @note While using event counter function, \ref TIMER_TOGGLE_MODE cannot set as timer operation mode. + */ +void TIMER_EnableEventCounter(TIMER_T *timer, uint32_t u32Edge) +{ + timer->EXTCTL = (timer->EXTCTL & ~TIMER_EXTCTL_CNTPHASE_Msk) | u32Edge; + timer->CTL |= TIMER_CTL_EXTCNTEN_Msk; +} + +/** + * @brief Disable Timer Counter Function + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * + * @return None + * + * @details This API is used to disable the timer event counter function. + */ +void TIMER_DisableEventCounter(TIMER_T *timer) +{ + timer->CTL &= ~TIMER_CTL_EXTCNTEN_Msk; +} + +/** + * @brief Get Timer Clock Frequency + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * + * @return Timer clock frequency + * + * @details This API is used to get the timer clock frequency. + * @note This API cannot return correct clock rate if timer source is from external clock input. + */ +uint32_t TIMER_GetModuleClock(TIMER_T *timer) +{ + uint32_t u32Src; + const uint32_t au32Clk[] = {__HXT, __LXT, 0, 0, 0, __LIRC, 0, __HIRC}; + + if(timer == TIMER0) + u32Src = (CLK->CLKSEL1 & CLK_CLKSEL1_TMR0SEL_Msk) >> CLK_CLKSEL1_TMR0SEL_Pos; + else if(timer == TIMER1) + u32Src = (CLK->CLKSEL1 & CLK_CLKSEL1_TMR1SEL_Msk) >> CLK_CLKSEL1_TMR1SEL_Pos; + else if(timer == TIMER2) + u32Src = (CLK->CLKSEL1 & CLK_CLKSEL1_TMR2SEL_Msk) >> CLK_CLKSEL1_TMR2SEL_Pos; + else // Timer 3 + u32Src = (CLK->CLKSEL1 & CLK_CLKSEL1_TMR3SEL_Msk) >> CLK_CLKSEL1_TMR3SEL_Pos; + + if(u32Src == 2) + { + return (SystemCoreClock); + } + + return (au32Clk[u32Src]); +} + +/*@}*/ /* end of group TIMER_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group TIMER_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +/*** (C) COPYRIGHT 2013~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_timer.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_timer.h new file mode 100644 index 00000000000..de11f6774f8 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_timer.h @@ -0,0 +1,415 @@ +/**************************************************************************//** + * @file timer.h + * @version V3.00 + * $Revision: 10 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series Timer driver header file + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. + *****************************************************************************/ +#ifndef __TIMER_H__ +#define __TIMER_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup TIMER_Driver TIMER Driver + @{ +*/ + +/** @addtogroup TIMER_EXPORTED_CONSTANTS TIMER Exported Constants + @{ +*/ +/*---------------------------------------------------------------------------------------------------------*/ +/* TIMER Operation Mode, External Counter and Capture Mode Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define TIMER_ONESHOT_MODE (0UL << TIMER_CTL_OPMODE_Pos) /*!< Timer working in one-shot mode */ +#define TIMER_PERIODIC_MODE (1UL << TIMER_CTL_OPMODE_Pos) /*!< Timer working in periodic mode */ +#define TIMER_TOGGLE_MODE (2UL << TIMER_CTL_OPMODE_Pos) /*!< Timer working in toggle-output mode */ +#define TIMER_CONTINUOUS_MODE (3UL << TIMER_CTL_OPMODE_Pos) /*!< Timer working in continuous counting mode */ +#define TIMER_TOUT_PIN_FROM_TX (0UL << TIMER_CTL_TGLPINSEL_Pos) /*!< Timer toggle-output pin is from Tx pin */ +#define TIMER_TOUT_PIN_FROM_TX_EXT (1UL << TIMER_CTL_TGLPINSEL_Pos) /*!< Timer toggle-output pin is from Tx_EXT pin */ +#define TIMER_CAPTURE_FREE_COUNTING_MODE (0UL << TIMER_EXTCTL_CAPFUNCS_Pos) /*!< Timer capture event to get timer counter value */ +#define TIMER_CAPTURE_COUNTER_RESET_MODE (1UL << TIMER_EXTCTL_CAPFUNCS_Pos) /*!< Timer capture event to reset timer counter */ +#define TIMER_CAPTURE_FALLING_EDGE (0UL << TIMER_EXTCTL_CAPEDGE_Pos) /*!< Falling edge detection to trigger timer capture */ +#define TIMER_CAPTURE_RISING_EDGE (1UL << TIMER_EXTCTL_CAPEDGE_Pos) /*!< Rising edge detection to trigger timer capture */ +#define TIMER_CAPTURE_FALLING_AND_RISING_EDGE (2UL << TIMER_EXTCTL_CAPEDGE_Pos) /*!< Both falling and rising edge detection to trigger timer capture */ +#define TIMER_COUNTER_FALLING_EDGE (0UL << TIMER_EXTCTL_CNTPHASE_Pos) /*!< Counter increase on falling edge detection */ +#define TIMER_COUNTER_RISING_EDGE (1UL << TIMER_EXTCTL_CNTPHASE_Pos) /*!< Counter increase on rising edge detection */ + +/*@}*/ /* end of group TIMER_EXPORTED_CONSTANTS */ + + +/** @addtogroup TIMER_EXPORTED_FUNCTIONS TIMER Exported Functions + @{ +*/ + +/** + * @brief Set Timer Compared Value + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * @param[in] u32Value Timer compare value. Valid values are between 2 to 0xFFFFFF. + * + * @return None + * + * @details This macro is used to set timer compared value to adjust timer time-out interval. + * @note 1. Never write 0x0 or 0x1 in this field, or the core will run into unknown state. \n + * 2. If update timer compared value in continuous counting mode, timer counter value will keep counting continuously. \n + * But if timer is operating at other modes, the timer up counter will restart counting and start from 0. + */ +#define TIMER_SET_CMP_VALUE(timer, u32Value) ((timer)->CMP = (u32Value)) + +/** + * @brief Set Timer Prescale Value + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * @param[in] u32Value Timer prescale value. Valid values are between 0 to 0xFF. + * + * @return None + * + * @details This macro is used to set timer prescale value and timer source clock will be divided by (prescale + 1) \n + * before it is fed into timer. + */ +#define TIMER_SET_PRESCALE_VALUE(timer, u32Value) ((timer)->CTL = ((timer)->CTL & ~TIMER_CTL_PSC_Msk) | (u32Value)) + +/** + * @brief Check specify Timer Status + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * + * @retval 0 Timer 24-bit up counter is inactive + * @retval 1 Timer 24-bit up counter is active + * + * @details This macro is used to check if specify Timer counter is inactive or active. + */ +#define TIMER_IS_ACTIVE(timer) (((timer)->CTL & TIMER_CTL_ACTSTS_Msk)? 1 : 0) + +/** + * @brief Select Toggle-output Pin + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * @param[in] u32ToutSel Toggle-output pin selection, valid values are: + * - \ref TIMER_TOUT_PIN_FROM_TX + * - \ref TIMER_TOUT_PIN_FROM_TX_EXT + * + * @return None + * + * @details This macro is used to select timer toggle-output pin is output on Tx or Tx_EXT pin. + */ +#define TIMER_SELECT_TOUT_PIN(timer, u32ToutSel) ((timer)->CTL = ((timer)->CTL & ~TIMER_CTL_TGLPINSEL_Msk) | (u32ToutSel)) + +/** + * @brief Start Timer Counting + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * + * @return None + * + * @details This function is used to start Timer counting. + */ +static __INLINE void TIMER_Start(TIMER_T *timer) +{ + timer->CTL |= TIMER_CTL_CNTEN_Msk; +} + +/** + * @brief Stop Timer Counting + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * + * @return None + * + * @details This function is used to stop/suspend Timer counting. + */ +static __INLINE void TIMER_Stop(TIMER_T *timer) +{ + timer->CTL &= ~TIMER_CTL_CNTEN_Msk; +} + +/** + * @brief Enable Timer Interrupt Wake-up Function + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * + * @return None + * + * @details This function is used to enable the timer interrupt wake-up function and interrupt source could be time-out interrupt, \n + * counter event interrupt or capture trigger interrupt. + * @note To wake the system from Power-down mode, timer clock source must be ether LXT or LIRC. + */ +static __INLINE void TIMER_EnableWakeup(TIMER_T *timer) +{ + timer->CTL |= TIMER_CTL_WKEN_Msk; +} + +/** + * @brief Disable Timer Wake-up Function + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * + * @return None + * + * @details This function is used to disable the timer interrupt wake-up function. + */ +static __INLINE void TIMER_DisableWakeup(TIMER_T *timer) +{ + timer->CTL &= ~TIMER_CTL_WKEN_Msk; +} + +/** + * @brief Enable Capture Pin De-bounce + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * + * @return None + * + * @details This function is used to enable the detect de-bounce function of capture pin. + */ +static __INLINE void TIMER_EnableCaptureDebounce(TIMER_T *timer) +{ + timer->EXTCTL |= TIMER_EXTCTL_CAPDBEN_Msk; +} + +/** + * @brief Disable Capture Pin De-bounce + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * + * @return None + * + * @details This function is used to disable the detect de-bounce function of capture pin. + */ +static __INLINE void TIMER_DisableCaptureDebounce(TIMER_T *timer) +{ + timer->EXTCTL &= ~TIMER_EXTCTL_CAPDBEN_Msk; +} + +/** + * @brief Enable Counter Pin De-bounce + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * + * @return None + * + * @details This function is used to enable the detect de-bounce function of counter pin. + */ +static __INLINE void TIMER_EnableEventCounterDebounce(TIMER_T *timer) +{ + timer->EXTCTL |= TIMER_EXTCTL_CNTDBEN_Msk; +} + +/** + * @brief Disable Counter Pin De-bounce + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * + * @return None + * + * @details This function is used to disable the detect de-bounce function of counter pin. + */ +static __INLINE void TIMER_DisableEventCounterDebounce(TIMER_T *timer) +{ + timer->EXTCTL &= ~TIMER_EXTCTL_CNTDBEN_Msk; +} + +/** + * @brief Enable Timer Time-out Interrupt + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * + * @return None + * + * @details This function is used to enable the timer time-out interrupt function. + */ +static __INLINE void TIMER_EnableInt(TIMER_T *timer) +{ + timer->CTL |= TIMER_CTL_INTEN_Msk; +} + +/** + * @brief Disable Timer Time-out Interrupt + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * + * @return None + * + * @details This function is used to disable the timer time-out interrupt function. + */ +static __INLINE void TIMER_DisableInt(TIMER_T *timer) +{ + timer->CTL &= ~TIMER_CTL_INTEN_Msk; +} + +/** + * @brief Enable Capture Trigger Interrupt + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * + * @return None + * + * @details This function is used to enable the timer capture trigger interrupt function. + */ +static __INLINE void TIMER_EnableCaptureInt(TIMER_T *timer) +{ + timer->EXTCTL |= TIMER_EXTCTL_CAPIEN_Msk; +} + +/** + * @brief Disable Capture Trigger Interrupt + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * + * @return None + * + * @details This function is used to disable the timer capture trigger interrupt function. + */ +static __INLINE void TIMER_DisableCaptureInt(TIMER_T *timer) +{ + timer->EXTCTL &= ~TIMER_EXTCTL_CAPIEN_Msk; +} + +/** + * @brief Get Timer Time-out Interrupt Flag + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * + * @retval 0 Timer time-out interrupt did not occur + * @retval 1 Timer time-out interrupt occurred + * + * @details This function indicates timer time-out interrupt occurred or not. + */ +static __INLINE uint32_t TIMER_GetIntFlag(TIMER_T *timer) +{ + return ((timer->INTSTS & TIMER_INTSTS_TIF_Msk) ? 1 : 0); +} + +/** + * @brief Clear Timer Time-out Interrupt Flag + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * + * @return None + * + * @details This function clears timer time-out interrupt flag to 0. + */ +static __INLINE void TIMER_ClearIntFlag(TIMER_T *timer) +{ + timer->INTSTS = (timer->INTSTS & ~TIMER_INTSTS_TWKF_Msk) | TIMER_INTSTS_TIF_Msk; +} + +/** + * @brief Get Timer Capture Interrupt Flag + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * + * @retval 0 Timer capture interrupt did not occur + * @retval 1 Timer capture interrupt occurred + * + * @details This function indicates timer capture trigger interrupt occurred or not. + */ +static __INLINE uint32_t TIMER_GetCaptureIntFlag(TIMER_T *timer) +{ + return timer->EINTSTS; +} + +/** + * @brief Clear Timer Capture Interrupt Flag + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * + * @return None + * + * @details This function clears timer capture trigger interrupt flag to 0. + */ +static __INLINE void TIMER_ClearCaptureIntFlag(TIMER_T *timer) +{ + timer->EINTSTS = TIMER_EINTSTS_CAPIF_Msk; +} + +/** + * @brief Get Timer Wake-up Flag + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * + * @retval 0 Timer does not cause CPU wake-up + * @retval 1 Timer interrupt event cause CPU wake-up + * + * @details This function indicates timer interrupt event has waked up system or not. + */ +static __INLINE uint32_t TIMER_GetWakeupFlag(TIMER_T *timer) +{ + return (timer->INTSTS & TIMER_INTSTS_TWKF_Msk ? 1 : 0); +} + +/** + * @brief Clear Timer Wake-up Flag + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * + * @return None + * + * @details This function clears the timer wake-up system flag to 0. + */ +static __INLINE void TIMER_ClearWakeupFlag(TIMER_T *timer) +{ + timer->INTSTS = (timer->INTSTS & ~TIMER_INTSTS_TIF_Msk) | TIMER_INTSTS_TWKF_Msk; +} + +/** + * @brief Get Capture value + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * + * @return 24-bit Capture Value + * + * @details This function reports the current 24-bit timer capture value. + */ +static __INLINE uint32_t TIMER_GetCaptureData(TIMER_T *timer) +{ + return timer->CAP; +} + +/** + * @brief Get Counter value + * + * @param[in] timer The pointer of the specified Timer module. It could be TIMER0, TIMER1, TIMER2, TIMER3. + * + * @return 24-bit Counter Value + * + * @details This function reports the current 24-bit timer counter value. + */ +static __INLINE uint32_t TIMER_GetCounter(TIMER_T *timer) +{ + return timer->CNT; +} + +uint32_t TIMER_Open(TIMER_T *timer, uint32_t u32Mode, uint32_t u32Freq); +void TIMER_Close(TIMER_T *timer); +void TIMER_Delay(TIMER_T *timer, uint32_t u32Usec); +void TIMER_EnableCapture(TIMER_T *timer, uint32_t u32CapMode, uint32_t u32Edge); +void TIMER_DisableCapture(TIMER_T *timer); +void TIMER_EnableEventCounter(TIMER_T *timer, uint32_t u32Edge); +void TIMER_DisableEventCounter(TIMER_T *timer); +uint32_t TIMER_GetModuleClock(TIMER_T *timer); + +/*@}*/ /* end of group TIMER_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group TIMER_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +#ifdef __cplusplus +} +#endif + +#endif //__TIMER_H__ + +/*** (C) COPYRIGHT 2013~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_tk.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_tk.c new file mode 100644 index 00000000000..4dcd0dc97d9 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_tk.c @@ -0,0 +1,265 @@ +/**************************************************************************//** + * @file tk.c + * @version V1.00 + * $Revision: 6 $ + * $Date: 15/08/24 4:54p $ + * @brief M451 series TK driver source file + * + * @note + * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved. + * +*****************************************************************************/ +#include "M451Series.h" + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup TK_Driver TK Driver + @{ +*/ + + +/** @addtogroup TK_EXPORTED_FUNCTIONS TK Exported Functions + @{ +*/ + + +/** + * @brief Enable touch key function + * @param None + * @return None + * @note This function will enable touch key function and initial idle and polarity state as GND first for all scan keys + * \hideinitializer + */ + +void TK_Open(void) +{ + TK->CTL |= TK_CTL_TKEN_Msk; + //set idle and polarity state as GND + TK->IDLESEL = 0; + TK->POLSEL = 0; + TK->POLCTL &= ~(TK_POLCTL_IDLS16_Msk | TK_POLCTL_POLSEL16_Msk); +} + +/** + * @brief Disable touch key function + * @param None + * @return None + * \hideinitializer + */ +void TK_Close(void) +{ + TK->CTL &= ~TK_CTL_TKEN_Msk; +} + +/** + * @brief Set touch key scan mode + * @param[in] u32Mode Single ,periodic or all key scan mode + * - \ref TK_SCAN_MODE_SINGLE + * - \ref TK_SCAN_MODE_PERIODIC + * - \ref TK_SCAN_MODE_ALL_KEY + * - \ref TK_SCAN_MODE_PERIODIC_ALL_KEY + * @return None + * @details This function is used to set touch key scan mode. + * @note If touch key controller sets as periodic mode, touch key will be trigger scan by Timer0. So Timer0 must be enabled and operated in periodic mode. + * If touch key controller sets as single scan mode, touch key can be trigger scan by calling TK_START_SCAN(). + * \hideinitializer + */ +void TK_SetScanMode(uint32_t u32Mode) +{ + TK->CTL &= ~TK_CTL_TMRTRGEN_Msk; + TK->REFCTL &= ~TK_REFCTL_SCANALL_Msk; + if(u32Mode == TK_SCAN_MODE_PERIODIC) + { + TK->CTL |= u32Mode; + } + else if(u32Mode == TK_SCAN_MODE_ALL_KEY) + { + TK->REFCTL |= u32Mode; + } + else if(u32Mode == TK_SCAN_MODE_PERIODIC_ALL_KEY) + { + TK->CTL |= TK_CTL_TMRTRGEN_Msk; + TK->REFCTL |= TK_REFCTL_SCANALL_Msk; + } +} + +/** + * @brief Configure touch key scan sensitivity + * @param[in] u32PulseWidth Sensing pulse width + * - \ref TK_SENSE_PULSE_1 + * - \ref TK_SENSE_PULSE_2 + * - \ref TK_SENSE_PULSE_4 + * - \ref TK_SENSE_PULSE_8 + * @param[in] u32SenseCnt Sensing count + * - \ref TK_SENSE_CNT_128 + * - \ref TK_SENSE_CNT_255 + * - \ref TK_SENSE_CNT_511 + * - \ref TK_SENSE_CNT_1023 + * @param[in] u32AVCCHSel voltage selection + * - \ref TK_AVCCH_1_DIV_16 + * - \ref TK_AVCCH_1_DIV_8 + * - \ref TK_AVCCH_3_DIV_16 + * - \ref TK_AVCCH_1_DIV_4 + * - \ref TK_AVCCH_5_DIV_16 + * - \ref TK_AVCCH_3_DIV_8 + * - \ref TK_AVCCH_7_DIV_16 + * - \ref TK_AVCCH_1_DIV_2 + * @return None + * @details This function is used to configure touch key scan sensitivity. + * \hideinitializer + */ +void TK_ConfigSensitivity(uint32_t u32PulseWidth, uint32_t u32SenseCnt, uint32_t u32AVCCHSel) +{ + TK->REFCTL = (TK->REFCTL & ~(TK_REFCTL_SENPTCTL_Msk | TK_REFCTL_SENTCTL_Msk)) | (u32PulseWidth | u32SenseCnt); + TK->CTL = (TK->CTL & ~TK_CTL_AVCCHSEL_Msk) | u32AVCCHSel; +} + +/** + * @brief Set touch key capacitor bank polarity + * @param[in] u32CapBankPolSel capacitor bank polarity selection + * - \ref TK_CAP_BANK_POL_SEL_GND + * - \ref TK_CAP_BANK_POL_SEL_AVCCH + * - \ref TK_CAP_BANK_POL_SEL_VDD + * @return None + * @details This function is used to set touch key capacitor bank polarity. + * \hideinitializer + */ +void TK_SetCapBankPol(uint32_t u32CapBankPolSel) +{ + TK->POLCTL = (TK->POLCTL & ~TK_POLCTL_CBPOLSEL_Msk) | u32CapBankPolSel; +} + +/** + * @brief Configure touch key polarity + * @param[in] u32Mask Combination of touch keys which need to be configured + * @param[in] u32TKnPolSel touch key polarity selection + * - \ref TK_TKn_POL_SEL_GND + * - \ref TK_TKn_POL_SEL_AVCCH + * - \ref TK_TKn_POL_SEL_VDD + * @return None + * @details This function is used to configure touch key polarity. + * \hideinitializer + */ +void TK_SetTkPol(uint32_t u32Mask, uint32_t u32PolSel) +{ + uint32_t i; + + if((1ul << 16) & u32Mask) + TK->POLCTL = (TK->POLCTL & ~TK_POLCTL_POLSEL16_Msk) | (u32PolSel << TK_POLCTL_POLSEL16_Pos); + + for(i = 0 ; i < 16 ; i++) + { + if((1ul << i) & u32Mask) + TK->POLSEL = (TK->POLSEL & ~(TK_POLSEL_POLSELn_Msk << (i*2))) | (u32PolSel << (i*2)); + } +} + +/** + * @brief Enable the polarity of specified touch key(s) + * @param[in] u32Mask Combination of enabled scan keys. Each bit corresponds to a touch key + * Bit 0 represents touch key 0, bit 1 represents touch key 1... + * @return None + * @details This function is used to enable the polarity of specified touch key(s). + * \hideinitializer + */ +void TK_EnableTkPolarity(uint32_t u32Mask) +{ + TK->POLCTL |= (u32Mask << TK_POLCTL_POLEN0_Pos); +} + +/** + * @brief Disable the polarity of specified touch key(s) + * @param[in] u32Mask Combination of enabled scan keys. Each bit corresponds to a touch key + * Bit 0 represents touch key 0, bit 1 represents touch key 1... + * @return None + * @details This function is used to disable the polarity of specified touch key(s). + * \hideinitializer + */ +void TK_DisableTkPolarity(uint32_t u32Mask) +{ + TK->POLCTL &= ~(u32Mask << TK_POLCTL_POLEN0_Pos); +} + +/** + * @brief Set complement capacitor bank data of specified touch key + * @param[in] u32TKNum Touch key number. The valid value is 0~16. + * @param[in] u32CapData Complement capacitor bank data. The valid value is 0~0xFF. + * @return None + * @details This function is used to set complement capacitor bank data of specified touch key. + * \hideinitializer + */ +void TK_SetCompCapBankData(uint32_t u32TKNum, uint32_t u32CapData) +{ + *(__IO uint32_t *)(&(TK->CCBDAT0) + (u32TKNum >> 2)) &= ~(TK_CCBDAT0_CCBDAT0_Msk << (u32TKNum % 4 * 8)); + *(__IO uint32_t *)(&(TK->CCBDAT0) + (u32TKNum >> 2)) |= (u32CapData << (u32TKNum % 4 * 8)); +} + +/** + * @brief Set complement capacitor bank data of reference touch key + * @param[in] u32CapData Complement capacitor bank data. The valid value is 0~0xFF. + * @return None + * @details This function is used to set complement capacitor bank data of reference touch key. + * \hideinitializer + */ +void TK_SetRefKeyCapBankData(uint32_t u32CapData) +{ + TK->CCBDAT4 = (TK->CCBDAT4 & ~TK_CCBDAT4_REFCBDAT_Msk) | (u32CapData << TK_CCBDAT4_REFCBDAT_Pos); +} + +/** + * @brief Set high and low threshold of specified touch key for threshold control interrupt + * @param[in] u32TKNum Touch key number. The valid value is 0~16. + * @param[in] u32HighLevel High level for touch key threshold control. The valid value is 0~0xFF. + * @param[in] u32LowLevel Low level for touch key threshold control. The valid value is 0~0xFF. + * @return None + * @details This function is used to set high and low threshold of specified touch key for threshold control interrupt. + * \hideinitializer + */ +void TK_SetScanThreshold(uint32_t u32TKNum, uint32_t u32HighLevel, uint32_t u32LowLevel) +{ + *(__IO uint32_t *)(&(TK->TH0_1) + (u32TKNum >> 1)) &= ~((TK_TH0_1_HTH0_Msk | TK_TH0_1_LTH0_Msk) << (u32TKNum % 2 * 16)); + *(__IO uint32_t *)(&(TK->TH0_1) + (u32TKNum >> 1)) |= ((u32HighLevel << TK_TH0_1_HTH0_Pos) | (u32LowLevel << TK_TH0_1_LTH0_Pos)) << (u32TKNum % 2 * 16); +} + +/** + * @brief Enable touch key scan interrupt + * @param[in] u32Msk Interrupt type selection. + * - \ref TK_INT_EN_SCAN_COMPLETE + * - \ref TK_INT_EN_SCAN_COMPLETE_EDGE_TH + * - \ref TK_INT_EN_SCAN_COMPLETE_LEVEL_TH + * @return None + * @details This function is used to enable touch key scan interrupt. + * @note It need disable the enabled interrupt type first by TK_DisableInt() before to change enabled interrupt type. + * \hideinitializer + */ +void TK_EnableInt(uint32_t u32Msk) +{ + TK->INTEN |= u32Msk; +} + +/** + * @brief Disable touch key scan interrupt + * @param[in] u32Msk Interrupt type selection. + * - \ref TK_INT_EN_SCAN_COMPLETE + * - \ref TK_INT_EN_SCAN_COMPLETE_EDGE_TH + * - \ref TK_INT_EN_SCAN_COMPLETE_LEVEL_TH + * @return None + * @details This function is used to disable touch key scan interrupt. +* @note It need disable the enabled interrupt type first by TK_DisableInt() before to change enabled interrupt type. + * \hideinitializer + */ +void TK_DisableInt(uint32_t u32Msk) +{ + TK->INTEN &= ~u32Msk; +} + + +/*@}*/ /* end of group TK_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group TK_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +/*** (C) COPYRIGHT 2014~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_tk.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_tk.h new file mode 100644 index 00000000000..ccbbadf6574 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_tk.h @@ -0,0 +1,302 @@ +/**************************************************************************//** + * @file tk.h + * @version V1.00 + * $Revision: 6 $ + * $Date: 15/08/24 4:52p $ + * @brief M451 Series TK Driver Header File + * + * @note + * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved. + * + ******************************************************************************/ +#ifndef __TK_H__ +#define __TK_H__ + +#include "M451Series.h" + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup TK_Driver TK Driver + @{ +*/ + +/** @addtogroup TK_EXPORTED_CONSTANTS TK Exported Constants + @{ +*/ + +#define TK_SCAN_MODE_SINGLE (0UL) /*!< Touch key single scan mode */ +#define TK_SCAN_MODE_PERIODIC (TK_CTL_TMRTRGEN_Msk) /*!< Touch key periodic scan mode */ +#define TK_SCAN_MODE_ALL_KEY (TK_REFCTL_SCANALL_Msk) /*!< Touch key all keys scan mode */ +#define TK_SCAN_MODE_PERIODIC_ALL_KEY (TK_CTL_TMRTRGEN_Msk | TK_REFCTL_SCANALL_Msk) /*!< Touch key periodic with all keys scan mode */ + +#define TK_SENSE_PULSE_1 (0UL << TK_REFCTL_SENPTCTL_Pos) /*!< Touch key sensing pulse width is 1us */ +#define TK_SENSE_PULSE_2 (1UL << TK_REFCTL_SENPTCTL_Pos) /*!< Touch key sensing pulse width is 2us */ +#define TK_SENSE_PULSE_4 (2UL << TK_REFCTL_SENPTCTL_Pos) /*!< Touch key sensing pulse width is 4us */ +#define TK_SENSE_PULSE_8 (3UL << TK_REFCTL_SENPTCTL_Pos) /*!< Touch key sensing pulse width is 8us */ + +#define TK_SENSE_CNT_128 (0UL << TK_REFCTL_SENTCTL_Pos) /*!< Touch key sensing count is 128 */ +#define TK_SENSE_CNT_255 (1UL << TK_REFCTL_SENTCTL_Pos) /*!< Touch key sensing count is 255 */ +#define TK_SENSE_CNT_511 (2UL << TK_REFCTL_SENTCTL_Pos) /*!< Touch key sensing count is 511 */ +#define TK_SENSE_CNT_1023 (3UL << TK_REFCTL_SENTCTL_Pos) /*!< Touch key sensing count is 1023 */ + +#define TK_AVCCH_1_DIV_16 (0UL << TK_CTL_AVCCHSEL_Pos) /*!< Touch key AVCCH voltage is 1/16 VDD */ +#define TK_AVCCH_1_DIV_8 (1UL << TK_CTL_AVCCHSEL_Pos) /*!< Touch key AVCCH voltage is 1/8 VDD */ +#define TK_AVCCH_3_DIV_16 (2UL << TK_CTL_AVCCHSEL_Pos) /*!< Touch key AVCCH voltage is 3/16 VDD */ +#define TK_AVCCH_1_DIV_4 (3UL << TK_CTL_AVCCHSEL_Pos) /*!< Touch key AVCCH voltage is 1/4 VDD */ +#define TK_AVCCH_5_DIV_16 (4UL << TK_CTL_AVCCHSEL_Pos) /*!< Touch key AVCCH voltage is 5/16 VDD */ +#define TK_AVCCH_3_DIV_8 (5UL << TK_CTL_AVCCHSEL_Pos) /*!< Touch key AVCCH voltage is 3/8 VDD */ +#define TK_AVCCH_7_DIV_16 (6UL << TK_CTL_AVCCHSEL_Pos) /*!< Touch key AVCCH voltage is 7/16 VDD */ +#define TK_AVCCH_1_DIV_2 (7UL << TK_CTL_AVCCHSEL_Pos) /*!< Touch key AVCCH voltage is 1/2 VDD */ + +#define TK_CAP_BANK_POL_SEL_GND (0UL << TK_POLCTL_CBPOLSEL_Pos) /*!< Touch key capacitor bank polarity is GND */ +#define TK_CAP_BANK_POL_SEL_AVCCH (1UL << TK_POLCTL_CBPOLSEL_Pos) /*!< Touch key capacitor bank polarity is AVCCH */ +#define TK_CAP_BANK_POL_SEL_VDD (2UL << TK_POLCTL_CBPOLSEL_Pos) /*!< Touch key capacitor bank polarity is VDD */ + +#define TK_TKn_POL_SEL_GND (0UL) /*!< Touch key polarity is GND */ +#define TK_TKn_POL_SEL_AVCCH (1UL) /*!< Touch key polarity is AVCCH */ +#define TK_TKn_POL_SEL_VDD (2UL) /*!< Touch key polarity is VDD */ + +#define TK_INT_EN_SCAN_COMPLETE (TK_INTEN_SCINTEN_Msk) /*!< Touch key enable scan complete interrupt */ +#define TK_INT_EN_SCAN_COMPLETE_EDGE_TH (TK_INTEN_SCTHIEN_Msk) /*!< Touch key enable scan complete with threshold interrupt of edge trigger mode */ +#define TK_INT_EN_SCAN_COMPLETE_LEVEL_TH (TK_INTEN_THIMOD_Msk | TK_INTEN_SCTHIEN_Msk) /*!< Touch key enable scan complete with threshold interrupt of level trigger mode */ + +#define TK_INT_SCAN_COMPLETE (TK_STATUS_SCIF_Msk) /*!< Touch key scan complete interrupt */ +#define TK_INT_SCAN_COMPLETE_TH_ALL (0x1FFFF02UL) /*!< Touch key scan complete or all touch keys threshold control interrupt */ +#define TK_INT_SCAN_TH_ALL (0x1FFFF00UL) /*!< ALL Touch key threshold control interrupt */ +#define TK_INT_SCAN_TH_TK0 (TK_STATUS_TKIF0_Msk) /*!< Touch key 0 threshold control interrupt */ +#define TK_INT_SCAN_TH_TK1 (TK_STATUS_TKIF1_Msk) /*!< Touch key 1 threshold control interrupt */ +#define TK_INT_SCAN_TH_TK2 (TK_STATUS_TKIF2_Msk) /*!< Touch key 2 threshold control interrupt */ +#define TK_INT_SCAN_TH_TK3 (TK_STATUS_TKIF3_Msk) /*!< Touch key 3 threshold control interrupt */ +#define TK_INT_SCAN_TH_TK4 (TK_STATUS_TKIF4_Msk) /*!< Touch key 4 threshold control interrupt */ +#define TK_INT_SCAN_TH_TK5 (TK_STATUS_TKIF5_Msk) /*!< Touch key 5 threshold control interrupt */ +#define TK_INT_SCAN_TH_TK6 (TK_STATUS_TKIF6_Msk) /*!< Touch key 6 threshold control interrupt */ +#define TK_INT_SCAN_TH_TK7 (TK_STATUS_TKIF7_Msk) /*!< Touch key 7 threshold control interrupt */ +#define TK_INT_SCAN_TH_TK8 (TK_STATUS_TKIF8_Msk) /*!< Touch key 8 threshold control interrupt */ +#define TK_INT_SCAN_TH_TK9 (TK_STATUS_TKIF9_Msk) /*!< Touch key 9 threshold control interrupt */ +#define TK_INT_SCAN_TH_TK10 (TK_STATUS_TKIF10_Msk) /*!< Touch key 10 threshold control interrupt */ +#define TK_INT_SCAN_TH_TK11 (TK_STATUS_TKIF11_Msk) /*!< Touch key 11 threshold control interrupt */ +#define TK_INT_SCAN_TH_TK12 (TK_STATUS_TKIF12_Msk) /*!< Touch key 12 threshold control interrupt */ +#define TK_INT_SCAN_TH_TK13 (TK_STATUS_TKIF13_Msk) /*!< Touch key 13 threshold control interrupt */ +#define TK_INT_SCAN_TH_TK14 (TK_STATUS_TKIF14_Msk) /*!< Touch key 14 threshold control interrupt */ +#define TK_INT_SCAN_TH_TK15 (TK_STATUS_TKIF15_Msk) /*!< Touch key 15 threshold control interrupt */ +#define TK_INT_SCAN_TH_TK16 (TK_STATUS_TKIF16_Msk) /*!< Touch key 16 threshold control interrupt */ + + +/*@}*/ /* end of group TK_EXPORTED_CONSTANTS */ + + +/** @addtogroup TK_EXPORTED_FUNCTIONS TK Exported Functions + @{ +*/ + +/** + * @brief Enable scan key(s) + * @param[in] u32Mask Combination of enabled scan keys. Each bit corresponds to a touch key. + * Bit 0 represents touch key 0, bit 1 represents touch key 1... + * @return None + * @note Touch key 16 is the default reference key, so touch key 16 is enabled. + * \hideinitializer + */ +#define TK_ENABLE_SCAN_KEY(u32Mask) (TK->CTL |= (u32Mask)) + +/** + * @brief Disable scan key(s) + * @param[in] u32Mask Combination of disabled scan keys. Each bit corresponds to a touch key. + * Bit 0 represents touch key 0, bit 1 represents touch key 1... + * @return None + * \hideinitializer + */ +#define TK_DISABLE_SCAN_KEY(u32Mask) (TK->CTL &= ~(u32Mask)) + +/** + * @brief Enable reference key(s) + * @param[in] u32Mask Combination of enabled reference keys. Each bit corresponds to a touch key. + * Bit 0 represents touch key 0, bit 1 represents touch key 1... + * @return None + * @note Touch key 16 is the default reference key, so touch key 16 is enabled. + * \hideinitializer + */ +#define TK_ENABLE_REF_KEY(u32Mask) (TK->REFCTL |= (u32Mask)) + +/** + * @brief Disable reference key(s) + * @param[in] u32Mask Combination of disabled reference keys. Each bit corresponds to a touch key. + * Bit 0 represents touch key 0, bit 1 represents touch key 1... + * @return None + * @note It must enable a reference key and touch key 16 is the default reference key. + * If no any one touch key as reference key except touch key 16, then reference Touch key 16 can't be disable. + * \hideinitializer + */ +#define TK_DISABLE_REF_KEY(u32Mask) (TK->REFCTL &= ~(u32Mask)) + +/** + * @brief Initiate enabled key(s) scan immediately. + * @param None + * @return None + * \hideinitializer + */ +#define TK_START_SCAN() (TK->CTL |= TK_CTL_SCAN_Msk) + +/** + * @brief Set touch key Sensing pulse width. + * @param[in] u32PulseWidth Sensing pulse width. + * - \ref TK_SENSE_PULSE_1 + * - \ref TK_SENSE_PULSE_2 + * - \ref TK_SENSE_PULSE_4 + * - \ref TK_SENSE_PULSE_8 + * @return None + * \hideinitializer + */ +#define TK_SET_PULSE_WIDTH(u32PulseWidth) (TK->REFCTL = (TK->REFCTL & ~TK_REFCTL_SENPTCTL_Msk) | (u32PulseWidth)) + +/** + * @brief Set touch key Sensing count. + * @param[in] u32SenseCnt Sensing count. + * - \ref TK_SENSE_CNT_128 + * - \ref TK_SENSE_CNT_255 + * - \ref TK_SENSE_CNT_511 + * - \ref TK_SENSE_CNT_1023 + * @return None + * \hideinitializer + */ +#define TK_SET_SENSING_CNT(u32SenseCnt) (TK->REFCTL = (TK->REFCTL & ~TK_REFCTL_SENTCTL_Msk) | (u32SenseCnt)) + + +/** + * @brief Set touch key AVCCH voltage. + * @param[in] u32AVCCHSel voltage selection. + * - \ref TK_AVCCH_1_DIV_16 + * - \ref TK_AVCCH_1_DIV_8 + * - \ref TK_AVCCH_3_DIV_16 + * - \ref TK_AVCCH_1_DIV_4 + * - \ref TK_AVCCH_5_DIV_16 + * - \ref TK_AVCCH_3_DIV_8 + * - \ref TK_AVCCH_7_DIV_16 + * - \ref TK_AVCCH_1_DIV_2 + * @return None + * \hideinitializer + */ +#define TK_SET_AVCCH(u32AVCCHSel) (TK->CTL = (TK->CTL & ~TK_CTL_AVCCHSEL_Msk) | (u32AVCCHSel)) + +/** + * @brief Get touch key complement capacitor bank data. + * @param[in] u32TKNum Touch key number. The valid value is 0~16. + * @return Complement capacitor bank data + * \hideinitializer + */ +#define TK_GET_COMP_CAP_BANK_DATA(u32TKNum) (((*(__IO uint32_t *) (&(TK->CCBDAT0) + ((u32TKNum) >> 2))) >> ((u32TKNum) % 4 * 8) & TK_CCBDAT0_CCBDAT0_Msk)) + +/** + * @brief Get touch key sensing result data. + * @param[in] u32TKNum Touch key number. The valid value is 0~16. + * @return Sensing result data + * \hideinitializer + */ +#define TK_GET_SENSE_DATA(u32TKNum) (((*(__IO uint32_t *) (&(TK->DAT0) + ((u32TKNum) >> 2))) >> ((u32TKNum) % 4 * 8) & TK_DAT0_TKDAT0_Msk)) + +/** + * @brief Get touch key busy status. + * @param None + * @retval 0 Touch key is scan completed or stopped. + * @retval 1 Touch key is busy. + * \hideinitializer + */ +#define TK_IS_BUSY() ((TK->STATUS & TK_STATUS_BUSY_Msk) ? 1: 0) + +/** + * @brief Get touch key interrupt flag. + * @param[in] u32Mask Interrupt flag type selection. + * - \ref TK_INT_SCAN_COMPLETE + * - \ref TK_INT_SCAN_COMPLETE_TH_ALL + * - \ref TK_INT_SCAN_TH_ALL + * - \ref TK_INT_SCAN_TH_TK0 + * - \ref TK_INT_SCAN_TH_TK1 + * - \ref TK_INT_SCAN_TH_TK2 + * - \ref TK_INT_SCAN_TH_TK3 + * - \ref TK_INT_SCAN_TH_TK4 + * - \ref TK_INT_SCAN_TH_TK5 + * - \ref TK_INT_SCAN_TH_TK6 + * - \ref TK_INT_SCAN_TH_TK7 + * - \ref TK_INT_SCAN_TH_TK8 + * - \ref TK_INT_SCAN_TH_TK9 + * - \ref TK_INT_SCAN_TH_TK10 + * - \ref TK_INT_SCAN_TH_TK11 + * - \ref TK_INT_SCAN_TH_TK12 + * - \ref TK_INT_SCAN_TH_TK13 + * - \ref TK_INT_SCAN_TH_TK14 + * - \ref TK_INT_SCAN_TH_TK15 + * - \ref TK_INT_SCAN_TH_TK16 + * @retval 0 Touch key has no interrupt. + * @retval 1 Touch key is scan completed or threshold control event occurs. + * \hideinitializer + */ +#define TK_GET_INT_STATUS(u32Mask) ((TK->STATUS & (u32Mask)) ? 1: 0) + +/** + * @brief Clear touch key interrupt flag. + * @param[in] u32Mask Interrupt flag type selection. + * - \ref TK_INT_SCAN_COMPLETE + * - \ref TK_INT_SCAN_COMPLETE_TH_ALL + * - \ref TK_INT_SCAN_TH_ALL + * - \ref TK_INT_SCAN_TH_TK0 + * - \ref TK_INT_SCAN_TH_TK1 + * - \ref TK_INT_SCAN_TH_TK2 + * - \ref TK_INT_SCAN_TH_TK3 + * - \ref TK_INT_SCAN_TH_TK4 + * - \ref TK_INT_SCAN_TH_TK5 + * - \ref TK_INT_SCAN_TH_TK6 + * - \ref TK_INT_SCAN_TH_TK7 + * - \ref TK_INT_SCAN_TH_TK8 + * - \ref TK_INT_SCAN_TH_TK9 + * - \ref TK_INT_SCAN_TH_TK10 + * - \ref TK_INT_SCAN_TH_TK11 + * - \ref TK_INT_SCAN_TH_TK12 + * - \ref TK_INT_SCAN_TH_TK13 + * - \ref TK_INT_SCAN_TH_TK14 + * - \ref TK_INT_SCAN_TH_TK15 + * - \ref TK_INT_SCAN_TH_TK16 + * @return None + * \hideinitializer + */ +#define TK_CLR_INT_FLAG(u32Mask) (TK->STATUS = (u32Mask)) + + +/*---------------------------------------------------------------------------------------------------------*/ +/* Define TK functions prototype */ +/*---------------------------------------------------------------------------------------------------------*/ +void TK_Open(void); +void TK_Close(void); +void TK_SetScanMode(uint32_t u32Mode); +void TK_ConfigSensitivity(uint32_t u32PulseWidth, uint32_t u32SenseCnt, uint32_t u32AVCCHSel); +void TK_SetCapBankPol(uint32_t u32CapBankPolSel); +void TK_EnableTkPolarity(uint32_t u32Mask); +void TK_DisableTkPolarity(uint32_t u32Mask); +void TK_SetCompCapBankData(uint32_t u32TKNum, uint32_t u32CapData); +void TK_SetTkPol(uint32_t u32Mask, uint32_t u32PolSel); +void TK_SetRefKeyCapBankData(uint32_t u32CapData); +void TK_SetScanThreshold(uint32_t u32TKNum, uint32_t u32HighLevel, uint32_t u32LowLevel); +void TK_EnableInt(uint32_t u32Msk); +void TK_DisableInt(uint32_t u32Msk); + + +/*@}*/ /* end of group TK_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group TK_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +#ifdef __cplusplus +} +#endif + +#endif //__TK_H__ + +/*** (C) COPYRIGHT 2014~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_uart.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_uart.c new file mode 100644 index 00000000000..7b9047b70a9 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_uart.c @@ -0,0 +1,512 @@ +/**************************************************************************//** + * @file uart.c + * @version V3.00 + * $Revision: 22 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series UART driver source file + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ + +#include +#include "M451Series.h" + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup UART_Driver UART Driver + @{ +*/ + +/** @addtogroup UART_EXPORTED_FUNCTIONS UART Exported Functions + @{ +*/ + +/** + * @brief Clear UART specified interrupt flag + * + * @param[in] uart The pointer of the specified UART module. + * @param[in] u32InterruptFlag The specified interrupt of UART module. + * - \ref UART_INTSTS_LININT_Msk : LIN bus interrupt + * - \ref UART_INTSTS_DATWKIF_Msk : Data Wake-up interrupt + * - \ref UART_INTSTS_CTSWKIF_Msk : CTS Wake-up interrupt + * - \ref UART_INTSTS_BUFERRINT_Msk : Buffer Error interrupt + * - \ref UART_INTSTS_MODEMINT_Msk : Modem Status interrupt + * - \ref UART_INTSTS_RLSINT_Msk : Receive Line Status interrupt + * + * @return None + * + * @details The function is used to clear UART specified interrupt flag. + */ + +void UART_ClearIntFlag(UART_T* uart , uint32_t u32InterruptFlag) +{ + + if(u32InterruptFlag & UART_INTSTS_RLSINT_Msk) /* Clear Receive Line Status Interrupt */ + { + uart->FIFOSTS = UART_FIFOSTS_BIF_Msk | UART_FIFOSTS_FEF_Msk | UART_FIFOSTS_FEF_Msk; + uart->FIFOSTS = UART_FIFOSTS_ADDRDETF_Msk; + } + + if(u32InterruptFlag & UART_INTSTS_MODEMINT_Msk) /* Clear Modem Status Interrupt */ + uart->MODEMSTS |= UART_MODEMSTS_CTSDETF_Msk; + + if(u32InterruptFlag & UART_INTSTS_BUFERRINT_Msk) /* Clear Buffer Error Interrupt */ + { + uart->FIFOSTS = UART_FIFOSTS_RXOVIF_Msk | UART_FIFOSTS_TXOVIF_Msk; + } + + if(u32InterruptFlag & UART_INTSTS_CTSWKIF_Msk) /* Clear CTS Wake-up Interrupt */ + { + uart->INTSTS = UART_INTSTS_CTSWKIF_Msk; + } + + if(u32InterruptFlag & UART_INTSTS_DATWKIF_Msk) /* Clear Data Wake-up Interrupt */ + { + uart->INTSTS = UART_INTSTS_DATWKIF_Msk; + } + + if(u32InterruptFlag & UART_INTSTS_LININT_Msk) /* Clear LIN Bus Interrupt */ + { + uart->INTSTS = UART_INTSTS_LINIF_Msk; + uart->LINSTS = UART_LINSTS_BITEF_Msk | UART_LINSTS_BRKDETF_Msk | + UART_LINSTS_SLVSYNCF_Msk | UART_LINSTS_SLVIDPEF_Msk | + UART_LINSTS_SLVHEF_Msk | UART_LINSTS_SLVHDETF_Msk ; + } +} + + +/** + * @brief Disable UART interrupt + * + * @param[in] uart The pointer of the specified UART module. + * + * @return None + * + * @details The function is used to disable UART interrupt. + */ +void UART_Close(UART_T* uart) +{ + uart->INTEN = 0; +} + + +/** + * @brief Disable UART auto flow control function + * + * @param[in] uart The pointer of the specified UART module. + * + * @return None + * + * @details The function is used to disable UART auto flow control. + */ +void UART_DisableFlowCtrl(UART_T* uart) +{ + uart->INTEN &= ~(UART_INTEN_ATORTSEN_Msk | UART_INTEN_ATOCTSEN_Msk); +} + + +/** + * @brief Disable UART specified interrupt + * + * @param[in] uart The pointer of the specified UART module. + * @param[in] u32InterruptFlag The specified interrupt of UART module. + * - \ref UART_INTEN_WKCTSIEN_Msk : CTS wake-up interrupt + * - \ref UART_INTEN_WKDATIEN_Msk : Data wake-up interrupt + * - \ref UART_INTEN_LINIEN_Msk : Lin bus interrupt + * - \ref UART_INTEN_BUFERRIEN_Msk : Buffer Error interrupt + * - \ref UART_INTEN_RXTOIEN_Msk : Rx time-out interrupt + * - \ref UART_INTEN_MODEMIEN_Msk : Modem status interrupt + * - \ref UART_INTEN_RLSIEN_Msk : Receive Line status interrupt + * - \ref UART_INTEN_THREIEN_Msk : Tx empty interrupt + * - \ref UART_INTEN_RDAIEN_Msk : Rx ready interrupt * + * + * @return None + * + * @details The function is used to disable UART specified interrupt and disable NVIC UART IRQ. + */ +void UART_DisableInt(UART_T* uart, uint32_t u32InterruptFlag) +{ + /* Disable UART specified interrupt */ + UART_DISABLE_INT(uart, u32InterruptFlag); + + /* Disable NVIC UART IRQ */ + if(uart == UART0) + NVIC_DisableIRQ(UART0_IRQn); + else if(uart == UART1) + NVIC_DisableIRQ(UART1_IRQn); + else if(uart == UART2) + NVIC_DisableIRQ(UART2_IRQn); + else + NVIC_DisableIRQ(UART3_IRQn); +} + + +/** + * @brief Enable UART auto flow control function + * + * @param[in] uart The pointer of the specified UART module. + * + * @return None + * + * @details The function is used to Enable UART auto flow control. + */ +void UART_EnableFlowCtrl(UART_T* uart) +{ + /* Set RTS pin output is low level active */ + uart->MODEM |= UART_MODEM_RTSACTLV_Msk; + + /* Set CTS pin input is low level active */ + uart->MODEMSTS |= UART_MODEMSTS_CTSACTLV_Msk; + + /* Set RTS and CTS auto flow control enable */ + uart->INTEN |= UART_INTEN_ATORTSEN_Msk | UART_INTEN_ATOCTSEN_Msk; +} + + +/** + * @brief The function is used to enable UART specified interrupt and enable NVIC UART IRQ. + * + * @param[in] uart The pointer of the specified UART module. + * @param[in] u32InterruptFlag The specified interrupt of UART module: + * - \ref UART_INTEN_WKCTSIEN_Msk : CTS wake-up interrupt + * - \ref UART_INTEN_WKDATIEN_Msk : Data wake-up interrupt + * - \ref UART_INTEN_LINIEN_Msk : Lin bus interrupt + * - \ref UART_INTEN_BUFERRIEN_Msk : Buffer Error interrupt + * - \ref UART_INTEN_RXTOIEN_Msk : Rx time-out interrupt + * - \ref UART_INTEN_MODEMIEN_Msk : Modem status interrupt + * - \ref UART_INTEN_RLSIEN_Msk : Receive Line status interrupt + * - \ref UART_INTEN_THREIEN_Msk : Tx empty interrupt + * - \ref UART_INTEN_RDAIEN_Msk : Rx ready interrupt * + * + * @return None + * + * @details The function is used to enable UART specified interrupt and enable NVIC UART IRQ. + */ +void UART_EnableInt(UART_T* uart, uint32_t u32InterruptFlag) +{ + + /* Enable UART specified interrupt */ + UART_ENABLE_INT(uart, u32InterruptFlag); + + /* Enable NVIC UART IRQ */ + if(uart == UART0) + NVIC_EnableIRQ(UART0_IRQn); + else if(uart == UART1) + NVIC_EnableIRQ(UART1_IRQn); + else if(uart == UART2) + NVIC_EnableIRQ(UART2_IRQn); + else + NVIC_EnableIRQ(UART3_IRQn); + +} + + +/** + * @brief Open and set UART function + * + * @param[in] uart The pointer of the specified UART module. + * @param[in] u32baudrate The baudrate of UART module. + * + * @return None + * + * @details This function use to enable UART function and set baud-rate. + */ +void UART_Open(UART_T* uart, uint32_t u32baudrate) +{ + uint8_t u8UartClkSrcSel, u8UartClkDivNum; + uint32_t u32ClkTbl[4] = {__HXT, 0, __LXT, __HIRC}; + uint32_t u32Baud_Div = 0; + + /* Get UART clock source selection */ + u8UartClkSrcSel = (CLK->CLKSEL1 & CLK_CLKSEL1_UARTSEL_Msk) >> CLK_CLKSEL1_UARTSEL_Pos; + + /* Get UART clock divider number */ + u8UartClkDivNum = (CLK->CLKDIV0 & CLK_CLKDIV0_UARTDIV_Msk) >> CLK_CLKDIV0_UARTDIV_Pos; + + /* Select UART function */ + uart->FUNCSEL = UART_FUNCSEL_UART; + + /* Set UART line configuration */ + uart->LINE = UART_WORD_LEN_8 | UART_PARITY_NONE | UART_STOP_BIT_1; + + /* Set UART Rx and RTS trigger level */ + uart->FIFO &= ~(UART_FIFO_RFITL_Msk | UART_FIFO_RTSTRGLV_Msk); + + /* Get PLL clock frequency if UART clock source selection is PLL */ + if(u8UartClkSrcSel == 1) + u32ClkTbl[u8UartClkSrcSel] = CLK_GetPLLClockFreq(); + + /* Set UART baud rate */ + if(u32baudrate != 0) + { + u32Baud_Div = UART_BAUD_MODE2_DIVIDER((u32ClkTbl[u8UartClkSrcSel]) / (u8UartClkDivNum + 1), u32baudrate); + + if(u32Baud_Div > 0xFFFF) + uart->BAUD = (UART_BAUD_MODE0 | UART_BAUD_MODE0_DIVIDER((u32ClkTbl[u8UartClkSrcSel]) / (u8UartClkDivNum + 1), u32baudrate)); + else + uart->BAUD = (UART_BAUD_MODE2 | u32Baud_Div); + } +} + + +/** + * @brief Read UART data + * + * @param[in] uart The pointer of the specified UART module. + * @param[in] pu8RxBuf The buffer to receive the data of receive FIFO. + * @param[in] u32ReadBytes The the read bytes number of data. + * + * @return u32Count Receive byte count + * + * @details The function is used to read Rx data from RX FIFO and the data will be stored in pu8RxBuf. + */ +uint32_t UART_Read(UART_T* uart, uint8_t *pu8RxBuf, uint32_t u32ReadBytes) +{ + uint32_t u32Count, u32delayno; + + for(u32Count = 0; u32Count < u32ReadBytes; u32Count++) + { + u32delayno = 0; + + while(uart->FIFOSTS & UART_FIFOSTS_RXEMPTY_Msk) /* Check RX empty => failed */ + { + u32delayno++; + if(u32delayno >= 0x40000000) + return FALSE; + } + pu8RxBuf[u32Count] = uart->DAT; /* Get Data from UART RX */ + } + + return u32Count; + +} + + +/** + * @brief Set UART line configuration + * + * @param[in] uart The pointer of the specified UART module. + * @param[in] u32baudrate The register value of baudrate of UART module. + * If u32baudrate = 0, UART baudrate will not change. + * @param[in] u32data_width The data length of UART module. + * - \ref UART_WORD_LEN_5 + * - \ref UART_WORD_LEN_6 + * - \ref UART_WORD_LEN_7 + * - \ref UART_WORD_LEN_8 + * @param[in] u32parity The parity setting (none/odd/even/mark/space) of UART module. + * - \ref UART_PARITY_NONE + * - \ref UART_PARITY_ODD + * - \ref UART_PARITY_EVEN + * - \ref UART_PARITY_MARK + * - \ref UART_PARITY_SPACE + * @param[in] u32stop_bits The stop bit length (1/1.5/2 bit) of UART module. + * - \ref UART_STOP_BIT_1 + * - \ref UART_STOP_BIT_1_5 + * - \ref UART_STOP_BIT_2 + * + * @return None + * + * @details This function use to config UART line setting. + */ +void UART_SetLine_Config(UART_T* uart, uint32_t u32baudrate, uint32_t u32data_width, uint32_t u32parity, uint32_t u32stop_bits) +{ + uint8_t u8UartClkSrcSel, u8UartClkDivNum; + uint32_t u32ClkTbl[4] = {__HXT, 0, __LXT, __HIRC}; + uint32_t u32Baud_Div = 0; + + /* Get UART clock source selection */ + u8UartClkSrcSel = (CLK->CLKSEL1 & CLK_CLKSEL1_UARTSEL_Msk) >> CLK_CLKSEL1_UARTSEL_Pos; + + /* Get UART clock divider number */ + u8UartClkDivNum = (CLK->CLKDIV0 & CLK_CLKDIV0_UARTDIV_Msk) >> CLK_CLKDIV0_UARTDIV_Pos; + + /* Get PLL clock frequency if UART clock source selection is PLL */ + if(u8UartClkSrcSel == 1) + u32ClkTbl[u8UartClkSrcSel] = CLK_GetPLLClockFreq(); + + /* Set UART baud rate */ + if(u32baudrate != 0) + { + u32Baud_Div = UART_BAUD_MODE2_DIVIDER((u32ClkTbl[u8UartClkSrcSel]) / (u8UartClkDivNum + 1), u32baudrate); + + if(u32Baud_Div > 0xFFFF) + uart->BAUD = (UART_BAUD_MODE0 | UART_BAUD_MODE0_DIVIDER((u32ClkTbl[u8UartClkSrcSel]) / (u8UartClkDivNum + 1), u32baudrate)); + else + uart->BAUD = (UART_BAUD_MODE2 | u32Baud_Div); + } + + /* Set UART line configuration */ + uart->LINE = u32data_width | u32parity | u32stop_bits; +} + + +/** + * @brief Set Rx timeout count + * + * @param[in] uart The pointer of the specified UART module. + * @param[in] u32TOC Rx timeout counter. + * + * @return None + * + * @details This function use to set Rx timeout count. + */ +void UART_SetTimeoutCnt(UART_T* uart, uint32_t u32TOC) +{ + /* Set time-out interrupt comparator */ + uart->TOUT = (uart->TOUT & ~UART_TOUT_TOIC_Msk) | (u32TOC); + + /* Set time-out counter enable */ + uart->INTEN |= UART_INTEN_TOCNTEN_Msk; +} + + +/** + * @brief Select and configure IrDA function + * + * @param[in] uart The pointer of the specified UART module. + * @param[in] u32Buadrate The baudrate of UART module. + * @param[in] u32Direction The direction of UART module in IrDA mode: + * - \ref UART_IRDA_TXEN + * - \ref UART_IRDA_RXEN + * + * @return None + * + * @details The function is used to configure IrDA relative settings. It consists of TX or RX mode and baudrate. + */ +void UART_SelectIrDAMode(UART_T* uart, uint32_t u32Buadrate, uint32_t u32Direction) +{ + uint8_t u8UartClkSrcSel, u8UartClkDivNum; + uint32_t u32ClkTbl[4] = {__HXT, 0, __LXT, __HIRC}; + uint32_t u32Baud_Div; + + /* Select IrDA function mode */ + uart->FUNCSEL = UART_FUNCSEL_IrDA; + + /* Get UART clock source selection */ + u8UartClkSrcSel = (CLK->CLKSEL1 & CLK_CLKSEL1_UARTSEL_Msk) >> CLK_CLKSEL1_UARTSEL_Pos; + + /* Get UART clock divider number */ + u8UartClkDivNum = (CLK->CLKDIV0 & CLK_CLKDIV0_UARTDIV_Msk) >> CLK_CLKDIV0_UARTDIV_Pos; + + /* Get PLL clock frequency if UART clock source selection is PLL */ + if(u8UartClkSrcSel == 1) + u32ClkTbl[u8UartClkSrcSel] = CLK_GetPLLClockFreq(); + + /* Set UART IrDA baud rate in mode 0 */ + if(u32Buadrate != 0) + { + u32Baud_Div = UART_BAUD_MODE0_DIVIDER((u32ClkTbl[u8UartClkSrcSel]) / (u8UartClkDivNum + 1), u32Buadrate); + + if(u32Baud_Div < 0xFFFF) + uart->BAUD = (UART_BAUD_MODE0 | u32Baud_Div); + } + + /* Configure IrDA relative settings */ + if(u32Direction == UART_IRDA_RXEN) + { + uart->IRDA |= UART_IRDA_RXINV_Msk; //Rx signal is inverse + uart->IRDA &= ~UART_IRDA_TXEN_Msk; + } + else + { + uart->IRDA &= ~UART_IRDA_TXINV_Msk; //Tx signal is not inverse + uart->IRDA |= UART_IRDA_TXEN_Msk; + } + +} + + +/** + * @brief Select and configure RS485 function + * + * @param[in] uart The pointer of the specified UART module. + * @param[in] u32Mode The operation mode(NMM/AUD/AAD). + * - \ref UART_ALTCTL_RS485NMM_Msk + * - \ref UART_ALTCTL_RS485AUD_Msk + * - \ref UART_ALTCTL_RS485AAD_Msk + * @param[in] u32Addr The RS485 address. + * + * @return None + * + * @details The function is used to set RS485 relative setting. + */ +void UART_SelectRS485Mode(UART_T* uart, uint32_t u32Mode, uint32_t u32Addr) +{ + /* Select UART RS485 function mode */ + uart->FUNCSEL = UART_FUNCSEL_RS485; + + /* Set RS585 configuration */ + uart->ALTCTL &= ~(UART_ALTCTL_RS485NMM_Msk | UART_ALTCTL_RS485AUD_Msk | UART_ALTCTL_RS485AAD_Msk | UART_ALTCTL_ADDRMV_Msk); + uart->ALTCTL |= (u32Mode | (u32Addr << UART_ALTCTL_ADDRMV_Pos)); +} + + +/** + * @brief Select and configure LIN function + * + * @param[in] uart The pointer of the specified UART module. + * @param[in] u32Mode The LIN direction : + * - \ref UART_ALTCTL_LINTXEN_Msk + * - \ref UART_ALTCTL_LINRXEN_Msk + * @param[in] u32BreakLength The breakfield length. + * + * @return None + * + * @details The function is used to set LIN relative setting. + */ +void UART_SelectLINMode(UART_T* uart, uint32_t u32Mode, uint32_t u32BreakLength) +{ + /* Select LIN function mode */ + uart->FUNCSEL = UART_FUNCSEL_LIN; + + /* Select LIN function setting : Tx enable, Rx enable and break field length */ + uart->ALTCTL &= ~(UART_ALTCTL_LINTXEN_Msk | UART_ALTCTL_LINRXEN_Msk | UART_ALTCTL_BRKFL_Msk); + uart->ALTCTL |= (u32Mode | (u32BreakLength << UART_ALTCTL_BRKFL_Pos)); +} + + +/** + * @brief Write UART data + * + * @param[in] uart The pointer of the specified UART module. + * @param[in] pu8TxBuf The buffer to send the data to UART transmission FIFO. + * @param[out] u32WriteBytes The byte number of data. + * + * @return u32Count transfer byte count + * + * @details The function is to write data into TX buffer to transmit data by UART. + */ +uint32_t UART_Write(UART_T* uart, uint8_t *pu8TxBuf, uint32_t u32WriteBytes) +{ + uint32_t u32Count, u32delayno; + + for(u32Count = 0; u32Count != u32WriteBytes; u32Count++) + { + u32delayno = 0; + while((uart->FIFOSTS & UART_FIFOSTS_TXEMPTYF_Msk) == 0) /* Wait Tx empty and Time-out manner */ + { + u32delayno++; + if(u32delayno >= 0x40000000) + return FALSE; + } + uart->DAT = pu8TxBuf[u32Count]; /* Send UART Data from buffer */ + } + + return u32Count; + +} + + +/*@}*/ /* end of group UART_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group UART_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +/*** (C) COPYRIGHT 2012~2015 Nuvoton Technology Corp. ***/ + + + diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_uart.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_uart.h new file mode 100644 index 00000000000..071f4ff7b5d --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_uart.h @@ -0,0 +1,460 @@ +/****************************************************************************** + * @file uart.h + * @version V3.00 + * $Revision: 36 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series UART driver header file + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ +#ifndef __UART_H__ +#define __UART_H__ + + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup UART_Driver UART Driver + @{ +*/ + +/** @addtogroup UART_EXPORTED_CONSTANTS UART Exported Constants + @{ +*/ + +/*---------------------------------------------------------------------------------------------------------*/ +/* UART FIFO size constants definitions */ +/*---------------------------------------------------------------------------------------------------------*/ + +#define UART0_FIFO_SIZE 16 /*!< UART0 supports separated receive/transmit 16/16 bytes entry FIFO */ +#define UART1_FIFO_SIZE 16 /*!< UART1 supports separated receive/transmit 16/16 bytes entry FIFO */ +#define UART2_FIFO_SIZE 16 /*!< UART2 supports separated receive/transmit 16/16 bytes entry FIFO */ +#define UART3_FIFO_SIZE 16 /*!< UART3 supports separated receive/transmit 16/16 bytes entry FIFO */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* UART_FIFO constants definitions */ +/*---------------------------------------------------------------------------------------------------------*/ + +#define UART_FIFO_RFITL_1BYTE (0x0 << UART_FIFO_RFITL_Pos) /*!< UART_FIFO setting to set RX FIFO Trigger Level to 1 byte */ +#define UART_FIFO_RFITL_4BYTES (0x1 << UART_FIFO_RFITL_Pos) /*!< UART_FIFO setting to set RX FIFO Trigger Level to 4 bytes */ +#define UART_FIFO_RFITL_8BYTES (0x2 << UART_FIFO_RFITL_Pos) /*!< UART_FIFO setting to set RX FIFO Trigger Level to 8 bytes */ +#define UART_FIFO_RFITL_14BYTES (0x3 << UART_FIFO_RFITL_Pos) /*!< UART_FIFO setting to set RX FIFO Trigger Level to 14 bytes */ + +#define UART_FIFO_RTSTRGLV_1BYTE (0x0 << UART_FIFO_RTSTRGLV_Pos) /*!< UART_FIFO setting to set RTS Trigger Level to 1 byte */ +#define UART_FIFO_RTSTRGLV_4BYTES (0x1 << UART_FIFO_RTSTRGLV_Pos) /*!< UART_FIFO setting to set RTS Trigger Level to 4 bytes */ +#define UART_FIFO_RTSTRGLV_8BYTES (0x2 << UART_FIFO_RTSTRGLV_Pos) /*!< UART_FIFO setting to set RTS Trigger Level to 8 bytes */ +#define UART_FIFO_RTSTRGLV_14BYTES (0x3 << UART_FIFO_RTSTRGLV_Pos) /*!< UART_FIFO setting to set RTS Trigger Level to 14 bytes */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* UART_LINE constants definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define UART_WORD_LEN_5 (0) /*!< UART_LINE setting to set UART word length to 5 bits */ +#define UART_WORD_LEN_6 (1) /*!< UART_LINE setting to set UART word length to 6 bits */ +#define UART_WORD_LEN_7 (2) /*!< UART_LINE setting to set UART word length to 7 bits */ +#define UART_WORD_LEN_8 (3) /*!< UART_LINE setting to set UART word length to 8 bits */ + +#define UART_PARITY_NONE (0x0 << UART_LINE_PBE_Pos) /*!< UART_LINE setting to set UART as no parity */ +#define UART_PARITY_ODD (0x1 << UART_LINE_PBE_Pos) /*!< UART_LINE setting to set UART as odd parity */ +#define UART_PARITY_EVEN (0x3 << UART_LINE_PBE_Pos) /*!< UART_LINE setting to set UART as even parity */ +#define UART_PARITY_MARK (0x5 << UART_LINE_PBE_Pos) /*!< UART_LINE setting to keep parity bit as '1' */ +#define UART_PARITY_SPACE (0x7 << UART_LINE_PBE_Pos) /*!< UART_LINE setting to keep parity bit as '0' */ + +#define UART_STOP_BIT_1 (0x0 << UART_LINE_NSB_Pos) /*!< UART_LINE setting for one stop bit */ +#define UART_STOP_BIT_1_5 (0x1 << UART_LINE_NSB_Pos) /*!< UART_LINE setting for 1.5 stop bit when 5-bit word length */ +#define UART_STOP_BIT_2 (0x1 << UART_LINE_NSB_Pos) /*!< UART_LINE setting for two stop bit when 6, 7, 8-bit word length */ + + +/*---------------------------------------------------------------------------------------------------------*/ +/* UART RTS ACTIVE LEVEL constants definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define UART_RTS_IS_LOW_LEV_ACTIVE (0x1 << UART_MODEM_RTSACTLV_Pos) /*!< Set RTS is Low Level Active */ +#define UART_RTS_IS_HIGH_LEV_ACTIVE (0x0 << UART_MODEM_RTSACTLV_Pos) /*!< Set RTS is High Level Active */ + + +/*---------------------------------------------------------------------------------------------------------*/ +/* UART_IRDA constants definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define UART_IRDA_TXEN (0x1 << UART_IRDA_TXEN_Pos) /*!< Set IrDA function Tx mode */ +#define UART_IRDA_RXEN (0x0 << UART_IRDA_TXEN_Pos) /*!< Set IrDA function Rx mode */ + + +/*---------------------------------------------------------------------------------------------------------*/ +/* UART_FUNCSEL constants definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define UART_FUNCSEL_UART (0x0 << UART_FUNCSEL_FUNCSEL_Pos) /*!< UART_FUNCSEL setting to set UART Function (Default) */ +#define UART_FUNCSEL_LIN (0x1 << UART_FUNCSEL_FUNCSEL_Pos) /*!< UART_FUNCSEL setting to set LIN Function */ +#define UART_FUNCSEL_IrDA (0x2 << UART_FUNCSEL_FUNCSEL_Pos) /*!< UART_FUNCSEL setting to set IrDA Function */ +#define UART_FUNCSEL_RS485 (0x3 << UART_FUNCSEL_FUNCSEL_Pos) /*!< UART_FUNCSEL setting to set RS485 Function */ + + +/*---------------------------------------------------------------------------------------------------------*/ +/* UART_LINCTL constants definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define UART_LINCTL_BRKFL(x) (((x)-1) << UART_LINCTL_BRKFL_Pos) /*!< UART_LINCTL setting to set LIN Break Field Length, x = 10 ~ 15, default value is 12 */ +#define UART_LINCTL_BSL(x) (((x)-1) << UART_LINCTL_BSL_Pos) /*!< UART_LINCTL setting to set LIN Break/Sync Delimiter Length, x = 1 ~ 4 */ +#define UART_LINCTL_HSEL_BREAK (0x0UL << UART_LINCTL_HSEL_Pos) /*!< UART_LINCTL setting to set LIN Header Select to break field */ +#define UART_LINCTL_HSEL_BREAK_SYNC (0x1UL << UART_LINCTL_HSEL_Pos) /*!< UART_LINCTL setting to set LIN Header Select to break field and sync field */ +#define UART_LINCTL_HSEL_BREAK_SYNC_ID (0x2UL << UART_LINCTL_HSEL_Pos) /*!< UART_LINCTL setting to set LIN Header Select to break field, sync field and ID field*/ +#define UART_LINCTL_PID(x) ((x) << UART_LINCTL_PID_Pos) /*!< UART_LINCTL setting to set LIN PID value */ + + +/*---------------------------------------------------------------------------------------------------------*/ +/* UART BAUDRATE MODE constants definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define UART_BAUD_MODE0 (0) /*!< Set UART Baudrate Mode is Mode0 */ +#define UART_BAUD_MODE2 (UART_BAUD_BAUDM1_Msk | UART_BAUD_BAUDM0_Msk) /*!< Set UART Baudrate Mode is Mode2 */ + + +/*@}*/ /* end of group UART_EXPORTED_CONSTANTS */ + + +/** @addtogroup UART_EXPORTED_FUNCTIONS UART Exported Functions + @{ +*/ + + +/** + * @brief Calculate UART baudrate mode0 divider + * + * @param[in] u32SrcFreq UART clock frequency + * @param[in] u32BaudRate Baudrate of UART module + * + * @return UART baudrate mode0 divider + * + * @details This macro calculate UART baudrate mode0 divider. + */ +#define UART_BAUD_MODE0_DIVIDER(u32SrcFreq, u32BaudRate) ((((u32SrcFreq) + ((u32BaudRate)*8)) / (u32BaudRate) >> 4)-2) + + +/** + * @brief Calculate UART baudrate mode2 divider + * + * @param[in] u32SrcFreq UART clock frequency + * @param[in] u32BaudRate Baudrate of UART module + * + * @return UART baudrate mode2 divider + * + * @details This macro calculate UART baudrate mode2 divider. + */ +#define UART_BAUD_MODE2_DIVIDER(u32SrcFreq, u32BaudRate) ((((u32SrcFreq) + ((u32BaudRate)/2)) / (u32BaudRate))-2) + + +/** + * @brief Write UART data + * + * @param[in] uart The pointer of the specified UART module + * @param[in] u8Data Data byte to transmit. + * + * @return None + * + * @details This macro write Data to Tx data register. + */ +#define UART_WRITE(uart, u8Data) ((uart)->DAT = (u8Data)) + + +/** + * @brief Read UART data + * + * @param[in] uart The pointer of the specified UART module + * + * @return The oldest data byte in RX FIFO. + * + * @details This macro read Rx data register. + */ +#define UART_READ(uart) ((uart)->DAT) + + +/** + * @brief Get Tx empty + * + * @param[in] uart The pointer of the specified UART module + * + * @retval 0 Tx FIFO is not empty + * @retval >=1 Tx FIFO is empty + * + * @details This macro get Transmitter FIFO empty register value. + */ +#define UART_GET_TX_EMPTY(uart) ((uart)->FIFOSTS & UART_FIFOSTS_TXEMPTY_Msk) + + +/** + * @brief Get Rx empty + * + * @param[in] uart The pointer of the specified UART module + * + * @retval 0 Rx FIFO is not empty + * @retval >=1 Rx FIFO is empty + * + * @details This macro get Receiver FIFO empty register value. + */ +#define UART_GET_RX_EMPTY(uart) ((uart)->FIFOSTS & UART_FIFOSTS_RXEMPTY_Msk) + + +/** + * @brief Check specified uart port transmission is over. + * + * @param[in] uart The pointer of the specified UART module + * + * @retval 0 Tx transmission is not over + * @retval 1 Tx transmission is over + * + * @details This macro return Transmitter Empty Flag register bit value. + * It indicates if specified uart port transmission is over nor not. + */ +#define UART_IS_TX_EMPTY(uart) (((uart)->FIFOSTS & UART_FIFOSTS_TXEMPTYF_Msk) >> UART_FIFOSTS_TXEMPTYF_Pos) + + +/** + * @brief Wait specified uart port transmission is over + * + * @param[in] uart The pointer of the specified UART module + * + * @return None + * + * @details This macro wait specified uart port transmission is over. + */ +#define UART_WAIT_TX_EMPTY(uart) while(!((((uart)->FIFOSTS) & UART_FIFOSTS_TXEMPTYF_Msk) >> UART_FIFOSTS_TXEMPTYF_Pos)) + + +/** + * @brief Check RX is ready or not + * + * @param[in] uart The pointer of the specified UART module + * + * @retval 0 The number of bytes in the RX FIFO is less than the RFITL + * @retval 1 The number of bytes in the RX FIFO equals or larger than RFITL + * + * @details This macro check receive data available interrupt flag is set or not. + */ +#define UART_IS_RX_READY(uart) (((uart)->INTSTS & UART_INTSTS_RDAIF_Msk)>>UART_INTSTS_RDAIF_Pos) + + +/** + * @brief Check TX FIFO is full or not + * + * @param[in] uart The pointer of the specified UART module + * + * @retval 1 TX FIFO is full + * @retval 0 TX FIFO is not full + * + * @details This macro check TX FIFO is full or not. + */ +#define UART_IS_TX_FULL(uart) (((uart)->FIFOSTS & UART_FIFOSTS_TXFULL_Msk)>>UART_FIFOSTS_TXFULL_Pos) + + +/** + * @brief Check RX FIFO is full or not + * + * @param[in] uart The pointer of the specified UART module + * + * @retval 1 RX FIFO is full + * @retval 0 RX FIFO is not full + * + * @details This macro check RX FIFO is full or not. + */ +#define UART_IS_RX_FULL(uart) (((uart)->FIFOSTS & UART_FIFOSTS_RXFULL_Msk)>>UART_FIFOSTS_RXFULL_Pos) + + +/** + * @brief Get Tx full register value + * + * @param[in] uart The pointer of the specified UART module + * + * @retval 0 Tx FIFO is not full. + * @retval >=1 Tx FIFO is full. + * + * @details This macro get Tx full register value. + */ +#define UART_GET_TX_FULL(uart) ((uart)->FIFOSTS & UART_FIFOSTS_TXFULL_Msk) + + +/** + * @brief Get Rx full register value + * + * @param[in] uart The pointer of the specified UART module + * + * @retval 0 Rx FIFO is not full. + * @retval >=1 Rx FIFO is full. + * + * @details This macro get Rx full register value. + */ +#define UART_GET_RX_FULL(uart) ((uart)->FIFOSTS & UART_FIFOSTS_RXFULL_Msk) + + +/** + * @brief Enable specified UART interrupt + * + * @param[in] uart The pointer of the specified UART module + * @param[in] u32eIntSel Interrupt type select + * - \ref UART_INTEN_ABRIEN_Msk : Auto baud rate interrupt + * - \ref UART_INTEN_WKCTSIEN_Msk : CTS wakeup interrupt + * - \ref UART_INTEN_WKDATIEN_Msk : Data wakeup interrupt + * - \ref UART_INTEN_LINIEN_Msk : Lin bus interrupt + * - \ref UART_INTEN_BUFERRIEN_Msk : Buffer Error interrupt + * - \ref UART_INTEN_RXTOIEN_Msk : Rx time-out interrupt + * - \ref UART_INTEN_MODEMIEN_Msk : Modem interrupt + * - \ref UART_INTEN_RLSIEN_Msk : Rx Line status interrupt + * - \ref UART_INTEN_THREIEN_Msk : Tx empty interrupt + * - \ref UART_INTEN_RDAIEN_Msk : Rx ready interrupt + * + * @return None + * + * @details This macro enable specified UART interrupt. + */ +#define UART_ENABLE_INT(uart, u32eIntSel) ((uart)->INTEN |= (u32eIntSel)) + + +/** + * @brief Disable specified UART interrupt + * + * @param[in] uart The pointer of the specified UART module + * @param[in] u32eIntSel Interrupt type select + * - \ref UART_INTEN_ABRIEN_Msk : Auto baud rate interrupt + * - \ref UART_INTEN_WKCTSIEN_Msk : CTS wakeup interrupt + * - \ref UART_INTEN_WKDATIEN_Msk : Data wakeup interrupt + * - \ref UART_INTEN_LINIEN_Msk : Lin bus interrupt + * - \ref UART_INTEN_BUFERRIEN_Msk : Buffer Error interrupt + * - \ref UART_INTEN_RXTOIEN_Msk : Rx time-out interrupt + * - \ref UART_INTEN_MODEMIEN_Msk : Modem status interrupt + * - \ref UART_INTEN_RLSIEN_Msk : Receive Line status interrupt + * - \ref UART_INTEN_THREIEN_Msk : Tx empty interrupt + * - \ref UART_INTEN_RDAIEN_Msk : Rx ready interrupt + * + * @return None + * + * @details This macro enable specified UART interrupt. + */ +#define UART_DISABLE_INT(uart, u32eIntSel) ((uart)->INTEN &= ~ (u32eIntSel)) + + +/** + * @brief Get specified interrupt flag/status + * + * @param[in] uart The pointer of the specified UART module + * @param[in] u32eIntTypeFlag Interrupt Type Flag, should be + * - \ref UART_INTSTS_HWBUFEINT_Msk : In DMA Mode, Buffer Error Interrupt Indicator + * - \ref UART_INTSTS_HWTOINT_Msk : In DMA Mode, Time-out Interrupt Indicator + * - \ref UART_INTSTS_HWMODINT_Msk : In DMA Mode, MODEM Status Interrupt Indicator + * - \ref UART_INTSTS_HWRLSINT_Msk : In DMA Mode, Receive Line Status Interrupt Indicator + * - \ref UART_INTSTS_HWBUFEIF_Msk : In DMA Mode, Buffer Error Interrupt Flag + * - \ref UART_INTSTS_HWTOIF_Msk : In DMA Mode, Time-out Interrupt Flag + * - \ref UART_INTSTS_HWMODIF_Msk : In DMA Mode, MODEM Interrupt Flag + * - \ref UART_INTSTS_HWRLSIF_Msk : In DMA Mode, Receive Line Status Flag + * - \ref UART_INTSTS_LININT_Msk : LIN Bus Interrupt Indicator + * - \ref UART_INTSTS_BUFERRINT_Msk : Buffer Error Interrupt Indicator + * - \ref UART_INTSTS_RXTOINT_Msk : Time-out Interrupt Indicator + * - \ref UART_INTSTS_MODEMINT_Msk : Modem Status Interrupt Indicator + * - \ref UART_INTSTS_RLSINT_Msk : Receive Line Status Interrupt Indicator + * - \ref UART_INTSTS_THREINT_Msk : Transmit Holding Register Empty Interrupt Indicator + * - \ref UART_INTSTS_RDAINT_Msk : Receive Data Available Interrupt Indicator + * - \ref UART_INTSTS_LINIF_Msk : LIN Bus Flag + * - \ref UART_INTSTS_BUFERRIF_Msk : Buffer Error Interrupt Flag + * - \ref UART_INTSTS_RXTOIF_Msk : Rx Time-out Interrupt Flag + * - \ref UART_INTSTS_MODEMIF_Msk : Modem Interrupt Flag + * - \ref UART_INTSTS_RLSIF_Msk : Receive Line Status Interrupt Flag + * - \ref UART_INTSTS_THREIF_Msk : Tx Empty Interrupt Flag + * - \ref UART_INTSTS_RDAIF_Msk : Rx Ready Interrupt Flag + * + * @retval 0 The specified interrupt is not happened. + * 1 The specified interrupt is happened. + * + * @details This macro get specified interrupt flag or interrupt indicator status. + */ +#define UART_GET_INT_FLAG(uart,u32eIntTypeFlag) (((uart)->INTSTS & (u32eIntTypeFlag))?1:0) + + +/** + * @brief Set RTS pin to low + * + * @param[in] uart The pointer of the specified UART module + * + * @return None + * + * @details This macro set RTS pin to low. + */ +__STATIC_INLINE void UART_CLEAR_RTS(UART_T* uart) +{ + uart->MODEM |= UART_MODEM_RTSACTLV_Msk; + uart->MODEM &= ~UART_MODEM_RTS_Msk; +} + + +/** + * @brief Set RTS pin to high + * + * @param[in] uart The pointer of the specified UART module + * + * @return None + * + * @details This macro set RTS pin to high. + */ +__STATIC_INLINE void UART_SET_RTS(UART_T* uart) +{ + uart->MODEM |= UART_MODEM_RTSACTLV_Msk | UART_MODEM_RTS_Msk; +} + + +/** + * @brief Clear RS-485 Address Byte Detection Flag + * + * @param[in] uart The pointer of the specified UART module + * + * @return None + * + * @details This macro clear RS-485 address byte detection flag. + */ +#define UART_RS485_CLEAR_ADDR_FLAG(uart) ((uart)->FIFOSTS = UART_FIFOSTS_ADDRDETF_Msk) + + +/** + * @brief Get RS-485 Address Byte Detection Flag + * + * @param[in] uart The pointer of the specified UART module + * + * @retval 0 Receiver detects a data that is not an address bit. + * @retval 1 Receiver detects a data that is an address bit. + * + * @details This macro get RS-485 address byte detection flag. + */ +#define UART_RS485_GET_ADDR_FLAG(uart) (((uart)->FIFOSTS & UART_FIFOSTS_ADDRDETF_Msk) >> UART_FIFOSTS_ADDRDETF_Pos) + + +void UART_ClearIntFlag(UART_T* uart , uint32_t u32InterruptFlag); +void UART_Close(UART_T* uart); +void UART_DisableFlowCtrl(UART_T* uart); +void UART_DisableInt(UART_T* uart, uint32_t u32InterruptFlag); +void UART_EnableFlowCtrl(UART_T* uart); +void UART_EnableInt(UART_T* uart, uint32_t u32InterruptFlag); +void UART_Open(UART_T* uart, uint32_t u32baudrate); +uint32_t UART_Read(UART_T* uart, uint8_t *pu8RxBuf, uint32_t u32ReadBytes); +void UART_SetLine_Config(UART_T* uart, uint32_t u32baudrate, uint32_t u32data_width, uint32_t u32parity, uint32_t u32stop_bits); +void UART_SetTimeoutCnt(UART_T* uart, uint32_t u32TOC); +void UART_SelectIrDAMode(UART_T* uart, uint32_t u32Buadrate, uint32_t u32Direction); +void UART_SelectRS485Mode(UART_T* uart, uint32_t u32Mode, uint32_t u32Addr); +void UART_SelectLINMode(UART_T* uart, uint32_t u32Mode, uint32_t u32BreakLength); +uint32_t UART_Write(UART_T* uart, uint8_t *pu8TxBuf, uint32_t u32WriteBytes); + + + + +/*@}*/ /* end of group UART_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group UART_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +#ifdef __cplusplus +} +#endif + +#endif //__UART_H__ + +/*** (C) COPYRIGHT 2013~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_usbd.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_usbd.c new file mode 100644 index 00000000000..1759b1c82d6 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_usbd.c @@ -0,0 +1,728 @@ +/**************************************************************************//** + * @file usbd.c + * @version V1.00 + * $Revision: 21 $ + * $Date: 15/08/21 3:34p $ + * @brief M451 series USBD driver source file + * + * @note + * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ + +#include +#include "M451Series.h" + +#if 0 +#define DBG_PRINTF printf +#else +#define DBG_PRINTF(...) +#endif + +#ifdef __cplusplus +extern "C" +{ +#endif + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup USBD_Driver USBD Driver + @{ +*/ + + +/** @addtogroup USBD_EXPORTED_FUNCTIONS USBD Exported Functions + @{ +*/ + +/* Global variables for Control Pipe */ +uint8_t g_usbd_SetupPacket[8] = {0}; /*!< Setup packet buffer */ +volatile uint8_t g_usbd_RemoteWakeupEn = 0; /*!< Remote wake up function enable flag */ + +/** + * @cond HIDDEN_SYMBOLS + */ +static volatile uint8_t *g_usbd_CtrlInPointer = 0; +static volatile uint32_t g_usbd_CtrlInSize = 0; +static volatile uint8_t *g_usbd_CtrlOutPointer = 0; +static volatile uint32_t g_usbd_CtrlOutSize = 0; +static volatile uint32_t g_usbd_CtrlOutSizeLimit = 0; +static volatile uint32_t g_usbd_UsbAddr = 0; +static volatile uint32_t g_usbd_UsbConfig = 0; +static volatile uint32_t g_usbd_CtrlMaxPktSize = 8; +static volatile uint32_t g_usbd_UsbAltInterface = 0; +/** + * @endcond + */ + +const S_USBD_INFO_T *g_usbd_sInfo; /*!< A pointer for USB information structure */ + +VENDOR_REQ g_usbd_pfnVendorRequest = NULL; /*!< USB Vendor Request Functional Pointer */ +CLASS_REQ g_usbd_pfnClassRequest = NULL; /*!< USB Class Request Functional Pointer */ +SET_INTERFACE_REQ g_usbd_pfnSetInterface = NULL; /*!< USB Set Interface Functional Pointer */ +SET_CONFIG_CB g_usbd_pfnSetConfigCallback = NULL; /*!< USB Set configuration callback function pointer */ +uint32_t g_u32EpStallLock = 0; /*!< Bit map flag to lock specified EP when SET_FEATURE */ + +/** + * @brief This function makes USBD module to be ready to use + * + * @param[in] param The structure of USBD information. + * @param[in] pfnClassReq USB Class request callback function. + * @param[in] pfnSetInterface USB Set Interface request callback function. + * + * @return None + * + * @details This function will enable USB controller, USB PHY transceiver and pull-up resistor of USB_D+ pin. USB PHY will drive SE0 to bus. + */ +void USBD_Open(const S_USBD_INFO_T *param, CLASS_REQ pfnClassReq, SET_INTERFACE_REQ pfnSetInterface) +{ + g_usbd_sInfo = param; + g_usbd_pfnClassRequest = pfnClassReq; + g_usbd_pfnSetInterface = pfnSetInterface; + + /* get EP0 maximum packet size */ + g_usbd_CtrlMaxPktSize = g_usbd_sInfo->gu8DevDesc[7]; + + /* Initial USB engine */ + USBD->ATTR = 0x7D0; + /* Force SE0 */ + USBD_SET_SE0(); +} + +/** + * @brief This function makes USB host to recognize the device + * + * @param None + * + * @return None + * + * @details Enable WAKEUP, FLDET, USB and BUS interrupts. Disable software-disconnect function after 100ms delay with SysTick timer. + */ +void USBD_Start(void) +{ + CLK_SysTickDelay(100000); + /* Disable software-disconnect function */ + USBD_CLR_SE0(); + + /* Clear USB-related interrupts before enable interrupt */ + USBD_CLR_INT_FLAG(USBD_INT_BUS | USBD_INT_USB | USBD_INT_FLDET | USBD_INT_WAKEUP); + + /* Enable USB-related interrupts. */ + USBD_ENABLE_INT(USBD_INT_BUS | USBD_INT_USB | USBD_INT_FLDET | USBD_INT_WAKEUP); +} + +/** + * @brief Get the received SETUP packet + * + * @param[in] buf A buffer pointer used to store 8-byte SETUP packet. + * + * @return None + * + * @details Store SETUP packet to a user-specified buffer. + * + */ +void USBD_GetSetupPacket(uint8_t *buf) +{ + USBD_MemCopy(buf, g_usbd_SetupPacket, 8); +} + +/** + * @brief Process SETUP packet + * + * @param None + * + * @return None + * + * @details Parse SETUP packet and perform the corresponding action. + * + */ +void USBD_ProcessSetupPacket(void) +{ + /* Get SETUP packet from USB buffer */ + USBD_MemCopy(g_usbd_SetupPacket, (uint8_t *)USBD_BUF_BASE, 8); + /* Check the request type */ + switch(g_usbd_SetupPacket[0] & 0x60) + { + case REQ_STANDARD: // Standard + { + USBD_StandardRequest(); + break; + } + case REQ_CLASS: // Class + { + if(g_usbd_pfnClassRequest != NULL) + { + g_usbd_pfnClassRequest(); + } + break; + } + case REQ_VENDOR: // Vendor + { + if(g_usbd_pfnVendorRequest != NULL) + { + g_usbd_pfnVendorRequest(); + } + break; + } + default: // reserved + { + /* Setup error, stall the device */ + USBD_SET_EP_STALL(EP0); + USBD_SET_EP_STALL(EP1); + break; + } + } +} + +/** + * @brief Process GetDescriptor request + * + * @param None + * + * @return None + * + * @details Parse GetDescriptor request and perform the corresponding action. + * + */ +void USBD_GetDescriptor(void) +{ + uint32_t u32Len; + + u32Len = 0; + u32Len = g_usbd_SetupPacket[7]; + u32Len <<= 8; + u32Len += g_usbd_SetupPacket[6]; + + switch(g_usbd_SetupPacket[3]) + { + // Get Device Descriptor + case DESC_DEVICE: + { + u32Len = Minimum(u32Len, LEN_DEVICE); + DBG_PRINTF("Get device desc, %d\n", u32Len); + + USBD_PrepareCtrlIn((uint8_t *)g_usbd_sInfo->gu8DevDesc, u32Len); + + break; + } + // Get Configuration Descriptor + case DESC_CONFIG: + { + uint32_t u32TotalLen; + + u32TotalLen = g_usbd_sInfo->gu8ConfigDesc[3]; + u32TotalLen = g_usbd_sInfo->gu8ConfigDesc[2] + (u32TotalLen << 8); + + DBG_PRINTF("Get config desc len %d, acture len %d\n", u32Len, u32TotalLen); + u32Len = Minimum(u32Len, u32TotalLen); + DBG_PRINTF("Minimum len %d\n", u32Len); + + USBD_PrepareCtrlIn((uint8_t *)g_usbd_sInfo->gu8ConfigDesc, u32Len); + + break; + } + // Get HID Descriptor + case DESC_HID: + { + /* CV3.0 HID Class Descriptor Test, + Need to indicate index of the HID Descriptor within gu8ConfigDescriptor, specifically HID Composite device. */ + uint32_t u32ConfigDescOffset; // u32ConfigDescOffset is configuration descriptor offset (HID descriptor start index) + u32Len = Minimum(u32Len, LEN_HID); + DBG_PRINTF("Get HID desc, %d\n", u32Len); + + u32ConfigDescOffset = g_usbd_sInfo->gu32ConfigHidDescIdx[g_usbd_SetupPacket[4]]; + USBD_PrepareCtrlIn((uint8_t *)&g_usbd_sInfo->gu8ConfigDesc[u32ConfigDescOffset], u32Len); + + break; + } + // Get Report Descriptor + case DESC_HID_RPT: + { + DBG_PRINTF("Get HID report, %d\n", u32Len); + + u32Len = Minimum(u32Len, g_usbd_sInfo->gu32HidReportSize[g_usbd_SetupPacket[4]]); + USBD_PrepareCtrlIn((uint8_t *)g_usbd_sInfo->gu8HidReportDesc[g_usbd_SetupPacket[4]], u32Len); + break; + } + // Get String Descriptor + case DESC_STRING: + { + // Get String Descriptor + if(g_usbd_SetupPacket[2] < 4) + { + u32Len = Minimum(u32Len, g_usbd_sInfo->gu8StringDesc[g_usbd_SetupPacket[2]][0]); + DBG_PRINTF("Get string desc %d\n", u32Len); + + USBD_PrepareCtrlIn((uint8_t *)g_usbd_sInfo->gu8StringDesc[g_usbd_SetupPacket[2]], u32Len); + + + break; + } + else + { + // Not support. Reply STALL. + USBD_SET_EP_STALL(EP0); + USBD_SET_EP_STALL(EP1); + + DBG_PRINTF("Unsupported string desc (%d). Stall ctrl pipe.\n", g_usbd_SetupPacket[2]); + + break; + } + } + default: + // Not support. Reply STALL. + USBD_SET_EP_STALL(EP0); + USBD_SET_EP_STALL(EP1); + + DBG_PRINTF("Unsupported get desc type. stall ctrl pipe\n"); + + break; + } +} + +/** + * @brief Process standard request + * + * @param None + * + * @return None + * + * @details Parse standard request and perform the corresponding action. + * + */ +void USBD_StandardRequest(void) +{ + + /* clear global variables for new request */ + g_usbd_CtrlInPointer = 0; + g_usbd_CtrlInSize = 0; + + if(g_usbd_SetupPacket[0] & 0x80) /* request data transfer direction */ + { + // Device to host + switch(g_usbd_SetupPacket[1]) + { + case GET_CONFIGURATION: + { + // Return current configuration setting + /* Data stage */ + M8(USBD_BUF_BASE + USBD_GET_EP_BUF_ADDR(EP0)) = g_usbd_UsbConfig; + USBD_SET_DATA1(EP0); + USBD_SET_PAYLOAD_LEN(EP0, 1); + /* Status stage */ + USBD_PrepareCtrlOut(0,0); + + DBG_PRINTF("Get configuration\n"); + + break; + } + case GET_DESCRIPTOR: + { + USBD_GetDescriptor(); + USBD_PrepareCtrlOut(0, 0); /* For status stage */ + break; + } + case GET_INTERFACE: + { + // Return current interface setting + /* Data stage */ + M8(USBD_BUF_BASE + USBD_GET_EP_BUF_ADDR(EP0)) = g_usbd_UsbAltInterface; + USBD_SET_DATA1(EP0); + USBD_SET_PAYLOAD_LEN(EP0, 1); + /* Status stage */ + USBD_PrepareCtrlOut(0, 0); + + DBG_PRINTF("Get interface\n"); + + break; + } + case GET_STATUS: + { + // Device + if(g_usbd_SetupPacket[0] == 0x80) + { + uint8_t u8Tmp; + + u8Tmp = 0; + if(g_usbd_sInfo->gu8ConfigDesc[7] & 0x40) u8Tmp |= 1; // Self-Powered/Bus-Powered. + if(g_usbd_sInfo->gu8ConfigDesc[7] & 0x20) u8Tmp |= (g_usbd_RemoteWakeupEn << 1); // Remote wake up + + M8(USBD_BUF_BASE + USBD_GET_EP_BUF_ADDR(EP0)) = u8Tmp; + + } + // Interface + else if(g_usbd_SetupPacket[0] == 0x81) + M8(USBD_BUF_BASE + USBD_GET_EP_BUF_ADDR(EP0)) = 0; + // Endpoint + else if(g_usbd_SetupPacket[0] == 0x82) + { + uint8_t ep = g_usbd_SetupPacket[4] & 0xF; + M8(USBD_BUF_BASE + USBD_GET_EP_BUF_ADDR(EP0)) = USBD_GetStall(ep) ? 1 : 0; + } + + M8(USBD_BUF_BASE + USBD_GET_EP_BUF_ADDR(EP0) + 1) = 0; + /* Data stage */ + USBD_SET_DATA1(EP0); + USBD_SET_PAYLOAD_LEN(EP0, 2); + /* Status stage */ + USBD_PrepareCtrlOut(0, 0); + + DBG_PRINTF("Get status\n"); + + break; + } + default: + { + /* Setup error, stall the device */ + USBD_SET_EP_STALL(EP0); + USBD_SET_EP_STALL(EP1); + + DBG_PRINTF("Unknown request. stall ctrl pipe.\n"); + + break; + } + } + } + else + { + // Host to device + switch(g_usbd_SetupPacket[1]) + { + case CLEAR_FEATURE: + { + if(g_usbd_SetupPacket[2] == FEATURE_ENDPOINT_HALT) + { + int32_t epNum, i; + + /* EP number stall is not allow to be clear in MSC class "Error Recovery Test". + a flag: g_u32EpStallLock is added to support it */ + epNum = g_usbd_SetupPacket[4] & 0xF; + for(i = 0; i < USBD_MAX_EP; i++) + { + if(((USBD->EP[i].CFG & 0xF) == epNum) && ((g_u32EpStallLock & (1 << i)) == 0)) + { + USBD->EP[i].CFGP &= ~USBD_CFGP_SSTALL_Msk; + DBG_PRINTF("Clr stall ep%d %x\n", i, USBD->EP[i].CFGP); + } + } + } + else if(g_usbd_SetupPacket[2] == FEATURE_DEVICE_REMOTE_WAKEUP) + g_usbd_RemoteWakeupEn = 0; + + /* Status stage */ + USBD_SET_DATA1(EP0); + USBD_SET_PAYLOAD_LEN(EP0, 0); + + DBG_PRINTF("Clear feature op %d\n", g_usbd_SetupPacket[2]); + + break; + } + case SET_ADDRESS: + { + g_usbd_UsbAddr = g_usbd_SetupPacket[2]; + DBG_PRINTF("Set addr to %d\n", g_usbd_UsbAddr); + + // DATA IN for end of setup + /* Status Stage */ + USBD_SET_DATA1(EP0); + USBD_SET_PAYLOAD_LEN(EP0, 0); + + break; + } + case SET_CONFIGURATION: + { + g_usbd_UsbConfig = g_usbd_SetupPacket[2]; + + if(g_usbd_pfnSetConfigCallback) + g_usbd_pfnSetConfigCallback(); + + // DATA IN for end of setup + /* Status stage */ + USBD_SET_DATA1(EP0); + USBD_SET_PAYLOAD_LEN(EP0, 0); + + DBG_PRINTF("Set config to %d\n", g_usbd_UsbConfig); + + break; + } + case SET_FEATURE: + { + if(g_usbd_SetupPacket[2] == FEATURE_ENDPOINT_HALT) + { + USBD_SetStall(g_usbd_SetupPacket[4] & 0xF); + DBG_PRINTF("Set feature. stall ep %d\n", g_usbd_SetupPacket[4] & 0xF); + } + else if(g_usbd_SetupPacket[2] == FEATURE_DEVICE_REMOTE_WAKEUP) + { + g_usbd_RemoteWakeupEn = 1; + DBG_PRINTF("Set feature. enable remote wakeup\n"); + } + + /* Status stage */ + USBD_SET_DATA1(EP0); + USBD_SET_PAYLOAD_LEN(EP0, 0); + + + + break; + } + case SET_INTERFACE: + { + g_usbd_UsbAltInterface = g_usbd_SetupPacket[2]; + if(g_usbd_pfnSetInterface != NULL) + g_usbd_pfnSetInterface(); + /* Status stage */ + USBD_SET_DATA1(EP0); + USBD_SET_PAYLOAD_LEN(EP0, 0); + + DBG_PRINTF("Set interface to %d\n", g_usbd_UsbAltInterface); + + break; + } + default: + { + /* Setup error, stall the device */ + USBD_SET_EP_STALL(EP0); + USBD_SET_EP_STALL(EP1); + + DBG_PRINTF("Unsupported request. stall ctrl pipe.\n"); + + break; + } + } + } +} + +/** + * @brief Prepare the first Control IN pipe + * + * @param[in] pu8Buf The pointer of data sent to USB host. + * @param[in] u32Size The IN transfer size. + * + * @return None + * + * @details Prepare data for Control IN transfer. + * + */ +void USBD_PrepareCtrlIn(uint8_t *pu8Buf, uint32_t u32Size) +{ + DBG_PRINTF("Prepare Ctrl In %d\n", u32Size); + if(u32Size > g_usbd_CtrlMaxPktSize) + { + // Data size > MXPLD + g_usbd_CtrlInPointer = pu8Buf + g_usbd_CtrlMaxPktSize; + g_usbd_CtrlInSize = u32Size - g_usbd_CtrlMaxPktSize; + USBD_SET_DATA1(EP0); + USBD_MemCopy((uint8_t *)USBD_BUF_BASE + USBD_GET_EP_BUF_ADDR(EP0), pu8Buf, g_usbd_CtrlMaxPktSize); + USBD_SET_PAYLOAD_LEN(EP0, g_usbd_CtrlMaxPktSize); + } + else + { + // Data size <= MXPLD + g_usbd_CtrlInPointer = 0; + g_usbd_CtrlInSize = 0; + USBD_SET_DATA1(EP0); + USBD_MemCopy((uint8_t *)USBD_BUF_BASE + USBD_GET_EP_BUF_ADDR(EP0), pu8Buf, u32Size); + USBD_SET_PAYLOAD_LEN(EP0, u32Size); + } +} + +/** + * @brief Repeat Control IN pipe + * + * @param None + * + * @return None + * + * @details This function processes the remained data of Control IN transfer. + * + */ +void USBD_CtrlIn(void) +{ + static uint8_t u8ZeroFlag = 0; + + DBG_PRINTF("Ctrl In Ack. residue %d\n", g_usbd_CtrlInSize); + if(g_usbd_CtrlInSize) + { + // Process remained data + if(g_usbd_CtrlInSize > g_usbd_CtrlMaxPktSize) + { + // Data size > MXPLD + USBD_MemCopy((uint8_t *)USBD_BUF_BASE + USBD_GET_EP_BUF_ADDR(EP0), (uint8_t *)g_usbd_CtrlInPointer, g_usbd_CtrlMaxPktSize); + USBD_SET_PAYLOAD_LEN(EP0, g_usbd_CtrlMaxPktSize); + g_usbd_CtrlInPointer += g_usbd_CtrlMaxPktSize; + g_usbd_CtrlInSize -= g_usbd_CtrlMaxPktSize; + } + else + { + // Data size <= MXPLD + USBD_MemCopy((uint8_t *)USBD_BUF_BASE + USBD_GET_EP_BUF_ADDR(EP0), (uint8_t *)g_usbd_CtrlInPointer, g_usbd_CtrlInSize); + USBD_SET_PAYLOAD_LEN(EP0, g_usbd_CtrlInSize); + if(g_usbd_CtrlInSize == g_usbd_CtrlMaxPktSize) + u8ZeroFlag = 1; + g_usbd_CtrlInPointer = 0; + g_usbd_CtrlInSize = 0; + } + } + else // No more data for IN token + { + // In ACK for Set address + if((g_usbd_SetupPacket[0] == REQ_STANDARD) && (g_usbd_SetupPacket[1] == SET_ADDRESS)) + { + if((USBD_GET_ADDR() != g_usbd_UsbAddr) && (USBD_GET_ADDR() == 0)) + { + USBD_SET_ADDR(g_usbd_UsbAddr); + } + } + + /* For the case of data size is integral times maximum packet size */ + if(u8ZeroFlag) + { + USBD_SET_PAYLOAD_LEN(EP0, 0); + u8ZeroFlag = 0; + } + + DBG_PRINTF("Ctrl In done.\n"); + + } +} + +/** + * @brief Prepare the first Control OUT pipe + * + * @param[in] pu8Buf The pointer of data received from USB host. + * @param[in] u32Size The OUT transfer size. + * + * @return None + * + * @details This function is used to prepare the first Control OUT transfer. + * + */ +void USBD_PrepareCtrlOut(uint8_t *pu8Buf, uint32_t u32Size) +{ + g_usbd_CtrlOutPointer = pu8Buf; + g_usbd_CtrlOutSize = 0; + g_usbd_CtrlOutSizeLimit = u32Size; + USBD_SET_PAYLOAD_LEN(EP1, g_usbd_CtrlMaxPktSize); +} + +/** + * @brief Repeat Control OUT pipe + * + * @param None + * + * @return None + * + * @details This function processes the successive Control OUT transfer. + * + */ +void USBD_CtrlOut(void) +{ + uint32_t u32Size; + + DBG_PRINTF("Ctrl Out Ack %d\n", g_usbd_CtrlOutSize); + + if(g_usbd_CtrlOutSize < g_usbd_CtrlOutSizeLimit) + { + u32Size = USBD_GET_PAYLOAD_LEN(EP1); + USBD_MemCopy((uint8_t *)g_usbd_CtrlOutPointer, (uint8_t *)USBD_BUF_BASE + USBD_GET_EP_BUF_ADDR(EP1), u32Size); + g_usbd_CtrlOutPointer += u32Size; + g_usbd_CtrlOutSize += u32Size; + + if(g_usbd_CtrlOutSize < g_usbd_CtrlOutSizeLimit) + USBD_SET_PAYLOAD_LEN(EP1, g_usbd_CtrlMaxPktSize); + + } +} + +/** + * @brief Reset software flags + * + * @param None + * + * @return None + * + * @details This function resets all variables for protocol and resets USB device address to 0. + * + */ +void USBD_SwReset(void) +{ + int i; + + // Reset all variables for protocol + g_usbd_CtrlInPointer = 0; + g_usbd_CtrlInSize = 0; + g_usbd_CtrlOutPointer = 0; + g_usbd_CtrlOutSize = 0; + g_usbd_CtrlOutSizeLimit = 0; + g_u32EpStallLock = 0; + memset(g_usbd_SetupPacket, 0, 8); + + /* Reset PID DATA0 */ + for(i=0; iEP[i].CFG &= ~USBD_CFG_DSQSYNC_Msk; + + // Reset USB device address + USBD_SET_ADDR(0); +} + +/** + * @brief USBD Set Vendor Request + * + * @param[in] pfnVendorReq Vendor Request Callback Function + * + * @return None + * + * @details This function is used to set USBD vendor request callback function + */ +void USBD_SetVendorRequest(VENDOR_REQ pfnVendorReq) +{ + g_usbd_pfnVendorRequest = pfnVendorReq; +} + +/** + * @brief The callback function which called when get SET CONFIGURATION request + * + * @param[in] pfnSetConfigCallback Callback function pointer for SET CONFIGURATION request + * + * @return None + * + * @details This function is used to set the callback function which will be called at SET CONFIGURATION request. + */ +void USBD_SetConfigCallback(SET_CONFIG_CB pfnSetConfigCallback) +{ + g_usbd_pfnSetConfigCallback = pfnSetConfigCallback; +} + + +/** + * @brief EP stall lock function to avoid stall clear by USB SET FEATURE request. + * + * @param[in] u32EpBitmap Use bitmap to select which endpoints will be locked + * + * @return None + * + * @details This function is used to lock relative endpoint to avoid stall clear by SET FEATURE requst. + * If ep stall locked, user needs to reset USB device or re-configure device to clear it. + */ +void USBD_LockEpStall(uint32_t u32EpBitmap) +{ + g_u32EpStallLock = u32EpBitmap; +} + + + + + +/*@}*/ /* end of group USBD_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group USBD_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +#ifdef __cplusplus +} +#endif + +/*** (C) COPYRIGHT 2014~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_usbd.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_usbd.h new file mode 100644 index 00000000000..55d6adbf359 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_usbd.h @@ -0,0 +1,664 @@ +/****************************************************************************** + * @file usbd.h + * @brief M451 series USB driver header file + * @version 2.0.0 + * @date 10, January, 2014 + * + * @note + * Copyright (C) 2014~2015 Nuvoton Technology Corp. All rights reserved. + ******************************************************************************/ +#ifndef __USBD_H__ +#define __USBD_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup USBD_Driver USBD Driver + @{ +*/ + +/** @addtogroup USBD_EXPORTED_STRUCTS USBD Exported Structs + @{ +*/ +typedef struct s_usbd_info +{ + const uint8_t *gu8DevDesc; /*!< Pointer for USB Device Descriptor */ + const uint8_t *gu8ConfigDesc; /*!< Pointer for USB Configuration Descriptor */ + const uint8_t **gu8StringDesc; /*!< Pointer for USB String Descriptor pointers */ + const uint8_t **gu8HidReportDesc; /*!< Pointer for USB HID Report Descriptor */ + const uint32_t *gu32HidReportSize; /*!< Pointer for HID Report descriptor Size */ + const uint32_t *gu32ConfigHidDescIdx; /*!< Pointer for HID Descriptor start index */ + +} S_USBD_INFO_T; + +extern const S_USBD_INFO_T gsInfo; + +/*@}*/ /* end of group USBD_EXPORTED_STRUCTS */ + + + + +/** @addtogroup USBD_EXPORTED_CONSTANTS USBD Exported Constants + @{ +*/ +#define USBD_BUF_BASE (USBD_BASE+0x100) +#define USBD_MAX_EP 8 + +#define EP0 0 /*!< Endpoint 0 */ +#define EP1 1 /*!< Endpoint 1 */ +#define EP2 2 /*!< Endpoint 2 */ +#define EP3 3 /*!< Endpoint 3 */ +#define EP4 4 /*!< Endpoint 4 */ +#define EP5 5 /*!< Endpoint 5 */ +#define EP6 6 /*!< Endpoint 6 */ +#define EP7 7 /*!< Endpoint 7 */ + + +/*! b, then return a. Otherwise, return b. + */ +#define Maximum(a,b) ((a)>(b) ? (a) : (b)) + + +/** + * @brief Compare two input numbers and return minimum one + * + * @param[in] a First number to be compared + * @param[in] b Second number to be compared + * + * @return Minimum value between a and b + * + * @details If a < b, then return a. Otherwise, return b. + */ +#define Minimum(a,b) ((a)<(b) ? (a) : (b)) + + +/** + * @brief Enable USB + * + * @param None + * + * @return None + * + * @details To set USB ATTR control register to enable USB and PHY. + * + */ +#define USBD_ENABLE_USB() ((uint32_t)(USBD->ATTR |= (USBD_USB_EN|USBD_PHY_EN))) + +/** + * @brief Disable USB + * + * @param None + * + * @return None + * + * @details To set USB ATTR control register to disable USB. + * + */ +#define USBD_DISABLE_USB() ((uint32_t)(USBD->ATTR &= ~USBD_USB_EN)) + +/** + * @brief Enable USB PHY + * + * @param None + * + * @return None + * + * @details To set USB ATTR control register to enable USB PHY. + * + */ +#define USBD_ENABLE_PHY() ((uint32_t)(USBD->ATTR |= USBD_PHY_EN)) + +/** + * @brief Disable USB PHY + * + * @param None + * + * @return None + * + * @details To set USB ATTR control register to disable USB PHY. + * + */ +#define USBD_DISABLE_PHY() ((uint32_t)(USBD->ATTR &= ~USBD_PHY_EN)) + +/** + * @brief Enable SE0. Force USB PHY transceiver to drive SE0. + * + * @param None + * + * @return None + * + * @details Set DRVSE0 bit of USB_DRVSE0 register to enable software-disconnect function. Force USB PHY transceiver to drive SE0 to bus. + * + */ +#define USBD_SET_SE0() ((uint32_t)(USBD->SE0 |= USBD_DRVSE0)) + +/** + * @brief Disable SE0 + * + * @param None + * + * @return None + * + * @details Clear DRVSE0 bit of USB_DRVSE0 register to disable software-disconnect function. + * + */ +#define USBD_CLR_SE0() ((uint32_t)(USBD->SE0 &= ~USBD_DRVSE0)) + +/** + * @brief Set USB device address + * + * @param[in] addr The USB device address. + * + * @return None + * + * @details Write USB device address to USB_FADDR register. + * + */ +#define USBD_SET_ADDR(addr) (USBD->FADDR = (addr)) + +/** + * @brief Get USB device address + * + * @param None + * + * @return USB device address + * + * @details Read USB_FADDR register to get USB device address. + * + */ +#define USBD_GET_ADDR() ((uint32_t)(USBD->FADDR)) + +/** + * @brief Enable USB interrupt function + * + * @param[in] intr The combination of the specified interrupt enable bits. + * Each bit corresponds to a interrupt enable bit. + * This parameter decides which interrupts will be enabled. + * (USBD_INT_WAKEUP, USBD_INT_FLDET, USBD_INT_USB, USBD_INT_BUS) + * + * @return None + * + * @details Enable USB related interrupt functions specified by intr parameter. + * + */ +#define USBD_ENABLE_INT(intr) (USBD->INTEN |= (intr)) + +/** + * @brief Get interrupt status + * + * @param None + * + * @return The value of USB_INTSTS register + * + * @details Return all interrupt flags of USB_INTSTS register. + * + */ +#define USBD_GET_INT_FLAG() ((uint32_t)(USBD->INTSTS)) + +/** + * @brief Clear USB interrupt flag + * + * @param[in] flag The combination of the specified interrupt flags. + * Each bit corresponds to a interrupt source. + * This parameter decides which interrupt flags will be cleared. + * (USBD_INTSTS_WAKEUP, USBD_INTSTS_FLDET, USBD_INTSTS_BUS, USBD_INTSTS_USB) + * + * @return None + * + * @details Clear USB related interrupt flags specified by flag parameter. + * + */ +#define USBD_CLR_INT_FLAG(flag) (USBD->INTSTS = (flag)) + +/** + * @brief Get endpoint status + * + * @param None + * + * @return The value of USB_EPSTS register. + * + * @details Return all endpoint status. + * + */ +#define USBD_GET_EP_FLAG() ((uint32_t)(USBD->EPSTS)) + +/** + * @brief Get USB bus state + * + * @param None + * + * @return The value of USB_ATTR[3:0]. + * Bit 0 indicates USB bus reset status. + * Bit 1 indicates USB bus suspend status. + * Bit 2 indicates USB bus resume status. + * Bit 3 indicates USB bus time-out status. + * + * @details Return USB_ATTR[3:0] for USB bus events. + * + */ +#define USBD_GET_BUS_STATE() ((uint32_t)(USBD->ATTR & 0xf)) + +/** + * @brief Check cable connection state + * + * @param None + * + * @retval 0 USB cable is not attached. + * @retval 1 USB cable is attached. + * + * @details Check the connection state by FLDET bit of USB_FLDET register. + * + */ +#define USBD_IS_ATTACHED() ((uint32_t)(USBD->VBUSDET & USBD_VBUSDET_VBUSDET_Msk)) + +/** + * @brief Stop USB transaction of the specified endpoint ID + * + * @param[in] ep The USB endpoint ID. M451 Series supports 8 hardware endpoint ID. This parameter could be 0 ~ 7. + * + * @return None + * + * @details Write 1 to CLRRDY bit of USB_CFGPx register to stop USB transaction of the specified endpoint ID. + * + */ +#define USBD_STOP_TRANSACTION(ep) (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].CFGP + (uint32_t)((ep) << 4))) |= USBD_CFGP_CLRRDY_Msk) + +/** + * @brief Set USB DATA1 PID for the specified endpoint ID + * + * @param[in] ep The USB endpoint ID. M451 Series supports 8 hardware endpoint ID. This parameter could be 0 ~ 7. + * + * @return None + * + * @details Set DSQ_SYNC bit of USB_CFGx register to specify the DATA1 PID for the following IN token transaction. + * Base on this setting, hardware will toggle PID between DATA0 and DATA1 automatically for IN token transactions. + * + */ +#define USBD_SET_DATA1(ep) (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].CFG + (uint32_t)((ep) << 4))) |= USBD_CFG_DSQSYNC_Msk) + +/** + * @brief Set USB DATA0 PID for the specified endpoint ID + * + * @param[in] ep The USB endpoint ID. M451 Series supports 8 hardware endpoint ID. This parameter could be 0 ~ 7. + * + * @return None + * + * @details Clear DSQ_SYNC bit of USB_CFGx register to specify the DATA0 PID for the following IN token transaction. + * Base on this setting, hardware will toggle PID between DATA0 and DATA1 automatically for IN token transactions. + * + */ +#define USBD_SET_DATA0(ep) (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].CFG + (uint32_t)((ep) << 4))) &= (~USBD_CFG_DSQSYNC_Msk)) + +/** + * @brief Set USB payload size (IN data) + * + * @param[in] ep The USB endpoint ID. M451 Series supports 8 hardware endpoint ID. This parameter could be 0 ~ 7. + * + * @param[in] size The transfer length. + * + * @return None + * + * @details This macro will write the transfer length to USB_MXPLDx register for IN data transaction. + * + */ +#define USBD_SET_PAYLOAD_LEN(ep, size) (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].MXPLD + (uint32_t)((ep) << 4))) = (size)) + +/** + * @brief Get USB payload size (OUT data) + * + * @param[in] ep The USB endpoint ID. M451 Series supports 8 endpoint ID. This parameter could be 0 ~ 7. + * + * @return The value of USB_MXPLDx register. + * + * @details Get the data length of OUT data transaction by reading USB_MXPLDx register. + * + */ +#define USBD_GET_PAYLOAD_LEN(ep) ((uint32_t)*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].MXPLD + (uint32_t)((ep) << 4)))) + +/** + * @brief Configure endpoint + * + * @param[in] ep The USB endpoint ID. M451 Series supports 8 hardware endpoint ID. This parameter could be 0 ~ 7. + * + * @param[in] config The USB configuration. + * + * @return None + * + * @details This macro will write config parameter to USB_CFGx register of specified endpoint ID. + * + */ +#define USBD_CONFIG_EP(ep, config) (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].CFG + (uint32_t)((ep) << 4))) = (config)) + +/** + * @brief Set USB endpoint buffer + * + * @param[in] ep The USB endpoint ID. M451 Series supports 8 hardware endpoint ID. This parameter could be 0 ~ 7. + * + * @param[in] offset The SRAM offset. + * + * @return None + * + * @details This macro will set the SRAM offset for the specified endpoint ID. + * + */ +#define USBD_SET_EP_BUF_ADDR(ep, offset) (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].BUFSEG + (uint32_t)((ep) << 4))) = (offset)) + +/** + * @brief Get the offset of the specified USB endpoint buffer + * + * @param[in] ep The USB endpoint ID. M451 Series supports 8 hardware endpoint ID. This parameter could be 0 ~ 7. + * + * @return The offset of the specified endpoint buffer. + * + * @details This macro will return the SRAM offset of the specified endpoint ID. + * + */ +#define USBD_GET_EP_BUF_ADDR(ep) ((uint32_t)*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].BUFSEG + (uint32_t)((ep) << 4)))) + +/** + * @brief Set USB endpoint stall state + * + * @param[in] ep The USB endpoint ID. M451 Series supports 8 hardware endpoint ID. This parameter could be 0 ~ 7. + * + * @return None + * + * @details Set USB endpoint stall state for the specified endpoint ID. Endpoint will respond STALL token automatically. + * + */ +#define USBD_SET_EP_STALL(ep) (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].CFGP + (uint32_t)((ep) << 4))) |= USBD_CFGP_SSTALL_Msk) + +/** + * @brief Clear USB endpoint stall state + * + * @param[in] ep The USB endpoint ID. M451 Series supports 8 hardware endpoint ID. This parameter could be 0 ~ 7. + * + * @return None + * + * @details Clear USB endpoint stall state for the specified endpoint ID. Endpoint will respond ACK/NAK token. + */ +#define USBD_CLR_EP_STALL(ep) (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].CFGP + (uint32_t)((ep) << 4))) &= ~USBD_CFGP_SSTALL_Msk) + +/** + * @brief Get USB endpoint stall state + * + * @param[in] ep The USB endpoint ID. M451 Series supports 8 hardware endpoint ID. This parameter could be 0 ~ 7. + * + * @retval 0 USB endpoint is not stalled. + * @retval Others USB endpoint is stalled. + * + * @details Get USB endpoint stall state of the specified endpoint ID. + * + */ +#define USBD_GET_EP_STALL(ep) (*((__IO uint32_t *) ((uint32_t)&USBD->EP[0].CFGP + (uint32_t)((ep) << 4))) & USBD_CFGP_SSTALL_Msk) + +/** + * @brief To support byte access between USB SRAM and system SRAM + * + * @param[in] dest Destination pointer. + * + * @param[in] src Source pointer. + * + * @param[in] size Byte count. + * + * @return None + * + * @details This function will copy the number of data specified by size and src parameters to the address specified by dest parameter. + * + */ +static __INLINE void USBD_MemCopy(uint8_t *dest, uint8_t *src, int32_t size) +{ + while(size--) *dest++ = *src++; +} + + +/** + * @brief Set USB endpoint stall state + * + * @param[in] epnum USB endpoint number + * + * @return None + * + * @details Set USB endpoint stall state. Endpoint will respond STALL token automatically. + * + */ +static __INLINE void USBD_SetStall(uint8_t epnum) +{ + uint32_t u32CfgAddr; + uint32_t u32Cfg; + int i; + + for(i = 0; i < USBD_MAX_EP; i++) + { + u32CfgAddr = (uint32_t)(i << 4) + (uint32_t)&USBD->EP[0].CFG; /* USBD_CFG0 */ + u32Cfg = *((__IO uint32_t *)(u32CfgAddr)); + + if((u32Cfg & 0xf) == epnum) + { + u32CfgAddr = (uint32_t)(i << 4) + (uint32_t)&USBD->EP[0].CFGP; /* USBD_CFGP0 */ + u32Cfg = *((__IO uint32_t *)(u32CfgAddr)); + + *((__IO uint32_t *)(u32CfgAddr)) = (u32Cfg | USBD_CFGP_SSTALL); + break; + } + } +} + +/** + * @brief Clear USB endpoint stall state + * + * @param[in] epnum USB endpoint number + * + * @return None + * + * @details Clear USB endpoint stall state. Endpoint will respond ACK/NAK token. + */ +static __INLINE void USBD_ClearStall(uint8_t epnum) +{ + uint32_t u32CfgAddr; + uint32_t u32Cfg; + int i; + + for(i = 0; i < USBD_MAX_EP; i++) + { + u32CfgAddr = (uint32_t)(i << 4) + (uint32_t)&USBD->EP[0].CFG; /* USBD_CFG0 */ + u32Cfg = *((__IO uint32_t *)(u32CfgAddr)); + + if((u32Cfg & 0xf) == epnum) + { + u32CfgAddr = (uint32_t)(i << 4) + (uint32_t)&USBD->EP[0].CFGP; /* USBD_CFGP0 */ + u32Cfg = *((__IO uint32_t *)(u32CfgAddr)); + + *((__IO uint32_t *)(u32CfgAddr)) = (u32Cfg & ~USBD_CFGP_SSTALL); + break; + } + } +} + +/** + * @brief Get USB endpoint stall state + * + * @param[in] epnum USB endpoint number + * + * @retval 0 USB endpoint is not stalled. + * @retval Others USB endpoint is stalled. + * + * @details Get USB endpoint stall state. + * + */ +static __INLINE uint32_t USBD_GetStall(uint8_t epnum) +{ + uint32_t u32CfgAddr; + uint32_t u32Cfg; + int i; + + for(i = 0; i < USBD_MAX_EP; i++) + { + u32CfgAddr = (uint32_t)(i << 4) + (uint32_t)&USBD->EP[0].CFG; /* USBD_CFG0 */ + u32Cfg = *((__IO uint32_t *)(u32CfgAddr)); + + if((u32Cfg & 0xf) == epnum) + { + u32CfgAddr = (uint32_t)(i << 4) + (uint32_t)&USBD->EP[0].CFGP; /* USBD_CFGP0 */ + break; + } + } + + return ((*((__IO uint32_t *)(u32CfgAddr))) & USBD_CFGP_SSTALL); +} + + +extern volatile uint8_t g_usbd_RemoteWakeupEn; + + +typedef void (*VENDOR_REQ)(void); /*!< Functional pointer type definition for Vendor class */ +typedef void (*CLASS_REQ)(void); /*!< Functional pointer type declaration for USB class request callback handler */ +typedef void (*SET_INTERFACE_REQ)(void); /*!< Functional pointer type declaration for USB set interface request callback handler */ +typedef void (*SET_CONFIG_CB)(void); /*!< Functional pointer type declaration for USB set configuration request callback handler */ + + +/*--------------------------------------------------------------------*/ +void USBD_Open(const S_USBD_INFO_T *param, CLASS_REQ pfnClassReq, SET_INTERFACE_REQ pfnSetInterface); +void USBD_Start(void); +void USBD_GetSetupPacket(uint8_t *buf); +void USBD_ProcessSetupPacket(void); +void USBD_StandardRequest(void); +void USBD_PrepareCtrlIn(uint8_t *pu8Buf, uint32_t u32Size); +void USBD_CtrlIn(void); +void USBD_PrepareCtrlOut(uint8_t *pu8Buf, uint32_t u32Size); +void USBD_CtrlOut(void); +void USBD_SwReset(void); +void USBD_SetVendorRequest(VENDOR_REQ pfnVendorReq); +void USBD_SetConfigCallback(SET_CONFIG_CB pfnSetConfigCallback); +void USBD_LockEpStall(uint32_t u32EpBitmap); + +/*@}*/ /* end of group USBD_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group USBD_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +#ifdef __cplusplus +} +#endif + +#endif //__USBD_H__ + +/*** (C) COPYRIGHT 2014~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_wdt.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_wdt.c new file mode 100644 index 00000000000..b8718b55293 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_wdt.c @@ -0,0 +1,71 @@ +/**************************************************************************//** + * @file wdt.c + * @version V3.00 + * $Revision: 5 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series WDT driver source file + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ +#include "M451Series.h" + + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup WDT_Driver WDT Driver + @{ +*/ + +/** @addtogroup WDT_EXPORTED_FUNCTIONS WDT Exported Functions + @{ +*/ + +/** + * @brief Initialize WDT and start counting + * + * @param[in] u32TimeoutInterval Time-out interval period of WDT module. Valid values are: + * - \ref WDT_TIMEOUT_2POW4 + * - \ref WDT_TIMEOUT_2POW6 + * - \ref WDT_TIMEOUT_2POW8 + * - \ref WDT_TIMEOUT_2POW10 + * - \ref WDT_TIMEOUT_2POW12 + * - \ref WDT_TIMEOUT_2POW14 + * - \ref WDT_TIMEOUT_2POW16 + * - \ref WDT_TIMEOUT_2POW18 + * @param[in] u32ResetDelay Configure WDT time-out reset delay period. Valid values are: + * - \ref WDT_RESET_DELAY_1026CLK + * - \ref WDT_RESET_DELAY_130CLK + * - \ref WDT_RESET_DELAY_18CLK + * - \ref WDT_RESET_DELAY_3CLK + * @param[in] u32EnableReset Enable WDT time-out reset system function. Valid values are TRUE and FALSE. + * @param[in] u32EnableWakeup Enable WDT time-out wake-up system function. Valid values are TRUE and FALSE. + * + * @return None + * + * @details This function makes WDT module start counting with different time-out interval, reset delay period and choose to \n + * enable or disable WDT time-out reset system or wake-up system. + * @note Please make sure that Register Write-Protection Function has been disabled before using this function. + */ +void WDT_Open(uint32_t u32TimeoutInterval, + uint32_t u32ResetDelay, + uint32_t u32EnableReset, + uint32_t u32EnableWakeup) +{ + WDT->ALTCTL = u32ResetDelay; + + WDT->CTL = u32TimeoutInterval | WDT_CTL_WDTEN_Msk | + (u32EnableReset << WDT_CTL_RSTEN_Pos) | + (u32EnableWakeup << WDT_CTL_WKEN_Pos); + return; +} + +/*@}*/ /* end of group WDT_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group WDT_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +/*** (C) COPYRIGHT 2013~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_wdt.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_wdt.h new file mode 100644 index 00000000000..3c22721916d --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_wdt.h @@ -0,0 +1,201 @@ +/**************************************************************************//** + * @file wdt.h + * @version V3.00 + * $Revision: 7 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series WDT driver header file + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. + *****************************************************************************/ +#ifndef __WDT_H__ +#define __WDT_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup WDT_Driver WDT Driver + @{ +*/ + +/** @addtogroup WDT_EXPORTED_CONSTANTS WDT Exported Constants + @{ +*/ +/*---------------------------------------------------------------------------------------------------------*/ +/* WDT Time-out Interval Period Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define WDT_TIMEOUT_2POW4 (0UL << WDT_CTL_TOUTSEL_Pos) /*!< Setting WDT time-out interval to 2^4 * WDT clocks */ +#define WDT_TIMEOUT_2POW6 (1UL << WDT_CTL_TOUTSEL_Pos) /*!< Setting WDT time-out interval to 2^6 * WDT clocks */ +#define WDT_TIMEOUT_2POW8 (2UL << WDT_CTL_TOUTSEL_Pos) /*!< Setting WDT time-out interval to 2^8 * WDT clocks */ +#define WDT_TIMEOUT_2POW10 (3UL << WDT_CTL_TOUTSEL_Pos) /*!< Setting WDT time-out interval to 2^10 * WDT clocks */ +#define WDT_TIMEOUT_2POW12 (4UL << WDT_CTL_TOUTSEL_Pos) /*!< Setting WDT time-out interval to 2^12 * WDT clocks */ +#define WDT_TIMEOUT_2POW14 (5UL << WDT_CTL_TOUTSEL_Pos) /*!< Setting WDT time-out interval to 2^14 * WDT clocks */ +#define WDT_TIMEOUT_2POW16 (6UL << WDT_CTL_TOUTSEL_Pos) /*!< Setting WDT time-out interval to 2^16 * WDT clocks */ +#define WDT_TIMEOUT_2POW18 (7UL << WDT_CTL_TOUTSEL_Pos) /*!< Setting WDT time-out interval to 2^18 * WDT clocks */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* WDT Reset Delay Period Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define WDT_RESET_DELAY_1026CLK (0UL << WDT_ALTCTL_RSTDSEL_Pos) /*!< Setting WDT reset delay period to 1026 * WDT clocks */ +#define WDT_RESET_DELAY_130CLK (1UL << WDT_ALTCTL_RSTDSEL_Pos) /*!< Setting WDT reset delay period to 130 * WDT clocks */ +#define WDT_RESET_DELAY_18CLK (2UL << WDT_ALTCTL_RSTDSEL_Pos) /*!< Setting WDT reset delay period to 18 * WDT clocks */ +#define WDT_RESET_DELAY_3CLK (3UL << WDT_ALTCTL_RSTDSEL_Pos) /*!< Setting WDT reset delay period to 3 * WDT clocks */ + +/*@}*/ /* end of group WDT_EXPORTED_CONSTANTS */ + + +/** @addtogroup WDT_EXPORTED_FUNCTIONS WDT Exported Functions + @{ +*/ + +/** + * @brief Clear WDT Reset System Flag + * + * @param None + * + * @return None + * + * @details This macro clears WDT time-out reset system flag. + */ +#define WDT_CLEAR_RESET_FLAG() (WDT->CTL = (WDT->CTL & ~(WDT_CTL_IF_Msk | WDT_CTL_WKF_Msk)) | WDT_CTL_RSTF_Msk) + +/** + * @brief Clear WDT Time-out Interrupt Flag + * + * @param None + * + * @return None + * + * @details This macro clears WDT time-out interrupt flag. + */ +#define WDT_CLEAR_TIMEOUT_INT_FLAG() (WDT->CTL = (WDT->CTL & ~(WDT_CTL_RSTF_Msk | WDT_CTL_WKF_Msk)) | WDT_CTL_IF_Msk) + +/** + * @brief Clear WDT Wake-up Flag + * + * @param None + * + * @return None + * + * @details This macro clears WDT time-out wake-up system flag. + */ +#define WDT_CLEAR_TIMEOUT_WAKEUP_FLAG() (WDT->CTL = (WDT->CTL & ~(WDT_CTL_RSTF_Msk | WDT_CTL_IF_Msk)) | WDT_CTL_WKF_Msk) + +/** + * @brief Get WDT Time-out Reset Flag + * + * @param None + * + * @retval 0 WDT time-out reset system did not occur + * @retval 1 WDT time-out reset system occurred + * + * @details This macro indicates system has been reset by WDT time-out reset or not. + */ +#define WDT_GET_RESET_FLAG() ((WDT->CTL & WDT_CTL_RSTF_Msk)? 1 : 0) + +/** + * @brief Get WDT Time-out Interrupt Flag + * + * @param None + * + * @retval 0 WDT time-out interrupt did not occur + * @retval 1 WDT time-out interrupt occurred + * + * @details This macro indicates WDT time-out interrupt occurred or not. + */ +#define WDT_GET_TIMEOUT_INT_FLAG() ((WDT->CTL & WDT_CTL_IF_Msk)? 1 : 0) + +/** + * @brief Get WDT Time-out Wake-up Flag + * + * @param None + * + * @retval 0 WDT time-out interrupt does not cause CPU wake-up + * @retval 1 WDT time-out interrupt event cause CPU wake-up + * + * @details This macro indicates WDT time-out interrupt event has waked up system or not. + */ +#define WDT_GET_TIMEOUT_WAKEUP_FLAG() ((WDT->CTL & WDT_CTL_WKF_Msk)? 1 : 0) + +/** + * @brief Reset WDT Counter + * + * @param None + * + * @return None + * + * @details This macro is used to reset the internal 18-bit WDT up counter value. + * @note If WDT is activated and time-out reset system function is enabled also, user should \n + * reset the 18-bit WDT up counter value to avoid generate WDT time-out reset signal to \n + * reset system before the WDT time-out reset delay period expires. + */ +#define WDT_RESET_COUNTER() (WDT->CTL = (WDT->CTL & ~(WDT_CTL_IF_Msk | WDT_CTL_WKF_Msk | WDT_CTL_RSTF_Msk)) | WDT_CTL_RSTCNT_Msk) + +/** + * @brief Stop WDT Counting + * + * @param None + * + * @return None + * + * @details This function will stop WDT counting and disable WDT module. + */ +static __INLINE void WDT_Close(void) +{ + WDT->CTL = 0; + return; +} + +/** + * @brief Enable WDT Time-out Interrupt + * + * @param None + * + * @return None + * + * @details This function will enable the WDT time-out interrupt function. + */ +static __INLINE void WDT_EnableInt(void) +{ + WDT->CTL |= WDT_CTL_INTEN_Msk; + return; +} + +/** + * @brief Disable WDT Time-out Interrupt + * + * @param None + * + * @return None + * + * @details This function will disable the WDT time-out interrupt function. + */ +static __INLINE void WDT_DisableInt(void) +{ + // Do not touch another write 1 clear bits + WDT->CTL &= ~(WDT_CTL_INTEN_Msk | WDT_CTL_RSTF_Msk | WDT_CTL_IF_Msk | WDT_CTL_WKF_Msk); + return; +} + +void WDT_Open(uint32_t u32TimeoutInterval, uint32_t u32ResetDelay, uint32_t u32EnableReset, uint32_t u32EnableWakeup); + +/*@}*/ /* end of group WDT_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group WDT_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +#ifdef __cplusplus +} +#endif + +#endif //__WDT_H__ + +/*** (C) COPYRIGHT 2013~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_wwdt.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_wwdt.c new file mode 100644 index 00000000000..439dbaf8cbb --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_wwdt.c @@ -0,0 +1,71 @@ +/**************************************************************************//** + * @file wwdt.c + * @version V3.00 + * $Revision: 4 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series WWDT driver source file + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ +#include "M451Series.h" + + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup WWDT_Driver WWDT Driver + @{ +*/ + +/** @addtogroup WWDT_EXPORTED_FUNCTIONS WWDT Exported Functions + @{ +*/ + +/** + * @brief Open WWDT and start counting + * + * @param[in] u32PreScale Pre-scale setting of WWDT counter. Valid values are: + * - \ref WWDT_PRESCALER_1 + * - \ref WWDT_PRESCALER_2 + * - \ref WWDT_PRESCALER_4 + * - \ref WWDT_PRESCALER_8 + * - \ref WWDT_PRESCALER_16 + * - \ref WWDT_PRESCALER_32 + * - \ref WWDT_PRESCALER_64 + * - \ref WWDT_PRESCALER_128 + * - \ref WWDT_PRESCALER_192 + * - \ref WWDT_PRESCALER_256 + * - \ref WWDT_PRESCALER_384 + * - \ref WWDT_PRESCALER_512 + * - \ref WWDT_PRESCALER_768 + * - \ref WWDT_PRESCALER_1024 + * - \ref WWDT_PRESCALER_1536 + * - \ref WWDT_PRESCALER_2048 + * @param[in] u32CmpValue Setting the window compared value. Valid values are between 0x0 to 0x3F. + * @param[in] u32EnableInt Enable WWDT time-out interrupt function. Valid values are TRUE and FALSE. + * + * @return None + * + * @details This function makes WWDT module start counting with different counter period by pre-scale setting and compared window value. + * @note This WWDT_CTL register can be write only one time after chip is powered on or reset. + */ +void WWDT_Open(uint32_t u32PreScale, + uint32_t u32CmpValue, + uint32_t u32EnableInt) +{ + WWDT->CTL = u32PreScale | + (u32CmpValue << WWDT_CTL_CMPDAT_Pos) | + ((u32EnableInt == TRUE) ? WWDT_CTL_INTEN_Msk : 0) | + WWDT_CTL_WWDTEN_Msk; + return; +} + +/*@}*/ /* end of group WWDT_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group WWDT_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +/*** (C) COPYRIGHT 2013~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_wwdt.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_wwdt.h new file mode 100644 index 00000000000..56e8a831e15 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_wwdt.h @@ -0,0 +1,148 @@ +/**************************************************************************//** + * @file wwdt.h + * @version V3.00 + * $Revision: 7 $ + * $Date: 15/08/11 10:26a $ + * @brief M451 series WWDT driver header file + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. + *****************************************************************************/ +#ifndef __WWDT_H__ +#define __WWDT_H__ + +#ifdef __cplusplus +extern "C" +{ +#endif + + +/** @addtogroup Standard_Driver Standard Driver + @{ +*/ + +/** @addtogroup WWDT_Driver WWDT Driver + @{ +*/ + +/** @addtogroup WWDT_EXPORTED_CONSTANTS WWDT Exported Constants + @{ +*/ +/*---------------------------------------------------------------------------------------------------------*/ +/* WWDT Prescale Period Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define WWDT_PRESCALER_1 (0 << WWDT_CTL_PSCSEL_Pos) /*!< Select max time-out period to 1 * (64*WWDT_CLK) */ +#define WWDT_PRESCALER_2 (1 << WWDT_CTL_PSCSEL_Pos) /*!< Select max time-out period to 2 * (64*WWDT_CLK) */ +#define WWDT_PRESCALER_4 (2 << WWDT_CTL_PSCSEL_Pos) /*!< Select max time-out period to 4 * (64*WWDT_CLK) */ +#define WWDT_PRESCALER_8 (3 << WWDT_CTL_PSCSEL_Pos) /*!< Select max time-out period to 8 * (64*WWDT_CLK) */ +#define WWDT_PRESCALER_16 (4 << WWDT_CTL_PSCSEL_Pos) /*!< Select max time-out period to 16 * (64*WWDT_CLK) */ +#define WWDT_PRESCALER_32 (5 << WWDT_CTL_PSCSEL_Pos) /*!< Select max time-out period to 32 * (64*WWDT_CLK) */ +#define WWDT_PRESCALER_64 (6 << WWDT_CTL_PSCSEL_Pos) /*!< Select max time-out period to 64 * (64*WWDT_CLK) */ +#define WWDT_PRESCALER_128 (7 << WWDT_CTL_PSCSEL_Pos) /*!< Select max time-out period to 128 * (64*WWDT_CLK) */ +#define WWDT_PRESCALER_192 (8 << WWDT_CTL_PSCSEL_Pos) /*!< Select max time-out period to 192 * (64*WWDT_CLK) */ +#define WWDT_PRESCALER_256 (9 << WWDT_CTL_PSCSEL_Pos) /*!< Select max time-out period to 256 * (64*WWDT_CLK) */ +#define WWDT_PRESCALER_384 (10 << WWDT_CTL_PSCSEL_Pos) /*!< Select max time-out period to 384 * (64*WWDT_CLK) */ +#define WWDT_PRESCALER_512 (11 << WWDT_CTL_PSCSEL_Pos) /*!< Select max time-out period to 512 * (64*WWDT_CLK) */ +#define WWDT_PRESCALER_768 (12 << WWDT_CTL_PSCSEL_Pos) /*!< Select max time-out period to 768 * (64*WWDT_CLK) */ +#define WWDT_PRESCALER_1024 (13 << WWDT_CTL_PSCSEL_Pos) /*!< Select max time-out period to 1024 * (64*WWDT_CLK) */ +#define WWDT_PRESCALER_1536 (14 << WWDT_CTL_PSCSEL_Pos) /*!< Select max time-out period to 1536 * (64*WWDT_CLK) */ +#define WWDT_PRESCALER_2048 (15 << WWDT_CTL_PSCSEL_Pos) /*!< Select max time-out period to 2048 * (64*WWDT_CLK) */ + +/*---------------------------------------------------------------------------------------------------------*/ +/* WWDT Reload Counter Keyword Constant Definitions */ +/*---------------------------------------------------------------------------------------------------------*/ +#define WWDT_RELOAD_WORD (0x00005AA5) /*!< Fill this value to WWDT_RLDCNT register to reload WWDT counter */ + +/*@}*/ /* end of group WWDT_EXPORTED_CONSTANTS */ + + +/** @addtogroup WWDT_EXPORTED_FUNCTIONS WWDT Exported Functions + @{ +*/ + +/** + * @brief Clear WWDT Reset System Flag + * + * @param None + * + * @return None + * + * @details This macro is used to clear WWDT time-out reset system flag. + */ +#define WWDT_CLEAR_RESET_FLAG() (WWDT->STATUS = (WWDT->STATUS & ~WWDT_STATUS_WWDTIF_Msk) | WWDT_STATUS_WWDTRF_Msk) + +/** + * @brief Clear WWDT Compared Match Interrupt Flag + * + * @param None + * + * @return None + * + * @details This macro is used to clear WWDT compared match interrupt flag. + */ +#define WWDT_CLEAR_INT_FLAG() (WWDT->STATUS = (WWDT->STATUS & ~WWDT_STATUS_WWDTRF_Msk) | WWDT_STATUS_WWDTIF_Msk) + +/** + * @brief Get WWDT Reset System Flag + * + * @param None + * + * @retval 0 WWDT time-out reset system did not occur + * @retval 1 WWDT time-out reset system occurred + * + * @details This macro is used to indicate system has been reset by WWDT time-out reset or not. + */ +#define WWDT_GET_RESET_FLAG() ((WWDT->STATUS & WWDT_STATUS_WWDTRF_Msk)? 1 : 0) + +/** + * @brief Get WWDT Compared Match Interrupt Flag + * + * @param None + * + * @retval 0 WWDT compare match interrupt did not occur + * @retval 1 WWDT compare match interrupt occurred + * + * @details This macro is used to indicate WWDT counter value matches CMPDAT value or not. + */ +#define WWDT_GET_INT_FLAG() ((WWDT->STATUS & WWDT_STATUS_WWDTIF_Msk)? 1 : 0) + +/** + * @brief Get WWDT Counter + * + * @param None + * + * @return WWDT Counter Value + * + * @details This macro reflects the current WWDT counter value. + */ +#define WWDT_GET_COUNTER() (WWDT->CNT) + +/** + * @brief Reload WWDT Counter + * + * @param None + * + * @return None + * + * @details This macro is used to reload the WWDT counter value to 0x3F. + * @note User can only write WWDT_RLDCNT register to reload WWDT counter value when current WWDT counter value \n + * between 0 and CMPDAT value. If user writes WWDT_RLDCNT when current WWDT counter value is larger than CMPDAT, \n + * WWDT reset signal will generate immediately to reset system. + */ +#define WWDT_RELOAD_COUNTER() (WWDT->RLDCNT = WWDT_RELOAD_WORD) + +void WWDT_Open(uint32_t u32PreScale, uint32_t u32CmpValue, uint32_t u32EnableInt); + +/*@}*/ /* end of group WWDT_EXPORTED_FUNCTIONS */ + +/*@}*/ /* end of group WWDT_Driver */ + +/*@}*/ /* end of group Standard_Driver */ + +#ifdef __cplusplus +} +#endif + +#endif //__WWDT_H__ + +/*** (C) COPYRIGHT 2013~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_ARM_MICRO/M453.sct b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_ARM_MICRO/M453.sct new file mode 100644 index 00000000000..0cb3c103deb --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_ARM_MICRO/M453.sct @@ -0,0 +1,28 @@ + +LR_IROM1 0x00000000 { + ER_IROM1 0x00000000 { ; load address = execution address + *(RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + + ;UVISOR AlignExpr(+0, 16) { ; 16 byte-aligned + ; uvisor-lib.a (+RW +ZI) + ;} + + ARM_LIB_STACK 0x20000000 EMPTY 0x1000 { + } + + ER_IRAMVEC 0x20001000 EMPTY (4*(16 + 64)) { ; Reserve for vectors + } + + RW_IRAM1 AlignExpr(+0, 16) { ; 16 byte-aligned + .ANY (+RW +ZI) + } + + ARM_LIB_HEAP AlignExpr(+0, 16) EMPTY (0x20000000 + 0x8000 - AlignExpr(ImageLimit(RW_IRAM1), 16)) { + } +} +ScatterAssert(LoadLimit(LR_IROM1) <= 0x00040000) ; 256 KB APROM +ScatterAssert(ImageLimit(ARM_LIB_HEAP) <= 0x20008000) ; 32 KB SRAM + diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_ARM_MICRO/sys.cpp b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_ARM_MICRO/sys.cpp new file mode 100644 index 00000000000..9060f11039a --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_ARM_MICRO/sys.cpp @@ -0,0 +1,28 @@ +/* mbed Microcontroller Library - stackheap + * Copyright (C) 2009-2011 ARM Limited. All rights reserved. + * + * Setup a fixed single stack/heap memory model, + * between the top of the RW/ZI region and the stackpointer + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +extern char Image$$ARM_LIB_STACK$$ZI$$Limit[]; +extern char Image$$ARM_LIB_HEAP$$Base[]; +extern char Image$$ARM_LIB_HEAP$$ZI$$Limit[]; +extern __value_in_regs struct __initial_stackheap __user_setup_stackheap(uint32_t R0, uint32_t R1, uint32_t R2, uint32_t R3) { + + struct __initial_stackheap r; + r.heap_base = (uint32_t)Image$$ARM_LIB_HEAP$$Base; + r.heap_limit = (uint32_t)Image$$ARM_LIB_HEAP$$ZI$$Limit; + return r; +} + +#ifdef __cplusplus +} +#endif diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_ARM_STD/M453.sct b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_ARM_STD/M453.sct new file mode 100644 index 00000000000..0cb3c103deb --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_ARM_STD/M453.sct @@ -0,0 +1,28 @@ + +LR_IROM1 0x00000000 { + ER_IROM1 0x00000000 { ; load address = execution address + *(RESET, +First) + *(InRoot$$Sections) + .ANY (+RO) + } + + ;UVISOR AlignExpr(+0, 16) { ; 16 byte-aligned + ; uvisor-lib.a (+RW +ZI) + ;} + + ARM_LIB_STACK 0x20000000 EMPTY 0x1000 { + } + + ER_IRAMVEC 0x20001000 EMPTY (4*(16 + 64)) { ; Reserve for vectors + } + + RW_IRAM1 AlignExpr(+0, 16) { ; 16 byte-aligned + .ANY (+RW +ZI) + } + + ARM_LIB_HEAP AlignExpr(+0, 16) EMPTY (0x20000000 + 0x8000 - AlignExpr(ImageLimit(RW_IRAM1), 16)) { + } +} +ScatterAssert(LoadLimit(LR_IROM1) <= 0x00040000) ; 256 KB APROM +ScatterAssert(ImageLimit(ARM_LIB_HEAP) <= 0x20008000) ; 32 KB SRAM + diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_ARM_STD/sys.cpp b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_ARM_STD/sys.cpp new file mode 100644 index 00000000000..9060f11039a --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_ARM_STD/sys.cpp @@ -0,0 +1,28 @@ +/* mbed Microcontroller Library - stackheap + * Copyright (C) 2009-2011 ARM Limited. All rights reserved. + * + * Setup a fixed single stack/heap memory model, + * between the top of the RW/ZI region and the stackpointer + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +extern char Image$$ARM_LIB_STACK$$ZI$$Limit[]; +extern char Image$$ARM_LIB_HEAP$$Base[]; +extern char Image$$ARM_LIB_HEAP$$ZI$$Limit[]; +extern __value_in_regs struct __initial_stackheap __user_setup_stackheap(uint32_t R0, uint32_t R1, uint32_t R2, uint32_t R3) { + + struct __initial_stackheap r; + r.heap_base = (uint32_t)Image$$ARM_LIB_HEAP$$Base; + r.heap_limit = (uint32_t)Image$$ARM_LIB_HEAP$$ZI$$Limit; + return r; +} + +#ifdef __cplusplus +} +#endif diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_GCC_ARM/M453.ld b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_GCC_ARM/M453.ld new file mode 100644 index 00000000000..a29952feb92 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_GCC_ARM/M453.ld @@ -0,0 +1,255 @@ +/* + * Nuvoton M453 GCC linker script file + */ + +StackSize = 0x1000; + +MEMORY +{ + VECTORS (rx) : ORIGIN = 0x00000000, LENGTH = 0x00000400 + FLASH (rx) : ORIGIN = 0x00000400, LENGTH = 0x00040000 - 0x00000400 + RAM_INTERN (rwx) : ORIGIN = 0x20000000, LENGTH = 0x00008000 - 0x00000000 +} + +/** + * Must match cmsis_nvic.h + */ +__vector_size = 4 * (16 + 64); + + +/* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * Reset_Handler : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ +ENTRY(Reset_Handler) + +SECTIONS +{ + .isr_vector : + { + __vector_table = .; + KEEP(*(.vector_table)) + . = ALIGN(4); + } > VECTORS + + /* ensure that uvisor bss is at the beginning of memory */ + .uvisor.bss (NOLOAD): + { + . = ALIGN(32); + __uvisor_bss_start = .; + + /* protected uvisor main bss */ + . = ALIGN(32); + __uvisor_bss_main_start = .; + KEEP(*(.keep.uvisor.bss.main)) + . = ALIGN(32); + __uvisor_bss_main_end = .; + + /* protected uvisor secure boxes bss */ + . = ALIGN(32); + __uvisor_bss_boxes_start = .; + KEEP(*(.keep.uvisor.bss.boxes)) + . = ALIGN(32); + __uvisor_bss_boxes_end = .; + + /* Ensure log2(size) alignment of the uvisor region, to ensure that the region can be effectively protected by the MPU. */ + . = ALIGN(1 << LOG2CEIL(__uvisor_bss_boxes_end - __uvisor_bss_start)); + __uvisor_bss_end = .; + } > RAM_INTERN + + .text : + { + /* uVisor code and data */ + . = ALIGN(4); + __uvisor_main_start = .; + *(.uvisor.main) + __uvisor_main_end = .; + + *(.text*) + + KEEP(*(.init)) + KEEP(*(.fini)) + + /* .ctors */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + + /* .dtors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.rodata*) + + KEEP(*(.eh_frame*)) + } > FLASH + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > FLASH + + .ARM.exidx : + { + __exidx_start = .; + *(.ARM.exidx* .gnu.linkonce.armexidx.*) + __exidx_end = .; + } > FLASH + + /* .stack section doesn't contains any symbols. It is only + * used for linker to reserve space for the main stack section + * WARNING: .stack should come immediately after the last secure memory + * section. This provides stack overflow detection. */ + .stack (NOLOAD): + { + __StackLimit = .; + *(.stack*); + . += StackSize - (. - __StackLimit); + } > RAM_INTERN + + /* Set stack top to end of RAM, and stack limit move down by + * size of stack_dummy section */ + __StackTop = ADDR(.stack) + SIZEOF(.stack); + __StackLimit = ADDR(.stack); + PROVIDE(__stack = __StackTop); + + /* Relocate vector table in SRAM */ + .isr_vector.reloc (NOLOAD) : + { + . = ALIGN(1 << LOG2CEIL(__vector_size)); + PROVIDE(__start_vector_table__ = .); + . += __vector_size; + PROVIDE(__end_vector_table__ = .); + } > RAM_INTERN + + .data : + { + PROVIDE( __etext = LOADADDR(.data) ); + + __data_start__ = .; + *(vtable) + *(.data*) + + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP(*(.preinit_array)) + PROVIDE_HIDDEN (__preinit_array_end = .); + + . = ALIGN(4); + /* init data */ + PROVIDE_HIDDEN (__init_array_start = .); + KEEP(*(SORT(.init_array.*))) + KEEP(*(.init_array)) + PROVIDE_HIDDEN (__init_array_end = .); + + . = ALIGN(4); + /* finit data */ + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP(*(SORT(.fini_array.*))) + KEEP(*(.fini_array)) + PROVIDE_HIDDEN (__fini_array_end = .); + + /* All data end */ + . = ALIGN(32); + __data_end__ = .; + + } >RAM_INTERN AT>FLASH + + /* uvisor configuration data */ + .uvisor.secure : + { + . = ALIGN(32); + __uvisor_secure_start = .; + + /* uvisor secure boxes configuration tables */ + . = ALIGN(32); + __uvisor_cfgtbl_start = .; + KEEP(*(.keep.uvisor.cfgtbl)) + . = ALIGN(32); + __uvisor_cfgtbl_end = .; + + /* pointers to uvisor secure boxes configuration tables */ + /* note: no further alignment here, we need to have the exact list of pointers */ + __uvisor_cfgtbl_ptr_start = .; + KEEP(*(.keep.uvisor.cfgtbl_ptr_first)) + KEEP(*(.keep.uvisor.cfgtbl_ptr)) + __uvisor_cfgtbl_ptr_end = .; + + /* the following symbols are kept for backward compatibility and will be soon + * deprecated; applications actively using uVisor (__uvisor_mode == UVISOR_ENABLED) + * will need to use uVisor 0.8.x or above, or the security assertions will halt the + * system */ + /************************/ + __uvisor_data_src = .; + __uvisor_data_start = .; + __uvisor_data_end = .; + /************************/ + + . = ALIGN(32); + __uvisor_secure_end = .; + } >FLASH + + .uninitialized (NOLOAD): + { + . = ALIGN(32); + __uninitialized_start = .; + *(.uninitialized) + KEEP(*(.keep.uninitialized)) + . = ALIGN(32); + __uninitialized_end = .; + } > RAM_INTERN + + .bss (NOLOAD): + { + __bss_start__ = .; + *(.bss*) + *(COMMON) + __bss_end__ = .; + } > RAM_INTERN + + .heap (NOLOAD): + { + __end__ = .; + end = __end__; + *(.heap*); + . += (ORIGIN(RAM_INTERN) + LENGTH(RAM_INTERN) - .); + __HeapLimit = .; + } > RAM_INTERN + PROVIDE(__heap_size = SIZEOF(.heap)); + PROVIDE(__mbed_sbrk_start = ADDR(.heap)); + PROVIDE(__mbed_krbs_start = ADDR(.heap) + SIZEOF(.heap)); + + /* Provide physical memory boundaries for uVisor. */ + __uvisor_flash_start = ORIGIN(VECTORS); + __uvisor_flash_end = ORIGIN(FLASH) + LENGTH(FLASH); + __uvisor_sram_start = ORIGIN(RAM_INTERN); + __uvisor_sram_end = ORIGIN(RAM_INTERN) + LENGTH(RAM_INTERN); +} diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_GCC_ARM/retarget.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_GCC_ARM/retarget.c new file mode 100644 index 00000000000..6e2642a5f68 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_GCC_ARM/retarget.c @@ -0,0 +1,35 @@ +/****************************************************************************** + * @file startup_NUC472_442.c + * @version V0.10 + * $Revision: 11 $ + * $Date: 15/09/02 10:02a $ + * @brief CMSIS Cortex-M4 Core Peripheral Access Layer Source File for NUC472/442 MCU + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ + +#include "M451Series.h" +#include + +extern uint32_t __mbed_sbrk_start; +extern uint32_t __mbed_krbs_start; + +// NOTE: The implementation of _sbrk (in common/retarget.cpp) for GCC_ARM requires one-region model for heap and stack, which doesn't +// meet the layout of e.g. Nu-mbed-NUC472 board where heap is located on external SRAM. +// Because the symbol is not weak and cannot be overwritten, wrap calls to it by hooking command line linker with '-Wl,--wrap,_sbrk'. +void *__wrap__sbrk(int incr) +{ + static uint32_t heap_ind = (uint32_t) &__mbed_sbrk_start; + uint32_t heap_ind_old = heap_ind; + uint32_t heap_ind_new = (heap_ind_old + incr + 7) & ~7; + + if (heap_ind_new > &__mbed_krbs_start) { + errno = ENOMEM; + return (void *) -1; + } + + heap_ind = heap_ind_new; + + return (void *) heap_ind_old; +} diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_IAR/M453.icf b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_IAR/M453.icf new file mode 100644 index 00000000000..7411796dcf0 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_IAR/M453.icf @@ -0,0 +1,36 @@ +/*###ICF### Section handled by ICF editor, don't touch! ****/ +/*-Editor annotation file-*/ +/* IcfEditorFile="$TOOLKIT_DIR$\config\ide\IcfEditor\cortex_v1_0.xml" */ +/*-Specials-*/ +define symbol __ICFEDIT_intvec_start__ = 0x00000000; +/*-Memory Regions-*/ +define symbol __ICFEDIT_region_ROM_start__ = 0x00000000; +define symbol __ICFEDIT_region_ROM_end__ = 0x00040000; +define symbol __ICFEDIT_region_IRAM_start__ = 0x20000000; +define symbol __ICFEDIT_region_IRAM_end__ = 0x20008000; +/*-Sizes-*/ +define symbol __ICFEDIT_size_cstack__ = 0x1000; +define symbol __ICFEDIT_size_heap__ = 0x4000; +/**** End of ICF editor section. ###ICF###*/ + + +define memory mem with size = 4G; +define region ROM_region = mem:[from __ICFEDIT_region_ROM_start__ to __ICFEDIT_region_ROM_end__]; +define region IRAM_region = mem:[from __ICFEDIT_region_IRAM_start__ to __ICFEDIT_region_IRAM_end__]; + +define block CSTACK with alignment = 8, size = __ICFEDIT_size_cstack__ { }; +define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; +/* NOTE: Vector table base requires to be aligned to the power of vector table size. Give a safe value here. */ +define block IRAMVEC with alignment = 1024, size = 4 * (16 + 64) { }; + + +initialize by copy { readwrite }; +do not initialize { section .noinit }; + +place at address mem:__ICFEDIT_intvec_start__ { readonly section .intvec }; + +place in ROM_region { readonly }; +place at start of IRAM_region { block CSTACK }; +place in IRAM_region { block IRAMVEC }; +place in IRAM_region { readwrite }; +place in IRAM_region { block HEAP }; \ No newline at end of file diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/startup_M451Series.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/startup_M451Series.c new file mode 100644 index 00000000000..d73e4eca81d --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/startup_M451Series.c @@ -0,0 +1,326 @@ +/****************************************************************************** + * @file startup_M451Series.c + * @version V0.10 + * $Revision: 11 $ + * $Date: 15/09/02 10:02a $ + * @brief CMSIS Cortex-M4 Core Peripheral Access Layer Source File for M451 Series MCU + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ + +#include "M451Series.h" + +/* Macro Definitions */ +#if defined(__CC_ARM) +#define WEAK __attribute__ ((weak)) +#define ALIAS(f) __attribute__ ((weak, alias(#f))) + +#define WEAK_ALIAS_FUNC(FUN, FUN_ALIAS) \ +void FUN(void) __attribute__ ((weak, alias(#FUN_ALIAS))); + +#elif defined(__ICCARM__) +//#define STRINGIFY(x) #x +//#define _STRINGIFY(x) STRINGIFY(x) +#define WEAK_ALIAS_FUNC(FUN, FUN_ALIAS) \ +void FUN(void); \ +_Pragma(_STRINGIFY(_WEAK_ALIAS_FUNC(FUN, FUN_ALIAS))) +#define _WEAK_ALIAS_FUNC(FUN, FUN_ALIAS) weak __WEAK_ALIAS_FUNC(FUN, FUN_ALIAS) +#define __WEAK_ALIAS_FUNC(FUN, FUN_ALIAS) FUN##=##FUN_ALIAS + +#elif defined(__GNUC__) +#define WEAK __attribute__ ((weak)) +#define ALIAS(f) __attribute__ ((weak, alias(#f))) + +#define WEAK_ALIAS_FUNC(FUN, FUN_ALIAS) \ +void FUN(void) __attribute__ ((weak, alias(#FUN_ALIAS))); + +#endif + + +/* Initialize segments */ +#if defined(__CC_ARM) +extern uint32_t Image$$ARM_LIB_STACK$$ZI$$Limit; +extern void __main(void); +#elif defined(__ICCARM__) +void __iar_program_start(void); +#elif defined(__GNUC__) +extern uint32_t __StackTop; +extern uint32_t __etext; +extern uint32_t __data_start__; +extern uint32_t __data_end__; +extern uint32_t __bss_start__; +extern uint32_t __bss_end__; + +extern void uvisor_init(void); +//#if defined(TOOLCHAIN_GCC_ARM) +//extern void _start(void); +//#endif +extern void software_init_hook(void) __attribute__((weak)); +extern void __libc_init_array(void); +extern int main(void); +#endif + +/* Default empty handler */ +void Default_Handler(void); + +/* Reset handler */ +void Reset_Handler(void); + +/* Cortex-M4 core handlers */ +WEAK_ALIAS_FUNC(NMI_Handler, Default_Handler) +WEAK_ALIAS_FUNC(HardFault_Handler, Default_Handler) +WEAK_ALIAS_FUNC(MemManage_Handler, Default_Handler) +WEAK_ALIAS_FUNC(BusFault_Handler , Default_Handler) +WEAK_ALIAS_FUNC(UsageFault_Handler, Default_Handler) +WEAK_ALIAS_FUNC(SVC_Handler, Default_Handler) +WEAK_ALIAS_FUNC(DebugMon_Handler, Default_Handler) +WEAK_ALIAS_FUNC(PendSV_Handler, Default_Handler) +WEAK_ALIAS_FUNC(SysTick_Handler, Default_Handler) + +/* Peripherals handlers */ +WEAK_ALIAS_FUNC(BOD_IRQHandler, Default_Handler) // 0: Brown Out detection +WEAK_ALIAS_FUNC(IRC_IRQHandler, Default_Handler) // 1: Internal RC +WEAK_ALIAS_FUNC(PWRWU_IRQHandler, Default_Handler) // 2: Power down wake up +WEAK_ALIAS_FUNC(RAMPE_IRQHandler, Default_Handler) // 3: RAM parity error +WEAK_ALIAS_FUNC(CLKFAIL_IRQHandler, Default_Handler) // 4: Clock detection fail + // 5: Reserved +WEAK_ALIAS_FUNC(RTC_IRQHandler, Default_Handler) // 6: Real Time Clock +WEAK_ALIAS_FUNC(TAMPER_IRQHandler, Default_Handler) // 7: Tamper detection +WEAK_ALIAS_FUNC(WDT_IRQHandler, Default_Handler) // 8: Watchdog timer +WEAK_ALIAS_FUNC(WWDT_IRQHandler, Default_Handler) // 9: Window watchdog timer +WEAK_ALIAS_FUNC(EINT0_IRQHandler, Default_Handler) // 10: External Input 0 +WEAK_ALIAS_FUNC(EINT1_IRQHandler, Default_Handler) // 11: External Input 1 +WEAK_ALIAS_FUNC(EINT2_IRQHandler, Default_Handler) // 12: External Input 2 +WEAK_ALIAS_FUNC(EINT3_IRQHandler, Default_Handler) // 13: External Input 3 +WEAK_ALIAS_FUNC(EINT4_IRQHandler, Default_Handler) // 14: External Input 4 +WEAK_ALIAS_FUNC(EINT5_IRQHandler, Default_Handler) // 15: External Input 5 +WEAK_ALIAS_FUNC(GPA_IRQHandler, Default_Handler) // 16: GPIO Port A +WEAK_ALIAS_FUNC(GPB_IRQHandler, Default_Handler) // 17: GPIO Port B +WEAK_ALIAS_FUNC(GPC_IRQHandler, Default_Handler) // 18: GPIO Port C +WEAK_ALIAS_FUNC(GPD_IRQHandler, Default_Handler) // 19: GPIO Port D +WEAK_ALIAS_FUNC(GPE_IRQHandler, Default_Handler) // 20: GPIO Port E +WEAK_ALIAS_FUNC(GPF_IRQHandler, Default_Handler) // 21: GPIO Port F +WEAK_ALIAS_FUNC(SPI0_IRQHandler, Default_Handler) // 22: SPI0 +WEAK_ALIAS_FUNC(SPI1_IRQHandler, Default_Handler) // 23: SPI1 +WEAK_ALIAS_FUNC(BRAKE0_IRQHandler, Default_Handler) // 24: +WEAK_ALIAS_FUNC(PWM0P0_IRQHandler, Default_Handler) // 25: +WEAK_ALIAS_FUNC(PWM0P1_IRQHandler, Default_Handler) // 26: +WEAK_ALIAS_FUNC(PWM0P2_IRQHandler, Default_Handler) // 27: +WEAK_ALIAS_FUNC(BRAKE1_IRQHandler, Default_Handler) // 28: +WEAK_ALIAS_FUNC(PWM1P0_IRQHandler, Default_Handler) // 29: +WEAK_ALIAS_FUNC(PWM1P1_IRQHandler, Default_Handler) // 30: +WEAK_ALIAS_FUNC(PWM1P2_IRQHandler, Default_Handler) // 31: +WEAK_ALIAS_FUNC(TMR0_IRQHandler, Default_Handler) // 32: Timer 0 +WEAK_ALIAS_FUNC(TMR1_IRQHandler, Default_Handler) // 33: Timer 1 +WEAK_ALIAS_FUNC(TMR2_IRQHandler, Default_Handler) // 34: Timer 2 +WEAK_ALIAS_FUNC(TMR3_IRQHandler, Default_Handler) // 35: Timer 3 +WEAK_ALIAS_FUNC(UART0_IRQHandler, Default_Handler) // 36: UART0 +WEAK_ALIAS_FUNC(UART1_IRQHandler, Default_Handler) // 37: UART1 +WEAK_ALIAS_FUNC(I2C0_IRQHandler, Default_Handler) // 38: I2C0 +WEAK_ALIAS_FUNC(I2C1_IRQHandler, Default_Handler) // 39: I2C1 +WEAK_ALIAS_FUNC(PDMA_IRQHandler, Default_Handler) // 40: Peripheral DMA +WEAK_ALIAS_FUNC(DAC_IRQHandler, Default_Handler) // 41: DAC +WEAK_ALIAS_FUNC(ADC00_IRQHandler, Default_Handler) // 42: ADC0 interrupt source 0 +WEAK_ALIAS_FUNC(ADC01_IRQHandler, Default_Handler) // 43: ADC0 interrupt source 1 +WEAK_ALIAS_FUNC(ACMP01_IRQHandler, Default_Handler) // 44: ACMP0 and ACMP1 + // 45: Reserved +WEAK_ALIAS_FUNC(ADC02_IRQHandler, Default_Handler) // 46: ADC0 interrupt source 2 +WEAK_ALIAS_FUNC(ADC03_IRQHandler, Default_Handler) // 47: ADC0 interrupt source 3 +WEAK_ALIAS_FUNC(UART2_IRQHandler, Default_Handler) // 48: UART2 +WEAK_ALIAS_FUNC(UART3_IRQHandler, Default_Handler) // 49: UART3 + // 50: Reserved +WEAK_ALIAS_FUNC(SPI2_IRQHandler, Default_Handler) // 51: SPI2 + // 52: Reserved +WEAK_ALIAS_FUNC(USBD_IRQHandler, Default_Handler) // 53: USB device +WEAK_ALIAS_FUNC(USBH_IRQHandler, Default_Handler) // 54: USB host +WEAK_ALIAS_FUNC(USBOTG_IRQHandler, Default_Handler) // 55: USB OTG +WEAK_ALIAS_FUNC(CAN0_IRQHandler, Default_Handler) // 56: CAN0 + // 57: Reserved +WEAK_ALIAS_FUNC(SC0_IRQHandler, Default_Handler) // 58: + // 59: Reserved. + // 60: + // 61: + // 62: +WEAK_ALIAS_FUNC(TK_IRQHandler, Default_Handler) // 63: + +/* Vector table */ +#if defined(__CC_ARM) +__attribute__ ((section("RESET"))) +const uint32_t __vector_handlers[] = { +#elif defined(__ICCARM__) +extern uint32_t CSTACK$$Limit; +const uint32_t __vector_table[] @ ".intvec" = { +#elif defined(__GNUC__) +__attribute__ ((section(".vector_table"))) +const uint32_t __vector_handlers[] = { +#endif + + /* Configure Initial Stack Pointer, using linker-generated symbols */ +#if defined(__CC_ARM) + &Image$$ARM_LIB_STACK$$ZI$$Limit, +#elif defined(__ICCARM__) + //(uint32_t) __sfe("CSTACK"), + (uint32_t) &CSTACK$$Limit, +#elif defined(__GNUC__) + &__StackTop, +#endif + + (uint32_t) Reset_Handler, // Reset Handler + (uint32_t) NMI_Handler, // NMI Handler + (uint32_t) HardFault_Handler, // Hard Fault Handler + (uint32_t) MemManage_Handler, // MPU Fault Handler + (uint32_t) BusFault_Handler, // Bus Fault Handler + (uint32_t) UsageFault_Handler, // Usage Fault Handler + 0, // Reserved + 0, // Reserved + 0, // Reserved + 0, // Reserved + (uint32_t) SVC_Handler, // SVCall Handler + (uint32_t) DebugMon_Handler, // Debug Monitor Handler + 0, // Reserved + (uint32_t) PendSV_Handler, // PendSV Handler + (uint32_t) SysTick_Handler, // SysTick Handler + + /* External Interrupts */ + (uint32_t) BOD_IRQHandler, // 0: Brown Out detection + (uint32_t) IRC_IRQHandler, // 1: Internal RC + (uint32_t) PWRWU_IRQHandler, // 2: Power down wake up + (uint32_t) RAMPE_IRQHandler, // 3: RAM parity error + (uint32_t) CLKFAIL_IRQHandler, // 4: Clock detection fail + (uint32_t) Default_Handler, // 5: Reserved + (uint32_t) RTC_IRQHandler, // 6: Real Time Clock + (uint32_t) TAMPER_IRQHandler, // 7: Tamper detection + (uint32_t) WDT_IRQHandler, // 8: Watchdog timer + (uint32_t) WWDT_IRQHandler, // 9: Window watchdog timer + (uint32_t) EINT0_IRQHandler, // 10: External Input 0 + (uint32_t) EINT1_IRQHandler, // 11: External Input 1 + (uint32_t) EINT2_IRQHandler, // 12: External Input 2 + (uint32_t) EINT3_IRQHandler, // 13: External Input 3 + (uint32_t) EINT4_IRQHandler, // 14: External Input 4 + (uint32_t) EINT5_IRQHandler, // 15: External Input 5 + (uint32_t) GPA_IRQHandler, // 16: GPIO Port A + (uint32_t) GPB_IRQHandler, // 17: GPIO Port B + (uint32_t) GPC_IRQHandler, // 18: GPIO Port C + (uint32_t) GPD_IRQHandler, // 19: GPIO Port D + (uint32_t) GPE_IRQHandler, // 20: GPIO Port E + (uint32_t) GPF_IRQHandler, // 21: GPIO Port F + (uint32_t) SPI0_IRQHandler, // 22: SPI0 + (uint32_t) SPI1_IRQHandler, // 23: SPI1 + (uint32_t) BRAKE0_IRQHandler, // 24: + (uint32_t) PWM0P0_IRQHandler, // 25: + (uint32_t) PWM0P1_IRQHandler, // 26: + (uint32_t) PWM0P2_IRQHandler, // 27: + (uint32_t) BRAKE1_IRQHandler, // 28: + (uint32_t) PWM1P0_IRQHandler, // 29: + (uint32_t) PWM1P1_IRQHandler, // 30: + (uint32_t) PWM1P2_IRQHandler, // 31: + (uint32_t) TMR0_IRQHandler, // 32: Timer 0 + (uint32_t) TMR1_IRQHandler, // 33: Timer 1 + (uint32_t) TMR2_IRQHandler, // 34: Timer 2 + (uint32_t) TMR3_IRQHandler, // 35: Timer 3 + (uint32_t) UART0_IRQHandler, // 36: UART0 + (uint32_t) UART1_IRQHandler, // 37: UART1 + (uint32_t) I2C0_IRQHandler, // 38: I2C0 + (uint32_t) I2C1_IRQHandler, // 39: I2C1 + (uint32_t) PDMA_IRQHandler, // 40: Peripheral DMA + (uint32_t) DAC_IRQHandler, // 41: DAC + (uint32_t) ADC00_IRQHandler, // 42: ADC0 interrupt source 0 + (uint32_t) ADC01_IRQHandler, // 43: ADC0 interrupt source 1 + (uint32_t) ACMP01_IRQHandler, // 44: ACMP0 and ACMP1 + (uint32_t) Default_Handler, // 45: Reserved + (uint32_t) ADC02_IRQHandler, // 46: ADC0 interrupt source 2 + (uint32_t) ADC03_IRQHandler, // 47: ADC0 interrupt source 3 + (uint32_t) UART2_IRQHandler, // 48: UART2 + (uint32_t) UART3_IRQHandler, // 49: UART3 + (uint32_t) Default_Handler, // 50: Reserved + (uint32_t) SPI2_IRQHandler, // 51: SPI2 + (uint32_t) Default_Handler, // 52: Reserved + (uint32_t) USBD_IRQHandler, // 53: USB device + (uint32_t) USBH_IRQHandler, // 54: USB host + (uint32_t) USBOTG_IRQHandler, // 55: USB OTG + (uint32_t) CAN0_IRQHandler, // 56: CAN0 + (uint32_t) Default_Handler, // 57: Reserved + (uint32_t) SC0_IRQHandler, // 58: + (uint32_t) Default_Handler, // 59: Reserved. + (uint32_t) Default_Handler, // 60: + (uint32_t) Default_Handler, // 61: + (uint32_t) Default_Handler, // 62: + (uint32_t) TK_IRQHandler, // 63: +}; + +/** + * \brief This is the code that gets called on processor reset. + */ +void Reset_Handler(void) +{ + /* Disable register write-protection function */ + SYS_UnlockReg(); + + /* Disable Power-on Reset function */ + SYS_DISABLE_POR(); + + /* HXT Crystal Type Select: INV */ + CLK->PWRCTL &= ~CLK_PWRCTL_HXTSELTYP_Msk; + + /* Enable register write-protection function */ + SYS_LockReg(); + + /** + * Because EBI (external SRAM) init is done in SystemInit(), SystemInit() must be called at the very start. + */ + SystemInit(); + +#if defined(__CC_ARM) + __main(); + +#elif defined(__ICCARM__) + __iar_program_start(); + +#elif defined(__GNUC__) + uint32_t *src_ind = (uint32_t *) &__etext; + uint32_t *dst_ind = (uint32_t *) &__data_start__; + uint32_t *dst_end = (uint32_t *) &__data_end__; + + /* Move .data section from ROM to RAM */ + if (src_ind != dst_ind) { + for (; dst_ind < dst_end;) { + *dst_ind ++ = *src_ind ++; + } + } + + /* Initialize .bss section to zero */ + dst_ind = (uint32_t *) &__bss_start__; + dst_end = (uint32_t *) &__bss_end__; + if (dst_ind != dst_end) { + for (; dst_ind < dst_end;) { + *dst_ind ++ = 0; + } + } + + //uvisor_init(); + + if (software_init_hook) { + /** + * Give control to the RTOS via software_init_hook() which will also call __libc_init_array(). + * Assume software_init_hook() is defined in libraries/rtos/rtx/TARGET_CORTEX_M/RTX_CM_lib.h. + */ + software_init_hook(); + } + else { + __libc_init_array(); + main(); + } +#endif + + /* Infinite loop */ + while (1); +} + +/** + * \brief Default interrupt handler for unused IRQs. + */ +void Default_Handler(void) +{ + while (1); +} diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/cmsis.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/cmsis.h new file mode 100644 index 00000000000..c183fd04cd8 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/cmsis.h @@ -0,0 +1,33 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MBED_CMSIS_H +#define MBED_CMSIS_H + +#include "M451Series.h" +#include "cmsis_nvic.h" + +// Support linker-generated symbol as start of relocated vector table. +#if defined(__CC_ARM) +extern uint32_t Image$$ER_IRAMVEC$$ZI$$Base; +#elif defined(__ICCARM__) + +#elif defined(__GNUC__) +extern uint32_t __start_vector_table__; +#endif + + +#endif diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/cmsis_nvic.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/cmsis_nvic.c new file mode 100644 index 00000000000..13e150669a0 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/cmsis_nvic.c @@ -0,0 +1,39 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "cmsis_nvic.h" + +void NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +{ + uint32_t *vectors = (uint32_t *) SCB->VTOR; + uint32_t i; + + /* Copy and switch to dynamic vectors if the first time called */ + if (SCB->VTOR != NVIC_RAM_VECTOR_ADDRESS) { + uint32_t *old_vectors = (uint32_t *) NVIC_FLASH_VECTOR_ADDRESS; + vectors = (uint32_t *) NVIC_RAM_VECTOR_ADDRESS; + for (i = 0; i < NVIC_NUM_VECTORS; i++) { + vectors[i] = old_vectors[i]; + } + SCB->VTOR = (uint32_t) NVIC_RAM_VECTOR_ADDRESS; + } + vectors[IRQn + NVIC_USER_IRQ_OFFSET] = vector; +} + +uint32_t NVIC_GetVector(IRQn_Type IRQn) +{ + uint32_t *vectors = (uint32_t *) SCB->VTOR; + return vectors[IRQn + NVIC_USER_IRQ_OFFSET]; +} diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/cmsis_nvic.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/cmsis_nvic.h new file mode 100644 index 00000000000..128cfcf2138 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/cmsis_nvic.h @@ -0,0 +1,63 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MBED_CMSIS_NVIC_H +#define MBED_CMSIS_NVIC_H + +#include "cmsis.h" + +#define NVIC_USER_IRQ_OFFSET 16 +#define NVIC_USER_IRQ_NUMBER 64 +#define NVIC_NUM_VECTORS (NVIC_USER_IRQ_OFFSET + NVIC_USER_IRQ_NUMBER) + +#if defined(__CC_ARM) +# define NVIC_RAM_VECTOR_ADDRESS &Image$$ER_IRAMVEC$$ZI$$Base +#elif defined(__ICCARM__) +# pragma section = "IRAMVEC" +# define NVIC_RAM_VECTOR_ADDRESS ((uint32_t) __section_begin("IRAMVEC")) +#elif defined(__GNUC__) +# define NVIC_RAM_VECTOR_ADDRESS &__start_vector_table__ +#endif + + +#define NVIC_FLASH_VECTOR_ADDRESS 0 + +#ifdef __cplusplus +extern "C" { +#endif + +/** Set the ISR for IRQn + * + * Sets an Interrupt Service Routine vector for IRQn; if the feature is available, the vector table is relocated to SRAM + * the first time this function is called + * @param[in] IRQn The Interrupt Request number for which a vector will be registered + * @param[in] vector The ISR vector to register for IRQn + */ +void NVIC_SetVector(IRQn_Type IRQn, uint32_t vector); + +/** Get the ISR registered for IRQn + * + * Reads the Interrupt Service Routine currently registered for IRQn + * @param[in] IRQn The Interrupt Request number the vector of which will be read + * @return Returns the ISR registered for IRQn + */ +uint32_t NVIC_GetVector(IRQn_Type IRQn); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/system_M451Series.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/system_M451Series.c new file mode 100644 index 00000000000..df23aec5685 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/system_M451Series.c @@ -0,0 +1,111 @@ +/****************************************************************************** + * @file system_M451Series.c + * @version V0.10 + * $Revision: 11 $ + * $Date: 15/09/02 10:02a $ + * @brief CMSIS Cortex-M4 Core Peripheral Access Layer Source File for M451 Series MCU + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ + +#include "M451Series.h" + + +/*---------------------------------------------------------------------------- + DEFINES + *----------------------------------------------------------------------------*/ + + +/*---------------------------------------------------------------------------- + Clock Variable definitions + *----------------------------------------------------------------------------*/ +uint32_t SystemCoreClock = __SYSTEM_CLOCK; /*!< System Clock Frequency (Core Clock)*/ +uint32_t CyclesPerUs = (__HSI / 1000000); /* Cycles per micro second */ +uint32_t PllClock = __HSI; /*!< PLL Output Clock Frequency */ +uint32_t gau32ClkSrcTbl[] = {__HXT, __LXT, 0, __LIRC, 0, 0, 0, __HIRC}; + +/*---------------------------------------------------------------------------- + Clock functions + *----------------------------------------------------------------------------*/ +void SystemCoreClockUpdate(void) /* Get Core Clock Frequency */ +{ +#if 1 + uint32_t u32Freq, u32ClkSrc; + uint32_t u32HclkDiv; + + /* Update PLL Clock */ + PllClock = CLK_GetPLLClockFreq(); + + u32ClkSrc = CLK->CLKSEL0 & CLK_CLKSEL0_HCLKSEL_Msk; + + if(u32ClkSrc == CLK_CLKSEL0_HCLKSEL_PLL) + { + /* Use PLL clock */ + u32Freq = PllClock; + } + else + { + /* Use the clock sources directly */ + u32Freq = gau32ClkSrcTbl[u32ClkSrc]; + } + + u32HclkDiv = (CLK->CLKDIV0 & CLK_CLKDIV0_HCLKDIV_Msk) + 1; + + /* Update System Core Clock */ + SystemCoreClock = u32Freq / u32HclkDiv; + + + //if(SystemCoreClock == 0) + // __BKPT(0); + + CyclesPerUs = (SystemCoreClock + 500000) / 1000000; +#endif +} + +/** + * Initialize the system + * + * @param None + * @return None + * + * @brief Setup the microcontroller system. + * Initialize the System. + */ +void SystemInit(void) +{ + /* ToDo: add code to initialize the system + do not use global variables because this function is called before + reaching pre-main. RW section maybe overwritten afterwards. */ + + SYS_UnlockReg(); + /* One-time POR18 */ + if((SYS->PDID >> 12) == 0x945) + { + M32(GCR_BASE+0x14) |= BIT7; + } + /* Force to use INV type with HXT */ + CLK->PWRCTL &= ~CLK_PWRCTL_HXTSELTYP_Msk; + SYS_LockReg(); + + +#if 0 + // NOTE: C-runtime not initialized yet. Ensure no static memory (global variable) are accessed in this function. + nu_ebi_init(); +#endif + + /* FPU settings ------------------------------------------------------------*/ +#if (__FPU_PRESENT == 1) && (__FPU_USED == 1) + SCB->CPACR |= ((3UL << 10 * 2) | /* set CP10 Full Access */ + (3UL << 11 * 2)); /* set CP11 Full Access */ +#endif + +} + +#if 0 +void nu_ebi_init(void) +{ + // TO BE CONTINUED +} +#endif +/*** (C) COPYRIGHT 2013~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/system_M451Series.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/system_M451Series.h new file mode 100644 index 00000000000..edb80e509a3 --- /dev/null +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/system_M451Series.h @@ -0,0 +1,75 @@ +/****************************************************************************** + * @file system_M451Series.h + * @version V0.10 + * $Revision: 7 $ + * $Date: 15/09/02 10:02a $ + * @brief CMSIS Cortex-M4 Core Peripheral Access Layer Header File for M451 Series MCU + * + * @note + * Copyright (C) 2013~2015 Nuvoton Technology Corp. All rights reserved. +*****************************************************************************/ + +#ifndef __SYSTEM_M451SERIES_H__ +#define __SYSTEM_M451SERIES_H__ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + +/*---------------------------------------------------------------------------------------------------------*/ +/* Macro Definition */ +/*---------------------------------------------------------------------------------------------------------*/ +#ifndef DEBUG_PORT +# define DEBUG_PORT UART0 /*!< Select Debug Port which is used for retarget.c to output debug message to UART */ +#endif + + +/*---------------------------------------------------------------------------- + Define clocks + *----------------------------------------------------------------------------*/ + +#define __HSI (12000000UL) /*!< PLL default output is 72MHz */ +#define __HXT (12000000UL) /*!< External Crystal Clock Frequency */ +#define __LXT (32768UL) /*!< External Crystal Clock Frequency 32.768KHz */ +#define __HIRC (22118400UL) /*!< Internal 22M RC Oscillator Frequency */ +#define __LIRC (10000UL) /*!< Internal 10K RC Oscillator Frequency */ +#define __SYS_OSC_CLK ( ___HSI) /* Main oscillator frequency */ + + +#define __SYSTEM_CLOCK (1*__HXT) + +extern uint32_t SystemCoreClock; /*!< System Clock Frequency (Core Clock) */ +extern uint32_t CyclesPerUs; /*!< Cycles per micro second */ +extern uint32_t PllClock; /*!< PLL Output Clock Frequency */ + + +/** + * Initialize the system + * + * @param None + * @return None + * + * @brief Setup the microcontroller system. + * Initialize the System and update the SystemCoreClock variable. + */ +extern void SystemInit(void); + +/** + * Update SystemCoreClock variable + * + * @param None + * @return None + * + * @brief Updates the SystemCoreClock with current core Clock + * retrieved from cpu registers. + */ +extern void SystemCoreClockUpdate(void); + +#ifdef __cplusplus +} +#endif + +#endif /* __SYSTEM_M451SERIES_H__ */ +/*** (C) COPYRIGHT 2013~2015 Nuvoton Technology Corp. ***/ diff --git a/targets/targets.json b/targets/targets.json index e2b2f7f56ac..d6a85e24059 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -2022,5 +2022,16 @@ "supported_toolchains": ["GCC_ARM", "ARM", "IAR"], "device_has": ["ANALOGIN", "SERIAL", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI"], "release_versions": ["2", "5"] - } + }, + "NUMAKER_PFM_M453": { + "core": "Cortex-M4F", + "default_toolchain": "ARM", + "extra_labels": ["NUVOTON", "M451", "NUMAKER_PFM_M453"], + "is_disk_virtual": true, + "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "IAR"], + "inherits": ["Target"], + "progen": {"target": "numaker-pfm-m453"}, + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH"], + "release_versions": ["2", "5"] + } } From 1541265cd85bc08bb56baa435c6c653f8f5a37c6 Mon Sep 17 00:00:00 2001 From: ccli8 Date: Thu, 11 Aug 2016 10:58:56 +0800 Subject: [PATCH 22/89] NUMAKER_PFM_M453 support for USB host --- .../USBHost/USBHost/USBHostTypes.h | 2 + libraries/USBHost/USBHost/USBHALHost_M451.cpp | 347 ++++++++++++++++++ 2 files changed, 349 insertions(+) create mode 100644 libraries/USBHost/USBHost/USBHALHost_M451.cpp diff --git a/features/unsupported/USBHost/USBHost/USBHostTypes.h b/features/unsupported/USBHost/USBHost/USBHostTypes.h index 5d9dd22968f..860e77d6c67 100644 --- a/features/unsupported/USBHost/USBHost/USBHostTypes.h +++ b/features/unsupported/USBHost/USBHost/USBHostTypes.h @@ -97,6 +97,8 @@ enum ENDPOINT_TYPE { #define OR_RH_PORT_CSC 0x00010000 #define OR_RH_PORT_PRSC 0x00100000 #define OR_RH_PORT_LSDA 0x00000200 +#define OR_RH_PORT_PESC 0x00020000 +#define OR_RH_PORT_OCIC 0x00080000 #define FI 0x2EDF // 12000 bits per frame (-1) #define DEFAULT_FMINTERVAL ((((6 * (FI - 210)) / 7) << 16) | FI) diff --git a/libraries/USBHost/USBHost/USBHALHost_M451.cpp b/libraries/USBHost/USBHost/USBHALHost_M451.cpp new file mode 100644 index 00000000000..9679297f5fb --- /dev/null +++ b/libraries/USBHost/USBHost/USBHALHost_M451.cpp @@ -0,0 +1,347 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if defined(TARGET_M451) + +#include "mbed.h" +#include "USBHALHost.h" +#include "dbg.h" +#include "pinmap.h" + +#define HCCA_SIZE sizeof(HCCA) +#define ED_SIZE sizeof(HCED) +#define TD_SIZE sizeof(HCTD) + +#define TOTAL_SIZE (HCCA_SIZE + (MAX_ENDPOINT*ED_SIZE) + (MAX_TD*TD_SIZE)) + +#ifndef USBH_HcRhDescriptorA_POTPGT_Pos +#define USBH_HcRhDescriptorA_POTPGT_Pos (24) +#endif +#ifndef USBH_HcRhDescriptorA_POTPGT_Msk +#define USBH_HcRhDescriptorA_POTPGT_Msk (0xfful << USBH_HcRhDescriptorA_POTPGT_Pos) +#endif + +static volatile MBED_ALIGN(256) uint8_t usb_buf[TOTAL_SIZE]; // 256 bytes aligned! + +USBHALHost * USBHALHost::instHost; + +USBHALHost::USBHALHost() +{ + instHost = this; + memInit(); + memset((void*)usb_hcca, 0, HCCA_SIZE); + for (int i = 0; i < MAX_ENDPOINT; i++) { + edBufAlloc[i] = false; + } + for (int i = 0; i < MAX_TD; i++) { + tdBufAlloc[i] = false; + } +} + +void USBHALHost::init() +{ + // Unlock protected registers + SYS_UnlockReg(); + + // Enable USBH clock + CLK_EnableModuleClock(USBH_MODULE); + // Set USBH clock source/divider + CLK_SetModuleClock(USBH_MODULE, 0, CLK_CLKDIV0_USB(3)); + + // Configure OTG function as Host-Only + SYS->USBPHY = SYS_USBPHY_LDO33EN_Msk | SYS_USBPHY_USBROLE_STD_USBH; + + /* Below settings is use power switch IC to enable/disable USB Host power. + Set PA.2 is VBUS_EN function pin and PA.3 VBUS_ST function pin */ + pin_function(PA_3, SYS_GPA_MFPL_PA3MFP_USB_VBUS_ST); + pin_function(PA_2, SYS_GPA_MFPL_PA2MFP_USB_VBUS_EN); + + // Enable OTG clock + CLK_EnableModuleClock(OTG_MODULE); + + // Lock protected registers + SYS_LockReg(); + + // Overcurrent flag is low active + USBH->HcMiscControl |= USBH_HcMiscControl_OCAL_Msk; + + // Disable HC interrupts + USBH->HcInterruptDisable = OR_INTR_ENABLE_MIE; + + // Needed by some controllers + USBH->HcControl = 0; + + // Software reset + USBH->HcCommandStatus = OR_CMD_STATUS_HCR; + while (USBH->HcCommandStatus & OR_CMD_STATUS_HCR); + + // Put HC in reset state + USBH->HcControl = (USBH->HcControl & ~OR_CONTROL_HCFS) | OR_CONTROL_HC_RSET; + // HCD must wait 10ms for HC reset complete + wait_ms(100); + + USBH->HcControlHeadED = 0; // Initialize Control ED list head to 0 + USBH->HcBulkHeadED = 0; // Initialize Bulk ED list head to 0 + USBH->HcHCCA = (uint32_t) usb_hcca; + + USBH->HcFmInterval = DEFAULT_FMINTERVAL; // Frame interval = 12000 - 1 + // MPS = 10,104 + USBH->HcPeriodicStart = FI * 90 / 100; // 90% of frame interval + USBH->HcLSThreshold = 0x628; // Low speed threshold + + // Put HC in operational state + USBH->HcControl = (USBH->HcControl & (~OR_CONTROL_HCFS)) | OR_CONTROL_HC_OPER; + + // FIXME + USBH->HcRhDescriptorA = USBH->HcRhDescriptorA & ~(USBH_HcRhDescriptorA_NOCP_Msk | USBH_HcRhDescriptorA_OCPM_Msk | USBH_HcRhDescriptorA_PSM_Msk); + // Issue SetGlobalPower command + USBH->HcRhStatus = USBH_HcRhStatus_LPSC_Msk; + // Power On To Power Good Time, in 2 ms units + wait_ms(((USBH->HcRhDescriptorA & USBH_HcRhDescriptorA_POTPGT_Msk) >> USBH_HcRhDescriptorA_POTPGT_Pos) * 2); + + // Clear Interrrupt Status + USBH->HcInterruptStatus |= USBH->HcInterruptStatus; + // Enable interrupts we care about + USBH->HcInterruptEnable = OR_INTR_ENABLE_MIE | OR_INTR_ENABLE_WDH | OR_INTR_ENABLE_RHSC; + + NVIC_SetVector(USBH_IRQn, (uint32_t)(_usbisr)); + NVIC_EnableIRQ(USBH_IRQn); + + // Check for any connected devices + if (USBH->HcRhPortStatus[0] & OR_RH_PORT_CCS) { + // Device connected + wait_ms(150); + deviceConnected(0, 1, USBH->HcRhPortStatus[0] & OR_RH_PORT_LSDA); + } +} + +uint32_t USBHALHost::controlHeadED() +{ + return USBH->HcControlHeadED; +} + +uint32_t USBHALHost::bulkHeadED() +{ + return USBH->HcBulkHeadED; +} + +uint32_t USBHALHost::interruptHeadED() +{ + // FIXME: Only support one INT ED? + return usb_hcca->IntTable[0]; +} + +void USBHALHost::updateBulkHeadED(uint32_t addr) +{ + USBH->HcBulkHeadED = addr; +} + + +void USBHALHost::updateControlHeadED(uint32_t addr) +{ + USBH->HcControlHeadED = addr; +} + +void USBHALHost::updateInterruptHeadED(uint32_t addr) +{ + // FIXME: Only support one INT ED? + usb_hcca->IntTable[0] = addr; +} + + +void USBHALHost::enableList(ENDPOINT_TYPE type) +{ + switch(type) { + case CONTROL_ENDPOINT: + USBH->HcCommandStatus = OR_CMD_STATUS_CLF; + USBH->HcControl |= OR_CONTROL_CLE; + break; + case ISOCHRONOUS_ENDPOINT: + // FIXME + break; + case BULK_ENDPOINT: + USBH->HcCommandStatus = OR_CMD_STATUS_BLF; + USBH->HcControl |= OR_CONTROL_BLE; + break; + case INTERRUPT_ENDPOINT: + USBH->HcControl |= OR_CONTROL_PLE; + break; + } +} + + +bool USBHALHost::disableList(ENDPOINT_TYPE type) +{ + switch(type) { + case CONTROL_ENDPOINT: + if(USBH->HcControl & OR_CONTROL_CLE) { + USBH->HcControl &= ~OR_CONTROL_CLE; + return true; + } + return false; + case ISOCHRONOUS_ENDPOINT: + // FIXME + return false; + case BULK_ENDPOINT: + if(USBH->HcControl & OR_CONTROL_BLE){ + USBH->HcControl &= ~OR_CONTROL_BLE; + return true; + } + return false; + case INTERRUPT_ENDPOINT: + if(USBH->HcControl & OR_CONTROL_PLE) { + USBH->HcControl &= ~OR_CONTROL_PLE; + return true; + } + return false; + } + return false; +} + + +void USBHALHost::memInit() +{ + usb_hcca = (volatile HCCA *)usb_buf; + usb_edBuf = usb_buf + HCCA_SIZE; + usb_tdBuf = usb_buf + HCCA_SIZE + (MAX_ENDPOINT*ED_SIZE); +} + +volatile uint8_t * USBHALHost::getED() +{ + for (int i = 0; i < MAX_ENDPOINT; i++) { + if ( !edBufAlloc[i] ) { + edBufAlloc[i] = true; + return (volatile uint8_t *)(usb_edBuf + i*ED_SIZE); + } + } + perror("Could not allocate ED\r\n"); + return NULL; //Could not alloc ED +} + +volatile uint8_t * USBHALHost::getTD() +{ + int i; + for (i = 0; i < MAX_TD; i++) { + if ( !tdBufAlloc[i] ) { + tdBufAlloc[i] = true; + return (volatile uint8_t *)(usb_tdBuf + i*TD_SIZE); + } + } + perror("Could not allocate TD\r\n"); + return NULL; //Could not alloc TD +} + + +void USBHALHost::freeED(volatile uint8_t * ed) +{ + int i; + i = (ed - usb_edBuf) / ED_SIZE; + edBufAlloc[i] = false; +} + +void USBHALHost::freeTD(volatile uint8_t * td) +{ + int i; + i = (td - usb_tdBuf) / TD_SIZE; + tdBufAlloc[i] = false; +} + + +void USBHALHost::resetRootHub() +{ + // Reset port1 + USBH->HcRhPortStatus[0] = OR_RH_PORT_PRS; + while (USBH->HcRhPortStatus[0] & OR_RH_PORT_PRS); + USBH->HcRhPortStatus[0] = OR_RH_PORT_PRSC; +} + + +void USBHALHost::_usbisr(void) +{ + if (instHost) { + instHost->UsbIrqhandler(); + } +} + +void USBHALHost::UsbIrqhandler() +{ + uint32_t ints = USBH->HcInterruptStatus; + + // Root hub status change interrupt + if (ints & OR_INTR_STATUS_RHSC) { + uint32_t ints_roothub = USBH->HcRhStatus; + uint32_t ints_port1 = USBH->HcRhPortStatus[0]; + uint32_t ints_port2 = USBH->HcRhPortStatus[1]; + + // Port1: ConnectStatusChange + if (ints_port1 & OR_RH_PORT_CSC) { + if (ints_roothub & OR_RH_STATUS_DRWE) { + // When DRWE is on, Connect Status Change means a remote wakeup event. + } else { + if (ints_port1 & OR_RH_PORT_CCS) { + // Root device connected + + // wait 150ms to avoid bounce + wait_ms(150); + + //Hub 0 (root hub), Port 1 (count starts at 1), Low or High speed + deviceConnected(0, 1, ints_port1 & OR_RH_PORT_LSDA); + } else { + // Root device disconnected + + if (!(ints & OR_INTR_STATUS_WDH)) { + usb_hcca->DoneHead = 0; + } + + // wait 200ms to avoid bounce + wait_ms(200); + + deviceDisconnected(0, 1, NULL, usb_hcca->DoneHead & 0xFFFFFFFE); + + if (ints & OR_INTR_STATUS_WDH) { + usb_hcca->DoneHead = 0; + USBH->HcInterruptStatus = OR_INTR_STATUS_WDH; + } + } + } + USBH->HcRhPortStatus[0] = OR_RH_PORT_CSC; + } + // Port1: Reset completed + if (ints_port1 & OR_RH_PORT_PRSC) { + USBH->HcRhPortStatus[0] = OR_RH_PORT_PRSC; + } + // Port1: PortEnableStatusChange + if (ints_port1 & OR_RH_PORT_PESC) { + USBH->HcRhPortStatus[0] = OR_RH_PORT_PESC; + } + + // Port2: PortOverCurrentIndicatorChange + if (ints_port2 & OR_RH_PORT_OCIC) { + USBH->HcRhPortStatus[1] = OR_RH_PORT_OCIC; + } + + USBH->HcInterruptStatus = OR_INTR_STATUS_RHSC; + } + + // Writeback Done Head interrupt + if (ints & OR_INTR_STATUS_WDH) { + transferCompleted(usb_hcca->DoneHead & 0xFFFFFFFE); + USBH->HcInterruptStatus = OR_INTR_STATUS_WDH; + } + + +} +#endif From 67e1ff989f4fa399ef7df11a9e58e202f0011523 Mon Sep 17 00:00:00 2001 From: ccli8 Date: Thu, 11 Aug 2016 11:24:55 +0800 Subject: [PATCH 23/89] Fix USB re-plugin not detected in NUMAKER_PFM_NUC472 --- libraries/USBHost/USBHost/USBHALHost_NUC472.cpp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/libraries/USBHost/USBHost/USBHALHost_NUC472.cpp b/libraries/USBHost/USBHost/USBHALHost_NUC472.cpp index e0fdca2c170..4aa25fe16d6 100644 --- a/libraries/USBHost/USBHost/USBHALHost_NUC472.cpp +++ b/libraries/USBHost/USBHost/USBHALHost_NUC472.cpp @@ -311,6 +311,7 @@ void USBHALHost::UsbIrqhandler() uint32_t ints_roothub = USBH->HcRhStatus; uint32_t ints_port1 = USBH->HcRhPortStatus[0]; + // Port1: ConnectStatusChange if (ints_port1 & OR_RH_PORT_CSC) { if (ints_roothub & OR_RH_STATUS_DRWE) { // When DRWE is on, Connect Status Change means a remote wakeup event. @@ -343,11 +344,14 @@ void USBHALHost::UsbIrqhandler() } USBH->HcRhPortStatus[0] = OR_RH_PORT_CSC; } - - // Reset completed + // Port1: Reset completed if (ints_port1 & OR_RH_PORT_PRSC) { USBH->HcRhPortStatus[0] = OR_RH_PORT_PRSC; } + // Port1: PortEnableStatusChange + if (ints_port1 & OR_RH_PORT_PESC) { + USBH->HcRhPortStatus[0] = OR_RH_PORT_PESC; + } USBH->HcInterruptStatus = OR_INTR_STATUS_RHSC; } From 1cdb46e9b44c4f52049f70523330370b2f336880 Mon Sep 17 00:00:00 2001 From: ccli8 Date: Fri, 19 Aug 2016 18:33:19 +0800 Subject: [PATCH 24/89] Integrate NUC472 DES/TDES accelerator --- .../hal/TARGET_NUVOTON/TARGET_NUC472/crypto.c | 42 ++ .../hal/TARGET_NUVOTON/TARGET_NUC472/crypto.h | 33 ++ .../TARGET_NUVOTON/TARGET_NUC472/des_alt.c | 410 ++++++++++++++++++ .../TARGET_NUVOTON/TARGET_NUC472/des_alt.h | 279 ++++++++++++ 4 files changed, 764 insertions(+) create mode 100644 hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto.c create mode 100644 hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto.h create mode 100644 hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/des_alt.c create mode 100644 hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/des_alt.h diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto.c new file mode 100644 index 00000000000..8d56325b0b4 --- /dev/null +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto.c @@ -0,0 +1,42 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#include "cmsis.h" +#include "mbed_assert.h" +#include "nu_modutil.h" +#include "nu_bitutil.h" + +static int crypto_inited = 0; + +void crypto_init(void) +{ + if (crypto_inited) { + return; + } + crypto_inited = 1; + + CLK_EnableModuleClock(CRPT_MODULE); +} + +/* Implementation that should never be optimized out by the compiler */ +void crypto_zeroize(void *v, size_t n) +{ + volatile unsigned char *p = (unsigned char*) v; + while (n--) { + *p++ = 0; + } +} diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto.h b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto.h new file mode 100644 index 00000000000..0f674651665 --- /dev/null +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto.h @@ -0,0 +1,33 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MBED_CRYPTO_H +#define MBED_CRYPTO_H + +#include "cmsis.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void crypto_init(void); +void crypto_zeroize(void *v, size_t n); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/des_alt.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/des_alt.c new file mode 100644 index 00000000000..867e27b5f9a --- /dev/null +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/des_alt.c @@ -0,0 +1,410 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "mbedtls/config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#if defined(MBEDTLS_DES_C) +#if defined(MBEDTLS_DES_ALT) + +#include +#include "mbedtls/des.h" +#include "des_alt.h" +#include "crypto.h" +#include "nu_bitutil.h" +#include "toolchain.h" + +// Must be a multiple of 64-bit block size +#define MAXSIZE_DMABUF (8 * 5) +static uint8_t dmabuf_in[MAXSIZE_DMABUF] MBED_ALIGN(4); +static uint8_t dmabuf_out[MAXSIZE_DMABUF] MBED_ALIGN(4); + +static int mbedtls_des_docrypt(uint16_t keyopt, uint8_t key[3][MBEDTLS_DES_KEY_SIZE], int enc, uint32_t tdes_opmode, size_t length, + unsigned char iv[8], const unsigned char *input, unsigned char *output); + +void mbedtls_des_init(mbedtls_des_context *ctx) +{ + crypto_init(); + memset(ctx, 0, sizeof(mbedtls_des_context)); +} + +void mbedtls_des_free( mbedtls_des_context *ctx ) +{ + if (ctx == NULL) { + return; + } + + crypto_zeroize(ctx, sizeof(mbedtls_des_context)); +} + +void mbedtls_des3_init( mbedtls_des3_context *ctx ) +{ + crypto_init(); + memset(ctx, 0, sizeof(mbedtls_des3_context)); +} + +void mbedtls_des3_free( mbedtls_des3_context *ctx ) +{ + if (ctx == NULL) { + return; + } + + crypto_zeroize(ctx, sizeof (mbedtls_des3_context)); +} + +static const unsigned char odd_parity_table[128] = { 1, 2, 4, 7, 8, + 11, 13, 14, 16, 19, 21, 22, 25, 26, 28, 31, 32, 35, 37, 38, 41, 42, 44, + 47, 49, 50, 52, 55, 56, 59, 61, 62, 64, 67, 69, 70, 73, 74, 76, 79, 81, + 82, 84, 87, 88, 91, 93, 94, 97, 98, 100, 103, 104, 107, 109, 110, 112, + 115, 117, 118, 121, 122, 124, 127, 128, 131, 133, 134, 137, 138, 140, + 143, 145, 146, 148, 151, 152, 155, 157, 158, 161, 162, 164, 167, 168, + 171, 173, 174, 176, 179, 181, 182, 185, 186, 188, 191, 193, 194, 196, + 199, 200, 203, 205, 206, 208, 211, 213, 214, 217, 218, 220, 223, 224, + 227, 229, 230, 233, 234, 236, 239, 241, 242, 244, 247, 248, 251, 253, + 254 }; + +void mbedtls_des_key_set_parity(unsigned char key[MBEDTLS_DES_KEY_SIZE]) +{ + int i; + + for (i = 0; i < MBEDTLS_DES_KEY_SIZE; i++) { + key[i] = odd_parity_table[key[i] / 2]; + } +} + +/* + * Check the given key's parity, returns 1 on failure, 0 on SUCCESS + */ +int mbedtls_des_key_check_key_parity( const unsigned char key[MBEDTLS_DES_KEY_SIZE] ) +{ + int i; + + for( i = 0; i < MBEDTLS_DES_KEY_SIZE; i++ ) + if( key[i] != odd_parity_table[key[i] / 2] ) + return( 1 ); + + return( 0 ); +} + +/* + * Table of weak and semi-weak keys + * + * Source: http://en.wikipedia.org/wiki/Weak_key + * + * Weak: + * Alternating ones + zeros (0x0101010101010101) + * Alternating 'F' + 'E' (0xFEFEFEFEFEFEFEFE) + * '0xE0E0E0E0F1F1F1F1' + * '0x1F1F1F1F0E0E0E0E' + * + * Semi-weak: + * 0x011F011F010E010E and 0x1F011F010E010E01 + * 0x01E001E001F101F1 and 0xE001E001F101F101 + * 0x01FE01FE01FE01FE and 0xFE01FE01FE01FE01 + * 0x1FE01FE00EF10EF1 and 0xE01FE01FF10EF10E + * 0x1FFE1FFE0EFE0EFE and 0xFE1FFE1FFE0EFE0E + * 0xE0FEE0FEF1FEF1FE and 0xFEE0FEE0FEF1FEF1 + * + */ + +#define WEAK_KEY_COUNT 16 + +static const unsigned char weak_key_table[WEAK_KEY_COUNT][MBEDTLS_DES_KEY_SIZE] = +{ + { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, + { 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE }, + { 0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E }, + { 0xE0, 0xE0, 0xE0, 0xE0, 0xF1, 0xF1, 0xF1, 0xF1 }, + + { 0x01, 0x1F, 0x01, 0x1F, 0x01, 0x0E, 0x01, 0x0E }, + { 0x1F, 0x01, 0x1F, 0x01, 0x0E, 0x01, 0x0E, 0x01 }, + { 0x01, 0xE0, 0x01, 0xE0, 0x01, 0xF1, 0x01, 0xF1 }, + { 0xE0, 0x01, 0xE0, 0x01, 0xF1, 0x01, 0xF1, 0x01 }, + { 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE }, + { 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01 }, + { 0x1F, 0xE0, 0x1F, 0xE0, 0x0E, 0xF1, 0x0E, 0xF1 }, + { 0xE0, 0x1F, 0xE0, 0x1F, 0xF1, 0x0E, 0xF1, 0x0E }, + { 0x1F, 0xFE, 0x1F, 0xFE, 0x0E, 0xFE, 0x0E, 0xFE }, + { 0xFE, 0x1F, 0xFE, 0x1F, 0xFE, 0x0E, 0xFE, 0x0E }, + { 0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE }, + { 0xFE, 0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1 } +}; + +int mbedtls_des_key_check_weak( const unsigned char key[MBEDTLS_DES_KEY_SIZE] ) +{ + int i; + + for( i = 0; i < WEAK_KEY_COUNT; i++ ) + if( memcmp( weak_key_table[i], key, MBEDTLS_DES_KEY_SIZE) == 0 ) + return( 1 ); + + return( 0 ); +} + +/* + * DES key schedule (56-bit, encryption) + */ +int mbedtls_des_setkey_enc( mbedtls_des_context *ctx, const unsigned char key[MBEDTLS_DES_KEY_SIZE] ) +{ + ctx->enc = 1; + // Keying option 3: All three keys are identical, i.e. K1 = K2 = K3. + ctx->keyopt = 3; + memcpy(ctx->key[0], key, MBEDTLS_DES_KEY_SIZE); + memcpy(ctx->key[1], key, MBEDTLS_DES_KEY_SIZE); + memcpy(ctx->key[2], key, MBEDTLS_DES_KEY_SIZE); + + return 0; +} + +/* + * DES key schedule (56-bit, decryption) + */ +int mbedtls_des_setkey_dec( mbedtls_des_context *ctx, const unsigned char key[MBEDTLS_DES_KEY_SIZE] ) +{ + ctx->enc = 0; + // Keying option 3: All three keys are identical, i.e. K1 = K2 = K3. + ctx->keyopt = 3; + memcpy(ctx->key[0], key, MBEDTLS_DES_KEY_SIZE); + memcpy(ctx->key[1], key, MBEDTLS_DES_KEY_SIZE); + memcpy(ctx->key[2], key, MBEDTLS_DES_KEY_SIZE); + + return 0; +} + +/* + * Triple-DES key schedule (112-bit, encryption) + */ +int mbedtls_des3_set2key_enc( mbedtls_des3_context *ctx, + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 2] ) +{ + ctx->enc = 1; + // Keying option 2: K1 and K2 are independent, and K3 = K1. + ctx->keyopt = 2; + memcpy(ctx->key[0], key, MBEDTLS_DES_KEY_SIZE); + memcpy(ctx->key[1], key + MBEDTLS_DES_KEY_SIZE, MBEDTLS_DES_KEY_SIZE); + memcpy(ctx->key[2], key, MBEDTLS_DES_KEY_SIZE); + + return 0; +} + +/* + * Triple-DES key schedule (112-bit, decryption) + */ +int mbedtls_des3_set2key_dec( mbedtls_des3_context *ctx, + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 2] ) +{ + ctx->enc = 0; + // Keying option 2: K1 and K2 are independent, and K3 = K1. + ctx->keyopt = 2; + memcpy(ctx->key[0], key, MBEDTLS_DES_KEY_SIZE); + memcpy(ctx->key[1], key + MBEDTLS_DES_KEY_SIZE, MBEDTLS_DES_KEY_SIZE); + memcpy(ctx->key[2], key, MBEDTLS_DES_KEY_SIZE); + + return 0; +} + +/* + * Triple-DES key schedule (168-bit, encryption) + */ +int mbedtls_des3_set3key_enc( mbedtls_des3_context *ctx, + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 3] ) +{ + ctx->enc = 1; + // Keying option 1: All three keys are independent. + ctx->keyopt = 1; + memcpy(ctx->key[0], key, MBEDTLS_DES_KEY_SIZE); + memcpy(ctx->key[1], key + MBEDTLS_DES_KEY_SIZE, MBEDTLS_DES_KEY_SIZE); + memcpy(ctx->key[2], key + MBEDTLS_DES_KEY_SIZE * 2, MBEDTLS_DES_KEY_SIZE); + + return 0; +} + +/* + * Triple-DES key schedule (168-bit, decryption) + */ +int mbedtls_des3_set3key_dec( mbedtls_des3_context *ctx, + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 3] ) +{ + ctx->enc = 0; + // Keying option 1: All three keys are independent. + ctx->keyopt = 1; + memcpy(ctx->key[0], key, MBEDTLS_DES_KEY_SIZE); + memcpy(ctx->key[1], key + MBEDTLS_DES_KEY_SIZE, MBEDTLS_DES_KEY_SIZE); + memcpy(ctx->key[2], key + MBEDTLS_DES_KEY_SIZE * 2, MBEDTLS_DES_KEY_SIZE); + + return 0; +} + +/* + * DES-ECB block encryption/decryption + */ +int mbedtls_des_crypt_ecb( mbedtls_des_context *ctx, + const unsigned char input[8], + unsigned char output[8] ) +{ + unsigned char iv[8] = {0x00}; + return mbedtls_des_docrypt(ctx->keyopt, ctx->key, ctx->enc, DES_MODE_ECB, 8, iv, input, output); +} + +#if defined(MBEDTLS_CIPHER_MODE_CBC) +/* + * DES-CBC buffer encryption/decryption + */ +int mbedtls_des_crypt_cbc( mbedtls_des_context *ctx, + int mode, + size_t length, + unsigned char iv[8], + const unsigned char *input, + unsigned char *output ) +{ + return mbedtls_des_docrypt(ctx->keyopt, ctx->key, mode == MBEDTLS_DES_ENCRYPT, DES_MODE_CBC, length, iv, input, output); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + +/* + * 3DES-ECB block encryption/decryption + */ +int mbedtls_des3_crypt_ecb( mbedtls_des3_context *ctx, + const unsigned char input[8], + unsigned char output[8] ) +{ + unsigned char iv[8] = {0x00}; + return mbedtls_des_docrypt(ctx->keyopt, ctx->key, ctx->enc, TDES_MODE_ECB, 8, iv, input, output); +} + +#if defined(MBEDTLS_CIPHER_MODE_CBC) +/* + * 3DES-CBC buffer encryption/decryption + */ +int mbedtls_des3_crypt_cbc( mbedtls_des3_context *ctx, + int mode, + size_t length, + unsigned char iv[8], + const unsigned char *input, + unsigned char *output ) +{ + return mbedtls_des_docrypt(ctx->keyopt, ctx->key, mode == MBEDTLS_DES_ENCRYPT, TDES_MODE_CBC, length, iv, input, output); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + + + +static int mbedtls_des_docrypt(uint16_t keyopt, uint8_t key[3][MBEDTLS_DES_KEY_SIZE], int enc, uint32_t tdes_opmode, size_t length, + unsigned char iv[8], const unsigned char *input, unsigned char *output) +{ + if (length % 8) { + return MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH; + } + + // NOTE: Don't call driver function TDES_Open in BSP because it doesn't support TDES_CTL[3KEYS] setting. + CRPT->TDES_CTL = (0 << CRPT_TDES_CTL_CHANNEL_Pos) | (enc << CRPT_TDES_CTL_ENCRPT_Pos) | + tdes_opmode | (TDES_IN_OUT_WHL_SWAP << CRPT_TDES_CTL_BLKSWAP_Pos); + + // Keying option 1: All three keys are independent. + // Keying option 2: K1 and K2 are independent, and K3 = K1. + // Keying option 3: All three keys are identical, i.e. K1 = K2 = K3. + if (keyopt == 1) { + CRPT->TDES_CTL |= CRPT_TDES_CTL_3KEYS_Msk; + } + else { + CRPT->TDES_CTL &= ~CRPT_TDES_CTL_3KEYS_Msk; + } + + // Set DES/TDES keys + // NOTE: Don't call driver function TDES_SetKey in BSP because it doesn't support endian swap. + uint32_t val; + volatile uint32_t *tdes_key = (uint32_t *) ((uint32_t) &CRPT->TDES0_KEY1H + (0x40 * 0)); + val = nu_get32_be(key[0] + 0); + *tdes_key ++ = val; + val = nu_get32_be(key[0] + 4); + *tdes_key ++ = val; + val = nu_get32_be(key[1] + 0); + *tdes_key ++ = val; + val = nu_get32_be(key[1] + 4); + *tdes_key ++ = val; + val = nu_get32_be(key[2] + 0); + *tdes_key ++ = val; + val = nu_get32_be(key[2] + 4); + *tdes_key ++ = val; + + uint32_t rmn = length; + const unsigned char *in_pos = input; + const unsigned char *out_pos = output; + + while (rmn) { + uint32_t data_len = (rmn <= MAXSIZE_DMABUF) ? rmn : MAXSIZE_DMABUF; + + uint32_t ivh, ivl; + ivh = nu_get32_be(iv); + ivl = nu_get32_be(iv + 4); + TDES_SetInitVect(0, ivh, ivl); + + memcpy(dmabuf_in, in_pos, data_len); + + TDES_SetDMATransfer(0, (uint32_t) dmabuf_in, (uint32_t) dmabuf_out, data_len); + + // Start enc/dec. + // NOTE: Don't call driver function TDES_Start in BSP because it will override TDES_CTL[3KEYS] setting. + CRPT->TDES_CTL |= CRPT_TDES_CTL_START_Msk | (CRYPTO_DMA_ONE_SHOT << CRPT_TDES_CTL_DMALAST_Pos); + while (CRPT->TDES_STS & CRPT_TDES_STS_BUSY_Msk); + + memcpy(out_pos, dmabuf_out, data_len); + in_pos += data_len; + out_pos += data_len; + rmn -= data_len; + + // Update IV for next block enc/dec in next function call + switch (tdes_opmode) { + case DES_MODE_OFB: + case TDES_MODE_OFB: { + // OFB: IV (enc/dec) = output block XOR input block + uint32_t lbh, lbl; + // Last block of input data + lbh = nu_get32_be(dmabuf_in + data_len - 8 + 4); + lbl = nu_get32_be(dmabuf_in + data_len - 8 + 0); + // Last block of output data + ivh = nu_get32_be(dmabuf_out + 4); + ivl = nu_get32_be(dmabuf_out + 0); + ivh = ivh ^ lbh; + ivl = ivl ^ lbl; + nu_set32_be(iv + 4, ivh); + nu_set32_be(iv, ivl); + break; + } + case DES_MODE_CBC: + case DES_MODE_CFB: + case TDES_MODE_CBC: + case TDES_MODE_CFB: { + // CBC/CFB: IV (enc) = output block + // IV (dec) = input block + if (enc) { + memcpy(iv, dmabuf_out + data_len - 8, 8); + } + else { + memcpy(iv, dmabuf_in + data_len - 8, 8); + } + } + } + } + + return 0; +} + +#endif /* MBEDTLS_DES_ALT */ +#endif /* MBEDTLS_DES_C */ diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/des_alt.h b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/des_alt.h new file mode 100644 index 00000000000..67a1420ece7 --- /dev/null +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/des_alt.h @@ -0,0 +1,279 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef MBEDTLS_DES_ALT_H +#define MBEDTLS_DES_ALT_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "mbedtls/config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#if defined(MBEDTLS_DES_ALT) + +#include +#include +#include "des.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief DES context structure + */ +typedef struct +{ + int enc; /*!< 0: dec, 1: enc */ + uint16_t keyopt; + uint8_t key[3][MBEDTLS_DES_KEY_SIZE]; /*!< 3DES keys */ +} +mbedtls_des_context; + +/** + * \brief Triple-DES context structure + */ +typedef struct +{ + int enc; /*!< 0: dec, 1: enc */ + uint16_t keyopt; + uint8_t key[3][MBEDTLS_DES_KEY_SIZE]; /*!< 3DES keys */ +} +mbedtls_des3_context; + +/** + * \brief Initialize DES context + * + * \param ctx DES context to be initialized + */ +void mbedtls_des_init( mbedtls_des_context *ctx ); + +/** + * \brief Clear DES context + * + * \param ctx DES context to be cleared + */ +void mbedtls_des_free( mbedtls_des_context *ctx ); + +/** + * \brief Initialize Triple-DES context + * + * \param ctx DES3 context to be initialized + */ +void mbedtls_des3_init( mbedtls_des3_context *ctx ); + +/** + * \brief Clear Triple-DES context + * + * \param ctx DES3 context to be cleared + */ +void mbedtls_des3_free( mbedtls_des3_context *ctx ); + +/** + * \brief Set key parity on the given key to odd. + * + * DES keys are 56 bits long, but each byte is padded with + * a parity bit to allow verification. + * + * \param key 8-byte secret key + */ +void mbedtls_des_key_set_parity( unsigned char key[MBEDTLS_DES_KEY_SIZE] ); + +/** + * \brief Check that key parity on the given key is odd. + * + * DES keys are 56 bits long, but each byte is padded with + * a parity bit to allow verification. + * + * \param key 8-byte secret key + * + * \return 0 is parity was ok, 1 if parity was not correct. + */ +int mbedtls_des_key_check_key_parity( const unsigned char key[MBEDTLS_DES_KEY_SIZE] ); + +/** + * \brief Check that key is not a weak or semi-weak DES key + * + * \param key 8-byte secret key + * + * \return 0 if no weak key was found, 1 if a weak key was identified. + */ +int mbedtls_des_key_check_weak( const unsigned char key[MBEDTLS_DES_KEY_SIZE] ); + +/** + * \brief DES key schedule (56-bit, encryption) + * + * \param ctx DES context to be initialized + * \param key 8-byte secret key + * + * \return 0 + */ +int mbedtls_des_setkey_enc( mbedtls_des_context *ctx, const unsigned char key[MBEDTLS_DES_KEY_SIZE] ); + +/** + * \brief DES key schedule (56-bit, decryption) + * + * \param ctx DES context to be initialized + * \param key 8-byte secret key + * + * \return 0 + */ +int mbedtls_des_setkey_dec( mbedtls_des_context *ctx, const unsigned char key[MBEDTLS_DES_KEY_SIZE] ); + +/** + * \brief Triple-DES key schedule (112-bit, encryption) + * + * \param ctx 3DES context to be initialized + * \param key 16-byte secret key + * + * \return 0 + */ +int mbedtls_des3_set2key_enc( mbedtls_des3_context *ctx, + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 2] ); + +/** + * \brief Triple-DES key schedule (112-bit, decryption) + * + * \param ctx 3DES context to be initialized + * \param key 16-byte secret key + * + * \return 0 + */ +int mbedtls_des3_set2key_dec( mbedtls_des3_context *ctx, + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 2] ); + +/** + * \brief Triple-DES key schedule (168-bit, encryption) + * + * \param ctx 3DES context to be initialized + * \param key 24-byte secret key + * + * \return 0 + */ +int mbedtls_des3_set3key_enc( mbedtls_des3_context *ctx, + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 3] ); + +/** + * \brief Triple-DES key schedule (168-bit, decryption) + * + * \param ctx 3DES context to be initialized + * \param key 24-byte secret key + * + * \return 0 + */ +int mbedtls_des3_set3key_dec( mbedtls_des3_context *ctx, + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 3] ); + +/** + * \brief DES-ECB block encryption/decryption + * + * \param ctx DES context + * \param input 64-bit input block + * \param output 64-bit output block + * + * \return 0 if successful + */ +int mbedtls_des_crypt_ecb( mbedtls_des_context *ctx, + const unsigned char input[8], + unsigned char output[8] ); + +#if defined(MBEDTLS_CIPHER_MODE_CBC) +/** + * \brief DES-CBC buffer encryption/decryption + * + * \note Upon exit, the content of the IV is updated so that you can + * call the function same function again on the following + * block(s) of data and get the same result as if it was + * encrypted in one call. This allows a "streaming" usage. + * If on the other hand you need to retain the contents of the + * IV, you should either save it manually or use the cipher + * module instead. + * + * \param ctx DES context + * \param mode MBEDTLS_DES_ENCRYPT or MBEDTLS_DES_DECRYPT + * \param length length of the input data + * \param iv initialization vector (updated after use) + * \param input buffer holding the input data + * \param output buffer holding the output data + */ +int mbedtls_des_crypt_cbc( mbedtls_des_context *ctx, + int mode, + size_t length, + unsigned char iv[8], + const unsigned char *input, + unsigned char *output ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + +/** + * \brief 3DES-ECB block encryption/decryption + * + * \param ctx 3DES context + * \param input 64-bit input block + * \param output 64-bit output block + * + * \return 0 if successful + */ +int mbedtls_des3_crypt_ecb( mbedtls_des3_context *ctx, + const unsigned char input[8], + unsigned char output[8] ); + +#if defined(MBEDTLS_CIPHER_MODE_CBC) +/** + * \brief 3DES-CBC buffer encryption/decryption + * + * \note Upon exit, the content of the IV is updated so that you can + * call the function same function again on the following + * block(s) of data and get the same result as if it was + * encrypted in one call. This allows a "streaming" usage. + * If on the other hand you need to retain the contents of the + * IV, you should either save it manually or use the cipher + * module instead. + * + * \param ctx 3DES context + * \param mode MBEDTLS_DES_ENCRYPT or MBEDTLS_DES_DECRYPT + * \param length length of the input data + * \param iv initialization vector (updated after use) + * \param input buffer holding the input data + * \param output buffer holding the output data + * + * \return 0 if successful, or MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH + */ +int mbedtls_des3_crypt_cbc( mbedtls_des3_context *ctx, + int mode, + size_t length, + unsigned char iv[8], + const unsigned char *input, + unsigned char *output ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + +/** + * \brief Internal function for key expansion. + * (Only exposed to allow overriding it, + * see MBEDTLS_DES_SETKEY_ALT) + * + * \param SK Round keys + * \param key Base key + */ +void mbedtls_des_setkey( uint32_t SK[32], + const unsigned char key[MBEDTLS_DES_KEY_SIZE] ); +#ifdef __cplusplus +} +#endif + +#endif /* MBEDTLS_DES_ALT */ + +#endif /* des_alt.h */ From 01510da2b12ec2fc8bc1bccdd6f8adb95f297e4d Mon Sep 17 00:00:00 2001 From: cyliangtw Date: Tue, 23 Aug 2016 19:05:03 +0800 Subject: [PATCH 25/89] Integrate NUC472 AES --- .../TARGET_NUVOTON/TARGET_NUC472/aes_alt.c | 515 ++++++++++++++++++ .../TARGET_NUVOTON/TARGET_NUC472/aes_alt.h | 272 +++++++++ 2 files changed, 787 insertions(+) create mode 100644 hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/aes_alt.c create mode 100644 hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/aes_alt.h diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/aes_alt.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/aes_alt.c new file mode 100644 index 00000000000..f6920f5ba09 --- /dev/null +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/aes_alt.c @@ -0,0 +1,515 @@ +/* + * AES hardware acceleration implementation + * + * Copyright (C) 2015-2020, Nuvoton, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + */ +/* + * The AES block cipher was designed by Vincent Rijmen and Joan Daemen. + * + * http://csrc.nist.gov/encryption/aes/rijndael/Rijndael.pdf + * http://csrc.nist.gov/publications/fips/fips197/fips-197.pdf + */ + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "mbedtls/config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#if defined(MBEDTLS_AES_C) + +#include + +#include "mbedtls/aes.h" +#if defined(MBEDTLS_PADLOCK_C) +#include "mbedtls/padlock.h" +#endif +#if defined(MBEDTLS_AESNI_C) +#include "mbedtls/aesni.h" +#endif + +#if defined(MBEDTLS_SELF_TEST) +#if defined(MBEDTLS_PLATFORM_C) +#include "mbedtls/platform.h" +#else +#include +#define mbedtls_printf printf +#endif /* MBEDTLS_PLATFORM_C */ +#endif /* MBEDTLS_SELF_TEST */ + +#include "NUC472_442.h" + +//static int aes_init_done = 0; + +#if defined(MBEDTLS_AES_ALT) + +#define mbedtls_trace //printf + + +/* Implementation that should never be optimized out by the compiler */ +static void mbedtls_zeroize( void *v, size_t n ) { + volatile unsigned char *p = (unsigned char*)v; while( n-- ) *p++ = 0; +} + + +static uint32_t au32MyAESIV[4] = { + 0x00000000, 0x00000000, 0x00000000, 0x00000000 +}; + +extern volatile int g_AES_done; + +#ifdef __ICCARM__ +#pragma data_alignment=4 +uint8_t au8OutputData[16]; +#pragma data_alignment=4 +uint8_t au8InputData[16]; +#else +__align(4) uint8_t au8OutputData[16]; +__align(4) uint8_t au8InputData[16]; +#endif + +static void dumpHex(uint8_t au8Data[], int len) +{ + int j; + for (j = 0; j < len; j++) mbedtls_trace("%02x ", au8Data[j]); + mbedtls_trace("\r\n"); +} + +//volatile void CRYPTO_IRQHandler() +//{ +// if (AES_GET_INT_FLAG()) { +// g_AES_done = 1; +// AES_CLR_INT_FLAG(); +// } +//} + +// AES available channel 0~3 +static unsigned char channel_flag[4]={0x00,0x00,0x00,0x00}; // 0: idle, 1: busy +static int channel_alloc() +{ + int i; + for(i=0; i< sizeof(channel_flag); i++) + { + if( channel_flag[i] == 0x00 ) + { + channel_flag[i] = 0x01; + return i; + } + } + printf("%s: No available AES channel \r\n", __FUNCTION__); + return(-1); +} + +static void channel_free(int i) +{ + if( i >=0 && i < sizeof(channel_flag) ) + channel_flag[i] = 0x00; +} + + +void mbedtls_aes_init( mbedtls_aes_context *ctx ) +{ + int i =-1; + +// sw_mbedtls_aes_init(ctx); +// return; + + mbedtls_trace("=== %s \r\n", __FUNCTION__); + memset( ctx, 0, sizeof( mbedtls_aes_context ) ); + + ctx->swapType = AES_IN_OUT_SWAP; + while( (i = channel_alloc()) < 0 ) osDelay(300); + + ctx->channel = i; + ctx->iv = au32MyAESIV; + + /* Unlock protected registers */ + SYS_UnlockReg(); + CLK_EnableModuleClock(CRPT_MODULE); + /* Lock protected registers */ + SYS_LockReg(); + + NVIC_EnableIRQ(CRPT_IRQn); + AES_ENABLE_INT(); + mbedtls_trace("=== %s channel[%d]\r\n", __FUNCTION__, ctx->channel); +} + +void mbedtls_aes_free( mbedtls_aes_context *ctx ) +{ + + mbedtls_trace("=== %s channel[%d]\r\n", __FUNCTION__,ctx->channel); + + if( ctx == NULL ) + return; + + /* Unlock protected registers */ +// SYS_UnlockReg(); +// CLK_DisableModuleClock(CRPT_MODULE); + /* Lock protected registers */ +// SYS_LockReg(); + +// NVIC_DisableIRQ(CRPT_IRQn); +// AES_DISABLE_INT(); + channel_free(ctx->channel); + mbedtls_zeroize( ctx, sizeof( mbedtls_aes_context ) ); +} + +/* + * AES key schedule (encryption) + */ +#if defined(MBEDTLS_AES_SETKEY_ENC_ALT) +int mbedtls_aes_setkey_enc( mbedtls_aes_context *ctx, const unsigned char *key, + unsigned int keybits ) +{ + unsigned int i; + + mbedtls_trace("=== %s keybits[%d]\r\n", __FUNCTION__, keybits); + dumpHex(key,keybits/8); + + switch( keybits ) + { + case 128: + ctx->keySize = AES_KEY_SIZE_128; + break; + case 192: + ctx->keySize = AES_KEY_SIZE_192; + break; + case 256: + ctx->keySize = AES_KEY_SIZE_256; + break; + default : return( MBEDTLS_ERR_AES_INVALID_KEY_LENGTH ); + } + + + + // key swap + for( i = 0; i < ( keybits >> 5 ); i++ ) + { + ctx->buf[i] = (*(key+i*4) << 24) | + (*(key+1+i*4) << 16) | + (*(key+2+i*4) << 8) | + (*(key+3+i*4) ); + } + AES_SetKey(ctx->channel, ctx->buf, ctx->keySize); + + + return( 0 ); +} +#endif /* MBEDTLS_AES_SETKEY_ENC_ALT */ + +/* + * AES key schedule (decryption) + */ +#if defined(MBEDTLS_AES_SETKEY_DEC_ALT) +int mbedtls_aes_setkey_dec( mbedtls_aes_context *ctx, const unsigned char *key, + unsigned int keybits ) +{ + int ret; + + mbedtls_trace("=== %s keybits[%d]\r\n", __FUNCTION__, keybits); + dumpHex(key,keybits/8); + + /* Also checks keybits */ + if( ( ret = mbedtls_aes_setkey_enc( ctx, key, keybits ) ) != 0 ) + goto exit; + +exit: + + return( ret ); +} +#endif /* MBEDTLS_AES_SETKEY_DEC_ALT */ + + +static void __nvt_aes_crypt( mbedtls_aes_context *ctx, + const unsigned char input[16], + unsigned char output[16]) +{ + int i; + unsigned char* pIn; + unsigned char* pOut; + +// mbedtls_trace("=== %s \r\n", __FUNCTION__); + dumpHex(input,16); + + AES_Open(ctx->channel, ctx->encDec, ctx->opMode, ctx->keySize, ctx->swapType); + AES_SetInitVect(ctx->channel, ctx->iv); + if( ((uint32_t)input) & 0x03 ) + { + memcpy(au8InputData, input, sizeof(au8InputData)); + pIn = au8InputData; + }else{ + pIn = (uint32_t)input; + } + if( ((uint32_t)output) & 0x03 ) + { + pOut = au8OutputData; + } else { + pOut = (uint32_t)output; + } + + AES_SetDMATransfer(ctx->channel, (uint32_t)pIn, (uint32_t)pOut, sizeof(au8InputData)); + + g_AES_done = 0; + AES_Start(ctx->channel, CRYPTO_DMA_ONE_SHOT); + while (!g_AES_done); + + if( pOut != (uint32_t)output ) memcpy(output, au8OutputData, sizeof(au8InputData)); + dumpHex(output,16); + + +} + +/* + * AES-ECB block encryption + */ +#if defined(MBEDTLS_AES_ENCRYPT_ALT) +void mbedtls_aes_encrypt( mbedtls_aes_context *ctx, + const unsigned char input[16], + unsigned char output[16] ) +{ + int i; + + mbedtls_trace("=== %s \r\n", __FUNCTION__); + + ctx->encDec = 1; + __nvt_aes_crypt(ctx, input, output); + +} +#endif /* MBEDTLS_AES_ENCRYPT_ALT */ + +/* + * AES-ECB block decryption + */ +#if defined(MBEDTLS_AES_DECRYPT_ALT) +void mbedtls_aes_decrypt( mbedtls_aes_context *ctx, + const unsigned char input[16], + unsigned char output[16] ) +{ + int i; + + mbedtls_trace("=== %s \r\n", __FUNCTION__); + + ctx->encDec = 0; + __nvt_aes_crypt(ctx, input, output); + + +} +#endif /* MBEDTLS_AES_DECRYPT_ALT */ + +/* + * AES-ECB block encryption/decryption + */ +int mbedtls_aes_crypt_ecb( mbedtls_aes_context *ctx, + int mode, + const unsigned char input[16], + unsigned char output[16] ) +{ + unsigned char sw_output[16]; + + + mbedtls_trace("=== %s \r\n", __FUNCTION__); + + ctx->opMode = AES_MODE_ECB; + if( mode == MBEDTLS_AES_ENCRYPT ) + mbedtls_aes_encrypt( ctx, input, output ); + else + mbedtls_aes_decrypt( ctx, input, output ); + + + return( 0 ); +} + +#if defined(MBEDTLS_CIPHER_MODE_CBC) +/* + * AES-CBC buffer encryption/decryption + */ +int mbedtls_aes_crypt_cbc( mbedtls_aes_context *ctx, + int mode, + size_t length, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ) +{ + int i; + unsigned char temp[16]; + unsigned int* piv; + + mbedtls_trace("=== %s \r\n", __FUNCTION__); + if( length % 16 ) + return( MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); + + + while( length > 0 ) + { + ctx->opMode = AES_MODE_CBC; + ctx->iv = iv; + if( mode == MBEDTLS_AES_ENCRYPT ) + { + mbedtls_aes_encrypt( ctx, input, output ); + memcpy( iv, output, 16 ); + }else{ + memcpy( temp, input, 16 ); + dumpHex(input,16); + mbedtls_aes_decrypt( ctx, input, output ); + dumpHex(iv,16); + dumpHex(output,16); + memcpy( iv, temp, 16 ); + } + + // iv SWAP + piv = (unsigned int*)iv; + for( i=0; i< 4; i++) + { + *piv = (((*piv) & 0x000000FF) << 24) | + (((*piv) & 0x0000FF00) << 8) | + (((*piv) & 0x00FF0000) >> 8) | + (((*piv) & 0xFF000000) >> 24); + piv++; + } + input += 16; + output += 16; + length -= 16; + } + + + return( 0 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + +#if defined(MBEDTLS_CIPHER_MODE_CFB) +/* + * AES-CFB128 buffer encryption/decryption + */ +int mbedtls_aes_crypt_cfb128( mbedtls_aes_context *ctx, + int mode, + size_t length, + size_t *iv_off, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ) +{ + int c; + size_t n = *iv_off; + + mbedtls_trace("=== %s \r\n", __FUNCTION__); + if( mode == MBEDTLS_AES_DECRYPT ) + { + while( length-- ) + { + if( n == 0 ) + mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, iv, iv ); + + c = *input++; + *output++ = (unsigned char)( c ^ iv[n] ); + iv[n] = (unsigned char) c; + + n = ( n + 1 ) & 0x0F; + } + } + else + { + while( length-- ) + { + if( n == 0 ) + mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, iv, iv ); + + iv[n] = *output++ = (unsigned char)( iv[n] ^ *input++ ); + + n = ( n + 1 ) & 0x0F; + } + } + + *iv_off = n; + + return( 0 ); +} + +/* + * AES-CFB8 buffer encryption/decryption + */ +int mbedtls_aes_crypt_cfb8( mbedtls_aes_context *ctx, + int mode, + size_t length, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ) +{ + unsigned char c; + unsigned char ov[17]; + + mbedtls_trace("=== %s \r\n", __FUNCTION__); + while( length-- ) + { + memcpy( ov, iv, 16 ); + mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, iv, iv ); + + if( mode == MBEDTLS_AES_DECRYPT ) + ov[16] = *input; + + c = *output++ = (unsigned char)( iv[0] ^ *input++ ); + + if( mode == MBEDTLS_AES_ENCRYPT ) + ov[16] = c; + + memcpy( iv, ov + 1, 16 ); + } + + return( 0 ); +} +#endif /*MBEDTLS_CIPHER_MODE_CFB */ + +#if defined(MBEDTLS_CIPHER_MODE_CTR) +/* + * AES-CTR buffer encryption/decryption + */ +int mbedtls_aes_crypt_ctr( mbedtls_aes_context *ctx, + size_t length, + size_t *nc_off, + unsigned char nonce_counter[16], + unsigned char stream_block[16], + const unsigned char *input, + unsigned char *output ) +{ + int c, i; + size_t n = *nc_off; + + mbedtls_trace("=== %s \r\n", __FUNCTION__); + while( length-- ) + { + if( n == 0 ) { + mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, nonce_counter, stream_block ); + + for( i = 16; i > 0; i-- ) + if( ++nonce_counter[i - 1] != 0 ) + break; + } + c = *input++; + *output++ = (unsigned char)( c ^ stream_block[n] ); + + n = ( n + 1 ) & 0x0F; + } + + *nc_off = n; + + return( 0 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CTR */ + +#endif /* MBEDTLS_AES_ALT */ + + +#endif /* MBEDTLS_AES_C */ diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/aes_alt.h b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/aes_alt.h new file mode 100644 index 00000000000..77d1837e9eb --- /dev/null +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/aes_alt.h @@ -0,0 +1,272 @@ +/** + * \file aes_alt.h + * + * \brief AES block cipher + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ + +#if defined(MBEDTLS_AES_ALT) +// Regular implementation +// +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief AES context structure + * + * \note buf is able to hold 32 extra bytes, which can be used: + * - for alignment purposes if VIA padlock is used, and/or + * - to simplify key expansion in the 256-bit case by + * generating an extra round key + */ +typedef struct +{ + uint32_t keySize; + uint32_t encDec; + uint32_t opMode; + uint32_t channel; + uint32_t swapType; + uint32_t *iv; + uint32_t buf[8]; +/* For comparsion with software AES for correctness */ +#if 0 + uint32_t buf[68]; /*!< unaligned data */ + int nr; /*!< number of rounds */ + uint32_t *rk; /*!< AES round keys */ +#endif +} +mbedtls_aes_context; + +/** + * \brief Initialize AES context + * + * \param ctx AES context to be initialized + */ +void mbedtls_aes_init( mbedtls_aes_context *ctx ); + +/** + * \brief Clear AES context + * + * \param ctx AES context to be cleared + */ +void mbedtls_aes_free( mbedtls_aes_context *ctx ); + +/** + * \brief AES key schedule (encryption) + * + * \param ctx AES context to be initialized + * \param key encryption key + * \param keybits must be 128, 192 or 256 + * + * \return 0 if successful, or MBEDTLS_ERR_AES_INVALID_KEY_LENGTH + */ +int mbedtls_aes_setkey_enc( mbedtls_aes_context *ctx, const unsigned char *key, + unsigned int keybits ); + +/** + * \brief AES key schedule (decryption) + * + * \param ctx AES context to be initialized + * \param key decryption key + * \param keybits must be 128, 192 or 256 + * + * \return 0 if successful, or MBEDTLS_ERR_AES_INVALID_KEY_LENGTH + */ +int mbedtls_aes_setkey_dec( mbedtls_aes_context *ctx, const unsigned char *key, + unsigned int keybits ); + +/** + * \brief AES-ECB block encryption/decryption + * + * \param ctx AES context + * \param mode MBEDTLS_AES_ENCRYPT or MBEDTLS_AES_DECRYPT + * \param input 16-byte input block + * \param output 16-byte output block + * + * \return 0 if successful + */ +int mbedtls_aes_crypt_ecb( mbedtls_aes_context *ctx, + int mode, + const unsigned char input[16], + unsigned char output[16] ); + +#if defined(MBEDTLS_CIPHER_MODE_CBC) +/** + * \brief AES-CBC buffer encryption/decryption + * Length should be a multiple of the block + * size (16 bytes) + * + * \note Upon exit, the content of the IV is updated so that you can + * call the function same function again on the following + * block(s) of data and get the same result as if it was + * encrypted in one call. This allows a "streaming" usage. + * If on the other hand you need to retain the contents of the + * IV, you should either save it manually or use the cipher + * module instead. + * + * \param ctx AES context + * \param mode MBEDTLS_AES_ENCRYPT or MBEDTLS_AES_DECRYPT + * \param length length of the input data + * \param iv initialization vector (updated after use) + * \param input buffer holding the input data + * \param output buffer holding the output data + * + * \return 0 if successful, or MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH + */ +int mbedtls_aes_crypt_cbc( mbedtls_aes_context *ctx, + int mode, + size_t length, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + +#if defined(MBEDTLS_CIPHER_MODE_CFB) +/** + * \brief AES-CFB128 buffer encryption/decryption. + * + * Note: Due to the nature of CFB you should use the same key schedule for + * both encryption and decryption. So a context initialized with + * mbedtls_aes_setkey_enc() for both MBEDTLS_AES_ENCRYPT and MBEDTLS_AES_DECRYPT. + * + * \note Upon exit, the content of the IV is updated so that you can + * call the function same function again on the following + * block(s) of data and get the same result as if it was + * encrypted in one call. This allows a "streaming" usage. + * If on the other hand you need to retain the contents of the + * IV, you should either save it manually or use the cipher + * module instead. + * + * \param ctx AES context + * \param mode MBEDTLS_AES_ENCRYPT or MBEDTLS_AES_DECRYPT + * \param length length of the input data + * \param iv_off offset in IV (updated after use) + * \param iv initialization vector (updated after use) + * \param input buffer holding the input data + * \param output buffer holding the output data + * + * \return 0 if successful + */ +int mbedtls_aes_crypt_cfb128( mbedtls_aes_context *ctx, + int mode, + size_t length, + size_t *iv_off, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ); + +/** + * \brief AES-CFB8 buffer encryption/decryption. + * + * Note: Due to the nature of CFB you should use the same key schedule for + * both encryption and decryption. So a context initialized with + * mbedtls_aes_setkey_enc() for both MBEDTLS_AES_ENCRYPT and MBEDTLS_AES_DECRYPT. + * + * \note Upon exit, the content of the IV is updated so that you can + * call the function same function again on the following + * block(s) of data and get the same result as if it was + * encrypted in one call. This allows a "streaming" usage. + * If on the other hand you need to retain the contents of the + * IV, you should either save it manually or use the cipher + * module instead. + * + * \param ctx AES context + * \param mode MBEDTLS_AES_ENCRYPT or MBEDTLS_AES_DECRYPT + * \param length length of the input data + * \param iv initialization vector (updated after use) + * \param input buffer holding the input data + * \param output buffer holding the output data + * + * \return 0 if successful + */ +int mbedtls_aes_crypt_cfb8( mbedtls_aes_context *ctx, + int mode, + size_t length, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ); +#endif /*MBEDTLS_CIPHER_MODE_CFB */ + +#if defined(MBEDTLS_CIPHER_MODE_CTR) +/** + * \brief AES-CTR buffer encryption/decryption + * + * Warning: You have to keep the maximum use of your counter in mind! + * + * Note: Due to the nature of CTR you should use the same key schedule for + * both encryption and decryption. So a context initialized with + * mbedtls_aes_setkey_enc() for both MBEDTLS_AES_ENCRYPT and MBEDTLS_AES_DECRYPT. + * + * \param ctx AES context + * \param length The length of the data + * \param nc_off The offset in the current stream_block (for resuming + * within current cipher stream). The offset pointer to + * should be 0 at the start of a stream. + * \param nonce_counter The 128-bit nonce and counter. + * \param stream_block The saved stream-block for resuming. Is overwritten + * by the function. + * \param input The input data stream + * \param output The output data stream + * + * \return 0 if successful + */ +int mbedtls_aes_crypt_ctr( mbedtls_aes_context *ctx, + size_t length, + size_t *nc_off, + unsigned char nonce_counter[16], + unsigned char stream_block[16], + const unsigned char *input, + unsigned char *output ); +#endif /* MBEDTLS_CIPHER_MODE_CTR */ + +/** + * \brief Internal AES block encryption function + * (Only exposed to allow overriding it, + * see MBEDTLS_AES_ENCRYPT_ALT) + * + * \param ctx AES context + * \param input Plaintext block + * \param output Output (ciphertext) block + */ +void mbedtls_aes_encrypt( mbedtls_aes_context *ctx, + const unsigned char input[16], + unsigned char output[16] ); + +/** + * \brief Internal AES block decryption function + * (Only exposed to allow overriding it, + * see MBEDTLS_AES_DECRYPT_ALT) + * + * \param ctx AES context + * \param input Ciphertext block + * \param output Output (plaintext) block + */ +void mbedtls_aes_decrypt( mbedtls_aes_context *ctx, + const unsigned char input[16], + unsigned char output[16] ); + +#ifdef __cplusplus +} +#endif + + +#endif /* MBEDTLS_AES_ALT */ + + From cedb9ee154dd9fbc2e27f813d8dce6056c4b2e47 Mon Sep 17 00:00:00 2001 From: ccli8 Date: Thu, 25 Aug 2016 09:59:13 +0800 Subject: [PATCH 26/89] Integrate NUC472 SHA accelerator --- .../hal/TARGET_NUVOTON/TARGET_NUC472/crypto.c | 20 + .../hal/TARGET_NUVOTON/TARGET_NUC472/crypto.h | 2 + .../TARGET_NUVOTON/TARGET_NUC472/sha1_alt.c | 104 ++++++ .../TARGET_NUVOTON/TARGET_NUC472/sha1_alt.h | 115 ++++++ .../TARGET_NUC472/sha1_alt_sw.c | 345 ++++++++++++++++++ .../TARGET_NUC472/sha1_alt_sw.h | 112 ++++++ .../TARGET_NUVOTON/TARGET_NUC472/sha256_alt.c | 104 ++++++ .../TARGET_NUVOTON/TARGET_NUC472/sha256_alt.h | 117 ++++++ .../TARGET_NUC472/sha256_alt_sw.c | 316 ++++++++++++++++ .../TARGET_NUC472/sha256_alt_sw.h | 115 ++++++ .../TARGET_NUVOTON/TARGET_NUC472/sha_alt_hw.c | 236 ++++++++++++ .../TARGET_NUVOTON/TARGET_NUC472/sha_alt_hw.h | 86 +++++ 12 files changed, 1672 insertions(+) create mode 100644 hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha1_alt.c create mode 100644 hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha1_alt.h create mode 100644 hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha1_alt_sw.c create mode 100644 hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha1_alt_sw.h create mode 100644 hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha256_alt.c create mode 100644 hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha256_alt.h create mode 100644 hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha256_alt_sw.c create mode 100644 hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha256_alt_sw.h create mode 100644 hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha_alt_hw.c create mode 100644 hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha_alt_hw.h diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto.c index 8d56325b0b4..20f80783a55 100644 --- a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto.c +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto.c @@ -21,6 +21,7 @@ #include "nu_bitutil.h" static int crypto_inited = 0; +static int crypto_sha_hw_avail = 1; void crypto_init(void) { @@ -40,3 +41,22 @@ void crypto_zeroize(void *v, size_t n) *p++ = 0; } } + +int crypto_sha_hw_acquire(void) +{ + if (crypto_sha_hw_avail) { + crypto_sha_hw_avail = 0; + return 1; + } + else { + return 0; + } + +} + +void crypto_sha_hw_release(void) +{ + if (! crypto_sha_hw_avail) { + crypto_sha_hw_avail = 1; + } +} diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto.h b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto.h index 0f674651665..2585a9936b1 100644 --- a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto.h +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto.h @@ -25,6 +25,8 @@ extern "C" { void crypto_init(void); void crypto_zeroize(void *v, size_t n); +int crypto_sha_hw_acquire(void); +void crypto_sha_hw_release(void); #ifdef __cplusplus } diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha1_alt.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha1_alt.c new file mode 100644 index 00000000000..374228406b4 --- /dev/null +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha1_alt.c @@ -0,0 +1,104 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "mbedtls/config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#if defined(MBEDTLS_SHA1_C) +#if defined(MBEDTLS_SHA1_ALT) + +#include "sha1_alt.h" +#include "crypto.h" + +void mbedtls_sha1_init(mbedtls_sha1_context *ctx) +{ + if (crypto_sha_hw_acquire()) { + ctx->mbedtls_sha1_init = mbedtls_sha1_hw_init; + ctx->mbedtls_sha1_free = mbedtls_sha1_hw_free; + ctx->mbedtls_sha1_clone = mbedtls_sha1_hw_clone; + ctx->mbedtls_sha1_starts = mbedtls_sha1_hw_starts; + ctx->mbedtls_sha1_update = mbedtls_sha1_hw_update; + ctx->mbedtls_sha1_finish = mbedtls_sha1_hw_finish; + ctx->mbedtls_sha1_process = mbedtls_sha1_hw_process; + } + else { + ctx->mbedtls_sha1_init = mbedtls_sha1_sw_init; + ctx->mbedtls_sha1_free = mbedtls_sha1_sw_free; + ctx->mbedtls_sha1_clone = mbedtls_sha1_sw_clone; + ctx->mbedtls_sha1_starts = mbedtls_sha1_sw_starts; + ctx->mbedtls_sha1_update = mbedtls_sha1_sw_update; + ctx->mbedtls_sha1_finish = mbedtls_sha1_sw_finish; + ctx->mbedtls_sha1_process = mbedtls_sha1_sw_process; + } + + ctx->mbedtls_sha1_init(ctx); +} + +void mbedtls_sha1_free(mbedtls_sha1_context *ctx) +{ + if (ctx == NULL) { + return; + } + + ctx->mbedtls_sha1_free(ctx); + + if (ctx->mbedtls_sha1_init == mbedtls_sha1_hw_init) { + crypto_sha_hw_release(); + } +} + +void mbedtls_sha1_clone(mbedtls_sha1_context *dst, + const mbedtls_sha1_context *src) +{ + *dst = *src; +} + +/* + * SHA-1 context setup + */ +void mbedtls_sha1_starts(mbedtls_sha1_context *ctx) +{ + ctx->mbedtls_sha1_starts(ctx); + + return; +} + +/* + * SHA-1 process buffer + */ +void mbedtls_sha1_update(mbedtls_sha1_context *ctx, const unsigned char *input, size_t ilen) +{ + ctx->mbedtls_sha1_update(ctx, input, ilen); +} + +/* + * SHA-1 final digest + */ +void mbedtls_sha1_finish(mbedtls_sha1_context *ctx, unsigned char output[20]) +{ + ctx->mbedtls_sha1_finish(ctx, output); +} + +void mbedtls_sha1_process(mbedtls_sha1_context *ctx, const unsigned char data[64]) +{ + ctx->mbedtls_sha1_process(ctx, data); +} + +#endif /* MBEDTLS_SHA1_ALT */ +#endif /* MBEDTLS_SHA1_C */ diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha1_alt.h b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha1_alt.h new file mode 100644 index 00000000000..a4c3c7e5ccb --- /dev/null +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha1_alt.h @@ -0,0 +1,115 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef MBEDTLS_SHA1_ALT_H +#define MBEDTLS_SHA1_ALT_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#if defined(MBEDTLS_SHA1_C) +#if defined(MBEDTLS_SHA1_ALT) + +#include "sha1.h" +#include "sha_alt_hw.h" +#include "sha1_alt_sw.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct mbedtls_sha1_context_s; + +/** + * \brief SHA-1 context structure + */ +typedef struct mbedtls_sha1_context_s +{ + union { + crypto_sha_context hw_ctx; + mbedtls_sha1_sw_context sw_ctx; + }; + + void (*mbedtls_sha1_init)(struct mbedtls_sha1_context_s *ctx); + void (*mbedtls_sha1_free)(struct mbedtls_sha1_context_s *ctx); + void (*mbedtls_sha1_clone)(struct mbedtls_sha1_context_s *dst, const struct mbedtls_sha1_context_s *src); + void (*mbedtls_sha1_starts)(struct mbedtls_sha1_context_s *ctx); + void (*mbedtls_sha1_update)(struct mbedtls_sha1_context_s *ctx, const unsigned char *input, size_t ilen); + void (*mbedtls_sha1_finish)(struct mbedtls_sha1_context_s *ctx, unsigned char output[20]); + void (*mbedtls_sha1_process)(struct mbedtls_sha1_context_s *ctx, const unsigned char data[64]); +} +mbedtls_sha1_context; + +/** + * \brief Initialize SHA-1 context + * + * \param ctx SHA-1 context to be initialized + */ +void mbedtls_sha1_init( mbedtls_sha1_context *ctx ); + +/** + * \brief Clear SHA-1 context + * + * \param ctx SHA-1 context to be cleared + */ +void mbedtls_sha1_free( mbedtls_sha1_context *ctx ); + +/** + * \brief Clone (the state of) a SHA-1 context + * + * \param dst The destination context + * \param src The context to be cloned + */ +void mbedtls_sha1_clone( mbedtls_sha1_context *dst, + const mbedtls_sha1_context *src ); + +/** + * \brief SHA-1 context setup + * + * \param ctx context to be initialized + */ +void mbedtls_sha1_starts( mbedtls_sha1_context *ctx ); + +/** + * \brief SHA-1 process buffer + * + * \param ctx SHA-1 context + * \param input buffer holding the data + * \param ilen length of the input data + */ +void mbedtls_sha1_update( mbedtls_sha1_context *ctx, const unsigned char *input, size_t ilen ); + +/** + * \brief SHA-1 final digest + * + * \param ctx SHA-1 context + * \param output SHA-1 checksum result + */ +void mbedtls_sha1_finish( mbedtls_sha1_context *ctx, unsigned char output[20] ); + +/* Internal use */ +void mbedtls_sha1_process( mbedtls_sha1_context *ctx, const unsigned char data[64] ); + +#ifdef __cplusplus +} +#endif + +#endif /* MBEDTLS_SHA1_ALT */ +#endif /* MBEDTLS_SHA1_C */ + +#endif /* sha1_alt.h */ diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha1_alt_sw.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha1_alt_sw.c new file mode 100644 index 00000000000..946366e1b06 --- /dev/null +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha1_alt_sw.c @@ -0,0 +1,345 @@ +/* + * FIPS-180-1 compliant SHA-1 implementation + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +/* + * The SHA-1 standard was published by NIST in 1993. + * + * http://www.itl.nist.gov/fipspubs/fip180-1.htm + */ + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "mbedtls/config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#if defined(MBEDTLS_SHA1_C) +#if defined(MBEDTLS_SHA1_ALT) + +#include "mbedtls/sha1.h" + +#include + +/* Implementation that should never be optimized out by the compiler */ +static void mbedtls_zeroize( void *v, size_t n ) { + volatile unsigned char *p = (unsigned char*)v; while( n-- ) *p++ = 0; +} + +/* + * 32-bit integer manipulation macros (big endian) + */ +#ifndef GET_UINT32_BE +#define GET_UINT32_BE(n,b,i) \ +{ \ + (n) = ( (uint32_t) (b)[(i) ] << 24 ) \ + | ( (uint32_t) (b)[(i) + 1] << 16 ) \ + | ( (uint32_t) (b)[(i) + 2] << 8 ) \ + | ( (uint32_t) (b)[(i) + 3] ); \ +} +#endif + +#ifndef PUT_UINT32_BE +#define PUT_UINT32_BE(n,b,i) \ +{ \ + (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \ + (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \ + (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \ + (b)[(i) + 3] = (unsigned char) ( (n) ); \ +} +#endif + +void mbedtls_sha1_sw_init( mbedtls_sha1_context *ctx ) +{ + memset( &ctx->sw_ctx, 0, sizeof( ctx->sw_ctx ) ); +} + +void mbedtls_sha1_sw_free( mbedtls_sha1_context *ctx ) +{ + if( ctx == NULL ) + return; + + mbedtls_zeroize( &ctx->sw_ctx, sizeof( ctx->sw_ctx ) ); +} + +void mbedtls_sha1_sw_clone( mbedtls_sha1_context *dst, + const mbedtls_sha1_context *src ) +{ + dst->sw_ctx = src->sw_ctx; +} + +/* + * SHA-1 context setup + */ +void mbedtls_sha1_sw_starts( mbedtls_sha1_context *ctx_ ) +{ + mbedtls_sha1_sw_context *ctx = &ctx_->sw_ctx; + + ctx->total[0] = 0; + ctx->total[1] = 0; + + ctx->state[0] = 0x67452301; + ctx->state[1] = 0xEFCDAB89; + ctx->state[2] = 0x98BADCFE; + ctx->state[3] = 0x10325476; + ctx->state[4] = 0xC3D2E1F0; +} + +void mbedtls_sha1_sw_process( mbedtls_sha1_context *ctx_, const unsigned char data[64] ) +{ + mbedtls_sha1_sw_context *ctx = &ctx_->sw_ctx; + + uint32_t temp, W[16], A, B, C, D, E; + + GET_UINT32_BE( W[ 0], data, 0 ); + GET_UINT32_BE( W[ 1], data, 4 ); + GET_UINT32_BE( W[ 2], data, 8 ); + GET_UINT32_BE( W[ 3], data, 12 ); + GET_UINT32_BE( W[ 4], data, 16 ); + GET_UINT32_BE( W[ 5], data, 20 ); + GET_UINT32_BE( W[ 6], data, 24 ); + GET_UINT32_BE( W[ 7], data, 28 ); + GET_UINT32_BE( W[ 8], data, 32 ); + GET_UINT32_BE( W[ 9], data, 36 ); + GET_UINT32_BE( W[10], data, 40 ); + GET_UINT32_BE( W[11], data, 44 ); + GET_UINT32_BE( W[12], data, 48 ); + GET_UINT32_BE( W[13], data, 52 ); + GET_UINT32_BE( W[14], data, 56 ); + GET_UINT32_BE( W[15], data, 60 ); + +#define S(x,n) ((x << n) | ((x & 0xFFFFFFFF) >> (32 - n))) + +#define R(t) \ +( \ + temp = W[( t - 3 ) & 0x0F] ^ W[( t - 8 ) & 0x0F] ^ \ + W[( t - 14 ) & 0x0F] ^ W[ t & 0x0F], \ + ( W[t & 0x0F] = S(temp,1) ) \ +) + +#define P(a,b,c,d,e,x) \ +{ \ + e += S(a,5) + F(b,c,d) + K + x; b = S(b,30); \ +} + + A = ctx->state[0]; + B = ctx->state[1]; + C = ctx->state[2]; + D = ctx->state[3]; + E = ctx->state[4]; + +#define F(x,y,z) (z ^ (x & (y ^ z))) +#define K 0x5A827999 + + P( A, B, C, D, E, W[0] ); + P( E, A, B, C, D, W[1] ); + P( D, E, A, B, C, W[2] ); + P( C, D, E, A, B, W[3] ); + P( B, C, D, E, A, W[4] ); + P( A, B, C, D, E, W[5] ); + P( E, A, B, C, D, W[6] ); + P( D, E, A, B, C, W[7] ); + P( C, D, E, A, B, W[8] ); + P( B, C, D, E, A, W[9] ); + P( A, B, C, D, E, W[10] ); + P( E, A, B, C, D, W[11] ); + P( D, E, A, B, C, W[12] ); + P( C, D, E, A, B, W[13] ); + P( B, C, D, E, A, W[14] ); + P( A, B, C, D, E, W[15] ); + P( E, A, B, C, D, R(16) ); + P( D, E, A, B, C, R(17) ); + P( C, D, E, A, B, R(18) ); + P( B, C, D, E, A, R(19) ); + +#undef K +#undef F + +#define F(x,y,z) (x ^ y ^ z) +#define K 0x6ED9EBA1 + + P( A, B, C, D, E, R(20) ); + P( E, A, B, C, D, R(21) ); + P( D, E, A, B, C, R(22) ); + P( C, D, E, A, B, R(23) ); + P( B, C, D, E, A, R(24) ); + P( A, B, C, D, E, R(25) ); + P( E, A, B, C, D, R(26) ); + P( D, E, A, B, C, R(27) ); + P( C, D, E, A, B, R(28) ); + P( B, C, D, E, A, R(29) ); + P( A, B, C, D, E, R(30) ); + P( E, A, B, C, D, R(31) ); + P( D, E, A, B, C, R(32) ); + P( C, D, E, A, B, R(33) ); + P( B, C, D, E, A, R(34) ); + P( A, B, C, D, E, R(35) ); + P( E, A, B, C, D, R(36) ); + P( D, E, A, B, C, R(37) ); + P( C, D, E, A, B, R(38) ); + P( B, C, D, E, A, R(39) ); + +#undef K +#undef F + +#define F(x,y,z) ((x & y) | (z & (x | y))) +#define K 0x8F1BBCDC + + P( A, B, C, D, E, R(40) ); + P( E, A, B, C, D, R(41) ); + P( D, E, A, B, C, R(42) ); + P( C, D, E, A, B, R(43) ); + P( B, C, D, E, A, R(44) ); + P( A, B, C, D, E, R(45) ); + P( E, A, B, C, D, R(46) ); + P( D, E, A, B, C, R(47) ); + P( C, D, E, A, B, R(48) ); + P( B, C, D, E, A, R(49) ); + P( A, B, C, D, E, R(50) ); + P( E, A, B, C, D, R(51) ); + P( D, E, A, B, C, R(52) ); + P( C, D, E, A, B, R(53) ); + P( B, C, D, E, A, R(54) ); + P( A, B, C, D, E, R(55) ); + P( E, A, B, C, D, R(56) ); + P( D, E, A, B, C, R(57) ); + P( C, D, E, A, B, R(58) ); + P( B, C, D, E, A, R(59) ); + +#undef K +#undef F + +#define F(x,y,z) (x ^ y ^ z) +#define K 0xCA62C1D6 + + P( A, B, C, D, E, R(60) ); + P( E, A, B, C, D, R(61) ); + P( D, E, A, B, C, R(62) ); + P( C, D, E, A, B, R(63) ); + P( B, C, D, E, A, R(64) ); + P( A, B, C, D, E, R(65) ); + P( E, A, B, C, D, R(66) ); + P( D, E, A, B, C, R(67) ); + P( C, D, E, A, B, R(68) ); + P( B, C, D, E, A, R(69) ); + P( A, B, C, D, E, R(70) ); + P( E, A, B, C, D, R(71) ); + P( D, E, A, B, C, R(72) ); + P( C, D, E, A, B, R(73) ); + P( B, C, D, E, A, R(74) ); + P( A, B, C, D, E, R(75) ); + P( E, A, B, C, D, R(76) ); + P( D, E, A, B, C, R(77) ); + P( C, D, E, A, B, R(78) ); + P( B, C, D, E, A, R(79) ); + +#undef K +#undef F + + ctx->state[0] += A; + ctx->state[1] += B; + ctx->state[2] += C; + ctx->state[3] += D; + ctx->state[4] += E; +} + +/* + * SHA-1 process buffer + */ +void mbedtls_sha1_sw_update( mbedtls_sha1_context *ctx_, const unsigned char *input, size_t ilen ) +{ + mbedtls_sha1_sw_context *ctx = &ctx_->sw_ctx; + + size_t fill; + uint32_t left; + + if( ilen == 0 ) + return; + + left = ctx->total[0] & 0x3F; + fill = 64 - left; + + ctx->total[0] += (uint32_t) ilen; + ctx->total[0] &= 0xFFFFFFFF; + + if( ctx->total[0] < (uint32_t) ilen ) + ctx->total[1]++; + + if( left && ilen >= fill ) + { + memcpy( (void *) (ctx->buffer + left), input, fill ); + mbedtls_sha1_sw_process( ctx_, ctx->buffer ); + input += fill; + ilen -= fill; + left = 0; + } + + while( ilen >= 64 ) + { + mbedtls_sha1_sw_process( ctx_, input ); + input += 64; + ilen -= 64; + } + + if( ilen > 0 ) + memcpy( (void *) (ctx->buffer + left), input, ilen ); +} + +static const unsigned char sha1_padding[64] = +{ + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +/* + * SHA-1 final digest + */ +void mbedtls_sha1_sw_finish( mbedtls_sha1_context *ctx_, unsigned char output[20] ) +{ + mbedtls_sha1_sw_context *ctx = &ctx_->sw_ctx; + + uint32_t last, padn; + uint32_t high, low; + unsigned char msglen[8]; + + high = ( ctx->total[0] >> 29 ) + | ( ctx->total[1] << 3 ); + low = ( ctx->total[0] << 3 ); + + PUT_UINT32_BE( high, msglen, 0 ); + PUT_UINT32_BE( low, msglen, 4 ); + + last = ctx->total[0] & 0x3F; + padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last ); + + mbedtls_sha1_sw_update( ctx_, sha1_padding, padn ); + mbedtls_sha1_sw_update( ctx_, msglen, 8 ); + + PUT_UINT32_BE( ctx->state[0], output, 0 ); + PUT_UINT32_BE( ctx->state[1], output, 4 ); + PUT_UINT32_BE( ctx->state[2], output, 8 ); + PUT_UINT32_BE( ctx->state[3], output, 12 ); + PUT_UINT32_BE( ctx->state[4], output, 16 ); +} + +#endif /* MBEDTLS_SHA1_ALT */ + +#endif /* MBEDTLS_SHA1_C */ diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha1_alt_sw.h b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha1_alt_sw.h new file mode 100644 index 00000000000..4b0ab56f509 --- /dev/null +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha1_alt_sw.h @@ -0,0 +1,112 @@ +/** + * \file sha1.h + * + * \brief SHA-1 cryptographic hash function + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_SHA1_ALT_SW_H +#define MBEDTLS_SHA1_ALT_SW_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#if defined(MBEDTLS_SHA1_C) +#if defined(MBEDTLS_SHA1_ALT) + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct mbedtls_sha1_context_s; + +/** + * \brief SHA-1 context structure + */ +typedef struct +{ + uint32_t total[2]; /*!< number of bytes processed */ + uint32_t state[5]; /*!< intermediate digest state */ + unsigned char buffer[64]; /*!< data block being processed */ +} +mbedtls_sha1_sw_context; + +/** + * \brief Initialize SHA-1 context + * + * \param ctx SHA-1 context to be initialized + */ +void mbedtls_sha1_sw_init( struct mbedtls_sha1_context_s *ctx ); + +/** + * \brief Clear SHA-1 context + * + * \param ctx SHA-1 context to be cleared + */ +void mbedtls_sha1_sw_free( struct mbedtls_sha1_context_s *ctx ); + +/** + * \brief Clone (the state of) a SHA-1 context + * + * \param dst The destination context + * \param src The context to be cloned + */ +void mbedtls_sha1_sw_clone( struct mbedtls_sha1_context_s *dst, + const struct mbedtls_sha1_context_s *src ); + +/** + * \brief SHA-1 context setup + * + * \param ctx context to be initialized + */ +void mbedtls_sha1_sw_starts( struct mbedtls_sha1_context_s *ctx ); + +/** + * \brief SHA-1 process buffer + * + * \param ctx SHA-1 context + * \param input buffer holding the data + * \param ilen length of the input data + */ +void mbedtls_sha1_sw_update( struct mbedtls_sha1_context_s *ctx, const unsigned char *input, size_t ilen ); + +/** + * \brief SHA-1 final digest + * + * \param ctx SHA-1 context + * \param output SHA-1 checksum result + */ +void mbedtls_sha1_sw_finish( struct mbedtls_sha1_context_s *ctx, unsigned char output[20] ); + +/* Internal use */ +void mbedtls_sha1_sw_process( struct mbedtls_sha1_context_s *ctx, const unsigned char data[64] ); + +#ifdef __cplusplus +} +#endif + +#endif /* MBEDTLS_SHA1_ALT */ +#endif /* MBEDTLS_SHA1_C */ + +#endif /* sha1_alt_sw.h */ diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha256_alt.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha256_alt.c new file mode 100644 index 00000000000..80e19f74063 --- /dev/null +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha256_alt.c @@ -0,0 +1,104 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "mbedtls/config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#if defined(MBEDTLS_SHA256_C) +#if defined(MBEDTLS_SHA256_ALT) + +#include "sha256_alt.h" +#include "crypto.h" + +void mbedtls_sha256_init(mbedtls_sha256_context *ctx) +{ + if (crypto_sha_hw_acquire()) { + ctx->mbedtls_sha256_init = mbedtls_sha256_hw_init; + ctx->mbedtls_sha256_free = mbedtls_sha256_hw_free; + ctx->mbedtls_sha256_clone = mbedtls_sha256_hw_clone; + ctx->mbedtls_sha256_starts = mbedtls_sha256_hw_starts; + ctx->mbedtls_sha256_update = mbedtls_sha256_hw_update; + ctx->mbedtls_sha256_finish = mbedtls_sha256_hw_finish; + ctx->mbedtls_sha256_process = mbedtls_sha256_hw_process; + } + else { + ctx->mbedtls_sha256_init = mbedtls_sha256_sw_init; + ctx->mbedtls_sha256_free = mbedtls_sha256_sw_free; + ctx->mbedtls_sha256_clone = mbedtls_sha256_sw_clone; + ctx->mbedtls_sha256_starts = mbedtls_sha256_sw_starts; + ctx->mbedtls_sha256_update = mbedtls_sha256_sw_update; + ctx->mbedtls_sha256_finish = mbedtls_sha256_sw_finish; + ctx->mbedtls_sha256_process = mbedtls_sha256_sw_process; + } + + ctx->mbedtls_sha256_init(ctx); +} + +void mbedtls_sha256_free(mbedtls_sha256_context *ctx) +{ + if (ctx == NULL) { + return; + } + + ctx->mbedtls_sha256_free(ctx); + + if (ctx->mbedtls_sha256_init == mbedtls_sha256_hw_init) { + crypto_sha_hw_release(); + } +} + +void mbedtls_sha256_clone(mbedtls_sha256_context *dst, + const mbedtls_sha256_context *src) +{ + *dst = *src; +} + +/* + * SHA-256 context setup + */ +void mbedtls_sha256_starts(mbedtls_sha256_context *ctx, int is224) +{ + ctx->mbedtls_sha256_starts(ctx, is224); + + return; +} + +/* + * SHA-256 process buffer + */ +void mbedtls_sha256_update(mbedtls_sha256_context *ctx, const unsigned char *input, size_t ilen) +{ + ctx->mbedtls_sha256_update(ctx, input, ilen); +} + +/* + * SHA-256 final digest + */ +void mbedtls_sha256_finish(mbedtls_sha256_context *ctx, unsigned char output[20]) +{ + ctx->mbedtls_sha256_finish(ctx, output); +} + +void mbedtls_sha256_process(mbedtls_sha256_context *ctx, const unsigned char data[64]) +{ + ctx->mbedtls_sha256_process(ctx, data); +} + +#endif /* MBEDTLS_SHA256_ALT */ +#endif /* MBEDTLS_SHA256_C */ diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha256_alt.h b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha256_alt.h new file mode 100644 index 00000000000..4274fc86f33 --- /dev/null +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha256_alt.h @@ -0,0 +1,117 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef MBEDTLS_SHA256_ALT_H +#define MBEDTLS_SHA256_ALT_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#if defined(MBEDTLS_SHA1_C) +#if defined(MBEDTLS_SHA256_ALT) + +#include "sha256.h" +#include "sha_alt_hw.h" +#include "sha256_alt_sw.h" + +#ifdef __cplusplus +extern "C" { +#endif + +struct mbedtls_sha256_context_s; + +/** + * \brief SHA-256 context structure + */ +typedef struct mbedtls_sha256_context_s +{ + union { + crypto_sha_context hw_ctx; + mbedtls_sha256_sw_context sw_ctx; + }; + + void (*mbedtls_sha256_init)(struct mbedtls_sha256_context_s *ctx); + void (*mbedtls_sha256_free)(struct mbedtls_sha256_context_s *ctx); + void (*mbedtls_sha256_clone)(struct mbedtls_sha256_context_s *dst, const struct mbedtls_sha256_context_s *src); + void (*mbedtls_sha256_starts)(struct mbedtls_sha256_context_s *ctx, int is224); + void (*mbedtls_sha256_update)(struct mbedtls_sha256_context_s *ctx, const unsigned char *input, size_t ilen); + void (*mbedtls_sha256_finish)(struct mbedtls_sha256_context_s *ctx, unsigned char output[20]); + void (*mbedtls_sha256_process)(struct mbedtls_sha256_context_s *ctx, const unsigned char data[64]); +} +mbedtls_sha256_context; + +/** + * \brief Initialize SHA-256 context + * + * \param ctx SHA-256 context to be initialized + */ +void mbedtls_sha256_init( mbedtls_sha256_context *ctx ); + +/** + * \brief Clear SHA-256 context + * + * \param ctx SHA-256 context to be cleared + */ +void mbedtls_sha256_free( mbedtls_sha256_context *ctx ); + +/** + * \brief Clone (the state of) a SHA-256 context + * + * \param dst The destination context + * \param src The context to be cloned + */ +void mbedtls_sha256_clone( mbedtls_sha256_context *dst, + const mbedtls_sha256_context *src ); + +/** + * \brief SHA-256 context setup + * + * \param ctx context to be initialized + * \param is224 0 = use SHA256, 1 = use SHA224 + */ +void mbedtls_sha256_starts( mbedtls_sha256_context *ctx, int is224 ); + +/** + * \brief SHA-256 process buffer + * + * \param ctx SHA-256 context + * \param input buffer holding the data + * \param ilen length of the input data + */ +void mbedtls_sha256_update( mbedtls_sha256_context *ctx, const unsigned char *input, + size_t ilen ); + +/** + * \brief SHA-256 final digest + * + * \param ctx SHA-256 context + * \param output SHA-224/256 checksum result + */ +void mbedtls_sha256_finish( mbedtls_sha256_context *ctx, unsigned char output[32] ); + +/* Internal use */ +void mbedtls_sha256_process( mbedtls_sha256_context *ctx, const unsigned char data[64] ); + +#ifdef __cplusplus +} +#endif + +#endif /* MBEDTLS_SHA256_ALT */ +#endif /* MBEDTLS_SHA1_C */ + +#endif /* sha256_alt.h */ diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha256_alt_sw.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha256_alt_sw.c new file mode 100644 index 00000000000..5d5a252c4af --- /dev/null +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha256_alt_sw.c @@ -0,0 +1,316 @@ +/* + * FIPS-180-2 compliant SHA-256 implementation + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +/* + * The SHA-256 Secure Hash Standard was published by NIST in 2002. + * + * http://csrc.nist.gov/publications/fips/fips180-2/fips180-2.pdf + */ + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "mbedtls/config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#if defined(MBEDTLS_SHA256_C) +#if defined(MBEDTLS_SHA256_ALT) + +#include "mbedtls/sha256.h" + +#include + +/* Implementation that should never be optimized out by the compiler */ +static void mbedtls_zeroize( void *v, size_t n ) { + volatile unsigned char *p = v; while( n-- ) *p++ = 0; +} + +/* + * 32-bit integer manipulation macros (big endian) + */ +#ifndef GET_UINT32_BE +#define GET_UINT32_BE(n,b,i) \ +do { \ + (n) = ( (uint32_t) (b)[(i) ] << 24 ) \ + | ( (uint32_t) (b)[(i) + 1] << 16 ) \ + | ( (uint32_t) (b)[(i) + 2] << 8 ) \ + | ( (uint32_t) (b)[(i) + 3] ); \ +} while( 0 ) +#endif + +#ifndef PUT_UINT32_BE +#define PUT_UINT32_BE(n,b,i) \ +do { \ + (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \ + (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \ + (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \ + (b)[(i) + 3] = (unsigned char) ( (n) ); \ +} while( 0 ) +#endif + +void mbedtls_sha256_sw_init( mbedtls_sha256_context *ctx ) +{ + memset( &ctx->sw_ctx, 0, sizeof( ctx->sw_ctx ) ); +} + +void mbedtls_sha256_sw_free( mbedtls_sha256_context *ctx ) +{ + if( ctx == NULL ) + return; + + mbedtls_zeroize( &ctx->sw_ctx, sizeof( ctx->sw_ctx ) ); +} + +void mbedtls_sha256_sw_clone( mbedtls_sha256_context *dst, + const mbedtls_sha256_context *src ) +{ + dst->sw_ctx = src->sw_ctx; +} + +/* + * SHA-256 context setup + */ +void mbedtls_sha256_sw_starts( mbedtls_sha256_context *ctx_, int is224 ) +{ + mbedtls_sha256_sw_context *ctx = &ctx_->sw_ctx; + + ctx->total[0] = 0; + ctx->total[1] = 0; + + if( is224 == 0 ) + { + /* SHA-256 */ + ctx->state[0] = 0x6A09E667; + ctx->state[1] = 0xBB67AE85; + ctx->state[2] = 0x3C6EF372; + ctx->state[3] = 0xA54FF53A; + ctx->state[4] = 0x510E527F; + ctx->state[5] = 0x9B05688C; + ctx->state[6] = 0x1F83D9AB; + ctx->state[7] = 0x5BE0CD19; + } + else + { + /* SHA-224 */ + ctx->state[0] = 0xC1059ED8; + ctx->state[1] = 0x367CD507; + ctx->state[2] = 0x3070DD17; + ctx->state[3] = 0xF70E5939; + ctx->state[4] = 0xFFC00B31; + ctx->state[5] = 0x68581511; + ctx->state[6] = 0x64F98FA7; + ctx->state[7] = 0xBEFA4FA4; + } + + ctx->is224 = is224; +} + +static const uint32_t K[] = +{ + 0x428A2F98, 0x71374491, 0xB5C0FBCF, 0xE9B5DBA5, + 0x3956C25B, 0x59F111F1, 0x923F82A4, 0xAB1C5ED5, + 0xD807AA98, 0x12835B01, 0x243185BE, 0x550C7DC3, + 0x72BE5D74, 0x80DEB1FE, 0x9BDC06A7, 0xC19BF174, + 0xE49B69C1, 0xEFBE4786, 0x0FC19DC6, 0x240CA1CC, + 0x2DE92C6F, 0x4A7484AA, 0x5CB0A9DC, 0x76F988DA, + 0x983E5152, 0xA831C66D, 0xB00327C8, 0xBF597FC7, + 0xC6E00BF3, 0xD5A79147, 0x06CA6351, 0x14292967, + 0x27B70A85, 0x2E1B2138, 0x4D2C6DFC, 0x53380D13, + 0x650A7354, 0x766A0ABB, 0x81C2C92E, 0x92722C85, + 0xA2BFE8A1, 0xA81A664B, 0xC24B8B70, 0xC76C51A3, + 0xD192E819, 0xD6990624, 0xF40E3585, 0x106AA070, + 0x19A4C116, 0x1E376C08, 0x2748774C, 0x34B0BCB5, + 0x391C0CB3, 0x4ED8AA4A, 0x5B9CCA4F, 0x682E6FF3, + 0x748F82EE, 0x78A5636F, 0x84C87814, 0x8CC70208, + 0x90BEFFFA, 0xA4506CEB, 0xBEF9A3F7, 0xC67178F2, +}; + +#define SHR(x,n) ((x & 0xFFFFFFFF) >> n) +#define ROTR(x,n) (SHR(x,n) | (x << (32 - n))) + +#define S0(x) (ROTR(x, 7) ^ ROTR(x,18) ^ SHR(x, 3)) +#define S1(x) (ROTR(x,17) ^ ROTR(x,19) ^ SHR(x,10)) + +#define S2(x) (ROTR(x, 2) ^ ROTR(x,13) ^ ROTR(x,22)) +#define S3(x) (ROTR(x, 6) ^ ROTR(x,11) ^ ROTR(x,25)) + +#define F0(x,y,z) ((x & y) | (z & (x | y))) +#define F1(x,y,z) (z ^ (x & (y ^ z))) + +#define R(t) \ +( \ + W[t] = S1(W[t - 2]) + W[t - 7] + \ + S0(W[t - 15]) + W[t - 16] \ +) + +#define P(a,b,c,d,e,f,g,h,x,K) \ +{ \ + temp1 = h + S3(e) + F1(e,f,g) + K + x; \ + temp2 = S2(a) + F0(a,b,c); \ + d += temp1; h = temp1 + temp2; \ +} + +void mbedtls_sha256_sw_process( mbedtls_sha256_context *ctx_, const unsigned char data[64] ) +{ + mbedtls_sha256_sw_context *ctx = &ctx_->sw_ctx; + + uint32_t temp1, temp2, W[64]; + uint32_t A[8]; + unsigned int i; + + for( i = 0; i < 8; i++ ) + A[i] = ctx->state[i]; + +#if defined(MBEDTLS_SHA256_SMALLER) + for( i = 0; i < 64; i++ ) + { + if( i < 16 ) + GET_UINT32_BE( W[i], data, 4 * i ); + else + R( i ); + + P( A[0], A[1], A[2], A[3], A[4], A[5], A[6], A[7], W[i], K[i] ); + + temp1 = A[7]; A[7] = A[6]; A[6] = A[5]; A[5] = A[4]; A[4] = A[3]; + A[3] = A[2]; A[2] = A[1]; A[1] = A[0]; A[0] = temp1; + } +#else /* MBEDTLS_SHA256_SMALLER */ + for( i = 0; i < 16; i++ ) + GET_UINT32_BE( W[i], data, 4 * i ); + + for( i = 0; i < 16; i += 8 ) + { + P( A[0], A[1], A[2], A[3], A[4], A[5], A[6], A[7], W[i+0], K[i+0] ); + P( A[7], A[0], A[1], A[2], A[3], A[4], A[5], A[6], W[i+1], K[i+1] ); + P( A[6], A[7], A[0], A[1], A[2], A[3], A[4], A[5], W[i+2], K[i+2] ); + P( A[5], A[6], A[7], A[0], A[1], A[2], A[3], A[4], W[i+3], K[i+3] ); + P( A[4], A[5], A[6], A[7], A[0], A[1], A[2], A[3], W[i+4], K[i+4] ); + P( A[3], A[4], A[5], A[6], A[7], A[0], A[1], A[2], W[i+5], K[i+5] ); + P( A[2], A[3], A[4], A[5], A[6], A[7], A[0], A[1], W[i+6], K[i+6] ); + P( A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[0], W[i+7], K[i+7] ); + } + + for( i = 16; i < 64; i += 8 ) + { + P( A[0], A[1], A[2], A[3], A[4], A[5], A[6], A[7], R(i+0), K[i+0] ); + P( A[7], A[0], A[1], A[2], A[3], A[4], A[5], A[6], R(i+1), K[i+1] ); + P( A[6], A[7], A[0], A[1], A[2], A[3], A[4], A[5], R(i+2), K[i+2] ); + P( A[5], A[6], A[7], A[0], A[1], A[2], A[3], A[4], R(i+3), K[i+3] ); + P( A[4], A[5], A[6], A[7], A[0], A[1], A[2], A[3], R(i+4), K[i+4] ); + P( A[3], A[4], A[5], A[6], A[7], A[0], A[1], A[2], R(i+5), K[i+5] ); + P( A[2], A[3], A[4], A[5], A[6], A[7], A[0], A[1], R(i+6), K[i+6] ); + P( A[1], A[2], A[3], A[4], A[5], A[6], A[7], A[0], R(i+7), K[i+7] ); + } +#endif /* MBEDTLS_SHA256_SMALLER */ + + for( i = 0; i < 8; i++ ) + ctx->state[i] += A[i]; +} + +/* + * SHA-256 process buffer + */ +void mbedtls_sha256_sw_update( mbedtls_sha256_context *ctx_, const unsigned char *input, + size_t ilen ) +{ + mbedtls_sha256_sw_context *ctx = &ctx_->sw_ctx; + + size_t fill; + uint32_t left; + + if( ilen == 0 ) + return; + + left = ctx->total[0] & 0x3F; + fill = 64 - left; + + ctx->total[0] += (uint32_t) ilen; + ctx->total[0] &= 0xFFFFFFFF; + + if( ctx->total[0] < (uint32_t) ilen ) + ctx->total[1]++; + + if( left && ilen >= fill ) + { + memcpy( (void *) (ctx->buffer + left), input, fill ); + mbedtls_sha256_sw_process( ctx_, ctx->buffer ); + input += fill; + ilen -= fill; + left = 0; + } + + while( ilen >= 64 ) + { + mbedtls_sha256_sw_process( ctx_, input ); + input += 64; + ilen -= 64; + } + + if( ilen > 0 ) + memcpy( (void *) (ctx->buffer + left), input, ilen ); +} + +static const unsigned char sha256_padding[64] = +{ + 0x80, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, + 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 +}; + +/* + * SHA-256 final digest + */ +void mbedtls_sha256_sw_finish( mbedtls_sha256_context *ctx_, unsigned char output[32] ) +{ + mbedtls_sha256_sw_context *ctx = &ctx_->sw_ctx; + + uint32_t last, padn; + uint32_t high, low; + unsigned char msglen[8]; + + high = ( ctx->total[0] >> 29 ) + | ( ctx->total[1] << 3 ); + low = ( ctx->total[0] << 3 ); + + PUT_UINT32_BE( high, msglen, 0 ); + PUT_UINT32_BE( low, msglen, 4 ); + + last = ctx->total[0] & 0x3F; + padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last ); + + mbedtls_sha256_sw_update( ctx_, sha256_padding, padn ); + mbedtls_sha256_sw_update( ctx_, msglen, 8 ); + + PUT_UINT32_BE( ctx->state[0], output, 0 ); + PUT_UINT32_BE( ctx->state[1], output, 4 ); + PUT_UINT32_BE( ctx->state[2], output, 8 ); + PUT_UINT32_BE( ctx->state[3], output, 12 ); + PUT_UINT32_BE( ctx->state[4], output, 16 ); + PUT_UINT32_BE( ctx->state[5], output, 20 ); + PUT_UINT32_BE( ctx->state[6], output, 24 ); + + if( ctx->is224 == 0 ) + PUT_UINT32_BE( ctx->state[7], output, 28 ); +} + +#endif /* MBEDTLS_SHA1_ALT */ + +#endif /* MBEDTLS_SHA256_C */ diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha256_alt_sw.h b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha256_alt_sw.h new file mode 100644 index 00000000000..938b5920fcc --- /dev/null +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha256_alt_sw.h @@ -0,0 +1,115 @@ +/** + * \file sha256.h + * + * \brief SHA-224 and SHA-256 cryptographic hash function + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_SHA256_ALT_SW_H +#define MBEDTLS_SHA256_ALT_SW_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#if defined(MBEDTLS_SHA256_C) +#if defined(MBEDTLS_SHA256_ALT) + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +struct mbedtls_sha256_context_s; + +/** + * \brief SHA-256 context structure + */ +typedef struct +{ + uint32_t total[2]; /*!< number of bytes processed */ + uint32_t state[8]; /*!< intermediate digest state */ + unsigned char buffer[64]; /*!< data block being processed */ + int is224; /*!< 0 => SHA-256, else SHA-224 */ +} +mbedtls_sha256_sw_context; + +/** + * \brief Initialize SHA-256 context + * + * \param ctx SHA-256 context to be initialized + */ +void mbedtls_sha256_sw_init( struct mbedtls_sha256_context_s *ctx ); + +/** + * \brief Clear SHA-256 context + * + * \param ctx SHA-256 context to be cleared + */ +void mbedtls_sha256_sw_free( struct mbedtls_sha256_context_s *ctx ); + +/** + * \brief Clone (the state of) a SHA-256 context + * + * \param dst The destination context + * \param src The context to be cloned + */ +void mbedtls_sha256_sw_clone( struct mbedtls_sha256_context_s *dst, + const struct mbedtls_sha256_context_s *src ); + +/** + * \brief SHA-256 context setup + * + * \param ctx context to be initialized + * \param is224 0 = use SHA256, 1 = use SHA224 + */ +void mbedtls_sha256_sw_starts( struct mbedtls_sha256_context_s *ctx, int is224 ); + +/** + * \brief SHA-256 process buffer + * + * \param ctx SHA-256 context + * \param input buffer holding the data + * \param ilen length of the input data + */ +void mbedtls_sha256_sw_update( struct mbedtls_sha256_context_s *ctx, const unsigned char *input, + size_t ilen ); + +/** + * \brief SHA-256 final digest + * + * \param ctx SHA-256 context + * \param output SHA-224/256 checksum result + */ +void mbedtls_sha256_sw_finish( struct mbedtls_sha256_context_s *ctx, unsigned char output[32] ); + +/* Internal use */ +void mbedtls_sha256_sw_process( struct mbedtls_sha256_context_s *ctx, const unsigned char data[64] ); + +#ifdef __cplusplus +} +#endif + +#endif /* MBEDTLS_SHA256_ALT */ +#endif /* MBEDTLS_SHA256_C */ + +#endif /* sha256_alt_sw.h */ diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha_alt_hw.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha_alt_hw.c new file mode 100644 index 00000000000..99151713bef --- /dev/null +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha_alt_hw.c @@ -0,0 +1,236 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "mbedtls/config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#if defined(MBEDTLS_SHA1_C) || defined(MBEDTLS_SHA256_C) || defined(MBEDTLS_SHA512_C) + +#if defined(MBEDTLS_SHA1_ALT) || defined(MBEDTLS_SHA256_ALT) || defined(MBEDTLS_SHA512_ALT) + +#if defined(MBEDTLS_SHA1_ALT) +#include "sha1_alt.h" +#endif /* MBEDTLS_SHA1_ALT */ + +#if defined(MBEDTLS_SHA256_ALT) +#include "sha256_alt.h" +#endif /* MBEDTLS_SHA256_ALT */ + +#if defined(MBEDTLS_SHA512_ALT) +#include "sha512_alt.h" +#endif /* MBEDTLS_SHA512_ALT */ + +#include "nu_bitutil.h" +#include "mbed_assert.h" +#include "crypto.h" + +#include + +static void crypto_sha_update(crypto_sha_context *ctx, const unsigned char *input, size_t ilen); +static void crypto_sha_getinternstate(unsigned char output[], size_t olen); +static void crypto_sha_lastword(crypto_sha_context *ctx, int islast); + +#endif /* MBEDTLS_SHA1_ALT || MBEDTLS_SHA256_ALT || MBEDTLS_SHA512_ALT */ + +#if defined(MBEDTLS_SHA1_ALT) + +void mbedtls_sha1_hw_init(mbedtls_sha1_context *ctx) +{ + crypto_init(); + memset(&ctx->hw_ctx, 0, sizeof(ctx->hw_ctx)); +} + +void mbedtls_sha1_hw_free(mbedtls_sha1_context *ctx) +{ + if (ctx == NULL) { + return; + } + + crypto_zeroize(&ctx->hw_ctx, sizeof(ctx->hw_ctx)); +} + +void mbedtls_sha1_hw_clone(mbedtls_sha1_context *dst, + const mbedtls_sha1_context *src) +{ + dst->hw_ctx = src->hw_ctx; +} + +void mbedtls_sha1_hw_starts(mbedtls_sha1_context *ctx) +{ + ctx->hw_ctx.total = 0; + ctx->hw_ctx.lastword_size = 0; + ctx->hw_ctx.blocksize = 64; + ctx->hw_ctx.blocksize_mask = 0x3F; + + SHA_Open(SHA_MODE_SHA1, SHA_NO_SWAP); + + return; +} + +void mbedtls_sha1_hw_update(mbedtls_sha1_context *ctx, const unsigned char *input, size_t ilen) +{ + crypto_sha_update(&ctx->hw_ctx, input, ilen); +} + +void mbedtls_sha1_hw_finish(mbedtls_sha1_context *ctx, unsigned char output[20]) +{ + crypto_sha_lastword(&ctx->hw_ctx, 1); + crypto_sha_getinternstate(output, 20); +} + +void mbedtls_sha1_hw_process(mbedtls_sha1_context *ctx, const unsigned char data[64]) +{ + mbedtls_sha1_hw_update(ctx, data, 64); +} + +#endif /* MBEDTLS_SHA1_ALT */ + +#if defined(MBEDTLS_SHA256_ALT) + +void mbedtls_sha256_hw_init(mbedtls_sha256_context *ctx) +{ + crypto_init(); + memset(&ctx->hw_ctx, 0, sizeof(ctx->hw_ctx)); +} + +void mbedtls_sha256_hw_free(mbedtls_sha256_context *ctx) +{ + if (ctx == NULL) { + return; + } + + crypto_zeroize(&ctx->hw_ctx, sizeof(ctx->hw_ctx)); +} + +void mbedtls_sha256_hw_clone(mbedtls_sha256_context *dst, + const mbedtls_sha256_context *src) +{ + dst->hw_ctx = src->hw_ctx; +} + +void mbedtls_sha256_hw_starts( mbedtls_sha256_context *ctx, int is224) +{ + ctx->hw_ctx.total = 0; + ctx->hw_ctx.lastword_size = 0; + ctx->hw_ctx.blocksize = 64; + ctx->hw_ctx.blocksize_mask = 0x3F; + ctx->hw_ctx.is224 = is224; + + SHA_Open(is224 ? SHA_MODE_SHA224 : SHA_MODE_SHA256, SHA_NO_SWAP); + + return; +} + +void mbedtls_sha256_hw_update(mbedtls_sha256_context *ctx, const unsigned char *input, size_t ilen) +{ + crypto_sha_update(&ctx->hw_ctx, input, ilen); +} + +void mbedtls_sha256_hw_finish(mbedtls_sha256_context *ctx, unsigned char output[32]) +{ + crypto_sha_lastword(&ctx->hw_ctx, 1); + crypto_sha_getinternstate(output, ctx->hw_ctx.is224 ? 28 : 32); +} + +void mbedtls_sha256_hw_process(mbedtls_sha256_context *ctx, const unsigned char data[64]) +{ + mbedtls_sha256_hw_update(ctx, data, 64); +} + +#endif /* MBEDTLS_SHA256_ALT */ + +#if defined(MBEDTLS_SHA1_ALT) || defined(MBEDTLS_SHA256_ALT) || defined(MBEDTLS_SHA512_ALT) + +void crypto_sha_update(crypto_sha_context *ctx, const unsigned char *input, size_t ilen) +{ + if (ilen == 0) { + return; + } + + crypto_sha_lastword(ctx, 0); + + ctx->total += (uint32_t) ilen; + + const unsigned char *in_pos = input; + uint32_t rmn = ilen; + uint32_t sha_ctl_start = (CRPT->SHA_CTL & ~(CRPT_SHA_CTL_DMALAST_Msk | CRPT_SHA_CTL_DMAEN_Msk)) | CRPT_SHA_CTL_START_Msk; + + while (rmn > 4) { + CRPT->SHA_CTL = sha_ctl_start; + + uint32_t data = nu_get32_be(in_pos); + while (! (CRPT->SHA_STS & CRPT_SHA_STS_DATINREQ_Msk)); + CRPT->SHA_DATIN = data; + + in_pos += 4; + rmn -= 4; + } + + MBED_ASSERT(rmn > 0 && rmn <= 4); + unsigned char lastword_buf[4]; + memcpy(lastword_buf, in_pos, rmn); + memset(lastword_buf + rmn, 0x00, 4 - rmn); + ctx->lastword = nu_get32_be(lastword_buf); + ctx->lastword_size = rmn; +} + +void crypto_sha_getinternstate(unsigned char output[], size_t olen) +{ + uint32_t *in_pos = (uint32_t *) &CRPT->SHA_DGST0; + unsigned char *out_pos = output; + uint32_t rmn = olen; + + while (rmn) { + uint32_t val = *in_pos ++; + nu_set32_be(out_pos, val); + out_pos += 4; + rmn -= 4; + } +} + +void crypto_sha_lastword(crypto_sha_context *ctx, int islast) +{ + uint32_t sha_ctl_start = (CRPT->SHA_CTL & ~(CRPT_SHA_CTL_DMALAST_Msk | CRPT_SHA_CTL_DMAEN_Msk)) | CRPT_SHA_CTL_START_Msk; + + if (ctx->lastword_size) { + if (islast) { + uint32_t lastblock_size = ctx->total & ctx->blocksize_mask; + if (lastblock_size == 0) { + lastblock_size = ctx->blocksize; + } + CRPT->SHA_DMACNT = lastblock_size; + CRPT->SHA_CTL = sha_ctl_start | CRPT_SHA_CTL_DMALAST_Msk; + } + else { + CRPT->SHA_CTL = sha_ctl_start; + } + while (! (CRPT->SHA_STS & CRPT_SHA_STS_DATINREQ_Msk)); + CRPT->SHA_DATIN = ctx->lastword; + + if (islast) { + while (CRPT->SHA_STS & CRPT_SHA_STS_BUSY_Msk); + } + + ctx->lastword_size = 0; + } +} + +#endif /* MBEDTLS_SHA1_ALT || MBEDTLS_SHA256_ALT || MBEDTLS_SHA512_ALT */ + +#endif /* MBEDTLS_SHA1_C || MBEDTLS_SHA256_C || MBEDTLS_SHA512_C */ diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha_alt_hw.h b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha_alt_hw.h new file mode 100644 index 00000000000..070433a6312 --- /dev/null +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha_alt_hw.h @@ -0,0 +1,86 @@ +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef MBEDTLS_SHA_ALT_HW_H +#define MBEDTLS_SHA_ALT_HW_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#if defined(MBEDTLS_SHA1_C) || defined(MBEDTLS_SHA256_C) || defined(MBEDTLS_SHA512_C) + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief SHA context structure + */ +typedef struct +{ + uint32_t total; /*!< number of bytes processed */ + uint32_t lastword; /*!< last word unprocessed */ + uint16_t lastword_size; /*!< number of bytes of last word unprocessed */ + uint16_t blocksize; /*!< block size */ + uint32_t blocksize_mask; /*!< block size mask */ + + int is224; /*!< 0 => SHA-256, else SHA-224 */ +} +crypto_sha_context; + +#if defined(MBEDTLS_SHA1_ALT) + +struct mbedtls_sha1_context_s; + +void mbedtls_sha1_hw_init( struct mbedtls_sha1_context_s *ctx ); +void mbedtls_sha1_hw_free( struct mbedtls_sha1_context_s *ctx ); +void mbedtls_sha1_hw_clone( struct mbedtls_sha1_context_s *dst, + const struct mbedtls_sha1_context_s *src ); +void mbedtls_sha1_hw_starts( struct mbedtls_sha1_context_s *ctx ); +void mbedtls_sha1_hw_update( struct mbedtls_sha1_context_s *ctx, const unsigned char *input, size_t ilen ); +void mbedtls_sha1_hw_finish( struct mbedtls_sha1_context_s *ctx, unsigned char output[20] ); +void mbedtls_sha1_hw_process( struct mbedtls_sha1_context_s *ctx, const unsigned char data[64] ); + +#endif /* MBEDTLS_SHA1_ALT */ + +#if defined(MBEDTLS_SHA256_ALT) + +struct mbedtls_sha256_context_s; + +void mbedtls_sha256_hw_init( struct mbedtls_sha256_context_s *ctx ); +void mbedtls_sha256_hw_free( struct mbedtls_sha256_context_s *ctx ); +void mbedtls_sha256_hw_clone( struct mbedtls_sha256_context_s *dst, + const struct mbedtls_sha256_context_s *src ); +void mbedtls_sha256_hw_starts( struct mbedtls_sha256_context_s *ctx, int is224 ); +void mbedtls_sha256_hw_update( struct mbedtls_sha256_context_s *ctx, const unsigned char *input, + size_t ilen ); +void mbedtls_sha256_hw_finish( struct mbedtls_sha256_context_s *ctx, unsigned char output[32] ); +void mbedtls_sha256_hw_process( struct mbedtls_sha256_context_s *ctx, const unsigned char data[64] ); + +#endif /* MBEDTLS_SHA256_ALT */ + +#ifdef __cplusplus +} +#endif + +#endif /* MBEDTLS_SHA1_C || MBEDTLS_SHA256_C || MBEDTLS_SHA512_C*/ + +#endif /* sha_alt.h */ From 9915ad38af5323517003d8a114f7ae4a62b39fc2 Mon Sep 17 00:00:00 2001 From: ccli8 Date: Thu, 25 Aug 2016 10:39:11 +0800 Subject: [PATCH 27/89] Fix aes compile error with gcc --- .../hal/TARGET_NUVOTON/TARGET_NUC472/aes_alt.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-) diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/aes_alt.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/aes_alt.c index f6920f5ba09..375657443d5 100644 --- a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/aes_alt.c +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/aes_alt.c @@ -52,6 +52,7 @@ #endif /* MBEDTLS_SELF_TEST */ #include "NUC472_442.h" +#include "toolchain.h" //static int aes_init_done = 0; @@ -72,15 +73,8 @@ static uint32_t au32MyAESIV[4] = { extern volatile int g_AES_done; -#ifdef __ICCARM__ -#pragma data_alignment=4 -uint8_t au8OutputData[16]; -#pragma data_alignment=4 -uint8_t au8InputData[16]; -#else -__align(4) uint8_t au8OutputData[16]; -__align(4) uint8_t au8InputData[16]; -#endif +uint8_t au8OutputData[16] MBED_ALIGN(4); +uint8_t au8InputData[16] MBED_ALIGN(4); static void dumpHex(uint8_t au8Data[], int len) { From 0268ab24392392def06ebc26f584bf1af193c2e0 Mon Sep 17 00:00:00 2001 From: ccli8 Date: Thu, 25 Aug 2016 13:52:24 +0800 Subject: [PATCH 28/89] Organize NUC472 crypto files --- .../TARGET_NUC472/{ => crypto/aes}/aes_alt.c | 0 .../TARGET_NUC472/{ => crypto/aes}/aes_alt.h | 0 .../{crypto.c => crypto/crypto-misc.c} | 15 ++++++++------- .../{crypto.h => crypto/crypto-misc.h} | 10 ++++------ .../TARGET_NUC472/{ => crypto/des}/des_alt.c | 2 +- .../TARGET_NUC472/{ => crypto/des}/des_alt.h | 0 .../TARGET_NUC472/{ => crypto/sha}/sha1_alt.c | 6 +++--- .../TARGET_NUC472/{ => crypto/sha}/sha1_alt.h | 0 .../TARGET_NUC472/{ => crypto/sha}/sha1_alt_sw.c | 0 .../TARGET_NUC472/{ => crypto/sha}/sha1_alt_sw.h | 0 .../TARGET_NUC472/{ => crypto/sha}/sha256_alt.c | 6 +++--- .../TARGET_NUC472/{ => crypto/sha}/sha256_alt.h | 0 .../{ => crypto/sha}/sha256_alt_sw.c | 0 .../{ => crypto/sha}/sha256_alt_sw.h | 0 .../TARGET_NUC472/{ => crypto/sha}/sha_alt_hw.c | 2 +- .../TARGET_NUC472/{ => crypto/sha}/sha_alt_hw.h | 0 16 files changed, 20 insertions(+), 21 deletions(-) rename hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/{ => crypto/aes}/aes_alt.c (100%) rename hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/{ => crypto/aes}/aes_alt.h (100%) rename hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/{crypto.c => crypto/crypto-misc.c} (83%) rename hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/{crypto.h => crypto/crypto-misc.h} (85%) rename hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/{ => crypto/des}/des_alt.c (99%) rename hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/{ => crypto/des}/des_alt.h (100%) rename hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/{ => crypto/sha}/sha1_alt.c (96%) rename hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/{ => crypto/sha}/sha1_alt.h (100%) rename hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/{ => crypto/sha}/sha1_alt_sw.c (100%) rename hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/{ => crypto/sha}/sha1_alt_sw.h (100%) rename hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/{ => crypto/sha}/sha256_alt.c (97%) rename hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/{ => crypto/sha}/sha256_alt.h (100%) rename hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/{ => crypto/sha}/sha256_alt_sw.c (100%) rename hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/{ => crypto/sha}/sha256_alt_sw.h (100%) rename hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/{ => crypto/sha}/sha_alt_hw.c (99%) rename hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/{ => crypto/sha}/sha_alt_hw.h (100%) diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/aes_alt.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/aes_alt.c rename to hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/aes_alt.h b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.h similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/aes_alt.h rename to hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.h diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/crypto-misc.c similarity index 83% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto.c rename to hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/crypto-misc.c index 20f80783a55..7f6646f40b1 100644 --- a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto.c +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/crypto-misc.c @@ -19,9 +19,10 @@ #include "mbed_assert.h" #include "nu_modutil.h" #include "nu_bitutil.h" +#include "crypto-misc.h" static int crypto_inited = 0; -static int crypto_sha_hw_avail = 1; +static int crypto_sha_avail = 1; void crypto_init(void) { @@ -42,10 +43,10 @@ void crypto_zeroize(void *v, size_t n) } } -int crypto_sha_hw_acquire(void) +int crypto_sha_acquire(void) { - if (crypto_sha_hw_avail) { - crypto_sha_hw_avail = 0; + if (crypto_sha_avail) { + crypto_sha_avail = 0; return 1; } else { @@ -54,9 +55,9 @@ int crypto_sha_hw_acquire(void) } -void crypto_sha_hw_release(void) +void crypto_sha_release(void) { - if (! crypto_sha_hw_avail) { - crypto_sha_hw_avail = 1; + if (! crypto_sha_avail) { + crypto_sha_avail = 1; } } diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto.h b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/crypto-misc.h similarity index 85% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto.h rename to hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/crypto-misc.h index 2585a9936b1..8d554497120 100644 --- a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto.h +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/crypto-misc.h @@ -14,10 +14,8 @@ * limitations under the License. */ -#ifndef MBED_CRYPTO_H -#define MBED_CRYPTO_H - -#include "cmsis.h" +#ifndef MBED_CRYPTO_MISC_H +#define MBED_CRYPTO_MISC_H #ifdef __cplusplus extern "C" { @@ -25,8 +23,8 @@ extern "C" { void crypto_init(void); void crypto_zeroize(void *v, size_t n); -int crypto_sha_hw_acquire(void); -void crypto_sha_hw_release(void); +int crypto_sha_acquire(void); +void crypto_sha_release(void); #ifdef __cplusplus } diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/des_alt.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt.c similarity index 99% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/des_alt.c rename to hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt.c index 867e27b5f9a..fb75266a36f 100644 --- a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/des_alt.c +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt.c @@ -26,7 +26,7 @@ #include #include "mbedtls/des.h" #include "des_alt.h" -#include "crypto.h" +#include "crypto-misc.h" #include "nu_bitutil.h" #include "toolchain.h" diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/des_alt.h b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt.h similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/des_alt.h rename to hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt.h diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha1_alt.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt.c similarity index 96% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha1_alt.c rename to hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt.c index 374228406b4..5f047164480 100644 --- a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha1_alt.c +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt.c @@ -24,11 +24,11 @@ #if defined(MBEDTLS_SHA1_ALT) #include "sha1_alt.h" -#include "crypto.h" +#include "crypto-misc.h" void mbedtls_sha1_init(mbedtls_sha1_context *ctx) { - if (crypto_sha_hw_acquire()) { + if (crypto_sha_acquire()) { ctx->mbedtls_sha1_init = mbedtls_sha1_hw_init; ctx->mbedtls_sha1_free = mbedtls_sha1_hw_free; ctx->mbedtls_sha1_clone = mbedtls_sha1_hw_clone; @@ -59,7 +59,7 @@ void mbedtls_sha1_free(mbedtls_sha1_context *ctx) ctx->mbedtls_sha1_free(ctx); if (ctx->mbedtls_sha1_init == mbedtls_sha1_hw_init) { - crypto_sha_hw_release(); + crypto_sha_release(); } } diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha1_alt.h b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt.h similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha1_alt.h rename to hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt.h diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha1_alt_sw.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt_sw.c similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha1_alt_sw.c rename to hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt_sw.c diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha1_alt_sw.h b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt_sw.h similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha1_alt_sw.h rename to hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt_sw.h diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha256_alt.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt.c similarity index 97% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha256_alt.c rename to hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt.c index 80e19f74063..96859ef47bd 100644 --- a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha256_alt.c +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt.c @@ -24,11 +24,11 @@ #if defined(MBEDTLS_SHA256_ALT) #include "sha256_alt.h" -#include "crypto.h" +#include "crypto-misc.h" void mbedtls_sha256_init(mbedtls_sha256_context *ctx) { - if (crypto_sha_hw_acquire()) { + if (crypto_sha_acquire()) { ctx->mbedtls_sha256_init = mbedtls_sha256_hw_init; ctx->mbedtls_sha256_free = mbedtls_sha256_hw_free; ctx->mbedtls_sha256_clone = mbedtls_sha256_hw_clone; @@ -59,7 +59,7 @@ void mbedtls_sha256_free(mbedtls_sha256_context *ctx) ctx->mbedtls_sha256_free(ctx); if (ctx->mbedtls_sha256_init == mbedtls_sha256_hw_init) { - crypto_sha_hw_release(); + crypto_sha_release(); } } diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha256_alt.h b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt.h similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha256_alt.h rename to hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt.h diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha256_alt_sw.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt_sw.c similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha256_alt_sw.c rename to hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt_sw.c diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha256_alt_sw.h b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt_sw.h similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha256_alt_sw.h rename to hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt_sw.h diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha_alt_hw.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.c similarity index 99% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha_alt_hw.c rename to hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.c index 99151713bef..0c71ae87879 100644 --- a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha_alt_hw.c +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.c @@ -38,7 +38,7 @@ #include "nu_bitutil.h" #include "mbed_assert.h" -#include "crypto.h" +#include "crypto-misc.h" #include diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha_alt_hw.h b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.h similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/sha_alt_hw.h rename to hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.h From 1a67f8401697a3d049049c41a5cfd42e3dfe1381 Mon Sep 17 00:00:00 2001 From: ccli8 Date: Thu, 25 Aug 2016 16:40:24 +0800 Subject: [PATCH 29/89] Integrate AES S/W algorithm for verifying NUC472 AES accelerator --- .../TARGET_NUC472/crypto/des/des_alt.h | 1 + .../TARGET_NUC472/crypto/des/des_alt_sw.c | 797 ++++++++++++++++++ .../TARGET_NUC472/crypto/des/des_alt_sw.h | 283 +++++++ 3 files changed, 1081 insertions(+) create mode 100644 hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt_sw.c create mode 100644 hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt_sw.h diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt.h b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt.h index 67a1420ece7..4676ab93e12 100644 --- a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt.h +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt.h @@ -28,6 +28,7 @@ #include #include #include "des.h" +#include "des_alt_sw.h" #ifdef __cplusplus extern "C" { diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt_sw.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt_sw.c new file mode 100644 index 00000000000..1e51151c862 --- /dev/null +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt_sw.c @@ -0,0 +1,797 @@ +/* + * FIPS-46-3 compliant Triple-DES implementation + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +/* + * DES, on which TDES is based, was originally designed by Horst Feistel + * at IBM in 1974, and was adopted as a standard by NIST (formerly NBS). + * + * http://csrc.nist.gov/publications/fips/fips46-3/fips46-3.pdf + */ + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "mbedtls/config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#if defined(MBEDTLS_DES_C) +#if defined(MBEDTLS_DES_ALT) + +#include "mbedtls/des.h" + +#include + +/* Implementation that should never be optimized out by the compiler */ +static void mbedtls_zeroize( void *v, size_t n ) { + volatile unsigned char *p = (unsigned char*)v; while( n-- ) *p++ = 0; +} + +/* + * 32-bit integer manipulation macros (big endian) + */ +#ifndef GET_UINT32_BE +#define GET_UINT32_BE(n,b,i) \ +{ \ + (n) = ( (uint32_t) (b)[(i) ] << 24 ) \ + | ( (uint32_t) (b)[(i) + 1] << 16 ) \ + | ( (uint32_t) (b)[(i) + 2] << 8 ) \ + | ( (uint32_t) (b)[(i) + 3] ); \ +} +#endif + +#ifndef PUT_UINT32_BE +#define PUT_UINT32_BE(n,b,i) \ +{ \ + (b)[(i) ] = (unsigned char) ( (n) >> 24 ); \ + (b)[(i) + 1] = (unsigned char) ( (n) >> 16 ); \ + (b)[(i) + 2] = (unsigned char) ( (n) >> 8 ); \ + (b)[(i) + 3] = (unsigned char) ( (n) ); \ +} +#endif + +/* + * Expanded DES S-boxes + */ +static const uint32_t SB1[64] = +{ + 0x01010400, 0x00000000, 0x00010000, 0x01010404, + 0x01010004, 0x00010404, 0x00000004, 0x00010000, + 0x00000400, 0x01010400, 0x01010404, 0x00000400, + 0x01000404, 0x01010004, 0x01000000, 0x00000004, + 0x00000404, 0x01000400, 0x01000400, 0x00010400, + 0x00010400, 0x01010000, 0x01010000, 0x01000404, + 0x00010004, 0x01000004, 0x01000004, 0x00010004, + 0x00000000, 0x00000404, 0x00010404, 0x01000000, + 0x00010000, 0x01010404, 0x00000004, 0x01010000, + 0x01010400, 0x01000000, 0x01000000, 0x00000400, + 0x01010004, 0x00010000, 0x00010400, 0x01000004, + 0x00000400, 0x00000004, 0x01000404, 0x00010404, + 0x01010404, 0x00010004, 0x01010000, 0x01000404, + 0x01000004, 0x00000404, 0x00010404, 0x01010400, + 0x00000404, 0x01000400, 0x01000400, 0x00000000, + 0x00010004, 0x00010400, 0x00000000, 0x01010004 +}; + +static const uint32_t SB2[64] = +{ + 0x80108020, 0x80008000, 0x00008000, 0x00108020, + 0x00100000, 0x00000020, 0x80100020, 0x80008020, + 0x80000020, 0x80108020, 0x80108000, 0x80000000, + 0x80008000, 0x00100000, 0x00000020, 0x80100020, + 0x00108000, 0x00100020, 0x80008020, 0x00000000, + 0x80000000, 0x00008000, 0x00108020, 0x80100000, + 0x00100020, 0x80000020, 0x00000000, 0x00108000, + 0x00008020, 0x80108000, 0x80100000, 0x00008020, + 0x00000000, 0x00108020, 0x80100020, 0x00100000, + 0x80008020, 0x80100000, 0x80108000, 0x00008000, + 0x80100000, 0x80008000, 0x00000020, 0x80108020, + 0x00108020, 0x00000020, 0x00008000, 0x80000000, + 0x00008020, 0x80108000, 0x00100000, 0x80000020, + 0x00100020, 0x80008020, 0x80000020, 0x00100020, + 0x00108000, 0x00000000, 0x80008000, 0x00008020, + 0x80000000, 0x80100020, 0x80108020, 0x00108000 +}; + +static const uint32_t SB3[64] = +{ + 0x00000208, 0x08020200, 0x00000000, 0x08020008, + 0x08000200, 0x00000000, 0x00020208, 0x08000200, + 0x00020008, 0x08000008, 0x08000008, 0x00020000, + 0x08020208, 0x00020008, 0x08020000, 0x00000208, + 0x08000000, 0x00000008, 0x08020200, 0x00000200, + 0x00020200, 0x08020000, 0x08020008, 0x00020208, + 0x08000208, 0x00020200, 0x00020000, 0x08000208, + 0x00000008, 0x08020208, 0x00000200, 0x08000000, + 0x08020200, 0x08000000, 0x00020008, 0x00000208, + 0x00020000, 0x08020200, 0x08000200, 0x00000000, + 0x00000200, 0x00020008, 0x08020208, 0x08000200, + 0x08000008, 0x00000200, 0x00000000, 0x08020008, + 0x08000208, 0x00020000, 0x08000000, 0x08020208, + 0x00000008, 0x00020208, 0x00020200, 0x08000008, + 0x08020000, 0x08000208, 0x00000208, 0x08020000, + 0x00020208, 0x00000008, 0x08020008, 0x00020200 +}; + +static const uint32_t SB4[64] = +{ + 0x00802001, 0x00002081, 0x00002081, 0x00000080, + 0x00802080, 0x00800081, 0x00800001, 0x00002001, + 0x00000000, 0x00802000, 0x00802000, 0x00802081, + 0x00000081, 0x00000000, 0x00800080, 0x00800001, + 0x00000001, 0x00002000, 0x00800000, 0x00802001, + 0x00000080, 0x00800000, 0x00002001, 0x00002080, + 0x00800081, 0x00000001, 0x00002080, 0x00800080, + 0x00002000, 0x00802080, 0x00802081, 0x00000081, + 0x00800080, 0x00800001, 0x00802000, 0x00802081, + 0x00000081, 0x00000000, 0x00000000, 0x00802000, + 0x00002080, 0x00800080, 0x00800081, 0x00000001, + 0x00802001, 0x00002081, 0x00002081, 0x00000080, + 0x00802081, 0x00000081, 0x00000001, 0x00002000, + 0x00800001, 0x00002001, 0x00802080, 0x00800081, + 0x00002001, 0x00002080, 0x00800000, 0x00802001, + 0x00000080, 0x00800000, 0x00002000, 0x00802080 +}; + +static const uint32_t SB5[64] = +{ + 0x00000100, 0x02080100, 0x02080000, 0x42000100, + 0x00080000, 0x00000100, 0x40000000, 0x02080000, + 0x40080100, 0x00080000, 0x02000100, 0x40080100, + 0x42000100, 0x42080000, 0x00080100, 0x40000000, + 0x02000000, 0x40080000, 0x40080000, 0x00000000, + 0x40000100, 0x42080100, 0x42080100, 0x02000100, + 0x42080000, 0x40000100, 0x00000000, 0x42000000, + 0x02080100, 0x02000000, 0x42000000, 0x00080100, + 0x00080000, 0x42000100, 0x00000100, 0x02000000, + 0x40000000, 0x02080000, 0x42000100, 0x40080100, + 0x02000100, 0x40000000, 0x42080000, 0x02080100, + 0x40080100, 0x00000100, 0x02000000, 0x42080000, + 0x42080100, 0x00080100, 0x42000000, 0x42080100, + 0x02080000, 0x00000000, 0x40080000, 0x42000000, + 0x00080100, 0x02000100, 0x40000100, 0x00080000, + 0x00000000, 0x40080000, 0x02080100, 0x40000100 +}; + +static const uint32_t SB6[64] = +{ + 0x20000010, 0x20400000, 0x00004000, 0x20404010, + 0x20400000, 0x00000010, 0x20404010, 0x00400000, + 0x20004000, 0x00404010, 0x00400000, 0x20000010, + 0x00400010, 0x20004000, 0x20000000, 0x00004010, + 0x00000000, 0x00400010, 0x20004010, 0x00004000, + 0x00404000, 0x20004010, 0x00000010, 0x20400010, + 0x20400010, 0x00000000, 0x00404010, 0x20404000, + 0x00004010, 0x00404000, 0x20404000, 0x20000000, + 0x20004000, 0x00000010, 0x20400010, 0x00404000, + 0x20404010, 0x00400000, 0x00004010, 0x20000010, + 0x00400000, 0x20004000, 0x20000000, 0x00004010, + 0x20000010, 0x20404010, 0x00404000, 0x20400000, + 0x00404010, 0x20404000, 0x00000000, 0x20400010, + 0x00000010, 0x00004000, 0x20400000, 0x00404010, + 0x00004000, 0x00400010, 0x20004010, 0x00000000, + 0x20404000, 0x20000000, 0x00400010, 0x20004010 +}; + +static const uint32_t SB7[64] = +{ + 0x00200000, 0x04200002, 0x04000802, 0x00000000, + 0x00000800, 0x04000802, 0x00200802, 0x04200800, + 0x04200802, 0x00200000, 0x00000000, 0x04000002, + 0x00000002, 0x04000000, 0x04200002, 0x00000802, + 0x04000800, 0x00200802, 0x00200002, 0x04000800, + 0x04000002, 0x04200000, 0x04200800, 0x00200002, + 0x04200000, 0x00000800, 0x00000802, 0x04200802, + 0x00200800, 0x00000002, 0x04000000, 0x00200800, + 0x04000000, 0x00200800, 0x00200000, 0x04000802, + 0x04000802, 0x04200002, 0x04200002, 0x00000002, + 0x00200002, 0x04000000, 0x04000800, 0x00200000, + 0x04200800, 0x00000802, 0x00200802, 0x04200800, + 0x00000802, 0x04000002, 0x04200802, 0x04200000, + 0x00200800, 0x00000000, 0x00000002, 0x04200802, + 0x00000000, 0x00200802, 0x04200000, 0x00000800, + 0x04000002, 0x04000800, 0x00000800, 0x00200002 +}; + +static const uint32_t SB8[64] = +{ + 0x10001040, 0x00001000, 0x00040000, 0x10041040, + 0x10000000, 0x10001040, 0x00000040, 0x10000000, + 0x00040040, 0x10040000, 0x10041040, 0x00041000, + 0x10041000, 0x00041040, 0x00001000, 0x00000040, + 0x10040000, 0x10000040, 0x10001000, 0x00001040, + 0x00041000, 0x00040040, 0x10040040, 0x10041000, + 0x00001040, 0x00000000, 0x00000000, 0x10040040, + 0x10000040, 0x10001000, 0x00041040, 0x00040000, + 0x00041040, 0x00040000, 0x10041000, 0x00001000, + 0x00000040, 0x10040040, 0x00001000, 0x00041040, + 0x10001000, 0x00000040, 0x10000040, 0x10040000, + 0x10040040, 0x10000000, 0x00040000, 0x10001040, + 0x00000000, 0x10041040, 0x00040040, 0x10000040, + 0x10040000, 0x10001000, 0x10001040, 0x00000000, + 0x10041040, 0x00041000, 0x00041000, 0x00001040, + 0x00001040, 0x00040040, 0x10000000, 0x10041000 +}; + +/* + * PC1: left and right halves bit-swap + */ +static const uint32_t LHs[16] = +{ + 0x00000000, 0x00000001, 0x00000100, 0x00000101, + 0x00010000, 0x00010001, 0x00010100, 0x00010101, + 0x01000000, 0x01000001, 0x01000100, 0x01000101, + 0x01010000, 0x01010001, 0x01010100, 0x01010101 +}; + +static const uint32_t RHs[16] = +{ + 0x00000000, 0x01000000, 0x00010000, 0x01010000, + 0x00000100, 0x01000100, 0x00010100, 0x01010100, + 0x00000001, 0x01000001, 0x00010001, 0x01010001, + 0x00000101, 0x01000101, 0x00010101, 0x01010101, +}; + +/* + * Initial Permutation macro + */ +#define DES_IP(X,Y) \ +{ \ + T = ((X >> 4) ^ Y) & 0x0F0F0F0F; Y ^= T; X ^= (T << 4); \ + T = ((X >> 16) ^ Y) & 0x0000FFFF; Y ^= T; X ^= (T << 16); \ + T = ((Y >> 2) ^ X) & 0x33333333; X ^= T; Y ^= (T << 2); \ + T = ((Y >> 8) ^ X) & 0x00FF00FF; X ^= T; Y ^= (T << 8); \ + Y = ((Y << 1) | (Y >> 31)) & 0xFFFFFFFF; \ + T = (X ^ Y) & 0xAAAAAAAA; Y ^= T; X ^= T; \ + X = ((X << 1) | (X >> 31)) & 0xFFFFFFFF; \ +} + +/* + * Final Permutation macro + */ +#define DES_FP(X,Y) \ +{ \ + X = ((X << 31) | (X >> 1)) & 0xFFFFFFFF; \ + T = (X ^ Y) & 0xAAAAAAAA; X ^= T; Y ^= T; \ + Y = ((Y << 31) | (Y >> 1)) & 0xFFFFFFFF; \ + T = ((Y >> 8) ^ X) & 0x00FF00FF; X ^= T; Y ^= (T << 8); \ + T = ((Y >> 2) ^ X) & 0x33333333; X ^= T; Y ^= (T << 2); \ + T = ((X >> 16) ^ Y) & 0x0000FFFF; Y ^= T; X ^= (T << 16); \ + T = ((X >> 4) ^ Y) & 0x0F0F0F0F; Y ^= T; X ^= (T << 4); \ +} + +/* + * DES round macro + */ +#define DES_ROUND(X,Y) \ +{ \ + T = *SK++ ^ X; \ + Y ^= SB8[ (T ) & 0x3F ] ^ \ + SB6[ (T >> 8) & 0x3F ] ^ \ + SB4[ (T >> 16) & 0x3F ] ^ \ + SB2[ (T >> 24) & 0x3F ]; \ + \ + T = *SK++ ^ ((X << 28) | (X >> 4)); \ + Y ^= SB7[ (T ) & 0x3F ] ^ \ + SB5[ (T >> 8) & 0x3F ] ^ \ + SB3[ (T >> 16) & 0x3F ] ^ \ + SB1[ (T >> 24) & 0x3F ]; \ +} + +#define SWAP(a,b) { uint32_t t = a; a = b; b = t; t = 0; } + +void mbedtls_des_sw_init( mbedtls_des_sw_context *ctx ) +{ + memset( ctx, 0, sizeof( mbedtls_des_sw_context ) ); +} + +void mbedtls_des_sw_free( mbedtls_des_sw_context *ctx ) +{ + if( ctx == NULL ) + return; + + mbedtls_zeroize( ctx, sizeof( mbedtls_des_sw_context ) ); +} + +void mbedtls_des3_sw_init( mbedtls_des3_sw_context *ctx ) +{ + memset( ctx, 0, sizeof( mbedtls_des3_sw_context ) ); +} + +void mbedtls_des3_sw_free( mbedtls_des3_sw_context *ctx ) +{ + if( ctx == NULL ) + return; + + mbedtls_zeroize( ctx, sizeof( mbedtls_des3_sw_context ) ); +} + +static const unsigned char odd_parity_table[128] = { 1, 2, 4, 7, 8, + 11, 13, 14, 16, 19, 21, 22, 25, 26, 28, 31, 32, 35, 37, 38, 41, 42, 44, + 47, 49, 50, 52, 55, 56, 59, 61, 62, 64, 67, 69, 70, 73, 74, 76, 79, 81, + 82, 84, 87, 88, 91, 93, 94, 97, 98, 100, 103, 104, 107, 109, 110, 112, + 115, 117, 118, 121, 122, 124, 127, 128, 131, 133, 134, 137, 138, 140, + 143, 145, 146, 148, 151, 152, 155, 157, 158, 161, 162, 164, 167, 168, + 171, 173, 174, 176, 179, 181, 182, 185, 186, 188, 191, 193, 194, 196, + 199, 200, 203, 205, 206, 208, 211, 213, 214, 217, 218, 220, 223, 224, + 227, 229, 230, 233, 234, 236, 239, 241, 242, 244, 247, 248, 251, 253, + 254 }; + +void mbedtls_des_sw_key_set_parity( unsigned char key[MBEDTLS_DES_KEY_SIZE] ) +{ + int i; + + for( i = 0; i < MBEDTLS_DES_KEY_SIZE; i++ ) + key[i] = odd_parity_table[key[i] / 2]; +} + +/* + * Check the given key's parity, returns 1 on failure, 0 on SUCCESS + */ +int mbedtls_des_sw_key_check_key_parity( const unsigned char key[MBEDTLS_DES_KEY_SIZE] ) +{ + int i; + + for( i = 0; i < MBEDTLS_DES_KEY_SIZE; i++ ) + if( key[i] != odd_parity_table[key[i] / 2] ) + return( 1 ); + + return( 0 ); +} + +/* + * Table of weak and semi-weak keys + * + * Source: http://en.wikipedia.org/wiki/Weak_key + * + * Weak: + * Alternating ones + zeros (0x0101010101010101) + * Alternating 'F' + 'E' (0xFEFEFEFEFEFEFEFE) + * '0xE0E0E0E0F1F1F1F1' + * '0x1F1F1F1F0E0E0E0E' + * + * Semi-weak: + * 0x011F011F010E010E and 0x1F011F010E010E01 + * 0x01E001E001F101F1 and 0xE001E001F101F101 + * 0x01FE01FE01FE01FE and 0xFE01FE01FE01FE01 + * 0x1FE01FE00EF10EF1 and 0xE01FE01FF10EF10E + * 0x1FFE1FFE0EFE0EFE and 0xFE1FFE1FFE0EFE0E + * 0xE0FEE0FEF1FEF1FE and 0xFEE0FEE0FEF1FEF1 + * + */ + +#define WEAK_KEY_COUNT 16 + +static const unsigned char weak_key_table[WEAK_KEY_COUNT][MBEDTLS_DES_KEY_SIZE] = +{ + { 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01 }, + { 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE, 0xFE }, + { 0x1F, 0x1F, 0x1F, 0x1F, 0x0E, 0x0E, 0x0E, 0x0E }, + { 0xE0, 0xE0, 0xE0, 0xE0, 0xF1, 0xF1, 0xF1, 0xF1 }, + + { 0x01, 0x1F, 0x01, 0x1F, 0x01, 0x0E, 0x01, 0x0E }, + { 0x1F, 0x01, 0x1F, 0x01, 0x0E, 0x01, 0x0E, 0x01 }, + { 0x01, 0xE0, 0x01, 0xE0, 0x01, 0xF1, 0x01, 0xF1 }, + { 0xE0, 0x01, 0xE0, 0x01, 0xF1, 0x01, 0xF1, 0x01 }, + { 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE }, + { 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01, 0xFE, 0x01 }, + { 0x1F, 0xE0, 0x1F, 0xE0, 0x0E, 0xF1, 0x0E, 0xF1 }, + { 0xE0, 0x1F, 0xE0, 0x1F, 0xF1, 0x0E, 0xF1, 0x0E }, + { 0x1F, 0xFE, 0x1F, 0xFE, 0x0E, 0xFE, 0x0E, 0xFE }, + { 0xFE, 0x1F, 0xFE, 0x1F, 0xFE, 0x0E, 0xFE, 0x0E }, + { 0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1, 0xFE }, + { 0xFE, 0xE0, 0xFE, 0xE0, 0xFE, 0xF1, 0xFE, 0xF1 } +}; + +int mbedtls_des_sw_key_check_weak( const unsigned char key[MBEDTLS_DES_KEY_SIZE] ) +{ + int i; + + for( i = 0; i < WEAK_KEY_COUNT; i++ ) + if( memcmp( weak_key_table[i], key, MBEDTLS_DES_KEY_SIZE) == 0 ) + return( 1 ); + + return( 0 ); +} + +void mbedtls_des_setkey( uint32_t SK[32], const unsigned char key[MBEDTLS_DES_KEY_SIZE] ) +{ + int i; + uint32_t X, Y, T; + + GET_UINT32_BE( X, key, 0 ); + GET_UINT32_BE( Y, key, 4 ); + + /* + * Permuted Choice 1 + */ + T = ((Y >> 4) ^ X) & 0x0F0F0F0F; X ^= T; Y ^= (T << 4); + T = ((Y ) ^ X) & 0x10101010; X ^= T; Y ^= (T ); + + X = (LHs[ (X ) & 0xF] << 3) | (LHs[ (X >> 8) & 0xF ] << 2) + | (LHs[ (X >> 16) & 0xF] << 1) | (LHs[ (X >> 24) & 0xF ] ) + | (LHs[ (X >> 5) & 0xF] << 7) | (LHs[ (X >> 13) & 0xF ] << 6) + | (LHs[ (X >> 21) & 0xF] << 5) | (LHs[ (X >> 29) & 0xF ] << 4); + + Y = (RHs[ (Y >> 1) & 0xF] << 3) | (RHs[ (Y >> 9) & 0xF ] << 2) + | (RHs[ (Y >> 17) & 0xF] << 1) | (RHs[ (Y >> 25) & 0xF ] ) + | (RHs[ (Y >> 4) & 0xF] << 7) | (RHs[ (Y >> 12) & 0xF ] << 6) + | (RHs[ (Y >> 20) & 0xF] << 5) | (RHs[ (Y >> 28) & 0xF ] << 4); + + X &= 0x0FFFFFFF; + Y &= 0x0FFFFFFF; + + /* + * calculate subkeys + */ + for( i = 0; i < 16; i++ ) + { + if( i < 2 || i == 8 || i == 15 ) + { + X = ((X << 1) | (X >> 27)) & 0x0FFFFFFF; + Y = ((Y << 1) | (Y >> 27)) & 0x0FFFFFFF; + } + else + { + X = ((X << 2) | (X >> 26)) & 0x0FFFFFFF; + Y = ((Y << 2) | (Y >> 26)) & 0x0FFFFFFF; + } + + *SK++ = ((X << 4) & 0x24000000) | ((X << 28) & 0x10000000) + | ((X << 14) & 0x08000000) | ((X << 18) & 0x02080000) + | ((X << 6) & 0x01000000) | ((X << 9) & 0x00200000) + | ((X >> 1) & 0x00100000) | ((X << 10) & 0x00040000) + | ((X << 2) & 0x00020000) | ((X >> 10) & 0x00010000) + | ((Y >> 13) & 0x00002000) | ((Y >> 4) & 0x00001000) + | ((Y << 6) & 0x00000800) | ((Y >> 1) & 0x00000400) + | ((Y >> 14) & 0x00000200) | ((Y ) & 0x00000100) + | ((Y >> 5) & 0x00000020) | ((Y >> 10) & 0x00000010) + | ((Y >> 3) & 0x00000008) | ((Y >> 18) & 0x00000004) + | ((Y >> 26) & 0x00000002) | ((Y >> 24) & 0x00000001); + + *SK++ = ((X << 15) & 0x20000000) | ((X << 17) & 0x10000000) + | ((X << 10) & 0x08000000) | ((X << 22) & 0x04000000) + | ((X >> 2) & 0x02000000) | ((X << 1) & 0x01000000) + | ((X << 16) & 0x00200000) | ((X << 11) & 0x00100000) + | ((X << 3) & 0x00080000) | ((X >> 6) & 0x00040000) + | ((X << 15) & 0x00020000) | ((X >> 4) & 0x00010000) + | ((Y >> 2) & 0x00002000) | ((Y << 8) & 0x00001000) + | ((Y >> 14) & 0x00000808) | ((Y >> 9) & 0x00000400) + | ((Y ) & 0x00000200) | ((Y << 7) & 0x00000100) + | ((Y >> 7) & 0x00000020) | ((Y >> 3) & 0x00000011) + | ((Y << 2) & 0x00000004) | ((Y >> 21) & 0x00000002); + } +} + +/* + * DES key schedule (56-bit, encryption) + */ +int mbedtls_des_sw_setkey_enc( mbedtls_des_sw_context *ctx, const unsigned char key[MBEDTLS_DES_KEY_SIZE] ) +{ + mbedtls_des_setkey( ctx->sk, key ); + + return( 0 ); +} + +/* + * DES key schedule (56-bit, decryption) + */ +int mbedtls_des_sw_setkey_dec( mbedtls_des_sw_context *ctx, const unsigned char key[MBEDTLS_DES_KEY_SIZE] ) +{ + int i; + + mbedtls_des_setkey( ctx->sk, key ); + + for( i = 0; i < 16; i += 2 ) + { + SWAP( ctx->sk[i ], ctx->sk[30 - i] ); + SWAP( ctx->sk[i + 1], ctx->sk[31 - i] ); + } + + return( 0 ); +} + +static void des3_set2key( uint32_t esk[96], + uint32_t dsk[96], + const unsigned char key[MBEDTLS_DES_KEY_SIZE*2] ) +{ + int i; + + mbedtls_des_setkey( esk, key ); + mbedtls_des_setkey( dsk + 32, key + 8 ); + + for( i = 0; i < 32; i += 2 ) + { + dsk[i ] = esk[30 - i]; + dsk[i + 1] = esk[31 - i]; + + esk[i + 32] = dsk[62 - i]; + esk[i + 33] = dsk[63 - i]; + + esk[i + 64] = esk[i ]; + esk[i + 65] = esk[i + 1]; + + dsk[i + 64] = dsk[i ]; + dsk[i + 65] = dsk[i + 1]; + } +} + +/* + * Triple-DES key schedule (112-bit, encryption) + */ +int mbedtls_des3_sw_set2key_enc( mbedtls_des3_sw_context *ctx, + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 2] ) +{ + uint32_t sk[96]; + + des3_set2key( ctx->sk, sk, key ); + mbedtls_zeroize( sk, sizeof( sk ) ); + + return( 0 ); +} + +/* + * Triple-DES key schedule (112-bit, decryption) + */ +int mbedtls_des3_sw_set2key_dec( mbedtls_des3_sw_context *ctx, + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 2] ) +{ + uint32_t sk[96]; + + des3_set2key( sk, ctx->sk, key ); + mbedtls_zeroize( sk, sizeof( sk ) ); + + return( 0 ); +} + +static void des3_set3key( uint32_t esk[96], + uint32_t dsk[96], + const unsigned char key[24] ) +{ + int i; + + mbedtls_des_setkey( esk, key ); + mbedtls_des_setkey( dsk + 32, key + 8 ); + mbedtls_des_setkey( esk + 64, key + 16 ); + + for( i = 0; i < 32; i += 2 ) + { + dsk[i ] = esk[94 - i]; + dsk[i + 1] = esk[95 - i]; + + esk[i + 32] = dsk[62 - i]; + esk[i + 33] = dsk[63 - i]; + + dsk[i + 64] = esk[30 - i]; + dsk[i + 65] = esk[31 - i]; + } +} + +/* + * Triple-DES key schedule (168-bit, encryption) + */ +int mbedtls_des3_sw_set3key_enc( mbedtls_des3_sw_context *ctx, + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 3] ) +{ + uint32_t sk[96]; + + des3_set3key( ctx->sk, sk, key ); + mbedtls_zeroize( sk, sizeof( sk ) ); + + return( 0 ); +} + +/* + * Triple-DES key schedule (168-bit, decryption) + */ +int mbedtls_des3_sw_set3key_dec( mbedtls_des3_sw_context *ctx, + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 3] ) +{ + uint32_t sk[96]; + + des3_set3key( sk, ctx->sk, key ); + mbedtls_zeroize( sk, sizeof( sk ) ); + + return( 0 ); +} + +/* + * DES-ECB block encryption/decryption + */ +int mbedtls_des_sw_crypt_ecb( mbedtls_des_sw_context *ctx, + const unsigned char input[8], + unsigned char output[8] ) +{ + int i; + uint32_t X, Y, T, *SK; + + SK = ctx->sk; + + GET_UINT32_BE( X, input, 0 ); + GET_UINT32_BE( Y, input, 4 ); + + DES_IP( X, Y ); + + for( i = 0; i < 8; i++ ) + { + DES_ROUND( Y, X ); + DES_ROUND( X, Y ); + } + + DES_FP( Y, X ); + + PUT_UINT32_BE( Y, output, 0 ); + PUT_UINT32_BE( X, output, 4 ); + + return( 0 ); +} + +#if defined(MBEDTLS_CIPHER_MODE_CBC) +/* + * DES-CBC buffer encryption/decryption + */ +int mbedtls_des_sw_crypt_cbc( mbedtls_des_sw_context *ctx, + int mode, + size_t length, + unsigned char iv[8], + const unsigned char *input, + unsigned char *output ) +{ + int i; + unsigned char temp[8]; + + if( length % 8 ) + return( MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH ); + + if( mode == MBEDTLS_DES_ENCRYPT ) + { + while( length > 0 ) + { + for( i = 0; i < 8; i++ ) + output[i] = (unsigned char)( input[i] ^ iv[i] ); + + mbedtls_des_sw_crypt_ecb( ctx, output, output ); + memcpy( iv, output, 8 ); + + input += 8; + output += 8; + length -= 8; + } + } + else /* MBEDTLS_DES_DECRYPT */ + { + while( length > 0 ) + { + memcpy( temp, input, 8 ); + mbedtls_des_sw_crypt_ecb( ctx, input, output ); + + for( i = 0; i < 8; i++ ) + output[i] = (unsigned char)( output[i] ^ iv[i] ); + + memcpy( iv, temp, 8 ); + + input += 8; + output += 8; + length -= 8; + } + } + + return( 0 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + +/* + * 3DES-ECB block encryption/decryption + */ +int mbedtls_des3_sw_crypt_ecb( mbedtls_des3_sw_context *ctx, + const unsigned char input[8], + unsigned char output[8] ) +{ + int i; + uint32_t X, Y, T, *SK; + + SK = ctx->sk; + + GET_UINT32_BE( X, input, 0 ); + GET_UINT32_BE( Y, input, 4 ); + + DES_IP( X, Y ); + + for( i = 0; i < 8; i++ ) + { + DES_ROUND( Y, X ); + DES_ROUND( X, Y ); + } + + for( i = 0; i < 8; i++ ) + { + DES_ROUND( X, Y ); + DES_ROUND( Y, X ); + } + + for( i = 0; i < 8; i++ ) + { + DES_ROUND( Y, X ); + DES_ROUND( X, Y ); + } + + DES_FP( Y, X ); + + PUT_UINT32_BE( Y, output, 0 ); + PUT_UINT32_BE( X, output, 4 ); + + return( 0 ); +} + +#if defined(MBEDTLS_CIPHER_MODE_CBC) +/* + * 3DES-CBC buffer encryption/decryption + */ +int mbedtls_des3_sw_crypt_cbc( mbedtls_des3_sw_context *ctx, + int mode, + size_t length, + unsigned char iv[8], + const unsigned char *input, + unsigned char *output ) +{ + int i; + unsigned char temp[8]; + + if( length % 8 ) + return( MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH ); + + if( mode == MBEDTLS_DES_ENCRYPT ) + { + while( length > 0 ) + { + for( i = 0; i < 8; i++ ) + output[i] = (unsigned char)( input[i] ^ iv[i] ); + + mbedtls_des3_sw_crypt_ecb( ctx, output, output ); + memcpy( iv, output, 8 ); + + input += 8; + output += 8; + length -= 8; + } + } + else /* MBEDTLS_DES_DECRYPT */ + { + while( length > 0 ) + { + memcpy( temp, input, 8 ); + mbedtls_des3_sw_crypt_ecb( ctx, input, output ); + + for( i = 0; i < 8; i++ ) + output[i] = (unsigned char)( output[i] ^ iv[i] ); + + memcpy( iv, temp, 8 ); + + input += 8; + output += 8; + length -= 8; + } + } + + return( 0 ); +} +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + +#endif /* MBEDTLS_DES_ALT */ +#endif /* MBEDTLS_DES_C */ diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt_sw.h b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt_sw.h new file mode 100644 index 00000000000..d42aa2ba050 --- /dev/null +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt_sw.h @@ -0,0 +1,283 @@ +/** + * \file des.h + * + * \brief DES block cipher + * + * Copyright (C) 2006-2015, ARM Limited, All Rights Reserved + * SPDX-License-Identifier: Apache-2.0 + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may + * not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * + * This file is part of mbed TLS (https://tls.mbed.org) + */ +#ifndef MBEDTLS_DES_ALT_SW_H +#define MBEDTLS_DES_ALT_SW_H + +#if !defined(MBEDTLS_CONFIG_FILE) +#include "config.h" +#else +#include MBEDTLS_CONFIG_FILE +#endif + +#if defined(MBEDTLS_DES_C) +#if defined(MBEDTLS_DES_ALT) + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * \brief DES context structure + */ +typedef struct +{ + uint32_t sk[32]; /*!< DES subkeys */ +} +mbedtls_des_sw_context; + +/** + * \brief Triple-DES context structure + */ +typedef struct +{ + uint32_t sk[96]; /*!< 3DES subkeys */ +} +mbedtls_des3_sw_context; + +/** + * \brief Initialize DES context + * + * \param ctx DES context to be initialized + */ +void mbedtls_des_sw_init( mbedtls_des_sw_context *ctx ); + +/** + * \brief Clear DES context + * + * \param ctx DES context to be cleared + */ +void mbedtls_des_sw_free( mbedtls_des_sw_context *ctx ); + +/** + * \brief Initialize Triple-DES context + * + * \param ctx DES3 context to be initialized + */ +void mbedtls_des3_sw_init( mbedtls_des3_sw_context *ctx ); + +/** + * \brief Clear Triple-DES context + * + * \param ctx DES3 context to be cleared + */ +void mbedtls_des3_sw_free( mbedtls_des3_sw_context *ctx ); + +/** + * \brief Set key parity on the given key to odd. + * + * DES keys are 56 bits long, but each byte is padded with + * a parity bit to allow verification. + * + * \param key 8-byte secret key + */ +void mbedtls_des_sw_key_set_parity( unsigned char key[MBEDTLS_DES_KEY_SIZE] ); + +/** + * \brief Check that key parity on the given key is odd. + * + * DES keys are 56 bits long, but each byte is padded with + * a parity bit to allow verification. + * + * \param key 8-byte secret key + * + * \return 0 is parity was ok, 1 if parity was not correct. + */ +int mbedtls_des_sw_key_check_key_parity( const unsigned char key[MBEDTLS_DES_KEY_SIZE] ); + +/** + * \brief Check that key is not a weak or semi-weak DES key + * + * \param key 8-byte secret key + * + * \return 0 if no weak key was found, 1 if a weak key was identified. + */ +int mbedtls_des_sw_key_check_weak( const unsigned char key[MBEDTLS_DES_KEY_SIZE] ); + +/** + * \brief DES key schedule (56-bit, encryption) + * + * \param ctx DES context to be initialized + * \param key 8-byte secret key + * + * \return 0 + */ +int mbedtls_des_sw_setkey_enc( mbedtls_des_sw_context *ctx, const unsigned char key[MBEDTLS_DES_KEY_SIZE] ); + +/** + * \brief DES key schedule (56-bit, decryption) + * + * \param ctx DES context to be initialized + * \param key 8-byte secret key + * + * \return 0 + */ +int mbedtls_des_sw_setkey_dec( mbedtls_des_sw_context *ctx, const unsigned char key[MBEDTLS_DES_KEY_SIZE] ); + +/** + * \brief Triple-DES key schedule (112-bit, encryption) + * + * \param ctx 3DES context to be initialized + * \param key 16-byte secret key + * + * \return 0 + */ +int mbedtls_des3_sw_set2key_enc( mbedtls_des3_sw_context *ctx, + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 2] ); + +/** + * \brief Triple-DES key schedule (112-bit, decryption) + * + * \param ctx 3DES context to be initialized + * \param key 16-byte secret key + * + * \return 0 + */ +int mbedtls_des3_sw_set2key_dec( mbedtls_des3_sw_context *ctx, + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 2] ); + +/** + * \brief Triple-DES key schedule (168-bit, encryption) + * + * \param ctx 3DES context to be initialized + * \param key 24-byte secret key + * + * \return 0 + */ +int mbedtls_des3_sw_set3key_enc( mbedtls_des3_sw_context *ctx, + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 3] ); + +/** + * \brief Triple-DES key schedule (168-bit, decryption) + * + * \param ctx 3DES context to be initialized + * \param key 24-byte secret key + * + * \return 0 + */ +int mbedtls_des3_sw_set3key_dec( mbedtls_des3_sw_context *ctx, + const unsigned char key[MBEDTLS_DES_KEY_SIZE * 3] ); + +/** + * \brief DES-ECB block encryption/decryption + * + * \param ctx DES context + * \param input 64-bit input block + * \param output 64-bit output block + * + * \return 0 if successful + */ +int mbedtls_des_sw_crypt_ecb( mbedtls_des_sw_context *ctx, + const unsigned char input[8], + unsigned char output[8] ); + +#if defined(MBEDTLS_CIPHER_MODE_CBC) +/** + * \brief DES-CBC buffer encryption/decryption + * + * \note Upon exit, the content of the IV is updated so that you can + * call the function same function again on the following + * block(s) of data and get the same result as if it was + * encrypted in one call. This allows a "streaming" usage. + * If on the other hand you need to retain the contents of the + * IV, you should either save it manually or use the cipher + * module instead. + * + * \param ctx DES context + * \param mode MBEDTLS_DES_ENCRYPT or MBEDTLS_DES_DECRYPT + * \param length length of the input data + * \param iv initialization vector (updated after use) + * \param input buffer holding the input data + * \param output buffer holding the output data + */ +int mbedtls_des_sw_crypt_cbc( mbedtls_des_sw_context *ctx, + int mode, + size_t length, + unsigned char iv[8], + const unsigned char *input, + unsigned char *output ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + +/** + * \brief 3DES-ECB block encryption/decryption + * + * \param ctx 3DES context + * \param input 64-bit input block + * \param output 64-bit output block + * + * \return 0 if successful + */ +int mbedtls_des3_sw_crypt_ecb( mbedtls_des3_sw_context *ctx, + const unsigned char input[8], + unsigned char output[8] ); + +#if defined(MBEDTLS_CIPHER_MODE_CBC) +/** + * \brief 3DES-CBC buffer encryption/decryption + * + * \note Upon exit, the content of the IV is updated so that you can + * call the function same function again on the following + * block(s) of data and get the same result as if it was + * encrypted in one call. This allows a "streaming" usage. + * If on the other hand you need to retain the contents of the + * IV, you should either save it manually or use the cipher + * module instead. + * + * \param ctx 3DES context + * \param mode MBEDTLS_DES_ENCRYPT or MBEDTLS_DES_DECRYPT + * \param length length of the input data + * \param iv initialization vector (updated after use) + * \param input buffer holding the input data + * \param output buffer holding the output data + * + * \return 0 if successful, or MBEDTLS_ERR_DES_INVALID_INPUT_LENGTH + */ +int mbedtls_des3_sw_crypt_cbc( mbedtls_des3_sw_context *ctx, + int mode, + size_t length, + unsigned char iv[8], + const unsigned char *input, + unsigned char *output ); +#endif /* MBEDTLS_CIPHER_MODE_CBC */ + +/** + * \brief Internal function for key expansion. + * (Only exposed to allow overriding it, + * see MBEDTLS_DES_SETKEY_ALT) + * + * \param SK Round keys + * \param key Base key + */ +void mbedtls_des_sw_setkey( uint32_t SK[32], + const unsigned char key[MBEDTLS_DES_KEY_SIZE] ); + +#ifdef __cplusplus +} +#endif + +#endif /* MBEDTLS_DES_ALT */ +#endif /* MBEDTLS_DES_C */ + +#endif /* des.h */ From 8bab8e2f52295de9463502f281ef761588706703 Mon Sep 17 00:00:00 2001 From: cyliangtw Date: Fri, 26 Aug 2016 19:45:27 +0800 Subject: [PATCH 30/89] Support HW AES CBC block chain & AES CFB --- .../TARGET_NUC472/crypto/aes/aes_alt.c | 219 +++++++++++------- .../TARGET_NUC472/crypto/aes/aes_alt.h | 3 +- 2 files changed, 132 insertions(+), 90 deletions(-) diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c index 375657443d5..9e4c5434d0d 100644 --- a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c @@ -1,22 +1,19 @@ -/* - * AES hardware acceleration implementation - * - * Copyright (C) 2015-2020, Nuvoton, All Rights Reserved - * SPDX-License-Identifier: Apache-2.0 +/* mbed Microcontroller Library + * Copyright (c) 2015-2016 Nuvoton * - * Licensed under the Apache License, Version 2.0 (the "License"); you may - * not use this file except in compliance with the License. - * You may obtain a copy of the License at + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT - * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. + * http://www.apache.org/licenses/LICENSE-2.0 * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ + /* * The AES block cipher was designed by Vincent Rijmen and Joan Daemen. * @@ -31,32 +28,18 @@ #endif #if defined(MBEDTLS_AES_C) +#if defined(MBEDTLS_AES_ALT) #include #include "mbedtls/aes.h" -#if defined(MBEDTLS_PADLOCK_C) -#include "mbedtls/padlock.h" -#endif -#if defined(MBEDTLS_AESNI_C) -#include "mbedtls/aesni.h" -#endif - -#if defined(MBEDTLS_SELF_TEST) -#if defined(MBEDTLS_PLATFORM_C) -#include "mbedtls/platform.h" -#else -#include -#define mbedtls_printf printf -#endif /* MBEDTLS_PLATFORM_C */ -#endif /* MBEDTLS_SELF_TEST */ #include "NUC472_442.h" #include "toolchain.h" +#include "mbed_assert.h" //static int aes_init_done = 0; -#if defined(MBEDTLS_AES_ALT) #define mbedtls_trace //printf @@ -73,16 +56,34 @@ static uint32_t au32MyAESIV[4] = { extern volatile int g_AES_done; -uint8_t au8OutputData[16] MBED_ALIGN(4); -uint8_t au8InputData[16] MBED_ALIGN(4); +// Must be a multiple of 16 bytes block size +#define MAX_DMA_CHAIN_SIZE (16*6) +static uint8_t au8OutputData[MAX_DMA_CHAIN_SIZE] MBED_ALIGN(4); +static uint8_t au8InputData[MAX_DMA_CHAIN_SIZE] MBED_ALIGN(4); -static void dumpHex(uint8_t au8Data[], int len) +static void dumpHex(const unsigned char au8Data[], int len) { int j; for (j = 0; j < len; j++) mbedtls_trace("%02x ", au8Data[j]); mbedtls_trace("\r\n"); } +static void swapInitVector(unsigned char iv[16]) +{ + unsigned int* piv; + int i; + // iv SWAP + piv = (unsigned int*)iv; + for( i=0; i< 4; i++) + { + *piv = (((*piv) & 0x000000FF) << 24) | + (((*piv) & 0x0000FF00) << 8) | + (((*piv) & 0x00FF0000) >> 8) | + (((*piv) & 0xFF000000) >> 24); + piv++; + } +} + //volatile void CRYPTO_IRQHandler() //{ // if (AES_GET_INT_FLAG()) { @@ -104,7 +105,6 @@ static int channel_alloc() return i; } } - printf("%s: No available AES channel \r\n", __FUNCTION__); return(-1); } @@ -126,8 +126,11 @@ void mbedtls_aes_init( mbedtls_aes_context *ctx ) memset( ctx, 0, sizeof( mbedtls_aes_context ) ); ctx->swapType = AES_IN_OUT_SWAP; - while( (i = channel_alloc()) < 0 ) osDelay(300); - + while( (i = channel_alloc()) < 0 ) + { + mbed_assert_internal("No available AES channel", __FILE__, __LINE__); + //osDelay(300); + } ctx->channel = i; ctx->iv = au32MyAESIV; @@ -215,7 +218,7 @@ int mbedtls_aes_setkey_dec( mbedtls_aes_context *ctx, const unsigned char *key, int ret; mbedtls_trace("=== %s keybits[%d]\r\n", __FUNCTION__, keybits); - dumpHex(key,keybits/8); + dumpHex((uint8_t *)key,keybits/8); /* Also checks keybits */ if( ( ret = mbedtls_aes_setkey_enc( ctx, key, keybits ) ) != 0 ) @@ -230,9 +233,8 @@ int mbedtls_aes_setkey_dec( mbedtls_aes_context *ctx, const unsigned char *key, static void __nvt_aes_crypt( mbedtls_aes_context *ctx, const unsigned char input[16], - unsigned char output[16]) + unsigned char output[16], int dataSize) { - int i; unsigned char* pIn; unsigned char* pOut; @@ -243,28 +245,27 @@ static void __nvt_aes_crypt( mbedtls_aes_context *ctx, AES_SetInitVect(ctx->channel, ctx->iv); if( ((uint32_t)input) & 0x03 ) { - memcpy(au8InputData, input, sizeof(au8InputData)); + memcpy(au8InputData, input, dataSize); pIn = au8InputData; }else{ - pIn = (uint32_t)input; + pIn = input; } if( ((uint32_t)output) & 0x03 ) { pOut = au8OutputData; } else { - pOut = (uint32_t)output; + pOut = output; } - AES_SetDMATransfer(ctx->channel, (uint32_t)pIn, (uint32_t)pOut, sizeof(au8InputData)); + AES_SetDMATransfer(ctx->channel, (uint32_t)pIn, (uint32_t)pOut, dataSize); g_AES_done = 0; AES_Start(ctx->channel, CRYPTO_DMA_ONE_SHOT); while (!g_AES_done); - if( pOut != (uint32_t)output ) memcpy(output, au8OutputData, sizeof(au8InputData)); + if( pOut != output ) memcpy(output, au8OutputData, dataSize); dumpHex(output,16); - } /* @@ -275,12 +276,11 @@ void mbedtls_aes_encrypt( mbedtls_aes_context *ctx, const unsigned char input[16], unsigned char output[16] ) { - int i; mbedtls_trace("=== %s \r\n", __FUNCTION__); ctx->encDec = 1; - __nvt_aes_crypt(ctx, input, output); + __nvt_aes_crypt(ctx, input, output, 16); } #endif /* MBEDTLS_AES_ENCRYPT_ALT */ @@ -293,12 +293,11 @@ void mbedtls_aes_decrypt( mbedtls_aes_context *ctx, const unsigned char input[16], unsigned char output[16] ) { - int i; mbedtls_trace("=== %s \r\n", __FUNCTION__); ctx->encDec = 0; - __nvt_aes_crypt(ctx, input, output); + __nvt_aes_crypt(ctx, input, output, 16); } @@ -312,8 +311,6 @@ int mbedtls_aes_crypt_ecb( mbedtls_aes_context *ctx, const unsigned char input[16], unsigned char output[16] ) { - unsigned char sw_output[16]; - mbedtls_trace("=== %s \r\n", __FUNCTION__); @@ -333,52 +330,50 @@ int mbedtls_aes_crypt_ecb( mbedtls_aes_context *ctx, */ int mbedtls_aes_crypt_cbc( mbedtls_aes_context *ctx, int mode, - size_t length, + size_t len, unsigned char iv[16], const unsigned char *input, unsigned char *output ) { - int i; unsigned char temp[16]; - unsigned int* piv; - + int length = len; + int blockChainLen; mbedtls_trace("=== %s \r\n", __FUNCTION__); if( length % 16 ) return( MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); - - while( length > 0 ) - { - ctx->opMode = AES_MODE_CBC; - ctx->iv = iv; - if( mode == MBEDTLS_AES_ENCRYPT ) - { - mbedtls_aes_encrypt( ctx, input, output ); - memcpy( iv, output, 16 ); - }else{ - memcpy( temp, input, 16 ); - dumpHex(input,16); - mbedtls_aes_decrypt( ctx, input, output ); - dumpHex(iv,16); - dumpHex(output,16); - memcpy( iv, temp, 16 ); - } - - // iv SWAP - piv = (unsigned int*)iv; - for( i=0; i< 4; i++) - { - *piv = (((*piv) & 0x000000FF) << 24) | - (((*piv) & 0x0000FF00) << 8) | - (((*piv) & 0x00FF0000) >> 8) | - (((*piv) & 0xFF000000) >> 24); - piv++; - } - input += 16; - output += 16; - length -= 16; - } - + if( (((uint32_t)input) & 0x03) || (((uint32_t)output) & 0x03) ) + { + blockChainLen = (( length > MAX_DMA_CHAIN_SIZE ) ? MAX_DMA_CHAIN_SIZE : length ); + } else { + blockChainLen = length; + } + + while( length > 0 ) + { + ctx->opMode = AES_MODE_CBC; + swapInitVector(iv); // iv SWAP + ctx->iv = (uint32_t *)iv; + + if( mode == MBEDTLS_AES_ENCRYPT ) + { + ctx->encDec = 1; + __nvt_aes_crypt(ctx, input, output, blockChainLen); +// if( blockChainLen == length ) break; // finish last block chain but still need to prepare next iv for mbedtls_aes_self_test() + memcpy( iv, output+blockChainLen-16, 16 ); + }else{ + memcpy( temp, input+blockChainLen-16, 16 ); + ctx->encDec = 0; + __nvt_aes_crypt(ctx, input, output, blockChainLen); +// if( blockChainLen == length ) break; // finish last block chain but still need to prepare next iv for mbedtls_aes_self_test() + memcpy( iv, temp, 16 ); + } + length -= blockChainLen; + input += blockChainLen; + output += blockChainLen; + if(length < MAX_DMA_CHAIN_SIZE ) blockChainLen = length; // For last remainder block chain + + } return( 0 ); } @@ -396,6 +391,52 @@ int mbedtls_aes_crypt_cfb128( mbedtls_aes_context *ctx, const unsigned char *input, unsigned char *output ) { + + size_t n = *iv_off; + unsigned char temp[16]; + int ivLen; + + mbedtls_trace("=== %s \r\n", __FUNCTION__); + + // Over reserved Max DMA buffer size + if( length > MAX_DMA_CHAIN_SIZE ) + return __aes_crypt_over_dma_size_cfb128(ctx, mode, length, iv_off, iv, input, output); + + ctx->opMode = AES_MODE_CFB; + swapInitVector(iv); // iv SWAP + + ctx->iv = (uint32_t *)iv; + if( mode == MBEDTLS_AES_DECRYPT ) + { + n= length%16; + ivLen = (( n > 0) ? n : 16); + memcpy(temp, input+length-ivLen, ivLen); + ctx->encDec = 0; + __nvt_aes_crypt(ctx, input, output, length); + memcpy(iv,temp,ivLen); + } + else + { + n= length%16; + ivLen = (( n > 0) ? n : 16); + ctx->encDec = 1; + __nvt_aes_crypt(ctx, input, output, length); + memcpy(iv, output+length-ivLen, ivLen); + } + + *iv_off = n; + + return( 0 ); +} + +static int __aes_crypt_over_dma_size_cfb128( mbedtls_aes_context *ctx, + int mode, + size_t length, + size_t *iv_off, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ) +{ int c; size_t n = *iv_off; diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.h b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.h index 77d1837e9eb..0113f269f24 100644 --- a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.h +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.h @@ -44,9 +44,10 @@ typedef struct uint32_t channel; uint32_t swapType; uint32_t *iv; +#if 1 uint32_t buf[8]; /* For comparsion with software AES for correctness */ -#if 0 +#else uint32_t buf[68]; /*!< unaligned data */ int nr; /*!< number of rounds */ uint32_t *rk; /*!< AES round keys */ From c59ef5c0b4f7eb010420eda8ed075e9731a07627 Mon Sep 17 00:00:00 2001 From: cyliangtw Date: Mon, 29 Aug 2016 21:42:43 +0800 Subject: [PATCH 31/89] Support block chain & partial block in HW AES CFB mode --- .../TARGET_NUC472/crypto/aes/aes_alt.c | 106 ++++++++++++------ .../TARGET_NUC472/crypto/aes/aes_alt.h | 1 + 2 files changed, 73 insertions(+), 34 deletions(-) diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c index 9e4c5434d0d..82f2f4687a8 100644 --- a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c @@ -250,7 +250,7 @@ static void __nvt_aes_crypt( mbedtls_aes_context *ctx, }else{ pIn = input; } - if( ((uint32_t)output) & 0x03 ) + if( (((uint32_t)output) & 0x03) || (dataSize%4)) // HW CFB output byte count must be multiple of word { pOut = au8OutputData; } else { @@ -385,51 +385,77 @@ int mbedtls_aes_crypt_cbc( mbedtls_aes_context *ctx, */ int mbedtls_aes_crypt_cfb128( mbedtls_aes_context *ctx, int mode, - size_t length, + size_t len, size_t *iv_off, unsigned char iv[16], const unsigned char *input, unsigned char *output ) { - - size_t n = *iv_off; + size_t n = *iv_off; unsigned char temp[16]; + int length=len; + int blockChainLen; + int remLen=0; int ivLen; mbedtls_trace("=== %s \r\n", __FUNCTION__); - // Over reserved Max DMA buffer size - if( length > MAX_DMA_CHAIN_SIZE ) - return __aes_crypt_over_dma_size_cfb128(ctx, mode, length, iv_off, iv, input, output); + // proceed: start with partial block by ECB mode first + if( n !=0 ) { + __nvt_aes_crypt_partial_block_cfb128(ctx, mode, 16 - n , iv_off, iv, input, output); + input += (16 - n); + output += (16 - n); + length -= (16 - n); + } + + // For address or byte count non-word alignment, go through reserved DMA buffer. + if( (((uint32_t)input) & 0x03) || (((uint32_t)output) & 0x03) || (length%4) ) + { + blockChainLen = (( length > MAX_DMA_CHAIN_SIZE ) ? MAX_DMA_CHAIN_SIZE : length ); + } else { + blockChainLen = length; + } + + // proceed: start with block alignment + while( length > 0 ) + { + + ctx->opMode = AES_MODE_CFB; + + swapInitVector(iv); // iv SWAP - ctx->opMode = AES_MODE_CFB; - swapInitVector(iv); // iv SWAP + ctx->iv = (uint32_t *)iv; + remLen = blockChainLen%16; + ivLen = (( remLen > 0) ? remLen: 16 ); - ctx->iv = (uint32_t *)iv; - if( mode == MBEDTLS_AES_DECRYPT ) - { - n= length%16; - ivLen = (( n > 0) ? n : 16); - memcpy(temp, input+length-ivLen, ivLen); - ctx->encDec = 0; - __nvt_aes_crypt(ctx, input, output, length); - memcpy(iv,temp,ivLen); - } - else - { - n= length%16; - ivLen = (( n > 0) ? n : 16); - ctx->encDec = 1; - __nvt_aes_crypt(ctx, input, output, length); - memcpy(iv, output+length-ivLen, ivLen); - } + if( mode == MBEDTLS_AES_DECRYPT ) + { + memcpy(temp, input+blockChainLen - ivLen, ivLen); + if(blockChainLen >= 16) memcpy(ctx->prv_iv, input+blockChainLen-remLen-16 , 16); + ctx->encDec = 0; + __nvt_aes_crypt(ctx, input, output, blockChainLen); + memcpy(iv,temp, ivLen); + } + else + { + ctx->encDec = 1; + __nvt_aes_crypt(ctx, input, output, blockChainLen); + if(blockChainLen >= 16) memcpy(ctx->prv_iv, output+blockChainLen-remLen-16 , 16); + memcpy(iv,output+blockChainLen-ivLen,ivLen); + } + length -= blockChainLen; + input += blockChainLen; + output += blockChainLen; + if(length < MAX_DMA_CHAIN_SIZE ) blockChainLen = length; // For last remainder block chain + } - *iv_off = n; + *iv_off = remLen; - return( 0 ); + return( 0 ); } -static int __aes_crypt_over_dma_size_cfb128( mbedtls_aes_context *ctx, +/* Support partial block encryption/decryption */ +static int __nvt_aes_crypt_partial_block_cfb128( mbedtls_aes_context *ctx, int mode, size_t length, size_t *iv_off, @@ -439,15 +465,21 @@ static int __aes_crypt_over_dma_size_cfb128( mbedtls_aes_context *ctx, { int c; size_t n = *iv_off; - + unsigned char iv_tmp[16]; mbedtls_trace("=== %s \r\n", __FUNCTION__); if( mode == MBEDTLS_AES_DECRYPT ) { while( length-- ) { - if( n == 0 ) + if( n == 0) mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, iv, iv ); - + else if( ctx->opMode == AES_MODE_CFB) // For previous cryption is CFB mode + { + memcpy(iv_tmp, iv, n); + mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, ctx->prv_iv, iv ); + memcpy(iv, iv_tmp, n); + } + c = *input++; *output++ = (unsigned char)( c ^ iv[n] ); iv[n] = (unsigned char) c; @@ -461,7 +493,13 @@ static int __aes_crypt_over_dma_size_cfb128( mbedtls_aes_context *ctx, { if( n == 0 ) mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, iv, iv ); - + else if( ctx->opMode == AES_MODE_CFB) // For previous cryption is CFB mode + { + memcpy(iv_tmp, iv, n); + mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, ctx->prv_iv, iv ); + memcpy(iv, iv_tmp, n); + } + iv[n] = *output++ = (unsigned char)( iv[n] ^ *input++ ); n = ( n + 1 ) & 0x0F; diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.h b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.h index 0113f269f24..25a8ca53116 100644 --- a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.h +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.h @@ -44,6 +44,7 @@ typedef struct uint32_t channel; uint32_t swapType; uint32_t *iv; + unsigned char prv_iv[16]; #if 1 uint32_t buf[8]; /* For comparsion with software AES for correctness */ From d4609a5166c6db3b65fddb719a7b6d1d0046b1ae Mon Sep 17 00:00:00 2001 From: cyliangtw Date: Tue, 30 Aug 2016 18:09:36 +0800 Subject: [PATCH 32/89] Improve HW AES CFB mode performance for byte cnt non-word alignment --- .../hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c index 82f2f4687a8..b915f1ba96c 100644 --- a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c @@ -409,10 +409,12 @@ int mbedtls_aes_crypt_cfb128( mbedtls_aes_context *ctx, } // For address or byte count non-word alignment, go through reserved DMA buffer. - if( (((uint32_t)input) & 0x03) || (((uint32_t)output) & 0x03) || (length%4) ) + if( (((uint32_t)input) & 0x03) || (((uint32_t)output) & 0x03) ) // Must reserved DMA buffer for each block { blockChainLen = (( length > MAX_DMA_CHAIN_SIZE ) ? MAX_DMA_CHAIN_SIZE : length ); - } else { + } else if(length%4) { // Need reserved DMA buffer once for last chain + blockChainLen = (( length > MAX_DMA_CHAIN_SIZE ) ? (length - length%16) : length ); + } else { // Not need reserved DMA buffer blockChainLen = length; } From 77f231fb59fdd310ed806901e6c5433233671d47 Mon Sep 17 00:00:00 2001 From: ccli8 Date: Wed, 31 Aug 2016 11:31:14 +0800 Subject: [PATCH 33/89] Fix SHA accelerator errors 1. Fix clone SHA context error. Convert SHA H/W context to SHA S/W context due to just one instance of SHA H/W. 2. Fix partial update error. --- .../TARGET_NUC472/crypto/sha/sha1_alt.c | 84 +++++--- .../TARGET_NUC472/crypto/sha/sha1_alt.h | 15 +- .../TARGET_NUC472/crypto/sha/sha1_alt_sw.c | 38 ++-- .../TARGET_NUC472/crypto/sha/sha1_alt_sw.h | 18 +- .../TARGET_NUC472/crypto/sha/sha256_alt.c | 90 +++++--- .../TARGET_NUC472/crypto/sha/sha256_alt.h | 15 +- .../TARGET_NUC472/crypto/sha/sha256_alt_sw.c | 38 ++-- .../TARGET_NUC472/crypto/sha/sha256_alt_sw.h | 18 +- .../TARGET_NUC472/crypto/sha/sha_alt_hw.c | 200 +++++++++++------- .../TARGET_NUC472/crypto/sha/sha_alt_hw.h | 44 ++-- 10 files changed, 318 insertions(+), 242 deletions(-) diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt.c index 5f047164480..7a0c0990310 100644 --- a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt.c +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt.c @@ -25,29 +25,19 @@ #include "sha1_alt.h" #include "crypto-misc.h" +#include "nu_bitutil.h" +#include "string.h" void mbedtls_sha1_init(mbedtls_sha1_context *ctx) { if (crypto_sha_acquire()) { - ctx->mbedtls_sha1_init = mbedtls_sha1_hw_init; - ctx->mbedtls_sha1_free = mbedtls_sha1_hw_free; - ctx->mbedtls_sha1_clone = mbedtls_sha1_hw_clone; - ctx->mbedtls_sha1_starts = mbedtls_sha1_hw_starts; - ctx->mbedtls_sha1_update = mbedtls_sha1_hw_update; - ctx->mbedtls_sha1_finish = mbedtls_sha1_hw_finish; - ctx->mbedtls_sha1_process = mbedtls_sha1_hw_process; + ctx->ishw = 1; + mbedtls_sha1_hw_init(&ctx->hw_ctx); } else { - ctx->mbedtls_sha1_init = mbedtls_sha1_sw_init; - ctx->mbedtls_sha1_free = mbedtls_sha1_sw_free; - ctx->mbedtls_sha1_clone = mbedtls_sha1_sw_clone; - ctx->mbedtls_sha1_starts = mbedtls_sha1_sw_starts; - ctx->mbedtls_sha1_update = mbedtls_sha1_sw_update; - ctx->mbedtls_sha1_finish = mbedtls_sha1_sw_finish; - ctx->mbedtls_sha1_process = mbedtls_sha1_sw_process; + ctx->ishw = 0; + mbedtls_sha1_sw_init(&ctx->sw_ctx); } - - ctx->mbedtls_sha1_init(ctx); } void mbedtls_sha1_free(mbedtls_sha1_context *ctx) @@ -56,17 +46,41 @@ void mbedtls_sha1_free(mbedtls_sha1_context *ctx) return; } - ctx->mbedtls_sha1_free(ctx); - - if (ctx->mbedtls_sha1_init == mbedtls_sha1_hw_init) { + if (ctx->ishw) { + mbedtls_sha1_hw_free(&ctx->hw_ctx); crypto_sha_release(); } + else { + mbedtls_sha1_sw_free(&ctx->sw_ctx); + } } void mbedtls_sha1_clone(mbedtls_sha1_context *dst, const mbedtls_sha1_context *src) { - *dst = *src; + if (src->ishw) { + // Clone S/W ctx from H/W ctx + dst->ishw = 0; + dst->sw_ctx.total[0] = src->hw_ctx.total; + dst->sw_ctx.total[1] = 0; + { + unsigned char output[20]; + crypto_sha_getinternstate(output, sizeof (output)); + dst->sw_ctx.state[0] = nu_get32_be(output); + dst->sw_ctx.state[1] = nu_get32_be(output + 4); + dst->sw_ctx.state[2] = nu_get32_be(output + 8); + dst->sw_ctx.state[3] = nu_get32_be(output + 12); + dst->sw_ctx.state[4] = nu_get32_be(output + 16); + } + memcpy(dst->sw_ctx.buffer, src->hw_ctx.buffer, src->hw_ctx.buffer_left); + if (src->hw_ctx.buffer_left == src->hw_ctx.blocksize) { + mbedtls_sha1_sw_process(&dst->sw_ctx, dst->sw_ctx.buffer); + } + } + else { + // Clone S/W ctx from S/W ctx + dst->sw_ctx = src->sw_ctx; + } } /* @@ -74,9 +88,12 @@ void mbedtls_sha1_clone(mbedtls_sha1_context *dst, */ void mbedtls_sha1_starts(mbedtls_sha1_context *ctx) { - ctx->mbedtls_sha1_starts(ctx); - - return; + if (ctx->ishw) { + mbedtls_sha1_hw_starts(&ctx->hw_ctx); + } + else { + mbedtls_sha1_sw_starts(&ctx->sw_ctx); + } } /* @@ -84,7 +101,12 @@ void mbedtls_sha1_starts(mbedtls_sha1_context *ctx) */ void mbedtls_sha1_update(mbedtls_sha1_context *ctx, const unsigned char *input, size_t ilen) { - ctx->mbedtls_sha1_update(ctx, input, ilen); + if (ctx->ishw) { + mbedtls_sha1_hw_update(&ctx->hw_ctx, input, ilen); + } + else { + mbedtls_sha1_sw_update(&ctx->sw_ctx, input, ilen); + } } /* @@ -92,12 +114,22 @@ void mbedtls_sha1_update(mbedtls_sha1_context *ctx, const unsigned char *input, */ void mbedtls_sha1_finish(mbedtls_sha1_context *ctx, unsigned char output[20]) { - ctx->mbedtls_sha1_finish(ctx, output); + if (ctx->ishw) { + mbedtls_sha1_hw_finish(&ctx->hw_ctx, output); + } + else { + mbedtls_sha1_sw_finish(&ctx->sw_ctx, output); + } } void mbedtls_sha1_process(mbedtls_sha1_context *ctx, const unsigned char data[64]) { - ctx->mbedtls_sha1_process(ctx, data); + if (ctx->ishw) { + mbedtls_sha1_hw_process(&ctx->hw_ctx, data); + } + else { + mbedtls_sha1_sw_process(&ctx->sw_ctx, data); + } } #endif /* MBEDTLS_SHA1_ALT */ diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt.h b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt.h index a4c3c7e5ccb..620a007ee69 100644 --- a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt.h +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt.h @@ -40,18 +40,9 @@ struct mbedtls_sha1_context_s; */ typedef struct mbedtls_sha1_context_s { - union { - crypto_sha_context hw_ctx; - mbedtls_sha1_sw_context sw_ctx; - }; - - void (*mbedtls_sha1_init)(struct mbedtls_sha1_context_s *ctx); - void (*mbedtls_sha1_free)(struct mbedtls_sha1_context_s *ctx); - void (*mbedtls_sha1_clone)(struct mbedtls_sha1_context_s *dst, const struct mbedtls_sha1_context_s *src); - void (*mbedtls_sha1_starts)(struct mbedtls_sha1_context_s *ctx); - void (*mbedtls_sha1_update)(struct mbedtls_sha1_context_s *ctx, const unsigned char *input, size_t ilen); - void (*mbedtls_sha1_finish)(struct mbedtls_sha1_context_s *ctx, unsigned char output[20]); - void (*mbedtls_sha1_process)(struct mbedtls_sha1_context_s *ctx, const unsigned char data[64]); + int ishw; + crypto_sha_context hw_ctx; + mbedtls_sha1_sw_context sw_ctx; } mbedtls_sha1_context; diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt_sw.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt_sw.c index 946366e1b06..7f2d6d35cd1 100644 --- a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt_sw.c +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt_sw.c @@ -65,32 +65,30 @@ static void mbedtls_zeroize( void *v, size_t n ) { } #endif -void mbedtls_sha1_sw_init( mbedtls_sha1_context *ctx ) +void mbedtls_sha1_sw_init( mbedtls_sha1_sw_context *ctx ) { - memset( &ctx->sw_ctx, 0, sizeof( ctx->sw_ctx ) ); + memset( ctx, 0, sizeof( mbedtls_sha1_sw_context ) ); } -void mbedtls_sha1_sw_free( mbedtls_sha1_context *ctx ) +void mbedtls_sha1_sw_free( mbedtls_sha1_sw_context *ctx ) { if( ctx == NULL ) return; - mbedtls_zeroize( &ctx->sw_ctx, sizeof( ctx->sw_ctx ) ); + mbedtls_zeroize( ctx, sizeof( mbedtls_sha1_sw_context ) ); } -void mbedtls_sha1_sw_clone( mbedtls_sha1_context *dst, - const mbedtls_sha1_context *src ) +void mbedtls_sha1_sw_clone( mbedtls_sha1_sw_context *dst, + const mbedtls_sha1_sw_context *src ) { - dst->sw_ctx = src->sw_ctx; + *dst = *src; } /* * SHA-1 context setup */ -void mbedtls_sha1_sw_starts( mbedtls_sha1_context *ctx_ ) +void mbedtls_sha1_sw_starts( mbedtls_sha1_sw_context *ctx ) { - mbedtls_sha1_sw_context *ctx = &ctx_->sw_ctx; - ctx->total[0] = 0; ctx->total[1] = 0; @@ -101,10 +99,8 @@ void mbedtls_sha1_sw_starts( mbedtls_sha1_context *ctx_ ) ctx->state[4] = 0xC3D2E1F0; } -void mbedtls_sha1_sw_process( mbedtls_sha1_context *ctx_, const unsigned char data[64] ) +void mbedtls_sha1_sw_process( mbedtls_sha1_sw_context *ctx, const unsigned char data[64] ) { - mbedtls_sha1_sw_context *ctx = &ctx_->sw_ctx; - uint32_t temp, W[16], A, B, C, D, E; GET_UINT32_BE( W[ 0], data, 0 ); @@ -262,10 +258,8 @@ void mbedtls_sha1_sw_process( mbedtls_sha1_context *ctx_, const unsigned char da /* * SHA-1 process buffer */ -void mbedtls_sha1_sw_update( mbedtls_sha1_context *ctx_, const unsigned char *input, size_t ilen ) +void mbedtls_sha1_sw_update( mbedtls_sha1_sw_context *ctx, const unsigned char *input, size_t ilen ) { - mbedtls_sha1_sw_context *ctx = &ctx_->sw_ctx; - size_t fill; uint32_t left; @@ -284,7 +278,7 @@ void mbedtls_sha1_sw_update( mbedtls_sha1_context *ctx_, const unsigned char *in if( left && ilen >= fill ) { memcpy( (void *) (ctx->buffer + left), input, fill ); - mbedtls_sha1_sw_process( ctx_, ctx->buffer ); + mbedtls_sha1_sw_process( ctx, ctx->buffer ); input += fill; ilen -= fill; left = 0; @@ -292,7 +286,7 @@ void mbedtls_sha1_sw_update( mbedtls_sha1_context *ctx_, const unsigned char *in while( ilen >= 64 ) { - mbedtls_sha1_sw_process( ctx_, input ); + mbedtls_sha1_sw_process( ctx, input ); input += 64; ilen -= 64; } @@ -312,10 +306,8 @@ static const unsigned char sha1_padding[64] = /* * SHA-1 final digest */ -void mbedtls_sha1_sw_finish( mbedtls_sha1_context *ctx_, unsigned char output[20] ) +void mbedtls_sha1_sw_finish( mbedtls_sha1_sw_context *ctx, unsigned char output[20] ) { - mbedtls_sha1_sw_context *ctx = &ctx_->sw_ctx; - uint32_t last, padn; uint32_t high, low; unsigned char msglen[8]; @@ -330,8 +322,8 @@ void mbedtls_sha1_sw_finish( mbedtls_sha1_context *ctx_, unsigned char output[20 last = ctx->total[0] & 0x3F; padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last ); - mbedtls_sha1_sw_update( ctx_, sha1_padding, padn ); - mbedtls_sha1_sw_update( ctx_, msglen, 8 ); + mbedtls_sha1_sw_update( ctx, sha1_padding, padn ); + mbedtls_sha1_sw_update( ctx, msglen, 8 ); PUT_UINT32_BE( ctx->state[0], output, 0 ); PUT_UINT32_BE( ctx->state[1], output, 4 ); diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt_sw.h b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt_sw.h index 4b0ab56f509..9d138abb8ac 100644 --- a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt_sw.h +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt_sw.h @@ -39,8 +39,6 @@ extern "C" { #endif -struct mbedtls_sha1_context_s; - /** * \brief SHA-1 context structure */ @@ -57,14 +55,14 @@ mbedtls_sha1_sw_context; * * \param ctx SHA-1 context to be initialized */ -void mbedtls_sha1_sw_init( struct mbedtls_sha1_context_s *ctx ); +void mbedtls_sha1_sw_init( mbedtls_sha1_sw_context *ctx ); /** * \brief Clear SHA-1 context * * \param ctx SHA-1 context to be cleared */ -void mbedtls_sha1_sw_free( struct mbedtls_sha1_context_s *ctx ); +void mbedtls_sha1_sw_free( mbedtls_sha1_sw_context *ctx ); /** * \brief Clone (the state of) a SHA-1 context @@ -72,15 +70,15 @@ void mbedtls_sha1_sw_free( struct mbedtls_sha1_context_s *ctx ); * \param dst The destination context * \param src The context to be cloned */ -void mbedtls_sha1_sw_clone( struct mbedtls_sha1_context_s *dst, - const struct mbedtls_sha1_context_s *src ); +void mbedtls_sha1_sw_clone( mbedtls_sha1_sw_context *dst, + const mbedtls_sha1_sw_context *src ); /** * \brief SHA-1 context setup * * \param ctx context to be initialized */ -void mbedtls_sha1_sw_starts( struct mbedtls_sha1_context_s *ctx ); +void mbedtls_sha1_sw_starts( mbedtls_sha1_sw_context *ctx ); /** * \brief SHA-1 process buffer @@ -89,7 +87,7 @@ void mbedtls_sha1_sw_starts( struct mbedtls_sha1_context_s *ctx ); * \param input buffer holding the data * \param ilen length of the input data */ -void mbedtls_sha1_sw_update( struct mbedtls_sha1_context_s *ctx, const unsigned char *input, size_t ilen ); +void mbedtls_sha1_sw_update( mbedtls_sha1_sw_context *ctx, const unsigned char *input, size_t ilen ); /** * \brief SHA-1 final digest @@ -97,10 +95,10 @@ void mbedtls_sha1_sw_update( struct mbedtls_sha1_context_s *ctx, const unsigned * \param ctx SHA-1 context * \param output SHA-1 checksum result */ -void mbedtls_sha1_sw_finish( struct mbedtls_sha1_context_s *ctx, unsigned char output[20] ); +void mbedtls_sha1_sw_finish( mbedtls_sha1_sw_context *ctx, unsigned char output[20] ); /* Internal use */ -void mbedtls_sha1_sw_process( struct mbedtls_sha1_context_s *ctx, const unsigned char data[64] ); +void mbedtls_sha1_sw_process( mbedtls_sha1_sw_context *ctx, const unsigned char data[64] ); #ifdef __cplusplus } diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt.c index 96859ef47bd..221a97ff3d4 100644 --- a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt.c +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt.c @@ -25,29 +25,19 @@ #include "sha256_alt.h" #include "crypto-misc.h" +#include "nu_bitutil.h" +#include "string.h" void mbedtls_sha256_init(mbedtls_sha256_context *ctx) { if (crypto_sha_acquire()) { - ctx->mbedtls_sha256_init = mbedtls_sha256_hw_init; - ctx->mbedtls_sha256_free = mbedtls_sha256_hw_free; - ctx->mbedtls_sha256_clone = mbedtls_sha256_hw_clone; - ctx->mbedtls_sha256_starts = mbedtls_sha256_hw_starts; - ctx->mbedtls_sha256_update = mbedtls_sha256_hw_update; - ctx->mbedtls_sha256_finish = mbedtls_sha256_hw_finish; - ctx->mbedtls_sha256_process = mbedtls_sha256_hw_process; + ctx->ishw = 1; + mbedtls_sha256_hw_init(&ctx->hw_ctx); } else { - ctx->mbedtls_sha256_init = mbedtls_sha256_sw_init; - ctx->mbedtls_sha256_free = mbedtls_sha256_sw_free; - ctx->mbedtls_sha256_clone = mbedtls_sha256_sw_clone; - ctx->mbedtls_sha256_starts = mbedtls_sha256_sw_starts; - ctx->mbedtls_sha256_update = mbedtls_sha256_sw_update; - ctx->mbedtls_sha256_finish = mbedtls_sha256_sw_finish; - ctx->mbedtls_sha256_process = mbedtls_sha256_sw_process; + ctx->ishw = 0; + mbedtls_sha256_sw_init(&ctx->sw_ctx); } - - ctx->mbedtls_sha256_init(ctx); } void mbedtls_sha256_free(mbedtls_sha256_context *ctx) @@ -56,17 +46,45 @@ void mbedtls_sha256_free(mbedtls_sha256_context *ctx) return; } - ctx->mbedtls_sha256_free(ctx); - - if (ctx->mbedtls_sha256_init == mbedtls_sha256_hw_init) { + if (ctx->ishw) { + mbedtls_sha256_hw_free(&ctx->hw_ctx); crypto_sha_release(); } + else { + mbedtls_sha256_sw_free(&ctx->sw_ctx); + } } void mbedtls_sha256_clone(mbedtls_sha256_context *dst, const mbedtls_sha256_context *src) { - *dst = *src; + if (src->ishw) { + // Clone S/W ctx from H/W ctx + dst->ishw = 0; + dst->sw_ctx.total[0] = src->hw_ctx.total; + dst->sw_ctx.total[1] = 0; + { + unsigned char output[32]; + crypto_sha_getinternstate(output, sizeof (output)); + dst->sw_ctx.state[0] = nu_get32_be(output); + dst->sw_ctx.state[1] = nu_get32_be(output + 4); + dst->sw_ctx.state[2] = nu_get32_be(output + 8); + dst->sw_ctx.state[3] = nu_get32_be(output + 12); + dst->sw_ctx.state[4] = nu_get32_be(output + 16); + dst->sw_ctx.state[5] = nu_get32_be(output + 20); + dst->sw_ctx.state[6] = nu_get32_be(output + 24); + dst->sw_ctx.state[7] = nu_get32_be(output + 28); + } + memcpy(dst->sw_ctx.buffer, src->hw_ctx.buffer, src->hw_ctx.buffer_left); + dst->sw_ctx.is224 = src->hw_ctx.is224; + if (src->hw_ctx.buffer_left == src->hw_ctx.blocksize) { + mbedtls_sha256_sw_process(&dst->sw_ctx, dst->sw_ctx.buffer); + } + } + else { + // Clone S/W ctx from S/W ctx + dst->sw_ctx = src->sw_ctx; + } } /* @@ -74,9 +92,12 @@ void mbedtls_sha256_clone(mbedtls_sha256_context *dst, */ void mbedtls_sha256_starts(mbedtls_sha256_context *ctx, int is224) { - ctx->mbedtls_sha256_starts(ctx, is224); - - return; + if (ctx->ishw) { + mbedtls_sha256_hw_starts(&ctx->hw_ctx, is224); + } + else { + mbedtls_sha256_sw_starts(&ctx->sw_ctx, is224); + } } /* @@ -84,20 +105,35 @@ void mbedtls_sha256_starts(mbedtls_sha256_context *ctx, int is224) */ void mbedtls_sha256_update(mbedtls_sha256_context *ctx, const unsigned char *input, size_t ilen) { - ctx->mbedtls_sha256_update(ctx, input, ilen); + if (ctx->ishw) { + mbedtls_sha256_hw_update(&ctx->hw_ctx, input, ilen); + } + else { + mbedtls_sha256_sw_update(&ctx->sw_ctx, input, ilen); + } } /* * SHA-256 final digest */ -void mbedtls_sha256_finish(mbedtls_sha256_context *ctx, unsigned char output[20]) +void mbedtls_sha256_finish(mbedtls_sha256_context *ctx, unsigned char output[32]) { - ctx->mbedtls_sha256_finish(ctx, output); + if (ctx->ishw) { + mbedtls_sha256_hw_finish(&ctx->hw_ctx, output); + } + else { + mbedtls_sha256_sw_finish(&ctx->sw_ctx, output); + } } void mbedtls_sha256_process(mbedtls_sha256_context *ctx, const unsigned char data[64]) { - ctx->mbedtls_sha256_process(ctx, data); + if (ctx->ishw) { + mbedtls_sha256_hw_process(&ctx->hw_ctx, data); + } + else { + mbedtls_sha256_sw_process(&ctx->sw_ctx, data); + } } #endif /* MBEDTLS_SHA256_ALT */ diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt.h b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt.h index 4274fc86f33..6ea3c395610 100644 --- a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt.h +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt.h @@ -40,18 +40,9 @@ struct mbedtls_sha256_context_s; */ typedef struct mbedtls_sha256_context_s { - union { - crypto_sha_context hw_ctx; - mbedtls_sha256_sw_context sw_ctx; - }; - - void (*mbedtls_sha256_init)(struct mbedtls_sha256_context_s *ctx); - void (*mbedtls_sha256_free)(struct mbedtls_sha256_context_s *ctx); - void (*mbedtls_sha256_clone)(struct mbedtls_sha256_context_s *dst, const struct mbedtls_sha256_context_s *src); - void (*mbedtls_sha256_starts)(struct mbedtls_sha256_context_s *ctx, int is224); - void (*mbedtls_sha256_update)(struct mbedtls_sha256_context_s *ctx, const unsigned char *input, size_t ilen); - void (*mbedtls_sha256_finish)(struct mbedtls_sha256_context_s *ctx, unsigned char output[20]); - void (*mbedtls_sha256_process)(struct mbedtls_sha256_context_s *ctx, const unsigned char data[64]); + int ishw; + crypto_sha_context hw_ctx; + mbedtls_sha256_sw_context sw_ctx; } mbedtls_sha256_context; diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt_sw.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt_sw.c index 5d5a252c4af..f2dfb825c49 100644 --- a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt_sw.c +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt_sw.c @@ -65,32 +65,30 @@ do { \ } while( 0 ) #endif -void mbedtls_sha256_sw_init( mbedtls_sha256_context *ctx ) +void mbedtls_sha256_sw_init( mbedtls_sha256_sw_context *ctx ) { - memset( &ctx->sw_ctx, 0, sizeof( ctx->sw_ctx ) ); + memset( ctx, 0, sizeof( mbedtls_sha256_sw_context ) ); } -void mbedtls_sha256_sw_free( mbedtls_sha256_context *ctx ) +void mbedtls_sha256_sw_free( mbedtls_sha256_sw_context *ctx ) { if( ctx == NULL ) return; - mbedtls_zeroize( &ctx->sw_ctx, sizeof( ctx->sw_ctx ) ); + mbedtls_zeroize( ctx, sizeof( mbedtls_sha256_sw_context ) ); } -void mbedtls_sha256_sw_clone( mbedtls_sha256_context *dst, - const mbedtls_sha256_context *src ) +void mbedtls_sha256_sw_clone( mbedtls_sha256_sw_context *dst, + const mbedtls_sha256_sw_context *src ) { - dst->sw_ctx = src->sw_ctx; + *dst = *src; } /* * SHA-256 context setup */ -void mbedtls_sha256_sw_starts( mbedtls_sha256_context *ctx_, int is224 ) +void mbedtls_sha256_sw_starts( mbedtls_sha256_sw_context *ctx, int is224 ) { - mbedtls_sha256_sw_context *ctx = &ctx_->sw_ctx; - ctx->total[0] = 0; ctx->total[1] = 0; @@ -167,10 +165,8 @@ static const uint32_t K[] = d += temp1; h = temp1 + temp2; \ } -void mbedtls_sha256_sw_process( mbedtls_sha256_context *ctx_, const unsigned char data[64] ) +void mbedtls_sha256_sw_process( mbedtls_sha256_sw_context *ctx, const unsigned char data[64] ) { - mbedtls_sha256_sw_context *ctx = &ctx_->sw_ctx; - uint32_t temp1, temp2, W[64]; uint32_t A[8]; unsigned int i; @@ -227,11 +223,9 @@ void mbedtls_sha256_sw_process( mbedtls_sha256_context *ctx_, const unsigned cha /* * SHA-256 process buffer */ -void mbedtls_sha256_sw_update( mbedtls_sha256_context *ctx_, const unsigned char *input, +void mbedtls_sha256_sw_update( mbedtls_sha256_sw_context *ctx, const unsigned char *input, size_t ilen ) { - mbedtls_sha256_sw_context *ctx = &ctx_->sw_ctx; - size_t fill; uint32_t left; @@ -250,7 +244,7 @@ void mbedtls_sha256_sw_update( mbedtls_sha256_context *ctx_, const unsigned char if( left && ilen >= fill ) { memcpy( (void *) (ctx->buffer + left), input, fill ); - mbedtls_sha256_sw_process( ctx_, ctx->buffer ); + mbedtls_sha256_sw_process( ctx, ctx->buffer ); input += fill; ilen -= fill; left = 0; @@ -258,7 +252,7 @@ void mbedtls_sha256_sw_update( mbedtls_sha256_context *ctx_, const unsigned char while( ilen >= 64 ) { - mbedtls_sha256_sw_process( ctx_, input ); + mbedtls_sha256_sw_process( ctx, input ); input += 64; ilen -= 64; } @@ -278,10 +272,8 @@ static const unsigned char sha256_padding[64] = /* * SHA-256 final digest */ -void mbedtls_sha256_sw_finish( mbedtls_sha256_context *ctx_, unsigned char output[32] ) +void mbedtls_sha256_sw_finish( mbedtls_sha256_sw_context *ctx, unsigned char output[32] ) { - mbedtls_sha256_sw_context *ctx = &ctx_->sw_ctx; - uint32_t last, padn; uint32_t high, low; unsigned char msglen[8]; @@ -296,8 +288,8 @@ void mbedtls_sha256_sw_finish( mbedtls_sha256_context *ctx_, unsigned char outpu last = ctx->total[0] & 0x3F; padn = ( last < 56 ) ? ( 56 - last ) : ( 120 - last ); - mbedtls_sha256_sw_update( ctx_, sha256_padding, padn ); - mbedtls_sha256_sw_update( ctx_, msglen, 8 ); + mbedtls_sha256_sw_update( ctx, sha256_padding, padn ); + mbedtls_sha256_sw_update( ctx, msglen, 8 ); PUT_UINT32_BE( ctx->state[0], output, 0 ); PUT_UINT32_BE( ctx->state[1], output, 4 ); diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt_sw.h b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt_sw.h index 938b5920fcc..c1b72ea8f70 100644 --- a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt_sw.h +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt_sw.h @@ -39,8 +39,6 @@ extern "C" { #endif -struct mbedtls_sha256_context_s; - /** * \brief SHA-256 context structure */ @@ -58,14 +56,14 @@ mbedtls_sha256_sw_context; * * \param ctx SHA-256 context to be initialized */ -void mbedtls_sha256_sw_init( struct mbedtls_sha256_context_s *ctx ); +void mbedtls_sha256_sw_init( mbedtls_sha256_sw_context *ctx ); /** * \brief Clear SHA-256 context * * \param ctx SHA-256 context to be cleared */ -void mbedtls_sha256_sw_free( struct mbedtls_sha256_context_s *ctx ); +void mbedtls_sha256_sw_free( mbedtls_sha256_sw_context *ctx ); /** * \brief Clone (the state of) a SHA-256 context @@ -73,8 +71,8 @@ void mbedtls_sha256_sw_free( struct mbedtls_sha256_context_s *ctx ); * \param dst The destination context * \param src The context to be cloned */ -void mbedtls_sha256_sw_clone( struct mbedtls_sha256_context_s *dst, - const struct mbedtls_sha256_context_s *src ); +void mbedtls_sha256_sw_clone( mbedtls_sha256_sw_context *dst, + const mbedtls_sha256_sw_context *src ); /** * \brief SHA-256 context setup @@ -82,7 +80,7 @@ void mbedtls_sha256_sw_clone( struct mbedtls_sha256_context_s *dst, * \param ctx context to be initialized * \param is224 0 = use SHA256, 1 = use SHA224 */ -void mbedtls_sha256_sw_starts( struct mbedtls_sha256_context_s *ctx, int is224 ); +void mbedtls_sha256_sw_starts( mbedtls_sha256_sw_context *ctx, int is224 ); /** * \brief SHA-256 process buffer @@ -91,7 +89,7 @@ void mbedtls_sha256_sw_starts( struct mbedtls_sha256_context_s *ctx, int is224 ) * \param input buffer holding the data * \param ilen length of the input data */ -void mbedtls_sha256_sw_update( struct mbedtls_sha256_context_s *ctx, const unsigned char *input, +void mbedtls_sha256_sw_update( mbedtls_sha256_sw_context *ctx, const unsigned char *input, size_t ilen ); /** @@ -100,10 +98,10 @@ void mbedtls_sha256_sw_update( struct mbedtls_sha256_context_s *ctx, const unsig * \param ctx SHA-256 context * \param output SHA-224/256 checksum result */ -void mbedtls_sha256_sw_finish( struct mbedtls_sha256_context_s *ctx, unsigned char output[32] ); +void mbedtls_sha256_sw_finish( mbedtls_sha256_sw_context *ctx, unsigned char output[32] ); /* Internal use */ -void mbedtls_sha256_sw_process( struct mbedtls_sha256_context_s *ctx, const unsigned char data[64] ); +void mbedtls_sha256_sw_process( mbedtls_sha256_sw_context *ctx, const unsigned char data[64] ); #ifdef __cplusplus } diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.c index 0c71ae87879..3e1374aac75 100644 --- a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.c +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.c @@ -42,59 +42,79 @@ #include -static void crypto_sha_update(crypto_sha_context *ctx, const unsigned char *input, size_t ilen); -static void crypto_sha_getinternstate(unsigned char output[], size_t olen); -static void crypto_sha_lastword(crypto_sha_context *ctx, int islast); +void crypto_sha_update(crypto_sha_context *ctx, const unsigned char *input, size_t ilen); +void crypto_sha_update_nobuf(crypto_sha_context *ctx, const unsigned char *input, size_t ilen, int islast); +void crypto_sha_getinternstate(unsigned char output[], size_t olen); #endif /* MBEDTLS_SHA1_ALT || MBEDTLS_SHA256_ALT || MBEDTLS_SHA512_ALT */ #if defined(MBEDTLS_SHA1_ALT) -void mbedtls_sha1_hw_init(mbedtls_sha1_context *ctx) +void mbedtls_sha1_hw_init(crypto_sha_context *ctx) { crypto_init(); - memset(&ctx->hw_ctx, 0, sizeof(ctx->hw_ctx)); + memset(ctx, 0, sizeof(crypto_sha_context)); } -void mbedtls_sha1_hw_free(mbedtls_sha1_context *ctx) +void mbedtls_sha1_hw_free(crypto_sha_context *ctx) { if (ctx == NULL) { return; } - crypto_zeroize(&ctx->hw_ctx, sizeof(ctx->hw_ctx)); + crypto_zeroize(ctx, sizeof(crypto_sha_context)); } -void mbedtls_sha1_hw_clone(mbedtls_sha1_context *dst, - const mbedtls_sha1_context *src) +void mbedtls_sha1_hw_clone(crypto_sha_context *dst, + const crypto_sha_context *src) { - dst->hw_ctx = src->hw_ctx; + *dst = *src; } -void mbedtls_sha1_hw_starts(mbedtls_sha1_context *ctx) +void mbedtls_sha1_hw_starts(crypto_sha_context *ctx) { - ctx->hw_ctx.total = 0; - ctx->hw_ctx.lastword_size = 0; - ctx->hw_ctx.blocksize = 64; - ctx->hw_ctx.blocksize_mask = 0x3F; + // NOTE: mbedtls may call mbedtls_shaXXX_starts multiple times and then call the ending mbedtls_shaXXX_finish. Guard from it. + CRPT->SHA_CTL |= CRPT_SHA_CTL_STOP_Msk; + + ctx->total = 0; + ctx->buffer_left = 0; + ctx->blocksize = 64; + ctx->blocksize_mask = 0x3F; SHA_Open(SHA_MODE_SHA1, SHA_NO_SWAP); + // Ensure we have correct initial inernal states in SHA_DGST registers even though SHA H/W is not actually started. + CRPT->SHA_CTL |= CRPT_SHA_CTL_START_Msk; + return; } -void mbedtls_sha1_hw_update(mbedtls_sha1_context *ctx, const unsigned char *input, size_t ilen) +void mbedtls_sha1_hw_update(crypto_sha_context *ctx, const unsigned char *input, size_t ilen) { - crypto_sha_update(&ctx->hw_ctx, input, ilen); + crypto_sha_update(ctx, input, ilen); } -void mbedtls_sha1_hw_finish(mbedtls_sha1_context *ctx, unsigned char output[20]) +void mbedtls_sha1_hw_finish(crypto_sha_context *ctx, unsigned char output[20]) { - crypto_sha_lastword(&ctx->hw_ctx, 1); - crypto_sha_getinternstate(output, 20); + // H/W SHA cannot handle zero data well. Fall back to S/W SHA. + if (ctx->total) { + crypto_sha_update_nobuf(ctx, ctx->buffer, ctx->buffer_left, 1); + ctx->buffer_left = 0; + crypto_sha_getinternstate(output, 20); + + CRPT->SHA_CTL |= CRPT_SHA_CTL_STOP_Msk; + } + else { + mbedtls_sha1_sw_context ctx_sw; + + mbedtls_sha1_sw_init(&ctx_sw); + mbedtls_sha1_sw_starts(&ctx_sw); + mbedtls_sha1_sw_finish(&ctx_sw, output); + mbedtls_sha1_sw_free(&ctx_sw); + } } -void mbedtls_sha1_hw_process(mbedtls_sha1_context *ctx, const unsigned char data[64]) +void mbedtls_sha1_hw_process(crypto_sha_context *ctx, const unsigned char data[64]) { mbedtls_sha1_hw_update(ctx, data, 64); } @@ -103,52 +123,72 @@ void mbedtls_sha1_hw_process(mbedtls_sha1_context *ctx, const unsigned char data #if defined(MBEDTLS_SHA256_ALT) -void mbedtls_sha256_hw_init(mbedtls_sha256_context *ctx) +void mbedtls_sha256_hw_init(crypto_sha_context *ctx) { crypto_init(); - memset(&ctx->hw_ctx, 0, sizeof(ctx->hw_ctx)); + memset(ctx, 0, sizeof(crypto_sha_context)); } -void mbedtls_sha256_hw_free(mbedtls_sha256_context *ctx) +void mbedtls_sha256_hw_free(crypto_sha_context *ctx) { if (ctx == NULL) { return; } - crypto_zeroize(&ctx->hw_ctx, sizeof(ctx->hw_ctx)); + crypto_zeroize(ctx, sizeof(crypto_sha_context)); } -void mbedtls_sha256_hw_clone(mbedtls_sha256_context *dst, - const mbedtls_sha256_context *src) +void mbedtls_sha256_hw_clone(crypto_sha_context *dst, + const crypto_sha_context *src) { - dst->hw_ctx = src->hw_ctx; + *dst = *src; } -void mbedtls_sha256_hw_starts( mbedtls_sha256_context *ctx, int is224) +void mbedtls_sha256_hw_starts( crypto_sha_context *ctx, int is224) { - ctx->hw_ctx.total = 0; - ctx->hw_ctx.lastword_size = 0; - ctx->hw_ctx.blocksize = 64; - ctx->hw_ctx.blocksize_mask = 0x3F; - ctx->hw_ctx.is224 = is224; + // NOTE: mbedtls may call mbedtls_shaXXX_starts multiple times and then call the ending mbedtls_shaXXX_finish. Guard from it. + CRPT->SHA_CTL |= CRPT_SHA_CTL_STOP_Msk; + + ctx->total = 0; + ctx->buffer_left = 0; + ctx->blocksize = 64; + ctx->blocksize_mask = 0x3F; + ctx->is224 = is224; SHA_Open(is224 ? SHA_MODE_SHA224 : SHA_MODE_SHA256, SHA_NO_SWAP); + // Ensure we have correct initial inernal states in SHA_DGST registers even though SHA H/W is not actually started. + CRPT->SHA_CTL |= CRPT_SHA_CTL_START_Msk; + return; } -void mbedtls_sha256_hw_update(mbedtls_sha256_context *ctx, const unsigned char *input, size_t ilen) +void mbedtls_sha256_hw_update(crypto_sha_context *ctx, const unsigned char *input, size_t ilen) { - crypto_sha_update(&ctx->hw_ctx, input, ilen); + crypto_sha_update(ctx, input, ilen); } -void mbedtls_sha256_hw_finish(mbedtls_sha256_context *ctx, unsigned char output[32]) +void mbedtls_sha256_hw_finish(crypto_sha_context *ctx, unsigned char output[32]) { - crypto_sha_lastword(&ctx->hw_ctx, 1); - crypto_sha_getinternstate(output, ctx->hw_ctx.is224 ? 28 : 32); + // H/W SHA cannot handle zero data well. Fall back to S/W SHA. + if (ctx->total) { + crypto_sha_update_nobuf(ctx, ctx->buffer, ctx->buffer_left, 1); + ctx->buffer_left = 0; + crypto_sha_getinternstate(output, ctx->is224 ? 28 : 32); + + CRPT->SHA_CTL |= CRPT_SHA_CTL_STOP_Msk; + } + else { + mbedtls_sha256_sw_context ctx_sw; + + mbedtls_sha256_sw_init(&ctx_sw); + mbedtls_sha256_sw_starts(&ctx_sw, ctx->is224); + mbedtls_sha256_sw_finish(&ctx_sw, output); + mbedtls_sha256_sw_free(&ctx_sw); + } } -void mbedtls_sha256_hw_process(mbedtls_sha256_context *ctx, const unsigned char data[64]) +void mbedtls_sha256_hw_process(crypto_sha_context *ctx, const unsigned char data[64]) { mbedtls_sha256_hw_update(ctx, data, 64); } @@ -163,18 +203,54 @@ void crypto_sha_update(crypto_sha_context *ctx, const unsigned char *input, size return; } - crypto_sha_lastword(ctx, 0); + size_t fill = ctx->blocksize - ctx->buffer_left; ctx->total += (uint32_t) ilen; - const unsigned char *in_pos = input; - uint32_t rmn = ilen; + if (ctx->buffer_left && ilen >= fill) { + memcpy((void *) (ctx->buffer + ctx->buffer_left), input, fill); + input += fill; + ilen -= fill; + ctx->buffer_left += fill; + if (ilen) { + crypto_sha_update_nobuf(ctx, ctx->buffer, ctx->buffer_left, 0); + ctx->buffer_left = 0; + } + } + + while (ilen > ctx->blocksize) { + crypto_sha_update_nobuf(ctx, input, ctx->blocksize, 0); + input += ctx->blocksize; + ilen -= ctx->blocksize; + } + + if (ilen > 0) { + memcpy((void *) (ctx->buffer + ctx->buffer_left), input, ilen); + ctx->buffer_left += ilen; + } +} + +void crypto_sha_update_nobuf(crypto_sha_context *ctx, const unsigned char *input, size_t ilen, int islast) +{ + unsigned char *in_pos = input; + int rmn = ilen; uint32_t sha_ctl_start = (CRPT->SHA_CTL & ~(CRPT_SHA_CTL_DMALAST_Msk | CRPT_SHA_CTL_DMAEN_Msk)) | CRPT_SHA_CTL_START_Msk; - while (rmn > 4) { + while (rmn > 0) { CRPT->SHA_CTL = sha_ctl_start; uint32_t data = nu_get32_be(in_pos); + if (islast && rmn <= 4) { + uint32_t lastblock_size = ctx->total & ctx->blocksize_mask; + if (lastblock_size == 0) { + lastblock_size = ctx->blocksize; + } + CRPT->SHA_DMACNT = lastblock_size; + CRPT->SHA_CTL = sha_ctl_start | CRPT_SHA_CTL_DMALAST_Msk; + } + else { + CRPT->SHA_CTL = sha_ctl_start; + } while (! (CRPT->SHA_STS & CRPT_SHA_STS_DATINREQ_Msk)); CRPT->SHA_DATIN = data; @@ -182,12 +258,9 @@ void crypto_sha_update(crypto_sha_context *ctx, const unsigned char *input, size rmn -= 4; } - MBED_ASSERT(rmn > 0 && rmn <= 4); - unsigned char lastword_buf[4]; - memcpy(lastword_buf, in_pos, rmn); - memset(lastword_buf + rmn, 0x00, 4 - rmn); - ctx->lastword = nu_get32_be(lastword_buf); - ctx->lastword_size = rmn; + if (islast) { + while (CRPT->SHA_STS & CRPT_SHA_STS_BUSY_Msk); + } } void crypto_sha_getinternstate(unsigned char output[], size_t olen) @@ -204,33 +277,6 @@ void crypto_sha_getinternstate(unsigned char output[], size_t olen) } } -void crypto_sha_lastword(crypto_sha_context *ctx, int islast) -{ - uint32_t sha_ctl_start = (CRPT->SHA_CTL & ~(CRPT_SHA_CTL_DMALAST_Msk | CRPT_SHA_CTL_DMAEN_Msk)) | CRPT_SHA_CTL_START_Msk; - - if (ctx->lastword_size) { - if (islast) { - uint32_t lastblock_size = ctx->total & ctx->blocksize_mask; - if (lastblock_size == 0) { - lastblock_size = ctx->blocksize; - } - CRPT->SHA_DMACNT = lastblock_size; - CRPT->SHA_CTL = sha_ctl_start | CRPT_SHA_CTL_DMALAST_Msk; - } - else { - CRPT->SHA_CTL = sha_ctl_start; - } - while (! (CRPT->SHA_STS & CRPT_SHA_STS_DATINREQ_Msk)); - CRPT->SHA_DATIN = ctx->lastword; - - if (islast) { - while (CRPT->SHA_STS & CRPT_SHA_STS_BUSY_Msk); - } - - ctx->lastword_size = 0; - } -} - #endif /* MBEDTLS_SHA1_ALT || MBEDTLS_SHA256_ALT || MBEDTLS_SHA512_ALT */ #endif /* MBEDTLS_SHA1_C || MBEDTLS_SHA256_C || MBEDTLS_SHA512_C */ diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.h b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.h index 070433a6312..fb423ca71eb 100644 --- a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.h +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.h @@ -37,8 +37,8 @@ extern "C" { typedef struct { uint32_t total; /*!< number of bytes processed */ - uint32_t lastword; /*!< last word unprocessed */ - uint16_t lastword_size; /*!< number of bytes of last word unprocessed */ + unsigned char buffer[128]; /*!< data block being processed. Max of SHA-1/SHA-256/SHA-512 */ + uint16_t buffer_left; uint16_t blocksize; /*!< block size */ uint32_t blocksize_mask; /*!< block size mask */ @@ -46,34 +46,34 @@ typedef struct } crypto_sha_context; -#if defined(MBEDTLS_SHA1_ALT) +void crypto_sha_update(crypto_sha_context *ctx, const unsigned char *input, size_t ilen); +void crypto_sha_update_nobuf(crypto_sha_context *ctx, const unsigned char *input, size_t ilen, int islast); +void crypto_sha_getinternstate(unsigned char output[], size_t olen); -struct mbedtls_sha1_context_s; +#if defined(MBEDTLS_SHA1_ALT) -void mbedtls_sha1_hw_init( struct mbedtls_sha1_context_s *ctx ); -void mbedtls_sha1_hw_free( struct mbedtls_sha1_context_s *ctx ); -void mbedtls_sha1_hw_clone( struct mbedtls_sha1_context_s *dst, - const struct mbedtls_sha1_context_s *src ); -void mbedtls_sha1_hw_starts( struct mbedtls_sha1_context_s *ctx ); -void mbedtls_sha1_hw_update( struct mbedtls_sha1_context_s *ctx, const unsigned char *input, size_t ilen ); -void mbedtls_sha1_hw_finish( struct mbedtls_sha1_context_s *ctx, unsigned char output[20] ); -void mbedtls_sha1_hw_process( struct mbedtls_sha1_context_s *ctx, const unsigned char data[64] ); +void mbedtls_sha1_hw_init( crypto_sha_context *ctx ); +void mbedtls_sha1_hw_free( crypto_sha_context *ctx ); +void mbedtls_sha1_hw_clone( crypto_sha_context *dst, + const crypto_sha_context *src ); +void mbedtls_sha1_hw_starts( crypto_sha_context *ctx ); +void mbedtls_sha1_hw_update( crypto_sha_context *ctx, const unsigned char *input, size_t ilen ); +void mbedtls_sha1_hw_finish( crypto_sha_context *ctx, unsigned char output[20] ); +void mbedtls_sha1_hw_process( crypto_sha_context *ctx, const unsigned char data[64] ); #endif /* MBEDTLS_SHA1_ALT */ #if defined(MBEDTLS_SHA256_ALT) -struct mbedtls_sha256_context_s; - -void mbedtls_sha256_hw_init( struct mbedtls_sha256_context_s *ctx ); -void mbedtls_sha256_hw_free( struct mbedtls_sha256_context_s *ctx ); -void mbedtls_sha256_hw_clone( struct mbedtls_sha256_context_s *dst, - const struct mbedtls_sha256_context_s *src ); -void mbedtls_sha256_hw_starts( struct mbedtls_sha256_context_s *ctx, int is224 ); -void mbedtls_sha256_hw_update( struct mbedtls_sha256_context_s *ctx, const unsigned char *input, +void mbedtls_sha256_hw_init( crypto_sha_context *ctx ); +void mbedtls_sha256_hw_free( crypto_sha_context *ctx ); +void mbedtls_sha256_hw_clone( crypto_sha_context *dst, + const crypto_sha_context *src ); +void mbedtls_sha256_hw_starts( crypto_sha_context *ctx, int is224 ); +void mbedtls_sha256_hw_update( crypto_sha_context *ctx, const unsigned char *input, size_t ilen ); -void mbedtls_sha256_hw_finish( struct mbedtls_sha256_context_s *ctx, unsigned char output[32] ); -void mbedtls_sha256_hw_process( struct mbedtls_sha256_context_s *ctx, const unsigned char data[64] ); +void mbedtls_sha256_hw_finish( crypto_sha_context *ctx, unsigned char output[32] ); +void mbedtls_sha256_hw_process( crypto_sha_context *ctx, const unsigned char data[64] ); #endif /* MBEDTLS_SHA256_ALT */ From d77082f402ac9dfe02423d15b80c5eb87b13f643 Mon Sep 17 00:00:00 2001 From: ccli8 Date: Mon, 5 Sep 2016 10:42:59 +0800 Subject: [PATCH 34/89] Fix no wait for finish of SHA block process --- .../TARGET_NUC472/crypto/sha/sha_alt_hw.c | 69 ++++++++++++++++--- 1 file changed, 60 insertions(+), 9 deletions(-) diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.c index 3e1374aac75..4f26b808d59 100644 --- a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.c +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.c @@ -232,23 +232,49 @@ void crypto_sha_update(crypto_sha_context *ctx, const unsigned char *input, size void crypto_sha_update_nobuf(crypto_sha_context *ctx, const unsigned char *input, size_t ilen, int islast) { - unsigned char *in_pos = input; + // Accept only: + // 1. Last block which may be incomplete + // 2. Non-last block which is complete + MBED_ASSERT(islast || ilen == ctx->blocksize); + + const unsigned char *in_pos = input; int rmn = ilen; uint32_t sha_ctl_start = (CRPT->SHA_CTL & ~(CRPT_SHA_CTL_DMALAST_Msk | CRPT_SHA_CTL_DMAEN_Msk)) | CRPT_SHA_CTL_START_Msk; + uint32_t sha_opmode = (CRPT->SHA_CTL & CRPT_SHA_CTL_OPMODE_Msk) >> CRPT_SHA_CTL_OPMODE_Pos; + uint32_t DGST0_old, DGST1_old, DGST2_old, DGST3_old, DGST4_old, DGST5_old, DGST6_old, DGST7_old; while (rmn > 0) { CRPT->SHA_CTL = sha_ctl_start; uint32_t data = nu_get32_be(in_pos); - if (islast && rmn <= 4) { - uint32_t lastblock_size = ctx->total & ctx->blocksize_mask; - if (lastblock_size == 0) { - lastblock_size = ctx->blocksize; + if (rmn <= 4) { // Last word of a (in)complete block + if (islast) { + uint32_t lastblock_size = ctx->total & ctx->blocksize_mask; + if (lastblock_size == 0) { + lastblock_size = ctx->blocksize; + } + CRPT->SHA_DMACNT = lastblock_size; + CRPT->SHA_CTL = sha_ctl_start | CRPT_SHA_CTL_DMALAST_Msk; + } + else { + switch (sha_opmode) { + case SHA_MODE_SHA256: + DGST7_old = CRPT->SHA_DGST7; + case SHA_MODE_SHA224: + DGST5_old = CRPT->SHA_DGST5; + DGST6_old = CRPT->SHA_DGST6; + case SHA_MODE_SHA1: + DGST0_old = CRPT->SHA_DGST0; + DGST1_old = CRPT->SHA_DGST1; + DGST2_old = CRPT->SHA_DGST2; + DGST3_old = CRPT->SHA_DGST3; + DGST4_old = CRPT->SHA_DGST4; + } + + CRPT->SHA_CTL = sha_ctl_start; } - CRPT->SHA_DMACNT = lastblock_size; - CRPT->SHA_CTL = sha_ctl_start | CRPT_SHA_CTL_DMALAST_Msk; } - else { + else { // Non-last word of a complete block CRPT->SHA_CTL = sha_ctl_start; } while (! (CRPT->SHA_STS & CRPT_SHA_STS_DATINREQ_Msk)); @@ -258,9 +284,34 @@ void crypto_sha_update_nobuf(crypto_sha_context *ctx, const unsigned char *input rmn -= 4; } - if (islast) { + if (islast) { // Finish of last block while (CRPT->SHA_STS & CRPT_SHA_STS_BUSY_Msk); } + else { // Finish of non-last block + // No H/W flag to indicate finish of non-last block process. + // Values of SHA_DGSTx registers will change as last word of the block is input, so use it for judgement. + int isfinish = 0; + while (! isfinish) { + switch (sha_opmode) { + case SHA_MODE_SHA256: + if (DGST7_old != CRPT->SHA_DGST7) { + isfinish = 1; + break; + } + case SHA_MODE_SHA224: + if (DGST5_old != CRPT->SHA_DGST5 || DGST6_old != CRPT->SHA_DGST6) { + isfinish = 1; + break; + } + case SHA_MODE_SHA1: + if (DGST0_old != CRPT->SHA_DGST0 || DGST1_old != CRPT->SHA_DGST1 || DGST2_old != CRPT->SHA_DGST2 || + DGST3_old != CRPT->SHA_DGST3 || DGST4_old != CRPT->SHA_DGST4) { + isfinish = 1; + break; + } + } + } + } } void crypto_sha_getinternstate(unsigned char output[], size_t olen) From 31ed4137560bcddedb53f89bea1219d3aeec6e62 Mon Sep 17 00:00:00 2001 From: cyliangtw Date: Mon, 5 Sep 2016 22:23:22 +0800 Subject: [PATCH 35/89] aes_alt support GCC --- .../TARGET_NUC472/crypto/aes/aes_alt.c | 125 +++++++++--------- 1 file changed, 63 insertions(+), 62 deletions(-) diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c index b915f1ba96c..0430dbea0dd 100644 --- a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c @@ -97,7 +97,7 @@ static unsigned char channel_flag[4]={0x00,0x00,0x00,0x00}; // 0: idle, 1: busy static int channel_alloc() { int i; - for(i=0; i< sizeof(channel_flag); i++) + for(i=0; i< (int)sizeof(channel_flag); i++) { if( channel_flag[i] == 0x00 ) { @@ -110,7 +110,7 @@ static int channel_alloc() static void channel_free(int i) { - if( i >=0 && i < sizeof(channel_flag) ) + if( i >=0 && i < (int)sizeof(channel_flag) ) channel_flag[i] = 0x00; } @@ -142,13 +142,13 @@ void mbedtls_aes_init( mbedtls_aes_context *ctx ) NVIC_EnableIRQ(CRPT_IRQn); AES_ENABLE_INT(); - mbedtls_trace("=== %s channel[%d]\r\n", __FUNCTION__, ctx->channel); + mbedtls_trace("=== %s channel[%d]\r\n", __FUNCTION__, (int)ctx->channel); } void mbedtls_aes_free( mbedtls_aes_context *ctx ) { - mbedtls_trace("=== %s channel[%d]\r\n", __FUNCTION__,ctx->channel); + mbedtls_trace("=== %s channel[%d]\r\n", __FUNCTION__,(int)ctx->channel); if( ctx == NULL ) return; @@ -248,7 +248,7 @@ static void __nvt_aes_crypt( mbedtls_aes_context *ctx, memcpy(au8InputData, input, dataSize); pIn = au8InputData; }else{ - pIn = input; + pIn = (unsigned char*)input; } if( (((uint32_t)output) & 0x03) || (dataSize%4)) // HW CFB output byte count must be multiple of word { @@ -338,7 +338,7 @@ int mbedtls_aes_crypt_cbc( mbedtls_aes_context *ctx, unsigned char temp[16]; int length = len; int blockChainLen; - mbedtls_trace("=== %s \r\n", __FUNCTION__); + mbedtls_trace("=== %s [0x%x]\r\n", __FUNCTION__,length); if( length % 16 ) return( MBEDTLS_ERR_AES_INVALID_INPUT_LENGTH ); @@ -383,6 +383,63 @@ int mbedtls_aes_crypt_cbc( mbedtls_aes_context *ctx, /* * AES-CFB128 buffer encryption/decryption */ +/* Support partial block encryption/decryption */ +static int __nvt_aes_crypt_partial_block_cfb128( mbedtls_aes_context *ctx, + int mode, + size_t length, + size_t *iv_off, + unsigned char iv[16], + const unsigned char *input, + unsigned char *output ) +{ + int c; + size_t n = *iv_off; + unsigned char iv_tmp[16]; + mbedtls_trace("=== %s \r\n", __FUNCTION__); + if( mode == MBEDTLS_AES_DECRYPT ) + { + while( length-- ) + { + if( n == 0) + mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, iv, iv ); + else if( ctx->opMode == AES_MODE_CFB) // For previous cryption is CFB mode + { + memcpy(iv_tmp, iv, n); + mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, ctx->prv_iv, iv ); + memcpy(iv, iv_tmp, n); + } + + c = *input++; + *output++ = (unsigned char)( c ^ iv[n] ); + iv[n] = (unsigned char) c; + + n = ( n + 1 ) & 0x0F; + } + } + else + { + while( length-- ) + { + if( n == 0 ) + mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, iv, iv ); + else if( ctx->opMode == AES_MODE_CFB) // For previous cryption is CFB mode + { + memcpy(iv_tmp, iv, n); + mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, ctx->prv_iv, iv ); + memcpy(iv, iv_tmp, n); + } + + iv[n] = *output++ = (unsigned char)( iv[n] ^ *input++ ); + + n = ( n + 1 ) & 0x0F; + } + } + + *iv_off = n; + + return( 0 ); +} + int mbedtls_aes_crypt_cfb128( mbedtls_aes_context *ctx, int mode, size_t len, @@ -456,62 +513,6 @@ int mbedtls_aes_crypt_cfb128( mbedtls_aes_context *ctx, return( 0 ); } -/* Support partial block encryption/decryption */ -static int __nvt_aes_crypt_partial_block_cfb128( mbedtls_aes_context *ctx, - int mode, - size_t length, - size_t *iv_off, - unsigned char iv[16], - const unsigned char *input, - unsigned char *output ) -{ - int c; - size_t n = *iv_off; - unsigned char iv_tmp[16]; - mbedtls_trace("=== %s \r\n", __FUNCTION__); - if( mode == MBEDTLS_AES_DECRYPT ) - { - while( length-- ) - { - if( n == 0) - mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, iv, iv ); - else if( ctx->opMode == AES_MODE_CFB) // For previous cryption is CFB mode - { - memcpy(iv_tmp, iv, n); - mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, ctx->prv_iv, iv ); - memcpy(iv, iv_tmp, n); - } - - c = *input++; - *output++ = (unsigned char)( c ^ iv[n] ); - iv[n] = (unsigned char) c; - - n = ( n + 1 ) & 0x0F; - } - } - else - { - while( length-- ) - { - if( n == 0 ) - mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, iv, iv ); - else if( ctx->opMode == AES_MODE_CFB) // For previous cryption is CFB mode - { - memcpy(iv_tmp, iv, n); - mbedtls_aes_crypt_ecb( ctx, MBEDTLS_AES_ENCRYPT, ctx->prv_iv, iv ); - memcpy(iv, iv_tmp, n); - } - - iv[n] = *output++ = (unsigned char)( iv[n] ^ *input++ ); - - n = ( n + 1 ) & 0x0F; - } - } - - *iv_off = n; - - return( 0 ); -} /* * AES-CFB8 buffer encryption/decryption From adac6c639af6c312d62954fd302cd8c79439e8fd Mon Sep 17 00:00:00 2001 From: ccli8 Date: Wed, 7 Sep 2016 14:53:53 +0800 Subject: [PATCH 36/89] Fix greentea lp_ticker failed tests --- .../TARGET_NUVOTON/TARGET_M451/lp_ticker.c | 65 ++++++++++--------- .../TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c | 63 +++++++++--------- 2 files changed, 67 insertions(+), 61 deletions(-) diff --git a/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c b/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c index 3e510fc9eef..b926e8c3c94 100644 --- a/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c @@ -24,16 +24,13 @@ #include "critical.h" // lp_ticker tick = us = timestamp -// clock of timer peripheral = ms -#define US_PER_TICK (1) +#define US_PER_TICK (1) +#define US_PER_SEC (1000 * 1000) -#define MS_PER_TMR2_INT (1000 * 10) -#define TMR2_FIRE_FREQ (1000 / MS_PER_TMR2_INT) -#define MS_PER_TMR2_CLK 1 -#define TMR2_CLK_FREQ (1000 / MS_PER_TMR2_CLK) - -#define MS_PER_TMR3_CLK 1 -#define TMR3_CLK_FREQ (1000 / MS_PER_TMR3_CLK) +#define US_PER_TMR2_INT (US_PER_SEC * 10) +#define TMR2_CLK_PER_SEC (__LXT) +#define TMR2_CLK_PER_TMR2_INT ((uint32_t) ((uint64_t) US_PER_TMR2_INT * TMR2_CLK_PER_SEC / US_PER_SEC)) +#define TMR3_CLK_PER_SEC (__LXT) static void tmr2_vec(void); static void tmr3_vec(void); @@ -41,8 +38,8 @@ static void lp_ticker_arm_cd(void); static int lp_ticker_inited = 0; static volatile uint32_t counter_major = 0; -static volatile int cd_major_minor_ms = 0; -static volatile int cd_minor_ms = 0; +static volatile int cd_major_minor_clks = 0; +static volatile int cd_minor_clks = 0; static volatile uint32_t wakeup_tick = (uint32_t) -1; // NOTE: To wake the system from power down mode, timer clock source must be ether LXT or LIRC. @@ -61,8 +58,8 @@ void lp_ticker_init(void) lp_ticker_inited = 1; counter_major = 0; - cd_major_minor_ms = 0; - cd_minor_ms = 0; + cd_major_minor_clks = 0; + cd_minor_clks = 0; wakeup_tick = (uint32_t) -1; // Reset module @@ -78,9 +75,10 @@ void lp_ticker_init(void) // Configure clock uint32_t clk_timer2 = TIMER_GetModuleClock((TIMER_T *) NU_MODBASE(timer2_modinit.modname)); - uint32_t prescale_timer2 = clk_timer2 / TMR2_CLK_FREQ - 1; + uint32_t prescale_timer2 = clk_timer2 / TMR2_CLK_PER_SEC - 1; MBED_ASSERT((prescale_timer2 != (uint32_t) -1) && prescale_timer2 <= 127); - uint32_t cmp_timer2 = MS_PER_TMR2_INT / MS_PER_TMR2_CLK; + MBED_ASSERT((clk_timer2 % TMR2_CLK_PER_SEC) == 0); + uint32_t cmp_timer2 = TMR2_CLK_PER_TMR2_INT; MBED_ASSERT(cmp_timer2 >= TMR_CMP_MIN && cmp_timer2 <= TMR_CMP_MAX); // Continuous mode // NOTE: TIMER_CTL_CNTDATEN_Msk exists in NUC472, but not in M451. In M451, TIMER_CNT is updated continuously by default. @@ -113,8 +111,8 @@ timestamp_t lp_ticker_read() TIMER_T * timer2_base = (TIMER_T *) NU_MODBASE(timer2_modinit.modname); do { - uint64_t major_minor_ms; - uint32_t minor_ms; + uint64_t major_minor_clks; + uint32_t minor_clks; // NOTE: As TIMER_CNT = TIMER_CMP and counter_major has increased by one, TIMER_CNT doesn't change to 0 for one tick time. // NOTE: As TIMER_CNT = TIMER_CMP or TIMER_CNT = 0, counter_major (ISR) may not sync with TIMER_CNT. So skip and fetch stable one at the cost of 1 clock delay on this read. @@ -122,22 +120,22 @@ timestamp_t lp_ticker_read() core_util_critical_section_enter(); // NOTE: Order of reading minor_us/carry here is significant. - minor_ms = TIMER_GetCounter(timer2_base) * MS_PER_TMR2_CLK; + minor_clks = TIMER_GetCounter(timer2_base); uint32_t carry = (timer2_base->INTSTS & TIMER_INTSTS_TIF_Msk) ? 1 : 0; // When TIMER_CNT approaches TIMER_CMP and will wrap soon, we may get carry but TIMER_CNT not wrapped. Hanlde carefully carry == 1 && TIMER_CNT is near TIMER_CMP. - if (carry && minor_ms > (MS_PER_TMR2_INT / 2)) { - major_minor_ms = (counter_major + 1) * MS_PER_TMR2_INT; + if (carry && minor_clks > (TMR2_CLK_PER_TMR2_INT / 2)) { + major_minor_clks = (counter_major + 1) * TMR2_CLK_PER_TMR2_INT; } else { - major_minor_ms = (counter_major + carry) * MS_PER_TMR2_INT + minor_ms; + major_minor_clks = (counter_major + carry) * TMR2_CLK_PER_TMR2_INT + minor_clks; } core_util_critical_section_exit(); } - while (minor_ms == 0 || minor_ms == MS_PER_TMR2_INT); + while (minor_clks == 0 || minor_clks == TMR2_CLK_PER_TMR2_INT); // Add power-down compensation - return (major_minor_ms * 1000 / US_PER_TICK); + return ((uint64_t) major_minor_clks * US_PER_SEC / TMR3_CLK_PER_SEC / US_PER_TICK); } while (0); } @@ -151,8 +149,8 @@ void lp_ticker_set_interrupt(timestamp_t timestamp) int delta = (timestamp > now) ? (timestamp - now) : (uint32_t) ((uint64_t) timestamp + 0xFFFFFFFFu - now); // NOTE: If this event was in the past, arm an interrupt to be triggered immediately. - cd_major_minor_ms = delta * US_PER_TICK / 1000; - + cd_major_minor_clks = (uint64_t) delta * US_PER_TICK * TMR3_CLK_PER_SEC / US_PER_SEC; + lp_ticker_arm_cd(); } @@ -177,8 +175,12 @@ static void tmr3_vec(void) { TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(timer3_modinit.modname)); TIMER_ClearWakeupFlag((TIMER_T *) NU_MODBASE(timer3_modinit.modname)); - cd_major_minor_ms -= cd_minor_ms; - if (cd_major_minor_ms > 0) { + cd_major_minor_clks -= cd_minor_clks; + if (cd_major_minor_clks <= 0) { + // NOTE: lp_ticker_set_interrupt() may get called in lp_ticker_irq_handler(); + lp_ticker_irq_handler(); + } + else { lp_ticker_arm_cd(); } } @@ -191,15 +193,16 @@ static void lp_ticker_arm_cd(void) timer3_base->CTL |= TIMER_CTL_RSTCNT_Msk; // One-shot mode, Clock = 1 KHz uint32_t clk_timer3 = TIMER_GetModuleClock((TIMER_T *) NU_MODBASE(timer3_modinit.modname)); - uint32_t prescale_timer3 = clk_timer3 / TMR3_CLK_FREQ - 1; + uint32_t prescale_timer3 = clk_timer3 / TMR3_CLK_PER_SEC - 1; MBED_ASSERT((prescale_timer3 != (uint32_t) -1) && prescale_timer3 <= 127); + MBED_ASSERT((clk_timer3 % TMR3_CLK_PER_SEC) == 0); // NOTE: TIMER_CTL_CNTDATEN_Msk exists in NUC472, but not in M451. In M451, TIMER_CNT is updated continuously by default. timer3_base->CTL &= ~(TIMER_CTL_OPMODE_Msk | TIMER_CTL_PSC_Msk/* | TIMER_CTL_CNTDATEN_Msk*/); timer3_base->CTL |= TIMER_ONESHOT_MODE | prescale_timer3/* | TIMER_CTL_CNTDATEN_Msk*/; - cd_minor_ms = cd_major_minor_ms; - cd_minor_ms = NU_CLAMP(cd_minor_ms, TMR_CMP_MIN * MS_PER_TMR3_CLK, TMR_CMP_MAX * MS_PER_TMR3_CLK); - timer3_base->CMP = cd_minor_ms / MS_PER_TMR3_CLK; + cd_minor_clks = cd_major_minor_clks; + cd_minor_clks = NU_CLAMP(cd_minor_clks, TMR_CMP_MIN, TMR_CMP_MAX); + timer3_base->CMP = cd_minor_clks; TIMER_EnableInt(timer3_base); TIMER_EnableWakeup((TIMER_T *) NU_MODBASE(timer3_modinit.modname)); diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c b/targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c index 8e5611afc8c..4e969428d56 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c @@ -24,16 +24,13 @@ #include "critical.h" // lp_ticker tick = us = timestamp -// clock of timer peripheral = ms -#define US_PER_TICK (1) +#define US_PER_TICK (1) +#define US_PER_SEC (1000 * 1000) -#define MS_PER_TMR2_INT (1000 * 10) -#define TMR2_FIRE_FREQ (1000 / MS_PER_TMR2_INT) -#define MS_PER_TMR2_CLK 1 -#define TMR2_CLK_FREQ (1000 / MS_PER_TMR2_CLK) - -#define MS_PER_TMR3_CLK 1 -#define TMR3_CLK_FREQ (1000 / MS_PER_TMR3_CLK) +#define US_PER_TMR2_INT (US_PER_SEC * 10) +#define TMR2_CLK_PER_SEC (__LXT) +#define TMR2_CLK_PER_TMR2_INT ((uint32_t) ((uint64_t) US_PER_TMR2_INT * TMR2_CLK_PER_SEC / US_PER_SEC)) +#define TMR3_CLK_PER_SEC (__LXT) static void tmr2_vec(void); static void tmr3_vec(void); @@ -41,8 +38,8 @@ static void lp_ticker_arm_cd(void); static int lp_ticker_inited = 0; static volatile uint32_t counter_major = 0; -static volatile int cd_major_minor_ms = 0; -static volatile int cd_minor_ms = 0; +static volatile int cd_major_minor_clks = 0; +static volatile int cd_minor_clks = 0; static volatile uint32_t wakeup_tick = (uint32_t) -1; // NOTE: To wake the system from power down mode, timer clock source must be ether LXT or LIRC. @@ -61,8 +58,8 @@ void lp_ticker_init(void) lp_ticker_inited = 1; counter_major = 0; - cd_major_minor_ms = 0; - cd_minor_ms = 0; + cd_major_minor_clks = 0; + cd_minor_clks = 0; wakeup_tick = (uint32_t) -1; // Reset module @@ -78,9 +75,10 @@ void lp_ticker_init(void) // Configure clock uint32_t clk_timer2 = TIMER_GetModuleClock((TIMER_T *) NU_MODBASE(timer2_modinit.modname)); - uint32_t prescale_timer2 = clk_timer2 / TMR2_CLK_FREQ - 1; + uint32_t prescale_timer2 = clk_timer2 / TMR2_CLK_PER_SEC - 1; MBED_ASSERT((prescale_timer2 != (uint32_t) -1) && prescale_timer2 <= 127); - uint32_t cmp_timer2 = MS_PER_TMR2_INT / MS_PER_TMR2_CLK; + MBED_ASSERT((clk_timer2 % TMR2_CLK_PER_SEC) == 0); + uint32_t cmp_timer2 = TMR2_CLK_PER_TMR2_INT; MBED_ASSERT(cmp_timer2 >= TMR_CMP_MIN && cmp_timer2 <= TMR_CMP_MAX); // Continuous mode ((TIMER_T *) NU_MODBASE(timer2_modinit.modname))->CTL = TIMER_PERIODIC_MODE | prescale_timer2 | TIMER_CTL_CNTDATEN_Msk; @@ -112,8 +110,8 @@ timestamp_t lp_ticker_read() TIMER_T * timer2_base = (TIMER_T *) NU_MODBASE(timer2_modinit.modname); do { - uint64_t major_minor_ms; - uint32_t minor_ms; + uint64_t major_minor_clks; + uint32_t minor_clks; // NOTE: As TIMER_CNT = TIMER_CMP and counter_major has increased by one, TIMER_CNT doesn't change to 0 for one tick time. // NOTE: As TIMER_CNT = TIMER_CMP or TIMER_CNT = 0, counter_major (ISR) may not sync with TIMER_CNT. So skip and fetch stable one at the cost of 1 clock delay on this read. @@ -121,22 +119,22 @@ timestamp_t lp_ticker_read() core_util_critical_section_enter(); // NOTE: Order of reading minor_us/carry here is significant. - minor_ms = TIMER_GetCounter(timer2_base) * MS_PER_TMR2_CLK; + minor_clks = TIMER_GetCounter(timer2_base); uint32_t carry = (timer2_base->INTSTS & TIMER_INTSTS_TIF_Msk) ? 1 : 0; // When TIMER_CNT approaches TIMER_CMP and will wrap soon, we may get carry but TIMER_CNT not wrapped. Hanlde carefully carry == 1 && TIMER_CNT is near TIMER_CMP. - if (carry && minor_ms > (MS_PER_TMR2_INT / 2)) { - major_minor_ms = (counter_major + 1) * MS_PER_TMR2_INT; + if (carry && minor_clks > (TMR2_CLK_PER_TMR2_INT / 2)) { + major_minor_clks = (counter_major + 1) * TMR2_CLK_PER_TMR2_INT; } else { - major_minor_ms = (counter_major + carry) * MS_PER_TMR2_INT + minor_ms; + major_minor_clks = (counter_major + carry) * TMR2_CLK_PER_TMR2_INT + minor_clks; } core_util_critical_section_exit(); } - while (minor_ms == 0 || minor_ms == MS_PER_TMR2_INT); + while (minor_clks == 0 || minor_clks == TMR2_CLK_PER_TMR2_INT); // Add power-down compensation - return (major_minor_ms * 1000 / US_PER_TICK); + return ((uint64_t) major_minor_clks * US_PER_SEC / TMR3_CLK_PER_SEC / US_PER_TICK); } while (0); } @@ -150,7 +148,7 @@ void lp_ticker_set_interrupt(timestamp_t timestamp) int delta = (timestamp > now) ? (timestamp - now) : (uint32_t) ((uint64_t) timestamp + 0xFFFFFFFFu - now); // NOTE: If this event was in the past, arm an interrupt to be triggered immediately. - cd_major_minor_ms = delta * US_PER_TICK / 1000; + cd_major_minor_clks = (uint64_t) delta * US_PER_TICK * TMR3_CLK_PER_SEC / US_PER_SEC; lp_ticker_arm_cd(); } @@ -176,8 +174,12 @@ static void tmr3_vec(void) { TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(timer3_modinit.modname)); TIMER_ClearWakeupFlag((TIMER_T *) NU_MODBASE(timer3_modinit.modname)); - cd_major_minor_ms -= cd_minor_ms; - if (cd_major_minor_ms > 0) { + cd_major_minor_clks -= cd_minor_clks; + if (cd_major_minor_clks <= 0) { + // NOTE: lp_ticker_set_interrupt() may get called in lp_ticker_irq_handler(); + lp_ticker_irq_handler(); + } + else { lp_ticker_arm_cd(); } } @@ -190,14 +192,15 @@ static void lp_ticker_arm_cd(void) timer3_base->CTL |= TIMER_CTL_RSTCNT_Msk; // One-shot mode, Clock = 1 KHz uint32_t clk_timer3 = TIMER_GetModuleClock((TIMER_T *) NU_MODBASE(timer3_modinit.modname)); - uint32_t prescale_timer3 = clk_timer3 / TMR3_CLK_FREQ - 1; + uint32_t prescale_timer3 = clk_timer3 / TMR3_CLK_PER_SEC - 1; MBED_ASSERT((prescale_timer3 != (uint32_t) -1) && prescale_timer3 <= 127); + MBED_ASSERT((clk_timer3 % TMR3_CLK_PER_SEC) == 0); timer3_base->CTL &= ~(TIMER_CTL_OPMODE_Msk | TIMER_CTL_PSC_Msk | TIMER_CTL_CNTDATEN_Msk); timer3_base->CTL |= TIMER_ONESHOT_MODE | prescale_timer3 | TIMER_CTL_CNTDATEN_Msk; - cd_minor_ms = cd_major_minor_ms; - cd_minor_ms = NU_CLAMP(cd_minor_ms, TMR_CMP_MIN * MS_PER_TMR3_CLK, TMR_CMP_MAX * MS_PER_TMR3_CLK); - timer3_base->CMP = cd_minor_ms / MS_PER_TMR3_CLK; + cd_minor_clks = cd_major_minor_clks; + cd_minor_clks = NU_CLAMP(cd_minor_clks, TMR_CMP_MIN, TMR_CMP_MAX); + timer3_base->CMP = cd_minor_clks; TIMER_EnableInt(timer3_base); TIMER_EnableWakeup((TIMER_T *) NU_MODBASE(timer3_modinit.modname)); From 5ff2d6705fdb78a96a650eb0c305106d09473aa1 Mon Sep 17 00:00:00 2001 From: ccli8 Date: Thu, 8 Sep 2016 13:45:41 +0800 Subject: [PATCH 37/89] Fix us_ticker/lp_ticker alarm error Error occurs as newly scheduled alarm is behind now due to signed/unsigned comparison pitfall: -1 < 1u ==> 0 or 1 --- .../TARGET_NUVOTON/TARGET_M451/lp_ticker.c | 24 +++++++++++------ .../TARGET_NUVOTON/TARGET_M451/us_ticker.c | 27 ++++++++++++------- .../TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c | 24 +++++++++++------ .../TARGET_NUVOTON/TARGET_NUC472/us_ticker.c | 25 +++++++++++------ 4 files changed, 67 insertions(+), 33 deletions(-) diff --git a/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c b/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c index b926e8c3c94..84a4c9b36bd 100644 --- a/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c @@ -38,8 +38,8 @@ static void lp_ticker_arm_cd(void); static int lp_ticker_inited = 0; static volatile uint32_t counter_major = 0; -static volatile int cd_major_minor_clks = 0; -static volatile int cd_minor_clks = 0; +static volatile uint32_t cd_major_minor_clks = 0; +static volatile uint32_t cd_minor_clks = 0; static volatile uint32_t wakeup_tick = (uint32_t) -1; // NOTE: To wake the system from power down mode, timer clock source must be ether LXT or LIRC. @@ -148,10 +148,18 @@ void lp_ticker_set_interrupt(timestamp_t timestamp) TIMER_Stop((TIMER_T *) NU_MODBASE(timer3_modinit.modname)); int delta = (timestamp > now) ? (timestamp - now) : (uint32_t) ((uint64_t) timestamp + 0xFFFFFFFFu - now); - // NOTE: If this event was in the past, arm an interrupt to be triggered immediately. - cd_major_minor_clks = (uint64_t) delta * US_PER_TICK * TMR3_CLK_PER_SEC / US_PER_SEC; - - lp_ticker_arm_cd(); + if (delta > 0) { + cd_major_minor_clks = (uint64_t) delta * US_PER_TICK * TMR3_CLK_PER_SEC / US_PER_SEC; + lp_ticker_arm_cd(); + } + else { + cd_major_minor_clks = cd_minor_clks = 0; + /** + * This event was in the past. Set the interrupt as pending, but don't process it here. + * This prevents a recurive loop under heavy load which can lead to a stack overflow. + */ + NVIC_SetPendingIRQ(timer3_modinit.irq_n); + } } void lp_ticker_disable_interrupt(void) @@ -175,8 +183,8 @@ static void tmr3_vec(void) { TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(timer3_modinit.modname)); TIMER_ClearWakeupFlag((TIMER_T *) NU_MODBASE(timer3_modinit.modname)); - cd_major_minor_clks -= cd_minor_clks; - if (cd_major_minor_clks <= 0) { + cd_major_minor_clks = (cd_major_minor_clks > cd_minor_clks) ? (cd_major_minor_clks - cd_minor_clks) : 0; + if (cd_major_minor_clks == 0) { // NOTE: lp_ticker_set_interrupt() may get called in lp_ticker_irq_handler(); lp_ticker_irq_handler(); } diff --git a/targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c b/targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c index ab78dcca000..63f09670ea8 100644 --- a/targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c @@ -45,8 +45,8 @@ static void us_ticker_arm_cd(void); static int us_ticker_inited = 0; static volatile uint32_t counter_major = 0; static volatile uint32_t pd_comp_us = 0; // Power-down compenstaion for normal counter -static volatile int cd_major_minor_us = 0; -static volatile int cd_minor_us = 0; +static volatile uint32_t cd_major_minor_us = 0; +static volatile uint32_t cd_minor_us = 0; static volatile int cd_hires_tmr_armed = 0; // Flag of armed or not of hi-res timer for CD counter // NOTE: PCLK is set up in mbed_sdk_init(), invocation of which must be before C++ global object constructor. See init_api.c for details. @@ -116,7 +116,7 @@ uint32_t us_ticker_read() do { uint32_t major_minor_us; - uint32_t minor_us; + uint32_t minor_us; // NOTE: As TIMER_CNT = TIMER_CMP and counter_major has increased by one, TIMER_CNT doesn't change to 0 for one tick time. // NOTE: As TIMER_CNT = TIMER_CMP or TIMER_CNT = 0, counter_major (ISR) may not sync with TIMER_CNT. So skip and fetch stable one at the cost of 1 clock delay on this read. @@ -157,12 +157,21 @@ void us_ticker_clear_interrupt(void) void us_ticker_set_interrupt(timestamp_t timestamp) { TIMER_Stop((TIMER_T *) NU_MODBASE(timer1lores_modinit.modname)); + cd_hires_tmr_armed = 0; int delta = (int) (timestamp - us_ticker_read()); - // NOTE: If this event was in the past, arm an interrupt to be triggered immediately. - cd_major_minor_us = delta * US_PER_TICK; - - us_ticker_arm_cd(); + if (delta > 0) { + cd_major_minor_us = delta * US_PER_TICK; + us_ticker_arm_cd(); + } + else { + cd_major_minor_us = cd_minor_us = 0; + /** + * This event was in the past. Set the interrupt as pending, but don't process it here. + * This prevents a recurive loop under heavy load which can lead to a stack overflow. + */ + NVIC_SetPendingIRQ(timer1lores_modinit.irq_n); + } } void us_ticker_prepare_sleep(struct sleep_s *obj) @@ -206,9 +215,9 @@ static void tmr0_vec(void) static void tmr1_vec(void) { TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(timer1lores_modinit.modname)); - cd_major_minor_us -= cd_minor_us; + cd_major_minor_us = (cd_major_minor_us > cd_minor_us) ? (cd_major_minor_us - cd_minor_us) : 0; cd_hires_tmr_armed = 0; - if (cd_major_minor_us <= 0) { + if (cd_major_minor_us == 0) { // NOTE: us_ticker_set_interrupt() may get called in us_ticker_irq_handler(); us_ticker_irq_handler(); } diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c b/targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c index 4e969428d56..2d05f33c502 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c @@ -38,8 +38,8 @@ static void lp_ticker_arm_cd(void); static int lp_ticker_inited = 0; static volatile uint32_t counter_major = 0; -static volatile int cd_major_minor_clks = 0; -static volatile int cd_minor_clks = 0; +static volatile uint32_t cd_major_minor_clks = 0; +static volatile uint32_t cd_minor_clks = 0; static volatile uint32_t wakeup_tick = (uint32_t) -1; // NOTE: To wake the system from power down mode, timer clock source must be ether LXT or LIRC. @@ -147,10 +147,18 @@ void lp_ticker_set_interrupt(timestamp_t timestamp) TIMER_Stop((TIMER_T *) NU_MODBASE(timer3_modinit.modname)); int delta = (timestamp > now) ? (timestamp - now) : (uint32_t) ((uint64_t) timestamp + 0xFFFFFFFFu - now); - // NOTE: If this event was in the past, arm an interrupt to be triggered immediately. - cd_major_minor_clks = (uint64_t) delta * US_PER_TICK * TMR3_CLK_PER_SEC / US_PER_SEC; - - lp_ticker_arm_cd(); + if (delta > 0) { + cd_major_minor_clks = (uint64_t) delta * US_PER_TICK * TMR3_CLK_PER_SEC / US_PER_SEC; + lp_ticker_arm_cd(); + } + else { + cd_major_minor_clks = cd_minor_clks = 0; + /** + * This event was in the past. Set the interrupt as pending, but don't process it here. + * This prevents a recurive loop under heavy load which can lead to a stack overflow. + */ + NVIC_SetPendingIRQ(timer3_modinit.irq_n); + } } void lp_ticker_disable_interrupt(void) @@ -174,8 +182,8 @@ static void tmr3_vec(void) { TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(timer3_modinit.modname)); TIMER_ClearWakeupFlag((TIMER_T *) NU_MODBASE(timer3_modinit.modname)); - cd_major_minor_clks -= cd_minor_clks; - if (cd_major_minor_clks <= 0) { + cd_major_minor_clks = (cd_major_minor_clks > cd_minor_clks) ? (cd_major_minor_clks - cd_minor_clks) : 0; + if (cd_major_minor_clks == 0) { // NOTE: lp_ticker_set_interrupt() may get called in lp_ticker_irq_handler(); lp_ticker_irq_handler(); } diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/us_ticker.c b/targets/TARGET_NUVOTON/TARGET_NUC472/us_ticker.c index f40474bbcd5..567c3ce7526 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/us_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/us_ticker.c @@ -45,8 +45,8 @@ static void us_ticker_arm_cd(void); static int us_ticker_inited = 0; static volatile uint32_t counter_major = 0; static volatile uint32_t pd_comp_us = 0; // Power-down compenstaion for normal counter -static volatile int cd_major_minor_us = 0; -static volatile int cd_minor_us = 0; +static volatile uint32_t cd_major_minor_us = 0; +static volatile uint32_t cd_minor_us = 0; static volatile int cd_hires_tmr_armed = 0; // Flag of armed or not of hi-res timer for CD counter // NOTE: PCLK is set up in mbed_sdk_init(), invocation of which must be before C++ global object constructor. See init_api.c for details. @@ -156,12 +156,21 @@ void us_ticker_clear_interrupt(void) void us_ticker_set_interrupt(timestamp_t timestamp) { TIMER_Stop((TIMER_T *) NU_MODBASE(timer1lores_modinit.modname)); + cd_hires_tmr_armed = 0; int delta = (int) (timestamp - us_ticker_read()); - // NOTE: If this event was in the past, arm an interrupt to be triggered immediately. - cd_major_minor_us = delta * US_PER_TICK; - - us_ticker_arm_cd(); + if (delta > 0) { + cd_major_minor_us = delta * US_PER_TICK; + us_ticker_arm_cd(); + } + else { + cd_major_minor_us = cd_minor_us = 0; + /** + * This event was in the past. Set the interrupt as pending, but don't process it here. + * This prevents a recurive loop under heavy load which can lead to a stack overflow. + */ + NVIC_SetPendingIRQ(timer1lores_modinit.irq_n); + } } void us_ticker_prepare_sleep(struct sleep_s *obj) @@ -205,9 +214,9 @@ static void tmr0_vec(void) static void tmr1_vec(void) { TIMER_ClearIntFlag((TIMER_T *) NU_MODBASE(timer1lores_modinit.modname)); - cd_major_minor_us -= cd_minor_us; + cd_major_minor_us = (cd_major_minor_us > cd_minor_us) ? (cd_major_minor_us - cd_minor_us) : 0; cd_hires_tmr_armed = 0; - if (cd_major_minor_us <= 0) { + if (cd_major_minor_us == 0) { // NOTE: us_ticker_set_interrupt() may get called in us_ticker_irq_handler(); us_ticker_irq_handler(); } From b35adc65695bb790ed3efc8a43e9ea84836aed7d Mon Sep 17 00:00:00 2001 From: ccli8 Date: Thu, 8 Sep 2016 14:53:31 +0800 Subject: [PATCH 38/89] Remove fix of lp_ticker wrap-around The original fix cannot handle both wrap-around and scheduled alarm behind now well. Leave wrap-around as known issue. --- targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c | 9 ++++++++- targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c | 9 ++++++++- 2 files changed, 16 insertions(+), 2 deletions(-) diff --git a/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c b/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c index 84a4c9b36bd..74cd964403c 100644 --- a/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_M451/lp_ticker.c @@ -147,7 +147,14 @@ void lp_ticker_set_interrupt(timestamp_t timestamp) TIMER_Stop((TIMER_T *) NU_MODBASE(timer3_modinit.modname)); - int delta = (timestamp > now) ? (timestamp - now) : (uint32_t) ((uint64_t) timestamp + 0xFFFFFFFFu - now); + /** + * FIXME: Scheduled alarm may go off incorrectly due to wrap around. + * Conditions in which delta is negative: + * 1. Wrap around + * 2. Newly scheduled alarm is behind now + */ + //int delta = (timestamp > now) ? (timestamp - now) : (uint32_t) ((uint64_t) timestamp + 0xFFFFFFFFu - now); + int delta = (int) (timestamp - now); if (delta > 0) { cd_major_minor_clks = (uint64_t) delta * US_PER_TICK * TMR3_CLK_PER_SEC / US_PER_SEC; lp_ticker_arm_cd(); diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c b/targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c index 2d05f33c502..5ed5a719c04 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/lp_ticker.c @@ -146,7 +146,14 @@ void lp_ticker_set_interrupt(timestamp_t timestamp) TIMER_Stop((TIMER_T *) NU_MODBASE(timer3_modinit.modname)); - int delta = (timestamp > now) ? (timestamp - now) : (uint32_t) ((uint64_t) timestamp + 0xFFFFFFFFu - now); + /** + * FIXME: Scheduled alarm may go off incorrectly due to wrap around. + * Conditions in which delta is negative: + * 1. Wrap around + * 2. Newly scheduled alarm is behind now + */ + //int delta = (timestamp > now) ? (timestamp - now) : (uint32_t) ((uint64_t) timestamp + 0xFFFFFFFFu - now); + int delta = (int) (timestamp - now); if (delta > 0) { cd_major_minor_clks = (uint64_t) delta * US_PER_TICK * TMR3_CLK_PER_SEC / US_PER_SEC; lp_ticker_arm_cd(); From e478d243f2f44ab09e0b49ffb631ede60ef192c8 Mon Sep 17 00:00:00 2001 From: cyliangtw Date: Thu, 8 Sep 2016 16:15:22 +0800 Subject: [PATCH 39/89] move aes ZI data into external SRAM for mbed client example --- .../TARGET_NUC472/device/TOOLCHAIN_ARM_STD/NUC472.sct | 2 ++ 1 file changed, 2 insertions(+) diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/device/TOOLCHAIN_ARM_STD/NUC472.sct b/targets/TARGET_NUVOTON/TARGET_NUC472/device/TOOLCHAIN_ARM_STD/NUC472.sct index dec93e2c831..685017098df 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/device/TOOLCHAIN_ARM_STD/NUC472.sct +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/device/TOOLCHAIN_ARM_STD/NUC472.sct @@ -23,6 +23,8 @@ LR_IROM1 0x00000000 { ; Too large to place into internal SRAM. So place into external SRAM instead. ER_XRAM1 0x60000000 { *lwip_* (+ZI) + aes.o (+ZI) + mesh_system.o (+ZI) } ; Extern SRAM for HEAP From 54db3f4dec343baa6431e617c28c612e6989f3ae Mon Sep 17 00:00:00 2001 From: ccli8 Date: Fri, 9 Sep 2016 10:48:36 +0800 Subject: [PATCH 40/89] Refine us_ticker.c code --- .../TARGET_NUVOTON/TARGET_M451/us_ticker.c | 57 ++++++++++--------- .../TARGET_NUVOTON/TARGET_NUC472/us_ticker.c | 57 ++++++++++--------- 2 files changed, 62 insertions(+), 52 deletions(-) diff --git a/targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c b/targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c index 63f09670ea8..aecb2373c71 100644 --- a/targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_M451/us_ticker.c @@ -21,22 +21,24 @@ #include "nu_miscutil.h" #include "critical.h" +// us_ticker tick = us = timestamp #define US_PER_TICK 1 +#define US_PER_SEC (1000 * 1000) -// NOTE: mbed-drivers-test-timeout test requires 100 us timer granularity. -// NOTE: us_ticker will alarm the system for its counting, so make the counting period as long as possible for better power saving. -#define US_PER_TMR0HIRES_INT (1000 * 1000 * 10) -#define TMR0HIRES_FIRE_FREQ (1000 * 1000 / US_PER_TMR0HIRES_INT) -#define US_PER_TMR0HIRES_CLK 1 -#define TMR0HIRES_CLK_FREQ (1000 * 1000 / US_PER_TMR0HIRES_CLK) +#define TMR0HIRES_CLK_PER_SEC (1000 * 1000) +#define TMR1HIRES_CLK_PER_SEC (1000 * 1000) +#define TMR1LORES_CLK_PER_SEC (__LIRC) + +#define US_PER_TMR0HIRES_CLK (US_PER_SEC / TMR0HIRES_CLK_PER_SEC) +#define US_PER_TMR1HIRES_CLK (US_PER_SEC / TMR1HIRES_CLK_PER_SEC) +#define US_PER_TMR1LORES_CLK (US_PER_SEC / TMR1LORES_CLK_PER_SEC) + +#define US_PER_TMR0HIRES_INT (1000 * 1000 * 10) +#define TMR0HIRES_CLK_PER_TMR0HIRES_INT ((uint32_t) ((uint64_t) US_PER_TMR0HIRES_INT * TMR0HIRES_CLK_PER_SEC / US_PER_SEC)) -#define US_PER_TMR1LORES_CLK 100 -#define TMR1LORES_CLK_FREQ (1000 * 1000 / US_PER_TMR1LORES_CLK) -#define US_PER_TMR1HIRES_CLK 1 -#define TMR1HIRES_CLK_FREQ (1000 * 1000 / US_PER_TMR1HIRES_CLK) // Determine to use lo-res/hi-res timer according to CD period -#define CD_TMR_SEP_US 1000 +#define US_TMR_SEP_CD 1000 static void tmr0_vec(void); static void tmr1_vec(void); @@ -88,9 +90,10 @@ void us_ticker_init(void) // Timer for normal counter uint32_t clk_timer0 = TIMER_GetModuleClock((TIMER_T *) NU_MODBASE(timer0hires_modinit.modname)); - uint32_t prescale_timer0 = clk_timer0 / TMR0HIRES_CLK_FREQ - 1; + uint32_t prescale_timer0 = clk_timer0 / TMR0HIRES_CLK_PER_SEC - 1; MBED_ASSERT((prescale_timer0 != (uint32_t) -1) && prescale_timer0 <= 127); - uint32_t cmp_timer0 = US_PER_TMR0HIRES_INT / US_PER_TMR0HIRES_CLK; + MBED_ASSERT((clk_timer0 % TMR0HIRES_CLK_PER_SEC) == 0); + uint32_t cmp_timer0 = TMR0HIRES_CLK_PER_TMR0HIRES_INT; MBED_ASSERT(cmp_timer0 >= TMR_CMP_MIN && cmp_timer0 <= TMR_CMP_MAX); // NOTE: TIMER_CTL_CNTDATEN_Msk exists in NUC472, but not in M451. In M451, TIMER_CNT is updated continuously by default. ((TIMER_T *) NU_MODBASE(timer0hires_modinit.modname))->CTL = TIMER_PERIODIC_MODE | prescale_timer0/* | TIMER_CTL_CNTDATEN_Msk*/; @@ -229,22 +232,22 @@ static void tmr1_vec(void) static void us_ticker_arm_cd(void) { TIMER_T * timer1_base = (TIMER_T *) NU_MODBASE(timer1lores_modinit.modname); - uint32_t tmr1_clk_freq; + uint32_t tmr1_clk_per_sec; uint32_t us_per_tmr1_clk; /** - * Reserve CD_TMR_SEP_US-plus alarm period for hi-res timer - * 1. period >= CD_TMR_SEP_US * 2. Divide into two rounds: - * CD_TMR_SEP_US * n (lo-res timer) - * CD_TMR_SEP_US + period % CD_TMR_SEP_US (hi-res timer) - * 2. period < CD_TMR_SEP_US * 2. Just one round: + * Reserve US_TMR_SEP_CD-plus alarm period for hi-res timer + * 1. period >= US_TMR_SEP_CD * 2. Divide into two rounds: + * US_TMR_SEP_CD * n (lo-res timer) + * US_TMR_SEP_CD + period % US_TMR_SEP_CD (hi-res timer) + * 2. period < US_TMR_SEP_CD * 2. Just one round: * period (hi-res timer) */ - if (cd_major_minor_us >= CD_TMR_SEP_US * 2) { - cd_minor_us = cd_major_minor_us - cd_major_minor_us % CD_TMR_SEP_US - CD_TMR_SEP_US; + if (cd_major_minor_us >= US_TMR_SEP_CD * 2) { + cd_minor_us = cd_major_minor_us - cd_major_minor_us % US_TMR_SEP_CD - US_TMR_SEP_CD; CLK_SetModuleClock(timer1lores_modinit.clkidx, timer1lores_modinit.clksrc, timer1lores_modinit.clkdiv); - tmr1_clk_freq = TMR1LORES_CLK_FREQ; + tmr1_clk_per_sec = TMR1LORES_CLK_PER_SEC; us_per_tmr1_clk = US_PER_TMR1LORES_CLK; cd_hires_tmr_armed = 0; @@ -253,7 +256,7 @@ static void us_ticker_arm_cd(void) cd_minor_us = cd_major_minor_us; CLK_SetModuleClock(timer1hires_modinit.clkidx, timer1hires_modinit.clksrc, timer1hires_modinit.clkdiv); - tmr1_clk_freq = TMR1HIRES_CLK_FREQ; + tmr1_clk_per_sec = TMR1HIRES_CLK_PER_SEC; us_per_tmr1_clk = US_PER_TMR1HIRES_CLK; cd_hires_tmr_armed = 1; @@ -263,14 +266,16 @@ static void us_ticker_arm_cd(void) timer1_base->CTL |= TIMER_CTL_RSTCNT_Msk; // One-shot mode, Clock = 1 MHz uint32_t clk_timer1 = TIMER_GetModuleClock((TIMER_T *) NU_MODBASE(timer1lores_modinit.modname)); - uint32_t prescale_timer1 = clk_timer1 / tmr1_clk_freq - 1; + uint32_t prescale_timer1 = clk_timer1 / tmr1_clk_per_sec - 1; MBED_ASSERT((prescale_timer1 != (uint32_t) -1) && prescale_timer1 <= 127); + MBED_ASSERT((clk_timer1 % tmr1_clk_per_sec) == 0); // NOTE: TIMER_CTL_CNTDATEN_Msk exists in NUC472, but not in M451. In M451, TIMER_CNT is updated continuously by default. timer1_base->CTL &= ~(TIMER_CTL_OPMODE_Msk | TIMER_CTL_PSC_Msk/* | TIMER_CTL_CNTDATEN_Msk*/); timer1_base->CTL |= TIMER_ONESHOT_MODE | prescale_timer1/* | TIMER_CTL_CNTDATEN_Msk*/; - cd_minor_us = NU_CLAMP(cd_minor_us, TMR_CMP_MIN * us_per_tmr1_clk, TMR_CMP_MAX * us_per_tmr1_clk); - timer1_base->CMP = cd_minor_us / us_per_tmr1_clk; + uint32_t cmp_timer1 = cd_minor_us / us_per_tmr1_clk; + cmp_timer1 = NU_CLAMP(cmp_timer1, TMR_CMP_MIN, TMR_CMP_MAX); + timer1_base->CMP = cmp_timer1; TIMER_EnableInt(timer1_base); TIMER_Start(timer1_base); diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/us_ticker.c b/targets/TARGET_NUVOTON/TARGET_NUC472/us_ticker.c index 567c3ce7526..de647ecf4a3 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/us_ticker.c +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/us_ticker.c @@ -21,22 +21,24 @@ #include "nu_miscutil.h" #include "critical.h" +// us_ticker tick = us = timestamp #define US_PER_TICK 1 +#define US_PER_SEC (1000 * 1000) -// NOTE: mbed-drivers-test-timeout test requires 100 us timer granularity. -// NOTE: us_ticker will alarm the system for its counting, so make the counting period as long as possible for better power saving. -#define US_PER_TMR0HIRES_INT (1000 * 1000 * 10) -#define TMR0HIRES_FIRE_FREQ (1000 * 1000 / US_PER_TMR0HIRES_INT) -#define US_PER_TMR0HIRES_CLK 1 -#define TMR0HIRES_CLK_FREQ (1000 * 1000 / US_PER_TMR0HIRES_CLK) +#define TMR0HIRES_CLK_PER_SEC (1000 * 1000) +#define TMR1HIRES_CLK_PER_SEC (1000 * 1000) +#define TMR1LORES_CLK_PER_SEC (__LIRC) + +#define US_PER_TMR0HIRES_CLK (US_PER_SEC / TMR0HIRES_CLK_PER_SEC) +#define US_PER_TMR1HIRES_CLK (US_PER_SEC / TMR1HIRES_CLK_PER_SEC) +#define US_PER_TMR1LORES_CLK (US_PER_SEC / TMR1LORES_CLK_PER_SEC) + +#define US_PER_TMR0HIRES_INT (1000 * 1000 * 10) +#define TMR0HIRES_CLK_PER_TMR0HIRES_INT ((uint32_t) ((uint64_t) US_PER_TMR0HIRES_INT * TMR0HIRES_CLK_PER_SEC / US_PER_SEC)) -#define US_PER_TMR1LORES_CLK 100 -#define TMR1LORES_CLK_FREQ (1000 * 1000 / US_PER_TMR1LORES_CLK) -#define US_PER_TMR1HIRES_CLK 1 -#define TMR1HIRES_CLK_FREQ (1000 * 1000 / US_PER_TMR1HIRES_CLK) // Determine to use lo-res/hi-res timer according to CD period -#define CD_TMR_SEP_US 1000 +#define US_TMR_SEP_CD 1000 static void tmr0_vec(void); static void tmr1_vec(void); @@ -88,9 +90,10 @@ void us_ticker_init(void) // Timer for normal counter uint32_t clk_timer0 = TIMER_GetModuleClock((TIMER_T *) NU_MODBASE(timer0hires_modinit.modname)); - uint32_t prescale_timer0 = clk_timer0 / TMR0HIRES_CLK_FREQ - 1; + uint32_t prescale_timer0 = clk_timer0 / TMR0HIRES_CLK_PER_SEC - 1; MBED_ASSERT((prescale_timer0 != (uint32_t) -1) && prescale_timer0 <= 127); - uint32_t cmp_timer0 = US_PER_TMR0HIRES_INT / US_PER_TMR0HIRES_CLK; + MBED_ASSERT((clk_timer0 % TMR0HIRES_CLK_PER_SEC) == 0); + uint32_t cmp_timer0 = TMR0HIRES_CLK_PER_TMR0HIRES_INT; MBED_ASSERT(cmp_timer0 >= TMR_CMP_MIN && cmp_timer0 <= TMR_CMP_MAX); ((TIMER_T *) NU_MODBASE(timer0hires_modinit.modname))->CTL = TIMER_PERIODIC_MODE | prescale_timer0 | TIMER_CTL_CNTDATEN_Msk; ((TIMER_T *) NU_MODBASE(timer0hires_modinit.modname))->CMP = cmp_timer0; @@ -228,22 +231,22 @@ static void tmr1_vec(void) static void us_ticker_arm_cd(void) { TIMER_T * timer1_base = (TIMER_T *) NU_MODBASE(timer1lores_modinit.modname); - uint32_t tmr1_clk_freq; + uint32_t tmr1_clk_per_sec; uint32_t us_per_tmr1_clk; /** - * Reserve CD_TMR_SEP_US-plus alarm period for hi-res timer - * 1. period >= CD_TMR_SEP_US * 2. Divide into two rounds: - * CD_TMR_SEP_US * n (lo-res timer) - * CD_TMR_SEP_US + period % CD_TMR_SEP_US (hi-res timer) - * 2. period < CD_TMR_SEP_US * 2. Just one round: + * Reserve US_TMR_SEP_CD-plus alarm period for hi-res timer + * 1. period >= US_TMR_SEP_CD * 2. Divide into two rounds: + * US_TMR_SEP_CD * n (lo-res timer) + * US_TMR_SEP_CD + period % US_TMR_SEP_CD (hi-res timer) + * 2. period < US_TMR_SEP_CD * 2. Just one round: * period (hi-res timer) */ - if (cd_major_minor_us >= CD_TMR_SEP_US * 2) { - cd_minor_us = cd_major_minor_us - cd_major_minor_us % CD_TMR_SEP_US - CD_TMR_SEP_US; + if (cd_major_minor_us >= US_TMR_SEP_CD * 2) { + cd_minor_us = cd_major_minor_us - cd_major_minor_us % US_TMR_SEP_CD - US_TMR_SEP_CD; CLK_SetModuleClock(timer1lores_modinit.clkidx, timer1lores_modinit.clksrc, timer1lores_modinit.clkdiv); - tmr1_clk_freq = TMR1LORES_CLK_FREQ; + tmr1_clk_per_sec = TMR1LORES_CLK_PER_SEC; us_per_tmr1_clk = US_PER_TMR1LORES_CLK; cd_hires_tmr_armed = 0; @@ -252,7 +255,7 @@ static void us_ticker_arm_cd(void) cd_minor_us = cd_major_minor_us; CLK_SetModuleClock(timer1hires_modinit.clkidx, timer1hires_modinit.clksrc, timer1hires_modinit.clkdiv); - tmr1_clk_freq = TMR1HIRES_CLK_FREQ; + tmr1_clk_per_sec = TMR1HIRES_CLK_PER_SEC; us_per_tmr1_clk = US_PER_TMR1HIRES_CLK; cd_hires_tmr_armed = 1; @@ -262,13 +265,15 @@ static void us_ticker_arm_cd(void) timer1_base->CTL |= TIMER_CTL_RSTCNT_Msk; // One-shot mode, Clock = 1 MHz uint32_t clk_timer1 = TIMER_GetModuleClock((TIMER_T *) NU_MODBASE(timer1lores_modinit.modname)); - uint32_t prescale_timer1 = clk_timer1 / tmr1_clk_freq - 1; + uint32_t prescale_timer1 = clk_timer1 / tmr1_clk_per_sec - 1; MBED_ASSERT((prescale_timer1 != (uint32_t) -1) && prescale_timer1 <= 127); + MBED_ASSERT((clk_timer1 % tmr1_clk_per_sec) == 0); timer1_base->CTL &= ~(TIMER_CTL_OPMODE_Msk | TIMER_CTL_PSC_Msk | TIMER_CTL_CNTDATEN_Msk); timer1_base->CTL |= TIMER_ONESHOT_MODE | prescale_timer1 | TIMER_CTL_CNTDATEN_Msk; - cd_minor_us = NU_CLAMP(cd_minor_us, TMR_CMP_MIN * us_per_tmr1_clk, TMR_CMP_MAX * us_per_tmr1_clk); - timer1_base->CMP = cd_minor_us / us_per_tmr1_clk; + uint32_t cmp_timer1 = cd_minor_us / us_per_tmr1_clk; + cmp_timer1 = NU_CLAMP(cmp_timer1, TMR_CMP_MIN, TMR_CMP_MAX); + timer1_base->CMP = cmp_timer1; TIMER_EnableInt(timer1_base); TIMER_Start(timer1_base); From e54aad91830bdfebbc650bdb0e365173d0bd2e24 Mon Sep 17 00:00:00 2001 From: ccli8 Date: Mon, 19 Sep 2016 13:29:52 +0800 Subject: [PATCH 41/89] Disable GPIO IRQ debounce by default Some application requires GPIO IRQ to be low latency. To complement it, open up GPIO IRQ debounce configuration through mbed_lib.json. --- .../TARGET_NUVOTON/TARGET_M451/mbed_lib.json | 18 +++++++++++ .../TARGET_NUC472/mbed_lib.json | 18 +++++++++++ .../TARGET_NUVOTON/TARGET_M451/gpio_irq_api.c | 29 ++++++++++++++--- .../TARGET_NUC472/gpio_irq_api.c | 31 ++++++++++++++++--- 4 files changed, 87 insertions(+), 9 deletions(-) create mode 100644 hal/targets/hal/TARGET_NUVOTON/TARGET_M451/mbed_lib.json create mode 100644 hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/mbed_lib.json diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_M451/mbed_lib.json b/hal/targets/hal/TARGET_NUVOTON/TARGET_M451/mbed_lib.json new file mode 100644 index 00000000000..3832d8f9ec2 --- /dev/null +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_M451/mbed_lib.json @@ -0,0 +1,18 @@ +{ + "name": "M451", + "config": { + "gpio-irq-debounce-enable": { + "help": "Enable GPIO IRQ debounce", + "value": 0 + }, + "gpio-irq-debounce-clock-source": { + "help": "Select GPIO IRQ debounce clock source: GPIO_DBCTL_DBCLKSRC_HCLK or GPIO_DBCTL_DBCLKSRC_LIRC", + "value": "GPIO_DBCTL_DBCLKSRC_LIRC" + }, + + "gpio-irq-debounce-sample-rate": { + "help": "Select GPIO IRQ debounce sample rate: GPIO_DBCTL_DBCLKSEL_1, GPIO_DBCTL_DBCLKSEL_2, GPIO_DBCTL_DBCLKSEL_4, ..., or GPIO_DBCTL_DBCLKSEL_32768", + "value": "GPIO_DBCTL_DBCLKSEL_16" + } + } +} diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/mbed_lib.json b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/mbed_lib.json new file mode 100644 index 00000000000..533c883f100 --- /dev/null +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/mbed_lib.json @@ -0,0 +1,18 @@ +{ + "name": "NUC472", + "config": { + "gpio-irq-debounce-enable": { + "help": "Enable GPIO IRQ debounce", + "value": 0 + }, + "gpio-irq-debounce-clock-source": { + "help": "Select GPIO IRQ debounce clock source: GPIO_DBCTL_DBCLKSRC_HCLK or GPIO_DBCTL_DBCLKSRC_IRC10K", + "value": "GPIO_DBCTL_DBCLKSRC_IRC10K" + }, + + "gpio-irq-debounce-sample-rate": { + "help": "Select GPIO IRQ debounce sample rate: GPIO_DBCTL_DBCLKSEL_1, GPIO_DBCTL_DBCLKSEL_2, GPIO_DBCTL_DBCLKSEL_4, ..., or GPIO_DBCTL_DBCLKSEL_32768", + "value": "GPIO_DBCTL_DBCLKSEL_16" + } + } +} diff --git a/targets/TARGET_NUVOTON/TARGET_M451/gpio_irq_api.c b/targets/TARGET_NUVOTON/TARGET_M451/gpio_irq_api.c index c2adef9954b..f08a6b01914 100644 --- a/targets/TARGET_NUVOTON/TARGET_M451/gpio_irq_api.c +++ b/targets/TARGET_NUVOTON/TARGET_M451/gpio_irq_api.c @@ -52,6 +52,24 @@ static struct nu_gpio_irq_var gpio_irq_var_arr[] = { #define NU_MAX_PORT (sizeof (gpio_irq_var_arr) / sizeof (gpio_irq_var_arr[0])) +#ifdef MBED_CONF_M451_GPIO_IRQ_DEBOUNCE_ENABLE +#define M451_GPIO_IRQ_DEBOUNCE_ENABLE MBED_CONF_M451_GPIO_IRQ_DEBOUNCE_ENABLE +#else +#define M451_GPIO_IRQ_DEBOUNCE_ENABLE 0 +#endif + +#ifdef MBED_CONF_M451_GPIO_IRQ_DEBOUNCE_CLOCK_SOURCE +#define M451_GPIO_IRQ_DEBOUNCE_CLOCK_SOURCE MBED_CONF_M451_GPIO_IRQ_DEBOUNCE_CLOCK_SOURCE +#else +#define M451_GPIO_IRQ_DEBOUNCE_CLOCK_SOURCE GPIO_DBCTL_DBCLKSRC_LIRC +#endif + +#ifdef MBED_CONF_M451_GPIO_IRQ_DEBOUNCE_SAMPLE_RATE +#define M451_GPIO_IRQ_DEBOUNCE_SAMPLE_RATE MBED_CONF_M451_GPIO_IRQ_DEBOUNCE_SAMPLE_RATE +#else +#define M451_GPIO_IRQ_DEBOUNCE_SAMPLE_RATE GPIO_DBCTL_DBCLKSEL_16 +#endif + int gpio_irq_init(gpio_irq_t *obj, PinName pin, gpio_irq_handler handler, uint32_t id) { if (pin == NC) { @@ -68,14 +86,19 @@ int gpio_irq_init(gpio_irq_t *obj, PinName pin, gpio_irq_handler handler, uint32 obj->irq_handler = (uint32_t) handler; obj->irq_id = id; + GPIO_T *gpio_base = NU_PORT_BASE(port_index); //gpio_set(pin); +#if M451_GPIO_IRQ_DEBOUNCE_ENABLE // Configure de-bounce clock source and sampling cycle time - GPIO_SET_DEBOUNCE_TIME(GPIO_DBCTL_DBCLKSRC_LIRC, GPIO_DBCTL_DBCLKSEL_16); + GPIO_SET_DEBOUNCE_TIME(M451_GPIO_IRQ_DEBOUNCE_CLOCK_SOURCE, M451_GPIO_IRQ_DEBOUNCE_SAMPLE_RATE); + GPIO_ENABLE_DEBOUNCE(gpio_base, 1 << pin_index); +#else + GPIO_DISABLE_DEBOUNCE(gpio_base, 1 << pin_index); +#endif struct nu_gpio_irq_var *var = gpio_irq_var_arr + port_index; - MBED_ASSERT(pin_index < NU_MAX_PIN_PER_PORT); var->obj_arr[pin_index] = obj; // NOTE: InterruptIn requires IRQ enabled by default. @@ -106,7 +129,6 @@ void gpio_irq_set(gpio_irq_t *obj, gpio_irq_event event, uint32_t enable) switch (event) { case IRQ_RISE: if (enable) { - GPIO_ENABLE_DEBOUNCE(gpio_base, 1 << pin_index); GPIO_EnableInt(gpio_base, pin_index, GPIO_INT_RISING); } else { @@ -116,7 +138,6 @@ void gpio_irq_set(gpio_irq_t *obj, gpio_irq_event event, uint32_t enable) case IRQ_FALL: if (enable) { - GPIO_ENABLE_DEBOUNCE(gpio_base, 1 << pin_index); GPIO_EnableInt(gpio_base, pin_index, GPIO_INT_FALLING); } else { diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/gpio_irq_api.c b/targets/TARGET_NUVOTON/TARGET_NUC472/gpio_irq_api.c index bf73913b5d8..62e036593c9 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/gpio_irq_api.c +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/gpio_irq_api.c @@ -58,6 +58,24 @@ static struct nu_gpio_irq_var gpio_irq_var_arr[] = { #define NU_MAX_PORT (sizeof (gpio_irq_var_arr) / sizeof (gpio_irq_var_arr[0])) +#ifdef MBED_CONF_NUC472_GPIO_IRQ_DEBOUNCE_ENABLE +#define NUC472_GPIO_IRQ_DEBOUNCE_ENABLE MBED_CONF_NUC472_GPIO_IRQ_DEBOUNCE_ENABLE +#else +#define NUC472_GPIO_IRQ_DEBOUNCE_ENABLE 0 +#endif + +#ifdef MBED_CONF_NUC472_GPIO_IRQ_DEBOUNCE_CLOCK_SOURCE +#define NUC472_GPIO_IRQ_DEBOUNCE_CLOCK_SOURCE MBED_CONF_NUC472_GPIO_IRQ_DEBOUNCE_CLOCK_SOURCE +#else +#define NUC472_GPIO_IRQ_DEBOUNCE_CLOCK_SOURCE GPIO_DBCTL_DBCLKSRC_IRC10K +#endif + +#ifdef MBED_CONF_NUC472_GPIO_IRQ_DEBOUNCE_SAMPLE_RATE +#define NUC472_GPIO_IRQ_DEBOUNCE_SAMPLE_RATE MBED_CONF_NUC472_GPIO_IRQ_DEBOUNCE_SAMPLE_RATE +#else +#define NUC472_GPIO_IRQ_DEBOUNCE_SAMPLE_RATE GPIO_DBCTL_DBCLKSEL_16 +#endif + int gpio_irq_init(gpio_irq_t *obj, PinName pin, gpio_irq_handler handler, uint32_t id) { if (pin == NC) { @@ -74,14 +92,19 @@ int gpio_irq_init(gpio_irq_t *obj, PinName pin, gpio_irq_handler handler, uint32 obj->irq_handler = (uint32_t) handler; obj->irq_id = id; + GPIO_T *gpio_base = NU_PORT_BASE(port_index); //gpio_set(pin); +#if NUC472_GPIO_IRQ_DEBOUNCE_ENABLE // Configure de-bounce clock source and sampling cycle time - GPIO_SET_DEBOUNCE_TIME(GPIO_DBCTL_DBCLKSRC_IRC10K, GPIO_DBCTL_DBCLKSEL_16); - + GPIO_SET_DEBOUNCE_TIME(NUC472_GPIO_IRQ_DEBOUNCE_CLOCK_SOURCE, NUC472_GPIO_IRQ_DEBOUNCE_SAMPLE_RATE); + GPIO_ENABLE_DEBOUNCE(gpio_base, 1 << pin_index); +#else + GPIO_DISABLE_DEBOUNCE(gpio_base, 1 << pin_index); +#endif + struct nu_gpio_irq_var *var = gpio_irq_var_arr + port_index; - MBED_ASSERT(pin_index < NU_MAX_PIN_PER_PORT); var->obj_arr[pin_index] = obj; // NOTE: InterruptIn requires IRQ enabled by default. @@ -112,7 +135,6 @@ void gpio_irq_set(gpio_irq_t *obj, gpio_irq_event event, uint32_t enable) switch (event) { case IRQ_RISE: if (enable) { - GPIO_ENABLE_DEBOUNCE(gpio_base, 1 << pin_index); GPIO_EnableInt(gpio_base, pin_index, GPIO_INT_RISING); } else { @@ -122,7 +144,6 @@ void gpio_irq_set(gpio_irq_t *obj, gpio_irq_event event, uint32_t enable) case IRQ_FALL: if (enable) { - GPIO_ENABLE_DEBOUNCE(gpio_base, 1 << pin_index); GPIO_EnableInt(gpio_base, pin_index, GPIO_INT_FALLING); } else { From c273b44d1796dd2d7eba3c32ccb438becfe4042e Mon Sep 17 00:00:00 2001 From: ccli8 Date: Mon, 19 Sep 2016 15:25:24 +0800 Subject: [PATCH 42/89] Refine comment for two-region model --- platform/retarget.cpp | 5 ++++- .../TARGET_NUC472/device/TOOLCHAIN_GCC_ARM/retarget.c | 8 +++++--- .../TARGET_NUMAKER_PFM_M453/TOOLCHAIN_GCC_ARM/retarget.c | 8 +++++--- 3 files changed, 14 insertions(+), 7 deletions(-) diff --git a/platform/retarget.cpp b/platform/retarget.cpp index 2bc1027139a..56dc02b2cae 100644 --- a/platform/retarget.cpp +++ b/platform/retarget.cpp @@ -574,7 +574,10 @@ register unsigned char * stack_ptr __asm ("sp"); // Dynamic memory allocation related syscall. #if defined(TARGET_NUMAKER_PFM_NUC472) || defined(TARGET_NUMAKER_PFM_M453) -// Overwrite _sbrk() to support two region model. +// Overwrite _sbrk() to support two region model (heap and stack are two distinct regions). +// __wrap__sbrk() is implemented in: +// TARGET_NUMAKER_PFM_NUC472 hal/targets/cmsis/TARGET_NUVOTON/TARGET_NUC472/TARGET_NUMAKER_PFM_NUC472/TOOLCHAIN_GCC_ARM/retarget.c +// TARGET_NUMAKER_PFM_M453 hal/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_GCC_ARM/retarget.c extern "C" void *__wrap__sbrk(int incr); extern "C" caddr_t _sbrk(int incr) { return (caddr_t) __wrap__sbrk(incr); diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/device/TOOLCHAIN_GCC_ARM/retarget.c b/targets/TARGET_NUVOTON/TARGET_NUC472/device/TOOLCHAIN_GCC_ARM/retarget.c index 67f3f8380dc..d5c3d874e82 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/device/TOOLCHAIN_GCC_ARM/retarget.c +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/device/TOOLCHAIN_GCC_ARM/retarget.c @@ -15,9 +15,11 @@ extern uint32_t __mbed_sbrk_start; extern uint32_t __mbed_krbs_start; -// NOTE: The implementation of _sbrk (in common/retarget.cpp) for GCC_ARM requires one-region model for heap and stack, which doesn't -// meet the layout of e.g. Nu-mbed-NUC472 board where heap is located on external SRAM. -// Because the symbol is not weak and cannot be overwritten, wrap calls to it by hooking command line linker with '-Wl,--wrap,_sbrk'. +/** + * The default implementation of _sbrk() (in common/retarget.cpp) for GCC_ARM requires one-region model (heap and stack share one region), which doesn't + * fit two-region model (heap and stack are two distinct regions), for example, NUMAKER-PFM-NUC472 locates heap on external SRAM. Define __wrap__sbrk() to + * override the default _sbrk(). It is expected to get called through gcc hooking mechanism ('-Wl,--wrap,_sbrk') or in _sbrk(). + */ void *__wrap__sbrk(int incr) { static uint32_t heap_ind = (uint32_t) &__mbed_sbrk_start; diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_GCC_ARM/retarget.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_GCC_ARM/retarget.c index 6e2642a5f68..470af432b5c 100644 --- a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_GCC_ARM/retarget.c +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_GCC_ARM/retarget.c @@ -15,9 +15,11 @@ extern uint32_t __mbed_sbrk_start; extern uint32_t __mbed_krbs_start; -// NOTE: The implementation of _sbrk (in common/retarget.cpp) for GCC_ARM requires one-region model for heap and stack, which doesn't -// meet the layout of e.g. Nu-mbed-NUC472 board where heap is located on external SRAM. -// Because the symbol is not weak and cannot be overwritten, wrap calls to it by hooking command line linker with '-Wl,--wrap,_sbrk'. +/** + * The default implementation of _sbrk() (in common/retarget.cpp) for GCC_ARM requires one-region model (heap and stack share one region), which doesn't + * fit two-region model (heap and stack are two distinct regions), for example, NUMAKER-PFM-NUC472 locates heap on external SRAM. Define __wrap__sbrk() to + * override the default _sbrk(). It is expected to get called through gcc hooking mechanism ('-Wl,--wrap,_sbrk') or in _sbrk(). + */ void *__wrap__sbrk(int incr) { static uint32_t heap_ind = (uint32_t) &__mbed_sbrk_start; From c9f031b6388a6f066a6b2ad4e5c13f5de75bce5a Mon Sep 17 00:00:00 2001 From: ccli8 Date: Mon, 19 Sep 2016 17:17:21 +0800 Subject: [PATCH 43/89] Fix warnings generated by armcc --- .../TARGET_NUC472/device/cmsis_nvic.h | 4 ++-- .../TARGET_NUC472/device/startup_NUC472_442.c | 12 ++++++++-- .../TARGET_NUC472/device/system_NUC472_442.c | 2 +- .../TARGET_NUVOTON/TARGET_NUC472/i2c_api.c | 22 ++++++------------- .../TARGET_NUVOTON/TARGET_NUC472/spi_api.c | 2 +- 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/device/cmsis_nvic.h b/targets/TARGET_NUVOTON/TARGET_NUC472/device/cmsis_nvic.h index 8cb8accc799..cc87b4a4acf 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/device/cmsis_nvic.h +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/device/cmsis_nvic.h @@ -24,12 +24,12 @@ #define NVIC_NUM_VECTORS (NVIC_USER_IRQ_OFFSET + NVIC_USER_IRQ_NUMBER) #if defined(__CC_ARM) -# define NVIC_RAM_VECTOR_ADDRESS &Image$$ER_IRAMVEC$$ZI$$Base +# define NVIC_RAM_VECTOR_ADDRESS ((uint32_t) &Image$$ER_IRAMVEC$$ZI$$Base) #elif defined(__ICCARM__) # pragma section = "IRAMVEC" # define NVIC_RAM_VECTOR_ADDRESS ((uint32_t) __section_begin("IRAMVEC")) #elif defined(__GNUC__) -# define NVIC_RAM_VECTOR_ADDRESS &__start_vector_table__ +# define NVIC_RAM_VECTOR_ADDRESS ((uint32_t) &__start_vector_table__) #endif diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/device/startup_NUC472_442.c b/targets/TARGET_NUVOTON/TARGET_NUC472/device/startup_NUC472_442.c index f339feafd94..4acab2847c0 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/device/startup_NUC472_442.c +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/device/startup_NUC472_442.c @@ -11,6 +11,14 @@ #include "NUC472_442.h" +/* Suppress warning messages */ +#if defined(__CC_ARM) +// Suppress warning message: extended constant initialiser used +#pragma diag_suppress 1296 +#elif defined(__ICCARM__) +#elif defined(__GNUC__) +#endif + /* Macro Definitions */ #if defined(__CC_ARM) #define WEAK __attribute__ ((weak)) @@ -238,12 +246,12 @@ const uint32_t __vector_handlers[] = { /* Configure Initial Stack Pointer, using linker-generated symbols */ #if defined(__CC_ARM) - &Image$$ARM_LIB_STACK$$ZI$$Limit, + (uint32_t) &Image$$ARM_LIB_STACK$$ZI$$Limit, #elif defined(__ICCARM__) //(uint32_t) __sfe("CSTACK"), (uint32_t) &CSTACK$$Limit, #elif defined(__GNUC__) - &__StackTop, + (uint32_t) &__StackTop, #endif (uint32_t) Reset_Handler, // Reset Handler diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/device/system_NUC472_442.c b/targets/TARGET_NUVOTON/TARGET_NUC472/device/system_NUC472_442.c index d8af018d39c..c1954ab405a 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/device/system_NUC472_442.c +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/device/system_NUC472_442.c @@ -58,7 +58,7 @@ void SystemCoreClockUpdate (void) /* Get Core Clock Frequency */ */ void SystemInit (void) { - uint32_t u32RTC_EN_Flag = 0; + //uint32_t u32RTC_EN_Flag = 0; /* FPU settings ------------------------------------------------------------*/ #if (__FPU_PRESENT == 1) && (__FPU_USED == 1) diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/i2c_api.c b/targets/TARGET_NUVOTON/TARGET_NUC472/i2c_api.c index 49c32f0a5b4..2bc453cc60d 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/i2c_api.c +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/i2c_api.c @@ -93,8 +93,8 @@ static int i2c_do_trsn(i2c_t *obj, uint32_t i2c_ctl, int sync); #define NU_I2C_TIMEOUT_STOP 500000 static int i2c_poll_status_timeout(i2c_t *obj, int (*is_status)(i2c_t *obj), uint32_t timeout); static int i2c_poll_tran_heatbeat_timeout(i2c_t *obj, uint32_t timeout); -static int i2c_is_stat_int(i2c_t *obj); -static int i2c_is_stop_det(i2c_t *obj); +//static int i2c_is_stat_int(i2c_t *obj); +//static int i2c_is_stop_det(i2c_t *obj); static int i2c_is_trsn_done(i2c_t *obj); static int i2c_is_tran_started(i2c_t *obj); static int i2c_addr2data(int address, int read); @@ -115,6 +115,8 @@ static void i2c_rollback_vector_interrupt(i2c_t *obj); #define TRANCTRL_STARTED (1) #define TRANCTRL_NAKLASTDATA (1 << 1) +uint32_t us_ticker_read(void); + void i2c_init(i2c_t *obj, PinName sda, PinName scl) { uint32_t i2c_sda = pinmap_peripheral(sda, PinMap_I2C_SDA); @@ -178,8 +180,6 @@ void i2c_frequency(i2c_t *obj, int hz) int i2c_read(i2c_t *obj, int address, char *data, int length, int stop) { - int i; - if (i2c_start(obj)) { i2c_stop(obj); return I2C_ERROR_BUS_BUSY; @@ -203,8 +203,6 @@ int i2c_read(i2c_t *obj, int address, char *data, int length, int stop) int i2c_write(i2c_t *obj, int address, const char *data, int length, int stop) { - int i; - if (i2c_start(obj)) { i2c_stop(obj); return I2C_ERROR_BUS_BUSY; @@ -306,7 +304,6 @@ static int i2c_addr2bspaddr(int address) static void i2c_enable_int(i2c_t *obj) { - I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); const struct nu_modinit_s *modinit = get_modinit(obj->i2c.i2c, i2c_modinit_tab); core_util_critical_section_enter(); @@ -320,7 +317,6 @@ static void i2c_enable_int(i2c_t *obj) static void i2c_disable_int(i2c_t *obj) { - I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); const struct nu_modinit_s *modinit = get_modinit(obj->i2c.i2c, i2c_modinit_tab); core_util_critical_section_enter(); @@ -334,7 +330,6 @@ static void i2c_disable_int(i2c_t *obj) static int i2c_set_int(i2c_t *obj, int inten) { - I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); int inten_back; core_util_critical_section_enter(); @@ -374,8 +369,6 @@ int i2c_allow_powerdown(void) static int i2c_do_tran(i2c_t *obj, char *buf, int length, int read, int naklastdata) { - I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); - int err = 0; int tran_len = 0; i2c_disable_int(obj); @@ -386,7 +379,6 @@ static int i2c_do_tran(i2c_t *obj, char *buf, int length, int read, int naklastd i2c_enable_int(obj); if (i2c_poll_tran_heatbeat_timeout(obj, NU_I2C_TIMEOUT_STAT_INT)) { - err = I2C_ERROR_BUS_BUSY; #if NU_I2C_DEBUG MY_I2C_2 = obj->i2c; while (1); @@ -502,7 +494,6 @@ static int i2c_poll_status_timeout(i2c_t *obj, int (*is_status)(i2c_t *obj), uin static int i2c_poll_tran_heatbeat_timeout(i2c_t *obj, uint32_t timeout) { uint32_t t1, t2, elapsed = 0; - I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); int tran_started; char *tran_pos = NULL; char *tran_pos2 = NULL; @@ -547,6 +538,7 @@ static int i2c_poll_tran_heatbeat_timeout(i2c_t *obj, uint32_t timeout) return (elapsed >= timeout); } +#if 0 static int i2c_is_stat_int(i2c_t *obj) { I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); @@ -554,12 +546,14 @@ static int i2c_is_stat_int(i2c_t *obj) return !! (i2c_base->CTL & I2C_CTL_SI_Msk); } + static int i2c_is_stop_det(i2c_t *obj) { I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); return ! (i2c_base->CTL & I2C_CTL_STO_Msk); } +#endif static int i2c_is_trsn_done(i2c_t *obj) { @@ -578,7 +572,6 @@ static int i2c_is_trsn_done(i2c_t *obj) static int i2c_is_tran_started(i2c_t *obj) { - I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); int started; int inten_back; @@ -619,7 +612,6 @@ static void i2c_irq(i2c_t *obj) { I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); uint32_t status; - int data_recv = 0; if (I2C_GET_TIMEOUT_FLAG(i2c_base)) { I2C_ClearTimeoutFlag(i2c_base); diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/spi_api.c b/targets/TARGET_NUVOTON/TARGET_NUC472/spi_api.c index ba87ebcf434..79a3296d2bb 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/spi_api.c +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/spi_api.c @@ -116,7 +116,7 @@ void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel // Enable IP clock CLK_EnableModuleClock(modinit->clkidx); - SPI_T *spi_base = (SPI_T *) NU_MODBASE(obj->spi.spi); + //SPI_T *spi_base = (SPI_T *) NU_MODBASE(obj->spi.spi); pinmap_pinout(mosi, PinMap_SPI_MOSI); pinmap_pinout(miso, PinMap_SPI_MISO); From 2c675f94ab88f02ba10dc6bce5ac81eeafe3c8ab Mon Sep 17 00:00:00 2001 From: ccli8 Date: Mon, 19 Sep 2016 17:40:52 +0800 Subject: [PATCH 44/89] Fix warnings generated by armcc --- .../TARGET_NUMAKER_PFM_M453/PeripheralPins.c | 2 +- targets/TARGET_NUVOTON/TARGET_M451/i2c_api.c | 22 ++++++------------- targets/TARGET_NUVOTON/TARGET_M451/spi_api.c | 2 +- .../startup_M451Series.c | 12 ++++++++-- .../TARGET_NUVOTON/TARGET_M451/cmsis_nvic.h | 4 ++-- 5 files changed, 21 insertions(+), 21 deletions(-) diff --git a/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PeripheralPins.c b/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PeripheralPins.c index 971bef3dbf2..7b58a28abe9 100644 --- a/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PeripheralPins.c +++ b/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PeripheralPins.c @@ -256,7 +256,7 @@ const PinMap PinMap_UART_RX[] = { {PB_5, UART_2, SYS_GPB_MFPL_PB5MFP_UART2_RXD}, {PC_1, UART_3, SYS_GPC_MFPL_PC1MFP_UART3_RXD}, {PC_3, UART_2, SYS_GPC_MFPL_PC3MFP_UART2_RXD}, - {PC_7, UART_0, SYS_GPC_MFPL_PC7MFP_UART0_RXD}, + {PC_7, UART_0, (int) SYS_GPC_MFPL_PC7MFP_UART0_RXD}, {PD_0, UART_0, SYS_GPD_MFPL_PD0MFP_UART0_RXD}, {PD_6, UART_0, SYS_GPD_MFPL_PD6MFP_UART0_RXD}, {PD_13, UART_3, SYS_GPD_MFPH_PD13MFP_UART3_RXD}, diff --git a/targets/TARGET_NUVOTON/TARGET_M451/i2c_api.c b/targets/TARGET_NUVOTON/TARGET_M451/i2c_api.c index 92b5c7a9f0f..02808b49331 100644 --- a/targets/TARGET_NUVOTON/TARGET_M451/i2c_api.c +++ b/targets/TARGET_NUVOTON/TARGET_M451/i2c_api.c @@ -75,8 +75,8 @@ static int i2c_do_trsn(i2c_t *obj, uint32_t i2c_ctl, int sync); #define NU_I2C_TIMEOUT_STOP 500000 static int i2c_poll_status_timeout(i2c_t *obj, int (*is_status)(i2c_t *obj), uint32_t timeout); static int i2c_poll_tran_heatbeat_timeout(i2c_t *obj, uint32_t timeout); -static int i2c_is_stat_int(i2c_t *obj); -static int i2c_is_stop_det(i2c_t *obj); +//static int i2c_is_stat_int(i2c_t *obj); +//static int i2c_is_stop_det(i2c_t *obj); static int i2c_is_trsn_done(i2c_t *obj); static int i2c_is_tran_started(i2c_t *obj); static int i2c_addr2data(int address, int read); @@ -98,6 +98,8 @@ static void i2c_rollback_vector_interrupt(i2c_t *obj); #define TRANCTRL_STARTED (1) #define TRANCTRL_NAKLASTDATA (1 << 1) +uint32_t us_ticker_read(void); + void i2c_init(i2c_t *obj, PinName sda, PinName scl) { uint32_t i2c_sda = pinmap_peripheral(sda, PinMap_I2C_SDA); @@ -161,8 +163,6 @@ void i2c_frequency(i2c_t *obj, int hz) int i2c_read(i2c_t *obj, int address, char *data, int length, int stop) { - int i; - if (i2c_start(obj)) { i2c_stop(obj); return I2C_ERROR_BUS_BUSY; @@ -186,8 +186,6 @@ int i2c_read(i2c_t *obj, int address, char *data, int length, int stop) int i2c_write(i2c_t *obj, int address, const char *data, int length, int stop) { - int i; - if (i2c_start(obj)) { i2c_stop(obj); return I2C_ERROR_BUS_BUSY; @@ -289,7 +287,6 @@ static int i2c_addr2bspaddr(int address) static void i2c_enable_int(i2c_t *obj) { - I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); const struct nu_modinit_s *modinit = get_modinit(obj->i2c.i2c, i2c_modinit_tab); core_util_critical_section_enter(); @@ -303,7 +300,6 @@ static void i2c_enable_int(i2c_t *obj) static void i2c_disable_int(i2c_t *obj) { - I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); const struct nu_modinit_s *modinit = get_modinit(obj->i2c.i2c, i2c_modinit_tab); core_util_critical_section_enter(); @@ -317,7 +313,6 @@ static void i2c_disable_int(i2c_t *obj) static int i2c_set_int(i2c_t *obj, int inten) { - I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); int inten_back; core_util_critical_section_enter(); @@ -357,8 +352,6 @@ int i2c_allow_powerdown(void) static int i2c_do_tran(i2c_t *obj, char *buf, int length, int read, int naklastdata) { - I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); - int err = 0; int tran_len = 0; i2c_disable_int(obj); @@ -369,7 +362,6 @@ static int i2c_do_tran(i2c_t *obj, char *buf, int length, int read, int naklastd i2c_enable_int(obj); if (i2c_poll_tran_heatbeat_timeout(obj, NU_I2C_TIMEOUT_STAT_INT)) { - err = I2C_ERROR_BUS_BUSY; #if NU_I2C_DEBUG MY_I2C_2 = obj->i2c; while (1); @@ -485,7 +477,6 @@ static int i2c_poll_status_timeout(i2c_t *obj, int (*is_status)(i2c_t *obj), uin static int i2c_poll_tran_heatbeat_timeout(i2c_t *obj, uint32_t timeout) { uint32_t t1, t2, elapsed = 0; - I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); int tran_started; char *tran_pos = NULL; char *tran_pos2 = NULL; @@ -529,6 +520,8 @@ static int i2c_poll_tran_heatbeat_timeout(i2c_t *obj, uint32_t timeout) return (elapsed >= timeout); } + +#if 0 static int i2c_is_stat_int(i2c_t *obj) { I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); @@ -542,6 +535,7 @@ static int i2c_is_stop_det(i2c_t *obj) return ! (i2c_base->CTL & I2C_CTL_STO_Msk); } +#endif static int i2c_is_trsn_done(i2c_t *obj) { @@ -560,7 +554,6 @@ static int i2c_is_trsn_done(i2c_t *obj) static int i2c_is_tran_started(i2c_t *obj) { - I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); int started; int inten_back; @@ -589,7 +582,6 @@ static void i2c_irq(i2c_t *obj) { I2C_T *i2c_base = (I2C_T *) NU_MODBASE(obj->i2c.i2c); uint32_t status; - int data_recv = 0; if (I2C_GET_TIMEOUT_FLAG(i2c_base)) { I2C_ClearTimeoutFlag(i2c_base); diff --git a/targets/TARGET_NUVOTON/TARGET_M451/spi_api.c b/targets/TARGET_NUVOTON/TARGET_M451/spi_api.c index fb2c28d39c8..63f8e6a5a27 100644 --- a/targets/TARGET_NUVOTON/TARGET_M451/spi_api.c +++ b/targets/TARGET_NUVOTON/TARGET_M451/spi_api.c @@ -111,7 +111,7 @@ void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel // Enable IP clock CLK_EnableModuleClock(modinit->clkidx); - SPI_T *spi_base = (SPI_T *) NU_MODBASE(obj->spi.spi); + //SPI_T *spi_base = (SPI_T *) NU_MODBASE(obj->spi.spi); pinmap_pinout(mosi, PinMap_SPI_MOSI); pinmap_pinout(miso, PinMap_SPI_MISO); diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/startup_M451Series.c b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/startup_M451Series.c index d73e4eca81d..086c9af6976 100644 --- a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/startup_M451Series.c +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/startup_M451Series.c @@ -11,6 +11,14 @@ #include "M451Series.h" +/* Suppress warning messages */ +#if defined(__CC_ARM) +// Suppress warning message: extended constant initialiser used +#pragma diag_suppress 1296 +#elif defined(__ICCARM__) +#elif defined(__GNUC__) +#endif + /* Macro Definitions */ #if defined(__CC_ARM) #define WEAK __attribute__ ((weak)) @@ -158,12 +166,12 @@ const uint32_t __vector_handlers[] = { /* Configure Initial Stack Pointer, using linker-generated symbols */ #if defined(__CC_ARM) - &Image$$ARM_LIB_STACK$$ZI$$Limit, + (uint32_t) &Image$$ARM_LIB_STACK$$ZI$$Limit, #elif defined(__ICCARM__) //(uint32_t) __sfe("CSTACK"), (uint32_t) &CSTACK$$Limit, #elif defined(__GNUC__) - &__StackTop, + (uint32_t) &__StackTop, #endif (uint32_t) Reset_Handler, // Reset Handler diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/cmsis_nvic.h b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/cmsis_nvic.h index 128cfcf2138..77cc94d9864 100644 --- a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/cmsis_nvic.h +++ b/targets/cmsis/TARGET_NUVOTON/TARGET_M451/cmsis_nvic.h @@ -24,12 +24,12 @@ #define NVIC_NUM_VECTORS (NVIC_USER_IRQ_OFFSET + NVIC_USER_IRQ_NUMBER) #if defined(__CC_ARM) -# define NVIC_RAM_VECTOR_ADDRESS &Image$$ER_IRAMVEC$$ZI$$Base +# define NVIC_RAM_VECTOR_ADDRESS ((uint32_t) &Image$$ER_IRAMVEC$$ZI$$Base) #elif defined(__ICCARM__) # pragma section = "IRAMVEC" # define NVIC_RAM_VECTOR_ADDRESS ((uint32_t) __section_begin("IRAMVEC")) #elif defined(__GNUC__) -# define NVIC_RAM_VECTOR_ADDRESS &__start_vector_table__ +# define NVIC_RAM_VECTOR_ADDRESS ((uint32_t) &__start_vector_table__) #endif From faae13e650b8296c3b15b318dd710aa004327641 Mon Sep 17 00:00:00 2001 From: cyliangtw Date: Mon, 19 Sep 2016 22:10:59 +0800 Subject: [PATCH 45/89] remove warnings --- .../arch/TARGET_NUVOTON/TARGET_NUC472/nuc472_eth.c | 2 +- .../arch/TARGET_NUVOTON/TARGET_NUC472/nuc472_netif.c | 10 ++++++---- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_NUVOTON/TARGET_NUC472/nuc472_eth.c b/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_NUVOTON/TARGET_NUC472/nuc472_eth.c index 97a1265fc46..441a1a0a5d7 100644 --- a/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_NUVOTON/TARGET_NUC472/nuc472_eth.c +++ b/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_NUVOTON/TARGET_NUC472/nuc472_eth.c @@ -48,6 +48,7 @@ u8_t tx_buf[TX_DESCRIPTOR_NUM][PACKET_BUFFER_SIZE]; extern void ethernetif_input(u16_t len, u8_t *buf, u32_t s, u32_t ns); extern void ethernetif_loopback_input(struct pbuf *p); +extern void ack_emac_rx_isr(void); // PTP source clock is 84MHz (Real chip using PLL). Each tick is 11.90ns // Assume we want to set each tick to 100ns. @@ -256,7 +257,6 @@ unsigned int m_status; void EMAC_RX_IRQHandler(void) { - unsigned int cur_entry, status; m_status = EMAC->INTSTS & 0xFFFF; EMAC->INTSTS = m_status; diff --git a/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_NUVOTON/TARGET_NUC472/nuc472_netif.c b/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_NUVOTON/TARGET_NUC472/nuc472_netif.c index 738b1411797..cd480c07fc8 100644 --- a/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_NUVOTON/TARGET_NUC472/nuc472_netif.c +++ b/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_NUVOTON/TARGET_NUC472/nuc472_netif.c @@ -79,6 +79,8 @@ struct netif *_netif; unsigned char my_mac_addr[6] = {0x02, 0x00, 0xac, 0x55, 0x66, 0x77}; extern u8_t my_mac_addr[6]; +extern int ETH_link_ok(void); +extern void EMAC_RX_Action(void); sys_sem_t RxReadySem; /**< RX packet ready semaphore */ @@ -421,7 +423,7 @@ err_t /* Packet receive task */ err = sys_sem_new(&RxReadySem, 0); - LWIP_ASSERT("RxReadySem creation error", (err == ERR_OK)); + if(err != ERR_OK) LWIP_ASSERT("RxReadySem creation error", (err == ERR_OK)); // In GCC code, DEFAULT_THREAD_STACKSIZE 512 bytes is not enough for rx_task #if defined (__GNUC__) // mbed OS 2.0, DEFAULT_THREAD_STACKSIZE*3 @@ -482,10 +484,10 @@ typedef struct { static void __phy_task(void *data) { struct netif *netif = (struct netif*)data; - PHY_STATE crt_state = {STATE_UNKNOWN, (phy_speed_t)STATE_UNKNOWN, (phy_duplex_t)STATE_UNKNOWN}; - PHY_STATE prev_state; +// PHY_STATE crt_state = {STATE_UNKNOWN, (phy_speed_t)STATE_UNKNOWN, (phy_duplex_t)STATE_UNKNOWN}; +// PHY_STATE prev_state; - prev_state = crt_state; +// prev_state = crt_state; while (1) { // Get current status // Get the actual PHY link speed From 6685b4a8cef57cd7df5df635c6f31dfba441ac65 Mon Sep 17 00:00:00 2001 From: cyliangtw Date: Tue, 20 Sep 2016 10:56:15 +0800 Subject: [PATCH 46/89] support mesh in GCC tool chain --- .../TARGET_NUC472/device/TOOLCHAIN_GCC_ARM/NUC472.ld | 1 + 1 file changed, 1 insertion(+) diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/device/TOOLCHAIN_GCC_ARM/NUC472.ld b/targets/TARGET_NUVOTON/TARGET_NUC472/device/TOOLCHAIN_GCC_ARM/NUC472.ld index c9d2b2bca86..897bfd31c74 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/device/TOOLCHAIN_GCC_ARM/NUC472.ld +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/device/TOOLCHAIN_GCC_ARM/NUC472.ld @@ -237,6 +237,7 @@ SECTIONS */ *lwip_*.o(.bss*) *lwip_*.o(COMMON) + *mesh_system.o(.bss*) __bss_extern_end__ = .; } > RAM_EXTERN From 5ed75ce940a5ac00779927199bcdcfad8035fdc3 Mon Sep 17 00:00:00 2001 From: cyliangtw Date: Tue, 20 Sep 2016 11:02:10 +0800 Subject: [PATCH 47/89] support mesh in IAR tool chain --- .../TARGET_NUC472/device/TOOLCHAIN_IAR/NUC472_442.icf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/device/TOOLCHAIN_IAR/NUC472_442.icf b/targets/TARGET_NUVOTON/TARGET_NUC472/device/TOOLCHAIN_IAR/NUC472_442.icf index 479e48eef88..86aa657a63b 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/device/TOOLCHAIN_IAR/NUC472_442.icf +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/device/TOOLCHAIN_IAR/NUC472_442.icf @@ -26,7 +26,7 @@ define block HEAP with alignment = 8, size = __ICFEDIT_size_heap__ { }; /* NOTE: Vector table base requires to be aligned to the power of vector table size. Give a safe value here. */ define block IRAMVEC with alignment = 1024, size = 4 * (16 + 142) { }; /* Move non-critical libraries to external SRAM while internal SRAM is insufficient. */ -define block XRAM_NC with alignment = 8 { zeroinit object *lwip_* }; +define block XRAM_NC with alignment = 8 { zeroinit object *lwip_*, zeroinit object *mesh_system.o }; initialize by copy { readwrite }; From c066b6ce75cfb84aaa3c16e2b5e657a13291e134 Mon Sep 17 00:00:00 2001 From: cyliangtw Date: Thu, 29 Sep 2016 17:54:51 +0800 Subject: [PATCH 48/89] Fix warnings in aes_alt --- .../hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c index 0430dbea0dd..6df2663d162 100644 --- a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c +++ b/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c @@ -41,8 +41,7 @@ //static int aes_init_done = 0; -#define mbedtls_trace //printf - +#define mbedtls_trace(...) //printf(__VA_ARGS__) /* Implementation that should never be optimized out by the compiler */ static void mbedtls_zeroize( void *v, size_t n ) { From 20ad95dea73515222e386736cb27fa52a13c980f Mon Sep 17 00:00:00 2001 From: ccli8 Date: Wed, 5 Oct 2016 17:22:32 +0800 Subject: [PATCH 49/89] Fix buffer overflow in BSP SD driver --- .../device/StdDriver/nuc472_sd.c | 120 ++++++++++++------ .../device/StdDriver/nuc472_sd.h | 5 +- 2 files changed, 86 insertions(+), 39 deletions(-) diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/device/StdDriver/nuc472_sd.c b/targets/TARGET_NUVOTON/TARGET_NUC472/device/StdDriver/nuc472_sd.c index edfdfec4cfb..b96d2296fb0 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/device/StdDriver/nuc472_sd.c +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/device/StdDriver/nuc472_sd.c @@ -1,8 +1,8 @@ /**************************************************************************//** * @file SD.c * @version V1.00 - * $Revision: 13 $ - * $Date: 14/10/08 9:02a $ + * $Revision: 16 $ + * $Date: 15/11/26 10:45a $ * @brief NUC472/NUC442 SD driver source file * * @note @@ -41,12 +41,12 @@ uint8_t *_sd_pSDHCBuffer; uint32_t _sd_ReferenceClock; #if defined (__CC_ARM) -__align(4096) uint8_t _sd_ucSDHCBuffer[64]; +__align(4096) uint8_t _sd_ucSDHCBuffer[512]; #elif defined ( __ICCARM__ ) /*!< IAR Compiler */ #pragma data_alignment = 4096 -uint8_t _sd_ucSDHCBuffer[64]; +uint8_t _sd_ucSDHCBuffer[512]; #elif defined ( __GNUC__ ) -uint8_t _sd_ucSDHCBuffer[64] __attribute__((aligned (4096))); +uint8_t _sd_ucSDHCBuffer[512] __attribute__((aligned (4096))); #endif int sd0_ok = 0; @@ -371,14 +371,20 @@ int SD_Init(SD_INFO_T *pSD) for (i=0x100; i>0; i--); _sd_uR3_CMD = 1; - if (SD_SDCmdAndRsp(pSD, 1, 0x80ff8000, u32CmdTimeOut) != 2) { // MMC memory + + if (SD_SDCmdAndRsp(pSD, 1, 0x40ff8000, u32CmdTimeOut) != 2) { // eMMC memory resp = SD->RESP0; while (!(resp & 0x00800000)) { // check if card is ready _sd_uR3_CMD = 1; - SD_SDCmdAndRsp(pSD, 1, 0x80ff8000, u32CmdTimeOut); // high voltage + + SD_SDCmdAndRsp(pSD, 1, 0x40ff8000, u32CmdTimeOut); // high voltage resp = SD->RESP0; } - pSD->CardType = SD_TYPE_MMC; + + if(resp & 0x00400000) + pSD->CardType = SD_TYPE_EMMC; + else + pSD->CardType = SD_TYPE_MMC; } else { pSD->CardType = SD_TYPE_UNKNOWN; return SD_ERR_DEVICE; @@ -403,7 +409,7 @@ int SD_Init(SD_INFO_T *pSD) // CMD2, CMD3 if (pSD->CardType != SD_TYPE_UNKNOWN) { SD_SDCmdAndRsp2(pSD, 2, 0x00, CIDBuffer); - if (pSD->CardType == SD_TYPE_MMC) { + if ((pSD->CardType == SD_TYPE_MMC) || (pSD->CardType == SD_TYPE_EMMC)) { if ((status = SD_SDCmdAndRsp(pSD, 3, 0x10000, 0)) != Successful) // set RCA return status; pSD->RCA = 0x10000; @@ -460,6 +466,7 @@ int SD_SwitchToHighSpeed(SD_INFO_T *pSD) int SD_SelectCardType(SD_INFO_T *pSD) { int volatile status=0; + unsigned int arg; if ((status = SD_SDCmdAndRsp(pSD, 7, pSD->RCA, 0)) != Successful) return status; @@ -509,8 +516,20 @@ int SD_SelectCardType(SD_INFO_T *pSD) return status; SD->CTL |= SDH_CTL_DBW_Msk; - } else if (pSD->CardType == SD_TYPE_MMC) { - SD->CTL &= ~SDH_CTL_DBW_Msk; + } else if ((pSD->CardType == SD_TYPE_MMC) ||(pSD->CardType == SD_TYPE_EMMC)) { + + if(pSD->CardType == SD_TYPE_MMC) + SD->CTL &= ~SDH_CTL_DBW_Msk; + + //--- sent CMD6 to MMC card to set bus width to 4 bits mode + // set CMD6 argument Access field to 3, Index to 183, Value to 1 (4-bit mode) + arg = (3 << 24) | (183 << 16) | (1 << 8); + if ((status = SD_SDCmdAndRsp(pSD, 6, arg, 0)) != Successful) + return status; + SD_CheckRB(); + + SD->CTL |= SDH_CTL_DBW_Msk;; // set bus width to 4-bit mode for SD host controller + } if ((status = SD_SDCmdAndRsp(pSD, 16, SD_BLOCK_SIZE, 0)) != Successful) // set block length @@ -518,9 +537,11 @@ int SD_SelectCardType(SD_INFO_T *pSD) SD->BLEN = SD_BLOCK_SIZE - 1; // set the block size SD_SDCommand(pSD, 7, 0); + SD->CTL |= SDH_CTL_CLK8OEN_Msk; + while(SD->CTL & SDH_CTL_CLK8OEN_Msk); #ifdef _SD_USE_INT_ - SD->INTEN |= SDH_INTEN_BLKD_IE_Msk; + SD->INTEN |= SDH_INTEN_BLKDIEN_Msk; #endif //_SD_USE_INT_ return Successful; @@ -528,40 +549,61 @@ int SD_SelectCardType(SD_INFO_T *pSD) void SD_Get_SD_info(SD_INFO_T *pSD, DISK_DATA_T *_info) { - unsigned int i; unsigned int R_LEN, C_Size, MULT, size; unsigned int Buffer[4]; unsigned char *ptr; SD_SDCmdAndRsp2(pSD, 9, pSD->RCA, Buffer); - if ((Buffer[0] & 0xc0000000) && (pSD->CardType != SD_TYPE_MMC)) { - C_Size = ((Buffer[1] & 0x0000003f) << 16) | ((Buffer[2] & 0xffff0000) >> 16); - size = (C_Size+1) * 512; // Kbytes + if ((pSD->CardType == SD_TYPE_MMC) || (pSD->CardType == SD_TYPE_EMMC)) { + // for MMC/eMMC card + if ((Buffer[0] & 0xc0000000) == 0xc0000000) { + // CSD_STRUCTURE [127:126] is 3 + // CSD version depend on EXT_CSD register in eMMC v4.4 for card size > 2GB + SD_SDCmdAndRsp(pSD, 7, pSD->RCA, 0); + + ptr = (uint8_t *)((uint32_t)_sd_ucSDHCBuffer ); + SD->DMASA = (uint32_t)ptr; // set DMA transfer starting address + SD->BLEN = 511; // read 512 bytes for EXT_CSD + + if (SD_SDCmdAndRspDataIn(pSD, 8, 0x00) != Successful) + return; - _info->diskSize = size; - _info->totalSectorN = size << 1; + SD_SDCommand(pSD, 7, 0); + SD->CTL |= SDH_CTL_CLK8OEN_Msk; + while(SD->CTL & SDH_CTL_CLK8OEN_Msk); + + _info->totalSectorN = (*(uint32_t *)(ptr+212)); + _info->diskSize = _info->totalSectorN / 2; + } else { + // CSD version v1.0/1.1/1.2 in eMMC v4.4 spec for card size <= 2GB + R_LEN = (Buffer[1] & 0x000f0000) >> 16; + C_Size = ((Buffer[1] & 0x000003ff) << 2) | ((Buffer[2] & 0xc0000000) >> 30); + MULT = (Buffer[2] & 0x00038000) >> 15; + size = (C_Size+1) * (1<<(MULT+2)) * (1<diskSize = size / 1024; + _info->totalSectorN = size / 512; + } } else { - R_LEN = (Buffer[1] & 0x000f0000) >> 16; - C_Size = ((Buffer[1] & 0x000003ff) << 2) | ((Buffer[2] & 0xc0000000) >> 30); - MULT = (Buffer[2] & 0x00038000) >> 15; - size = (C_Size+1) * (1<<(MULT+2)) * (1<> 16); + size = (C_Size+1) * 512; // Kbytes - _info->diskSize = size / 1024; - _info->totalSectorN = size / 512; - } - _info->sectorSize = 512; + _info->diskSize = size; + _info->totalSectorN = size << 1; + } else { + R_LEN = (Buffer[1] & 0x000f0000) >> 16; + C_Size = ((Buffer[1] & 0x000003ff) << 2) | ((Buffer[2] & 0xc0000000) >> 30); + MULT = (Buffer[2] & 0x00038000) >> 15; + size = (C_Size+1) * (1<<(MULT+2)) * (1<RCA, Buffer); + _info->diskSize = size / 1024; + _info->totalSectorN = size / 512; + } + } - _info->vendor[0] = (Buffer[0] & 0xff000000) >> 24; - ptr = (unsigned char *)Buffer; - ptr = ptr + 4; - for (i=0; i<5; i++) - _info->product[i] = *ptr++; - ptr = ptr + 10; - for (i=0; i<4; i++) - _info->serial[i] = *ptr++; + _info->sectorSize = 512; } int SD_ChipErase(SD_INFO_T *pSD, DISK_DATA_T *_info) @@ -743,7 +785,7 @@ uint32_t SD_Read(uint32_t u32CardNum, uint8_t *pu8BufAddr, uint32_t u32StartSec, SD->BLEN = blksize - 1; // the actual byte count is equal to (SDBLEN+1) - if (pSD->CardType == SD_TYPE_SD_HIGH) + if ( (pSD->CardType == SD_TYPE_SD_HIGH) || (pSD->CardType == SD_TYPE_EMMC) ) SD->CMDARG = u32StartSec; else SD->CMDARG = u32StartSec * blksize; @@ -845,6 +887,8 @@ uint32_t SD_Read(uint32_t u32CardNum, uint8_t *pu8BufAddr, uint32_t u32StartSec, SD_CheckRB(); SD_SDCommand(pSD, 7, 0); + SD->CTL |= SDH_CTL_CLK8OEN_Msk; + while(SD->CTL & SDH_CTL_CLK8OEN_Msk); return Successful; } @@ -891,7 +935,7 @@ uint32_t SD_Write(uint32_t u32CardNum, uint8_t *pu8BufAddr, uint32_t u32StartSec // According to SD Spec v2.0, the write CMD block size MUST be 512, and the start address MUST be 512*n. SD->BLEN = SD_BLOCK_SIZE - 1; // set the block size - if (pSD->CardType == SD_TYPE_SD_HIGH) + if ((pSD->CardType == SD_TYPE_SD_HIGH) || (pSD->CardType == SD_TYPE_EMMC)) SD->CMDARG = u32StartSec; else SD->CMDARG = u32StartSec * SD_BLOCK_SIZE; // set start address for SD CMD @@ -975,6 +1019,8 @@ uint32_t SD_Write(uint32_t u32CardNum, uint8_t *pu8BufAddr, uint32_t u32StartSec SD_CheckRB(); SD_SDCommand(pSD, 7, 0); + SD->CTL |= SDH_CTL_CLK8OEN_Msk; + while(SD->CTL & SDH_CTL_CLK8OEN_Msk); return Successful; } diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/device/StdDriver/nuc472_sd.h b/targets/TARGET_NUVOTON/TARGET_NUC472/device/StdDriver/nuc472_sd.h index 05295728bb3..27a4c4978dd 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/device/StdDriver/nuc472_sd.h +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/device/StdDriver/nuc472_sd.h @@ -1,8 +1,8 @@ /**************************************************************************//** * @file sd.h * @version V1.00 - * $Revision: 11 $ - * $Date: 14/10/03 2:25p $ + * $Revision: 12 $ + * $Date: 14/11/04 10:10a $ * @brief NUC472/NUC442 SD driver header file * * @note @@ -41,6 +41,7 @@ #define SD_TYPE_SD_HIGH 1 #define SD_TYPE_SD_LOW 2 #define SD_TYPE_MMC 3 +#define SD_TYPE_EMMC 4 /* SD error */ #define SD_NO_SD_CARD (SD_ERR_ID|0x10) From 0b6043432773974fe3483d674612ffd38fc9f8b5 Mon Sep 17 00:00:00 2001 From: cyliangtw Date: Wed, 5 Oct 2016 20:26:36 +0800 Subject: [PATCH 50/89] EMAC buffer address word alignment --- .../arch/TARGET_NUVOTON/TARGET_NUC472/nuc472_eth.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_NUVOTON/TARGET_NUC472/nuc472_eth.c b/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_NUVOTON/TARGET_NUC472/nuc472_eth.c index 441a1a0a5d7..22610c3209c 100644 --- a/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_NUVOTON/TARGET_NUC472/nuc472_eth.c +++ b/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_NUVOTON/TARGET_NUC472/nuc472_eth.c @@ -24,7 +24,7 @@ #include "nuc472_eth.h" #include "lwip/opt.h" #include "lwip/def.h" - +#include "toolchain.h" #define ETH_TRIGGER_RX() do{EMAC->RXST = 0;}while(0) #define ETH_TRIGGER_TX() do{EMAC->TXST = 0;}while(0) @@ -33,6 +33,7 @@ #define ETH_DISABLE_TX() do{EMAC->CTL &= ~EMAC_CTL_TXON;}while(0) #define ETH_DISABLE_RX() do{EMAC->CTL &= ~EMAC_CTL_RXON;}while(0) +/* #ifdef __ICCARM__ #pragma data_alignment=4 struct eth_descriptor rx_desc[RX_DESCRIPTOR_NUM]; @@ -41,10 +42,14 @@ struct eth_descriptor tx_desc[TX_DESCRIPTOR_NUM]; struct eth_descriptor rx_desc[RX_DESCRIPTOR_NUM] __attribute__ ((aligned(4))); struct eth_descriptor tx_desc[TX_DESCRIPTOR_NUM] __attribute__ ((aligned(4))); #endif +*/ +struct eth_descriptor rx_desc[RX_DESCRIPTOR_NUM] MBED_ALIGN(4); +struct eth_descriptor tx_desc[TX_DESCRIPTOR_NUM] MBED_ALIGN(4); + struct eth_descriptor volatile *cur_tx_desc_ptr, *cur_rx_desc_ptr, *fin_tx_desc_ptr; -u8_t rx_buf[RX_DESCRIPTOR_NUM][PACKET_BUFFER_SIZE]; -u8_t tx_buf[TX_DESCRIPTOR_NUM][PACKET_BUFFER_SIZE]; +u8_t rx_buf[RX_DESCRIPTOR_NUM][PACKET_BUFFER_SIZE] MBED_ALIGN(4); +u8_t tx_buf[TX_DESCRIPTOR_NUM][PACKET_BUFFER_SIZE] MBED_ALIGN(4); extern void ethernetif_input(u16_t len, u8_t *buf, u32_t s, u32_t ns); extern void ethernetif_loopback_input(struct pbuf *p); From 03d00df0ca63dca54d2e88e5b720d9d1070be0de Mon Sep 17 00:00:00 2001 From: ccli8 Date: Thu, 6 Oct 2016 17:30:20 +0800 Subject: [PATCH 51/89] Fix pin definition error regarding SD, I2C, and SPI 1. Fix pin definition error regarding SD. 2. Fix pin definition error regarding I2C. 3. Fix pin definition error regarding SPI. 4. Add pinmap for SD. --- .../TARGET_NUMAKER_PFM_M453/PeripheralPins.h | 10 +++ .../PeripheralNames.h | 5 ++ .../PeripheralPins.c | 71 +++++++++++++++++-- .../device/StdDriver/nuc472_sys.h | 69 +++++++++--------- 4 files changed, 115 insertions(+), 40 deletions(-) diff --git a/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PeripheralPins.h b/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PeripheralPins.h index 5b1a453de9d..6c9a26b865e 100644 --- a/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PeripheralPins.h +++ b/targets/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/PeripheralPins.h @@ -55,6 +55,16 @@ extern const PinMap PinMap_SPI_MISO[]; extern const PinMap PinMap_SPI_SCLK[]; extern const PinMap PinMap_SPI_SSEL[]; +//*** SD *** + +extern const PinMap PinMap_SD_CD[]; +extern const PinMap PinMap_SD_CMD[]; +extern const PinMap PinMap_SD_CLK[]; +extern const PinMap PinMap_SD_DAT0[]; +extern const PinMap PinMap_SD_DAT1[]; +extern const PinMap PinMap_SD_DAT2[]; +extern const PinMap PinMap_SD_DAT3[]; + #ifdef __cplusplus } #endif diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/TARGET_NUMAKER_PFM_NUC472/PeripheralNames.h b/targets/TARGET_NUVOTON/TARGET_NUC472/TARGET_NUMAKER_PFM_NUC472/PeripheralNames.h index fe3cb0ed96f..2cdc0bbc454 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/TARGET_NUMAKER_PFM_NUC472/PeripheralNames.h +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/TARGET_NUMAKER_PFM_NUC472/PeripheralNames.h @@ -115,6 +115,11 @@ typedef enum { DMA_0 = (int) NU_MODNAME(PDMA_BASE, 0) } DMAName; +typedef enum { + SD_0 = (int) NU_MODNAME(SD_BASE, 0), + SD_1 = (int) NU_MODNAME(SD_BASE, 1) +} SDName; + #ifdef __cplusplus } #endif diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/TARGET_NUMAKER_PFM_NUC472/PeripheralPins.c b/targets/TARGET_NUVOTON/TARGET_NUC472/TARGET_NUMAKER_PFM_NUC472/PeripheralPins.c index 31779f32f50..4ab4693a68b 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/TARGET_NUMAKER_PFM_NUC472/PeripheralPins.c +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/TARGET_NUMAKER_PFM_NUC472/PeripheralPins.c @@ -227,7 +227,7 @@ const PinMap PinMap_I2C_SDA[] = { {PD_3, I2C_3, SYS_GPD_MFPL_PD3MFP_I2C3_SDA}, {PD_9, I2C_0, SYS_GPD_MFPH_PD9MFP_I2C0_SDA}, {PD_12, I2C_4, SYS_GPD_MFPH_PD12MFP_I2C4_SDA}, - {PG_15, I2C_1, SYS_GPG_MFPH_PG15MFP_I2C1_SDA}, + {PG_14, I2C_1, SYS_GPG_MFPH_PG14MFP_I2C1_SDA}, {PH_1, I2C_1, SYS_GPH_MFPL_PH1MFP_I2C1_SDA}, {PH_4, I2C_3, SYS_GPH_MFPL_PH4MFP_I2C3_SDA}, {PI_8, I2C_2, SYS_GPI_MFPH_PI8MFP_I2C2_SDA}, @@ -243,7 +243,7 @@ const PinMap PinMap_I2C_SCL[] = { {PD_2, I2C_3, SYS_GPD_MFPL_PD2MFP_I2C3_SCL}, {PD_8, I2C_0, SYS_GPD_MFPH_PD8MFP_I2C0_SCL}, {PD_10, I2C_4, SYS_GPD_MFPH_PD10MFP_I2C4_SCL}, - {PG_14, I2C_1, SYS_GPG_MFPH_PG14MFP_I2C1_SCL}, + {PG_15, I2C_1, SYS_GPG_MFPH_PG15MFP_I2C1_SCL}, {PH_0, I2C_1, SYS_GPH_MFPL_PH0MFP_I2C1_SCL}, {PH_3, I2C_3, SYS_GPH_MFPL_PH3MFP_I2C3_SCL}, {PI_7, I2C_2, SYS_GPI_MFPL_PI7MFP_I2C2_SCL}, @@ -370,7 +370,7 @@ const PinMap PinMap_SPI_MOSI[] = { {PA_12, SPI_3, SYS_GPA_MFPH_PA12MFP_SPI3_MOSI1}, {PB_5, SPI_2, SYS_GPB_MFPL_PB5MFP_SPI2_MOSI0}, {PB_13, SPI_2, SYS_GPB_MFPH_PB13MFP_SPI2_MOSI1}, - {PC_4, SPI_0, SYS_GPC_MFPL_PC4MFP_SPI0_MOSI0}, + {PC_4, SPI_0, SYS_GPC_MFPL_PC4MFP_SPI0_MOSI1}, {PC_7, SPI_0, SYS_GPC_MFPL_PC7MFP_SPI0_MOSI0}, {PC_13, SPI_1, SYS_GPC_MFPH_PC13MFP_SPI1_MOSI1}, {PC_15, SPI_1, SYS_GPC_MFPH_PC15MFP_SPI1_MOSI0}, @@ -379,7 +379,7 @@ const PinMap PinMap_SPI_MOSI[] = { {PE_7, SPI_0, SYS_GPE_MFPL_PE7MFP_SPI0_MOSI0}, {PE_11, SPI_0, SYS_GPE_MFPH_PE11MFP_SPI0_MOSI1}, {PF_0, SPI_1, SYS_GPF_MFPL_PF0MFP_SPI1_MOSI0}, - {PF_1, SPI_2, SYS_GPF_MFPL_PF1MFP_SPI2_MOSI0}, + {PF_1, SPI_2, SYS_GPF_MFPL_PF1MFP_SPI2_MOSI1}, {PF_5, SPI_3, SYS_GPF_MFPL_PF5MFP_SPI3_MOSI0}, {PG_8, SPI_2, SYS_GPG_MFPH_PG8MFP_SPI2_MOSI0}, {PH_8, SPI_2, SYS_GPH_MFPH_PH8MFP_SPI2_MOSI0}, @@ -447,3 +447,66 @@ const PinMap PinMap_SPI_SSEL[] = { {NC, NC, 0} }; + +//*** SD *** + +const PinMap PinMap_SD_CD[] = { + {PC_12, SD_1, SYS_GPC_MFPH_PC12MFP_SD1_CDn}, + {PD_3, SD_0, SYS_GPD_MFPL_PD3MFP_SD0_CDn}, + {PE_5, SD_0, SYS_GPE_MFPL_PE5MFP_SD0_CDn}, + {PF_6, SD_0, SYS_GPF_MFPL_PF6MFP_SD0_CDn}, + + {NC, NC, 0} +}; + +const PinMap PinMap_SD_CMD[] = { + {PC_13, SD_1, SYS_GPC_MFPH_PC13MFP_SD1_CMD}, + {PD_6, SD_0, SYS_GPD_MFPL_PD6MFP_SD0_CMD}, + {PE_6, SD_0, SYS_GPE_MFPL_PE6MFP_SD0_CMD}, + {PF_7, SD_0, SYS_GPF_MFPL_PF7MFP_SD0_CMD}, + + {NC, NC, 0} +}; + +const PinMap PinMap_SD_CLK[] = { + {PC_14, SD_1, SYS_GPC_MFPH_PC14MFP_SD1_CLK}, + {PD_7, SD_0, SYS_GPD_MFPL_PD7MFP_SD0_CLK}, + {PE_7, SD_0, SYS_GPE_MFPL_PE7MFP_SD0_CLK}, + {PF_8, SD_0, SYS_GPF_MFPH_PF8MFP_SD0_CLK}, + + {NC, NC, 0} +}; + +const PinMap PinMap_SD_DAT0[] = { + {PC_9, SD_1, SYS_GPC_MFPH_PC9MFP_SD1_DAT0}, + {PD_2, SD_1, SYS_GPD_MFPL_PD2MFP_SD1_DAT0}, + {PE_11, SD_0, SYS_GPE_MFPH_PE11MFP_SD0_DAT0}, + {PF_5, SD_0, SYS_GPF_MFPL_PF5MFP_SD0_DAT0}, + + {NC, NC, 0} +}; + +const PinMap PinMap_SD_DAT1[] = { + {PD_1, SD_1, SYS_GPD_MFPL_PD1MFP_SD1_DAT1}, + {PE_10, SD_0, SYS_GPE_MFPH_PE10MFP_SD0_DAT1}, + {PF_4, SD_0, SYS_GPF_MFPL_PF4MFP_SD0_DAT1}, + + + {NC, NC, 0} +}; + +const PinMap PinMap_SD_DAT2[] = { + {PD_0, SD_1, SYS_GPD_MFPL_PD0MFP_SD1_DAT2}, + {PE_9, SD_0, SYS_GPE_MFPH_PE9MFP_SD0_DAT2}, + {PF_3, SD_0, SYS_GPF_MFPL_PF3MFP_SD0_DAT2}, + + {NC, NC, 0} +}; + +const PinMap PinMap_SD_DAT3[] = { + {PC_15, SD_1, SYS_GPC_MFPH_PC15MFP_SD1_DAT3}, + {PE_8, SD_0, SYS_GPE_MFPH_PE8MFP_SD0_DAT3}, + {PF_2, SD_0, SYS_GPF_MFPL_PF2MFP_SD0_DAT3}, + + {NC, NC, 0} +}; diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/device/StdDriver/nuc472_sys.h b/targets/TARGET_NUVOTON/TARGET_NUC472/device/StdDriver/nuc472_sys.h index ed4ce3ae5e0..bf6cc6995bf 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/device/StdDriver/nuc472_sys.h +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/device/StdDriver/nuc472_sys.h @@ -2,7 +2,7 @@ * @file SYS.h * @version V1.0 * $Revision 1 $ - * $Date: 14/10/06 1:15p $ + * $Date: 15/10/21 1:35p $ * @brief NUC472/NUC442 SYS Header File * * @note @@ -32,16 +32,14 @@ extern "C" /*---------------------------------------------------------------------------------------------------------*/ /* Module Reset Control Resister constant definitions. */ /*---------------------------------------------------------------------------------------------------------*/ -#define CHIP_RST ((0x0<<24)|SYS_IPRST0_CHIPRST_Pos) /*!BODCTL &= ~SYS_BODCTL_BODINTF_Msk) +#define SYS_CLEAR_BOD_INT_FLAG() (SYS->BODCTL |= SYS_BODCTL_BODINTF_Msk) /** * @brief Set Brown-out detector function to normal mode From e06a7b2753021bfe9084bc601b365305d921fecc Mon Sep 17 00:00:00 2001 From: ccli8 Date: Fri, 7 Oct 2016 13:14:12 +0800 Subject: [PATCH 52/89] Move files to match ARM mbed's restructure 1. Move USBHALHost_M451.cpp and USBHALHost_NUC472.cpp. 2. Move TARGET_M451/mbed_lib.json. 3. Move TARGET_NUC472/crypto. 4. Move TARGET_NUC472/mbed_lib.json. --- .../unsupported}/USBHost/USBHost/USBHALHost_M451.cpp | 0 .../unsupported}/USBHost/USBHost/USBHALHost_NUC472.cpp | 0 .../hal => targets}/TARGET_NUVOTON/TARGET_M451/mbed_lib.json | 0 .../TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c | 0 .../TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.h | 0 .../TARGET_NUVOTON/TARGET_NUC472/crypto/crypto-misc.c | 0 .../TARGET_NUVOTON/TARGET_NUC472/crypto/crypto-misc.h | 0 .../TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt.c | 0 .../TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt.h | 0 .../TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt_sw.c | 0 .../TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt_sw.h | 0 .../TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt.c | 0 .../TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt.h | 0 .../TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt_sw.c | 0 .../TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt_sw.h | 0 .../TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt.c | 0 .../TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt.h | 0 .../TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt_sw.c | 0 .../TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt_sw.h | 0 .../TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.c | 0 .../TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.h | 0 .../hal => targets}/TARGET_NUVOTON/TARGET_NUC472/mbed_lib.json | 0 22 files changed, 0 insertions(+), 0 deletions(-) rename {libraries => features/unsupported}/USBHost/USBHost/USBHALHost_M451.cpp (100%) rename {libraries => features/unsupported}/USBHost/USBHost/USBHALHost_NUC472.cpp (100%) rename {hal/targets/hal => targets}/TARGET_NUVOTON/TARGET_M451/mbed_lib.json (100%) rename {hal/targets/hal => targets}/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c (100%) rename {hal/targets/hal => targets}/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.h (100%) rename {hal/targets/hal => targets}/TARGET_NUVOTON/TARGET_NUC472/crypto/crypto-misc.c (100%) rename {hal/targets/hal => targets}/TARGET_NUVOTON/TARGET_NUC472/crypto/crypto-misc.h (100%) rename {hal/targets/hal => targets}/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt.c (100%) rename {hal/targets/hal => targets}/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt.h (100%) rename {hal/targets/hal => targets}/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt_sw.c (100%) rename {hal/targets/hal => targets}/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt_sw.h (100%) rename {hal/targets/hal => targets}/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt.c (100%) rename {hal/targets/hal => targets}/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt.h (100%) rename {hal/targets/hal => targets}/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt_sw.c (100%) rename {hal/targets/hal => targets}/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt_sw.h (100%) rename {hal/targets/hal => targets}/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt.c (100%) rename {hal/targets/hal => targets}/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt.h (100%) rename {hal/targets/hal => targets}/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt_sw.c (100%) rename {hal/targets/hal => targets}/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt_sw.h (100%) rename {hal/targets/hal => targets}/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.c (100%) rename {hal/targets/hal => targets}/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.h (100%) rename {hal/targets/hal => targets}/TARGET_NUVOTON/TARGET_NUC472/mbed_lib.json (100%) diff --git a/libraries/USBHost/USBHost/USBHALHost_M451.cpp b/features/unsupported/USBHost/USBHost/USBHALHost_M451.cpp similarity index 100% rename from libraries/USBHost/USBHost/USBHALHost_M451.cpp rename to features/unsupported/USBHost/USBHost/USBHALHost_M451.cpp diff --git a/libraries/USBHost/USBHost/USBHALHost_NUC472.cpp b/features/unsupported/USBHost/USBHost/USBHALHost_NUC472.cpp similarity index 100% rename from libraries/USBHost/USBHost/USBHALHost_NUC472.cpp rename to features/unsupported/USBHost/USBHost/USBHALHost_NUC472.cpp diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_M451/mbed_lib.json b/targets/TARGET_NUVOTON/TARGET_M451/mbed_lib.json similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_M451/mbed_lib.json rename to targets/TARGET_NUVOTON/TARGET_M451/mbed_lib.json diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c b/targets/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c rename to targets/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.c diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.h b/targets/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.h similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.h rename to targets/TARGET_NUVOTON/TARGET_NUC472/crypto/aes/aes_alt.h diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/crypto-misc.c b/targets/TARGET_NUVOTON/TARGET_NUC472/crypto/crypto-misc.c similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/crypto-misc.c rename to targets/TARGET_NUVOTON/TARGET_NUC472/crypto/crypto-misc.c diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/crypto-misc.h b/targets/TARGET_NUVOTON/TARGET_NUC472/crypto/crypto-misc.h similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/crypto-misc.h rename to targets/TARGET_NUVOTON/TARGET_NUC472/crypto/crypto-misc.h diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt.c b/targets/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt.c similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt.c rename to targets/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt.c diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt.h b/targets/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt.h similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt.h rename to targets/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt.h diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt_sw.c b/targets/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt_sw.c similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt_sw.c rename to targets/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt_sw.c diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt_sw.h b/targets/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt_sw.h similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt_sw.h rename to targets/TARGET_NUVOTON/TARGET_NUC472/crypto/des/des_alt_sw.h diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt.c b/targets/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt.c similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt.c rename to targets/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt.c diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt.h b/targets/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt.h similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt.h rename to targets/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt.h diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt_sw.c b/targets/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt_sw.c similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt_sw.c rename to targets/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt_sw.c diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt_sw.h b/targets/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt_sw.h similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt_sw.h rename to targets/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha1_alt_sw.h diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt.c b/targets/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt.c similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt.c rename to targets/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt.c diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt.h b/targets/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt.h similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt.h rename to targets/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt.h diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt_sw.c b/targets/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt_sw.c similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt_sw.c rename to targets/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt_sw.c diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt_sw.h b/targets/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt_sw.h similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt_sw.h rename to targets/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha256_alt_sw.h diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.c b/targets/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.c similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.c rename to targets/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.c diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.h b/targets/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.h similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.h rename to targets/TARGET_NUVOTON/TARGET_NUC472/crypto/sha/sha_alt_hw.h diff --git a/hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/mbed_lib.json b/targets/TARGET_NUVOTON/TARGET_NUC472/mbed_lib.json similarity index 100% rename from hal/targets/hal/TARGET_NUVOTON/TARGET_NUC472/mbed_lib.json rename to targets/TARGET_NUVOTON/TARGET_NUC472/mbed_lib.json From 928bdc4ae287c569376937e0b97aeed5ae7024ee Mon Sep 17 00:00:00 2001 From: ccli8 Date: Fri, 7 Oct 2016 13:43:41 +0800 Subject: [PATCH 53/89] Fix SD pinmaps are not extern'ed --- .../TARGET_NUMAKER_PFM_NUC472/PeripheralPins.h | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/targets/TARGET_NUVOTON/TARGET_NUC472/TARGET_NUMAKER_PFM_NUC472/PeripheralPins.h b/targets/TARGET_NUVOTON/TARGET_NUC472/TARGET_NUMAKER_PFM_NUC472/PeripheralPins.h index 5b1a453de9d..104d38ee4fe 100644 --- a/targets/TARGET_NUVOTON/TARGET_NUC472/TARGET_NUMAKER_PFM_NUC472/PeripheralPins.h +++ b/targets/TARGET_NUVOTON/TARGET_NUC472/TARGET_NUMAKER_PFM_NUC472/PeripheralPins.h @@ -55,6 +55,15 @@ extern const PinMap PinMap_SPI_MISO[]; extern const PinMap PinMap_SPI_SCLK[]; extern const PinMap PinMap_SPI_SSEL[]; +//*** SD *** +extern const PinMap PinMap_SD_CD[]; +extern const PinMap PinMap_SD_CMD[]; +extern const PinMap PinMap_SD_CLK[]; +extern const PinMap PinMap_SD_DAT0[]; +extern const PinMap PinMap_SD_DAT1[]; +extern const PinMap PinMap_SD_DAT2[]; +extern const PinMap PinMap_SD_DAT3[]; + #ifdef __cplusplus } #endif From 5bb0d4030fd9a948a9c843f917e5137cf4bfaed1 Mon Sep 17 00:00:00 2001 From: ccli8 Date: Fri, 7 Oct 2016 13:46:24 +0800 Subject: [PATCH 54/89] Add device_name into targets.json --- targets/targets.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/targets/targets.json b/targets/targets.json index d6a85e24059..0e92aebb436 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -2032,6 +2032,7 @@ "inherits": ["Target"], "progen": {"target": "numaker-pfm-m453"}, "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH"], - "release_versions": ["2", "5"] + "release_versions": ["2", "5"], + "device_name": "M453VG6AE" } } From 84dbcc540df2753fffbd81de3eda4f7a829c6617 Mon Sep 17 00:00:00 2001 From: ccli8 Date: Tue, 11 Oct 2016 13:49:25 +0800 Subject: [PATCH 55/89] Move files to match ARM mbed's restructure 1. Move M451Series.h to device. 2. Move StdDriver to device. 3. Move TOOLCHAIN_* to device. 4. Move cmsis*, startup_M451Series.c, and system_M451Series.c/h to device. --- .../TARGET_M451/device}/M451Series.h | 0 .../TARGET_M451/device}/StdDriver/m451_acmp.c | 0 .../TARGET_M451/device}/StdDriver/m451_acmp.h | 0 .../TARGET_M451/device}/StdDriver/m451_can.c | 0 .../TARGET_M451/device}/StdDriver/m451_can.h | 0 .../TARGET_M451/device}/StdDriver/m451_clk.c | 0 .../TARGET_M451/device}/StdDriver/m451_clk.h | 0 .../TARGET_M451/device}/StdDriver/m451_crc.c | 0 .../TARGET_M451/device}/StdDriver/m451_crc.h | 0 .../TARGET_M451/device}/StdDriver/m451_dac.c | 0 .../TARGET_M451/device}/StdDriver/m451_dac.h | 0 .../TARGET_M451/device}/StdDriver/m451_eadc.c | 0 .../TARGET_M451/device}/StdDriver/m451_eadc.h | 0 .../TARGET_M451/device}/StdDriver/m451_ebi.c | 0 .../TARGET_M451/device}/StdDriver/m451_ebi.h | 0 .../TARGET_M451/device}/StdDriver/m451_fmc.c | 0 .../TARGET_M451/device}/StdDriver/m451_fmc.h | 0 .../TARGET_M451/device}/StdDriver/m451_gpio.c | 0 .../TARGET_M451/device}/StdDriver/m451_gpio.h | 0 .../TARGET_M451/device}/StdDriver/m451_i2c.c | 0 .../TARGET_M451/device}/StdDriver/m451_i2c.h | 0 .../TARGET_M451/device}/StdDriver/m451_otg.h | 0 .../TARGET_M451/device}/StdDriver/m451_pdma.c | 0 .../TARGET_M451/device}/StdDriver/m451_pdma.h | 0 .../TARGET_M451/device}/StdDriver/m451_pwm.c | 0 .../TARGET_M451/device}/StdDriver/m451_pwm.h | 0 .../TARGET_M451/device}/StdDriver/m451_rtc.c | 0 .../TARGET_M451/device}/StdDriver/m451_rtc.h | 0 .../TARGET_M451/device}/StdDriver/m451_sc.c | 0 .../TARGET_M451/device}/StdDriver/m451_sc.h | 0 .../TARGET_M451/device}/StdDriver/m451_scuart.c | 0 .../TARGET_M451/device}/StdDriver/m451_scuart.h | 0 .../TARGET_M451/device}/StdDriver/m451_spi.c | 0 .../TARGET_M451/device}/StdDriver/m451_spi.h | 0 .../TARGET_M451/device}/StdDriver/m451_sys.c | 0 .../TARGET_M451/device}/StdDriver/m451_sys.h | 0 .../TARGET_M451/device}/StdDriver/m451_timer.c | 0 .../TARGET_M451/device}/StdDriver/m451_timer.h | 0 .../TARGET_M451/device}/StdDriver/m451_tk.c | 0 .../TARGET_M451/device}/StdDriver/m451_tk.h | 0 .../TARGET_M451/device}/StdDriver/m451_uart.c | 0 .../TARGET_M451/device}/StdDriver/m451_uart.h | 0 .../TARGET_M451/device}/StdDriver/m451_usbd.c | 0 .../TARGET_M451/device}/StdDriver/m451_usbd.h | 0 .../TARGET_M451/device}/StdDriver/m451_wdt.c | 0 .../TARGET_M451/device}/StdDriver/m451_wdt.h | 0 .../TARGET_M451/device}/StdDriver/m451_wwdt.c | 0 .../TARGET_M451/device}/StdDriver/m451_wwdt.h | 0 .../TARGET_M451/device}/TOOLCHAIN_ARM_MICRO/M453.sct | 0 .../TARGET_M451/device}/TOOLCHAIN_ARM_MICRO/sys.cpp | 0 .../TARGET_M451/device}/TOOLCHAIN_ARM_STD/M453.sct | 0 .../TARGET_M451/device}/TOOLCHAIN_ARM_STD/sys.cpp | 0 .../TARGET_M451/device}/TOOLCHAIN_GCC_ARM/M453.ld | 0 .../TARGET_M451/device}/TOOLCHAIN_GCC_ARM/retarget.c | 0 .../TARGET_M451/device}/TOOLCHAIN_IAR/M453.icf | 0 .../TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/cmsis.h | 0 .../TARGET_M451/device}/cmsis_nvic.c | 0 .../TARGET_M451/device}/cmsis_nvic.h | 0 .../TARGET_M451/device}/startup_M451Series.c | 0 .../TARGET_M451/device}/system_M451Series.c | 0 .../TARGET_M451/device}/system_M451Series.h | 0 61 files changed, 0 insertions(+), 0 deletions(-) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/M451Series.h (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_acmp.c (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_acmp.h (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_can.c (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_can.h (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_clk.c (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_clk.h (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_crc.c (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_crc.h (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_dac.c (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_dac.h (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_eadc.c (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_eadc.h (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_ebi.c (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_ebi.h (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_fmc.c (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_fmc.h (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_gpio.c (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_gpio.h (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_i2c.c (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_i2c.h (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_otg.h (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_pdma.c (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_pdma.h (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_pwm.c (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_pwm.h (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_rtc.c (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_rtc.h (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_sc.c (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_sc.h (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_scuart.c (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_scuart.h (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_spi.c (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_spi.h (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_sys.c (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_sys.h (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_timer.c (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_timer.h (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_tk.c (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_tk.h (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_uart.c (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_uart.h (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_usbd.c (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_usbd.h (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_wdt.c (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_wdt.h (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_wwdt.c (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/StdDriver/m451_wwdt.h (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453 => TARGET_NUVOTON/TARGET_M451/device}/TOOLCHAIN_ARM_MICRO/M453.sct (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453 => TARGET_NUVOTON/TARGET_M451/device}/TOOLCHAIN_ARM_MICRO/sys.cpp (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453 => TARGET_NUVOTON/TARGET_M451/device}/TOOLCHAIN_ARM_STD/M453.sct (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453 => TARGET_NUVOTON/TARGET_M451/device}/TOOLCHAIN_ARM_STD/sys.cpp (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453 => TARGET_NUVOTON/TARGET_M451/device}/TOOLCHAIN_GCC_ARM/M453.ld (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453 => TARGET_NUVOTON/TARGET_M451/device}/TOOLCHAIN_GCC_ARM/retarget.c (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453 => TARGET_NUVOTON/TARGET_M451/device}/TOOLCHAIN_IAR/M453.icf (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/cmsis.h (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/cmsis_nvic.c (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/cmsis_nvic.h (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453 => TARGET_NUVOTON/TARGET_M451/device}/startup_M451Series.c (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/system_M451Series.c (100%) rename targets/{cmsis/TARGET_NUVOTON/TARGET_M451 => TARGET_NUVOTON/TARGET_M451/device}/system_M451Series.h (100%) diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/M451Series.h b/targets/TARGET_NUVOTON/TARGET_M451/device/M451Series.h similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/M451Series.h rename to targets/TARGET_NUVOTON/TARGET_M451/device/M451Series.h diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_acmp.c b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_acmp.c similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_acmp.c rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_acmp.c diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_acmp.h b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_acmp.h similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_acmp.h rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_acmp.h diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_can.c b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_can.c similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_can.c rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_can.c diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_can.h b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_can.h similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_can.h rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_can.h diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_clk.c b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_clk.c similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_clk.c rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_clk.c diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_clk.h b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_clk.h similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_clk.h rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_clk.h diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_crc.c b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_crc.c similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_crc.c rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_crc.c diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_crc.h b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_crc.h similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_crc.h rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_crc.h diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_dac.c b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_dac.c similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_dac.c rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_dac.c diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_dac.h b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_dac.h similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_dac.h rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_dac.h diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_eadc.c b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_eadc.c similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_eadc.c rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_eadc.c diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_eadc.h b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_eadc.h similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_eadc.h rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_eadc.h diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_ebi.c b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_ebi.c similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_ebi.c rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_ebi.c diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_ebi.h b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_ebi.h similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_ebi.h rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_ebi.h diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_fmc.c b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_fmc.c similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_fmc.c rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_fmc.c diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_fmc.h b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_fmc.h similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_fmc.h rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_fmc.h diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_gpio.c b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_gpio.c similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_gpio.c rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_gpio.c diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_gpio.h b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_gpio.h similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_gpio.h rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_gpio.h diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_i2c.c b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_i2c.c similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_i2c.c rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_i2c.c diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_i2c.h b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_i2c.h similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_i2c.h rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_i2c.h diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_otg.h b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_otg.h similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_otg.h rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_otg.h diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_pdma.c b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_pdma.c similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_pdma.c rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_pdma.c diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_pdma.h b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_pdma.h similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_pdma.h rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_pdma.h diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_pwm.c b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_pwm.c similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_pwm.c rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_pwm.c diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_pwm.h b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_pwm.h similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_pwm.h rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_pwm.h diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_rtc.c b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_rtc.c similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_rtc.c rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_rtc.c diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_rtc.h b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_rtc.h similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_rtc.h rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_rtc.h diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_sc.c b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_sc.c similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_sc.c rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_sc.c diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_sc.h b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_sc.h similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_sc.h rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_sc.h diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_scuart.c b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_scuart.c similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_scuart.c rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_scuart.c diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_scuart.h b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_scuart.h similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_scuart.h rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_scuart.h diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_spi.c b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_spi.c similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_spi.c rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_spi.c diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_spi.h b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_spi.h similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_spi.h rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_spi.h diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_sys.c b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_sys.c similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_sys.c rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_sys.c diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_sys.h b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_sys.h similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_sys.h rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_sys.h diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_timer.c b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_timer.c similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_timer.c rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_timer.c diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_timer.h b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_timer.h similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_timer.h rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_timer.h diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_tk.c b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_tk.c similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_tk.c rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_tk.c diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_tk.h b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_tk.h similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_tk.h rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_tk.h diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_uart.c b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_uart.c similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_uart.c rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_uart.c diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_uart.h b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_uart.h similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_uart.h rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_uart.h diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_usbd.c b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_usbd.c similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_usbd.c rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_usbd.c diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_usbd.h b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_usbd.h similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_usbd.h rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_usbd.h diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_wdt.c b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_wdt.c similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_wdt.c rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_wdt.c diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_wdt.h b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_wdt.h similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_wdt.h rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_wdt.h diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_wwdt.c b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_wwdt.c similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_wwdt.c rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_wwdt.c diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_wwdt.h b/targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_wwdt.h similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/StdDriver/m451_wwdt.h rename to targets/TARGET_NUVOTON/TARGET_M451/device/StdDriver/m451_wwdt.h diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_ARM_MICRO/M453.sct b/targets/TARGET_NUVOTON/TARGET_M451/device/TOOLCHAIN_ARM_MICRO/M453.sct similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_ARM_MICRO/M453.sct rename to targets/TARGET_NUVOTON/TARGET_M451/device/TOOLCHAIN_ARM_MICRO/M453.sct diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_ARM_MICRO/sys.cpp b/targets/TARGET_NUVOTON/TARGET_M451/device/TOOLCHAIN_ARM_MICRO/sys.cpp similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_ARM_MICRO/sys.cpp rename to targets/TARGET_NUVOTON/TARGET_M451/device/TOOLCHAIN_ARM_MICRO/sys.cpp diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_ARM_STD/M453.sct b/targets/TARGET_NUVOTON/TARGET_M451/device/TOOLCHAIN_ARM_STD/M453.sct similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_ARM_STD/M453.sct rename to targets/TARGET_NUVOTON/TARGET_M451/device/TOOLCHAIN_ARM_STD/M453.sct diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_ARM_STD/sys.cpp b/targets/TARGET_NUVOTON/TARGET_M451/device/TOOLCHAIN_ARM_STD/sys.cpp similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_ARM_STD/sys.cpp rename to targets/TARGET_NUVOTON/TARGET_M451/device/TOOLCHAIN_ARM_STD/sys.cpp diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_GCC_ARM/M453.ld b/targets/TARGET_NUVOTON/TARGET_M451/device/TOOLCHAIN_GCC_ARM/M453.ld similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_GCC_ARM/M453.ld rename to targets/TARGET_NUVOTON/TARGET_M451/device/TOOLCHAIN_GCC_ARM/M453.ld diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_GCC_ARM/retarget.c b/targets/TARGET_NUVOTON/TARGET_M451/device/TOOLCHAIN_GCC_ARM/retarget.c similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_GCC_ARM/retarget.c rename to targets/TARGET_NUVOTON/TARGET_M451/device/TOOLCHAIN_GCC_ARM/retarget.c diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_IAR/M453.icf b/targets/TARGET_NUVOTON/TARGET_M451/device/TOOLCHAIN_IAR/M453.icf similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/TOOLCHAIN_IAR/M453.icf rename to targets/TARGET_NUVOTON/TARGET_M451/device/TOOLCHAIN_IAR/M453.icf diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/cmsis.h b/targets/TARGET_NUVOTON/TARGET_M451/device/cmsis.h similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/cmsis.h rename to targets/TARGET_NUVOTON/TARGET_M451/device/cmsis.h diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/cmsis_nvic.c b/targets/TARGET_NUVOTON/TARGET_M451/device/cmsis_nvic.c similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/cmsis_nvic.c rename to targets/TARGET_NUVOTON/TARGET_M451/device/cmsis_nvic.c diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/cmsis_nvic.h b/targets/TARGET_NUVOTON/TARGET_M451/device/cmsis_nvic.h similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/cmsis_nvic.h rename to targets/TARGET_NUVOTON/TARGET_M451/device/cmsis_nvic.h diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/startup_M451Series.c b/targets/TARGET_NUVOTON/TARGET_M451/device/startup_M451Series.c similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/TARGET_NUMAKER_PFM_M453/startup_M451Series.c rename to targets/TARGET_NUVOTON/TARGET_M451/device/startup_M451Series.c diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/system_M451Series.c b/targets/TARGET_NUVOTON/TARGET_M451/device/system_M451Series.c similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/system_M451Series.c rename to targets/TARGET_NUVOTON/TARGET_M451/device/system_M451Series.c diff --git a/targets/cmsis/TARGET_NUVOTON/TARGET_M451/system_M451Series.h b/targets/TARGET_NUVOTON/TARGET_M451/device/system_M451Series.h similarity index 100% rename from targets/cmsis/TARGET_NUVOTON/TARGET_M451/system_M451Series.h rename to targets/TARGET_NUVOTON/TARGET_M451/device/system_M451Series.h From 0b2725e7cf7ef180955e4cfbbaeaff58fbeb0393 Mon Sep 17 00:00:00 2001 From: Laurent MEUNIER Date: Mon, 11 Jul 2016 16:14:03 +0200 Subject: [PATCH 56/89] cmsis to device changes --- targets/TARGET_ONSEMI/TARGET_NCS36510/Pad.c | 24 +-- .../TARGET_NCS36510/PeripheralPins.c | 24 ++- .../TARGET_ONSEMI/TARGET_NCS36510/PinNames.h | 106 ++++++------- .../TARGET_ONSEMI/TARGET_NCS36510/adc_sar.h | 20 +-- .../TARGET_NCS36510/adc_sar_map.h | 16 +- .../TARGET_NCS36510/architecture.h | 36 ++--- .../TARGET_NCS36510/assert_onsemi.h | 8 +- .../TARGET_NCS36510/char_driver.h | 4 +- targets/TARGET_ONSEMI/TARGET_NCS36510/clock.h | 68 ++++---- .../TARGET_ONSEMI/TARGET_NCS36510/clock_map.h | 26 +-- .../TARGET_ONSEMI/TARGET_NCS36510/crossbar.h | 16 +- .../TARGET_NCS36510/device/NCS36510.h | 71 +++++---- .../device/TOOLCHAIN_ARM/startup_NCS36510.s | 38 ++--- .../device/TOOLCHAIN_GCC_ARM/NCS36510.ld | 92 ++++++----- .../TOOLCHAIN_GCC_ARM/startup_NCS36510.s | 140 ++++++++--------- .../device/TOOLCHAIN_IAR/startup_NCS36510.s | 50 +++--- .../TARGET_NCS36510/device/cmsis_nvic.c | 4 +- .../TARGET_NCS36510/device/cmsis_nvic.h | 2 +- .../TARGET_NCS36510/device/system_NCS36510.c | 9 +- .../TARGET_NCS36510/device/system_NCS36510.h | 8 +- .../TARGET_ONSEMI/TARGET_NCS36510/dma_map.h | 60 +++---- targets/TARGET_ONSEMI/TARGET_NCS36510/error.h | 2 +- .../TARGET_ONSEMI/TARGET_NCS36510/flash_map.h | 10 +- targets/TARGET_ONSEMI/TARGET_NCS36510/gpio.h | 16 +- .../TARGET_NCS36510/gpio_irq_api.c | 4 +- .../TARGET_ONSEMI/TARGET_NCS36510/gpio_map.h | 28 ++-- targets/TARGET_ONSEMI/TARGET_NCS36510/i2c.h | 80 +++++----- .../TARGET_ONSEMI/TARGET_NCS36510/i2c_api.c | 6 +- .../TARGET_NCS36510/i2c_ipc7208_map.h | 6 +- .../TARGET_ONSEMI/TARGET_NCS36510/macHw_map.h | 72 ++++----- .../TARGET_NCS36510/memory_map.h | 148 +++++++++--------- .../TARGET_NCS36510/ncs36510Init.c | 8 +- .../TARGET_NCS36510/ncs36510_i2c.c | 4 +- .../TARGET_NCS36510/ncs36510_lp_ticker_api.c | 42 +---- .../TARGET_NCS36510/ncs36510_spi.c | 85 +++++----- .../TARGET_NCS36510/ncs36510_us_ticker_api.c | 18 +-- .../TARGET_ONSEMI/TARGET_NCS36510/objects.h | 136 ++++++++-------- .../TARGET_ONSEMI/TARGET_NCS36510/pad_map.h | 28 ++-- .../TARGET_ONSEMI/TARGET_NCS36510/pmu_map.h | 58 +++---- .../TARGET_ONSEMI/TARGET_NCS36510/pwm_map.h | 8 +- .../TARGET_NCS36510/random_map.h | 60 +++---- .../TARGET_ONSEMI/TARGET_NCS36510/reset_map.h | 16 +- targets/TARGET_ONSEMI/TARGET_NCS36510/rfAna.c | 20 +-- targets/TARGET_ONSEMI/TARGET_NCS36510/rfAna.h | 4 +- targets/TARGET_ONSEMI/TARGET_NCS36510/rtc.c | 38 ++--- targets/TARGET_ONSEMI/TARGET_NCS36510/rtc.h | 34 ++-- .../TARGET_ONSEMI/TARGET_NCS36510/rtc_map.h | 48 +++--- .../TARGET_NCS36510/serial_api.c | 18 +-- targets/TARGET_ONSEMI/TARGET_NCS36510/sleep.c | 16 +- targets/TARGET_ONSEMI/TARGET_NCS36510/sleep.h | 20 +-- .../TARGET_ONSEMI/TARGET_NCS36510/sleep_api.c | 43 ++++- targets/TARGET_ONSEMI/TARGET_NCS36510/spi.h | 32 +++- .../TARGET_ONSEMI/TARGET_NCS36510/spi_api.c | 55 ++++--- .../TARGET_ONSEMI/TARGET_NCS36510/swversion.c | 12 +- targets/TARGET_ONSEMI/TARGET_NCS36510/sys.h | 18 +-- .../TARGET_ONSEMI/TARGET_NCS36510/ticker.h | 40 ++--- targets/TARGET_ONSEMI/TARGET_NCS36510/timer.h | 68 ++++---- .../TARGET_ONSEMI/TARGET_NCS36510/timer_map.h | 14 +- .../TARGET_ONSEMI/TARGET_NCS36510/trim_map.h | 54 +++---- targets/TARGET_ONSEMI/TARGET_NCS36510/types.h | 14 +- .../TARGET_NCS36510/uart_16c550.h | 44 +++--- .../TARGET_NCS36510/uart_16c550_map.h | 4 +- .../TARGET_ONSEMI/TARGET_NCS36510/wdt_map.h | 18 +-- targets/targets.json | 2 +- 64 files changed, 1154 insertions(+), 1119 deletions(-) diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/Pad.c b/targets/TARGET_ONSEMI/TARGET_NCS36510/Pad.c index 47e54bbeb5c..9a48bf31698 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/Pad.c +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/Pad.c @@ -108,18 +108,18 @@ boolean fPadIOCtrl(uint8_t PadNum, uint8_t OutputDriveStrength, uint8_t OutputDr { PadReg_t *PadRegOffset; /** \verbatim - Table: O/p drive strength - - Drive strength 3.3V (min/typ/max) 1V (min/typ/max) - 000 1/1.4/2.1 mA 0.043/0.07/0.11 mA - 001 2/2.7/4.1 mA 0.086/0.15/0.215 mA - 010 4.1/5.3/7.8 mA 0.188/0.3/0.4 mA - 011 8.1/10.4/15 8 mA 0.4/0.6/0.81 mA - 100 20.8/26/37 mA* 1/1.6/2.2 mA - 101 40.5/50/70 mA* 2/3/4.3 mA - 11x 57/73/102 mA* 3/4.6/6.2 mA - - *Values are only accessible when CDBGPWRUPREQ is high. This limits the maximum output current in functional mode. \endverbatim */ + Table: O/p drive strength + + Drive strength 3.3V (min/typ/max) 1V (min/typ/max) + 000 1/1.4/2.1 mA 0.043/0.07/0.11 mA + 001 2/2.7/4.1 mA 0.086/0.15/0.215 mA + 010 4.1/5.3/7.8 mA 0.188/0.3/0.4 mA + 011 8.1/10.4/15 8 mA 0.4/0.6/0.81 mA + 100 20.8/26/37 mA* 1/1.6/2.2 mA + 101 40.5/50/70 mA* 2/3/4.3 mA + 11x 57/73/102 mA* 3/4.6/6.2 mA + + *Values are only accessible when CDBGPWRUPREQ is high. This limits the maximum output current in functional mode. \endverbatim */ if((PadNum <= PAD_NUM_OF_IO) && diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/PeripheralPins.c b/targets/TARGET_ONSEMI/TARGET_NCS36510/PeripheralPins.c index 5df6553e08d..fa038667056 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/PeripheralPins.c +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/PeripheralPins.c @@ -67,31 +67,39 @@ const PinMap PinMap_SPI_SCLK[] = { {SPI1_SCLK_2, SPI_0, 6}, {SPI1_SCLK_3, SPI_0, 6}, {SPI2_SCLK, SPI_1, 6}, - {NC, NC, 0} + {NC, NC, 0} }; const PinMap PinMap_SPI_MOSI[] = { /*todo: other pins are possible, need to add */ {SPI1_SDATAO_2, SPI_0, 6}, {SPI1_SDATAO_3, SPI_0, 6}, - {SPI2_SDATAO, SPI_1, 6}, - {NC, NC, 0} + {SPI2_SDATAO, SPI_1, 6}, + {NC, NC, 0} }; const PinMap PinMap_SPI_MISO[] = { /*todo: other pins are possible, need to add */ {SPI1_SDATAI_2, SPI_0, 6}, {SPI1_SDATAI_3, SPI_0, 6}, - {SPI2_SDATAI, SPI_1, 6}, - {NC, NC, 0} + {SPI2_SDATAI, SPI_1, 6}, + {NC, NC, 0} }; const PinMap PinMap_SPI_SSEL[] = { /*todo: other pins are possible, need to add */ /* TODO what about SSNO */ - {SPI1_SSNI_2, SPI_0, 6}, - {SPI2_SSNI, SPI_1, 6}, - {NC, NC, 0} + {SPI1_SSNO0_1, SPI_0, 6}, + {SPI1_SSNO1_1, SPI_0, 6}, + {SPI1_SSNO2_1, SPI_0, 6}, + {SPI1_SSNO3_1, SPI_0, 6}, + {SPI1_SSNI_2, SPI_0, 6}, + {SPI1_SSNO0_2, SPI_0, 6}, + {SPI1_SSNO1_2, SPI_0, 6}, + {SPI1_SSNO2_2, SPI_0, 6}, + {SPI2_SSNI, SPI_1, 6}, + {SPI2_SSNO0, SPI_1, 6}, + {NC, NC, 0} }; diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/PinNames.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/PinNames.h index 49536724d84..41b0f6b4f8c 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/PinNames.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/PinNames.h @@ -37,7 +37,7 @@ extern "C" { #endif typedef enum { - GPIO0 = 0, + GPIO0 = 0, GPIO1, GPIO2, GPIO3, @@ -64,56 +64,56 @@ typedef enum { UART2_TX = GPIO8, UART2_RX = GPIO9, - I2C1_SCLK_1 = GPIO2, - I2C1_SDATA_1 = GPIO3, - I2C1_SCLK_2 = GPIO5, - I2C1_SDATA_2 = GPIO4, - I2C1_SCLK = I2C1_SCLK_1, /*Default*/ - I2C1_SDATA = I2C1_SDATA_1, /*Default*/ - - I2C2_SCLK_1 = GPIO14, - I2C2_SDATA_1 = GPIO15, - I2C2_SCLK_2 = GPIO17, - I2C2_SDATA_2 = GPIO16, - I2C2_SCLK = I2C2_SCLK_2, /*Default*/ - I2C2_SDATA = I2C2_SDATA_2, /*Default*/ - I2C_SCL = I2C1_SCLK_1, /*Default*/ - I2C_SDA = I2C1_SDATA_1, /*Default*/ + I2C1_SCLK_1 = GPIO2, + I2C1_SDATA_1 = GPIO3, + I2C1_SCLK_2 = GPIO5, + I2C1_SDATA_2 = GPIO4, + I2C1_SCLK = I2C1_SCLK_1, /*Default*/ + I2C1_SDATA = I2C1_SDATA_1, /*Default*/ + + I2C2_SCLK_1 = GPIO14, + I2C2_SDATA_1 = GPIO15, + I2C2_SCLK_2 = GPIO17, + I2C2_SDATA_2 = GPIO16, + I2C2_SCLK = I2C2_SCLK_2, /*Default*/ + I2C2_SDATA = I2C2_SDATA_2, /*Default*/ + I2C_SCL = I2C1_SCLK_1, /*Default*/ + I2C_SDA = I2C1_SDATA_1, /*Default*/ /* SPI 1 with 1st set of CROSS BAR */ - SPI1_SSNO0_1 = GPIO0, - SPI1_SSNO1_1 = GPIO1, - SPI1_SSNO2_1 = GPIO2, - SPI1_SSNO3_1 = GPIO3, + SPI1_SSNO0_1 = GPIO0, + SPI1_SSNO1_1 = GPIO1, + SPI1_SSNO2_1 = GPIO2, + SPI1_SSNO3_1 = GPIO3, /* SPI 1 with 2st set of CROSS BAR */ - SPI1_SCLK_2 = GPIO4, - SPI1_SDATAO_2 = GPIO5, - SPI1_SDATAI_2 = GPIO6, - SPI1_SSNI_2 = GPIO7, - SPI1_SSNO0_2 = GPIO8, - SPI1_SSNO1_2 = GPIO9, - SPI1_SSNO2_2 = GPIO10, - - SPI1_SCLK = SPI1_SCLK_2, /*Default*/ - SPI1_SDATAO = SPI1_SDATAO_2, /*Default*/ - SPI1_SDATAI = SPI1_SDATAI_2, /*Default*/ - SPI1_SSNI = SPI1_SSNI_2, /*Default*/ - SPI1_SSNO0 = SPI1_SSNO0_2, /*Default*/ - SPI1_SSNO1 = SPI1_SSNO1_2, /*Default*/ - SPI1_SSNO2 = SPI1_SSNO2_2, /*Default*/ + SPI1_SCLK_2 = GPIO4, + SPI1_SDATAO_2 = GPIO5, + SPI1_SDATAI_2 = GPIO6, + SPI1_SSNI_2 = GPIO7, + SPI1_SSNO0_2 = GPIO8, + SPI1_SSNO1_2 = GPIO9, + SPI1_SSNO2_2 = GPIO10, + + SPI1_SCLK = SPI1_SCLK_2, /*Default*/ + SPI1_SDATAO = SPI1_SDATAO_2, /*Default*/ + SPI1_SDATAI = SPI1_SDATAI_2, /*Default*/ + SPI1_SSNI = SPI1_SSNI_2, /*Default*/ + SPI1_SSNO0 = SPI1_SSNO0_2, /*Default*/ + SPI1_SSNO1 = SPI1_SSNO1_2, /*Default*/ + SPI1_SSNO2 = SPI1_SSNO2_2, /*Default*/ /* SPI 1 with 3rd set of CROSS BAR */ - SPI1_SCLK_3 = GPIO8, - SPI1_SDATAO_3 = GPIO9, - SPI1_SDATAI_3 = GPIO10, + SPI1_SCLK_3 = GPIO8, + SPI1_SDATAO_3 = GPIO9, + SPI1_SDATAI_3 = GPIO10, /* SPI 2 */ - SPI2_SCLK = GPIO14, - SPI2_SDATAO = GPIO15, - SPI2_SDATAI = GPIO16, - SPI2_SSNI = GPIO17, - SPI2_SSNO0 = GPIO17, + SPI2_SCLK = GPIO14, + SPI2_SDATAO = GPIO15, + SPI2_SDATAI = GPIO16, + SPI2_SSNI = GPIO17, + SPI2_SSNO0 = GPIO17, // Generic signals namings LED1 = GPIO4, @@ -157,17 +157,17 @@ typedef enum { } PinDirection; typedef enum { - PushPullPullDown = 0, - PushPullNoPull = 1, - PushPullPullUp = 2, + PushPullPullDown = 0, + PushPullNoPull = 1, + PushPullPullUp = 2, OpenDrainPullDown = 3, - OpenDrainNoPull = 4, - OpenDrainPullUp = 5, - PullNone = PushPullNoPull, - PullUp = PushPullPullUp, - PullDown = PushPullPullDown, - OpenDrain = OpenDrainPullUp, - PullDefault = PullNone + OpenDrainNoPull = 4, + OpenDrainPullUp = 5, + PullNone = PushPullNoPull, + PullUp = PushPullPullUp, + PullDown = PushPullPullDown, + OpenDrain = OpenDrainPullUp, + PullDefault = PullNone } PinMode; diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/adc_sar.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/adc_sar.h index 0f6cfc5bfa7..98279357ef0 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/adc_sar.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/adc_sar.h @@ -43,16 +43,16 @@ extern "C" { #endif /* ADC register bits */ -#define ADC_CONTROL_MODE_BIT_POS 0 -#define ADC_CONTROL_MEASTYPE_BIT_POS 3 -#define ADC_CONTROL_INPUTSCALE_BIT_POS 4 -#define ADC_CONTROL_MEAS_CH_BIT_POS 8 -#define ADC_CONTROL_REF_CH_BIT_POS 12 -#define ADC_PRESCALE_VAL_BIT_POS 0 -#define ADC_PRESCALE_EN_BIT_POS 8 -#define ADC_DELAY_SAMPLE_RATE_BIT_POS 0 -#define ADC_DELAY_WARMUP_BIT_POS 16 -#define ADC_DELAY_SAMPLE_TIME_BIT_POS 24 +#define ADC_CONTROL_MODE_BIT_POS 0 +#define ADC_CONTROL_MEASTYPE_BIT_POS 3 +#define ADC_CONTROL_INPUTSCALE_BIT_POS 4 +#define ADC_CONTROL_MEAS_CH_BIT_POS 8 +#define ADC_CONTROL_REF_CH_BIT_POS 12 +#define ADC_PRESCALE_VAL_BIT_POS 0 +#define ADC_PRESCALE_EN_BIT_POS 8 +#define ADC_DELAY_SAMPLE_RATE_BIT_POS 0 +#define ADC_DELAY_WARMUP_BIT_POS 16 +#define ADC_DELAY_SAMPLE_TIME_BIT_POS 24 typedef enum { ADC_CHANNEL0 = 0, diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/adc_sar_map.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/adc_sar_map.h index 95dc35b4d54..cb5793d4831 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/adc_sar_map.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/adc_sar_map.h @@ -45,13 +45,13 @@ typedef struct { struct { __IO uint32_t MODE :1; /** 1= Continuous Conversion 0= Single Shot */ __IO uint32_t START_CONV :1; /** 1= Start Conversion 0= No effect*/ - __IO uint32_t ABORT :1; /** 1= Aborts the Continuous Conversion mode 0=No effect */ + __IO uint32_t ABORT :1; /** 1= Aborts the Continuous Conversion mode 0=No effect */ __IO uint32_t MEASUREMENT_TYPE :1; /** 1= Absolute 0= Differential */ __IO uint32_t INPUT_SCALE :3; /** 000 1.0 001 0.6923 010 0.5294 011 0.4286 100 0.3600 101 0.3103 110 0.2728 111 0.2432 */ - __I uint32_t BIT7:1; /** NA Always read backs 0*/ - __IO uint32_t CONV_CH :3; /** Selects 1 or 8 channels to do a conversion on. 000 A[0] 000 A[1] 010 A[2] 011 A[3] 100 N/A 101 N/A 110 Temperature sensor 111 Battery */ - __I uint32_t NA :1; /** NA */ - __IO uint32_t REF_CH :3; /** Selects 1 to 8 channels for reference channel 000 A[0] 000 A[1] 010 A[2] 011 A[3] 100 N/A 101 N/A 110 Temperature sensor 111 Battery */ + __I uint32_t BIT7:1; /** NA Always read backs 0*/ + __IO uint32_t CONV_CH :3; /** Selects 1 or 8 channels to do a conversion on. 000 A[0] 000 A[1] 010 A[2] 011 A[3] 100 N/A 101 N/A 110 Temperature sensor 111 Battery */ + __I uint32_t NA :1; /** NA */ + __IO uint32_t REF_CH :3; /** Selects 1 to 8 channels for reference channel 000 A[0] 000 A[1] 010 A[2] 011 A[3] 100 N/A 101 N/A 110 Temperature sensor 111 Battery */ } BITS; __IO uint32_t WORD; } CONTROL; @@ -67,9 +67,9 @@ typedef struct { __IO uint32_t IR; union { struct { - __IO uint32_t PRESC_VAL :8; /**Set the pre-scalar value. The SAR ADC nominally runs at 4MHz, so this value should be programmed to 32 Mhz/4mhz -1=7 */ - __IO uint32_t PRESC_EN :1; /** 1= enables PreScalar 0= Disable Prescalar */ -// __IO uint32_t PHASE_CTRL :1; /** 1 = Phase 2 is delayed two 32MHz clock from phase 1. 0= Phase 2 is delayed one 32MHz clock from phase 1. */ + __IO uint32_t PRESC_VAL :8; /**Set the pre-scalar value. The SAR ADC nominally runs at 4MHz, so this value should be programmed to 32 Mhz/4mhz -1=7 */ + __IO uint32_t PRESC_EN :1; /** 1= enables PreScalar 0= Disable Prescalar */ +// __IO uint32_t PHASE_CTRL :1; /** 1 = Phase 2 is delayed two 32MHz clock from phase 1. 0= Phase 2 is delayed one 32MHz clock from phase 1. */ } BITS; __IO uint32_t WORD; } PRESCALE; diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/architecture.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/architecture.h index 4306b8ed6ca..69652af0ee6 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/architecture.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/architecture.h @@ -53,24 +53,24 @@ *************************************************************************************************/ /* Interrupt Control and State Register (0xE000ED04) - * 31 NMIPENDSET R/W 0 NMI pended - * 28 PENDSVSET R/W 0 Write 1 to pend system call; Read value - * indicates pending status - * 27 PENDSVCLR W 0 Write 1 to clear PendSV pending status - * 26 PENDSTSET R/W 0 Write 1 to pend Systick exception; Read - * value indicates pending status - * 25 PENDSTCLR W 0 Write 1 to clear Systick pending status - * 23 ISRPREEMPT R 0 Indicate that a pending interrupt is going - * to be active in next step (for debug) - * 22 ISRPENDING R 0 External interrupt pending (excluding - * system exceptions such as NMI for - * fault) - * 21:12 VECTPENDING R 0 Pending ISR number - * 11 RETTOBASE R 0 Set to 1 when the processor is running - * an exception handler and will return to - * thread level if interrupt return and no - * other exceptions pending - * 9:0 VECTACTIVE R 0 Current running interrupt service routine + * 31 NMIPENDSET R/W 0 NMI pended + * 28 PENDSVSET R/W 0 Write 1 to pend system call; Read value + * indicates pending status + * 27 PENDSVCLR W 0 Write 1 to clear PendSV pending status + * 26 PENDSTSET R/W 0 Write 1 to pend Systick exception; Read + * value indicates pending status + * 25 PENDSTCLR W 0 Write 1 to clear Systick pending status + * 23 ISRPREEMPT R 0 Indicate that a pending interrupt is going + * to be active in next step (for debug) + * 22 ISRPENDING R 0 External interrupt pending (excluding + * system exceptions such as NMI for + * fault) + * 21:12 VECTPENDING R 0 Pending ISR number + * 11 RETTOBASE R 0 Set to 1 when the processor is running + * an exception handler and will return to + * thread level if interrupt return and no + * other exceptions pending + * 9:0 VECTACTIVE R 0 Current running interrupt service routine */ #define RUNNING_IN_ISR (((SCB->ICSR & 0x3FF) > 0 ) ? 1 : 0) diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/assert_onsemi.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/assert_onsemi.h index 01ae0924240..b78089330ea 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/assert_onsemi.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/assert_onsemi.h @@ -55,15 +55,15 @@ void fOnAssert(const char *filename, unsigned int line); /** Can be assigned to hook into the assertion. */ extern void (*assertCallback)(const char *filename, unsigned int line); -#define ASSERT(test) ((test) ? (void)0 : fOnAssert(__FILE__, __LINE__)) +#define ASSERT(test) ((test) ? (void)0 : fOnAssert(__FILE__, __LINE__)) -#define VERIFY(test) ASSERT(test) +#define VERIFY(test) ASSERT(test) #else -#define ASSERT(test) ((test) ? (void)0 : 1) +#define ASSERT(test) ((test) ? (void)0 : 1) -#define VERIFY(test) ((void)(test)) +#define VERIFY(test) ((void)(test)) #endif // DEBUG diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/char_driver.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/char_driver.h index bbb160635b6..0f6ab4489dd 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/char_driver.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/char_driver.h @@ -42,8 +42,8 @@ #include "driver.h" -#define DRV_NO_ERROR (True) -#define DRV_ERROR (False) +#define DRV_NO_ERROR (True) +#define DRV_ERROR (False) /** A character driver structure. */ typedef struct char_driver { diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/clock.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/clock.h index 30f5f77b388..5126a7cd955 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/clock.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/clock.h @@ -47,41 +47,41 @@ /** Peripherals clock disable defines / * @details */ -#define CLOCK_TIMER0 (0x0) /**< Timer 0 clock enable offset */ -#define CLOCK_TIMER1 (0x1) /**< Timer 1 clock enable offset : */ -#define CLOCK_TIMER2 (0x2) /**< Timer 2 clock enable offset : */ -#define CLOCK_PAD0_0 (0x3) /**< Unused offset */ -#define CLOCK_PAD0_1 (0x4) /**< Unused offset */ -#define CLOCK_UART1 (0x5) /**< UART 1 clock enable offset */ -#define CLOCK_SPI (0x6) /**< SPI clock enable offset */ -#define CLOCK_I2C (0x7) /**< I2C clock enable offset */ -#define CLOCK_UART2 (0x8) /**< UART 2 clock enable offset */ -#define CLOCK_SPI2 (0x9) /**< Unused offset : */ -#define CLOCK_WDOG (0xA) /**< Watchdog clock enable offset */ -#define CLOCK_PWM (0xB) /**< PWM clock enable offset */ -#define CLOCK_GPIO (0xC) /**< GPIO clock enable offset */ -#define CLOCK_I2C2 (0xD) /**< Unused offset */ -#define CLOCK_PAD2_1 (0xE) /**< Unused offset */ -#define CLOCK_RTC (0xF) /**< RTC clock enable offset */ -#define CLOCK_CROSSB (0x10) /**< Crossbar clock enable offset */ -#define CLOCK_RAND (0x11) /**< Randomizer clock enable offset */ -#define CLOCK_PAD3_0 (0x12) /**< Unused offset */ -#define CLOCK_PAD3_1 (0x13) /**< Unused offset */ -#define CLOCK_MACHW (0x14) /**< macHw clock enable offset */ -#define CLOCK_ADC (0x15) /**< ADC clock enable offset */ -#define CLOCK_AES (0x16) /**< AES clock enable offset */ -#define CLOCK_FLASH (0x17) /**< Flash controller clock enable offset */ -#define CLOCK_PAD4_0 (0x18) /**< Unused offset */ -#define CLOCK_RFANA (0x19) /**< rfAna clock enable offset */ -#define CLOCK_IO (0x1A) /**< IO clock enable offset */ -#define CLOCK_PAD5_0 (0x1B) /**< Unused offset */ -#define CLOCK_PAD (0x1C) /**< Pad clock enable offset */ -#define CLOCK_PMU (0x1D) /**< Pmu clock enable offset */ -#define CLOCK_DMA (0x1E) /**< DMA clock enable offset */ -#define CLOCK_TEST (0x1F) /**< Test controller clock enable offset */ +#define CLOCK_TIMER0 (0x0) /**< Timer 0 clock enable offset */ +#define CLOCK_TIMER1 (0x1) /**< Timer 1 clock enable offset : */ +#define CLOCK_TIMER2 (0x2) /**< Timer 2 clock enable offset : */ +#define CLOCK_PAD0_0 (0x3) /**< Unused offset */ +#define CLOCK_PAD0_1 (0x4) /**< Unused offset */ +#define CLOCK_UART1 (0x5) /**< UART 1 clock enable offset */ +#define CLOCK_SPI (0x6) /**< SPI clock enable offset */ +#define CLOCK_I2C (0x7) /**< I2C clock enable offset */ +#define CLOCK_UART2 (0x8) /**< UART 2 clock enable offset */ +#define CLOCK_SPI2 (0x9) /**< Unused offset : */ +#define CLOCK_WDOG (0xA) /**< Watchdog clock enable offset */ +#define CLOCK_PWM (0xB) /**< PWM clock enable offset */ +#define CLOCK_GPIO (0xC) /**< GPIO clock enable offset */ +#define CLOCK_I2C2 (0xD) /**< Unused offset */ +#define CLOCK_PAD2_1 (0xE) /**< Unused offset */ +#define CLOCK_RTC (0xF) /**< RTC clock enable offset */ +#define CLOCK_CROSSB (0x10) /**< Crossbar clock enable offset */ +#define CLOCK_RAND (0x11) /**< Randomizer clock enable offset */ +#define CLOCK_PAD3_0 (0x12) /**< Unused offset */ +#define CLOCK_PAD3_1 (0x13) /**< Unused offset */ +#define CLOCK_MACHW (0x14) /**< macHw clock enable offset */ +#define CLOCK_ADC (0x15) /**< ADC clock enable offset */ +#define CLOCK_AES (0x16) /**< AES clock enable offset */ +#define CLOCK_FLASH (0x17) /**< Flash controller clock enable offset */ +#define CLOCK_PAD4_0 (0x18) /**< Unused offset */ +#define CLOCK_RFANA (0x19) /**< rfAna clock enable offset */ +#define CLOCK_IO (0x1A) /**< IO clock enable offset */ +#define CLOCK_PAD5_0 (0x1B) /**< Unused offset */ +#define CLOCK_PAD (0x1C) /**< Pad clock enable offset */ +#define CLOCK_PMU (0x1D) /**< Pmu clock enable offset */ +#define CLOCK_DMA (0x1E) /**< DMA clock enable offset */ +#define CLOCK_TEST (0x1F) /**< Test controller clock enable offset */ -#define CLOCK_ENABLE(a) CLOCKREG->PDIS.WORD &= ~(1 << a) -#define CLOCK_DISABLE(a) CLOCKREG->PDIS.WORD |= (uint32_t)(1 << a) +#define CLOCK_ENABLE(a) CLOCKREG->PDIS.WORD &= ~(1 << a) +#define CLOCK_DISABLE(a) CLOCKREG->PDIS.WORD |= (uint32_t)(1 << a) /************************************************************************************************* * * diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/clock_map.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/clock_map.h index dfc7056463f..e27d67d9d38 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/clock_map.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/clock_map.h @@ -57,7 +57,7 @@ typedef struct { __IO uint32_t RTCEN:1; } BITS; __IO uint32_t WORD; - } CCR; /**< 0x4001B000 Clock control register */ + } CCR; /**< 0x4001B000 Clock control register */ union { struct { __I uint32_t XTAL32M:1; @@ -68,15 +68,15 @@ typedef struct { __I uint32_t CAL32MDONE:1; } BITS; __I uint32_t WORD; - } CSR; /**< 0x4001B004 Clock status register */ + } CSR; /**< 0x4001B004 Clock status register */ union { struct { __IO uint32_t IE32K:1; __IO uint32_t IE32M:1; } BITS; __IO uint32_t WORD; - } IER; /**< 0x4001B008 Interrup enable register */ - __IO uint32_t ICR; /**< 0x4001B00C Interrupt clear register */ + } IER; /**< 0x4001B008 Interrup enable register */ + __IO uint32_t ICR; /**< 0x4001B00C Interrupt clear register */ union { struct { __IO uint32_t TIMER0:1; @@ -110,14 +110,14 @@ typedef struct { __IO uint32_t TEST:1; } BITS; __IO uint32_t WORD; - } PDIS; /**< 0x4001B010 Periphery disable */ - __IO uint32_t FDIV; /**< 0x4001B014 FCLK divider */ - __IO uint32_t TDIV; /**< 0x4001B01C Traceclk divider */ - __IO uint32_t WDIV; /**< 0x4001B020 Watchdog clock divider */ - __IO uint32_t TRIM_32M_INT; /**< 0x4001B024 32Mhz internal trim */ - __IO uint32_t TRIM_32K_INT; /**< 0x4001B02C 32kHz internal trim */ - __IO uint32_t TRIM_32M_EXT; /**< 0x4001B030 32Mhz external trim */ - __IO uint32_t TRIM_32K_EXT; /**< 0x4001B034 32Khz external trim */ + } PDIS; /**< 0x4001B010 Periphery disable */ + __IO uint32_t FDIV; /**< 0x4001B014 FCLK divider */ + __IO uint32_t TDIV; /**< 0x4001B01C Traceclk divider */ + __IO uint32_t WDIV; /**< 0x4001B020 Watchdog clock divider */ + __IO uint32_t TRIM_32M_INT; /**< 0x4001B024 32Mhz internal trim */ + __IO uint32_t TRIM_32K_INT; /**< 0x4001B02C 32kHz internal trim */ + __IO uint32_t TRIM_32M_EXT; /**< 0x4001B030 32Mhz external trim */ + __IO uint32_t TRIM_32K_EXT; /**< 0x4001B034 32Khz external trim */ union { struct { __IO uint32_t OV32M; @@ -126,7 +126,7 @@ typedef struct { __IO uint32_t EN32K; } BITS; __IO uint32_t WORD; - } CER; /**< 0x4001B038 clock enable register*/ + } CER; /**< 0x4001B038 clock enable register*/ } ClockReg_t, *ClockReg_pt; #endif /* CLOCK_MAP_H_ */ diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/crossbar.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/crossbar.h index e7347c39d4d..127944dd99e 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/crossbar.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/crossbar.h @@ -39,13 +39,13 @@ * * *************************************************************************************************/ -#define CONFIGURE_AS_GPIO (uint8_t)0x00 -#define CONFIGURE_AS_RESERVED_0 (uint8_t)0x01 -#define CONFIGURE_AS_RESERVED_1 (uint8_t)0x02 -#define CONFIGURE_AS_RESERVED_2 (uint8_t)0x03 -#define CONFIGURE_AS_PWM (uint8_t)0x04 -#define CONFIGURE_AS_I2C (uint8_t)0x05 -#define CONFIGURE_AS_SPI (uint8_t)0x06 -#define CONFIGURE_AS_UART (uint8_t)0x07 +#define CONFIGURE_AS_GPIO (uint8_t)0x00 +#define CONFIGURE_AS_RESERVED_0 (uint8_t)0x01 +#define CONFIGURE_AS_RESERVED_1 (uint8_t)0x02 +#define CONFIGURE_AS_RESERVED_2 (uint8_t)0x03 +#define CONFIGURE_AS_PWM (uint8_t)0x04 +#define CONFIGURE_AS_I2C (uint8_t)0x05 +#define CONFIGURE_AS_SPI (uint8_t)0x06 +#define CONFIGURE_AS_UART (uint8_t)0x07 #endif //_CROSSBAR_H_ diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/device/NCS36510.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/device/NCS36510.h index 15c5e94967a..ebe988add05 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/device/NCS36510.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/device/NCS36510.h @@ -31,40 +31,39 @@ * ---------- Interrupt Number Definition ----------------------------------- * ========================================================================== */ -typedef enum IRQn -{ - /****** Cortex-M3 Processor Exceptions Numbers ***************************************************/ - NonMaskableInt_IRQn = -14, /*!< 2 Cortex-M3 Non Maskable Interrupt */ - HardFault_IRQn = -13, /*!< 3 Cortex-M3 Hard Fault Interrupt */ - MemoryManagement_IRQn = -12, /*!< 4 Cortex-M3 Memory Management Interrupt */ - BusFault_IRQn = -11, /*!< 5 Cortex-M3 Bus Fault Interrupt */ - UsageFault_IRQn = -10, /*!< 6 Cortex-M3 Usage Fault Interrupt */ - SVCall_IRQn = -5, /*!< 11 Cortex-M3 SV Call Interrupt */ - DebugMonitor_IRQn = -4, /*!< 12 Cortex-M3 Debug Monitor Interrupt */ - PendSV_IRQn = -2, /*!< 14 Cortex-M3 Pend SV Interrupt */ - SysTick_IRQn = -1, /*!< 15 Cortex-M3 System Tick Interrupt */ +typedef enum IRQn { + /****** Cortex-M3 Processor Exceptions Numbers ***************************************************/ + NonMaskableInt_IRQn = -14, /*!< 2 Cortex-M3 Non Maskable Interrupt */ + HardFault_IRQn = -13, /*!< 3 Cortex-M3 Hard Fault Interrupt */ + MemoryManagement_IRQn = -12, /*!< 4 Cortex-M3 Memory Management Interrupt */ + BusFault_IRQn = -11, /*!< 5 Cortex-M3 Bus Fault Interrupt */ + UsageFault_IRQn = -10, /*!< 6 Cortex-M3 Usage Fault Interrupt */ + SVCall_IRQn = -5, /*!< 11 Cortex-M3 SV Call Interrupt */ + DebugMonitor_IRQn = -4, /*!< 12 Cortex-M3 Debug Monitor Interrupt */ + PendSV_IRQn = -2, /*!< 14 Cortex-M3 Pend SV Interrupt */ + SysTick_IRQn = -1, /*!< 15 Cortex-M3 System Tick Interrupt */ - /****** ARMCM3 specific Interrupt Numbers ********************************************************/ - Tim0_IRQn = 0, - Tim1_IRQn = 1, - Tim2_IRQn = 2, - Uart1_IRQn = 3, - Spi_IRQn = 4, - I2C_IRQn = 5, - Gpio_IRQn = 6, - Rtc_IRQn = 7, - Flash_IRQn = 8, - MacHw_IRQn = 9, - Aes_IRQn = 10, - Adc_IRQn = 11, - ClockCal_IRQn = 12, - Uart2_IRQn = 13, - Uvi_IRQn = 14, - Dma_IRQn = 15, - DbgPwrUp_IRQn = 16, - Spi2_IRQn = 17, - I2C2_IRQn = 18, - FVDDHComp_IRQn = 19 + /****** ARMCM3 specific Interrupt Numbers ********************************************************/ + Tim0_IRQn = 0, + Tim1_IRQn = 1, + Tim2_IRQn = 2, + Uart1_IRQn = 3, + Spi_IRQn = 4, + I2C_IRQn = 5, + Gpio_IRQn = 6, + Rtc_IRQn = 7, + Flash_IRQn = 8, + MacHw_IRQn = 9, + Aes_IRQn = 10, + Adc_IRQn = 11, + ClockCal_IRQn = 12, + Uart2_IRQn = 13, + Uvi_IRQn = 14, + Dma_IRQn = 15, + DbgPwrUp_IRQn = 16, + Spi2_IRQn = 17, + I2C2_IRQn = 18, + FVDDHComp_IRQn = 19 } IRQn_Type; /** @@ -79,12 +78,12 @@ typedef enum IRQn #define __NVIC_PRIO_BITS 4 /*!< Number of Bits used for Priority Levels */ #define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */ -//#define YOTTA_CFG_CMSIS_NVIC_USER_IRQ_OFFSET 16 -//#define YOTTA_CFG_CMSIS_NVIC_USER_IRQ_NUMBER 20 +//#define YOTTA_CFG_CMSIS_NVIC_USER_IRQ_OFFSET 16 +//#define YOTTA_CFG_CMSIS_NVIC_USER_IRQ_NUMBER 20 //#define NVIC_NUM_VECTORS (NVIC_USER_IRQ_OFFSET + NVIC_USER_IRQ_NUMBER) //#define YOTTA_CFG_CMSIS_NVIC_RAM_VECTOR_ADDRESS -//#define YOTTA_CFG_CMSIS_NVIC_FLASH_VECTOR_ADDRESS 0x3000 +//#define YOTTA_CFG_CMSIS_NVIC_FLASH_VECTOR_ADDRESS 0x3000 #include /* Cortex-M3 processor and core peripherals */ #include "system_NCS36510.h" /* System Header */ diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/device/TOOLCHAIN_ARM/startup_NCS36510.s b/targets/TARGET_ONSEMI/TARGET_NCS36510/device/TOOLCHAIN_ARM/startup_NCS36510.s index 8c47404d0c5..7478b2c3a96 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/device/TOOLCHAIN_ARM/startup_NCS36510.s +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/device/TOOLCHAIN_ARM/startup_NCS36510.s @@ -64,25 +64,25 @@ __Vectors DCD |Image$$ARM_LIB_STACK$$ZI$$Limit| ; Top of Stack ; External Interrupts DCD fIrqTim0Handler - DCD fIrqTim1Handler - DCD fIrqTim2Handler - DCD fIrqUart1Handler - DCD fIrqSpiHandler - DCD fIrqI2CHandler - DCD fIrqGpioHandler - DCD fIrqRtcHandler - DCD fIrqFlashHandler - DCD fIrqMacHwHandler - DCD fIrqAesHandler - DCD fIrqAdcHandler - DCD fIrqClockCalHandler - DCD fIrqUart2Handler - DCD fIrqUviHandler - DCD fIrqDmaHandler - DCD fIrqDbgPwrUpHandler - DCD fIrqSpi2Handler - DCD fIrqI2C2Handler - DCD fIrqFVDDHCompHandler + DCD fIrqTim1Handler + DCD fIrqTim2Handler + DCD fIrqUart1Handler + DCD fIrqSpiHandler + DCD fIrqI2CHandler + DCD fIrqGpioHandler + DCD fIrqRtcHandler + DCD fIrqFlashHandler + DCD fIrqMacHwHandler + DCD fIrqAesHandler + DCD fIrqAdcHandler + DCD fIrqClockCalHandler + DCD fIrqUart2Handler + DCD fIrqUviHandler + DCD fIrqDmaHandler + DCD fIrqDbgPwrUpHandler + DCD fIrqSpi2Handler + DCD fIrqI2C2Handler + DCD fIrqFVDDHCompHandler __Vectors_End __Vectors_Size EQU __Vectors_End - __Vectors diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/device/TOOLCHAIN_GCC_ARM/NCS36510.ld b/targets/TARGET_ONSEMI/TARGET_NCS36510/device/TOOLCHAIN_GCC_ARM/NCS36510.ld index 122bebd1ef0..6076d11859d 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/device/TOOLCHAIN_GCC_ARM/NCS36510.ld +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/device/TOOLCHAIN_GCC_ARM/NCS36510.ld @@ -2,48 +2,46 @@ * NCS36510 ARM GCC linker script file */ -MEMORY -{ - VECTORS (rx) : ORIGIN = 0x00003000, LENGTH = 0x00000090 - FLASH (rx) : ORIGIN = 0x00003090, LENGTH = 320K - 4K - 0x90 - RAM (rwx) : ORIGIN = 0x3FFF4000, LENGTH = 48K -} - -/* Linker script to place sections and symbol values. Should be used together - * with other linker script that defines memory regions FLASH and RAM. - * It references following symbols, which must be defined in code: - * _reset_init : Entry of reset handler - * - * It defines following symbols, which code can use without definition: - * __exidx_start - * __exidx_end - * __etext - * __data_start__ - * __preinit_array_start - * __preinit_array_end - * __init_array_start - * __init_array_end - * __fini_array_start - * __fini_array_end - * __data_end__ - * __bss_start__ - * __bss_end__ - * __end__ - * end - * __HeapLimit - * __StackLimit - * __StackTop - * __stack - */ -ENTRY(Reset_Handler) - -SECTIONS -{ - .isr_vector : +MEMORY { + VECTORS (rx) : ORIGIN = 0x00003000, LENGTH = 0x00000090 + FLASH (rx) : ORIGIN = 0x00003090, LENGTH = 320K - 4K - 0x90 + RAM (rwx) : ORIGIN = 0x3FFF4000, LENGTH = 48K + } + + /* Linker script to place sections and symbol values. Should be used together + * with other linker script that defines memory regions FLASH and RAM. + * It references following symbols, which must be defined in code: + * _reset_init : Entry of reset handler + * + * It defines following symbols, which code can use without definition: + * __exidx_start + * __exidx_end + * __etext + * __data_start__ + * __preinit_array_start + * __preinit_array_end + * __init_array_start + * __init_array_end + * __fini_array_start + * __fini_array_end + * __data_end__ + * __bss_start__ + * __bss_end__ + * __end__ + * end + * __HeapLimit + * __StackLimit + * __StackTop + * __stack + */ + ENTRY(Reset_Handler) + + SECTIONS { +.isr_vector : { __vector_table = .; KEEP(*(.vector_table)) - . = ALIGN(4); + . = ALIGN(4); } > VECTORS /* ensure that uvisor bss is at the beginning of memory */ @@ -70,7 +68,7 @@ SECTIONS __uvisor_bss_end = .; } > RAM - .text : +.text : { /* uVisor code and data */ . = ALIGN(4); @@ -102,19 +100,19 @@ SECTIONS KEEP(*(.eh_frame*)) } > FLASH - .ARM.extab : +.ARM.extab : { *(.ARM.extab* .gnu.linkonce.armextab.*) } > FLASH - .ARM.exidx : +.ARM.exidx : { - __exidx_start = .; + __exidx_start = .; *(.ARM.exidx* .gnu.linkonce.armexidx.*) - __exidx_end = .; + __exidx_end = .; } > FLASH - .data : +.data : { PROVIDE( __etext = LOADADDR(.data) ); @@ -149,7 +147,7 @@ SECTIONS } >RAM AT>FLASH /* uvisor configuration data */ - .uvisor.secure : +.uvisor.secure : { . = ALIGN(32); __uvisor_secure_start = .; @@ -211,7 +209,7 @@ SECTIONS PROVIDE(__heap_size = SIZEOF(.heap)); PROVIDE(__mbed_sbrk_start = ADDR(.heap)); PROVIDE(__mbed_krbs_start = ADDR(.heap) + SIZEOF(.heap)); - + /* .stack section doesn't contains any symbols. It is only * used for linker to reserve space for the main stack section * WARNING: .stack should come immediately after the last secure memory diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/device/TOOLCHAIN_GCC_ARM/startup_NCS36510.s b/targets/TARGET_ONSEMI/TARGET_NCS36510/device/TOOLCHAIN_GCC_ARM/startup_NCS36510.s index 56da62bf0fe..4ecaeb589c7 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/device/TOOLCHAIN_GCC_ARM/startup_NCS36510.s +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/device/TOOLCHAIN_GCC_ARM/startup_NCS36510.s @@ -33,90 +33,90 @@ ---------------------------------------------------------------------------*/ - .syntax unified - .arch armv7-m +.syntax unified +.arch armv7-m - .section .stack - .align 3 +.section .stack +.align 3 #ifdef __STACK_SIZE - .equ Stack_Size, __STACK_SIZE +.equ Stack_Size, __STACK_SIZE #else - .equ Stack_Size, 0x400 +.equ Stack_Size, 0x400 #endif - .globl __StackTop - .globl __StackLimit +.globl __StackTop +.globl __StackLimit __StackLimit: - .space Stack_Size - .size __StackLimit, . - __StackLimit +.space Stack_Size +.size __StackLimit, . - __StackLimit __StackTop: - .size __StackTop, . - __StackTop +.size __StackTop, . - __StackTop - .section .heap - .align 3 +.section .heap +.align 3 #ifdef __HEAP_SIZE - .equ Heap_Size, __HEAP_SIZE +.equ Heap_Size, __HEAP_SIZE #else - .equ Heap_Size, 0x400 +.equ Heap_Size, 0x400 #endif - .globl __HeapBase - .globl __HeapLimit +.globl __HeapBase +.globl __HeapLimit __HeapBase: - .space Heap_Size - .size __HeapBase, . - __HeapBase +.space Heap_Size +.size __HeapBase, . - __HeapBase __HeapLimit: - .size __HeapLimit, . - __HeapLimit +.size __HeapLimit, . - __HeapLimit - .section .vector_table,"a",%progbits - .align 2 - .globl __Vectors +.section .vector_table,"a",%progbits +.align 2 +.globl __Vectors __Vectors: - .long __StackTop /* Top of Stack */ - .long Reset_Handler /* Reset Handler */ - .long NMI_Handler /* NMI Handler */ - .long HardFault_Handler /* Hard Fault Handler */ - .long MemManage_Handler /* MPU Fault Handler */ - .long BusFault_Handler /* Bus Fault Handler */ - .long UsageFault_Handler /* Usage Fault Handler */ - .long 0 /* Reserved */ - .long 0 /* Reserved */ - .long 0 /* Reserved */ - .long 0 /* Reserved */ - .long SVC_Handler /* SVCall Handler */ - .long DebugMon_Handler /* Debug Monitor Handler */ - .long 0 /* Reserved */ - .long PendSV_Handler /* PendSV Handler */ - .long SysTick_Handler /* SysTick Handler */ - - /* External Interrupts */ - .long fIrqTim0Handler - .long fIrqTim1Handler - .long fIrqTim2Handler - .long fIrqUart1Handler - .long fIrqSpiHandler - .long fIrqI2CHandler - .long fIrqGpioHandler - .long fIrqRtcHandler - .long fIrqFlashHandler - .long fIrqMacHwHandler - .long fIrqAesHandler - .long fIrqAdcHandler - .long fIrqClockCalHandler - .long fIrqUart2Handler - .long fIrqUviHandler - .long fIrqDmaHandler - .long fIrqDbgPwrUpHandler - .long fIrqSpi2Handler - .long fIrqI2C2Handler - .long fIrqFVDDHCompHandler - - .size __Vectors, . - __Vectors - - .section .text.Reset_Handler - .thumb - .thumb_func - .align 2 - .globl Reset_Handler - .type Reset_Handler, %function +.long __StackTop /* Top of Stack */ +.long Reset_Handler /* Reset Handler */ +.long NMI_Handler /* NMI Handler */ +.long HardFault_Handler /* Hard Fault Handler */ +.long MemManage_Handler /* MPU Fault Handler */ +.long BusFault_Handler /* Bus Fault Handler */ +.long UsageFault_Handler /* Usage Fault Handler */ +.long 0 /* Reserved */ +.long 0 /* Reserved */ +.long 0 /* Reserved */ +.long 0 /* Reserved */ +.long SVC_Handler /* SVCall Handler */ +.long DebugMon_Handler /* Debug Monitor Handler */ +.long 0 /* Reserved */ +.long PendSV_Handler /* PendSV Handler */ +.long SysTick_Handler /* SysTick Handler */ + +/* External Interrupts */ +.long fIrqTim0Handler +.long fIrqTim1Handler +.long fIrqTim2Handler +.long fIrqUart1Handler +.long fIrqSpiHandler +.long fIrqI2CHandler +.long fIrqGpioHandler +.long fIrqRtcHandler +.long fIrqFlashHandler +.long fIrqMacHwHandler +.long fIrqAesHandler +.long fIrqAdcHandler +.long fIrqClockCalHandler +.long fIrqUart2Handler +.long fIrqUviHandler +.long fIrqDmaHandler +.long fIrqDbgPwrUpHandler +.long fIrqSpi2Handler +.long fIrqI2C2Handler +.long fIrqFVDDHCompHandler + +.size __Vectors, . - __Vectors + +.section .text.Reset_Handler +.thumb +.thumb_func +.align 2 +.globl Reset_Handler +.type Reset_Handler, %function Reset_Handler: /* Loop to copy data from read only memory to RAM. The ranges * of copy from/to are specified by following symbols evaluated in diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/device/TOOLCHAIN_IAR/startup_NCS36510.s b/targets/TARGET_ONSEMI/TARGET_NCS36510/device/TOOLCHAIN_IAR/startup_NCS36510.s index b0703744817..e6ca52d23ef 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/device/TOOLCHAIN_IAR/startup_NCS36510.s +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/device/TOOLCHAIN_IAR/startup_NCS36510.s @@ -1,4 +1,4 @@ -;/**************************************************************************//** +;/****************************************************************************** ; * @file startup_ARMCM3.s ; * @brief CMSIS Cortex-M4 Core Device Startup File ; * for CM3 Device Series @@ -91,32 +91,32 @@ __vector_table_0x1c DCD SysTick_Handler ; External Interrupts - DCD fIrqTim0Handler - DCD fIrqTim1Handler - DCD fIrqTim2Handler - DCD fIrqUart1Handler - DCD fIrqSpiHandler - DCD fIrqI2CHandler - DCD fIrqGpioHandler - DCD fIrqRtcHandler - DCD fIrqFlashHandler - DCD fIrqMacHwHandler - DCD fIrqAesHandler - DCD fIrqAdcHandler - DCD fIrqClockCalHandler - DCD fIrqUart2Handler - DCD fIrqUviHandler - DCD fIrqDmaHandler - DCD fIrqDbgPwrUpHandler - /* REV C/D interrupts */ - DCD fIrqSpi2Handler - DCD fIrqI2c2Handler - DCD FIrqFVDDHCompHandler /* FVDDH Supply Comparator Trip */ + DCD fIrqTim0Handler + DCD fIrqTim1Handler + DCD fIrqTim2Handler + DCD fIrqUart1Handler + DCD fIrqSpiHandler + DCD fIrqI2CHandler + DCD fIrqGpioHandler + DCD fIrqRtcHandler + DCD fIrqFlashHandler + DCD fIrqMacHwHandler + DCD fIrqAesHandler + DCD fIrqAdcHandler + DCD fIrqClockCalHandler + DCD fIrqUart2Handler + DCD fIrqUviHandler + DCD fIrqDmaHandler + DCD fIrqDbgPwrUpHandler + /* REV C/D interrupts */ + DCD fIrqSpi2Handler + DCD fIrqI2c2Handler + DCD FIrqFVDDHCompHandler /* FVDDH Supply Comparator Trip */ #endif __Vectors_End __Vectors EQU __vector_table -__Vectors_Size EQU __Vectors_End - __Vectors +__Vectors_Size EQU __Vectors_End - __Vectors opt: DC32 0x2082353F /* Full featured device */ opt_reg: DC32 0x4001E000 @@ -292,7 +292,7 @@ fIrqUviHandler fIrqSpi2Handler B fIrqSpi2Handler - PUBWEAK fIrqI2c2Handler + PUBWEAK fIrqI2c2Handler SECTION .text:CODE:REORDER(1) fIrqI2c2Handler B fIrqI2c2Handler @@ -302,7 +302,7 @@ fIrqI2c2Handler FIrqFVDDHCompHandler B FIrqFVDDHCompHandler - PUBWEAK DEF_IRQHandler + PUBWEAK DEF_IRQHandler SECTION .text:CODE:REORDER(1) DEF_IRQHandler B DEF_IRQHandler diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/device/cmsis_nvic.c b/targets/TARGET_ONSEMI/TARGET_NCS36510/device/cmsis_nvic.c index 94baebee658..06bbcd6759c 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/device/cmsis_nvic.c +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/device/cmsis_nvic.c @@ -24,7 +24,7 @@ * INCIDENTAL, OR CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. * @endinternal * -* @ingroup +* @ingroup * * @details */ @@ -35,7 +35,7 @@ #define NVIC_FLASH_VECTOR_ADDRESS (0x00000000) // Initial vector position in flash -void NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) +void NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) { static volatile uint32_t *vectors = (uint32_t *)NVIC_FLASH_VECTOR_ADDRESS; diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/device/cmsis_nvic.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/device/cmsis_nvic.h index 62f15e2e7db..792d4a2b7d1 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/device/cmsis_nvic.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/device/cmsis_nvic.h @@ -24,7 +24,7 @@ * INCIDENTAL, OR CONSEQUENTIAL DAMAGES, FOR ANY REASON WHATSOEVER. * @endinternal * -* @ingroup +* @ingroup * * @details */ diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/device/system_NCS36510.c b/targets/TARGET_ONSEMI/TARGET_NCS36510/device/system_NCS36510.c index 8bf95ae8129..d3fa866265d 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/device/system_NCS36510.c +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/device/system_NCS36510.c @@ -44,8 +44,9 @@ uint32_t SystemCoreClock = __SYSTEM_CLOCK;/*!< System Clock Frequency (Core Cloc Clock functions *----------------------------------------------------------------------------*/ void SystemCoreClockUpdate (void) /* Get Core Clock Frequency */ -{ /*Function not implimented */ - SystemCoreClock = __SYSTEM_CLOCK; +{ + /*Function not implimented */ + SystemCoreClock = __SYSTEM_CLOCK; } /** @@ -60,7 +61,7 @@ void SystemCoreClockUpdate (void) /* Get Core Clock Frequency */ void SystemInit (void) { - SystemCoreClock = __SYSTEM_CLOCK; + SystemCoreClock = __SYSTEM_CLOCK; - fNcs36510Init(); + fNcs36510Init(); } diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/device/system_NCS36510.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/device/system_NCS36510.h index 0f277e9f1f4..f5dd20864d0 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/device/system_NCS36510.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/device/system_NCS36510.h @@ -9,9 +9,9 @@ * Copyright (C) 2010-2011 ARM Limited. All rights reserved. * * @par - * ARM Limited (ARM) is supplying this software for use with Cortex-M - * processor based microcontrollers. This file can be freely distributed - * within development tools that are supporting such ARM based processors. + * ARM Limited (ARM) is supplying this software for use with Cortex-M + * processor based microcontrollers. This file can be freely distributed + * within development tools that are supporting such ARM based processors. * * @par * THIS SOFTWARE IS PROVIDED "AS IS". NO WARRANTIES, WHETHER EXPRESS, IMPLIED @@ -50,7 +50,7 @@ extern void SystemInit (void); * @param none * @return none * - * @brief Updates the SystemCoreClock with current core Clock + * @brief Updates the SystemCoreClock with current core Clock * retrieved from cpu registers. */ extern void SystemCoreClockUpdate (void); diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/dma_map.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/dma_map.h index 84ef37fea01..6728c46f107 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/dma_map.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/dma_map.h @@ -49,60 +49,60 @@ /** DMA control HW registers structure overlay */ #ifdef REVB typedef struct { - __IO uint32_t CONTROL; /**< Write 1 to enable DMA, write 0 to disable */ - __IO uint32_t SOURCE; /**< Address of source, read to get the number of bytes written */ - __IO uint32_t DESTINATION; /**< Address of destination, read to get the number of bytes written */ - __IO uint32_t SIZE; /**< Lenght of the entire transfer */ - __IO uint32_t STATUS; /**< To be debined */ - __IO uint32_t INT_ENABLE; /**< Enable interrupt source by writing 1. Bit 0: DMA done, Bit 1: Source Error, Bit 2: Destination Error */ - __IO uint32_t INT_CLEAR_ENABLE; /**< Clear Interrupt source by writing 1. Bit 0: DMA done, Bit 1: Source Error, Bit 2: Destination Error */ - __I uint32_t INT_STATUS; /**< Current interrupt status. Bit 0: DMA done, Bit 1: Source Error, Bit 2: Destination Error */ + __IO uint32_t CONTROL; /**< Write 1 to enable DMA, write 0 to disable */ + __IO uint32_t SOURCE; /**< Address of source, read to get the number of bytes written */ + __IO uint32_t DESTINATION; /**< Address of destination, read to get the number of bytes written */ + __IO uint32_t SIZE; /**< Lenght of the entire transfer */ + __IO uint32_t STATUS; /**< To be debined */ + __IO uint32_t INT_ENABLE; /**< Enable interrupt source by writing 1. Bit 0: DMA done, Bit 1: Source Error, Bit 2: Destination Error */ + __IO uint32_t INT_CLEAR_ENABLE; /**< Clear Interrupt source by writing 1. Bit 0: DMA done, Bit 1: Source Error, Bit 2: Destination Error */ + __I uint32_t INT_STATUS; /**< Current interrupt status. Bit 0: DMA done, Bit 1: Source Error, Bit 2: Destination Error */ } DmaReg_t, *DmaReg_pt; #endif /* REVB */ #ifdef REVD typedef struct { union { struct { - __IO uint32_t ENABLE:1; /**< DMA enable: 1 to enable; 0 to disable */ - __IO uint32_t MODE :2; /**< DMA mode: 00 Memory to memory; 01 Memory to peripheral; 10 Peripheral to memory; 11 Peripheral to peripheral */ + __IO uint32_t ENABLE:1; /**< DMA enable: 1 to enable; 0 to disable */ + __IO uint32_t MODE :2; /**< DMA mode: 00 Memory to memory; 01 Memory to peripheral; 10 Peripheral to memory; 11 Peripheral to peripheral */ } BITS; __IO uint32_t WORD; - } CONTROL; /**< Control register */ - __IO uint32_t SOURCE; /**< Address of source, read to get the number of bytes written */ - __IO uint32_t DESTINATION; /**< Address of destination, read to get the number of bytes written */ - __IO uint32_t SIZE; /**< Lenght of the entire transfer */ + } CONTROL; /**< Control register */ + __IO uint32_t SOURCE; /**< Address of source, read to get the number of bytes written */ + __IO uint32_t DESTINATION; /**< Address of destination, read to get the number of bytes written */ + __IO uint32_t SIZE; /**< Lenght of the entire transfer */ union { struct { - __I uint32_t COMPLETED:1; /**< Done: 0 Not complete, 1 Complete */ - __I uint32_t SOURCE_ERROR:1; /**< Source Error: 0 No Error, 1 Error */ - __I uint32_t DESTINATION_ERROR:1; /**< Destination Error: 0 No Error, 1 Source Error */ + __I uint32_t COMPLETED:1; /**< Done: 0 Not complete, 1 Complete */ + __I uint32_t SOURCE_ERROR:1; /**< Source Error: 0 No Error, 1 Error */ + __I uint32_t DESTINATION_ERROR:1; /**< Destination Error: 0 No Error, 1 Source Error */ } BITS; __I uint32_t WORD; - } STATUS; /**< Status register */ + } STATUS; /**< Status register */ union { struct { - __IO uint32_t COMPLETED:1; /**< A write of 1 enables the interrupt generated by a DMA transfer complete */ - __IO uint32_t SOURCE_ERROR:1; /**< A write of 1 enables the interrupt generated by an error on the source side of the DMA transfer */ - __IO uint32_t DESTINATION_ERROR:1; /**< A write of 1 enables the interrupt generated by an error on the destination side of the DMA transfer */ + __IO uint32_t COMPLETED:1; /**< A write of 1 enables the interrupt generated by a DMA transfer complete */ + __IO uint32_t SOURCE_ERROR:1; /**< A write of 1 enables the interrupt generated by an error on the source side of the DMA transfer */ + __IO uint32_t DESTINATION_ERROR:1; /**< A write of 1 enables the interrupt generated by an error on the destination side of the DMA transfer */ } BITS; __IO uint32_t WORD; - } INT_ENABLE; /**< Interrupt enable */ + } INT_ENABLE; /**< Interrupt enable */ union { struct { - __IO uint32_t COMPLETED:1; /**< A write clears the interrupt generated by a DMA transfer complete */ - __IO uint32_t SOURCE_ERROR:1; /**< A write clears the interrupt generated by an error on the source side of the DMA transfer */ - __IO uint32_t DESTINATION_ERROR:1; /**< A write clears the interrupt generated by an error on the destination side of the DMA transfer */ + __IO uint32_t COMPLETED:1; /**< A write clears the interrupt generated by a DMA transfer complete */ + __IO uint32_t SOURCE_ERROR:1; /**< A write clears the interrupt generated by an error on the source side of the DMA transfer */ + __IO uint32_t DESTINATION_ERROR:1; /**< A write clears the interrupt generated by an error on the destination side of the DMA transfer */ } BITS; __IO uint32_t WORD; - } INT_CLEAR; /**< Interrupt clear */ + } INT_CLEAR; /**< Interrupt clear */ union { struct { - __I uint32_t COMPLETED:1; /**< Transfer complete interrupt */ - __I uint32_t SOURCE_ERROR:1; /**< Source error interrupt */ - __I uint32_t DESTINATION_ERROR:1; /**< Destination error interrupt */ + __I uint32_t COMPLETED:1; /**< Transfer complete interrupt */ + __I uint32_t SOURCE_ERROR:1; /**< Source error interrupt */ + __I uint32_t DESTINATION_ERROR:1; /**< Destination error interrupt */ } BITS; __I uint32_t WORD; - } INT_STATUS; /**< Interrupt status */ + } INT_STATUS; /**< Interrupt status */ } DmaReg_t, *DmaReg_pt; #endif /* REVD */ #endif /* DMA_MAP_H_ */ diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/error.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/error.h index a76b7c17662..1c33cc3ea42 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/error.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/error.h @@ -33,6 +33,6 @@ #include typedef uint8_t error; -#define NO_ERROR (0xFF) +#define NO_ERROR (0xFF) #endif /* ERROR_H_ */ diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/flash_map.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/flash_map.h index 19849ad24c3..35df77ffb8b 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/flash_map.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/flash_map.h @@ -41,11 +41,11 @@ typedef struct { union { struct { - __I uint32_t FLASH_A_BUSY:1; /**< Busy A */ - __I uint32_t FLASH_B_BUSY:1; /**< Busy B */ - __I uint32_t FLASH_A_UNLOCK:1; /**< Unlock A */ - __I uint32_t FLASH_B_UNLOCK:1; /**< Unlock B */ - __I uint32_t FLASH_ERROR:3; /**< 000 No Error, 111 Attempt to access an array while it is busy powering up, 001 Attempt to erase bootloader in the field, 010 Attempt to access array during erase, 100 Attempt to access array during write */ + __I uint32_t FLASH_A_BUSY:1; /**< Busy A */ + __I uint32_t FLASH_B_BUSY:1; /**< Busy B */ + __I uint32_t FLASH_A_UNLOCK:1; /**< Unlock A */ + __I uint32_t FLASH_B_UNLOCK:1; /**< Unlock B */ + __I uint32_t FLASH_ERROR:3; /**< 000 No Error, 111 Attempt to access an array while it is busy powering up, 001 Attempt to erase bootloader in the field, 010 Attempt to access array during erase, 100 Attempt to access array during write */ } BITS; __I uint32_t WORD; } STATUS; diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/gpio.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/gpio.h index 8780f196c03..e10facf61bb 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/gpio.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/gpio.h @@ -55,26 +55,26 @@ extern "C" { /** output configuration push/pull */ -#define PAD_OUTCFG_PUSHPULL (uint8_t)0x00 +#define PAD_OUTCFG_PUSHPULL (uint8_t)0x00 /** output configuration open drain */ -#define PAD_OOUTCFG_OPENDRAIN (uint8_t)0x01 +#define PAD_OOUTCFG_OPENDRAIN (uint8_t)0x01 /** no pull up nor pull down */ -#define PAD_PULL_NONE (uint8_t)0x01 +#define PAD_PULL_NONE (uint8_t)0x01 /** pull down */ -#define PAD_PULL_DOWN (uint8_t)0x00 +#define PAD_PULL_DOWN (uint8_t)0x00 /** pull up */ -#define PAD_PULL_UP (uint8_t)0x03 +#define PAD_PULL_UP (uint8_t)0x03 /* Number of DIO lines supported by NCS36510 */ -#define NUMBER_OF_GPIO ((uint8_t)0x12) +#define NUMBER_OF_GPIO ((uint8_t)0x12) /* All DIO lines set to 1 */ -#define IO_ALL ((uint32_t)0x3FFFF) -#define IO_NONE ((uint32_t)0x00000) +#define IO_ALL ((uint32_t)0x3FFFF) +#define IO_NONE ((uint32_t)0x00000) /* Gpio handler */ void fGpioHandler(void); diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/gpio_irq_api.c b/targets/TARGET_ONSEMI/TARGET_NCS36510/gpio_irq_api.c index f8d6e7e6117..276d6861375 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/gpio_irq_api.c +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/gpio_irq_api.c @@ -79,8 +79,8 @@ static uint32_t gpioIds[NUMBER_OF_GPIO] = {0}; /** Main GPIO IRQ handler called from vector table handler * - * @param gpioBase The GPIO register base address - * @return void + * @param gpioBase The GPIO register base address + * @return void */ void fGpioHandler(void) { diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/gpio_map.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/gpio_map.h index 0bc576e8fc1..831d73e4e58 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/gpio_map.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/gpio_map.h @@ -46,20 +46,20 @@ /** Structure overlay for GPIO control registers, see memory_map.h * For most registers, bit lockations match GPIO numbers.*/ typedef struct { - __IO uint32_t R_STATE_W_SET; /**< Read synchronized input / Write ones to bits to set corresponding output IO's*/ - __IO uint32_t R_IRQ_W_CLEAR; /**< Read state of irq / Write ones to bits to clear corresponging output IO's */ - __IO uint32_t W_OUT; /**< Write ones to set direction to output */ - __IO uint32_t W_IN; /**< Write ones to set direction to input */ - __IO uint32_t IRQ_ENABLE_SET; /**< Read active high irq enable / Write ones to enable irq */ - __IO uint32_t IRQ_ENABLE_CLEAR; /**< Read active high irq enable / Write ones to disable irq */ - __IO uint32_t IRQ_EDGE; /**< Read irq configuration (edge or level) / Write ones to set irq to edge-sensitive */ - __IO uint32_t IRQ_LEVEL; /**< Read irq configuration (edge or level) / Write ones to set irq to level-sensitive */ - __IO uint32_t IRQ_POLARITY_SET; /**< Read irq polarity / Write ones to set irq to active high or rising edge */ - __IO uint32_t IRQ_POLARITY_CLEAR; /**< Read irq polarity / Write ones to set interrupts to active low or falling edge */ - __IO uint32_t ANYEDGE_SET; /**< Read irq anyedge configuration / Write ones to override irq edge selection & irq on any edge */ - __IO uint32_t ANYEDGE_CLEAR; /**< Read irq anyedge configuration / Write ones to clear edge selection override */ - __IO uint32_t IRQ_CLEAR; /**< Write ones to clear edge-sensitive irq */ - __IO uint32_t CONTROL; /**< Controls loopback/normal mode selection */ + __IO uint32_t R_STATE_W_SET; /**< Read synchronized input / Write ones to bits to set corresponding output IO's*/ + __IO uint32_t R_IRQ_W_CLEAR; /**< Read state of irq / Write ones to bits to clear corresponging output IO's */ + __IO uint32_t W_OUT; /**< Write ones to set direction to output */ + __IO uint32_t W_IN; /**< Write ones to set direction to input */ + __IO uint32_t IRQ_ENABLE_SET; /**< Read active high irq enable / Write ones to enable irq */ + __IO uint32_t IRQ_ENABLE_CLEAR; /**< Read active high irq enable / Write ones to disable irq */ + __IO uint32_t IRQ_EDGE; /**< Read irq configuration (edge or level) / Write ones to set irq to edge-sensitive */ + __IO uint32_t IRQ_LEVEL; /**< Read irq configuration (edge or level) / Write ones to set irq to level-sensitive */ + __IO uint32_t IRQ_POLARITY_SET; /**< Read irq polarity / Write ones to set irq to active high or rising edge */ + __IO uint32_t IRQ_POLARITY_CLEAR; /**< Read irq polarity / Write ones to set interrupts to active low or falling edge */ + __IO uint32_t ANYEDGE_SET; /**< Read irq anyedge configuration / Write ones to override irq edge selection & irq on any edge */ + __IO uint32_t ANYEDGE_CLEAR; /**< Read irq anyedge configuration / Write ones to clear edge selection override */ + __IO uint32_t IRQ_CLEAR; /**< Write ones to clear edge-sensitive irq */ + __IO uint32_t CONTROL; /**< Controls loopback/normal mode selection */ } GpioReg_t, *GpioReg_pt; #endif /* GPIO_MAP_H_ */ diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/i2c.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/i2c.h index 3467f5def7e..15abc34edd2 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/i2c.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/i2c.h @@ -1,7 +1,7 @@ /** ****************************************************************************** * @file i2c.h - * @brief (API) Public header of i2c driver + * @brief (API) Public header of i2c driver * @internal * @author ON Semiconductor * $Rev: $ @@ -35,61 +35,61 @@ #include "PeripheralPins.h" #ifndef I2C_H_ -#define I2C_H_ +#define I2C_H_ /* Miscellaneous I/O and control operations codes */ -#define I2C_IPC7208_IOCTL_NOT_ACK 0x03 -#define I2C_IPC7208_IOCTL_NULL_CMD 0x04 -#define I2C_IPC7208_IOCTL_ACK 0x05 +#define I2C_IPC7208_IOCTL_NOT_ACK 0x03 +#define I2C_IPC7208_IOCTL_NULL_CMD 0x04 +#define I2C_IPC7208_IOCTL_ACK 0x05 /* Definitions for the clock speed. */ -#define I2C_SPEED_100K_AT_8MHZ (uint8_t)0x12 -#define I2C_SPEED_100K_AT_16MHZ (uint8_t)0x26 -#define I2C_SPEED_400K_AT_8MHZ (uint8_t)0x03 -#define I2C_SPEED_400K_AT_16MHZ (uint8_t)0x08 +#define I2C_SPEED_100K_AT_8MHZ (uint8_t)0x12 +#define I2C_SPEED_100K_AT_16MHZ (uint8_t)0x26 +#define I2C_SPEED_400K_AT_8MHZ (uint8_t)0x03 +#define I2C_SPEED_400K_AT_16MHZ (uint8_t)0x08 /* I2C commands */ -#define I2C_CMD_NULL 0x00 -#define I2C_CMD_WDAT0 0x10 -#define I2C_CMD_WDAT1 0x11 -#define I2C_CMD_WDAT8 0x12 -#define I2C_CMD_RDAT8 0x13 -#define I2C_CMD_STOP 0x14 -#define I2C_CMD_START 0x15 -#define I2C_CMD_VRFY_ACK 0x16 -#define I2C_CMD_VRFY_VACK 0x17 +#define I2C_CMD_NULL 0x00 +#define I2C_CMD_WDAT0 0x10 +#define I2C_CMD_WDAT1 0x11 +#define I2C_CMD_WDAT8 0x12 +#define I2C_CMD_RDAT8 0x13 +#define I2C_CMD_STOP 0x14 +#define I2C_CMD_START 0x15 +#define I2C_CMD_VRFY_ACK 0x16 +#define I2C_CMD_VRFY_VACK 0x17 /* Status register bits */ -#define I2C_STATUS_CMD_FIFO_MPTY_BIT 0x01 -#define I2C_STATUS_RD_DATA_RDY_BIT 0x02 -#define I2C_STATUS_BUS_ERR_BIT 0x04 -#define I2C_STATUS_RD_DATA_UFL_BIT 0x08 -#define I2C_STATUS_CMD_FIFO_OFL_BIT 0x10 -#define I2C_STATUS_CMD_FIFO_FULL_BIT 0x20 +#define I2C_STATUS_CMD_FIFO_MPTY_BIT 0x01 +#define I2C_STATUS_RD_DATA_RDY_BIT 0x02 +#define I2C_STATUS_BUS_ERR_BIT 0x04 +#define I2C_STATUS_RD_DATA_UFL_BIT 0x08 +#define I2C_STATUS_CMD_FIFO_OFL_BIT 0x10 +#define I2C_STATUS_CMD_FIFO_FULL_BIT 0x20 /* I2C return status */ -#define I2C_STATUS_INVALID 0xFF -#define I2C_STATUS_SUCCESS 0x00 -#define I2C_STATUS_FAIL 0x01 -#define I2C_STATUS_BUS_ERROR 0x02 -#define I2C_STATUS_RD_DATA_UFL 0x03 -#define I2C_STATUS_CMD_FIFO_OFL 0x04 -#define I2C_STATUS_INTERRUPT_ERROR 0x05 -#define I2C_STATUS_CMD_FIFO_EMPTY 0x06 +#define I2C_STATUS_INVALID 0xFF +#define I2C_STATUS_SUCCESS 0x00 +#define I2C_STATUS_FAIL 0x01 +#define I2C_STATUS_BUS_ERROR 0x02 +#define I2C_STATUS_RD_DATA_UFL 0x03 +#define I2C_STATUS_CMD_FIFO_OFL 0x04 +#define I2C_STATUS_INTERRUPT_ERROR 0x05 +#define I2C_STATUS_CMD_FIFO_EMPTY 0x06 /* I2C clock divider position */ -#define I2C_CLOCKDIVEDER_VAL_MASK 0x1F -#define I2C_APB_CLK_DIVIDER_VAL_MASK 0x1FE0 +#define I2C_CLOCKDIVEDER_VAL_MASK 0x1F +#define I2C_APB_CLK_DIVIDER_VAL_MASK 0x1FE0 /* Error check */ -#define I2C_UFL_CHECK (d->membase->STATUS.WORD & 0x80) -#define FIFO_OFL_CHECK (d->membase->STATUS.WORD & 0x10) -#define I2C_BUS_ERR_CHECK (d->membase->STATUS.WORD & 0x04) -#define RD_DATA_READY (d->membase->STATUS.WORD & 0x02) +#define I2C_UFL_CHECK (d->membase->STATUS.WORD & 0x80) +#define FIFO_OFL_CHECK (d->membase->STATUS.WORD & 0x10) +#define I2C_BUS_ERR_CHECK (d->membase->STATUS.WORD & 0x04) +#define RD_DATA_READY (d->membase->STATUS.WORD & 0x02) -#define I2C_API_STATUS_SUCCESS 0 -#define PAD_REG_ADRS_BYTE_SIZE 4 +#define I2C_API_STATUS_SUCCESS 0 +#define PAD_REG_ADRS_BYTE_SIZE 4 /** Init I2C device. * @details diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/i2c_api.c b/targets/TARGET_ONSEMI/TARGET_NCS36510/i2c_api.c index e710399eea4..8b254c8c907 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/i2c_api.c +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/i2c_api.c @@ -32,7 +32,7 @@ #include "i2c.h" #include "i2c_api.h" -#define I2C_READ_WRITE_BIT_MASK 0xFE +#define I2C_READ_WRITE_BIT_MASK 0xFE /* See i2c_api.h for details */ void i2c_init(i2c_t *obj, PinName sda, PinName scl) @@ -85,7 +85,7 @@ int i2c_read(i2c_t *obj, int address, char *data, int length, int stop) /* Error sending coomand/s */ return Count; } - if(stop) { /* Send stop bit if requested */ + if(stop) { /* Send stop bit if requested */ status = fI2cStop(obj); if(status) { /* Error sending stop bit */ @@ -122,7 +122,7 @@ int i2c_write(i2c_t *obj, int address, const char *data, int length, int stop) return Count; } - if(stop) { /* If stop requested */ + if(stop) { /* If stop requested */ /* Send stop bit */ status = fI2cStop(obj); if(status) { diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/i2c_ipc7208_map.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/i2c_ipc7208_map.h index fc671c1a2be..c7bf1940a44 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/i2c_ipc7208_map.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/i2c_ipc7208_map.h @@ -66,9 +66,9 @@ typedef struct { union { struct { __IO uint32_t CMD_FIFO_INT :1; /**< Command FIFO empty interrupt : 0 = disable , 1 = enable */ - __IO uint32_t RD_FIFO_INT :1; /**< Read Data FIFO Not Empty Interrupt : 0 = disable , 1 = enable */ - __IO uint32_t I2C_ERR_INT :1; /**< I2C Error Interrupt : 0 = disable , 1 = enable */ - // __IO uint32_t PAD :4; /**< Reserved. Writes have no effect; Read as 0x00. */ + __IO uint32_t RD_FIFO_INT :1; /**< Read Data FIFO Not Empty Interrupt : 0 = disable , 1 = enable */ + __IO uint32_t I2C_ERR_INT :1; /**< I2C Error Interrupt : 0 = disable , 1 = enable */ + // __IO uint32_t PAD :4; /**< Reserved. Writes have no effect; Read as 0x00. */ } BITS; __IO uint32_t WORD; } IER; diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/macHw_map.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/macHw_map.h index 8dca4371cee..c0c6c9f8ba3 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/macHw_map.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/macHw_map.h @@ -190,9 +190,9 @@ typedef struct { } BITS; __I uint32_t WORD; } TIMER_STATUS; /**< 0x40014054 */ - __I uint32_t PROTOCOL_TIMER; /**< 0x40014058 */ + __I uint32_t PROTOCOL_TIMER; /**< 0x40014058 */ __O uint32_t PAD4; /**< 0x4001405C */ - __I uint32_t FINISH_TIME; /**< 0x40014060 */ + __I uint32_t FINISH_TIME; /**< 0x40014060 */ union { struct { __IO uint32_t TX_SLOT_OFFSET:12; @@ -215,20 +215,20 @@ typedef struct { } BITS; __IO uint32_t WORD; #ifdef REVB - } CRD_SHORT_ADDR; /**< 0x40014070 */ - __IO uint32_t CRD_LONG_ADDR_HI; /**< 0x40014074 */ - __IO uint32_t CRD_LONG_ADDR_LO; /**< 0x40014078 */ + } CRD_SHORT_ADDR; /**< 0x40014070 */ + __IO uint32_t CRD_LONG_ADDR_HI; /**< 0x40014074 */ + __IO uint32_t CRD_LONG_ADDR_LO; /**< 0x40014078 */ #endif /* REVB */ #ifdef REVD -} CRD_SHORT_ADDR; /**< 0x4001406C */ -__IO uint32_t CRD_LONG_ADDR_HI; /**< 0x40014070 */ -__IO uint32_t CRD_LONG_ADDR_LO; /**< 0x40014074 */ +} CRD_SHORT_ADDR; /**< 0x4001406C */ +__IO uint32_t CRD_LONG_ADDR_HI; /**< 0x40014070 */ +__IO uint32_t CRD_LONG_ADDR_LO; /**< 0x40014074 */ __O uint32_t PAD5; /**< 0x40014078 */ #endif /* REVD */ __O uint32_t PAD9; /**< 0x4001407C */ __O uint32_t PAD10; /**< 0x40014080 */ __O uint32_t PAD11; /**< 0x40014084 */ -__IO uint32_t RX_LENGTH; /**< 0x40014088 */ +__IO uint32_t RX_LENGTH; /**< 0x40014088 */ union { struct { __IO uint32_t TXLENGTH:7; @@ -265,11 +265,11 @@ union { __IO uint32_t WORD; } ACK_STOP; /**< 0x400140A4 */ __IO uint32_t TXCCA; /**< 0x400140A8 */ -__IO uint32_t ADDR_L_LOC; /**< 0x400140AC */ -__IO uint32_t ADDR_S_LOC; /**< 0x400140B0 */ -__IO uint32_t FRAME_MATCH_RESULT; /**< 0x400140B4 */ -__IO uint32_t FRAME_MATCH_ADDR_L; /**< 0x400140B8 */ -__IO uint32_t FRAME_MATCH_ADDR_S; /**< 0x400140BC */ +__IO uint32_t ADDR_L_LOC; /**< 0x400140AC */ +__IO uint32_t ADDR_S_LOC; /**< 0x400140B0 */ +__IO uint32_t FRAME_MATCH_RESULT; /**< 0x400140B4 */ +__IO uint32_t FRAME_MATCH_ADDR_L; /**< 0x400140B8 */ +__IO uint32_t FRAME_MATCH_ADDR_S; /**< 0x400140BC */ union { struct { __IO uint32_t AA:1; @@ -358,48 +358,48 @@ union { typedef struct { union { struct { - __IO uint32_t DRC:1; /**< Reserved */ - __IO uint32_t SWIQ:1; /**< Compensation for quadrature polarity. (set to 1 for RevB) */ - __IO uint32_t LIF:1; /**< Allows the receiver to use a low-IF frequency of +1.23 MHz (0) or -1.23 MHz (1). */ - __IO uint32_t PM:1; /**< Preamble Mode: Mode 0 (high sensitivity) Preamble detection is based on observation of a regular pattern of correlation peaks over a span of 5 consecutive symbol periods. Each symbol period produces a time index and frequency index corresponding to the largest correlation peak. If 4 out of 5 symbol periods produce time/frequency index values that meet a set of similarity criteria, then preamble detection is declared. This mode improves preamble detection rate by tolerating one corrupt correlation result in the span of 5 symbols. However, the relaxed detection rule allows a higher rate of false preamble detection when no signal is present. Mode 1 (low false detection) Preamble detection is based on a span of 4 consecutive symbol periods. Each symbol period produces a time index and frequency index corresponding to the largest correlation peak. If all four symbol periods produce time/frequency index values that meet a set of similarity criteria, then preamble detection is declared. This mode enforces a more strict detection rule and therefore offers lower rate of false preamble detection at the expense of higher missed detection. */ - __IO uint32_t ASM:1; /**< This bit determines whether antenna selection is automatic (1) or manual (0). For applications that do not use antenna diversity, this bit should be set to 0. */ - __IO uint32_t AS:1; /**< If automatic antenna selection mode is used, this bit determines the initial antenna selection. If manual antenna selection mode is used, this bit determines the antenna selection, 0 or 1. */ - __IO uint32_t DTC:1; /**< Sets the decay time constant used in the RSSI calculation and Digital Gain Control functions. 0: Time constant set to 1 symbol period. This produces a slower response time but more stable RSSI values. Not recommended for use with antenna diversity. 1: Time constant set to 1/4th of a symbol period. This produces a faster response with slightly more variance in the RSSI calculation. Recommended for most cases. */ + __IO uint32_t DRC:1; /**< Reserved */ + __IO uint32_t SWIQ:1; /**< Compensation for quadrature polarity. (set to 1 for RevB) */ + __IO uint32_t LIF:1; /**< Allows the receiver to use a low-IF frequency of +1.23 MHz (0) or -1.23 MHz (1). */ + __IO uint32_t PM:1; /**< Preamble Mode: Mode 0 (high sensitivity) Preamble detection is based on observation of a regular pattern of correlation peaks over a span of 5 consecutive symbol periods. Each symbol period produces a time index and frequency index corresponding to the largest correlation peak. If 4 out of 5 symbol periods produce time/frequency index values that meet a set of similarity criteria, then preamble detection is declared. This mode improves preamble detection rate by tolerating one corrupt correlation result in the span of 5 symbols. However, the relaxed detection rule allows a higher rate of false preamble detection when no signal is present. Mode 1 (low false detection) Preamble detection is based on a span of 4 consecutive symbol periods. Each symbol period produces a time index and frequency index corresponding to the largest correlation peak. If all four symbol periods produce time/frequency index values that meet a set of similarity criteria, then preamble detection is declared. This mode enforces a more strict detection rule and therefore offers lower rate of false preamble detection at the expense of higher missed detection. */ + __IO uint32_t ASM:1; /**< This bit determines whether antenna selection is automatic (1) or manual (0). For applications that do not use antenna diversity, this bit should be set to 0. */ + __IO uint32_t AS:1; /**< If automatic antenna selection mode is used, this bit determines the initial antenna selection. If manual antenna selection mode is used, this bit determines the antenna selection, 0 or 1. */ + __IO uint32_t DTC:1; /**< Sets the decay time constant used in the RSSI calculation and Digital Gain Control functions. 0: Time constant set to 1 symbol period. This produces a slower response time but more stable RSSI values. Not recommended for use with antenna diversity. 1: Time constant set to 1/4th of a symbol period. This produces a faster response with slightly more variance in the RSSI calculation. Recommended for most cases. */ __IO uint32_t PAD1:9; - __IO uint32_t DFR:16; /** threshold. Default 0xFF */ - __IO uint32_t RSSI_OFFSET:6; /**< Calibration constant added to the RSSI calculation. The 6-bit field is treated as a signed value in twos complement format with values from -32 to +31 dB. */ + __IO uint32_t RSSI_THRESHOLD:8; /**< Threshold value used to determine clear channel assessment (CCA) result. The channel is declared busy if RSSI > threshold. Default 0xFF */ + __IO uint32_t RSSI_OFFSET:6; /**< Calibration constant added to the RSSI calculation. The 6-bit field is treated as a signed value in twos complement format with values from -32 to +31 dB. */ } BITS; __IO uint32_t WORD; - } DMD_CONTROL2; /**< 0x40014108 */ + } DMD_CONTROL2; /**< 0x40014108 */ union { struct { - __I uint32_t RSSI_VALUE:8; /**< The value is captured at the end of packet reception or at the end of ED/CCA measurements and is interpreted in dBm as follows: 00000000 -> 0127dBm (or below) ... 01111111 -> 0dBm (or above) */ - __I uint32_t FREQUENCY_OFFSET:4; /**< Frequency correction applied to the received packet. The value is captured at the end of packet reception or at the end of ED/CCA measurements. */ - __I uint32_t ANT:1; /**< Antenna used for reception. The value is captured at the end of packet reception or at the end of ED/CCA measurements. */ + __I uint32_t RSSI_VALUE:8; /**< The value is captured at the end of packet reception or at the end of ED/CCA measurements and is interpreted in dBm as follows: 00000000 -> 0127dBm (or below) ... 01111111 -> 0dBm (or above) */ + __I uint32_t FREQUENCY_OFFSET:4; /**< Frequency correction applied to the received packet. The value is captured at the end of packet reception or at the end of ED/CCA measurements. */ + __I uint32_t ANT:1; /**< Antenna used for reception. The value is captured at the end of packet reception or at the end of ED/CCA measurements. */ __I uint32_t PAD0:3; - __I uint32_t RSSI_COMPONENT:4; /**< Magnitude of the baseband digital signal (units are dB relative to A/D saturation). The value is updated until AGC is frozen. The value is captured at the end of packet reception or at the end of ED/CCA measurements. */ + __I uint32_t RSSI_COMPONENT:4; /**< Magnitude of the baseband digital signal (units are dB relative to A/D saturation). The value is updated until AGC is frozen. The value is captured at the end of packet reception or at the end of ED/CCA measurements. */ } BITS; __I uint32_t WORD; - } DMD_STATUS; /**< 0x4001410C */ + } DMD_STATUS; /**< 0x4001410C */ } DmdReg_t, *DmdReg_pt; #endif /* MACHW_MAP_H_ */ diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/memory_map.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/memory_map.h index 508fed1aa5c..f6e44148d32 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/memory_map.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/memory_map.h @@ -26,32 +26,32 @@ * * @ingroup bsp @verbatim - +-----------------+ - | | ,_________________________ - | Private Per. | |PMUREG 0x4001D000| + +-----------------+ + | | ,_________________________ + | Private Per. | |PMUREG 0x4001D000| 0xE0000000 +-----------------+ |PADREG 0x4001C000| - | |_____________|CLOCKREG 0x4001B000| - | PERIPHERALS | |RFANAREG 0x40019000| - +-----------------+ |RESETREG 0x40018000| - | | |FLASHREG 0x40017000| + | |_____________|CLOCKREG 0x4001B000| + | PERIPHERALS | |RFANAREG 0x40019000| + +-----------------+ |RESETREG 0x40018000| + | | |FLASHREG 0x40017000| 0x3FFF8000 |SRAM A 32K | |AESREG 0x40016000| - +-----------------+ |ADCREG 0x40015000| - | | |MACHWREG 0x40014000| - |SRAM B 16K | |RANDREG 0x40011000| + +-----------------+ |ADCREG 0x40015000| + | | |MACHWREG 0x40014000| + |SRAM B 16K | |RANDREG 0x40011000| 0x3FFF4000 +-----------------+ |CROSSBREG 0x40010000| - | | |RTCREG 0x4000F000| + | | |RTCREG 0x4000F000| 0x24000100 |SRAM DMA 7B | |GPIOREG 0x4000C000| - +-----------------+ |PWMREG 0x4000B000| + +-----------------+ |PWMREG 0x4000B000| 0x24000000 |SRAM MAC 256B | |WDTREG 0x4000A000| - +-----------------+ |UARTREG 0x40008000| - | 320K | |I2CREG 0x40007000| + +-----------------+ |UARTREG 0x40008000| + | 320K | |I2CREG 0x40007000| 0x00102000 |FLASHB | |SPIREG 0x40006000| 0x00100000 |FLASHB Inf Block | |UARTREG 0x40005000| - +-----------------+ |TIM2REG 0x40002000| - | 320K | |TIM1REG 0x40001000| + +-----------------+ |TIM2REG 0x40002000| + | 320K | |TIM1REG 0x40001000| 0x00002000 |FLASHA | |TIM0REG 0x40000000| 0x00000000 |FLASHA Inf Block | '`'''''''''''''''''''''''' - '`''''''''''''''''' + '`''''''''''''''''' @endverbatim */ @@ -117,52 +117,52 @@ /** MAC MATCH HW Registers Offset */ #define MACMATCHREG_BASE ((uint32_t)0x24000100) /** MAC MATCH HW Structure Overlay */ -#define MACMATCHREG ((volatile uint8_t *)MACMATCHREG_BASE) +#define MACMATCHREG ((volatile uint8_t *)MACMATCHREG_BASE) /** MAC RX HW Registers Offset */ -#define MACRXREG_BASE ((uint32_t)0x24000080) +#define MACRXREG_BASE ((uint32_t)0x24000080) /** MAC RX HW Structure Overlay */ -#define MACRXREG ((volatile uint8_t *)MACRXREG_BASE) +#define MACRXREG ((volatile uint8_t *)MACRXREG_BASE) /** MAC TX HW Registers Offset */ -#define MACTXREG_BASE ((uint32_t)0x24000000) +#define MACTXREG_BASE ((uint32_t)0x24000000) /** MAC TX HW Structure Overlay */ -#define MACTXREG ((volatile uint8_t *)MACTXREG_BASE) +#define MACTXREG ((volatile uint8_t *)MACTXREG_BASE) /** TEST Interface for flash HW Registers Offset */ #define TESTNVMREG_BASE ((uint32_t)0x4001F140) /** TEST Interface for flash HW Structure Overlay */ -#define TESTNVMREG ((TestNvmReg_pt)TESTNVMREG_BASE) +#define TESTNVMREG ((TestNvmReg_pt)TESTNVMREG_BASE) /** Test Interface for digital HW Registers Offset */ #define TESTDIGREG_BASE ((uint32_t)0x4001F100) /** Test Interface for digital HW Structure Overlay */ -#define TESTDIGREG ((TestDigReg_pt)TESTDIGREG_BASE) +#define TESTDIGREG ((TestDigReg_pt)TESTDIGREG_BASE) /** Test Interface HW Registers Offset */ #define TESTREG_BASE ((uint32_t)0x4001F000) /** Test Interface HW Structure Overlay */ -#define TESTREG ((TestReg_pt)TESTREG_BASE) +#define TESTREG ((TestReg_pt)TESTREG_BASE) /** Device option HW Registers Offset */ -#define DEVOPTREG_BASE ((uint32_t)0x4001E000) +#define DEVOPTREG_BASE ((uint32_t)0x4001E000) /** MAC TX HW Structure Overlay */ -#define DEVOPTREG ((volatile uint32_t *)DEVOPTREG_BASE) +#define DEVOPTREG ((volatile uint32_t *)DEVOPTREG_BASE) /** PMU HW Registers Offset */ #define PMUREG_BASE ((uint32_t)0x4001D000) /** PMU HW Structure Overlay */ -#define PMUREG ((PmuReg_pt)PMUREG_BASE) +#define PMUREG ((PmuReg_pt)PMUREG_BASE) /** PAD Control HW Registers Offset */ #define PADREG_BASE ((uint32_t)0x4001C000) /** PAD Control HW Structure Overlay */ -#define PADREG ((PadReg_pt)PADREG_BASE) +#define PADREG ((PadReg_pt)PADREG_BASE) /** Clock Control HW Registers Offset */ -#define CLOCKREG_BASE ((uint32_t)0x4001B000) +#define CLOCKREG_BASE ((uint32_t)0x4001B000) /** Clock Control HW Structure Overlay */ -#define CLOCKREG ((ClockReg_pt)CLOCKREG_BASE) +#define CLOCKREG ((ClockReg_pt)CLOCKREG_BASE) /** Analogue Trim HW Registers Offset */ #define RFANATRIMREG_BASE ((uint32_t)0x40019080) @@ -170,29 +170,29 @@ #define RFANATRIMREG ((RfAnaTrimReg_pt)RFANATRIMREG_BASE) /** Analogue RF HW Registers Offset */ -#define RFANAREG_BASE ((uint32_t)0x40019000) +#define RFANAREG_BASE ((uint32_t)0x40019000) /** Analogue RF HW Structure Overlay */ -#define RFANAREG ((RfAnaReg_pt)RFANAREG_BASE) +#define RFANAREG ((RfAnaReg_pt)RFANAREG_BASE) /** Reset Cause HW Registers Offset */ -#define RESETREG_BASE ((uint32_t)0x40018000) +#define RESETREG_BASE ((uint32_t)0x40018000) /** Reset Cause HW Structure Overlay */ -#define RESETREG ((ResetReg_pt)RESETREG_BASE) +#define RESETREG ((ResetReg_pt)RESETREG_BASE) /** FLASH Control HW Registers Offset */ -#define FLASHREG_BASE ((uint32_t)0x40017000) +#define FLASHREG_BASE ((uint32_t)0x40017000) /** FLASH Control HW Structure Overlay */ -#define FLASHREG ((FlashReg_pt)FLASHREG_BASE) +#define FLASHREG ((FlashReg_pt)FLASHREG_BASE) /** AES Encryption HW Registers Offset */ -#define AESREG_BASE ((uint32_t)0x40016000) +#define AESREG_BASE ((uint32_t)0x40016000) /** AES Encryption HW Structure Overlay */ -#define AESREG ((AesReg_pt)AESREG_BASE) +#define AESREG ((AesReg_pt)AESREG_BASE) /** SAR ADC HW Registers Offset */ -#define ADCREG_BASE ((uint32_t)0x40015000) +#define ADCREG_BASE ((uint32_t)0x40015000) /** SAR ADC HW Structure Overlay */ -#define ADCREG ((AdcReg_pt)ADCREG_BASE) +#define ADCREG ((AdcReg_pt)ADCREG_BASE) /** Demodulator HW Registers Offset */ #define DMDREG_BASE ((uint32_t)0x40014100) @@ -200,85 +200,85 @@ #define DMDREG ((DmdReg_pt)DMDREG_BASE) /** MAC Control HW Registers Offset */ -#define MACHWREG_BASE ((uint32_t)0x40014000) +#define MACHWREG_BASE ((uint32_t)0x40014000) /** MAC Control HW Structure Overlay */ -#define MACHWREG ((MacHwReg_pt)MACHWREG_BASE) +#define MACHWREG ((MacHwReg_pt)MACHWREG_BASE) /** Random Generator HW Registers Offset */ -#define RANDREG_BASE ((uint32_t)0x40011000) +#define RANDREG_BASE ((uint32_t)0x40011000) /** Random Generator HW Structure Overlay */ -#define RANDREG ((RandReg_pt)RANDREG_BASE) +#define RANDREG ((RandReg_pt)RANDREG_BASE) /** Cross Bar HW Registers Offset */ -#define CROSSBREG_BASE ((uint32_t)0x40010000) +#define CROSSBREG_BASE ((uint32_t)0x40010000) /** Cross Bar HW Structure Overlay */ -#define CROSSBREG ((CrossbReg_pt)CROSSBREG_BASE) +#define CROSSBREG ((CrossbReg_pt)CROSSBREG_BASE) /** Real Time Clock HW Registers Offset */ -#define RTCREG_BASE ((uint32_t)0x4000F000) +#define RTCREG_BASE ((uint32_t)0x4000F000) /** Real Time Clock HW Structure Overlay */ -#define RTCREG ((RtcReg_pt)RTCREG_BASE) +#define RTCREG ((RtcReg_pt)RTCREG_BASE) /** GPIO HW Registers Offset */ -#define GPIOREG_BASE ((uint32_t)0x4000C000) +#define GPIOREG_BASE ((uint32_t)0x4000C000) /** GPIO HW Structure Overlay */ -#define GPIOREG ((GpioReg_pt)GPIOREG_BASE) +#define GPIOREG ((GpioReg_pt)GPIOREG_BASE) /** PWM HW Registers Offset */ -#define PWMREG_BASE ((uint32_t)0x4000B000) +#define PWMREG_BASE ((uint32_t)0x4000B000) /** PWM HW Structure Overlay */ -#define PWMREG ((PwmReg_pt)PWMREG_BASE) +#define PWMREG ((PwmReg_pt)PWMREG_BASE) /** Watchdog Timer HW Registers Offset */ -#define WDTREG_BASE ((uint32_t)0x4000A000) +#define WDTREG_BASE ((uint32_t)0x4000A000) /** Watchdog Timer HW Structure Overlay */ -#define WDTREG ((WdtReg_pt)WDTREG_BASE) +#define WDTREG ((WdtReg_pt)WDTREG_BASE) /** UART 2 HW Registers Offset */ -#define UART2REG_BASE ((uint32_t)0x40008000) +#define UART2REG_BASE ((uint32_t)0x40008000) /** UART 2 HW Structure Overlay */ -#define UART2REG ((Uart16C550Reg_pt)UART2REG_BASE) +#define UART2REG ((Uart16C550Reg_pt)UART2REG_BASE) /** I2C HW Registers Offset */ -#define I2C1REG_BASE ((uint32_t)0x40007000) +#define I2C1REG_BASE ((uint32_t)0x40007000) /** I2C HW Structure Overlay */ -#define I2C1REG ((I2cIpc7208Reg_pt)I2C1REG_BASE) +#define I2C1REG ((I2cIpc7208Reg_pt)I2C1REG_BASE) /** SPI HW Registers Offset */ -#define SPI1REG_BASE ((uint32_t)0x40006000) +#define SPI1REG_BASE ((uint32_t)0x40006000) /** SPI HW Structure Overlay */ -#define SPI1REG ((SpiIpc7207Reg_pt)SPI1REG_BASE) +#define SPI1REG ((SpiIpc7207Reg_pt)SPI1REG_BASE) /** UART1 HW Registers Offset */ -#define UART1REG_BASE ((uint32_t)0x40005000) +#define UART1REG_BASE ((uint32_t)0x40005000) /** UART1 HW Structure Overlay */ -#define UART1REG ((Uart16C550Reg_pt)UART1REG_BASE) +#define UART1REG ((Uart16C550Reg_pt)UART1REG_BASE) -#define UARTREG_BASES { UART1REG_BASE, UART2REG_BASE} +#define UARTREG_BASES { UART1REG_BASE, UART2REG_BASE} /** Timer 2 HW Registers Offset */ -#define TIM2REG_BASE ((uint32_t)0x40002000) +#define TIM2REG_BASE ((uint32_t)0x40002000) /** Timer 2 HW Structure Overlay */ -#define TIM2REG ((TimerReg_pt)TIM2REG_BASE) +#define TIM2REG ((TimerReg_pt)TIM2REG_BASE) /** Timer 1 HW Registers Offset */ -#define TIM1REG_BASE ((uint32_t)0x40001000) +#define TIM1REG_BASE ((uint32_t)0x40001000) /** Timer 1 HW Structure Overlay */ -#define TIM1REG ((TimerReg_pt)TIM1REG_BASE) +#define TIM1REG ((TimerReg_pt)TIM1REG_BASE) /** Timer 0 HW Registers Offset */ -#define TIM0REG_BASE ((uint32_t)0x40000000) +#define TIM0REG_BASE ((uint32_t)0x40000000) /** Timer 0 HW Structure Overlay */ -#define TIM0REG ((TimerReg_pt)TIM0REG_BASE) +#define TIM0REG ((TimerReg_pt)TIM0REG_BASE) /** I2C2 HW Registers Offset */ -#define I2C2REG_BASE ((uint32_t)0x4000D000) +#define I2C2REG_BASE ((uint32_t)0x4000D000) /** I2C2 HW Structure Overlay */ -#define I2C2REG ((I2cIpc7208Reg_pt)I2C2REG_BASE) +#define I2C2REG ((I2cIpc7208Reg_pt)I2C2REG_BASE) /** SPI2 HW Registers Offset */ -#define SPI2REG_BASE ((uint32_t)0x40009000) +#define SPI2REG_BASE ((uint32_t)0x40009000) /** SPI2 HW Structure Overlay */ -#define SPI2REG ((SpiIpc7207Reg_pt)SPI2REG_BASE) +#define SPI2REG ((SpiIpc7207Reg_pt)SPI2REG_BASE) #endif /*_MEMORY_MAP_H_*/ diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/ncs36510Init.c b/targets/TARGET_ONSEMI/TARGET_NCS36510/ncs36510Init.c index 2487de64132..f4dfc64eed4 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/ncs36510Init.c +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/ncs36510Init.c @@ -158,15 +158,15 @@ void fPmuInit() SCB->SCR &= ~SCB_SCR_SLEEPONEXIT_Msk; /** Set regulator timings */ - PMUREG->FVDD_TSETTLE = 160; - PMUREG->FVDD_TSTARTUP = 400; + PMUREG->FVDD_TSETTLE = 160; + PMUREG->FVDD_TSTARTUP = 400; /** Keep SRAMA & SRAMB powered in coma mode */ PMUREG->CONTROL.BITS.SRAMA = False; PMUREG->CONTROL.BITS.SRAMB = False; - PMUREG->CONTROL.BITS.N1V1 = True; /* Enable ACTIVE mode switching regulator */ - PMUREG->CONTROL.BITS.C1V1 = True; /* Enable COMA mode switching regulator */ + PMUREG->CONTROL.BITS.N1V1 = True; /* Enable ACTIVE mode switching regulator */ + PMUREG->CONTROL.BITS.C1V1 = True; /* Enable COMA mode switching regulator */ /** Disable the clock for PMU peripheral device, all settings are done */ CLOCK_DISABLE(CLOCK_PMU); diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/ncs36510_i2c.c b/targets/TARGET_ONSEMI/TARGET_NCS36510/ncs36510_i2c.c index cc840d8215c..784ea31bc1c 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/ncs36510_i2c.c +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/ncs36510_i2c.c @@ -76,11 +76,11 @@ void fI2cInit(i2c_t *obj,PinName sda,PinName scl) /* enable interrupt associated with the device */ if(obj->membase == I2C1REG) { - CLOCK_ENABLE(CLOCK_I2C); /* enable i2c peripheral */ + CLOCK_ENABLE(CLOCK_I2C); /* enable i2c peripheral */ NVIC_ClearPendingIRQ(I2C_IRQn); NVIC_EnableIRQ(I2C_IRQn); } else { - CLOCK_ENABLE(CLOCK_I2C2); /* enable i2c peripheral */ + CLOCK_ENABLE(CLOCK_I2C2); /* enable i2c peripheral */ NVIC_ClearPendingIRQ(I2C2_IRQn); NVIC_EnableIRQ(I2C2_IRQn); } diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/ncs36510_lp_ticker_api.c b/targets/TARGET_ONSEMI/TARGET_NCS36510/ncs36510_lp_ticker_api.c index b5f6a159dda..9663cd66bea 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/ncs36510_lp_ticker_api.c +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/ncs36510_lp_ticker_api.c @@ -60,50 +60,12 @@ void lp_ticker_set_interrupt(timestamp_t timestamp) fRtcSetInterrupt(timestamp); } -/*Return the time that gets cut off when you return just a 32 bit us resolution number */ -uint32_t lp_ticker_get_overflows_counter(void) -{ - /* To check; do we need an counter in software in RTC to find overflows */ - uint64_t now = fRtcRead(); - uint32_t overflow = (now & 0xFFFFFFFF00000000) >> 32; - return overflow; -} - -/* Return the RTC Match counter contents */ -uint32_t lp_ticker_get_compare_match() -{ - /* read the alarms and convert to us */ - uint16_t sub_second_alarm = RTCREG->SUB_SECOND_ALARM; - uint32_t second_alarm = RTCREG->SECOND_ALARM; - uint64_t alarm_us = (uint64_t)((((float)sub_second_alarm / RTC_CLOCK_HZ) * RTC_SEC_TO_US) + - (second_alarm * RTC_SEC_TO_US)); - /* TODO truncating to 32 bits */ - return (uint32_t)(alarm_us & 0xFFFFFFFF); -} - -/* sleep until alarm */ -void lp_ticker_sleep_until(uint32_t now, uint32_t time) -{ - /* Set the interrupt */ - lp_ticker_set_interrupt(time); - - /* Go to sleep */ - sleep_t obj; - obj.SleepType = SLEEP_TYPE_NONE; - obj.timeToSleep = time - now; - - mbed_enter_sleep(&obj); - /* TBD: This is dummy exit for now; once the entered sleep it should be - removed and sleep exit should happen through interrupt */ - mbed_exit_sleep(&obj); -} - /** Disable low power ticker interrupt * */ void lp_ticker_disable_interrupt(void) { - /* TODO : This is an empty implementation for now */ + fRtcDisableInterrupt(); } /** Clear the low power ticker interrupt @@ -111,7 +73,7 @@ void lp_ticker_disable_interrupt(void) */ void lp_ticker_clear_interrupt(void) { - /* TODO : This is an empty implementation for now */ + fRtcClearInterrupt(); } #endif /* DEVICE_LOWPOWERTIMER */ diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/ncs36510_spi.c b/targets/TARGET_ONSEMI/TARGET_NCS36510/ncs36510_spi.c index 17e842ef4e5..42441d5d8f1 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/ncs36510_spi.c +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/ncs36510_spi.c @@ -58,79 +58,78 @@ void fSpiInit(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel SPIName spi_mosi = (SPIName)pinmap_peripheral(mosi, PinMap_SPI_MOSI); SPIName spi_miso = (SPIName)pinmap_peripheral(miso, PinMap_SPI_MISO); SPIName spi_sclk = (SPIName)pinmap_peripheral(sclk, PinMap_SPI_SCLK); - SPIName spi_ssel = (SPIName)pinmap_peripheral(sclk, PinMap_SPI_SSEL); + SPIName spi_ssel = (SPIName)pinmap_peripheral(ssel, PinMap_SPI_SSEL); SPIName spi_data_1 = (SPIName)pinmap_merge(spi_mosi, spi_miso); SPIName spi_data_2 = (SPIName)pinmap_merge(spi_sclk, spi_ssel); - obj->membase = (SpiIpc7207Reg_pt)pinmap_merge(spi_data_1, spi_data_2); + obj->membase = (SpiIpc7207Reg_pt)pinmap_merge(spi_data_1, spi_data_2); MBED_ASSERT((int)obj->membase != NC); /* Check device to be activated */ if(obj->membase == SPI1REG) { /* SPI 1 selected */ - CLOCK_ENABLE(CLOCK_SPI); /* Enable clock */ + CLOCK_ENABLE(CLOCK_SPI); /* Enable clock */ } else { /* SPI 2 selected */ - CLOCK_ENABLE(CLOCK_SPI2); /* Enable clock */ + CLOCK_ENABLE(CLOCK_SPI2); /* Enable clock */ } + CLOCK_ENABLE(CLOCK_CROSSB); /* Cross bar setting: Map GPIOs to SPI */ pinmap_pinout(sclk, PinMap_SPI_SCLK); pinmap_pinout(mosi, PinMap_SPI_MOSI); - pinmap_pinout(miso, PinMap_SPI_MISO); - pinmap_pinout(miso, PinMap_SPI_SSEL);/* TODO Need to implement as per morpheus */ - /* TODO Do we need GPIO direction settings done here or at init phase? */ - /* GPIO config */ + /* Configure GPIO Direction */ CLOCK_ENABLE(CLOCK_GPIO); - GPIOREG->W_OUT |= ((0x1 << sclk) | (0x1 << mosi)); /* Set pins as output */ - GPIOREG->W_IN |= (0x1 << miso); /* Set pin as input */ + GPIOREG->W_OUT |= ((True << sclk) | (True << mosi) | (True << ssel)); /* Set pins as output */ + GPIOREG->W_IN |= (True << miso); /* Set pin as input */ - pin_mode(sclk, PushPullNoPull); - pin_mode(mosi, PushPullPullUp); - pin_mode(miso, OpenDrainPullUp); + /* Pad settings */ + CLOCK_ENABLE(CLOCK_PAD); + pin_mode(sclk, PushPullPullDown); + pin_mode(mosi, PushPullPullDown); /* PAD drive strength */ PadReg_t *padRegOffset = (PadReg_t*)(PADREG_BASE + (sclk * PAD_REG_ADRS_BYTE_SIZE)); - CLOCK_ENABLE(CLOCK_PAD); - padRegOffset->PADIO0.BITS.POWER = 1; /* sclk: Drive strength */ - padRegOffset->PADIO1.BITS.POWER = 1; /* mosi: Drive strength */ - padRegOffset->PADIO2.BITS.POWER = 1; /* miso: Drive strength */ + padRegOffset->PADIO0.BITS.POWER = True; /* sclk: Drive strength */ + padRegOffset->PADIO1.BITS.POWER = True; /* mosi: Drive strength */ + if(miso != NC) { + pinmap_pinout(miso, PinMap_SPI_MISO); /* Cross bar settings */ + pin_mode(miso, OpenDrainNoPull); /* Pad setting */ + padRegOffset->PADIO2.BITS.POWER = True; /* miso: Drive strength */ + } + if(ssel != NC) { + pinmap_pinout(ssel, PinMap_SPI_SSEL); /* Cross bar settings */ + pin_mode(ssel, PushPullPullUp); /* Pad setting */ + padRegOffset->PADIO3.BITS.POWER = True; /* ssel: Drive strength */ + SPI1REG->SLAVE_SELECT.BITS.SS_ENABLE = SPI_SLAVE_SELECT_NORM_BEHAVE; /* Slave select: Normal behavior */ + } CLOCK_DISABLE(CLOCK_PAD); + CLOCK_DISABLE(CLOCK_GPIO); + CLOCK_DISABLE(CLOCK_CROSSB); - /* disable/reset the spi port */ - obj->membase->CONTROL.BITS.ENABLE = False; + /* disable/reset the spi port: Clear control register*/ + obj->membase->CONTROL.WORD = False; /* set default baud rate to 1MHz */ - clockDivisor = ((fClockGetPeriphClockfrequency() / 1000000) >> 1) - 1; - obj->membase->FDIV = clockDivisor; + clockDivisor = ((fClockGetPeriphClockfrequency() / SPI_DEFAULT_SPEED) >> True) - True; + obj->membase->FDIV = clockDivisor; /* set tx/rx fifos watermarks */ /* TODO water mark level 1 byte ?*/ - obj->membase->TX_WATERMARK = 1; - obj->membase->RX_WATERMARK = 1; + obj->membase->TX_WATERMARK = True; + obj->membase->RX_WATERMARK = True; /* DIsable and clear IRQs */ /* TODO sync api, do not need irq ?*/ obj->membase->IRQ_ENABLE = False; - obj->membase->IRQ_CLEAR = 0xFF; /* Clear all */ + obj->membase->IRQ_CLEAR = SPI_BYTE_MASK; /* Clear all */ /* configure slave select */ - obj->membase->SLAVE_SELECT.BITS.SS_ENABLE = False; - obj->membase->SLAVE_SELECT.BITS.SS_BURST = True; - obj->membase->SLAVE_SELECT_POLARITY = False; - - /* set control register parameters */ - obj->membase->CONTROL.BITS.WORD_WIDTH = False; /* 8 bits */ - obj->membase->CONTROL.BITS.MODE = 1; /* master */ - obj->membase->CONTROL.BITS.CPOL = 0; /* CPOL = 0, Idle low */ - obj->membase->CONTROL.BITS.CPHA = 0; /* CPHA = 0, First transmit occurs before first edge of SCLK*/ - obj->membase->CONTROL.BITS.ENDIAN = 0; /* Little endian */ - obj->membase->CONTROL.BITS.SAMPLING_EDGE = False; /* Sample incoming data on opposite edge of SCLK from when outgoing data is driven */ - - /* SPI1REG->SLAVE_SELECT.BITS.SS_ENABLE = 0; Slave select TODO do we need? */ - - /* enable the spi port */ - obj->membase->CONTROL.BITS.ENABLE = True; + obj->membase->SLAVE_SELECT.WORD = SPI_SLAVE_SELECT_DEFAULT; + obj->membase->SLAVE_SELECT_POLARITY = False; + + /* Configure control register parameters: 8 bits, master, CPOL = 0, Idle low. CPHA = 0, First transmit occurs before first edge of SCLK. MSB first. Sample incoming data on opposite edge of SCLK from when outgoing data is driven. enable the spi port */ + obj->membase->CONTROL.WORD = SPI_DEFAULT_CONFIG; } /** Close a spi device. @@ -161,12 +160,12 @@ int fSpiWriteB(spi_t *obj, uint32_t const buf) { int byte; - while((obj->membase->STATUS.BITS.TX_FULL == 1) && (obj->membase->STATUS.BITS.RX_FULL == 1)); /* Wait till Tx/Rx status is full */ + while((obj->membase->STATUS.BITS.TX_FULL == True) && (obj->membase->STATUS.BITS.RX_FULL == True)); /* Wait till Tx/Rx status is full */ obj->membase->TX_DATA = buf; - while (obj->membase->STATUS.BITS.RX_EMPTY == 1); /* Wait till Receive status is empty */ + while (obj->membase->STATUS.BITS.RX_EMPTY == True); /* Wait till Receive status is empty */ byte = obj->membase->RX_DATA; return byte; } -#endif /* DEVICE_SPI */ +#endif /* DEVICE_SPI */ \ No newline at end of file diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/ncs36510_us_ticker_api.c b/targets/TARGET_ONSEMI/TARGET_NCS36510/ncs36510_us_ticker_api.c index 16afcbcf930..8ba37597753 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/ncs36510_us_ticker_api.c +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/ncs36510_us_ticker_api.c @@ -78,17 +78,17 @@ static void us_timer_init(void) TIM0REG->LOAD = 0xFFFF; /* set timer prescale 32 (1 us), mode & enable */ - TIM0REG->CONTROL.WORD = ((CLK_DIVIDER_32 << TIMER_PRESCALE_BIT_POS) | - (TIME_MODE_PERIODIC << TIMER_MODE_BIT_POS) | - (TIMER_ENABLE_BIT << TIMER_ENABLE_BIT_POS)); + TIM0REG->CONTROL.WORD = ((CLK_DIVIDER_32 << TIMER_PRESCALE_BIT_POS) | + (TIME_MODE_PERIODIC << TIMER_MODE_BIT_POS) | + (TIMER_ENABLE_BIT << TIMER_ENABLE_BIT_POS)); /* Ticker init */ /* load timer value */ TIM1REG->LOAD = 0xFFFF; /* set timer prescale 32 (1 us), mode & enable */ - TIM1REG->CONTROL.WORD = ((CLK_DIVIDER_32 << TIMER_PRESCALE_BIT_POS) | - (TIME_MODE_PERIODIC << TIMER_MODE_BIT_POS)); + TIM1REG->CONTROL.WORD = ((CLK_DIVIDER_32 << TIMER_PRESCALE_BIT_POS) | + (TIME_MODE_PERIODIC << TIMER_MODE_BIT_POS)); /* Register & enable interrupt associated with the timer */ NVIC_SetVector(Tim0_IRQn,(uint32_t)us_timer_isr); @@ -115,17 +115,17 @@ uint32_t us_ticker_read() } /* Get the current tick from the hw and sw timers */ - tim0cval = TIM0REG->VALUE; /* read current time */ - retval = (0xFFFF - tim0cval); /* subtract down count */ + tim0cval = TIM0REG->VALUE; /* read current time */ + retval = (0xFFFF - tim0cval); /* subtract down count */ NVIC_DisableIRQ(Tim0_IRQn); if (TIM0REG->CONTROL.BITS.INT) { TIM0REG->CLEAR = 0; msb_counter++; - tim0cval = TIM0REG->VALUE; /* read current time again after interrupt */ + tim0cval = TIM0REG->VALUE; /* read current time again after interrupt */ retval = (0xFFFF - tim0cval); } - retval |= msb_counter << 16; /* add software bits */ + retval |= msb_counter << 16; /* add software bits */ NVIC_EnableIRQ(Tim0_IRQn); return retval; } diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/objects.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/objects.h index 915197ef3dc..b58c02c3d36 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/objects.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/objects.h @@ -50,9 +50,9 @@ typedef enum { } FlowControl_1; struct serial_s { - Uart16C550Reg_pt UARTREG; - FlowControl_1 FlowCtrl; - IRQn_Type IRQType; + Uart16C550Reg_pt UARTREG; + FlowControl_1 FlowCtrl; + IRQn_Type IRQType; int index; }; @@ -68,18 +68,18 @@ typedef struct _gpio_t { * with the sleep API implementation */ typedef struct sleep_s { - uint32_t timeToSleep; /* 0: Use sleep type variable; Noz-zero: Selects sleep type based on duration using table 1. sleep below */ - uint8_t SleepType; /* 0: Sleep; 1: DeepSleep; 2: Coma */ + uint32_t timeToSleep; /* 0: Use sleep type variable to select low power mode; Noz-zero: Selects sleep type based on timeToSleep duration using table 1. sleep below */ + uint8_t SleepType; /* 0: Sleep; 1: DeepSleep; 2: Coma */ } sleep_t; /* Table 1. Sleep - ___________________________________________________________________________________ - | Sleep duration | Sleep Type | - |-------------------------------------------------------------------|---------------| - | > Zero AND <= SLEEP_DURATION_SLEEP_MAX | sleep | - | > SLEEP_DURATION_SLEEP_MAX AND <= SLEEP_DURATION_DEEPSLEEP_MAX | deepsleep | - | > SLEEP_DURATION_DEEPSLEEP_MAX | coma | - |___________________________________________________________________|_______________| + ___________________________________________________________________________________ + | Sleep duration | Sleep Type | + |-------------------------------------------------------------------|---------------| + | > Zero AND <= SLEEP_DURATION_SLEEP_MAX | sleep | + | > SLEEP_DURATION_SLEEP_MAX AND <= SLEEP_DURATION_DEEPSLEEP_MAX | deepsleep | + | > SLEEP_DURATION_DEEPSLEEP_MAX | coma | + |___________________________________________________________________|_______________| */ @@ -92,25 +92,25 @@ struct gpio_irq_s { typedef struct { /* options to configure the ADC */ - uint8_t interruptConfig; /**< 1= interrupt Enable 0=Interrupt Disable */ - uint8_t PrescaleVal; /**< Prescaler: Sets the converter clock frequency. Fclk = 32 MHz/(prescaler + 1) where prescaler is the value of this register segment. The minimum tested value is 07 (4 MHz clock) */ - uint8_t measurementType; /**< 1= Absolute 0= Differential */ - uint8_t mode; /**< 1= Continuous Conversion 0= Single Shot */ - uint8_t referenceCh; /**< Selects 1 to 8 channels for reference channel */ - uint8_t convCh; /**< Selects 1 or 8 channels to do a conversion on.*/ - uint8_t inputScale; /**< Sets the input scale, 000 ? 1.0, 001 ? 0.6923, 010 ? 0.5294, 011 ? 0.4286, 100 ? 0.3600, 101 ? 0.3103, 110 ? 0.2728, 111 ? 0.2432 */ - uint8_t samplingTime; /**< Sample Time. Sets the measure time in units of PCLKperiod * (Prescale + 1).*/ - uint8_t WarmUpTime; /**< The number of converter clock cycles that the state machine dwells in the warm or warm_meas state */ - uint16_t samplingRate; /**< Sets the sample rate in units of PCLKperiod * (Prescale + 1). */ + uint8_t interruptConfig; /**< 1= interrupt Enable 0=Interrupt Disable */ + uint8_t PrescaleVal; /**< Prescaler: Sets the converter clock frequency. Fclk = 32 MHz/(prescaler + 1) where prescaler is the value of this register segment. The minimum tested value is 07 (4 MHz clock) */ + uint8_t measurementType; /**< 1= Absolute 0= Differential */ + uint8_t mode; /**< 1= Continuous Conversion 0= Single Shot */ + uint8_t referenceCh; /**< Selects 1 to 8 channels for reference channel */ + uint8_t convCh; /**< Selects 1 or 8 channels to do a conversion on.*/ + uint8_t inputScale; /**< Sets the input scale, 000 ? 1.0, 001 ? 0.6923, 010 ? 0.5294, 011 ? 0.4286, 100 ? 0.3600, 101 ? 0.3103, 110 ? 0.2728, 111 ? 0.2432 */ + uint8_t samplingTime; /**< Sample Time. Sets the measure time in units of PCLKperiod * (Prescale + 1).*/ + uint8_t WarmUpTime; /**< The number of converter clock cycles that the state machine dwells in the warm or warm_meas state */ + uint16_t samplingRate; /**< Sets the sample rate in units of PCLKperiod * (Prescale + 1). */ } analog_config_s; struct analogin_s { - analog_config_s *adcConf; - AdcReg_pt adcReg; - PinName pin; - uint8_t pinFlag; + analog_config_s *adcConf; + AdcReg_pt adcReg; + PinName pin; + uint8_t pinFlag; }; struct pwmout_s { @@ -142,55 +142,55 @@ typedef enum { } spi_clockPhase_t, *spi_clockPhase_pt; struct spi_s { - SpiIpc7207Reg_pt membase; /* Register address */ - IRQn_Type irq; /* IRQ number of the IRQ associated to the device. */ - uint8_t irqEnable; /* IRQ enables for 8 IRQ sources: - * - bit 7 = Receive FIFO Full - * - bit 6 = Receive FIFO 'Half' Full (watermark level) - * - bit 5 = Receive FIFO Not Empty - * - bit 4 = Transmit FIFO Not Full - * - bit 3 = Transmit FIFO 'Half' Empty (watermark level) - * - bit 2 = Transmit FIFO Empty - * - bit 1 = Transfer Error - * - bit 0 = ssIn (conditionally inverted and synchronized to PCLK) - * (unused option in current implementation / irq 6 and 7 used) */ - uint8_t slaveSelectEnable; /* Slave Select enables (x4): - * - 0 (x4) = Slave select enable - * - 1 (x4) = Slave select disable */ - uint8_t slaveSelectBurst; /* Slave Select burst mode: - * - NO_BURST_MODE = Burst mode disable - * - BURST_MODE = Burst mode enable */ - uint8_t slaveSelectPolarity;/* Slave Select polarity (x4) for up to 4 slaves: - * - 0 (x4) = Slave select is active low - * - 1 (x4) = Slave select is active high */ - uint8_t txWatermark; /* Transmit FIFO Watermark: Defines level of RX Half Full Flag - * - Value between 1 and 15 - * (unused option in current implementation / not txWatermark irq used) */ - uint8_t rxWatermark; /* Receive FIFO Watermark: Defines level of TX Half Full Flag: - * - Value between 1 and 15 - * * (unused option in current implementation / rxWatermark fixed to 1) */ + SpiIpc7207Reg_pt membase; /* Register address */ + IRQn_Type irq; /* IRQ number of the IRQ associated to the device. */ + uint8_t irqEnable; /* IRQ enables for 8 IRQ sources: + * - bit 7 = Receive FIFO Full + * - bit 6 = Receive FIFO 'Half' Full (watermark level) + * - bit 5 = Receive FIFO Not Empty + * - bit 4 = Transmit FIFO Not Full + * - bit 3 = Transmit FIFO 'Half' Empty (watermark level) + * - bit 2 = Transmit FIFO Empty + * - bit 1 = Transfer Error + * - bit 0 = ssIn (conditionally inverted and synchronized to PCLK) + * (unused option in current implementation / irq 6 and 7 used) */ + uint8_t slaveSelectEnable; /* Slave Select enables (x4): + * - 0 (x4) = Slave select enable + * - 1 (x4) = Slave select disable */ + uint8_t slaveSelectBurst; /* Slave Select burst mode: + * - NO_BURST_MODE = Burst mode disable + * - BURST_MODE = Burst mode enable */ + uint8_t slaveSelectPolarity; /* Slave Select polarity (x4) for up to 4 slaves: + * - 0 (x4) = Slave select is active low + * - 1 (x4) = Slave select is active high */ + uint8_t txWatermark; /* Transmit FIFO Watermark: Defines level of RX Half Full Flag + * - Value between 1 and 15 + * (unused option in current implementation / not txWatermark irq used) */ + uint8_t rxWatermark; /* Receive FIFO Watermark: Defines level of TX Half Full Flag: + * - Value between 1 and 15 + * * (unused option in current implementation / rxWatermark fixed to 1) */ spi_ipc7207_endian_t endian; /* Bits endianness: - * - LITTLE_ENDIAN = LSB first - * - BIG_ENDIAN = MSB first */ - uint8_t samplingEdge; /* SDI sampling edge (relative to SDO sampling edge): - * - 0 = opposite to SDO sampling edge - * - 1 = same as SDO sampling edge */ - uint32_t baudrate; /* The expected baud rate. */ - spi_clockPolarity_t clockPolarity; /* The clock polarity (active high or low). */ - spi_clockPhase_t clockPhase; /* The clock phase (sample on rising or falling edge). */ - uint8_t wordSize; /* The size word size in number of bits. */ + * - LITTLE_ENDIAN = LSB first + * - BIG_ENDIAN = MSB first */ + uint8_t samplingEdge; /* SDI sampling edge (relative to SDO sampling edge): + * - 0 = opposite to SDO sampling edge + * - 1 = same as SDO sampling edge */ + uint32_t baudrate; /* The expected baud rate. */ + spi_clockPolarity_t clockPolarity; /* The clock polarity (active high or low). */ + spi_clockPhase_t clockPhase; /* The clock phase (sample on rising or falling edge). */ + uint8_t wordSize; /* The size word size in number of bits. */ uint8_t Mode; uint32_t event; }; struct i2c_s { - uint32_t baudrate; /**< The expected baud rate. */ + uint32_t baudrate; /**< The expected baud rate. */ uint32_t I2cStatusFromInt; - uint8_t ClockSource; /**< I2C clock source, 0 clkI2C pin, 1 PCLK */ - uint8_t irqEnable; /**< IRQs to be enabled */ - I2cIpc7208Reg_pt membase; /**< The memory base for the device's registers. */ - IRQn_Type irq; /**< The IRQ number of the IRQ associated to the device. */ - //queue_pt rxQueue; /**< The receive queue for the device instance. */ + uint8_t ClockSource; /**< I2C clock source, 0 clkI2C pin, 1 PCLK */ + uint8_t irqEnable; /**< IRQs to be enabled */ + I2cIpc7208Reg_pt membase; /**< The memory base for the device's registers. */ + IRQn_Type irq; /**< The IRQ number of the IRQ associated to the device. */ + //queue_pt rxQueue; /**< The receive queue for the device instance. */ }; #ifdef __cplusplus diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/pad_map.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/pad_map.h index a41d693eb52..be718d48c01 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/pad_map.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/pad_map.h @@ -47,28 +47,28 @@ *************************************************************************************************/ /** no pull up nor pull down */ -#define PAD_PULL_NONE (uint8_t)0x01 +#define PAD_PULL_NONE (uint8_t)0x01 /** pull down */ -#define PAD_PULL_DOWN (uint8_t)0x00 +#define PAD_PULL_DOWN (uint8_t)0x00 /** pull up */ -#define PAD_PULL_UP (uint8_t)0x03 +#define PAD_PULL_UP (uint8_t)0x03 /** Drive strength */ -#define PAD_DRIVE_L0 (uint8_t)0x00 -#define PAD_DRIVE_L1 (uint8_t)0x01 -#define PAD_DRIVE_L2 (uint8_t)0x02 -#define PAD_DRIVE_L3 (uint8_t)0x03 -#define PAD_DRIVE_L4 (uint8_t)0x04 -#define PAD_DRIVE_L5 (uint8_t)0x05 -#define PAD_DRIVE_L6 (uint8_t)0x06 +#define PAD_DRIVE_L0 (uint8_t)0x00 +#define PAD_DRIVE_L1 (uint8_t)0x01 +#define PAD_DRIVE_L2 (uint8_t)0x02 +#define PAD_DRIVE_L3 (uint8_t)0x03 +#define PAD_DRIVE_L4 (uint8_t)0x04 +#define PAD_DRIVE_L5 (uint8_t)0x05 +#define PAD_DRIVE_L6 (uint8_t)0x06 /** output configuration push/pull */ -#define PAD_OUTCFG_PUSHPULL (uint8_t)0x00 +#define PAD_OUTCFG_PUSHPULL (uint8_t)0x00 /** output configuration open drain */ #define PAD_OOUTCFG_OPENDRAIN (uint8_t)0x01 /** lowest power PAD configuration, shall be the default */ -#define PAD_LOW_POWER (PAD_PULL_NONE | (PAD_DRIVE_L0<<2) | (PAD_OOUTCFG_OPENDRAIN<<5)) +#define PAD_LOW_POWER (PAD_PULL_NONE | (PAD_DRIVE_L0<<2) | (PAD_OOUTCFG_OPENDRAIN<<5)) /** custom Power PAD configuration */ #ifdef REVD @@ -76,8 +76,8 @@ #define PAD_INPUT_PD_L1_PP (PAD_PULL_DOWN | (PAD_DRIVE_L1<<2) | (PAD_OUTCFG_PUSHPULL<<5)) #define PAD_UNUSED_PD_L0_PP (PAD_PULL_DOWN | (PAD_DRIVE_L0<<2) | (PAD_OUTCFG_PUSHPULL<<5)) -#define PAD_UART_TX (PAD_PULL_UP | (PAD_DRIVE_L1<<2) | (PAD_OUTCFG_PUSHPULL<<5)) -#define PAD_UART_RX (PAD_PULL_UP | (PAD_DRIVE_L1<<2) | (PAD_OOUTCFG_OPENDRAIN<<5)) +#define PAD_UART_TX (PAD_PULL_UP | (PAD_DRIVE_L1<<2) | (PAD_OUTCFG_PUSHPULL<<5)) +#define PAD_UART_RX (PAD_PULL_UP | (PAD_DRIVE_L1<<2) | (PAD_OOUTCFG_OPENDRAIN<<5)) #endif /* REVD */ /************************************************************************************************** diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/pmu_map.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/pmu_map.h index 33913ed3188..d452fda6485 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/pmu_map.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/pmu_map.h @@ -53,61 +53,43 @@ typedef struct { union { struct { __IO uint32_t ENCOMA :1; /**< 0- Sleep or SleepDeep depending on System Control Register (see WFI and WFE instructions), 1 Coma */ - __IO uint32_t SRAMA :1; /**< SRAMA Powered in Coma Modes: 0 SRAM Powered, 1 SRAM Un-Powered */ - __IO uint32_t SRAMB :1; /**< SRAMB Powered in Coma Modes: 0 SRAM Powered, 1 SRAM Un-Powered */ + __IO uint32_t SRAMA :1; /**< SRAMA Powered in Coma Modes: 0 SRAM Powered, 1 SRAM Un-Powered */ + __IO uint32_t SRAMB :1; /**< SRAMB Powered in Coma Modes: 0 SRAM Powered, 1 SRAM Un-Powered */ __IO uint32_t EXT32K :1; /**< External 32.768kHz Enable: 0 Disabled (off), 1 Enabled (on), Hardware guarantees that this oscillator cannot be powered if the internal 32kHz oscillator is already powered down. Hardware insures that one of the 32kHz oscillators is running. */ __IO uint32_t INT32K :1; /**< Internal 32kHz Enable: 0 Enabled (on), 1 Disabled (Off), Hardware guarantees that this oscillator cannot be powered down if the external 32.768kHz oscillator is already powered down. Hardware insures that one of the 32kHz oscillators is running. */ __IO uint32_t INT32M :1; /**< Internal 32MHz Enable: 0 Enabled (on), 1 Disabled (off), This bit will automatically get cleared when exiting Coma, or SleepDeep modes of operation. This bit should be set by software after switching over to the external 32MHz oscillator using the Oscillator Select bit in the Clock Control register */ - __IO uint32_t C1V1:1; /**< Coma mode 1V1 regulator setting: 0 - Linear regulator, 1 - switching regulator */ - __IO uint32_t N1V1:1; /**< Regular mode (Run sleep and deepsleep) 1V1 regulator mode: 0 - Linear regulator, 1 - switching regulator */ + __IO uint32_t C1V1:1; /**< Coma mode 1V1 regulator setting: 0 - Linear regulator, 1 - switching regulator */ + __IO uint32_t N1V1:1; /**< Regular mode (Run sleep and deepsleep) 1V1 regulator mode: 0 - Linear regulator, 1 - switching regulator */ __IO uint32_t DBGPOW :1; /**< Debugger Power Behavior: 0 Normal power behavior when the debugger is present, 1 When debugger is present the ASIC can only enter SleepDeep mode and FVDDH and FVDDL always remain powered. The 32MHz oscillators can never be powered down in this mode either. */ - __IO uint32_t UVIC:1; /**< Under voltage indicator control: 0 - disabled, 1 - enabled */ - __IO uint32_t UVII:1; /**< Under voltage indicator input: 0 - 1V1 regulator, 1 - FVDDH regulator */ - __IO uint32_t UVIR:1; /**< Under voltage indicator reset: 0 - do not reset, 1 - reset */ + __IO uint32_t UVIC:1; /**< Under voltage indicator control: 0 - disabled, 1 - enabled */ + __IO uint32_t UVII:1; /**< Under voltage indicator input: 0 - 1V1 regulator, 1 - FVDDH regulator */ + __IO uint32_t UVIR:1; /**< Under voltage indicator reset: 0 - do not reset, 1 - reset */ } BITS; __IO uint32_t WORD; - } CONTROL; /* 0x4001D000 */ + } CONTROL; /* 0x4001D000 */ union { struct { - __I uint32_t BATTDET:1; /**< Detected battery: 0 - 1V, 1 - 3V */ - __I uint32_t UVIC:1; /**< Under voltage status: 0 - normal, 1 - low */ + __I uint32_t BATTDET:1; /**< Detected battery: 0 - 1V, 1 - 3V */ + __I uint32_t UVIC:1; /**< Under voltage status: 0 - normal, 1 - low */ } BITS; __IO uint32_t WORD; - } STATUS; /* 0x4001D004 */ + } STATUS; /* 0x4001D004 */ -#ifdef REVB - __IO uint32_t RAMBIAS; - __IO uint32_t RETAINA_T; /**< RAM retain make/break time. This is clocked using FCLK, so its range & resolution are determined by the FCLK divider register in the Clock Control Section. */ - __IO uint32_t RETAINB_T; /**< RAM retain make/break time. This is clocked using FCLK, so its range & resolution are determined by the FCLK divider register in the Clock Control Section. */ - __IO uint32_t FVDD_TSTARTUP; /**< Regulator start time. */ - __IO uint32_t FVDD_TSETTLE; /**< Regulator settle time. */ + __IO uint32_t PLACEHOLDER; /* 0x4001D008 */ + __IO uint32_t FVDD_TSTARTUP; /**< Regulator start time. */ /* 0x4001D00C */ + __IO uint32_t PLACEHOLDER1; /* 0x4001D010 */ + __IO uint32_t FVDD_TSETTLE; /**< Regulator settle time. */ /* 0x4001D014 */ union { struct { - __IO uint32_t TH:6; /**< Threshold */ - __I uint32_t PAD:2; - __I uint32_t UVIVAL; /**< UVI value */ + __IO uint32_t TH:6; /**< Threshold */ + __I uint32_t PAD:2; + __I uint32_t UVIVAL:6; /**< UVI value */ } BITS; __IO uint32_t WORD; - } UVI_TBASE; - __IO uint32_t UVI_LIM; -#endif /* REVB */ + } UVI_TBASE; /* 0x4001D018 */ + __IO uint32_t SRAM_TRIM; /* 0x4001D01C */ -#ifdef REVD - __IO uint32_t PLACEHOLDER; /* 0x4001D008 */ - __IO uint32_t FVDD_TSTARTUP; /**< Regulator start time. */ /* 0x4001D00C */ - __IO uint32_t PLACEHOLDER1; /* 0x4001D010 */ - __IO uint32_t FVDD_TSETTLE; /**< Regulator settle time. */ /* 0x4001D014 */ - union { - struct { - __IO uint32_t TH:6; /**< Threshold */ - __I uint32_t PAD:2; - __I uint32_t UVIVAL:6; /**< UVI value */ - } BITS; - __IO uint32_t WORD; - } UVI_TBASE; /* 0x4001D018 */ - __IO uint32_t SRAM_TRIM; /* 0x4001D01C */ -#endif /* REVD */ } PmuReg_t, *PmuReg_pt; #endif /* PMU_MAP_H_ */ diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/pwm_map.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/pwm_map.h index 455a8cb56b1..e567848c02b 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/pwm_map.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/pwm_map.h @@ -79,10 +79,10 @@ typedef struct { __IO uint32_t DUTYCYCLE; union { struct { - __O uint32_t ENABLE :8; /**< Write any value to enable PWM output */ - __I uint32_t PAD :1; /** < Pad */ - __I uint32_t ENABLE_STATE :1; /**< Current state of pwmEnable configuration bit. 1 PWM output is enabled. 0 PWN output is disabled. */ - __I uint32_t OUTPUT_STATE :1; /**< Current state of PWM output */ + __O uint32_t ENABLE :8; /**< Write any value to enable PWM output */ + __I uint32_t PAD :1; /** < Pad */ + __I uint32_t ENABLE_STATE :1; /**< Current state of pwmEnable configuration bit. 1 PWM output is enabled. 0 PWN output is disabled. */ + __I uint32_t OUTPUT_STATE :1; /**< Current state of PWM output */ } BITS; __IO uint32_t WORD; } PWM_ENABLE; diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/random_map.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/random_map.h index db395cc58a8..bc33441fb5a 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/random_map.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/random_map.h @@ -48,59 +48,59 @@ /** Random Number Generator Control HW Structure Overlay */ typedef struct { - __IO uint32_t WR_SEED_RD_RAND; /* Seed set & random read reg - 0x40011000 */ + __IO uint32_t WR_SEED_RD_RAND; /* Seed set & random read reg - 0x40011000 */ #ifdef REVB __IO uint32_t MODE; #endif /* REVB */ union { struct { - __IO uint32_t MODE :1; /** Channel 26 * * Each entry is compound of 4 items. - * Item 0: Rx Frequency integer divide portion - * Item 1: Rx Frequency fractional divide portion - * Item 2: Tx Frequency integer divide portion - * Item 3: Tx Frequency fractional divide portion + * Item 0: Rx Frequency integer divide portion + * Item 1: Rx Frequency fractional divide portion + * Item 2: Tx Frequency integer divide portion + * Item 3: Tx Frequency fractional divide portion * * The tx power table is used to program internal hardware register for different 15.4 tx power levels. * It has 43 entries corresponding to tx power levels from -32dBm to +10dBm. @@ -100,7 +100,7 @@ const uint32_t rfLut[16][4] = {{0x50,0x00D4A7,0x4B,0x00A000}, {0x53,0xFED4A6,0x4E,0xFDFFFE} }; -const uint8_t txPowerLut[43] = {0,0,0, // -32dBm to -30dBm +const uint8_t txPowerLut[43] = {0,0,0, // -32dBm to -30dBm 0,0,0,0,0,0,0,0,0,0, // -29dBm to -20dBm 0,0,0,0,0,0,0,0,1,2, // -19dBm to -10dBm 3,4,5,6,7,8,9,10,11,12, // -9dBm to 0dBm @@ -130,7 +130,7 @@ const uint32_t rfLut[16][4] = {{0x47,0xFF15FC,0x4B,0x00A000}, {0x49,0xFFE8CF,0x4E,0xFDFFFE} }; -const uint8_t txPowerLut[43] = {0,0,0, // -32dBm to -30dBm +const uint8_t txPowerLut[43] = {0,0,0, // -32dBm to -30dBm 0,0,0,0,0,0,0,0,0,0, // -29dBm to -20dBm 0,0,0,0,0,0,1,1,2,2, // -19dBm to -10dBm (clamp low at -14dB) 3,3,4,6,7,9,10,12,13,15, // -9dBm to 0dBm @@ -141,7 +141,7 @@ const uint8_t txPowerLut[43] = {0,0,0, // -32dBm to -30dBm #ifdef REVB /** This rf LUT is built for low side injection, using high side injection * would requiere to change this LUT. */ -const uint32_t rfLut[16][4] = {{0x47,0xFF15FC,0x4B,0x00A000}, +const uint32_t rfLut[16][4] = {{0x47,0xFF15FC,0x4B,0x00A000}, {0x47,0xFFAC93,0x4B,0x014001}, {0x47,0x00432A,0x4B,0x01E001}, {0x47,0x00D9C1,0x4C,0xFE7FFF}, @@ -159,7 +159,7 @@ const uint32_t rfLut[16][4] = {{0x47,0xFF15FC,0x4B,0x00A000}, {0x49,0xFFE8CF,0x4E,0xFDFFFE} }; -const uint8_t txPowerLut[43] = {0,0,0, // -32dBm to -30dBm +const uint8_t txPowerLut[43] = {0,0,0, // -32dBm to -30dBm 0,0,0,0,0,0,0,0,0,0, // -29dBm to -20dBm 0,0,0,0,0,0,1,1,2,2, // -19dBm to -10dBm (clamp low at -14dB) 3,3,4,6,7,9,10,12,13,15, // -9dBm to 0dBm @@ -168,7 +168,7 @@ const uint8_t txPowerLut[43] = {0,0,0, // -32dBm to -30dBm #endif #ifdef REVA -const uint32_t rfLut[16][4] = {{0x57,0xFF5D2F,0x51,0x018001}, +const uint32_t rfLut[16][4] = {{0x57,0xFF5D2F,0x51,0x018001}, {0x57,0x0007DA,0x52,0xFE1FFF}, {0x57,0x00B285,0x52,0xFEBFFF}, {0x57,0x015D30,0x52,0xFF6000}, @@ -186,7 +186,7 @@ const uint32_t rfLut[16][4] = {{0x57,0xFF5D2F,0x51,0x018001}, {0x59,0x015D30,0x53,0xFEDFFF} }; -const uint8_t txPowerLut[43] = {1,2,3, // -32dBm to -30dBm +const uint8_t txPowerLut[43] = {1,2,3, // -32dBm to -30dBm 4,5,5,5,5,5,5,5,5,5, // -29dBm to -20dBm (clamp at -28dB) 5,5,5,5,5,5,5,5,5,5, // -19dBm to -10dBm 5,5,5,5,5,5,5,5,5,5, // -9dBm to 0dBm diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/rfAna.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/rfAna.h index 21b10652f61..a2d5513d2dd 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/rfAna.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/rfAna.h @@ -47,8 +47,8 @@ /** Miscellaneous I/O codes / * @details */ -#define SET_RF_CHANNEL (0x0) /**< Ioctl request code: Set Rf channel frequency */ -#define SET_TX_POWER (0x1) /**< Ioctl request code: Set Tx output power */ +#define SET_RF_CHANNEL (0x0) /**< Ioctl request code: Set Rf channel frequency */ +#define SET_TX_POWER (0x1) /**< Ioctl request code: Set Tx output power */ /************************************************************************************************* * * diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/rtc.c b/targets/TARGET_ONSEMI/TARGET_NCS36510/rtc.c index aad86ca8ef5..02b61de6286 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/rtc.c +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/rtc.c @@ -50,24 +50,24 @@ static uint64_t LastRtcTimeus; /* See rtc.h for details */ void fRtcInit(void) { - CLOCK_ENABLE(CLOCK_RTC); /* enable rtc peripheral */ - CLOCKREG->CCR.BITS.RTCEN = True; /* Enable RTC clock 32K */ + CLOCK_ENABLE(CLOCK_RTC); /* enable rtc peripheral */ + CLOCKREG->CCR.BITS.RTCEN = True; /* Enable RTC clock 32K */ /* Reset RTC control register */ - RTCREG->CONTROL.WORD = False; + RTCREG->CONTROL.WORD = False; /* Initialize all counters */ - RTCREG->SECOND_COUNTER = False; - RTCREG->SUB_SECOND_COUNTER = False; - RTCREG->SECOND_ALARM = False; - RTCREG->SUB_SECOND_ALARM = False; + RTCREG->SECOND_COUNTER = False; + RTCREG->SUB_SECOND_COUNTER = False; + RTCREG->SECOND_ALARM = False; + RTCREG->SUB_SECOND_ALARM = False; LastRtcTimeus = 0; /* Reset RTC Status register */ - RTCREG->STATUS.WORD = False; + RTCREG->STATUS.WORD = False; /* Clear interrupt status */ - RTCREG->INT_CLEAR.WORD = False; + RTCREG->INT_CLEAR.WORD = False; /* Start sec & sub_sec counter */ while(RTCREG->STATUS.BITS.BSY_CTRL_REG_WRT == True);/* Wait previous write to complete */ @@ -99,8 +99,8 @@ void fRtcFree(void) /* See rtc.h for details */ void fRtcSetInterrupt(uint32_t timestamp) { - SubSecond = False; - uint32_t Second = False; + SubSecond = False; + uint32_t Second = False; uint8_t DividerAdjust = 1; if(timestamp) { @@ -122,7 +122,7 @@ void fRtcSetInterrupt(uint32_t timestamp) } volatile uint64_t Temp = (timestamp / DividerAdjust * RTC_CLOCK_HZ); - timestamp = (uint64_t)(Temp / RTC_SEC_TO_US * DividerAdjust); + Temp = (uint64_t)(Temp / RTC_SEC_TO_US * DividerAdjust); SubSecond = Temp & RTC_SUB_SEC_MASK; if(SubSecond <= 5) { @@ -134,7 +134,7 @@ void fRtcSetInterrupt(uint32_t timestamp) /* Second interrupt not enabled */ /* Set SUB SEC_ALARM */ - RTCREG->SUB_SECOND_ALARM = SubSecond; /* Write to sub second alarm */ + RTCREG->SUB_SECOND_ALARM = SubSecond; /* Write to sub second alarm */ /* Enable sub second interrupt */ RTCREG->CONTROL.WORD |= (True << RTC_CONTROL_SUBSEC_CNT_INT_BIT_POS); @@ -190,8 +190,8 @@ uint64_t fRtcRead(void) */ do { - Second = RTCREG->SECOND_COUNTER; /* Get SEC_COUNTER reg value */ - SubSecond = (RTCREG->SUB_SECOND_COUNTER - 1) & 0x7FFF; /* Get SUB_SEC_COUNTER reg value */ + Second = RTCREG->SECOND_COUNTER; /* Get SEC_COUNTER reg value */ + SubSecond = (RTCREG->SUB_SECOND_COUNTER - 1) & 0x7FFF; /* Get SUB_SEC_COUNTER reg value */ } while (Second != RTCREG->SECOND_COUNTER); /* Repeat if the second has changed */ //note: casting to float removed to avoid reduction in resolution @@ -207,8 +207,8 @@ uint64_t fRtcRead(void) /* See rtc.h for details */ void fRtcWrite(uint64_t RtcTimeus) { - uint32_t Second = 0; - uint16_t SubSecond = 0; + uint32_t Second = 0; + uint16_t SubSecond = 0; /* Stop RTC */ RTCREG->CONTROL.WORD &= ~((True << RTC_CONTROL_SUBSEC_CNT_START_BIT_POS) | (True << RTC_CONTROL_SEC_CNT_START_BIT_POS)); @@ -237,6 +237,7 @@ void fRtcWrite(uint64_t RtcTimeus) /* See rtc.h for details */ void fRtcHandler(void) { + while(RTCREG->STATUS.BITS.BSY_ANY_WRT == True); /* Wait for RTC to finish writing register - RTC operates on 32K clock as compared to 32M core*/ /* SUB_SECOND/SECOND interrupt occured */ volatile uint32_t TempStatus = RTCREG->STATUS.WORD; @@ -265,11 +266,12 @@ void fRtcHandler(void) } else { /* We reach here after sub_second or (Sub second + second) interrupt occured */ while(RTCREG->STATUS.BITS.BSY_CTRL_REG_WRT == True); + /* Disable Second and sub_second interrupt */ RTCREG->CONTROL.WORD &= ~(True << RTC_CONTROL_SUBSEC_CNT_INT_BIT_POS) | (True << RTC_CONTROL_SEC_CNT_INT_BIT_POS); } - while(RTCREG->STATUS.BITS.BSY_ANY_WRT == True); /* Wait for RTC to finish writing register - RTC operates on 32K clock as compared to 32M core*/ + lp_ticker_irq_handler(); } boolean fIsRtcEnabled(void) diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/rtc.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/rtc.h index 2e7f210e84e..4843975d186 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/rtc.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/rtc.h @@ -1,7 +1,7 @@ /** ****************************************************************************** * @file rtc.h - * @brief (API) Public header of RTC driver + * @brief (API) Public header of RTC driver * @internal * @author ON Semiconductor * $Rev: 3485 $ @@ -34,26 +34,26 @@ #include "clock.h" #include "memory_map.h" -#define RTC_CLOCK_HZ 32768 -#define RTC_SEC_TO_US 1000000 -#define RTC_SUB_SEC_MASK 0x7FFF -#define RTC_SEC_MASK 0xFFFFFFFF -#define RTC_SEC_INT_STATUS_MASK 0x2 +#define RTC_CLOCK_HZ 32768 +#define RTC_SEC_TO_US 1000000 +#define RTC_SUB_SEC_MASK 0x7FFF +#define RTC_SEC_MASK 0xFFFFFFFF +#define RTC_SEC_INT_STATUS_MASK 0x2 -#define RTC_SUBSEC_INTERRUPT_BIT_VAL 0x1 -#define RTC_SEC_INTERRUPT_BIT_VAL 0x2 -#define RTC_ALL_INTERRUPT_BIT_VAL 0x3 +#define RTC_SUBSEC_INTERRUPT_BIT_VAL 0x1 +#define RTC_SEC_INTERRUPT_BIT_VAL 0x2 +#define RTC_ALL_INTERRUPT_BIT_VAL 0x3 -#define RTC_INT_CLR_SUB_SEC_BIT_POS 0 -#define RTC_INT_CLR_SEC_BIT_POS 1 +#define RTC_INT_CLR_SUB_SEC_BIT_POS 0 +#define RTC_INT_CLR_SEC_BIT_POS 1 -#define RTC_CONTROL_SUBSEC_CNT_START_BIT_POS 0 -#define RTC_CONTROL_SEC_CNT_START_BIT_POS 1 -#define RTC_CONTROL_SUBSEC_CNT_INT_BIT_POS 2 -#define RTC_CONTROL_SEC_CNT_INT_BIT_POS 3 +#define RTC_CONTROL_SUBSEC_CNT_START_BIT_POS 0 +#define RTC_CONTROL_SEC_CNT_START_BIT_POS 1 +#define RTC_CONTROL_SUBSEC_CNT_INT_BIT_POS 2 +#define RTC_CONTROL_SEC_CNT_INT_BIT_POS 3 -#define RTC_STATUS_SUB_SEC_INT_CLR_WRT_BIT_POS 9 -#define RTC_STATUS_SEC_INT_CLR_WRT_BIT_POS 10 +#define RTC_STATUS_SUB_SEC_INT_CLR_WRT_BIT_POS 9 +#define RTC_STATUS_SEC_INT_CLR_WRT_BIT_POS 10 /* FUnction pointer for call back */ typedef void (* fRtcCallBack)(void); diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/rtc_map.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/rtc_map.h index 64b06acbfdf..86f6325821b 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/rtc_map.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/rtc_map.h @@ -111,43 +111,43 @@ typedef struct { } INT_CLEAR; #endif /* REVB */ #ifdef REVD - __IO uint32_t SUB_SECOND_COUNTER; /**PADIO0.WORD = PAD_UART_RX; /* Pad settings for UART Rx */ - GPIOREG->W_OUT |= (True << tx); /* tx as OUT direction */ - GPIOREG->W_IN |= (True << rx); /* rx as IN directon */ + GPIOREG->W_OUT |= (True << tx); /* tx as OUT direction */ + GPIOREG->W_IN |= (True << rx); /* rx as IN directon */ CLOCK_DISABLE(CLOCK_PAD); CLOCK_DISABLE(CLOCK_CROSSB); @@ -324,8 +324,8 @@ int serial_getc(serial_t *obj) { uint8_t c; - while(!obj->UARTREG->LSR.BITS.READY); /* Wait for received data is ready */ - c = obj->UARTREG->RBR & 0xFF; /* Get received character */ + while(!obj->UARTREG->LSR.BITS.READY); /* Wait for received data is ready */ + c = obj->UARTREG->RBR & 0xFF; /* Get received character */ return c; } diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/sleep.c b/targets/TARGET_ONSEMI/TARGET_NCS36510/sleep.c index 9fce0d8de29..0713f7626ac 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/sleep.c +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/sleep.c @@ -35,14 +35,14 @@ #include "sleep_api.h" #include "cmsis_nvic.h" -#define ENABLE (uint8_t)0x01 -#define DISABLE (uint8_t)0x00 -#define MAC_LUT_SIZE (uint8_t)96 +#define ENABLE (uint8_t)0x01 +#define DISABLE (uint8_t)0x00 +#define MAC_LUT_SIZE (uint8_t)96 -#define portNVIC_SYSTICK_CTRL_REG ( * ( ( volatile unsigned long * ) 0xe000e010 ) ) -#define portNVIC_SYSTICK_CLK_BIT ( 1UL << 2UL ) -#define portNVIC_SYSTICK_INT_BIT ( 1UL << 1UL ) -#define portNVIC_SYSTICK_ENABLE_BIT ( 1UL << 0UL ) +#define portNVIC_SYSTICK_CTRL_REG ( * ( ( volatile unsigned long * ) 0xe000e010 ) ) +#define portNVIC_SYSTICK_CLK_BIT ( 1UL << 2UL ) +#define portNVIC_SYSTICK_INT_BIT ( 1UL << 1UL ) +#define portNVIC_SYSTICK_ENABLE_BIT ( 1UL << 0UL ) void sleep(void) { @@ -79,7 +79,7 @@ void coma(void) PMUREG->CONTROL.BITS.ENCOMA = ENABLE; /* TODO Wait till MAC is idle */ - // while((MACHWREG->SEQUENCER == MACHW_SEQ_TX) || (MACHWREG->SEQUENCER == MACHW_SEQ_ED) || (MACHWREG->SEQUENCER == MACHW_SEQ_CCA)); + // while((MACHWREG->SEQUENCER == MACHW_SEQ_TX) || (MACHWREG->SEQUENCER == MACHW_SEQ_ED) || (MACHWREG->SEQUENCER == MACHW_SEQ_CCA)); /* TODO Back up MAC_LUT * uint8_t MAC_LUT_BackUp[MAC_LUT_SIZE]; diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/sleep.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/sleep.h index f7e6cb8f8c2..f3f9ff1fc50 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/sleep.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/sleep.h @@ -42,18 +42,18 @@ #include "crossbar.h" #include "clock.h" -#define SLEEP_TYPE_NONE 0 -#define SLEEP_TYPE_SLEEP 1 -#define SLEEP_TYPE_DEEPSLEEP 2 -#define SLEEP_TYPE_COMA 3 +#define SLEEP_TYPE_NONE 0 +#define SLEEP_TYPE_SLEEP 1 +#define SLEEP_TYPE_DEEPSLEEP 2 +#define SLEEP_TYPE_COMA 3 -#define SLEEP_DURATION_SLEEP_MIN 10 /* msec */ -#define SLEEP_DURATION_SLEEP_MAX 200 /* msec */ -#define SLEEP_DURATION_DEEPSLEEP_MAX 500 /* msec */ -#define SLEEP_DURATION_COMA_MAX 1000000000 /* TODO 1000 sec */ +#define SLEEP_TYPE_DEFAULT SLEEP_TYPE_DEEPSLEEP + +#define SLEEP_DURATION_SLEEP_MIN 10 /* msec */ +#define SLEEP_DURATION_SLEEP_MAX 200 /* msec */ +#define SLEEP_DURATION_DEEPSLEEP_MAX 500 /* msec */ +#define SLEEP_DURATION_COMA_MAX 1000000000 /* TODO 1000 sec */ -void sleep(void); -void deepsleep(void); void coma(void); #endif // SLEEP_H_ diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/sleep_api.c b/targets/TARGET_ONSEMI/TARGET_NCS36510/sleep_api.c index 432c6e1ba16..a59dde1026d 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/sleep_api.c +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/sleep_api.c @@ -39,11 +39,52 @@ void mbed_enter_sleep(sleep_t *obj) { - /* Empty implementation, this will be implemented for mbed5.0 */ + +#ifdef SLEEP_TYPE_DEFAULT + + if(SLEEP_TYPE_DEFAULT == SLEEP_TYPE_SLEEP) { + /* Sleep mode */ + sleep(); + } else if(SLEEP_TYPE_DEFAULT == SLEEP_TYPE_DEEPSLEEP) { + /* Deep Sleep mode */ + deepsleep(); + } else { + /* Coma mode */ + coma(); + } + +#else + + if(obj->SleepType == SLEEP_TYPE_NONE) { + /* Select low power mode based on sleep duration */ + + if(obj->timeToSleep <= SLEEP_DURATION_SLEEP_MAX) { + /* Sleep mode */ + sleep(); + } else if(obj->timeToSleep <= SLEEP_DURATION_DEEPSLEEP_MAX) { + /* Deep sleep */ + deepsleep(); + } else { + /* Coma */ + coma(); + } + } else if(obj->SleepType == SLEEP_TYPE_SLEEP) { + /* Sleep mode */ + sleep(); + } else if(obj->SleepType == SLEEP_TYPE_DEEPSLEEP) { + /* Deep Sleep mode */ + deepsleep(); + } else { + /* Coma mode */ + coma(); + } + +#endif } void mbed_exit_sleep(sleep_t *obj) { (void)obj; } + #endif /* DEVICE_SLEEP */ \ No newline at end of file diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/spi.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/spi.h index 7ca81c258fc..91c3b333668 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/spi.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/spi.h @@ -42,9 +42,35 @@ extern "C" { #endif /* Miscellaneous I/O and control operations codes */ -#define SPI_IPC7207_IOCTL_GET_SLAVE_SELECT (0x1) /**< Ioctl request code: Reading slaveSelect register */ -#define SPI_IPC7207_IOCTL_SET_SLAVE_SELECT (0x2) /**< Ioctl request code: Setting slaveSelect register */ -#define SPI_IPC7207_IOCTL_FLUSH (0x3) /**< Ioctl request code: Flushin FIFOs and serial shift registers */ +#define SPI_IPC7207_IOCTL_GET_SLAVE_SELECT (0x1) /**< Ioctl request code: Reading slaveSelect register */ +#define SPI_IPC7207_IOCTL_SET_SLAVE_SELECT (0x2) /**< Ioctl request code: Setting slaveSelect register */ +#define SPI_IPC7207_IOCTL_FLUSH (0x3) /**< Ioctl request code: Flushin FIFOs and serial shift registers */ + +/* Control register bit positions */ +#define SPI_WORD_WIDTH_BIT_POS 6 +#define SPI_SLAVE_MASTER_BIT_POS 5 +#define SPI_CPOL_BIT_POS 4 +#define SPI_CPHA_BIT_POS 3 +#define SPI_ENDIAN_BIT_POS 2 +#define SPI_SAMPLE_EDGE_BIT_POS 1 +#define SPI_PORT_ENABLE_BIT_POS 0 + +/* COntrol register bits */ +#define SPI_ENDIAN_MSB_FIRST 1 +#define SPI_CPOL_IDLE_LOW 0 +#define SPI_CPHA_BEFORE_1ST_EDGE 0 +#define SPI_MASTER_MODE 1 +#define SPI_WORD_WIDTH_8_BITS 0 +#define SPI_SAMPLE_OPP_CLK_EDGE_DATA 0 +#define SPI_SLAVE_SELECT_NORM_BEHAVE 0 +#define SPI_PORT_ENABLE 1 + +#define SPI_SLAVE_SELECT_DEFAULT 0x10 + +#define SPI_DEFAULT_CONFIG 0x25 + +#define SPI_DEFAULT_SPEED 1000000 +#define SPI_BYTE_MASK 0xFF extern void fSpiInit(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel); extern void fSpiClose(spi_t *obj); diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/spi_api.c b/targets/TARGET_ONSEMI/TARGET_NCS36510/spi_api.c index 614e0c73358..af039865947 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/spi_api.c +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/spi_api.c @@ -43,10 +43,7 @@ #include "cmsis_nvic.h" -#define SPI_FREQ_MAX 4000000 -#define SPI_ENDIAN_LSB_FIRST 0 -#define SPI_MASTER_MODE 1 -#define SPI_SLAVE_MODE 0 +#define SPI_FREQ_MAX 4000000 void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel) { @@ -59,18 +56,15 @@ void spi_free(spi_t *obj) void spi_format(spi_t *obj, int bits, int mode, int slave) { - if(slave) { - /* Slave mode */ - obj->membase->CONTROL.BITS.MODE = SPI_SLAVE_MODE; - } else { - /* Master mode */ - obj->membase->CONTROL.BITS.MODE = SPI_MASTER_MODE; - } - obj->membase->CONTROL.BITS.WORD_WIDTH = bits >> 0x4; /* word width */ - obj->membase->CONTROL.BITS.CPOL = mode >> 0x1; /* CPOL */ - obj->membase->CONTROL.BITS.CPHA = mode & 0x1; /* CPHA */ - - obj->membase->CONTROL.BITS.ENDIAN = SPI_ENDIAN_LSB_FIRST; /* Endian */ + /* Clear word width | Slave/Master | CPOL | CPHA | MSB first bits in control register */ + obj->membase->CONTROL.WORD &= ~(uint32_t)((True >> SPI_WORD_WIDTH_BIT_POS) | + (True >> SPI_SLAVE_MASTER_BIT_POS) | + (True >> SPI_CPOL_BIT_POS) | + (True >> SPI_CPHA_BIT_POS)); + + /* Configure word width | Slave/Master | CPOL | CPHA | MSB first bits in control register */ + obj->membase->CONTROL.WORD |= (uint32_t)(((bits >> 0x4) >> 6) | (!slave >> 5) | + ((mode >> 0x1) >> 4) | ((mode & 0x1) >> 3)); } void spi_frequency(spi_t *obj, int hz) @@ -103,6 +97,29 @@ uint8_t spi_get_module(spi_t *obj) } } +int spi_slave_receive(spi_t *obj) +{ + if(obj->membase->STATUS.BITS.RX_EMPTY != True){ /* if receive status is not empty */ + return True; /* Byte available to read */ + } + return False; /* Byte not available to read */ +} + +int spi_slave_read(spi_t *obj) +{ + int byte; + + while (obj->membase->STATUS.BITS.RX_EMPTY == True); /* Wait till Receive status is empty */ + byte = obj->membase->RX_DATA; + return byte; +} + +void spi_slave_write(spi_t *obj, int value) +{ + while((obj->membase->STATUS.BITS.TX_FULL == True) && (obj->membase->STATUS.BITS.RX_FULL == True)); /* Wait till Tx/Rx status is full */ + obj->membase->TX_DATA = value; +} + #if DEVICE_SPI_ASYNCH /* TODO Not implemented yet */ void spi_master_transfer(spi_t *obj, void *tx, size_t tx_length, void *rx, size_t rx_length, uint32_t handler, uint32_t event, DMAUsage hint) @@ -147,12 +164,12 @@ void spi_master_transfer(spi_t *obj, void *tx, size_t tx_length, void *rx, size_ } - // enable events + // enable events obj->spi.event |= event; - // set sleep_level + // set sleep_level enable irq //write async @@ -193,4 +210,4 @@ void spi_abort_asynch(spi_t *obj) } #endif /* DEVICE_SPI_ASYNCH */ -#endif /* DEVICE_SPI */ +#endif /* DEVICE_SPI */ \ No newline at end of file diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/swversion.c b/targets/TARGET_ONSEMI/TARGET_NCS36510/swversion.c index 50f30ff12a5..f16cdac18d6 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/swversion.c +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/swversion.c @@ -46,10 +46,10 @@ __root const fibtable_t fib_table @ "FIBTABLE" = { LOAD_ADDRESS,{0x0,0x00,0x00,0 #endif /* IAR */ const mib_systemRevision_t systemRevision = { - 0x82, /**< hardware revision */ - 0x00, /**< patch level */ - 0x01, /**< Build number */ - 0x00, /**< feature set, Minor version */ - 0x01, /**< generation, Major version */ - 'E' /**< release */ + 0x82, /**< hardware revision */ + 0x00, /**< patch level */ + 0x01, /**< Build number */ + 0x00, /**< feature set, Minor version */ + 0x01, /**< generation, Major version */ + 'E' /**< release */ }; diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/sys.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/sys.h index e55c0929a50..979b80ce268 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/sys.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/sys.h @@ -39,18 +39,18 @@ * * *************************************************************************************************/ -#define SYS_MODULE_ID 0x04 +#define SYS_MODULE_ID 0x04 -#define SYS_RESET_CODE 0x00 -#define SYS_SLEEP_CODE 0x10 -#define SYS_DEEPSLEEP_CODE 0x11 -#define SYS_COMA_CODE 0x12 +#define SYS_RESET_CODE 0x00 +#define SYS_SLEEP_CODE 0x10 +#define SYS_DEEPSLEEP_CODE 0x11 +#define SYS_COMA_CODE 0x12 -#define SYS_RESET_WATCHDOG 0x00 -#define SYS_RESET_CORTEX 0x01 +#define SYS_RESET_WATCHDOG 0x00 +#define SYS_RESET_CORTEX 0x01 -#define PWM_ACCESS_CODE 0x30 -#define PWM_IOCTLS_CODE 0x31 +#define PWM_ACCESS_CODE 0x30 +#define PWM_IOCTLS_CODE 0x31 /************************************************************************************************* * * diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/ticker.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/ticker.h index 82f186d093c..f7be3c94fc1 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/ticker.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/ticker.h @@ -36,41 +36,41 @@ * * These definitions should be adjusted to setup Orion core frequencies. */ -#define CPU_CLOCK_ROOT_HZ ( ( unsigned long ) 32000000) /**< Orion 32MHz root frequency */ -#define CPU_CLOCK_DIV_32M ( 1 ) /**< Divider to set up core frequency at 32MHz */ -#define CPU_CLOCK_DIV_16M ( 2 ) /**< Divider to set up core frequency at 16MHz */ -#define CPU_CLOCK_DIV_8M ( 4 ) /**< Divider to set up core frequency at 8MHz */ -#define CPU_CLOCK_DIV_4M ( 8 ) /**< Divider to set up core frequency at 4MHz */ +#define CPU_CLOCK_ROOT_HZ ( ( unsigned long ) 32000000) /**< Orion 32MHz root frequency */ +#define CPU_CLOCK_DIV_32M ( 1 ) /**< Divider to set up core frequency at 32MHz */ +#define CPU_CLOCK_DIV_16M ( 2 ) /**< Divider to set up core frequency at 16MHz */ +#define CPU_CLOCK_DIV_8M ( 4 ) /**< Divider to set up core frequency at 8MHz */ +#define CPU_CLOCK_DIV_4M ( 8 ) /**< Divider to set up core frequency at 4MHz */ -#define CPU_CLOCK_DIV CPU_CLOCK_DIV_32M /**< Selected divider to be used by application code */ +#define CPU_CLOCK_DIV CPU_CLOCK_DIV_32M /**< Selected divider to be used by application code */ -#define configCPU_CLOCK_HZ ( ( unsigned long ) (CPU_CLOCK_ROOT_HZ/CPU_CLOCK_DIV) ) -#define configTICK_RATE_HZ ( ( unsigned long ) 1000000 ) // 1uSec ticker rate +#define configCPU_CLOCK_HZ ( ( unsigned long ) (CPU_CLOCK_ROOT_HZ/CPU_CLOCK_DIV) ) +#define configTICK_RATE_HZ ( ( unsigned long ) 1000000 ) // 1uSec ticker rate /* Lowest priority */ -#define configKERNEL_INTERRUPT_PRIORITY ( 0xFF ) -#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( 0x8F ) +#define configKERNEL_INTERRUPT_PRIORITY ( 0xFF ) +#define configMAX_SYSCALL_INTERRUPT_PRIORITY ( 0x8F ) #define configSYSTICK_CLOCK_HZ configCPU_CLOCK_HZ /* Constants required to manipulate the core. Registers first... */ -#define portNVIC_SYSTICK_CTRL_REG ( * ( ( volatile unsigned long * ) 0xe000e010 ) ) -#define portNVIC_SYSTICK_LOAD_REG ( * ( ( volatile unsigned long * ) 0xe000e014 ) ) -#define portNVIC_SYSTICK_CURRENT_VALUE_REG ( * ( ( volatile unsigned long * ) 0xe000e018 ) ) -#define portNVIC_INT_CTRL_REG ( * ( ( volatile unsigned long * ) 0xe000ed04 ) ) -#define portNVIC_SYSPRI2_REG ( * ( ( volatile unsigned long * ) 0xe000ed20 ) ) +#define portNVIC_SYSTICK_CTRL_REG ( * ( ( volatile unsigned long * ) 0xe000e010 ) ) +#define portNVIC_SYSTICK_LOAD_REG ( * ( ( volatile unsigned long * ) 0xe000e014 ) ) +#define portNVIC_SYSTICK_CURRENT_VALUE_REG ( * ( ( volatile unsigned long * ) 0xe000e018 ) ) +#define portNVIC_INT_CTRL_REG ( * ( ( volatile unsigned long * ) 0xe000ed04 ) ) +#define portNVIC_SYSPRI2_REG ( * ( ( volatile unsigned long * ) 0xe000ed20 ) ) /* ...then bits in the registers. */ -#define portNVIC_SYSTICK_CLK_BIT ( 1UL << 2UL ) -#define portNVIC_SYSTICK_INT_BIT ( 1UL << 1UL ) -#define portNVIC_SYSTICK_ENABLE_BIT ( 1UL << 0UL ) -#define portNVIC_SYSTICK_COUNT_FLAG_BIT ( 1UL << 16UL ) +#define portNVIC_SYSTICK_CLK_BIT ( 1UL << 2UL ) +#define portNVIC_SYSTICK_INT_BIT ( 1UL << 1UL ) +#define portNVIC_SYSTICK_ENABLE_BIT ( 1UL << 0UL ) +#define portNVIC_SYSTICK_COUNT_FLAG_BIT ( 1UL << 16UL ) /* Orion has 4 interrupt priority bits */ -#define portNVIC_SYSTICK_PRI ( ( ( unsigned long ) configKERNEL_INTERRUPT_PRIORITY ) << 24 ) +#define portNVIC_SYSTICK_PRI ( ( ( unsigned long ) configKERNEL_INTERRUPT_PRIORITY ) << 24 ) /* API definitions */ void fSysTickInit(void); diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/timer.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/timer.h index 59b0d760625..58affbc1452 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/timer.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/timer.h @@ -57,53 +57,53 @@ extern "C" { #include "cmsis_nvic.h" /* Miscellaneous I/O and control operations codes */ -#define TIMER_IOCTL_GET_LOAD 1 /**< Ioctl request code: Getting load value. */ -#define TIMER_IOCTL_SET_LOAD 2 /**< Ioctl request code: Seting load value. */ -#define TIMER_IOCTL_GET_VALUE 3 /**< Ioctl request code: Getting current timer value. */ +#define TIMER_IOCTL_GET_LOAD 1 /**< Ioctl request code: Getting load value. */ +#define TIMER_IOCTL_SET_LOAD 2 /**< Ioctl request code: Seting load value. */ +#define TIMER_IOCTL_GET_VALUE 3 /**< Ioctl request code: Getting current timer value. */ /* Timer control bits */ -#define TIMER_ENABLE_BIT 0x1 -#define TIMER_PRESCALE_BIT_POS 0x2 -#define TIMER_MODE_BIT_POS 0x6 -#define TIMER_ENABLE_BIT_POS 0x7 +#define TIMER_ENABLE_BIT 0x1 +#define TIMER_PRESCALE_BIT_POS 0x2 +#define TIMER_MODE_BIT_POS 0x6 +#define TIMER_ENABLE_BIT_POS 0x7 /* Options defines */ // TODO (MIV): put this in an enumerated value typedef enum { - CLK_DIVIDER_1 = 0, - CLK_DIVIDER_2 = 3, - CLK_DIVIDER_8 = 4, - CLK_DIVIDER_16 = 1, - CLK_DIVIDER_32 = 5, - CLK_DIVIDER_128 = 6, - CLK_DIVIDER_256 = 2, - CLK_DIVIDER_1024 = 7 + CLK_DIVIDER_1 = 0, + CLK_DIVIDER_2 = 3, + CLK_DIVIDER_8 = 4, + CLK_DIVIDER_16 = 1, + CLK_DIVIDER_32 = 5, + CLK_DIVIDER_128 = 6, + CLK_DIVIDER_256 = 2, + CLK_DIVIDER_1024 = 7 } ClockDivider; -#define TIME_MODE_FREE_RUNNING 0x0 -#define TIME_MODE_PERIODIC 0x1 +#define TIME_MODE_FREE_RUNNING 0x0 +#define TIME_MODE_PERIODIC 0x1 typedef void (*timer_irq_handlers_t)(void) ; /** Options to be passed when opening a timer device instance.*/ typedef struct timer_options { - TimerReg_pt membase; /**< Memory base for the device's registers. */ - uint8_t irq; /**< IRQ number of the IRQ associated to the device. */ - boolean mode; /**< Timer mode: - * - 0 = Free Run mode (no interrupt generation) - * # timer duration = (65535 + 1) * prescaler * peripheral clock (PCLK) period - * - 1 = Periodic mode (interrupt generation) - * # timer duration = (load + 1) * prescaler * peripheral clock (PCLK) period */ - uint8_t prescale; /**< Timer prescaler: from 1 to 1024. - * - CLK_DIVIDER_1 = clock not divided - * - CLK_DIVIDER_2 = clock is divided by 2 - * - CLK_DIVIDER_8 = clock is divided by 8 - * - CLK_DIVIDER_16 = clock is divided by 16 - * - CLK_DIVIDER_32 = clock is divided by 32 - * - CLK_DIVIDER_128 = clock is divided by 128 - * - CLK_DIVIDER_256 = clock is divided by 256 - * - CLK_DIVIDER_1024 = clock is divided by 1024 */ - uint16_t load; /**< Timer load: from 0 to 65535. */ + TimerReg_pt membase; /**< Memory base for the device's registers. */ + uint8_t irq; /**< IRQ number of the IRQ associated to the device. */ + boolean mode; /**< Timer mode: + * - 0 = Free Run mode (no interrupt generation) + * # timer duration = (65535 + 1) * prescaler * peripheral clock (PCLK) period + * - 1 = Periodic mode (interrupt generation) + * # timer duration = (load + 1) * prescaler * peripheral clock (PCLK) period */ + uint8_t prescale; /**< Timer prescaler: from 1 to 1024. + * - CLK_DIVIDER_1 = clock not divided + * - CLK_DIVIDER_2 = clock is divided by 2 + * - CLK_DIVIDER_8 = clock is divided by 8 + * - CLK_DIVIDER_16 = clock is divided by 16 + * - CLK_DIVIDER_32 = clock is divided by 32 + * - CLK_DIVIDER_128 = clock is divided by 128 + * - CLK_DIVIDER_256 = clock is divided by 256 + * - CLK_DIVIDER_1024 = clock is divided by 1024 */ + uint16_t load; /**< Timer load: from 0 to 65535. */ timer_irq_handlers_t handler; /**< Timer handler or call-back */ } timer_options_t, *timer_options_pt; diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/timer_map.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/timer_map.h index 28e172c2634..86fc51af46e 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/timer_map.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/timer_map.h @@ -53,16 +53,16 @@ typedef struct { __I uint32_t VALUE; /**< 16bit current counter value */ union { struct { - __IO uint32_t PAD0 :2; /**< Always reads 0 */ - __IO uint32_t PRESCALE :3; /**< 0:no division, 1..7: divide by 16, 256, 2, 8, 32, 128, 1024*/ - __IO uint32_t PAD1 :1; /**< Always reads 0 */ - __IO uint32_t MODE :1; /**< 0:free-run, 1:periodic */ - __IO uint32_t ENABLE :1; /**< 0: disable, 1:enable */ - __I uint32_t INT :1; /**< interrupt status */ + __IO uint32_t PAD0 :2; /**< Always reads 0 */ + __IO uint32_t PRESCALE :3; /**< 0:no division, 1..7: divide by 16, 256, 2, 8, 32, 128, 1024*/ + __IO uint32_t PAD1 :1; /**< Always reads 0 */ + __IO uint32_t MODE :1; /**< 0:free-run, 1:periodic */ + __IO uint32_t ENABLE :1; /**< 0: disable, 1:enable */ + __I uint32_t INT :1; /**< interrupt status */ } BITS; __IO uint32_t WORD; } CONTROL; - __O uint32_t CLEAR; /**< Write any value to clear the interrupt */ + __O uint32_t CLEAR; /**< Write any value to clear the interrupt */ } TimerReg_t, *TimerReg_pt; #ifdef __cplusplus diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/trim_map.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/trim_map.h index 560198916c3..1d8596c158e 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/trim_map.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/trim_map.h @@ -50,20 +50,20 @@ **************************************************************************************************/ /** trim register map */ -typedef struct { /**< REV B REV D */ - __I uint32_t PAD0; /**< 0x1FA0 0x1FA0 */ - __I uint32_t APP_RESERVED0; /**< 0x1FA4 0x1FA4 */ - __I uint32_t APP_RESERVED1; /**< 0x1FA8 0x1FA8 */ +typedef struct { /**< REV B REV D */ + __I uint32_t PAD0; /**< 0x1FA0 0x1FA0 */ + __I uint32_t APP_RESERVED0; /**< 0x1FA4 0x1FA4 */ + __I uint32_t APP_RESERVED1; /**< 0x1FA8 0x1FA8 */ #ifdef REVB - __I uint32_t TX_POWER; /**< 0x1FAC */ + __I uint32_t TX_POWER; /**< 0x1FAC */ #endif - __I uint32_t TRIM_32K_EXT; /**< 0x1FB0 0x1FAC */ - __I uint32_t TRIM_32M_EXT; /**< 0x1FB4 0x1FB0 */ + __I uint32_t TRIM_32K_EXT; /**< 0x1FB0 0x1FAC */ + __I uint32_t TRIM_32M_EXT; /**< 0x1FB4 0x1FB0 */ #ifdef REVD - __I uint32_t FVVDH_COMP_TH; /**< 0x1FB4 */ + __I uint32_t FVVDH_COMP_TH; /**< 0x1FB4 */ #endif union { - struct { /* Common to REV B & REV D */ + struct { /* Common to REV B & REV D */ __I uint32_t CHANNEL11:4; __I uint32_t CHANNEL12:4; __I uint32_t CHANNEL13:4; @@ -74,7 +74,7 @@ typedef struct { /**< REV B REV D */ __I uint32_t CHANNEL18:4; } BITS; __I uint32_t WORD; - } TX_VCO_LUT1; /**< 0x1FB8 */ + } TX_VCO_LUT1; /**< 0x1FB8 */ union { struct { __I uint32_t CHANNEL19:4; @@ -87,7 +87,7 @@ typedef struct { /**< REV B REV D */ __I uint32_t CHANNEL26:4; } BITS; __I uint32_t WORD; - } TX_VCO_LUT2; /**< 0x1FBC */ + } TX_VCO_LUT2; /**< 0x1FBC */ union { struct { __I uint32_t CHANNEL11:4; @@ -100,7 +100,7 @@ typedef struct { /**< REV B REV D */ __I uint32_t CHANNEL18:4; } BITS; __I uint32_t WORD; - } RX_VCO_LUT1; /**< 0x1FC0 */ + } RX_VCO_LUT1; /**< 0x1FC0 */ union { struct { __I uint32_t CHANNEL19:4; @@ -113,21 +113,21 @@ typedef struct { /**< REV B REV D */ __I uint32_t CHANNEL26:4; } BITS; __I uint32_t WORD; - } RX_VCO_LUT2; /**< 0x1FC4 */ - __I uint32_t ON_RESERVED0; /**< 0x1FC8 */ - __I uint32_t ON_RESERVED1; /**< 0x1FCC */ - __I uint32_t ADC_OFFSET_TRIM; /**< 0x1FD0 */ - __I uint32_t TX_PRE_CHIPS; /**< 0x1FD4 */ - __I uint32_t TX_CHAIN_TRIM; /**< 0x1FD8 */ - __I uint32_t PLL_VCO_TAP_LOCATION; /**< 0x1FDC */ - __I uint32_t PLL_TRIM; /**< 0x1FE0 */ - __I uint32_t RSSI_OFFSET; /**< 0x1FE4 */ - __I uint32_t RX_CHAIN_TRIM; /**< 0x1FE8 */ - __I uint32_t PMU_TRIM; /**< 0x1FEC */ - __I uint32_t WR_SEED_RD_RAND; /**< 0x1FF0 */ - __I uint32_t WAFER_LOCATION; /**< 0x1FF4 */ - __I uint32_t LOT_NUMBER; /**< 0x1FF8 */ - __I uint32_t REVISION_CODE; /**< 0x1FFC */ + } RX_VCO_LUT2; /**< 0x1FC4 */ + __I uint32_t ON_RESERVED0; /**< 0x1FC8 */ + __I uint32_t ON_RESERVED1; /**< 0x1FCC */ + __I uint32_t ADC_OFFSET_TRIM; /**< 0x1FD0 */ + __I uint32_t TX_PRE_CHIPS; /**< 0x1FD4 */ + __I uint32_t TX_CHAIN_TRIM; /**< 0x1FD8 */ + __I uint32_t PLL_VCO_TAP_LOCATION; /**< 0x1FDC */ + __I uint32_t PLL_TRIM; /**< 0x1FE0 */ + __I uint32_t RSSI_OFFSET; /**< 0x1FE4 */ + __I uint32_t RX_CHAIN_TRIM; /**< 0x1FE8 */ + __I uint32_t PMU_TRIM; /**< 0x1FEC */ + __I uint32_t WR_SEED_RD_RAND; /**< 0x1FF0 */ + __I uint32_t WAFER_LOCATION; /**< 0x1FF4 */ + __I uint32_t LOT_NUMBER; /**< 0x1FF8 */ + __I uint32_t REVISION_CODE; /**< 0x1FFC */ } TrimReg_t, *TrimReg_pt; #endif /* TRIM_MAP_H_ */ diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/types.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/types.h index 88153af0807..d0e7757d9a2 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/types.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/types.h @@ -35,17 +35,17 @@ #include #include -typedef unsigned char BYTE; -typedef unsigned short WORD; -typedef unsigned long DWORD; -typedef unsigned long long QWORD; +typedef unsigned char BYTE; +typedef unsigned short WORD; +typedef unsigned long DWORD; +typedef unsigned long long QWORD; typedef unsigned char boolean; -#define True (1) -#define False (0) +#define True (1) +#define False (0) -#define Null NULL +#define Null NULL #endif /* _UTIL_TYPES_H_ */ diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/uart_16c550.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/uart_16c550.h index dcba674cdd7..6329156ccea 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/uart_16c550.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/uart_16c550.h @@ -59,45 +59,45 @@ typedef struct uart_16c550_options { uint8_t irq; /**< The IRQ number of the IRQ associated to the device. */ } uart_16c550_options_t, *uart_16c550_options_pt; -#define UART_NUM 2 +#define UART_NUM 2 -#define CTS_ASSERT 1 -#define CTS_UNASSERT 0 -#define RTS_ASSERT 1 -#define RTS_UNASSERT 0 +#define CTS_ASSERT 1 +#define CTS_UNASSERT 0 +#define RTS_ASSERT 1 +#define RTS_UNASSERT 0 -#define UART_ERROR_INSUFFICIENT_SPACE ((uint8_t)0xF0) +#define UART_ERROR_INSUFFICIENT_SPACE ((uint8_t)0xF0) #define UART_ERROR_TOO_BIG ((uint8_t)0xF1) /** The depth of the hardware FIFOs. */ -#define UART_HW_FIFO_DEPTH 16 +#define UART_HW_FIFO_DEPTH 16 /** The length of the receive buffer in software. */ -#define UART_RX_BUFFER_LENGTH (1<<8) -#define UART_TX_BUFFER_LENGTH (1<<8) +#define UART_RX_BUFFER_LENGTH (1<<8) +#define UART_TX_BUFFER_LENGTH (1<<8) -#define STATUS_INVALID_PARAMETER 0x1 -#define STATUS_SUCCESS 0x1 +#define STATUS_INVALID_PARAMETER 0x1 +#define STATUS_SUCCESS 0x1 -#define UART_LCR_DATALEN_BIT_POS 0 -#define UART_LCR_STPBIT_BIT_POS 2 -#define UART_LCR_PARITY_BIT_POS 3 +#define UART_LCR_DATALEN_BIT_POS 0 +#define UART_LCR_STPBIT_BIT_POS 2 +#define UART_LCR_PARITY_BIT_POS 3 #define UART_FCS_RX_FIFO_RST_BIT_POS 1 #define UART_FCS_TX_FIFO_RST_BIT_POS 2 -#define UART_RX_IRQ 0x0 -#define UART_TX_IRQ 0x1 +#define UART_RX_IRQ 0x0 +#define UART_TX_IRQ 0x1 -#define UART_RX_BUFFER_LEN_MAX 16 +#define UART_RX_BUFFER_LEN_MAX 16 -#define UART_LSR_TX_EMPTY_MASK 0x40 -#define UART_LSR_RX_DATA_READY_MASK 0x01 +#define UART_LSR_TX_EMPTY_MASK 0x40 +#define UART_LSR_RX_DATA_READY_MASK 0x01 -#define UART_IER_TX_EMPTY_MASK 0x02 -#define UART_IER_RX_DATA_READY_MASK 0x01 +#define UART_IER_TX_EMPTY_MASK 0x02 +#define UART_IER_RX_DATA_READY_MASK 0x01 -#define UART_DEFAULT_BAUD 9600 +#define UART_DEFAULT_BAUD 9600 /** Interrupt handler for 16C550 UART devices; to be called from an actual ISR. * @param membase The memory base for the device that corresponds to the IRQ. diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/uart_16c550_map.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/uart_16c550_map.h index b26e37d8faf..b33ca489fd9 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/uart_16c550_map.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/uart_16c550_map.h @@ -47,8 +47,8 @@ #define DDSR (uint8_t)0x02 #define TERI (uint8_t)0x04 #define DDCD (uint8_t)0x08 -//#define CTS (uint8_t)0x10 -#define DSR (uint8_t)0x20 +//#define CTS (uint8_t)0x10 +#define DSR (uint8_t)0x20 #define RI (uint8_t)0x40 #define DCD (uint8_t)0x80 #define IER_PWRDNENACTIVE ((uint8_t)(1<<5)) diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/wdt_map.h b/targets/TARGET_ONSEMI/TARGET_NCS36510/wdt_map.h index 8b07f3adb48..fd63cc82204 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/wdt_map.h +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/wdt_map.h @@ -137,25 +137,25 @@ typedef struct { #ifdef REVD typedef struct { - __IO uint32_t LOAD; /**< 0x4000A000 Contains the value from which the counter is decremented. When this register is written to the count is immediately restarted from the new value. The minimum valid value is 1. */ + __IO uint32_t LOAD; /**< 0x4000A000 Contains the value from which the counter is decremented. When this register is written to the count is immediately restarted from the new value. The minimum valid value is 1. */ __I uint32_t CURRENT_VALUE; /**< 0x4000A004 Gives the current value of the decrementing counter */ union { struct { - __IO uint32_t WDT_EN :1; /**< Watchdog enable, 0 Watchdog disabled, 1 Watchdog enabled */ + __IO uint32_t WDT_EN :1; /**< Watchdog enable, 0 Watchdog disabled, 1 Watchdog enabled */ } BITS; __IO uint32_t WORD; - } CONTROL; /* 0x4000A008 */ - __O uint32_t KICK; /**< 0x4000A00C A write of any value to this register reloads the value register from the load register */ - __O uint32_t LOCK; /**< 0x4000A010 Use of this register causes write-access to all other registers to be disabled. This is to prevent rogue software from disabling the watchdog functionality. Writing a value of 0x1ACCE551 enables write access to all other registers. Writing any other value disables write access. A read from this register only returns the bottom bit, 0 Write access is enabled, 1 Write access is disabled */ + } CONTROL; /* 0x4000A008 */ + __O uint32_t KICK; /**< 0x4000A00C A write of any value to this register reloads the value register from the load register */ + __O uint32_t LOCK; /**< 0x4000A010 Use of this register causes write-access to all other registers to be disabled. This is to prevent rogue software from disabling the watchdog functionality. Writing a value of 0x1ACCE551 enables write access to all other registers. Writing any other value disables write access. A read from this register only returns the bottom bit, 0 Write access is enabled, 1 Write access is disabled */ union { struct { - __I uint32_t WRITE_BUSY_ANY :1; /**< Busy writing any register */ - __I uint32_t WRITE_BUSY_LOAD :1; /**< Busy writing the load register */ + __I uint32_t WRITE_BUSY_ANY :1; /**< Busy writing any register */ + __I uint32_t WRITE_BUSY_LOAD :1; /**< Busy writing the load register */ __I uint32_t WRITE_BUSY_CONTROL :1; /**< Busy writing the control enable register */ - __IO uint32_t WRITE_ERROR :1; /**< Error bit. Set when write occurs before previous write completes (busy) */ + __IO uint32_t WRITE_ERROR :1; /**< Error bit. Set when write occurs before previous write completes (busy) */ } BITS; __IO uint32_t WORD; - } STATUS; /* 0x4000A014 */ + } STATUS; /* 0x4000A014 */ } WdtReg_t, *WdtReg_pt; #endif /* REVD */ #endif /* WDT_MAP_H_ */ diff --git a/targets/targets.json b/targets/targets.json index 0e92aebb436..1869cf92755 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -2020,7 +2020,7 @@ "post_binary_hook": {"function": "NCS36510TargetCode.ncs36510_addfib"}, "macros": ["REVD", "CM3", "CPU_NCS36510", "TARGET_NCS36510"], "supported_toolchains": ["GCC_ARM", "ARM", "IAR"], - "device_has": ["ANALOGIN", "SERIAL", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI"], + "device_has": ["ANALOGIN", "SERIAL", "I2C", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "LOWPOWERTIMER"], "release_versions": ["2", "5"] }, "NUMAKER_PFM_M453": { From acd91ec0982c7b26d7acd58f9dc4e6e8d041068e Mon Sep 17 00:00:00 2001 From: pradeep-gr Date: Wed, 12 Oct 2016 19:09:57 +0530 Subject: [PATCH 57/89] Low power timer fine tuned for smaller duration --- targets/TARGET_ONSEMI/TARGET_NCS36510/rtc.c | 27 +++++++++++---------- 1 file changed, 14 insertions(+), 13 deletions(-) diff --git a/targets/TARGET_ONSEMI/TARGET_NCS36510/rtc.c b/targets/TARGET_ONSEMI/TARGET_NCS36510/rtc.c index 02b61de6286..a3e35b0b681 100644 --- a/targets/TARGET_ONSEMI/TARGET_NCS36510/rtc.c +++ b/targets/TARGET_ONSEMI/TARGET_NCS36510/rtc.c @@ -79,7 +79,7 @@ void fRtcInit(void) NVIC_ClearPendingIRQ(Rtc_IRQn); NVIC_EnableIRQ(Rtc_IRQn); - while(RTCREG->STATUS.BITS.BSY_ANY_WRT == True); /* Wait for RTC to finish writing register - RTC operates on 32K clock as compared to 32M core*/ + while(RTCREG->STATUS.BITS.BSY_CTRL_REG_WRT == True); /* Wait for RTC to finish writing register - RTC operates on 32K clock as compared to 32M core*/ return; } @@ -93,14 +93,14 @@ void fRtcFree(void) /* disable interruption associated with the rtc */ NVIC_DisableIRQ(Rtc_IRQn); - while(RTCREG->STATUS.BITS.BSY_ANY_WRT == True); /* Wait for RTC to finish writing register - RTC operates on 32K clock as compared to 32M core*/ + while(RTCREG->STATUS.BITS.BSY_CTRL_REG_WRT == True); /* Wait for RTC to finish writing register - RTC operates on 32K clock as compared to 32M core*/ } /* See rtc.h for details */ void fRtcSetInterrupt(uint32_t timestamp) { - SubSecond = False; - uint32_t Second = False; + SubSecond = False; + uint32_t Second = False; uint8_t DividerAdjust = 1; if(timestamp) { @@ -137,6 +137,7 @@ void fRtcSetInterrupt(uint32_t timestamp) RTCREG->SUB_SECOND_ALARM = SubSecond; /* Write to sub second alarm */ /* Enable sub second interrupt */ + while(RTCREG->STATUS.BITS.BSY_CTRL_REG_WRT == True); RTCREG->CONTROL.WORD |= (True << RTC_CONTROL_SUBSEC_CNT_INT_BIT_POS); } } @@ -151,7 +152,7 @@ void fRtcDisableInterrupt(void) { /* Disable subsec/sec interrupt */ RTCREG->CONTROL.WORD &= ~((RTC_ALL_INTERRUPT_BIT_VAL) << RTC_CONTROL_SUBSEC_CNT_INT_BIT_POS); - while(RTCREG->STATUS.BITS.BSY_ANY_WRT == True); /* Wait for RTC to finish writing register - RTC operates on 32K clock as compared to 32M core*/ + while(RTCREG->STATUS.BITS.BSY_CTRL_REG_WRT == True); /* Wait for RTC to finish writing register - RTC operates on 32K clock as compared to 32M core*/ } /* See rtc.h for details */ @@ -159,7 +160,7 @@ void fRtcEnableInterrupt(void) { /* Disable subsec/sec interrupt */ RTCREG->CONTROL.WORD |= ((RTC_ALL_INTERRUPT_BIT_VAL) << RTC_CONTROL_SUBSEC_CNT_INT_BIT_POS); - while(RTCREG->STATUS.BITS.BSY_ANY_WRT == True); /* Wait for RTC to finish writing register - RTC operates on 32K clock as compared to 32M core*/ + while(RTCREG->STATUS.BITS.BSY_CTRL_REG_WRT == True); /* Wait for RTC to finish writing register - RTC operates on 32K clock as compared to 32M core*/ } /* See rtc.h for details */ @@ -237,40 +238,40 @@ void fRtcWrite(uint64_t RtcTimeus) /* See rtc.h for details */ void fRtcHandler(void) { - while(RTCREG->STATUS.BITS.BSY_ANY_WRT == True); /* Wait for RTC to finish writing register - RTC operates on 32K clock as compared to 32M core*/ /* SUB_SECOND/SECOND interrupt occured */ volatile uint32_t TempStatus = RTCREG->STATUS.WORD; - /* disable all interrupts */ - RTCREG->CONTROL.WORD &= ~((RTC_ALL_INTERRUPT_BIT_VAL) << RTC_CONTROL_SUBSEC_CNT_INT_BIT_POS); + /* Disable RTC interrupt */ + NVIC_DisableIRQ(Rtc_IRQn); /* Clear sec & sub_sec interrupts */ RTCREG->INT_CLEAR.WORD = ((True << RTC_INT_CLR_SUB_SEC_BIT_POS) | (True << RTC_INT_CLR_SEC_BIT_POS)); - /* TODO ANDing SUB_SEC & SEC interrupt - work around for RTC issue - will be solved in REV G */ + /* TODO ANDing SUB_SEC & SEC interrupt - work around for RTC issue - will be resolved in REV G */ if(TempStatus & RTC_SEC_INT_STATUS_MASK) { /* Second interrupt occured */ if(SubSecond > False) { /* Set SUB SEC_ALARM */ RTCREG->SUB_SECOND_ALARM = SubSecond + RTCREG->SUB_SECOND_COUNTER; /* Enable sub second interrupt */ - while(RTCREG->STATUS.BITS.BSY_CTRL_REG_WRT == True); RTCREG->CONTROL.WORD |= (True << RTC_CONTROL_SUBSEC_CNT_INT_BIT_POS); } else { /* We reach here after second interrupt is occured */ - while(RTCREG->STATUS.BITS.BSY_CTRL_REG_WRT == True); RTCREG->CONTROL.WORD &= ~(True << RTC_CONTROL_SUBSEC_CNT_INT_BIT_POS) | (True << RTC_CONTROL_SEC_CNT_INT_BIT_POS); } } else { /* We reach here after sub_second or (Sub second + second) interrupt occured */ - while(RTCREG->STATUS.BITS.BSY_CTRL_REG_WRT == True); /* Disable Second and sub_second interrupt */ RTCREG->CONTROL.WORD &= ~(True << RTC_CONTROL_SUBSEC_CNT_INT_BIT_POS) | (True << RTC_CONTROL_SEC_CNT_INT_BIT_POS); } + NVIC_EnableIRQ(Rtc_IRQn); + + while(RTCREG->STATUS.BITS.BSY_ANY_WRT == True); /* Wait for RTC to finish writing register - RTC operates on 32K clock as compared to 32M core*/ + lp_ticker_irq_handler(); } From 7711f0a362562b89f0140bbf956e69e3e0649dae Mon Sep 17 00:00:00 2001 From: Alessandro Angelino Date: Fri, 16 Sep 2016 11:51:19 +0100 Subject: [PATCH 58/89] EFM32: Make NVIC functions virtualizable With CMSIS 5, the NVIC functions are virtualizable. Rename the EFM32 NVIC functions to support being virtualized. --- .../TARGET_EFM32/TARGET_EFM32GG_STK3700/device/cmsis_nvic.c | 4 ++-- .../TARGET_EFM32/TARGET_EFM32GG_STK3700/device/cmsis_nvic.h | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFM32GG_STK3700/device/cmsis_nvic.c b/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFM32GG_STK3700/device/cmsis_nvic.c index 1170f85a31f..b238daa7437 100644 --- a/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFM32GG_STK3700/device/cmsis_nvic.c +++ b/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFM32GG_STK3700/device/cmsis_nvic.c @@ -12,7 +12,7 @@ extern uint32_t __start_vector_table__; // Dynamic vector positioning in GCC #define NVIC_RAM_VECTOR_ADDRESS (0x20000000) // Vectors positioned at start of RAM #define NVIC_FLASH_VECTOR_ADDRESS (0x0) // Initial vector position in flash -void NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) { +void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) { uint32_t *vectors = (uint32_t*)SCB->VTOR; uint32_t i; @@ -41,7 +41,7 @@ void NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) { vectors[IRQn + 16] = vector; } -uint32_t NVIC_GetVector(IRQn_Type IRQn) { +uint32_t __NVIC_GetVector(IRQn_Type IRQn) { uint32_t *vectors = (uint32_t*)SCB->VTOR; return vectors[IRQn + 16]; } diff --git a/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFM32GG_STK3700/device/cmsis_nvic.h b/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFM32GG_STK3700/device/cmsis_nvic.h index 999cf80223f..a8cae966d3c 100644 --- a/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFM32GG_STK3700/device/cmsis_nvic.h +++ b/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFM32GG_STK3700/device/cmsis_nvic.h @@ -16,8 +16,8 @@ extern "C" { #endif -void NVIC_SetVector(IRQn_Type IRQn, uint32_t vector); -uint32_t NVIC_GetVector(IRQn_Type IRQn); +void __NVIC_SetVector(IRQn_Type IRQn, uint32_t vector); +uint32_t __NVIC_GetVector(IRQn_Type IRQn); #ifdef __cplusplus } From ab1ed711ae7af8469ed41ffc85eb1a84ae6c645a Mon Sep 17 00:00:00 2001 From: Alessandro Angelino Date: Fri, 16 Sep 2016 11:51:19 +0100 Subject: [PATCH 59/89] EFM32: Use SECURE_ACCESS to access the ROM table To allow enabling of uVisor on EFM32, the ROM table must be accessed through the CMSIS-provided SECURE_ACCESS macro. --- .../TARGET_EFM32/emlib/src/em_system.c | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/targets/TARGET_Silicon_Labs/TARGET_EFM32/emlib/src/em_system.c b/targets/TARGET_Silicon_Labs/TARGET_EFM32/emlib/src/em_system.c index 661c384f4b8..d48273905ad 100644 --- a/targets/TARGET_Silicon_Labs/TARGET_EFM32/emlib/src/em_system.c +++ b/targets/TARGET_Silicon_Labs/TARGET_EFM32/emlib/src/em_system.c @@ -32,6 +32,7 @@ #include "em_system.h" #include "em_assert.h" +#include "core_cmSecureAccess.h" /***************************************************************************//** * @addtogroup EM_Library @@ -61,19 +62,24 @@ void SYSTEM_ChipRevisionGet(SYSTEM_ChipRevision_TypeDef *rev) EFM_ASSERT(rev); + uint32_t pid0 = SECURE_READ(&(ROMTABLE->PID0)); + uint32_t pid1 = SECURE_READ(&(ROMTABLE->PID1)); + uint32_t pid2 = SECURE_READ(&(ROMTABLE->PID2)); + uint32_t pid3 = SECURE_READ(&(ROMTABLE->PID3)); + /* CHIP FAMILY bit [5:2] */ - tmp = (((ROMTABLE->PID1 & _ROMTABLE_PID1_FAMILYMSB_MASK) >> _ROMTABLE_PID1_FAMILYMSB_SHIFT) << 2); + tmp = (((pid1 & _ROMTABLE_PID1_FAMILYMSB_MASK) >> _ROMTABLE_PID1_FAMILYMSB_SHIFT) << 2); /* CHIP FAMILY bit [1:0] */ - tmp |= ((ROMTABLE->PID0 & _ROMTABLE_PID0_FAMILYLSB_MASK) >> _ROMTABLE_PID0_FAMILYLSB_SHIFT); + tmp |= ((pid0 & _ROMTABLE_PID0_FAMILYLSB_MASK) >> _ROMTABLE_PID0_FAMILYLSB_SHIFT); rev->family = tmp; /* CHIP MAJOR bit [3:0] */ - rev->major = (ROMTABLE->PID0 & _ROMTABLE_PID0_REVMAJOR_MASK) >> _ROMTABLE_PID0_REVMAJOR_SHIFT; + rev->major = (pid0 & _ROMTABLE_PID0_REVMAJOR_MASK) >> _ROMTABLE_PID0_REVMAJOR_SHIFT; /* CHIP MINOR bit [7:4] */ - tmp = (((ROMTABLE->PID2 & _ROMTABLE_PID2_REVMINORMSB_MASK) >> _ROMTABLE_PID2_REVMINORMSB_SHIFT) << 4); + tmp = (((pid2 & _ROMTABLE_PID2_REVMINORMSB_MASK) >> _ROMTABLE_PID2_REVMINORMSB_SHIFT) << 4); /* CHIP MINOR bit [3:0] */ - tmp |= ((ROMTABLE->PID3 & _ROMTABLE_PID3_REVMINORLSB_MASK) >> _ROMTABLE_PID3_REVMINORLSB_SHIFT); + tmp |= ((pid3 & _ROMTABLE_PID3_REVMINORLSB_MASK) >> _ROMTABLE_PID3_REVMINORLSB_SHIFT); rev->minor = tmp; } From d190ec0b7d645210412300a4912703b4d2717c34 Mon Sep 17 00:00:00 2001 From: Alessandro Angelino Date: Fri, 16 Sep 2016 11:51:19 +0100 Subject: [PATCH 60/89] EFM32: Add support for uVisor --- .../device/TOOLCHAIN_GCC_ARM/efm32gg.ld | 141 +++++++++++++++--- .../TOOLCHAIN_GCC_ARM/startup_efm32gg.S | 22 +-- 2 files changed, 124 insertions(+), 39 deletions(-) diff --git a/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFM32GG_STK3700/device/TOOLCHAIN_GCC_ARM/efm32gg.ld b/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFM32GG_STK3700/device/TOOLCHAIN_GCC_ARM/efm32gg.ld index da5b10d6aa3..85b009eeb57 100644 --- a/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFM32GG_STK3700/device/TOOLCHAIN_GCC_ARM/efm32gg.ld +++ b/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFM32GG_STK3700/device/TOOLCHAIN_GCC_ARM/efm32gg.ld @@ -9,6 +9,9 @@ /* Version 4.2.0 */ /* */ +STACK_SIZE = 0x400; +HEAP_SIZE = 0xC00; + MEMORY { FLASH (rx) : ORIGIN = 0x00000000, LENGTH = 1048576 @@ -53,6 +56,11 @@ __vector_size = 0xDC; */ ENTRY(Reset_Handler) +/* Note: The uVisor expects the text section at a fixed location, as specified + by the porting process configuration parameter: FLASH_OFFSET. */ +__UVISOR_TEXT_OFFSET = 0x100; +__UVISOR_TEXT_START = ORIGIN(FLASH) + __UVISOR_TEXT_OFFSET; + SECTIONS { .text : @@ -62,6 +70,13 @@ SECTIONS __Vectors_Size = __Vectors_End - __Vectors; __end__ = .; + /* uVisor code and data */ + . = __UVISOR_TEXT_OFFSET; + . = ALIGN(4); + __uvisor_main_start = .; + *(.uvisor.main) + __uvisor_main_end = .; + *(.text*) KEEP(*(.init)) @@ -132,10 +147,51 @@ SECTIONS } > FLASH */ - __etext = .; + /* Ensure that the uVisor BSS section is put first in SRAM. */ + /* Note: The uVisor expects this section at a fixed location, as specified + by the porting process configuration parameter: SRAM_OFFSET. */ + __UVISOR_SRAM_OFFSET = 0x0; + __UVISOR_BSS_START = ORIGIN(RAM) + __UVISOR_SRAM_OFFSET; + .uvisor.bss __UVISOR_BSS_START (NOLOAD): + { + . = ALIGN(32); + __uvisor_bss_start = .; + + /* uVisor main BSS section */ + . = ALIGN(32); + __uvisor_bss_main_start = .; + KEEP(*(.keep.uvisor.bss.main)) + . = ALIGN(32); + __uvisor_bss_main_end = .; - .data : AT (__etext) + /* Secure boxes BSS section */ + . = ALIGN(32); + __uvisor_bss_boxes_start = .; + KEEP(*(.keep.uvisor.bss.boxes)) + . = ALIGN(32); + __uvisor_bss_boxes_end = .; + + . = ALIGN(32); + __uvisor_bss_end = .; + } > RAM + + /* Heap space for the page allocator */ + .page_heap (NOLOAD) : { + . = ALIGN(32); + __uvisor_page_start = .; + KEEP(*(.keep.uvisor.page_heap)) + + . = ALIGN( (1 << LOG2CEIL(LENGTH(RAM))) / 8); + + __uvisor_page_end = .; + } > RAM + + .data : + { + PROVIDE(__etext = LOADADDR(.data)); /* Define a global symbol at end of code, */ + PROVIDE(__DATA_ROM = LOADADDR(.data)); /* Symbol is used by startup for data initialization. */ + __data_start__ = .; *("dma") PROVIDE( __start_vector_table__ = .); @@ -171,6 +227,51 @@ SECTIONS /* All data end */ __data_end__ = .; + } > RAM AT > FLASH + + /* uVisor configuration section + * This section must be located after all other flash regions. */ + .uvisor.secure : + { + . = ALIGN(32); + __uvisor_secure_start = .; + + /* uVisor secure boxes configuration tables */ + . = ALIGN(32); + __uvisor_cfgtbl_start = .; + KEEP(*(.keep.uvisor.cfgtbl)) + . = ALIGN(32); + __uvisor_cfgtbl_end = .; + + /* Pointers to the uVisor secure boxes configuration tables */ + /* Note: Do not add any further alignment here, as uVisor will need to + have access to the exact list of pointers. */ + __uvisor_cfgtbl_ptr_start = .; + KEEP(*(.keep.uvisor.cfgtbl_ptr_first)) + KEEP(*(.keep.uvisor.cfgtbl_ptr)) + __uvisor_cfgtbl_ptr_end = .; + + /* Pointers to all boxes register gateways. These are grouped here to + allow discoverability and firmware verification. */ + __uvisor_register_gateway_ptr_start = .; + KEEP(*(.keep.uvisor.register_gateway_ptr)) + __uvisor_register_gateway_ptr_end = .; + + . = ALIGN(32); + __uvisor_secure_end = .; + } > FLASH + + /* Uninitialized data section + * This region is not initialized by the C/C++ library and can be used to + * store state across soft reboots. */ + .uninitialized (NOLOAD): + { + . = ALIGN(32); + __uninitialized_start = .; + *(.uninitialized) + KEEP(*(.keep.uninitialized)) + . = ALIGN(32); + __uninitialized_end = .; } > RAM .bss : @@ -183,33 +284,29 @@ SECTIONS __bss_end__ = .; } > RAM - .heap (COPY): + __StackTop = ORIGIN(RAM) + LENGTH(RAM); + __stack = __StackTop; + __StackLimit = __StackTop - STACK_SIZE; + + .heap (NOLOAD): { + __uvisor_heap_start = .; __HeapBase = .; __end__ = .; end = __end__; _end = __end__; - KEEP(*(.heap*)) - __HeapLimit = .; + . += HEAP_SIZE; } > RAM - /* .stack_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later */ - .stack_dummy (COPY): - { - KEEP(*(.stack*)) - } > RAM - - /* Set stack top to end of RAM, and stack limit move down by - * size of stack_dummy section */ - __StackTop = ORIGIN(RAM) + LENGTH(RAM); - __StackLimit = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); + __HeapLimit = __StackLimit; + __uvisor_heap_end = __StackLimit; - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed with stack") + /* Provide physical memory boundaries for uVisor. */ + __uvisor_flash_start = ORIGIN(FLASH); + __uvisor_flash_end = ORIGIN(FLASH) + LENGTH(FLASH); + __uvisor_sram_start = ORIGIN(RAM); + __uvisor_sram_end = ORIGIN(RAM) + LENGTH(RAM); - /* Check if FLASH usage exceeds FLASH size */ - ASSERT( LENGTH(FLASH) >= (__etext + SIZEOF(.data)), "FLASH memory overflowed !") + /* Check if FLASH usage exceeds FLASH size. */ + ASSERT(LENGTH(FLASH) >= __uvisor_secure_end, "FLASH memory overflowed!") } diff --git a/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFM32GG_STK3700/device/TOOLCHAIN_GCC_ARM/startup_efm32gg.S b/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFM32GG_STK3700/device/TOOLCHAIN_GCC_ARM/startup_efm32gg.S index 0566657b2e9..2ef61c90261 100644 --- a/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFM32GG_STK3700/device/TOOLCHAIN_GCC_ARM/startup_efm32gg.S +++ b/targets/TARGET_Silicon_Labs/TARGET_EFM32/TARGET_EFM32GG_STK3700/device/TOOLCHAIN_GCC_ARM/startup_efm32gg.S @@ -49,23 +49,6 @@ __StackLimit: __StackTop: .size __StackTop, . - __StackTop - .section .heap - .align 3 -#ifdef __HEAP_SIZE - .equ Heap_Size, __HEAP_SIZE -#else - .equ Heap_Size, 0x00000C00 -#endif - .globl __HeapBase - .globl __HeapLimit -__HeapBase: - .if Heap_Size - .space Heap_Size - .endif - .size __HeapBase, . - __HeapBase -__HeapLimit: - .size __HeapLimit, . - __HeapLimit - .section .vectors .align 2 .globl __Vectors @@ -144,6 +127,11 @@ Reset_Handler: blx r0 #endif +#if defined(FEATURE_UVISOR) && defined(TARGET_UVISOR_SUPPORTED) + ldr r0, =uvisor_init + blx r0 +#endif /* defined(FEATURE_UVISOR) && defined(UVISOR_SUPPORTED) */ + /* Firstly it copies data from read only memory to RAM. There are two schemes * to copy. One can copy more than one sections. Another can only copy * one section. The former scheme needs more instructions and read-only From eb2b7f05f2ef103d3c61970e10aaa96fd26bef67 Mon Sep 17 00:00:00 2001 From: "andreas.larsson" Date: Mon, 10 Oct 2016 15:42:47 +0200 Subject: [PATCH 61/89] Enabled TRNG functionality for UBLOX_EVK_ODIN_W2 target. --- .../TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/objects.h | 4 +++- targets/targets.json | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/objects.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/objects.h index 12cac5d31f2..d92fa159012 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/objects.h +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/objects.h @@ -60,7 +60,9 @@ struct analogin_s { uint8_t channel; }; - +struct trng_s { + RNG_HandleTypeDef handle; +}; #include "common_objects.h" struct can_s { diff --git a/targets/targets.json b/targets/targets.json index 1869cf92755..a420d772925 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -1183,10 +1183,10 @@ "core": "Cortex-M4F", "default_toolchain": "ARM", "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "IAR"], - "extra_labels": ["STM", "STM32F4", "STM32F439", "STM32F439ZI"], + "extra_labels": ["STM", "STM32F4", "STM32F439", "STM32F439ZI","STM32F439xx"], "macros": ["HSE_VALUE=24000000", "HSE_STARTUP_TIMEOUT=5000", "CB_INTERFACE_SDIO","CB_CHIP_WL18XX","SUPPORT_80211D_ALWAYS","WLAN_ENABLED"], "inherits": ["Target"], - "device_has": ["ANALOGIN", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "TRNG"], "features": ["LWIP"], "release_versions": ["5"], "device_name": "STM32F439ZI" From e965c34e66372fae74579bed6d313a7dd6ba9186 Mon Sep 17 00:00:00 2001 From: "andreas.larsson" Date: Mon, 10 Oct 2016 18:55:46 +0200 Subject: [PATCH 62/89] Fixed wrong stack pointer --- .../device/TOOLCHAIN_ARM_STD/startup_stm32f439xx.S | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/device/TOOLCHAIN_ARM_STD/startup_stm32f439xx.S b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/device/TOOLCHAIN_ARM_STD/startup_stm32f439xx.S index 75bc33a56cf..2a04a2f6f01 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/device/TOOLCHAIN_ARM_STD/startup_stm32f439xx.S +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/device/TOOLCHAIN_ARM_STD/startup_stm32f439xx.S @@ -39,7 +39,7 @@ ; ;******************************************************************************* -__initial_sp EQU 0x20020000 ; Top of RAM +__initial_sp EQU 0x20030000 ; Top of RAM PRESERVE8 THUMB From 857786e303a63637a543dde8a124c53d7f93d55c Mon Sep 17 00:00:00 2001 From: Wolfgang Betz Date: Mon, 10 Oct 2016 11:54:33 +0200 Subject: [PATCH 63/89] I2C bugfix 'i2c_stop()' timeout - Remove waiting for 'BTF' flag in 'i2c_stop()': When 'i2c_stop()' is called from 'i2c_read()' or 'i2c_write()' flag 'BTF' has already been cleared (indirectly) by the calling functions and therefore 'i2c_stop()' would mistakenly always run into a timeout. - Delay clock enabling until pins are configured: Enabling the I2C bus clock before configuring its pins might in rare cases lead to HW faults on the bus. - Move initialization of 'handle->Instance' to function 'i2c_reset()': As 'i2c_reset()' uses '__HAL_I2C_GET_FLAG(handle, I2C_FLAG_BUSY)' field 'handle->Instance' must have been initialized before doing so. Therefore, this operation has been anticipated by moving it from function 'i2c_frequency()' to function 'i2c_reset()'. --- targets/TARGET_STM/TARGET_STM32F4/i2c_api.c | 27 ++++++--------------- 1 file changed, 7 insertions(+), 20 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32F4/i2c_api.c b/targets/TARGET_STM/TARGET_STM32F4/i2c_api.c index dc5f6cc4d50..90e1c5f5994 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/i2c_api.c +++ b/targets/TARGET_STM/TARGET_STM32F4/i2c_api.c @@ -68,7 +68,6 @@ void i2c_init(i2c_t *obj, PinName sda, PinName scl) { // Enable I2C1 clock and pinout if not done if ((obj_s->i2c == I2C_1) && !i2c1_inited) { i2c1_inited = 1; - __I2C1_CLK_ENABLE(); // Configure I2C pins pinmap_pinout(sda, PinMap_I2C_SDA); pinmap_pinout(scl, PinMap_I2C_SCL); @@ -78,11 +77,11 @@ void i2c_init(i2c_t *obj, PinName sda, PinName scl) { obj_s->event_i2cIRQ = I2C1_EV_IRQn; obj_s->error_i2cIRQ = I2C1_ER_IRQn; #endif + __I2C1_CLK_ENABLE(); } // Enable I2C2 clock and pinout if not done if ((obj_s->i2c == I2C_2) && !i2c2_inited) { i2c2_inited = 1; - __I2C2_CLK_ENABLE(); // Configure I2C pins pinmap_pinout(sda, PinMap_I2C_SDA); pinmap_pinout(scl, PinMap_I2C_SCL); @@ -92,12 +91,12 @@ void i2c_init(i2c_t *obj, PinName sda, PinName scl) { obj_s->event_i2cIRQ = I2C2_EV_IRQn; obj_s->error_i2cIRQ = I2C2_ER_IRQn; #endif + __I2C2_CLK_ENABLE(); } #if defined I2C3_BASE // Enable I2C3 clock and pinout if not done if ((obj_s->i2c == I2C_3) && !i2c3_inited) { i2c3_inited = 1; - __I2C3_CLK_ENABLE(); // Configure I2C pins pinmap_pinout(sda, PinMap_I2C_SDA); pinmap_pinout(scl, PinMap_I2C_SCL); @@ -107,6 +106,7 @@ void i2c_init(i2c_t *obj, PinName sda, PinName scl) { obj_s->event_i2cIRQ = I2C3_EV_IRQn; obj_s->error_i2cIRQ = I2C3_ER_IRQn; #endif + __I2C3_CLK_ENABLE(); } #endif @@ -114,7 +114,6 @@ void i2c_init(i2c_t *obj, PinName sda, PinName scl) { // Enable I2C3 clock and pinout if not done if ((obj_s->i2c == FMPI2C_1) && !fmpi2c1_inited) { fmpi2c1_inited = 1; - __HAL_RCC_FMPI2C1_CLK_ENABLE(); // Configure I2C pins pinmap_pinout(sda, PinMap_I2C_SDA); pinmap_pinout(scl, PinMap_I2C_SCL); @@ -124,6 +123,7 @@ void i2c_init(i2c_t *obj, PinName sda, PinName scl) { obj_s->event_i2cIRQ = FMPI2C1_EV_IRQn; obj_s->error_i2cIRQ = FMPI2C1_ER_IRQn; #endif + __HAL_RCC_FMPI2C1_CLK_ENABLE(); } #endif @@ -151,8 +151,6 @@ void i2c_frequency(i2c_t *obj, int hz) struct i2c_s *obj_s = I2C_S(obj); I2C_HandleTypeDef *handle = &(obj_s->handle); - handle->Instance = (I2C_TypeDef *)(obj_s->i2c); - MBED_ASSERT((hz > 0) && (hz <= 400000)); // wait before init @@ -212,20 +210,8 @@ inline int i2c_start(i2c_t *obj) { } inline int i2c_stop(i2c_t *obj) { - - int timeout; struct i2c_s *obj_s = I2C_S(obj); I2C_TypeDef *i2c = (I2C_TypeDef *)obj_s->i2c; - I2C_HandleTypeDef *handle = &(obj_s->handle); - - //Wait Byte transfer finished before sending stop - timeout = FLAG_TIMEOUT; - while (__HAL_I2C_GET_FLAG(handle, I2C_FLAG_BTF) == RESET) { - timeout--; - if (timeout == 0) { - return 0; - } - } // Generate the STOP condition i2c->CR1 |= I2C_CR1_STOP; @@ -361,7 +347,7 @@ int i2c_byte_write(i2c_t *obj, int data) { handle->Instance->DR = (uint8_t)data; - // Wait until the byte (might be the adress) is transmitted + // Wait until the byte (might be the address) is transmitted timeout = FLAG_TIMEOUT; while ((__HAL_I2C_GET_FLAG(handle, I2C_FLAG_TXE) == RESET) && (__HAL_I2C_GET_FLAG(handle, I2C_FLAG_BTF) == RESET) && @@ -385,6 +371,8 @@ void i2c_reset(i2c_t *obj) { struct i2c_s *obj_s = I2C_S(obj); I2C_HandleTypeDef *handle = &(obj_s->handle); + handle->Instance = (I2C_TypeDef *)(obj_s->i2c); + // wait before reset timeout = LONG_TIMEOUT; while ((__HAL_I2C_GET_FLAG(handle, I2C_FLAG_BUSY)) && (timeout-- != 0)); @@ -570,7 +558,6 @@ int i2c_slave_write(i2c_t *obj, const char *data, int length) { } } - /* Clear AF flag */ __HAL_I2C_CLEAR_FLAG(handle, I2C_FLAG_AF); From b2671a367cbf5e5a281a66d8cc40d0495096134e Mon Sep 17 00:00:00 2001 From: Bartek Szatkowski Date: Tue, 11 Oct 2016 13:30:20 -0500 Subject: [PATCH 64/89] Accept profile name as well as file path for tools/make.py --profile --profile can be used with just a profile name eg. default, debug as long as .json file is in default profile directory. --- tools/options.py | 13 +++++++++++-- tools/utils.py | 15 ++++++++++++++- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/tools/options.py b/tools/options.py index 0c3b016d95e..8ffab53bc91 100644 --- a/tools/options.py +++ b/tools/options.py @@ -16,12 +16,13 @@ """ from json import load from os.path import join, dirname +from os import listdir from argparse import ArgumentParser from tools.toolchains import TOOLCHAINS from tools.targets import TARGET_NAMES from tools.utils import argparse_force_uppercase_type, \ argparse_lowercase_hyphen_type, argparse_many, \ - argparse_filestring_type, args_error + argparse_filestring_type, args_error, argparse_profile_filestring_type def get_default_options_parser(add_clean=True, add_options=True, add_app_config=False): @@ -73,7 +74,9 @@ def get_default_options_parser(add_clean=True, add_options=True, if add_options: parser.add_argument("--profile", dest="profile", action="append", - type=argparse_filestring_type, + type=argparse_profile_filestring_type, + help="Build profile to use. Can be either path to json" \ + "file or one of the default one ({})".format(", ".join(list_profiles())), default=[]) if add_app_config: parser.add_argument("--app-config", default=None, dest="app_config", @@ -82,6 +85,12 @@ def get_default_options_parser(add_clean=True, add_options=True, return parser +def list_profiles(): + """Lists available build profiles + + Checks default profile directory (mbed-os/tools/profiles/) for all the json files and return list of names only + """ + return [fn.replace(".json", "") for fn in listdir(join(dirname(__file__), "profiles")) if fn.endswith(".json")] def extract_profile(parser, options, toolchain): """Extract a Toolchain profile from parsed options diff --git a/tools/utils.py b/tools/utils.py index 9ad74de63dd..734dfae0e07 100644 --- a/tools/utils.py +++ b/tools/utils.py @@ -22,7 +22,7 @@ from os import listdir, remove, makedirs from shutil import copyfile from os.path import isdir, join, exists, split, relpath, splitext, abspath -from os.path import commonprefix, normpath +from os.path import commonprefix, normpath, dirname from subprocess import Popen, PIPE, STDOUT, call import json from collections import OrderedDict @@ -435,6 +435,19 @@ def argparse_filestring_type(string): raise argparse.ArgumentTypeError( "{0}"" does not exist in the filesystem.".format(string)) +def argparse_profile_filestring_type(string): + """ An argument parser that verifies that a string passed in is either + absolute path or a file name (expanded to + mbed-os/tools/profiles/.json) of a existing file""" + fpath = join(dirname(__file__), "profiles/{}.json".format(string)) + if exists(string): + return string + elif exists(fpath): + return fpath + else: + raise argparse.ArgumentTypeError( + "{0} does not exist in the filesystem.".format(string)) + def columnate(strings, separator=", ", chars=80): """ render a list of strings as a in a bunch of columns From ac93f9e41fabebbf89c3920793d377a702fc56f0 Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Wed, 12 Oct 2016 15:33:40 +0200 Subject: [PATCH 65/89] Add Arduino form factor for DISCO_F746NG and NUCLEO_F767ZI --- targets/targets.json | 2 ++ 1 file changed, 2 insertions(+) diff --git a/targets/targets.json b/targets/targets.json index a420d772925..d4108cea399 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -866,6 +866,7 @@ "extra_labels": ["STM", "STM32F7", "STM32F767", "STM32F767ZI"], "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "IAR"], "default_toolchain": "ARM", + "supported_form_factors": ["ARDUINO"], "detect_code": ["0818"], "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "TRNG"], "features": ["LWIP"], @@ -1075,6 +1076,7 @@ "extra_labels": ["STM", "STM32F7", "STM32F746", "STM32F746NG"], "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "IAR"], "default_toolchain": "ARM", + "supported_form_factors": ["ARDUINO"], "detect_code": ["0815"], "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "TRNG"], "features": ["LWIP"], From 150caecf30f1e3f65ec53fed36f3af5944b62ff5 Mon Sep 17 00:00:00 2001 From: Russ Butler Date: Wed, 12 Oct 2016 14:48:38 -0500 Subject: [PATCH 66/89] Revert "Allow max-depth specification in memap" This reverts commit 8f9f4eefed50a60eac2f4b7004381a843f334cc2 since it broke memory map info for IAR, ARMCC and on windows, GCC_ARM. --- tools/memap.py | 85 +++++++++++++++++++++++++------------------------- 1 file changed, 43 insertions(+), 42 deletions(-) diff --git a/tools/memap.py b/tools/memap.py index f8bd3dd5e4d..f26e97a819f 100644 --- a/tools/memap.py +++ b/tools/memap.py @@ -20,7 +20,6 @@ RE_IAR = re.compile( r'^\s+(.+)\s+(zero|const|ro code|inited|uninit)\s' r'+0x(\w{8})\s+0x(\w+)\s+(.+)\s.+$') -RE_LIB_MATCH = re.compile("^.*/(.*\.a)\((.*)\)$") class MemapParser(object): """An object that represents parsed results, parses the memory map files, @@ -38,16 +37,13 @@ class MemapParser(object): # sections to print info (generic for all toolchains) sections = ('.text', '.data', '.bss', '.heap', '.stack') - MAXDEPTH = object() - def __init__(self, depth=2): + def __init__(self, detailed_misc=False): """ General initialization """ - - self.depth = depth - - self.mapfile = None - + # + self.detailed_misc = detailed_misc + # list of all modules and their sections self.modules = dict() @@ -102,7 +98,7 @@ def check_new_section_gcc(self, line): else: return False # everything else, means no change in section - + def path_object_to_module_name(self, txt): """ Parse a path to object file to extract it's module and object data @@ -111,25 +107,32 @@ def path_object_to_module_name(self, txt): """ txt = txt.replace('\\', '/') - name = txt.split('/') - mapfile_beginning = os.path.dirname(self.mapfile).split('/') - if name[0] == "." or name[0] == "": - name = name[1:] - for thing in mapfile_beginning: - if name[0] == thing: - name = name[1:] - elif name[0] in mapfile_beginning: - pass + rex_mbed_os_name = r'^.+mbed-os\/(.+)\/(.+\.o)$' + test_rex_mbed_os_name = re.match(rex_mbed_os_name, txt) + + if test_rex_mbed_os_name: + + object_name = test_rex_mbed_os_name.group(2) + data = test_rex_mbed_os_name.group(1).split('/') + ndata = len(data) + + if ndata == 1: + module_name = data[0] else: - break - if name[0] == "mbed-os": - name = name[1:] - if name[0] == "features": - name = name[1:] - is_lib = RE_LIB_MATCH.match(txt) - if is_lib: - name = ["libraries", is_lib.group(1), is_lib.group(2)] - return "/".join(name), name[-1] + module_name = data[0] + '/' + data[1] + + return [module_name, object_name] + + elif self.detailed_misc: + rex_obj_name = r'^.+\/(.+\.o\)*)$' + test_rex_obj_name = re.match(rex_obj_name, txt) + if test_rex_obj_name: + object_name = test_rex_obj_name.group(1) + return ['Misc/' + object_name, ""] + + return ['Misc', ""] + else: + return ['Misc', ""] def parse_section_gcc(self, line): """ Parse data from a section of gcc map file @@ -364,7 +367,15 @@ def search_objects(self, path): path = path.replace('\\', '/') - search_path = os.path.dirname(path) + # check location of map file + rex = r'^(.+)' + r'\/(.+\.map)$' + test_rex = re.match(rex, path) + + if test_rex: + search_path = test_rex.group(1) + '/mbed-os/' + else: + print "Warning: this doesn't look like an mbed project" + return for root, _, obj_files in os.walk(search_path): for obj_file in obj_files: @@ -479,19 +490,11 @@ def generate_table(self, file_desc): for i in list(self.print_sections): table.align[i] = 'r' - local_modules = {} for i in sorted(self.modules): - module_name = "/".join(i.split("/")[:self.depth]) - local_modules.setdefault(module_name, - {k: 0 for k in self.print_sections}) - for k in self.print_sections: - local_modules[module_name][k] += self.modules[i][k] - - for i in sorted(local_modules.keys()): row = [i] for k in self.print_sections: - row.append(local_modules[i][k]) + row.append(self.modules[i][k]) table.add_row(row) @@ -572,8 +575,6 @@ def parse(self, mapfile, toolchain): toolchain - the toolchain used to create the file """ - self.mapfile = mapfile - result = True try: with open(mapfile, 'r') as file_input: @@ -588,8 +589,9 @@ def parse(self, mapfile, toolchain): self.parse_map_file_iar(file_input) else: result = False + self.compute_report() - + except IOError as error: print "I/O error({0}): {1}".format(error.errno, error.strerror) result = False @@ -629,7 +631,6 @@ def main(): parser.add_argument('-d', '--detailed', action='store_true', help='Displays the elements in "Misc" in a detailed fashion', required=False) - parser.add_argument('--max-depth', dest='max_depth', type=int, help='Displays the elements in "Misc" in a detailed fashion', required=False, default=None) # Parse/run command if len(sys.argv) <= 1: parser.print_help() @@ -639,7 +640,7 @@ def main(): args = parser.parse_args() # Create memap object - memap = MemapParser(depth=(args.max_depth or (MemapParser.MAXDEPTH if args.detailed else 2))) + memap = MemapParser(detailed_misc=args.detailed) # Parse and decode a map file if args.file and args.toolchain: From eac9244eabe9a1cf92e7bd1aa6904173eaa2b3bf Mon Sep 17 00:00:00 2001 From: Mahadevan Mahesh Date: Thu, 15 Sep 2016 15:58:12 -0500 Subject: [PATCH 67/89] Add support for KL82Z FRDM board Signed-off-by: Mahadevan Mahesh --- .../TARGET_FRDM/PeripheralNames.h | 102 + .../TARGET_KL82Z/TARGET_FRDM/PeripheralPins.c | 160 + .../TARGET_KL82Z/TARGET_FRDM/PinNames.h | 171 + .../TARGET_KL82Z/TARGET_FRDM/device.h | 39 + .../TARGET_FRDM/fsl_clock_config.c | 178 + .../TARGET_FRDM/fsl_clock_config.h | 56 + .../TARGET_KL82Z/TARGET_FRDM/mbed_overrides.c | 41 + .../TARGET_KL82Z/device/MKL82Z7.h | 11451 ++++++++++++++++ .../TARGET_KL82Z/device/MKL82Z7_features.h | 2166 +++ .../TOOLCHAIN_ARM_STD/MKL82Z128xxx7.sct | 143 + .../TOOLCHAIN_ARM_STD/startup_MKL82Z7.s | 616 + .../device/TOOLCHAIN_ARM_STD/sys.cpp | 31 + .../device/TOOLCHAIN_GCC_ARM/MKL82Z128xxx7.ld | 287 + .../TOOLCHAIN_GCC_ARM/startup_MKL82Z7.S | 545 + .../device/TOOLCHAIN_IAR/MKL82Z128xxx7.icf | 139 + .../device/TOOLCHAIN_IAR/startup_MKL82Z7.s | 479 + .../TARGET_KL82Z/device/cmsis.h | 13 + .../TARGET_KL82Z/device/cmsis_nvic.c | 42 + .../TARGET_KL82Z/device/cmsis_nvic.h | 51 + .../device/fsl_device_registers.h | 57 + .../TARGET_KL82Z/device/system_MKL82Z7.c | 293 + .../TARGET_KL82Z/device/system_MKL82Z7.h | 148 + .../TARGET_KL82Z/drivers/fsl_adc16.c | 364 + .../TARGET_KL82Z/drivers/fsl_adc16.h | 526 + .../TARGET_KL82Z/drivers/fsl_clock.c | 1794 +++ .../TARGET_KL82Z/drivers/fsl_clock.h | 1505 ++ .../TARGET_KL82Z/drivers/fsl_cmp.c | 279 + .../TARGET_KL82Z/drivers/fsl_cmp.h | 345 + .../TARGET_KL82Z/drivers/fsl_common.c | 101 + .../TARGET_KL82Z/drivers/fsl_common.h | 254 + .../TARGET_KL82Z/drivers/fsl_crc.c | 280 + .../TARGET_KL82Z/drivers/fsl_crc.h | 192 + .../TARGET_KL82Z/drivers/fsl_dac.c | 214 + .../TARGET_KL82Z/drivers/fsl_dac.h | 378 + .../TARGET_KL82Z/drivers/fsl_dmamux.c | 87 + .../TARGET_KL82Z/drivers/fsl_dmamux.h | 175 + .../TARGET_KL82Z/drivers/fsl_dspi.c | 1661 +++ .../TARGET_KL82Z/drivers/fsl_dspi.h | 1181 ++ .../TARGET_KL82Z/drivers/fsl_dspi_edma.c | 1263 ++ .../TARGET_KL82Z/drivers/fsl_dspi_edma.h | 282 + .../TARGET_KL82Z/drivers/fsl_edma.c | 1313 ++ .../TARGET_KL82Z/drivers/fsl_edma.h | 880 ++ .../TARGET_KL82Z/drivers/fsl_ewm.c | 92 + .../TARGET_KL82Z/drivers/fsl_ewm.h | 241 + .../TARGET_KL82Z/drivers/fsl_flash.c | 2630 ++++ .../TARGET_KL82Z/drivers/fsl_flash.h | 1209 ++ .../TARGET_KL82Z/drivers/fsl_flexio.c | 262 + .../TARGET_KL82Z/drivers/fsl_flexio.h | 706 + .../TARGET_KL82Z/drivers/fsl_flexio_camera.c | 157 + .../TARGET_KL82Z/drivers/fsl_flexio_camera.h | 259 + .../drivers/fsl_flexio_camera_edma.c | 218 + .../drivers/fsl_flexio_camera_edma.h | 147 + .../drivers/fsl_flexio_i2c_master.c | 763 + .../drivers/fsl_flexio_i2c_master.h | 486 + .../TARGET_KL82Z/drivers/fsl_flexio_i2s.c | 635 + .../TARGET_KL82Z/drivers/fsl_flexio_i2s.h | 569 + .../drivers/fsl_flexio_i2s_edma.c | 353 + .../drivers/fsl_flexio_i2s_edma.h | 218 + .../TARGET_KL82Z/drivers/fsl_flexio_spi.c | 935 ++ .../TARGET_KL82Z/drivers/fsl_flexio_spi.h | 707 + .../drivers/fsl_flexio_spi_edma.c | 418 + .../drivers/fsl_flexio_spi_edma.h | 222 + .../TARGET_KL82Z/drivers/fsl_flexio_uart.c | 690 + .../TARGET_KL82Z/drivers/fsl_flexio_uart.h | 585 + .../drivers/fsl_flexio_uart_edma.c | 348 + .../drivers/fsl_flexio_uart_edma.h | 190 + .../TARGET_KL82Z/drivers/fsl_gpio.c | 179 + .../TARGET_KL82Z/drivers/fsl_gpio.h | 389 + .../TARGET_KL82Z/drivers/fsl_i2c.c | 1633 +++ .../TARGET_KL82Z/drivers/fsl_i2c.h | 788 ++ .../TARGET_KL82Z/drivers/fsl_i2c_edma.c | 526 + .../TARGET_KL82Z/drivers/fsl_i2c_edma.h | 132 + .../TARGET_KL82Z/drivers/fsl_intmux.c | 177 + .../TARGET_KL82Z/drivers/fsl_intmux.h | 186 + .../TARGET_KL82Z/drivers/fsl_llwu.c | 404 + .../TARGET_KL82Z/drivers/fsl_llwu.h | 320 + .../TARGET_KL82Z/drivers/fsl_lptmr.c | 117 + .../TARGET_KL82Z/drivers/fsl_lptmr.h | 370 + .../TARGET_KL82Z/drivers/fsl_lpuart.c | 1266 ++ .../TARGET_KL82Z/drivers/fsl_lpuart.h | 792 ++ .../TARGET_KL82Z/drivers/fsl_lpuart_edma.c | 331 + .../TARGET_KL82Z/drivers/fsl_lpuart_edma.h | 189 + .../TARGET_KL82Z/drivers/fsl_ltc.c | 4292 ++++++ .../TARGET_KL82Z/drivers/fsl_ltc.h | 1575 +++ .../TARGET_KL82Z/drivers/fsl_ltc_edma.c | 1247 ++ .../TARGET_KL82Z/drivers/fsl_ltc_edma.h | 850 ++ .../TARGET_KL82Z/drivers/fsl_mpu.c | 239 + .../TARGET_KL82Z/drivers/fsl_mpu.h | 422 + .../TARGET_KL82Z/drivers/fsl_pit.c | 119 + .../TARGET_KL82Z/drivers/fsl_pit.h | 354 + .../TARGET_KL82Z/drivers/fsl_pmc.c | 93 + .../TARGET_KL82Z/drivers/fsl_pmc.h | 421 + .../TARGET_KL82Z/drivers/fsl_port.h | 381 + .../TARGET_KL82Z/drivers/fsl_qspi.c | 345 + .../TARGET_KL82Z/drivers/fsl_qspi.h | 629 + .../TARGET_KL82Z/drivers/fsl_qspi_edma.c | 321 + .../TARGET_KL82Z/drivers/fsl_qspi_edma.h | 175 + .../TARGET_KL82Z/drivers/fsl_rcm.c | 65 + .../TARGET_KL82Z/drivers/fsl_rcm.h | 431 + .../TARGET_KL82Z/drivers/fsl_rtc.c | 379 + .../TARGET_KL82Z/drivers/fsl_rtc.h | 412 + .../TARGET_KL82Z/drivers/fsl_sim.c | 53 + .../TARGET_KL82Z/drivers/fsl_sim.h | 127 + .../TARGET_KL82Z/drivers/fsl_smartcard.h | 296 + .../drivers/fsl_smartcard_emvsim.c | 955 ++ .../drivers/fsl_smartcard_emvsim.h | 205 + .../drivers/fsl_smartcard_phy_emvsim.c | 234 + .../drivers/fsl_smartcard_phy_emvsim.h | 140 + .../drivers/fsl_smartcard_phy_tda8035.c | 543 + .../drivers/fsl_smartcard_phy_tda8035.h | 153 + .../TARGET_KL82Z/drivers/fsl_smc.c | 366 + .../TARGET_KL82Z/drivers/fsl_smc.h | 418 + .../TARGET_KL82Z/drivers/fsl_tpm.c | 729 + .../TARGET_KL82Z/drivers/fsl_tpm.h | 589 + .../TARGET_KL82Z/drivers/fsl_trng.c | 1618 +++ .../TARGET_KL82Z/drivers/fsl_trng.h | 239 + .../TARGET_KL82Z/drivers/fsl_tsi_v4.c | 190 + .../TARGET_KL82Z/drivers/fsl_tsi_v4.h | 710 + .../TARGET_KL82Z/drivers/fsl_vref.c | 224 + .../TARGET_KL82Z/drivers/fsl_vref.h | 256 + .../TARGET_KL82Z/drivers/fsl_wdog.c | 153 + .../TARGET_KL82Z/drivers/fsl_wdog.h | 433 + .../TARGET_KL82Z/peripheral_clock_defines.h | 54 + .../TARGET_KL82Z/pwmout_api.c | 139 + .../TARGET_KL82Z/serial_api.c | 262 + .../TARGET_KSDK2_MCUS/TARGET_KL82Z/spi_api.c | 132 + .../TARGET_KL82Z/us_ticker.c | 90 + targets/TARGET_Freescale/mbed_rtx.h | 15 + targets/targets.json | 13 + 129 files changed, 73207 insertions(+) create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/TARGET_FRDM/PeripheralNames.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/TARGET_FRDM/PeripheralPins.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/TARGET_FRDM/PinNames.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/TARGET_FRDM/device.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/TARGET_FRDM/fsl_clock_config.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/TARGET_FRDM/fsl_clock_config.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/TARGET_FRDM/mbed_overrides.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/MKL82Z7.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/MKL82Z7_features.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/TOOLCHAIN_ARM_STD/MKL82Z128xxx7.sct create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/TOOLCHAIN_ARM_STD/startup_MKL82Z7.s create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/TOOLCHAIN_ARM_STD/sys.cpp create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/TOOLCHAIN_GCC_ARM/MKL82Z128xxx7.ld create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/TOOLCHAIN_GCC_ARM/startup_MKL82Z7.S create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/TOOLCHAIN_IAR/MKL82Z128xxx7.icf create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/TOOLCHAIN_IAR/startup_MKL82Z7.s create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/cmsis.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/cmsis_nvic.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/cmsis_nvic.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/fsl_device_registers.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/system_MKL82Z7.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/system_MKL82Z7.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_adc16.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_adc16.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_clock.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_clock.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_cmp.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_cmp.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_common.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_common.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_crc.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_crc.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dac.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dac.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dmamux.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dmamux.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dspi.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dspi.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dspi_edma.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dspi_edma.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_edma.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_edma.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_ewm.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_ewm.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flash.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flash.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_camera.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_camera.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_camera_edma.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_camera_edma.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_i2c_master.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_i2c_master.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_i2s.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_i2s.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_i2s_edma.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_i2s_edma.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_spi.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_spi.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_spi_edma.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_spi_edma.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_uart.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_uart.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_uart_edma.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_uart_edma.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_gpio.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_gpio.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_i2c.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_i2c.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_i2c_edma.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_i2c_edma.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_intmux.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_intmux.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_llwu.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_llwu.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_lptmr.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_lptmr.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_lpuart.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_lpuart.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_lpuart_edma.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_lpuart_edma.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_ltc.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_ltc.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_ltc_edma.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_ltc_edma.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_mpu.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_mpu.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_pit.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_pit.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_pmc.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_pmc.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_port.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_qspi.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_qspi.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_qspi_edma.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_qspi_edma.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_rcm.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_rcm.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_rtc.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_rtc.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_sim.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_sim.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smartcard.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smartcard_emvsim.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smartcard_emvsim.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smartcard_phy_emvsim.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smartcard_phy_emvsim.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smartcard_phy_tda8035.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smartcard_phy_tda8035.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smc.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smc.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_tpm.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_tpm.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_trng.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_trng.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_tsi_v4.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_tsi_v4.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_vref.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_vref.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_wdog.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_wdog.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/peripheral_clock_defines.h create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/pwmout_api.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/serial_api.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/spi_api.c create mode 100644 targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/us_ticker.c diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/TARGET_FRDM/PeripheralNames.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/TARGET_FRDM/PeripheralNames.h new file mode 100644 index 00000000000..ac0c713d853 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/TARGET_FRDM/PeripheralNames.h @@ -0,0 +1,102 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef MBED_PERIPHERALNAMES_H +#define MBED_PERIPHERALNAMES_H + +#include "cmsis.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + OSC32KCLK = 0, +} RTCName; + +/* LPUART */ +typedef enum { + LPUART_0 = 0, + LPUART_1 = 1, + LPUART_2 = 2, +} UARTName; + +#define STDIO_UART_TX USBTX +#define STDIO_UART_RX USBRX +#define STDIO_UART LPUART_0 + +typedef enum { + I2C_0 = 0, + I2C_1 = 1, +} I2CName; + +#define TPM_SHIFT 8 +typedef enum { + PWM_1 = (0 << TPM_SHIFT) | (0), // TPM0 CH0 + PWM_2 = (0 << TPM_SHIFT) | (1), // TPM0 CH1 + PWM_3 = (0 << TPM_SHIFT) | (2), // TPM0 CH2 + PWM_4 = (0 << TPM_SHIFT) | (3), // TPM0 CH3 + PWM_5 = (0 << TPM_SHIFT) | (4), // TPM0 CH4 + PWM_6 = (0 << TPM_SHIFT) | (5), // TPM0 CH5 + PWM_7 = (1 << TPM_SHIFT) | (0), // TPM1 CH0 + PWM_8 = (1 << TPM_SHIFT) | (1), // TPM1 CH1 + PWM_9 = (2 << TPM_SHIFT) | (0), // TPM2 CH0 + PWM_10 = (2 << TPM_SHIFT) | (1), // TPM2 CH1 +} PWMName; + +#define ADC_INSTANCE_SHIFT 8 +#define ADC_B_CHANNEL_SHIFT 5 +typedef enum { + ADC0_SE0 = (0 << ADC_INSTANCE_SHIFT) | 0, + ADC0_SE1 = (0 << ADC_INSTANCE_SHIFT) | 1, + ADC0_SE2 = (0 << ADC_INSTANCE_SHIFT) | 2, + ADC0_SE3 = (0 << ADC_INSTANCE_SHIFT) | 3, + ADC0_SE4a = (0 << ADC_INSTANCE_SHIFT) | 4, + ADC0_SE5a = (0 << ADC_INSTANCE_SHIFT) | 5, + ADC0_SE6a = (0 << ADC_INSTANCE_SHIFT) | 6, + ADC0_SE7a = (0 << ADC_INSTANCE_SHIFT) | 7, + ADC0_SE4b = (0 << ADC_INSTANCE_SHIFT) | (1 << ADC_B_CHANNEL_SHIFT) | 4, + ADC0_SE5b = (0 << ADC_INSTANCE_SHIFT) | (1 << ADC_B_CHANNEL_SHIFT) | 5, + ADC0_SE6b = (0 << ADC_INSTANCE_SHIFT) | (1 << ADC_B_CHANNEL_SHIFT) | 6, + ADC0_SE7b = (0 << ADC_INSTANCE_SHIFT) | (1 << ADC_B_CHANNEL_SHIFT) | 7, + ADC0_SE8 = (0 << ADC_INSTANCE_SHIFT) | 8, + ADC0_SE9 = (0 << ADC_INSTANCE_SHIFT) | 9, + ADC0_SE11 = (0 << ADC_INSTANCE_SHIFT) | 11, + ADC0_SE12 = (0 << ADC_INSTANCE_SHIFT) | 12, + ADC0_SE13 = (0 << ADC_INSTANCE_SHIFT) | 13, + ADC0_SE14 = (0 << ADC_INSTANCE_SHIFT) | 14, + ADC0_SE15 = (0 << ADC_INSTANCE_SHIFT) | 15, + ADC0_SE16 = (0 << ADC_INSTANCE_SHIFT) | 16, + ADC0_SE17 = (0 << ADC_INSTANCE_SHIFT) | 17, + ADC0_SE18 = (0 << ADC_INSTANCE_SHIFT) | 18, + ADC0_SE21 = (0 << ADC_INSTANCE_SHIFT) | 21, + ADC0_SE22 = (0 << ADC_INSTANCE_SHIFT) | 22, + ADC0_SE23 = (0 << ADC_INSTANCE_SHIFT) | 23, +} ADCName; + +typedef enum { + SPI_0 = 0, + SPI_1 = 1, +} SPIName; + +typedef enum { + DAC_0 = 0 +} DACName; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/TARGET_FRDM/PeripheralPins.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/TARGET_FRDM/PeripheralPins.c new file mode 100644 index 00000000000..1f3749556cd --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/TARGET_FRDM/PeripheralPins.c @@ -0,0 +1,160 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "PeripheralPins.h" + +/************RTC***************/ +const PinMap PinMap_RTC[] = { + {NC, OSC32KCLK, 0}, +}; + +/************ADC***************/ +const PinMap PinMap_ADC[] = { + {PTB0, ADC0_SE8, 0}, + {PTB1, ADC0_SE9, 0}, + {PTB2, ADC0_SE12, 0}, + {PTB3, ADC0_SE13, 0}, + {PTC0, ADC0_SE14, 0}, + {PTC1, ADC0_SE15, 0}, + {PTC2, ADC0_SE4b, 0}, + {PTD1, ADC0_SE5b, 0}, + {PTD5, ADC0_SE6b, 0}, + {PTD6, ADC0_SE7b, 0}, + {NC, NC, 0} +}; + +/************DAC***************/ +const PinMap PinMap_DAC[] = { + {DAC0_OUT, DAC_0, 0}, + {NC, NC, 0} +}; + +/************I2C***************/ +const PinMap PinMap_I2C_SDA[] = { + {PTB1, I2C_0, 2}, + {PTB3, I2C_0, 2}, + {PTC11, I2C_1, 2}, + {PTD3, I2C_0, 7}, + {PTD9, I2C_0, 2}, + {PTE0, I2C_1, 6}, + {NC, NC , 0} +}; + +const PinMap PinMap_I2C_SCL[] = { + {PTB0, I2C_0, 2}, + {PTB2, I2C_0, 2}, + {PTC10, I2C_1, 2}, + {PTD2, I2C_0, 7}, + {PTD8, I2C_0, 2}, + {PTE1, I2C_1, 6}, + {NC, NC, 0} +}; + +/************LPUART***************/ +const PinMap PinMap_UART_TX[] = { + {PTA2, LPUART_0, 2}, + {PTA14, LPUART_0, 3}, + {PTB17, LPUART_0, 3}, + {PTC4, LPUART_1, 3}, + {PTD3, LPUART_2, 3}, + {PTD7, LPUART_0, 3}, + {PTE0, LPUART_1, 3}, + {NC, NC, 0} +}; + +const PinMap PinMap_UART_RX[] = { + {PTA1, LPUART_0, 2}, + {PTA15, LPUART_0, 3}, + {PTB16, LPUART_0, 3}, + {PTC3, LPUART_1, 3}, + {PTD2, LPUART_2, 3}, + {PTD6, LPUART_0, 3}, + {PTE1, LPUART_1, 3}, + {NC, NC, 0} +}; + +/************SPI***************/ +const PinMap PinMap_SPI_SCLK[] = { + {PTE1, SPI_1, 2}, + {PTE2, SPI_1, 7}, + {PTA15, SPI_1, 2}, + {PTB11, SPI_1, 2}, + {PTC5, SPI_0, 2}, + {PTD1, SPI_0, 2}, + {PTD5, SPI_1, 7}, + {NC, NC, 0} +}; + +const PinMap PinMap_SPI_MOSI[] = { + {PTE2, SPI_1, 2}, + {PTE3, SPI_1, 7}, + {PTA16, SPI_1, 2}, + {PTB16, SPI_1, 2}, + {PTC6, SPI_0, 2}, + {PTD2, SPI_0, 2}, + {PTD6, SPI_1, 7}, + {NC, NC, 0} +}; + +const PinMap PinMap_SPI_MISO[] = { + {PTE1, SPI_1, 7}, + {PTE4, SPI_1, 2}, + {PTA17, SPI_1, 2}, + {PTB17, SPI_1, 2}, + {PTC7, SPI_0, 2}, + {PTD3, SPI_0, 2}, + {PTD7, SPI_1, 7}, + {NC, NC, 0} +}; + +const PinMap PinMap_SPI_SSEL[] = { + {PTE5, SPI_1, 2}, + {PTA14, SPI_1, 2}, + {PTB10, SPI_1, 2}, + {PTC4, SPI_0, 2}, + {PTD0, SPI_0, 2}, + {PTD4, SPI_1, 7}, + {NC, NC, 0} +}; + +/************PWM***************/ +const PinMap PinMap_PWM[] = { + {PTA0, PWM_6, 3}, // PTA0 , TPM0 CH5 + {PTA3, PWM_1, 3}, // PTA3 , TPM0 CH0 + {PTA4, PWM_2 , 3}, // PTA4 , TPM0 CH1 + {PTA5, PWM_3 , 3}, // PTA5 , TPM0 CH2 + {PTA10, PWM_9, 3}, // PTA10, TPM2 CH0 + {PTA11, PWM_10, 3}, // PTA11, TPM2 CH1 + {PTA12, PWM_7 , 3}, // PTA12, TPM1 CH0 + {PTA13, PWM_8 , 3}, // PTA13, TPM1 CH1 + + {PTB0, PWM_7, 3}, // PTB0 , TPM1 CH0 + {PTB1, PWM_8, 3}, // PTB1 , TPM1 CH1 + {PTB18, PWM_9, 3}, // PTB18, TPM2 CH0 + {PTB19, PWM_10, 3}, // PTB18, TPM2 CH1 + + {PTC1, PWM_1, 4}, // PTC1 , TPM0 CH0 + {PTC2, PWM_2, 4}, // PTC2 , TPM0 CH1 + {PTC3, PWM_3, 4}, // PTC3 , TPM0 CH2 + {PTC4, PWM_4, 4}, // PTC4 , TPM0 CH3 + {PTC5, PWM_3, 7}, // PTC4 , TPM0 CH2 + + {PTD4, PWM_5 , 4}, // PTD4 , TPM0 CH4 + {PTD5, PWM_6 , 4}, // PTD5 , TPM0 CH5 + + {NC , NC , 0} +}; + diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/TARGET_FRDM/PinNames.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/TARGET_FRDM/PinNames.h new file mode 100644 index 00000000000..55ad0cf4f5a --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/TARGET_FRDM/PinNames.h @@ -0,0 +1,171 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef MBED_PINNAMES_H +#define MBED_PINNAMES_H + +#include "cmsis.h" + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum { + PIN_INPUT, + PIN_OUTPUT +} PinDirection; + +#define GPIO_PORT_SHIFT 12 + +typedef enum { + PTA0 = (0 << GPIO_PORT_SHIFT | 0), + PTA1 = (0 << GPIO_PORT_SHIFT | 1), + PTA2 = (0 << GPIO_PORT_SHIFT | 2), + PTA3 = (0 << GPIO_PORT_SHIFT | 3), + PTA4 = (0 << GPIO_PORT_SHIFT | 4), + PTA5 = (0 << GPIO_PORT_SHIFT | 5), + PTA10 = (0 << GPIO_PORT_SHIFT | 10), + PTA11 = (0 << GPIO_PORT_SHIFT | 11), + PTA12 = (0 << GPIO_PORT_SHIFT | 12), + PTA13 = (0 << GPIO_PORT_SHIFT | 13), + PTA14 = (0 << GPIO_PORT_SHIFT | 14), + PTA15 = (0 << GPIO_PORT_SHIFT | 15), + PTA16 = (0 << GPIO_PORT_SHIFT | 16), + PTA17 = (0 << GPIO_PORT_SHIFT | 17), + PTA18 = (0 << GPIO_PORT_SHIFT | 18), + PTA19 = (0 << GPIO_PORT_SHIFT | 19), + + PTB0 = (1 << GPIO_PORT_SHIFT | 0), + PTB1 = (1 << GPIO_PORT_SHIFT | 1), + PTB2 = (1 << GPIO_PORT_SHIFT | 2), + PTB3 = (1 << GPIO_PORT_SHIFT | 3), + PTB9 = (1 << GPIO_PORT_SHIFT | 9), + PTB10 = (1 << GPIO_PORT_SHIFT | 10), + PTB11 = (1 << GPIO_PORT_SHIFT | 11), + PTB16 = (1 << GPIO_PORT_SHIFT | 16), + PTB17 = (1 << GPIO_PORT_SHIFT | 17), + PTB18 = (1 << GPIO_PORT_SHIFT | 18), + PTB19 = (1 << GPIO_PORT_SHIFT | 19), + PTB20 = (1 << GPIO_PORT_SHIFT | 20), + PTB21 = (1 << GPIO_PORT_SHIFT | 21), + PTB22 = (1 << GPIO_PORT_SHIFT | 22), + PTB23 = (1 << GPIO_PORT_SHIFT | 23), + + PTC0 = (2 << GPIO_PORT_SHIFT | 0 ), + PTC1 = (2 << GPIO_PORT_SHIFT | 1 ), + PTC2 = (2 << GPIO_PORT_SHIFT | 2 ), + PTC3 = (2 << GPIO_PORT_SHIFT | 3 ), + PTC4 = (2 << GPIO_PORT_SHIFT | 4 ), + PTC5 = (2 << GPIO_PORT_SHIFT | 5 ), + PTC6 = (2 << GPIO_PORT_SHIFT | 6 ), + PTC7 = (2 << GPIO_PORT_SHIFT | 7 ), + PTC8 = (2 << GPIO_PORT_SHIFT | 8 ), + PTC9 = (2 << GPIO_PORT_SHIFT | 9 ), + PTC10 = (2 << GPIO_PORT_SHIFT | 10), + PTC11 = (2 << GPIO_PORT_SHIFT | 11), + PTC12 = (2 << GPIO_PORT_SHIFT | 12), + PTC13 = (2 << GPIO_PORT_SHIFT | 13), + PTC14 = (2 << GPIO_PORT_SHIFT | 14), + PTC15 = (2 << GPIO_PORT_SHIFT | 15), + PTC17 = (2 << GPIO_PORT_SHIFT | 17), + + PTD0 = (3 << GPIO_PORT_SHIFT | 0), + PTD1 = (3 << GPIO_PORT_SHIFT | 1), + PTD2 = (3 << GPIO_PORT_SHIFT | 2), + PTD3 = (3 << GPIO_PORT_SHIFT | 3), + PTD4 = (3 << GPIO_PORT_SHIFT | 4), + PTD5 = (3 << GPIO_PORT_SHIFT | 5), + PTD6 = (3 << GPIO_PORT_SHIFT | 6), + PTD7 = (3 << GPIO_PORT_SHIFT | 7), + PTD8 = (3 << GPIO_PORT_SHIFT | 8), + PTD9 = (3 << GPIO_PORT_SHIFT | 9), + + PTE0 = (4 << GPIO_PORT_SHIFT | 0), + PTE1 = (4 << GPIO_PORT_SHIFT | 1), + PTE2 = (4 << GPIO_PORT_SHIFT | 2), + PTE3 = (4 << GPIO_PORT_SHIFT | 3), + PTE4 = (4 << GPIO_PORT_SHIFT | 4), + PTE5 = (4 << GPIO_PORT_SHIFT | 5), + PTE6 = (4 << GPIO_PORT_SHIFT | 6), + PTE7 = (4 << GPIO_PORT_SHIFT | 7), + PTE8 = (4 << GPIO_PORT_SHIFT | 9), + PTE9 = (4 << GPIO_PORT_SHIFT | 9), + PTE10 = (4 << GPIO_PORT_SHIFT | 10), + PTE11 = (4 << GPIO_PORT_SHIFT | 11), + + LED_RED = PTC1, + LED_GREEN = PTC2, + LED_BLUE = PTC0, + + // mbed original LED naming + LED1 = LED_RED, + LED2 = LED_GREEN, + LED3 = LED_BLUE, + LED4 = LED_RED, + + //Push buttons + SW2 = PTA4, + SW3 = PTD0, + + // USB Pins + USBTX = PTB17, + USBRX = PTB16, + + DAC0_OUT = 0xFEFE, /* DAC does not have Pin Name in RM */ + + // Arduino Headers + D0 = PTB16, + D1 = PTB17, + D2 = PTD7, + D3 = PTC1, + D4 = PTC12, + D5 = PTC2, + D6 = PTC3, + D7 = PTC9, + D8 = PTD4, + D9 = PTD5, + D10 = PTC4, + D11 = PTC6, + D12 = PTC7, + D13 = PTC5, + D14 = PTC11, + D15 = PTC10, + + I2C_SCL = D15, + I2C_SDA = D14, + + A0 = DAC0_OUT, + A1 = PTD1, + A2 = PTC0, + A3 = PTD6, + A4 = PTB1, + A5 = PTB0, + + // Not connected + NC = (int)0xFFFFFFFF +} PinName; + +typedef enum { + PullNone = 0, + PullDown = 1, + PullUp = 2, + PullDefault = PullUp +} PinMode; + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/TARGET_FRDM/device.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/TARGET_FRDM/device.h new file mode 100644 index 00000000000..29a4e7a0b18 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/TARGET_FRDM/device.h @@ -0,0 +1,39 @@ +// The 'features' section in 'target.json' is now used to create the device's hardware preprocessor switches. +// Check the 'features' section of the target description in 'targets.json' for more details. +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#ifndef MBED_DEVICE_H +#define MBED_DEVICE_H + + + + + + + + + + + +#define DEVICE_ID_LENGTH 24 + + + + + +#include "objects.h" + +#endif diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/TARGET_FRDM/fsl_clock_config.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/TARGET_FRDM/fsl_clock_config.c new file mode 100644 index 00000000000..1ad6e17866d --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/TARGET_FRDM/fsl_clock_config.c @@ -0,0 +1,178 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_common.h" +#include "fsl_smc.h" +#include "fsl_clock_config.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/******************************************************************************* + * Variables + ******************************************************************************/ +/* System clock frequency. */ +extern uint32_t SystemCoreClock; + +/******************************************************************************* + * Code + ******************************************************************************/ +/* + * How to setup clock using clock driver functions: + * + * 1. CLOCK_SetSimSafeDivs, to make sure core clock, bus clock, flexbus clock + * and flash clock are in allowed range during clock mode switch. + * + * 2. Call CLOCK_Osc0Init to setup OSC clock, if it is used in target mode. + * + * 3. Set MCG configuration, MCG includes three parts: FLL clock, PLL clock and + * internal reference clock(MCGIRCLK). Follow the steps to setup: + * + * 1). Call CLOCK_BootToXxxMode to set MCG to target mode. + * + * 2). If target mode is FBI/BLPI/PBI mode, the MCGIRCLK has been configured + * correctly. For other modes, need to call CLOCK_SetInternalRefClkConfig + * explicitly to setup MCGIRCLK. + * + * 3). Don't need to configure FLL explicitly, because if target mode is FLL + * mode, then FLL has been configured by the function CLOCK_BootToXxxMode, + * if the target mode is not FLL mode, the FLL is disabled. + * + * 4). If target mode is PEE/PBE/PEI/PBI mode, then the related PLL has been + * setup by CLOCK_BootToXxxMode. In FBE/FBI/FEE/FBE mode, the PLL could + * be enabled independently, call CLOCK_EnablePll0 explicitly in this case. + * + * 4. Call CLOCK_SetSimConfig to set the clock configuration in SIM. + */ + +void BOARD_BootClockVLPR(void) +{ + /* + * Core clock: 4MHz + */ + const sim_clock_config_t simConfig = { + .pllFllSel = 3U, /* PLLFLLSEL select IRC48MCLK. */ + .pllFllDiv = 0U, /* PLLFLLSEL clock divider divisor. */ + .pllFllFrac = 0U, /* PLLFLLSEL clock divider fraction. */ + .er32kSrc = 2U, /* ERCLK32K selection, use RTC. */ + .clkdiv1 = 0x03040000U, /* SIM_CLKDIV1. */ + }; + + CLOCK_SetSimSafeDivs(); + + CLOCK_BootToBlpiMode(0U, kMCG_IrcFast, kMCG_IrclkEnable); + + CLOCK_SetSimConfig(&simConfig); + + SystemCoreClock = 4000000U; + + SMC_SetPowerModeProtection(SMC, kSMC_AllowPowerModeAll); + SMC_SetPowerModeVlpr(SMC); + while (SMC_GetPowerModeState(SMC) != kSMC_PowerStateVlpr) + { + } +} + +void BOARD_BootClockRUN(void) +{ + /* + * Core clock: 72MHz + */ + const mcg_pll_config_t pll0Config = { + .enableMode = 0U, .prdiv = 0x00U, .vdiv = 0x08U, + }; + const sim_clock_config_t simConfig = { + .pllFllSel = 1U, /* PLLFLLSEL select PLL. */ + .pllFllDiv = 0U, /* PLLFLLSEL clock divider divisor. */ + .pllFllFrac = 0U, /* PLLFLLSEL clock divider fraction. */ + .er32kSrc = 2U, /* ERCLK32K selection, use RTC. */ + .clkdiv1 = 0x15051000U, /* SIM_CLKDIV1. */ + }; + + CLOCK_SetSimSafeDivs(); + BOARD_InitOsc0(); + + CLOCK_BootToPeeMode(kMCG_OscselOsc, kMCG_PllClkSelPll0, &pll0Config); + + CLOCK_SetInternalRefClkConfig(kMCG_IrclkEnable, kMCG_IrcSlow, 0); + CLOCK_SetSimConfig(&simConfig); + + SystemCoreClock = 72000000U; +} + +void BOARD_BootClockHSRUN(void) +{ + /* + * Core clock: 96MHz + */ + SMC_SetPowerModeProtection(SMC, kSMC_AllowPowerModeAll); + SMC_SetPowerModeHsrun(SMC); + while (SMC_GetPowerModeState(SMC) != kSMC_PowerStateHsrun) + { + } + CLOCK_SetSimSafeDivs(); + BOARD_InitOsc0(); + const sim_clock_config_t simConfig = { + .pllFllSel = 1U, /* PLLFLLSEL select PLL. */ + .pllFllDiv = 0U, /* PLLFLLSEL clock divider divisor. */ + .pllFllFrac = 0U, /* PLLFLLSEL clock divider fraction. */ + .er32kSrc = 2U, /* ERCLK32K selection, use RTC. */ + .clkdiv1 = 0x03030000U, /* SIM_CLKDIV1. */ + }; + + const mcg_pll_config_t pll0Config = { + .enableMode = 0U, .prdiv = 0x00U, .vdiv = 0x00U, + }; + CLOCK_BootToPeeMode(kMCG_OscselOsc, kMCG_PllClkSelPll0, &pll0Config); + + CLOCK_SetInternalRefClkConfig(kMCG_IrclkEnable, kMCG_IrcSlow, 0); + CLOCK_SetSimConfig(&simConfig); + SystemCoreClock = 96000000U; +} + +void BOARD_InitOsc0(void) +{ + const osc_config_t oscConfig = {.freq = BOARD_XTAL0_CLK_HZ, + .capLoad = 0, + .workMode = kOSC_ModeOscLowPower, + .oscerConfig = { + .enableMode = kOSC_ErClkEnable, +#if (defined(FSL_FEATURE_OSC_HAS_EXT_REF_CLOCK_DIVIDER) && FSL_FEATURE_OSC_HAS_EXT_REF_CLOCK_DIVIDER) + .erclkDiv = 0U, +#endif + }}; + + CLOCK_InitOsc0(&oscConfig); + + /* Passing the XTAL0 frequency to clock driver. */ + CLOCK_SetXtal0Freq(BOARD_XTAL0_CLK_HZ); + CLOCK_SetXtal32Freq(BOARD_XTAL32K_CLK_HZ); +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/TARGET_FRDM/fsl_clock_config.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/TARGET_FRDM/fsl_clock_config.h new file mode 100644 index 00000000000..e41723ab2aa --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/TARGET_FRDM/fsl_clock_config.h @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _CLOCK_CONFIG_H_ +#define _CLOCK_CONFIG_H_ + +/******************************************************************************* + * DEFINITION + ******************************************************************************/ +#define BOARD_XTAL0_CLK_HZ 12000000U +#define BOARD_XTAL32K_CLK_HZ 32768U + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus*/ + +void BOARD_BootClockVLPR(void); +void BOARD_BootClockRUN(void); +void BOARD_BootClockHSRUN(void); +void BOARD_InitOsc0(void); + +#if defined(__cplusplus) +} +#endif /* __cplusplus*/ + +#endif /* _CLOCK_CONFIG_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/TARGET_FRDM/mbed_overrides.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/TARGET_FRDM/mbed_overrides.c new file mode 100644 index 00000000000..d4577de95fd --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/TARGET_FRDM/mbed_overrides.c @@ -0,0 +1,41 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "gpio_api.h" +#include "pinmap.h" +#include "fsl_clock_config.h" + +// called before main - implement here if board needs it otherwise, let +// the application override this if necessary +void mbed_sdk_init() +{ + BOARD_BootClockRUN(); +} + +// Enable the RTC oscillator if available on the board +void rtc_setup_oscillator(RTC_Type *base) +{ + /* Enable the RTC oscillator */ + RTC->CR |= RTC_CR_OSCE_MASK; +} + +// Change the NMI pin to an input. This allows NMI pin to +// be used as a low power mode wakeup. The application will +// need to change the pin back to NMI_b or wakeup only occurs once! +void NMI_Handler(void) +{ + gpio_t gpio; + gpio_init_in(&gpio, PTA4); +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/MKL82Z7.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/MKL82Z7.h new file mode 100644 index 00000000000..e790851f6dc --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/MKL82Z7.h @@ -0,0 +1,11451 @@ +/* +** ################################################################### +** Processors: MKL82Z128VLH7 +** MKL82Z128VLK7 +** MKL82Z128VLL7 +** MKL82Z128VMC7 +** MKL82Z128VMP7 +** +** Compilers: Keil ARM C/C++ Compiler +** Freescale C/C++ for Embedded ARM +** GNU C Compiler +** IAR ANSI C/C++ Compiler for ARM +** +** Reference manual: KL82P121M72SF0RM, Rev.2 November 2015 +** Version: rev. 1.5, 2015-09-24 +** Build: b160201 +** +** Abstract: +** CMSIS Peripheral Access Layer for MKL82Z7 +** +** Copyright (c) 1997 - 2016 Freescale Semiconductor, Inc. +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without modification, +** are permitted provided that the following conditions are met: +** +** o Redistributions of source code must retain the above copyright notice, this list +** of conditions and the following disclaimer. +** +** o Redistributions in binary form must reproduce the above copyright notice, this +** list of conditions and the following disclaimer in the documentation and/or +** other materials provided with the distribution. +** +** o Neither the name of Freescale Semiconductor, Inc. nor the names of its +** contributors may be used to endorse or promote products derived from this +** software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +** ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +** ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +** +** http: www.freescale.com +** mail: support@freescale.com +** +** Revisions: +** - rev. 1.0 (2015-04-18) +** Initial version. +** - rev. 1.1 (2015-05-04) +** Update SIM, EVMSIM, QuadSPI, and I2C based on Rev0 document. +** - rev. 1.2 (2015-08-11) +** Correct clock configuration. +** - rev. 1.3 (2015-08-20) +** Align with RM Rev.1. +** - rev. 1.4 (2015-08-28) +** Update LPUART to add FIFO. +** - rev. 1.5 (2015-09-24) +** Update to align with RM Rev.1.2. +** +** ################################################################### +*/ + +/*! + * @file MKL82Z7.h + * @version 1.5 + * @date 2015-09-24 + * @brief CMSIS Peripheral Access Layer for MKL82Z7 + * + * CMSIS Peripheral Access Layer for MKL82Z7 + */ + +#ifndef _MKL82Z7_H_ +#define _MKL82Z7_H_ /**< Symbol preventing repeated inclusion */ + +/** Memory map major version (memory maps with equal major version number are + * compatible) */ +#define MCU_MEM_MAP_VERSION 0x0100U +/** Memory map minor version */ +#define MCU_MEM_MAP_VERSION_MINOR 0x0005U + + +/* ---------------------------------------------------------------------------- + -- Interrupt vector numbers + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup Interrupt_vector_numbers Interrupt vector numbers + * @{ + */ + +/** Interrupt Number Definitions */ +#define NUMBER_OF_INT_VECTORS 80 /**< Number of interrupts in the Vector table */ + +typedef enum IRQn { + /* Auxiliary constants */ + NotAvail_IRQn = -128, /**< Not available device specific interrupt */ + + /* Core interrupts */ + NonMaskableInt_IRQn = -14, /**< Non Maskable Interrupt */ + HardFault_IRQn = -13, /**< Cortex-M0 SV Hard Fault Interrupt */ + SVCall_IRQn = -5, /**< Cortex-M0 SV Call Interrupt */ + PendSV_IRQn = -2, /**< Cortex-M0 Pend SV Interrupt */ + SysTick_IRQn = -1, /**< Cortex-M0 System Tick Interrupt */ + + /* Device specific interrupts */ + DMA0_DMA4_IRQn = 0, /**< DMA channel 0, 4 transfer complete */ + DMA1_DMA5_IRQn = 1, /**< DMA channel 1, 5 transfer complete */ + DMA2_DMA6_IRQn = 2, /**< DMA channel 2, 6 transfer complete */ + DMA3_DMA7_IRQn = 3, /**< DMA channel 3, 7 transfer complete */ + DMA_Error_IRQn = 4, /**< DMA channel 0 - 7 error */ + FLEXIO0_IRQn = 5, /**< Flexible IO */ + TPM0_IRQn = 6, /**< Timer/PWM module 0 */ + TPM1_IRQn = 7, /**< Timer/PWM module 1 */ + TPM2_IRQn = 8, /**< Timer/PWM module 2 */ + PIT0_IRQn = 9, /**< Periodic Interrupt Timer 0 */ + SPI0_IRQn = 10, /**< Serial Peripheral Interface 0 */ + EMVSIM0_IRQn = 11, /**< EMVSIM0 common interrupt */ + LPUART0_IRQn = 12, /**< LPUART0 status and error */ + LPUART1_IRQn = 13, /**< LPUART1 status and error */ + I2C0_IRQn = 14, /**< Inter-Integrated Circuit 0 */ + QSPI0_IRQn = 15, /**< QuadSPI0 interrupt */ + Reserved32_IRQn = 16, /**< DryIce tamper detect */ + PORTA_IRQn = 17, /**< Pin detect Port A */ + PORTB_IRQn = 18, /**< Pin detect Port B */ + PORTC_IRQn = 19, /**< Pin detect Port C */ + PORTD_IRQn = 20, /**< Pin detect Port D */ + PORTE_IRQn = 21, /**< Pin detect Port E */ + LLWU_IRQn = 22, /**< Low Leakage Wakeup */ + LTC0_IRQn = 23, /**< Low power trusted cryptographic */ + USB0_IRQn = 24, /**< USB OTG interrupt */ + ADC0_IRQn = 25, /**< Analog-to-Digital Converter 0 */ + LPTMR0_IRQn = 26, /**< Low-Power Timer 0 */ + RTC_Seconds_IRQn = 27, /**< RTC seconds */ + INTMUX0_0_IRQn = 28, /**< Selectable peripheral interrupt INTMUX0-0 */ + INTMUX0_1_IRQn = 29, /**< Selectable peripheral interrupt INTMUX0-1 */ + INTMUX0_2_IRQn = 30, /**< Selectable peripheral interrupt INTMUX0-2 */ + INTMUX0_3_IRQn = 31, /**< Selectable peripheral interrupt INTMUX0-3 */ + LPTMR1_IRQn = 32, /**< Low-Power Timer 1 (INTMUX source IRQ0) */ + Reserved49_IRQn = 33, /**< Reserved interrupt (INTMUX source IRQ1) */ + Reserved50_IRQn = 34, /**< Reserved interrupt (INTMUX source IRQ2) */ + Reserved51_IRQn = 35, /**< Reserved interrupt (INTMUX source IRQ3) */ + SPI1_IRQn = 36, /**< Serial Peripheral Interface 1 (INTMUX source IRQ4) */ + LPUART2_IRQn = 37, /**< LPUART2 status and error (INTMUX source IRQ5) */ + EMVSIM1_IRQn = 38, /**< EMVSIM1 common interrupt (INTMUX source IRQ6) */ + I2C1_IRQn = 39, /**< Inter-Integrated Circuit 1 (INTMUX source IRQ7) */ + TSI0_IRQn = 40, /**< Touch Sensing Input 0 (INTMUX source IRQ8) */ + PMC_IRQn = 41, /**< PMC controller low-voltage detect, low-voltage warning (INTMUX source IRQ9) */ + FTFA_IRQn = 42, /**< FTFA command complete/read collision (INTMUX source IRQ10) */ + MCG_IRQn = 43, /**< Multipurpose clock generator (INTMUX source IRQ11) */ + WDOG_EWM_IRQn = 44, /**< Single interrupt vector for WDOG and EWM (INTMUX source IRQ12) */ + DAC0_IRQn = 45, /**< Digital-to-analog converter 0 (INTMUX source IRQ13) */ + TRNG0_IRQn = 46, /**< True randon number generator (INTMUX source IRQ14) */ + Reserved63_IRQn = 47, /**< Reserved interrupt (INTMUX source IRQ15) */ + CMP0_IRQn = 48, /**< Comparator 0 (INTMUX source IRQ16) */ + Reserved65_IRQn = 49, /**< Reserved interrupt (INTMUX source IRQ17) */ + RTC_Alarm_IRQn = 50, /**< Real time clock (INTMUX source IRQ18) */ + Reserved67_IRQn = 51, /**< Reserved interrupt (INTMUX source IRQ19) */ + Reserved68_IRQn = 52, /**< Reserved interrupt (INTMUX source IRQ20) */ + Reserved69_IRQn = 53, /**< Reserved interrupt (INTMUX source IRQ21) */ + Reserved70_IRQn = 54, /**< Reserved interrupt (INTMUX source IRQ22) */ + Reserved71_IRQn = 55, /**< Reserved interrupt (INTMUX source IRQ23) */ + DMA4_IRQn = 56, /**< DMA channel 4 transfer complete (INTMUX source IRQ24) */ + DMA5_IRQn = 57, /**< DMA channel 5 transfer complete (INTMUX source IRQ25) */ + DMA6_IRQn = 58, /**< DMA channel 6 transfer complete (INTMUX source IRQ26) */ + DMA7_IRQn = 59, /**< DMA channel 7 transfer complete (INTMUX source IRQ27) */ + Reserved76_IRQn = 60, /**< Reserved interrupt (INTMUX source IRQ28) */ + Reserved77_IRQn = 61, /**< Reserved interrupt (INTMUX source IRQ29) */ + Reserved78_IRQn = 62, /**< Reserved interrupt (INTMUX source IRQ30) */ + Reserved79_IRQn = 63 /**< Reserved interrupt (INTMUX source IRQ31) */ +} IRQn_Type; + +/*! + * @} + */ /* end of group Interrupt_vector_numbers */ + + +/* ---------------------------------------------------------------------------- + -- Cortex M0 Core Configuration + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup Cortex_Core_Configuration Cortex M0 Core Configuration + * @{ + */ + +#define __CM0PLUS_REV 0x0000 /**< Core revision r0p0 */ +#define __MPU_PRESENT 0 /**< Defines if an MPU is present or not */ +#define __VTOR_PRESENT 1 /**< Defines if VTOR is present or not */ +#define __NVIC_PRIO_BITS 2 /**< Number of priority bits implemented in the NVIC */ +#define __Vendor_SysTickConfig 0 /**< Vendor specific implementation of SysTickConfig is defined */ + +#include "core_cm0plus.h" /* Core Peripheral Access Layer */ +#include "system_MKL82Z7.h" /* Device specific configuration file */ + +/*! + * @} + */ /* end of group Cortex_Core_Configuration */ + + +/* ---------------------------------------------------------------------------- + -- Mapping Information + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup Mapping_Information Mapping Information + * @{ + */ + +/** Mapping Information */ +/*! + * @addtogroup edma_request + * @{ + */ + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! + * @brief Structure for the DMA hardware request + * + * Defines the structure for the DMA hardware request collections. The user can configure the + * hardware request into DMAMUX to trigger the DMA transfer accordingly. The index + * of the hardware request varies according to the to SoC. + */ +typedef enum _dma_request_source +{ + kDmaRequestMux0Disable = 0|0x100U, /**< DMAMUX TriggerDisabled. */ + kDmaRequestMux0FlexIO0Channel0 = 1|0x100U, /**< FLEXIO0. */ + kDmaRequestMux0FlexIO0Channel1 = 2|0x100U, /**< FLEXIO0. */ + kDmaRequestMux0FlexIO0Channel2 = 3|0x100U, /**< FLEXIO0. */ + kDmaRequestMux0FlexIO0Channel3 = 4|0x100U, /**< FLEXIO0. */ + kDmaRequestMux0FlexIO0Channel4 = 5|0x100U, /**< FLEXIO0. */ + kDmaRequestMux0FlexIO0Channel5 = 6|0x100U, /**< FLEXIO0. */ + kDmaRequestMux0FlexIO0Channel6 = 7|0x100U, /**< FLEXIO0. */ + kDmaRequestMux0FlexIO0Channel7 = 8|0x100U, /**< FLEXIO0. */ + kDmaRequestMux0I2C0 = 9|0x100U, /**< I2C0 Transmit or Receive. */ + kDmaRequestMux0I2C1 = 10|0x100U, /**< I2C1 Transmit or Receive. */ + kDmaRequestMux0Reserved11 = 11|0x100U, /**< Reserved11 */ + kDmaRequestMux0Reserved12 = 12|0x100U, /**< Reserved12 */ + kDmaRequestMux0Reserved13 = 13|0x100U, /**< Reserved13 */ + kDmaRequestMux0Reserved14 = 14|0x100U, /**< Reserved14 */ + kDmaRequestMux0LPUART0Rx = 15|0x100U, /**< LPUART0 Receive. */ + kDmaRequestMux0LPUART0Tx = 16|0x100U, /**< LPUART0 Transmit. */ + kDmaRequestMux0LPUART1Rx = 17|0x100U, /**< LPUART1 Receive. */ + kDmaRequestMux0LPUART1Tx = 18|0x100U, /**< LPUART1 Transmit. */ + kDmaRequestMux0LPUART2Rx = 19|0x100U, /**< LPUART2 Receive. */ + kDmaRequestMux0LPUART2Tx = 20|0x100U, /**< LPUART2 Transmit. */ + kDmaRequestMux0SPI0Rx = 21|0x100U, /**< SPI0 Receive. */ + kDmaRequestMux0SPI0Tx = 22|0x100U, /**< SPI0 Transmit. */ + kDmaRequestMux0SPI1Rx = 23|0x100U, /**< SPI1 Receive. */ + kDmaRequestMux0SPI1Tx = 24|0x100U, /**< SPI1 Transmit. */ + kDmaRequestMux0QSPI0Rx = 25|0x100U, /**< QuadSPI0 Receive. */ + kDmaRequestMux0QSPI0Tx = 26|0x100U, /**< QuadSPI0 Transmit. */ + kDmaRequestMux0TPM0Channel0 = 27|0x100U, /**< TPM0 C0V. */ + kDmaRequestMux0TPM0Channel1 = 28|0x100U, /**< TPM0 C1V. */ + kDmaRequestMux0TPM0Channel2 = 29|0x100U, /**< TPM0 C2V. */ + kDmaRequestMux0TPM0Channel3 = 30|0x100U, /**< TPM0 C3V. */ + kDmaRequestMux0TPM0Channel4 = 31|0x100U, /**< TPM0 C4V. */ + kDmaRequestMux0TPM0Channel5 = 32|0x100U, /**< TPM0 C5V. */ + kDmaRequestMux0Reserved33 = 33|0x100U, /**< Reserved33 */ + kDmaRequestMux0Reserved34 = 34|0x100U, /**< Reserved34 */ + kDmaRequestMux0TPM0Overflow = 35|0x100U, /**< TPM0. */ + kDmaRequestMux0TPM1Channel0 = 36|0x100U, /**< TPM1 C0V. */ + kDmaRequestMux0TPM1Channel1 = 37|0x100U, /**< TPM1 C1V. */ + kDmaRequestMux0TPM1Overflow = 38|0x100U, /**< TPM1. */ + kDmaRequestMux0TPM2Channel0 = 39|0x100U, /**< TPM2 C0V. */ + kDmaRequestMux0TPM2Channel1 = 40|0x100U, /**< TPM2 C1V. */ + kDmaRequestMux0TPM2Overflow = 41|0x100U, /**< TPM2. */ + kDmaRequestMux0TSI0 = 42|0x100U, /**< TSI0. */ + kDmaRequestMux0EMVSIM0Rx = 43|0x100U, /**< EMVSIM0 Receive. */ + kDmaRequestMux0EMVSIM0Tx = 44|0x100U, /**< EMVSIM0 Transmit. */ + kDmaRequestMux0EMVSIM1Rx = 45|0x100U, /**< EMVSIM1 Receive. */ + kDmaRequestMux0EMVSIM1Tx = 46|0x100U, /**< EMVSIM1 Transmit. */ + kDmaRequestMux0PortA = 47|0x100U, /**< PTA. */ + kDmaRequestMux0PortB = 48|0x100U, /**< PTB. */ + kDmaRequestMux0PortC = 49|0x100U, /**< PTC. */ + kDmaRequestMux0PortD = 50|0x100U, /**< PTD. */ + kDmaRequestMux0PortE = 51|0x100U, /**< PTE. */ + kDmaRequestMux0ADC0 = 52|0x100U, /**< ADC0. */ + kDmaRequestMux0Reserved53 = 53|0x100U, /**< Reserved53 */ + kDmaRequestMux0DAC0 = 54|0x100U, /**< DAC0. */ + kDmaRequestMux0LTC0PKHA = 55|0x100U, /**< LTC0 PKHA. */ + kDmaRequestMux0CMP0 = 56|0x100U, /**< CMP0. */ + kDmaRequestMux0Reserved57 = 57|0x100U, /**< Reserved57 */ + kDmaRequestMux0LTC0InputFIFO = 58|0x100U, /**< LTC0 Input FIFO. */ + kDmaRequestMux0LTC0OutputFIFO = 59|0x100U, /**< LTC0 Output FIFO. */ + kDmaRequestMux0AlwaysOn60 = 60|0x100U, /**< DMAMUX Always Enabled slot. */ + kDmaRequestMux0AlwaysOn61 = 61|0x100U, /**< DMAMUX Always Enabled slot. */ + kDmaRequestMux0AlwaysOn62 = 62|0x100U, /**< DMAMUX Always Enabled slot. */ + kDmaRequestMux0AlwaysOn63 = 63|0x100U, /**< DMAMUX Always Enabled slot. */ +} dma_request_source_t; + +/* @} */ + + +/*! + * @} + */ /* end of group Mapping_Information */ + + +/* ---------------------------------------------------------------------------- + -- Device Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup Peripheral_access_layer Device Peripheral Access Layer + * @{ + */ + + +/* +** Start of section using anonymous unions +*/ + +#if defined(__ARMCC_VERSION) + #pragma push + #pragma anon_unions +#elif defined(__CWCC__) + #pragma push + #pragma cpp_extensions on +#elif defined(__GNUC__) + /* anonymous unions are enabled by default */ +#elif defined(__IAR_SYSTEMS_ICC__) + #pragma language=extended +#else + #error Not supported compiler type +#endif + +/* ---------------------------------------------------------------------------- + -- ADC Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup ADC_Peripheral_Access_Layer ADC Peripheral Access Layer + * @{ + */ + +/** ADC - Register Layout Typedef */ +typedef struct { + __IO uint32_t SC1[2]; /**< ADC Status and Control Registers 1, array offset: 0x0, array step: 0x4 */ + __IO uint32_t CFG1; /**< ADC Configuration Register 1, offset: 0x8 */ + __IO uint32_t CFG2; /**< ADC Configuration Register 2, offset: 0xC */ + __I uint32_t R[2]; /**< ADC Data Result Register, array offset: 0x10, array step: 0x4 */ + __IO uint32_t CV1; /**< Compare Value Registers, offset: 0x18 */ + __IO uint32_t CV2; /**< Compare Value Registers, offset: 0x1C */ + __IO uint32_t SC2; /**< Status and Control Register 2, offset: 0x20 */ + __IO uint32_t SC3; /**< Status and Control Register 3, offset: 0x24 */ + __IO uint32_t OFS; /**< ADC Offset Correction Register, offset: 0x28 */ + __IO uint32_t PG; /**< ADC Plus-Side Gain Register, offset: 0x2C */ + __IO uint32_t MG; /**< ADC Minus-Side Gain Register, offset: 0x30 */ + __IO uint32_t CLPD; /**< ADC Plus-Side General Calibration Value Register, offset: 0x34 */ + __IO uint32_t CLPS; /**< ADC Plus-Side General Calibration Value Register, offset: 0x38 */ + __IO uint32_t CLP4; /**< ADC Plus-Side General Calibration Value Register, offset: 0x3C */ + __IO uint32_t CLP3; /**< ADC Plus-Side General Calibration Value Register, offset: 0x40 */ + __IO uint32_t CLP2; /**< ADC Plus-Side General Calibration Value Register, offset: 0x44 */ + __IO uint32_t CLP1; /**< ADC Plus-Side General Calibration Value Register, offset: 0x48 */ + __IO uint32_t CLP0; /**< ADC Plus-Side General Calibration Value Register, offset: 0x4C */ + uint8_t RESERVED_0[4]; + __IO uint32_t CLMD; /**< ADC Minus-Side General Calibration Value Register, offset: 0x54 */ + __IO uint32_t CLMS; /**< ADC Minus-Side General Calibration Value Register, offset: 0x58 */ + __IO uint32_t CLM4; /**< ADC Minus-Side General Calibration Value Register, offset: 0x5C */ + __IO uint32_t CLM3; /**< ADC Minus-Side General Calibration Value Register, offset: 0x60 */ + __IO uint32_t CLM2; /**< ADC Minus-Side General Calibration Value Register, offset: 0x64 */ + __IO uint32_t CLM1; /**< ADC Minus-Side General Calibration Value Register, offset: 0x68 */ + __IO uint32_t CLM0; /**< ADC Minus-Side General Calibration Value Register, offset: 0x6C */ +} ADC_Type; + +/* ---------------------------------------------------------------------------- + -- ADC Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup ADC_Register_Masks ADC Register Masks + * @{ + */ + +/*! @name SC1 - ADC Status and Control Registers 1 */ +#define ADC_SC1_ADCH_MASK (0x1FU) +#define ADC_SC1_ADCH_SHIFT (0U) +#define ADC_SC1_ADCH(x) (((uint32_t)(((uint32_t)(x)) << ADC_SC1_ADCH_SHIFT)) & ADC_SC1_ADCH_MASK) +#define ADC_SC1_DIFF_MASK (0x20U) +#define ADC_SC1_DIFF_SHIFT (5U) +#define ADC_SC1_DIFF(x) (((uint32_t)(((uint32_t)(x)) << ADC_SC1_DIFF_SHIFT)) & ADC_SC1_DIFF_MASK) +#define ADC_SC1_AIEN_MASK (0x40U) +#define ADC_SC1_AIEN_SHIFT (6U) +#define ADC_SC1_AIEN(x) (((uint32_t)(((uint32_t)(x)) << ADC_SC1_AIEN_SHIFT)) & ADC_SC1_AIEN_MASK) +#define ADC_SC1_COCO_MASK (0x80U) +#define ADC_SC1_COCO_SHIFT (7U) +#define ADC_SC1_COCO(x) (((uint32_t)(((uint32_t)(x)) << ADC_SC1_COCO_SHIFT)) & ADC_SC1_COCO_MASK) + +/* The count of ADC_SC1 */ +#define ADC_SC1_COUNT (2U) + +/*! @name CFG1 - ADC Configuration Register 1 */ +#define ADC_CFG1_ADICLK_MASK (0x3U) +#define ADC_CFG1_ADICLK_SHIFT (0U) +#define ADC_CFG1_ADICLK(x) (((uint32_t)(((uint32_t)(x)) << ADC_CFG1_ADICLK_SHIFT)) & ADC_CFG1_ADICLK_MASK) +#define ADC_CFG1_MODE_MASK (0xCU) +#define ADC_CFG1_MODE_SHIFT (2U) +#define ADC_CFG1_MODE(x) (((uint32_t)(((uint32_t)(x)) << ADC_CFG1_MODE_SHIFT)) & ADC_CFG1_MODE_MASK) +#define ADC_CFG1_ADLSMP_MASK (0x10U) +#define ADC_CFG1_ADLSMP_SHIFT (4U) +#define ADC_CFG1_ADLSMP(x) (((uint32_t)(((uint32_t)(x)) << ADC_CFG1_ADLSMP_SHIFT)) & ADC_CFG1_ADLSMP_MASK) +#define ADC_CFG1_ADIV_MASK (0x60U) +#define ADC_CFG1_ADIV_SHIFT (5U) +#define ADC_CFG1_ADIV(x) (((uint32_t)(((uint32_t)(x)) << ADC_CFG1_ADIV_SHIFT)) & ADC_CFG1_ADIV_MASK) +#define ADC_CFG1_ADLPC_MASK (0x80U) +#define ADC_CFG1_ADLPC_SHIFT (7U) +#define ADC_CFG1_ADLPC(x) (((uint32_t)(((uint32_t)(x)) << ADC_CFG1_ADLPC_SHIFT)) & ADC_CFG1_ADLPC_MASK) + +/*! @name CFG2 - ADC Configuration Register 2 */ +#define ADC_CFG2_ADLSTS_MASK (0x3U) +#define ADC_CFG2_ADLSTS_SHIFT (0U) +#define ADC_CFG2_ADLSTS(x) (((uint32_t)(((uint32_t)(x)) << ADC_CFG2_ADLSTS_SHIFT)) & ADC_CFG2_ADLSTS_MASK) +#define ADC_CFG2_ADHSC_MASK (0x4U) +#define ADC_CFG2_ADHSC_SHIFT (2U) +#define ADC_CFG2_ADHSC(x) (((uint32_t)(((uint32_t)(x)) << ADC_CFG2_ADHSC_SHIFT)) & ADC_CFG2_ADHSC_MASK) +#define ADC_CFG2_ADACKEN_MASK (0x8U) +#define ADC_CFG2_ADACKEN_SHIFT (3U) +#define ADC_CFG2_ADACKEN(x) (((uint32_t)(((uint32_t)(x)) << ADC_CFG2_ADACKEN_SHIFT)) & ADC_CFG2_ADACKEN_MASK) +#define ADC_CFG2_MUXSEL_MASK (0x10U) +#define ADC_CFG2_MUXSEL_SHIFT (4U) +#define ADC_CFG2_MUXSEL(x) (((uint32_t)(((uint32_t)(x)) << ADC_CFG2_MUXSEL_SHIFT)) & ADC_CFG2_MUXSEL_MASK) + +/*! @name R - ADC Data Result Register */ +#define ADC_R_D_MASK (0xFFFFU) +#define ADC_R_D_SHIFT (0U) +#define ADC_R_D(x) (((uint32_t)(((uint32_t)(x)) << ADC_R_D_SHIFT)) & ADC_R_D_MASK) + +/* The count of ADC_R */ +#define ADC_R_COUNT (2U) + +/*! @name CV1 - Compare Value Registers */ +#define ADC_CV1_CV_MASK (0xFFFFU) +#define ADC_CV1_CV_SHIFT (0U) +#define ADC_CV1_CV(x) (((uint32_t)(((uint32_t)(x)) << ADC_CV1_CV_SHIFT)) & ADC_CV1_CV_MASK) + +/*! @name CV2 - Compare Value Registers */ +#define ADC_CV2_CV_MASK (0xFFFFU) +#define ADC_CV2_CV_SHIFT (0U) +#define ADC_CV2_CV(x) (((uint32_t)(((uint32_t)(x)) << ADC_CV2_CV_SHIFT)) & ADC_CV2_CV_MASK) + +/*! @name SC2 - Status and Control Register 2 */ +#define ADC_SC2_REFSEL_MASK (0x3U) +#define ADC_SC2_REFSEL_SHIFT (0U) +#define ADC_SC2_REFSEL(x) (((uint32_t)(((uint32_t)(x)) << ADC_SC2_REFSEL_SHIFT)) & ADC_SC2_REFSEL_MASK) +#define ADC_SC2_DMAEN_MASK (0x4U) +#define ADC_SC2_DMAEN_SHIFT (2U) +#define ADC_SC2_DMAEN(x) (((uint32_t)(((uint32_t)(x)) << ADC_SC2_DMAEN_SHIFT)) & ADC_SC2_DMAEN_MASK) +#define ADC_SC2_ACREN_MASK (0x8U) +#define ADC_SC2_ACREN_SHIFT (3U) +#define ADC_SC2_ACREN(x) (((uint32_t)(((uint32_t)(x)) << ADC_SC2_ACREN_SHIFT)) & ADC_SC2_ACREN_MASK) +#define ADC_SC2_ACFGT_MASK (0x10U) +#define ADC_SC2_ACFGT_SHIFT (4U) +#define ADC_SC2_ACFGT(x) (((uint32_t)(((uint32_t)(x)) << ADC_SC2_ACFGT_SHIFT)) & ADC_SC2_ACFGT_MASK) +#define ADC_SC2_ACFE_MASK (0x20U) +#define ADC_SC2_ACFE_SHIFT (5U) +#define ADC_SC2_ACFE(x) (((uint32_t)(((uint32_t)(x)) << ADC_SC2_ACFE_SHIFT)) & ADC_SC2_ACFE_MASK) +#define ADC_SC2_ADTRG_MASK (0x40U) +#define ADC_SC2_ADTRG_SHIFT (6U) +#define ADC_SC2_ADTRG(x) (((uint32_t)(((uint32_t)(x)) << ADC_SC2_ADTRG_SHIFT)) & ADC_SC2_ADTRG_MASK) +#define ADC_SC2_ADACT_MASK (0x80U) +#define ADC_SC2_ADACT_SHIFT (7U) +#define ADC_SC2_ADACT(x) (((uint32_t)(((uint32_t)(x)) << ADC_SC2_ADACT_SHIFT)) & ADC_SC2_ADACT_MASK) + +/*! @name SC3 - Status and Control Register 3 */ +#define ADC_SC3_AVGS_MASK (0x3U) +#define ADC_SC3_AVGS_SHIFT (0U) +#define ADC_SC3_AVGS(x) (((uint32_t)(((uint32_t)(x)) << ADC_SC3_AVGS_SHIFT)) & ADC_SC3_AVGS_MASK) +#define ADC_SC3_AVGE_MASK (0x4U) +#define ADC_SC3_AVGE_SHIFT (2U) +#define ADC_SC3_AVGE(x) (((uint32_t)(((uint32_t)(x)) << ADC_SC3_AVGE_SHIFT)) & ADC_SC3_AVGE_MASK) +#define ADC_SC3_ADCO_MASK (0x8U) +#define ADC_SC3_ADCO_SHIFT (3U) +#define ADC_SC3_ADCO(x) (((uint32_t)(((uint32_t)(x)) << ADC_SC3_ADCO_SHIFT)) & ADC_SC3_ADCO_MASK) +#define ADC_SC3_CALF_MASK (0x40U) +#define ADC_SC3_CALF_SHIFT (6U) +#define ADC_SC3_CALF(x) (((uint32_t)(((uint32_t)(x)) << ADC_SC3_CALF_SHIFT)) & ADC_SC3_CALF_MASK) +#define ADC_SC3_CAL_MASK (0x80U) +#define ADC_SC3_CAL_SHIFT (7U) +#define ADC_SC3_CAL(x) (((uint32_t)(((uint32_t)(x)) << ADC_SC3_CAL_SHIFT)) & ADC_SC3_CAL_MASK) + +/*! @name OFS - ADC Offset Correction Register */ +#define ADC_OFS_OFS_MASK (0xFFFFU) +#define ADC_OFS_OFS_SHIFT (0U) +#define ADC_OFS_OFS(x) (((uint32_t)(((uint32_t)(x)) << ADC_OFS_OFS_SHIFT)) & ADC_OFS_OFS_MASK) + +/*! @name PG - ADC Plus-Side Gain Register */ +#define ADC_PG_PG_MASK (0xFFFFU) +#define ADC_PG_PG_SHIFT (0U) +#define ADC_PG_PG(x) (((uint32_t)(((uint32_t)(x)) << ADC_PG_PG_SHIFT)) & ADC_PG_PG_MASK) + +/*! @name MG - ADC Minus-Side Gain Register */ +#define ADC_MG_MG_MASK (0xFFFFU) +#define ADC_MG_MG_SHIFT (0U) +#define ADC_MG_MG(x) (((uint32_t)(((uint32_t)(x)) << ADC_MG_MG_SHIFT)) & ADC_MG_MG_MASK) + +/*! @name CLPD - ADC Plus-Side General Calibration Value Register */ +#define ADC_CLPD_CLPD_MASK (0x3FU) +#define ADC_CLPD_CLPD_SHIFT (0U) +#define ADC_CLPD_CLPD(x) (((uint32_t)(((uint32_t)(x)) << ADC_CLPD_CLPD_SHIFT)) & ADC_CLPD_CLPD_MASK) + +/*! @name CLPS - ADC Plus-Side General Calibration Value Register */ +#define ADC_CLPS_CLPS_MASK (0x3FU) +#define ADC_CLPS_CLPS_SHIFT (0U) +#define ADC_CLPS_CLPS(x) (((uint32_t)(((uint32_t)(x)) << ADC_CLPS_CLPS_SHIFT)) & ADC_CLPS_CLPS_MASK) + +/*! @name CLP4 - ADC Plus-Side General Calibration Value Register */ +#define ADC_CLP4_CLP4_MASK (0x3FFU) +#define ADC_CLP4_CLP4_SHIFT (0U) +#define ADC_CLP4_CLP4(x) (((uint32_t)(((uint32_t)(x)) << ADC_CLP4_CLP4_SHIFT)) & ADC_CLP4_CLP4_MASK) + +/*! @name CLP3 - ADC Plus-Side General Calibration Value Register */ +#define ADC_CLP3_CLP3_MASK (0x1FFU) +#define ADC_CLP3_CLP3_SHIFT (0U) +#define ADC_CLP3_CLP3(x) (((uint32_t)(((uint32_t)(x)) << ADC_CLP3_CLP3_SHIFT)) & ADC_CLP3_CLP3_MASK) + +/*! @name CLP2 - ADC Plus-Side General Calibration Value Register */ +#define ADC_CLP2_CLP2_MASK (0xFFU) +#define ADC_CLP2_CLP2_SHIFT (0U) +#define ADC_CLP2_CLP2(x) (((uint32_t)(((uint32_t)(x)) << ADC_CLP2_CLP2_SHIFT)) & ADC_CLP2_CLP2_MASK) + +/*! @name CLP1 - ADC Plus-Side General Calibration Value Register */ +#define ADC_CLP1_CLP1_MASK (0x7FU) +#define ADC_CLP1_CLP1_SHIFT (0U) +#define ADC_CLP1_CLP1(x) (((uint32_t)(((uint32_t)(x)) << ADC_CLP1_CLP1_SHIFT)) & ADC_CLP1_CLP1_MASK) + +/*! @name CLP0 - ADC Plus-Side General Calibration Value Register */ +#define ADC_CLP0_CLP0_MASK (0x3FU) +#define ADC_CLP0_CLP0_SHIFT (0U) +#define ADC_CLP0_CLP0(x) (((uint32_t)(((uint32_t)(x)) << ADC_CLP0_CLP0_SHIFT)) & ADC_CLP0_CLP0_MASK) + +/*! @name CLMD - ADC Minus-Side General Calibration Value Register */ +#define ADC_CLMD_CLMD_MASK (0x3FU) +#define ADC_CLMD_CLMD_SHIFT (0U) +#define ADC_CLMD_CLMD(x) (((uint32_t)(((uint32_t)(x)) << ADC_CLMD_CLMD_SHIFT)) & ADC_CLMD_CLMD_MASK) + +/*! @name CLMS - ADC Minus-Side General Calibration Value Register */ +#define ADC_CLMS_CLMS_MASK (0x3FU) +#define ADC_CLMS_CLMS_SHIFT (0U) +#define ADC_CLMS_CLMS(x) (((uint32_t)(((uint32_t)(x)) << ADC_CLMS_CLMS_SHIFT)) & ADC_CLMS_CLMS_MASK) + +/*! @name CLM4 - ADC Minus-Side General Calibration Value Register */ +#define ADC_CLM4_CLM4_MASK (0x3FFU) +#define ADC_CLM4_CLM4_SHIFT (0U) +#define ADC_CLM4_CLM4(x) (((uint32_t)(((uint32_t)(x)) << ADC_CLM4_CLM4_SHIFT)) & ADC_CLM4_CLM4_MASK) + +/*! @name CLM3 - ADC Minus-Side General Calibration Value Register */ +#define ADC_CLM3_CLM3_MASK (0x1FFU) +#define ADC_CLM3_CLM3_SHIFT (0U) +#define ADC_CLM3_CLM3(x) (((uint32_t)(((uint32_t)(x)) << ADC_CLM3_CLM3_SHIFT)) & ADC_CLM3_CLM3_MASK) + +/*! @name CLM2 - ADC Minus-Side General Calibration Value Register */ +#define ADC_CLM2_CLM2_MASK (0xFFU) +#define ADC_CLM2_CLM2_SHIFT (0U) +#define ADC_CLM2_CLM2(x) (((uint32_t)(((uint32_t)(x)) << ADC_CLM2_CLM2_SHIFT)) & ADC_CLM2_CLM2_MASK) + +/*! @name CLM1 - ADC Minus-Side General Calibration Value Register */ +#define ADC_CLM1_CLM1_MASK (0x7FU) +#define ADC_CLM1_CLM1_SHIFT (0U) +#define ADC_CLM1_CLM1(x) (((uint32_t)(((uint32_t)(x)) << ADC_CLM1_CLM1_SHIFT)) & ADC_CLM1_CLM1_MASK) + +/*! @name CLM0 - ADC Minus-Side General Calibration Value Register */ +#define ADC_CLM0_CLM0_MASK (0x3FU) +#define ADC_CLM0_CLM0_SHIFT (0U) +#define ADC_CLM0_CLM0(x) (((uint32_t)(((uint32_t)(x)) << ADC_CLM0_CLM0_SHIFT)) & ADC_CLM0_CLM0_MASK) + + +/*! + * @} + */ /* end of group ADC_Register_Masks */ + + +/* ADC - Peripheral instance base addresses */ +/** Peripheral ADC0 base address */ +#define ADC0_BASE (0x4003B000u) +/** Peripheral ADC0 base pointer */ +#define ADC0 ((ADC_Type *)ADC0_BASE) +/** Array initializer of ADC peripheral base addresses */ +#define ADC_BASE_ADDRS { ADC0_BASE } +/** Array initializer of ADC peripheral base pointers */ +#define ADC_BASE_PTRS { ADC0 } +/** Interrupt vectors for the ADC peripheral type */ +#define ADC_IRQS { ADC0_IRQn } + +/*! + * @} + */ /* end of group ADC_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- AIPS Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup AIPS_Peripheral_Access_Layer AIPS Peripheral Access Layer + * @{ + */ + +/** AIPS - Register Layout Typedef */ +typedef struct { + __IO uint32_t MPRA; /**< Master Privilege Register A, offset: 0x0 */ + uint8_t RESERVED_0[28]; + __IO uint32_t PACRA; /**< Peripheral Access Control Register, offset: 0x20 */ + __IO uint32_t PACRB; /**< Peripheral Access Control Register, offset: 0x24 */ + __IO uint32_t PACRC; /**< Peripheral Access Control Register, offset: 0x28 */ + __IO uint32_t PACRD; /**< Peripheral Access Control Register, offset: 0x2C */ + uint8_t RESERVED_1[16]; + __IO uint32_t PACRE; /**< Peripheral Access Control Register, offset: 0x40 */ + __IO uint32_t PACRF; /**< Peripheral Access Control Register, offset: 0x44 */ + __IO uint32_t PACRG; /**< Peripheral Access Control Register, offset: 0x48 */ + __IO uint32_t PACRH; /**< Peripheral Access Control Register, offset: 0x4C */ + __IO uint32_t PACRI; /**< Peripheral Access Control Register, offset: 0x50 */ + __IO uint32_t PACRJ; /**< Peripheral Access Control Register, offset: 0x54 */ + __IO uint32_t PACRK; /**< Peripheral Access Control Register, offset: 0x58 */ + __IO uint32_t PACRL; /**< Peripheral Access Control Register, offset: 0x5C */ + __IO uint32_t PACRM; /**< Peripheral Access Control Register, offset: 0x60 */ + __IO uint32_t PACRN; /**< Peripheral Access Control Register, offset: 0x64 */ + __IO uint32_t PACRO; /**< Peripheral Access Control Register, offset: 0x68 */ + __IO uint32_t PACRP; /**< Peripheral Access Control Register, offset: 0x6C */ +} AIPS_Type; + +/* ---------------------------------------------------------------------------- + -- AIPS Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup AIPS_Register_Masks AIPS Register Masks + * @{ + */ + +/*! @name MPRA - Master Privilege Register A */ +#define AIPS_MPRA_MPL4_MASK (0x1000U) +#define AIPS_MPRA_MPL4_SHIFT (12U) +#define AIPS_MPRA_MPL4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_MPRA_MPL4_SHIFT)) & AIPS_MPRA_MPL4_MASK) +#define AIPS_MPRA_MTW4_MASK (0x2000U) +#define AIPS_MPRA_MTW4_SHIFT (13U) +#define AIPS_MPRA_MTW4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_MPRA_MTW4_SHIFT)) & AIPS_MPRA_MTW4_MASK) +#define AIPS_MPRA_MTR4_MASK (0x4000U) +#define AIPS_MPRA_MTR4_SHIFT (14U) +#define AIPS_MPRA_MTR4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_MPRA_MTR4_SHIFT)) & AIPS_MPRA_MTR4_MASK) +#define AIPS_MPRA_MPL3_MASK (0x10000U) +#define AIPS_MPRA_MPL3_SHIFT (16U) +#define AIPS_MPRA_MPL3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_MPRA_MPL3_SHIFT)) & AIPS_MPRA_MPL3_MASK) +#define AIPS_MPRA_MTW3_MASK (0x20000U) +#define AIPS_MPRA_MTW3_SHIFT (17U) +#define AIPS_MPRA_MTW3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_MPRA_MTW3_SHIFT)) & AIPS_MPRA_MTW3_MASK) +#define AIPS_MPRA_MTR3_MASK (0x40000U) +#define AIPS_MPRA_MTR3_SHIFT (18U) +#define AIPS_MPRA_MTR3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_MPRA_MTR3_SHIFT)) & AIPS_MPRA_MTR3_MASK) +#define AIPS_MPRA_MPL2_MASK (0x100000U) +#define AIPS_MPRA_MPL2_SHIFT (20U) +#define AIPS_MPRA_MPL2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_MPRA_MPL2_SHIFT)) & AIPS_MPRA_MPL2_MASK) +#define AIPS_MPRA_MTW2_MASK (0x200000U) +#define AIPS_MPRA_MTW2_SHIFT (21U) +#define AIPS_MPRA_MTW2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_MPRA_MTW2_SHIFT)) & AIPS_MPRA_MTW2_MASK) +#define AIPS_MPRA_MTR2_MASK (0x400000U) +#define AIPS_MPRA_MTR2_SHIFT (22U) +#define AIPS_MPRA_MTR2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_MPRA_MTR2_SHIFT)) & AIPS_MPRA_MTR2_MASK) +#define AIPS_MPRA_MPL1_MASK (0x1000000U) +#define AIPS_MPRA_MPL1_SHIFT (24U) +#define AIPS_MPRA_MPL1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_MPRA_MPL1_SHIFT)) & AIPS_MPRA_MPL1_MASK) +#define AIPS_MPRA_MTW1_MASK (0x2000000U) +#define AIPS_MPRA_MTW1_SHIFT (25U) +#define AIPS_MPRA_MTW1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_MPRA_MTW1_SHIFT)) & AIPS_MPRA_MTW1_MASK) +#define AIPS_MPRA_MTR1_MASK (0x4000000U) +#define AIPS_MPRA_MTR1_SHIFT (26U) +#define AIPS_MPRA_MTR1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_MPRA_MTR1_SHIFT)) & AIPS_MPRA_MTR1_MASK) +#define AIPS_MPRA_MPL0_MASK (0x10000000U) +#define AIPS_MPRA_MPL0_SHIFT (28U) +#define AIPS_MPRA_MPL0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_MPRA_MPL0_SHIFT)) & AIPS_MPRA_MPL0_MASK) +#define AIPS_MPRA_MTW0_MASK (0x20000000U) +#define AIPS_MPRA_MTW0_SHIFT (29U) +#define AIPS_MPRA_MTW0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_MPRA_MTW0_SHIFT)) & AIPS_MPRA_MTW0_MASK) +#define AIPS_MPRA_MTR0_MASK (0x40000000U) +#define AIPS_MPRA_MTR0_SHIFT (30U) +#define AIPS_MPRA_MTR0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_MPRA_MTR0_SHIFT)) & AIPS_MPRA_MTR0_MASK) + +/*! @name PACRA - Peripheral Access Control Register */ +#define AIPS_PACRA_TP7_MASK (0x1U) +#define AIPS_PACRA_TP7_SHIFT (0U) +#define AIPS_PACRA_TP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRA_TP7_SHIFT)) & AIPS_PACRA_TP7_MASK) +#define AIPS_PACRA_WP7_MASK (0x2U) +#define AIPS_PACRA_WP7_SHIFT (1U) +#define AIPS_PACRA_WP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRA_WP7_SHIFT)) & AIPS_PACRA_WP7_MASK) +#define AIPS_PACRA_SP7_MASK (0x4U) +#define AIPS_PACRA_SP7_SHIFT (2U) +#define AIPS_PACRA_SP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRA_SP7_SHIFT)) & AIPS_PACRA_SP7_MASK) +#define AIPS_PACRA_TP6_MASK (0x10U) +#define AIPS_PACRA_TP6_SHIFT (4U) +#define AIPS_PACRA_TP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRA_TP6_SHIFT)) & AIPS_PACRA_TP6_MASK) +#define AIPS_PACRA_WP6_MASK (0x20U) +#define AIPS_PACRA_WP6_SHIFT (5U) +#define AIPS_PACRA_WP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRA_WP6_SHIFT)) & AIPS_PACRA_WP6_MASK) +#define AIPS_PACRA_SP6_MASK (0x40U) +#define AIPS_PACRA_SP6_SHIFT (6U) +#define AIPS_PACRA_SP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRA_SP6_SHIFT)) & AIPS_PACRA_SP6_MASK) +#define AIPS_PACRA_TP5_MASK (0x100U) +#define AIPS_PACRA_TP5_SHIFT (8U) +#define AIPS_PACRA_TP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRA_TP5_SHIFT)) & AIPS_PACRA_TP5_MASK) +#define AIPS_PACRA_WP5_MASK (0x200U) +#define AIPS_PACRA_WP5_SHIFT (9U) +#define AIPS_PACRA_WP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRA_WP5_SHIFT)) & AIPS_PACRA_WP5_MASK) +#define AIPS_PACRA_SP5_MASK (0x400U) +#define AIPS_PACRA_SP5_SHIFT (10U) +#define AIPS_PACRA_SP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRA_SP5_SHIFT)) & AIPS_PACRA_SP5_MASK) +#define AIPS_PACRA_TP4_MASK (0x1000U) +#define AIPS_PACRA_TP4_SHIFT (12U) +#define AIPS_PACRA_TP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRA_TP4_SHIFT)) & AIPS_PACRA_TP4_MASK) +#define AIPS_PACRA_WP4_MASK (0x2000U) +#define AIPS_PACRA_WP4_SHIFT (13U) +#define AIPS_PACRA_WP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRA_WP4_SHIFT)) & AIPS_PACRA_WP4_MASK) +#define AIPS_PACRA_SP4_MASK (0x4000U) +#define AIPS_PACRA_SP4_SHIFT (14U) +#define AIPS_PACRA_SP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRA_SP4_SHIFT)) & AIPS_PACRA_SP4_MASK) +#define AIPS_PACRA_TP3_MASK (0x10000U) +#define AIPS_PACRA_TP3_SHIFT (16U) +#define AIPS_PACRA_TP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRA_TP3_SHIFT)) & AIPS_PACRA_TP3_MASK) +#define AIPS_PACRA_WP3_MASK (0x20000U) +#define AIPS_PACRA_WP3_SHIFT (17U) +#define AIPS_PACRA_WP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRA_WP3_SHIFT)) & AIPS_PACRA_WP3_MASK) +#define AIPS_PACRA_SP3_MASK (0x40000U) +#define AIPS_PACRA_SP3_SHIFT (18U) +#define AIPS_PACRA_SP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRA_SP3_SHIFT)) & AIPS_PACRA_SP3_MASK) +#define AIPS_PACRA_TP2_MASK (0x100000U) +#define AIPS_PACRA_TP2_SHIFT (20U) +#define AIPS_PACRA_TP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRA_TP2_SHIFT)) & AIPS_PACRA_TP2_MASK) +#define AIPS_PACRA_WP2_MASK (0x200000U) +#define AIPS_PACRA_WP2_SHIFT (21U) +#define AIPS_PACRA_WP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRA_WP2_SHIFT)) & AIPS_PACRA_WP2_MASK) +#define AIPS_PACRA_SP2_MASK (0x400000U) +#define AIPS_PACRA_SP2_SHIFT (22U) +#define AIPS_PACRA_SP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRA_SP2_SHIFT)) & AIPS_PACRA_SP2_MASK) +#define AIPS_PACRA_TP1_MASK (0x1000000U) +#define AIPS_PACRA_TP1_SHIFT (24U) +#define AIPS_PACRA_TP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRA_TP1_SHIFT)) & AIPS_PACRA_TP1_MASK) +#define AIPS_PACRA_WP1_MASK (0x2000000U) +#define AIPS_PACRA_WP1_SHIFT (25U) +#define AIPS_PACRA_WP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRA_WP1_SHIFT)) & AIPS_PACRA_WP1_MASK) +#define AIPS_PACRA_SP1_MASK (0x4000000U) +#define AIPS_PACRA_SP1_SHIFT (26U) +#define AIPS_PACRA_SP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRA_SP1_SHIFT)) & AIPS_PACRA_SP1_MASK) +#define AIPS_PACRA_TP0_MASK (0x10000000U) +#define AIPS_PACRA_TP0_SHIFT (28U) +#define AIPS_PACRA_TP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRA_TP0_SHIFT)) & AIPS_PACRA_TP0_MASK) +#define AIPS_PACRA_WP0_MASK (0x20000000U) +#define AIPS_PACRA_WP0_SHIFT (29U) +#define AIPS_PACRA_WP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRA_WP0_SHIFT)) & AIPS_PACRA_WP0_MASK) +#define AIPS_PACRA_SP0_MASK (0x40000000U) +#define AIPS_PACRA_SP0_SHIFT (30U) +#define AIPS_PACRA_SP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRA_SP0_SHIFT)) & AIPS_PACRA_SP0_MASK) + +/*! @name PACRB - Peripheral Access Control Register */ +#define AIPS_PACRB_TP7_MASK (0x1U) +#define AIPS_PACRB_TP7_SHIFT (0U) +#define AIPS_PACRB_TP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRB_TP7_SHIFT)) & AIPS_PACRB_TP7_MASK) +#define AIPS_PACRB_WP7_MASK (0x2U) +#define AIPS_PACRB_WP7_SHIFT (1U) +#define AIPS_PACRB_WP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRB_WP7_SHIFT)) & AIPS_PACRB_WP7_MASK) +#define AIPS_PACRB_SP7_MASK (0x4U) +#define AIPS_PACRB_SP7_SHIFT (2U) +#define AIPS_PACRB_SP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRB_SP7_SHIFT)) & AIPS_PACRB_SP7_MASK) +#define AIPS_PACRB_TP6_MASK (0x10U) +#define AIPS_PACRB_TP6_SHIFT (4U) +#define AIPS_PACRB_TP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRB_TP6_SHIFT)) & AIPS_PACRB_TP6_MASK) +#define AIPS_PACRB_WP6_MASK (0x20U) +#define AIPS_PACRB_WP6_SHIFT (5U) +#define AIPS_PACRB_WP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRB_WP6_SHIFT)) & AIPS_PACRB_WP6_MASK) +#define AIPS_PACRB_SP6_MASK (0x40U) +#define AIPS_PACRB_SP6_SHIFT (6U) +#define AIPS_PACRB_SP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRB_SP6_SHIFT)) & AIPS_PACRB_SP6_MASK) +#define AIPS_PACRB_TP5_MASK (0x100U) +#define AIPS_PACRB_TP5_SHIFT (8U) +#define AIPS_PACRB_TP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRB_TP5_SHIFT)) & AIPS_PACRB_TP5_MASK) +#define AIPS_PACRB_WP5_MASK (0x200U) +#define AIPS_PACRB_WP5_SHIFT (9U) +#define AIPS_PACRB_WP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRB_WP5_SHIFT)) & AIPS_PACRB_WP5_MASK) +#define AIPS_PACRB_SP5_MASK (0x400U) +#define AIPS_PACRB_SP5_SHIFT (10U) +#define AIPS_PACRB_SP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRB_SP5_SHIFT)) & AIPS_PACRB_SP5_MASK) +#define AIPS_PACRB_TP4_MASK (0x1000U) +#define AIPS_PACRB_TP4_SHIFT (12U) +#define AIPS_PACRB_TP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRB_TP4_SHIFT)) & AIPS_PACRB_TP4_MASK) +#define AIPS_PACRB_WP4_MASK (0x2000U) +#define AIPS_PACRB_WP4_SHIFT (13U) +#define AIPS_PACRB_WP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRB_WP4_SHIFT)) & AIPS_PACRB_WP4_MASK) +#define AIPS_PACRB_SP4_MASK (0x4000U) +#define AIPS_PACRB_SP4_SHIFT (14U) +#define AIPS_PACRB_SP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRB_SP4_SHIFT)) & AIPS_PACRB_SP4_MASK) +#define AIPS_PACRB_TP3_MASK (0x10000U) +#define AIPS_PACRB_TP3_SHIFT (16U) +#define AIPS_PACRB_TP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRB_TP3_SHIFT)) & AIPS_PACRB_TP3_MASK) +#define AIPS_PACRB_WP3_MASK (0x20000U) +#define AIPS_PACRB_WP3_SHIFT (17U) +#define AIPS_PACRB_WP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRB_WP3_SHIFT)) & AIPS_PACRB_WP3_MASK) +#define AIPS_PACRB_SP3_MASK (0x40000U) +#define AIPS_PACRB_SP3_SHIFT (18U) +#define AIPS_PACRB_SP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRB_SP3_SHIFT)) & AIPS_PACRB_SP3_MASK) +#define AIPS_PACRB_TP2_MASK (0x100000U) +#define AIPS_PACRB_TP2_SHIFT (20U) +#define AIPS_PACRB_TP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRB_TP2_SHIFT)) & AIPS_PACRB_TP2_MASK) +#define AIPS_PACRB_WP2_MASK (0x200000U) +#define AIPS_PACRB_WP2_SHIFT (21U) +#define AIPS_PACRB_WP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRB_WP2_SHIFT)) & AIPS_PACRB_WP2_MASK) +#define AIPS_PACRB_SP2_MASK (0x400000U) +#define AIPS_PACRB_SP2_SHIFT (22U) +#define AIPS_PACRB_SP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRB_SP2_SHIFT)) & AIPS_PACRB_SP2_MASK) +#define AIPS_PACRB_TP1_MASK (0x1000000U) +#define AIPS_PACRB_TP1_SHIFT (24U) +#define AIPS_PACRB_TP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRB_TP1_SHIFT)) & AIPS_PACRB_TP1_MASK) +#define AIPS_PACRB_WP1_MASK (0x2000000U) +#define AIPS_PACRB_WP1_SHIFT (25U) +#define AIPS_PACRB_WP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRB_WP1_SHIFT)) & AIPS_PACRB_WP1_MASK) +#define AIPS_PACRB_SP1_MASK (0x4000000U) +#define AIPS_PACRB_SP1_SHIFT (26U) +#define AIPS_PACRB_SP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRB_SP1_SHIFT)) & AIPS_PACRB_SP1_MASK) +#define AIPS_PACRB_TP0_MASK (0x10000000U) +#define AIPS_PACRB_TP0_SHIFT (28U) +#define AIPS_PACRB_TP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRB_TP0_SHIFT)) & AIPS_PACRB_TP0_MASK) +#define AIPS_PACRB_WP0_MASK (0x20000000U) +#define AIPS_PACRB_WP0_SHIFT (29U) +#define AIPS_PACRB_WP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRB_WP0_SHIFT)) & AIPS_PACRB_WP0_MASK) +#define AIPS_PACRB_SP0_MASK (0x40000000U) +#define AIPS_PACRB_SP0_SHIFT (30U) +#define AIPS_PACRB_SP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRB_SP0_SHIFT)) & AIPS_PACRB_SP0_MASK) + +/*! @name PACRC - Peripheral Access Control Register */ +#define AIPS_PACRC_TP7_MASK (0x1U) +#define AIPS_PACRC_TP7_SHIFT (0U) +#define AIPS_PACRC_TP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRC_TP7_SHIFT)) & AIPS_PACRC_TP7_MASK) +#define AIPS_PACRC_WP7_MASK (0x2U) +#define AIPS_PACRC_WP7_SHIFT (1U) +#define AIPS_PACRC_WP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRC_WP7_SHIFT)) & AIPS_PACRC_WP7_MASK) +#define AIPS_PACRC_SP7_MASK (0x4U) +#define AIPS_PACRC_SP7_SHIFT (2U) +#define AIPS_PACRC_SP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRC_SP7_SHIFT)) & AIPS_PACRC_SP7_MASK) +#define AIPS_PACRC_TP6_MASK (0x10U) +#define AIPS_PACRC_TP6_SHIFT (4U) +#define AIPS_PACRC_TP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRC_TP6_SHIFT)) & AIPS_PACRC_TP6_MASK) +#define AIPS_PACRC_WP6_MASK (0x20U) +#define AIPS_PACRC_WP6_SHIFT (5U) +#define AIPS_PACRC_WP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRC_WP6_SHIFT)) & AIPS_PACRC_WP6_MASK) +#define AIPS_PACRC_SP6_MASK (0x40U) +#define AIPS_PACRC_SP6_SHIFT (6U) +#define AIPS_PACRC_SP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRC_SP6_SHIFT)) & AIPS_PACRC_SP6_MASK) +#define AIPS_PACRC_TP5_MASK (0x100U) +#define AIPS_PACRC_TP5_SHIFT (8U) +#define AIPS_PACRC_TP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRC_TP5_SHIFT)) & AIPS_PACRC_TP5_MASK) +#define AIPS_PACRC_WP5_MASK (0x200U) +#define AIPS_PACRC_WP5_SHIFT (9U) +#define AIPS_PACRC_WP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRC_WP5_SHIFT)) & AIPS_PACRC_WP5_MASK) +#define AIPS_PACRC_SP5_MASK (0x400U) +#define AIPS_PACRC_SP5_SHIFT (10U) +#define AIPS_PACRC_SP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRC_SP5_SHIFT)) & AIPS_PACRC_SP5_MASK) +#define AIPS_PACRC_TP4_MASK (0x1000U) +#define AIPS_PACRC_TP4_SHIFT (12U) +#define AIPS_PACRC_TP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRC_TP4_SHIFT)) & AIPS_PACRC_TP4_MASK) +#define AIPS_PACRC_WP4_MASK (0x2000U) +#define AIPS_PACRC_WP4_SHIFT (13U) +#define AIPS_PACRC_WP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRC_WP4_SHIFT)) & AIPS_PACRC_WP4_MASK) +#define AIPS_PACRC_SP4_MASK (0x4000U) +#define AIPS_PACRC_SP4_SHIFT (14U) +#define AIPS_PACRC_SP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRC_SP4_SHIFT)) & AIPS_PACRC_SP4_MASK) +#define AIPS_PACRC_TP3_MASK (0x10000U) +#define AIPS_PACRC_TP3_SHIFT (16U) +#define AIPS_PACRC_TP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRC_TP3_SHIFT)) & AIPS_PACRC_TP3_MASK) +#define AIPS_PACRC_WP3_MASK (0x20000U) +#define AIPS_PACRC_WP3_SHIFT (17U) +#define AIPS_PACRC_WP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRC_WP3_SHIFT)) & AIPS_PACRC_WP3_MASK) +#define AIPS_PACRC_SP3_MASK (0x40000U) +#define AIPS_PACRC_SP3_SHIFT (18U) +#define AIPS_PACRC_SP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRC_SP3_SHIFT)) & AIPS_PACRC_SP3_MASK) +#define AIPS_PACRC_TP2_MASK (0x100000U) +#define AIPS_PACRC_TP2_SHIFT (20U) +#define AIPS_PACRC_TP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRC_TP2_SHIFT)) & AIPS_PACRC_TP2_MASK) +#define AIPS_PACRC_WP2_MASK (0x200000U) +#define AIPS_PACRC_WP2_SHIFT (21U) +#define AIPS_PACRC_WP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRC_WP2_SHIFT)) & AIPS_PACRC_WP2_MASK) +#define AIPS_PACRC_SP2_MASK (0x400000U) +#define AIPS_PACRC_SP2_SHIFT (22U) +#define AIPS_PACRC_SP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRC_SP2_SHIFT)) & AIPS_PACRC_SP2_MASK) +#define AIPS_PACRC_TP1_MASK (0x1000000U) +#define AIPS_PACRC_TP1_SHIFT (24U) +#define AIPS_PACRC_TP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRC_TP1_SHIFT)) & AIPS_PACRC_TP1_MASK) +#define AIPS_PACRC_WP1_MASK (0x2000000U) +#define AIPS_PACRC_WP1_SHIFT (25U) +#define AIPS_PACRC_WP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRC_WP1_SHIFT)) & AIPS_PACRC_WP1_MASK) +#define AIPS_PACRC_SP1_MASK (0x4000000U) +#define AIPS_PACRC_SP1_SHIFT (26U) +#define AIPS_PACRC_SP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRC_SP1_SHIFT)) & AIPS_PACRC_SP1_MASK) +#define AIPS_PACRC_TP0_MASK (0x10000000U) +#define AIPS_PACRC_TP0_SHIFT (28U) +#define AIPS_PACRC_TP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRC_TP0_SHIFT)) & AIPS_PACRC_TP0_MASK) +#define AIPS_PACRC_WP0_MASK (0x20000000U) +#define AIPS_PACRC_WP0_SHIFT (29U) +#define AIPS_PACRC_WP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRC_WP0_SHIFT)) & AIPS_PACRC_WP0_MASK) +#define AIPS_PACRC_SP0_MASK (0x40000000U) +#define AIPS_PACRC_SP0_SHIFT (30U) +#define AIPS_PACRC_SP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRC_SP0_SHIFT)) & AIPS_PACRC_SP0_MASK) + +/*! @name PACRD - Peripheral Access Control Register */ +#define AIPS_PACRD_TP7_MASK (0x1U) +#define AIPS_PACRD_TP7_SHIFT (0U) +#define AIPS_PACRD_TP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRD_TP7_SHIFT)) & AIPS_PACRD_TP7_MASK) +#define AIPS_PACRD_WP7_MASK (0x2U) +#define AIPS_PACRD_WP7_SHIFT (1U) +#define AIPS_PACRD_WP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRD_WP7_SHIFT)) & AIPS_PACRD_WP7_MASK) +#define AIPS_PACRD_SP7_MASK (0x4U) +#define AIPS_PACRD_SP7_SHIFT (2U) +#define AIPS_PACRD_SP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRD_SP7_SHIFT)) & AIPS_PACRD_SP7_MASK) +#define AIPS_PACRD_TP6_MASK (0x10U) +#define AIPS_PACRD_TP6_SHIFT (4U) +#define AIPS_PACRD_TP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRD_TP6_SHIFT)) & AIPS_PACRD_TP6_MASK) +#define AIPS_PACRD_WP6_MASK (0x20U) +#define AIPS_PACRD_WP6_SHIFT (5U) +#define AIPS_PACRD_WP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRD_WP6_SHIFT)) & AIPS_PACRD_WP6_MASK) +#define AIPS_PACRD_SP6_MASK (0x40U) +#define AIPS_PACRD_SP6_SHIFT (6U) +#define AIPS_PACRD_SP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRD_SP6_SHIFT)) & AIPS_PACRD_SP6_MASK) +#define AIPS_PACRD_TP5_MASK (0x100U) +#define AIPS_PACRD_TP5_SHIFT (8U) +#define AIPS_PACRD_TP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRD_TP5_SHIFT)) & AIPS_PACRD_TP5_MASK) +#define AIPS_PACRD_WP5_MASK (0x200U) +#define AIPS_PACRD_WP5_SHIFT (9U) +#define AIPS_PACRD_WP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRD_WP5_SHIFT)) & AIPS_PACRD_WP5_MASK) +#define AIPS_PACRD_SP5_MASK (0x400U) +#define AIPS_PACRD_SP5_SHIFT (10U) +#define AIPS_PACRD_SP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRD_SP5_SHIFT)) & AIPS_PACRD_SP5_MASK) +#define AIPS_PACRD_TP4_MASK (0x1000U) +#define AIPS_PACRD_TP4_SHIFT (12U) +#define AIPS_PACRD_TP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRD_TP4_SHIFT)) & AIPS_PACRD_TP4_MASK) +#define AIPS_PACRD_WP4_MASK (0x2000U) +#define AIPS_PACRD_WP4_SHIFT (13U) +#define AIPS_PACRD_WP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRD_WP4_SHIFT)) & AIPS_PACRD_WP4_MASK) +#define AIPS_PACRD_SP4_MASK (0x4000U) +#define AIPS_PACRD_SP4_SHIFT (14U) +#define AIPS_PACRD_SP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRD_SP4_SHIFT)) & AIPS_PACRD_SP4_MASK) +#define AIPS_PACRD_TP3_MASK (0x10000U) +#define AIPS_PACRD_TP3_SHIFT (16U) +#define AIPS_PACRD_TP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRD_TP3_SHIFT)) & AIPS_PACRD_TP3_MASK) +#define AIPS_PACRD_WP3_MASK (0x20000U) +#define AIPS_PACRD_WP3_SHIFT (17U) +#define AIPS_PACRD_WP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRD_WP3_SHIFT)) & AIPS_PACRD_WP3_MASK) +#define AIPS_PACRD_SP3_MASK (0x40000U) +#define AIPS_PACRD_SP3_SHIFT (18U) +#define AIPS_PACRD_SP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRD_SP3_SHIFT)) & AIPS_PACRD_SP3_MASK) +#define AIPS_PACRD_TP2_MASK (0x100000U) +#define AIPS_PACRD_TP2_SHIFT (20U) +#define AIPS_PACRD_TP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRD_TP2_SHIFT)) & AIPS_PACRD_TP2_MASK) +#define AIPS_PACRD_WP2_MASK (0x200000U) +#define AIPS_PACRD_WP2_SHIFT (21U) +#define AIPS_PACRD_WP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRD_WP2_SHIFT)) & AIPS_PACRD_WP2_MASK) +#define AIPS_PACRD_SP2_MASK (0x400000U) +#define AIPS_PACRD_SP2_SHIFT (22U) +#define AIPS_PACRD_SP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRD_SP2_SHIFT)) & AIPS_PACRD_SP2_MASK) +#define AIPS_PACRD_TP1_MASK (0x1000000U) +#define AIPS_PACRD_TP1_SHIFT (24U) +#define AIPS_PACRD_TP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRD_TP1_SHIFT)) & AIPS_PACRD_TP1_MASK) +#define AIPS_PACRD_WP1_MASK (0x2000000U) +#define AIPS_PACRD_WP1_SHIFT (25U) +#define AIPS_PACRD_WP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRD_WP1_SHIFT)) & AIPS_PACRD_WP1_MASK) +#define AIPS_PACRD_SP1_MASK (0x4000000U) +#define AIPS_PACRD_SP1_SHIFT (26U) +#define AIPS_PACRD_SP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRD_SP1_SHIFT)) & AIPS_PACRD_SP1_MASK) +#define AIPS_PACRD_TP0_MASK (0x10000000U) +#define AIPS_PACRD_TP0_SHIFT (28U) +#define AIPS_PACRD_TP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRD_TP0_SHIFT)) & AIPS_PACRD_TP0_MASK) +#define AIPS_PACRD_WP0_MASK (0x20000000U) +#define AIPS_PACRD_WP0_SHIFT (29U) +#define AIPS_PACRD_WP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRD_WP0_SHIFT)) & AIPS_PACRD_WP0_MASK) +#define AIPS_PACRD_SP0_MASK (0x40000000U) +#define AIPS_PACRD_SP0_SHIFT (30U) +#define AIPS_PACRD_SP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRD_SP0_SHIFT)) & AIPS_PACRD_SP0_MASK) + +/*! @name PACRE - Peripheral Access Control Register */ +#define AIPS_PACRE_TP7_MASK (0x1U) +#define AIPS_PACRE_TP7_SHIFT (0U) +#define AIPS_PACRE_TP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRE_TP7_SHIFT)) & AIPS_PACRE_TP7_MASK) +#define AIPS_PACRE_WP7_MASK (0x2U) +#define AIPS_PACRE_WP7_SHIFT (1U) +#define AIPS_PACRE_WP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRE_WP7_SHIFT)) & AIPS_PACRE_WP7_MASK) +#define AIPS_PACRE_SP7_MASK (0x4U) +#define AIPS_PACRE_SP7_SHIFT (2U) +#define AIPS_PACRE_SP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRE_SP7_SHIFT)) & AIPS_PACRE_SP7_MASK) +#define AIPS_PACRE_TP6_MASK (0x10U) +#define AIPS_PACRE_TP6_SHIFT (4U) +#define AIPS_PACRE_TP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRE_TP6_SHIFT)) & AIPS_PACRE_TP6_MASK) +#define AIPS_PACRE_WP6_MASK (0x20U) +#define AIPS_PACRE_WP6_SHIFT (5U) +#define AIPS_PACRE_WP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRE_WP6_SHIFT)) & AIPS_PACRE_WP6_MASK) +#define AIPS_PACRE_SP6_MASK (0x40U) +#define AIPS_PACRE_SP6_SHIFT (6U) +#define AIPS_PACRE_SP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRE_SP6_SHIFT)) & AIPS_PACRE_SP6_MASK) +#define AIPS_PACRE_TP5_MASK (0x100U) +#define AIPS_PACRE_TP5_SHIFT (8U) +#define AIPS_PACRE_TP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRE_TP5_SHIFT)) & AIPS_PACRE_TP5_MASK) +#define AIPS_PACRE_WP5_MASK (0x200U) +#define AIPS_PACRE_WP5_SHIFT (9U) +#define AIPS_PACRE_WP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRE_WP5_SHIFT)) & AIPS_PACRE_WP5_MASK) +#define AIPS_PACRE_SP5_MASK (0x400U) +#define AIPS_PACRE_SP5_SHIFT (10U) +#define AIPS_PACRE_SP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRE_SP5_SHIFT)) & AIPS_PACRE_SP5_MASK) +#define AIPS_PACRE_TP4_MASK (0x1000U) +#define AIPS_PACRE_TP4_SHIFT (12U) +#define AIPS_PACRE_TP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRE_TP4_SHIFT)) & AIPS_PACRE_TP4_MASK) +#define AIPS_PACRE_WP4_MASK (0x2000U) +#define AIPS_PACRE_WP4_SHIFT (13U) +#define AIPS_PACRE_WP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRE_WP4_SHIFT)) & AIPS_PACRE_WP4_MASK) +#define AIPS_PACRE_SP4_MASK (0x4000U) +#define AIPS_PACRE_SP4_SHIFT (14U) +#define AIPS_PACRE_SP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRE_SP4_SHIFT)) & AIPS_PACRE_SP4_MASK) +#define AIPS_PACRE_TP3_MASK (0x10000U) +#define AIPS_PACRE_TP3_SHIFT (16U) +#define AIPS_PACRE_TP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRE_TP3_SHIFT)) & AIPS_PACRE_TP3_MASK) +#define AIPS_PACRE_WP3_MASK (0x20000U) +#define AIPS_PACRE_WP3_SHIFT (17U) +#define AIPS_PACRE_WP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRE_WP3_SHIFT)) & AIPS_PACRE_WP3_MASK) +#define AIPS_PACRE_SP3_MASK (0x40000U) +#define AIPS_PACRE_SP3_SHIFT (18U) +#define AIPS_PACRE_SP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRE_SP3_SHIFT)) & AIPS_PACRE_SP3_MASK) +#define AIPS_PACRE_TP2_MASK (0x100000U) +#define AIPS_PACRE_TP2_SHIFT (20U) +#define AIPS_PACRE_TP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRE_TP2_SHIFT)) & AIPS_PACRE_TP2_MASK) +#define AIPS_PACRE_WP2_MASK (0x200000U) +#define AIPS_PACRE_WP2_SHIFT (21U) +#define AIPS_PACRE_WP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRE_WP2_SHIFT)) & AIPS_PACRE_WP2_MASK) +#define AIPS_PACRE_SP2_MASK (0x400000U) +#define AIPS_PACRE_SP2_SHIFT (22U) +#define AIPS_PACRE_SP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRE_SP2_SHIFT)) & AIPS_PACRE_SP2_MASK) +#define AIPS_PACRE_TP1_MASK (0x1000000U) +#define AIPS_PACRE_TP1_SHIFT (24U) +#define AIPS_PACRE_TP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRE_TP1_SHIFT)) & AIPS_PACRE_TP1_MASK) +#define AIPS_PACRE_WP1_MASK (0x2000000U) +#define AIPS_PACRE_WP1_SHIFT (25U) +#define AIPS_PACRE_WP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRE_WP1_SHIFT)) & AIPS_PACRE_WP1_MASK) +#define AIPS_PACRE_SP1_MASK (0x4000000U) +#define AIPS_PACRE_SP1_SHIFT (26U) +#define AIPS_PACRE_SP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRE_SP1_SHIFT)) & AIPS_PACRE_SP1_MASK) +#define AIPS_PACRE_TP0_MASK (0x10000000U) +#define AIPS_PACRE_TP0_SHIFT (28U) +#define AIPS_PACRE_TP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRE_TP0_SHIFT)) & AIPS_PACRE_TP0_MASK) +#define AIPS_PACRE_WP0_MASK (0x20000000U) +#define AIPS_PACRE_WP0_SHIFT (29U) +#define AIPS_PACRE_WP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRE_WP0_SHIFT)) & AIPS_PACRE_WP0_MASK) +#define AIPS_PACRE_SP0_MASK (0x40000000U) +#define AIPS_PACRE_SP0_SHIFT (30U) +#define AIPS_PACRE_SP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRE_SP0_SHIFT)) & AIPS_PACRE_SP0_MASK) + +/*! @name PACRF - Peripheral Access Control Register */ +#define AIPS_PACRF_TP7_MASK (0x1U) +#define AIPS_PACRF_TP7_SHIFT (0U) +#define AIPS_PACRF_TP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRF_TP7_SHIFT)) & AIPS_PACRF_TP7_MASK) +#define AIPS_PACRF_WP7_MASK (0x2U) +#define AIPS_PACRF_WP7_SHIFT (1U) +#define AIPS_PACRF_WP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRF_WP7_SHIFT)) & AIPS_PACRF_WP7_MASK) +#define AIPS_PACRF_SP7_MASK (0x4U) +#define AIPS_PACRF_SP7_SHIFT (2U) +#define AIPS_PACRF_SP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRF_SP7_SHIFT)) & AIPS_PACRF_SP7_MASK) +#define AIPS_PACRF_TP6_MASK (0x10U) +#define AIPS_PACRF_TP6_SHIFT (4U) +#define AIPS_PACRF_TP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRF_TP6_SHIFT)) & AIPS_PACRF_TP6_MASK) +#define AIPS_PACRF_WP6_MASK (0x20U) +#define AIPS_PACRF_WP6_SHIFT (5U) +#define AIPS_PACRF_WP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRF_WP6_SHIFT)) & AIPS_PACRF_WP6_MASK) +#define AIPS_PACRF_SP6_MASK (0x40U) +#define AIPS_PACRF_SP6_SHIFT (6U) +#define AIPS_PACRF_SP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRF_SP6_SHIFT)) & AIPS_PACRF_SP6_MASK) +#define AIPS_PACRF_TP5_MASK (0x100U) +#define AIPS_PACRF_TP5_SHIFT (8U) +#define AIPS_PACRF_TP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRF_TP5_SHIFT)) & AIPS_PACRF_TP5_MASK) +#define AIPS_PACRF_WP5_MASK (0x200U) +#define AIPS_PACRF_WP5_SHIFT (9U) +#define AIPS_PACRF_WP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRF_WP5_SHIFT)) & AIPS_PACRF_WP5_MASK) +#define AIPS_PACRF_SP5_MASK (0x400U) +#define AIPS_PACRF_SP5_SHIFT (10U) +#define AIPS_PACRF_SP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRF_SP5_SHIFT)) & AIPS_PACRF_SP5_MASK) +#define AIPS_PACRF_TP4_MASK (0x1000U) +#define AIPS_PACRF_TP4_SHIFT (12U) +#define AIPS_PACRF_TP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRF_TP4_SHIFT)) & AIPS_PACRF_TP4_MASK) +#define AIPS_PACRF_WP4_MASK (0x2000U) +#define AIPS_PACRF_WP4_SHIFT (13U) +#define AIPS_PACRF_WP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRF_WP4_SHIFT)) & AIPS_PACRF_WP4_MASK) +#define AIPS_PACRF_SP4_MASK (0x4000U) +#define AIPS_PACRF_SP4_SHIFT (14U) +#define AIPS_PACRF_SP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRF_SP4_SHIFT)) & AIPS_PACRF_SP4_MASK) +#define AIPS_PACRF_TP3_MASK (0x10000U) +#define AIPS_PACRF_TP3_SHIFT (16U) +#define AIPS_PACRF_TP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRF_TP3_SHIFT)) & AIPS_PACRF_TP3_MASK) +#define AIPS_PACRF_WP3_MASK (0x20000U) +#define AIPS_PACRF_WP3_SHIFT (17U) +#define AIPS_PACRF_WP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRF_WP3_SHIFT)) & AIPS_PACRF_WP3_MASK) +#define AIPS_PACRF_SP3_MASK (0x40000U) +#define AIPS_PACRF_SP3_SHIFT (18U) +#define AIPS_PACRF_SP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRF_SP3_SHIFT)) & AIPS_PACRF_SP3_MASK) +#define AIPS_PACRF_TP2_MASK (0x100000U) +#define AIPS_PACRF_TP2_SHIFT (20U) +#define AIPS_PACRF_TP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRF_TP2_SHIFT)) & AIPS_PACRF_TP2_MASK) +#define AIPS_PACRF_WP2_MASK (0x200000U) +#define AIPS_PACRF_WP2_SHIFT (21U) +#define AIPS_PACRF_WP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRF_WP2_SHIFT)) & AIPS_PACRF_WP2_MASK) +#define AIPS_PACRF_SP2_MASK (0x400000U) +#define AIPS_PACRF_SP2_SHIFT (22U) +#define AIPS_PACRF_SP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRF_SP2_SHIFT)) & AIPS_PACRF_SP2_MASK) +#define AIPS_PACRF_TP1_MASK (0x1000000U) +#define AIPS_PACRF_TP1_SHIFT (24U) +#define AIPS_PACRF_TP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRF_TP1_SHIFT)) & AIPS_PACRF_TP1_MASK) +#define AIPS_PACRF_WP1_MASK (0x2000000U) +#define AIPS_PACRF_WP1_SHIFT (25U) +#define AIPS_PACRF_WP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRF_WP1_SHIFT)) & AIPS_PACRF_WP1_MASK) +#define AIPS_PACRF_SP1_MASK (0x4000000U) +#define AIPS_PACRF_SP1_SHIFT (26U) +#define AIPS_PACRF_SP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRF_SP1_SHIFT)) & AIPS_PACRF_SP1_MASK) +#define AIPS_PACRF_TP0_MASK (0x10000000U) +#define AIPS_PACRF_TP0_SHIFT (28U) +#define AIPS_PACRF_TP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRF_TP0_SHIFT)) & AIPS_PACRF_TP0_MASK) +#define AIPS_PACRF_WP0_MASK (0x20000000U) +#define AIPS_PACRF_WP0_SHIFT (29U) +#define AIPS_PACRF_WP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRF_WP0_SHIFT)) & AIPS_PACRF_WP0_MASK) +#define AIPS_PACRF_SP0_MASK (0x40000000U) +#define AIPS_PACRF_SP0_SHIFT (30U) +#define AIPS_PACRF_SP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRF_SP0_SHIFT)) & AIPS_PACRF_SP0_MASK) + +/*! @name PACRG - Peripheral Access Control Register */ +#define AIPS_PACRG_TP7_MASK (0x1U) +#define AIPS_PACRG_TP7_SHIFT (0U) +#define AIPS_PACRG_TP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRG_TP7_SHIFT)) & AIPS_PACRG_TP7_MASK) +#define AIPS_PACRG_WP7_MASK (0x2U) +#define AIPS_PACRG_WP7_SHIFT (1U) +#define AIPS_PACRG_WP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRG_WP7_SHIFT)) & AIPS_PACRG_WP7_MASK) +#define AIPS_PACRG_SP7_MASK (0x4U) +#define AIPS_PACRG_SP7_SHIFT (2U) +#define AIPS_PACRG_SP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRG_SP7_SHIFT)) & AIPS_PACRG_SP7_MASK) +#define AIPS_PACRG_TP6_MASK (0x10U) +#define AIPS_PACRG_TP6_SHIFT (4U) +#define AIPS_PACRG_TP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRG_TP6_SHIFT)) & AIPS_PACRG_TP6_MASK) +#define AIPS_PACRG_WP6_MASK (0x20U) +#define AIPS_PACRG_WP6_SHIFT (5U) +#define AIPS_PACRG_WP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRG_WP6_SHIFT)) & AIPS_PACRG_WP6_MASK) +#define AIPS_PACRG_SP6_MASK (0x40U) +#define AIPS_PACRG_SP6_SHIFT (6U) +#define AIPS_PACRG_SP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRG_SP6_SHIFT)) & AIPS_PACRG_SP6_MASK) +#define AIPS_PACRG_TP5_MASK (0x100U) +#define AIPS_PACRG_TP5_SHIFT (8U) +#define AIPS_PACRG_TP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRG_TP5_SHIFT)) & AIPS_PACRG_TP5_MASK) +#define AIPS_PACRG_WP5_MASK (0x200U) +#define AIPS_PACRG_WP5_SHIFT (9U) +#define AIPS_PACRG_WP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRG_WP5_SHIFT)) & AIPS_PACRG_WP5_MASK) +#define AIPS_PACRG_SP5_MASK (0x400U) +#define AIPS_PACRG_SP5_SHIFT (10U) +#define AIPS_PACRG_SP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRG_SP5_SHIFT)) & AIPS_PACRG_SP5_MASK) +#define AIPS_PACRG_TP4_MASK (0x1000U) +#define AIPS_PACRG_TP4_SHIFT (12U) +#define AIPS_PACRG_TP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRG_TP4_SHIFT)) & AIPS_PACRG_TP4_MASK) +#define AIPS_PACRG_WP4_MASK (0x2000U) +#define AIPS_PACRG_WP4_SHIFT (13U) +#define AIPS_PACRG_WP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRG_WP4_SHIFT)) & AIPS_PACRG_WP4_MASK) +#define AIPS_PACRG_SP4_MASK (0x4000U) +#define AIPS_PACRG_SP4_SHIFT (14U) +#define AIPS_PACRG_SP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRG_SP4_SHIFT)) & AIPS_PACRG_SP4_MASK) +#define AIPS_PACRG_TP3_MASK (0x10000U) +#define AIPS_PACRG_TP3_SHIFT (16U) +#define AIPS_PACRG_TP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRG_TP3_SHIFT)) & AIPS_PACRG_TP3_MASK) +#define AIPS_PACRG_WP3_MASK (0x20000U) +#define AIPS_PACRG_WP3_SHIFT (17U) +#define AIPS_PACRG_WP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRG_WP3_SHIFT)) & AIPS_PACRG_WP3_MASK) +#define AIPS_PACRG_SP3_MASK (0x40000U) +#define AIPS_PACRG_SP3_SHIFT (18U) +#define AIPS_PACRG_SP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRG_SP3_SHIFT)) & AIPS_PACRG_SP3_MASK) +#define AIPS_PACRG_TP2_MASK (0x100000U) +#define AIPS_PACRG_TP2_SHIFT (20U) +#define AIPS_PACRG_TP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRG_TP2_SHIFT)) & AIPS_PACRG_TP2_MASK) +#define AIPS_PACRG_WP2_MASK (0x200000U) +#define AIPS_PACRG_WP2_SHIFT (21U) +#define AIPS_PACRG_WP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRG_WP2_SHIFT)) & AIPS_PACRG_WP2_MASK) +#define AIPS_PACRG_SP2_MASK (0x400000U) +#define AIPS_PACRG_SP2_SHIFT (22U) +#define AIPS_PACRG_SP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRG_SP2_SHIFT)) & AIPS_PACRG_SP2_MASK) +#define AIPS_PACRG_TP1_MASK (0x1000000U) +#define AIPS_PACRG_TP1_SHIFT (24U) +#define AIPS_PACRG_TP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRG_TP1_SHIFT)) & AIPS_PACRG_TP1_MASK) +#define AIPS_PACRG_WP1_MASK (0x2000000U) +#define AIPS_PACRG_WP1_SHIFT (25U) +#define AIPS_PACRG_WP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRG_WP1_SHIFT)) & AIPS_PACRG_WP1_MASK) +#define AIPS_PACRG_SP1_MASK (0x4000000U) +#define AIPS_PACRG_SP1_SHIFT (26U) +#define AIPS_PACRG_SP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRG_SP1_SHIFT)) & AIPS_PACRG_SP1_MASK) +#define AIPS_PACRG_TP0_MASK (0x10000000U) +#define AIPS_PACRG_TP0_SHIFT (28U) +#define AIPS_PACRG_TP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRG_TP0_SHIFT)) & AIPS_PACRG_TP0_MASK) +#define AIPS_PACRG_WP0_MASK (0x20000000U) +#define AIPS_PACRG_WP0_SHIFT (29U) +#define AIPS_PACRG_WP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRG_WP0_SHIFT)) & AIPS_PACRG_WP0_MASK) +#define AIPS_PACRG_SP0_MASK (0x40000000U) +#define AIPS_PACRG_SP0_SHIFT (30U) +#define AIPS_PACRG_SP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRG_SP0_SHIFT)) & AIPS_PACRG_SP0_MASK) + +/*! @name PACRH - Peripheral Access Control Register */ +#define AIPS_PACRH_TP7_MASK (0x1U) +#define AIPS_PACRH_TP7_SHIFT (0U) +#define AIPS_PACRH_TP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRH_TP7_SHIFT)) & AIPS_PACRH_TP7_MASK) +#define AIPS_PACRH_WP7_MASK (0x2U) +#define AIPS_PACRH_WP7_SHIFT (1U) +#define AIPS_PACRH_WP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRH_WP7_SHIFT)) & AIPS_PACRH_WP7_MASK) +#define AIPS_PACRH_SP7_MASK (0x4U) +#define AIPS_PACRH_SP7_SHIFT (2U) +#define AIPS_PACRH_SP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRH_SP7_SHIFT)) & AIPS_PACRH_SP7_MASK) +#define AIPS_PACRH_TP6_MASK (0x10U) +#define AIPS_PACRH_TP6_SHIFT (4U) +#define AIPS_PACRH_TP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRH_TP6_SHIFT)) & AIPS_PACRH_TP6_MASK) +#define AIPS_PACRH_WP6_MASK (0x20U) +#define AIPS_PACRH_WP6_SHIFT (5U) +#define AIPS_PACRH_WP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRH_WP6_SHIFT)) & AIPS_PACRH_WP6_MASK) +#define AIPS_PACRH_SP6_MASK (0x40U) +#define AIPS_PACRH_SP6_SHIFT (6U) +#define AIPS_PACRH_SP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRH_SP6_SHIFT)) & AIPS_PACRH_SP6_MASK) +#define AIPS_PACRH_TP5_MASK (0x100U) +#define AIPS_PACRH_TP5_SHIFT (8U) +#define AIPS_PACRH_TP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRH_TP5_SHIFT)) & AIPS_PACRH_TP5_MASK) +#define AIPS_PACRH_WP5_MASK (0x200U) +#define AIPS_PACRH_WP5_SHIFT (9U) +#define AIPS_PACRH_WP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRH_WP5_SHIFT)) & AIPS_PACRH_WP5_MASK) +#define AIPS_PACRH_SP5_MASK (0x400U) +#define AIPS_PACRH_SP5_SHIFT (10U) +#define AIPS_PACRH_SP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRH_SP5_SHIFT)) & AIPS_PACRH_SP5_MASK) +#define AIPS_PACRH_TP4_MASK (0x1000U) +#define AIPS_PACRH_TP4_SHIFT (12U) +#define AIPS_PACRH_TP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRH_TP4_SHIFT)) & AIPS_PACRH_TP4_MASK) +#define AIPS_PACRH_WP4_MASK (0x2000U) +#define AIPS_PACRH_WP4_SHIFT (13U) +#define AIPS_PACRH_WP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRH_WP4_SHIFT)) & AIPS_PACRH_WP4_MASK) +#define AIPS_PACRH_SP4_MASK (0x4000U) +#define AIPS_PACRH_SP4_SHIFT (14U) +#define AIPS_PACRH_SP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRH_SP4_SHIFT)) & AIPS_PACRH_SP4_MASK) +#define AIPS_PACRH_TP3_MASK (0x10000U) +#define AIPS_PACRH_TP3_SHIFT (16U) +#define AIPS_PACRH_TP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRH_TP3_SHIFT)) & AIPS_PACRH_TP3_MASK) +#define AIPS_PACRH_WP3_MASK (0x20000U) +#define AIPS_PACRH_WP3_SHIFT (17U) +#define AIPS_PACRH_WP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRH_WP3_SHIFT)) & AIPS_PACRH_WP3_MASK) +#define AIPS_PACRH_SP3_MASK (0x40000U) +#define AIPS_PACRH_SP3_SHIFT (18U) +#define AIPS_PACRH_SP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRH_SP3_SHIFT)) & AIPS_PACRH_SP3_MASK) +#define AIPS_PACRH_TP2_MASK (0x100000U) +#define AIPS_PACRH_TP2_SHIFT (20U) +#define AIPS_PACRH_TP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRH_TP2_SHIFT)) & AIPS_PACRH_TP2_MASK) +#define AIPS_PACRH_WP2_MASK (0x200000U) +#define AIPS_PACRH_WP2_SHIFT (21U) +#define AIPS_PACRH_WP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRH_WP2_SHIFT)) & AIPS_PACRH_WP2_MASK) +#define AIPS_PACRH_SP2_MASK (0x400000U) +#define AIPS_PACRH_SP2_SHIFT (22U) +#define AIPS_PACRH_SP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRH_SP2_SHIFT)) & AIPS_PACRH_SP2_MASK) +#define AIPS_PACRH_TP1_MASK (0x1000000U) +#define AIPS_PACRH_TP1_SHIFT (24U) +#define AIPS_PACRH_TP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRH_TP1_SHIFT)) & AIPS_PACRH_TP1_MASK) +#define AIPS_PACRH_WP1_MASK (0x2000000U) +#define AIPS_PACRH_WP1_SHIFT (25U) +#define AIPS_PACRH_WP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRH_WP1_SHIFT)) & AIPS_PACRH_WP1_MASK) +#define AIPS_PACRH_SP1_MASK (0x4000000U) +#define AIPS_PACRH_SP1_SHIFT (26U) +#define AIPS_PACRH_SP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRH_SP1_SHIFT)) & AIPS_PACRH_SP1_MASK) +#define AIPS_PACRH_TP0_MASK (0x10000000U) +#define AIPS_PACRH_TP0_SHIFT (28U) +#define AIPS_PACRH_TP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRH_TP0_SHIFT)) & AIPS_PACRH_TP0_MASK) +#define AIPS_PACRH_WP0_MASK (0x20000000U) +#define AIPS_PACRH_WP0_SHIFT (29U) +#define AIPS_PACRH_WP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRH_WP0_SHIFT)) & AIPS_PACRH_WP0_MASK) +#define AIPS_PACRH_SP0_MASK (0x40000000U) +#define AIPS_PACRH_SP0_SHIFT (30U) +#define AIPS_PACRH_SP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRH_SP0_SHIFT)) & AIPS_PACRH_SP0_MASK) + +/*! @name PACRI - Peripheral Access Control Register */ +#define AIPS_PACRI_TP7_MASK (0x1U) +#define AIPS_PACRI_TP7_SHIFT (0U) +#define AIPS_PACRI_TP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRI_TP7_SHIFT)) & AIPS_PACRI_TP7_MASK) +#define AIPS_PACRI_WP7_MASK (0x2U) +#define AIPS_PACRI_WP7_SHIFT (1U) +#define AIPS_PACRI_WP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRI_WP7_SHIFT)) & AIPS_PACRI_WP7_MASK) +#define AIPS_PACRI_SP7_MASK (0x4U) +#define AIPS_PACRI_SP7_SHIFT (2U) +#define AIPS_PACRI_SP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRI_SP7_SHIFT)) & AIPS_PACRI_SP7_MASK) +#define AIPS_PACRI_TP6_MASK (0x10U) +#define AIPS_PACRI_TP6_SHIFT (4U) +#define AIPS_PACRI_TP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRI_TP6_SHIFT)) & AIPS_PACRI_TP6_MASK) +#define AIPS_PACRI_WP6_MASK (0x20U) +#define AIPS_PACRI_WP6_SHIFT (5U) +#define AIPS_PACRI_WP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRI_WP6_SHIFT)) & AIPS_PACRI_WP6_MASK) +#define AIPS_PACRI_SP6_MASK (0x40U) +#define AIPS_PACRI_SP6_SHIFT (6U) +#define AIPS_PACRI_SP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRI_SP6_SHIFT)) & AIPS_PACRI_SP6_MASK) +#define AIPS_PACRI_TP5_MASK (0x100U) +#define AIPS_PACRI_TP5_SHIFT (8U) +#define AIPS_PACRI_TP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRI_TP5_SHIFT)) & AIPS_PACRI_TP5_MASK) +#define AIPS_PACRI_WP5_MASK (0x200U) +#define AIPS_PACRI_WP5_SHIFT (9U) +#define AIPS_PACRI_WP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRI_WP5_SHIFT)) & AIPS_PACRI_WP5_MASK) +#define AIPS_PACRI_SP5_MASK (0x400U) +#define AIPS_PACRI_SP5_SHIFT (10U) +#define AIPS_PACRI_SP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRI_SP5_SHIFT)) & AIPS_PACRI_SP5_MASK) +#define AIPS_PACRI_TP4_MASK (0x1000U) +#define AIPS_PACRI_TP4_SHIFT (12U) +#define AIPS_PACRI_TP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRI_TP4_SHIFT)) & AIPS_PACRI_TP4_MASK) +#define AIPS_PACRI_WP4_MASK (0x2000U) +#define AIPS_PACRI_WP4_SHIFT (13U) +#define AIPS_PACRI_WP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRI_WP4_SHIFT)) & AIPS_PACRI_WP4_MASK) +#define AIPS_PACRI_SP4_MASK (0x4000U) +#define AIPS_PACRI_SP4_SHIFT (14U) +#define AIPS_PACRI_SP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRI_SP4_SHIFT)) & AIPS_PACRI_SP4_MASK) +#define AIPS_PACRI_TP3_MASK (0x10000U) +#define AIPS_PACRI_TP3_SHIFT (16U) +#define AIPS_PACRI_TP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRI_TP3_SHIFT)) & AIPS_PACRI_TP3_MASK) +#define AIPS_PACRI_WP3_MASK (0x20000U) +#define AIPS_PACRI_WP3_SHIFT (17U) +#define AIPS_PACRI_WP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRI_WP3_SHIFT)) & AIPS_PACRI_WP3_MASK) +#define AIPS_PACRI_SP3_MASK (0x40000U) +#define AIPS_PACRI_SP3_SHIFT (18U) +#define AIPS_PACRI_SP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRI_SP3_SHIFT)) & AIPS_PACRI_SP3_MASK) +#define AIPS_PACRI_TP2_MASK (0x100000U) +#define AIPS_PACRI_TP2_SHIFT (20U) +#define AIPS_PACRI_TP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRI_TP2_SHIFT)) & AIPS_PACRI_TP2_MASK) +#define AIPS_PACRI_WP2_MASK (0x200000U) +#define AIPS_PACRI_WP2_SHIFT (21U) +#define AIPS_PACRI_WP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRI_WP2_SHIFT)) & AIPS_PACRI_WP2_MASK) +#define AIPS_PACRI_SP2_MASK (0x400000U) +#define AIPS_PACRI_SP2_SHIFT (22U) +#define AIPS_PACRI_SP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRI_SP2_SHIFT)) & AIPS_PACRI_SP2_MASK) +#define AIPS_PACRI_TP1_MASK (0x1000000U) +#define AIPS_PACRI_TP1_SHIFT (24U) +#define AIPS_PACRI_TP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRI_TP1_SHIFT)) & AIPS_PACRI_TP1_MASK) +#define AIPS_PACRI_WP1_MASK (0x2000000U) +#define AIPS_PACRI_WP1_SHIFT (25U) +#define AIPS_PACRI_WP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRI_WP1_SHIFT)) & AIPS_PACRI_WP1_MASK) +#define AIPS_PACRI_SP1_MASK (0x4000000U) +#define AIPS_PACRI_SP1_SHIFT (26U) +#define AIPS_PACRI_SP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRI_SP1_SHIFT)) & AIPS_PACRI_SP1_MASK) +#define AIPS_PACRI_TP0_MASK (0x10000000U) +#define AIPS_PACRI_TP0_SHIFT (28U) +#define AIPS_PACRI_TP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRI_TP0_SHIFT)) & AIPS_PACRI_TP0_MASK) +#define AIPS_PACRI_WP0_MASK (0x20000000U) +#define AIPS_PACRI_WP0_SHIFT (29U) +#define AIPS_PACRI_WP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRI_WP0_SHIFT)) & AIPS_PACRI_WP0_MASK) +#define AIPS_PACRI_SP0_MASK (0x40000000U) +#define AIPS_PACRI_SP0_SHIFT (30U) +#define AIPS_PACRI_SP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRI_SP0_SHIFT)) & AIPS_PACRI_SP0_MASK) + +/*! @name PACRJ - Peripheral Access Control Register */ +#define AIPS_PACRJ_TP7_MASK (0x1U) +#define AIPS_PACRJ_TP7_SHIFT (0U) +#define AIPS_PACRJ_TP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRJ_TP7_SHIFT)) & AIPS_PACRJ_TP7_MASK) +#define AIPS_PACRJ_WP7_MASK (0x2U) +#define AIPS_PACRJ_WP7_SHIFT (1U) +#define AIPS_PACRJ_WP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRJ_WP7_SHIFT)) & AIPS_PACRJ_WP7_MASK) +#define AIPS_PACRJ_SP7_MASK (0x4U) +#define AIPS_PACRJ_SP7_SHIFT (2U) +#define AIPS_PACRJ_SP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRJ_SP7_SHIFT)) & AIPS_PACRJ_SP7_MASK) +#define AIPS_PACRJ_TP6_MASK (0x10U) +#define AIPS_PACRJ_TP6_SHIFT (4U) +#define AIPS_PACRJ_TP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRJ_TP6_SHIFT)) & AIPS_PACRJ_TP6_MASK) +#define AIPS_PACRJ_WP6_MASK (0x20U) +#define AIPS_PACRJ_WP6_SHIFT (5U) +#define AIPS_PACRJ_WP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRJ_WP6_SHIFT)) & AIPS_PACRJ_WP6_MASK) +#define AIPS_PACRJ_SP6_MASK (0x40U) +#define AIPS_PACRJ_SP6_SHIFT (6U) +#define AIPS_PACRJ_SP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRJ_SP6_SHIFT)) & AIPS_PACRJ_SP6_MASK) +#define AIPS_PACRJ_TP5_MASK (0x100U) +#define AIPS_PACRJ_TP5_SHIFT (8U) +#define AIPS_PACRJ_TP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRJ_TP5_SHIFT)) & AIPS_PACRJ_TP5_MASK) +#define AIPS_PACRJ_WP5_MASK (0x200U) +#define AIPS_PACRJ_WP5_SHIFT (9U) +#define AIPS_PACRJ_WP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRJ_WP5_SHIFT)) & AIPS_PACRJ_WP5_MASK) +#define AIPS_PACRJ_SP5_MASK (0x400U) +#define AIPS_PACRJ_SP5_SHIFT (10U) +#define AIPS_PACRJ_SP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRJ_SP5_SHIFT)) & AIPS_PACRJ_SP5_MASK) +#define AIPS_PACRJ_TP4_MASK (0x1000U) +#define AIPS_PACRJ_TP4_SHIFT (12U) +#define AIPS_PACRJ_TP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRJ_TP4_SHIFT)) & AIPS_PACRJ_TP4_MASK) +#define AIPS_PACRJ_WP4_MASK (0x2000U) +#define AIPS_PACRJ_WP4_SHIFT (13U) +#define AIPS_PACRJ_WP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRJ_WP4_SHIFT)) & AIPS_PACRJ_WP4_MASK) +#define AIPS_PACRJ_SP4_MASK (0x4000U) +#define AIPS_PACRJ_SP4_SHIFT (14U) +#define AIPS_PACRJ_SP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRJ_SP4_SHIFT)) & AIPS_PACRJ_SP4_MASK) +#define AIPS_PACRJ_TP3_MASK (0x10000U) +#define AIPS_PACRJ_TP3_SHIFT (16U) +#define AIPS_PACRJ_TP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRJ_TP3_SHIFT)) & AIPS_PACRJ_TP3_MASK) +#define AIPS_PACRJ_WP3_MASK (0x20000U) +#define AIPS_PACRJ_WP3_SHIFT (17U) +#define AIPS_PACRJ_WP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRJ_WP3_SHIFT)) & AIPS_PACRJ_WP3_MASK) +#define AIPS_PACRJ_SP3_MASK (0x40000U) +#define AIPS_PACRJ_SP3_SHIFT (18U) +#define AIPS_PACRJ_SP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRJ_SP3_SHIFT)) & AIPS_PACRJ_SP3_MASK) +#define AIPS_PACRJ_TP2_MASK (0x100000U) +#define AIPS_PACRJ_TP2_SHIFT (20U) +#define AIPS_PACRJ_TP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRJ_TP2_SHIFT)) & AIPS_PACRJ_TP2_MASK) +#define AIPS_PACRJ_WP2_MASK (0x200000U) +#define AIPS_PACRJ_WP2_SHIFT (21U) +#define AIPS_PACRJ_WP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRJ_WP2_SHIFT)) & AIPS_PACRJ_WP2_MASK) +#define AIPS_PACRJ_SP2_MASK (0x400000U) +#define AIPS_PACRJ_SP2_SHIFT (22U) +#define AIPS_PACRJ_SP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRJ_SP2_SHIFT)) & AIPS_PACRJ_SP2_MASK) +#define AIPS_PACRJ_TP1_MASK (0x1000000U) +#define AIPS_PACRJ_TP1_SHIFT (24U) +#define AIPS_PACRJ_TP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRJ_TP1_SHIFT)) & AIPS_PACRJ_TP1_MASK) +#define AIPS_PACRJ_WP1_MASK (0x2000000U) +#define AIPS_PACRJ_WP1_SHIFT (25U) +#define AIPS_PACRJ_WP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRJ_WP1_SHIFT)) & AIPS_PACRJ_WP1_MASK) +#define AIPS_PACRJ_SP1_MASK (0x4000000U) +#define AIPS_PACRJ_SP1_SHIFT (26U) +#define AIPS_PACRJ_SP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRJ_SP1_SHIFT)) & AIPS_PACRJ_SP1_MASK) +#define AIPS_PACRJ_TP0_MASK (0x10000000U) +#define AIPS_PACRJ_TP0_SHIFT (28U) +#define AIPS_PACRJ_TP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRJ_TP0_SHIFT)) & AIPS_PACRJ_TP0_MASK) +#define AIPS_PACRJ_WP0_MASK (0x20000000U) +#define AIPS_PACRJ_WP0_SHIFT (29U) +#define AIPS_PACRJ_WP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRJ_WP0_SHIFT)) & AIPS_PACRJ_WP0_MASK) +#define AIPS_PACRJ_SP0_MASK (0x40000000U) +#define AIPS_PACRJ_SP0_SHIFT (30U) +#define AIPS_PACRJ_SP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRJ_SP0_SHIFT)) & AIPS_PACRJ_SP0_MASK) + +/*! @name PACRK - Peripheral Access Control Register */ +#define AIPS_PACRK_TP7_MASK (0x1U) +#define AIPS_PACRK_TP7_SHIFT (0U) +#define AIPS_PACRK_TP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRK_TP7_SHIFT)) & AIPS_PACRK_TP7_MASK) +#define AIPS_PACRK_WP7_MASK (0x2U) +#define AIPS_PACRK_WP7_SHIFT (1U) +#define AIPS_PACRK_WP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRK_WP7_SHIFT)) & AIPS_PACRK_WP7_MASK) +#define AIPS_PACRK_SP7_MASK (0x4U) +#define AIPS_PACRK_SP7_SHIFT (2U) +#define AIPS_PACRK_SP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRK_SP7_SHIFT)) & AIPS_PACRK_SP7_MASK) +#define AIPS_PACRK_TP6_MASK (0x10U) +#define AIPS_PACRK_TP6_SHIFT (4U) +#define AIPS_PACRK_TP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRK_TP6_SHIFT)) & AIPS_PACRK_TP6_MASK) +#define AIPS_PACRK_WP6_MASK (0x20U) +#define AIPS_PACRK_WP6_SHIFT (5U) +#define AIPS_PACRK_WP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRK_WP6_SHIFT)) & AIPS_PACRK_WP6_MASK) +#define AIPS_PACRK_SP6_MASK (0x40U) +#define AIPS_PACRK_SP6_SHIFT (6U) +#define AIPS_PACRK_SP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRK_SP6_SHIFT)) & AIPS_PACRK_SP6_MASK) +#define AIPS_PACRK_TP5_MASK (0x100U) +#define AIPS_PACRK_TP5_SHIFT (8U) +#define AIPS_PACRK_TP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRK_TP5_SHIFT)) & AIPS_PACRK_TP5_MASK) +#define AIPS_PACRK_WP5_MASK (0x200U) +#define AIPS_PACRK_WP5_SHIFT (9U) +#define AIPS_PACRK_WP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRK_WP5_SHIFT)) & AIPS_PACRK_WP5_MASK) +#define AIPS_PACRK_SP5_MASK (0x400U) +#define AIPS_PACRK_SP5_SHIFT (10U) +#define AIPS_PACRK_SP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRK_SP5_SHIFT)) & AIPS_PACRK_SP5_MASK) +#define AIPS_PACRK_TP4_MASK (0x1000U) +#define AIPS_PACRK_TP4_SHIFT (12U) +#define AIPS_PACRK_TP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRK_TP4_SHIFT)) & AIPS_PACRK_TP4_MASK) +#define AIPS_PACRK_WP4_MASK (0x2000U) +#define AIPS_PACRK_WP4_SHIFT (13U) +#define AIPS_PACRK_WP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRK_WP4_SHIFT)) & AIPS_PACRK_WP4_MASK) +#define AIPS_PACRK_SP4_MASK (0x4000U) +#define AIPS_PACRK_SP4_SHIFT (14U) +#define AIPS_PACRK_SP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRK_SP4_SHIFT)) & AIPS_PACRK_SP4_MASK) +#define AIPS_PACRK_TP3_MASK (0x10000U) +#define AIPS_PACRK_TP3_SHIFT (16U) +#define AIPS_PACRK_TP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRK_TP3_SHIFT)) & AIPS_PACRK_TP3_MASK) +#define AIPS_PACRK_WP3_MASK (0x20000U) +#define AIPS_PACRK_WP3_SHIFT (17U) +#define AIPS_PACRK_WP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRK_WP3_SHIFT)) & AIPS_PACRK_WP3_MASK) +#define AIPS_PACRK_SP3_MASK (0x40000U) +#define AIPS_PACRK_SP3_SHIFT (18U) +#define AIPS_PACRK_SP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRK_SP3_SHIFT)) & AIPS_PACRK_SP3_MASK) +#define AIPS_PACRK_TP2_MASK (0x100000U) +#define AIPS_PACRK_TP2_SHIFT (20U) +#define AIPS_PACRK_TP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRK_TP2_SHIFT)) & AIPS_PACRK_TP2_MASK) +#define AIPS_PACRK_WP2_MASK (0x200000U) +#define AIPS_PACRK_WP2_SHIFT (21U) +#define AIPS_PACRK_WP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRK_WP2_SHIFT)) & AIPS_PACRK_WP2_MASK) +#define AIPS_PACRK_SP2_MASK (0x400000U) +#define AIPS_PACRK_SP2_SHIFT (22U) +#define AIPS_PACRK_SP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRK_SP2_SHIFT)) & AIPS_PACRK_SP2_MASK) +#define AIPS_PACRK_TP1_MASK (0x1000000U) +#define AIPS_PACRK_TP1_SHIFT (24U) +#define AIPS_PACRK_TP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRK_TP1_SHIFT)) & AIPS_PACRK_TP1_MASK) +#define AIPS_PACRK_WP1_MASK (0x2000000U) +#define AIPS_PACRK_WP1_SHIFT (25U) +#define AIPS_PACRK_WP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRK_WP1_SHIFT)) & AIPS_PACRK_WP1_MASK) +#define AIPS_PACRK_SP1_MASK (0x4000000U) +#define AIPS_PACRK_SP1_SHIFT (26U) +#define AIPS_PACRK_SP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRK_SP1_SHIFT)) & AIPS_PACRK_SP1_MASK) +#define AIPS_PACRK_TP0_MASK (0x10000000U) +#define AIPS_PACRK_TP0_SHIFT (28U) +#define AIPS_PACRK_TP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRK_TP0_SHIFT)) & AIPS_PACRK_TP0_MASK) +#define AIPS_PACRK_WP0_MASK (0x20000000U) +#define AIPS_PACRK_WP0_SHIFT (29U) +#define AIPS_PACRK_WP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRK_WP0_SHIFT)) & AIPS_PACRK_WP0_MASK) +#define AIPS_PACRK_SP0_MASK (0x40000000U) +#define AIPS_PACRK_SP0_SHIFT (30U) +#define AIPS_PACRK_SP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRK_SP0_SHIFT)) & AIPS_PACRK_SP0_MASK) + +/*! @name PACRL - Peripheral Access Control Register */ +#define AIPS_PACRL_TP7_MASK (0x1U) +#define AIPS_PACRL_TP7_SHIFT (0U) +#define AIPS_PACRL_TP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRL_TP7_SHIFT)) & AIPS_PACRL_TP7_MASK) +#define AIPS_PACRL_WP7_MASK (0x2U) +#define AIPS_PACRL_WP7_SHIFT (1U) +#define AIPS_PACRL_WP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRL_WP7_SHIFT)) & AIPS_PACRL_WP7_MASK) +#define AIPS_PACRL_SP7_MASK (0x4U) +#define AIPS_PACRL_SP7_SHIFT (2U) +#define AIPS_PACRL_SP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRL_SP7_SHIFT)) & AIPS_PACRL_SP7_MASK) +#define AIPS_PACRL_TP6_MASK (0x10U) +#define AIPS_PACRL_TP6_SHIFT (4U) +#define AIPS_PACRL_TP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRL_TP6_SHIFT)) & AIPS_PACRL_TP6_MASK) +#define AIPS_PACRL_WP6_MASK (0x20U) +#define AIPS_PACRL_WP6_SHIFT (5U) +#define AIPS_PACRL_WP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRL_WP6_SHIFT)) & AIPS_PACRL_WP6_MASK) +#define AIPS_PACRL_SP6_MASK (0x40U) +#define AIPS_PACRL_SP6_SHIFT (6U) +#define AIPS_PACRL_SP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRL_SP6_SHIFT)) & AIPS_PACRL_SP6_MASK) +#define AIPS_PACRL_TP5_MASK (0x100U) +#define AIPS_PACRL_TP5_SHIFT (8U) +#define AIPS_PACRL_TP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRL_TP5_SHIFT)) & AIPS_PACRL_TP5_MASK) +#define AIPS_PACRL_WP5_MASK (0x200U) +#define AIPS_PACRL_WP5_SHIFT (9U) +#define AIPS_PACRL_WP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRL_WP5_SHIFT)) & AIPS_PACRL_WP5_MASK) +#define AIPS_PACRL_SP5_MASK (0x400U) +#define AIPS_PACRL_SP5_SHIFT (10U) +#define AIPS_PACRL_SP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRL_SP5_SHIFT)) & AIPS_PACRL_SP5_MASK) +#define AIPS_PACRL_TP4_MASK (0x1000U) +#define AIPS_PACRL_TP4_SHIFT (12U) +#define AIPS_PACRL_TP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRL_TP4_SHIFT)) & AIPS_PACRL_TP4_MASK) +#define AIPS_PACRL_WP4_MASK (0x2000U) +#define AIPS_PACRL_WP4_SHIFT (13U) +#define AIPS_PACRL_WP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRL_WP4_SHIFT)) & AIPS_PACRL_WP4_MASK) +#define AIPS_PACRL_SP4_MASK (0x4000U) +#define AIPS_PACRL_SP4_SHIFT (14U) +#define AIPS_PACRL_SP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRL_SP4_SHIFT)) & AIPS_PACRL_SP4_MASK) +#define AIPS_PACRL_TP3_MASK (0x10000U) +#define AIPS_PACRL_TP3_SHIFT (16U) +#define AIPS_PACRL_TP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRL_TP3_SHIFT)) & AIPS_PACRL_TP3_MASK) +#define AIPS_PACRL_WP3_MASK (0x20000U) +#define AIPS_PACRL_WP3_SHIFT (17U) +#define AIPS_PACRL_WP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRL_WP3_SHIFT)) & AIPS_PACRL_WP3_MASK) +#define AIPS_PACRL_SP3_MASK (0x40000U) +#define AIPS_PACRL_SP3_SHIFT (18U) +#define AIPS_PACRL_SP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRL_SP3_SHIFT)) & AIPS_PACRL_SP3_MASK) +#define AIPS_PACRL_TP2_MASK (0x100000U) +#define AIPS_PACRL_TP2_SHIFT (20U) +#define AIPS_PACRL_TP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRL_TP2_SHIFT)) & AIPS_PACRL_TP2_MASK) +#define AIPS_PACRL_WP2_MASK (0x200000U) +#define AIPS_PACRL_WP2_SHIFT (21U) +#define AIPS_PACRL_WP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRL_WP2_SHIFT)) & AIPS_PACRL_WP2_MASK) +#define AIPS_PACRL_SP2_MASK (0x400000U) +#define AIPS_PACRL_SP2_SHIFT (22U) +#define AIPS_PACRL_SP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRL_SP2_SHIFT)) & AIPS_PACRL_SP2_MASK) +#define AIPS_PACRL_TP1_MASK (0x1000000U) +#define AIPS_PACRL_TP1_SHIFT (24U) +#define AIPS_PACRL_TP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRL_TP1_SHIFT)) & AIPS_PACRL_TP1_MASK) +#define AIPS_PACRL_WP1_MASK (0x2000000U) +#define AIPS_PACRL_WP1_SHIFT (25U) +#define AIPS_PACRL_WP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRL_WP1_SHIFT)) & AIPS_PACRL_WP1_MASK) +#define AIPS_PACRL_SP1_MASK (0x4000000U) +#define AIPS_PACRL_SP1_SHIFT (26U) +#define AIPS_PACRL_SP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRL_SP1_SHIFT)) & AIPS_PACRL_SP1_MASK) +#define AIPS_PACRL_TP0_MASK (0x10000000U) +#define AIPS_PACRL_TP0_SHIFT (28U) +#define AIPS_PACRL_TP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRL_TP0_SHIFT)) & AIPS_PACRL_TP0_MASK) +#define AIPS_PACRL_WP0_MASK (0x20000000U) +#define AIPS_PACRL_WP0_SHIFT (29U) +#define AIPS_PACRL_WP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRL_WP0_SHIFT)) & AIPS_PACRL_WP0_MASK) +#define AIPS_PACRL_SP0_MASK (0x40000000U) +#define AIPS_PACRL_SP0_SHIFT (30U) +#define AIPS_PACRL_SP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRL_SP0_SHIFT)) & AIPS_PACRL_SP0_MASK) + +/*! @name PACRM - Peripheral Access Control Register */ +#define AIPS_PACRM_TP7_MASK (0x1U) +#define AIPS_PACRM_TP7_SHIFT (0U) +#define AIPS_PACRM_TP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRM_TP7_SHIFT)) & AIPS_PACRM_TP7_MASK) +#define AIPS_PACRM_WP7_MASK (0x2U) +#define AIPS_PACRM_WP7_SHIFT (1U) +#define AIPS_PACRM_WP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRM_WP7_SHIFT)) & AIPS_PACRM_WP7_MASK) +#define AIPS_PACRM_SP7_MASK (0x4U) +#define AIPS_PACRM_SP7_SHIFT (2U) +#define AIPS_PACRM_SP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRM_SP7_SHIFT)) & AIPS_PACRM_SP7_MASK) +#define AIPS_PACRM_TP6_MASK (0x10U) +#define AIPS_PACRM_TP6_SHIFT (4U) +#define AIPS_PACRM_TP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRM_TP6_SHIFT)) & AIPS_PACRM_TP6_MASK) +#define AIPS_PACRM_WP6_MASK (0x20U) +#define AIPS_PACRM_WP6_SHIFT (5U) +#define AIPS_PACRM_WP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRM_WP6_SHIFT)) & AIPS_PACRM_WP6_MASK) +#define AIPS_PACRM_SP6_MASK (0x40U) +#define AIPS_PACRM_SP6_SHIFT (6U) +#define AIPS_PACRM_SP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRM_SP6_SHIFT)) & AIPS_PACRM_SP6_MASK) +#define AIPS_PACRM_TP5_MASK (0x100U) +#define AIPS_PACRM_TP5_SHIFT (8U) +#define AIPS_PACRM_TP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRM_TP5_SHIFT)) & AIPS_PACRM_TP5_MASK) +#define AIPS_PACRM_WP5_MASK (0x200U) +#define AIPS_PACRM_WP5_SHIFT (9U) +#define AIPS_PACRM_WP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRM_WP5_SHIFT)) & AIPS_PACRM_WP5_MASK) +#define AIPS_PACRM_SP5_MASK (0x400U) +#define AIPS_PACRM_SP5_SHIFT (10U) +#define AIPS_PACRM_SP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRM_SP5_SHIFT)) & AIPS_PACRM_SP5_MASK) +#define AIPS_PACRM_TP4_MASK (0x1000U) +#define AIPS_PACRM_TP4_SHIFT (12U) +#define AIPS_PACRM_TP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRM_TP4_SHIFT)) & AIPS_PACRM_TP4_MASK) +#define AIPS_PACRM_WP4_MASK (0x2000U) +#define AIPS_PACRM_WP4_SHIFT (13U) +#define AIPS_PACRM_WP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRM_WP4_SHIFT)) & AIPS_PACRM_WP4_MASK) +#define AIPS_PACRM_SP4_MASK (0x4000U) +#define AIPS_PACRM_SP4_SHIFT (14U) +#define AIPS_PACRM_SP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRM_SP4_SHIFT)) & AIPS_PACRM_SP4_MASK) +#define AIPS_PACRM_TP3_MASK (0x10000U) +#define AIPS_PACRM_TP3_SHIFT (16U) +#define AIPS_PACRM_TP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRM_TP3_SHIFT)) & AIPS_PACRM_TP3_MASK) +#define AIPS_PACRM_WP3_MASK (0x20000U) +#define AIPS_PACRM_WP3_SHIFT (17U) +#define AIPS_PACRM_WP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRM_WP3_SHIFT)) & AIPS_PACRM_WP3_MASK) +#define AIPS_PACRM_SP3_MASK (0x40000U) +#define AIPS_PACRM_SP3_SHIFT (18U) +#define AIPS_PACRM_SP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRM_SP3_SHIFT)) & AIPS_PACRM_SP3_MASK) +#define AIPS_PACRM_TP2_MASK (0x100000U) +#define AIPS_PACRM_TP2_SHIFT (20U) +#define AIPS_PACRM_TP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRM_TP2_SHIFT)) & AIPS_PACRM_TP2_MASK) +#define AIPS_PACRM_WP2_MASK (0x200000U) +#define AIPS_PACRM_WP2_SHIFT (21U) +#define AIPS_PACRM_WP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRM_WP2_SHIFT)) & AIPS_PACRM_WP2_MASK) +#define AIPS_PACRM_SP2_MASK (0x400000U) +#define AIPS_PACRM_SP2_SHIFT (22U) +#define AIPS_PACRM_SP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRM_SP2_SHIFT)) & AIPS_PACRM_SP2_MASK) +#define AIPS_PACRM_TP1_MASK (0x1000000U) +#define AIPS_PACRM_TP1_SHIFT (24U) +#define AIPS_PACRM_TP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRM_TP1_SHIFT)) & AIPS_PACRM_TP1_MASK) +#define AIPS_PACRM_WP1_MASK (0x2000000U) +#define AIPS_PACRM_WP1_SHIFT (25U) +#define AIPS_PACRM_WP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRM_WP1_SHIFT)) & AIPS_PACRM_WP1_MASK) +#define AIPS_PACRM_SP1_MASK (0x4000000U) +#define AIPS_PACRM_SP1_SHIFT (26U) +#define AIPS_PACRM_SP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRM_SP1_SHIFT)) & AIPS_PACRM_SP1_MASK) +#define AIPS_PACRM_TP0_MASK (0x10000000U) +#define AIPS_PACRM_TP0_SHIFT (28U) +#define AIPS_PACRM_TP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRM_TP0_SHIFT)) & AIPS_PACRM_TP0_MASK) +#define AIPS_PACRM_WP0_MASK (0x20000000U) +#define AIPS_PACRM_WP0_SHIFT (29U) +#define AIPS_PACRM_WP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRM_WP0_SHIFT)) & AIPS_PACRM_WP0_MASK) +#define AIPS_PACRM_SP0_MASK (0x40000000U) +#define AIPS_PACRM_SP0_SHIFT (30U) +#define AIPS_PACRM_SP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRM_SP0_SHIFT)) & AIPS_PACRM_SP0_MASK) + +/*! @name PACRN - Peripheral Access Control Register */ +#define AIPS_PACRN_TP7_MASK (0x1U) +#define AIPS_PACRN_TP7_SHIFT (0U) +#define AIPS_PACRN_TP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRN_TP7_SHIFT)) & AIPS_PACRN_TP7_MASK) +#define AIPS_PACRN_WP7_MASK (0x2U) +#define AIPS_PACRN_WP7_SHIFT (1U) +#define AIPS_PACRN_WP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRN_WP7_SHIFT)) & AIPS_PACRN_WP7_MASK) +#define AIPS_PACRN_SP7_MASK (0x4U) +#define AIPS_PACRN_SP7_SHIFT (2U) +#define AIPS_PACRN_SP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRN_SP7_SHIFT)) & AIPS_PACRN_SP7_MASK) +#define AIPS_PACRN_TP6_MASK (0x10U) +#define AIPS_PACRN_TP6_SHIFT (4U) +#define AIPS_PACRN_TP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRN_TP6_SHIFT)) & AIPS_PACRN_TP6_MASK) +#define AIPS_PACRN_WP6_MASK (0x20U) +#define AIPS_PACRN_WP6_SHIFT (5U) +#define AIPS_PACRN_WP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRN_WP6_SHIFT)) & AIPS_PACRN_WP6_MASK) +#define AIPS_PACRN_SP6_MASK (0x40U) +#define AIPS_PACRN_SP6_SHIFT (6U) +#define AIPS_PACRN_SP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRN_SP6_SHIFT)) & AIPS_PACRN_SP6_MASK) +#define AIPS_PACRN_TP5_MASK (0x100U) +#define AIPS_PACRN_TP5_SHIFT (8U) +#define AIPS_PACRN_TP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRN_TP5_SHIFT)) & AIPS_PACRN_TP5_MASK) +#define AIPS_PACRN_WP5_MASK (0x200U) +#define AIPS_PACRN_WP5_SHIFT (9U) +#define AIPS_PACRN_WP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRN_WP5_SHIFT)) & AIPS_PACRN_WP5_MASK) +#define AIPS_PACRN_SP5_MASK (0x400U) +#define AIPS_PACRN_SP5_SHIFT (10U) +#define AIPS_PACRN_SP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRN_SP5_SHIFT)) & AIPS_PACRN_SP5_MASK) +#define AIPS_PACRN_TP4_MASK (0x1000U) +#define AIPS_PACRN_TP4_SHIFT (12U) +#define AIPS_PACRN_TP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRN_TP4_SHIFT)) & AIPS_PACRN_TP4_MASK) +#define AIPS_PACRN_WP4_MASK (0x2000U) +#define AIPS_PACRN_WP4_SHIFT (13U) +#define AIPS_PACRN_WP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRN_WP4_SHIFT)) & AIPS_PACRN_WP4_MASK) +#define AIPS_PACRN_SP4_MASK (0x4000U) +#define AIPS_PACRN_SP4_SHIFT (14U) +#define AIPS_PACRN_SP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRN_SP4_SHIFT)) & AIPS_PACRN_SP4_MASK) +#define AIPS_PACRN_TP3_MASK (0x10000U) +#define AIPS_PACRN_TP3_SHIFT (16U) +#define AIPS_PACRN_TP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRN_TP3_SHIFT)) & AIPS_PACRN_TP3_MASK) +#define AIPS_PACRN_WP3_MASK (0x20000U) +#define AIPS_PACRN_WP3_SHIFT (17U) +#define AIPS_PACRN_WP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRN_WP3_SHIFT)) & AIPS_PACRN_WP3_MASK) +#define AIPS_PACRN_SP3_MASK (0x40000U) +#define AIPS_PACRN_SP3_SHIFT (18U) +#define AIPS_PACRN_SP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRN_SP3_SHIFT)) & AIPS_PACRN_SP3_MASK) +#define AIPS_PACRN_TP2_MASK (0x100000U) +#define AIPS_PACRN_TP2_SHIFT (20U) +#define AIPS_PACRN_TP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRN_TP2_SHIFT)) & AIPS_PACRN_TP2_MASK) +#define AIPS_PACRN_WP2_MASK (0x200000U) +#define AIPS_PACRN_WP2_SHIFT (21U) +#define AIPS_PACRN_WP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRN_WP2_SHIFT)) & AIPS_PACRN_WP2_MASK) +#define AIPS_PACRN_SP2_MASK (0x400000U) +#define AIPS_PACRN_SP2_SHIFT (22U) +#define AIPS_PACRN_SP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRN_SP2_SHIFT)) & AIPS_PACRN_SP2_MASK) +#define AIPS_PACRN_TP1_MASK (0x1000000U) +#define AIPS_PACRN_TP1_SHIFT (24U) +#define AIPS_PACRN_TP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRN_TP1_SHIFT)) & AIPS_PACRN_TP1_MASK) +#define AIPS_PACRN_WP1_MASK (0x2000000U) +#define AIPS_PACRN_WP1_SHIFT (25U) +#define AIPS_PACRN_WP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRN_WP1_SHIFT)) & AIPS_PACRN_WP1_MASK) +#define AIPS_PACRN_SP1_MASK (0x4000000U) +#define AIPS_PACRN_SP1_SHIFT (26U) +#define AIPS_PACRN_SP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRN_SP1_SHIFT)) & AIPS_PACRN_SP1_MASK) +#define AIPS_PACRN_TP0_MASK (0x10000000U) +#define AIPS_PACRN_TP0_SHIFT (28U) +#define AIPS_PACRN_TP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRN_TP0_SHIFT)) & AIPS_PACRN_TP0_MASK) +#define AIPS_PACRN_WP0_MASK (0x20000000U) +#define AIPS_PACRN_WP0_SHIFT (29U) +#define AIPS_PACRN_WP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRN_WP0_SHIFT)) & AIPS_PACRN_WP0_MASK) +#define AIPS_PACRN_SP0_MASK (0x40000000U) +#define AIPS_PACRN_SP0_SHIFT (30U) +#define AIPS_PACRN_SP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRN_SP0_SHIFT)) & AIPS_PACRN_SP0_MASK) + +/*! @name PACRO - Peripheral Access Control Register */ +#define AIPS_PACRO_TP7_MASK (0x1U) +#define AIPS_PACRO_TP7_SHIFT (0U) +#define AIPS_PACRO_TP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRO_TP7_SHIFT)) & AIPS_PACRO_TP7_MASK) +#define AIPS_PACRO_WP7_MASK (0x2U) +#define AIPS_PACRO_WP7_SHIFT (1U) +#define AIPS_PACRO_WP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRO_WP7_SHIFT)) & AIPS_PACRO_WP7_MASK) +#define AIPS_PACRO_SP7_MASK (0x4U) +#define AIPS_PACRO_SP7_SHIFT (2U) +#define AIPS_PACRO_SP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRO_SP7_SHIFT)) & AIPS_PACRO_SP7_MASK) +#define AIPS_PACRO_TP6_MASK (0x10U) +#define AIPS_PACRO_TP6_SHIFT (4U) +#define AIPS_PACRO_TP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRO_TP6_SHIFT)) & AIPS_PACRO_TP6_MASK) +#define AIPS_PACRO_WP6_MASK (0x20U) +#define AIPS_PACRO_WP6_SHIFT (5U) +#define AIPS_PACRO_WP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRO_WP6_SHIFT)) & AIPS_PACRO_WP6_MASK) +#define AIPS_PACRO_SP6_MASK (0x40U) +#define AIPS_PACRO_SP6_SHIFT (6U) +#define AIPS_PACRO_SP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRO_SP6_SHIFT)) & AIPS_PACRO_SP6_MASK) +#define AIPS_PACRO_TP5_MASK (0x100U) +#define AIPS_PACRO_TP5_SHIFT (8U) +#define AIPS_PACRO_TP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRO_TP5_SHIFT)) & AIPS_PACRO_TP5_MASK) +#define AIPS_PACRO_WP5_MASK (0x200U) +#define AIPS_PACRO_WP5_SHIFT (9U) +#define AIPS_PACRO_WP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRO_WP5_SHIFT)) & AIPS_PACRO_WP5_MASK) +#define AIPS_PACRO_SP5_MASK (0x400U) +#define AIPS_PACRO_SP5_SHIFT (10U) +#define AIPS_PACRO_SP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRO_SP5_SHIFT)) & AIPS_PACRO_SP5_MASK) +#define AIPS_PACRO_TP4_MASK (0x1000U) +#define AIPS_PACRO_TP4_SHIFT (12U) +#define AIPS_PACRO_TP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRO_TP4_SHIFT)) & AIPS_PACRO_TP4_MASK) +#define AIPS_PACRO_WP4_MASK (0x2000U) +#define AIPS_PACRO_WP4_SHIFT (13U) +#define AIPS_PACRO_WP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRO_WP4_SHIFT)) & AIPS_PACRO_WP4_MASK) +#define AIPS_PACRO_SP4_MASK (0x4000U) +#define AIPS_PACRO_SP4_SHIFT (14U) +#define AIPS_PACRO_SP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRO_SP4_SHIFT)) & AIPS_PACRO_SP4_MASK) +#define AIPS_PACRO_TP3_MASK (0x10000U) +#define AIPS_PACRO_TP3_SHIFT (16U) +#define AIPS_PACRO_TP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRO_TP3_SHIFT)) & AIPS_PACRO_TP3_MASK) +#define AIPS_PACRO_WP3_MASK (0x20000U) +#define AIPS_PACRO_WP3_SHIFT (17U) +#define AIPS_PACRO_WP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRO_WP3_SHIFT)) & AIPS_PACRO_WP3_MASK) +#define AIPS_PACRO_SP3_MASK (0x40000U) +#define AIPS_PACRO_SP3_SHIFT (18U) +#define AIPS_PACRO_SP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRO_SP3_SHIFT)) & AIPS_PACRO_SP3_MASK) +#define AIPS_PACRO_TP2_MASK (0x100000U) +#define AIPS_PACRO_TP2_SHIFT (20U) +#define AIPS_PACRO_TP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRO_TP2_SHIFT)) & AIPS_PACRO_TP2_MASK) +#define AIPS_PACRO_WP2_MASK (0x200000U) +#define AIPS_PACRO_WP2_SHIFT (21U) +#define AIPS_PACRO_WP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRO_WP2_SHIFT)) & AIPS_PACRO_WP2_MASK) +#define AIPS_PACRO_SP2_MASK (0x400000U) +#define AIPS_PACRO_SP2_SHIFT (22U) +#define AIPS_PACRO_SP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRO_SP2_SHIFT)) & AIPS_PACRO_SP2_MASK) +#define AIPS_PACRO_TP1_MASK (0x1000000U) +#define AIPS_PACRO_TP1_SHIFT (24U) +#define AIPS_PACRO_TP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRO_TP1_SHIFT)) & AIPS_PACRO_TP1_MASK) +#define AIPS_PACRO_WP1_MASK (0x2000000U) +#define AIPS_PACRO_WP1_SHIFT (25U) +#define AIPS_PACRO_WP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRO_WP1_SHIFT)) & AIPS_PACRO_WP1_MASK) +#define AIPS_PACRO_SP1_MASK (0x4000000U) +#define AIPS_PACRO_SP1_SHIFT (26U) +#define AIPS_PACRO_SP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRO_SP1_SHIFT)) & AIPS_PACRO_SP1_MASK) +#define AIPS_PACRO_TP0_MASK (0x10000000U) +#define AIPS_PACRO_TP0_SHIFT (28U) +#define AIPS_PACRO_TP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRO_TP0_SHIFT)) & AIPS_PACRO_TP0_MASK) +#define AIPS_PACRO_WP0_MASK (0x20000000U) +#define AIPS_PACRO_WP0_SHIFT (29U) +#define AIPS_PACRO_WP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRO_WP0_SHIFT)) & AIPS_PACRO_WP0_MASK) +#define AIPS_PACRO_SP0_MASK (0x40000000U) +#define AIPS_PACRO_SP0_SHIFT (30U) +#define AIPS_PACRO_SP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRO_SP0_SHIFT)) & AIPS_PACRO_SP0_MASK) + +/*! @name PACRP - Peripheral Access Control Register */ +#define AIPS_PACRP_TP7_MASK (0x1U) +#define AIPS_PACRP_TP7_SHIFT (0U) +#define AIPS_PACRP_TP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRP_TP7_SHIFT)) & AIPS_PACRP_TP7_MASK) +#define AIPS_PACRP_WP7_MASK (0x2U) +#define AIPS_PACRP_WP7_SHIFT (1U) +#define AIPS_PACRP_WP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRP_WP7_SHIFT)) & AIPS_PACRP_WP7_MASK) +#define AIPS_PACRP_SP7_MASK (0x4U) +#define AIPS_PACRP_SP7_SHIFT (2U) +#define AIPS_PACRP_SP7(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRP_SP7_SHIFT)) & AIPS_PACRP_SP7_MASK) +#define AIPS_PACRP_TP6_MASK (0x10U) +#define AIPS_PACRP_TP6_SHIFT (4U) +#define AIPS_PACRP_TP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRP_TP6_SHIFT)) & AIPS_PACRP_TP6_MASK) +#define AIPS_PACRP_WP6_MASK (0x20U) +#define AIPS_PACRP_WP6_SHIFT (5U) +#define AIPS_PACRP_WP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRP_WP6_SHIFT)) & AIPS_PACRP_WP6_MASK) +#define AIPS_PACRP_SP6_MASK (0x40U) +#define AIPS_PACRP_SP6_SHIFT (6U) +#define AIPS_PACRP_SP6(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRP_SP6_SHIFT)) & AIPS_PACRP_SP6_MASK) +#define AIPS_PACRP_TP5_MASK (0x100U) +#define AIPS_PACRP_TP5_SHIFT (8U) +#define AIPS_PACRP_TP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRP_TP5_SHIFT)) & AIPS_PACRP_TP5_MASK) +#define AIPS_PACRP_WP5_MASK (0x200U) +#define AIPS_PACRP_WP5_SHIFT (9U) +#define AIPS_PACRP_WP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRP_WP5_SHIFT)) & AIPS_PACRP_WP5_MASK) +#define AIPS_PACRP_SP5_MASK (0x400U) +#define AIPS_PACRP_SP5_SHIFT (10U) +#define AIPS_PACRP_SP5(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRP_SP5_SHIFT)) & AIPS_PACRP_SP5_MASK) +#define AIPS_PACRP_TP4_MASK (0x1000U) +#define AIPS_PACRP_TP4_SHIFT (12U) +#define AIPS_PACRP_TP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRP_TP4_SHIFT)) & AIPS_PACRP_TP4_MASK) +#define AIPS_PACRP_WP4_MASK (0x2000U) +#define AIPS_PACRP_WP4_SHIFT (13U) +#define AIPS_PACRP_WP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRP_WP4_SHIFT)) & AIPS_PACRP_WP4_MASK) +#define AIPS_PACRP_SP4_MASK (0x4000U) +#define AIPS_PACRP_SP4_SHIFT (14U) +#define AIPS_PACRP_SP4(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRP_SP4_SHIFT)) & AIPS_PACRP_SP4_MASK) +#define AIPS_PACRP_TP3_MASK (0x10000U) +#define AIPS_PACRP_TP3_SHIFT (16U) +#define AIPS_PACRP_TP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRP_TP3_SHIFT)) & AIPS_PACRP_TP3_MASK) +#define AIPS_PACRP_WP3_MASK (0x20000U) +#define AIPS_PACRP_WP3_SHIFT (17U) +#define AIPS_PACRP_WP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRP_WP3_SHIFT)) & AIPS_PACRP_WP3_MASK) +#define AIPS_PACRP_SP3_MASK (0x40000U) +#define AIPS_PACRP_SP3_SHIFT (18U) +#define AIPS_PACRP_SP3(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRP_SP3_SHIFT)) & AIPS_PACRP_SP3_MASK) +#define AIPS_PACRP_TP2_MASK (0x100000U) +#define AIPS_PACRP_TP2_SHIFT (20U) +#define AIPS_PACRP_TP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRP_TP2_SHIFT)) & AIPS_PACRP_TP2_MASK) +#define AIPS_PACRP_WP2_MASK (0x200000U) +#define AIPS_PACRP_WP2_SHIFT (21U) +#define AIPS_PACRP_WP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRP_WP2_SHIFT)) & AIPS_PACRP_WP2_MASK) +#define AIPS_PACRP_SP2_MASK (0x400000U) +#define AIPS_PACRP_SP2_SHIFT (22U) +#define AIPS_PACRP_SP2(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRP_SP2_SHIFT)) & AIPS_PACRP_SP2_MASK) +#define AIPS_PACRP_TP1_MASK (0x1000000U) +#define AIPS_PACRP_TP1_SHIFT (24U) +#define AIPS_PACRP_TP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRP_TP1_SHIFT)) & AIPS_PACRP_TP1_MASK) +#define AIPS_PACRP_WP1_MASK (0x2000000U) +#define AIPS_PACRP_WP1_SHIFT (25U) +#define AIPS_PACRP_WP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRP_WP1_SHIFT)) & AIPS_PACRP_WP1_MASK) +#define AIPS_PACRP_SP1_MASK (0x4000000U) +#define AIPS_PACRP_SP1_SHIFT (26U) +#define AIPS_PACRP_SP1(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRP_SP1_SHIFT)) & AIPS_PACRP_SP1_MASK) +#define AIPS_PACRP_TP0_MASK (0x10000000U) +#define AIPS_PACRP_TP0_SHIFT (28U) +#define AIPS_PACRP_TP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRP_TP0_SHIFT)) & AIPS_PACRP_TP0_MASK) +#define AIPS_PACRP_WP0_MASK (0x20000000U) +#define AIPS_PACRP_WP0_SHIFT (29U) +#define AIPS_PACRP_WP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRP_WP0_SHIFT)) & AIPS_PACRP_WP0_MASK) +#define AIPS_PACRP_SP0_MASK (0x40000000U) +#define AIPS_PACRP_SP0_SHIFT (30U) +#define AIPS_PACRP_SP0(x) (((uint32_t)(((uint32_t)(x)) << AIPS_PACRP_SP0_SHIFT)) & AIPS_PACRP_SP0_MASK) + + +/*! + * @} + */ /* end of group AIPS_Register_Masks */ + + +/* AIPS - Peripheral instance base addresses */ +/** Peripheral AIPS base address */ +#define AIPS_BASE (0x40000000u) +/** Peripheral AIPS base pointer */ +#define AIPS ((AIPS_Type *)AIPS_BASE) +/** Array initializer of AIPS peripheral base addresses */ +#define AIPS_BASE_ADDRS { AIPS_BASE } +/** Array initializer of AIPS peripheral base pointers */ +#define AIPS_BASE_PTRS { AIPS } + +/*! + * @} + */ /* end of group AIPS_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- CMP Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup CMP_Peripheral_Access_Layer CMP Peripheral Access Layer + * @{ + */ + +/** CMP - Register Layout Typedef */ +typedef struct { + __IO uint8_t CR0; /**< CMP Control Register 0, offset: 0x0 */ + __IO uint8_t CR1; /**< CMP Control Register 1, offset: 0x1 */ + __IO uint8_t FPR; /**< CMP Filter Period Register, offset: 0x2 */ + __IO uint8_t SCR; /**< CMP Status and Control Register, offset: 0x3 */ + __IO uint8_t DACCR; /**< DAC Control Register, offset: 0x4 */ + __IO uint8_t MUXCR; /**< MUX Control Register, offset: 0x5 */ +} CMP_Type; + +/* ---------------------------------------------------------------------------- + -- CMP Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup CMP_Register_Masks CMP Register Masks + * @{ + */ + +/*! @name CR0 - CMP Control Register 0 */ +#define CMP_CR0_HYSTCTR_MASK (0x3U) +#define CMP_CR0_HYSTCTR_SHIFT (0U) +#define CMP_CR0_HYSTCTR(x) (((uint8_t)(((uint8_t)(x)) << CMP_CR0_HYSTCTR_SHIFT)) & CMP_CR0_HYSTCTR_MASK) +#define CMP_CR0_FILTER_CNT_MASK (0x70U) +#define CMP_CR0_FILTER_CNT_SHIFT (4U) +#define CMP_CR0_FILTER_CNT(x) (((uint8_t)(((uint8_t)(x)) << CMP_CR0_FILTER_CNT_SHIFT)) & CMP_CR0_FILTER_CNT_MASK) + +/*! @name CR1 - CMP Control Register 1 */ +#define CMP_CR1_EN_MASK (0x1U) +#define CMP_CR1_EN_SHIFT (0U) +#define CMP_CR1_EN(x) (((uint8_t)(((uint8_t)(x)) << CMP_CR1_EN_SHIFT)) & CMP_CR1_EN_MASK) +#define CMP_CR1_OPE_MASK (0x2U) +#define CMP_CR1_OPE_SHIFT (1U) +#define CMP_CR1_OPE(x) (((uint8_t)(((uint8_t)(x)) << CMP_CR1_OPE_SHIFT)) & CMP_CR1_OPE_MASK) +#define CMP_CR1_COS_MASK (0x4U) +#define CMP_CR1_COS_SHIFT (2U) +#define CMP_CR1_COS(x) (((uint8_t)(((uint8_t)(x)) << CMP_CR1_COS_SHIFT)) & CMP_CR1_COS_MASK) +#define CMP_CR1_INV_MASK (0x8U) +#define CMP_CR1_INV_SHIFT (3U) +#define CMP_CR1_INV(x) (((uint8_t)(((uint8_t)(x)) << CMP_CR1_INV_SHIFT)) & CMP_CR1_INV_MASK) +#define CMP_CR1_PMODE_MASK (0x10U) +#define CMP_CR1_PMODE_SHIFT (4U) +#define CMP_CR1_PMODE(x) (((uint8_t)(((uint8_t)(x)) << CMP_CR1_PMODE_SHIFT)) & CMP_CR1_PMODE_MASK) +#define CMP_CR1_TRIGM_MASK (0x20U) +#define CMP_CR1_TRIGM_SHIFT (5U) +#define CMP_CR1_TRIGM(x) (((uint8_t)(((uint8_t)(x)) << CMP_CR1_TRIGM_SHIFT)) & CMP_CR1_TRIGM_MASK) +#define CMP_CR1_WE_MASK (0x40U) +#define CMP_CR1_WE_SHIFT (6U) +#define CMP_CR1_WE(x) (((uint8_t)(((uint8_t)(x)) << CMP_CR1_WE_SHIFT)) & CMP_CR1_WE_MASK) +#define CMP_CR1_SE_MASK (0x80U) +#define CMP_CR1_SE_SHIFT (7U) +#define CMP_CR1_SE(x) (((uint8_t)(((uint8_t)(x)) << CMP_CR1_SE_SHIFT)) & CMP_CR1_SE_MASK) + +/*! @name FPR - CMP Filter Period Register */ +#define CMP_FPR_FILT_PER_MASK (0xFFU) +#define CMP_FPR_FILT_PER_SHIFT (0U) +#define CMP_FPR_FILT_PER(x) (((uint8_t)(((uint8_t)(x)) << CMP_FPR_FILT_PER_SHIFT)) & CMP_FPR_FILT_PER_MASK) + +/*! @name SCR - CMP Status and Control Register */ +#define CMP_SCR_COUT_MASK (0x1U) +#define CMP_SCR_COUT_SHIFT (0U) +#define CMP_SCR_COUT(x) (((uint8_t)(((uint8_t)(x)) << CMP_SCR_COUT_SHIFT)) & CMP_SCR_COUT_MASK) +#define CMP_SCR_CFF_MASK (0x2U) +#define CMP_SCR_CFF_SHIFT (1U) +#define CMP_SCR_CFF(x) (((uint8_t)(((uint8_t)(x)) << CMP_SCR_CFF_SHIFT)) & CMP_SCR_CFF_MASK) +#define CMP_SCR_CFR_MASK (0x4U) +#define CMP_SCR_CFR_SHIFT (2U) +#define CMP_SCR_CFR(x) (((uint8_t)(((uint8_t)(x)) << CMP_SCR_CFR_SHIFT)) & CMP_SCR_CFR_MASK) +#define CMP_SCR_IEF_MASK (0x8U) +#define CMP_SCR_IEF_SHIFT (3U) +#define CMP_SCR_IEF(x) (((uint8_t)(((uint8_t)(x)) << CMP_SCR_IEF_SHIFT)) & CMP_SCR_IEF_MASK) +#define CMP_SCR_IER_MASK (0x10U) +#define CMP_SCR_IER_SHIFT (4U) +#define CMP_SCR_IER(x) (((uint8_t)(((uint8_t)(x)) << CMP_SCR_IER_SHIFT)) & CMP_SCR_IER_MASK) +#define CMP_SCR_DMAEN_MASK (0x40U) +#define CMP_SCR_DMAEN_SHIFT (6U) +#define CMP_SCR_DMAEN(x) (((uint8_t)(((uint8_t)(x)) << CMP_SCR_DMAEN_SHIFT)) & CMP_SCR_DMAEN_MASK) + +/*! @name DACCR - DAC Control Register */ +#define CMP_DACCR_VOSEL_MASK (0x3FU) +#define CMP_DACCR_VOSEL_SHIFT (0U) +#define CMP_DACCR_VOSEL(x) (((uint8_t)(((uint8_t)(x)) << CMP_DACCR_VOSEL_SHIFT)) & CMP_DACCR_VOSEL_MASK) +#define CMP_DACCR_VRSEL_MASK (0x40U) +#define CMP_DACCR_VRSEL_SHIFT (6U) +#define CMP_DACCR_VRSEL(x) (((uint8_t)(((uint8_t)(x)) << CMP_DACCR_VRSEL_SHIFT)) & CMP_DACCR_VRSEL_MASK) +#define CMP_DACCR_DACEN_MASK (0x80U) +#define CMP_DACCR_DACEN_SHIFT (7U) +#define CMP_DACCR_DACEN(x) (((uint8_t)(((uint8_t)(x)) << CMP_DACCR_DACEN_SHIFT)) & CMP_DACCR_DACEN_MASK) + +/*! @name MUXCR - MUX Control Register */ +#define CMP_MUXCR_MSEL_MASK (0x7U) +#define CMP_MUXCR_MSEL_SHIFT (0U) +#define CMP_MUXCR_MSEL(x) (((uint8_t)(((uint8_t)(x)) << CMP_MUXCR_MSEL_SHIFT)) & CMP_MUXCR_MSEL_MASK) +#define CMP_MUXCR_PSEL_MASK (0x38U) +#define CMP_MUXCR_PSEL_SHIFT (3U) +#define CMP_MUXCR_PSEL(x) (((uint8_t)(((uint8_t)(x)) << CMP_MUXCR_PSEL_SHIFT)) & CMP_MUXCR_PSEL_MASK) + + +/*! + * @} + */ /* end of group CMP_Register_Masks */ + + +/* CMP - Peripheral instance base addresses */ +/** Peripheral CMP0 base address */ +#define CMP0_BASE (0x40073000u) +/** Peripheral CMP0 base pointer */ +#define CMP0 ((CMP_Type *)CMP0_BASE) +/** Array initializer of CMP peripheral base addresses */ +#define CMP_BASE_ADDRS { CMP0_BASE } +/** Array initializer of CMP peripheral base pointers */ +#define CMP_BASE_PTRS { CMP0 } +/** Interrupt vectors for the CMP peripheral type */ +#define CMP_IRQS { CMP0_IRQn } + +/*! + * @} + */ /* end of group CMP_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- CRC Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup CRC_Peripheral_Access_Layer CRC Peripheral Access Layer + * @{ + */ + +/** CRC - Register Layout Typedef */ +typedef struct { + union { /* offset: 0x0 */ + struct { /* offset: 0x0 */ + __IO uint16_t CRCL; /**< CRC_CRCL register., offset: 0x0 */ + __IO uint16_t CRCH; /**< CRC_CRCH register., offset: 0x2 */ + } ACCESS16BIT; + __IO uint32_t CRC; /**< CRC Data register, offset: 0x0 */ + struct { /* offset: 0x0 */ + __IO uint8_t CRCLL; /**< CRC_CRCLL register., offset: 0x0 */ + __IO uint8_t CRCLU; /**< CRC_CRCLU register., offset: 0x1 */ + __IO uint8_t CRCHL; /**< CRC_CRCHL register., offset: 0x2 */ + __IO uint8_t CRCHU; /**< CRC_CRCHU register., offset: 0x3 */ + } ACCESS8BIT; + }; + union { /* offset: 0x4 */ + struct { /* offset: 0x4 */ + __IO uint16_t GPOLYL; /**< CRC_GPOLYL register., offset: 0x4 */ + __IO uint16_t GPOLYH; /**< CRC_GPOLYH register., offset: 0x6 */ + } GPOLY_ACCESS16BIT; + __IO uint32_t GPOLY; /**< CRC Polynomial register, offset: 0x4 */ + struct { /* offset: 0x4 */ + __IO uint8_t GPOLYLL; /**< CRC_GPOLYLL register., offset: 0x4 */ + __IO uint8_t GPOLYLU; /**< CRC_GPOLYLU register., offset: 0x5 */ + __IO uint8_t GPOLYHL; /**< CRC_GPOLYHL register., offset: 0x6 */ + __IO uint8_t GPOLYHU; /**< CRC_GPOLYHU register., offset: 0x7 */ + } GPOLY_ACCESS8BIT; + }; + union { /* offset: 0x8 */ + __IO uint32_t CTRL; /**< CRC Control register, offset: 0x8 */ + struct { /* offset: 0x8 */ + uint8_t RESERVED_0[3]; + __IO uint8_t CTRLHU; /**< CRC_CTRLHU register., offset: 0xB */ + } CTRL_ACCESS8BIT; + }; +} CRC_Type; + +/* ---------------------------------------------------------------------------- + -- CRC Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup CRC_Register_Masks CRC Register Masks + * @{ + */ + +/*! @name CRCL - CRC_CRCL register. */ +#define CRC_CRCL_CRCL_MASK (0xFFFFU) +#define CRC_CRCL_CRCL_SHIFT (0U) +#define CRC_CRCL_CRCL(x) (((uint16_t)(((uint16_t)(x)) << CRC_CRCL_CRCL_SHIFT)) & CRC_CRCL_CRCL_MASK) + +/*! @name CRCH - CRC_CRCH register. */ +#define CRC_CRCH_CRCH_MASK (0xFFFFU) +#define CRC_CRCH_CRCH_SHIFT (0U) +#define CRC_CRCH_CRCH(x) (((uint16_t)(((uint16_t)(x)) << CRC_CRCH_CRCH_SHIFT)) & CRC_CRCH_CRCH_MASK) + +/*! @name CRC - CRC Data register */ +#define CRC_CRC_LL_MASK (0xFFU) +#define CRC_CRC_LL_SHIFT (0U) +#define CRC_CRC_LL(x) (((uint32_t)(((uint32_t)(x)) << CRC_CRC_LL_SHIFT)) & CRC_CRC_LL_MASK) +#define CRC_CRC_LU_MASK (0xFF00U) +#define CRC_CRC_LU_SHIFT (8U) +#define CRC_CRC_LU(x) (((uint32_t)(((uint32_t)(x)) << CRC_CRC_LU_SHIFT)) & CRC_CRC_LU_MASK) +#define CRC_CRC_HL_MASK (0xFF0000U) +#define CRC_CRC_HL_SHIFT (16U) +#define CRC_CRC_HL(x) (((uint32_t)(((uint32_t)(x)) << CRC_CRC_HL_SHIFT)) & CRC_CRC_HL_MASK) +#define CRC_CRC_HU_MASK (0xFF000000U) +#define CRC_CRC_HU_SHIFT (24U) +#define CRC_CRC_HU(x) (((uint32_t)(((uint32_t)(x)) << CRC_CRC_HU_SHIFT)) & CRC_CRC_HU_MASK) + +/*! @name CRCLL - CRC_CRCLL register. */ +#define CRC_CRCLL_CRCLL_MASK (0xFFU) +#define CRC_CRCLL_CRCLL_SHIFT (0U) +#define CRC_CRCLL_CRCLL(x) (((uint8_t)(((uint8_t)(x)) << CRC_CRCLL_CRCLL_SHIFT)) & CRC_CRCLL_CRCLL_MASK) + +/*! @name CRCLU - CRC_CRCLU register. */ +#define CRC_CRCLU_CRCLU_MASK (0xFFU) +#define CRC_CRCLU_CRCLU_SHIFT (0U) +#define CRC_CRCLU_CRCLU(x) (((uint8_t)(((uint8_t)(x)) << CRC_CRCLU_CRCLU_SHIFT)) & CRC_CRCLU_CRCLU_MASK) + +/*! @name CRCHL - CRC_CRCHL register. */ +#define CRC_CRCHL_CRCHL_MASK (0xFFU) +#define CRC_CRCHL_CRCHL_SHIFT (0U) +#define CRC_CRCHL_CRCHL(x) (((uint8_t)(((uint8_t)(x)) << CRC_CRCHL_CRCHL_SHIFT)) & CRC_CRCHL_CRCHL_MASK) + +/*! @name CRCHU - CRC_CRCHU register. */ +#define CRC_CRCHU_CRCHU_MASK (0xFFU) +#define CRC_CRCHU_CRCHU_SHIFT (0U) +#define CRC_CRCHU_CRCHU(x) (((uint8_t)(((uint8_t)(x)) << CRC_CRCHU_CRCHU_SHIFT)) & CRC_CRCHU_CRCHU_MASK) + +/*! @name GPOLYL - CRC_GPOLYL register. */ +#define CRC_GPOLYL_GPOLYL_MASK (0xFFFFU) +#define CRC_GPOLYL_GPOLYL_SHIFT (0U) +#define CRC_GPOLYL_GPOLYL(x) (((uint16_t)(((uint16_t)(x)) << CRC_GPOLYL_GPOLYL_SHIFT)) & CRC_GPOLYL_GPOLYL_MASK) + +/*! @name GPOLYH - CRC_GPOLYH register. */ +#define CRC_GPOLYH_GPOLYH_MASK (0xFFFFU) +#define CRC_GPOLYH_GPOLYH_SHIFT (0U) +#define CRC_GPOLYH_GPOLYH(x) (((uint16_t)(((uint16_t)(x)) << CRC_GPOLYH_GPOLYH_SHIFT)) & CRC_GPOLYH_GPOLYH_MASK) + +/*! @name GPOLY - CRC Polynomial register */ +#define CRC_GPOLY_LOW_MASK (0xFFFFU) +#define CRC_GPOLY_LOW_SHIFT (0U) +#define CRC_GPOLY_LOW(x) (((uint32_t)(((uint32_t)(x)) << CRC_GPOLY_LOW_SHIFT)) & CRC_GPOLY_LOW_MASK) +#define CRC_GPOLY_HIGH_MASK (0xFFFF0000U) +#define CRC_GPOLY_HIGH_SHIFT (16U) +#define CRC_GPOLY_HIGH(x) (((uint32_t)(((uint32_t)(x)) << CRC_GPOLY_HIGH_SHIFT)) & CRC_GPOLY_HIGH_MASK) + +/*! @name GPOLYLL - CRC_GPOLYLL register. */ +#define CRC_GPOLYLL_GPOLYLL_MASK (0xFFU) +#define CRC_GPOLYLL_GPOLYLL_SHIFT (0U) +#define CRC_GPOLYLL_GPOLYLL(x) (((uint8_t)(((uint8_t)(x)) << CRC_GPOLYLL_GPOLYLL_SHIFT)) & CRC_GPOLYLL_GPOLYLL_MASK) + +/*! @name GPOLYLU - CRC_GPOLYLU register. */ +#define CRC_GPOLYLU_GPOLYLU_MASK (0xFFU) +#define CRC_GPOLYLU_GPOLYLU_SHIFT (0U) +#define CRC_GPOLYLU_GPOLYLU(x) (((uint8_t)(((uint8_t)(x)) << CRC_GPOLYLU_GPOLYLU_SHIFT)) & CRC_GPOLYLU_GPOLYLU_MASK) + +/*! @name GPOLYHL - CRC_GPOLYHL register. */ +#define CRC_GPOLYHL_GPOLYHL_MASK (0xFFU) +#define CRC_GPOLYHL_GPOLYHL_SHIFT (0U) +#define CRC_GPOLYHL_GPOLYHL(x) (((uint8_t)(((uint8_t)(x)) << CRC_GPOLYHL_GPOLYHL_SHIFT)) & CRC_GPOLYHL_GPOLYHL_MASK) + +/*! @name GPOLYHU - CRC_GPOLYHU register. */ +#define CRC_GPOLYHU_GPOLYHU_MASK (0xFFU) +#define CRC_GPOLYHU_GPOLYHU_SHIFT (0U) +#define CRC_GPOLYHU_GPOLYHU(x) (((uint8_t)(((uint8_t)(x)) << CRC_GPOLYHU_GPOLYHU_SHIFT)) & CRC_GPOLYHU_GPOLYHU_MASK) + +/*! @name CTRL - CRC Control register */ +#define CRC_CTRL_TCRC_MASK (0x1000000U) +#define CRC_CTRL_TCRC_SHIFT (24U) +#define CRC_CTRL_TCRC(x) (((uint32_t)(((uint32_t)(x)) << CRC_CTRL_TCRC_SHIFT)) & CRC_CTRL_TCRC_MASK) +#define CRC_CTRL_WAS_MASK (0x2000000U) +#define CRC_CTRL_WAS_SHIFT (25U) +#define CRC_CTRL_WAS(x) (((uint32_t)(((uint32_t)(x)) << CRC_CTRL_WAS_SHIFT)) & CRC_CTRL_WAS_MASK) +#define CRC_CTRL_FXOR_MASK (0x4000000U) +#define CRC_CTRL_FXOR_SHIFT (26U) +#define CRC_CTRL_FXOR(x) (((uint32_t)(((uint32_t)(x)) << CRC_CTRL_FXOR_SHIFT)) & CRC_CTRL_FXOR_MASK) +#define CRC_CTRL_TOTR_MASK (0x30000000U) +#define CRC_CTRL_TOTR_SHIFT (28U) +#define CRC_CTRL_TOTR(x) (((uint32_t)(((uint32_t)(x)) << CRC_CTRL_TOTR_SHIFT)) & CRC_CTRL_TOTR_MASK) +#define CRC_CTRL_TOT_MASK (0xC0000000U) +#define CRC_CTRL_TOT_SHIFT (30U) +#define CRC_CTRL_TOT(x) (((uint32_t)(((uint32_t)(x)) << CRC_CTRL_TOT_SHIFT)) & CRC_CTRL_TOT_MASK) + +/*! @name CTRLHU - CRC_CTRLHU register. */ +#define CRC_CTRLHU_TCRC_MASK (0x1U) +#define CRC_CTRLHU_TCRC_SHIFT (0U) +#define CRC_CTRLHU_TCRC(x) (((uint8_t)(((uint8_t)(x)) << CRC_CTRLHU_TCRC_SHIFT)) & CRC_CTRLHU_TCRC_MASK) +#define CRC_CTRLHU_WAS_MASK (0x2U) +#define CRC_CTRLHU_WAS_SHIFT (1U) +#define CRC_CTRLHU_WAS(x) (((uint8_t)(((uint8_t)(x)) << CRC_CTRLHU_WAS_SHIFT)) & CRC_CTRLHU_WAS_MASK) +#define CRC_CTRLHU_FXOR_MASK (0x4U) +#define CRC_CTRLHU_FXOR_SHIFT (2U) +#define CRC_CTRLHU_FXOR(x) (((uint8_t)(((uint8_t)(x)) << CRC_CTRLHU_FXOR_SHIFT)) & CRC_CTRLHU_FXOR_MASK) +#define CRC_CTRLHU_TOTR_MASK (0x30U) +#define CRC_CTRLHU_TOTR_SHIFT (4U) +#define CRC_CTRLHU_TOTR(x) (((uint8_t)(((uint8_t)(x)) << CRC_CTRLHU_TOTR_SHIFT)) & CRC_CTRLHU_TOTR_MASK) +#define CRC_CTRLHU_TOT_MASK (0xC0U) +#define CRC_CTRLHU_TOT_SHIFT (6U) +#define CRC_CTRLHU_TOT(x) (((uint8_t)(((uint8_t)(x)) << CRC_CTRLHU_TOT_SHIFT)) & CRC_CTRLHU_TOT_MASK) + + +/*! + * @} + */ /* end of group CRC_Register_Masks */ + + +/* CRC - Peripheral instance base addresses */ +/** Peripheral CRC base address */ +#define CRC_BASE (0x40032000u) +/** Peripheral CRC base pointer */ +#define CRC0 ((CRC_Type *)CRC_BASE) +/** Array initializer of CRC peripheral base addresses */ +#define CRC_BASE_ADDRS { CRC_BASE } +/** Array initializer of CRC peripheral base pointers */ +#define CRC_BASE_PTRS { CRC0 } + +/*! + * @} + */ /* end of group CRC_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- DAC Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup DAC_Peripheral_Access_Layer DAC Peripheral Access Layer + * @{ + */ + +/** DAC - Register Layout Typedef */ +typedef struct { + struct { /* offset: 0x0, array step: 0x2 */ + __IO uint8_t DATL; /**< DAC Data Low Register, array offset: 0x0, array step: 0x2 */ + __IO uint8_t DATH; /**< DAC Data High Register, array offset: 0x1, array step: 0x2 */ + } DAT[16]; + __IO uint8_t SR; /**< DAC Status Register, offset: 0x20 */ + __IO uint8_t C0; /**< DAC Control Register, offset: 0x21 */ + __IO uint8_t C1; /**< DAC Control Register 1, offset: 0x22 */ + __IO uint8_t C2; /**< DAC Control Register 2, offset: 0x23 */ +} DAC_Type; + +/* ---------------------------------------------------------------------------- + -- DAC Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup DAC_Register_Masks DAC Register Masks + * @{ + */ + +/*! @name DATL - DAC Data Low Register */ +#define DAC_DATL_DATA0_MASK (0xFFU) +#define DAC_DATL_DATA0_SHIFT (0U) +#define DAC_DATL_DATA0(x) (((uint8_t)(((uint8_t)(x)) << DAC_DATL_DATA0_SHIFT)) & DAC_DATL_DATA0_MASK) + +/* The count of DAC_DATL */ +#define DAC_DATL_COUNT (16U) + +/*! @name DATH - DAC Data High Register */ +#define DAC_DATH_DATA1_MASK (0xFU) +#define DAC_DATH_DATA1_SHIFT (0U) +#define DAC_DATH_DATA1(x) (((uint8_t)(((uint8_t)(x)) << DAC_DATH_DATA1_SHIFT)) & DAC_DATH_DATA1_MASK) + +/* The count of DAC_DATH */ +#define DAC_DATH_COUNT (16U) + +/*! @name SR - DAC Status Register */ +#define DAC_SR_DACBFRPBF_MASK (0x1U) +#define DAC_SR_DACBFRPBF_SHIFT (0U) +#define DAC_SR_DACBFRPBF(x) (((uint8_t)(((uint8_t)(x)) << DAC_SR_DACBFRPBF_SHIFT)) & DAC_SR_DACBFRPBF_MASK) +#define DAC_SR_DACBFRPTF_MASK (0x2U) +#define DAC_SR_DACBFRPTF_SHIFT (1U) +#define DAC_SR_DACBFRPTF(x) (((uint8_t)(((uint8_t)(x)) << DAC_SR_DACBFRPTF_SHIFT)) & DAC_SR_DACBFRPTF_MASK) +#define DAC_SR_DACBFWMF_MASK (0x4U) +#define DAC_SR_DACBFWMF_SHIFT (2U) +#define DAC_SR_DACBFWMF(x) (((uint8_t)(((uint8_t)(x)) << DAC_SR_DACBFWMF_SHIFT)) & DAC_SR_DACBFWMF_MASK) + +/*! @name C0 - DAC Control Register */ +#define DAC_C0_DACBBIEN_MASK (0x1U) +#define DAC_C0_DACBBIEN_SHIFT (0U) +#define DAC_C0_DACBBIEN(x) (((uint8_t)(((uint8_t)(x)) << DAC_C0_DACBBIEN_SHIFT)) & DAC_C0_DACBBIEN_MASK) +#define DAC_C0_DACBTIEN_MASK (0x2U) +#define DAC_C0_DACBTIEN_SHIFT (1U) +#define DAC_C0_DACBTIEN(x) (((uint8_t)(((uint8_t)(x)) << DAC_C0_DACBTIEN_SHIFT)) & DAC_C0_DACBTIEN_MASK) +#define DAC_C0_DACBWIEN_MASK (0x4U) +#define DAC_C0_DACBWIEN_SHIFT (2U) +#define DAC_C0_DACBWIEN(x) (((uint8_t)(((uint8_t)(x)) << DAC_C0_DACBWIEN_SHIFT)) & DAC_C0_DACBWIEN_MASK) +#define DAC_C0_LPEN_MASK (0x8U) +#define DAC_C0_LPEN_SHIFT (3U) +#define DAC_C0_LPEN(x) (((uint8_t)(((uint8_t)(x)) << DAC_C0_LPEN_SHIFT)) & DAC_C0_LPEN_MASK) +#define DAC_C0_DACSWTRG_MASK (0x10U) +#define DAC_C0_DACSWTRG_SHIFT (4U) +#define DAC_C0_DACSWTRG(x) (((uint8_t)(((uint8_t)(x)) << DAC_C0_DACSWTRG_SHIFT)) & DAC_C0_DACSWTRG_MASK) +#define DAC_C0_DACTRGSEL_MASK (0x20U) +#define DAC_C0_DACTRGSEL_SHIFT (5U) +#define DAC_C0_DACTRGSEL(x) (((uint8_t)(((uint8_t)(x)) << DAC_C0_DACTRGSEL_SHIFT)) & DAC_C0_DACTRGSEL_MASK) +#define DAC_C0_DACRFS_MASK (0x40U) +#define DAC_C0_DACRFS_SHIFT (6U) +#define DAC_C0_DACRFS(x) (((uint8_t)(((uint8_t)(x)) << DAC_C0_DACRFS_SHIFT)) & DAC_C0_DACRFS_MASK) +#define DAC_C0_DACEN_MASK (0x80U) +#define DAC_C0_DACEN_SHIFT (7U) +#define DAC_C0_DACEN(x) (((uint8_t)(((uint8_t)(x)) << DAC_C0_DACEN_SHIFT)) & DAC_C0_DACEN_MASK) + +/*! @name C1 - DAC Control Register 1 */ +#define DAC_C1_DACBFEN_MASK (0x1U) +#define DAC_C1_DACBFEN_SHIFT (0U) +#define DAC_C1_DACBFEN(x) (((uint8_t)(((uint8_t)(x)) << DAC_C1_DACBFEN_SHIFT)) & DAC_C1_DACBFEN_MASK) +#define DAC_C1_DACBFMD_MASK (0x6U) +#define DAC_C1_DACBFMD_SHIFT (1U) +#define DAC_C1_DACBFMD(x) (((uint8_t)(((uint8_t)(x)) << DAC_C1_DACBFMD_SHIFT)) & DAC_C1_DACBFMD_MASK) +#define DAC_C1_DACBFWM_MASK (0x18U) +#define DAC_C1_DACBFWM_SHIFT (3U) +#define DAC_C1_DACBFWM(x) (((uint8_t)(((uint8_t)(x)) << DAC_C1_DACBFWM_SHIFT)) & DAC_C1_DACBFWM_MASK) +#define DAC_C1_DMAEN_MASK (0x80U) +#define DAC_C1_DMAEN_SHIFT (7U) +#define DAC_C1_DMAEN(x) (((uint8_t)(((uint8_t)(x)) << DAC_C1_DMAEN_SHIFT)) & DAC_C1_DMAEN_MASK) + +/*! @name C2 - DAC Control Register 2 */ +#define DAC_C2_DACBFUP_MASK (0xFU) +#define DAC_C2_DACBFUP_SHIFT (0U) +#define DAC_C2_DACBFUP(x) (((uint8_t)(((uint8_t)(x)) << DAC_C2_DACBFUP_SHIFT)) & DAC_C2_DACBFUP_MASK) +#define DAC_C2_DACBFRP_MASK (0xF0U) +#define DAC_C2_DACBFRP_SHIFT (4U) +#define DAC_C2_DACBFRP(x) (((uint8_t)(((uint8_t)(x)) << DAC_C2_DACBFRP_SHIFT)) & DAC_C2_DACBFRP_MASK) + + +/*! + * @} + */ /* end of group DAC_Register_Masks */ + + +/* DAC - Peripheral instance base addresses */ +/** Peripheral DAC0 base address */ +#define DAC0_BASE (0x4003F000u) +/** Peripheral DAC0 base pointer */ +#define DAC0 ((DAC_Type *)DAC0_BASE) +/** Array initializer of DAC peripheral base addresses */ +#define DAC_BASE_ADDRS { DAC0_BASE } +/** Array initializer of DAC peripheral base pointers */ +#define DAC_BASE_PTRS { DAC0 } +/** Interrupt vectors for the DAC peripheral type */ +#define DAC_IRQS { DAC0_IRQn } + +/*! + * @} + */ /* end of group DAC_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- DMA Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup DMA_Peripheral_Access_Layer DMA Peripheral Access Layer + * @{ + */ + +/** DMA - Register Layout Typedef */ +typedef struct { + __IO uint32_t CR; /**< Control Register, offset: 0x0 */ + __I uint32_t ES; /**< Error Status Register, offset: 0x4 */ + uint8_t RESERVED_0[4]; + __IO uint32_t ERQ; /**< Enable Request Register, offset: 0xC */ + uint8_t RESERVED_1[4]; + __IO uint32_t EEI; /**< Enable Error Interrupt Register, offset: 0x14 */ + __O uint8_t CEEI; /**< Clear Enable Error Interrupt Register, offset: 0x18 */ + __O uint8_t SEEI; /**< Set Enable Error Interrupt Register, offset: 0x19 */ + __O uint8_t CERQ; /**< Clear Enable Request Register, offset: 0x1A */ + __O uint8_t SERQ; /**< Set Enable Request Register, offset: 0x1B */ + __O uint8_t CDNE; /**< Clear DONE Status Bit Register, offset: 0x1C */ + __O uint8_t SSRT; /**< Set START Bit Register, offset: 0x1D */ + __O uint8_t CERR; /**< Clear Error Register, offset: 0x1E */ + __O uint8_t CINT; /**< Clear Interrupt Request Register, offset: 0x1F */ + uint8_t RESERVED_2[4]; + __IO uint32_t INT; /**< Interrupt Request Register, offset: 0x24 */ + uint8_t RESERVED_3[4]; + __IO uint32_t ERR; /**< Error Register, offset: 0x2C */ + uint8_t RESERVED_4[4]; + __I uint32_t HRS; /**< Hardware Request Status Register, offset: 0x34 */ + uint8_t RESERVED_5[12]; + __IO uint32_t EARS; /**< Enable Asynchronous Request in Stop Register, offset: 0x44 */ + uint8_t RESERVED_6[184]; + __IO uint8_t DCHPRI3; /**< Channel n Priority Register, offset: 0x100 */ + __IO uint8_t DCHPRI2; /**< Channel n Priority Register, offset: 0x101 */ + __IO uint8_t DCHPRI1; /**< Channel n Priority Register, offset: 0x102 */ + __IO uint8_t DCHPRI0; /**< Channel n Priority Register, offset: 0x103 */ + __IO uint8_t DCHPRI7; /**< Channel n Priority Register, offset: 0x104 */ + __IO uint8_t DCHPRI6; /**< Channel n Priority Register, offset: 0x105 */ + __IO uint8_t DCHPRI5; /**< Channel n Priority Register, offset: 0x106 */ + __IO uint8_t DCHPRI4; /**< Channel n Priority Register, offset: 0x107 */ + uint8_t RESERVED_7[3832]; + struct { /* offset: 0x1000, array step: 0x20 */ + __IO uint32_t SADDR; /**< TCD Source Address, array offset: 0x1000, array step: 0x20 */ + __IO uint16_t SOFF; /**< TCD Signed Source Address Offset, array offset: 0x1004, array step: 0x20 */ + __IO uint16_t ATTR; /**< TCD Transfer Attributes, array offset: 0x1006, array step: 0x20 */ + union { /* offset: 0x1008, array step: 0x20 */ + __IO uint32_t NBYTES_MLNO; /**< TCD Minor Byte Count (Minor Loop Mapping Disabled), array offset: 0x1008, array step: 0x20 */ + __IO uint32_t NBYTES_MLOFFNO; /**< TCD Signed Minor Loop Offset (Minor Loop Mapping Enabled and Offset Disabled), array offset: 0x1008, array step: 0x20 */ + __IO uint32_t NBYTES_MLOFFYES; /**< TCD Signed Minor Loop Offset (Minor Loop Mapping and Offset Enabled), array offset: 0x1008, array step: 0x20 */ + }; + __IO uint32_t SLAST; /**< TCD Last Source Address Adjustment, array offset: 0x100C, array step: 0x20 */ + __IO uint32_t DADDR; /**< TCD Destination Address, array offset: 0x1010, array step: 0x20 */ + __IO uint16_t DOFF; /**< TCD Signed Destination Address Offset, array offset: 0x1014, array step: 0x20 */ + union { /* offset: 0x1016, array step: 0x20 */ + __IO uint16_t CITER_ELINKNO; /**< TCD Current Minor Loop Link, Major Loop Count (Channel Linking Disabled), array offset: 0x1016, array step: 0x20 */ + __IO uint16_t CITER_ELINKYES; /**< TCD Current Minor Loop Link, Major Loop Count (Channel Linking Enabled), array offset: 0x1016, array step: 0x20 */ + }; + __IO uint32_t DLAST_SGA; /**< TCD Last Destination Address Adjustment/Scatter Gather Address, array offset: 0x1018, array step: 0x20 */ + __IO uint16_t CSR; /**< TCD Control and Status, array offset: 0x101C, array step: 0x20 */ + union { /* offset: 0x101E, array step: 0x20 */ + __IO uint16_t BITER_ELINKNO; /**< TCD Beginning Minor Loop Link, Major Loop Count (Channel Linking Disabled), array offset: 0x101E, array step: 0x20 */ + __IO uint16_t BITER_ELINKYES; /**< TCD Beginning Minor Loop Link, Major Loop Count (Channel Linking Enabled), array offset: 0x101E, array step: 0x20 */ + }; + } TCD[8]; +} DMA_Type; + +/* ---------------------------------------------------------------------------- + -- DMA Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup DMA_Register_Masks DMA Register Masks + * @{ + */ + +/*! @name CR - Control Register */ +#define DMA_CR_EDBG_MASK (0x2U) +#define DMA_CR_EDBG_SHIFT (1U) +#define DMA_CR_EDBG(x) (((uint32_t)(((uint32_t)(x)) << DMA_CR_EDBG_SHIFT)) & DMA_CR_EDBG_MASK) +#define DMA_CR_ERCA_MASK (0x4U) +#define DMA_CR_ERCA_SHIFT (2U) +#define DMA_CR_ERCA(x) (((uint32_t)(((uint32_t)(x)) << DMA_CR_ERCA_SHIFT)) & DMA_CR_ERCA_MASK) +#define DMA_CR_HOE_MASK (0x10U) +#define DMA_CR_HOE_SHIFT (4U) +#define DMA_CR_HOE(x) (((uint32_t)(((uint32_t)(x)) << DMA_CR_HOE_SHIFT)) & DMA_CR_HOE_MASK) +#define DMA_CR_HALT_MASK (0x20U) +#define DMA_CR_HALT_SHIFT (5U) +#define DMA_CR_HALT(x) (((uint32_t)(((uint32_t)(x)) << DMA_CR_HALT_SHIFT)) & DMA_CR_HALT_MASK) +#define DMA_CR_CLM_MASK (0x40U) +#define DMA_CR_CLM_SHIFT (6U) +#define DMA_CR_CLM(x) (((uint32_t)(((uint32_t)(x)) << DMA_CR_CLM_SHIFT)) & DMA_CR_CLM_MASK) +#define DMA_CR_EMLM_MASK (0x80U) +#define DMA_CR_EMLM_SHIFT (7U) +#define DMA_CR_EMLM(x) (((uint32_t)(((uint32_t)(x)) << DMA_CR_EMLM_SHIFT)) & DMA_CR_EMLM_MASK) +#define DMA_CR_ECX_MASK (0x10000U) +#define DMA_CR_ECX_SHIFT (16U) +#define DMA_CR_ECX(x) (((uint32_t)(((uint32_t)(x)) << DMA_CR_ECX_SHIFT)) & DMA_CR_ECX_MASK) +#define DMA_CR_CX_MASK (0x20000U) +#define DMA_CR_CX_SHIFT (17U) +#define DMA_CR_CX(x) (((uint32_t)(((uint32_t)(x)) << DMA_CR_CX_SHIFT)) & DMA_CR_CX_MASK) +#define DMA_CR_ACTIVE_MASK (0x80000000U) +#define DMA_CR_ACTIVE_SHIFT (31U) +#define DMA_CR_ACTIVE(x) (((uint32_t)(((uint32_t)(x)) << DMA_CR_ACTIVE_SHIFT)) & DMA_CR_ACTIVE_MASK) + +/*! @name ES - Error Status Register */ +#define DMA_ES_DBE_MASK (0x1U) +#define DMA_ES_DBE_SHIFT (0U) +#define DMA_ES_DBE(x) (((uint32_t)(((uint32_t)(x)) << DMA_ES_DBE_SHIFT)) & DMA_ES_DBE_MASK) +#define DMA_ES_SBE_MASK (0x2U) +#define DMA_ES_SBE_SHIFT (1U) +#define DMA_ES_SBE(x) (((uint32_t)(((uint32_t)(x)) << DMA_ES_SBE_SHIFT)) & DMA_ES_SBE_MASK) +#define DMA_ES_SGE_MASK (0x4U) +#define DMA_ES_SGE_SHIFT (2U) +#define DMA_ES_SGE(x) (((uint32_t)(((uint32_t)(x)) << DMA_ES_SGE_SHIFT)) & DMA_ES_SGE_MASK) +#define DMA_ES_NCE_MASK (0x8U) +#define DMA_ES_NCE_SHIFT (3U) +#define DMA_ES_NCE(x) (((uint32_t)(((uint32_t)(x)) << DMA_ES_NCE_SHIFT)) & DMA_ES_NCE_MASK) +#define DMA_ES_DOE_MASK (0x10U) +#define DMA_ES_DOE_SHIFT (4U) +#define DMA_ES_DOE(x) (((uint32_t)(((uint32_t)(x)) << DMA_ES_DOE_SHIFT)) & DMA_ES_DOE_MASK) +#define DMA_ES_DAE_MASK (0x20U) +#define DMA_ES_DAE_SHIFT (5U) +#define DMA_ES_DAE(x) (((uint32_t)(((uint32_t)(x)) << DMA_ES_DAE_SHIFT)) & DMA_ES_DAE_MASK) +#define DMA_ES_SOE_MASK (0x40U) +#define DMA_ES_SOE_SHIFT (6U) +#define DMA_ES_SOE(x) (((uint32_t)(((uint32_t)(x)) << DMA_ES_SOE_SHIFT)) & DMA_ES_SOE_MASK) +#define DMA_ES_SAE_MASK (0x80U) +#define DMA_ES_SAE_SHIFT (7U) +#define DMA_ES_SAE(x) (((uint32_t)(((uint32_t)(x)) << DMA_ES_SAE_SHIFT)) & DMA_ES_SAE_MASK) +#define DMA_ES_ERRCHN_MASK (0x700U) +#define DMA_ES_ERRCHN_SHIFT (8U) +#define DMA_ES_ERRCHN(x) (((uint32_t)(((uint32_t)(x)) << DMA_ES_ERRCHN_SHIFT)) & DMA_ES_ERRCHN_MASK) +#define DMA_ES_CPE_MASK (0x4000U) +#define DMA_ES_CPE_SHIFT (14U) +#define DMA_ES_CPE(x) (((uint32_t)(((uint32_t)(x)) << DMA_ES_CPE_SHIFT)) & DMA_ES_CPE_MASK) +#define DMA_ES_ECX_MASK (0x10000U) +#define DMA_ES_ECX_SHIFT (16U) +#define DMA_ES_ECX(x) (((uint32_t)(((uint32_t)(x)) << DMA_ES_ECX_SHIFT)) & DMA_ES_ECX_MASK) +#define DMA_ES_VLD_MASK (0x80000000U) +#define DMA_ES_VLD_SHIFT (31U) +#define DMA_ES_VLD(x) (((uint32_t)(((uint32_t)(x)) << DMA_ES_VLD_SHIFT)) & DMA_ES_VLD_MASK) + +/*! @name ERQ - Enable Request Register */ +#define DMA_ERQ_ERQ0_MASK (0x1U) +#define DMA_ERQ_ERQ0_SHIFT (0U) +#define DMA_ERQ_ERQ0(x) (((uint32_t)(((uint32_t)(x)) << DMA_ERQ_ERQ0_SHIFT)) & DMA_ERQ_ERQ0_MASK) +#define DMA_ERQ_ERQ1_MASK (0x2U) +#define DMA_ERQ_ERQ1_SHIFT (1U) +#define DMA_ERQ_ERQ1(x) (((uint32_t)(((uint32_t)(x)) << DMA_ERQ_ERQ1_SHIFT)) & DMA_ERQ_ERQ1_MASK) +#define DMA_ERQ_ERQ2_MASK (0x4U) +#define DMA_ERQ_ERQ2_SHIFT (2U) +#define DMA_ERQ_ERQ2(x) (((uint32_t)(((uint32_t)(x)) << DMA_ERQ_ERQ2_SHIFT)) & DMA_ERQ_ERQ2_MASK) +#define DMA_ERQ_ERQ3_MASK (0x8U) +#define DMA_ERQ_ERQ3_SHIFT (3U) +#define DMA_ERQ_ERQ3(x) (((uint32_t)(((uint32_t)(x)) << DMA_ERQ_ERQ3_SHIFT)) & DMA_ERQ_ERQ3_MASK) +#define DMA_ERQ_ERQ4_MASK (0x10U) +#define DMA_ERQ_ERQ4_SHIFT (4U) +#define DMA_ERQ_ERQ4(x) (((uint32_t)(((uint32_t)(x)) << DMA_ERQ_ERQ4_SHIFT)) & DMA_ERQ_ERQ4_MASK) +#define DMA_ERQ_ERQ5_MASK (0x20U) +#define DMA_ERQ_ERQ5_SHIFT (5U) +#define DMA_ERQ_ERQ5(x) (((uint32_t)(((uint32_t)(x)) << DMA_ERQ_ERQ5_SHIFT)) & DMA_ERQ_ERQ5_MASK) +#define DMA_ERQ_ERQ6_MASK (0x40U) +#define DMA_ERQ_ERQ6_SHIFT (6U) +#define DMA_ERQ_ERQ6(x) (((uint32_t)(((uint32_t)(x)) << DMA_ERQ_ERQ6_SHIFT)) & DMA_ERQ_ERQ6_MASK) +#define DMA_ERQ_ERQ7_MASK (0x80U) +#define DMA_ERQ_ERQ7_SHIFT (7U) +#define DMA_ERQ_ERQ7(x) (((uint32_t)(((uint32_t)(x)) << DMA_ERQ_ERQ7_SHIFT)) & DMA_ERQ_ERQ7_MASK) + +/*! @name EEI - Enable Error Interrupt Register */ +#define DMA_EEI_EEI0_MASK (0x1U) +#define DMA_EEI_EEI0_SHIFT (0U) +#define DMA_EEI_EEI0(x) (((uint32_t)(((uint32_t)(x)) << DMA_EEI_EEI0_SHIFT)) & DMA_EEI_EEI0_MASK) +#define DMA_EEI_EEI1_MASK (0x2U) +#define DMA_EEI_EEI1_SHIFT (1U) +#define DMA_EEI_EEI1(x) (((uint32_t)(((uint32_t)(x)) << DMA_EEI_EEI1_SHIFT)) & DMA_EEI_EEI1_MASK) +#define DMA_EEI_EEI2_MASK (0x4U) +#define DMA_EEI_EEI2_SHIFT (2U) +#define DMA_EEI_EEI2(x) (((uint32_t)(((uint32_t)(x)) << DMA_EEI_EEI2_SHIFT)) & DMA_EEI_EEI2_MASK) +#define DMA_EEI_EEI3_MASK (0x8U) +#define DMA_EEI_EEI3_SHIFT (3U) +#define DMA_EEI_EEI3(x) (((uint32_t)(((uint32_t)(x)) << DMA_EEI_EEI3_SHIFT)) & DMA_EEI_EEI3_MASK) +#define DMA_EEI_EEI4_MASK (0x10U) +#define DMA_EEI_EEI4_SHIFT (4U) +#define DMA_EEI_EEI4(x) (((uint32_t)(((uint32_t)(x)) << DMA_EEI_EEI4_SHIFT)) & DMA_EEI_EEI4_MASK) +#define DMA_EEI_EEI5_MASK (0x20U) +#define DMA_EEI_EEI5_SHIFT (5U) +#define DMA_EEI_EEI5(x) (((uint32_t)(((uint32_t)(x)) << DMA_EEI_EEI5_SHIFT)) & DMA_EEI_EEI5_MASK) +#define DMA_EEI_EEI6_MASK (0x40U) +#define DMA_EEI_EEI6_SHIFT (6U) +#define DMA_EEI_EEI6(x) (((uint32_t)(((uint32_t)(x)) << DMA_EEI_EEI6_SHIFT)) & DMA_EEI_EEI6_MASK) +#define DMA_EEI_EEI7_MASK (0x80U) +#define DMA_EEI_EEI7_SHIFT (7U) +#define DMA_EEI_EEI7(x) (((uint32_t)(((uint32_t)(x)) << DMA_EEI_EEI7_SHIFT)) & DMA_EEI_EEI7_MASK) + +/*! @name CEEI - Clear Enable Error Interrupt Register */ +#define DMA_CEEI_CEEI_MASK (0x7U) +#define DMA_CEEI_CEEI_SHIFT (0U) +#define DMA_CEEI_CEEI(x) (((uint8_t)(((uint8_t)(x)) << DMA_CEEI_CEEI_SHIFT)) & DMA_CEEI_CEEI_MASK) +#define DMA_CEEI_CAEE_MASK (0x40U) +#define DMA_CEEI_CAEE_SHIFT (6U) +#define DMA_CEEI_CAEE(x) (((uint8_t)(((uint8_t)(x)) << DMA_CEEI_CAEE_SHIFT)) & DMA_CEEI_CAEE_MASK) +#define DMA_CEEI_NOP_MASK (0x80U) +#define DMA_CEEI_NOP_SHIFT (7U) +#define DMA_CEEI_NOP(x) (((uint8_t)(((uint8_t)(x)) << DMA_CEEI_NOP_SHIFT)) & DMA_CEEI_NOP_MASK) + +/*! @name SEEI - Set Enable Error Interrupt Register */ +#define DMA_SEEI_SEEI_MASK (0x7U) +#define DMA_SEEI_SEEI_SHIFT (0U) +#define DMA_SEEI_SEEI(x) (((uint8_t)(((uint8_t)(x)) << DMA_SEEI_SEEI_SHIFT)) & DMA_SEEI_SEEI_MASK) +#define DMA_SEEI_SAEE_MASK (0x40U) +#define DMA_SEEI_SAEE_SHIFT (6U) +#define DMA_SEEI_SAEE(x) (((uint8_t)(((uint8_t)(x)) << DMA_SEEI_SAEE_SHIFT)) & DMA_SEEI_SAEE_MASK) +#define DMA_SEEI_NOP_MASK (0x80U) +#define DMA_SEEI_NOP_SHIFT (7U) +#define DMA_SEEI_NOP(x) (((uint8_t)(((uint8_t)(x)) << DMA_SEEI_NOP_SHIFT)) & DMA_SEEI_NOP_MASK) + +/*! @name CERQ - Clear Enable Request Register */ +#define DMA_CERQ_CERQ_MASK (0x7U) +#define DMA_CERQ_CERQ_SHIFT (0U) +#define DMA_CERQ_CERQ(x) (((uint8_t)(((uint8_t)(x)) << DMA_CERQ_CERQ_SHIFT)) & DMA_CERQ_CERQ_MASK) +#define DMA_CERQ_CAER_MASK (0x40U) +#define DMA_CERQ_CAER_SHIFT (6U) +#define DMA_CERQ_CAER(x) (((uint8_t)(((uint8_t)(x)) << DMA_CERQ_CAER_SHIFT)) & DMA_CERQ_CAER_MASK) +#define DMA_CERQ_NOP_MASK (0x80U) +#define DMA_CERQ_NOP_SHIFT (7U) +#define DMA_CERQ_NOP(x) (((uint8_t)(((uint8_t)(x)) << DMA_CERQ_NOP_SHIFT)) & DMA_CERQ_NOP_MASK) + +/*! @name SERQ - Set Enable Request Register */ +#define DMA_SERQ_SERQ_MASK (0x7U) +#define DMA_SERQ_SERQ_SHIFT (0U) +#define DMA_SERQ_SERQ(x) (((uint8_t)(((uint8_t)(x)) << DMA_SERQ_SERQ_SHIFT)) & DMA_SERQ_SERQ_MASK) +#define DMA_SERQ_SAER_MASK (0x40U) +#define DMA_SERQ_SAER_SHIFT (6U) +#define DMA_SERQ_SAER(x) (((uint8_t)(((uint8_t)(x)) << DMA_SERQ_SAER_SHIFT)) & DMA_SERQ_SAER_MASK) +#define DMA_SERQ_NOP_MASK (0x80U) +#define DMA_SERQ_NOP_SHIFT (7U) +#define DMA_SERQ_NOP(x) (((uint8_t)(((uint8_t)(x)) << DMA_SERQ_NOP_SHIFT)) & DMA_SERQ_NOP_MASK) + +/*! @name CDNE - Clear DONE Status Bit Register */ +#define DMA_CDNE_CDNE_MASK (0x7U) +#define DMA_CDNE_CDNE_SHIFT (0U) +#define DMA_CDNE_CDNE(x) (((uint8_t)(((uint8_t)(x)) << DMA_CDNE_CDNE_SHIFT)) & DMA_CDNE_CDNE_MASK) +#define DMA_CDNE_CADN_MASK (0x40U) +#define DMA_CDNE_CADN_SHIFT (6U) +#define DMA_CDNE_CADN(x) (((uint8_t)(((uint8_t)(x)) << DMA_CDNE_CADN_SHIFT)) & DMA_CDNE_CADN_MASK) +#define DMA_CDNE_NOP_MASK (0x80U) +#define DMA_CDNE_NOP_SHIFT (7U) +#define DMA_CDNE_NOP(x) (((uint8_t)(((uint8_t)(x)) << DMA_CDNE_NOP_SHIFT)) & DMA_CDNE_NOP_MASK) + +/*! @name SSRT - Set START Bit Register */ +#define DMA_SSRT_SSRT_MASK (0x7U) +#define DMA_SSRT_SSRT_SHIFT (0U) +#define DMA_SSRT_SSRT(x) (((uint8_t)(((uint8_t)(x)) << DMA_SSRT_SSRT_SHIFT)) & DMA_SSRT_SSRT_MASK) +#define DMA_SSRT_SAST_MASK (0x40U) +#define DMA_SSRT_SAST_SHIFT (6U) +#define DMA_SSRT_SAST(x) (((uint8_t)(((uint8_t)(x)) << DMA_SSRT_SAST_SHIFT)) & DMA_SSRT_SAST_MASK) +#define DMA_SSRT_NOP_MASK (0x80U) +#define DMA_SSRT_NOP_SHIFT (7U) +#define DMA_SSRT_NOP(x) (((uint8_t)(((uint8_t)(x)) << DMA_SSRT_NOP_SHIFT)) & DMA_SSRT_NOP_MASK) + +/*! @name CERR - Clear Error Register */ +#define DMA_CERR_CERR_MASK (0x7U) +#define DMA_CERR_CERR_SHIFT (0U) +#define DMA_CERR_CERR(x) (((uint8_t)(((uint8_t)(x)) << DMA_CERR_CERR_SHIFT)) & DMA_CERR_CERR_MASK) +#define DMA_CERR_CAEI_MASK (0x40U) +#define DMA_CERR_CAEI_SHIFT (6U) +#define DMA_CERR_CAEI(x) (((uint8_t)(((uint8_t)(x)) << DMA_CERR_CAEI_SHIFT)) & DMA_CERR_CAEI_MASK) +#define DMA_CERR_NOP_MASK (0x80U) +#define DMA_CERR_NOP_SHIFT (7U) +#define DMA_CERR_NOP(x) (((uint8_t)(((uint8_t)(x)) << DMA_CERR_NOP_SHIFT)) & DMA_CERR_NOP_MASK) + +/*! @name CINT - Clear Interrupt Request Register */ +#define DMA_CINT_CINT_MASK (0x7U) +#define DMA_CINT_CINT_SHIFT (0U) +#define DMA_CINT_CINT(x) (((uint8_t)(((uint8_t)(x)) << DMA_CINT_CINT_SHIFT)) & DMA_CINT_CINT_MASK) +#define DMA_CINT_CAIR_MASK (0x40U) +#define DMA_CINT_CAIR_SHIFT (6U) +#define DMA_CINT_CAIR(x) (((uint8_t)(((uint8_t)(x)) << DMA_CINT_CAIR_SHIFT)) & DMA_CINT_CAIR_MASK) +#define DMA_CINT_NOP_MASK (0x80U) +#define DMA_CINT_NOP_SHIFT (7U) +#define DMA_CINT_NOP(x) (((uint8_t)(((uint8_t)(x)) << DMA_CINT_NOP_SHIFT)) & DMA_CINT_NOP_MASK) + +/*! @name INT - Interrupt Request Register */ +#define DMA_INT_INT0_MASK (0x1U) +#define DMA_INT_INT0_SHIFT (0U) +#define DMA_INT_INT0(x) (((uint32_t)(((uint32_t)(x)) << DMA_INT_INT0_SHIFT)) & DMA_INT_INT0_MASK) +#define DMA_INT_INT1_MASK (0x2U) +#define DMA_INT_INT1_SHIFT (1U) +#define DMA_INT_INT1(x) (((uint32_t)(((uint32_t)(x)) << DMA_INT_INT1_SHIFT)) & DMA_INT_INT1_MASK) +#define DMA_INT_INT2_MASK (0x4U) +#define DMA_INT_INT2_SHIFT (2U) +#define DMA_INT_INT2(x) (((uint32_t)(((uint32_t)(x)) << DMA_INT_INT2_SHIFT)) & DMA_INT_INT2_MASK) +#define DMA_INT_INT3_MASK (0x8U) +#define DMA_INT_INT3_SHIFT (3U) +#define DMA_INT_INT3(x) (((uint32_t)(((uint32_t)(x)) << DMA_INT_INT3_SHIFT)) & DMA_INT_INT3_MASK) +#define DMA_INT_INT4_MASK (0x10U) +#define DMA_INT_INT4_SHIFT (4U) +#define DMA_INT_INT4(x) (((uint32_t)(((uint32_t)(x)) << DMA_INT_INT4_SHIFT)) & DMA_INT_INT4_MASK) +#define DMA_INT_INT5_MASK (0x20U) +#define DMA_INT_INT5_SHIFT (5U) +#define DMA_INT_INT5(x) (((uint32_t)(((uint32_t)(x)) << DMA_INT_INT5_SHIFT)) & DMA_INT_INT5_MASK) +#define DMA_INT_INT6_MASK (0x40U) +#define DMA_INT_INT6_SHIFT (6U) +#define DMA_INT_INT6(x) (((uint32_t)(((uint32_t)(x)) << DMA_INT_INT6_SHIFT)) & DMA_INT_INT6_MASK) +#define DMA_INT_INT7_MASK (0x80U) +#define DMA_INT_INT7_SHIFT (7U) +#define DMA_INT_INT7(x) (((uint32_t)(((uint32_t)(x)) << DMA_INT_INT7_SHIFT)) & DMA_INT_INT7_MASK) + +/*! @name ERR - Error Register */ +#define DMA_ERR_ERR0_MASK (0x1U) +#define DMA_ERR_ERR0_SHIFT (0U) +#define DMA_ERR_ERR0(x) (((uint32_t)(((uint32_t)(x)) << DMA_ERR_ERR0_SHIFT)) & DMA_ERR_ERR0_MASK) +#define DMA_ERR_ERR1_MASK (0x2U) +#define DMA_ERR_ERR1_SHIFT (1U) +#define DMA_ERR_ERR1(x) (((uint32_t)(((uint32_t)(x)) << DMA_ERR_ERR1_SHIFT)) & DMA_ERR_ERR1_MASK) +#define DMA_ERR_ERR2_MASK (0x4U) +#define DMA_ERR_ERR2_SHIFT (2U) +#define DMA_ERR_ERR2(x) (((uint32_t)(((uint32_t)(x)) << DMA_ERR_ERR2_SHIFT)) & DMA_ERR_ERR2_MASK) +#define DMA_ERR_ERR3_MASK (0x8U) +#define DMA_ERR_ERR3_SHIFT (3U) +#define DMA_ERR_ERR3(x) (((uint32_t)(((uint32_t)(x)) << DMA_ERR_ERR3_SHIFT)) & DMA_ERR_ERR3_MASK) +#define DMA_ERR_ERR4_MASK (0x10U) +#define DMA_ERR_ERR4_SHIFT (4U) +#define DMA_ERR_ERR4(x) (((uint32_t)(((uint32_t)(x)) << DMA_ERR_ERR4_SHIFT)) & DMA_ERR_ERR4_MASK) +#define DMA_ERR_ERR5_MASK (0x20U) +#define DMA_ERR_ERR5_SHIFT (5U) +#define DMA_ERR_ERR5(x) (((uint32_t)(((uint32_t)(x)) << DMA_ERR_ERR5_SHIFT)) & DMA_ERR_ERR5_MASK) +#define DMA_ERR_ERR6_MASK (0x40U) +#define DMA_ERR_ERR6_SHIFT (6U) +#define DMA_ERR_ERR6(x) (((uint32_t)(((uint32_t)(x)) << DMA_ERR_ERR6_SHIFT)) & DMA_ERR_ERR6_MASK) +#define DMA_ERR_ERR7_MASK (0x80U) +#define DMA_ERR_ERR7_SHIFT (7U) +#define DMA_ERR_ERR7(x) (((uint32_t)(((uint32_t)(x)) << DMA_ERR_ERR7_SHIFT)) & DMA_ERR_ERR7_MASK) + +/*! @name HRS - Hardware Request Status Register */ +#define DMA_HRS_HRS0_MASK (0x1U) +#define DMA_HRS_HRS0_SHIFT (0U) +#define DMA_HRS_HRS0(x) (((uint32_t)(((uint32_t)(x)) << DMA_HRS_HRS0_SHIFT)) & DMA_HRS_HRS0_MASK) +#define DMA_HRS_HRS1_MASK (0x2U) +#define DMA_HRS_HRS1_SHIFT (1U) +#define DMA_HRS_HRS1(x) (((uint32_t)(((uint32_t)(x)) << DMA_HRS_HRS1_SHIFT)) & DMA_HRS_HRS1_MASK) +#define DMA_HRS_HRS2_MASK (0x4U) +#define DMA_HRS_HRS2_SHIFT (2U) +#define DMA_HRS_HRS2(x) (((uint32_t)(((uint32_t)(x)) << DMA_HRS_HRS2_SHIFT)) & DMA_HRS_HRS2_MASK) +#define DMA_HRS_HRS3_MASK (0x8U) +#define DMA_HRS_HRS3_SHIFT (3U) +#define DMA_HRS_HRS3(x) (((uint32_t)(((uint32_t)(x)) << DMA_HRS_HRS3_SHIFT)) & DMA_HRS_HRS3_MASK) +#define DMA_HRS_HRS4_MASK (0x10U) +#define DMA_HRS_HRS4_SHIFT (4U) +#define DMA_HRS_HRS4(x) (((uint32_t)(((uint32_t)(x)) << DMA_HRS_HRS4_SHIFT)) & DMA_HRS_HRS4_MASK) +#define DMA_HRS_HRS5_MASK (0x20U) +#define DMA_HRS_HRS5_SHIFT (5U) +#define DMA_HRS_HRS5(x) (((uint32_t)(((uint32_t)(x)) << DMA_HRS_HRS5_SHIFT)) & DMA_HRS_HRS5_MASK) +#define DMA_HRS_HRS6_MASK (0x40U) +#define DMA_HRS_HRS6_SHIFT (6U) +#define DMA_HRS_HRS6(x) (((uint32_t)(((uint32_t)(x)) << DMA_HRS_HRS6_SHIFT)) & DMA_HRS_HRS6_MASK) +#define DMA_HRS_HRS7_MASK (0x80U) +#define DMA_HRS_HRS7_SHIFT (7U) +#define DMA_HRS_HRS7(x) (((uint32_t)(((uint32_t)(x)) << DMA_HRS_HRS7_SHIFT)) & DMA_HRS_HRS7_MASK) + +/*! @name EARS - Enable Asynchronous Request in Stop Register */ +#define DMA_EARS_EDREQ_0_MASK (0x1U) +#define DMA_EARS_EDREQ_0_SHIFT (0U) +#define DMA_EARS_EDREQ_0(x) (((uint32_t)(((uint32_t)(x)) << DMA_EARS_EDREQ_0_SHIFT)) & DMA_EARS_EDREQ_0_MASK) +#define DMA_EARS_EDREQ_1_MASK (0x2U) +#define DMA_EARS_EDREQ_1_SHIFT (1U) +#define DMA_EARS_EDREQ_1(x) (((uint32_t)(((uint32_t)(x)) << DMA_EARS_EDREQ_1_SHIFT)) & DMA_EARS_EDREQ_1_MASK) +#define DMA_EARS_EDREQ_2_MASK (0x4U) +#define DMA_EARS_EDREQ_2_SHIFT (2U) +#define DMA_EARS_EDREQ_2(x) (((uint32_t)(((uint32_t)(x)) << DMA_EARS_EDREQ_2_SHIFT)) & DMA_EARS_EDREQ_2_MASK) +#define DMA_EARS_EDREQ_3_MASK (0x8U) +#define DMA_EARS_EDREQ_3_SHIFT (3U) +#define DMA_EARS_EDREQ_3(x) (((uint32_t)(((uint32_t)(x)) << DMA_EARS_EDREQ_3_SHIFT)) & DMA_EARS_EDREQ_3_MASK) +#define DMA_EARS_EDREQ_4_MASK (0x10U) +#define DMA_EARS_EDREQ_4_SHIFT (4U) +#define DMA_EARS_EDREQ_4(x) (((uint32_t)(((uint32_t)(x)) << DMA_EARS_EDREQ_4_SHIFT)) & DMA_EARS_EDREQ_4_MASK) +#define DMA_EARS_EDREQ_5_MASK (0x20U) +#define DMA_EARS_EDREQ_5_SHIFT (5U) +#define DMA_EARS_EDREQ_5(x) (((uint32_t)(((uint32_t)(x)) << DMA_EARS_EDREQ_5_SHIFT)) & DMA_EARS_EDREQ_5_MASK) +#define DMA_EARS_EDREQ_6_MASK (0x40U) +#define DMA_EARS_EDREQ_6_SHIFT (6U) +#define DMA_EARS_EDREQ_6(x) (((uint32_t)(((uint32_t)(x)) << DMA_EARS_EDREQ_6_SHIFT)) & DMA_EARS_EDREQ_6_MASK) +#define DMA_EARS_EDREQ_7_MASK (0x80U) +#define DMA_EARS_EDREQ_7_SHIFT (7U) +#define DMA_EARS_EDREQ_7(x) (((uint32_t)(((uint32_t)(x)) << DMA_EARS_EDREQ_7_SHIFT)) & DMA_EARS_EDREQ_7_MASK) + +/*! @name DCHPRI3 - Channel n Priority Register */ +#define DMA_DCHPRI3_CHPRI_MASK (0x7U) +#define DMA_DCHPRI3_CHPRI_SHIFT (0U) +#define DMA_DCHPRI3_CHPRI(x) (((uint8_t)(((uint8_t)(x)) << DMA_DCHPRI3_CHPRI_SHIFT)) & DMA_DCHPRI3_CHPRI_MASK) +#define DMA_DCHPRI3_DPA_MASK (0x40U) +#define DMA_DCHPRI3_DPA_SHIFT (6U) +#define DMA_DCHPRI3_DPA(x) (((uint8_t)(((uint8_t)(x)) << DMA_DCHPRI3_DPA_SHIFT)) & DMA_DCHPRI3_DPA_MASK) +#define DMA_DCHPRI3_ECP_MASK (0x80U) +#define DMA_DCHPRI3_ECP_SHIFT (7U) +#define DMA_DCHPRI3_ECP(x) (((uint8_t)(((uint8_t)(x)) << DMA_DCHPRI3_ECP_SHIFT)) & DMA_DCHPRI3_ECP_MASK) + +/*! @name DCHPRI2 - Channel n Priority Register */ +#define DMA_DCHPRI2_CHPRI_MASK (0x7U) +#define DMA_DCHPRI2_CHPRI_SHIFT (0U) +#define DMA_DCHPRI2_CHPRI(x) (((uint8_t)(((uint8_t)(x)) << DMA_DCHPRI2_CHPRI_SHIFT)) & DMA_DCHPRI2_CHPRI_MASK) +#define DMA_DCHPRI2_DPA_MASK (0x40U) +#define DMA_DCHPRI2_DPA_SHIFT (6U) +#define DMA_DCHPRI2_DPA(x) (((uint8_t)(((uint8_t)(x)) << DMA_DCHPRI2_DPA_SHIFT)) & DMA_DCHPRI2_DPA_MASK) +#define DMA_DCHPRI2_ECP_MASK (0x80U) +#define DMA_DCHPRI2_ECP_SHIFT (7U) +#define DMA_DCHPRI2_ECP(x) (((uint8_t)(((uint8_t)(x)) << DMA_DCHPRI2_ECP_SHIFT)) & DMA_DCHPRI2_ECP_MASK) + +/*! @name DCHPRI1 - Channel n Priority Register */ +#define DMA_DCHPRI1_CHPRI_MASK (0x7U) +#define DMA_DCHPRI1_CHPRI_SHIFT (0U) +#define DMA_DCHPRI1_CHPRI(x) (((uint8_t)(((uint8_t)(x)) << DMA_DCHPRI1_CHPRI_SHIFT)) & DMA_DCHPRI1_CHPRI_MASK) +#define DMA_DCHPRI1_DPA_MASK (0x40U) +#define DMA_DCHPRI1_DPA_SHIFT (6U) +#define DMA_DCHPRI1_DPA(x) (((uint8_t)(((uint8_t)(x)) << DMA_DCHPRI1_DPA_SHIFT)) & DMA_DCHPRI1_DPA_MASK) +#define DMA_DCHPRI1_ECP_MASK (0x80U) +#define DMA_DCHPRI1_ECP_SHIFT (7U) +#define DMA_DCHPRI1_ECP(x) (((uint8_t)(((uint8_t)(x)) << DMA_DCHPRI1_ECP_SHIFT)) & DMA_DCHPRI1_ECP_MASK) + +/*! @name DCHPRI0 - Channel n Priority Register */ +#define DMA_DCHPRI0_CHPRI_MASK (0x7U) +#define DMA_DCHPRI0_CHPRI_SHIFT (0U) +#define DMA_DCHPRI0_CHPRI(x) (((uint8_t)(((uint8_t)(x)) << DMA_DCHPRI0_CHPRI_SHIFT)) & DMA_DCHPRI0_CHPRI_MASK) +#define DMA_DCHPRI0_DPA_MASK (0x40U) +#define DMA_DCHPRI0_DPA_SHIFT (6U) +#define DMA_DCHPRI0_DPA(x) (((uint8_t)(((uint8_t)(x)) << DMA_DCHPRI0_DPA_SHIFT)) & DMA_DCHPRI0_DPA_MASK) +#define DMA_DCHPRI0_ECP_MASK (0x80U) +#define DMA_DCHPRI0_ECP_SHIFT (7U) +#define DMA_DCHPRI0_ECP(x) (((uint8_t)(((uint8_t)(x)) << DMA_DCHPRI0_ECP_SHIFT)) & DMA_DCHPRI0_ECP_MASK) + +/*! @name DCHPRI7 - Channel n Priority Register */ +#define DMA_DCHPRI7_CHPRI_MASK (0x7U) +#define DMA_DCHPRI7_CHPRI_SHIFT (0U) +#define DMA_DCHPRI7_CHPRI(x) (((uint8_t)(((uint8_t)(x)) << DMA_DCHPRI7_CHPRI_SHIFT)) & DMA_DCHPRI7_CHPRI_MASK) +#define DMA_DCHPRI7_DPA_MASK (0x40U) +#define DMA_DCHPRI7_DPA_SHIFT (6U) +#define DMA_DCHPRI7_DPA(x) (((uint8_t)(((uint8_t)(x)) << DMA_DCHPRI7_DPA_SHIFT)) & DMA_DCHPRI7_DPA_MASK) +#define DMA_DCHPRI7_ECP_MASK (0x80U) +#define DMA_DCHPRI7_ECP_SHIFT (7U) +#define DMA_DCHPRI7_ECP(x) (((uint8_t)(((uint8_t)(x)) << DMA_DCHPRI7_ECP_SHIFT)) & DMA_DCHPRI7_ECP_MASK) + +/*! @name DCHPRI6 - Channel n Priority Register */ +#define DMA_DCHPRI6_CHPRI_MASK (0x7U) +#define DMA_DCHPRI6_CHPRI_SHIFT (0U) +#define DMA_DCHPRI6_CHPRI(x) (((uint8_t)(((uint8_t)(x)) << DMA_DCHPRI6_CHPRI_SHIFT)) & DMA_DCHPRI6_CHPRI_MASK) +#define DMA_DCHPRI6_DPA_MASK (0x40U) +#define DMA_DCHPRI6_DPA_SHIFT (6U) +#define DMA_DCHPRI6_DPA(x) (((uint8_t)(((uint8_t)(x)) << DMA_DCHPRI6_DPA_SHIFT)) & DMA_DCHPRI6_DPA_MASK) +#define DMA_DCHPRI6_ECP_MASK (0x80U) +#define DMA_DCHPRI6_ECP_SHIFT (7U) +#define DMA_DCHPRI6_ECP(x) (((uint8_t)(((uint8_t)(x)) << DMA_DCHPRI6_ECP_SHIFT)) & DMA_DCHPRI6_ECP_MASK) + +/*! @name DCHPRI5 - Channel n Priority Register */ +#define DMA_DCHPRI5_CHPRI_MASK (0x7U) +#define DMA_DCHPRI5_CHPRI_SHIFT (0U) +#define DMA_DCHPRI5_CHPRI(x) (((uint8_t)(((uint8_t)(x)) << DMA_DCHPRI5_CHPRI_SHIFT)) & DMA_DCHPRI5_CHPRI_MASK) +#define DMA_DCHPRI5_DPA_MASK (0x40U) +#define DMA_DCHPRI5_DPA_SHIFT (6U) +#define DMA_DCHPRI5_DPA(x) (((uint8_t)(((uint8_t)(x)) << DMA_DCHPRI5_DPA_SHIFT)) & DMA_DCHPRI5_DPA_MASK) +#define DMA_DCHPRI5_ECP_MASK (0x80U) +#define DMA_DCHPRI5_ECP_SHIFT (7U) +#define DMA_DCHPRI5_ECP(x) (((uint8_t)(((uint8_t)(x)) << DMA_DCHPRI5_ECP_SHIFT)) & DMA_DCHPRI5_ECP_MASK) + +/*! @name DCHPRI4 - Channel n Priority Register */ +#define DMA_DCHPRI4_CHPRI_MASK (0x7U) +#define DMA_DCHPRI4_CHPRI_SHIFT (0U) +#define DMA_DCHPRI4_CHPRI(x) (((uint8_t)(((uint8_t)(x)) << DMA_DCHPRI4_CHPRI_SHIFT)) & DMA_DCHPRI4_CHPRI_MASK) +#define DMA_DCHPRI4_DPA_MASK (0x40U) +#define DMA_DCHPRI4_DPA_SHIFT (6U) +#define DMA_DCHPRI4_DPA(x) (((uint8_t)(((uint8_t)(x)) << DMA_DCHPRI4_DPA_SHIFT)) & DMA_DCHPRI4_DPA_MASK) +#define DMA_DCHPRI4_ECP_MASK (0x80U) +#define DMA_DCHPRI4_ECP_SHIFT (7U) +#define DMA_DCHPRI4_ECP(x) (((uint8_t)(((uint8_t)(x)) << DMA_DCHPRI4_ECP_SHIFT)) & DMA_DCHPRI4_ECP_MASK) + +/*! @name SADDR - TCD Source Address */ +#define DMA_SADDR_SADDR_MASK (0xFFFFFFFFU) +#define DMA_SADDR_SADDR_SHIFT (0U) +#define DMA_SADDR_SADDR(x) (((uint32_t)(((uint32_t)(x)) << DMA_SADDR_SADDR_SHIFT)) & DMA_SADDR_SADDR_MASK) + +/* The count of DMA_SADDR */ +#define DMA_SADDR_COUNT (8U) + +/*! @name SOFF - TCD Signed Source Address Offset */ +#define DMA_SOFF_SOFF_MASK (0xFFFFU) +#define DMA_SOFF_SOFF_SHIFT (0U) +#define DMA_SOFF_SOFF(x) (((uint16_t)(((uint16_t)(x)) << DMA_SOFF_SOFF_SHIFT)) & DMA_SOFF_SOFF_MASK) + +/* The count of DMA_SOFF */ +#define DMA_SOFF_COUNT (8U) + +/*! @name ATTR - TCD Transfer Attributes */ +#define DMA_ATTR_DSIZE_MASK (0x7U) +#define DMA_ATTR_DSIZE_SHIFT (0U) +#define DMA_ATTR_DSIZE(x) (((uint16_t)(((uint16_t)(x)) << DMA_ATTR_DSIZE_SHIFT)) & DMA_ATTR_DSIZE_MASK) +#define DMA_ATTR_DMOD_MASK (0xF8U) +#define DMA_ATTR_DMOD_SHIFT (3U) +#define DMA_ATTR_DMOD(x) (((uint16_t)(((uint16_t)(x)) << DMA_ATTR_DMOD_SHIFT)) & DMA_ATTR_DMOD_MASK) +#define DMA_ATTR_SSIZE_MASK (0x700U) +#define DMA_ATTR_SSIZE_SHIFT (8U) +#define DMA_ATTR_SSIZE(x) (((uint16_t)(((uint16_t)(x)) << DMA_ATTR_SSIZE_SHIFT)) & DMA_ATTR_SSIZE_MASK) +#define DMA_ATTR_SMOD_MASK (0xF800U) +#define DMA_ATTR_SMOD_SHIFT (11U) +#define DMA_ATTR_SMOD(x) (((uint16_t)(((uint16_t)(x)) << DMA_ATTR_SMOD_SHIFT)) & DMA_ATTR_SMOD_MASK) + +/* The count of DMA_ATTR */ +#define DMA_ATTR_COUNT (8U) + +/*! @name NBYTES_MLNO - TCD Minor Byte Count (Minor Loop Mapping Disabled) */ +#define DMA_NBYTES_MLNO_NBYTES_MASK (0xFFFFFFFFU) +#define DMA_NBYTES_MLNO_NBYTES_SHIFT (0U) +#define DMA_NBYTES_MLNO_NBYTES(x) (((uint32_t)(((uint32_t)(x)) << DMA_NBYTES_MLNO_NBYTES_SHIFT)) & DMA_NBYTES_MLNO_NBYTES_MASK) + +/* The count of DMA_NBYTES_MLNO */ +#define DMA_NBYTES_MLNO_COUNT (8U) + +/*! @name NBYTES_MLOFFNO - TCD Signed Minor Loop Offset (Minor Loop Mapping Enabled and Offset Disabled) */ +#define DMA_NBYTES_MLOFFNO_NBYTES_MASK (0x3FFFFFFFU) +#define DMA_NBYTES_MLOFFNO_NBYTES_SHIFT (0U) +#define DMA_NBYTES_MLOFFNO_NBYTES(x) (((uint32_t)(((uint32_t)(x)) << DMA_NBYTES_MLOFFNO_NBYTES_SHIFT)) & DMA_NBYTES_MLOFFNO_NBYTES_MASK) +#define DMA_NBYTES_MLOFFNO_DMLOE_MASK (0x40000000U) +#define DMA_NBYTES_MLOFFNO_DMLOE_SHIFT (30U) +#define DMA_NBYTES_MLOFFNO_DMLOE(x) (((uint32_t)(((uint32_t)(x)) << DMA_NBYTES_MLOFFNO_DMLOE_SHIFT)) & DMA_NBYTES_MLOFFNO_DMLOE_MASK) +#define DMA_NBYTES_MLOFFNO_SMLOE_MASK (0x80000000U) +#define DMA_NBYTES_MLOFFNO_SMLOE_SHIFT (31U) +#define DMA_NBYTES_MLOFFNO_SMLOE(x) (((uint32_t)(((uint32_t)(x)) << DMA_NBYTES_MLOFFNO_SMLOE_SHIFT)) & DMA_NBYTES_MLOFFNO_SMLOE_MASK) + +/* The count of DMA_NBYTES_MLOFFNO */ +#define DMA_NBYTES_MLOFFNO_COUNT (8U) + +/*! @name NBYTES_MLOFFYES - TCD Signed Minor Loop Offset (Minor Loop Mapping and Offset Enabled) */ +#define DMA_NBYTES_MLOFFYES_NBYTES_MASK (0x3FFU) +#define DMA_NBYTES_MLOFFYES_NBYTES_SHIFT (0U) +#define DMA_NBYTES_MLOFFYES_NBYTES(x) (((uint32_t)(((uint32_t)(x)) << DMA_NBYTES_MLOFFYES_NBYTES_SHIFT)) & DMA_NBYTES_MLOFFYES_NBYTES_MASK) +#define DMA_NBYTES_MLOFFYES_MLOFF_MASK (0x3FFFFC00U) +#define DMA_NBYTES_MLOFFYES_MLOFF_SHIFT (10U) +#define DMA_NBYTES_MLOFFYES_MLOFF(x) (((uint32_t)(((uint32_t)(x)) << DMA_NBYTES_MLOFFYES_MLOFF_SHIFT)) & DMA_NBYTES_MLOFFYES_MLOFF_MASK) +#define DMA_NBYTES_MLOFFYES_DMLOE_MASK (0x40000000U) +#define DMA_NBYTES_MLOFFYES_DMLOE_SHIFT (30U) +#define DMA_NBYTES_MLOFFYES_DMLOE(x) (((uint32_t)(((uint32_t)(x)) << DMA_NBYTES_MLOFFYES_DMLOE_SHIFT)) & DMA_NBYTES_MLOFFYES_DMLOE_MASK) +#define DMA_NBYTES_MLOFFYES_SMLOE_MASK (0x80000000U) +#define DMA_NBYTES_MLOFFYES_SMLOE_SHIFT (31U) +#define DMA_NBYTES_MLOFFYES_SMLOE(x) (((uint32_t)(((uint32_t)(x)) << DMA_NBYTES_MLOFFYES_SMLOE_SHIFT)) & DMA_NBYTES_MLOFFYES_SMLOE_MASK) + +/* The count of DMA_NBYTES_MLOFFYES */ +#define DMA_NBYTES_MLOFFYES_COUNT (8U) + +/*! @name SLAST - TCD Last Source Address Adjustment */ +#define DMA_SLAST_SLAST_MASK (0xFFFFFFFFU) +#define DMA_SLAST_SLAST_SHIFT (0U) +#define DMA_SLAST_SLAST(x) (((uint32_t)(((uint32_t)(x)) << DMA_SLAST_SLAST_SHIFT)) & DMA_SLAST_SLAST_MASK) + +/* The count of DMA_SLAST */ +#define DMA_SLAST_COUNT (8U) + +/*! @name DADDR - TCD Destination Address */ +#define DMA_DADDR_DADDR_MASK (0xFFFFFFFFU) +#define DMA_DADDR_DADDR_SHIFT (0U) +#define DMA_DADDR_DADDR(x) (((uint32_t)(((uint32_t)(x)) << DMA_DADDR_DADDR_SHIFT)) & DMA_DADDR_DADDR_MASK) + +/* The count of DMA_DADDR */ +#define DMA_DADDR_COUNT (8U) + +/*! @name DOFF - TCD Signed Destination Address Offset */ +#define DMA_DOFF_DOFF_MASK (0xFFFFU) +#define DMA_DOFF_DOFF_SHIFT (0U) +#define DMA_DOFF_DOFF(x) (((uint16_t)(((uint16_t)(x)) << DMA_DOFF_DOFF_SHIFT)) & DMA_DOFF_DOFF_MASK) + +/* The count of DMA_DOFF */ +#define DMA_DOFF_COUNT (8U) + +/*! @name CITER_ELINKNO - TCD Current Minor Loop Link, Major Loop Count (Channel Linking Disabled) */ +#define DMA_CITER_ELINKNO_CITER_MASK (0x7FFFU) +#define DMA_CITER_ELINKNO_CITER_SHIFT (0U) +#define DMA_CITER_ELINKNO_CITER(x) (((uint16_t)(((uint16_t)(x)) << DMA_CITER_ELINKNO_CITER_SHIFT)) & DMA_CITER_ELINKNO_CITER_MASK) +#define DMA_CITER_ELINKNO_ELINK_MASK (0x8000U) +#define DMA_CITER_ELINKNO_ELINK_SHIFT (15U) +#define DMA_CITER_ELINKNO_ELINK(x) (((uint16_t)(((uint16_t)(x)) << DMA_CITER_ELINKNO_ELINK_SHIFT)) & DMA_CITER_ELINKNO_ELINK_MASK) + +/* The count of DMA_CITER_ELINKNO */ +#define DMA_CITER_ELINKNO_COUNT (8U) + +/*! @name CITER_ELINKYES - TCD Current Minor Loop Link, Major Loop Count (Channel Linking Enabled) */ +#define DMA_CITER_ELINKYES_CITER_MASK (0x1FFU) +#define DMA_CITER_ELINKYES_CITER_SHIFT (0U) +#define DMA_CITER_ELINKYES_CITER(x) (((uint16_t)(((uint16_t)(x)) << DMA_CITER_ELINKYES_CITER_SHIFT)) & DMA_CITER_ELINKYES_CITER_MASK) +#define DMA_CITER_ELINKYES_LINKCH_MASK (0xE00U) +#define DMA_CITER_ELINKYES_LINKCH_SHIFT (9U) +#define DMA_CITER_ELINKYES_LINKCH(x) (((uint16_t)(((uint16_t)(x)) << DMA_CITER_ELINKYES_LINKCH_SHIFT)) & DMA_CITER_ELINKYES_LINKCH_MASK) +#define DMA_CITER_ELINKYES_ELINK_MASK (0x8000U) +#define DMA_CITER_ELINKYES_ELINK_SHIFT (15U) +#define DMA_CITER_ELINKYES_ELINK(x) (((uint16_t)(((uint16_t)(x)) << DMA_CITER_ELINKYES_ELINK_SHIFT)) & DMA_CITER_ELINKYES_ELINK_MASK) + +/* The count of DMA_CITER_ELINKYES */ +#define DMA_CITER_ELINKYES_COUNT (8U) + +/*! @name DLAST_SGA - TCD Last Destination Address Adjustment/Scatter Gather Address */ +#define DMA_DLAST_SGA_DLASTSGA_MASK (0xFFFFFFFFU) +#define DMA_DLAST_SGA_DLASTSGA_SHIFT (0U) +#define DMA_DLAST_SGA_DLASTSGA(x) (((uint32_t)(((uint32_t)(x)) << DMA_DLAST_SGA_DLASTSGA_SHIFT)) & DMA_DLAST_SGA_DLASTSGA_MASK) + +/* The count of DMA_DLAST_SGA */ +#define DMA_DLAST_SGA_COUNT (8U) + +/*! @name CSR - TCD Control and Status */ +#define DMA_CSR_START_MASK (0x1U) +#define DMA_CSR_START_SHIFT (0U) +#define DMA_CSR_START(x) (((uint16_t)(((uint16_t)(x)) << DMA_CSR_START_SHIFT)) & DMA_CSR_START_MASK) +#define DMA_CSR_INTMAJOR_MASK (0x2U) +#define DMA_CSR_INTMAJOR_SHIFT (1U) +#define DMA_CSR_INTMAJOR(x) (((uint16_t)(((uint16_t)(x)) << DMA_CSR_INTMAJOR_SHIFT)) & DMA_CSR_INTMAJOR_MASK) +#define DMA_CSR_INTHALF_MASK (0x4U) +#define DMA_CSR_INTHALF_SHIFT (2U) +#define DMA_CSR_INTHALF(x) (((uint16_t)(((uint16_t)(x)) << DMA_CSR_INTHALF_SHIFT)) & DMA_CSR_INTHALF_MASK) +#define DMA_CSR_DREQ_MASK (0x8U) +#define DMA_CSR_DREQ_SHIFT (3U) +#define DMA_CSR_DREQ(x) (((uint16_t)(((uint16_t)(x)) << DMA_CSR_DREQ_SHIFT)) & DMA_CSR_DREQ_MASK) +#define DMA_CSR_ESG_MASK (0x10U) +#define DMA_CSR_ESG_SHIFT (4U) +#define DMA_CSR_ESG(x) (((uint16_t)(((uint16_t)(x)) << DMA_CSR_ESG_SHIFT)) & DMA_CSR_ESG_MASK) +#define DMA_CSR_MAJORELINK_MASK (0x20U) +#define DMA_CSR_MAJORELINK_SHIFT (5U) +#define DMA_CSR_MAJORELINK(x) (((uint16_t)(((uint16_t)(x)) << DMA_CSR_MAJORELINK_SHIFT)) & DMA_CSR_MAJORELINK_MASK) +#define DMA_CSR_ACTIVE_MASK (0x40U) +#define DMA_CSR_ACTIVE_SHIFT (6U) +#define DMA_CSR_ACTIVE(x) (((uint16_t)(((uint16_t)(x)) << DMA_CSR_ACTIVE_SHIFT)) & DMA_CSR_ACTIVE_MASK) +#define DMA_CSR_DONE_MASK (0x80U) +#define DMA_CSR_DONE_SHIFT (7U) +#define DMA_CSR_DONE(x) (((uint16_t)(((uint16_t)(x)) << DMA_CSR_DONE_SHIFT)) & DMA_CSR_DONE_MASK) +#define DMA_CSR_MAJORLINKCH_MASK (0x700U) +#define DMA_CSR_MAJORLINKCH_SHIFT (8U) +#define DMA_CSR_MAJORLINKCH(x) (((uint16_t)(((uint16_t)(x)) << DMA_CSR_MAJORLINKCH_SHIFT)) & DMA_CSR_MAJORLINKCH_MASK) +#define DMA_CSR_BWC_MASK (0xC000U) +#define DMA_CSR_BWC_SHIFT (14U) +#define DMA_CSR_BWC(x) (((uint16_t)(((uint16_t)(x)) << DMA_CSR_BWC_SHIFT)) & DMA_CSR_BWC_MASK) + +/* The count of DMA_CSR */ +#define DMA_CSR_COUNT (8U) + +/*! @name BITER_ELINKNO - TCD Beginning Minor Loop Link, Major Loop Count (Channel Linking Disabled) */ +#define DMA_BITER_ELINKNO_BITER_MASK (0x7FFFU) +#define DMA_BITER_ELINKNO_BITER_SHIFT (0U) +#define DMA_BITER_ELINKNO_BITER(x) (((uint16_t)(((uint16_t)(x)) << DMA_BITER_ELINKNO_BITER_SHIFT)) & DMA_BITER_ELINKNO_BITER_MASK) +#define DMA_BITER_ELINKNO_ELINK_MASK (0x8000U) +#define DMA_BITER_ELINKNO_ELINK_SHIFT (15U) +#define DMA_BITER_ELINKNO_ELINK(x) (((uint16_t)(((uint16_t)(x)) << DMA_BITER_ELINKNO_ELINK_SHIFT)) & DMA_BITER_ELINKNO_ELINK_MASK) + +/* The count of DMA_BITER_ELINKNO */ +#define DMA_BITER_ELINKNO_COUNT (8U) + +/*! @name BITER_ELINKYES - TCD Beginning Minor Loop Link, Major Loop Count (Channel Linking Enabled) */ +#define DMA_BITER_ELINKYES_BITER_MASK (0x1FFU) +#define DMA_BITER_ELINKYES_BITER_SHIFT (0U) +#define DMA_BITER_ELINKYES_BITER(x) (((uint16_t)(((uint16_t)(x)) << DMA_BITER_ELINKYES_BITER_SHIFT)) & DMA_BITER_ELINKYES_BITER_MASK) +#define DMA_BITER_ELINKYES_LINKCH_MASK (0xE00U) +#define DMA_BITER_ELINKYES_LINKCH_SHIFT (9U) +#define DMA_BITER_ELINKYES_LINKCH(x) (((uint16_t)(((uint16_t)(x)) << DMA_BITER_ELINKYES_LINKCH_SHIFT)) & DMA_BITER_ELINKYES_LINKCH_MASK) +#define DMA_BITER_ELINKYES_ELINK_MASK (0x8000U) +#define DMA_BITER_ELINKYES_ELINK_SHIFT (15U) +#define DMA_BITER_ELINKYES_ELINK(x) (((uint16_t)(((uint16_t)(x)) << DMA_BITER_ELINKYES_ELINK_SHIFT)) & DMA_BITER_ELINKYES_ELINK_MASK) + +/* The count of DMA_BITER_ELINKYES */ +#define DMA_BITER_ELINKYES_COUNT (8U) + + +/*! + * @} + */ /* end of group DMA_Register_Masks */ + + +/* DMA - Peripheral instance base addresses */ +/** Peripheral DMA base address */ +#define DMA_BASE (0x40008000u) +/** Peripheral DMA base pointer */ +#define DMA0 ((DMA_Type *)DMA_BASE) +/** Array initializer of DMA peripheral base addresses */ +#define DMA_BASE_ADDRS { DMA_BASE } +/** Array initializer of DMA peripheral base pointers */ +#define DMA_BASE_PTRS { DMA0 } +/** Interrupt vectors for the DMA peripheral type */ +#define DMA_CHN_IRQS { DMA0_DMA4_IRQn, DMA1_DMA5_IRQn, DMA2_DMA6_IRQn, DMA3_DMA7_IRQn, DMA0_DMA4_IRQn, DMA1_DMA5_IRQn, DMA2_DMA6_IRQn, DMA3_DMA7_IRQn } +#define DMA_ERROR_IRQS { DMA_Error_IRQn } + +/*! + * @} + */ /* end of group DMA_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- DMAMUX Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup DMAMUX_Peripheral_Access_Layer DMAMUX Peripheral Access Layer + * @{ + */ + +/** DMAMUX - Register Layout Typedef */ +typedef struct { + __IO uint8_t CHCFG[8]; /**< Channel Configuration register, array offset: 0x0, array step: 0x1 */ +} DMAMUX_Type; + +/* ---------------------------------------------------------------------------- + -- DMAMUX Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup DMAMUX_Register_Masks DMAMUX Register Masks + * @{ + */ + +/*! @name CHCFG - Channel Configuration register */ +#define DMAMUX_CHCFG_SOURCE_MASK (0x3FU) +#define DMAMUX_CHCFG_SOURCE_SHIFT (0U) +#define DMAMUX_CHCFG_SOURCE(x) (((uint8_t)(((uint8_t)(x)) << DMAMUX_CHCFG_SOURCE_SHIFT)) & DMAMUX_CHCFG_SOURCE_MASK) +#define DMAMUX_CHCFG_TRIG_MASK (0x40U) +#define DMAMUX_CHCFG_TRIG_SHIFT (6U) +#define DMAMUX_CHCFG_TRIG(x) (((uint8_t)(((uint8_t)(x)) << DMAMUX_CHCFG_TRIG_SHIFT)) & DMAMUX_CHCFG_TRIG_MASK) +#define DMAMUX_CHCFG_ENBL_MASK (0x80U) +#define DMAMUX_CHCFG_ENBL_SHIFT (7U) +#define DMAMUX_CHCFG_ENBL(x) (((uint8_t)(((uint8_t)(x)) << DMAMUX_CHCFG_ENBL_SHIFT)) & DMAMUX_CHCFG_ENBL_MASK) + +/* The count of DMAMUX_CHCFG */ +#define DMAMUX_CHCFG_COUNT (8U) + + +/*! + * @} + */ /* end of group DMAMUX_Register_Masks */ + + +/* DMAMUX - Peripheral instance base addresses */ +/** Peripheral DMAMUX base address */ +#define DMAMUX_BASE (0x40021000u) +/** Peripheral DMAMUX base pointer */ +#define DMAMUX ((DMAMUX_Type *)DMAMUX_BASE) +/** Array initializer of DMAMUX peripheral base addresses */ +#define DMAMUX_BASE_ADDRS { DMAMUX_BASE } +/** Array initializer of DMAMUX peripheral base pointers */ +#define DMAMUX_BASE_PTRS { DMAMUX } + +/*! + * @} + */ /* end of group DMAMUX_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- EMVSIM Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup EMVSIM_Peripheral_Access_Layer EMVSIM Peripheral Access Layer + * @{ + */ + +/** EMVSIM - Register Layout Typedef */ +typedef struct { + __I uint32_t VER_ID; /**< Version ID Register, offset: 0x0 */ + __I uint32_t PARAM; /**< Parameter Register, offset: 0x4 */ + __IO uint32_t CLKCFG; /**< Clock Configuration Register, offset: 0x8 */ + __IO uint32_t DIVISOR; /**< Baud Rate Divisor Register, offset: 0xC */ + __IO uint32_t CTRL; /**< Control Register, offset: 0x10 */ + __IO uint32_t INT_MASK; /**< Interrupt Mask Register, offset: 0x14 */ + __IO uint32_t RX_THD; /**< Receiver Threshold Register, offset: 0x18 */ + __IO uint32_t TX_THD; /**< Transmitter Threshold Register, offset: 0x1C */ + __IO uint32_t RX_STATUS; /**< Receive Status Register, offset: 0x20 */ + __IO uint32_t TX_STATUS; /**< Transmitter Status Register, offset: 0x24 */ + __IO uint32_t PCSR; /**< Port Control and Status Register, offset: 0x28 */ + __I uint32_t RX_BUF; /**< Receive Data Read Buffer, offset: 0x2C */ + __IO uint32_t TX_BUF; /**< Transmit Data Buffer, offset: 0x30 */ + __IO uint32_t TX_GETU; /**< Transmitter Guard ETU Value Register, offset: 0x34 */ + __IO uint32_t CWT_VAL; /**< Character Wait Time Value Register, offset: 0x38 */ + __IO uint32_t BWT_VAL; /**< Block Wait Time Value Register, offset: 0x3C */ + __IO uint32_t BGT_VAL; /**< Block Guard Time Value Register, offset: 0x40 */ + __IO uint32_t GPCNT0_VAL; /**< General Purpose Counter 0 Timeout Value Register, offset: 0x44 */ + __IO uint32_t GPCNT1_VAL; /**< General Purpose Counter 1 Timeout Value, offset: 0x48 */ +} EMVSIM_Type; + +/* ---------------------------------------------------------------------------- + -- EMVSIM Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup EMVSIM_Register_Masks EMVSIM Register Masks + * @{ + */ + +/*! @name VER_ID - Version ID Register */ +#define EMVSIM_VER_ID_VER_MASK (0xFFFFFFFFU) +#define EMVSIM_VER_ID_VER_SHIFT (0U) +#define EMVSIM_VER_ID_VER(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_VER_ID_VER_SHIFT)) & EMVSIM_VER_ID_VER_MASK) + +/*! @name PARAM - Parameter Register */ +#define EMVSIM_PARAM_RX_FIFO_DEPTH_MASK (0xFFU) +#define EMVSIM_PARAM_RX_FIFO_DEPTH_SHIFT (0U) +#define EMVSIM_PARAM_RX_FIFO_DEPTH(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_PARAM_RX_FIFO_DEPTH_SHIFT)) & EMVSIM_PARAM_RX_FIFO_DEPTH_MASK) +#define EMVSIM_PARAM_TX_FIFO_DEPTH_MASK (0xFF00U) +#define EMVSIM_PARAM_TX_FIFO_DEPTH_SHIFT (8U) +#define EMVSIM_PARAM_TX_FIFO_DEPTH(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_PARAM_TX_FIFO_DEPTH_SHIFT)) & EMVSIM_PARAM_TX_FIFO_DEPTH_MASK) + +/*! @name CLKCFG - Clock Configuration Register */ +#define EMVSIM_CLKCFG_CLK_PRSC_MASK (0xFFU) +#define EMVSIM_CLKCFG_CLK_PRSC_SHIFT (0U) +#define EMVSIM_CLKCFG_CLK_PRSC(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_CLKCFG_CLK_PRSC_SHIFT)) & EMVSIM_CLKCFG_CLK_PRSC_MASK) +#define EMVSIM_CLKCFG_GPCNT1_CLK_SEL_MASK (0x300U) +#define EMVSIM_CLKCFG_GPCNT1_CLK_SEL_SHIFT (8U) +#define EMVSIM_CLKCFG_GPCNT1_CLK_SEL(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_CLKCFG_GPCNT1_CLK_SEL_SHIFT)) & EMVSIM_CLKCFG_GPCNT1_CLK_SEL_MASK) +#define EMVSIM_CLKCFG_GPCNT0_CLK_SEL_MASK (0xC00U) +#define EMVSIM_CLKCFG_GPCNT0_CLK_SEL_SHIFT (10U) +#define EMVSIM_CLKCFG_GPCNT0_CLK_SEL(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_CLKCFG_GPCNT0_CLK_SEL_SHIFT)) & EMVSIM_CLKCFG_GPCNT0_CLK_SEL_MASK) + +/*! @name DIVISOR - Baud Rate Divisor Register */ +#define EMVSIM_DIVISOR_DIVISOR_VALUE_MASK (0x1FFU) +#define EMVSIM_DIVISOR_DIVISOR_VALUE_SHIFT (0U) +#define EMVSIM_DIVISOR_DIVISOR_VALUE(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_DIVISOR_DIVISOR_VALUE_SHIFT)) & EMVSIM_DIVISOR_DIVISOR_VALUE_MASK) + +/*! @name CTRL - Control Register */ +#define EMVSIM_CTRL_IC_MASK (0x1U) +#define EMVSIM_CTRL_IC_SHIFT (0U) +#define EMVSIM_CTRL_IC(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_CTRL_IC_SHIFT)) & EMVSIM_CTRL_IC_MASK) +#define EMVSIM_CTRL_ICM_MASK (0x2U) +#define EMVSIM_CTRL_ICM_SHIFT (1U) +#define EMVSIM_CTRL_ICM(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_CTRL_ICM_SHIFT)) & EMVSIM_CTRL_ICM_MASK) +#define EMVSIM_CTRL_ANACK_MASK (0x4U) +#define EMVSIM_CTRL_ANACK_SHIFT (2U) +#define EMVSIM_CTRL_ANACK(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_CTRL_ANACK_SHIFT)) & EMVSIM_CTRL_ANACK_MASK) +#define EMVSIM_CTRL_ONACK_MASK (0x8U) +#define EMVSIM_CTRL_ONACK_SHIFT (3U) +#define EMVSIM_CTRL_ONACK(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_CTRL_ONACK_SHIFT)) & EMVSIM_CTRL_ONACK_MASK) +#define EMVSIM_CTRL_FLSH_RX_MASK (0x100U) +#define EMVSIM_CTRL_FLSH_RX_SHIFT (8U) +#define EMVSIM_CTRL_FLSH_RX(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_CTRL_FLSH_RX_SHIFT)) & EMVSIM_CTRL_FLSH_RX_MASK) +#define EMVSIM_CTRL_FLSH_TX_MASK (0x200U) +#define EMVSIM_CTRL_FLSH_TX_SHIFT (9U) +#define EMVSIM_CTRL_FLSH_TX(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_CTRL_FLSH_TX_SHIFT)) & EMVSIM_CTRL_FLSH_TX_MASK) +#define EMVSIM_CTRL_SW_RST_MASK (0x400U) +#define EMVSIM_CTRL_SW_RST_SHIFT (10U) +#define EMVSIM_CTRL_SW_RST(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_CTRL_SW_RST_SHIFT)) & EMVSIM_CTRL_SW_RST_MASK) +#define EMVSIM_CTRL_KILL_CLOCKS_MASK (0x800U) +#define EMVSIM_CTRL_KILL_CLOCKS_SHIFT (11U) +#define EMVSIM_CTRL_KILL_CLOCKS(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_CTRL_KILL_CLOCKS_SHIFT)) & EMVSIM_CTRL_KILL_CLOCKS_MASK) +#define EMVSIM_CTRL_DOZE_EN_MASK (0x1000U) +#define EMVSIM_CTRL_DOZE_EN_SHIFT (12U) +#define EMVSIM_CTRL_DOZE_EN(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_CTRL_DOZE_EN_SHIFT)) & EMVSIM_CTRL_DOZE_EN_MASK) +#define EMVSIM_CTRL_STOP_EN_MASK (0x2000U) +#define EMVSIM_CTRL_STOP_EN_SHIFT (13U) +#define EMVSIM_CTRL_STOP_EN(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_CTRL_STOP_EN_SHIFT)) & EMVSIM_CTRL_STOP_EN_MASK) +#define EMVSIM_CTRL_RCV_EN_MASK (0x10000U) +#define EMVSIM_CTRL_RCV_EN_SHIFT (16U) +#define EMVSIM_CTRL_RCV_EN(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_CTRL_RCV_EN_SHIFT)) & EMVSIM_CTRL_RCV_EN_MASK) +#define EMVSIM_CTRL_XMT_EN_MASK (0x20000U) +#define EMVSIM_CTRL_XMT_EN_SHIFT (17U) +#define EMVSIM_CTRL_XMT_EN(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_CTRL_XMT_EN_SHIFT)) & EMVSIM_CTRL_XMT_EN_MASK) +#define EMVSIM_CTRL_RCVR_11_MASK (0x40000U) +#define EMVSIM_CTRL_RCVR_11_SHIFT (18U) +#define EMVSIM_CTRL_RCVR_11(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_CTRL_RCVR_11_SHIFT)) & EMVSIM_CTRL_RCVR_11_MASK) +#define EMVSIM_CTRL_RX_DMA_EN_MASK (0x80000U) +#define EMVSIM_CTRL_RX_DMA_EN_SHIFT (19U) +#define EMVSIM_CTRL_RX_DMA_EN(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_CTRL_RX_DMA_EN_SHIFT)) & EMVSIM_CTRL_RX_DMA_EN_MASK) +#define EMVSIM_CTRL_TX_DMA_EN_MASK (0x100000U) +#define EMVSIM_CTRL_TX_DMA_EN_SHIFT (20U) +#define EMVSIM_CTRL_TX_DMA_EN(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_CTRL_TX_DMA_EN_SHIFT)) & EMVSIM_CTRL_TX_DMA_EN_MASK) +#define EMVSIM_CTRL_INV_CRC_VAL_MASK (0x1000000U) +#define EMVSIM_CTRL_INV_CRC_VAL_SHIFT (24U) +#define EMVSIM_CTRL_INV_CRC_VAL(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_CTRL_INV_CRC_VAL_SHIFT)) & EMVSIM_CTRL_INV_CRC_VAL_MASK) +#define EMVSIM_CTRL_CRC_OUT_FLIP_MASK (0x2000000U) +#define EMVSIM_CTRL_CRC_OUT_FLIP_SHIFT (25U) +#define EMVSIM_CTRL_CRC_OUT_FLIP(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_CTRL_CRC_OUT_FLIP_SHIFT)) & EMVSIM_CTRL_CRC_OUT_FLIP_MASK) +#define EMVSIM_CTRL_CRC_IN_FLIP_MASK (0x4000000U) +#define EMVSIM_CTRL_CRC_IN_FLIP_SHIFT (26U) +#define EMVSIM_CTRL_CRC_IN_FLIP(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_CTRL_CRC_IN_FLIP_SHIFT)) & EMVSIM_CTRL_CRC_IN_FLIP_MASK) +#define EMVSIM_CTRL_CWT_EN_MASK (0x8000000U) +#define EMVSIM_CTRL_CWT_EN_SHIFT (27U) +#define EMVSIM_CTRL_CWT_EN(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_CTRL_CWT_EN_SHIFT)) & EMVSIM_CTRL_CWT_EN_MASK) +#define EMVSIM_CTRL_LRC_EN_MASK (0x10000000U) +#define EMVSIM_CTRL_LRC_EN_SHIFT (28U) +#define EMVSIM_CTRL_LRC_EN(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_CTRL_LRC_EN_SHIFT)) & EMVSIM_CTRL_LRC_EN_MASK) +#define EMVSIM_CTRL_CRC_EN_MASK (0x20000000U) +#define EMVSIM_CTRL_CRC_EN_SHIFT (29U) +#define EMVSIM_CTRL_CRC_EN(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_CTRL_CRC_EN_SHIFT)) & EMVSIM_CTRL_CRC_EN_MASK) +#define EMVSIM_CTRL_XMT_CRC_LRC_MASK (0x40000000U) +#define EMVSIM_CTRL_XMT_CRC_LRC_SHIFT (30U) +#define EMVSIM_CTRL_XMT_CRC_LRC(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_CTRL_XMT_CRC_LRC_SHIFT)) & EMVSIM_CTRL_XMT_CRC_LRC_MASK) +#define EMVSIM_CTRL_BWT_EN_MASK (0x80000000U) +#define EMVSIM_CTRL_BWT_EN_SHIFT (31U) +#define EMVSIM_CTRL_BWT_EN(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_CTRL_BWT_EN_SHIFT)) & EMVSIM_CTRL_BWT_EN_MASK) + +/*! @name INT_MASK - Interrupt Mask Register */ +#define EMVSIM_INT_MASK_RDT_IM_MASK (0x1U) +#define EMVSIM_INT_MASK_RDT_IM_SHIFT (0U) +#define EMVSIM_INT_MASK_RDT_IM(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_INT_MASK_RDT_IM_SHIFT)) & EMVSIM_INT_MASK_RDT_IM_MASK) +#define EMVSIM_INT_MASK_TC_IM_MASK (0x2U) +#define EMVSIM_INT_MASK_TC_IM_SHIFT (1U) +#define EMVSIM_INT_MASK_TC_IM(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_INT_MASK_TC_IM_SHIFT)) & EMVSIM_INT_MASK_TC_IM_MASK) +#define EMVSIM_INT_MASK_RFO_IM_MASK (0x4U) +#define EMVSIM_INT_MASK_RFO_IM_SHIFT (2U) +#define EMVSIM_INT_MASK_RFO_IM(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_INT_MASK_RFO_IM_SHIFT)) & EMVSIM_INT_MASK_RFO_IM_MASK) +#define EMVSIM_INT_MASK_ETC_IM_MASK (0x8U) +#define EMVSIM_INT_MASK_ETC_IM_SHIFT (3U) +#define EMVSIM_INT_MASK_ETC_IM(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_INT_MASK_ETC_IM_SHIFT)) & EMVSIM_INT_MASK_ETC_IM_MASK) +#define EMVSIM_INT_MASK_TFE_IM_MASK (0x10U) +#define EMVSIM_INT_MASK_TFE_IM_SHIFT (4U) +#define EMVSIM_INT_MASK_TFE_IM(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_INT_MASK_TFE_IM_SHIFT)) & EMVSIM_INT_MASK_TFE_IM_MASK) +#define EMVSIM_INT_MASK_TNACK_IM_MASK (0x20U) +#define EMVSIM_INT_MASK_TNACK_IM_SHIFT (5U) +#define EMVSIM_INT_MASK_TNACK_IM(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_INT_MASK_TNACK_IM_SHIFT)) & EMVSIM_INT_MASK_TNACK_IM_MASK) +#define EMVSIM_INT_MASK_TFF_IM_MASK (0x40U) +#define EMVSIM_INT_MASK_TFF_IM_SHIFT (6U) +#define EMVSIM_INT_MASK_TFF_IM(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_INT_MASK_TFF_IM_SHIFT)) & EMVSIM_INT_MASK_TFF_IM_MASK) +#define EMVSIM_INT_MASK_TDT_IM_MASK (0x80U) +#define EMVSIM_INT_MASK_TDT_IM_SHIFT (7U) +#define EMVSIM_INT_MASK_TDT_IM(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_INT_MASK_TDT_IM_SHIFT)) & EMVSIM_INT_MASK_TDT_IM_MASK) +#define EMVSIM_INT_MASK_GPCNT0_IM_MASK (0x100U) +#define EMVSIM_INT_MASK_GPCNT0_IM_SHIFT (8U) +#define EMVSIM_INT_MASK_GPCNT0_IM(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_INT_MASK_GPCNT0_IM_SHIFT)) & EMVSIM_INT_MASK_GPCNT0_IM_MASK) +#define EMVSIM_INT_MASK_CWT_ERR_IM_MASK (0x200U) +#define EMVSIM_INT_MASK_CWT_ERR_IM_SHIFT (9U) +#define EMVSIM_INT_MASK_CWT_ERR_IM(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_INT_MASK_CWT_ERR_IM_SHIFT)) & EMVSIM_INT_MASK_CWT_ERR_IM_MASK) +#define EMVSIM_INT_MASK_RNACK_IM_MASK (0x400U) +#define EMVSIM_INT_MASK_RNACK_IM_SHIFT (10U) +#define EMVSIM_INT_MASK_RNACK_IM(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_INT_MASK_RNACK_IM_SHIFT)) & EMVSIM_INT_MASK_RNACK_IM_MASK) +#define EMVSIM_INT_MASK_BWT_ERR_IM_MASK (0x800U) +#define EMVSIM_INT_MASK_BWT_ERR_IM_SHIFT (11U) +#define EMVSIM_INT_MASK_BWT_ERR_IM(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_INT_MASK_BWT_ERR_IM_SHIFT)) & EMVSIM_INT_MASK_BWT_ERR_IM_MASK) +#define EMVSIM_INT_MASK_BGT_ERR_IM_MASK (0x1000U) +#define EMVSIM_INT_MASK_BGT_ERR_IM_SHIFT (12U) +#define EMVSIM_INT_MASK_BGT_ERR_IM(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_INT_MASK_BGT_ERR_IM_SHIFT)) & EMVSIM_INT_MASK_BGT_ERR_IM_MASK) +#define EMVSIM_INT_MASK_GPCNT1_IM_MASK (0x2000U) +#define EMVSIM_INT_MASK_GPCNT1_IM_SHIFT (13U) +#define EMVSIM_INT_MASK_GPCNT1_IM(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_INT_MASK_GPCNT1_IM_SHIFT)) & EMVSIM_INT_MASK_GPCNT1_IM_MASK) +#define EMVSIM_INT_MASK_RX_DATA_IM_MASK (0x4000U) +#define EMVSIM_INT_MASK_RX_DATA_IM_SHIFT (14U) +#define EMVSIM_INT_MASK_RX_DATA_IM(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_INT_MASK_RX_DATA_IM_SHIFT)) & EMVSIM_INT_MASK_RX_DATA_IM_MASK) +#define EMVSIM_INT_MASK_PEF_IM_MASK (0x8000U) +#define EMVSIM_INT_MASK_PEF_IM_SHIFT (15U) +#define EMVSIM_INT_MASK_PEF_IM(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_INT_MASK_PEF_IM_SHIFT)) & EMVSIM_INT_MASK_PEF_IM_MASK) + +/*! @name RX_THD - Receiver Threshold Register */ +#define EMVSIM_RX_THD_RDT_MASK (0xFU) +#define EMVSIM_RX_THD_RDT_SHIFT (0U) +#define EMVSIM_RX_THD_RDT(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_RX_THD_RDT_SHIFT)) & EMVSIM_RX_THD_RDT_MASK) +#define EMVSIM_RX_THD_RNCK_THD_MASK (0xF00U) +#define EMVSIM_RX_THD_RNCK_THD_SHIFT (8U) +#define EMVSIM_RX_THD_RNCK_THD(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_RX_THD_RNCK_THD_SHIFT)) & EMVSIM_RX_THD_RNCK_THD_MASK) + +/*! @name TX_THD - Transmitter Threshold Register */ +#define EMVSIM_TX_THD_TDT_MASK (0xFU) +#define EMVSIM_TX_THD_TDT_SHIFT (0U) +#define EMVSIM_TX_THD_TDT(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_TX_THD_TDT_SHIFT)) & EMVSIM_TX_THD_TDT_MASK) +#define EMVSIM_TX_THD_TNCK_THD_MASK (0xF00U) +#define EMVSIM_TX_THD_TNCK_THD_SHIFT (8U) +#define EMVSIM_TX_THD_TNCK_THD(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_TX_THD_TNCK_THD_SHIFT)) & EMVSIM_TX_THD_TNCK_THD_MASK) + +/*! @name RX_STATUS - Receive Status Register */ +#define EMVSIM_RX_STATUS_RFO_MASK (0x1U) +#define EMVSIM_RX_STATUS_RFO_SHIFT (0U) +#define EMVSIM_RX_STATUS_RFO(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_RX_STATUS_RFO_SHIFT)) & EMVSIM_RX_STATUS_RFO_MASK) +#define EMVSIM_RX_STATUS_RX_DATA_MASK (0x10U) +#define EMVSIM_RX_STATUS_RX_DATA_SHIFT (4U) +#define EMVSIM_RX_STATUS_RX_DATA(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_RX_STATUS_RX_DATA_SHIFT)) & EMVSIM_RX_STATUS_RX_DATA_MASK) +#define EMVSIM_RX_STATUS_RDTF_MASK (0x20U) +#define EMVSIM_RX_STATUS_RDTF_SHIFT (5U) +#define EMVSIM_RX_STATUS_RDTF(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_RX_STATUS_RDTF_SHIFT)) & EMVSIM_RX_STATUS_RDTF_MASK) +#define EMVSIM_RX_STATUS_LRC_OK_MASK (0x40U) +#define EMVSIM_RX_STATUS_LRC_OK_SHIFT (6U) +#define EMVSIM_RX_STATUS_LRC_OK(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_RX_STATUS_LRC_OK_SHIFT)) & EMVSIM_RX_STATUS_LRC_OK_MASK) +#define EMVSIM_RX_STATUS_CRC_OK_MASK (0x80U) +#define EMVSIM_RX_STATUS_CRC_OK_SHIFT (7U) +#define EMVSIM_RX_STATUS_CRC_OK(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_RX_STATUS_CRC_OK_SHIFT)) & EMVSIM_RX_STATUS_CRC_OK_MASK) +#define EMVSIM_RX_STATUS_CWT_ERR_MASK (0x100U) +#define EMVSIM_RX_STATUS_CWT_ERR_SHIFT (8U) +#define EMVSIM_RX_STATUS_CWT_ERR(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_RX_STATUS_CWT_ERR_SHIFT)) & EMVSIM_RX_STATUS_CWT_ERR_MASK) +#define EMVSIM_RX_STATUS_RTE_MASK (0x200U) +#define EMVSIM_RX_STATUS_RTE_SHIFT (9U) +#define EMVSIM_RX_STATUS_RTE(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_RX_STATUS_RTE_SHIFT)) & EMVSIM_RX_STATUS_RTE_MASK) +#define EMVSIM_RX_STATUS_BWT_ERR_MASK (0x400U) +#define EMVSIM_RX_STATUS_BWT_ERR_SHIFT (10U) +#define EMVSIM_RX_STATUS_BWT_ERR(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_RX_STATUS_BWT_ERR_SHIFT)) & EMVSIM_RX_STATUS_BWT_ERR_MASK) +#define EMVSIM_RX_STATUS_BGT_ERR_MASK (0x800U) +#define EMVSIM_RX_STATUS_BGT_ERR_SHIFT (11U) +#define EMVSIM_RX_STATUS_BGT_ERR(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_RX_STATUS_BGT_ERR_SHIFT)) & EMVSIM_RX_STATUS_BGT_ERR_MASK) +#define EMVSIM_RX_STATUS_PEF_MASK (0x1000U) +#define EMVSIM_RX_STATUS_PEF_SHIFT (12U) +#define EMVSIM_RX_STATUS_PEF(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_RX_STATUS_PEF_SHIFT)) & EMVSIM_RX_STATUS_PEF_MASK) +#define EMVSIM_RX_STATUS_FEF_MASK (0x2000U) +#define EMVSIM_RX_STATUS_FEF_SHIFT (13U) +#define EMVSIM_RX_STATUS_FEF(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_RX_STATUS_FEF_SHIFT)) & EMVSIM_RX_STATUS_FEF_MASK) +#define EMVSIM_RX_STATUS_RX_WPTR_MASK (0xF0000U) +#define EMVSIM_RX_STATUS_RX_WPTR_SHIFT (16U) +#define EMVSIM_RX_STATUS_RX_WPTR(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_RX_STATUS_RX_WPTR_SHIFT)) & EMVSIM_RX_STATUS_RX_WPTR_MASK) +#define EMVSIM_RX_STATUS_RX_CNT_MASK (0xFF000000U) +#define EMVSIM_RX_STATUS_RX_CNT_SHIFT (24U) +#define EMVSIM_RX_STATUS_RX_CNT(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_RX_STATUS_RX_CNT_SHIFT)) & EMVSIM_RX_STATUS_RX_CNT_MASK) + +/*! @name TX_STATUS - Transmitter Status Register */ +#define EMVSIM_TX_STATUS_TNTE_MASK (0x1U) +#define EMVSIM_TX_STATUS_TNTE_SHIFT (0U) +#define EMVSIM_TX_STATUS_TNTE(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_TX_STATUS_TNTE_SHIFT)) & EMVSIM_TX_STATUS_TNTE_MASK) +#define EMVSIM_TX_STATUS_TFE_MASK (0x8U) +#define EMVSIM_TX_STATUS_TFE_SHIFT (3U) +#define EMVSIM_TX_STATUS_TFE(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_TX_STATUS_TFE_SHIFT)) & EMVSIM_TX_STATUS_TFE_MASK) +#define EMVSIM_TX_STATUS_ETCF_MASK (0x10U) +#define EMVSIM_TX_STATUS_ETCF_SHIFT (4U) +#define EMVSIM_TX_STATUS_ETCF(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_TX_STATUS_ETCF_SHIFT)) & EMVSIM_TX_STATUS_ETCF_MASK) +#define EMVSIM_TX_STATUS_TCF_MASK (0x20U) +#define EMVSIM_TX_STATUS_TCF_SHIFT (5U) +#define EMVSIM_TX_STATUS_TCF(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_TX_STATUS_TCF_SHIFT)) & EMVSIM_TX_STATUS_TCF_MASK) +#define EMVSIM_TX_STATUS_TFF_MASK (0x40U) +#define EMVSIM_TX_STATUS_TFF_SHIFT (6U) +#define EMVSIM_TX_STATUS_TFF(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_TX_STATUS_TFF_SHIFT)) & EMVSIM_TX_STATUS_TFF_MASK) +#define EMVSIM_TX_STATUS_TDTF_MASK (0x80U) +#define EMVSIM_TX_STATUS_TDTF_SHIFT (7U) +#define EMVSIM_TX_STATUS_TDTF(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_TX_STATUS_TDTF_SHIFT)) & EMVSIM_TX_STATUS_TDTF_MASK) +#define EMVSIM_TX_STATUS_GPCNT0_TO_MASK (0x100U) +#define EMVSIM_TX_STATUS_GPCNT0_TO_SHIFT (8U) +#define EMVSIM_TX_STATUS_GPCNT0_TO(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_TX_STATUS_GPCNT0_TO_SHIFT)) & EMVSIM_TX_STATUS_GPCNT0_TO_MASK) +#define EMVSIM_TX_STATUS_GPCNT1_TO_MASK (0x200U) +#define EMVSIM_TX_STATUS_GPCNT1_TO_SHIFT (9U) +#define EMVSIM_TX_STATUS_GPCNT1_TO(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_TX_STATUS_GPCNT1_TO_SHIFT)) & EMVSIM_TX_STATUS_GPCNT1_TO_MASK) +#define EMVSIM_TX_STATUS_TX_RPTR_MASK (0xF0000U) +#define EMVSIM_TX_STATUS_TX_RPTR_SHIFT (16U) +#define EMVSIM_TX_STATUS_TX_RPTR(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_TX_STATUS_TX_RPTR_SHIFT)) & EMVSIM_TX_STATUS_TX_RPTR_MASK) +#define EMVSIM_TX_STATUS_TX_CNT_MASK (0xFF000000U) +#define EMVSIM_TX_STATUS_TX_CNT_SHIFT (24U) +#define EMVSIM_TX_STATUS_TX_CNT(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_TX_STATUS_TX_CNT_SHIFT)) & EMVSIM_TX_STATUS_TX_CNT_MASK) + +/*! @name PCSR - Port Control and Status Register */ +#define EMVSIM_PCSR_SAPD_MASK (0x1U) +#define EMVSIM_PCSR_SAPD_SHIFT (0U) +#define EMVSIM_PCSR_SAPD(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_PCSR_SAPD_SHIFT)) & EMVSIM_PCSR_SAPD_MASK) +#define EMVSIM_PCSR_SVCC_EN_MASK (0x2U) +#define EMVSIM_PCSR_SVCC_EN_SHIFT (1U) +#define EMVSIM_PCSR_SVCC_EN(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_PCSR_SVCC_EN_SHIFT)) & EMVSIM_PCSR_SVCC_EN_MASK) +#define EMVSIM_PCSR_VCCENP_MASK (0x4U) +#define EMVSIM_PCSR_VCCENP_SHIFT (2U) +#define EMVSIM_PCSR_VCCENP(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_PCSR_VCCENP_SHIFT)) & EMVSIM_PCSR_VCCENP_MASK) +#define EMVSIM_PCSR_SRST_MASK (0x8U) +#define EMVSIM_PCSR_SRST_SHIFT (3U) +#define EMVSIM_PCSR_SRST(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_PCSR_SRST_SHIFT)) & EMVSIM_PCSR_SRST_MASK) +#define EMVSIM_PCSR_SCEN_MASK (0x10U) +#define EMVSIM_PCSR_SCEN_SHIFT (4U) +#define EMVSIM_PCSR_SCEN(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_PCSR_SCEN_SHIFT)) & EMVSIM_PCSR_SCEN_MASK) +#define EMVSIM_PCSR_SCSP_MASK (0x20U) +#define EMVSIM_PCSR_SCSP_SHIFT (5U) +#define EMVSIM_PCSR_SCSP(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_PCSR_SCSP_SHIFT)) & EMVSIM_PCSR_SCSP_MASK) +#define EMVSIM_PCSR_SPD_MASK (0x80U) +#define EMVSIM_PCSR_SPD_SHIFT (7U) +#define EMVSIM_PCSR_SPD(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_PCSR_SPD_SHIFT)) & EMVSIM_PCSR_SPD_MASK) +#define EMVSIM_PCSR_SPDIM_MASK (0x1000000U) +#define EMVSIM_PCSR_SPDIM_SHIFT (24U) +#define EMVSIM_PCSR_SPDIM(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_PCSR_SPDIM_SHIFT)) & EMVSIM_PCSR_SPDIM_MASK) +#define EMVSIM_PCSR_SPDIF_MASK (0x2000000U) +#define EMVSIM_PCSR_SPDIF_SHIFT (25U) +#define EMVSIM_PCSR_SPDIF(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_PCSR_SPDIF_SHIFT)) & EMVSIM_PCSR_SPDIF_MASK) +#define EMVSIM_PCSR_SPDP_MASK (0x4000000U) +#define EMVSIM_PCSR_SPDP_SHIFT (26U) +#define EMVSIM_PCSR_SPDP(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_PCSR_SPDP_SHIFT)) & EMVSIM_PCSR_SPDP_MASK) +#define EMVSIM_PCSR_SPDES_MASK (0x8000000U) +#define EMVSIM_PCSR_SPDES_SHIFT (27U) +#define EMVSIM_PCSR_SPDES(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_PCSR_SPDES_SHIFT)) & EMVSIM_PCSR_SPDES_MASK) + +/*! @name RX_BUF - Receive Data Read Buffer */ +#define EMVSIM_RX_BUF_RX_BYTE_MASK (0xFFU) +#define EMVSIM_RX_BUF_RX_BYTE_SHIFT (0U) +#define EMVSIM_RX_BUF_RX_BYTE(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_RX_BUF_RX_BYTE_SHIFT)) & EMVSIM_RX_BUF_RX_BYTE_MASK) + +/*! @name TX_BUF - Transmit Data Buffer */ +#define EMVSIM_TX_BUF_TX_BYTE_MASK (0xFFU) +#define EMVSIM_TX_BUF_TX_BYTE_SHIFT (0U) +#define EMVSIM_TX_BUF_TX_BYTE(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_TX_BUF_TX_BYTE_SHIFT)) & EMVSIM_TX_BUF_TX_BYTE_MASK) + +/*! @name TX_GETU - Transmitter Guard ETU Value Register */ +#define EMVSIM_TX_GETU_GETU_MASK (0xFFU) +#define EMVSIM_TX_GETU_GETU_SHIFT (0U) +#define EMVSIM_TX_GETU_GETU(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_TX_GETU_GETU_SHIFT)) & EMVSIM_TX_GETU_GETU_MASK) + +/*! @name CWT_VAL - Character Wait Time Value Register */ +#define EMVSIM_CWT_VAL_CWT_MASK (0xFFFFU) +#define EMVSIM_CWT_VAL_CWT_SHIFT (0U) +#define EMVSIM_CWT_VAL_CWT(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_CWT_VAL_CWT_SHIFT)) & EMVSIM_CWT_VAL_CWT_MASK) + +/*! @name BWT_VAL - Block Wait Time Value Register */ +#define EMVSIM_BWT_VAL_BWT_MASK (0xFFFFFFFFU) +#define EMVSIM_BWT_VAL_BWT_SHIFT (0U) +#define EMVSIM_BWT_VAL_BWT(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_BWT_VAL_BWT_SHIFT)) & EMVSIM_BWT_VAL_BWT_MASK) + +/*! @name BGT_VAL - Block Guard Time Value Register */ +#define EMVSIM_BGT_VAL_BGT_MASK (0xFFFFU) +#define EMVSIM_BGT_VAL_BGT_SHIFT (0U) +#define EMVSIM_BGT_VAL_BGT(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_BGT_VAL_BGT_SHIFT)) & EMVSIM_BGT_VAL_BGT_MASK) + +/*! @name GPCNT0_VAL - General Purpose Counter 0 Timeout Value Register */ +#define EMVSIM_GPCNT0_VAL_GPCNT0_MASK (0xFFFFU) +#define EMVSIM_GPCNT0_VAL_GPCNT0_SHIFT (0U) +#define EMVSIM_GPCNT0_VAL_GPCNT0(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_GPCNT0_VAL_GPCNT0_SHIFT)) & EMVSIM_GPCNT0_VAL_GPCNT0_MASK) + +/*! @name GPCNT1_VAL - General Purpose Counter 1 Timeout Value */ +#define EMVSIM_GPCNT1_VAL_GPCNT1_MASK (0xFFFFU) +#define EMVSIM_GPCNT1_VAL_GPCNT1_SHIFT (0U) +#define EMVSIM_GPCNT1_VAL_GPCNT1(x) (((uint32_t)(((uint32_t)(x)) << EMVSIM_GPCNT1_VAL_GPCNT1_SHIFT)) & EMVSIM_GPCNT1_VAL_GPCNT1_MASK) + + +/*! + * @} + */ /* end of group EMVSIM_Register_Masks */ + + +/* EMVSIM - Peripheral instance base addresses */ +/** Peripheral EMVSIM0 base address */ +#define EMVSIM0_BASE (0x4004E000u) +/** Peripheral EMVSIM0 base pointer */ +#define EMVSIM0 ((EMVSIM_Type *)EMVSIM0_BASE) +/** Peripheral EMVSIM1 base address */ +#define EMVSIM1_BASE (0x4004F000u) +/** Peripheral EMVSIM1 base pointer */ +#define EMVSIM1 ((EMVSIM_Type *)EMVSIM1_BASE) +/** Array initializer of EMVSIM peripheral base addresses */ +#define EMVSIM_BASE_ADDRS { EMVSIM0_BASE, EMVSIM1_BASE } +/** Array initializer of EMVSIM peripheral base pointers */ +#define EMVSIM_BASE_PTRS { EMVSIM0, EMVSIM1 } +/** Interrupt vectors for the EMVSIM peripheral type */ +#define EMVSIM_IRQS { EMVSIM0_IRQn, EMVSIM1_IRQn } + +/*! + * @} + */ /* end of group EMVSIM_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- EWM Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup EWM_Peripheral_Access_Layer EWM Peripheral Access Layer + * @{ + */ + +/** EWM - Register Layout Typedef */ +typedef struct { + __IO uint8_t CTRL; /**< Control Register, offset: 0x0 */ + __O uint8_t SERV; /**< Service Register, offset: 0x1 */ + __IO uint8_t CMPL; /**< Compare Low Register, offset: 0x2 */ + __IO uint8_t CMPH; /**< Compare High Register, offset: 0x3 */ + uint8_t RESERVED_0[1]; + __IO uint8_t CLKPRESCALER; /**< Clock Prescaler Register, offset: 0x5 */ +} EWM_Type; + +/* ---------------------------------------------------------------------------- + -- EWM Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup EWM_Register_Masks EWM Register Masks + * @{ + */ + +/*! @name CTRL - Control Register */ +#define EWM_CTRL_EWMEN_MASK (0x1U) +#define EWM_CTRL_EWMEN_SHIFT (0U) +#define EWM_CTRL_EWMEN(x) (((uint8_t)(((uint8_t)(x)) << EWM_CTRL_EWMEN_SHIFT)) & EWM_CTRL_EWMEN_MASK) +#define EWM_CTRL_ASSIN_MASK (0x2U) +#define EWM_CTRL_ASSIN_SHIFT (1U) +#define EWM_CTRL_ASSIN(x) (((uint8_t)(((uint8_t)(x)) << EWM_CTRL_ASSIN_SHIFT)) & EWM_CTRL_ASSIN_MASK) +#define EWM_CTRL_INEN_MASK (0x4U) +#define EWM_CTRL_INEN_SHIFT (2U) +#define EWM_CTRL_INEN(x) (((uint8_t)(((uint8_t)(x)) << EWM_CTRL_INEN_SHIFT)) & EWM_CTRL_INEN_MASK) +#define EWM_CTRL_INTEN_MASK (0x8U) +#define EWM_CTRL_INTEN_SHIFT (3U) +#define EWM_CTRL_INTEN(x) (((uint8_t)(((uint8_t)(x)) << EWM_CTRL_INTEN_SHIFT)) & EWM_CTRL_INTEN_MASK) + +/*! @name SERV - Service Register */ +#define EWM_SERV_SERVICE_MASK (0xFFU) +#define EWM_SERV_SERVICE_SHIFT (0U) +#define EWM_SERV_SERVICE(x) (((uint8_t)(((uint8_t)(x)) << EWM_SERV_SERVICE_SHIFT)) & EWM_SERV_SERVICE_MASK) + +/*! @name CMPL - Compare Low Register */ +#define EWM_CMPL_COMPAREL_MASK (0xFFU) +#define EWM_CMPL_COMPAREL_SHIFT (0U) +#define EWM_CMPL_COMPAREL(x) (((uint8_t)(((uint8_t)(x)) << EWM_CMPL_COMPAREL_SHIFT)) & EWM_CMPL_COMPAREL_MASK) + +/*! @name CMPH - Compare High Register */ +#define EWM_CMPH_COMPAREH_MASK (0xFFU) +#define EWM_CMPH_COMPAREH_SHIFT (0U) +#define EWM_CMPH_COMPAREH(x) (((uint8_t)(((uint8_t)(x)) << EWM_CMPH_COMPAREH_SHIFT)) & EWM_CMPH_COMPAREH_MASK) + +/*! @name CLKPRESCALER - Clock Prescaler Register */ +#define EWM_CLKPRESCALER_CLK_DIV_MASK (0xFFU) +#define EWM_CLKPRESCALER_CLK_DIV_SHIFT (0U) +#define EWM_CLKPRESCALER_CLK_DIV(x) (((uint8_t)(((uint8_t)(x)) << EWM_CLKPRESCALER_CLK_DIV_SHIFT)) & EWM_CLKPRESCALER_CLK_DIV_MASK) + + +/*! + * @} + */ /* end of group EWM_Register_Masks */ + + +/* EWM - Peripheral instance base addresses */ +/** Peripheral EWM base address */ +#define EWM_BASE (0x40061000u) +/** Peripheral EWM base pointer */ +#define EWM ((EWM_Type *)EWM_BASE) +/** Array initializer of EWM peripheral base addresses */ +#define EWM_BASE_ADDRS { EWM_BASE } +/** Array initializer of EWM peripheral base pointers */ +#define EWM_BASE_PTRS { EWM } +/** Interrupt vectors for the EWM peripheral type */ +#define EWM_IRQS { WDOG_EWM_IRQn } + +/*! + * @} + */ /* end of group EWM_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- FGPIO Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup FGPIO_Peripheral_Access_Layer FGPIO Peripheral Access Layer + * @{ + */ + +/** FGPIO - Register Layout Typedef */ +typedef struct { + __IO uint32_t PDOR; /**< Port Data Output Register, offset: 0x0 */ + __O uint32_t PSOR; /**< Port Set Output Register, offset: 0x4 */ + __O uint32_t PCOR; /**< Port Clear Output Register, offset: 0x8 */ + __O uint32_t PTOR; /**< Port Toggle Output Register, offset: 0xC */ + __I uint32_t PDIR; /**< Port Data Input Register, offset: 0x10 */ + __IO uint32_t PDDR; /**< Port Data Direction Register, offset: 0x14 */ +} FGPIO_Type; + +/* ---------------------------------------------------------------------------- + -- FGPIO Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup FGPIO_Register_Masks FGPIO Register Masks + * @{ + */ + +/*! @name PDOR - Port Data Output Register */ +#define FGPIO_PDOR_PDO_MASK (0xFFFFFFFFU) +#define FGPIO_PDOR_PDO_SHIFT (0U) +#define FGPIO_PDOR_PDO(x) (((uint32_t)(((uint32_t)(x)) << FGPIO_PDOR_PDO_SHIFT)) & FGPIO_PDOR_PDO_MASK) + +/*! @name PSOR - Port Set Output Register */ +#define FGPIO_PSOR_PTSO_MASK (0xFFFFFFFFU) +#define FGPIO_PSOR_PTSO_SHIFT (0U) +#define FGPIO_PSOR_PTSO(x) (((uint32_t)(((uint32_t)(x)) << FGPIO_PSOR_PTSO_SHIFT)) & FGPIO_PSOR_PTSO_MASK) + +/*! @name PCOR - Port Clear Output Register */ +#define FGPIO_PCOR_PTCO_MASK (0xFFFFFFFFU) +#define FGPIO_PCOR_PTCO_SHIFT (0U) +#define FGPIO_PCOR_PTCO(x) (((uint32_t)(((uint32_t)(x)) << FGPIO_PCOR_PTCO_SHIFT)) & FGPIO_PCOR_PTCO_MASK) + +/*! @name PTOR - Port Toggle Output Register */ +#define FGPIO_PTOR_PTTO_MASK (0xFFFFFFFFU) +#define FGPIO_PTOR_PTTO_SHIFT (0U) +#define FGPIO_PTOR_PTTO(x) (((uint32_t)(((uint32_t)(x)) << FGPIO_PTOR_PTTO_SHIFT)) & FGPIO_PTOR_PTTO_MASK) + +/*! @name PDIR - Port Data Input Register */ +#define FGPIO_PDIR_PDI_MASK (0xFFFFFFFFU) +#define FGPIO_PDIR_PDI_SHIFT (0U) +#define FGPIO_PDIR_PDI(x) (((uint32_t)(((uint32_t)(x)) << FGPIO_PDIR_PDI_SHIFT)) & FGPIO_PDIR_PDI_MASK) + +/*! @name PDDR - Port Data Direction Register */ +#define FGPIO_PDDR_PDD_MASK (0xFFFFFFFFU) +#define FGPIO_PDDR_PDD_SHIFT (0U) +#define FGPIO_PDDR_PDD(x) (((uint32_t)(((uint32_t)(x)) << FGPIO_PDDR_PDD_SHIFT)) & FGPIO_PDDR_PDD_MASK) + + +/*! + * @} + */ /* end of group FGPIO_Register_Masks */ + + +/* FGPIO - Peripheral instance base addresses */ +/** Peripheral FGPIOA base address */ +#define FGPIOA_BASE (0xF8000000u) +/** Peripheral FGPIOA base pointer */ +#define FGPIOA ((FGPIO_Type *)FGPIOA_BASE) +/** Peripheral FGPIOB base address */ +#define FGPIOB_BASE (0xF8000040u) +/** Peripheral FGPIOB base pointer */ +#define FGPIOB ((FGPIO_Type *)FGPIOB_BASE) +/** Peripheral FGPIOC base address */ +#define FGPIOC_BASE (0xF8000080u) +/** Peripheral FGPIOC base pointer */ +#define FGPIOC ((FGPIO_Type *)FGPIOC_BASE) +/** Peripheral FGPIOD base address */ +#define FGPIOD_BASE (0xF80000C0u) +/** Peripheral FGPIOD base pointer */ +#define FGPIOD ((FGPIO_Type *)FGPIOD_BASE) +/** Peripheral FGPIOE base address */ +#define FGPIOE_BASE (0xF8000100u) +/** Peripheral FGPIOE base pointer */ +#define FGPIOE ((FGPIO_Type *)FGPIOE_BASE) +/** Array initializer of FGPIO peripheral base addresses */ +#define FGPIO_BASE_ADDRS { FGPIOA_BASE, FGPIOB_BASE, FGPIOC_BASE, FGPIOD_BASE, FGPIOE_BASE } +/** Array initializer of FGPIO peripheral base pointers */ +#define FGPIO_BASE_PTRS { FGPIOA, FGPIOB, FGPIOC, FGPIOD, FGPIOE } + +/*! + * @} + */ /* end of group FGPIO_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- FLEXIO Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup FLEXIO_Peripheral_Access_Layer FLEXIO Peripheral Access Layer + * @{ + */ + +/** FLEXIO - Register Layout Typedef */ +typedef struct { + __I uint32_t VERID; /**< Version ID Register, offset: 0x0 */ + __I uint32_t PARAM; /**< Parameter Register, offset: 0x4 */ + __IO uint32_t CTRL; /**< FlexIO Control Register, offset: 0x8 */ + __I uint32_t PIN; /**< Pin State Register, offset: 0xC */ + __IO uint32_t SHIFTSTAT; /**< Shifter Status Register, offset: 0x10 */ + __IO uint32_t SHIFTERR; /**< Shifter Error Register, offset: 0x14 */ + __IO uint32_t TIMSTAT; /**< Timer Status Register, offset: 0x18 */ + uint8_t RESERVED_0[4]; + __IO uint32_t SHIFTSIEN; /**< Shifter Status Interrupt Enable, offset: 0x20 */ + __IO uint32_t SHIFTEIEN; /**< Shifter Error Interrupt Enable, offset: 0x24 */ + __IO uint32_t TIMIEN; /**< Timer Interrupt Enable Register, offset: 0x28 */ + uint8_t RESERVED_1[4]; + __IO uint32_t SHIFTSDEN; /**< Shifter Status DMA Enable, offset: 0x30 */ + uint8_t RESERVED_2[12]; + __IO uint32_t SHIFTSTATE; /**< Shifter State Register, offset: 0x40 */ + uint8_t RESERVED_3[60]; + __IO uint32_t SHIFTCTL[8]; /**< Shifter Control N Register, array offset: 0x80, array step: 0x4 */ + uint8_t RESERVED_4[96]; + __IO uint32_t SHIFTCFG[8]; /**< Shifter Configuration N Register, array offset: 0x100, array step: 0x4 */ + uint8_t RESERVED_5[224]; + __IO uint32_t SHIFTBUF[8]; /**< Shifter Buffer N Register, array offset: 0x200, array step: 0x4 */ + uint8_t RESERVED_6[96]; + __IO uint32_t SHIFTBUFBIS[8]; /**< Shifter Buffer N Bit Swapped Register, array offset: 0x280, array step: 0x4 */ + uint8_t RESERVED_7[96]; + __IO uint32_t SHIFTBUFBYS[8]; /**< Shifter Buffer N Byte Swapped Register, array offset: 0x300, array step: 0x4 */ + uint8_t RESERVED_8[96]; + __IO uint32_t SHIFTBUFBBS[8]; /**< Shifter Buffer N Bit Byte Swapped Register, array offset: 0x380, array step: 0x4 */ + uint8_t RESERVED_9[96]; + __IO uint32_t TIMCTL[8]; /**< Timer Control N Register, array offset: 0x400, array step: 0x4 */ + uint8_t RESERVED_10[96]; + __IO uint32_t TIMCFG[8]; /**< Timer Configuration N Register, array offset: 0x480, array step: 0x4 */ + uint8_t RESERVED_11[96]; + __IO uint32_t TIMCMP[8]; /**< Timer Compare N Register, array offset: 0x500, array step: 0x4 */ + uint8_t RESERVED_12[352]; + __IO uint32_t SHIFTBUFNBS[8]; /**< Shifter Buffer N Nibble Byte Swapped Register, array offset: 0x680, array step: 0x4 */ + uint8_t RESERVED_13[96]; + __IO uint32_t SHIFTBUFHWS[8]; /**< Shifter Buffer N Half Word Swapped Register, array offset: 0x700, array step: 0x4 */ + uint8_t RESERVED_14[96]; + __IO uint32_t SHIFTBUFNIS[8]; /**< Shifter Buffer N Nibble Swapped Register, array offset: 0x780, array step: 0x4 */ +} FLEXIO_Type; + +/* ---------------------------------------------------------------------------- + -- FLEXIO Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup FLEXIO_Register_Masks FLEXIO Register Masks + * @{ + */ + +/*! @name VERID - Version ID Register */ +#define FLEXIO_VERID_FEATURE_MASK (0xFFFFU) +#define FLEXIO_VERID_FEATURE_SHIFT (0U) +#define FLEXIO_VERID_FEATURE(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_VERID_FEATURE_SHIFT)) & FLEXIO_VERID_FEATURE_MASK) +#define FLEXIO_VERID_MINOR_MASK (0xFF0000U) +#define FLEXIO_VERID_MINOR_SHIFT (16U) +#define FLEXIO_VERID_MINOR(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_VERID_MINOR_SHIFT)) & FLEXIO_VERID_MINOR_MASK) +#define FLEXIO_VERID_MAJOR_MASK (0xFF000000U) +#define FLEXIO_VERID_MAJOR_SHIFT (24U) +#define FLEXIO_VERID_MAJOR(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_VERID_MAJOR_SHIFT)) & FLEXIO_VERID_MAJOR_MASK) + +/*! @name PARAM - Parameter Register */ +#define FLEXIO_PARAM_SHIFTER_MASK (0xFFU) +#define FLEXIO_PARAM_SHIFTER_SHIFT (0U) +#define FLEXIO_PARAM_SHIFTER(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_PARAM_SHIFTER_SHIFT)) & FLEXIO_PARAM_SHIFTER_MASK) +#define FLEXIO_PARAM_TIMER_MASK (0xFF00U) +#define FLEXIO_PARAM_TIMER_SHIFT (8U) +#define FLEXIO_PARAM_TIMER(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_PARAM_TIMER_SHIFT)) & FLEXIO_PARAM_TIMER_MASK) +#define FLEXIO_PARAM_PIN_MASK (0xFF0000U) +#define FLEXIO_PARAM_PIN_SHIFT (16U) +#define FLEXIO_PARAM_PIN(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_PARAM_PIN_SHIFT)) & FLEXIO_PARAM_PIN_MASK) +#define FLEXIO_PARAM_TRIGGER_MASK (0xFF000000U) +#define FLEXIO_PARAM_TRIGGER_SHIFT (24U) +#define FLEXIO_PARAM_TRIGGER(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_PARAM_TRIGGER_SHIFT)) & FLEXIO_PARAM_TRIGGER_MASK) + +/*! @name CTRL - FlexIO Control Register */ +#define FLEXIO_CTRL_FLEXEN_MASK (0x1U) +#define FLEXIO_CTRL_FLEXEN_SHIFT (0U) +#define FLEXIO_CTRL_FLEXEN(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_CTRL_FLEXEN_SHIFT)) & FLEXIO_CTRL_FLEXEN_MASK) +#define FLEXIO_CTRL_SWRST_MASK (0x2U) +#define FLEXIO_CTRL_SWRST_SHIFT (1U) +#define FLEXIO_CTRL_SWRST(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_CTRL_SWRST_SHIFT)) & FLEXIO_CTRL_SWRST_MASK) +#define FLEXIO_CTRL_FASTACC_MASK (0x4U) +#define FLEXIO_CTRL_FASTACC_SHIFT (2U) +#define FLEXIO_CTRL_FASTACC(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_CTRL_FASTACC_SHIFT)) & FLEXIO_CTRL_FASTACC_MASK) +#define FLEXIO_CTRL_DBGE_MASK (0x40000000U) +#define FLEXIO_CTRL_DBGE_SHIFT (30U) +#define FLEXIO_CTRL_DBGE(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_CTRL_DBGE_SHIFT)) & FLEXIO_CTRL_DBGE_MASK) +#define FLEXIO_CTRL_DOZEN_MASK (0x80000000U) +#define FLEXIO_CTRL_DOZEN_SHIFT (31U) +#define FLEXIO_CTRL_DOZEN(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_CTRL_DOZEN_SHIFT)) & FLEXIO_CTRL_DOZEN_MASK) + +/*! @name PIN - Pin State Register */ +#define FLEXIO_PIN_PDI_MASK (0xFFFFFFFFU) +#define FLEXIO_PIN_PDI_SHIFT (0U) +#define FLEXIO_PIN_PDI(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_PIN_PDI_SHIFT)) & FLEXIO_PIN_PDI_MASK) + +/*! @name SHIFTSTAT - Shifter Status Register */ +#define FLEXIO_SHIFTSTAT_SSF_MASK (0xFFU) +#define FLEXIO_SHIFTSTAT_SSF_SHIFT (0U) +#define FLEXIO_SHIFTSTAT_SSF(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_SHIFTSTAT_SSF_SHIFT)) & FLEXIO_SHIFTSTAT_SSF_MASK) + +/*! @name SHIFTERR - Shifter Error Register */ +#define FLEXIO_SHIFTERR_SEF_MASK (0xFFU) +#define FLEXIO_SHIFTERR_SEF_SHIFT (0U) +#define FLEXIO_SHIFTERR_SEF(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_SHIFTERR_SEF_SHIFT)) & FLEXIO_SHIFTERR_SEF_MASK) + +/*! @name TIMSTAT - Timer Status Register */ +#define FLEXIO_TIMSTAT_TSF_MASK (0xFFU) +#define FLEXIO_TIMSTAT_TSF_SHIFT (0U) +#define FLEXIO_TIMSTAT_TSF(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_TIMSTAT_TSF_SHIFT)) & FLEXIO_TIMSTAT_TSF_MASK) + +/*! @name SHIFTSIEN - Shifter Status Interrupt Enable */ +#define FLEXIO_SHIFTSIEN_SSIE_MASK (0xFFU) +#define FLEXIO_SHIFTSIEN_SSIE_SHIFT (0U) +#define FLEXIO_SHIFTSIEN_SSIE(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_SHIFTSIEN_SSIE_SHIFT)) & FLEXIO_SHIFTSIEN_SSIE_MASK) + +/*! @name SHIFTEIEN - Shifter Error Interrupt Enable */ +#define FLEXIO_SHIFTEIEN_SEIE_MASK (0xFFU) +#define FLEXIO_SHIFTEIEN_SEIE_SHIFT (0U) +#define FLEXIO_SHIFTEIEN_SEIE(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_SHIFTEIEN_SEIE_SHIFT)) & FLEXIO_SHIFTEIEN_SEIE_MASK) + +/*! @name TIMIEN - Timer Interrupt Enable Register */ +#define FLEXIO_TIMIEN_TEIE_MASK (0xFFU) +#define FLEXIO_TIMIEN_TEIE_SHIFT (0U) +#define FLEXIO_TIMIEN_TEIE(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_TIMIEN_TEIE_SHIFT)) & FLEXIO_TIMIEN_TEIE_MASK) + +/*! @name SHIFTSDEN - Shifter Status DMA Enable */ +#define FLEXIO_SHIFTSDEN_SSDE_MASK (0xFFU) +#define FLEXIO_SHIFTSDEN_SSDE_SHIFT (0U) +#define FLEXIO_SHIFTSDEN_SSDE(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_SHIFTSDEN_SSDE_SHIFT)) & FLEXIO_SHIFTSDEN_SSDE_MASK) + +/*! @name SHIFTSTATE - Shifter State Register */ +#define FLEXIO_SHIFTSTATE_STATE_MASK (0x7U) +#define FLEXIO_SHIFTSTATE_STATE_SHIFT (0U) +#define FLEXIO_SHIFTSTATE_STATE(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_SHIFTSTATE_STATE_SHIFT)) & FLEXIO_SHIFTSTATE_STATE_MASK) + +/*! @name SHIFTCTL - Shifter Control N Register */ +#define FLEXIO_SHIFTCTL_SMOD_MASK (0x7U) +#define FLEXIO_SHIFTCTL_SMOD_SHIFT (0U) +#define FLEXIO_SHIFTCTL_SMOD(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_SHIFTCTL_SMOD_SHIFT)) & FLEXIO_SHIFTCTL_SMOD_MASK) +#define FLEXIO_SHIFTCTL_PINPOL_MASK (0x80U) +#define FLEXIO_SHIFTCTL_PINPOL_SHIFT (7U) +#define FLEXIO_SHIFTCTL_PINPOL(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_SHIFTCTL_PINPOL_SHIFT)) & FLEXIO_SHIFTCTL_PINPOL_MASK) +#define FLEXIO_SHIFTCTL_PINSEL_MASK (0x1F00U) +#define FLEXIO_SHIFTCTL_PINSEL_SHIFT (8U) +#define FLEXIO_SHIFTCTL_PINSEL(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_SHIFTCTL_PINSEL_SHIFT)) & FLEXIO_SHIFTCTL_PINSEL_MASK) +#define FLEXIO_SHIFTCTL_PINCFG_MASK (0x30000U) +#define FLEXIO_SHIFTCTL_PINCFG_SHIFT (16U) +#define FLEXIO_SHIFTCTL_PINCFG(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_SHIFTCTL_PINCFG_SHIFT)) & FLEXIO_SHIFTCTL_PINCFG_MASK) +#define FLEXIO_SHIFTCTL_TIMPOL_MASK (0x800000U) +#define FLEXIO_SHIFTCTL_TIMPOL_SHIFT (23U) +#define FLEXIO_SHIFTCTL_TIMPOL(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_SHIFTCTL_TIMPOL_SHIFT)) & FLEXIO_SHIFTCTL_TIMPOL_MASK) +#define FLEXIO_SHIFTCTL_TIMSEL_MASK (0x7000000U) +#define FLEXIO_SHIFTCTL_TIMSEL_SHIFT (24U) +#define FLEXIO_SHIFTCTL_TIMSEL(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_SHIFTCTL_TIMSEL_SHIFT)) & FLEXIO_SHIFTCTL_TIMSEL_MASK) + +/* The count of FLEXIO_SHIFTCTL */ +#define FLEXIO_SHIFTCTL_COUNT (8U) + +/*! @name SHIFTCFG - Shifter Configuration N Register */ +#define FLEXIO_SHIFTCFG_SSTART_MASK (0x3U) +#define FLEXIO_SHIFTCFG_SSTART_SHIFT (0U) +#define FLEXIO_SHIFTCFG_SSTART(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_SHIFTCFG_SSTART_SHIFT)) & FLEXIO_SHIFTCFG_SSTART_MASK) +#define FLEXIO_SHIFTCFG_SSTOP_MASK (0x30U) +#define FLEXIO_SHIFTCFG_SSTOP_SHIFT (4U) +#define FLEXIO_SHIFTCFG_SSTOP(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_SHIFTCFG_SSTOP_SHIFT)) & FLEXIO_SHIFTCFG_SSTOP_MASK) +#define FLEXIO_SHIFTCFG_INSRC_MASK (0x100U) +#define FLEXIO_SHIFTCFG_INSRC_SHIFT (8U) +#define FLEXIO_SHIFTCFG_INSRC(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_SHIFTCFG_INSRC_SHIFT)) & FLEXIO_SHIFTCFG_INSRC_MASK) +#define FLEXIO_SHIFTCFG_PWIDTH_MASK (0x1F0000U) +#define FLEXIO_SHIFTCFG_PWIDTH_SHIFT (16U) +#define FLEXIO_SHIFTCFG_PWIDTH(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_SHIFTCFG_PWIDTH_SHIFT)) & FLEXIO_SHIFTCFG_PWIDTH_MASK) + +/* The count of FLEXIO_SHIFTCFG */ +#define FLEXIO_SHIFTCFG_COUNT (8U) + +/*! @name SHIFTBUF - Shifter Buffer N Register */ +#define FLEXIO_SHIFTBUF_SHIFTBUF_MASK (0xFFFFFFFFU) +#define FLEXIO_SHIFTBUF_SHIFTBUF_SHIFT (0U) +#define FLEXIO_SHIFTBUF_SHIFTBUF(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_SHIFTBUF_SHIFTBUF_SHIFT)) & FLEXIO_SHIFTBUF_SHIFTBUF_MASK) + +/* The count of FLEXIO_SHIFTBUF */ +#define FLEXIO_SHIFTBUF_COUNT (8U) + +/*! @name SHIFTBUFBIS - Shifter Buffer N Bit Swapped Register */ +#define FLEXIO_SHIFTBUFBIS_SHIFTBUFBIS_MASK (0xFFFFFFFFU) +#define FLEXIO_SHIFTBUFBIS_SHIFTBUFBIS_SHIFT (0U) +#define FLEXIO_SHIFTBUFBIS_SHIFTBUFBIS(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_SHIFTBUFBIS_SHIFTBUFBIS_SHIFT)) & FLEXIO_SHIFTBUFBIS_SHIFTBUFBIS_MASK) + +/* The count of FLEXIO_SHIFTBUFBIS */ +#define FLEXIO_SHIFTBUFBIS_COUNT (8U) + +/*! @name SHIFTBUFBYS - Shifter Buffer N Byte Swapped Register */ +#define FLEXIO_SHIFTBUFBYS_SHIFTBUFBYS_MASK (0xFFFFFFFFU) +#define FLEXIO_SHIFTBUFBYS_SHIFTBUFBYS_SHIFT (0U) +#define FLEXIO_SHIFTBUFBYS_SHIFTBUFBYS(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_SHIFTBUFBYS_SHIFTBUFBYS_SHIFT)) & FLEXIO_SHIFTBUFBYS_SHIFTBUFBYS_MASK) + +/* The count of FLEXIO_SHIFTBUFBYS */ +#define FLEXIO_SHIFTBUFBYS_COUNT (8U) + +/*! @name SHIFTBUFBBS - Shifter Buffer N Bit Byte Swapped Register */ +#define FLEXIO_SHIFTBUFBBS_SHIFTBUFBBS_MASK (0xFFFFFFFFU) +#define FLEXIO_SHIFTBUFBBS_SHIFTBUFBBS_SHIFT (0U) +#define FLEXIO_SHIFTBUFBBS_SHIFTBUFBBS(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_SHIFTBUFBBS_SHIFTBUFBBS_SHIFT)) & FLEXIO_SHIFTBUFBBS_SHIFTBUFBBS_MASK) + +/* The count of FLEXIO_SHIFTBUFBBS */ +#define FLEXIO_SHIFTBUFBBS_COUNT (8U) + +/*! @name TIMCTL - Timer Control N Register */ +#define FLEXIO_TIMCTL_TIMOD_MASK (0x3U) +#define FLEXIO_TIMCTL_TIMOD_SHIFT (0U) +#define FLEXIO_TIMCTL_TIMOD(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_TIMCTL_TIMOD_SHIFT)) & FLEXIO_TIMCTL_TIMOD_MASK) +#define FLEXIO_TIMCTL_PINPOL_MASK (0x80U) +#define FLEXIO_TIMCTL_PINPOL_SHIFT (7U) +#define FLEXIO_TIMCTL_PINPOL(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_TIMCTL_PINPOL_SHIFT)) & FLEXIO_TIMCTL_PINPOL_MASK) +#define FLEXIO_TIMCTL_PINSEL_MASK (0x1F00U) +#define FLEXIO_TIMCTL_PINSEL_SHIFT (8U) +#define FLEXIO_TIMCTL_PINSEL(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_TIMCTL_PINSEL_SHIFT)) & FLEXIO_TIMCTL_PINSEL_MASK) +#define FLEXIO_TIMCTL_PINCFG_MASK (0x30000U) +#define FLEXIO_TIMCTL_PINCFG_SHIFT (16U) +#define FLEXIO_TIMCTL_PINCFG(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_TIMCTL_PINCFG_SHIFT)) & FLEXIO_TIMCTL_PINCFG_MASK) +#define FLEXIO_TIMCTL_TRGSRC_MASK (0x400000U) +#define FLEXIO_TIMCTL_TRGSRC_SHIFT (22U) +#define FLEXIO_TIMCTL_TRGSRC(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_TIMCTL_TRGSRC_SHIFT)) & FLEXIO_TIMCTL_TRGSRC_MASK) +#define FLEXIO_TIMCTL_TRGPOL_MASK (0x800000U) +#define FLEXIO_TIMCTL_TRGPOL_SHIFT (23U) +#define FLEXIO_TIMCTL_TRGPOL(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_TIMCTL_TRGPOL_SHIFT)) & FLEXIO_TIMCTL_TRGPOL_MASK) +#define FLEXIO_TIMCTL_TRGSEL_MASK (0x3F000000U) +#define FLEXIO_TIMCTL_TRGSEL_SHIFT (24U) +#define FLEXIO_TIMCTL_TRGSEL(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_TIMCTL_TRGSEL_SHIFT)) & FLEXIO_TIMCTL_TRGSEL_MASK) + +/* The count of FLEXIO_TIMCTL */ +#define FLEXIO_TIMCTL_COUNT (8U) + +/*! @name TIMCFG - Timer Configuration N Register */ +#define FLEXIO_TIMCFG_TSTART_MASK (0x2U) +#define FLEXIO_TIMCFG_TSTART_SHIFT (1U) +#define FLEXIO_TIMCFG_TSTART(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_TIMCFG_TSTART_SHIFT)) & FLEXIO_TIMCFG_TSTART_MASK) +#define FLEXIO_TIMCFG_TSTOP_MASK (0x30U) +#define FLEXIO_TIMCFG_TSTOP_SHIFT (4U) +#define FLEXIO_TIMCFG_TSTOP(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_TIMCFG_TSTOP_SHIFT)) & FLEXIO_TIMCFG_TSTOP_MASK) +#define FLEXIO_TIMCFG_TIMENA_MASK (0x700U) +#define FLEXIO_TIMCFG_TIMENA_SHIFT (8U) +#define FLEXIO_TIMCFG_TIMENA(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_TIMCFG_TIMENA_SHIFT)) & FLEXIO_TIMCFG_TIMENA_MASK) +#define FLEXIO_TIMCFG_TIMDIS_MASK (0x7000U) +#define FLEXIO_TIMCFG_TIMDIS_SHIFT (12U) +#define FLEXIO_TIMCFG_TIMDIS(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_TIMCFG_TIMDIS_SHIFT)) & FLEXIO_TIMCFG_TIMDIS_MASK) +#define FLEXIO_TIMCFG_TIMRST_MASK (0x70000U) +#define FLEXIO_TIMCFG_TIMRST_SHIFT (16U) +#define FLEXIO_TIMCFG_TIMRST(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_TIMCFG_TIMRST_SHIFT)) & FLEXIO_TIMCFG_TIMRST_MASK) +#define FLEXIO_TIMCFG_TIMDEC_MASK (0x300000U) +#define FLEXIO_TIMCFG_TIMDEC_SHIFT (20U) +#define FLEXIO_TIMCFG_TIMDEC(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_TIMCFG_TIMDEC_SHIFT)) & FLEXIO_TIMCFG_TIMDEC_MASK) +#define FLEXIO_TIMCFG_TIMOUT_MASK (0x3000000U) +#define FLEXIO_TIMCFG_TIMOUT_SHIFT (24U) +#define FLEXIO_TIMCFG_TIMOUT(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_TIMCFG_TIMOUT_SHIFT)) & FLEXIO_TIMCFG_TIMOUT_MASK) + +/* The count of FLEXIO_TIMCFG */ +#define FLEXIO_TIMCFG_COUNT (8U) + +/*! @name TIMCMP - Timer Compare N Register */ +#define FLEXIO_TIMCMP_CMP_MASK (0xFFFFU) +#define FLEXIO_TIMCMP_CMP_SHIFT (0U) +#define FLEXIO_TIMCMP_CMP(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_TIMCMP_CMP_SHIFT)) & FLEXIO_TIMCMP_CMP_MASK) + +/* The count of FLEXIO_TIMCMP */ +#define FLEXIO_TIMCMP_COUNT (8U) + +/*! @name SHIFTBUFNBS - Shifter Buffer N Nibble Byte Swapped Register */ +#define FLEXIO_SHIFTBUFNBS_SHIFTBUFNBS_MASK (0xFFFFFFFFU) +#define FLEXIO_SHIFTBUFNBS_SHIFTBUFNBS_SHIFT (0U) +#define FLEXIO_SHIFTBUFNBS_SHIFTBUFNBS(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_SHIFTBUFNBS_SHIFTBUFNBS_SHIFT)) & FLEXIO_SHIFTBUFNBS_SHIFTBUFNBS_MASK) + +/* The count of FLEXIO_SHIFTBUFNBS */ +#define FLEXIO_SHIFTBUFNBS_COUNT (8U) + +/*! @name SHIFTBUFHWS - Shifter Buffer N Half Word Swapped Register */ +#define FLEXIO_SHIFTBUFHWS_SHIFTBUFHWS_MASK (0xFFFFFFFFU) +#define FLEXIO_SHIFTBUFHWS_SHIFTBUFHWS_SHIFT (0U) +#define FLEXIO_SHIFTBUFHWS_SHIFTBUFHWS(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_SHIFTBUFHWS_SHIFTBUFHWS_SHIFT)) & FLEXIO_SHIFTBUFHWS_SHIFTBUFHWS_MASK) + +/* The count of FLEXIO_SHIFTBUFHWS */ +#define FLEXIO_SHIFTBUFHWS_COUNT (8U) + +/*! @name SHIFTBUFNIS - Shifter Buffer N Nibble Swapped Register */ +#define FLEXIO_SHIFTBUFNIS_SHIFTBUFNIS_MASK (0xFFFFFFFFU) +#define FLEXIO_SHIFTBUFNIS_SHIFTBUFNIS_SHIFT (0U) +#define FLEXIO_SHIFTBUFNIS_SHIFTBUFNIS(x) (((uint32_t)(((uint32_t)(x)) << FLEXIO_SHIFTBUFNIS_SHIFTBUFNIS_SHIFT)) & FLEXIO_SHIFTBUFNIS_SHIFTBUFNIS_MASK) + +/* The count of FLEXIO_SHIFTBUFNIS */ +#define FLEXIO_SHIFTBUFNIS_COUNT (8U) + + +/*! + * @} + */ /* end of group FLEXIO_Register_Masks */ + + +/* FLEXIO - Peripheral instance base addresses */ +/** Peripheral FLEXIO0 base address */ +#define FLEXIO0_BASE (0x4005F000u) +/** Peripheral FLEXIO0 base pointer */ +#define FLEXIO0 ((FLEXIO_Type *)FLEXIO0_BASE) +/** Array initializer of FLEXIO peripheral base addresses */ +#define FLEXIO_BASE_ADDRS { FLEXIO0_BASE } +/** Array initializer of FLEXIO peripheral base pointers */ +#define FLEXIO_BASE_PTRS { FLEXIO0 } +/** Interrupt vectors for the FLEXIO peripheral type */ +#define FLEXIO_IRQS { FLEXIO0_IRQn } + +/*! + * @} + */ /* end of group FLEXIO_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- FTFA Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup FTFA_Peripheral_Access_Layer FTFA Peripheral Access Layer + * @{ + */ + +/** FTFA - Register Layout Typedef */ +typedef struct { + __IO uint8_t FSTAT; /**< Flash Status Register, offset: 0x0 */ + __IO uint8_t FCNFG; /**< Flash Configuration Register, offset: 0x1 */ + __I uint8_t FSEC; /**< Flash Security Register, offset: 0x2 */ + __I uint8_t FOPT; /**< Flash Option Register, offset: 0x3 */ + __IO uint8_t FCCOB3; /**< Flash Common Command Object Registers, offset: 0x4 */ + __IO uint8_t FCCOB2; /**< Flash Common Command Object Registers, offset: 0x5 */ + __IO uint8_t FCCOB1; /**< Flash Common Command Object Registers, offset: 0x6 */ + __IO uint8_t FCCOB0; /**< Flash Common Command Object Registers, offset: 0x7 */ + __IO uint8_t FCCOB7; /**< Flash Common Command Object Registers, offset: 0x8 */ + __IO uint8_t FCCOB6; /**< Flash Common Command Object Registers, offset: 0x9 */ + __IO uint8_t FCCOB5; /**< Flash Common Command Object Registers, offset: 0xA */ + __IO uint8_t FCCOB4; /**< Flash Common Command Object Registers, offset: 0xB */ + __IO uint8_t FCCOBB; /**< Flash Common Command Object Registers, offset: 0xC */ + __IO uint8_t FCCOBA; /**< Flash Common Command Object Registers, offset: 0xD */ + __IO uint8_t FCCOB9; /**< Flash Common Command Object Registers, offset: 0xE */ + __IO uint8_t FCCOB8; /**< Flash Common Command Object Registers, offset: 0xF */ + __IO uint8_t FPROT3; /**< Program Flash Protection Registers, offset: 0x10 */ + __IO uint8_t FPROT2; /**< Program Flash Protection Registers, offset: 0x11 */ + __IO uint8_t FPROT1; /**< Program Flash Protection Registers, offset: 0x12 */ + __IO uint8_t FPROT0; /**< Program Flash Protection Registers, offset: 0x13 */ + uint8_t RESERVED_0[4]; + __I uint8_t XACCH3; /**< Execute-only Access Registers, offset: 0x18 */ + __I uint8_t XACCH2; /**< Execute-only Access Registers, offset: 0x19 */ + __I uint8_t XACCH1; /**< Execute-only Access Registers, offset: 0x1A */ + __I uint8_t XACCH0; /**< Execute-only Access Registers, offset: 0x1B */ + __I uint8_t XACCL3; /**< Execute-only Access Registers, offset: 0x1C */ + __I uint8_t XACCL2; /**< Execute-only Access Registers, offset: 0x1D */ + __I uint8_t XACCL1; /**< Execute-only Access Registers, offset: 0x1E */ + __I uint8_t XACCL0; /**< Execute-only Access Registers, offset: 0x1F */ + __I uint8_t SACCH3; /**< Supervisor-only Access Registers, offset: 0x20 */ + __I uint8_t SACCH2; /**< Supervisor-only Access Registers, offset: 0x21 */ + __I uint8_t SACCH1; /**< Supervisor-only Access Registers, offset: 0x22 */ + __I uint8_t SACCH0; /**< Supervisor-only Access Registers, offset: 0x23 */ + __I uint8_t SACCL3; /**< Supervisor-only Access Registers, offset: 0x24 */ + __I uint8_t SACCL2; /**< Supervisor-only Access Registers, offset: 0x25 */ + __I uint8_t SACCL1; /**< Supervisor-only Access Registers, offset: 0x26 */ + __I uint8_t SACCL0; /**< Supervisor-only Access Registers, offset: 0x27 */ + __I uint8_t FACSS; /**< Flash Access Segment Size Register, offset: 0x28 */ + uint8_t RESERVED_1[2]; + __I uint8_t FACSN; /**< Flash Access Segment Number Register, offset: 0x2B */ +} FTFA_Type; + +/* ---------------------------------------------------------------------------- + -- FTFA Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup FTFA_Register_Masks FTFA Register Masks + * @{ + */ + +/*! @name FSTAT - Flash Status Register */ +#define FTFA_FSTAT_MGSTAT0_MASK (0x1U) +#define FTFA_FSTAT_MGSTAT0_SHIFT (0U) +#define FTFA_FSTAT_MGSTAT0(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FSTAT_MGSTAT0_SHIFT)) & FTFA_FSTAT_MGSTAT0_MASK) +#define FTFA_FSTAT_FPVIOL_MASK (0x10U) +#define FTFA_FSTAT_FPVIOL_SHIFT (4U) +#define FTFA_FSTAT_FPVIOL(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FSTAT_FPVIOL_SHIFT)) & FTFA_FSTAT_FPVIOL_MASK) +#define FTFA_FSTAT_ACCERR_MASK (0x20U) +#define FTFA_FSTAT_ACCERR_SHIFT (5U) +#define FTFA_FSTAT_ACCERR(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FSTAT_ACCERR_SHIFT)) & FTFA_FSTAT_ACCERR_MASK) +#define FTFA_FSTAT_RDCOLERR_MASK (0x40U) +#define FTFA_FSTAT_RDCOLERR_SHIFT (6U) +#define FTFA_FSTAT_RDCOLERR(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FSTAT_RDCOLERR_SHIFT)) & FTFA_FSTAT_RDCOLERR_MASK) +#define FTFA_FSTAT_CCIF_MASK (0x80U) +#define FTFA_FSTAT_CCIF_SHIFT (7U) +#define FTFA_FSTAT_CCIF(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FSTAT_CCIF_SHIFT)) & FTFA_FSTAT_CCIF_MASK) + +/*! @name FCNFG - Flash Configuration Register */ +#define FTFA_FCNFG_ERSSUSP_MASK (0x10U) +#define FTFA_FCNFG_ERSSUSP_SHIFT (4U) +#define FTFA_FCNFG_ERSSUSP(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FCNFG_ERSSUSP_SHIFT)) & FTFA_FCNFG_ERSSUSP_MASK) +#define FTFA_FCNFG_ERSAREQ_MASK (0x20U) +#define FTFA_FCNFG_ERSAREQ_SHIFT (5U) +#define FTFA_FCNFG_ERSAREQ(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FCNFG_ERSAREQ_SHIFT)) & FTFA_FCNFG_ERSAREQ_MASK) +#define FTFA_FCNFG_RDCOLLIE_MASK (0x40U) +#define FTFA_FCNFG_RDCOLLIE_SHIFT (6U) +#define FTFA_FCNFG_RDCOLLIE(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FCNFG_RDCOLLIE_SHIFT)) & FTFA_FCNFG_RDCOLLIE_MASK) +#define FTFA_FCNFG_CCIE_MASK (0x80U) +#define FTFA_FCNFG_CCIE_SHIFT (7U) +#define FTFA_FCNFG_CCIE(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FCNFG_CCIE_SHIFT)) & FTFA_FCNFG_CCIE_MASK) + +/*! @name FSEC - Flash Security Register */ +#define FTFA_FSEC_SEC_MASK (0x3U) +#define FTFA_FSEC_SEC_SHIFT (0U) +#define FTFA_FSEC_SEC(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FSEC_SEC_SHIFT)) & FTFA_FSEC_SEC_MASK) +#define FTFA_FSEC_FSLACC_MASK (0xCU) +#define FTFA_FSEC_FSLACC_SHIFT (2U) +#define FTFA_FSEC_FSLACC(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FSEC_FSLACC_SHIFT)) & FTFA_FSEC_FSLACC_MASK) +#define FTFA_FSEC_MEEN_MASK (0x30U) +#define FTFA_FSEC_MEEN_SHIFT (4U) +#define FTFA_FSEC_MEEN(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FSEC_MEEN_SHIFT)) & FTFA_FSEC_MEEN_MASK) +#define FTFA_FSEC_KEYEN_MASK (0xC0U) +#define FTFA_FSEC_KEYEN_SHIFT (6U) +#define FTFA_FSEC_KEYEN(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FSEC_KEYEN_SHIFT)) & FTFA_FSEC_KEYEN_MASK) + +/*! @name FOPT - Flash Option Register */ +#define FTFA_FOPT_OPT_MASK (0xFFU) +#define FTFA_FOPT_OPT_SHIFT (0U) +#define FTFA_FOPT_OPT(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FOPT_OPT_SHIFT)) & FTFA_FOPT_OPT_MASK) + +/*! @name FCCOB3 - Flash Common Command Object Registers */ +#define FTFA_FCCOB3_CCOBn_MASK (0xFFU) +#define FTFA_FCCOB3_CCOBn_SHIFT (0U) +#define FTFA_FCCOB3_CCOBn(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FCCOB3_CCOBn_SHIFT)) & FTFA_FCCOB3_CCOBn_MASK) + +/*! @name FCCOB2 - Flash Common Command Object Registers */ +#define FTFA_FCCOB2_CCOBn_MASK (0xFFU) +#define FTFA_FCCOB2_CCOBn_SHIFT (0U) +#define FTFA_FCCOB2_CCOBn(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FCCOB2_CCOBn_SHIFT)) & FTFA_FCCOB2_CCOBn_MASK) + +/*! @name FCCOB1 - Flash Common Command Object Registers */ +#define FTFA_FCCOB1_CCOBn_MASK (0xFFU) +#define FTFA_FCCOB1_CCOBn_SHIFT (0U) +#define FTFA_FCCOB1_CCOBn(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FCCOB1_CCOBn_SHIFT)) & FTFA_FCCOB1_CCOBn_MASK) + +/*! @name FCCOB0 - Flash Common Command Object Registers */ +#define FTFA_FCCOB0_CCOBn_MASK (0xFFU) +#define FTFA_FCCOB0_CCOBn_SHIFT (0U) +#define FTFA_FCCOB0_CCOBn(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FCCOB0_CCOBn_SHIFT)) & FTFA_FCCOB0_CCOBn_MASK) + +/*! @name FCCOB7 - Flash Common Command Object Registers */ +#define FTFA_FCCOB7_CCOBn_MASK (0xFFU) +#define FTFA_FCCOB7_CCOBn_SHIFT (0U) +#define FTFA_FCCOB7_CCOBn(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FCCOB7_CCOBn_SHIFT)) & FTFA_FCCOB7_CCOBn_MASK) + +/*! @name FCCOB6 - Flash Common Command Object Registers */ +#define FTFA_FCCOB6_CCOBn_MASK (0xFFU) +#define FTFA_FCCOB6_CCOBn_SHIFT (0U) +#define FTFA_FCCOB6_CCOBn(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FCCOB6_CCOBn_SHIFT)) & FTFA_FCCOB6_CCOBn_MASK) + +/*! @name FCCOB5 - Flash Common Command Object Registers */ +#define FTFA_FCCOB5_CCOBn_MASK (0xFFU) +#define FTFA_FCCOB5_CCOBn_SHIFT (0U) +#define FTFA_FCCOB5_CCOBn(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FCCOB5_CCOBn_SHIFT)) & FTFA_FCCOB5_CCOBn_MASK) + +/*! @name FCCOB4 - Flash Common Command Object Registers */ +#define FTFA_FCCOB4_CCOBn_MASK (0xFFU) +#define FTFA_FCCOB4_CCOBn_SHIFT (0U) +#define FTFA_FCCOB4_CCOBn(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FCCOB4_CCOBn_SHIFT)) & FTFA_FCCOB4_CCOBn_MASK) + +/*! @name FCCOBB - Flash Common Command Object Registers */ +#define FTFA_FCCOBB_CCOBn_MASK (0xFFU) +#define FTFA_FCCOBB_CCOBn_SHIFT (0U) +#define FTFA_FCCOBB_CCOBn(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FCCOBB_CCOBn_SHIFT)) & FTFA_FCCOBB_CCOBn_MASK) + +/*! @name FCCOBA - Flash Common Command Object Registers */ +#define FTFA_FCCOBA_CCOBn_MASK (0xFFU) +#define FTFA_FCCOBA_CCOBn_SHIFT (0U) +#define FTFA_FCCOBA_CCOBn(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FCCOBA_CCOBn_SHIFT)) & FTFA_FCCOBA_CCOBn_MASK) + +/*! @name FCCOB9 - Flash Common Command Object Registers */ +#define FTFA_FCCOB9_CCOBn_MASK (0xFFU) +#define FTFA_FCCOB9_CCOBn_SHIFT (0U) +#define FTFA_FCCOB9_CCOBn(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FCCOB9_CCOBn_SHIFT)) & FTFA_FCCOB9_CCOBn_MASK) + +/*! @name FCCOB8 - Flash Common Command Object Registers */ +#define FTFA_FCCOB8_CCOBn_MASK (0xFFU) +#define FTFA_FCCOB8_CCOBn_SHIFT (0U) +#define FTFA_FCCOB8_CCOBn(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FCCOB8_CCOBn_SHIFT)) & FTFA_FCCOB8_CCOBn_MASK) + +/*! @name FPROT3 - Program Flash Protection Registers */ +#define FTFA_FPROT3_PROT_MASK (0xFFU) +#define FTFA_FPROT3_PROT_SHIFT (0U) +#define FTFA_FPROT3_PROT(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FPROT3_PROT_SHIFT)) & FTFA_FPROT3_PROT_MASK) + +/*! @name FPROT2 - Program Flash Protection Registers */ +#define FTFA_FPROT2_PROT_MASK (0xFFU) +#define FTFA_FPROT2_PROT_SHIFT (0U) +#define FTFA_FPROT2_PROT(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FPROT2_PROT_SHIFT)) & FTFA_FPROT2_PROT_MASK) + +/*! @name FPROT1 - Program Flash Protection Registers */ +#define FTFA_FPROT1_PROT_MASK (0xFFU) +#define FTFA_FPROT1_PROT_SHIFT (0U) +#define FTFA_FPROT1_PROT(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FPROT1_PROT_SHIFT)) & FTFA_FPROT1_PROT_MASK) + +/*! @name FPROT0 - Program Flash Protection Registers */ +#define FTFA_FPROT0_PROT_MASK (0xFFU) +#define FTFA_FPROT0_PROT_SHIFT (0U) +#define FTFA_FPROT0_PROT(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FPROT0_PROT_SHIFT)) & FTFA_FPROT0_PROT_MASK) + +/*! @name XACCH3 - Execute-only Access Registers */ +#define FTFA_XACCH3_XA_MASK (0xFFU) +#define FTFA_XACCH3_XA_SHIFT (0U) +#define FTFA_XACCH3_XA(x) (((uint8_t)(((uint8_t)(x)) << FTFA_XACCH3_XA_SHIFT)) & FTFA_XACCH3_XA_MASK) + +/*! @name XACCH2 - Execute-only Access Registers */ +#define FTFA_XACCH2_XA_MASK (0xFFU) +#define FTFA_XACCH2_XA_SHIFT (0U) +#define FTFA_XACCH2_XA(x) (((uint8_t)(((uint8_t)(x)) << FTFA_XACCH2_XA_SHIFT)) & FTFA_XACCH2_XA_MASK) + +/*! @name XACCH1 - Execute-only Access Registers */ +#define FTFA_XACCH1_XA_MASK (0xFFU) +#define FTFA_XACCH1_XA_SHIFT (0U) +#define FTFA_XACCH1_XA(x) (((uint8_t)(((uint8_t)(x)) << FTFA_XACCH1_XA_SHIFT)) & FTFA_XACCH1_XA_MASK) + +/*! @name XACCH0 - Execute-only Access Registers */ +#define FTFA_XACCH0_XA_MASK (0xFFU) +#define FTFA_XACCH0_XA_SHIFT (0U) +#define FTFA_XACCH0_XA(x) (((uint8_t)(((uint8_t)(x)) << FTFA_XACCH0_XA_SHIFT)) & FTFA_XACCH0_XA_MASK) + +/*! @name XACCL3 - Execute-only Access Registers */ +#define FTFA_XACCL3_XA_MASK (0xFFU) +#define FTFA_XACCL3_XA_SHIFT (0U) +#define FTFA_XACCL3_XA(x) (((uint8_t)(((uint8_t)(x)) << FTFA_XACCL3_XA_SHIFT)) & FTFA_XACCL3_XA_MASK) + +/*! @name XACCL2 - Execute-only Access Registers */ +#define FTFA_XACCL2_XA_MASK (0xFFU) +#define FTFA_XACCL2_XA_SHIFT (0U) +#define FTFA_XACCL2_XA(x) (((uint8_t)(((uint8_t)(x)) << FTFA_XACCL2_XA_SHIFT)) & FTFA_XACCL2_XA_MASK) + +/*! @name XACCL1 - Execute-only Access Registers */ +#define FTFA_XACCL1_XA_MASK (0xFFU) +#define FTFA_XACCL1_XA_SHIFT (0U) +#define FTFA_XACCL1_XA(x) (((uint8_t)(((uint8_t)(x)) << FTFA_XACCL1_XA_SHIFT)) & FTFA_XACCL1_XA_MASK) + +/*! @name XACCL0 - Execute-only Access Registers */ +#define FTFA_XACCL0_XA_MASK (0xFFU) +#define FTFA_XACCL0_XA_SHIFT (0U) +#define FTFA_XACCL0_XA(x) (((uint8_t)(((uint8_t)(x)) << FTFA_XACCL0_XA_SHIFT)) & FTFA_XACCL0_XA_MASK) + +/*! @name SACCH3 - Supervisor-only Access Registers */ +#define FTFA_SACCH3_SA_MASK (0xFFU) +#define FTFA_SACCH3_SA_SHIFT (0U) +#define FTFA_SACCH3_SA(x) (((uint8_t)(((uint8_t)(x)) << FTFA_SACCH3_SA_SHIFT)) & FTFA_SACCH3_SA_MASK) + +/*! @name SACCH2 - Supervisor-only Access Registers */ +#define FTFA_SACCH2_SA_MASK (0xFFU) +#define FTFA_SACCH2_SA_SHIFT (0U) +#define FTFA_SACCH2_SA(x) (((uint8_t)(((uint8_t)(x)) << FTFA_SACCH2_SA_SHIFT)) & FTFA_SACCH2_SA_MASK) + +/*! @name SACCH1 - Supervisor-only Access Registers */ +#define FTFA_SACCH1_SA_MASK (0xFFU) +#define FTFA_SACCH1_SA_SHIFT (0U) +#define FTFA_SACCH1_SA(x) (((uint8_t)(((uint8_t)(x)) << FTFA_SACCH1_SA_SHIFT)) & FTFA_SACCH1_SA_MASK) + +/*! @name SACCH0 - Supervisor-only Access Registers */ +#define FTFA_SACCH0_SA_MASK (0xFFU) +#define FTFA_SACCH0_SA_SHIFT (0U) +#define FTFA_SACCH0_SA(x) (((uint8_t)(((uint8_t)(x)) << FTFA_SACCH0_SA_SHIFT)) & FTFA_SACCH0_SA_MASK) + +/*! @name SACCL3 - Supervisor-only Access Registers */ +#define FTFA_SACCL3_SA_MASK (0xFFU) +#define FTFA_SACCL3_SA_SHIFT (0U) +#define FTFA_SACCL3_SA(x) (((uint8_t)(((uint8_t)(x)) << FTFA_SACCL3_SA_SHIFT)) & FTFA_SACCL3_SA_MASK) + +/*! @name SACCL2 - Supervisor-only Access Registers */ +#define FTFA_SACCL2_SA_MASK (0xFFU) +#define FTFA_SACCL2_SA_SHIFT (0U) +#define FTFA_SACCL2_SA(x) (((uint8_t)(((uint8_t)(x)) << FTFA_SACCL2_SA_SHIFT)) & FTFA_SACCL2_SA_MASK) + +/*! @name SACCL1 - Supervisor-only Access Registers */ +#define FTFA_SACCL1_SA_MASK (0xFFU) +#define FTFA_SACCL1_SA_SHIFT (0U) +#define FTFA_SACCL1_SA(x) (((uint8_t)(((uint8_t)(x)) << FTFA_SACCL1_SA_SHIFT)) & FTFA_SACCL1_SA_MASK) + +/*! @name SACCL0 - Supervisor-only Access Registers */ +#define FTFA_SACCL0_SA_MASK (0xFFU) +#define FTFA_SACCL0_SA_SHIFT (0U) +#define FTFA_SACCL0_SA(x) (((uint8_t)(((uint8_t)(x)) << FTFA_SACCL0_SA_SHIFT)) & FTFA_SACCL0_SA_MASK) + +/*! @name FACSS - Flash Access Segment Size Register */ +#define FTFA_FACSS_SGSIZE_MASK (0xFFU) +#define FTFA_FACSS_SGSIZE_SHIFT (0U) +#define FTFA_FACSS_SGSIZE(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FACSS_SGSIZE_SHIFT)) & FTFA_FACSS_SGSIZE_MASK) + +/*! @name FACSN - Flash Access Segment Number Register */ +#define FTFA_FACSN_NUMSG_MASK (0xFFU) +#define FTFA_FACSN_NUMSG_SHIFT (0U) +#define FTFA_FACSN_NUMSG(x) (((uint8_t)(((uint8_t)(x)) << FTFA_FACSN_NUMSG_SHIFT)) & FTFA_FACSN_NUMSG_MASK) + + +/*! + * @} + */ /* end of group FTFA_Register_Masks */ + + +/* FTFA - Peripheral instance base addresses */ +/** Peripheral FTFA base address */ +#define FTFA_BASE (0x40020000u) +/** Peripheral FTFA base pointer */ +#define FTFA ((FTFA_Type *)FTFA_BASE) +/** Array initializer of FTFA peripheral base addresses */ +#define FTFA_BASE_ADDRS { FTFA_BASE } +/** Array initializer of FTFA peripheral base pointers */ +#define FTFA_BASE_PTRS { FTFA } +/** Interrupt vectors for the FTFA peripheral type */ +#define FTFA_COMMAND_COMPLETE_IRQS { FTFA_IRQn } +#define FTFA_READ_COLLISION_IRQS { FTFA_IRQn } + +/*! + * @} + */ /* end of group FTFA_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- GPIO Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup GPIO_Peripheral_Access_Layer GPIO Peripheral Access Layer + * @{ + */ + +/** GPIO - Register Layout Typedef */ +typedef struct { + __IO uint32_t PDOR; /**< Port Data Output Register, offset: 0x0 */ + __O uint32_t PSOR; /**< Port Set Output Register, offset: 0x4 */ + __O uint32_t PCOR; /**< Port Clear Output Register, offset: 0x8 */ + __O uint32_t PTOR; /**< Port Toggle Output Register, offset: 0xC */ + __I uint32_t PDIR; /**< Port Data Input Register, offset: 0x10 */ + __IO uint32_t PDDR; /**< Port Data Direction Register, offset: 0x14 */ +} GPIO_Type; + +/* ---------------------------------------------------------------------------- + -- GPIO Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup GPIO_Register_Masks GPIO Register Masks + * @{ + */ + +/*! @name PDOR - Port Data Output Register */ +#define GPIO_PDOR_PDO_MASK (0xFFFFFFFFU) +#define GPIO_PDOR_PDO_SHIFT (0U) +#define GPIO_PDOR_PDO(x) (((uint32_t)(((uint32_t)(x)) << GPIO_PDOR_PDO_SHIFT)) & GPIO_PDOR_PDO_MASK) + +/*! @name PSOR - Port Set Output Register */ +#define GPIO_PSOR_PTSO_MASK (0xFFFFFFFFU) +#define GPIO_PSOR_PTSO_SHIFT (0U) +#define GPIO_PSOR_PTSO(x) (((uint32_t)(((uint32_t)(x)) << GPIO_PSOR_PTSO_SHIFT)) & GPIO_PSOR_PTSO_MASK) + +/*! @name PCOR - Port Clear Output Register */ +#define GPIO_PCOR_PTCO_MASK (0xFFFFFFFFU) +#define GPIO_PCOR_PTCO_SHIFT (0U) +#define GPIO_PCOR_PTCO(x) (((uint32_t)(((uint32_t)(x)) << GPIO_PCOR_PTCO_SHIFT)) & GPIO_PCOR_PTCO_MASK) + +/*! @name PTOR - Port Toggle Output Register */ +#define GPIO_PTOR_PTTO_MASK (0xFFFFFFFFU) +#define GPIO_PTOR_PTTO_SHIFT (0U) +#define GPIO_PTOR_PTTO(x) (((uint32_t)(((uint32_t)(x)) << GPIO_PTOR_PTTO_SHIFT)) & GPIO_PTOR_PTTO_MASK) + +/*! @name PDIR - Port Data Input Register */ +#define GPIO_PDIR_PDI_MASK (0xFFFFFFFFU) +#define GPIO_PDIR_PDI_SHIFT (0U) +#define GPIO_PDIR_PDI(x) (((uint32_t)(((uint32_t)(x)) << GPIO_PDIR_PDI_SHIFT)) & GPIO_PDIR_PDI_MASK) + +/*! @name PDDR - Port Data Direction Register */ +#define GPIO_PDDR_PDD_MASK (0xFFFFFFFFU) +#define GPIO_PDDR_PDD_SHIFT (0U) +#define GPIO_PDDR_PDD(x) (((uint32_t)(((uint32_t)(x)) << GPIO_PDDR_PDD_SHIFT)) & GPIO_PDDR_PDD_MASK) + + +/*! + * @} + */ /* end of group GPIO_Register_Masks */ + + +/* GPIO - Peripheral instance base addresses */ +/** Peripheral GPIOA base address */ +#define GPIOA_BASE (0x400FF000u) +/** Peripheral GPIOA base pointer */ +#define GPIOA ((GPIO_Type *)GPIOA_BASE) +/** Peripheral GPIOB base address */ +#define GPIOB_BASE (0x400FF040u) +/** Peripheral GPIOB base pointer */ +#define GPIOB ((GPIO_Type *)GPIOB_BASE) +/** Peripheral GPIOC base address */ +#define GPIOC_BASE (0x400FF080u) +/** Peripheral GPIOC base pointer */ +#define GPIOC ((GPIO_Type *)GPIOC_BASE) +/** Peripheral GPIOD base address */ +#define GPIOD_BASE (0x400FF0C0u) +/** Peripheral GPIOD base pointer */ +#define GPIOD ((GPIO_Type *)GPIOD_BASE) +/** Peripheral GPIOE base address */ +#define GPIOE_BASE (0x400FF100u) +/** Peripheral GPIOE base pointer */ +#define GPIOE ((GPIO_Type *)GPIOE_BASE) +/** Array initializer of GPIO peripheral base addresses */ +#define GPIO_BASE_ADDRS { GPIOA_BASE, GPIOB_BASE, GPIOC_BASE, GPIOD_BASE, GPIOE_BASE } +/** Array initializer of GPIO peripheral base pointers */ +#define GPIO_BASE_PTRS { GPIOA, GPIOB, GPIOC, GPIOD, GPIOE } + +/*! + * @} + */ /* end of group GPIO_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- I2C Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup I2C_Peripheral_Access_Layer I2C Peripheral Access Layer + * @{ + */ + +/** I2C - Register Layout Typedef */ +typedef struct { + __IO uint8_t A1; /**< I2C Address Register 1, offset: 0x0 */ + __IO uint8_t F; /**< I2C Frequency Divider register, offset: 0x1 */ + __IO uint8_t C1; /**< I2C Control Register 1, offset: 0x2 */ + __IO uint8_t S; /**< I2C Status register, offset: 0x3 */ + __IO uint8_t D; /**< I2C Data I/O register, offset: 0x4 */ + __IO uint8_t C2; /**< I2C Control Register 2, offset: 0x5 */ + __IO uint8_t FLT; /**< I2C Programmable Input Glitch Filter Register, offset: 0x6 */ + __IO uint8_t RA; /**< I2C Range Address register, offset: 0x7 */ + __IO uint8_t SMB; /**< I2C SMBus Control and Status register, offset: 0x8 */ + __IO uint8_t A2; /**< I2C Address Register 2, offset: 0x9 */ + __IO uint8_t SLTH; /**< I2C SCL Low Timeout Register High, offset: 0xA */ + __IO uint8_t SLTL; /**< I2C SCL Low Timeout Register Low, offset: 0xB */ + __IO uint8_t S2; /**< I2C Status register 2, offset: 0xC */ +} I2C_Type; + +/* ---------------------------------------------------------------------------- + -- I2C Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup I2C_Register_Masks I2C Register Masks + * @{ + */ + +/*! @name A1 - I2C Address Register 1 */ +#define I2C_A1_AD_MASK (0xFEU) +#define I2C_A1_AD_SHIFT (1U) +#define I2C_A1_AD(x) (((uint8_t)(((uint8_t)(x)) << I2C_A1_AD_SHIFT)) & I2C_A1_AD_MASK) + +/*! @name F - I2C Frequency Divider register */ +#define I2C_F_ICR_MASK (0x3FU) +#define I2C_F_ICR_SHIFT (0U) +#define I2C_F_ICR(x) (((uint8_t)(((uint8_t)(x)) << I2C_F_ICR_SHIFT)) & I2C_F_ICR_MASK) +#define I2C_F_MULT_MASK (0xC0U) +#define I2C_F_MULT_SHIFT (6U) +#define I2C_F_MULT(x) (((uint8_t)(((uint8_t)(x)) << I2C_F_MULT_SHIFT)) & I2C_F_MULT_MASK) + +/*! @name C1 - I2C Control Register 1 */ +#define I2C_C1_DMAEN_MASK (0x1U) +#define I2C_C1_DMAEN_SHIFT (0U) +#define I2C_C1_DMAEN(x) (((uint8_t)(((uint8_t)(x)) << I2C_C1_DMAEN_SHIFT)) & I2C_C1_DMAEN_MASK) +#define I2C_C1_WUEN_MASK (0x2U) +#define I2C_C1_WUEN_SHIFT (1U) +#define I2C_C1_WUEN(x) (((uint8_t)(((uint8_t)(x)) << I2C_C1_WUEN_SHIFT)) & I2C_C1_WUEN_MASK) +#define I2C_C1_RSTA_MASK (0x4U) +#define I2C_C1_RSTA_SHIFT (2U) +#define I2C_C1_RSTA(x) (((uint8_t)(((uint8_t)(x)) << I2C_C1_RSTA_SHIFT)) & I2C_C1_RSTA_MASK) +#define I2C_C1_TXAK_MASK (0x8U) +#define I2C_C1_TXAK_SHIFT (3U) +#define I2C_C1_TXAK(x) (((uint8_t)(((uint8_t)(x)) << I2C_C1_TXAK_SHIFT)) & I2C_C1_TXAK_MASK) +#define I2C_C1_TX_MASK (0x10U) +#define I2C_C1_TX_SHIFT (4U) +#define I2C_C1_TX(x) (((uint8_t)(((uint8_t)(x)) << I2C_C1_TX_SHIFT)) & I2C_C1_TX_MASK) +#define I2C_C1_MST_MASK (0x20U) +#define I2C_C1_MST_SHIFT (5U) +#define I2C_C1_MST(x) (((uint8_t)(((uint8_t)(x)) << I2C_C1_MST_SHIFT)) & I2C_C1_MST_MASK) +#define I2C_C1_IICIE_MASK (0x40U) +#define I2C_C1_IICIE_SHIFT (6U) +#define I2C_C1_IICIE(x) (((uint8_t)(((uint8_t)(x)) << I2C_C1_IICIE_SHIFT)) & I2C_C1_IICIE_MASK) +#define I2C_C1_IICEN_MASK (0x80U) +#define I2C_C1_IICEN_SHIFT (7U) +#define I2C_C1_IICEN(x) (((uint8_t)(((uint8_t)(x)) << I2C_C1_IICEN_SHIFT)) & I2C_C1_IICEN_MASK) + +/*! @name S - I2C Status register */ +#define I2C_S_RXAK_MASK (0x1U) +#define I2C_S_RXAK_SHIFT (0U) +#define I2C_S_RXAK(x) (((uint8_t)(((uint8_t)(x)) << I2C_S_RXAK_SHIFT)) & I2C_S_RXAK_MASK) +#define I2C_S_IICIF_MASK (0x2U) +#define I2C_S_IICIF_SHIFT (1U) +#define I2C_S_IICIF(x) (((uint8_t)(((uint8_t)(x)) << I2C_S_IICIF_SHIFT)) & I2C_S_IICIF_MASK) +#define I2C_S_SRW_MASK (0x4U) +#define I2C_S_SRW_SHIFT (2U) +#define I2C_S_SRW(x) (((uint8_t)(((uint8_t)(x)) << I2C_S_SRW_SHIFT)) & I2C_S_SRW_MASK) +#define I2C_S_RAM_MASK (0x8U) +#define I2C_S_RAM_SHIFT (3U) +#define I2C_S_RAM(x) (((uint8_t)(((uint8_t)(x)) << I2C_S_RAM_SHIFT)) & I2C_S_RAM_MASK) +#define I2C_S_ARBL_MASK (0x10U) +#define I2C_S_ARBL_SHIFT (4U) +#define I2C_S_ARBL(x) (((uint8_t)(((uint8_t)(x)) << I2C_S_ARBL_SHIFT)) & I2C_S_ARBL_MASK) +#define I2C_S_BUSY_MASK (0x20U) +#define I2C_S_BUSY_SHIFT (5U) +#define I2C_S_BUSY(x) (((uint8_t)(((uint8_t)(x)) << I2C_S_BUSY_SHIFT)) & I2C_S_BUSY_MASK) +#define I2C_S_IAAS_MASK (0x40U) +#define I2C_S_IAAS_SHIFT (6U) +#define I2C_S_IAAS(x) (((uint8_t)(((uint8_t)(x)) << I2C_S_IAAS_SHIFT)) & I2C_S_IAAS_MASK) +#define I2C_S_TCF_MASK (0x80U) +#define I2C_S_TCF_SHIFT (7U) +#define I2C_S_TCF(x) (((uint8_t)(((uint8_t)(x)) << I2C_S_TCF_SHIFT)) & I2C_S_TCF_MASK) + +/*! @name D - I2C Data I/O register */ +#define I2C_D_DATA_MASK (0xFFU) +#define I2C_D_DATA_SHIFT (0U) +#define I2C_D_DATA(x) (((uint8_t)(((uint8_t)(x)) << I2C_D_DATA_SHIFT)) & I2C_D_DATA_MASK) + +/*! @name C2 - I2C Control Register 2 */ +#define I2C_C2_AD_MASK (0x7U) +#define I2C_C2_AD_SHIFT (0U) +#define I2C_C2_AD(x) (((uint8_t)(((uint8_t)(x)) << I2C_C2_AD_SHIFT)) & I2C_C2_AD_MASK) +#define I2C_C2_RMEN_MASK (0x8U) +#define I2C_C2_RMEN_SHIFT (3U) +#define I2C_C2_RMEN(x) (((uint8_t)(((uint8_t)(x)) << I2C_C2_RMEN_SHIFT)) & I2C_C2_RMEN_MASK) +#define I2C_C2_SBRC_MASK (0x10U) +#define I2C_C2_SBRC_SHIFT (4U) +#define I2C_C2_SBRC(x) (((uint8_t)(((uint8_t)(x)) << I2C_C2_SBRC_SHIFT)) & I2C_C2_SBRC_MASK) +#define I2C_C2_HDRS_MASK (0x20U) +#define I2C_C2_HDRS_SHIFT (5U) +#define I2C_C2_HDRS(x) (((uint8_t)(((uint8_t)(x)) << I2C_C2_HDRS_SHIFT)) & I2C_C2_HDRS_MASK) +#define I2C_C2_ADEXT_MASK (0x40U) +#define I2C_C2_ADEXT_SHIFT (6U) +#define I2C_C2_ADEXT(x) (((uint8_t)(((uint8_t)(x)) << I2C_C2_ADEXT_SHIFT)) & I2C_C2_ADEXT_MASK) +#define I2C_C2_GCAEN_MASK (0x80U) +#define I2C_C2_GCAEN_SHIFT (7U) +#define I2C_C2_GCAEN(x) (((uint8_t)(((uint8_t)(x)) << I2C_C2_GCAEN_SHIFT)) & I2C_C2_GCAEN_MASK) + +/*! @name FLT - I2C Programmable Input Glitch Filter Register */ +#define I2C_FLT_FLT_MASK (0xFU) +#define I2C_FLT_FLT_SHIFT (0U) +#define I2C_FLT_FLT(x) (((uint8_t)(((uint8_t)(x)) << I2C_FLT_FLT_SHIFT)) & I2C_FLT_FLT_MASK) +#define I2C_FLT_STARTF_MASK (0x10U) +#define I2C_FLT_STARTF_SHIFT (4U) +#define I2C_FLT_STARTF(x) (((uint8_t)(((uint8_t)(x)) << I2C_FLT_STARTF_SHIFT)) & I2C_FLT_STARTF_MASK) +#define I2C_FLT_SSIE_MASK (0x20U) +#define I2C_FLT_SSIE_SHIFT (5U) +#define I2C_FLT_SSIE(x) (((uint8_t)(((uint8_t)(x)) << I2C_FLT_SSIE_SHIFT)) & I2C_FLT_SSIE_MASK) +#define I2C_FLT_STOPF_MASK (0x40U) +#define I2C_FLT_STOPF_SHIFT (6U) +#define I2C_FLT_STOPF(x) (((uint8_t)(((uint8_t)(x)) << I2C_FLT_STOPF_SHIFT)) & I2C_FLT_STOPF_MASK) +#define I2C_FLT_SHEN_MASK (0x80U) +#define I2C_FLT_SHEN_SHIFT (7U) +#define I2C_FLT_SHEN(x) (((uint8_t)(((uint8_t)(x)) << I2C_FLT_SHEN_SHIFT)) & I2C_FLT_SHEN_MASK) + +/*! @name RA - I2C Range Address register */ +#define I2C_RA_RAD_MASK (0xFEU) +#define I2C_RA_RAD_SHIFT (1U) +#define I2C_RA_RAD(x) (((uint8_t)(((uint8_t)(x)) << I2C_RA_RAD_SHIFT)) & I2C_RA_RAD_MASK) + +/*! @name SMB - I2C SMBus Control and Status register */ +#define I2C_SMB_SHTF2IE_MASK (0x1U) +#define I2C_SMB_SHTF2IE_SHIFT (0U) +#define I2C_SMB_SHTF2IE(x) (((uint8_t)(((uint8_t)(x)) << I2C_SMB_SHTF2IE_SHIFT)) & I2C_SMB_SHTF2IE_MASK) +#define I2C_SMB_SHTF2_MASK (0x2U) +#define I2C_SMB_SHTF2_SHIFT (1U) +#define I2C_SMB_SHTF2(x) (((uint8_t)(((uint8_t)(x)) << I2C_SMB_SHTF2_SHIFT)) & I2C_SMB_SHTF2_MASK) +#define I2C_SMB_SHTF1_MASK (0x4U) +#define I2C_SMB_SHTF1_SHIFT (2U) +#define I2C_SMB_SHTF1(x) (((uint8_t)(((uint8_t)(x)) << I2C_SMB_SHTF1_SHIFT)) & I2C_SMB_SHTF1_MASK) +#define I2C_SMB_SLTF_MASK (0x8U) +#define I2C_SMB_SLTF_SHIFT (3U) +#define I2C_SMB_SLTF(x) (((uint8_t)(((uint8_t)(x)) << I2C_SMB_SLTF_SHIFT)) & I2C_SMB_SLTF_MASK) +#define I2C_SMB_TCKSEL_MASK (0x10U) +#define I2C_SMB_TCKSEL_SHIFT (4U) +#define I2C_SMB_TCKSEL(x) (((uint8_t)(((uint8_t)(x)) << I2C_SMB_TCKSEL_SHIFT)) & I2C_SMB_TCKSEL_MASK) +#define I2C_SMB_SIICAEN_MASK (0x20U) +#define I2C_SMB_SIICAEN_SHIFT (5U) +#define I2C_SMB_SIICAEN(x) (((uint8_t)(((uint8_t)(x)) << I2C_SMB_SIICAEN_SHIFT)) & I2C_SMB_SIICAEN_MASK) +#define I2C_SMB_ALERTEN_MASK (0x40U) +#define I2C_SMB_ALERTEN_SHIFT (6U) +#define I2C_SMB_ALERTEN(x) (((uint8_t)(((uint8_t)(x)) << I2C_SMB_ALERTEN_SHIFT)) & I2C_SMB_ALERTEN_MASK) +#define I2C_SMB_FACK_MASK (0x80U) +#define I2C_SMB_FACK_SHIFT (7U) +#define I2C_SMB_FACK(x) (((uint8_t)(((uint8_t)(x)) << I2C_SMB_FACK_SHIFT)) & I2C_SMB_FACK_MASK) + +/*! @name A2 - I2C Address Register 2 */ +#define I2C_A2_SAD_MASK (0xFEU) +#define I2C_A2_SAD_SHIFT (1U) +#define I2C_A2_SAD(x) (((uint8_t)(((uint8_t)(x)) << I2C_A2_SAD_SHIFT)) & I2C_A2_SAD_MASK) + +/*! @name SLTH - I2C SCL Low Timeout Register High */ +#define I2C_SLTH_SSLT_MASK (0xFFU) +#define I2C_SLTH_SSLT_SHIFT (0U) +#define I2C_SLTH_SSLT(x) (((uint8_t)(((uint8_t)(x)) << I2C_SLTH_SSLT_SHIFT)) & I2C_SLTH_SSLT_MASK) + +/*! @name SLTL - I2C SCL Low Timeout Register Low */ +#define I2C_SLTL_SSLT_MASK (0xFFU) +#define I2C_SLTL_SSLT_SHIFT (0U) +#define I2C_SLTL_SSLT(x) (((uint8_t)(((uint8_t)(x)) << I2C_SLTL_SSLT_SHIFT)) & I2C_SLTL_SSLT_MASK) + +/*! @name S2 - I2C Status register 2 */ +#define I2C_S2_EMPTY_MASK (0x1U) +#define I2C_S2_EMPTY_SHIFT (0U) +#define I2C_S2_EMPTY(x) (((uint8_t)(((uint8_t)(x)) << I2C_S2_EMPTY_SHIFT)) & I2C_S2_EMPTY_MASK) +#define I2C_S2_ERROR_MASK (0x2U) +#define I2C_S2_ERROR_SHIFT (1U) +#define I2C_S2_ERROR(x) (((uint8_t)(((uint8_t)(x)) << I2C_S2_ERROR_SHIFT)) & I2C_S2_ERROR_MASK) +#define I2C_S2_DFEN_MASK (0x4U) +#define I2C_S2_DFEN_SHIFT (2U) +#define I2C_S2_DFEN(x) (((uint8_t)(((uint8_t)(x)) << I2C_S2_DFEN_SHIFT)) & I2C_S2_DFEN_MASK) + + +/*! + * @} + */ /* end of group I2C_Register_Masks */ + + +/* I2C - Peripheral instance base addresses */ +/** Peripheral I2C0 base address */ +#define I2C0_BASE (0x40066000u) +/** Peripheral I2C0 base pointer */ +#define I2C0 ((I2C_Type *)I2C0_BASE) +/** Peripheral I2C1 base address */ +#define I2C1_BASE (0x40067000u) +/** Peripheral I2C1 base pointer */ +#define I2C1 ((I2C_Type *)I2C1_BASE) +/** Array initializer of I2C peripheral base addresses */ +#define I2C_BASE_ADDRS { I2C0_BASE, I2C1_BASE } +/** Array initializer of I2C peripheral base pointers */ +#define I2C_BASE_PTRS { I2C0, I2C1 } +/** Interrupt vectors for the I2C peripheral type */ +#define I2C_IRQS { I2C0_IRQn, I2C1_IRQn } + +/*! + * @} + */ /* end of group I2C_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- INTMUX Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup INTMUX_Peripheral_Access_Layer INTMUX Peripheral Access Layer + * @{ + */ + +/** INTMUX - Register Layout Typedef */ +typedef struct { + struct { /* offset: 0x0, array step: 0x40 */ + __IO uint32_t CHn_CSR; /**< Channel n Control Status Register, array offset: 0x0, array step: 0x40 */ + __I uint32_t CHn_VEC; /**< Channel n Vector Number Register, array offset: 0x4, array step: 0x40 */ + uint8_t RESERVED_0[8]; + __IO uint32_t CHn_IER_31_0; /**< Channel n Interrupt Enable Register, array offset: 0x10, array step: 0x40 */ + uint8_t RESERVED_1[12]; + __I uint32_t CHn_IPR_31_0; /**< Channel n Interrupt Pending Register, array offset: 0x20, array step: 0x40 */ + uint8_t RESERVED_2[28]; + } CHANNEL[4]; +} INTMUX_Type; + +/* ---------------------------------------------------------------------------- + -- INTMUX Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup INTMUX_Register_Masks INTMUX Register Masks + * @{ + */ + +/*! @name CHn_CSR - Channel n Control Status Register */ +#define INTMUX_CHn_CSR_RST_MASK (0x1U) +#define INTMUX_CHn_CSR_RST_SHIFT (0U) +#define INTMUX_CHn_CSR_RST(x) (((uint32_t)(((uint32_t)(x)) << INTMUX_CHn_CSR_RST_SHIFT)) & INTMUX_CHn_CSR_RST_MASK) +#define INTMUX_CHn_CSR_AND_MASK (0x2U) +#define INTMUX_CHn_CSR_AND_SHIFT (1U) +#define INTMUX_CHn_CSR_AND(x) (((uint32_t)(((uint32_t)(x)) << INTMUX_CHn_CSR_AND_SHIFT)) & INTMUX_CHn_CSR_AND_MASK) +#define INTMUX_CHn_CSR_IRQN_MASK (0x30U) +#define INTMUX_CHn_CSR_IRQN_SHIFT (4U) +#define INTMUX_CHn_CSR_IRQN(x) (((uint32_t)(((uint32_t)(x)) << INTMUX_CHn_CSR_IRQN_SHIFT)) & INTMUX_CHn_CSR_IRQN_MASK) +#define INTMUX_CHn_CSR_CHIN_MASK (0xF00U) +#define INTMUX_CHn_CSR_CHIN_SHIFT (8U) +#define INTMUX_CHn_CSR_CHIN(x) (((uint32_t)(((uint32_t)(x)) << INTMUX_CHn_CSR_CHIN_SHIFT)) & INTMUX_CHn_CSR_CHIN_MASK) +#define INTMUX_CHn_CSR_IRQP_MASK (0x80000000U) +#define INTMUX_CHn_CSR_IRQP_SHIFT (31U) +#define INTMUX_CHn_CSR_IRQP(x) (((uint32_t)(((uint32_t)(x)) << INTMUX_CHn_CSR_IRQP_SHIFT)) & INTMUX_CHn_CSR_IRQP_MASK) + +/* The count of INTMUX_CHn_CSR */ +#define INTMUX_CHn_CSR_COUNT (4U) + +/*! @name CHn_VEC - Channel n Vector Number Register */ +#define INTMUX_CHn_VEC_VECN_MASK (0x3FFCU) +#define INTMUX_CHn_VEC_VECN_SHIFT (2U) +#define INTMUX_CHn_VEC_VECN(x) (((uint32_t)(((uint32_t)(x)) << INTMUX_CHn_VEC_VECN_SHIFT)) & INTMUX_CHn_VEC_VECN_MASK) + +/* The count of INTMUX_CHn_VEC */ +#define INTMUX_CHn_VEC_COUNT (4U) + +/*! @name CHn_IER_31_0 - Channel n Interrupt Enable Register */ +#define INTMUX_CHn_IER_31_0_INTE_MASK (0xFFFFFFFFU) +#define INTMUX_CHn_IER_31_0_INTE_SHIFT (0U) +#define INTMUX_CHn_IER_31_0_INTE(x) (((uint32_t)(((uint32_t)(x)) << INTMUX_CHn_IER_31_0_INTE_SHIFT)) & INTMUX_CHn_IER_31_0_INTE_MASK) + +/* The count of INTMUX_CHn_IER_31_0 */ +#define INTMUX_CHn_IER_31_0_COUNT (4U) + +/*! @name CHn_IPR_31_0 - Channel n Interrupt Pending Register */ +#define INTMUX_CHn_IPR_31_0_INTP_MASK (0xFFFFFFFFU) +#define INTMUX_CHn_IPR_31_0_INTP_SHIFT (0U) +#define INTMUX_CHn_IPR_31_0_INTP(x) (((uint32_t)(((uint32_t)(x)) << INTMUX_CHn_IPR_31_0_INTP_SHIFT)) & INTMUX_CHn_IPR_31_0_INTP_MASK) + +/* The count of INTMUX_CHn_IPR_31_0 */ +#define INTMUX_CHn_IPR_31_0_COUNT (4U) + + +/*! + * @} + */ /* end of group INTMUX_Register_Masks */ + + +/* INTMUX - Peripheral instance base addresses */ +/** Peripheral INTMUX0 base address */ +#define INTMUX0_BASE (0x40024000u) +/** Peripheral INTMUX0 base pointer */ +#define INTMUX0 ((INTMUX_Type *)INTMUX0_BASE) +/** Array initializer of INTMUX peripheral base addresses */ +#define INTMUX_BASE_ADDRS { INTMUX0_BASE } +/** Array initializer of INTMUX peripheral base pointers */ +#define INTMUX_BASE_PTRS { INTMUX0 } +/** Interrupt vectors for the INTMUX peripheral type */ +#define INTMUX_IRQS { INTMUX0_0_IRQn, INTMUX0_1_IRQn, INTMUX0_2_IRQn, INTMUX0_3_IRQn } + +/*! + * @} + */ /* end of group INTMUX_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- LLWU Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup LLWU_Peripheral_Access_Layer LLWU Peripheral Access Layer + * @{ + */ + +/** LLWU - Register Layout Typedef */ +typedef struct { + __IO uint8_t PE1; /**< LLWU Pin Enable 1 register, offset: 0x0 */ + __IO uint8_t PE2; /**< LLWU Pin Enable 2 register, offset: 0x1 */ + __IO uint8_t PE3; /**< LLWU Pin Enable 3 register, offset: 0x2 */ + __IO uint8_t PE4; /**< LLWU Pin Enable 4 register, offset: 0x3 */ + __IO uint8_t PE5; /**< LLWU Pin Enable 5 register, offset: 0x4 */ + __IO uint8_t PE6; /**< LLWU Pin Enable 6 register, offset: 0x5 */ + __IO uint8_t PE7; /**< LLWU Pin Enable 7 register, offset: 0x6 */ + __IO uint8_t PE8; /**< LLWU Pin Enable 8 register, offset: 0x7 */ + __IO uint8_t ME; /**< LLWU Module Enable register, offset: 0x8 */ + __IO uint8_t PF1; /**< LLWU Pin Flag 1 register, offset: 0x9 */ + __IO uint8_t PF2; /**< LLWU Pin Flag 2 register, offset: 0xA */ + __IO uint8_t PF3; /**< LLWU Pin Flag 3 register, offset: 0xB */ + __IO uint8_t PF4; /**< LLWU Pin Flag 4 register, offset: 0xC */ + __I uint8_t MF5; /**< LLWU Module Flag 5 register, offset: 0xD */ + __IO uint8_t FILT1; /**< LLWU Pin Filter 1 register, offset: 0xE */ + __IO uint8_t FILT2; /**< LLWU Pin Filter 2 register, offset: 0xF */ + __IO uint8_t FILT3; /**< LLWU Pin Filter 3 register, offset: 0x10 */ + __IO uint8_t FILT4; /**< LLWU Pin Filter 4 register, offset: 0x11 */ +} LLWU_Type; + +/* ---------------------------------------------------------------------------- + -- LLWU Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup LLWU_Register_Masks LLWU Register Masks + * @{ + */ + +/*! @name PE1 - LLWU Pin Enable 1 register */ +#define LLWU_PE1_WUPE0_MASK (0x3U) +#define LLWU_PE1_WUPE0_SHIFT (0U) +#define LLWU_PE1_WUPE0(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE1_WUPE0_SHIFT)) & LLWU_PE1_WUPE0_MASK) +#define LLWU_PE1_WUPE1_MASK (0xCU) +#define LLWU_PE1_WUPE1_SHIFT (2U) +#define LLWU_PE1_WUPE1(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE1_WUPE1_SHIFT)) & LLWU_PE1_WUPE1_MASK) +#define LLWU_PE1_WUPE2_MASK (0x30U) +#define LLWU_PE1_WUPE2_SHIFT (4U) +#define LLWU_PE1_WUPE2(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE1_WUPE2_SHIFT)) & LLWU_PE1_WUPE2_MASK) +#define LLWU_PE1_WUPE3_MASK (0xC0U) +#define LLWU_PE1_WUPE3_SHIFT (6U) +#define LLWU_PE1_WUPE3(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE1_WUPE3_SHIFT)) & LLWU_PE1_WUPE3_MASK) + +/*! @name PE2 - LLWU Pin Enable 2 register */ +#define LLWU_PE2_WUPE4_MASK (0x3U) +#define LLWU_PE2_WUPE4_SHIFT (0U) +#define LLWU_PE2_WUPE4(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE2_WUPE4_SHIFT)) & LLWU_PE2_WUPE4_MASK) +#define LLWU_PE2_WUPE5_MASK (0xCU) +#define LLWU_PE2_WUPE5_SHIFT (2U) +#define LLWU_PE2_WUPE5(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE2_WUPE5_SHIFT)) & LLWU_PE2_WUPE5_MASK) +#define LLWU_PE2_WUPE6_MASK (0x30U) +#define LLWU_PE2_WUPE6_SHIFT (4U) +#define LLWU_PE2_WUPE6(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE2_WUPE6_SHIFT)) & LLWU_PE2_WUPE6_MASK) +#define LLWU_PE2_WUPE7_MASK (0xC0U) +#define LLWU_PE2_WUPE7_SHIFT (6U) +#define LLWU_PE2_WUPE7(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE2_WUPE7_SHIFT)) & LLWU_PE2_WUPE7_MASK) + +/*! @name PE3 - LLWU Pin Enable 3 register */ +#define LLWU_PE3_WUPE8_MASK (0x3U) +#define LLWU_PE3_WUPE8_SHIFT (0U) +#define LLWU_PE3_WUPE8(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE3_WUPE8_SHIFT)) & LLWU_PE3_WUPE8_MASK) +#define LLWU_PE3_WUPE9_MASK (0xCU) +#define LLWU_PE3_WUPE9_SHIFT (2U) +#define LLWU_PE3_WUPE9(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE3_WUPE9_SHIFT)) & LLWU_PE3_WUPE9_MASK) +#define LLWU_PE3_WUPE10_MASK (0x30U) +#define LLWU_PE3_WUPE10_SHIFT (4U) +#define LLWU_PE3_WUPE10(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE3_WUPE10_SHIFT)) & LLWU_PE3_WUPE10_MASK) +#define LLWU_PE3_WUPE11_MASK (0xC0U) +#define LLWU_PE3_WUPE11_SHIFT (6U) +#define LLWU_PE3_WUPE11(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE3_WUPE11_SHIFT)) & LLWU_PE3_WUPE11_MASK) + +/*! @name PE4 - LLWU Pin Enable 4 register */ +#define LLWU_PE4_WUPE12_MASK (0x3U) +#define LLWU_PE4_WUPE12_SHIFT (0U) +#define LLWU_PE4_WUPE12(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE4_WUPE12_SHIFT)) & LLWU_PE4_WUPE12_MASK) +#define LLWU_PE4_WUPE13_MASK (0xCU) +#define LLWU_PE4_WUPE13_SHIFT (2U) +#define LLWU_PE4_WUPE13(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE4_WUPE13_SHIFT)) & LLWU_PE4_WUPE13_MASK) +#define LLWU_PE4_WUPE14_MASK (0x30U) +#define LLWU_PE4_WUPE14_SHIFT (4U) +#define LLWU_PE4_WUPE14(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE4_WUPE14_SHIFT)) & LLWU_PE4_WUPE14_MASK) +#define LLWU_PE4_WUPE15_MASK (0xC0U) +#define LLWU_PE4_WUPE15_SHIFT (6U) +#define LLWU_PE4_WUPE15(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE4_WUPE15_SHIFT)) & LLWU_PE4_WUPE15_MASK) + +/*! @name PE5 - LLWU Pin Enable 5 register */ +#define LLWU_PE5_WUPE16_MASK (0x3U) +#define LLWU_PE5_WUPE16_SHIFT (0U) +#define LLWU_PE5_WUPE16(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE5_WUPE16_SHIFT)) & LLWU_PE5_WUPE16_MASK) +#define LLWU_PE5_WUPE17_MASK (0xCU) +#define LLWU_PE5_WUPE17_SHIFT (2U) +#define LLWU_PE5_WUPE17(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE5_WUPE17_SHIFT)) & LLWU_PE5_WUPE17_MASK) +#define LLWU_PE5_WUPE18_MASK (0x30U) +#define LLWU_PE5_WUPE18_SHIFT (4U) +#define LLWU_PE5_WUPE18(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE5_WUPE18_SHIFT)) & LLWU_PE5_WUPE18_MASK) +#define LLWU_PE5_WUPE19_MASK (0xC0U) +#define LLWU_PE5_WUPE19_SHIFT (6U) +#define LLWU_PE5_WUPE19(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE5_WUPE19_SHIFT)) & LLWU_PE5_WUPE19_MASK) + +/*! @name PE6 - LLWU Pin Enable 6 register */ +#define LLWU_PE6_WUPE20_MASK (0x3U) +#define LLWU_PE6_WUPE20_SHIFT (0U) +#define LLWU_PE6_WUPE20(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE6_WUPE20_SHIFT)) & LLWU_PE6_WUPE20_MASK) +#define LLWU_PE6_WUPE21_MASK (0xCU) +#define LLWU_PE6_WUPE21_SHIFT (2U) +#define LLWU_PE6_WUPE21(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE6_WUPE21_SHIFT)) & LLWU_PE6_WUPE21_MASK) +#define LLWU_PE6_WUPE22_MASK (0x30U) +#define LLWU_PE6_WUPE22_SHIFT (4U) +#define LLWU_PE6_WUPE22(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE6_WUPE22_SHIFT)) & LLWU_PE6_WUPE22_MASK) +#define LLWU_PE6_WUPE23_MASK (0xC0U) +#define LLWU_PE6_WUPE23_SHIFT (6U) +#define LLWU_PE6_WUPE23(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE6_WUPE23_SHIFT)) & LLWU_PE6_WUPE23_MASK) + +/*! @name PE7 - LLWU Pin Enable 7 register */ +#define LLWU_PE7_WUPE24_MASK (0x3U) +#define LLWU_PE7_WUPE24_SHIFT (0U) +#define LLWU_PE7_WUPE24(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE7_WUPE24_SHIFT)) & LLWU_PE7_WUPE24_MASK) +#define LLWU_PE7_WUPE25_MASK (0xCU) +#define LLWU_PE7_WUPE25_SHIFT (2U) +#define LLWU_PE7_WUPE25(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE7_WUPE25_SHIFT)) & LLWU_PE7_WUPE25_MASK) +#define LLWU_PE7_WUPE26_MASK (0x30U) +#define LLWU_PE7_WUPE26_SHIFT (4U) +#define LLWU_PE7_WUPE26(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE7_WUPE26_SHIFT)) & LLWU_PE7_WUPE26_MASK) +#define LLWU_PE7_WUPE27_MASK (0xC0U) +#define LLWU_PE7_WUPE27_SHIFT (6U) +#define LLWU_PE7_WUPE27(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE7_WUPE27_SHIFT)) & LLWU_PE7_WUPE27_MASK) + +/*! @name PE8 - LLWU Pin Enable 8 register */ +#define LLWU_PE8_WUPE28_MASK (0x3U) +#define LLWU_PE8_WUPE28_SHIFT (0U) +#define LLWU_PE8_WUPE28(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE8_WUPE28_SHIFT)) & LLWU_PE8_WUPE28_MASK) +#define LLWU_PE8_WUPE29_MASK (0xCU) +#define LLWU_PE8_WUPE29_SHIFT (2U) +#define LLWU_PE8_WUPE29(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE8_WUPE29_SHIFT)) & LLWU_PE8_WUPE29_MASK) +#define LLWU_PE8_WUPE30_MASK (0x30U) +#define LLWU_PE8_WUPE30_SHIFT (4U) +#define LLWU_PE8_WUPE30(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE8_WUPE30_SHIFT)) & LLWU_PE8_WUPE30_MASK) +#define LLWU_PE8_WUPE31_MASK (0xC0U) +#define LLWU_PE8_WUPE31_SHIFT (6U) +#define LLWU_PE8_WUPE31(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PE8_WUPE31_SHIFT)) & LLWU_PE8_WUPE31_MASK) + +/*! @name ME - LLWU Module Enable register */ +#define LLWU_ME_WUME0_MASK (0x1U) +#define LLWU_ME_WUME0_SHIFT (0U) +#define LLWU_ME_WUME0(x) (((uint8_t)(((uint8_t)(x)) << LLWU_ME_WUME0_SHIFT)) & LLWU_ME_WUME0_MASK) +#define LLWU_ME_WUME1_MASK (0x2U) +#define LLWU_ME_WUME1_SHIFT (1U) +#define LLWU_ME_WUME1(x) (((uint8_t)(((uint8_t)(x)) << LLWU_ME_WUME1_SHIFT)) & LLWU_ME_WUME1_MASK) +#define LLWU_ME_WUME2_MASK (0x4U) +#define LLWU_ME_WUME2_SHIFT (2U) +#define LLWU_ME_WUME2(x) (((uint8_t)(((uint8_t)(x)) << LLWU_ME_WUME2_SHIFT)) & LLWU_ME_WUME2_MASK) +#define LLWU_ME_WUME3_MASK (0x8U) +#define LLWU_ME_WUME3_SHIFT (3U) +#define LLWU_ME_WUME3(x) (((uint8_t)(((uint8_t)(x)) << LLWU_ME_WUME3_SHIFT)) & LLWU_ME_WUME3_MASK) +#define LLWU_ME_WUME4_MASK (0x10U) +#define LLWU_ME_WUME4_SHIFT (4U) +#define LLWU_ME_WUME4(x) (((uint8_t)(((uint8_t)(x)) << LLWU_ME_WUME4_SHIFT)) & LLWU_ME_WUME4_MASK) +#define LLWU_ME_WUME5_MASK (0x20U) +#define LLWU_ME_WUME5_SHIFT (5U) +#define LLWU_ME_WUME5(x) (((uint8_t)(((uint8_t)(x)) << LLWU_ME_WUME5_SHIFT)) & LLWU_ME_WUME5_MASK) +#define LLWU_ME_WUME6_MASK (0x40U) +#define LLWU_ME_WUME6_SHIFT (6U) +#define LLWU_ME_WUME6(x) (((uint8_t)(((uint8_t)(x)) << LLWU_ME_WUME6_SHIFT)) & LLWU_ME_WUME6_MASK) +#define LLWU_ME_WUME7_MASK (0x80U) +#define LLWU_ME_WUME7_SHIFT (7U) +#define LLWU_ME_WUME7(x) (((uint8_t)(((uint8_t)(x)) << LLWU_ME_WUME7_SHIFT)) & LLWU_ME_WUME7_MASK) + +/*! @name PF1 - LLWU Pin Flag 1 register */ +#define LLWU_PF1_WUF0_MASK (0x1U) +#define LLWU_PF1_WUF0_SHIFT (0U) +#define LLWU_PF1_WUF0(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF1_WUF0_SHIFT)) & LLWU_PF1_WUF0_MASK) +#define LLWU_PF1_WUF1_MASK (0x2U) +#define LLWU_PF1_WUF1_SHIFT (1U) +#define LLWU_PF1_WUF1(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF1_WUF1_SHIFT)) & LLWU_PF1_WUF1_MASK) +#define LLWU_PF1_WUF2_MASK (0x4U) +#define LLWU_PF1_WUF2_SHIFT (2U) +#define LLWU_PF1_WUF2(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF1_WUF2_SHIFT)) & LLWU_PF1_WUF2_MASK) +#define LLWU_PF1_WUF3_MASK (0x8U) +#define LLWU_PF1_WUF3_SHIFT (3U) +#define LLWU_PF1_WUF3(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF1_WUF3_SHIFT)) & LLWU_PF1_WUF3_MASK) +#define LLWU_PF1_WUF4_MASK (0x10U) +#define LLWU_PF1_WUF4_SHIFT (4U) +#define LLWU_PF1_WUF4(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF1_WUF4_SHIFT)) & LLWU_PF1_WUF4_MASK) +#define LLWU_PF1_WUF5_MASK (0x20U) +#define LLWU_PF1_WUF5_SHIFT (5U) +#define LLWU_PF1_WUF5(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF1_WUF5_SHIFT)) & LLWU_PF1_WUF5_MASK) +#define LLWU_PF1_WUF6_MASK (0x40U) +#define LLWU_PF1_WUF6_SHIFT (6U) +#define LLWU_PF1_WUF6(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF1_WUF6_SHIFT)) & LLWU_PF1_WUF6_MASK) +#define LLWU_PF1_WUF7_MASK (0x80U) +#define LLWU_PF1_WUF7_SHIFT (7U) +#define LLWU_PF1_WUF7(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF1_WUF7_SHIFT)) & LLWU_PF1_WUF7_MASK) + +/*! @name PF2 - LLWU Pin Flag 2 register */ +#define LLWU_PF2_WUF8_MASK (0x1U) +#define LLWU_PF2_WUF8_SHIFT (0U) +#define LLWU_PF2_WUF8(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF2_WUF8_SHIFT)) & LLWU_PF2_WUF8_MASK) +#define LLWU_PF2_WUF9_MASK (0x2U) +#define LLWU_PF2_WUF9_SHIFT (1U) +#define LLWU_PF2_WUF9(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF2_WUF9_SHIFT)) & LLWU_PF2_WUF9_MASK) +#define LLWU_PF2_WUF10_MASK (0x4U) +#define LLWU_PF2_WUF10_SHIFT (2U) +#define LLWU_PF2_WUF10(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF2_WUF10_SHIFT)) & LLWU_PF2_WUF10_MASK) +#define LLWU_PF2_WUF11_MASK (0x8U) +#define LLWU_PF2_WUF11_SHIFT (3U) +#define LLWU_PF2_WUF11(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF2_WUF11_SHIFT)) & LLWU_PF2_WUF11_MASK) +#define LLWU_PF2_WUF12_MASK (0x10U) +#define LLWU_PF2_WUF12_SHIFT (4U) +#define LLWU_PF2_WUF12(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF2_WUF12_SHIFT)) & LLWU_PF2_WUF12_MASK) +#define LLWU_PF2_WUF13_MASK (0x20U) +#define LLWU_PF2_WUF13_SHIFT (5U) +#define LLWU_PF2_WUF13(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF2_WUF13_SHIFT)) & LLWU_PF2_WUF13_MASK) +#define LLWU_PF2_WUF14_MASK (0x40U) +#define LLWU_PF2_WUF14_SHIFT (6U) +#define LLWU_PF2_WUF14(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF2_WUF14_SHIFT)) & LLWU_PF2_WUF14_MASK) +#define LLWU_PF2_WUF15_MASK (0x80U) +#define LLWU_PF2_WUF15_SHIFT (7U) +#define LLWU_PF2_WUF15(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF2_WUF15_SHIFT)) & LLWU_PF2_WUF15_MASK) + +/*! @name PF3 - LLWU Pin Flag 3 register */ +#define LLWU_PF3_WUF16_MASK (0x1U) +#define LLWU_PF3_WUF16_SHIFT (0U) +#define LLWU_PF3_WUF16(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF3_WUF16_SHIFT)) & LLWU_PF3_WUF16_MASK) +#define LLWU_PF3_WUF17_MASK (0x2U) +#define LLWU_PF3_WUF17_SHIFT (1U) +#define LLWU_PF3_WUF17(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF3_WUF17_SHIFT)) & LLWU_PF3_WUF17_MASK) +#define LLWU_PF3_WUF18_MASK (0x4U) +#define LLWU_PF3_WUF18_SHIFT (2U) +#define LLWU_PF3_WUF18(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF3_WUF18_SHIFT)) & LLWU_PF3_WUF18_MASK) +#define LLWU_PF3_WUF19_MASK (0x8U) +#define LLWU_PF3_WUF19_SHIFT (3U) +#define LLWU_PF3_WUF19(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF3_WUF19_SHIFT)) & LLWU_PF3_WUF19_MASK) +#define LLWU_PF3_WUF20_MASK (0x10U) +#define LLWU_PF3_WUF20_SHIFT (4U) +#define LLWU_PF3_WUF20(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF3_WUF20_SHIFT)) & LLWU_PF3_WUF20_MASK) +#define LLWU_PF3_WUF21_MASK (0x20U) +#define LLWU_PF3_WUF21_SHIFT (5U) +#define LLWU_PF3_WUF21(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF3_WUF21_SHIFT)) & LLWU_PF3_WUF21_MASK) +#define LLWU_PF3_WUF22_MASK (0x40U) +#define LLWU_PF3_WUF22_SHIFT (6U) +#define LLWU_PF3_WUF22(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF3_WUF22_SHIFT)) & LLWU_PF3_WUF22_MASK) +#define LLWU_PF3_WUF23_MASK (0x80U) +#define LLWU_PF3_WUF23_SHIFT (7U) +#define LLWU_PF3_WUF23(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF3_WUF23_SHIFT)) & LLWU_PF3_WUF23_MASK) + +/*! @name PF4 - LLWU Pin Flag 4 register */ +#define LLWU_PF4_WUF24_MASK (0x1U) +#define LLWU_PF4_WUF24_SHIFT (0U) +#define LLWU_PF4_WUF24(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF4_WUF24_SHIFT)) & LLWU_PF4_WUF24_MASK) +#define LLWU_PF4_WUF25_MASK (0x2U) +#define LLWU_PF4_WUF25_SHIFT (1U) +#define LLWU_PF4_WUF25(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF4_WUF25_SHIFT)) & LLWU_PF4_WUF25_MASK) +#define LLWU_PF4_WUF26_MASK (0x4U) +#define LLWU_PF4_WUF26_SHIFT (2U) +#define LLWU_PF4_WUF26(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF4_WUF26_SHIFT)) & LLWU_PF4_WUF26_MASK) +#define LLWU_PF4_WUF27_MASK (0x8U) +#define LLWU_PF4_WUF27_SHIFT (3U) +#define LLWU_PF4_WUF27(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF4_WUF27_SHIFT)) & LLWU_PF4_WUF27_MASK) +#define LLWU_PF4_WUF28_MASK (0x10U) +#define LLWU_PF4_WUF28_SHIFT (4U) +#define LLWU_PF4_WUF28(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF4_WUF28_SHIFT)) & LLWU_PF4_WUF28_MASK) +#define LLWU_PF4_WUF29_MASK (0x20U) +#define LLWU_PF4_WUF29_SHIFT (5U) +#define LLWU_PF4_WUF29(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF4_WUF29_SHIFT)) & LLWU_PF4_WUF29_MASK) +#define LLWU_PF4_WUF30_MASK (0x40U) +#define LLWU_PF4_WUF30_SHIFT (6U) +#define LLWU_PF4_WUF30(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF4_WUF30_SHIFT)) & LLWU_PF4_WUF30_MASK) +#define LLWU_PF4_WUF31_MASK (0x80U) +#define LLWU_PF4_WUF31_SHIFT (7U) +#define LLWU_PF4_WUF31(x) (((uint8_t)(((uint8_t)(x)) << LLWU_PF4_WUF31_SHIFT)) & LLWU_PF4_WUF31_MASK) + +/*! @name MF5 - LLWU Module Flag 5 register */ +#define LLWU_MF5_MWUF0_MASK (0x1U) +#define LLWU_MF5_MWUF0_SHIFT (0U) +#define LLWU_MF5_MWUF0(x) (((uint8_t)(((uint8_t)(x)) << LLWU_MF5_MWUF0_SHIFT)) & LLWU_MF5_MWUF0_MASK) +#define LLWU_MF5_MWUF1_MASK (0x2U) +#define LLWU_MF5_MWUF1_SHIFT (1U) +#define LLWU_MF5_MWUF1(x) (((uint8_t)(((uint8_t)(x)) << LLWU_MF5_MWUF1_SHIFT)) & LLWU_MF5_MWUF1_MASK) +#define LLWU_MF5_MWUF2_MASK (0x4U) +#define LLWU_MF5_MWUF2_SHIFT (2U) +#define LLWU_MF5_MWUF2(x) (((uint8_t)(((uint8_t)(x)) << LLWU_MF5_MWUF2_SHIFT)) & LLWU_MF5_MWUF2_MASK) +#define LLWU_MF5_MWUF3_MASK (0x8U) +#define LLWU_MF5_MWUF3_SHIFT (3U) +#define LLWU_MF5_MWUF3(x) (((uint8_t)(((uint8_t)(x)) << LLWU_MF5_MWUF3_SHIFT)) & LLWU_MF5_MWUF3_MASK) +#define LLWU_MF5_MWUF4_MASK (0x10U) +#define LLWU_MF5_MWUF4_SHIFT (4U) +#define LLWU_MF5_MWUF4(x) (((uint8_t)(((uint8_t)(x)) << LLWU_MF5_MWUF4_SHIFT)) & LLWU_MF5_MWUF4_MASK) +#define LLWU_MF5_MWUF5_MASK (0x20U) +#define LLWU_MF5_MWUF5_SHIFT (5U) +#define LLWU_MF5_MWUF5(x) (((uint8_t)(((uint8_t)(x)) << LLWU_MF5_MWUF5_SHIFT)) & LLWU_MF5_MWUF5_MASK) +#define LLWU_MF5_MWUF6_MASK (0x40U) +#define LLWU_MF5_MWUF6_SHIFT (6U) +#define LLWU_MF5_MWUF6(x) (((uint8_t)(((uint8_t)(x)) << LLWU_MF5_MWUF6_SHIFT)) & LLWU_MF5_MWUF6_MASK) +#define LLWU_MF5_MWUF7_MASK (0x80U) +#define LLWU_MF5_MWUF7_SHIFT (7U) +#define LLWU_MF5_MWUF7(x) (((uint8_t)(((uint8_t)(x)) << LLWU_MF5_MWUF7_SHIFT)) & LLWU_MF5_MWUF7_MASK) + +/*! @name FILT1 - LLWU Pin Filter 1 register */ +#define LLWU_FILT1_FILTSEL_MASK (0x1FU) +#define LLWU_FILT1_FILTSEL_SHIFT (0U) +#define LLWU_FILT1_FILTSEL(x) (((uint8_t)(((uint8_t)(x)) << LLWU_FILT1_FILTSEL_SHIFT)) & LLWU_FILT1_FILTSEL_MASK) +#define LLWU_FILT1_FILTE_MASK (0x60U) +#define LLWU_FILT1_FILTE_SHIFT (5U) +#define LLWU_FILT1_FILTE(x) (((uint8_t)(((uint8_t)(x)) << LLWU_FILT1_FILTE_SHIFT)) & LLWU_FILT1_FILTE_MASK) +#define LLWU_FILT1_FILTF_MASK (0x80U) +#define LLWU_FILT1_FILTF_SHIFT (7U) +#define LLWU_FILT1_FILTF(x) (((uint8_t)(((uint8_t)(x)) << LLWU_FILT1_FILTF_SHIFT)) & LLWU_FILT1_FILTF_MASK) + +/*! @name FILT2 - LLWU Pin Filter 2 register */ +#define LLWU_FILT2_FILTSEL_MASK (0x1FU) +#define LLWU_FILT2_FILTSEL_SHIFT (0U) +#define LLWU_FILT2_FILTSEL(x) (((uint8_t)(((uint8_t)(x)) << LLWU_FILT2_FILTSEL_SHIFT)) & LLWU_FILT2_FILTSEL_MASK) +#define LLWU_FILT2_FILTE_MASK (0x60U) +#define LLWU_FILT2_FILTE_SHIFT (5U) +#define LLWU_FILT2_FILTE(x) (((uint8_t)(((uint8_t)(x)) << LLWU_FILT2_FILTE_SHIFT)) & LLWU_FILT2_FILTE_MASK) +#define LLWU_FILT2_FILTF_MASK (0x80U) +#define LLWU_FILT2_FILTF_SHIFT (7U) +#define LLWU_FILT2_FILTF(x) (((uint8_t)(((uint8_t)(x)) << LLWU_FILT2_FILTF_SHIFT)) & LLWU_FILT2_FILTF_MASK) + +/*! @name FILT3 - LLWU Pin Filter 3 register */ +#define LLWU_FILT3_FILTSEL_MASK (0x1FU) +#define LLWU_FILT3_FILTSEL_SHIFT (0U) +#define LLWU_FILT3_FILTSEL(x) (((uint8_t)(((uint8_t)(x)) << LLWU_FILT3_FILTSEL_SHIFT)) & LLWU_FILT3_FILTSEL_MASK) +#define LLWU_FILT3_FILTE_MASK (0x60U) +#define LLWU_FILT3_FILTE_SHIFT (5U) +#define LLWU_FILT3_FILTE(x) (((uint8_t)(((uint8_t)(x)) << LLWU_FILT3_FILTE_SHIFT)) & LLWU_FILT3_FILTE_MASK) +#define LLWU_FILT3_FILTF_MASK (0x80U) +#define LLWU_FILT3_FILTF_SHIFT (7U) +#define LLWU_FILT3_FILTF(x) (((uint8_t)(((uint8_t)(x)) << LLWU_FILT3_FILTF_SHIFT)) & LLWU_FILT3_FILTF_MASK) + +/*! @name FILT4 - LLWU Pin Filter 4 register */ +#define LLWU_FILT4_FILTSEL_MASK (0x1FU) +#define LLWU_FILT4_FILTSEL_SHIFT (0U) +#define LLWU_FILT4_FILTSEL(x) (((uint8_t)(((uint8_t)(x)) << LLWU_FILT4_FILTSEL_SHIFT)) & LLWU_FILT4_FILTSEL_MASK) +#define LLWU_FILT4_FILTE_MASK (0x60U) +#define LLWU_FILT4_FILTE_SHIFT (5U) +#define LLWU_FILT4_FILTE(x) (((uint8_t)(((uint8_t)(x)) << LLWU_FILT4_FILTE_SHIFT)) & LLWU_FILT4_FILTE_MASK) +#define LLWU_FILT4_FILTF_MASK (0x80U) +#define LLWU_FILT4_FILTF_SHIFT (7U) +#define LLWU_FILT4_FILTF(x) (((uint8_t)(((uint8_t)(x)) << LLWU_FILT4_FILTF_SHIFT)) & LLWU_FILT4_FILTF_MASK) + + +/*! + * @} + */ /* end of group LLWU_Register_Masks */ + + +/* LLWU - Peripheral instance base addresses */ +/** Peripheral LLWU base address */ +#define LLWU_BASE (0x4007C000u) +/** Peripheral LLWU base pointer */ +#define LLWU ((LLWU_Type *)LLWU_BASE) +/** Array initializer of LLWU peripheral base addresses */ +#define LLWU_BASE_ADDRS { LLWU_BASE } +/** Array initializer of LLWU peripheral base pointers */ +#define LLWU_BASE_PTRS { LLWU } +/** Interrupt vectors for the LLWU peripheral type */ +#define LLWU_IRQS { LLWU_IRQn } + +/*! + * @} + */ /* end of group LLWU_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- LPTMR Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup LPTMR_Peripheral_Access_Layer LPTMR Peripheral Access Layer + * @{ + */ + +/** LPTMR - Register Layout Typedef */ +typedef struct { + __IO uint32_t CSR; /**< Low Power Timer Control Status Register, offset: 0x0 */ + __IO uint32_t PSR; /**< Low Power Timer Prescale Register, offset: 0x4 */ + __IO uint32_t CMR; /**< Low Power Timer Compare Register, offset: 0x8 */ + __IO uint32_t CNR; /**< Low Power Timer Counter Register, offset: 0xC */ +} LPTMR_Type; + +/* ---------------------------------------------------------------------------- + -- LPTMR Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup LPTMR_Register_Masks LPTMR Register Masks + * @{ + */ + +/*! @name CSR - Low Power Timer Control Status Register */ +#define LPTMR_CSR_TEN_MASK (0x1U) +#define LPTMR_CSR_TEN_SHIFT (0U) +#define LPTMR_CSR_TEN(x) (((uint32_t)(((uint32_t)(x)) << LPTMR_CSR_TEN_SHIFT)) & LPTMR_CSR_TEN_MASK) +#define LPTMR_CSR_TMS_MASK (0x2U) +#define LPTMR_CSR_TMS_SHIFT (1U) +#define LPTMR_CSR_TMS(x) (((uint32_t)(((uint32_t)(x)) << LPTMR_CSR_TMS_SHIFT)) & LPTMR_CSR_TMS_MASK) +#define LPTMR_CSR_TFC_MASK (0x4U) +#define LPTMR_CSR_TFC_SHIFT (2U) +#define LPTMR_CSR_TFC(x) (((uint32_t)(((uint32_t)(x)) << LPTMR_CSR_TFC_SHIFT)) & LPTMR_CSR_TFC_MASK) +#define LPTMR_CSR_TPP_MASK (0x8U) +#define LPTMR_CSR_TPP_SHIFT (3U) +#define LPTMR_CSR_TPP(x) (((uint32_t)(((uint32_t)(x)) << LPTMR_CSR_TPP_SHIFT)) & LPTMR_CSR_TPP_MASK) +#define LPTMR_CSR_TPS_MASK (0x30U) +#define LPTMR_CSR_TPS_SHIFT (4U) +#define LPTMR_CSR_TPS(x) (((uint32_t)(((uint32_t)(x)) << LPTMR_CSR_TPS_SHIFT)) & LPTMR_CSR_TPS_MASK) +#define LPTMR_CSR_TIE_MASK (0x40U) +#define LPTMR_CSR_TIE_SHIFT (6U) +#define LPTMR_CSR_TIE(x) (((uint32_t)(((uint32_t)(x)) << LPTMR_CSR_TIE_SHIFT)) & LPTMR_CSR_TIE_MASK) +#define LPTMR_CSR_TCF_MASK (0x80U) +#define LPTMR_CSR_TCF_SHIFT (7U) +#define LPTMR_CSR_TCF(x) (((uint32_t)(((uint32_t)(x)) << LPTMR_CSR_TCF_SHIFT)) & LPTMR_CSR_TCF_MASK) + +/*! @name PSR - Low Power Timer Prescale Register */ +#define LPTMR_PSR_PCS_MASK (0x3U) +#define LPTMR_PSR_PCS_SHIFT (0U) +#define LPTMR_PSR_PCS(x) (((uint32_t)(((uint32_t)(x)) << LPTMR_PSR_PCS_SHIFT)) & LPTMR_PSR_PCS_MASK) +#define LPTMR_PSR_PBYP_MASK (0x4U) +#define LPTMR_PSR_PBYP_SHIFT (2U) +#define LPTMR_PSR_PBYP(x) (((uint32_t)(((uint32_t)(x)) << LPTMR_PSR_PBYP_SHIFT)) & LPTMR_PSR_PBYP_MASK) +#define LPTMR_PSR_PRESCALE_MASK (0x78U) +#define LPTMR_PSR_PRESCALE_SHIFT (3U) +#define LPTMR_PSR_PRESCALE(x) (((uint32_t)(((uint32_t)(x)) << LPTMR_PSR_PRESCALE_SHIFT)) & LPTMR_PSR_PRESCALE_MASK) + +/*! @name CMR - Low Power Timer Compare Register */ +#define LPTMR_CMR_COMPARE_MASK (0xFFFFU) +#define LPTMR_CMR_COMPARE_SHIFT (0U) +#define LPTMR_CMR_COMPARE(x) (((uint32_t)(((uint32_t)(x)) << LPTMR_CMR_COMPARE_SHIFT)) & LPTMR_CMR_COMPARE_MASK) + +/*! @name CNR - Low Power Timer Counter Register */ +#define LPTMR_CNR_COUNTER_MASK (0xFFFFU) +#define LPTMR_CNR_COUNTER_SHIFT (0U) +#define LPTMR_CNR_COUNTER(x) (((uint32_t)(((uint32_t)(x)) << LPTMR_CNR_COUNTER_SHIFT)) & LPTMR_CNR_COUNTER_MASK) + + +/*! + * @} + */ /* end of group LPTMR_Register_Masks */ + + +/* LPTMR - Peripheral instance base addresses */ +/** Peripheral LPTMR0 base address */ +#define LPTMR0_BASE (0x40040000u) +/** Peripheral LPTMR0 base pointer */ +#define LPTMR0 ((LPTMR_Type *)LPTMR0_BASE) +/** Peripheral LPTMR1 base address */ +#define LPTMR1_BASE (0x40044000u) +/** Peripheral LPTMR1 base pointer */ +#define LPTMR1 ((LPTMR_Type *)LPTMR1_BASE) +/** Array initializer of LPTMR peripheral base addresses */ +#define LPTMR_BASE_ADDRS { LPTMR0_BASE, LPTMR1_BASE } +/** Array initializer of LPTMR peripheral base pointers */ +#define LPTMR_BASE_PTRS { LPTMR0, LPTMR1 } +/** Interrupt vectors for the LPTMR peripheral type */ +#define LPTMR_IRQS { LPTMR0_IRQn, LPTMR1_IRQn } + +/*! + * @} + */ /* end of group LPTMR_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- LPUART Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup LPUART_Peripheral_Access_Layer LPUART Peripheral Access Layer + * @{ + */ + +/** LPUART - Register Layout Typedef */ +typedef struct { + __IO uint32_t BAUD; /**< LPUART Baud Rate Register, offset: 0x0 */ + __IO uint32_t STAT; /**< LPUART Status Register, offset: 0x4 */ + __IO uint32_t CTRL; /**< LPUART Control Register, offset: 0x8 */ + __IO uint32_t DATA; /**< LPUART Data Register, offset: 0xC */ + __IO uint32_t MATCH; /**< LPUART Match Address Register, offset: 0x10 */ + __IO uint32_t MODIR; /**< LPUART Modem IrDA Register, offset: 0x14 */ + __IO uint32_t FIFO; /**< LPUART FIFO Register, offset: 0x18 */ + __IO uint32_t WATER; /**< LPUART Watermark Register, offset: 0x1C */ +} LPUART_Type; + +/* ---------------------------------------------------------------------------- + -- LPUART Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup LPUART_Register_Masks LPUART Register Masks + * @{ + */ + +/*! @name BAUD - LPUART Baud Rate Register */ +#define LPUART_BAUD_SBR_MASK (0x1FFFU) +#define LPUART_BAUD_SBR_SHIFT (0U) +#define LPUART_BAUD_SBR(x) (((uint32_t)(((uint32_t)(x)) << LPUART_BAUD_SBR_SHIFT)) & LPUART_BAUD_SBR_MASK) +#define LPUART_BAUD_SBNS_MASK (0x2000U) +#define LPUART_BAUD_SBNS_SHIFT (13U) +#define LPUART_BAUD_SBNS(x) (((uint32_t)(((uint32_t)(x)) << LPUART_BAUD_SBNS_SHIFT)) & LPUART_BAUD_SBNS_MASK) +#define LPUART_BAUD_RXEDGIE_MASK (0x4000U) +#define LPUART_BAUD_RXEDGIE_SHIFT (14U) +#define LPUART_BAUD_RXEDGIE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_BAUD_RXEDGIE_SHIFT)) & LPUART_BAUD_RXEDGIE_MASK) +#define LPUART_BAUD_LBKDIE_MASK (0x8000U) +#define LPUART_BAUD_LBKDIE_SHIFT (15U) +#define LPUART_BAUD_LBKDIE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_BAUD_LBKDIE_SHIFT)) & LPUART_BAUD_LBKDIE_MASK) +#define LPUART_BAUD_RESYNCDIS_MASK (0x10000U) +#define LPUART_BAUD_RESYNCDIS_SHIFT (16U) +#define LPUART_BAUD_RESYNCDIS(x) (((uint32_t)(((uint32_t)(x)) << LPUART_BAUD_RESYNCDIS_SHIFT)) & LPUART_BAUD_RESYNCDIS_MASK) +#define LPUART_BAUD_BOTHEDGE_MASK (0x20000U) +#define LPUART_BAUD_BOTHEDGE_SHIFT (17U) +#define LPUART_BAUD_BOTHEDGE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_BAUD_BOTHEDGE_SHIFT)) & LPUART_BAUD_BOTHEDGE_MASK) +#define LPUART_BAUD_MATCFG_MASK (0xC0000U) +#define LPUART_BAUD_MATCFG_SHIFT (18U) +#define LPUART_BAUD_MATCFG(x) (((uint32_t)(((uint32_t)(x)) << LPUART_BAUD_MATCFG_SHIFT)) & LPUART_BAUD_MATCFG_MASK) +#define LPUART_BAUD_RDMAE_MASK (0x200000U) +#define LPUART_BAUD_RDMAE_SHIFT (21U) +#define LPUART_BAUD_RDMAE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_BAUD_RDMAE_SHIFT)) & LPUART_BAUD_RDMAE_MASK) +#define LPUART_BAUD_TDMAE_MASK (0x800000U) +#define LPUART_BAUD_TDMAE_SHIFT (23U) +#define LPUART_BAUD_TDMAE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_BAUD_TDMAE_SHIFT)) & LPUART_BAUD_TDMAE_MASK) +#define LPUART_BAUD_OSR_MASK (0x1F000000U) +#define LPUART_BAUD_OSR_SHIFT (24U) +#define LPUART_BAUD_OSR(x) (((uint32_t)(((uint32_t)(x)) << LPUART_BAUD_OSR_SHIFT)) & LPUART_BAUD_OSR_MASK) +#define LPUART_BAUD_M10_MASK (0x20000000U) +#define LPUART_BAUD_M10_SHIFT (29U) +#define LPUART_BAUD_M10(x) (((uint32_t)(((uint32_t)(x)) << LPUART_BAUD_M10_SHIFT)) & LPUART_BAUD_M10_MASK) +#define LPUART_BAUD_MAEN2_MASK (0x40000000U) +#define LPUART_BAUD_MAEN2_SHIFT (30U) +#define LPUART_BAUD_MAEN2(x) (((uint32_t)(((uint32_t)(x)) << LPUART_BAUD_MAEN2_SHIFT)) & LPUART_BAUD_MAEN2_MASK) +#define LPUART_BAUD_MAEN1_MASK (0x80000000U) +#define LPUART_BAUD_MAEN1_SHIFT (31U) +#define LPUART_BAUD_MAEN1(x) (((uint32_t)(((uint32_t)(x)) << LPUART_BAUD_MAEN1_SHIFT)) & LPUART_BAUD_MAEN1_MASK) + +/*! @name STAT - LPUART Status Register */ +#define LPUART_STAT_MA2F_MASK (0x4000U) +#define LPUART_STAT_MA2F_SHIFT (14U) +#define LPUART_STAT_MA2F(x) (((uint32_t)(((uint32_t)(x)) << LPUART_STAT_MA2F_SHIFT)) & LPUART_STAT_MA2F_MASK) +#define LPUART_STAT_MA1F_MASK (0x8000U) +#define LPUART_STAT_MA1F_SHIFT (15U) +#define LPUART_STAT_MA1F(x) (((uint32_t)(((uint32_t)(x)) << LPUART_STAT_MA1F_SHIFT)) & LPUART_STAT_MA1F_MASK) +#define LPUART_STAT_PF_MASK (0x10000U) +#define LPUART_STAT_PF_SHIFT (16U) +#define LPUART_STAT_PF(x) (((uint32_t)(((uint32_t)(x)) << LPUART_STAT_PF_SHIFT)) & LPUART_STAT_PF_MASK) +#define LPUART_STAT_FE_MASK (0x20000U) +#define LPUART_STAT_FE_SHIFT (17U) +#define LPUART_STAT_FE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_STAT_FE_SHIFT)) & LPUART_STAT_FE_MASK) +#define LPUART_STAT_NF_MASK (0x40000U) +#define LPUART_STAT_NF_SHIFT (18U) +#define LPUART_STAT_NF(x) (((uint32_t)(((uint32_t)(x)) << LPUART_STAT_NF_SHIFT)) & LPUART_STAT_NF_MASK) +#define LPUART_STAT_OR_MASK (0x80000U) +#define LPUART_STAT_OR_SHIFT (19U) +#define LPUART_STAT_OR(x) (((uint32_t)(((uint32_t)(x)) << LPUART_STAT_OR_SHIFT)) & LPUART_STAT_OR_MASK) +#define LPUART_STAT_IDLE_MASK (0x100000U) +#define LPUART_STAT_IDLE_SHIFT (20U) +#define LPUART_STAT_IDLE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_STAT_IDLE_SHIFT)) & LPUART_STAT_IDLE_MASK) +#define LPUART_STAT_RDRF_MASK (0x200000U) +#define LPUART_STAT_RDRF_SHIFT (21U) +#define LPUART_STAT_RDRF(x) (((uint32_t)(((uint32_t)(x)) << LPUART_STAT_RDRF_SHIFT)) & LPUART_STAT_RDRF_MASK) +#define LPUART_STAT_TC_MASK (0x400000U) +#define LPUART_STAT_TC_SHIFT (22U) +#define LPUART_STAT_TC(x) (((uint32_t)(((uint32_t)(x)) << LPUART_STAT_TC_SHIFT)) & LPUART_STAT_TC_MASK) +#define LPUART_STAT_TDRE_MASK (0x800000U) +#define LPUART_STAT_TDRE_SHIFT (23U) +#define LPUART_STAT_TDRE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_STAT_TDRE_SHIFT)) & LPUART_STAT_TDRE_MASK) +#define LPUART_STAT_RAF_MASK (0x1000000U) +#define LPUART_STAT_RAF_SHIFT (24U) +#define LPUART_STAT_RAF(x) (((uint32_t)(((uint32_t)(x)) << LPUART_STAT_RAF_SHIFT)) & LPUART_STAT_RAF_MASK) +#define LPUART_STAT_LBKDE_MASK (0x2000000U) +#define LPUART_STAT_LBKDE_SHIFT (25U) +#define LPUART_STAT_LBKDE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_STAT_LBKDE_SHIFT)) & LPUART_STAT_LBKDE_MASK) +#define LPUART_STAT_BRK13_MASK (0x4000000U) +#define LPUART_STAT_BRK13_SHIFT (26U) +#define LPUART_STAT_BRK13(x) (((uint32_t)(((uint32_t)(x)) << LPUART_STAT_BRK13_SHIFT)) & LPUART_STAT_BRK13_MASK) +#define LPUART_STAT_RWUID_MASK (0x8000000U) +#define LPUART_STAT_RWUID_SHIFT (27U) +#define LPUART_STAT_RWUID(x) (((uint32_t)(((uint32_t)(x)) << LPUART_STAT_RWUID_SHIFT)) & LPUART_STAT_RWUID_MASK) +#define LPUART_STAT_RXINV_MASK (0x10000000U) +#define LPUART_STAT_RXINV_SHIFT (28U) +#define LPUART_STAT_RXINV(x) (((uint32_t)(((uint32_t)(x)) << LPUART_STAT_RXINV_SHIFT)) & LPUART_STAT_RXINV_MASK) +#define LPUART_STAT_MSBF_MASK (0x20000000U) +#define LPUART_STAT_MSBF_SHIFT (29U) +#define LPUART_STAT_MSBF(x) (((uint32_t)(((uint32_t)(x)) << LPUART_STAT_MSBF_SHIFT)) & LPUART_STAT_MSBF_MASK) +#define LPUART_STAT_RXEDGIF_MASK (0x40000000U) +#define LPUART_STAT_RXEDGIF_SHIFT (30U) +#define LPUART_STAT_RXEDGIF(x) (((uint32_t)(((uint32_t)(x)) << LPUART_STAT_RXEDGIF_SHIFT)) & LPUART_STAT_RXEDGIF_MASK) +#define LPUART_STAT_LBKDIF_MASK (0x80000000U) +#define LPUART_STAT_LBKDIF_SHIFT (31U) +#define LPUART_STAT_LBKDIF(x) (((uint32_t)(((uint32_t)(x)) << LPUART_STAT_LBKDIF_SHIFT)) & LPUART_STAT_LBKDIF_MASK) + +/*! @name CTRL - LPUART Control Register */ +#define LPUART_CTRL_PT_MASK (0x1U) +#define LPUART_CTRL_PT_SHIFT (0U) +#define LPUART_CTRL_PT(x) (((uint32_t)(((uint32_t)(x)) << LPUART_CTRL_PT_SHIFT)) & LPUART_CTRL_PT_MASK) +#define LPUART_CTRL_PE_MASK (0x2U) +#define LPUART_CTRL_PE_SHIFT (1U) +#define LPUART_CTRL_PE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_CTRL_PE_SHIFT)) & LPUART_CTRL_PE_MASK) +#define LPUART_CTRL_ILT_MASK (0x4U) +#define LPUART_CTRL_ILT_SHIFT (2U) +#define LPUART_CTRL_ILT(x) (((uint32_t)(((uint32_t)(x)) << LPUART_CTRL_ILT_SHIFT)) & LPUART_CTRL_ILT_MASK) +#define LPUART_CTRL_WAKE_MASK (0x8U) +#define LPUART_CTRL_WAKE_SHIFT (3U) +#define LPUART_CTRL_WAKE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_CTRL_WAKE_SHIFT)) & LPUART_CTRL_WAKE_MASK) +#define LPUART_CTRL_M_MASK (0x10U) +#define LPUART_CTRL_M_SHIFT (4U) +#define LPUART_CTRL_M(x) (((uint32_t)(((uint32_t)(x)) << LPUART_CTRL_M_SHIFT)) & LPUART_CTRL_M_MASK) +#define LPUART_CTRL_RSRC_MASK (0x20U) +#define LPUART_CTRL_RSRC_SHIFT (5U) +#define LPUART_CTRL_RSRC(x) (((uint32_t)(((uint32_t)(x)) << LPUART_CTRL_RSRC_SHIFT)) & LPUART_CTRL_RSRC_MASK) +#define LPUART_CTRL_DOZEEN_MASK (0x40U) +#define LPUART_CTRL_DOZEEN_SHIFT (6U) +#define LPUART_CTRL_DOZEEN(x) (((uint32_t)(((uint32_t)(x)) << LPUART_CTRL_DOZEEN_SHIFT)) & LPUART_CTRL_DOZEEN_MASK) +#define LPUART_CTRL_LOOPS_MASK (0x80U) +#define LPUART_CTRL_LOOPS_SHIFT (7U) +#define LPUART_CTRL_LOOPS(x) (((uint32_t)(((uint32_t)(x)) << LPUART_CTRL_LOOPS_SHIFT)) & LPUART_CTRL_LOOPS_MASK) +#define LPUART_CTRL_IDLECFG_MASK (0x700U) +#define LPUART_CTRL_IDLECFG_SHIFT (8U) +#define LPUART_CTRL_IDLECFG(x) (((uint32_t)(((uint32_t)(x)) << LPUART_CTRL_IDLECFG_SHIFT)) & LPUART_CTRL_IDLECFG_MASK) +#define LPUART_CTRL_MA2IE_MASK (0x4000U) +#define LPUART_CTRL_MA2IE_SHIFT (14U) +#define LPUART_CTRL_MA2IE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_CTRL_MA2IE_SHIFT)) & LPUART_CTRL_MA2IE_MASK) +#define LPUART_CTRL_MA1IE_MASK (0x8000U) +#define LPUART_CTRL_MA1IE_SHIFT (15U) +#define LPUART_CTRL_MA1IE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_CTRL_MA1IE_SHIFT)) & LPUART_CTRL_MA1IE_MASK) +#define LPUART_CTRL_SBK_MASK (0x10000U) +#define LPUART_CTRL_SBK_SHIFT (16U) +#define LPUART_CTRL_SBK(x) (((uint32_t)(((uint32_t)(x)) << LPUART_CTRL_SBK_SHIFT)) & LPUART_CTRL_SBK_MASK) +#define LPUART_CTRL_RWU_MASK (0x20000U) +#define LPUART_CTRL_RWU_SHIFT (17U) +#define LPUART_CTRL_RWU(x) (((uint32_t)(((uint32_t)(x)) << LPUART_CTRL_RWU_SHIFT)) & LPUART_CTRL_RWU_MASK) +#define LPUART_CTRL_RE_MASK (0x40000U) +#define LPUART_CTRL_RE_SHIFT (18U) +#define LPUART_CTRL_RE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_CTRL_RE_SHIFT)) & LPUART_CTRL_RE_MASK) +#define LPUART_CTRL_TE_MASK (0x80000U) +#define LPUART_CTRL_TE_SHIFT (19U) +#define LPUART_CTRL_TE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_CTRL_TE_SHIFT)) & LPUART_CTRL_TE_MASK) +#define LPUART_CTRL_ILIE_MASK (0x100000U) +#define LPUART_CTRL_ILIE_SHIFT (20U) +#define LPUART_CTRL_ILIE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_CTRL_ILIE_SHIFT)) & LPUART_CTRL_ILIE_MASK) +#define LPUART_CTRL_RIE_MASK (0x200000U) +#define LPUART_CTRL_RIE_SHIFT (21U) +#define LPUART_CTRL_RIE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_CTRL_RIE_SHIFT)) & LPUART_CTRL_RIE_MASK) +#define LPUART_CTRL_TCIE_MASK (0x400000U) +#define LPUART_CTRL_TCIE_SHIFT (22U) +#define LPUART_CTRL_TCIE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_CTRL_TCIE_SHIFT)) & LPUART_CTRL_TCIE_MASK) +#define LPUART_CTRL_TIE_MASK (0x800000U) +#define LPUART_CTRL_TIE_SHIFT (23U) +#define LPUART_CTRL_TIE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_CTRL_TIE_SHIFT)) & LPUART_CTRL_TIE_MASK) +#define LPUART_CTRL_PEIE_MASK (0x1000000U) +#define LPUART_CTRL_PEIE_SHIFT (24U) +#define LPUART_CTRL_PEIE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_CTRL_PEIE_SHIFT)) & LPUART_CTRL_PEIE_MASK) +#define LPUART_CTRL_FEIE_MASK (0x2000000U) +#define LPUART_CTRL_FEIE_SHIFT (25U) +#define LPUART_CTRL_FEIE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_CTRL_FEIE_SHIFT)) & LPUART_CTRL_FEIE_MASK) +#define LPUART_CTRL_NEIE_MASK (0x4000000U) +#define LPUART_CTRL_NEIE_SHIFT (26U) +#define LPUART_CTRL_NEIE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_CTRL_NEIE_SHIFT)) & LPUART_CTRL_NEIE_MASK) +#define LPUART_CTRL_ORIE_MASK (0x8000000U) +#define LPUART_CTRL_ORIE_SHIFT (27U) +#define LPUART_CTRL_ORIE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_CTRL_ORIE_SHIFT)) & LPUART_CTRL_ORIE_MASK) +#define LPUART_CTRL_TXINV_MASK (0x10000000U) +#define LPUART_CTRL_TXINV_SHIFT (28U) +#define LPUART_CTRL_TXINV(x) (((uint32_t)(((uint32_t)(x)) << LPUART_CTRL_TXINV_SHIFT)) & LPUART_CTRL_TXINV_MASK) +#define LPUART_CTRL_TXDIR_MASK (0x20000000U) +#define LPUART_CTRL_TXDIR_SHIFT (29U) +#define LPUART_CTRL_TXDIR(x) (((uint32_t)(((uint32_t)(x)) << LPUART_CTRL_TXDIR_SHIFT)) & LPUART_CTRL_TXDIR_MASK) +#define LPUART_CTRL_R9T8_MASK (0x40000000U) +#define LPUART_CTRL_R9T8_SHIFT (30U) +#define LPUART_CTRL_R9T8(x) (((uint32_t)(((uint32_t)(x)) << LPUART_CTRL_R9T8_SHIFT)) & LPUART_CTRL_R9T8_MASK) +#define LPUART_CTRL_R8T9_MASK (0x80000000U) +#define LPUART_CTRL_R8T9_SHIFT (31U) +#define LPUART_CTRL_R8T9(x) (((uint32_t)(((uint32_t)(x)) << LPUART_CTRL_R8T9_SHIFT)) & LPUART_CTRL_R8T9_MASK) + +/*! @name DATA - LPUART Data Register */ +#define LPUART_DATA_R0T0_MASK (0x1U) +#define LPUART_DATA_R0T0_SHIFT (0U) +#define LPUART_DATA_R0T0(x) (((uint32_t)(((uint32_t)(x)) << LPUART_DATA_R0T0_SHIFT)) & LPUART_DATA_R0T0_MASK) +#define LPUART_DATA_R1T1_MASK (0x2U) +#define LPUART_DATA_R1T1_SHIFT (1U) +#define LPUART_DATA_R1T1(x) (((uint32_t)(((uint32_t)(x)) << LPUART_DATA_R1T1_SHIFT)) & LPUART_DATA_R1T1_MASK) +#define LPUART_DATA_R2T2_MASK (0x4U) +#define LPUART_DATA_R2T2_SHIFT (2U) +#define LPUART_DATA_R2T2(x) (((uint32_t)(((uint32_t)(x)) << LPUART_DATA_R2T2_SHIFT)) & LPUART_DATA_R2T2_MASK) +#define LPUART_DATA_R3T3_MASK (0x8U) +#define LPUART_DATA_R3T3_SHIFT (3U) +#define LPUART_DATA_R3T3(x) (((uint32_t)(((uint32_t)(x)) << LPUART_DATA_R3T3_SHIFT)) & LPUART_DATA_R3T3_MASK) +#define LPUART_DATA_R4T4_MASK (0x10U) +#define LPUART_DATA_R4T4_SHIFT (4U) +#define LPUART_DATA_R4T4(x) (((uint32_t)(((uint32_t)(x)) << LPUART_DATA_R4T4_SHIFT)) & LPUART_DATA_R4T4_MASK) +#define LPUART_DATA_R5T5_MASK (0x20U) +#define LPUART_DATA_R5T5_SHIFT (5U) +#define LPUART_DATA_R5T5(x) (((uint32_t)(((uint32_t)(x)) << LPUART_DATA_R5T5_SHIFT)) & LPUART_DATA_R5T5_MASK) +#define LPUART_DATA_R6T6_MASK (0x40U) +#define LPUART_DATA_R6T6_SHIFT (6U) +#define LPUART_DATA_R6T6(x) (((uint32_t)(((uint32_t)(x)) << LPUART_DATA_R6T6_SHIFT)) & LPUART_DATA_R6T6_MASK) +#define LPUART_DATA_R7T7_MASK (0x80U) +#define LPUART_DATA_R7T7_SHIFT (7U) +#define LPUART_DATA_R7T7(x) (((uint32_t)(((uint32_t)(x)) << LPUART_DATA_R7T7_SHIFT)) & LPUART_DATA_R7T7_MASK) +#define LPUART_DATA_R8T8_MASK (0x100U) +#define LPUART_DATA_R8T8_SHIFT (8U) +#define LPUART_DATA_R8T8(x) (((uint32_t)(((uint32_t)(x)) << LPUART_DATA_R8T8_SHIFT)) & LPUART_DATA_R8T8_MASK) +#define LPUART_DATA_R9T9_MASK (0x200U) +#define LPUART_DATA_R9T9_SHIFT (9U) +#define LPUART_DATA_R9T9(x) (((uint32_t)(((uint32_t)(x)) << LPUART_DATA_R9T9_SHIFT)) & LPUART_DATA_R9T9_MASK) +#define LPUART_DATA_IDLINE_MASK (0x800U) +#define LPUART_DATA_IDLINE_SHIFT (11U) +#define LPUART_DATA_IDLINE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_DATA_IDLINE_SHIFT)) & LPUART_DATA_IDLINE_MASK) +#define LPUART_DATA_RXEMPT_MASK (0x1000U) +#define LPUART_DATA_RXEMPT_SHIFT (12U) +#define LPUART_DATA_RXEMPT(x) (((uint32_t)(((uint32_t)(x)) << LPUART_DATA_RXEMPT_SHIFT)) & LPUART_DATA_RXEMPT_MASK) +#define LPUART_DATA_FRETSC_MASK (0x2000U) +#define LPUART_DATA_FRETSC_SHIFT (13U) +#define LPUART_DATA_FRETSC(x) (((uint32_t)(((uint32_t)(x)) << LPUART_DATA_FRETSC_SHIFT)) & LPUART_DATA_FRETSC_MASK) +#define LPUART_DATA_PARITYE_MASK (0x4000U) +#define LPUART_DATA_PARITYE_SHIFT (14U) +#define LPUART_DATA_PARITYE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_DATA_PARITYE_SHIFT)) & LPUART_DATA_PARITYE_MASK) +#define LPUART_DATA_NOISY_MASK (0x8000U) +#define LPUART_DATA_NOISY_SHIFT (15U) +#define LPUART_DATA_NOISY(x) (((uint32_t)(((uint32_t)(x)) << LPUART_DATA_NOISY_SHIFT)) & LPUART_DATA_NOISY_MASK) + +/*! @name MATCH - LPUART Match Address Register */ +#define LPUART_MATCH_MA1_MASK (0x3FFU) +#define LPUART_MATCH_MA1_SHIFT (0U) +#define LPUART_MATCH_MA1(x) (((uint32_t)(((uint32_t)(x)) << LPUART_MATCH_MA1_SHIFT)) & LPUART_MATCH_MA1_MASK) +#define LPUART_MATCH_MA2_MASK (0x3FF0000U) +#define LPUART_MATCH_MA2_SHIFT (16U) +#define LPUART_MATCH_MA2(x) (((uint32_t)(((uint32_t)(x)) << LPUART_MATCH_MA2_SHIFT)) & LPUART_MATCH_MA2_MASK) + +/*! @name MODIR - LPUART Modem IrDA Register */ +#define LPUART_MODIR_TXCTSE_MASK (0x1U) +#define LPUART_MODIR_TXCTSE_SHIFT (0U) +#define LPUART_MODIR_TXCTSE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_MODIR_TXCTSE_SHIFT)) & LPUART_MODIR_TXCTSE_MASK) +#define LPUART_MODIR_TXRTSE_MASK (0x2U) +#define LPUART_MODIR_TXRTSE_SHIFT (1U) +#define LPUART_MODIR_TXRTSE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_MODIR_TXRTSE_SHIFT)) & LPUART_MODIR_TXRTSE_MASK) +#define LPUART_MODIR_TXRTSPOL_MASK (0x4U) +#define LPUART_MODIR_TXRTSPOL_SHIFT (2U) +#define LPUART_MODIR_TXRTSPOL(x) (((uint32_t)(((uint32_t)(x)) << LPUART_MODIR_TXRTSPOL_SHIFT)) & LPUART_MODIR_TXRTSPOL_MASK) +#define LPUART_MODIR_RXRTSE_MASK (0x8U) +#define LPUART_MODIR_RXRTSE_SHIFT (3U) +#define LPUART_MODIR_RXRTSE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_MODIR_RXRTSE_SHIFT)) & LPUART_MODIR_RXRTSE_MASK) +#define LPUART_MODIR_TXCTSC_MASK (0x10U) +#define LPUART_MODIR_TXCTSC_SHIFT (4U) +#define LPUART_MODIR_TXCTSC(x) (((uint32_t)(((uint32_t)(x)) << LPUART_MODIR_TXCTSC_SHIFT)) & LPUART_MODIR_TXCTSC_MASK) +#define LPUART_MODIR_TXCTSSRC_MASK (0x20U) +#define LPUART_MODIR_TXCTSSRC_SHIFT (5U) +#define LPUART_MODIR_TXCTSSRC(x) (((uint32_t)(((uint32_t)(x)) << LPUART_MODIR_TXCTSSRC_SHIFT)) & LPUART_MODIR_TXCTSSRC_MASK) +#define LPUART_MODIR_RTSWATER_MASK (0xFF00U) +#define LPUART_MODIR_RTSWATER_SHIFT (8U) +#define LPUART_MODIR_RTSWATER(x) (((uint32_t)(((uint32_t)(x)) << LPUART_MODIR_RTSWATER_SHIFT)) & LPUART_MODIR_RTSWATER_MASK) +#define LPUART_MODIR_TNP_MASK (0x30000U) +#define LPUART_MODIR_TNP_SHIFT (16U) +#define LPUART_MODIR_TNP(x) (((uint32_t)(((uint32_t)(x)) << LPUART_MODIR_TNP_SHIFT)) & LPUART_MODIR_TNP_MASK) +#define LPUART_MODIR_IREN_MASK (0x40000U) +#define LPUART_MODIR_IREN_SHIFT (18U) +#define LPUART_MODIR_IREN(x) (((uint32_t)(((uint32_t)(x)) << LPUART_MODIR_IREN_SHIFT)) & LPUART_MODIR_IREN_MASK) + +/*! @name FIFO - LPUART FIFO Register */ +#define LPUART_FIFO_RXFIFOSIZE_MASK (0x7U) +#define LPUART_FIFO_RXFIFOSIZE_SHIFT (0U) +#define LPUART_FIFO_RXFIFOSIZE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_FIFO_RXFIFOSIZE_SHIFT)) & LPUART_FIFO_RXFIFOSIZE_MASK) +#define LPUART_FIFO_RXFE_MASK (0x8U) +#define LPUART_FIFO_RXFE_SHIFT (3U) +#define LPUART_FIFO_RXFE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_FIFO_RXFE_SHIFT)) & LPUART_FIFO_RXFE_MASK) +#define LPUART_FIFO_TXFIFOSIZE_MASK (0x70U) +#define LPUART_FIFO_TXFIFOSIZE_SHIFT (4U) +#define LPUART_FIFO_TXFIFOSIZE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_FIFO_TXFIFOSIZE_SHIFT)) & LPUART_FIFO_TXFIFOSIZE_MASK) +#define LPUART_FIFO_TXFE_MASK (0x80U) +#define LPUART_FIFO_TXFE_SHIFT (7U) +#define LPUART_FIFO_TXFE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_FIFO_TXFE_SHIFT)) & LPUART_FIFO_TXFE_MASK) +#define LPUART_FIFO_RXUFE_MASK (0x100U) +#define LPUART_FIFO_RXUFE_SHIFT (8U) +#define LPUART_FIFO_RXUFE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_FIFO_RXUFE_SHIFT)) & LPUART_FIFO_RXUFE_MASK) +#define LPUART_FIFO_TXOFE_MASK (0x200U) +#define LPUART_FIFO_TXOFE_SHIFT (9U) +#define LPUART_FIFO_TXOFE(x) (((uint32_t)(((uint32_t)(x)) << LPUART_FIFO_TXOFE_SHIFT)) & LPUART_FIFO_TXOFE_MASK) +#define LPUART_FIFO_RXIDEN_MASK (0x1C00U) +#define LPUART_FIFO_RXIDEN_SHIFT (10U) +#define LPUART_FIFO_RXIDEN(x) (((uint32_t)(((uint32_t)(x)) << LPUART_FIFO_RXIDEN_SHIFT)) & LPUART_FIFO_RXIDEN_MASK) +#define LPUART_FIFO_RXFLUSH_MASK (0x4000U) +#define LPUART_FIFO_RXFLUSH_SHIFT (14U) +#define LPUART_FIFO_RXFLUSH(x) (((uint32_t)(((uint32_t)(x)) << LPUART_FIFO_RXFLUSH_SHIFT)) & LPUART_FIFO_RXFLUSH_MASK) +#define LPUART_FIFO_TXFLUSH_MASK (0x8000U) +#define LPUART_FIFO_TXFLUSH_SHIFT (15U) +#define LPUART_FIFO_TXFLUSH(x) (((uint32_t)(((uint32_t)(x)) << LPUART_FIFO_TXFLUSH_SHIFT)) & LPUART_FIFO_TXFLUSH_MASK) +#define LPUART_FIFO_RXUF_MASK (0x10000U) +#define LPUART_FIFO_RXUF_SHIFT (16U) +#define LPUART_FIFO_RXUF(x) (((uint32_t)(((uint32_t)(x)) << LPUART_FIFO_RXUF_SHIFT)) & LPUART_FIFO_RXUF_MASK) +#define LPUART_FIFO_TXOF_MASK (0x20000U) +#define LPUART_FIFO_TXOF_SHIFT (17U) +#define LPUART_FIFO_TXOF(x) (((uint32_t)(((uint32_t)(x)) << LPUART_FIFO_TXOF_SHIFT)) & LPUART_FIFO_TXOF_MASK) +#define LPUART_FIFO_RXEMPT_MASK (0x400000U) +#define LPUART_FIFO_RXEMPT_SHIFT (22U) +#define LPUART_FIFO_RXEMPT(x) (((uint32_t)(((uint32_t)(x)) << LPUART_FIFO_RXEMPT_SHIFT)) & LPUART_FIFO_RXEMPT_MASK) +#define LPUART_FIFO_TXEMPT_MASK (0x800000U) +#define LPUART_FIFO_TXEMPT_SHIFT (23U) +#define LPUART_FIFO_TXEMPT(x) (((uint32_t)(((uint32_t)(x)) << LPUART_FIFO_TXEMPT_SHIFT)) & LPUART_FIFO_TXEMPT_MASK) + +/*! @name WATER - LPUART Watermark Register */ +#define LPUART_WATER_TXWATER_MASK (0xFFU) +#define LPUART_WATER_TXWATER_SHIFT (0U) +#define LPUART_WATER_TXWATER(x) (((uint32_t)(((uint32_t)(x)) << LPUART_WATER_TXWATER_SHIFT)) & LPUART_WATER_TXWATER_MASK) +#define LPUART_WATER_TXCOUNT_MASK (0xFF00U) +#define LPUART_WATER_TXCOUNT_SHIFT (8U) +#define LPUART_WATER_TXCOUNT(x) (((uint32_t)(((uint32_t)(x)) << LPUART_WATER_TXCOUNT_SHIFT)) & LPUART_WATER_TXCOUNT_MASK) +#define LPUART_WATER_RXWATER_MASK (0xFF0000U) +#define LPUART_WATER_RXWATER_SHIFT (16U) +#define LPUART_WATER_RXWATER(x) (((uint32_t)(((uint32_t)(x)) << LPUART_WATER_RXWATER_SHIFT)) & LPUART_WATER_RXWATER_MASK) +#define LPUART_WATER_RXCOUNT_MASK (0xFF000000U) +#define LPUART_WATER_RXCOUNT_SHIFT (24U) +#define LPUART_WATER_RXCOUNT(x) (((uint32_t)(((uint32_t)(x)) << LPUART_WATER_RXCOUNT_SHIFT)) & LPUART_WATER_RXCOUNT_MASK) + + +/*! + * @} + */ /* end of group LPUART_Register_Masks */ + + +/* LPUART - Peripheral instance base addresses */ +/** Peripheral LPUART0 base address */ +#define LPUART0_BASE (0x40054000u) +/** Peripheral LPUART0 base pointer */ +#define LPUART0 ((LPUART_Type *)LPUART0_BASE) +/** Peripheral LPUART1 base address */ +#define LPUART1_BASE (0x40055000u) +/** Peripheral LPUART1 base pointer */ +#define LPUART1 ((LPUART_Type *)LPUART1_BASE) +/** Peripheral LPUART2 base address */ +#define LPUART2_BASE (0x40056000u) +/** Peripheral LPUART2 base pointer */ +#define LPUART2 ((LPUART_Type *)LPUART2_BASE) +/** Array initializer of LPUART peripheral base addresses */ +#define LPUART_BASE_ADDRS { LPUART0_BASE, LPUART1_BASE, LPUART2_BASE } +/** Array initializer of LPUART peripheral base pointers */ +#define LPUART_BASE_PTRS { LPUART0, LPUART1, LPUART2 } +/** Interrupt vectors for the LPUART peripheral type */ +#define LPUART_RX_TX_IRQS { LPUART0_IRQn, LPUART1_IRQn, LPUART2_IRQn } +#define LPUART_ERR_IRQS { LPUART0_IRQn, LPUART1_IRQn, LPUART2_IRQn } + +/*! + * @} + */ /* end of group LPUART_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- LTC Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup LTC_Peripheral_Access_Layer LTC Peripheral Access Layer + * @{ + */ + +/** LTC - Register Layout Typedef */ +typedef struct { + union { /* offset: 0x0 */ + __IO uint32_t MD; /**< LTC Mode Register (non-PKHA/non-RNG use), offset: 0x0 */ + __IO uint32_t MDPK; /**< LTC Mode Register (PublicKey), offset: 0x0 */ + }; + uint8_t RESERVED_0[4]; + __IO uint32_t KS; /**< LTC Key Size Register, offset: 0x8 */ + uint8_t RESERVED_1[4]; + __IO uint32_t DS; /**< LTC Data Size Register, offset: 0x10 */ + uint8_t RESERVED_2[4]; + __IO uint32_t ICVS; /**< LTC ICV Size Register, offset: 0x18 */ + uint8_t RESERVED_3[20]; + __IO uint32_t COM; /**< LTC Command Register, offset: 0x30 */ + __IO uint32_t CTL; /**< LTC Control Register, offset: 0x34 */ + uint8_t RESERVED_4[8]; + __IO uint32_t CW; /**< LTC Clear Written Register, offset: 0x40 */ + uint8_t RESERVED_5[4]; + __IO uint32_t STA; /**< LTC Status Register, offset: 0x48 */ + __I uint32_t ESTA; /**< LTC Error Status Register, offset: 0x4C */ + uint8_t RESERVED_6[8]; + __IO uint32_t AADSZ; /**< LTC AAD Size Register, offset: 0x58 */ + uint8_t RESERVED_7[4]; + __IO uint32_t IVSZ; /**< LTC IV Size Register, offset: 0x60 */ + uint8_t RESERVED_8[4]; + __O uint32_t DPAMS; /**< LTC DPA Mask Seed Register, offset: 0x68 */ + uint8_t RESERVED_9[20]; + __IO uint32_t PKASZ; /**< LTC PKHA A Size Register, offset: 0x80 */ + uint8_t RESERVED_10[4]; + __IO uint32_t PKBSZ; /**< LTC PKHA B Size Register, offset: 0x88 */ + uint8_t RESERVED_11[4]; + __IO uint32_t PKNSZ; /**< LTC PKHA N Size Register, offset: 0x90 */ + uint8_t RESERVED_12[4]; + __IO uint32_t PKESZ; /**< LTC PKHA E Size Register, offset: 0x98 */ + uint8_t RESERVED_13[100]; + __IO uint32_t CTX[16]; /**< LTC Context Register, array offset: 0x100, array step: 0x4 */ + uint8_t RESERVED_14[192]; + __IO uint32_t KEY[8]; /**< LTC Key Registers, array offset: 0x200, array step: 0x4 */ + uint8_t RESERVED_15[720]; + __I uint32_t VID1; /**< LTC Version ID Register, offset: 0x4F0 */ + __I uint32_t VID2; /**< LTC Version ID 2 Register, offset: 0x4F4 */ + __I uint32_t CHAVID; /**< LTC CHA Version ID Register, offset: 0x4F8 */ + uint8_t RESERVED_16[708]; + __I uint32_t FIFOSTA; /**< LTC FIFO Status Register, offset: 0x7C0 */ + uint8_t RESERVED_17[28]; + __O uint32_t IFIFO; /**< LTC Input Data FIFO, offset: 0x7E0 */ + uint8_t RESERVED_18[12]; + __I uint32_t OFIFO; /**< LTC Output Data FIFO, offset: 0x7F0 */ + uint8_t RESERVED_19[12]; + union { /* offset: 0x800 */ + __IO uint32_t PKA[64]; /**< LTC PKHA A 0 Register..LTC PKHA A 63 Register, array offset: 0x800, array step: 0x4 */ + struct { /* offset: 0x800 */ + __IO uint32_t PKA0[16]; /**< LTC PKHA A0 0 Register..LTC PKHA A0 15 Register, array offset: 0x800, array step: 0x4 */ + __IO uint32_t PKA1[16]; /**< LTC PKHA A1 0 Register..LTC PKHA A1 15 Register, array offset: 0x840, array step: 0x4 */ + __IO uint32_t PKA2[16]; /**< LTC PKHA A2 0 Register..LTC PKHA A2 15 Register, array offset: 0x880, array step: 0x4 */ + __IO uint32_t PKA3[16]; /**< LTC PKHA A3 0 Register..LTC PKHA A3 15 Register, array offset: 0x8C0, array step: 0x4 */ + } PKA_SHORT; + }; + uint8_t RESERVED_20[256]; + union { /* offset: 0xA00 */ + __IO uint32_t PKB[64]; /**< LTC PKHA B 0 Register..LTC PKHA B 63 Register, array offset: 0xA00, array step: 0x4 */ + struct { /* offset: 0xA00 */ + __IO uint32_t PKB0[16]; /**< LTC PKHA B0 0 Register..LTC PKHA B0 15 Register, array offset: 0xA00, array step: 0x4 */ + __IO uint32_t PKB1[16]; /**< LTC PKHA B1 0 Register..LTC PKHA B1 15 Register, array offset: 0xA40, array step: 0x4 */ + __IO uint32_t PKB2[16]; /**< LTC PKHA B2 0 Register..LTC PKHA B2 15 Register, array offset: 0xA80, array step: 0x4 */ + __IO uint32_t PKB3[16]; /**< LTC PKHA B3 0 Register..LTC PKHA B3 15 Register, array offset: 0xAC0, array step: 0x4 */ + } PKB_SHORT; + }; + uint8_t RESERVED_21[256]; + union { /* offset: 0xC00 */ + __IO uint32_t PKN[64]; /**< LTC PKHA N 0 Register..LTC PKHA N 63 Register, array offset: 0xC00, array step: 0x4 */ + struct { /* offset: 0xC00 */ + __IO uint32_t PKN0[16]; /**< LTC PKHA N0 0 Register..LTC PKHA N0 15 Register, array offset: 0xC00, array step: 0x4 */ + __IO uint32_t PKN1[16]; /**< LTC PKHA N1 0 Register..LTC PKHA N1 15 Register, array offset: 0xC40, array step: 0x4 */ + __IO uint32_t PKN2[16]; /**< LTC PKHA N2 0 Register..LTC PKHA N2 15 Register, array offset: 0xC80, array step: 0x4 */ + __IO uint32_t PKN3[16]; /**< LTC PKHA N3 0 Register..LTC PKHA N3 15 Register, array offset: 0xCC0, array step: 0x4 */ + } PKN_SHORT; + }; + uint8_t RESERVED_22[256]; + union { /* offset: 0xE00 */ + __IO uint32_t PKE[64]; /**< LTC PKHA E 0 Register..LTC PKHA E 63 Register, array offset: 0xE00, array step: 0x4 */ + struct { /* offset: 0xE00 */ + __IO uint32_t PKE0[16]; /**< LTC PKHA E0 0 Register..LTC PKHA E0 15 Register, array offset: 0xE00, array step: 0x4 */ + __IO uint32_t PKE1[16]; /**< LTC PKHA E1 0 Register..LTC PKHA E1 15 Register, array offset: 0xE40, array step: 0x4 */ + __IO uint32_t PKE2[16]; /**< LTC PKHA E2 0 Register..LTC PKHA E2 15 Register, array offset: 0xE80, array step: 0x4 */ + __IO uint32_t PKE3[16]; /**< LTC PKHA E3 0 Register..LTC PKHA E3 15 Register, array offset: 0xEC0, array step: 0x4 */ + } PKE_SHORT; + }; +} LTC_Type; + +/* ---------------------------------------------------------------------------- + -- LTC Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup LTC_Register_Masks LTC Register Masks + * @{ + */ + +/*! @name MD - LTC Mode Register (non-PKHA/non-RNG use) */ +#define LTC_MD_ENC_MASK (0x1U) +#define LTC_MD_ENC_SHIFT (0U) +#define LTC_MD_ENC(x) (((uint32_t)(((uint32_t)(x)) << LTC_MD_ENC_SHIFT)) & LTC_MD_ENC_MASK) +#define LTC_MD_ICV_TEST_MASK (0x2U) +#define LTC_MD_ICV_TEST_SHIFT (1U) +#define LTC_MD_ICV_TEST(x) (((uint32_t)(((uint32_t)(x)) << LTC_MD_ICV_TEST_SHIFT)) & LTC_MD_ICV_TEST_MASK) +#define LTC_MD_AS_MASK (0xCU) +#define LTC_MD_AS_SHIFT (2U) +#define LTC_MD_AS(x) (((uint32_t)(((uint32_t)(x)) << LTC_MD_AS_SHIFT)) & LTC_MD_AS_MASK) +#define LTC_MD_AAI_MASK (0x1FF0U) +#define LTC_MD_AAI_SHIFT (4U) +#define LTC_MD_AAI(x) (((uint32_t)(((uint32_t)(x)) << LTC_MD_AAI_SHIFT)) & LTC_MD_AAI_MASK) +#define LTC_MD_ALG_MASK (0xFF0000U) +#define LTC_MD_ALG_SHIFT (16U) +#define LTC_MD_ALG(x) (((uint32_t)(((uint32_t)(x)) << LTC_MD_ALG_SHIFT)) & LTC_MD_ALG_MASK) + +/*! @name MDPK - LTC Mode Register (PublicKey) */ +#define LTC_MDPK_PKHA_MODE_LS_MASK (0xFFFU) +#define LTC_MDPK_PKHA_MODE_LS_SHIFT (0U) +#define LTC_MDPK_PKHA_MODE_LS(x) (((uint32_t)(((uint32_t)(x)) << LTC_MDPK_PKHA_MODE_LS_SHIFT)) & LTC_MDPK_PKHA_MODE_LS_MASK) +#define LTC_MDPK_PKHA_MODE_MS_MASK (0xF0000U) +#define LTC_MDPK_PKHA_MODE_MS_SHIFT (16U) +#define LTC_MDPK_PKHA_MODE_MS(x) (((uint32_t)(((uint32_t)(x)) << LTC_MDPK_PKHA_MODE_MS_SHIFT)) & LTC_MDPK_PKHA_MODE_MS_MASK) +#define LTC_MDPK_ALG_MASK (0xF00000U) +#define LTC_MDPK_ALG_SHIFT (20U) +#define LTC_MDPK_ALG(x) (((uint32_t)(((uint32_t)(x)) << LTC_MDPK_ALG_SHIFT)) & LTC_MDPK_ALG_MASK) + +/*! @name KS - LTC Key Size Register */ +#define LTC_KS_KS_MASK (0x3FU) +#define LTC_KS_KS_SHIFT (0U) +#define LTC_KS_KS(x) (((uint32_t)(((uint32_t)(x)) << LTC_KS_KS_SHIFT)) & LTC_KS_KS_MASK) + +/*! @name DS - LTC Data Size Register */ +#define LTC_DS_DS_MASK (0xFFFU) +#define LTC_DS_DS_SHIFT (0U) +#define LTC_DS_DS(x) (((uint32_t)(((uint32_t)(x)) << LTC_DS_DS_SHIFT)) & LTC_DS_DS_MASK) + +/*! @name ICVS - LTC ICV Size Register */ +#define LTC_ICVS_ICVS_MASK (0x1FU) +#define LTC_ICVS_ICVS_SHIFT (0U) +#define LTC_ICVS_ICVS(x) (((uint32_t)(((uint32_t)(x)) << LTC_ICVS_ICVS_SHIFT)) & LTC_ICVS_ICVS_MASK) + +/*! @name COM - LTC Command Register */ +#define LTC_COM_ALL_MASK (0x1U) +#define LTC_COM_ALL_SHIFT (0U) +#define LTC_COM_ALL(x) (((uint32_t)(((uint32_t)(x)) << LTC_COM_ALL_SHIFT)) & LTC_COM_ALL_MASK) +#define LTC_COM_AES_MASK (0x2U) +#define LTC_COM_AES_SHIFT (1U) +#define LTC_COM_AES(x) (((uint32_t)(((uint32_t)(x)) << LTC_COM_AES_SHIFT)) & LTC_COM_AES_MASK) +#define LTC_COM_DES_MASK (0x4U) +#define LTC_COM_DES_SHIFT (2U) +#define LTC_COM_DES(x) (((uint32_t)(((uint32_t)(x)) << LTC_COM_DES_SHIFT)) & LTC_COM_DES_MASK) +#define LTC_COM_PK_MASK (0x40U) +#define LTC_COM_PK_SHIFT (6U) +#define LTC_COM_PK(x) (((uint32_t)(((uint32_t)(x)) << LTC_COM_PK_SHIFT)) & LTC_COM_PK_MASK) +#define LTC_COM_MD_MASK (0x80U) +#define LTC_COM_MD_SHIFT (7U) +#define LTC_COM_MD(x) (((uint32_t)(((uint32_t)(x)) << LTC_COM_MD_SHIFT)) & LTC_COM_MD_MASK) + +/*! @name CTL - LTC Control Register */ +#define LTC_CTL_IM_MASK (0x1U) +#define LTC_CTL_IM_SHIFT (0U) +#define LTC_CTL_IM(x) (((uint32_t)(((uint32_t)(x)) << LTC_CTL_IM_SHIFT)) & LTC_CTL_IM_MASK) +#define LTC_CTL_PDE_MASK (0x10U) +#define LTC_CTL_PDE_SHIFT (4U) +#define LTC_CTL_PDE(x) (((uint32_t)(((uint32_t)(x)) << LTC_CTL_PDE_SHIFT)) & LTC_CTL_PDE_MASK) +#define LTC_CTL_IFE_MASK (0x100U) +#define LTC_CTL_IFE_SHIFT (8U) +#define LTC_CTL_IFE(x) (((uint32_t)(((uint32_t)(x)) << LTC_CTL_IFE_SHIFT)) & LTC_CTL_IFE_MASK) +#define LTC_CTL_IFR_MASK (0x200U) +#define LTC_CTL_IFR_SHIFT (9U) +#define LTC_CTL_IFR(x) (((uint32_t)(((uint32_t)(x)) << LTC_CTL_IFR_SHIFT)) & LTC_CTL_IFR_MASK) +#define LTC_CTL_OFE_MASK (0x1000U) +#define LTC_CTL_OFE_SHIFT (12U) +#define LTC_CTL_OFE(x) (((uint32_t)(((uint32_t)(x)) << LTC_CTL_OFE_SHIFT)) & LTC_CTL_OFE_MASK) +#define LTC_CTL_OFR_MASK (0x2000U) +#define LTC_CTL_OFR_SHIFT (13U) +#define LTC_CTL_OFR(x) (((uint32_t)(((uint32_t)(x)) << LTC_CTL_OFR_SHIFT)) & LTC_CTL_OFR_MASK) +#define LTC_CTL_IFS_MASK (0x10000U) +#define LTC_CTL_IFS_SHIFT (16U) +#define LTC_CTL_IFS(x) (((uint32_t)(((uint32_t)(x)) << LTC_CTL_IFS_SHIFT)) & LTC_CTL_IFS_MASK) +#define LTC_CTL_OFS_MASK (0x20000U) +#define LTC_CTL_OFS_SHIFT (17U) +#define LTC_CTL_OFS(x) (((uint32_t)(((uint32_t)(x)) << LTC_CTL_OFS_SHIFT)) & LTC_CTL_OFS_MASK) +#define LTC_CTL_KIS_MASK (0x100000U) +#define LTC_CTL_KIS_SHIFT (20U) +#define LTC_CTL_KIS(x) (((uint32_t)(((uint32_t)(x)) << LTC_CTL_KIS_SHIFT)) & LTC_CTL_KIS_MASK) +#define LTC_CTL_KOS_MASK (0x200000U) +#define LTC_CTL_KOS_SHIFT (21U) +#define LTC_CTL_KOS(x) (((uint32_t)(((uint32_t)(x)) << LTC_CTL_KOS_SHIFT)) & LTC_CTL_KOS_MASK) +#define LTC_CTL_CIS_MASK (0x400000U) +#define LTC_CTL_CIS_SHIFT (22U) +#define LTC_CTL_CIS(x) (((uint32_t)(((uint32_t)(x)) << LTC_CTL_CIS_SHIFT)) & LTC_CTL_CIS_MASK) +#define LTC_CTL_COS_MASK (0x800000U) +#define LTC_CTL_COS_SHIFT (23U) +#define LTC_CTL_COS(x) (((uint32_t)(((uint32_t)(x)) << LTC_CTL_COS_SHIFT)) & LTC_CTL_COS_MASK) +#define LTC_CTL_KAL_MASK (0x80000000U) +#define LTC_CTL_KAL_SHIFT (31U) +#define LTC_CTL_KAL(x) (((uint32_t)(((uint32_t)(x)) << LTC_CTL_KAL_SHIFT)) & LTC_CTL_KAL_MASK) + +/*! @name CW - LTC Clear Written Register */ +#define LTC_CW_CM_MASK (0x1U) +#define LTC_CW_CM_SHIFT (0U) +#define LTC_CW_CM(x) (((uint32_t)(((uint32_t)(x)) << LTC_CW_CM_SHIFT)) & LTC_CW_CM_MASK) +#define LTC_CW_CDS_MASK (0x4U) +#define LTC_CW_CDS_SHIFT (2U) +#define LTC_CW_CDS(x) (((uint32_t)(((uint32_t)(x)) << LTC_CW_CDS_SHIFT)) & LTC_CW_CDS_MASK) +#define LTC_CW_CICV_MASK (0x8U) +#define LTC_CW_CICV_SHIFT (3U) +#define LTC_CW_CICV(x) (((uint32_t)(((uint32_t)(x)) << LTC_CW_CICV_SHIFT)) & LTC_CW_CICV_MASK) +#define LTC_CW_CCR_MASK (0x20U) +#define LTC_CW_CCR_SHIFT (5U) +#define LTC_CW_CCR(x) (((uint32_t)(((uint32_t)(x)) << LTC_CW_CCR_SHIFT)) & LTC_CW_CCR_MASK) +#define LTC_CW_CKR_MASK (0x40U) +#define LTC_CW_CKR_SHIFT (6U) +#define LTC_CW_CKR(x) (((uint32_t)(((uint32_t)(x)) << LTC_CW_CKR_SHIFT)) & LTC_CW_CKR_MASK) +#define LTC_CW_CPKA_MASK (0x1000U) +#define LTC_CW_CPKA_SHIFT (12U) +#define LTC_CW_CPKA(x) (((uint32_t)(((uint32_t)(x)) << LTC_CW_CPKA_SHIFT)) & LTC_CW_CPKA_MASK) +#define LTC_CW_CPKB_MASK (0x2000U) +#define LTC_CW_CPKB_SHIFT (13U) +#define LTC_CW_CPKB(x) (((uint32_t)(((uint32_t)(x)) << LTC_CW_CPKB_SHIFT)) & LTC_CW_CPKB_MASK) +#define LTC_CW_CPKN_MASK (0x4000U) +#define LTC_CW_CPKN_SHIFT (14U) +#define LTC_CW_CPKN(x) (((uint32_t)(((uint32_t)(x)) << LTC_CW_CPKN_SHIFT)) & LTC_CW_CPKN_MASK) +#define LTC_CW_CPKE_MASK (0x8000U) +#define LTC_CW_CPKE_SHIFT (15U) +#define LTC_CW_CPKE(x) (((uint32_t)(((uint32_t)(x)) << LTC_CW_CPKE_SHIFT)) & LTC_CW_CPKE_MASK) +#define LTC_CW_COF_MASK (0x40000000U) +#define LTC_CW_COF_SHIFT (30U) +#define LTC_CW_COF(x) (((uint32_t)(((uint32_t)(x)) << LTC_CW_COF_SHIFT)) & LTC_CW_COF_MASK) +#define LTC_CW_CIF_MASK (0x80000000U) +#define LTC_CW_CIF_SHIFT (31U) +#define LTC_CW_CIF(x) (((uint32_t)(((uint32_t)(x)) << LTC_CW_CIF_SHIFT)) & LTC_CW_CIF_MASK) + +/*! @name STA - LTC Status Register */ +#define LTC_STA_AB_MASK (0x2U) +#define LTC_STA_AB_SHIFT (1U) +#define LTC_STA_AB(x) (((uint32_t)(((uint32_t)(x)) << LTC_STA_AB_SHIFT)) & LTC_STA_AB_MASK) +#define LTC_STA_DB_MASK (0x4U) +#define LTC_STA_DB_SHIFT (2U) +#define LTC_STA_DB(x) (((uint32_t)(((uint32_t)(x)) << LTC_STA_DB_SHIFT)) & LTC_STA_DB_MASK) +#define LTC_STA_PB_MASK (0x40U) +#define LTC_STA_PB_SHIFT (6U) +#define LTC_STA_PB(x) (((uint32_t)(((uint32_t)(x)) << LTC_STA_PB_SHIFT)) & LTC_STA_PB_MASK) +#define LTC_STA_MB_MASK (0x80U) +#define LTC_STA_MB_SHIFT (7U) +#define LTC_STA_MB(x) (((uint32_t)(((uint32_t)(x)) << LTC_STA_MB_SHIFT)) & LTC_STA_MB_MASK) +#define LTC_STA_DI_MASK (0x10000U) +#define LTC_STA_DI_SHIFT (16U) +#define LTC_STA_DI(x) (((uint32_t)(((uint32_t)(x)) << LTC_STA_DI_SHIFT)) & LTC_STA_DI_MASK) +#define LTC_STA_EI_MASK (0x100000U) +#define LTC_STA_EI_SHIFT (20U) +#define LTC_STA_EI(x) (((uint32_t)(((uint32_t)(x)) << LTC_STA_EI_SHIFT)) & LTC_STA_EI_MASK) +#define LTC_STA_DPARRN_MASK (0x1000000U) +#define LTC_STA_DPARRN_SHIFT (24U) +#define LTC_STA_DPARRN(x) (((uint32_t)(((uint32_t)(x)) << LTC_STA_DPARRN_SHIFT)) & LTC_STA_DPARRN_MASK) +#define LTC_STA_PKP_MASK (0x10000000U) +#define LTC_STA_PKP_SHIFT (28U) +#define LTC_STA_PKP(x) (((uint32_t)(((uint32_t)(x)) << LTC_STA_PKP_SHIFT)) & LTC_STA_PKP_MASK) +#define LTC_STA_PKO_MASK (0x20000000U) +#define LTC_STA_PKO_SHIFT (29U) +#define LTC_STA_PKO(x) (((uint32_t)(((uint32_t)(x)) << LTC_STA_PKO_SHIFT)) & LTC_STA_PKO_MASK) +#define LTC_STA_PKZ_MASK (0x40000000U) +#define LTC_STA_PKZ_SHIFT (30U) +#define LTC_STA_PKZ(x) (((uint32_t)(((uint32_t)(x)) << LTC_STA_PKZ_SHIFT)) & LTC_STA_PKZ_MASK) + +/*! @name ESTA - LTC Error Status Register */ +#define LTC_ESTA_ERRID1_MASK (0xFU) +#define LTC_ESTA_ERRID1_SHIFT (0U) +#define LTC_ESTA_ERRID1(x) (((uint32_t)(((uint32_t)(x)) << LTC_ESTA_ERRID1_SHIFT)) & LTC_ESTA_ERRID1_MASK) +#define LTC_ESTA_CL1_MASK (0xF00U) +#define LTC_ESTA_CL1_SHIFT (8U) +#define LTC_ESTA_CL1(x) (((uint32_t)(((uint32_t)(x)) << LTC_ESTA_CL1_SHIFT)) & LTC_ESTA_CL1_MASK) + +/*! @name AADSZ - LTC AAD Size Register */ +#define LTC_AADSZ_AADSZ_MASK (0xFU) +#define LTC_AADSZ_AADSZ_SHIFT (0U) +#define LTC_AADSZ_AADSZ(x) (((uint32_t)(((uint32_t)(x)) << LTC_AADSZ_AADSZ_SHIFT)) & LTC_AADSZ_AADSZ_MASK) +#define LTC_AADSZ_AL_MASK (0x80000000U) +#define LTC_AADSZ_AL_SHIFT (31U) +#define LTC_AADSZ_AL(x) (((uint32_t)(((uint32_t)(x)) << LTC_AADSZ_AL_SHIFT)) & LTC_AADSZ_AL_MASK) + +/*! @name IVSZ - LTC IV Size Register */ +#define LTC_IVSZ_IVSZ_MASK (0xFU) +#define LTC_IVSZ_IVSZ_SHIFT (0U) +#define LTC_IVSZ_IVSZ(x) (((uint32_t)(((uint32_t)(x)) << LTC_IVSZ_IVSZ_SHIFT)) & LTC_IVSZ_IVSZ_MASK) +#define LTC_IVSZ_IL_MASK (0x80000000U) +#define LTC_IVSZ_IL_SHIFT (31U) +#define LTC_IVSZ_IL(x) (((uint32_t)(((uint32_t)(x)) << LTC_IVSZ_IL_SHIFT)) & LTC_IVSZ_IL_MASK) + +/*! @name DPAMS - LTC DPA Mask Seed Register */ +#define LTC_DPAMS_DPAMS_MASK (0xFFFFFFFFU) +#define LTC_DPAMS_DPAMS_SHIFT (0U) +#define LTC_DPAMS_DPAMS(x) (((uint32_t)(((uint32_t)(x)) << LTC_DPAMS_DPAMS_SHIFT)) & LTC_DPAMS_DPAMS_MASK) + +/*! @name PKASZ - LTC PKHA A Size Register */ +#define LTC_PKASZ_PKASZ_MASK (0x1FFU) +#define LTC_PKASZ_PKASZ_SHIFT (0U) +#define LTC_PKASZ_PKASZ(x) (((uint32_t)(((uint32_t)(x)) << LTC_PKASZ_PKASZ_SHIFT)) & LTC_PKASZ_PKASZ_MASK) + +/*! @name PKBSZ - LTC PKHA B Size Register */ +#define LTC_PKBSZ_PKBSZ_MASK (0x1FFU) +#define LTC_PKBSZ_PKBSZ_SHIFT (0U) +#define LTC_PKBSZ_PKBSZ(x) (((uint32_t)(((uint32_t)(x)) << LTC_PKBSZ_PKBSZ_SHIFT)) & LTC_PKBSZ_PKBSZ_MASK) + +/*! @name PKNSZ - LTC PKHA N Size Register */ +#define LTC_PKNSZ_PKNSZ_MASK (0x1FFU) +#define LTC_PKNSZ_PKNSZ_SHIFT (0U) +#define LTC_PKNSZ_PKNSZ(x) (((uint32_t)(((uint32_t)(x)) << LTC_PKNSZ_PKNSZ_SHIFT)) & LTC_PKNSZ_PKNSZ_MASK) + +/*! @name PKESZ - LTC PKHA E Size Register */ +#define LTC_PKESZ_PKESZ_MASK (0x1FFU) +#define LTC_PKESZ_PKESZ_SHIFT (0U) +#define LTC_PKESZ_PKESZ(x) (((uint32_t)(((uint32_t)(x)) << LTC_PKESZ_PKESZ_SHIFT)) & LTC_PKESZ_PKESZ_MASK) + +/*! @name CTX - LTC Context Register */ +#define LTC_CTX_CTX_MASK (0xFFFFFFFFU) +#define LTC_CTX_CTX_SHIFT (0U) +#define LTC_CTX_CTX(x) (((uint32_t)(((uint32_t)(x)) << LTC_CTX_CTX_SHIFT)) & LTC_CTX_CTX_MASK) + +/* The count of LTC_CTX */ +#define LTC_CTX_COUNT (16U) + +/*! @name KEY - LTC Key Registers */ +#define LTC_KEY_KEY_MASK (0xFFFFFFFFU) +#define LTC_KEY_KEY_SHIFT (0U) +#define LTC_KEY_KEY(x) (((uint32_t)(((uint32_t)(x)) << LTC_KEY_KEY_SHIFT)) & LTC_KEY_KEY_MASK) + +/* The count of LTC_KEY */ +#define LTC_KEY_COUNT (8U) + +/*! @name VID1 - LTC Version ID Register */ +#define LTC_VID1_MIN_REV_MASK (0xFFU) +#define LTC_VID1_MIN_REV_SHIFT (0U) +#define LTC_VID1_MIN_REV(x) (((uint32_t)(((uint32_t)(x)) << LTC_VID1_MIN_REV_SHIFT)) & LTC_VID1_MIN_REV_MASK) +#define LTC_VID1_MAJ_REV_MASK (0xFF00U) +#define LTC_VID1_MAJ_REV_SHIFT (8U) +#define LTC_VID1_MAJ_REV(x) (((uint32_t)(((uint32_t)(x)) << LTC_VID1_MAJ_REV_SHIFT)) & LTC_VID1_MAJ_REV_MASK) +#define LTC_VID1_IP_ID_MASK (0xFFFF0000U) +#define LTC_VID1_IP_ID_SHIFT (16U) +#define LTC_VID1_IP_ID(x) (((uint32_t)(((uint32_t)(x)) << LTC_VID1_IP_ID_SHIFT)) & LTC_VID1_IP_ID_MASK) + +/*! @name VID2 - LTC Version ID 2 Register */ +#define LTC_VID2_ECO_REV_MASK (0xFFU) +#define LTC_VID2_ECO_REV_SHIFT (0U) +#define LTC_VID2_ECO_REV(x) (((uint32_t)(((uint32_t)(x)) << LTC_VID2_ECO_REV_SHIFT)) & LTC_VID2_ECO_REV_MASK) +#define LTC_VID2_ARCH_ERA_MASK (0xFF00U) +#define LTC_VID2_ARCH_ERA_SHIFT (8U) +#define LTC_VID2_ARCH_ERA(x) (((uint32_t)(((uint32_t)(x)) << LTC_VID2_ARCH_ERA_SHIFT)) & LTC_VID2_ARCH_ERA_MASK) + +/*! @name CHAVID - LTC CHA Version ID Register */ +#define LTC_CHAVID_AESREV_MASK (0xFU) +#define LTC_CHAVID_AESREV_SHIFT (0U) +#define LTC_CHAVID_AESREV(x) (((uint32_t)(((uint32_t)(x)) << LTC_CHAVID_AESREV_SHIFT)) & LTC_CHAVID_AESREV_MASK) +#define LTC_CHAVID_AESVID_MASK (0xF0U) +#define LTC_CHAVID_AESVID_SHIFT (4U) +#define LTC_CHAVID_AESVID(x) (((uint32_t)(((uint32_t)(x)) << LTC_CHAVID_AESVID_SHIFT)) & LTC_CHAVID_AESVID_MASK) +#define LTC_CHAVID_DESREV_MASK (0xF00U) +#define LTC_CHAVID_DESREV_SHIFT (8U) +#define LTC_CHAVID_DESREV(x) (((uint32_t)(((uint32_t)(x)) << LTC_CHAVID_DESREV_SHIFT)) & LTC_CHAVID_DESREV_MASK) +#define LTC_CHAVID_DESVID_MASK (0xF000U) +#define LTC_CHAVID_DESVID_SHIFT (12U) +#define LTC_CHAVID_DESVID(x) (((uint32_t)(((uint32_t)(x)) << LTC_CHAVID_DESVID_SHIFT)) & LTC_CHAVID_DESVID_MASK) +#define LTC_CHAVID_PKHAREV_MASK (0xF0000U) +#define LTC_CHAVID_PKHAREV_SHIFT (16U) +#define LTC_CHAVID_PKHAREV(x) (((uint32_t)(((uint32_t)(x)) << LTC_CHAVID_PKHAREV_SHIFT)) & LTC_CHAVID_PKHAREV_MASK) +#define LTC_CHAVID_PKHAVID_MASK (0xF00000U) +#define LTC_CHAVID_PKHAVID_SHIFT (20U) +#define LTC_CHAVID_PKHAVID(x) (((uint32_t)(((uint32_t)(x)) << LTC_CHAVID_PKHAVID_SHIFT)) & LTC_CHAVID_PKHAVID_MASK) +#define LTC_CHAVID_MDHAREV_MASK (0xF000000U) +#define LTC_CHAVID_MDHAREV_SHIFT (24U) +#define LTC_CHAVID_MDHAREV(x) (((uint32_t)(((uint32_t)(x)) << LTC_CHAVID_MDHAREV_SHIFT)) & LTC_CHAVID_MDHAREV_MASK) +#define LTC_CHAVID_MDHAVID_MASK (0xF0000000U) +#define LTC_CHAVID_MDHAVID_SHIFT (28U) +#define LTC_CHAVID_MDHAVID(x) (((uint32_t)(((uint32_t)(x)) << LTC_CHAVID_MDHAVID_SHIFT)) & LTC_CHAVID_MDHAVID_MASK) + +/*! @name FIFOSTA - LTC FIFO Status Register */ +#define LTC_FIFOSTA_IFL_MASK (0x7FU) +#define LTC_FIFOSTA_IFL_SHIFT (0U) +#define LTC_FIFOSTA_IFL(x) (((uint32_t)(((uint32_t)(x)) << LTC_FIFOSTA_IFL_SHIFT)) & LTC_FIFOSTA_IFL_MASK) +#define LTC_FIFOSTA_IFF_MASK (0x8000U) +#define LTC_FIFOSTA_IFF_SHIFT (15U) +#define LTC_FIFOSTA_IFF(x) (((uint32_t)(((uint32_t)(x)) << LTC_FIFOSTA_IFF_SHIFT)) & LTC_FIFOSTA_IFF_MASK) +#define LTC_FIFOSTA_OFL_MASK (0x7F0000U) +#define LTC_FIFOSTA_OFL_SHIFT (16U) +#define LTC_FIFOSTA_OFL(x) (((uint32_t)(((uint32_t)(x)) << LTC_FIFOSTA_OFL_SHIFT)) & LTC_FIFOSTA_OFL_MASK) +#define LTC_FIFOSTA_OFF_MASK (0x80000000U) +#define LTC_FIFOSTA_OFF_SHIFT (31U) +#define LTC_FIFOSTA_OFF(x) (((uint32_t)(((uint32_t)(x)) << LTC_FIFOSTA_OFF_SHIFT)) & LTC_FIFOSTA_OFF_MASK) + +/*! @name IFIFO - LTC Input Data FIFO */ +#define LTC_IFIFO_IFIFO_MASK (0xFFFFFFFFU) +#define LTC_IFIFO_IFIFO_SHIFT (0U) +#define LTC_IFIFO_IFIFO(x) (((uint32_t)(((uint32_t)(x)) << LTC_IFIFO_IFIFO_SHIFT)) & LTC_IFIFO_IFIFO_MASK) + +/*! @name OFIFO - LTC Output Data FIFO */ +#define LTC_OFIFO_OFIFO_MASK (0xFFFFFFFFU) +#define LTC_OFIFO_OFIFO_SHIFT (0U) +#define LTC_OFIFO_OFIFO(x) (((uint32_t)(((uint32_t)(x)) << LTC_OFIFO_OFIFO_SHIFT)) & LTC_OFIFO_OFIFO_MASK) + +/* The count of LTC_PKA */ +#define LTC_PKA_COUNT (64U) + +/*! @name PKA0 - LTC PKHA A0 0 Register..LTC PKHA A0 15 Register */ +#define LTC_PKA0_PKHA_A0_MASK (0xFFFFFFFFU) +#define LTC_PKA0_PKHA_A0_SHIFT (0U) +#define LTC_PKA0_PKHA_A0(x) (((uint32_t)(((uint32_t)(x)) << LTC_PKA0_PKHA_A0_SHIFT)) & LTC_PKA0_PKHA_A0_MASK) + +/* The count of LTC_PKA0 */ +#define LTC_PKA0_COUNT (16U) + +/*! @name PKA1 - LTC PKHA A1 0 Register..LTC PKHA A1 15 Register */ +#define LTC_PKA1_PKHA_A1_MASK (0xFFFFFFFFU) +#define LTC_PKA1_PKHA_A1_SHIFT (0U) +#define LTC_PKA1_PKHA_A1(x) (((uint32_t)(((uint32_t)(x)) << LTC_PKA1_PKHA_A1_SHIFT)) & LTC_PKA1_PKHA_A1_MASK) + +/* The count of LTC_PKA1 */ +#define LTC_PKA1_COUNT (16U) + +/*! @name PKA2 - LTC PKHA A2 0 Register..LTC PKHA A2 15 Register */ +#define LTC_PKA2_PKHA_A2_MASK (0xFFFFFFFFU) +#define LTC_PKA2_PKHA_A2_SHIFT (0U) +#define LTC_PKA2_PKHA_A2(x) (((uint32_t)(((uint32_t)(x)) << LTC_PKA2_PKHA_A2_SHIFT)) & LTC_PKA2_PKHA_A2_MASK) + +/* The count of LTC_PKA2 */ +#define LTC_PKA2_COUNT (16U) + +/*! @name PKA3 - LTC PKHA A3 0 Register..LTC PKHA A3 15 Register */ +#define LTC_PKA3_PKHA_A3_MASK (0xFFFFFFFFU) +#define LTC_PKA3_PKHA_A3_SHIFT (0U) +#define LTC_PKA3_PKHA_A3(x) (((uint32_t)(((uint32_t)(x)) << LTC_PKA3_PKHA_A3_SHIFT)) & LTC_PKA3_PKHA_A3_MASK) + +/* The count of LTC_PKA3 */ +#define LTC_PKA3_COUNT (16U) + +/* The count of LTC_PKB */ +#define LTC_PKB_COUNT (64U) + +/*! @name PKB0 - LTC PKHA B0 0 Register..LTC PKHA B0 15 Register */ +#define LTC_PKB0_PKHA_B0_MASK (0xFFFFFFFFU) +#define LTC_PKB0_PKHA_B0_SHIFT (0U) +#define LTC_PKB0_PKHA_B0(x) (((uint32_t)(((uint32_t)(x)) << LTC_PKB0_PKHA_B0_SHIFT)) & LTC_PKB0_PKHA_B0_MASK) + +/* The count of LTC_PKB0 */ +#define LTC_PKB0_COUNT (16U) + +/*! @name PKB1 - LTC PKHA B1 0 Register..LTC PKHA B1 15 Register */ +#define LTC_PKB1_PKHA_B1_MASK (0xFFFFFFFFU) +#define LTC_PKB1_PKHA_B1_SHIFT (0U) +#define LTC_PKB1_PKHA_B1(x) (((uint32_t)(((uint32_t)(x)) << LTC_PKB1_PKHA_B1_SHIFT)) & LTC_PKB1_PKHA_B1_MASK) + +/* The count of LTC_PKB1 */ +#define LTC_PKB1_COUNT (16U) + +/*! @name PKB2 - LTC PKHA B2 0 Register..LTC PKHA B2 15 Register */ +#define LTC_PKB2_PKHA_B2_MASK (0xFFFFFFFFU) +#define LTC_PKB2_PKHA_B2_SHIFT (0U) +#define LTC_PKB2_PKHA_B2(x) (((uint32_t)(((uint32_t)(x)) << LTC_PKB2_PKHA_B2_SHIFT)) & LTC_PKB2_PKHA_B2_MASK) + +/* The count of LTC_PKB2 */ +#define LTC_PKB2_COUNT (16U) + +/*! @name PKB3 - LTC PKHA B3 0 Register..LTC PKHA B3 15 Register */ +#define LTC_PKB3_PKHA_B3_MASK (0xFFFFFFFFU) +#define LTC_PKB3_PKHA_B3_SHIFT (0U) +#define LTC_PKB3_PKHA_B3(x) (((uint32_t)(((uint32_t)(x)) << LTC_PKB3_PKHA_B3_SHIFT)) & LTC_PKB3_PKHA_B3_MASK) + +/* The count of LTC_PKB3 */ +#define LTC_PKB3_COUNT (16U) + +/* The count of LTC_PKN */ +#define LTC_PKN_COUNT (64U) + +/*! @name PKN0 - LTC PKHA N0 0 Register..LTC PKHA N0 15 Register */ +#define LTC_PKN0_PKHA_N0_MASK (0xFFFFFFFFU) +#define LTC_PKN0_PKHA_N0_SHIFT (0U) +#define LTC_PKN0_PKHA_N0(x) (((uint32_t)(((uint32_t)(x)) << LTC_PKN0_PKHA_N0_SHIFT)) & LTC_PKN0_PKHA_N0_MASK) + +/* The count of LTC_PKN0 */ +#define LTC_PKN0_COUNT (16U) + +/*! @name PKN1 - LTC PKHA N1 0 Register..LTC PKHA N1 15 Register */ +#define LTC_PKN1_PKHA_N1_MASK (0xFFFFFFFFU) +#define LTC_PKN1_PKHA_N1_SHIFT (0U) +#define LTC_PKN1_PKHA_N1(x) (((uint32_t)(((uint32_t)(x)) << LTC_PKN1_PKHA_N1_SHIFT)) & LTC_PKN1_PKHA_N1_MASK) + +/* The count of LTC_PKN1 */ +#define LTC_PKN1_COUNT (16U) + +/*! @name PKN2 - LTC PKHA N2 0 Register..LTC PKHA N2 15 Register */ +#define LTC_PKN2_PKHA_N2_MASK (0xFFFFFFFFU) +#define LTC_PKN2_PKHA_N2_SHIFT (0U) +#define LTC_PKN2_PKHA_N2(x) (((uint32_t)(((uint32_t)(x)) << LTC_PKN2_PKHA_N2_SHIFT)) & LTC_PKN2_PKHA_N2_MASK) + +/* The count of LTC_PKN2 */ +#define LTC_PKN2_COUNT (16U) + +/*! @name PKN3 - LTC PKHA N3 0 Register..LTC PKHA N3 15 Register */ +#define LTC_PKN3_PKHA_N3_MASK (0xFFFFFFFFU) +#define LTC_PKN3_PKHA_N3_SHIFT (0U) +#define LTC_PKN3_PKHA_N3(x) (((uint32_t)(((uint32_t)(x)) << LTC_PKN3_PKHA_N3_SHIFT)) & LTC_PKN3_PKHA_N3_MASK) + +/* The count of LTC_PKN3 */ +#define LTC_PKN3_COUNT (16U) + +/* The count of LTC_PKE */ +#define LTC_PKE_COUNT (64U) + +/*! @name PKE0 - LTC PKHA E0 0 Register..LTC PKHA E0 15 Register */ +#define LTC_PKE0_PKHA_E0_MASK (0xFFFFFFFFU) +#define LTC_PKE0_PKHA_E0_SHIFT (0U) +#define LTC_PKE0_PKHA_E0(x) (((uint32_t)(((uint32_t)(x)) << LTC_PKE0_PKHA_E0_SHIFT)) & LTC_PKE0_PKHA_E0_MASK) + +/* The count of LTC_PKE0 */ +#define LTC_PKE0_COUNT (16U) + +/*! @name PKE1 - LTC PKHA E1 0 Register..LTC PKHA E1 15 Register */ +#define LTC_PKE1_PKHA_E1_MASK (0xFFFFFFFFU) +#define LTC_PKE1_PKHA_E1_SHIFT (0U) +#define LTC_PKE1_PKHA_E1(x) (((uint32_t)(((uint32_t)(x)) << LTC_PKE1_PKHA_E1_SHIFT)) & LTC_PKE1_PKHA_E1_MASK) + +/* The count of LTC_PKE1 */ +#define LTC_PKE1_COUNT (16U) + +/*! @name PKE2 - LTC PKHA E2 0 Register..LTC PKHA E2 15 Register */ +#define LTC_PKE2_PKHA_E2_MASK (0xFFFFFFFFU) +#define LTC_PKE2_PKHA_E2_SHIFT (0U) +#define LTC_PKE2_PKHA_E2(x) (((uint32_t)(((uint32_t)(x)) << LTC_PKE2_PKHA_E2_SHIFT)) & LTC_PKE2_PKHA_E2_MASK) + +/* The count of LTC_PKE2 */ +#define LTC_PKE2_COUNT (16U) + +/*! @name PKE3 - LTC PKHA E3 0 Register..LTC PKHA E3 15 Register */ +#define LTC_PKE3_PKHA_E3_MASK (0xFFFFFFFFU) +#define LTC_PKE3_PKHA_E3_SHIFT (0U) +#define LTC_PKE3_PKHA_E3(x) (((uint32_t)(((uint32_t)(x)) << LTC_PKE3_PKHA_E3_SHIFT)) & LTC_PKE3_PKHA_E3_MASK) + +/* The count of LTC_PKE3 */ +#define LTC_PKE3_COUNT (16U) + + +/*! + * @} + */ /* end of group LTC_Register_Masks */ + + +/* LTC - Peripheral instance base addresses */ +/** Peripheral LTC0 base address */ +#define LTC0_BASE (0x40051000u) +/** Peripheral LTC0 base pointer */ +#define LTC0 ((LTC_Type *)LTC0_BASE) +/** Array initializer of LTC peripheral base addresses */ +#define LTC_BASE_ADDRS { LTC0_BASE } +/** Array initializer of LTC peripheral base pointers */ +#define LTC_BASE_PTRS { LTC0 } +/** Interrupt vectors for the LTC peripheral type */ +#define LTC_IRQS { LTC0_IRQn } + +/*! + * @} + */ /* end of group LTC_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- MCG Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup MCG_Peripheral_Access_Layer MCG Peripheral Access Layer + * @{ + */ + +/** MCG - Register Layout Typedef */ +typedef struct { + __IO uint8_t C1; /**< MCG Control 1 Register, offset: 0x0 */ + __IO uint8_t C2; /**< MCG Control 2 Register, offset: 0x1 */ + __IO uint8_t C3; /**< MCG Control 3 Register, offset: 0x2 */ + __IO uint8_t C4; /**< MCG Control 4 Register, offset: 0x3 */ + __IO uint8_t C5; /**< MCG Control 5 Register, offset: 0x4 */ + __IO uint8_t C6; /**< MCG Control 6 Register, offset: 0x5 */ + __IO uint8_t S; /**< MCG Status Register, offset: 0x6 */ + uint8_t RESERVED_0[1]; + __IO uint8_t SC; /**< MCG Status and Control Register, offset: 0x8 */ + uint8_t RESERVED_1[1]; + __IO uint8_t ATCVH; /**< MCG Auto Trim Compare Value High Register, offset: 0xA */ + __IO uint8_t ATCVL; /**< MCG Auto Trim Compare Value Low Register, offset: 0xB */ + __IO uint8_t C7; /**< MCG Control 7 Register, offset: 0xC */ + __IO uint8_t C8; /**< MCG Control 8 Register, offset: 0xD */ +} MCG_Type; + +/* ---------------------------------------------------------------------------- + -- MCG Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup MCG_Register_Masks MCG Register Masks + * @{ + */ + +/*! @name C1 - MCG Control 1 Register */ +#define MCG_C1_IREFSTEN_MASK (0x1U) +#define MCG_C1_IREFSTEN_SHIFT (0U) +#define MCG_C1_IREFSTEN(x) (((uint8_t)(((uint8_t)(x)) << MCG_C1_IREFSTEN_SHIFT)) & MCG_C1_IREFSTEN_MASK) +#define MCG_C1_IRCLKEN_MASK (0x2U) +#define MCG_C1_IRCLKEN_SHIFT (1U) +#define MCG_C1_IRCLKEN(x) (((uint8_t)(((uint8_t)(x)) << MCG_C1_IRCLKEN_SHIFT)) & MCG_C1_IRCLKEN_MASK) +#define MCG_C1_IREFS_MASK (0x4U) +#define MCG_C1_IREFS_SHIFT (2U) +#define MCG_C1_IREFS(x) (((uint8_t)(((uint8_t)(x)) << MCG_C1_IREFS_SHIFT)) & MCG_C1_IREFS_MASK) +#define MCG_C1_FRDIV_MASK (0x38U) +#define MCG_C1_FRDIV_SHIFT (3U) +#define MCG_C1_FRDIV(x) (((uint8_t)(((uint8_t)(x)) << MCG_C1_FRDIV_SHIFT)) & MCG_C1_FRDIV_MASK) +#define MCG_C1_CLKS_MASK (0xC0U) +#define MCG_C1_CLKS_SHIFT (6U) +#define MCG_C1_CLKS(x) (((uint8_t)(((uint8_t)(x)) << MCG_C1_CLKS_SHIFT)) & MCG_C1_CLKS_MASK) + +/*! @name C2 - MCG Control 2 Register */ +#define MCG_C2_IRCS_MASK (0x1U) +#define MCG_C2_IRCS_SHIFT (0U) +#define MCG_C2_IRCS(x) (((uint8_t)(((uint8_t)(x)) << MCG_C2_IRCS_SHIFT)) & MCG_C2_IRCS_MASK) +#define MCG_C2_LP_MASK (0x2U) +#define MCG_C2_LP_SHIFT (1U) +#define MCG_C2_LP(x) (((uint8_t)(((uint8_t)(x)) << MCG_C2_LP_SHIFT)) & MCG_C2_LP_MASK) +#define MCG_C2_EREFS_MASK (0x4U) +#define MCG_C2_EREFS_SHIFT (2U) +#define MCG_C2_EREFS(x) (((uint8_t)(((uint8_t)(x)) << MCG_C2_EREFS_SHIFT)) & MCG_C2_EREFS_MASK) +#define MCG_C2_HGO_MASK (0x8U) +#define MCG_C2_HGO_SHIFT (3U) +#define MCG_C2_HGO(x) (((uint8_t)(((uint8_t)(x)) << MCG_C2_HGO_SHIFT)) & MCG_C2_HGO_MASK) +#define MCG_C2_RANGE_MASK (0x30U) +#define MCG_C2_RANGE_SHIFT (4U) +#define MCG_C2_RANGE(x) (((uint8_t)(((uint8_t)(x)) << MCG_C2_RANGE_SHIFT)) & MCG_C2_RANGE_MASK) +#define MCG_C2_FCFTRIM_MASK (0x40U) +#define MCG_C2_FCFTRIM_SHIFT (6U) +#define MCG_C2_FCFTRIM(x) (((uint8_t)(((uint8_t)(x)) << MCG_C2_FCFTRIM_SHIFT)) & MCG_C2_FCFTRIM_MASK) +#define MCG_C2_LOCRE0_MASK (0x80U) +#define MCG_C2_LOCRE0_SHIFT (7U) +#define MCG_C2_LOCRE0(x) (((uint8_t)(((uint8_t)(x)) << MCG_C2_LOCRE0_SHIFT)) & MCG_C2_LOCRE0_MASK) + +/*! @name C3 - MCG Control 3 Register */ +#define MCG_C3_SCTRIM_MASK (0xFFU) +#define MCG_C3_SCTRIM_SHIFT (0U) +#define MCG_C3_SCTRIM(x) (((uint8_t)(((uint8_t)(x)) << MCG_C3_SCTRIM_SHIFT)) & MCG_C3_SCTRIM_MASK) + +/*! @name C4 - MCG Control 4 Register */ +#define MCG_C4_SCFTRIM_MASK (0x1U) +#define MCG_C4_SCFTRIM_SHIFT (0U) +#define MCG_C4_SCFTRIM(x) (((uint8_t)(((uint8_t)(x)) << MCG_C4_SCFTRIM_SHIFT)) & MCG_C4_SCFTRIM_MASK) +#define MCG_C4_FCTRIM_MASK (0x1EU) +#define MCG_C4_FCTRIM_SHIFT (1U) +#define MCG_C4_FCTRIM(x) (((uint8_t)(((uint8_t)(x)) << MCG_C4_FCTRIM_SHIFT)) & MCG_C4_FCTRIM_MASK) +#define MCG_C4_DRST_DRS_MASK (0x60U) +#define MCG_C4_DRST_DRS_SHIFT (5U) +#define MCG_C4_DRST_DRS(x) (((uint8_t)(((uint8_t)(x)) << MCG_C4_DRST_DRS_SHIFT)) & MCG_C4_DRST_DRS_MASK) +#define MCG_C4_DMX32_MASK (0x80U) +#define MCG_C4_DMX32_SHIFT (7U) +#define MCG_C4_DMX32(x) (((uint8_t)(((uint8_t)(x)) << MCG_C4_DMX32_SHIFT)) & MCG_C4_DMX32_MASK) + +/*! @name C5 - MCG Control 5 Register */ +#define MCG_C5_PRDIV_MASK (0x7U) +#define MCG_C5_PRDIV_SHIFT (0U) +#define MCG_C5_PRDIV(x) (((uint8_t)(((uint8_t)(x)) << MCG_C5_PRDIV_SHIFT)) & MCG_C5_PRDIV_MASK) +#define MCG_C5_PLLSTEN_MASK (0x20U) +#define MCG_C5_PLLSTEN_SHIFT (5U) +#define MCG_C5_PLLSTEN(x) (((uint8_t)(((uint8_t)(x)) << MCG_C5_PLLSTEN_SHIFT)) & MCG_C5_PLLSTEN_MASK) +#define MCG_C5_PLLCLKEN_MASK (0x40U) +#define MCG_C5_PLLCLKEN_SHIFT (6U) +#define MCG_C5_PLLCLKEN(x) (((uint8_t)(((uint8_t)(x)) << MCG_C5_PLLCLKEN_SHIFT)) & MCG_C5_PLLCLKEN_MASK) + +/*! @name C6 - MCG Control 6 Register */ +#define MCG_C6_VDIV_MASK (0x1FU) +#define MCG_C6_VDIV_SHIFT (0U) +#define MCG_C6_VDIV(x) (((uint8_t)(((uint8_t)(x)) << MCG_C6_VDIV_SHIFT)) & MCG_C6_VDIV_MASK) +#define MCG_C6_CME0_MASK (0x20U) +#define MCG_C6_CME0_SHIFT (5U) +#define MCG_C6_CME0(x) (((uint8_t)(((uint8_t)(x)) << MCG_C6_CME0_SHIFT)) & MCG_C6_CME0_MASK) +#define MCG_C6_PLLS_MASK (0x40U) +#define MCG_C6_PLLS_SHIFT (6U) +#define MCG_C6_PLLS(x) (((uint8_t)(((uint8_t)(x)) << MCG_C6_PLLS_SHIFT)) & MCG_C6_PLLS_MASK) +#define MCG_C6_LOLIE0_MASK (0x80U) +#define MCG_C6_LOLIE0_SHIFT (7U) +#define MCG_C6_LOLIE0(x) (((uint8_t)(((uint8_t)(x)) << MCG_C6_LOLIE0_SHIFT)) & MCG_C6_LOLIE0_MASK) + +/*! @name S - MCG Status Register */ +#define MCG_S_IRCST_MASK (0x1U) +#define MCG_S_IRCST_SHIFT (0U) +#define MCG_S_IRCST(x) (((uint8_t)(((uint8_t)(x)) << MCG_S_IRCST_SHIFT)) & MCG_S_IRCST_MASK) +#define MCG_S_OSCINIT0_MASK (0x2U) +#define MCG_S_OSCINIT0_SHIFT (1U) +#define MCG_S_OSCINIT0(x) (((uint8_t)(((uint8_t)(x)) << MCG_S_OSCINIT0_SHIFT)) & MCG_S_OSCINIT0_MASK) +#define MCG_S_CLKST_MASK (0xCU) +#define MCG_S_CLKST_SHIFT (2U) +#define MCG_S_CLKST(x) (((uint8_t)(((uint8_t)(x)) << MCG_S_CLKST_SHIFT)) & MCG_S_CLKST_MASK) +#define MCG_S_IREFST_MASK (0x10U) +#define MCG_S_IREFST_SHIFT (4U) +#define MCG_S_IREFST(x) (((uint8_t)(((uint8_t)(x)) << MCG_S_IREFST_SHIFT)) & MCG_S_IREFST_MASK) +#define MCG_S_PLLST_MASK (0x20U) +#define MCG_S_PLLST_SHIFT (5U) +#define MCG_S_PLLST(x) (((uint8_t)(((uint8_t)(x)) << MCG_S_PLLST_SHIFT)) & MCG_S_PLLST_MASK) +#define MCG_S_LOCK0_MASK (0x40U) +#define MCG_S_LOCK0_SHIFT (6U) +#define MCG_S_LOCK0(x) (((uint8_t)(((uint8_t)(x)) << MCG_S_LOCK0_SHIFT)) & MCG_S_LOCK0_MASK) +#define MCG_S_LOLS0_MASK (0x80U) +#define MCG_S_LOLS0_SHIFT (7U) +#define MCG_S_LOLS0(x) (((uint8_t)(((uint8_t)(x)) << MCG_S_LOLS0_SHIFT)) & MCG_S_LOLS0_MASK) + +/*! @name SC - MCG Status and Control Register */ +#define MCG_SC_LOCS0_MASK (0x1U) +#define MCG_SC_LOCS0_SHIFT (0U) +#define MCG_SC_LOCS0(x) (((uint8_t)(((uint8_t)(x)) << MCG_SC_LOCS0_SHIFT)) & MCG_SC_LOCS0_MASK) +#define MCG_SC_FCRDIV_MASK (0xEU) +#define MCG_SC_FCRDIV_SHIFT (1U) +#define MCG_SC_FCRDIV(x) (((uint8_t)(((uint8_t)(x)) << MCG_SC_FCRDIV_SHIFT)) & MCG_SC_FCRDIV_MASK) +#define MCG_SC_FLTPRSRV_MASK (0x10U) +#define MCG_SC_FLTPRSRV_SHIFT (4U) +#define MCG_SC_FLTPRSRV(x) (((uint8_t)(((uint8_t)(x)) << MCG_SC_FLTPRSRV_SHIFT)) & MCG_SC_FLTPRSRV_MASK) +#define MCG_SC_ATMF_MASK (0x20U) +#define MCG_SC_ATMF_SHIFT (5U) +#define MCG_SC_ATMF(x) (((uint8_t)(((uint8_t)(x)) << MCG_SC_ATMF_SHIFT)) & MCG_SC_ATMF_MASK) +#define MCG_SC_ATMS_MASK (0x40U) +#define MCG_SC_ATMS_SHIFT (6U) +#define MCG_SC_ATMS(x) (((uint8_t)(((uint8_t)(x)) << MCG_SC_ATMS_SHIFT)) & MCG_SC_ATMS_MASK) +#define MCG_SC_ATME_MASK (0x80U) +#define MCG_SC_ATME_SHIFT (7U) +#define MCG_SC_ATME(x) (((uint8_t)(((uint8_t)(x)) << MCG_SC_ATME_SHIFT)) & MCG_SC_ATME_MASK) + +/*! @name ATCVH - MCG Auto Trim Compare Value High Register */ +#define MCG_ATCVH_ATCVH_MASK (0xFFU) +#define MCG_ATCVH_ATCVH_SHIFT (0U) +#define MCG_ATCVH_ATCVH(x) (((uint8_t)(((uint8_t)(x)) << MCG_ATCVH_ATCVH_SHIFT)) & MCG_ATCVH_ATCVH_MASK) + +/*! @name ATCVL - MCG Auto Trim Compare Value Low Register */ +#define MCG_ATCVL_ATCVL_MASK (0xFFU) +#define MCG_ATCVL_ATCVL_SHIFT (0U) +#define MCG_ATCVL_ATCVL(x) (((uint8_t)(((uint8_t)(x)) << MCG_ATCVL_ATCVL_SHIFT)) & MCG_ATCVL_ATCVL_MASK) + +/*! @name C7 - MCG Control 7 Register */ +#define MCG_C7_OSCSEL_MASK (0x3U) +#define MCG_C7_OSCSEL_SHIFT (0U) +#define MCG_C7_OSCSEL(x) (((uint8_t)(((uint8_t)(x)) << MCG_C7_OSCSEL_SHIFT)) & MCG_C7_OSCSEL_MASK) + +/*! @name C8 - MCG Control 8 Register */ +#define MCG_C8_LOCS1_MASK (0x1U) +#define MCG_C8_LOCS1_SHIFT (0U) +#define MCG_C8_LOCS1(x) (((uint8_t)(((uint8_t)(x)) << MCG_C8_LOCS1_SHIFT)) & MCG_C8_LOCS1_MASK) +#define MCG_C8_CME1_MASK (0x20U) +#define MCG_C8_CME1_SHIFT (5U) +#define MCG_C8_CME1(x) (((uint8_t)(((uint8_t)(x)) << MCG_C8_CME1_SHIFT)) & MCG_C8_CME1_MASK) +#define MCG_C8_LOLRE_MASK (0x40U) +#define MCG_C8_LOLRE_SHIFT (6U) +#define MCG_C8_LOLRE(x) (((uint8_t)(((uint8_t)(x)) << MCG_C8_LOLRE_SHIFT)) & MCG_C8_LOLRE_MASK) +#define MCG_C8_LOCRE1_MASK (0x80U) +#define MCG_C8_LOCRE1_SHIFT (7U) +#define MCG_C8_LOCRE1(x) (((uint8_t)(((uint8_t)(x)) << MCG_C8_LOCRE1_SHIFT)) & MCG_C8_LOCRE1_MASK) + + +/*! + * @} + */ /* end of group MCG_Register_Masks */ + + +/* MCG - Peripheral instance base addresses */ +/** Peripheral MCG base address */ +#define MCG_BASE (0x40064000u) +/** Peripheral MCG base pointer */ +#define MCG ((MCG_Type *)MCG_BASE) +/** Array initializer of MCG peripheral base addresses */ +#define MCG_BASE_ADDRS { MCG_BASE } +/** Array initializer of MCG peripheral base pointers */ +#define MCG_BASE_PTRS { MCG } +/** Interrupt vectors for the MCG peripheral type */ +#define MCG_IRQS { MCG_IRQn } +/* MCG C5[PLLCLKEN0] backward compatibility */ +#define MCG_C5_PLLCLKEN0_MASK (MCG_C5_PLLCLKEN_MASK) +#define MCG_C5_PLLCLKEN0_SHIFT (MCG_C5_PLLCLKEN_SHIFT) +#define MCG_C5_PLLCLKEN0_WIDTH (MCG_C5_PLLCLKEN_WIDTH) +#define MCG_C5_PLLCLKEN0(x) (MCG_C5_PLLCLKEN(x)) + +/* MCG C5[PLLSTEN0] backward compatibility */ +#define MCG_C5_PLLSTEN0_MASK (MCG_C5_PLLSTEN_MASK) +#define MCG_C5_PLLSTEN0_SHIFT (MCG_C5_PLLSTEN_SHIFT) +#define MCG_C5_PLLSTEN0_WIDTH (MCG_C5_PLLSTEN_WIDTH) +#define MCG_C5_PLLSTEN0(x) (MCG_C5_PLLSTEN(x)) + +/* MCG C5[PRDIV0] backward compatibility */ +#define MCG_C5_PRDIV0_MASK (MCG_C5_PRDIV_MASK) +#define MCG_C5_PRDIV0_SHIFT (MCG_C5_PRDIV_SHIFT) +#define MCG_C5_PRDIV0_WIDTH (MCG_C5_PRDIV_WIDTH) +#define MCG_C5_PRDIV0(x) (MCG_C5_PRDIV(x)) + +/* MCG C6[VDIV0] backward compatibility */ +#define MCG_C6_VDIV0_MASK (MCG_C6_VDIV_MASK) +#define MCG_C6_VDIV0_SHIFT (MCG_C6_VDIV_SHIFT) +#define MCG_C6_VDIV0_WIDTH (MCG_C6_VDIV_WIDTH) +#define MCG_C6_VDIV0(x) (MCG_C6_VDIV(x)) + + +/*! + * @} + */ /* end of group MCG_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- MCM Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup MCM_Peripheral_Access_Layer MCM Peripheral Access Layer + * @{ + */ + +/** MCM - Register Layout Typedef */ +typedef struct { + uint8_t RESERVED_0[8]; + __I uint16_t PLASC; /**< Crossbar Switch (AXBS) Slave Configuration, offset: 0x8 */ + __I uint16_t PLAMC; /**< Crossbar Switch (AXBS) Master Configuration, offset: 0xA */ + __IO uint32_t PLACR; /**< Platform Control Register, offset: 0xC */ + uint8_t RESERVED_1[48]; + __IO uint32_t CPO; /**< Compute Operation Control Register, offset: 0x40 */ +} MCM_Type; + +/* ---------------------------------------------------------------------------- + -- MCM Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup MCM_Register_Masks MCM Register Masks + * @{ + */ + +/*! @name PLASC - Crossbar Switch (AXBS) Slave Configuration */ +#define MCM_PLASC_ASC_MASK (0xFFU) +#define MCM_PLASC_ASC_SHIFT (0U) +#define MCM_PLASC_ASC(x) (((uint16_t)(((uint16_t)(x)) << MCM_PLASC_ASC_SHIFT)) & MCM_PLASC_ASC_MASK) + +/*! @name PLAMC - Crossbar Switch (AXBS) Master Configuration */ +#define MCM_PLAMC_AMC_MASK (0xFFU) +#define MCM_PLAMC_AMC_SHIFT (0U) +#define MCM_PLAMC_AMC(x) (((uint16_t)(((uint16_t)(x)) << MCM_PLAMC_AMC_SHIFT)) & MCM_PLAMC_AMC_MASK) + +/*! @name PLACR - Platform Control Register */ +#define MCM_PLACR_ARB_MASK (0x200U) +#define MCM_PLACR_ARB_SHIFT (9U) +#define MCM_PLACR_ARB(x) (((uint32_t)(((uint32_t)(x)) << MCM_PLACR_ARB_SHIFT)) & MCM_PLACR_ARB_MASK) +#define MCM_PLACR_CFCC_MASK (0x400U) +#define MCM_PLACR_CFCC_SHIFT (10U) +#define MCM_PLACR_CFCC(x) (((uint32_t)(((uint32_t)(x)) << MCM_PLACR_CFCC_SHIFT)) & MCM_PLACR_CFCC_MASK) +#define MCM_PLACR_DFCDA_MASK (0x800U) +#define MCM_PLACR_DFCDA_SHIFT (11U) +#define MCM_PLACR_DFCDA(x) (((uint32_t)(((uint32_t)(x)) << MCM_PLACR_DFCDA_SHIFT)) & MCM_PLACR_DFCDA_MASK) +#define MCM_PLACR_DFCIC_MASK (0x1000U) +#define MCM_PLACR_DFCIC_SHIFT (12U) +#define MCM_PLACR_DFCIC(x) (((uint32_t)(((uint32_t)(x)) << MCM_PLACR_DFCIC_SHIFT)) & MCM_PLACR_DFCIC_MASK) +#define MCM_PLACR_DFCC_MASK (0x2000U) +#define MCM_PLACR_DFCC_SHIFT (13U) +#define MCM_PLACR_DFCC(x) (((uint32_t)(((uint32_t)(x)) << MCM_PLACR_DFCC_SHIFT)) & MCM_PLACR_DFCC_MASK) +#define MCM_PLACR_EFDS_MASK (0x4000U) +#define MCM_PLACR_EFDS_SHIFT (14U) +#define MCM_PLACR_EFDS(x) (((uint32_t)(((uint32_t)(x)) << MCM_PLACR_EFDS_SHIFT)) & MCM_PLACR_EFDS_MASK) +#define MCM_PLACR_DFCS_MASK (0x8000U) +#define MCM_PLACR_DFCS_SHIFT (15U) +#define MCM_PLACR_DFCS(x) (((uint32_t)(((uint32_t)(x)) << MCM_PLACR_DFCS_SHIFT)) & MCM_PLACR_DFCS_MASK) +#define MCM_PLACR_ESFC_MASK (0x10000U) +#define MCM_PLACR_ESFC_SHIFT (16U) +#define MCM_PLACR_ESFC(x) (((uint32_t)(((uint32_t)(x)) << MCM_PLACR_ESFC_SHIFT)) & MCM_PLACR_ESFC_MASK) + +/*! @name CPO - Compute Operation Control Register */ +#define MCM_CPO_CPOREQ_MASK (0x1U) +#define MCM_CPO_CPOREQ_SHIFT (0U) +#define MCM_CPO_CPOREQ(x) (((uint32_t)(((uint32_t)(x)) << MCM_CPO_CPOREQ_SHIFT)) & MCM_CPO_CPOREQ_MASK) +#define MCM_CPO_CPOACK_MASK (0x2U) +#define MCM_CPO_CPOACK_SHIFT (1U) +#define MCM_CPO_CPOACK(x) (((uint32_t)(((uint32_t)(x)) << MCM_CPO_CPOACK_SHIFT)) & MCM_CPO_CPOACK_MASK) +#define MCM_CPO_CPOWOI_MASK (0x4U) +#define MCM_CPO_CPOWOI_SHIFT (2U) +#define MCM_CPO_CPOWOI(x) (((uint32_t)(((uint32_t)(x)) << MCM_CPO_CPOWOI_SHIFT)) & MCM_CPO_CPOWOI_MASK) + + +/*! + * @} + */ /* end of group MCM_Register_Masks */ + + +/* MCM - Peripheral instance base addresses */ +/** Peripheral MCM base address */ +#define MCM_BASE (0xF0003000u) +/** Peripheral MCM base pointer */ +#define MCM ((MCM_Type *)MCM_BASE) +/** Array initializer of MCM peripheral base addresses */ +#define MCM_BASE_ADDRS { MCM_BASE } +/** Array initializer of MCM peripheral base pointers */ +#define MCM_BASE_PTRS { MCM } + +/*! + * @} + */ /* end of group MCM_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- MPU Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup MPU_Peripheral_Access_Layer MPU Peripheral Access Layer + * @{ + */ + +/** MPU - Register Layout Typedef */ +typedef struct { + __IO uint32_t CESR; /**< Control/Error Status Register, offset: 0x0 */ + uint8_t RESERVED_0[12]; + struct { /* offset: 0x10, array step: 0x8 */ + __I uint32_t EAR; /**< Error Address Register, slave port n, array offset: 0x10, array step: 0x8 */ + __I uint32_t EDR; /**< Error Detail Register, slave port n, array offset: 0x14, array step: 0x8 */ + } SP[5]; + uint8_t RESERVED_1[968]; + __IO uint32_t WORD[8][4]; /**< Region Descriptor n, Word 0..Region Descriptor n, Word 3, array offset: 0x400, array step: index*0x10, index2*0x4 */ + uint8_t RESERVED_2[896]; + __IO uint32_t RGDAAC[8]; /**< Region Descriptor Alternate Access Control n, array offset: 0x800, array step: 0x4 */ +} MPU_Type; + +/* ---------------------------------------------------------------------------- + -- MPU Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup MPU_Register_Masks MPU Register Masks + * @{ + */ + +/*! @name CESR - Control/Error Status Register */ +#define MPU_CESR_VLD_MASK (0x1U) +#define MPU_CESR_VLD_SHIFT (0U) +#define MPU_CESR_VLD(x) (((uint32_t)(((uint32_t)(x)) << MPU_CESR_VLD_SHIFT)) & MPU_CESR_VLD_MASK) +#define MPU_CESR_NRGD_MASK (0xF00U) +#define MPU_CESR_NRGD_SHIFT (8U) +#define MPU_CESR_NRGD(x) (((uint32_t)(((uint32_t)(x)) << MPU_CESR_NRGD_SHIFT)) & MPU_CESR_NRGD_MASK) +#define MPU_CESR_NSP_MASK (0xF000U) +#define MPU_CESR_NSP_SHIFT (12U) +#define MPU_CESR_NSP(x) (((uint32_t)(((uint32_t)(x)) << MPU_CESR_NSP_SHIFT)) & MPU_CESR_NSP_MASK) +#define MPU_CESR_HRL_MASK (0xF0000U) +#define MPU_CESR_HRL_SHIFT (16U) +#define MPU_CESR_HRL(x) (((uint32_t)(((uint32_t)(x)) << MPU_CESR_HRL_SHIFT)) & MPU_CESR_HRL_MASK) +#define MPU_CESR_SPERR_MASK (0xF8000000U) +#define MPU_CESR_SPERR_SHIFT (27U) +#define MPU_CESR_SPERR(x) (((uint32_t)(((uint32_t)(x)) << MPU_CESR_SPERR_SHIFT)) & MPU_CESR_SPERR_MASK) + +/*! @name EAR - Error Address Register, slave port n */ +#define MPU_EAR_EADDR_MASK (0xFFFFFFFFU) +#define MPU_EAR_EADDR_SHIFT (0U) +#define MPU_EAR_EADDR(x) (((uint32_t)(((uint32_t)(x)) << MPU_EAR_EADDR_SHIFT)) & MPU_EAR_EADDR_MASK) + +/* The count of MPU_EAR */ +#define MPU_EAR_COUNT (5U) + +/*! @name EDR - Error Detail Register, slave port n */ +#define MPU_EDR_ERW_MASK (0x1U) +#define MPU_EDR_ERW_SHIFT (0U) +#define MPU_EDR_ERW(x) (((uint32_t)(((uint32_t)(x)) << MPU_EDR_ERW_SHIFT)) & MPU_EDR_ERW_MASK) +#define MPU_EDR_EATTR_MASK (0xEU) +#define MPU_EDR_EATTR_SHIFT (1U) +#define MPU_EDR_EATTR(x) (((uint32_t)(((uint32_t)(x)) << MPU_EDR_EATTR_SHIFT)) & MPU_EDR_EATTR_MASK) +#define MPU_EDR_EMN_MASK (0xF0U) +#define MPU_EDR_EMN_SHIFT (4U) +#define MPU_EDR_EMN(x) (((uint32_t)(((uint32_t)(x)) << MPU_EDR_EMN_SHIFT)) & MPU_EDR_EMN_MASK) +#define MPU_EDR_EPID_MASK (0xFF00U) +#define MPU_EDR_EPID_SHIFT (8U) +#define MPU_EDR_EPID(x) (((uint32_t)(((uint32_t)(x)) << MPU_EDR_EPID_SHIFT)) & MPU_EDR_EPID_MASK) +#define MPU_EDR_EACD_MASK (0xFFFF0000U) +#define MPU_EDR_EACD_SHIFT (16U) +#define MPU_EDR_EACD(x) (((uint32_t)(((uint32_t)(x)) << MPU_EDR_EACD_SHIFT)) & MPU_EDR_EACD_MASK) + +/* The count of MPU_EDR */ +#define MPU_EDR_COUNT (5U) + +/*! @name WORD - Region Descriptor n, Word 0..Region Descriptor n, Word 3 */ +#define MPU_WORD_VLD_MASK (0x1U) +#define MPU_WORD_VLD_SHIFT (0U) +#define MPU_WORD_VLD(x) (((uint32_t)(((uint32_t)(x)) << MPU_WORD_VLD_SHIFT)) & MPU_WORD_VLD_MASK) +#define MPU_WORD_M0UM_MASK (0x7U) +#define MPU_WORD_M0UM_SHIFT (0U) +#define MPU_WORD_M0UM(x) (((uint32_t)(((uint32_t)(x)) << MPU_WORD_M0UM_SHIFT)) & MPU_WORD_M0UM_MASK) +#define MPU_WORD_M0SM_MASK (0x18U) +#define MPU_WORD_M0SM_SHIFT (3U) +#define MPU_WORD_M0SM(x) (((uint32_t)(((uint32_t)(x)) << MPU_WORD_M0SM_SHIFT)) & MPU_WORD_M0SM_MASK) +#define MPU_WORD_M0PE_MASK (0x20U) +#define MPU_WORD_M0PE_SHIFT (5U) +#define MPU_WORD_M0PE(x) (((uint32_t)(((uint32_t)(x)) << MPU_WORD_M0PE_SHIFT)) & MPU_WORD_M0PE_MASK) +#define MPU_WORD_ENDADDR_MASK (0xFFFFFFE0U) +#define MPU_WORD_ENDADDR_SHIFT (5U) +#define MPU_WORD_ENDADDR(x) (((uint32_t)(((uint32_t)(x)) << MPU_WORD_ENDADDR_SHIFT)) & MPU_WORD_ENDADDR_MASK) +#define MPU_WORD_SRTADDR_MASK (0xFFFFFFE0U) +#define MPU_WORD_SRTADDR_SHIFT (5U) +#define MPU_WORD_SRTADDR(x) (((uint32_t)(((uint32_t)(x)) << MPU_WORD_SRTADDR_SHIFT)) & MPU_WORD_SRTADDR_MASK) +#define MPU_WORD_M1UM_MASK (0x1C0U) +#define MPU_WORD_M1UM_SHIFT (6U) +#define MPU_WORD_M1UM(x) (((uint32_t)(((uint32_t)(x)) << MPU_WORD_M1UM_SHIFT)) & MPU_WORD_M1UM_MASK) +#define MPU_WORD_M1SM_MASK (0x600U) +#define MPU_WORD_M1SM_SHIFT (9U) +#define MPU_WORD_M1SM(x) (((uint32_t)(((uint32_t)(x)) << MPU_WORD_M1SM_SHIFT)) & MPU_WORD_M1SM_MASK) +#define MPU_WORD_M1PE_MASK (0x800U) +#define MPU_WORD_M1PE_SHIFT (11U) +#define MPU_WORD_M1PE(x) (((uint32_t)(((uint32_t)(x)) << MPU_WORD_M1PE_SHIFT)) & MPU_WORD_M1PE_MASK) +#define MPU_WORD_M2UM_MASK (0x7000U) +#define MPU_WORD_M2UM_SHIFT (12U) +#define MPU_WORD_M2UM(x) (((uint32_t)(((uint32_t)(x)) << MPU_WORD_M2UM_SHIFT)) & MPU_WORD_M2UM_MASK) +#define MPU_WORD_M2SM_MASK (0x18000U) +#define MPU_WORD_M2SM_SHIFT (15U) +#define MPU_WORD_M2SM(x) (((uint32_t)(((uint32_t)(x)) << MPU_WORD_M2SM_SHIFT)) & MPU_WORD_M2SM_MASK) +#define MPU_WORD_PIDMASK_MASK (0xFF0000U) +#define MPU_WORD_PIDMASK_SHIFT (16U) +#define MPU_WORD_PIDMASK(x) (((uint32_t)(((uint32_t)(x)) << MPU_WORD_PIDMASK_SHIFT)) & MPU_WORD_PIDMASK_MASK) +#define MPU_WORD_M2PE_MASK (0x20000U) +#define MPU_WORD_M2PE_SHIFT (17U) +#define MPU_WORD_M2PE(x) (((uint32_t)(((uint32_t)(x)) << MPU_WORD_M2PE_SHIFT)) & MPU_WORD_M2PE_MASK) +#define MPU_WORD_M3UM_MASK (0x1C0000U) +#define MPU_WORD_M3UM_SHIFT (18U) +#define MPU_WORD_M3UM(x) (((uint32_t)(((uint32_t)(x)) << MPU_WORD_M3UM_SHIFT)) & MPU_WORD_M3UM_MASK) +#define MPU_WORD_M3SM_MASK (0x600000U) +#define MPU_WORD_M3SM_SHIFT (21U) +#define MPU_WORD_M3SM(x) (((uint32_t)(((uint32_t)(x)) << MPU_WORD_M3SM_SHIFT)) & MPU_WORD_M3SM_MASK) +#define MPU_WORD_M3PE_MASK (0x800000U) +#define MPU_WORD_M3PE_SHIFT (23U) +#define MPU_WORD_M3PE(x) (((uint32_t)(((uint32_t)(x)) << MPU_WORD_M3PE_SHIFT)) & MPU_WORD_M3PE_MASK) +#define MPU_WORD_PID_MASK (0xFF000000U) +#define MPU_WORD_PID_SHIFT (24U) +#define MPU_WORD_PID(x) (((uint32_t)(((uint32_t)(x)) << MPU_WORD_PID_SHIFT)) & MPU_WORD_PID_MASK) +#define MPU_WORD_M4WE_MASK (0x1000000U) +#define MPU_WORD_M4WE_SHIFT (24U) +#define MPU_WORD_M4WE(x) (((uint32_t)(((uint32_t)(x)) << MPU_WORD_M4WE_SHIFT)) & MPU_WORD_M4WE_MASK) +#define MPU_WORD_M4RE_MASK (0x2000000U) +#define MPU_WORD_M4RE_SHIFT (25U) +#define MPU_WORD_M4RE(x) (((uint32_t)(((uint32_t)(x)) << MPU_WORD_M4RE_SHIFT)) & MPU_WORD_M4RE_MASK) +#define MPU_WORD_M5WE_MASK (0x4000000U) +#define MPU_WORD_M5WE_SHIFT (26U) +#define MPU_WORD_M5WE(x) (((uint32_t)(((uint32_t)(x)) << MPU_WORD_M5WE_SHIFT)) & MPU_WORD_M5WE_MASK) +#define MPU_WORD_M5RE_MASK (0x8000000U) +#define MPU_WORD_M5RE_SHIFT (27U) +#define MPU_WORD_M5RE(x) (((uint32_t)(((uint32_t)(x)) << MPU_WORD_M5RE_SHIFT)) & MPU_WORD_M5RE_MASK) +#define MPU_WORD_M6WE_MASK (0x10000000U) +#define MPU_WORD_M6WE_SHIFT (28U) +#define MPU_WORD_M6WE(x) (((uint32_t)(((uint32_t)(x)) << MPU_WORD_M6WE_SHIFT)) & MPU_WORD_M6WE_MASK) +#define MPU_WORD_M6RE_MASK (0x20000000U) +#define MPU_WORD_M6RE_SHIFT (29U) +#define MPU_WORD_M6RE(x) (((uint32_t)(((uint32_t)(x)) << MPU_WORD_M6RE_SHIFT)) & MPU_WORD_M6RE_MASK) +#define MPU_WORD_M7WE_MASK (0x40000000U) +#define MPU_WORD_M7WE_SHIFT (30U) +#define MPU_WORD_M7WE(x) (((uint32_t)(((uint32_t)(x)) << MPU_WORD_M7WE_SHIFT)) & MPU_WORD_M7WE_MASK) +#define MPU_WORD_M7RE_MASK (0x80000000U) +#define MPU_WORD_M7RE_SHIFT (31U) +#define MPU_WORD_M7RE(x) (((uint32_t)(((uint32_t)(x)) << MPU_WORD_M7RE_SHIFT)) & MPU_WORD_M7RE_MASK) + +/* The count of MPU_WORD */ +#define MPU_WORD_COUNT (8U) + +/* The count of MPU_WORD */ +#define MPU_WORD_COUNT2 (4U) + +/*! @name RGDAAC - Region Descriptor Alternate Access Control n */ +#define MPU_RGDAAC_M0UM_MASK (0x7U) +#define MPU_RGDAAC_M0UM_SHIFT (0U) +#define MPU_RGDAAC_M0UM(x) (((uint32_t)(((uint32_t)(x)) << MPU_RGDAAC_M0UM_SHIFT)) & MPU_RGDAAC_M0UM_MASK) +#define MPU_RGDAAC_M0SM_MASK (0x18U) +#define MPU_RGDAAC_M0SM_SHIFT (3U) +#define MPU_RGDAAC_M0SM(x) (((uint32_t)(((uint32_t)(x)) << MPU_RGDAAC_M0SM_SHIFT)) & MPU_RGDAAC_M0SM_MASK) +#define MPU_RGDAAC_M0PE_MASK (0x20U) +#define MPU_RGDAAC_M0PE_SHIFT (5U) +#define MPU_RGDAAC_M0PE(x) (((uint32_t)(((uint32_t)(x)) << MPU_RGDAAC_M0PE_SHIFT)) & MPU_RGDAAC_M0PE_MASK) +#define MPU_RGDAAC_M1UM_MASK (0x1C0U) +#define MPU_RGDAAC_M1UM_SHIFT (6U) +#define MPU_RGDAAC_M1UM(x) (((uint32_t)(((uint32_t)(x)) << MPU_RGDAAC_M1UM_SHIFT)) & MPU_RGDAAC_M1UM_MASK) +#define MPU_RGDAAC_M1SM_MASK (0x600U) +#define MPU_RGDAAC_M1SM_SHIFT (9U) +#define MPU_RGDAAC_M1SM(x) (((uint32_t)(((uint32_t)(x)) << MPU_RGDAAC_M1SM_SHIFT)) & MPU_RGDAAC_M1SM_MASK) +#define MPU_RGDAAC_M1PE_MASK (0x800U) +#define MPU_RGDAAC_M1PE_SHIFT (11U) +#define MPU_RGDAAC_M1PE(x) (((uint32_t)(((uint32_t)(x)) << MPU_RGDAAC_M1PE_SHIFT)) & MPU_RGDAAC_M1PE_MASK) +#define MPU_RGDAAC_M2UM_MASK (0x7000U) +#define MPU_RGDAAC_M2UM_SHIFT (12U) +#define MPU_RGDAAC_M2UM(x) (((uint32_t)(((uint32_t)(x)) << MPU_RGDAAC_M2UM_SHIFT)) & MPU_RGDAAC_M2UM_MASK) +#define MPU_RGDAAC_M2SM_MASK (0x18000U) +#define MPU_RGDAAC_M2SM_SHIFT (15U) +#define MPU_RGDAAC_M2SM(x) (((uint32_t)(((uint32_t)(x)) << MPU_RGDAAC_M2SM_SHIFT)) & MPU_RGDAAC_M2SM_MASK) +#define MPU_RGDAAC_M2PE_MASK (0x20000U) +#define MPU_RGDAAC_M2PE_SHIFT (17U) +#define MPU_RGDAAC_M2PE(x) (((uint32_t)(((uint32_t)(x)) << MPU_RGDAAC_M2PE_SHIFT)) & MPU_RGDAAC_M2PE_MASK) +#define MPU_RGDAAC_M3UM_MASK (0x1C0000U) +#define MPU_RGDAAC_M3UM_SHIFT (18U) +#define MPU_RGDAAC_M3UM(x) (((uint32_t)(((uint32_t)(x)) << MPU_RGDAAC_M3UM_SHIFT)) & MPU_RGDAAC_M3UM_MASK) +#define MPU_RGDAAC_M3SM_MASK (0x600000U) +#define MPU_RGDAAC_M3SM_SHIFT (21U) +#define MPU_RGDAAC_M3SM(x) (((uint32_t)(((uint32_t)(x)) << MPU_RGDAAC_M3SM_SHIFT)) & MPU_RGDAAC_M3SM_MASK) +#define MPU_RGDAAC_M3PE_MASK (0x800000U) +#define MPU_RGDAAC_M3PE_SHIFT (23U) +#define MPU_RGDAAC_M3PE(x) (((uint32_t)(((uint32_t)(x)) << MPU_RGDAAC_M3PE_SHIFT)) & MPU_RGDAAC_M3PE_MASK) +#define MPU_RGDAAC_M4WE_MASK (0x1000000U) +#define MPU_RGDAAC_M4WE_SHIFT (24U) +#define MPU_RGDAAC_M4WE(x) (((uint32_t)(((uint32_t)(x)) << MPU_RGDAAC_M4WE_SHIFT)) & MPU_RGDAAC_M4WE_MASK) +#define MPU_RGDAAC_M4RE_MASK (0x2000000U) +#define MPU_RGDAAC_M4RE_SHIFT (25U) +#define MPU_RGDAAC_M4RE(x) (((uint32_t)(((uint32_t)(x)) << MPU_RGDAAC_M4RE_SHIFT)) & MPU_RGDAAC_M4RE_MASK) +#define MPU_RGDAAC_M5WE_MASK (0x4000000U) +#define MPU_RGDAAC_M5WE_SHIFT (26U) +#define MPU_RGDAAC_M5WE(x) (((uint32_t)(((uint32_t)(x)) << MPU_RGDAAC_M5WE_SHIFT)) & MPU_RGDAAC_M5WE_MASK) +#define MPU_RGDAAC_M5RE_MASK (0x8000000U) +#define MPU_RGDAAC_M5RE_SHIFT (27U) +#define MPU_RGDAAC_M5RE(x) (((uint32_t)(((uint32_t)(x)) << MPU_RGDAAC_M5RE_SHIFT)) & MPU_RGDAAC_M5RE_MASK) +#define MPU_RGDAAC_M6WE_MASK (0x10000000U) +#define MPU_RGDAAC_M6WE_SHIFT (28U) +#define MPU_RGDAAC_M6WE(x) (((uint32_t)(((uint32_t)(x)) << MPU_RGDAAC_M6WE_SHIFT)) & MPU_RGDAAC_M6WE_MASK) +#define MPU_RGDAAC_M6RE_MASK (0x20000000U) +#define MPU_RGDAAC_M6RE_SHIFT (29U) +#define MPU_RGDAAC_M6RE(x) (((uint32_t)(((uint32_t)(x)) << MPU_RGDAAC_M6RE_SHIFT)) & MPU_RGDAAC_M6RE_MASK) +#define MPU_RGDAAC_M7WE_MASK (0x40000000U) +#define MPU_RGDAAC_M7WE_SHIFT (30U) +#define MPU_RGDAAC_M7WE(x) (((uint32_t)(((uint32_t)(x)) << MPU_RGDAAC_M7WE_SHIFT)) & MPU_RGDAAC_M7WE_MASK) +#define MPU_RGDAAC_M7RE_MASK (0x80000000U) +#define MPU_RGDAAC_M7RE_SHIFT (31U) +#define MPU_RGDAAC_M7RE(x) (((uint32_t)(((uint32_t)(x)) << MPU_RGDAAC_M7RE_SHIFT)) & MPU_RGDAAC_M7RE_MASK) + +/* The count of MPU_RGDAAC */ +#define MPU_RGDAAC_COUNT (8U) + + +/*! + * @} + */ /* end of group MPU_Register_Masks */ + + +/* MPU - Peripheral instance base addresses */ +/** Peripheral MPU base address */ +#define MPU_BASE (0x4000D000u) +/** Peripheral MPU base pointer */ +#define MPU ((MPU_Type *)MPU_BASE) +/** Array initializer of MPU peripheral base addresses */ +#define MPU_BASE_ADDRS { MPU_BASE } +/** Array initializer of MPU peripheral base pointers */ +#define MPU_BASE_PTRS { MPU } + +/*! + * @} + */ /* end of group MPU_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- MTB Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup MTB_Peripheral_Access_Layer MTB Peripheral Access Layer + * @{ + */ + +/** MTB - Register Layout Typedef */ +typedef struct { + __IO uint32_t POSITION; /**< MTB Position Register, offset: 0x0 */ + __IO uint32_t MASTER; /**< MTB Master Register, offset: 0x4 */ + __IO uint32_t FLOW; /**< MTB Flow Register, offset: 0x8 */ + __I uint32_t BASE; /**< MTB Base Register, offset: 0xC */ + uint8_t RESERVED_0[3824]; + __I uint32_t MODECTRL; /**< Integration Mode Control Register, offset: 0xF00 */ + uint8_t RESERVED_1[156]; + __I uint32_t TAGSET; /**< Claim TAG Set Register, offset: 0xFA0 */ + __I uint32_t TAGCLEAR; /**< Claim TAG Clear Register, offset: 0xFA4 */ + uint8_t RESERVED_2[8]; + __I uint32_t LOCKACCESS; /**< Lock Access Register, offset: 0xFB0 */ + __I uint32_t LOCKSTAT; /**< Lock Status Register, offset: 0xFB4 */ + __I uint32_t AUTHSTAT; /**< Authentication Status Register, offset: 0xFB8 */ + __I uint32_t DEVICEARCH; /**< Device Architecture Register, offset: 0xFBC */ + uint8_t RESERVED_3[8]; + __I uint32_t DEVICECFG; /**< Device Configuration Register, offset: 0xFC8 */ + __I uint32_t DEVICETYPID; /**< Device Type Identifier Register, offset: 0xFCC */ + __I uint32_t PERIPHID4; /**< Peripheral ID Register, offset: 0xFD0 */ + __I uint32_t PERIPHID5; /**< Peripheral ID Register, offset: 0xFD4 */ + __I uint32_t PERIPHID6; /**< Peripheral ID Register, offset: 0xFD8 */ + __I uint32_t PERIPHID7; /**< Peripheral ID Register, offset: 0xFDC */ + __I uint32_t PERIPHID0; /**< Peripheral ID Register, offset: 0xFE0 */ + __I uint32_t PERIPHID1; /**< Peripheral ID Register, offset: 0xFE4 */ + __I uint32_t PERIPHID2; /**< Peripheral ID Register, offset: 0xFE8 */ + __I uint32_t PERIPHID3; /**< Peripheral ID Register, offset: 0xFEC */ + __I uint32_t COMPID[4]; /**< Component ID Register, array offset: 0xFF0, array step: 0x4 */ +} MTB_Type; + +/* ---------------------------------------------------------------------------- + -- MTB Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup MTB_Register_Masks MTB Register Masks + * @{ + */ + +/*! @name POSITION - MTB Position Register */ +#define MTB_POSITION_WRAP_MASK (0x4U) +#define MTB_POSITION_WRAP_SHIFT (2U) +#define MTB_POSITION_WRAP(x) (((uint32_t)(((uint32_t)(x)) << MTB_POSITION_WRAP_SHIFT)) & MTB_POSITION_WRAP_MASK) +#define MTB_POSITION_POINTER_MASK (0xFFFFFFF8U) +#define MTB_POSITION_POINTER_SHIFT (3U) +#define MTB_POSITION_POINTER(x) (((uint32_t)(((uint32_t)(x)) << MTB_POSITION_POINTER_SHIFT)) & MTB_POSITION_POINTER_MASK) + +/*! @name MASTER - MTB Master Register */ +#define MTB_MASTER_MASK_MASK (0x1FU) +#define MTB_MASTER_MASK_SHIFT (0U) +#define MTB_MASTER_MASK(x) (((uint32_t)(((uint32_t)(x)) << MTB_MASTER_MASK_SHIFT)) & MTB_MASTER_MASK_MASK) +#define MTB_MASTER_TSTARTEN_MASK (0x20U) +#define MTB_MASTER_TSTARTEN_SHIFT (5U) +#define MTB_MASTER_TSTARTEN(x) (((uint32_t)(((uint32_t)(x)) << MTB_MASTER_TSTARTEN_SHIFT)) & MTB_MASTER_TSTARTEN_MASK) +#define MTB_MASTER_TSTOPEN_MASK (0x40U) +#define MTB_MASTER_TSTOPEN_SHIFT (6U) +#define MTB_MASTER_TSTOPEN(x) (((uint32_t)(((uint32_t)(x)) << MTB_MASTER_TSTOPEN_SHIFT)) & MTB_MASTER_TSTOPEN_MASK) +#define MTB_MASTER_SFRWPRIV_MASK (0x80U) +#define MTB_MASTER_SFRWPRIV_SHIFT (7U) +#define MTB_MASTER_SFRWPRIV(x) (((uint32_t)(((uint32_t)(x)) << MTB_MASTER_SFRWPRIV_SHIFT)) & MTB_MASTER_SFRWPRIV_MASK) +#define MTB_MASTER_RAMPRIV_MASK (0x100U) +#define MTB_MASTER_RAMPRIV_SHIFT (8U) +#define MTB_MASTER_RAMPRIV(x) (((uint32_t)(((uint32_t)(x)) << MTB_MASTER_RAMPRIV_SHIFT)) & MTB_MASTER_RAMPRIV_MASK) +#define MTB_MASTER_HALTREQ_MASK (0x200U) +#define MTB_MASTER_HALTREQ_SHIFT (9U) +#define MTB_MASTER_HALTREQ(x) (((uint32_t)(((uint32_t)(x)) << MTB_MASTER_HALTREQ_SHIFT)) & MTB_MASTER_HALTREQ_MASK) +#define MTB_MASTER_EN_MASK (0x80000000U) +#define MTB_MASTER_EN_SHIFT (31U) +#define MTB_MASTER_EN(x) (((uint32_t)(((uint32_t)(x)) << MTB_MASTER_EN_SHIFT)) & MTB_MASTER_EN_MASK) + +/*! @name FLOW - MTB Flow Register */ +#define MTB_FLOW_AUTOSTOP_MASK (0x1U) +#define MTB_FLOW_AUTOSTOP_SHIFT (0U) +#define MTB_FLOW_AUTOSTOP(x) (((uint32_t)(((uint32_t)(x)) << MTB_FLOW_AUTOSTOP_SHIFT)) & MTB_FLOW_AUTOSTOP_MASK) +#define MTB_FLOW_AUTOHALT_MASK (0x2U) +#define MTB_FLOW_AUTOHALT_SHIFT (1U) +#define MTB_FLOW_AUTOHALT(x) (((uint32_t)(((uint32_t)(x)) << MTB_FLOW_AUTOHALT_SHIFT)) & MTB_FLOW_AUTOHALT_MASK) +#define MTB_FLOW_WATERMARK_MASK (0xFFFFFFF8U) +#define MTB_FLOW_WATERMARK_SHIFT (3U) +#define MTB_FLOW_WATERMARK(x) (((uint32_t)(((uint32_t)(x)) << MTB_FLOW_WATERMARK_SHIFT)) & MTB_FLOW_WATERMARK_MASK) + +/*! @name BASE - MTB Base Register */ +#define MTB_BASE_BASEADDR_MASK (0xFFFFFFFFU) +#define MTB_BASE_BASEADDR_SHIFT (0U) +#define MTB_BASE_BASEADDR(x) (((uint32_t)(((uint32_t)(x)) << MTB_BASE_BASEADDR_SHIFT)) & MTB_BASE_BASEADDR_MASK) + +/*! @name MODECTRL - Integration Mode Control Register */ +#define MTB_MODECTRL_MODECTRL_MASK (0xFFFFFFFFU) +#define MTB_MODECTRL_MODECTRL_SHIFT (0U) +#define MTB_MODECTRL_MODECTRL(x) (((uint32_t)(((uint32_t)(x)) << MTB_MODECTRL_MODECTRL_SHIFT)) & MTB_MODECTRL_MODECTRL_MASK) + +/*! @name TAGSET - Claim TAG Set Register */ +#define MTB_TAGSET_TAGSET_MASK (0xFFFFFFFFU) +#define MTB_TAGSET_TAGSET_SHIFT (0U) +#define MTB_TAGSET_TAGSET(x) (((uint32_t)(((uint32_t)(x)) << MTB_TAGSET_TAGSET_SHIFT)) & MTB_TAGSET_TAGSET_MASK) + +/*! @name TAGCLEAR - Claim TAG Clear Register */ +#define MTB_TAGCLEAR_TAGCLEAR_MASK (0xFFFFFFFFU) +#define MTB_TAGCLEAR_TAGCLEAR_SHIFT (0U) +#define MTB_TAGCLEAR_TAGCLEAR(x) (((uint32_t)(((uint32_t)(x)) << MTB_TAGCLEAR_TAGCLEAR_SHIFT)) & MTB_TAGCLEAR_TAGCLEAR_MASK) + +/*! @name LOCKACCESS - Lock Access Register */ +#define MTB_LOCKACCESS_LOCKACCESS_MASK (0xFFFFFFFFU) +#define MTB_LOCKACCESS_LOCKACCESS_SHIFT (0U) +#define MTB_LOCKACCESS_LOCKACCESS(x) (((uint32_t)(((uint32_t)(x)) << MTB_LOCKACCESS_LOCKACCESS_SHIFT)) & MTB_LOCKACCESS_LOCKACCESS_MASK) + +/*! @name LOCKSTAT - Lock Status Register */ +#define MTB_LOCKSTAT_LOCKSTAT_MASK (0xFFFFFFFFU) +#define MTB_LOCKSTAT_LOCKSTAT_SHIFT (0U) +#define MTB_LOCKSTAT_LOCKSTAT(x) (((uint32_t)(((uint32_t)(x)) << MTB_LOCKSTAT_LOCKSTAT_SHIFT)) & MTB_LOCKSTAT_LOCKSTAT_MASK) + +/*! @name AUTHSTAT - Authentication Status Register */ +#define MTB_AUTHSTAT_BIT0_MASK (0x1U) +#define MTB_AUTHSTAT_BIT0_SHIFT (0U) +#define MTB_AUTHSTAT_BIT0(x) (((uint32_t)(((uint32_t)(x)) << MTB_AUTHSTAT_BIT0_SHIFT)) & MTB_AUTHSTAT_BIT0_MASK) +#define MTB_AUTHSTAT_BIT2_MASK (0x4U) +#define MTB_AUTHSTAT_BIT2_SHIFT (2U) +#define MTB_AUTHSTAT_BIT2(x) (((uint32_t)(((uint32_t)(x)) << MTB_AUTHSTAT_BIT2_SHIFT)) & MTB_AUTHSTAT_BIT2_MASK) + +/*! @name DEVICEARCH - Device Architecture Register */ +#define MTB_DEVICEARCH_DEVICEARCH_MASK (0xFFFFFFFFU) +#define MTB_DEVICEARCH_DEVICEARCH_SHIFT (0U) +#define MTB_DEVICEARCH_DEVICEARCH(x) (((uint32_t)(((uint32_t)(x)) << MTB_DEVICEARCH_DEVICEARCH_SHIFT)) & MTB_DEVICEARCH_DEVICEARCH_MASK) + +/*! @name DEVICECFG - Device Configuration Register */ +#define MTB_DEVICECFG_DEVICECFG_MASK (0xFFFFFFFFU) +#define MTB_DEVICECFG_DEVICECFG_SHIFT (0U) +#define MTB_DEVICECFG_DEVICECFG(x) (((uint32_t)(((uint32_t)(x)) << MTB_DEVICECFG_DEVICECFG_SHIFT)) & MTB_DEVICECFG_DEVICECFG_MASK) + +/*! @name DEVICETYPID - Device Type Identifier Register */ +#define MTB_DEVICETYPID_DEVICETYPID_MASK (0xFFFFFFFFU) +#define MTB_DEVICETYPID_DEVICETYPID_SHIFT (0U) +#define MTB_DEVICETYPID_DEVICETYPID(x) (((uint32_t)(((uint32_t)(x)) << MTB_DEVICETYPID_DEVICETYPID_SHIFT)) & MTB_DEVICETYPID_DEVICETYPID_MASK) + +/*! @name PERIPHID4 - Peripheral ID Register */ +#define MTB_PERIPHID4_PERIPHID_MASK (0xFFFFFFFFU) +#define MTB_PERIPHID4_PERIPHID_SHIFT (0U) +#define MTB_PERIPHID4_PERIPHID(x) (((uint32_t)(((uint32_t)(x)) << MTB_PERIPHID4_PERIPHID_SHIFT)) & MTB_PERIPHID4_PERIPHID_MASK) + +/*! @name PERIPHID5 - Peripheral ID Register */ +#define MTB_PERIPHID5_PERIPHID_MASK (0xFFFFFFFFU) +#define MTB_PERIPHID5_PERIPHID_SHIFT (0U) +#define MTB_PERIPHID5_PERIPHID(x) (((uint32_t)(((uint32_t)(x)) << MTB_PERIPHID5_PERIPHID_SHIFT)) & MTB_PERIPHID5_PERIPHID_MASK) + +/*! @name PERIPHID6 - Peripheral ID Register */ +#define MTB_PERIPHID6_PERIPHID_MASK (0xFFFFFFFFU) +#define MTB_PERIPHID6_PERIPHID_SHIFT (0U) +#define MTB_PERIPHID6_PERIPHID(x) (((uint32_t)(((uint32_t)(x)) << MTB_PERIPHID6_PERIPHID_SHIFT)) & MTB_PERIPHID6_PERIPHID_MASK) + +/*! @name PERIPHID7 - Peripheral ID Register */ +#define MTB_PERIPHID7_PERIPHID_MASK (0xFFFFFFFFU) +#define MTB_PERIPHID7_PERIPHID_SHIFT (0U) +#define MTB_PERIPHID7_PERIPHID(x) (((uint32_t)(((uint32_t)(x)) << MTB_PERIPHID7_PERIPHID_SHIFT)) & MTB_PERIPHID7_PERIPHID_MASK) + +/*! @name PERIPHID0 - Peripheral ID Register */ +#define MTB_PERIPHID0_PERIPHID_MASK (0xFFFFFFFFU) +#define MTB_PERIPHID0_PERIPHID_SHIFT (0U) +#define MTB_PERIPHID0_PERIPHID(x) (((uint32_t)(((uint32_t)(x)) << MTB_PERIPHID0_PERIPHID_SHIFT)) & MTB_PERIPHID0_PERIPHID_MASK) + +/*! @name PERIPHID1 - Peripheral ID Register */ +#define MTB_PERIPHID1_PERIPHID_MASK (0xFFFFFFFFU) +#define MTB_PERIPHID1_PERIPHID_SHIFT (0U) +#define MTB_PERIPHID1_PERIPHID(x) (((uint32_t)(((uint32_t)(x)) << MTB_PERIPHID1_PERIPHID_SHIFT)) & MTB_PERIPHID1_PERIPHID_MASK) + +/*! @name PERIPHID2 - Peripheral ID Register */ +#define MTB_PERIPHID2_PERIPHID_MASK (0xFFFFFFFFU) +#define MTB_PERIPHID2_PERIPHID_SHIFT (0U) +#define MTB_PERIPHID2_PERIPHID(x) (((uint32_t)(((uint32_t)(x)) << MTB_PERIPHID2_PERIPHID_SHIFT)) & MTB_PERIPHID2_PERIPHID_MASK) + +/*! @name PERIPHID3 - Peripheral ID Register */ +#define MTB_PERIPHID3_PERIPHID_MASK (0xFFFFFFFFU) +#define MTB_PERIPHID3_PERIPHID_SHIFT (0U) +#define MTB_PERIPHID3_PERIPHID(x) (((uint32_t)(((uint32_t)(x)) << MTB_PERIPHID3_PERIPHID_SHIFT)) & MTB_PERIPHID3_PERIPHID_MASK) + +/*! @name COMPID - Component ID Register */ +#define MTB_COMPID_COMPID_MASK (0xFFFFFFFFU) +#define MTB_COMPID_COMPID_SHIFT (0U) +#define MTB_COMPID_COMPID(x) (((uint32_t)(((uint32_t)(x)) << MTB_COMPID_COMPID_SHIFT)) & MTB_COMPID_COMPID_MASK) + +/* The count of MTB_COMPID */ +#define MTB_COMPID_COUNT (4U) + + +/*! + * @} + */ /* end of group MTB_Register_Masks */ + + +/* MTB - Peripheral instance base addresses */ +/** Peripheral MTB base address */ +#define MTB_BASE (0xF0000000u) +/** Peripheral MTB base pointer */ +#define MTB ((MTB_Type *)MTB_BASE) +/** Array initializer of MTB peripheral base addresses */ +#define MTB_BASE_ADDRS { MTB_BASE } +/** Array initializer of MTB peripheral base pointers */ +#define MTB_BASE_PTRS { MTB } + +/*! + * @} + */ /* end of group MTB_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- MTBDWT Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup MTBDWT_Peripheral_Access_Layer MTBDWT Peripheral Access Layer + * @{ + */ + +/** MTBDWT - Register Layout Typedef */ +typedef struct { + __I uint32_t CTRL; /**< MTB DWT Control Register, offset: 0x0 */ + uint8_t RESERVED_0[28]; + struct { /* offset: 0x20, array step: 0x10 */ + __IO uint32_t COMP; /**< MTB_DWT Comparator Register, array offset: 0x20, array step: 0x10 */ + __IO uint32_t MASK; /**< MTB_DWT Comparator Mask Register, array offset: 0x24, array step: 0x10 */ + __IO uint32_t FCT; /**< MTB_DWT Comparator Function Register 0..MTB_DWT Comparator Function Register 1, array offset: 0x28, array step: 0x10 */ + uint8_t RESERVED_0[4]; + } COMPARATOR[2]; + uint8_t RESERVED_1[448]; + __IO uint32_t TBCTRL; /**< MTB_DWT Trace Buffer Control Register, offset: 0x200 */ + uint8_t RESERVED_2[3524]; + __I uint32_t DEVICECFG; /**< Device Configuration Register, offset: 0xFC8 */ + __I uint32_t DEVICETYPID; /**< Device Type Identifier Register, offset: 0xFCC */ + __I uint32_t PERIPHID4; /**< Peripheral ID Register, offset: 0xFD0 */ + __I uint32_t PERIPHID5; /**< Peripheral ID Register, offset: 0xFD4 */ + __I uint32_t PERIPHID6; /**< Peripheral ID Register, offset: 0xFD8 */ + __I uint32_t PERIPHID7; /**< Peripheral ID Register, offset: 0xFDC */ + __I uint32_t PERIPHID0; /**< Peripheral ID Register, offset: 0xFE0 */ + __I uint32_t PERIPHID1; /**< Peripheral ID Register, offset: 0xFE4 */ + __I uint32_t PERIPHID2; /**< Peripheral ID Register, offset: 0xFE8 */ + __I uint32_t PERIPHID3; /**< Peripheral ID Register, offset: 0xFEC */ + __I uint32_t COMPID[4]; /**< Component ID Register, array offset: 0xFF0, array step: 0x4 */ +} MTBDWT_Type; + +/* ---------------------------------------------------------------------------- + -- MTBDWT Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup MTBDWT_Register_Masks MTBDWT Register Masks + * @{ + */ + +/*! @name CTRL - MTB DWT Control Register */ +#define MTBDWT_CTRL_DWTCFGCTRL_MASK (0xFFFFFFFU) +#define MTBDWT_CTRL_DWTCFGCTRL_SHIFT (0U) +#define MTBDWT_CTRL_DWTCFGCTRL(x) (((uint32_t)(((uint32_t)(x)) << MTBDWT_CTRL_DWTCFGCTRL_SHIFT)) & MTBDWT_CTRL_DWTCFGCTRL_MASK) +#define MTBDWT_CTRL_NUMCMP_MASK (0xF0000000U) +#define MTBDWT_CTRL_NUMCMP_SHIFT (28U) +#define MTBDWT_CTRL_NUMCMP(x) (((uint32_t)(((uint32_t)(x)) << MTBDWT_CTRL_NUMCMP_SHIFT)) & MTBDWT_CTRL_NUMCMP_MASK) + +/*! @name COMP - MTB_DWT Comparator Register */ +#define MTBDWT_COMP_COMP_MASK (0xFFFFFFFFU) +#define MTBDWT_COMP_COMP_SHIFT (0U) +#define MTBDWT_COMP_COMP(x) (((uint32_t)(((uint32_t)(x)) << MTBDWT_COMP_COMP_SHIFT)) & MTBDWT_COMP_COMP_MASK) + +/* The count of MTBDWT_COMP */ +#define MTBDWT_COMP_COUNT (2U) + +/*! @name MASK - MTB_DWT Comparator Mask Register */ +#define MTBDWT_MASK_MASK_MASK (0x1FU) +#define MTBDWT_MASK_MASK_SHIFT (0U) +#define MTBDWT_MASK_MASK(x) (((uint32_t)(((uint32_t)(x)) << MTBDWT_MASK_MASK_SHIFT)) & MTBDWT_MASK_MASK_MASK) + +/* The count of MTBDWT_MASK */ +#define MTBDWT_MASK_COUNT (2U) + +/*! @name FCT - MTB_DWT Comparator Function Register 0..MTB_DWT Comparator Function Register 1 */ +#define MTBDWT_FCT_FUNCTION_MASK (0xFU) +#define MTBDWT_FCT_FUNCTION_SHIFT (0U) +#define MTBDWT_FCT_FUNCTION(x) (((uint32_t)(((uint32_t)(x)) << MTBDWT_FCT_FUNCTION_SHIFT)) & MTBDWT_FCT_FUNCTION_MASK) +#define MTBDWT_FCT_DATAVMATCH_MASK (0x100U) +#define MTBDWT_FCT_DATAVMATCH_SHIFT (8U) +#define MTBDWT_FCT_DATAVMATCH(x) (((uint32_t)(((uint32_t)(x)) << MTBDWT_FCT_DATAVMATCH_SHIFT)) & MTBDWT_FCT_DATAVMATCH_MASK) +#define MTBDWT_FCT_DATAVSIZE_MASK (0xC00U) +#define MTBDWT_FCT_DATAVSIZE_SHIFT (10U) +#define MTBDWT_FCT_DATAVSIZE(x) (((uint32_t)(((uint32_t)(x)) << MTBDWT_FCT_DATAVSIZE_SHIFT)) & MTBDWT_FCT_DATAVSIZE_MASK) +#define MTBDWT_FCT_DATAVADDR0_MASK (0xF000U) +#define MTBDWT_FCT_DATAVADDR0_SHIFT (12U) +#define MTBDWT_FCT_DATAVADDR0(x) (((uint32_t)(((uint32_t)(x)) << MTBDWT_FCT_DATAVADDR0_SHIFT)) & MTBDWT_FCT_DATAVADDR0_MASK) +#define MTBDWT_FCT_MATCHED_MASK (0x1000000U) +#define MTBDWT_FCT_MATCHED_SHIFT (24U) +#define MTBDWT_FCT_MATCHED(x) (((uint32_t)(((uint32_t)(x)) << MTBDWT_FCT_MATCHED_SHIFT)) & MTBDWT_FCT_MATCHED_MASK) + +/* The count of MTBDWT_FCT */ +#define MTBDWT_FCT_COUNT (2U) + +/*! @name TBCTRL - MTB_DWT Trace Buffer Control Register */ +#define MTBDWT_TBCTRL_ACOMP0_MASK (0x1U) +#define MTBDWT_TBCTRL_ACOMP0_SHIFT (0U) +#define MTBDWT_TBCTRL_ACOMP0(x) (((uint32_t)(((uint32_t)(x)) << MTBDWT_TBCTRL_ACOMP0_SHIFT)) & MTBDWT_TBCTRL_ACOMP0_MASK) +#define MTBDWT_TBCTRL_ACOMP1_MASK (0x2U) +#define MTBDWT_TBCTRL_ACOMP1_SHIFT (1U) +#define MTBDWT_TBCTRL_ACOMP1(x) (((uint32_t)(((uint32_t)(x)) << MTBDWT_TBCTRL_ACOMP1_SHIFT)) & MTBDWT_TBCTRL_ACOMP1_MASK) +#define MTBDWT_TBCTRL_NUMCOMP_MASK (0xF0000000U) +#define MTBDWT_TBCTRL_NUMCOMP_SHIFT (28U) +#define MTBDWT_TBCTRL_NUMCOMP(x) (((uint32_t)(((uint32_t)(x)) << MTBDWT_TBCTRL_NUMCOMP_SHIFT)) & MTBDWT_TBCTRL_NUMCOMP_MASK) + +/*! @name DEVICECFG - Device Configuration Register */ +#define MTBDWT_DEVICECFG_DEVICECFG_MASK (0xFFFFFFFFU) +#define MTBDWT_DEVICECFG_DEVICECFG_SHIFT (0U) +#define MTBDWT_DEVICECFG_DEVICECFG(x) (((uint32_t)(((uint32_t)(x)) << MTBDWT_DEVICECFG_DEVICECFG_SHIFT)) & MTBDWT_DEVICECFG_DEVICECFG_MASK) + +/*! @name DEVICETYPID - Device Type Identifier Register */ +#define MTBDWT_DEVICETYPID_DEVICETYPID_MASK (0xFFFFFFFFU) +#define MTBDWT_DEVICETYPID_DEVICETYPID_SHIFT (0U) +#define MTBDWT_DEVICETYPID_DEVICETYPID(x) (((uint32_t)(((uint32_t)(x)) << MTBDWT_DEVICETYPID_DEVICETYPID_SHIFT)) & MTBDWT_DEVICETYPID_DEVICETYPID_MASK) + +/*! @name PERIPHID4 - Peripheral ID Register */ +#define MTBDWT_PERIPHID4_PERIPHID_MASK (0xFFFFFFFFU) +#define MTBDWT_PERIPHID4_PERIPHID_SHIFT (0U) +#define MTBDWT_PERIPHID4_PERIPHID(x) (((uint32_t)(((uint32_t)(x)) << MTBDWT_PERIPHID4_PERIPHID_SHIFT)) & MTBDWT_PERIPHID4_PERIPHID_MASK) + +/*! @name PERIPHID5 - Peripheral ID Register */ +#define MTBDWT_PERIPHID5_PERIPHID_MASK (0xFFFFFFFFU) +#define MTBDWT_PERIPHID5_PERIPHID_SHIFT (0U) +#define MTBDWT_PERIPHID5_PERIPHID(x) (((uint32_t)(((uint32_t)(x)) << MTBDWT_PERIPHID5_PERIPHID_SHIFT)) & MTBDWT_PERIPHID5_PERIPHID_MASK) + +/*! @name PERIPHID6 - Peripheral ID Register */ +#define MTBDWT_PERIPHID6_PERIPHID_MASK (0xFFFFFFFFU) +#define MTBDWT_PERIPHID6_PERIPHID_SHIFT (0U) +#define MTBDWT_PERIPHID6_PERIPHID(x) (((uint32_t)(((uint32_t)(x)) << MTBDWT_PERIPHID6_PERIPHID_SHIFT)) & MTBDWT_PERIPHID6_PERIPHID_MASK) + +/*! @name PERIPHID7 - Peripheral ID Register */ +#define MTBDWT_PERIPHID7_PERIPHID_MASK (0xFFFFFFFFU) +#define MTBDWT_PERIPHID7_PERIPHID_SHIFT (0U) +#define MTBDWT_PERIPHID7_PERIPHID(x) (((uint32_t)(((uint32_t)(x)) << MTBDWT_PERIPHID7_PERIPHID_SHIFT)) & MTBDWT_PERIPHID7_PERIPHID_MASK) + +/*! @name PERIPHID0 - Peripheral ID Register */ +#define MTBDWT_PERIPHID0_PERIPHID_MASK (0xFFFFFFFFU) +#define MTBDWT_PERIPHID0_PERIPHID_SHIFT (0U) +#define MTBDWT_PERIPHID0_PERIPHID(x) (((uint32_t)(((uint32_t)(x)) << MTBDWT_PERIPHID0_PERIPHID_SHIFT)) & MTBDWT_PERIPHID0_PERIPHID_MASK) + +/*! @name PERIPHID1 - Peripheral ID Register */ +#define MTBDWT_PERIPHID1_PERIPHID_MASK (0xFFFFFFFFU) +#define MTBDWT_PERIPHID1_PERIPHID_SHIFT (0U) +#define MTBDWT_PERIPHID1_PERIPHID(x) (((uint32_t)(((uint32_t)(x)) << MTBDWT_PERIPHID1_PERIPHID_SHIFT)) & MTBDWT_PERIPHID1_PERIPHID_MASK) + +/*! @name PERIPHID2 - Peripheral ID Register */ +#define MTBDWT_PERIPHID2_PERIPHID_MASK (0xFFFFFFFFU) +#define MTBDWT_PERIPHID2_PERIPHID_SHIFT (0U) +#define MTBDWT_PERIPHID2_PERIPHID(x) (((uint32_t)(((uint32_t)(x)) << MTBDWT_PERIPHID2_PERIPHID_SHIFT)) & MTBDWT_PERIPHID2_PERIPHID_MASK) + +/*! @name PERIPHID3 - Peripheral ID Register */ +#define MTBDWT_PERIPHID3_PERIPHID_MASK (0xFFFFFFFFU) +#define MTBDWT_PERIPHID3_PERIPHID_SHIFT (0U) +#define MTBDWT_PERIPHID3_PERIPHID(x) (((uint32_t)(((uint32_t)(x)) << MTBDWT_PERIPHID3_PERIPHID_SHIFT)) & MTBDWT_PERIPHID3_PERIPHID_MASK) + +/*! @name COMPID - Component ID Register */ +#define MTBDWT_COMPID_COMPID_MASK (0xFFFFFFFFU) +#define MTBDWT_COMPID_COMPID_SHIFT (0U) +#define MTBDWT_COMPID_COMPID(x) (((uint32_t)(((uint32_t)(x)) << MTBDWT_COMPID_COMPID_SHIFT)) & MTBDWT_COMPID_COMPID_MASK) + +/* The count of MTBDWT_COMPID */ +#define MTBDWT_COMPID_COUNT (4U) + + +/*! + * @} + */ /* end of group MTBDWT_Register_Masks */ + + +/* MTBDWT - Peripheral instance base addresses */ +/** Peripheral MTBDWT base address */ +#define MTBDWT_BASE (0xF0001000u) +/** Peripheral MTBDWT base pointer */ +#define MTBDWT ((MTBDWT_Type *)MTBDWT_BASE) +/** Array initializer of MTBDWT peripheral base addresses */ +#define MTBDWT_BASE_ADDRS { MTBDWT_BASE } +/** Array initializer of MTBDWT peripheral base pointers */ +#define MTBDWT_BASE_PTRS { MTBDWT } + +/*! + * @} + */ /* end of group MTBDWT_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- NV Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup NV_Peripheral_Access_Layer NV Peripheral Access Layer + * @{ + */ + +/** NV - Register Layout Typedef */ +typedef struct { + __I uint8_t BACKKEY3; /**< Backdoor Comparison Key 3., offset: 0x0 */ + __I uint8_t BACKKEY2; /**< Backdoor Comparison Key 2., offset: 0x1 */ + __I uint8_t BACKKEY1; /**< Backdoor Comparison Key 1., offset: 0x2 */ + __I uint8_t BACKKEY0; /**< Backdoor Comparison Key 0., offset: 0x3 */ + __I uint8_t BACKKEY7; /**< Backdoor Comparison Key 7., offset: 0x4 */ + __I uint8_t BACKKEY6; /**< Backdoor Comparison Key 6., offset: 0x5 */ + __I uint8_t BACKKEY5; /**< Backdoor Comparison Key 5., offset: 0x6 */ + __I uint8_t BACKKEY4; /**< Backdoor Comparison Key 4., offset: 0x7 */ + __I uint8_t FPROT3; /**< Non-volatile P-Flash Protection 1 - Low Register, offset: 0x8 */ + __I uint8_t FPROT2; /**< Non-volatile P-Flash Protection 1 - High Register, offset: 0x9 */ + __I uint8_t FPROT1; /**< Non-volatile P-Flash Protection 0 - Low Register, offset: 0xA */ + __I uint8_t FPROT0; /**< Non-volatile P-Flash Protection 0 - High Register, offset: 0xB */ + __I uint8_t FSEC; /**< Non-volatile Flash Security Register, offset: 0xC */ + __I uint8_t FOPT; /**< Non-volatile Flash Option Register, offset: 0xD */ +} NV_Type; + +/* ---------------------------------------------------------------------------- + -- NV Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup NV_Register_Masks NV Register Masks + * @{ + */ + +/*! @name BACKKEY3 - Backdoor Comparison Key 3. */ +#define NV_BACKKEY3_KEY_MASK (0xFFU) +#define NV_BACKKEY3_KEY_SHIFT (0U) +#define NV_BACKKEY3_KEY(x) (((uint8_t)(((uint8_t)(x)) << NV_BACKKEY3_KEY_SHIFT)) & NV_BACKKEY3_KEY_MASK) + +/*! @name BACKKEY2 - Backdoor Comparison Key 2. */ +#define NV_BACKKEY2_KEY_MASK (0xFFU) +#define NV_BACKKEY2_KEY_SHIFT (0U) +#define NV_BACKKEY2_KEY(x) (((uint8_t)(((uint8_t)(x)) << NV_BACKKEY2_KEY_SHIFT)) & NV_BACKKEY2_KEY_MASK) + +/*! @name BACKKEY1 - Backdoor Comparison Key 1. */ +#define NV_BACKKEY1_KEY_MASK (0xFFU) +#define NV_BACKKEY1_KEY_SHIFT (0U) +#define NV_BACKKEY1_KEY(x) (((uint8_t)(((uint8_t)(x)) << NV_BACKKEY1_KEY_SHIFT)) & NV_BACKKEY1_KEY_MASK) + +/*! @name BACKKEY0 - Backdoor Comparison Key 0. */ +#define NV_BACKKEY0_KEY_MASK (0xFFU) +#define NV_BACKKEY0_KEY_SHIFT (0U) +#define NV_BACKKEY0_KEY(x) (((uint8_t)(((uint8_t)(x)) << NV_BACKKEY0_KEY_SHIFT)) & NV_BACKKEY0_KEY_MASK) + +/*! @name BACKKEY7 - Backdoor Comparison Key 7. */ +#define NV_BACKKEY7_KEY_MASK (0xFFU) +#define NV_BACKKEY7_KEY_SHIFT (0U) +#define NV_BACKKEY7_KEY(x) (((uint8_t)(((uint8_t)(x)) << NV_BACKKEY7_KEY_SHIFT)) & NV_BACKKEY7_KEY_MASK) + +/*! @name BACKKEY6 - Backdoor Comparison Key 6. */ +#define NV_BACKKEY6_KEY_MASK (0xFFU) +#define NV_BACKKEY6_KEY_SHIFT (0U) +#define NV_BACKKEY6_KEY(x) (((uint8_t)(((uint8_t)(x)) << NV_BACKKEY6_KEY_SHIFT)) & NV_BACKKEY6_KEY_MASK) + +/*! @name BACKKEY5 - Backdoor Comparison Key 5. */ +#define NV_BACKKEY5_KEY_MASK (0xFFU) +#define NV_BACKKEY5_KEY_SHIFT (0U) +#define NV_BACKKEY5_KEY(x) (((uint8_t)(((uint8_t)(x)) << NV_BACKKEY5_KEY_SHIFT)) & NV_BACKKEY5_KEY_MASK) + +/*! @name BACKKEY4 - Backdoor Comparison Key 4. */ +#define NV_BACKKEY4_KEY_MASK (0xFFU) +#define NV_BACKKEY4_KEY_SHIFT (0U) +#define NV_BACKKEY4_KEY(x) (((uint8_t)(((uint8_t)(x)) << NV_BACKKEY4_KEY_SHIFT)) & NV_BACKKEY4_KEY_MASK) + +/*! @name FPROT3 - Non-volatile P-Flash Protection 1 - Low Register */ +#define NV_FPROT3_PROT_MASK (0xFFU) +#define NV_FPROT3_PROT_SHIFT (0U) +#define NV_FPROT3_PROT(x) (((uint8_t)(((uint8_t)(x)) << NV_FPROT3_PROT_SHIFT)) & NV_FPROT3_PROT_MASK) + +/*! @name FPROT2 - Non-volatile P-Flash Protection 1 - High Register */ +#define NV_FPROT2_PROT_MASK (0xFFU) +#define NV_FPROT2_PROT_SHIFT (0U) +#define NV_FPROT2_PROT(x) (((uint8_t)(((uint8_t)(x)) << NV_FPROT2_PROT_SHIFT)) & NV_FPROT2_PROT_MASK) + +/*! @name FPROT1 - Non-volatile P-Flash Protection 0 - Low Register */ +#define NV_FPROT1_PROT_MASK (0xFFU) +#define NV_FPROT1_PROT_SHIFT (0U) +#define NV_FPROT1_PROT(x) (((uint8_t)(((uint8_t)(x)) << NV_FPROT1_PROT_SHIFT)) & NV_FPROT1_PROT_MASK) + +/*! @name FPROT0 - Non-volatile P-Flash Protection 0 - High Register */ +#define NV_FPROT0_PROT_MASK (0xFFU) +#define NV_FPROT0_PROT_SHIFT (0U) +#define NV_FPROT0_PROT(x) (((uint8_t)(((uint8_t)(x)) << NV_FPROT0_PROT_SHIFT)) & NV_FPROT0_PROT_MASK) + +/*! @name FSEC - Non-volatile Flash Security Register */ +#define NV_FSEC_SEC_MASK (0x3U) +#define NV_FSEC_SEC_SHIFT (0U) +#define NV_FSEC_SEC(x) (((uint8_t)(((uint8_t)(x)) << NV_FSEC_SEC_SHIFT)) & NV_FSEC_SEC_MASK) +#define NV_FSEC_FSLACC_MASK (0xCU) +#define NV_FSEC_FSLACC_SHIFT (2U) +#define NV_FSEC_FSLACC(x) (((uint8_t)(((uint8_t)(x)) << NV_FSEC_FSLACC_SHIFT)) & NV_FSEC_FSLACC_MASK) +#define NV_FSEC_MEEN_MASK (0x30U) +#define NV_FSEC_MEEN_SHIFT (4U) +#define NV_FSEC_MEEN(x) (((uint8_t)(((uint8_t)(x)) << NV_FSEC_MEEN_SHIFT)) & NV_FSEC_MEEN_MASK) +#define NV_FSEC_KEYEN_MASK (0xC0U) +#define NV_FSEC_KEYEN_SHIFT (6U) +#define NV_FSEC_KEYEN(x) (((uint8_t)(((uint8_t)(x)) << NV_FSEC_KEYEN_SHIFT)) & NV_FSEC_KEYEN_MASK) + +/*! @name FOPT - Non-volatile Flash Option Register */ +#define NV_FOPT_LPBOOT_MASK (0x1U) +#define NV_FOPT_LPBOOT_SHIFT (0U) +#define NV_FOPT_LPBOOT(x) (((uint8_t)(((uint8_t)(x)) << NV_FOPT_LPBOOT_SHIFT)) & NV_FOPT_LPBOOT_MASK) +#define NV_FOPT_BOOTPIN_OPT_MASK (0x2U) +#define NV_FOPT_BOOTPIN_OPT_SHIFT (1U) +#define NV_FOPT_BOOTPIN_OPT(x) (((uint8_t)(((uint8_t)(x)) << NV_FOPT_BOOTPIN_OPT_SHIFT)) & NV_FOPT_BOOTPIN_OPT_MASK) +#define NV_FOPT_NMI_DIS_MASK (0x4U) +#define NV_FOPT_NMI_DIS_SHIFT (2U) +#define NV_FOPT_NMI_DIS(x) (((uint8_t)(((uint8_t)(x)) << NV_FOPT_NMI_DIS_SHIFT)) & NV_FOPT_NMI_DIS_MASK) +#define NV_FOPT_FAST_INIT_MASK (0x20U) +#define NV_FOPT_FAST_INIT_SHIFT (5U) +#define NV_FOPT_FAST_INIT(x) (((uint8_t)(((uint8_t)(x)) << NV_FOPT_FAST_INIT_SHIFT)) & NV_FOPT_FAST_INIT_MASK) +#define NV_FOPT_BOOTSRC_SEL_MASK (0xC0U) +#define NV_FOPT_BOOTSRC_SEL_SHIFT (6U) +#define NV_FOPT_BOOTSRC_SEL(x) (((uint8_t)(((uint8_t)(x)) << NV_FOPT_BOOTSRC_SEL_SHIFT)) & NV_FOPT_BOOTSRC_SEL_MASK) + + +/*! + * @} + */ /* end of group NV_Register_Masks */ + + +/* NV - Peripheral instance base addresses */ +/** Peripheral FTFA_FlashConfig base address */ +#define FTFA_FlashConfig_BASE (0x400u) +/** Peripheral FTFA_FlashConfig base pointer */ +#define FTFA_FlashConfig ((NV_Type *)FTFA_FlashConfig_BASE) +/** Array initializer of NV peripheral base addresses */ +#define NV_BASE_ADDRS { FTFA_FlashConfig_BASE } +/** Array initializer of NV peripheral base pointers */ +#define NV_BASE_PTRS { FTFA_FlashConfig } + +/*! + * @} + */ /* end of group NV_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- OSC Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup OSC_Peripheral_Access_Layer OSC Peripheral Access Layer + * @{ + */ + +/** OSC - Register Layout Typedef */ +typedef struct { + __IO uint8_t CR; /**< OSC Control Register, offset: 0x0 */ + uint8_t RESERVED_0[1]; + __IO uint8_t DIV; /**< OSC_DIV, offset: 0x2 */ +} OSC_Type; + +/* ---------------------------------------------------------------------------- + -- OSC Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup OSC_Register_Masks OSC Register Masks + * @{ + */ + +/*! @name CR - OSC Control Register */ +#define OSC_CR_SC16P_MASK (0x1U) +#define OSC_CR_SC16P_SHIFT (0U) +#define OSC_CR_SC16P(x) (((uint8_t)(((uint8_t)(x)) << OSC_CR_SC16P_SHIFT)) & OSC_CR_SC16P_MASK) +#define OSC_CR_SC8P_MASK (0x2U) +#define OSC_CR_SC8P_SHIFT (1U) +#define OSC_CR_SC8P(x) (((uint8_t)(((uint8_t)(x)) << OSC_CR_SC8P_SHIFT)) & OSC_CR_SC8P_MASK) +#define OSC_CR_SC4P_MASK (0x4U) +#define OSC_CR_SC4P_SHIFT (2U) +#define OSC_CR_SC4P(x) (((uint8_t)(((uint8_t)(x)) << OSC_CR_SC4P_SHIFT)) & OSC_CR_SC4P_MASK) +#define OSC_CR_SC2P_MASK (0x8U) +#define OSC_CR_SC2P_SHIFT (3U) +#define OSC_CR_SC2P(x) (((uint8_t)(((uint8_t)(x)) << OSC_CR_SC2P_SHIFT)) & OSC_CR_SC2P_MASK) +#define OSC_CR_EREFSTEN_MASK (0x20U) +#define OSC_CR_EREFSTEN_SHIFT (5U) +#define OSC_CR_EREFSTEN(x) (((uint8_t)(((uint8_t)(x)) << OSC_CR_EREFSTEN_SHIFT)) & OSC_CR_EREFSTEN_MASK) +#define OSC_CR_ERCLKEN_MASK (0x80U) +#define OSC_CR_ERCLKEN_SHIFT (7U) +#define OSC_CR_ERCLKEN(x) (((uint8_t)(((uint8_t)(x)) << OSC_CR_ERCLKEN_SHIFT)) & OSC_CR_ERCLKEN_MASK) + +/*! @name DIV - OSC_DIV */ +#define OSC_DIV_ERPS_MASK (0xC0U) +#define OSC_DIV_ERPS_SHIFT (6U) +#define OSC_DIV_ERPS(x) (((uint8_t)(((uint8_t)(x)) << OSC_DIV_ERPS_SHIFT)) & OSC_DIV_ERPS_MASK) + + +/*! + * @} + */ /* end of group OSC_Register_Masks */ + + +/* OSC - Peripheral instance base addresses */ +/** Peripheral OSC base address */ +#define OSC_BASE (0x40065000u) +/** Peripheral OSC base pointer */ +#define OSC ((OSC_Type *)OSC_BASE) +/** Array initializer of OSC peripheral base addresses */ +#define OSC_BASE_ADDRS { OSC_BASE } +/** Array initializer of OSC peripheral base pointers */ +#define OSC_BASE_PTRS { OSC } + +/*! + * @} + */ /* end of group OSC_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- PIT Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup PIT_Peripheral_Access_Layer PIT Peripheral Access Layer + * @{ + */ + +/** PIT - Register Layout Typedef */ +typedef struct { + __IO uint32_t MCR; /**< PIT Module Control Register, offset: 0x0 */ + uint8_t RESERVED_0[220]; + __I uint32_t LTMR64H; /**< PIT Upper Lifetime Timer Register, offset: 0xE0 */ + __I uint32_t LTMR64L; /**< PIT Lower Lifetime Timer Register, offset: 0xE4 */ + uint8_t RESERVED_1[24]; + struct { /* offset: 0x100, array step: 0x10 */ + __IO uint32_t LDVAL; /**< Timer Load Value Register, array offset: 0x100, array step: 0x10 */ + __I uint32_t CVAL; /**< Current Timer Value Register, array offset: 0x104, array step: 0x10 */ + __IO uint32_t TCTRL; /**< Timer Control Register, array offset: 0x108, array step: 0x10 */ + __IO uint32_t TFLG; /**< Timer Flag Register, array offset: 0x10C, array step: 0x10 */ + } CHANNEL[4]; +} PIT_Type; + +/* ---------------------------------------------------------------------------- + -- PIT Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup PIT_Register_Masks PIT Register Masks + * @{ + */ + +/*! @name MCR - PIT Module Control Register */ +#define PIT_MCR_FRZ_MASK (0x1U) +#define PIT_MCR_FRZ_SHIFT (0U) +#define PIT_MCR_FRZ(x) (((uint32_t)(((uint32_t)(x)) << PIT_MCR_FRZ_SHIFT)) & PIT_MCR_FRZ_MASK) +#define PIT_MCR_MDIS_MASK (0x2U) +#define PIT_MCR_MDIS_SHIFT (1U) +#define PIT_MCR_MDIS(x) (((uint32_t)(((uint32_t)(x)) << PIT_MCR_MDIS_SHIFT)) & PIT_MCR_MDIS_MASK) + +/*! @name LTMR64H - PIT Upper Lifetime Timer Register */ +#define PIT_LTMR64H_LTH_MASK (0xFFFFFFFFU) +#define PIT_LTMR64H_LTH_SHIFT (0U) +#define PIT_LTMR64H_LTH(x) (((uint32_t)(((uint32_t)(x)) << PIT_LTMR64H_LTH_SHIFT)) & PIT_LTMR64H_LTH_MASK) + +/*! @name LTMR64L - PIT Lower Lifetime Timer Register */ +#define PIT_LTMR64L_LTL_MASK (0xFFFFFFFFU) +#define PIT_LTMR64L_LTL_SHIFT (0U) +#define PIT_LTMR64L_LTL(x) (((uint32_t)(((uint32_t)(x)) << PIT_LTMR64L_LTL_SHIFT)) & PIT_LTMR64L_LTL_MASK) + +/*! @name LDVAL - Timer Load Value Register */ +#define PIT_LDVAL_TSV_MASK (0xFFFFFFFFU) +#define PIT_LDVAL_TSV_SHIFT (0U) +#define PIT_LDVAL_TSV(x) (((uint32_t)(((uint32_t)(x)) << PIT_LDVAL_TSV_SHIFT)) & PIT_LDVAL_TSV_MASK) + +/* The count of PIT_LDVAL */ +#define PIT_LDVAL_COUNT (4U) + +/*! @name CVAL - Current Timer Value Register */ +#define PIT_CVAL_TVL_MASK (0xFFFFFFFFU) +#define PIT_CVAL_TVL_SHIFT (0U) +#define PIT_CVAL_TVL(x) (((uint32_t)(((uint32_t)(x)) << PIT_CVAL_TVL_SHIFT)) & PIT_CVAL_TVL_MASK) + +/* The count of PIT_CVAL */ +#define PIT_CVAL_COUNT (4U) + +/*! @name TCTRL - Timer Control Register */ +#define PIT_TCTRL_TEN_MASK (0x1U) +#define PIT_TCTRL_TEN_SHIFT (0U) +#define PIT_TCTRL_TEN(x) (((uint32_t)(((uint32_t)(x)) << PIT_TCTRL_TEN_SHIFT)) & PIT_TCTRL_TEN_MASK) +#define PIT_TCTRL_TIE_MASK (0x2U) +#define PIT_TCTRL_TIE_SHIFT (1U) +#define PIT_TCTRL_TIE(x) (((uint32_t)(((uint32_t)(x)) << PIT_TCTRL_TIE_SHIFT)) & PIT_TCTRL_TIE_MASK) +#define PIT_TCTRL_CHN_MASK (0x4U) +#define PIT_TCTRL_CHN_SHIFT (2U) +#define PIT_TCTRL_CHN(x) (((uint32_t)(((uint32_t)(x)) << PIT_TCTRL_CHN_SHIFT)) & PIT_TCTRL_CHN_MASK) + +/* The count of PIT_TCTRL */ +#define PIT_TCTRL_COUNT (4U) + +/*! @name TFLG - Timer Flag Register */ +#define PIT_TFLG_TIF_MASK (0x1U) +#define PIT_TFLG_TIF_SHIFT (0U) +#define PIT_TFLG_TIF(x) (((uint32_t)(((uint32_t)(x)) << PIT_TFLG_TIF_SHIFT)) & PIT_TFLG_TIF_MASK) + +/* The count of PIT_TFLG */ +#define PIT_TFLG_COUNT (4U) + + +/*! + * @} + */ /* end of group PIT_Register_Masks */ + + +/* PIT - Peripheral instance base addresses */ +/** Peripheral PIT0 base address */ +#define PIT0_BASE (0x40037000u) +/** Peripheral PIT0 base pointer */ +#define PIT0 ((PIT_Type *)PIT0_BASE) +/** Array initializer of PIT peripheral base addresses */ +#define PIT_BASE_ADDRS { PIT0_BASE } +/** Array initializer of PIT peripheral base pointers */ +#define PIT_BASE_PTRS { PIT0 } +/** Interrupt vectors for the PIT peripheral type */ +#define PIT_IRQS { PIT0_IRQn, PIT0_IRQn, PIT0_IRQn, PIT0_IRQn } + +/*! + * @} + */ /* end of group PIT_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- PMC Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup PMC_Peripheral_Access_Layer PMC Peripheral Access Layer + * @{ + */ + +/** PMC - Register Layout Typedef */ +typedef struct { + __IO uint8_t LVDSC1; /**< Low Voltage Detect Status And Control 1 register, offset: 0x0 */ + __IO uint8_t LVDSC2; /**< Low Voltage Detect Status And Control 2 register, offset: 0x1 */ + __IO uint8_t REGSC; /**< Regulator Status And Control register, offset: 0x2 */ + uint8_t RESERVED_0[8]; + __IO uint8_t HVDSC1; /**< High Voltage Detect Status And Control 1 register, offset: 0xB */ +} PMC_Type; + +/* ---------------------------------------------------------------------------- + -- PMC Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup PMC_Register_Masks PMC Register Masks + * @{ + */ + +/*! @name LVDSC1 - Low Voltage Detect Status And Control 1 register */ +#define PMC_LVDSC1_LVDV_MASK (0x3U) +#define PMC_LVDSC1_LVDV_SHIFT (0U) +#define PMC_LVDSC1_LVDV(x) (((uint8_t)(((uint8_t)(x)) << PMC_LVDSC1_LVDV_SHIFT)) & PMC_LVDSC1_LVDV_MASK) +#define PMC_LVDSC1_LVDRE_MASK (0x10U) +#define PMC_LVDSC1_LVDRE_SHIFT (4U) +#define PMC_LVDSC1_LVDRE(x) (((uint8_t)(((uint8_t)(x)) << PMC_LVDSC1_LVDRE_SHIFT)) & PMC_LVDSC1_LVDRE_MASK) +#define PMC_LVDSC1_LVDIE_MASK (0x20U) +#define PMC_LVDSC1_LVDIE_SHIFT (5U) +#define PMC_LVDSC1_LVDIE(x) (((uint8_t)(((uint8_t)(x)) << PMC_LVDSC1_LVDIE_SHIFT)) & PMC_LVDSC1_LVDIE_MASK) +#define PMC_LVDSC1_LVDACK_MASK (0x40U) +#define PMC_LVDSC1_LVDACK_SHIFT (6U) +#define PMC_LVDSC1_LVDACK(x) (((uint8_t)(((uint8_t)(x)) << PMC_LVDSC1_LVDACK_SHIFT)) & PMC_LVDSC1_LVDACK_MASK) +#define PMC_LVDSC1_LVDF_MASK (0x80U) +#define PMC_LVDSC1_LVDF_SHIFT (7U) +#define PMC_LVDSC1_LVDF(x) (((uint8_t)(((uint8_t)(x)) << PMC_LVDSC1_LVDF_SHIFT)) & PMC_LVDSC1_LVDF_MASK) + +/*! @name LVDSC2 - Low Voltage Detect Status And Control 2 register */ +#define PMC_LVDSC2_LVWV_MASK (0x3U) +#define PMC_LVDSC2_LVWV_SHIFT (0U) +#define PMC_LVDSC2_LVWV(x) (((uint8_t)(((uint8_t)(x)) << PMC_LVDSC2_LVWV_SHIFT)) & PMC_LVDSC2_LVWV_MASK) +#define PMC_LVDSC2_LVWIE_MASK (0x20U) +#define PMC_LVDSC2_LVWIE_SHIFT (5U) +#define PMC_LVDSC2_LVWIE(x) (((uint8_t)(((uint8_t)(x)) << PMC_LVDSC2_LVWIE_SHIFT)) & PMC_LVDSC2_LVWIE_MASK) +#define PMC_LVDSC2_LVWACK_MASK (0x40U) +#define PMC_LVDSC2_LVWACK_SHIFT (6U) +#define PMC_LVDSC2_LVWACK(x) (((uint8_t)(((uint8_t)(x)) << PMC_LVDSC2_LVWACK_SHIFT)) & PMC_LVDSC2_LVWACK_MASK) +#define PMC_LVDSC2_LVWF_MASK (0x80U) +#define PMC_LVDSC2_LVWF_SHIFT (7U) +#define PMC_LVDSC2_LVWF(x) (((uint8_t)(((uint8_t)(x)) << PMC_LVDSC2_LVWF_SHIFT)) & PMC_LVDSC2_LVWF_MASK) + +/*! @name REGSC - Regulator Status And Control register */ +#define PMC_REGSC_BGBE_MASK (0x1U) +#define PMC_REGSC_BGBE_SHIFT (0U) +#define PMC_REGSC_BGBE(x) (((uint8_t)(((uint8_t)(x)) << PMC_REGSC_BGBE_SHIFT)) & PMC_REGSC_BGBE_MASK) +#define PMC_REGSC_REGONS_MASK (0x4U) +#define PMC_REGSC_REGONS_SHIFT (2U) +#define PMC_REGSC_REGONS(x) (((uint8_t)(((uint8_t)(x)) << PMC_REGSC_REGONS_SHIFT)) & PMC_REGSC_REGONS_MASK) +#define PMC_REGSC_ACKISO_MASK (0x8U) +#define PMC_REGSC_ACKISO_SHIFT (3U) +#define PMC_REGSC_ACKISO(x) (((uint8_t)(((uint8_t)(x)) << PMC_REGSC_ACKISO_SHIFT)) & PMC_REGSC_ACKISO_MASK) +#define PMC_REGSC_BGEN_MASK (0x10U) +#define PMC_REGSC_BGEN_SHIFT (4U) +#define PMC_REGSC_BGEN(x) (((uint8_t)(((uint8_t)(x)) << PMC_REGSC_BGEN_SHIFT)) & PMC_REGSC_BGEN_MASK) +#define PMC_REGSC_VLPO_MASK (0x40U) +#define PMC_REGSC_VLPO_SHIFT (6U) +#define PMC_REGSC_VLPO(x) (((uint8_t)(((uint8_t)(x)) << PMC_REGSC_VLPO_SHIFT)) & PMC_REGSC_VLPO_MASK) + +/*! @name HVDSC1 - High Voltage Detect Status And Control 1 register */ +#define PMC_HVDSC1_HVDV_MASK (0x1U) +#define PMC_HVDSC1_HVDV_SHIFT (0U) +#define PMC_HVDSC1_HVDV(x) (((uint8_t)(((uint8_t)(x)) << PMC_HVDSC1_HVDV_SHIFT)) & PMC_HVDSC1_HVDV_MASK) +#define PMC_HVDSC1_HVDRE_MASK (0x10U) +#define PMC_HVDSC1_HVDRE_SHIFT (4U) +#define PMC_HVDSC1_HVDRE(x) (((uint8_t)(((uint8_t)(x)) << PMC_HVDSC1_HVDRE_SHIFT)) & PMC_HVDSC1_HVDRE_MASK) +#define PMC_HVDSC1_HVDIE_MASK (0x20U) +#define PMC_HVDSC1_HVDIE_SHIFT (5U) +#define PMC_HVDSC1_HVDIE(x) (((uint8_t)(((uint8_t)(x)) << PMC_HVDSC1_HVDIE_SHIFT)) & PMC_HVDSC1_HVDIE_MASK) +#define PMC_HVDSC1_HVDACK_MASK (0x40U) +#define PMC_HVDSC1_HVDACK_SHIFT (6U) +#define PMC_HVDSC1_HVDACK(x) (((uint8_t)(((uint8_t)(x)) << PMC_HVDSC1_HVDACK_SHIFT)) & PMC_HVDSC1_HVDACK_MASK) +#define PMC_HVDSC1_HVDF_MASK (0x80U) +#define PMC_HVDSC1_HVDF_SHIFT (7U) +#define PMC_HVDSC1_HVDF(x) (((uint8_t)(((uint8_t)(x)) << PMC_HVDSC1_HVDF_SHIFT)) & PMC_HVDSC1_HVDF_MASK) + + +/*! + * @} + */ /* end of group PMC_Register_Masks */ + + +/* PMC - Peripheral instance base addresses */ +/** Peripheral PMC base address */ +#define PMC_BASE (0x4007D000u) +/** Peripheral PMC base pointer */ +#define PMC ((PMC_Type *)PMC_BASE) +/** Array initializer of PMC peripheral base addresses */ +#define PMC_BASE_ADDRS { PMC_BASE } +/** Array initializer of PMC peripheral base pointers */ +#define PMC_BASE_PTRS { PMC } +/** Interrupt vectors for the PMC peripheral type */ +#define PMC_IRQS { PMC_IRQn } + +/*! + * @} + */ /* end of group PMC_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- PORT Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup PORT_Peripheral_Access_Layer PORT Peripheral Access Layer + * @{ + */ + +/** PORT - Register Layout Typedef */ +typedef struct { + __IO uint32_t PCR[32]; /**< Pin Control Register n, array offset: 0x0, array step: 0x4 */ + __O uint32_t GPCLR; /**< Global Pin Control Low Register, offset: 0x80 */ + __O uint32_t GPCHR; /**< Global Pin Control High Register, offset: 0x84 */ + __O uint32_t GICLR; /**< Global Interrupt Control Low Register, offset: 0x88 */ + __O uint32_t GICHR; /**< Global Interrupt Control High Register, offset: 0x8C */ + uint8_t RESERVED_0[16]; + __IO uint32_t ISFR; /**< Interrupt Status Flag Register, offset: 0xA0 */ +} PORT_Type; + +/* ---------------------------------------------------------------------------- + -- PORT Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup PORT_Register_Masks PORT Register Masks + * @{ + */ + +/*! @name PCR - Pin Control Register n */ +#define PORT_PCR_PS_MASK (0x1U) +#define PORT_PCR_PS_SHIFT (0U) +#define PORT_PCR_PS(x) (((uint32_t)(((uint32_t)(x)) << PORT_PCR_PS_SHIFT)) & PORT_PCR_PS_MASK) +#define PORT_PCR_PE_MASK (0x2U) +#define PORT_PCR_PE_SHIFT (1U) +#define PORT_PCR_PE(x) (((uint32_t)(((uint32_t)(x)) << PORT_PCR_PE_SHIFT)) & PORT_PCR_PE_MASK) +#define PORT_PCR_SRE_MASK (0x4U) +#define PORT_PCR_SRE_SHIFT (2U) +#define PORT_PCR_SRE(x) (((uint32_t)(((uint32_t)(x)) << PORT_PCR_SRE_SHIFT)) & PORT_PCR_SRE_MASK) +#define PORT_PCR_PFE_MASK (0x10U) +#define PORT_PCR_PFE_SHIFT (4U) +#define PORT_PCR_PFE(x) (((uint32_t)(((uint32_t)(x)) << PORT_PCR_PFE_SHIFT)) & PORT_PCR_PFE_MASK) +#define PORT_PCR_ODE_MASK (0x20U) +#define PORT_PCR_ODE_SHIFT (5U) +#define PORT_PCR_ODE(x) (((uint32_t)(((uint32_t)(x)) << PORT_PCR_ODE_SHIFT)) & PORT_PCR_ODE_MASK) +#define PORT_PCR_MUX_MASK (0x700U) +#define PORT_PCR_MUX_SHIFT (8U) +#define PORT_PCR_MUX(x) (((uint32_t)(((uint32_t)(x)) << PORT_PCR_MUX_SHIFT)) & PORT_PCR_MUX_MASK) +#define PORT_PCR_LK_MASK (0x8000U) +#define PORT_PCR_LK_SHIFT (15U) +#define PORT_PCR_LK(x) (((uint32_t)(((uint32_t)(x)) << PORT_PCR_LK_SHIFT)) & PORT_PCR_LK_MASK) +#define PORT_PCR_IRQC_MASK (0xF0000U) +#define PORT_PCR_IRQC_SHIFT (16U) +#define PORT_PCR_IRQC(x) (((uint32_t)(((uint32_t)(x)) << PORT_PCR_IRQC_SHIFT)) & PORT_PCR_IRQC_MASK) +#define PORT_PCR_ISF_MASK (0x1000000U) +#define PORT_PCR_ISF_SHIFT (24U) +#define PORT_PCR_ISF(x) (((uint32_t)(((uint32_t)(x)) << PORT_PCR_ISF_SHIFT)) & PORT_PCR_ISF_MASK) + +/* The count of PORT_PCR */ +#define PORT_PCR_COUNT (32U) + +/*! @name GPCLR - Global Pin Control Low Register */ +#define PORT_GPCLR_GPWD_MASK (0xFFFFU) +#define PORT_GPCLR_GPWD_SHIFT (0U) +#define PORT_GPCLR_GPWD(x) (((uint32_t)(((uint32_t)(x)) << PORT_GPCLR_GPWD_SHIFT)) & PORT_GPCLR_GPWD_MASK) +#define PORT_GPCLR_GPWE_MASK (0xFFFF0000U) +#define PORT_GPCLR_GPWE_SHIFT (16U) +#define PORT_GPCLR_GPWE(x) (((uint32_t)(((uint32_t)(x)) << PORT_GPCLR_GPWE_SHIFT)) & PORT_GPCLR_GPWE_MASK) + +/*! @name GPCHR - Global Pin Control High Register */ +#define PORT_GPCHR_GPWD_MASK (0xFFFFU) +#define PORT_GPCHR_GPWD_SHIFT (0U) +#define PORT_GPCHR_GPWD(x) (((uint32_t)(((uint32_t)(x)) << PORT_GPCHR_GPWD_SHIFT)) & PORT_GPCHR_GPWD_MASK) +#define PORT_GPCHR_GPWE_MASK (0xFFFF0000U) +#define PORT_GPCHR_GPWE_SHIFT (16U) +#define PORT_GPCHR_GPWE(x) (((uint32_t)(((uint32_t)(x)) << PORT_GPCHR_GPWE_SHIFT)) & PORT_GPCHR_GPWE_MASK) + +/*! @name GICLR - Global Interrupt Control Low Register */ +#define PORT_GICLR_GIWE_MASK (0xFFFFU) +#define PORT_GICLR_GIWE_SHIFT (0U) +#define PORT_GICLR_GIWE(x) (((uint32_t)(((uint32_t)(x)) << PORT_GICLR_GIWE_SHIFT)) & PORT_GICLR_GIWE_MASK) +#define PORT_GICLR_GIWD_MASK (0xFFFF0000U) +#define PORT_GICLR_GIWD_SHIFT (16U) +#define PORT_GICLR_GIWD(x) (((uint32_t)(((uint32_t)(x)) << PORT_GICLR_GIWD_SHIFT)) & PORT_GICLR_GIWD_MASK) + +/*! @name GICHR - Global Interrupt Control High Register */ +#define PORT_GICHR_GIWE_MASK (0xFFFFU) +#define PORT_GICHR_GIWE_SHIFT (0U) +#define PORT_GICHR_GIWE(x) (((uint32_t)(((uint32_t)(x)) << PORT_GICHR_GIWE_SHIFT)) & PORT_GICHR_GIWE_MASK) +#define PORT_GICHR_GIWD_MASK (0xFFFF0000U) +#define PORT_GICHR_GIWD_SHIFT (16U) +#define PORT_GICHR_GIWD(x) (((uint32_t)(((uint32_t)(x)) << PORT_GICHR_GIWD_SHIFT)) & PORT_GICHR_GIWD_MASK) + +/*! @name ISFR - Interrupt Status Flag Register */ +#define PORT_ISFR_ISF_MASK (0xFFFFFFFFU) +#define PORT_ISFR_ISF_SHIFT (0U) +#define PORT_ISFR_ISF(x) (((uint32_t)(((uint32_t)(x)) << PORT_ISFR_ISF_SHIFT)) & PORT_ISFR_ISF_MASK) + + +/*! + * @} + */ /* end of group PORT_Register_Masks */ + + +/* PORT - Peripheral instance base addresses */ +/** Peripheral PORTA base address */ +#define PORTA_BASE (0x40049000u) +/** Peripheral PORTA base pointer */ +#define PORTA ((PORT_Type *)PORTA_BASE) +/** Peripheral PORTB base address */ +#define PORTB_BASE (0x4004A000u) +/** Peripheral PORTB base pointer */ +#define PORTB ((PORT_Type *)PORTB_BASE) +/** Peripheral PORTC base address */ +#define PORTC_BASE (0x4004B000u) +/** Peripheral PORTC base pointer */ +#define PORTC ((PORT_Type *)PORTC_BASE) +/** Peripheral PORTD base address */ +#define PORTD_BASE (0x4004C000u) +/** Peripheral PORTD base pointer */ +#define PORTD ((PORT_Type *)PORTD_BASE) +/** Peripheral PORTE base address */ +#define PORTE_BASE (0x4004D000u) +/** Peripheral PORTE base pointer */ +#define PORTE ((PORT_Type *)PORTE_BASE) +/** Array initializer of PORT peripheral base addresses */ +#define PORT_BASE_ADDRS { PORTA_BASE, PORTB_BASE, PORTC_BASE, PORTD_BASE, PORTE_BASE } +/** Array initializer of PORT peripheral base pointers */ +#define PORT_BASE_PTRS { PORTA, PORTB, PORTC, PORTD, PORTE } +/** Interrupt vectors for the PORT peripheral type */ +#define PORT_IRQS { PORTA_IRQn, PORTB_IRQn, PORTC_IRQn, PORTD_IRQn, PORTE_IRQn } + +/*! + * @} + */ /* end of group PORT_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- QuadSPI Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup QuadSPI_Peripheral_Access_Layer QuadSPI Peripheral Access Layer + * @{ + */ + +/** QuadSPI - Register Layout Typedef */ +typedef struct { + __IO uint32_t MCR; /**< Module Configuration Register, offset: 0x0 */ + uint8_t RESERVED_0[4]; + __IO uint32_t IPCR; /**< IP Configuration Register, offset: 0x8 */ + __IO uint32_t FLSHCR; /**< Flash Configuration Register, offset: 0xC */ + __IO uint32_t BUF0CR; /**< Buffer0 Configuration Register, offset: 0x10 */ + __IO uint32_t BUF1CR; /**< Buffer1 Configuration Register, offset: 0x14 */ + __IO uint32_t BUF2CR; /**< Buffer2 Configuration Register, offset: 0x18 */ + __IO uint32_t BUF3CR; /**< Buffer3 Configuration Register, offset: 0x1C */ + __IO uint32_t BFGENCR; /**< Buffer Generic Configuration Register, offset: 0x20 */ + __IO uint32_t SOCCR; /**< SOC Configuration Register, offset: 0x24 */ + uint8_t RESERVED_1[8]; + __IO uint32_t BUF0IND; /**< Buffer0 Top Index Register, offset: 0x30 */ + __IO uint32_t BUF1IND; /**< Buffer1 Top Index Register, offset: 0x34 */ + __IO uint32_t BUF2IND; /**< Buffer2 Top Index Register, offset: 0x38 */ + uint8_t RESERVED_2[196]; + __IO uint32_t SFAR; /**< Serial Flash Address Register, offset: 0x100 */ + __IO uint32_t SFACR; /**< Serial Flash Address Configuration Register, offset: 0x104 */ + __IO uint32_t SMPR; /**< Sampling Register, offset: 0x108 */ + __I uint32_t RBSR; /**< RX Buffer Status Register, offset: 0x10C */ + __IO uint32_t RBCT; /**< RX Buffer Control Register, offset: 0x110 */ + uint8_t RESERVED_3[60]; + __I uint32_t TBSR; /**< TX Buffer Status Register, offset: 0x150 */ + __IO uint32_t TBDR; /**< TX Buffer Data Register, offset: 0x154 */ + __IO uint32_t TBCT; /**< Tx Buffer Control Register, offset: 0x158 */ + __I uint32_t SR; /**< Status Register, offset: 0x15C */ + __IO uint32_t FR; /**< Flag Register, offset: 0x160 */ + __IO uint32_t RSER; /**< Interrupt and DMA Request Select and Enable Register, offset: 0x164 */ + __I uint32_t SPNDST; /**< Sequence Suspend Status Register, offset: 0x168 */ + __IO uint32_t SPTRCLR; /**< Sequence Pointer Clear Register, offset: 0x16C */ + uint8_t RESERVED_4[16]; + __IO uint32_t SFA1AD; /**< Serial Flash A1 Top Address, offset: 0x180 */ + __IO uint32_t SFA2AD; /**< Serial Flash A2 Top Address, offset: 0x184 */ + __IO uint32_t SFB1AD; /**< Serial Flash B1Top Address, offset: 0x188 */ + __IO uint32_t SFB2AD; /**< Serial Flash B2Top Address, offset: 0x18C */ + __IO uint32_t DLPR; /**< Data Learn Pattern Register, offset: 0x190 */ + uint8_t RESERVED_5[108]; + __I uint32_t RBDR[16]; /**< RX Buffer Data Register, array offset: 0x200, array step: 0x4 */ + uint8_t RESERVED_6[192]; + __IO uint32_t LUTKEY; /**< LUT Key Register, offset: 0x300 */ + __IO uint32_t LCKCR; /**< LUT Lock Configuration Register, offset: 0x304 */ + uint8_t RESERVED_7[8]; + __IO uint32_t LUT[64]; /**< Look-up Table register, array offset: 0x310, array step: 0x4 */ +} QuadSPI_Type; + +/* ---------------------------------------------------------------------------- + -- QuadSPI Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup QuadSPI_Register_Masks QuadSPI Register Masks + * @{ + */ + +/*! @name MCR - Module Configuration Register */ +#define QuadSPI_MCR_SWRSTSD_MASK (0x1U) +#define QuadSPI_MCR_SWRSTSD_SHIFT (0U) +#define QuadSPI_MCR_SWRSTSD(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_MCR_SWRSTSD_SHIFT)) & QuadSPI_MCR_SWRSTSD_MASK) +#define QuadSPI_MCR_SWRSTHD_MASK (0x2U) +#define QuadSPI_MCR_SWRSTHD_SHIFT (1U) +#define QuadSPI_MCR_SWRSTHD(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_MCR_SWRSTHD_SHIFT)) & QuadSPI_MCR_SWRSTHD_MASK) +#define QuadSPI_MCR_END_CFG_MASK (0xCU) +#define QuadSPI_MCR_END_CFG_SHIFT (2U) +#define QuadSPI_MCR_END_CFG(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_MCR_END_CFG_SHIFT)) & QuadSPI_MCR_END_CFG_MASK) +#define QuadSPI_MCR_DQS_LAT_EN_MASK (0x20U) +#define QuadSPI_MCR_DQS_LAT_EN_SHIFT (5U) +#define QuadSPI_MCR_DQS_LAT_EN(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_MCR_DQS_LAT_EN_SHIFT)) & QuadSPI_MCR_DQS_LAT_EN_MASK) +#define QuadSPI_MCR_DQS_EN_MASK (0x40U) +#define QuadSPI_MCR_DQS_EN_SHIFT (6U) +#define QuadSPI_MCR_DQS_EN(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_MCR_DQS_EN_SHIFT)) & QuadSPI_MCR_DQS_EN_MASK) +#define QuadSPI_MCR_DDR_EN_MASK (0x80U) +#define QuadSPI_MCR_DDR_EN_SHIFT (7U) +#define QuadSPI_MCR_DDR_EN(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_MCR_DDR_EN_SHIFT)) & QuadSPI_MCR_DDR_EN_MASK) +#define QuadSPI_MCR_CLR_RXF_MASK (0x400U) +#define QuadSPI_MCR_CLR_RXF_SHIFT (10U) +#define QuadSPI_MCR_CLR_RXF(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_MCR_CLR_RXF_SHIFT)) & QuadSPI_MCR_CLR_RXF_MASK) +#define QuadSPI_MCR_CLR_TXF_MASK (0x800U) +#define QuadSPI_MCR_CLR_TXF_SHIFT (11U) +#define QuadSPI_MCR_CLR_TXF(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_MCR_CLR_TXF_SHIFT)) & QuadSPI_MCR_CLR_TXF_MASK) +#define QuadSPI_MCR_MDIS_MASK (0x4000U) +#define QuadSPI_MCR_MDIS_SHIFT (14U) +#define QuadSPI_MCR_MDIS(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_MCR_MDIS_SHIFT)) & QuadSPI_MCR_MDIS_MASK) +#define QuadSPI_MCR_SCLKCFG_MASK (0xFF000000U) +#define QuadSPI_MCR_SCLKCFG_SHIFT (24U) +#define QuadSPI_MCR_SCLKCFG(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_MCR_SCLKCFG_SHIFT)) & QuadSPI_MCR_SCLKCFG_MASK) + +/*! @name IPCR - IP Configuration Register */ +#define QuadSPI_IPCR_IDATSZ_MASK (0xFFFFU) +#define QuadSPI_IPCR_IDATSZ_SHIFT (0U) +#define QuadSPI_IPCR_IDATSZ(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_IPCR_IDATSZ_SHIFT)) & QuadSPI_IPCR_IDATSZ_MASK) +#define QuadSPI_IPCR_PAR_EN_MASK (0x10000U) +#define QuadSPI_IPCR_PAR_EN_SHIFT (16U) +#define QuadSPI_IPCR_PAR_EN(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_IPCR_PAR_EN_SHIFT)) & QuadSPI_IPCR_PAR_EN_MASK) +#define QuadSPI_IPCR_SEQID_MASK (0xF000000U) +#define QuadSPI_IPCR_SEQID_SHIFT (24U) +#define QuadSPI_IPCR_SEQID(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_IPCR_SEQID_SHIFT)) & QuadSPI_IPCR_SEQID_MASK) + +/*! @name FLSHCR - Flash Configuration Register */ +#define QuadSPI_FLSHCR_TCSS_MASK (0xFU) +#define QuadSPI_FLSHCR_TCSS_SHIFT (0U) +#define QuadSPI_FLSHCR_TCSS(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_FLSHCR_TCSS_SHIFT)) & QuadSPI_FLSHCR_TCSS_MASK) +#define QuadSPI_FLSHCR_TCSH_MASK (0xF00U) +#define QuadSPI_FLSHCR_TCSH_SHIFT (8U) +#define QuadSPI_FLSHCR_TCSH(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_FLSHCR_TCSH_SHIFT)) & QuadSPI_FLSHCR_TCSH_MASK) +#define QuadSPI_FLSHCR_TDH_MASK (0x30000U) +#define QuadSPI_FLSHCR_TDH_SHIFT (16U) +#define QuadSPI_FLSHCR_TDH(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_FLSHCR_TDH_SHIFT)) & QuadSPI_FLSHCR_TDH_MASK) + +/*! @name BUF0CR - Buffer0 Configuration Register */ +#define QuadSPI_BUF0CR_MSTRID_MASK (0xFU) +#define QuadSPI_BUF0CR_MSTRID_SHIFT (0U) +#define QuadSPI_BUF0CR_MSTRID(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_BUF0CR_MSTRID_SHIFT)) & QuadSPI_BUF0CR_MSTRID_MASK) +#define QuadSPI_BUF0CR_ADATSZ_MASK (0x7F00U) +#define QuadSPI_BUF0CR_ADATSZ_SHIFT (8U) +#define QuadSPI_BUF0CR_ADATSZ(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_BUF0CR_ADATSZ_SHIFT)) & QuadSPI_BUF0CR_ADATSZ_MASK) +#define QuadSPI_BUF0CR_HP_EN_MASK (0x80000000U) +#define QuadSPI_BUF0CR_HP_EN_SHIFT (31U) +#define QuadSPI_BUF0CR_HP_EN(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_BUF0CR_HP_EN_SHIFT)) & QuadSPI_BUF0CR_HP_EN_MASK) + +/*! @name BUF1CR - Buffer1 Configuration Register */ +#define QuadSPI_BUF1CR_MSTRID_MASK (0xFU) +#define QuadSPI_BUF1CR_MSTRID_SHIFT (0U) +#define QuadSPI_BUF1CR_MSTRID(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_BUF1CR_MSTRID_SHIFT)) & QuadSPI_BUF1CR_MSTRID_MASK) +#define QuadSPI_BUF1CR_ADATSZ_MASK (0x7F00U) +#define QuadSPI_BUF1CR_ADATSZ_SHIFT (8U) +#define QuadSPI_BUF1CR_ADATSZ(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_BUF1CR_ADATSZ_SHIFT)) & QuadSPI_BUF1CR_ADATSZ_MASK) + +/*! @name BUF2CR - Buffer2 Configuration Register */ +#define QuadSPI_BUF2CR_MSTRID_MASK (0xFU) +#define QuadSPI_BUF2CR_MSTRID_SHIFT (0U) +#define QuadSPI_BUF2CR_MSTRID(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_BUF2CR_MSTRID_SHIFT)) & QuadSPI_BUF2CR_MSTRID_MASK) +#define QuadSPI_BUF2CR_ADATSZ_MASK (0x7F00U) +#define QuadSPI_BUF2CR_ADATSZ_SHIFT (8U) +#define QuadSPI_BUF2CR_ADATSZ(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_BUF2CR_ADATSZ_SHIFT)) & QuadSPI_BUF2CR_ADATSZ_MASK) + +/*! @name BUF3CR - Buffer3 Configuration Register */ +#define QuadSPI_BUF3CR_MSTRID_MASK (0xFU) +#define QuadSPI_BUF3CR_MSTRID_SHIFT (0U) +#define QuadSPI_BUF3CR_MSTRID(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_BUF3CR_MSTRID_SHIFT)) & QuadSPI_BUF3CR_MSTRID_MASK) +#define QuadSPI_BUF3CR_ADATSZ_MASK (0x7F00U) +#define QuadSPI_BUF3CR_ADATSZ_SHIFT (8U) +#define QuadSPI_BUF3CR_ADATSZ(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_BUF3CR_ADATSZ_SHIFT)) & QuadSPI_BUF3CR_ADATSZ_MASK) +#define QuadSPI_BUF3CR_ALLMST_MASK (0x80000000U) +#define QuadSPI_BUF3CR_ALLMST_SHIFT (31U) +#define QuadSPI_BUF3CR_ALLMST(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_BUF3CR_ALLMST_SHIFT)) & QuadSPI_BUF3CR_ALLMST_MASK) + +/*! @name BFGENCR - Buffer Generic Configuration Register */ +#define QuadSPI_BFGENCR_SEQID_MASK (0xF000U) +#define QuadSPI_BFGENCR_SEQID_SHIFT (12U) +#define QuadSPI_BFGENCR_SEQID(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_BFGENCR_SEQID_SHIFT)) & QuadSPI_BFGENCR_SEQID_MASK) +#define QuadSPI_BFGENCR_PAR_EN_MASK (0x10000U) +#define QuadSPI_BFGENCR_PAR_EN_SHIFT (16U) +#define QuadSPI_BFGENCR_PAR_EN(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_BFGENCR_PAR_EN_SHIFT)) & QuadSPI_BFGENCR_PAR_EN_MASK) + +/*! @name SOCCR - SOC Configuration Register */ +#define QuadSPI_SOCCR_QSPISRC_MASK (0x7U) +#define QuadSPI_SOCCR_QSPISRC_SHIFT (0U) +#define QuadSPI_SOCCR_QSPISRC(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SOCCR_QSPISRC_SHIFT)) & QuadSPI_SOCCR_QSPISRC_MASK) +#define QuadSPI_SOCCR_DQSLPEN_MASK (0x100U) +#define QuadSPI_SOCCR_DQSLPEN_SHIFT (8U) +#define QuadSPI_SOCCR_DQSLPEN(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SOCCR_DQSLPEN_SHIFT)) & QuadSPI_SOCCR_DQSLPEN_MASK) +#define QuadSPI_SOCCR_DQSPADLPEN_MASK (0x200U) +#define QuadSPI_SOCCR_DQSPADLPEN_SHIFT (9U) +#define QuadSPI_SOCCR_DQSPADLPEN(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SOCCR_DQSPADLPEN_SHIFT)) & QuadSPI_SOCCR_DQSPADLPEN_MASK) +#define QuadSPI_SOCCR_DQSPHASEL_MASK (0xC00U) +#define QuadSPI_SOCCR_DQSPHASEL_SHIFT (10U) +#define QuadSPI_SOCCR_DQSPHASEL(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SOCCR_DQSPHASEL_SHIFT)) & QuadSPI_SOCCR_DQSPHASEL_MASK) +#define QuadSPI_SOCCR_DQSINVSEL_MASK (0x1000U) +#define QuadSPI_SOCCR_DQSINVSEL_SHIFT (12U) +#define QuadSPI_SOCCR_DQSINVSEL(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SOCCR_DQSINVSEL_SHIFT)) & QuadSPI_SOCCR_DQSINVSEL_MASK) +#define QuadSPI_SOCCR_CK2EN_MASK (0x2000U) +#define QuadSPI_SOCCR_CK2EN_SHIFT (13U) +#define QuadSPI_SOCCR_CK2EN(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SOCCR_CK2EN_SHIFT)) & QuadSPI_SOCCR_CK2EN_MASK) +#define QuadSPI_SOCCR_DIFFCKEN_MASK (0x4000U) +#define QuadSPI_SOCCR_DIFFCKEN_SHIFT (14U) +#define QuadSPI_SOCCR_DIFFCKEN(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SOCCR_DIFFCKEN_SHIFT)) & QuadSPI_SOCCR_DIFFCKEN_MASK) +#define QuadSPI_SOCCR_OCTEN_MASK (0x8000U) +#define QuadSPI_SOCCR_OCTEN_SHIFT (15U) +#define QuadSPI_SOCCR_OCTEN(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SOCCR_OCTEN_SHIFT)) & QuadSPI_SOCCR_OCTEN_MASK) +#define QuadSPI_SOCCR_DLYTAPSELA_MASK (0x3F0000U) +#define QuadSPI_SOCCR_DLYTAPSELA_SHIFT (16U) +#define QuadSPI_SOCCR_DLYTAPSELA(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SOCCR_DLYTAPSELA_SHIFT)) & QuadSPI_SOCCR_DLYTAPSELA_MASK) +#define QuadSPI_SOCCR_DLYTAPSELB_MASK (0x3F000000U) +#define QuadSPI_SOCCR_DLYTAPSELB_SHIFT (24U) +#define QuadSPI_SOCCR_DLYTAPSELB(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SOCCR_DLYTAPSELB_SHIFT)) & QuadSPI_SOCCR_DLYTAPSELB_MASK) + +/*! @name BUF0IND - Buffer0 Top Index Register */ +#define QuadSPI_BUF0IND_TPINDX0_MASK (0xFFFFFFF8U) +#define QuadSPI_BUF0IND_TPINDX0_SHIFT (3U) +#define QuadSPI_BUF0IND_TPINDX0(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_BUF0IND_TPINDX0_SHIFT)) & QuadSPI_BUF0IND_TPINDX0_MASK) + +/*! @name BUF1IND - Buffer1 Top Index Register */ +#define QuadSPI_BUF1IND_TPINDX1_MASK (0xFFFFFFF8U) +#define QuadSPI_BUF1IND_TPINDX1_SHIFT (3U) +#define QuadSPI_BUF1IND_TPINDX1(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_BUF1IND_TPINDX1_SHIFT)) & QuadSPI_BUF1IND_TPINDX1_MASK) + +/*! @name BUF2IND - Buffer2 Top Index Register */ +#define QuadSPI_BUF2IND_TPINDX2_MASK (0xFFFFFFF8U) +#define QuadSPI_BUF2IND_TPINDX2_SHIFT (3U) +#define QuadSPI_BUF2IND_TPINDX2(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_BUF2IND_TPINDX2_SHIFT)) & QuadSPI_BUF2IND_TPINDX2_MASK) + +/*! @name SFAR - Serial Flash Address Register */ +#define QuadSPI_SFAR_SFADR_MASK (0xFFFFFFFFU) +#define QuadSPI_SFAR_SFADR_SHIFT (0U) +#define QuadSPI_SFAR_SFADR(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SFAR_SFADR_SHIFT)) & QuadSPI_SFAR_SFADR_MASK) + +/*! @name SFACR - Serial Flash Address Configuration Register */ +#define QuadSPI_SFACR_CAS_MASK (0xFU) +#define QuadSPI_SFACR_CAS_SHIFT (0U) +#define QuadSPI_SFACR_CAS(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SFACR_CAS_SHIFT)) & QuadSPI_SFACR_CAS_MASK) +#define QuadSPI_SFACR_WA_MASK (0x10000U) +#define QuadSPI_SFACR_WA_SHIFT (16U) +#define QuadSPI_SFACR_WA(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SFACR_WA_SHIFT)) & QuadSPI_SFACR_WA_MASK) + +/*! @name SMPR - Sampling Register */ +#define QuadSPI_SMPR_HSENA_MASK (0x1U) +#define QuadSPI_SMPR_HSENA_SHIFT (0U) +#define QuadSPI_SMPR_HSENA(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SMPR_HSENA_SHIFT)) & QuadSPI_SMPR_HSENA_MASK) +#define QuadSPI_SMPR_HSPHS_MASK (0x2U) +#define QuadSPI_SMPR_HSPHS_SHIFT (1U) +#define QuadSPI_SMPR_HSPHS(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SMPR_HSPHS_SHIFT)) & QuadSPI_SMPR_HSPHS_MASK) +#define QuadSPI_SMPR_HSDLY_MASK (0x4U) +#define QuadSPI_SMPR_HSDLY_SHIFT (2U) +#define QuadSPI_SMPR_HSDLY(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SMPR_HSDLY_SHIFT)) & QuadSPI_SMPR_HSDLY_MASK) +#define QuadSPI_SMPR_FSPHS_MASK (0x20U) +#define QuadSPI_SMPR_FSPHS_SHIFT (5U) +#define QuadSPI_SMPR_FSPHS(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SMPR_FSPHS_SHIFT)) & QuadSPI_SMPR_FSPHS_MASK) +#define QuadSPI_SMPR_FSDLY_MASK (0x40U) +#define QuadSPI_SMPR_FSDLY_SHIFT (6U) +#define QuadSPI_SMPR_FSDLY(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SMPR_FSDLY_SHIFT)) & QuadSPI_SMPR_FSDLY_MASK) +#define QuadSPI_SMPR_DDRSMP_MASK (0x70000U) +#define QuadSPI_SMPR_DDRSMP_SHIFT (16U) +#define QuadSPI_SMPR_DDRSMP(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SMPR_DDRSMP_SHIFT)) & QuadSPI_SMPR_DDRSMP_MASK) + +/*! @name RBSR - RX Buffer Status Register */ +#define QuadSPI_RBSR_RDBFL_MASK (0x1F00U) +#define QuadSPI_RBSR_RDBFL_SHIFT (8U) +#define QuadSPI_RBSR_RDBFL(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_RBSR_RDBFL_SHIFT)) & QuadSPI_RBSR_RDBFL_MASK) +#define QuadSPI_RBSR_RDCTR_MASK (0xFFFF0000U) +#define QuadSPI_RBSR_RDCTR_SHIFT (16U) +#define QuadSPI_RBSR_RDCTR(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_RBSR_RDCTR_SHIFT)) & QuadSPI_RBSR_RDCTR_MASK) + +/*! @name RBCT - RX Buffer Control Register */ +#define QuadSPI_RBCT_WMRK_MASK (0xFU) +#define QuadSPI_RBCT_WMRK_SHIFT (0U) +#define QuadSPI_RBCT_WMRK(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_RBCT_WMRK_SHIFT)) & QuadSPI_RBCT_WMRK_MASK) +#define QuadSPI_RBCT_RXBRD_MASK (0x100U) +#define QuadSPI_RBCT_RXBRD_SHIFT (8U) +#define QuadSPI_RBCT_RXBRD(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_RBCT_RXBRD_SHIFT)) & QuadSPI_RBCT_RXBRD_MASK) + +/*! @name TBSR - TX Buffer Status Register */ +#define QuadSPI_TBSR_TRBFL_MASK (0x1F00U) +#define QuadSPI_TBSR_TRBFL_SHIFT (8U) +#define QuadSPI_TBSR_TRBFL(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_TBSR_TRBFL_SHIFT)) & QuadSPI_TBSR_TRBFL_MASK) +#define QuadSPI_TBSR_TRCTR_MASK (0xFFFF0000U) +#define QuadSPI_TBSR_TRCTR_SHIFT (16U) +#define QuadSPI_TBSR_TRCTR(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_TBSR_TRCTR_SHIFT)) & QuadSPI_TBSR_TRCTR_MASK) + +/*! @name TBDR - TX Buffer Data Register */ +#define QuadSPI_TBDR_TXDATA_MASK (0xFFFFFFFFU) +#define QuadSPI_TBDR_TXDATA_SHIFT (0U) +#define QuadSPI_TBDR_TXDATA(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_TBDR_TXDATA_SHIFT)) & QuadSPI_TBDR_TXDATA_MASK) + +/*! @name TBCT - Tx Buffer Control Register */ +#define QuadSPI_TBCT_WMRK_MASK (0xFU) +#define QuadSPI_TBCT_WMRK_SHIFT (0U) +#define QuadSPI_TBCT_WMRK(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_TBCT_WMRK_SHIFT)) & QuadSPI_TBCT_WMRK_MASK) + +/*! @name SR - Status Register */ +#define QuadSPI_SR_BUSY_MASK (0x1U) +#define QuadSPI_SR_BUSY_SHIFT (0U) +#define QuadSPI_SR_BUSY(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SR_BUSY_SHIFT)) & QuadSPI_SR_BUSY_MASK) +#define QuadSPI_SR_IP_ACC_MASK (0x2U) +#define QuadSPI_SR_IP_ACC_SHIFT (1U) +#define QuadSPI_SR_IP_ACC(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SR_IP_ACC_SHIFT)) & QuadSPI_SR_IP_ACC_MASK) +#define QuadSPI_SR_AHB_ACC_MASK (0x4U) +#define QuadSPI_SR_AHB_ACC_SHIFT (2U) +#define QuadSPI_SR_AHB_ACC(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SR_AHB_ACC_SHIFT)) & QuadSPI_SR_AHB_ACC_MASK) +#define QuadSPI_SR_AHBGNT_MASK (0x20U) +#define QuadSPI_SR_AHBGNT_SHIFT (5U) +#define QuadSPI_SR_AHBGNT(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SR_AHBGNT_SHIFT)) & QuadSPI_SR_AHBGNT_MASK) +#define QuadSPI_SR_AHBTRN_MASK (0x40U) +#define QuadSPI_SR_AHBTRN_SHIFT (6U) +#define QuadSPI_SR_AHBTRN(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SR_AHBTRN_SHIFT)) & QuadSPI_SR_AHBTRN_MASK) +#define QuadSPI_SR_AHB0NE_MASK (0x80U) +#define QuadSPI_SR_AHB0NE_SHIFT (7U) +#define QuadSPI_SR_AHB0NE(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SR_AHB0NE_SHIFT)) & QuadSPI_SR_AHB0NE_MASK) +#define QuadSPI_SR_AHB1NE_MASK (0x100U) +#define QuadSPI_SR_AHB1NE_SHIFT (8U) +#define QuadSPI_SR_AHB1NE(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SR_AHB1NE_SHIFT)) & QuadSPI_SR_AHB1NE_MASK) +#define QuadSPI_SR_AHB2NE_MASK (0x200U) +#define QuadSPI_SR_AHB2NE_SHIFT (9U) +#define QuadSPI_SR_AHB2NE(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SR_AHB2NE_SHIFT)) & QuadSPI_SR_AHB2NE_MASK) +#define QuadSPI_SR_AHB3NE_MASK (0x400U) +#define QuadSPI_SR_AHB3NE_SHIFT (10U) +#define QuadSPI_SR_AHB3NE(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SR_AHB3NE_SHIFT)) & QuadSPI_SR_AHB3NE_MASK) +#define QuadSPI_SR_AHB0FUL_MASK (0x800U) +#define QuadSPI_SR_AHB0FUL_SHIFT (11U) +#define QuadSPI_SR_AHB0FUL(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SR_AHB0FUL_SHIFT)) & QuadSPI_SR_AHB0FUL_MASK) +#define QuadSPI_SR_AHB1FUL_MASK (0x1000U) +#define QuadSPI_SR_AHB1FUL_SHIFT (12U) +#define QuadSPI_SR_AHB1FUL(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SR_AHB1FUL_SHIFT)) & QuadSPI_SR_AHB1FUL_MASK) +#define QuadSPI_SR_AHB2FUL_MASK (0x2000U) +#define QuadSPI_SR_AHB2FUL_SHIFT (13U) +#define QuadSPI_SR_AHB2FUL(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SR_AHB2FUL_SHIFT)) & QuadSPI_SR_AHB2FUL_MASK) +#define QuadSPI_SR_AHB3FUL_MASK (0x4000U) +#define QuadSPI_SR_AHB3FUL_SHIFT (14U) +#define QuadSPI_SR_AHB3FUL(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SR_AHB3FUL_SHIFT)) & QuadSPI_SR_AHB3FUL_MASK) +#define QuadSPI_SR_RXWE_MASK (0x10000U) +#define QuadSPI_SR_RXWE_SHIFT (16U) +#define QuadSPI_SR_RXWE(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SR_RXWE_SHIFT)) & QuadSPI_SR_RXWE_MASK) +#define QuadSPI_SR_RXFULL_MASK (0x80000U) +#define QuadSPI_SR_RXFULL_SHIFT (19U) +#define QuadSPI_SR_RXFULL(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SR_RXFULL_SHIFT)) & QuadSPI_SR_RXFULL_MASK) +#define QuadSPI_SR_RXDMA_MASK (0x800000U) +#define QuadSPI_SR_RXDMA_SHIFT (23U) +#define QuadSPI_SR_RXDMA(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SR_RXDMA_SHIFT)) & QuadSPI_SR_RXDMA_MASK) +#define QuadSPI_SR_TXEDA_MASK (0x1000000U) +#define QuadSPI_SR_TXEDA_SHIFT (24U) +#define QuadSPI_SR_TXEDA(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SR_TXEDA_SHIFT)) & QuadSPI_SR_TXEDA_MASK) +#define QuadSPI_SR_TXWA_MASK (0x2000000U) +#define QuadSPI_SR_TXWA_SHIFT (25U) +#define QuadSPI_SR_TXWA(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SR_TXWA_SHIFT)) & QuadSPI_SR_TXWA_MASK) +#define QuadSPI_SR_TXDMA_MASK (0x4000000U) +#define QuadSPI_SR_TXDMA_SHIFT (26U) +#define QuadSPI_SR_TXDMA(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SR_TXDMA_SHIFT)) & QuadSPI_SR_TXDMA_MASK) +#define QuadSPI_SR_TXFULL_MASK (0x8000000U) +#define QuadSPI_SR_TXFULL_SHIFT (27U) +#define QuadSPI_SR_TXFULL(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SR_TXFULL_SHIFT)) & QuadSPI_SR_TXFULL_MASK) +#define QuadSPI_SR_DLPSMP_MASK (0xE0000000U) +#define QuadSPI_SR_DLPSMP_SHIFT (29U) +#define QuadSPI_SR_DLPSMP(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SR_DLPSMP_SHIFT)) & QuadSPI_SR_DLPSMP_MASK) + +/*! @name FR - Flag Register */ +#define QuadSPI_FR_TFF_MASK (0x1U) +#define QuadSPI_FR_TFF_SHIFT (0U) +#define QuadSPI_FR_TFF(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_FR_TFF_SHIFT)) & QuadSPI_FR_TFF_MASK) +#define QuadSPI_FR_IPGEF_MASK (0x10U) +#define QuadSPI_FR_IPGEF_SHIFT (4U) +#define QuadSPI_FR_IPGEF(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_FR_IPGEF_SHIFT)) & QuadSPI_FR_IPGEF_MASK) +#define QuadSPI_FR_IPIEF_MASK (0x40U) +#define QuadSPI_FR_IPIEF_SHIFT (6U) +#define QuadSPI_FR_IPIEF(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_FR_IPIEF_SHIFT)) & QuadSPI_FR_IPIEF_MASK) +#define QuadSPI_FR_IPAEF_MASK (0x80U) +#define QuadSPI_FR_IPAEF_SHIFT (7U) +#define QuadSPI_FR_IPAEF(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_FR_IPAEF_SHIFT)) & QuadSPI_FR_IPAEF_MASK) +#define QuadSPI_FR_IUEF_MASK (0x800U) +#define QuadSPI_FR_IUEF_SHIFT (11U) +#define QuadSPI_FR_IUEF(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_FR_IUEF_SHIFT)) & QuadSPI_FR_IUEF_MASK) +#define QuadSPI_FR_ABOF_MASK (0x1000U) +#define QuadSPI_FR_ABOF_SHIFT (12U) +#define QuadSPI_FR_ABOF(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_FR_ABOF_SHIFT)) & QuadSPI_FR_ABOF_MASK) +#define QuadSPI_FR_AIBSEF_MASK (0x2000U) +#define QuadSPI_FR_AIBSEF_SHIFT (13U) +#define QuadSPI_FR_AIBSEF(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_FR_AIBSEF_SHIFT)) & QuadSPI_FR_AIBSEF_MASK) +#define QuadSPI_FR_AITEF_MASK (0x4000U) +#define QuadSPI_FR_AITEF_SHIFT (14U) +#define QuadSPI_FR_AITEF(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_FR_AITEF_SHIFT)) & QuadSPI_FR_AITEF_MASK) +#define QuadSPI_FR_ABSEF_MASK (0x8000U) +#define QuadSPI_FR_ABSEF_SHIFT (15U) +#define QuadSPI_FR_ABSEF(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_FR_ABSEF_SHIFT)) & QuadSPI_FR_ABSEF_MASK) +#define QuadSPI_FR_RBDF_MASK (0x10000U) +#define QuadSPI_FR_RBDF_SHIFT (16U) +#define QuadSPI_FR_RBDF(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_FR_RBDF_SHIFT)) & QuadSPI_FR_RBDF_MASK) +#define QuadSPI_FR_RBOF_MASK (0x20000U) +#define QuadSPI_FR_RBOF_SHIFT (17U) +#define QuadSPI_FR_RBOF(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_FR_RBOF_SHIFT)) & QuadSPI_FR_RBOF_MASK) +#define QuadSPI_FR_ILLINE_MASK (0x800000U) +#define QuadSPI_FR_ILLINE_SHIFT (23U) +#define QuadSPI_FR_ILLINE(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_FR_ILLINE_SHIFT)) & QuadSPI_FR_ILLINE_MASK) +#define QuadSPI_FR_TBUF_MASK (0x4000000U) +#define QuadSPI_FR_TBUF_SHIFT (26U) +#define QuadSPI_FR_TBUF(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_FR_TBUF_SHIFT)) & QuadSPI_FR_TBUF_MASK) +#define QuadSPI_FR_TBFF_MASK (0x8000000U) +#define QuadSPI_FR_TBFF_SHIFT (27U) +#define QuadSPI_FR_TBFF(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_FR_TBFF_SHIFT)) & QuadSPI_FR_TBFF_MASK) +#define QuadSPI_FR_DLPFF_MASK (0x80000000U) +#define QuadSPI_FR_DLPFF_SHIFT (31U) +#define QuadSPI_FR_DLPFF(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_FR_DLPFF_SHIFT)) & QuadSPI_FR_DLPFF_MASK) + +/*! @name RSER - Interrupt and DMA Request Select and Enable Register */ +#define QuadSPI_RSER_TFIE_MASK (0x1U) +#define QuadSPI_RSER_TFIE_SHIFT (0U) +#define QuadSPI_RSER_TFIE(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_RSER_TFIE_SHIFT)) & QuadSPI_RSER_TFIE_MASK) +#define QuadSPI_RSER_IPGEIE_MASK (0x10U) +#define QuadSPI_RSER_IPGEIE_SHIFT (4U) +#define QuadSPI_RSER_IPGEIE(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_RSER_IPGEIE_SHIFT)) & QuadSPI_RSER_IPGEIE_MASK) +#define QuadSPI_RSER_IPIEIE_MASK (0x40U) +#define QuadSPI_RSER_IPIEIE_SHIFT (6U) +#define QuadSPI_RSER_IPIEIE(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_RSER_IPIEIE_SHIFT)) & QuadSPI_RSER_IPIEIE_MASK) +#define QuadSPI_RSER_IPAEIE_MASK (0x80U) +#define QuadSPI_RSER_IPAEIE_SHIFT (7U) +#define QuadSPI_RSER_IPAEIE(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_RSER_IPAEIE_SHIFT)) & QuadSPI_RSER_IPAEIE_MASK) +#define QuadSPI_RSER_IUEIE_MASK (0x800U) +#define QuadSPI_RSER_IUEIE_SHIFT (11U) +#define QuadSPI_RSER_IUEIE(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_RSER_IUEIE_SHIFT)) & QuadSPI_RSER_IUEIE_MASK) +#define QuadSPI_RSER_ABOIE_MASK (0x1000U) +#define QuadSPI_RSER_ABOIE_SHIFT (12U) +#define QuadSPI_RSER_ABOIE(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_RSER_ABOIE_SHIFT)) & QuadSPI_RSER_ABOIE_MASK) +#define QuadSPI_RSER_AIBSIE_MASK (0x2000U) +#define QuadSPI_RSER_AIBSIE_SHIFT (13U) +#define QuadSPI_RSER_AIBSIE(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_RSER_AIBSIE_SHIFT)) & QuadSPI_RSER_AIBSIE_MASK) +#define QuadSPI_RSER_AITIE_MASK (0x4000U) +#define QuadSPI_RSER_AITIE_SHIFT (14U) +#define QuadSPI_RSER_AITIE(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_RSER_AITIE_SHIFT)) & QuadSPI_RSER_AITIE_MASK) +#define QuadSPI_RSER_ABSEIE_MASK (0x8000U) +#define QuadSPI_RSER_ABSEIE_SHIFT (15U) +#define QuadSPI_RSER_ABSEIE(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_RSER_ABSEIE_SHIFT)) & QuadSPI_RSER_ABSEIE_MASK) +#define QuadSPI_RSER_RBDIE_MASK (0x10000U) +#define QuadSPI_RSER_RBDIE_SHIFT (16U) +#define QuadSPI_RSER_RBDIE(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_RSER_RBDIE_SHIFT)) & QuadSPI_RSER_RBDIE_MASK) +#define QuadSPI_RSER_RBOIE_MASK (0x20000U) +#define QuadSPI_RSER_RBOIE_SHIFT (17U) +#define QuadSPI_RSER_RBOIE(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_RSER_RBOIE_SHIFT)) & QuadSPI_RSER_RBOIE_MASK) +#define QuadSPI_RSER_RBDDE_MASK (0x200000U) +#define QuadSPI_RSER_RBDDE_SHIFT (21U) +#define QuadSPI_RSER_RBDDE(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_RSER_RBDDE_SHIFT)) & QuadSPI_RSER_RBDDE_MASK) +#define QuadSPI_RSER_ILLINIE_MASK (0x800000U) +#define QuadSPI_RSER_ILLINIE_SHIFT (23U) +#define QuadSPI_RSER_ILLINIE(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_RSER_ILLINIE_SHIFT)) & QuadSPI_RSER_ILLINIE_MASK) +#define QuadSPI_RSER_TBFDE_MASK (0x2000000U) +#define QuadSPI_RSER_TBFDE_SHIFT (25U) +#define QuadSPI_RSER_TBFDE(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_RSER_TBFDE_SHIFT)) & QuadSPI_RSER_TBFDE_MASK) +#define QuadSPI_RSER_TBUIE_MASK (0x4000000U) +#define QuadSPI_RSER_TBUIE_SHIFT (26U) +#define QuadSPI_RSER_TBUIE(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_RSER_TBUIE_SHIFT)) & QuadSPI_RSER_TBUIE_MASK) +#define QuadSPI_RSER_TBFIE_MASK (0x8000000U) +#define QuadSPI_RSER_TBFIE_SHIFT (27U) +#define QuadSPI_RSER_TBFIE(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_RSER_TBFIE_SHIFT)) & QuadSPI_RSER_TBFIE_MASK) +#define QuadSPI_RSER_DLPFIE_MASK (0x80000000U) +#define QuadSPI_RSER_DLPFIE_SHIFT (31U) +#define QuadSPI_RSER_DLPFIE(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_RSER_DLPFIE_SHIFT)) & QuadSPI_RSER_DLPFIE_MASK) + +/*! @name SPNDST - Sequence Suspend Status Register */ +#define QuadSPI_SPNDST_SUSPND_MASK (0x1U) +#define QuadSPI_SPNDST_SUSPND_SHIFT (0U) +#define QuadSPI_SPNDST_SUSPND(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SPNDST_SUSPND_SHIFT)) & QuadSPI_SPNDST_SUSPND_MASK) +#define QuadSPI_SPNDST_SPDBUF_MASK (0xC0U) +#define QuadSPI_SPNDST_SPDBUF_SHIFT (6U) +#define QuadSPI_SPNDST_SPDBUF(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SPNDST_SPDBUF_SHIFT)) & QuadSPI_SPNDST_SPDBUF_MASK) +#define QuadSPI_SPNDST_DATLFT_MASK (0x7E00U) +#define QuadSPI_SPNDST_DATLFT_SHIFT (9U) +#define QuadSPI_SPNDST_DATLFT(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SPNDST_DATLFT_SHIFT)) & QuadSPI_SPNDST_DATLFT_MASK) + +/*! @name SPTRCLR - Sequence Pointer Clear Register */ +#define QuadSPI_SPTRCLR_BFPTRC_MASK (0x1U) +#define QuadSPI_SPTRCLR_BFPTRC_SHIFT (0U) +#define QuadSPI_SPTRCLR_BFPTRC(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SPTRCLR_BFPTRC_SHIFT)) & QuadSPI_SPTRCLR_BFPTRC_MASK) +#define QuadSPI_SPTRCLR_IPPTRC_MASK (0x100U) +#define QuadSPI_SPTRCLR_IPPTRC_SHIFT (8U) +#define QuadSPI_SPTRCLR_IPPTRC(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SPTRCLR_IPPTRC_SHIFT)) & QuadSPI_SPTRCLR_IPPTRC_MASK) + +/*! @name SFA1AD - Serial Flash A1 Top Address */ +#define QuadSPI_SFA1AD_TPADA1_MASK (0xFFFFFC00U) +#define QuadSPI_SFA1AD_TPADA1_SHIFT (10U) +#define QuadSPI_SFA1AD_TPADA1(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SFA1AD_TPADA1_SHIFT)) & QuadSPI_SFA1AD_TPADA1_MASK) + +/*! @name SFA2AD - Serial Flash A2 Top Address */ +#define QuadSPI_SFA2AD_TPADA2_MASK (0xFFFFFC00U) +#define QuadSPI_SFA2AD_TPADA2_SHIFT (10U) +#define QuadSPI_SFA2AD_TPADA2(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SFA2AD_TPADA2_SHIFT)) & QuadSPI_SFA2AD_TPADA2_MASK) + +/*! @name SFB1AD - Serial Flash B1Top Address */ +#define QuadSPI_SFB1AD_TPADB1_MASK (0xFFFFFC00U) +#define QuadSPI_SFB1AD_TPADB1_SHIFT (10U) +#define QuadSPI_SFB1AD_TPADB1(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SFB1AD_TPADB1_SHIFT)) & QuadSPI_SFB1AD_TPADB1_MASK) + +/*! @name SFB2AD - Serial Flash B2Top Address */ +#define QuadSPI_SFB2AD_TPADB2_MASK (0xFFFFFC00U) +#define QuadSPI_SFB2AD_TPADB2_SHIFT (10U) +#define QuadSPI_SFB2AD_TPADB2(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_SFB2AD_TPADB2_SHIFT)) & QuadSPI_SFB2AD_TPADB2_MASK) + +/*! @name DLPR - Data Learn Pattern Register */ +#define QuadSPI_DLPR_DLPV_MASK (0xFFFFFFFFU) +#define QuadSPI_DLPR_DLPV_SHIFT (0U) +#define QuadSPI_DLPR_DLPV(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_DLPR_DLPV_SHIFT)) & QuadSPI_DLPR_DLPV_MASK) + +/*! @name RBDR - RX Buffer Data Register */ +#define QuadSPI_RBDR_RXDATA_MASK (0xFFFFFFFFU) +#define QuadSPI_RBDR_RXDATA_SHIFT (0U) +#define QuadSPI_RBDR_RXDATA(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_RBDR_RXDATA_SHIFT)) & QuadSPI_RBDR_RXDATA_MASK) + +/* The count of QuadSPI_RBDR */ +#define QuadSPI_RBDR_COUNT (16U) + +/*! @name LUTKEY - LUT Key Register */ +#define QuadSPI_LUTKEY_KEY_MASK (0xFFFFFFFFU) +#define QuadSPI_LUTKEY_KEY_SHIFT (0U) +#define QuadSPI_LUTKEY_KEY(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_LUTKEY_KEY_SHIFT)) & QuadSPI_LUTKEY_KEY_MASK) + +/*! @name LCKCR - LUT Lock Configuration Register */ +#define QuadSPI_LCKCR_LOCK_MASK (0x1U) +#define QuadSPI_LCKCR_LOCK_SHIFT (0U) +#define QuadSPI_LCKCR_LOCK(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_LCKCR_LOCK_SHIFT)) & QuadSPI_LCKCR_LOCK_MASK) +#define QuadSPI_LCKCR_UNLOCK_MASK (0x2U) +#define QuadSPI_LCKCR_UNLOCK_SHIFT (1U) +#define QuadSPI_LCKCR_UNLOCK(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_LCKCR_UNLOCK_SHIFT)) & QuadSPI_LCKCR_UNLOCK_MASK) + +/*! @name LUT - Look-up Table register */ +#define QuadSPI_LUT_OPRND0_MASK (0xFFU) +#define QuadSPI_LUT_OPRND0_SHIFT (0U) +#define QuadSPI_LUT_OPRND0(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_LUT_OPRND0_SHIFT)) & QuadSPI_LUT_OPRND0_MASK) +#define QuadSPI_LUT_PAD0_MASK (0x300U) +#define QuadSPI_LUT_PAD0_SHIFT (8U) +#define QuadSPI_LUT_PAD0(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_LUT_PAD0_SHIFT)) & QuadSPI_LUT_PAD0_MASK) +#define QuadSPI_LUT_INSTR0_MASK (0xFC00U) +#define QuadSPI_LUT_INSTR0_SHIFT (10U) +#define QuadSPI_LUT_INSTR0(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_LUT_INSTR0_SHIFT)) & QuadSPI_LUT_INSTR0_MASK) +#define QuadSPI_LUT_OPRND1_MASK (0xFF0000U) +#define QuadSPI_LUT_OPRND1_SHIFT (16U) +#define QuadSPI_LUT_OPRND1(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_LUT_OPRND1_SHIFT)) & QuadSPI_LUT_OPRND1_MASK) +#define QuadSPI_LUT_PAD1_MASK (0x3000000U) +#define QuadSPI_LUT_PAD1_SHIFT (24U) +#define QuadSPI_LUT_PAD1(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_LUT_PAD1_SHIFT)) & QuadSPI_LUT_PAD1_MASK) +#define QuadSPI_LUT_INSTR1_MASK (0xFC000000U) +#define QuadSPI_LUT_INSTR1_SHIFT (26U) +#define QuadSPI_LUT_INSTR1(x) (((uint32_t)(((uint32_t)(x)) << QuadSPI_LUT_INSTR1_SHIFT)) & QuadSPI_LUT_INSTR1_MASK) + +/* The count of QuadSPI_LUT */ +#define QuadSPI_LUT_COUNT (64U) + + +/*! + * @} + */ /* end of group QuadSPI_Register_Masks */ + + +/* QuadSPI - Peripheral instance base addresses */ +/** Peripheral QuadSPI0 base address */ +#define QuadSPI0_BASE (0x4005A000u) +/** Peripheral QuadSPI0 base pointer */ +#define QuadSPI0 ((QuadSPI_Type *)QuadSPI0_BASE) +/** Array initializer of QuadSPI peripheral base addresses */ +#define QuadSPI_BASE_ADDRS { QuadSPI0_BASE } +/** Array initializer of QuadSPI peripheral base pointers */ +#define QuadSPI_BASE_PTRS { QuadSPI0 } +/** Interrupt vectors for the QuadSPI peripheral type */ +#define QuadSPI_IRQS { QSPI0_IRQn } + +/*! + * @} + */ /* end of group QuadSPI_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- RCM Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup RCM_Peripheral_Access_Layer RCM Peripheral Access Layer + * @{ + */ + +/** RCM - Register Layout Typedef */ +typedef struct { + __I uint8_t SRS0; /**< System Reset Status Register 0, offset: 0x0 */ + __I uint8_t SRS1; /**< System Reset Status Register 1, offset: 0x1 */ + uint8_t RESERVED_0[2]; + __IO uint8_t RPFC; /**< Reset Pin Filter Control register, offset: 0x4 */ + __IO uint8_t RPFW; /**< Reset Pin Filter Width register, offset: 0x5 */ + __IO uint8_t FM; /**< Force Mode Register, offset: 0x6 */ + __IO uint8_t MR; /**< Mode Register, offset: 0x7 */ + __IO uint8_t SSRS0; /**< Sticky System Reset Status Register 0, offset: 0x8 */ + __IO uint8_t SSRS1; /**< Sticky System Reset Status Register 1, offset: 0x9 */ +} RCM_Type; + +/* ---------------------------------------------------------------------------- + -- RCM Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup RCM_Register_Masks RCM Register Masks + * @{ + */ + +/*! @name SRS0 - System Reset Status Register 0 */ +#define RCM_SRS0_WAKEUP_MASK (0x1U) +#define RCM_SRS0_WAKEUP_SHIFT (0U) +#define RCM_SRS0_WAKEUP(x) (((uint8_t)(((uint8_t)(x)) << RCM_SRS0_WAKEUP_SHIFT)) & RCM_SRS0_WAKEUP_MASK) +#define RCM_SRS0_LVD_MASK (0x2U) +#define RCM_SRS0_LVD_SHIFT (1U) +#define RCM_SRS0_LVD(x) (((uint8_t)(((uint8_t)(x)) << RCM_SRS0_LVD_SHIFT)) & RCM_SRS0_LVD_MASK) +#define RCM_SRS0_LOC_MASK (0x4U) +#define RCM_SRS0_LOC_SHIFT (2U) +#define RCM_SRS0_LOC(x) (((uint8_t)(((uint8_t)(x)) << RCM_SRS0_LOC_SHIFT)) & RCM_SRS0_LOC_MASK) +#define RCM_SRS0_LOL_MASK (0x8U) +#define RCM_SRS0_LOL_SHIFT (3U) +#define RCM_SRS0_LOL(x) (((uint8_t)(((uint8_t)(x)) << RCM_SRS0_LOL_SHIFT)) & RCM_SRS0_LOL_MASK) +#define RCM_SRS0_WDOG_MASK (0x20U) +#define RCM_SRS0_WDOG_SHIFT (5U) +#define RCM_SRS0_WDOG(x) (((uint8_t)(((uint8_t)(x)) << RCM_SRS0_WDOG_SHIFT)) & RCM_SRS0_WDOG_MASK) +#define RCM_SRS0_PIN_MASK (0x40U) +#define RCM_SRS0_PIN_SHIFT (6U) +#define RCM_SRS0_PIN(x) (((uint8_t)(((uint8_t)(x)) << RCM_SRS0_PIN_SHIFT)) & RCM_SRS0_PIN_MASK) +#define RCM_SRS0_POR_MASK (0x80U) +#define RCM_SRS0_POR_SHIFT (7U) +#define RCM_SRS0_POR(x) (((uint8_t)(((uint8_t)(x)) << RCM_SRS0_POR_SHIFT)) & RCM_SRS0_POR_MASK) + +/*! @name SRS1 - System Reset Status Register 1 */ +#define RCM_SRS1_LOCKUP_MASK (0x2U) +#define RCM_SRS1_LOCKUP_SHIFT (1U) +#define RCM_SRS1_LOCKUP(x) (((uint8_t)(((uint8_t)(x)) << RCM_SRS1_LOCKUP_SHIFT)) & RCM_SRS1_LOCKUP_MASK) +#define RCM_SRS1_SW_MASK (0x4U) +#define RCM_SRS1_SW_SHIFT (2U) +#define RCM_SRS1_SW(x) (((uint8_t)(((uint8_t)(x)) << RCM_SRS1_SW_SHIFT)) & RCM_SRS1_SW_MASK) +#define RCM_SRS1_MDM_AP_MASK (0x8U) +#define RCM_SRS1_MDM_AP_SHIFT (3U) +#define RCM_SRS1_MDM_AP(x) (((uint8_t)(((uint8_t)(x)) << RCM_SRS1_MDM_AP_SHIFT)) & RCM_SRS1_MDM_AP_MASK) +#define RCM_SRS1_SACKERR_MASK (0x20U) +#define RCM_SRS1_SACKERR_SHIFT (5U) +#define RCM_SRS1_SACKERR(x) (((uint8_t)(((uint8_t)(x)) << RCM_SRS1_SACKERR_SHIFT)) & RCM_SRS1_SACKERR_MASK) + +/*! @name RPFC - Reset Pin Filter Control register */ +#define RCM_RPFC_RSTFLTSRW_MASK (0x3U) +#define RCM_RPFC_RSTFLTSRW_SHIFT (0U) +#define RCM_RPFC_RSTFLTSRW(x) (((uint8_t)(((uint8_t)(x)) << RCM_RPFC_RSTFLTSRW_SHIFT)) & RCM_RPFC_RSTFLTSRW_MASK) +#define RCM_RPFC_RSTFLTSS_MASK (0x4U) +#define RCM_RPFC_RSTFLTSS_SHIFT (2U) +#define RCM_RPFC_RSTFLTSS(x) (((uint8_t)(((uint8_t)(x)) << RCM_RPFC_RSTFLTSS_SHIFT)) & RCM_RPFC_RSTFLTSS_MASK) + +/*! @name RPFW - Reset Pin Filter Width register */ +#define RCM_RPFW_RSTFLTSEL_MASK (0x1FU) +#define RCM_RPFW_RSTFLTSEL_SHIFT (0U) +#define RCM_RPFW_RSTFLTSEL(x) (((uint8_t)(((uint8_t)(x)) << RCM_RPFW_RSTFLTSEL_SHIFT)) & RCM_RPFW_RSTFLTSEL_MASK) + +/*! @name FM - Force Mode Register */ +#define RCM_FM_FORCEROM_MASK (0x6U) +#define RCM_FM_FORCEROM_SHIFT (1U) +#define RCM_FM_FORCEROM(x) (((uint8_t)(((uint8_t)(x)) << RCM_FM_FORCEROM_SHIFT)) & RCM_FM_FORCEROM_MASK) + +/*! @name MR - Mode Register */ +#define RCM_MR_BOOTROM_MASK (0x6U) +#define RCM_MR_BOOTROM_SHIFT (1U) +#define RCM_MR_BOOTROM(x) (((uint8_t)(((uint8_t)(x)) << RCM_MR_BOOTROM_SHIFT)) & RCM_MR_BOOTROM_MASK) + +/*! @name SSRS0 - Sticky System Reset Status Register 0 */ +#define RCM_SSRS0_SWAKEUP_MASK (0x1U) +#define RCM_SSRS0_SWAKEUP_SHIFT (0U) +#define RCM_SSRS0_SWAKEUP(x) (((uint8_t)(((uint8_t)(x)) << RCM_SSRS0_SWAKEUP_SHIFT)) & RCM_SSRS0_SWAKEUP_MASK) +#define RCM_SSRS0_SLVD_MASK (0x2U) +#define RCM_SSRS0_SLVD_SHIFT (1U) +#define RCM_SSRS0_SLVD(x) (((uint8_t)(((uint8_t)(x)) << RCM_SSRS0_SLVD_SHIFT)) & RCM_SSRS0_SLVD_MASK) +#define RCM_SSRS0_SLOC_MASK (0x4U) +#define RCM_SSRS0_SLOC_SHIFT (2U) +#define RCM_SSRS0_SLOC(x) (((uint8_t)(((uint8_t)(x)) << RCM_SSRS0_SLOC_SHIFT)) & RCM_SSRS0_SLOC_MASK) +#define RCM_SSRS0_SLOL_MASK (0x8U) +#define RCM_SSRS0_SLOL_SHIFT (3U) +#define RCM_SSRS0_SLOL(x) (((uint8_t)(((uint8_t)(x)) << RCM_SSRS0_SLOL_SHIFT)) & RCM_SSRS0_SLOL_MASK) +#define RCM_SSRS0_SWDOG_MASK (0x20U) +#define RCM_SSRS0_SWDOG_SHIFT (5U) +#define RCM_SSRS0_SWDOG(x) (((uint8_t)(((uint8_t)(x)) << RCM_SSRS0_SWDOG_SHIFT)) & RCM_SSRS0_SWDOG_MASK) +#define RCM_SSRS0_SPIN_MASK (0x40U) +#define RCM_SSRS0_SPIN_SHIFT (6U) +#define RCM_SSRS0_SPIN(x) (((uint8_t)(((uint8_t)(x)) << RCM_SSRS0_SPIN_SHIFT)) & RCM_SSRS0_SPIN_MASK) +#define RCM_SSRS0_SPOR_MASK (0x80U) +#define RCM_SSRS0_SPOR_SHIFT (7U) +#define RCM_SSRS0_SPOR(x) (((uint8_t)(((uint8_t)(x)) << RCM_SSRS0_SPOR_SHIFT)) & RCM_SSRS0_SPOR_MASK) + +/*! @name SSRS1 - Sticky System Reset Status Register 1 */ +#define RCM_SSRS1_SLOCKUP_MASK (0x2U) +#define RCM_SSRS1_SLOCKUP_SHIFT (1U) +#define RCM_SSRS1_SLOCKUP(x) (((uint8_t)(((uint8_t)(x)) << RCM_SSRS1_SLOCKUP_SHIFT)) & RCM_SSRS1_SLOCKUP_MASK) +#define RCM_SSRS1_SSW_MASK (0x4U) +#define RCM_SSRS1_SSW_SHIFT (2U) +#define RCM_SSRS1_SSW(x) (((uint8_t)(((uint8_t)(x)) << RCM_SSRS1_SSW_SHIFT)) & RCM_SSRS1_SSW_MASK) +#define RCM_SSRS1_SMDM_AP_MASK (0x8U) +#define RCM_SSRS1_SMDM_AP_SHIFT (3U) +#define RCM_SSRS1_SMDM_AP(x) (((uint8_t)(((uint8_t)(x)) << RCM_SSRS1_SMDM_AP_SHIFT)) & RCM_SSRS1_SMDM_AP_MASK) +#define RCM_SSRS1_SSACKERR_MASK (0x20U) +#define RCM_SSRS1_SSACKERR_SHIFT (5U) +#define RCM_SSRS1_SSACKERR(x) (((uint8_t)(((uint8_t)(x)) << RCM_SSRS1_SSACKERR_SHIFT)) & RCM_SSRS1_SSACKERR_MASK) + + +/*! + * @} + */ /* end of group RCM_Register_Masks */ + + +/* RCM - Peripheral instance base addresses */ +/** Peripheral RCM base address */ +#define RCM_BASE (0x4007F000u) +/** Peripheral RCM base pointer */ +#define RCM ((RCM_Type *)RCM_BASE) +/** Array initializer of RCM peripheral base addresses */ +#define RCM_BASE_ADDRS { RCM_BASE } +/** Array initializer of RCM peripheral base pointers */ +#define RCM_BASE_PTRS { RCM } + +/*! + * @} + */ /* end of group RCM_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- RFSYS Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup RFSYS_Peripheral_Access_Layer RFSYS Peripheral Access Layer + * @{ + */ + +/** RFSYS - Register Layout Typedef */ +typedef struct { + __IO uint32_t REG[8]; /**< Register file register, array offset: 0x0, array step: 0x4 */ +} RFSYS_Type; + +/* ---------------------------------------------------------------------------- + -- RFSYS Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup RFSYS_Register_Masks RFSYS Register Masks + * @{ + */ + +/*! @name REG - Register file register */ +#define RFSYS_REG_LL_MASK (0xFFU) +#define RFSYS_REG_LL_SHIFT (0U) +#define RFSYS_REG_LL(x) (((uint32_t)(((uint32_t)(x)) << RFSYS_REG_LL_SHIFT)) & RFSYS_REG_LL_MASK) +#define RFSYS_REG_LH_MASK (0xFF00U) +#define RFSYS_REG_LH_SHIFT (8U) +#define RFSYS_REG_LH(x) (((uint32_t)(((uint32_t)(x)) << RFSYS_REG_LH_SHIFT)) & RFSYS_REG_LH_MASK) +#define RFSYS_REG_HL_MASK (0xFF0000U) +#define RFSYS_REG_HL_SHIFT (16U) +#define RFSYS_REG_HL(x) (((uint32_t)(((uint32_t)(x)) << RFSYS_REG_HL_SHIFT)) & RFSYS_REG_HL_MASK) +#define RFSYS_REG_HH_MASK (0xFF000000U) +#define RFSYS_REG_HH_SHIFT (24U) +#define RFSYS_REG_HH(x) (((uint32_t)(((uint32_t)(x)) << RFSYS_REG_HH_SHIFT)) & RFSYS_REG_HH_MASK) + +/* The count of RFSYS_REG */ +#define RFSYS_REG_COUNT (8U) + + +/*! + * @} + */ /* end of group RFSYS_Register_Masks */ + + +/* RFSYS - Peripheral instance base addresses */ +/** Peripheral RFSYS base address */ +#define RFSYS_BASE (0x40041000u) +/** Peripheral RFSYS base pointer */ +#define RFSYS ((RFSYS_Type *)RFSYS_BASE) +/** Array initializer of RFSYS peripheral base addresses */ +#define RFSYS_BASE_ADDRS { RFSYS_BASE } +/** Array initializer of RFSYS peripheral base pointers */ +#define RFSYS_BASE_PTRS { RFSYS } + +/*! + * @} + */ /* end of group RFSYS_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- RFVBAT Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup RFVBAT_Peripheral_Access_Layer RFVBAT Peripheral Access Layer + * @{ + */ + +/** RFVBAT - Register Layout Typedef */ +typedef struct { + __IO uint32_t REG[8]; /**< VBAT register file register, array offset: 0x0, array step: 0x4 */ +} RFVBAT_Type; + +/* ---------------------------------------------------------------------------- + -- RFVBAT Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup RFVBAT_Register_Masks RFVBAT Register Masks + * @{ + */ + +/*! @name REG - VBAT register file register */ +#define RFVBAT_REG_LL_MASK (0xFFU) +#define RFVBAT_REG_LL_SHIFT (0U) +#define RFVBAT_REG_LL(x) (((uint32_t)(((uint32_t)(x)) << RFVBAT_REG_LL_SHIFT)) & RFVBAT_REG_LL_MASK) +#define RFVBAT_REG_LH_MASK (0xFF00U) +#define RFVBAT_REG_LH_SHIFT (8U) +#define RFVBAT_REG_LH(x) (((uint32_t)(((uint32_t)(x)) << RFVBAT_REG_LH_SHIFT)) & RFVBAT_REG_LH_MASK) +#define RFVBAT_REG_HL_MASK (0xFF0000U) +#define RFVBAT_REG_HL_SHIFT (16U) +#define RFVBAT_REG_HL(x) (((uint32_t)(((uint32_t)(x)) << RFVBAT_REG_HL_SHIFT)) & RFVBAT_REG_HL_MASK) +#define RFVBAT_REG_HH_MASK (0xFF000000U) +#define RFVBAT_REG_HH_SHIFT (24U) +#define RFVBAT_REG_HH(x) (((uint32_t)(((uint32_t)(x)) << RFVBAT_REG_HH_SHIFT)) & RFVBAT_REG_HH_MASK) + +/* The count of RFVBAT_REG */ +#define RFVBAT_REG_COUNT (8U) + + +/*! + * @} + */ /* end of group RFVBAT_Register_Masks */ + + +/* RFVBAT - Peripheral instance base addresses */ +/** Peripheral RFVBAT base address */ +#define RFVBAT_BASE (0x4003E000u) +/** Peripheral RFVBAT base pointer */ +#define RFVBAT ((RFVBAT_Type *)RFVBAT_BASE) +/** Array initializer of RFVBAT peripheral base addresses */ +#define RFVBAT_BASE_ADDRS { RFVBAT_BASE } +/** Array initializer of RFVBAT peripheral base pointers */ +#define RFVBAT_BASE_PTRS { RFVBAT } + +/*! + * @} + */ /* end of group RFVBAT_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- ROM Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup ROM_Peripheral_Access_Layer ROM Peripheral Access Layer + * @{ + */ + +/** ROM - Register Layout Typedef */ +typedef struct { + __I uint32_t ENTRY[3]; /**< Entry, array offset: 0x0, array step: 0x4 */ + __I uint32_t TABLEMARK; /**< End of Table Marker Register, offset: 0xC */ + uint8_t RESERVED_0[4028]; + __I uint32_t SYSACCESS; /**< System Access Register, offset: 0xFCC */ + __I uint32_t PERIPHID4; /**< Peripheral ID Register, offset: 0xFD0 */ + __I uint32_t PERIPHID5; /**< Peripheral ID Register, offset: 0xFD4 */ + __I uint32_t PERIPHID6; /**< Peripheral ID Register, offset: 0xFD8 */ + __I uint32_t PERIPHID7; /**< Peripheral ID Register, offset: 0xFDC */ + __I uint32_t PERIPHID0; /**< Peripheral ID Register, offset: 0xFE0 */ + __I uint32_t PERIPHID1; /**< Peripheral ID Register, offset: 0xFE4 */ + __I uint32_t PERIPHID2; /**< Peripheral ID Register, offset: 0xFE8 */ + __I uint32_t PERIPHID3; /**< Peripheral ID Register, offset: 0xFEC */ + __I uint32_t COMPID[4]; /**< Component ID Register, array offset: 0xFF0, array step: 0x4 */ +} ROM_Type; + +/* ---------------------------------------------------------------------------- + -- ROM Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup ROM_Register_Masks ROM Register Masks + * @{ + */ + +/*! @name ENTRY - Entry */ +#define ROM_ENTRY_ENTRY_MASK (0xFFFFFFFFU) +#define ROM_ENTRY_ENTRY_SHIFT (0U) +#define ROM_ENTRY_ENTRY(x) (((uint32_t)(((uint32_t)(x)) << ROM_ENTRY_ENTRY_SHIFT)) & ROM_ENTRY_ENTRY_MASK) + +/* The count of ROM_ENTRY */ +#define ROM_ENTRY_COUNT (3U) + +/*! @name TABLEMARK - End of Table Marker Register */ +#define ROM_TABLEMARK_MARK_MASK (0xFFFFFFFFU) +#define ROM_TABLEMARK_MARK_SHIFT (0U) +#define ROM_TABLEMARK_MARK(x) (((uint32_t)(((uint32_t)(x)) << ROM_TABLEMARK_MARK_SHIFT)) & ROM_TABLEMARK_MARK_MASK) + +/*! @name SYSACCESS - System Access Register */ +#define ROM_SYSACCESS_SYSACCESS_MASK (0xFFFFFFFFU) +#define ROM_SYSACCESS_SYSACCESS_SHIFT (0U) +#define ROM_SYSACCESS_SYSACCESS(x) (((uint32_t)(((uint32_t)(x)) << ROM_SYSACCESS_SYSACCESS_SHIFT)) & ROM_SYSACCESS_SYSACCESS_MASK) + +/*! @name PERIPHID4 - Peripheral ID Register */ +#define ROM_PERIPHID4_PERIPHID_MASK (0xFFFFFFFFU) +#define ROM_PERIPHID4_PERIPHID_SHIFT (0U) +#define ROM_PERIPHID4_PERIPHID(x) (((uint32_t)(((uint32_t)(x)) << ROM_PERIPHID4_PERIPHID_SHIFT)) & ROM_PERIPHID4_PERIPHID_MASK) + +/*! @name PERIPHID5 - Peripheral ID Register */ +#define ROM_PERIPHID5_PERIPHID_MASK (0xFFFFFFFFU) +#define ROM_PERIPHID5_PERIPHID_SHIFT (0U) +#define ROM_PERIPHID5_PERIPHID(x) (((uint32_t)(((uint32_t)(x)) << ROM_PERIPHID5_PERIPHID_SHIFT)) & ROM_PERIPHID5_PERIPHID_MASK) + +/*! @name PERIPHID6 - Peripheral ID Register */ +#define ROM_PERIPHID6_PERIPHID_MASK (0xFFFFFFFFU) +#define ROM_PERIPHID6_PERIPHID_SHIFT (0U) +#define ROM_PERIPHID6_PERIPHID(x) (((uint32_t)(((uint32_t)(x)) << ROM_PERIPHID6_PERIPHID_SHIFT)) & ROM_PERIPHID6_PERIPHID_MASK) + +/*! @name PERIPHID7 - Peripheral ID Register */ +#define ROM_PERIPHID7_PERIPHID_MASK (0xFFFFFFFFU) +#define ROM_PERIPHID7_PERIPHID_SHIFT (0U) +#define ROM_PERIPHID7_PERIPHID(x) (((uint32_t)(((uint32_t)(x)) << ROM_PERIPHID7_PERIPHID_SHIFT)) & ROM_PERIPHID7_PERIPHID_MASK) + +/*! @name PERIPHID0 - Peripheral ID Register */ +#define ROM_PERIPHID0_PERIPHID_MASK (0xFFFFFFFFU) +#define ROM_PERIPHID0_PERIPHID_SHIFT (0U) +#define ROM_PERIPHID0_PERIPHID(x) (((uint32_t)(((uint32_t)(x)) << ROM_PERIPHID0_PERIPHID_SHIFT)) & ROM_PERIPHID0_PERIPHID_MASK) + +/*! @name PERIPHID1 - Peripheral ID Register */ +#define ROM_PERIPHID1_PERIPHID_MASK (0xFFFFFFFFU) +#define ROM_PERIPHID1_PERIPHID_SHIFT (0U) +#define ROM_PERIPHID1_PERIPHID(x) (((uint32_t)(((uint32_t)(x)) << ROM_PERIPHID1_PERIPHID_SHIFT)) & ROM_PERIPHID1_PERIPHID_MASK) + +/*! @name PERIPHID2 - Peripheral ID Register */ +#define ROM_PERIPHID2_PERIPHID_MASK (0xFFFFFFFFU) +#define ROM_PERIPHID2_PERIPHID_SHIFT (0U) +#define ROM_PERIPHID2_PERIPHID(x) (((uint32_t)(((uint32_t)(x)) << ROM_PERIPHID2_PERIPHID_SHIFT)) & ROM_PERIPHID2_PERIPHID_MASK) + +/*! @name PERIPHID3 - Peripheral ID Register */ +#define ROM_PERIPHID3_PERIPHID_MASK (0xFFFFFFFFU) +#define ROM_PERIPHID3_PERIPHID_SHIFT (0U) +#define ROM_PERIPHID3_PERIPHID(x) (((uint32_t)(((uint32_t)(x)) << ROM_PERIPHID3_PERIPHID_SHIFT)) & ROM_PERIPHID3_PERIPHID_MASK) + +/*! @name COMPID - Component ID Register */ +#define ROM_COMPID_COMPID_MASK (0xFFFFFFFFU) +#define ROM_COMPID_COMPID_SHIFT (0U) +#define ROM_COMPID_COMPID(x) (((uint32_t)(((uint32_t)(x)) << ROM_COMPID_COMPID_SHIFT)) & ROM_COMPID_COMPID_MASK) + +/* The count of ROM_COMPID */ +#define ROM_COMPID_COUNT (4U) + + +/*! + * @} + */ /* end of group ROM_Register_Masks */ + + +/* ROM - Peripheral instance base addresses */ +/** Peripheral ROM base address */ +#define ROM_BASE (0xF0002000u) +/** Peripheral ROM base pointer */ +#define ROM ((ROM_Type *)ROM_BASE) +/** Array initializer of ROM peripheral base addresses */ +#define ROM_BASE_ADDRS { ROM_BASE } +/** Array initializer of ROM peripheral base pointers */ +#define ROM_BASE_PTRS { ROM } + +/*! + * @} + */ /* end of group ROM_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- RTC Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup RTC_Peripheral_Access_Layer RTC Peripheral Access Layer + * @{ + */ + +/** RTC - Register Layout Typedef */ +typedef struct { + __IO uint32_t TSR; /**< RTC Time Seconds Register, offset: 0x0 */ + __IO uint32_t TPR; /**< RTC Time Prescaler Register, offset: 0x4 */ + __IO uint32_t TAR; /**< RTC Time Alarm Register, offset: 0x8 */ + __IO uint32_t TCR; /**< RTC Time Compensation Register, offset: 0xC */ + __IO uint32_t CR; /**< RTC Control Register, offset: 0x10 */ + __IO uint32_t SR; /**< RTC Status Register, offset: 0x14 */ + __IO uint32_t LR; /**< RTC Lock Register, offset: 0x18 */ + __IO uint32_t IER; /**< RTC Interrupt Enable Register, offset: 0x1C */ + uint8_t RESERVED_0[2016]; + __IO uint32_t WAR; /**< RTC Write Access Register, offset: 0x800 */ + __IO uint32_t RAR; /**< RTC Read Access Register, offset: 0x804 */ +} RTC_Type; + +/* ---------------------------------------------------------------------------- + -- RTC Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup RTC_Register_Masks RTC Register Masks + * @{ + */ + +/*! @name TSR - RTC Time Seconds Register */ +#define RTC_TSR_TSR_MASK (0xFFFFFFFFU) +#define RTC_TSR_TSR_SHIFT (0U) +#define RTC_TSR_TSR(x) (((uint32_t)(((uint32_t)(x)) << RTC_TSR_TSR_SHIFT)) & RTC_TSR_TSR_MASK) + +/*! @name TPR - RTC Time Prescaler Register */ +#define RTC_TPR_TPR_MASK (0xFFFFU) +#define RTC_TPR_TPR_SHIFT (0U) +#define RTC_TPR_TPR(x) (((uint32_t)(((uint32_t)(x)) << RTC_TPR_TPR_SHIFT)) & RTC_TPR_TPR_MASK) + +/*! @name TAR - RTC Time Alarm Register */ +#define RTC_TAR_TAR_MASK (0xFFFFFFFFU) +#define RTC_TAR_TAR_SHIFT (0U) +#define RTC_TAR_TAR(x) (((uint32_t)(((uint32_t)(x)) << RTC_TAR_TAR_SHIFT)) & RTC_TAR_TAR_MASK) + +/*! @name TCR - RTC Time Compensation Register */ +#define RTC_TCR_TCR_MASK (0xFFU) +#define RTC_TCR_TCR_SHIFT (0U) +#define RTC_TCR_TCR(x) (((uint32_t)(((uint32_t)(x)) << RTC_TCR_TCR_SHIFT)) & RTC_TCR_TCR_MASK) +#define RTC_TCR_CIR_MASK (0xFF00U) +#define RTC_TCR_CIR_SHIFT (8U) +#define RTC_TCR_CIR(x) (((uint32_t)(((uint32_t)(x)) << RTC_TCR_CIR_SHIFT)) & RTC_TCR_CIR_MASK) +#define RTC_TCR_TCV_MASK (0xFF0000U) +#define RTC_TCR_TCV_SHIFT (16U) +#define RTC_TCR_TCV(x) (((uint32_t)(((uint32_t)(x)) << RTC_TCR_TCV_SHIFT)) & RTC_TCR_TCV_MASK) +#define RTC_TCR_CIC_MASK (0xFF000000U) +#define RTC_TCR_CIC_SHIFT (24U) +#define RTC_TCR_CIC(x) (((uint32_t)(((uint32_t)(x)) << RTC_TCR_CIC_SHIFT)) & RTC_TCR_CIC_MASK) + +/*! @name CR - RTC Control Register */ +#define RTC_CR_SWR_MASK (0x1U) +#define RTC_CR_SWR_SHIFT (0U) +#define RTC_CR_SWR(x) (((uint32_t)(((uint32_t)(x)) << RTC_CR_SWR_SHIFT)) & RTC_CR_SWR_MASK) +#define RTC_CR_WPE_MASK (0x2U) +#define RTC_CR_WPE_SHIFT (1U) +#define RTC_CR_WPE(x) (((uint32_t)(((uint32_t)(x)) << RTC_CR_WPE_SHIFT)) & RTC_CR_WPE_MASK) +#define RTC_CR_SUP_MASK (0x4U) +#define RTC_CR_SUP_SHIFT (2U) +#define RTC_CR_SUP(x) (((uint32_t)(((uint32_t)(x)) << RTC_CR_SUP_SHIFT)) & RTC_CR_SUP_MASK) +#define RTC_CR_UM_MASK (0x8U) +#define RTC_CR_UM_SHIFT (3U) +#define RTC_CR_UM(x) (((uint32_t)(((uint32_t)(x)) << RTC_CR_UM_SHIFT)) & RTC_CR_UM_MASK) +#define RTC_CR_WPS_MASK (0x10U) +#define RTC_CR_WPS_SHIFT (4U) +#define RTC_CR_WPS(x) (((uint32_t)(((uint32_t)(x)) << RTC_CR_WPS_SHIFT)) & RTC_CR_WPS_MASK) +#define RTC_CR_OSCE_MASK (0x100U) +#define RTC_CR_OSCE_SHIFT (8U) +#define RTC_CR_OSCE(x) (((uint32_t)(((uint32_t)(x)) << RTC_CR_OSCE_SHIFT)) & RTC_CR_OSCE_MASK) +#define RTC_CR_CLKO_MASK (0x200U) +#define RTC_CR_CLKO_SHIFT (9U) +#define RTC_CR_CLKO(x) (((uint32_t)(((uint32_t)(x)) << RTC_CR_CLKO_SHIFT)) & RTC_CR_CLKO_MASK) +#define RTC_CR_SC16P_MASK (0x400U) +#define RTC_CR_SC16P_SHIFT (10U) +#define RTC_CR_SC16P(x) (((uint32_t)(((uint32_t)(x)) << RTC_CR_SC16P_SHIFT)) & RTC_CR_SC16P_MASK) +#define RTC_CR_SC8P_MASK (0x800U) +#define RTC_CR_SC8P_SHIFT (11U) +#define RTC_CR_SC8P(x) (((uint32_t)(((uint32_t)(x)) << RTC_CR_SC8P_SHIFT)) & RTC_CR_SC8P_MASK) +#define RTC_CR_SC4P_MASK (0x1000U) +#define RTC_CR_SC4P_SHIFT (12U) +#define RTC_CR_SC4P(x) (((uint32_t)(((uint32_t)(x)) << RTC_CR_SC4P_SHIFT)) & RTC_CR_SC4P_MASK) +#define RTC_CR_SC2P_MASK (0x2000U) +#define RTC_CR_SC2P_SHIFT (13U) +#define RTC_CR_SC2P(x) (((uint32_t)(((uint32_t)(x)) << RTC_CR_SC2P_SHIFT)) & RTC_CR_SC2P_MASK) + +/*! @name SR - RTC Status Register */ +#define RTC_SR_TIF_MASK (0x1U) +#define RTC_SR_TIF_SHIFT (0U) +#define RTC_SR_TIF(x) (((uint32_t)(((uint32_t)(x)) << RTC_SR_TIF_SHIFT)) & RTC_SR_TIF_MASK) +#define RTC_SR_TOF_MASK (0x2U) +#define RTC_SR_TOF_SHIFT (1U) +#define RTC_SR_TOF(x) (((uint32_t)(((uint32_t)(x)) << RTC_SR_TOF_SHIFT)) & RTC_SR_TOF_MASK) +#define RTC_SR_TAF_MASK (0x4U) +#define RTC_SR_TAF_SHIFT (2U) +#define RTC_SR_TAF(x) (((uint32_t)(((uint32_t)(x)) << RTC_SR_TAF_SHIFT)) & RTC_SR_TAF_MASK) +#define RTC_SR_TCE_MASK (0x10U) +#define RTC_SR_TCE_SHIFT (4U) +#define RTC_SR_TCE(x) (((uint32_t)(((uint32_t)(x)) << RTC_SR_TCE_SHIFT)) & RTC_SR_TCE_MASK) + +/*! @name LR - RTC Lock Register */ +#define RTC_LR_TCL_MASK (0x8U) +#define RTC_LR_TCL_SHIFT (3U) +#define RTC_LR_TCL(x) (((uint32_t)(((uint32_t)(x)) << RTC_LR_TCL_SHIFT)) & RTC_LR_TCL_MASK) +#define RTC_LR_CRL_MASK (0x10U) +#define RTC_LR_CRL_SHIFT (4U) +#define RTC_LR_CRL(x) (((uint32_t)(((uint32_t)(x)) << RTC_LR_CRL_SHIFT)) & RTC_LR_CRL_MASK) +#define RTC_LR_SRL_MASK (0x20U) +#define RTC_LR_SRL_SHIFT (5U) +#define RTC_LR_SRL(x) (((uint32_t)(((uint32_t)(x)) << RTC_LR_SRL_SHIFT)) & RTC_LR_SRL_MASK) +#define RTC_LR_LRL_MASK (0x40U) +#define RTC_LR_LRL_SHIFT (6U) +#define RTC_LR_LRL(x) (((uint32_t)(((uint32_t)(x)) << RTC_LR_LRL_SHIFT)) & RTC_LR_LRL_MASK) + +/*! @name IER - RTC Interrupt Enable Register */ +#define RTC_IER_TIIE_MASK (0x1U) +#define RTC_IER_TIIE_SHIFT (0U) +#define RTC_IER_TIIE(x) (((uint32_t)(((uint32_t)(x)) << RTC_IER_TIIE_SHIFT)) & RTC_IER_TIIE_MASK) +#define RTC_IER_TOIE_MASK (0x2U) +#define RTC_IER_TOIE_SHIFT (1U) +#define RTC_IER_TOIE(x) (((uint32_t)(((uint32_t)(x)) << RTC_IER_TOIE_SHIFT)) & RTC_IER_TOIE_MASK) +#define RTC_IER_TAIE_MASK (0x4U) +#define RTC_IER_TAIE_SHIFT (2U) +#define RTC_IER_TAIE(x) (((uint32_t)(((uint32_t)(x)) << RTC_IER_TAIE_SHIFT)) & RTC_IER_TAIE_MASK) +#define RTC_IER_TSIE_MASK (0x10U) +#define RTC_IER_TSIE_SHIFT (4U) +#define RTC_IER_TSIE(x) (((uint32_t)(((uint32_t)(x)) << RTC_IER_TSIE_SHIFT)) & RTC_IER_TSIE_MASK) +#define RTC_IER_WPON_MASK (0x80U) +#define RTC_IER_WPON_SHIFT (7U) +#define RTC_IER_WPON(x) (((uint32_t)(((uint32_t)(x)) << RTC_IER_WPON_SHIFT)) & RTC_IER_WPON_MASK) + +/*! @name WAR - RTC Write Access Register */ +#define RTC_WAR_TSRW_MASK (0x1U) +#define RTC_WAR_TSRW_SHIFT (0U) +#define RTC_WAR_TSRW(x) (((uint32_t)(((uint32_t)(x)) << RTC_WAR_TSRW_SHIFT)) & RTC_WAR_TSRW_MASK) +#define RTC_WAR_TPRW_MASK (0x2U) +#define RTC_WAR_TPRW_SHIFT (1U) +#define RTC_WAR_TPRW(x) (((uint32_t)(((uint32_t)(x)) << RTC_WAR_TPRW_SHIFT)) & RTC_WAR_TPRW_MASK) +#define RTC_WAR_TARW_MASK (0x4U) +#define RTC_WAR_TARW_SHIFT (2U) +#define RTC_WAR_TARW(x) (((uint32_t)(((uint32_t)(x)) << RTC_WAR_TARW_SHIFT)) & RTC_WAR_TARW_MASK) +#define RTC_WAR_TCRW_MASK (0x8U) +#define RTC_WAR_TCRW_SHIFT (3U) +#define RTC_WAR_TCRW(x) (((uint32_t)(((uint32_t)(x)) << RTC_WAR_TCRW_SHIFT)) & RTC_WAR_TCRW_MASK) +#define RTC_WAR_CRW_MASK (0x10U) +#define RTC_WAR_CRW_SHIFT (4U) +#define RTC_WAR_CRW(x) (((uint32_t)(((uint32_t)(x)) << RTC_WAR_CRW_SHIFT)) & RTC_WAR_CRW_MASK) +#define RTC_WAR_SRW_MASK (0x20U) +#define RTC_WAR_SRW_SHIFT (5U) +#define RTC_WAR_SRW(x) (((uint32_t)(((uint32_t)(x)) << RTC_WAR_SRW_SHIFT)) & RTC_WAR_SRW_MASK) +#define RTC_WAR_LRW_MASK (0x40U) +#define RTC_WAR_LRW_SHIFT (6U) +#define RTC_WAR_LRW(x) (((uint32_t)(((uint32_t)(x)) << RTC_WAR_LRW_SHIFT)) & RTC_WAR_LRW_MASK) +#define RTC_WAR_IERW_MASK (0x80U) +#define RTC_WAR_IERW_SHIFT (7U) +#define RTC_WAR_IERW(x) (((uint32_t)(((uint32_t)(x)) << RTC_WAR_IERW_SHIFT)) & RTC_WAR_IERW_MASK) + +/*! @name RAR - RTC Read Access Register */ +#define RTC_RAR_TSRR_MASK (0x1U) +#define RTC_RAR_TSRR_SHIFT (0U) +#define RTC_RAR_TSRR(x) (((uint32_t)(((uint32_t)(x)) << RTC_RAR_TSRR_SHIFT)) & RTC_RAR_TSRR_MASK) +#define RTC_RAR_TPRR_MASK (0x2U) +#define RTC_RAR_TPRR_SHIFT (1U) +#define RTC_RAR_TPRR(x) (((uint32_t)(((uint32_t)(x)) << RTC_RAR_TPRR_SHIFT)) & RTC_RAR_TPRR_MASK) +#define RTC_RAR_TARR_MASK (0x4U) +#define RTC_RAR_TARR_SHIFT (2U) +#define RTC_RAR_TARR(x) (((uint32_t)(((uint32_t)(x)) << RTC_RAR_TARR_SHIFT)) & RTC_RAR_TARR_MASK) +#define RTC_RAR_TCRR_MASK (0x8U) +#define RTC_RAR_TCRR_SHIFT (3U) +#define RTC_RAR_TCRR(x) (((uint32_t)(((uint32_t)(x)) << RTC_RAR_TCRR_SHIFT)) & RTC_RAR_TCRR_MASK) +#define RTC_RAR_CRR_MASK (0x10U) +#define RTC_RAR_CRR_SHIFT (4U) +#define RTC_RAR_CRR(x) (((uint32_t)(((uint32_t)(x)) << RTC_RAR_CRR_SHIFT)) & RTC_RAR_CRR_MASK) +#define RTC_RAR_SRR_MASK (0x20U) +#define RTC_RAR_SRR_SHIFT (5U) +#define RTC_RAR_SRR(x) (((uint32_t)(((uint32_t)(x)) << RTC_RAR_SRR_SHIFT)) & RTC_RAR_SRR_MASK) +#define RTC_RAR_LRR_MASK (0x40U) +#define RTC_RAR_LRR_SHIFT (6U) +#define RTC_RAR_LRR(x) (((uint32_t)(((uint32_t)(x)) << RTC_RAR_LRR_SHIFT)) & RTC_RAR_LRR_MASK) +#define RTC_RAR_IERR_MASK (0x80U) +#define RTC_RAR_IERR_SHIFT (7U) +#define RTC_RAR_IERR(x) (((uint32_t)(((uint32_t)(x)) << RTC_RAR_IERR_SHIFT)) & RTC_RAR_IERR_MASK) + + +/*! + * @} + */ /* end of group RTC_Register_Masks */ + + +/* RTC - Peripheral instance base addresses */ +/** Peripheral RTC base address */ +#define RTC_BASE (0x4003D000u) +/** Peripheral RTC base pointer */ +#define RTC ((RTC_Type *)RTC_BASE) +/** Array initializer of RTC peripheral base addresses */ +#define RTC_BASE_ADDRS { RTC_BASE } +/** Array initializer of RTC peripheral base pointers */ +#define RTC_BASE_PTRS { RTC } +/** Interrupt vectors for the RTC peripheral type */ +#define RTC_IRQS { RTC_Alarm_IRQn } +#define RTC_SECONDS_IRQS { RTC_Seconds_IRQn } + +/*! + * @} + */ /* end of group RTC_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- SIM Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup SIM_Peripheral_Access_Layer SIM Peripheral Access Layer + * @{ + */ + +/** SIM - Register Layout Typedef */ +typedef struct { + __IO uint32_t SOPT1; /**< System Options Register 1, offset: 0x0 */ + uint8_t RESERVED_0[4096]; + __IO uint32_t SOPT2; /**< System Options Register 2, offset: 0x1004 */ + uint8_t RESERVED_1[8]; + __IO uint32_t SOPT5; /**< System Options Register 5, offset: 0x1010 */ + uint8_t RESERVED_2[4]; + __IO uint32_t SOPT7; /**< System Options Register 7, offset: 0x1018 */ + uint8_t RESERVED_3[4]; + __IO uint32_t SOPT9; /**< System Options Register 9, offset: 0x1020 */ + __I uint32_t SDID; /**< System Device Identification Register, offset: 0x1024 */ + uint8_t RESERVED_4[12]; + __IO uint32_t SCGC4; /**< System Clock Gating Control Register 4, offset: 0x1034 */ + __IO uint32_t SCGC5; /**< System Clock Gating Control Register 5, offset: 0x1038 */ + __IO uint32_t SCGC6; /**< System Clock Gating Control Register 6, offset: 0x103C */ + __IO uint32_t SCGC7; /**< System Clock Gating Control Register 7, offset: 0x1040 */ + __IO uint32_t CLKDIV1; /**< System Clock Divider Register 1, offset: 0x1044 */ + __IO uint32_t CLKDIV2; /**< System Clock Divider Register 2, offset: 0x1048 */ + __IO uint32_t FCFG1; /**< Flash Configuration Register 1, offset: 0x104C */ + __I uint32_t FCFG2; /**< Flash Configuration Register 2, offset: 0x1050 */ + __I uint32_t UIDH; /**< Unique Identification Register High, offset: 0x1054 */ + __I uint32_t UIDMH; /**< Unique Identification Register Mid-High, offset: 0x1058 */ + __I uint32_t UIDML; /**< Unique Identification Register Mid Low, offset: 0x105C */ + __I uint32_t UIDL; /**< Unique Identification Register Low, offset: 0x1060 */ + __IO uint32_t CLKDIV3; /**< System Clock Divider Register 3, offset: 0x1064 */ + uint8_t RESERVED_5[4]; + __IO uint32_t MISCCTRL; /**< Misc Control Register, offset: 0x106C */ + uint8_t RESERVED_6[32]; + __I uint32_t SECKEY0; /**< Secure Key Register 0, offset: 0x1090 */ + __I uint32_t SECKEY1; /**< Secure Key Register 1, offset: 0x1094 */ + __I uint32_t SECKEY2; /**< Secure Key Register 2, offset: 0x1098 */ + __I uint32_t SECKEY3; /**< Secure Key Register 3, offset: 0x109C */ +} SIM_Type; + +/* ---------------------------------------------------------------------------- + -- SIM Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup SIM_Register_Masks SIM Register Masks + * @{ + */ + +/*! @name SOPT1 - System Options Register 1 */ +#define SIM_SOPT1_RAMSIZE_MASK (0xF000U) +#define SIM_SOPT1_RAMSIZE_SHIFT (12U) +#define SIM_SOPT1_RAMSIZE(x) (((uint32_t)(((uint32_t)(x)) << SIM_SOPT1_RAMSIZE_SHIFT)) & SIM_SOPT1_RAMSIZE_MASK) +#define SIM_SOPT1_OSC32KSEL_MASK (0xC0000U) +#define SIM_SOPT1_OSC32KSEL_SHIFT (18U) +#define SIM_SOPT1_OSC32KSEL(x) (((uint32_t)(((uint32_t)(x)) << SIM_SOPT1_OSC32KSEL_SHIFT)) & SIM_SOPT1_OSC32KSEL_MASK) + +/*! @name SOPT2 - System Options Register 2 */ +#define SIM_SOPT2_RTCCLKOUTS_MASK (0x10U) +#define SIM_SOPT2_RTCCLKOUTS_SHIFT (4U) +#define SIM_SOPT2_RTCCLKOUTS(x) (((uint32_t)(((uint32_t)(x)) << SIM_SOPT2_RTCCLKOUTS_SHIFT)) & SIM_SOPT2_RTCCLKOUTS_MASK) +#define SIM_SOPT2_CLKOUT_MASK (0xE0U) +#define SIM_SOPT2_CLKOUT_SHIFT (5U) +#define SIM_SOPT2_CLKOUT(x) (((uint32_t)(((uint32_t)(x)) << SIM_SOPT2_CLKOUT_SHIFT)) & SIM_SOPT2_CLKOUT_MASK) +#define SIM_SOPT2_PLLFLLSEL_MASK (0x30000U) +#define SIM_SOPT2_PLLFLLSEL_SHIFT (16U) +#define SIM_SOPT2_PLLFLLSEL(x) (((uint32_t)(((uint32_t)(x)) << SIM_SOPT2_PLLFLLSEL_SHIFT)) & SIM_SOPT2_PLLFLLSEL_MASK) +#define SIM_SOPT2_USBSRC_MASK (0x40000U) +#define SIM_SOPT2_USBSRC_SHIFT (18U) +#define SIM_SOPT2_USBSRC(x) (((uint32_t)(((uint32_t)(x)) << SIM_SOPT2_USBSRC_SHIFT)) & SIM_SOPT2_USBSRC_MASK) +#define SIM_SOPT2_FLEXIOSRC_MASK (0xC00000U) +#define SIM_SOPT2_FLEXIOSRC_SHIFT (22U) +#define SIM_SOPT2_FLEXIOSRC(x) (((uint32_t)(((uint32_t)(x)) << SIM_SOPT2_FLEXIOSRC_SHIFT)) & SIM_SOPT2_FLEXIOSRC_MASK) +#define SIM_SOPT2_TPMSRC_MASK (0x3000000U) +#define SIM_SOPT2_TPMSRC_SHIFT (24U) +#define SIM_SOPT2_TPMSRC(x) (((uint32_t)(((uint32_t)(x)) << SIM_SOPT2_TPMSRC_SHIFT)) & SIM_SOPT2_TPMSRC_MASK) +#define SIM_SOPT2_LPUARTSRC_MASK (0xC000000U) +#define SIM_SOPT2_LPUARTSRC_SHIFT (26U) +#define SIM_SOPT2_LPUARTSRC(x) (((uint32_t)(((uint32_t)(x)) << SIM_SOPT2_LPUARTSRC_SHIFT)) & SIM_SOPT2_LPUARTSRC_MASK) +#define SIM_SOPT2_EMVSIMSRC_MASK (0xC0000000U) +#define SIM_SOPT2_EMVSIMSRC_SHIFT (30U) +#define SIM_SOPT2_EMVSIMSRC(x) (((uint32_t)(((uint32_t)(x)) << SIM_SOPT2_EMVSIMSRC_SHIFT)) & SIM_SOPT2_EMVSIMSRC_MASK) + +/*! @name SOPT5 - System Options Register 5 */ +#define SIM_SOPT5_LPUART0TXSRC_MASK (0x30000U) +#define SIM_SOPT5_LPUART0TXSRC_SHIFT (16U) +#define SIM_SOPT5_LPUART0TXSRC(x) (((uint32_t)(((uint32_t)(x)) << SIM_SOPT5_LPUART0TXSRC_SHIFT)) & SIM_SOPT5_LPUART0TXSRC_MASK) +#define SIM_SOPT5_LPUART0RXSRC_MASK (0xC0000U) +#define SIM_SOPT5_LPUART0RXSRC_SHIFT (18U) +#define SIM_SOPT5_LPUART0RXSRC(x) (((uint32_t)(((uint32_t)(x)) << SIM_SOPT5_LPUART0RXSRC_SHIFT)) & SIM_SOPT5_LPUART0RXSRC_MASK) +#define SIM_SOPT5_LPUART1TXSRC_MASK (0x300000U) +#define SIM_SOPT5_LPUART1TXSRC_SHIFT (20U) +#define SIM_SOPT5_LPUART1TXSRC(x) (((uint32_t)(((uint32_t)(x)) << SIM_SOPT5_LPUART1TXSRC_SHIFT)) & SIM_SOPT5_LPUART1TXSRC_MASK) +#define SIM_SOPT5_LPUART1RXSRC_MASK (0xC00000U) +#define SIM_SOPT5_LPUART1RXSRC_SHIFT (22U) +#define SIM_SOPT5_LPUART1RXSRC(x) (((uint32_t)(((uint32_t)(x)) << SIM_SOPT5_LPUART1RXSRC_SHIFT)) & SIM_SOPT5_LPUART1RXSRC_MASK) + +/*! @name SOPT7 - System Options Register 7 */ +#define SIM_SOPT7_ADC0TRGSEL_MASK (0xFU) +#define SIM_SOPT7_ADC0TRGSEL_SHIFT (0U) +#define SIM_SOPT7_ADC0TRGSEL(x) (((uint32_t)(((uint32_t)(x)) << SIM_SOPT7_ADC0TRGSEL_SHIFT)) & SIM_SOPT7_ADC0TRGSEL_MASK) +#define SIM_SOPT7_ADC0PRETRGSEL_MASK (0x10U) +#define SIM_SOPT7_ADC0PRETRGSEL_SHIFT (4U) +#define SIM_SOPT7_ADC0PRETRGSEL(x) (((uint32_t)(((uint32_t)(x)) << SIM_SOPT7_ADC0PRETRGSEL_SHIFT)) & SIM_SOPT7_ADC0PRETRGSEL_MASK) + +/*! @name SOPT9 - System Options Register 9 */ +#define SIM_SOPT9_TPM1CH0SRC_MASK (0xC0000U) +#define SIM_SOPT9_TPM1CH0SRC_SHIFT (18U) +#define SIM_SOPT9_TPM1CH0SRC(x) (((uint32_t)(((uint32_t)(x)) << SIM_SOPT9_TPM1CH0SRC_SHIFT)) & SIM_SOPT9_TPM1CH0SRC_MASK) +#define SIM_SOPT9_TPM2CH0SRC_MASK (0x300000U) +#define SIM_SOPT9_TPM2CH0SRC_SHIFT (20U) +#define SIM_SOPT9_TPM2CH0SRC(x) (((uint32_t)(((uint32_t)(x)) << SIM_SOPT9_TPM2CH0SRC_SHIFT)) & SIM_SOPT9_TPM2CH0SRC_MASK) +#define SIM_SOPT9_TPM0CLKSEL_MASK (0x1000000U) +#define SIM_SOPT9_TPM0CLKSEL_SHIFT (24U) +#define SIM_SOPT9_TPM0CLKSEL(x) (((uint32_t)(((uint32_t)(x)) << SIM_SOPT9_TPM0CLKSEL_SHIFT)) & SIM_SOPT9_TPM0CLKSEL_MASK) +#define SIM_SOPT9_TPM1CLKSEL_MASK (0x2000000U) +#define SIM_SOPT9_TPM1CLKSEL_SHIFT (25U) +#define SIM_SOPT9_TPM1CLKSEL(x) (((uint32_t)(((uint32_t)(x)) << SIM_SOPT9_TPM1CLKSEL_SHIFT)) & SIM_SOPT9_TPM1CLKSEL_MASK) +#define SIM_SOPT9_TPM2CLKSEL_MASK (0x4000000U) +#define SIM_SOPT9_TPM2CLKSEL_SHIFT (26U) +#define SIM_SOPT9_TPM2CLKSEL(x) (((uint32_t)(((uint32_t)(x)) << SIM_SOPT9_TPM2CLKSEL_SHIFT)) & SIM_SOPT9_TPM2CLKSEL_MASK) + +/*! @name SDID - System Device Identification Register */ +#define SIM_SDID_PINID_MASK (0xFU) +#define SIM_SDID_PINID_SHIFT (0U) +#define SIM_SDID_PINID(x) (((uint32_t)(((uint32_t)(x)) << SIM_SDID_PINID_SHIFT)) & SIM_SDID_PINID_MASK) +#define SIM_SDID_FAMID_MASK (0x70U) +#define SIM_SDID_FAMID_SHIFT (4U) +#define SIM_SDID_FAMID(x) (((uint32_t)(((uint32_t)(x)) << SIM_SDID_FAMID_SHIFT)) & SIM_SDID_FAMID_MASK) +#define SIM_SDID_DIEID_MASK (0xF80U) +#define SIM_SDID_DIEID_SHIFT (7U) +#define SIM_SDID_DIEID(x) (((uint32_t)(((uint32_t)(x)) << SIM_SDID_DIEID_SHIFT)) & SIM_SDID_DIEID_MASK) +#define SIM_SDID_REVID_MASK (0xF000U) +#define SIM_SDID_REVID_SHIFT (12U) +#define SIM_SDID_REVID(x) (((uint32_t)(((uint32_t)(x)) << SIM_SDID_REVID_SHIFT)) & SIM_SDID_REVID_MASK) +#define SIM_SDID_SUBFAMID_MASK (0xF000000U) +#define SIM_SDID_SUBFAMID_SHIFT (24U) +#define SIM_SDID_SUBFAMID(x) (((uint32_t)(((uint32_t)(x)) << SIM_SDID_SUBFAMID_SHIFT)) & SIM_SDID_SUBFAMID_MASK) +#define SIM_SDID_FAMILYID_MASK (0xF0000000U) +#define SIM_SDID_FAMILYID_SHIFT (28U) +#define SIM_SDID_FAMILYID(x) (((uint32_t)(((uint32_t)(x)) << SIM_SDID_FAMILYID_SHIFT)) & SIM_SDID_FAMILYID_MASK) + +/*! @name SCGC4 - System Clock Gating Control Register 4 */ +#define SIM_SCGC4_EWM_MASK (0x2U) +#define SIM_SCGC4_EWM_SHIFT (1U) +#define SIM_SCGC4_EWM(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC4_EWM_SHIFT)) & SIM_SCGC4_EWM_MASK) +#define SIM_SCGC4_I2C0_MASK (0x40U) +#define SIM_SCGC4_I2C0_SHIFT (6U) +#define SIM_SCGC4_I2C0(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC4_I2C0_SHIFT)) & SIM_SCGC4_I2C0_MASK) +#define SIM_SCGC4_I2C1_MASK (0x80U) +#define SIM_SCGC4_I2C1_SHIFT (7U) +#define SIM_SCGC4_I2C1(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC4_I2C1_SHIFT)) & SIM_SCGC4_I2C1_MASK) +#define SIM_SCGC4_USBOTG_MASK (0x40000U) +#define SIM_SCGC4_USBOTG_SHIFT (18U) +#define SIM_SCGC4_USBOTG(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC4_USBOTG_SHIFT)) & SIM_SCGC4_USBOTG_MASK) +#define SIM_SCGC4_CMP_MASK (0x80000U) +#define SIM_SCGC4_CMP_SHIFT (19U) +#define SIM_SCGC4_CMP(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC4_CMP_SHIFT)) & SIM_SCGC4_CMP_MASK) +#define SIM_SCGC4_VREF_MASK (0x100000U) +#define SIM_SCGC4_VREF_SHIFT (20U) +#define SIM_SCGC4_VREF(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC4_VREF_SHIFT)) & SIM_SCGC4_VREF_MASK) + +/*! @name SCGC5 - System Clock Gating Control Register 5 */ +#define SIM_SCGC5_LPTMR0_MASK (0x1U) +#define SIM_SCGC5_LPTMR0_SHIFT (0U) +#define SIM_SCGC5_LPTMR0(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC5_LPTMR0_SHIFT)) & SIM_SCGC5_LPTMR0_MASK) +#define SIM_SCGC5_SECREG_MASK (0x8U) +#define SIM_SCGC5_SECREG_SHIFT (3U) +#define SIM_SCGC5_SECREG(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC5_SECREG_SHIFT)) & SIM_SCGC5_SECREG_MASK) +#define SIM_SCGC5_LPTMR1_MASK (0x10U) +#define SIM_SCGC5_LPTMR1_SHIFT (4U) +#define SIM_SCGC5_LPTMR1(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC5_LPTMR1_SHIFT)) & SIM_SCGC5_LPTMR1_MASK) +#define SIM_SCGC5_TSI_MASK (0x20U) +#define SIM_SCGC5_TSI_SHIFT (5U) +#define SIM_SCGC5_TSI(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC5_TSI_SHIFT)) & SIM_SCGC5_TSI_MASK) +#define SIM_SCGC5_PTA_MASK (0x200U) +#define SIM_SCGC5_PTA_SHIFT (9U) +#define SIM_SCGC5_PTA(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC5_PTA_SHIFT)) & SIM_SCGC5_PTA_MASK) +#define SIM_SCGC5_PTB_MASK (0x400U) +#define SIM_SCGC5_PTB_SHIFT (10U) +#define SIM_SCGC5_PTB(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC5_PTB_SHIFT)) & SIM_SCGC5_PTB_MASK) +#define SIM_SCGC5_PTC_MASK (0x800U) +#define SIM_SCGC5_PTC_SHIFT (11U) +#define SIM_SCGC5_PTC(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC5_PTC_SHIFT)) & SIM_SCGC5_PTC_MASK) +#define SIM_SCGC5_PTD_MASK (0x1000U) +#define SIM_SCGC5_PTD_SHIFT (12U) +#define SIM_SCGC5_PTD(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC5_PTD_SHIFT)) & SIM_SCGC5_PTD_MASK) +#define SIM_SCGC5_PTE_MASK (0x2000U) +#define SIM_SCGC5_PTE_SHIFT (13U) +#define SIM_SCGC5_PTE(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC5_PTE_SHIFT)) & SIM_SCGC5_PTE_MASK) +#define SIM_SCGC5_EMVSIM0_MASK (0x4000U) +#define SIM_SCGC5_EMVSIM0_SHIFT (14U) +#define SIM_SCGC5_EMVSIM0(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC5_EMVSIM0_SHIFT)) & SIM_SCGC5_EMVSIM0_MASK) +#define SIM_SCGC5_EMVSIM1_MASK (0x8000U) +#define SIM_SCGC5_EMVSIM1_SHIFT (15U) +#define SIM_SCGC5_EMVSIM1(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC5_EMVSIM1_SHIFT)) & SIM_SCGC5_EMVSIM1_MASK) +#define SIM_SCGC5_LTC_MASK (0x20000U) +#define SIM_SCGC5_LTC_SHIFT (17U) +#define SIM_SCGC5_LTC(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC5_LTC_SHIFT)) & SIM_SCGC5_LTC_MASK) +#define SIM_SCGC5_LPUART0_MASK (0x100000U) +#define SIM_SCGC5_LPUART0_SHIFT (20U) +#define SIM_SCGC5_LPUART0(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC5_LPUART0_SHIFT)) & SIM_SCGC5_LPUART0_MASK) +#define SIM_SCGC5_LPUART1_MASK (0x200000U) +#define SIM_SCGC5_LPUART1_SHIFT (21U) +#define SIM_SCGC5_LPUART1(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC5_LPUART1_SHIFT)) & SIM_SCGC5_LPUART1_MASK) +#define SIM_SCGC5_LPUART2_MASK (0x400000U) +#define SIM_SCGC5_LPUART2_SHIFT (22U) +#define SIM_SCGC5_LPUART2(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC5_LPUART2_SHIFT)) & SIM_SCGC5_LPUART2_MASK) +#define SIM_SCGC5_QSPI0_MASK (0x4000000U) +#define SIM_SCGC5_QSPI0_SHIFT (26U) +#define SIM_SCGC5_QSPI0(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC5_QSPI0_SHIFT)) & SIM_SCGC5_QSPI0_MASK) +#define SIM_SCGC5_FLEXIO0_MASK (0x80000000U) +#define SIM_SCGC5_FLEXIO0_SHIFT (31U) +#define SIM_SCGC5_FLEXIO0(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC5_FLEXIO0_SHIFT)) & SIM_SCGC5_FLEXIO0_MASK) + +/*! @name SCGC6 - System Clock Gating Control Register 6 */ +#define SIM_SCGC6_NVM_MASK (0x1U) +#define SIM_SCGC6_NVM_SHIFT (0U) +#define SIM_SCGC6_NVM(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC6_NVM_SHIFT)) & SIM_SCGC6_NVM_MASK) +#define SIM_SCGC6_DMACHMUX_MASK (0x2U) +#define SIM_SCGC6_DMACHMUX_SHIFT (1U) +#define SIM_SCGC6_DMACHMUX(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC6_DMACHMUX_SHIFT)) & SIM_SCGC6_DMACHMUX_MASK) +#define SIM_SCGC6_INTMUX0_MASK (0x10U) +#define SIM_SCGC6_INTMUX0_SHIFT (4U) +#define SIM_SCGC6_INTMUX0(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC6_INTMUX0_SHIFT)) & SIM_SCGC6_INTMUX0_MASK) +#define SIM_SCGC6_TRNG_MASK (0x20U) +#define SIM_SCGC6_TRNG_SHIFT (5U) +#define SIM_SCGC6_TRNG(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC6_TRNG_SHIFT)) & SIM_SCGC6_TRNG_MASK) +#define SIM_SCGC6_SPI0_MASK (0x1000U) +#define SIM_SCGC6_SPI0_SHIFT (12U) +#define SIM_SCGC6_SPI0(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC6_SPI0_SHIFT)) & SIM_SCGC6_SPI0_MASK) +#define SIM_SCGC6_SPI1_MASK (0x2000U) +#define SIM_SCGC6_SPI1_SHIFT (13U) +#define SIM_SCGC6_SPI1(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC6_SPI1_SHIFT)) & SIM_SCGC6_SPI1_MASK) +#define SIM_SCGC6_CRC_MASK (0x40000U) +#define SIM_SCGC6_CRC_SHIFT (18U) +#define SIM_SCGC6_CRC(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC6_CRC_SHIFT)) & SIM_SCGC6_CRC_MASK) +#define SIM_SCGC6_PIT0_MASK (0x800000U) +#define SIM_SCGC6_PIT0_SHIFT (23U) +#define SIM_SCGC6_PIT0(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC6_PIT0_SHIFT)) & SIM_SCGC6_PIT0_MASK) +#define SIM_SCGC6_TPM0_MASK (0x1000000U) +#define SIM_SCGC6_TPM0_SHIFT (24U) +#define SIM_SCGC6_TPM0(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC6_TPM0_SHIFT)) & SIM_SCGC6_TPM0_MASK) +#define SIM_SCGC6_TPM1_MASK (0x2000000U) +#define SIM_SCGC6_TPM1_SHIFT (25U) +#define SIM_SCGC6_TPM1(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC6_TPM1_SHIFT)) & SIM_SCGC6_TPM1_MASK) +#define SIM_SCGC6_TPM2_MASK (0x4000000U) +#define SIM_SCGC6_TPM2_SHIFT (26U) +#define SIM_SCGC6_TPM2(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC6_TPM2_SHIFT)) & SIM_SCGC6_TPM2_MASK) +#define SIM_SCGC6_ADC0_MASK (0x8000000U) +#define SIM_SCGC6_ADC0_SHIFT (27U) +#define SIM_SCGC6_ADC0(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC6_ADC0_SHIFT)) & SIM_SCGC6_ADC0_MASK) +#define SIM_SCGC6_RTC_MASK (0x20000000U) +#define SIM_SCGC6_RTC_SHIFT (29U) +#define SIM_SCGC6_RTC(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC6_RTC_SHIFT)) & SIM_SCGC6_RTC_MASK) +#define SIM_SCGC6_RTC_RF_MASK (0x40000000U) +#define SIM_SCGC6_RTC_RF_SHIFT (30U) +#define SIM_SCGC6_RTC_RF(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC6_RTC_RF_SHIFT)) & SIM_SCGC6_RTC_RF_MASK) +#define SIM_SCGC6_DAC0_MASK (0x80000000U) +#define SIM_SCGC6_DAC0_SHIFT (31U) +#define SIM_SCGC6_DAC0(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC6_DAC0_SHIFT)) & SIM_SCGC6_DAC0_MASK) + +/*! @name SCGC7 - System Clock Gating Control Register 7 */ +#define SIM_SCGC7_DMA_MASK (0x2U) +#define SIM_SCGC7_DMA_SHIFT (1U) +#define SIM_SCGC7_DMA(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC7_DMA_SHIFT)) & SIM_SCGC7_DMA_MASK) +#define SIM_SCGC7_MPU_MASK (0x4U) +#define SIM_SCGC7_MPU_SHIFT (2U) +#define SIM_SCGC7_MPU(x) (((uint32_t)(((uint32_t)(x)) << SIM_SCGC7_MPU_SHIFT)) & SIM_SCGC7_MPU_MASK) + +/*! @name CLKDIV1 - System Clock Divider Register 1 */ +#define SIM_CLKDIV1_OUTDIV5_MASK (0xF000U) +#define SIM_CLKDIV1_OUTDIV5_SHIFT (12U) +#define SIM_CLKDIV1_OUTDIV5(x) (((uint32_t)(((uint32_t)(x)) << SIM_CLKDIV1_OUTDIV5_SHIFT)) & SIM_CLKDIV1_OUTDIV5_MASK) +#define SIM_CLKDIV1_OUTDIV4_MASK (0xF0000U) +#define SIM_CLKDIV1_OUTDIV4_SHIFT (16U) +#define SIM_CLKDIV1_OUTDIV4(x) (((uint32_t)(((uint32_t)(x)) << SIM_CLKDIV1_OUTDIV4_SHIFT)) & SIM_CLKDIV1_OUTDIV4_MASK) +#define SIM_CLKDIV1_OUTDIV2_MASK (0xF000000U) +#define SIM_CLKDIV1_OUTDIV2_SHIFT (24U) +#define SIM_CLKDIV1_OUTDIV2(x) (((uint32_t)(((uint32_t)(x)) << SIM_CLKDIV1_OUTDIV2_SHIFT)) & SIM_CLKDIV1_OUTDIV2_MASK) +#define SIM_CLKDIV1_OUTDIV1_MASK (0xF0000000U) +#define SIM_CLKDIV1_OUTDIV1_SHIFT (28U) +#define SIM_CLKDIV1_OUTDIV1(x) (((uint32_t)(((uint32_t)(x)) << SIM_CLKDIV1_OUTDIV1_SHIFT)) & SIM_CLKDIV1_OUTDIV1_MASK) + +/*! @name CLKDIV2 - System Clock Divider Register 2 */ +#define SIM_CLKDIV2_USBFRAC_MASK (0x1U) +#define SIM_CLKDIV2_USBFRAC_SHIFT (0U) +#define SIM_CLKDIV2_USBFRAC(x) (((uint32_t)(((uint32_t)(x)) << SIM_CLKDIV2_USBFRAC_SHIFT)) & SIM_CLKDIV2_USBFRAC_MASK) +#define SIM_CLKDIV2_USBDIV_MASK (0xEU) +#define SIM_CLKDIV2_USBDIV_SHIFT (1U) +#define SIM_CLKDIV2_USBDIV(x) (((uint32_t)(((uint32_t)(x)) << SIM_CLKDIV2_USBDIV_SHIFT)) & SIM_CLKDIV2_USBDIV_MASK) + +/*! @name FCFG1 - Flash Configuration Register 1 */ +#define SIM_FCFG1_FLASHDIS_MASK (0x1U) +#define SIM_FCFG1_FLASHDIS_SHIFT (0U) +#define SIM_FCFG1_FLASHDIS(x) (((uint32_t)(((uint32_t)(x)) << SIM_FCFG1_FLASHDIS_SHIFT)) & SIM_FCFG1_FLASHDIS_MASK) +#define SIM_FCFG1_FLASHDOZE_MASK (0x2U) +#define SIM_FCFG1_FLASHDOZE_SHIFT (1U) +#define SIM_FCFG1_FLASHDOZE(x) (((uint32_t)(((uint32_t)(x)) << SIM_FCFG1_FLASHDOZE_SHIFT)) & SIM_FCFG1_FLASHDOZE_MASK) +#define SIM_FCFG1_PFSIZE_MASK (0xF000000U) +#define SIM_FCFG1_PFSIZE_SHIFT (24U) +#define SIM_FCFG1_PFSIZE(x) (((uint32_t)(((uint32_t)(x)) << SIM_FCFG1_PFSIZE_SHIFT)) & SIM_FCFG1_PFSIZE_MASK) + +/*! @name FCFG2 - Flash Configuration Register 2 */ +#define SIM_FCFG2_MAXADDR0_MASK (0x7F000000U) +#define SIM_FCFG2_MAXADDR0_SHIFT (24U) +#define SIM_FCFG2_MAXADDR0(x) (((uint32_t)(((uint32_t)(x)) << SIM_FCFG2_MAXADDR0_SHIFT)) & SIM_FCFG2_MAXADDR0_MASK) + +/*! @name UIDH - Unique Identification Register High */ +#define SIM_UIDH_UID_MASK (0xFFFFFFFFU) +#define SIM_UIDH_UID_SHIFT (0U) +#define SIM_UIDH_UID(x) (((uint32_t)(((uint32_t)(x)) << SIM_UIDH_UID_SHIFT)) & SIM_UIDH_UID_MASK) + +/*! @name UIDMH - Unique Identification Register Mid-High */ +#define SIM_UIDMH_UID_MASK (0xFFFFFFFFU) +#define SIM_UIDMH_UID_SHIFT (0U) +#define SIM_UIDMH_UID(x) (((uint32_t)(((uint32_t)(x)) << SIM_UIDMH_UID_SHIFT)) & SIM_UIDMH_UID_MASK) + +/*! @name UIDML - Unique Identification Register Mid Low */ +#define SIM_UIDML_UID_MASK (0xFFFFFFFFU) +#define SIM_UIDML_UID_SHIFT (0U) +#define SIM_UIDML_UID(x) (((uint32_t)(((uint32_t)(x)) << SIM_UIDML_UID_SHIFT)) & SIM_UIDML_UID_MASK) + +/*! @name UIDL - Unique Identification Register Low */ +#define SIM_UIDL_UID_MASK (0xFFFFFFFFU) +#define SIM_UIDL_UID_SHIFT (0U) +#define SIM_UIDL_UID(x) (((uint32_t)(((uint32_t)(x)) << SIM_UIDL_UID_SHIFT)) & SIM_UIDL_UID_MASK) + +/*! @name CLKDIV3 - System Clock Divider Register 3 */ +#define SIM_CLKDIV3_PLLFLLFRAC_MASK (0x1U) +#define SIM_CLKDIV3_PLLFLLFRAC_SHIFT (0U) +#define SIM_CLKDIV3_PLLFLLFRAC(x) (((uint32_t)(((uint32_t)(x)) << SIM_CLKDIV3_PLLFLLFRAC_SHIFT)) & SIM_CLKDIV3_PLLFLLFRAC_MASK) +#define SIM_CLKDIV3_PLLFLLDIV_MASK (0xEU) +#define SIM_CLKDIV3_PLLFLLDIV_SHIFT (1U) +#define SIM_CLKDIV3_PLLFLLDIV(x) (((uint32_t)(((uint32_t)(x)) << SIM_CLKDIV3_PLLFLLDIV_SHIFT)) & SIM_CLKDIV3_PLLFLLDIV_MASK) + +/*! @name MISCCTRL - Misc Control Register */ +#define SIM_MISCCTRL_DMAINTSEL0_MASK (0x1U) +#define SIM_MISCCTRL_DMAINTSEL0_SHIFT (0U) +#define SIM_MISCCTRL_DMAINTSEL0(x) (((uint32_t)(((uint32_t)(x)) << SIM_MISCCTRL_DMAINTSEL0_SHIFT)) & SIM_MISCCTRL_DMAINTSEL0_MASK) +#define SIM_MISCCTRL_DMAINTSEL1_MASK (0x2U) +#define SIM_MISCCTRL_DMAINTSEL1_SHIFT (1U) +#define SIM_MISCCTRL_DMAINTSEL1(x) (((uint32_t)(((uint32_t)(x)) << SIM_MISCCTRL_DMAINTSEL1_SHIFT)) & SIM_MISCCTRL_DMAINTSEL1_MASK) +#define SIM_MISCCTRL_DMAINTSEL2_MASK (0x4U) +#define SIM_MISCCTRL_DMAINTSEL2_SHIFT (2U) +#define SIM_MISCCTRL_DMAINTSEL2(x) (((uint32_t)(((uint32_t)(x)) << SIM_MISCCTRL_DMAINTSEL2_SHIFT)) & SIM_MISCCTRL_DMAINTSEL2_MASK) +#define SIM_MISCCTRL_DMAINTSEL3_MASK (0x8U) +#define SIM_MISCCTRL_DMAINTSEL3_SHIFT (3U) +#define SIM_MISCCTRL_DMAINTSEL3(x) (((uint32_t)(((uint32_t)(x)) << SIM_MISCCTRL_DMAINTSEL3_SHIFT)) & SIM_MISCCTRL_DMAINTSEL3_MASK) +#define SIM_MISCCTRL_LTCEN_MASK (0x10000U) +#define SIM_MISCCTRL_LTCEN_SHIFT (16U) +#define SIM_MISCCTRL_LTCEN(x) (((uint32_t)(((uint32_t)(x)) << SIM_MISCCTRL_LTCEN_SHIFT)) & SIM_MISCCTRL_LTCEN_MASK) + +/*! @name SECKEY0 - Secure Key Register 0 */ +#define SIM_SECKEY0_SECKEY_MASK (0xFFFFFFFFU) +#define SIM_SECKEY0_SECKEY_SHIFT (0U) +#define SIM_SECKEY0_SECKEY(x) (((uint32_t)(((uint32_t)(x)) << SIM_SECKEY0_SECKEY_SHIFT)) & SIM_SECKEY0_SECKEY_MASK) + +/*! @name SECKEY1 - Secure Key Register 1 */ +#define SIM_SECKEY1_SECKEY_MASK (0xFFFFFFFFU) +#define SIM_SECKEY1_SECKEY_SHIFT (0U) +#define SIM_SECKEY1_SECKEY(x) (((uint32_t)(((uint32_t)(x)) << SIM_SECKEY1_SECKEY_SHIFT)) & SIM_SECKEY1_SECKEY_MASK) + +/*! @name SECKEY2 - Secure Key Register 2 */ +#define SIM_SECKEY2_SECKEY_MASK (0xFFFFFFFFU) +#define SIM_SECKEY2_SECKEY_SHIFT (0U) +#define SIM_SECKEY2_SECKEY(x) (((uint32_t)(((uint32_t)(x)) << SIM_SECKEY2_SECKEY_SHIFT)) & SIM_SECKEY2_SECKEY_MASK) + +/*! @name SECKEY3 - Secure Key Register 3 */ +#define SIM_SECKEY3_SECKEY_MASK (0xFFFFFFFFU) +#define SIM_SECKEY3_SECKEY_SHIFT (0U) +#define SIM_SECKEY3_SECKEY(x) (((uint32_t)(((uint32_t)(x)) << SIM_SECKEY3_SECKEY_SHIFT)) & SIM_SECKEY3_SECKEY_MASK) + + +/*! + * @} + */ /* end of group SIM_Register_Masks */ + + +/* SIM - Peripheral instance base addresses */ +/** Peripheral SIM base address */ +#define SIM_BASE (0x40047000u) +/** Peripheral SIM base pointer */ +#define SIM ((SIM_Type *)SIM_BASE) +/** Array initializer of SIM peripheral base addresses */ +#define SIM_BASE_ADDRS { SIM_BASE } +/** Array initializer of SIM peripheral base pointers */ +#define SIM_BASE_PTRS { SIM } + +/*! + * @} + */ /* end of group SIM_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- SMC Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup SMC_Peripheral_Access_Layer SMC Peripheral Access Layer + * @{ + */ + +/** SMC - Register Layout Typedef */ +typedef struct { + __IO uint8_t PMPROT; /**< Power Mode Protection register, offset: 0x0 */ + __IO uint8_t PMCTRL; /**< Power Mode Control register, offset: 0x1 */ + __IO uint8_t STOPCTRL; /**< Stop Control Register, offset: 0x2 */ + __I uint8_t PMSTAT; /**< Power Mode Status register, offset: 0x3 */ +} SMC_Type; + +/* ---------------------------------------------------------------------------- + -- SMC Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup SMC_Register_Masks SMC Register Masks + * @{ + */ + +/*! @name PMPROT - Power Mode Protection register */ +#define SMC_PMPROT_AVLLS_MASK (0x2U) +#define SMC_PMPROT_AVLLS_SHIFT (1U) +#define SMC_PMPROT_AVLLS(x) (((uint8_t)(((uint8_t)(x)) << SMC_PMPROT_AVLLS_SHIFT)) & SMC_PMPROT_AVLLS_MASK) +#define SMC_PMPROT_ALLS_MASK (0x8U) +#define SMC_PMPROT_ALLS_SHIFT (3U) +#define SMC_PMPROT_ALLS(x) (((uint8_t)(((uint8_t)(x)) << SMC_PMPROT_ALLS_SHIFT)) & SMC_PMPROT_ALLS_MASK) +#define SMC_PMPROT_AVLP_MASK (0x20U) +#define SMC_PMPROT_AVLP_SHIFT (5U) +#define SMC_PMPROT_AVLP(x) (((uint8_t)(((uint8_t)(x)) << SMC_PMPROT_AVLP_SHIFT)) & SMC_PMPROT_AVLP_MASK) +#define SMC_PMPROT_AHSRUN_MASK (0x80U) +#define SMC_PMPROT_AHSRUN_SHIFT (7U) +#define SMC_PMPROT_AHSRUN(x) (((uint8_t)(((uint8_t)(x)) << SMC_PMPROT_AHSRUN_SHIFT)) & SMC_PMPROT_AHSRUN_MASK) + +/*! @name PMCTRL - Power Mode Control register */ +#define SMC_PMCTRL_STOPM_MASK (0x7U) +#define SMC_PMCTRL_STOPM_SHIFT (0U) +#define SMC_PMCTRL_STOPM(x) (((uint8_t)(((uint8_t)(x)) << SMC_PMCTRL_STOPM_SHIFT)) & SMC_PMCTRL_STOPM_MASK) +#define SMC_PMCTRL_STOPA_MASK (0x8U) +#define SMC_PMCTRL_STOPA_SHIFT (3U) +#define SMC_PMCTRL_STOPA(x) (((uint8_t)(((uint8_t)(x)) << SMC_PMCTRL_STOPA_SHIFT)) & SMC_PMCTRL_STOPA_MASK) +#define SMC_PMCTRL_RUNM_MASK (0x60U) +#define SMC_PMCTRL_RUNM_SHIFT (5U) +#define SMC_PMCTRL_RUNM(x) (((uint8_t)(((uint8_t)(x)) << SMC_PMCTRL_RUNM_SHIFT)) & SMC_PMCTRL_RUNM_MASK) + +/*! @name STOPCTRL - Stop Control Register */ +#define SMC_STOPCTRL_LLSM_MASK (0x7U) +#define SMC_STOPCTRL_LLSM_SHIFT (0U) +#define SMC_STOPCTRL_LLSM(x) (((uint8_t)(((uint8_t)(x)) << SMC_STOPCTRL_LLSM_SHIFT)) & SMC_STOPCTRL_LLSM_MASK) +#define SMC_STOPCTRL_LPOPO_MASK (0x8U) +#define SMC_STOPCTRL_LPOPO_SHIFT (3U) +#define SMC_STOPCTRL_LPOPO(x) (((uint8_t)(((uint8_t)(x)) << SMC_STOPCTRL_LPOPO_SHIFT)) & SMC_STOPCTRL_LPOPO_MASK) +#define SMC_STOPCTRL_PORPO_MASK (0x20U) +#define SMC_STOPCTRL_PORPO_SHIFT (5U) +#define SMC_STOPCTRL_PORPO(x) (((uint8_t)(((uint8_t)(x)) << SMC_STOPCTRL_PORPO_SHIFT)) & SMC_STOPCTRL_PORPO_MASK) +#define SMC_STOPCTRL_PSTOPO_MASK (0xC0U) +#define SMC_STOPCTRL_PSTOPO_SHIFT (6U) +#define SMC_STOPCTRL_PSTOPO(x) (((uint8_t)(((uint8_t)(x)) << SMC_STOPCTRL_PSTOPO_SHIFT)) & SMC_STOPCTRL_PSTOPO_MASK) + +/*! @name PMSTAT - Power Mode Status register */ +#define SMC_PMSTAT_PMSTAT_MASK (0xFFU) +#define SMC_PMSTAT_PMSTAT_SHIFT (0U) +#define SMC_PMSTAT_PMSTAT(x) (((uint8_t)(((uint8_t)(x)) << SMC_PMSTAT_PMSTAT_SHIFT)) & SMC_PMSTAT_PMSTAT_MASK) + + +/*! + * @} + */ /* end of group SMC_Register_Masks */ + + +/* SMC - Peripheral instance base addresses */ +/** Peripheral SMC base address */ +#define SMC_BASE (0x4007E000u) +/** Peripheral SMC base pointer */ +#define SMC ((SMC_Type *)SMC_BASE) +/** Array initializer of SMC peripheral base addresses */ +#define SMC_BASE_ADDRS { SMC_BASE } +/** Array initializer of SMC peripheral base pointers */ +#define SMC_BASE_PTRS { SMC } + +/*! + * @} + */ /* end of group SMC_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- SPI Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup SPI_Peripheral_Access_Layer SPI Peripheral Access Layer + * @{ + */ + +/** SPI - Register Layout Typedef */ +typedef struct { + __IO uint32_t MCR; /**< Module Configuration Register, offset: 0x0 */ + uint8_t RESERVED_0[4]; + __IO uint32_t TCR; /**< Transfer Count Register, offset: 0x8 */ + union { /* offset: 0xC */ + __IO uint32_t CTAR[2]; /**< Clock and Transfer Attributes Register (In Master Mode), array offset: 0xC, array step: 0x4 */ + __IO uint32_t CTAR_SLAVE[1]; /**< Clock and Transfer Attributes Register (In Slave Mode), array offset: 0xC, array step: 0x4 */ + }; + uint8_t RESERVED_1[24]; + __IO uint32_t SR; /**< Status Register, offset: 0x2C */ + __IO uint32_t RSER; /**< DMA/Interrupt Request Select and Enable Register, offset: 0x30 */ + union { /* offset: 0x34 */ + __IO uint32_t PUSHR; /**< PUSH TX FIFO Register In Master Mode, offset: 0x34 */ + __IO uint32_t PUSHR_SLAVE; /**< PUSH TX FIFO Register In Slave Mode, offset: 0x34 */ + }; + __I uint32_t POPR; /**< POP RX FIFO Register, offset: 0x38 */ + __I uint32_t TXFR0; /**< Transmit FIFO Registers, offset: 0x3C */ + __I uint32_t TXFR1; /**< Transmit FIFO Registers, offset: 0x40 */ + __I uint32_t TXFR2; /**< Transmit FIFO Registers, offset: 0x44 */ + __I uint32_t TXFR3; /**< Transmit FIFO Registers, offset: 0x48 */ + uint8_t RESERVED_2[48]; + __I uint32_t RXFR0; /**< Receive FIFO Registers, offset: 0x7C */ + __I uint32_t RXFR1; /**< Receive FIFO Registers, offset: 0x80 */ + __I uint32_t RXFR2; /**< Receive FIFO Registers, offset: 0x84 */ + __I uint32_t RXFR3; /**< Receive FIFO Registers, offset: 0x88 */ +} SPI_Type; + +/* ---------------------------------------------------------------------------- + -- SPI Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup SPI_Register_Masks SPI Register Masks + * @{ + */ + +/*! @name MCR - Module Configuration Register */ +#define SPI_MCR_HALT_MASK (0x1U) +#define SPI_MCR_HALT_SHIFT (0U) +#define SPI_MCR_HALT(x) (((uint32_t)(((uint32_t)(x)) << SPI_MCR_HALT_SHIFT)) & SPI_MCR_HALT_MASK) +#define SPI_MCR_SMPL_PT_MASK (0x300U) +#define SPI_MCR_SMPL_PT_SHIFT (8U) +#define SPI_MCR_SMPL_PT(x) (((uint32_t)(((uint32_t)(x)) << SPI_MCR_SMPL_PT_SHIFT)) & SPI_MCR_SMPL_PT_MASK) +#define SPI_MCR_CLR_RXF_MASK (0x400U) +#define SPI_MCR_CLR_RXF_SHIFT (10U) +#define SPI_MCR_CLR_RXF(x) (((uint32_t)(((uint32_t)(x)) << SPI_MCR_CLR_RXF_SHIFT)) & SPI_MCR_CLR_RXF_MASK) +#define SPI_MCR_CLR_TXF_MASK (0x800U) +#define SPI_MCR_CLR_TXF_SHIFT (11U) +#define SPI_MCR_CLR_TXF(x) (((uint32_t)(((uint32_t)(x)) << SPI_MCR_CLR_TXF_SHIFT)) & SPI_MCR_CLR_TXF_MASK) +#define SPI_MCR_DIS_RXF_MASK (0x1000U) +#define SPI_MCR_DIS_RXF_SHIFT (12U) +#define SPI_MCR_DIS_RXF(x) (((uint32_t)(((uint32_t)(x)) << SPI_MCR_DIS_RXF_SHIFT)) & SPI_MCR_DIS_RXF_MASK) +#define SPI_MCR_DIS_TXF_MASK (0x2000U) +#define SPI_MCR_DIS_TXF_SHIFT (13U) +#define SPI_MCR_DIS_TXF(x) (((uint32_t)(((uint32_t)(x)) << SPI_MCR_DIS_TXF_SHIFT)) & SPI_MCR_DIS_TXF_MASK) +#define SPI_MCR_MDIS_MASK (0x4000U) +#define SPI_MCR_MDIS_SHIFT (14U) +#define SPI_MCR_MDIS(x) (((uint32_t)(((uint32_t)(x)) << SPI_MCR_MDIS_SHIFT)) & SPI_MCR_MDIS_MASK) +#define SPI_MCR_DOZE_MASK (0x8000U) +#define SPI_MCR_DOZE_SHIFT (15U) +#define SPI_MCR_DOZE(x) (((uint32_t)(((uint32_t)(x)) << SPI_MCR_DOZE_SHIFT)) & SPI_MCR_DOZE_MASK) +#define SPI_MCR_PCSIS_MASK (0x3F0000U) +#define SPI_MCR_PCSIS_SHIFT (16U) +#define SPI_MCR_PCSIS(x) (((uint32_t)(((uint32_t)(x)) << SPI_MCR_PCSIS_SHIFT)) & SPI_MCR_PCSIS_MASK) +#define SPI_MCR_ROOE_MASK (0x1000000U) +#define SPI_MCR_ROOE_SHIFT (24U) +#define SPI_MCR_ROOE(x) (((uint32_t)(((uint32_t)(x)) << SPI_MCR_ROOE_SHIFT)) & SPI_MCR_ROOE_MASK) +#define SPI_MCR_PCSSE_MASK (0x2000000U) +#define SPI_MCR_PCSSE_SHIFT (25U) +#define SPI_MCR_PCSSE(x) (((uint32_t)(((uint32_t)(x)) << SPI_MCR_PCSSE_SHIFT)) & SPI_MCR_PCSSE_MASK) +#define SPI_MCR_MTFE_MASK (0x4000000U) +#define SPI_MCR_MTFE_SHIFT (26U) +#define SPI_MCR_MTFE(x) (((uint32_t)(((uint32_t)(x)) << SPI_MCR_MTFE_SHIFT)) & SPI_MCR_MTFE_MASK) +#define SPI_MCR_FRZ_MASK (0x8000000U) +#define SPI_MCR_FRZ_SHIFT (27U) +#define SPI_MCR_FRZ(x) (((uint32_t)(((uint32_t)(x)) << SPI_MCR_FRZ_SHIFT)) & SPI_MCR_FRZ_MASK) +#define SPI_MCR_DCONF_MASK (0x30000000U) +#define SPI_MCR_DCONF_SHIFT (28U) +#define SPI_MCR_DCONF(x) (((uint32_t)(((uint32_t)(x)) << SPI_MCR_DCONF_SHIFT)) & SPI_MCR_DCONF_MASK) +#define SPI_MCR_CONT_SCKE_MASK (0x40000000U) +#define SPI_MCR_CONT_SCKE_SHIFT (30U) +#define SPI_MCR_CONT_SCKE(x) (((uint32_t)(((uint32_t)(x)) << SPI_MCR_CONT_SCKE_SHIFT)) & SPI_MCR_CONT_SCKE_MASK) +#define SPI_MCR_MSTR_MASK (0x80000000U) +#define SPI_MCR_MSTR_SHIFT (31U) +#define SPI_MCR_MSTR(x) (((uint32_t)(((uint32_t)(x)) << SPI_MCR_MSTR_SHIFT)) & SPI_MCR_MSTR_MASK) + +/*! @name TCR - Transfer Count Register */ +#define SPI_TCR_SPI_TCNT_MASK (0xFFFF0000U) +#define SPI_TCR_SPI_TCNT_SHIFT (16U) +#define SPI_TCR_SPI_TCNT(x) (((uint32_t)(((uint32_t)(x)) << SPI_TCR_SPI_TCNT_SHIFT)) & SPI_TCR_SPI_TCNT_MASK) + +/*! @name CTAR - Clock and Transfer Attributes Register (In Master Mode) */ +#define SPI_CTAR_BR_MASK (0xFU) +#define SPI_CTAR_BR_SHIFT (0U) +#define SPI_CTAR_BR(x) (((uint32_t)(((uint32_t)(x)) << SPI_CTAR_BR_SHIFT)) & SPI_CTAR_BR_MASK) +#define SPI_CTAR_DT_MASK (0xF0U) +#define SPI_CTAR_DT_SHIFT (4U) +#define SPI_CTAR_DT(x) (((uint32_t)(((uint32_t)(x)) << SPI_CTAR_DT_SHIFT)) & SPI_CTAR_DT_MASK) +#define SPI_CTAR_ASC_MASK (0xF00U) +#define SPI_CTAR_ASC_SHIFT (8U) +#define SPI_CTAR_ASC(x) (((uint32_t)(((uint32_t)(x)) << SPI_CTAR_ASC_SHIFT)) & SPI_CTAR_ASC_MASK) +#define SPI_CTAR_CSSCK_MASK (0xF000U) +#define SPI_CTAR_CSSCK_SHIFT (12U) +#define SPI_CTAR_CSSCK(x) (((uint32_t)(((uint32_t)(x)) << SPI_CTAR_CSSCK_SHIFT)) & SPI_CTAR_CSSCK_MASK) +#define SPI_CTAR_PBR_MASK (0x30000U) +#define SPI_CTAR_PBR_SHIFT (16U) +#define SPI_CTAR_PBR(x) (((uint32_t)(((uint32_t)(x)) << SPI_CTAR_PBR_SHIFT)) & SPI_CTAR_PBR_MASK) +#define SPI_CTAR_PDT_MASK (0xC0000U) +#define SPI_CTAR_PDT_SHIFT (18U) +#define SPI_CTAR_PDT(x) (((uint32_t)(((uint32_t)(x)) << SPI_CTAR_PDT_SHIFT)) & SPI_CTAR_PDT_MASK) +#define SPI_CTAR_PASC_MASK (0x300000U) +#define SPI_CTAR_PASC_SHIFT (20U) +#define SPI_CTAR_PASC(x) (((uint32_t)(((uint32_t)(x)) << SPI_CTAR_PASC_SHIFT)) & SPI_CTAR_PASC_MASK) +#define SPI_CTAR_PCSSCK_MASK (0xC00000U) +#define SPI_CTAR_PCSSCK_SHIFT (22U) +#define SPI_CTAR_PCSSCK(x) (((uint32_t)(((uint32_t)(x)) << SPI_CTAR_PCSSCK_SHIFT)) & SPI_CTAR_PCSSCK_MASK) +#define SPI_CTAR_LSBFE_MASK (0x1000000U) +#define SPI_CTAR_LSBFE_SHIFT (24U) +#define SPI_CTAR_LSBFE(x) (((uint32_t)(((uint32_t)(x)) << SPI_CTAR_LSBFE_SHIFT)) & SPI_CTAR_LSBFE_MASK) +#define SPI_CTAR_CPHA_MASK (0x2000000U) +#define SPI_CTAR_CPHA_SHIFT (25U) +#define SPI_CTAR_CPHA(x) (((uint32_t)(((uint32_t)(x)) << SPI_CTAR_CPHA_SHIFT)) & SPI_CTAR_CPHA_MASK) +#define SPI_CTAR_CPOL_MASK (0x4000000U) +#define SPI_CTAR_CPOL_SHIFT (26U) +#define SPI_CTAR_CPOL(x) (((uint32_t)(((uint32_t)(x)) << SPI_CTAR_CPOL_SHIFT)) & SPI_CTAR_CPOL_MASK) +#define SPI_CTAR_FMSZ_MASK (0x78000000U) +#define SPI_CTAR_FMSZ_SHIFT (27U) +#define SPI_CTAR_FMSZ(x) (((uint32_t)(((uint32_t)(x)) << SPI_CTAR_FMSZ_SHIFT)) & SPI_CTAR_FMSZ_MASK) +#define SPI_CTAR_DBR_MASK (0x80000000U) +#define SPI_CTAR_DBR_SHIFT (31U) +#define SPI_CTAR_DBR(x) (((uint32_t)(((uint32_t)(x)) << SPI_CTAR_DBR_SHIFT)) & SPI_CTAR_DBR_MASK) + +/* The count of SPI_CTAR */ +#define SPI_CTAR_COUNT (2U) + +/*! @name CTAR_SLAVE - Clock and Transfer Attributes Register (In Slave Mode) */ +#define SPI_CTAR_SLAVE_CPHA_MASK (0x2000000U) +#define SPI_CTAR_SLAVE_CPHA_SHIFT (25U) +#define SPI_CTAR_SLAVE_CPHA(x) (((uint32_t)(((uint32_t)(x)) << SPI_CTAR_SLAVE_CPHA_SHIFT)) & SPI_CTAR_SLAVE_CPHA_MASK) +#define SPI_CTAR_SLAVE_CPOL_MASK (0x4000000U) +#define SPI_CTAR_SLAVE_CPOL_SHIFT (26U) +#define SPI_CTAR_SLAVE_CPOL(x) (((uint32_t)(((uint32_t)(x)) << SPI_CTAR_SLAVE_CPOL_SHIFT)) & SPI_CTAR_SLAVE_CPOL_MASK) +#define SPI_CTAR_SLAVE_FMSZ_MASK (0x78000000U) +#define SPI_CTAR_SLAVE_FMSZ_SHIFT (27U) +#define SPI_CTAR_SLAVE_FMSZ(x) (((uint32_t)(((uint32_t)(x)) << SPI_CTAR_SLAVE_FMSZ_SHIFT)) & SPI_CTAR_SLAVE_FMSZ_MASK) + +/* The count of SPI_CTAR_SLAVE */ +#define SPI_CTAR_SLAVE_COUNT (1U) + +/*! @name SR - Status Register */ +#define SPI_SR_POPNXTPTR_MASK (0xFU) +#define SPI_SR_POPNXTPTR_SHIFT (0U) +#define SPI_SR_POPNXTPTR(x) (((uint32_t)(((uint32_t)(x)) << SPI_SR_POPNXTPTR_SHIFT)) & SPI_SR_POPNXTPTR_MASK) +#define SPI_SR_RXCTR_MASK (0xF0U) +#define SPI_SR_RXCTR_SHIFT (4U) +#define SPI_SR_RXCTR(x) (((uint32_t)(((uint32_t)(x)) << SPI_SR_RXCTR_SHIFT)) & SPI_SR_RXCTR_MASK) +#define SPI_SR_TXNXTPTR_MASK (0xF00U) +#define SPI_SR_TXNXTPTR_SHIFT (8U) +#define SPI_SR_TXNXTPTR(x) (((uint32_t)(((uint32_t)(x)) << SPI_SR_TXNXTPTR_SHIFT)) & SPI_SR_TXNXTPTR_MASK) +#define SPI_SR_TXCTR_MASK (0xF000U) +#define SPI_SR_TXCTR_SHIFT (12U) +#define SPI_SR_TXCTR(x) (((uint32_t)(((uint32_t)(x)) << SPI_SR_TXCTR_SHIFT)) & SPI_SR_TXCTR_MASK) +#define SPI_SR_RFDF_MASK (0x20000U) +#define SPI_SR_RFDF_SHIFT (17U) +#define SPI_SR_RFDF(x) (((uint32_t)(((uint32_t)(x)) << SPI_SR_RFDF_SHIFT)) & SPI_SR_RFDF_MASK) +#define SPI_SR_RFOF_MASK (0x80000U) +#define SPI_SR_RFOF_SHIFT (19U) +#define SPI_SR_RFOF(x) (((uint32_t)(((uint32_t)(x)) << SPI_SR_RFOF_SHIFT)) & SPI_SR_RFOF_MASK) +#define SPI_SR_TFFF_MASK (0x2000000U) +#define SPI_SR_TFFF_SHIFT (25U) +#define SPI_SR_TFFF(x) (((uint32_t)(((uint32_t)(x)) << SPI_SR_TFFF_SHIFT)) & SPI_SR_TFFF_MASK) +#define SPI_SR_TFUF_MASK (0x8000000U) +#define SPI_SR_TFUF_SHIFT (27U) +#define SPI_SR_TFUF(x) (((uint32_t)(((uint32_t)(x)) << SPI_SR_TFUF_SHIFT)) & SPI_SR_TFUF_MASK) +#define SPI_SR_EOQF_MASK (0x10000000U) +#define SPI_SR_EOQF_SHIFT (28U) +#define SPI_SR_EOQF(x) (((uint32_t)(((uint32_t)(x)) << SPI_SR_EOQF_SHIFT)) & SPI_SR_EOQF_MASK) +#define SPI_SR_TXRXS_MASK (0x40000000U) +#define SPI_SR_TXRXS_SHIFT (30U) +#define SPI_SR_TXRXS(x) (((uint32_t)(((uint32_t)(x)) << SPI_SR_TXRXS_SHIFT)) & SPI_SR_TXRXS_MASK) +#define SPI_SR_TCF_MASK (0x80000000U) +#define SPI_SR_TCF_SHIFT (31U) +#define SPI_SR_TCF(x) (((uint32_t)(((uint32_t)(x)) << SPI_SR_TCF_SHIFT)) & SPI_SR_TCF_MASK) + +/*! @name RSER - DMA/Interrupt Request Select and Enable Register */ +#define SPI_RSER_RFDF_DIRS_MASK (0x10000U) +#define SPI_RSER_RFDF_DIRS_SHIFT (16U) +#define SPI_RSER_RFDF_DIRS(x) (((uint32_t)(((uint32_t)(x)) << SPI_RSER_RFDF_DIRS_SHIFT)) & SPI_RSER_RFDF_DIRS_MASK) +#define SPI_RSER_RFDF_RE_MASK (0x20000U) +#define SPI_RSER_RFDF_RE_SHIFT (17U) +#define SPI_RSER_RFDF_RE(x) (((uint32_t)(((uint32_t)(x)) << SPI_RSER_RFDF_RE_SHIFT)) & SPI_RSER_RFDF_RE_MASK) +#define SPI_RSER_RFOF_RE_MASK (0x80000U) +#define SPI_RSER_RFOF_RE_SHIFT (19U) +#define SPI_RSER_RFOF_RE(x) (((uint32_t)(((uint32_t)(x)) << SPI_RSER_RFOF_RE_SHIFT)) & SPI_RSER_RFOF_RE_MASK) +#define SPI_RSER_TFFF_DIRS_MASK (0x1000000U) +#define SPI_RSER_TFFF_DIRS_SHIFT (24U) +#define SPI_RSER_TFFF_DIRS(x) (((uint32_t)(((uint32_t)(x)) << SPI_RSER_TFFF_DIRS_SHIFT)) & SPI_RSER_TFFF_DIRS_MASK) +#define SPI_RSER_TFFF_RE_MASK (0x2000000U) +#define SPI_RSER_TFFF_RE_SHIFT (25U) +#define SPI_RSER_TFFF_RE(x) (((uint32_t)(((uint32_t)(x)) << SPI_RSER_TFFF_RE_SHIFT)) & SPI_RSER_TFFF_RE_MASK) +#define SPI_RSER_TFUF_RE_MASK (0x8000000U) +#define SPI_RSER_TFUF_RE_SHIFT (27U) +#define SPI_RSER_TFUF_RE(x) (((uint32_t)(((uint32_t)(x)) << SPI_RSER_TFUF_RE_SHIFT)) & SPI_RSER_TFUF_RE_MASK) +#define SPI_RSER_EOQF_RE_MASK (0x10000000U) +#define SPI_RSER_EOQF_RE_SHIFT (28U) +#define SPI_RSER_EOQF_RE(x) (((uint32_t)(((uint32_t)(x)) << SPI_RSER_EOQF_RE_SHIFT)) & SPI_RSER_EOQF_RE_MASK) +#define SPI_RSER_TCF_RE_MASK (0x80000000U) +#define SPI_RSER_TCF_RE_SHIFT (31U) +#define SPI_RSER_TCF_RE(x) (((uint32_t)(((uint32_t)(x)) << SPI_RSER_TCF_RE_SHIFT)) & SPI_RSER_TCF_RE_MASK) + +/*! @name PUSHR - PUSH TX FIFO Register In Master Mode */ +#define SPI_PUSHR_TXDATA_MASK (0xFFFFU) +#define SPI_PUSHR_TXDATA_SHIFT (0U) +#define SPI_PUSHR_TXDATA(x) (((uint32_t)(((uint32_t)(x)) << SPI_PUSHR_TXDATA_SHIFT)) & SPI_PUSHR_TXDATA_MASK) +#define SPI_PUSHR_PCS_MASK (0x3F0000U) +#define SPI_PUSHR_PCS_SHIFT (16U) +#define SPI_PUSHR_PCS(x) (((uint32_t)(((uint32_t)(x)) << SPI_PUSHR_PCS_SHIFT)) & SPI_PUSHR_PCS_MASK) +#define SPI_PUSHR_CTCNT_MASK (0x4000000U) +#define SPI_PUSHR_CTCNT_SHIFT (26U) +#define SPI_PUSHR_CTCNT(x) (((uint32_t)(((uint32_t)(x)) << SPI_PUSHR_CTCNT_SHIFT)) & SPI_PUSHR_CTCNT_MASK) +#define SPI_PUSHR_EOQ_MASK (0x8000000U) +#define SPI_PUSHR_EOQ_SHIFT (27U) +#define SPI_PUSHR_EOQ(x) (((uint32_t)(((uint32_t)(x)) << SPI_PUSHR_EOQ_SHIFT)) & SPI_PUSHR_EOQ_MASK) +#define SPI_PUSHR_CTAS_MASK (0x70000000U) +#define SPI_PUSHR_CTAS_SHIFT (28U) +#define SPI_PUSHR_CTAS(x) (((uint32_t)(((uint32_t)(x)) << SPI_PUSHR_CTAS_SHIFT)) & SPI_PUSHR_CTAS_MASK) +#define SPI_PUSHR_CONT_MASK (0x80000000U) +#define SPI_PUSHR_CONT_SHIFT (31U) +#define SPI_PUSHR_CONT(x) (((uint32_t)(((uint32_t)(x)) << SPI_PUSHR_CONT_SHIFT)) & SPI_PUSHR_CONT_MASK) + +/*! @name PUSHR_SLAVE - PUSH TX FIFO Register In Slave Mode */ +#define SPI_PUSHR_SLAVE_TXDATA_MASK (0xFFFFU) +#define SPI_PUSHR_SLAVE_TXDATA_SHIFT (0U) +#define SPI_PUSHR_SLAVE_TXDATA(x) (((uint32_t)(((uint32_t)(x)) << SPI_PUSHR_SLAVE_TXDATA_SHIFT)) & SPI_PUSHR_SLAVE_TXDATA_MASK) + +/*! @name POPR - POP RX FIFO Register */ +#define SPI_POPR_RXDATA_MASK (0xFFFFFFFFU) +#define SPI_POPR_RXDATA_SHIFT (0U) +#define SPI_POPR_RXDATA(x) (((uint32_t)(((uint32_t)(x)) << SPI_POPR_RXDATA_SHIFT)) & SPI_POPR_RXDATA_MASK) + +/*! @name TXFR0 - Transmit FIFO Registers */ +#define SPI_TXFR0_TXDATA_MASK (0xFFFFU) +#define SPI_TXFR0_TXDATA_SHIFT (0U) +#define SPI_TXFR0_TXDATA(x) (((uint32_t)(((uint32_t)(x)) << SPI_TXFR0_TXDATA_SHIFT)) & SPI_TXFR0_TXDATA_MASK) +#define SPI_TXFR0_TXCMD_TXDATA_MASK (0xFFFF0000U) +#define SPI_TXFR0_TXCMD_TXDATA_SHIFT (16U) +#define SPI_TXFR0_TXCMD_TXDATA(x) (((uint32_t)(((uint32_t)(x)) << SPI_TXFR0_TXCMD_TXDATA_SHIFT)) & SPI_TXFR0_TXCMD_TXDATA_MASK) + +/*! @name TXFR1 - Transmit FIFO Registers */ +#define SPI_TXFR1_TXDATA_MASK (0xFFFFU) +#define SPI_TXFR1_TXDATA_SHIFT (0U) +#define SPI_TXFR1_TXDATA(x) (((uint32_t)(((uint32_t)(x)) << SPI_TXFR1_TXDATA_SHIFT)) & SPI_TXFR1_TXDATA_MASK) +#define SPI_TXFR1_TXCMD_TXDATA_MASK (0xFFFF0000U) +#define SPI_TXFR1_TXCMD_TXDATA_SHIFT (16U) +#define SPI_TXFR1_TXCMD_TXDATA(x) (((uint32_t)(((uint32_t)(x)) << SPI_TXFR1_TXCMD_TXDATA_SHIFT)) & SPI_TXFR1_TXCMD_TXDATA_MASK) + +/*! @name TXFR2 - Transmit FIFO Registers */ +#define SPI_TXFR2_TXDATA_MASK (0xFFFFU) +#define SPI_TXFR2_TXDATA_SHIFT (0U) +#define SPI_TXFR2_TXDATA(x) (((uint32_t)(((uint32_t)(x)) << SPI_TXFR2_TXDATA_SHIFT)) & SPI_TXFR2_TXDATA_MASK) +#define SPI_TXFR2_TXCMD_TXDATA_MASK (0xFFFF0000U) +#define SPI_TXFR2_TXCMD_TXDATA_SHIFT (16U) +#define SPI_TXFR2_TXCMD_TXDATA(x) (((uint32_t)(((uint32_t)(x)) << SPI_TXFR2_TXCMD_TXDATA_SHIFT)) & SPI_TXFR2_TXCMD_TXDATA_MASK) + +/*! @name TXFR3 - Transmit FIFO Registers */ +#define SPI_TXFR3_TXDATA_MASK (0xFFFFU) +#define SPI_TXFR3_TXDATA_SHIFT (0U) +#define SPI_TXFR3_TXDATA(x) (((uint32_t)(((uint32_t)(x)) << SPI_TXFR3_TXDATA_SHIFT)) & SPI_TXFR3_TXDATA_MASK) +#define SPI_TXFR3_TXCMD_TXDATA_MASK (0xFFFF0000U) +#define SPI_TXFR3_TXCMD_TXDATA_SHIFT (16U) +#define SPI_TXFR3_TXCMD_TXDATA(x) (((uint32_t)(((uint32_t)(x)) << SPI_TXFR3_TXCMD_TXDATA_SHIFT)) & SPI_TXFR3_TXCMD_TXDATA_MASK) + +/*! @name RXFR0 - Receive FIFO Registers */ +#define SPI_RXFR0_RXDATA_MASK (0xFFFFFFFFU) +#define SPI_RXFR0_RXDATA_SHIFT (0U) +#define SPI_RXFR0_RXDATA(x) (((uint32_t)(((uint32_t)(x)) << SPI_RXFR0_RXDATA_SHIFT)) & SPI_RXFR0_RXDATA_MASK) + +/*! @name RXFR1 - Receive FIFO Registers */ +#define SPI_RXFR1_RXDATA_MASK (0xFFFFFFFFU) +#define SPI_RXFR1_RXDATA_SHIFT (0U) +#define SPI_RXFR1_RXDATA(x) (((uint32_t)(((uint32_t)(x)) << SPI_RXFR1_RXDATA_SHIFT)) & SPI_RXFR1_RXDATA_MASK) + +/*! @name RXFR2 - Receive FIFO Registers */ +#define SPI_RXFR2_RXDATA_MASK (0xFFFFFFFFU) +#define SPI_RXFR2_RXDATA_SHIFT (0U) +#define SPI_RXFR2_RXDATA(x) (((uint32_t)(((uint32_t)(x)) << SPI_RXFR2_RXDATA_SHIFT)) & SPI_RXFR2_RXDATA_MASK) + +/*! @name RXFR3 - Receive FIFO Registers */ +#define SPI_RXFR3_RXDATA_MASK (0xFFFFFFFFU) +#define SPI_RXFR3_RXDATA_SHIFT (0U) +#define SPI_RXFR3_RXDATA(x) (((uint32_t)(((uint32_t)(x)) << SPI_RXFR3_RXDATA_SHIFT)) & SPI_RXFR3_RXDATA_MASK) + + +/*! + * @} + */ /* end of group SPI_Register_Masks */ + + +/* SPI - Peripheral instance base addresses */ +/** Peripheral SPI0 base address */ +#define SPI0_BASE (0x4002C000u) +/** Peripheral SPI0 base pointer */ +#define SPI0 ((SPI_Type *)SPI0_BASE) +/** Peripheral SPI1 base address */ +#define SPI1_BASE (0x4002D000u) +/** Peripheral SPI1 base pointer */ +#define SPI1 ((SPI_Type *)SPI1_BASE) +/** Array initializer of SPI peripheral base addresses */ +#define SPI_BASE_ADDRS { SPI0_BASE, SPI1_BASE } +/** Array initializer of SPI peripheral base pointers */ +#define SPI_BASE_PTRS { SPI0, SPI1 } +/** Interrupt vectors for the SPI peripheral type */ +#define SPI_IRQS { SPI0_IRQn, SPI1_IRQn } + +/*! + * @} + */ /* end of group SPI_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- TPM Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup TPM_Peripheral_Access_Layer TPM Peripheral Access Layer + * @{ + */ + +/** TPM - Register Layout Typedef */ +typedef struct { + __IO uint32_t SC; /**< Status and Control, offset: 0x0 */ + __IO uint32_t CNT; /**< Counter, offset: 0x4 */ + __IO uint32_t MOD; /**< Modulo, offset: 0x8 */ + struct { /* offset: 0xC, array step: 0x8 */ + __IO uint32_t CnSC; /**< Channel (n) Status and Control, array offset: 0xC, array step: 0x8 */ + __IO uint32_t CnV; /**< Channel (n) Value, array offset: 0x10, array step: 0x8 */ + } CONTROLS[6]; + uint8_t RESERVED_0[20]; + __IO uint32_t STATUS; /**< Capture and Compare Status, offset: 0x50 */ + uint8_t RESERVED_1[16]; + __IO uint32_t COMBINE; /**< Combine Channel Register, offset: 0x64 */ + uint8_t RESERVED_2[8]; + __IO uint32_t POL; /**< Channel Polarity, offset: 0x70 */ + uint8_t RESERVED_3[4]; + __IO uint32_t FILTER; /**< Filter Control, offset: 0x78 */ + uint8_t RESERVED_4[8]; + __IO uint32_t CONF; /**< Configuration, offset: 0x84 */ +} TPM_Type; + +/* ---------------------------------------------------------------------------- + -- TPM Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup TPM_Register_Masks TPM Register Masks + * @{ + */ + +/*! @name SC - Status and Control */ +#define TPM_SC_PS_MASK (0x7U) +#define TPM_SC_PS_SHIFT (0U) +#define TPM_SC_PS(x) (((uint32_t)(((uint32_t)(x)) << TPM_SC_PS_SHIFT)) & TPM_SC_PS_MASK) +#define TPM_SC_CMOD_MASK (0x18U) +#define TPM_SC_CMOD_SHIFT (3U) +#define TPM_SC_CMOD(x) (((uint32_t)(((uint32_t)(x)) << TPM_SC_CMOD_SHIFT)) & TPM_SC_CMOD_MASK) +#define TPM_SC_CPWMS_MASK (0x20U) +#define TPM_SC_CPWMS_SHIFT (5U) +#define TPM_SC_CPWMS(x) (((uint32_t)(((uint32_t)(x)) << TPM_SC_CPWMS_SHIFT)) & TPM_SC_CPWMS_MASK) +#define TPM_SC_TOIE_MASK (0x40U) +#define TPM_SC_TOIE_SHIFT (6U) +#define TPM_SC_TOIE(x) (((uint32_t)(((uint32_t)(x)) << TPM_SC_TOIE_SHIFT)) & TPM_SC_TOIE_MASK) +#define TPM_SC_TOF_MASK (0x80U) +#define TPM_SC_TOF_SHIFT (7U) +#define TPM_SC_TOF(x) (((uint32_t)(((uint32_t)(x)) << TPM_SC_TOF_SHIFT)) & TPM_SC_TOF_MASK) +#define TPM_SC_DMA_MASK (0x100U) +#define TPM_SC_DMA_SHIFT (8U) +#define TPM_SC_DMA(x) (((uint32_t)(((uint32_t)(x)) << TPM_SC_DMA_SHIFT)) & TPM_SC_DMA_MASK) + +/*! @name CNT - Counter */ +#define TPM_CNT_COUNT_MASK (0xFFFFU) +#define TPM_CNT_COUNT_SHIFT (0U) +#define TPM_CNT_COUNT(x) (((uint32_t)(((uint32_t)(x)) << TPM_CNT_COUNT_SHIFT)) & TPM_CNT_COUNT_MASK) + +/*! @name MOD - Modulo */ +#define TPM_MOD_MOD_MASK (0xFFFFU) +#define TPM_MOD_MOD_SHIFT (0U) +#define TPM_MOD_MOD(x) (((uint32_t)(((uint32_t)(x)) << TPM_MOD_MOD_SHIFT)) & TPM_MOD_MOD_MASK) + +/*! @name CnSC - Channel (n) Status and Control */ +#define TPM_CnSC_DMA_MASK (0x1U) +#define TPM_CnSC_DMA_SHIFT (0U) +#define TPM_CnSC_DMA(x) (((uint32_t)(((uint32_t)(x)) << TPM_CnSC_DMA_SHIFT)) & TPM_CnSC_DMA_MASK) +#define TPM_CnSC_ELSA_MASK (0x4U) +#define TPM_CnSC_ELSA_SHIFT (2U) +#define TPM_CnSC_ELSA(x) (((uint32_t)(((uint32_t)(x)) << TPM_CnSC_ELSA_SHIFT)) & TPM_CnSC_ELSA_MASK) +#define TPM_CnSC_ELSB_MASK (0x8U) +#define TPM_CnSC_ELSB_SHIFT (3U) +#define TPM_CnSC_ELSB(x) (((uint32_t)(((uint32_t)(x)) << TPM_CnSC_ELSB_SHIFT)) & TPM_CnSC_ELSB_MASK) +#define TPM_CnSC_MSA_MASK (0x10U) +#define TPM_CnSC_MSA_SHIFT (4U) +#define TPM_CnSC_MSA(x) (((uint32_t)(((uint32_t)(x)) << TPM_CnSC_MSA_SHIFT)) & TPM_CnSC_MSA_MASK) +#define TPM_CnSC_MSB_MASK (0x20U) +#define TPM_CnSC_MSB_SHIFT (5U) +#define TPM_CnSC_MSB(x) (((uint32_t)(((uint32_t)(x)) << TPM_CnSC_MSB_SHIFT)) & TPM_CnSC_MSB_MASK) +#define TPM_CnSC_CHIE_MASK (0x40U) +#define TPM_CnSC_CHIE_SHIFT (6U) +#define TPM_CnSC_CHIE(x) (((uint32_t)(((uint32_t)(x)) << TPM_CnSC_CHIE_SHIFT)) & TPM_CnSC_CHIE_MASK) +#define TPM_CnSC_CHF_MASK (0x80U) +#define TPM_CnSC_CHF_SHIFT (7U) +#define TPM_CnSC_CHF(x) (((uint32_t)(((uint32_t)(x)) << TPM_CnSC_CHF_SHIFT)) & TPM_CnSC_CHF_MASK) + +/* The count of TPM_CnSC */ +#define TPM_CnSC_COUNT (6U) + +/*! @name CnV - Channel (n) Value */ +#define TPM_CnV_VAL_MASK (0xFFFFU) +#define TPM_CnV_VAL_SHIFT (0U) +#define TPM_CnV_VAL(x) (((uint32_t)(((uint32_t)(x)) << TPM_CnV_VAL_SHIFT)) & TPM_CnV_VAL_MASK) + +/* The count of TPM_CnV */ +#define TPM_CnV_COUNT (6U) + +/*! @name STATUS - Capture and Compare Status */ +#define TPM_STATUS_CH0F_MASK (0x1U) +#define TPM_STATUS_CH0F_SHIFT (0U) +#define TPM_STATUS_CH0F(x) (((uint32_t)(((uint32_t)(x)) << TPM_STATUS_CH0F_SHIFT)) & TPM_STATUS_CH0F_MASK) +#define TPM_STATUS_CH1F_MASK (0x2U) +#define TPM_STATUS_CH1F_SHIFT (1U) +#define TPM_STATUS_CH1F(x) (((uint32_t)(((uint32_t)(x)) << TPM_STATUS_CH1F_SHIFT)) & TPM_STATUS_CH1F_MASK) +#define TPM_STATUS_CH2F_MASK (0x4U) +#define TPM_STATUS_CH2F_SHIFT (2U) +#define TPM_STATUS_CH2F(x) (((uint32_t)(((uint32_t)(x)) << TPM_STATUS_CH2F_SHIFT)) & TPM_STATUS_CH2F_MASK) +#define TPM_STATUS_CH3F_MASK (0x8U) +#define TPM_STATUS_CH3F_SHIFT (3U) +#define TPM_STATUS_CH3F(x) (((uint32_t)(((uint32_t)(x)) << TPM_STATUS_CH3F_SHIFT)) & TPM_STATUS_CH3F_MASK) +#define TPM_STATUS_CH4F_MASK (0x10U) +#define TPM_STATUS_CH4F_SHIFT (4U) +#define TPM_STATUS_CH4F(x) (((uint32_t)(((uint32_t)(x)) << TPM_STATUS_CH4F_SHIFT)) & TPM_STATUS_CH4F_MASK) +#define TPM_STATUS_CH5F_MASK (0x20U) +#define TPM_STATUS_CH5F_SHIFT (5U) +#define TPM_STATUS_CH5F(x) (((uint32_t)(((uint32_t)(x)) << TPM_STATUS_CH5F_SHIFT)) & TPM_STATUS_CH5F_MASK) +#define TPM_STATUS_TOF_MASK (0x100U) +#define TPM_STATUS_TOF_SHIFT (8U) +#define TPM_STATUS_TOF(x) (((uint32_t)(((uint32_t)(x)) << TPM_STATUS_TOF_SHIFT)) & TPM_STATUS_TOF_MASK) + +/*! @name COMBINE - Combine Channel Register */ +#define TPM_COMBINE_COMBINE0_MASK (0x1U) +#define TPM_COMBINE_COMBINE0_SHIFT (0U) +#define TPM_COMBINE_COMBINE0(x) (((uint32_t)(((uint32_t)(x)) << TPM_COMBINE_COMBINE0_SHIFT)) & TPM_COMBINE_COMBINE0_MASK) +#define TPM_COMBINE_COMSWAP0_MASK (0x2U) +#define TPM_COMBINE_COMSWAP0_SHIFT (1U) +#define TPM_COMBINE_COMSWAP0(x) (((uint32_t)(((uint32_t)(x)) << TPM_COMBINE_COMSWAP0_SHIFT)) & TPM_COMBINE_COMSWAP0_MASK) +#define TPM_COMBINE_COMBINE1_MASK (0x100U) +#define TPM_COMBINE_COMBINE1_SHIFT (8U) +#define TPM_COMBINE_COMBINE1(x) (((uint32_t)(((uint32_t)(x)) << TPM_COMBINE_COMBINE1_SHIFT)) & TPM_COMBINE_COMBINE1_MASK) +#define TPM_COMBINE_COMSWAP1_MASK (0x200U) +#define TPM_COMBINE_COMSWAP1_SHIFT (9U) +#define TPM_COMBINE_COMSWAP1(x) (((uint32_t)(((uint32_t)(x)) << TPM_COMBINE_COMSWAP1_SHIFT)) & TPM_COMBINE_COMSWAP1_MASK) +#define TPM_COMBINE_COMBINE2_MASK (0x10000U) +#define TPM_COMBINE_COMBINE2_SHIFT (16U) +#define TPM_COMBINE_COMBINE2(x) (((uint32_t)(((uint32_t)(x)) << TPM_COMBINE_COMBINE2_SHIFT)) & TPM_COMBINE_COMBINE2_MASK) +#define TPM_COMBINE_COMSWAP2_MASK (0x20000U) +#define TPM_COMBINE_COMSWAP2_SHIFT (17U) +#define TPM_COMBINE_COMSWAP2(x) (((uint32_t)(((uint32_t)(x)) << TPM_COMBINE_COMSWAP2_SHIFT)) & TPM_COMBINE_COMSWAP2_MASK) + +/*! @name POL - Channel Polarity */ +#define TPM_POL_POL0_MASK (0x1U) +#define TPM_POL_POL0_SHIFT (0U) +#define TPM_POL_POL0(x) (((uint32_t)(((uint32_t)(x)) << TPM_POL_POL0_SHIFT)) & TPM_POL_POL0_MASK) +#define TPM_POL_POL1_MASK (0x2U) +#define TPM_POL_POL1_SHIFT (1U) +#define TPM_POL_POL1(x) (((uint32_t)(((uint32_t)(x)) << TPM_POL_POL1_SHIFT)) & TPM_POL_POL1_MASK) +#define TPM_POL_POL2_MASK (0x4U) +#define TPM_POL_POL2_SHIFT (2U) +#define TPM_POL_POL2(x) (((uint32_t)(((uint32_t)(x)) << TPM_POL_POL2_SHIFT)) & TPM_POL_POL2_MASK) +#define TPM_POL_POL3_MASK (0x8U) +#define TPM_POL_POL3_SHIFT (3U) +#define TPM_POL_POL3(x) (((uint32_t)(((uint32_t)(x)) << TPM_POL_POL3_SHIFT)) & TPM_POL_POL3_MASK) +#define TPM_POL_POL4_MASK (0x10U) +#define TPM_POL_POL4_SHIFT (4U) +#define TPM_POL_POL4(x) (((uint32_t)(((uint32_t)(x)) << TPM_POL_POL4_SHIFT)) & TPM_POL_POL4_MASK) +#define TPM_POL_POL5_MASK (0x20U) +#define TPM_POL_POL5_SHIFT (5U) +#define TPM_POL_POL5(x) (((uint32_t)(((uint32_t)(x)) << TPM_POL_POL5_SHIFT)) & TPM_POL_POL5_MASK) + +/*! @name FILTER - Filter Control */ +#define TPM_FILTER_CH0FVAL_MASK (0xFU) +#define TPM_FILTER_CH0FVAL_SHIFT (0U) +#define TPM_FILTER_CH0FVAL(x) (((uint32_t)(((uint32_t)(x)) << TPM_FILTER_CH0FVAL_SHIFT)) & TPM_FILTER_CH0FVAL_MASK) +#define TPM_FILTER_CH1FVAL_MASK (0xF0U) +#define TPM_FILTER_CH1FVAL_SHIFT (4U) +#define TPM_FILTER_CH1FVAL(x) (((uint32_t)(((uint32_t)(x)) << TPM_FILTER_CH1FVAL_SHIFT)) & TPM_FILTER_CH1FVAL_MASK) +#define TPM_FILTER_CH2FVAL_MASK (0xF00U) +#define TPM_FILTER_CH2FVAL_SHIFT (8U) +#define TPM_FILTER_CH2FVAL(x) (((uint32_t)(((uint32_t)(x)) << TPM_FILTER_CH2FVAL_SHIFT)) & TPM_FILTER_CH2FVAL_MASK) +#define TPM_FILTER_CH3FVAL_MASK (0xF000U) +#define TPM_FILTER_CH3FVAL_SHIFT (12U) +#define TPM_FILTER_CH3FVAL(x) (((uint32_t)(((uint32_t)(x)) << TPM_FILTER_CH3FVAL_SHIFT)) & TPM_FILTER_CH3FVAL_MASK) +#define TPM_FILTER_CH4FVAL_MASK (0xF0000U) +#define TPM_FILTER_CH4FVAL_SHIFT (16U) +#define TPM_FILTER_CH4FVAL(x) (((uint32_t)(((uint32_t)(x)) << TPM_FILTER_CH4FVAL_SHIFT)) & TPM_FILTER_CH4FVAL_MASK) +#define TPM_FILTER_CH5FVAL_MASK (0xF00000U) +#define TPM_FILTER_CH5FVAL_SHIFT (20U) +#define TPM_FILTER_CH5FVAL(x) (((uint32_t)(((uint32_t)(x)) << TPM_FILTER_CH5FVAL_SHIFT)) & TPM_FILTER_CH5FVAL_MASK) + +/*! @name CONF - Configuration */ +#define TPM_CONF_DOZEEN_MASK (0x20U) +#define TPM_CONF_DOZEEN_SHIFT (5U) +#define TPM_CONF_DOZEEN(x) (((uint32_t)(((uint32_t)(x)) << TPM_CONF_DOZEEN_SHIFT)) & TPM_CONF_DOZEEN_MASK) +#define TPM_CONF_DBGMODE_MASK (0xC0U) +#define TPM_CONF_DBGMODE_SHIFT (6U) +#define TPM_CONF_DBGMODE(x) (((uint32_t)(((uint32_t)(x)) << TPM_CONF_DBGMODE_SHIFT)) & TPM_CONF_DBGMODE_MASK) +#define TPM_CONF_GTBSYNC_MASK (0x100U) +#define TPM_CONF_GTBSYNC_SHIFT (8U) +#define TPM_CONF_GTBSYNC(x) (((uint32_t)(((uint32_t)(x)) << TPM_CONF_GTBSYNC_SHIFT)) & TPM_CONF_GTBSYNC_MASK) +#define TPM_CONF_GTBEEN_MASK (0x200U) +#define TPM_CONF_GTBEEN_SHIFT (9U) +#define TPM_CONF_GTBEEN(x) (((uint32_t)(((uint32_t)(x)) << TPM_CONF_GTBEEN_SHIFT)) & TPM_CONF_GTBEEN_MASK) +#define TPM_CONF_CSOT_MASK (0x10000U) +#define TPM_CONF_CSOT_SHIFT (16U) +#define TPM_CONF_CSOT(x) (((uint32_t)(((uint32_t)(x)) << TPM_CONF_CSOT_SHIFT)) & TPM_CONF_CSOT_MASK) +#define TPM_CONF_CSOO_MASK (0x20000U) +#define TPM_CONF_CSOO_SHIFT (17U) +#define TPM_CONF_CSOO(x) (((uint32_t)(((uint32_t)(x)) << TPM_CONF_CSOO_SHIFT)) & TPM_CONF_CSOO_MASK) +#define TPM_CONF_CROT_MASK (0x40000U) +#define TPM_CONF_CROT_SHIFT (18U) +#define TPM_CONF_CROT(x) (((uint32_t)(((uint32_t)(x)) << TPM_CONF_CROT_SHIFT)) & TPM_CONF_CROT_MASK) +#define TPM_CONF_CPOT_MASK (0x80000U) +#define TPM_CONF_CPOT_SHIFT (19U) +#define TPM_CONF_CPOT(x) (((uint32_t)(((uint32_t)(x)) << TPM_CONF_CPOT_SHIFT)) & TPM_CONF_CPOT_MASK) +#define TPM_CONF_TRGPOL_MASK (0x400000U) +#define TPM_CONF_TRGPOL_SHIFT (22U) +#define TPM_CONF_TRGPOL(x) (((uint32_t)(((uint32_t)(x)) << TPM_CONF_TRGPOL_SHIFT)) & TPM_CONF_TRGPOL_MASK) +#define TPM_CONF_TRGSRC_MASK (0x800000U) +#define TPM_CONF_TRGSRC_SHIFT (23U) +#define TPM_CONF_TRGSRC(x) (((uint32_t)(((uint32_t)(x)) << TPM_CONF_TRGSRC_SHIFT)) & TPM_CONF_TRGSRC_MASK) +#define TPM_CONF_TRGSEL_MASK (0xF000000U) +#define TPM_CONF_TRGSEL_SHIFT (24U) +#define TPM_CONF_TRGSEL(x) (((uint32_t)(((uint32_t)(x)) << TPM_CONF_TRGSEL_SHIFT)) & TPM_CONF_TRGSEL_MASK) + + +/*! + * @} + */ /* end of group TPM_Register_Masks */ + + +/* TPM - Peripheral instance base addresses */ +/** Peripheral TPM0 base address */ +#define TPM0_BASE (0x40038000u) +/** Peripheral TPM0 base pointer */ +#define TPM0 ((TPM_Type *)TPM0_BASE) +/** Peripheral TPM1 base address */ +#define TPM1_BASE (0x40039000u) +/** Peripheral TPM1 base pointer */ +#define TPM1 ((TPM_Type *)TPM1_BASE) +/** Peripheral TPM2 base address */ +#define TPM2_BASE (0x4003A000u) +/** Peripheral TPM2 base pointer */ +#define TPM2 ((TPM_Type *)TPM2_BASE) +/** Array initializer of TPM peripheral base addresses */ +#define TPM_BASE_ADDRS { TPM0_BASE, TPM1_BASE, TPM2_BASE } +/** Array initializer of TPM peripheral base pointers */ +#define TPM_BASE_PTRS { TPM0, TPM1, TPM2 } +/** Interrupt vectors for the TPM peripheral type */ +#define TPM_IRQS { TPM0_IRQn, TPM1_IRQn, TPM2_IRQn } + +/*! + * @} + */ /* end of group TPM_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- TRNG Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup TRNG_Peripheral_Access_Layer TRNG Peripheral Access Layer + * @{ + */ + +/** TRNG - Register Layout Typedef */ +typedef struct { + __IO uint32_t MCTL; /**< TRNG0 Miscellaneous Control Register, offset: 0x0 */ + __IO uint32_t SCMISC; /**< TRNG0 Statistical Check Miscellaneous Register, offset: 0x4 */ + __IO uint32_t PKRRNG; /**< TRNG0 Poker Range Register, offset: 0x8 */ + union { /* offset: 0xC */ + __IO uint32_t PKRMAX; /**< TRNG0 Poker Maximum Limit Register, offset: 0xC */ + __I uint32_t PKRSQ; /**< TRNG0 Poker Square Calculation Result Register, offset: 0xC */ + }; + __IO uint32_t SDCTL; /**< TRNG0 Seed Control Register, offset: 0x10 */ + union { /* offset: 0x14 */ + __IO uint32_t SBLIM; /**< TRNG0 Sparse Bit Limit Register, offset: 0x14 */ + __I uint32_t TOTSAM; /**< TRNG0 Total Samples Register, offset: 0x14 */ + }; + __IO uint32_t FRQMIN; /**< TRNG0 Frequency Count Minimum Limit Register, offset: 0x18 */ + union { /* offset: 0x1C */ + __I uint32_t FRQCNT; /**< TRNG0 Frequency Count Register, offset: 0x1C */ + __IO uint32_t FRQMAX; /**< TRNG0 Frequency Count Maximum Limit Register, offset: 0x1C */ + }; + union { /* offset: 0x20 */ + __I uint32_t SCMC; /**< TRNG0 Statistical Check Monobit Count Register, offset: 0x20 */ + __IO uint32_t SCML; /**< TRNG0 Statistical Check Monobit Limit Register, offset: 0x20 */ + }; + union { /* offset: 0x24 */ + __I uint32_t SCR1C; /**< TRNG0 Statistical Check Run Length 1 Count Register, offset: 0x24 */ + __IO uint32_t SCR1L; /**< TRNG0 Statistical Check Run Length 1 Limit Register, offset: 0x24 */ + }; + union { /* offset: 0x28 */ + __I uint32_t SCR2C; /**< TRNG0 Statistical Check Run Length 2 Count Register, offset: 0x28 */ + __IO uint32_t SCR2L; /**< TRNG0 Statistical Check Run Length 2 Limit Register, offset: 0x28 */ + }; + union { /* offset: 0x2C */ + __I uint32_t SCR3C; /**< TRNG0 Statistical Check Run Length 3 Count Register, offset: 0x2C */ + __IO uint32_t SCR3L; /**< TRNG0 Statistical Check Run Length 3 Limit Register, offset: 0x2C */ + }; + union { /* offset: 0x30 */ + __I uint32_t SCR4C; /**< TRNG0 Statistical Check Run Length 4 Count Register, offset: 0x30 */ + __IO uint32_t SCR4L; /**< TRNG0 Statistical Check Run Length 4 Limit Register, offset: 0x30 */ + }; + union { /* offset: 0x34 */ + __I uint32_t SCR5C; /**< TRNG0 Statistical Check Run Length 5 Count Register, offset: 0x34 */ + __IO uint32_t SCR5L; /**< TRNG0 Statistical Check Run Length 5 Limit Register, offset: 0x34 */ + }; + union { /* offset: 0x38 */ + __I uint32_t SCR6PC; /**< TRNG0 Statistical Check Run Length 6+ Count Register, offset: 0x38 */ + __IO uint32_t SCR6PL; /**< TRNG0 Statistical Check Run Length 6+ Limit Register, offset: 0x38 */ + }; + __I uint32_t STATUS; /**< TRNG0 Status Register, offset: 0x3C */ + __I uint32_t ENT[16]; /**< RNG TRNG Entropy Read Register, array offset: 0x40, array step: 0x4 */ + __I uint32_t PKRCNT10; /**< TRNG0 Statistical Check Poker Count 1 and 0 Register, offset: 0x80 */ + __I uint32_t PKRCNT32; /**< TRNG0 Statistical Check Poker Count 3 and 2 Register, offset: 0x84 */ + __I uint32_t PKRCNT54; /**< TRNG0 Statistical Check Poker Count 5 and 4 Register, offset: 0x88 */ + __I uint32_t PKRCNT76; /**< TRNG0 Statistical Check Poker Count 7 and 6 Register, offset: 0x8C */ + __I uint32_t PKRCNT98; /**< TRNG0 Statistical Check Poker Count 9 and 8 Register, offset: 0x90 */ + __I uint32_t PKRCNTBA; /**< TRNG0 Statistical Check Poker Count B and A Register, offset: 0x94 */ + __I uint32_t PKRCNTDC; /**< TRNG0 Statistical Check Poker Count D and C Register, offset: 0x98 */ + __I uint32_t PKRCNTFE; /**< TRNG0 Statistical Check Poker Count F and E Register, offset: 0x9C */ + __IO uint32_t SEC_CFG; /**< TRNG0 Security Configuration Register, offset: 0xA0 */ + __IO uint32_t INT_CTRL; /**< TRNG0 Interrupt Control Register, offset: 0xA4 */ + __IO uint32_t INT_MASK; /**< TRNG0 Mask Register, offset: 0xA8 */ + __IO uint32_t INT_STATUS; /**< TRNG0 Interrupt Status Register, offset: 0xAC */ + uint8_t RESERVED_0[64]; + __I uint32_t VID1; /**< TRNG0 Version ID Register (MS), offset: 0xF0 */ + __I uint32_t VID2; /**< TRNG0 Version ID Register (LS), offset: 0xF4 */ +} TRNG_Type; + +/* ---------------------------------------------------------------------------- + -- TRNG Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup TRNG_Register_Masks TRNG Register Masks + * @{ + */ + +/*! @name MCTL - TRNG0 Miscellaneous Control Register */ +#define TRNG_MCTL_SAMP_MODE_MASK (0x3U) +#define TRNG_MCTL_SAMP_MODE_SHIFT (0U) +#define TRNG_MCTL_SAMP_MODE(x) (((uint32_t)(((uint32_t)(x)) << TRNG_MCTL_SAMP_MODE_SHIFT)) & TRNG_MCTL_SAMP_MODE_MASK) +#define TRNG_MCTL_OSC_DIV_MASK (0xCU) +#define TRNG_MCTL_OSC_DIV_SHIFT (2U) +#define TRNG_MCTL_OSC_DIV(x) (((uint32_t)(((uint32_t)(x)) << TRNG_MCTL_OSC_DIV_SHIFT)) & TRNG_MCTL_OSC_DIV_MASK) +#define TRNG_MCTL_UNUSED_MASK (0x10U) +#define TRNG_MCTL_UNUSED_SHIFT (4U) +#define TRNG_MCTL_UNUSED(x) (((uint32_t)(((uint32_t)(x)) << TRNG_MCTL_UNUSED_SHIFT)) & TRNG_MCTL_UNUSED_MASK) +#define TRNG_MCTL_TRNG_ACC_MASK (0x20U) +#define TRNG_MCTL_TRNG_ACC_SHIFT (5U) +#define TRNG_MCTL_TRNG_ACC(x) (((uint32_t)(((uint32_t)(x)) << TRNG_MCTL_TRNG_ACC_SHIFT)) & TRNG_MCTL_TRNG_ACC_MASK) +#define TRNG_MCTL_RST_DEF_MASK (0x40U) +#define TRNG_MCTL_RST_DEF_SHIFT (6U) +#define TRNG_MCTL_RST_DEF(x) (((uint32_t)(((uint32_t)(x)) << TRNG_MCTL_RST_DEF_SHIFT)) & TRNG_MCTL_RST_DEF_MASK) +#define TRNG_MCTL_FOR_SCLK_MASK (0x80U) +#define TRNG_MCTL_FOR_SCLK_SHIFT (7U) +#define TRNG_MCTL_FOR_SCLK(x) (((uint32_t)(((uint32_t)(x)) << TRNG_MCTL_FOR_SCLK_SHIFT)) & TRNG_MCTL_FOR_SCLK_MASK) +#define TRNG_MCTL_FCT_FAIL_MASK (0x100U) +#define TRNG_MCTL_FCT_FAIL_SHIFT (8U) +#define TRNG_MCTL_FCT_FAIL(x) (((uint32_t)(((uint32_t)(x)) << TRNG_MCTL_FCT_FAIL_SHIFT)) & TRNG_MCTL_FCT_FAIL_MASK) +#define TRNG_MCTL_FCT_VAL_MASK (0x200U) +#define TRNG_MCTL_FCT_VAL_SHIFT (9U) +#define TRNG_MCTL_FCT_VAL(x) (((uint32_t)(((uint32_t)(x)) << TRNG_MCTL_FCT_VAL_SHIFT)) & TRNG_MCTL_FCT_VAL_MASK) +#define TRNG_MCTL_ENT_VAL_MASK (0x400U) +#define TRNG_MCTL_ENT_VAL_SHIFT (10U) +#define TRNG_MCTL_ENT_VAL(x) (((uint32_t)(((uint32_t)(x)) << TRNG_MCTL_ENT_VAL_SHIFT)) & TRNG_MCTL_ENT_VAL_MASK) +#define TRNG_MCTL_TST_OUT_MASK (0x800U) +#define TRNG_MCTL_TST_OUT_SHIFT (11U) +#define TRNG_MCTL_TST_OUT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_MCTL_TST_OUT_SHIFT)) & TRNG_MCTL_TST_OUT_MASK) +#define TRNG_MCTL_ERR_MASK (0x1000U) +#define TRNG_MCTL_ERR_SHIFT (12U) +#define TRNG_MCTL_ERR(x) (((uint32_t)(((uint32_t)(x)) << TRNG_MCTL_ERR_SHIFT)) & TRNG_MCTL_ERR_MASK) +#define TRNG_MCTL_TSTOP_OK_MASK (0x2000U) +#define TRNG_MCTL_TSTOP_OK_SHIFT (13U) +#define TRNG_MCTL_TSTOP_OK(x) (((uint32_t)(((uint32_t)(x)) << TRNG_MCTL_TSTOP_OK_SHIFT)) & TRNG_MCTL_TSTOP_OK_MASK) +#define TRNG_MCTL_PRGM_MASK (0x10000U) +#define TRNG_MCTL_PRGM_SHIFT (16U) +#define TRNG_MCTL_PRGM(x) (((uint32_t)(((uint32_t)(x)) << TRNG_MCTL_PRGM_SHIFT)) & TRNG_MCTL_PRGM_MASK) + +/*! @name SCMISC - TRNG0 Statistical Check Miscellaneous Register */ +#define TRNG_SCMISC_LRUN_MAX_MASK (0xFFU) +#define TRNG_SCMISC_LRUN_MAX_SHIFT (0U) +#define TRNG_SCMISC_LRUN_MAX(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCMISC_LRUN_MAX_SHIFT)) & TRNG_SCMISC_LRUN_MAX_MASK) +#define TRNG_SCMISC_RTY_CT_MASK (0xF0000U) +#define TRNG_SCMISC_RTY_CT_SHIFT (16U) +#define TRNG_SCMISC_RTY_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCMISC_RTY_CT_SHIFT)) & TRNG_SCMISC_RTY_CT_MASK) + +/*! @name PKRRNG - TRNG0 Poker Range Register */ +#define TRNG_PKRRNG_PKR_RNG_MASK (0xFFFFU) +#define TRNG_PKRRNG_PKR_RNG_SHIFT (0U) +#define TRNG_PKRRNG_PKR_RNG(x) (((uint32_t)(((uint32_t)(x)) << TRNG_PKRRNG_PKR_RNG_SHIFT)) & TRNG_PKRRNG_PKR_RNG_MASK) + +/*! @name PKRMAX - TRNG0 Poker Maximum Limit Register */ +#define TRNG_PKRMAX_PKR_MAX_MASK (0xFFFFFFU) +#define TRNG_PKRMAX_PKR_MAX_SHIFT (0U) +#define TRNG_PKRMAX_PKR_MAX(x) (((uint32_t)(((uint32_t)(x)) << TRNG_PKRMAX_PKR_MAX_SHIFT)) & TRNG_PKRMAX_PKR_MAX_MASK) + +/*! @name PKRSQ - TRNG0 Poker Square Calculation Result Register */ +#define TRNG_PKRSQ_PKR_SQ_MASK (0xFFFFFFU) +#define TRNG_PKRSQ_PKR_SQ_SHIFT (0U) +#define TRNG_PKRSQ_PKR_SQ(x) (((uint32_t)(((uint32_t)(x)) << TRNG_PKRSQ_PKR_SQ_SHIFT)) & TRNG_PKRSQ_PKR_SQ_MASK) + +/*! @name SDCTL - TRNG0 Seed Control Register */ +#define TRNG_SDCTL_SAMP_SIZE_MASK (0xFFFFU) +#define TRNG_SDCTL_SAMP_SIZE_SHIFT (0U) +#define TRNG_SDCTL_SAMP_SIZE(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SDCTL_SAMP_SIZE_SHIFT)) & TRNG_SDCTL_SAMP_SIZE_MASK) +#define TRNG_SDCTL_ENT_DLY_MASK (0xFFFF0000U) +#define TRNG_SDCTL_ENT_DLY_SHIFT (16U) +#define TRNG_SDCTL_ENT_DLY(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SDCTL_ENT_DLY_SHIFT)) & TRNG_SDCTL_ENT_DLY_MASK) + +/*! @name SBLIM - TRNG0 Sparse Bit Limit Register */ +#define TRNG_SBLIM_SB_LIM_MASK (0x3FFU) +#define TRNG_SBLIM_SB_LIM_SHIFT (0U) +#define TRNG_SBLIM_SB_LIM(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SBLIM_SB_LIM_SHIFT)) & TRNG_SBLIM_SB_LIM_MASK) + +/*! @name TOTSAM - TRNG0 Total Samples Register */ +#define TRNG_TOTSAM_TOT_SAM_MASK (0xFFFFFU) +#define TRNG_TOTSAM_TOT_SAM_SHIFT (0U) +#define TRNG_TOTSAM_TOT_SAM(x) (((uint32_t)(((uint32_t)(x)) << TRNG_TOTSAM_TOT_SAM_SHIFT)) & TRNG_TOTSAM_TOT_SAM_MASK) + +/*! @name FRQMIN - TRNG0 Frequency Count Minimum Limit Register */ +#define TRNG_FRQMIN_FRQ_MIN_MASK (0x3FFFFFU) +#define TRNG_FRQMIN_FRQ_MIN_SHIFT (0U) +#define TRNG_FRQMIN_FRQ_MIN(x) (((uint32_t)(((uint32_t)(x)) << TRNG_FRQMIN_FRQ_MIN_SHIFT)) & TRNG_FRQMIN_FRQ_MIN_MASK) + +/*! @name FRQCNT - TRNG0 Frequency Count Register */ +#define TRNG_FRQCNT_FRQ_CT_MASK (0x3FFFFFU) +#define TRNG_FRQCNT_FRQ_CT_SHIFT (0U) +#define TRNG_FRQCNT_FRQ_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_FRQCNT_FRQ_CT_SHIFT)) & TRNG_FRQCNT_FRQ_CT_MASK) + +/*! @name FRQMAX - TRNG0 Frequency Count Maximum Limit Register */ +#define TRNG_FRQMAX_FRQ_MAX_MASK (0x3FFFFFU) +#define TRNG_FRQMAX_FRQ_MAX_SHIFT (0U) +#define TRNG_FRQMAX_FRQ_MAX(x) (((uint32_t)(((uint32_t)(x)) << TRNG_FRQMAX_FRQ_MAX_SHIFT)) & TRNG_FRQMAX_FRQ_MAX_MASK) + +/*! @name SCMC - TRNG0 Statistical Check Monobit Count Register */ +#define TRNG_SCMC_MONO_CT_MASK (0xFFFFU) +#define TRNG_SCMC_MONO_CT_SHIFT (0U) +#define TRNG_SCMC_MONO_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCMC_MONO_CT_SHIFT)) & TRNG_SCMC_MONO_CT_MASK) + +/*! @name SCML - TRNG0 Statistical Check Monobit Limit Register */ +#define TRNG_SCML_MONO_MAX_MASK (0xFFFFU) +#define TRNG_SCML_MONO_MAX_SHIFT (0U) +#define TRNG_SCML_MONO_MAX(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCML_MONO_MAX_SHIFT)) & TRNG_SCML_MONO_MAX_MASK) +#define TRNG_SCML_MONO_RNG_MASK (0xFFFF0000U) +#define TRNG_SCML_MONO_RNG_SHIFT (16U) +#define TRNG_SCML_MONO_RNG(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCML_MONO_RNG_SHIFT)) & TRNG_SCML_MONO_RNG_MASK) + +/*! @name SCR1C - TRNG0 Statistical Check Run Length 1 Count Register */ +#define TRNG_SCR1C_R1_0_CT_MASK (0x7FFFU) +#define TRNG_SCR1C_R1_0_CT_SHIFT (0U) +#define TRNG_SCR1C_R1_0_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCR1C_R1_0_CT_SHIFT)) & TRNG_SCR1C_R1_0_CT_MASK) +#define TRNG_SCR1C_R1_1_CT_MASK (0x7FFF0000U) +#define TRNG_SCR1C_R1_1_CT_SHIFT (16U) +#define TRNG_SCR1C_R1_1_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCR1C_R1_1_CT_SHIFT)) & TRNG_SCR1C_R1_1_CT_MASK) + +/*! @name SCR1L - TRNG0 Statistical Check Run Length 1 Limit Register */ +#define TRNG_SCR1L_RUN1_MAX_MASK (0x7FFFU) +#define TRNG_SCR1L_RUN1_MAX_SHIFT (0U) +#define TRNG_SCR1L_RUN1_MAX(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCR1L_RUN1_MAX_SHIFT)) & TRNG_SCR1L_RUN1_MAX_MASK) +#define TRNG_SCR1L_RUN1_RNG_MASK (0x7FFF0000U) +#define TRNG_SCR1L_RUN1_RNG_SHIFT (16U) +#define TRNG_SCR1L_RUN1_RNG(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCR1L_RUN1_RNG_SHIFT)) & TRNG_SCR1L_RUN1_RNG_MASK) + +/*! @name SCR2C - TRNG0 Statistical Check Run Length 2 Count Register */ +#define TRNG_SCR2C_R2_0_CT_MASK (0x3FFFU) +#define TRNG_SCR2C_R2_0_CT_SHIFT (0U) +#define TRNG_SCR2C_R2_0_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCR2C_R2_0_CT_SHIFT)) & TRNG_SCR2C_R2_0_CT_MASK) +#define TRNG_SCR2C_R2_1_CT_MASK (0x3FFF0000U) +#define TRNG_SCR2C_R2_1_CT_SHIFT (16U) +#define TRNG_SCR2C_R2_1_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCR2C_R2_1_CT_SHIFT)) & TRNG_SCR2C_R2_1_CT_MASK) + +/*! @name SCR2L - TRNG0 Statistical Check Run Length 2 Limit Register */ +#define TRNG_SCR2L_RUN2_MAX_MASK (0x3FFFU) +#define TRNG_SCR2L_RUN2_MAX_SHIFT (0U) +#define TRNG_SCR2L_RUN2_MAX(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCR2L_RUN2_MAX_SHIFT)) & TRNG_SCR2L_RUN2_MAX_MASK) +#define TRNG_SCR2L_RUN2_RNG_MASK (0x3FFF0000U) +#define TRNG_SCR2L_RUN2_RNG_SHIFT (16U) +#define TRNG_SCR2L_RUN2_RNG(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCR2L_RUN2_RNG_SHIFT)) & TRNG_SCR2L_RUN2_RNG_MASK) + +/*! @name SCR3C - TRNG0 Statistical Check Run Length 3 Count Register */ +#define TRNG_SCR3C_R3_0_CT_MASK (0x1FFFU) +#define TRNG_SCR3C_R3_0_CT_SHIFT (0U) +#define TRNG_SCR3C_R3_0_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCR3C_R3_0_CT_SHIFT)) & TRNG_SCR3C_R3_0_CT_MASK) +#define TRNG_SCR3C_R3_1_CT_MASK (0x1FFF0000U) +#define TRNG_SCR3C_R3_1_CT_SHIFT (16U) +#define TRNG_SCR3C_R3_1_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCR3C_R3_1_CT_SHIFT)) & TRNG_SCR3C_R3_1_CT_MASK) + +/*! @name SCR3L - TRNG0 Statistical Check Run Length 3 Limit Register */ +#define TRNG_SCR3L_RUN3_MAX_MASK (0x1FFFU) +#define TRNG_SCR3L_RUN3_MAX_SHIFT (0U) +#define TRNG_SCR3L_RUN3_MAX(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCR3L_RUN3_MAX_SHIFT)) & TRNG_SCR3L_RUN3_MAX_MASK) +#define TRNG_SCR3L_RUN3_RNG_MASK (0x1FFF0000U) +#define TRNG_SCR3L_RUN3_RNG_SHIFT (16U) +#define TRNG_SCR3L_RUN3_RNG(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCR3L_RUN3_RNG_SHIFT)) & TRNG_SCR3L_RUN3_RNG_MASK) + +/*! @name SCR4C - TRNG0 Statistical Check Run Length 4 Count Register */ +#define TRNG_SCR4C_R4_0_CT_MASK (0xFFFU) +#define TRNG_SCR4C_R4_0_CT_SHIFT (0U) +#define TRNG_SCR4C_R4_0_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCR4C_R4_0_CT_SHIFT)) & TRNG_SCR4C_R4_0_CT_MASK) +#define TRNG_SCR4C_R4_1_CT_MASK (0xFFF0000U) +#define TRNG_SCR4C_R4_1_CT_SHIFT (16U) +#define TRNG_SCR4C_R4_1_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCR4C_R4_1_CT_SHIFT)) & TRNG_SCR4C_R4_1_CT_MASK) + +/*! @name SCR4L - TRNG0 Statistical Check Run Length 4 Limit Register */ +#define TRNG_SCR4L_RUN4_MAX_MASK (0xFFFU) +#define TRNG_SCR4L_RUN4_MAX_SHIFT (0U) +#define TRNG_SCR4L_RUN4_MAX(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCR4L_RUN4_MAX_SHIFT)) & TRNG_SCR4L_RUN4_MAX_MASK) +#define TRNG_SCR4L_RUN4_RNG_MASK (0xFFF0000U) +#define TRNG_SCR4L_RUN4_RNG_SHIFT (16U) +#define TRNG_SCR4L_RUN4_RNG(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCR4L_RUN4_RNG_SHIFT)) & TRNG_SCR4L_RUN4_RNG_MASK) + +/*! @name SCR5C - TRNG0 Statistical Check Run Length 5 Count Register */ +#define TRNG_SCR5C_R5_0_CT_MASK (0x7FFU) +#define TRNG_SCR5C_R5_0_CT_SHIFT (0U) +#define TRNG_SCR5C_R5_0_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCR5C_R5_0_CT_SHIFT)) & TRNG_SCR5C_R5_0_CT_MASK) +#define TRNG_SCR5C_R5_1_CT_MASK (0x7FF0000U) +#define TRNG_SCR5C_R5_1_CT_SHIFT (16U) +#define TRNG_SCR5C_R5_1_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCR5C_R5_1_CT_SHIFT)) & TRNG_SCR5C_R5_1_CT_MASK) + +/*! @name SCR5L - TRNG0 Statistical Check Run Length 5 Limit Register */ +#define TRNG_SCR5L_RUN5_MAX_MASK (0x7FFU) +#define TRNG_SCR5L_RUN5_MAX_SHIFT (0U) +#define TRNG_SCR5L_RUN5_MAX(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCR5L_RUN5_MAX_SHIFT)) & TRNG_SCR5L_RUN5_MAX_MASK) +#define TRNG_SCR5L_RUN5_RNG_MASK (0x7FF0000U) +#define TRNG_SCR5L_RUN5_RNG_SHIFT (16U) +#define TRNG_SCR5L_RUN5_RNG(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCR5L_RUN5_RNG_SHIFT)) & TRNG_SCR5L_RUN5_RNG_MASK) + +/*! @name SCR6PC - TRNG0 Statistical Check Run Length 6+ Count Register */ +#define TRNG_SCR6PC_R6P_0_CT_MASK (0x7FFU) +#define TRNG_SCR6PC_R6P_0_CT_SHIFT (0U) +#define TRNG_SCR6PC_R6P_0_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCR6PC_R6P_0_CT_SHIFT)) & TRNG_SCR6PC_R6P_0_CT_MASK) +#define TRNG_SCR6PC_R6P_1_CT_MASK (0x7FF0000U) +#define TRNG_SCR6PC_R6P_1_CT_SHIFT (16U) +#define TRNG_SCR6PC_R6P_1_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCR6PC_R6P_1_CT_SHIFT)) & TRNG_SCR6PC_R6P_1_CT_MASK) + +/*! @name SCR6PL - TRNG0 Statistical Check Run Length 6+ Limit Register */ +#define TRNG_SCR6PL_RUN6P_MAX_MASK (0x7FFU) +#define TRNG_SCR6PL_RUN6P_MAX_SHIFT (0U) +#define TRNG_SCR6PL_RUN6P_MAX(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCR6PL_RUN6P_MAX_SHIFT)) & TRNG_SCR6PL_RUN6P_MAX_MASK) +#define TRNG_SCR6PL_RUN6P_RNG_MASK (0x7FF0000U) +#define TRNG_SCR6PL_RUN6P_RNG_SHIFT (16U) +#define TRNG_SCR6PL_RUN6P_RNG(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SCR6PL_RUN6P_RNG_SHIFT)) & TRNG_SCR6PL_RUN6P_RNG_MASK) + +/*! @name STATUS - TRNG0 Status Register */ +#define TRNG_STATUS_TF1BR0_MASK (0x1U) +#define TRNG_STATUS_TF1BR0_SHIFT (0U) +#define TRNG_STATUS_TF1BR0(x) (((uint32_t)(((uint32_t)(x)) << TRNG_STATUS_TF1BR0_SHIFT)) & TRNG_STATUS_TF1BR0_MASK) +#define TRNG_STATUS_TF1BR1_MASK (0x2U) +#define TRNG_STATUS_TF1BR1_SHIFT (1U) +#define TRNG_STATUS_TF1BR1(x) (((uint32_t)(((uint32_t)(x)) << TRNG_STATUS_TF1BR1_SHIFT)) & TRNG_STATUS_TF1BR1_MASK) +#define TRNG_STATUS_TF2BR0_MASK (0x4U) +#define TRNG_STATUS_TF2BR0_SHIFT (2U) +#define TRNG_STATUS_TF2BR0(x) (((uint32_t)(((uint32_t)(x)) << TRNG_STATUS_TF2BR0_SHIFT)) & TRNG_STATUS_TF2BR0_MASK) +#define TRNG_STATUS_TF2BR1_MASK (0x8U) +#define TRNG_STATUS_TF2BR1_SHIFT (3U) +#define TRNG_STATUS_TF2BR1(x) (((uint32_t)(((uint32_t)(x)) << TRNG_STATUS_TF2BR1_SHIFT)) & TRNG_STATUS_TF2BR1_MASK) +#define TRNG_STATUS_TF3BR0_MASK (0x10U) +#define TRNG_STATUS_TF3BR0_SHIFT (4U) +#define TRNG_STATUS_TF3BR0(x) (((uint32_t)(((uint32_t)(x)) << TRNG_STATUS_TF3BR0_SHIFT)) & TRNG_STATUS_TF3BR0_MASK) +#define TRNG_STATUS_TF3BR1_MASK (0x20U) +#define TRNG_STATUS_TF3BR1_SHIFT (5U) +#define TRNG_STATUS_TF3BR1(x) (((uint32_t)(((uint32_t)(x)) << TRNG_STATUS_TF3BR1_SHIFT)) & TRNG_STATUS_TF3BR1_MASK) +#define TRNG_STATUS_TF4BR0_MASK (0x40U) +#define TRNG_STATUS_TF4BR0_SHIFT (6U) +#define TRNG_STATUS_TF4BR0(x) (((uint32_t)(((uint32_t)(x)) << TRNG_STATUS_TF4BR0_SHIFT)) & TRNG_STATUS_TF4BR0_MASK) +#define TRNG_STATUS_TF4BR1_MASK (0x80U) +#define TRNG_STATUS_TF4BR1_SHIFT (7U) +#define TRNG_STATUS_TF4BR1(x) (((uint32_t)(((uint32_t)(x)) << TRNG_STATUS_TF4BR1_SHIFT)) & TRNG_STATUS_TF4BR1_MASK) +#define TRNG_STATUS_TF5BR0_MASK (0x100U) +#define TRNG_STATUS_TF5BR0_SHIFT (8U) +#define TRNG_STATUS_TF5BR0(x) (((uint32_t)(((uint32_t)(x)) << TRNG_STATUS_TF5BR0_SHIFT)) & TRNG_STATUS_TF5BR0_MASK) +#define TRNG_STATUS_TF5BR1_MASK (0x200U) +#define TRNG_STATUS_TF5BR1_SHIFT (9U) +#define TRNG_STATUS_TF5BR1(x) (((uint32_t)(((uint32_t)(x)) << TRNG_STATUS_TF5BR1_SHIFT)) & TRNG_STATUS_TF5BR1_MASK) +#define TRNG_STATUS_TF6PBR0_MASK (0x400U) +#define TRNG_STATUS_TF6PBR0_SHIFT (10U) +#define TRNG_STATUS_TF6PBR0(x) (((uint32_t)(((uint32_t)(x)) << TRNG_STATUS_TF6PBR0_SHIFT)) & TRNG_STATUS_TF6PBR0_MASK) +#define TRNG_STATUS_TF6PBR1_MASK (0x800U) +#define TRNG_STATUS_TF6PBR1_SHIFT (11U) +#define TRNG_STATUS_TF6PBR1(x) (((uint32_t)(((uint32_t)(x)) << TRNG_STATUS_TF6PBR1_SHIFT)) & TRNG_STATUS_TF6PBR1_MASK) +#define TRNG_STATUS_TFSB_MASK (0x1000U) +#define TRNG_STATUS_TFSB_SHIFT (12U) +#define TRNG_STATUS_TFSB(x) (((uint32_t)(((uint32_t)(x)) << TRNG_STATUS_TFSB_SHIFT)) & TRNG_STATUS_TFSB_MASK) +#define TRNG_STATUS_TFLR_MASK (0x2000U) +#define TRNG_STATUS_TFLR_SHIFT (13U) +#define TRNG_STATUS_TFLR(x) (((uint32_t)(((uint32_t)(x)) << TRNG_STATUS_TFLR_SHIFT)) & TRNG_STATUS_TFLR_MASK) +#define TRNG_STATUS_TFP_MASK (0x4000U) +#define TRNG_STATUS_TFP_SHIFT (14U) +#define TRNG_STATUS_TFP(x) (((uint32_t)(((uint32_t)(x)) << TRNG_STATUS_TFP_SHIFT)) & TRNG_STATUS_TFP_MASK) +#define TRNG_STATUS_TFMB_MASK (0x8000U) +#define TRNG_STATUS_TFMB_SHIFT (15U) +#define TRNG_STATUS_TFMB(x) (((uint32_t)(((uint32_t)(x)) << TRNG_STATUS_TFMB_SHIFT)) & TRNG_STATUS_TFMB_MASK) +#define TRNG_STATUS_RETRY_CT_MASK (0xF0000U) +#define TRNG_STATUS_RETRY_CT_SHIFT (16U) +#define TRNG_STATUS_RETRY_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_STATUS_RETRY_CT_SHIFT)) & TRNG_STATUS_RETRY_CT_MASK) + +/*! @name ENT - RNG TRNG Entropy Read Register */ +#define TRNG_ENT_ENT_MASK (0xFFFFFFFFU) +#define TRNG_ENT_ENT_SHIFT (0U) +#define TRNG_ENT_ENT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_ENT_ENT_SHIFT)) & TRNG_ENT_ENT_MASK) + +/* The count of TRNG_ENT */ +#define TRNG_ENT_COUNT (16U) + +/*! @name PKRCNT10 - TRNG0 Statistical Check Poker Count 1 and 0 Register */ +#define TRNG_PKRCNT10_PKR_0_CT_MASK (0xFFFFU) +#define TRNG_PKRCNT10_PKR_0_CT_SHIFT (0U) +#define TRNG_PKRCNT10_PKR_0_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_PKRCNT10_PKR_0_CT_SHIFT)) & TRNG_PKRCNT10_PKR_0_CT_MASK) +#define TRNG_PKRCNT10_PKR_1_CT_MASK (0xFFFF0000U) +#define TRNG_PKRCNT10_PKR_1_CT_SHIFT (16U) +#define TRNG_PKRCNT10_PKR_1_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_PKRCNT10_PKR_1_CT_SHIFT)) & TRNG_PKRCNT10_PKR_1_CT_MASK) + +/*! @name PKRCNT32 - TRNG0 Statistical Check Poker Count 3 and 2 Register */ +#define TRNG_PKRCNT32_PKR_2_CT_MASK (0xFFFFU) +#define TRNG_PKRCNT32_PKR_2_CT_SHIFT (0U) +#define TRNG_PKRCNT32_PKR_2_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_PKRCNT32_PKR_2_CT_SHIFT)) & TRNG_PKRCNT32_PKR_2_CT_MASK) +#define TRNG_PKRCNT32_PKR_3_CT_MASK (0xFFFF0000U) +#define TRNG_PKRCNT32_PKR_3_CT_SHIFT (16U) +#define TRNG_PKRCNT32_PKR_3_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_PKRCNT32_PKR_3_CT_SHIFT)) & TRNG_PKRCNT32_PKR_3_CT_MASK) + +/*! @name PKRCNT54 - TRNG0 Statistical Check Poker Count 5 and 4 Register */ +#define TRNG_PKRCNT54_PKR_4_CT_MASK (0xFFFFU) +#define TRNG_PKRCNT54_PKR_4_CT_SHIFT (0U) +#define TRNG_PKRCNT54_PKR_4_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_PKRCNT54_PKR_4_CT_SHIFT)) & TRNG_PKRCNT54_PKR_4_CT_MASK) +#define TRNG_PKRCNT54_PKR_5_CT_MASK (0xFFFF0000U) +#define TRNG_PKRCNT54_PKR_5_CT_SHIFT (16U) +#define TRNG_PKRCNT54_PKR_5_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_PKRCNT54_PKR_5_CT_SHIFT)) & TRNG_PKRCNT54_PKR_5_CT_MASK) + +/*! @name PKRCNT76 - TRNG0 Statistical Check Poker Count 7 and 6 Register */ +#define TRNG_PKRCNT76_PKR_6_CT_MASK (0xFFFFU) +#define TRNG_PKRCNT76_PKR_6_CT_SHIFT (0U) +#define TRNG_PKRCNT76_PKR_6_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_PKRCNT76_PKR_6_CT_SHIFT)) & TRNG_PKRCNT76_PKR_6_CT_MASK) +#define TRNG_PKRCNT76_PKR_7_CT_MASK (0xFFFF0000U) +#define TRNG_PKRCNT76_PKR_7_CT_SHIFT (16U) +#define TRNG_PKRCNT76_PKR_7_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_PKRCNT76_PKR_7_CT_SHIFT)) & TRNG_PKRCNT76_PKR_7_CT_MASK) + +/*! @name PKRCNT98 - TRNG0 Statistical Check Poker Count 9 and 8 Register */ +#define TRNG_PKRCNT98_PKR_8_CT_MASK (0xFFFFU) +#define TRNG_PKRCNT98_PKR_8_CT_SHIFT (0U) +#define TRNG_PKRCNT98_PKR_8_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_PKRCNT98_PKR_8_CT_SHIFT)) & TRNG_PKRCNT98_PKR_8_CT_MASK) +#define TRNG_PKRCNT98_PKR_9_CT_MASK (0xFFFF0000U) +#define TRNG_PKRCNT98_PKR_9_CT_SHIFT (16U) +#define TRNG_PKRCNT98_PKR_9_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_PKRCNT98_PKR_9_CT_SHIFT)) & TRNG_PKRCNT98_PKR_9_CT_MASK) + +/*! @name PKRCNTBA - TRNG0 Statistical Check Poker Count B and A Register */ +#define TRNG_PKRCNTBA_PKR_A_CT_MASK (0xFFFFU) +#define TRNG_PKRCNTBA_PKR_A_CT_SHIFT (0U) +#define TRNG_PKRCNTBA_PKR_A_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_PKRCNTBA_PKR_A_CT_SHIFT)) & TRNG_PKRCNTBA_PKR_A_CT_MASK) +#define TRNG_PKRCNTBA_PKR_B_CT_MASK (0xFFFF0000U) +#define TRNG_PKRCNTBA_PKR_B_CT_SHIFT (16U) +#define TRNG_PKRCNTBA_PKR_B_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_PKRCNTBA_PKR_B_CT_SHIFT)) & TRNG_PKRCNTBA_PKR_B_CT_MASK) + +/*! @name PKRCNTDC - TRNG0 Statistical Check Poker Count D and C Register */ +#define TRNG_PKRCNTDC_PKR_C_CT_MASK (0xFFFFU) +#define TRNG_PKRCNTDC_PKR_C_CT_SHIFT (0U) +#define TRNG_PKRCNTDC_PKR_C_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_PKRCNTDC_PKR_C_CT_SHIFT)) & TRNG_PKRCNTDC_PKR_C_CT_MASK) +#define TRNG_PKRCNTDC_PKR_D_CT_MASK (0xFFFF0000U) +#define TRNG_PKRCNTDC_PKR_D_CT_SHIFT (16U) +#define TRNG_PKRCNTDC_PKR_D_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_PKRCNTDC_PKR_D_CT_SHIFT)) & TRNG_PKRCNTDC_PKR_D_CT_MASK) + +/*! @name PKRCNTFE - TRNG0 Statistical Check Poker Count F and E Register */ +#define TRNG_PKRCNTFE_PKR_E_CT_MASK (0xFFFFU) +#define TRNG_PKRCNTFE_PKR_E_CT_SHIFT (0U) +#define TRNG_PKRCNTFE_PKR_E_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_PKRCNTFE_PKR_E_CT_SHIFT)) & TRNG_PKRCNTFE_PKR_E_CT_MASK) +#define TRNG_PKRCNTFE_PKR_F_CT_MASK (0xFFFF0000U) +#define TRNG_PKRCNTFE_PKR_F_CT_SHIFT (16U) +#define TRNG_PKRCNTFE_PKR_F_CT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_PKRCNTFE_PKR_F_CT_SHIFT)) & TRNG_PKRCNTFE_PKR_F_CT_MASK) + +/*! @name SEC_CFG - TRNG0 Security Configuration Register */ +#define TRNG_SEC_CFG_SH0_MASK (0x1U) +#define TRNG_SEC_CFG_SH0_SHIFT (0U) +#define TRNG_SEC_CFG_SH0(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SEC_CFG_SH0_SHIFT)) & TRNG_SEC_CFG_SH0_MASK) +#define TRNG_SEC_CFG_NO_PRGM_MASK (0x2U) +#define TRNG_SEC_CFG_NO_PRGM_SHIFT (1U) +#define TRNG_SEC_CFG_NO_PRGM(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SEC_CFG_NO_PRGM_SHIFT)) & TRNG_SEC_CFG_NO_PRGM_MASK) +#define TRNG_SEC_CFG_SK_VAL_MASK (0x4U) +#define TRNG_SEC_CFG_SK_VAL_SHIFT (2U) +#define TRNG_SEC_CFG_SK_VAL(x) (((uint32_t)(((uint32_t)(x)) << TRNG_SEC_CFG_SK_VAL_SHIFT)) & TRNG_SEC_CFG_SK_VAL_MASK) + +/*! @name INT_CTRL - TRNG0 Interrupt Control Register */ +#define TRNG_INT_CTRL_HW_ERR_MASK (0x1U) +#define TRNG_INT_CTRL_HW_ERR_SHIFT (0U) +#define TRNG_INT_CTRL_HW_ERR(x) (((uint32_t)(((uint32_t)(x)) << TRNG_INT_CTRL_HW_ERR_SHIFT)) & TRNG_INT_CTRL_HW_ERR_MASK) +#define TRNG_INT_CTRL_ENT_VAL_MASK (0x2U) +#define TRNG_INT_CTRL_ENT_VAL_SHIFT (1U) +#define TRNG_INT_CTRL_ENT_VAL(x) (((uint32_t)(((uint32_t)(x)) << TRNG_INT_CTRL_ENT_VAL_SHIFT)) & TRNG_INT_CTRL_ENT_VAL_MASK) +#define TRNG_INT_CTRL_FRQ_CT_FAIL_MASK (0x4U) +#define TRNG_INT_CTRL_FRQ_CT_FAIL_SHIFT (2U) +#define TRNG_INT_CTRL_FRQ_CT_FAIL(x) (((uint32_t)(((uint32_t)(x)) << TRNG_INT_CTRL_FRQ_CT_FAIL_SHIFT)) & TRNG_INT_CTRL_FRQ_CT_FAIL_MASK) +#define TRNG_INT_CTRL_UNUSED_MASK (0xFFFFFFF8U) +#define TRNG_INT_CTRL_UNUSED_SHIFT (3U) +#define TRNG_INT_CTRL_UNUSED(x) (((uint32_t)(((uint32_t)(x)) << TRNG_INT_CTRL_UNUSED_SHIFT)) & TRNG_INT_CTRL_UNUSED_MASK) + +/*! @name INT_MASK - TRNG0 Mask Register */ +#define TRNG_INT_MASK_HW_ERR_MASK (0x1U) +#define TRNG_INT_MASK_HW_ERR_SHIFT (0U) +#define TRNG_INT_MASK_HW_ERR(x) (((uint32_t)(((uint32_t)(x)) << TRNG_INT_MASK_HW_ERR_SHIFT)) & TRNG_INT_MASK_HW_ERR_MASK) +#define TRNG_INT_MASK_ENT_VAL_MASK (0x2U) +#define TRNG_INT_MASK_ENT_VAL_SHIFT (1U) +#define TRNG_INT_MASK_ENT_VAL(x) (((uint32_t)(((uint32_t)(x)) << TRNG_INT_MASK_ENT_VAL_SHIFT)) & TRNG_INT_MASK_ENT_VAL_MASK) +#define TRNG_INT_MASK_FRQ_CT_FAIL_MASK (0x4U) +#define TRNG_INT_MASK_FRQ_CT_FAIL_SHIFT (2U) +#define TRNG_INT_MASK_FRQ_CT_FAIL(x) (((uint32_t)(((uint32_t)(x)) << TRNG_INT_MASK_FRQ_CT_FAIL_SHIFT)) & TRNG_INT_MASK_FRQ_CT_FAIL_MASK) + +/*! @name INT_STATUS - TRNG0 Interrupt Status Register */ +#define TRNG_INT_STATUS_HW_ERR_MASK (0x1U) +#define TRNG_INT_STATUS_HW_ERR_SHIFT (0U) +#define TRNG_INT_STATUS_HW_ERR(x) (((uint32_t)(((uint32_t)(x)) << TRNG_INT_STATUS_HW_ERR_SHIFT)) & TRNG_INT_STATUS_HW_ERR_MASK) +#define TRNG_INT_STATUS_ENT_VAL_MASK (0x2U) +#define TRNG_INT_STATUS_ENT_VAL_SHIFT (1U) +#define TRNG_INT_STATUS_ENT_VAL(x) (((uint32_t)(((uint32_t)(x)) << TRNG_INT_STATUS_ENT_VAL_SHIFT)) & TRNG_INT_STATUS_ENT_VAL_MASK) +#define TRNG_INT_STATUS_FRQ_CT_FAIL_MASK (0x4U) +#define TRNG_INT_STATUS_FRQ_CT_FAIL_SHIFT (2U) +#define TRNG_INT_STATUS_FRQ_CT_FAIL(x) (((uint32_t)(((uint32_t)(x)) << TRNG_INT_STATUS_FRQ_CT_FAIL_SHIFT)) & TRNG_INT_STATUS_FRQ_CT_FAIL_MASK) + +/*! @name VID1 - TRNG0 Version ID Register (MS) */ +#define TRNG_VID1_TRNG0_MIN_REV_MASK (0xFFU) +#define TRNG_VID1_TRNG0_MIN_REV_SHIFT (0U) +#define TRNG_VID1_TRNG0_MIN_REV(x) (((uint32_t)(((uint32_t)(x)) << TRNG_VID1_TRNG0_MIN_REV_SHIFT)) & TRNG_VID1_TRNG0_MIN_REV_MASK) +#define TRNG_VID1_TRNG0_MAJ_REV_MASK (0xFF00U) +#define TRNG_VID1_TRNG0_MAJ_REV_SHIFT (8U) +#define TRNG_VID1_TRNG0_MAJ_REV(x) (((uint32_t)(((uint32_t)(x)) << TRNG_VID1_TRNG0_MAJ_REV_SHIFT)) & TRNG_VID1_TRNG0_MAJ_REV_MASK) +#define TRNG_VID1_TRNG0_IP_ID_MASK (0xFFFF0000U) +#define TRNG_VID1_TRNG0_IP_ID_SHIFT (16U) +#define TRNG_VID1_TRNG0_IP_ID(x) (((uint32_t)(((uint32_t)(x)) << TRNG_VID1_TRNG0_IP_ID_SHIFT)) & TRNG_VID1_TRNG0_IP_ID_MASK) + +/*! @name VID2 - TRNG0 Version ID Register (LS) */ +#define TRNG_VID2_TRNG0_CONFIG_OPT_MASK (0xFFU) +#define TRNG_VID2_TRNG0_CONFIG_OPT_SHIFT (0U) +#define TRNG_VID2_TRNG0_CONFIG_OPT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_VID2_TRNG0_CONFIG_OPT_SHIFT)) & TRNG_VID2_TRNG0_CONFIG_OPT_MASK) +#define TRNG_VID2_TRNG0_ECO_REV_MASK (0xFF00U) +#define TRNG_VID2_TRNG0_ECO_REV_SHIFT (8U) +#define TRNG_VID2_TRNG0_ECO_REV(x) (((uint32_t)(((uint32_t)(x)) << TRNG_VID2_TRNG0_ECO_REV_SHIFT)) & TRNG_VID2_TRNG0_ECO_REV_MASK) +#define TRNG_VID2_TRNG0_INTG_OPT_MASK (0xFF0000U) +#define TRNG_VID2_TRNG0_INTG_OPT_SHIFT (16U) +#define TRNG_VID2_TRNG0_INTG_OPT(x) (((uint32_t)(((uint32_t)(x)) << TRNG_VID2_TRNG0_INTG_OPT_SHIFT)) & TRNG_VID2_TRNG0_INTG_OPT_MASK) +#define TRNG_VID2_TRNG0_ERA_MASK (0xFF000000U) +#define TRNG_VID2_TRNG0_ERA_SHIFT (24U) +#define TRNG_VID2_TRNG0_ERA(x) (((uint32_t)(((uint32_t)(x)) << TRNG_VID2_TRNG0_ERA_SHIFT)) & TRNG_VID2_TRNG0_ERA_MASK) + + +/*! + * @} + */ /* end of group TRNG_Register_Masks */ + + +/* TRNG - Peripheral instance base addresses */ +/** Peripheral TRNG0 base address */ +#define TRNG0_BASE (0x40025000u) +/** Peripheral TRNG0 base pointer */ +#define TRNG0 ((TRNG_Type *)TRNG0_BASE) +/** Array initializer of TRNG peripheral base addresses */ +#define TRNG_BASE_ADDRS { TRNG0_BASE } +/** Array initializer of TRNG peripheral base pointers */ +#define TRNG_BASE_PTRS { TRNG0 } +/** Interrupt vectors for the TRNG peripheral type */ +#define TRNG_IRQS { TRNG0_IRQn } + +/*! + * @} + */ /* end of group TRNG_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- TSI Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup TSI_Peripheral_Access_Layer TSI Peripheral Access Layer + * @{ + */ + +/** TSI - Register Layout Typedef */ +typedef struct { + __IO uint32_t GENCS; /**< TSI General Control and Status Register, offset: 0x0 */ + __IO uint32_t DATA; /**< TSI DATA Register, offset: 0x4 */ + __IO uint32_t TSHD; /**< TSI Threshold Register, offset: 0x8 */ +} TSI_Type; + +/* ---------------------------------------------------------------------------- + -- TSI Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup TSI_Register_Masks TSI Register Masks + * @{ + */ + +/*! @name GENCS - TSI General Control and Status Register */ +#define TSI_GENCS_EOSDMEO_MASK (0x1U) +#define TSI_GENCS_EOSDMEO_SHIFT (0U) +#define TSI_GENCS_EOSDMEO(x) (((uint32_t)(((uint32_t)(x)) << TSI_GENCS_EOSDMEO_SHIFT)) & TSI_GENCS_EOSDMEO_MASK) +#define TSI_GENCS_CURSW_MASK (0x2U) +#define TSI_GENCS_CURSW_SHIFT (1U) +#define TSI_GENCS_CURSW(x) (((uint32_t)(((uint32_t)(x)) << TSI_GENCS_CURSW_SHIFT)) & TSI_GENCS_CURSW_MASK) +#define TSI_GENCS_EOSF_MASK (0x4U) +#define TSI_GENCS_EOSF_SHIFT (2U) +#define TSI_GENCS_EOSF(x) (((uint32_t)(((uint32_t)(x)) << TSI_GENCS_EOSF_SHIFT)) & TSI_GENCS_EOSF_MASK) +#define TSI_GENCS_SCNIP_MASK (0x8U) +#define TSI_GENCS_SCNIP_SHIFT (3U) +#define TSI_GENCS_SCNIP(x) (((uint32_t)(((uint32_t)(x)) << TSI_GENCS_SCNIP_SHIFT)) & TSI_GENCS_SCNIP_MASK) +#define TSI_GENCS_STM_MASK (0x10U) +#define TSI_GENCS_STM_SHIFT (4U) +#define TSI_GENCS_STM(x) (((uint32_t)(((uint32_t)(x)) << TSI_GENCS_STM_SHIFT)) & TSI_GENCS_STM_MASK) +#define TSI_GENCS_STPE_MASK (0x20U) +#define TSI_GENCS_STPE_SHIFT (5U) +#define TSI_GENCS_STPE(x) (((uint32_t)(((uint32_t)(x)) << TSI_GENCS_STPE_SHIFT)) & TSI_GENCS_STPE_MASK) +#define TSI_GENCS_TSIIEN_MASK (0x40U) +#define TSI_GENCS_TSIIEN_SHIFT (6U) +#define TSI_GENCS_TSIIEN(x) (((uint32_t)(((uint32_t)(x)) << TSI_GENCS_TSIIEN_SHIFT)) & TSI_GENCS_TSIIEN_MASK) +#define TSI_GENCS_TSIEN_MASK (0x80U) +#define TSI_GENCS_TSIEN_SHIFT (7U) +#define TSI_GENCS_TSIEN(x) (((uint32_t)(((uint32_t)(x)) << TSI_GENCS_TSIEN_SHIFT)) & TSI_GENCS_TSIEN_MASK) +#define TSI_GENCS_NSCN_MASK (0x1F00U) +#define TSI_GENCS_NSCN_SHIFT (8U) +#define TSI_GENCS_NSCN(x) (((uint32_t)(((uint32_t)(x)) << TSI_GENCS_NSCN_SHIFT)) & TSI_GENCS_NSCN_MASK) +#define TSI_GENCS_PS_MASK (0xE000U) +#define TSI_GENCS_PS_SHIFT (13U) +#define TSI_GENCS_PS(x) (((uint32_t)(((uint32_t)(x)) << TSI_GENCS_PS_SHIFT)) & TSI_GENCS_PS_MASK) +#define TSI_GENCS_EXTCHRG_MASK (0x70000U) +#define TSI_GENCS_EXTCHRG_SHIFT (16U) +#define TSI_GENCS_EXTCHRG(x) (((uint32_t)(((uint32_t)(x)) << TSI_GENCS_EXTCHRG_SHIFT)) & TSI_GENCS_EXTCHRG_MASK) +#define TSI_GENCS_DVOLT_MASK (0x180000U) +#define TSI_GENCS_DVOLT_SHIFT (19U) +#define TSI_GENCS_DVOLT(x) (((uint32_t)(((uint32_t)(x)) << TSI_GENCS_DVOLT_SHIFT)) & TSI_GENCS_DVOLT_MASK) +#define TSI_GENCS_REFCHRG_MASK (0xE00000U) +#define TSI_GENCS_REFCHRG_SHIFT (21U) +#define TSI_GENCS_REFCHRG(x) (((uint32_t)(((uint32_t)(x)) << TSI_GENCS_REFCHRG_SHIFT)) & TSI_GENCS_REFCHRG_MASK) +#define TSI_GENCS_MODE_MASK (0xF000000U) +#define TSI_GENCS_MODE_SHIFT (24U) +#define TSI_GENCS_MODE(x) (((uint32_t)(((uint32_t)(x)) << TSI_GENCS_MODE_SHIFT)) & TSI_GENCS_MODE_MASK) +#define TSI_GENCS_ESOR_MASK (0x10000000U) +#define TSI_GENCS_ESOR_SHIFT (28U) +#define TSI_GENCS_ESOR(x) (((uint32_t)(((uint32_t)(x)) << TSI_GENCS_ESOR_SHIFT)) & TSI_GENCS_ESOR_MASK) +#define TSI_GENCS_OUTRGF_MASK (0x80000000U) +#define TSI_GENCS_OUTRGF_SHIFT (31U) +#define TSI_GENCS_OUTRGF(x) (((uint32_t)(((uint32_t)(x)) << TSI_GENCS_OUTRGF_SHIFT)) & TSI_GENCS_OUTRGF_MASK) + +/*! @name DATA - TSI DATA Register */ +#define TSI_DATA_TSICNT_MASK (0xFFFFU) +#define TSI_DATA_TSICNT_SHIFT (0U) +#define TSI_DATA_TSICNT(x) (((uint32_t)(((uint32_t)(x)) << TSI_DATA_TSICNT_SHIFT)) & TSI_DATA_TSICNT_MASK) +#define TSI_DATA_SWTS_MASK (0x400000U) +#define TSI_DATA_SWTS_SHIFT (22U) +#define TSI_DATA_SWTS(x) (((uint32_t)(((uint32_t)(x)) << TSI_DATA_SWTS_SHIFT)) & TSI_DATA_SWTS_MASK) +#define TSI_DATA_DMAEN_MASK (0x800000U) +#define TSI_DATA_DMAEN_SHIFT (23U) +#define TSI_DATA_DMAEN(x) (((uint32_t)(((uint32_t)(x)) << TSI_DATA_DMAEN_SHIFT)) & TSI_DATA_DMAEN_MASK) +#define TSI_DATA_TSICH_MASK (0xF0000000U) +#define TSI_DATA_TSICH_SHIFT (28U) +#define TSI_DATA_TSICH(x) (((uint32_t)(((uint32_t)(x)) << TSI_DATA_TSICH_SHIFT)) & TSI_DATA_TSICH_MASK) + +/*! @name TSHD - TSI Threshold Register */ +#define TSI_TSHD_THRESL_MASK (0xFFFFU) +#define TSI_TSHD_THRESL_SHIFT (0U) +#define TSI_TSHD_THRESL(x) (((uint32_t)(((uint32_t)(x)) << TSI_TSHD_THRESL_SHIFT)) & TSI_TSHD_THRESL_MASK) +#define TSI_TSHD_THRESH_MASK (0xFFFF0000U) +#define TSI_TSHD_THRESH_SHIFT (16U) +#define TSI_TSHD_THRESH(x) (((uint32_t)(((uint32_t)(x)) << TSI_TSHD_THRESH_SHIFT)) & TSI_TSHD_THRESH_MASK) + + +/*! + * @} + */ /* end of group TSI_Register_Masks */ + + +/* TSI - Peripheral instance base addresses */ +/** Peripheral TSI0 base address */ +#define TSI0_BASE (0x40045000u) +/** Peripheral TSI0 base pointer */ +#define TSI0 ((TSI_Type *)TSI0_BASE) +/** Array initializer of TSI peripheral base addresses */ +#define TSI_BASE_ADDRS { TSI0_BASE } +/** Array initializer of TSI peripheral base pointers */ +#define TSI_BASE_PTRS { TSI0 } +/** Interrupt vectors for the TSI peripheral type */ +#define TSI_IRQS { TSI0_IRQn } + +/*! + * @} + */ /* end of group TSI_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- USB Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup USB_Peripheral_Access_Layer USB Peripheral Access Layer + * @{ + */ + +/** USB - Register Layout Typedef */ +typedef struct { + __I uint8_t PERID; /**< Peripheral ID register, offset: 0x0 */ + uint8_t RESERVED_0[3]; + __I uint8_t IDCOMP; /**< Peripheral ID Complement register, offset: 0x4 */ + uint8_t RESERVED_1[3]; + __I uint8_t REV; /**< Peripheral Revision register, offset: 0x8 */ + uint8_t RESERVED_2[3]; + __I uint8_t ADDINFO; /**< Peripheral Additional Info register, offset: 0xC */ + uint8_t RESERVED_3[3]; + __IO uint8_t OTGISTAT; /**< OTG Interrupt Status register, offset: 0x10 */ + uint8_t RESERVED_4[3]; + __IO uint8_t OTGICR; /**< OTG Interrupt Control register, offset: 0x14 */ + uint8_t RESERVED_5[3]; + __IO uint8_t OTGSTAT; /**< OTG Status register, offset: 0x18 */ + uint8_t RESERVED_6[3]; + __IO uint8_t OTGCTL; /**< OTG Control register, offset: 0x1C */ + uint8_t RESERVED_7[99]; + __IO uint8_t ISTAT; /**< Interrupt Status register, offset: 0x80 */ + uint8_t RESERVED_8[3]; + __IO uint8_t INTEN; /**< Interrupt Enable register, offset: 0x84 */ + uint8_t RESERVED_9[3]; + __IO uint8_t ERRSTAT; /**< Error Interrupt Status register, offset: 0x88 */ + uint8_t RESERVED_10[3]; + __IO uint8_t ERREN; /**< Error Interrupt Enable register, offset: 0x8C */ + uint8_t RESERVED_11[3]; + __I uint8_t STAT; /**< Status register, offset: 0x90 */ + uint8_t RESERVED_12[3]; + __IO uint8_t CTL; /**< Control register, offset: 0x94 */ + uint8_t RESERVED_13[3]; + __IO uint8_t ADDR; /**< Address register, offset: 0x98 */ + uint8_t RESERVED_14[3]; + __IO uint8_t BDTPAGE1; /**< BDT Page register 1, offset: 0x9C */ + uint8_t RESERVED_15[3]; + __IO uint8_t FRMNUML; /**< Frame Number register Low, offset: 0xA0 */ + uint8_t RESERVED_16[3]; + __IO uint8_t FRMNUMH; /**< Frame Number register High, offset: 0xA4 */ + uint8_t RESERVED_17[3]; + __IO uint8_t TOKEN; /**< Token register, offset: 0xA8 */ + uint8_t RESERVED_18[3]; + __IO uint8_t SOFTHLD; /**< SOF Threshold register, offset: 0xAC */ + uint8_t RESERVED_19[3]; + __IO uint8_t BDTPAGE2; /**< BDT Page Register 2, offset: 0xB0 */ + uint8_t RESERVED_20[3]; + __IO uint8_t BDTPAGE3; /**< BDT Page Register 3, offset: 0xB4 */ + uint8_t RESERVED_21[11]; + struct { /* offset: 0xC0, array step: 0x4 */ + __IO uint8_t ENDPT; /**< Endpoint Control register, array offset: 0xC0, array step: 0x4 */ + uint8_t RESERVED_0[3]; + } ENDPOINT[16]; + __IO uint8_t USBCTRL; /**< USB Control register, offset: 0x100 */ + uint8_t RESERVED_22[3]; + __I uint8_t OBSERVE; /**< USB OTG Observe register, offset: 0x104 */ + uint8_t RESERVED_23[3]; + __IO uint8_t CONTROL; /**< USB OTG Control register, offset: 0x108 */ + uint8_t RESERVED_24[3]; + __IO uint8_t USBTRC0; /**< USB Transceiver Control register 0, offset: 0x10C */ + uint8_t RESERVED_25[7]; + __IO uint8_t USBFRMADJUST; /**< Frame Adjust Register, offset: 0x114 */ + uint8_t RESERVED_26[15]; + __IO uint8_t KEEP_ALIVE_CTRL; /**< Keep Alive mode control, offset: 0x124 */ + uint8_t RESERVED_27[3]; + __IO uint8_t KEEP_ALIVE_WKCTRL; /**< Keep Alive mode wakeup control, offset: 0x128 */ + uint8_t RESERVED_28[3]; + __IO uint8_t MISCCTRL; /**< Miscellaneous Control register, offset: 0x12C */ + uint8_t RESERVED_29[3]; + __IO uint8_t STALL_IL_DIS; /**< Peripheral mode stall disable for endpoints 7 to 0 in IN direction, offset: 0x130 */ + uint8_t RESERVED_30[3]; + __IO uint8_t STALL_IH_DIS; /**< Peripheral mode stall disable for endpoints 15 to 8 in IN direction, offset: 0x134 */ + uint8_t RESERVED_31[3]; + __IO uint8_t STALL_OL_DIS; /**< Peripheral mode stall disable for endpoints 7 to 0 in OUT direction, offset: 0x138 */ + uint8_t RESERVED_32[3]; + __IO uint8_t STALL_OH_DIS; /**< Peripheral mode stall disable for endpoints 15 to 8 in OUT direction, offset: 0x13C */ + uint8_t RESERVED_33[3]; + __IO uint8_t CLK_RECOVER_CTRL; /**< USB Clock recovery control, offset: 0x140 */ + uint8_t RESERVED_34[3]; + __IO uint8_t CLK_RECOVER_IRC_EN; /**< IRC48M oscillator enable register, offset: 0x144 */ + uint8_t RESERVED_35[15]; + __IO uint8_t CLK_RECOVER_INT_EN; /**< Clock recovery combined interrupt enable, offset: 0x154 */ + uint8_t RESERVED_36[7]; + __IO uint8_t CLK_RECOVER_INT_STATUS; /**< Clock recovery separated interrupt status, offset: 0x15C */ +} USB_Type; + +/* ---------------------------------------------------------------------------- + -- USB Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup USB_Register_Masks USB Register Masks + * @{ + */ + +/*! @name PERID - Peripheral ID register */ +#define USB_PERID_ID_MASK (0x3FU) +#define USB_PERID_ID_SHIFT (0U) +#define USB_PERID_ID(x) (((uint8_t)(((uint8_t)(x)) << USB_PERID_ID_SHIFT)) & USB_PERID_ID_MASK) + +/*! @name IDCOMP - Peripheral ID Complement register */ +#define USB_IDCOMP_NID_MASK (0x3FU) +#define USB_IDCOMP_NID_SHIFT (0U) +#define USB_IDCOMP_NID(x) (((uint8_t)(((uint8_t)(x)) << USB_IDCOMP_NID_SHIFT)) & USB_IDCOMP_NID_MASK) + +/*! @name REV - Peripheral Revision register */ +#define USB_REV_REV_MASK (0xFFU) +#define USB_REV_REV_SHIFT (0U) +#define USB_REV_REV(x) (((uint8_t)(((uint8_t)(x)) << USB_REV_REV_SHIFT)) & USB_REV_REV_MASK) + +/*! @name ADDINFO - Peripheral Additional Info register */ +#define USB_ADDINFO_IEHOST_MASK (0x1U) +#define USB_ADDINFO_IEHOST_SHIFT (0U) +#define USB_ADDINFO_IEHOST(x) (((uint8_t)(((uint8_t)(x)) << USB_ADDINFO_IEHOST_SHIFT)) & USB_ADDINFO_IEHOST_MASK) + +/*! @name OTGISTAT - OTG Interrupt Status register */ +#define USB_OTGISTAT_LINE_STATE_CHG_MASK (0x20U) +#define USB_OTGISTAT_LINE_STATE_CHG_SHIFT (5U) +#define USB_OTGISTAT_LINE_STATE_CHG(x) (((uint8_t)(((uint8_t)(x)) << USB_OTGISTAT_LINE_STATE_CHG_SHIFT)) & USB_OTGISTAT_LINE_STATE_CHG_MASK) +#define USB_OTGISTAT_ONEMSEC_MASK (0x40U) +#define USB_OTGISTAT_ONEMSEC_SHIFT (6U) +#define USB_OTGISTAT_ONEMSEC(x) (((uint8_t)(((uint8_t)(x)) << USB_OTGISTAT_ONEMSEC_SHIFT)) & USB_OTGISTAT_ONEMSEC_MASK) + +/*! @name OTGICR - OTG Interrupt Control register */ +#define USB_OTGICR_LINESTATEEN_MASK (0x20U) +#define USB_OTGICR_LINESTATEEN_SHIFT (5U) +#define USB_OTGICR_LINESTATEEN(x) (((uint8_t)(((uint8_t)(x)) << USB_OTGICR_LINESTATEEN_SHIFT)) & USB_OTGICR_LINESTATEEN_MASK) +#define USB_OTGICR_ONEMSECEN_MASK (0x40U) +#define USB_OTGICR_ONEMSECEN_SHIFT (6U) +#define USB_OTGICR_ONEMSECEN(x) (((uint8_t)(((uint8_t)(x)) << USB_OTGICR_ONEMSECEN_SHIFT)) & USB_OTGICR_ONEMSECEN_MASK) + +/*! @name OTGSTAT - OTG Status register */ +#define USB_OTGSTAT_LINESTATESTABLE_MASK (0x20U) +#define USB_OTGSTAT_LINESTATESTABLE_SHIFT (5U) +#define USB_OTGSTAT_LINESTATESTABLE(x) (((uint8_t)(((uint8_t)(x)) << USB_OTGSTAT_LINESTATESTABLE_SHIFT)) & USB_OTGSTAT_LINESTATESTABLE_MASK) +#define USB_OTGSTAT_ONEMSECEN_MASK (0x40U) +#define USB_OTGSTAT_ONEMSECEN_SHIFT (6U) +#define USB_OTGSTAT_ONEMSECEN(x) (((uint8_t)(((uint8_t)(x)) << USB_OTGSTAT_ONEMSECEN_SHIFT)) & USB_OTGSTAT_ONEMSECEN_MASK) + +/*! @name OTGCTL - OTG Control register */ +#define USB_OTGCTL_OTGEN_MASK (0x4U) +#define USB_OTGCTL_OTGEN_SHIFT (2U) +#define USB_OTGCTL_OTGEN(x) (((uint8_t)(((uint8_t)(x)) << USB_OTGCTL_OTGEN_SHIFT)) & USB_OTGCTL_OTGEN_MASK) +#define USB_OTGCTL_DMLOW_MASK (0x10U) +#define USB_OTGCTL_DMLOW_SHIFT (4U) +#define USB_OTGCTL_DMLOW(x) (((uint8_t)(((uint8_t)(x)) << USB_OTGCTL_DMLOW_SHIFT)) & USB_OTGCTL_DMLOW_MASK) +#define USB_OTGCTL_DPLOW_MASK (0x20U) +#define USB_OTGCTL_DPLOW_SHIFT (5U) +#define USB_OTGCTL_DPLOW(x) (((uint8_t)(((uint8_t)(x)) << USB_OTGCTL_DPLOW_SHIFT)) & USB_OTGCTL_DPLOW_MASK) +#define USB_OTGCTL_DPHIGH_MASK (0x80U) +#define USB_OTGCTL_DPHIGH_SHIFT (7U) +#define USB_OTGCTL_DPHIGH(x) (((uint8_t)(((uint8_t)(x)) << USB_OTGCTL_DPHIGH_SHIFT)) & USB_OTGCTL_DPHIGH_MASK) + +/*! @name ISTAT - Interrupt Status register */ +#define USB_ISTAT_USBRST_MASK (0x1U) +#define USB_ISTAT_USBRST_SHIFT (0U) +#define USB_ISTAT_USBRST(x) (((uint8_t)(((uint8_t)(x)) << USB_ISTAT_USBRST_SHIFT)) & USB_ISTAT_USBRST_MASK) +#define USB_ISTAT_ERROR_MASK (0x2U) +#define USB_ISTAT_ERROR_SHIFT (1U) +#define USB_ISTAT_ERROR(x) (((uint8_t)(((uint8_t)(x)) << USB_ISTAT_ERROR_SHIFT)) & USB_ISTAT_ERROR_MASK) +#define USB_ISTAT_SOFTOK_MASK (0x4U) +#define USB_ISTAT_SOFTOK_SHIFT (2U) +#define USB_ISTAT_SOFTOK(x) (((uint8_t)(((uint8_t)(x)) << USB_ISTAT_SOFTOK_SHIFT)) & USB_ISTAT_SOFTOK_MASK) +#define USB_ISTAT_TOKDNE_MASK (0x8U) +#define USB_ISTAT_TOKDNE_SHIFT (3U) +#define USB_ISTAT_TOKDNE(x) (((uint8_t)(((uint8_t)(x)) << USB_ISTAT_TOKDNE_SHIFT)) & USB_ISTAT_TOKDNE_MASK) +#define USB_ISTAT_SLEEP_MASK (0x10U) +#define USB_ISTAT_SLEEP_SHIFT (4U) +#define USB_ISTAT_SLEEP(x) (((uint8_t)(((uint8_t)(x)) << USB_ISTAT_SLEEP_SHIFT)) & USB_ISTAT_SLEEP_MASK) +#define USB_ISTAT_RESUME_MASK (0x20U) +#define USB_ISTAT_RESUME_SHIFT (5U) +#define USB_ISTAT_RESUME(x) (((uint8_t)(((uint8_t)(x)) << USB_ISTAT_RESUME_SHIFT)) & USB_ISTAT_RESUME_MASK) +#define USB_ISTAT_ATTACH_MASK (0x40U) +#define USB_ISTAT_ATTACH_SHIFT (6U) +#define USB_ISTAT_ATTACH(x) (((uint8_t)(((uint8_t)(x)) << USB_ISTAT_ATTACH_SHIFT)) & USB_ISTAT_ATTACH_MASK) +#define USB_ISTAT_STALL_MASK (0x80U) +#define USB_ISTAT_STALL_SHIFT (7U) +#define USB_ISTAT_STALL(x) (((uint8_t)(((uint8_t)(x)) << USB_ISTAT_STALL_SHIFT)) & USB_ISTAT_STALL_MASK) + +/*! @name INTEN - Interrupt Enable register */ +#define USB_INTEN_USBRSTEN_MASK (0x1U) +#define USB_INTEN_USBRSTEN_SHIFT (0U) +#define USB_INTEN_USBRSTEN(x) (((uint8_t)(((uint8_t)(x)) << USB_INTEN_USBRSTEN_SHIFT)) & USB_INTEN_USBRSTEN_MASK) +#define USB_INTEN_ERROREN_MASK (0x2U) +#define USB_INTEN_ERROREN_SHIFT (1U) +#define USB_INTEN_ERROREN(x) (((uint8_t)(((uint8_t)(x)) << USB_INTEN_ERROREN_SHIFT)) & USB_INTEN_ERROREN_MASK) +#define USB_INTEN_SOFTOKEN_MASK (0x4U) +#define USB_INTEN_SOFTOKEN_SHIFT (2U) +#define USB_INTEN_SOFTOKEN(x) (((uint8_t)(((uint8_t)(x)) << USB_INTEN_SOFTOKEN_SHIFT)) & USB_INTEN_SOFTOKEN_MASK) +#define USB_INTEN_TOKDNEEN_MASK (0x8U) +#define USB_INTEN_TOKDNEEN_SHIFT (3U) +#define USB_INTEN_TOKDNEEN(x) (((uint8_t)(((uint8_t)(x)) << USB_INTEN_TOKDNEEN_SHIFT)) & USB_INTEN_TOKDNEEN_MASK) +#define USB_INTEN_SLEEPEN_MASK (0x10U) +#define USB_INTEN_SLEEPEN_SHIFT (4U) +#define USB_INTEN_SLEEPEN(x) (((uint8_t)(((uint8_t)(x)) << USB_INTEN_SLEEPEN_SHIFT)) & USB_INTEN_SLEEPEN_MASK) +#define USB_INTEN_RESUMEEN_MASK (0x20U) +#define USB_INTEN_RESUMEEN_SHIFT (5U) +#define USB_INTEN_RESUMEEN(x) (((uint8_t)(((uint8_t)(x)) << USB_INTEN_RESUMEEN_SHIFT)) & USB_INTEN_RESUMEEN_MASK) +#define USB_INTEN_ATTACHEN_MASK (0x40U) +#define USB_INTEN_ATTACHEN_SHIFT (6U) +#define USB_INTEN_ATTACHEN(x) (((uint8_t)(((uint8_t)(x)) << USB_INTEN_ATTACHEN_SHIFT)) & USB_INTEN_ATTACHEN_MASK) +#define USB_INTEN_STALLEN_MASK (0x80U) +#define USB_INTEN_STALLEN_SHIFT (7U) +#define USB_INTEN_STALLEN(x) (((uint8_t)(((uint8_t)(x)) << USB_INTEN_STALLEN_SHIFT)) & USB_INTEN_STALLEN_MASK) + +/*! @name ERRSTAT - Error Interrupt Status register */ +#define USB_ERRSTAT_PIDERR_MASK (0x1U) +#define USB_ERRSTAT_PIDERR_SHIFT (0U) +#define USB_ERRSTAT_PIDERR(x) (((uint8_t)(((uint8_t)(x)) << USB_ERRSTAT_PIDERR_SHIFT)) & USB_ERRSTAT_PIDERR_MASK) +#define USB_ERRSTAT_CRC5EOF_MASK (0x2U) +#define USB_ERRSTAT_CRC5EOF_SHIFT (1U) +#define USB_ERRSTAT_CRC5EOF(x) (((uint8_t)(((uint8_t)(x)) << USB_ERRSTAT_CRC5EOF_SHIFT)) & USB_ERRSTAT_CRC5EOF_MASK) +#define USB_ERRSTAT_CRC16_MASK (0x4U) +#define USB_ERRSTAT_CRC16_SHIFT (2U) +#define USB_ERRSTAT_CRC16(x) (((uint8_t)(((uint8_t)(x)) << USB_ERRSTAT_CRC16_SHIFT)) & USB_ERRSTAT_CRC16_MASK) +#define USB_ERRSTAT_DFN8_MASK (0x8U) +#define USB_ERRSTAT_DFN8_SHIFT (3U) +#define USB_ERRSTAT_DFN8(x) (((uint8_t)(((uint8_t)(x)) << USB_ERRSTAT_DFN8_SHIFT)) & USB_ERRSTAT_DFN8_MASK) +#define USB_ERRSTAT_BTOERR_MASK (0x10U) +#define USB_ERRSTAT_BTOERR_SHIFT (4U) +#define USB_ERRSTAT_BTOERR(x) (((uint8_t)(((uint8_t)(x)) << USB_ERRSTAT_BTOERR_SHIFT)) & USB_ERRSTAT_BTOERR_MASK) +#define USB_ERRSTAT_DMAERR_MASK (0x20U) +#define USB_ERRSTAT_DMAERR_SHIFT (5U) +#define USB_ERRSTAT_DMAERR(x) (((uint8_t)(((uint8_t)(x)) << USB_ERRSTAT_DMAERR_SHIFT)) & USB_ERRSTAT_DMAERR_MASK) +#define USB_ERRSTAT_OWNERR_MASK (0x40U) +#define USB_ERRSTAT_OWNERR_SHIFT (6U) +#define USB_ERRSTAT_OWNERR(x) (((uint8_t)(((uint8_t)(x)) << USB_ERRSTAT_OWNERR_SHIFT)) & USB_ERRSTAT_OWNERR_MASK) +#define USB_ERRSTAT_BTSERR_MASK (0x80U) +#define USB_ERRSTAT_BTSERR_SHIFT (7U) +#define USB_ERRSTAT_BTSERR(x) (((uint8_t)(((uint8_t)(x)) << USB_ERRSTAT_BTSERR_SHIFT)) & USB_ERRSTAT_BTSERR_MASK) + +/*! @name ERREN - Error Interrupt Enable register */ +#define USB_ERREN_PIDERREN_MASK (0x1U) +#define USB_ERREN_PIDERREN_SHIFT (0U) +#define USB_ERREN_PIDERREN(x) (((uint8_t)(((uint8_t)(x)) << USB_ERREN_PIDERREN_SHIFT)) & USB_ERREN_PIDERREN_MASK) +#define USB_ERREN_CRC5EOFEN_MASK (0x2U) +#define USB_ERREN_CRC5EOFEN_SHIFT (1U) +#define USB_ERREN_CRC5EOFEN(x) (((uint8_t)(((uint8_t)(x)) << USB_ERREN_CRC5EOFEN_SHIFT)) & USB_ERREN_CRC5EOFEN_MASK) +#define USB_ERREN_CRC16EN_MASK (0x4U) +#define USB_ERREN_CRC16EN_SHIFT (2U) +#define USB_ERREN_CRC16EN(x) (((uint8_t)(((uint8_t)(x)) << USB_ERREN_CRC16EN_SHIFT)) & USB_ERREN_CRC16EN_MASK) +#define USB_ERREN_DFN8EN_MASK (0x8U) +#define USB_ERREN_DFN8EN_SHIFT (3U) +#define USB_ERREN_DFN8EN(x) (((uint8_t)(((uint8_t)(x)) << USB_ERREN_DFN8EN_SHIFT)) & USB_ERREN_DFN8EN_MASK) +#define USB_ERREN_BTOERREN_MASK (0x10U) +#define USB_ERREN_BTOERREN_SHIFT (4U) +#define USB_ERREN_BTOERREN(x) (((uint8_t)(((uint8_t)(x)) << USB_ERREN_BTOERREN_SHIFT)) & USB_ERREN_BTOERREN_MASK) +#define USB_ERREN_DMAERREN_MASK (0x20U) +#define USB_ERREN_DMAERREN_SHIFT (5U) +#define USB_ERREN_DMAERREN(x) (((uint8_t)(((uint8_t)(x)) << USB_ERREN_DMAERREN_SHIFT)) & USB_ERREN_DMAERREN_MASK) +#define USB_ERREN_OWNERREN_MASK (0x40U) +#define USB_ERREN_OWNERREN_SHIFT (6U) +#define USB_ERREN_OWNERREN(x) (((uint8_t)(((uint8_t)(x)) << USB_ERREN_OWNERREN_SHIFT)) & USB_ERREN_OWNERREN_MASK) +#define USB_ERREN_BTSERREN_MASK (0x80U) +#define USB_ERREN_BTSERREN_SHIFT (7U) +#define USB_ERREN_BTSERREN(x) (((uint8_t)(((uint8_t)(x)) << USB_ERREN_BTSERREN_SHIFT)) & USB_ERREN_BTSERREN_MASK) + +/*! @name STAT - Status register */ +#define USB_STAT_ODD_MASK (0x4U) +#define USB_STAT_ODD_SHIFT (2U) +#define USB_STAT_ODD(x) (((uint8_t)(((uint8_t)(x)) << USB_STAT_ODD_SHIFT)) & USB_STAT_ODD_MASK) +#define USB_STAT_TX_MASK (0x8U) +#define USB_STAT_TX_SHIFT (3U) +#define USB_STAT_TX(x) (((uint8_t)(((uint8_t)(x)) << USB_STAT_TX_SHIFT)) & USB_STAT_TX_MASK) +#define USB_STAT_ENDP_MASK (0xF0U) +#define USB_STAT_ENDP_SHIFT (4U) +#define USB_STAT_ENDP(x) (((uint8_t)(((uint8_t)(x)) << USB_STAT_ENDP_SHIFT)) & USB_STAT_ENDP_MASK) + +/*! @name CTL - Control register */ +#define USB_CTL_USBENSOFEN_MASK (0x1U) +#define USB_CTL_USBENSOFEN_SHIFT (0U) +#define USB_CTL_USBENSOFEN(x) (((uint8_t)(((uint8_t)(x)) << USB_CTL_USBENSOFEN_SHIFT)) & USB_CTL_USBENSOFEN_MASK) +#define USB_CTL_ODDRST_MASK (0x2U) +#define USB_CTL_ODDRST_SHIFT (1U) +#define USB_CTL_ODDRST(x) (((uint8_t)(((uint8_t)(x)) << USB_CTL_ODDRST_SHIFT)) & USB_CTL_ODDRST_MASK) +#define USB_CTL_RESUME_MASK (0x4U) +#define USB_CTL_RESUME_SHIFT (2U) +#define USB_CTL_RESUME(x) (((uint8_t)(((uint8_t)(x)) << USB_CTL_RESUME_SHIFT)) & USB_CTL_RESUME_MASK) +#define USB_CTL_HOSTMODEEN_MASK (0x8U) +#define USB_CTL_HOSTMODEEN_SHIFT (3U) +#define USB_CTL_HOSTMODEEN(x) (((uint8_t)(((uint8_t)(x)) << USB_CTL_HOSTMODEEN_SHIFT)) & USB_CTL_HOSTMODEEN_MASK) +#define USB_CTL_RESET_MASK (0x10U) +#define USB_CTL_RESET_SHIFT (4U) +#define USB_CTL_RESET(x) (((uint8_t)(((uint8_t)(x)) << USB_CTL_RESET_SHIFT)) & USB_CTL_RESET_MASK) +#define USB_CTL_TXSUSPENDTOKENBUSY_MASK (0x20U) +#define USB_CTL_TXSUSPENDTOKENBUSY_SHIFT (5U) +#define USB_CTL_TXSUSPENDTOKENBUSY(x) (((uint8_t)(((uint8_t)(x)) << USB_CTL_TXSUSPENDTOKENBUSY_SHIFT)) & USB_CTL_TXSUSPENDTOKENBUSY_MASK) +#define USB_CTL_SE0_MASK (0x40U) +#define USB_CTL_SE0_SHIFT (6U) +#define USB_CTL_SE0(x) (((uint8_t)(((uint8_t)(x)) << USB_CTL_SE0_SHIFT)) & USB_CTL_SE0_MASK) +#define USB_CTL_JSTATE_MASK (0x80U) +#define USB_CTL_JSTATE_SHIFT (7U) +#define USB_CTL_JSTATE(x) (((uint8_t)(((uint8_t)(x)) << USB_CTL_JSTATE_SHIFT)) & USB_CTL_JSTATE_MASK) + +/*! @name ADDR - Address register */ +#define USB_ADDR_ADDR_MASK (0x7FU) +#define USB_ADDR_ADDR_SHIFT (0U) +#define USB_ADDR_ADDR(x) (((uint8_t)(((uint8_t)(x)) << USB_ADDR_ADDR_SHIFT)) & USB_ADDR_ADDR_MASK) +#define USB_ADDR_LSEN_MASK (0x80U) +#define USB_ADDR_LSEN_SHIFT (7U) +#define USB_ADDR_LSEN(x) (((uint8_t)(((uint8_t)(x)) << USB_ADDR_LSEN_SHIFT)) & USB_ADDR_LSEN_MASK) + +/*! @name BDTPAGE1 - BDT Page register 1 */ +#define USB_BDTPAGE1_BDTBA_MASK (0xFEU) +#define USB_BDTPAGE1_BDTBA_SHIFT (1U) +#define USB_BDTPAGE1_BDTBA(x) (((uint8_t)(((uint8_t)(x)) << USB_BDTPAGE1_BDTBA_SHIFT)) & USB_BDTPAGE1_BDTBA_MASK) + +/*! @name FRMNUML - Frame Number register Low */ +#define USB_FRMNUML_FRM_MASK (0xFFU) +#define USB_FRMNUML_FRM_SHIFT (0U) +#define USB_FRMNUML_FRM(x) (((uint8_t)(((uint8_t)(x)) << USB_FRMNUML_FRM_SHIFT)) & USB_FRMNUML_FRM_MASK) + +/*! @name FRMNUMH - Frame Number register High */ +#define USB_FRMNUMH_FRM_MASK (0x7U) +#define USB_FRMNUMH_FRM_SHIFT (0U) +#define USB_FRMNUMH_FRM(x) (((uint8_t)(((uint8_t)(x)) << USB_FRMNUMH_FRM_SHIFT)) & USB_FRMNUMH_FRM_MASK) + +/*! @name TOKEN - Token register */ +#define USB_TOKEN_TOKENENDPT_MASK (0xFU) +#define USB_TOKEN_TOKENENDPT_SHIFT (0U) +#define USB_TOKEN_TOKENENDPT(x) (((uint8_t)(((uint8_t)(x)) << USB_TOKEN_TOKENENDPT_SHIFT)) & USB_TOKEN_TOKENENDPT_MASK) +#define USB_TOKEN_TOKENPID_MASK (0xF0U) +#define USB_TOKEN_TOKENPID_SHIFT (4U) +#define USB_TOKEN_TOKENPID(x) (((uint8_t)(((uint8_t)(x)) << USB_TOKEN_TOKENPID_SHIFT)) & USB_TOKEN_TOKENPID_MASK) + +/*! @name SOFTHLD - SOF Threshold register */ +#define USB_SOFTHLD_CNT_MASK (0xFFU) +#define USB_SOFTHLD_CNT_SHIFT (0U) +#define USB_SOFTHLD_CNT(x) (((uint8_t)(((uint8_t)(x)) << USB_SOFTHLD_CNT_SHIFT)) & USB_SOFTHLD_CNT_MASK) + +/*! @name BDTPAGE2 - BDT Page Register 2 */ +#define USB_BDTPAGE2_BDTBA_MASK (0xFFU) +#define USB_BDTPAGE2_BDTBA_SHIFT (0U) +#define USB_BDTPAGE2_BDTBA(x) (((uint8_t)(((uint8_t)(x)) << USB_BDTPAGE2_BDTBA_SHIFT)) & USB_BDTPAGE2_BDTBA_MASK) + +/*! @name BDTPAGE3 - BDT Page Register 3 */ +#define USB_BDTPAGE3_BDTBA_MASK (0xFFU) +#define USB_BDTPAGE3_BDTBA_SHIFT (0U) +#define USB_BDTPAGE3_BDTBA(x) (((uint8_t)(((uint8_t)(x)) << USB_BDTPAGE3_BDTBA_SHIFT)) & USB_BDTPAGE3_BDTBA_MASK) + +/*! @name ENDPT - Endpoint Control register */ +#define USB_ENDPT_EPHSHK_MASK (0x1U) +#define USB_ENDPT_EPHSHK_SHIFT (0U) +#define USB_ENDPT_EPHSHK(x) (((uint8_t)(((uint8_t)(x)) << USB_ENDPT_EPHSHK_SHIFT)) & USB_ENDPT_EPHSHK_MASK) +#define USB_ENDPT_EPSTALL_MASK (0x2U) +#define USB_ENDPT_EPSTALL_SHIFT (1U) +#define USB_ENDPT_EPSTALL(x) (((uint8_t)(((uint8_t)(x)) << USB_ENDPT_EPSTALL_SHIFT)) & USB_ENDPT_EPSTALL_MASK) +#define USB_ENDPT_EPTXEN_MASK (0x4U) +#define USB_ENDPT_EPTXEN_SHIFT (2U) +#define USB_ENDPT_EPTXEN(x) (((uint8_t)(((uint8_t)(x)) << USB_ENDPT_EPTXEN_SHIFT)) & USB_ENDPT_EPTXEN_MASK) +#define USB_ENDPT_EPRXEN_MASK (0x8U) +#define USB_ENDPT_EPRXEN_SHIFT (3U) +#define USB_ENDPT_EPRXEN(x) (((uint8_t)(((uint8_t)(x)) << USB_ENDPT_EPRXEN_SHIFT)) & USB_ENDPT_EPRXEN_MASK) +#define USB_ENDPT_EPCTLDIS_MASK (0x10U) +#define USB_ENDPT_EPCTLDIS_SHIFT (4U) +#define USB_ENDPT_EPCTLDIS(x) (((uint8_t)(((uint8_t)(x)) << USB_ENDPT_EPCTLDIS_SHIFT)) & USB_ENDPT_EPCTLDIS_MASK) +#define USB_ENDPT_RETRYDIS_MASK (0x40U) +#define USB_ENDPT_RETRYDIS_SHIFT (6U) +#define USB_ENDPT_RETRYDIS(x) (((uint8_t)(((uint8_t)(x)) << USB_ENDPT_RETRYDIS_SHIFT)) & USB_ENDPT_RETRYDIS_MASK) +#define USB_ENDPT_HOSTWOHUB_MASK (0x80U) +#define USB_ENDPT_HOSTWOHUB_SHIFT (7U) +#define USB_ENDPT_HOSTWOHUB(x) (((uint8_t)(((uint8_t)(x)) << USB_ENDPT_HOSTWOHUB_SHIFT)) & USB_ENDPT_HOSTWOHUB_MASK) + +/* The count of USB_ENDPT */ +#define USB_ENDPT_COUNT (16U) + +/*! @name USBCTRL - USB Control register */ +#define USB_USBCTRL_UARTSEL_MASK (0x10U) +#define USB_USBCTRL_UARTSEL_SHIFT (4U) +#define USB_USBCTRL_UARTSEL(x) (((uint8_t)(((uint8_t)(x)) << USB_USBCTRL_UARTSEL_SHIFT)) & USB_USBCTRL_UARTSEL_MASK) +#define USB_USBCTRL_UARTCHLS_MASK (0x20U) +#define USB_USBCTRL_UARTCHLS_SHIFT (5U) +#define USB_USBCTRL_UARTCHLS(x) (((uint8_t)(((uint8_t)(x)) << USB_USBCTRL_UARTCHLS_SHIFT)) & USB_USBCTRL_UARTCHLS_MASK) +#define USB_USBCTRL_PDE_MASK (0x40U) +#define USB_USBCTRL_PDE_SHIFT (6U) +#define USB_USBCTRL_PDE(x) (((uint8_t)(((uint8_t)(x)) << USB_USBCTRL_PDE_SHIFT)) & USB_USBCTRL_PDE_MASK) +#define USB_USBCTRL_SUSP_MASK (0x80U) +#define USB_USBCTRL_SUSP_SHIFT (7U) +#define USB_USBCTRL_SUSP(x) (((uint8_t)(((uint8_t)(x)) << USB_USBCTRL_SUSP_SHIFT)) & USB_USBCTRL_SUSP_MASK) + +/*! @name OBSERVE - USB OTG Observe register */ +#define USB_OBSERVE_DMPD_MASK (0x10U) +#define USB_OBSERVE_DMPD_SHIFT (4U) +#define USB_OBSERVE_DMPD(x) (((uint8_t)(((uint8_t)(x)) << USB_OBSERVE_DMPD_SHIFT)) & USB_OBSERVE_DMPD_MASK) +#define USB_OBSERVE_DPPD_MASK (0x40U) +#define USB_OBSERVE_DPPD_SHIFT (6U) +#define USB_OBSERVE_DPPD(x) (((uint8_t)(((uint8_t)(x)) << USB_OBSERVE_DPPD_SHIFT)) & USB_OBSERVE_DPPD_MASK) +#define USB_OBSERVE_DPPU_MASK (0x80U) +#define USB_OBSERVE_DPPU_SHIFT (7U) +#define USB_OBSERVE_DPPU(x) (((uint8_t)(((uint8_t)(x)) << USB_OBSERVE_DPPU_SHIFT)) & USB_OBSERVE_DPPU_MASK) + +/*! @name CONTROL - USB OTG Control register */ +#define USB_CONTROL_DPPULLUPNONOTG_MASK (0x10U) +#define USB_CONTROL_DPPULLUPNONOTG_SHIFT (4U) +#define USB_CONTROL_DPPULLUPNONOTG(x) (((uint8_t)(((uint8_t)(x)) << USB_CONTROL_DPPULLUPNONOTG_SHIFT)) & USB_CONTROL_DPPULLUPNONOTG_MASK) + +/*! @name USBTRC0 - USB Transceiver Control register 0 */ +#define USB_USBTRC0_USB_RESUME_INT_MASK (0x1U) +#define USB_USBTRC0_USB_RESUME_INT_SHIFT (0U) +#define USB_USBTRC0_USB_RESUME_INT(x) (((uint8_t)(((uint8_t)(x)) << USB_USBTRC0_USB_RESUME_INT_SHIFT)) & USB_USBTRC0_USB_RESUME_INT_MASK) +#define USB_USBTRC0_SYNC_DET_MASK (0x2U) +#define USB_USBTRC0_SYNC_DET_SHIFT (1U) +#define USB_USBTRC0_SYNC_DET(x) (((uint8_t)(((uint8_t)(x)) << USB_USBTRC0_SYNC_DET_SHIFT)) & USB_USBTRC0_SYNC_DET_MASK) +#define USB_USBTRC0_USB_CLK_RECOVERY_INT_MASK (0x4U) +#define USB_USBTRC0_USB_CLK_RECOVERY_INT_SHIFT (2U) +#define USB_USBTRC0_USB_CLK_RECOVERY_INT(x) (((uint8_t)(((uint8_t)(x)) << USB_USBTRC0_USB_CLK_RECOVERY_INT_SHIFT)) & USB_USBTRC0_USB_CLK_RECOVERY_INT_MASK) +#define USB_USBTRC0_VREDG_DET_MASK (0x8U) +#define USB_USBTRC0_VREDG_DET_SHIFT (3U) +#define USB_USBTRC0_VREDG_DET(x) (((uint8_t)(((uint8_t)(x)) << USB_USBTRC0_VREDG_DET_SHIFT)) & USB_USBTRC0_VREDG_DET_MASK) +#define USB_USBTRC0_VFEDG_DET_MASK (0x10U) +#define USB_USBTRC0_VFEDG_DET_SHIFT (4U) +#define USB_USBTRC0_VFEDG_DET(x) (((uint8_t)(((uint8_t)(x)) << USB_USBTRC0_VFEDG_DET_SHIFT)) & USB_USBTRC0_VFEDG_DET_MASK) +#define USB_USBTRC0_USBRESMEN_MASK (0x20U) +#define USB_USBTRC0_USBRESMEN_SHIFT (5U) +#define USB_USBTRC0_USBRESMEN(x) (((uint8_t)(((uint8_t)(x)) << USB_USBTRC0_USBRESMEN_SHIFT)) & USB_USBTRC0_USBRESMEN_MASK) +#define USB_USBTRC0_USBRESET_MASK (0x80U) +#define USB_USBTRC0_USBRESET_SHIFT (7U) +#define USB_USBTRC0_USBRESET(x) (((uint8_t)(((uint8_t)(x)) << USB_USBTRC0_USBRESET_SHIFT)) & USB_USBTRC0_USBRESET_MASK) + +/*! @name USBFRMADJUST - Frame Adjust Register */ +#define USB_USBFRMADJUST_ADJ_MASK (0xFFU) +#define USB_USBFRMADJUST_ADJ_SHIFT (0U) +#define USB_USBFRMADJUST_ADJ(x) (((uint8_t)(((uint8_t)(x)) << USB_USBFRMADJUST_ADJ_SHIFT)) & USB_USBFRMADJUST_ADJ_MASK) + +/*! @name KEEP_ALIVE_CTRL - Keep Alive mode control */ +#define USB_KEEP_ALIVE_CTRL_KEEP_ALIVE_EN_MASK (0x1U) +#define USB_KEEP_ALIVE_CTRL_KEEP_ALIVE_EN_SHIFT (0U) +#define USB_KEEP_ALIVE_CTRL_KEEP_ALIVE_EN(x) (((uint8_t)(((uint8_t)(x)) << USB_KEEP_ALIVE_CTRL_KEEP_ALIVE_EN_SHIFT)) & USB_KEEP_ALIVE_CTRL_KEEP_ALIVE_EN_MASK) +#define USB_KEEP_ALIVE_CTRL_OWN_OVERRD_EN_MASK (0x2U) +#define USB_KEEP_ALIVE_CTRL_OWN_OVERRD_EN_SHIFT (1U) +#define USB_KEEP_ALIVE_CTRL_OWN_OVERRD_EN(x) (((uint8_t)(((uint8_t)(x)) << USB_KEEP_ALIVE_CTRL_OWN_OVERRD_EN_SHIFT)) & USB_KEEP_ALIVE_CTRL_OWN_OVERRD_EN_MASK) +#define USB_KEEP_ALIVE_CTRL_WAKE_REQ_EN_MASK (0x8U) +#define USB_KEEP_ALIVE_CTRL_WAKE_REQ_EN_SHIFT (3U) +#define USB_KEEP_ALIVE_CTRL_WAKE_REQ_EN(x) (((uint8_t)(((uint8_t)(x)) << USB_KEEP_ALIVE_CTRL_WAKE_REQ_EN_SHIFT)) & USB_KEEP_ALIVE_CTRL_WAKE_REQ_EN_MASK) +#define USB_KEEP_ALIVE_CTRL_WAKE_INT_EN_MASK (0x10U) +#define USB_KEEP_ALIVE_CTRL_WAKE_INT_EN_SHIFT (4U) +#define USB_KEEP_ALIVE_CTRL_WAKE_INT_EN(x) (((uint8_t)(((uint8_t)(x)) << USB_KEEP_ALIVE_CTRL_WAKE_INT_EN_SHIFT)) & USB_KEEP_ALIVE_CTRL_WAKE_INT_EN_MASK) +#define USB_KEEP_ALIVE_CTRL_WAKE_INT_STS_MASK (0x80U) +#define USB_KEEP_ALIVE_CTRL_WAKE_INT_STS_SHIFT (7U) +#define USB_KEEP_ALIVE_CTRL_WAKE_INT_STS(x) (((uint8_t)(((uint8_t)(x)) << USB_KEEP_ALIVE_CTRL_WAKE_INT_STS_SHIFT)) & USB_KEEP_ALIVE_CTRL_WAKE_INT_STS_MASK) + +/*! @name KEEP_ALIVE_WKCTRL - Keep Alive mode wakeup control */ +#define USB_KEEP_ALIVE_WKCTRL_WAKE_ON_THIS_MASK (0xFU) +#define USB_KEEP_ALIVE_WKCTRL_WAKE_ON_THIS_SHIFT (0U) +#define USB_KEEP_ALIVE_WKCTRL_WAKE_ON_THIS(x) (((uint8_t)(((uint8_t)(x)) << USB_KEEP_ALIVE_WKCTRL_WAKE_ON_THIS_SHIFT)) & USB_KEEP_ALIVE_WKCTRL_WAKE_ON_THIS_MASK) +#define USB_KEEP_ALIVE_WKCTRL_WAKE_ENDPT_MASK (0xF0U) +#define USB_KEEP_ALIVE_WKCTRL_WAKE_ENDPT_SHIFT (4U) +#define USB_KEEP_ALIVE_WKCTRL_WAKE_ENDPT(x) (((uint8_t)(((uint8_t)(x)) << USB_KEEP_ALIVE_WKCTRL_WAKE_ENDPT_SHIFT)) & USB_KEEP_ALIVE_WKCTRL_WAKE_ENDPT_MASK) + +/*! @name MISCCTRL - Miscellaneous Control register */ +#define USB_MISCCTRL_SOFDYNTHLD_MASK (0x1U) +#define USB_MISCCTRL_SOFDYNTHLD_SHIFT (0U) +#define USB_MISCCTRL_SOFDYNTHLD(x) (((uint8_t)(((uint8_t)(x)) << USB_MISCCTRL_SOFDYNTHLD_SHIFT)) & USB_MISCCTRL_SOFDYNTHLD_MASK) +#define USB_MISCCTRL_SOFBUSSET_MASK (0x2U) +#define USB_MISCCTRL_SOFBUSSET_SHIFT (1U) +#define USB_MISCCTRL_SOFBUSSET(x) (((uint8_t)(((uint8_t)(x)) << USB_MISCCTRL_SOFBUSSET_SHIFT)) & USB_MISCCTRL_SOFBUSSET_MASK) +#define USB_MISCCTRL_OWNERRISODIS_MASK (0x4U) +#define USB_MISCCTRL_OWNERRISODIS_SHIFT (2U) +#define USB_MISCCTRL_OWNERRISODIS(x) (((uint8_t)(((uint8_t)(x)) << USB_MISCCTRL_OWNERRISODIS_SHIFT)) & USB_MISCCTRL_OWNERRISODIS_MASK) +#define USB_MISCCTRL_VREDG_EN_MASK (0x8U) +#define USB_MISCCTRL_VREDG_EN_SHIFT (3U) +#define USB_MISCCTRL_VREDG_EN(x) (((uint8_t)(((uint8_t)(x)) << USB_MISCCTRL_VREDG_EN_SHIFT)) & USB_MISCCTRL_VREDG_EN_MASK) +#define USB_MISCCTRL_VFEDG_EN_MASK (0x10U) +#define USB_MISCCTRL_VFEDG_EN_SHIFT (4U) +#define USB_MISCCTRL_VFEDG_EN(x) (((uint8_t)(((uint8_t)(x)) << USB_MISCCTRL_VFEDG_EN_SHIFT)) & USB_MISCCTRL_VFEDG_EN_MASK) +#define USB_MISCCTRL_STL_ADJ_EN_MASK (0x80U) +#define USB_MISCCTRL_STL_ADJ_EN_SHIFT (7U) +#define USB_MISCCTRL_STL_ADJ_EN(x) (((uint8_t)(((uint8_t)(x)) << USB_MISCCTRL_STL_ADJ_EN_SHIFT)) & USB_MISCCTRL_STL_ADJ_EN_MASK) + +/*! @name STALL_IL_DIS - Peripheral mode stall disable for endpoints 7 to 0 in IN direction */ +#define USB_STALL_IL_DIS_STALL_I_DIS0_MASK (0x1U) +#define USB_STALL_IL_DIS_STALL_I_DIS0_SHIFT (0U) +#define USB_STALL_IL_DIS_STALL_I_DIS0(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_IL_DIS_STALL_I_DIS0_SHIFT)) & USB_STALL_IL_DIS_STALL_I_DIS0_MASK) +#define USB_STALL_IL_DIS_STALL_I_DIS1_MASK (0x2U) +#define USB_STALL_IL_DIS_STALL_I_DIS1_SHIFT (1U) +#define USB_STALL_IL_DIS_STALL_I_DIS1(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_IL_DIS_STALL_I_DIS1_SHIFT)) & USB_STALL_IL_DIS_STALL_I_DIS1_MASK) +#define USB_STALL_IL_DIS_STALL_I_DIS2_MASK (0x4U) +#define USB_STALL_IL_DIS_STALL_I_DIS2_SHIFT (2U) +#define USB_STALL_IL_DIS_STALL_I_DIS2(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_IL_DIS_STALL_I_DIS2_SHIFT)) & USB_STALL_IL_DIS_STALL_I_DIS2_MASK) +#define USB_STALL_IL_DIS_STALL_I_DIS3_MASK (0x8U) +#define USB_STALL_IL_DIS_STALL_I_DIS3_SHIFT (3U) +#define USB_STALL_IL_DIS_STALL_I_DIS3(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_IL_DIS_STALL_I_DIS3_SHIFT)) & USB_STALL_IL_DIS_STALL_I_DIS3_MASK) +#define USB_STALL_IL_DIS_STALL_I_DIS4_MASK (0x10U) +#define USB_STALL_IL_DIS_STALL_I_DIS4_SHIFT (4U) +#define USB_STALL_IL_DIS_STALL_I_DIS4(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_IL_DIS_STALL_I_DIS4_SHIFT)) & USB_STALL_IL_DIS_STALL_I_DIS4_MASK) +#define USB_STALL_IL_DIS_STALL_I_DIS5_MASK (0x20U) +#define USB_STALL_IL_DIS_STALL_I_DIS5_SHIFT (5U) +#define USB_STALL_IL_DIS_STALL_I_DIS5(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_IL_DIS_STALL_I_DIS5_SHIFT)) & USB_STALL_IL_DIS_STALL_I_DIS5_MASK) +#define USB_STALL_IL_DIS_STALL_I_DIS6_MASK (0x40U) +#define USB_STALL_IL_DIS_STALL_I_DIS6_SHIFT (6U) +#define USB_STALL_IL_DIS_STALL_I_DIS6(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_IL_DIS_STALL_I_DIS6_SHIFT)) & USB_STALL_IL_DIS_STALL_I_DIS6_MASK) +#define USB_STALL_IL_DIS_STALL_I_DIS7_MASK (0x80U) +#define USB_STALL_IL_DIS_STALL_I_DIS7_SHIFT (7U) +#define USB_STALL_IL_DIS_STALL_I_DIS7(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_IL_DIS_STALL_I_DIS7_SHIFT)) & USB_STALL_IL_DIS_STALL_I_DIS7_MASK) + +/*! @name STALL_IH_DIS - Peripheral mode stall disable for endpoints 15 to 8 in IN direction */ +#define USB_STALL_IH_DIS_STALL_I_DIS8_MASK (0x1U) +#define USB_STALL_IH_DIS_STALL_I_DIS8_SHIFT (0U) +#define USB_STALL_IH_DIS_STALL_I_DIS8(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_IH_DIS_STALL_I_DIS8_SHIFT)) & USB_STALL_IH_DIS_STALL_I_DIS8_MASK) +#define USB_STALL_IH_DIS_STALL_I_DIS9_MASK (0x2U) +#define USB_STALL_IH_DIS_STALL_I_DIS9_SHIFT (1U) +#define USB_STALL_IH_DIS_STALL_I_DIS9(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_IH_DIS_STALL_I_DIS9_SHIFT)) & USB_STALL_IH_DIS_STALL_I_DIS9_MASK) +#define USB_STALL_IH_DIS_STALL_I_DIS10_MASK (0x4U) +#define USB_STALL_IH_DIS_STALL_I_DIS10_SHIFT (2U) +#define USB_STALL_IH_DIS_STALL_I_DIS10(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_IH_DIS_STALL_I_DIS10_SHIFT)) & USB_STALL_IH_DIS_STALL_I_DIS10_MASK) +#define USB_STALL_IH_DIS_STALL_I_DIS11_MASK (0x8U) +#define USB_STALL_IH_DIS_STALL_I_DIS11_SHIFT (3U) +#define USB_STALL_IH_DIS_STALL_I_DIS11(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_IH_DIS_STALL_I_DIS11_SHIFT)) & USB_STALL_IH_DIS_STALL_I_DIS11_MASK) +#define USB_STALL_IH_DIS_STALL_I_DIS12_MASK (0x10U) +#define USB_STALL_IH_DIS_STALL_I_DIS12_SHIFT (4U) +#define USB_STALL_IH_DIS_STALL_I_DIS12(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_IH_DIS_STALL_I_DIS12_SHIFT)) & USB_STALL_IH_DIS_STALL_I_DIS12_MASK) +#define USB_STALL_IH_DIS_STALL_I_DIS13_MASK (0x20U) +#define USB_STALL_IH_DIS_STALL_I_DIS13_SHIFT (5U) +#define USB_STALL_IH_DIS_STALL_I_DIS13(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_IH_DIS_STALL_I_DIS13_SHIFT)) & USB_STALL_IH_DIS_STALL_I_DIS13_MASK) +#define USB_STALL_IH_DIS_STALL_I_DIS14_MASK (0x40U) +#define USB_STALL_IH_DIS_STALL_I_DIS14_SHIFT (6U) +#define USB_STALL_IH_DIS_STALL_I_DIS14(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_IH_DIS_STALL_I_DIS14_SHIFT)) & USB_STALL_IH_DIS_STALL_I_DIS14_MASK) +#define USB_STALL_IH_DIS_STALL_I_DIS15_MASK (0x80U) +#define USB_STALL_IH_DIS_STALL_I_DIS15_SHIFT (7U) +#define USB_STALL_IH_DIS_STALL_I_DIS15(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_IH_DIS_STALL_I_DIS15_SHIFT)) & USB_STALL_IH_DIS_STALL_I_DIS15_MASK) + +/*! @name STALL_OL_DIS - Peripheral mode stall disable for endpoints 7 to 0 in OUT direction */ +#define USB_STALL_OL_DIS_STALL_O_DIS0_MASK (0x1U) +#define USB_STALL_OL_DIS_STALL_O_DIS0_SHIFT (0U) +#define USB_STALL_OL_DIS_STALL_O_DIS0(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_OL_DIS_STALL_O_DIS0_SHIFT)) & USB_STALL_OL_DIS_STALL_O_DIS0_MASK) +#define USB_STALL_OL_DIS_STALL_O_DIS1_MASK (0x2U) +#define USB_STALL_OL_DIS_STALL_O_DIS1_SHIFT (1U) +#define USB_STALL_OL_DIS_STALL_O_DIS1(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_OL_DIS_STALL_O_DIS1_SHIFT)) & USB_STALL_OL_DIS_STALL_O_DIS1_MASK) +#define USB_STALL_OL_DIS_STALL_O_DIS2_MASK (0x4U) +#define USB_STALL_OL_DIS_STALL_O_DIS2_SHIFT (2U) +#define USB_STALL_OL_DIS_STALL_O_DIS2(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_OL_DIS_STALL_O_DIS2_SHIFT)) & USB_STALL_OL_DIS_STALL_O_DIS2_MASK) +#define USB_STALL_OL_DIS_STALL_O_DIS3_MASK (0x8U) +#define USB_STALL_OL_DIS_STALL_O_DIS3_SHIFT (3U) +#define USB_STALL_OL_DIS_STALL_O_DIS3(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_OL_DIS_STALL_O_DIS3_SHIFT)) & USB_STALL_OL_DIS_STALL_O_DIS3_MASK) +#define USB_STALL_OL_DIS_STALL_O_DIS4_MASK (0x10U) +#define USB_STALL_OL_DIS_STALL_O_DIS4_SHIFT (4U) +#define USB_STALL_OL_DIS_STALL_O_DIS4(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_OL_DIS_STALL_O_DIS4_SHIFT)) & USB_STALL_OL_DIS_STALL_O_DIS4_MASK) +#define USB_STALL_OL_DIS_STALL_O_DIS5_MASK (0x20U) +#define USB_STALL_OL_DIS_STALL_O_DIS5_SHIFT (5U) +#define USB_STALL_OL_DIS_STALL_O_DIS5(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_OL_DIS_STALL_O_DIS5_SHIFT)) & USB_STALL_OL_DIS_STALL_O_DIS5_MASK) +#define USB_STALL_OL_DIS_STALL_O_DIS6_MASK (0x40U) +#define USB_STALL_OL_DIS_STALL_O_DIS6_SHIFT (6U) +#define USB_STALL_OL_DIS_STALL_O_DIS6(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_OL_DIS_STALL_O_DIS6_SHIFT)) & USB_STALL_OL_DIS_STALL_O_DIS6_MASK) +#define USB_STALL_OL_DIS_STALL_O_DIS7_MASK (0x80U) +#define USB_STALL_OL_DIS_STALL_O_DIS7_SHIFT (7U) +#define USB_STALL_OL_DIS_STALL_O_DIS7(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_OL_DIS_STALL_O_DIS7_SHIFT)) & USB_STALL_OL_DIS_STALL_O_DIS7_MASK) + +/*! @name STALL_OH_DIS - Peripheral mode stall disable for endpoints 15 to 8 in OUT direction */ +#define USB_STALL_OH_DIS_STALL_O_DIS8_MASK (0x1U) +#define USB_STALL_OH_DIS_STALL_O_DIS8_SHIFT (0U) +#define USB_STALL_OH_DIS_STALL_O_DIS8(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_OH_DIS_STALL_O_DIS8_SHIFT)) & USB_STALL_OH_DIS_STALL_O_DIS8_MASK) +#define USB_STALL_OH_DIS_STALL_O_DIS9_MASK (0x2U) +#define USB_STALL_OH_DIS_STALL_O_DIS9_SHIFT (1U) +#define USB_STALL_OH_DIS_STALL_O_DIS9(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_OH_DIS_STALL_O_DIS9_SHIFT)) & USB_STALL_OH_DIS_STALL_O_DIS9_MASK) +#define USB_STALL_OH_DIS_STALL_O_DIS10_MASK (0x4U) +#define USB_STALL_OH_DIS_STALL_O_DIS10_SHIFT (2U) +#define USB_STALL_OH_DIS_STALL_O_DIS10(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_OH_DIS_STALL_O_DIS10_SHIFT)) & USB_STALL_OH_DIS_STALL_O_DIS10_MASK) +#define USB_STALL_OH_DIS_STALL_O_DIS11_MASK (0x8U) +#define USB_STALL_OH_DIS_STALL_O_DIS11_SHIFT (3U) +#define USB_STALL_OH_DIS_STALL_O_DIS11(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_OH_DIS_STALL_O_DIS11_SHIFT)) & USB_STALL_OH_DIS_STALL_O_DIS11_MASK) +#define USB_STALL_OH_DIS_STALL_O_DIS12_MASK (0x10U) +#define USB_STALL_OH_DIS_STALL_O_DIS12_SHIFT (4U) +#define USB_STALL_OH_DIS_STALL_O_DIS12(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_OH_DIS_STALL_O_DIS12_SHIFT)) & USB_STALL_OH_DIS_STALL_O_DIS12_MASK) +#define USB_STALL_OH_DIS_STALL_O_DIS13_MASK (0x20U) +#define USB_STALL_OH_DIS_STALL_O_DIS13_SHIFT (5U) +#define USB_STALL_OH_DIS_STALL_O_DIS13(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_OH_DIS_STALL_O_DIS13_SHIFT)) & USB_STALL_OH_DIS_STALL_O_DIS13_MASK) +#define USB_STALL_OH_DIS_STALL_O_DIS14_MASK (0x40U) +#define USB_STALL_OH_DIS_STALL_O_DIS14_SHIFT (6U) +#define USB_STALL_OH_DIS_STALL_O_DIS14(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_OH_DIS_STALL_O_DIS14_SHIFT)) & USB_STALL_OH_DIS_STALL_O_DIS14_MASK) +#define USB_STALL_OH_DIS_STALL_O_DIS15_MASK (0x80U) +#define USB_STALL_OH_DIS_STALL_O_DIS15_SHIFT (7U) +#define USB_STALL_OH_DIS_STALL_O_DIS15(x) (((uint8_t)(((uint8_t)(x)) << USB_STALL_OH_DIS_STALL_O_DIS15_SHIFT)) & USB_STALL_OH_DIS_STALL_O_DIS15_MASK) + +/*! @name CLK_RECOVER_CTRL - USB Clock recovery control */ +#define USB_CLK_RECOVER_CTRL_RESTART_IFRTRIM_EN_MASK (0x20U) +#define USB_CLK_RECOVER_CTRL_RESTART_IFRTRIM_EN_SHIFT (5U) +#define USB_CLK_RECOVER_CTRL_RESTART_IFRTRIM_EN(x) (((uint8_t)(((uint8_t)(x)) << USB_CLK_RECOVER_CTRL_RESTART_IFRTRIM_EN_SHIFT)) & USB_CLK_RECOVER_CTRL_RESTART_IFRTRIM_EN_MASK) +#define USB_CLK_RECOVER_CTRL_RESET_RESUME_ROUGH_EN_MASK (0x40U) +#define USB_CLK_RECOVER_CTRL_RESET_RESUME_ROUGH_EN_SHIFT (6U) +#define USB_CLK_RECOVER_CTRL_RESET_RESUME_ROUGH_EN(x) (((uint8_t)(((uint8_t)(x)) << USB_CLK_RECOVER_CTRL_RESET_RESUME_ROUGH_EN_SHIFT)) & USB_CLK_RECOVER_CTRL_RESET_RESUME_ROUGH_EN_MASK) +#define USB_CLK_RECOVER_CTRL_CLOCK_RECOVER_EN_MASK (0x80U) +#define USB_CLK_RECOVER_CTRL_CLOCK_RECOVER_EN_SHIFT (7U) +#define USB_CLK_RECOVER_CTRL_CLOCK_RECOVER_EN(x) (((uint8_t)(((uint8_t)(x)) << USB_CLK_RECOVER_CTRL_CLOCK_RECOVER_EN_SHIFT)) & USB_CLK_RECOVER_CTRL_CLOCK_RECOVER_EN_MASK) + +/*! @name CLK_RECOVER_IRC_EN - IRC48M oscillator enable register */ +#define USB_CLK_RECOVER_IRC_EN_REG_EN_MASK (0x1U) +#define USB_CLK_RECOVER_IRC_EN_REG_EN_SHIFT (0U) +#define USB_CLK_RECOVER_IRC_EN_REG_EN(x) (((uint8_t)(((uint8_t)(x)) << USB_CLK_RECOVER_IRC_EN_REG_EN_SHIFT)) & USB_CLK_RECOVER_IRC_EN_REG_EN_MASK) +#define USB_CLK_RECOVER_IRC_EN_IRC_EN_MASK (0x2U) +#define USB_CLK_RECOVER_IRC_EN_IRC_EN_SHIFT (1U) +#define USB_CLK_RECOVER_IRC_EN_IRC_EN(x) (((uint8_t)(((uint8_t)(x)) << USB_CLK_RECOVER_IRC_EN_IRC_EN_SHIFT)) & USB_CLK_RECOVER_IRC_EN_IRC_EN_MASK) + +/*! @name CLK_RECOVER_INT_EN - Clock recovery combined interrupt enable */ +#define USB_CLK_RECOVER_INT_EN_OVF_ERROR_EN_MASK (0x10U) +#define USB_CLK_RECOVER_INT_EN_OVF_ERROR_EN_SHIFT (4U) +#define USB_CLK_RECOVER_INT_EN_OVF_ERROR_EN(x) (((uint8_t)(((uint8_t)(x)) << USB_CLK_RECOVER_INT_EN_OVF_ERROR_EN_SHIFT)) & USB_CLK_RECOVER_INT_EN_OVF_ERROR_EN_MASK) + +/*! @name CLK_RECOVER_INT_STATUS - Clock recovery separated interrupt status */ +#define USB_CLK_RECOVER_INT_STATUS_OVF_ERROR_MASK (0x10U) +#define USB_CLK_RECOVER_INT_STATUS_OVF_ERROR_SHIFT (4U) +#define USB_CLK_RECOVER_INT_STATUS_OVF_ERROR(x) (((uint8_t)(((uint8_t)(x)) << USB_CLK_RECOVER_INT_STATUS_OVF_ERROR_SHIFT)) & USB_CLK_RECOVER_INT_STATUS_OVF_ERROR_MASK) + + +/*! + * @} + */ /* end of group USB_Register_Masks */ + + +/* USB - Peripheral instance base addresses */ +/** Peripheral USB0 base address */ +#define USB0_BASE (0x40072000u) +/** Peripheral USB0 base pointer */ +#define USB0 ((USB_Type *)USB0_BASE) +/** Array initializer of USB peripheral base addresses */ +#define USB_BASE_ADDRS { USB0_BASE } +/** Array initializer of USB peripheral base pointers */ +#define USB_BASE_PTRS { USB0 } +/** Interrupt vectors for the USB peripheral type */ +#define USB_IRQS { USB0_IRQn } + +/*! + * @} + */ /* end of group USB_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- VREF Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup VREF_Peripheral_Access_Layer VREF Peripheral Access Layer + * @{ + */ + +/** VREF - Register Layout Typedef */ +typedef struct { + __IO uint8_t TRM; /**< VREF Trim Register, offset: 0x0 */ + __IO uint8_t SC; /**< VREF Status and Control Register, offset: 0x1 */ +} VREF_Type; + +/* ---------------------------------------------------------------------------- + -- VREF Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup VREF_Register_Masks VREF Register Masks + * @{ + */ + +/*! @name TRM - VREF Trim Register */ +#define VREF_TRM_TRIM_MASK (0x3FU) +#define VREF_TRM_TRIM_SHIFT (0U) +#define VREF_TRM_TRIM(x) (((uint8_t)(((uint8_t)(x)) << VREF_TRM_TRIM_SHIFT)) & VREF_TRM_TRIM_MASK) +#define VREF_TRM_CHOPEN_MASK (0x40U) +#define VREF_TRM_CHOPEN_SHIFT (6U) +#define VREF_TRM_CHOPEN(x) (((uint8_t)(((uint8_t)(x)) << VREF_TRM_CHOPEN_SHIFT)) & VREF_TRM_CHOPEN_MASK) + +/*! @name SC - VREF Status and Control Register */ +#define VREF_SC_MODE_LV_MASK (0x3U) +#define VREF_SC_MODE_LV_SHIFT (0U) +#define VREF_SC_MODE_LV(x) (((uint8_t)(((uint8_t)(x)) << VREF_SC_MODE_LV_SHIFT)) & VREF_SC_MODE_LV_MASK) +#define VREF_SC_VREFST_MASK (0x4U) +#define VREF_SC_VREFST_SHIFT (2U) +#define VREF_SC_VREFST(x) (((uint8_t)(((uint8_t)(x)) << VREF_SC_VREFST_SHIFT)) & VREF_SC_VREFST_MASK) +#define VREF_SC_ICOMPEN_MASK (0x20U) +#define VREF_SC_ICOMPEN_SHIFT (5U) +#define VREF_SC_ICOMPEN(x) (((uint8_t)(((uint8_t)(x)) << VREF_SC_ICOMPEN_SHIFT)) & VREF_SC_ICOMPEN_MASK) +#define VREF_SC_REGEN_MASK (0x40U) +#define VREF_SC_REGEN_SHIFT (6U) +#define VREF_SC_REGEN(x) (((uint8_t)(((uint8_t)(x)) << VREF_SC_REGEN_SHIFT)) & VREF_SC_REGEN_MASK) +#define VREF_SC_VREFEN_MASK (0x80U) +#define VREF_SC_VREFEN_SHIFT (7U) +#define VREF_SC_VREFEN(x) (((uint8_t)(((uint8_t)(x)) << VREF_SC_VREFEN_SHIFT)) & VREF_SC_VREFEN_MASK) + + +/*! + * @} + */ /* end of group VREF_Register_Masks */ + + +/* VREF - Peripheral instance base addresses */ +/** Peripheral VREF base address */ +#define VREF_BASE (0x40074000u) +/** Peripheral VREF base pointer */ +#define VREF ((VREF_Type *)VREF_BASE) +/** Array initializer of VREF peripheral base addresses */ +#define VREF_BASE_ADDRS { VREF_BASE } +/** Array initializer of VREF peripheral base pointers */ +#define VREF_BASE_PTRS { VREF } + +/*! + * @} + */ /* end of group VREF_Peripheral_Access_Layer */ + + +/* ---------------------------------------------------------------------------- + -- WDOG Peripheral Access Layer + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup WDOG_Peripheral_Access_Layer WDOG Peripheral Access Layer + * @{ + */ + +/** WDOG - Register Layout Typedef */ +typedef struct { + __IO uint16_t STCTRLH; /**< Watchdog Status and Control Register High, offset: 0x0 */ + __IO uint16_t STCTRLL; /**< Watchdog Status and Control Register Low, offset: 0x2 */ + __IO uint16_t TOVALH; /**< Watchdog Time-out Value Register High, offset: 0x4 */ + __IO uint16_t TOVALL; /**< Watchdog Time-out Value Register Low, offset: 0x6 */ + __IO uint16_t WINH; /**< Watchdog Window Register High, offset: 0x8 */ + __IO uint16_t WINL; /**< Watchdog Window Register Low, offset: 0xA */ + __IO uint16_t REFRESH; /**< Watchdog Refresh register, offset: 0xC */ + __IO uint16_t UNLOCK; /**< Watchdog Unlock register, offset: 0xE */ + __IO uint16_t TMROUTH; /**< Watchdog Timer Output Register High, offset: 0x10 */ + __IO uint16_t TMROUTL; /**< Watchdog Timer Output Register Low, offset: 0x12 */ + __IO uint16_t RSTCNT; /**< Watchdog Reset Count register, offset: 0x14 */ + __IO uint16_t PRESC; /**< Watchdog Prescaler register, offset: 0x16 */ +} WDOG_Type; + +/* ---------------------------------------------------------------------------- + -- WDOG Register Masks + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup WDOG_Register_Masks WDOG Register Masks + * @{ + */ + +/*! @name STCTRLH - Watchdog Status and Control Register High */ +#define WDOG_STCTRLH_WDOGEN_MASK (0x1U) +#define WDOG_STCTRLH_WDOGEN_SHIFT (0U) +#define WDOG_STCTRLH_WDOGEN(x) (((uint16_t)(((uint16_t)(x)) << WDOG_STCTRLH_WDOGEN_SHIFT)) & WDOG_STCTRLH_WDOGEN_MASK) +#define WDOG_STCTRLH_CLKSRC_MASK (0x2U) +#define WDOG_STCTRLH_CLKSRC_SHIFT (1U) +#define WDOG_STCTRLH_CLKSRC(x) (((uint16_t)(((uint16_t)(x)) << WDOG_STCTRLH_CLKSRC_SHIFT)) & WDOG_STCTRLH_CLKSRC_MASK) +#define WDOG_STCTRLH_IRQRSTEN_MASK (0x4U) +#define WDOG_STCTRLH_IRQRSTEN_SHIFT (2U) +#define WDOG_STCTRLH_IRQRSTEN(x) (((uint16_t)(((uint16_t)(x)) << WDOG_STCTRLH_IRQRSTEN_SHIFT)) & WDOG_STCTRLH_IRQRSTEN_MASK) +#define WDOG_STCTRLH_WINEN_MASK (0x8U) +#define WDOG_STCTRLH_WINEN_SHIFT (3U) +#define WDOG_STCTRLH_WINEN(x) (((uint16_t)(((uint16_t)(x)) << WDOG_STCTRLH_WINEN_SHIFT)) & WDOG_STCTRLH_WINEN_MASK) +#define WDOG_STCTRLH_ALLOWUPDATE_MASK (0x10U) +#define WDOG_STCTRLH_ALLOWUPDATE_SHIFT (4U) +#define WDOG_STCTRLH_ALLOWUPDATE(x) (((uint16_t)(((uint16_t)(x)) << WDOG_STCTRLH_ALLOWUPDATE_SHIFT)) & WDOG_STCTRLH_ALLOWUPDATE_MASK) +#define WDOG_STCTRLH_DBGEN_MASK (0x20U) +#define WDOG_STCTRLH_DBGEN_SHIFT (5U) +#define WDOG_STCTRLH_DBGEN(x) (((uint16_t)(((uint16_t)(x)) << WDOG_STCTRLH_DBGEN_SHIFT)) & WDOG_STCTRLH_DBGEN_MASK) +#define WDOG_STCTRLH_STOPEN_MASK (0x40U) +#define WDOG_STCTRLH_STOPEN_SHIFT (6U) +#define WDOG_STCTRLH_STOPEN(x) (((uint16_t)(((uint16_t)(x)) << WDOG_STCTRLH_STOPEN_SHIFT)) & WDOG_STCTRLH_STOPEN_MASK) +#define WDOG_STCTRLH_WAITEN_MASK (0x80U) +#define WDOG_STCTRLH_WAITEN_SHIFT (7U) +#define WDOG_STCTRLH_WAITEN(x) (((uint16_t)(((uint16_t)(x)) << WDOG_STCTRLH_WAITEN_SHIFT)) & WDOG_STCTRLH_WAITEN_MASK) +#define WDOG_STCTRLH_TESTWDOG_MASK (0x400U) +#define WDOG_STCTRLH_TESTWDOG_SHIFT (10U) +#define WDOG_STCTRLH_TESTWDOG(x) (((uint16_t)(((uint16_t)(x)) << WDOG_STCTRLH_TESTWDOG_SHIFT)) & WDOG_STCTRLH_TESTWDOG_MASK) +#define WDOG_STCTRLH_TESTSEL_MASK (0x800U) +#define WDOG_STCTRLH_TESTSEL_SHIFT (11U) +#define WDOG_STCTRLH_TESTSEL(x) (((uint16_t)(((uint16_t)(x)) << WDOG_STCTRLH_TESTSEL_SHIFT)) & WDOG_STCTRLH_TESTSEL_MASK) +#define WDOG_STCTRLH_BYTESEL_MASK (0x3000U) +#define WDOG_STCTRLH_BYTESEL_SHIFT (12U) +#define WDOG_STCTRLH_BYTESEL(x) (((uint16_t)(((uint16_t)(x)) << WDOG_STCTRLH_BYTESEL_SHIFT)) & WDOG_STCTRLH_BYTESEL_MASK) +#define WDOG_STCTRLH_DISTESTWDOG_MASK (0x4000U) +#define WDOG_STCTRLH_DISTESTWDOG_SHIFT (14U) +#define WDOG_STCTRLH_DISTESTWDOG(x) (((uint16_t)(((uint16_t)(x)) << WDOG_STCTRLH_DISTESTWDOG_SHIFT)) & WDOG_STCTRLH_DISTESTWDOG_MASK) + +/*! @name STCTRLL - Watchdog Status and Control Register Low */ +#define WDOG_STCTRLL_INTFLG_MASK (0x8000U) +#define WDOG_STCTRLL_INTFLG_SHIFT (15U) +#define WDOG_STCTRLL_INTFLG(x) (((uint16_t)(((uint16_t)(x)) << WDOG_STCTRLL_INTFLG_SHIFT)) & WDOG_STCTRLL_INTFLG_MASK) + +/*! @name TOVALH - Watchdog Time-out Value Register High */ +#define WDOG_TOVALH_TOVALHIGH_MASK (0xFFFFU) +#define WDOG_TOVALH_TOVALHIGH_SHIFT (0U) +#define WDOG_TOVALH_TOVALHIGH(x) (((uint16_t)(((uint16_t)(x)) << WDOG_TOVALH_TOVALHIGH_SHIFT)) & WDOG_TOVALH_TOVALHIGH_MASK) + +/*! @name TOVALL - Watchdog Time-out Value Register Low */ +#define WDOG_TOVALL_TOVALLOW_MASK (0xFFFFU) +#define WDOG_TOVALL_TOVALLOW_SHIFT (0U) +#define WDOG_TOVALL_TOVALLOW(x) (((uint16_t)(((uint16_t)(x)) << WDOG_TOVALL_TOVALLOW_SHIFT)) & WDOG_TOVALL_TOVALLOW_MASK) + +/*! @name WINH - Watchdog Window Register High */ +#define WDOG_WINH_WINHIGH_MASK (0xFFFFU) +#define WDOG_WINH_WINHIGH_SHIFT (0U) +#define WDOG_WINH_WINHIGH(x) (((uint16_t)(((uint16_t)(x)) << WDOG_WINH_WINHIGH_SHIFT)) & WDOG_WINH_WINHIGH_MASK) + +/*! @name WINL - Watchdog Window Register Low */ +#define WDOG_WINL_WINLOW_MASK (0xFFFFU) +#define WDOG_WINL_WINLOW_SHIFT (0U) +#define WDOG_WINL_WINLOW(x) (((uint16_t)(((uint16_t)(x)) << WDOG_WINL_WINLOW_SHIFT)) & WDOG_WINL_WINLOW_MASK) + +/*! @name REFRESH - Watchdog Refresh register */ +#define WDOG_REFRESH_WDOGREFRESH_MASK (0xFFFFU) +#define WDOG_REFRESH_WDOGREFRESH_SHIFT (0U) +#define WDOG_REFRESH_WDOGREFRESH(x) (((uint16_t)(((uint16_t)(x)) << WDOG_REFRESH_WDOGREFRESH_SHIFT)) & WDOG_REFRESH_WDOGREFRESH_MASK) + +/*! @name UNLOCK - Watchdog Unlock register */ +#define WDOG_UNLOCK_WDOGUNLOCK_MASK (0xFFFFU) +#define WDOG_UNLOCK_WDOGUNLOCK_SHIFT (0U) +#define WDOG_UNLOCK_WDOGUNLOCK(x) (((uint16_t)(((uint16_t)(x)) << WDOG_UNLOCK_WDOGUNLOCK_SHIFT)) & WDOG_UNLOCK_WDOGUNLOCK_MASK) + +/*! @name TMROUTH - Watchdog Timer Output Register High */ +#define WDOG_TMROUTH_TIMEROUTHIGH_MASK (0xFFFFU) +#define WDOG_TMROUTH_TIMEROUTHIGH_SHIFT (0U) +#define WDOG_TMROUTH_TIMEROUTHIGH(x) (((uint16_t)(((uint16_t)(x)) << WDOG_TMROUTH_TIMEROUTHIGH_SHIFT)) & WDOG_TMROUTH_TIMEROUTHIGH_MASK) + +/*! @name TMROUTL - Watchdog Timer Output Register Low */ +#define WDOG_TMROUTL_TIMEROUTLOW_MASK (0xFFFFU) +#define WDOG_TMROUTL_TIMEROUTLOW_SHIFT (0U) +#define WDOG_TMROUTL_TIMEROUTLOW(x) (((uint16_t)(((uint16_t)(x)) << WDOG_TMROUTL_TIMEROUTLOW_SHIFT)) & WDOG_TMROUTL_TIMEROUTLOW_MASK) + +/*! @name RSTCNT - Watchdog Reset Count register */ +#define WDOG_RSTCNT_RSTCNT_MASK (0xFFFFU) +#define WDOG_RSTCNT_RSTCNT_SHIFT (0U) +#define WDOG_RSTCNT_RSTCNT(x) (((uint16_t)(((uint16_t)(x)) << WDOG_RSTCNT_RSTCNT_SHIFT)) & WDOG_RSTCNT_RSTCNT_MASK) + +/*! @name PRESC - Watchdog Prescaler register */ +#define WDOG_PRESC_PRESCVAL_MASK (0x700U) +#define WDOG_PRESC_PRESCVAL_SHIFT (8U) +#define WDOG_PRESC_PRESCVAL(x) (((uint16_t)(((uint16_t)(x)) << WDOG_PRESC_PRESCVAL_SHIFT)) & WDOG_PRESC_PRESCVAL_MASK) + + +/*! + * @} + */ /* end of group WDOG_Register_Masks */ + + +/* WDOG - Peripheral instance base addresses */ +/** Peripheral WDOG base address */ +#define WDOG_BASE (0x40052000u) +/** Peripheral WDOG base pointer */ +#define WDOG ((WDOG_Type *)WDOG_BASE) +/** Array initializer of WDOG peripheral base addresses */ +#define WDOG_BASE_ADDRS { WDOG_BASE } +/** Array initializer of WDOG peripheral base pointers */ +#define WDOG_BASE_PTRS { WDOG } +/** Interrupt vectors for the WDOG peripheral type */ +#define WDOG_IRQS { WDOG_EWM_IRQn } + +/*! + * @} + */ /* end of group WDOG_Peripheral_Access_Layer */ + + +/* +** End of section using anonymous unions +*/ + +#if defined(__ARMCC_VERSION) + #pragma pop +#elif defined(__CWCC__) + #pragma pop +#elif defined(__GNUC__) + /* leave anonymous unions enabled */ +#elif defined(__IAR_SYSTEMS_ICC__) + #pragma language=default +#else + #error Not supported compiler type +#endif + +/*! + * @} + */ /* end of group Peripheral_access_layer */ + + +/* ---------------------------------------------------------------------------- + -- SDK Compatibility + ---------------------------------------------------------------------------- */ + +/*! + * @addtogroup SDK_Compatibility_Symbols SDK Compatibility + * @{ + */ + +#define DSPI0 SPI0 +#define DSPI1 SPI1 +#define DMAMUX0 DMAMUX +#define DMA0_04_IRQn DMA0_DMA4_IRQn +#define DMA0_15_IRQn DMA1_DMA5_IRQn +#define DMA0_26_IRQn DMA2_DMA6_IRQn +#define DMA0_37_IRQn DMA3_DMA7_IRQn +#define DMA0_04_DriverIRQHandler DMA0_DMA4_DriverIRQHandler +#define DMA0_15_DriverIRQHandler DMA1_DMA5_DriverIRQHandler +#define DMA0_26_DriverIRQHandler DMA2_DMA6_DriverIRQHandler +#define DMA0_37_DriverIRQHandler DMA3_DMA7_DriverIRQHandler +#define PIT PIT0 +#define RTC_IRQn RTC_Alarm_IRQn +#define RTC_IRQHandler RTC_Alarm_IRQHandler +#define kDmaRequestMux0Group1LTC0InputFIFO kDmaRequestMux0LTC0InputFIFO +#define kDmaRequestMux0Group1LTC0OutputFIFO kDmaRequestMux0LTC0OutputFIFO +#define kDmaRequestMux0Group1LTC0PKHA kDmaRequestMux0LTC0PKHA + +/*! + * @} + */ /* end of group SDK_Compatibility_Symbols */ + + +#endif /* _MKL82Z7_H_ */ + diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/MKL82Z7_features.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/MKL82Z7_features.h new file mode 100644 index 00000000000..e3f7271353f --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/MKL82Z7_features.h @@ -0,0 +1,2166 @@ +/* +** ################################################################### +** Version: rev. 1.6, 2015-12-15 +** Build: b160415 +** +** Abstract: +** Chip specific module features. +** +** Copyright (c) 2016 Freescale Semiconductor, Inc. +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without modification, +** are permitted provided that the following conditions are met: +** +** o Redistributions of source code must retain the above copyright notice, this list +** of conditions and the following disclaimer. +** +** o Redistributions in binary form must reproduce the above copyright notice, this +** list of conditions and the following disclaimer in the documentation and/or +** other materials provided with the distribution. +** +** o Neither the name of Freescale Semiconductor, Inc. nor the names of its +** contributors may be used to endorse or promote products derived from this +** software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +** ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +** ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +** +** http: www.freescale.com +** mail: support@freescale.com +** +** Revisions: +** - rev. 1.0 (2015-04-20) +** Initial version. +** - rev. 1.1 (2015-04-24) +** Add feature for QSPI +** - rev. 1.2 (2015-07-29) +** Add features for LTC and USB KHCI +** - rev. 1.3 (2015-08-10) +** Add features for INTMUX and align with 1.3 REL stream +** - rev. 1.4 (2015-08-13) +** Add new SIM feature FSL_FEATURE_SIM_OPT_ADC_HAS_ALTERNATE_TRIGGER for ADC +** - rev. 1.5 (2015-08-20) +** Update according to latest RM Rev.1 and RDP +** - rev. 1.6 (2015-12-15) +** Correct USB RAM +** +** ################################################################### +*/ + +#ifndef _MKL82Z7_FEATURES_H_ +#define _MKL82Z7_FEATURES_H_ + +/* SOC module features */ + +/* @brief ACMP availability on the SoC. */ +#define FSL_FEATURE_SOC_ACMP_COUNT (0) +/* @brief ADC16 availability on the SoC. */ +#define FSL_FEATURE_SOC_ADC16_COUNT (1) +/* @brief ADC12 availability on the SoC. */ +#define FSL_FEATURE_SOC_ADC12_COUNT (0) +/* @brief AFE availability on the SoC. */ +#define FSL_FEATURE_SOC_AFE_COUNT (0) +/* @brief AIPS availability on the SoC. */ +#define FSL_FEATURE_SOC_AIPS_COUNT (1) +/* @brief AOI availability on the SoC. */ +#define FSL_FEATURE_SOC_AOI_COUNT (0) +/* @brief AXBS availability on the SoC. */ +#define FSL_FEATURE_SOC_AXBS_COUNT (0) +/* @brief ASMC availability on the SoC. */ +#define FSL_FEATURE_SOC_ASMC_COUNT (0) +/* @brief CADC availability on the SoC. */ +#define FSL_FEATURE_SOC_CADC_COUNT (0) +/* @brief FLEXCAN availability on the SoC. */ +#define FSL_FEATURE_SOC_FLEXCAN_COUNT (0) +/* @brief MMCAU availability on the SoC. */ +#define FSL_FEATURE_SOC_MMCAU_COUNT (0) +/* @brief CMP availability on the SoC. */ +#define FSL_FEATURE_SOC_CMP_COUNT (1) +/* @brief CMT availability on the SoC. */ +#define FSL_FEATURE_SOC_CMT_COUNT (0) +/* @brief CNC availability on the SoC. */ +#define FSL_FEATURE_SOC_CNC_COUNT (0) +/* @brief CRC availability on the SoC. */ +#define FSL_FEATURE_SOC_CRC_COUNT (1) +/* @brief DAC availability on the SoC. */ +#define FSL_FEATURE_SOC_DAC_COUNT (1) +/* @brief DAC32 availability on the SoC. */ +#define FSL_FEATURE_SOC_DAC32_COUNT (0) +/* @brief DCDC availability on the SoC. */ +#define FSL_FEATURE_SOC_DCDC_COUNT (0) +/* @brief DDR availability on the SoC. */ +#define FSL_FEATURE_SOC_DDR_COUNT (0) +/* @brief DMA availability on the SoC. */ +#define FSL_FEATURE_SOC_DMA_COUNT (0) +/* @brief EDMA availability on the SoC. */ +#define FSL_FEATURE_SOC_EDMA_COUNT (1) +/* @brief DMAMUX availability on the SoC. */ +#define FSL_FEATURE_SOC_DMAMUX_COUNT (1) +/* @brief DRY availability on the SoC. */ +#define FSL_FEATURE_SOC_DRY_COUNT (0) +/* @brief DSPI availability on the SoC. */ +#define FSL_FEATURE_SOC_DSPI_COUNT (2) +/* @brief EMVSIM availability on the SoC. */ +#define FSL_FEATURE_SOC_EMVSIM_COUNT (2) +/* @brief ENC availability on the SoC. */ +#define FSL_FEATURE_SOC_ENC_COUNT (0) +/* @brief ENET availability on the SoC. */ +#define FSL_FEATURE_SOC_ENET_COUNT (0) +/* @brief EWM availability on the SoC. */ +#define FSL_FEATURE_SOC_EWM_COUNT (1) +/* @brief FB availability on the SoC. */ +#define FSL_FEATURE_SOC_FB_COUNT (0) +/* @brief FGPIO availability on the SoC. */ +#define FSL_FEATURE_SOC_FGPIO_COUNT (5) +/* @brief FLEXIO availability on the SoC. */ +#define FSL_FEATURE_SOC_FLEXIO_COUNT (1) +/* @brief FMC availability on the SoC. */ +#define FSL_FEATURE_SOC_FMC_COUNT (1) +/* @brief FSKDT availability on the SoC. */ +#define FSL_FEATURE_SOC_FSKDT_COUNT (0) +/* @brief FTFA availability on the SoC. */ +#define FSL_FEATURE_SOC_FTFA_COUNT (1) +/* @brief FTFE availability on the SoC. */ +#define FSL_FEATURE_SOC_FTFE_COUNT (0) +/* @brief FTFL availability on the SoC. */ +#define FSL_FEATURE_SOC_FTFL_COUNT (0) +/* @brief FTM availability on the SoC. */ +#define FSL_FEATURE_SOC_FTM_COUNT (0) +/* @brief FTMRA availability on the SoC. */ +#define FSL_FEATURE_SOC_FTMRA_COUNT (0) +/* @brief FTMRE availability on the SoC. */ +#define FSL_FEATURE_SOC_FTMRE_COUNT (0) +/* @brief FTMRH availability on the SoC. */ +#define FSL_FEATURE_SOC_FTMRH_COUNT (0) +/* @brief GPIO availability on the SoC. */ +#define FSL_FEATURE_SOC_GPIO_COUNT (5) +/* @brief HSADC availability on the SoC. */ +#define FSL_FEATURE_SOC_HSADC_COUNT (0) +/* @brief I2C availability on the SoC. */ +#define FSL_FEATURE_SOC_I2C_COUNT (2) +/* @brief I2S availability on the SoC. */ +#define FSL_FEATURE_SOC_I2S_COUNT (0) +/* @brief ICS availability on the SoC. */ +#define FSL_FEATURE_SOC_ICS_COUNT (0) +/* @brief INTMUX availability on the SoC. */ +#define FSL_FEATURE_SOC_INTMUX_COUNT (1) +/* @brief IRQ availability on the SoC. */ +#define FSL_FEATURE_SOC_IRQ_COUNT (0) +/* @brief KBI availability on the SoC. */ +#define FSL_FEATURE_SOC_KBI_COUNT (0) +/* @brief SLCD availability on the SoC. */ +#define FSL_FEATURE_SOC_SLCD_COUNT (0) +/* @brief LCDC availability on the SoC. */ +#define FSL_FEATURE_SOC_LCDC_COUNT (0) +/* @brief LDO availability on the SoC. */ +#define FSL_FEATURE_SOC_LDO_COUNT (0) +/* @brief LLWU availability on the SoC. */ +#define FSL_FEATURE_SOC_LLWU_COUNT (1) +/* @brief LMEM availability on the SoC. */ +#define FSL_FEATURE_SOC_LMEM_COUNT (0) +/* @brief LPI2C availability on the SoC. */ +#define FSL_FEATURE_SOC_LPI2C_COUNT (0) +/* @brief LPIT availability on the SoC. */ +#define FSL_FEATURE_SOC_LPIT_COUNT (0) +/* @brief LPSCI availability on the SoC. */ +#define FSL_FEATURE_SOC_LPSCI_COUNT (0) +/* @brief LPSPI availability on the SoC. */ +#define FSL_FEATURE_SOC_LPSPI_COUNT (0) +/* @brief LPTMR availability on the SoC. */ +#define FSL_FEATURE_SOC_LPTMR_COUNT (2) +/* @brief LPTPM availability on the SoC. */ +#define FSL_FEATURE_SOC_LPTPM_COUNT (0) +/* @brief LPUART availability on the SoC. */ +#define FSL_FEATURE_SOC_LPUART_COUNT (3) +/* @brief LTC availability on the SoC. */ +#define FSL_FEATURE_SOC_LTC_COUNT (1) +/* @brief MC availability on the SoC. */ +#define FSL_FEATURE_SOC_MC_COUNT (0) +/* @brief MCG availability on the SoC. */ +#define FSL_FEATURE_SOC_MCG_COUNT (1) +/* @brief MCGLITE availability on the SoC. */ +#define FSL_FEATURE_SOC_MCGLITE_COUNT (0) +/* @brief MCM availability on the SoC. */ +#define FSL_FEATURE_SOC_MCM_COUNT (1) +/* @brief MMAU availability on the SoC. */ +#define FSL_FEATURE_SOC_MMAU_COUNT (0) +/* @brief MMDVSQ availability on the SoC. */ +#define FSL_FEATURE_SOC_MMDVSQ_COUNT (0) +/* @brief MPU availability on the SoC. */ +#define FSL_FEATURE_SOC_MPU_COUNT (1) +/* @brief MSCAN availability on the SoC. */ +#define FSL_FEATURE_SOC_MSCAN_COUNT (0) +/* @brief MSCM availability on the SoC. */ +#define FSL_FEATURE_SOC_MSCM_COUNT (0) +/* @brief MTB availability on the SoC. */ +#define FSL_FEATURE_SOC_MTB_COUNT (1) +/* @brief MTBDWT availability on the SoC. */ +#define FSL_FEATURE_SOC_MTBDWT_COUNT (1) +/* @brief MU availability on the SoC. */ +#define FSL_FEATURE_SOC_MU_COUNT (0) +/* @brief NFC availability on the SoC. */ +#define FSL_FEATURE_SOC_NFC_COUNT (0) +/* @brief OPAMP availability on the SoC. */ +#define FSL_FEATURE_SOC_OPAMP_COUNT (0) +/* @brief OSC availability on the SoC. */ +#define FSL_FEATURE_SOC_OSC_COUNT (1) +/* @brief OSC32 availability on the SoC. */ +#define FSL_FEATURE_SOC_OSC32_COUNT (0) +/* @brief OTFAD availability on the SoC. */ +#define FSL_FEATURE_SOC_OTFAD_COUNT (0) +/* @brief PDB availability on the SoC. */ +#define FSL_FEATURE_SOC_PDB_COUNT (0) +/* @brief PCC availability on the SoC. */ +#define FSL_FEATURE_SOC_PCC_COUNT (0) +/* @brief PGA availability on the SoC. */ +#define FSL_FEATURE_SOC_PGA_COUNT (0) +/* @brief PIT availability on the SoC. */ +#define FSL_FEATURE_SOC_PIT_COUNT (1) +/* @brief PMC availability on the SoC. */ +#define FSL_FEATURE_SOC_PMC_COUNT (1) +/* @brief PORT availability on the SoC. */ +#define FSL_FEATURE_SOC_PORT_COUNT (5) +/* @brief PWM availability on the SoC. */ +#define FSL_FEATURE_SOC_PWM_COUNT (0) +/* @brief PWT availability on the SoC. */ +#define FSL_FEATURE_SOC_PWT_COUNT (0) +/* @brief QuadSPI availability on the SoC. */ +#define FSL_FEATURE_SOC_QuadSPI_COUNT (1) +/* @brief RCM availability on the SoC. */ +#define FSL_FEATURE_SOC_RCM_COUNT (1) +/* @brief RFSYS availability on the SoC. */ +#define FSL_FEATURE_SOC_RFSYS_COUNT (1) +/* @brief RFVBAT availability on the SoC. */ +#define FSL_FEATURE_SOC_RFVBAT_COUNT (1) +/* @brief RNG availability on the SoC. */ +#define FSL_FEATURE_SOC_RNG_COUNT (0) +/* @brief RNGB availability on the SoC. */ +#define FSL_FEATURE_SOC_RNGB_COUNT (0) +/* @brief ROM availability on the SoC. */ +#define FSL_FEATURE_SOC_ROM_COUNT (1) +/* @brief RSIM availability on the SoC. */ +#define FSL_FEATURE_SOC_RSIM_COUNT (0) +/* @brief RTC availability on the SoC. */ +#define FSL_FEATURE_SOC_RTC_COUNT (1) +/* @brief SCG availability on the SoC. */ +#define FSL_FEATURE_SOC_SCG_COUNT (0) +/* @brief SCI availability on the SoC. */ +#define FSL_FEATURE_SOC_SCI_COUNT (0) +/* @brief SDHC availability on the SoC. */ +#define FSL_FEATURE_SOC_SDHC_COUNT (0) +/* @brief SDRAM availability on the SoC. */ +#define FSL_FEATURE_SOC_SDRAM_COUNT (0) +/* @brief SEMA42 availability on the SoC. */ +#define FSL_FEATURE_SOC_SEMA42_COUNT (0) +/* @brief SIM availability on the SoC. */ +#define FSL_FEATURE_SOC_SIM_COUNT (1) +/* @brief SMC availability on the SoC. */ +#define FSL_FEATURE_SOC_SMC_COUNT (1) +/* @brief SPI availability on the SoC. */ +#define FSL_FEATURE_SOC_SPI_COUNT (0) +/* @brief TMR availability on the SoC. */ +#define FSL_FEATURE_SOC_TMR_COUNT (0) +/* @brief TPM availability on the SoC. */ +#define FSL_FEATURE_SOC_TPM_COUNT (3) +/* @brief TRGMUX availability on the SoC. */ +#define FSL_FEATURE_SOC_TRGMUX_COUNT (0) +/* @brief TRIAMP availability on the SoC. */ +#define FSL_FEATURE_SOC_TRIAMP_COUNT (0) +/* @brief TRNG availability on the SoC. */ +#define FSL_FEATURE_SOC_TRNG_COUNT (1) +/* @brief TSI availability on the SoC. */ +#define FSL_FEATURE_SOC_TSI_COUNT (1) +/* @brief TSTMR availability on the SoC. */ +#define FSL_FEATURE_SOC_TSTMR_COUNT (0) +/* @brief UART availability on the SoC. */ +#define FSL_FEATURE_SOC_UART_COUNT (0) +/* @brief USB availability on the SoC. */ +#define FSL_FEATURE_SOC_USB_COUNT (1) +/* @brief USBDCD availability on the SoC. */ +#define FSL_FEATURE_SOC_USBDCD_COUNT (0) +/* @brief USBHSDCD availability on the SoC. */ +#define FSL_FEATURE_SOC_USBHSDCD_COUNT (0) +/* @brief USBPHY availability on the SoC. */ +#define FSL_FEATURE_SOC_USBPHY_COUNT (0) +/* @brief VREF availability on the SoC. */ +#define FSL_FEATURE_SOC_VREF_COUNT (1) +/* @brief WDOG availability on the SoC. */ +#define FSL_FEATURE_SOC_WDOG_COUNT (1) +/* @brief XBAR availability on the SoC. */ +#define FSL_FEATURE_SOC_XBAR_COUNT (0) +/* @brief XBARA availability on the SoC. */ +#define FSL_FEATURE_SOC_XBARA_COUNT (0) +/* @brief XBARB availability on the SoC. */ +#define FSL_FEATURE_SOC_XBARB_COUNT (0) +/* @brief XCVR availability on the SoC. */ +#define FSL_FEATURE_SOC_XCVR_COUNT (0) +/* @brief XRDC availability on the SoC. */ +#define FSL_FEATURE_SOC_XRDC_COUNT (0) +/* @brief ZLL availability on the SoC. */ +#define FSL_FEATURE_SOC_ZLL_COUNT (0) + +/* ADC16 module features */ + +/* @brief Has Programmable Gain Amplifier (PGA) in ADC (register PGA). */ +#define FSL_FEATURE_ADC16_HAS_PGA (0) +/* @brief Has PGA chopping control in ADC (bit PGA[PGACHPb] or PGA[PGACHP]). */ +#define FSL_FEATURE_ADC16_HAS_PGA_CHOPPING (0) +/* @brief Has PGA offset measurement mode in ADC (bit PGA[PGAOFSM]). */ +#define FSL_FEATURE_ADC16_HAS_PGA_OFFSET_MEASUREMENT (0) +/* @brief Has DMA support (bit SC2[DMAEN] or SC4[DMAEN]). */ +#define FSL_FEATURE_ADC16_HAS_DMA (1) +/* @brief Has differential mode (bitfield SC1x[DIFF]). */ +#define FSL_FEATURE_ADC16_HAS_DIFF_MODE (1) +/* @brief Has FIFO (bit SC4[AFDEP]). */ +#define FSL_FEATURE_ADC16_HAS_FIFO (0) +/* @brief FIFO size if available (bitfield SC4[AFDEP]). */ +#define FSL_FEATURE_ADC16_FIFO_SIZE (0) +/* @brief Has channel set a/b multiplexor (bitfield CFG2[MUXSEL]). */ +#define FSL_FEATURE_ADC16_HAS_MUX_SELECT (1) +/* @brief Has HW trigger masking (bitfield SC5[HTRGMASKE]. */ +#define FSL_FEATURE_ADC16_HAS_HW_TRIGGER_MASK (0) +/* @brief Has calibration feature (bit SC3[CAL] and registers CLPx, CLMx). */ +#define FSL_FEATURE_ADC16_HAS_CALIBRATION (1) +/* @brief Has HW averaging (bit SC3[AVGE]). */ +#define FSL_FEATURE_ADC16_HAS_HW_AVERAGE (1) +/* @brief Has offset correction (register OFS). */ +#define FSL_FEATURE_ADC16_HAS_OFFSET_CORRECTION (1) +/* @brief Maximum ADC resolution. */ +#define FSL_FEATURE_ADC16_MAX_RESOLUTION (16) +/* @brief Number of SC1x and Rx register pairs (conversion control and result registers). */ +#define FSL_FEATURE_ADC16_CONVERSION_CONTROL_COUNT (2) + +/* CMP module features */ + +/* @brief Has Trigger mode in CMP (register bit field CR1[TRIGM]). */ +#define FSL_FEATURE_CMP_HAS_TRIGGER_MODE (1) +/* @brief Has Window mode in CMP (register bit field CR1[WE]). */ +#define FSL_FEATURE_CMP_HAS_WINDOW_MODE (1) +/* @brief Has External sample supported in CMP (register bit field CR1[SE]). */ +#define FSL_FEATURE_CMP_HAS_EXTERNAL_SAMPLE_SUPPORT (1) +/* @brief Has DMA support in CMP (register bit field SCR[DMAEN]). */ +#define FSL_FEATURE_CMP_HAS_DMA (1) +/* @brief Has Pass Through mode in CMP (register bit field MUXCR[PSTM]). */ +#define FSL_FEATURE_CMP_HAS_PASS_THROUGH_MODE (0) +/* @brief Has DAC Test function in CMP (register DACTEST). */ +#define FSL_FEATURE_CMP_HAS_DAC_TEST (0) + +/* CRC module features */ + +/* @brief Has data register with name CRC */ +#define FSL_FEATURE_CRC_HAS_CRC_REG (1) + +/* DAC module features */ + +/* @brief Define the size of hardware buffer */ +#define FSL_FEATURE_DAC_BUFFER_SIZE (16) +/* @brief Define whether the buffer supports watermark event detection or not. */ +#define FSL_FEATURE_DAC_HAS_WATERMARK_DETECTION (1) +/* @brief Define whether the buffer supports watermark selection detection or not. */ +#define FSL_FEATURE_DAC_HAS_WATERMARK_SELECTION (1) +/* @brief Define whether the buffer supports watermark event 1 word before buffer upper limit. */ +#define FSL_FEATURE_DAC_HAS_WATERMARK_1_WORD (1) +/* @brief Define whether the buffer supports watermark event 2 words before buffer upper limit. */ +#define FSL_FEATURE_DAC_HAS_WATERMARK_2_WORDS (1) +/* @brief Define whether the buffer supports watermark event 3 words before buffer upper limit. */ +#define FSL_FEATURE_DAC_HAS_WATERMARK_3_WORDS (1) +/* @brief Define whether the buffer supports watermark event 4 words before buffer upper limit. */ +#define FSL_FEATURE_DAC_HAS_WATERMARK_4_WORDS (1) +/* @brief Define whether FIFO buffer mode is available or not. */ +#define FSL_FEATURE_DAC_HAS_BUFFER_FIFO_MODE (1) +/* @brief Define whether swing buffer mode is available or not.. */ +#define FSL_FEATURE_DAC_HAS_BUFFER_SWING_MODE (1) + +/* EDMA module features */ + +/* @brief Number of DMA channels (related to number of registers TCD, DCHPRI, bit fields ERQ[ERQn], EEI[EEIn], INT[INTn], ERR[ERRn], HRS[HRSn] and bit field widths ES[ERRCHN], CEEI[CEEI], SEEI[SEEI], CERQ[CERQ], SERQ[SERQ], CDNE[CDNE], SSRT[SSRT], CERR[CERR], CINT[CINT], TCDn_CITER_ELINKYES[LINKCH], TCDn_CSR[MAJORLINKCH], TCDn_BITER_ELINKYES[LINKCH]). (Valid only for eDMA modules.) */ +#define FSL_FEATURE_EDMA_MODULE_CHANNEL (8) +/* @brief Total number of DMA channels on all modules. */ +#define FSL_FEATURE_EDMA_DMAMUX_CHANNELS (FSL_FEATURE_SOC_EDMA_COUNT * 8) +/* @brief Number of DMA channel groups (register bit fields CR[ERGA], CR[GRPnPRI], ES[GPE], DCHPRIn[GRPPRI]). (Valid only for eDMA modules.) */ +#define FSL_FEATURE_EDMA_CHANNEL_GROUP_COUNT (1) +/* @brief Has DMA_Error interrupt vector. */ +#define FSL_FEATURE_EDMA_HAS_ERROR_IRQ (1) +/* @brief Number of DMA channels with asynchronous request capability (register EARS). (Valid only for eDMA modules.) */ +#define FSL_FEATURE_EDMA_ASYNCHRO_REQUEST_CHANNEL_COUNT (8) + +/* DMAMUX module features */ + +/* @brief Number of DMA channels (related to number of register CHCFGn). */ +#define FSL_FEATURE_DMAMUX_MODULE_CHANNEL (8) +/* @brief Total number of DMA channels on all modules. */ +#define FSL_FEATURE_DMAMUX_DMAMUX_CHANNELS (FSL_FEATURE_SOC_DMAMUX_COUNT * 8) +/* @brief Has the periodic trigger capability for the triggered DMA channel (register bit CHCFG0[TRIG]). */ +#define FSL_FEATURE_DMAMUX_HAS_TRIG (1) + +/* EWM module features */ + +/* @brief Has clock select (register CLKCTRL). */ +#define FSL_FEATURE_EWM_HAS_CLOCK_SELECT (0) +/* @brief Has clock prescaler (register CLKPRESCALER). */ +#define FSL_FEATURE_EWM_HAS_PRESCALER (1) + +/* FLEXIO module features */ + +/* @brief Has Shifter Status Register (FLEXIO_SHIFTSTAT) */ +#define FSL_FEATURE_FLEXIO_HAS_SHIFTER_STATUS (1) +/* @brief Has Pin Data Input Register (FLEXIO_PIN) */ +#define FSL_FEATURE_FLEXIO_HAS_PIN_STATUS (1) +/* @brief Has Shifter Buffer N Nibble Byte Swapped Register (FLEXIO_SHIFTBUFNBSn) */ +#define FSL_FEATURE_FLEXIO_HAS_SHFT_BUFFER_NIBBLE_BYTE_SWAP (1) +/* @brief Has Shifter Buffer N Half Word Swapped Register (FLEXIO_SHIFTBUFHWSn) */ +#define FSL_FEATURE_FLEXIO_HAS_SHFT_BUFFER_HALF_WORD_SWAP (1) +/* @brief Has Shifter Buffer N Nibble Swapped Register (FLEXIO_SHIFTBUFNISn) */ +#define FSL_FEATURE_FLEXIO_HAS_SHFT_BUFFER_NIBBLE_SWAP (1) +/* @brief Supports Shifter State Mode (FLEXIO_SHIFTCTLn[SMOD]) */ +#define FSL_FEATURE_FLEXIO_HAS_STATE_MODE (1) +/* @brief Supports Shifter Logic Mode (FLEXIO_SHIFTCTLn[SMOD]) */ +#define FSL_FEATURE_FLEXIO_HAS_LOGIC_MODE (1) +/* @brief Supports paralle width (FLEXIO_SHIFTCFGn[PWIDTH]) */ +#define FSL_FEATURE_FLEXIO_HAS_PARALLEL_WIDTH (1) +/* @brief Reset value of the FLEXIO_VERID register */ +#define FSL_FEATURE_FLEXIO_VERID_RESET_VALUE (0x1010001) +/* @brief Reset value of the FLEXIO_PARAM register */ +#define FSL_FEATURE_FLEXIO_PARAM_RESET_VALUE (0x10200808) +/* @brief Flexio DMA request base channel */ +#define FSL_FEATURE_FLEXIO_DMA_REQUEST_BASE_CHANNEL (0) + +/* FLASH module features */ + +/* @brief Is of type FTFA. */ +#define FSL_FEATURE_FLASH_IS_FTFA (1) +/* @brief Is of type FTFE. */ +#define FSL_FEATURE_FLASH_IS_FTFE (0) +/* @brief Is of type FTFL. */ +#define FSL_FEATURE_FLASH_IS_FTFL (0) +/* @brief Has flags indicating the status of the FlexRAM (register bits FCNFG[EEERDY], FCNFG[RAMRDY] and FCNFG[PFLSH]). */ +#define FSL_FEATURE_FLASH_HAS_FLEX_RAM_FLAGS (0) +/* @brief Has program flash swapping status flag (register bit FCNFG[SWAP]). */ +#define FSL_FEATURE_FLASH_HAS_PFLASH_SWAPPING_STATUS_FLAG (0) +/* @brief Has EEPROM region protection (register FEPROT). */ +#define FSL_FEATURE_FLASH_HAS_EEROM_REGION_PROTECTION (0) +/* @brief Has data flash region protection (register FDPROT). */ +#define FSL_FEATURE_FLASH_HAS_DATA_FLASH_REGION_PROTECTION (0) +/* @brief Has flash access control (registers XACCHn, SACCHn, where n is a number, FACSS and FACSN). */ +#define FSL_FEATURE_FLASH_HAS_ACCESS_CONTROL (1) +/* @brief Has flash cache control in FMC module. */ +#define FSL_FEATURE_FLASH_HAS_FMC_FLASH_CACHE_CONTROLS (0) +/* @brief Has flash cache control in MCM module. */ +#define FSL_FEATURE_FLASH_HAS_MCM_FLASH_CACHE_CONTROLS (1) +/* @brief Has flash cache control in MSCM module. */ +#define FSL_FEATURE_FLASH_HAS_MSCM_FLASH_CACHE_CONTROLS (0) +/* @brief P-Flash start address. */ +#define FSL_FEATURE_FLASH_PFLASH_START_ADDRESS (0x00000000) +/* @brief P-Flash block count. */ +#define FSL_FEATURE_FLASH_PFLASH_BLOCK_COUNT (1) +/* @brief P-Flash block size. */ +#define FSL_FEATURE_FLASH_PFLASH_BLOCK_SIZE (131072) +/* @brief P-Flash sector size. */ +#define FSL_FEATURE_FLASH_PFLASH_BLOCK_SECTOR_SIZE (2048) +/* @brief P-Flash write unit size. */ +#define FSL_FEATURE_FLASH_PFLASH_BLOCK_WRITE_UNIT_SIZE (4) +/* @brief P-Flash data path width. */ +#define FSL_FEATURE_FLASH_PFLASH_BLOCK_DATA_PATH_WIDTH (8) +/* @brief P-Flash block swap feature. */ +#define FSL_FEATURE_FLASH_HAS_PFLASH_BLOCK_SWAP (0) +/* @brief Has FlexNVM memory. */ +#define FSL_FEATURE_FLASH_HAS_FLEX_NVM (0) +/* @brief FlexNVM start address. (Valid only if FlexNVM is available.) */ +#define FSL_FEATURE_FLASH_FLEX_NVM_START_ADDRESS (0x00000000) +/* @brief FlexNVM block count. */ +#define FSL_FEATURE_FLASH_FLEX_NVM_BLOCK_COUNT (0) +/* @brief FlexNVM block size. */ +#define FSL_FEATURE_FLASH_FLEX_NVM_BLOCK_SIZE (0) +/* @brief FlexNVM sector size. */ +#define FSL_FEATURE_FLASH_FLEX_NVM_BLOCK_SECTOR_SIZE (0) +/* @brief FlexNVM write unit size. */ +#define FSL_FEATURE_FLASH_FLEX_NVM_BLOCK_WRITE_UNIT_SIZE (0) +/* @brief FlexNVM data path width. */ +#define FSL_FEATURE_FLASH_FLEX_BLOCK_DATA_PATH_WIDTH (0) +/* @brief Has FlexRAM memory. */ +#define FSL_FEATURE_FLASH_HAS_FLEX_RAM (0) +/* @brief FlexRAM start address. (Valid only if FlexRAM is available.) */ +#define FSL_FEATURE_FLASH_FLEX_RAM_START_ADDRESS (0x00000000) +/* @brief FlexRAM size. */ +#define FSL_FEATURE_FLASH_FLEX_RAM_SIZE (0) +/* @brief Has 0x00 Read 1s Block command. */ +#define FSL_FEATURE_FLASH_HAS_READ_1S_BLOCK_CMD (0) +/* @brief Has 0x01 Read 1s Section command. */ +#define FSL_FEATURE_FLASH_HAS_READ_1S_SECTION_CMD (1) +/* @brief Has 0x02 Program Check command. */ +#define FSL_FEATURE_FLASH_HAS_PROGRAM_CHECK_CMD (1) +/* @brief Has 0x03 Read Resource command. */ +#define FSL_FEATURE_FLASH_HAS_READ_RESOURCE_CMD (1) +/* @brief Has 0x06 Program Longword command. */ +#define FSL_FEATURE_FLASH_HAS_PROGRAM_LONGWORD_CMD (1) +/* @brief Has 0x07 Program Phrase command. */ +#define FSL_FEATURE_FLASH_HAS_PROGRAM_PHRASE_CMD (0) +/* @brief Has 0x08 Erase Flash Block command. */ +#define FSL_FEATURE_FLASH_HAS_ERASE_FLASH_BLOCK_CMD (0) +/* @brief Has 0x09 Erase Flash Sector command. */ +#define FSL_FEATURE_FLASH_HAS_ERASE_FLASH_SECTOR_CMD (1) +/* @brief Has 0x0B Program Section command. */ +#define FSL_FEATURE_FLASH_HAS_PROGRAM_SECTION_CMD (0) +/* @brief Has 0x40 Read 1s All Blocks command. */ +#define FSL_FEATURE_FLASH_HAS_READ_1S_ALL_BLOCKS_CMD (1) +/* @brief Has 0x41 Read Once command. */ +#define FSL_FEATURE_FLASH_HAS_READ_ONCE_CMD (1) +/* @brief Has 0x43 Program Once command. */ +#define FSL_FEATURE_FLASH_HAS_PROGRAM_ONCE_CMD (1) +/* @brief Has 0x44 Erase All Blocks command. */ +#define FSL_FEATURE_FLASH_HAS_ERASE_ALL_BLOCKS_CMD (1) +/* @brief Has 0x45 Verify Backdoor Access Key command. */ +#define FSL_FEATURE_FLASH_HAS_VERIFY_BACKDOOR_ACCESS_KEY_CMD (1) +/* @brief Has 0x46 Swap Control command. */ +#define FSL_FEATURE_FLASH_HAS_SWAP_CONTROL_CMD (0) +/* @brief Has 0x49 Erase All Blocks Unsecure command. */ +#define FSL_FEATURE_FLASH_HAS_ERASE_ALL_BLOCKS_UNSECURE_CMD (1) +/* @brief Has 0x4A Read 1s All Execute-only Segments command. */ +#define FSL_FEATURE_FLASH_HAS_READ_1S_ALL_EXECUTE_ONLY_SEGMENTS_CMD (1) +/* @brief Has 0x4B Erase All Execute-only Segments command. */ +#define FSL_FEATURE_FLASH_HAS_ERASE_ALL_EXECUTE_ONLY_SEGMENTS_CMD (1) +/* @brief Has 0x80 Program Partition command. */ +#define FSL_FEATURE_FLASH_HAS_PROGRAM_PARTITION_CMD (0) +/* @brief Has 0x81 Set FlexRAM Function command. */ +#define FSL_FEATURE_FLASH_HAS_SET_FLEXRAM_FUNCTION_CMD (0) +/* @brief P-Flash Erase/Read 1st all block command address alignment. */ +#define FSL_FEATURE_FLASH_PFLASH_BLOCK_CMD_ADDRESS_ALIGMENT (4) +/* @brief P-Flash Erase sector command address alignment. */ +#define FSL_FEATURE_FLASH_PFLASH_SECTOR_CMD_ADDRESS_ALIGMENT (8) +/* @brief P-Flash Rrogram/Verify section command address alignment. */ +#define FSL_FEATURE_FLASH_PFLASH_SECTION_CMD_ADDRESS_ALIGMENT (8) +/* @brief P-Flash Read resource command address alignment. */ +#define FSL_FEATURE_FLASH_PFLASH_RESOURCE_CMD_ADDRESS_ALIGMENT (4) +/* @brief P-Flash Program check command address alignment. */ +#define FSL_FEATURE_FLASH_PFLASH_CHECK_CMD_ADDRESS_ALIGMENT (4) +/* @brief P-Flash Program check command address alignment. */ +#define FSL_FEATURE_FLASH_PFLASH_SWAP_CONTROL_CMD_ADDRESS_ALIGMENT (0) +/* @brief FlexNVM Erase/Read 1st all block command address alignment. */ +#define FSL_FEATURE_FLASH_FLEX_NVM_BLOCK_CMD_ADDRESS_ALIGMENT (0) +/* @brief FlexNVM Erase sector command address alignment. */ +#define FSL_FEATURE_FLASH_FLEX_NVM_SECTOR_CMD_ADDRESS_ALIGMENT (0) +/* @brief FlexNVM Rrogram/Verify section command address alignment. */ +#define FSL_FEATURE_FLASH_FLEX_NVM_SECTION_CMD_ADDRESS_ALIGMENT (0) +/* @brief FlexNVM Read resource command address alignment. */ +#define FSL_FEATURE_FLASH_FLEX_NVM_RESOURCE_CMD_ADDRESS_ALIGMENT (0) +/* @brief FlexNVM Program check command address alignment. */ +#define FSL_FEATURE_FLASH_FLEX_NVM_CHECK_CMD_ADDRESS_ALIGMENT (0) +/* @brief FlexNVM partition code 0000 mapping to data flash size in bytes (0xFFFFFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0000 (0xFFFFFFFF) +/* @brief FlexNVM partition code 0001 mapping to data flash size in bytes (0xFFFFFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0001 (0xFFFFFFFF) +/* @brief FlexNVM partition code 0010 mapping to data flash size in bytes (0xFFFFFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0010 (0xFFFFFFFF) +/* @brief FlexNVM partition code 0011 mapping to data flash size in bytes (0xFFFFFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0011 (0xFFFFFFFF) +/* @brief FlexNVM partition code 0100 mapping to data flash size in bytes (0xFFFFFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0100 (0xFFFFFFFF) +/* @brief FlexNVM partition code 0101 mapping to data flash size in bytes (0xFFFFFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0101 (0xFFFFFFFF) +/* @brief FlexNVM partition code 0110 mapping to data flash size in bytes (0xFFFFFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0110 (0xFFFFFFFF) +/* @brief FlexNVM partition code 0111 mapping to data flash size in bytes (0xFFFFFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0111 (0xFFFFFFFF) +/* @brief FlexNVM partition code 1000 mapping to data flash size in bytes (0xFFFFFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1000 (0xFFFFFFFF) +/* @brief FlexNVM partition code 1001 mapping to data flash size in bytes (0xFFFFFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1001 (0xFFFFFFFF) +/* @brief FlexNVM partition code 1010 mapping to data flash size in bytes (0xFFFFFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1010 (0xFFFFFFFF) +/* @brief FlexNVM partition code 1011 mapping to data flash size in bytes (0xFFFFFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1011 (0xFFFFFFFF) +/* @brief FlexNVM partition code 1100 mapping to data flash size in bytes (0xFFFFFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1100 (0xFFFFFFFF) +/* @brief FlexNVM partition code 1101 mapping to data flash size in bytes (0xFFFFFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1101 (0xFFFFFFFF) +/* @brief FlexNVM partition code 1110 mapping to data flash size in bytes (0xFFFFFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1110 (0xFFFFFFFF) +/* @brief FlexNVM partition code 1111 mapping to data flash size in bytes (0xFFFFFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1111 (0xFFFFFFFF) +/* @brief Emulated eeprom size code 0000 mapping to emulated eeprom size in bytes (0xFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_0000 (0xFFFF) +/* @brief Emulated eeprom size code 0001 mapping to emulated eeprom size in bytes (0xFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_0001 (0xFFFF) +/* @brief Emulated eeprom size code 0010 mapping to emulated eeprom size in bytes (0xFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_0010 (0xFFFF) +/* @brief Emulated eeprom size code 0011 mapping to emulated eeprom size in bytes (0xFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_0011 (0xFFFF) +/* @brief Emulated eeprom size code 0100 mapping to emulated eeprom size in bytes (0xFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_0100 (0xFFFF) +/* @brief Emulated eeprom size code 0101 mapping to emulated eeprom size in bytes (0xFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_0101 (0xFFFF) +/* @brief Emulated eeprom size code 0110 mapping to emulated eeprom size in bytes (0xFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_0110 (0xFFFF) +/* @brief Emulated eeprom size code 0111 mapping to emulated eeprom size in bytes (0xFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_0111 (0xFFFF) +/* @brief Emulated eeprom size code 1000 mapping to emulated eeprom size in bytes (0xFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_1000 (0xFFFF) +/* @brief Emulated eeprom size code 1001 mapping to emulated eeprom size in bytes (0xFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_1001 (0xFFFF) +/* @brief Emulated eeprom size code 1010 mapping to emulated eeprom size in bytes (0xFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_1010 (0xFFFF) +/* @brief Emulated eeprom size code 1011 mapping to emulated eeprom size in bytes (0xFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_1011 (0xFFFF) +/* @brief Emulated eeprom size code 1100 mapping to emulated eeprom size in bytes (0xFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_1100 (0xFFFF) +/* @brief Emulated eeprom size code 1101 mapping to emulated eeprom size in bytes (0xFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_1101 (0xFFFF) +/* @brief Emulated eeprom size code 1110 mapping to emulated eeprom size in bytes (0xFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_1110 (0xFFFF) +/* @brief Emulated eeprom size code 1111 mapping to emulated eeprom size in bytes (0xFFFF = reserved). */ +#define FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_1111 (0xFFFF) + +/* GPIO module features */ + +/* @brief Has fast (single cycle) access capability via a dedicated memory region. */ +#define FSL_FEATURE_GPIO_HAS_FAST_GPIO (0) +/* @brief Has port input disable register (PIDR). */ +#define FSL_FEATURE_GPIO_HAS_INPUT_DISABLE (0) +/* @brief Has dedicated interrupt vector. */ +#define FSL_FEATURE_GPIO_HAS_PORT_INTERRUPT_VECTOR (1) + +/* I2C module features */ + +/* @brief Has System Management Bus support (registers SMB, A2, SLTL and SLTH). */ +#define FSL_FEATURE_I2C_HAS_SMBUS (1) +/* @brief Maximum supported baud rate in kilobit per second. */ +#define FSL_FEATURE_I2C_MAX_BAUD_KBPS (400) +/* @brief Is affected by errata with ID 6070 (repeat start cannot be generated if the F[MULT] bit field is set to a non-zero value). */ +#define FSL_FEATURE_I2C_HAS_ERRATA_6070 (0) +/* @brief Has DMA support (register bit C1[DMAEN]). */ +#define FSL_FEATURE_I2C_HAS_DMA_SUPPORT (1) +/* @brief Has I2C bus start and stop detection (register bits FLT[SSIE], FLT[STARTF] and FLT[STOPF]). */ +#define FSL_FEATURE_I2C_HAS_START_STOP_DETECT (1) +/* @brief Has I2C bus stop detection (register bits FLT[STOPIE] and FLT[STOPF]). */ +#define FSL_FEATURE_I2C_HAS_STOP_DETECT (0) +/* @brief Has I2C bus stop hold off (register bit FLT[SHEN]). */ +#define FSL_FEATURE_I2C_HAS_STOP_HOLD_OFF (1) +/* @brief Maximum width of the glitch filter in number of bus clocks. */ +#define FSL_FEATURE_I2C_MAX_GLITCH_FILTER_WIDTH (15) +/* @brief Has control of the drive capability of the I2C pins. */ +#define FSL_FEATURE_I2C_HAS_HIGH_DRIVE_SELECTION (1) +/* @brief Has double buffering support (register S2). */ +#define FSL_FEATURE_I2C_HAS_DOUBLE_BUFFERING (1) +/* @brief Has double buffer enable. */ +#define FSL_FEATURE_I2C_HAS_DOUBLE_BUFFER_ENABLE (1) + +/* INTMUX module features */ + +/* @brief Number of INTMUX channels (related to number of register CHn_CSR). */ +#define FSL_FEATURE_INTMUX_CHANNEL_COUNT (4) +/* @brief Number of INTMUX IRQ source. */ +#define FSL_FEATURE_INTMUX_IRQ_COUNT (32) +/* @brief The start IRQ index of first INTMUX source IRQ. */ +#define FSL_FEATURE_INTMUX_IRQ_START_INDEX (32) + +/* LLWU module features */ + +#if defined(CPU_MKL82Z128VLH7) || defined(CPU_MKL82Z128VLK7) || defined(CPU_MKL82Z128VMP7) + /* @brief Maximum number of pins (maximal index plus one) connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN (16) + /* @brief Has pins 8-15 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_EXTERNAL_PIN_GROUP2 (1) + /* @brief Maximum number of internal modules connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE (8) + /* @brief Number of digital filters. */ + #define FSL_FEATURE_LLWU_HAS_PIN_FILTER (4) + /* @brief Has MF register. */ + #define FSL_FEATURE_LLWU_HAS_MF (1) + /* @brief Has PF register. */ + #define FSL_FEATURE_LLWU_HAS_PF (1) + /* @brief Has possibility to enable reset in low leakage power mode and enable digital filter for RESET pin (register LLWU_RST). */ + #define FSL_FEATURE_LLWU_HAS_RESET_ENABLE (0) + /* @brief Has external pin 0 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN0 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN0_GPIO_IDX (GPIOE_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN0_GPIO_PIN (1) + /* @brief Has external pin 1 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN1 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN1_GPIO_IDX (GPIOE_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN1_GPIO_PIN (2) + /* @brief Has external pin 2 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN2 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN2_GPIO_IDX (GPIOE_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN2_GPIO_PIN (4) + /* @brief Has external pin 3 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN3 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN3_GPIO_IDX (GPIOA_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN3_GPIO_PIN (4) + /* @brief Has external pin 4 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN4 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN4_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN4_GPIO_PIN (0) + /* @brief Has external pin 5 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN5 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN5_GPIO_IDX (GPIOB_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN5_GPIO_PIN (0) + /* @brief Has external pin 6 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN6 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN6_GPIO_IDX (GPIOC_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN6_GPIO_PIN (1) + /* @brief Has external pin 7 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN7 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN7_GPIO_IDX (GPIOC_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN7_GPIO_PIN (3) + /* @brief Has external pin 8 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN8 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN8_GPIO_IDX (GPIOC_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN8_GPIO_PIN (4) + /* @brief Has external pin 9 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN9 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN9_GPIO_IDX (GPIOC_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN9_GPIO_PIN (5) + /* @brief Has external pin 10 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN10 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN10_GPIO_IDX (GPIOC_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN10_GPIO_PIN (6) + /* @brief Has external pin 11 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN11 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN11_GPIO_IDX (GPIOC_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN11_GPIO_PIN (11) + /* @brief Has external pin 12 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN12 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN12_GPIO_IDX (GPIOD_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN12_GPIO_PIN (0) + /* @brief Has external pin 13 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN13 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN13_GPIO_IDX (GPIOD_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN13_GPIO_PIN (2) + /* @brief Has external pin 14 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN14 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN14_GPIO_IDX (GPIOD_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN14_GPIO_PIN (4) + /* @brief Has external pin 15 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN15 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN15_GPIO_IDX (GPIOD_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN15_GPIO_PIN (6) + /* @brief Has external pin 16 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN16 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN16_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN16_GPIO_PIN (0) + /* @brief Has external pin 17 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN17 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN17_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN17_GPIO_PIN (0) + /* @brief Has external pin 18 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN18 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN18_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN18_GPIO_PIN (0) + /* @brief Has external pin 19 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN19 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN19_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN19_GPIO_PIN (0) + /* @brief Has external pin 20 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN20 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN20_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN20_GPIO_PIN (0) + /* @brief Has external pin 21 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN21 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN21_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN21_GPIO_PIN (0) + /* @brief Has external pin 22 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN22 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN22_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN22_GPIO_PIN (0) + /* @brief Has external pin 23 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN23 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN23_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN23_GPIO_PIN (0) + /* @brief Has external pin 24 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN24 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN24_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN24_GPIO_PIN (0) + /* @brief Has external pin 25 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN25 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN25_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN25_GPIO_PIN (0) + /* @brief Has external pin 26 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN26 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN26_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN26_GPIO_PIN (0) + /* @brief Has external pin 27 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN27 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN27_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN27_GPIO_PIN (0) + /* @brief Has external pin 28 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN28 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN28_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN28_GPIO_PIN (0) + /* @brief Has external pin 29 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN29 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN29_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN29_GPIO_PIN (0) + /* @brief Has external pin 30 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN30 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN30_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN30_GPIO_PIN (0) + /* @brief Has external pin 31 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN31 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN31_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN31_GPIO_PIN (0) + /* @brief Has internal module 0 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE0 (1) + /* @brief Has internal module 1 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE1 (1) + /* @brief Has internal module 2 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE2 (0) + /* @brief Has internal module 3 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE3 (0) + /* @brief Has internal module 4 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE4 (1) + /* @brief Has internal module 5 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE5 (1) + /* @brief Has internal module 6 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE6 (0) + /* @brief Has internal module 7 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE7 (1) + /* @brief Has Version ID Register (LLWU_VERID). */ + #define FSL_FEATURE_LLWU_HAS_VERID (0) + /* @brief Has Parameter Register (LLWU_PARAM). */ + #define FSL_FEATURE_LLWU_HAS_PARAM (0) + /* @brief Width of registers of the LLWU. */ + #define FSL_FEATURE_LLWU_REG_BITWIDTH (8) + /* @brief Has DMA Enable register (LLWU_DE). */ + #define FSL_FEATURE_LLWU_HAS_DMA_ENABLE_REG (0) +#elif defined(CPU_MKL82Z128VLL7) + /* @brief Maximum number of pins (maximal index plus one) connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN (19) + /* @brief Has pins 8-15 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_EXTERNAL_PIN_GROUP2 (1) + /* @brief Maximum number of internal modules connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE (8) + /* @brief Number of digital filters. */ + #define FSL_FEATURE_LLWU_HAS_PIN_FILTER (4) + /* @brief Has MF register. */ + #define FSL_FEATURE_LLWU_HAS_MF (1) + /* @brief Has PF register. */ + #define FSL_FEATURE_LLWU_HAS_PF (1) + /* @brief Has possibility to enable reset in low leakage power mode and enable digital filter for RESET pin (register LLWU_RST). */ + #define FSL_FEATURE_LLWU_HAS_RESET_ENABLE (0) + /* @brief Has external pin 0 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN0 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN0_GPIO_IDX (GPIOE_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN0_GPIO_PIN (1) + /* @brief Has external pin 1 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN1 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN1_GPIO_IDX (GPIOE_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN1_GPIO_PIN (2) + /* @brief Has external pin 2 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN2 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN2_GPIO_IDX (GPIOE_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN2_GPIO_PIN (4) + /* @brief Has external pin 3 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN3 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN3_GPIO_IDX (GPIOA_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN3_GPIO_PIN (4) + /* @brief Has external pin 4 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN4 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN4_GPIO_IDX (GPIOA_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN4_GPIO_PIN (13) + /* @brief Has external pin 5 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN5 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN5_GPIO_IDX (GPIOB_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN5_GPIO_PIN (0) + /* @brief Has external pin 6 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN6 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN6_GPIO_IDX (GPIOC_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN6_GPIO_PIN (1) + /* @brief Has external pin 7 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN7 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN7_GPIO_IDX (GPIOC_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN7_GPIO_PIN (3) + /* @brief Has external pin 8 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN8 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN8_GPIO_IDX (GPIOC_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN8_GPIO_PIN (4) + /* @brief Has external pin 9 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN9 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN9_GPIO_IDX (GPIOC_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN9_GPIO_PIN (5) + /* @brief Has external pin 10 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN10 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN10_GPIO_IDX (GPIOC_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN10_GPIO_PIN (6) + /* @brief Has external pin 11 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN11 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN11_GPIO_IDX (GPIOC_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN11_GPIO_PIN (11) + /* @brief Has external pin 12 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN12 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN12_GPIO_IDX (GPIOD_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN12_GPIO_PIN (0) + /* @brief Has external pin 13 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN13 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN13_GPIO_IDX (GPIOD_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN13_GPIO_PIN (2) + /* @brief Has external pin 14 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN14 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN14_GPIO_IDX (GPIOD_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN14_GPIO_PIN (4) + /* @brief Has external pin 15 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN15 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN15_GPIO_IDX (GPIOD_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN15_GPIO_PIN (6) + /* @brief Has external pin 16 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN16 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN16_GPIO_IDX (GPIOE_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN16_GPIO_PIN (6) + /* @brief Has external pin 17 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN17 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN17_GPIO_IDX (GPIOE_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN17_GPIO_PIN (9) + /* @brief Has external pin 18 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN18 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN18_GPIO_IDX (GPIOE_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN18_GPIO_PIN (10) + /* @brief Has external pin 19 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN19 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN19_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN19_GPIO_PIN (0) + /* @brief Has external pin 20 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN20 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN20_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN20_GPIO_PIN (0) + /* @brief Has external pin 21 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN21 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN21_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN21_GPIO_PIN (0) + /* @brief Has external pin 22 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN22 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN22_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN22_GPIO_PIN (0) + /* @brief Has external pin 23 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN23 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN23_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN23_GPIO_PIN (0) + /* @brief Has external pin 24 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN24 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN24_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN24_GPIO_PIN (0) + /* @brief Has external pin 25 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN25 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN25_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN25_GPIO_PIN (0) + /* @brief Has external pin 26 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN26 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN26_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN26_GPIO_PIN (0) + /* @brief Has external pin 27 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN27 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN27_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN27_GPIO_PIN (0) + /* @brief Has external pin 28 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN28 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN28_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN28_GPIO_PIN (0) + /* @brief Has external pin 29 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN29 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN29_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN29_GPIO_PIN (0) + /* @brief Has external pin 30 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN30 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN30_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN30_GPIO_PIN (0) + /* @brief Has external pin 31 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN31 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN31_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN31_GPIO_PIN (0) + /* @brief Has internal module 0 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE0 (1) + /* @brief Has internal module 1 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE1 (1) + /* @brief Has internal module 2 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE2 (0) + /* @brief Has internal module 3 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE3 (0) + /* @brief Has internal module 4 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE4 (1) + /* @brief Has internal module 5 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE5 (1) + /* @brief Has internal module 6 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE6 (0) + /* @brief Has internal module 7 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE7 (1) + /* @brief Has Version ID Register (LLWU_VERID). */ + #define FSL_FEATURE_LLWU_HAS_VERID (0) + /* @brief Has Parameter Register (LLWU_PARAM). */ + #define FSL_FEATURE_LLWU_HAS_PARAM (0) + /* @brief Width of registers of the LLWU. */ + #define FSL_FEATURE_LLWU_REG_BITWIDTH (8) + /* @brief Has DMA Enable register (LLWU_DE). */ + #define FSL_FEATURE_LLWU_HAS_DMA_ENABLE_REG (0) +#elif defined(CPU_MKL82Z128VMC7) + /* @brief Maximum number of pins (maximal index plus one) connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN (26) + /* @brief Has pins 8-15 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_EXTERNAL_PIN_GROUP2 (1) + /* @brief Maximum number of internal modules connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE (8) + /* @brief Number of digital filters. */ + #define FSL_FEATURE_LLWU_HAS_PIN_FILTER (4) + /* @brief Has MF register. */ + #define FSL_FEATURE_LLWU_HAS_MF (1) + /* @brief Has PF register. */ + #define FSL_FEATURE_LLWU_HAS_PF (1) + /* @brief Has possibility to enable reset in low leakage power mode and enable digital filter for RESET pin (register LLWU_RST). */ + #define FSL_FEATURE_LLWU_HAS_RESET_ENABLE (0) + /* @brief Has external pin 0 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN0 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN0_GPIO_IDX (GPIOE_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN0_GPIO_PIN (1) + /* @brief Has external pin 1 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN1 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN1_GPIO_IDX (GPIOE_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN1_GPIO_PIN (2) + /* @brief Has external pin 2 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN2 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN2_GPIO_IDX (GPIOE_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN2_GPIO_PIN (4) + /* @brief Has external pin 3 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN3 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN3_GPIO_IDX (GPIOA_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN3_GPIO_PIN (4) + /* @brief Has external pin 4 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN4 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN4_GPIO_IDX (GPIOA_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN4_GPIO_PIN (13) + /* @brief Has external pin 5 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN5 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN5_GPIO_IDX (GPIOB_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN5_GPIO_PIN (0) + /* @brief Has external pin 6 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN6 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN6_GPIO_IDX (GPIOC_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN6_GPIO_PIN (1) + /* @brief Has external pin 7 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN7 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN7_GPIO_IDX (GPIOC_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN7_GPIO_PIN (3) + /* @brief Has external pin 8 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN8 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN8_GPIO_IDX (GPIOC_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN8_GPIO_PIN (4) + /* @brief Has external pin 9 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN9 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN9_GPIO_IDX (GPIOC_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN9_GPIO_PIN (5) + /* @brief Has external pin 10 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN10 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN10_GPIO_IDX (GPIOC_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN10_GPIO_PIN (6) + /* @brief Has external pin 11 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN11 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN11_GPIO_IDX (GPIOC_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN11_GPIO_PIN (11) + /* @brief Has external pin 12 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN12 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN12_GPIO_IDX (GPIOD_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN12_GPIO_PIN (0) + /* @brief Has external pin 13 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN13 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN13_GPIO_IDX (GPIOD_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN13_GPIO_PIN (2) + /* @brief Has external pin 14 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN14 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN14_GPIO_IDX (GPIOD_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN14_GPIO_PIN (4) + /* @brief Has external pin 15 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN15 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN15_GPIO_IDX (GPIOD_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN15_GPIO_PIN (6) + /* @brief Has external pin 16 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN16 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN16_GPIO_IDX (GPIOE_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN16_GPIO_PIN (6) + /* @brief Has external pin 17 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN17 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN17_GPIO_IDX (GPIOE_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN17_GPIO_PIN (9) + /* @brief Has external pin 18 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN18 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN18_GPIO_IDX (GPIOE_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN18_GPIO_PIN (10) + /* @brief Has external pin 19 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN19 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN19_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN19_GPIO_PIN (0) + /* @brief Has external pin 20 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN20 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN20_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN20_GPIO_PIN (0) + /* @brief Has external pin 21 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN21 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN21_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN21_GPIO_PIN (0) + /* @brief Has external pin 22 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN22 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN22_GPIO_IDX (GPIOA_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN22_GPIO_PIN (10) + /* @brief Has external pin 23 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN23 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN23_GPIO_IDX (GPIOA_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN23_GPIO_PIN (11) + /* @brief Has external pin 24 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN24 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN24_GPIO_IDX (GPIOD_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN24_GPIO_PIN (8) + /* @brief Has external pin 25 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN25 (1) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN25_GPIO_IDX (GPIOD_IDX) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN25_GPIO_PIN (11) + /* @brief Has external pin 26 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN26 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN26_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN26_GPIO_PIN (0) + /* @brief Has external pin 27 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN27 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN27_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN27_GPIO_PIN (0) + /* @brief Has external pin 28 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN28 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN28_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN28_GPIO_PIN (0) + /* @brief Has external pin 29 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN29 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN29_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN29_GPIO_PIN (0) + /* @brief Has external pin 30 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN30 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN30_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN30_GPIO_PIN (0) + /* @brief Has external pin 31 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN31 (0) + /* @brief Index of port of external pin. */ + #define FSL_FEATURE_LLWU_PIN31_GPIO_IDX (0) + /* @brief Number of external pin port on specified port. */ + #define FSL_FEATURE_LLWU_PIN31_GPIO_PIN (0) + /* @brief Has internal module 0 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE0 (1) + /* @brief Has internal module 1 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE1 (1) + /* @brief Has internal module 2 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE2 (0) + /* @brief Has internal module 3 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE3 (0) + /* @brief Has internal module 4 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE4 (1) + /* @brief Has internal module 5 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE5 (1) + /* @brief Has internal module 6 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE6 (0) + /* @brief Has internal module 7 connected to LLWU device. */ + #define FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE7 (1) + /* @brief Has Version ID Register (LLWU_VERID). */ + #define FSL_FEATURE_LLWU_HAS_VERID (0) + /* @brief Has Parameter Register (LLWU_PARAM). */ + #define FSL_FEATURE_LLWU_HAS_PARAM (0) + /* @brief Width of registers of the LLWU. */ + #define FSL_FEATURE_LLWU_REG_BITWIDTH (8) + /* @brief Has DMA Enable register (LLWU_DE). */ + #define FSL_FEATURE_LLWU_HAS_DMA_ENABLE_REG (0) +#endif /* defined(CPU_MKL82Z128VLH7) || defined(CPU_MKL82Z128VLK7) || defined(CPU_MKL82Z128VMP7) */ + +/* LPTMR module features */ + +/* @brief Has shared interrupt handler with another LPTMR module. */ +#define FSL_FEATURE_LPTMR_HAS_SHARED_IRQ_HANDLER (0) + +/* LPUART module features */ + +/* @brief Has receive FIFO overflow detection (bit field CFIFO[RXOFE]). */ +#define FSL_FEATURE_LPUART_HAS_IRQ_EXTENDED_FUNCTIONS (0) +/* @brief Has low power features (can be enabled in wait mode via register bit C1[DOZEEN] or CTRL[DOZEEN] if the registers are 32-bit wide). */ +#define FSL_FEATURE_LPUART_HAS_LOW_POWER_UART_SUPPORT (1) +/* @brief Has extended data register ED (or extra flags in the DATA register if the registers are 32-bit wide). */ +#define FSL_FEATURE_LPUART_HAS_EXTENDED_DATA_REGISTER_FLAGS (1) +/* @brief Capacity (number of entries) of the transmit/receive FIFO (or zero if no FIFO is available). */ +#define FSL_FEATURE_LPUART_HAS_FIFO (1) +/* @brief Has 32-bit register MODIR */ +#define FSL_FEATURE_LPUART_HAS_MODIR (1) +/* @brief Hardware flow control (RTS, CTS) is supported. */ +#define FSL_FEATURE_LPUART_HAS_MODEM_SUPPORT (1) +/* @brief Infrared (modulation) is supported. */ +#define FSL_FEATURE_LPUART_HAS_IR_SUPPORT (1) +/* @brief 2 bits long stop bit is available. */ +#define FSL_FEATURE_LPUART_HAS_STOP_BIT_CONFIG_SUPPORT (1) +/* @brief If 10-bit mode is supported. */ +#define FSL_FEATURE_LPUART_HAS_10BIT_DATA_SUPPORT (1) +/* @brief If 7-bit mode is supported. */ +#define FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT (0) +/* @brief Baud rate fine adjustment is available. */ +#define FSL_FEATURE_LPUART_HAS_BAUD_RATE_FINE_ADJUST_SUPPORT (0) +/* @brief Baud rate oversampling is available (has bit fields C4[OSR], C5[BOTHEDGE], C5[RESYNCDIS] or BAUD[OSR], BAUD[BOTHEDGE], BAUD[RESYNCDIS] if the registers are 32-bit wide). */ +#define FSL_FEATURE_LPUART_HAS_BAUD_RATE_OVER_SAMPLING_SUPPORT (1) +/* @brief Baud rate oversampling is available. */ +#define FSL_FEATURE_LPUART_HAS_RX_RESYNC_SUPPORT (1) +/* @brief Baud rate oversampling is available. */ +#define FSL_FEATURE_LPUART_HAS_BOTH_EDGE_SAMPLING_SUPPORT (1) +/* @brief Peripheral type. */ +#define FSL_FEATURE_LPUART_IS_SCI (1) +/* @brief Capacity (number of entries) of the transmit/receive FIFO (or zero if no FIFO is available). */ +#define FSL_FEATURE_LPUART_FIFO_SIZEn(x) \ + ((x) == LPUART0 ? (8) : \ + ((x) == LPUART1 ? (8) : \ + ((x) == LPUART2 ? (1) : (-1)))) +/* @brief Maximal data width without parity bit. */ +#define FSL_FEATURE_LPUART_MAX_DATA_WIDTH_WITH_NO_PARITY (10) +/* @brief Maximal data width with parity bit. */ +#define FSL_FEATURE_LPUART_MAX_DATA_WIDTH_WITH_PARITY (9) +/* @brief Supports two match addresses to filter incoming frames. */ +#define FSL_FEATURE_LPUART_HAS_ADDRESS_MATCHING (1) +/* @brief Has transmitter/receiver DMA enable bits C5[TDMAE]/C5[RDMAE] (or BAUD[TDMAE]/BAUD[RDMAE] if the registers are 32-bit wide). */ +#define FSL_FEATURE_LPUART_HAS_DMA_ENABLE (1) +/* @brief Has transmitter/receiver DMA select bits C4[TDMAS]/C4[RDMAS], resp. C5[TDMAS]/C5[RDMAS] if IS_SCI = 0. */ +#define FSL_FEATURE_LPUART_HAS_DMA_SELECT (0) +/* @brief Data character bit order selection is supported (bit field S2[MSBF] or STAT[MSBF] if the registers are 32-bit wide). */ +#define FSL_FEATURE_LPUART_HAS_BIT_ORDER_SELECT (1) +/* @brief Has smart card (ISO7816 protocol) support and no improved smart card support. */ +#define FSL_FEATURE_LPUART_HAS_SMART_CARD_SUPPORT (0) +/* @brief Has improved smart card (ISO7816 protocol) support. */ +#define FSL_FEATURE_LPUART_HAS_IMPROVED_SMART_CARD_SUPPORT (0) +/* @brief Has local operation network (CEA709.1-B protocol) support. */ +#define FSL_FEATURE_LPUART_HAS_LOCAL_OPERATION_NETWORK_SUPPORT (0) +/* @brief Has 32-bit registers (BAUD, STAT, CTRL, DATA, MATCH, MODIR) instead of 8-bit (BDH, BDL, C1, S1, D, etc.). */ +#define FSL_FEATURE_LPUART_HAS_32BIT_REGISTERS (1) +/* @brief Lin break detect available (has bit BAUD[LBKDIE]). */ +#define FSL_FEATURE_LPUART_HAS_LIN_BREAK_DETECT (1) +/* @brief UART stops in Wait mode available (has bit C1[UARTSWAI]). */ +#define FSL_FEATURE_LPUART_HAS_WAIT_MODE_OPERATION (0) +/* @brief Has separate DMA RX and TX requests. */ +#define FSL_FEATURE_LPUART_HAS_SEPARATE_DMA_RX_TX_REQn(x) (1) +/* @brief Has separate RX and TX interrupts. */ +#define FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ (0) +/* @brief Has LPAURT_PARAM. */ +#define FSL_FEATURE_LPUART_HAS_PARAM (0) +/* @brief Has LPUART_VERID. */ +#define FSL_FEATURE_LPUART_HAS_VERID (0) +/* @brief Has LPUART_GLOBAL. */ +#define FSL_FEATURE_LPUART_HAS_GLOBAL (0) +/* @brief Has LPUART_PINCFG. */ +#define FSL_FEATURE_LPUART_HAS_PINCFG (0) + +/* LTC module features */ + +/* @brief LTC module supports DES algorithm. */ +#define FSL_FEATURE_LTC_HAS_DES (1) +/* @brief LTC module supports PKHA algorithm. */ +#define FSL_FEATURE_LTC_HAS_PKHA (1) +/* @brief LTC module supports SHA algorithm. */ +#define FSL_FEATURE_LTC_HAS_SHA (1) +/* @brief LTC module supports AES GCM mode. */ +#define FSL_FEATURE_LTC_HAS_GCM (1) +/* @brief LTC module supports DPAMS registers. */ +#define FSL_FEATURE_LTC_HAS_DPAMS (1) +/* @brief LTC module supports AES with 24 bytes key. */ +#define FSL_FEATURE_LTC_HAS_AES192 (1) +/* @brief LTC module supports AES with 32 bytes key. */ +#define FSL_FEATURE_LTC_HAS_AES256 (1) + +/* MCG module features */ + +/* @brief PRDIV base value (divider of register bit field [PRDIV] zero value). */ +#define FSL_FEATURE_MCG_PLL_PRDIV_BASE (1) +/* @brief Maximum PLL external reference divider value (max. value of register bit field C5[PRVDIV]). */ +#define FSL_FEATURE_MCG_PLL_PRDIV_MAX (7) +/* @brief VCO divider base value (multiply factor of register bit field C6[VDIV] zero value). */ +#define FSL_FEATURE_MCG_PLL_VDIV_BASE (16) +/* @brief PLL reference clock low range. OSCCLK/PLL_R. */ +#define FSL_FEATURE_MCG_PLL_REF_MIN (8000000) +/* @brief PLL reference clock high range. OSCCLK/PLL_R. */ +#define FSL_FEATURE_MCG_PLL_REF_MAX (16000000) +/* @brief The PLL clock is divided by 2 before VCO divider. */ +#define FSL_FEATURE_MCG_HAS_PLL_INTERNAL_DIV (1) +/* @brief FRDIV supports 1280. */ +#define FSL_FEATURE_MCG_FRDIV_SUPPORT_1280 (1) +/* @brief FRDIV supports 1536. */ +#define FSL_FEATURE_MCG_FRDIV_SUPPORT_1536 (1) +/* @brief MCGFFCLK divider. */ +#define FSL_FEATURE_MCG_FFCLK_DIV (1) +/* @brief Is PLL clock divided by 2 before MCG PLL/FLL clock selection in the SIM module. */ +#define FSL_FEATURE_MCG_HAS_PLL_EXTRA_DIV (0) +/* @brief Has 32kHz RTC external reference clock (register bits C8[LOCS1], C8[CME1], C8[LOCRE1] and RTC module are present). */ +#define FSL_FEATURE_MCG_HAS_RTC_32K (1) +/* @brief Has PLL1 external reference clock (registers C10, C11, C12, S2). */ +#define FSL_FEATURE_MCG_HAS_PLL1 (0) +/* @brief Has 48MHz internal oscillator. */ +#define FSL_FEATURE_MCG_HAS_IRC_48M (1) +/* @brief Has OSC1 external oscillator (registers C10, C11, C12, S2). */ +#define FSL_FEATURE_MCG_HAS_OSC1 (0) +/* @brief Has fast internal reference clock fine trim (register bit C2[FCFTRIM]). */ +#define FSL_FEATURE_MCG_HAS_FCFTRIM (1) +/* @brief Has PLL loss of lock reset (register bit C8[LOLRE]). */ +#define FSL_FEATURE_MCG_HAS_LOLRE (1) +/* @brief Has MCG OSC clock selection (register bit C7[OSCSEL]). */ +#define FSL_FEATURE_MCG_USE_OSCSEL (1) +/* @brief Has PLL external reference selection (register bits C5[PLLREFSEL0] and C11[PLLREFSEL1]). */ +#define FSL_FEATURE_MCG_USE_PLLREFSEL (0) +/* @brief TBD */ +#define FSL_FEATURE_MCG_USE_SYSTEM_CLOCK (0) +/* @brief Has phase-locked loop (PLL) (register C5 and bits C6[VDIV], C6[PLLS], C6[LOLIE0], S[PLLST], S[LOCK0], S[LOLS]). */ +#define FSL_FEATURE_MCG_HAS_PLL (1) +/* @brief Has phase-locked loop (PLL) PRDIV (register C5[PRDIV]. */ +#define FSL_FEATURE_MCG_HAS_PLL_PRDIV (1) +/* @brief Has phase-locked loop (PLL) VDIV (register C6[VDIV]. */ +#define FSL_FEATURE_MCG_HAS_PLL_VDIV (1) +/* @brief PLL/OSC related register bit fields have PLL/OSC index in their name. */ +#define FSL_FEATURE_MCG_HAS_PLL_OSC_INDEX (0) +/* @brief Has frequency-locked loop (FLL) (register ATCVH, ATCVL and bits C1[IREFS], C1[FRDIV]). */ +#define FSL_FEATURE_MCG_HAS_FLL (1) +/* @brief Has PLL external to MCG (C9[PLL_CME], C9[PLL_LOCRE], C9[EXT_PLL_LOCS]). */ +#define FSL_FEATURE_MCG_HAS_EXTERNAL_PLL (0) +/* @brief Has crystal oscillator or external reference clock low power controls (register bits C2[HGO], C2[RANGE]). */ +#define FSL_FEATURE_MCG_HAS_EXT_REF_LOW_POWER_CONTROL (1) +/* @brief Has PLL/FLL selection as MCG output (register bit C6[PLLS]). */ +#define FSL_FEATURE_MCG_HAS_PLL_FLL_SELECTION (1) +/* @brief Has PLL output selection (PLL0/PLL1, PLL/external PLL) (register bit C11[PLLCS]). */ +#define FSL_FEATURE_MCG_HAS_PLL_OUTPUT_SELECTION (0) +/* @brief Has automatic trim machine (registers ATCVH, ATCVL and bits SC[ATMF], SC[ATMS], SC[ATME]). */ +#define FSL_FEATURE_MCG_HAS_AUTO_TRIM_MACHINE (1) +/* @brief Has external clock monitor (register bit C6[CME]). */ +#define FSL_FEATURE_MCG_HAS_EXTERNAL_CLOCK_MONITOR (1) +/* @brief Has low frequency internal reference clock (IRC) (registers LTRIMRNG, LFRIM, LSTRIM and bit MC[LIRC_DIV2]). */ +#define FSL_FEATURE_MCG_HAS_LOW_FREQ_IRC (0) +/* @brief Has high frequency internal reference clock (IRC) (registers HCTRIM, HTTRIM, HFTRIM and bit MC[HIRCEN]). */ +#define FSL_FEATURE_MCG_HAS_HIGH_FREQ_IRC (0) +/* @brief Has PEI mode or PBI mode. */ +#define FSL_FEATURE_MCG_HAS_PLL_INTERNAL_MODE (0) +/* @brief Reset clock mode is BLPI. */ +#define FSL_FEATURE_MCG_RESET_IS_BLPI (0) + +/* MPU module features */ + +/* @brief Specifies number of descriptors available. */ +#define FSL_FEATURE_MPU_DESCRIPTOR_COUNT (8) +/* @brief Has process identifier support. */ +#define FSL_FEATURE_MPU_HAS_PROCESS_IDENTIFIER (1) +/* @brief Total number of MPU master. */ +#define FSL_FEATURE_MPU_MASTER_COUNT (8) +/* @brief Total number of MPU master with privileged rights */ +#define FSL_FEATURE_MPU_PRIVILEGED_RIGHTS_MASTER_COUNT (4) +/* @brief Max index of used MPU master. */ +#define FSL_FEATURE_MPU_MASTER_MAX_INDEX (4) +/* @brief Max index of used MPU master with privileged rights */ +#define FSL_FEATURE_MPU_PRIVILEGED_RIGHTS_MASTER_MAX_INDEX (2) +/* @brief Has master 0. */ +#define FSL_FEATURE_MPU_HAS_MASTER0 (1) +/* @brief Has master 1. */ +#define FSL_FEATURE_MPU_HAS_MASTER1 (1) +/* @brief Has master 2. */ +#define FSL_FEATURE_MPU_HAS_MASTER2 (1) +/* @brief Has master 3. */ +#define FSL_FEATURE_MPU_HAS_MASTER3 (0) +/* @brief Has master 4. */ +#define FSL_FEATURE_MPU_HAS_MASTER4 (1) +/* @brief Has master 5. */ +#define FSL_FEATURE_MPU_HAS_MASTER5 (0) +/* @brief Has master 6. */ +#define FSL_FEATURE_MPU_HAS_MASTER6 (0) +/* @brief Has master 7. */ +#define FSL_FEATURE_MPU_HAS_MASTER7 (0) + +/* interrupt module features */ + +/* @brief Lowest interrupt request number. */ +#define FSL_FEATURE_INTERRUPT_IRQ_MIN (-14) +/* @brief Highest interrupt request number. */ +#define FSL_FEATURE_INTERRUPT_IRQ_MAX (31) + +/* OSC module features */ + +/* @brief Has OSC1 external oscillator. */ +#define FSL_FEATURE_OSC_HAS_OSC1 (0) +/* @brief Has OSC0 external oscillator. */ +#define FSL_FEATURE_OSC_HAS_OSC0 (0) +/* @brief Has OSC external oscillator (without index). */ +#define FSL_FEATURE_OSC_HAS_OSC (1) +/* @brief Number of OSC external oscillators. */ +#define FSL_FEATURE_OSC_OSC_COUNT (1) +/* @brief Has external reference clock divider (register bit field DIV[ERPS]). */ +#define FSL_FEATURE_OSC_HAS_EXT_REF_CLOCK_DIVIDER (1) + +/* PIT module features */ + +/* @brief Number of channels (related to number of registers LDVALn, CVALn, TCTRLn, TFLGn). */ +#define FSL_FEATURE_PIT_TIMER_COUNT (4) +/* @brief Has lifetime timer (related to existence of registers LTMR64L and LTMR64H). */ +#define FSL_FEATURE_PIT_HAS_LIFETIME_TIMER (1) +/* @brief Has chain mode (related to existence of register bit field TCTRLn[CHN]). */ +#define FSL_FEATURE_PIT_HAS_CHAIN_MODE (1) +/* @brief Has shared interrupt handler (has not individual interrupt handler for each channel). */ +#define FSL_FEATURE_PIT_HAS_SHARED_IRQ_HANDLER (1) + +/* PMC module features */ + +/* @brief Has Bandgap Enable In VLPx Operation support. */ +#define FSL_FEATURE_PMC_HAS_BGEN (1) +/* @brief Has Bandgap Buffer Enable. */ +#define FSL_FEATURE_PMC_HAS_BGBE (1) +/* @brief Has Bandgap Buffer Drive Select. */ +#define FSL_FEATURE_PMC_HAS_BGBDS (0) +/* @brief Has Low-Voltage Detect Voltage Select support. */ +#define FSL_FEATURE_PMC_HAS_LVDV (1) +/* @brief Has Low-Voltage Warning Voltage Select support. */ +#define FSL_FEATURE_PMC_HAS_LVWV (1) +/* @brief Has LPO. */ +#define FSL_FEATURE_PMC_HAS_LPO (0) +/* @brief Has VLPx option PMC_REGSC[VLPO]. */ +#define FSL_FEATURE_PMC_HAS_VLPO (1) +/* @brief Has acknowledge isolation support. */ +#define FSL_FEATURE_PMC_HAS_ACKISO (1) +/* @brief Has Regulator In Full Performance Mode Status Bit PMC_REGSC[REGFPM]. */ +#define FSL_FEATURE_PMC_HAS_REGFPM (0) +/* @brief Has Regulator In Run Regulation Status Bit PMC_REGSC[REGONS]. */ +#define FSL_FEATURE_PMC_HAS_REGONS (1) +/* @brief Has PMC_HVDSC1. */ +#define FSL_FEATURE_PMC_HAS_HVDSC1 (1) +/* @brief Has PMC_PARAM. */ +#define FSL_FEATURE_PMC_HAS_PARAM (0) +/* @brief Has PMC_VERID. */ +#define FSL_FEATURE_PMC_HAS_VERID (0) + +/* PORT module features */ + +/* @brief Has control lock (register bit PCR[LK]). */ +#define FSL_FEATURE_PORT_HAS_PIN_CONTROL_LOCK (1) +/* @brief Has open drain control (register bit PCR[ODE]). */ +#define FSL_FEATURE_PORT_HAS_OPEN_DRAIN (1) +/* @brief Has digital filter (registers DFER, DFCR and DFWR). */ +#define FSL_FEATURE_PORT_HAS_DIGITAL_FILTER (0) +/* @brief Has DMA request (register bit field PCR[IRQC] values). */ +#define FSL_FEATURE_PORT_HAS_DMA_REQUEST (1) +/* @brief Has pull resistor selection available. */ +#define FSL_FEATURE_PORT_HAS_PULL_SELECTION (1) +/* @brief Has pull resistor enable (register bit PCR[PE]). */ +#define FSL_FEATURE_PORT_HAS_PULL_ENABLE (1) +/* @brief Has slew rate control (register bit PCR[SRE]). */ +#define FSL_FEATURE_PORT_HAS_SLEW_RATE (1) +/* @brief Has passive filter (register bit field PCR[PFE]). */ +#define FSL_FEATURE_PORT_HAS_PASSIVE_FILTER (1) +/* @brief Has drive strength control (register bit PCR[DSE]). */ +#define FSL_FEATURE_PORT_HAS_DRIVE_STRENGTH (0) +/* @brief Has separate drive strength register (HDRVE). */ +#define FSL_FEATURE_PORT_HAS_DRIVE_STRENGTH_REGISTER (0) +/* @brief Has glitch filter (register IOFLT). */ +#define FSL_FEATURE_PORT_HAS_GLITCH_FILTER (0) +/* @brief Defines width of PCR[MUX] field. */ +#define FSL_FEATURE_PORT_PCR_MUX_WIDTH (3) +/* @brief Has dedicated interrupt vector. */ +#define FSL_FEATURE_PORT_HAS_INTERRUPT_VECTOR (1) +/* @brief Defines whether PCR[IRQC] bit-field has flag states. */ +#define FSL_FEATURE_PORT_HAS_IRQC_FLAG (1) +/* @brief Defines whether PCR[IRQC] bit-field has trigger states. */ +#define FSL_FEATURE_PORT_HAS_IRQC_TRIGGER (1) + +/* QSPI module features */ + +/* @brief QSPI lookup table depth. */ +#define FSL_FEATURE_QSPI_LUT_DEPTH (64) +/* @brief QSPI Tx FIFO depth. */ +#define FSL_FEATURE_QSPI_TXFIFO_DEPTH (16) +/* @brief QSPI Rx FIFO depth. */ +#define FSL_FEATURE_QSPI_RXFIFO_DEPTH (16) +/* @brief QSPI AHB buffer count. */ +#define FSL_FEATURE_QSPI_AHB_BUFFER_COUNT (4) +/* @brief QSPI AMBA base address. */ +#define FSL_FEATURE_QSPI_AMBA_BASE (0x68000000U) +/* @brief QSPI AHB buffer ARDB base address. */ +#define FSL_FEATURE_QSPI_ARDB_BASE (0x67000000U) + +/* RCM module features */ + +/* @brief Has Loss-of-Lock Reset support. */ +#define FSL_FEATURE_RCM_HAS_LOL (1) +/* @brief Has Loss-of-Clock Reset support. */ +#define FSL_FEATURE_RCM_HAS_LOC (1) +/* @brief Has JTAG generated Reset support. */ +#define FSL_FEATURE_RCM_HAS_JTAG (0) +/* @brief Has EzPort generated Reset support. */ +#define FSL_FEATURE_RCM_HAS_EZPORT (0) +/* @brief Has bit-field indicating EZP_MS_B pin state during last reset. */ +#define FSL_FEATURE_RCM_HAS_EZPMS (0) +/* @brief Has boot ROM configuration, MR[BOOTROM], FM[FORCEROM] */ +#define FSL_FEATURE_RCM_HAS_BOOTROM (1) +/* @brief Has sticky system reset status register RCM_SSRS0 and RCM_SSRS1. */ +#define FSL_FEATURE_RCM_HAS_SSRS (1) +/* @brief Has Version ID Register (RCM_VERID). */ +#define FSL_FEATURE_RCM_HAS_VERID (0) +/* @brief Has Parameter Register (RCM_PARAM). */ +#define FSL_FEATURE_RCM_HAS_PARAM (0) +/* @brief Has Reset Interrupt Enable Register RCM_SRIE. */ +#define FSL_FEATURE_RCM_HAS_SRIE (0) +/* @brief Width of registers of the RCM. */ +#define FSL_FEATURE_RCM_REG_WIDTH (8) +/* @brief Has Core 1 generated Reset support RCM_SRS[CORE1] */ +#define FSL_FEATURE_RCM_HAS_CORE1 (0) +/* @brief Has MDM-AP system reset support RCM_SRS1[MDM_AP] */ +#define FSL_FEATURE_RCM_HAS_MDM_AP (1) +/* @brief Has wakeup reset feature. Register bit SRS[WAKEUP]. */ +#define FSL_FEATURE_RCM_HAS_WAKEUP (1) + +/* RTC module features */ + +/* @brief Has wakeup pin. */ +#define FSL_FEATURE_RTC_HAS_WAKEUP_PIN (1) +/* @brief Has wakeup pin selection (bit field CR[WPS]). */ +#define FSL_FEATURE_RTC_HAS_WAKEUP_PIN_SELECTION (1) +/* @brief Has low power features (registers MER, MCLR and MCHR). */ +#define FSL_FEATURE_RTC_HAS_MONOTONIC (0) +/* @brief Has read/write access control (registers WAR and RAR). */ +#define FSL_FEATURE_RTC_HAS_ACCESS_CONTROL (1) +/* @brief Has security features (registers TTSR, MER, MCLR and MCHR). */ +#define FSL_FEATURE_RTC_HAS_SECURITY (1) +/* @brief Has RTC_CLKIN available. */ +#define FSL_FEATURE_RTC_HAS_RTC_CLKIN (0) +/* @brief Has prescaler adjust for LPO. */ +#define FSL_FEATURE_RTC_HAS_LPO_ADJUST (0) +/* @brief Has Clock Pin Enable field. */ +#define FSL_FEATURE_RTC_HAS_CPE (0) +/* @brief Has Timer Seconds Interrupt Configuration field. */ +#define FSL_FEATURE_RTC_HAS_TSIC (0) +/* @brief Has OSC capacitor setting RTC_CR[SC2P ~ SC16P] */ +#define FSL_FEATURE_RTC_HAS_OSC_SCXP (1) + +/* SIM module features */ + +/* @brief Has USB FS divider. */ +#define FSL_FEATURE_SIM_USBFS_USE_SPECIAL_DIVIDER (0) +/* @brief Is PLL clock divided by 2 before MCG PLL/FLL clock selection. */ +#define FSL_FEATURE_SIM_PLLCLK_USE_SPECIAL_DIVIDER (0) +/* @brief Has RAM size specification (register bit field SOPT1[RAMSIZE]). */ +#define FSL_FEATURE_SIM_OPT_HAS_RAMSIZE (1) +/* @brief Has 32k oscillator clock output (register bit SOPT1[OSC32KOUT]). */ +#define FSL_FEATURE_SIM_OPT_HAS_OSC32K_OUT (0) +/* @brief Has 32k oscillator clock selection (register bit field SOPT1[OSC32KSEL]). */ +#define FSL_FEATURE_SIM_OPT_HAS_OSC32K_SELECTION (1) +/* @brief 32k oscillator clock selection width (width of register bit field SOPT1[OSC32KSEL]). */ +#define FSL_FEATURE_SIM_OPT_OSC32K_SELECTION_WIDTH (2) +/* @brief Has RTC clock output selection (register bit SOPT2[RTCCLKOUTSEL]). */ +#define FSL_FEATURE_SIM_OPT_HAS_RTC_CLOCK_OUT_SELECTION (1) +/* @brief Has USB voltage regulator (register bits SOPT1[USBVSTBY], SOPT1[USBSSTBY], SOPT1[USBREGEN], SOPT1CFG[URWE], SOPT1CFG[UVSWE], SOPT1CFG[USSWE]). */ +#define FSL_FEATURE_SIM_OPT_HAS_USB_VOLTAGE_REGULATOR (0) +/* @brief USB has integrated PHY (register bits USBPHYCTL[USBVREGSEL], USBPHYCTL[USBVREGPD], USBPHYCTL[USB3VOUTTRG], USBPHYCTL[USBDISILIM], SOPT2[USBSLSRC], SOPT2[USBREGEN]). */ +#define FSL_FEATURE_SIM_OPT_HAS_USB_PHY (0) +/* @brief Has PTD7 pad drive strength control (register bit SOPT2[PTD7PAD]). */ +#define FSL_FEATURE_SIM_OPT_HAS_PTD7PAD (0) +/* @brief Has FlexBus security level selection (register bit SOPT2[FBSL]). */ +#define FSL_FEATURE_SIM_OPT_HAS_FBSL (0) +/* @brief Has number of FlexBus hold cycle before FlexBus can release bus (register bit SOPT6[PCR]). */ +#define FSL_FEATURE_SIM_OPT_HAS_PCR (0) +/* @brief Has number of NFC hold cycle in case of FlexBus request (register bit SOPT6[MCC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_MCC (0) +/* @brief Has UART open drain enable (register bits UARTnODE, where n is a number, in register SOPT5). */ +#define FSL_FEATURE_SIM_OPT_HAS_ODE (0) +/* @brief Number of LPUART modules (number of register bits LPUARTn, where n is a number, in register SCGC5). */ +#define FSL_FEATURE_SIM_OPT_LPUART_COUNT (0) +/* @brief Number of UART modules (number of register bits UARTn, where n is a number, in register SCGC4). */ +#define FSL_FEATURE_SIM_OPT_UART_COUNT (0) +/* @brief Has UART0 open drain enable (register bit SOPT5[UART0ODE]). */ +#define FSL_FEATURE_SIM_OPT_HAS_UART0_ODE (0) +/* @brief Has UART1 open drain enable (register bit SOPT5[UART1ODE]). */ +#define FSL_FEATURE_SIM_OPT_HAS_UART1_ODE (0) +/* @brief Has UART2 open drain enable (register bit SOPT5[UART2ODE]). */ +#define FSL_FEATURE_SIM_OPT_HAS_UART2_ODE (0) +/* @brief Has LPUART0 open drain enable (register bit SOPT5[LPUART0ODE]). */ +#define FSL_FEATURE_SIM_OPT_HAS_LPUART0_ODE (0) +/* @brief Has LPUART1 open drain enable (register bit SOPT5[LPUART1ODE]). */ +#define FSL_FEATURE_SIM_OPT_HAS_LPUART1_ODE (0) +/* @brief Has CMT/UART pad drive strength control (register bit SOPT2[CMTUARTPAD]). */ +#define FSL_FEATURE_SIM_OPT_HAS_CMTUARTPAD (0) +/* @brief Has LPUART0 transmit data source selection (register bit SOPT5[LPUART0TXSRC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_LPUART0_TX_SRC (1) +/* @brief Has LPUART0 receive data source selection (register bit SOPT5[LPUART0RXSRC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_LPUART0_RX_SRC (1) +/* @brief Has LPUART1 transmit data source selection (register bit SOPT5[LPUART1TXSRC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_LPUART1_TX_SRC (1) +/* @brief Has LPUART1 receive data source selection (register bit SOPT5[LPUART1RXSRC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_LPUART1_RX_SRC (1) +/* @brief Has UART0 transmit data source selection (register bit SOPT5[UART0TXSRC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_UART0_TX_SRC (0) +/* @brief UART0 transmit data source selection width (width of register bit SOPT5[UART0TXSRC]). */ +#define FSL_FEATURE_SIM_OPT_UART0_TX_SRC_WIDTH (0) +/* @brief Has UART0 receive data source selection (register bit SOPT5[UART0RXSRC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_UART0_RX_SRC (0) +/* @brief UART0 receive data source selection width (width of register bit SOPT5[UART0RXSRC]). */ +#define FSL_FEATURE_SIM_OPT_UART0_RX_SRC_WIDTH (0) +/* @brief Has UART1 transmit data source selection (register bit SOPT5[UART1TXSRC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_UART1_TX_SRC (0) +/* @brief Has UART1 receive data source selection (register bit SOPT5[UART1RXSRC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_UART1_RX_SRC (0) +/* @brief UART1 receive data source selection width (width of register bit SOPT5[UART1RXSRC]). */ +#define FSL_FEATURE_SIM_OPT_UART1_RX_SRC_WIDTH (0) +/* @brief Has FTM module(s) configuration. */ +#define FSL_FEATURE_SIM_OPT_HAS_FTM (0) +/* @brief Number of FTM modules. */ +#define FSL_FEATURE_SIM_OPT_FTM_COUNT (0) +/* @brief Number of FTM triggers with selectable source. */ +#define FSL_FEATURE_SIM_OPT_FTM_TRIGGER_COUNT (0) +/* @brief Has FTM0 triggers source selection (register bits SOPT4[FTM0TRGnSRC], where n is a number). */ +#define FSL_FEATURE_SIM_OPT_HAS_FTM0_TRIGGER (0) +/* @brief Has FTM3 triggers source selection (register bits SOPT4[FTM3TRGnSRC], where n is a number). */ +#define FSL_FEATURE_SIM_OPT_HAS_FTM3_TRIGGER (0) +/* @brief Has FTM1 channel 0 input capture source selection (register bit SOPT4[FTM1CH0SRC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_FTM1_CHANNELS (0) +/* @brief Has FTM2 channel 0 input capture source selection (register bit SOPT4[FTM2CH0SRC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_FTM2_CHANNELS (0) +/* @brief Has FTM3 channel 0 input capture source selection (register bit SOPT4[FTM3CH0SRC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_FTM3_CHANNELS (0) +/* @brief Has FTM2 channel 1 input capture source selection (register bit SOPT4[FTM2CH1SRC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_FTM2_CHANNEL1 (0) +/* @brief Number of configurable FTM0 fault detection input (number of register bits SOPT4[FTM0FLTn], where n is a number starting from zero). */ +#define FSL_FEATURE_SIM_OPT_FTM0_FAULT_COUNT (0) +/* @brief Number of configurable FTM1 fault detection input (number of register bits SOPT4[FTM1FLTn], where n is a number starting from zero). */ +#define FSL_FEATURE_SIM_OPT_FTM1_FAULT_COUNT (0) +/* @brief Number of configurable FTM2 fault detection input (number of register bits SOPT4[FTM2FLTn], where n is a number starting from zero). */ +#define FSL_FEATURE_SIM_OPT_FTM2_FAULT_COUNT (0) +/* @brief Number of configurable FTM3 fault detection input (number of register bits SOPT4[FTM3FLTn], where n is a number starting from zero). */ +#define FSL_FEATURE_SIM_OPT_FTM3_FAULT_COUNT (0) +/* @brief Has FTM hardware trigger 0 software synchronization (register bit SOPT8[FTMnSYNCBIT], where n is a module instance index). */ +#define FSL_FEATURE_SIM_OPT_HAS_FTM_TRIGGER_SYNC (0) +/* @brief Has FTM channels output source selection (register bit SOPT8[FTMxOCHnSRC], where x is a module instance index and n is a channel index). */ +#define FSL_FEATURE_SIM_OPT_HAS_FTM_CHANNELS_OUTPUT_SRC (0) +/* @brief Has TPM module(s) configuration. */ +#define FSL_FEATURE_SIM_OPT_HAS_TPM (1) +/* @brief The highest TPM module index. */ +#define FSL_FEATURE_SIM_OPT_MAX_TPM_INDEX (2) +/* @brief Has TPM module with index 0. */ +#define FSL_FEATURE_SIM_OPT_HAS_TPM0 (1) +/* @brief Has TPM0 clock selection (register bit field SOPT4[TPM0CLKSEL]). */ +#define FSL_FEATURE_SIM_OPT_HAS_TPM0_CLK_SEL (0) +/* @brief Is TPM channels configuration in the SOPT4 (not SOPT9) register (register bits TPMnCH0SRC, TPMnCLKSEL, where n is a module instance index). */ +#define FSL_FEATURE_SIM_OPT_HAS_TPM_CHANNELS_CONFIG_IN_SOPT4_REG (0) +/* @brief Has TPM1 channel 0 input capture source selection (register bit field SOPT4[TPM1CH0SRC] or SOPT9[TPM1CH0SRC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_TPM1_CH0_SRC_SELECTION (1) +/* @brief Has TPM1 clock selection (register bit field SOPT4[TPM1CLKSEL]). */ +#define FSL_FEATURE_SIM_OPT_HAS_TPM1_CLK_SEL (0) +/* @brief TPM1 channel 0 input capture source selection width (width of register bit field SOPT4[TPM1CH0SRC] or SOPT9[TPM1CH0SRC]). */ +#define FSL_FEATURE_SIM_OPT_TPM1_CH0_SRC_SELECTION_WIDTH (1) +/* @brief Has TPM2 channel 0 input capture source selection (register bit field SOPT4[TPM2CH0SRC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_TPM2_CH0_SRC_SELECTION (0) +/* @brief Has TPM2 clock selection (register bit field SOPT4[TPM2CLKSEL]). */ +#define FSL_FEATURE_SIM_OPT_HAS_TPM2_CLK_SEL (0) +/* @brief Has PLL/FLL clock selection (register bit field SOPT2[PLLFLLSEL]). */ +#define FSL_FEATURE_SIM_OPT_HAS_PLL_FLL_SELECTION (1) +/* @brief PLL/FLL clock selection width (width of register bit field SOPT2[PLLFLLSEL]). */ +#define FSL_FEATURE_SIM_OPT_PLL_FLL_SELECTION_WIDTH (1) +/* @brief Has NFC clock source selection (register bit SOPT2[NFCSRC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_NFCSRC (0) +/* @brief Has eSDHC clock source selection (register bit SOPT2[ESDHCSRC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_ESDHCSRC (0) +/* @brief Has SDHC clock source selection (register bit SOPT2[SDHCSRC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_SDHCSRC (0) +/* @brief Has LCDC clock source selection (register bits SOPT2[LCDCSRC], SOPT2[LCDC_CLKSEL]). */ +#define FSL_FEATURE_SIM_OPT_HAS_LCDCSRC (0) +/* @brief Has ENET timestamp clock source selection (register bit SOPT2[TIMESRC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_TIMESRC (0) +/* @brief Has ENET RMII clock source selection (register bit SOPT2[RMIISRC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_RMIISRC (0) +/* @brief Has USB clock source selection (register bit SOPT2[USBSRC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_USBSRC (1) +/* @brief Has USB FS clock source selection (register bit SOPT2[USBFSRC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_USBFSRC (0) +/* @brief Has USB HS clock source selection (register bit SOPT2[USBHSRC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_USBHSRC (0) +/* @brief Has LPUART clock source selection (register bit SOPT2[LPUARTSRC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_LPUARTSRC (1) +/* @brief Has LPUART0 clock source selection (register bit SOPT2[LPUART0SRC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_LPUART0SRC (0) +/* @brief Has LPUART1 clock source selection (register bit SOPT2[LPUART1SRC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_LPUART1SRC (0) +/* @brief Has FLEXIOSRC clock source selection (register bit SOPT2[FLEXIOSRC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_FLEXIOSRC (1) +/* @brief Has UART0 clock source selection (register bit SOPT2[UART0SRC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_UART0SRC (0) +/* @brief Has TPM clock source selection (register bit SOPT2[TPMSRC]). */ +#define FSL_FEATURE_SIM_OPT_HAS_TPMSRC (1) +/* @brief Has debug trace clock selection (register bit SOPT2[TRACECLKSEL]). */ +#define FSL_FEATURE_SIM_OPT_HAS_TRACE_CLKSEL (0) +/* @brief Number of ADC modules (register bits SOPT7[ADCnTRGSEL], SOPT7[ADCnPRETRGSEL], SOPT7[ADCnALTTRGSEL], where n is a module instance index). */ +#define FSL_FEATURE_SIM_OPT_ADC_COUNT (1) +/* @brief ADC module has alternate trigger (register bit SOPT7[ADC0ALTTRGEN]). */ +#define FSL_FEATURE_SIM_OPT_ADC_HAS_ALTERNATE_TRIGGER (0) +/* @brief ADC0 alternate trigger enable width (width of bit field ADC0ALTTRGEN of register SOPT7). */ +#define FSL_FEATURE_SIM_OPT_ADC0ALTTRGEN_WIDTH (0) +/* @brief ADC1 alternate trigger enable width (width of bit field ADC1ALTTRGEN of register SOPT7). */ +#define FSL_FEATURE_SIM_OPT_ADC1ALTTRGEN_WIDTH (0) +/* @brief ADC2 alternate trigger enable width (width of bit field ADC2ALTTRGEN of register SOPT7). */ +#define FSL_FEATURE_SIM_OPT_ADC2ALTTRGEN_WIDTH (0) +/* @brief ADC3 alternate trigger enable width (width of bit field ADC3ALTTRGEN of register SOPT7). */ +#define FSL_FEATURE_SIM_OPT_ADC3ALTTRGEN_WIDTH (0) +/* @brief HSADC0 converter A alternate trigger enable width (width of bit field HSADC0AALTTRGEN of register SOPT7). */ +#define FSL_FEATURE_SIM_OPT_HSADC0AALTTRGEN_WIDTH (0) +/* @brief HSADC1 converter A alternate trigger enable width (width of bit field HSADC1AALTTRGEN of register SOPT7). */ +#define FSL_FEATURE_SIM_OPT_HSADC1AALTTRGEN_WIDTH (0) +/* @brief ADC converter A alternate trigger enable width (width of bit field ADCAALTTRGEN of register SOPT7). */ +#define FSL_FEATURE_SIM_OPT_ADCAALTTRGEN_WIDTH (0) +/* @brief HSADC0 converter B alternate trigger enable width (width of bit field HSADC0BALTTRGEN of register SOPT7). */ +#define FSL_FEATURE_SIM_OPT_HSADC0BALTTRGEN_WIDTH (0) +/* @brief HSADC1 converter B alternate trigger enable width (width of bit field HSADC1BALTTRGEN of register SOPT7). */ +#define FSL_FEATURE_SIM_OPT_HSADC1BALTTRGEN_WIDTH (0) +/* @brief ADC converter B alternate trigger enable width (width of bit field ADCBALTTRGEN of register SOPT7). */ +#define FSL_FEATURE_SIM_OPT_ADCBALTTRGEN_WIDTH (0) +/* @brief Has clock 2 output divider (register bit field CLKDIV1[OUTDIV2]). */ +#define FSL_FEATURE_SIM_DIVIDER_HAS_OUTDIV2 (1) +/* @brief Has clock 3 output divider (register bit field CLKDIV1[OUTDIV3]). */ +#define FSL_FEATURE_SIM_DIVIDER_HAS_OUTDIV3 (0) +/* @brief Has clock 4 output divider (register bit field CLKDIV1[OUTDIV4]). */ +#define FSL_FEATURE_SIM_DIVIDER_HAS_OUTDIV4 (1) +/* @brief Clock 4 output divider width (width of register bit field CLKDIV1[OUTDIV4]). */ +#define FSL_FEATURE_SIM_DIVIDER_OUTDIV4_WIDTH (4) +/* @brief Has clock 5 output divider (register bit field CLKDIV1[OUTDIV5]). */ +#define FSL_FEATURE_SIM_DIVIDER_HAS_OUTDIV5 (1) +/* @brief Has USB clock divider (register bit field CLKDIV2[USBDIV] and CLKDIV2[USBFRAC]). */ +#define FSL_FEATURE_SIM_DIVIDER_HAS_USBDIV (1) +/* @brief Has USB FS clock divider (register bit field CLKDIV2[USBFSDIV] and CLKDIV2[USBFSFRAC]). */ +#define FSL_FEATURE_SIM_DIVIDER_HAS_USBFSDIV (0) +/* @brief Has USB HS clock divider (register bit field CLKDIV2[USBHSDIV] and CLKDIV2[USBHSFRAC]). */ +#define FSL_FEATURE_SIM_DIVIDER_HAS_USBHSDIV (0) +/* @brief Has PLL/FLL clock divider (register bit field CLKDIV3[PLLFLLDIV] and CLKDIV3[PLLFLLFRAC]). */ +#define FSL_FEATURE_SIM_DIVIDER_HAS_PLLFLLDIV (1) +/* @brief Has LCDC clock divider (register bit field CLKDIV3[LCDCDIV] and CLKDIV3[LCDCFRAC]). */ +#define FSL_FEATURE_SIM_DIVIDER_HAS_LCDCDIV (0) +/* @brief Has trace clock divider (register bit field CLKDIV4[TRACEDIV] and CLKDIV4[TRACEFRAC]). */ +#define FSL_FEATURE_SIM_DIVIDER_HAS_TRACEDIV (0) +/* @brief Has NFC clock divider (register bit field CLKDIV4[NFCDIV] and CLKDIV4[NFCFRAC]). */ +#define FSL_FEATURE_SIM_DIVIDER_HAS_NFCDIV (0) +/* @brief Has Kinetis family ID (register bit field SDID[FAMILYID]). */ +#define FSL_FEATURE_SIM_SDID_HAS_FAMILYID (1) +/* @brief Has Kinetis family ID (register bit field SDID[FAMID]). */ +#define FSL_FEATURE_SIM_SDID_HAS_FAMID (1) +/* @brief Has Kinetis sub-family ID (register bit field SDID[SUBFAMID]). */ +#define FSL_FEATURE_SIM_SDID_HAS_SUBFAMID (1) +/* @brief Has Kinetis series ID (register bit field SDID[SERIESID]). */ +#define FSL_FEATURE_SIM_SDID_HAS_SERIESID (0) +/* @brief Has device die ID (register bit field SDID[DIEID]). */ +#define FSL_FEATURE_SIM_SDID_HAS_DIEID (1) +/* @brief Has system SRAM size specifier (register bit field SDID[SRAMSIZE]). */ +#define FSL_FEATURE_SIM_SDID_HAS_SRAMSIZE (0) +/* @brief Has flash mode (register bit FCFG1[FLASHDOZE]). */ +#define FSL_FEATURE_SIM_FCFG_HAS_FLASHDOZE (1) +/* @brief Has flash disable (register bit FCFG1[FLASHDIS]). */ +#define FSL_FEATURE_SIM_FCFG_HAS_FLASHDIS (1) +/* @brief Has FTFE disable (register bit FCFG1[FTFDIS]). */ +#define FSL_FEATURE_SIM_FCFG_HAS_FTFDIS (0) +/* @brief Has FlexNVM size specifier (register bit field FCFG1[NVMSIZE]). */ +#define FSL_FEATURE_SIM_FCFG_HAS_NVMSIZE (0) +/* @brief Has EEPROM size specifier (register bit field FCFG1[EESIZE]). */ +#define FSL_FEATURE_SIM_FCFG_HAS_EESIZE (0) +/* @brief Has FlexNVM partition (register bit field FCFG1[DEPART]). */ +#define FSL_FEATURE_SIM_FCFG_HAS_DEPART (0) +/* @brief Maximum flash address block 0 address specifier (register bit field FCFG2[MAXADDR0]). */ +#define FSL_FEATURE_SIM_FCFG_HAS_MAXADDR0 (1) +/* @brief Maximum flash address block 1 address specifier (register bit field FCFG2[MAXADDR1]). */ +#define FSL_FEATURE_SIM_FCFG_HAS_MAXADDR1 (0) +/* @brief Maximum flash address block 0 or 1 address specifier (register bit field FCFG2[MAXADDR01]). */ +#define FSL_FEATURE_SIM_FCFG_HAS_MAXADDR01 (0) +/* @brief Maximum flash address block 2 or 3 address specifier (register bit field FCFG2[MAXADDR23]). */ +#define FSL_FEATURE_SIM_FCFG_HAS_MAXADDR23 (0) +/* @brief Has program flash availability specifier (register bit FCFG2[PFLSH]). */ +#define FSL_FEATURE_SIM_FCFG_HAS_PFLSH (0) +/* @brief Has program flash swapping (register bit FCFG2[SWAPPFLSH]). */ +#define FSL_FEATURE_SIM_FCFG_HAS_PFLSH_SWAP (0) +/* @brief Has miscellanious control register (register MCR). */ +#define FSL_FEATURE_SIM_HAS_MISC_CONTROLS (0) +/* @brief Has COP watchdog (registers COPC and SRVCOP). */ +#define FSL_FEATURE_SIM_HAS_COP_WATCHDOG (0) +/* @brief Has COP watchdog stop (register bits COPC[COPSTPEN], COPC[COPDBGEN] and COPC[COPCLKSEL]). */ +#define FSL_FEATURE_SIM_HAS_COP_STOP (0) +/* @brief Has LLWU clock gate bit (e.g SIM_SCGC4). */ +#define FSL_FEATURE_SIM_HAS_SCGC_LLWU (0) +/* @brief Has MISCCTRL reg. */ +#define FSL_FEATURE_SIM_HAS_MISCCTRL (1) +/* @brief Has LTCEN bit (e.g SIM_MISCCTRL). */ +#define FSL_FEATURE_SIM_HAS_MISCCTRL_LTCEN (1) +/* @brief Has DMAINTSEL0 bit (e.g SIM_MISCCTRL). */ +#define FSL_FEATURE_SIM_HAS_MISCCTRL_DMAINTSEL0 (1) +/* @brief Has DMAINTSEL1 bit (e.g SIM_MISCCTRL). */ +#define FSL_FEATURE_SIM_HAS_MISCCTRL_DMAINTSEL1 (1) +/* @brief Has DMAINTSEL2 bit (e.g SIM_MISCCTRL). */ +#define FSL_FEATURE_SIM_HAS_MISCCTRL_DMAINTSEL2 (1) +/* @brief Has DMAINTSEL3 bit (e.g SIM_MISCCTRL). */ +#define FSL_FEATURE_SIM_HAS_MISCCTRL_DMAINTSEL3 (1) +/* @brief Has SECKEY0 reg. */ +#define FSL_FEATURE_SIM_HAS_SECKEY0 (1) +/* @brief Has SECKEY bit (e.g SIM_SECKEY0). */ +#define FSL_FEATURE_SIM_HAS_SECKEY0_SECKEY (1) +/* @brief Has SECKEY1 reg. */ +#define FSL_FEATURE_SIM_HAS_SECKEY1 (1) +/* @brief Has SECKEY bit (e.g SIM_SECKEY1). */ +#define FSL_FEATURE_SIM_HAS_SECKEY1_SECKEY (1) +/* @brief Has SECKEY2 reg. */ +#define FSL_FEATURE_SIM_HAS_SECKEY2 (1) +/* @brief Has SECKEY bit (e.g SIM_SECKEY2). */ +#define FSL_FEATURE_SIM_HAS_SECKEY2_SECKEY (1) +/* @brief Has SECKEY3 reg. */ +#define FSL_FEATURE_SIM_HAS_SECKEY3 (1) +/* @brief Has SECKEY bit (e.g SIM_SECKEY3). */ +#define FSL_FEATURE_SIM_HAS_SECKEY3_SECKEY (1) + +/* SMC module features */ + +/* @brief Has partial stop option (register bit STOPCTRL[PSTOPO]). */ +#define FSL_FEATURE_SMC_HAS_PSTOPO (1) +/* @brief Has LPO power option (register bit STOPCTRL[LPOPO]). */ +#define FSL_FEATURE_SMC_HAS_LPOPO (1) +/* @brief Has POR power option (register bit STOPCTRL[PORPO] or VLLSCTRL[PORPO]). */ +#define FSL_FEATURE_SMC_HAS_PORPO (1) +/* @brief Has low power wakeup on interrupt (register bit PMCTRL[LPWUI]). */ +#define FSL_FEATURE_SMC_HAS_LPWUI (0) +/* @brief Has LLS or VLLS mode control (register bit STOPCTRL[LLSM]). */ +#define FSL_FEATURE_SMC_HAS_LLS_SUBMODE (1) +/* @brief Has VLLS mode control (register bit VLLSCTRL[VLLSM]). */ +#define FSL_FEATURE_SMC_USE_VLLSCTRL_REG (0) +/* @brief Has VLLS mode control (register bit STOPCTRL[VLLSM]). */ +#define FSL_FEATURE_SMC_USE_STOPCTRL_VLLSM (0) +/* @brief Has RAM partition 2 power option (register bit STOPCTRL[RAM2PO]). */ +#define FSL_FEATURE_SMC_HAS_RAM2_POWER_OPTION (0) +/* @brief Has high speed run mode (register bit PMPROT[AHSRUN]). */ +#define FSL_FEATURE_SMC_HAS_HIGH_SPEED_RUN_MODE (1) +/* @brief Has low leakage stop mode (register bit PMPROT[ALLS]). */ +#define FSL_FEATURE_SMC_HAS_LOW_LEAKAGE_STOP_MODE (1) +/* @brief Has very low leakage stop mode (register bit PMPROT[AVLLS]). */ +#define FSL_FEATURE_SMC_HAS_VERY_LOW_LEAKAGE_STOP_MODE (1) +/* @brief Has stop submode. */ +#define FSL_FEATURE_SMC_HAS_SUB_STOP_MODE (1) +/* @brief Has stop submode 0(VLLS0). */ +#define FSL_FEATURE_SMC_HAS_STOP_SUBMODE0 (1) +/* @brief Has stop submode 2(VLLS2). */ +#define FSL_FEATURE_SMC_HAS_STOP_SUBMODE2 (1) +/* @brief Has SMC_PARAM. */ +#define FSL_FEATURE_SMC_HAS_PARAM (0) +/* @brief Has SMC_VERID. */ +#define FSL_FEATURE_SMC_HAS_VERID (0) + +/* DSPI module features */ + +#if defined(CPU_MKL82Z128VLH7) || defined(CPU_MKL82Z128VLK7) || defined(CPU_MKL82Z128VMP7) + /* @brief Receive/transmit FIFO size in number of items. */ + #define FSL_FEATURE_DSPI_FIFO_SIZEn(x) \ + ((x) == DSPI0 ? (4) : \ + ((x) == DSPI1 ? (1) : (-1))) + /* @brief Maximum transfer data width in bits. */ + #define FSL_FEATURE_DSPI_MAX_DATA_WIDTH (16) + /* @brief Maximum number of chip select pins. (Reflects the width of register bit field PUSHR[PCS].) */ + #define FSL_FEATURE_DSPI_MAX_CHIP_SELECT_COUNT (6) + /* @brief Number of chip select pins. */ + #define FSL_FEATURE_DSPI_CHIP_SELECT_COUNT (5) + /* @brief Has chip select strobe capability on the PCS5 pin. */ + #define FSL_FEATURE_DSPI_HAS_CHIP_SELECT_STROBE (1) + /* @brief Has separated TXDATA and CMD FIFOs (register SREX). */ + #define FSL_FEATURE_DSPI_HAS_SEPARATE_TXDATA_CMD_FIFO (0) + /* @brief Has 16-bit data transfer support. */ + #define FSL_FEATURE_DSPI_16BIT_TRANSFERS (1) + /* @brief Has separate DMA RX and TX requests. */ + #define FSL_FEATURE_DSPI_HAS_SEPARATE_DMA_RX_TX_REQn(x) (1) +#elif defined(CPU_MKL82Z128VLL7) || defined(CPU_MKL82Z128VMC7) + /* @brief Receive/transmit FIFO size in number of items. */ + #define FSL_FEATURE_DSPI_FIFO_SIZEn(x) \ + ((x) == DSPI0 ? (4) : \ + ((x) == DSPI1 ? (1) : (-1))) + /* @brief Maximum transfer data width in bits. */ + #define FSL_FEATURE_DSPI_MAX_DATA_WIDTH (16) + /* @brief Maximum number of chip select pins. (Reflects the width of register bit field PUSHR[PCS].) */ + #define FSL_FEATURE_DSPI_MAX_CHIP_SELECT_COUNT (6) + /* @brief Number of chip select pins. */ + #define FSL_FEATURE_DSPI_CHIP_SELECT_COUNT (6) + /* @brief Has chip select strobe capability on the PCS5 pin. */ + #define FSL_FEATURE_DSPI_HAS_CHIP_SELECT_STROBE (1) + /* @brief Has separated TXDATA and CMD FIFOs (register SREX). */ + #define FSL_FEATURE_DSPI_HAS_SEPARATE_TXDATA_CMD_FIFO (0) + /* @brief Has 16-bit data transfer support. */ + #define FSL_FEATURE_DSPI_16BIT_TRANSFERS (1) + /* @brief Has separate DMA RX and TX requests. */ + #define FSL_FEATURE_DSPI_HAS_SEPARATE_DMA_RX_TX_REQn(x) (1) +#endif /* defined(CPU_MKL82Z128VLH7) || defined(CPU_MKL82Z128VLK7) || defined(CPU_MKL82Z128VMP7) */ + +/* SysTick module features */ + +/* @brief Systick has external reference clock. */ +#define FSL_FEATURE_SYSTICK_HAS_EXT_REF (0) +/* @brief Systick external reference clock is core clock divided by this value. */ +#define FSL_FEATURE_SYSTICK_EXT_REF_CORE_DIV (0) + +/* TPM module features */ + +/* @brief Bus clock is the source clock for the module. */ +#define FSL_FEATURE_TPM_BUS_CLOCK (0) +/* @brief Number of channels. */ +#define FSL_FEATURE_TPM_CHANNEL_COUNTn(x) \ + ((x) == TPM0 ? (6) : \ + ((x) == TPM1 ? (2) : \ + ((x) == TPM2 ? (2) : (-1)))) +/* @brief Has counter reset by the selected input capture event (register bits C0SC[ICRST], C1SC[ICRST], ...). */ +#define FSL_FEATURE_TPM_HAS_COUNTER_RESET_BY_CAPTURE_EVENT (0) +/* @brief Has TPM_PARAM. */ +#define FSL_FEATURE_TPM_HAS_PARAM (0) +/* @brief Has TPM_VERID. */ +#define FSL_FEATURE_TPM_HAS_VERID (0) +/* @brief Has TPM_GLOBAL. */ +#define FSL_FEATURE_TPM_HAS_GLOBAL (0) +/* @brief Has TPM_TRIG. */ +#define FSL_FEATURE_TPM_HAS_TRIG (0) +/* @brief Has counter pause on trigger. */ +#define FSL_FEATURE_TPM_HAS_PAUSE_COUNTER_ON_TRIGGER (1) +/* @brief Has external trigger selection. */ +#define FSL_FEATURE_TPM_HAS_EXTERNAL_TRIGGER_SELECTION (1) +/* @brief Has TPM_COMBINE. */ +#define FSL_FEATURE_TPM_HAS_COMBINE (1) +/* @brief Has TPM_POL. */ +#define FSL_FEATURE_TPM_HAS_POL (1) +/* @brief Has TPM_FILTER. */ +#define FSL_FEATURE_TPM_HAS_FILTER (1) +/* @brief Has TPM_QDCTRL. */ +#define FSL_FEATURE_TPM_HAS_QDCTRL (0) + +/* TSI module features */ + +/* @brief TSI module version. */ +#define FSL_FEATURE_TSI_VERSION (4) +/* @brief Has end-of-scan DMA transfer request enable (register bit GENCS[EOSDMEO]). */ +#define FSL_FEATURE_TSI_HAS_END_OF_SCAN_DMA_ENABLE (1) +/* @brief Number of TSI channels. */ +#define FSL_FEATURE_TSI_CHANNEL_COUNT (16) + +/* USB module features */ + +/* @brief HOST mode enabled */ +#define FSL_FEATURE_USB_KHCI_HOST_ENABLED (1) +/* @brief OTG mode enabled */ +#define FSL_FEATURE_USB_KHCI_OTG_ENABLED (1) +/* @brief Size of the USB dedicated RAM */ +#define FSL_FEATURE_USB_KHCI_USB_RAM (2048) +/* @brief Base address of the USB dedicated RAM */ +#define FSL_FEATURE_USB_KHCI_USB_RAM_BASE_ADDRESS (1074790400) +/* @brief Has KEEP_ALIVE_CTRL register */ +#define FSL_FEATURE_USB_KHCI_KEEP_ALIVE_ENABLED (1) +/* @brief Mode control of the USB Keep Alive */ +#define FSL_FEATURE_USB_KHCI_KEEP_ALIVE_MODE_CONTROL (USB_KEEP_ALIVE_CTRL_WAKE_REQ_EN_MASK) +/* @brief Has the Dynamic SOF threshold compare support */ +#define FSL_FEATURE_USB_KHCI_DYNAMIC_SOF_THRESHOLD_COMPARE_ENABLED (1) +/* @brief Has the VBUS detect support */ +#define FSL_FEATURE_USB_KHCI_VBUS_DETECT_ENABLED (1) +/* @brief Has the IRC48M module clock support */ +#define FSL_FEATURE_USB_KHCI_IRC48M_MODULE_CLOCK_ENABLED (1) +/* @brief Number of endpoints supported */ +#define FSL_FEATURE_USB_ENDPT_COUNT (16) + +/* VREF module features */ + +/* @brief Has chop oscillator (bit TRM[CHOPEN]) */ +#define FSL_FEATURE_VREF_HAS_CHOP_OSC (1) +/* @brief Has second order curvature compensation (bit SC[ICOMPEN]) */ +#define FSL_FEATURE_VREF_HAS_COMPENSATION (1) +/* @brief If high/low buffer mode supported */ +#define FSL_FEATURE_VREF_MODE_LV_TYPE (1) +/* @brief Module has also low reference (registers VREFL/VREFH) */ +#define FSL_FEATURE_VREF_HAS_LOW_REFERENCE (0) +/* @brief Has VREF_TRM4. */ +#define FSL_FEATURE_VREF_HAS_TRM4 (0) + +/* WDOG module features */ + +/* @brief Watchdog is available. */ +#define FSL_FEATURE_WDOG_HAS_WATCHDOG (1) +/* @brief Has Wait mode support. */ +#define FSL_FEATURE_WDOG_HAS_WAITEN (1) + +#endif /* _MKL82Z7_FEATURES_H_ */ + diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/TOOLCHAIN_ARM_STD/MKL82Z128xxx7.sct b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/TOOLCHAIN_ARM_STD/MKL82Z128xxx7.sct new file mode 100644 index 00000000000..a7fd0ecc526 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/TOOLCHAIN_ARM_STD/MKL82Z128xxx7.sct @@ -0,0 +1,143 @@ +#! armcc -E +/* +** ################################################################### +** Processors: MKL82Z128VLH7 +** MKL82Z128VLK7 +** MKL82Z128VLL7 +** MKL82Z128VMC7 +** MKL82Z128VMP7 +** +** Compiler: Keil ARM C/C++ Compiler +** Reference manual: KL82P121M72SF0RM, Rev.2 November 2015 +** Version: rev. 1.5, 2015-09-24 +** Build: b160406 +** +** Abstract: +** Linker file for the Keil ARM C/C++ Compiler +** +** Copyright (c) 2016 Freescale Semiconductor, Inc. +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without modification, +** are permitted provided that the following conditions are met: +** +** o Redistributions of source code must retain the above copyright notice, this list +** of conditions and the following disclaimer. +** +** o Redistributions in binary form must reproduce the above copyright notice, this +** list of conditions and the following disclaimer in the documentation and/or +** other materials provided with the distribution. +** +** o Neither the name of Freescale Semiconductor, Inc. nor the names of its +** contributors may be used to endorse or promote products derived from this +** software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +** ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +** ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +** +** http: www.freescale.com +** mail: support@freescale.com +** +** ################################################################### +*/ +#define __ram_vector_table__ 1 + +/* Heap 1/4 of ram and stack 1/8 */ +#define __stack_size__ 0x3000 +#define __heap_size__ 0x6000 + +#if (defined(__ram_vector_table__)) + #define __ram_vector_table_size__ 0x00000140 +#else + #define __ram_vector_table_size__ 0x00000000 +#endif + +#define m_interrupts_start 0x00000000 +#define m_interrupts_size 0x00000140 + +#define m_bootloader_config_start 0x000003C0 +#define m_bootloader_config_size 0x00000040 + +#define m_flash_config_start 0x00000400 +#define m_flash_config_size 0x00000010 + +#define m_text_start 0x00000410 +#define m_text_size 0x0001FBF0 + +#define m_interrupts_ram_start 0x1FFFA000 +#define m_interrupts_ram_size __ram_vector_table_size__ + +#define m_data_start (m_interrupts_ram_start + m_interrupts_ram_size) +#define m_data_size (0x00018000 - m_interrupts_ram_size) + +#if (defined(__usb_use_usbram__)) +#define m_usb_sram_start 0x40100000 +#define m_usb_sram_size 0x00000800 +#endif + +/* USB BDT size */ +#define usb_bdt_size 0x200 +/* Sizes */ +#if (defined(__stack_size__)) + #define Stack_Size __stack_size__ +#else + #define Stack_Size 0x0400 +#endif + +#if (defined(__heap_size__)) + #define Heap_Size __heap_size__ +#else + #define Heap_Size 0x0400 +#endif + +LR_m_text m_interrupts_start m_text_start+m_text_size-m_interrupts_start { ; load region size_region + VECTOR_ROM m_interrupts_start m_interrupts_size { ; load address = execution address + * (RESET,+FIRST) + } + ER_m_bootloader_config m_bootloader_config_start FIXED m_bootloader_config_size { ; load address = execution address + * (BootloaderConfig) + } + ER_m_flash_config m_flash_config_start FIXED m_flash_config_size { ; load address = execution address + * (FlashConfig) + } + ER_m_text m_text_start m_text_size { ; load address = execution address + * (InRoot$$Sections) + .ANY (+RO) + } + +#if (defined(__ram_vector_table__)) + VECTOR_RAM m_interrupts_ram_start EMPTY m_interrupts_ram_size { + } +#else + VECTOR_RAM m_interrupts_start EMPTY 0 { + } +#endif + RW_m_data m_data_start m_data_size-Stack_Size-Heap_Size { ; RW data + .ANY (+RW +ZI) + } + RW_IRAM1 +0 { ; Heap region growing up + } +} + +#if (defined(__usb_use_usbram__)) +LR_m_usb_bdt m_usb_sram_start usb_bdt_size { + ER_m_usb_bdt m_usb_sram_start UNINIT usb_bdt_size { + * (m_usb_bdt) + } +} + +LR_m_usb_ram (m_usb_sram_start + usb_bdt_size) (m_usb_sram_size - usb_bdt_size) { + ER_m_usb_ram (m_usb_sram_start + usb_bdt_size) UNINIT (m_usb_sram_size - usb_bdt_size) { + * (m_usb_global) + } +} +#endif + diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/TOOLCHAIN_ARM_STD/startup_MKL82Z7.s b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/TOOLCHAIN_ARM_STD/startup_MKL82Z7.s new file mode 100644 index 00000000000..aa7fdb13384 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/TOOLCHAIN_ARM_STD/startup_MKL82Z7.s @@ -0,0 +1,616 @@ +; * --------------------------------------------------------------------------------------- +; * @file: startup_MKL82Z7.s +; * @purpose: CMSIS Cortex-M0P Core Device Startup File +; * MKL82Z7 +; * @version: 1.5 +; * @date: 2015-9-24 +; * @build: b151217 +; * --------------------------------------------------------------------------------------- +; * +; * Copyright (c) 1997 - 2015 , Freescale Semiconductor, Inc. +; * All rights reserved. +; * +; * Redistribution and use in source and binary forms, with or without modification, +; * are permitted provided that the following conditions are met: +; * +; * o Redistributions of source code must retain the above copyright notice, this list +; * of conditions and the following disclaimer. +; * +; * o Redistributions in binary form must reproduce the above copyright notice, this +; * list of conditions and the following disclaimer in the documentation and/or +; * other materials provided with the distribution. +; * +; * o Neither the name of Freescale Semiconductor, Inc. nor the names of its +; * contributors may be used to endorse or promote products derived from this +; * software without specific prior written permission. +; * +; * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +; * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +; * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +; * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +; * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +; * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +; * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +; * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +; * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +; * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +; * +; *------- <<< Use Configuration Wizard in Context Menu >>> ------------------ +; * +; *****************************************************************************/ + +__initial_sp EQU 0x20012000 ; Top of RAM + PRESERVE8 + THUMB + + +; Vector Table Mapped to Address 0 at Reset + + AREA RESET, DATA, READONLY + EXPORT __Vectors + EXPORT __Vectors_End + EXPORT __Vectors_Size + +__Vectors DCD __initial_sp ; Top of Stack + DCD Reset_Handler ; Reset Handler + DCD NMI_Handler ;NMI Handler + DCD HardFault_Handler ;Hard Fault Handler + DCD 0 ;Reserved + DCD 0 ;Reserved + DCD 0 ;Reserved + DCD 0 ;Reserved + DCD 0 ;Reserved + DCD 0 ;Reserved + DCD 0 ;Reserved + DCD SVC_Handler ;SVCall Handler + DCD 0 ;Reserved + DCD 0 ;Reserved + DCD PendSV_Handler ;PendSV Handler + DCD SysTick_Handler ;SysTick Handler + + ;External Interrupts + DCD DMA0_DMA4_IRQHandler ;DMA channel 0, 4 transfer complete + DCD DMA1_DMA5_IRQHandler ;DMA channel 1, 5 transfer complete + DCD DMA2_DMA6_IRQHandler ;DMA channel 2, 6 transfer complete + DCD DMA3_DMA7_IRQHandler ;DMA channel 3, 7 transfer complete + DCD DMA_Error_IRQHandler ;DMA channel 0 - 7 error + DCD FLEXIO0_IRQHandler ;Flexible IO + DCD TPM0_IRQHandler ;Timer/PWM module 0 + DCD TPM1_IRQHandler ;Timer/PWM module 1 + DCD TPM2_IRQHandler ;Timer/PWM module 2 + DCD PIT0_IRQHandler ;Periodic Interrupt Timer 0 + DCD SPI0_IRQHandler ;Serial Peripheral Interface 0 + DCD EMVSIM0_IRQHandler ;EMVSIM0 common interrupt + DCD LPUART0_IRQHandler ;LPUART0 status and error + DCD LPUART1_IRQHandler ;LPUART1 status and error + DCD I2C0_IRQHandler ;Inter-Integrated Circuit 0 + DCD QSPI0_IRQHandler ;QuadSPI0 interrupt + DCD Reserved32_IRQHandler ;DryIce tamper detect + DCD PORTA_IRQHandler ;Pin detect Port A + DCD PORTB_IRQHandler ;Pin detect Port B + DCD PORTC_IRQHandler ;Pin detect Port C + DCD PORTD_IRQHandler ;Pin detect Port D + DCD PORTE_IRQHandler ;Pin detect Port E + DCD LLWU_IRQHandler ;Low Leakage Wakeup + DCD LTC0_IRQHandler ;Low power trusted cryptographic + DCD USB0_IRQHandler ;USB OTG interrupt + DCD ADC0_IRQHandler ;Analog-to-Digital Converter 0 + DCD LPTMR0_IRQHandler ;Low-Power Timer 0 + DCD RTC_Seconds_IRQHandler ;RTC seconds + DCD INTMUX0_0_IRQHandler ;Selectable peripheral interrupt INTMUX0-0 + DCD INTMUX0_1_IRQHandler ;Selectable peripheral interrupt INTMUX0-1 + DCD INTMUX0_2_IRQHandler ;Selectable peripheral interrupt INTMUX0-2 + DCD INTMUX0_3_IRQHandler ;Selectable peripheral interrupt INTMUX0-3 + DCD LPTMR1_IRQHandler ;Low-Power Timer 1 (INTMUX source IRQ0) + DCD Reserved49_IRQHandler ;Reserved interrupt (INTMUX source IRQ1) + DCD Reserved50_IRQHandler ;Reserved interrupt (INTMUX source IRQ2) + DCD Reserved51_IRQHandler ;Reserved interrupt (INTMUX source IRQ3) + DCD SPI1_IRQHandler ;Serial Peripheral Interface 1 (INTMUX source IRQ4) + DCD LPUART2_IRQHandler ;LPUART2 status and error (INTMUX source IRQ5) + DCD EMVSIM1_IRQHandler ;EMVSIM1 common interrupt (INTMUX source IRQ6) + DCD I2C1_IRQHandler ;Inter-Integrated Circuit 1 (INTMUX source IRQ7) + DCD TSI0_IRQHandler ;Touch Sensing Input 0 (INTMUX source IRQ8) + DCD PMC_IRQHandler ;PMC controller low-voltage detect, low-voltage warning (INTMUX source IRQ9) + DCD FTFA_IRQHandler ;FTFA command complete/read collision (INTMUX source IRQ10) + DCD MCG_IRQHandler ;Multipurpose clock generator (INTMUX source IRQ11) + DCD WDOG_EWM_IRQHandler ;Single interrupt vector for WDOG and EWM (INTMUX source IRQ12) + DCD DAC0_IRQHandler ;Digital-to-analog converter 0 (INTMUX source IRQ13) + DCD TRNG0_IRQHandler ;True randon number generator (INTMUX source IRQ14) + DCD Reserved63_IRQHandler ;Reserved interrupt (INTMUX source IRQ15) + DCD CMP0_IRQHandler ;Comparator 0 (INTMUX source IRQ16) + DCD Reserved65_IRQHandler ;Reserved interrupt (INTMUX source IRQ17) + DCD RTC_Alarm_IRQHandler ;Real time clock (INTMUX source IRQ18) + DCD Reserved67_IRQHandler ;Reserved interrupt (INTMUX source IRQ19) + DCD Reserved68_IRQHandler ;Reserved interrupt (INTMUX source IRQ20) + DCD Reserved69_IRQHandler ;Reserved interrupt (INTMUX source IRQ21) + DCD Reserved70_IRQHandler ;Reserved interrupt (INTMUX source IRQ22) + DCD Reserved71_IRQHandler ;Reserved interrupt (INTMUX source IRQ23) + DCD DMA4_IRQHandler ;DMA channel 4 transfer complete (INTMUX source IRQ24) + DCD DMA5_IRQHandler ;DMA channel 5 transfer complete (INTMUX source IRQ25) + DCD DMA6_IRQHandler ;DMA channel 6 transfer complete (INTMUX source IRQ26) + DCD DMA7_IRQHandler ;DMA channel 7 transfer complete (INTMUX source IRQ27) + DCD Reserved76_IRQHandler ;Reserved interrupt (INTMUX source IRQ28) + DCD Reserved77_IRQHandler ;Reserved interrupt (INTMUX source IRQ29) + DCD Reserved78_IRQHandler ;Reserved interrupt (INTMUX source IRQ30) + DCD Reserved79_IRQHandler ;Reserved interrupt (INTMUX source IRQ31) +__Vectors_End + +__Vectors_Size EQU __Vectors_End - __Vectors + +; Flash Configuration +; 16-byte flash configuration field that stores default protection settings (loaded on reset) +; and security information that allows the MCU to restrict access to the FTFL module. +; Backdoor Comparison Key +; Backdoor Comparison Key 0. <0x0-0xFF:2> +; Backdoor Comparison Key 1. <0x0-0xFF:2> +; Backdoor Comparison Key 2. <0x0-0xFF:2> +; Backdoor Comparison Key 3. <0x0-0xFF:2> +; Backdoor Comparison Key 4. <0x0-0xFF:2> +; Backdoor Comparison Key 5. <0x0-0xFF:2> +; Backdoor Comparison Key 6. <0x0-0xFF:2> +; Backdoor Comparison Key 7. <0x0-0xFF:2> +BackDoorK0 EQU 0xFF +BackDoorK1 EQU 0xFF +BackDoorK2 EQU 0xFF +BackDoorK3 EQU 0xFF +BackDoorK4 EQU 0xFF +BackDoorK5 EQU 0xFF +BackDoorK6 EQU 0xFF +BackDoorK7 EQU 0xFF +; +; Program flash protection bytes (FPROT) +; Each program flash region can be protected from program and erase operation by setting the associated PROT bit. +; Each bit protects a 1/32 region of the program flash memory. +; FPROT0 +; Program Flash Region Protect Register 0 +; 1/32 - 8/32 region +; FPROT0.0 +; FPROT0.1 +; FPROT0.2 +; FPROT0.3 +; FPROT0.4 +; FPROT0.5 +; FPROT0.6 +; FPROT0.7 +nFPROT0 EQU 0x00 +FPROT0 EQU nFPROT0:EOR:0xFF +; +; FPROT1 +; Program Flash Region Protect Register 1 +; 9/32 - 16/32 region +; FPROT1.0 +; FPROT1.1 +; FPROT1.2 +; FPROT1.3 +; FPROT1.4 +; FPROT1.5 +; FPROT1.6 +; FPROT1.7 +nFPROT1 EQU 0x00 +FPROT1 EQU nFPROT1:EOR:0xFF +; +; FPROT2 +; Program Flash Region Protect Register 2 +; 17/32 - 24/32 region +; FPROT2.0 +; FPROT2.1 +; FPROT2.2 +; FPROT2.3 +; FPROT2.4 +; FPROT2.5 +; FPROT2.6 +; FPROT2.7 +nFPROT2 EQU 0x00 +FPROT2 EQU nFPROT2:EOR:0xFF +; +; FPROT3 +; Program Flash Region Protect Register 3 +; 25/32 - 32/32 region +; FPROT3.0 +; FPROT3.1 +; FPROT3.2 +; FPROT3.3 +; FPROT3.4 +; FPROT3.5 +; FPROT3.6 +; FPROT3.7 +nFPROT3 EQU 0x00 +FPROT3 EQU nFPROT3:EOR:0xFF +; +; +; Flash nonvolatile option byte (FOPT) +; Allows the user to customize the operation of the MCU at boot time. +; LPBOOT +; <0=> Low-power boot +; <1=> Normal boot +; BOOTPIN_OPT +; <0=> Force Boot from ROM if BOOTCFG0 asserted, where BOOTCFG0 is the boot config function which is muxed with NMI pin +; <1=> Boot source configured by FOPT (BOOTSRC_SEL) bits +; NMI_DIS +; <0=> NMI interrupts are always blocked +; <1=> NMI_b pin/interrupts reset default to enabled +; FAST_INIT +; <0=> Slower initialization +; <1=> Fast Initialization +; BOOTSRC_SEL +; <0=> Boot from Flash +; <2=> Boot from ROM, configure QSPI0, and enter boot loader mode. +; <3=> Boot from ROM and enter boot loader mode. +; Boot source selection +FOPT EQU 0x3D +; +; Flash security byte (FSEC) +; WARNING: If SEC field is configured as "MCU security status is secure" and MEEN field is configured as "Mass erase is disabled", +; MCU's security status cannot be set back to unsecure state since Mass erase via the debugger is blocked !!! +; SEC +; <2=> MCU security status is unsecure +; <3=> MCU security status is secure +; Flash Security +; FSLACC +; <2=> Freescale factory access denied +; <3=> Freescale factory access granted +; Freescale Failure Analysis Access Code +; MEEN +; <2=> Mass erase is disabled +; <3=> Mass erase is enabled +; KEYEN +; <2=> Backdoor key access enabled +; <3=> Backdoor key access disabled +; Backdoor Key Security Enable +FSEC EQU 0xFE +; +; + IF :LNOT::DEF:RAM_TARGET + AREA FlashConfig, DATA, READONLY +__FlashConfig + DCB BackDoorK0, BackDoorK1, BackDoorK2, BackDoorK3 + DCB BackDoorK4, BackDoorK5, BackDoorK6, BackDoorK7 + DCB FPROT0 , FPROT1 , FPROT2 , FPROT3 + DCB FSEC , FOPT , 0xFF , 0xFF + ENDIF + + + AREA |.text|, CODE, READONLY + +; Reset Handler + +Reset_Handler PROC + EXPORT Reset_Handler [WEAK] + IMPORT SystemInit + IMPORT __main + + IF :LNOT::DEF:RAM_TARGET + REQUIRE FlashConfig + ENDIF + + CPSID I ; Mask interrupts + LDR R0, =0xE000ED08 + LDR R1, =__Vectors + STR R1, [R0] + LDR R0, =SystemInit + BLX R0 + CPSIE i ; Unmask interrupts + LDR R0, =__main + BX R0 + ENDP + + +; Dummy Exception Handlers (infinite loops which can be modified) +NMI_Handler\ + PROC + EXPORT NMI_Handler [WEAK] + B . + ENDP +HardFault_Handler\ + PROC + EXPORT HardFault_Handler [WEAK] + B . + ENDP +SVC_Handler\ + PROC + EXPORT SVC_Handler [WEAK] + B . + ENDP +PendSV_Handler\ + PROC + EXPORT PendSV_Handler [WEAK] + B . + ENDP +SysTick_Handler\ + PROC + EXPORT SysTick_Handler [WEAK] + B . + ENDP +DMA0_DMA4_IRQHandler\ + PROC + EXPORT DMA0_DMA4_IRQHandler [WEAK] + LDR R0, =DMA0_DMA4_DriverIRQHandler + BX R0 + ENDP + +DMA1_DMA5_IRQHandler\ + PROC + EXPORT DMA1_DMA5_IRQHandler [WEAK] + LDR R0, =DMA1_DMA5_DriverIRQHandler + BX R0 + ENDP + +DMA2_DMA6_IRQHandler\ + PROC + EXPORT DMA2_DMA6_IRQHandler [WEAK] + LDR R0, =DMA2_DMA6_DriverIRQHandler + BX R0 + ENDP + +DMA3_DMA7_IRQHandler\ + PROC + EXPORT DMA3_DMA7_IRQHandler [WEAK] + LDR R0, =DMA3_DMA7_DriverIRQHandler + BX R0 + ENDP + +DMA_Error_IRQHandler\ + PROC + EXPORT DMA_Error_IRQHandler [WEAK] + LDR R0, =DMA_Error_DriverIRQHandler + BX R0 + ENDP + +FLEXIO0_IRQHandler\ + PROC + EXPORT FLEXIO0_IRQHandler [WEAK] + LDR R0, =FLEXIO0_DriverIRQHandler + BX R0 + ENDP + +SPI0_IRQHandler\ + PROC + EXPORT SPI0_IRQHandler [WEAK] + LDR R0, =SPI0_DriverIRQHandler + BX R0 + ENDP + +LPUART0_IRQHandler\ + PROC + EXPORT LPUART0_IRQHandler [WEAK] + LDR R0, =LPUART0_DriverIRQHandler + BX R0 + ENDP + +LPUART1_IRQHandler\ + PROC + EXPORT LPUART1_IRQHandler [WEAK] + LDR R0, =LPUART1_DriverIRQHandler + BX R0 + ENDP + +I2C0_IRQHandler\ + PROC + EXPORT I2C0_IRQHandler [WEAK] + LDR R0, =I2C0_DriverIRQHandler + BX R0 + ENDP + +QSPI0_IRQHandler\ + PROC + EXPORT QSPI0_IRQHandler [WEAK] + LDR R0, =QSPI0_DriverIRQHandler + BX R0 + ENDP + +INTMUX0_0_IRQHandler\ + PROC + EXPORT INTMUX0_0_IRQHandler [WEAK] + LDR R0, =INTMUX0_0_DriverIRQHandler + BX R0 + ENDP + +INTMUX0_1_IRQHandler\ + PROC + EXPORT INTMUX0_1_IRQHandler [WEAK] + LDR R0, =INTMUX0_1_DriverIRQHandler + BX R0 + ENDP + +INTMUX0_2_IRQHandler\ + PROC + EXPORT INTMUX0_2_IRQHandler [WEAK] + LDR R0, =INTMUX0_2_DriverIRQHandler + BX R0 + ENDP + +INTMUX0_3_IRQHandler\ + PROC + EXPORT INTMUX0_3_IRQHandler [WEAK] + LDR R0, =INTMUX0_3_DriverIRQHandler + BX R0 + ENDP + +SPI1_IRQHandler\ + PROC + EXPORT SPI1_IRQHandler [WEAK] + LDR R0, =SPI1_DriverIRQHandler + BX R0 + ENDP + +LPUART2_IRQHandler\ + PROC + EXPORT LPUART2_IRQHandler [WEAK] + LDR R0, =LPUART2_DriverIRQHandler + BX R0 + ENDP + +I2C1_IRQHandler\ + PROC + EXPORT I2C1_IRQHandler [WEAK] + LDR R0, =I2C1_DriverIRQHandler + BX R0 + ENDP + +DMA4_IRQHandler\ + PROC + EXPORT DMA4_IRQHandler [WEAK] + LDR R0, =DMA4_DriverIRQHandler + BX R0 + ENDP + +DMA5_IRQHandler\ + PROC + EXPORT DMA5_IRQHandler [WEAK] + LDR R0, =DMA5_DriverIRQHandler + BX R0 + ENDP + +DMA6_IRQHandler\ + PROC + EXPORT DMA6_IRQHandler [WEAK] + LDR R0, =DMA6_DriverIRQHandler + BX R0 + ENDP + +DMA7_IRQHandler\ + PROC + EXPORT DMA7_IRQHandler [WEAK] + LDR R0, =DMA7_DriverIRQHandler + BX R0 + ENDP + +Default_Handler\ + PROC + EXPORT DMA0_DMA4_DriverIRQHandler [WEAK] + EXPORT DMA1_DMA5_DriverIRQHandler [WEAK] + EXPORT DMA2_DMA6_DriverIRQHandler [WEAK] + EXPORT DMA3_DMA7_DriverIRQHandler [WEAK] + EXPORT DMA_Error_DriverIRQHandler [WEAK] + EXPORT FLEXIO0_DriverIRQHandler [WEAK] + EXPORT TPM0_IRQHandler [WEAK] + EXPORT TPM1_IRQHandler [WEAK] + EXPORT TPM2_IRQHandler [WEAK] + EXPORT PIT0_IRQHandler [WEAK] + EXPORT SPI0_DriverIRQHandler [WEAK] + EXPORT EMVSIM0_IRQHandler [WEAK] + EXPORT LPUART0_DriverIRQHandler [WEAK] + EXPORT LPUART1_DriverIRQHandler [WEAK] + EXPORT I2C0_DriverIRQHandler [WEAK] + EXPORT QSPI0_DriverIRQHandler [WEAK] + EXPORT Reserved32_IRQHandler [WEAK] + EXPORT PORTA_IRQHandler [WEAK] + EXPORT PORTB_IRQHandler [WEAK] + EXPORT PORTC_IRQHandler [WEAK] + EXPORT PORTD_IRQHandler [WEAK] + EXPORT PORTE_IRQHandler [WEAK] + EXPORT LLWU_IRQHandler [WEAK] + EXPORT LTC0_IRQHandler [WEAK] + EXPORT USB0_IRQHandler [WEAK] + EXPORT ADC0_IRQHandler [WEAK] + EXPORT LPTMR0_IRQHandler [WEAK] + EXPORT RTC_Seconds_IRQHandler [WEAK] + EXPORT INTMUX0_0_DriverIRQHandler [WEAK] + EXPORT INTMUX0_1_DriverIRQHandler [WEAK] + EXPORT INTMUX0_2_DriverIRQHandler [WEAK] + EXPORT INTMUX0_3_DriverIRQHandler [WEAK] + EXPORT LPTMR1_IRQHandler [WEAK] + EXPORT Reserved49_IRQHandler [WEAK] + EXPORT Reserved50_IRQHandler [WEAK] + EXPORT Reserved51_IRQHandler [WEAK] + EXPORT SPI1_DriverIRQHandler [WEAK] + EXPORT LPUART2_DriverIRQHandler [WEAK] + EXPORT EMVSIM1_IRQHandler [WEAK] + EXPORT I2C1_DriverIRQHandler [WEAK] + EXPORT TSI0_IRQHandler [WEAK] + EXPORT PMC_IRQHandler [WEAK] + EXPORT FTFA_IRQHandler [WEAK] + EXPORT MCG_IRQHandler [WEAK] + EXPORT WDOG_EWM_IRQHandler [WEAK] + EXPORT DAC0_IRQHandler [WEAK] + EXPORT TRNG0_IRQHandler [WEAK] + EXPORT Reserved63_IRQHandler [WEAK] + EXPORT CMP0_IRQHandler [WEAK] + EXPORT Reserved65_IRQHandler [WEAK] + EXPORT RTC_Alarm_IRQHandler [WEAK] + EXPORT Reserved67_IRQHandler [WEAK] + EXPORT Reserved68_IRQHandler [WEAK] + EXPORT Reserved69_IRQHandler [WEAK] + EXPORT Reserved70_IRQHandler [WEAK] + EXPORT Reserved71_IRQHandler [WEAK] + EXPORT DMA4_DriverIRQHandler [WEAK] + EXPORT DMA5_DriverIRQHandler [WEAK] + EXPORT DMA6_DriverIRQHandler [WEAK] + EXPORT DMA7_DriverIRQHandler [WEAK] + EXPORT Reserved76_IRQHandler [WEAK] + EXPORT Reserved77_IRQHandler [WEAK] + EXPORT Reserved78_IRQHandler [WEAK] + EXPORT Reserved79_IRQHandler [WEAK] + EXPORT DefaultISR [WEAK] +DMA0_DMA4_DriverIRQHandler +DMA1_DMA5_DriverIRQHandler +DMA2_DMA6_DriverIRQHandler +DMA3_DMA7_DriverIRQHandler +DMA_Error_DriverIRQHandler +FLEXIO0_DriverIRQHandler +TPM0_IRQHandler +TPM1_IRQHandler +TPM2_IRQHandler +PIT0_IRQHandler +SPI0_DriverIRQHandler +EMVSIM0_IRQHandler +LPUART0_DriverIRQHandler +LPUART1_DriverIRQHandler +I2C0_DriverIRQHandler +QSPI0_DriverIRQHandler +Reserved32_IRQHandler +PORTA_IRQHandler +PORTB_IRQHandler +PORTC_IRQHandler +PORTD_IRQHandler +PORTE_IRQHandler +LLWU_IRQHandler +LTC0_IRQHandler +USB0_IRQHandler +ADC0_IRQHandler +LPTMR0_IRQHandler +RTC_Seconds_IRQHandler +INTMUX0_0_DriverIRQHandler +INTMUX0_1_DriverIRQHandler +INTMUX0_2_DriverIRQHandler +INTMUX0_3_DriverIRQHandler +LPTMR1_IRQHandler +Reserved49_IRQHandler +Reserved50_IRQHandler +Reserved51_IRQHandler +SPI1_DriverIRQHandler +LPUART2_DriverIRQHandler +EMVSIM1_IRQHandler +I2C1_DriverIRQHandler +TSI0_IRQHandler +PMC_IRQHandler +FTFA_IRQHandler +MCG_IRQHandler +WDOG_EWM_IRQHandler +DAC0_IRQHandler +TRNG0_IRQHandler +Reserved63_IRQHandler +CMP0_IRQHandler +Reserved65_IRQHandler +RTC_Alarm_IRQHandler +Reserved67_IRQHandler +Reserved68_IRQHandler +Reserved69_IRQHandler +Reserved70_IRQHandler +Reserved71_IRQHandler +DMA4_DriverIRQHandler +DMA5_DriverIRQHandler +DMA6_DriverIRQHandler +DMA7_DriverIRQHandler +Reserved76_IRQHandler +Reserved77_IRQHandler +Reserved78_IRQHandler +Reserved79_IRQHandler +DefaultISR + LDR R0, =DefaultISR + BX R0 + ENDP + ALIGN + + + END diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/TOOLCHAIN_ARM_STD/sys.cpp b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/TOOLCHAIN_ARM_STD/sys.cpp new file mode 100644 index 00000000000..b129b2c2a5b --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/TOOLCHAIN_ARM_STD/sys.cpp @@ -0,0 +1,31 @@ +/* mbed Microcontroller Library - stackheap + * Copyright (C) 2009-2011 ARM Limited. All rights reserved. + * + * Setup a fixed single stack/heap memory model, + * between the top of the RW/ZI region and the stackpointer + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include +#include + +extern char Image$$RW_IRAM1$$ZI$$Limit[]; + +extern __value_in_regs struct __initial_stackheap __user_setup_stackheap(uint32_t R0, uint32_t R1, uint32_t R2, uint32_t R3) { + uint32_t zi_limit = (uint32_t)Image$$RW_IRAM1$$ZI$$Limit; + uint32_t sp_limit = __current_sp(); + + zi_limit = (zi_limit + 7) & ~0x7; // ensure zi_limit is 8-byte aligned + + struct __initial_stackheap r; + r.heap_base = zi_limit; + r.heap_limit = sp_limit; + return r; +} + +#ifdef __cplusplus +} +#endif diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/TOOLCHAIN_GCC_ARM/MKL82Z128xxx7.ld b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/TOOLCHAIN_GCC_ARM/MKL82Z128xxx7.ld new file mode 100644 index 00000000000..53fa9d29a46 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/TOOLCHAIN_GCC_ARM/MKL82Z128xxx7.ld @@ -0,0 +1,287 @@ +/* +** ################################################################### +** Processors: MKL82Z128VLH7 +** MKL82Z128VLK7 +** MKL82Z128VLL7 +** MKL82Z128VMC7 +** MKL82Z128VMP7 +** +** Compiler: GNU C Compiler +** Reference manual: KL82P121M72SF0RM, Rev.2 November 2015 +** Version: rev. 1.5, 2015-09-24 +** Build: b160406 +** +** Abstract: +** Linker file for the GNU C Compiler +** +** Copyright (c) 2016 Freescale Semiconductor, Inc. +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without modification, +** are permitted provided that the following conditions are met: +** +** o Redistributions of source code must retain the above copyright notice, this list +** of conditions and the following disclaimer. +** +** o Redistributions in binary form must reproduce the above copyright notice, this +** list of conditions and the following disclaimer in the documentation and/or +** other materials provided with the distribution. +** +** o Neither the name of Freescale Semiconductor, Inc. nor the names of its +** contributors may be used to endorse or promote products derived from this +** software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +** ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +** ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +** +** http: www.freescale.com +** mail: support@freescale.com +** +** ################################################################### +*/ + +/* Entry Point */ +ENTRY(Reset_Handler) + +__ram_vector_table__ = 1; + +/* Heap 1/4 of ram and stack 1/8 */ +__stack_size__ = 0x3000; +__heap_size__ = 0x6000; + +HEAP_SIZE = DEFINED(__heap_size__) ? __heap_size__ : 0x0400; +STACK_SIZE = DEFINED(__stack_size__) ? __stack_size__ : 0x0400; +M_VECTOR_RAM_SIZE = DEFINED(__ram_vector_table__) ? 0x0140 : 0x0; + +/* Specify the memory areas */ +MEMORY +{ + m_interrupts (RX) : ORIGIN = 0x00000000, LENGTH = 0x00000140 + m_bootloader_config (RX) : ORIGIN = 0x000003C0, LENGTH = 0x00000040 + m_flash_config (RX) : ORIGIN = 0x00000400, LENGTH = 0x00000010 + m_text (RX) : ORIGIN = 0x00000410, LENGTH = 0x0001FBF0 + m_data (RW) : ORIGIN = 0x1FFFA000, LENGTH = 0x00018000 + m_usb_sram (RW) : ORIGIN = 0x40100000, LENGTH = 0x00000800 +} + +/* Define output sections */ +SECTIONS +{ + /* The startup code goes first into internal flash */ + .interrupts : + { + __VECTOR_TABLE = .; + . = ALIGN(4); + KEEP(*(.isr_vector)) /* Startup code */ + . = ALIGN(4); + } > m_interrupts + + .bootloader_config : + { + . = ALIGN(4); + KEEP(*(.BootloaderConfig)) /* Bootloader Configuration Area (BCA) */ + . = ALIGN(4); + } > m_bootloader_config + + .flash_config : + { + . = ALIGN(4); + KEEP(*(.FlashConfig)) /* Flash Configuration Field (FCF) */ + . = ALIGN(4); + } > m_flash_config + + /* The program code and other data goes into internal flash */ + .text : + { + . = ALIGN(4); + *(.text) /* .text sections (code) */ + *(.text*) /* .text* sections (code) */ + *(.rodata) /* .rodata sections (constants, strings, etc.) */ + *(.rodata*) /* .rodata* sections (constants, strings, etc.) */ + *(.glue_7) /* glue arm to thumb code */ + *(.glue_7t) /* glue thumb to arm code */ + *(.eh_frame) + KEEP (*(.init)) + KEEP (*(.fini)) + . = ALIGN(4); + } > m_text + + .ARM.extab : + { + *(.ARM.extab* .gnu.linkonce.armextab.*) + } > m_text + + .ARM : + { + __exidx_start = .; + *(.ARM.exidx*) + __exidx_end = .; + } > m_text + + .ctors : + { + __CTOR_LIST__ = .; + /* gcc uses crtbegin.o to find the start of + the constructors, so we make sure it is + first. Because this is a wildcard, it + doesn't matter if the user does not + actually link against crtbegin.o; the + linker won't look for a file to match a + wildcard. The wildcard also means that it + doesn't matter which directory crtbegin.o + is in. */ + KEEP (*crtbegin.o(.ctors)) + KEEP (*crtbegin?.o(.ctors)) + /* We don't want to include the .ctor section from + from the crtend.o file until after the sorted ctors. + The .ctor section from the crtend file contains the + end of ctors marker and it must be last */ + KEEP (*(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors)) + KEEP (*(SORT(.ctors.*))) + KEEP (*(.ctors)) + __CTOR_END__ = .; + } > m_text + + .dtors : + { + __DTOR_LIST__ = .; + KEEP (*crtbegin.o(.dtors)) + KEEP (*crtbegin?.o(.dtors)) + KEEP (*(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors)) + KEEP (*(SORT(.dtors.*))) + KEEP (*(.dtors)) + __DTOR_END__ = .; + } > m_text + + .preinit_array : + { + PROVIDE_HIDDEN (__preinit_array_start = .); + KEEP (*(.preinit_array*)) + PROVIDE_HIDDEN (__preinit_array_end = .); + } > m_text + + .init_array : + { + PROVIDE_HIDDEN (__init_array_start = .); + KEEP (*(SORT(.init_array.*))) + KEEP (*(.init_array*)) + PROVIDE_HIDDEN (__init_array_end = .); + } > m_text + + .fini_array : + { + PROVIDE_HIDDEN (__fini_array_start = .); + KEEP (*(SORT(.fini_array.*))) + KEEP (*(.fini_array*)) + PROVIDE_HIDDEN (__fini_array_end = .); + } > m_text + + __etext = .; /* define a global symbol at end of code */ + __DATA_ROM = .; /* Symbol is used by startup for data initialization */ + + /* reserve MTB memory at the beginning of m_data */ + .mtb : /* MTB buffer address as defined by the hardware */ + { + . = ALIGN(8); + _mtb_start = .; + KEEP(*(.mtb_buf)) /* need to KEEP Micro Trace Buffer as not referenced by application */ + . = ALIGN(8); + _mtb_end = .; + } > m_data + + .interrupts_ram : + { + . = ALIGN(4); + __VECTOR_RAM__ = .; + __interrupts_ram_start__ = .; /* Create a global symbol at data start */ + *(.m_interrupts_ram) /* This is a user defined section */ + . += M_VECTOR_RAM_SIZE; + . = ALIGN(4); + __interrupts_ram_end__ = .; /* Define a global symbol at data end */ + } > m_data + + __VECTOR_RAM = DEFINED(__ram_vector_table__) ? __VECTOR_RAM__ : ORIGIN(m_interrupts); + __RAM_VECTOR_TABLE_SIZE_BYTES = DEFINED(__ram_vector_table__) ? (__interrupts_ram_end__ - __interrupts_ram_start__) : 0x0; + + .data : AT(__DATA_ROM) + { + . = ALIGN(4); + __DATA_RAM = .; + __data_start__ = .; /* create a global symbol at data start */ + *(.data) /* .data sections */ + *(.data*) /* .data* sections */ + KEEP(*(.jcr*)) + . = ALIGN(4); + __data_end__ = .; /* define a global symbol at data end */ + } > m_data + + __DATA_END = __DATA_ROM + (__data_end__ - __data_start__); + text_end = ORIGIN(m_text) + LENGTH(m_text); + ASSERT(__DATA_END <= text_end, "region m_text overflowed with text and data") + + USB_RAM_GAP = DEFINED(__usb_use_usbram__) ? 0 : (DEFINED(__usb_ram_size__) ? __usb_ram_size__ : 0x800); + /* Uninitialized data section */ + .bss : + { + /* This is used by the startup in order to initialize the .bss section */ + . = ALIGN(4); + __START_BSS = .; + __bss_start__ = .; + *(.bss) + *(.bss*) + . = ALIGN(512); + USB_RAM_START = .; + . += USB_RAM_GAP; + *(COMMON) + . = ALIGN(4); + __bss_end__ = .; + __END_BSS = .; + } > m_data + + .heap : + { + . = ALIGN(8); + __end__ = .; + PROVIDE(end = .); + __HeapBase = .; + . += HEAP_SIZE; + __HeapLimit = .; + __heap_limit = .; /* Add for _sbrk */ + } > m_data + + .stack : + { + . = ALIGN(8); + . += STACK_SIZE; + } > m_data + + USB_RAM_START = DEFINED(__usb_use_usbram__) ? ORIGIN(m_usb_sram) : USB_RAM_START; + m_usb_bdt USB_RAM_START (NOLOAD) : + { + *(m_usb_bdt) + USB_RAM_BDT_END = .; + } + + m_usb_global USB_RAM_BDT_END (NOLOAD) : + { + *(m_usb_global) + } + + /* Initializes stack on the end of block */ + __StackTop = ORIGIN(m_data) + LENGTH(m_data); + __StackLimit = __StackTop - STACK_SIZE; + PROVIDE(__stack = __StackTop); + + .ARM.attributes 0 : { *(.ARM.attributes) } + + ASSERT(__StackLimit >= __HeapLimit, "region m_data overflowed with stack and heap") +} + diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/TOOLCHAIN_GCC_ARM/startup_MKL82Z7.S b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/TOOLCHAIN_GCC_ARM/startup_MKL82Z7.S new file mode 100644 index 00000000000..daeabc59ce9 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/TOOLCHAIN_GCC_ARM/startup_MKL82Z7.S @@ -0,0 +1,545 @@ +/* ---------------------------------------------------------------------------------------*/ +/* @file: startup_MKL82Z7.s */ +/* @purpose: CMSIS Cortex-M0P Core Device Startup File */ +/* MKL82Z7 */ +/* @version: 1.5 */ +/* @date: 2015-9-24 */ +/* @build: b151217 */ +/* ---------------------------------------------------------------------------------------*/ +/* */ +/* Copyright (c) 1997 - 2015 , Freescale Semiconductor, Inc. */ +/* All rights reserved. */ +/* */ +/* Redistribution and use in source and binary forms, with or without modification, */ +/* are permitted provided that the following conditions are met: */ +/* */ +/* o Redistributions of source code must retain the above copyright notice, this list */ +/* of conditions and the following disclaimer. */ +/* */ +/* o Redistributions in binary form must reproduce the above copyright notice, this */ +/* list of conditions and the following disclaimer in the documentation and/or */ +/* other materials provided with the distribution. */ +/* */ +/* o Neither the name of Freescale Semiconductor, Inc. nor the names of its */ +/* contributors may be used to endorse or promote products derived from this */ +/* software without specific prior written permission. */ +/* */ +/* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND */ +/* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED */ +/* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE */ +/* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR */ +/* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES */ +/* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; */ +/* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON */ +/* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT */ +/* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS */ +/* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ +/*****************************************************************************/ +/* Version: GCC for ARM Embedded Processors */ +/*****************************************************************************/ + .syntax unified + .arch armv6-m + + .section .isr_vector, "a" + .align 2 + .globl __isr_vector +__isr_vector: + .long __StackTop /* Top of Stack */ + .long Reset_Handler /* Reset Handler */ + .long NMI_Handler /* NMI Handler*/ + .long HardFault_Handler /* Hard Fault Handler*/ + .long 0 /* Reserved*/ + .long 0 /* Reserved*/ + .long 0 /* Reserved*/ + .long 0 /* Reserved*/ + .long 0 /* Reserved*/ + .long 0 /* Reserved*/ + .long 0 /* Reserved*/ + .long SVC_Handler /* SVCall Handler*/ + .long 0 /* Reserved*/ + .long 0 /* Reserved*/ + .long PendSV_Handler /* PendSV Handler*/ + .long SysTick_Handler /* SysTick Handler*/ + + /* External Interrupts*/ + .long DMA0_DMA4_IRQHandler /* DMA channel 0, 4 transfer complete*/ + .long DMA1_DMA5_IRQHandler /* DMA channel 1, 5 transfer complete*/ + .long DMA2_DMA6_IRQHandler /* DMA channel 2, 6 transfer complete*/ + .long DMA3_DMA7_IRQHandler /* DMA channel 3, 7 transfer complete*/ + .long DMA_Error_IRQHandler /* DMA channel 0 - 7 error*/ + .long FLEXIO0_IRQHandler /* Flexible IO*/ + .long TPM0_IRQHandler /* Timer/PWM module 0*/ + .long TPM1_IRQHandler /* Timer/PWM module 1*/ + .long TPM2_IRQHandler /* Timer/PWM module 2*/ + .long PIT0_IRQHandler /* Periodic Interrupt Timer 0*/ + .long SPI0_IRQHandler /* Serial Peripheral Interface 0*/ + .long EMVSIM0_IRQHandler /* EMVSIM0 common interrupt*/ + .long LPUART0_IRQHandler /* LPUART0 status and error*/ + .long LPUART1_IRQHandler /* LPUART1 status and error*/ + .long I2C0_IRQHandler /* Inter-Integrated Circuit 0*/ + .long QSPI0_IRQHandler /* QuadSPI0 interrupt*/ + .long Reserved32_IRQHandler /* DryIce tamper detect*/ + .long PORTA_IRQHandler /* Pin detect Port A*/ + .long PORTB_IRQHandler /* Pin detect Port B*/ + .long PORTC_IRQHandler /* Pin detect Port C*/ + .long PORTD_IRQHandler /* Pin detect Port D*/ + .long PORTE_IRQHandler /* Pin detect Port E*/ + .long LLWU_IRQHandler /* Low Leakage Wakeup*/ + .long LTC0_IRQHandler /* Low power trusted cryptographic*/ + .long USB0_IRQHandler /* USB OTG interrupt*/ + .long ADC0_IRQHandler /* Analog-to-Digital Converter 0*/ + .long LPTMR0_IRQHandler /* Low-Power Timer 0*/ + .long RTC_Seconds_IRQHandler /* RTC seconds*/ + .long INTMUX0_0_IRQHandler /* Selectable peripheral interrupt INTMUX0-0*/ + .long INTMUX0_1_IRQHandler /* Selectable peripheral interrupt INTMUX0-1*/ + .long INTMUX0_2_IRQHandler /* Selectable peripheral interrupt INTMUX0-2*/ + .long INTMUX0_3_IRQHandler /* Selectable peripheral interrupt INTMUX0-3*/ + .long LPTMR1_IRQHandler /* Low-Power Timer 1 (INTMUX source IRQ0)*/ + .long Reserved49_IRQHandler /* Reserved interrupt (INTMUX source IRQ1)*/ + .long Reserved50_IRQHandler /* Reserved interrupt (INTMUX source IRQ2)*/ + .long Reserved51_IRQHandler /* Reserved interrupt (INTMUX source IRQ3)*/ + .long SPI1_IRQHandler /* Serial Peripheral Interface 1 (INTMUX source IRQ4)*/ + .long LPUART2_IRQHandler /* LPUART2 status and error (INTMUX source IRQ5)*/ + .long EMVSIM1_IRQHandler /* EMVSIM1 common interrupt (INTMUX source IRQ6)*/ + .long I2C1_IRQHandler /* Inter-Integrated Circuit 1 (INTMUX source IRQ7)*/ + .long TSI0_IRQHandler /* Touch Sensing Input 0 (INTMUX source IRQ8)*/ + .long PMC_IRQHandler /* PMC controller low-voltage detect, low-voltage warning (INTMUX source IRQ9)*/ + .long FTFA_IRQHandler /* FTFA command complete/read collision (INTMUX source IRQ10)*/ + .long MCG_IRQHandler /* Multipurpose clock generator (INTMUX source IRQ11)*/ + .long WDOG_EWM_IRQHandler /* Single interrupt vector for WDOG and EWM (INTMUX source IRQ12)*/ + .long DAC0_IRQHandler /* Digital-to-analog converter 0 (INTMUX source IRQ13)*/ + .long TRNG0_IRQHandler /* True randon number generator (INTMUX source IRQ14)*/ + .long Reserved63_IRQHandler /* Reserved interrupt (INTMUX source IRQ15)*/ + .long CMP0_IRQHandler /* Comparator 0 (INTMUX source IRQ16)*/ + .long Reserved65_IRQHandler /* Reserved interrupt (INTMUX source IRQ17)*/ + .long RTC_Alarm_IRQHandler /* Real time clock (INTMUX source IRQ18)*/ + .long Reserved67_IRQHandler /* Reserved interrupt (INTMUX source IRQ19)*/ + .long Reserved68_IRQHandler /* Reserved interrupt (INTMUX source IRQ20)*/ + .long Reserved69_IRQHandler /* Reserved interrupt (INTMUX source IRQ21)*/ + .long Reserved70_IRQHandler /* Reserved interrupt (INTMUX source IRQ22)*/ + .long Reserved71_IRQHandler /* Reserved interrupt (INTMUX source IRQ23)*/ + .long DMA4_IRQHandler /* DMA channel 4 transfer complete (INTMUX source IRQ24)*/ + .long DMA5_IRQHandler /* DMA channel 5 transfer complete (INTMUX source IRQ25)*/ + .long DMA6_IRQHandler /* DMA channel 6 transfer complete (INTMUX source IRQ26)*/ + .long DMA7_IRQHandler /* DMA channel 7 transfer complete (INTMUX source IRQ27)*/ + .long Reserved76_IRQHandler /* Reserved interrupt (INTMUX source IRQ28)*/ + .long Reserved77_IRQHandler /* Reserved interrupt (INTMUX source IRQ29)*/ + .long Reserved78_IRQHandler /* Reserved interrupt (INTMUX source IRQ30)*/ + .long Reserved79_IRQHandler /* Reserved interrupt (INTMUX source IRQ31)*/ + + .size __isr_vector, . - __isr_vector + +/* Flash Configuration */ + .section .FlashConfig, "a" + .long 0xFFFFFFFF + .long 0xFFFFFFFF + .long 0xFFFFFFFF + .long 0xFFFF3DFE + + .text + .thumb + +/* Reset Handler */ + + .thumb_func + .align 2 + .globl Reset_Handler + .weak Reset_Handler + .type Reset_Handler, %function +Reset_Handler: + cpsid i /* Mask interrupts */ + .equ VTOR, 0xE000ED08 + ldr r0, =VTOR + ldr r1, =__isr_vector + str r1, [r0] +#ifndef __NO_SYSTEM_INIT + ldr r0,=SystemInit + blx r0 +#endif +/* Loop to copy data from read only memory to RAM. The ranges + * of copy from/to are specified by following symbols evaluated in + * linker script. + * __etext: End of code section, i.e., begin of data sections to copy from. + * __data_start__/__data_end__: RAM address range that data should be + * copied to. Both must be aligned to 4 bytes boundary. */ + + ldr r1, =__etext + ldr r2, =__data_start__ + ldr r3, =__data_end__ + + subs r3, r2 + ble .LC0 + +.LC1: + subs r3, 4 + ldr r0, [r1,r3] + str r0, [r2,r3] + bgt .LC1 +.LC0: + +#ifdef __STARTUP_CLEAR_BSS +/* This part of work usually is done in C library startup code. Otherwise, + * define this macro to enable it in this startup. + * + * Loop to zero out BSS section, which uses following symbols + * in linker script: + * __bss_start__: start of BSS section. Must align to 4 + * __bss_end__: end of BSS section. Must align to 4 + */ + ldr r1, =__bss_start__ + ldr r2, =__bss_end__ + + subs r2, r1 + ble .LC3 + + movs r0, 0 +.LC2: + str r0, [r1, r2] + subs r2, 4 + bge .LC2 +.LC3: +#endif + cpsie i /* Unmask interrupts */ +#ifndef __START +#define __START _start +#endif +#ifndef __ATOLLIC__ + ldr r0,=__START + blx r0 +#else + ldr r0,=__libc_init_array + blx r0 + ldr r0,=main + bx r0 +#endif + .pool + .size Reset_Handler, . - Reset_Handler + + .align 1 + .thumb_func + .weak DefaultISR + .type DefaultISR, %function +DefaultISR: + ldr r0, =DefaultISR + bx r0 + .size DefaultISR, . - DefaultISR + + .align 1 + .thumb_func + .weak NMI_Handler + .type NMI_Handler, %function +NMI_Handler: + ldr r0,=NMI_Handler + bx r0 + .size NMI_Handler, . - NMI_Handler + + .align 1 + .thumb_func + .weak HardFault_Handler + .type HardFault_Handler, %function +HardFault_Handler: + ldr r0,=HardFault_Handler + bx r0 + .size HardFault_Handler, . - HardFault_Handler + + .align 1 + .thumb_func + .weak SVC_Handler + .type SVC_Handler, %function +SVC_Handler: + ldr r0,=SVC_Handler + bx r0 + .size SVC_Handler, . - SVC_Handler + + .align 1 + .thumb_func + .weak PendSV_Handler + .type PendSV_Handler, %function +PendSV_Handler: + ldr r0,=PendSV_Handler + bx r0 + .size PendSV_Handler, . - PendSV_Handler + + .align 1 + .thumb_func + .weak SysTick_Handler + .type SysTick_Handler, %function +SysTick_Handler: + ldr r0,=SysTick_Handler + bx r0 + .size SysTick_Handler, . - SysTick_Handler + + .align 1 + .thumb_func + .weak DMA0_DMA4_IRQHandler + .type DMA0_DMA4_IRQHandler, %function +DMA0_DMA4_IRQHandler: + ldr r0,=DMA0_DMA4_DriverIRQHandler + bx r0 + .size DMA0_DMA4_IRQHandler, . - DMA0_DMA4_IRQHandler + + .align 1 + .thumb_func + .weak DMA1_DMA5_IRQHandler + .type DMA1_DMA5_IRQHandler, %function +DMA1_DMA5_IRQHandler: + ldr r0,=DMA1_DMA5_DriverIRQHandler + bx r0 + .size DMA1_DMA5_IRQHandler, . - DMA1_DMA5_IRQHandler + + .align 1 + .thumb_func + .weak DMA2_DMA6_IRQHandler + .type DMA2_DMA6_IRQHandler, %function +DMA2_DMA6_IRQHandler: + ldr r0,=DMA2_DMA6_DriverIRQHandler + bx r0 + .size DMA2_DMA6_IRQHandler, . - DMA2_DMA6_IRQHandler + + .align 1 + .thumb_func + .weak DMA3_DMA7_IRQHandler + .type DMA3_DMA7_IRQHandler, %function +DMA3_DMA7_IRQHandler: + ldr r0,=DMA3_DMA7_DriverIRQHandler + bx r0 + .size DMA3_DMA7_IRQHandler, . - DMA3_DMA7_IRQHandler + + .align 1 + .thumb_func + .weak DMA_Error_IRQHandler + .type DMA_Error_IRQHandler, %function +DMA_Error_IRQHandler: + ldr r0,=DMA_Error_DriverIRQHandler + bx r0 + .size DMA_Error_IRQHandler, . - DMA_Error_IRQHandler + + .align 1 + .thumb_func + .weak FLEXIO0_IRQHandler + .type FLEXIO0_IRQHandler, %function +FLEXIO0_IRQHandler: + ldr r0,=FLEXIO0_DriverIRQHandler + bx r0 + .size FLEXIO0_IRQHandler, . - FLEXIO0_IRQHandler + + .align 1 + .thumb_func + .weak SPI0_IRQHandler + .type SPI0_IRQHandler, %function +SPI0_IRQHandler: + ldr r0,=SPI0_DriverIRQHandler + bx r0 + .size SPI0_IRQHandler, . - SPI0_IRQHandler + + .align 1 + .thumb_func + .weak LPUART0_IRQHandler + .type LPUART0_IRQHandler, %function +LPUART0_IRQHandler: + ldr r0,=LPUART0_DriverIRQHandler + bx r0 + .size LPUART0_IRQHandler, . - LPUART0_IRQHandler + + .align 1 + .thumb_func + .weak LPUART1_IRQHandler + .type LPUART1_IRQHandler, %function +LPUART1_IRQHandler: + ldr r0,=LPUART1_DriverIRQHandler + bx r0 + .size LPUART1_IRQHandler, . - LPUART1_IRQHandler + + .align 1 + .thumb_func + .weak I2C0_IRQHandler + .type I2C0_IRQHandler, %function +I2C0_IRQHandler: + ldr r0,=I2C0_DriverIRQHandler + bx r0 + .size I2C0_IRQHandler, . - I2C0_IRQHandler + + .align 1 + .thumb_func + .weak QSPI0_IRQHandler + .type QSPI0_IRQHandler, %function +QSPI0_IRQHandler: + ldr r0,=QSPI0_DriverIRQHandler + bx r0 + .size QSPI0_IRQHandler, . - QSPI0_IRQHandler + + .align 1 + .thumb_func + .weak INTMUX0_0_IRQHandler + .type INTMUX0_0_IRQHandler, %function +INTMUX0_0_IRQHandler: + ldr r0,=INTMUX0_0_DriverIRQHandler + bx r0 + .size INTMUX0_0_IRQHandler, . - INTMUX0_0_IRQHandler + + .align 1 + .thumb_func + .weak INTMUX0_1_IRQHandler + .type INTMUX0_1_IRQHandler, %function +INTMUX0_1_IRQHandler: + ldr r0,=INTMUX0_1_DriverIRQHandler + bx r0 + .size INTMUX0_1_IRQHandler, . - INTMUX0_1_IRQHandler + + .align 1 + .thumb_func + .weak INTMUX0_2_IRQHandler + .type INTMUX0_2_IRQHandler, %function +INTMUX0_2_IRQHandler: + ldr r0,=INTMUX0_2_DriverIRQHandler + bx r0 + .size INTMUX0_2_IRQHandler, . - INTMUX0_2_IRQHandler + + .align 1 + .thumb_func + .weak INTMUX0_3_IRQHandler + .type INTMUX0_3_IRQHandler, %function +INTMUX0_3_IRQHandler: + ldr r0,=INTMUX0_3_DriverIRQHandler + bx r0 + .size INTMUX0_3_IRQHandler, . - INTMUX0_3_IRQHandler + + .align 1 + .thumb_func + .weak SPI1_IRQHandler + .type SPI1_IRQHandler, %function +SPI1_IRQHandler: + ldr r0,=SPI1_DriverIRQHandler + bx r0 + .size SPI1_IRQHandler, . - SPI1_IRQHandler + + .align 1 + .thumb_func + .weak LPUART2_IRQHandler + .type LPUART2_IRQHandler, %function +LPUART2_IRQHandler: + ldr r0,=LPUART2_DriverIRQHandler + bx r0 + .size LPUART2_IRQHandler, . - LPUART2_IRQHandler + + .align 1 + .thumb_func + .weak I2C1_IRQHandler + .type I2C1_IRQHandler, %function +I2C1_IRQHandler: + ldr r0,=I2C1_DriverIRQHandler + bx r0 + .size I2C1_IRQHandler, . - I2C1_IRQHandler + + .align 1 + .thumb_func + .weak DMA4_IRQHandler + .type DMA4_IRQHandler, %function +DMA4_IRQHandler: + ldr r0,=DMA4_DriverIRQHandler + bx r0 + .size DMA4_IRQHandler, . - DMA4_IRQHandler + + .align 1 + .thumb_func + .weak DMA5_IRQHandler + .type DMA5_IRQHandler, %function +DMA5_IRQHandler: + ldr r0,=DMA5_DriverIRQHandler + bx r0 + .size DMA5_IRQHandler, . - DMA5_IRQHandler + + .align 1 + .thumb_func + .weak DMA6_IRQHandler + .type DMA6_IRQHandler, %function +DMA6_IRQHandler: + ldr r0,=DMA6_DriverIRQHandler + bx r0 + .size DMA6_IRQHandler, . - DMA6_IRQHandler + + .align 1 + .thumb_func + .weak DMA7_IRQHandler + .type DMA7_IRQHandler, %function +DMA7_IRQHandler: + ldr r0,=DMA7_DriverIRQHandler + bx r0 + .size DMA7_IRQHandler, . - DMA7_IRQHandler + + +/* Macro to define default handlers. Default handler + * will be weak symbol and just dead loops. They can be + * overwritten by other handlers */ + .macro def_irq_handler handler_name + .weak \handler_name + .set \handler_name, DefaultISR + .endm + +/* Exception Handlers */ + def_irq_handler DMA0_DMA4_DriverIRQHandler + def_irq_handler DMA1_DMA5_DriverIRQHandler + def_irq_handler DMA2_DMA6_DriverIRQHandler + def_irq_handler DMA3_DMA7_DriverIRQHandler + def_irq_handler DMA_Error_DriverIRQHandler + def_irq_handler FLEXIO0_DriverIRQHandler + def_irq_handler TPM0_IRQHandler + def_irq_handler TPM1_IRQHandler + def_irq_handler TPM2_IRQHandler + def_irq_handler PIT0_IRQHandler + def_irq_handler SPI0_DriverIRQHandler + def_irq_handler EMVSIM0_IRQHandler + def_irq_handler LPUART0_DriverIRQHandler + def_irq_handler LPUART1_DriverIRQHandler + def_irq_handler I2C0_DriverIRQHandler + def_irq_handler QSPI0_DriverIRQHandler + def_irq_handler Reserved32_IRQHandler + def_irq_handler PORTA_IRQHandler + def_irq_handler PORTB_IRQHandler + def_irq_handler PORTC_IRQHandler + def_irq_handler PORTD_IRQHandler + def_irq_handler PORTE_IRQHandler + def_irq_handler LLWU_IRQHandler + def_irq_handler LTC0_IRQHandler + def_irq_handler USB0_IRQHandler + def_irq_handler ADC0_IRQHandler + def_irq_handler LPTMR0_IRQHandler + def_irq_handler RTC_Seconds_IRQHandler + def_irq_handler INTMUX0_0_DriverIRQHandler + def_irq_handler INTMUX0_1_DriverIRQHandler + def_irq_handler INTMUX0_2_DriverIRQHandler + def_irq_handler INTMUX0_3_DriverIRQHandler + def_irq_handler LPTMR1_IRQHandler + def_irq_handler Reserved49_IRQHandler + def_irq_handler Reserved50_IRQHandler + def_irq_handler Reserved51_IRQHandler + def_irq_handler SPI1_DriverIRQHandler + def_irq_handler LPUART2_DriverIRQHandler + def_irq_handler EMVSIM1_IRQHandler + def_irq_handler I2C1_DriverIRQHandler + def_irq_handler TSI0_IRQHandler + def_irq_handler PMC_IRQHandler + def_irq_handler FTFA_IRQHandler + def_irq_handler MCG_IRQHandler + def_irq_handler WDOG_EWM_IRQHandler + def_irq_handler DAC0_IRQHandler + def_irq_handler TRNG0_IRQHandler + def_irq_handler Reserved63_IRQHandler + def_irq_handler CMP0_IRQHandler + def_irq_handler Reserved65_IRQHandler + def_irq_handler RTC_Alarm_IRQHandler + def_irq_handler Reserved67_IRQHandler + def_irq_handler Reserved68_IRQHandler + def_irq_handler Reserved69_IRQHandler + def_irq_handler Reserved70_IRQHandler + def_irq_handler Reserved71_IRQHandler + def_irq_handler DMA4_DriverIRQHandler + def_irq_handler DMA5_DriverIRQHandler + def_irq_handler DMA6_DriverIRQHandler + def_irq_handler DMA7_DriverIRQHandler + def_irq_handler Reserved76_IRQHandler + def_irq_handler Reserved77_IRQHandler + def_irq_handler Reserved78_IRQHandler + def_irq_handler Reserved79_IRQHandler + + .end diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/TOOLCHAIN_IAR/MKL82Z128xxx7.icf b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/TOOLCHAIN_IAR/MKL82Z128xxx7.icf new file mode 100644 index 00000000000..0fd080af98b --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/TOOLCHAIN_IAR/MKL82Z128xxx7.icf @@ -0,0 +1,139 @@ +/* +** ################################################################### +** Processors: MKL82Z128VLH7 +** MKL82Z128VLK7 +** MKL82Z128VLL7 +** MKL82Z128VMC7 +** MKL82Z128VMP7 +** +** Compiler: IAR ANSI C/C++ Compiler for ARM +** Reference manual: KL82P121M72SF0RM, Rev.2 November 2015 +** Version: rev. 1.5, 2015-09-24 +** Build: b160406 +** +** Abstract: +** Linker file for the IAR ANSI C/C++ Compiler for ARM +** +** Copyright (c) 2016 Freescale Semiconductor, Inc. +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without modification, +** are permitted provided that the following conditions are met: +** +** o Redistributions of source code must retain the above copyright notice, this list +** of conditions and the following disclaimer. +** +** o Redistributions in binary form must reproduce the above copyright notice, this +** list of conditions and the following disclaimer in the documentation and/or +** other materials provided with the distribution. +** +** o Neither the name of Freescale Semiconductor, Inc. nor the names of its +** contributors may be used to endorse or promote products derived from this +** software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +** ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +** ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +** +** http: www.freescale.com +** mail: support@freescale.com +** +** ################################################################### +*/ +define symbol __ram_vector_table__ = 1; + +/* Heap 1/4 of ram and stack 1/8 */ +define symbol __stack_size__=0x3000; +define symbol __heap_size__=0x6000; + +define symbol __ram_vector_table_size__ = isdefinedsymbol(__ram_vector_table__) ? 0x00000140 : 0; +define symbol __ram_vector_table_offset__ = isdefinedsymbol(__ram_vector_table__) ? 0x0000013F : 0; + +define symbol m_interrupts_start = 0x00000000; +define symbol m_interrupts_end = 0x0000013F; + +define symbol m_bootloader_config_start = 0x000003C0; +define symbol m_bootloader_config_end = 0x000003FF; + +define symbol m_flash_config_start = 0x00000400; +define symbol m_flash_config_end = 0x0000040F; + +define symbol m_text_start = 0x00000410; +define symbol m_text_end = 0x0001FFFF; + +define symbol m_interrupts_ram_start = 0x1FFFA000; +define symbol m_interrupts_ram_end = 0x1FFFA000 + __ram_vector_table_offset__; + +define symbol m_data_start = m_interrupts_ram_start + __ram_vector_table_size__; +define symbol m_data_end = 0x20011FFF; + +if (isdefinedsymbol(__usb_use_usbram__)) { + define symbol m_usb_sram_start = 0x40100000; + define symbol m_usb_sram_end = 0x401007FF; +} + +/* USB BDT size */ +define symbol usb_bdt_size = 0x200; +/* Sizes */ +if (isdefinedsymbol(__stack_size__)) { + define symbol __size_cstack__ = __stack_size__; +} else { + define symbol __size_cstack__ = 0x0400; +} + +if (isdefinedsymbol(__heap_size__)) { + define symbol __size_heap__ = __heap_size__; +} else { + define symbol __size_heap__ = 0x0400; +} + +define exported symbol __VECTOR_TABLE = m_interrupts_start; +define exported symbol __VECTOR_RAM = isdefinedsymbol(__ram_vector_table__) ? m_interrupts_ram_start : m_interrupts_start; +define exported symbol __RAM_VECTOR_TABLE_SIZE = __ram_vector_table_size__; + +define memory mem with size = 4G; +define region m_bootloader_config_region = mem:[from m_bootloader_config_start to m_bootloader_config_end]; +define region m_flash_config_region = mem:[from m_flash_config_start to m_flash_config_end]; +define region TEXT_region = mem:[from m_interrupts_start to m_interrupts_end] + | mem:[from m_text_start to m_text_end]; +define region DATA_region = mem:[from m_data_start to m_data_end-__size_cstack__]; +define region CSTACK_region = mem:[from m_data_end-__size_cstack__+1 to m_data_end]; +define region m_interrupts_ram_region = mem:[from m_interrupts_ram_start to m_interrupts_ram_end]; + +define block CSTACK with alignment = 8, size = __size_cstack__ { }; +define block HEAP with alignment = 8, size = __size_heap__ { }; +define block RW { readwrite }; +define block ZI { zi }; + +/* regions for USB */ +if (isdefinedsymbol(__usb_use_usbram__)) { + define region USB_BDT_region = mem:[from m_usb_sram_start to m_usb_sram_start + usb_bdt_size - 1]; + define region USB_SRAM_region = mem:[from m_usb_sram_start + usb_bdt_size to m_usb_sram_end]; + place in USB_BDT_region { section m_usb_bdt }; + place in USB_SRAM_region { section m_usb_global }; +} + +initialize by copy { readwrite, section .textrw }; +if (isdefinedsymbol(__usb_use_usbram__)) { + do not initialize { section .noinit, section m_usb_bdt, section m_usb_global }; +} else { + do not initialize { section .noinit }; +} + +place at address mem: m_interrupts_start { readonly section .intvec }; +place in m_bootloader_config_region { section BootloaderConfig }; +place in m_flash_config_region { section FlashConfig }; +place in TEXT_region { readonly }; +place in DATA_region { block RW }; +place in DATA_region { block ZI }; +place in DATA_region { last block HEAP }; +place in CSTACK_region { block CSTACK }; +place in m_interrupts_ram_region { section m_interrupts_ram }; + diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/TOOLCHAIN_IAR/startup_MKL82Z7.s b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/TOOLCHAIN_IAR/startup_MKL82Z7.s new file mode 100644 index 00000000000..8e9c43da553 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/TOOLCHAIN_IAR/startup_MKL82Z7.s @@ -0,0 +1,479 @@ +; --------------------------------------------------------------------------------------- +; @file: startup_MKL82Z7.s +; @purpose: CMSIS Cortex-M0P Core Device Startup File +; MKL82Z7 +; @version: 1.5 +; @date: 2015-9-24 +; @build: b151217 +; --------------------------------------------------------------------------------------- +; +; Copyright (c) 1997 - 2015 , Freescale Semiconductor, Inc. +; All rights reserved. +; +; Redistribution and use in source and binary forms, with or without modification, +; are permitted provided that the following conditions are met: +; +; o Redistributions of source code must retain the above copyright notice, this list +; of conditions and the following disclaimer. +; +; o Redistributions in binary form must reproduce the above copyright notice, this +; list of conditions and the following disclaimer in the documentation and/or +; other materials provided with the distribution. +; +; o Neither the name of Freescale Semiconductor, Inc. nor the names of its +; contributors may be used to endorse or promote products derived from this +; software without specific prior written permission. +; +; THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +; ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +; WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +; DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +; ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +; (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +; ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +; (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +; +; The modules in this file are included in the libraries, and may be replaced +; by any user-defined modules that define the PUBLIC symbol _program_start or +; a user defined start symbol. +; To override the cstartup defined in the library, simply add your modified +; version to the workbench project. +; +; The vector table is normally located at address 0. +; When debugging in RAM, it can be located in RAM, aligned to at least 2^6. +; The name "__vector_table" has special meaning for C-SPY: +; it is where the SP start value is found, and the NVIC vector +; table register (VTOR) is initialized to this address if != 0. +; +; Cortex-M version +; + + MODULE ?cstartup + + ;; Forward declaration of sections. + SECTION CSTACK:DATA:NOROOT(3) + + SECTION .intvec:CODE:NOROOT(2) + + EXTERN __iar_program_start + EXTERN SystemInit + PUBLIC __vector_table + PUBLIC __vector_table_0x1c + PUBLIC __Vectors + PUBLIC __Vectors_End + PUBLIC __Vectors_Size + + DATA + +__vector_table + DCD sfe(CSTACK) + DCD Reset_Handler + + DCD NMI_Handler ;NMI Handler + DCD HardFault_Handler ;Hard Fault Handler + DCD 0 ;Reserved + DCD 0 ;Reserved + DCD 0 ;Reserved +__vector_table_0x1c + DCD 0 ;Reserved + DCD 0 ;Reserved + DCD 0 ;Reserved + DCD 0 ;Reserved + DCD SVC_Handler ;SVCall Handler + DCD 0 ;Reserved + DCD 0 ;Reserved + DCD PendSV_Handler ;PendSV Handler + DCD SysTick_Handler ;SysTick Handler + + ;External Interrupts + DCD DMA0_DMA4_IRQHandler ;DMA channel 0, 4 transfer complete + DCD DMA1_DMA5_IRQHandler ;DMA channel 1, 5 transfer complete + DCD DMA2_DMA6_IRQHandler ;DMA channel 2, 6 transfer complete + DCD DMA3_DMA7_IRQHandler ;DMA channel 3, 7 transfer complete + DCD DMA_Error_IRQHandler ;DMA channel 0 - 7 error + DCD FLEXIO0_IRQHandler ;Flexible IO + DCD TPM0_IRQHandler ;Timer/PWM module 0 + DCD TPM1_IRQHandler ;Timer/PWM module 1 + DCD TPM2_IRQHandler ;Timer/PWM module 2 + DCD PIT0_IRQHandler ;Periodic Interrupt Timer 0 + DCD SPI0_IRQHandler ;Serial Peripheral Interface 0 + DCD EMVSIM0_IRQHandler ;EMVSIM0 common interrupt + DCD LPUART0_IRQHandler ;LPUART0 status and error + DCD LPUART1_IRQHandler ;LPUART1 status and error + DCD I2C0_IRQHandler ;Inter-Integrated Circuit 0 + DCD QSPI0_IRQHandler ;QuadSPI0 interrupt + DCD Reserved32_IRQHandler ;DryIce tamper detect + DCD PORTA_IRQHandler ;Pin detect Port A + DCD PORTB_IRQHandler ;Pin detect Port B + DCD PORTC_IRQHandler ;Pin detect Port C + DCD PORTD_IRQHandler ;Pin detect Port D + DCD PORTE_IRQHandler ;Pin detect Port E + DCD LLWU_IRQHandler ;Low Leakage Wakeup + DCD LTC0_IRQHandler ;Low power trusted cryptographic + DCD USB0_IRQHandler ;USB OTG interrupt + DCD ADC0_IRQHandler ;Analog-to-Digital Converter 0 + DCD LPTMR0_IRQHandler ;Low-Power Timer 0 + DCD RTC_Seconds_IRQHandler ;RTC seconds + DCD INTMUX0_0_IRQHandler ;Selectable peripheral interrupt INTMUX0-0 + DCD INTMUX0_1_IRQHandler ;Selectable peripheral interrupt INTMUX0-1 + DCD INTMUX0_2_IRQHandler ;Selectable peripheral interrupt INTMUX0-2 + DCD INTMUX0_3_IRQHandler ;Selectable peripheral interrupt INTMUX0-3 + DCD LPTMR1_IRQHandler ;Low-Power Timer 1 (INTMUX source IRQ0) + DCD Reserved49_IRQHandler ;Reserved interrupt (INTMUX source IRQ1) + DCD Reserved50_IRQHandler ;Reserved interrupt (INTMUX source IRQ2) + DCD Reserved51_IRQHandler ;Reserved interrupt (INTMUX source IRQ3) + DCD SPI1_IRQHandler ;Serial Peripheral Interface 1 (INTMUX source IRQ4) + DCD LPUART2_IRQHandler ;LPUART2 status and error (INTMUX source IRQ5) + DCD EMVSIM1_IRQHandler ;EMVSIM1 common interrupt (INTMUX source IRQ6) + DCD I2C1_IRQHandler ;Inter-Integrated Circuit 1 (INTMUX source IRQ7) + DCD TSI0_IRQHandler ;Touch Sensing Input 0 (INTMUX source IRQ8) + DCD PMC_IRQHandler ;PMC controller low-voltage detect, low-voltage warning (INTMUX source IRQ9) + DCD FTFA_IRQHandler ;FTFA command complete/read collision (INTMUX source IRQ10) + DCD MCG_IRQHandler ;Multipurpose clock generator (INTMUX source IRQ11) + DCD WDOG_EWM_IRQHandler ;Single interrupt vector for WDOG and EWM (INTMUX source IRQ12) + DCD DAC0_IRQHandler ;Digital-to-analog converter 0 (INTMUX source IRQ13) + DCD TRNG0_IRQHandler ;True randon number generator (INTMUX source IRQ14) + DCD Reserved63_IRQHandler ;Reserved interrupt (INTMUX source IRQ15) + DCD CMP0_IRQHandler ;Comparator 0 (INTMUX source IRQ16) + DCD Reserved65_IRQHandler ;Reserved interrupt (INTMUX source IRQ17) + DCD RTC_Alarm_IRQHandler ;Real time clock (INTMUX source IRQ18) + DCD Reserved67_IRQHandler ;Reserved interrupt (INTMUX source IRQ19) + DCD Reserved68_IRQHandler ;Reserved interrupt (INTMUX source IRQ20) + DCD Reserved69_IRQHandler ;Reserved interrupt (INTMUX source IRQ21) + DCD Reserved70_IRQHandler ;Reserved interrupt (INTMUX source IRQ22) + DCD Reserved71_IRQHandler ;Reserved interrupt (INTMUX source IRQ23) + DCD DMA4_IRQHandler ;DMA channel 4 transfer complete (INTMUX source IRQ24) + DCD DMA5_IRQHandler ;DMA channel 5 transfer complete (INTMUX source IRQ25) + DCD DMA6_IRQHandler ;DMA channel 6 transfer complete (INTMUX source IRQ26) + DCD DMA7_IRQHandler ;DMA channel 7 transfer complete (INTMUX source IRQ27) + DCD Reserved76_IRQHandler ;Reserved interrupt (INTMUX source IRQ28) + DCD Reserved77_IRQHandler ;Reserved interrupt (INTMUX source IRQ29) + DCD Reserved78_IRQHandler ;Reserved interrupt (INTMUX source IRQ30) + DCD Reserved79_IRQHandler ;Reserved interrupt (INTMUX source IRQ31) +__Vectors_End + + SECTION FlashConfig:CODE +__FlashConfig + DCD 0xFFFFFFFF + DCD 0xFFFFFFFF + DCD 0xFFFFFFFF + DCD 0xFFFF3DFE +__FlashConfig_End + +__Vectors EQU __vector_table +__Vectors_Size EQU __Vectors_End - __Vectors + + +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;; +;; Default interrupt handlers. +;; + THUMB + + PUBWEAK Reset_Handler + SECTION .text:CODE:REORDER:NOROOT(2) +Reset_Handler + CPSID I ; Mask interrupts + LDR R0, =0xE000ED08 + LDR R1, =__vector_table + STR R1, [R0] + LDR R0, =SystemInit + BLX R0 + CPSIE I ; Unmask interrupts + LDR R0, =__iar_program_start + BX R0 + + PUBWEAK NMI_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +NMI_Handler + B . + + PUBWEAK HardFault_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +HardFault_Handler + B . + + PUBWEAK SVC_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +SVC_Handler + B . + + PUBWEAK PendSV_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +PendSV_Handler + B . + + PUBWEAK SysTick_Handler + SECTION .text:CODE:REORDER:NOROOT(1) +SysTick_Handler + B . + + PUBWEAK DMA0_DMA4_IRQHandler + PUBWEAK DMA0_DMA4_DriverIRQHandler + SECTION .text:CODE:REORDER:NOROOT(2) +DMA0_DMA4_IRQHandler + LDR R0, =DMA0_DMA4_DriverIRQHandler + BX R0 + + PUBWEAK DMA1_DMA5_IRQHandler + PUBWEAK DMA1_DMA5_DriverIRQHandler + SECTION .text:CODE:REORDER:NOROOT(2) +DMA1_DMA5_IRQHandler + LDR R0, =DMA1_DMA5_DriverIRQHandler + BX R0 + + PUBWEAK DMA2_DMA6_IRQHandler + PUBWEAK DMA2_DMA6_DriverIRQHandler + SECTION .text:CODE:REORDER:NOROOT(2) +DMA2_DMA6_IRQHandler + LDR R0, =DMA2_DMA6_DriverIRQHandler + BX R0 + + PUBWEAK DMA3_DMA7_IRQHandler + PUBWEAK DMA3_DMA7_DriverIRQHandler + SECTION .text:CODE:REORDER:NOROOT(2) +DMA3_DMA7_IRQHandler + LDR R0, =DMA3_DMA7_DriverIRQHandler + BX R0 + + PUBWEAK DMA_Error_IRQHandler + PUBWEAK DMA_Error_DriverIRQHandler + SECTION .text:CODE:REORDER:NOROOT(2) +DMA_Error_IRQHandler + LDR R0, =DMA_Error_DriverIRQHandler + BX R0 + + PUBWEAK FLEXIO0_IRQHandler + PUBWEAK FLEXIO0_DriverIRQHandler + SECTION .text:CODE:REORDER:NOROOT(2) +FLEXIO0_IRQHandler + LDR R0, =FLEXIO0_DriverIRQHandler + BX R0 + + PUBWEAK TPM0_IRQHandler + PUBWEAK TPM1_IRQHandler + PUBWEAK TPM2_IRQHandler + PUBWEAK PIT0_IRQHandler + PUBWEAK SPI0_IRQHandler + PUBWEAK SPI0_DriverIRQHandler + SECTION .text:CODE:REORDER:NOROOT(2) +SPI0_IRQHandler + LDR R0, =SPI0_DriverIRQHandler + BX R0 + + PUBWEAK EMVSIM0_IRQHandler + PUBWEAK LPUART0_IRQHandler + PUBWEAK LPUART0_DriverIRQHandler + SECTION .text:CODE:REORDER:NOROOT(2) +LPUART0_IRQHandler + LDR R0, =LPUART0_DriverIRQHandler + BX R0 + + PUBWEAK LPUART1_IRQHandler + PUBWEAK LPUART1_DriverIRQHandler + SECTION .text:CODE:REORDER:NOROOT(2) +LPUART1_IRQHandler + LDR R0, =LPUART1_DriverIRQHandler + BX R0 + + PUBWEAK I2C0_IRQHandler + PUBWEAK I2C0_DriverIRQHandler + SECTION .text:CODE:REORDER:NOROOT(2) +I2C0_IRQHandler + LDR R0, =I2C0_DriverIRQHandler + BX R0 + + PUBWEAK QSPI0_IRQHandler + PUBWEAK QSPI0_DriverIRQHandler + SECTION .text:CODE:REORDER:NOROOT(2) +QSPI0_IRQHandler + LDR R0, =QSPI0_DriverIRQHandler + BX R0 + + PUBWEAK Reserved32_IRQHandler + PUBWEAK PORTA_IRQHandler + PUBWEAK PORTB_IRQHandler + PUBWEAK PORTC_IRQHandler + PUBWEAK PORTD_IRQHandler + PUBWEAK PORTE_IRQHandler + PUBWEAK LLWU_IRQHandler + PUBWEAK LTC0_IRQHandler + PUBWEAK USB0_IRQHandler + PUBWEAK ADC0_IRQHandler + PUBWEAK LPTMR0_IRQHandler + PUBWEAK RTC_Seconds_IRQHandler + PUBWEAK INTMUX0_0_IRQHandler + PUBWEAK INTMUX0_0_DriverIRQHandler + SECTION .text:CODE:REORDER:NOROOT(2) +INTMUX0_0_IRQHandler + LDR R0, =INTMUX0_0_DriverIRQHandler + BX R0 + + PUBWEAK INTMUX0_1_IRQHandler + PUBWEAK INTMUX0_1_DriverIRQHandler + SECTION .text:CODE:REORDER:NOROOT(2) +INTMUX0_1_IRQHandler + LDR R0, =INTMUX0_1_DriverIRQHandler + BX R0 + + PUBWEAK INTMUX0_2_IRQHandler + PUBWEAK INTMUX0_2_DriverIRQHandler + SECTION .text:CODE:REORDER:NOROOT(2) +INTMUX0_2_IRQHandler + LDR R0, =INTMUX0_2_DriverIRQHandler + BX R0 + + PUBWEAK INTMUX0_3_IRQHandler + PUBWEAK INTMUX0_3_DriverIRQHandler + SECTION .text:CODE:REORDER:NOROOT(2) +INTMUX0_3_IRQHandler + LDR R0, =INTMUX0_3_DriverIRQHandler + BX R0 + + PUBWEAK LPTMR1_IRQHandler + PUBWEAK Reserved49_IRQHandler + PUBWEAK Reserved50_IRQHandler + PUBWEAK Reserved51_IRQHandler + PUBWEAK SPI1_IRQHandler + PUBWEAK SPI1_DriverIRQHandler + SECTION .text:CODE:REORDER:NOROOT(2) +SPI1_IRQHandler + LDR R0, =SPI1_DriverIRQHandler + BX R0 + + PUBWEAK LPUART2_IRQHandler + PUBWEAK LPUART2_DriverIRQHandler + SECTION .text:CODE:REORDER:NOROOT(2) +LPUART2_IRQHandler + LDR R0, =LPUART2_DriverIRQHandler + BX R0 + + PUBWEAK EMVSIM1_IRQHandler + PUBWEAK I2C1_IRQHandler + PUBWEAK I2C1_DriverIRQHandler + SECTION .text:CODE:REORDER:NOROOT(2) +I2C1_IRQHandler + LDR R0, =I2C1_DriverIRQHandler + BX R0 + + PUBWEAK TSI0_IRQHandler + PUBWEAK PMC_IRQHandler + PUBWEAK FTFA_IRQHandler + PUBWEAK MCG_IRQHandler + PUBWEAK WDOG_EWM_IRQHandler + PUBWEAK DAC0_IRQHandler + PUBWEAK TRNG0_IRQHandler + PUBWEAK Reserved63_IRQHandler + PUBWEAK CMP0_IRQHandler + PUBWEAK Reserved65_IRQHandler + PUBWEAK RTC_Alarm_IRQHandler + PUBWEAK Reserved67_IRQHandler + PUBWEAK Reserved68_IRQHandler + PUBWEAK Reserved69_IRQHandler + PUBWEAK Reserved70_IRQHandler + PUBWEAK Reserved71_IRQHandler + PUBWEAK DMA4_IRQHandler + PUBWEAK DMA4_DriverIRQHandler + SECTION .text:CODE:REORDER:NOROOT(2) +DMA4_IRQHandler + LDR R0, =DMA4_DriverIRQHandler + BX R0 + + PUBWEAK DMA5_IRQHandler + PUBWEAK DMA5_DriverIRQHandler + SECTION .text:CODE:REORDER:NOROOT(2) +DMA5_IRQHandler + LDR R0, =DMA5_DriverIRQHandler + BX R0 + + PUBWEAK DMA6_IRQHandler + PUBWEAK DMA6_DriverIRQHandler + SECTION .text:CODE:REORDER:NOROOT(2) +DMA6_IRQHandler + LDR R0, =DMA6_DriverIRQHandler + BX R0 + + PUBWEAK DMA7_IRQHandler + PUBWEAK DMA7_DriverIRQHandler + SECTION .text:CODE:REORDER:NOROOT(2) +DMA7_IRQHandler + LDR R0, =DMA7_DriverIRQHandler + BX R0 + + PUBWEAK Reserved76_IRQHandler + PUBWEAK Reserved77_IRQHandler + PUBWEAK Reserved78_IRQHandler + PUBWEAK Reserved79_IRQHandler + PUBWEAK DefaultISR + SECTION .text:CODE:REORDER:NOROOT(2) +DMA0_DMA4_DriverIRQHandler +DMA1_DMA5_DriverIRQHandler +DMA2_DMA6_DriverIRQHandler +DMA3_DMA7_DriverIRQHandler +DMA_Error_DriverIRQHandler +FLEXIO0_DriverIRQHandler +TPM0_IRQHandler +TPM1_IRQHandler +TPM2_IRQHandler +PIT0_IRQHandler +SPI0_DriverIRQHandler +EMVSIM0_IRQHandler +LPUART0_DriverIRQHandler +LPUART1_DriverIRQHandler +I2C0_DriverIRQHandler +QSPI0_DriverIRQHandler +Reserved32_IRQHandler +PORTA_IRQHandler +PORTB_IRQHandler +PORTC_IRQHandler +PORTD_IRQHandler +PORTE_IRQHandler +LLWU_IRQHandler +LTC0_IRQHandler +USB0_IRQHandler +ADC0_IRQHandler +LPTMR0_IRQHandler +RTC_Seconds_IRQHandler +INTMUX0_0_DriverIRQHandler +INTMUX0_1_DriverIRQHandler +INTMUX0_2_DriverIRQHandler +INTMUX0_3_DriverIRQHandler +LPTMR1_IRQHandler +Reserved49_IRQHandler +Reserved50_IRQHandler +Reserved51_IRQHandler +SPI1_DriverIRQHandler +LPUART2_DriverIRQHandler +EMVSIM1_IRQHandler +I2C1_DriverIRQHandler +TSI0_IRQHandler +PMC_IRQHandler +FTFA_IRQHandler +MCG_IRQHandler +WDOG_EWM_IRQHandler +DAC0_IRQHandler +TRNG0_IRQHandler +Reserved63_IRQHandler +CMP0_IRQHandler +Reserved65_IRQHandler +RTC_Alarm_IRQHandler +Reserved67_IRQHandler +Reserved68_IRQHandler +Reserved69_IRQHandler +Reserved70_IRQHandler +Reserved71_IRQHandler +DMA4_DriverIRQHandler +DMA5_DriverIRQHandler +DMA6_DriverIRQHandler +DMA7_DriverIRQHandler +Reserved76_IRQHandler +Reserved77_IRQHandler +Reserved78_IRQHandler +Reserved79_IRQHandler +DefaultISR + LDR R0, =DefaultISR + BX R0 + + END diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/cmsis.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/cmsis.h new file mode 100644 index 00000000000..7423a125ba6 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/cmsis.h @@ -0,0 +1,13 @@ +/* mbed Microcontroller Library - CMSIS + * Copyright (C) 2009-2011 ARM Limited. All rights reserved. + * + * A generic CMSIS include header, pulling in LPC11U24 specifics + */ + +#ifndef MBED_CMSIS_H +#define MBED_CMSIS_H + +#include "fsl_device_registers.h" +#include "cmsis_nvic.h" + +#endif diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/cmsis_nvic.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/cmsis_nvic.c new file mode 100644 index 00000000000..59b37502b22 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/cmsis_nvic.c @@ -0,0 +1,42 @@ +/* mbed Microcontroller Library + * CMSIS-style functionality to support dynamic vectors + ******************************************************************************* + * Copyright (c) 2011 ARM Limited. All rights reserved. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of ARM Limited nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ******************************************************************************* + */ +#include "cmsis_nvic.h" + +extern void InstallIRQHandler(IRQn_Type irq, uint32_t irqHandler); + +void NVIC_SetVector(IRQn_Type IRQn, uint32_t vector) { + InstallIRQHandler(IRQn, vector); +} + +uint32_t NVIC_GetVector(IRQn_Type IRQn) { + uint32_t *vectors = (uint32_t*)SCB->VTOR; + return vectors[IRQn + 16]; +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/cmsis_nvic.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/cmsis_nvic.h new file mode 100644 index 00000000000..64f36b31671 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/cmsis_nvic.h @@ -0,0 +1,51 @@ +/* mbed Microcontroller Library + * CMSIS-style functionality to support dynamic vectors + ******************************************************************************* + * Copyright (c) 2011 ARM Limited. All rights reserved. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of ARM Limited nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ******************************************************************************* + */ + +#ifndef MBED_CMSIS_NVIC_H +#define MBED_CMSIS_NVIC_H + +#define NVIC_NUM_VECTORS (16 + 32) // CORE + MCU Peripherals +#define NVIC_USER_IRQ_OFFSET 16 + +#include "cmsis.h" + +#ifdef __cplusplus +extern "C" { +#endif + +void NVIC_SetVector(IRQn_Type IRQn, uint32_t vector); +uint32_t NVIC_GetVector(IRQn_Type IRQn); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/fsl_device_registers.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/fsl_device_registers.h new file mode 100644 index 00000000000..3ecd672c3cb --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/fsl_device_registers.h @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2014 - 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef __FSL_DEVICE_REGISTERS_H__ +#define __FSL_DEVICE_REGISTERS_H__ + +/* + * Include the cpu specific register header files. + * + * The CPU macro should be declared in the project or makefile. + */ +#if (defined(CPU_MKL82Z128VLH7) || defined(CPU_MKL82Z128VLK7) || defined(CPU_MKL82Z128VLL7) || \ + defined(CPU_MKL82Z128VMC7) || defined(CPU_MKL82Z128VMP7)) + +#define KL82Z7_SERIES + +/* CMSIS-style register definitions */ +#include "MKL82Z7.h" +/* CPU specific feature definitions */ +#include "MKL82Z7_features.h" + +#else + #error "No valid CPU defined!" +#endif + +#endif /* __FSL_DEVICE_REGISTERS_H__ */ + +/******************************************************************************* + * EOF + ******************************************************************************/ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/system_MKL82Z7.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/system_MKL82Z7.c new file mode 100644 index 00000000000..223fce6b56b --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/system_MKL82Z7.c @@ -0,0 +1,293 @@ +/* +** ################################################################### +** Processors: MKL82Z128VLH7 +** MKL82Z128VLK7 +** MKL82Z128VLL7 +** MKL82Z128VMC7 +** MKL82Z128VMP7 +** +** Compilers: Keil ARM C/C++ Compiler +** Freescale C/C++ for Embedded ARM +** GNU C Compiler +** IAR ANSI C/C++ Compiler for ARM +** +** Reference manual: KL82P121M72SF0RM, Rev.2 November 2015 +** Version: rev. 1.5, 2015-09-24 +** Build: b151217 +** +** Abstract: +** Provides a system configuration function and a global variable that +** contains the system frequency. It configures the device and initializes +** the oscillator (PLL) that is part of the microcontroller device. +** +** Copyright (c) 2015 Freescale Semiconductor, Inc. +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without modification, +** are permitted provided that the following conditions are met: +** +** o Redistributions of source code must retain the above copyright notice, this list +** of conditions and the following disclaimer. +** +** o Redistributions in binary form must reproduce the above copyright notice, this +** list of conditions and the following disclaimer in the documentation and/or +** other materials provided with the distribution. +** +** o Neither the name of Freescale Semiconductor, Inc. nor the names of its +** contributors may be used to endorse or promote products derived from this +** software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +** ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +** ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +** +** http: www.freescale.com +** mail: support@freescale.com +** +** Revisions: +** - rev. 1.0 (2015-04-18) +** Initial version. +** - rev. 1.1 (2015-05-04) +** Update SIM, EVMSIM, QuadSPI, and I2C based on Rev0 document. +** - rev. 1.2 (2015-08-11) +** Correct clock configuration. +** - rev. 1.3 (2015-08-20) +** Align with RM Rev.1. +** - rev. 1.4 (2015-08-28) +** Update LPUART to add FIFO. +** - rev. 1.5 (2015-09-24) +** Update to align with RM Rev.1.2. +** +** ################################################################### +*/ + +/*! + * @file MKL82Z7 + * @version 1.5 + * @date 2015-09-24 + * @brief Device specific configuration file for MKL82Z7 (implementation file) + * + * Provides a system configuration function and a global variable that contains + * the system frequency. It configures the device and initializes the oscillator + * (PLL) that is part of the microcontroller device. + */ + +#include +#include "fsl_device_registers.h" + + + +/*! + * @brief Defines the structure to set the Bootloader Configuration Area + * + * This type of variable is used to set the Bootloader Configuration Area + * of the chip. + */ +typedef struct SystemBootloaderConfig +{ + uint32_t tag; /*!< Magic number to verify bootloader configuration is valid. Must be set to 'kcfg'. */ + uint32_t crcStartAddress; /*!< Start address for application image CRC check. If the bits are all set then Kinetis bootloader by default will not perform any CRC check. */ + uint32_t crcByteCount; /*!< Byte count for application image CRC check. If the bits are all set then Kinetis bootloader by default will not prform any CRC check. */ + uint32_t crcExpectedValue; /*!< Expected CRC value for application CRC check. If the bits are all set then Kinetis bootloader by default will not perform any CRC check.*/ + uint8_t enabledPeripherals; /*!< Bitfield of peripherals to enable. + bit 0 - LPUART, bit 1 - I2C, bit 2 - SPI, bit 4 - USB + Kinetis bootloader will enable the peripheral if corresponding bit is set to 1. */ + uint8_t i2cSlaveAddress; /*!< If not 0xFF, used as the 7-bit I2C slave address. If 0xFF, defaults to 0x10 for I2C slave address */ + uint16_t peripheralDetectionTimeoutMs; /*!< Timeout in milliseconds for active peripheral detection. If 0xFFFF, defaults to 5 seconds. */ + uint16_t usbVid; /*!< Sets the USB Vendor ID reported by the device during enumeration. If 0xFFFF, it defaults to 0x15A2. */ + uint16_t usbPid; /*!< Sets the USB Product ID reported by the device during enumeration. */ + uint32_t usbStringsPointer; /*!< Sets the USB Strings reported by the device during enumeration. */ + uint8_t clockFlags; /*!< The flags in the clockFlags configuration field are enabled if the corresponding bit is cleared (0). + bit 0 - HighSpeed Enable high speed mode (i.e., 48 MHz). */ + uint8_t clockDivider; /*!< Inverted value of the divider to use for core and bus clocks when in high speed mode */ + uint8_t bootFlags; /*!< If bit 0 is cleared, then Kinetis bootloader will jump to either Quad SPI Flash or internal flash image depending on FOPT BOOTSRC_SEL bits. + If the bit is set, then Kinetis bootloader will prepare for host communication over serial peripherals. */ + uint8_t RESERVED1; + uint32_t RESERVED2; + uint32_t keyBlobPointer; /*!< A pointer to the keyblob data in memory. */ + uint8_t RESERVED3[8]; + uint32_t qspiConfigBlockPtr; /*!< A pointer to the QSPI config block in internal flash array. */ + uint8_t RESERVED4[12]; +} system_bootloader_config_t; + +#ifdef BOOTLOADER_CONFIG +/* Bootlader configuration area */ + #if defined(__IAR_SYSTEMS_ICC__) +/* Pragma to place the Bootloader Configuration Array on correct location defined in linker file. */ +#pragma language=extended +#pragma location = "BootloaderConfig" +__root const system_bootloader_config_t BootloaderConfig @ "BootloaderConfig" = + #elif defined(__GNUC__) +__attribute__ ((section (".BootloaderConfig"))) const system_bootloader_config_t BootloaderConfig = + #elif defined(__CC_ARM) +__attribute__ ((section ("BootloaderConfig"))) const system_bootloader_config_t BootloaderConfig __attribute__((used)) = + #else + #error Unsupported compiler! + #endif +{ + .tag = 0x6766636BU, /* Magic Number */ + .crcStartAddress = 0xFFFFFFFFU, /* Disable CRC check */ + .crcByteCount = 0xFFFFFFFFU, /* Disable CRC check */ + .crcExpectedValue = 0xFFFFFFFFU, /* Disable CRC check */ + .enabledPeripherals = 0x17, /* Enable all peripherals */ + .i2cSlaveAddress = 0xFF, /* Use default I2C address */ + .peripheralDetectionTimeoutMs = 0xFFFFU, /* Use default timeout */ + .usbVid = 0xFFFFU, /* Use default USB Vendor ID */ + .usbPid = 0xFFFFU, /* Use default USB Product ID */ + .usbStringsPointer = 0xFFFFFFFFU, /* Use default USB Strings */ + .clockFlags = 0x01, /* Enable High speed mode */ + .clockDivider = 0xFF, /* Use clock divider 1 */ + .bootFlags = 0x01, /* Enable communication with host */ + .keyBlobPointer = 0xFFFFFFFFU, /* No keyblob data */ + .qspiConfigBlockPtr = 0xFFFFFFFFU /* No QSPI configuration */ +}; +#endif + + + +/* ---------------------------------------------------------------------------- + -- Core clock + ---------------------------------------------------------------------------- */ + +uint32_t SystemCoreClock = DEFAULT_SYSTEM_CLOCK; + +/* ---------------------------------------------------------------------------- + -- SystemInit() + ---------------------------------------------------------------------------- */ + +void SystemInit (void) { + +#if (DISABLE_WDOG) + /* WDOG->UNLOCK: WDOGUNLOCK=0xC520 */ + WDOG->UNLOCK = WDOG_UNLOCK_WDOGUNLOCK(0xC520); /* Key 1 */ + /* WDOG->UNLOCK: WDOGUNLOCK=0xD928 */ + WDOG->UNLOCK = WDOG_UNLOCK_WDOGUNLOCK(0xD928); /* Key 2 */ + /* WDOG->STCTRLH: ?=0,DISTESTWDOG=0,BYTESEL=0,TESTSEL=0,TESTWDOG=0,?=0,?=1,WAITEN=1,STOPEN=1,DBGEN=0,ALLOWUPDATE=1,WINEN=0,IRQRSTEN=0,CLKSRC=1,WDOGEN=0 */ + WDOG->STCTRLH = WDOG_STCTRLH_BYTESEL(0x00) | + WDOG_STCTRLH_WAITEN_MASK | + WDOG_STCTRLH_STOPEN_MASK | + WDOG_STCTRLH_ALLOWUPDATE_MASK | + WDOG_STCTRLH_CLKSRC_MASK | + 0x0100U; +#endif /* (DISABLE_WDOG) */ + +} + +/* ---------------------------------------------------------------------------- + -- SystemCoreClockUpdate() + ---------------------------------------------------------------------------- */ + +void SystemCoreClockUpdate (void) { + + uint32_t MCGOUTClock; /* Variable to store output clock frequency of the MCG module */ + uint16_t Divider; + + if ((MCG->C1 & MCG_C1_CLKS_MASK) == 0x00U) { + /* Output of FLL or PLL is selected */ + if ((MCG->C6 & MCG_C6_PLLS_MASK) == 0x00U) { + /* FLL is selected */ + if ((MCG->C1 & MCG_C1_IREFS_MASK) == 0x00U) { + /* External reference clock is selected */ + switch (MCG->C7 & MCG_C7_OSCSEL_MASK) { + case 0x00U: + MCGOUTClock = CPU_XTAL_CLK_HZ; /* System oscillator drives MCG clock */ + break; + case 0x01U: + MCGOUTClock = CPU_XTAL32k_CLK_HZ; /* RTC 32 kHz oscillator drives MCG clock */ + break; + case 0x02U: + default: + MCGOUTClock = CPU_INT_IRC_CLK_HZ; /* IRC 48MHz oscillator drives MCG clock */ + break; + } + if (((MCG->C2 & MCG_C2_RANGE_MASK) != 0x00U) && ((MCG->C7 & MCG_C7_OSCSEL_MASK) != 0x01U)) { + switch (MCG->C1 & MCG_C1_FRDIV_MASK) { + case 0x38U: + Divider = 1536U; + break; + case 0x30U: + Divider = 1280U; + break; + default: + Divider = (uint16_t)(32LU << ((MCG->C1 & MCG_C1_FRDIV_MASK) >> MCG_C1_FRDIV_SHIFT)); + break; + } + } else {/* ((MCG->C2 & MCG_C2_RANGE_MASK) != 0x00U) */ + Divider = (uint16_t)(1LU << ((MCG->C1 & MCG_C1_FRDIV_MASK) >> MCG_C1_FRDIV_SHIFT)); + } + MCGOUTClock = (MCGOUTClock / Divider); /* Calculate the divided FLL reference clock */ + } else { /* (!((MCG->C1 & MCG_C1_IREFS_MASK) == 0x00U)) */ + MCGOUTClock = CPU_INT_SLOW_CLK_HZ; /* The slow internal reference clock is selected */ + } /* (!((MCG->C1 & MCG_C1_IREFS_MASK) == 0x00U)) */ + /* Select correct multiplier to calculate the MCG output clock */ + switch (MCG->C4 & (MCG_C4_DMX32_MASK | MCG_C4_DRST_DRS_MASK)) { + case 0x00U: + MCGOUTClock *= 640U; + break; + case 0x20U: + MCGOUTClock *= 1280U; + break; + case 0x40U: + MCGOUTClock *= 1920U; + break; + case 0x60U: + MCGOUTClock *= 2560U; + break; + case 0x80U: + MCGOUTClock *= 732U; + break; + case 0xA0U: + MCGOUTClock *= 1464U; + break; + case 0xC0U: + MCGOUTClock *= 2197U; + break; + case 0xE0U: + MCGOUTClock *= 2929U; + break; + default: + break; + } + } else { /* (!((MCG->C6 & MCG_C6_PLLS_MASK) == 0x00U)) */ + /* PLL is selected */ + Divider = (((uint16_t)MCG->C5 & MCG_C5_PRDIV_MASK) + 0x01U); + MCGOUTClock = (uint32_t)(CPU_XTAL_CLK_HZ / Divider); /* Calculate the PLL reference clock */ + Divider = (((uint16_t)MCG->C6 & MCG_C6_VDIV_MASK) + 16U); + MCGOUTClock *= Divider; /* Calculate the VCO output clock */ + MCGOUTClock /= 2; /* Calculate the MCG output clock */ + } /* (!((MCG->C6 & MCG_C6_PLLS_MASK) == 0x00U)) */ + } else if ((MCG->C1 & MCG_C1_CLKS_MASK) == 0x40U) { + /* Internal reference clock is selected */ + if ((MCG->C2 & MCG_C2_IRCS_MASK) == 0x00U) { + MCGOUTClock = CPU_INT_SLOW_CLK_HZ; /* Slow internal reference clock selected */ + } else { /* (!((MCG->C2 & MCG_C2_IRCS_MASK) == 0x00U)) */ + Divider = (uint16_t)(0x01LU << ((MCG->SC & MCG_SC_FCRDIV_MASK) >> MCG_SC_FCRDIV_SHIFT)); + MCGOUTClock = (uint32_t) (CPU_INT_FAST_CLK_HZ / Divider); /* Fast internal reference clock selected */ + } /* (!((MCG->C2 & MCG_C2_IRCS_MASK) == 0x00U)) */ + } else if ((MCG->C1 & MCG_C1_CLKS_MASK) == 0x80U) { + /* External reference clock is selected */ + switch (MCG->C7 & MCG_C7_OSCSEL_MASK) { + case 0x00U: + MCGOUTClock = CPU_XTAL_CLK_HZ; /* System oscillator drives MCG clock */ + break; + case 0x01U: + MCGOUTClock = CPU_XTAL32k_CLK_HZ; /* RTC 32 kHz oscillator drives MCG clock */ + break; + case 0x02U: + default: + MCGOUTClock = CPU_INT_IRC_CLK_HZ; /* IRC 48MHz oscillator drives MCG clock */ + break; + } + } else { /* (!((MCG->C1 & MCG_C1_CLKS_MASK) == 0x80U)) */ + /* Reserved value */ + return; + } /* (!((MCG->C1 & MCG_C1_CLKS_MASK) == 0x80U)) */ + SystemCoreClock = (MCGOUTClock / (0x01U + ((SIM->CLKDIV1 & SIM_CLKDIV1_OUTDIV1_MASK) >> SIM_CLKDIV1_OUTDIV1_SHIFT))); +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/system_MKL82Z7.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/system_MKL82Z7.h new file mode 100644 index 00000000000..dedec8709ef --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/device/system_MKL82Z7.h @@ -0,0 +1,148 @@ +/* +** ################################################################### +** Processors: MKL82Z128VLH7 +** MKL82Z128VLK7 +** MKL82Z128VLL7 +** MKL82Z128VMC7 +** MKL82Z128VMP7 +** +** Compilers: Keil ARM C/C++ Compiler +** Freescale C/C++ for Embedded ARM +** GNU C Compiler +** IAR ANSI C/C++ Compiler for ARM +** +** Reference manual: KL82P121M72SF0RM, Rev.2 November 2015 +** Version: rev. 1.5, 2015-09-24 +** Build: b151217 +** +** Abstract: +** Provides a system configuration function and a global variable that +** contains the system frequency. It configures the device and initializes +** the oscillator (PLL) that is part of the microcontroller device. +** +** Copyright (c) 2015 Freescale Semiconductor, Inc. +** All rights reserved. +** +** Redistribution and use in source and binary forms, with or without modification, +** are permitted provided that the following conditions are met: +** +** o Redistributions of source code must retain the above copyright notice, this list +** of conditions and the following disclaimer. +** +** o Redistributions in binary form must reproduce the above copyright notice, this +** list of conditions and the following disclaimer in the documentation and/or +** other materials provided with the distribution. +** +** o Neither the name of Freescale Semiconductor, Inc. nor the names of its +** contributors may be used to endorse or promote products derived from this +** software without specific prior written permission. +** +** THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +** ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +** WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +** DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +** ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +** (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +** LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +** ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +** (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +** SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +** +** http: www.freescale.com +** mail: support@freescale.com +** +** Revisions: +** - rev. 1.0 (2015-04-18) +** Initial version. +** - rev. 1.1 (2015-05-04) +** Update SIM, EVMSIM, QuadSPI, and I2C based on Rev0 document. +** - rev. 1.2 (2015-08-11) +** Correct clock configuration. +** - rev. 1.3 (2015-08-20) +** Align with RM Rev.1. +** - rev. 1.4 (2015-08-28) +** Update LPUART to add FIFO. +** - rev. 1.5 (2015-09-24) +** Update to align with RM Rev.1.2. +** +** ################################################################### +*/ + +/*! + * @file MKL82Z7 + * @version 1.5 + * @date 2015-09-24 + * @brief Device specific configuration file for MKL82Z7 (header file) + * + * Provides a system configuration function and a global variable that contains + * the system frequency. It configures the device and initializes the oscillator + * (PLL) that is part of the microcontroller device. + */ + +#ifndef _SYSTEM_MKL82Z7_H_ +#define _SYSTEM_MKL82Z7_H_ /**< Symbol preventing repeated inclusion */ + +#ifdef __cplusplus +extern "C" { +#endif + +#include + + +#ifndef DISABLE_WDOG + #define DISABLE_WDOG 1 +#endif + +/* Define clock source values */ + +#define CPU_XTAL_CLK_HZ 12000000U /* Value of the external crystal or oscillator clock frequency of the system oscillator (OSC) in Hz */ +#define CPU_XTAL32k_CLK_HZ 32768U /* Value of the external 32k crystal or oscillator clock frequency of the RTC in Hz */ +#define CPU_INT_SLOW_CLK_HZ 32768U /* Value of the slow internal oscillator clock frequency in Hz */ +#define CPU_INT_FAST_CLK_HZ 4000000U /* Value of the fast internal oscillator clock frequency in Hz */ +#define CPU_INT_IRC_CLK_HZ 48000000U /* Value of the 48M internal oscillator clock frequency in Hz */ + +/* RTC oscillator setting */ +/* RTC_CR: SC2P=0,SC4P=0,SC8P=0,SC16P=0,CLKO=1,OSCE=1,WPS=0,UM=0,SUP=0,WPE=0,SWR=0 */ +#define SYSTEM_RTC_CR_VALUE 0x0300U /* RTC_CR */ + +/* Low power mode enable */ +/* SMC_PMPROT: AHSRUN=1,AVLP=1,ALLS=1,AVLLS=1 */ +#define SYSTEM_SMC_PMPROT_VALUE 0xAAU /* SMC_PMPROT */ + +#define DEFAULT_SYSTEM_CLOCK 20971520u + + +/** + * @brief System clock frequency (core clock) + * + * The system clock frequency supplied to the SysTick timer and the processor + * core clock. This variable can be used by the user application to setup the + * SysTick timer or configure other parameters. It may also be used by debugger to + * query the frequency of the debug timer or configure the trace clock speed + * SystemCoreClock is initialized with a correct predefined value. + */ +extern uint32_t SystemCoreClock; + +/** + * @brief Setup the microcontroller system. + * + * Typically this function configures the oscillator (PLL) that is part of the + * microcontroller device. For systems with variable clock speed it also updates + * the variable SystemCoreClock. SystemInit is called from startup_device file. + */ +void SystemInit (void); + +/** + * @brief Updates the SystemCoreClock variable. + * + * It must be called whenever the core clock is changed during program + * execution. SystemCoreClockUpdate() evaluates the clock register settings and calculates + * the current core clock. + */ +void SystemCoreClockUpdate (void); + +#ifdef __cplusplus +} +#endif + +#endif /* _SYSTEM_MKL82Z7_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_adc16.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_adc16.c new file mode 100644 index 00000000000..4fee1a8503d --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_adc16.c @@ -0,0 +1,364 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_adc16.h" + +/******************************************************************************* + * Prototypes + ******************************************************************************/ +/*! + * @brief Get instance number for ADC16 module. + * + * @param base ADC16 peripheral base address + */ +static uint32_t ADC16_GetInstance(ADC_Type *base); + +/******************************************************************************* + * Variables + ******************************************************************************/ +/*! @brief Pointers to ADC16 bases for each instance. */ +static ADC_Type *const s_adc16Bases[] = ADC_BASE_PTRS; + +/*! @brief Pointers to ADC16 clocks for each instance. */ +static const clock_ip_name_t s_adc16Clocks[] = ADC16_CLOCKS; + +/******************************************************************************* + * Code + ******************************************************************************/ +static uint32_t ADC16_GetInstance(ADC_Type *base) +{ + uint32_t instance; + + /* Find the instance index from base address mappings. */ + for (instance = 0; instance < FSL_FEATURE_SOC_ADC16_COUNT; instance++) + { + if (s_adc16Bases[instance] == base) + { + break; + } + } + + assert(instance < FSL_FEATURE_SOC_ADC16_COUNT); + + return instance; +} + +void ADC16_Init(ADC_Type *base, const adc16_config_t *config) +{ + assert(NULL != config); + + uint32_t tmp32; + + /* Enable the clock. */ + CLOCK_EnableClock(s_adc16Clocks[ADC16_GetInstance(base)]); + + /* ADCx_CFG1. */ + tmp32 = ADC_CFG1_ADICLK(config->clockSource) | ADC_CFG1_MODE(config->resolution); + if (kADC16_LongSampleDisabled != config->longSampleMode) + { + tmp32 |= ADC_CFG1_ADLSMP_MASK; + } + tmp32 |= ADC_CFG1_ADIV(config->clockDivider); + if (config->enableLowPower) + { + tmp32 |= ADC_CFG1_ADLPC_MASK; + } + base->CFG1 = tmp32; + + /* ADCx_CFG2. */ + tmp32 = base->CFG2 & ~(ADC_CFG2_ADACKEN_MASK | ADC_CFG2_ADHSC_MASK | ADC_CFG2_ADLSTS_MASK); + if (kADC16_LongSampleDisabled != config->longSampleMode) + { + tmp32 |= ADC_CFG2_ADLSTS(config->longSampleMode); + } + if (config->enableHighSpeed) + { + tmp32 |= ADC_CFG2_ADHSC_MASK; + } + if (config->enableAsynchronousClock) + { + tmp32 |= ADC_CFG2_ADACKEN_MASK; + } + base->CFG2 = tmp32; + + /* ADCx_SC2. */ + tmp32 = base->SC2 & ~(ADC_SC2_REFSEL_MASK); + tmp32 |= ADC_SC2_REFSEL(config->referenceVoltageSource); + base->SC2 = tmp32; + + /* ADCx_SC3. */ + if (config->enableContinuousConversion) + { + base->SC3 |= ADC_SC3_ADCO_MASK; + } + else + { + base->SC3 &= ~ADC_SC3_ADCO_MASK; + } +} + +void ADC16_Deinit(ADC_Type *base) +{ + /* Disable the clock. */ + CLOCK_DisableClock(s_adc16Clocks[ADC16_GetInstance(base)]); +} + +void ADC16_GetDefaultConfig(adc16_config_t *config) +{ + assert(NULL != config); + + config->referenceVoltageSource = kADC16_ReferenceVoltageSourceVref; + config->clockSource = kADC16_ClockSourceAsynchronousClock; + config->enableAsynchronousClock = true; + config->clockDivider = kADC16_ClockDivider8; + config->resolution = kADC16_ResolutionSE12Bit; + config->longSampleMode = kADC16_LongSampleDisabled; + config->enableHighSpeed = false; + config->enableLowPower = false; + config->enableContinuousConversion = false; +} + +#if defined(FSL_FEATURE_ADC16_HAS_CALIBRATION) && FSL_FEATURE_ADC16_HAS_CALIBRATION +status_t ADC16_DoAutoCalibration(ADC_Type *base) +{ + bool bHWTrigger = false; + volatile uint32_t tmp32; /* 'volatile' here is for the dummy read of ADCx_R[0] register. */ + status_t status = kStatus_Success; + + /* The calibration would be failed when in hardwar mode. + * Remember the hardware trigger state here and restore it later if the hardware trigger is enabled.*/ + if (0U != (ADC_SC2_ADTRG_MASK & base->SC2)) + { + bHWTrigger = true; + base->SC2 &= ~ADC_SC2_ADTRG_MASK; + } + + /* Clear the CALF and launch the calibration. */ + base->SC3 |= ADC_SC3_CAL_MASK | ADC_SC3_CALF_MASK; + while (0U == (kADC16_ChannelConversionDoneFlag & ADC16_GetChannelStatusFlags(base, 0U))) + { + /* Check the CALF when the calibration is active. */ + if (0U != (kADC16_CalibrationFailedFlag & ADC16_GetStatusFlags(base))) + { + status = kStatus_Fail; + break; + } + } + tmp32 = base->R[0]; /* Dummy read to clear COCO caused by calibration. */ + + /* Restore the hardware trigger setting if it was enabled before. */ + if (bHWTrigger) + { + base->SC2 |= ADC_SC2_ADTRG_MASK; + } + /* Check the CALF at the end of calibration. */ + if (0U != (kADC16_CalibrationFailedFlag & ADC16_GetStatusFlags(base))) + { + status = kStatus_Fail; + } + if (kStatus_Success != status) /* Check if the calibration process is succeed. */ + { + return status; + } + + /* Calculate the calibration values. */ + tmp32 = base->CLP0 + base->CLP1 + base->CLP2 + base->CLP3 + base->CLP4 + base->CLPS; + tmp32 = 0x8000U | (tmp32 >> 1U); + base->PG = tmp32; + +#if defined(FSL_FEATURE_ADC16_HAS_DIFF_MODE) && FSL_FEATURE_ADC16_HAS_DIFF_MODE + tmp32 = base->CLM0 + base->CLM1 + base->CLM2 + base->CLM3 + base->CLM4 + base->CLMS; + tmp32 = 0x8000U | (tmp32 >> 1U); + base->MG = tmp32; +#endif /* FSL_FEATURE_ADC16_HAS_DIFF_MODE */ + + return kStatus_Success; +} +#endif /* FSL_FEATURE_ADC16_HAS_CALIBRATION */ + +#if defined(FSL_FEATURE_ADC16_HAS_MUX_SELECT) && FSL_FEATURE_ADC16_HAS_MUX_SELECT +void ADC16_SetChannelMuxMode(ADC_Type *base, adc16_channel_mux_mode_t mode) +{ + if (kADC16_ChannelMuxA == mode) + { + base->CFG2 &= ~ADC_CFG2_MUXSEL_MASK; + } + else /* kADC16_ChannelMuxB. */ + { + base->CFG2 |= ADC_CFG2_MUXSEL_MASK; + } +} +#endif /* FSL_FEATURE_ADC16_HAS_MUX_SELECT */ + +void ADC16_SetHardwareCompareConfig(ADC_Type *base, const adc16_hardware_compare_config_t *config) +{ + uint32_t tmp32 = base->SC2 & ~(ADC_SC2_ACFE_MASK | ADC_SC2_ACFGT_MASK | ADC_SC2_ACREN_MASK); + + if (!config) /* Pass "NULL" to disable the feature. */ + { + base->SC2 = tmp32; + return; + } + /* Enable the feature. */ + tmp32 |= ADC_SC2_ACFE_MASK; + + /* Select the hardware compare working mode. */ + switch (config->hardwareCompareMode) + { + case kADC16_HardwareCompareMode0: + break; + case kADC16_HardwareCompareMode1: + tmp32 |= ADC_SC2_ACFGT_MASK; + break; + case kADC16_HardwareCompareMode2: + tmp32 |= ADC_SC2_ACREN_MASK; + break; + case kADC16_HardwareCompareMode3: + tmp32 |= ADC_SC2_ACFGT_MASK | ADC_SC2_ACREN_MASK; + break; + default: + break; + } + base->SC2 = tmp32; + + /* Load the compare values. */ + base->CV1 = ADC_CV1_CV(config->value1); + base->CV2 = ADC_CV2_CV(config->value2); +} + +#if defined(FSL_FEATURE_ADC16_HAS_HW_AVERAGE) && FSL_FEATURE_ADC16_HAS_HW_AVERAGE +void ADC16_SetHardwareAverage(ADC_Type *base, adc16_hardware_average_mode_t mode) +{ + uint32_t tmp32 = base->SC3 & ~(ADC_SC3_AVGE_MASK | ADC_SC3_AVGS_MASK); + + if (kADC16_HardwareAverageDisabled != mode) + { + tmp32 |= ADC_SC3_AVGE_MASK | ADC_SC3_AVGS(mode); + } + base->SC3 = tmp32; +} +#endif /* FSL_FEATURE_ADC16_HAS_HW_AVERAGE */ + +#if defined(FSL_FEATURE_ADC16_HAS_PGA) && FSL_FEATURE_ADC16_HAS_PGA +void ADC16_SetPGAConfig(ADC_Type *base, const adc16_pga_config_t *config) +{ + uint32_t tmp32; + + if (!config) /* Passing "NULL" is to disable the feature. */ + { + base->PGA = 0U; + return; + } + + /* Enable the PGA and set the gain value. */ + tmp32 = ADC_PGA_PGAEN_MASK | ADC_PGA_PGAG(config->pgaGain); + + /* Configure the misc features for PGA. */ + if (config->enableRunInNormalMode) + { + tmp32 |= ADC_PGA_PGALPb_MASK; + } +#if defined(FSL_FEATURE_ADC16_HAS_PGA_CHOPPING) && FSL_FEATURE_ADC16_HAS_PGA_CHOPPING + if (config->disablePgaChopping) + { + tmp32 |= ADC_PGA_PGACHPb_MASK; + } +#endif /* FSL_FEATURE_ADC16_HAS_PGA_CHOPPING */ +#if defined(FSL_FEATURE_ADC16_HAS_PGA_OFFSET_MEASUREMENT) && FSL_FEATURE_ADC16_HAS_PGA_OFFSET_MEASUREMENT + if (config->enableRunInOffsetMeasurement) + { + tmp32 |= ADC_PGA_PGAOFSM_MASK; + } +#endif /* FSL_FEATURE_ADC16_HAS_PGA_OFFSET_MEASUREMENT */ + base->PGA = tmp32; +} +#endif /* FSL_FEATURE_ADC16_HAS_PGA */ + +uint32_t ADC16_GetStatusFlags(ADC_Type *base) +{ + uint32_t ret = 0; + + if (0U != (base->SC2 & ADC_SC2_ADACT_MASK)) + { + ret |= kADC16_ActiveFlag; + } +#if defined(FSL_FEATURE_ADC16_HAS_CALIBRATION) && FSL_FEATURE_ADC16_HAS_CALIBRATION + if (0U != (base->SC3 & ADC_SC3_CALF_MASK)) + { + ret |= kADC16_CalibrationFailedFlag; + } +#endif /* FSL_FEATURE_ADC16_HAS_CALIBRATION */ + return ret; +} + +void ADC16_ClearStatusFlags(ADC_Type *base, uint32_t mask) +{ +#if defined(FSL_FEATURE_ADC16_HAS_CALIBRATION) && FSL_FEATURE_ADC16_HAS_CALIBRATION + if (0U != (mask & kADC16_CalibrationFailedFlag)) + { + base->SC3 |= ADC_SC3_CALF_MASK; + } +#endif /* FSL_FEATURE_ADC16_HAS_CALIBRATION */ +} + +void ADC16_SetChannelConfig(ADC_Type *base, uint32_t channelGroup, const adc16_channel_config_t *config) +{ + assert(channelGroup < ADC_SC1_COUNT); + assert(NULL != config); + + uint32_t sc1 = ADC_SC1_ADCH(config->channelNumber); /* Set the channel number. */ + +#if defined(FSL_FEATURE_ADC16_HAS_DIFF_MODE) && FSL_FEATURE_ADC16_HAS_DIFF_MODE + /* Enable the differential conversion. */ + if (config->enableDifferentialConversion) + { + sc1 |= ADC_SC1_DIFF_MASK; + } +#endif /* FSL_FEATURE_ADC16_HAS_DIFF_MODE */ + /* Enable the interrupt when the conversion is done. */ + if (config->enableInterruptOnConversionCompleted) + { + sc1 |= ADC_SC1_AIEN_MASK; + } + base->SC1[channelGroup] = sc1; +} + +uint32_t ADC16_GetChannelStatusFlags(ADC_Type *base, uint32_t channelGroup) +{ + assert(channelGroup < ADC_SC1_COUNT); + + uint32_t ret = 0U; + + if (0U != (base->SC1[channelGroup] & ADC_SC1_COCO_MASK)) + { + ret |= kADC16_ChannelConversionDoneFlag; + } + return ret; +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_adc16.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_adc16.h new file mode 100644 index 00000000000..7f5169a33ba --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_adc16.h @@ -0,0 +1,526 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _FSL_ADC16_H_ +#define _FSL_ADC16_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup adc16 + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief ADC16 driver version 2.0.0. */ +#define FSL_ADC16_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) +/*@}*/ + +/*! + * @brief Channel status flags. + */ +enum _adc16_channel_status_flags +{ + kADC16_ChannelConversionDoneFlag = ADC_SC1_COCO_MASK, /*!< Conversion done. */ +}; + +/*! + * @brief Converter status flags. + */ +enum _adc16_status_flags +{ + kADC16_ActiveFlag = ADC_SC2_ADACT_MASK, /*!< Converter is active. */ +#if defined(FSL_FEATURE_ADC16_HAS_CALIBRATION) && FSL_FEATURE_ADC16_HAS_CALIBRATION + kADC16_CalibrationFailedFlag = ADC_SC3_CALF_MASK, /*!< Calibration is failed. */ +#endif /* FSL_FEATURE_ADC16_HAS_CALIBRATION */ +}; + +#if defined(FSL_FEATURE_ADC16_HAS_MUX_SELECT) && FSL_FEATURE_ADC16_HAS_MUX_SELECT +/*! + * @brief Channel multiplexer mode for each channel. + * + * For some ADC16 channels, there are two pin selections in channel multiplexer. For example, ADC0_SE4a and ADC0_SE4b + * are the different channels but share the same channel number. + */ +typedef enum _adc_channel_mux_mode +{ + kADC16_ChannelMuxA = 0U, /*!< For channel with channel mux a. */ + kADC16_ChannelMuxB = 1U, /*!< For channel with channel mux b. */ +} adc16_channel_mux_mode_t; +#endif /* FSL_FEATURE_ADC16_HAS_MUX_SELECT */ + +/*! + * @brief Clock divider for the converter. + */ +typedef enum _adc16_clock_divider +{ + kADC16_ClockDivider1 = 0U, /*!< For divider 1 from the input clock to the module. */ + kADC16_ClockDivider2 = 1U, /*!< For divider 2 from the input clock to the module. */ + kADC16_ClockDivider4 = 2U, /*!< For divider 4 from the input clock to the module. */ + kADC16_ClockDivider8 = 3U, /*!< For divider 8 from the input clock to the module. */ +} adc16_clock_divider_t; + +/*! + *@brief Converter's resolution. + */ +typedef enum _adc16_resolution +{ + /* This group of enumeration is for internal use which is related to register setting. */ + kADC16_Resolution8or9Bit = 0U, /*!< Single End 8-bit or Differential Sample 9-bit. */ + kADC16_Resolution12or13Bit = 1U, /*!< Single End 12-bit or Differential Sample 13-bit. */ + kADC16_Resolution10or11Bit = 2U, /*!< Single End 10-bit or Differential Sample 11-bit. */ + + /* This group of enumeration is for public user. */ + kADC16_ResolutionSE8Bit = kADC16_Resolution8or9Bit, /*!< Single End 8-bit. */ + kADC16_ResolutionSE12Bit = kADC16_Resolution12or13Bit, /*!< Single End 12-bit. */ + kADC16_ResolutionSE10Bit = kADC16_Resolution10or11Bit, /*!< Single End 10-bit. */ +#if defined(FSL_FEATURE_ADC16_HAS_DIFF_MODE) && FSL_FEATURE_ADC16_HAS_DIFF_MODE + kADC16_ResolutionDF9Bit = kADC16_Resolution8or9Bit, /*!< Differential Sample 9-bit. */ + kADC16_ResolutionDF13Bit = kADC16_Resolution12or13Bit, /*!< Differential Sample 13-bit. */ + kADC16_ResolutionDF11Bit = kADC16_Resolution10or11Bit, /*!< Differential Sample 11-bit. */ +#endif /* FSL_FEATURE_ADC16_HAS_DIFF_MODE */ + +#if defined(FSL_FEATURE_ADC16_MAX_RESOLUTION) && (FSL_FEATURE_ADC16_MAX_RESOLUTION >= 16U) + /* 16-bit is supported by default. */ + kADC16_Resolution16Bit = 3U, /*!< Single End 16-bit or Differential Sample 16-bit. */ + kADC16_ResolutionSE16Bit = kADC16_Resolution16Bit, /*!< Single End 16-bit. */ +#if defined(FSL_FEATURE_ADC16_HAS_DIFF_MODE) && FSL_FEATURE_ADC16_HAS_DIFF_MODE + kADC16_ResolutionDF16Bit = kADC16_Resolution16Bit, /*!< Differential Sample 16-bit. */ +#endif /* FSL_FEATURE_ADC16_HAS_DIFF_MODE */ +#endif /* FSL_FEATURE_ADC16_MAX_RESOLUTION >= 16U */ +} adc16_resolution_t; + +/*! + * @brief Clock source. + */ +typedef enum _adc16_clock_source +{ + kADC16_ClockSourceAlt0 = 0U, /*!< Selection 0 of the clock source. */ + kADC16_ClockSourceAlt1 = 1U, /*!< Selection 1 of the clock source. */ + kADC16_ClockSourceAlt2 = 2U, /*!< Selection 2 of the clock source. */ + kADC16_ClockSourceAlt3 = 3U, /*!< Selection 3 of the clock source. */ + + /* Chip defined clock source */ + kADC16_ClockSourceAsynchronousClock = kADC16_ClockSourceAlt3, /*!< Using internal asynchronous clock. */ +} adc16_clock_source_t; + +/*! + * @brief Long sample mode. + */ +typedef enum _adc16_long_sample_mode +{ + kADC16_LongSampleCycle24 = 0U, /*!< 20 extra ADCK cycles, 24 ADCK cycles total. */ + kADC16_LongSampleCycle16 = 1U, /*!< 12 extra ADCK cycles, 16 ADCK cycles total. */ + kADC16_LongSampleCycle10 = 2U, /*!< 6 extra ADCK cycles, 10 ADCK cycles total. */ + kADC16_LongSampleCycle6 = 3U, /*!< 2 extra ADCK cycles, 6 ADCK cycles total. */ + kADC16_LongSampleDisabled = 4U, /*!< Disable the long sample feature. */ +} adc16_long_sample_mode_t; + +/*! + * @brief Reference voltage source. + */ +typedef enum _adc16_reference_voltage_source +{ + kADC16_ReferenceVoltageSourceVref = 0U, /*!< For external pins pair of VrefH and VrefL. */ + kADC16_ReferenceVoltageSourceValt = 1U, /*!< For alternate reference pair of ValtH and ValtL. */ +} adc16_reference_voltage_source_t; + +#if defined(FSL_FEATURE_ADC16_HAS_HW_AVERAGE) && FSL_FEATURE_ADC16_HAS_HW_AVERAGE +/*! + * @brief Hardware average mode. + */ +typedef enum _adc16_hardware_average_mode +{ + kADC16_HardwareAverageCount4 = 0U, /*!< For hardware average with 4 samples. */ + kADC16_HardwareAverageCount8 = 1U, /*!< For hardware average with 8 samples. */ + kADC16_HardwareAverageCount16 = 2U, /*!< For hardware average with 16 samples. */ + kADC16_HardwareAverageCount32 = 3U, /*!< For hardware average with 32 samples. */ + kADC16_HardwareAverageDisabled = 4U, /*!< Disable the hardware average feature.*/ +} adc16_hardware_average_mode_t; +#endif /* FSL_FEATURE_ADC16_HAS_HW_AVERAGE */ + +/*! + * @brief Hardware compare mode. + */ +typedef enum _adc16_hardware_compare_mode +{ + kADC16_HardwareCompareMode0 = 0U, /*!< x < value1. */ + kADC16_HardwareCompareMode1 = 1U, /*!< x > value1. */ + kADC16_HardwareCompareMode2 = 2U, /*!< if value1 <= value2, then x < value1 || x > value2; + else, value1 > x > value2. */ + kADC16_HardwareCompareMode3 = 3U, /*!< if value1 <= value2, then value1 <= x <= value2; + else x >= value1 || x <= value2. */ +} adc16_hardware_compare_mode_t; + +#if defined(FSL_FEATURE_ADC16_HAS_PGA) && FSL_FEATURE_ADC16_HAS_PGA +/*! + * @brief PGA's Gain mode. + */ +typedef enum _adc16_pga_gain +{ + kADC16_PGAGainValueOf1 = 0U, /*!< For amplifier gain of 1. */ + kADC16_PGAGainValueOf2 = 1U, /*!< For amplifier gain of 2. */ + kADC16_PGAGainValueOf4 = 2U, /*!< For amplifier gain of 4. */ + kADC16_PGAGainValueOf8 = 3U, /*!< For amplifier gain of 8. */ + kADC16_PGAGainValueOf16 = 4U, /*!< For amplifier gain of 16. */ + kADC16_PGAGainValueOf32 = 5U, /*!< For amplifier gain of 32. */ + kADC16_PGAGainValueOf64 = 6U, /*!< For amplifier gain of 64. */ +} adc16_pga_gain_t; +#endif /* FSL_FEATURE_ADC16_HAS_PGA */ + +/*! + * @brief ADC16 converter configuration . + */ +typedef struct _adc16_config +{ + adc16_reference_voltage_source_t referenceVoltageSource; /*!< Select the reference voltage source. */ + adc16_clock_source_t clockSource; /*!< Select the input clock source to converter. */ + bool enableAsynchronousClock; /*!< Enable the asynchronous clock output. */ + adc16_clock_divider_t clockDivider; /*!< Select the divider of input clock source. */ + adc16_resolution_t resolution; /*!< Select the sample resolution mode. */ + adc16_long_sample_mode_t longSampleMode; /*!< Select the long sample mode. */ + bool enableHighSpeed; /*!< Enable the high-speed mode. */ + bool enableLowPower; /*!< Enable low power. */ + bool enableContinuousConversion; /*!< Enable continuous conversion mode. */ +} adc16_config_t; + +/*! + * @brief ADC16 Hardware compare configuration. + */ +typedef struct _adc16_hardware_compare_config +{ + adc16_hardware_compare_mode_t hardwareCompareMode; /*!< Select the hardware compare mode. + See "adc16_hardware_compare_mode_t". */ + int16_t value1; /*!< Setting value1 for hardware compare mode. */ + int16_t value2; /*!< Setting value2 for hardware compare mode. */ +} adc16_hardware_compare_config_t; + +/*! + * @brief ADC16 channel conversion configuration. + */ +typedef struct _adc16_channel_config +{ + uint32_t channelNumber; /*!< Setting the conversion channel number. The available range is 0-31. + See channel connection information for each chip in Reference + Manual document. */ + bool enableInterruptOnConversionCompleted; /*!< Generate an interrupt request once the conversion is completed. */ +#if defined(FSL_FEATURE_ADC16_HAS_DIFF_MODE) && FSL_FEATURE_ADC16_HAS_DIFF_MODE + bool enableDifferentialConversion; /*!< Using Differential sample mode. */ +#endif /* FSL_FEATURE_ADC16_HAS_DIFF_MODE */ +} adc16_channel_config_t; + +#if defined(FSL_FEATURE_ADC16_HAS_PGA) && FSL_FEATURE_ADC16_HAS_PGA +/*! + * @brief ADC16 programmable gain amplifier configuration. + */ +typedef struct _adc16_pga_config +{ + adc16_pga_gain_t pgaGain; /*!< Setting PGA gain. */ + bool enableRunInNormalMode; /*!< Enable PGA working in normal mode, or low power mode by default. */ +#if defined(FSL_FEATURE_ADC16_HAS_PGA_CHOPPING) && FSL_FEATURE_ADC16_HAS_PGA_CHOPPING + bool disablePgaChopping; /*!< Disable the PGA chopping function. + The PGA employs chopping to remove/reduce offset and 1/f noise and offers + an offset measurement configuration that aids the offset calibration. */ +#endif /* FSL_FEATURE_ADC16_HAS_PGA_CHOPPING */ +#if defined(FSL_FEATURE_ADC16_HAS_PGA_OFFSET_MEASUREMENT) && FSL_FEATURE_ADC16_HAS_PGA_OFFSET_MEASUREMENT + bool enableRunInOffsetMeasurement; /*!< Enable the PGA working in offset measurement mode. + When this feature is enabled, the PGA disconnects itself from the external + inputs and auto-configures into offset measurement mode. With this field + set, run the ADC in the recommended settings and enable the maximum hardware + averaging to get the PGA offset number. The output is the + (PGA offset * (64+1)) for the given PGA setting. */ +#endif /* FSL_FEATURE_ADC16_HAS_PGA_OFFSET_MEASUREMENT */ +} adc16_pga_config_t; +#endif /* FSL_FEATURE_ADC16_HAS_PGA */ + +#if defined(__cplusplus) +extern "C" { +#endif + +/******************************************************************************* + * API + ******************************************************************************/ + +/*! + * @name Initialization + * @{ + */ + +/*! + * @brief Initializes the ADC16 module. + * + * @param base ADC16 peripheral base address. + * @param config Pointer to configuration structure. See "adc16_config_t". + */ +void ADC16_Init(ADC_Type *base, const adc16_config_t *config); + +/*! + * @brief De-initializes the ADC16 module. + * + * @param base ADC16 peripheral base address. + */ +void ADC16_Deinit(ADC_Type *base); + +/*! + * @brief Gets an available pre-defined settings for converter's configuration. + * + * This function initializes the converter configuration structure with an available settings. The default values are: + * @code + * config->referenceVoltageSource = kADC16_ReferenceVoltageSourceVref; + * config->clockSource = kADC16_ClockSourceAsynchronousClock; + * config->enableAsynchronousClock = true; + * config->clockDivider = kADC16_ClockDivider8; + * config->resolution = kADC16_ResolutionSE12Bit; + * config->longSampleMode = kADC16_LongSampleDisabled; + * config->enableHighSpeed = false; + * config->enableLowPower = false; + * config->enableContinuousConversion = false; + * @endcode + * @param config Pointer to configuration structure. + */ +void ADC16_GetDefaultConfig(adc16_config_t *config); + +#if defined(FSL_FEATURE_ADC16_HAS_CALIBRATION) && FSL_FEATURE_ADC16_HAS_CALIBRATION +/*! + * @brief Automates the hardware calibration. + * + * This auto calibration helps to adjust the plus/minus side gain automatically on the converter's working situation. + * Execute the calibration before using the converter. Note that the hardware trigger should be used + * during calibration. + * + * @param base ADC16 peripheral base address. + * + * @return Execution status. + * @retval kStatus_Success Calibration is done successfully. + * @retval kStatus_Fail Calibration is failed. + */ +status_t ADC16_DoAutoCalibration(ADC_Type *base); +#endif /* FSL_FEATURE_ADC16_HAS_CALIBRATION */ + +#if defined(FSL_FEATURE_ADC16_HAS_OFFSET_CORRECTION) && FSL_FEATURE_ADC16_HAS_OFFSET_CORRECTION +/*! + * @brief Sets the offset value for the conversion result. + * + * This offset value takes effect on the conversion result. If the offset value is not zero, the reading result + * is subtracted by it. Note, the hardware calibration fills the offset value automatically. + * + * @param base ADC16 peripheral base address. + * @param value Setting offset value. + */ +static inline void ADC16_SetOffsetValue(ADC_Type *base, int16_t value) +{ + base->OFS = (uint32_t)(value); +} +#endif /* FSL_FEATURE_ADC16_HAS_OFFSET_CORRECTION */ + +/* @} */ + +/*! + * @name Advanced Feature + * @{ + */ + +#if defined(FSL_FEATURE_ADC16_HAS_DMA) && FSL_FEATURE_ADC16_HAS_DMA +/*! + * @brief Enables generating the DMA trigger when conversion is completed. + * + * @param base ADC16 peripheral base address. + * @param enable Switcher of DMA feature. "true" means to enable, "false" means not. + */ +static inline void ADC16_EnableDMA(ADC_Type *base, bool enable) +{ + if (enable) + { + base->SC2 |= ADC_SC2_DMAEN_MASK; + } + else + { + base->SC2 &= ~ADC_SC2_DMAEN_MASK; + } +} +#endif /* FSL_FEATURE_ADC16_HAS_DMA */ + +/*! + * @brief Enables the hardware trigger mode. + * + * @param base ADC16 peripheral base address. + * @param enable Switcher of hardware trigger feature. "true" means to enable, "false" means not. + */ +static inline void ADC16_EnableHardwareTrigger(ADC_Type *base, bool enable) +{ + if (enable) + { + base->SC2 |= ADC_SC2_ADTRG_MASK; + } + else + { + base->SC2 &= ~ADC_SC2_ADTRG_MASK; + } +} + +#if defined(FSL_FEATURE_ADC16_HAS_MUX_SELECT) && FSL_FEATURE_ADC16_HAS_MUX_SELECT +/*! + * @brief Sets the channel mux mode. + * + * Some sample pins share the same channel index. The channel mux mode decides which pin is used for an + * indicated channel. + * + * @param base ADC16 peripheral base address. + * @param mode Setting channel mux mode. See "adc16_channel_mux_mode_t". + */ +void ADC16_SetChannelMuxMode(ADC_Type *base, adc16_channel_mux_mode_t mode); +#endif /* FSL_FEATURE_ADC16_HAS_MUX_SELECT */ + +/*! + * @brief Configures the hardware compare mode. + * + * The hardware compare mode provides a way to process the conversion result automatically by hardware. Only the result + * in + * compare range is available. To compare the range, see "adc16_hardware_compare_mode_t", or the reference + * manual document for more detailed information. + * + * @param base ADC16 peripheral base address. + * @param config Pointer to "adc16_hardware_compare_config_t" structure. Passing "NULL" is to disable the feature. + */ +void ADC16_SetHardwareCompareConfig(ADC_Type *base, const adc16_hardware_compare_config_t *config); + +#if defined(FSL_FEATURE_ADC16_HAS_HW_AVERAGE) && FSL_FEATURE_ADC16_HAS_HW_AVERAGE +/*! + * @brief Sets the hardware average mode. + * + * Hardware average mode provides a way to process the conversion result automatically by hardware. The multiple + * conversion results are accumulated and averaged internally. This aids reading results. + * + * @param base ADC16 peripheral base address. + * @param mode Setting hardware average mode. See "adc16_hardware_average_mode_t". + */ +void ADC16_SetHardwareAverage(ADC_Type *base, adc16_hardware_average_mode_t mode); +#endif /* FSL_FEATURE_ADC16_HAS_HW_AVERAGE */ + +#if defined(FSL_FEATURE_ADC16_HAS_PGA) && FSL_FEATURE_ADC16_HAS_PGA +/*! + * @brief Configures the PGA for converter's front end. + * + * @param base ADC16 peripheral base address. + * @param config Pointer to "adc16_pga_config_t" structure. Passing "NULL" is to disable the feature. + */ +void ADC16_SetPGAConfig(ADC_Type *base, const adc16_pga_config_t *config); +#endif /* FSL_FEATURE_ADC16_HAS_PGA */ + +/*! + * @brief Gets the status flags of the converter. + * + * @param base ADC16 peripheral base address. + * + * @return Flags' mask if indicated flags are asserted. See "_adc16_status_flags". + */ +uint32_t ADC16_GetStatusFlags(ADC_Type *base); + +/*! + * @brief Clears the status flags of the converter. + * + * @param base ADC16 peripheral base address. + * @param mask Mask value for the cleared flags. See "_adc16_status_flags". + */ +void ADC16_ClearStatusFlags(ADC_Type *base, uint32_t mask); + +/* @} */ + +/*! + * @name Conversion Channel + * @{ + */ + +/*! + * @brief Configures the conversion channel. + * + * This operation triggers the conversion if in software trigger mode. When in hardware trigger mode, this API + * configures the channel while the external trigger source helps to trigger the conversion. + * + * Note that the "Channel Group" has a detailed description. + * To allow sequential conversions of the ADC to be triggered by internal peripherals, the ADC can have more than one + * group of status and control register, one for each conversion. The channel group parameter indicates which group of + * registers are used channel group 0 is for Group A registers and channel group 1 is for Group B registers. The + * channel groups are used in a "ping-pong" approach to control the ADC operation. At any point, only one of + * the channel groups is actively controlling ADC conversions. Channel group 0 is used for both software and hardware + * trigger modes of operation. Channel groups 1 and greater indicate potentially multiple channel group registers for + * use only in hardware trigger mode. See the chip configuration information in the MCU reference manual about the + * number of SC1n registers (channel groups) specific to this device. None of the channel groups 1 or greater are used + * for software trigger operation and therefore writes to these channel groups do not initiate a new conversion. + * Updating channel group 0 while a different channel group is actively controlling a conversion is allowed and + * vice versa. Writing any of the channel group registers while that specific channel group is actively controlling a + * conversion aborts the current conversion. + * + * @param base ADC16 peripheral base address. + * @param channelGroup Channel group index. + * @param config Pointer to "adc16_channel_config_t" structure for conversion channel. + */ +void ADC16_SetChannelConfig(ADC_Type *base, uint32_t channelGroup, const adc16_channel_config_t *config); + +/*! + * @brief Gets the conversion value. + * + * @param base ADC16 peripheral base address. + * @param channelGroup Channel group index. + * + * @return Conversion value. + */ +static inline uint32_t ADC16_GetChannelConversionValue(ADC_Type *base, uint32_t channelGroup) +{ + assert(channelGroup < ADC_R_COUNT); + + return base->R[channelGroup]; +} + +/*! + * @brief Gets the status flags of channel. + * + * @param base ADC16 peripheral base address. + * @param channelGroup Channel group index. + * + * @return Flags' mask if indicated flags are asserted. See "_adc16_channel_status_flags". + */ +uint32_t ADC16_GetChannelStatusFlags(ADC_Type *base, uint32_t channelGroup); + +/* @} */ + +#if defined(__cplusplus) +} +#endif +/*! + * @} + */ +#endif /* _FSL_ADC16_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_clock.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_clock.c new file mode 100644 index 00000000000..6861c4db544 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_clock.c @@ -0,0 +1,1794 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_common.h" +#include "fsl_clock.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/* Macro definition remap workaround. */ +#if (defined(MCG_C2_EREFS_MASK) && !(defined(MCG_C2_EREFS0_MASK))) +#define MCG_C2_EREFS0_MASK MCG_C2_EREFS_MASK +#endif +#if (defined(MCG_C2_HGO_MASK) && !(defined(MCG_C2_HGO0_MASK))) +#define MCG_C2_HGO0_MASK MCG_C2_HGO_MASK +#endif +#if (defined(MCG_C2_RANGE_MASK) && !(defined(MCG_C2_RANGE0_MASK))) +#define MCG_C2_RANGE0_MASK MCG_C2_RANGE_MASK +#endif +#if (defined(MCG_C6_CME_MASK) && !(defined(MCG_C6_CME0_MASK))) +#define MCG_C6_CME0_MASK MCG_C6_CME_MASK +#endif + +/* PLL fixed multiplier when there is not PRDIV and VDIV. */ +#define PLL_FIXED_MULT (375U) +/* Max frequency of the reference clock used for internal clock trim. */ +#define TRIM_REF_CLK_MIN (8000000U) +/* Min frequency of the reference clock used for internal clock trim. */ +#define TRIM_REF_CLK_MAX (16000000U) +/* Max trim value of fast internal reference clock. */ +#define TRIM_FIRC_MAX (5000000U) +/* Min trim value of fast internal reference clock. */ +#define TRIM_FIRC_MIN (3000000U) +/* Max trim value of fast internal reference clock. */ +#define TRIM_SIRC_MAX (39063U) +/* Min trim value of fast internal reference clock. */ +#define TRIM_SIRC_MIN (31250U) + +#define MCG_S_IRCST_VAL ((MCG->S & MCG_S_IRCST_MASK) >> MCG_S_IRCST_SHIFT) +#define MCG_S_CLKST_VAL ((MCG->S & MCG_S_CLKST_MASK) >> MCG_S_CLKST_SHIFT) +#define MCG_S_IREFST_VAL ((MCG->S & MCG_S_IREFST_MASK) >> MCG_S_IREFST_SHIFT) +#define MCG_S_PLLST_VAL ((MCG->S & MCG_S_PLLST_MASK) >> MCG_S_PLLST_SHIFT) +#define MCG_C1_FRDIV_VAL ((MCG->C1 & MCG_C1_FRDIV_MASK) >> MCG_C1_FRDIV_SHIFT) +#define MCG_C2_LP_VAL ((MCG->C2 & MCG_C2_LP_MASK) >> MCG_C2_LP_SHIFT) +#define MCG_C2_RANGE_VAL ((MCG->C2 & MCG_C2_RANGE_MASK) >> MCG_C2_RANGE_SHIFT) +#define MCG_SC_FCRDIV_VAL ((MCG->SC & MCG_SC_FCRDIV_MASK) >> MCG_SC_FCRDIV_SHIFT) +#define MCG_S2_PLLCST_VAL ((MCG->S2 & MCG_S2_PLLCST_MASK) >> MCG_S2_PLLCST_SHIFT) +#define MCG_C7_OSCSEL_VAL ((MCG->C7 & MCG_C7_OSCSEL_MASK) >> MCG_C7_OSCSEL_SHIFT) +#define MCG_C4_DMX32_VAL ((MCG->C4 & MCG_C4_DMX32_MASK) >> MCG_C4_DMX32_SHIFT) +#define MCG_C4_DRST_DRS_VAL ((MCG->C4 & MCG_C4_DRST_DRS_MASK) >> MCG_C4_DRST_DRS_SHIFT) +#define MCG_C7_PLL32KREFSEL_VAL ((MCG->C7 & MCG_C7_PLL32KREFSEL_MASK) >> MCG_C7_PLL32KREFSEL_SHIFT) +#define MCG_C5_PLLREFSEL0_VAL ((MCG->C5 & MCG_C5_PLLREFSEL0_MASK) >> MCG_C5_PLLREFSEL0_SHIFT) +#define MCG_C11_PLLREFSEL1_VAL ((MCG->C11 & MCG_C11_PLLREFSEL1_MASK) >> MCG_C11_PLLREFSEL1_SHIFT) +#define MCG_C11_PRDIV1_VAL ((MCG->C11 & MCG_C11_PRDIV1_MASK) >> MCG_C11_PRDIV1_SHIFT) +#define MCG_C12_VDIV1_VAL ((MCG->C12 & MCG_C12_VDIV1_MASK) >> MCG_C12_VDIV1_SHIFT) +#define MCG_C5_PRDIV0_VAL ((MCG->C5 & MCG_C5_PRDIV0_MASK) >> MCG_C5_PRDIV0_SHIFT) +#define MCG_C6_VDIV0_VAL ((MCG->C6 & MCG_C6_VDIV0_MASK) >> MCG_C6_VDIV0_SHIFT) + +#define OSC_MODE_MASK (MCG_C2_EREFS0_MASK | MCG_C2_HGO0_MASK | MCG_C2_RANGE0_MASK) + +#define SIM_CLKDIV1_OUTDIV1_VAL ((SIM->CLKDIV1 & SIM_CLKDIV1_OUTDIV1_MASK) >> SIM_CLKDIV1_OUTDIV1_SHIFT) +#define SIM_CLKDIV1_OUTDIV2_VAL ((SIM->CLKDIV1 & SIM_CLKDIV1_OUTDIV2_MASK) >> SIM_CLKDIV1_OUTDIV2_SHIFT) +#define SIM_CLKDIV1_OUTDIV4_VAL ((SIM->CLKDIV1 & SIM_CLKDIV1_OUTDIV4_MASK) >> SIM_CLKDIV1_OUTDIV4_SHIFT) +#define SIM_CLKDIV1_OUTDIV5_VAL ((SIM->CLKDIV1 & SIM_CLKDIV1_OUTDIV5_MASK) >> SIM_CLKDIV1_OUTDIV5_SHIFT) +#define SIM_SOPT1_OSC32KSEL_VAL ((SIM->SOPT1 & SIM_SOPT1_OSC32KSEL_MASK) >> SIM_SOPT1_OSC32KSEL_SHIFT) +#define SIM_SOPT2_PLLFLLSEL_VAL ((SIM->SOPT2 & SIM_SOPT2_PLLFLLSEL_MASK) >> SIM_SOPT2_PLLFLLSEL_SHIFT) +#define SIM_CLKDIV3_PLLFLLDIV_VAL ((SIM->CLKDIV3 & SIM_CLKDIV3_PLLFLLDIV_MASK) >> SIM_CLKDIV3_PLLFLLDIV_SHIFT) +#define SIM_CLKDIV3_PLLFLLFRAC_VAL ((SIM->CLKDIV3 & SIM_CLKDIV3_PLLFLLFRAC_MASK) >> SIM_CLKDIV3_PLLFLLFRAC_SHIFT) + +/* MCG_S_CLKST definition. */ +enum _mcg_clkout_stat +{ + kMCG_ClkOutStatFll, /* FLL. */ + kMCG_ClkOutStatInt, /* Internal clock. */ + kMCG_ClkOutStatExt, /* External clock. */ + kMCG_ClkOutStatPll /* PLL. */ +}; + +/* MCG_S_PLLST definition. */ +enum _mcg_pllst +{ + kMCG_PllstFll, /* FLL is used. */ + kMCG_PllstPll /* PLL is used. */ +}; + +/******************************************************************************* + * Variables + ******************************************************************************/ + +/* Slow internal reference clock frequency. */ +static uint32_t s_slowIrcFreq = 32768U; +/* Fast internal reference clock frequency. */ +static uint32_t s_fastIrcFreq = 4000000U; + +/* External XTAL0 (OSC0) clock frequency. */ +uint32_t g_xtal0Freq; +/* External XTAL32K clock frequency. */ +uint32_t g_xtal32Freq; + +/******************************************************************************* + * Prototypes + ******************************************************************************/ + +/*! + * @brief Get the MCG external reference clock frequency. + * + * Get the current MCG external reference clock frequency in Hz. It is + * the frequency select by MCG_C7[OSCSEL]. This is an internal function. + * + * @return MCG external reference clock frequency in Hz. + */ +static uint32_t CLOCK_GetMcgExtClkFreq(void); + +/*! + * @brief Get the MCG FLL external reference clock frequency. + * + * Get the current MCG FLL external reference clock frequency in Hz. It is + * the frequency after by MCG_C1[FRDIV]. This is an internal function. + * + * @return MCG FLL external reference clock frequency in Hz. + */ +static uint32_t CLOCK_GetFllExtRefClkFreq(void); + +/*! + * @brief Get the MCG FLL reference clock frequency. + * + * Get the current MCG FLL reference clock frequency in Hz. It is + * the frequency select by MCG_C1[IREFS]. This is an internal function. + * + * @return MCG FLL reference clock frequency in Hz. + */ +static uint32_t CLOCK_GetFllRefClkFreq(void); + +/*! + * @brief Get the frequency of clock selected by MCG_C2[IRCS]. + * + * This clock's two output: + * 1. MCGOUTCLK when MCG_S[CLKST]=0. + * 2. MCGIRCLK when MCG_C1[IRCLKEN]=1. + * + * @return The frequency in Hz. + */ +static uint32_t CLOCK_GetInternalRefClkSelectFreq(void); + +/*! + * @brief Get the MCG PLL/PLL0 reference clock frequency. + * + * Get the current MCG PLL/PLL0 reference clock frequency in Hz. + * This is an internal function. + * + * @return MCG PLL/PLL0 reference clock frequency in Hz. + */ +static uint32_t CLOCK_GetPll0RefFreq(void); + +/*! + * @brief Calculate the RANGE value base on crystal frequency. + * + * To setup external crystal oscillator, must set the register bits RANGE + * base on the crystal frequency. This function returns the RANGE base on the + * input frequency. This is an internal function. + * + * @param freq Crystal frequency in Hz. + * @return The RANGE value. + */ +static uint8_t CLOCK_GetOscRangeFromFreq(uint32_t freq); + +/*! + * @brief Delay function to wait FLL stable. + * + * Delay function to wait FLL stable in FEI mode or FEE mode, should wait at least + * 1ms. Every time changes FLL setting, should wait this time for FLL stable. + */ +static void CLOCK_FllStableDelay(void); + +/******************************************************************************* + * Code + ******************************************************************************/ + +static uint32_t CLOCK_GetMcgExtClkFreq(void) +{ + uint32_t freq; + + switch (MCG_C7_OSCSEL_VAL) + { + case 0U: + /* Please call CLOCK_SetXtal0Freq base on board setting before using OSC0 clock. */ + assert(g_xtal0Freq); + freq = g_xtal0Freq; + break; + case 1U: + /* Please call CLOCK_SetXtal32Freq base on board setting before using XTAL32K/RTC_CLKIN clock. */ + assert(g_xtal32Freq); + freq = g_xtal32Freq; + break; + case 2U: + freq = MCG_INTERNAL_IRC_48M; + break; + default: + freq = 0U; + break; + } + + return freq; +} + +static uint32_t CLOCK_GetFllExtRefClkFreq(void) +{ + /* FllExtRef = McgExtRef / FllExtRefDiv */ + uint8_t frdiv; + uint8_t range; + uint8_t oscsel; + + uint32_t freq = CLOCK_GetMcgExtClkFreq(); + + if (!freq) + { + return freq; + } + + frdiv = MCG_C1_FRDIV_VAL; + freq >>= frdiv; + + range = MCG_C2_RANGE_VAL; + oscsel = MCG_C7_OSCSEL_VAL; + + /* + When should use divider 32, 64, 128, 256, 512, 1024, 1280, 1536. + 1. MCG_C7[OSCSEL] selects IRC48M. + 2. MCG_C7[OSCSEL] selects OSC0 and MCG_C2[RANGE] is not 0. + */ + if (((0U != range) && (kMCG_OscselOsc == oscsel)) || (kMCG_OscselIrc == oscsel)) + { + switch (frdiv) + { + case 0: + case 1: + case 2: + case 3: + case 4: + case 5: + freq >>= 5u; + break; + case 6: + /* 64*20=1280 */ + freq /= 20u; + break; + case 7: + /* 128*12=1536 */ + freq /= 12u; + break; + default: + freq = 0u; + break; + } + } + + return freq; +} + +static uint32_t CLOCK_GetInternalRefClkSelectFreq(void) +{ + if (kMCG_IrcSlow == MCG_S_IRCST_VAL) + { + /* Slow internal reference clock selected*/ + return s_slowIrcFreq; + } + else + { + /* Fast internal reference clock selected*/ + return s_fastIrcFreq >> MCG_SC_FCRDIV_VAL; + } +} + +static uint32_t CLOCK_GetFllRefClkFreq(void) +{ + /* If use external reference clock. */ + if (kMCG_FllSrcExternal == MCG_S_IREFST_VAL) + { + return CLOCK_GetFllExtRefClkFreq(); + } + /* If use internal reference clock. */ + else + { + return s_slowIrcFreq; + } +} + +static uint32_t CLOCK_GetPll0RefFreq(void) +{ + /* MCG external reference clock. */ + return CLOCK_GetMcgExtClkFreq(); +} + +static uint8_t CLOCK_GetOscRangeFromFreq(uint32_t freq) +{ + uint8_t range; + + if (freq <= 39063U) + { + range = 0U; + } + else if (freq <= 8000000U) + { + range = 1U; + } + else + { + range = 2U; + } + + return range; +} + +static void CLOCK_FllStableDelay(void) +{ + /* + Should wait at least 1ms. Because in these modes, the core clock is 100MHz + at most, so this function could obtain the 1ms delay. + */ + volatile uint32_t i = 30000U; + while (i--) + { + __NOP(); + } +} + +uint32_t CLOCK_GetOsc0ErClkUndivFreq(void) +{ + if (OSC0->CR & OSC_CR_ERCLKEN_MASK) + { + /* Please call CLOCK_SetXtal0Freq base on board setting before using OSC0 clock. */ + assert(g_xtal0Freq); + return g_xtal0Freq; + } + else + { + return 0U; + } +} + +uint32_t CLOCK_GetOsc0ErClkDivFreq(void) +{ + if (OSC0->CR & OSC_CR_ERCLKEN_MASK) + { + /* Please call CLOCK_SetXtal0Freq base on board setting before using OSC0 clock. */ + assert(g_xtal0Freq); + return g_xtal0Freq >> ((OSC0->DIV & OSC_DIV_ERPS_MASK) >> OSC_DIV_ERPS_SHIFT); + } + else + { + return 0U; + } +} + +uint32_t CLOCK_GetEr32kClkFreq(void) +{ + uint32_t freq; + + switch (SIM_SOPT1_OSC32KSEL_VAL) + { + case 0U: /* OSC 32k clock */ + freq = (CLOCK_GetOsc0ErClkUndivFreq() == 32768U) ? 32768U : 0U; + break; + case 2U: /* RTC 32k clock */ + /* Please call CLOCK_SetXtal32Freq base on board setting before using XTAL32K/RTC_CLKIN clock. */ + assert(g_xtal32Freq); + freq = g_xtal32Freq; + break; + case 3U: /* LPO clock */ + freq = LPO_CLK_FREQ; + break; + default: + freq = 0U; + break; + } + return freq; +} + +uint32_t CLOCK_GetPllFllSelClkFreq(void) +{ + uint32_t freq; + + switch (SIM_SOPT2_PLLFLLSEL_VAL) + { + case 0U: /* FLL. */ + freq = CLOCK_GetFllFreq(); + break; + case 1U: /* PLL. */ + freq = CLOCK_GetPll0Freq(); + break; + case 3U: /* MCG IRC48M. */ + freq = MCG_INTERNAL_IRC_48M; + break; + default: + freq = 0U; + break; + } + + freq *= (SIM_CLKDIV3_PLLFLLFRAC_VAL + 1U); + freq /= (SIM_CLKDIV3_PLLFLLDIV_VAL + 1U); + return freq; +} + +uint32_t CLOCK_GetOsc0ErClkFreq(void) +{ + return CLOCK_GetOsc0ErClkDivFreq(); +} + +uint32_t CLOCK_GetPlatClkFreq(void) +{ + return CLOCK_GetOutClkFreq() / (SIM_CLKDIV1_OUTDIV1_VAL + 1); +} + +uint32_t CLOCK_GetFlashClkFreq(void) +{ + return CLOCK_GetOutClkFreq() / (SIM_CLKDIV1_OUTDIV4_VAL + 1); +} + +uint32_t CLOCK_GetQspiBusClkFreq(void) +{ + return CLOCK_GetOutClkFreq() / (SIM_CLKDIV1_OUTDIV5_VAL + 1); +} + +uint32_t CLOCK_GetBusClkFreq(void) +{ + return CLOCK_GetOutClkFreq() / (SIM_CLKDIV1_OUTDIV2_VAL + 1); +} + +uint32_t CLOCK_GetCoreSysClkFreq(void) +{ + return CLOCK_GetOutClkFreq() / (SIM_CLKDIV1_OUTDIV1_VAL + 1); +} + +uint32_t CLOCK_GetFreq(clock_name_t clockName) +{ + uint32_t freq; + + switch (clockName) + { + case kCLOCK_CoreSysClk: + case kCLOCK_PlatClk: + freq = CLOCK_GetOutClkFreq() / (SIM_CLKDIV1_OUTDIV1_VAL + 1); + break; + case kCLOCK_BusClk: + freq = CLOCK_GetOutClkFreq() / (SIM_CLKDIV1_OUTDIV2_VAL + 1); + break; + case kCLOCK_FlashClk: + freq = CLOCK_GetOutClkFreq() / (SIM_CLKDIV1_OUTDIV4_VAL + 1); + break; + case kCLOCK_PllFllSelClk: + freq = CLOCK_GetPllFllSelClkFreq(); + break; + case kCLOCK_QspiBusClk: + freq = CLOCK_GetOutClkFreq() / (SIM_CLKDIV1_OUTDIV5_VAL + 1); + break; + case kCLOCK_Er32kClk: + freq = CLOCK_GetEr32kClkFreq(); + break; + case kCLOCK_McgFixedFreqClk: + freq = CLOCK_GetFixedFreqClkFreq(); + break; + case kCLOCK_McgInternalRefClk: + freq = CLOCK_GetInternalRefClkFreq(); + break; + case kCLOCK_McgFllClk: + freq = CLOCK_GetFllFreq(); + break; + case kCLOCK_McgPll0Clk: + freq = CLOCK_GetPll0Freq(); + break; + case kCLOCK_McgIrc48MClk: + freq = MCG_INTERNAL_IRC_48M; + break; + case kCLOCK_LpoClk: + freq = LPO_CLK_FREQ; + break; + case kCLOCK_Osc0ErClkUndiv: + freq = CLOCK_GetOsc0ErClkUndivFreq(); + break; + case kCLOCK_Osc0ErClk: + freq = CLOCK_GetOsc0ErClkDivFreq(); + break; + default: + freq = 0U; + break; + } + + return freq; +} + +void CLOCK_SetSimConfig(sim_clock_config_t const *config) +{ + SIM->CLKDIV1 = config->clkdiv1; + CLOCK_SetPllFllSelClock(config->pllFllSel, config->pllFllDiv, config->pllFllFrac); + CLOCK_SetEr32kClock(config->er32kSrc); +} + +bool CLOCK_EnableUsbfs0Clock(clock_usb_src_t src, uint32_t freq) +{ + bool ret = true; + + CLOCK_DisableClock(kCLOCK_Usbfs0); + + if (kCLOCK_UsbSrcExt == src) + { + SIM->SOPT2 &= ~SIM_SOPT2_USBSRC_MASK; + } + else + { + switch (freq) + { + case 144000000U: + SIM->CLKDIV2 = SIM_CLKDIV2_USBDIV(2) | SIM_CLKDIV2_USBFRAC(0); + break; + case 96000000U: + SIM->CLKDIV2 = SIM_CLKDIV2_USBDIV(1) | SIM_CLKDIV2_USBFRAC(0); + break; + case 72000000U: + SIM->CLKDIV2 = SIM_CLKDIV2_USBDIV(2) | SIM_CLKDIV2_USBFRAC(1); + break; + case 48000000U: + SIM->CLKDIV2 = SIM_CLKDIV2_USBDIV(0) | SIM_CLKDIV2_USBFRAC(0); + break; + default: + ret = false; + break; + } + + SIM->SOPT2 = ((SIM->SOPT2 & ~(SIM_SOPT2_PLLFLLSEL_MASK | SIM_SOPT2_USBSRC_MASK)) | (uint32_t)src); + } + + CLOCK_EnableClock(kCLOCK_Usbfs0); + + if (kCLOCK_UsbSrcIrc48M == src) + { + USB0->CLK_RECOVER_IRC_EN = 0x03U; + USB0->CLK_RECOVER_CTRL |= USB_CLK_RECOVER_CTRL_CLOCK_RECOVER_EN_MASK; + } + return ret; +} + +uint32_t CLOCK_GetOutClkFreq(void) +{ + uint32_t mcgoutclk; + uint32_t clkst = MCG_S_CLKST_VAL; + + switch (clkst) + { + case kMCG_ClkOutStatPll: + mcgoutclk = CLOCK_GetPll0Freq(); + break; + case kMCG_ClkOutStatFll: + mcgoutclk = CLOCK_GetFllFreq(); + break; + case kMCG_ClkOutStatInt: + mcgoutclk = CLOCK_GetInternalRefClkSelectFreq(); + break; + case kMCG_ClkOutStatExt: + mcgoutclk = CLOCK_GetMcgExtClkFreq(); + break; + default: + mcgoutclk = 0U; + break; + } + return mcgoutclk; +} + +uint32_t CLOCK_GetFllFreq(void) +{ + static const uint16_t fllFactorTable[4][2] = {{640, 732}, {1280, 1464}, {1920, 2197}, {2560, 2929}}; + + uint8_t drs, dmx32; + uint32_t freq; + + /* If FLL is not enabled currently, then return 0U. */ + if ((MCG->C2 & MCG_C2_LP_MASK) || (MCG->S & MCG_S_PLLST_MASK)) + { + return 0U; + } + + /* Get FLL reference clock frequency. */ + freq = CLOCK_GetFllRefClkFreq(); + if (!freq) + { + return freq; + } + + drs = MCG_C4_DRST_DRS_VAL; + dmx32 = MCG_C4_DMX32_VAL; + + return freq * fllFactorTable[drs][dmx32]; +} + +uint32_t CLOCK_GetInternalRefClkFreq(void) +{ + /* If MCGIRCLK is gated. */ + if (!(MCG->C1 & MCG_C1_IRCLKEN_MASK)) + { + return 0U; + } + + return CLOCK_GetInternalRefClkSelectFreq(); +} + +uint32_t CLOCK_GetFixedFreqClkFreq(void) +{ + uint32_t freq = CLOCK_GetFllRefClkFreq(); + + /* MCGFFCLK must be no more than MCGOUTCLK/8. */ + if ((freq) && (freq <= (CLOCK_GetOutClkFreq() / 8U))) + { + return freq; + } + else + { + return 0U; + } +} + +uint32_t CLOCK_GetPll0Freq(void) +{ + uint32_t mcgpll0clk; + + /* If PLL0 is not enabled, return 0. */ + if (!(MCG->S & MCG_S_LOCK0_MASK)) + { + return 0U; + } + + mcgpll0clk = CLOCK_GetPll0RefFreq(); + + /* + * Please call CLOCK_SetXtal0Freq base on board setting before using OSC0 clock. + * Please call CLOCK_SetXtal1Freq base on board setting before using OSC1 clock. + */ + assert(mcgpll0clk); + + mcgpll0clk /= (FSL_FEATURE_MCG_PLL_PRDIV_BASE + MCG_C5_PRDIV0_VAL); + mcgpll0clk *= (FSL_FEATURE_MCG_PLL_VDIV_BASE + MCG_C6_VDIV0_VAL); + + mcgpll0clk >>= 1U; + return mcgpll0clk; +} + +status_t CLOCK_SetExternalRefClkConfig(mcg_oscsel_t oscsel) +{ + bool needDelay; + uint32_t i; + +#if (defined(MCG_CONFIG_CHECK_PARAM) && MCG_CONFIG_CHECK_PARAM) + /* If change MCG_C7[OSCSEL] and external reference clock is system clock source, return error. */ + if ((MCG_C7_OSCSEL_VAL != oscsel) && (!(MCG->S & MCG_S_IREFST_MASK))) + { + return kStatus_MCG_SourceUsed; + } +#endif /* MCG_CONFIG_CHECK_PARAM */ + + if (MCG_C7_OSCSEL_VAL != oscsel) + { + /* If change OSCSEL, need to delay, ERR009878. */ + needDelay = true; + } + else + { + needDelay = false; + } + + MCG->C7 = (MCG->C7 & ~MCG_C7_OSCSEL_MASK) | MCG_C7_OSCSEL(oscsel); + if (kMCG_OscselOsc == oscsel) + { + if (MCG->C2 & MCG_C2_EREFS_MASK) + { + while (!(MCG->S & MCG_S_OSCINIT0_MASK)) + { + } + } + } + + if (needDelay) + { + /* ERR009878 Delay at least 50 micro-seconds for external clock change valid. */ + i = 1500U; + while (i--) + { + __NOP(); + } + } + + return kStatus_Success; +} + +status_t CLOCK_SetInternalRefClkConfig(uint8_t enableMode, mcg_irc_mode_t ircs, uint8_t fcrdiv) +{ + uint32_t mcgOutClkState = MCG_S_CLKST_VAL; + mcg_irc_mode_t curIrcs = (mcg_irc_mode_t)MCG_S_IRCST_VAL; + uint8_t curFcrdiv = MCG_SC_FCRDIV_VAL; + +#if (defined(MCG_CONFIG_CHECK_PARAM) && MCG_CONFIG_CHECK_PARAM) + /* If MCGIRCLK is used as system clock source. */ + if (kMCG_ClkOutStatInt == mcgOutClkState) + { + /* If need to change MCGIRCLK source or driver, return error. */ + if (((kMCG_IrcFast == curIrcs) && (fcrdiv != curFcrdiv)) || (ircs != curIrcs)) + { + return kStatus_MCG_SourceUsed; + } + } +#endif + + /* If need to update the FCRDIV. */ + if (fcrdiv != curFcrdiv) + { + /* If fast IRC is in use currently, change to slow IRC. */ + if ((kMCG_IrcFast == curIrcs) && ((mcgOutClkState == kMCG_ClkOutStatInt) || (MCG->C1 & MCG_C1_IRCLKEN_MASK))) + { + MCG->C2 = ((MCG->C2 & ~MCG_C2_IRCS_MASK) | (MCG_C2_IRCS(kMCG_IrcSlow))); + while (MCG_S_IRCST_VAL != kMCG_IrcSlow) + { + } + } + /* Update FCRDIV. */ + MCG->SC = (MCG->SC & ~(MCG_SC_FCRDIV_MASK | MCG_SC_ATMF_MASK | MCG_SC_LOCS0_MASK)) | MCG_SC_FCRDIV(fcrdiv); + } + + /* Set internal reference clock selection. */ + MCG->C2 = (MCG->C2 & ~MCG_C2_IRCS_MASK) | (MCG_C2_IRCS(ircs)); + MCG->C1 = (MCG->C1 & ~(MCG_C1_IRCLKEN_MASK | MCG_C1_IREFSTEN_MASK)) | (uint8_t)enableMode; + + /* If MCGIRCLK is used, need to wait for MCG_S_IRCST. */ + if ((mcgOutClkState == kMCG_ClkOutStatInt) || (enableMode & kMCG_IrclkEnable)) + { + while (MCG_S_IRCST_VAL != ircs) + { + } + } + + return kStatus_Success; +} + +uint32_t CLOCK_CalcPllDiv(uint32_t refFreq, uint32_t desireFreq, uint8_t *prdiv, uint8_t *vdiv) +{ + uint8_t ret_prdiv; /* PRDIV to return. */ + uint8_t ret_vdiv; /* VDIV to return. */ + uint8_t prdiv_min; /* Min PRDIV value to make reference clock in allowed range. */ + uint8_t prdiv_max; /* Max PRDIV value to make reference clock in allowed range. */ + uint8_t prdiv_cur; /* PRDIV value for iteration. */ + uint8_t vdiv_cur; /* VDIV value for iteration. */ + uint32_t ret_freq = 0U; /* PLL output fequency to return. */ + uint32_t diff = 0xFFFFFFFFU; /* Difference between desireFreq and return frequency. */ + uint32_t ref_div; /* Reference frequency after PRDIV. */ + + /* + Steps: + 1. Get allowed prdiv with such rules: + 1). refFreq / prdiv >= FSL_FEATURE_MCG_PLL_REF_MIN. + 2). refFreq / prdiv <= FSL_FEATURE_MCG_PLL_REF_MAX. + 2. For each allowed prdiv, there are two candidate vdiv values: + 1). (desireFreq / (refFreq / prdiv)). + 2). (desireFreq / (refFreq / prdiv)) + 1. + If could get the precise desired frequency, return current prdiv and + vdiv directly. Otherwise choose the one which is closer to desired + frequency. + */ + + /* Reference frequency is out of range. */ + if ((refFreq < FSL_FEATURE_MCG_PLL_REF_MIN) || + (refFreq > (FSL_FEATURE_MCG_PLL_REF_MAX * (FSL_FEATURE_MCG_PLL_PRDIV_MAX + FSL_FEATURE_MCG_PLL_PRDIV_BASE)))) + { + return 0U; + } + + /* refFreq/PRDIV must in a range. First get the allowed PRDIV range. */ + prdiv_max = refFreq / FSL_FEATURE_MCG_PLL_REF_MIN; + prdiv_min = (refFreq + FSL_FEATURE_MCG_PLL_REF_MAX - 1U) / FSL_FEATURE_MCG_PLL_REF_MAX; + + desireFreq *= 2U; + + /* PRDIV traversal. */ + for (prdiv_cur = prdiv_max; prdiv_cur >= prdiv_min; prdiv_cur--) + { + /* Reference frequency after PRDIV. */ + ref_div = refFreq / prdiv_cur; + + vdiv_cur = desireFreq / ref_div; + + if ((vdiv_cur < FSL_FEATURE_MCG_PLL_VDIV_BASE - 1U) || (vdiv_cur > FSL_FEATURE_MCG_PLL_VDIV_BASE + 31U)) + { + /* No VDIV is available with this PRDIV. */ + continue; + } + + ret_freq = vdiv_cur * ref_div; + + if (vdiv_cur >= FSL_FEATURE_MCG_PLL_VDIV_BASE) + { + if (ret_freq == desireFreq) /* If desire frequency is got. */ + { + *prdiv = prdiv_cur - FSL_FEATURE_MCG_PLL_PRDIV_BASE; + *vdiv = vdiv_cur - FSL_FEATURE_MCG_PLL_VDIV_BASE; + return ret_freq / 2U; + } + /* New PRDIV/VDIV is closer. */ + if (diff > desireFreq - ret_freq) + { + diff = desireFreq - ret_freq; + ret_prdiv = prdiv_cur; + ret_vdiv = vdiv_cur; + } + } + vdiv_cur++; + if (vdiv_cur <= (FSL_FEATURE_MCG_PLL_VDIV_BASE + 31U)) + { + ret_freq += ref_div; + /* New PRDIV/VDIV is closer. */ + if (diff > ret_freq - desireFreq) + { + diff = ret_freq - desireFreq; + ret_prdiv = prdiv_cur; + ret_vdiv = vdiv_cur; + } + } + } + + if (0xFFFFFFFFU != diff) + { + /* PRDIV/VDIV found. */ + *prdiv = ret_prdiv - FSL_FEATURE_MCG_PLL_PRDIV_BASE; + *vdiv = ret_vdiv - FSL_FEATURE_MCG_PLL_VDIV_BASE; + ret_freq = (refFreq / ret_prdiv) * ret_vdiv; + return ret_freq / 2U; + } + else + { + /* No proper PRDIV/VDIV found. */ + return 0U; + } +} + +void CLOCK_EnablePll0(mcg_pll_config_t const *config) +{ + assert(config); + + uint8_t mcg_c5 = 0U; + + mcg_c5 |= MCG_C5_PRDIV0(config->prdiv); + MCG->C5 = mcg_c5; /* Disable the PLL first. */ + + MCG->C6 = (MCG->C6 & ~MCG_C6_VDIV0_MASK) | MCG_C6_VDIV0(config->vdiv); + + /* Set enable mode. */ + MCG->C5 |= ((uint32_t)kMCG_PllEnableIndependent | (uint32_t)config->enableMode); + + /* Wait for PLL lock. */ + while (!(MCG->S & MCG_S_LOCK0_MASK)) + { + } +} + +void CLOCK_SetOsc0MonitorMode(mcg_monitor_mode_t mode) +{ + /* Clear the previous flag, MCG_SC[LOCS0]. */ + MCG->SC &= ~MCG_SC_ATMF_MASK; + + if (kMCG_MonitorNone == mode) + { + MCG->C6 &= ~MCG_C6_CME0_MASK; + } + else + { + if (kMCG_MonitorInt == mode) + { + MCG->C2 &= ~MCG_C2_LOCRE0_MASK; + } + else + { + MCG->C2 |= MCG_C2_LOCRE0_MASK; + } + MCG->C6 |= MCG_C6_CME0_MASK; + } +} + +void CLOCK_SetRtcOscMonitorMode(mcg_monitor_mode_t mode) +{ + uint8_t mcg_c8 = MCG->C8; + + mcg_c8 &= ~(MCG_C8_CME1_MASK | MCG_C8_LOCRE1_MASK); + + if (kMCG_MonitorNone != mode) + { + if (kMCG_MonitorReset == mode) + { + mcg_c8 |= MCG_C8_LOCRE1_MASK; + } + mcg_c8 |= MCG_C8_CME1_MASK; + } + MCG->C8 = mcg_c8; +} + +void CLOCK_SetPll0MonitorMode(mcg_monitor_mode_t mode) +{ + uint8_t mcg_c8; + + /* Clear previous flag. */ + MCG->S = MCG_S_LOLS0_MASK; + + if (kMCG_MonitorNone == mode) + { + MCG->C6 &= ~MCG_C6_LOLIE0_MASK; + } + else + { + mcg_c8 = MCG->C8; + + mcg_c8 &= ~MCG_C8_LOCS1_MASK; + + if (kMCG_MonitorInt == mode) + { + mcg_c8 &= ~MCG_C8_LOLRE_MASK; + } + else + { + mcg_c8 |= MCG_C8_LOLRE_MASK; + } + MCG->C8 = mcg_c8; + MCG->C6 |= MCG_C6_LOLIE0_MASK; + } +} + +uint32_t CLOCK_GetStatusFlags(void) +{ + uint32_t ret = 0U; + uint8_t mcg_s = MCG->S; + + if (MCG->SC & MCG_SC_LOCS0_MASK) + { + ret |= kMCG_Osc0LostFlag; + } + if (mcg_s & MCG_S_OSCINIT0_MASK) + { + ret |= kMCG_Osc0InitFlag; + } + if (MCG->C8 & MCG_C8_LOCS1_MASK) + { + ret |= kMCG_RtcOscLostFlag; + } + if (mcg_s & MCG_S_LOLS0_MASK) + { + ret |= kMCG_Pll0LostFlag; + } + if (mcg_s & MCG_S_LOCK0_MASK) + { + ret |= kMCG_Pll0LockFlag; + } + return ret; +} + +void CLOCK_ClearStatusFlags(uint32_t mask) +{ + uint8_t reg; + + if (mask & kMCG_Osc0LostFlag) + { + MCG->SC &= ~MCG_SC_ATMF_MASK; + } + if (mask & kMCG_RtcOscLostFlag) + { + reg = MCG->C8; + MCG->C8 = reg; + } + if (mask & kMCG_Pll0LostFlag) + { + MCG->S = MCG_S_LOLS0_MASK; + } +} + +void CLOCK_InitOsc0(osc_config_t const *config) +{ + uint8_t range = CLOCK_GetOscRangeFromFreq(config->freq); + + OSC_SetCapLoad(OSC0, config->capLoad); + OSC_SetExtRefClkConfig(OSC0, &config->oscerConfig); + + MCG->C2 = ((MCG->C2 & ~OSC_MODE_MASK) | MCG_C2_RANGE(range) | (uint8_t)config->workMode); + + if ((kOSC_ModeExt != config->workMode) && (OSC0->CR & OSC_CR_ERCLKEN_MASK)) + { + /* Wait for stable. */ + while (!(MCG->S & MCG_S_OSCINIT0_MASK)) + { + } + } +} + +void CLOCK_DeinitOsc0(void) +{ + OSC0->CR = 0U; + MCG->C2 &= ~OSC_MODE_MASK; +} + +status_t CLOCK_TrimInternalRefClk(uint32_t extFreq, uint32_t desireFreq, uint32_t *actualFreq, mcg_atm_select_t atms) +{ + uint32_t multi; /* extFreq / desireFreq */ + uint32_t actv; /* Auto trim value. */ + uint8_t mcg_sc; + + static const uint32_t trimRange[2][2] = { + /* Min Max */ + {TRIM_SIRC_MIN, TRIM_SIRC_MAX}, /* Slow IRC. */ + {TRIM_FIRC_MIN, TRIM_FIRC_MAX} /* Fast IRC. */ + }; + + if ((extFreq > TRIM_REF_CLK_MAX) || (extFreq < TRIM_REF_CLK_MIN)) + { + return kStatus_MCG_AtmBusClockInvalid; + } + + /* Check desired frequency range. */ + if ((desireFreq < trimRange[atms][0]) || (desireFreq > trimRange[atms][1])) + { + return kStatus_MCG_AtmDesiredFreqInvalid; + } + + /* + Make sure internal reference clock is not used to generate bus clock. + Here only need to check (MCG_S_IREFST == 1). + */ + if (MCG_S_IREFST(kMCG_FllSrcInternal) == (MCG->S & MCG_S_IREFST_MASK)) + { + return kStatus_MCG_AtmIrcUsed; + } + + multi = extFreq / desireFreq; + actv = multi * 21U; + + if (kMCG_AtmSel4m == atms) + { + actv *= 128U; + } + + /* Now begin to start trim. */ + MCG->ATCVL = (uint8_t)actv; + MCG->ATCVH = (uint8_t)(actv >> 8U); + + mcg_sc = MCG->SC; + mcg_sc &= ~(MCG_SC_ATMS_MASK | MCG_SC_LOCS0_MASK); + mcg_sc |= (MCG_SC_ATMF_MASK | MCG_SC_ATMS(atms)); + MCG->SC = (mcg_sc | MCG_SC_ATME_MASK); + + /* Wait for finished. */ + while (MCG->SC & MCG_SC_ATME_MASK) + { + } + + /* Error occurs? */ + if (MCG->SC & MCG_SC_ATMF_MASK) + { + /* Clear the failed flag. */ + MCG->SC = mcg_sc; + return kStatus_MCG_AtmHardwareFail; + } + + *actualFreq = extFreq / multi; + + if (kMCG_AtmSel4m == atms) + { + s_fastIrcFreq = *actualFreq; + } + else + { + s_slowIrcFreq = *actualFreq; + } + + return kStatus_Success; +} + +mcg_mode_t CLOCK_GetMode(void) +{ + mcg_mode_t mode = kMCG_ModeError; + uint32_t clkst = MCG_S_CLKST_VAL; + uint32_t irefst = MCG_S_IREFST_VAL; + uint32_t lp = MCG_C2_LP_VAL; + uint32_t pllst = MCG_S_PLLST_VAL; + + /*------------------------------------------------------------------ + Mode and Registers + ____________________________________________________________________ + + Mode | CLKST | IREFST | PLLST | LP + ____________________________________________________________________ + + FEI | 00(FLL) | 1(INT) | 0(FLL) | X + ____________________________________________________________________ + + FEE | 00(FLL) | 0(EXT) | 0(FLL) | X + ____________________________________________________________________ + + FBE | 10(EXT) | 0(EXT) | 0(FLL) | 0(NORMAL) + ____________________________________________________________________ + + FBI | 01(INT) | 1(INT) | 0(FLL) | 0(NORMAL) + ____________________________________________________________________ + + BLPI | 01(INT) | 1(INT) | 0(FLL) | 1(LOW POWER) + ____________________________________________________________________ + + BLPE | 10(EXT) | 0(EXT) | X | 1(LOW POWER) + ____________________________________________________________________ + + PEE | 11(PLL) | 0(EXT) | 1(PLL) | X + ____________________________________________________________________ + + PBE | 10(EXT) | 0(EXT) | 1(PLL) | O(NORMAL) + ____________________________________________________________________ + + PBI | 01(INT) | 1(INT) | 1(PLL) | 0(NORMAL) + ____________________________________________________________________ + + PEI | 11(PLL) | 1(INT) | 1(PLL) | X + ____________________________________________________________________ + + ----------------------------------------------------------------------*/ + + switch (clkst) + { + case kMCG_ClkOutStatFll: + if (kMCG_FllSrcExternal == irefst) + { + mode = kMCG_ModeFEE; + } + else + { + mode = kMCG_ModeFEI; + } + break; + case kMCG_ClkOutStatInt: + if (lp) + { + mode = kMCG_ModeBLPI; + } + else + { + { + mode = kMCG_ModeFBI; + } + } + break; + case kMCG_ClkOutStatExt: + if (lp) + { + mode = kMCG_ModeBLPE; + } + else + { + if (kMCG_PllstPll == pllst) + { + mode = kMCG_ModePBE; + } + else + { + mode = kMCG_ModeFBE; + } + } + break; + case kMCG_ClkOutStatPll: + { + mode = kMCG_ModePEE; + } + break; + default: + break; + } + + return mode; +} + +status_t CLOCK_SetFeiMode(mcg_dmx32_t dmx32, mcg_drs_t drs, void (*fllStableDelay)(void)) +{ + uint8_t mcg_c4; + bool change_drs = false; + +#if (defined(MCG_CONFIG_CHECK_PARAM) && MCG_CONFIG_CHECK_PARAM) + mcg_mode_t mode = CLOCK_GetMode(); + if (!((kMCG_ModeFEI == mode) || (kMCG_ModeFBI == mode) || (kMCG_ModeFBE == mode) || (kMCG_ModeFEE == mode))) + { + return kStatus_MCG_ModeUnreachable; + } +#endif + mcg_c4 = MCG->C4; + + /* + Errata: ERR007993 + Workaround: Invert MCG_C4[DMX32] or change MCG_C4[DRST_DRS] before + reference clock source changes, then reset to previous value after + reference clock changes. + */ + if (kMCG_FllSrcExternal == MCG_S_IREFST_VAL) + { + change_drs = true; + /* Change the LSB of DRST_DRS. */ + MCG->C4 ^= (1U << MCG_C4_DRST_DRS_SHIFT); + } + + /* Set CLKS and IREFS. */ + MCG->C1 = + ((MCG->C1 & ~(MCG_C1_CLKS_MASK | MCG_C1_IREFS_MASK))) | (MCG_C1_CLKS(kMCG_ClkOutSrcOut) /* CLKS = 0 */ + | MCG_C1_IREFS(kMCG_FllSrcInternal)); /* IREFS = 1 */ + + /* Wait and check status. */ + while (kMCG_FllSrcInternal != MCG_S_IREFST_VAL) + { + } + + /* Errata: ERR007993 */ + if (change_drs) + { + MCG->C4 = mcg_c4; + } + + /* In FEI mode, the MCG_C4[DMX32] is set to 0U. */ + MCG->C4 = (mcg_c4 & ~(MCG_C4_DMX32_MASK | MCG_C4_DRST_DRS_MASK)) | (MCG_C4_DMX32(dmx32) | MCG_C4_DRST_DRS(drs)); + + /* Check MCG_S[CLKST] */ + while (kMCG_ClkOutStatFll != MCG_S_CLKST_VAL) + { + } + + /* Wait for FLL stable time. */ + if (fllStableDelay) + { + fllStableDelay(); + } + + return kStatus_Success; +} + +status_t CLOCK_SetFeeMode(uint8_t frdiv, mcg_dmx32_t dmx32, mcg_drs_t drs, void (*fllStableDelay)(void)) +{ + uint8_t mcg_c4; + bool change_drs = false; + +#if (defined(MCG_CONFIG_CHECK_PARAM) && MCG_CONFIG_CHECK_PARAM) + mcg_mode_t mode = CLOCK_GetMode(); + if (!((kMCG_ModeFEE == mode) || (kMCG_ModeFBI == mode) || (kMCG_ModeFBE == mode) || (kMCG_ModeFEI == mode))) + { + return kStatus_MCG_ModeUnreachable; + } +#endif + mcg_c4 = MCG->C4; + + /* + Errata: ERR007993 + Workaround: Invert MCG_C4[DMX32] or change MCG_C4[DRST_DRS] before + reference clock source changes, then reset to previous value after + reference clock changes. + */ + if (kMCG_FllSrcInternal == MCG_S_IREFST_VAL) + { + change_drs = true; + /* Change the LSB of DRST_DRS. */ + MCG->C4 ^= (1U << MCG_C4_DRST_DRS_SHIFT); + } + + /* Set CLKS and IREFS. */ + MCG->C1 = ((MCG->C1 & ~(MCG_C1_CLKS_MASK | MCG_C1_FRDIV_MASK | MCG_C1_IREFS_MASK)) | + (MCG_C1_CLKS(kMCG_ClkOutSrcOut) /* CLKS = 0 */ + | MCG_C1_FRDIV(frdiv) /* FRDIV */ + | MCG_C1_IREFS(kMCG_FllSrcExternal))); /* IREFS = 0 */ + + /* Wait and check status. */ + while (kMCG_FllSrcExternal != MCG_S_IREFST_VAL) + { + } + + /* Errata: ERR007993 */ + if (change_drs) + { + MCG->C4 = mcg_c4; + } + + /* Set DRS and DMX32. */ + mcg_c4 = ((mcg_c4 & ~(MCG_C4_DMX32_MASK | MCG_C4_DRST_DRS_MASK)) | (MCG_C4_DMX32(dmx32) | MCG_C4_DRST_DRS(drs))); + MCG->C4 = mcg_c4; + + /* Wait for DRST_DRS update. */ + while (MCG->C4 != mcg_c4) + { + } + + /* Check MCG_S[CLKST] */ + while (kMCG_ClkOutStatFll != MCG_S_CLKST_VAL) + { + } + + /* Wait for FLL stable time. */ + if (fllStableDelay) + { + fllStableDelay(); + } + + return kStatus_Success; +} + +status_t CLOCK_SetFbiMode(mcg_dmx32_t dmx32, mcg_drs_t drs, void (*fllStableDelay)(void)) +{ + uint8_t mcg_c4; + bool change_drs = false; + +#if (defined(MCG_CONFIG_CHECK_PARAM) && MCG_CONFIG_CHECK_PARAM) + mcg_mode_t mode = CLOCK_GetMode(); + + if (!((kMCG_ModeFEE == mode) || (kMCG_ModeFBI == mode) || (kMCG_ModeFBE == mode) || (kMCG_ModeFEI == mode) || + (kMCG_ModeBLPI == mode))) + + { + return kStatus_MCG_ModeUnreachable; + } +#endif + + mcg_c4 = MCG->C4; + + MCG->C2 &= ~MCG_C2_LP_MASK; /* Disable lowpower. */ + + /* + Errata: ERR007993 + Workaround: Invert MCG_C4[DMX32] or change MCG_C4[DRST_DRS] before + reference clock source changes, then reset to previous value after + reference clock changes. + */ + if (kMCG_FllSrcExternal == MCG_S_IREFST_VAL) + { + change_drs = true; + /* Change the LSB of DRST_DRS. */ + MCG->C4 ^= (1U << MCG_C4_DRST_DRS_SHIFT); + } + + /* Set CLKS and IREFS. */ + MCG->C1 = + ((MCG->C1 & ~(MCG_C1_CLKS_MASK | MCG_C1_IREFS_MASK)) | (MCG_C1_CLKS(kMCG_ClkOutSrcInternal) /* CLKS = 1 */ + | MCG_C1_IREFS(kMCG_FllSrcInternal))); /* IREFS = 1 */ + + /* Wait and check status. */ + while (kMCG_FllSrcInternal != MCG_S_IREFST_VAL) + { + } + + /* Errata: ERR007993 */ + if (change_drs) + { + MCG->C4 = mcg_c4; + } + + while (kMCG_ClkOutStatInt != MCG_S_CLKST_VAL) + { + } + + MCG->C4 = (mcg_c4 & ~(MCG_C4_DMX32_MASK | MCG_C4_DRST_DRS_MASK)) | (MCG_C4_DMX32(dmx32) | MCG_C4_DRST_DRS(drs)); + + /* Wait for FLL stable time. */ + if (fllStableDelay) + { + fllStableDelay(); + } + + return kStatus_Success; +} + +status_t CLOCK_SetFbeMode(uint8_t frdiv, mcg_dmx32_t dmx32, mcg_drs_t drs, void (*fllStableDelay)(void)) +{ + uint8_t mcg_c4; + bool change_drs = false; + +#if (defined(MCG_CONFIG_CHECK_PARAM) && MCG_CONFIG_CHECK_PARAM) + mcg_mode_t mode = CLOCK_GetMode(); + if (!((kMCG_ModeFEE == mode) || (kMCG_ModeFBI == mode) || (kMCG_ModeFBE == mode) || (kMCG_ModeFEI == mode) || + (kMCG_ModePBE == mode) || (kMCG_ModeBLPE == mode))) + { + return kStatus_MCG_ModeUnreachable; + } +#endif + + /* Change to FLL mode. */ + MCG->C6 &= ~MCG_C6_PLLS_MASK; + while (MCG->S & MCG_S_PLLST_MASK) + { + } + + /* Set LP bit to enable the FLL */ + MCG->C2 &= ~MCG_C2_LP_MASK; + + mcg_c4 = MCG->C4; + + /* + Errata: ERR007993 + Workaround: Invert MCG_C4[DMX32] or change MCG_C4[DRST_DRS] before + reference clock source changes, then reset to previous value after + reference clock changes. + */ + if (kMCG_FllSrcInternal == MCG_S_IREFST_VAL) + { + change_drs = true; + /* Change the LSB of DRST_DRS. */ + MCG->C4 ^= (1U << MCG_C4_DRST_DRS_SHIFT); + } + + /* Set CLKS and IREFS. */ + MCG->C1 = ((MCG->C1 & ~(MCG_C1_CLKS_MASK | MCG_C1_FRDIV_MASK | MCG_C1_IREFS_MASK)) | + (MCG_C1_CLKS(kMCG_ClkOutSrcExternal) /* CLKS = 2 */ + | MCG_C1_FRDIV(frdiv) /* FRDIV = frdiv */ + | MCG_C1_IREFS(kMCG_FllSrcExternal))); /* IREFS = 0 */ + + /* Wait for Reference clock Status bit to clear */ + while (kMCG_FllSrcExternal != MCG_S_IREFST_VAL) + { + } + + /* Errata: ERR007993 */ + if (change_drs) + { + MCG->C4 = mcg_c4; + } + + /* Set DRST_DRS and DMX32. */ + mcg_c4 = ((mcg_c4 & ~(MCG_C4_DMX32_MASK | MCG_C4_DRST_DRS_MASK)) | (MCG_C4_DMX32(dmx32) | MCG_C4_DRST_DRS(drs))); + + /* Wait for clock status bits to show clock source is ext ref clk */ + while (kMCG_ClkOutStatExt != MCG_S_CLKST_VAL) + { + } + + /* Wait for fll stable time. */ + if (fllStableDelay) + { + fllStableDelay(); + } + + return kStatus_Success; +} + +status_t CLOCK_SetBlpiMode(void) +{ +#if (defined(MCG_CONFIG_CHECK_PARAM) && MCG_CONFIG_CHECK_PARAM) + if (MCG_S_CLKST_VAL != kMCG_ClkOutStatInt) + { + return kStatus_MCG_ModeUnreachable; + } +#endif /* MCG_CONFIG_CHECK_PARAM */ + + /* Set LP. */ + MCG->C2 |= MCG_C2_LP_MASK; + + return kStatus_Success; +} + +status_t CLOCK_SetBlpeMode(void) +{ +#if (defined(MCG_CONFIG_CHECK_PARAM) && MCG_CONFIG_CHECK_PARAM) + if (MCG_S_CLKST_VAL != kMCG_ClkOutStatExt) + { + return kStatus_MCG_ModeUnreachable; + } +#endif + + /* Set LP bit to enter BLPE mode. */ + MCG->C2 |= MCG_C2_LP_MASK; + + return kStatus_Success; +} + +status_t CLOCK_SetPbeMode(mcg_pll_clk_select_t pllcs, mcg_pll_config_t const *config) +{ + /* + This function is designed to change MCG to PBE mode from PEE/BLPE/FBE, + but with this workflow, the source mode could be all modes except PEI/PBI. + */ + MCG->C2 &= ~MCG_C2_LP_MASK; /* Disable lowpower. */ + + /* Change to use external clock first. */ + MCG->C1 = ((MCG->C1 & ~(MCG_C1_CLKS_MASK | MCG_C1_IREFS_MASK)) | MCG_C1_CLKS(kMCG_ClkOutSrcExternal)); + + /* Wait for CLKST clock status bits to show clock source is ext ref clk */ + while ((MCG->S & (MCG_S_IREFST_MASK | MCG_S_CLKST_MASK)) != + (MCG_S_IREFST(kMCG_FllSrcExternal) | MCG_S_CLKST(kMCG_ClkOutStatExt))) + { + } + + /* Disable PLL first, then configure PLL. */ + MCG->C6 &= ~MCG_C6_PLLS_MASK; + while (MCG->S & MCG_S_PLLST_MASK) + { + } + + /* Configure the PLL. */ + { + CLOCK_EnablePll0(config); + } + + /* Change to PLL mode. */ + MCG->C6 |= MCG_C6_PLLS_MASK; + while (!(MCG->S & MCG_S_PLLST_MASK)) + { + } + + return kStatus_Success; +} + +status_t CLOCK_SetPeeMode(void) +{ +#if (defined(MCG_CONFIG_CHECK_PARAM) && MCG_CONFIG_CHECK_PARAM) + mcg_mode_t mode = CLOCK_GetMode(); + if (kMCG_ModePBE != mode) + { + return kStatus_MCG_ModeUnreachable; + } +#endif + + /* Change to use PLL/FLL output clock first. */ + MCG->C1 = (MCG->C1 & ~MCG_C1_CLKS_MASK) | MCG_C1_CLKS(kMCG_ClkOutSrcOut); + + /* Wait for clock status bits to update */ + while (MCG_S_CLKST_VAL != kMCG_ClkOutStatPll) + { + } + + return kStatus_Success; +} + +status_t CLOCK_ExternalModeToFbeModeQuick(void) +{ +#if (defined(MCG_CONFIG_CHECK_PARAM) && MCG_CONFIG_CHECK_PARAM) + if (MCG->S & MCG_S_IREFST_MASK) + { + return kStatus_MCG_ModeInvalid; + } +#endif /* MCG_CONFIG_CHECK_PARAM */ + + /* Disable low power */ + MCG->C2 &= ~MCG_C2_LP_MASK; + + MCG->C1 = ((MCG->C1 & ~MCG_C1_CLKS_MASK) | MCG_C1_CLKS(kMCG_ClkOutSrcExternal)); + while (MCG_S_CLKST_VAL != kMCG_ClkOutStatExt) + { + } + + /* Disable PLL. */ + MCG->C6 &= ~MCG_C6_PLLS_MASK; + while (MCG->S & MCG_S_PLLST_MASK) + { + } + + return kStatus_Success; +} + +status_t CLOCK_InternalModeToFbiModeQuick(void) +{ +#if (defined(MCG_CONFIG_CHECK_PARAM) && MCG_CONFIG_CHECK_PARAM) + if (!(MCG->S & MCG_S_IREFST_MASK)) + { + return kStatus_MCG_ModeInvalid; + } +#endif + + /* Disable low power */ + MCG->C2 &= ~MCG_C2_LP_MASK; + + MCG->C1 = ((MCG->C1 & ~MCG_C1_CLKS_MASK) | MCG_C1_CLKS(kMCG_ClkOutSrcInternal)); + while (MCG_S_CLKST_VAL != kMCG_ClkOutStatInt) + { + } + + return kStatus_Success; +} + +status_t CLOCK_BootToFeiMode(mcg_dmx32_t dmx32, mcg_drs_t drs, void (*fllStableDelay)(void)) +{ + return CLOCK_SetFeiMode(dmx32, drs, fllStableDelay); +} + +status_t CLOCK_BootToFeeMode( + mcg_oscsel_t oscsel, uint8_t frdiv, mcg_dmx32_t dmx32, mcg_drs_t drs, void (*fllStableDelay)(void)) +{ + CLOCK_SetExternalRefClkConfig(oscsel); + + return CLOCK_SetFeeMode(frdiv, dmx32, drs, fllStableDelay); +} + +status_t CLOCK_BootToBlpiMode(uint8_t fcrdiv, mcg_irc_mode_t ircs, uint8_t ircEnableMode) +{ + /* If reset mode is FEI mode, set MCGIRCLK and always success. */ + CLOCK_SetInternalRefClkConfig(ircEnableMode, ircs, fcrdiv); + + /* If reset mode is not BLPI, first enter FBI mode. */ + MCG->C1 = (MCG->C1 & ~MCG_C1_CLKS_MASK) | MCG_C1_CLKS(kMCG_ClkOutSrcInternal); + while (MCG_S_CLKST_VAL != kMCG_ClkOutStatInt) + { + } + + /* Enter BLPI mode. */ + MCG->C2 |= MCG_C2_LP_MASK; + + return kStatus_Success; +} + +status_t CLOCK_BootToBlpeMode(mcg_oscsel_t oscsel) +{ + CLOCK_SetExternalRefClkConfig(oscsel); + + /* Set to FBE mode. */ + MCG->C1 = + ((MCG->C1 & ~(MCG_C1_CLKS_MASK | MCG_C1_IREFS_MASK)) | (MCG_C1_CLKS(kMCG_ClkOutSrcExternal) /* CLKS = 2 */ + | MCG_C1_IREFS(kMCG_FllSrcExternal))); /* IREFS = 0 */ + + /* Wait for MCG_S[CLKST] and MCG_S[IREFST]. */ + while ((MCG->S & (MCG_S_IREFST_MASK | MCG_S_CLKST_MASK)) != + (MCG_S_IREFST(kMCG_FllSrcExternal) | MCG_S_CLKST(kMCG_ClkOutStatExt))) + { + } + + /* In FBE now, start to enter BLPE. */ + MCG->C2 |= MCG_C2_LP_MASK; + + return kStatus_Success; +} + +status_t CLOCK_BootToPeeMode(mcg_oscsel_t oscsel, mcg_pll_clk_select_t pllcs, mcg_pll_config_t const *config) +{ + assert(config); + + CLOCK_SetExternalRefClkConfig(oscsel); + + CLOCK_SetPbeMode(pllcs, config); + + /* Change to use PLL output clock. */ + MCG->C1 = (MCG->C1 & ~MCG_C1_CLKS_MASK) | MCG_C1_CLKS(kMCG_ClkOutSrcOut); + while (MCG_S_CLKST_VAL != kMCG_ClkOutStatPll) + { + } + + return kStatus_Success; +} + +/* + The transaction matrix. It defines the path for mode switch, the row is for + current mode and the column is target mode. + For example, switch from FEI to PEE: + 1. Current mode FEI, next mode is mcgModeMatrix[FEI][PEE] = FBE, so swith to FBE. + 2. Current mode FBE, next mode is mcgModeMatrix[FBE][PEE] = PBE, so swith to PBE. + 3. Current mode PBE, next mode is mcgModeMatrix[PBE][PEE] = PEE, so swith to PEE. + Thus the MCG mode has changed from FEI to PEE. + */ +static const mcg_mode_t mcgModeMatrix[8][8] = { + {kMCG_ModeFEI, kMCG_ModeFBI, kMCG_ModeFBI, kMCG_ModeFEE, kMCG_ModeFBE, kMCG_ModeFBE, kMCG_ModeFBE, + kMCG_ModeFBE}, /* FEI */ + {kMCG_ModeFEI, kMCG_ModeFBI, kMCG_ModeBLPI, kMCG_ModeFEE, kMCG_ModeFBE, kMCG_ModeFBE, kMCG_ModeFBE, + kMCG_ModeFBE}, /* FBI */ + {kMCG_ModeFBI, kMCG_ModeFBI, kMCG_ModeBLPI, kMCG_ModeFBI, kMCG_ModeFBI, kMCG_ModeFBI, kMCG_ModeFBI, + kMCG_ModeFBI}, /* BLPI */ + {kMCG_ModeFEI, kMCG_ModeFBI, kMCG_ModeFBI, kMCG_ModeFEE, kMCG_ModeFBE, kMCG_ModeFBE, kMCG_ModeFBE, + kMCG_ModeFBE}, /* FEE */ + {kMCG_ModeFEI, kMCG_ModeFBI, kMCG_ModeFBI, kMCG_ModeFEE, kMCG_ModeFBE, kMCG_ModeBLPE, kMCG_ModePBE, + kMCG_ModePBE}, /* FBE */ + {kMCG_ModeFBE, kMCG_ModeFBE, kMCG_ModeFBE, kMCG_ModeFBE, kMCG_ModeFBE, kMCG_ModeBLPE, kMCG_ModePBE, + kMCG_ModePBE}, /* BLPE */ + {kMCG_ModeFBE, kMCG_ModeFBE, kMCG_ModeFBE, kMCG_ModeFBE, kMCG_ModeFBE, kMCG_ModeBLPE, kMCG_ModePBE, + kMCG_ModePEE}, /* PBE */ + {kMCG_ModePBE, kMCG_ModePBE, kMCG_ModePBE, kMCG_ModePBE, kMCG_ModePBE, kMCG_ModePBE, kMCG_ModePBE, + kMCG_ModePBE} /* PEE */ + /* FEI FBI BLPI FEE FBE BLPE PBE PEE */ +}; + +status_t CLOCK_SetMcgConfig(const mcg_config_t *config) +{ + mcg_mode_t next_mode; + status_t status = kStatus_Success; + + mcg_pll_clk_select_t pllcs = kMCG_PllClkSelPll0; + + /* If need to change external clock, MCG_C7[OSCSEL]. */ + if (MCG_C7_OSCSEL_VAL != config->oscsel) + { + /* If external clock is in use, change to FEI first. */ + if (!(MCG->S & MCG_S_IRCST_MASK)) + { + CLOCK_ExternalModeToFbeModeQuick(); + CLOCK_SetFeiMode(config->dmx32, config->drs, (void (*)(void))0); + } + + CLOCK_SetExternalRefClkConfig(config->oscsel); + } + + /* Re-configure MCGIRCLK, if MCGIRCLK is used as system clock source, then change to FEI/PEI first. */ + if (MCG_S_CLKST_VAL == kMCG_ClkOutStatInt) + { + MCG->C2 &= ~MCG_C2_LP_MASK; /* Disable lowpower. */ + + { + CLOCK_SetFeiMode(config->dmx32, config->drs, CLOCK_FllStableDelay); + } + } + + /* Configure MCGIRCLK. */ + CLOCK_SetInternalRefClkConfig(config->irclkEnableMode, config->ircs, config->fcrdiv); + + next_mode = CLOCK_GetMode(); + + do + { + next_mode = mcgModeMatrix[next_mode][config->mcgMode]; + + switch (next_mode) + { + case kMCG_ModeFEI: + status = CLOCK_SetFeiMode(config->dmx32, config->drs, CLOCK_FllStableDelay); + break; + case kMCG_ModeFEE: + status = CLOCK_SetFeeMode(config->frdiv, config->dmx32, config->drs, CLOCK_FllStableDelay); + break; + case kMCG_ModeFBI: + status = CLOCK_SetFbiMode(config->dmx32, config->drs, (void (*)(void))0); + break; + case kMCG_ModeFBE: + status = CLOCK_SetFbeMode(config->frdiv, config->dmx32, config->drs, (void (*)(void))0); + break; + case kMCG_ModeBLPI: + status = CLOCK_SetBlpiMode(); + break; + case kMCG_ModeBLPE: + status = CLOCK_SetBlpeMode(); + break; + case kMCG_ModePBE: + /* If target mode is not PBE or PEE, then only need to set CLKS = EXT here. */ + if ((kMCG_ModePEE == config->mcgMode) || (kMCG_ModePBE == config->mcgMode)) + { + { + status = CLOCK_SetPbeMode(pllcs, &config->pll0Config); + } + } + else + { + MCG->C1 = ((MCG->C1 & ~MCG_C1_CLKS_MASK) | MCG_C1_CLKS(kMCG_ClkOutSrcExternal)); + while (MCG_S_CLKST_VAL != kMCG_ClkOutStatExt) + { + } + } + break; + case kMCG_ModePEE: + status = CLOCK_SetPeeMode(); + break; + default: + break; + } + if (kStatus_Success != status) + { + return status; + } + } while (next_mode != config->mcgMode); + + if (config->pll0Config.enableMode & kMCG_PllEnableIndependent) + { + CLOCK_EnablePll0(&config->pll0Config); + } + else + { + MCG->C5 &= ~(uint32_t)kMCG_PllEnableIndependent; + } + return kStatus_Success; +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_clock.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_clock.h new file mode 100644 index 00000000000..ba7428f4c24 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_clock.h @@ -0,0 +1,1505 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _FSL_CLOCK_H_ +#define _FSL_CLOCK_H_ + +#include "fsl_device_registers.h" +#include +#include +#include + +/*! @addtogroup clock */ +/*! @{ */ + +/*! @file */ + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief CLOCK driver version 2.2.0. */ +#define FSL_CLOCK_DRIVER_VERSION (MAKE_VERSION(2, 2, 0)) +/*@}*/ + +/*! @brief External XTAL0 (OSC0) clock frequency. + * + * The XTAL0/EXTAL0 (OSC0) clock frequency in Hz. When the clock is set up, use the + * function CLOCK_SetXtal0Freq to set the value in the clock driver. For example, + * if XTAL0 is 8 MHz: + * @code + * CLOCK_InitOsc0(...); // Set up the OSC0 + * CLOCK_SetXtal0Freq(80000000); // Set the XTAL0 value to the clock driver. + * @endcode + * + * This is important for the multicore platforms where only one core needs to set up the + * OSC0 using the CLOCK_InitOsc0. All other cores need to call the CLOCK_SetXtal0Freq + * to get a valid clock frequency. + */ +extern uint32_t g_xtal0Freq; + +/*! @brief External XTAL32/EXTAL32/RTC_CLKIN clock frequency. + * + * The XTAL32/EXTAL32/RTC_CLKIN clock frequency in Hz. When the clock is set up, use the + * function CLOCK_SetXtal32Freq to set the value in the clock driver. + * + * This is important for the multicore platforms where only one core needs to set up + * the clock. All other cores need to call the CLOCK_SetXtal32Freq + * to get a valid clock frequency. + */ +extern uint32_t g_xtal32Freq; + +/*! @brief IRC48M clock frequency in Hz. */ +#define MCG_INTERNAL_IRC_48M 48000000U + +#if (defined(OSC) && !(defined(OSC0))) +#define OSC0 OSC +#endif + +/*! @brief Clock ip name array for DMAMUX. */ +#define DMAMUX_CLOCKS \ + { \ + kCLOCK_Dmamux0 \ + } + +/*! @brief Clock ip name array for RTC. */ +#define RTC_CLOCKS \ + { \ + kCLOCK_Rtc0 \ + } + +/*! @brief Clock ip name array for PORT. */ +#define PORT_CLOCKS \ + { \ + kCLOCK_PortA, kCLOCK_PortB, kCLOCK_PortC, kCLOCK_PortD, kCLOCK_PortE \ + } + +/*! @brief Clock ip name array for EWM. */ +#define EWM_CLOCKS \ + { \ + kCLOCK_Ewm0 \ + } + +/*! @brief Clock ip name array for PIT. */ +#define PIT_CLOCKS \ + { \ + kCLOCK_Pit0 \ + } + +/*! @brief Clock ip name array for DSPI. */ +#define DSPI_CLOCKS \ + { \ + kCLOCK_Spi0, kCLOCK_Spi1 \ + } + +/*! @brief Clock ip name array for EMVSIM. */ +#define EMVSIM_CLOCKS \ + { \ + kCLOCK_Emvsim0, kCLOCK_Emvsim1 \ + } + +/*! @brief Clock ip name array for QSPI. */ +#define QSPI_CLOCKS \ + { \ + kCLOCK_Qspi0 \ + } + +/*! @brief Clock ip name array for EDMA. */ +#define EDMA_CLOCKS \ + { \ + kCLOCK_Dma0 \ + } + +/*! @brief Clock ip name array for LPUART. */ +#define LPUART_CLOCKS \ + { \ + kCLOCK_Lpuart0, kCLOCK_Lpuart1, kCLOCK_Lpuart2 \ + } + +/*! @brief Clock ip name array for DAC. */ +#define DAC_CLOCKS \ + { \ + kCLOCK_Dac0 \ + } + +/*! @brief Clock ip name array for LPTMR. */ +#define LPTMR_CLOCKS \ + { \ + kCLOCK_Lptmr0, kCLOCK_Lptmr1 \ + } + +/*! @brief Clock ip name array for ADC16. */ +#define ADC16_CLOCKS \ + { \ + kCLOCK_Adc0 \ + } + +/*! @brief Clock ip name array for TRNG. */ +#define TRNG_CLOCKS \ + { \ + kCLOCK_Trng0 \ + } + +/*! @brief Clock ip name array for MPU. */ +#define MPU_CLOCKS \ + { \ + kCLOCK_Mpu0 \ + } + +/*! @brief Clock ip name array for FLEXIO. */ +#define FLEXIO_CLOCKS \ + { \ + kCLOCK_Flexio0 \ + } + +/*! @brief Clock ip name array for VREF. */ +#define VREF_CLOCKS \ + { \ + kCLOCK_Vref0 \ + } + +/*! @brief Clock ip name array for TPM. */ +#define TPM_CLOCKS \ + { \ + kCLOCK_Tpm0, kCLOCK_Tpm1, kCLOCK_Tpm2 \ + } + +/*! @brief Clock ip name array for TSI. */ +#define TSI_CLOCKS \ + { \ + kCLOCK_Tsi0 \ + } + +/*! @brief Clock ip name array for LTC. */ +#define LTC_CLOCKS \ + { \ + kCLOCK_Ltc0 \ + } + +/*! @brief Clock ip name array for CRC. */ +#define CRC_CLOCKS \ + { \ + kCLOCK_Crc0 \ + } + +/*! @brief Clock ip name array for I2C. */ +#define I2C_CLOCKS \ + { \ + kCLOCK_I2c0, kCLOCK_I2c1 \ + } + +/*! @brief Clock ip name array for CMP. */ +#define CMP_CLOCKS \ + { \ + kCLOCK_Cmp0 \ + } + +/*! @brief Clock ip name array for INTMUX. */ +#define INTMUX_CLOCKS \ + { \ + kCLOCK_Intmux0 \ + } + +/*! + * @brief LPO clock frequency. + */ +#define LPO_CLK_FREQ 1000U + +/*! @brief Peripherals clock source definition. */ +#define SYS_CLK kCLOCK_CoreSysClk +#define BUS_CLK kCLOCK_BusClk + +#define I2C0_CLK_SRC BUS_CLK +#define I2C1_CLK_SRC BUS_CLK +#define DSPI0_CLK_SRC SYS_CLK +#define DSPI1_CLK_SRC SYS_CLK + +/*! @brief Clock name used to get clock frequency. */ +typedef enum _clock_name +{ + + /* ----------------------------- System layer clock -------------------------------*/ + kCLOCK_CoreSysClk, /*!< Core/system clock */ + kCLOCK_PlatClk, /*!< Platform clock */ + kCLOCK_BusClk, /*!< Bus clock */ + kCLOCK_FlashClk, /*!< Flash clock */ + kCLOCK_FastPeriphClk, /*!< Fast peripheral clock */ + kCLOCK_PllFllSelClk, /*!< The clock after SIM[PLLFLLSEL] */ + kCLOCK_QspiBusClk, /*!< QSPI bus interface clock */ + + /* ---------------------------------- OSC clock -----------------------------------*/ + kCLOCK_Er32kClk, /*!< External reference 32K clock (ERCLK32K) */ + kCLOCK_Osc0ErClk, /*!< OSC0 external reference clock (OSC0ERCLK) */ + kCLOCK_Osc1ErClk, /*!< OSC1 external reference clock (OSC1ERCLK) */ + kCLOCK_Osc0ErClkUndiv, /*!< OSC0 external reference undivided clock(OSC0ERCLK_UNDIV). */ + + /* ----------------------------- MCG and MCG-Lite clock ---------------------------*/ + kCLOCK_McgFixedFreqClk, /*!< MCG fixed frequency clock (MCGFFCLK) */ + kCLOCK_McgInternalRefClk, /*!< MCG internal reference clock (MCGIRCLK) */ + kCLOCK_McgFllClk, /*!< MCGFLLCLK */ + kCLOCK_McgPll0Clk, /*!< MCGPLL0CLK */ + kCLOCK_McgPll1Clk, /*!< MCGPLL1CLK */ + kCLOCK_McgExtPllClk, /*!< EXT_PLLCLK */ + kCLOCK_McgPeriphClk, /*!< MCG peripheral clock (MCGPCLK) */ + kCLOCK_McgIrc48MClk, /*!< MCG IRC48M clock */ + + /* --------------------------------- Other clock ----------------------------------*/ + kCLOCK_LpoClk, /*!< LPO clock */ + +} clock_name_t; + +/*! @brief USB clock source definition. */ +typedef enum _clock_usb_src +{ + kCLOCK_UsbSrcPll0 = SIM_SOPT2_USBSRC(1U) | SIM_SOPT2_PLLFLLSEL(1U), /*!< Use PLL0. */ + kCLOCK_UsbSrcIrc48M = SIM_SOPT2_USBSRC(1U) | SIM_SOPT2_PLLFLLSEL(3U), /*!< Use IRC48M. */ + kCLOCK_UsbSrcExt = SIM_SOPT2_USBSRC(0U) /*!< Use USB_CLKIN. */ +} clock_usb_src_t; + +/*------------------------------------------------------------------------------ + + clock_gate_t definition: + + 31 16 0 + ----------------------------------------------------------------- + | SIM_SCGC register offset | control bit offset in SCGC | + ----------------------------------------------------------------- + + For example, the SDHC clock gate is controlled by SIM_SCGC3[17], the + SIM_SCGC3 offset in SIM is 0x1030, then kClockGateSdhc0 is defined as + + kClockGateSdhc0 = (0x1030 << 16) | 17; + +------------------------------------------------------------------------------*/ + +#define CLK_GATE_REG_OFFSET_SHIFT 16U +#define CLK_GATE_REG_OFFSET_MASK 0xFFFF0000U +#define CLK_GATE_BIT_SHIFT_SHIFT 0U +#define CLK_GATE_BIT_SHIFT_MASK 0x0000FFFFU + +#define CLK_GATE_DEFINE(reg_offset, bit_shift) \ + ((((reg_offset) << CLK_GATE_REG_OFFSET_SHIFT) & CLK_GATE_REG_OFFSET_MASK) | \ + (((bit_shift) << CLK_GATE_BIT_SHIFT_SHIFT) & CLK_GATE_BIT_SHIFT_MASK)) + +#define CLK_GATE_ABSTRACT_REG_OFFSET(x) (((x)&CLK_GATE_REG_OFFSET_MASK) >> CLK_GATE_REG_OFFSET_SHIFT) +#define CLK_GATE_ABSTRACT_BITS_SHIFT(x) (((x)&CLK_GATE_BIT_SHIFT_MASK) >> CLK_GATE_BIT_SHIFT_SHIFT) + +/*! @brief Clock gate name used for CLOCK_EnableClock/CLOCK_DisableClock. */ +typedef enum _clock_ip_name +{ + kCLOCK_IpInvalid = 0U, + + kCLOCK_Ewm0 = CLK_GATE_DEFINE(0x1034U, 1U), + kCLOCK_I2c0 = CLK_GATE_DEFINE(0x1034U, 6U), + kCLOCK_I2c1 = CLK_GATE_DEFINE(0x1034U, 7U), + kCLOCK_Usbfs0 = CLK_GATE_DEFINE(0x1034U, 18U), + kCLOCK_Cmp0 = CLK_GATE_DEFINE(0x1034U, 19U), + kCLOCK_Vref0 = CLK_GATE_DEFINE(0x1034U, 20U), + + kCLOCK_Lptmr0 = CLK_GATE_DEFINE(0x1038U, 0U), + kCLOCK_Secreg0 = CLK_GATE_DEFINE(0x1038U, 3U), + kCLOCK_Lptmr1 = CLK_GATE_DEFINE(0x1038U, 4U), + kCLOCK_Tsi0 = CLK_GATE_DEFINE(0x1038U, 5U), + kCLOCK_PortA = CLK_GATE_DEFINE(0x1038U, 9U), + kCLOCK_PortB = CLK_GATE_DEFINE(0x1038U, 10U), + kCLOCK_PortC = CLK_GATE_DEFINE(0x1038U, 11U), + kCLOCK_PortD = CLK_GATE_DEFINE(0x1038U, 12U), + kCLOCK_PortE = CLK_GATE_DEFINE(0x1038U, 13U), + kCLOCK_Emvsim0 = CLK_GATE_DEFINE(0x1038U, 14U), + kCLOCK_Emvsim1 = CLK_GATE_DEFINE(0x1038U, 15U), + kCLOCK_Ltc0 = CLK_GATE_DEFINE(0x1038U, 17U), + kCLOCK_Lpuart0 = CLK_GATE_DEFINE(0x1038U, 20U), + kCLOCK_Lpuart1 = CLK_GATE_DEFINE(0x1038U, 21U), + kCLOCK_Lpuart2 = CLK_GATE_DEFINE(0x1038U, 22U), + kCLOCK_Qspi0 = CLK_GATE_DEFINE(0x1038U, 26U), + kCLOCK_Flexio0 = CLK_GATE_DEFINE(0x1038U, 31U), + + kCLOCK_Nvm0 = CLK_GATE_DEFINE(0x103CU, 0U), + kCLOCK_Dmamux0 = CLK_GATE_DEFINE(0x103CU, 1U), + kCLOCK_Intmux0 = CLK_GATE_DEFINE(0x103CU, 4U), + kCLOCK_Trng0 = CLK_GATE_DEFINE(0x103CU, 5U), + kCLOCK_Spi0 = CLK_GATE_DEFINE(0x103CU, 12U), + kCLOCK_Spi1 = CLK_GATE_DEFINE(0x103CU, 13U), + kCLOCK_Crc0 = CLK_GATE_DEFINE(0x103CU, 18U), + kCLOCK_Pit0 = CLK_GATE_DEFINE(0x103CU, 23U), + kCLOCK_Tpm0 = CLK_GATE_DEFINE(0x103CU, 24U), + kCLOCK_Tpm1 = CLK_GATE_DEFINE(0x103CU, 25U), + kCLOCK_Tpm2 = CLK_GATE_DEFINE(0x103CU, 26U), + kCLOCK_Adc0 = CLK_GATE_DEFINE(0x103CU, 27U), + kCLOCK_Rtc0 = CLK_GATE_DEFINE(0x103CU, 29U), + kCLOCK_Rtc_Rf0 = CLK_GATE_DEFINE(0x103CU, 30U), + kCLOCK_Dac0 = CLK_GATE_DEFINE(0x103CU, 31U), + + kCLOCK_Dma0 = CLK_GATE_DEFINE(0x1040U, 1U), + kCLOCK_Mpu0 = CLK_GATE_DEFINE(0x1040U, 2U), +} clock_ip_name_t; + +/*!@brief SIM configuration structure for clock setting. */ +typedef struct _sim_clock_config +{ + uint8_t pllFllSel; /*!< PLL/FLL/IRC48M selection. */ + uint8_t pllFllDiv; /*!< PLLFLLSEL clock divider divisor. */ + uint8_t pllFllFrac; /*!< PLLFLLSEL clock divider fraction. */ + uint8_t er32kSrc; /*!< ERCLK32K source selection. */ + uint32_t clkdiv1; /*!< SIM_CLKDIV1. */ +} sim_clock_config_t; + +/*! @brief OSC work mode. */ +typedef enum _osc_mode +{ + kOSC_ModeExt = 0U, /*!< Use an external clock. */ +#if (defined(MCG_C2_EREFS_MASK) && !(defined(MCG_C2_EREFS0_MASK))) + kOSC_ModeOscLowPower = MCG_C2_EREFS_MASK, /*!< Oscillator low power. */ +#else + kOSC_ModeOscLowPower = MCG_C2_EREFS0_MASK, /*!< Oscillator low power. */ +#endif + kOSC_ModeOscHighGain = 0U +#if (defined(MCG_C2_EREFS_MASK) && !(defined(MCG_C2_EREFS0_MASK))) + | + MCG_C2_EREFS_MASK +#else + | + MCG_C2_EREFS0_MASK +#endif +#if (defined(MCG_C2_HGO_MASK) && !(defined(MCG_C2_HGO0_MASK))) + | + MCG_C2_HGO_MASK, /*!< Oscillator high gain. */ +#else + | + MCG_C2_HGO0_MASK, /*!< Oscillator high gain. */ +#endif +} osc_mode_t; + +/*! @brief Oscillator capacitor load setting.*/ +enum _osc_cap_load +{ + kOSC_Cap2P = OSC_CR_SC2P_MASK, /*!< 2 pF capacitor load */ + kOSC_Cap4P = OSC_CR_SC4P_MASK, /*!< 4 pF capacitor load */ + kOSC_Cap8P = OSC_CR_SC8P_MASK, /*!< 8 pF capacitor load */ + kOSC_Cap16P = OSC_CR_SC16P_MASK /*!< 16 pF capacitor load */ +}; + +/*! @brief OSCERCLK enable mode. */ +enum _oscer_enable_mode +{ + kOSC_ErClkEnable = OSC_CR_ERCLKEN_MASK, /*!< Enable. */ + kOSC_ErClkEnableInStop = OSC_CR_EREFSTEN_MASK /*!< Enable in stop mode. */ +}; + +/*! @brief OSC configuration for OSCERCLK. */ +typedef struct _oscer_config +{ + uint8_t enableMode; /*!< OSCERCLK enable mode. OR'ed value of @ref _oscer_enable_mode. */ + + uint8_t erclkDiv; /*!< Divider for OSCERCLK.*/ +} oscer_config_t; + +/*! + * @brief OSC Initialization Configuration Structure + * + * Defines the configuration data structure to initialize the OSC. + * When porting to a new board, set the following members + * according to the board setting: + * 1. freq: The external frequency. + * 2. workMode: The OSC module mode. + */ +typedef struct _osc_config +{ + uint32_t freq; /*!< External clock frequency. */ + uint8_t capLoad; /*!< Capacitor load setting. */ + osc_mode_t workMode; /*!< OSC work mode setting. */ + oscer_config_t oscerConfig; /*!< Configuration for OSCERCLK. */ +} osc_config_t; + +/*! @brief MCG FLL reference clock source select. */ +typedef enum _mcg_fll_src +{ + kMCG_FllSrcExternal, /*!< External reference clock is selected */ + kMCG_FllSrcInternal /*!< The slow internal reference clock is selected */ +} mcg_fll_src_t; + +/*! @brief MCG internal reference clock select */ +typedef enum _mcg_irc_mode +{ + kMCG_IrcSlow, /*!< Slow internal reference clock selected */ + kMCG_IrcFast /*!< Fast internal reference clock selected */ +} mcg_irc_mode_t; + +/*! @brief MCG DCO Maximum Frequency with 32.768 kHz Reference */ +typedef enum _mcg_dmx32 +{ + kMCG_Dmx32Default, /*!< DCO has a default range of 25% */ + kMCG_Dmx32Fine /*!< DCO is fine-tuned for maximum frequency with 32.768 kHz reference */ +} mcg_dmx32_t; + +/*! @brief MCG DCO range select */ +typedef enum _mcg_drs +{ + kMCG_DrsLow, /*!< Low frequency range */ + kMCG_DrsMid, /*!< Mid frequency range */ + kMCG_DrsMidHigh, /*!< Mid-High frequency range */ + kMCG_DrsHigh /*!< High frequency range */ +} mcg_drs_t; + +/*! @brief MCG PLL reference clock select */ +typedef enum _mcg_pll_ref_src +{ + kMCG_PllRefOsc0, /*!< Selects OSC0 as PLL reference clock */ + kMCG_PllRefOsc1 /*!< Selects OSC1 as PLL reference clock */ +} mcg_pll_ref_src_t; + +/*! @brief MCGOUT clock source. */ +typedef enum _mcg_clkout_src +{ + kMCG_ClkOutSrcOut, /*!< Output of the FLL is selected (reset default) */ + kMCG_ClkOutSrcInternal, /*!< Internal reference clock is selected */ + kMCG_ClkOutSrcExternal, /*!< External reference clock is selected */ +} mcg_clkout_src_t; + +/*! @brief MCG Automatic Trim Machine Select */ +typedef enum _mcg_atm_select +{ + kMCG_AtmSel32k, /*!< 32 kHz Internal Reference Clock selected */ + kMCG_AtmSel4m /*!< 4 MHz Internal Reference Clock selected */ +} mcg_atm_select_t; + +/*! @brief MCG OSC Clock Select */ +typedef enum _mcg_oscsel +{ + kMCG_OscselOsc, /*!< Selects System Oscillator (OSCCLK) */ + kMCG_OscselRtc, /*!< Selects 32 kHz RTC Oscillator */ + kMCG_OscselIrc /*!< Selects 48 MHz IRC Oscillator */ +} mcg_oscsel_t; + +/*! @brief MCG PLLCS select */ +typedef enum _mcg_pll_clk_select +{ + kMCG_PllClkSelPll0, /*!< PLL0 output clock is selected */ + kMCG_PllClkSelPll1 /* PLL1 output clock is selected */ +} mcg_pll_clk_select_t; + +/*! @brief MCG clock monitor mode. */ +typedef enum _mcg_monitor_mode +{ + kMCG_MonitorNone, /*!< Clock monitor is disabled. */ + kMCG_MonitorInt, /*!< Trigger interrupt when clock lost. */ + kMCG_MonitorReset /*!< System reset when clock lost. */ +} mcg_monitor_mode_t; + +/*! @brief MCG status. */ +enum _mcg_status +{ + kStatus_MCG_ModeUnreachable = MAKE_STATUS(kStatusGroup_MCG, 0), /*!< Can't switch to target mode. */ + kStatus_MCG_ModeInvalid = MAKE_STATUS(kStatusGroup_MCG, 1), /*!< Current mode invalid for the specific + function. */ + kStatus_MCG_AtmBusClockInvalid = MAKE_STATUS(kStatusGroup_MCG, 2), /*!< Invalid bus clock for ATM. */ + kStatus_MCG_AtmDesiredFreqInvalid = MAKE_STATUS(kStatusGroup_MCG, 3), /*!< Invalid desired frequency for ATM. */ + kStatus_MCG_AtmIrcUsed = MAKE_STATUS(kStatusGroup_MCG, 4), /*!< IRC is used when using ATM. */ + kStatus_MCG_AtmHardwareFail = MAKE_STATUS(kStatusGroup_MCG, 5), /*!< Hardware fail occurs during ATM. */ + kStatus_MCG_SourceUsed = MAKE_STATUS(kStatusGroup_MCG, 6) /*!< Can't change the clock source because + it is in use. */ +}; + +/*! @brief MCG status flags. */ +enum _mcg_status_flags_t +{ + kMCG_Osc0LostFlag = (1U << 0U), /*!< OSC0 lost. */ + kMCG_Osc0InitFlag = (1U << 1U), /*!< OSC0 crystal initialized. */ + kMCG_RtcOscLostFlag = (1U << 4U), /*!< RTC OSC lost. */ + kMCG_Pll0LostFlag = (1U << 5U), /*!< PLL0 lost. */ + kMCG_Pll0LockFlag = (1U << 6U), /*!< PLL0 locked. */ +}; + +/*! @brief MCG internal reference clock (MCGIRCLK) enable mode definition. */ +enum _mcg_irclk_enable_mode +{ + kMCG_IrclkEnable = MCG_C1_IRCLKEN_MASK, /*!< MCGIRCLK enable. */ + kMCG_IrclkEnableInStop = MCG_C1_IREFSTEN_MASK /*!< MCGIRCLK enable in stop mode. */ +}; + +/*! @brief MCG PLL clock enable mode definition. */ +enum _mcg_pll_enable_mode +{ + kMCG_PllEnableIndependent = MCG_C5_PLLCLKEN0_MASK, /*!< MCGPLLCLK enable independent of the + MCG clock mode. Generally, the PLL + is disabled in FLL modes + (FEI/FBI/FEE/FBE). Setting the PLL clock + enable independent, enables the + PLL in the FLL modes. */ + kMCG_PllEnableInStop = MCG_C5_PLLSTEN0_MASK /*!< MCGPLLCLK enable in STOP mode. */ +}; + +/*! @brief MCG mode definitions */ +typedef enum _mcg_mode +{ + kMCG_ModeFEI = 0U, /*!< FEI - FLL Engaged Internal */ + kMCG_ModeFBI, /*!< FBI - FLL Bypassed Internal */ + kMCG_ModeBLPI, /*!< BLPI - Bypassed Low Power Internal */ + kMCG_ModeFEE, /*!< FEE - FLL Engaged External */ + kMCG_ModeFBE, /*!< FBE - FLL Bypassed External */ + kMCG_ModeBLPE, /*!< BLPE - Bypassed Low Power External */ + kMCG_ModePBE, /*!< PBE - PLL Bypassed External */ + kMCG_ModePEE, /*!< PEE - PLL Engaged External */ + kMCG_ModeError /*!< Unknown mode */ +} mcg_mode_t; + +/*! @brief MCG PLL configuration. */ +typedef struct _mcg_pll_config +{ + uint8_t enableMode; /*!< Enable mode. OR'ed value of @ref _mcg_pll_enable_mode. */ + uint8_t prdiv; /*!< Reference divider PRDIV. */ + uint8_t vdiv; /*!< VCO divider VDIV. */ +} mcg_pll_config_t; + +/*! @brief MCG mode change configuration structure + * + * When porting to a new board, set the following members + * according to the board setting: + * 1. frdiv: If the FLL uses the external reference clock, set this + * value to ensure that the external reference clock divided by frdiv is + * in the 31.25 kHz to 39.0625 kHz range. + * 2. The PLL reference clock divider PRDIV: PLL reference clock frequency after + * PRDIV should be in the FSL_FEATURE_MCG_PLL_REF_MIN to + * FSL_FEATURE_MCG_PLL_REF_MAX range. + */ +typedef struct _mcg_config +{ + mcg_mode_t mcgMode; /*!< MCG mode. */ + + /* ----------------------- MCGIRCCLK settings ------------------------ */ + uint8_t irclkEnableMode; /*!< MCGIRCLK enable mode. */ + mcg_irc_mode_t ircs; /*!< Source, MCG_C2[IRCS]. */ + uint8_t fcrdiv; /*!< Divider, MCG_SC[FCRDIV]. */ + + /* ------------------------ MCG FLL settings ------------------------- */ + uint8_t frdiv; /*!< Divider MCG_C1[FRDIV]. */ + mcg_drs_t drs; /*!< DCO range MCG_C4[DRST_DRS]. */ + mcg_dmx32_t dmx32; /*!< MCG_C4[DMX32]. */ + mcg_oscsel_t oscsel; /*!< OSC select MCG_C7[OSCSEL]. */ + + /* ------------------------ MCG PLL settings ------------------------- */ + mcg_pll_config_t pll0Config; /*!< MCGPLL0CLK configuration. */ + +} mcg_config_t; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus */ + +/*! + * @brief Enable the clock for specific IP. + * + * @param name Which clock to enable, see \ref clock_ip_name_t. + */ +static inline void CLOCK_EnableClock(clock_ip_name_t name) +{ + uint32_t regAddr = SIM_BASE + CLK_GATE_ABSTRACT_REG_OFFSET((uint32_t)name); + (*(volatile uint32_t *)regAddr) |= (1U << CLK_GATE_ABSTRACT_BITS_SHIFT((uint32_t)name)); +} + +/*! + * @brief Disable the clock for specific IP. + * + * @param name Which clock to disable, see \ref clock_ip_name_t. + */ +static inline void CLOCK_DisableClock(clock_ip_name_t name) +{ + uint32_t regAddr = SIM_BASE + CLK_GATE_ABSTRACT_REG_OFFSET((uint32_t)name); + (*(volatile uint32_t *)regAddr) &= ~(1U << CLK_GATE_ABSTRACT_BITS_SHIFT((uint32_t)name)); +} + +/*! + * @brief Set ERCLK32K source. + * + * @param src The value to set ERCLK32K clock source. + */ +static inline void CLOCK_SetEr32kClock(uint32_t src) +{ + SIM->SOPT1 = ((SIM->SOPT1 & ~SIM_SOPT1_OSC32KSEL_MASK) | SIM_SOPT1_OSC32KSEL(src)); +} + +/*! + * @brief Set EMVSIM clock source. + * + * @param src The value to set EMVSIM clock source. + */ +static inline void CLOCK_SetEmvsimClock(uint32_t src) +{ + SIM->SOPT2 = ((SIM->SOPT2 & ~SIM_SOPT2_EMVSIMSRC_MASK) | SIM_SOPT2_EMVSIMSRC(src)); +} + +/*! + * @brief Set LPUART clock source. + * + * @param src The value to set LPUART clock source. + */ +static inline void CLOCK_SetLpuartClock(uint32_t src) +{ + SIM->SOPT2 = ((SIM->SOPT2 & ~SIM_SOPT2_LPUARTSRC_MASK) | SIM_SOPT2_LPUARTSRC(src)); +} + +/*! + * @brief Set TPM clock source. + * + * @param src The value to set TPM clock source. + */ +static inline void CLOCK_SetTpmClock(uint32_t src) +{ + SIM->SOPT2 = ((SIM->SOPT2 & ~SIM_SOPT2_TPMSRC_MASK) | SIM_SOPT2_TPMSRC(src)); +} + +/*! + * @brief Set FLEXIO clock source. + * + * @param src The value to set FLEXIO clock source. + */ +static inline void CLOCK_SetFlexio0Clock(uint32_t src) +{ + SIM->SOPT2 = ((SIM->SOPT2 & ~SIM_SOPT2_FLEXIOSRC_MASK) | SIM_SOPT2_FLEXIOSRC(src)); +} + +/*! + * @brief Set PLLFLLSEL clock source. + * + * @param src The value to set PLLFLLSEL clock source. + */ +static inline void CLOCK_SetPllFllSelClock(uint32_t src, uint32_t divValue, uint32_t fracValue) +{ + SIM->SOPT2 = ((SIM->SOPT2 & ~SIM_SOPT2_PLLFLLSEL_MASK) | SIM_SOPT2_PLLFLLSEL(src)); + SIM->CLKDIV3 = SIM_CLKDIV3_PLLFLLDIV(divValue) | SIM_CLKDIV3_PLLFLLFRAC(fracValue); +} + +/*! + * @brief Set CLKOUT source. + * + * @param src The value to set CLKOUT source. + */ +static inline void CLOCK_SetClkOutClock(uint32_t src) +{ + SIM->SOPT2 = ((SIM->SOPT2 & ~SIM_SOPT2_CLKOUT_MASK) | SIM_SOPT2_CLKOUT(src)); +} + +/*! + * @brief Set RTC_CLKOUT source. + * + * @param src The value to set RTC_CLKOUT source. + */ +static inline void CLOCK_SetRtcClkOutClock(uint32_t src) +{ + SIM->SOPT2 = ((SIM->SOPT2 & ~SIM_SOPT2_RTCCLKOUTS_MASK) | SIM_SOPT2_RTCCLKOUTS(src)); +} + +/*! @brief Enable USB FS clock. + * + * @param src USB FS clock source. + * @param freq The frequency specified by src. + * @retval true The clock is set successfully. + * @retval false The clock source is invalid to get proper USB FS clock. + */ +bool CLOCK_EnableUsbfs0Clock(clock_usb_src_t src, uint32_t freq); + +/*! @brief Disable USB FS clock. + * + * Disable USB FS clock. + */ +static inline void CLOCK_DisableUsbfs0Clock(void) +{ + CLOCK_DisableClock(kCLOCK_Usbfs0); +} + +/*! + * @brief System clock divider + * + * Set the SIM_CLKDIV1[OUTDIV1], SIM_CLKDIV1[OUTDIV2], SIM_CLKDIV1[OUTDIV4], SIM_CLKDIV1[OUTDIV5]. + * + * @param outdiv1 Clock 1 output divider value. + * + * @param outdiv2 Clock 2 output divider value. + * + * @param outdiv4 Clock 4 output divider value. + * + * @param outdiv5 Clock 5 output divider value. + */ +static inline void CLOCK_SetOutDiv(uint32_t outdiv1, uint32_t outdiv2, uint32_t outdiv4, uint32_t outdiv5) +{ + SIM->CLKDIV1 = SIM_CLKDIV1_OUTDIV1(outdiv1) | SIM_CLKDIV1_OUTDIV2(outdiv2) | SIM_CLKDIV1_OUTDIV4(outdiv4) | + SIM_CLKDIV1_OUTDIV5(outdiv5); +} + +/*! + * @brief Gets the clock frequency for a specific clock name. + * + * This function checks the current clock configurations and then calculates + * the clock frequency for a specific clock name defined in clock_name_t. + * The MCG must be properly configured before using this function. + * + * @param clockName Clock names defined in clock_name_t + * @return Clock frequency value in Hertz + */ +uint32_t CLOCK_GetFreq(clock_name_t clockName); + +/*! + * @brief Get the core clock or system clock frequency. + * + * @return Clock frequency in Hz. + */ +uint32_t CLOCK_GetCoreSysClkFreq(void); + +/*! + * @brief Get the platform clock frequency. + * + * @return Clock frequency in Hz. + */ +uint32_t CLOCK_GetPlatClkFreq(void); + +/*! + * @brief Get the bus clock frequency. + * + * @return Clock frequency in Hz. + */ +uint32_t CLOCK_GetBusClkFreq(void); + +/*! + * @brief Get the flash clock frequency. + * + * @return Clock frequency in Hz. + */ +uint32_t CLOCK_GetFlashClkFreq(void); + +/*! + * @brief Get the output clock frequency selected by SIM[PLLFLLSEL]. + * + * @return Clock frequency in Hz. + */ +uint32_t CLOCK_GetPllFllSelClkFreq(void); + +/*! + * @brief Get the QSPI bus interface clock frequency. + * + * @return Clock frequency in Hz. + */ +uint32_t CLOCK_GetQspiBusClkFreq(void); + +/*! + * @brief Get the external reference 32K clock frequency (ERCLK32K). + * + * @return Clock frequency in Hz. + */ +uint32_t CLOCK_GetEr32kClkFreq(void); + +/*! + * @brief Get the OSC0 external reference undivided clock frequency (OSC0ERCLK_UNDIV). + * + * @return Clock frequency in Hz. + */ +uint32_t CLOCK_GetOsc0ErClkUndivFreq(void); + +/*! + * @brief Get the OSC0 external reference clock frequency (OSC0ERCLK). + * + * @return Clock frequency in Hz. + */ +uint32_t CLOCK_GetOsc0ErClkFreq(void); + +/*! + * @brief Set the clock configure in SIM module. + * + * This function sets system layer clock settings in SIM module. + * + * @param config Pointer to the configure structure. + */ +void CLOCK_SetSimConfig(sim_clock_config_t const *config); + +/*! + * @brief Set the system clock dividers in SIM to safe value. + * + * The system level clocks (core clock, bus clock, flexbus clock and flash clock) + * must be in allowed ranges. During MCG clock mode switch, the MCG output clock + * changes then the system level clocks may be out of range. This function could + * be used before MCG mode change, to make sure system level clocks are in allowed + * range. + * + * @param config Pointer to the configure structure. + */ +static inline void CLOCK_SetSimSafeDivs(void) +{ + SIM->CLKDIV1 = 0x15051000U; +} + +/*! @name MCG frequency functions. */ +/*@{*/ + +/*! + * @brief Gets the MCG output clock (MCGOUTCLK) frequency. + * + * This function gets the MCG output clock frequency in Hz based on the current MCG + * register value. + * + * @return The frequency of MCGOUTCLK. + */ +uint32_t CLOCK_GetOutClkFreq(void); + +/*! + * @brief Gets the MCG FLL clock (MCGFLLCLK) frequency. + * + * This function gets the MCG FLL clock frequency in Hz based on the current MCG + * register value. The FLL is enabled in FEI/FBI/FEE/FBE mode and + * disabled in low power state in other modes. + * + * @return The frequency of MCGFLLCLK. + */ +uint32_t CLOCK_GetFllFreq(void); + +/*! + * @brief Gets the MCG internal reference clock (MCGIRCLK) frequency. + * + * This function gets the MCG internal reference clock frequency in Hz based + * on the current MCG register value. + * + * @return The frequency of MCGIRCLK. + */ +uint32_t CLOCK_GetInternalRefClkFreq(void); + +/*! + * @brief Gets the MCG fixed frequency clock (MCGFFCLK) frequency. + * + * This function gets the MCG fixed frequency clock frequency in Hz based + * on the current MCG register value. + * + * @return The frequency of MCGFFCLK. + */ +uint32_t CLOCK_GetFixedFreqClkFreq(void); + +/*! + * @brief Gets the MCG PLL0 clock (MCGPLL0CLK) frequency. + * + * This function gets the MCG PLL0 clock frequency in Hz based on the current MCG + * register value. + * + * @return The frequency of MCGPLL0CLK. + */ +uint32_t CLOCK_GetPll0Freq(void); + +/*@}*/ + +/*! @name MCG clock configuration. */ +/*@{*/ + +/*! + * @brief Enables or disables the MCG low power. + * + * Enabling the MCG low power disables the PLL and FLL in bypass modes. In other words, + * in FBE and PBE modes, enabling low power sets the MCG to BLPE mode. In FBI and + * PBI modes, enabling low power sets the MCG to BLPI mode. + * When disabling the MCG low power, the PLL or FLL are enabled based on MCG settings. + * + * @param enable True to enable MCG low power, false to disable MCG low power. + */ +static inline void CLOCK_SetLowPowerEnable(bool enable) +{ + if (enable) + { + MCG->C2 |= MCG_C2_LP_MASK; + } + else + { + MCG->C2 &= ~MCG_C2_LP_MASK; + } +} + +/*! + * @brief Configures the Internal Reference clock (MCGIRCLK). + * + * This function sets the \c MCGIRCLK base on parameters. It also selects the IRC + * source. If the fast IRC is used, this function sets the fast IRC divider. + * This function also sets whether the \c MCGIRCLK is enabled in stop mode. + * Calling this function in FBI/PBI/BLPI modes may change the system clock. As a result, + * using the function in these modes it is not allowed. + * + * @param enableMode MCGIRCLK enable mode, OR'ed value of @ref _mcg_irclk_enable_mode. + * @param ircs MCGIRCLK clock source, choose fast or slow. + * @param fcrdiv Fast IRC divider setting (\c FCRDIV). + * @retval kStatus_MCG_SourceUsed Because the internall reference clock is used as a clock source, + * the confuration should not be changed. Otherwise, a glitch occurs. + * @retval kStatus_Success MCGIRCLK configuration finished successfully. + */ +status_t CLOCK_SetInternalRefClkConfig(uint8_t enableMode, mcg_irc_mode_t ircs, uint8_t fcrdiv); + +/*! + * @brief Selects the MCG external reference clock. + * + * Selects the MCG external reference clock source, changes the MCG_C7[OSCSEL], + * and waits for the clock source to be stable. Because the external reference + * clock should not be changed in FEE/FBE/BLPE/PBE/PEE modes, do not call this function in these modes. + * + * @param oscsel MCG external reference clock source, MCG_C7[OSCSEL]. + * @retval kStatus_MCG_SourceUsed Because the external reference clock is used as a clock source, + * the confuration should not be changed. Otherwise, a glitch occurs. + * @retval kStatus_Success External reference clock set successfully. + */ +status_t CLOCK_SetExternalRefClkConfig(mcg_oscsel_t oscsel); + +/*! + * @brief Enables the PLL0 in FLL mode. + * + * This function sets us the PLL0 in FLL mode and reconfigures + * the PLL0. Ensure that the PLL reference + * clock is enabled before calling this function and that the PLL0 is not used as a clock source. + * The function CLOCK_CalcPllDiv gets the correct PLL + * divider values. + * + * @param config Pointer to the configuration structure. + */ +void CLOCK_EnablePll0(mcg_pll_config_t const *config); + +/*! + * @brief Disables the PLL0 in FLL mode. + * + * This function disables the PLL0 in FLL mode. It should be used together with the + * @ref CLOCK_EnablePll0. + */ +static inline void CLOCK_DisablePll0(void) +{ + MCG->C5 &= ~(MCG_C5_PLLCLKEN0_MASK | MCG_C5_PLLSTEN0_MASK); +} + +/*! + * @brief Calculates the PLL divider setting for a desired output frequency. + * + * This function calculates the correct reference clock divider (\c PRDIV) and + * VCO divider (\c VDIV) to generate a desired PLL output frequency. It returns the + * closest frequency match with the corresponding \c PRDIV/VDIV + * returned from parameters. If a desired frequency is not valid, this function + * returns 0. + * + * @param refFreq PLL reference clock frequency. + * @param desireFreq Desired PLL output frequency. + * @param prdiv PRDIV value to generate desired PLL frequency. + * @param vdiv VDIV value to generate desired PLL frequency. + * @return Closest frequency match that the PLL was able generate. + */ +uint32_t CLOCK_CalcPllDiv(uint32_t refFreq, uint32_t desireFreq, uint8_t *prdiv, uint8_t *vdiv); + +/*@}*/ + +/*! @name MCG clock lock monitor functions. */ +/*@{*/ + +/*! + * @brief Sets the OSC0 clock monitor mode. + * + * This function sets the OSC0 clock monitor mode. See @ref mcg_monitor_mode_t for details. + * + * @param mode Monitor mode to set. + */ +void CLOCK_SetOsc0MonitorMode(mcg_monitor_mode_t mode); + +/*! + * @brief Sets the RTC OSC clock monitor mode. + * + * This function sets the RTC OSC clock monitor mode. See @ref mcg_monitor_mode_t for details. + * + * @param mode Monitor mode to set. + */ +void CLOCK_SetRtcOscMonitorMode(mcg_monitor_mode_t mode); + +/*! + * @brief Sets the PLL0 clock monitor mode. + * + * This function sets the PLL0 clock monitor mode. See @ref mcg_monitor_mode_t for details. + * + * @param mode Monitor mode to set. + */ +void CLOCK_SetPll0MonitorMode(mcg_monitor_mode_t mode); + +/*! + * @brief Gets the MCG status flags. + * + * This function gets the MCG clock status flags. All status flags are + * returned as a logical OR of the enumeration @ref _mcg_status_flags_t. To + * check a specific flag, compare the return value with the flag. + * + * Example: + * @code + // To check the clock lost lock status of OSC0 and PLL0. + uint32_t mcgFlags; + + mcgFlags = CLOCK_GetStatusFlags(); + + if (mcgFlags & kMCG_Osc0LostFlag) + { + // OSC0 clock lock lost. Do something. + } + if (mcgFlags & kMCG_Pll0LostFlag) + { + // PLL0 clock lock lost. Do something. + } + @endcode + * + * @return Logical OR value of the @ref _mcg_status_flags_t. + */ +uint32_t CLOCK_GetStatusFlags(void); + +/*! + * @brief Clears the MCG status flags. + * + * This function clears the MCG clock lock lost status. The parameter is a logical + * OR value of the flags to clear. See @ref _mcg_status_flags_t. + * + * Example: + * @code + // To clear the clock lost lock status flags of OSC0 and PLL0. + + CLOCK_ClearStatusFlags(kMCG_Osc0LostFlag | kMCG_Pll0LostFlag); + @endcode + * + * @param mask The status flags to clear. This is a logical OR of members of the + * enumeration @ref _mcg_status_flags_t. + */ +void CLOCK_ClearStatusFlags(uint32_t mask); + +/*@}*/ + +/*! + * @name OSC configuration + * @{ + */ + +/*! + * @brief Configures the OSC external reference clock (OSCERCLK). + * + * This function configures the OSC external reference clock (OSCERCLK). + * This is an example to enable the OSCERCLK in normal and stop modes and also set + * the output divider to 1: + * + @code + oscer_config_t config = + { + .enableMode = kOSC_ErClkEnable | kOSC_ErClkEnableInStop, + .erclkDiv = 1U, + }; + + OSC_SetExtRefClkConfig(OSC, &config); + @endcode + * + * @param base OSC peripheral address. + * @param config Pointer to the configuration structure. + */ +static inline void OSC_SetExtRefClkConfig(OSC_Type *base, oscer_config_t const *config) +{ + uint8_t reg = base->CR; + + reg &= ~(OSC_CR_ERCLKEN_MASK | OSC_CR_EREFSTEN_MASK); + reg |= config->enableMode; + + base->CR = reg; + + base->DIV = OSC_DIV_ERPS(config->erclkDiv); +} + +/*! + * @brief Sets the capacitor load configuration for the oscillator. + * + * This function sets the specified capacitors configuration for the oscillator. + * This should be done in the early system level initialization function call + * based on the system configuration. + * + * @param base OSC peripheral address. + * @param capLoad OR'ed value for the capacitor load option, see \ref _osc_cap_load. + * + * Example: + @code + // To enable only 2 pF and 8 pF capacitor load, please use like this. + OSC_SetCapLoad(OSC, kOSC_Cap2P | kOSC_Cap8P); + @endcode + */ +static inline void OSC_SetCapLoad(OSC_Type *base, uint8_t capLoad) +{ + uint8_t reg = base->CR; + + reg &= ~(OSC_CR_SC2P_MASK | OSC_CR_SC4P_MASK | OSC_CR_SC8P_MASK | OSC_CR_SC16P_MASK); + reg |= capLoad; + + base->CR = reg; +} + +/*! + * @brief Initializes the OSC0. + * + * This function initializes the OSC0 according to the board configuration. + * + * @param config Pointer to the OSC0 configuration structure. + */ +void CLOCK_InitOsc0(osc_config_t const *config); + +/*! + * @brief Deinitializes the OSC0. + * + * This function deinitializes the OSC0. + */ +void CLOCK_DeinitOsc0(void); + +/* @} */ + +/*! + * @name External clock frequency + * @{ + */ + +/*! + * @brief Sets the XTAL0 frequency based on board settings. + * + * @param freq The XTAL0/EXTAL0 input clock frequency in Hz. + */ +static inline void CLOCK_SetXtal0Freq(uint32_t freq) +{ + g_xtal0Freq = freq; +} + +/*! + * @brief Sets the XTAL32/RTC_CLKIN frequency based on board settings. + * + * @param freq The XTAL32/EXTAL32/RTC_CLKIN input clock frequency in Hz. + */ +static inline void CLOCK_SetXtal32Freq(uint32_t freq) +{ + g_xtal32Freq = freq; +} +/* @} */ + +/*! + * @name MCG auto-trim machine. + * @{ + */ + +/*! + * @brief Auto trims the internal reference clock. + * + * This function trims the internal reference clock by using the external clock. If + * successful, it returns the kStatus_Success and the frequency after + * trimming is received in the parameter @p actualFreq. If an error occurs, + * the error code is returned. + * + * @param extFreq External clock frequency, which should be a bus clock. + * @param desireFreq Frequency to trim to. + * @param actualFreq Actual frequency after trimming. + * @param atms Trim fast or slow internal reference clock. + * @retval kStatus_Success ATM success. + * @retval kStatus_MCG_AtmBusClockInvalid The bus clock is not in allowed range for the ATM. + * @retval kStatus_MCG_AtmDesiredFreqInvalid MCGIRCLK could not be trimmed to the desired frequency. + * @retval kStatus_MCG_AtmIrcUsed Could not trim because MCGIRCLK is used as a bus clock source. + * @retval kStatus_MCG_AtmHardwareFail Hardware fails while trimming. + */ +status_t CLOCK_TrimInternalRefClk(uint32_t extFreq, uint32_t desireFreq, uint32_t *actualFreq, mcg_atm_select_t atms); +/* @} */ + +/*! @name MCG mode functions. */ +/*@{*/ + +/*! + * @brief Gets the current MCG mode. + * + * This function checks the MCG registers and determines the current MCG mode. + * + * @return Current MCG mode or error code; See @ref mcg_mode_t. + */ +mcg_mode_t CLOCK_GetMode(void); + +/*! + * @brief Sets the MCG to FEI mode. + * + * This function sets the MCG to FEI mode. If setting to FEI mode fails + * from the current mode, this function returns an error. + * + * @param dmx32 DMX32 in FEI mode. + * @param drs The DCO range selection. + * @param fllStableDelay Delay function to ensure that the FLL is stable. Passing + * NULL does not cause a delay. + * @retval kStatus_MCG_ModeUnreachable Could not switch to the target mode. + * @retval kStatus_Success Switched to the target mode successfully. + * @note If @p dmx32 is set to kMCG_Dmx32Fine, the slow IRC must not be trimmed + * to a frequency above 32768 Hz. + */ +status_t CLOCK_SetFeiMode(mcg_dmx32_t dmx32, mcg_drs_t drs, void (*fllStableDelay)(void)); + +/*! + * @brief Sets the MCG to FEE mode. + * + * This function sets the MCG to FEE mode. If setting to FEE mode fails + * from the current mode, this function returns an error. + * + * @param frdiv FLL reference clock divider setting, FRDIV. + * @param dmx32 DMX32 in FEE mode. + * @param drs The DCO range selection. + * @param fllStableDelay Delay function to make sure FLL is stable. Passing + * NULL does not cause a delay. + * + * @retval kStatus_MCG_ModeUnreachable Could not switch to the target mode. + * @retval kStatus_Success Switched to the target mode successfully. + */ +status_t CLOCK_SetFeeMode(uint8_t frdiv, mcg_dmx32_t dmx32, mcg_drs_t drs, void (*fllStableDelay)(void)); + +/*! + * @brief Sets the MCG to FBI mode. + * + * This function sets the MCG to FBI mode. If setting to FBI mode fails + * from the current mode, this function returns an error. + * + * @param dmx32 DMX32 in FBI mode. + * @param drs The DCO range selection. + * @param fllStableDelay Delay function to make sure FLL is stable. If the FLL + * is not used in FBI mode, this parameter can be NULL. Passing + * NULL does not cause a delay. + * @retval kStatus_MCG_ModeUnreachable Could not switch to the target mode. + * @retval kStatus_Success Switched to the target mode successfully. + * @note If @p dmx32 is set to kMCG_Dmx32Fine, the slow IRC must not be trimmed + * to frequency above 32768 Hz. + */ +status_t CLOCK_SetFbiMode(mcg_dmx32_t dmx32, mcg_drs_t drs, void (*fllStableDelay)(void)); + +/*! + * @brief Sets the MCG to FBE mode. + * + * This function sets the MCG to FBE mode. If setting to FBE mode fails + * from the current mode, this function returns an error. + * + * @param frdiv FLL reference clock divider setting, FRDIV. + * @param dmx32 DMX32 in FBE mode. + * @param drs The DCO range selection. + * @param fllStableDelay Delay function to make sure FLL is stable. If the FLL + * is not used in FBE mode, this parameter can be NULL. Passing NULL + * does not cause a delay. + * @retval kStatus_MCG_ModeUnreachable Could not switch to the target mode. + * @retval kStatus_Success Switched to the target mode successfully. + */ +status_t CLOCK_SetFbeMode(uint8_t frdiv, mcg_dmx32_t dmx32, mcg_drs_t drs, void (*fllStableDelay)(void)); + +/*! + * @brief Sets the MCG to BLPI mode. + * + * This function sets the MCG to BLPI mode. If setting to BLPI mode fails + * from the current mode, this function returns an error. + * + * @retval kStatus_MCG_ModeUnreachable Could not switch to the target mode. + * @retval kStatus_Success Switched to the target mode successfully. + */ +status_t CLOCK_SetBlpiMode(void); + +/*! + * @brief Sets the MCG to BLPE mode. + * + * This function sets the MCG to BLPE mode. If setting to BLPE mode fails + * from the current mode, this function returns an error. + * + * @retval kStatus_MCG_ModeUnreachable Could not switch to the target mode. + * @retval kStatus_Success Switched to the target mode successfully. + */ +status_t CLOCK_SetBlpeMode(void); + +/*! + * @brief Sets the MCG to PBE mode. + * + * This function sets the MCG to PBE mode. If setting to PBE mode fails + * from the current mode, this function returns an error. + * + * @param pllcs The PLL selection, PLLCS. + * @param config Pointer to the PLL configuration. + * @retval kStatus_MCG_ModeUnreachable Could not switch to the target mode. + * @retval kStatus_Success Switched to the target mode successfully. + * + * @note + * 1. The parameter \c pllcs selects the PLL. For platforms with + * only one PLL, the parameter pllcs is kept for interface compatibility. + * 2. The parameter \c config is the PLL configuration structure. On some + * platforms, it is possible to choose the external PLL directly, which renders the + * configuration structure not necessary. In this case, pass in NULL. + * For example: CLOCK_SetPbeMode(kMCG_OscselOsc, kMCG_PllClkSelExtPll, NULL); + */ +status_t CLOCK_SetPbeMode(mcg_pll_clk_select_t pllcs, mcg_pll_config_t const *config); + +/*! + * @brief Sets the MCG to PEE mode. + * + * This function sets the MCG to PEE mode. + * + * @retval kStatus_MCG_ModeUnreachable Could not switch to the target mode. + * @retval kStatus_Success Switched to the target mode successfully. + * + * @note This function only changes the CLKS to use the PLL/FLL output. If the + * PRDIV/VDIV are different than in the PBE mode, set them up + * in PBE mode and wait. When the clock is stable, switch to PEE mode. + */ +status_t CLOCK_SetPeeMode(void); + +/*! + * @brief Switches the MCG to FBE mode from the external mode. + * + * This function switches the MCG from external modes (PEE/PBE/BLPE/FEE) to the FBE mode quickly. + * The external clock is used as the system clock souce and PLL is disabled. However, + * the FLL settings are not configured. This is a lite function with a small code size, which is useful + * during the mode switch. For example, to switch from PEE mode to FEI mode: + * + * @code + * CLOCK_ExternalModeToFbeModeQuick(); + * CLOCK_SetFeiMode(...); + * @endcode + * + * @retval kStatus_Success Switched successfully. + * @retval kStatus_MCG_ModeInvalid If the current mode is not an external mode, do not call this function. + */ +status_t CLOCK_ExternalModeToFbeModeQuick(void); + +/*! + * @brief Switches the MCG to FBI mode from internal modes. + * + * This function switches the MCG from internal modes (PEI/PBI/BLPI/FEI) to the FBI mode quickly. + * The MCGIRCLK is used as the system clock souce and PLL is disabled. However, + * FLL settings are not configured. This is a lite function with a small code size, which is useful + * during the mode switch. For example, to switch from PEI mode to FEE mode: + * + * @code + * CLOCK_InternalModeToFbiModeQuick(); + * CLOCK_SetFeeMode(...); + * @endcode + * + * @retval kStatus_Success Switched successfully. + * @retval kStatus_MCG_ModeInvalid If the current mode is not an internal mode, do not call this function. + */ +status_t CLOCK_InternalModeToFbiModeQuick(void); + +/*! + * @brief Sets the MCG to FEI mode during system boot up. + * + * This function sets the MCG to FEI mode from the reset mode. It can also be used to + * set up MCG during system boot up. + * + * @param dmx32 DMX32 in FEI mode. + * @param drs The DCO range selection. + * @param fllStableDelay Delay function to ensure that the FLL is stable. + * + * @retval kStatus_MCG_ModeUnreachable Could not switch to the target mode. + * @retval kStatus_Success Switched to the target mode successfully. + * @note If @p dmx32 is set to kMCG_Dmx32Fine, the slow IRC must not be trimmed + * to frequency above 32768 Hz. + */ +status_t CLOCK_BootToFeiMode(mcg_dmx32_t dmx32, mcg_drs_t drs, void (*fllStableDelay)(void)); + +/*! + * @brief Sets the MCG to FEE mode during system bootup. + * + * This function sets MCG to FEE mode from the reset mode. It can also be used to + * set up the MCG during system boot up. + * + * @param oscsel OSC clock select, OSCSEL. + * @param frdiv FLL reference clock divider setting, FRDIV. + * @param dmx32 DMX32 in FEE mode. + * @param drs The DCO range selection. + * @param fllStableDelay Delay function to ensure that the FLL is stable. + * + * @retval kStatus_MCG_ModeUnreachable Could not switch to the target mode. + * @retval kStatus_Success Switched to the target mode successfully. + */ +status_t CLOCK_BootToFeeMode( + mcg_oscsel_t oscsel, uint8_t frdiv, mcg_dmx32_t dmx32, mcg_drs_t drs, void (*fllStableDelay)(void)); + +/*! + * @brief Sets the MCG to BLPI mode during system boot up. + * + * This function sets the MCG to BLPI mode from the reset mode. It can also be used to + * set up the MCG during sytem boot up. + * + * @param fcrdiv Fast IRC divider, FCRDIV. + * @param ircs The internal reference clock to select, IRCS. + * @param ircEnableMode The MCGIRCLK enable mode, OR'ed value of @ref _mcg_irclk_enable_mode. + * + * @retval kStatus_MCG_SourceUsed Could not change MCGIRCLK setting. + * @retval kStatus_Success Switched to the target mode successfully. + */ +status_t CLOCK_BootToBlpiMode(uint8_t fcrdiv, mcg_irc_mode_t ircs, uint8_t ircEnableMode); + +/*! + * @brief Sets the MCG to BLPE mode during sytem boot up. + * + * This function sets the MCG to BLPE mode from the reset mode. It can also be used to + * set up the MCG during sytem boot up. + * + * @param oscsel OSC clock select, MCG_C7[OSCSEL]. + * + * @retval kStatus_MCG_ModeUnreachable Could not switch to the target mode. + * @retval kStatus_Success Switched to the target mode successfully. + */ +status_t CLOCK_BootToBlpeMode(mcg_oscsel_t oscsel); + +/*! + * @brief Sets the MCG to PEE mode during system boot up. + * + * This function sets the MCG to PEE mode from reset mode. It can also be used to + * set up the MCG during system boot up. + * + * @param oscsel OSC clock select, MCG_C7[OSCSEL]. + * @param pllcs The PLL selection, PLLCS. + * @param config Pointer to the PLL configuration. + * + * @retval kStatus_MCG_ModeUnreachable Could not switch to the target mode. + * @retval kStatus_Success Switched to the target mode successfully. + */ +status_t CLOCK_BootToPeeMode(mcg_oscsel_t oscsel, mcg_pll_clk_select_t pllcs, mcg_pll_config_t const *config); + +/*! + * @brief Sets the MCG to a target mode. + * + * This function sets MCG to a target mode defined by the configuration + * structure. If switching to the target mode fails, this function + * chooses the correct path. + * + * @param config Pointer to the target MCG mode configuration structure. + * @return Return kStatus_Success if switched successfully; Otherwise, it returns an error code #_mcg_status. + * + * @note If the external clock is used in the target mode, ensure that it is + * enabled. For example, if the OSC0 is used, set up OSC0 correctly before calling this + * function. + */ +status_t CLOCK_SetMcgConfig(mcg_config_t const *config); + +/*@}*/ + +#if defined(__cplusplus) +} +#endif /* __cplusplus */ + +/*! @} */ + +#endif /* _FSL_CLOCK_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_cmp.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_cmp.c new file mode 100644 index 00000000000..557a0c58202 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_cmp.c @@ -0,0 +1,279 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_cmp.h" + +/******************************************************************************* + * Prototypes + ******************************************************************************/ +/*! + * @brief Get instance number for CMP module. + * + * @param base CMP peripheral base address + */ +static uint32_t CMP_GetInstance(CMP_Type *base); + +/******************************************************************************* + * Variables + ******************************************************************************/ +/*! @brief Pointers to CMP bases for each instance. */ +static CMP_Type *const s_cmpBases[] = CMP_BASE_PTRS; +/*! @brief Pointers to CMP clocks for each instance. */ +static const clock_ip_name_t s_cmpClocks[] = CMP_CLOCKS; + +/******************************************************************************* + * Codes + ******************************************************************************/ +static uint32_t CMP_GetInstance(CMP_Type *base) +{ + uint32_t instance; + + /* Find the instance index from base address mappings. */ + for (instance = 0; instance < FSL_FEATURE_SOC_CMP_COUNT; instance++) + { + if (s_cmpBases[instance] == base) + { + break; + } + } + + assert(instance < FSL_FEATURE_SOC_CMP_COUNT); + + return instance; +} + +void CMP_Init(CMP_Type *base, const cmp_config_t *config) +{ + assert(NULL != config); + + uint8_t tmp8; + + /* Enable the clock. */ + CLOCK_EnableClock(s_cmpClocks[CMP_GetInstance(base)]); + + /* Configure. */ + CMP_Enable(base, false); /* Disable the CMP module during configuring. */ + /* CMPx_CR1. */ + tmp8 = base->CR1 & ~(CMP_CR1_PMODE_MASK | CMP_CR1_INV_MASK | CMP_CR1_COS_MASK | CMP_CR1_OPE_MASK); + if (config->enableHighSpeed) + { + tmp8 |= CMP_CR1_PMODE_MASK; + } + if (config->enableInvertOutput) + { + tmp8 |= CMP_CR1_INV_MASK; + } + if (config->useUnfilteredOutput) + { + tmp8 |= CMP_CR1_COS_MASK; + } + if (config->enablePinOut) + { + tmp8 |= CMP_CR1_OPE_MASK; + } +#if defined(FSL_FEATURE_CMP_HAS_TRIGGER_MODE) && FSL_FEATURE_CMP_HAS_TRIGGER_MODE + if (config->enableTriggerMode) + { + tmp8 |= CMP_CR1_TRIGM_MASK; + } + else + { + tmp8 &= ~CMP_CR1_TRIGM_MASK; + } +#endif /* FSL_FEATURE_CMP_HAS_TRIGGER_MODE */ + base->CR1 = tmp8; + + /* CMPx_CR0. */ + tmp8 = base->CR0 & ~CMP_CR0_HYSTCTR_MASK; + tmp8 |= CMP_CR0_HYSTCTR(config->hysteresisMode); + base->CR0 = tmp8; + + CMP_Enable(base, config->enableCmp); /* Enable the CMP module after configured or not. */ +} + +void CMP_Deinit(CMP_Type *base) +{ + /* Disable the CMP module. */ + CMP_Enable(base, false); + + /* Disable the clock. */ + CLOCK_DisableClock(s_cmpClocks[CMP_GetInstance(base)]); +} + +void CMP_GetDefaultConfig(cmp_config_t *config) +{ + assert(NULL != config); + + config->enableCmp = true; /* Enable the CMP module after initialization. */ + config->hysteresisMode = kCMP_HysteresisLevel0; + config->enableHighSpeed = false; + config->enableInvertOutput = false; + config->useUnfilteredOutput = false; + config->enablePinOut = false; +#if defined(FSL_FEATURE_CMP_HAS_TRIGGER_MODE) && FSL_FEATURE_CMP_HAS_TRIGGER_MODE + config->enableTriggerMode = false; +#endif /* FSL_FEATURE_CMP_HAS_TRIGGER_MODE */ +} + +void CMP_SetInputChannels(CMP_Type *base, uint8_t positiveChannel, uint8_t negativeChannel) +{ + uint8_t tmp8 = base->MUXCR; + + tmp8 &= ~(CMP_MUXCR_PSEL_MASK | CMP_MUXCR_MSEL_MASK); + tmp8 |= CMP_MUXCR_PSEL(positiveChannel) | CMP_MUXCR_MSEL(negativeChannel); + base->MUXCR = tmp8; +} + +#if defined(FSL_FEATURE_CMP_HAS_DMA) && FSL_FEATURE_CMP_HAS_DMA +void CMP_EnableDMA(CMP_Type *base, bool enable) +{ + uint8_t tmp8 = base->SCR & ~(CMP_SCR_CFR_MASK | CMP_SCR_CFF_MASK); /* To avoid change the w1c bits. */ + + if (enable) + { + tmp8 |= CMP_SCR_DMAEN_MASK; + } + else + { + tmp8 &= ~CMP_SCR_DMAEN_MASK; + } + base->SCR = tmp8; +} +#endif /* FSL_FEATURE_CMP_HAS_DMA */ + +void CMP_SetFilterConfig(CMP_Type *base, const cmp_filter_config_t *config) +{ + assert(NULL != config); + + uint8_t tmp8; + +#if defined(FSL_FEATURE_CMP_HAS_EXTERNAL_SAMPLE_SUPPORT) && FSL_FEATURE_CMP_HAS_EXTERNAL_SAMPLE_SUPPORT + /* Choose the clock source for sampling. */ + if (config->enableSample) + { + base->CR1 |= CMP_CR1_SE_MASK; /* Choose the external SAMPLE clock. */ + } + else + { + base->CR1 &= ~CMP_CR1_SE_MASK; /* Choose the internal divided bus clock. */ + } +#endif /* FSL_FEATURE_CMP_HAS_EXTERNAL_SAMPLE_SUPPORT */ + /* Set the filter count. */ + tmp8 = base->CR0 & ~CMP_CR0_FILTER_CNT_MASK; + tmp8 |= CMP_CR0_FILTER_CNT(config->filterCount); + base->CR0 = tmp8; + /* Set the filter period. It is used as the divider to bus clock. */ + base->FPR = CMP_FPR_FILT_PER(config->filterPeriod); +} + +void CMP_SetDACConfig(CMP_Type *base, const cmp_dac_config_t *config) +{ + uint8_t tmp8 = 0U; + + if (NULL == config) + { + /* Passing "NULL" as input parameter means no available configuration. So the DAC feature is disabled.*/ + base->DACCR = 0U; + return; + } + /* CMPx_DACCR. */ + tmp8 |= CMP_DACCR_DACEN_MASK; /* Enable the internal DAC. */ + if (kCMP_VrefSourceVin2 == config->referenceVoltageSource) + { + tmp8 |= CMP_DACCR_VRSEL_MASK; + } + tmp8 |= CMP_DACCR_VOSEL(config->DACValue); + + base->DACCR = tmp8; +} + +void CMP_EnableInterrupts(CMP_Type *base, uint32_t mask) +{ + uint8_t tmp8 = base->SCR & ~(CMP_SCR_CFR_MASK | CMP_SCR_CFF_MASK); /* To avoid change the w1c bits. */ + + if (0U != (kCMP_OutputRisingInterruptEnable & mask)) + { + tmp8 |= CMP_SCR_IER_MASK; + } + if (0U != (kCMP_OutputFallingInterruptEnable & mask)) + { + tmp8 |= CMP_SCR_IEF_MASK; + } + base->SCR = tmp8; +} + +void CMP_DisableInterrupts(CMP_Type *base, uint32_t mask) +{ + uint8_t tmp8 = base->SCR & ~(CMP_SCR_CFR_MASK | CMP_SCR_CFF_MASK); /* To avoid change the w1c bits. */ + + if (0U != (kCMP_OutputRisingInterruptEnable & mask)) + { + tmp8 &= ~CMP_SCR_IER_MASK; + } + if (0U != (kCMP_OutputFallingInterruptEnable & mask)) + { + tmp8 &= ~CMP_SCR_IEF_MASK; + } + base->SCR = tmp8; +} + +uint32_t CMP_GetStatusFlags(CMP_Type *base) +{ + uint32_t ret32 = 0U; + + if (0U != (CMP_SCR_CFR_MASK & base->SCR)) + { + ret32 |= kCMP_OutputRisingEventFlag; + } + if (0U != (CMP_SCR_CFF_MASK & base->SCR)) + { + ret32 |= kCMP_OutputFallingEventFlag; + } + if (0U != (CMP_SCR_COUT_MASK & base->SCR)) + { + ret32 |= kCMP_OutputAssertEventFlag; + } + return ret32; +} + +void CMP_ClearStatusFlags(CMP_Type *base, uint32_t mask) +{ + uint8_t tmp8 = base->SCR & ~(CMP_SCR_CFR_MASK | CMP_SCR_CFF_MASK); /* To avoid change the w1c bits. */ + + if (0U != (kCMP_OutputRisingEventFlag & mask)) + { + tmp8 |= CMP_SCR_CFR_MASK; + } + if (0U != (kCMP_OutputFallingEventFlag & mask)) + { + tmp8 |= CMP_SCR_CFF_MASK; + } + base->SCR = tmp8; +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_cmp.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_cmp.h new file mode 100644 index 00000000000..4c85bba3917 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_cmp.h @@ -0,0 +1,345 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _FSL_CMP_H_ +#define _FSL_CMP_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup cmp + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief CMP driver version 2.0.0. */ +#define FSL_CMP_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) +/*@}*/ + +/*! +* @brief Interrupt enable/disable mask. +*/ +enum _cmp_interrupt_enable +{ + kCMP_OutputRisingInterruptEnable = CMP_SCR_IER_MASK, /*!< Comparator interrupt enable rising. */ + kCMP_OutputFallingInterruptEnable = CMP_SCR_IEF_MASK, /*!< Comparator interrupt enable falling. */ +}; + +/*! + * @brief Status flags' mask. + */ +enum _cmp_status_flags +{ + kCMP_OutputRisingEventFlag = CMP_SCR_CFR_MASK, /*!< Rising-edge on compare output has occurred. */ + kCMP_OutputFallingEventFlag = CMP_SCR_CFF_MASK, /*!< Falling-edge on compare output has occurred. */ + kCMP_OutputAssertEventFlag = CMP_SCR_COUT_MASK, /*!< Return the current value of the analog comparator output. */ +}; + +/*! + * @brief CMP Hysteresis mode. + */ +typedef enum _cmp_hysteresis_mode +{ + kCMP_HysteresisLevel0 = 0U, /*!< Hysteresis level 0. */ + kCMP_HysteresisLevel1 = 1U, /*!< Hysteresis level 1. */ + kCMP_HysteresisLevel2 = 2U, /*!< Hysteresis level 2. */ + kCMP_HysteresisLevel3 = 3U, /*!< Hysteresis level 3. */ +} cmp_hysteresis_mode_t; + +/*! + * @brief CMP Voltage Reference source. + */ +typedef enum _cmp_reference_voltage_source +{ + kCMP_VrefSourceVin1 = 0U, /*!< Vin1 is selected as resistor ladder network supply reference Vin. */ + kCMP_VrefSourceVin2 = 1U, /*!< Vin2 is selected as resistor ladder network supply reference Vin. */ +} cmp_reference_voltage_source_t; + +/*! + * @brief Configuration for the comparator. + */ +typedef struct _cmp_config +{ + bool enableCmp; /*!< Enable the CMP module. */ + cmp_hysteresis_mode_t hysteresisMode; /*!< CMP Hysteresis mode. */ + bool enableHighSpeed; /*!< Enable High-speed comparison mode. */ + bool enableInvertOutput; /*!< Enable inverted comparator output. */ + bool useUnfilteredOutput; /*!< Set compare output(COUT) to equal COUTA(true) or COUT(false). */ + bool enablePinOut; /*!< The comparator output is available on the associated pin. */ +#if defined(FSL_FEATURE_CMP_HAS_TRIGGER_MODE) && FSL_FEATURE_CMP_HAS_TRIGGER_MODE + bool enableTriggerMode; /*!< Enable the trigger mode. */ +#endif /* FSL_FEATURE_CMP_HAS_TRIGGER_MODE */ +} cmp_config_t; + +/*! + * @brief Configuration for the filter. + */ +typedef struct _cmp_filter_config +{ +#if defined(FSL_FEATURE_CMP_HAS_EXTERNAL_SAMPLE_SUPPORT) && FSL_FEATURE_CMP_HAS_EXTERNAL_SAMPLE_SUPPORT + bool enableSample; /*!< Using external SAMPLE as sampling clock input, or using divided bus clock. */ +#endif /* FSL_FEATURE_CMP_HAS_EXTERNAL_SAMPLE_SUPPORT */ + uint8_t filterCount; /*!< Filter Sample Count. Available range is 1-7, 0 would cause the filter disabled.*/ + uint8_t filterPeriod; /*!< Filter Sample Period. The divider to bus clock. Available range is 0-255. */ +} cmp_filter_config_t; + +/*! + * @brief Configuration for the internal DAC. + */ +typedef struct _cmp_dac_config +{ + cmp_reference_voltage_source_t referenceVoltageSource; /*!< Supply voltage reference source. */ + uint8_t DACValue; /*!< Value for DAC Output Voltage. Available range is 0-63.*/ +} cmp_dac_config_t; + +#if defined(__cplusplus) +extern "C" { +#endif + +/******************************************************************************* + * API + ******************************************************************************/ + +/*! + * @name Initialization + * @{ + */ + +/*! + * @brief Initializes the CMP. + * + * This function initializes the CMP module. The operations included are: + * - Enabling the clock for CMP module. + * - Configuring the comparator. + * - Enabling the CMP module. + * Note: For some devices, multiple CMP instance share the same clock gate. In this case, to enable the clock for + * any instance enables all the CMPs. Check the chip reference manual for the clock assignment of the CMP. + * + * @param base CMP peripheral base address. + * @param config Pointer to configuration structure. + */ +void CMP_Init(CMP_Type *base, const cmp_config_t *config); + +/*! + * @brief De-initializes the CMP module. + * + * This function de-initializes the CMP module. The operations included are: + * - Disabling the CMP module. + * - Disabling the clock for CMP module. + * + * This function disables the clock for the CMP. + * Note: For some devices, multiple CMP instance shares the same clock gate. In this case, before disabling the + * clock for the CMP, ensure that all the CMP instances are not used. + * + * @param base CMP peripheral base address. + */ +void CMP_Deinit(CMP_Type *base); + +/*! + * @brief Enables/disables the CMP module. + * + * @param base CMP peripheral base address. + * @param enable Enable the module or not. + */ +static inline void CMP_Enable(CMP_Type *base, bool enable) +{ + if (enable) + { + base->CR1 |= CMP_CR1_EN_MASK; + } + else + { + base->CR1 &= ~CMP_CR1_EN_MASK; + } +} + +/*! +* @brief Initializes the CMP user configuration structure. +* +* This function initializes the user configuration structure to these default values: +* @code +* config->enableCmp = true; +* config->hysteresisMode = kCMP_HysteresisLevel0; +* config->enableHighSpeed = false; +* config->enableInvertOutput = false; +* config->useUnfilteredOutput = false; +* config->enablePinOut = false; +* config->enableTriggerMode = false; +* @endcode +* @param config Pointer to the configuration structure. +*/ +void CMP_GetDefaultConfig(cmp_config_t *config); + +/*! + * @brief Sets the input channels for the comparator. + * + * This function sets the input channels for the comparator. + * Note that two input channels cannot be set as same in the application. When the user selects the same input + * from the analog mux to the positive and negative port, the comparator is disabled automatically. + * + * @param base CMP peripheral base address. + * @param positiveChannel Positive side input channel number. Available range is 0-7. + * @param negativeChannel Negative side input channel number. Available range is 0-7. + */ +void CMP_SetInputChannels(CMP_Type *base, uint8_t positiveChannel, uint8_t negativeChannel); + +/* @} */ + +/*! + * @name Advanced Features + * @{ + */ + +#if defined(FSL_FEATURE_CMP_HAS_DMA) && FSL_FEATURE_CMP_HAS_DMA +/*! + * @brief Enables/disables the DMA request for rising/falling events. + * + * This function enables/disables the DMA request for rising/falling events. Either event triggers the generation of + * the DMA + * request from CMP if the DMA feature is enabled. Both events are ignored for generating the DMA request from the CMP + * if the + * DMA is disabled. + * + * @param base CMP peripheral base address. + * @param enable Enable the feature or not. + */ +void CMP_EnableDMA(CMP_Type *base, bool enable); +#endif /* FSL_FEATURE_CMP_HAS_DMA */ + +#if defined(FSL_FEATURE_CMP_HAS_WINDOW_MODE) && FSL_FEATURE_CMP_HAS_WINDOW_MODE +/*! + * @brief Enables/disables the window mode. + * + * @param base CMP peripheral base address. + * @param enable Enable the feature or not. + */ +static inline void CMP_EnableWindowMode(CMP_Type *base, bool enable) +{ + if (enable) + { + base->CR1 |= CMP_CR1_WE_MASK; + } + else + { + base->CR1 &= ~CMP_CR1_WE_MASK; + } +} +#endif /* FSL_FEATURE_CMP_HAS_WINDOW_MODE */ + +#if defined(FSL_FEATURE_CMP_HAS_PASS_THROUGH_MODE) && FSL_FEATURE_CMP_HAS_PASS_THROUGH_MODE +/*! + * @brief Enables/disables the pass through mode. + * + * @param base CMP peripheral base address. + * @param enable Enable the feature or not. + */ +static inline void CMP_EnablePassThroughMode(CMP_Type *base, bool enable) +{ + if (enable) + { + base->MUXCR |= CMP_MUXCR_PSTM_MASK; + } + else + { + base->MUXCR &= ~CMP_MUXCR_PSTM_MASK; + } +} +#endif /* FSL_FEATURE_CMP_HAS_PASS_THROUGH_MODE */ + +/*! + * @brief Configures the filter. + * + * @param base CMP peripheral base address. + * @param config Pointer to configuration structure. + */ +void CMP_SetFilterConfig(CMP_Type *base, const cmp_filter_config_t *config); + +/*! + * @brief Configures the internal DAC. + * + * @param base CMP peripheral base address. + * @param config Pointer to configuration structure. "NULL" is for disabling the feature. + */ +void CMP_SetDACConfig(CMP_Type *base, const cmp_dac_config_t *config); + +/*! + * @brief Enables the interrupts. + * + * @param base CMP peripheral base address. + * @param mask Mask value for interrupts. See "_cmp_interrupt_enable". + */ +void CMP_EnableInterrupts(CMP_Type *base, uint32_t mask); + +/*! + * @brief Disables the interrupts. + * + * @param base CMP peripheral base address. + * @param mask Mask value for interrupts. See "_cmp_interrupt_enable". + */ +void CMP_DisableInterrupts(CMP_Type *base, uint32_t mask); + +/* @} */ + +/*! + * @name Results + * @{ + */ + +/*! + * @brief Gets the status flags. + * + * @param base CMP peripheral base address. + * + * @return Mask value for the asserted flags. See "_cmp_status_flags". + */ +uint32_t CMP_GetStatusFlags(CMP_Type *base); + +/*! + * @brief Clears the status flags. + * + * @param base CMP peripheral base address. + * @param mask Mask value for the flags. See "_cmp_status_flags". + */ +void CMP_ClearStatusFlags(CMP_Type *base, uint32_t mask); + +/* @} */ +#if defined(__cplusplus) +} +#endif +/*! + * @} + */ +#endif /* _FSL_CMP_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_common.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_common.c new file mode 100644 index 00000000000..9e21f7594d0 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_common.c @@ -0,0 +1,101 @@ +/* +* Copyright (c) 2015, Freescale Semiconductor, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without modification, +* are permitted provided that the following conditions are met: +* +* o Redistributions of source code must retain the above copyright notice, this list +* of conditions and the following disclaimer. +* +* o Redistributions in binary form must reproduce the above copyright notice, this +* list of conditions and the following disclaimer in the documentation and/or +* other materials provided with the distribution. +* +* o Neither the name of Freescale Semiconductor, Inc. nor the names of its +* contributors may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "fsl_common.h" +/* This is not needed for mbed */ +#if 0 +#include "fsl_debug_console.h" + +#ifndef NDEBUG +#if (defined(__CC_ARM)) || (defined(__ICCARM__)) +void __aeabi_assert(const char *failedExpr, const char *file, int line) +{ + PRINTF("ASSERT ERROR \" %s \": file \"%s\" Line \"%d\" \n", failedExpr, file, line); + for (;;) + { + __asm("bkpt #0"); + } +} +#elif(defined(__GNUC__)) +void __assert_func(const char *file, int line, const char *func, const char *failedExpr) +{ + PRINTF("ASSERT ERROR \" %s \": file \"%s\" Line \"%d\" function name \"%s\" \n", failedExpr, file, line, func); + for (;;) + { + __asm("bkpt #0"); + } +} +#endif /* (defined(__CC_ARM)) || (defined (__ICCARM__)) */ +#endif /* NDEBUG */ +#endif +void InstallIRQHandler(IRQn_Type irq, uint32_t irqHandler) +{ +/* Addresses for VECTOR_TABLE and VECTOR_RAM come from the linker file */ +#if defined(__CC_ARM) + extern uint32_t Image$$VECTOR_ROM$$Base[]; + extern uint32_t Image$$VECTOR_RAM$$Base[]; + extern uint32_t Image$$RW_m_data$$Base[]; + +#define __VECTOR_TABLE Image$$VECTOR_ROM$$Base +#define __VECTOR_RAM Image$$VECTOR_RAM$$Base +#define __RAM_VECTOR_TABLE_SIZE (((uint32_t)Image$$RW_m_data$$Base - (uint32_t)Image$$VECTOR_RAM$$Base)) +#elif defined(__ICCARM__) + extern uint32_t __RAM_VECTOR_TABLE_SIZE[]; + extern uint32_t __VECTOR_TABLE[]; + extern uint32_t __VECTOR_RAM[]; +#elif defined(__GNUC__) + extern uint32_t __VECTOR_TABLE[]; + extern uint32_t __VECTOR_RAM[]; + extern uint32_t __RAM_VECTOR_TABLE_SIZE_BYTES[]; + uint32_t __RAM_VECTOR_TABLE_SIZE = (uint32_t)(__RAM_VECTOR_TABLE_SIZE_BYTES); +#endif /* defined(__CC_ARM) */ + uint32_t n; + uint32_t interrupts_disabled; + + interrupts_disabled = __get_PRIMASK(); + __disable_irq(); + if (SCB->VTOR != (uint32_t)__VECTOR_RAM) + { + /* Copy the vector table from ROM to RAM */ + for (n = 0; n < ((uint32_t)__RAM_VECTOR_TABLE_SIZE) / sizeof(uint32_t); n++) + { + __VECTOR_RAM[n] = __VECTOR_TABLE[n]; + } + /* Point the VTOR to the position of vector table */ + SCB->VTOR = (uint32_t)__VECTOR_RAM; + } + + /* make sure the __VECTOR_RAM is noncachable */ + __VECTOR_RAM[irq + 16] = irqHandler; + + if (!interrupts_disabled) { + __enable_irq(); + } +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_common.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_common.h new file mode 100644 index 00000000000..a843078c6df --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_common.h @@ -0,0 +1,254 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _FSL_COMMON_H_ +#define _FSL_COMMON_H_ + +#include +#include +#include +#include +#include "fsl_device_registers.h" + +/*! + * @addtogroup ksdk_common + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @brief Construct a status code value from a group and code number. */ +#define MAKE_STATUS(group, code) ((((group)*100) + (code))) + +/*! @brief Construct the version number for drivers. */ +#define MAKE_VERSION(major, minor, bugfix) (((major) << 16) | ((minor) << 8) | (bugfix)) + +/* Debug console type definition. */ +#define DEBUG_CONSOLE_DEVICE_TYPE_NONE 0U /*!< No debug console. */ +#define DEBUG_CONSOLE_DEVICE_TYPE_UART 1U /*!< Debug console base on UART. */ +#define DEBUG_CONSOLE_DEVICE_TYPE_LPUART 2U /*!< Debug console base on LPUART. */ +#define DEBUG_CONSOLE_DEVICE_TYPE_LPSCI 3U /*!< Debug console base on LPSCI. */ +#define DEBUG_CONSOLE_DEVICE_TYPE_USBCDC 4U /*!< Debug console base on USBCDC. */ + +/*! @brief Status group numbers. */ +enum _status_groups +{ + kStatusGroup_Generic = 0, /*!< Group number for generic status codes. */ + kStatusGroup_FLASH = 1, /*!< Group number for FLASH status codes. */ + kStatusGroup_LPSPI = 4, /*!< Group number for LPSPI status codes. */ + kStatusGroup_FLEXIO_SPI = 5, /*!< Group number for FLEXIO SPI status codes. */ + kStatusGroup_DSPI = 6, /*!< Group number for DSPI status codes. */ + kStatusGroup_FLEXIO_UART = 7, /*!< Group number for FLEXIO UART status codes. */ + kStatusGroup_FLEXIO_I2C = 8, /*!< Group number for FLEXIO I2C status codes. */ + kStatusGroup_LPI2C = 9, /*!< Group number for LPI2C status codes. */ + kStatusGroup_UART = 10, /*!< Group number for UART status codes. */ + kStatusGroup_I2C = 11, /*!< Group number for UART status codes. */ + kStatusGroup_LPSCI = 12, /*!< Group number for LPSCI status codes. */ + kStatusGroup_LPUART = 13, /*!< Group number for LPUART status codes. */ + kStatusGroup_SPI = 14, /*!< Group number for SPI status code.*/ + kStatusGroup_XRDC = 15, /*!< Group number for XRDC status code.*/ + kStatusGroup_SEMA42 = 16, /*!< Group number for SEMA42 status code.*/ + kStatusGroup_SDHC = 17, /*!< Group number for SDHC status code */ + kStatusGroup_SDMMC = 18, /*!< Group number for SDMMC status code */ + kStatusGroup_SAI = 19, /*!< Group number for SAI status code */ + kStatusGroup_MCG = 20, /*!< Group number for MCG status codes. */ + kStatusGroup_SCG = 21, /*!< Group number for SCG status codes. */ + kStatusGroup_SDSPI = 22, /*!< Group number for SDSPI status codes. */ + kStatusGroup_FLEXIO_I2S = 23, /*!< Group number for FLEXIO I2S status codes */ + kStatusGroup_SDRAMC = 35, /*!< Group number for SDRAMC status codes. */ + kStatusGroup_POWER = 39, /*!< Group number for POWER status codes. */ + kStatusGroup_ENET = 40, /*!< Group number for ENET status codes. */ + kStatusGroup_PHY = 41, /*!< Group number for PHY status codes. */ + kStatusGroup_TRGMUX = 42, /*!< Group number for TRGMUX status codes. */ + kStatusGroup_SMARTCARD = 43, /*!< Group number for SMARTCARD status codes. */ + kStatusGroup_LMEM = 44, /*!< Group number for LMEM status codes. */ + kStatusGroup_QSPI = 45, /*!< Group number for QSPI status codes. */ + kStatusGroup_DMA = 50, /*!< Group number for DMA status codes. */ + kStatusGroup_EDMA = 51, /*!< Group number for EDMA status codes. */ + kStatusGroup_DMAMGR = 52, /*!< Group number for DMAMGR status codes. */ + kStatusGroup_FLEXCAN = 53, /*!< Group number for FlexCAN status codes. */ + kStatusGroup_LTC = 54, /*!< Group number for LTC status codes. */ + kStatusGroup_FLEXIO_CAMERA = 55, /*!< Group number for FLEXIO CAMERA status codes. */ + kStatusGroup_NOTIFIER = 98, /*!< Group number for NOTIFIER status codes. */ + kStatusGroup_DebugConsole = 99, /*!< Group number for debug console status codes. */ + kStatusGroup_ApplicationRangeStart = 100, /*!< Starting number for application groups. */ +}; + +/*! @brief Generic status return codes. */ +enum _generic_status +{ + kStatus_Success = MAKE_STATUS(kStatusGroup_Generic, 0), + kStatus_Fail = MAKE_STATUS(kStatusGroup_Generic, 1), + kStatus_ReadOnly = MAKE_STATUS(kStatusGroup_Generic, 2), + kStatus_OutOfRange = MAKE_STATUS(kStatusGroup_Generic, 3), + kStatus_InvalidArgument = MAKE_STATUS(kStatusGroup_Generic, 4), + kStatus_Timeout = MAKE_STATUS(kStatusGroup_Generic, 5), + kStatus_NoTransferInProgress = MAKE_STATUS(kStatusGroup_Generic, 6), +}; + +/*! @brief Type used for all status and error return values. */ +typedef int32_t status_t; + +/* + * The fsl_clock.h is included here because it needs MAKE_VERSION/MAKE_STATUS/status_t + * defined in previous of this file. + */ +#include "fsl_clock.h" + +/*! @name Min/max macros */ +/* @{ */ +#if !defined(MIN) +#define MIN(a, b) ((a) < (b) ? (a) : (b)) +#endif + +#if !defined(MAX) +#define MAX(a, b) ((a) > (b) ? (a) : (b)) +#endif +/* @} */ + +/*! @brief Computes the number of elements in an array. */ +#define ARRAY_SIZE(x) (sizeof(x) / sizeof((x)[0])) + +/*! @name UINT16_MAX/UINT32_MAX value */ +/* @{ */ +#if !defined(UINT16_MAX) +#define UINT16_MAX ((uint16_t)-1) +#endif + +#if !defined(UINT32_MAX) +#define UINT32_MAX ((uint32_t)-1) +#endif +/* @} */ + +/*! @name Timer utilities */ +/* @{ */ +/*! Macro to convert a microsecond period to raw count value */ +#define USEC_TO_COUNT(us, clockFreqInHz) (uint64_t)((uint64_t)us * clockFreqInHz / 1000000U) +/*! Macro to convert a raw count value to microsecond */ +#define COUNT_TO_USEC(count, clockFreqInHz) (uint64_t)((uint64_t)count * 1000000U / clockFreqInHz) + +/*! Macro to convert a millisecond period to raw count value */ +#define MSEC_TO_COUNT(ms, clockFreqInHz) (uint64_t)((uint64_t)ms * clockFreqInHz / 1000U) +/*! Macro to convert a raw count value to millisecond */ +#define COUNT_TO_MSEC(count, clockFreqInHz) (uint64_t)((uint64_t)count * 1000U / clockFreqInHz) +/* @} */ + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @brief Enable specific interrupt. + * + * Enable the interrupt not routed from intmux. + * + * @param interrupt The IRQ number. + */ +static inline void EnableIRQ(IRQn_Type interrupt) +{ +#if defined(FSL_FEATURE_SOC_INTMUX_COUNT) && (FSL_FEATURE_SOC_INTMUX_COUNT > 0) + if (interrupt < FSL_FEATURE_INTMUX_IRQ_START_INDEX) +#endif + { + NVIC_EnableIRQ(interrupt); + } +} + +/*! + * @brief Disable specific interrupt. + * + * Disable the interrupt not routed from intmux. + * + * @param interrupt The IRQ number. + */ +static inline void DisableIRQ(IRQn_Type interrupt) +{ +#if defined(FSL_FEATURE_SOC_INTMUX_COUNT) && (FSL_FEATURE_SOC_INTMUX_COUNT > 0) + if (interrupt < FSL_FEATURE_INTMUX_IRQ_START_INDEX) +#endif + { + NVIC_DisableIRQ(interrupt); + } +} + +/*! + * @brief Disable the global IRQ + * + * Disable the global interrupt and return the current primask register. User is required to provided the primask + * register for the EnableGlobalIRQ(). + * + * @return Current primask value. + */ +static inline uint32_t DisableGlobalIRQ(void) +{ + uint32_t regPrimask = __get_PRIMASK(); + + __disable_irq(); + + return regPrimask; +} + +/*! + * @brief Enaable the global IRQ + * + * Set the primask register with the provided primask value but not just enable the primask. The idea is for the + * convinience of integration of RTOS. some RTOS get its own management mechanism of primask. User is required to + * use the EnableGlobalIRQ() and DisableGlobalIRQ() in pair. + * + * @param primask value of primask register to be restored. The primask value is supposed to be provided by the + * DisableGlobalIRQ(). + */ +static inline void EnableGlobalIRQ(uint32_t primask) +{ + __set_PRIMASK(primask); +} + +/*! + * @brief install IRQ handler + * + * @param irq IRQ number + * @param irqHandler IRQ handler address + */ +void InstallIRQHandler(IRQn_Type irq, uint32_t irqHandler); + +#if defined(__cplusplus) +} +#endif + +/*! @} */ + +#endif /* _FSL_COMMON_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_crc.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_crc.c new file mode 100644 index 00000000000..de86e3297a7 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_crc.c @@ -0,0 +1,280 @@ +/* + * Copyright (c) 2015-2016, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "fsl_crc.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ +/*! @internal @brief Has data register with name CRC. */ +#if defined(FSL_FEATURE_CRC_HAS_CRC_REG) && FSL_FEATURE_CRC_HAS_CRC_REG +#define DATA CRC +#define DATALL CRCLL +#endif + +#if defined(CRC_DRIVER_USE_CRC16_CCIT_FALSE_AS_DEFAULT) && CRC_DRIVER_USE_CRC16_CCIT_FALSE_AS_DEFAULT +/* @brief Default user configuration structure for CRC-16-CCITT */ +#define CRC_DRIVER_DEFAULT_POLYNOMIAL 0x1021U +/*< CRC-16-CCIT polynomial x**16 + x**12 + x**5 + x**0 */ +#define CRC_DRIVER_DEFAULT_SEED 0xFFFFU +/*< Default initial checksum */ +#define CRC_DRIVER_DEFAULT_REFLECT_IN false +/*< Default is no transpose */ +#define CRC_DRIVER_DEFAULT_REFLECT_OUT false +/*< Default is transpose bytes */ +#define CRC_DRIVER_DEFAULT_COMPLEMENT_CHECKSUM false +/*< Default is without complement of CRC data register read data */ +#define CRC_DRIVER_DEFAULT_CRC_BITS kCrcBits16 +/*< Default is 16-bit CRC protocol */ +#define CRC_DRIVER_DEFAULT_CRC_RESULT kCrcFinalChecksum +/*< Default is resutl type is final checksum */ +#endif /* CRC_DRIVER_USE_CRC16_CCIT_FALSE_AS_DEFAULT */ + +/*! @brief CRC type of transpose of read write data */ +typedef enum _crc_transpose_type +{ + kCrcTransposeNone = 0U, /*! No transpose */ + kCrcTransposeBits = 1U, /*! Tranpose bits in bytes */ + kCrcTransposeBitsAndBytes = 2U, /*! Transpose bytes and bits in bytes */ + kCrcTransposeBytes = 3U, /*! Transpose bytes */ +} crc_transpose_type_t; + +/*! +* @brief CRC module configuration. +* +* This structure holds the configuration for the CRC module. +*/ +typedef struct _crc_module_config +{ + uint32_t polynomial; /*!< CRC Polynomial, MSBit first.@n + Example polynomial: 0x1021 = 1_0000_0010_0001 = x^12+x^5+1 */ + uint32_t seed; /*!< Starting checksum value */ + crc_transpose_type_t readTranspose; /*!< Type of transpose when reading CRC result. */ + crc_transpose_type_t writeTranspose; /*!< Type of transpose when writing CRC input data. */ + bool complementChecksum; /*!< True if the result shall be complement of the actual checksum. */ + crc_bits_t crcBits; /*!< Selects 16- or 32- bit CRC protocol. */ +} crc_module_config_t; + +/******************************************************************************* + * Code + ******************************************************************************/ + +/*! + * @brief Returns transpose type for CRC protocol reflect in parameter. + * + * This functions helps to set writeTranspose member of crc_config_t structure. Reflect in is CRC protocol parameter. + * + * @param enable True or false for the selected CRC protocol Reflect In (refin) parameter. + */ +static inline crc_transpose_type_t crc_GetTransposeTypeFromReflectIn(bool enable) +{ + return ((enable) ? kCrcTransposeBitsAndBytes : kCrcTransposeBytes); +} + +/*! + * @brief Returns transpose type for CRC protocol reflect out parameter. + * + * This functions helps to set readTranspose member of crc_config_t structure. Reflect out is CRC protocol parameter. + * + * @param enable True or false for the selected CRC protocol Reflect Out (refout) parameter. + */ +static inline crc_transpose_type_t crc_GetTransposeTypeFromReflectOut(bool enable) +{ + return ((enable) ? kCrcTransposeBitsAndBytes : kCrcTransposeNone); +} + +/*! + * @brief Starts checksum computation. + * + * Configures the CRC module for the specified CRC protocol. @n + * Starts the checksum computation by writing the seed value + * + * @param base CRC peripheral address. + * @param config Pointer to protocol configuration structure. + */ +static void crc_ConfigureAndStart(CRC_Type *base, const crc_module_config_t *config) +{ + uint32_t crcControl; + + /* pre-compute value for CRC control registger based on user configuraton without WAS field */ + crcControl = 0 | CRC_CTRL_TOT(config->writeTranspose) | CRC_CTRL_TOTR(config->readTranspose) | + CRC_CTRL_FXOR(config->complementChecksum) | CRC_CTRL_TCRC(config->crcBits); + + /* make sure the control register is clear - WAS is deasserted, and protocol is set */ + base->CTRL = crcControl; + + /* write polynomial register */ + base->GPOLY = config->polynomial; + + /* write pre-computed control register value along with WAS to start checksum computation */ + base->CTRL = crcControl | CRC_CTRL_WAS(true); + + /* write seed (initial checksum) */ + base->DATA = config->seed; + + /* deassert WAS by writing pre-computed CRC control register value */ + base->CTRL = crcControl; +} + +/*! + * @brief Starts final checksum computation. + * + * Configures the CRC module for the specified CRC protocol. @n + * Starts final checksum computation by writing the seed value. + * @note CRC_Get16bitResult() or CRC_Get32bitResult() return final checksum + * (output reflection and xor functions are applied). + * + * @param base CRC peripheral address. + * @param protocolConfig Pointer to protocol configuration structure. + */ +static void crc_SetProtocolConfig(CRC_Type *base, const crc_config_t *protocolConfig) +{ + crc_module_config_t moduleConfig; + /* convert protocol to CRC peripheral module configuration, prepare for final checksum */ + moduleConfig.polynomial = protocolConfig->polynomial; + moduleConfig.seed = protocolConfig->seed; + moduleConfig.readTranspose = crc_GetTransposeTypeFromReflectOut(protocolConfig->reflectOut); + moduleConfig.writeTranspose = crc_GetTransposeTypeFromReflectIn(protocolConfig->reflectIn); + moduleConfig.complementChecksum = protocolConfig->complementChecksum; + moduleConfig.crcBits = protocolConfig->crcBits; + + crc_ConfigureAndStart(base, &moduleConfig); +} + +/*! + * @brief Starts intermediate checksum computation. + * + * Configures the CRC module for the specified CRC protocol. @n + * Starts intermediate checksum computation by writing the seed value. + * @note CRC_Get16bitResult() or CRC_Get32bitResult() return intermediate checksum (raw data register value). + * + * @param base CRC peripheral address. + * @param protocolConfig Pointer to protocol configuration structure. + */ +static void crc_SetRawProtocolConfig(CRC_Type *base, const crc_config_t *protocolConfig) +{ + crc_module_config_t moduleConfig; + /* convert protocol to CRC peripheral module configuration, prepare for intermediate checksum */ + moduleConfig.polynomial = protocolConfig->polynomial; + moduleConfig.seed = protocolConfig->seed; + moduleConfig.readTranspose = + kCrcTransposeNone; /* intermediate checksum does no transpose of data register read value */ + moduleConfig.writeTranspose = crc_GetTransposeTypeFromReflectIn(protocolConfig->reflectIn); + moduleConfig.complementChecksum = false; /* intermediate checksum does no xor of data register read value */ + moduleConfig.crcBits = protocolConfig->crcBits; + + crc_ConfigureAndStart(base, &moduleConfig); +} + +void CRC_Init(CRC_Type *base, const crc_config_t *config) +{ + /* ungate clock */ + CLOCK_EnableClock(kCLOCK_Crc0); + /* configure CRC module and write the seed */ + if (config->crcResult == kCrcFinalChecksum) + { + crc_SetProtocolConfig(base, config); + } + else + { + crc_SetRawProtocolConfig(base, config); + } +} + +void CRC_GetDefaultConfig(crc_config_t *config) +{ + static const crc_config_t crc16ccit = { + CRC_DRIVER_DEFAULT_POLYNOMIAL, CRC_DRIVER_DEFAULT_SEED, + CRC_DRIVER_DEFAULT_REFLECT_IN, CRC_DRIVER_DEFAULT_REFLECT_OUT, + CRC_DRIVER_DEFAULT_COMPLEMENT_CHECKSUM, CRC_DRIVER_DEFAULT_CRC_BITS, + CRC_DRIVER_DEFAULT_CRC_RESULT, + }; + + *config = crc16ccit; +} + +void CRC_WriteData(CRC_Type *base, const uint8_t *data, size_t dataSize) +{ + const uint32_t *data32; + + /* 8-bit reads and writes till source address is aligned 4 bytes */ + while ((dataSize) && ((uint32_t)data & 3U)) + { + base->ACCESS8BIT.DATALL = *data; + data++; + dataSize--; + } + + /* use 32-bit reads and writes as long as possible */ + data32 = (const uint32_t *)data; + while (dataSize >= sizeof(uint32_t)) + { + base->DATA = *data32; + data32++; + dataSize -= sizeof(uint32_t); + } + + data = (const uint8_t *)data32; + + /* 8-bit reads and writes till end of data buffer */ + while (dataSize) + { + base->ACCESS8BIT.DATALL = *data; + data++; + dataSize--; + } +} + +uint32_t CRC_Get32bitResult(CRC_Type *base) +{ + return base->DATA; +} + +uint16_t CRC_Get16bitResult(CRC_Type *base) +{ + uint32_t retval; + uint32_t totr; /* type of transpose read bitfield */ + + retval = base->DATA; + totr = (base->CTRL & CRC_CTRL_TOTR_MASK) >> CRC_CTRL_TOTR_SHIFT; + + /* check transpose type to get 16-bit out of 32-bit register */ + if (totr >= 2U) + { + /* transpose of bytes for read is set, the result CRC is in CRC_DATA[HU:HL] */ + retval &= 0xFFFF0000U; + retval = retval >> 16U; + } + else + { + /* no transpose of bytes for read, the result CRC is in CRC_DATA[LU:LL] */ + retval &= 0x0000FFFFU; + } + return (uint16_t)retval; +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_crc.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_crc.h new file mode 100644 index 00000000000..9d767315d47 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_crc.h @@ -0,0 +1,192 @@ +/* + * Copyright (c) 2015-2016, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _FSL_CRC_H_ +#define _FSL_CRC_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup crc + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief CRC driver version. Version 2.0.1. + * + * Current version: 2.0.1 + * + * Change log: + * - Version 2.0.1 + * - move DATA and DATALL macro definition from header file to source file + */ +#define FSL_CRC_DRIVER_VERSION (MAKE_VERSION(2, 0, 1)) +/*@}*/ + +#ifndef CRC_DRIVER_CUSTOM_DEFAULTS +/*! @brief Default configuration structure filled by CRC_GetDefaultConfig(). Use CRC16-CCIT-FALSE as defeault. */ +#define CRC_DRIVER_USE_CRC16_CCIT_FALSE_AS_DEFAULT 1 +#endif + +/*! @brief CRC bit width */ +typedef enum _crc_bits +{ + kCrcBits16 = 0U, /*!< Generate 16-bit CRC code */ + kCrcBits32 = 1U /*!< Generate 32-bit CRC code */ +} crc_bits_t; + +/*! @brief CRC result type */ +typedef enum _crc_result +{ + kCrcFinalChecksum = 0U, /*!< CRC data register read value is the final checksum. + Reflect out and final xor protocol features are applied. */ + kCrcIntermediateChecksum = 1U /*!< CRC data register read value is intermediate checksum (raw value). + Reflect out and final xor protocol feature are not applied. + Intermediate checksum can be used as a seed for CRC_Init() + to continue adding data to this checksum. */ +} crc_result_t; + +/*! +* @brief CRC protocol configuration. +* +* This structure holds the configuration for the CRC protocol. +* +*/ +typedef struct _crc_config +{ + uint32_t polynomial; /*!< CRC Polynomial, MSBit first. + Example polynomial: 0x1021 = 1_0000_0010_0001 = x^12+x^5+1 */ + uint32_t seed; /*!< Starting checksum value */ + bool reflectIn; /*!< Reflect bits on input. */ + bool reflectOut; /*!< Reflect bits on output. */ + bool complementChecksum; /*!< True if the result shall be complement of the actual checksum. */ + crc_bits_t crcBits; /*!< Selects 16- or 32- bit CRC protocol. */ + crc_result_t crcResult; /*!< Selects final or intermediate checksum return from CRC_Get16bitResult() or + CRC_Get32bitResult() */ +} crc_config_t; + +/******************************************************************************* + * API + ******************************************************************************/ +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @brief Enables and configures the CRC peripheral module. + * + * This functions enables the clock gate in the Kinetis SIM module for the CRC peripheral. + * It also configures the CRC module and starts checksum computation by writing the seed. + * + * @param base CRC peripheral address. + * @param config CRC module configuration structure + */ +void CRC_Init(CRC_Type *base, const crc_config_t *config); + +/*! + * @brief Disables the CRC peripheral module. + * + * This functions disables the clock gate in the Kinetis SIM module for the CRC peripheral. + * + * @param base CRC peripheral address. + */ +static inline void CRC_Deinit(CRC_Type *base) +{ + /* gate clock */ + CLOCK_DisableClock(kCLOCK_Crc0); +} + +/*! + * @brief Loads default values to CRC protocol configuration structure. + * + * Loads default values to CRC protocol configuration structure. The default values are: + * @code + * config->polynomial = 0x1021; + * config->seed = 0xFFFF; + * config->reflectIn = false; + * config->reflectOut = false; + * config->complementChecksum = false; + * config->crcBits = kCrcBits16; + * config->crcResult = kCrcFinalChecksum; + * @endcode + * + * @param config CRC protocol configuration structure + */ +void CRC_GetDefaultConfig(crc_config_t *config); + +/*! + * @brief Writes data to the CRC module. + * + * Writes input data buffer bytes to CRC data register. + * The configured type of transpose is applied. + * + * @param base CRC peripheral address. + * @param data Input data stream, MSByte in data[0]. + * @param dataSize Size in bytes of the input data buffer. + */ +void CRC_WriteData(CRC_Type *base, const uint8_t *data, size_t dataSize); + +/*! + * @brief Reads 32-bit checksum from the CRC module. + * + * Reads CRC data register (intermediate or final checksum). + * The configured type of transpose and complement are applied. + * + * @param base CRC peripheral address. + * @return intermediate or final 32-bit checksum, after configured transpose and complement operations. + */ +uint32_t CRC_Get32bitResult(CRC_Type *base); + +/*! + * @brief Reads 16-bit checksum from the CRC module. + * + * Reads CRC data register (intermediate or final checksum). + * The configured type of transpose and complement are applied. + * + * @param base CRC peripheral address. + * @return intermediate or final 16-bit checksum, after configured transpose and complement operations. + */ +uint16_t CRC_Get16bitResult(CRC_Type *base); + +#if defined(__cplusplus) +} +#endif + +/*! + *@} + */ + +#endif /* _FSL_CRC_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dac.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dac.c new file mode 100644 index 00000000000..55e55176649 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dac.c @@ -0,0 +1,214 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_dac.h" + +/******************************************************************************* + * Prototypes + ******************************************************************************/ +/*! + * @brief Get instance number for DAC module. + * + * @param base DAC peripheral base address + */ +static uint32_t DAC_GetInstance(DAC_Type *base); + +/******************************************************************************* + * Variables + ******************************************************************************/ +/*! @brief Pointers to DAC bases for each instance. */ +static DAC_Type *const s_dacBases[] = DAC_BASE_PTRS; +/*! @brief Pointers to DAC clocks for each instance. */ +static const clock_ip_name_t s_dacClocks[] = DAC_CLOCKS; + +/******************************************************************************* + * Codes + ******************************************************************************/ +static uint32_t DAC_GetInstance(DAC_Type *base) +{ + uint32_t instance; + + /* Find the instance index from base address mappings. */ + for (instance = 0; instance < FSL_FEATURE_SOC_DAC_COUNT; instance++) + { + if (s_dacBases[instance] == base) + { + break; + } + } + + assert(instance < FSL_FEATURE_SOC_DAC_COUNT); + + return instance; +} + +void DAC_Init(DAC_Type *base, const dac_config_t *config) +{ + assert(NULL != config); + + uint8_t tmp8; + + /* Enable the clock. */ + CLOCK_EnableClock(s_dacClocks[DAC_GetInstance(base)]); + + /* Configure. */ + /* DACx_C0. */ + tmp8 = base->C0 & ~(DAC_C0_DACRFS_MASK | DAC_C0_LPEN_MASK); + if (kDAC_ReferenceVoltageSourceVref2 == config->referenceVoltageSource) + { + tmp8 |= DAC_C0_DACRFS_MASK; + } + if (config->enableLowPowerMode) + { + tmp8 |= DAC_C0_LPEN_MASK; + } + base->C0 = tmp8; + + /* DAC_Enable(base, true); */ + /* Tip: The DAC output can be enabled till then after user sets their own available data in application. */ +} + +void DAC_Deinit(DAC_Type *base) +{ + DAC_Enable(base, false); + + /* Disable the clock. */ + CLOCK_DisableClock(s_dacClocks[DAC_GetInstance(base)]); +} + +void DAC_GetDefaultConfig(dac_config_t *config) +{ + assert(NULL != config); + + config->referenceVoltageSource = kDAC_ReferenceVoltageSourceVref2; + config->enableLowPowerMode = false; +} + +void DAC_SetBufferConfig(DAC_Type *base, const dac_buffer_config_t *config) +{ + assert(NULL != config); + + uint8_t tmp8; + + /* DACx_C0. */ + tmp8 = base->C0 & ~(DAC_C0_DACTRGSEL_MASK); + if (kDAC_BufferTriggerBySoftwareMode == config->triggerMode) + { + tmp8 |= DAC_C0_DACTRGSEL_MASK; + } + base->C0 = tmp8; + + /* DACx_C1. */ + tmp8 = base->C1 & + ~( +#if defined(FSL_FEATURE_DAC_HAS_WATERMARK_SELECTION) && FSL_FEATURE_DAC_HAS_WATERMARK_SELECTION + DAC_C1_DACBFWM_MASK | +#endif /* FSL_FEATURE_DAC_HAS_WATERMARK_SELECTION */ + DAC_C1_DACBFMD_MASK); +#if defined(FSL_FEATURE_DAC_HAS_WATERMARK_SELECTION) && FSL_FEATURE_DAC_HAS_WATERMARK_SELECTION + tmp8 |= DAC_C1_DACBFWM(config->watermark); +#endif /* FSL_FEATURE_DAC_HAS_WATERMARK_SELECTION */ + tmp8 |= DAC_C1_DACBFMD(config->workMode); + base->C1 = tmp8; + + /* DACx_C2. */ + tmp8 = base->C2 & ~DAC_C2_DACBFUP_MASK; + tmp8 |= DAC_C2_DACBFUP(config->upperLimit); + base->C2 = tmp8; +} + +void DAC_GetDefaultBufferConfig(dac_buffer_config_t *config) +{ + assert(NULL != config); + + config->triggerMode = kDAC_BufferTriggerBySoftwareMode; +#if defined(FSL_FEATURE_DAC_HAS_WATERMARK_SELECTION) && FSL_FEATURE_DAC_HAS_WATERMARK_SELECTION + config->watermark = kDAC_BufferWatermark1Word; +#endif /* FSL_FEATURE_DAC_HAS_WATERMARK_SELECTION */ + config->workMode = kDAC_BufferWorkAsNormalMode; + config->upperLimit = DAC_DATL_COUNT - 1U; +} + +void DAC_SetBufferValue(DAC_Type *base, uint8_t index, uint16_t value) +{ + assert(index < DAC_DATL_COUNT); + + base->DAT[index].DATL = (uint8_t)(0xFFU & value); /* Low 8-bit. */ + base->DAT[index].DATH = (uint8_t)((0xF00U & value) >> 8); /* High 4-bit. */ +} + +void DAC_SetBufferReadPointer(DAC_Type *base, uint8_t index) +{ + assert(index < DAC_DATL_COUNT); + + uint8_t tmp8 = base->C2 & ~DAC_C2_DACBFRP_MASK; + + tmp8 |= DAC_C2_DACBFRP(index); + base->C2 = tmp8; +} + +void DAC_EnableBufferInterrupts(DAC_Type *base, uint32_t mask) +{ + mask &= ( +#if defined(FSL_FEATURE_DAC_HAS_WATERMARK_DETECTION) && FSL_FEATURE_DAC_HAS_WATERMARK_DETECTION + DAC_C0_DACBWIEN_MASK | +#endif /* FSL_FEATURE_DAC_HAS_WATERMARK_DETECTION */ + DAC_C0_DACBTIEN_MASK | DAC_C0_DACBBIEN_MASK); + base->C0 |= ((uint8_t)mask); /* Write 1 to enable. */ +} + +void DAC_DisableBufferInterrupts(DAC_Type *base, uint32_t mask) +{ + mask &= ( +#if defined(FSL_FEATURE_DAC_HAS_WATERMARK_DETECTION) && FSL_FEATURE_DAC_HAS_WATERMARK_DETECTION + DAC_C0_DACBWIEN_MASK | +#endif /* FSL_FEATURE_DAC_HAS_WATERMARK_DETECTION */ + DAC_C0_DACBTIEN_MASK | DAC_C0_DACBBIEN_MASK); + base->C0 &= (uint8_t)(~((uint8_t)mask)); /* Write 0 to disable. */ +} + +uint32_t DAC_GetBufferStatusFlags(DAC_Type *base) +{ + return (uint32_t)(base->SR & ( +#if defined(FSL_FEATURE_DAC_HAS_WATERMARK_DETECTION) && FSL_FEATURE_DAC_HAS_WATERMARK_DETECTION + DAC_SR_DACBFWMF_MASK | +#endif /* FSL_FEATURE_DAC_HAS_WATERMARK_DETECTION */ + DAC_SR_DACBFRPTF_MASK | DAC_SR_DACBFRPBF_MASK)); +} + +void DAC_ClearBufferStatusFlags(DAC_Type *base, uint32_t mask) +{ + mask &= ( +#if defined(FSL_FEATURE_DAC_HAS_WATERMARK_DETECTION) && FSL_FEATURE_DAC_HAS_WATERMARK_DETECTION + DAC_SR_DACBFWMF_MASK | +#endif /* FSL_FEATURE_DAC_HAS_WATERMARK_DETECTION */ + DAC_SR_DACBFRPTF_MASK | DAC_SR_DACBFRPBF_MASK); + base->SR &= (uint8_t)(~((uint8_t)mask)); /* Write 0 to clear flags. */ +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dac.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dac.h new file mode 100644 index 00000000000..925ca197c5e --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dac.h @@ -0,0 +1,378 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _FSL_DAC_H_ +#define _FSL_DAC_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup dac + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief DAC driver version 2.0.1. */ +#define FSL_DAC_DRIVER_VERSION (MAKE_VERSION(2, 0, 1)) +/*@}*/ + +/*! + * @brief DAC buffer flags. + */ +enum _dac_buffer_status_flags +{ +#if defined(FSL_FEATURE_DAC_HAS_WATERMARK_DETECTION) && FSL_FEATURE_DAC_HAS_WATERMARK_DETECTION + kDAC_BufferWatermarkFlag = DAC_SR_DACBFWMF_MASK, /*!< DAC Buffer Watermark Flag. */ +#endif /* FSL_FEATURE_DAC_HAS_WATERMARK_DETECTION */ + kDAC_BufferReadPointerTopPositionFlag = DAC_SR_DACBFRPTF_MASK, /*!< DAC Buffer Read Pointer Top Position Flag. */ + kDAC_BufferReadPointerBottomPositionFlag = DAC_SR_DACBFRPBF_MASK, /*!< DAC Buffer Read Pointer Bottom Position + Flag. */ +}; + +/*! + * @brief DAC buffer interrupts. + */ +enum _dac_buffer_interrupt_enable +{ +#if defined(FSL_FEATURE_DAC_HAS_WATERMARK_DETECTION) && FSL_FEATURE_DAC_HAS_WATERMARK_DETECTION + kDAC_BufferWatermarkInterruptEnable = DAC_C0_DACBWIEN_MASK, /*!< DAC Buffer Watermark Interrupt Enable. */ +#endif /* FSL_FEATURE_DAC_HAS_WATERMARK_DETECTION */ + kDAC_BufferReadPointerTopInterruptEnable = DAC_C0_DACBTIEN_MASK, /*!< DAC Buffer Read Pointer Top Flag Interrupt + Enable. */ + kDAC_BufferReadPointerBottomInterruptEnable = DAC_C0_DACBBIEN_MASK, /*!< DAC Buffer Read Pointer Bottom Flag + Interrupt Enable */ +}; + +/*! + * @brief DAC reference voltage source. + */ +typedef enum _dac_reference_voltage_source +{ + kDAC_ReferenceVoltageSourceVref1 = 0U, /*!< The DAC selects DACREF_1 as the reference voltage. */ + kDAC_ReferenceVoltageSourceVref2 = 1U, /*!< The DAC selects DACREF_2 as the reference voltage. */ +} dac_reference_voltage_source_t; + +/*! + * @brief DAC buffer trigger mode. + */ +typedef enum _dac_buffer_trigger_mode +{ + kDAC_BufferTriggerByHardwareMode = 0U, /*!< The DAC hardware trigger is selected. */ + kDAC_BufferTriggerBySoftwareMode = 1U, /*!< The DAC software trigger is selected. */ +} dac_buffer_trigger_mode_t; + +#if defined(FSL_FEATURE_DAC_HAS_WATERMARK_SELECTION) && FSL_FEATURE_DAC_HAS_WATERMARK_SELECTION +/*! + * @brief DAC buffer watermark. + */ +typedef enum _dac_buffer_watermark +{ +#if defined(FSL_FEATURE_DAC_HAS_WATERMARK_1_WORD) && FSL_FEATURE_DAC_HAS_WATERMARK_1_WORD + kDAC_BufferWatermark1Word = 0U, /*!< 1 word away from the upper limit. */ +#endif /* FSL_FEATURE_DAC_HAS_WATERMARK_1_WORD */ +#if defined(FSL_FEATURE_DAC_HAS_WATERMARK_2_WORDS) && FSL_FEATURE_DAC_HAS_WATERMARK_2_WORDS + kDAC_BufferWatermark2Word = 1U, /*!< 2 words away from the upper limit. */ +#endif /* FSL_FEATURE_DAC_HAS_WATERMARK_2_WORDS */ +#if defined(FSL_FEATURE_DAC_HAS_WATERMARK_3_WORDS) && FSL_FEATURE_DAC_HAS_WATERMARK_3_WORDS + kDAC_BufferWatermark3Word = 2U, /*!< 3 words away from the upper limit. */ +#endif /* FSL_FEATURE_DAC_HAS_WATERMARK_3_WORDS */ +#if defined(FSL_FEATURE_DAC_HAS_WATERMARK_4_WORDS) && FSL_FEATURE_DAC_HAS_WATERMARK_4_WORDS + kDAC_BufferWatermark4Word = 3U, /*!< 4 words away from the upper limit. */ +#endif /* FSL_FEATURE_DAC_HAS_WATERMARK_4_WORDS */ +} dac_buffer_watermark_t; +#endif /* FSL_FEATURE_DAC_HAS_WATERMARK_SELECTION */ + +/*! + * @brief DAC buffer work mode. + */ +typedef enum _dac_buffer_work_mode +{ + kDAC_BufferWorkAsNormalMode = 0U, /*!< Normal mode. */ +#if defined(FSL_FEATURE_DAC_HAS_BUFFER_SWING_MODE) && FSL_FEATURE_DAC_HAS_BUFFER_SWING_MODE + kDAC_BufferWorkAsSwingMode, /*!< Swing mode. */ +#endif /* FSL_FEATURE_DAC_HAS_BUFFER_SWING_MODE */ + kDAC_BufferWorkAsOneTimeScanMode, /*!< One-Time Scan mode. */ +#if defined(FSL_FEATURE_DAC_HAS_BUFFER_FIFO_MODE) && FSL_FEATURE_DAC_HAS_BUFFER_FIFO_MODE + kDAC_BufferWorkAsFIFOMode, /*!< FIFO mode. */ +#endif /* FSL_FEATURE_DAC_HAS_BUFFER_FIFO_MODE */ +} dac_buffer_work_mode_t; + +/*! + * @brief DAC module configuration. + */ +typedef struct _dac_config +{ + dac_reference_voltage_source_t referenceVoltageSource; /*!< Select the DAC reference voltage source. */ + bool enableLowPowerMode; /*!< Enable the low-power mode. */ +} dac_config_t; + +/*! + * @brief DAC buffer configuration. + */ +typedef struct _dac_buffer_config +{ + dac_buffer_trigger_mode_t triggerMode; /*!< Select the buffer's trigger mode. */ +#if defined(FSL_FEATURE_DAC_HAS_WATERMARK_SELECTION) && FSL_FEATURE_DAC_HAS_WATERMARK_SELECTION + dac_buffer_watermark_t watermark; /*!< Select the buffer's watermark. */ +#endif /* FSL_FEATURE_DAC_HAS_WATERMARK_SELECTION */ + dac_buffer_work_mode_t workMode; /*!< Select the buffer's work mode. */ + uint8_t upperLimit; /*!< Set the upper limit for buffer index. + Normally, 0-15 is available for buffer with 16 item. */ +} dac_buffer_config_t; + +/******************************************************************************* + * API + ******************************************************************************/ +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @name Initialization + * @{ + */ + +/*! + * @brief Initializes the DAC module. + * + * This function initializes the DAC module, including: + * - Enabling the clock for DAC module. + * - Configuring the DAC converter with a user configuration. + * - Enabling the DAC module. + * + * @param base DAC peripheral base address. + * @param config Pointer to the configuration structure. See "dac_config_t". + */ +void DAC_Init(DAC_Type *base, const dac_config_t *config); + +/*! + * @brief De-initializes the DAC module. + * + * This function de-initializes the DAC module, including: + * - Disabling the DAC module. + * - Disabling the clock for the DAC module. + * + * @param base DAC peripheral base address. + */ +void DAC_Deinit(DAC_Type *base); + +/*! + * @brief Initializes the DAC user configuration structure. + * + * This function initializes the user configuration structure to a default value. The default values are: + * @code + * config->referenceVoltageSource = kDAC_ReferenceVoltageSourceVref2; + * config->enableLowPowerMode = false; + * @endcode + * @param config Pointer to the configuration structure. See "dac_config_t". + */ +void DAC_GetDefaultConfig(dac_config_t *config); + +/*! + * @brief Enables the DAC module. + * + * @param base DAC peripheral base address. + * @param enable Enables/disables the feature. + */ +static inline void DAC_Enable(DAC_Type *base, bool enable) +{ + if (enable) + { + base->C0 |= DAC_C0_DACEN_MASK; + } + else + { + base->C0 &= ~DAC_C0_DACEN_MASK; + } +} + +/* @} */ + +/*! + * @name Buffer + * @{ + */ + +/*! + * @brief Enables the DAC buffer. + * + * @param base DAC peripheral base address. + * @param enable Enables/disables the feature. + */ +static inline void DAC_EnableBuffer(DAC_Type *base, bool enable) +{ + if (enable) + { + base->C1 |= DAC_C1_DACBFEN_MASK; + } + else + { + base->C1 &= ~DAC_C1_DACBFEN_MASK; + } +} + +/*! + * @brief Configures the CMP buffer. + * + * @param base DAC peripheral base address. + * @param config Pointer to the configuration structure. See "dac_buffer_config_t". + */ +void DAC_SetBufferConfig(DAC_Type *base, const dac_buffer_config_t *config); + +/*! + * @brief Initializes the DAC buffer configuration structure. + * + * This function initializes the DAC buffer configuration structure to a default value. The default values are: + * @code + * config->triggerMode = kDAC_BufferTriggerBySoftwareMode; + * config->watermark = kDAC_BufferWatermark1Word; + * config->workMode = kDAC_BufferWorkAsNormalMode; + * config->upperLimit = DAC_DATL_COUNT - 1U; + * @endcode + * @param config Pointer to the configuration structure. See "dac_buffer_config_t". + */ +void DAC_GetDefaultBufferConfig(dac_buffer_config_t *config); + +/*! + * @brief Enables the DMA for DAC buffer. + * + * @param base DAC peripheral base address. + * @param enable Enables/disables the feature. + */ +static inline void DAC_EnableBufferDMA(DAC_Type *base, bool enable) +{ + if (enable) + { + base->C1 |= DAC_C1_DMAEN_MASK; + } + else + { + base->C1 &= ~DAC_C1_DMAEN_MASK; + } +} + +/*! + * @brief Sets the value for items in the buffer. + * + * @param base DAC peripheral base address. + * @param index Setting index for items in the buffer. The available index should not exceed the size of the DAC buffer. + * @param value Setting value for items in the buffer. 12-bits are available. + */ +void DAC_SetBufferValue(DAC_Type *base, uint8_t index, uint16_t value); + +/*! + * @brief Triggers the buffer by software and updates the read pointer of the DAC buffer. + * + * This function triggers the function by software. The read pointer of the DAC buffer is updated with one step + * after this function is called. Changing the read pointer depends on the buffer's work mode. + * + * @param base DAC peripheral base address. + */ +static inline void DAC_DoSoftwareTriggerBuffer(DAC_Type *base) +{ + base->C0 |= DAC_C0_DACSWTRG_MASK; +} + +/*! + * @brief Gets the current read pointer of the DAC buffer. + * + * This function gets the current read pointer of the DAC buffer. + * The current output value depends on the item indexed by the read pointer. It is updated + * by software trigger or hardware trigger. + * + * @param base DAC peripheral base address. + * + * @return Current read pointer of DAC buffer. + */ +static inline uint8_t DAC_GetBufferReadPointer(DAC_Type *base) +{ + return ((base->C2 & DAC_C2_DACBFRP_MASK) >> DAC_C2_DACBFRP_SHIFT); +} + +/*! + * @brief Sets the current read pointer of the DAC buffer. + * + * This function sets the current read pointer of the DAC buffer. + * The current output value depends on the item indexed by the read pointer. It is updated by + * software trigger or hardware trigger. After the read pointer changes, the DAC output value also changes. + * + * @param base DAC peripheral base address. + * @param index Setting index value for the pointer. + */ +void DAC_SetBufferReadPointer(DAC_Type *base, uint8_t index); + +/*! + * @brief Enables interrupts for the DAC buffer. + * + * @param base DAC peripheral base address. + * @param mask Mask value for interrupts. See "_dac_buffer_interrupt_enable". + */ +void DAC_EnableBufferInterrupts(DAC_Type *base, uint32_t mask); + +/*! + * @brief Disables interrupts for the DAC buffer. + * + * @param base DAC peripheral base address. + * @param mask Mask value for interrupts. See "_dac_buffer_interrupt_enable". + */ +void DAC_DisableBufferInterrupts(DAC_Type *base, uint32_t mask); + +/*! + * @brief Gets the flags of events for the DAC buffer. + * + * @param base DAC peripheral base address. + * + * @return Mask value for the asserted flags. See "_dac_buffer_status_flags". + */ +uint32_t DAC_GetBufferStatusFlags(DAC_Type *base); + +/*! + * @brief Clears the flags of events for the DAC buffer. + * + * @param base DAC peripheral base address. + * @param mask Mask value for flags. See "_dac_buffer_status_flags_t". + */ +void DAC_ClearBufferStatusFlags(DAC_Type *base, uint32_t mask); + +/* @} */ + +#if defined(__cplusplus) +} +#endif +/*! + * @} + */ +#endif /* _FSL_DAC_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dmamux.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dmamux.c new file mode 100644 index 00000000000..a288b9f22fc --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dmamux.c @@ -0,0 +1,87 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_dmamux.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/******************************************************************************* + * Prototypes + ******************************************************************************/ + +/*! + * @brief Get instance number for DMAMUX. + * + * @param base DMAMUX peripheral base address. + */ +static uint32_t DMAMUX_GetInstance(DMAMUX_Type *base); + +/******************************************************************************* + * Variables + ******************************************************************************/ + +/*! @brief Array to map DMAMUX instance number to base pointer. */ +static DMAMUX_Type *const s_dmamuxBases[] = DMAMUX_BASE_PTRS; + +/*! @brief Array to map DMAMUX instance number to clock name. */ +static const clock_ip_name_t s_dmamuxClockName[] = DMAMUX_CLOCKS; + +/******************************************************************************* + * Code + ******************************************************************************/ +static uint32_t DMAMUX_GetInstance(DMAMUX_Type *base) +{ + uint32_t instance; + + /* Find the instance index from base address mappings. */ + for (instance = 0; instance < FSL_FEATURE_SOC_DMAMUX_COUNT; instance++) + { + if (s_dmamuxBases[instance] == base) + { + break; + } + } + + assert(instance < FSL_FEATURE_SOC_DMAMUX_COUNT); + + return instance; +} + +void DMAMUX_Init(DMAMUX_Type *base) +{ + CLOCK_EnableClock(s_dmamuxClockName[DMAMUX_GetInstance(base)]); +} + +void DMAMUX_Deinit(DMAMUX_Type *base) +{ + CLOCK_DisableClock(s_dmamuxClockName[DMAMUX_GetInstance(base)]); +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dmamux.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dmamux.h new file mode 100644 index 00000000000..5dce5629166 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dmamux.h @@ -0,0 +1,175 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _FSL_DMAMUX_H_ +#define _FSL_DMAMUX_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup dmamux + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief DMAMUX driver version 2.0.1. */ +#define FSL_DMAMUX_DRIVER_VERSION (MAKE_VERSION(2, 0, 1)) +/*@}*/ + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus */ + +/*! + * @name DMAMUX Initialize and De-initialize + * @{ + */ + +/*! + * @brief Initializes DMAMUX peripheral. + * + * This function ungate the DMAMUX clock. + * + * @param base DMAMUX peripheral base address. + * + */ +void DMAMUX_Init(DMAMUX_Type *base); + +/*! + * @brief Deinitializes DMAMUX peripheral. + * + * This function gate the DMAMUX clock. + * + * @param base DMAMUX peripheral base address. + */ +void DMAMUX_Deinit(DMAMUX_Type *base); + +/* @} */ +/*! + * @name DMAMUX Channel Operation + * @{ + */ + +/*! + * @brief Enable DMAMUX channel. + * + * This function enable DMAMUX channel to work. + * + * @param base DMAMUX peripheral base address. + * @param channel DMAMUX channel number. + */ +static inline void DMAMUX_EnableChannel(DMAMUX_Type *base, uint32_t channel) +{ + assert(channel < FSL_FEATURE_DMAMUX_MODULE_CHANNEL); + + base->CHCFG[channel] |= DMAMUX_CHCFG_ENBL_MASK; +} + +/*! + * @brief Disable DMAMUX channel. + * + * This function disable DMAMUX channel. + * + * @note User must disable DMAMUX channel before configuring it. + * @param base DMAMUX peripheral base address. + * @param channel DMAMUX channel number. + */ +static inline void DMAMUX_DisableChannel(DMAMUX_Type *base, uint32_t channel) +{ + assert(channel < FSL_FEATURE_DMAMUX_MODULE_CHANNEL); + + base->CHCFG[channel] &= ~DMAMUX_CHCFG_ENBL_MASK; +} + +/*! + * @brief Configure DMAMUX channel source. + * + * @param base DMAMUX peripheral base address. + * @param channel DMAMUX channel number. + * @param source Channel source which is used to trigger DMA transfer. + */ +static inline void DMAMUX_SetSource(DMAMUX_Type *base, uint32_t channel, uint32_t source) +{ + assert(channel < FSL_FEATURE_DMAMUX_MODULE_CHANNEL); + + base->CHCFG[channel] = ((base->CHCFG[channel] & ~DMAMUX_CHCFG_SOURCE_MASK) | DMAMUX_CHCFG_SOURCE(source)); +} + +#if defined(FSL_FEATURE_DMAMUX_HAS_TRIG) && FSL_FEATURE_DMAMUX_HAS_TRIG > 0U +/*! + * @brief Enable DMAMUX period trigger. + * + * This function enable DMAMUX period trigger feature. + * + * @param base DMAMUX peripheral base address. + * @param channel DMAMUX channel number. + */ +static inline void DMAMUX_EnablePeriodTrigger(DMAMUX_Type *base, uint32_t channel) +{ + assert(channel < FSL_FEATURE_DMAMUX_MODULE_CHANNEL); + + base->CHCFG[channel] |= DMAMUX_CHCFG_TRIG_MASK; +} + +/*! + * @brief Disable DMAMUX period trigger. + * + * This function disable DMAMUX period trigger. + * + * @param base DMAMUX peripheral base address. + * @param channel DMAMUX channel number. + */ +static inline void DMAMUX_DisablePeriodTrigger(DMAMUX_Type *base, uint32_t channel) +{ + assert(channel < FSL_FEATURE_DMAMUX_MODULE_CHANNEL); + + base->CHCFG[channel] &= ~DMAMUX_CHCFG_TRIG_MASK; +} +#endif /* FSL_FEATURE_DMAMUX_HAS_TRIG */ + +/* @} */ + +#if defined(__cplusplus) +} +#endif /* __cplusplus */ + +/* @} */ + +#endif /* _FSL_DMAMUX_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dspi.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dspi.c new file mode 100644 index 00000000000..b2f28ed51ae --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dspi.c @@ -0,0 +1,1661 @@ +/* +* Copyright (c) 2015, Freescale Semiconductor, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without modification, +* are permitted provided that the following conditions are met: +* +* o Redistributions of source code must retain the above copyright notice, this list +* of conditions and the following disclaimer. +* +* o Redistributions in binary form must reproduce the above copyright notice, this +* list of conditions and the following disclaimer in the documentation and/or +* other materials provided with the distribution. +* +* o Neither the name of Freescale Semiconductor, Inc. nor the names of its +* contributors may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "fsl_dspi.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ +/*! @brief Typedef for master interrupt handler. */ +typedef void (*dspi_master_isr_t)(SPI_Type *base, dspi_master_handle_t *handle); + +/*! @brief Typedef for slave interrupt handler. */ +typedef void (*dspi_slave_isr_t)(SPI_Type *base, dspi_slave_handle_t *handle); + +/******************************************************************************* + * Prototypes + ******************************************************************************/ +/*! + * @brief Get instance number for DSPI module. + * + * @param base DSPI peripheral base address. + */ +uint32_t DSPI_GetInstance(SPI_Type *base); + +/*! + * @brief Configures the DSPI peripheral chip select polarity. + * + * This function takes in the desired peripheral chip select (Pcs) and it's corresponding desired polarity and + * configures the Pcs signal to operate with the desired characteristic. + * + * @param base DSPI peripheral address. + * @param pcs The particular peripheral chip select (parameter value is of type dspi_which_pcs_t) for which we wish to + * apply the active high or active low characteristic. + * @param activeLowOrHigh The setting for either "active high, inactive low (0)" or "active low, inactive high(1)" of + * type dspi_pcs_polarity_config_t. + */ +static void DSPI_SetOnePcsPolarity(SPI_Type *base, dspi_which_pcs_t pcs, dspi_pcs_polarity_config_t activeLowOrHigh); + +/*! + * @brief Master fill up the TX FIFO with data. + * This is not a public API as it is called from other driver functions. + */ +static void DSPI_MasterTransferFillUpTxFifo(SPI_Type *base, dspi_master_handle_t *handle); + +/*! + * @brief Master finish up a transfer. + * It would call back if there is callback function and set the state to idle. + * This is not a public API as it is called from other driver functions. + */ +static void DSPI_MasterTransferComplete(SPI_Type *base, dspi_master_handle_t *handle); + +/*! + * @brief Slave fill up the TX FIFO with data. + * This is not a public API as it is called from other driver functions. + */ +static void DSPI_SlaveTransferFillUpTxFifo(SPI_Type *base, dspi_slave_handle_t *handle); + +/*! + * @brief Slave finish up a transfer. + * It would call back if there is callback function and set the state to idle. + * This is not a public API as it is called from other driver functions. + */ +static void DSPI_SlaveTransferComplete(SPI_Type *base, dspi_slave_handle_t *handle); + +/*! + * @brief DSPI common interrupt handler. + * + * @param base DSPI peripheral address. + * @param handle pointer to g_dspiHandle which stores the transfer state. + */ +static void DSPI_CommonIRQHandler(SPI_Type *base, void *param); + +/*! + * @brief Master prepare the transfer. + * Basically it set up dspi_master_handle . + * This is not a public API as it is called from other driver functions. fsl_dspi_edma.c also call this function. + */ +static void DSPI_MasterTransferPrepare(SPI_Type *base, dspi_master_handle_t *handle, dspi_transfer_t *transfer); + +/******************************************************************************* + * Variables + ******************************************************************************/ + +/* Defines constant value arrays for the baud rate pre-scalar and scalar divider values.*/ +static const uint32_t s_baudratePrescaler[] = {2, 3, 5, 7}; +static const uint32_t s_baudrateScaler[] = {2, 4, 6, 8, 16, 32, 64, 128, + 256, 512, 1024, 2048, 4096, 8192, 16384, 32768}; + +static const uint32_t s_delayPrescaler[] = {1, 3, 5, 7}; +static const uint32_t s_delayScaler[] = {2, 4, 8, 16, 32, 64, 128, 256, + 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536}; + +/*! @brief Pointers to dspi bases for each instance. */ +static SPI_Type *const s_dspiBases[] = SPI_BASE_PTRS; + +/*! @brief Pointers to dspi IRQ number for each instance. */ +static IRQn_Type const s_dspiIRQ[] = SPI_IRQS; + +/*! @brief Pointers to dspi clocks for each instance. */ +static clock_ip_name_t const s_dspiClock[] = DSPI_CLOCKS; + +/*! @brief Pointers to dspi handles for each instance. */ +static void *g_dspiHandle[FSL_FEATURE_SOC_DSPI_COUNT]; + +/*! @brief Pointer to master IRQ handler for each instance. */ +static dspi_master_isr_t s_dspiMasterIsr; + +/*! @brief Pointer to slave IRQ handler for each instance. */ +static dspi_slave_isr_t s_dspiSlaveIsr; + +/********************************************************************************************************************** +* Code +*********************************************************************************************************************/ +uint32_t DSPI_GetInstance(SPI_Type *base) +{ + uint32_t instance; + + /* Find the instance index from base address mappings. */ + for (instance = 0; instance < FSL_FEATURE_SOC_DSPI_COUNT; instance++) + { + if (s_dspiBases[instance] == base) + { + break; + } + } + + assert(instance < FSL_FEATURE_SOC_DSPI_COUNT); + + return instance; +} + +void DSPI_MasterInit(SPI_Type *base, const dspi_master_config_t *masterConfig, uint32_t srcClock_Hz) +{ + uint32_t temp; + /* enable DSPI clock */ + CLOCK_EnableClock(s_dspiClock[DSPI_GetInstance(base)]); + + DSPI_Enable(base, true); + DSPI_StopTransfer(base); + + DSPI_SetMasterSlaveMode(base, kDSPI_Master); + + temp = base->MCR & (~(SPI_MCR_CONT_SCKE_MASK | SPI_MCR_MTFE_MASK | SPI_MCR_ROOE_MASK | SPI_MCR_SMPL_PT_MASK | + SPI_MCR_DIS_TXF_MASK | SPI_MCR_DIS_RXF_MASK)); + + base->MCR = temp | SPI_MCR_CONT_SCKE(masterConfig->enableContinuousSCK) | + SPI_MCR_MTFE(masterConfig->enableModifiedTimingFormat) | + SPI_MCR_ROOE(masterConfig->enableRxFifoOverWrite) | SPI_MCR_SMPL_PT(masterConfig->samplePoint) | + SPI_MCR_DIS_TXF(false) | SPI_MCR_DIS_RXF(false); + + DSPI_SetOnePcsPolarity(base, masterConfig->whichPcs, masterConfig->pcsActiveHighOrLow); + + if (0 == DSPI_MasterSetBaudRate(base, masterConfig->whichCtar, masterConfig->ctarConfig.baudRate, srcClock_Hz)) + { + assert(false); + } + + temp = base->CTAR[masterConfig->whichCtar] & + ~(SPI_CTAR_FMSZ_MASK | SPI_CTAR_CPOL_MASK | SPI_CTAR_CPHA_MASK | SPI_CTAR_LSBFE_MASK); + + base->CTAR[masterConfig->whichCtar] = + temp | SPI_CTAR_FMSZ(masterConfig->ctarConfig.bitsPerFrame - 1) | SPI_CTAR_CPOL(masterConfig->ctarConfig.cpol) | + SPI_CTAR_CPHA(masterConfig->ctarConfig.cpha) | SPI_CTAR_LSBFE(masterConfig->ctarConfig.direction); + + DSPI_MasterSetDelayTimes(base, masterConfig->whichCtar, kDSPI_PcsToSck, srcClock_Hz, + masterConfig->ctarConfig.pcsToSckDelayInNanoSec); + DSPI_MasterSetDelayTimes(base, masterConfig->whichCtar, kDSPI_LastSckToPcs, srcClock_Hz, + masterConfig->ctarConfig.lastSckToPcsDelayInNanoSec); + DSPI_MasterSetDelayTimes(base, masterConfig->whichCtar, kDSPI_BetweenTransfer, srcClock_Hz, + masterConfig->ctarConfig.betweenTransferDelayInNanoSec); + + DSPI_StartTransfer(base); +} + +void DSPI_MasterGetDefaultConfig(dspi_master_config_t *masterConfig) +{ + masterConfig->whichCtar = kDSPI_Ctar0; + masterConfig->ctarConfig.baudRate = 500000; + masterConfig->ctarConfig.bitsPerFrame = 8; + masterConfig->ctarConfig.cpol = kDSPI_ClockPolarityActiveHigh; + masterConfig->ctarConfig.cpha = kDSPI_ClockPhaseFirstEdge; + masterConfig->ctarConfig.direction = kDSPI_MsbFirst; + + masterConfig->ctarConfig.pcsToSckDelayInNanoSec = 1000; + masterConfig->ctarConfig.lastSckToPcsDelayInNanoSec = 1000; + masterConfig->ctarConfig.betweenTransferDelayInNanoSec = 1000; + + masterConfig->whichPcs = kDSPI_Pcs0; + masterConfig->pcsActiveHighOrLow = kDSPI_PcsActiveLow; + + masterConfig->enableContinuousSCK = false; + masterConfig->enableRxFifoOverWrite = false; + masterConfig->enableModifiedTimingFormat = false; + masterConfig->samplePoint = kDSPI_SckToSin0Clock; +} + +void DSPI_SlaveInit(SPI_Type *base, const dspi_slave_config_t *slaveConfig) +{ + uint32_t temp = 0; + + /* enable DSPI clock */ + CLOCK_EnableClock(s_dspiClock[DSPI_GetInstance(base)]); + + DSPI_Enable(base, true); + DSPI_StopTransfer(base); + + DSPI_SetMasterSlaveMode(base, kDSPI_Slave); + + temp = base->MCR & (~(SPI_MCR_CONT_SCKE_MASK | SPI_MCR_MTFE_MASK | SPI_MCR_ROOE_MASK | SPI_MCR_SMPL_PT_MASK | + SPI_MCR_DIS_TXF_MASK | SPI_MCR_DIS_RXF_MASK)); + + base->MCR = temp | SPI_MCR_CONT_SCKE(slaveConfig->enableContinuousSCK) | + SPI_MCR_MTFE(slaveConfig->enableModifiedTimingFormat) | + SPI_MCR_ROOE(slaveConfig->enableRxFifoOverWrite) | SPI_MCR_SMPL_PT(slaveConfig->samplePoint) | + SPI_MCR_DIS_TXF(false) | SPI_MCR_DIS_RXF(false); + + DSPI_SetOnePcsPolarity(base, kDSPI_Pcs0, kDSPI_PcsActiveLow); + + temp = base->CTAR[slaveConfig->whichCtar] & + ~(SPI_CTAR_FMSZ_MASK | SPI_CTAR_CPOL_MASK | SPI_CTAR_CPHA_MASK | SPI_CTAR_LSBFE_MASK); + + base->CTAR[slaveConfig->whichCtar] = temp | SPI_CTAR_SLAVE_FMSZ(slaveConfig->ctarConfig.bitsPerFrame - 1) | + SPI_CTAR_SLAVE_CPOL(slaveConfig->ctarConfig.cpol) | + SPI_CTAR_SLAVE_CPHA(slaveConfig->ctarConfig.cpha); + + DSPI_StartTransfer(base); +} + +void DSPI_SlaveGetDefaultConfig(dspi_slave_config_t *slaveConfig) +{ + slaveConfig->whichCtar = kDSPI_Ctar0; + slaveConfig->ctarConfig.bitsPerFrame = 8; + slaveConfig->ctarConfig.cpol = kDSPI_ClockPolarityActiveHigh; + slaveConfig->ctarConfig.cpha = kDSPI_ClockPhaseFirstEdge; + + slaveConfig->enableContinuousSCK = false; + slaveConfig->enableRxFifoOverWrite = false; + slaveConfig->enableModifiedTimingFormat = false; + slaveConfig->samplePoint = kDSPI_SckToSin0Clock; +} + +void DSPI_Deinit(SPI_Type *base) +{ + DSPI_StopTransfer(base); + DSPI_Enable(base, false); + + /* disable DSPI clock */ + CLOCK_DisableClock(s_dspiClock[DSPI_GetInstance(base)]); +} + +static void DSPI_SetOnePcsPolarity(SPI_Type *base, dspi_which_pcs_t pcs, dspi_pcs_polarity_config_t activeLowOrHigh) +{ + uint32_t temp; + + temp = base->MCR; + + if (activeLowOrHigh == kDSPI_PcsActiveLow) + { + temp |= SPI_MCR_PCSIS(pcs); + } + else + { + temp &= ~SPI_MCR_PCSIS(pcs); + } + + base->MCR = temp; +} + +uint32_t DSPI_MasterSetBaudRate(SPI_Type *base, + dspi_ctar_selection_t whichCtar, + uint32_t baudRate_Bps, + uint32_t srcClock_Hz) +{ + /* for master mode configuration, if slave mode detected, return 0*/ + if (!DSPI_IsMaster(base)) + { + return 0; + } + uint32_t temp; + uint32_t prescaler, bestPrescaler; + uint32_t scaler, bestScaler; + uint32_t dbr, bestDbr; + uint32_t realBaudrate, bestBaudrate; + uint32_t diff, min_diff; + uint32_t baudrate = baudRate_Bps; + + /* find combination of prescaler and scaler resulting in baudrate closest to the requested value */ + min_diff = 0xFFFFFFFFU; + bestPrescaler = 0; + bestScaler = 0; + bestDbr = 1; + bestBaudrate = 0; /* required to avoid compilation warning */ + + /* In all for loops, if min_diff = 0, the exit for loop*/ + for (prescaler = 0; (prescaler < 4) && min_diff; prescaler++) + { + for (scaler = 0; (scaler < 16) && min_diff; scaler++) + { + for (dbr = 1; (dbr < 3) && min_diff; dbr++) + { + realBaudrate = ((srcClock_Hz * dbr) / (s_baudratePrescaler[prescaler] * (s_baudrateScaler[scaler]))); + + /* calculate the baud rate difference based on the conditional statement that states that the calculated + * baud rate must not exceed the desired baud rate. + */ + if (baudrate >= realBaudrate) + { + diff = baudrate - realBaudrate; + if (min_diff > diff) + { + /* a better match found */ + min_diff = diff; + bestPrescaler = prescaler; + bestScaler = scaler; + bestBaudrate = realBaudrate; + bestDbr = dbr; + } + } + } + } + } + + /* write the best dbr, prescalar, and baud rate scalar to the CTAR */ + temp = base->CTAR[whichCtar] & ~(SPI_CTAR_DBR_MASK | SPI_CTAR_PBR_MASK | SPI_CTAR_BR_MASK); + + base->CTAR[whichCtar] = temp | ((bestDbr - 1) << SPI_CTAR_DBR_SHIFT) | (bestPrescaler << SPI_CTAR_PBR_SHIFT) | + (bestScaler << SPI_CTAR_BR_SHIFT); + + /* return the actual calculated baud rate */ + return bestBaudrate; +} + +void DSPI_MasterSetDelayScaler( + SPI_Type *base, dspi_ctar_selection_t whichCtar, uint32_t prescaler, uint32_t scaler, dspi_delay_type_t whichDelay) +{ + /* these settings are only relevant in master mode */ + if (DSPI_IsMaster(base)) + { + switch (whichDelay) + { + case kDSPI_PcsToSck: + base->CTAR[whichCtar] = (base->CTAR[whichCtar] & (~SPI_CTAR_PCSSCK_MASK) & (~SPI_CTAR_CSSCK_MASK)) | + SPI_CTAR_PCSSCK(prescaler) | SPI_CTAR_CSSCK(scaler); + break; + case kDSPI_LastSckToPcs: + base->CTAR[whichCtar] = (base->CTAR[whichCtar] & (~SPI_CTAR_PASC_MASK) & (~SPI_CTAR_ASC_MASK)) | + SPI_CTAR_PASC(prescaler) | SPI_CTAR_ASC(scaler); + break; + case kDSPI_BetweenTransfer: + base->CTAR[whichCtar] = (base->CTAR[whichCtar] & (~SPI_CTAR_PDT_MASK) & (~SPI_CTAR_DT_MASK)) | + SPI_CTAR_PDT(prescaler) | SPI_CTAR_DT(scaler); + break; + default: + break; + } + } +} + +uint32_t DSPI_MasterSetDelayTimes(SPI_Type *base, + dspi_ctar_selection_t whichCtar, + dspi_delay_type_t whichDelay, + uint32_t srcClock_Hz, + uint32_t delayTimeInNanoSec) +{ + /* for master mode configuration, if slave mode detected, return 0 */ + if (!DSPI_IsMaster(base)) + { + return 0; + } + + uint32_t prescaler, bestPrescaler; + uint32_t scaler, bestScaler; + uint32_t realDelay, bestDelay; + uint32_t diff, min_diff; + uint32_t initialDelayNanoSec; + + /* find combination of prescaler and scaler resulting in the delay closest to the + * requested value + */ + min_diff = 0xFFFFFFFFU; + /* Initialize prescaler and scaler to their max values to generate the max delay */ + bestPrescaler = 0x3; + bestScaler = 0xF; + bestDelay = (((1000000000U * 4) / srcClock_Hz) * s_delayPrescaler[bestPrescaler] * s_delayScaler[bestScaler]) / 4; + + /* First calculate the initial, default delay */ + initialDelayNanoSec = 1000000000U / srcClock_Hz * 2; + + /* If the initial, default delay is already greater than the desired delay, then + * set the delays to their initial value (0) and return the delay. In other words, + * there is no way to decrease the delay value further. + */ + if (initialDelayNanoSec >= delayTimeInNanoSec) + { + DSPI_MasterSetDelayScaler(base, whichCtar, 0, 0, whichDelay); + return initialDelayNanoSec; + } + + /* In all for loops, if min_diff = 0, the exit for loop */ + for (prescaler = 0; (prescaler < 4) && min_diff; prescaler++) + { + for (scaler = 0; (scaler < 16) && min_diff; scaler++) + { + realDelay = ((4000000000U / srcClock_Hz) * s_delayPrescaler[prescaler] * s_delayScaler[scaler]) / 4; + + /* calculate the delay difference based on the conditional statement + * that states that the calculated delay must not be less then the desired delay + */ + if (realDelay >= delayTimeInNanoSec) + { + diff = realDelay - delayTimeInNanoSec; + if (min_diff > diff) + { + /* a better match found */ + min_diff = diff; + bestPrescaler = prescaler; + bestScaler = scaler; + bestDelay = realDelay; + } + } + } + } + + /* write the best dbr, prescalar, and baud rate scalar to the CTAR */ + DSPI_MasterSetDelayScaler(base, whichCtar, bestPrescaler, bestScaler, whichDelay); + + /* return the actual calculated baud rate */ + return bestDelay; +} + +void DSPI_GetDefaultDataCommandConfig(dspi_command_data_config_t *command) +{ + command->isPcsContinuous = false; + command->whichCtar = kDSPI_Ctar0; + command->whichPcs = kDSPI_Pcs0; + command->isEndOfQueue = false; + command->clearTransferCount = false; +} + +void DSPI_MasterWriteDataBlocking(SPI_Type *base, dspi_command_data_config_t *command, uint16_t data) +{ + /* First, clear Transmit Complete Flag (TCF) */ + DSPI_ClearStatusFlags(base, kDSPI_TxCompleteFlag); + + while (!(DSPI_GetStatusFlags(base) & kDSPI_TxFifoFillRequestFlag)) + { + DSPI_ClearStatusFlags(base, kDSPI_TxFifoFillRequestFlag); + } + + base->PUSHR = SPI_PUSHR_CONT(command->isPcsContinuous) | SPI_PUSHR_CTAS(command->whichCtar) | + SPI_PUSHR_PCS(command->whichPcs) | SPI_PUSHR_EOQ(command->isEndOfQueue) | + SPI_PUSHR_CTCNT(command->clearTransferCount) | SPI_PUSHR_TXDATA(data); + DSPI_ClearStatusFlags(base, kDSPI_TxFifoFillRequestFlag); + + /* Wait till TCF sets */ + while (!(DSPI_GetStatusFlags(base) & kDSPI_TxCompleteFlag)) + { + } +} + +void DSPI_MasterWriteCommandDataBlocking(SPI_Type *base, uint32_t data) +{ + /* First, clear Transmit Complete Flag (TCF) */ + DSPI_ClearStatusFlags(base, kDSPI_TxCompleteFlag); + + while (!(DSPI_GetStatusFlags(base) & kDSPI_TxFifoFillRequestFlag)) + { + DSPI_ClearStatusFlags(base, kDSPI_TxFifoFillRequestFlag); + } + + base->PUSHR = data; + + DSPI_ClearStatusFlags(base, kDSPI_TxFifoFillRequestFlag); + + /* Wait till TCF sets */ + while (!(DSPI_GetStatusFlags(base) & kDSPI_TxCompleteFlag)) + { + } +} + +void DSPI_SlaveWriteDataBlocking(SPI_Type *base, uint32_t data) +{ + /* First, clear Transmit Complete Flag (TCF) */ + DSPI_ClearStatusFlags(base, kDSPI_TxCompleteFlag); + + while (!(DSPI_GetStatusFlags(base) & kDSPI_TxFifoFillRequestFlag)) + { + DSPI_ClearStatusFlags(base, kDSPI_TxFifoFillRequestFlag); + } + + base->PUSHR_SLAVE = data; + + DSPI_ClearStatusFlags(base, kDSPI_TxFifoFillRequestFlag); + + /* Wait till TCF sets */ + while (!(DSPI_GetStatusFlags(base) & kDSPI_TxCompleteFlag)) + { + } +} + +void DSPI_EnableInterrupts(SPI_Type *base, uint32_t mask) +{ + if (mask & SPI_RSER_TFFF_RE_MASK) + { + base->RSER &= ~SPI_RSER_TFFF_DIRS_MASK; + } + if (mask & SPI_RSER_RFDF_RE_MASK) + { + base->RSER &= ~SPI_RSER_RFDF_DIRS_MASK; + } + base->RSER |= mask; +} + +/*Transactional APIs -- Master*/ + +void DSPI_MasterTransferCreateHandle(SPI_Type *base, + dspi_master_handle_t *handle, + dspi_master_transfer_callback_t callback, + void *userData) +{ + assert(handle); + + /* Zero the handle. */ + memset(handle, 0, sizeof(*handle)); + + g_dspiHandle[DSPI_GetInstance(base)] = handle; + + handle->callback = callback; + handle->userData = userData; +} + +status_t DSPI_MasterTransferBlocking(SPI_Type *base, dspi_transfer_t *transfer) +{ + assert(transfer); + + uint16_t wordToSend = 0; + uint16_t wordReceived = 0; + uint8_t dummyData = DSPI_DUMMY_DATA; + uint8_t bitsPerFrame; + + uint32_t command; + uint32_t lastCommand; + + uint8_t *txData; + uint8_t *rxData; + uint32_t remainingSendByteCount; + uint32_t remainingReceiveByteCount; + + uint32_t fifoSize; + dspi_command_data_config_t commandStruct; + + /* If the transfer count is zero, then return immediately.*/ + if (transfer->dataSize == 0) + { + return kStatus_InvalidArgument; + } + + DSPI_StopTransfer(base); + DSPI_DisableInterrupts(base, kDSPI_AllInterruptEnable); + DSPI_FlushFifo(base, true, true); + DSPI_ClearStatusFlags(base, kDSPI_AllStatusFlag); + + /*Calculate the command and lastCommand*/ + commandStruct.whichPcs = + (dspi_which_pcs_t)(1U << ((transfer->configFlags & DSPI_MASTER_PCS_MASK) >> DSPI_MASTER_PCS_SHIFT)); + commandStruct.isEndOfQueue = false; + commandStruct.clearTransferCount = false; + commandStruct.whichCtar = + (dspi_ctar_selection_t)((transfer->configFlags & DSPI_MASTER_CTAR_MASK) >> DSPI_MASTER_CTAR_SHIFT); + commandStruct.isPcsContinuous = (bool)(transfer->configFlags & kDSPI_MasterPcsContinuous); + + command = DSPI_MasterGetFormattedCommand(&(commandStruct)); + + commandStruct.isEndOfQueue = true; + commandStruct.isPcsContinuous = (bool)(transfer->configFlags & kDSPI_MasterActiveAfterTransfer); + lastCommand = DSPI_MasterGetFormattedCommand(&(commandStruct)); + + /*Calculate the bitsPerFrame*/ + bitsPerFrame = ((base->CTAR[commandStruct.whichCtar] & SPI_CTAR_FMSZ_MASK) >> SPI_CTAR_FMSZ_SHIFT) + 1; + + txData = transfer->txData; + rxData = transfer->rxData; + remainingSendByteCount = transfer->dataSize; + remainingReceiveByteCount = transfer->dataSize; + + if ((base->MCR & SPI_MCR_DIS_RXF_MASK) || (base->MCR & SPI_MCR_DIS_TXF_MASK)) + { + fifoSize = 1; + } + else + { + fifoSize = FSL_FEATURE_DSPI_FIFO_SIZEn(base); + } + + DSPI_StartTransfer(base); + + if (bitsPerFrame <= 8) + { + while (remainingSendByteCount > 0) + { + if (remainingSendByteCount == 1) + { + while ((remainingReceiveByteCount - remainingSendByteCount) >= fifoSize) + { + if (DSPI_GetStatusFlags(base) & kDSPI_RxFifoDrainRequestFlag) + { + if (rxData != NULL) + { + *(rxData) = DSPI_ReadData(base); + rxData++; + } + else + { + DSPI_ReadData(base); + } + remainingReceiveByteCount--; + + DSPI_ClearStatusFlags(base, kDSPI_RxFifoDrainRequestFlag); + } + } + + while (!(DSPI_GetStatusFlags(base) & kDSPI_TxFifoFillRequestFlag)) + { + DSPI_ClearStatusFlags(base, kDSPI_TxFifoFillRequestFlag); + } + + if (txData != NULL) + { + base->PUSHR = (*txData) | (lastCommand); + txData++; + } + else + { + base->PUSHR = (lastCommand) | (dummyData); + } + DSPI_ClearStatusFlags(base, kDSPI_TxFifoFillRequestFlag); + remainingSendByteCount--; + + while (remainingReceiveByteCount > 0) + { + if (DSPI_GetStatusFlags(base) & kDSPI_RxFifoDrainRequestFlag) + { + if (rxData != NULL) + { + /* Read data from POPR*/ + *(rxData) = DSPI_ReadData(base); + rxData++; + } + else + { + DSPI_ReadData(base); + } + remainingReceiveByteCount--; + + DSPI_ClearStatusFlags(base, kDSPI_RxFifoDrainRequestFlag); + } + } + } + else + { + /*Wait until Tx Fifo is not full*/ + while (!(DSPI_GetStatusFlags(base) & kDSPI_TxFifoFillRequestFlag)) + { + DSPI_ClearStatusFlags(base, kDSPI_TxFifoFillRequestFlag); + } + if (txData != NULL) + { + base->PUSHR = command | (uint16_t)(*txData); + txData++; + } + else + { + base->PUSHR = command | dummyData; + } + remainingSendByteCount--; + + DSPI_ClearStatusFlags(base, kDSPI_TxFifoFillRequestFlag); + + if (DSPI_GetStatusFlags(base) & kDSPI_RxFifoDrainRequestFlag) + { + if (rxData != NULL) + { + *(rxData) = DSPI_ReadData(base); + rxData++; + } + else + { + DSPI_ReadData(base); + } + remainingReceiveByteCount--; + + DSPI_ClearStatusFlags(base, kDSPI_RxFifoDrainRequestFlag); + } + } + } + } + else + { + while (remainingSendByteCount > 0) + { + if (remainingSendByteCount <= 2) + { + while (((remainingReceiveByteCount - remainingSendByteCount) / 2) >= fifoSize) + { + if (DSPI_GetStatusFlags(base) & kDSPI_RxFifoDrainRequestFlag) + { + wordReceived = DSPI_ReadData(base); + + if (rxData != NULL) + { + *rxData = wordReceived; + ++rxData; + *rxData = wordReceived >> 8; + ++rxData; + } + remainingReceiveByteCount -= 2; + + DSPI_ClearStatusFlags(base, kDSPI_RxFifoDrainRequestFlag); + } + } + + while (!(DSPI_GetStatusFlags(base) & kDSPI_TxFifoFillRequestFlag)) + { + DSPI_ClearStatusFlags(base, kDSPI_TxFifoFillRequestFlag); + } + + if (txData != NULL) + { + wordToSend = *(txData); + ++txData; + + if (remainingSendByteCount > 1) + { + wordToSend |= (unsigned)(*(txData)) << 8U; + ++txData; + } + } + else + { + wordToSend = dummyData; + } + + base->PUSHR = lastCommand | wordToSend; + + DSPI_ClearStatusFlags(base, kDSPI_TxFifoFillRequestFlag); + remainingSendByteCount = 0; + + while (remainingReceiveByteCount > 0) + { + if (DSPI_GetStatusFlags(base) & kDSPI_RxFifoDrainRequestFlag) + { + wordReceived = DSPI_ReadData(base); + + if (remainingReceiveByteCount != 1) + { + if (rxData != NULL) + { + *(rxData) = wordReceived; + ++rxData; + *(rxData) = wordReceived >> 8; + ++rxData; + } + remainingReceiveByteCount -= 2; + } + else + { + if (rxData != NULL) + { + *(rxData) = wordReceived; + ++rxData; + } + remainingReceiveByteCount--; + } + DSPI_ClearStatusFlags(base, kDSPI_RxFifoDrainRequestFlag); + } + } + } + else + { + /*Wait until Tx Fifo is not full*/ + while (!(DSPI_GetStatusFlags(base) & kDSPI_TxFifoFillRequestFlag)) + { + DSPI_ClearStatusFlags(base, kDSPI_TxFifoFillRequestFlag); + } + + if (txData != NULL) + { + wordToSend = *(txData); + ++txData; + wordToSend |= (unsigned)(*(txData)) << 8U; + ++txData; + } + else + { + wordToSend = dummyData; + } + base->PUSHR = command | wordToSend; + remainingSendByteCount -= 2; + + DSPI_ClearStatusFlags(base, kDSPI_TxFifoFillRequestFlag); + + if (DSPI_GetStatusFlags(base) & kDSPI_RxFifoDrainRequestFlag) + { + wordReceived = DSPI_ReadData(base); + + if (rxData != NULL) + { + *rxData = wordReceived; + ++rxData; + *rxData = wordReceived >> 8; + ++rxData; + } + remainingReceiveByteCount -= 2; + + DSPI_ClearStatusFlags(base, kDSPI_RxFifoDrainRequestFlag); + } + } + } + } + + return kStatus_Success; +} + +static void DSPI_MasterTransferPrepare(SPI_Type *base, dspi_master_handle_t *handle, dspi_transfer_t *transfer) +{ + dspi_command_data_config_t commandStruct; + + DSPI_StopTransfer(base); + DSPI_FlushFifo(base, true, true); + DSPI_ClearStatusFlags(base, kDSPI_AllStatusFlag); + + commandStruct.whichPcs = + (dspi_which_pcs_t)(1U << ((transfer->configFlags & DSPI_MASTER_PCS_MASK) >> DSPI_MASTER_PCS_SHIFT)); + commandStruct.isEndOfQueue = false; + commandStruct.clearTransferCount = false; + commandStruct.whichCtar = + (dspi_ctar_selection_t)((transfer->configFlags & DSPI_MASTER_CTAR_MASK) >> DSPI_MASTER_CTAR_SHIFT); + commandStruct.isPcsContinuous = (bool)(transfer->configFlags & kDSPI_MasterPcsContinuous); + handle->command = DSPI_MasterGetFormattedCommand(&(commandStruct)); + + commandStruct.isEndOfQueue = true; + commandStruct.isPcsContinuous = (bool)(transfer->configFlags & kDSPI_MasterActiveAfterTransfer); + handle->lastCommand = DSPI_MasterGetFormattedCommand(&(commandStruct)); + + handle->bitsPerFrame = ((base->CTAR[commandStruct.whichCtar] & SPI_CTAR_FMSZ_MASK) >> SPI_CTAR_FMSZ_SHIFT) + 1; + + if ((base->MCR & SPI_MCR_DIS_RXF_MASK) || (base->MCR & SPI_MCR_DIS_TXF_MASK)) + { + handle->fifoSize = 1; + } + else + { + handle->fifoSize = FSL_FEATURE_DSPI_FIFO_SIZEn(base); + } + handle->txData = transfer->txData; + handle->rxData = transfer->rxData; + handle->remainingSendByteCount = transfer->dataSize; + handle->remainingReceiveByteCount = transfer->dataSize; + handle->totalByteCount = transfer->dataSize; +} + +status_t DSPI_MasterTransferNonBlocking(SPI_Type *base, dspi_master_handle_t *handle, dspi_transfer_t *transfer) +{ + assert(handle && transfer); + + /* If the transfer count is zero, then return immediately.*/ + if (transfer->dataSize == 0) + { + return kStatus_InvalidArgument; + } + + /* Check that we're not busy.*/ + if (handle->state == kDSPI_Busy) + { + return kStatus_DSPI_Busy; + } + + handle->state = kDSPI_Busy; + + DSPI_MasterTransferPrepare(base, handle, transfer); + DSPI_StartTransfer(base); + + /* Enable the NVIC for DSPI peripheral. */ + EnableIRQ(s_dspiIRQ[DSPI_GetInstance(base)]); + + DSPI_MasterTransferFillUpTxFifo(base, handle); + + /* RX FIFO Drain request: RFDF_RE to enable RFDF interrupt + * Since SPI is a synchronous interface, we only need to enable the RX interrupt. + * The IRQ handler will get the status of RX and TX interrupt flags. + */ + s_dspiMasterIsr = DSPI_MasterTransferHandleIRQ; + + DSPI_EnableInterrupts(base, kDSPI_RxFifoDrainRequestInterruptEnable); + + return kStatus_Success; +} + +status_t DSPI_MasterTransferGetCount(SPI_Type *base, dspi_master_handle_t *handle, size_t *count) +{ + assert(handle); + + if (!count) + { + return kStatus_InvalidArgument; + } + + /* Catch when there is not an active transfer. */ + if (handle->state != kDSPI_Busy) + { + *count = 0; + return kStatus_NoTransferInProgress; + } + + *count = handle->totalByteCount - handle->remainingReceiveByteCount; + return kStatus_Success; +} + +static void DSPI_MasterTransferComplete(SPI_Type *base, dspi_master_handle_t *handle) +{ + /* Disable interrupt requests*/ + DSPI_DisableInterrupts(base, kDSPI_RxFifoDrainRequestInterruptEnable | kDSPI_TxFifoFillRequestInterruptEnable); + + status_t status = 0; + if (handle->state == kDSPI_Error) + { + status = kStatus_DSPI_Error; + } + else + { + status = kStatus_Success; + } + + if (handle->callback) + { + handle->callback(base, handle, status, handle->userData); + } + + /* The transfer is complete.*/ + handle->state = kDSPI_Idle; +} + +static void DSPI_MasterTransferFillUpTxFifo(SPI_Type *base, dspi_master_handle_t *handle) +{ + uint16_t wordToSend = 0; + uint8_t dummyData = DSPI_DUMMY_DATA; + + /* If bits/frame is greater than one byte */ + if (handle->bitsPerFrame > 8) + { + /* Fill the fifo until it is full or until the send word count is 0 or until the difference + * between the remainingReceiveByteCount and remainingSendByteCount equals the FIFO depth. + * The reason for checking the difference is to ensure we only send as much as the + * RX FIFO can receive. + * For this case where bitsPerFrame > 8, each entry in the FIFO contains 2 bytes of the + * send data, hence the difference between the remainingReceiveByteCount and + * remainingSendByteCount must be divided by 2 to convert this difference into a + * 16-bit (2 byte) value. + */ + while ((DSPI_GetStatusFlags(base) & kDSPI_TxFifoFillRequestFlag) && + ((handle->remainingReceiveByteCount - handle->remainingSendByteCount) / 2 < handle->fifoSize)) + { + if (handle->remainingSendByteCount <= 2) + { + if (handle->txData) + { + if (handle->remainingSendByteCount == 1) + { + wordToSend = *(handle->txData); + } + else + { + wordToSend = *(handle->txData); + ++handle->txData; /* increment to next data byte */ + wordToSend |= (unsigned)(*(handle->txData)) << 8U; + } + } + else + { + wordToSend = dummyData; + } + handle->remainingSendByteCount = 0; + base->PUSHR = handle->lastCommand | wordToSend; + } + /* For all words except the last word */ + else + { + if (handle->txData) + { + wordToSend = *(handle->txData); + ++handle->txData; /* increment to next data byte */ + wordToSend |= (unsigned)(*(handle->txData)) << 8U; + ++handle->txData; /* increment to next data byte */ + } + else + { + wordToSend = dummyData; + } + handle->remainingSendByteCount -= 2; /* decrement remainingSendByteCount by 2 */ + base->PUSHR = handle->command | wordToSend; + } + + /* Try to clear the TFFF; if the TX FIFO is full this will clear */ + DSPI_ClearStatusFlags(base, kDSPI_TxFifoFillRequestFlag); + + /* exit loop if send count is zero, else update local variables for next loop */ + if (handle->remainingSendByteCount == 0) + { + break; + } + } /* End of TX FIFO fill while loop */ + } + /* Optimized for bits/frame less than or equal to one byte. */ + else + { + /* Fill the fifo until it is full or until the send word count is 0 or until the difference + * between the remainingReceiveByteCount and remainingSendByteCount equals the FIFO depth. + * The reason for checking the difference is to ensure we only send as much as the + * RX FIFO can receive. + */ + while ((DSPI_GetStatusFlags(base) & kDSPI_TxFifoFillRequestFlag) && + ((handle->remainingReceiveByteCount - handle->remainingSendByteCount) < handle->fifoSize)) + { + if (handle->txData) + { + wordToSend = *(handle->txData); + ++handle->txData; + } + else + { + wordToSend = dummyData; + } + + if (handle->remainingSendByteCount == 1) + { + base->PUSHR = handle->lastCommand | wordToSend; + } + else + { + base->PUSHR = handle->command | wordToSend; + } + + /* Try to clear the TFFF; if the TX FIFO is full this will clear */ + DSPI_ClearStatusFlags(base, kDSPI_TxFifoFillRequestFlag); + + --handle->remainingSendByteCount; + + /* exit loop if send count is zero, else update local variables for next loop */ + if (handle->remainingSendByteCount == 0) + { + break; + } + } + } +} + +void DSPI_MasterTransferAbort(SPI_Type *base, dspi_master_handle_t *handle) +{ + DSPI_StopTransfer(base); + + /* Disable interrupt requests*/ + DSPI_DisableInterrupts(base, kDSPI_RxFifoDrainRequestInterruptEnable | kDSPI_TxFifoFillRequestInterruptEnable); + + handle->state = kDSPI_Idle; +} + +void DSPI_MasterTransferHandleIRQ(SPI_Type *base, dspi_master_handle_t *handle) +{ + /* RECEIVE IRQ handler: Check read buffer only if there are remaining bytes to read. */ + if (handle->remainingReceiveByteCount) + { + /* Check read buffer.*/ + uint16_t wordReceived; /* Maximum supported data bit length in master mode is 16-bits */ + + /* If bits/frame is greater than one byte */ + if (handle->bitsPerFrame > 8) + { + while (DSPI_GetStatusFlags(base) & kDSPI_RxFifoDrainRequestFlag) + { + wordReceived = DSPI_ReadData(base); + /* clear the rx fifo drain request, needed for non-DMA applications as this flag + * will remain set even if the rx fifo is empty. By manually clearing this flag, it + * either remain clear if no more data is in the fifo, or it will set if there is + * more data in the fifo. + */ + DSPI_ClearStatusFlags(base, kDSPI_RxFifoDrainRequestFlag); + + /* Store read bytes into rx buffer only if a buffer pointer was provided */ + if (handle->rxData) + { + /* For the last word received, if there is an extra byte due to the odd transfer + * byte count, only save the the last byte and discard the upper byte + */ + if (handle->remainingReceiveByteCount == 1) + { + *handle->rxData = wordReceived; /* Write first data byte */ + --handle->remainingReceiveByteCount; + } + else + { + *handle->rxData = wordReceived; /* Write first data byte */ + ++handle->rxData; /* increment to next data byte */ + *handle->rxData = wordReceived >> 8; /* Write second data byte */ + ++handle->rxData; /* increment to next data byte */ + handle->remainingReceiveByteCount -= 2; + } + } + else + { + if (handle->remainingReceiveByteCount == 1) + { + --handle->remainingReceiveByteCount; + } + else + { + handle->remainingReceiveByteCount -= 2; + } + } + if (handle->remainingReceiveByteCount == 0) + { + break; + } + } /* End of RX FIFO drain while loop */ + } + /* Optimized for bits/frame less than or equal to one byte. */ + else + { + while (DSPI_GetStatusFlags(base) & kDSPI_RxFifoDrainRequestFlag) + { + wordReceived = DSPI_ReadData(base); + /* clear the rx fifo drain request, needed for non-DMA applications as this flag + * will remain set even if the rx fifo is empty. By manually clearing this flag, it + * either remain clear if no more data is in the fifo, or it will set if there is + * more data in the fifo. + */ + DSPI_ClearStatusFlags(base, kDSPI_RxFifoDrainRequestFlag); + + /* Store read bytes into rx buffer only if a buffer pointer was provided */ + if (handle->rxData) + { + *handle->rxData = wordReceived; + ++handle->rxData; + } + + --handle->remainingReceiveByteCount; + + if (handle->remainingReceiveByteCount == 0) + { + break; + } + } /* End of RX FIFO drain while loop */ + } + } + + /* Check write buffer. We always have to send a word in order to keep the transfer + * moving. So if the caller didn't provide a send buffer, we just send a zero. + */ + if (handle->remainingSendByteCount) + { + DSPI_MasterTransferFillUpTxFifo(base, handle); + } + + /* Check if we're done with this transfer.*/ + if ((handle->remainingSendByteCount == 0) && (handle->remainingReceiveByteCount == 0)) + { + /* Complete the transfer and disable the interrupts */ + DSPI_MasterTransferComplete(base, handle); + } +} + +/*Transactional APIs -- Slave*/ +void DSPI_SlaveTransferCreateHandle(SPI_Type *base, + dspi_slave_handle_t *handle, + dspi_slave_transfer_callback_t callback, + void *userData) +{ + assert(handle); + + /* Zero the handle. */ + memset(handle, 0, sizeof(*handle)); + + g_dspiHandle[DSPI_GetInstance(base)] = handle; + + handle->callback = callback; + handle->userData = userData; +} + +status_t DSPI_SlaveTransferNonBlocking(SPI_Type *base, dspi_slave_handle_t *handle, dspi_transfer_t *transfer) +{ + assert(handle && transfer); + + /* If receive length is zero */ + if (transfer->dataSize == 0) + { + return kStatus_InvalidArgument; + } + + /* If both send buffer and receive buffer is null */ + if ((!(transfer->txData)) && (!(transfer->rxData))) + { + return kStatus_InvalidArgument; + } + + /* Check that we're not busy.*/ + if (handle->state == kDSPI_Busy) + { + return kStatus_DSPI_Busy; + } + handle->state = kDSPI_Busy; + + /* Enable the NVIC for DSPI peripheral. */ + EnableIRQ(s_dspiIRQ[DSPI_GetInstance(base)]); + + /* Store transfer information */ + handle->txData = transfer->txData; + handle->rxData = transfer->rxData; + handle->remainingSendByteCount = transfer->dataSize; + handle->remainingReceiveByteCount = transfer->dataSize; + handle->totalByteCount = transfer->dataSize; + + handle->errorCount = 0; + + uint8_t whichCtar = (transfer->configFlags & DSPI_SLAVE_CTAR_MASK) >> DSPI_SLAVE_CTAR_SHIFT; + handle->bitsPerFrame = + (((base->CTAR_SLAVE[whichCtar]) & SPI_CTAR_SLAVE_FMSZ_MASK) >> SPI_CTAR_SLAVE_FMSZ_SHIFT) + 1; + + DSPI_StopTransfer(base); + + DSPI_FlushFifo(base, true, true); + DSPI_ClearStatusFlags(base, kDSPI_AllStatusFlag); + + DSPI_StartTransfer(base); + + /* Prepare data to transmit */ + DSPI_SlaveTransferFillUpTxFifo(base, handle); + + s_dspiSlaveIsr = DSPI_SlaveTransferHandleIRQ; + + /* Enable RX FIFO drain request, the slave only use this interrupt */ + DSPI_EnableInterrupts(base, kDSPI_RxFifoDrainRequestInterruptEnable); + + if (handle->rxData) + { + /* RX FIFO overflow request enable */ + DSPI_EnableInterrupts(base, kDSPI_RxFifoOverflowInterruptEnable); + } + if (handle->txData) + { + /* TX FIFO underflow request enable */ + DSPI_EnableInterrupts(base, kDSPI_TxFifoUnderflowInterruptEnable); + } + + return kStatus_Success; +} + +status_t DSPI_SlaveTransferGetCount(SPI_Type *base, dspi_slave_handle_t *handle, size_t *count) +{ + assert(handle); + + if (!count) + { + return kStatus_InvalidArgument; + } + + /* Catch when there is not an active transfer. */ + if (handle->state != kDSPI_Busy) + { + *count = 0; + return kStatus_NoTransferInProgress; + } + + *count = handle->totalByteCount - handle->remainingReceiveByteCount; + return kStatus_Success; +} + +static void DSPI_SlaveTransferFillUpTxFifo(SPI_Type *base, dspi_slave_handle_t *handle) +{ + uint16_t transmitData = 0; + uint8_t dummyPattern = DSPI_DUMMY_DATA; + + /* Service the transmitter, if transmit buffer provided, transmit the data, + * else transmit dummy pattern + */ + while (DSPI_GetStatusFlags(base) & kDSPI_TxFifoFillRequestFlag) + { + /* Transmit data */ + if (handle->remainingSendByteCount > 0) + { + /* Have data to transmit, update the transmit data and push to FIFO */ + if (handle->bitsPerFrame <= 8) + { + /* bits/frame is 1 byte */ + if (handle->txData) + { + /* Update transmit data and transmit pointer */ + transmitData = *handle->txData; + handle->txData++; + } + else + { + transmitData = dummyPattern; + } + + /* Decrease remaining dataSize */ + --handle->remainingSendByteCount; + } + /* bits/frame is 2 bytes */ + else + { + /* With multibytes per frame transmission, the transmit frame contains data from + * transmit buffer until sent dataSize matches user request. Other bytes will set to + * dummy pattern value. + */ + if (handle->txData) + { + /* Update first byte of transmit data and transmit pointer */ + transmitData = *handle->txData; + handle->txData++; + + if (handle->remainingSendByteCount == 1) + { + /* Decrease remaining dataSize */ + --handle->remainingSendByteCount; + /* Update second byte of transmit data to second byte of dummy pattern */ + transmitData = transmitData | (uint16_t)(((uint16_t)dummyPattern) << 8); + } + else + { + /* Update second byte of transmit data and transmit pointer */ + transmitData = transmitData | (uint16_t)((uint16_t)(*handle->txData) << 8); + handle->txData++; + handle->remainingSendByteCount -= 2; + } + } + else + { + if (handle->remainingSendByteCount == 1) + { + --handle->remainingSendByteCount; + } + else + { + handle->remainingSendByteCount -= 2; + } + transmitData = (uint16_t)((uint16_t)(dummyPattern) << 8) | dummyPattern; + } + } + } + else + { + break; + } + + /* Write the data to the DSPI data register */ + base->PUSHR_SLAVE = transmitData; + + /* Try to clear TFFF by writing a one to it; it will not clear if TX FIFO not full */ + DSPI_ClearStatusFlags(base, kDSPI_TxFifoFillRequestFlag); + } +} + +static void DSPI_SlaveTransferComplete(SPI_Type *base, dspi_slave_handle_t *handle) +{ + /* Disable interrupt requests */ + DSPI_DisableInterrupts(base, kDSPI_TxFifoUnderflowInterruptEnable | kDSPI_TxFifoFillRequestInterruptEnable | + kDSPI_RxFifoOverflowInterruptEnable | kDSPI_RxFifoDrainRequestInterruptEnable); + + /* The transfer is complete. */ + handle->txData = NULL; + handle->rxData = NULL; + handle->remainingReceiveByteCount = 0; + handle->remainingSendByteCount = 0; + + status_t status = 0; + if (handle->state == kDSPI_Error) + { + status = kStatus_DSPI_Error; + } + else + { + status = kStatus_Success; + } + + if (handle->callback) + { + handle->callback(base, handle, status, handle->userData); + } + + handle->state = kDSPI_Idle; +} + +void DSPI_SlaveTransferAbort(SPI_Type *base, dspi_slave_handle_t *handle) +{ + DSPI_StopTransfer(base); + + /* Disable interrupt requests */ + DSPI_DisableInterrupts(base, kDSPI_TxFifoUnderflowInterruptEnable | kDSPI_TxFifoFillRequestInterruptEnable | + kDSPI_RxFifoOverflowInterruptEnable | kDSPI_RxFifoDrainRequestInterruptEnable); + + handle->state = kDSPI_Idle; + handle->remainingSendByteCount = 0; + handle->remainingReceiveByteCount = 0; +} + +void DSPI_SlaveTransferHandleIRQ(SPI_Type *base, dspi_slave_handle_t *handle) +{ + uint8_t dummyPattern = DSPI_DUMMY_DATA; + uint32_t dataReceived; + uint32_t dataSend = 0; + + /* Because SPI protocol is synchronous, the number of bytes that that slave received from the + * master is the actual number of bytes that the slave transmitted to the master. So we only + * monitor the received dataSize to know when the transfer is complete. + */ + if (handle->remainingReceiveByteCount > 0) + { + while (DSPI_GetStatusFlags(base) & kDSPI_RxFifoDrainRequestFlag) + { + /* Have received data in the buffer. */ + dataReceived = base->POPR; + /*Clear the rx fifo drain request, needed for non-DMA applications as this flag + * will remain set even if the rx fifo is empty. By manually clearing this flag, it + * either remain clear if no more data is in the fifo, or it will set if there is + * more data in the fifo. + */ + DSPI_ClearStatusFlags(base, kDSPI_RxFifoDrainRequestFlag); + + /* If bits/frame is one byte */ + if (handle->bitsPerFrame <= 8) + { + if (handle->rxData) + { + /* Receive buffer is not null, store data into it */ + *handle->rxData = dataReceived; + ++handle->rxData; + } + /* Descrease remaining receive byte count */ + --handle->remainingReceiveByteCount; + + if (handle->remainingSendByteCount > 0) + { + if (handle->txData) + { + dataSend = *handle->txData; + ++handle->txData; + } + else + { + dataSend = dummyPattern; + } + + --handle->remainingSendByteCount; + /* Write the data to the DSPI data register */ + base->PUSHR_SLAVE = dataSend; + } + } + else /* If bits/frame is 2 bytes */ + { + /* With multibytes frame receiving, we only receive till the received dataSize + * matches user request. Other bytes will be ignored. + */ + if (handle->rxData) + { + /* Receive buffer is not null, store first byte into it */ + *handle->rxData = dataReceived; + ++handle->rxData; + + if (handle->remainingReceiveByteCount == 1) + { + /* Decrease remaining receive byte count */ + --handle->remainingReceiveByteCount; + } + else + { + /* Receive buffer is not null, store second byte into it */ + *handle->rxData = dataReceived >> 8; + ++handle->rxData; + handle->remainingReceiveByteCount -= 2; + } + } + /* If no handle->rxData*/ + else + { + if (handle->remainingReceiveByteCount == 1) + { + /* Decrease remaining receive byte count */ + --handle->remainingReceiveByteCount; + } + else + { + handle->remainingReceiveByteCount -= 2; + } + } + + if (handle->remainingSendByteCount > 0) + { + if (handle->txData) + { + dataSend = *handle->txData; + ++handle->txData; + + if (handle->remainingSendByteCount == 1) + { + --handle->remainingSendByteCount; + dataSend |= (uint16_t)((uint16_t)(dummyPattern) << 8); + } + else + { + dataSend |= (uint32_t)(*handle->txData) << 8; + ++handle->txData; + handle->remainingSendByteCount -= 2; + } + } + /* If no handle->txData*/ + else + { + if (handle->remainingSendByteCount == 1) + { + --handle->remainingSendByteCount; + } + else + { + handle->remainingSendByteCount -= 2; + } + dataSend = (uint16_t)((uint16_t)(dummyPattern) << 8) | dummyPattern; + } + /* Write the data to the DSPI data register */ + base->PUSHR_SLAVE = dataSend; + } + } + /* Try to clear TFFF by writing a one to it; it will not clear if TX FIFO not full */ + DSPI_ClearStatusFlags(base, kDSPI_TxFifoFillRequestFlag); + + if (handle->remainingReceiveByteCount == 0) + { + break; + } + } + } + /* Check if remaining receive byte count matches user request */ + if ((handle->remainingReceiveByteCount == 0) || (handle->state == kDSPI_Error)) + { + /* Other cases, stop the transfer. */ + DSPI_SlaveTransferComplete(base, handle); + return; + } + + /* Catch tx fifo underflow conditions, service only if tx under flow interrupt enabled */ + if ((DSPI_GetStatusFlags(base) & kDSPI_TxFifoUnderflowFlag) && (base->RSER & SPI_RSER_TFUF_RE_MASK)) + { + DSPI_ClearStatusFlags(base, kDSPI_TxFifoUnderflowFlag); + /* Change state to error and clear flag */ + if (handle->txData) + { + handle->state = kDSPI_Error; + } + handle->errorCount++; + } + /* Catch rx fifo overflow conditions, service only if rx over flow interrupt enabled */ + if ((DSPI_GetStatusFlags(base) & kDSPI_RxFifoOverflowFlag) && (base->RSER & SPI_RSER_RFOF_RE_MASK)) + { + DSPI_ClearStatusFlags(base, kDSPI_RxFifoOverflowFlag); + /* Change state to error and clear flag */ + if (handle->txData) + { + handle->state = kDSPI_Error; + } + handle->errorCount++; + } +} + +static void DSPI_CommonIRQHandler(SPI_Type *base, void *param) +{ + if (DSPI_IsMaster(base)) + { + s_dspiMasterIsr(base, (dspi_master_handle_t *)param); + } + else + { + s_dspiSlaveIsr(base, (dspi_slave_handle_t *)param); + } +} + +#if (FSL_FEATURE_SOC_DSPI_COUNT > 0) +void SPI0_DriverIRQHandler(void) +{ + assert(g_dspiHandle[0]); + DSPI_CommonIRQHandler(SPI0, g_dspiHandle[0]); +} +#endif + +#if (FSL_FEATURE_SOC_DSPI_COUNT > 1) +void SPI1_DriverIRQHandler(void) +{ + assert(g_dspiHandle[1]); + DSPI_CommonIRQHandler(SPI1, g_dspiHandle[1]); +} +#endif + +#if (FSL_FEATURE_SOC_DSPI_COUNT > 2) +void SPI2_DriverIRQHandler(void) +{ + assert(g_dspiHandle[2]); + DSPI_CommonIRQHandler(SPI2, g_dspiHandle[2]); +} +#endif + +#if (FSL_FEATURE_SOC_DSPI_COUNT > 3) +void SPI3_DriverIRQHandler(void) +{ + assert(g_dspiHandle[3]); + DSPI_CommonIRQHandler(SPI3, g_dspiHandle[3]); +} +#endif + +#if (FSL_FEATURE_SOC_DSPI_COUNT > 4) +void SPI4_DriverIRQHandler(void) +{ + assert(g_dspiHandle[4]); + DSPI_CommonIRQHandler(SPI4, g_dspiHandle[4]); +} +#endif + +#if (FSL_FEATURE_SOC_DSPI_COUNT > 5) +void SPI5_DriverIRQHandler(void) +{ + assert(g_dspiHandle[5]); + DSPI_CommonIRQHandler(SPI5, g_dspiHandle[5]); +} +#endif + +#if (FSL_FEATURE_SOC_DSPI_COUNT > 6) +#error "Should write the SPIx_DriverIRQHandler function that instance greater than 5 !" +#endif diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dspi.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dspi.h new file mode 100644 index 00000000000..dfbeb3e4571 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dspi.h @@ -0,0 +1,1181 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FSL_DSPI_H_ +#define _FSL_DSPI_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup dspi_driver + * @{ + */ + + +/********************************************************************************************************************** + * Definitions + *********************************************************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief DSPI driver version 2.1.1. */ +#define FSL_DSPI_DRIVER_VERSION (MAKE_VERSION(2, 1, 1)) +/*@}*/ + +/*! @brief DSPI dummy data if no Tx data.*/ +#define DSPI_DUMMY_DATA (0x00U) /*!< Dummy data used for tx if there is not txData. */ + +/*! @brief Status for the DSPI driver.*/ +enum _dspi_status +{ + kStatus_DSPI_Busy = MAKE_STATUS(kStatusGroup_DSPI, 0), /*!< DSPI transfer is busy.*/ + kStatus_DSPI_Error = MAKE_STATUS(kStatusGroup_DSPI, 1), /*!< DSPI driver error. */ + kStatus_DSPI_Idle = MAKE_STATUS(kStatusGroup_DSPI, 2), /*!< DSPI is idle.*/ + kStatus_DSPI_OutOfRange = MAKE_STATUS(kStatusGroup_DSPI, 3) /*!< DSPI transfer out Of range. */ +}; + +/*! @brief DSPI status flags in SPIx_SR register.*/ +enum _dspi_flags +{ + kDSPI_TxCompleteFlag = SPI_SR_TCF_MASK, /*!< Transfer Complete Flag. */ + kDSPI_EndOfQueueFlag = SPI_SR_EOQF_MASK, /*!< End of Queue Flag.*/ + kDSPI_TxFifoUnderflowFlag = SPI_SR_TFUF_MASK, /*!< Transmit FIFO Underflow Flag.*/ + kDSPI_TxFifoFillRequestFlag = SPI_SR_TFFF_MASK, /*!< Transmit FIFO Fill Flag.*/ + kDSPI_RxFifoOverflowFlag = SPI_SR_RFOF_MASK, /*!< Receive FIFO Overflow Flag.*/ + kDSPI_RxFifoDrainRequestFlag = SPI_SR_RFDF_MASK, /*!< Receive FIFO Drain Flag.*/ + kDSPI_TxAndRxStatusFlag = SPI_SR_TXRXS_MASK, /*!< The module is in Stopped/Running state.*/ + kDSPI_AllStatusFlag = SPI_SR_TCF_MASK | SPI_SR_EOQF_MASK | SPI_SR_TFUF_MASK | SPI_SR_TFFF_MASK | SPI_SR_RFOF_MASK | + SPI_SR_RFDF_MASK | SPI_SR_TXRXS_MASK /*!< All status above.*/ +}; + +/*! @brief DSPI interrupt source.*/ +enum _dspi_interrupt_enable +{ + kDSPI_TxCompleteInterruptEnable = SPI_RSER_TCF_RE_MASK, /*!< TCF interrupt enable.*/ + kDSPI_EndOfQueueInterruptEnable = SPI_RSER_EOQF_RE_MASK, /*!< EOQF interrupt enable.*/ + kDSPI_TxFifoUnderflowInterruptEnable = SPI_RSER_TFUF_RE_MASK, /*!< TFUF interrupt enable.*/ + kDSPI_TxFifoFillRequestInterruptEnable = SPI_RSER_TFFF_RE_MASK, /*!< TFFF interrupt enable, DMA disable.*/ + kDSPI_RxFifoOverflowInterruptEnable = SPI_RSER_RFOF_RE_MASK, /*!< RFOF interrupt enable.*/ + kDSPI_RxFifoDrainRequestInterruptEnable = SPI_RSER_RFDF_RE_MASK, /*!< RFDF interrupt enable, DMA disable.*/ + kDSPI_AllInterruptEnable = SPI_RSER_TCF_RE_MASK | SPI_RSER_EOQF_RE_MASK | SPI_RSER_TFUF_RE_MASK | + SPI_RSER_TFFF_RE_MASK | SPI_RSER_RFOF_RE_MASK | SPI_RSER_RFDF_RE_MASK + /*!< All above interrupts enable.*/ +}; + +/*! @brief DSPI DMA source.*/ +enum _dspi_dma_enable +{ + kDSPI_TxDmaEnable = (SPI_RSER_TFFF_RE_MASK | SPI_RSER_TFFF_DIRS_MASK), /*!< TFFF flag generates DMA requests. + No Tx interrupt request. */ + kDSPI_RxDmaEnable = (SPI_RSER_RFDF_RE_MASK | SPI_RSER_RFDF_DIRS_MASK) /*!< RFDF flag generates DMA requests. + No Rx interrupt request. */ +}; + +/*! @brief DSPI master or slave mode configuration.*/ +typedef enum _dspi_master_slave_mode +{ + kDSPI_Master = 1U, /*!< DSPI peripheral operates in master mode.*/ + kDSPI_Slave = 0U /*!< DSPI peripheral operates in slave mode.*/ +} dspi_master_slave_mode_t; + +/*! + * @brief DSPI Sample Point: Controls when the DSPI master samples SIN in Modified Transfer Format. This field is valid + * only when CPHA bit in CTAR register is 0. + */ +typedef enum _dspi_master_sample_point +{ + kDSPI_SckToSin0Clock = 0U, /*!< 0 system clocks between SCK edge and SIN sample.*/ + kDSPI_SckToSin1Clock = 1U, /*!< 1 system clock between SCK edge and SIN sample.*/ + kDSPI_SckToSin2Clock = 2U /*!< 2 system clocks between SCK edge and SIN sample.*/ +} dspi_master_sample_point_t; + +/*! @brief DSPI Peripheral Chip Select (Pcs) configuration (which Pcs to configure).*/ +typedef enum _dspi_which_pcs_config +{ + kDSPI_Pcs0 = 1U << 0, /*!< Pcs[0] */ + kDSPI_Pcs1 = 1U << 1, /*!< Pcs[1] */ + kDSPI_Pcs2 = 1U << 2, /*!< Pcs[2] */ + kDSPI_Pcs3 = 1U << 3, /*!< Pcs[3] */ + kDSPI_Pcs4 = 1U << 4, /*!< Pcs[4] */ + kDSPI_Pcs5 = 1U << 5 /*!< Pcs[5] */ +} dspi_which_pcs_t; + +/*! @brief DSPI Peripheral Chip Select (Pcs) Polarity configuration.*/ +typedef enum _dspi_pcs_polarity_config +{ + kDSPI_PcsActiveHigh = 0U, /*!< Pcs Active High (idles low). */ + kDSPI_PcsActiveLow = 1U /*!< Pcs Active Low (idles high). */ +} dspi_pcs_polarity_config_t; + +/*! @brief DSPI Peripheral Chip Select (Pcs) Polarity.*/ +enum _dspi_pcs_polarity +{ + kDSPI_Pcs0ActiveLow = 1U << 0, /*!< Pcs0 Active Low (idles high). */ + kDSPI_Pcs1ActiveLow = 1U << 1, /*!< Pcs1 Active Low (idles high). */ + kDSPI_Pcs2ActiveLow = 1U << 2, /*!< Pcs2 Active Low (idles high). */ + kDSPI_Pcs3ActiveLow = 1U << 3, /*!< Pcs3 Active Low (idles high). */ + kDSPI_Pcs4ActiveLow = 1U << 4, /*!< Pcs4 Active Low (idles high). */ + kDSPI_Pcs5ActiveLow = 1U << 5, /*!< Pcs5 Active Low (idles high). */ + kDSPI_PcsAllActiveLow = 0xFFU /*!< Pcs0 to Pcs5 Active Low (idles high). */ +}; + +/*! @brief DSPI clock polarity configuration for a given CTAR.*/ +typedef enum _dspi_clock_polarity +{ + kDSPI_ClockPolarityActiveHigh = 0U, /*!< CPOL=0. Active-high DSPI clock (idles low).*/ + kDSPI_ClockPolarityActiveLow = 1U /*!< CPOL=1. Active-low DSPI clock (idles high).*/ +} dspi_clock_polarity_t; + +/*! @brief DSPI clock phase configuration for a given CTAR.*/ +typedef enum _dspi_clock_phase +{ + kDSPI_ClockPhaseFirstEdge = 0U, /*!< CPHA=0. Data is captured on the leading edge of the SCK and changed on the + following edge.*/ + kDSPI_ClockPhaseSecondEdge = 1U /*!< CPHA=1. Data is changed on the leading edge of the SCK and captured on the + following edge.*/ +} dspi_clock_phase_t; + +/*! @brief DSPI data shifter direction options for a given CTAR.*/ +typedef enum _dspi_shift_direction +{ + kDSPI_MsbFirst = 0U, /*!< Data transfers start with most significant bit.*/ + kDSPI_LsbFirst = 1U /*!< Data transfers start with least significant bit.*/ +} dspi_shift_direction_t; + +/*! @brief DSPI delay type selection.*/ +typedef enum _dspi_delay_type +{ + kDSPI_PcsToSck = 1U, /*!< Pcs-to-SCK delay. */ + kDSPI_LastSckToPcs, /*!< Last SCK edge to Pcs delay. */ + kDSPI_BetweenTransfer /*!< Delay between transfers. */ +} dspi_delay_type_t; + +/*! @brief DSPI Clock and Transfer Attributes Register (CTAR) selection.*/ +typedef enum _dspi_ctar_selection +{ + kDSPI_Ctar0 = 0U, /*!< CTAR0 selection option for master or slave mode, note that CTAR0 and CTAR0_SLAVE are the + same register address. */ + kDSPI_Ctar1 = 1U, /*!< CTAR1 selection option for master mode only. */ + kDSPI_Ctar2 = 2U, /*!< CTAR2 selection option for master mode only , note that some device do not support CTAR2. */ + kDSPI_Ctar3 = 3U, /*!< CTAR3 selection option for master mode only , note that some device do not support CTAR3. */ + kDSPI_Ctar4 = 4U, /*!< CTAR4 selection option for master mode only , note that some device do not support CTAR4. */ + kDSPI_Ctar5 = 5U, /*!< CTAR5 selection option for master mode only , note that some device do not support CTAR5. */ + kDSPI_Ctar6 = 6U, /*!< CTAR6 selection option for master mode only , note that some device do not support CTAR6. */ + kDSPI_Ctar7 = 7U /*!< CTAR7 selection option for master mode only , note that some device do not support CTAR7. */ +} dspi_ctar_selection_t; + +#define DSPI_MASTER_CTAR_SHIFT (0U) /*!< DSPI master CTAR shift macro , internal used. */ +#define DSPI_MASTER_CTAR_MASK (0x0FU) /*!< DSPI master CTAR mask macro , internal used. */ +#define DSPI_MASTER_PCS_SHIFT (4U) /*!< DSPI master PCS shift macro , internal used. */ +#define DSPI_MASTER_PCS_MASK (0xF0U) /*!< DSPI master PCS mask macro , internal used. */ +/*! @brief Can use this enumeration for DSPI master transfer configFlags. */ +enum _dspi_transfer_config_flag_for_master +{ + kDSPI_MasterCtar0 = 0U << DSPI_MASTER_CTAR_SHIFT, /*!< DSPI master transfer use CTAR0 setting. */ + kDSPI_MasterCtar1 = 1U << DSPI_MASTER_CTAR_SHIFT, /*!< DSPI master transfer use CTAR1 setting. */ + kDSPI_MasterCtar2 = 2U << DSPI_MASTER_CTAR_SHIFT, /*!< DSPI master transfer use CTAR2 setting. */ + kDSPI_MasterCtar3 = 3U << DSPI_MASTER_CTAR_SHIFT, /*!< DSPI master transfer use CTAR3 setting. */ + kDSPI_MasterCtar4 = 4U << DSPI_MASTER_CTAR_SHIFT, /*!< DSPI master transfer use CTAR4 setting. */ + kDSPI_MasterCtar5 = 5U << DSPI_MASTER_CTAR_SHIFT, /*!< DSPI master transfer use CTAR5 setting. */ + kDSPI_MasterCtar6 = 6U << DSPI_MASTER_CTAR_SHIFT, /*!< DSPI master transfer use CTAR6 setting. */ + kDSPI_MasterCtar7 = 7U << DSPI_MASTER_CTAR_SHIFT, /*!< DSPI master transfer use CTAR7 setting. */ + + kDSPI_MasterPcs0 = 0U << DSPI_MASTER_PCS_SHIFT, /*!< DSPI master transfer use PCS0 signal. */ + kDSPI_MasterPcs1 = 1U << DSPI_MASTER_PCS_SHIFT, /*!< DSPI master transfer use PCS1 signal. */ + kDSPI_MasterPcs2 = 2U << DSPI_MASTER_PCS_SHIFT, /*!< DSPI master transfer use PCS2 signal.*/ + kDSPI_MasterPcs3 = 3U << DSPI_MASTER_PCS_SHIFT, /*!< DSPI master transfer use PCS3 signal. */ + kDSPI_MasterPcs4 = 4U << DSPI_MASTER_PCS_SHIFT, /*!< DSPI master transfer use PCS4 signal. */ + kDSPI_MasterPcs5 = 5U << DSPI_MASTER_PCS_SHIFT, /*!< DSPI master transfer use PCS5 signal. */ + + kDSPI_MasterPcsContinuous = 1U << 20, /*!< Is PCS signal continuous. */ + kDSPI_MasterActiveAfterTransfer = 1U << 21, /*!< Is PCS signal active after last frame transfer.*/ +}; + +#define DSPI_SLAVE_CTAR_SHIFT (0U) /*!< DSPI slave CTAR shift macro , internal used. */ +#define DSPI_SLAVE_CTAR_MASK (0x07U) /*!< DSPI slave CTAR mask macro , internal used. */ +/*! @brief Can use this enum for DSPI slave transfer configFlags. */ +enum _dspi_transfer_config_flag_for_slave +{ + kDSPI_SlaveCtar0 = 0U << DSPI_SLAVE_CTAR_SHIFT, /*!< DSPI slave transfer use CTAR0 setting. */ + /*!< DSPI slave can only use PCS0. */ +}; + +/*! @brief DSPI transfer state, which is used for DSPI transactional API state machine. */ +enum _dspi_transfer_state +{ + kDSPI_Idle = 0x0U, /*!< Nothing in the transmitter/receiver. */ + kDSPI_Busy, /*!< Transfer queue is not finished. */ + kDSPI_Error /*!< Transfer error. */ +}; + +/*! @brief DSPI master command date configuration used for SPIx_PUSHR.*/ +typedef struct _dspi_command_data_config +{ + bool isPcsContinuous; /*!< Option to enable the continuous assertion of chip select between transfers.*/ + dspi_ctar_selection_t whichCtar; /*!< The desired Clock and Transfer Attributes + Register (CTAR) to use for CTAS.*/ + dspi_which_pcs_t whichPcs; /*!< The desired PCS signal to use for the data transfer.*/ + bool isEndOfQueue; /*!< Signals that the current transfer is the last in the queue.*/ + bool clearTransferCount; /*!< Clears SPI Transfer Counter (SPI_TCNT) before transmission starts.*/ +} dspi_command_data_config_t; + +/*! @brief DSPI master ctar configuration structure.*/ +typedef struct _dspi_master_ctar_config +{ + uint32_t baudRate; /*!< Baud Rate for DSPI. */ + uint32_t bitsPerFrame; /*!< Bits per frame, minimum 4, maximum 16.*/ + dspi_clock_polarity_t cpol; /*!< Clock polarity. */ + dspi_clock_phase_t cpha; /*!< Clock phase. */ + dspi_shift_direction_t direction; /*!< MSB or LSB data shift direction. */ + + uint32_t pcsToSckDelayInNanoSec; /*!< PCS to SCK delay time with nanosecond , set to 0 sets the minimum + delay. It sets the boundary value if out of range that can be set.*/ + uint32_t lastSckToPcsDelayInNanoSec; /*!< Last SCK to PCS delay time with nanosecond , set to 0 sets the + minimum delay.It sets the boundary value if out of range that can be + set.*/ + uint32_t betweenTransferDelayInNanoSec; /*!< After SCK delay time with nanosecond , set to 0 sets the minimum + delay.It sets the boundary value if out of range that can be set.*/ +} dspi_master_ctar_config_t; + +/*! @brief DSPI master configuration structure.*/ +typedef struct _dspi_master_config +{ + dspi_ctar_selection_t whichCtar; /*!< Desired CTAR to use. */ + dspi_master_ctar_config_t ctarConfig; /*!< Set the ctarConfig to the desired CTAR. */ + + dspi_which_pcs_t whichPcs; /*!< Desired Peripheral Chip Select (pcs). */ + dspi_pcs_polarity_config_t pcsActiveHighOrLow; /*!< Desired PCS active high or low. */ + + bool enableContinuousSCK; /*!< CONT_SCKE, continuous SCK enable . Note that continuous SCK is only + supported for CPHA = 1.*/ + bool enableRxFifoOverWrite; /*!< ROOE, Receive FIFO overflow overwrite enable. ROOE = 0, the incoming + data is ignored, the data from the transfer that generated the overflow + is either ignored. ROOE = 1, the incoming data is shifted in to the + shift to the shift register. */ + + bool enableModifiedTimingFormat; /*!< Enables a modified transfer format to be used if it's true.*/ + dspi_master_sample_point_t samplePoint; /*!< Controls when the module master samples SIN in Modified Transfer + Format. It's valid only when CPHA=0. */ +} dspi_master_config_t; + +/*! @brief DSPI slave ctar configuration structure.*/ +typedef struct _dspi_slave_ctar_config +{ + uint32_t bitsPerFrame; /*!< Bits per frame, minimum 4, maximum 16.*/ + dspi_clock_polarity_t cpol; /*!< Clock polarity. */ + dspi_clock_phase_t cpha; /*!< Clock phase. */ + /*!< Slave only supports MSB , does not support LSB.*/ +} dspi_slave_ctar_config_t; + +/*! @brief DSPI slave configuration structure.*/ +typedef struct _dspi_slave_config +{ + dspi_ctar_selection_t whichCtar; /*!< Desired CTAR to use. */ + dspi_slave_ctar_config_t ctarConfig; /*!< Set the ctarConfig to the desired CTAR. */ + + bool enableContinuousSCK; /*!< CONT_SCKE, continuous SCK enable. Note that continuous SCK is only + supported for CPHA = 1.*/ + bool enableRxFifoOverWrite; /*!< ROOE, Receive FIFO overflow overwrite enable. ROOE = 0, the incoming + data is ignored, the data from the transfer that generated the overflow + is either ignored. ROOE = 1, the incoming data is shifted in to the + shift to the shift register. */ + bool enableModifiedTimingFormat; /*!< Enables a modified transfer format to be used if it's true.*/ + dspi_master_sample_point_t samplePoint; /*!< Controls when the module master samples SIN in Modified Transfer + Format. It's valid only when CPHA=0. */ +} dspi_slave_config_t; + +/*! +* @brief Forward declaration of the _dspi_master_handle typedefs. +*/ +typedef struct _dspi_master_handle dspi_master_handle_t; + +/*! +* @brief Forward declaration of the _dspi_slave_handle typedefs. +*/ +typedef struct _dspi_slave_handle dspi_slave_handle_t; + +/*! + * @brief Completion callback function pointer type. + * + * @param base DSPI peripheral address. + * @param handle Pointer to the handle for the DSPI master. + * @param status Success or error code describing whether the transfer completed. + * @param userData Arbitrary pointer-dataSized value passed from the application. + */ +typedef void (*dspi_master_transfer_callback_t)(SPI_Type *base, + dspi_master_handle_t *handle, + status_t status, + void *userData); +/*! + * @brief Completion callback function pointer type. + * + * @param base DSPI peripheral address. + * @param handle Pointer to the handle for the DSPI slave. + * @param status Success or error code describing whether the transfer completed. + * @param userData Arbitrary pointer-dataSized value passed from the application. + */ +typedef void (*dspi_slave_transfer_callback_t)(SPI_Type *base, + dspi_slave_handle_t *handle, + status_t status, + void *userData); + +/*! @brief DSPI master/slave transfer structure.*/ +typedef struct _dspi_transfer +{ + uint8_t *txData; /*!< Send buffer. */ + uint8_t *rxData; /*!< Receive buffer. */ + volatile size_t dataSize; /*!< Transfer bytes. */ + + uint32_t + configFlags; /*!< Transfer transfer configuration flags , set from _dspi_transfer_config_flag_for_master if the + transfer is used for master or _dspi_transfer_config_flag_for_slave enumeration if the transfer + is used for slave.*/ +} dspi_transfer_t; + +/*! @brief DSPI master transfer handle structure used for transactional API. */ +struct _dspi_master_handle +{ + uint32_t bitsPerFrame; /*!< Desired number of bits per frame. */ + volatile uint32_t command; /*!< Desired data command. */ + volatile uint32_t lastCommand; /*!< Desired last data command. */ + + uint8_t fifoSize; /*!< FIFO dataSize. */ + + volatile bool isPcsActiveAfterTransfer; /*!< Is PCS signal keep active after the last frame transfer.*/ + volatile bool isThereExtraByte; /*!< Is there extra byte.*/ + + uint8_t *volatile txData; /*!< Send buffer. */ + uint8_t *volatile rxData; /*!< Receive buffer. */ + volatile size_t remainingSendByteCount; /*!< Number of bytes remaining to send.*/ + volatile size_t remainingReceiveByteCount; /*!< Number of bytes remaining to receive.*/ + size_t totalByteCount; /*!< Number of transfer bytes*/ + + volatile uint8_t state; /*!< DSPI transfer state , _dspi_transfer_state.*/ + + dspi_master_transfer_callback_t callback; /*!< Completion callback. */ + void *userData; /*!< Callback user data. */ +}; + +/*! @brief DSPI slave transfer handle structure used for transactional API. */ +struct _dspi_slave_handle +{ + uint32_t bitsPerFrame; /*!< Desired number of bits per frame. */ + volatile bool isThereExtraByte; /*!< Is there extra byte.*/ + + uint8_t *volatile txData; /*!< Send buffer. */ + uint8_t *volatile rxData; /*!< Receive buffer. */ + volatile size_t remainingSendByteCount; /*!< Number of bytes remaining to send.*/ + volatile size_t remainingReceiveByteCount; /*!< Number of bytes remaining to receive.*/ + size_t totalByteCount; /*!< Number of transfer bytes*/ + + volatile uint8_t state; /*!< DSPI transfer state.*/ + + volatile uint32_t errorCount; /*!< Error count for slave transfer.*/ + + dspi_slave_transfer_callback_t callback; /*!< Completion callback. */ + void *userData; /*!< Callback user data. */ +}; + +/********************************************************************************************************************** + * API + *********************************************************************************************************************/ +#if defined(__cplusplus) +extern "C" { +#endif /*_cplusplus*/ + +/*! + * @name Initialization and deinitialization + * @{ + */ + +/*! + * @brief Initializes the DSPI master. + * + * This function initializes the DSPI master configuration. An example use case is as follows: + * @code + * dspi_master_config_t masterConfig; + * masterConfig.whichCtar = kDSPI_Ctar0; + * masterConfig.ctarConfig.baudRate = 500000000; + * masterConfig.ctarConfig.bitsPerFrame = 8; + * masterConfig.ctarConfig.cpol = kDSPI_ClockPolarityActiveHigh; + * masterConfig.ctarConfig.cpha = kDSPI_ClockPhaseFirstEdge; + * masterConfig.ctarConfig.direction = kDSPI_MsbFirst; + * masterConfig.ctarConfig.pcsToSckDelayInNanoSec = 1000000000 / masterConfig.ctarConfig.baudRate ; + * masterConfig.ctarConfig.lastSckToPcsDelayInNanoSec = 1000000000 / masterConfig.ctarConfig.baudRate ; + * masterConfig.ctarConfig.betweenTransferDelayInNanoSec = 1000000000 / masterConfig.ctarConfig.baudRate ; + * masterConfig.whichPcs = kDSPI_Pcs0; + * masterConfig.pcsActiveHighOrLow = kDSPI_PcsActiveLow; + * masterConfig.enableContinuousSCK = false; + * masterConfig.enableRxFifoOverWrite = false; + * masterConfig.enableModifiedTimingFormat = false; + * masterConfig.samplePoint = kDSPI_SckToSin0Clock; + * DSPI_MasterInit(base, &masterConfig, srcClock_Hz); + * @endcode + * + * @param base DSPI peripheral address. + * @param masterConfig Pointer to structure dspi_master_config_t. + * @param srcClock_Hz Module source input clock in Hertz + */ +void DSPI_MasterInit(SPI_Type *base, const dspi_master_config_t *masterConfig, uint32_t srcClock_Hz); + +/*! + * @brief Sets the dspi_master_config_t structure to default values. + * + * The purpose of this API is to get the configuration structure initialized for the DSPI_MasterInit(). + * User may use the initialized structure unchanged in DSPI_MasterInit() or modify the structure + * before calling DSPI_MasterInit(). + * Example: + * @code + * dspi_master_config_t masterConfig; + * DSPI_MasterGetDefaultConfig(&masterConfig); + * @endcode + * @param masterConfig pointer to dspi_master_config_t structure + */ +void DSPI_MasterGetDefaultConfig(dspi_master_config_t *masterConfig); + +/*! + * @brief DSPI slave configuration. + * + * This function initializes the DSPI slave configuration. An example use case is as follows: + * @code + * dspi_slave_config_t slaveConfig; + * slaveConfig->whichCtar = kDSPI_Ctar0; + * slaveConfig->ctarConfig.bitsPerFrame = 8; + * slaveConfig->ctarConfig.cpol = kDSPI_ClockPolarityActiveHigh; + * slaveConfig->ctarConfig.cpha = kDSPI_ClockPhaseFirstEdge; + * slaveConfig->enableContinuousSCK = false; + * slaveConfig->enableRxFifoOverWrite = false; + * slaveConfig->enableModifiedTimingFormat = false; + * slaveConfig->samplePoint = kDSPI_SckToSin0Clock; + * DSPI_SlaveInit(base, &slaveConfig); + * @endcode + * + * @param base DSPI peripheral address. + * @param slaveConfig Pointer to structure dspi_master_config_t. + */ +void DSPI_SlaveInit(SPI_Type *base, const dspi_slave_config_t *slaveConfig); + +/*! + * @brief Sets the dspi_slave_config_t structure to default values. + * + * The purpose of this API is to get the configuration structure initialized for the DSPI_SlaveInit(). + * User may use the initialized structure unchanged in DSPI_SlaveInit(), or modify the structure + * before calling DSPI_SlaveInit(). + * Example: + * @code + * dspi_slave_config_t slaveConfig; + * DSPI_SlaveGetDefaultConfig(&slaveConfig); + * @endcode + * @param slaveConfig pointer to dspi_slave_config_t structure. + */ +void DSPI_SlaveGetDefaultConfig(dspi_slave_config_t *slaveConfig); + +/*! + * @brief De-initializes the DSPI peripheral. Call this API to disable the DSPI clock. + * @param base DSPI peripheral address. + */ +void DSPI_Deinit(SPI_Type *base); + +/*! + * @brief Enables the DSPI peripheral and sets the MCR MDIS to 0. + * + * @param base DSPI peripheral address. + * @param enable pass true to enable module, false to disable module. + */ +static inline void DSPI_Enable(SPI_Type *base, bool enable) +{ + if (enable) + { + base->MCR &= ~SPI_MCR_MDIS_MASK; + } + else + { + base->MCR |= SPI_MCR_MDIS_MASK; + } +} + +/*! + *@} +*/ + +/*! + * @name Status + * @{ + */ + +/*! + * @brief Gets the DSPI status flag state. + * @param base DSPI peripheral address. + * @return The DSPI status(in SR register). + */ +static inline uint32_t DSPI_GetStatusFlags(SPI_Type *base) +{ + return (base->SR); +} + +/*! + * @brief Clears the DSPI status flag. + * + * This function clears the desired status bit by using a write-1-to-clear. The user passes in the base and the + * desired status bit to clear. The list of status bits is defined in the dspi_status_and_interrupt_request_t. The + * function uses these bit positions in its algorithm to clear the desired flag state. + * Example usage: + * @code + * DSPI_ClearStatusFlags(base, kDSPI_TxCompleteFlag|kDSPI_EndOfQueueFlag); + * @endcode + * + * @param base DSPI peripheral address. + * @param statusFlags The status flag , used from type dspi_flags. + */ +static inline void DSPI_ClearStatusFlags(SPI_Type *base, uint32_t statusFlags) +{ + base->SR = statusFlags; /*!< The status flags are cleared by writing 1 (w1c).*/ +} + +/*! + *@} +*/ + +/*! + * @name Interrupts + * @{ + */ + +/*! + * @brief Enables the DSPI interrupts. + * + * This function configures the various interrupt masks of the DSPI. The parameters are base and an interrupt mask. + * Note, for Tx Fill and Rx FIFO drain requests, enable the interrupt request and disable the DMA request. + * + * @code + * DSPI_EnableInterrupts(base, kDSPI_TxCompleteInterruptEnable | kDSPI_EndOfQueueInterruptEnable ); + * @endcode + * + * @param base DSPI peripheral address. + * @param mask The interrupt mask, can use the enum _dspi_interrupt_enable. + */ +void DSPI_EnableInterrupts(SPI_Type *base, uint32_t mask); + +/*! + * @brief Disables the DSPI interrupts. + * + * @code + * DSPI_DisableInterrupts(base, kDSPI_TxCompleteInterruptEnable | kDSPI_EndOfQueueInterruptEnable ); + * @endcode + * + * @param base DSPI peripheral address. + * @param mask The interrupt mask, can use the enum _dspi_interrupt_enable. + */ +static inline void DSPI_DisableInterrupts(SPI_Type *base, uint32_t mask) +{ + base->RSER &= ~mask; +} + +/*! + *@} +*/ + +/*! + * @name DMA Control + * @{ + */ + +/*! + * @brief Enables the DSPI DMA request. + * + * This function configures the Rx and Tx DMA mask of the DSPI. The parameters are base and a DMA mask. + * @code + * DSPI_EnableDMA(base, kDSPI_TxDmaEnable | kDSPI_RxDmaEnable); + * @endcode + * + * @param base DSPI peripheral address. + * @param mask The interrupt mask can use the enum dspi_dma_enable. + */ +static inline void DSPI_EnableDMA(SPI_Type *base, uint32_t mask) +{ + base->RSER |= mask; +} + +/*! + * @brief Disables the DSPI DMA request. + * + * This function configures the Rx and Tx DMA mask of the DSPI. The parameters are base and a DMA mask. + * @code + * SPI_DisableDMA(base, kDSPI_TxDmaEnable | kDSPI_RxDmaEnable); + * @endcode + * + * @param base DSPI peripheral address. + * @param mask The interrupt mask can use the enum dspi_dma_enable. + */ +static inline void DSPI_DisableDMA(SPI_Type *base, uint32_t mask) +{ + base->RSER &= ~mask; +} + +/*! + * @brief Gets the DSPI master PUSHR data register address for the DMA operation. + * + * This function gets the DSPI master PUSHR data register address because this value is needed for the DMA operation. + * + * @param base DSPI peripheral address. + * @return The DSPI master PUSHR data register address. + */ +static inline uint32_t DSPI_MasterGetTxRegisterAddress(SPI_Type *base) +{ + return (uint32_t) & (base->PUSHR); +} + +/*! + * @brief Gets the DSPI slave PUSHR data register address for the DMA operation. + * + * This function gets the DSPI slave PUSHR data register address as this value is needed for the DMA operation. + * + * @param base DSPI peripheral address. + * @return The DSPI slave PUSHR data register address. + */ +static inline uint32_t DSPI_SlaveGetTxRegisterAddress(SPI_Type *base) +{ + return (uint32_t) & (base->PUSHR_SLAVE); +} + +/*! + * @brief Gets the DSPI POPR data register address for the DMA operation. + * + * This function gets the DSPI POPR data register address as this value is needed for the DMA operation. + * + * @param base DSPI peripheral address. + * @return The DSPI POPR data register address. + */ +static inline uint32_t DSPI_GetRxRegisterAddress(SPI_Type *base) +{ + return (uint32_t) & (base->POPR); +} + +/*! + *@} +*/ + +/*! + * @name Bus Operations + * @{ + */ + +/*! + * @brief Configures the DSPI for master or slave. + * + * @param base DSPI peripheral address. + * @param mode Mode setting (master or slave) of type dspi_master_slave_mode_t. + */ +static inline void DSPI_SetMasterSlaveMode(SPI_Type *base, dspi_master_slave_mode_t mode) +{ + base->MCR = (base->MCR & (~SPI_MCR_MSTR_MASK)) | SPI_MCR_MSTR(mode); +} + +/*! + * @brief Returns whether the DSPI module is in master mode. + * + * @param base DSPI peripheral address. + * @return Returns true if the module is in master mode or false if the module is in slave mode. + */ +static inline bool DSPI_IsMaster(SPI_Type *base) +{ + return (bool)((base->MCR) & SPI_MCR_MSTR_MASK); +} +/*! + * @brief Starts the DSPI transfers and clears HALT bit in MCR. + * + * This function sets the module to begin data transfer in either master or slave mode. + * + * @param base DSPI peripheral address. + */ +static inline void DSPI_StartTransfer(SPI_Type *base) +{ + base->MCR &= ~SPI_MCR_HALT_MASK; +} +/*! + * @brief Stops (halts) DSPI transfers and sets HALT bit in MCR. + * + * This function stops data transfers in either master or slave mode. + * + * @param base DSPI peripheral address. + */ +static inline void DSPI_StopTransfer(SPI_Type *base) +{ + base->MCR |= SPI_MCR_HALT_MASK; +} + +/*! + * @brief Enables (or disables) the DSPI FIFOs. + * + * This function allows the caller to disable/enable the Tx and Rx FIFOs (independently). + * Note that to disable, the caller must pass in a logic 0 (false) for the particular FIFO configuration. To enable, + * the caller must pass in a logic 1 (true). + * + * @param base DSPI peripheral address. + * @param enableTxFifo Disables (false) the TX FIFO, else enables (true) the TX FIFO + * @param enableRxFifo Disables (false) the RX FIFO, else enables (true) the RX FIFO + */ +static inline void DSPI_SetFifoEnable(SPI_Type *base, bool enableTxFifo, bool enableRxFifo) +{ + base->MCR = (base->MCR & (~(SPI_MCR_DIS_RXF_MASK | SPI_MCR_DIS_TXF_MASK))) | SPI_MCR_DIS_TXF(!enableTxFifo) | + SPI_MCR_DIS_RXF(!enableRxFifo); +} + +/*! + * @brief Flushes the DSPI FIFOs. + * + * @param base DSPI peripheral address. + * @param flushTxFifo Flushes (true) the Tx FIFO, else do not flush (false) the Tx FIFO + * @param flushRxFifo Flushes (true) the Rx FIFO, else do not flush (false) the Rx FIFO + */ +static inline void DSPI_FlushFifo(SPI_Type *base, bool flushTxFifo, bool flushRxFifo) +{ + base->MCR = (base->MCR & (~(SPI_MCR_CLR_TXF_MASK | SPI_MCR_CLR_RXF_MASK))) | SPI_MCR_CLR_TXF(flushTxFifo) | + SPI_MCR_CLR_RXF(flushRxFifo); +} + +/*! + * @brief Configures the DSPI peripheral chip select polarity simultaneously. + * For example, PCS0 and PCS1 set to active low and other PCS set to active high. Note that the number of + * PCSs is specific to the device. + * @code + * DSPI_SetAllPcsPolarity(base, kDSPI_Pcs0ActiveLow | kDSPI_Pcs1ActiveLow); + @endcode + * @param base DSPI peripheral address. + * @param mask The PCS polarity mask , can use the enum _dspi_pcs_polarity. + */ +static inline void DSPI_SetAllPcsPolarity(SPI_Type *base, uint32_t mask) +{ + base->MCR = (base->MCR & ~SPI_MCR_PCSIS_MASK) | SPI_MCR_PCSIS(mask); +} + +/*! + * @brief Sets the DSPI baud rate in bits per second. + * + * This function takes in the desired baudRate_Bps (baud rate) and calculates the nearest possible baud rate without + * exceeding the desired baud rate, and returns the calculated baud rate in bits-per-second. It requires that the + * caller also provide the frequency of the module source clock (in Hertz). + * + * @param base DSPI peripheral address. + * @param whichCtar The desired Clock and Transfer Attributes Register (CTAR) of the type dspi_ctar_selection_t + * @param baudRate_Bps The desired baud rate in bits per second + * @param srcClock_Hz Module source input clock in Hertz + * @return The actual calculated baud rate + */ +uint32_t DSPI_MasterSetBaudRate(SPI_Type *base, + dspi_ctar_selection_t whichCtar, + uint32_t baudRate_Bps, + uint32_t srcClock_Hz); + +/*! + * @brief Manually configures the delay prescaler and scaler for a particular CTAR. + * + * This function configures the PCS to SCK delay pre-scalar (PcsSCK) and scalar (CSSCK), after SCK delay pre-scalar + * (PASC) and scalar (ASC), and the delay after transfer pre-scalar (PDT)and scalar (DT). + * + * These delay names are available in type dspi_delay_type_t. + * + * The user passes the delay to configure along with the prescaler and scaler value. + * This allows the user to directly set the prescaler/scaler values if they have pre-calculated them or if they simply + * wish to manually increment either value. + * + * @param base DSPI peripheral address. + * @param whichCtar The desired Clock and Transfer Attributes Register (CTAR) of type dspi_ctar_selection_t. + * @param prescaler The prescaler delay value (can be an integer 0, 1, 2, or 3). + * @param scaler The scaler delay value (can be any integer between 0 to 15). + * @param whichDelay The desired delay to configure, must be of type dspi_delay_type_t + */ +void DSPI_MasterSetDelayScaler( + SPI_Type *base, dspi_ctar_selection_t whichCtar, uint32_t prescaler, uint32_t scaler, dspi_delay_type_t whichDelay); + +/*! + * @brief Calculates the delay prescaler and scaler based on the desired delay input in nanoseconds. + * + * This function calculates the values for: + * PCS to SCK delay pre-scalar (PCSSCK) and scalar (CSSCK), or + * After SCK delay pre-scalar (PASC) and scalar (ASC), or + * Delay after transfer pre-scalar (PDT)and scalar (DT). + * + * These delay names are available in type dspi_delay_type_t. + * + * The user passes which delay they want to configure along with the desired delay value in nanoseconds. The function + * calculates the values needed for the prescaler and scaler and returning the actual calculated delay as an exact + * delay match may not be possible. In this case, the closest match is calculated without going below the desired + * delay value input. + * It is possible to input a very large delay value that exceeds the capability of the part, in which case the maximum + * supported delay is returned. The higher-level peripheral driver alerts the user of an out of range delay + * input. + * + * @param base DSPI peripheral address. + * @param whichCtar The desired Clock and Transfer Attributes Register (CTAR) of type dspi_ctar_selection_t. + * @param whichDelay The desired delay to configure, must be of type dspi_delay_type_t + * @param srcClock_Hz Module source input clock in Hertz + * @param delayTimeInNanoSec The desired delay value in nanoseconds. + * @return The actual calculated delay value. + */ +uint32_t DSPI_MasterSetDelayTimes(SPI_Type *base, + dspi_ctar_selection_t whichCtar, + dspi_delay_type_t whichDelay, + uint32_t srcClock_Hz, + uint32_t delayTimeInNanoSec); + +/*! + * @brief Writes data into the data buffer for master mode. + * + * In master mode, the 16-bit data is appended to the 16-bit command info. The command portion + * provides characteristics of the data such as the optional continuous chip select + * operation between transfers, the desired Clock and Transfer Attributes register to use for the + * associated SPI frame, the desired PCS signal to use for the data transfer, whether the current + * transfer is the last in the queue, and whether to clear the transfer count (normally needed when + * sending the first frame of a data packet). This is an example: + * @code + * dspi_command_data_config_t commandConfig; + * commandConfig.isPcsContinuous = true; + * commandConfig.whichCtar = kDSPICtar0; + * commandConfig.whichPcs = kDSPIPcs0; + * commandConfig.clearTransferCount = false; + * commandConfig.isEndOfQueue = false; + * DSPI_MasterWriteData(base, &commandConfig, dataWord); + @endcode + * + * @param base DSPI peripheral address. + * @param command Pointer to command structure. + * @param data The data word to be sent. + */ +static inline void DSPI_MasterWriteData(SPI_Type *base, dspi_command_data_config_t *command, uint16_t data) +{ + base->PUSHR = SPI_PUSHR_CONT(command->isPcsContinuous) | SPI_PUSHR_CTAS(command->whichCtar) | + SPI_PUSHR_PCS(command->whichPcs) | SPI_PUSHR_EOQ(command->isEndOfQueue) | + SPI_PUSHR_CTCNT(command->clearTransferCount) | SPI_PUSHR_TXDATA(data); +} + +/*! + * @brief Sets the dspi_command_data_config_t structure to default values. + * + * The purpose of this API is to get the configuration structure initialized for use in the DSPI_MasterWrite_xx(). + * User may use the initialized structure unchanged in DSPI_MasterWrite_xx() or modify the structure + * before calling DSPI_MasterWrite_xx(). + * Example: + * @code + * dspi_command_data_config_t command; + * DSPI_GetDefaultDataCommandConfig(&command); + * @endcode + * @param command pointer to dspi_command_data_config_t structure. + */ +void DSPI_GetDefaultDataCommandConfig(dspi_command_data_config_t *command); + +/*! + * @brief Writes data into the data buffer master mode and waits till complete to return. + * + * In master mode, the 16-bit data is appended to the 16-bit command info. The command portion + * provides characteristics of the data such as the optional continuous chip select + * operation between transfers, the desired Clock and Transfer Attributes register to use for the + * associated SPI frame, the desired PCS signal to use for the data transfer, whether the current + * transfer is the last in the queue, and whether to clear the transfer count (normally needed when + * sending the first frame of a data packet). This is an example: + * @code + * dspi_command_config_t commandConfig; + * commandConfig.isPcsContinuous = true; + * commandConfig.whichCtar = kDSPICtar0; + * commandConfig.whichPcs = kDSPIPcs1; + * commandConfig.clearTransferCount = false; + * commandConfig.isEndOfQueue = false; + * DSPI_MasterWriteDataBlocking(base, &commandConfig, dataWord); + * @endcode + * + * Note that this function does not return until after the transmit is complete. Also note that the DSPI must be + * enabled and running to transmit data (MCR[MDIS] & [HALT] = 0). Because the SPI is a synchronous protocol, + * receive data is available when transmit completes. + * + * @param base DSPI peripheral address. + * @param command Pointer to command structure. + * @param data The data word to be sent. + */ +void DSPI_MasterWriteDataBlocking(SPI_Type *base, dspi_command_data_config_t *command, uint16_t data); + +/*! + * @brief Returns the DSPI command word formatted to the PUSHR data register bit field. + * + * This function allows the caller to pass in the data command structure and returns the command word formatted + * according to the DSPI PUSHR register bit field placement. The user can then "OR" the returned command word with the + * desired data to send and use the function DSPI_HAL_WriteCommandDataMastermode or + * DSPI_HAL_WriteCommandDataMastermodeBlocking to write the entire 32-bit command data word to the PUSHR. This helps + * improve performance in cases where the command structure is constant. For example, the user calls this function + * before starting a transfer to generate the command word. When they are ready to transmit the data, they OR + * this formatted command word with the desired data to transmit. This process increases transmit performance when + * compared to calling send functions such as DSPI_HAL_WriteDataMastermode which format the command word each time a + * data word is to be sent. + * + * @param command Pointer to command structure. + * @return The command word formatted to the PUSHR data register bit field. + */ +static inline uint32_t DSPI_MasterGetFormattedCommand(dspi_command_data_config_t *command) +{ + /* Format the 16-bit command word according to the PUSHR data register bit field*/ + return (uint32_t)(SPI_PUSHR_CONT(command->isPcsContinuous) | SPI_PUSHR_CTAS(command->whichCtar) | + SPI_PUSHR_PCS(command->whichPcs) | SPI_PUSHR_EOQ(command->isEndOfQueue) | + SPI_PUSHR_CTCNT(command->clearTransferCount)); +} + +/*! + * @brief Writes a 32-bit data word (16-bit command appended with 16-bit data) into the data + * buffer, master mode and waits till complete to return. + * + * In this function, the user must append the 16-bit data to the 16-bit command info then provide the total 32-bit word + * as the data to send. + * The command portion provides characteristics of the data such as the optional continuous chip select operation +* between + * transfers, the desired Clock and Transfer Attributes register to use for the associated SPI frame, the desired PCS + * signal to use for the data transfer, whether the current transfer is the last in the queue, and whether to clear the + * transfer count (normally needed when sending the first frame of a data packet). The user is responsible for + * appending this command with the data to send. This is an example: + * @code + * dataWord = <16-bit command> | <16-bit data>; + * DSPI_HAL_WriteCommandDataMastermodeBlocking(base, dataWord); + * @endcode + * + * Note that this function does not return until after the transmit is complete. Also note that the DSPI must be + * enabled and running to transmit data (MCR[MDIS] & [HALT] = 0). + * Because the SPI is a synchronous protocol, the receive data is available when transmit completes. + * + * For a blocking polling transfer, see methods below. + * Option 1: +* uint32_t command_to_send = DSPI_MasterGetFormattedCommand(&command); +* uint32_t data0 = command_to_send | data_need_to_send_0; +* uint32_t data1 = command_to_send | data_need_to_send_1; +* uint32_t data2 = command_to_send | data_need_to_send_2; +* +* DSPI_MasterWriteCommandDataBlocking(base,data0); +* DSPI_MasterWriteCommandDataBlocking(base,data1); +* DSPI_MasterWriteCommandDataBlocking(base,data2); +* +* Option 2: +* DSPI_MasterWriteDataBlocking(base,&command,data_need_to_send_0); +* DSPI_MasterWriteDataBlocking(base,&command,data_need_to_send_1); +* DSPI_MasterWriteDataBlocking(base,&command,data_need_to_send_2); +* + * @param base DSPI peripheral address. + * @param data The data word (command and data combined) to be sent + */ +void DSPI_MasterWriteCommandDataBlocking(SPI_Type *base, uint32_t data); + +/*! + * @brief Writes data into the data buffer in slave mode. + * + * In slave mode, up to 16-bit words may be written. + * + * @param base DSPI peripheral address. + * @param data The data to send. + */ +static inline void DSPI_SlaveWriteData(SPI_Type *base, uint32_t data) +{ + base->PUSHR_SLAVE = data; +} + +/*! + * @brief Writes data into the data buffer in slave mode, waits till data was transmitted, and returns. + * + * In slave mode, up to 16-bit words may be written. The function first clears the transmit complete flag, writes data + * into data register, and finally waits until the data is transmitted. + * + * @param base DSPI peripheral address. + * @param data The data to send. + */ +void DSPI_SlaveWriteDataBlocking(SPI_Type *base, uint32_t data); + +/*! + * @brief Reads data from the data buffer. + * + * @param base DSPI peripheral address. + * @return The data from the read data buffer. + */ +static inline uint32_t DSPI_ReadData(SPI_Type *base) +{ + return (base->POPR); +} + +/*! + *@} +*/ + +/*! + * @name Transactional + * @{ + */ +/*Transactional APIs*/ + +/*! + * @brief Initializes the DSPI master handle. + * + * This function initializes the DSPI handle which can be used for other DSPI transactional APIs. Usually, for a + * specified DSPI instance, call this API once to get the initialized handle. + * + * @param base DSPI peripheral base address. + * @param handle DSPI handle pointer to dspi_master_handle_t. + * @param callback dspi callback. + * @param userData callback function parameter. + */ +void DSPI_MasterTransferCreateHandle(SPI_Type *base, + dspi_master_handle_t *handle, + dspi_master_transfer_callback_t callback, + void *userData); + +/*! + * @brief DSPI master transfer data using polling. + * + * This function transfers data with polling. This is a blocking function, which does not return until all transfers + * have been + * completed. + * + * @param base DSPI peripheral base address. + * @param transfer pointer to dspi_transfer_t structure. + * @return status of status_t. + */ +status_t DSPI_MasterTransferBlocking(SPI_Type *base, dspi_transfer_t *transfer); + +/*! + * @brief DSPI master transfer data using interrupts. + * + * This function transfers data using interrupts. This is a non-blocking function, which returns right away. When all + data + * have been transferred, the callback function is called. + + * @param base DSPI peripheral base address. + * @param handle pointer to dspi_master_handle_t structure which stores the transfer state. + * @param transfer pointer to dspi_transfer_t structure. + * @return status of status_t. + */ +status_t DSPI_MasterTransferNonBlocking(SPI_Type *base, dspi_master_handle_t *handle, dspi_transfer_t *transfer); + +/*! + * @brief Gets the master transfer count. + * + * This function gets the master transfer count. + * + * @param base DSPI peripheral base address. + * @param handle pointer to dspi_master_handle_t structure which stores the transfer state. + * @param count Number of bytes transferred so far by the non-blocking transaction. + * @return status of status_t. + */ +status_t DSPI_MasterTransferGetCount(SPI_Type *base, dspi_master_handle_t *handle, size_t *count); + +/*! + * @brief DSPI master aborts transfer using an interrupt. + * + * This function aborts a transfer using an interrupt. + * + * @param base DSPI peripheral base address. + * @param handle pointer to dspi_master_handle_t structure which stores the transfer state. + */ +void DSPI_MasterTransferAbort(SPI_Type *base, dspi_master_handle_t *handle); + +/*! + * @brief DSPI Master IRQ handler function. + * + * This function processes the DSPI transmit and receive IRQ. + + * @param base DSPI peripheral base address. + * @param handle pointer to dspi_master_handle_t structure which stores the transfer state. + */ +void DSPI_MasterTransferHandleIRQ(SPI_Type *base, dspi_master_handle_t *handle); + +/*! + * @brief Initializes the DSPI slave handle. + * + * This function initializes the DSPI handle, which can be used for other DSPI transactional APIs. Usually, for a + * specified DSPI instance, call this API once to get the initialized handle. + * + * @param handle DSPI handle pointer to dspi_slave_handle_t. + * @param base DSPI peripheral base address. + * @param callback DSPI callback. + * @param userData callback function parameter. + */ +void DSPI_SlaveTransferCreateHandle(SPI_Type *base, + dspi_slave_handle_t *handle, + dspi_slave_transfer_callback_t callback, + void *userData); + +/*! + * @brief DSPI slave transfers data using an interrupt. + * + * This function transfers data using an interrupt. This is a non-blocking function, which returns right away. When all + * data + * have been transferred, the callback function is called. + * + * @param base DSPI peripheral base address. + * @param handle pointer to dspi_slave_handle_t structure which stores the transfer state. + * @param transfer pointer to dspi_transfer_t structure. + * @return status of status_t. + */ +status_t DSPI_SlaveTransferNonBlocking(SPI_Type *base, dspi_slave_handle_t *handle, dspi_transfer_t *transfer); + +/*! + * @brief Gets the slave transfer count. + * + * This function gets the slave transfer count. + * + * @param base DSPI peripheral base address. + * @param handle pointer to dspi_master_handle_t structure which stores the transfer state. + * @param count Number of bytes transferred so far by the non-blocking transaction. + * @return status of status_t. + */ +status_t DSPI_SlaveTransferGetCount(SPI_Type *base, dspi_slave_handle_t *handle, size_t *count); + +/*! + * @brief DSPI slave aborts a transfer using an interrupt. + * + * This function aborts transfer using an interrupt. + * + * @param base DSPI peripheral base address. + * @param handle pointer to dspi_slave_handle_t structure which stores the transfer state. + */ +void DSPI_SlaveTransferAbort(SPI_Type *base, dspi_slave_handle_t *handle); + +/*! + * @brief DSPI Master IRQ handler function. + * + * This function processes the DSPI transmit and receive IRQ. + * + * @param base DSPI peripheral base address. + * @param handle pointer to dspi_slave_handle_t structure which stores the transfer state. + */ +void DSPI_SlaveTransferHandleIRQ(SPI_Type *base, dspi_slave_handle_t *handle); + +/*! + *@} +*/ + +#if defined(__cplusplus) +} +#endif /*_cplusplus*/ + /*! + *@} + */ + +#endif /*_FSL_DSPI_H_*/ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dspi_edma.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dspi_edma.c new file mode 100644 index 00000000000..a1c20027b2c --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dspi_edma.c @@ -0,0 +1,1263 @@ +/* +* Copyright (c) 2015, Freescale Semiconductor, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without modification, +* are permitted provided that the following conditions are met: +* +* o Redistributions of source code must retain the above copyright notice, this list +* of conditions and the following disclaimer. +* +* o Redistributions in binary form must reproduce the above copyright notice, this +* list of conditions and the following disclaimer in the documentation and/or +* other materials provided with the distribution. +* +* o Neither the name of Freescale Semiconductor, Inc. nor the names of its +* contributors may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "fsl_dspi_edma.h" + +/*********************************************************************************************************************** +* Definitons +***********************************************************************************************************************/ + +/*! +* @brief Structure definition for dspi_master_edma_private_handle_t. The structure is private. +*/ +typedef struct _dspi_master_edma_private_handle +{ + SPI_Type *base; /*!< DSPI peripheral base address. */ + dspi_master_edma_handle_t *handle; /*!< dspi_master_edma_handle_t handle */ +} dspi_master_edma_private_handle_t; + +/*! +* @brief Structure definition for dspi_slave_edma_private_handle_t. The structure is private. +*/ +typedef struct _dspi_slave_edma_private_handle +{ + SPI_Type *base; /*!< DSPI peripheral base address. */ + dspi_slave_edma_handle_t *handle; /*!< dspi_master_edma_handle_t handle */ +} dspi_slave_edma_private_handle_t; + +/*********************************************************************************************************************** +* Prototypes +***********************************************************************************************************************/ +/*! +* @brief EDMA_DspiMasterCallback after the DSPI master transfer completed by using EDMA. +* This is not a public API as it is called from other driver functions. +*/ +static void EDMA_DspiMasterCallback(edma_handle_t *edmaHandle, + void *g_dspiEdmaPrivateHandle, + bool transferDone, + uint32_t tcds); + +/*! +* @brief EDMA_DspiSlaveCallback after the DSPI slave transfer completed by using EDMA. +* This is not a public API as it is called from other driver functions. +*/ +static void EDMA_DspiSlaveCallback(edma_handle_t *edmaHandle, + void *g_dspiEdmaPrivateHandle, + bool transferDone, + uint32_t tcds); +/*! +* @brief Get instance number for DSPI module. +* +* This is not a public API and it's extern from fsl_dspi.c. +* +* @param base DSPI peripheral base address +*/ +extern uint32_t DSPI_GetInstance(SPI_Type *base); + +/*********************************************************************************************************************** +* Variables +***********************************************************************************************************************/ + +/*! @brief Pointers to dspi edma handles for each instance. */ +static dspi_master_edma_private_handle_t s_dspiMasterEdmaPrivateHandle[FSL_FEATURE_SOC_DSPI_COUNT]; +static dspi_slave_edma_private_handle_t s_dspiSlaveEdmaPrivateHandle[FSL_FEATURE_SOC_DSPI_COUNT]; + +/*********************************************************************************************************************** +* Code +***********************************************************************************************************************/ + +void DSPI_MasterTransferCreateHandleEDMA(SPI_Type *base, + dspi_master_edma_handle_t *handle, + dspi_master_edma_transfer_callback_t callback, + void *userData, + edma_handle_t *edmaRxRegToRxDataHandle, + edma_handle_t *edmaTxDataToIntermediaryHandle, + edma_handle_t *edmaIntermediaryToTxRegHandle) +{ + assert(handle); + + /* Zero the handle. */ + memset(handle, 0, sizeof(*handle)); + + uint32_t instance = DSPI_GetInstance(base); + + s_dspiMasterEdmaPrivateHandle[instance].base = base; + s_dspiMasterEdmaPrivateHandle[instance].handle = handle; + + handle->callback = callback; + handle->userData = userData; + + handle->edmaRxRegToRxDataHandle = edmaRxRegToRxDataHandle; + handle->edmaTxDataToIntermediaryHandle = edmaTxDataToIntermediaryHandle; + handle->edmaIntermediaryToTxRegHandle = edmaIntermediaryToTxRegHandle; +} + +status_t DSPI_MasterTransferEDMA(SPI_Type *base, dspi_master_edma_handle_t *handle, dspi_transfer_t *transfer) +{ + assert(handle && transfer); + + /* If the transfer count is zero, then return immediately.*/ + if (transfer->dataSize == 0) + { + return kStatus_InvalidArgument; + } + + /* If both send buffer and receive buffer is null */ + if ((!(transfer->txData)) && (!(transfer->rxData))) + { + return kStatus_InvalidArgument; + } + + /* Check that we're not busy.*/ + if (handle->state == kDSPI_Busy) + { + return kStatus_DSPI_Busy; + } + + uint32_t instance = DSPI_GetInstance(base); + uint16_t wordToSend = 0; + uint8_t dummyData = DSPI_DUMMY_DATA; + uint8_t dataAlreadyFed = 0; + uint8_t dataFedMax = 2; + + uint32_t rxAddr = DSPI_GetRxRegisterAddress(base); + uint32_t txAddr = DSPI_MasterGetTxRegisterAddress(base); + + edma_tcd_t *softwareTCD = (edma_tcd_t *)((uint32_t)(&handle->dspiSoftwareTCD[1]) & (~0x1FU)); + + edma_transfer_config_t transferConfigA; + edma_transfer_config_t transferConfigB; + edma_transfer_config_t transferConfigC; + + handle->txBuffIfNull = ((uint32_t)DSPI_DUMMY_DATA << 8) | DSPI_DUMMY_DATA; + + handle->state = kDSPI_Busy; + + dspi_command_data_config_t commandStruct; + DSPI_StopTransfer(base); + DSPI_FlushFifo(base, true, true); + DSPI_ClearStatusFlags(base, kDSPI_AllStatusFlag); + + commandStruct.whichPcs = + (dspi_which_pcs_t)(1U << ((transfer->configFlags & DSPI_MASTER_PCS_MASK) >> DSPI_MASTER_PCS_SHIFT)); + commandStruct.isEndOfQueue = false; + commandStruct.clearTransferCount = false; + commandStruct.whichCtar = + (dspi_ctar_selection_t)((transfer->configFlags & DSPI_MASTER_CTAR_MASK) >> DSPI_MASTER_CTAR_SHIFT); + commandStruct.isPcsContinuous = (bool)(transfer->configFlags & kDSPI_MasterPcsContinuous); + handle->command = DSPI_MasterGetFormattedCommand(&(commandStruct)); + + commandStruct.isEndOfQueue = true; + commandStruct.isPcsContinuous = (bool)(transfer->configFlags & kDSPI_MasterActiveAfterTransfer); + handle->lastCommand = DSPI_MasterGetFormattedCommand(&(commandStruct)); + + handle->bitsPerFrame = ((base->CTAR[commandStruct.whichCtar] & SPI_CTAR_FMSZ_MASK) >> SPI_CTAR_FMSZ_SHIFT) + 1; + + if ((base->MCR & SPI_MCR_DIS_RXF_MASK) || (base->MCR & SPI_MCR_DIS_TXF_MASK)) + { + handle->fifoSize = 1; + } + else + { + handle->fifoSize = FSL_FEATURE_DSPI_FIFO_SIZEn(base); + } + handle->txData = transfer->txData; + handle->rxData = transfer->rxData; + handle->remainingSendByteCount = transfer->dataSize; + handle->remainingReceiveByteCount = transfer->dataSize; + handle->totalByteCount = transfer->dataSize; + + /* this limits the amount of data we can transfer due to the linked channel. + * The max bytes is 511 if 8-bit/frame or 1022 if 16-bit/frame + */ + if (handle->bitsPerFrame > 8) + { + if (transfer->dataSize > 1022) + { + return kStatus_DSPI_OutOfRange; + } + } + else + { + if (transfer->dataSize > 511) + { + return kStatus_DSPI_OutOfRange; + } + } + + DSPI_DisableDMA(base, kDSPI_RxDmaEnable | kDSPI_TxDmaEnable); + + EDMA_SetCallback(handle->edmaRxRegToRxDataHandle, EDMA_DspiMasterCallback, + &s_dspiMasterEdmaPrivateHandle[instance]); + + handle->isThereExtraByte = false; + if (handle->bitsPerFrame > 8) + { + if (handle->remainingSendByteCount % 2 == 1) + { + handle->remainingSendByteCount++; + handle->remainingReceiveByteCount--; + handle->isThereExtraByte = true; + } + } + + /*If dspi has separate dma request , prepare the first data in "intermediary" . + else (dspi has shared dma request) , send first 2 data if there is fifo or send first 1 data if there is no fifo*/ + if (1 == FSL_FEATURE_DSPI_HAS_SEPARATE_DMA_RX_TX_REQn(base)) + { + /* For DSPI instances with separate RX/TX DMA requests, we'll use the TX DMA request to + * trigger the TX DMA channel and RX DMA request to trigger the RX DMA channel + */ + + /*Prepare the firt data*/ + if (handle->bitsPerFrame > 8) + { + /* If it's the last word */ + if (handle->remainingSendByteCount <= 2) + { + if (handle->txData) + { + if (handle->isThereExtraByte) + { + wordToSend = *(handle->txData) | ((uint32_t)dummyData << 8); + } + else + { + wordToSend = *(handle->txData); + ++handle->txData; /* increment to next data byte */ + wordToSend |= (unsigned)(*(handle->txData)) << 8U; + } + } + else + { + wordToSend = ((uint32_t)dummyData << 8) | dummyData; + } + handle->lastCommand = (handle->lastCommand & 0xffff0000U) | wordToSend; + } + else /* For all words except the last word , frame > 8bits */ + { + if (handle->txData) + { + wordToSend = *(handle->txData); + ++handle->txData; /* increment to next data byte */ + wordToSend |= (unsigned)(*(handle->txData)) << 8U; + ++handle->txData; /* increment to next data byte */ + } + else + { + wordToSend = ((uint32_t)dummyData << 8) | dummyData; + } + handle->command = (handle->command & 0xffff0000U) | wordToSend; + } + } + else /* Optimized for bits/frame less than or equal to one byte. */ + { + if (handle->txData) + { + wordToSend = *(handle->txData); + ++handle->txData; /* increment to next data word*/ + } + else + { + wordToSend = dummyData; + } + + if (handle->remainingSendByteCount == 1) + { + handle->lastCommand = (handle->lastCommand & 0xffff0000U) | wordToSend; + } + else + { + handle->command = (handle->command & 0xffff0000U) | wordToSend; + } + } + } + + else /*dspi has shared dma request*/ + + { + /* For DSPI instances with shared RX/TX DMA requests, we'll use the RX DMA request to + * trigger ongoing transfers and will link to the TX DMA channel from the RX DMA channel. + */ + + /* If bits/frame is greater than one byte */ + if (handle->bitsPerFrame > 8) + { + while (DSPI_GetStatusFlags(base) & kDSPI_TxFifoFillRequestFlag) + { + if (handle->remainingSendByteCount <= 2) + { + if (handle->txData) + { + if (handle->isThereExtraByte) + { + wordToSend = *(handle->txData) | ((uint32_t)dummyData << 8); + } + else + { + wordToSend = *(handle->txData); + ++handle->txData; + wordToSend |= (unsigned)(*(handle->txData)) << 8U; + } + } + else + { + wordToSend = ((uint32_t)dummyData << 8) | dummyData; + ; + } + handle->remainingSendByteCount = 0; + base->PUSHR = (handle->lastCommand & 0xffff0000U) | wordToSend; + } + /* For all words except the last word */ + else + { + if (handle->txData) + { + wordToSend = *(handle->txData); + ++handle->txData; + wordToSend |= (unsigned)(*(handle->txData)) << 8U; + ++handle->txData; + } + else + { + wordToSend = ((uint32_t)dummyData << 8) | dummyData; + ; + } + handle->remainingSendByteCount -= 2; + base->PUSHR = (handle->command & 0xffff0000U) | wordToSend; + } + + /* Try to clear the TFFF; if the TX FIFO is full this will clear */ + DSPI_ClearStatusFlags(base, kDSPI_TxFifoFillRequestFlag); + + dataAlreadyFed += 2; + + /* exit loop if send count is zero, else update local variables for next loop */ + if ((handle->remainingSendByteCount == 0) || (dataAlreadyFed == (dataFedMax * 2))) + { + break; + } + } /* End of TX FIFO fill while loop */ + } + else /* Optimized for bits/frame less than or equal to one byte. */ + { + while (DSPI_GetStatusFlags(base) & kDSPI_TxFifoFillRequestFlag) + { + if (handle->txData) + { + wordToSend = *(handle->txData); + ++handle->txData; + } + else + { + wordToSend = dummyData; + } + + if (handle->remainingSendByteCount == 1) + { + base->PUSHR = (handle->lastCommand & 0xffff0000U) | wordToSend; + } + else + { + base->PUSHR = (handle->command & 0xffff0000U) | wordToSend; + } + + /* Try to clear the TFFF; if the TX FIFO is full this will clear */ + DSPI_ClearStatusFlags(base, kDSPI_TxFifoFillRequestFlag); + + --handle->remainingSendByteCount; + + dataAlreadyFed++; + + /* exit loop if send count is zero, else update local variables for next loop */ + if ((handle->remainingSendByteCount == 0) || (dataAlreadyFed == dataFedMax)) + { + break; + } + } /* End of TX FIFO fill while loop */ + } + } + + /***channel_A *** used for carry the data from Rx_Data_Register(POPR) to User_Receive_Buffer*/ + EDMA_ResetChannel(handle->edmaRxRegToRxDataHandle->base, handle->edmaRxRegToRxDataHandle->channel); + + transferConfigA.srcAddr = (uint32_t)rxAddr; + transferConfigA.srcOffset = 0; + + if (handle->rxData) + { + transferConfigA.destAddr = (uint32_t) & (handle->rxData[0]); + transferConfigA.destOffset = 1; + } + else + { + transferConfigA.destAddr = (uint32_t) & (handle->rxBuffIfNull); + transferConfigA.destOffset = 0; + } + + transferConfigA.destTransferSize = kEDMA_TransferSize1Bytes; + + if (handle->bitsPerFrame <= 8) + { + transferConfigA.srcTransferSize = kEDMA_TransferSize1Bytes; + transferConfigA.minorLoopBytes = 1; + transferConfigA.majorLoopCounts = handle->remainingReceiveByteCount; + } + else + { + transferConfigA.srcTransferSize = kEDMA_TransferSize2Bytes; + transferConfigA.minorLoopBytes = 2; + transferConfigA.majorLoopCounts = handle->remainingReceiveByteCount / 2; + } + EDMA_SetTransferConfig(handle->edmaRxRegToRxDataHandle->base, handle->edmaRxRegToRxDataHandle->channel, + &transferConfigA, NULL); + EDMA_EnableChannelInterrupts(handle->edmaRxRegToRxDataHandle->base, handle->edmaRxRegToRxDataHandle->channel, + kEDMA_MajorInterruptEnable); + + /***channel_B *** used for carry the data from User_Send_Buffer to "intermediary" because the SPIx_PUSHR should + write the 32bits at once time . Then use channel_C to carry the "intermediary" to SPIx_PUSHR. Note that the + SPIx_PUSHR upper 16 bits are the "command" and the low 16bits are data */ + EDMA_ResetChannel(handle->edmaTxDataToIntermediaryHandle->base, handle->edmaTxDataToIntermediaryHandle->channel); + + if (handle->remainingSendByteCount > 0) + { + if (handle->txData) + { + transferConfigB.srcAddr = (uint32_t)(handle->txData); + transferConfigB.srcOffset = 1; + } + else + { + transferConfigB.srcAddr = (uint32_t)(&handle->txBuffIfNull); + transferConfigB.srcOffset = 0; + } + + transferConfigB.destAddr = (uint32_t)(&handle->command); + transferConfigB.destOffset = 0; + + transferConfigB.srcTransferSize = kEDMA_TransferSize1Bytes; + + if (handle->bitsPerFrame <= 8) + { + transferConfigB.destTransferSize = kEDMA_TransferSize1Bytes; + transferConfigB.minorLoopBytes = 1; + + if (1 == FSL_FEATURE_DSPI_HAS_SEPARATE_DMA_RX_TX_REQn(base)) + { + /*already prepared the first data in "intermediary" , so minus 1 */ + transferConfigB.majorLoopCounts = handle->remainingSendByteCount - 1; + } + else + { + /*Only enable channel_B minorlink to channel_C , so need to add one count due to the last time is + majorlink , the majorlink would not trigger the channel_C*/ + transferConfigB.majorLoopCounts = handle->remainingSendByteCount + 1; + } + } + else + { + transferConfigB.destTransferSize = kEDMA_TransferSize2Bytes; + transferConfigB.minorLoopBytes = 2; + if (1 == FSL_FEATURE_DSPI_HAS_SEPARATE_DMA_RX_TX_REQn(base)) + { + /*already prepared the first data in "intermediary" , so minus 1 */ + transferConfigB.majorLoopCounts = handle->remainingSendByteCount / 2 - 1; + } + else + { + /*Only enable channel_B minorlink to channel_C , so need to add one count due to the last time is + * majorlink*/ + transferConfigB.majorLoopCounts = handle->remainingSendByteCount / 2 + 1; + } + } + + EDMA_SetTransferConfig(handle->edmaTxDataToIntermediaryHandle->base, + handle->edmaTxDataToIntermediaryHandle->channel, &transferConfigB, NULL); + } + + /***channel_C ***carry the "intermediary" to SPIx_PUSHR. used the edma Scatter Gather function on channel_C to + handle the last data */ + EDMA_ResetChannel(handle->edmaIntermediaryToTxRegHandle->base, handle->edmaIntermediaryToTxRegHandle->channel); + + if (((handle->remainingSendByteCount > 0) && (1 != FSL_FEATURE_DSPI_HAS_SEPARATE_DMA_RX_TX_REQn(base))) || + ((((handle->remainingSendByteCount > 1) && (handle->bitsPerFrame <= 8)) || + ((handle->remainingSendByteCount > 2) && (handle->bitsPerFrame > 8))) && + (1 == FSL_FEATURE_DSPI_HAS_SEPARATE_DMA_RX_TX_REQn(base)))) + { + if (handle->txData) + { + uint32_t bufferIndex = 0; + + if (1 == FSL_FEATURE_DSPI_HAS_SEPARATE_DMA_RX_TX_REQn(base)) + { + if (handle->bitsPerFrame <= 8) + { + bufferIndex = handle->remainingSendByteCount - 1; + } + else + { + bufferIndex = handle->remainingSendByteCount - 2; + } + } + else + { + bufferIndex = handle->remainingSendByteCount; + } + + if (handle->bitsPerFrame <= 8) + { + handle->lastCommand = (handle->lastCommand & 0xffff0000U) | handle->txData[bufferIndex - 1]; + } + else + { + if (handle->isThereExtraByte) + { + handle->lastCommand = (handle->lastCommand & 0xffff0000U) | handle->txData[bufferIndex - 2] | + ((uint32_t)dummyData << 8); + } + else + { + handle->lastCommand = (handle->lastCommand & 0xffff0000U) | + ((uint32_t)handle->txData[bufferIndex - 1] << 8) | + handle->txData[bufferIndex - 2]; + } + } + } + else + { + if (handle->bitsPerFrame <= 8) + { + wordToSend = dummyData; + } + else + { + wordToSend = ((uint32_t)dummyData << 8) | dummyData; + } + handle->lastCommand = (handle->lastCommand & 0xffff0000U) | wordToSend; + } + } + + if ((1 == FSL_FEATURE_DSPI_HAS_SEPARATE_DMA_RX_TX_REQn(base)) || + ((1 != FSL_FEATURE_DSPI_HAS_SEPARATE_DMA_RX_TX_REQn(base)) && (handle->remainingSendByteCount > 0))) + { + transferConfigC.srcAddr = (uint32_t) & (handle->lastCommand); + transferConfigC.destAddr = (uint32_t)txAddr; + transferConfigC.srcTransferSize = kEDMA_TransferSize4Bytes; + transferConfigC.destTransferSize = kEDMA_TransferSize4Bytes; + transferConfigC.srcOffset = 0; + transferConfigC.destOffset = 0; + transferConfigC.minorLoopBytes = 4; + transferConfigC.majorLoopCounts = 1; + + EDMA_TcdReset(softwareTCD); + EDMA_TcdSetTransferConfig(softwareTCD, &transferConfigC, NULL); + } + + if (((handle->remainingSendByteCount > 1) && (handle->bitsPerFrame <= 8)) || + ((handle->remainingSendByteCount > 2) && (handle->bitsPerFrame > 8))) + { + transferConfigC.srcAddr = (uint32_t)(&(handle->command)); + transferConfigC.destAddr = (uint32_t)txAddr; + + transferConfigC.srcTransferSize = kEDMA_TransferSize4Bytes; + transferConfigC.destTransferSize = kEDMA_TransferSize4Bytes; + transferConfigC.srcOffset = 0; + transferConfigC.destOffset = 0; + transferConfigC.minorLoopBytes = 4; + + if (handle->bitsPerFrame <= 8) + { + transferConfigC.majorLoopCounts = handle->remainingSendByteCount - 1; + } + else + { + transferConfigC.majorLoopCounts = handle->remainingSendByteCount / 2 - 1; + } + + EDMA_SetTransferConfig(handle->edmaIntermediaryToTxRegHandle->base, + handle->edmaIntermediaryToTxRegHandle->channel, &transferConfigC, softwareTCD); + EDMA_EnableAutoStopRequest(handle->edmaIntermediaryToTxRegHandle->base, + handle->edmaIntermediaryToTxRegHandle->channel, false); + } + else + { + EDMA_SetTransferConfig(handle->edmaIntermediaryToTxRegHandle->base, + handle->edmaIntermediaryToTxRegHandle->channel, &transferConfigC, NULL); + } + + /*Start the EDMA channel_A , channel_B , channel_C transfer*/ + EDMA_StartTransfer(handle->edmaRxRegToRxDataHandle); + EDMA_StartTransfer(handle->edmaTxDataToIntermediaryHandle); + EDMA_StartTransfer(handle->edmaIntermediaryToTxRegHandle); + + /*Set channel priority*/ + uint8_t channelPriorityLow = handle->edmaRxRegToRxDataHandle->channel; + uint8_t channelPriorityMid = handle->edmaTxDataToIntermediaryHandle->channel; + uint8_t channelPriorityHigh = handle->edmaIntermediaryToTxRegHandle->channel; + uint8_t t = 0; + if (channelPriorityLow > channelPriorityMid) + { + t = channelPriorityLow; + channelPriorityLow = channelPriorityMid; + channelPriorityMid = t; + } + + if (channelPriorityLow > channelPriorityHigh) + { + t = channelPriorityLow; + channelPriorityLow = channelPriorityHigh; + channelPriorityHigh = t; + } + + if (channelPriorityMid > channelPriorityHigh) + { + t = channelPriorityMid; + channelPriorityMid = channelPriorityHigh; + channelPriorityHigh = t; + } + edma_channel_Preemption_config_t preemption_config_t; + preemption_config_t.enableChannelPreemption = true; + preemption_config_t.enablePreemptAbility = true; + preemption_config_t.channelPriority = channelPriorityLow; + + if (1 != FSL_FEATURE_DSPI_HAS_SEPARATE_DMA_RX_TX_REQn(base)) + { + EDMA_SetChannelPreemptionConfig(handle->edmaRxRegToRxDataHandle->base, handle->edmaRxRegToRxDataHandle->channel, + &preemption_config_t); + + preemption_config_t.channelPriority = channelPriorityMid; + EDMA_SetChannelPreemptionConfig(handle->edmaTxDataToIntermediaryHandle->base, + handle->edmaTxDataToIntermediaryHandle->channel, &preemption_config_t); + + preemption_config_t.channelPriority = channelPriorityHigh; + EDMA_SetChannelPreemptionConfig(handle->edmaIntermediaryToTxRegHandle->base, + handle->edmaIntermediaryToTxRegHandle->channel, &preemption_config_t); + } + else + { + EDMA_SetChannelPreemptionConfig(handle->edmaIntermediaryToTxRegHandle->base, + handle->edmaIntermediaryToTxRegHandle->channel, &preemption_config_t); + + preemption_config_t.channelPriority = channelPriorityMid; + EDMA_SetChannelPreemptionConfig(handle->edmaTxDataToIntermediaryHandle->base, + handle->edmaTxDataToIntermediaryHandle->channel, &preemption_config_t); + + preemption_config_t.channelPriority = channelPriorityHigh; + EDMA_SetChannelPreemptionConfig(handle->edmaRxRegToRxDataHandle->base, handle->edmaRxRegToRxDataHandle->channel, + &preemption_config_t); + } + + /*Set the channel link. + For DSPI instances with shared RX/TX DMA requests: Rx DMA request -> channel_A -> channel_B-> channel_C. + For DSPI instances with separate RX and TX DMA requests: + Rx DMA request -> channel_A + Tx DMA request -> channel_C -> channel_B . (so need prepare the first data in "intermediary" before the DMA + transfer and then channel_B is used to prepare the next data to "intermediary" ) */ + if (1 == FSL_FEATURE_DSPI_HAS_SEPARATE_DMA_RX_TX_REQn(base)) + { + /*if there is Tx DMA request , carry the 32bits data (handle->command) to PUSHR first , then link to channelB + to prepare the next 32bits data (User_send_buffer to handle->command) */ + if (handle->remainingSendByteCount > 1) + { + EDMA_SetChannelLink(handle->edmaIntermediaryToTxRegHandle->base, + handle->edmaIntermediaryToTxRegHandle->channel, kEDMA_MinorLink, + handle->edmaTxDataToIntermediaryHandle->channel); + } + + DSPI_EnableDMA(base, kDSPI_RxDmaEnable | kDSPI_TxDmaEnable); + } + else + { + if (handle->remainingSendByteCount > 0) + { + EDMA_SetChannelLink(handle->edmaRxRegToRxDataHandle->base, handle->edmaRxRegToRxDataHandle->channel, + kEDMA_MinorLink, handle->edmaTxDataToIntermediaryHandle->channel); + + if (handle->isThereExtraByte) + { + EDMA_SetChannelLink(handle->edmaRxRegToRxDataHandle->base, handle->edmaRxRegToRxDataHandle->channel, + kEDMA_MajorLink, handle->edmaTxDataToIntermediaryHandle->channel); + } + + EDMA_SetChannelLink(handle->edmaTxDataToIntermediaryHandle->base, + handle->edmaTxDataToIntermediaryHandle->channel, kEDMA_MinorLink, + handle->edmaIntermediaryToTxRegHandle->channel); + } + + DSPI_EnableDMA(base, kDSPI_RxDmaEnable); + } + + DSPI_StartTransfer(base); + + return kStatus_Success; +} + +static void EDMA_DspiMasterCallback(edma_handle_t *edmaHandle, + void *g_dspiEdmaPrivateHandle, + bool transferDone, + uint32_t tcds) +{ + dspi_master_edma_private_handle_t *dspiEdmaPrivateHandle; + + dspiEdmaPrivateHandle = (dspi_master_edma_private_handle_t *)g_dspiEdmaPrivateHandle; + + uint32_t dataReceived; + + DSPI_DisableDMA((dspiEdmaPrivateHandle->base), kDSPI_RxDmaEnable | kDSPI_TxDmaEnable); + + if (dspiEdmaPrivateHandle->handle->isThereExtraByte) + { + while (!((dspiEdmaPrivateHandle->base)->SR & SPI_SR_RFDF_MASK)) + { + } + dataReceived = (dspiEdmaPrivateHandle->base)->POPR; + if (dspiEdmaPrivateHandle->handle->rxData) + { + (dspiEdmaPrivateHandle->handle->rxData[dspiEdmaPrivateHandle->handle->totalByteCount - 1]) = dataReceived; + } + } + + if (dspiEdmaPrivateHandle->handle->callback) + { + dspiEdmaPrivateHandle->handle->callback(dspiEdmaPrivateHandle->base, dspiEdmaPrivateHandle->handle, + kStatus_Success, dspiEdmaPrivateHandle->handle->userData); + } + + dspiEdmaPrivateHandle->handle->state = kDSPI_Idle; +} + +void DSPI_MasterTransferAbortEDMA(SPI_Type *base, dspi_master_edma_handle_t *handle) +{ + DSPI_StopTransfer(base); + + DSPI_DisableDMA(base, kDSPI_RxDmaEnable | kDSPI_TxDmaEnable); + + EDMA_AbortTransfer(handle->edmaRxRegToRxDataHandle); + EDMA_AbortTransfer(handle->edmaTxDataToIntermediaryHandle); + EDMA_AbortTransfer(handle->edmaIntermediaryToTxRegHandle); + + handle->state = kDSPI_Idle; +} + +status_t DSPI_MasterTransferGetCountEDMA(SPI_Type *base, dspi_master_edma_handle_t *handle, size_t *count) +{ + assert(handle); + + if (!count) + { + return kStatus_InvalidArgument; + } + + /* Catch when there is not an active transfer. */ + if (handle->state != kDSPI_Busy) + { + *count = 0; + return kStatus_NoTransferInProgress; + } + + size_t bytes; + + bytes = EDMA_GetRemainingBytes(handle->edmaRxRegToRxDataHandle->base, handle->edmaRxRegToRxDataHandle->channel); + + *count = handle->totalByteCount - bytes; + + return kStatus_Success; +} + +void DSPI_SlaveTransferCreateHandleEDMA(SPI_Type *base, + dspi_slave_edma_handle_t *handle, + dspi_slave_edma_transfer_callback_t callback, + void *userData, + edma_handle_t *edmaRxRegToRxDataHandle, + edma_handle_t *edmaTxDataToTxRegHandle) +{ + assert(handle); + + /* Zero the handle. */ + memset(handle, 0, sizeof(*handle)); + + uint32_t instance = DSPI_GetInstance(base); + + s_dspiSlaveEdmaPrivateHandle[instance].base = base; + s_dspiSlaveEdmaPrivateHandle[instance].handle = handle; + + handle->callback = callback; + handle->userData = userData; + + handle->edmaRxRegToRxDataHandle = edmaRxRegToRxDataHandle; + handle->edmaTxDataToTxRegHandle = edmaTxDataToTxRegHandle; +} + +status_t DSPI_SlaveTransferEDMA(SPI_Type *base, dspi_slave_edma_handle_t *handle, dspi_transfer_t *transfer) +{ + assert(handle && transfer); + + /* If send/receive length is zero */ + if (transfer->dataSize == 0) + { + return kStatus_InvalidArgument; + } + + /* If both send buffer and receive buffer is null */ + if ((!(transfer->txData)) && (!(transfer->rxData))) + { + return kStatus_InvalidArgument; + } + + /* Check that we're not busy.*/ + if (handle->state == kDSPI_Busy) + { + return kStatus_DSPI_Busy; + } + + edma_tcd_t *softwareTCD = (edma_tcd_t *)((uint32_t)(&handle->dspiSoftwareTCD[1]) & (~0x1FU)); + + uint32_t instance = DSPI_GetInstance(base); + uint8_t whichCtar = (transfer->configFlags & DSPI_SLAVE_CTAR_MASK) >> DSPI_SLAVE_CTAR_SHIFT; + handle->bitsPerFrame = + (((base->CTAR_SLAVE[whichCtar]) & SPI_CTAR_SLAVE_FMSZ_MASK) >> SPI_CTAR_SLAVE_FMSZ_SHIFT) + 1; + + /* If using a shared RX/TX DMA request, then this limits the amount of data we can transfer + * due to the linked channel. The max bytes is 511 if 8-bit/frame or 1022 if 16-bit/frame + */ + if (1 != FSL_FEATURE_DSPI_HAS_SEPARATE_DMA_RX_TX_REQn(base)) + { + if (handle->bitsPerFrame > 8) + { + if (transfer->dataSize > 1022) + { + return kStatus_DSPI_OutOfRange; + } + } + else + { + if (transfer->dataSize > 511) + { + return kStatus_DSPI_OutOfRange; + } + } + } + + if ((handle->bitsPerFrame > 8) && (transfer->dataSize < 2)) + { + return kStatus_InvalidArgument; + } + + EDMA_SetCallback(handle->edmaRxRegToRxDataHandle, EDMA_DspiSlaveCallback, &s_dspiSlaveEdmaPrivateHandle[instance]); + + handle->state = kDSPI_Busy; + + /* Store transfer information */ + handle->txData = transfer->txData; + handle->rxData = transfer->rxData; + handle->remainingSendByteCount = transfer->dataSize; + handle->remainingReceiveByteCount = transfer->dataSize; + handle->totalByteCount = transfer->dataSize; + handle->errorCount = 0; + + handle->isThereExtraByte = false; + if (handle->bitsPerFrame > 8) + { + if (handle->remainingSendByteCount % 2 == 1) + { + handle->remainingSendByteCount++; + handle->remainingReceiveByteCount--; + handle->isThereExtraByte = true; + } + } + + uint16_t wordToSend = 0; + uint8_t dummyData = DSPI_DUMMY_DATA; + uint8_t dataAlreadyFed = 0; + uint8_t dataFedMax = 2; + + uint32_t rxAddr = DSPI_GetRxRegisterAddress(base); + uint32_t txAddr = DSPI_SlaveGetTxRegisterAddress(base); + + edma_transfer_config_t transferConfigA; + edma_transfer_config_t transferConfigC; + + DSPI_StopTransfer(base); + + DSPI_FlushFifo(base, true, true); + DSPI_ClearStatusFlags(base, kDSPI_AllStatusFlag); + + DSPI_DisableDMA(base, kDSPI_RxDmaEnable | kDSPI_TxDmaEnable); + + DSPI_StartTransfer(base); + + /*if dspi has separate dma request , need not prepare data first . + else (dspi has shared dma request) , send first 2 data into fifo if there is fifo or send first 1 data to + slaveGetTxRegister if there is no fifo*/ + if (1 != FSL_FEATURE_DSPI_HAS_SEPARATE_DMA_RX_TX_REQn(base)) + { + /* For DSPI instances with shared RX/TX DMA requests, we'll use the RX DMA request to + * trigger ongoing transfers and will link to the TX DMA channel from the RX DMA channel. + */ + /* If bits/frame is greater than one byte */ + if (handle->bitsPerFrame > 8) + { + while (DSPI_GetStatusFlags(base) & kDSPI_TxFifoFillRequestFlag) + { + if (handle->txData) + { + wordToSend = *(handle->txData); + ++handle->txData; /* Increment to next data byte */ + if ((handle->remainingSendByteCount == 2) && (handle->isThereExtraByte)) + { + wordToSend |= (unsigned)(dummyData) << 8U; + ++handle->txData; /* Increment to next data byte */ + } + else + { + wordToSend |= (unsigned)(*(handle->txData)) << 8U; + ++handle->txData; /* Increment to next data byte */ + } + } + else + { + wordToSend = ((uint32_t)dummyData << 8) | dummyData; + } + handle->remainingSendByteCount -= 2; /* decrement remainingSendByteCount by 2 */ + base->PUSHR_SLAVE = wordToSend; + + /* Try to clear the TFFF; if the TX FIFO is full this will clear */ + DSPI_ClearStatusFlags(base, kDSPI_TxFifoFillRequestFlag); + + dataAlreadyFed += 2; + + /* Exit loop if send count is zero, else update local variables for next loop */ + if ((handle->remainingSendByteCount == 0) || (dataAlreadyFed == (dataFedMax * 2))) + { + break; + } + } /* End of TX FIFO fill while loop */ + } + else /* Optimized for bits/frame less than or equal to one byte. */ + { + while (DSPI_GetStatusFlags(base) & kDSPI_TxFifoFillRequestFlag) + { + if (handle->txData) + { + wordToSend = *(handle->txData); + /* Increment to next data word*/ + ++handle->txData; + } + else + { + wordToSend = dummyData; + } + + base->PUSHR_SLAVE = wordToSend; + + /* Try to clear the TFFF; if the TX FIFO is full this will clear */ + DSPI_ClearStatusFlags(base, kDSPI_TxFifoFillRequestFlag); + /* Decrement remainingSendByteCount*/ + --handle->remainingSendByteCount; + + dataAlreadyFed++; + + /* Exit loop if send count is zero, else update local variables for next loop */ + if ((handle->remainingSendByteCount == 0) || (dataAlreadyFed == dataFedMax)) + { + break; + } + } /* End of TX FIFO fill while loop */ + } + } + + /***channel_A *** used for carry the data from Rx_Data_Register(POPR) to User_Receive_Buffer*/ + if (handle->remainingReceiveByteCount > 0) + { + EDMA_ResetChannel(handle->edmaRxRegToRxDataHandle->base, handle->edmaRxRegToRxDataHandle->channel); + + transferConfigA.srcAddr = (uint32_t)rxAddr; + transferConfigA.srcOffset = 0; + + if (handle->rxData) + { + transferConfigA.destAddr = (uint32_t) & (handle->rxData[0]); + transferConfigA.destOffset = 1; + } + else + { + transferConfigA.destAddr = (uint32_t) & (handle->rxBuffIfNull); + transferConfigA.destOffset = 0; + } + + transferConfigA.destTransferSize = kEDMA_TransferSize1Bytes; + + if (handle->bitsPerFrame <= 8) + { + transferConfigA.srcTransferSize = kEDMA_TransferSize1Bytes; + transferConfigA.minorLoopBytes = 1; + transferConfigA.majorLoopCounts = handle->remainingReceiveByteCount; + } + else + { + transferConfigA.srcTransferSize = kEDMA_TransferSize2Bytes; + transferConfigA.minorLoopBytes = 2; + transferConfigA.majorLoopCounts = handle->remainingReceiveByteCount / 2; + } + EDMA_SetTransferConfig(handle->edmaRxRegToRxDataHandle->base, handle->edmaRxRegToRxDataHandle->channel, + &transferConfigA, NULL); + EDMA_EnableChannelInterrupts(handle->edmaRxRegToRxDataHandle->base, handle->edmaRxRegToRxDataHandle->channel, + kEDMA_MajorInterruptEnable); + } + + if (handle->remainingSendByteCount > 0) + { + /***channel_C *** used for carry the data from User_Send_Buffer to Tx_Data_Register(PUSHR_SLAVE)*/ + EDMA_ResetChannel(handle->edmaTxDataToTxRegHandle->base, handle->edmaTxDataToTxRegHandle->channel); + + /*If there is extra byte , it would use the */ + if (handle->isThereExtraByte) + { + if (handle->txData) + { + handle->txLastData = + handle->txData[handle->remainingSendByteCount - 2] | ((uint32_t)DSPI_DUMMY_DATA << 8); + } + else + { + handle->txLastData = DSPI_DUMMY_DATA | ((uint32_t)DSPI_DUMMY_DATA << 8); + } + transferConfigC.srcAddr = (uint32_t)(&(handle->txLastData)); + transferConfigC.destAddr = (uint32_t)txAddr; + transferConfigC.srcTransferSize = kEDMA_TransferSize4Bytes; + transferConfigC.destTransferSize = kEDMA_TransferSize4Bytes; + transferConfigC.srcOffset = 0; + transferConfigC.destOffset = 0; + transferConfigC.minorLoopBytes = 4; + transferConfigC.majorLoopCounts = 1; + + EDMA_TcdReset(softwareTCD); + EDMA_TcdSetTransferConfig(softwareTCD, &transferConfigC, NULL); + } + + /*Set another transferConfigC*/ + if ((handle->isThereExtraByte) && (handle->remainingSendByteCount == 2)) + { + EDMA_SetTransferConfig(handle->edmaTxDataToTxRegHandle->base, handle->edmaTxDataToTxRegHandle->channel, + &transferConfigC, NULL); + } + else + { + transferConfigC.destAddr = (uint32_t)txAddr; + transferConfigC.destOffset = 0; + + if (handle->txData) + { + transferConfigC.srcAddr = (uint32_t)(&(handle->txData[0])); + transferConfigC.srcOffset = 1; + } + else + { + transferConfigC.srcAddr = (uint32_t)(&handle->txBuffIfNull); + transferConfigC.srcOffset = 0; + if (handle->bitsPerFrame <= 8) + { + handle->txBuffIfNull = DSPI_DUMMY_DATA; + } + else + { + handle->txBuffIfNull = (DSPI_DUMMY_DATA << 8) | DSPI_DUMMY_DATA; + } + } + + transferConfigC.srcTransferSize = kEDMA_TransferSize1Bytes; + + if (handle->bitsPerFrame <= 8) + { + transferConfigC.destTransferSize = kEDMA_TransferSize1Bytes; + transferConfigC.minorLoopBytes = 1; + transferConfigC.majorLoopCounts = handle->remainingSendByteCount; + } + else + { + transferConfigC.destTransferSize = kEDMA_TransferSize2Bytes; + transferConfigC.minorLoopBytes = 2; + if (handle->isThereExtraByte) + { + transferConfigC.majorLoopCounts = handle->remainingSendByteCount / 2 - 1; + } + else + { + transferConfigC.majorLoopCounts = handle->remainingSendByteCount / 2; + } + } + + if (handle->isThereExtraByte) + { + EDMA_SetTransferConfig(handle->edmaTxDataToTxRegHandle->base, handle->edmaTxDataToTxRegHandle->channel, + &transferConfigC, softwareTCD); + EDMA_EnableAutoStopRequest(handle->edmaTxDataToTxRegHandle->base, + handle->edmaTxDataToTxRegHandle->channel, false); + } + else + { + EDMA_SetTransferConfig(handle->edmaTxDataToTxRegHandle->base, handle->edmaTxDataToTxRegHandle->channel, + &transferConfigC, NULL); + } + + EDMA_StartTransfer(handle->edmaTxDataToTxRegHandle); + } + } + + EDMA_StartTransfer(handle->edmaRxRegToRxDataHandle); + + /*Set channel priority*/ + uint8_t channelPriorityLow = handle->edmaRxRegToRxDataHandle->channel; + uint8_t channelPriorityHigh = handle->edmaTxDataToTxRegHandle->channel; + uint8_t t = 0; + + if (channelPriorityLow > channelPriorityHigh) + { + t = channelPriorityLow; + channelPriorityLow = channelPriorityHigh; + channelPriorityHigh = t; + } + + edma_channel_Preemption_config_t preemption_config_t; + preemption_config_t.enableChannelPreemption = true; + preemption_config_t.enablePreemptAbility = true; + preemption_config_t.channelPriority = channelPriorityLow; + + if (1 != FSL_FEATURE_DSPI_HAS_SEPARATE_DMA_RX_TX_REQn(base)) + { + EDMA_SetChannelPreemptionConfig(handle->edmaRxRegToRxDataHandle->base, handle->edmaRxRegToRxDataHandle->channel, + &preemption_config_t); + + preemption_config_t.channelPriority = channelPriorityHigh; + EDMA_SetChannelPreemptionConfig(handle->edmaTxDataToTxRegHandle->base, handle->edmaTxDataToTxRegHandle->channel, + &preemption_config_t); + } + else + { + EDMA_SetChannelPreemptionConfig(handle->edmaTxDataToTxRegHandle->base, handle->edmaTxDataToTxRegHandle->channel, + &preemption_config_t); + + preemption_config_t.channelPriority = channelPriorityHigh; + EDMA_SetChannelPreemptionConfig(handle->edmaRxRegToRxDataHandle->base, handle->edmaRxRegToRxDataHandle->channel, + &preemption_config_t); + } + + /*Set the channel link. + For DSPI instances with shared RX/TX DMA requests: Rx DMA request -> channel_A -> channel_C. + For DSPI instances with separate RX and TX DMA requests: + Rx DMA request -> channel_A + Tx DMA request -> channel_C */ + if (1 != FSL_FEATURE_DSPI_HAS_SEPARATE_DMA_RX_TX_REQn(base)) + { + if (handle->remainingSendByteCount > 0) + { + EDMA_SetChannelLink(handle->edmaRxRegToRxDataHandle->base, handle->edmaRxRegToRxDataHandle->channel, + kEDMA_MinorLink, handle->edmaTxDataToTxRegHandle->channel); + } + DSPI_EnableDMA(base, kDSPI_RxDmaEnable); + } + else + { + DSPI_EnableDMA(base, kDSPI_RxDmaEnable | kDSPI_TxDmaEnable); + } + + return kStatus_Success; +} + +static void EDMA_DspiSlaveCallback(edma_handle_t *edmaHandle, + void *g_dspiEdmaPrivateHandle, + bool transferDone, + uint32_t tcds) +{ + dspi_slave_edma_private_handle_t *dspiEdmaPrivateHandle; + + dspiEdmaPrivateHandle = (dspi_slave_edma_private_handle_t *)g_dspiEdmaPrivateHandle; + + uint32_t dataReceived; + + DSPI_DisableDMA((dspiEdmaPrivateHandle->base), kDSPI_RxDmaEnable | kDSPI_TxDmaEnable); + + if (dspiEdmaPrivateHandle->handle->isThereExtraByte) + { + while (!((dspiEdmaPrivateHandle->base)->SR & SPI_SR_RFDF_MASK)) + { + } + dataReceived = (dspiEdmaPrivateHandle->base)->POPR; + if (dspiEdmaPrivateHandle->handle->rxData) + { + (dspiEdmaPrivateHandle->handle->rxData[dspiEdmaPrivateHandle->handle->totalByteCount - 1]) = dataReceived; + } + } + + if (dspiEdmaPrivateHandle->handle->callback) + { + dspiEdmaPrivateHandle->handle->callback(dspiEdmaPrivateHandle->base, dspiEdmaPrivateHandle->handle, + kStatus_Success, dspiEdmaPrivateHandle->handle->userData); + } + + dspiEdmaPrivateHandle->handle->state = kDSPI_Idle; +} + +void DSPI_SlaveTransferAbortEDMA(SPI_Type *base, dspi_slave_edma_handle_t *handle) +{ + DSPI_StopTransfer(base); + + DSPI_DisableDMA(base, kDSPI_RxDmaEnable | kDSPI_TxDmaEnable); + + EDMA_AbortTransfer(handle->edmaRxRegToRxDataHandle); + EDMA_AbortTransfer(handle->edmaTxDataToTxRegHandle); + + handle->state = kDSPI_Idle; +} + +status_t DSPI_SlaveTransferGetCountEDMA(SPI_Type *base, dspi_slave_edma_handle_t *handle, size_t *count) +{ + assert(handle); + + if (!count) + { + return kStatus_InvalidArgument; + } + + /* Catch when there is not an active transfer. */ + if (handle->state != kDSPI_Busy) + { + *count = 0; + return kStatus_NoTransferInProgress; + } + + size_t bytes; + + bytes = EDMA_GetRemainingBytes(handle->edmaRxRegToRxDataHandle->base, handle->edmaRxRegToRxDataHandle->channel); + + *count = handle->totalByteCount - bytes; + + return kStatus_Success; +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dspi_edma.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dspi_edma.h new file mode 100644 index 00000000000..643efadca4c --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_dspi_edma.h @@ -0,0 +1,282 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FSL_DSPI_EDMA_H_ +#define _FSL_DSPI_EDMA_H_ + +#include "fsl_dspi.h" +#include "fsl_edma.h" +/*! + * @addtogroup dspi_edma_driver + * @{ + */ + + +/*********************************************************************************************************************** + * Definitions + **********************************************************************************************************************/ + +/*! +* @brief Forward declaration of the DSPI eDMA master handle typedefs. +*/ +typedef struct _dspi_master_edma_handle dspi_master_edma_handle_t; + +/*! +* @brief Forward declaration of the DSPI eDMA slave handle typedefs. +*/ +typedef struct _dspi_slave_edma_handle dspi_slave_edma_handle_t; + +/*! + * @brief Completion callback function pointer type. + * + * @param base DSPI peripheral base address. + * @param handle Pointer to the handle for the DSPI master. + * @param status Success or error code describing whether the transfer completed. + * @param userData Arbitrary pointer-dataSized value passed from the application. + */ +typedef void (*dspi_master_edma_transfer_callback_t)(SPI_Type *base, + dspi_master_edma_handle_t *handle, + status_t status, + void *userData); +/*! + * @brief Completion callback function pointer type. + * + * @param base DSPI peripheral base address. + * @param handle Pointer to the handle for the DSPI slave. + * @param status Success or error code describing whether the transfer completed. + * @param userData Arbitrary pointer-dataSized value passed from the application. + */ +typedef void (*dspi_slave_edma_transfer_callback_t)(SPI_Type *base, + dspi_slave_edma_handle_t *handle, + status_t status, + void *userData); + +/*! @brief DSPI master eDMA transfer handle structure used for transactional API. */ +struct _dspi_master_edma_handle +{ + uint32_t bitsPerFrame; /*!< Desired number of bits per frame. */ + volatile uint32_t command; /*!< Desired data command. */ + volatile uint32_t lastCommand; /*!< Desired last data command. */ + + uint8_t fifoSize; /*!< FIFO dataSize. */ + + volatile bool isPcsActiveAfterTransfer; /*!< Is PCS signal keep active after the last frame transfer.*/ + volatile bool isThereExtraByte; /*!< Is there extra byte.*/ + + uint8_t *volatile txData; /*!< Send buffer. */ + uint8_t *volatile rxData; /*!< Receive buffer. */ + volatile size_t remainingSendByteCount; /*!< Number of bytes remaining to send.*/ + volatile size_t remainingReceiveByteCount; /*!< Number of bytes remaining to receive.*/ + size_t totalByteCount; /*!< Number of transfer bytes*/ + + uint32_t rxBuffIfNull; /*!< Used if there is not rxData for DMA purpose.*/ + uint32_t txBuffIfNull; /*!< Used if there is not txData for DMA purpose.*/ + + volatile uint8_t state; /*!< DSPI transfer state , _dspi_transfer_state.*/ + + dspi_master_edma_transfer_callback_t callback; /*!< Completion callback. */ + void *userData; /*!< Callback user data. */ + + edma_handle_t *edmaRxRegToRxDataHandle; /*!TCD[channel].SADDR = tcd->SADDR; + base->TCD[channel].SOFF = tcd->SOFF; + base->TCD[channel].ATTR = tcd->ATTR; + base->TCD[channel].NBYTES_MLNO = tcd->NBYTES; + base->TCD[channel].SLAST = tcd->SLAST; + base->TCD[channel].DADDR = tcd->DADDR; + base->TCD[channel].DOFF = tcd->DOFF; + base->TCD[channel].CITER_ELINKNO = tcd->CITER; + base->TCD[channel].DLAST_SGA = tcd->DLAST_SGA; + /* Clear DONE bit first, otherwise ESG cannot be set */ + base->TCD[channel].CSR = 0; + base->TCD[channel].CSR = tcd->CSR; + base->TCD[channel].BITER_ELINKNO = tcd->BITER; +} + +void EDMA_Init(DMA_Type *base, const edma_config_t *config) +{ + assert(config != NULL); + + uint32_t tmpreg; + + /* Ungate EDMA periphral clock */ + CLOCK_EnableClock(s_edmaClockName[EDMA_GetInstance(base)]); + /* Configure EDMA peripheral according to the configuration structure. */ + tmpreg = base->CR; + tmpreg &= ~(DMA_CR_ERCA_MASK | DMA_CR_HOE_MASK | DMA_CR_CLM_MASK | DMA_CR_EDBG_MASK); + tmpreg |= (DMA_CR_ERCA(config->enableRoundRobinArbitration) | DMA_CR_HOE(config->enableHaltOnError) | + DMA_CR_CLM(config->enableContinuousLinkMode) | DMA_CR_EDBG(config->enableDebugMode) | DMA_CR_EMLM(true)); + base->CR = tmpreg; +} + +void EDMA_Deinit(DMA_Type *base) +{ + /* Gate EDMA periphral clock */ + CLOCK_DisableClock(s_edmaClockName[EDMA_GetInstance(base)]); +} + +void EDMA_GetDefaultConfig(edma_config_t *config) +{ + assert(config != NULL); + + config->enableRoundRobinArbitration = false; + config->enableHaltOnError = true; + config->enableContinuousLinkMode = false; + config->enableDebugMode = false; +} + +void EDMA_ResetChannel(DMA_Type *base, uint32_t channel) +{ + assert(channel < FSL_FEATURE_EDMA_MODULE_CHANNEL); + + EDMA_TcdReset((edma_tcd_t *)&base->TCD[channel]); +} + +void EDMA_SetTransferConfig(DMA_Type *base, uint32_t channel, const edma_transfer_config_t *config, edma_tcd_t *nextTcd) +{ + assert(channel < FSL_FEATURE_EDMA_MODULE_CHANNEL); + assert(config != NULL); + assert(((uint32_t)nextTcd & 0x1FU) == 0); + + EDMA_TcdSetTransferConfig((edma_tcd_t *)&base->TCD[channel], config, nextTcd); +} + +void EDMA_SetMinorOffsetConfig(DMA_Type *base, uint32_t channel, const edma_minor_offset_config_t *config) +{ + assert(channel < FSL_FEATURE_EDMA_MODULE_CHANNEL); + assert(config != NULL); + + uint32_t tmpreg; + + tmpreg = base->TCD[channel].NBYTES_MLOFFYES; + tmpreg &= ~(DMA_NBYTES_MLOFFYES_SMLOE_MASK | DMA_NBYTES_MLOFFYES_DMLOE_MASK | DMA_NBYTES_MLOFFYES_MLOFF_MASK); + tmpreg |= + (DMA_NBYTES_MLOFFYES_SMLOE(config->enableSrcMinorOffset) | + DMA_NBYTES_MLOFFYES_DMLOE(config->enableDestMinorOffset) | DMA_NBYTES_MLOFFYES_MLOFF(config->minorOffset)); + base->TCD[channel].NBYTES_MLOFFYES = tmpreg; +} + +void EDMA_SetChannelLink(DMA_Type *base, uint32_t channel, edma_channel_link_type_t type, uint32_t linkedChannel) +{ + assert(channel < FSL_FEATURE_EDMA_MODULE_CHANNEL); + assert(linkedChannel < FSL_FEATURE_EDMA_MODULE_CHANNEL); + + EDMA_TcdSetChannelLink((edma_tcd_t *)&base->TCD[channel], type, linkedChannel); +} + +void EDMA_SetBandWidth(DMA_Type *base, uint32_t channel, edma_bandwidth_t bandWidth) +{ + assert(channel < FSL_FEATURE_EDMA_MODULE_CHANNEL); + + base->TCD[channel].CSR = (base->TCD[channel].CSR & (~DMA_CSR_BWC_MASK)) | DMA_CSR_BWC(bandWidth); +} + +void EDMA_SetModulo(DMA_Type *base, uint32_t channel, edma_modulo_t srcModulo, edma_modulo_t destModulo) +{ + assert(channel < FSL_FEATURE_EDMA_MODULE_CHANNEL); + + uint32_t tmpreg; + + tmpreg = base->TCD[channel].ATTR & (~(DMA_ATTR_SMOD_MASK | DMA_ATTR_DMOD_MASK)); + base->TCD[channel].ATTR = tmpreg | DMA_ATTR_DMOD(destModulo) | DMA_ATTR_SMOD(srcModulo); +} + +void EDMA_EnableChannelInterrupts(DMA_Type *base, uint32_t channel, uint32_t mask) +{ + assert(channel < FSL_FEATURE_EDMA_MODULE_CHANNEL); + + /* Enable error interrupt */ + if (mask & kEDMA_ErrorInterruptEnable) + { + base->EEI |= (0x1U << channel); + } + + /* Enable Major interrupt */ + if (mask & kEDMA_MajorInterruptEnable) + { + base->TCD[channel].CSR |= DMA_CSR_INTMAJOR_MASK; + } + + /* Enable Half major interrupt */ + if (mask & kEDMA_HalfInterruptEnable) + { + base->TCD[channel].CSR |= DMA_CSR_INTHALF_MASK; + } +} + +void EDMA_DisableChannelInterrupts(DMA_Type *base, uint32_t channel, uint32_t mask) +{ + assert(channel < FSL_FEATURE_EDMA_MODULE_CHANNEL); + + /* Disable error interrupt */ + if (mask & kEDMA_ErrorInterruptEnable) + { + base->EEI &= ~(0x1U << channel); + } + + /* Disable Major interrupt */ + if (mask & kEDMA_MajorInterruptEnable) + { + base->TCD[channel].CSR &= ~DMA_CSR_INTMAJOR_MASK; + } + + /* Disable Half major interrupt */ + if (mask & kEDMA_HalfInterruptEnable) + { + base->TCD[channel].CSR &= ~DMA_CSR_INTHALF_MASK; + } +} + +void EDMA_TcdReset(edma_tcd_t *tcd) +{ + assert(tcd != NULL); + assert(((uint32_t)tcd & 0x1FU) == 0); + + /* Reset channel TCD */ + tcd->SADDR = 0U; + tcd->SOFF = 0U; + tcd->ATTR = 0U; + tcd->NBYTES = 0U; + tcd->SLAST = 0U; + tcd->DADDR = 0U; + tcd->DOFF = 0U; + tcd->CITER = 0U; + tcd->DLAST_SGA = 0U; + /* Enable auto disable request feature */ + tcd->CSR = DMA_CSR_DREQ(true); + tcd->BITER = 0U; +} + +void EDMA_TcdSetTransferConfig(edma_tcd_t *tcd, const edma_transfer_config_t *config, edma_tcd_t *nextTcd) +{ + assert(tcd != NULL); + assert(((uint32_t)tcd & 0x1FU) == 0); + assert(config != NULL); + assert(((uint32_t)nextTcd & 0x1FU) == 0); + + /* source address */ + tcd->SADDR = config->srcAddr; + /* destination address */ + tcd->DADDR = config->destAddr; + /* Source data and destination data transfer size */ + tcd->ATTR = DMA_ATTR_SSIZE(config->srcTransferSize) | DMA_ATTR_DSIZE(config->destTransferSize); + /* Source address signed offset */ + tcd->SOFF = config->srcOffset; + /* Destination address signed offset */ + tcd->DOFF = config->destOffset; + /* Minor byte transfer count */ + tcd->NBYTES = config->minorLoopBytes; + /* Current major iteration count */ + tcd->CITER = config->majorLoopCounts; + /* Starting major iteration count */ + tcd->BITER = config->majorLoopCounts; + /* Enable scatter/gather processing */ + if (nextTcd != NULL) + { + tcd->DLAST_SGA = (uint32_t)nextTcd; + /* + Before call EDMA_TcdSetTransferConfig or EDMA_SetTransferConfig, + user must call EDMA_TcdReset or EDMA_ResetChannel which will set + DREQ, so must use "|" or "&" rather than "=". + + Clear the DREQ bit because scatter gather has been enabled, so the + previous transfer is not the last transfer, and channel request should + be enabled at the next transfer(the next TCD). + */ + tcd->CSR = (tcd->CSR | DMA_CSR_ESG_MASK) & ~DMA_CSR_DREQ_MASK; + } +} + +void EDMA_TcdSetMinorOffsetConfig(edma_tcd_t *tcd, const edma_minor_offset_config_t *config) +{ + assert(tcd != NULL); + assert(((uint32_t)tcd & 0x1FU) == 0); + + uint32_t tmpreg; + + tmpreg = tcd->NBYTES & + ~(DMA_NBYTES_MLOFFYES_SMLOE_MASK | DMA_NBYTES_MLOFFYES_DMLOE_MASK | DMA_NBYTES_MLOFFYES_MLOFF_MASK); + tmpreg |= + (DMA_NBYTES_MLOFFYES_SMLOE(config->enableSrcMinorOffset) | + DMA_NBYTES_MLOFFYES_DMLOE(config->enableDestMinorOffset) | DMA_NBYTES_MLOFFYES_MLOFF(config->minorOffset)); + tcd->NBYTES = tmpreg; +} + +void EDMA_TcdSetChannelLink(edma_tcd_t *tcd, edma_channel_link_type_t type, uint32_t linkedChannel) +{ + assert(tcd != NULL); + assert(((uint32_t)tcd & 0x1FU) == 0); + assert(linkedChannel < FSL_FEATURE_EDMA_MODULE_CHANNEL); + + if (type == kEDMA_MinorLink) /* Minor link config */ + { + uint32_t tmpreg; + + /* Enable minor link */ + tcd->CITER |= DMA_CITER_ELINKYES_ELINK_MASK; + tcd->BITER |= DMA_BITER_ELINKYES_ELINK_MASK; + /* Set likned channel */ + tmpreg = tcd->CITER & (~DMA_CITER_ELINKYES_LINKCH_MASK); + tmpreg |= DMA_CITER_ELINKYES_LINKCH(linkedChannel); + tcd->CITER = tmpreg; + tmpreg = tcd->BITER & (~DMA_BITER_ELINKYES_LINKCH_MASK); + tmpreg |= DMA_BITER_ELINKYES_LINKCH(linkedChannel); + tcd->BITER = tmpreg; + } + else if (type == kEDMA_MajorLink) /* Major link config */ + { + uint32_t tmpreg; + + /* Enable major link */ + tcd->CSR |= DMA_CSR_MAJORELINK_MASK; + /* Set major linked channel */ + tmpreg = tcd->CSR & (~DMA_CSR_MAJORLINKCH_MASK); + tcd->CSR = tmpreg | DMA_CSR_MAJORLINKCH(linkedChannel); + } + else /* Link none */ + { + tcd->CITER &= ~DMA_CITER_ELINKYES_ELINK_MASK; + tcd->BITER &= ~DMA_BITER_ELINKYES_ELINK_MASK; + tcd->CSR &= ~DMA_CSR_MAJORELINK_MASK; + } +} + +void EDMA_TcdSetModulo(edma_tcd_t *tcd, edma_modulo_t srcModulo, edma_modulo_t destModulo) +{ + assert(tcd != NULL); + assert(((uint32_t)tcd & 0x1FU) == 0); + + uint32_t tmpreg; + + tmpreg = tcd->ATTR & (~(DMA_ATTR_SMOD_MASK | DMA_ATTR_DMOD_MASK)); + tcd->ATTR = tmpreg | DMA_ATTR_DMOD(destModulo) | DMA_ATTR_SMOD(srcModulo); +} + +void EDMA_TcdEnableInterrupts(edma_tcd_t *tcd, uint32_t mask) +{ + assert(tcd != NULL); + + /* Enable Major interrupt */ + if (mask & kEDMA_MajorInterruptEnable) + { + tcd->CSR |= DMA_CSR_INTMAJOR_MASK; + } + + /* Enable Half major interrupt */ + if (mask & kEDMA_HalfInterruptEnable) + { + tcd->CSR |= DMA_CSR_INTHALF_MASK; + } +} + +void EDMA_TcdDisableInterrupts(edma_tcd_t *tcd, uint32_t mask) +{ + assert(tcd != NULL); + + /* Disable Major interrupt */ + if (mask & kEDMA_MajorInterruptEnable) + { + tcd->CSR &= ~DMA_CSR_INTMAJOR_MASK; + } + + /* Disable Half major interrupt */ + if (mask & kEDMA_HalfInterruptEnable) + { + tcd->CSR &= ~DMA_CSR_INTHALF_MASK; + } +} + +uint32_t EDMA_GetRemainingBytes(DMA_Type *base, uint32_t channel) +{ + assert(channel < FSL_FEATURE_EDMA_MODULE_CHANNEL); + + uint32_t nbytes = 0; + uint32_t remainingBytes = 0; + + if (DMA_CSR_DONE_MASK & base->TCD[channel].CSR) + { + remainingBytes = 0; + } + else + { + /* Calculate the nbytes */ + if (base->TCD[channel].NBYTES_MLOFFYES & (DMA_NBYTES_MLOFFYES_SMLOE_MASK | DMA_NBYTES_MLOFFYES_DMLOE_MASK)) + { + nbytes = (base->TCD[channel].NBYTES_MLOFFYES & DMA_NBYTES_MLOFFYES_NBYTES_MASK) >> + DMA_NBYTES_MLOFFYES_NBYTES_SHIFT; + } + else + { + nbytes = + (base->TCD[channel].NBYTES_MLOFFNO & DMA_NBYTES_MLOFFNO_NBYTES_MASK) >> DMA_NBYTES_MLOFFNO_NBYTES_SHIFT; + } + /* Calculate the unfinished bytes */ + if (base->TCD[channel].CITER_ELINKNO & DMA_CITER_ELINKNO_ELINK_MASK) + { + remainingBytes = ((base->TCD[channel].CITER_ELINKYES & DMA_CITER_ELINKYES_CITER_MASK) >> + DMA_CITER_ELINKYES_CITER_SHIFT) * + nbytes; + } + else + { + remainingBytes = + ((base->TCD[channel].CITER_ELINKNO & DMA_CITER_ELINKNO_CITER_MASK) >> DMA_CITER_ELINKNO_CITER_SHIFT) * + nbytes; + } + } + + return remainingBytes; +} + +uint32_t EDMA_GetChannelStatusFlags(DMA_Type *base, uint32_t channel) +{ + assert(channel < FSL_FEATURE_EDMA_MODULE_CHANNEL); + + uint32_t retval = 0; + + /* Get DONE bit flag */ + retval |= ((base->TCD[channel].CSR & DMA_CSR_DONE_MASK) >> DMA_CSR_DONE_SHIFT); + /* Get ERROR bit flag */ + retval |= (((base->ERR >> channel) & 0x1U) << 1U); + /* Get INT bit flag */ + retval |= (((base->INT >> channel) & 0x1U) << 2U); + + return retval; +} + +void EDMA_ClearChannelStatusFlags(DMA_Type *base, uint32_t channel, uint32_t mask) +{ + assert(channel < FSL_FEATURE_EDMA_MODULE_CHANNEL); + + /* Clear DONE bit flag */ + if (mask & kEDMA_DoneFlag) + { + base->CDNE = channel; + } + /* Clear ERROR bit flag */ + if (mask & kEDMA_ErrorFlag) + { + base->CERR = channel; + } + /* Clear INT bit flag */ + if (mask & kEDMA_InterruptFlag) + { + base->CINT = channel; + } +} + +void EDMA_CreateHandle(edma_handle_t *handle, DMA_Type *base, uint32_t channel) +{ + assert(handle != NULL); + assert(channel < FSL_FEATURE_EDMA_MODULE_CHANNEL); + + uint32_t edmaInstance; + uint32_t channelIndex; + edma_tcd_t *tcdRegs; + + handle->base = base; + handle->channel = channel; + /* Get the DMA instance number */ + edmaInstance = EDMA_GetInstance(base); + channelIndex = (edmaInstance * FSL_FEATURE_EDMA_MODULE_CHANNEL) + channel; + s_EDMAHandle[channelIndex] = handle; + /* Enable NVIC interrupt */ + EnableIRQ(s_edmaIRQNumber[channelIndex]); + /* + Reset TCD registers to zero. Unlike the EDMA_TcdReset(DREQ will be set), + CSR will be 0. Because in order to suit EDMA busy check mechanism in + EDMA_SubmitTransfer, CSR must be set 0. + */ + tcdRegs = (edma_tcd_t *)&handle->base->TCD[handle->channel]; + tcdRegs->SADDR = 0; + tcdRegs->SOFF = 0; + tcdRegs->ATTR = 0; + tcdRegs->NBYTES = 0; + tcdRegs->SLAST = 0; + tcdRegs->DADDR = 0; + tcdRegs->DOFF = 0; + tcdRegs->CITER = 0; + tcdRegs->DLAST_SGA = 0; + tcdRegs->CSR = 0; + tcdRegs->BITER = 0; +} + +void EDMA_InstallTCDMemory(edma_handle_t *handle, edma_tcd_t *tcdPool, uint32_t tcdSize) +{ + assert(handle != NULL); + assert(((uint32_t)tcdPool & 0x1FU) == 0); + + /* Initialize tcd queue attibute. */ + handle->header = 0; + handle->tail = 0; + handle->tcdUsed = 0; + handle->tcdSize = tcdSize; + handle->flags = 0; + handle->tcdPool = tcdPool; +} + +void EDMA_SetCallback(edma_handle_t *handle, edma_callback callback, void *userData) +{ + assert(handle != NULL); + + handle->callback = callback; + handle->userData = userData; +} + +void EDMA_PrepareTransfer(edma_transfer_config_t *config, + void *srcAddr, + uint32_t srcWidth, + void *destAddr, + uint32_t destWidth, + uint32_t bytesEachRequest, + uint32_t transferBytes, + edma_transfer_type_t type) +{ + assert(config != NULL); + assert(srcAddr != NULL); + assert(destAddr != NULL); + assert((srcWidth == 1U) || (srcWidth == 2U) || (srcWidth == 4U) || (srcWidth == 16U) || (srcWidth == 32U)); + assert((destWidth == 1U) || (destWidth == 2U) || (destWidth == 4U) || (destWidth == 16U) || (destWidth == 32U)); + assert(transferBytes % bytesEachRequest == 0); + + config->destAddr = (uint32_t)destAddr; + config->srcAddr = (uint32_t)srcAddr; + config->minorLoopBytes = bytesEachRequest; + config->majorLoopCounts = transferBytes / bytesEachRequest; + switch (srcWidth) + { + case 1U: + config->srcTransferSize = kEDMA_TransferSize1Bytes; + break; + case 2U: + config->srcTransferSize = kEDMA_TransferSize2Bytes; + break; + case 4U: + config->srcTransferSize = kEDMA_TransferSize4Bytes; + break; + case 16U: + config->srcTransferSize = kEDMA_TransferSize16Bytes; + break; + case 32U: + config->srcTransferSize = kEDMA_TransferSize32Bytes; + break; + default: + break; + } + switch (destWidth) + { + case 1U: + config->destTransferSize = kEDMA_TransferSize1Bytes; + break; + case 2U: + config->destTransferSize = kEDMA_TransferSize2Bytes; + break; + case 4U: + config->destTransferSize = kEDMA_TransferSize4Bytes; + break; + case 16U: + config->destTransferSize = kEDMA_TransferSize16Bytes; + break; + case 32U: + config->destTransferSize = kEDMA_TransferSize32Bytes; + break; + default: + break; + } + switch (type) + { + case kEDMA_MemoryToMemory: + config->destOffset = destWidth; + config->srcOffset = srcWidth; + break; + case kEDMA_MemoryToPeripheral: + config->destOffset = 0U; + config->srcOffset = srcWidth; + break; + case kEDMA_PeripheralToMemory: + config->destOffset = destWidth; + config->srcOffset = 0U; + break; + default: + break; + } +} + +status_t EDMA_SubmitTransfer(edma_handle_t *handle, const edma_transfer_config_t *config) +{ + assert(handle != NULL); + assert(config != NULL); + + edma_tcd_t *tcdRegs = (edma_tcd_t *)&handle->base->TCD[handle->channel]; + + if (handle->tcdPool == NULL) + { + /* + Check if EDMA is busy: if the given channel started transfer, CSR will be not zero. Because + if it is the last transfer, DREQ will be set. If not, ESG will be set. So in order to suit + this check mechanism, EDMA_CreatHandle will clear CSR register. + */ + if ((tcdRegs->CSR != 0) && ((tcdRegs->CSR & DMA_CSR_DONE_MASK) == 0)) + { + return kStatus_EDMA_Busy; + } + else + { + EDMA_SetTransferConfig(handle->base, handle->channel, config, NULL); + /* Enable auto disable request feature */ + handle->base->TCD[handle->channel].CSR |= DMA_CSR_DREQ_MASK; + /* Enable major interrupt */ + handle->base->TCD[handle->channel].CSR |= DMA_CSR_INTMAJOR_MASK; + + return kStatus_Success; + } + } + else /* Use the TCD queue. */ + { + uint32_t primask; + uint32_t csr; + int8_t currentTcd; + int8_t previousTcd; + int8_t nextTcd; + + /* Check if tcd pool is full. */ + primask = DisableGlobalIRQ(); + if (handle->tcdUsed >= handle->tcdSize) + { + EnableGlobalIRQ(primask); + + return kStatus_EDMA_QueueFull; + } + currentTcd = handle->tail; + handle->tcdUsed++; + /* Calculate index of next TCD */ + nextTcd = currentTcd + 1U; + if (nextTcd == handle->tcdSize) + { + nextTcd = 0U; + } + /* Advance queue tail index */ + handle->tail = nextTcd; + EnableGlobalIRQ(primask); + /* Calculate index of previous TCD */ + previousTcd = currentTcd ? currentTcd - 1U : handle->tcdSize - 1U; + /* Configure current TCD block. */ + EDMA_TcdReset(&handle->tcdPool[currentTcd]); + EDMA_TcdSetTransferConfig(&handle->tcdPool[currentTcd], config, NULL); + /* Enable major interrupt */ + handle->tcdPool[currentTcd].CSR |= DMA_CSR_INTMAJOR_MASK; + /* Link current TCD with next TCD for identification of current TCD */ + handle->tcdPool[currentTcd].DLAST_SGA = (uint32_t)&handle->tcdPool[nextTcd]; + /* Chain from previous descriptor unless tcd pool size is 1(this descriptor is its own predecessor). */ + if (currentTcd != previousTcd) + { + /* Enable scatter/gather feature in the previous TCD block. */ + csr = (handle->tcdPool[previousTcd].CSR | DMA_CSR_ESG_MASK) & ~DMA_CSR_DREQ_MASK; + handle->tcdPool[previousTcd].CSR = csr; + /* + Check if the TCD blcok in the registers is the previous one (points to current TCD block). It + is used to check if the previous TCD linked has been loaded in TCD register. If so, it need to + link the TCD register in case link the current TCD with the dead chain when TCD loading occurs + before link the previous TCD block. + */ + if (tcdRegs->DLAST_SGA == (uint32_t)&handle->tcdPool[currentTcd]) + { + /* Enable scatter/gather also in the TCD registers. */ + csr = (tcdRegs->CSR | DMA_CSR_ESG_MASK) & ~DMA_CSR_DREQ_MASK; + /* Must write the CSR register one-time, because the transfer maybe finished anytime. */ + tcdRegs->CSR = csr; + /* + It is very important to check the ESG bit! + Because this hardware design: if DONE bit is set, the ESG bit can not be set. So it can + be used to check if the dynamic TCD link operation is successful. If ESG bit is not set + and the DLAST_SGA is not the next TCD address(it means the dynamic TCD link succeed and + the current TCD block has been loaded into TCD registers), it means transfer finished + and TCD link operation fail, so must install TCD content into TCD registers and enable + transfer again. And if ESG is set, it means transfer has notfinished, so TCD dynamic + link succeed. + */ + if (tcdRegs->CSR & DMA_CSR_ESG_MASK) + { + return kStatus_Success; + } + /* + Check whether the current TCD block is already loaded in the TCD registers. It is another + condition when ESG bit is not set: it means the dynamic TCD link succeed and the current + TCD block has been loaded into TCD registers. + */ + if (tcdRegs->DLAST_SGA == (uint32_t)&handle->tcdPool[nextTcd]) + { + return kStatus_Success; + } + /* + If go to this, means the previous transfer finished, and the DONE bit is set. + So shall configure TCD registers. + */ + } + else if (tcdRegs->DLAST_SGA != 0) + { + /* The current TCD block has been linked successfully. */ + return kStatus_Success; + } + else + { + /* + DLAST_SGA is 0 and it means the first submit transfer, so shall configure + TCD registers. + */ + } + } + /* There is no live chain, TCD block need to be installed in TCD registers. */ + EDMA_InstallTCD(handle->base, handle->channel, &handle->tcdPool[currentTcd]); + /* Enable channel request again. */ + if (handle->flags & EDMA_TRANSFER_ENABLED_MASK) + { + handle->base->SERQ = DMA_SERQ_SERQ(handle->channel); + } + + return kStatus_Success; + } +} + +void EDMA_StartTransfer(edma_handle_t *handle) +{ + assert(handle != NULL); + + if (handle->tcdPool == NULL) + { + handle->base->SERQ = DMA_SERQ_SERQ(handle->channel); + } + else /* Use the TCD queue. */ + { + uint32_t primask; + edma_tcd_t *tcdRegs = (edma_tcd_t *)&handle->base->TCD[handle->channel]; + + handle->flags |= EDMA_TRANSFER_ENABLED_MASK; + + /* Check if there was at least one descriptor submitted since reset (TCD in registers is valid) */ + if (tcdRegs->DLAST_SGA != 0U) + { + primask = DisableGlobalIRQ(); + /* Check if channel request is actually disable. */ + if ((handle->base->ERQ & (1U << handle->channel)) == 0U) + { + /* Check if transfer is paused. */ + if ((!(tcdRegs->CSR & DMA_CSR_DONE_MASK)) || (tcdRegs->CSR & DMA_CSR_ESG_MASK)) + { + /* + Re-enable channel request must be as soon as possible, so must put it into + critical section to avoid task switching or interrupt service routine. + */ + handle->base->SERQ = DMA_SERQ_SERQ(handle->channel); + } + } + EnableGlobalIRQ(primask); + } + } +} + +void EDMA_StopTransfer(edma_handle_t *handle) +{ + assert(handle != NULL); + + handle->flags &= (~EDMA_TRANSFER_ENABLED_MASK); + handle->base->CERQ = DMA_CERQ_CERQ(handle->channel); +} + +void EDMA_AbortTransfer(edma_handle_t *handle) +{ + handle->base->CERQ = DMA_CERQ_CERQ(handle->channel); + /* + Clear CSR to release channel. Because if the given channel started transfer, + CSR will be not zero. Because if it is the last transfer, DREQ will be set. + If not, ESG will be set. + */ + handle->base->TCD[handle->channel].CSR = 0; + /* Cancel all next TCD transfer. */ + handle->base->TCD[handle->channel].DLAST_SGA = 0; +} + +void EDMA_HandleIRQ(edma_handle_t *handle) +{ + assert(handle != NULL); + + /* Clear EDMA interrupt flag */ + handle->base->CINT = handle->channel; + if ((handle->tcdPool == NULL) && (handle->callback != NULL)) + { + (handle->callback)(handle, handle->userData, true, 0); + } + else /* Use the TCD queue. */ + { + uint32_t sga = handle->base->TCD[handle->channel].DLAST_SGA; + uint32_t sga_index; + int32_t tcds_done; + uint8_t new_header; + bool transfer_done; + + /* Check if transfer is already finished. */ + transfer_done = ((handle->base->TCD[handle->channel].CSR & DMA_CSR_DONE_MASK) != 0); + /* Get the offset of the current transfer TCD blcoks. */ + sga -= (uint32_t)handle->tcdPool; + /* Get the index of the current transfer TCD blcoks. */ + sga_index = sga / sizeof(edma_tcd_t); + /* Adjust header positions. */ + if (transfer_done) + { + /* New header shall point to the next TCD (current one is already finished) */ + new_header = sga_index; + } + else + { + /* New header shall point to this descriptor (not finished yet) */ + new_header = sga_index ? sga_index - 1U : handle->tcdSize - 1U; + } + /* Calculate the number of finished TCDs */ + if (new_header == handle->header) + { + if (handle->tcdUsed == handle->tcdSize) + { + tcds_done = handle->tcdUsed; + } + else + { + /* Internal error occurs. */ + tcds_done = 0; + } + } + else + { + tcds_done = new_header - handle->header; + if (tcds_done < 0) + { + tcds_done += handle->tcdSize; + } + } + /* Advance header to the point beyond the last finished TCD block. */ + handle->header = new_header; + /* Release TCD blocks. */ + handle->tcdUsed -= tcds_done; + /* Invoke callback function. */ + if (handle->callback) + { + (handle->callback)(handle, handle->userData, transfer_done, tcds_done); + } + } +} + +/* 8 channels (Shared): kl28 */ +#if defined(FSL_FEATURE_EDMA_MODULE_CHANNEL) && FSL_FEATURE_EDMA_MODULE_CHANNEL == 8U + +void DMA0_04_DriverIRQHandler(void) +{ + if ((EDMA_GetChannelStatusFlags(DMA0, 0U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[0]); + } + if ((EDMA_GetChannelStatusFlags(DMA0, 4U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[4]); + } +} + +void DMA0_15_DriverIRQHandler(void) +{ + if ((EDMA_GetChannelStatusFlags(DMA0, 1U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[1]); + } + if ((EDMA_GetChannelStatusFlags(DMA0, 5U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[5]); + } +} + +void DMA0_26_DriverIRQHandler(void) +{ + if ((EDMA_GetChannelStatusFlags(DMA0, 2U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[2]); + } + if ((EDMA_GetChannelStatusFlags(DMA0, 6U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[6]); + } +} + +void DMA0_37_DriverIRQHandler(void) +{ + if ((EDMA_GetChannelStatusFlags(DMA0, 3U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[3]); + } + if ((EDMA_GetChannelStatusFlags(DMA0, 7U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[7]); + } +} +#endif /* 8 channels (Shared) */ + +/* 32 channels (Shared): k80 */ +#if defined(FSL_FEATURE_EDMA_MODULE_CHANNEL) && FSL_FEATURE_EDMA_MODULE_CHANNEL == 32U + +void DMA0_DMA16_IRQHandler(void) +{ + if ((EDMA_GetChannelStatusFlags(DMA0, 0U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[0]); + } + if ((EDMA_GetChannelStatusFlags(DMA0, 16U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[16]); + } +} + +void DMA1_DMA17_IRQHandler(void) +{ + if ((EDMA_GetChannelStatusFlags(DMA0, 1U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[1]); + } + if ((EDMA_GetChannelStatusFlags(DMA0, 17U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[17]); + } +} + +void DMA2_DMA18_IRQHandler(void) +{ + if ((EDMA_GetChannelStatusFlags(DMA0, 2U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[2]); + } + if ((EDMA_GetChannelStatusFlags(DMA0, 18U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[18]); + } +} + +void DMA3_DMA19_IRQHandler(void) +{ + if ((EDMA_GetChannelStatusFlags(DMA0, 3U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[3]); + } + if ((EDMA_GetChannelStatusFlags(DMA0, 19U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[19]); + } +} + +void DMA4_DMA20_IRQHandler(void) +{ + if ((EDMA_GetChannelStatusFlags(DMA0, 4U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[4]); + } + if ((EDMA_GetChannelStatusFlags(DMA0, 20U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[20]); + } +} + +void DMA5_DMA21_IRQHandler(void) +{ + if ((EDMA_GetChannelStatusFlags(DMA0, 5U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[5]); + } + if ((EDMA_GetChannelStatusFlags(DMA0, 21U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[21]); + } +} + +void DMA6_DMA22_IRQHandler(void) +{ + if ((EDMA_GetChannelStatusFlags(DMA0, 6U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[6]); + } + if ((EDMA_GetChannelStatusFlags(DMA0, 22U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[22]); + } +} + +void DMA7_DMA23_IRQHandler(void) +{ + if ((EDMA_GetChannelStatusFlags(DMA0, 7U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[7]); + } + if ((EDMA_GetChannelStatusFlags(DMA0, 23U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[23]); + } +} + +void DMA8_DMA24_IRQHandler(void) +{ + if ((EDMA_GetChannelStatusFlags(DMA0, 8U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[8]); + } + if ((EDMA_GetChannelStatusFlags(DMA0, 24U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[24]); + } +} + +void DMA9_DMA25_IRQHandler(void) +{ + if ((EDMA_GetChannelStatusFlags(DMA0, 9U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[9]); + } + if ((EDMA_GetChannelStatusFlags(DMA0, 25U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[25]); + } +} + +void DMA10_DMA26_IRQHandler(void) +{ + if ((EDMA_GetChannelStatusFlags(DMA0, 10U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[10]); + } + if ((EDMA_GetChannelStatusFlags(DMA0, 26U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[26]); + } +} + +void DMA11_DMA27_IRQHandler(void) +{ + if ((EDMA_GetChannelStatusFlags(DMA0, 11U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[11]); + } + if ((EDMA_GetChannelStatusFlags(DMA0, 27U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[27]); + } +} + +void DMA12_DMA28_IRQHandler(void) +{ + if ((EDMA_GetChannelStatusFlags(DMA0, 12U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[12]); + } + if ((EDMA_GetChannelStatusFlags(DMA0, 28U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[28]); + } +} + +void DMA13_DMA29_IRQHandler(void) +{ + if ((EDMA_GetChannelStatusFlags(DMA0, 13U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[13]); + } + if ((EDMA_GetChannelStatusFlags(DMA0, 29U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[29]); + } +} + +void DMA14_DMA30_IRQHandler(void) +{ + if ((EDMA_GetChannelStatusFlags(DMA0, 14U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[14]); + } + if ((EDMA_GetChannelStatusFlags(DMA0, 30U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[30]); + } +} + +void DMA15_DMA31_IRQHandler(void) +{ + if ((EDMA_GetChannelStatusFlags(DMA0, 15U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[15]); + } + if ((EDMA_GetChannelStatusFlags(DMA0, 31U) & kEDMA_InterruptFlag) != 0U) + { + EDMA_HandleIRQ(s_EDMAHandle[31]); + } +} +#endif /* 32 channels (Shared) */ + +/* 4 channels (No Shared): kv10 */ +#if defined(FSL_FEATURE_EDMA_MODULE_CHANNEL) && FSL_FEATURE_EDMA_MODULE_CHANNEL > 0 + +void DMA0_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[0]); +} + +void DMA1_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[1]); +} + +void DMA2_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[2]); +} + +void DMA3_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[3]); +} + +/* 8 channels (No Shared) */ +#if defined(FSL_FEATURE_EDMA_MODULE_CHANNEL) && FSL_FEATURE_EDMA_MODULE_CHANNEL > 4U + +void DMA4_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[4]); +} + +void DMA5_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[5]); +} + +void DMA6_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[6]); +} + +void DMA7_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[7]); +} +#endif /* FSL_FEATURE_EDMA_MODULE_CHANNEL == 8 */ + +/* 16 channels (No Shared) */ +#if defined(FSL_FEATURE_EDMA_MODULE_CHANNEL) && FSL_FEATURE_EDMA_MODULE_CHANNEL > 8U + +void DMA8_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[8]); +} + +void DMA9_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[9]); +} + +void DMA10_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[10]); +} + +void DMA11_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[11]); +} + +void DMA12_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[12]); +} + +void DMA13_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[13]); +} + +void DMA14_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[14]); +} + +void DMA15_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[15]); +} +#endif /* FSL_FEATURE_EDMA_MODULE_CHANNEL == 16 */ + +/* 32 channels (No Shared) */ +#if defined(FSL_FEATURE_EDMA_MODULE_CHANNEL) && FSL_FEATURE_EDMA_MODULE_CHANNEL > 16U + +void DMA16_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[16]); +} + +void DMA17_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[17]); +} + +void DMA18_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[18]); +} + +void DMA19_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[19]); +} + +void DMA20_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[20]); +} + +void DMA21_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[21]); +} + +void DMA22_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[22]); +} + +void DMA23_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[23]); +} + +void DMA24_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[24]); +} + +void DMA25_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[25]); +} + +void DMA26_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[26]); +} + +void DMA27_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[27]); +} + +void DMA28_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[28]); +} + +void DMA29_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[29]); +} + +void DMA30_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[30]); +} + +void DMA31_DriverIRQHandler(void) +{ + EDMA_HandleIRQ(s_EDMAHandle[31]); +} +#endif /* FSL_FEATURE_EDMA_MODULE_CHANNEL == 32 */ + +#endif /* 4/8/16/32 channels (No Shared) */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_edma.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_edma.h new file mode 100644 index 00000000000..02c4fabf723 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_edma.h @@ -0,0 +1,880 @@ +/* +* Copyright (c) 2015, Freescale Semiconductor, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without modification, +* are permitted provided that the following conditions are met: +* +* o Redistributions of source code must retain the above copyright notice, this list +* of conditions and the following disclaimer. +* +* o Redistributions in binary form must reproduce the above copyright notice, this +* list of conditions and the following disclaimer in the documentation and/or +* other materials provided with the distribution. +* +* o Neither the name of Freescale Semiconductor, Inc. nor the names of its +* contributors may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef _FSL_EDMA_H_ +#define _FSL_EDMA_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup edma + * @{ + */ + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief eDMA driver version */ +#define FSL_EDMA_DRIVER_VERSION (MAKE_VERSION(2, 0, 1)) /*!< Version 2.0.1. */ +/*@}*/ + +/*! @brief Compute the offset unit from DCHPRI3 */ +#define DMA_DCHPRI_INDEX(channel) (((channel) & ~0x03U) | (3 - ((channel)&0x03U))) + +/*! @brief Get the pointer of DCHPRIn */ +#define DMA_DCHPRIn(base, channel) ((volatile uint8_t *)&(base->DCHPRI3))[DMA_DCHPRI_INDEX(channel)] + +/*! @brief eDMA transfer configuration */ +typedef enum _edma_transfer_size +{ + kEDMA_TransferSize1Bytes = 0x0U, /*!< Source/Destination data transfer size is 1 byte every time */ + kEDMA_TransferSize2Bytes = 0x1U, /*!< Source/Destination data transfer size is 2 bytes every time */ + kEDMA_TransferSize4Bytes = 0x2U, /*!< Source/Destination data transfer size is 4 bytes every time */ + kEDMA_TransferSize16Bytes = 0x4U, /*!< Source/Destination data transfer size is 16 bytes every time */ + kEDMA_TransferSize32Bytes = 0x5U, /*!< Source/Destination data transfer size is 32 bytes every time */ +} edma_transfer_size_t; + +/*! @brief eDMA modulo configuration */ +typedef enum _edma_modulo +{ + kEDMA_ModuloDisable = 0x0U, /*!< Disable modulo */ + kEDMA_Modulo2bytes, /*!< Circular buffer size is 2 bytes. */ + kEDMA_Modulo4bytes, /*!< Circular buffer size is 4 bytes. */ + kEDMA_Modulo8bytes, /*!< Circular buffer size is 8 bytes. */ + kEDMA_Modulo16bytes, /*!< Circular buffer size is 16 bytes. */ + kEDMA_Modulo32bytes, /*!< Circular buffer size is 32 bytes. */ + kEDMA_Modulo64bytes, /*!< Circular buffer size is 64 bytes. */ + kEDMA_Modulo128bytes, /*!< Circular buffer size is 128 bytes. */ + kEDMA_Modulo256bytes, /*!< Circular buffer size is 256 bytes. */ + kEDMA_Modulo512bytes, /*!< Circular buffer size is 512 bytes. */ + kEDMA_Modulo1Kbytes, /*!< Circular buffer size is 1K bytes. */ + kEDMA_Modulo2Kbytes, /*!< Circular buffer size is 2K bytes. */ + kEDMA_Modulo4Kbytes, /*!< Circular buffer size is 4K bytes. */ + kEDMA_Modulo8Kbytes, /*!< Circular buffer size is 8K bytes. */ + kEDMA_Modulo16Kbytes, /*!< Circular buffer size is 16K bytes. */ + kEDMA_Modulo32Kbytes, /*!< Circular buffer size is 32K bytes. */ + kEDMA_Modulo64Kbytes, /*!< Circular buffer size is 64K bytes. */ + kEDMA_Modulo128Kbytes, /*!< Circular buffer size is 128K bytes. */ + kEDMA_Modulo256Kbytes, /*!< Circular buffer size is 256K bytes. */ + kEDMA_Modulo512Kbytes, /*!< Circular buffer size is 512K bytes. */ + kEDMA_Modulo1Mbytes, /*!< Circular buffer size is 1M bytes. */ + kEDMA_Modulo2Mbytes, /*!< Circular buffer size is 2M bytes. */ + kEDMA_Modulo4Mbytes, /*!< Circular buffer size is 4M bytes. */ + kEDMA_Modulo8Mbytes, /*!< Circular buffer size is 8M bytes. */ + kEDMA_Modulo16Mbytes, /*!< Circular buffer size is 16M bytes. */ + kEDMA_Modulo32Mbytes, /*!< Circular buffer size is 32M bytes. */ + kEDMA_Modulo64Mbytes, /*!< Circular buffer size is 64M bytes. */ + kEDMA_Modulo128Mbytes, /*!< Circular buffer size is 128M bytes. */ + kEDMA_Modulo256Mbytes, /*!< Circular buffer size is 256M bytes. */ + kEDMA_Modulo512Mbytes, /*!< Circular buffer size is 512M bytes. */ + kEDMA_Modulo1Gbytes, /*!< Circular buffer size is 1G bytes. */ + kEDMA_Modulo2Gbytes, /*!< Circular buffer size is 2G bytes. */ +} edma_modulo_t; + +/*! @brief Bandwidth control */ +typedef enum _edma_bandwidth +{ + kEDMA_BandwidthStallNone = 0x0U, /*!< No eDMA engine stalls. */ + kEDMA_BandwidthStall4Cycle = 0x2U, /*!< eDMA engine stalls for 4 cycles after each read/write. */ + kEDMA_BandwidthStall8Cycle = 0x3U, /*!< eDMA engine stalls for 8 cycles after each read/write. */ +} edma_bandwidth_t; + +/*! @brief Channel link type */ +typedef enum _edma_channel_link_type +{ + kEDMA_LinkNone = 0x0U, /*!< No channel link */ + kEDMA_MinorLink, /*!< Channel link after each minor loop */ + kEDMA_MajorLink, /*!< Channel link while major loop count exhausted */ +} edma_channel_link_type_t; + +/*!@brief eDMA channel status flags. */ +enum _edma_channel_status_flags +{ + kEDMA_DoneFlag = 0x1U, /*!< DONE flag, set while transfer finished, CITER value exhausted*/ + kEDMA_ErrorFlag = 0x2U, /*!< eDMA error flag, an error occurred in a transfer */ + kEDMA_InterruptFlag = 0x4U, /*!< eDMA interrupt flag, set while an interrupt occurred of this channel */ +}; + +/*! @brief eDMA channel error status flags. */ +enum _edma_error_status_flags +{ + kEDMA_DestinationBusErrorFlag = DMA_ES_DBE_MASK, /*!< Bus error on destination address */ + kEDMA_SourceBusErrorFlag = DMA_ES_SBE_MASK, /*!< Bus error on the source address */ + kEDMA_ScatterGatherErrorFlag = DMA_ES_SGE_MASK, /*!< Error on the Scatter/Gather address, not 32byte aligned. */ + kEDMA_NbytesErrorFlag = DMA_ES_NCE_MASK, /*!< NBYTES/CITER configuration error */ + kEDMA_DestinationOffsetErrorFlag = DMA_ES_DOE_MASK, /*!< Destination offset not aligned with destination size */ + kEDMA_DestinationAddressErrorFlag = DMA_ES_DAE_MASK, /*!< Destination address not aligned with destination size */ + kEDMA_SourceOffsetErrorFlag = DMA_ES_SOE_MASK, /*!< Source offset not aligned with source size */ + kEDMA_SourceAddressErrorFlag = DMA_ES_SAE_MASK, /*!< Source address not aligned with source size*/ + kEDMA_ErrorChannelFlag = DMA_ES_ERRCHN_MASK, /*!< Error channel number of the cancelled channel number */ + kEDMA_ChannelPriorityErrorFlag = DMA_ES_CPE_MASK, /*!< Channel priority is not unique. */ + kEDMA_TransferCanceledFlag = DMA_ES_ECX_MASK, /*!< Transfer cancelled */ +#if defined(FSL_FEATURE_EDMA_CHANNEL_GROUP_COUNT) && FSL_FEATURE_EDMA_CHANNEL_GROUP_COUNT > 1 + kEDMA_GroupPriorityErrorFlag = DMA_ES_GPE_MASK, /*!< Group priority is not unique. */ +#endif + kEDMA_ValidFlag = DMA_ES_VLD_MASK, /*!< No error occurred, this bit is 0. Otherwise, it is 1. */ +}; + +/*! @brief eDMA interrupt source */ +typedef enum _edma_interrupt_enable +{ + kEDMA_ErrorInterruptEnable = 0x1U, /*!< Enable interrupt while channel error occurs. */ + kEDMA_MajorInterruptEnable = DMA_CSR_INTMAJOR_MASK, /*!< Enable interrupt while major count exhausted. */ + kEDMA_HalfInterruptEnable = DMA_CSR_INTHALF_MASK, /*!< Enable interrupt while major count to half value. */ +} edma_interrupt_enable_t; + +/*! @brief eDMA transfer type */ +typedef enum _edma_transfer_type +{ + kEDMA_MemoryToMemory = 0x0U, /*!< Transfer from memory to memory */ + kEDMA_PeripheralToMemory, /*!< Transfer from peripheral to memory */ + kEDMA_MemoryToPeripheral, /*!< Transfer from memory to peripheral */ +} edma_transfer_type_t; + +/*! @brief eDMA transfer status */ +enum _edma_transfer_status +{ + kStatus_EDMA_QueueFull = MAKE_STATUS(kStatusGroup_EDMA, 0), /*!< TCD queue is full. */ + kStatus_EDMA_Busy = MAKE_STATUS(kStatusGroup_EDMA, 1), /*!< Channel is busy and can't handle the + transfer request. */ +}; + +/*! @brief eDMA global configuration structure.*/ +typedef struct _edma_config +{ + bool enableContinuousLinkMode; /*!< Enable (true) continuous link mode. Upon minor loop completion, the channel + activates again if that channel has a minor loop channel link enabled and + the link channel is itself. */ + bool enableHaltOnError; /*!< Enable (true) transfer halt on error. Any error causes the HALT bit to set. + Subsequently, all service requests are ignored until the HALT bit is cleared.*/ + bool enableRoundRobinArbitration; /*!< Enable (true) round robin channel arbitration method, or fixed priority + arbitration is used for channel selection */ + bool enableDebugMode; /*!< Enable(true) eDMA debug mode. When in debug mode, the eDMA stalls the start of + a new channel. Executing channels are allowed to complete. */ +} edma_config_t; + +/*! + * @brief eDMA transfer configuration + * + * This structure configures the source/destination transfer attribute. + * This figure shows the eDMA's transfer model: + * _________________________________________________ + * | Transfer Size | | + * Minor Loop |_______________| Major loop Count 1 | + * Bytes | Transfer Size | | + * ____________|_______________|____________________|--> Minor loop complete + * ____________________________________ + * | | | + * |_______________| Major Loop Count 2 | + * | | | + * |_______________|____________________|--> Minor loop Complete + * + * ---------------------------------------------------------> Transfer complete + */ +typedef struct _edma_transfer_config +{ + uint32_t srcAddr; /*!< Source data address. */ + uint32_t destAddr; /*!< Destination data address. */ + edma_transfer_size_t srcTransferSize; /*!< Source data transfer size. */ + edma_transfer_size_t destTransferSize; /*!< Destination data transfer size. */ + int16_t srcOffset; /*!< Sign-extended offset applied to the current source address to + form the next-state value as each source read is completed. */ + int16_t destOffset; /*!< Sign-extended offset applied to the current destination address to + form the next-state value as each destination write is completed. */ + uint16_t minorLoopBytes; /*!< Bytes to transfer in a minor loop*/ + uint32_t majorLoopCounts; /*!< Major loop iteration count. */ +} edma_transfer_config_t; + +/*! @brief eDMA channel priority configuration */ +typedef struct _edma_channel_Preemption_config +{ + bool enableChannelPreemption; /*!< If true: channel can be suspended by other channel with higher priority */ + bool enablePreemptAbility; /*!< If true: channel can suspend other channel with low priority */ + uint8_t channelPriority; /*!< Channel priority */ +} edma_channel_Preemption_config_t; + +/*! @brief eDMA minor offset configuration */ +typedef struct _edma_minor_offset_config +{ + bool enableSrcMinorOffset; /*!< Enable(true) or Disable(false) source minor loop offset. */ + bool enableDestMinorOffset; /*!< Enable(true) or Disable(false) destination minor loop offset. */ + uint32_t minorOffset; /*!< Offset for minor loop mapping. */ +} edma_minor_offset_config_t; + +/*! + * @brief eDMA TCD. + * + * This structure is same as TCD register which is described in reference manual, + * and is used to configure the scatter/gather feature as a next hardware TCD. + */ +typedef struct _edma_tcd +{ + __IO uint32_t SADDR; /*!< SADDR register, used to save source address */ + __IO uint16_t SOFF; /*!< SOFF register, save offset bytes every transfer */ + __IO uint16_t ATTR; /*!< ATTR register, source/destination transfer size and modulo */ + __IO uint32_t NBYTES; /*!< Nbytes register, minor loop length in bytes */ + __IO uint32_t SLAST; /*!< SLAST register */ + __IO uint32_t DADDR; /*!< DADDR register, used for destination address */ + __IO uint16_t DOFF; /*!< DOFF register, used for destination offset */ + __IO uint16_t CITER; /*!< CITER register, current minor loop numbers, for unfinished minor loop.*/ + __IO uint32_t DLAST_SGA; /*!< DLASTSGA register, next stcd address used in scatter-gather mode */ + __IO uint16_t CSR; /*!< CSR register, for TCD control status */ + __IO uint16_t BITER; /*!< BITER register, begin minor loop count. */ +} edma_tcd_t; + +/*! @brief Callback for eDMA */ +struct _edma_handle; + +/*! @brief Define Callback function for eDMA. */ +typedef void (*edma_callback)(struct _edma_handle *handle, void *userData, bool transferDone, uint32_t tcds); + +/*! @brief eDMA transfer handle structure */ +typedef struct _edma_handle +{ + edma_callback callback; /*!< Callback function for major count exhausted. */ + void *userData; /*!< Callback function parameter. */ + DMA_Type *base; /*!< eDMA peripheral base address. */ + edma_tcd_t *tcdPool; /*!< Pointer to memory stored TCDs. */ + uint8_t channel; /*!< eDMA channel number. */ + volatile int8_t header; /*!< The first TCD index. */ + volatile int8_t tail; /*!< The last TCD index. */ + volatile int8_t tcdUsed; /*!< The number of used TCD slots. */ + volatile int8_t tcdSize; /*!< The total number of TCD slots in the queue. */ + uint8_t flags; /*!< The status of the current channel. */ +} edma_handle_t; + +/******************************************************************************* + * APIs + ******************************************************************************/ +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus */ + +/*! + * @name eDMA initialization and De-initialization + * @{ + */ + +/*! + * @brief Initializes eDMA peripheral. + * + * This function ungates the eDMA clock and configures the eDMA peripheral according + * to the configuration structure. + * + * @param base eDMA peripheral base address. + * @param config Pointer to configuration structure, see "edma_config_t". + * @note This function enable the minor loop map feature. + */ +void EDMA_Init(DMA_Type *base, const edma_config_t *config); + +/*! + * @brief Deinitializes eDMA peripheral. + * + * This function gates the eDMA clock. + * + * @param base eDMA peripheral base address. + */ +void EDMA_Deinit(DMA_Type *base); + +/*! + * @brief Gets the eDMA default configuration structure. + * + * This function sets the configuration structure to a default value. + * The default configuration is set to the following value: + * @code + * config.enableContinuousLinkMode = false; + * config.enableHaltOnError = true; + * config.enableRoundRobinArbitration = false; + * config.enableDebugMode = false; + * @endcode + * + * @param config Pointer to eDMA configuration structure. + */ +void EDMA_GetDefaultConfig(edma_config_t *config); + +/* @} */ +/*! + * @name eDMA Channel Operation + * @{ + */ + +/*! + * @brief Sets all TCD registers to a default value. + * + * This function sets TCD registers for this channel to default value. + * + * @param base eDMA peripheral base address. + * @param channel eDMA channel number. + * @note This function must not be called while the channel transfer is on-going, + * or it causes unpredictable results. + * @note This function enables the auto stop request feature. + */ +void EDMA_ResetChannel(DMA_Type *base, uint32_t channel); + +/*! + * @brief Configures the eDMA transfer attribute. + * + * This function configures the transfer attribute, including source address, destination address, + * transfer size, address offset, and so on. It also configures the scatter gather feature if the + * user supplies the TCD address. + * Example: + * @code + * edma_transfer_t config; + * edma_tcd_t tcd; + * config.srcAddr = ..; + * config.destAddr = ..; + * ... + * EDMA_SetTransferConfig(DMA0, channel, &config, &stcd); + * @endcode + * + * @param base eDMA peripheral base address. + * @param channel eDMA channel number. + * @param config Pointer to eDMA transfer configuration structure. + * @param nextTcd Point to TCD structure. It can be NULL if users + * do not want to enable scatter/gather feature. + * @note If nextTcd is not NULL, it means scatter gather feature is enabled + * and DREQ bit is cleared in the previous transfer configuration, which + * is set in eDMA_ResetChannel. + */ +void EDMA_SetTransferConfig(DMA_Type *base, + uint32_t channel, + const edma_transfer_config_t *config, + edma_tcd_t *nextTcd); + +/*! + * @brief Configures the eDMA minor offset feature. + * + * Minor offset means signed-extended value added to source address or destination + * address after each minor loop. + * + * @param base eDMA peripheral base address. + * @param channel eDMA channel number. + * @param config Pointer to Minor offset configuration structure. + */ +void EDMA_SetMinorOffsetConfig(DMA_Type *base, uint32_t channel, const edma_minor_offset_config_t *config); + +/*! + * @brief Configures the eDMA channel preemption feature. + * + * This function configures the channel preemption attribute and the priority of the channel. + * + * @param base eDMA peripheral base address. + * @param channel eDMA channel number + * @param config Pointer to channel preemption configuration structure. + */ +static inline void EDMA_SetChannelPreemptionConfig(DMA_Type *base, + uint32_t channel, + const edma_channel_Preemption_config_t *config) +{ + assert(channel < FSL_FEATURE_EDMA_MODULE_CHANNEL); + assert(config != NULL); + + DMA_DCHPRIn(base, channel) = + (DMA_DCHPRI0_DPA(!config->enablePreemptAbility) | DMA_DCHPRI0_ECP(config->enableChannelPreemption) | + DMA_DCHPRI0_CHPRI(config->channelPriority)); +} + +/*! + * @brief Sets the channel link for the eDMA transfer. + * + * This function configures minor link or major link mode. The minor link means that the channel link is + * triggered every time CITER decreases by 1. The major link means that the channel link is triggered when the CITER is + * exhausted. + * + * @param base eDMA peripheral base address. + * @param channel eDMA channel number. + * @param type Channel link type, it can be one of: + * @arg kEDMA_LinkNone + * @arg kEDMA_MinorLink + * @arg kEDMA_MajorLink + * @param linkedChannel The linked channel number. + * @note Users should ensure that DONE flag is cleared before calling this interface, or the configuration is invalid. + */ +void EDMA_SetChannelLink(DMA_Type *base, uint32_t channel, edma_channel_link_type_t type, uint32_t linkedChannel); + +/*! + * @brief Sets the bandwidth for the eDMA transfer. + * + * In general, because the eDMA processes the minor loop, it continuously generates read/write sequences + * until the minor count is exhausted. The bandwidth forces the eDMA to stall after the completion of + * each read/write access to control the bus request bandwidth seen by the crossbar switch. + * + * @param base eDMA peripheral base address. + * @param channel eDMA channel number. + * @param bandWidth Bandwidth setting, it can be one of: + * @arg kEDMABandwidthStallNone + * @arg kEDMABandwidthStall4Cycle + * @arg kEDMABandwidthStall8Cycle + */ +void EDMA_SetBandWidth(DMA_Type *base, uint32_t channel, edma_bandwidth_t bandWidth); + +/*! + * @brief Sets the source modulo and destination modulo for eDMA transfer. + * + * This function defines a specific address range specified to be the value after (SADDR + SOFF)/(DADDR + DOFF) + * calculation is performed or the original register value. It provides the ability to implement a circular data + * queue easily. + * + * @param base eDMA peripheral base address. + * @param channel eDMA channel number. + * @param srcModulo Source modulo value. + * @param destModulo Destination modulo value. + */ +void EDMA_SetModulo(DMA_Type *base, uint32_t channel, edma_modulo_t srcModulo, edma_modulo_t destModulo); + +#if defined(FSL_FEATURE_EDMA_ASYNCHRO_REQUEST_CHANNEL_COUNT) && FSL_FEATURE_EDMA_ASYNCHRO_REQUEST_CHANNEL_COUNT +/*! + * @brief Enables an async request for the eDMA transfer. + * + * @param base eDMA peripheral base address. + * @param channel eDMA channel number. + * @param enable The command for enable(ture) or disable(false). + */ +static inline void EDMA_EnableAsyncRequest(DMA_Type *base, uint32_t channel, bool enable) +{ + assert(channel < FSL_FEATURE_DMAMUX_MODULE_CHANNEL); + + base->EARS = (base->EARS & (~(1U << channel))) | ((uint32_t)enable << channel); +} +#endif /* FSL_FEATURE_EDMA_ASYNCHRO_REQUEST_CHANNEL_COUNT */ + +/*! + * @brief Enables an auto stop request for the eDMA transfer. + * + * If enabling the auto stop request, the eDMA hardware automatically disables the hardware channel request. + * + * @param base eDMA peripheral base address. + * @param channel eDMA channel number. + * @param enable The command for enable (true) or disable (false). + */ +static inline void EDMA_EnableAutoStopRequest(DMA_Type *base, uint32_t channel, bool enable) +{ + assert(channel < FSL_FEATURE_DMAMUX_MODULE_CHANNEL); + + base->TCD[channel].CSR = (base->TCD[channel].CSR & (~DMA_CSR_DREQ_MASK)) | DMA_CSR_DREQ(enable); +} + +/*! + * @brief Enables the interrupt source for the eDMA transfer. + * + * @param base eDMA peripheral base address. + * @param channel eDMA channel number. + * @param mask The mask of interrupt source to be set. Users need to use + * the defined edma_interrupt_enable_t type. + */ +void EDMA_EnableChannelInterrupts(DMA_Type *base, uint32_t channel, uint32_t mask); + +/*! + * @brief Disables the interrupt source for the eDMA transfer. + * + * @param base eDMA peripheral base address. + * @param channel eDMA channel number. + * @param mask The mask of interrupt source to be set. Use + * the defined edma_interrupt_enable_t type. + */ +void EDMA_DisableChannelInterrupts(DMA_Type *base, uint32_t channel, uint32_t mask); + +/* @} */ +/*! + * @name eDMA TCD Operation + * @{ + */ + +/*! + * @brief Sets all fields to default values for the TCD structure. + * + * This function sets all fields for this TCD structure to default value. + * + * @param tcd Pointer to the TCD structure. + * @note This function enables the auto stop request feature. + */ +void EDMA_TcdReset(edma_tcd_t *tcd); + +/*! + * @brief Configures the eDMA TCD transfer attribute. + * + * TCD is a transfer control descriptor. The content of the TCD is the same as hardware TCD registers. + * STCD is used in scatter-gather mode. + * This function configures the TCD transfer attribute, including source address, destination address, + * transfer size, address offset, and so on. It also configures the scatter gather feature if the + * user supplies the next TCD address. + * Example: + * @code + * edma_transfer_t config = { + * ... + * } + * edma_tcd_t tcd __aligned(32); + * edma_tcd_t nextTcd __aligned(32); + * EDMA_TcdSetTransferConfig(&tcd, &config, &nextTcd); + * @endcode + * + * @param tcd Pointer to the TCD structure. + * @param config Pointer to eDMA transfer configuration structure. + * @param nextTcd Pointer to the next TCD structure. It can be NULL if users + * do not want to enable scatter/gather feature. + * @note TCD address should be 32 bytes aligned, or it causes an eDMA error. + * @note If the nextTcd is not NULL, the scatter gather feature is enabled + * and DREQ bit is cleared in the previous transfer configuration, which + * is set in the EDMA_TcdReset. + */ +void EDMA_TcdSetTransferConfig(edma_tcd_t *tcd, const edma_transfer_config_t *config, edma_tcd_t *nextTcd); + +/*! + * @brief Configures the eDMA TCD minor offset feature. + * + * Minor offset is a signed-extended value added to the source address or destination + * address after each minor loop. + * + * @param tcd Point to the TCD structure. + * @param config Pointer to Minor offset configuration structure. + */ +void EDMA_TcdSetMinorOffsetConfig(edma_tcd_t *tcd, const edma_minor_offset_config_t *config); + +/*! + * @brief Sets the channel link for eDMA TCD. + * + * This function configures either a minor link or a major link. The minor link means the channel link is + * triggered every time CITER decreases by 1. The major link means that the channel link is triggered when the CITER is + * exhausted. + * + * @note Users should ensure that DONE flag is cleared before calling this interface, or the configuration is invalid. + * @param tcd Point to the TCD structure. + * @param type Channel link type, it can be one of: + * @arg kEDMA_LinkNone + * @arg kEDMA_MinorLink + * @arg kEDMA_MajorLink + * @param linkedChannel The linked channel number. + */ +void EDMA_TcdSetChannelLink(edma_tcd_t *tcd, edma_channel_link_type_t type, uint32_t linkedChannel); + +/*! + * @brief Sets the bandwidth for the eDMA TCD. + * + * In general, because the eDMA processes the minor loop, it continuously generates read/write sequences + * until the minor count is exhausted. Bandwidth forces the eDMA to stall after the completion of + * each read/write access to control the bus request bandwidth seen by the crossbar switch. + * @param tcd Point to the TCD structure. + * @param bandWidth Bandwidth setting, it can be one of: + * @arg kEDMABandwidthStallNone + * @arg kEDMABandwidthStall4Cycle + * @arg kEDMABandwidthStall8Cycle + */ +static inline void EDMA_TcdSetBandWidth(edma_tcd_t *tcd, edma_bandwidth_t bandWidth) +{ + assert(tcd != NULL); + assert(((uint32_t)tcd & 0x1FU) == 0); + + tcd->CSR = (tcd->CSR & (~DMA_CSR_BWC_MASK)) | DMA_CSR_BWC(bandWidth); +} + +/*! + * @brief Sets the source modulo and destination modulo for eDMA TCD. + * + * This function defines a specific address range specified to be the value after (SADDR + SOFF)/(DADDR + DOFF) + * calculation is performed or the original register value. It provides the ability to implement a circular data + * queue easily. + * + * @param tcd Point to the TCD structure. + * @param srcModulo Source modulo value. + * @param destModulo Destination modulo value. + */ +void EDMA_TcdSetModulo(edma_tcd_t *tcd, edma_modulo_t srcModulo, edma_modulo_t destModulo); + +/*! + * @brief Sets the auto stop request for the eDMA TCD. + * + * If enabling the auto stop request, the eDMA hardware automatically disables the hardware channel request. + * + * @param tcd Point to the TCD structure. + * @param enable The command for enable(ture) or disable(false). + */ +static inline void EDMA_TcdEnableAutoStopRequest(edma_tcd_t *tcd, bool enable) +{ + assert(tcd != NULL); + assert(((uint32_t)tcd & 0x1FU) == 0); + + tcd->CSR = (tcd->CSR & (~DMA_CSR_DREQ_MASK)) | DMA_CSR_DREQ(enable); +} + +/*! + * @brief Enables the interrupt source for the eDMA TCD. + * + * @param tcd Point to the TCD structure. + * @param mask The mask of interrupt source to be set. Users need to use + * the defined edma_interrupt_enable_t type. + */ +void EDMA_TcdEnableInterrupts(edma_tcd_t *tcd, uint32_t mask); + +/*! + * @brief Disables the interrupt source for the eDMA TCD. + * + * @param tcd Point to the TCD structure. + * @param mask The mask of interrupt source to be set. Users need to use + * the defined edma_interrupt_enable_t type. + */ +void EDMA_TcdDisableInterrupts(edma_tcd_t *tcd, uint32_t mask); + +/*! @} */ +/*! + * @name eDMA Channel Transfer Operation + * @{ + */ + +/*! + * @brief Enables the eDMA hardware channel request. + * + * This function enables the hardware channel request. + * + * @param base eDMA peripheral base address. + * @param channel eDMA channel number. + */ +static inline void EDMA_EnableChannelRequest(DMA_Type *base, uint32_t channel) +{ + assert(channel < FSL_FEATURE_DMAMUX_MODULE_CHANNEL); + + base->SERQ = DMA_SERQ_SERQ(channel); +} + +/*! + * @brief Disables the eDMA hardware channel request. + * + * This function disables the hardware channel request. + * + * @param base eDMA peripheral base address. + * @param channel eDMA channel number. + */ +static inline void EDMA_DisableChannelRequest(DMA_Type *base, uint32_t channel) +{ + assert(channel < FSL_FEATURE_DMAMUX_MODULE_CHANNEL); + + base->CERQ = DMA_CERQ_CERQ(channel); +} + +/*! + * @brief Starts the eDMA transfer by software trigger. + * + * This function starts a minor loop transfer. + * + * @param base eDMA peripheral base address. + * @param channel eDMA channel number. + */ +static inline void EDMA_TriggerChannelStart(DMA_Type *base, uint32_t channel) +{ + assert(channel < FSL_FEATURE_DMAMUX_MODULE_CHANNEL); + + base->SSRT = DMA_SSRT_SSRT(channel); +} + +/*! @} */ +/*! + * @name eDMA Channel Status Operation + * @{ + */ + +/*! + * @brief Gets the Remaining bytes from the eDMA current channel TCD. + * + * This function checks the TCD (Task Control Descriptor) status for a specified + * eDMA channel and returns the the number of bytes that have not finished. + * + * @param base eDMA peripheral base address. + * @param channel eDMA channel number. + * @return Bytes have not been transferred yet for the current TCD. + * @note This function can only be used to get unfinished bytes of transfer without + * the next TCD, or it might be inaccuracy. + */ +uint32_t EDMA_GetRemainingBytes(DMA_Type *base, uint32_t channel); + +/*! + * @brief Gets the eDMA channel error status flags. + * + * @param base eDMA peripheral base address. + * @return The mask of error status flags. Users need to use the + * _edma_error_status_flags type to decode the return variables. + */ +static inline uint32_t EDMA_GetErrorStatusFlags(DMA_Type *base) +{ + return base->ES; +} + +/*! + * @brief Gets the eDMA channel status flags. + * + * @param base eDMA peripheral base address. + * @param channel eDMA channel number. + * @return The mask of channel status flags. Users need to use the + * _edma_channel_status_flags type to decode the return variables. + */ +uint32_t EDMA_GetChannelStatusFlags(DMA_Type *base, uint32_t channel); + +/*! + * @brief Clears the eDMA channel status flags. + * + * @param base eDMA peripheral base address. + * @param channel eDMA channel number. + * @param mask The mask of channel status to be cleared. Users need to use + * the defined _edma_channel_status_flags type. + */ +void EDMA_ClearChannelStatusFlags(DMA_Type *base, uint32_t channel, uint32_t mask); + +/*! @} */ +/*! + * @name eDMA Transactional Operation + */ + +/*! + * @brief Creates the eDMA handle. + * + * This function is called if using transaction API for eDMA. This function + * initializes the internal state of eDMA handle. + * + * @param handle eDMA handle pointer. The eDMA handle stores callback function and + * parameters. + * @param base eDMA peripheral base address. + * @param channel eDMA channel number. + */ +void EDMA_CreateHandle(edma_handle_t *handle, DMA_Type *base, uint32_t channel); + +/*! + * @brief Installs the TCDs memory pool into eDMA handle. + * + * This function is called after the EDMA_CreateHandle to use scatter/gather feature. + * + * @param handle eDMA handle pointer. + * @param tcdPool Memory pool to store TCDs. It must be 32 bytes aligned. + * @param tcdSize The number of TCD slots. + */ +void EDMA_InstallTCDMemory(edma_handle_t *handle, edma_tcd_t *tcdPool, uint32_t tcdSize); + +/*! + * @brief Installs a callback function for the eDMA transfer. + * + * This callback is called in eDMA IRQ handler. Use the callback to do something after + * the current major loop transfer completes. + * + * @param handle eDMA handle pointer. + * @param callback eDMA callback function pointer. + * @param userData Parameter for callback function. + */ +void EDMA_SetCallback(edma_handle_t *handle, edma_callback callback, void *userData); + +/*! + * @brief Prepares the eDMA transfer structure. + * + * This function prepares the transfer configuration structure according to the user input. + * + * @param config The user configuration structure of type edma_transfer_t. + * @param srcAddr eDMA transfer source address. + * @param srcWidth eDMA transfer source address width(bytes). + * @param destAddr eDMA transfer destination address. + * @param destWidth eDMA transfer destination address width(bytes). + * @param bytesEachRequest eDMA transfer bytes per channel request. + * @param transferBytes eDMA transfer bytes to be transferred. + * @param type eDMA transfer type. + * @note The data address and the data width must be consistent. For example, if the SRC + * is 4 bytes, so the source address must be 4 bytes aligned, or it shall result in + * source address error(SAE). + */ +void EDMA_PrepareTransfer(edma_transfer_config_t *config, + void *srcAddr, + uint32_t srcWidth, + void *destAddr, + uint32_t destWidth, + uint32_t bytesEachRequest, + uint32_t transferBytes, + edma_transfer_type_t type); + +/*! + * @brief Submits the eDMA transfer request. + * + * This function submits the eDMA transfer request according to the transfer configuration structure. + * If the user submits the transfer request repeatedly, this function packs an unprocessed request as + * a TCD and enables scatter/gather feature to process it in the next time. + * + * @param handle eDMA handle pointer. + * @param config Pointer to eDMA transfer configuration structure. + * @retval kStatus_EDMA_Success It means submit transfer request succeed. + * @retval kStatus_EDMA_QueueFull It means TCD queue is full. Submit transfer request is not allowed. + * @retval kStatus_EDMA_Busy It means the given channel is busy, need to submit request later. + */ +status_t EDMA_SubmitTransfer(edma_handle_t *handle, const edma_transfer_config_t *config); + +/*! + * @brief eDMA start transfer. + * + * This function enables the channel request. Users can call this function after submitting the transfer request + * or before submitting the transfer request. + * + * @param handle eDMA handle pointer. + */ +void EDMA_StartTransfer(edma_handle_t *handle); + +/*! + * @brief eDMA stop transfer. + * + * This function disables the channel request to pause the transfer. Users can call EDMA_StartTransfer() + * again to resume the transfer. + * + * @param handle eDMA handle pointer. + */ +void EDMA_StopTransfer(edma_handle_t *handle); + +/*! + * @brief eDMA abort transfer. + * + * This function disables the channel request and clear transfer status bits. + * Users can submit another transfer after calling this API. + * + * @param handle DMA handle pointer. + */ +void EDMA_AbortTransfer(edma_handle_t *handle); + +/*! + * @brief eDMA IRQ handler for current major loop transfer complete. + * + * This function clears the channel major interrupt flag and call + * the callback function if it is not NULL. + * + * @param handle eDMA handle pointer. + */ +void EDMA_HandleIRQ(edma_handle_t *handle); + +/* @} */ + +#if defined(__cplusplus) +} +#endif /* __cplusplus */ + +/* @} */ + +#endif /*_FSL_EDMA_H_*/ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_ewm.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_ewm.c new file mode 100644 index 00000000000..1a71a07e582 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_ewm.c @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_ewm.h" + +/******************************************************************************* + * Code + ******************************************************************************/ + +void EWM_Init(EWM_Type *base, const ewm_config_t *config) +{ + assert(config); + + uint32_t value = 0U; + + CLOCK_EnableClock(kCLOCK_Ewm0); + value = EWM_CTRL_EWMEN(config->enableEwm) | EWM_CTRL_ASSIN(config->setInputAssertLogic) | + EWM_CTRL_INEN(config->enableEwmInput) | EWM_CTRL_INTEN(config->enableInterrupt); +#if defined(FSL_FEATURE_EWM_HAS_PRESCALER) && FSL_FEATURE_EWM_HAS_PRESCALER + base->CLKPRESCALER = config->prescaler; +#endif /* FSL_FEATURE_EWM_HAS_PRESCALER */ + +#if defined(FSL_FEATURE_EWM_HAS_CLOCK_SELECT) && FSL_FEATURE_EWM_HAS_CLOCK_SELECT + base->CLKCTRL = config->clockSource; +#endif /* FSL_FEATURE_EWM_HAS_CLOCK_SELECT*/ + + base->CMPL = config->compareLowValue; + base->CMPH = config->compareHighValue; + base->CTRL = value; +} + +void EWM_Deinit(EWM_Type *base) +{ + EWM_DisableInterrupts(base, kEWM_InterruptEnable); + CLOCK_DisableClock(kCLOCK_Ewm0); +} + +void EWM_GetDefaultConfig(ewm_config_t *config) +{ + assert(config); + + config->enableEwm = true; + config->enableEwmInput = false; + config->setInputAssertLogic = false; + config->enableInterrupt = false; +#if defined(FSL_FEATURE_EWM_HAS_CLOCK_SELECT) && FSL_FEATURE_EWM_HAS_CLOCK_SELECT + config->clockSource = kEWM_LpoClockSource0; +#endif /* FSL_FEATURE_EWM_HAS_CLOCK_SELECT*/ +#if defined(FSL_FEATURE_EWM_HAS_PRESCALER) && FSL_FEATURE_EWM_HAS_PRESCALER + config->prescaler = 0U; +#endif /* FSL_FEATURE_EWM_HAS_PRESCALER */ + config->compareLowValue = 0U; + config->compareHighValue = 0xFEU; +} + +void EWM_Refresh(EWM_Type *base) +{ + uint32_t primaskValue = 0U; + + /* Disable the global interrupt to protect refresh sequence */ + primaskValue = DisableGlobalIRQ(); + base->SERV = (uint8_t)0xB4U; + base->SERV = (uint8_t)0x2CU; + EnableGlobalIRQ(primaskValue); +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_ewm.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_ewm.h new file mode 100644 index 00000000000..180575e93f0 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_ewm.h @@ -0,0 +1,241 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FSL_EWM_H_ +#define _FSL_EWM_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup ewm + * @{ + */ + + +/******************************************************************************* + * Definitions + *******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief EWM driver version 2.0.1. */ +#define FSL_EWM_DRIVER_VERSION (MAKE_VERSION(2, 0, 1)) +/*@}*/ + +/*! @brief Describes EWM clock source. */ +#if defined(FSL_FEATURE_EWM_HAS_CLOCK_SELECT) && FSL_FEATURE_EWM_HAS_CLOCK_SELECT +typedef enum _ewm_lpo_clock_source +{ + kEWM_LpoClockSource0 = 0U, /*!< EWM clock sourced from lpo_clk[0]*/ + kEWM_LpoClockSource1 = 1U, /*!< EWM clock sourced from lpo_clk[1]*/ + kEWM_LpoClockSource2 = 2U, /*!< EWM clock sourced from lpo_clk[2]*/ + kEWM_LpoClockSource3 = 3U, /*!< EWM clock sourced from lpo_clk[3]*/ +} ewm_lpo_clock_source_t; +#endif /* FSL_FEATURE_EWM_HAS_CLOCK_SELECT */ + +/*! +* @brief Data structure for EWM configuration. +* +* This structure is used to configure the EWM. +*/ +typedef struct _ewm_config +{ + bool enableEwm; /*!< Enable EWM module */ + bool enableEwmInput; /*!< Enable EWM_in input */ + bool setInputAssertLogic; /*!< EWM_in signal assertion state */ + bool enableInterrupt; /*!< Enable EWM interrupt */ +#if defined(FSL_FEATURE_EWM_HAS_CLOCK_SELECT) && FSL_FEATURE_EWM_HAS_CLOCK_SELECT + ewm_lpo_clock_source_t clockSource; /*!< Clock source select */ +#endif /* FSL_FEATURE_EWM_HAS_CLOCK_SELECT */ +#if defined(FSL_FEATURE_EWM_HAS_PRESCALER) && FSL_FEATURE_EWM_HAS_PRESCALER + uint8_t prescaler; /*!< Clock prescaler value */ +#endif /* FSL_FEATURE_EWM_HAS_PRESCALER */ + uint8_t compareLowValue; /*!< Compare low-register value */ + uint8_t compareHighValue; /*!< Compare high-register value */ +} ewm_config_t; + +/*! + * @brief EWM interrupt configuration structure, default settings all disabled. + * + * This structure contains the settings for all of the EWM interrupt configurations. + */ +enum _ewm_interrupt_enable_t +{ + kEWM_InterruptEnable = EWM_CTRL_INTEN_MASK, /*!< Enable EWM to generate an interrupt*/ +}; + +/*! + * @brief EWM status flags. + * + * This structure contains the constants for the EWM status flags for use in the EWM functions. + */ +enum _ewm_status_flags_t +{ + kEWM_RunningFlag = EWM_CTRL_EWMEN_MASK, /*!< Running flag, set when EWM is enabled*/ +}; + +/******************************************************************************* + * API + *******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus */ + +/*! + * @name EWM Initialization and De-initialization + * @{ + */ + +/*! + * @brief Initializes the EWM peripheral. + * + * This function is used to initialize the EWM. After calling, the EWM + * runs immediately according to the configuration. + * Note that except for interrupt enable control bit, other control bits and registers are write once after a + * CPU reset. Modifying them more than once generates a bus transfer error. + * + * Example: + * @code + * ewm_config_t config; + * EWM_GetDefaultConfig(&config); + * config.compareHighValue = 0xAAU; + * EWM_Init(ewm_base,&config); + * @endcode + * + * @param base EWM peripheral base address + * @param config The configuration of EWM +*/ +void EWM_Init(EWM_Type *base, const ewm_config_t *config); + +/*! + * @brief Deinitializes the EWM peripheral. + * + * This function is used to shut down the EWM. + * + * @param base EWM peripheral base address +*/ +void EWM_Deinit(EWM_Type *base); + +/*! + * @brief Initializes the EWM configuration structure. + * + * This function initializes the EWM configuration structure to default values. The default + * values are: + * @code + * ewmConfig->enableEwm = true; + * ewmConfig->enableEwmInput = false; + * ewmConfig->setInputAssertLogic = false; + * ewmConfig->enableInterrupt = false; + * ewmConfig->ewm_lpo_clock_source_t = kEWM_LpoClockSource0; + * ewmConfig->prescaler = 0; + * ewmConfig->compareLowValue = 0; + * ewmConfig->compareHighValue = 0xFEU; + * @endcode + * + * @param config Pointer to EWM configuration structure. + * @see ewm_config_t + */ +void EWM_GetDefaultConfig(ewm_config_t *config); + +/* @} */ + +/*! + * @name EWM functional Operation + * @{ + */ + +/*! + * @brief Enables the EWM interrupt. + * + * This function enables the EWM interrupt. + * + * @param base EWM peripheral base address + * @param mask The interrupts to enable + * The parameter can be combination of the following source if defined: + * @arg kEWM_InterruptEnable + */ +static inline void EWM_EnableInterrupts(EWM_Type *base, uint32_t mask) +{ + base->CTRL |= mask; +} + +/*! + * @brief Disables the EWM interrupt. + * + * This function enables the EWM interrupt. + * + * @param base EWM peripheral base address + * @param mask The interrupts to disable + * The parameter can be combination of the following source if defined: + * @arg kEWM_InterruptEnable + */ +static inline void EWM_DisableInterrupts(EWM_Type *base, uint32_t mask) +{ + base->CTRL &= ~mask; +} + +/*! + * @brief Gets EWM all status flags. + * + * This function gets all status flags. + * + * Example for getting Running Flag: + * @code + * uint32_t status; + * status = EWM_GetStatusFlags(ewm_base) & kEWM_RunningFlag; + * @endcode + * @param base EWM peripheral base address + * @return State of the status flag: asserted (true) or not-asserted (false).@see _ewm_status_flags_t + * - true: a related status flag has been set. + * - false: a related status flag is not set. + */ +static inline uint32_t EWM_GetStatusFlags(EWM_Type *base) +{ + return (base->CTRL & EWM_CTRL_EWMEN_MASK); +} + +/*! + * @brief Services the EWM. + * + * This function reset EWM counter to zero. + * + * @param base EWM peripheral base address +*/ +void EWM_Refresh(EWM_Type *base); + +/*@}*/ + +#if defined(__cplusplus) +} +#endif /* __cplusplus */ + +/*! @}*/ + +#endif /* _FSL_EWM_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flash.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flash.c new file mode 100644 index 00000000000..9251c49d713 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flash.c @@ -0,0 +1,2630 @@ +/* + * Copyright (c) 2015-2016, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_flash.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! + * @name Misc utility defines + * @{ + */ +#ifndef ALIGN_DOWN +#define ALIGN_DOWN(x, a) ((x) & (uint32_t)(-((int32_t)(a)))) +#endif +#ifndef ALIGN_UP +#define ALIGN_UP(x, a) (-((int32_t)((uint32_t)(-((int32_t)(x))) & (uint32_t)(-((int32_t)(a)))))) +#endif + +#define BYTES_JOIN_TO_WORD_1_3(x, y) ((((uint32_t)(x)&0xFFU) << 24) | ((uint32_t)(y)&0xFFFFFFU)) +#define BYTES_JOIN_TO_WORD_2_2(x, y) ((((uint32_t)(x)&0xFFFFU) << 16) | ((uint32_t)(y)&0xFFFFU)) +#define BYTES_JOIN_TO_WORD_3_1(x, y) ((((uint32_t)(x)&0xFFFFFFU) << 8) | ((uint32_t)(y)&0xFFU)) +#define BYTES_JOIN_TO_WORD_1_1_2(x, y, z) \ + ((((uint32_t)(x)&0xFFU) << 24) | (((uint32_t)(y)&0xFFU) << 16) | ((uint32_t)(z)&0xFFFFU)) +#define BYTES_JOIN_TO_WORD_1_2_1(x, y, z) \ + ((((uint32_t)(x)&0xFFU) << 24) | (((uint32_t)(y)&0xFFFFU) << 8) | ((uint32_t)(z)&0xFFU)) +#define BYTES_JOIN_TO_WORD_2_1_1(x, y, z) \ + ((((uint32_t)(x)&0xFFFFU) << 16) | (((uint32_t)(y)&0xFFU) << 8) | ((uint32_t)(z)&0xFFU)) +#define BYTES_JOIN_TO_WORD_1_1_1_1(x, y, z, w) \ + ((((uint32_t)(x)&0xFFU) << 24) | (((uint32_t)(y)&0xFFU) << 16) | (((uint32_t)(z)&0xFFU) << 8) | \ + ((uint32_t)(w)&0xFFU)) +/*@}*/ + +/*! @brief Data flash IFR map Field*/ +#if defined(FSL_FEATURE_FLASH_IS_FTFE) && FSL_FEATURE_FLASH_IS_FTFE +#define DFLASH_IFR_READRESOURCE_START_ADDRESS 0x8003F8U +#else /* FSL_FEATURE_FLASH_IS_FTFL == 1 or FSL_FEATURE_FLASH_IS_FTFA = =1 */ +#define DFLASH_IFR_READRESOURCE_START_ADDRESS 0x8000F8U +#endif + +/*! + * @name Reserved FlexNVM size (For a variety of purposes) defines + * @{ + */ +#define FLEX_NVM_DFLASH_SIZE_FOR_DEPART_RESERVED 0xFFFFFFFFU +#define FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_RESERVED 0xFFFFU +/*@}*/ + +/*! + * @name Flash Program Once Field defines + * @{ + */ +#if defined(FSL_FEATURE_FLASH_IS_FTFA) && FSL_FEATURE_FLASH_IS_FTFA +/* FTFA parts(eg. K80, KL80, L5K) support both 4-bytes and 8-bytes unit size */ +#define FLASH_PROGRAM_ONCE_MIN_ID_8BYTES \ + 0x10U /* Minimum Index indcating one of Progam Once Fields which is accessed in 8-byte records */ +#define FLASH_PROGRAM_ONCE_MAX_ID_8BYTES \ + 0x13U /* Maximum Index indcating one of Progam Once Fields which is accessed in 8-byte records */ +#define FLASH_PROGRAM_ONCE_IS_4BYTES_UNIT_SUPPORT 1 +#define FLASH_PROGRAM_ONCE_IS_8BYTES_UNIT_SUPPORT 1 +#elif defined(FSL_FEATURE_FLASH_IS_FTFE) && FSL_FEATURE_FLASH_IS_FTFE +/* FTFE parts(eg. K65, KE18) only support 8-bytes unit size */ +#define FLASH_PROGRAM_ONCE_IS_4BYTES_UNIT_SUPPORT 0 +#define FLASH_PROGRAM_ONCE_IS_8BYTES_UNIT_SUPPORT 1 +#elif defined(FSL_FEATURE_FLASH_IS_FTFL) && FSL_FEATURE_FLASH_IS_FTFL +/* FTFL parts(eg. K20) only support 4-bytes unit size */ +#define FLASH_PROGRAM_ONCE_IS_4BYTES_UNIT_SUPPORT 1 +#define FLASH_PROGRAM_ONCE_IS_8BYTES_UNIT_SUPPORT 0 +#endif +/*@}*/ + +/*! + * @name Flash security status defines + * @{ + */ +#define FLASH_SECURITY_STATE_KEYEN 0x80U +#define FLASH_SECURITY_STATE_UNSECURED 0x02U +#define FLASH_NOT_SECURE 0x01U +#define FLASH_SECURE_BACKDOOR_ENABLED 0x02U +#define FLASH_SECURE_BACKDOOR_DISABLED 0x04U +/*@}*/ + +/*! + * @name Flash controller command numbers + * @{ + */ +#define FTFx_VERIFY_BLOCK 0x00U /*!< RD1BLK*/ +#define FTFx_VERIFY_SECTION 0x01U /*!< RD1SEC*/ +#define FTFx_PROGRAM_CHECK 0x02U /*!< PGMCHK*/ +#define FTFx_READ_RESOURCE 0x03U /*!< RDRSRC*/ +#define FTFx_PROGRAM_LONGWORD 0x06U /*!< PGM4*/ +#define FTFx_PROGRAM_PHRASE 0x07U /*!< PGM8*/ +#define FTFx_ERASE_BLOCK 0x08U /*!< ERSBLK*/ +#define FTFx_ERASE_SECTOR 0x09U /*!< ERSSCR*/ +#define FTFx_PROGRAM_SECTION 0x0BU /*!< PGMSEC*/ +#define FTFx_VERIFY_ALL_BLOCK 0x40U /*!< RD1ALL*/ +#define FTFx_READ_ONCE 0x41U /*!< RDONCE or RDINDEX*/ +#define FTFx_PROGRAM_ONCE 0x43U /*!< PGMONCE or PGMINDEX*/ +#define FTFx_ERASE_ALL_BLOCK 0x44U /*!< ERSALL*/ +#define FTFx_SECURITY_BY_PASS 0x45U /*!< VFYKEY*/ +#define FTFx_SWAP_CONTROL 0x46U /*!< SWAP*/ +#define FTFx_ERASE_ALL_BLOCK_UNSECURE 0x49U /*!< ERSALLU*/ +#define FTFx_VERIFY_ALL_EXECUTE_ONLY_SEGMENT 0x4AU /*!< RD1XA*/ +#define FTFx_ERASE_ALL_EXECUTE_ONLY_SEGMENT 0x4BU /*!< ERSXA*/ +#define FTFx_PROGRAM_PARTITION 0x80U /*!< PGMPART)*/ +#define FTFx_SET_FLEXRAM_FUNCTION 0x81U /*!< SETRAM*/ + /*@}*/ + +/*! + * @name Common flash register info defines + * @{ + */ +#if defined(FTFA) +#define FTFx FTFA +#define FTFx_BASE FTFA_BASE +#define FTFx_FSTAT_CCIF_MASK FTFA_FSTAT_CCIF_MASK +#define FTFx_FSTAT_RDCOLERR_MASK FTFA_FSTAT_RDCOLERR_MASK +#define FTFx_FSTAT_ACCERR_MASK FTFA_FSTAT_ACCERR_MASK +#define FTFx_FSTAT_FPVIOL_MASK FTFA_FSTAT_FPVIOL_MASK +#define FTFx_FSTAT_MGSTAT0_MASK FTFA_FSTAT_MGSTAT0_MASK +#define FTFx_FSEC_SEC_MASK FTFA_FSEC_SEC_MASK +#define FTFx_FSEC_KEYEN_MASK FTFA_FSEC_KEYEN_MASK +#if defined(FSL_FEATURE_FLASH_HAS_FLEX_RAM) && FSL_FEATURE_FLASH_HAS_FLEX_RAM +#define FTFx_FCNFG_RAMRDY_MASK FTFA_FCNFG_RAMRDY_MASK +#endif /* FSL_FEATURE_FLASH_HAS_FLEX_RAM */ +#if defined(FSL_FEATURE_FLASH_HAS_FLEX_NVM) && FSL_FEATURE_FLASH_HAS_FLEX_NVM +#define FTFx_FCNFG_EEERDY_MASK FTFA_FCNFG_EEERDY_MASK +#endif /* FSL_FEATURE_FLASH_HAS_FLEX_NVM */ +#elif defined(FTFE) +#define FTFx FTFE +#define FTFx_BASE FTFE_BASE +#define FTFx_FSTAT_CCIF_MASK FTFE_FSTAT_CCIF_MASK +#define FTFx_FSTAT_RDCOLERR_MASK FTFE_FSTAT_RDCOLERR_MASK +#define FTFx_FSTAT_ACCERR_MASK FTFE_FSTAT_ACCERR_MASK +#define FTFx_FSTAT_FPVIOL_MASK FTFE_FSTAT_FPVIOL_MASK +#define FTFx_FSTAT_MGSTAT0_MASK FTFE_FSTAT_MGSTAT0_MASK +#define FTFx_FSEC_SEC_MASK FTFE_FSEC_SEC_MASK +#define FTFx_FSEC_KEYEN_MASK FTFE_FSEC_KEYEN_MASK +#if defined(FSL_FEATURE_FLASH_HAS_FLEX_RAM) && FSL_FEATURE_FLASH_HAS_FLEX_RAM +#define FTFx_FCNFG_RAMRDY_MASK FTFE_FCNFG_RAMRDY_MASK +#endif /* FSL_FEATURE_FLASH_HAS_FLEX_RAM */ +#if defined(FSL_FEATURE_FLASH_HAS_FLEX_NVM) && FSL_FEATURE_FLASH_HAS_FLEX_NVM +#define FTFx_FCNFG_EEERDY_MASK FTFE_FCNFG_EEERDY_MASK +#endif /* FSL_FEATURE_FLASH_HAS_FLEX_NVM */ +#elif defined(FTFL) +#define FTFx FTFL +#define FTFx_BASE FTFL_BASE +#define FTFx_FSTAT_CCIF_MASK FTFL_FSTAT_CCIF_MASK +#define FTFx_FSTAT_RDCOLERR_MASK FTFL_FSTAT_RDCOLERR_MASK +#define FTFx_FSTAT_ACCERR_MASK FTFL_FSTAT_ACCERR_MASK +#define FTFx_FSTAT_FPVIOL_MASK FTFL_FSTAT_FPVIOL_MASK +#define FTFx_FSTAT_MGSTAT0_MASK FTFL_FSTAT_MGSTAT0_MASK +#define FTFx_FSEC_SEC_MASK FTFL_FSEC_SEC_MASK +#define FTFx_FSEC_KEYEN_MASK FTFL_FSEC_KEYEN_MASK +#if defined(FSL_FEATURE_FLASH_HAS_FLEX_RAM) && FSL_FEATURE_FLASH_HAS_FLEX_RAM +#define FTFx_FCNFG_RAMRDY_MASK FTFL_FCNFG_RAMRDY_MASK +#endif /* FSL_FEATURE_FLASH_HAS_FLEX_RAM */ +#if defined(FSL_FEATURE_FLASH_HAS_FLEX_NVM) && FSL_FEATURE_FLASH_HAS_FLEX_NVM +#define FTFx_FCNFG_EEERDY_MASK FTFL_FCNFG_EEERDY_MASK +#endif /* FSL_FEATURE_FLASH_HAS_FLEX_NVM */ +#else +#error "Unknown flash controller" +#endif +/*@}*/ + +/*! + * @brief Enumeration for access segment property. + */ +enum _flash_access_segment_property +{ + kFLASH_AccessSegmentBase = 256UL, +}; + +/*! + * @brief Enumeration for flash config area. + */ +enum _flash_config_area_range +{ + kFLASH_ConfigAreaStart = 0x400U, + kFLASH_ConfigAreaEnd = 0x40FU +}; + +/*! @brief Total flash region count*/ +#define FSL_FEATURE_FTFx_REGION_COUNT (32U) + +/*! + * @name Flash register access type defines + * @{ + */ +#if FLASH_DRIVER_IS_FLASH_RESIDENT +#define FTFx_REG_ACCESS_TYPE volatile uint8_t * +#define FTFx_REG32_ACCESS_TYPE volatile uint32_t * +#endif /* FLASH_DRIVER_IS_FLASH_RESIDENT */ + /*@}*/ + +/******************************************************************************* + * Prototypes + ******************************************************************************/ + +#if FLASH_DRIVER_IS_FLASH_RESIDENT +/*! @brief Copy flash_run_command() to RAM*/ +static void copy_flash_run_command(uint32_t *flashRunCommand); +/*! @brief Copy flash_cache_clear_command() to RAM*/ +static void copy_flash_cache_clear_command(uint32_t *flashCacheClearCommand); +/*! @brief Check whether flash execute-in-ram functions are ready*/ +static status_t flash_check_execute_in_ram_function_info(flash_config_t *config); +#endif /* FLASH_DRIVER_IS_FLASH_RESIDENT */ + +/*! @brief Internal function Flash command sequence. Called by driver APIs only*/ +static status_t flash_command_sequence(flash_config_t *config); + +/*! @brief Perform the cache clear to the flash*/ +void flash_cache_clear(flash_config_t *config); + +/*! @brief Validates the range and alignment of the given address range.*/ +static status_t flash_check_range(flash_config_t *config, + uint32_t startAddress, + uint32_t lengthInBytes, + uint32_t alignmentBaseline); +/*! @brief Gets the right address, sector and block size of current flash type which is indicated by address.*/ +static status_t flash_get_matched_operation_info(flash_config_t *config, + uint32_t address, + flash_operation_config_t *info); +/*! @brief Validates the given user key for flash erase APIs.*/ +static status_t flash_check_user_key(uint32_t key); + +#if FLASH_SSD_IS_FLEXNVM_ENABLED +/*! @brief Updates FlexNVM memory partition status according to data flash 0 IFR.*/ +static status_t flash_update_flexnvm_memory_partition_status(flash_config_t *config); +#endif /* FLASH_SSD_IS_FLEXNVM_ENABLED */ + +#if defined(FSL_FEATURE_FLASH_HAS_READ_RESOURCE_CMD) && FSL_FEATURE_FLASH_HAS_READ_RESOURCE_CMD +/*! @brief Validates the range of the given resource address.*/ +static status_t flash_check_resource_range(uint32_t start, + uint32_t lengthInBytes, + uint32_t alignmentBaseline, + flash_read_resource_option_t option); +#endif /* FSL_FEATURE_FLASH_HAS_READ_RESOURCE_CMD */ + +#if defined(FSL_FEATURE_FLASH_HAS_SWAP_CONTROL_CMD) && FSL_FEATURE_FLASH_HAS_SWAP_CONTROL_CMD +/*! @brief Validates the gived swap control option.*/ +static status_t flash_check_swap_control_option(flash_swap_control_option_t option); +#endif /* FSL_FEATURE_FLASH_HAS_SWAP_CONTROL_CMD */ + +#if defined(FSL_FEATURE_FLASH_HAS_PFLASH_BLOCK_SWAP) && FSL_FEATURE_FLASH_HAS_PFLASH_BLOCK_SWAP +/*! @brief Validates the gived address to see if it is equal to swap indicator address in pflash swap IFR.*/ +static status_t flash_validate_swap_indicator_address(flash_config_t *config, uint32_t address); +#endif /* FSL_FEATURE_FLASH_HAS_PFLASH_BLOCK_SWAP */ + +#if defined(FSL_FEATURE_FLASH_HAS_SET_FLEXRAM_FUNCTION_CMD) && FSL_FEATURE_FLASH_HAS_SET_FLEXRAM_FUNCTION_CMD +/*! @brief Validates the gived flexram function option.*/ +static inline status_t flasn_check_flexram_function_option_range(flash_flexram_function_option_t option); +#endif /* FSL_FEATURE_FLASH_HAS_SET_FLEXRAM_FUNCTION_CMD */ + +/******************************************************************************* + * Variables + ******************************************************************************/ + +/*! @brief Access to FTFx->FCCOB */ +#if defined(FSL_FEATURE_FLASH_IS_FTFA) && FSL_FEATURE_FLASH_IS_FTFA +volatile uint32_t *const kFCCOBx = (volatile uint32_t *)&FTFA->FCCOB3; +#elif defined(FSL_FEATURE_FLASH_IS_FTFE) && FSL_FEATURE_FLASH_IS_FTFE +volatile uint32_t *const kFCCOBx = (volatile uint32_t *)&FTFE->FCCOB3; +#elif defined(FSL_FEATURE_FLASH_IS_FTFL) && FSL_FEATURE_FLASH_IS_FTFL +volatile uint32_t *const kFCCOBx = (volatile uint32_t *)&FTFL->FCCOB3; +#else +#error "Unknown flash controller" +#endif + +/*! @brief Access to FTFx->FPROT */ +#if defined(FSL_FEATURE_FLASH_IS_FTFA) && FSL_FEATURE_FLASH_IS_FTFA +volatile uint32_t *const kFPROT = (volatile uint32_t *)&FTFA->FPROT3; +#elif defined(FSL_FEATURE_FLASH_IS_FTFE) && FSL_FEATURE_FLASH_IS_FTFE +volatile uint32_t *const kFPROT = (volatile uint32_t *)&FTFE->FPROT3; +#elif defined(FSL_FEATURE_FLASH_IS_FTFL) && FSL_FEATURE_FLASH_IS_FTFL +volatile uint32_t *const kFPROT = (volatile uint32_t *)&FTFL->FPROT3; +#else +#error "Unknown flash controller" +#endif + +#if FLASH_DRIVER_IS_FLASH_RESIDENT +/*! @brief A function pointer used to point to relocated flash_run_command() */ +static void (*callFlashRunCommand)(FTFx_REG_ACCESS_TYPE ftfx_fstat); +/*! @brief A function pointer used to point to relocated flash_cache_clear_command() */ +static void (*callFlashCacheClearCommand)(FTFx_REG32_ACCESS_TYPE ftfx_reg); + +/*! + * @brief Position independent code of flash_run_command() + * + * Note1: The prototype of C function is shown as below: + * @code + * void flash_run_command(FTFx_REG_ACCESS_TYPE ftfx_fstat) + * { + * // clear CCIF bit + * *ftfx_fstat = FTFx_FSTAT_CCIF_MASK; + * + * // Check CCIF bit of the flash status register, wait till it is set. + * // IP team indicates that this loop will always complete. + * while (!((*ftfx_fstat) & FTFx_FSTAT_CCIF_MASK)) + * { + * } + * } + * @endcode + * Note2: The binary code is generated by IAR 7.50.1 + */ +const static uint16_t s_flashRunCommandFunctionCode[] = { + 0x2180, /* MOVS R1, #128 ; 0x80 */ + 0x7001, /* STRB R1, [R0] */ + /* @4: */ + 0x7802, /* LDRB R2, [R0] */ + 0x420a, /* TST R2, R1 */ + 0xd0fc, /* BEQ.N @4 */ + 0x4770 /* BX LR */ +}; + +/*! + * @brief Position independent code of flash_cache_clear_command() + * + * Note1: The prototype of C function is shown as below: + * @code + * void flash_cache_clear_command(FTFx_REG32_ACCESS_TYPE ftfx_reg) + * { + * #if defined(FSL_FEATURE_FLASH_HAS_MCM_FLASH_CACHE_CONTROLS) && FSL_FEATURE_FLASH_HAS_MCM_FLASH_CACHE_CONTROLS + * *ftfx_reg |= MCM_PLACR_CFCC_MASK; + * #elif defined(FSL_FEATURE_FLASH_HAS_FMC_FLASH_CACHE_CONTROLS) && FSL_FEATURE_FLASH_HAS_FMC_FLASH_CACHE_CONTROLS + * #if defined(FMC_PFB01CR_CINV_WAY_MASK) + * *ftfx_reg = (*ftfx_reg & ~FMC_PFB01CR_CINV_WAY_MASK) | FMC_PFB01CR_CINV_WAY(~0); + * #else + * *ftfx_reg = (*ftfx_reg & ~FMC_PFB0CR_CINV_WAY_MASK) | FMC_PFB0CR_CINV_WAY(~0); + * #endif + * #elif defined(FSL_FEATURE_FLASH_HAS_MSCM_FLASH_CACHE_CONTROLS) && FSL_FEATURE_FLASH_HAS_MSCM_FLASH_CACHE_CONTROLS + * *ftfx_reg |= MSCM_OCMDR_OCMC1(2); + * *ftfx_reg |= MSCM_OCMDR_OCMC1(1); + * #else + * #if defined(FMC_PFB0CR_S_INV_MASK) + * *ftfx_reg |= FMC_PFB0CR_S_INV_MASK; + * #elif defined(FMC_PFB01CR_S_INV_MASK) + * *ftfx_reg |= FMC_PFB01CR_S_INV_MASK; + * #endif + * // #error "Unknown flash cache controller" + * #endif // FSL_FEATURE_FTFx_MCM_FLASH_CACHE_CONTROLS + * // Memory barriers for good measure. + * // All Cache, Branch predictor and TLB maintenance operations before this instruction complete + * __ISB(); + * __DSB(); + * } + * @endcode + * Note2: The binary code is generated by IAR 7.50.1 + */ +#if defined(FSL_FEATURE_FLASH_HAS_MCM_FLASH_CACHE_CONTROLS) && FSL_FEATURE_FLASH_HAS_MCM_FLASH_CACHE_CONTROLS +const static uint16_t s_flashCacheClearCommandFunctionCode[] = { + 0x6801, /* LDR R1, [R0] */ + 0x2280, /* MOVS R2, #128 ; 0x80 */ + 0x00d2, /* LSLS R2, R2, #3 */ + 0x430a, /* ORRS R2, R2, R1 */ + 0x6002, /* STR R2, [R0] */ + 0xf3bf, 0x8f6f, /* ISB */ + 0xf3bf, 0x8f4f, /* DSB */ + 0x4770 /* BX LR */ +}; +#elif defined(FSL_FEATURE_FLASH_HAS_FMC_FLASH_CACHE_CONTROLS) && FSL_FEATURE_FLASH_HAS_FMC_FLASH_CACHE_CONTROLS +const static uint16_t s_flashCacheClearCommandFunctionCode[] = { + 0x6801, /* LDR R1, [R0] */ + 0x22f0, /* MOVS R2, #240 ; 0xf0 */ + 0x0412, /* LSLS R2, R2, #16 */ + 0x430a, /* ORRS R2, R2, R1 */ + 0x6002, /* STR R2, [R0] */ + 0xf3bf, 0x8f6f, /* ISB */ + 0xf3bf, 0x8f4f, /* DSB */ + 0x4770 /* BX LR */ +}; +#elif defined(FSL_FEATURE_FLASH_HAS_MSCM_FLASH_CACHE_CONTROLS) && FSL_FEATURE_FLASH_HAS_MSCM_FLASH_CACHE_CONTROLS +const static uint16_t s_flashCacheClearCommandFunctionCode[] = { + 0x6801, /* LDR R1, [R0] */ + 0x2220, /* MOVS R2, #32 ; 0x20 */ + 0x430a, /* ORRS R2, R2, R1 */ + 0x6002, /* STR R2, [R0] */ + 0x6801, /* LDR R1, [R0] */ + 0x2210, /* MOVS R2, #16 ; 0x10 */ + 0x430a, /* ORRS R2, R2, R1 */ + 0x6002, /* STR R2, [R0] */ + 0xf3bf, 0x8f6f, /* ISB */ + 0xf3bf, 0x8f4f, /* DSB */ + 0x4770 /* BX LR */ +}; +#else +#if defined(FMC_PFB0CR_S_INV_MASK) || defined(FMC_PFB01CR_S_INV_MASK) +const static uint16_t s_flashCacheClearCommandFunctionCode[] = { + 0x6801, /* LDR R1, [R0] */ + 0x2280, /* MOVS R2, #128 ; 0x80 */ + 0x0312, /* LSLS R2, R2, #12 */ + 0x430a, /* ORRS R2, R2, R1 */ + 0x6002, /* STR R2, [R0] */ + 0xf3bf, 0x8f6f, /* ISB */ + 0xf3bf, 0x8f4f, /* DSB */ + 0x4770 /* BX LR */ +}; +#else +const static uint16_t s_flashCacheClearCommandFunctionCode[] = { + 0xf3bf, 0x8f6f, /* ISB */ + 0xf3bf, 0x8f4f, /* DSB */ + 0x4770 /* BX LR */ +}; +#endif +#endif +#endif /* FLASH_DRIVER_IS_FLASH_RESIDENT */ + +#if (FLASH_DRIVER_IS_FLASH_RESIDENT && !FLASH_DRIVER_IS_EXPORTED) +/*! @brief A static buffer used to hold flash_run_command() */ +static uint32_t s_flashRunCommand[kFLASH_ExecuteInRamFunctionMaxSizeInWords]; +/*! @brief A static buffer used to hold flash_cache_clear_command() */ +static uint32_t s_flashCacheClearCommand[kFLASH_ExecuteInRamFunctionMaxSizeInWords]; +/*! @brief Flash execute-in-ram function information */ +static flash_execute_in_ram_function_config_t s_flashExecuteInRamFunctionInfo; +#endif + +/*! + * @brief Table of pflash sizes. + * + * The index into this table is the value of the SIM_FCFG1.PFSIZE bitfield. + * + * The values in this table have been right shifted 10 bits so that they will all fit within + * an 16-bit integer. To get the actual flash density, you must left shift the looked up value + * by 10 bits. + * + * Elements of this table have a value of 0 in cases where the PFSIZE bitfield value is + * reserved. + * + * Code to use the table: + * @code + * uint8_t pfsize = (SIM->FCFG1 & SIM_FCFG1_PFSIZE_MASK) >> SIM_FCFG1_PFSIZE_SHIFT; + * flashDensity = ((uint32_t)kPFlashDensities[pfsize]) << 10; + * @endcode + */ +const uint16_t kPFlashDensities[] = { + 8, /* 0x0 - 8192, 8KB */ + 16, /* 0x1 - 16384, 16KB */ + 24, /* 0x2 - 24576, 24KB */ + 32, /* 0x3 - 32768, 32KB */ + 48, /* 0x4 - 49152, 48KB */ + 64, /* 0x5 - 65536, 64KB */ + 96, /* 0x6 - 98304, 96KB */ + 128, /* 0x7 - 131072, 128KB */ + 192, /* 0x8 - 196608, 192KB */ + 256, /* 0x9 - 262144, 256KB */ + 384, /* 0xa - 393216, 384KB */ + 512, /* 0xb - 524288, 512KB */ + 768, /* 0xc - 786432, 768KB */ + 1024, /* 0xd - 1048576, 1MB */ + 1536, /* 0xe - 1572864, 1.5MB */ + /* 2048, 0xf - 2097152, 2MB */ +}; + +/******************************************************************************* + * Code + ******************************************************************************/ + +status_t FLASH_Init(flash_config_t *config) +{ + uint32_t flashDensity; + + if (config == NULL) + { + return kStatus_FLASH_InvalidArgument; + } + + /* calculate the flash density from SIM_FCFG1.PFSIZE */ + uint8_t pfsize = (SIM->FCFG1 & SIM_FCFG1_PFSIZE_MASK) >> SIM_FCFG1_PFSIZE_SHIFT; + /* PFSIZE=0xf means that on customer parts the IFR was not correctly programmed. + * We just use the pre-defined flash size in feature file here to support pre-production parts */ + if (pfsize == 0xf) + { + flashDensity = FSL_FEATURE_FLASH_PFLASH_BLOCK_COUNT * FSL_FEATURE_FLASH_PFLASH_BLOCK_SIZE; + } + else + { + flashDensity = ((uint32_t)kPFlashDensities[pfsize]) << 10; + } + + /* fill out a few of the structure members */ + config->PFlashBlockBase = FSL_FEATURE_FLASH_PFLASH_START_ADDRESS; + config->PFlashTotalSize = flashDensity; + config->PFlashBlockCount = FSL_FEATURE_FLASH_PFLASH_BLOCK_COUNT; + config->PFlashSectorSize = FSL_FEATURE_FLASH_PFLASH_BLOCK_SECTOR_SIZE; + +#if defined(FSL_FEATURE_FLASH_HAS_ACCESS_CONTROL) && FSL_FEATURE_FLASH_HAS_ACCESS_CONTROL + config->PFlashAccessSegmentSize = kFLASH_AccessSegmentBase << FTFx->FACSS; + config->PFlashAccessSegmentCount = FTFx->FACSN; +#else + config->PFlashAccessSegmentSize = 0; + config->PFlashAccessSegmentCount = 0; +#endif /* FSL_FEATURE_FLASH_HAS_ACCESS_CONTROL */ + + config->PFlashCallback = NULL; + +/* copy required flash commands to RAM */ +#if (FLASH_DRIVER_IS_FLASH_RESIDENT && !FLASH_DRIVER_IS_EXPORTED) + if (kStatus_FLASH_Success != flash_check_execute_in_ram_function_info(config)) + { + s_flashExecuteInRamFunctionInfo.activeFunctionCount = 0; + s_flashExecuteInRamFunctionInfo.flashRunCommand = s_flashRunCommand; + s_flashExecuteInRamFunctionInfo.flashCacheClearCommand = s_flashCacheClearCommand; + config->flashExecuteInRamFunctionInfo = &s_flashExecuteInRamFunctionInfo.activeFunctionCount; + FLASH_PrepareExecuteInRamFunctions(config); + } +#endif + + config->FlexRAMBlockBase = FSL_FEATURE_FLASH_FLEX_RAM_START_ADDRESS; + config->FlexRAMTotalSize = FSL_FEATURE_FLASH_FLEX_RAM_SIZE; + +#if FLASH_SSD_IS_FLEXNVM_ENABLED + { + status_t returnCode; + config->DFlashBlockBase = FSL_FEATURE_FLASH_FLEX_NVM_START_ADDRESS; + returnCode = flash_update_flexnvm_memory_partition_status(config); + if (returnCode != kStatus_FLASH_Success) + { + return returnCode; + } + } +#endif + + return kStatus_FLASH_Success; +} + +status_t FLASH_SetCallback(flash_config_t *config, flash_callback_t callback) +{ + if (config == NULL) + { + return kStatus_FLASH_InvalidArgument; + } + + config->PFlashCallback = callback; + + return kStatus_FLASH_Success; +} + +#if FLASH_DRIVER_IS_FLASH_RESIDENT +status_t FLASH_PrepareExecuteInRamFunctions(flash_config_t *config) +{ + flash_execute_in_ram_function_config_t *flashExecuteInRamFunctionInfo; + + if (config == NULL) + { + return kStatus_FLASH_InvalidArgument; + } + + flashExecuteInRamFunctionInfo = (flash_execute_in_ram_function_config_t *)config->flashExecuteInRamFunctionInfo; + + copy_flash_run_command(flashExecuteInRamFunctionInfo->flashRunCommand); + copy_flash_cache_clear_command(flashExecuteInRamFunctionInfo->flashCacheClearCommand); + flashExecuteInRamFunctionInfo->activeFunctionCount = kFLASH_ExecuteInRamFunctionTotalNum; + + return kStatus_FLASH_Success; +} +#endif /* FLASH_DRIVER_IS_FLASH_RESIDENT */ + +status_t FLASH_EraseAll(flash_config_t *config, uint32_t key) +{ + status_t returnCode; + + if (config == NULL) + { + return kStatus_FLASH_InvalidArgument; + } + + /* preparing passing parameter to erase all flash blocks */ + kFCCOBx[0] = BYTES_JOIN_TO_WORD_1_3(FTFx_ERASE_ALL_BLOCK, 0xFFFFFFU); + + /* Validate the user key */ + returnCode = flash_check_user_key(key); + if (returnCode) + { + return returnCode; + } + + /* calling flash command sequence function to execute the command */ + returnCode = flash_command_sequence(config); + + flash_cache_clear(config); + +#if FLASH_SSD_IS_FLEXNVM_ENABLED + /* Data flash IFR will be erased by erase all command, so we need to + * update FlexNVM memory partition status synchronously */ + if (returnCode == kStatus_FLASH_Success) + { + returnCode = flash_update_flexnvm_memory_partition_status(config); + } +#endif + + return returnCode; +} + +status_t FLASH_Erase(flash_config_t *config, uint32_t start, uint32_t lengthInBytes, uint32_t key) +{ + uint32_t sectorSize; + flash_operation_config_t flashInfo; + uint32_t endAddress; /* storing end address */ + uint32_t numberOfSectors; /* number of sectors calculated by endAddress */ + status_t returnCode; + + flash_get_matched_operation_info(config, start, &flashInfo); + + /* Check the supplied address range. */ + returnCode = flash_check_range(config, start, lengthInBytes, flashInfo.sectorCmdAddressAligment); + if (returnCode) + { + return returnCode; + } + + start = flashInfo.convertedAddress; + sectorSize = flashInfo.activeSectorSize; + + /* calculating Flash end address */ + endAddress = start + lengthInBytes - 1; + + /* re-calculate the endAddress and align it to the start of the next sector + * which will be used in the comparison below */ + if (endAddress % sectorSize) + { + numberOfSectors = endAddress / sectorSize + 1; + endAddress = numberOfSectors * sectorSize - 1; + } + + /* the start address will increment to the next sector address + * until it reaches the endAdddress */ + while (start <= endAddress) + { + /* preparing passing parameter to erase a flash block */ + kFCCOBx[0] = BYTES_JOIN_TO_WORD_1_3(FTFx_ERASE_SECTOR, start); + + /* Validate the user key */ + returnCode = flash_check_user_key(key); + if (returnCode) + { + return returnCode; + } + + /* calling flash command sequence function to execute the command */ + returnCode = flash_command_sequence(config); + + /* calling flash callback function if it is available */ + if (config->PFlashCallback) + { + config->PFlashCallback(); + } + + /* checking the success of command execution */ + if (kStatus_FLASH_Success != returnCode) + { + break; + } + else + { + /* Increment to the next sector */ + start += sectorSize; + } + } + + flash_cache_clear(config); + + return (returnCode); +} + +#if defined(FSL_FEATURE_FLASH_HAS_ERASE_ALL_BLOCKS_UNSECURE_CMD) && FSL_FEATURE_FLASH_HAS_ERASE_ALL_BLOCKS_UNSECURE_CMD +status_t FLASH_EraseAllUnsecure(flash_config_t *config, uint32_t key) +{ + status_t returnCode; + + if (config == NULL) + { + return kStatus_FLASH_InvalidArgument; + } + + /* Prepare passing parameter to erase all flash blocks (unsecure). */ + kFCCOBx[0] = BYTES_JOIN_TO_WORD_1_3(FTFx_ERASE_ALL_BLOCK_UNSECURE, 0xFFFFFFU); + + /* Validate the user key */ + returnCode = flash_check_user_key(key); + if (returnCode) + { + return returnCode; + } + + /* calling flash command sequence function to execute the command */ + returnCode = flash_command_sequence(config); + + flash_cache_clear(config); + +#if FLASH_SSD_IS_FLEXNVM_ENABLED + /* Data flash IFR will be erased by erase all unsecure command, so we need to + * update FlexNVM memory partition status synchronously */ + if (returnCode == kStatus_FLASH_Success) + { + returnCode = flash_update_flexnvm_memory_partition_status(config); + } +#endif + + return returnCode; +} +#endif /* FSL_FEATURE_FLASH_HAS_ERASE_ALL_BLOCKS_UNSECURE_CMD */ + +status_t FLASH_EraseAllExecuteOnlySegments(flash_config_t *config, uint32_t key) +{ + status_t returnCode; + + if (config == NULL) + { + return kStatus_FLASH_InvalidArgument; + } + + /* preparing passing parameter to erase all execute-only segments + * 1st element for the FCCOB register */ + kFCCOBx[0] = BYTES_JOIN_TO_WORD_1_3(FTFx_ERASE_ALL_EXECUTE_ONLY_SEGMENT, 0xFFFFFFU); + + /* Validate the user key */ + returnCode = flash_check_user_key(key); + if (returnCode) + { + return returnCode; + } + + /* calling flash command sequence function to execute the command */ + returnCode = flash_command_sequence(config); + + flash_cache_clear(config); + + return returnCode; +} + +status_t FLASH_Program(flash_config_t *config, uint32_t start, uint32_t *src, uint32_t lengthInBytes) +{ + status_t returnCode; + flash_operation_config_t flashInfo; + + if (src == NULL) + { + return kStatus_FLASH_InvalidArgument; + } + + flash_get_matched_operation_info(config, start, &flashInfo); + + /* Check the supplied address range. */ + returnCode = flash_check_range(config, start, lengthInBytes, flashInfo.blockWriteUnitSize); + if (returnCode) + { + return returnCode; + } + + start = flashInfo.convertedAddress; + + while (lengthInBytes > 0) + { + /* preparing passing parameter to program the flash block */ + kFCCOBx[1] = *src++; + if (4 == flashInfo.blockWriteUnitSize) + { + kFCCOBx[0] = BYTES_JOIN_TO_WORD_1_3(FTFx_PROGRAM_LONGWORD, start); + } + else if (8 == flashInfo.blockWriteUnitSize) + { + kFCCOBx[2] = *src++; + kFCCOBx[0] = BYTES_JOIN_TO_WORD_1_3(FTFx_PROGRAM_PHRASE, start); + } + else + { + } + + /* calling flash command sequence function to execute the command */ + returnCode = flash_command_sequence(config); + + /* calling flash callback function if it is available */ + if (config->PFlashCallback) + { + config->PFlashCallback(); + } + + /* checking for the success of command execution */ + if (kStatus_FLASH_Success != returnCode) + { + break; + } + else + { + /* update start address for next iteration */ + start += flashInfo.blockWriteUnitSize; + + /* update lengthInBytes for next iteration */ + lengthInBytes -= flashInfo.blockWriteUnitSize; + } + } + + flash_cache_clear(config); + + return (returnCode); +} + +status_t FLASH_ProgramOnce(flash_config_t *config, uint32_t index, uint32_t *src, uint32_t lengthInBytes) +{ + status_t returnCode; + + if ((config == NULL) || (src == NULL)) + { + return kStatus_FLASH_InvalidArgument; + } + + /* pass paramters to FTFx */ + kFCCOBx[0] = BYTES_JOIN_TO_WORD_1_1_2(FTFx_PROGRAM_ONCE, index, 0xFFFFU); + + kFCCOBx[1] = *src; + +/* Note: Have to seperate the first index from the rest if it equals 0 + * to avoid a pointless comparison of unsigned int to 0 compiler warning */ +#if FLASH_PROGRAM_ONCE_IS_8BYTES_UNIT_SUPPORT +#if FLASH_PROGRAM_ONCE_IS_4BYTES_UNIT_SUPPORT + if (((index == FLASH_PROGRAM_ONCE_MIN_ID_8BYTES) || + /* Range check */ + ((index >= FLASH_PROGRAM_ONCE_MIN_ID_8BYTES + 1) && (index <= FLASH_PROGRAM_ONCE_MAX_ID_8BYTES))) && + (lengthInBytes == 8)) +#endif /* FLASH_PROGRAM_ONCE_IS_4BYTES_UNIT_SUPPORT */ + { + kFCCOBx[2] = *(src + 1); + } +#endif /* FLASH_PROGRAM_ONCE_IS_8BYTES_UNIT_SUPPORT */ + + /* calling flash command sequence function to execute the command */ + returnCode = flash_command_sequence(config); + + flash_cache_clear(config); + + return returnCode; +} + +#if defined(FSL_FEATURE_FLASH_HAS_PROGRAM_SECTION_CMD) && FSL_FEATURE_FLASH_HAS_PROGRAM_SECTION_CMD +status_t FLASH_ProgramSection(flash_config_t *config, uint32_t start, uint32_t *src, uint32_t lengthInBytes) +{ + status_t returnCode; + uint32_t sectorSize; + flash_operation_config_t flashInfo; +#if defined(FSL_FEATURE_FLASH_HAS_SET_FLEXRAM_FUNCTION_CMD) && FSL_FEATURE_FLASH_HAS_SET_FLEXRAM_FUNCTION_CMD + bool needSwitchFlexRamMode = false; +#endif /* FSL_FEATURE_FLASH_HAS_SET_FLEXRAM_FUNCTION_CMD */ + + if (src == NULL) + { + return kStatus_FLASH_InvalidArgument; + } + + flash_get_matched_operation_info(config, start, &flashInfo); + + /* Check the supplied address range. */ + returnCode = flash_check_range(config, start, lengthInBytes, flashInfo.sectionCmdAddressAligment); + if (returnCode) + { + return returnCode; + } + + start = flashInfo.convertedAddress; + sectorSize = flashInfo.activeSectorSize; + +#if defined(FSL_FEATURE_FLASH_HAS_SET_FLEXRAM_FUNCTION_CMD) && FSL_FEATURE_FLASH_HAS_SET_FLEXRAM_FUNCTION_CMD + /* Switch function of FlexRAM if needed */ + if (!(FTFx->FCNFG & FTFx_FCNFG_RAMRDY_MASK)) + { + needSwitchFlexRamMode = true; + + returnCode = FLASH_SetFlexramFunction(config, kFLASH_FlexramFunctionOptionAvailableAsRam); + if (returnCode != kStatus_FLASH_Success) + { + return kStatus_FLASH_SetFlexramAsRamError; + } + } +#endif /* FSL_FEATURE_FLASH_HAS_SET_FLEXRAM_FUNCTION_CMD */ + + while (lengthInBytes > 0) + { + /* Make sure the write operation doesn't span two sectors */ + uint32_t endAddressOfCurrentSector = ALIGN_UP(start, sectorSize); + uint32_t lengthTobeProgrammedOfCurrentSector; + uint32_t currentOffset = 0; + + if (endAddressOfCurrentSector == start) + { + endAddressOfCurrentSector += sectorSize; + } + + if (lengthInBytes + start > endAddressOfCurrentSector) + { + lengthTobeProgrammedOfCurrentSector = endAddressOfCurrentSector - start; + } + else + { + lengthTobeProgrammedOfCurrentSector = lengthInBytes; + } + + /* Program Current Sector */ + while (lengthTobeProgrammedOfCurrentSector > 0) + { + /* Make sure the program size doesn't exceeds Acceleration RAM size */ + uint32_t programSizeOfCurrentPass; + uint32_t numberOfPhases; + + if (lengthTobeProgrammedOfCurrentSector > kFLASH_AccelerationRamSize) + { + programSizeOfCurrentPass = kFLASH_AccelerationRamSize; + } + else + { + programSizeOfCurrentPass = lengthTobeProgrammedOfCurrentSector; + } + + /* Copy data to FlexRAM */ + memcpy((void *)FSL_FEATURE_FLASH_FLEX_RAM_START_ADDRESS, src + currentOffset / 4, programSizeOfCurrentPass); + /* Set start address of the data to be programmed */ + kFCCOBx[0] = BYTES_JOIN_TO_WORD_1_3(FTFx_PROGRAM_SECTION, start + currentOffset); + /* Set program size in terms of FEATURE_FLASH_SECTION_CMD_ADDRESS_ALIGMENT */ + numberOfPhases = programSizeOfCurrentPass / flashInfo.sectionCmdAddressAligment; + + kFCCOBx[1] = BYTES_JOIN_TO_WORD_2_2(numberOfPhases, 0xFFFFU); + + /* Peform command sequence */ + returnCode = flash_command_sequence(config); + + /* calling flash callback function if it is available */ + if (config->PFlashCallback) + { + config->PFlashCallback(); + } + + if (returnCode != kStatus_FLASH_Success) + { + flash_cache_clear(config); + return returnCode; + } + + lengthTobeProgrammedOfCurrentSector -= programSizeOfCurrentPass; + currentOffset += programSizeOfCurrentPass; + } + + src += currentOffset / 4; + start += currentOffset; + lengthInBytes -= currentOffset; + } + + flash_cache_clear(config); + +#if defined(FSL_FEATURE_FLASH_HAS_SET_FLEXRAM_FUNCTION_CMD) && FSL_FEATURE_FLASH_HAS_SET_FLEXRAM_FUNCTION_CMD + /* Restore function of FlexRAM if needed. */ + if (needSwitchFlexRamMode) + { + returnCode = FLASH_SetFlexramFunction(config, kFLASH_FlexramFunctionOptionAvailableForEeprom); + if (returnCode != kStatus_FLASH_Success) + { + return kStatus_FLASH_RecoverFlexramAsEepromError; + } + } +#endif /* FSL_FEATURE_FLASH_HAS_SET_FLEXRAM_FUNCTION_CMD */ + + return returnCode; +} +#endif /* FSL_FEATURE_FLASH_HAS_PROGRAM_SECTION_CMD */ + +#if FLASH_SSD_IS_FLEXNVM_ENABLED +status_t FLASH_EepromWrite(flash_config_t *config, uint32_t start, uint8_t *src, uint32_t lengthInBytes) +{ + status_t returnCode; + bool needSwitchFlexRamMode = false; + + if (config == NULL) + { + return kStatus_FLASH_InvalidArgument; + } + + /* Validates the range of the given address */ + if ((start < config->FlexRAMBlockBase) || + ((start + lengthInBytes) > (config->FlexRAMBlockBase + config->EEpromTotalSize))) + { + return kStatus_FLASH_AddressError; + } + + returnCode = kStatus_FLASH_Success; + + /* Switch function of FlexRAM if needed */ + if (!(FTFx->FCNFG & FTFx_FCNFG_EEERDY_MASK)) + { + needSwitchFlexRamMode = true; + + returnCode = FLASH_SetFlexramFunction(config, kFLASH_FlexramFunctionOptionAvailableForEeprom); + if (returnCode != kStatus_FLASH_Success) + { + return kStatus_FLASH_SetFlexramAsEepromError; + } + } + + /* Write data to FlexRAM when it is used as EEPROM emulator */ + while (lengthInBytes > 0) + { + if ((!(start & 0x3U)) && (lengthInBytes >= 4)) + { + *(uint32_t *)start = *(uint32_t *)src; + start += 4; + src += 4; + lengthInBytes -= 4; + } + else if ((!(start & 0x1U)) && (lengthInBytes >= 2)) + { + *(uint16_t *)start = *(uint16_t *)src; + start += 2; + src += 2; + lengthInBytes -= 2; + } + else + { + *(uint8_t *)start = *src; + start += 1; + src += 1; + lengthInBytes -= 1; + } + /* Wait till EEERDY bit is set */ + while (!(FTFx->FCNFG & FTFx_FCNFG_EEERDY_MASK)) + { + } + + /* Check for protection violation error */ + if (FTFx->FSTAT & FTFx_FSTAT_FPVIOL_MASK) + { + return kStatus_FLASH_ProtectionViolation; + } + } + + /* Switch function of FlexRAM if needed */ + if (needSwitchFlexRamMode) + { + returnCode = FLASH_SetFlexramFunction(config, kFLASH_FlexramFunctionOptionAvailableAsRam); + if (returnCode != kStatus_FLASH_Success) + { + return kStatus_FLASH_RecoverFlexramAsRamError; + } + } + + return returnCode; +} +#endif /* FLASH_SSD_IS_FLEXNVM_ENABLED */ + +#if defined(FSL_FEATURE_FLASH_HAS_READ_RESOURCE_CMD) && FSL_FEATURE_FLASH_HAS_READ_RESOURCE_CMD +status_t FLASH_ReadResource( + flash_config_t *config, uint32_t start, uint32_t *dst, uint32_t lengthInBytes, flash_read_resource_option_t option) +{ + status_t returnCode; + flash_operation_config_t flashInfo; + + if ((config == NULL) || (dst == NULL)) + { + return kStatus_FLASH_InvalidArgument; + } + + flash_get_matched_operation_info(config, start, &flashInfo); + + /* Check the supplied address range. */ + returnCode = flash_check_resource_range(start, lengthInBytes, flashInfo.resourceCmdAddressAligment, option); + if (returnCode != kStatus_FLASH_Success) + { + return returnCode; + } + + while (lengthInBytes > 0) + { + /* preparing passing parameter */ + kFCCOBx[0] = BYTES_JOIN_TO_WORD_1_3(FTFx_READ_RESOURCE, start); + if (flashInfo.resourceCmdAddressAligment == 4) + { + kFCCOBx[2] = BYTES_JOIN_TO_WORD_1_3(option, 0xFFFFFFU); + } + else if (flashInfo.resourceCmdAddressAligment == 8) + { + kFCCOBx[1] = BYTES_JOIN_TO_WORD_1_3(option, 0xFFFFFFU); + } + else + { + } + + /* calling flash command sequence function to execute the command */ + returnCode = flash_command_sequence(config); + + if (kStatus_FLASH_Success != returnCode) + { + break; + } + + /* fetch data */ + *dst++ = kFCCOBx[1]; + if (flashInfo.resourceCmdAddressAligment == 8) + { + *dst++ = kFCCOBx[2]; + } + /* update start address for next iteration */ + start += flashInfo.resourceCmdAddressAligment; + /* update lengthInBytes for next iteration */ + lengthInBytes -= flashInfo.resourceCmdAddressAligment; + } + + return (returnCode); +} +#endif /* FSL_FEATURE_FLASH_HAS_READ_RESOURCE_CMD */ + +status_t FLASH_ReadOnce(flash_config_t *config, uint32_t index, uint32_t *dst, uint32_t lengthInBytes) +{ + status_t returnCode; + + if ((config == NULL) || (dst == NULL)) + { + return kStatus_FLASH_InvalidArgument; + } + + /* pass paramters to FTFx */ + kFCCOBx[0] = BYTES_JOIN_TO_WORD_1_1_2(FTFx_READ_ONCE, index, 0xFFFFU); + + /* calling flash command sequence function to execute the command */ + returnCode = flash_command_sequence(config); + + if (kStatus_FLASH_Success == returnCode) + { + *dst = kFCCOBx[1]; +/* Note: Have to seperate the first index from the rest if it equals 0 + * to avoid a pointless comparison of unsigned int to 0 compiler warning */ +#if FLASH_PROGRAM_ONCE_IS_8BYTES_UNIT_SUPPORT +#if FLASH_PROGRAM_ONCE_IS_4BYTES_UNIT_SUPPORT + if (((index == FLASH_PROGRAM_ONCE_MIN_ID_8BYTES) || + /* Range check */ + ((index >= FLASH_PROGRAM_ONCE_MIN_ID_8BYTES + 1) && (index <= FLASH_PROGRAM_ONCE_MAX_ID_8BYTES))) && + (lengthInBytes == 8)) +#endif /* FLASH_PROGRAM_ONCE_IS_4BYTES_UNIT_SUPPORT */ + { + *(dst + 1) = kFCCOBx[2]; + } +#endif /* FLASH_PROGRAM_ONCE_IS_8BYTES_UNIT_SUPPORT */ + } + + return returnCode; +} + +status_t FLASH_GetSecurityState(flash_config_t *config, flash_security_state_t *state) +{ + /* store data read from flash register */ + uint8_t registerValue; + + if ((config == NULL) || (state == NULL)) + { + return kStatus_FLASH_InvalidArgument; + } + + /* Get flash security register value */ + registerValue = FTFx->FSEC; + + /* check the status of the flash security bits in the security register */ + if (FLASH_SECURITY_STATE_UNSECURED == (registerValue & FTFx_FSEC_SEC_MASK)) + { + /* Flash in unsecured state */ + *state = kFLASH_SecurityStateNotSecure; + } + else + { + /* Flash in secured state + * check for backdoor key security enable bit */ + if (FLASH_SECURITY_STATE_KEYEN == (registerValue & FTFx_FSEC_KEYEN_MASK)) + { + /* Backdoor key security enabled */ + *state = kFLASH_SecurityStateBackdoorEnabled; + } + else + { + /* Backdoor key security disabled */ + *state = kFLASH_SecurityStateBackdoorDisabled; + } + } + + return (kStatus_FLASH_Success); +} + +status_t FLASH_SecurityBypass(flash_config_t *config, const uint8_t *backdoorKey) +{ + uint8_t registerValue; /* registerValue */ + status_t returnCode; /* return code variable */ + + if ((config == NULL) || (backdoorKey == NULL)) + { + return kStatus_FLASH_InvalidArgument; + } + + /* set the default return code as kStatus_Success */ + returnCode = kStatus_FLASH_Success; + + /* Get flash security register value */ + registerValue = FTFx->FSEC; + + /* Check to see if flash is in secure state (any state other than 0x2) + * If not, then skip this since flash is not secure */ + if (0x02 != (registerValue & 0x03)) + { + /* preparing passing parameter to erase a flash block */ + kFCCOBx[0] = BYTES_JOIN_TO_WORD_1_3(FTFx_SECURITY_BY_PASS, 0xFFFFFFU); + kFCCOBx[1] = BYTES_JOIN_TO_WORD_1_1_1_1(backdoorKey[0], backdoorKey[1], backdoorKey[2], backdoorKey[3]); + kFCCOBx[2] = BYTES_JOIN_TO_WORD_1_1_1_1(backdoorKey[4], backdoorKey[5], backdoorKey[6], backdoorKey[7]); + + /* calling flash command sequence function to execute the command */ + returnCode = flash_command_sequence(config); + } + + return (returnCode); +} + +status_t FLASH_VerifyEraseAll(flash_config_t *config, flash_margin_value_t margin) +{ + if (config == NULL) + { + return kStatus_FLASH_InvalidArgument; + } + + /* preparing passing parameter to verify all block command */ + kFCCOBx[0] = BYTES_JOIN_TO_WORD_1_1_2(FTFx_VERIFY_ALL_BLOCK, margin, 0xFFFFU); + + /* calling flash command sequence function to execute the command */ + return flash_command_sequence(config); +} + +status_t FLASH_VerifyErase(flash_config_t *config, uint32_t start, uint32_t lengthInBytes, flash_margin_value_t margin) +{ + /* Check arguments. */ + uint32_t blockSize; + flash_operation_config_t flashInfo; + uint32_t nextBlockStartAddress; + uint32_t remainingBytes; + status_t returnCode; + + flash_get_matched_operation_info(config, start, &flashInfo); + + returnCode = flash_check_range(config, start, lengthInBytes, flashInfo.sectionCmdAddressAligment); + if (returnCode) + { + return returnCode; + } + + flash_get_matched_operation_info(config, start, &flashInfo); + start = flashInfo.convertedAddress; + blockSize = flashInfo.activeBlockSize; + + nextBlockStartAddress = ALIGN_UP(start, blockSize); + if (nextBlockStartAddress == start) + { + nextBlockStartAddress += blockSize; + } + + remainingBytes = lengthInBytes; + + while (remainingBytes) + { + uint32_t numberOfPhrases; + uint32_t verifyLength = nextBlockStartAddress - start; + if (verifyLength > remainingBytes) + { + verifyLength = remainingBytes; + } + + numberOfPhrases = verifyLength / flashInfo.sectionCmdAddressAligment; + + /* Fill in verify section command parameters. */ + kFCCOBx[0] = BYTES_JOIN_TO_WORD_1_3(FTFx_VERIFY_SECTION, start); + kFCCOBx[1] = BYTES_JOIN_TO_WORD_2_1_1(numberOfPhrases, margin, 0xFFU); + + /* calling flash command sequence function to execute the command */ + returnCode = flash_command_sequence(config); + if (returnCode) + { + return returnCode; + } + + remainingBytes -= verifyLength; + start += verifyLength; + nextBlockStartAddress += blockSize; + } + + return kStatus_FLASH_Success; +} + +status_t FLASH_VerifyProgram(flash_config_t *config, + uint32_t start, + uint32_t lengthInBytes, + const uint32_t *expectedData, + flash_margin_value_t margin, + uint32_t *failedAddress, + uint32_t *failedData) +{ + status_t returnCode; + flash_operation_config_t flashInfo; + + if (expectedData == NULL) + { + return kStatus_FLASH_InvalidArgument; + } + + flash_get_matched_operation_info(config, start, &flashInfo); + + returnCode = flash_check_range(config, start, lengthInBytes, flashInfo.checkCmdAddressAligment); + if (returnCode) + { + return returnCode; + } + + start = flashInfo.convertedAddress; + + while (lengthInBytes) + { + /* preparing passing parameter to program check the flash block */ + kFCCOBx[0] = BYTES_JOIN_TO_WORD_1_3(FTFx_PROGRAM_CHECK, start); + kFCCOBx[1] = BYTES_JOIN_TO_WORD_1_3(margin, 0xFFFFFFU); + kFCCOBx[2] = *expectedData; + + /* calling flash command sequence function to execute the command */ + returnCode = flash_command_sequence(config); + + /* checking for the success of command execution */ + if (kStatus_FLASH_Success != returnCode) + { + if (failedAddress) + { + *failedAddress = start; + } + if (failedData) + { + *failedData = 0; + } + break; + } + + lengthInBytes -= flashInfo.checkCmdAddressAligment; + expectedData += flashInfo.checkCmdAddressAligment / sizeof(*expectedData); + start += flashInfo.checkCmdAddressAligment; + } + + return (returnCode); +} + +status_t FLASH_VerifyEraseAllExecuteOnlySegments(flash_config_t *config, flash_margin_value_t margin) +{ + if (config == NULL) + { + return kStatus_FLASH_InvalidArgument; + } + + /* preparing passing parameter to verify erase all execute-only segments command */ + kFCCOBx[0] = BYTES_JOIN_TO_WORD_1_1_2(FTFx_VERIFY_ALL_EXECUTE_ONLY_SEGMENT, margin, 0xFFFFU); + + /* calling flash command sequence function to execute the command */ + return flash_command_sequence(config); +} + +status_t FLASH_IsProtected(flash_config_t *config, + uint32_t start, + uint32_t lengthInBytes, + flash_protection_state_t *protection_state) +{ + uint32_t endAddress; /* end address for protection check */ + uint32_t protectionRegionSize; /* size of flash protection region */ + uint32_t regionCheckedCounter; /* increments each time the flash address was checked for + * protection status */ + uint32_t regionCounter; /* incrementing variable used to increment through the flash + * protection regions */ + uint32_t protectStatusCounter; /* increments each time a flash region was detected as protected */ + + uint8_t flashRegionProtectStatus[FSL_FEATURE_FTFx_REGION_COUNT]; /* array of the protection status for each + * protection region */ + uint32_t flashRegionAddress[FSL_FEATURE_FTFx_REGION_COUNT + 1]; /* array of the start addresses for each flash + * protection region. Note this is REGION_COUNT+1 + * due to requiring the next start address after + * the end of flash for loop-check purposes below */ + status_t returnCode; + + if (protection_state == NULL) + { + return kStatus_FLASH_InvalidArgument; + } + + /* Check the supplied address range. */ + returnCode = flash_check_range(config, start, lengthInBytes, FSL_FEATURE_FLASH_PFLASH_BLOCK_WRITE_UNIT_SIZE); + if (returnCode) + { + return returnCode; + } + + /* calculating Flash end address */ + endAddress = start + lengthInBytes; + + /* Calculate the size of the flash protection region + * If the flash density is > 32KB, then protection region is 1/32 of total flash density + * Else if flash density is < 32KB, then flash protection region is set to 1KB */ + if (config->PFlashTotalSize > 32 * 1024) + { + protectionRegionSize = (config->PFlashTotalSize) / FSL_FEATURE_FTFx_REGION_COUNT; + } + else + { + protectionRegionSize = 1024; + } + + /* populate the flashRegionAddress array with the start address of each flash region */ + regionCounter = 0; /* make sure regionCounter is initialized to 0 first */ + + /* populate up to 33rd element of array, this is the next address after end of flash array */ + while (regionCounter <= FSL_FEATURE_FTFx_REGION_COUNT) + { + flashRegionAddress[regionCounter] = config->PFlashBlockBase + protectionRegionSize * regionCounter; + regionCounter++; + } + + /* populate flashRegionProtectStatus array with status information + * Protection status for each region is stored in the FPROT[3:0] registers + * Each bit represents one region of flash + * 4 registers * 8-bits-per-register = 32-bits (32-regions) + * The convention is: + * FPROT3[bit 0] is the first protection region (start of flash memory) + * FPROT0[bit 7] is the last protection region (end of flash memory) + * regionCounter is used to determine which FPROT[3:0] register to check for protection status + * Note: FPROT=1 means NOT protected, FPROT=0 means protected */ + regionCounter = 0; /* make sure regionCounter is initialized to 0 first */ + while (regionCounter < FSL_FEATURE_FTFx_REGION_COUNT) + { + if (regionCounter < 8) + { + flashRegionProtectStatus[regionCounter] = ((FTFx->FPROT3) >> regionCounter) & (0x01u); + } + else if ((regionCounter >= 8) && (regionCounter < 16)) + { + flashRegionProtectStatus[regionCounter] = ((FTFx->FPROT2) >> (regionCounter - 8)) & (0x01u); + } + else if ((regionCounter >= 16) && (regionCounter < 24)) + { + flashRegionProtectStatus[regionCounter] = ((FTFx->FPROT1) >> (regionCounter - 16)) & (0x01u); + } + else + { + flashRegionProtectStatus[regionCounter] = ((FTFx->FPROT0) >> (regionCounter - 24)) & (0x01u); + } + regionCounter++; + } + + /* loop through the flash regions and check + * desired flash address range for protection status + * loop stops when it is detected that start has exceeded the endAddress */ + regionCounter = 0; /* make sure regionCounter is initialized to 0 first */ + regionCheckedCounter = 0; + protectStatusCounter = 0; /* make sure protectStatusCounter is initialized to 0 first */ + while (start < endAddress) + { + /* check to see if the address falls within this protection region + * Note that if the entire flash is to be checked, the last protection + * region checked would consist of the last protection start address and + * the start address following the end of flash */ + if ((start >= flashRegionAddress[regionCounter]) && (start < flashRegionAddress[regionCounter + 1])) + { + /* increment regionCheckedCounter to indicate this region was checked */ + regionCheckedCounter++; + + /* check the protection status of this region + * Note: FPROT=1 means NOT protected, FPROT=0 means protected */ + if (!flashRegionProtectStatus[regionCounter]) + { + /* increment protectStatusCounter to indicate this region is protected */ + protectStatusCounter++; + } + start += protectionRegionSize; /* increment to an address within the next region */ + } + regionCounter++; /* increment regionCounter to check for the next flash protection region */ + } + + /* if protectStatusCounter == 0, then no region of the desired flash region is protected */ + if (protectStatusCounter == 0) + { + *protection_state = kFLASH_ProtectionStateUnprotected; + } + /* if protectStatusCounter == regionCheckedCounter, then each region checked was protected */ + else if (protectStatusCounter == regionCheckedCounter) + { + *protection_state = kFLASH_ProtectionStateProtected; + } + /* if protectStatusCounter != regionCheckedCounter, then protection status is mixed + * In other words, some regions are protected while others are unprotected */ + else + { + *protection_state = kFLASH_ProtectionStateMixed; + } + + return (returnCode); +} + +status_t FLASH_IsExecuteOnly(flash_config_t *config, + uint32_t start, + uint32_t lengthInBytes, + flash_execute_only_access_state_t *access_state) +{ + status_t returnCode; + + if (access_state == NULL) + { + return kStatus_FLASH_InvalidArgument; + } + + /* Check the supplied address range. */ + returnCode = flash_check_range(config, start, lengthInBytes, FSL_FEATURE_FLASH_PFLASH_BLOCK_WRITE_UNIT_SIZE); + if (returnCode) + { + return returnCode; + } + +#if defined(FSL_FEATURE_FLASH_HAS_ACCESS_CONTROL) && FSL_FEATURE_FLASH_HAS_ACCESS_CONTROL + { + uint32_t executeOnlySegmentCounter = 0; + + /* calculating end address */ + uint32_t endAddress = start + lengthInBytes; + + /* Aligning start address and end address */ + uint32_t alignedStartAddress = ALIGN_DOWN(start, config->PFlashAccessSegmentSize); + uint32_t alignedEndAddress = ALIGN_UP(endAddress, config->PFlashAccessSegmentSize); + + uint32_t segmentIndex = 0; + uint32_t maxSupportedExecuteOnlySegmentCount = + (alignedEndAddress - alignedStartAddress) / config->PFlashAccessSegmentSize; + + while (start < endAddress) + { + uint32_t xacc; + + segmentIndex = start / config->PFlashAccessSegmentSize; + + if (segmentIndex < 32) + { + xacc = *(const volatile uint32_t *)&FTFx->XACCL3; + } + else if (segmentIndex < config->PFlashAccessSegmentCount) + { + xacc = *(const volatile uint32_t *)&FTFx->XACCH3; + segmentIndex -= 32; + } + else + { + break; + } + + /* Determine if this address range is in a execute-only protection flash segment. */ + if ((~xacc) & (1u << segmentIndex)) + { + executeOnlySegmentCounter++; + } + + start += config->PFlashAccessSegmentSize; + } + + if (executeOnlySegmentCounter < 1u) + { + *access_state = kFLASH_AccessStateUnLimited; + } + else if (executeOnlySegmentCounter < maxSupportedExecuteOnlySegmentCount) + { + *access_state = kFLASH_AccessStateMixed; + } + else + { + *access_state = kFLASH_AccessStateExecuteOnly; + } + } +#else + *access_state = kFLASH_AccessStateUnLimited; +#endif /* FSL_FEATURE_FLASH_HAS_ACCESS_CONTROL */ + + return (returnCode); +} + +status_t FLASH_GetProperty(flash_config_t *config, flash_property_tag_t whichProperty, uint32_t *value) +{ + if ((config == NULL) || (value == NULL)) + { + return kStatus_FLASH_InvalidArgument; + } + + switch (whichProperty) + { + case kFLASH_PropertyPflashSectorSize: + *value = config->PFlashSectorSize; + break; + + case kFLASH_PropertyPflashTotalSize: + *value = config->PFlashTotalSize; + break; + + case kFLASH_PropertyPflashBlockSize: + *value = config->PFlashTotalSize / FSL_FEATURE_FLASH_PFLASH_BLOCK_COUNT; + break; + + case kFLASH_PropertyPflashBlockCount: + *value = config->PFlashBlockCount; + break; + + case kFLASH_PropertyPflashBlockBaseAddr: + *value = config->PFlashBlockBase; + break; + + case kFLASH_PropertyPflashFacSupport: +#if defined(FSL_FEATURE_FLASH_HAS_ACCESS_CONTROL) + *value = FSL_FEATURE_FLASH_HAS_ACCESS_CONTROL; +#else + *value = 0; +#endif /* FSL_FEATURE_FLASH_HAS_ACCESS_CONTROL */ + break; + + case kFLASH_PropertyPflashAccessSegmentSize: + *value = config->PFlashAccessSegmentSize; + break; + + case kFLASH_PropertyPflashAccessSegmentCount: + *value = config->PFlashAccessSegmentCount; + break; + + case kFLASH_PropertyFlexRamBlockBaseAddr: + *value = config->FlexRAMBlockBase; + break; + + case kFLASH_PropertyFlexRamTotalSize: + *value = config->FlexRAMTotalSize; + break; + +#if FLASH_SSD_IS_FLEXNVM_ENABLED + case kFLASH_PropertyDflashSectorSize: + *value = FSL_FEATURE_FLASH_FLEX_NVM_BLOCK_SECTOR_SIZE; + break; + case kFLASH_PropertyDflashTotalSize: + *value = config->DFlashTotalSize; + break; + case kFLASH_PropertyDflashBlockSize: + *value = FSL_FEATURE_FLASH_FLEX_NVM_BLOCK_SIZE; + break; + case kFLASH_PropertyDflashBlockCount: + *value = FSL_FEATURE_FLASH_FLEX_NVM_BLOCK_COUNT; + break; + case kFLASH_PropertyDflashBlockBaseAddr: + *value = config->DFlashBlockBase; + break; + case kFLASH_PropertyEepromTotalSize: + *value = config->EEpromTotalSize; + break; +#endif /* FLASH_SSD_IS_FLEXNVM_ENABLED */ + + default: /* catch inputs that are not recognized */ + return kStatus_FLASH_UnknownProperty; + } + + return kStatus_FLASH_Success; +} + +#if defined(FSL_FEATURE_FLASH_HAS_SET_FLEXRAM_FUNCTION_CMD) && FSL_FEATURE_FLASH_HAS_SET_FLEXRAM_FUNCTION_CMD +status_t FLASH_SetFlexramFunction(flash_config_t *config, flash_flexram_function_option_t option) +{ + status_t status; + + if (config == NULL) + { + return kStatus_FLASH_InvalidArgument; + } + + status = flasn_check_flexram_function_option_range(option); + if (status != kStatus_FLASH_Success) + { + return status; + } + + /* preparing passing parameter to verify all block command */ + kFCCOBx[0] = BYTES_JOIN_TO_WORD_1_1_2(FTFx_SET_FLEXRAM_FUNCTION, option, 0xFFFFU); + + /* calling flash command sequence function to execute the command */ + return flash_command_sequence(config); +} +#endif /* FSL_FEATURE_FLASH_HAS_SET_FLEXRAM_FUNCTION_CMD */ + +#if defined(FSL_FEATURE_FLASH_HAS_SWAP_CONTROL_CMD) && FSL_FEATURE_FLASH_HAS_SWAP_CONTROL_CMD +status_t FLASH_SwapControl(flash_config_t *config, + uint32_t address, + flash_swap_control_option_t option, + flash_swap_state_config_t *returnInfo) +{ + status_t returnCode; + + if ((config == NULL) || (returnInfo == NULL)) + { + return kStatus_FLASH_InvalidArgument; + } + + if (address & (FSL_FEATURE_FLASH_PFLASH_SWAP_CONTROL_CMD_ADDRESS_ALIGMENT - 1)) + { + return kStatus_FLASH_AlignmentError; + } + + /* Make sure address provided is in the lower half of Program flash but not in the Flash Configuration Field */ + if ((address >= (config->PFlashTotalSize / 2)) || + ((address >= kFLASH_ConfigAreaStart) && (address <= kFLASH_ConfigAreaEnd))) + { + return kStatus_FLASH_SwapIndicatorAddressError; + } + + /* Check the option. */ + returnCode = flash_check_swap_control_option(option); + if (returnCode) + { + return returnCode; + } + + kFCCOBx[0] = BYTES_JOIN_TO_WORD_1_3(FTFx_SWAP_CONTROL, address); + kFCCOBx[1] = BYTES_JOIN_TO_WORD_1_3(option, 0xFFFFFFU); + + returnCode = flash_command_sequence(config); + + returnInfo->flashSwapState = (flash_swap_state_t)FTFx->FCCOB5; + returnInfo->currentSwapBlockStatus = (flash_swap_block_status_t)FTFx->FCCOB6; + returnInfo->nextSwapBlockStatus = (flash_swap_block_status_t)FTFx->FCCOB7; + + return returnCode; +} +#endif /* FSL_FEATURE_FLASH_HAS_SWAP_CONTROL_CMD */ + +#if defined(FSL_FEATURE_FLASH_HAS_PFLASH_BLOCK_SWAP) && FSL_FEATURE_FLASH_HAS_PFLASH_BLOCK_SWAP +status_t FLASH_Swap(flash_config_t *config, uint32_t address, flash_swap_function_option_t option) +{ + flash_swap_state_config_t returnInfo; + status_t returnCode; + + memset(&returnInfo, 0xFFU, sizeof(returnInfo)); + + do + { + returnCode = FLASH_SwapControl(config, address, kFLASH_SwapControlOptionReportStatus, &returnInfo); + if (returnCode != kStatus_FLASH_Success) + { + return returnCode; + } + + if (kFLASH_SwapFunctionOptionDisable == option) + { + if (returnInfo.flashSwapState == kFLASH_SwapStateDisabled) + { + return kStatus_FLASH_Success; + } + else if (returnInfo.flashSwapState == kFLASH_SwapStateUninitialized) + { + /* The swap system changed to the DISABLED state with Program flash block 0 + * located at relative flash address 0x0_0000 */ + returnCode = FLASH_SwapControl(config, address, kFLASH_SwapControlOptionDisableSystem, &returnInfo); + } + else + { + /* Swap disable should be requested only when swap system is in the uninitialized state */ + return kStatus_FLASH_SwapSystemNotInUninitialized; + } + } + else + { + /* When first swap: the initial swap state is Uninitialized, flash swap inidicator address is unset, + * the swap procedure should be Uninitialized -> Update-Erased -> Complete. + * After the first swap has been completed, the flash swap inidicator address cannot be modified + * unless EraseAllBlocks command is issued, the swap procedure is changed to Update -> Update-Erased -> + * Complete. */ + switch (returnInfo.flashSwapState) + { + case kFLASH_SwapStateUninitialized: + /* If current swap mode is Uninitialized, Initialize Swap to Initialized/READY state. */ + returnCode = + FLASH_SwapControl(config, address, kFLASH_SwapControlOptionIntializeSystem, &returnInfo); + break; + case kFLASH_SwapStateReady: + /* Validate whether the address provided to the swap system is matched to + * swap indicator address in the IFR */ + returnCode = flash_validate_swap_indicator_address(config, address); + if (returnCode == kStatus_FLASH_Success) + { + /* If current swap mode is Initialized/Ready, Initialize Swap to UPDATE state. */ + returnCode = + FLASH_SwapControl(config, address, kFLASH_SwapControlOptionSetInUpdateState, &returnInfo); + } + break; + case kFLASH_SwapStateUpdate: + /* If current swap mode is Update, Erase indicator sector in non active block + * to proceed swap system to update-erased state */ + returnCode = FLASH_Erase(config, address + (config->PFlashTotalSize >> 1), + FSL_FEATURE_FLASH_PFLASH_SECTOR_CMD_ADDRESS_ALIGMENT, kFLASH_ApiEraseKey); + break; + case kFLASH_SwapStateUpdateErased: + /* If current swap mode is Update or Update-Erased, progress Swap to COMPLETE State */ + returnCode = + FLASH_SwapControl(config, address, kFLASH_SwapControlOptionSetInCompleteState, &returnInfo); + break; + case kFLASH_SwapStateComplete: + break; + case kFLASH_SwapStateDisabled: + /* When swap system is in disabled state, We need to clear swap system back to uninitialized + * by issuing EraseAllBlocks command */ + returnCode = kStatus_FLASH_SwapSystemNotInUninitialized; + break; + default: + returnCode = kStatus_FLASH_InvalidArgument; + break; + } + } + if (returnCode != kStatus_FLASH_Success) + { + break; + } + } while (!((kFLASH_SwapStateComplete == returnInfo.flashSwapState) && (kFLASH_SwapFunctionOptionEnable == option))); + + return returnCode; +} +#endif /* FSL_FEATURE_FLASH_HAS_PFLASH_BLOCK_SWAP */ + +#if defined(FSL_FEATURE_FLASH_HAS_PROGRAM_PARTITION_CMD) && FSL_FEATURE_FLASH_HAS_PROGRAM_PARTITION_CMD +status_t FLASH_ProgramPartition(flash_config_t *config, + flash_partition_flexram_load_option_t option, + uint32_t eepromDataSizeCode, + uint32_t flexnvmPartitionCode) +{ + status_t returnCode; + + if (config == NULL) + { + return kStatus_FLASH_InvalidArgument; + } + + /* eepromDataSizeCode[7:6], flexnvmPartitionCode[7:4] should be all 1'b0 + * or it will cause access error. */ + /* eepromDataSizeCode &= 0x3FU; */ + /* flexnvmPartitionCode &= 0x0FU; */ + + /* preparing passing parameter to program the flash block */ + kFCCOBx[0] = BYTES_JOIN_TO_WORD_1_2_1(FTFx_PROGRAM_PARTITION, 0xFFFFU, option); + kFCCOBx[1] = BYTES_JOIN_TO_WORD_1_1_2(eepromDataSizeCode, flexnvmPartitionCode, 0xFFFFU); + + /* calling flash command sequence function to execute the command */ + returnCode = flash_command_sequence(config); + + flash_cache_clear(config); + +#if FLASH_SSD_IS_FLEXNVM_ENABLED + /* Data flash IFR will be updated by program partition command during reset sequence, + * so we just set reserved values for partitioned FlexNVM size here */ + config->EEpromTotalSize = FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_RESERVED; + config->DFlashTotalSize = FLEX_NVM_DFLASH_SIZE_FOR_DEPART_RESERVED; +#endif + + return (returnCode); +} +#endif /* FSL_FEATURE_FLASH_HAS_PROGRAM_PARTITION_CMD */ + +status_t FLASH_PflashSetProtection(flash_config_t *config, uint32_t protectStatus) +{ + if (config == NULL) + { + return kStatus_FLASH_InvalidArgument; + } + + *kFPROT = protectStatus; + + if (protectStatus != *kFPROT) + { + return kStatus_FLASH_CommandFailure; + } + + return kStatus_FLASH_Success; +} + +status_t FLASH_PflashGetProtection(flash_config_t *config, uint32_t *protectStatus) +{ + if ((config == NULL) || (protectStatus == NULL)) + { + return kStatus_FLASH_InvalidArgument; + } + + *protectStatus = *kFPROT; + + return kStatus_FLASH_Success; +} + +#if FLASH_SSD_IS_FLEXNVM_ENABLED +status_t FLASH_DflashSetProtection(flash_config_t *config, uint8_t protectStatus) +{ + if (config == NULL) + { + return kStatus_FLASH_InvalidArgument; + } + + if ((config->DFlashTotalSize == 0) || (config->DFlashTotalSize == FLEX_NVM_DFLASH_SIZE_FOR_DEPART_RESERVED)) + { + return kStatus_FLASH_CommandNotSupported; + } + + FTFx->FDPROT = protectStatus; + + if (FTFx->FDPROT != protectStatus) + { + return kStatus_FLASH_CommandFailure; + } + + return kStatus_FLASH_Success; +} +#endif /* FLASH_SSD_IS_FLEXNVM_ENABLED */ + +#if FLASH_SSD_IS_FLEXNVM_ENABLED +status_t FLASH_DflashGetProtection(flash_config_t *config, uint8_t *protectStatus) +{ + if ((config == NULL) || (protectStatus == NULL)) + { + return kStatus_FLASH_InvalidArgument; + } + + if ((config->DFlashTotalSize == 0) || (config->DFlashTotalSize == FLEX_NVM_DFLASH_SIZE_FOR_DEPART_RESERVED)) + { + return kStatus_FLASH_CommandNotSupported; + } + + *protectStatus = FTFx->FDPROT; + + return kStatus_FLASH_Success; +} +#endif /* FLASH_SSD_IS_FLEXNVM_ENABLED */ + +#if FLASH_SSD_IS_FLEXNVM_ENABLED +status_t FLASH_EepromSetProtection(flash_config_t *config, uint8_t protectStatus) +{ + if (config == NULL) + { + return kStatus_FLASH_InvalidArgument; + } + + if ((config->EEpromTotalSize == 0) || (config->EEpromTotalSize == FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_RESERVED)) + { + return kStatus_FLASH_CommandNotSupported; + } + + FTFx->FEPROT = protectStatus; + + if (FTFx->FEPROT != protectStatus) + { + return kStatus_FLASH_CommandFailure; + } + + return kStatus_FLASH_Success; +} +#endif /* FLASH_SSD_IS_FLEXNVM_ENABLED */ + +#if FLASH_SSD_IS_FLEXNVM_ENABLED +status_t FLASH_EepromGetProtection(flash_config_t *config, uint8_t *protectStatus) +{ + if ((config == NULL) || (protectStatus == NULL)) + { + return kStatus_FLASH_InvalidArgument; + } + + if ((config->EEpromTotalSize == 0) || (config->EEpromTotalSize == FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_RESERVED)) + { + return kStatus_FLASH_CommandNotSupported; + } + + *protectStatus = FTFx->FEPROT; + + return kStatus_FLASH_Success; +} +#endif /* FLASH_SSD_IS_FLEXNVM_ENABLED */ + +#if FLASH_DRIVER_IS_FLASH_RESIDENT +/*! + * @brief Copy PIC of flash_run_command() to RAM + */ +static void copy_flash_run_command(uint32_t *flashRunCommand) +{ + assert(sizeof(s_flashRunCommandFunctionCode) <= (kFLASH_ExecuteInRamFunctionMaxSizeInWords * 4)); + + /* Since the value of ARM function pointer is always odd, but the real start address + * of function memory should be even, that's why +1 operation exist. */ + memcpy((void *)flashRunCommand, (void *)s_flashRunCommandFunctionCode, sizeof(s_flashRunCommandFunctionCode)); + callFlashRunCommand = (void (*)(FTFx_REG_ACCESS_TYPE ftfx_fstat))((uint32_t)flashRunCommand + 1); +} +#endif /* FLASH_DRIVER_IS_FLASH_RESIDENT */ + +/*! + * @brief Flash Command Sequence + * + * This function is used to perform the command write sequence to the flash. + * + * @param driver Pointer to storage for the driver runtime state. + * @return An error code or kStatus_FLASH_Success + */ +static status_t flash_command_sequence(flash_config_t *config) +{ + uint8_t registerValue; + +#if FLASH_DRIVER_IS_FLASH_RESIDENT + /* clear RDCOLERR & ACCERR & FPVIOL flag in flash status register */ + FTFx->FSTAT = FTFx_FSTAT_RDCOLERR_MASK | FTFx_FSTAT_ACCERR_MASK | FTFx_FSTAT_FPVIOL_MASK; + + status_t returnCode = flash_check_execute_in_ram_function_info(config); + if (kStatus_FLASH_Success != returnCode) + { + return returnCode; + } + + /* We pass the ftfx_fstat address as a parameter to flash_run_comamnd() instead of using + * pre-processed MICRO sentences or operating global variable in flash_run_comamnd() + * to make sure that flash_run_command() will be compiled into position-independent code (PIC). */ + callFlashRunCommand((FTFx_REG_ACCESS_TYPE)(&FTFx->FSTAT)); +#else + /* clear RDCOLERR & ACCERR & FPVIOL flag in flash status register */ + FTFx->FSTAT = FTFx_FSTAT_RDCOLERR_MASK | FTFx_FSTAT_ACCERR_MASK | FTFx_FSTAT_FPVIOL_MASK; + + /* clear CCIF bit */ + FTFx->FSTAT = FTFx_FSTAT_CCIF_MASK; + + /* Check CCIF bit of the flash status register, wait till it is set. + * IP team indicates that this loop will always complete. */ + while (!(FTFx->FSTAT & FTFx_FSTAT_CCIF_MASK)) + { + } +#endif /* FLASH_DRIVER_IS_FLASH_RESIDENT */ + + /* Check error bits */ + /* Get flash status register value */ + registerValue = FTFx->FSTAT; + + /* checking access error */ + if (registerValue & FTFx_FSTAT_ACCERR_MASK) + { + return kStatus_FLASH_AccessError; + } + /* checking protection error */ + else if (registerValue & FTFx_FSTAT_FPVIOL_MASK) + { + return kStatus_FLASH_ProtectionViolation; + } + /* checking MGSTAT0 non-correctable error */ + else if (registerValue & FTFx_FSTAT_MGSTAT0_MASK) + { + return kStatus_FLASH_CommandFailure; + } + else + { + return kStatus_FLASH_Success; + } +} + +#if FLASH_DRIVER_IS_FLASH_RESIDENT +/*! + * @brief Copy PIC of flash_cache_clear_command() to RAM + * + */ +static void copy_flash_cache_clear_command(uint32_t *flashCacheClearCommand) +{ + assert(sizeof(s_flashCacheClearCommandFunctionCode) <= (kFLASH_ExecuteInRamFunctionMaxSizeInWords * 4)); + + /* Since the value of ARM function pointer is always odd, but the real start address + * of function memory should be even, that's why +1 operation exist. */ + memcpy((void *)flashCacheClearCommand, (void *)s_flashCacheClearCommandFunctionCode, + sizeof(s_flashCacheClearCommandFunctionCode)); + callFlashCacheClearCommand = (void (*)(FTFx_REG32_ACCESS_TYPE ftfx_reg))((uint32_t)flashCacheClearCommand + 1); +} +#endif /* FLASH_DRIVER_IS_FLASH_RESIDENT */ + +/*! + * @brief Flash Cache Clear + * + * This function is used to perform the cache clear to the flash. + */ +#if (defined(__GNUC__)) +/* #pragma GCC push_options */ +/* #pragma GCC optimize("O0") */ +void __attribute__((optimize("O0"))) flash_cache_clear(flash_config_t *config) +#else +#if (defined(__ICCARM__)) +#pragma optimize = none +#endif +#if (defined(__CC_ARM)) +#pragma push +#pragma O0 +#endif +void flash_cache_clear(flash_config_t *config) +#endif +{ +#if FLASH_DRIVER_IS_FLASH_RESIDENT + status_t returnCode = flash_check_execute_in_ram_function_info(config); + if (kStatus_FLASH_Success != returnCode) + { + return; + } + +/* We pass the ftfx register address as a parameter to flash_cache_clear_comamnd() instead of using + * pre-processed MACROs or a global variable in flash_cache_clear_comamnd() + * to make sure that flash_cache_clear_command() will be compiled into position-independent code (PIC). */ +#if defined(FSL_FEATURE_FLASH_HAS_MCM_FLASH_CACHE_CONTROLS) && FSL_FEATURE_FLASH_HAS_MCM_FLASH_CACHE_CONTROLS +#if defined(MCM) + callFlashCacheClearCommand((FTFx_REG32_ACCESS_TYPE)&MCM->PLACR); +#endif +#if defined(MCM0) + callFlashCacheClearCommand((FTFx_REG32_ACCESS_TYPE)&MCM0->PLACR); +#endif +#if defined(MCM1) + callFlashCacheClearCommand((FTFx_REG32_ACCESS_TYPE)&MCM1->PLACR); +#endif +#elif defined(FSL_FEATURE_FLASH_HAS_FMC_FLASH_CACHE_CONTROLS) && FSL_FEATURE_FLASH_HAS_FMC_FLASH_CACHE_CONTROLS +#if defined(FMC_PFB01CR_CINV_WAY_MASK) + callFlashCacheClearCommand((FTFx_REG32_ACCESS_TYPE)&FMC->PFB01CR); +#else + callFlashCacheClearCommand((FTFx_REG32_ACCESS_TYPE)&FMC->PFB0CR); +#endif +#elif defined(FSL_FEATURE_FLASH_HAS_MSCM_FLASH_CACHE_CONTROLS) && FSL_FEATURE_FLASH_HAS_MSCM_FLASH_CACHE_CONTROLS + callFlashCacheClearCommand((FTFx_REG32_ACCESS_TYPE)&MSCM->OCMDR[0]); +#else +#if defined(FMC_PFB0CR_S_INV_MASK) + callFlashCacheClearCommand((FTFx_REG32_ACCESS_TYPE)&FMC->PFB0CR); +#elif defined(FMC_PFB01CR_S_INV_MASK) + callFlashCacheClearCommand((FTFx_REG32_ACCESS_TYPE)&FMC->PFB01CR); +#else + /* meaningless code, just a workaround to solve warning*/ + callFlashCacheClearCommand((FTFx_REG32_ACCESS_TYPE)0); +#endif +/* #error "Unknown flash cache controller" */ +#endif /* FSL_FEATURE_FTFx_MCM_FLASH_CACHE_CONTROLS */ + +#else + +#if defined(FSL_FEATURE_FLASH_HAS_MCM_FLASH_CACHE_CONTROLS) && FSL_FEATURE_FLASH_HAS_MCM_FLASH_CACHE_CONTROLS +#if defined(MCM) + MCM->PLACR |= MCM_PLACR_CFCC_MASK; +#endif +#if defined(MCM0) + MCM0->PLACR |= MCM_PLACR_CFCC_MASK; +#endif +#if defined(MCM1) + MCM1->PLACR |= MCM_PLACR_CFCC_MASK; +#endif +#elif defined(FSL_FEATURE_FLASH_HAS_FMC_FLASH_CACHE_CONTROLS) && FSL_FEATURE_FLASH_HAS_FMC_FLASH_CACHE_CONTROLS +#if defined(FMC_PFB01CR_CINV_WAY_MASK) + FMC->PFB01CR = (FMC->PFB01CR & ~FMC_PFB01CR_CINV_WAY_MASK) | FMC_PFB01CR_CINV_WAY(~0); +#else + FMC->PFB0CR = (FMC->PFB0CR & ~FMC_PFB0CR_CINV_WAY_MASK) | FMC_PFB0CR_CINV_WAY(~0); +#endif +#elif defined(FSL_FEATURE_FLASH_HAS_MSCM_FLASH_CACHE_CONTROLS) && FSL_FEATURE_FLASH_HAS_MSCM_FLASH_CACHE_CONTROLS + MSCM->OCMDR[0] |= MSCM_OCMDR_OCMC1(2); + MSCM->OCMDR[0] |= MSCM_OCMDR_OCMC1(1); +#else +#if defined(FMC_PFB0CR_S_INV_MASK) + FMC->PFB0CR |= FMC_PFB0CR_S_INV_MASK; +#elif defined(FMC_PFB01CR_S_INV_MASK) + FMC->PFB01CR |= FMC_PFB01CR_S_INV_MASK; +#endif +/* #error "Unknown flash cache controller" */ +#endif /* FSL_FEATURE_FTFx_MCM_FLASH_CACHE_CONTROLS */ +#endif /* FLASH_DRIVER_IS_FLASH_RESIDENT */ +} +#if (defined(__CC_ARM)) +#pragma pop +#endif +#if (defined(__GNUC__)) +/* #pragma GCC pop_options */ +#endif + +#if FLASH_DRIVER_IS_FLASH_RESIDENT +/*! @brief Check whether flash execute-in-ram functions are ready */ +static status_t flash_check_execute_in_ram_function_info(flash_config_t *config) +{ + flash_execute_in_ram_function_config_t *flashExecuteInRamFunctionInfo; + + if (config == NULL) + { + return kStatus_FLASH_InvalidArgument; + } + + flashExecuteInRamFunctionInfo = (flash_execute_in_ram_function_config_t *)config->flashExecuteInRamFunctionInfo; + + if ((config->flashExecuteInRamFunctionInfo) && + (kFLASH_ExecuteInRamFunctionTotalNum == flashExecuteInRamFunctionInfo->activeFunctionCount)) + { + return kStatus_FLASH_Success; + } + + return kStatus_FLASH_ExecuteInRamFunctionNotReady; +} +#endif /* FLASH_DRIVER_IS_FLASH_RESIDENT */ + +/*! @brief Validates the range and alignment of the given address range.*/ +static status_t flash_check_range(flash_config_t *config, + uint32_t startAddress, + uint32_t lengthInBytes, + uint32_t alignmentBaseline) +{ + if (config == NULL) + { + return kStatus_FLASH_InvalidArgument; + } + + /* Verify the start and length are alignmentBaseline aligned. */ + if ((startAddress & (alignmentBaseline - 1)) || (lengthInBytes & (alignmentBaseline - 1))) + { + return kStatus_FLASH_AlignmentError; + } + +/* check for valid range of the target addresses */ +#if !FLASH_SSD_IS_FLEXNVM_ENABLED + if ((startAddress < config->PFlashBlockBase) || + ((startAddress + lengthInBytes) > (config->PFlashBlockBase + config->PFlashTotalSize))) +#else + if (!(((startAddress >= config->PFlashBlockBase) && + ((startAddress + lengthInBytes) <= (config->PFlashBlockBase + config->PFlashTotalSize))) || + ((startAddress >= config->DFlashBlockBase) && + ((startAddress + lengthInBytes) <= (config->DFlashBlockBase + config->DFlashTotalSize))))) +#endif + { + return kStatus_FLASH_AddressError; + } + + return kStatus_FLASH_Success; +} + +/*! @brief Gets the right address, sector and block size of current flash type which is indicated by address.*/ +static status_t flash_get_matched_operation_info(flash_config_t *config, + uint32_t address, + flash_operation_config_t *info) +{ + if (config == NULL) + { + return kStatus_FLASH_InvalidArgument; + } + + /* Clean up info Structure*/ + memset(info, 0, sizeof(flash_operation_config_t)); + +/* When required by the command, address bit 23 selects between program flash memory + * (=0) and data flash memory (=1).*/ +#if FLASH_SSD_IS_FLEXNVM_ENABLED + if ((address >= config->DFlashBlockBase) && (address <= (config->DFlashBlockBase + config->DFlashTotalSize))) + { + info->convertedAddress = address - config->DFlashBlockBase + 0x800000U; + info->activeSectorSize = FSL_FEATURE_FLASH_FLEX_NVM_BLOCK_SECTOR_SIZE; + info->activeBlockSize = config->DFlashTotalSize / FSL_FEATURE_FLASH_FLEX_NVM_BLOCK_COUNT; + + info->blockWriteUnitSize = FSL_FEATURE_FLASH_FLEX_NVM_BLOCK_WRITE_UNIT_SIZE; + info->sectorCmdAddressAligment = FSL_FEATURE_FLASH_FLEX_NVM_SECTOR_CMD_ADDRESS_ALIGMENT; + info->sectionCmdAddressAligment = FSL_FEATURE_FLASH_FLEX_NVM_SECTION_CMD_ADDRESS_ALIGMENT; + info->resourceCmdAddressAligment = FSL_FEATURE_FLASH_FLEX_NVM_RESOURCE_CMD_ADDRESS_ALIGMENT; + info->checkCmdAddressAligment = FSL_FEATURE_FLASH_FLEX_NVM_CHECK_CMD_ADDRESS_ALIGMENT; + } + else +#endif /* FLASH_SSD_IS_FLEXNVM_ENABLED */ + { + info->convertedAddress = address - config->PFlashBlockBase; + info->activeSectorSize = config->PFlashSectorSize; + info->activeBlockSize = config->PFlashTotalSize / config->PFlashBlockCount; + + info->blockWriteUnitSize = FSL_FEATURE_FLASH_PFLASH_BLOCK_WRITE_UNIT_SIZE; + info->sectorCmdAddressAligment = FSL_FEATURE_FLASH_PFLASH_SECTOR_CMD_ADDRESS_ALIGMENT; + info->sectionCmdAddressAligment = FSL_FEATURE_FLASH_PFLASH_SECTION_CMD_ADDRESS_ALIGMENT; + info->resourceCmdAddressAligment = FSL_FEATURE_FLASH_PFLASH_RESOURCE_CMD_ADDRESS_ALIGMENT; + info->checkCmdAddressAligment = FSL_FEATURE_FLASH_PFLASH_CHECK_CMD_ADDRESS_ALIGMENT; + } + + return kStatus_FLASH_Success; +} + +/*! @brief Validates the given user key for flash erase APIs.*/ +static status_t flash_check_user_key(uint32_t key) +{ + /* Validate the user key */ + if (key != kFLASH_ApiEraseKey) + { + return kStatus_FLASH_EraseKeyError; + } + + return kStatus_FLASH_Success; +} + +#if FLASH_SSD_IS_FLEXNVM_ENABLED +/*! @brief Updates FlexNVM memory partition status according to data flash 0 IFR.*/ +static status_t flash_update_flexnvm_memory_partition_status(flash_config_t *config) +{ + struct + { + uint32_t reserved0; + uint8_t FlexNVMPartitionCode; + uint8_t EEPROMDataSetSize; + uint16_t reserved1; + } dataIFRReadOut; + status_t returnCode; + + if (config == NULL) + { + return kStatus_FLASH_InvalidArgument; + } + + /* Get FlexNVM memory partition info from data flash IFR */ + returnCode = FLASH_ReadResource(config, DFLASH_IFR_READRESOURCE_START_ADDRESS, (uint32_t *)&dataIFRReadOut, + sizeof(dataIFRReadOut), kFLASH_ResourceOptionFlashIfr); + if (returnCode != kStatus_FLASH_Success) + { + return kStatus_FLASH_PartitionStatusUpdateFailure; + } + + /* Fill out partitioned EEPROM size */ + dataIFRReadOut.EEPROMDataSetSize &= 0x0FU; + switch (dataIFRReadOut.EEPROMDataSetSize) + { + case 0x00U: + config->EEpromTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_0000; + break; + case 0x01U: + config->EEpromTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_0001; + break; + case 0x02U: + config->EEpromTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_0010; + break; + case 0x03U: + config->EEpromTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_0011; + break; + case 0x04U: + config->EEpromTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_0100; + break; + case 0x05U: + config->EEpromTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_0101; + break; + case 0x06U: + config->EEpromTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_0110; + break; + case 0x07U: + config->EEpromTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_0111; + break; + case 0x08U: + config->EEpromTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_1000; + break; + case 0x09U: + config->EEpromTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_1001; + break; + case 0x0AU: + config->EEpromTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_1010; + break; + case 0x0BU: + config->EEpromTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_1011; + break; + case 0x0CU: + config->EEpromTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_1100; + break; + case 0x0DU: + config->EEpromTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_1101; + break; + case 0x0EU: + config->EEpromTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_1110; + break; + case 0x0FU: + config->EEpromTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_1111; + break; + default: + config->EEpromTotalSize = FLEX_NVM_EEPROM_SIZE_FOR_EEESIZE_RESERVED; + break; + } + + /* Fill out partitioned DFlash size */ + dataIFRReadOut.FlexNVMPartitionCode &= 0x0FU; + switch (dataIFRReadOut.FlexNVMPartitionCode) + { + case 0x00U: +#if (FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0000 != 0xFFFFFFFF) + config->DFlashTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0000; +#else + config->DFlashTotalSize = FLEX_NVM_DFLASH_SIZE_FOR_DEPART_RESERVED; +#endif /* FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0000 */ + break; + case 0x01U: +#if (FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0001 != 0xFFFFFFFF) + config->DFlashTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0001; +#else + config->DFlashTotalSize = FLEX_NVM_DFLASH_SIZE_FOR_DEPART_RESERVED; +#endif /* FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0001 */ + break; + case 0x02U: +#if (FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0010 != 0xFFFFFFFF) + config->DFlashTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0010; +#else + config->DFlashTotalSize = FLEX_NVM_DFLASH_SIZE_FOR_DEPART_RESERVED; +#endif /* FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0010 */ + break; + case 0x03U: +#if (FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0011 != 0xFFFFFFFF) + config->DFlashTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0011; +#else + config->DFlashTotalSize = FLEX_NVM_DFLASH_SIZE_FOR_DEPART_RESERVED; +#endif /* FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0011 */ + break; + case 0x04U: +#if (FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0100 != 0xFFFFFFFF) + config->DFlashTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0100; +#else + config->DFlashTotalSize = FLEX_NVM_DFLASH_SIZE_FOR_DEPART_RESERVED; +#endif /* FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0100 */ + break; + case 0x05U: +#if (FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0101 != 0xFFFFFFFF) + config->DFlashTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0101; +#else + config->DFlashTotalSize = FLEX_NVM_DFLASH_SIZE_FOR_DEPART_RESERVED; +#endif /* FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0101 */ + break; + case 0x06U: +#if (FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0110 != 0xFFFFFFFF) + config->DFlashTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0110; +#else + config->DFlashTotalSize = FLEX_NVM_DFLASH_SIZE_FOR_DEPART_RESERVED; +#endif /* FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0110 */ + break; + case 0x07U: +#if (FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0111 != 0xFFFFFFFF) + config->DFlashTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0111; +#else + config->DFlashTotalSize = FLEX_NVM_DFLASH_SIZE_FOR_DEPART_RESERVED; +#endif /* FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_0111 */ + break; + case 0x08U: +#if (FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1000 != 0xFFFFFFFF) + config->DFlashTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1000; +#else + config->DFlashTotalSize = FLEX_NVM_DFLASH_SIZE_FOR_DEPART_RESERVED; +#endif /* FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1000 */ + break; + case 0x09U: +#if (FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1001 != 0xFFFFFFFF) + config->DFlashTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1001; +#else + config->DFlashTotalSize = FLEX_NVM_DFLASH_SIZE_FOR_DEPART_RESERVED; +#endif /* FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1001 */ + break; + case 0x0AU: +#if (FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1010 != 0xFFFFFFFF) + config->DFlashTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1010; +#else + config->DFlashTotalSize = FLEX_NVM_DFLASH_SIZE_FOR_DEPART_RESERVED; +#endif /* FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1010 */ + break; + case 0x0BU: +#if (FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1011 != 0xFFFFFFFF) + config->DFlashTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1011; +#else + config->DFlashTotalSize = FLEX_NVM_DFLASH_SIZE_FOR_DEPART_RESERVED; +#endif /* FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1011 */ + break; + case 0x0CU: +#if (FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1100 != 0xFFFFFFFF) + config->DFlashTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1100; +#else + config->DFlashTotalSize = FLEX_NVM_DFLASH_SIZE_FOR_DEPART_RESERVED; +#endif /* FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1100 */ + break; + case 0x0DU: +#if (FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1101 != 0xFFFFFFFF) + config->DFlashTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1101; +#else + config->DFlashTotalSize = FLEX_NVM_DFLASH_SIZE_FOR_DEPART_RESERVED; +#endif /* FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1101 */ + break; + case 0x0EU: +#if (FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1110 != 0xFFFFFFFF) + config->DFlashTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1110; +#else + config->DFlashTotalSize = FLEX_NVM_DFLASH_SIZE_FOR_DEPART_RESERVED; +#endif /* FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1110 */ + break; + case 0x0FU: +#if (FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1111 != 0xFFFFFFFF) + config->DFlashTotalSize = FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1111; +#else + config->DFlashTotalSize = FLEX_NVM_DFLASH_SIZE_FOR_DEPART_RESERVED; +#endif /* FSL_FEATURE_FLASH_FLEX_NVM_DFLASH_SIZE_FOR_DEPART_1111 */ + break; + default: + config->DFlashTotalSize = FLEX_NVM_DFLASH_SIZE_FOR_DEPART_RESERVED; + break; + } + + return kStatus_FLASH_Success; +} +#endif /* FLASH_SSD_IS_FLEXNVM_ENABLED */ + +#if defined(FSL_FEATURE_FLASH_HAS_READ_RESOURCE_CMD) && FSL_FEATURE_FLASH_HAS_READ_RESOURCE_CMD +/*! @brief Validates the range of the given resource address.*/ +static status_t flash_check_resource_range(uint32_t start, + uint32_t lengthInBytes, + uint32_t alignmentBaseline, + flash_read_resource_option_t option) +{ + status_t status; + uint32_t maxReadbleAddress; + + if ((start & (alignmentBaseline - 1)) || (lengthInBytes & (alignmentBaseline - 1))) + { + return kStatus_FLASH_AlignmentError; + } + + status = kStatus_FLASH_Success; + + maxReadbleAddress = start + lengthInBytes - 1; + if (option == kFLASH_ResourceOptionVersionId) + { + if ((start != kFLASH_ResourceRangeVersionIdStart) || + ((start + lengthInBytes - 1) != kFLASH_ResourceRangeVersionIdEnd)) + { + status = kStatus_FLASH_InvalidArgument; + } + } + else if (option == kFLASH_ResourceOptionFlashIfr) + { + if (maxReadbleAddress < kFLASH_ResourceRangePflashIfrSizeInBytes) + { + } +#if defined(FSL_FEATURE_FLASH_HAS_PFLASH_BLOCK_SWAP) && FSL_FEATURE_FLASH_HAS_PFLASH_BLOCK_SWAP + else if ((start >= kFLASH_ResourceRangePflashSwapIfrStart) && + (maxReadbleAddress <= kFLASH_ResourceRangePflashSwapIfrEnd)) + { + } +#endif /* FSL_FEATURE_FLASH_HAS_PFLASH_BLOCK_SWAP */ + else if ((start >= kFLASH_ResourceRangeDflashIfrStart) && + (maxReadbleAddress <= kFLASH_ResourceRangeDflashIfrEnd)) + { + } + else + { + status = kStatus_FLASH_InvalidArgument; + } + } + else + { + status = kStatus_FLASH_InvalidArgument; + } + + return status; +} +#endif /* FSL_FEATURE_FLASH_HAS_READ_RESOURCE_CMD */ + +#if defined(FSL_FEATURE_FLASH_HAS_SWAP_CONTROL_CMD) && FSL_FEATURE_FLASH_HAS_SWAP_CONTROL_CMD +/*! @brief Validates the gived swap control option.*/ +static status_t flash_check_swap_control_option(flash_swap_control_option_t option) +{ + if ((option == kFLASH_SwapControlOptionIntializeSystem) || (option == kFLASH_SwapControlOptionSetInUpdateState) || + (option == kFLASH_SwapControlOptionSetInCompleteState) || (option == kFLASH_SwapControlOptionReportStatus) || + (option == kFLASH_SwapControlOptionDisableSystem)) + { + return kStatus_FLASH_Success; + } + + return kStatus_FLASH_InvalidArgument; +} +#endif /* FSL_FEATURE_FLASH_HAS_SWAP_CONTROL_CMD */ + +#if defined(FSL_FEATURE_FLASH_HAS_PFLASH_BLOCK_SWAP) && FSL_FEATURE_FLASH_HAS_PFLASH_BLOCK_SWAP +/*! @brief Validates the gived address to see if it is equal to swap indicator address in pflash swap IFR.*/ +static status_t flash_validate_swap_indicator_address(flash_config_t *config, uint32_t address) +{ + flash_swap_ifr_field_data_t flashSwapIfrFieldData; + uint32_t swapIndicatorAddress; + + status_t returnCode; + returnCode = + FLASH_ReadResource(config, kFLASH_ResourceRangePflashSwapIfrStart, flashSwapIfrFieldData.flashSwapIfrData, + sizeof(flashSwapIfrFieldData.flashSwapIfrData), kFLASH_ResourceOptionFlashIfr); + + if (returnCode != kStatus_FLASH_Success) + { + return returnCode; + } + + /* The high bits value of Swap Indicator Address is stored in Program Flash Swap IFR Field, + * the low severval bit value of Swap Indicator Address is always 1'b0 */ + swapIndicatorAddress = (uint32_t)flashSwapIfrFieldData.flashSwapIfrField.swapIndicatorAddress * + FSL_FEATURE_FLASH_PFLASH_SWAP_CONTROL_CMD_ADDRESS_ALIGMENT; + if (address != swapIndicatorAddress) + { + return kStatus_FLASH_SwapIndicatorAddressError; + } + + return returnCode; +} +#endif /* FSL_FEATURE_FLASH_HAS_PFLASH_BLOCK_SWAP */ + +#if defined(FSL_FEATURE_FLASH_HAS_SET_FLEXRAM_FUNCTION_CMD) && FSL_FEATURE_FLASH_HAS_SET_FLEXRAM_FUNCTION_CMD +/*! @brief Validates the gived flexram function option.*/ +static inline status_t flasn_check_flexram_function_option_range(flash_flexram_function_option_t option) +{ + if ((option != kFLASH_FlexramFunctionOptionAvailableAsRam) && + (option != kFLASH_FlexramFunctionOptionAvailableForEeprom)) + { + return kStatus_FLASH_InvalidArgument; + } + + return kStatus_FLASH_Success; +} +#endif /* FSL_FEATURE_FLASH_HAS_SET_FLEXRAM_FUNCTION_CMD */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flash.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flash.h new file mode 100644 index 00000000000..8941ad7a84f --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flash.h @@ -0,0 +1,1209 @@ +/* + * Copyright (c) 2013-2016, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _FSL_FLASH_H_ +#define _FSL_FLASH_H_ + +#if (defined(BL_TARGET_FLASH) || defined(BL_TARGET_ROM) || defined(BL_TARGET_RAM)) +#include +#include +#include "fsl_device_registers.h" +#include "bootloader_common.h" +#else +#include "fsl_common.h" +#endif + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! + * @addtogroup flash_driver + * @{ + */ + +/*! + * @name Flash version + * @{ + */ +/*! @brief Construct the version number for drivers. */ +#if !defined(MAKE_VERSION) +#define MAKE_VERSION(major, minor, bugfix) (((major) << 16) | ((minor) << 8) | (bugfix)) +#endif + +/*! @brief FLASH driver version for SDK*/ +#define FSL_FLASH_DRIVER_VERSION (MAKE_VERSION(2, 1, 0)) /*!< Version 2.1.0. */ + +/*! @brief FLASH driver version for ROM*/ +enum _flash_driver_version_constants +{ + kFLASH_DriverVersionName = 'F', /*!< Flash driver version name.*/ + kFLASH_DriverVersionMajor = 2, /*!< Major flash driver version.*/ + kFLASH_DriverVersionMinor = 1, /*!< Minor flash driver version.*/ + kFLASH_DriverVersionBugfix = 0 /*!< Bugfix for flash driver version.*/ +}; +/*@}*/ + +/*! + * @name Flash configuration + * @{ + */ +/*! @brief Whether to support FlexNVM in flash driver */ +#if !defined(FLASH_SSD_CONFIG_ENABLE_FLEXNVM_SUPPORT) +#define FLASH_SSD_CONFIG_ENABLE_FLEXNVM_SUPPORT 1 /*!< Enable FlexNVM support by default. */ +#endif + +/*! @brief Whether the FlexNVM is enabled in flash driver */ +#define FLASH_SSD_IS_FLEXNVM_ENABLED (FLASH_SSD_CONFIG_ENABLE_FLEXNVM_SUPPORT && FSL_FEATURE_FLASH_HAS_FLEX_NVM) + +/*! @brief Flash driver location. */ +#if !defined(FLASH_DRIVER_IS_FLASH_RESIDENT) +#if (!defined(BL_TARGET_ROM) && !defined(BL_TARGET_RAM)) +#define FLASH_DRIVER_IS_FLASH_RESIDENT 1 /*!< Used for flash resident application. */ +#else +#define FLASH_DRIVER_IS_FLASH_RESIDENT 0 /*!< Used for non-flash resident application. */ +#endif +#endif + +/*! @brief Flash Driver Export option */ +#if !defined(FLASH_DRIVER_IS_EXPORTED) +#if (defined(BL_TARGET_ROM) || defined(BL_TARGET_FLASH)) +#define FLASH_DRIVER_IS_EXPORTED 1 /*!< Used for ROM bootloader. */ +#else +#define FLASH_DRIVER_IS_EXPORTED 0 /*!< Used for SDK application. */ +#endif +#endif +/*@}*/ + +/*! + * @name Flash status + * @{ + */ +/*! @brief Flash driver status group. */ +#if defined(kStatusGroup_FlashDriver) +#define kStatusGroupGeneric kStatusGroup_Generic +#define kStatusGroupFlashDriver kStatusGroup_FlashDriver +#elif defined(kStatusGroup_FLASH) +#define kStatusGroupGeneric kStatusGroup_Generic +#define kStatusGroupFlashDriver kStatusGroup_FLASH +#else +#define kStatusGroupGeneric 0 +#define kStatusGroupFlashDriver 1 +#endif + +/*! @brief Construct a status code value from a group and code number. */ +#if !defined(MAKE_STATUS) +#define MAKE_STATUS(group, code) ((((group)*100) + (code))) +#endif + +/*! + * @brief Flash driver status codes. + */ +enum _flash_status +{ + kStatus_FLASH_Success = MAKE_STATUS(kStatusGroupGeneric, 0), /*!< API is executed successfully*/ + kStatus_FLASH_InvalidArgument = MAKE_STATUS(kStatusGroupGeneric, 4), /*!< Invalid argument*/ + kStatus_FLASH_SizeError = MAKE_STATUS(kStatusGroupFlashDriver, 0), /*!< Error size*/ + kStatus_FLASH_AlignmentError = + MAKE_STATUS(kStatusGroupFlashDriver, 1), /*!< Parameter is not aligned with specified baseline*/ + kStatus_FLASH_AddressError = MAKE_STATUS(kStatusGroupFlashDriver, 2), /*!< Address is out of range */ + kStatus_FLASH_AccessError = + MAKE_STATUS(kStatusGroupFlashDriver, 3), /*!< Invalid instruction codes and out-of bounds addresses */ + kStatus_FLASH_ProtectionViolation = MAKE_STATUS( + kStatusGroupFlashDriver, 4), /*!< The program/erase operation is requested to execute on protected areas */ + kStatus_FLASH_CommandFailure = + MAKE_STATUS(kStatusGroupFlashDriver, 5), /*!< Run-time error during command execution. */ + kStatus_FLASH_UnknownProperty = MAKE_STATUS(kStatusGroupFlashDriver, 6), /*!< Unknown property.*/ + kStatus_FLASH_EraseKeyError = MAKE_STATUS(kStatusGroupFlashDriver, 7), /*!< API erase key is invalid.*/ + kStatus_FLASH_RegionExecuteOnly = MAKE_STATUS(kStatusGroupFlashDriver, 8), /*!< Current region is execute only.*/ + kStatus_FLASH_ExecuteInRamFunctionNotReady = + MAKE_STATUS(kStatusGroupFlashDriver, 9), /*!< Execute-in-RAM function is not available.*/ + kStatus_FLASH_PartitionStatusUpdateFailure = + MAKE_STATUS(kStatusGroupFlashDriver, 10), /*!< Failed to update partition status.*/ + kStatus_FLASH_SetFlexramAsEepromError = + MAKE_STATUS(kStatusGroupFlashDriver, 11), /*!< Failed to set flexram as eeprom.*/ + kStatus_FLASH_RecoverFlexramAsRamError = + MAKE_STATUS(kStatusGroupFlashDriver, 12), /*!< Failed to recover flexram as RAM.*/ + kStatus_FLASH_SetFlexramAsRamError = MAKE_STATUS(kStatusGroupFlashDriver, 13), /*!< Failed to set flexram as RAM.*/ + kStatus_FLASH_RecoverFlexramAsEepromError = + MAKE_STATUS(kStatusGroupFlashDriver, 14), /*!< Failed to recover flexram as eeprom.*/ + kStatus_FLASH_CommandNotSupported = MAKE_STATUS(kStatusGroupFlashDriver, 15), /*!< Flash API is not supported.*/ + kStatus_FLASH_SwapSystemNotInUninitialized = + MAKE_STATUS(kStatusGroupFlashDriver, 16), /*!< Swap system is not in uninitialzed state.*/ + kStatus_FLASH_SwapIndicatorAddressError = + MAKE_STATUS(kStatusGroupFlashDriver, 17), /*!< Swap indicator address is invalid.*/ +}; +/*@}*/ + +/*! + * @name Flash API key + * @{ + */ +/*! @brief Construct the four char code for flash driver API key. */ +#if !defined(FOUR_CHAR_CODE) +#define FOUR_CHAR_CODE(a, b, c, d) (((d) << 24) | ((c) << 16) | ((b) << 8) | ((a))) +#endif + +/*! + * @brief Enumeration for flash driver API keys. + * + * @note The resulting value is built with a byte order such that the string + * being readable in expected order when viewed in a hex editor, if the value + * is treated as a 32-bit little endian value. + */ +enum _flash_driver_api_keys +{ + kFLASH_ApiEraseKey = FOUR_CHAR_CODE('k', 'f', 'e', 'k') /*!< Key value used to validate all flash erase APIs.*/ +}; +/*@}*/ + +/*! + * @brief Enumeration for supported flash margin levels. + */ +typedef enum _flash_margin_value +{ + kFLASH_MarginValueNormal, /*!< Use the 'normal' read level for 1s.*/ + kFLASH_MarginValueUser, /*!< Apply the 'User' margin to the normal read-1 level.*/ + kFLASH_MarginValueFactory, /*!< Apply the 'Factory' margin to the normal read-1 level.*/ + kFLASH_MarginValueInvalid /*!< Not real margin level, Used to determine the range of valid margin level. */ +} flash_margin_value_t; + +/*! + * @brief Enumeration for the three possible flash security states. + */ +typedef enum _flash_security_state +{ + kFLASH_SecurityStateNotSecure, /*!< Flash is not secure.*/ + kFLASH_SecurityStateBackdoorEnabled, /*!< Flash backdoor is enabled.*/ + kFLASH_SecurityStateBackdoorDisabled /*!< Flash backdoor is disabled.*/ +} flash_security_state_t; + +/*! + * @brief Enumeration for the three possible flash protection levels. + */ +typedef enum _flash_protection_state +{ + kFLASH_ProtectionStateUnprotected, /*!< Flash region is not protected.*/ + kFLASH_ProtectionStateProtected, /*!< Flash region is protected.*/ + kFLASH_ProtectionStateMixed /*!< Flash is mixed with protected and unprotected region.*/ +} flash_protection_state_t; + +/*! + * @brief Enumeration for the three possible flash execute access levels. + */ +typedef enum _flash_execute_only_access_state +{ + kFLASH_AccessStateUnLimited, /*!< Flash region is unLimited.*/ + kFLASH_AccessStateExecuteOnly, /*!< Flash region is execute only.*/ + kFLASH_AccessStateMixed /*!< Flash is mixed with unLimited and execute only region.*/ +} flash_execute_only_access_state_t; + +/*! + * @brief Enumeration for various flash properties. + */ +typedef enum _flash_property_tag +{ + kFLASH_PropertyPflashSectorSize = 0x00U, /*!< Pflash sector size property.*/ + kFLASH_PropertyPflashTotalSize = 0x01U, /*!< Pflash total size property.*/ + kFLASH_PropertyPflashBlockSize = 0x02U, /*!< Pflash block size property.*/ + kFLASH_PropertyPflashBlockCount = 0x03U, /*!< Pflash block count property.*/ + kFLASH_PropertyPflashBlockBaseAddr = 0x04U, /*!< Pflash block base address property.*/ + kFLASH_PropertyPflashFacSupport = 0x05U, /*!< Pflash fac support property.*/ + kFLASH_PropertyPflashAccessSegmentSize = 0x06U, /*!< Pflash access segment size property.*/ + kFLASH_PropertyPflashAccessSegmentCount = 0x07U, /*!< Pflash access segment count property.*/ + kFLASH_PropertyFlexRamBlockBaseAddr = 0x08U, /*!< FlexRam block base address property.*/ + kFLASH_PropertyFlexRamTotalSize = 0x09U, /*!< FlexRam total size property.*/ + kFLASH_PropertyDflashSectorSize = 0x10U, /*!< Dflash sector size property.*/ + kFLASH_PropertyDflashTotalSize = 0x11U, /*!< Dflash total size property.*/ + kFLASH_PropertyDflashBlockSize = 0x12U, /*!< Dflash block count property.*/ + kFLASH_PropertyDflashBlockCount = 0x13U, /*!< Dflash block base address property.*/ + kFLASH_PropertyDflashBlockBaseAddr = 0x14U, /*!< Eeprom total size property.*/ + kFLASH_PropertyEepromTotalSize = 0x15U +} flash_property_tag_t; + +/*! + * @brief Constants for execute-in-RAM flash function. + */ +enum _flash_execute_in_ram_function_constants +{ + kFLASH_ExecuteInRamFunctionMaxSizeInWords = 16U, /*!< Max size of execute-in-RAM function.*/ + kFLASH_ExecuteInRamFunctionTotalNum = 2U /*!< Total number of execute-in-RAM functions.*/ +}; + +/*! + * @brief Flash execute-in-RAM function information. + */ +typedef struct _flash_execute_in_ram_function_config +{ + uint32_t activeFunctionCount; /*!< Number of available execute-in-RAM functions.*/ + uint32_t *flashRunCommand; /*!< execute-in-RAM function: flash_run_command.*/ + uint32_t *flashCacheClearCommand; /*!< execute-in-RAM function: flash_cache_clear_command.*/ +} flash_execute_in_ram_function_config_t; + +/*! + * @brief Enumeration for the two possible options of flash read resource command. + */ +typedef enum _flash_read_resource_option +{ + kFLASH_ResourceOptionFlashIfr = + 0x00U, /*!< Select code for Program flash 0 IFR, Program flash swap 0 IFR, Data flash 0 IFR */ + kFLASH_ResourceOptionVersionId = 0x01U /*!< Select code for Version ID*/ +} flash_read_resource_option_t; + +/*! + * @brief Enumeration for the range of special-purpose flash resource + */ +enum _flash_read_resource_range +{ +#if (FSL_FEATURE_FLASH_IS_FTFE == 1) + kFLASH_ResourceRangePflashIfrSizeInBytes = 1024U, /*!< Pflash IFR size in byte.*/ + kFLASH_ResourceRangeVersionIdSizeInBytes = 8U, /*!< Version ID IFR size in byte.*/ + kFLASH_ResourceRangeVersionIdStart = 0x08U, /*!< Version ID IFR start address.*/ + kFLASH_ResourceRangeVersionIdEnd = 0x0FU, /*!< Version ID IFR end address.*/ + kFLASH_ResourceRangePflashSwapIfrStart = 0x40000U, /*!< Pflash swap IFR start address.*/ + kFLASH_ResourceRangePflashSwapIfrEnd = + (kFLASH_ResourceRangePflashSwapIfrStart + 0x3FFU), /*!< Pflash swap IFR end address.*/ +#else /* FSL_FEATURE_FLASH_IS_FTFL == 1 or FSL_FEATURE_FLASH_IS_FTFA = =1 */ + kFLASH_ResourceRangePflashIfrSizeInBytes = 256U, /*!< Pflash IFR size in byte.*/ + kFLASH_ResourceRangeVersionIdSizeInBytes = 8U, /*!< Version ID IFR size in byte.*/ + kFLASH_ResourceRangeVersionIdStart = 0x00U, /*!< Version ID IFR start address.*/ + kFLASH_ResourceRangeVersionIdEnd = 0x07U, /*!< Version ID IFR end address.*/ +#if 0x20000U == (FSL_FEATURE_FLASH_PFLASH_BLOCK_COUNT * FSL_FEATURE_FLASH_PFLASH_BLOCK_SIZE) + kFLASH_ResourceRangePflashSwapIfrStart = 0x8000U, /*!< Pflash swap IFR start address.*/ +#elif 0x40000U == (FSL_FEATURE_FLASH_PFLASH_BLOCK_COUNT * FSL_FEATURE_FLASH_PFLASH_BLOCK_SIZE) + kFLASH_ResourceRangePflashSwapIfrStart = 0x10000U, /*!< Pflash swap IFR start address.*/ +#elif 0x80000U == (FSL_FEATURE_FLASH_PFLASH_BLOCK_COUNT * FSL_FEATURE_FLASH_PFLASH_BLOCK_SIZE) + kFLASH_ResourceRangePflashSwapIfrStart = 0x20000U, /*!< Pflash swap IFR start address.*/ +#else + kFLASH_ResourceRangePflashSwapIfrStart = 0, +#endif + kFLASH_ResourceRangePflashSwapIfrEnd = + (kFLASH_ResourceRangePflashSwapIfrStart + 0xFFU), /*!< Pflash swap IFR end address.*/ +#endif + kFLASH_ResourceRangeDflashIfrStart = 0x800000U, /*!< Dflash IFR start address.*/ + kFLASH_ResourceRangeDflashIfrEnd = 0x8003FFU, /*!< Dflash IFR end address.*/ +}; + +/*! + * @brief Enumeration for the two possilbe options of set flexram function command. + */ +typedef enum _flash_flexram_function_option +{ + kFLASH_FlexramFunctionOptionAvailableAsRam = 0xFFU, /*!< Option used to make FlexRAM available as RAM */ + kFLASH_FlexramFunctionOptionAvailableForEeprom = 0x00U /*!< Option used to make FlexRAM available for EEPROM */ +} flash_flexram_function_option_t; + +/*! + * @brief Enumeration for acceleration RAM property. + */ +enum _flash_acceleration_ram_property +{ + kFLASH_AccelerationRamSize = 0x400U +}; + +/*! + * @brief Enumeration for the possible options of Swap function + */ +typedef enum _flash_swap_function_option +{ + kFLASH_SwapFunctionOptionEnable = 0x00U, /*!< Option used to enable Swap function */ + kFLASH_SwapFunctionOptionDisable = 0x01U /*!< Option used to Disable Swap function */ +} flash_swap_function_option_t; + +/*! + * @brief Enumeration for the possible options of Swap Control commands + */ +typedef enum _flash_swap_control_option +{ + kFLASH_SwapControlOptionIntializeSystem = 0x01U, /*!< Option used to Intialize Swap System */ + kFLASH_SwapControlOptionSetInUpdateState = 0x02U, /*!< Option used to Set Swap in Update State */ + kFLASH_SwapControlOptionSetInCompleteState = 0x04U, /*!< Option used to Set Swap in Complete State */ + kFLASH_SwapControlOptionReportStatus = 0x08U, /*!< Option used to Report Swap Status */ + kFLASH_SwapControlOptionDisableSystem = 0x10U /*!< Option used to Disable Swap Status */ +} flash_swap_control_option_t; + +/*! + * @brief Enumeration for the possible flash swap status. + */ +typedef enum _flash_swap_state +{ + kFLASH_SwapStateUninitialized = 0x00U, /*!< Flash swap system is in uninitialized state.*/ + kFLASH_SwapStateReady = 0x01U, /*!< Flash swap system is in ready state.*/ + kFLASH_SwapStateUpdate = 0x02U, /*!< Flash swap system is in update state.*/ + kFLASH_SwapStateUpdateErased = 0x03U, /*!< Flash swap system is in updateErased state.*/ + kFLASH_SwapStateComplete = 0x04U, /*!< Flash swap system is in complete state.*/ + kFLASH_SwapStateDisabled = 0x05U /*!< Flash swap system is in disabled state.*/ +} flash_swap_state_t; + +/*! + * @breif Enumeration for the possible flash swap block status + */ +typedef enum _flash_swap_block_status +{ + kFLASH_SwapBlockStatusLowerHalfProgramBlocksAtZero = + 0x00U, /*!< Swap block status is that lower half program block at zero.*/ + kFLASH_SwapBlockStatusUpperHalfProgramBlocksAtZero = + 0x01U, /*!< Swap block status is that upper half program block at zero.*/ +} flash_swap_block_status_t; + +/*! + * @brief Flash Swap information. + */ +typedef struct _flash_swap_state_config +{ + flash_swap_state_t flashSwapState; /*!< Current swap system status.*/ + flash_swap_block_status_t currentSwapBlockStatus; /*!< Current swap block status.*/ + flash_swap_block_status_t nextSwapBlockStatus; /*!< Next swap block status.*/ +} flash_swap_state_config_t; + +/*! + * @brief Flash Swap IFR fields. + */ +typedef struct _flash_swap_ifr_field_config +{ + uint16_t swapIndicatorAddress; /*!< Swap indicator address field.*/ + uint16_t swapEnableWord; /*!< Swap enable word field.*/ + uint8_t reserved0[4]; /*!< Reserved field.*/ +#if (FSL_FEATURE_FLASH_IS_FTFE == 1) + uint8_t reserved1[2]; /*!< Reserved field.*/ + uint16_t swapDisableWord; /*!< Swap disable word field.*/ + uint8_t reserved2[4]; /*!< Reserved field.*/ +#endif +} flash_swap_ifr_field_config_t; + +/*! + * @brief Flash Swap IFR field data. + */ +typedef union _flash_swap_ifr_field_data +{ + uint32_t flashSwapIfrData[2]; /*!< Flash Swap IFR field data .*/ + flash_swap_ifr_field_config_t flashSwapIfrField; /*!< Flash Swap IFR field struct.*/ +} flash_swap_ifr_field_data_t; + +/*! + * @brief Enumeration for FlexRAM load during reset option. + */ +typedef enum _flash_partition_flexram_load_option +{ + kFLASH_PartitionFlexramLoadOptionLoadedWithValidEepromData = + 0x00U, /*!< FlexRAM is loaded with valid EEPROM data during reset sequence.*/ + kFLASH_PartitionFlexramLoadOptionNotLoaded = 0x01U /*!< FlexRAM is not loaded during reset sequence.*/ +} flash_partition_flexram_load_option_t; + +/*! @brief callback type used for pflash block*/ +typedef void (*flash_callback_t)(void); + +/*! + * @brief Active flash information for current operation. + */ +typedef struct _flash_operation_config +{ + uint32_t convertedAddress; /*!< Converted address for current flash type.*/ + uint32_t activeSectorSize; /*!< Sector size of current flash type.*/ + uint32_t activeBlockSize; /*!< Block size of current flash type.*/ + uint32_t blockWriteUnitSize; /*!< write unit size.*/ + uint32_t sectorCmdAddressAligment; /*!< Erase sector command address alignment.*/ + uint32_t sectionCmdAddressAligment; /*!< Program/Verify section command address alignment.*/ + uint32_t resourceCmdAddressAligment; /*!< Read resource command address alignment.*/ + uint32_t checkCmdAddressAligment; /*!< Program check command address alignment.*/ +} flash_operation_config_t; + +/*! @brief Flash driver state information. + * + * An instance of this structure is allocated by the user of the flash driver and + * passed into each of the driver APIs. + */ +typedef struct _flash_config +{ + uint32_t PFlashBlockBase; /*!< Base address of the first PFlash block */ + uint32_t PFlashTotalSize; /*!< Size of all combined PFlash block. */ + uint32_t PFlashBlockCount; /*!< Number of PFlash blocks. */ + uint32_t PFlashSectorSize; /*!< Size in bytes of a sector of PFlash. */ + flash_callback_t PFlashCallback; /*!< Callback function for flash API. */ + uint32_t PFlashAccessSegmentSize; /*!< Size in bytes of a access segment of PFlash. */ + uint32_t PFlashAccessSegmentCount; /*!< Number of PFlash access segments. */ + uint32_t *flashExecuteInRamFunctionInfo; /*!< Info struct of flash execute-in-RAM function. */ + uint32_t FlexRAMBlockBase; /*!< For FlexNVM device, this is the base address of FlexRAM + For non-FlexNVM device, this is the base address of acceleration RAM memory */ + uint32_t FlexRAMTotalSize; /*!< For FlexNVM device, this is the size of FlexRAM + For non-FlexNVM device, this is the size of acceleration RAM memory */ + uint32_t DFlashBlockBase; /*!< For FlexNVM device, this is the base address of D-Flash memory (FlexNVM memory); + For non-FlexNVM device, this field is unused */ + uint32_t DFlashTotalSize; /*!< For FlexNVM device, this is total size of the FlexNVM memory; + For non-FlexNVM device, this field is unused */ + uint32_t EEpromTotalSize; /*!< For FlexNVM device, this is the size in byte of EEPROM area which was partitioned + from FlexRAM; + For non-FlexNVM device, this field is unused */ +} flash_config_t; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @name Initialization + * @{ + */ + +/*! + * @brief Initializes global flash properties structure members + * + * This function checks and initializes Flash module for the other Flash APIs. + * + * @param config Pointer to storage for the driver runtime state. + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + * @retval #kStatus_FLASH_ExecuteInRamFunctionNotReady Execute-in-RAM function is not available. + * @retval #kStatus_FLASH_PartitionStatusUpdateFailure Failed to update partition status. + */ +status_t FLASH_Init(flash_config_t *config); + +/*! + * @brief Set the desired flash callback function + * + * @param config Pointer to storage for the driver runtime state. + * @param callback callback function to be stored in driver + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + */ +status_t FLASH_SetCallback(flash_config_t *config, flash_callback_t callback); + +/*! + * @brief Prepare flash execute-in-RAM functions + * + * @param config Pointer to storage for the driver runtime state. + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + */ +#if FLASH_DRIVER_IS_FLASH_RESIDENT +status_t FLASH_PrepareExecuteInRamFunctions(flash_config_t *config); +#endif + +/*@}*/ + +/*! + * @name Erasing + * @{ + */ + +/*! + * @brief Erases entire flash + * + * @param config Pointer to storage for the driver runtime state. + * @param key value used to validate all flash erase APIs. + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + * @retval #kStatus_FLASH_EraseKeyError API erase key is invalid. + * @retval #kStatus_FLASH_ExecuteInRamFunctionNotReady Execute-in-RAM function is not available. + * @retval #kStatus_FLASH_AccessError Invalid instruction codes and out-of bounds addresses. + * @retval #kStatus_FLASH_ProtectionViolation The program/erase operation is requested to execute on protected areas. + * @retval #kStatus_FLASH_CommandFailure Run-time error during command execution. + * @retval #kStatus_FLASH_PartitionStatusUpdateFailure Failed to update partition status + */ +status_t FLASH_EraseAll(flash_config_t *config, uint32_t key); + +/*! + * @brief Erases flash sectors encompassed by parameters passed into function + * + * This function erases the appropriate number of flash sectors based on the + * desired start address and length. + * + * @param config Pointer to storage for the driver runtime state. + * @param start The start address of the desired flash memory to be erased. + * The start address does not need to be sector aligned but must be word-aligned. + * @param lengthInBytes The length, given in bytes (not words or long-words) + * to be erased. Must be word aligned. + * @param key value used to validate all flash erase APIs. + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + * @retval #kStatus_FLASH_AlignmentError Parameter is not aligned with specified baseline. + * @retval #kStatus_FLASH_AddressError Address is out of range. + * @retval #kStatus_FLASH_EraseKeyError API erase key is invalid. + * @retval #kStatus_FLASH_ExecuteInRamFunctionNotReady Execute-in-RAM function is not available. + * @retval #kStatus_FLASH_AccessError Invalid instruction codes and out-of bounds addresses. + * @retval #kStatus_FLASH_ProtectionViolation The program/erase operation is requested to execute on protected areas. + * @retval #kStatus_FLASH_CommandFailure Run-time error during command execution. + */ +status_t FLASH_Erase(flash_config_t *config, uint32_t start, uint32_t lengthInBytes, uint32_t key); + +/*! + * @brief Erases entire flash, including protected sectors. + * + * @param config Pointer to storage for the driver runtime state. + * @param key value used to validate all flash erase APIs. + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + * @retval #kStatus_FLASH_EraseKeyError API erase key is invalid. + * @retval #kStatus_FLASH_ExecuteInRamFunctionNotReady Execute-in-RAM function is not available. + * @retval #kStatus_FLASH_AccessError Invalid instruction codes and out-of bounds addresses. + * @retval #kStatus_FLASH_ProtectionViolation The program/erase operation is requested to execute on protected areas. + * @retval #kStatus_FLASH_CommandFailure Run-time error during command execution. + * @retval #kStatus_FLASH_PartitionStatusUpdateFailure Failed to update partition status + */ +#if defined(FSL_FEATURE_FLASH_HAS_ERASE_ALL_BLOCKS_UNSECURE_CMD) && FSL_FEATURE_FLASH_HAS_ERASE_ALL_BLOCKS_UNSECURE_CMD +status_t FLASH_EraseAllUnsecure(flash_config_t *config, uint32_t key); +#endif + +/*! + * @brief Erases all program flash execute-only segments defined by the FXACC registers. + * + * @param config Pointer to storage for the driver runtime state. + * @param key value used to validate all flash erase APIs. + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + * @retval #kStatus_FLASH_EraseKeyError API erase key is invalid. + * @retval #kStatus_FLASH_ExecuteInRamFunctionNotReady Execute-in-RAM function is not available. + * @retval #kStatus_FLASH_AccessError Invalid instruction codes and out-of bounds addresses. + * @retval #kStatus_FLASH_ProtectionViolation The program/erase operation is requested to execute on protected areas. + * @retval #kStatus_FLASH_CommandFailure Run-time error during command execution. + */ +status_t FLASH_EraseAllExecuteOnlySegments(flash_config_t *config, uint32_t key); + +/*@}*/ + +/*! + * @name Programming + * @{ + */ + +/*! + * @brief Programs flash with data at locations passed in through parameters + * + * This function programs the flash memory with desired data for a given + * flash area as determined by the start address and length. + * + * @param config Pointer to storage for the driver runtime state. + * @param start The start address of the desired flash memory to be programmed. Must be + * word-aligned. + * @param src Pointer to the source buffer of data that is to be programmed + * into the flash. + * @param lengthInBytes The length, given in bytes (not words or long-words) + * to be programmed. Must be word-aligned. + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + * @retval #kStatus_FLASH_AlignmentError Parameter is not aligned with specified baseline. + * @retval #kStatus_FLASH_AddressError Address is out of range. + * @retval #kStatus_FLASH_ExecuteInRamFunctionNotReady Execute-in-RAM function is not available. + * @retval #kStatus_FLASH_AccessError Invalid instruction codes and out-of bounds addresses. + * @retval #kStatus_FLASH_ProtectionViolation The program/erase operation is requested to execute on protected areas. + * @retval #kStatus_FLASH_CommandFailure Run-time error during command execution. + */ +status_t FLASH_Program(flash_config_t *config, uint32_t start, uint32_t *src, uint32_t lengthInBytes); + +/*! + * @brief Programs Program Once Field through parameters + * + * This function programs the Program Once Field with desired data for a given + * flash area as determined by the index and length. + * + * @param config Pointer to storage for the driver runtime state. + * @param index The index indicating which area of Program Once Field to be programmed. + * @param src Pointer to the source buffer of data that is to be programmed + * into the Program Once Field. + * @param lengthInBytes The length, given in bytes (not words or long-words) + * to be programmed. Must be word-aligned. + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + * @retval #kStatus_FLASH_ExecuteInRamFunctionNotReady Execute-in-RAM function is not available. + * @retval #kStatus_FLASH_AccessError Invalid instruction codes and out-of bounds addresses. + * @retval #kStatus_FLASH_ProtectionViolation The program/erase operation is requested to execute on protected areas. + * @retval #kStatus_FLASH_CommandFailure Run-time error during command execution. + */ +status_t FLASH_ProgramOnce(flash_config_t *config, uint32_t index, uint32_t *src, uint32_t lengthInBytes); + +/*! + * @brief Programs flash with data at locations passed in through parameters via Program Section command + * + * This function programs the flash memory with desired data for a given + * flash area as determined by the start address and length. + * + * @param config Pointer to storage for the driver runtime state. + * @param start The start address of the desired flash memory to be programmed. Must be + * word-aligned. + * @param src Pointer to the source buffer of data that is to be programmed + * into the flash. + * @param lengthInBytes The length, given in bytes (not words or long-words) + * to be programmed. Must be word-aligned. + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + * @retval #kStatus_FLASH_AlignmentError Parameter is not aligned with specified baseline. + * @retval #kStatus_FLASH_AddressError Address is out of range. + * @retval #kStatus_FLASH_SetFlexramAsRamError Failed to set flexram as RAM + * @retval #kStatus_FLASH_ExecuteInRamFunctionNotReady Execute-in-RAM function is not available. + * @retval #kStatus_FLASH_AccessError Invalid instruction codes and out-of bounds addresses. + * @retval #kStatus_FLASH_ProtectionViolation The program/erase operation is requested to execute on protected areas. + * @retval #kStatus_FLASH_CommandFailure Run-time error during command execution. + * @retval #kStatus_FLASH_RecoverFlexramAsEepromError Failed to recover flexram as eeprom + */ +#if defined(FSL_FEATURE_FLASH_HAS_PROGRAM_SECTION_CMD) && FSL_FEATURE_FLASH_HAS_PROGRAM_SECTION_CMD +status_t FLASH_ProgramSection(flash_config_t *config, uint32_t start, uint32_t *src, uint32_t lengthInBytes); +#endif + +/*! + * @brief Programs EEPROM with data at locations passed in through parameters + * + * This function programs the Emulated EEPROM with desired data for a given + * flash area as determined by the start address and length. + * + * @param config Pointer to storage for the driver runtime state. + * @param start The start address of the desired flash memory to be programmed. Must be + * word-aligned. + * @param src Pointer to the source buffer of data that is to be programmed + * into the flash. + * @param lengthInBytes The length, given in bytes (not words or long-words) + * to be programmed. Must be word-aligned. + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + * @retval #kStatus_FLASH_AddressError Address is out of range. + * @retval #kStatus_FLASH_SetFlexramAsEepromError Failed to set flexram as eeprom. + * @retval #kStatus_FLASH_ProtectionViolation The program/erase operation is requested to execute on protected areas. + * @retval #kStatus_FLASH_RecoverFlexramAsRamError Failed to recover flexram as RAM + */ +#if FLASH_SSD_IS_FLEXNVM_ENABLED +status_t FLASH_EepromWrite(flash_config_t *config, uint32_t start, uint8_t *src, uint32_t lengthInBytes); +#endif + +/*@}*/ + +/*! + * @name Reading + * @{ + */ + +/*! + * @brief Read resource with data at locations passed in through parameters + * + * This function reads the flash memory with desired location for a given + * flash area as determined by the start address and length. + * + * @param config Pointer to storage for the driver runtime state. + * @param start The start address of the desired flash memory to be programmed. Must be + * word-aligned. + * @param dst Pointer to the destination buffer of data that is used to store + * data to be read. + * @param lengthInBytes The length, given in bytes (not words or long-words) + * to be read. Must be word-aligned. + * @param option The resource option which indicates which area should be read back. + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + * @retval #kStatus_FLASH_AlignmentError Parameter is not aligned with specified baseline. + * @retval #kStatus_FLASH_ExecuteInRamFunctionNotReady Execute-in-RAM function is not available. + * @retval #kStatus_FLASH_AccessError Invalid instruction codes and out-of bounds addresses. + * @retval #kStatus_FLASH_ProtectionViolation The program/erase operation is requested to execute on protected areas. + * @retval #kStatus_FLASH_CommandFailure Run-time error during command execution. + */ +#if defined(FSL_FEATURE_FLASH_HAS_READ_RESOURCE_CMD) && FSL_FEATURE_FLASH_HAS_READ_RESOURCE_CMD +status_t FLASH_ReadResource( + flash_config_t *config, uint32_t start, uint32_t *dst, uint32_t lengthInBytes, flash_read_resource_option_t option); +#endif + +/*! + * @brief Read Program Once Field through parameters + * + * This function reads the read once feild with given index and length + * + * @param config Pointer to storage for the driver runtime state. + * @param index The index indicating the area of program once field to be read. + * @param dst Pointer to the destination buffer of data that is used to store + * data to be read. + * @param lengthInBytes The length, given in bytes (not words or long-words) + * to be programmed. Must be word-aligned. + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + * @retval #kStatus_FLASH_ExecuteInRamFunctionNotReady Execute-in-RAM function is not available. + * @retval #kStatus_FLASH_AccessError Invalid instruction codes and out-of bounds addresses. + * @retval #kStatus_FLASH_ProtectionViolation The program/erase operation is requested to execute on protected areas. + * @retval #kStatus_FLASH_CommandFailure Run-time error during command execution. + */ +status_t FLASH_ReadOnce(flash_config_t *config, uint32_t index, uint32_t *dst, uint32_t lengthInBytes); + +/*@}*/ + +/*! + * @name Security + * @{ + */ + +/*! + * @brief Returns the security state via the pointer passed into the function + * + * This function retrieves the current Flash security status, including the + * security enabling state and the backdoor key enabling state. + * + * @param config Pointer to storage for the driver runtime state. + * @param state Pointer to the value returned for the current security status code: + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + */ +status_t FLASH_GetSecurityState(flash_config_t *config, flash_security_state_t *state); + +/*! + * @brief Allows user to bypass security with a backdoor key + * + * If the MCU is in secured state, this function will unsecure the MCU by + * comparing the provided backdoor key with ones in the Flash Configuration + * Field. + * + * @param config Pointer to storage for the driver runtime state. + * @param backdoorKey Pointer to the user buffer containing the backdoor key. + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + * @retval #kStatus_FLASH_ExecuteInRamFunctionNotReady Execute-in-RAM function is not available. + * @retval #kStatus_FLASH_AccessError Invalid instruction codes and out-of bounds addresses. + * @retval #kStatus_FLASH_ProtectionViolation The program/erase operation is requested to execute on protected areas. + * @retval #kStatus_FLASH_CommandFailure Run-time error during command execution. + */ +status_t FLASH_SecurityBypass(flash_config_t *config, const uint8_t *backdoorKey); + +/*@}*/ + +/*! + * @name Verification + * @{ + */ + +/*! + * @brief Verifies erasure of entire flash at specified margin level + * + * This function will check to see if the flash have been erased to the + * specified read margin level. + * + * @param config Pointer to storage for the driver runtime state. + * @param margin Read margin choice + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + * @retval #kStatus_FLASH_ExecuteInRamFunctionNotReady Execute-in-RAM function is not available. + * @retval #kStatus_FLASH_AccessError Invalid instruction codes and out-of bounds addresses. + * @retval #kStatus_FLASH_ProtectionViolation The program/erase operation is requested to execute on protected areas. + * @retval #kStatus_FLASH_CommandFailure Run-time error during command execution. + */ +status_t FLASH_VerifyEraseAll(flash_config_t *config, flash_margin_value_t margin); + +/*! + * @brief Verifies erasure of desired flash area at specified margin level + * + * This function will check the appropriate number of flash sectors based on + * the desired start address and length to see if the flash have been erased + * to the specified read margin level. + * + * @param config Pointer to storage for the driver runtime state. + * @param start The start address of the desired flash memory to be verified. + * The start address does not need to be sector aligned but must be word-aligned. + * @param lengthInBytes The length, given in bytes (not words or long-words) + * to be verified. Must be word-aligned. + * @param margin Read margin choice + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + * @retval #kStatus_FLASH_AlignmentError Parameter is not aligned with specified baseline. + * @retval #kStatus_FLASH_AddressError Address is out of range. + * @retval #kStatus_FLASH_ExecuteInRamFunctionNotReady Execute-in-RAM function is not available. + * @retval #kStatus_FLASH_AccessError Invalid instruction codes and out-of bounds addresses. + * @retval #kStatus_FLASH_ProtectionViolation The program/erase operation is requested to execute on protected areas. + * @retval #kStatus_FLASH_CommandFailure Run-time error during command execution. + */ +status_t FLASH_VerifyErase(flash_config_t *config, uint32_t start, uint32_t lengthInBytes, flash_margin_value_t margin); + +/*! + * @brief Verifies programming of desired flash area at specified margin level + * + * This function verifies the data programed in the flash memory using the + * Flash Program Check Command and compares it with expected data for a given + * flash area as determined by the start address and length. + * + * @param config Pointer to storage for the driver runtime state. + * @param start The start address of the desired flash memory to be verified. Must be word-aligned. + * @param lengthInBytes The length, given in bytes (not words or long-words) + * to be verified. Must be word-aligned. + * @param expectedData Pointer to the expected data that is to be + * verified against. + * @param margin Read margin choice + * @param failedAddress Pointer to returned failing address. + * @param failedData Pointer to returned failing data. Some derivitives do + * not included failed data as part of the FCCOBx registers. In this + * case, zeros are returned upon failure. + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + * @retval #kStatus_FLASH_AlignmentError Parameter is not aligned with specified baseline. + * @retval #kStatus_FLASH_AddressError Address is out of range. + * @retval #kStatus_FLASH_ExecuteInRamFunctionNotReady Execute-in-RAM function is not available. + * @retval #kStatus_FLASH_AccessError Invalid instruction codes and out-of bounds addresses. + * @retval #kStatus_FLASH_ProtectionViolation The program/erase operation is requested to execute on protected areas. + * @retval #kStatus_FLASH_CommandFailure Run-time error during command execution. + */ +status_t FLASH_VerifyProgram(flash_config_t *config, + uint32_t start, + uint32_t lengthInBytes, + const uint32_t *expectedData, + flash_margin_value_t margin, + uint32_t *failedAddress, + uint32_t *failedData); + +/*! + * @brief Verifies if the program flash executeonly segments have been erased to + * the specified read margin level + * + * @param config Pointer to storage for the driver runtime state. + * @param margin Read margin choice + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + * @retval #kStatus_FLASH_ExecuteInRamFunctionNotReady Execute-in-RAM function is not available. + * @retval #kStatus_FLASH_AccessError Invalid instruction codes and out-of bounds addresses. + * @retval #kStatus_FLASH_ProtectionViolation The program/erase operation is requested to execute on protected areas. + * @retval #kStatus_FLASH_CommandFailure Run-time error during command execution. + */ +status_t FLASH_VerifyEraseAllExecuteOnlySegments(flash_config_t *config, flash_margin_value_t margin); + +/*@}*/ + +/*! + * @name Protection + * @{ + */ + +/*! + * @brief Returns the protection state of desired flash area via the pointer passed into the function + * + * This function retrieves the current Flash protect status for a given + * flash area as determined by the start address and length. + * + * @param config Pointer to storage for the driver runtime state. + * @param start The start address of the desired flash memory to be checked. Must be word-aligned. + * @param lengthInBytes The length, given in bytes (not words or long-words) + * to be checked. Must be word-aligned. + * @param protection_state Pointer to the value returned for the current + * protection status code for the desired flash area. + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + * @retval #kStatus_FLASH_AlignmentError Parameter is not aligned with specified baseline. + * @retval #kStatus_FLASH_AddressError Address is out of range. + */ +status_t FLASH_IsProtected(flash_config_t *config, + uint32_t start, + uint32_t lengthInBytes, + flash_protection_state_t *protection_state); + +/*! + * @brief Returns the access state of desired flash area via the pointer passed into the function + * + * This function retrieves the current Flash access status for a given + * flash area as determined by the start address and length. + * + * @param config Pointer to storage for the driver runtime state. + * @param start The start address of the desired flash memory to be checked. Must be word-aligned. + * @param lengthInBytes The length, given in bytes (not words or long-words) + * to be checked. Must be word-aligned. + * @param access_state Pointer to the value returned for the current + * access status code for the desired flash area. + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + * @retval #kStatus_FLASH_AlignmentError Parameter is not aligned with specified baseline. + * @retval #kStatus_FLASH_AddressError Address is out of range. + */ +status_t FLASH_IsExecuteOnly(flash_config_t *config, + uint32_t start, + uint32_t lengthInBytes, + flash_execute_only_access_state_t *access_state); + +/*@}*/ + +/*! + * @name Properties + * @{ + */ + +/*! + * @brief Returns the desired flash property. + * + * @param config Pointer to storage for the driver runtime state. + * @param whichProperty The desired property from the list of properties in + * enum flash_property_tag_t + * @param value Pointer to the value returned for the desired flash property + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + * @retval #kStatus_FLASH_UnknownProperty unknown property tag + */ +status_t FLASH_GetProperty(flash_config_t *config, flash_property_tag_t whichProperty, uint32_t *value); + +/*@}*/ + +/*! + * @name FlexRAM + * @{ + */ + +/*! + * @brief Set FlexRAM Function command + * + * @param config Pointer to storage for the driver runtime state. + * @param option The option used to set work mode of FlexRAM + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + * @retval #kStatus_FLASH_ExecuteInRamFunctionNotReady Execute-in-RAM function is not available. + * @retval #kStatus_FLASH_AccessError Invalid instruction codes and out-of bounds addresses. + * @retval #kStatus_FLASH_ProtectionViolation The program/erase operation is requested to execute on protected areas. + * @retval #kStatus_FLASH_CommandFailure Run-time error during command execution. + */ +#if defined(FSL_FEATURE_FLASH_HAS_SET_FLEXRAM_FUNCTION_CMD) && FSL_FEATURE_FLASH_HAS_SET_FLEXRAM_FUNCTION_CMD +status_t FLASH_SetFlexramFunction(flash_config_t *config, flash_flexram_function_option_t option); +#endif + +/*@}*/ + +/*! + * @name Swap + * @{ + */ + +/*! + * @brief Configure Swap function or Check the swap state of Flash Module + * + * @param config Pointer to storage for the driver runtime state. + * @param address Address used to configure the flash swap function + * @param option The possible option used to configure Flash Swap function or check the flash swap status + * @param returnInfo Pointer to the data which is used to return the information of flash swap. + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + * @retval #kStatus_FLASH_AlignmentError Parameter is not aligned with specified baseline. + * @retval #kStatus_FLASH_SwapIndicatorAddressError Swap indicator address is invalid + * @retval #kStatus_FLASH_ExecuteInRamFunctionNotReady Execute-in-RAM function is not available. + * @retval #kStatus_FLASH_AccessError Invalid instruction codes and out-of bounds addresses. + * @retval #kStatus_FLASH_ProtectionViolation The program/erase operation is requested to execute on protected areas. + * @retval #kStatus_FLASH_CommandFailure Run-time error during command execution. + */ +#if defined(FSL_FEATURE_FLASH_HAS_SWAP_CONTROL_CMD) && FSL_FEATURE_FLASH_HAS_SWAP_CONTROL_CMD +status_t FLASH_SwapControl(flash_config_t *config, + uint32_t address, + flash_swap_control_option_t option, + flash_swap_state_config_t *returnInfo); +#endif + +/*! + * @brief Swap the lower half flash with the higher half flaock + * + * @param config Pointer to storage for the driver runtime state. + * @param address Address used to configure the flash swap function + * @param option The possible option used to configure Flash Swap function or check the flash swap status + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + * @retval #kStatus_FLASH_AlignmentError Parameter is not aligned with specified baseline. + * @retval #kStatus_FLASH_SwapIndicatorAddressError Swap indicator address is invalid + * @retval #kStatus_FLASH_ExecuteInRamFunctionNotReady Execute-in-RAM function is not available. + * @retval #kStatus_FLASH_AccessError Invalid instruction codes and out-of bounds addresses. + * @retval #kStatus_FLASH_ProtectionViolation The program/erase operation is requested to execute on protected areas. + * @retval #kStatus_FLASH_CommandFailure Run-time error during command execution. + * @retval #kStatus_FLASH_SwapSystemNotInUninitialized Swap system is not in uninitialzed state + */ +#if defined(FSL_FEATURE_FLASH_HAS_PFLASH_BLOCK_SWAP) && FSL_FEATURE_FLASH_HAS_PFLASH_BLOCK_SWAP +status_t FLASH_Swap(flash_config_t *config, uint32_t address, flash_swap_function_option_t option); +#endif + +/*! + * @name FlexNVM + * @{ + */ + +/*! + * @brief Prepares the FlexNVM block for use as data flash, EEPROM backup, or a combination of both and initializes the + * FlexRAM. + * + * @param config Pointer to storage for the driver runtime state. + * @param option The option used to set FlexRAM load behavior during reset. + * @param eepromDataSizeCode Determines the amount of FlexRAM used in each of the available EEPROM subsystems. + * @param flexnvmPartitionCode Specifies how to split the FlexNVM block between data flash memory and EEPROM backup + * memory supporting EEPROM functions. + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + * @retval #kStatus_FLASH_ExecuteInRamFunctionNotReady Execute-in-RAM function is not available. + * @retval #kStatus_FLASH_AccessError Invalid instruction codes and out-of bounds addresses. + * @retval #kStatus_FLASH_ProtectionViolation The program/erase operation is requested to execute on protected areas. + * @retval #kStatus_FLASH_CommandFailure Run-time error during command execution. + */ +#if defined(FSL_FEATURE_FLASH_HAS_PROGRAM_PARTITION_CMD) && FSL_FEATURE_FLASH_HAS_PROGRAM_PARTITION_CMD +status_t FLASH_ProgramPartition(flash_config_t *config, + flash_partition_flexram_load_option_t option, + uint32_t eepromDataSizeCode, + uint32_t flexnvmPartitionCode); +#endif + +/*@}*/ + +/*! +* @name Flash Protection Utilities +* @{ +*/ + +/*! + * @brief Set PFLASH Protection to the intended protection status. + * + * @param config Pointer to storage for the driver runtime state. + * @param protectStatus The expected protect status user wants to set to PFlash protection register. Each bit is + * corresponding to protection of 1/32 of the total PFlash. The least significant bit is corresponding to the lowest + * address area of P-Flash. The most significant bit is corresponding to the highest address area of PFlash. There are + * two possible cases as shown below: + * 0: this area is protected. + * 1: this area is unprotected. + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + * @retval #kStatus_FLASH_CommandFailure Run-time error during command execution. + */ +status_t FLASH_PflashSetProtection(flash_config_t *config, uint32_t protectStatus); + +/*! + * @brief Get PFLASH Protection Status. + * + * @param config Pointer to storage for the driver runtime state. + * @param protectStatus Protect status returned by PFlash IP. Each bit is corresponding to protection of 1/32 of the + * total PFlash. The least significant bit is corresponding to the lowest address area of PFlash. The most significant + * bit is corresponding to the highest address area of PFlash. Thee are two possible cases as below: + * 0: this area is protected. + * 1: this area is unprotected. + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + */ +status_t FLASH_PflashGetProtection(flash_config_t *config, uint32_t *protectStatus); + +/*! + * @brief Set DFLASH Protection to the intended protection status. + * + * @param config Pointer to storage for the driver runtime state. + * @param protectStatus The expected protect status user wants to set to DFlash protection register. Each bit is + * corresponding to protection of 1/8 of the total DFlash. The least significant bit is corresponding to the lowest + * address area of DFlash. The most significant bit is corresponding to the highest address area of DFlash. There are + * two possible cases as shown below: + * 0: this area is protected. + * 1: this area is unprotected. + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + * @retval #kStatus_FLASH_CommandNotSupported Flash API is not supported + * @retval #kStatus_FLASH_CommandFailure Run-time error during command execution. + */ +#if FLASH_SSD_IS_FLEXNVM_ENABLED +status_t FLASH_DflashSetProtection(flash_config_t *config, uint8_t protectStatus); +#endif + +/*! + * @brief Get DFLASH Protection Status. + * + * @param config Pointer to storage for the driver runtime state. + * @param protectStatus DFlash Protect status returned by PFlash IP. Each bit is corresponding to protection of 1/8 of + * the total DFlash. The least significant bit is corresponding to the lowest address area of DFlash. The most + * significant bit is corresponding to the highest address area of DFlash and so on. There are two possible cases as + * below: + * 0: this area is protected. + * 1: this area is unprotected. + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + * @retval #kStatus_FLASH_CommandNotSupported Flash API is not supported + */ +#if FLASH_SSD_IS_FLEXNVM_ENABLED +status_t FLASH_DflashGetProtection(flash_config_t *config, uint8_t *protectStatus); +#endif + +/*! + * @brief Set EEPROM Protection to the intended protection status. + * + * @param config Pointer to storage for the driver runtime state. + * @param protectStatus The expected protect status user wants to set to EEPROM protection register. Each bit is + * corresponding to protection of 1/8 of the total EEPROM. The least significant bit is corresponding to the lowest + * address area of EEPROM. The most significant bit is corresponding to the highest address area of EEPROM, and so on. + * There are two possible cases as shown below: + * 0: this area is protected. + * 1: this area is unprotected. + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + * @retval #kStatus_FLASH_CommandNotSupported Flash API is not supported + * @retval #kStatus_FLASH_CommandFailure Run-time error during command execution. + */ +#if FLASH_SSD_IS_FLEXNVM_ENABLED +status_t FLASH_EepromSetProtection(flash_config_t *config, uint8_t protectStatus); +#endif + +/*! + * @brief Get DFLASH Protection Status. + * + * @param config Pointer to storage for the driver runtime state. + * @param protectStatus DFlash Protect status returned by PFlash IP. Each bit is corresponding to protection of 1/8 of + * the total EEPROM. The least significant bit is corresponding to the lowest address area of EEPROM. The most + * significant bit is corresponding to the highest address area of EEPROM. There are two possible cases as below: + * 0: this area is protected. + * 1: this area is unprotected. + * + * @retval #kStatus_FLASH_Success API was executed successfully. + * @retval #kStatus_FLASH_InvalidArgument Invalid argument is provided. + * @retval #kStatus_FLASH_CommandNotSupported Flash API is not supported. + */ +#if FLASH_SSD_IS_FLEXNVM_ENABLED +status_t FLASH_EepromGetProtection(flash_config_t *config, uint8_t *protectStatus); +#endif + +/*@}*/ + +#if defined(__cplusplus) +} +#endif + +/*! @}*/ + +#endif /* _FSL_FLASH_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio.c new file mode 100644 index 00000000000..ea15f00a4e7 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio.c @@ -0,0 +1,262 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_flexio.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*< @brief user configurable flexio handle count. */ +#define FLEXIO_HANDLE_COUNT 2 + +/******************************************************************************* + * Variables + ******************************************************************************/ + +/*< @brief pointer to array of FLEXIO handle. */ +static void *s_flexioHandle[FLEXIO_HANDLE_COUNT]; + +/*< @brief pointer to array of FLEXIO IP types. */ +static void *s_flexioType[FLEXIO_HANDLE_COUNT]; + +/*< @brief pointer to array of FLEXIO Isr. */ +static flexio_isr_t s_flexioIsr[FLEXIO_HANDLE_COUNT]; + +/******************************************************************************* + * Codes + ******************************************************************************/ + +void FLEXIO_Init(FLEXIO_Type *base, const flexio_config_t *userConfig) +{ + uint32_t ctrlReg = 0; + + CLOCK_EnableClock(kCLOCK_Flexio0); + + FLEXIO_Reset(base); + + ctrlReg = base->CTRL; + ctrlReg &= ~(FLEXIO_CTRL_DOZEN_MASK | FLEXIO_CTRL_DBGE_MASK | FLEXIO_CTRL_FASTACC_MASK | FLEXIO_CTRL_FLEXEN_MASK); + ctrlReg |= (FLEXIO_CTRL_DOZEN(userConfig->enableInDoze) | FLEXIO_CTRL_DBGE(userConfig->enableInDebug) | + FLEXIO_CTRL_FASTACC(userConfig->enableFastAccess) | FLEXIO_CTRL_FLEXEN(userConfig->enableFlexio)); + + base->CTRL = ctrlReg; +} + +void FLEXIO_Deinit(FLEXIO_Type *base) +{ + FLEXIO_Enable(base, false); + CLOCK_DisableClock(kCLOCK_Flexio0); +} + +void FLEXIO_GetDefaultConfig(flexio_config_t *userConfig) +{ + assert(userConfig); + + userConfig->enableFlexio = true; + userConfig->enableInDoze = false; + userConfig->enableInDebug = true; + userConfig->enableFastAccess = false; +} + +void FLEXIO_Reset(FLEXIO_Type *base) +{ + /*do software reset, software reset operation affect all other FLEXIO registers except CTRL*/ + base->CTRL |= FLEXIO_CTRL_SWRST_MASK; + base->CTRL = 0; +} + +uint32_t FLEXIO_GetShifterBufferAddress(FLEXIO_Type *base, flexio_shifter_buffer_type_t type, uint8_t index) +{ + assert(index < FLEXIO_SHIFTBUF_COUNT); + + uint32_t address = 0; + + switch (type) + { + case kFLEXIO_ShifterBuffer: + address = (uint32_t) & (base->SHIFTBUF[index]); + break; + + case kFLEXIO_ShifterBufferBitSwapped: + address = (uint32_t) & (base->SHIFTBUFBIS[index]); + break; + + case kFLEXIO_ShifterBufferByteSwapped: + address = (uint32_t) & (base->SHIFTBUFBYS[index]); + break; + + case kFLEXIO_ShifterBufferBitByteSwapped: + address = (uint32_t) & (base->SHIFTBUFBBS[index]); + break; + +#if defined(FSL_FEATURE_FLEXIO_HAS_SHFT_BUFFER_NIBBLE_BYTE_SWAP) && FSL_FEATURE_FLEXIO_HAS_SHFT_BUFFER_NIBBLE_BYTE_SWAP + case kFLEXIO_ShifterBufferNibbleByteSwapped: + address = (uint32_t) & (base->SHIFTBUFNBS[index]); + break; + +#endif +#if defined(FSL_FEATURE_FLEXIO_HAS_SHFT_BUFFER_HALF_WORD_SWAP) && FSL_FEATURE_FLEXIO_HAS_SHFT_BUFFER_HALF_WORD_SWAP + case kFLEXIO_ShifterBufferHalfWordSwapped: + address = (uint32_t) & (base->SHIFTBUFHWS[index]); + break; + +#endif +#if defined(FSL_FEATURE_FLEXIO_HAS_SHFT_BUFFER_NIBBLE_SWAP) && FSL_FEATURE_FLEXIO_HAS_SHFT_BUFFER_NIBBLE_SWAP + case kFLEXIO_ShifterBufferNibbleSwapped: + address = (uint32_t) & (base->SHIFTBUFNIS[index]); + break; + +#endif + default: + break; + } + return address; +} + +void FLEXIO_SetShifterConfig(FLEXIO_Type *base, uint8_t index, const flexio_shifter_config_t *shifterConfig) +{ + base->SHIFTCFG[index] = FLEXIO_SHIFTCFG_INSRC(shifterConfig->inputSource) +#if FSL_FEATURE_FLEXIO_HAS_PARALLEL_WIDTH + | FLEXIO_SHIFTCFG_PWIDTH(shifterConfig->parallelWidth) +#endif /* FSL_FEATURE_FLEXIO_HAS_PARALLEL_WIDTH */ + | FLEXIO_SHIFTCFG_SSTOP(shifterConfig->shifterStop) | + FLEXIO_SHIFTCFG_SSTART(shifterConfig->shifterStart); + + base->SHIFTCTL[index] = + FLEXIO_SHIFTCTL_TIMSEL(shifterConfig->timerSelect) | FLEXIO_SHIFTCTL_TIMPOL(shifterConfig->timerPolarity) | + FLEXIO_SHIFTCTL_PINCFG(shifterConfig->pinConfig) | FLEXIO_SHIFTCTL_PINSEL(shifterConfig->pinSelect) | + FLEXIO_SHIFTCTL_PINPOL(shifterConfig->pinPolarity) | FLEXIO_SHIFTCTL_SMOD(shifterConfig->shifterMode); +} + +void FLEXIO_SetTimerConfig(FLEXIO_Type *base, uint8_t index, const flexio_timer_config_t *timerConfig) +{ + base->TIMCFG[index] = + FLEXIO_TIMCFG_TIMOUT(timerConfig->timerOutput) | FLEXIO_TIMCFG_TIMDEC(timerConfig->timerDecrement) | + FLEXIO_TIMCFG_TIMRST(timerConfig->timerReset) | FLEXIO_TIMCFG_TIMDIS(timerConfig->timerDisable) | + FLEXIO_TIMCFG_TIMENA(timerConfig->timerEnable) | FLEXIO_TIMCFG_TSTOP(timerConfig->timerStop) | + FLEXIO_TIMCFG_TSTART(timerConfig->timerStart); + + base->TIMCMP[index] = FLEXIO_TIMCMP_CMP(timerConfig->timerCompare); + + base->TIMCTL[index] = FLEXIO_TIMCTL_TRGSEL(timerConfig->triggerSelect) | + FLEXIO_TIMCTL_TRGPOL(timerConfig->triggerPolarity) | + FLEXIO_TIMCTL_TRGSRC(timerConfig->triggerSource) | + FLEXIO_TIMCTL_PINCFG(timerConfig->pinConfig) | FLEXIO_TIMCTL_PINSEL(timerConfig->pinSelect) | + FLEXIO_TIMCTL_PINPOL(timerConfig->pinPolarity) | FLEXIO_TIMCTL_TIMOD(timerConfig->timerMode); +} + +status_t FLEXIO_RegisterHandleIRQ(void *base, void *handle, flexio_isr_t isr) +{ + assert(base); + assert(handle); + assert(isr); + + uint8_t index = 0; + + /* Find the an empty handle pointer to store the handle. */ + for (index = 0; index < FLEXIO_HANDLE_COUNT; index++) + { + if (s_flexioHandle[index] == NULL) + { + /* Register FLEXIO simulated driver base, handle and isr. */ + s_flexioType[index] = base; + s_flexioHandle[index] = handle; + s_flexioIsr[index] = isr; + break; + } + } + + if (index == FLEXIO_HANDLE_COUNT) + { + return kStatus_OutOfRange; + } + else + { + return kStatus_Success; + } +} + +status_t FLEXIO_UnregisterHandleIRQ(void *base) +{ + assert(base); + + uint8_t index = 0; + + /* Find the index from base address mappings. */ + for (index = 0; index < FLEXIO_HANDLE_COUNT; index++) + { + if (s_flexioType[index] == base) + { + /* Unregister FLEXIO simulated driver handle and isr. */ + s_flexioType[index] = NULL; + s_flexioHandle[index] = NULL; + s_flexioIsr[index] = NULL; + break; + } + } + + if (index == FLEXIO_HANDLE_COUNT) + { + return kStatus_OutOfRange; + } + else + { + return kStatus_Success; + } +} + +void FLEXIO_CommonIRQHandler(void) +{ + uint8_t index; + + for (index = 0; index < FLEXIO_HANDLE_COUNT; index++) + { + if (s_flexioHandle[index]) + { + s_flexioIsr[index](s_flexioType[index], s_flexioHandle[index]); + } + } +} + +void FLEXIO_DriverIRQHandler(void) +{ + FLEXIO_CommonIRQHandler(); +} + +void FLEXIO0_DriverIRQHandler(void) +{ + FLEXIO_CommonIRQHandler(); +} + +void UART2_FLEXIO_DriverIRQHandler(void) +{ + FLEXIO_CommonIRQHandler(); +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio.h new file mode 100644 index 00000000000..40ad91803e4 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio.h @@ -0,0 +1,706 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FSL_FLEXIO_H_ +#define _FSL_FLEXIO_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup flexio_driver + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief FlexIO driver version 2.0.0. */ +#define FSL_FLEXIO_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) +/*@}*/ + +/*! @brief Calculate FlexIO timer trigger.*/ +#define FLEXIO_TIMER_TRIGGER_SEL_PININPUT(x) ((uint32_t)(x) << 1U) +#define FLEXIO_TIMER_TRIGGER_SEL_SHIFTnSTAT(x) (((uint32_t)(x) << 2U) | 0x1U) +#define FLEXIO_TIMER_TRIGGER_SEL_TIMn(x) (((uint32_t)(x) << 2U) | 0x3U) + +/*! @brief Define time of timer trigger polarity.*/ +typedef enum _flexio_timer_trigger_polarity +{ + kFLEXIO_TimerTriggerPolarityActiveHigh = 0x0U, /*!< Active high. */ + kFLEXIO_TimerTriggerPolarityActiveLow = 0x1U, /*!< Active low. */ +} flexio_timer_trigger_polarity_t; + +/*! @brief Define type of timer trigger source.*/ +typedef enum _flexio_timer_trigger_source +{ + kFLEXIO_TimerTriggerSourceExternal = 0x0U, /*!< External trigger selected. */ + kFLEXIO_TimerTriggerSourceInternal = 0x1U, /*!< Internal trigger selected. */ +} flexio_timer_trigger_source_t; + +/*! @brief Define type of timer/shifter pin configuration.*/ +typedef enum _flexio_pin_config +{ + kFLEXIO_PinConfigOutputDisabled = 0x0U, /*!< Pin output disabled. */ + kFLEXIO_PinConfigOpenDrainOrBidirection = 0x1U, /*!< Pin open drain or bidirectional output enable. */ + kFLEXIO_PinConfigBidirectionOutputData = 0x2U, /*!< Pin bidirectional output data. */ + kFLEXIO_PinConfigOutput = 0x3U, /*!< Pin output. */ +} flexio_pin_config_t; + +/*! @brief Definition of pin polarity.*/ +typedef enum _flexio_pin_polarity +{ + kFLEXIO_PinActiveHigh = 0x0U, /*!< Active high. */ + kFLEXIO_PinActiveLow = 0x1U, /*!< Active low. */ +} flexio_pin_polarity_t; + +/*! @brief Define type of timer work mode.*/ +typedef enum _flexio_timer_mode +{ + kFLEXIO_TimerModeDisabled = 0x0U, /*!< Timer Disabled. */ + kFLEXIO_TimerModeDual8BitBaudBit = 0x1U, /*!< Dual 8-bit counters baud/bit mode. */ + kFLEXIO_TimerModeDual8BitPWM = 0x2U, /*!< Dual 8-bit counters PWM mode. */ + kFLEXIO_TimerModeSingle16Bit = 0x3U, /*!< Single 16-bit counter mode. */ +} flexio_timer_mode_t; + +/*! @brief Define type of timer initial output or timer reset condition.*/ +typedef enum _flexio_timer_output +{ + kFLEXIO_TimerOutputOneNotAffectedByReset = 0x0U, /*!< Logic one when enabled and is not affected by timer + reset. */ + kFLEXIO_TimerOutputZeroNotAffectedByReset = 0x1U, /*!< Logic zero when enabled and is not affected by timer + reset. */ + kFLEXIO_TimerOutputOneAffectedByReset = 0x2U, /*!< Logic one when enabled and on timer reset. */ + kFLEXIO_TimerOutputZeroAffectedByReset = 0x3U, /*!< Logic zero when enabled and on timer reset. */ +} flexio_timer_output_t; + +/*! @brief Define type of timer decrement.*/ +typedef enum _flexio_timer_decrement_source +{ + kFLEXIO_TimerDecSrcOnFlexIOClockShiftTimerOutput = 0x0U, /*!< Decrement counter on FlexIO clock, Shift clock + equals Timer output. */ + kFLEXIO_TimerDecSrcOnTriggerInputShiftTimerOutput = 0x1U, /*!< Decrement counter on Trigger input (both edges), + Shift clock equals Timer output. */ + kFLEXIO_TimerDecSrcOnPinInputShiftPinInput = 0x2U, /*!< Decrement counter on Pin input (both edges), + Shift clock equals Pin input. */ + kFLEXIO_TimerDecSrcOnTriggerInputShiftTriggerInput = 0x3U, /*!< Decrement counter on Trigger input (both edges), + Shift clock equals Trigger input. */ +} flexio_timer_decrement_source_t; + +/*! @brief Define type of timer reset condition.*/ +typedef enum _flexio_timer_reset_condition +{ + kFLEXIO_TimerResetNever = 0x0U, /*!< Timer never reset. */ + kFLEXIO_TimerResetOnTimerPinEqualToTimerOutput = 0x2U, /*!< Timer reset on Timer Pin equal to Timer Output. */ + kFLEXIO_TimerResetOnTimerTriggerEqualToTimerOutput = 0x3U, /*!< Timer reset on Timer Trigger equal to + Timer Output. */ + kFLEXIO_TimerResetOnTimerPinRisingEdge = 0x4U, /*!< Timer reset on Timer Pin rising edge. */ + kFLEXIO_TimerResetOnTimerTriggerRisingEdge = 0x6U, /*!< Timer reset on Trigger rising edge. */ + kFLEXIO_TimerResetOnTimerTriggerBothEdge = 0x7U, /*!< Timer reset on Trigger rising or falling edge. */ +} flexio_timer_reset_condition_t; + +/*! @brief Define type of timer disable condition.*/ +typedef enum _flexio_timer_disable_condition +{ + kFLEXIO_TimerDisableNever = 0x0U, /*!< Timer never disabled. */ + kFLEXIO_TimerDisableOnPreTimerDisable = 0x1U, /*!< Timer disabled on Timer N-1 disable. */ + kFLEXIO_TimerDisableOnTimerCompare = 0x2U, /*!< Timer disabled on Timer compare. */ + kFLEXIO_TimerDisableOnTimerCompareTriggerLow = 0x3U, /*!< Timer disabled on Timer compare and Trigger Low. */ + kFLEXIO_TimerDisableOnPinBothEdge = 0x4U, /*!< Timer disabled on Pin rising or falling edge. */ + kFLEXIO_TimerDisableOnPinBothEdgeTriggerHigh = 0x5U, /*!< Timer disabled on Pin rising or falling edge provided + Trigger is high. */ + kFLEXIO_TimerDisableOnTriggerFallingEdge = 0x6U, /*!< Timer disabled on Trigger falling edge. */ +} flexio_timer_disable_condition_t; + +/*! @brief Define type of timer enable condition.*/ +typedef enum _flexio_timer_enable_condition +{ + kFLEXIO_TimerEnabledAlways = 0x0U, /*!< Timer always enabled. */ + kFLEXIO_TimerEnableOnPrevTimerEnable = 0x1U, /*!< Timer enabled on Timer N-1 enable. */ + kFLEXIO_TimerEnableOnTriggerHigh = 0x2U, /*!< Timer enabled on Trigger high. */ + kFLEXIO_TimerEnableOnTriggerHighPinHigh = 0x3U, /*!< Timer enabled on Trigger high and Pin high. */ + kFLEXIO_TimerEnableOnPinRisingEdge = 0x4U, /*!< Timer enabled on Pin rising edge. */ + kFLEXIO_TimerEnableOnPinRisingEdgeTriggerHigh = 0x5U, /*!< Timer enabled on Pin rising edge and Trigger high. */ + kFLEXIO_TimerEnableOnTriggerRisingEdge = 0x6U, /*!< Timer enabled on Trigger rising edge. */ + kFLEXIO_TimerEnableOnTriggerBothEdge = 0x7U, /*!< Timer enabled on Trigger rising or falling edge. */ +} flexio_timer_enable_condition_t; + +/*! @brief Define type of timer stop bit generate condition.*/ +typedef enum _flexio_timer_stop_bit_condition +{ + kFLEXIO_TimerStopBitDisabled = 0x0U, /*!< Stop bit disabled. */ + kFLEXIO_TimerStopBitEnableOnTimerCompare = 0x1U, /*!< Stop bit is enabled on timer compare. */ + kFLEXIO_TimerStopBitEnableOnTimerDisable = 0x2U, /*!< Stop bit is enabled on timer disable. */ + kFLEXIO_TimerStopBitEnableOnTimerCompareDisable = 0x3U, /*!< Stop bit is enabled on timer compare and timer + disable. */ +} flexio_timer_stop_bit_condition_t; + +/*! @brief Define type of timer start bit generate condition.*/ +typedef enum _flexio_timer_start_bit_condition +{ + kFLEXIO_TimerStartBitDisabled = 0x0U, /*!< Start bit disabled. */ + kFLEXIO_TimerStartBitEnabled = 0x1U, /*!< Start bit enabled. */ +} flexio_timer_start_bit_condition_t; + +/*! @brief Define type of timer polarity for shifter control. */ +typedef enum _flexio_shifter_timer_polarity +{ + kFLEXIO_ShifterTimerPolarityOnPositive = 0x0U, /* Shift on positive edge of shift clock. */ + kFLEXIO_ShifterTimerPolarityOnNegitive = 0x1U, /* Shift on negative edge of shift clock. */ +} flexio_shifter_timer_polarity_t; + +/*! @brief Define type of shifter working mode.*/ +typedef enum _flexio_shifter_mode +{ + kFLEXIO_ShifterDisabled = 0x0U, /*!< Shifter is disabled. */ + kFLEXIO_ShifterModeReceive = 0x1U, /*!< Receive mode. */ + kFLEXIO_ShifterModeTransmit = 0x2U, /*!< Transmit mode. */ + kFLEXIO_ShifterModeMatchStore = 0x4U, /*!< Match store mode. */ + kFLEXIO_ShifterModeMatchContinuous = 0x5U, /*!< Match continuous mode. */ +#if FSL_FEATURE_FLEXIO_HAS_STATE_MODE + kFLEXIO_ShifterModeState = 0x6U, /*!< SHIFTBUF contents are used for storing + programmable state attributes. */ +#endif /* FSL_FEATURE_FLEXIO_HAS_STATE_MODE */ +#if FSL_FEATURE_FLEXIO_HAS_LOGIC_MODE + kFLEXIO_ShifterModeLogic = 0x7U, /*!< SHIFTBUF contents are used for implementing + programmable logic look up table. */ +#endif /* FSL_FEATURE_FLEXIO_HAS_LOGIC_MODE */ +} flexio_shifter_mode_t; + +/*! @brief Define type of shifter input source.*/ +typedef enum _flexio_shifter_input_source +{ + kFLEXIO_ShifterInputFromPin = 0x0U, /*!< Shifter input from pin. */ + kFLEXIO_ShifterInputFromNextShifterOutput = 0x1U, /*!< Shifter input from Shifter N+1. */ +} flexio_shifter_input_source_t; + +/*! @brief Define of STOP bit configuration.*/ +typedef enum _flexio_shifter_stop_bit +{ + kFLEXIO_ShifterStopBitDisable = 0x0U, /*!< Disable shifter stop bit. */ + kFLEXIO_ShifterStopBitLow = 0x2U, /*!< Set shifter stop bit to logic low level. */ + kFLEXIO_ShifterStopBitHigh = 0x3U, /*!< Set shifter stop bit to logic high level. */ +} flexio_shifter_stop_bit_t; + +/*! @brief Define type of START bit configuration.*/ +typedef enum _flexio_shifter_start_bit +{ + kFLEXIO_ShifterStartBitDisabledLoadDataOnEnable = 0x0U, /*!< Disable shifter start bit, transmitter loads + data on enable. */ + kFLEXIO_ShifterStartBitDisabledLoadDataOnShift = 0x1U, /*!< Disable shifter start bit, transmitter loads + data on first shift. */ + kFLEXIO_ShifterStartBitLow = 0x2U, /*!< Set shifter start bit to logic low level. */ + kFLEXIO_ShifterStartBitHigh = 0x3U, /*!< Set shifter start bit to logic high level. */ +} flexio_shifter_start_bit_t; + +/*! @brief Define FlexIO shifter buffer type*/ +typedef enum _flexio_shifter_buffer_type +{ + kFLEXIO_ShifterBuffer = 0x0U, /*!< Shifter Buffer N Register. */ + kFLEXIO_ShifterBufferBitSwapped = 0x1U, /*!< Shifter Buffer N Bit Byte Swapped Register. */ + kFLEXIO_ShifterBufferByteSwapped = 0x2U, /*!< Shifter Buffer N Byte Swapped Register. */ + kFLEXIO_ShifterBufferBitByteSwapped = 0x3U, /*!< Shifter Buffer N Bit Swapped Register. */ +#if defined(FSL_FEATURE_FLEXIO_HAS_SHFT_BUFFER_NIBBLE_BYTE_SWAP) && FSL_FEATURE_FLEXIO_HAS_SHFT_BUFFER_NIBBLE_BYTE_SWAP + kFLEXIO_ShifterBufferNibbleByteSwapped = 0x4U, /*!< Shifter Buffer N Nibble Byte Swapped Register. */ +#endif /*FSL_FEATURE_FLEXIO_HAS_SHFT_BUFFER_NIBBLE_BYTE_SWAP*/ +#if defined(FSL_FEATURE_FLEXIO_HAS_SHFT_BUFFER_HALF_WORD_SWAP) && FSL_FEATURE_FLEXIO_HAS_SHFT_BUFFER_HALF_WORD_SWAP + kFLEXIO_ShifterBufferHalfWordSwapped = 0x5U, /*!< Shifter Buffer N Half Word Swapped Register. */ +#endif +#if defined(FSL_FEATURE_FLEXIO_HAS_SHFT_BUFFER_NIBBLE_SWAP) && FSL_FEATURE_FLEXIO_HAS_SHFT_BUFFER_NIBBLE_SWAP + kFLEXIO_ShifterBufferNibbleSwapped = 0x6U, /*!< Shifter Buffer N Nibble Swapped Register. */ +#endif +} flexio_shifter_buffer_type_t; + +/*! @brief Define FlexIO user configuration structure. */ +typedef struct _flexio_config_ +{ + bool enableFlexio; /*!< Enable/disable FlexIO module */ + bool enableInDoze; /*!< Enable/disable FlexIO operation in doze mode */ + bool enableInDebug; /*!< Enable/disable FlexIO operation in debug mode */ + bool enableFastAccess; /*!< Enable/disable fast access to FlexIO registers, fast access requires + the FlexIO clock to be at least twice the frequency of the bus clock. */ +} flexio_config_t; + +/*! @brief Define FlexIO timer configuration structure. */ +typedef struct _flexio_timer_config +{ + /* Trigger. */ + uint32_t triggerSelect; /*!< The internal trigger selection number using MACROs. */ + flexio_timer_trigger_polarity_t triggerPolarity; /*!< Trigger Polarity. */ + flexio_timer_trigger_source_t triggerSource; /*!< Trigger Source, internal (see 'trgsel') or external. */ + /* Pin. */ + flexio_pin_config_t pinConfig; /*!< Timer Pin Configuration. */ + uint32_t pinSelect; /*!< Timer Pin number Select. */ + flexio_pin_polarity_t pinPolarity; /*!< Timer Pin Polarity. */ + /* Timer. */ + flexio_timer_mode_t timerMode; /*!< Timer work Mode. */ + flexio_timer_output_t timerOutput; /*!< Configures the initial state of the Timer Output and + whether it is affected by the Timer reset. */ + flexio_timer_decrement_source_t timerDecrement; /*!< Configures the source of the Timer decrement and the + source of the Shift clock. */ + flexio_timer_reset_condition_t timerReset; /*!< Configures the condition that causes the timer counter + (and optionally the timer output) to be reset. */ + flexio_timer_disable_condition_t timerDisable; /*!< Configures the condition that causes the Timer to be + disabled and stop decrementing. */ + flexio_timer_enable_condition_t timerEnable; /*!< Configures the condition that causes the Timer to be + enabled and start decrementing. */ + flexio_timer_stop_bit_condition_t timerStop; /*!< Timer STOP Bit generation. */ + flexio_timer_start_bit_condition_t timerStart; /*!< Timer STRAT Bit generation. */ + uint32_t timerCompare; /*!< Value for Timer Compare N Register. */ +} flexio_timer_config_t; + +/*! @brief Define FlexIO shifter configuration structure. */ +typedef struct _flexio_shifter_config +{ + /* Timer. */ + uint32_t timerSelect; /*!< Selects which Timer is used for controlling the + logic/shift register and generating the Shift clock. */ + flexio_shifter_timer_polarity_t timerPolarity; /*!< Timer Polarity. */ + /* Pin. */ + flexio_pin_config_t pinConfig; /*!< Shifter Pin Configuration. */ + uint32_t pinSelect; /*!< Shifter Pin number Select. */ + flexio_pin_polarity_t pinPolarity; /*!< Shifter Pin Polarity. */ + /* Shifter. */ + flexio_shifter_mode_t shifterMode; /*!< Configures the mode of the Shifter. */ +#if FSL_FEATURE_FLEXIO_HAS_PARALLEL_WIDTH + uint32_t parallelWidth; /*!< Configures the parallel width when using parallel mode.*/ +#endif /* FSL_FEATURE_FLEXIO_HAS_PARALLEL_WIDTH */ + flexio_shifter_input_source_t inputSource; /*!< Selects the input source for the shifter. */ + flexio_shifter_stop_bit_t shifterStop; /*!< Shifter STOP bit. */ + flexio_shifter_start_bit_t shifterStart; /*!< Shifter START bit. */ +} flexio_shifter_config_t; + +/*! @brief typedef for FlexIO simulated driver interrupt handler.*/ +typedef void (*flexio_isr_t)(void *base, void *handle); + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif /*_cplusplus*/ + +/*! + * @name FlexIO Initialization and De-initialization + * @{ + */ + +/*! + * @brief Gets the default configuration to configure FlexIO module. The configuration + * can used directly for calling FLEXIO_Configure(). + * + * Example: + @code + flexio_config_t config; + FLEXIO_GetDefaultConfig(&config); + @endcode + * + * @param userConfig pointer to flexio_config_t structure +*/ +void FLEXIO_GetDefaultConfig(flexio_config_t *userConfig); + +/*! + * @brief Configures the FlexIO with FlexIO configuration. The configuration structure + * can be filled by the user, or be set with default values by FLEXIO_GetDefaultConfig(). + * + * Example + @code + flexio_config_t config = { + .enableFlexio = true, + .enableInDoze = false, + .enableInDebug = true, + .enableFastAccess = false + }; + FLEXIO_Configure(base, &config); + @endcode + * + * @param base FlexIO peripheral base address + * @param userConfig pointer to flexio_config_t structure +*/ +void FLEXIO_Init(FLEXIO_Type *base, const flexio_config_t *userConfig); + +/*! + * @brief Gates the FlexIO clock. Call this API to stop the FlexIO clock. + * + * @note After calling this API, call the FLEXO_Init to use the FlexIO module. + * + * @param base FlexIO peripheral base address +*/ +void FLEXIO_Deinit(FLEXIO_Type *base); + +/* @} */ + +/*! + * @name FlexIO Basic Operation + * @{ + */ + +/*! + * @brief Resets the FlexIO module. + * + * @param base FlexIO peripheral base address +*/ +void FLEXIO_Reset(FLEXIO_Type *base); + +/*! + * @brief Enables the FlexIO module operation. + * + * @param base FlexIO peripheral base address + * @param enable true to enable, false to disable. +*/ +static inline void FLEXIO_Enable(FLEXIO_Type *base, bool enable) +{ + if (enable) + { + base->CTRL |= FLEXIO_CTRL_FLEXEN_MASK; + } + else + { + base->CTRL &= ~FLEXIO_CTRL_FLEXEN_MASK; + } +} + +#if defined(FSL_FEATURE_FLEXIO_HAS_PIN_STATUS) && FSL_FEATURE_FLEXIO_HAS_PIN_STATUS +/*! + * @brief Reads the input data on each of the FlexIO pins. + * + * @param base FlexIO peripheral base address + * @return FlexIO pin input data +*/ +static inline uint32_t FLEXIO_ReadPinInput(FLEXIO_Type *base) +{ + return base->PIN; +} +#endif /*FSL_FEATURE_FLEXIO_HAS_PIN_STATUS*/ + +#if defined(FSL_FEATURE_FLEXIO_HAS_STATE_MODE) && FSL_FEATURE_FLEXIO_HAS_STATE_MODE +/*! + * @brief Gets the current state pointer for state mode use. + * + * @param base FlexIO peripheral base address + * @return current state pointer +*/ +static inline uint8_t FLEXIO_GetShifterState(FLEXIO_Type *base) +{ + return ((base->SHIFTSTATE) & FLEXIO_SHIFTSTATE_STATE_MASK); +} +#endif /*FSL_FEATURE_FLEXIO_HAS_STATE_MODE*/ + +/*! + * @brief Configures the shifter with shifter configuration. The configuration structure + * covers both the SHIFTCTL and SHIFTCFG registers. To configure the shifter to the proper + * mode, select which timer controls the shifter to shift, whether to generate start bit/stop + * bit, and the polarity of start bit and stop bit. + * + * Example + @code + flexio_shifter_config_t config = { + .timerSelect = 0, + .timerPolarity = kFLEXIO_ShifterTimerPolarityOnPositive, + .pinConfig = kFLEXIO_PinConfigOpenDrainOrBidirection, + .pinPolarity = kFLEXIO_PinActiveLow, + .shifterMode = kFLEXIO_ShifterModeTransmit, + .inputSource = kFLEXIO_ShifterInputFromPin, + .shifterStop = kFLEXIO_ShifterStopBitHigh, + .shifterStart = kFLEXIO_ShifterStartBitLow + }; + FLEXIO_SetShifterConfig(base, &config); + @endcode + * + * @param base FlexIO peripheral base address + * @param index shifter index + * @param shifterConfig pointer to flexio_shifter_config_t structure +*/ +void FLEXIO_SetShifterConfig(FLEXIO_Type *base, uint8_t index, const flexio_shifter_config_t *shifterConfig); +/*! + * @brief Configures the timer with the timer configuration. The configuration structure + * covers both the TIMCTL and TIMCFG registers. To configure the timer to the proper + * mode, select trigger source for timer and the timer pin output and the timing for timer. + * + * Example + @code + flexio_timer_config_t config = { + .triggerSelect = FLEXIO_TIMER_TRIGGER_SEL_SHIFTnSTAT(0), + .triggerPolarity = kFLEXIO_TimerTriggerPolarityActiveLow, + .triggerSource = kFLEXIO_TimerTriggerSourceInternal, + .pinConfig = kFLEXIO_PinConfigOpenDrainOrBidirection, + .pinSelect = 0, + .pinPolarity = kFLEXIO_PinActiveHigh, + .timerMode = kFLEXIO_TimerModeDual8BitBaudBit, + .timerOutput = kFLEXIO_TimerOutputZeroNotAffectedByReset, + .timerDecrement = kFLEXIO_TimerDecSrcOnFlexIOClockShiftTimerOutput, + .timerReset = kFLEXIO_TimerResetOnTimerPinEqualToTimerOutput, + .timerDisable = kFLEXIO_TimerDisableOnTimerCompare, + .timerEnable = kFLEXIO_TimerEnableOnTriggerHigh, + .timerStop = kFLEXIO_TimerStopBitEnableOnTimerDisable, + .timerStart = kFLEXIO_TimerStartBitEnabled + }; + FLEXIO_SetTimerConfig(base, &config); + @endcode + * + * @param base FlexIO peripheral base address + * @param index timer index + * @param timerConfig pointer to flexio_timer_config_t structure +*/ +void FLEXIO_SetTimerConfig(FLEXIO_Type *base, uint8_t index, const flexio_timer_config_t *timerConfig); + +/* @} */ + +/*! + * @name FlexIO Interrupt Operation + * @{ + */ + +/*! + * @brief Enables the shifter status interrupt. The interrupt generates when the corresponding SSF is set. + * + * @param base FlexIO peripheral base address + * @param mask the shifter status mask which could be calculated by (1 << shifter index) + * @note for multiple shifter status interrupt enable, for example, two shifter status enable, could calculate + * the mask by using ((1 << shifter index0) | (1 << shifter index1)) +*/ +static inline void FLEXIO_EnableShifterStatusInterrupts(FLEXIO_Type *base, uint32_t mask) +{ + base->SHIFTSIEN |= mask; +} + +/*! + * @brief Disables the shifter status interrupt. The interrupt won't generate when the corresponding SSF is set. + * + * @param base FlexIO peripheral base address + * @param mask the shifter status mask which could be calculated by (1 << shifter index) + * @note for multiple shifter status interrupt enable, for example, two shifter status enable, could calculate + * the mask by using ((1 << shifter index0) | (1 << shifter index1)) +*/ +static inline void FLEXIO_DisableShifterStatusInterrupts(FLEXIO_Type *base, uint32_t mask) +{ + base->SHIFTSIEN &= ~mask; +} + +/*! + * @brief Enables the shifter error interrupt. The interrupt generates when the corresponding SEF is set. + * + * @param base FlexIO peripheral base address + * @param mask the shifter error mask which could be calculated by (1 << shifter index) + * @note for multiple shifter error interrupt enable, for example, two shifter error enable, could calculate + * the mask by using ((1 << shifter index0) | (1 << shifter index1)) +*/ +static inline void FLEXIO_EnableShifterErrorInterrupts(FLEXIO_Type *base, uint32_t mask) +{ + base->SHIFTEIEN |= mask; +} + +/*! + * @brief Disables the shifter error interrupt. The interrupt won't generate when the corresponding SEF is set. + * + * @param base FlexIO peripheral base address + * @param mask the shifter error mask which could be calculated by (1 << shifter index) + * @note for multiple shifter error interrupt enable, for example, two shifter error enable, could calculate + * the mask by using ((1 << shifter index0) | (1 << shifter index1)) +*/ +static inline void FLEXIO_DisableShifterErrorInterrupts(FLEXIO_Type *base, uint32_t mask) +{ + base->SHIFTEIEN &= ~mask; +} + +/*! + * @brief Enables the timer status interrupt. The interrupt generates when the corresponding SSF is set. + * + * @param base FlexIO peripheral base address + * @param mask the timer status mask which could be calculated by (1 << timer index) + * @note for multiple timer status interrupt enable, for example, two timer status enable, could calculate + * the mask by using ((1 << timer index0) | (1 << timer index1)) +*/ +static inline void FLEXIO_EnableTimerStatusInterrupts(FLEXIO_Type *base, uint32_t mask) +{ + base->TIMIEN |= mask; +} + +/*! + * @brief Disables the timer status interrupt. The interrupt won't generate when the corresponding SSF is set. + * + * @param base FlexIO peripheral base address + * @param mask the timer status mask which could be calculated by (1 << timer index) + * @note for multiple timer status interrupt enable, for example, two timer status enable, could calculate + * the mask by using ((1 << timer index0) | (1 << timer index1)) +*/ +static inline void FLEXIO_DisableTimerStatusInterrupts(FLEXIO_Type *base, uint32_t mask) +{ + base->TIMIEN &= ~mask; +} + +/* @} */ + +/*! + * @name FlexIO Status Operation + * @{ + */ + +/*! + * @brief Gets the shifter status flags. + * + * @param base FlexIO peripheral base address + * @return shifter status flags +*/ +static inline uint32_t FLEXIO_GetShifterStatusFlags(FLEXIO_Type *base) +{ + return ((base->SHIFTSTAT) & FLEXIO_SHIFTSTAT_SSF_MASK); +} + +/*! + * @brief Clears the shifter status flags. + * + * @param base FlexIO peripheral base address + * @param mask the shifter status mask which could be calculated by (1 << shifter index) + * @note for clearing multiple shifter status flags, for example, two shifter status flags, could calculate + * the mask by using ((1 << shifter index0) | (1 << shifter index1)) +*/ +static inline void FLEXIO_ClearShifterStatusFlags(FLEXIO_Type *base, uint32_t mask) +{ + base->SHIFTSTAT = mask; +} + +/*! + * @brief Gets the shifter error flags. + * + * @param base FlexIO peripheral base address + * @return shifter error flags +*/ +static inline uint32_t FLEXIO_GetShifterErrorFlags(FLEXIO_Type *base) +{ + return ((base->SHIFTERR) & FLEXIO_SHIFTERR_SEF_MASK); +} + +/*! + * @brief Clears the shifter error flags. + * + * @param base FlexIO peripheral base address + * @param mask the shifter error mask which could be calculated by (1 << shifter index) + * @note for clearing multiple shifter error flags, for example, two shifter error flags, could calculate + * the mask by using ((1 << shifter index0) | (1 << shifter index1)) +*/ +static inline void FLEXIO_ClearShifterErrorFlags(FLEXIO_Type *base, uint32_t mask) +{ + base->SHIFTERR = mask; +} + +/*! + * @brief Gets the timer status flags. + * + * @param base FlexIO peripheral base address + * @return timer status flags +*/ +static inline uint32_t FLEXIO_GetTimerStatusFlags(FLEXIO_Type *base) +{ + return ((base->TIMSTAT) & FLEXIO_TIMSTAT_TSF_MASK); +} + +/*! + * @brief Clears the timer status flags. + * + * @param base FlexIO peripheral base address + * @param mask the timer status mask which could be calculated by (1 << timer index) + * @note for clearing multiple timer status flags, for example, two timer status flags, could calculate + * the mask by using ((1 << timer index0) | (1 << timer index1)) +*/ +static inline void FLEXIO_ClearTimerStatusFlags(FLEXIO_Type *base, uint32_t mask) +{ + base->TIMSTAT = mask; +} + +/* @} */ + +/*! + * @name FlexIO DMA Operation + * @{ + */ + +/*! + * @brief Enables/disables the shifter status DMA. The DMA request generates when the corresponding SSF is set. + * + * @note For multiple shifter status DMA enables, for example, calculate + * the mask by using ((1 << shifter index0) | (1 << shifter index1)) + * + * @param base FlexIO peripheral base address + * @param mask the shifter status mask which could be calculated by (1 << shifter index) + * @param enable True to enable, false to disable. +*/ +static inline void FLEXIO_EnableShifterStatusDMA(FLEXIO_Type *base, uint32_t mask, bool enable) +{ + if (enable) + { + base->SHIFTSDEN |= mask; + } + else + { + base->SHIFTSDEN &= ~mask; + } +} + +/*! + * @brief Gets the shifter buffer address for the DMA transfer usage. + * + * @param base FlexIO peripheral base address + * @param type shifter type of flexio_shifter_buffer_type_t + * @param index shifter index + * @return corresponding shifter buffer index +*/ +uint32_t FLEXIO_GetShifterBufferAddress(FLEXIO_Type *base, flexio_shifter_buffer_type_t type, uint8_t index); + +/*! + * @brief Registers the handle and the interrupt handler for the FlexIO-simulated peripheral. + * + * @param base pointer to FlexIO simulated peripheral type. + * @param handle pointer to handler for FlexIO simulated peripheral. + * @param isr FlexIO simulated peripheral interrupt handler. + * @retval kStatus_Success Successfully create the handle. + * @retval kStatus_OutOfRange The FlexIO type/handle/ISR table out of range. +*/ +status_t FLEXIO_RegisterHandleIRQ(void *base, void *handle, flexio_isr_t isr); + +/*! + * @brief Unregisters the handle and the interrupt handler for the FlexIO-simulated peripheral. + * + * @param base pointer to FlexIO simulated peripheral type. + * @retval kStatus_Success Successfully create the handle. + * @retval kStatus_OutOfRange The FlexIO type/handle/ISR table out of range. +*/ +status_t FLEXIO_UnregisterHandleIRQ(void *base); +/* @} */ + +#if defined(__cplusplus) +} +#endif /*_cplusplus*/ +/*@}*/ + +#endif /*_FSL_FLEXIO_H_*/ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_camera.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_camera.c new file mode 100644 index 00000000000..fa7cc9bd29c --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_camera.c @@ -0,0 +1,157 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_flexio_camera.h" + +/******************************************************************************* + * Codes + ******************************************************************************/ + +void FLEXIO_CAMERA_GetDefaultConfig(flexio_camera_config_t *config) +{ + assert(config); + + config->enablecamera = false; + config->enableInDoze = false; + config->enableInDebug = false; + config->enableFastAccess = false; +} + +void FLEXIO_CAMERA_Init(FLEXIO_CAMERA_Type *base, const flexio_camera_config_t *config) +{ + assert(base && config); + + volatile uint32_t i = 0; + volatile uint32_t controlVal = 0; + + /* Ungate flexio clock. */ + CLOCK_EnableClock(kCLOCK_Flexio0); + + flexio_shifter_config_t shifterConfig; + flexio_timer_config_t timerConfig; + + /* Clear the shifterConfig & timerConfig struct. */ + memset(&shifterConfig, 0, sizeof(shifterConfig)); + memset(&timerConfig, 0, sizeof(timerConfig)); + + /* Reset flexio before configuration. */ + FLEXIO_Reset(base->flexioBase); + + /* Configure flexio camera */ + controlVal = base->flexioBase->CTRL; + controlVal &= + ~(FLEXIO_CTRL_DOZEN_MASK | FLEXIO_CTRL_DBGE_MASK | FLEXIO_CTRL_FASTACC_MASK | FLEXIO_CTRL_FLEXEN_MASK); + controlVal |= (FLEXIO_CTRL_DOZEN(config->enableInDoze) | FLEXIO_CTRL_DBGE(config->enableInDebug) | + FLEXIO_CTRL_FASTACC(config->enableFastAccess) | FLEXIO_CTRL_FLEXEN(config->enablecamera)); + + base->flexioBase->CTRL = controlVal; + + /* FLEXIO_CAMERA shifter config */ + shifterConfig.timerSelect = base->timerIdx; + shifterConfig.timerPolarity = kFLEXIO_ShifterTimerPolarityOnPositive; + shifterConfig.pinConfig = kFLEXIO_PinConfigOutputDisabled; + shifterConfig.pinSelect = base->datPinStartIdx; + shifterConfig.pinPolarity = kFLEXIO_PinActiveHigh; + shifterConfig.shifterMode = kFLEXIO_ShifterModeReceive; + shifterConfig.parallelWidth = FLEXIO_CAMERA_PARALLEL_DATA_WIDTH - 1U; + shifterConfig.inputSource = kFLEXIO_ShifterInputFromNextShifterOutput; + shifterConfig.shifterStop = kFLEXIO_ShifterStopBitDisable; + shifterConfig.shifterStart = kFLEXIO_ShifterStartBitDisabledLoadDataOnEnable; + /* Configure the shifters as FIFO buffer. */ + for (i = base->shifterStartIdx; i < (base->shifterStartIdx + base->shifterCount - 1U); i++) + { + FLEXIO_SetShifterConfig(base->flexioBase, i, &shifterConfig); + } + shifterConfig.inputSource = kFLEXIO_ShifterInputFromPin; + FLEXIO_SetShifterConfig(base->flexioBase, i, &shifterConfig); + + /* FLEXIO_CAMERA timer config, the PCLK's clk is source of timer to drive the shifter, the HREF is the selecting + * signal for available data. */ + timerConfig.triggerSelect = FLEXIO_TIMER_TRIGGER_SEL_PININPUT(base->hrefPinIdx); + timerConfig.triggerPolarity = kFLEXIO_TimerTriggerPolarityActiveHigh; + timerConfig.triggerSource = kFLEXIO_TimerTriggerSourceInternal; + timerConfig.pinConfig = kFLEXIO_PinConfigOutputDisabled; + timerConfig.pinSelect = base->pclkPinIdx; + timerConfig.pinPolarity = kFLEXIO_PinActiveHigh; + timerConfig.timerMode = kFLEXIO_TimerModeSingle16Bit; + timerConfig.timerOutput = kFLEXIO_TimerOutputZeroNotAffectedByReset; + timerConfig.timerDecrement = kFLEXIO_TimerDecSrcOnPinInputShiftPinInput; + timerConfig.timerReset = kFLEXIO_TimerResetOnTimerTriggerRisingEdge; + timerConfig.timerDisable = kFLEXIO_TimerDisableOnTriggerFallingEdge; + timerConfig.timerEnable = kFLEXIO_TimerEnableOnTriggerRisingEdge; + timerConfig.timerStop = kFLEXIO_TimerStopBitDisabled; + timerConfig.timerStart = kFLEXIO_TimerStartBitDisabled; + timerConfig.timerCompare = 8U * base->shifterCount - 1U; + + FLEXIO_SetTimerConfig(base->flexioBase, base->timerIdx, &timerConfig); + /* Clear flags. */ + FLEXIO_ClearShifterErrorFlags(base->flexioBase, ((1U << (base->shifterCount)) - 1U) << (base->shifterStartIdx)); + FLEXIO_ClearTimerStatusFlags(base->flexioBase, 1U << (base->timerIdx)); +} + +void FLEXIO_CAMERA_Deinit(FLEXIO_CAMERA_Type *base) +{ + /* Disable FLEXIO CAMERA module. */ + FLEXIO_CAMERA_Enable(base, false); + + /* Gate flexio clock. */ + CLOCK_DisableClock(kCLOCK_Flexio0); +} + +uint32_t FLEXIO_CAMERA_GetStatusFlags(FLEXIO_CAMERA_Type *base) +{ + uint32_t status = 0; + status = ((FLEXIO_GetShifterStatusFlags(base->flexioBase) >> (base->shifterStartIdx)) & + ((1U << (base->shifterCount)) - 1U)); + return status; +} + +void FLEXIO_CAMERA_ClearStatusFlags(FLEXIO_CAMERA_Type *base, uint32_t mask) +{ + if (mask & kFLEXIO_CAMERA_RxDataRegFullFlag) + { + FLEXIO_ClearShifterStatusFlags(base->flexioBase, ((1U << (base->shifterCount)) - 1U) + << (base->shifterStartIdx)); + } + if (mask & kFLEXIO_CAMERA_RxErrorFlag) + { /* Clear error flags if they are asserted to make sure the buffer would be available. */ + FLEXIO_ClearShifterErrorFlags(base->flexioBase, ((1U << (base->shifterCount)) - 1U) << (base->shifterStartIdx)); + } +} + +void FLEXIO_CAMERA_EnableInterrupt(FLEXIO_CAMERA_Type *base) +{ + FLEXIO_EnableShifterStatusInterrupts(base->flexioBase, 1U << (base->shifterStartIdx)); +} + +void FLEXIO_CAMERA_DisableInterrupt(FLEXIO_CAMERA_Type *base) +{ + FLEXIO_DisableShifterStatusInterrupts(base->flexioBase, 1U << (base->shifterStartIdx)); +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_camera.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_camera.h new file mode 100644 index 00000000000..f4e851781f9 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_camera.h @@ -0,0 +1,259 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _FSL_FLEXIO_CAMERA_H_ +#define _FSL_FLEXIO_CAMERA_H_ + +#include "fsl_common.h" +#include "fsl_flexio.h" + +/*! + * @addtogroup flexio_camera + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief FlexIO camera driver version 2.1.0. */ +#define FSL_FLEXIO_CAMERA_DRIVER_VERSION (MAKE_VERSION(2, 1, 0)) +/*@}*/ + +/*! @brief Define the camera CPI interface is constantly 8-bit width. */ +#define FLEXIO_CAMERA_PARALLEL_DATA_WIDTH (8U) + +/*! @brief Error codes for the CAMERA driver. */ +enum _flexio_camera_status +{ + kStatus_FLEXIO_CAMERA_RxBusy = MAKE_STATUS(kStatusGroup_FLEXIO_CAMERA, 0), /*!< Receiver is busy. */ + kStatus_FLEXIO_CAMERA_RxIdle = MAKE_STATUS(kStatusGroup_FLEXIO_CAMERA, 1), /*!< CAMERA receiver is idle. */ +}; + +/*! @brief Define FlexIO CAMERA status mask. */ +enum _flexio_camera_status_flags +{ + kFLEXIO_CAMERA_RxDataRegFullFlag = 0x1U, /*!< Receive buffer full flag. */ + kFLEXIO_CAMERA_RxErrorFlag = 0x2U, /*!< Receive buffer error flag. */ +}; + +/*! + * @brief Define structure of configuring the FlexIO camera device. + */ +typedef struct _flexio_camera_type +{ + FLEXIO_Type *flexioBase; /*!< FlexIO module base address. */ + uint32_t datPinStartIdx; /*!< First data pin (D0) index for flexio_camera. + Then the successive following FLEXIO_CAMERA_DATA_WIDTH-1 pins + would be used as D1-D7.*/ + uint32_t pclkPinIdx; /*!< Pixel clock pin (PCLK) index for flexio_camera. */ + uint32_t hrefPinIdx; /*!< Horizontal sync pin (HREF) index for flexio_camera. */ + + uint32_t shifterStartIdx; /*!< First shifter index used for flexio_camera data FIFO. */ + uint32_t shifterCount; /*!< The count of shifters that are used as flexio_camera data FIFO. */ + uint32_t timerIdx; /*!< Timer index used for flexio_camera in FlexIO. */ +} FLEXIO_CAMERA_Type; + +/*! @brief Define FlexIO camera user configuration structure. */ +typedef struct _flexio_camera_config +{ + bool enablecamera; /*!< Enable/disable FlexIO camera TX & RX. */ + bool enableInDoze; /*!< Enable/disable FlexIO operation in doze mode*/ + bool enableInDebug; /*!< Enable/disable FlexIO operation in debug mode*/ + bool enableFastAccess; /*!< Enable/disable fast access to FlexIO registers, + fast access requires the FlexIO clock to be at least + twice the frequency of the bus clock. */ +} flexio_camera_config_t; + +/*! @brief Define FlexIO CAMERA transfer structure. */ +typedef struct _flexio_camera_transfer +{ + uint32_t dataAddress; /*!< Transfer buffer*/ + uint32_t dataNum; /*!< Transfer num*/ +} flexio_camera_transfer_t; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif /*_cplusplus*/ + +/*! + * @name Initialize and configuration + * @{ + */ + +/*! + * @brief Ungates the FlexIO clock, reset the FlexIO module and do FlexIO CAMERA + * hardware configuration. + * + * @param base pointer to FLEXIO_CAMERA_Type structure + * @param config pointer to flexio_camera_config_t structure +*/ +void FLEXIO_CAMERA_Init(FLEXIO_CAMERA_Type *base, const flexio_camera_config_t *config); + +/*! + * @brief Disables the FlexIO CAMERA and gate the FlexIO clock. + * + * @note After calling this API, user need to call FLEXO_CAMERA_Init to use the FlexIO CAMERA module. + * + * @param base pointer to FLEXIO_CAMERA_Type structure +*/ +void FLEXIO_CAMERA_Deinit(FLEXIO_CAMERA_Type *base); + +/*! + * @brief Get the default configuration to configure FlexIO CAMERA. The configuration + * could be used directly for calling FLEXIO_CAMERA_Init(). + * Example: + @code + flexio_camera_config_t config; + FLEXIO_CAMERA_GetDefaultConfig(&userConfig); + @endcode + * @param config pointer to flexio_camera_config_t structure +*/ +void FLEXIO_CAMERA_GetDefaultConfig(flexio_camera_config_t *config); + +/*! + * @brief Enables/disables the FlexIO CAMERA module operation. + * + * @param base pointer to FLEXIO_CAMERA_Type + * @param enable True to enable, false to disable. +*/ +static inline void FLEXIO_CAMERA_Enable(FLEXIO_CAMERA_Type *base, bool enable) +{ + if (enable) + { + base->flexioBase->CTRL |= FLEXIO_CTRL_FLEXEN_MASK; + } + else + { + base->flexioBase->CTRL &= ~FLEXIO_CTRL_FLEXEN_MASK; + } +} + +/*! @} */ + +/*! + * @name Status + * @{ + */ + +/*! + * @brief Gets the FlexIO CAMERA status flags. + * + * @param base pointer to FLEXIO_CAMERA_Type structure + * @return FlexIO shifter status flags + * @arg FLEXIO_SHIFTSTAT_SSF_MASK + * @arg 0 +*/ +uint32_t FLEXIO_CAMERA_GetStatusFlags(FLEXIO_CAMERA_Type *base); + +/*! + * @brief Clears the receive buffer full flag manually. + * + * @param base pointer to the device. + * @param mask status flag + * The parameter could be any combination of the following values: + * @arg kFLEXIO_CAMERA_RxDataRegFullFlag + * @arg kFLEXIO_CAMERA_RxErrorFlag + */ +void FLEXIO_CAMERA_ClearStatusFlags(FLEXIO_CAMERA_Type *base, uint32_t mask); + +/* @} */ + +/*! + * @name Interrupts + * @{ + */ + +/*! + * @brief Switches on the interrupt for receive buffer full event. + * + * @param base pointer to the device. + */ +void FLEXIO_CAMERA_EnableInterrupt(FLEXIO_CAMERA_Type *base); + +/*! + * @brief Switches off the interrupt for receive buffer full event. + * + * @param base pointer to the device. + * + */ +void FLEXIO_CAMERA_DisableInterrupt(FLEXIO_CAMERA_Type *base); + +/*! @} */ + +/*! + * @name DMA support + * @{ + */ + +/*! + * @brief Enables/disables the FlexIO CAMERA receive DMA. + * + * @param base pointer to FLEXIO_CAMERA_Type structure + * @param enable True to enable, false to disable. + * + * The FlexIO camera mode can't work without the DMA or EDMA support, + * Usually, it needs at least two DMA or EDMA channel, one for transferring data from + * camera, such as 0V7670 to FlexIO buffer, another is for transferring data from FlexIO + * buffer to LCD. + * + */ +static inline void FLEXIO_CAMERA_EnableRxDMA(FLEXIO_CAMERA_Type *base, bool enable) +{ + FLEXIO_EnableShifterStatusDMA(base->flexioBase, 1 << base->shifterStartIdx, enable); +} + +/*! + * @brief Gets the data from the receive buffer. + * + * @param base pointer to the device. + * @return data pointer to the buffer that would keep the data with count of base->shifterCount . + */ +static inline uint32_t FLEXIO_CAMERA_GetRxBufferAddress(FLEXIO_CAMERA_Type *base) +{ + return FLEXIO_GetShifterBufferAddress(base->flexioBase, kFLEXIO_ShifterBuffer, base->shifterStartIdx); +} + +/*! @} */ + +#if defined(__cplusplus) +} +#endif /*_cplusplus*/ + +/*@}*/ + +#endif /*_FSL_FLEXIO_CAMERA_H_*/ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_camera_edma.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_camera_edma.c new file mode 100644 index 00000000000..a96fa4818d3 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_camera_edma.c @@ -0,0 +1,218 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_flexio_camera_edma.h" +#include "fsl_dmamux.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*base, cameraPrivateHandle->handle); + + if (cameraPrivateHandle->handle->callback) + { + cameraPrivateHandle->handle->callback(cameraPrivateHandle->base, cameraPrivateHandle->handle, + kStatus_FLEXIO_CAMERA_RxIdle, cameraPrivateHandle->handle->userData); + } + } +} +status_t FLEXIO_CAMERA_TransferCreateHandleEDMA(FLEXIO_CAMERA_Type *base, + flexio_camera_edma_handle_t *handle, + flexio_camera_edma_transfer_callback_t callback, + void *userData, + edma_handle_t *rxEdmaHandle) +{ + assert(handle); + + uint8_t index = 0; + + /* Find the an empty handle pointer to store the handle. */ + for (index = 0; index < FLEXIO_CAMERA_HANDLE_COUNT; index++) + { + if (s_edmaPrivateHandle[index].base == NULL) + { + s_edmaPrivateHandle[index].base = base; + s_edmaPrivateHandle[index].handle = handle; + break; + } + } + + if (index == FLEXIO_CAMERA_HANDLE_COUNT) + { + return kStatus_OutOfRange; + } + + s_edmaPrivateHandle[index].base = base; + s_edmaPrivateHandle[index].handle = handle; + + memset(handle, 0, sizeof(*handle)); + + handle->rxState = kFLEXIO_CAMERA_RxIdle; + handle->rxEdmaHandle = rxEdmaHandle; + + handle->callback = callback; + handle->userData = userData; + + /* Configure RX. */ + if (rxEdmaHandle) + { + EDMA_SetCallback(handle->rxEdmaHandle, FLEXIO_CAMERA_TransferReceiveEDMACallback, &s_edmaPrivateHandle); + } + + return kStatus_Success; +} + +status_t FLEXIO_CAMERA_TransferReceiveEDMA(FLEXIO_CAMERA_Type *base, + flexio_camera_edma_handle_t *handle, + flexio_camera_transfer_t *xfer) +{ + assert(handle->rxEdmaHandle); + + edma_transfer_config_t xferConfig; + status_t status; + + /* If previous RX not finished. */ + if (kFLEXIO_CAMERA_RxBusy == handle->rxState) + { + status = kStatus_FLEXIO_CAMERA_RxBusy; + } + else + { + handle->rxState = kFLEXIO_CAMERA_RxBusy; + + /* Prepare transfer. */ + EDMA_PrepareTransfer(&xferConfig, (void *)FLEXIO_CAMERA_GetRxBufferAddress(base), 32, (void *)xfer->dataAddress, + 32, 32, xfer->dataNum, kEDMA_PeripheralToMemory); + + /* Submit transfer. */ + EDMA_SubmitTransfer(handle->rxEdmaHandle, &xferConfig); + EDMA_StartTransfer(handle->rxEdmaHandle); + /* Enable CAMERA RX EDMA. */ + FLEXIO_CAMERA_EnableRxDMA(base, true); + status = kStatus_Success; + } + + return status; +} + +void FLEXIO_CAMERA_TransferAbortReceiveEDMA(FLEXIO_CAMERA_Type *base, flexio_camera_edma_handle_t *handle) +{ + assert(handle->rxEdmaHandle); + + /* Disable CAMERA RX EDMA. */ + FLEXIO_CAMERA_EnableRxDMA(base, false); + + /* Stop transfer. */ + EDMA_StopTransfer(handle->rxEdmaHandle); + + handle->rxState = kFLEXIO_CAMERA_RxIdle; +} + +status_t FLEXIO_CAMERA_TransferGetReceiveCountEDMA(FLEXIO_CAMERA_Type *base, + flexio_camera_edma_handle_t *handle, + size_t *count) +{ + assert(handle->rxEdmaHandle); + + if (!count) + { + return kStatus_InvalidArgument; + } + + if (kFLEXIO_CAMERA_RxBusy == handle->rxState) + { + *count = (handle->rxSize - EDMA_GetRemainingBytes(handle->rxEdmaHandle->base, handle->rxEdmaHandle->channel)); + } + else + { + *count = handle->rxSize; + } + + return kStatus_Success; +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_camera_edma.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_camera_edma.h new file mode 100644 index 00000000000..68cde163672 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_camera_edma.h @@ -0,0 +1,147 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FSL_FLEXIO_CAMERA_EDMA_H_ +#define _FSL_FLEXIO_CAMERA_EDMA_H_ + +#include "fsl_flexio_camera.h" +#include "fsl_dmamux.h" +#include "fsl_edma.h" + +/*! + * @addtogroup flexio_edma_camera + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @brief Forward declaration of the handle typedef. */ +typedef struct _flexio_camera_edma_handle flexio_camera_edma_handle_t; + +/*! @brief CAMERA transfer callback function. */ +typedef void (*flexio_camera_edma_transfer_callback_t)(FLEXIO_CAMERA_Type *base, + flexio_camera_edma_handle_t *handle, + status_t status, + void *userData); + +/*! +* @brief CAMERA eDMA handle +*/ +struct _flexio_camera_edma_handle +{ + flexio_camera_edma_transfer_callback_t callback; /*!< Callback function. */ + void *userData; /*!< CAMERA callback function parameter.*/ + size_t rxSize; /*!< Total bytes to be received. */ + edma_handle_t *rxEdmaHandle; /*!< The eDMA RX channel used. */ + volatile uint8_t rxState; /*!< RX transfer state */ +}; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @name eDMA transactional + * @{ + */ + +/*! + * @brief Initializes the camera handle, which is used in transactional functions. + * + * @param base pointer to FLEXIO_CAMERA_Type. + * @param handle Pointer to flexio_camera_edma_handle_t structure. + * @param callback The callback function. + * @param userData The parameter of the callback function. + * @param rxEdmaHandle User requested DMA handle for RX DMA transfer. + * @retval kStatus_Success Successfully create the handle. + * @retval kStatus_OutOfRange The FlexIO camera eDMA type/handle table out of range. + */ +status_t FLEXIO_CAMERA_TransferCreateHandleEDMA(FLEXIO_CAMERA_Type *base, + flexio_camera_edma_handle_t *handle, + flexio_camera_edma_transfer_callback_t callback, + void *userData, + edma_handle_t *rxEdmaHandle); + +/*! + * @brief Receives data using eDMA. + * + * This function receives data using eDMA. This is a non-blocking function, which returns + * right away. When all data is received, the receive callback function is called. + * + * @param base Pointer to the FLEXIO_CAMERA_Type. + * @param handle Pointer to the flexio_camera_edma_handle_t structure. + * @param xfer CAMERA eDMA transfer structure, see #flexio_camera_transfer_t. + * @retval kStatus_Success if succeeded, others failed. + * @retval kStatus_CAMERA_RxBusy Previous transfer on going. + */ +status_t FLEXIO_CAMERA_TransferReceiveEDMA(FLEXIO_CAMERA_Type *base, + flexio_camera_edma_handle_t *handle, + flexio_camera_transfer_t *xfer); + +/*! + * @brief Aborts the receive data which used the eDMA. + * + * This function aborts the receive data which used the eDMA. + * + * @param base Pointer to the FLEXIO_CAMERA_Type. + * @param handle Pointer to the flexio_camera_edma_handle_t structure. + */ +void FLEXIO_CAMERA_TransferAbortReceiveEDMA(FLEXIO_CAMERA_Type *base, flexio_camera_edma_handle_t *handle); + +/*! + * @brief Gets the remaining bytes to be received. + * + * This function gets the number of bytes still not received. + * + * @param base Pointer to the FLEXIO_CAMERA_Type. + * @param handle Pointer to the flexio_camera_edma_handle_t structure. + * @param count Number of bytes sent so far by the non-blocking transaction. + * @retval kStatus_Success Succeed get the transfer count. + * @retval kStatus_InvalidArgument The count parameter is invalid. + */ +status_t FLEXIO_CAMERA_TransferGetReceiveCountEDMA(FLEXIO_CAMERA_Type *base, + flexio_camera_edma_handle_t *handle, + size_t *count); + +/*@}*/ + +#if defined(__cplusplus) +} +#endif + +/*! @}*/ + +#endif /* _FSL_CAMERA_EDMA_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_i2c_master.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_i2c_master.c new file mode 100644 index 00000000000..f19c3a73777 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_i2c_master.c @@ -0,0 +1,763 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_flexio_i2c_master.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @brief FLEXIO I2C transfer state */ +enum _flexio_i2c_master_transfer_states +{ + kFLEXIO_I2C_Idle = 0x0U, /*!< I2C bus idle */ + kFLEXIO_I2C_CheckAddress = 0x1U, /*!< 7-bit address check state */ + kFLEXIO_I2C_SendCommand = 0x2U, /*!< Send command byte phase */ + kFLEXIO_I2C_SendData = 0x3U, /*!< Send data transfer phase*/ + kFLEXIO_I2C_ReceiveDataBegin = 0x4U, /*!< Receive data begin transfer phase*/ + kFLEXIO_I2C_ReceiveData = 0x5U, /*!< Receive data transfer phase*/ +}; + +/******************************************************************************* + * Prototypes + ******************************************************************************/ + +/*! + * @brief Set up master transfer, send slave address and decide the initial + * transfer state. + * + * @param base pointer to FLEXIO_I2C_Type structure + * @param handle pointer to flexio_i2c_master_handle_t structure which stores the transfer state + * @param transfer pointer to flexio_i2c_master_transfer_t structure + */ +static status_t FLEXIO_I2C_MasterTransferInitStateMachine(FLEXIO_I2C_Type *base, + flexio_i2c_master_handle_t *handle, + flexio_i2c_master_transfer_t *xfer); + +/*! + * @brief Master run transfer state machine to perform a byte of transfer. + * + * @param base pointer to FLEXIO_I2C_Type structure + * @param handle pointer to flexio_i2c_master_handle_t structure which stores the transfer state + * @param statusFlags flexio i2c hardware status + * @retval kStatus_Success Successfully run state machine + * @retval kStatus_FLEXIO_I2C_Nak Receive Nak during transfer + */ +static status_t FLEXIO_I2C_MasterTransferRunStateMachine(FLEXIO_I2C_Type *base, + flexio_i2c_master_handle_t *handle, + uint32_t statusFlags); + +/*! + * @brief Complete transfer, disable interrupt and call callback. + * + * @param base pointer to FLEXIO_I2C_Type structure + * @param handle pointer to flexio_i2c_master_handle_t structure which stores the transfer state + * @param status flexio transfer status + */ +static void FLEXIO_I2C_MasterTransferComplete(FLEXIO_I2C_Type *base, + flexio_i2c_master_handle_t *handle, + status_t status); + +/******************************************************************************* + * Codes + ******************************************************************************/ + +static status_t FLEXIO_I2C_MasterTransferInitStateMachine(FLEXIO_I2C_Type *base, + flexio_i2c_master_handle_t *handle, + flexio_i2c_master_transfer_t *xfer) +{ + bool needRestart; + uint32_t byteCount; + + /* Init the handle member. */ + handle->transfer.slaveAddress = xfer->slaveAddress; + handle->transfer.direction = xfer->direction; + handle->transfer.subaddress = xfer->subaddress; + handle->transfer.subaddressSize = xfer->subaddressSize; + handle->transfer.data = xfer->data; + handle->transfer.dataSize = xfer->dataSize; + handle->transfer.flags = xfer->flags; + handle->transferSize = xfer->dataSize; + + /* Initial state, i2c check address state. */ + handle->state = kFLEXIO_I2C_CheckAddress; + + /* Clear all status before transfer. */ + FLEXIO_I2C_MasterClearStatusFlags(base, kFLEXIO_I2C_ReceiveNakFlag); + + /* Calculate whether need to send re-start. */ + needRestart = (handle->transfer.subaddressSize != 0) && (handle->transfer.direction == kFLEXIO_I2C_Read); + + /* Calculate total byte count in a frame. */ + byteCount = 1; + + if (!needRestart) + { + byteCount += handle->transfer.dataSize; + } + + if (handle->transfer.subaddressSize != 0) + { + byteCount += handle->transfer.subaddressSize; + /* Next state, send command byte. */ + handle->state = kFLEXIO_I2C_SendCommand; + } + + /* Configure data count. */ + if (FLEXIO_I2C_MasterSetTransferCount(base, byteCount) != kStatus_Success) + { + return kStatus_InvalidArgument; + } + + while (!((FLEXIO_GetShifterStatusFlags(base->flexioBase) & (1U << base->shifterIndex[0])))) + { + } + + /* Send address byte first. */ + if (needRestart) + { + FLEXIO_I2C_MasterStart(base, handle->transfer.slaveAddress, kFLEXIO_I2C_Write); + } + else + { + FLEXIO_I2C_MasterStart(base, handle->transfer.slaveAddress, handle->transfer.direction); + } + + return kStatus_Success; +} + +static status_t FLEXIO_I2C_MasterTransferRunStateMachine(FLEXIO_I2C_Type *base, + flexio_i2c_master_handle_t *handle, + uint32_t statusFlags) +{ + if (statusFlags & kFLEXIO_I2C_ReceiveNakFlag) + { + /* Clear receive nak flag. */ + FLEXIO_ClearShifterErrorFlags(base->flexioBase, 1U << base->shifterIndex[1]); + + if ((!((handle->state == kFLEXIO_I2C_SendData) && (handle->transfer.dataSize == 0U))) && + (!(((handle->state == kFLEXIO_I2C_ReceiveData) || (handle->state == kFLEXIO_I2C_ReceiveDataBegin)) && + (handle->transfer.dataSize == 1U)))) + { + FLEXIO_I2C_MasterReadByte(base); + + FLEXIO_I2C_MasterAbortStop(base); + + handle->state = kFLEXIO_I2C_Idle; + + return kStatus_FLEXIO_I2C_Nak; + } + } + + if (handle->state == kFLEXIO_I2C_CheckAddress) + { + if (handle->transfer.direction == kFLEXIO_I2C_Write) + { + /* Next state, send data. */ + handle->state = kFLEXIO_I2C_SendData; + } + else + { + /* Next state, receive data begin. */ + handle->state = kFLEXIO_I2C_ReceiveDataBegin; + } + } + + if ((statusFlags & kFLEXIO_I2C_RxFullFlag) && (handle->state != kFLEXIO_I2C_ReceiveData)) + { + FLEXIO_I2C_MasterReadByte(base); + } + + switch (handle->state) + { + case kFLEXIO_I2C_SendCommand: + if (statusFlags & kFLEXIO_I2C_TxEmptyFlag) + { + if (handle->transfer.subaddressSize > 0) + { + handle->transfer.subaddressSize--; + FLEXIO_I2C_MasterWriteByte( + base, ((handle->transfer.subaddress) >> (8 * handle->transfer.subaddressSize))); + + if (handle->transfer.subaddressSize == 0) + { + /* Load re-start in advance. */ + if (handle->transfer.direction == kFLEXIO_I2C_Read) + { + while (!((FLEXIO_GetShifterStatusFlags(base->flexioBase) & (1U << base->shifterIndex[0])))) + { + } + FLEXIO_I2C_MasterRepeatedStart(base); + } + } + } + else + { + if (handle->transfer.direction == kFLEXIO_I2C_Write) + { + /* Next state, send data. */ + handle->state = kFLEXIO_I2C_SendData; + + /* Send first byte of data. */ + if (handle->transfer.dataSize > 0) + { + FLEXIO_I2C_MasterWriteByte(base, *handle->transfer.data); + + handle->transfer.data++; + handle->transfer.dataSize--; + } + } + else + { + FLEXIO_I2C_MasterSetTransferCount(base, (handle->transfer.dataSize + 1)); + FLEXIO_I2C_MasterStart(base, handle->transfer.slaveAddress, kFLEXIO_I2C_Read); + + /* Next state, receive data begin. */ + handle->state = kFLEXIO_I2C_ReceiveDataBegin; + } + } + } + break; + + /* Send command byte. */ + case kFLEXIO_I2C_SendData: + if (statusFlags & kFLEXIO_I2C_TxEmptyFlag) + { + /* Send one byte of data. */ + if (handle->transfer.dataSize > 0) + { + FLEXIO_I2C_MasterWriteByte(base, *handle->transfer.data); + + handle->transfer.data++; + handle->transfer.dataSize--; + } + else + { + FLEXIO_I2C_MasterStop(base); + handle->state = kFLEXIO_I2C_Idle; + } + } + break; + + case kFLEXIO_I2C_ReceiveDataBegin: + if (statusFlags & kFLEXIO_I2C_RxFullFlag) + { + handle->state = kFLEXIO_I2C_ReceiveData; + } + else if (statusFlags & kFLEXIO_I2C_TxEmptyFlag) + { + /* Read one byte of data. */ + FLEXIO_I2C_MasterWriteByte(base, 0xFFFFFFFFU); + + /* Send nak at the last receive byte. */ + if (handle->transfer.dataSize == 1) + { + FLEXIO_I2C_MasterEnableAck(base, false); + while (!((FLEXIO_GetShifterStatusFlags(base->flexioBase) & (1U << base->shifterIndex[0])))) + { + } + FLEXIO_I2C_MasterStop(base); + } + else + { + FLEXIO_I2C_MasterEnableAck(base, true); + } + } + else + { + } + break; + + case kFLEXIO_I2C_ReceiveData: + if (statusFlags & kFLEXIO_I2C_RxFullFlag) + { + *handle->transfer.data = FLEXIO_I2C_MasterReadByte(base); + handle->transfer.data++; + /* Receive one byte of data. */ + if (handle->transfer.dataSize--) + { + if (handle->transfer.dataSize != 0) + { + FLEXIO_I2C_MasterWriteByte(base, 0xFFFFFFFFU); + } + else + { + FLEXIO_I2C_MasterDisableInterrupts(base, kFLEXIO_I2C_RxFullInterruptEnable); + handle->state = kFLEXIO_I2C_Idle; + } + + /* Send nak at the last receive byte. */ + if (handle->transfer.dataSize == 1) + { + FLEXIO_I2C_MasterEnableAck(base, false); + while (!((FLEXIO_GetShifterStatusFlags(base->flexioBase) & (1U << base->shifterIndex[0])))) + { + } + FLEXIO_I2C_MasterStop(base); + } + } + } + break; + + default: + break; + } + + return kStatus_Success; +} + +static void FLEXIO_I2C_MasterTransferComplete(FLEXIO_I2C_Type *base, + flexio_i2c_master_handle_t *handle, + status_t status) +{ + FLEXIO_I2C_MasterDisableInterrupts(base, kFLEXIO_I2C_TxEmptyInterruptEnable | kFLEXIO_I2C_RxFullInterruptEnable); + + if (handle->completionCallback) + { + handle->completionCallback(base, handle, status, handle->userData); + } +} + +void FLEXIO_I2C_MasterInit(FLEXIO_I2C_Type *base, flexio_i2c_master_config_t *masterConfig, uint32_t srcClock_Hz) +{ + assert(base && masterConfig); + + flexio_shifter_config_t shifterConfig; + flexio_timer_config_t timerConfig; + uint32_t controlVal = 0; + + memset(&shifterConfig, 0, sizeof(shifterConfig)); + memset(&timerConfig, 0, sizeof(timerConfig)); + + /* Ungate flexio clock. */ + CLOCK_EnableClock(kCLOCK_Flexio0); + + FLEXIO_Reset(base->flexioBase); + + /* Do hardware configuration. */ + /* 1. Configure the shifter 0 for tx. */ + shifterConfig.timerSelect = base->timerIndex[1]; + shifterConfig.timerPolarity = kFLEXIO_ShifterTimerPolarityOnPositive; + shifterConfig.pinConfig = kFLEXIO_PinConfigOpenDrainOrBidirection; + shifterConfig.pinSelect = base->SDAPinIndex; + shifterConfig.pinPolarity = kFLEXIO_PinActiveLow; + shifterConfig.shifterMode = kFLEXIO_ShifterModeTransmit; + shifterConfig.inputSource = kFLEXIO_ShifterInputFromPin; + shifterConfig.shifterStop = kFLEXIO_ShifterStopBitHigh; + shifterConfig.shifterStart = kFLEXIO_ShifterStartBitLow; + + FLEXIO_SetShifterConfig(base->flexioBase, base->shifterIndex[0], &shifterConfig); + + /* 2. Configure the shifter 1 for rx. */ + shifterConfig.timerSelect = base->timerIndex[1]; + shifterConfig.timerPolarity = kFLEXIO_ShifterTimerPolarityOnNegitive; + shifterConfig.pinConfig = kFLEXIO_PinConfigOutputDisabled; + shifterConfig.pinSelect = base->SDAPinIndex; + shifterConfig.pinPolarity = kFLEXIO_PinActiveHigh; + shifterConfig.shifterMode = kFLEXIO_ShifterModeReceive; + shifterConfig.inputSource = kFLEXIO_ShifterInputFromPin; + shifterConfig.shifterStop = kFLEXIO_ShifterStopBitLow; + shifterConfig.shifterStart = kFLEXIO_ShifterStartBitDisabledLoadDataOnEnable; + + FLEXIO_SetShifterConfig(base->flexioBase, base->shifterIndex[1], &shifterConfig); + + /*3. Configure the timer 0 for generating bit clock. */ + timerConfig.triggerSelect = FLEXIO_TIMER_TRIGGER_SEL_SHIFTnSTAT(base->shifterIndex[0]); + timerConfig.triggerPolarity = kFLEXIO_TimerTriggerPolarityActiveLow; + timerConfig.triggerSource = kFLEXIO_TimerTriggerSourceInternal; + timerConfig.pinConfig = kFLEXIO_PinConfigOpenDrainOrBidirection; + timerConfig.pinSelect = base->SCLPinIndex; + timerConfig.pinPolarity = kFLEXIO_PinActiveHigh; + timerConfig.timerMode = kFLEXIO_TimerModeDual8BitBaudBit; + timerConfig.timerOutput = kFLEXIO_TimerOutputZeroNotAffectedByReset; + timerConfig.timerDecrement = kFLEXIO_TimerDecSrcOnFlexIOClockShiftTimerOutput; + timerConfig.timerReset = kFLEXIO_TimerResetOnTimerPinEqualToTimerOutput; + timerConfig.timerDisable = kFLEXIO_TimerDisableOnTimerCompare; + timerConfig.timerEnable = kFLEXIO_TimerEnableOnTriggerHigh; + timerConfig.timerStop = kFLEXIO_TimerStopBitEnableOnTimerDisable; + timerConfig.timerStart = kFLEXIO_TimerStartBitEnabled; + + /* Set TIMCMP[7:0] = (baud rate divider / 2) - 1. */ + timerConfig.timerCompare = (srcClock_Hz / masterConfig->baudRate_Bps) / 2 - 1; + + FLEXIO_SetTimerConfig(base->flexioBase, base->timerIndex[0], &timerConfig); + + /* 4. Configure the timer 1 for controlling shifters. */ + timerConfig.triggerSelect = FLEXIO_TIMER_TRIGGER_SEL_SHIFTnSTAT(base->shifterIndex[0]); + timerConfig.triggerPolarity = kFLEXIO_TimerTriggerPolarityActiveLow; + timerConfig.triggerSource = kFLEXIO_TimerTriggerSourceInternal; + timerConfig.pinConfig = kFLEXIO_PinConfigOutputDisabled; + timerConfig.pinSelect = base->SCLPinIndex; + timerConfig.pinPolarity = kFLEXIO_PinActiveLow; + timerConfig.timerMode = kFLEXIO_TimerModeSingle16Bit; + timerConfig.timerOutput = kFLEXIO_TimerOutputOneNotAffectedByReset; + timerConfig.timerDecrement = kFLEXIO_TimerDecSrcOnPinInputShiftPinInput; + timerConfig.timerReset = kFLEXIO_TimerResetNever; + timerConfig.timerDisable = kFLEXIO_TimerDisableOnPreTimerDisable; + timerConfig.timerEnable = kFLEXIO_TimerEnableOnPrevTimerEnable; + timerConfig.timerStop = kFLEXIO_TimerStopBitEnableOnTimerCompare; + timerConfig.timerStart = kFLEXIO_TimerStartBitEnabled; + + /* Set TIMCMP[15:0] = (number of bits x 2) - 1. */ + timerConfig.timerCompare = 8 * 2 - 1; + + FLEXIO_SetTimerConfig(base->flexioBase, base->timerIndex[1], &timerConfig); + + /* Configure FLEXIO I2C Master. */ + controlVal = base->flexioBase->CTRL; + controlVal &= + ~(FLEXIO_CTRL_DOZEN_MASK | FLEXIO_CTRL_DBGE_MASK | FLEXIO_CTRL_FASTACC_MASK | FLEXIO_CTRL_FLEXEN_MASK); + controlVal |= + (FLEXIO_CTRL_DOZEN(masterConfig->enableInDoze) | FLEXIO_CTRL_DBGE(masterConfig->enableInDebug) | + FLEXIO_CTRL_FASTACC(masterConfig->enableFastAccess) | FLEXIO_CTRL_FLEXEN(masterConfig->enableMaster)); + + base->flexioBase->CTRL = controlVal; +} + +void FLEXIO_I2C_MasterDeinit(FLEXIO_I2C_Type *base) +{ + FLEXIO_Deinit(base->flexioBase); +} + +void FLEXIO_I2C_MasterGetDefaultConfig(flexio_i2c_master_config_t *masterConfig) +{ + assert(masterConfig); + + masterConfig->enableMaster = true; + masterConfig->enableInDoze = false; + masterConfig->enableInDebug = true; + masterConfig->enableFastAccess = false; + + /* Default baud rate at 100kbps. */ + masterConfig->baudRate_Bps = 100000U; +} + +uint32_t FLEXIO_I2C_MasterGetStatusFlags(FLEXIO_I2C_Type *base) +{ + uint32_t status = 0; + + status = + ((FLEXIO_GetShifterStatusFlags(base->flexioBase) & (1U << base->shifterIndex[0])) >> base->shifterIndex[0]); + status |= + (((FLEXIO_GetShifterStatusFlags(base->flexioBase) & (1U << base->shifterIndex[1])) >> (base->shifterIndex[1])) + << 1U); + status |= + (((FLEXIO_GetShifterErrorFlags(base->flexioBase) & (1U << base->shifterIndex[1])) >> (base->shifterIndex[1])) + << 2U); + + return status; +} + +void FLEXIO_I2C_MasterClearStatusFlags(FLEXIO_I2C_Type *base, uint32_t mask) +{ + if (mask & kFLEXIO_I2C_TxEmptyFlag) + { + FLEXIO_ClearShifterStatusFlags(base->flexioBase, 1U << base->shifterIndex[0]); + } + + if (mask & kFLEXIO_I2C_RxFullFlag) + { + FLEXIO_ClearShifterStatusFlags(base->flexioBase, 1U << base->shifterIndex[1]); + } + + if (mask & kFLEXIO_I2C_ReceiveNakFlag) + { + FLEXIO_ClearShifterErrorFlags(base->flexioBase, 1U << base->shifterIndex[1]); + } +} + +void FLEXIO_I2C_MasterEnableInterrupts(FLEXIO_I2C_Type *base, uint32_t mask) +{ + if (mask & kFLEXIO_I2C_TxEmptyInterruptEnable) + { + FLEXIO_EnableShifterStatusInterrupts(base->flexioBase, 1U << base->shifterIndex[0]); + } + if (mask & kFLEXIO_I2C_RxFullInterruptEnable) + { + FLEXIO_EnableShifterStatusInterrupts(base->flexioBase, 1U << base->shifterIndex[1]); + } +} + +void FLEXIO_I2C_MasterDisableInterrupts(FLEXIO_I2C_Type *base, uint32_t mask) +{ + if (mask & kFLEXIO_I2C_TxEmptyInterruptEnable) + { + FLEXIO_DisableShifterStatusInterrupts(base->flexioBase, 1U << base->shifterIndex[0]); + } + if (mask & kFLEXIO_I2C_RxFullInterruptEnable) + { + FLEXIO_DisableShifterStatusInterrupts(base->flexioBase, 1U << base->shifterIndex[1]); + } +} + +void FLEXIO_I2C_MasterSetBaudRate(FLEXIO_I2C_Type *base, uint32_t baudRate_Bps, uint32_t srcClock_Hz) +{ + uint16_t timerDiv = 0; + uint16_t timerCmp = 0; + FLEXIO_Type *flexioBase = base->flexioBase; + + /* Set TIMCMP[7:0] = (baud rate divider / 2) - 1.*/ + timerDiv = srcClock_Hz / baudRate_Bps; + timerDiv = timerDiv / 2 - 1U; + + timerCmp = flexioBase->TIMCMP[base->timerIndex[0]]; + timerCmp &= 0xFF00; + timerCmp |= timerDiv; + + flexioBase->TIMCMP[base->timerIndex[0]] = timerCmp; +} + +status_t FLEXIO_I2C_MasterSetTransferCount(FLEXIO_I2C_Type *base, uint8_t count) +{ + if (count > 14U) + { + return kStatus_InvalidArgument; + } + + uint16_t timerCmp = 0; + uint32_t timerConfig = 0; + FLEXIO_Type *flexioBase = base->flexioBase; + + timerCmp = flexioBase->TIMCMP[base->timerIndex[0]]; + timerCmp &= 0x00FFU; + timerCmp |= (count * 18 + 1U) << 8U; + flexioBase->TIMCMP[base->timerIndex[0]] = timerCmp; + timerConfig = flexioBase->TIMCFG[base->timerIndex[0]]; + timerConfig &= ~FLEXIO_TIMCFG_TIMDIS_MASK; + timerConfig |= FLEXIO_TIMCFG_TIMDIS(kFLEXIO_TimerDisableOnTimerCompare); + flexioBase->TIMCFG[base->timerIndex[0]] = timerConfig; + + return kStatus_Success; +} + +void FLEXIO_I2C_MasterStart(FLEXIO_I2C_Type *base, uint8_t address, flexio_i2c_direction_t direction) +{ + uint32_t data; + + data = ((uint32_t)address) << 1U | ((direction == kFLEXIO_I2C_Read) ? 1U : 0U); + + FLEXIO_I2C_MasterWriteByte(base, data); +} + +void FLEXIO_I2C_MasterRepeatedStart(FLEXIO_I2C_Type *base) +{ + /* Prepare for RESTART condition, no stop.*/ + FLEXIO_I2C_MasterWriteByte(base, 0xFFFFFFFFU); +} + +void FLEXIO_I2C_MasterStop(FLEXIO_I2C_Type *base) +{ + /* Prepare normal stop. */ + FLEXIO_I2C_MasterSetTransferCount(base, 0x0U); + FLEXIO_I2C_MasterWriteByte(base, 0x0U); +} + +void FLEXIO_I2C_MasterAbortStop(FLEXIO_I2C_Type *base) +{ + uint32_t tmpConfig; + + /* Prepare abort stop. */ + tmpConfig = base->flexioBase->TIMCFG[base->timerIndex[0]]; + tmpConfig &= ~FLEXIO_TIMCFG_TIMDIS_MASK; + tmpConfig |= FLEXIO_TIMCFG_TIMDIS(kFLEXIO_TimerDisableOnPinBothEdge); + base->flexioBase->TIMCFG[base->timerIndex[0]] = tmpConfig; +} + +void FLEXIO_I2C_MasterEnableAck(FLEXIO_I2C_Type *base, bool enable) +{ + uint32_t tmpConfig = 0; + + tmpConfig = base->flexioBase->SHIFTCFG[base->shifterIndex[0]]; + tmpConfig &= ~FLEXIO_SHIFTCFG_SSTOP_MASK; + if (enable) + { + tmpConfig |= FLEXIO_SHIFTCFG_SSTOP(kFLEXIO_ShifterStopBitLow); + } + else + { + tmpConfig |= FLEXIO_SHIFTCFG_SSTOP(kFLEXIO_ShifterStopBitHigh); + } + base->flexioBase->SHIFTCFG[base->shifterIndex[0]] = tmpConfig; +} + +status_t FLEXIO_I2C_MasterWriteBlocking(FLEXIO_I2C_Type *base, const uint8_t *txBuff, uint8_t txSize) +{ + assert(txBuff); + assert(txSize); + + uint32_t status; + + while (txSize--) + { + FLEXIO_I2C_MasterWriteByte(base, *txBuff++); + + /* Wait until data transfer complete. */ + while (!((status = FLEXIO_I2C_MasterGetStatusFlags(base)) & kFLEXIO_I2C_RxFullFlag)) + { + } + + if (status & kFLEXIO_I2C_ReceiveNakFlag) + { + FLEXIO_ClearShifterErrorFlags(base->flexioBase, 1U << base->shifterIndex[1]); + return kStatus_FLEXIO_I2C_Nak; + } + } + return kStatus_Success; +} + +void FLEXIO_I2C_MasterReadBlocking(FLEXIO_I2C_Type *base, uint8_t *rxBuff, uint8_t rxSize) +{ + assert(rxBuff); + assert(rxSize); + + while (rxSize--) + { + /* Wait until data transfer complete. */ + while (!(FLEXIO_I2C_MasterGetStatusFlags(base) & kFLEXIO_I2C_RxFullFlag)) + { + } + + *rxBuff++ = FLEXIO_I2C_MasterReadByte(base); + } +} + +status_t FLEXIO_I2C_MasterTransferBlocking(FLEXIO_I2C_Type *base, flexio_i2c_master_transfer_t *xfer) +{ + assert(xfer); + + flexio_i2c_master_handle_t tmpHandle; + uint32_t statusFlags; + uint32_t result = kStatus_Success; + + FLEXIO_I2C_MasterTransferCreateHandle(base, &tmpHandle, NULL, NULL); + + /* Set up transfer machine. */ + FLEXIO_I2C_MasterTransferInitStateMachine(base, &tmpHandle, xfer); + + do + { + /* Wait either tx empty or rx full flag is asserted. */ + while (!((statusFlags = FLEXIO_I2C_MasterGetStatusFlags(base)) & + (kFLEXIO_I2C_TxEmptyFlag | kFLEXIO_I2C_RxFullFlag))) + { + } + + result = FLEXIO_I2C_MasterTransferRunStateMachine(base, &tmpHandle, statusFlags); + + } while ((tmpHandle.state != kFLEXIO_I2C_Idle) && (result == kStatus_Success)); + + return result; +} + +status_t FLEXIO_I2C_MasterTransferCreateHandle(FLEXIO_I2C_Type *base, + flexio_i2c_master_handle_t *handle, + flexio_i2c_master_transfer_callback_t callback, + void *userData) +{ + assert(handle); + + IRQn_Type flexio_irqs[] = FLEXIO_IRQS; + + /* Zero the handle. */ + memset(handle, 0, sizeof(*handle)); + + /* Register callback and userData. */ + handle->completionCallback = callback; + handle->userData = userData; + + /* Enable interrupt in NVIC. */ + EnableIRQ(flexio_irqs[0]); + + /* Save the context in global variables to support the double weak mechanism. */ + return FLEXIO_RegisterHandleIRQ(base, handle, FLEXIO_I2C_MasterTransferHandleIRQ); +} + +status_t FLEXIO_I2C_MasterTransferNonBlocking(FLEXIO_I2C_Type *base, + flexio_i2c_master_handle_t *handle, + flexio_i2c_master_transfer_t *xfer) +{ + assert(handle); + assert(xfer); + + if (handle->state != kFLEXIO_I2C_Idle) + { + return kStatus_FLEXIO_I2C_Busy; + } + else + { + /* Set up transfer machine. */ + FLEXIO_I2C_MasterTransferInitStateMachine(base, handle, xfer); + + /* Enable both tx empty and rxfull interrupt. */ + FLEXIO_I2C_MasterEnableInterrupts(base, kFLEXIO_I2C_TxEmptyInterruptEnable | kFLEXIO_I2C_RxFullInterruptEnable); + + return kStatus_Success; + } +} + +void FLEXIO_I2C_MasterTransferAbort(FLEXIO_I2C_Type *base, flexio_i2c_master_handle_t *handle) +{ + assert(handle); + + /* Disable interrupts. */ + FLEXIO_I2C_MasterDisableInterrupts(base, kFLEXIO_I2C_TxEmptyInterruptEnable | kFLEXIO_I2C_RxFullInterruptEnable); + + /* Reset to idle state. */ + handle->state = kFLEXIO_I2C_Idle; +} + +status_t FLEXIO_I2C_MasterTransferGetCount(FLEXIO_I2C_Type *base, flexio_i2c_master_handle_t *handle, size_t *count) +{ + if (!count) + { + return kStatus_InvalidArgument; + } + + *count = handle->transferSize - handle->transfer.dataSize; + + return kStatus_Success; +} + +void FLEXIO_I2C_MasterTransferHandleIRQ(void *i2cType, void *i2cHandle) +{ + FLEXIO_I2C_Type *base = (FLEXIO_I2C_Type *)i2cType; + flexio_i2c_master_handle_t *handle = (flexio_i2c_master_handle_t *)i2cHandle; + uint32_t statusFlags; + status_t result; + + statusFlags = FLEXIO_I2C_MasterGetStatusFlags(base); + + result = FLEXIO_I2C_MasterTransferRunStateMachine(base, handle, statusFlags); + + if (handle->state == kFLEXIO_I2C_Idle) + { + FLEXIO_I2C_MasterTransferComplete(base, handle, result); + } +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_i2c_master.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_i2c_master.h new file mode 100644 index 00000000000..c16954ed4ea --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_i2c_master.h @@ -0,0 +1,486 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FSL_FLEXIO_I2C_MASTER_H_ +#define _FSL_FLEXIO_I2C_MASTER_H_ + +#include "fsl_common.h" +#include "fsl_flexio.h" + +/*! + * @addtogroup flexio_i2c_master + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief FlexIO I2C master driver version 2.1.2. */ +#define FSL_FLEXIO_I2C_MASTER_DRIVER_VERSION (MAKE_VERSION(2, 1, 2)) +/*@}*/ + +/*! @brief FlexIO I2C transfer status*/ +enum _flexio_i2c_status +{ + kStatus_FLEXIO_I2C_Busy = MAKE_STATUS(kStatusGroup_FLEXIO_I2C, 0), /*!< I2C is busy doing transfer. */ + kStatus_FLEXIO_I2C_Idle = MAKE_STATUS(kStatusGroup_FLEXIO_I2C, 1), /*!< I2C is busy doing transfer. */ + kStatus_FLEXIO_I2C_Nak = MAKE_STATUS(kStatusGroup_FLEXIO_I2C, 2), /*!< NAK received during transfer. */ +}; + +/*! @brief Define FlexIO I2C master interrupt mask. */ +enum _flexio_i2c_master_interrupt +{ + kFLEXIO_I2C_TxEmptyInterruptEnable = 0x1U, /*!< Tx buffer empty interrupt enable. */ + kFLEXIO_I2C_RxFullInterruptEnable = 0x2U, /*!< Rx buffer full interrupt enable. */ +}; + +/*! @brief Define FlexIO I2C master status mask. */ +enum _flexio_i2c_master_status_flags +{ + kFLEXIO_I2C_TxEmptyFlag = 0x1U, /*!< Tx shifter empty flag. */ + kFLEXIO_I2C_RxFullFlag = 0x2U, /*!< Rx shifter full/Transfer complete flag. */ + kFLEXIO_I2C_ReceiveNakFlag = 0x4U, /*!< Receive NAK flag. */ +}; + +/*! @brief Direction of master transfer.*/ +typedef enum _flexio_i2c_direction +{ + kFLEXIO_I2C_Write = 0x0U, /*!< Master send to slave. */ + kFLEXIO_I2C_Read = 0x1U, /*!< Master receive from slave. */ +} flexio_i2c_direction_t; + +/*! @brief Define FlexIO I2C master access structure typedef. */ +typedef struct _flexio_i2c_type +{ + FLEXIO_Type *flexioBase; /*!< FlexIO base pointer. */ + uint8_t SDAPinIndex; /*!< Pin select for I2C SDA. */ + uint8_t SCLPinIndex; /*!< Pin select for I2C SCL. */ + uint8_t shifterIndex[2]; /*!< Shifter index used in FlexIO I2C. */ + uint8_t timerIndex[2]; /*!< Timer index used in FlexIO I2C. */ +} FLEXIO_I2C_Type; + +/*! @brief Define FlexIO I2C master user configuration structure. */ +typedef struct _flexio_i2c_master_config +{ + bool enableMaster; /*!< Enables the FLEXIO I2C peripheral at initialization time. */ + bool enableInDoze; /*!< Enable/disable FlexIO operation in doze mode. */ + bool enableInDebug; /*!< Enable/disable FlexIO operation in debug mode. */ + bool enableFastAccess; /*!< Enable/disable fast access to FlexIO registers, fast access requires + the FlexIO clock to be at least twice the frequency of the bus clock. */ + uint32_t baudRate_Bps; /*!< Baud rate in Bps. */ +} flexio_i2c_master_config_t; + +/*! @brief Define FlexIO I2C master transfer structure. */ +typedef struct _flexio_i2c_master_transfer +{ + uint32_t flags; /*!< Transfer flag which controls the transfer, reserved for FlexIO I2C. */ + uint8_t slaveAddress; /*!< 7-bit slave address. */ + flexio_i2c_direction_t direction; /*!< Transfer direction, read or write. */ + uint32_t subaddress; /*!< Sub address. Transferred MSB first. */ + uint8_t subaddressSize; /*!< Size of command buffer. */ + uint8_t volatile *data; /*!< Transfer buffer. */ + volatile size_t dataSize; /*!< Transfer size. */ +} flexio_i2c_master_transfer_t; + +/*! @brief FlexIO I2C master handle typedef. */ +typedef struct _flexio_i2c_master_handle flexio_i2c_master_handle_t; + +/*! @brief FlexIO I2C master transfer callback typedef. */ +typedef void (*flexio_i2c_master_transfer_callback_t)(FLEXIO_I2C_Type *base, + flexio_i2c_master_handle_t *handle, + status_t status, + void *userData); + +/*! @brief Define FlexIO I2C master handle structure. */ +struct _flexio_i2c_master_handle +{ + flexio_i2c_master_transfer_t transfer; /*!< FlexIO I2C master transfer copy. */ + size_t transferSize; /*!< Total bytes to be transferred. */ + uint8_t state; /*!< Transfer state maintained during transfer. */ + flexio_i2c_master_transfer_callback_t completionCallback; /*!< Callback function called at transfer event. */ + /*!< Callback function called at transfer event. */ + void *userData; /*!< Callback parameter passed to callback function. */ +}; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif /*_cplusplus*/ + +/*! + * @name Initialization and deinitialization + * @{ + */ + +/*! + * @brief Ungates the FlexIO clock, resets the FlexIO module, and configures the FlexIO I2C + * hardware configuration. + * + * Example + @code + FLEXIO_I2C_Type base = { + .flexioBase = FLEXIO, + .SDAPinIndex = 0, + .SCLPinIndex = 1, + .shifterIndex = {0,1}, + .timerIndex = {0,1} + }; + flexio_i2c_master_config_t config = { + .enableInDoze = false, + .enableInDebug = true, + .enableFastAccess = false, + .baudRate_Bps = 100000 + }; + FLEXIO_I2C_MasterInit(base, &config, srcClock_Hz); + @endcode + * + * @param base pointer to FLEXIO_I2C_Type structure. + * @param masterConfig pointer to flexio_i2c_master_config_t structure. + * @param srcClock_Hz FlexIO source clock in Hz. +*/ +void FLEXIO_I2C_MasterInit(FLEXIO_I2C_Type *base, flexio_i2c_master_config_t *masterConfig, uint32_t srcClock_Hz); + +/*! + * @brief De-initializes the FlexIO I2C master peripheral. Calling this API gates the FlexIO clock, + * so the FlexIO I2C master module can't work unless call FLEXIO_I2C_MasterInit. + * + * @param base pointer to FLEXIO_I2C_Type structure. + */ +void FLEXIO_I2C_MasterDeinit(FLEXIO_I2C_Type *base); + +/*! + * @brief Gets the default configuration to configure the FlexIO module. The configuration + * can be used directly for calling FLEXIO_I2C_MasterInit(). + * + * Example: + @code + flexio_i2c_master_config_t config; + FLEXIO_I2C_MasterGetDefaultConfig(&config); + @endcode + * @param masterConfig pointer to flexio_i2c_master_config_t structure. +*/ +void FLEXIO_I2C_MasterGetDefaultConfig(flexio_i2c_master_config_t *masterConfig); + +/*! + * @brief Enables/disables the FlexIO module operation. + * + * @param base pointer to FLEXIO_I2C_Type structure. + * @param enable pass true to enable module, false to disable module. +*/ +static inline void FLEXIO_I2C_MasterEnable(FLEXIO_I2C_Type *base, bool enable) +{ + if (enable) + { + base->flexioBase->CTRL |= FLEXIO_CTRL_FLEXEN_MASK; + } + else + { + base->flexioBase->CTRL &= ~FLEXIO_CTRL_FLEXEN_MASK; + } +} + +/* @} */ + +/*! + * @name Status + * @{ + */ + +/*! + * @brief Gets the FlexIO I2C master status flags. + * + * @param base pointer to FLEXIO_I2C_Type structure + * @return status flag, use status flag to AND #_flexio_i2c_master_status_flags could get the related status. +*/ + +uint32_t FLEXIO_I2C_MasterGetStatusFlags(FLEXIO_I2C_Type *base); + +/*! + * @brief Clears the FlexIO I2C master status flags. + * + * @param base pointer to FLEXIO_I2C_Type structure. + * @param mask status flag. + * The parameter could be any combination of the following values: + * @arg kFLEXIO_I2C_RxFullFlag + * @arg kFLEXIO_I2C_ReceiveNakFlag +*/ + +void FLEXIO_I2C_MasterClearStatusFlags(FLEXIO_I2C_Type *base, uint32_t mask); + +/*@}*/ + +/*! + * @name Interrupts + * @{ + */ + +/*! + * @brief Enables the FlexIO i2c master interrupt requests. + * + * @param base pointer to FLEXIO_I2C_Type structure. + * @param mask interrupt source. + * Currently only one interrupt request source: + * @arg kFLEXIO_I2C_TransferCompleteInterruptEnable + */ +void FLEXIO_I2C_MasterEnableInterrupts(FLEXIO_I2C_Type *base, uint32_t mask); + +/*! + * @brief Disables the FlexIO I2C master interrupt requests. + * + * @param base pointer to FLEXIO_I2C_Type structure. + * @param mask interrupt source. + */ +void FLEXIO_I2C_MasterDisableInterrupts(FLEXIO_I2C_Type *base, uint32_t mask); + +/*@}*/ + +/*! + * @name Bus Operations + * @{ + */ + +/*! + * @brief Sets the FlexIO I2C master transfer baudrate. + * + * @param base pointer to FLEXIO_I2C_Type structure + * @param baudRate_Bps the baud rate value in HZ + * @param srcClock_Hz source clock in HZ + */ +void FLEXIO_I2C_MasterSetBaudRate(FLEXIO_I2C_Type *base, uint32_t baudRate_Bps, uint32_t srcClock_Hz); + +/*! + * @brief Sends START + 7-bit address to the bus. + * + * @note This is API should be called when transfer configuration is ready to send a START signal + * and 7-bit address to the bus. This is a non-blocking API, which returns directly after the address + * is put into the data register but not address transfer finished on the bus. Ensure that + * the kFLEXIO_I2C_RxFullFlag status is asserted before calling this API. + * @param base pointer to FLEXIO_I2C_Type structure. + * @param address 7-bit address. + * @param direction transfer direction. + * This parameter is one of the values in flexio_i2c_direction_t: + * @arg kFLEXIO_I2C_Write: Transmit + * @arg kFLEXIO_I2C_Read: Receive + */ + +void FLEXIO_I2C_MasterStart(FLEXIO_I2C_Type *base, uint8_t address, flexio_i2c_direction_t direction); + +/*! + * @brief Sends the stop signal on the bus. + * + * @param base pointer to FLEXIO_I2C_Type structure. + */ +void FLEXIO_I2C_MasterStop(FLEXIO_I2C_Type *base); + +/*! + * @brief Sends the repeated start signal on the bus. + * + * @param base pointer to FLEXIO_I2C_Type structure. + */ +void FLEXIO_I2C_MasterRepeatedStart(FLEXIO_I2C_Type *base); + +/*! + * @brief Sends the stop signal when transfer is still on-going. + * + * @param base pointer to FLEXIO_I2C_Type structure. + */ +void FLEXIO_I2C_MasterAbortStop(FLEXIO_I2C_Type *base); + +/*! + * @brief Configures the sent ACK/NAK for the following byte. + * + * @param base pointer to FLEXIO_I2C_Type structure. + * @param enable true to configure send ACK, false configure to send NAK. + */ +void FLEXIO_I2C_MasterEnableAck(FLEXIO_I2C_Type *base, bool enable); + +/*! + * @brief Sets the number of bytes to be transferred from a start signal to a stop signal. + * + * @note Call this API before a transfer begins because the timer generates a number of clocks according + * to the number of bytes that need to be transferred. + * + * @param base pointer to FLEXIO_I2C_Type structure. + * @param count number of bytes need to be transferred from a start signal to a re-start/stop signal + * @retval kStatus_Success Successfully configured the count. + * @retval kStatus_InvalidArgument Input argument is invalid. +*/ +status_t FLEXIO_I2C_MasterSetTransferCount(FLEXIO_I2C_Type *base, uint8_t count); + +/*! + * @brief Writes one byte of data to the I2C bus. + * + * @note This is a non-blocking API, which returns directly after the data is put into the + * data register but not data transfer finished on the bus. Ensure that + * the TxEmptyFlag is asserted before calling this API. + * + * @param base pointer to FLEXIO_I2C_Type structure. + * @param data a byte of data. + */ +static inline void FLEXIO_I2C_MasterWriteByte(FLEXIO_I2C_Type *base, uint32_t data) +{ + base->flexioBase->SHIFTBUFBBS[base->shifterIndex[0]] = data; +} + +/*! + * @brief Reads one byte of data from the I2C bus. + * + * @note This is a non-blocking API, which returns directly after the data is read from the + * data register. Ensure that the data is ready in the register. + * + * @param base pointer to FLEXIO_I2C_Type structure. + * @return data byte read. + */ +static inline uint8_t FLEXIO_I2C_MasterReadByte(FLEXIO_I2C_Type *base) +{ + return base->flexioBase->SHIFTBUFBIS[base->shifterIndex[1]]; +} + +/*! + * @brief Sends a buffer of data in bytes. + * + * @note This function blocks via polling until all bytes have been sent. + * + * @param base pointer to FLEXIO_I2C_Type structure. + * @param txBuff The data bytes to send. + * @param txSize The number of data bytes to send. + * @retval kStatus_Success Successfully write data. + * @retval kStatus_FLEXIO_I2C_Nak Receive NAK during writing data. + */ +status_t FLEXIO_I2C_MasterWriteBlocking(FLEXIO_I2C_Type *base, const uint8_t *txBuff, uint8_t txSize); + +/*! + * @brief Receives a buffer of bytes. + * + * @note This function blocks via polling until all bytes have been received. + * + * @param base pointer to FLEXIO_I2C_Type structure. + * @param rxBuff The buffer to store the received bytes. + * @param rxSize The number of data bytes to be received. + */ +void FLEXIO_I2C_MasterReadBlocking(FLEXIO_I2C_Type *base, uint8_t *rxBuff, uint8_t rxSize); + +/*! + * @brief Performs a master polling transfer on the I2C bus. + * + * @note The API does not return until the transfer succeeds or fails due + * to receiving NAK. + * + * @param base pointer to FLEXIO_I2C_Type structure. + * @param xfer pointer to flexio_i2c_master_transfer_t structure. + * @return status of status_t. + */ +status_t FLEXIO_I2C_MasterTransferBlocking(FLEXIO_I2C_Type *base, flexio_i2c_master_transfer_t *xfer); +/*@}*/ + +/*Transactional APIs*/ + +/*! + * @name Transactional + * @{ + */ + +/*! + * @brief Initializes the I2C handle which is used in transactional functions. + * + * @param base pointer to FLEXIO_I2C_Type structure. + * @param handle pointer to flexio_i2c_master_handle_t structure to store the transfer state. + * @param callback pointer to user callback function. + * @param userData user param passed to the callback function. + * @retval kStatus_Success Successfully create the handle. + * @retval kStatus_OutOfRange The FlexIO type/handle/isr table out of range. + */ +status_t FLEXIO_I2C_MasterTransferCreateHandle(FLEXIO_I2C_Type *base, + flexio_i2c_master_handle_t *handle, + flexio_i2c_master_transfer_callback_t callback, + void *userData); + +/*! + * @brief Performs a master interrupt non-blocking transfer on the I2C bus. + * + * @note The API returns immediately after the transfer initiates. + * Call FLEXIO_I2C_MasterGetTransferCount to poll the transfer status to check whether + * the transfer is finished. If the return status is not kStatus_FLEXIO_I2C_Busy, the transfer + * is finished. + * + * @param base pointer to FLEXIO_I2C_Type structure + * @param handle pointer to flexio_i2c_master_handle_t structure which stores the transfer state + * @param xfer pointer to flexio_i2c_master_transfer_t structure + * @retval kStatus_Success Successfully start a transfer. + * @retval kStatus_FLEXIO_I2C_Busy FlexIO I2C is not idle, is running another transfer. + */ +status_t FLEXIO_I2C_MasterTransferNonBlocking(FLEXIO_I2C_Type *base, + flexio_i2c_master_handle_t *handle, + flexio_i2c_master_transfer_t *xfer); + +/*! + * @brief Gets the master transfer status during a interrupt non-blocking transfer. + * + * @param base pointer to FLEXIO_I2C_Type structure. + * @param handle pointer to flexio_i2c_master_handle_t structure which stores the transfer state. + * @param count Number of bytes transferred so far by the non-blocking transaction. + * @retval kStatus_InvalidArgument count is Invalid. + * @retval kStatus_Success Successfully return the count. + */ +status_t FLEXIO_I2C_MasterTransferGetCount(FLEXIO_I2C_Type *base, flexio_i2c_master_handle_t *handle, size_t *count); + +/*! + * @brief Aborts an interrupt non-blocking transfer early. + * + * @note This API can be called at any time when an interrupt non-blocking transfer initiates + * to abort the transfer early. + * + * @param base pointer to FLEXIO_I2C_Type structure + * @param handle pointer to flexio_i2c_master_handle_t structure which stores the transfer state + */ +void FLEXIO_I2C_MasterTransferAbort(FLEXIO_I2C_Type *base, flexio_i2c_master_handle_t *handle); + +/*! + * @brief Master interrupt handler. + * + * @param i2cType pointer to FLEXIO_I2C_Type structure + * @param i2cHandle pointer to flexio_i2c_master_transfer_t structure + */ +void FLEXIO_I2C_MasterTransferHandleIRQ(void *i2cType, void *i2cHandle); + +/*@}*/ + +#if defined(__cplusplus) +} +#endif /*_cplusplus*/ +/*@}*/ + +#endif /*_FSL_FLEXIO_I2C_MASTER_H_*/ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_i2s.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_i2s.c new file mode 100644 index 00000000000..0a8697309c7 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_i2s.c @@ -0,0 +1,635 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_flexio_i2s.h" + +/******************************************************************************* +* Definitations +******************************************************************************/ +enum _sai_transfer_state +{ + kFLEXIO_I2S_Busy = 0x0U, /*!< FLEXIO_I2S is busy */ + kFLEXIO_I2S_Idle, /*!< Transfer is done. */ +}; + +/******************************************************************************* + * Prototypes + ******************************************************************************/ +/*! + * @brief Receive a piece of data in non-blocking way. + * + * @param base FLEXIO I2S base pointer + * @param bitWidth How many bits in a audio word, usually 8/16/24/32 bits. + * @param buffer Pointer to the data to be read. + * @param size Bytes to be read. + */ +static void FLEXIO_I2S_ReadNonBlocking(FLEXIO_I2S_Type *base, uint8_t bitWidth, uint8_t *rxData, size_t size); + +/*! + * @brief sends a piece of data in non-blocking way. + * + * @param base FLEXIO I2S base pointer + * @param bitWidth How many bits in a audio word, usually 8/16/24/32 bits. + * @param buffer Pointer to the data to be written. + * @param size Bytes to be written. + */ +static void FLEXIO_I2S_WriteNonBlocking(FLEXIO_I2S_Type *base, uint8_t bitWidth, uint8_t *txData, size_t size); +/******************************************************************************* + * Variables + ******************************************************************************/ + +/******************************************************************************* + * Code + ******************************************************************************/ +static void FLEXIO_I2S_WriteNonBlocking(FLEXIO_I2S_Type *base, uint8_t bitWidth, uint8_t *txData, size_t size) +{ + uint32_t i = 0; + uint8_t j = 0; + uint8_t bytesPerWord = bitWidth / 8U; + uint32_t data = 0; + uint32_t temp = 0; + + for (i = 0; i < size / bytesPerWord; i++) + { + for (j = 0; j < bytesPerWord; j++) + { + temp = (uint32_t)(*txData); + data |= (temp << (8U * j)); + txData++; + } + base->flexioBase->SHIFTBUFBIS[base->txShifterIndex] = (data << (32U - bitWidth)); + data = 0; + } +} + +static void FLEXIO_I2S_ReadNonBlocking(FLEXIO_I2S_Type *base, uint8_t bitWidth, uint8_t *rxData, size_t size) +{ + uint32_t i = 0; + uint8_t j = 0; + uint8_t bytesPerWord = bitWidth / 8U; + uint32_t data = 0; + + for (i = 0; i < size / bytesPerWord; i++) + { + data = (base->flexioBase->SHIFTBUFBIS[base->rxShifterIndex] >> (32U - bitWidth)); + for (j = 0; j < bytesPerWord; j++) + { + *rxData = (data >> (8U * j)) & 0xFF; + rxData++; + } + } +} + +void FLEXIO_I2S_Init(FLEXIO_I2S_Type *base, const flexio_i2s_config_t *config) +{ + assert(base && config); + + flexio_shifter_config_t shifterConfig = {0}; + flexio_timer_config_t timerConfig = {0}; + + /* Ungate flexio clock. */ + CLOCK_EnableClock(kCLOCK_Flexio0); + + FLEXIO_Reset(base->flexioBase); + + /* Set shifter for I2S Tx data */ + shifterConfig.timerSelect = base->bclkTimerIndex; + shifterConfig.pinSelect = base->txPinIndex; + shifterConfig.timerPolarity = kFLEXIO_ShifterTimerPolarityOnPositive; + shifterConfig.pinConfig = kFLEXIO_PinConfigOutput; + shifterConfig.pinPolarity = kFLEXIO_PinActiveHigh; + shifterConfig.shifterMode = kFLEXIO_ShifterModeTransmit; + shifterConfig.inputSource = kFLEXIO_ShifterInputFromPin; + shifterConfig.shifterStop = kFLEXIO_ShifterStopBitDisable; + if (config->masterSlave == kFLEXIO_I2S_Master) + { + shifterConfig.shifterStart = kFLEXIO_ShifterStartBitDisabledLoadDataOnShift; + } + else + { + shifterConfig.shifterStart = kFLEXIO_ShifterStartBitDisabledLoadDataOnEnable; + } + + FLEXIO_SetShifterConfig(base->flexioBase, base->txShifterIndex, &shifterConfig); + + /* Set shifter for I2S Rx Data */ + shifterConfig.timerSelect = base->bclkTimerIndex; + shifterConfig.pinSelect = base->rxPinIndex; + shifterConfig.timerPolarity = kFLEXIO_ShifterTimerPolarityOnNegitive; + shifterConfig.pinConfig = kFLEXIO_PinConfigOutputDisabled; + shifterConfig.pinPolarity = kFLEXIO_PinActiveHigh; + shifterConfig.shifterMode = kFLEXIO_ShifterModeReceive; + shifterConfig.inputSource = kFLEXIO_ShifterInputFromPin; + shifterConfig.shifterStop = kFLEXIO_ShifterStopBitDisable; + shifterConfig.shifterStart = kFLEXIO_ShifterStartBitDisabledLoadDataOnEnable; + + FLEXIO_SetShifterConfig(base->flexioBase, base->rxShifterIndex, &shifterConfig); + + /* Set Timer to I2S frame sync */ + if (config->masterSlave == kFLEXIO_I2S_Master) + { + timerConfig.triggerSelect = FLEXIO_TIMER_TRIGGER_SEL_PININPUT(base->txPinIndex); + timerConfig.triggerPolarity = kFLEXIO_TimerTriggerPolarityActiveHigh; + timerConfig.triggerSource = kFLEXIO_TimerTriggerSourceExternal; + timerConfig.pinConfig = kFLEXIO_PinConfigOutput; + timerConfig.pinSelect = base->fsPinIndex; + timerConfig.pinPolarity = kFLEXIO_PinActiveLow; + timerConfig.timerMode = kFLEXIO_TimerModeSingle16Bit; + timerConfig.timerOutput = kFLEXIO_TimerOutputOneNotAffectedByReset; + timerConfig.timerDecrement = kFLEXIO_TimerDecSrcOnFlexIOClockShiftTimerOutput; + timerConfig.timerReset = kFLEXIO_TimerResetNever; + timerConfig.timerDisable = kFLEXIO_TimerDisableNever; + timerConfig.timerEnable = kFLEXIO_TimerEnableOnPrevTimerEnable; + timerConfig.timerStart = kFLEXIO_TimerStartBitDisabled; + timerConfig.timerStop = kFLEXIO_TimerStopBitDisabled; + } + else + { + timerConfig.triggerSelect = FLEXIO_TIMER_TRIGGER_SEL_PININPUT(base->bclkPinIndex); + timerConfig.triggerPolarity = kFLEXIO_TimerTriggerPolarityActiveHigh; + timerConfig.triggerSource = kFLEXIO_TimerTriggerSourceInternal; + timerConfig.pinConfig = kFLEXIO_PinConfigOutputDisabled; + timerConfig.pinSelect = base->fsPinIndex; + timerConfig.pinPolarity = kFLEXIO_PinActiveLow; + timerConfig.timerMode = kFLEXIO_TimerModeSingle16Bit; + timerConfig.timerOutput = kFLEXIO_TimerOutputOneNotAffectedByReset; + timerConfig.timerDecrement = kFLEXIO_TimerDecSrcOnTriggerInputShiftTriggerInput; + timerConfig.timerReset = kFLEXIO_TimerResetNever; + timerConfig.timerDisable = kFLEXIO_TimerDisableOnTimerCompare; + timerConfig.timerEnable = kFLEXIO_TimerEnableOnPinRisingEdge; + timerConfig.timerStart = kFLEXIO_TimerStartBitDisabled; + timerConfig.timerStop = kFLEXIO_TimerStopBitDisabled; + } + FLEXIO_SetTimerConfig(base->flexioBase, base->fsTimerIndex, &timerConfig); + + /* Set Timer to I2S bit clock */ + if (config->masterSlave == kFLEXIO_I2S_Master) + { + timerConfig.triggerSelect = FLEXIO_TIMER_TRIGGER_SEL_SHIFTnSTAT(base->txShifterIndex); + timerConfig.triggerPolarity = kFLEXIO_TimerTriggerPolarityActiveLow; + timerConfig.triggerSource = kFLEXIO_TimerTriggerSourceInternal; + timerConfig.pinSelect = base->bclkPinIndex; + timerConfig.pinConfig = kFLEXIO_PinConfigOutput; + timerConfig.pinPolarity = kFLEXIO_PinActiveHigh; + timerConfig.timerMode = kFLEXIO_TimerModeDual8BitBaudBit; + timerConfig.timerOutput = kFLEXIO_TimerOutputOneNotAffectedByReset; + timerConfig.timerDecrement = kFLEXIO_TimerDecSrcOnFlexIOClockShiftTimerOutput; + timerConfig.timerReset = kFLEXIO_TimerResetNever; + timerConfig.timerDisable = kFLEXIO_TimerDisableNever; + timerConfig.timerEnable = kFLEXIO_TimerEnableOnTriggerHigh; + timerConfig.timerStart = kFLEXIO_TimerStartBitEnabled; + timerConfig.timerStop = kFLEXIO_TimerStopBitDisabled; + } + else + { + timerConfig.triggerSelect = FLEXIO_TIMER_TRIGGER_SEL_TIMn(base->fsTimerIndex); + timerConfig.triggerPolarity = kFLEXIO_TimerTriggerPolarityActiveHigh; + timerConfig.triggerSource = kFLEXIO_TimerTriggerSourceInternal; + timerConfig.pinSelect = base->bclkPinIndex; + timerConfig.pinConfig = kFLEXIO_PinConfigOutputDisabled; + timerConfig.pinPolarity = kFLEXIO_PinActiveHigh; + timerConfig.timerMode = kFLEXIO_TimerModeSingle16Bit; + timerConfig.timerOutput = kFLEXIO_TimerOutputOneNotAffectedByReset; + timerConfig.timerDecrement = kFLEXIO_TimerDecSrcOnPinInputShiftPinInput; + timerConfig.timerReset = kFLEXIO_TimerResetNever; + timerConfig.timerDisable = kFLEXIO_TimerDisableOnTimerCompareTriggerLow; + timerConfig.timerEnable = kFLEXIO_TimerEnableOnPinRisingEdgeTriggerHigh; + timerConfig.timerStart = kFLEXIO_TimerStartBitDisabled; + timerConfig.timerStop = kFLEXIO_TimerStopBitDisabled; + } + FLEXIO_SetTimerConfig(base->flexioBase, base->bclkTimerIndex, &timerConfig); + + /* If enable flexio I2S */ + if (config->enableI2S) + { + base->flexioBase->CTRL |= FLEXIO_CTRL_FLEXEN_MASK; + } + else + { + base->flexioBase->CTRL &= ~FLEXIO_CTRL_FLEXEN_MASK; + } +} + +void FLEXIO_I2S_GetDefaultConfig(flexio_i2s_config_t *config) +{ + config->masterSlave = kFLEXIO_I2S_Master; + config->enableI2S = true; +} + +void FLEXIO_I2S_Deinit(FLEXIO_I2S_Type *base) +{ + /* Disable FLEXIO I2S module. */ + FLEXIO_I2S_Enable(base, false); + + /* Gate flexio clock. */ + CLOCK_DisableClock(kCLOCK_Flexio0); +} + +void FLEXIO_I2S_EnableInterrupts(FLEXIO_I2S_Type *base, uint32_t mask) +{ + if (mask & kFLEXIO_I2S_TxDataRegEmptyInterruptEnable) + { + FLEXIO_EnableShifterStatusInterrupts(base->flexioBase, 1U << base->txShifterIndex); + } + if (mask & kFLEXIO_I2S_RxDataRegFullInterruptEnable) + { + FLEXIO_EnableShifterStatusInterrupts(base->flexioBase, 1U << base->rxShifterIndex); + } +} + +uint32_t FLEXIO_I2S_GetStatusFlags(FLEXIO_I2S_Type *base) +{ + uint32_t status = 0; + status = ((FLEXIO_GetShifterStatusFlags(base->flexioBase) & (1U << base->txShifterIndex)) >> base->txShifterIndex); + status |= + (((FLEXIO_GetShifterStatusFlags(base->flexioBase) & (1U << base->rxShifterIndex)) >> (base->rxShifterIndex)) + << 1U); + return status; +} + +void FLEXIO_I2S_DisableInterrupts(FLEXIO_I2S_Type *base, uint32_t mask) +{ + if (mask & kFLEXIO_I2S_TxDataRegEmptyInterruptEnable) + { + FLEXIO_DisableShifterStatusInterrupts(base->flexioBase, 1U << base->txShifterIndex); + } + if (mask & kFLEXIO_I2S_RxDataRegFullInterruptEnable) + { + FLEXIO_DisableShifterStatusInterrupts(base->flexioBase, 1U << base->rxShifterIndex); + } +} + +void FLEXIO_I2S_MasterSetFormat(FLEXIO_I2S_Type *base, flexio_i2s_format_t *format, uint32_t srcClock_Hz) +{ + uint32_t timDiv = srcClock_Hz / (format->sampleRate_Hz * 32U * 2U); + uint32_t bclkDiv = 0; + + /* Set Frame sync timer cmp */ + base->flexioBase->TIMCMP[base->fsTimerIndex] = FLEXIO_TIMCMP_CMP(32U * timDiv - 1U); + + /* Set bit clock timer cmp */ + bclkDiv = ((timDiv / 2U - 1U) | (63U << 8U)); + base->flexioBase->TIMCMP[base->bclkTimerIndex] = FLEXIO_TIMCMP_CMP(bclkDiv); +} + +void FLEXIO_I2S_SlaveSetFormat(FLEXIO_I2S_Type *base, flexio_i2s_format_t *format) +{ + /* Set Frame sync timer cmp */ + base->flexioBase->TIMCMP[base->fsTimerIndex] = FLEXIO_TIMCMP_CMP(32U * 4U - 3U); + + /* Set bit clock timer cmp */ + base->flexioBase->TIMCMP[base->bclkTimerIndex] = FLEXIO_TIMCMP_CMP(32U * 2U - 1U); +} + +void FLEXIO_I2S_WriteBlocking(FLEXIO_I2S_Type *base, uint8_t bitWidth, uint8_t *txData, size_t size) +{ + uint32_t i = 0; + uint8_t bytesPerWord = bitWidth / 8U; + + for (i = 0; i < size / bytesPerWord; i++) + { + /* Wait until it can write data */ + while ((FLEXIO_I2S_GetStatusFlags(base) & kFLEXIO_I2S_TxDataRegEmptyFlag) == 0) + { + } + + FLEXIO_I2S_WriteNonBlocking(base, bitWidth, txData, bytesPerWord); + txData += bytesPerWord; + } + + /* Wait until the last data is sent */ + while ((FLEXIO_I2S_GetStatusFlags(base) & kFLEXIO_I2S_TxDataRegEmptyFlag) == 0) + { + } +} + +void FLEXIO_I2S_ReadBlocking(FLEXIO_I2S_Type *base, uint8_t bitWidth, uint8_t *rxData, size_t size) +{ + uint32_t i = 0; + uint8_t bytesPerWord = bitWidth / 8U; + + for (i = 0; i < size / bytesPerWord; i++) + { + /* Wait until data is received */ + while (!(FLEXIO_GetShifterStatusFlags(base->flexioBase) & (1U << base->rxShifterIndex))) + { + } + + FLEXIO_I2S_ReadNonBlocking(base, bitWidth, rxData, bytesPerWord); + rxData += bytesPerWord; + } +} + +void FLEXIO_I2S_TransferTxCreateHandle(FLEXIO_I2S_Type *base, + flexio_i2s_handle_t *handle, + flexio_i2s_callback_t callback, + void *userData) +{ + assert(handle); + + IRQn_Type flexio_irqs[] = FLEXIO_IRQS; + + /* Zero the handle. */ + memset(handle, 0, sizeof(*handle)); + + /* Store callback and user data. */ + handle->callback = callback; + handle->userData = userData; + + /* Save the context in global variables to support the double weak mechanism. */ + FLEXIO_RegisterHandleIRQ(base, handle, FLEXIO_I2S_TransferTxHandleIRQ); + + /* Set the TX/RX state. */ + handle->state = kFLEXIO_I2S_Idle; + + /* Enable interrupt in NVIC. */ + EnableIRQ(flexio_irqs[0]); +} + +void FLEXIO_I2S_TransferRxCreateHandle(FLEXIO_I2S_Type *base, + flexio_i2s_handle_t *handle, + flexio_i2s_callback_t callback, + void *userData) +{ + assert(handle); + + IRQn_Type flexio_irqs[] = FLEXIO_IRQS; + + /* Zero the handle. */ + memset(handle, 0, sizeof(*handle)); + + /* Store callback and user data. */ + handle->callback = callback; + handle->userData = userData; + + /* Save the context in global variables to support the double weak mechanism. */ + FLEXIO_RegisterHandleIRQ(base, handle, FLEXIO_I2S_TransferRxHandleIRQ); + + /* Set the TX/RX state. */ + handle->state = kFLEXIO_I2S_Idle; + + /* Enable interrupt in NVIC. */ + EnableIRQ(flexio_irqs[0]); +} + +void FLEXIO_I2S_TransferSetFormat(FLEXIO_I2S_Type *base, + flexio_i2s_handle_t *handle, + flexio_i2s_format_t *format, + uint32_t srcClock_Hz) +{ + assert(handle && format); + + /* Set the bitWidth to handle */ + handle->bitWidth = format->bitWidth; + + /* Set sample rate */ + if (srcClock_Hz != 0) + { + /* It is master */ + FLEXIO_I2S_MasterSetFormat(base, format, srcClock_Hz); + } + else + { + FLEXIO_I2S_SlaveSetFormat(base, format); + } +} + +status_t FLEXIO_I2S_TransferSendNonBlocking(FLEXIO_I2S_Type *base, + flexio_i2s_handle_t *handle, + flexio_i2s_transfer_t *xfer) +{ + assert(handle); + + /* Check if the queue is full */ + if (handle->queue[handle->queueUser].data) + { + return kStatus_FLEXIO_I2S_QueueFull; + } + if ((xfer->dataSize == 0) || (xfer->data == NULL)) + { + return kStatus_InvalidArgument; + } + + /* Add into queue */ + handle->queue[handle->queueUser].data = xfer->data; + handle->queue[handle->queueUser].dataSize = xfer->dataSize; + handle->transferSize[handle->queueUser] = xfer->dataSize; + handle->queueUser = (handle->queueUser + 1) % FLEXIO_I2S_XFER_QUEUE_SIZE; + + /* Set the state to busy */ + handle->state = kFLEXIO_I2S_Busy; + + FLEXIO_I2S_EnableInterrupts(base, kFLEXIO_I2S_TxDataRegEmptyInterruptEnable); + + /* Enable Tx transfer */ + FLEXIO_I2S_Enable(base, true); + + return kStatus_Success; +} + +status_t FLEXIO_I2S_TransferReceiveNonBlocking(FLEXIO_I2S_Type *base, + flexio_i2s_handle_t *handle, + flexio_i2s_transfer_t *xfer) +{ + assert(handle); + + /* Check if the queue is full */ + if (handle->queue[handle->queueUser].data) + { + return kStatus_FLEXIO_I2S_QueueFull; + } + + if ((xfer->dataSize == 0) || (xfer->data == NULL)) + { + return kStatus_InvalidArgument; + } + + /* Add into queue */ + handle->queue[handle->queueUser].data = xfer->data; + handle->queue[handle->queueUser].dataSize = xfer->dataSize; + handle->transferSize[handle->queueUser] = xfer->dataSize; + handle->queueUser = (handle->queueUser + 1) % FLEXIO_I2S_XFER_QUEUE_SIZE; + + /* Set state to busy */ + handle->state = kFLEXIO_I2S_Busy; + + /* Enable interrupt */ + FLEXIO_I2S_EnableInterrupts(base, kFLEXIO_I2S_RxDataRegFullInterruptEnable); + + /* Enable Rx transfer */ + FLEXIO_I2S_Enable(base, true); + + return kStatus_Success; +} + +void FLEXIO_I2S_TransferAbortSend(FLEXIO_I2S_Type *base, flexio_i2s_handle_t *handle) +{ + assert(handle); + + /* Stop Tx transfer and disable interrupt */ + FLEXIO_I2S_DisableInterrupts(base, kFLEXIO_I2S_TxDataRegEmptyInterruptEnable); + handle->state = kFLEXIO_I2S_Idle; + + /* Clear the queue */ + memset(handle->queue, 0, sizeof(flexio_i2s_transfer_t) * FLEXIO_I2S_XFER_QUEUE_SIZE); + handle->queueDriver = 0; + handle->queueUser = 0; +} + +void FLEXIO_I2S_TransferAbortReceive(FLEXIO_I2S_Type *base, flexio_i2s_handle_t *handle) +{ + assert(handle); + + /* Stop rx transfer and disable interrupt */ + FLEXIO_I2S_DisableInterrupts(base, kFLEXIO_I2S_RxDataRegFullInterruptEnable); + handle->state = kFLEXIO_I2S_Idle; + + /* Clear the queue */ + memset(handle->queue, 0, sizeof(flexio_i2s_transfer_t) * FLEXIO_I2S_XFER_QUEUE_SIZE); + handle->queueDriver = 0; + handle->queueUser = 0; +} + +status_t FLEXIO_I2S_TransferGetSendCount(FLEXIO_I2S_Type *base, flexio_i2s_handle_t *handle, size_t *count) +{ + assert(handle); + + status_t status = kStatus_Success; + + if (handle->state != kFLEXIO_I2S_Busy) + { + status = kStatus_NoTransferInProgress; + } + else + { + *count = (handle->transferSize[handle->queueDriver] - handle->queue[handle->queueDriver].dataSize); + } + + return status; +} + +status_t FLEXIO_I2S_TransferGetReceiveCount(FLEXIO_I2S_Type *base, flexio_i2s_handle_t *handle, size_t *count) +{ + assert(handle); + + status_t status = kStatus_Success; + + if (handle->state != kFLEXIO_I2S_Busy) + { + status = kStatus_NoTransferInProgress; + } + else + { + *count = (handle->transferSize[handle->queueDriver] - handle->queue[handle->queueDriver].dataSize); + } + + return status; +} + +void FLEXIO_I2S_TransferTxHandleIRQ(void *i2sBase, void *i2sHandle) +{ + assert(i2sHandle); + + flexio_i2s_handle_t *handle = (flexio_i2s_handle_t *)i2sHandle; + FLEXIO_I2S_Type *base = (FLEXIO_I2S_Type *)i2sBase; + uint8_t *buffer = handle->queue[handle->queueDriver].data; + uint8_t dataSize = handle->bitWidth / 8U; + + /* Handle error */ + if (FLEXIO_GetShifterErrorFlags(base->flexioBase) & (1U << base->txShifterIndex)) + { + FLEXIO_ClearShifterErrorFlags(base->flexioBase, (1U << base->txShifterIndex)); + } + /* Handle transfer */ + if (((FLEXIO_I2S_GetStatusFlags(base) & kFLEXIO_I2S_TxDataRegEmptyFlag) != 0) && + (handle->queue[handle->queueDriver].data != NULL)) + { + FLEXIO_I2S_WriteNonBlocking(base, handle->bitWidth, buffer, dataSize); + + /* Update internal counter */ + handle->queue[handle->queueDriver].dataSize -= dataSize; + handle->queue[handle->queueDriver].data += dataSize; + } + + /* If finished a blcok, call the callback function */ + if ((handle->queue[handle->queueDriver].dataSize == 0U) && (handle->queue[handle->queueDriver].data != NULL)) + { + memset(&handle->queue[handle->queueDriver], 0, sizeof(flexio_i2s_transfer_t)); + handle->queueDriver = (handle->queueDriver + 1) % FLEXIO_I2S_XFER_QUEUE_SIZE; + if (handle->callback) + { + (handle->callback)(base, handle, kStatus_Success, handle->userData); + } + } + + /* If all data finished, just stop the transfer */ + if (handle->queue[handle->queueDriver].data == NULL) + { + FLEXIO_I2S_TransferAbortSend(base, handle); + } +} + +void FLEXIO_I2S_TransferRxHandleIRQ(void *i2sBase, void *i2sHandle) +{ + assert(i2sHandle); + + flexio_i2s_handle_t *handle = (flexio_i2s_handle_t *)i2sHandle; + FLEXIO_I2S_Type *base = (FLEXIO_I2S_Type *)i2sBase; + uint8_t *buffer = handle->queue[handle->queueDriver].data; + uint8_t dataSize = handle->bitWidth / 8U; + + /* Handle transfer */ + if (((FLEXIO_I2S_GetStatusFlags(base) & kFLEXIO_I2S_RxDataRegFullFlag) != 0) && + (handle->queue[handle->queueDriver].data != NULL)) + { + FLEXIO_I2S_ReadNonBlocking(base, handle->bitWidth, buffer, dataSize); + + /* Update internal state */ + handle->queue[handle->queueDriver].dataSize -= dataSize; + handle->queue[handle->queueDriver].data += dataSize; + } + + /* If finished a blcok, call the callback function */ + if ((handle->queue[handle->queueDriver].dataSize == 0U) && (handle->queue[handle->queueDriver].data != NULL)) + { + memset(&handle->queue[handle->queueDriver], 0, sizeof(flexio_i2s_transfer_t)); + handle->queueDriver = (handle->queueDriver + 1) % FLEXIO_I2S_XFER_QUEUE_SIZE; + if (handle->callback) + { + (handle->callback)(base, handle, kStatus_Success, handle->userData); + } + } + + /* If all data finished, just stop the transfer */ + if (handle->queue[handle->queueDriver].data == NULL) + { + FLEXIO_I2S_TransferAbortReceive(base, handle); + } +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_i2s.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_i2s.h new file mode 100644 index 00000000000..ea3a9c07b94 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_i2s.h @@ -0,0 +1,569 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FSL_FLEXIO_I2S_H_ +#define _FSL_FLEXIO_I2S_H_ + +#include "fsl_common.h" +#include "fsl_flexio.h" + +/*! + * @addtogroup flexio_i2s + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief FlexIO I2S driver version 2.1.0. */ +#define FSL_FLEXIO_I2S_DRIVER_VERSION (MAKE_VERSION(2, 1, 1)) +/*@}*/ + +/*! @brief FlexIO I2S transfer status */ +enum _flexio_i2s_status +{ + kStatus_FLEXIO_I2S_Idle = MAKE_STATUS(kStatusGroup_FLEXIO_I2S, 0), /*!< FlexIO I2S is in idle state */ + kStatus_FLEXIO_I2S_TxBusy = MAKE_STATUS(kStatusGroup_FLEXIO_I2S, 1), /*!< FlexIO I2S Tx is busy */ + kStatus_FLEXIO_I2S_RxBusy = MAKE_STATUS(kStatusGroup_FLEXIO_I2S, 2), /*!< FlexIO I2S Tx is busy */ + kStatus_FLEXIO_I2S_Error = MAKE_STATUS(kStatusGroup_FLEXIO_I2S, 3), /*!< FlexIO I2S error occurred */ + kStatus_FLEXIO_I2S_QueueFull = MAKE_STATUS(kStatusGroup_FLEXIO_I2S, 4), /*!< FlexIO I2S transfer queue is full. */ +}; + +/*! @brief Define FlexIO I2S access structure typedef */ +typedef struct _flexio_i2s_type +{ + FLEXIO_Type *flexioBase; /*!< FlexIO base pointer */ + uint8_t txPinIndex; /*!< Tx data pin index in FlexIO pins */ + uint8_t rxPinIndex; /*!< Rx data pin index */ + uint8_t bclkPinIndex; /*!< Bit clock pin index */ + uint8_t fsPinIndex; /*!< Frame sync pin index */ + uint8_t txShifterIndex; /*!< Tx data shifter index */ + uint8_t rxShifterIndex; /*!< Rx data shifter index */ + uint8_t bclkTimerIndex; /*!< Bit clock timer index */ + uint8_t fsTimerIndex; /*!< Frame sync timer index */ +} FLEXIO_I2S_Type; + +/*! @brief Master or slave mode */ +typedef enum _flexio_i2s_master_slave +{ + kFLEXIO_I2S_Master = 0x0U, /*!< Master mode */ + kFLEXIO_I2S_Slave = 0x1U /*!< Slave mode */ +} flexio_i2s_master_slave_t; + +/*! @brief Define FlexIO FlexIO I2S interrupt mask. */ +enum _flexio_i2s_interrupt_enable +{ + kFLEXIO_I2S_TxDataRegEmptyInterruptEnable = 0x1U, /*!< Transmit buffer empty interrupt enable. */ + kFLEXIO_I2S_RxDataRegFullInterruptEnable = 0x2U, /*!< Receive buffer full interrupt enable. */ +}; + +/*! @brief Define FlexIO FlexIO I2S status mask. */ +enum _flexio_i2s_status_flags +{ + kFLEXIO_I2S_TxDataRegEmptyFlag = 0x1U, /*!< Transmit buffer empty flag. */ + kFLEXIO_I2S_RxDataRegFullFlag = 0x2U, /*!< Receive buffer full flag. */ +}; + +/*! @brief FlexIO I2S configure structure */ +typedef struct _flexio_i2s_config +{ + bool enableI2S; /*!< Enable FlexIO I2S */ + flexio_i2s_master_slave_t masterSlave; /*!< Master or slave */ +} flexio_i2s_config_t; + +/*! @brief FlexIO I2S audio format, FlexIO I2S only support the same format in Tx and Rx */ +typedef struct _flexio_i2s_format +{ + uint8_t bitWidth; /*!< Bit width of audio data, always 8/16/24/32 bits */ + uint32_t sampleRate_Hz; /*!< Sample rate of the audio data */ +} flexio_i2s_format_t; + +/*!@brief FlexIO I2S transfer queue size, user can refine it according to use case. */ +#define FLEXIO_I2S_XFER_QUEUE_SIZE (4) + +/*! @brief Audio sample rate */ +typedef enum _flexio_i2s_sample_rate +{ + kFLEXIO_I2S_SampleRate8KHz = 8000U, /*!< Sample rate 8000Hz */ + kFLEXIO_I2S_SampleRate11025Hz = 11025U, /*!< Sample rate 11025Hz */ + kFLEXIO_I2S_SampleRate12KHz = 12000U, /*!< Sample rate 12000Hz */ + kFLEXIO_I2S_SampleRate16KHz = 16000U, /*!< Sample rate 16000Hz */ + kFLEXIO_I2S_SampleRate22050Hz = 22050U, /*!< Sample rate 22050Hz */ + kFLEXIO_I2S_SampleRate24KHz = 24000U, /*!< Sample rate 24000Hz */ + kFLEXIO_I2S_SampleRate32KHz = 32000U, /*!< Sample rate 32000Hz */ + kFLEXIO_I2S_SampleRate44100Hz = 44100U, /*!< Sample rate 44100Hz */ + kFLEXIO_I2S_SampleRate48KHz = 48000U, /*!< Sample rate 48000Hz */ + kFLEXIO_I2S_SampleRate96KHz = 96000U /*!< Sample rate 96000Hz */ +} flexio_i2s_sample_rate_t; + +/*! @brief Audio word width */ +typedef enum _flexio_i2s_word_width +{ + kFLEXIO_I2S_WordWidth8bits = 8U, /*!< Audio data width 8 bits */ + kFLEXIO_I2S_WordWidth16bits = 16U, /*!< Audio data width 16 bits */ + kFLEXIO_I2S_WordWidth24bits = 24U, /*!< Audio data width 24 bits */ + kFLEXIO_I2S_WordWidth32bits = 32U /*!< Audio data width 32 bits */ +} flexio_i2s_word_width_t; + +/*! @brief Define FlexIO I2S transfer structure. */ +typedef struct _flexio_i2s_transfer +{ + uint8_t *data; /*!< Data buffer start pointer */ + size_t dataSize; /*!< Bytes to be transferred. */ +} flexio_i2s_transfer_t; + +typedef struct _flexio_i2s_handle flexio_i2s_handle_t; + +/*! @brief FlexIO I2S xfer callback prototype */ +typedef void (*flexio_i2s_callback_t)(FLEXIO_I2S_Type *base, + flexio_i2s_handle_t *handle, + status_t status, + void *userData); + +/*! @brief Define FlexIO I2S handle structure. */ +struct _flexio_i2s_handle +{ + uint32_t state; /*!< Internal state */ + flexio_i2s_callback_t callback; /*!< Callback function called at transfer event*/ + void *userData; /*!< Callback parameter passed to callback function*/ + uint8_t bitWidth; /*!< Bit width for transfer, 8/16/24/32bits */ + flexio_i2s_transfer_t queue[FLEXIO_I2S_XFER_QUEUE_SIZE]; /*!< Transfer queue storing queued transfer */ + size_t transferSize[FLEXIO_I2S_XFER_QUEUE_SIZE]; /*!< Data bytes need to transfer */ + volatile uint8_t queueUser; /*!< Index for user to queue transfer */ + volatile uint8_t queueDriver; /*!< Index for driver to get the transfer data and size */ +}; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif /*_cplusplus*/ + +/*! + * @name Initialization and deinitialization + * @{ + */ + +/*! + * @brief Initializes the FlexIO I2S. + * + * This API configures FlexIO pins and shifter to I2S and configure FlexIO I2S with configuration structure. + * The configuration structure can be filled by the user, or be set with default values by + * FLEXIO_I2S_GetDefaultConfig(). + * + * @note This API should be called at the beginning of the application to use + * the FlexIO I2S driver, or any access to the FlexIO I2S module could cause hard fault + * because clock is not enabled. + * + * @param base FlexIO I2S base pointer + * @param config FlexIO I2S configure structure. +*/ +void FLEXIO_I2S_Init(FLEXIO_I2S_Type *base, const flexio_i2s_config_t *config); + +/*! + * @brief Sets the FlexIO I2S configuration structure to default values. + * + * The purpose of this API is to get the configuration structure initialized for use in FLEXIO_I2S_Init(). + * User may use the initialized structure unchanged in FLEXIO_I2S_Init(), or modify + * some fields of the structure before calling FLEXIO_I2S_Init(). + * + * @param config pointer to master configuration structure + */ +void FLEXIO_I2S_GetDefaultConfig(flexio_i2s_config_t *config); + +/*! + * @brief De-initializes the FlexIO I2S. + * + * Calling this API gates the FlexIO i2s clock. After calling this API, call the FLEXO_I2S_Init to use the + * FlexIO I2S module. + * + * @param base FlexIO I2S base pointer +*/ +void FLEXIO_I2S_Deinit(FLEXIO_I2S_Type *base); + +/*! + * @brief Enables/disables the FlexIO I2S module operation. + * + * @param base pointer to FLEXIO_I2S_Type + * @param enable True to enable, false to disable. +*/ +static inline void FLEXIO_I2S_Enable(FLEXIO_I2S_Type *base, bool enable) +{ + if (enable) + { + base->flexioBase->CTRL |= FLEXIO_CTRL_FLEXEN_MASK; + } + else + { + base->flexioBase->CTRL &= ~FLEXIO_CTRL_FLEXEN_MASK; + } +} + +/*! @} */ + +/*! + * @name Status + * @{ + */ + +/*! + * @brief Gets the FlexIO I2S status flags. + * + * @param base pointer to FLEXIO_I2S_Type structure + * @return Status flag, which are ORed by the enumerators in the _flexio_i2s_status_flags. +*/ +uint32_t FLEXIO_I2S_GetStatusFlags(FLEXIO_I2S_Type *base); + +/*! @} */ + +/*! + * @name Interrupts + * @{ + */ + +/*! + * @brief Enables the FlexIO I2S interrupt. + * + * This function enables the FlexIO UART interrupt. + * + * @param base pointer to FLEXIO_I2S_Type structure + * @param mask interrupt source + */ +void FLEXIO_I2S_EnableInterrupts(FLEXIO_I2S_Type *base, uint32_t mask); + +/*! + * @brief Disables the FlexIO I2S interrupt. + * + * This function enables the FlexIO UART interrupt. + * + * @param base pointer to FLEXIO_I2S_Type structure + * @param mask interrupt source + */ +void FLEXIO_I2S_DisableInterrupts(FLEXIO_I2S_Type *base, uint32_t mask); + +/*! @} */ + +/*! + * @name DMA Control + * @{ + */ + +/*! + * @brief Enables/disables the FlexIO I2S Tx DMA requests. + * + * @param base FlexIO I2S base pointer + * @param enable True means enable DMA, false means disable DMA. + */ +static inline void FLEXIO_I2S_TxEnableDMA(FLEXIO_I2S_Type *base, bool enable) +{ + FLEXIO_EnableShifterStatusDMA(base->flexioBase, 1 << base->txShifterIndex, enable); +} + +/*! + * @brief Enables/disables the FlexIO I2S Rx DMA requests. + * + * @param base FlexIO I2S base pointer + * @param enable True means enable DMA, false means disable DMA. + */ +static inline void FLEXIO_I2S_RxEnableDMA(FLEXIO_I2S_Type *base, bool enable) +{ + FLEXIO_EnableShifterStatusDMA(base->flexioBase, 1 << base->rxShifterIndex, enable); +} + +/*! + * @brief Gets the FlexIO I2S send data register address. + * + * This function returns the I2S data register address, mainly used by DMA/eDMA. + * + * @param base pointer to FLEXIO_I2S_Type structure + * @return FlexIO i2s send data register address. + */ +static inline uint32_t FLEXIO_I2S_TxGetDataRegisterAddress(FLEXIO_I2S_Type *base) +{ + return FLEXIO_GetShifterBufferAddress(base->flexioBase, kFLEXIO_ShifterBufferBitSwapped, base->txShifterIndex); +} + +/*! + * @brief Gets the FlexIO I2S receive data register address. + * + * This function returns the I2S data register address, mainly used by DMA/eDMA. + * + * @param base pointer to FLEXIO_I2S_Type structure + * @return FlexIO i2s receive data register address. + */ +static inline uint32_t FLEXIO_I2S_RxGetDataRegisterAddress(FLEXIO_I2S_Type *base) +{ + return FLEXIO_GetShifterBufferAddress(base->flexioBase, kFLEXIO_ShifterBufferBitSwapped, base->rxShifterIndex); +} + +/*! @} */ + +/*! + * @name Bus Operations + * @{ + */ + +/*! + * @brief Configures the FlexIO I2S audio format in master mode. + * + * Audio format can be changed in run-time of FlexIO I2S. This function configures the sample rate and audio data + * format to be transferred. + * + * @param base pointer to FLEXIO_I2S_Type structure + * @param format Pointer to FlexIO I2S audio data format structure. + * @param srcClock_Hz I2S master clock source frequency in Hz. +*/ +void FLEXIO_I2S_MasterSetFormat(FLEXIO_I2S_Type *base, flexio_i2s_format_t *format, uint32_t srcClock_Hz); + +/*! + * @brief Configures the FlexIO I2S audio format in slave mode. + * + * Audio format can be changed in run-time of FlexIO I2S. This function configures the sample rate and audio data + * format to be transferred. + * + * @param base pointer to FLEXIO_I2S_Type structure + * @param format Pointer to FlexIO I2S audio data format structure. +*/ +void FLEXIO_I2S_SlaveSetFormat(FLEXIO_I2S_Type *base, flexio_i2s_format_t *format); + +/*! + * @brief Sends a piece of data using a blocking method. + * + * @note This function blocks via polling until data is ready to be sent. + * + * @param base FlexIO I2S base pointer. + * @param bitWidth How many bits in a audio word, usually 8/16/24/32 bits. + * @param txData Pointer to the data to be written. + * @param size Bytes to be written. + */ +void FLEXIO_I2S_WriteBlocking(FLEXIO_I2S_Type *base, uint8_t bitWidth, uint8_t *txData, size_t size); + +/*! + * @brief Writes a data into data register. + * + * @param base FlexIO I2S base pointer. + * @param bitWidth How many bits in a audio word, usually 8/16/24/32 bits. + * @param data Data to be written. + */ +static inline void FLEXIO_I2S_WriteData(FLEXIO_I2S_Type *base, uint8_t bitWidth, uint32_t data) +{ + base->flexioBase->SHIFTBUFBIS[base->txShifterIndex] = (data << (32U - bitWidth)); +} + +/*! + * @brief Receives a piece of data using a blocking method. + * + * @note This function blocks via polling until data is ready to be sent. + * + * @param base FlexIO I2S base pointer + * @param bitWidth How many bits in a audio word, usually 8/16/24/32 bits. + * @param rxData Pointer to the data to be read. + * @param size Bytes to be read. + */ +void FLEXIO_I2S_ReadBlocking(FLEXIO_I2S_Type *base, uint8_t bitWidth, uint8_t *rxData, size_t size); + +/*! + * @brief Reads a data from the data register. + * + * @param base FlexIO I2S base pointer + * @return Data read from data register. + */ +static inline uint32_t FLEXIO_I2S_ReadData(FLEXIO_I2S_Type *base) +{ + return base->flexioBase->SHIFTBUFBIS[base->rxShifterIndex]; +} + +/*! @} */ + +/*! + * @name Transactional + * @{ + */ + +/*! + * @brief Initializes the FlexIO I2S handle. + * + * This function initializes the FlexIO I2S handle which can be used for other + * FlexIO I2S transactional APIs. Call this API once to get the + * initialized handle. + * + * @param base pointer to FLEXIO_I2S_Type structure + * @param handle pointer to flexio_i2s_handle_t structure to store the transfer state. + * @param callback FlexIO I2S callback function, which is called while finished a block. + * @param userData User parameter for the FlexIO I2S callback. + */ +void FLEXIO_I2S_TransferTxCreateHandle(FLEXIO_I2S_Type *base, + flexio_i2s_handle_t *handle, + flexio_i2s_callback_t callback, + void *userData); + +/*! + * @brief Configures the FlexIO I2S audio format. + * + * Audio format can be changed in run-time of FlexIO i2s. This function configures the sample rate and audio data + * format to be transferred. + * + * @param base pointer to FLEXIO_I2S_Type structure. + * @param handle FlexIO I2S handle pointer. + * @param format Pointer to audio data format structure. + * @param srcClock_Hz FlexIO I2S bit clock source frequency in Hz. This parameter should be 0 while in slave mode. +*/ +void FLEXIO_I2S_TransferSetFormat(FLEXIO_I2S_Type *base, + flexio_i2s_handle_t *handle, + flexio_i2s_format_t *format, + uint32_t srcClock_Hz); + +/*! + * @brief Initializes the FlexIO I2S receive handle. + * + * This function initializes the FlexIO I2S handle which can be used for other + * FlexIO I2S transactional APIs. Usually, user only need to call this API once to get the + * initialized handle. + * + * @param base pointer to FLEXIO_I2S_Type structure. + * @param handle pointer to flexio_i2s_handle_t structure to store the transfer state. + * @param callback FlexIO I2S callback function, which is called while finished a block. + * @param userData User parameter for the FlexIO I2S callback. + */ +void FLEXIO_I2S_TransferRxCreateHandle(FLEXIO_I2S_Type *base, + flexio_i2s_handle_t *handle, + flexio_i2s_callback_t callback, + void *userData); + +/*! + * @brief Performs an interrupt non-blocking send transfer on FlexIO I2S. + * + * @note Calling the API returns immediately after transfer initiates. + * Call FLEXIO_I2S_GetRemainingBytes to poll the transfer status and check whether + * the transfer is finished. If the return status is 0, the transfer is finished. + * + * @param base pointer to FLEXIO_I2S_Type structure. + * @param handle pointer to flexio_i2s_handle_t structure which stores the transfer state + * @param xfer pointer to flexio_i2s_transfer_t structure + * @retval kStatus_Success Successfully start the data transmission. + * @retval kStatus_FLEXIO_I2S_TxBusy Previous transmission still not finished, data not all written to TX register yet. + * @retval kStatus_InvalidArgument The input parameter is invalid. + */ +status_t FLEXIO_I2S_TransferSendNonBlocking(FLEXIO_I2S_Type *base, + flexio_i2s_handle_t *handle, + flexio_i2s_transfer_t *xfer); + +/*! + * @brief Performs an interrupt non-blocking receive transfer on FlexIO I2S. + * + * @note The API returns immediately after transfer initiates. + * Call FLEXIO_I2S_GetRemainingBytes to poll the transfer status to check whether + * the transfer is finished. If the return status is 0, the transfer is finished. + * + * @param base pointer to FLEXIO_I2S_Type structure. + * @param handle pointer to flexio_i2s_handle_t structure which stores the transfer state + * @param xfer pointer to flexio_i2s_transfer_t structure + * @retval kStatus_Success Successfully start the data receive. + * @retval kStatus_FLEXIO_I2S_RxBusy Previous receive still not finished. + * @retval kStatus_InvalidArgument The input parameter is invalid. + */ +status_t FLEXIO_I2S_TransferReceiveNonBlocking(FLEXIO_I2S_Type *base, + flexio_i2s_handle_t *handle, + flexio_i2s_transfer_t *xfer); + +/*! + * @brief Aborts the current send. + * + * @note This API can be called at any time when interrupt non-blocking transfer initiates + * to abort the transfer in a early time. + * + * @param base pointer to FLEXIO_I2S_Type structure. + * @param handle pointer to flexio_i2s_handle_t structure which stores the transfer state + */ +void FLEXIO_I2S_TransferAbortSend(FLEXIO_I2S_Type *base, flexio_i2s_handle_t *handle); + +/*! + * @brief Aborts the current receive. + * + * @note This API can be called at any time when interrupt non-blocking transfer initiates + * to abort the transfer in a early time. + * + * @param base pointer to FLEXIO_I2S_Type structure. + * @param handle pointer to flexio_i2s_handle_t structure which stores the transfer state + */ +void FLEXIO_I2S_TransferAbortReceive(FLEXIO_I2S_Type *base, flexio_i2s_handle_t *handle); + +/*! + * @brief Gets the remaining bytes to be sent. + * + * @param base pointer to FLEXIO_I2S_Type structure. + * @param handle pointer to flexio_i2s_handle_t structure which stores the transfer state + * @param count Bytes sent. + * @retval kStatus_Success Succeed get the transfer count. + * @retval kStatus_NoTransferInProgress There is not a non-blocking transaction currently in progress. + */ +status_t FLEXIO_I2S_TransferGetSendCount(FLEXIO_I2S_Type *base, flexio_i2s_handle_t *handle, size_t *count); + +/*! + * @brief Gets the remaining bytes to be received. + * + * @param base pointer to FLEXIO_I2S_Type structure. + * @param handle pointer to flexio_i2s_handle_t structure which stores the transfer state + * @return count Bytes received. + * @retval kStatus_Success Succeed get the transfer count. + * @retval kStatus_NoTransferInProgress There is not a non-blocking transaction currently in progress. + */ +status_t FLEXIO_I2S_TransferGetReceiveCount(FLEXIO_I2S_Type *base, flexio_i2s_handle_t *handle, size_t *count); + +/*! + * @brief Tx interrupt handler. + * + * @param i2sBase pointer to FLEXIO_I2S_Type structure. + * @param i2sHandle pointer to flexio_i2s_handle_t structure + */ +void FLEXIO_I2S_TransferTxHandleIRQ(void *i2sBase, void *i2sHandle); + +/*! + * @brief Rx interrupt handler. + * + * @param i2sBase pointer to FLEXIO_I2S_Type structure. + * @param i2sHandle pointer to flexio_i2s_handle_t structure + */ +void FLEXIO_I2S_TransferRxHandleIRQ(void *i2sBase, void *i2sHandle); + +/*! @} */ + +#if defined(__cplusplus) +} +#endif /*_cplusplus*/ + +/*! @} */ + +#endif /* _FSL_FLEXIO_I2S_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_i2s_edma.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_i2s_edma.c new file mode 100644 index 00000000000..f5a2682fe52 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_i2s_edma.c @@ -0,0 +1,353 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_flexio_i2s_edma.h" + +/******************************************************************************* + * Definitations + ******************************************************************************/ +/* Used for 32byte aligned */ +#define STCD_ADDR(address) (edma_tcd_t *)(((uint32_t)address + 32) & ~0x1FU) + +/*handle; + + /* If finished a blcok, call the callback function */ + memset(&flexio_i2sHandle->queue[flexio_i2sHandle->queueDriver], 0, sizeof(flexio_i2s_transfer_t)); + flexio_i2sHandle->queueDriver = (flexio_i2sHandle->queueDriver + 1) % FLEXIO_I2S_XFER_QUEUE_SIZE; + if (flexio_i2sHandle->callback) + { + (flexio_i2sHandle->callback)(privHandle->base, flexio_i2sHandle, kStatus_Success, flexio_i2sHandle->userData); + } + + /* If all data finished, just stop the transfer */ + if (flexio_i2sHandle->queue[flexio_i2sHandle->queueDriver].data == NULL) + { + FLEXIO_I2S_TransferAbortSendEDMA(privHandle->base, flexio_i2sHandle); + } +} + +static void FLEXIO_I2S_RxEDMACallback(edma_handle_t *handle, void *userData, bool done, uint32_t tcds) +{ + flexio_i2s_edma_private_handle_t *privHandle = (flexio_i2s_edma_private_handle_t *)userData; + flexio_i2s_edma_handle_t *flexio_i2sHandle = privHandle->handle; + + /* If finished a blcok, call the callback function */ + memset(&flexio_i2sHandle->queue[flexio_i2sHandle->queueDriver], 0, sizeof(flexio_i2s_transfer_t)); + flexio_i2sHandle->queueDriver = (flexio_i2sHandle->queueDriver + 1) % FLEXIO_I2S_XFER_QUEUE_SIZE; + if (flexio_i2sHandle->callback) + { + (flexio_i2sHandle->callback)(privHandle->base, flexio_i2sHandle, kStatus_Success, flexio_i2sHandle->userData); + } + + /* If all data finished, just stop the transfer */ + if (flexio_i2sHandle->queue[flexio_i2sHandle->queueDriver].data == NULL) + { + FLEXIO_I2S_TransferAbortReceiveEDMA(privHandle->base, flexio_i2sHandle); + } +} + +void FLEXIO_I2S_TransferTxCreateHandleEDMA(FLEXIO_I2S_Type *base, + flexio_i2s_edma_handle_t *handle, + flexio_i2s_edma_callback_t callback, + void *userData, + edma_handle_t *dmaHandle) +{ + assert(handle && dmaHandle); + + /* Set flexio_i2s base to handle */ + handle->dmaHandle = dmaHandle; + handle->callback = callback; + handle->userData = userData; + + /* Set FLEXIO I2S state to idle */ + handle->state = kFLEXIO_I2S_Idle; + + s_edmaPrivateHandle[0].base = base; + s_edmaPrivateHandle[0].handle = handle; + + /* Need to use scatter gather */ + EDMA_InstallTCDMemory(dmaHandle, STCD_ADDR(handle->tcd), FLEXIO_I2S_XFER_QUEUE_SIZE); + + /* Install callback for Tx dma channel */ + EDMA_SetCallback(dmaHandle, FLEXIO_I2S_TxEDMACallback, &s_edmaPrivateHandle[0]); +} + +void FLEXIO_I2S_TransferRxCreateHandleEDMA(FLEXIO_I2S_Type *base, + flexio_i2s_edma_handle_t *handle, + flexio_i2s_edma_callback_t callback, + void *userData, + edma_handle_t *dmaHandle) +{ + assert(handle && dmaHandle); + + /* Set flexio_i2s base to handle */ + handle->dmaHandle = dmaHandle; + handle->callback = callback; + handle->userData = userData; + + /* Set FLEXIO I2S state to idle */ + handle->state = kFLEXIO_I2S_Idle; + + s_edmaPrivateHandle[1].base = base; + s_edmaPrivateHandle[1].handle = handle; + + /* Need to use scatter gather */ + EDMA_InstallTCDMemory(dmaHandle, STCD_ADDR(handle->tcd), FLEXIO_I2S_XFER_QUEUE_SIZE); + + /* Install callback for Tx dma channel */ + EDMA_SetCallback(dmaHandle, FLEXIO_I2S_RxEDMACallback, &s_edmaPrivateHandle[1]); +} + +void FLEXIO_I2S_TransferSetFormatEDMA(FLEXIO_I2S_Type *base, + flexio_i2s_edma_handle_t *handle, + flexio_i2s_format_t *format, + uint32_t srcClock_Hz) +{ + assert(handle && format); + + /* Configure the audio format to FLEXIO I2S registers */ + if (srcClock_Hz != 0) + { + /* It is master */ + FLEXIO_I2S_MasterSetFormat(base, format, srcClock_Hz); + } + else + { + FLEXIO_I2S_SlaveSetFormat(base, format); + } + + /* Get the tranfer size from format, this should be used in EDMA configuration */ + handle->bytesPerFrame = format->bitWidth / 8U; +} + +status_t FLEXIO_I2S_TransferSendEDMA(FLEXIO_I2S_Type *base, + flexio_i2s_edma_handle_t *handle, + flexio_i2s_transfer_t *xfer) +{ + assert(handle && xfer); + + edma_transfer_config_t config = {0}; + uint32_t destAddr = FLEXIO_I2S_TxGetDataRegisterAddress(base) + (4U - handle->bytesPerFrame); + + /* Check if input parameter invalid */ + if ((xfer->data == NULL) || (xfer->dataSize == 0U)) + { + return kStatus_InvalidArgument; + } + + if (handle->queue[handle->queueUser].data) + { + return kStatus_FLEXIO_I2S_QueueFull; + } + + /* Change the state of handle */ + handle->state = kFLEXIO_I2S_Busy; + + /* Update the queue state */ + handle->queue[handle->queueUser].data = xfer->data; + handle->queue[handle->queueUser].dataSize = xfer->dataSize; + handle->transferSize[handle->queueUser] = xfer->dataSize; + handle->queueUser = (handle->queueUser + 1) % FLEXIO_I2S_XFER_QUEUE_SIZE; + + /* Prepare edma configure */ + EDMA_PrepareTransfer(&config, xfer->data, handle->bytesPerFrame, (void *)destAddr, handle->bytesPerFrame, + handle->bytesPerFrame, xfer->dataSize, kEDMA_MemoryToPeripheral); + + EDMA_SubmitTransfer(handle->dmaHandle, &config); + + /* Start DMA transfer */ + EDMA_StartTransfer(handle->dmaHandle); + + /* Enable DMA enable bit */ + FLEXIO_I2S_TxEnableDMA(base, true); + + /* Enable FLEXIO I2S Tx clock */ + FLEXIO_I2S_Enable(base, true); + + return kStatus_Success; +} + +status_t FLEXIO_I2S_TransferReceiveEDMA(FLEXIO_I2S_Type *base, + flexio_i2s_edma_handle_t *handle, + flexio_i2s_transfer_t *xfer) +{ + assert(handle && xfer); + + edma_transfer_config_t config = {0}; + uint32_t srcAddr = FLEXIO_I2S_RxGetDataRegisterAddress(base) + (4U - handle->bytesPerFrame); + + /* Check if input parameter invalid */ + if ((xfer->data == NULL) || (xfer->dataSize == 0U)) + { + return kStatus_InvalidArgument; + } + + if (handle->queue[handle->queueUser].data) + { + return kStatus_FLEXIO_I2S_QueueFull; + } + + /* Change the state of handle */ + handle->state = kFLEXIO_I2S_Busy; + + /* Update queue state */ + handle->queue[handle->queueUser].data = xfer->data; + handle->queue[handle->queueUser].dataSize = xfer->dataSize; + handle->transferSize[handle->queueUser] = xfer->dataSize; + handle->queueUser = (handle->queueUser + 1) % FLEXIO_I2S_XFER_QUEUE_SIZE; + + /* Prepare edma configure */ + EDMA_PrepareTransfer(&config, (void *)srcAddr, handle->bytesPerFrame, xfer->data, handle->bytesPerFrame, + handle->bytesPerFrame, xfer->dataSize, kEDMA_PeripheralToMemory); + + EDMA_SubmitTransfer(handle->dmaHandle, &config); + + /* Start DMA transfer */ + EDMA_StartTransfer(handle->dmaHandle); + + /* Enable DMA enable bit */ + FLEXIO_I2S_RxEnableDMA(base, true); + + /* Enable FLEXIO I2S Rx clock */ + FLEXIO_I2S_Enable(base, true); + + return kStatus_Success; +} + +void FLEXIO_I2S_TransferAbortSendEDMA(FLEXIO_I2S_Type *base, flexio_i2s_edma_handle_t *handle) +{ + assert(handle); + + /* Disable dma */ + EDMA_AbortTransfer(handle->dmaHandle); + + /* Disable DMA enable bit */ + FLEXIO_I2S_TxEnableDMA(base, false); + + /* Set the handle state */ + handle->state = kFLEXIO_I2S_Idle; +} + +void FLEXIO_I2S_TransferAbortReceiveEDMA(FLEXIO_I2S_Type *base, flexio_i2s_edma_handle_t *handle) +{ + assert(handle); + + /* Disable dma */ + EDMA_AbortTransfer(handle->dmaHandle); + + /* Disable DMA enable bit */ + FLEXIO_I2S_RxEnableDMA(base, false); + + /* Set the handle state */ + handle->state = kFLEXIO_I2S_Idle; +} + +status_t FLEXIO_I2S_TransferGetSendCountEDMA(FLEXIO_I2S_Type *base, flexio_i2s_edma_handle_t *handle, size_t *count) +{ + assert(handle); + + status_t status = kStatus_Success; + + if (handle->state != kFLEXIO_I2S_Busy) + { + status = kStatus_NoTransferInProgress; + } + else + { + *count = handle->transferSize[handle->queueDriver] - + EDMA_GetRemainingBytes(handle->dmaHandle->base, handle->dmaHandle->channel); + } + + return status; +} + +status_t FLEXIO_I2S_TransferGetReceiveCountEDMA(FLEXIO_I2S_Type *base, flexio_i2s_edma_handle_t *handle, size_t *count) +{ + assert(handle); + + status_t status = kStatus_Success; + + if (handle->state != kFLEXIO_I2S_Busy) + { + status = kStatus_NoTransferInProgress; + } + else + { + *count = handle->transferSize[handle->queueDriver] - + EDMA_GetRemainingBytes(handle->dmaHandle->base, handle->dmaHandle->channel); + } + + return status; +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_i2s_edma.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_i2s_edma.h new file mode 100644 index 00000000000..0624701ccfb --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_i2s_edma.h @@ -0,0 +1,218 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FSL_FLEXIO_I2S_EDMA_H_ +#define _FSL_FLEXIO_I2S_EDMA_H_ + +#include "fsl_flexio_i2s.h" +#include "fsl_edma.h" + +/*! + * @addtogroup flexio_edma_i2s + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +typedef struct _flexio_i2s_edma_handle flexio_i2s_edma_handle_t; + +/*! @brief FlexIO I2S eDMA transfer callback function for finish and error */ +typedef void (*flexio_i2s_edma_callback_t)(FLEXIO_I2S_Type *base, + flexio_i2s_edma_handle_t *handle, + status_t status, + void *userData); + +/*! @brief FlexIO I2S DMA transfer handle, users should not touch the content of the handle.*/ +struct _flexio_i2s_edma_handle +{ + edma_handle_t *dmaHandle; /*!< DMA handler for FlexIO I2S send */ + uint8_t bytesPerFrame; /*!< Bytes in a frame */ + uint32_t state; /*!< Internal state for FlexIO I2S eDMA transfer */ + flexio_i2s_edma_callback_t callback; /*!< Callback for users while transfer finish or error occurred */ + void *userData; /*!< User callback parameter */ + edma_tcd_t tcd[FLEXIO_I2S_XFER_QUEUE_SIZE + 1U]; /*!< TCD pool for eDMA transfer. */ + flexio_i2s_transfer_t queue[FLEXIO_I2S_XFER_QUEUE_SIZE]; /*!< Transfer queue storing queued transfer. */ + size_t transferSize[FLEXIO_I2S_XFER_QUEUE_SIZE]; /*!< Data bytes need to transfer */ + volatile uint8_t queueUser; /*!< Index for user to queue transfer. */ + volatile uint8_t queueDriver; /*!< Index for driver to get the transfer data and size */ +}; + +/******************************************************************************* + * APIs + ******************************************************************************/ +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @name eDMA Transactional + * @{ + */ + +/*! + * @brief Initializes the FlexIO I2S eDMA handle. + * + * This function initializes the FlexIO I2S master DMA handle which can be used for other FlexIO I2S master + * transactional APIs. + * Usually, for a specified FlexIO I2S instance, user need only call this API once to get the initialized handle. + * + * @param base FlexIO I2S peripheral base address. + * @param handle FlexIO I2S eDMA handle pointer. + * @param callback FlexIO I2S eDMA callback function called while finished a block. + * @param userData User parameter for callback. + * @param dmaHandle eDMA handle for FlexIO I2S. This handle shall be a static value allocated by users. + */ +void FLEXIO_I2S_TransferTxCreateHandleEDMA(FLEXIO_I2S_Type *base, + flexio_i2s_edma_handle_t *handle, + flexio_i2s_edma_callback_t callback, + void *userData, + edma_handle_t *dmaHandle); + +/*! + * @brief Initializes the FlexIO I2S Rx eDMA handle. + * + * This function initializes the FlexIO I2S slave DMA handle which can be used for other FlexIO I2S master transactional + * APIs. + * Usually, for a specified FlexIO I2S instance, user need only call this API once to get the initialized handle. + * + * @param base FlexIO I2S peripheral base address. + * @param handle FlexIO I2S eDMA handle pointer. + * @param callback FlexIO I2S eDMA callback function called while finished a block. + * @param userData User parameter for callback. + * @param dmaHandle eDMA handle for FlexIO I2S. This handle shall be a static value allocated by users. + */ +void FLEXIO_I2S_TransferRxCreateHandleEDMA(FLEXIO_I2S_Type *base, + flexio_i2s_edma_handle_t *handle, + flexio_i2s_edma_callback_t callback, + void *userData, + edma_handle_t *dmaHandle); + +/*! + * @brief Configures the FlexIO I2S Tx audio format. + * + * Audio format can be changed in run-time of FlexIO I2S. This function configures the sample rate and audio data + * format to be transferred. This function also sets eDMA parameter according to format. + * + * @param base FlexIO I2S peripheral base address. + * @param handle FlexIO I2S eDMA handle pointer + * @param format Pointer to FlexIO I2S audio data format structure. + * @param srcClock_Hz FlexIO I2S clock source frequency in Hz, it should be 0 while in slave mode. + * @retval kStatus_Success Audio format set successfully. + * @retval kStatus_InvalidArgument The input arguments is invalid. +*/ +void FLEXIO_I2S_TransferSetFormatEDMA(FLEXIO_I2S_Type *base, + flexio_i2s_edma_handle_t *handle, + flexio_i2s_format_t *format, + uint32_t srcClock_Hz); + +/*! + * @brief Performs a non-blocking FlexIO I2S transfer using DMA. + * + * @note This interface returned immediately after transfer initiates, users should call + * FLEXIO_I2S_GetTransferStatus to poll the transfer status to check whether FlexIO I2S transfer finished. + * + * @param base FlexIO I2S peripheral base address. + * @param handle FlexIO I2S DMA handle pointer. + * @param xfer Pointer to DMA transfer structure. + * @retval kStatus_Success Start a FlexIO I2S eDMA send successfully. + * @retval kStatus_InvalidArgument The input arguments is invalid. + * @retval kStatus_TxBusy FlexIO I2S is busy sending data. + */ +status_t FLEXIO_I2S_TransferSendEDMA(FLEXIO_I2S_Type *base, + flexio_i2s_edma_handle_t *handle, + flexio_i2s_transfer_t *xfer); + +/*! + * @brief Performs a non-blocking FlexIO I2S receive using eDMA. + * + * @note This interface returned immediately after transfer initiates, users should call + * FLEXIO_I2S_GetReceiveRemainingBytes to poll the transfer status to check whether FlexIO I2S transfer finished. + * + * @param base FlexIO I2S peripheral base address. + * @param handle FlexIO I2S DMA handle pointer. + * @param xfer Pointer to DMA transfer structure. + * @retval kStatus_Success Start a FlexIO I2S eDMA receive successfully. + * @retval kStatus_InvalidArgument The input arguments is invalid. + * @retval kStatus_RxBusy FlexIO I2S is busy receiving data. + */ +status_t FLEXIO_I2S_TransferReceiveEDMA(FLEXIO_I2S_Type *base, + flexio_i2s_edma_handle_t *handle, + flexio_i2s_transfer_t *xfer); + +/*! + * @brief Aborts a FlexIO I2S transfer using eDMA. + * + * @param base FlexIO I2S peripheral base address. + * @param handle FlexIO I2S DMA handle pointer. + */ +void FLEXIO_I2S_TransferAbortSendEDMA(FLEXIO_I2S_Type *base, flexio_i2s_edma_handle_t *handle); + +/*! + * @brief Aborts a FlexIO I2S receive using eDMA. + * + * @param base FlexIO I2S peripheral base address. + * @param handle FlexIO I2S DMA handle pointer. + */ +void FLEXIO_I2S_TransferAbortReceiveEDMA(FLEXIO_I2S_Type *base, flexio_i2s_edma_handle_t *handle); + +/*! + * @brief Gets the remaining bytes to be sent. + * + * @param base FlexIO I2S peripheral base address. + * @param handle FlexIO I2S DMA handle pointer. + * @param count Bytes sent. + * @retval kStatus_Success Succeed get the transfer count. + * @retval kStatus_NoTransferInProgress There is not a non-blocking transaction currently in progress. + */ +status_t FLEXIO_I2S_TransferGetSendCountEDMA(FLEXIO_I2S_Type *base, flexio_i2s_edma_handle_t *handle, size_t *count); + +/*! + * @brief Get the remaining bytes to be received. + * + * @param base FlexIO I2S peripheral base address. + * @param handle FlexIO I2S DMA handle pointer. + * @param count Bytes received. + * @retval kStatus_Success Succeed get the transfer count. + * @retval kStatus_NoTransferInProgress There is not a non-blocking transaction currently in progress. + */ +status_t FLEXIO_I2S_TransferGetReceiveCountEDMA(FLEXIO_I2S_Type *base, flexio_i2s_edma_handle_t *handle, size_t *count); + +/*! @} */ + +#if defined(__cplusplus) +} +#endif + +/*! + * @} + */ +#endif diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_spi.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_spi.c new file mode 100644 index 00000000000..65c987a6ffd --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_spi.c @@ -0,0 +1,935 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_flexio_spi.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @brief FLEXIO SPI transfer state, which is used for SPI transactiaonl APIs' internal state. */ +enum _flexio_spi_transfer_states +{ + kFLEXIO_SPI_Idle = 0x0U, /*!< Nothing in the transmitter/receiver's queue. */ + kFLEXIO_SPI_Busy, /*!< Transmiter/Receive's queue is not finished. */ +}; + +/******************************************************************************* + * Prototypes + ******************************************************************************/ + +/*! + * @brief Send a piece of data for SPI. + * + * This function computes the number of data to be written into D register or Tx FIFO, + * and write the data into it. At the same time, this function updates the values in + * master handle structure. + * + * @param base pointer to FLEXIO_SPI_Type structure + * @param handle Pointer to SPI master handle structure. + */ +static void FLEXIO_SPI_TransferSendTransaction(FLEXIO_SPI_Type *base, flexio_spi_master_handle_t *handle); + +/*! + * @brief Receive a piece of data for SPI master. + * + * This function computes the number of data to receive from D register or Rx FIFO, + * and write the data to destination address. At the same time, this function updates + * the values in master handle structure. + * + * @param base pointer to FLEXIO_SPI_Type structure + * @param handle Pointer to SPI master handle structure. + */ +static void FLEXIO_SPI_TransferReceiveTransaction(FLEXIO_SPI_Type *base, flexio_spi_master_handle_t *handle); + +/******************************************************************************* + * Variables + ******************************************************************************/ + +/******************************************************************************* + * Codes + ******************************************************************************/ + +static void FLEXIO_SPI_TransferSendTransaction(FLEXIO_SPI_Type *base, flexio_spi_master_handle_t *handle) +{ + uint16_t tmpData = FLEXIO_SPI_DUMMYDATA; + + if (handle->txData != NULL) + { + /* Transmit data and update tx size/buff. */ + if (handle->bytePerFrame == 1U) + { + tmpData = *(handle->txData); + handle->txData++; + } + else + { + tmpData = (uint32_t)(handle->txData[0]) << 8U; + tmpData += handle->txData[1]; + handle->txData += 2U; + } + } + else + { + tmpData = FLEXIO_SPI_DUMMYDATA; + } + + handle->txRemainingBytes -= handle->bytePerFrame; + + FLEXIO_SPI_WriteData(base, handle->direction, tmpData); + + if (!handle->txRemainingBytes) + { + FLEXIO_SPI_DisableInterrupts(base, kFLEXIO_SPI_TxEmptyInterruptEnable); + } +} + +static void FLEXIO_SPI_TransferReceiveTransaction(FLEXIO_SPI_Type *base, flexio_spi_master_handle_t *handle) +{ + uint16_t tmpData; + + tmpData = FLEXIO_SPI_ReadData(base, handle->direction); + + if (handle->rxData != NULL) + { + if (handle->bytePerFrame == 1U) + { + *handle->rxData = tmpData; + handle->rxData++; + } + else + { + *((uint16_t *)(handle->rxData)) = tmpData; + handle->rxData += 2U; + } + } + handle->rxRemainingBytes -= handle->bytePerFrame; +} + +void FLEXIO_SPI_MasterInit(FLEXIO_SPI_Type *base, flexio_spi_master_config_t *masterConfig, uint32_t srcClock_Hz) +{ + assert(base); + assert(masterConfig); + + flexio_shifter_config_t shifterConfig; + flexio_timer_config_t timerConfig; + uint32_t ctrlReg = 0; + uint16_t timerDiv = 0; + uint16_t timerCmp = 0; + + /* Clear the shifterConfig & timerConfig struct. */ + memset(&shifterConfig, 0, sizeof(shifterConfig)); + memset(&timerConfig, 0, sizeof(timerConfig)); + + /* Ungate flexio clock. */ + CLOCK_EnableClock(kCLOCK_Flexio0); + + /* Configure FLEXIO SPI Master */ + ctrlReg = base->flexioBase->CTRL; + ctrlReg &= ~(FLEXIO_CTRL_DOZEN_MASK | FLEXIO_CTRL_DBGE_MASK | FLEXIO_CTRL_FASTACC_MASK | FLEXIO_CTRL_FLEXEN_MASK); + ctrlReg |= (FLEXIO_CTRL_DOZEN(masterConfig->enableInDoze) | FLEXIO_CTRL_DBGE(masterConfig->enableInDebug) | + FLEXIO_CTRL_FASTACC(masterConfig->enableFastAccess) | FLEXIO_CTRL_FLEXEN(masterConfig->enableMaster)); + + base->flexioBase->CTRL = ctrlReg; + + /* Do hardware configuration. */ + /* 1. Configure the shifter 0 for tx. */ + shifterConfig.timerSelect = base->timerIndex[0]; + shifterConfig.pinConfig = kFLEXIO_PinConfigOutput; + shifterConfig.pinSelect = base->SDOPinIndex; + shifterConfig.pinPolarity = kFLEXIO_PinActiveHigh; + shifterConfig.shifterMode = kFLEXIO_ShifterModeTransmit; + shifterConfig.inputSource = kFLEXIO_ShifterInputFromPin; + if (masterConfig->phase == kFLEXIO_SPI_ClockPhaseFirstEdge) + { + shifterConfig.timerPolarity = kFLEXIO_ShifterTimerPolarityOnNegitive; + shifterConfig.shifterStop = kFLEXIO_ShifterStopBitDisable; + shifterConfig.shifterStart = kFLEXIO_ShifterStartBitDisabledLoadDataOnEnable; + } + else + { + shifterConfig.timerPolarity = kFLEXIO_ShifterTimerPolarityOnPositive; + shifterConfig.shifterStop = kFLEXIO_ShifterStopBitLow; + shifterConfig.shifterStart = kFLEXIO_ShifterStartBitDisabledLoadDataOnShift; + } + + FLEXIO_SetShifterConfig(base->flexioBase, base->shifterIndex[0], &shifterConfig); + + /* 2. Configure the shifter 1 for rx. */ + shifterConfig.timerSelect = base->timerIndex[0]; + shifterConfig.pinConfig = kFLEXIO_PinConfigOutputDisabled; + shifterConfig.pinSelect = base->SDIPinIndex; + shifterConfig.pinPolarity = kFLEXIO_PinActiveHigh; + shifterConfig.shifterMode = kFLEXIO_ShifterModeReceive; + shifterConfig.inputSource = kFLEXIO_ShifterInputFromPin; + shifterConfig.shifterStop = kFLEXIO_ShifterStopBitDisable; + shifterConfig.shifterStart = kFLEXIO_ShifterStartBitDisabledLoadDataOnEnable; + if (masterConfig->phase == kFLEXIO_SPI_ClockPhaseFirstEdge) + { + shifterConfig.timerPolarity = kFLEXIO_ShifterTimerPolarityOnPositive; + } + else + { + shifterConfig.timerPolarity = kFLEXIO_ShifterTimerPolarityOnNegitive; + } + + FLEXIO_SetShifterConfig(base->flexioBase, base->shifterIndex[1], &shifterConfig); + + /*3. Configure the timer 0 for SCK. */ + timerConfig.triggerSelect = FLEXIO_TIMER_TRIGGER_SEL_SHIFTnSTAT(base->shifterIndex[0]); + timerConfig.triggerPolarity = kFLEXIO_TimerTriggerPolarityActiveLow; + timerConfig.triggerSource = kFLEXIO_TimerTriggerSourceInternal; + timerConfig.pinConfig = kFLEXIO_PinConfigOutput; + timerConfig.pinSelect = base->SCKPinIndex; + timerConfig.pinPolarity = kFLEXIO_PinActiveHigh; + timerConfig.timerMode = kFLEXIO_TimerModeDual8BitBaudBit; + timerConfig.timerOutput = kFLEXIO_TimerOutputZeroNotAffectedByReset; + timerConfig.timerDecrement = kFLEXIO_TimerDecSrcOnFlexIOClockShiftTimerOutput; + timerConfig.timerReset = kFLEXIO_TimerResetNever; + timerConfig.timerDisable = kFLEXIO_TimerDisableOnTimerCompare; + timerConfig.timerEnable = kFLEXIO_TimerEnableOnTriggerHigh; + timerConfig.timerStop = kFLEXIO_TimerStopBitEnableOnTimerDisable; + timerConfig.timerStart = kFLEXIO_TimerStartBitEnabled; + + timerDiv = srcClock_Hz / masterConfig->baudRate_Bps; + timerDiv = timerDiv / 2 - 1; + + timerCmp = ((uint32_t)(masterConfig->dataMode * 2 - 1U)) << 8U; + timerCmp |= timerDiv; + + timerConfig.timerCompare = timerCmp; + + FLEXIO_SetTimerConfig(base->flexioBase, base->timerIndex[0], &timerConfig); + + /* 4. Configure the timer 1 for CSn. */ + timerConfig.triggerSelect = FLEXIO_TIMER_TRIGGER_SEL_TIMn(base->timerIndex[0]); + timerConfig.triggerPolarity = kFLEXIO_TimerTriggerPolarityActiveHigh; + timerConfig.triggerSource = kFLEXIO_TimerTriggerSourceInternal; + timerConfig.pinConfig = kFLEXIO_PinConfigOutput; + timerConfig.pinSelect = base->CSnPinIndex; + timerConfig.pinPolarity = kFLEXIO_PinActiveLow; + timerConfig.timerMode = kFLEXIO_TimerModeSingle16Bit; + timerConfig.timerOutput = kFLEXIO_TimerOutputOneNotAffectedByReset; + timerConfig.timerDecrement = kFLEXIO_TimerDecSrcOnFlexIOClockShiftTimerOutput; + timerConfig.timerReset = kFLEXIO_TimerResetNever; + timerConfig.timerDisable = kFLEXIO_TimerDisableOnPreTimerDisable; + timerConfig.timerEnable = kFLEXIO_TimerEnableOnPrevTimerEnable; + timerConfig.timerStop = kFLEXIO_TimerStopBitDisabled; + timerConfig.timerStart = kFLEXIO_TimerStartBitDisabled; + + timerConfig.timerCompare = 0xFFFFU; + + FLEXIO_SetTimerConfig(base->flexioBase, base->timerIndex[1], &timerConfig); +} + +void FLEXIO_SPI_MasterDeinit(FLEXIO_SPI_Type *base) +{ + /* Disable FLEXIO SPI module. */ + FLEXIO_SPI_Enable(base, false); + + /* Gate flexio clock. */ + CLOCK_DisableClock(kCLOCK_Flexio0); +} + +void FLEXIO_SPI_MasterGetDefaultConfig(flexio_spi_master_config_t *masterConfig) +{ + assert(masterConfig); + + masterConfig->enableMaster = true; + masterConfig->enableInDoze = false; + masterConfig->enableInDebug = true; + masterConfig->enableFastAccess = false; + /* Default baud rate 500kbps. */ + masterConfig->baudRate_Bps = 500000U; + /* Default CPHA = 0. */ + masterConfig->phase = kFLEXIO_SPI_ClockPhaseFirstEdge; + /* Default bit count at 8. */ + masterConfig->dataMode = kFLEXIO_SPI_8BitMode; +} + +void FLEXIO_SPI_SlaveInit(FLEXIO_SPI_Type *base, flexio_spi_slave_config_t *slaveConfig) +{ + assert(base && slaveConfig); + + flexio_shifter_config_t shifterConfig; + flexio_timer_config_t timerConfig; + uint32_t ctrlReg = 0; + + /* Clear the shifterConfig & timerConfig struct. */ + memset(&shifterConfig, 0, sizeof(shifterConfig)); + memset(&timerConfig, 0, sizeof(timerConfig)); + + /* Ungate flexio clock. */ + CLOCK_EnableClock(kCLOCK_Flexio0); + + /* Configure FLEXIO SPI Slave */ + ctrlReg = base->flexioBase->CTRL; + ctrlReg &= ~(FLEXIO_CTRL_DOZEN_MASK | FLEXIO_CTRL_DBGE_MASK | FLEXIO_CTRL_FASTACC_MASK | FLEXIO_CTRL_FLEXEN_MASK); + ctrlReg |= (FLEXIO_CTRL_DOZEN(slaveConfig->enableInDoze) | FLEXIO_CTRL_DBGE(slaveConfig->enableInDebug) | + FLEXIO_CTRL_FASTACC(slaveConfig->enableFastAccess) | FLEXIO_CTRL_FLEXEN(slaveConfig->enableSlave)); + + base->flexioBase->CTRL = ctrlReg; + + /* Do hardware configuration. */ + /* 1. Configure the shifter 0 for tx. */ + shifterConfig.timerSelect = base->timerIndex[0]; + shifterConfig.pinConfig = kFLEXIO_PinConfigOutput; + shifterConfig.pinSelect = base->SDOPinIndex; + shifterConfig.pinPolarity = kFLEXIO_PinActiveHigh; + shifterConfig.shifterMode = kFLEXIO_ShifterModeTransmit; + shifterConfig.inputSource = kFLEXIO_ShifterInputFromPin; + shifterConfig.shifterStop = kFLEXIO_ShifterStopBitDisable; + if (slaveConfig->phase == kFLEXIO_SPI_ClockPhaseFirstEdge) + { + shifterConfig.timerPolarity = kFLEXIO_ShifterTimerPolarityOnNegitive; + shifterConfig.shifterStart = kFLEXIO_ShifterStartBitDisabledLoadDataOnEnable; + } + else + { + shifterConfig.timerPolarity = kFLEXIO_ShifterTimerPolarityOnPositive; + shifterConfig.shifterStart = kFLEXIO_ShifterStartBitDisabledLoadDataOnShift; + } + + FLEXIO_SetShifterConfig(base->flexioBase, base->shifterIndex[0], &shifterConfig); + + /* 2. Configure the shifter 1 for rx. */ + shifterConfig.timerSelect = base->timerIndex[0]; + shifterConfig.pinConfig = kFLEXIO_PinConfigOutputDisabled; + shifterConfig.pinSelect = base->SDIPinIndex; + shifterConfig.pinPolarity = kFLEXIO_PinActiveHigh; + shifterConfig.shifterMode = kFLEXIO_ShifterModeReceive; + shifterConfig.inputSource = kFLEXIO_ShifterInputFromPin; + shifterConfig.shifterStop = kFLEXIO_ShifterStopBitDisable; + shifterConfig.shifterStart = kFLEXIO_ShifterStartBitDisabledLoadDataOnEnable; + if (slaveConfig->phase == kFLEXIO_SPI_ClockPhaseFirstEdge) + { + shifterConfig.timerPolarity = kFLEXIO_ShifterTimerPolarityOnPositive; + } + else + { + shifterConfig.timerPolarity = kFLEXIO_ShifterTimerPolarityOnNegitive; + } + + FLEXIO_SetShifterConfig(base->flexioBase, base->shifterIndex[1], &shifterConfig); + + /*3. Configure the timer 0 for shift clock. */ + timerConfig.triggerSelect = FLEXIO_TIMER_TRIGGER_SEL_PININPUT(base->CSnPinIndex); + timerConfig.triggerPolarity = kFLEXIO_TimerTriggerPolarityActiveLow; + timerConfig.triggerSource = kFLEXIO_TimerTriggerSourceInternal; + timerConfig.pinConfig = kFLEXIO_PinConfigOutputDisabled; + timerConfig.pinSelect = base->SCKPinIndex; + timerConfig.pinPolarity = kFLEXIO_PinActiveHigh; + timerConfig.timerMode = kFLEXIO_TimerModeSingle16Bit; + timerConfig.timerOutput = kFLEXIO_TimerOutputZeroNotAffectedByReset; + timerConfig.timerDecrement = kFLEXIO_TimerDecSrcOnPinInputShiftPinInput; + timerConfig.timerReset = kFLEXIO_TimerResetNever; + timerConfig.timerEnable = kFLEXIO_TimerEnableOnTriggerRisingEdge; + timerConfig.timerStop = kFLEXIO_TimerStopBitDisabled; + if (slaveConfig->phase == kFLEXIO_SPI_ClockPhaseFirstEdge) + { + /* The configuration kFLEXIO_TimerDisableOnTimerCompare only support continuous + PCS access, change to kFLEXIO_TimerDisableNever to enable discontinuous PCS access. */ + timerConfig.timerDisable = kFLEXIO_TimerDisableOnTimerCompare; + timerConfig.timerStart = kFLEXIO_TimerStartBitDisabled; + } + else + { + timerConfig.timerDisable = kFLEXIO_TimerDisableOnTriggerFallingEdge; + timerConfig.timerStart = kFLEXIO_TimerStartBitEnabled; + } + + timerConfig.timerCompare = slaveConfig->dataMode * 2 - 1U; + + FLEXIO_SetTimerConfig(base->flexioBase, base->timerIndex[0], &timerConfig); +} + +void FLEXIO_SPI_SlaveDeinit(FLEXIO_SPI_Type *base) +{ + FLEXIO_SPI_MasterDeinit(base); +} + +void FLEXIO_SPI_SlaveGetDefaultConfig(flexio_spi_slave_config_t *slaveConfig) +{ + assert(slaveConfig); + + slaveConfig->enableSlave = true; + slaveConfig->enableInDoze = false; + slaveConfig->enableInDebug = true; + slaveConfig->enableFastAccess = false; + /* Default CPHA = 0. */ + slaveConfig->phase = kFLEXIO_SPI_ClockPhaseFirstEdge; + /* Default bit count at 8. */ + slaveConfig->dataMode = kFLEXIO_SPI_8BitMode; +} + +void FLEXIO_SPI_EnableInterrupts(FLEXIO_SPI_Type *base, uint32_t mask) +{ + if (mask & kFLEXIO_SPI_TxEmptyInterruptEnable) + { + FLEXIO_EnableShifterStatusInterrupts(base->flexioBase, 1 << base->shifterIndex[0]); + } + if (mask & kFLEXIO_SPI_RxFullInterruptEnable) + { + FLEXIO_EnableShifterStatusInterrupts(base->flexioBase, 1 << base->shifterIndex[1]); + } +} + +void FLEXIO_SPI_DisableInterrupts(FLEXIO_SPI_Type *base, uint32_t mask) +{ + if (mask & kFLEXIO_SPI_TxEmptyInterruptEnable) + { + FLEXIO_DisableShifterStatusInterrupts(base->flexioBase, 1 << base->shifterIndex[0]); + } + if (mask & kFLEXIO_SPI_RxFullInterruptEnable) + { + FLEXIO_DisableShifterStatusInterrupts(base->flexioBase, 1 << base->shifterIndex[1]); + } +} + +void FLEXIO_SPI_EnableDMA(FLEXIO_SPI_Type *base, uint32_t mask, bool enable) +{ + if (mask & kFLEXIO_SPI_TxDmaEnable) + { + FLEXIO_EnableShifterStatusDMA(base->flexioBase, 1U << base->shifterIndex[0], enable); + } + + if (mask & kFLEXIO_SPI_RxDmaEnable) + { + FLEXIO_EnableShifterStatusDMA(base->flexioBase, 1U << base->shifterIndex[1], enable); + } +} + +uint32_t FLEXIO_SPI_GetStatusFlags(FLEXIO_SPI_Type *base) +{ + uint32_t shifterStatus = FLEXIO_GetShifterStatusFlags(base->flexioBase); + uint32_t status = 0; + + status = ((shifterStatus & (1U << base->shifterIndex[0])) >> base->shifterIndex[0]); + status |= (((shifterStatus & (1U << base->shifterIndex[1])) >> (base->shifterIndex[1])) << 1U); + + return status; +} + +void FLEXIO_SPI_ClearStatusFlags(FLEXIO_SPI_Type *base, uint32_t mask) +{ + if (mask & kFLEXIO_SPI_TxBufferEmptyFlag) + { + FLEXIO_ClearShifterStatusFlags(base->flexioBase, 1U << base->shifterIndex[0]); + } + if (mask & kFLEXIO_SPI_RxBufferFullFlag) + { + FLEXIO_ClearShifterStatusFlags(base->flexioBase, 1U << base->shifterIndex[1]); + } +} + +void FLEXIO_SPI_MasterSetBaudRate(FLEXIO_SPI_Type *base, uint32_t baudRate_Bps, uint32_t srcClockHz) +{ + uint16_t timerDiv = 0; + uint16_t timerCmp = 0; + FLEXIO_Type *flexioBase = base->flexioBase; + + /* Set TIMCMP[7:0] = (baud rate divider / 2) - 1.*/ + timerDiv = srcClockHz / baudRate_Bps; + timerDiv = timerDiv / 2 - 1U; + + timerCmp = flexioBase->TIMCMP[base->timerIndex[0]]; + timerCmp &= 0xFF00U; + timerCmp |= timerDiv; + + flexioBase->TIMCMP[base->timerIndex[0]] = timerCmp; +} + +void FLEXIO_SPI_WriteBlocking(FLEXIO_SPI_Type *base, + flexio_spi_shift_direction_t direction, + const uint8_t *buffer, + size_t size) +{ + assert(buffer); + assert(size); + + while (size--) + { + /* Wait until data transfer complete. */ + while (!(FLEXIO_SPI_GetStatusFlags(base) & kFLEXIO_SPI_TxBufferEmptyFlag)) + { + } + FLEXIO_SPI_WriteData(base, direction, *buffer++); + } +} + +void FLEXIO_SPI_ReadBlocking(FLEXIO_SPI_Type *base, + flexio_spi_shift_direction_t direction, + uint8_t *buffer, + size_t size) +{ + assert(buffer); + assert(size); + + while (size--) + { + /* Wait until data transfer complete. */ + while (!(FLEXIO_SPI_GetStatusFlags(base) & kFLEXIO_SPI_RxBufferFullFlag)) + { + } + *buffer++ = FLEXIO_SPI_ReadData(base, direction); + } +} + +void FLEXIO_SPI_MasterTransferBlocking(FLEXIO_SPI_Type *base, flexio_spi_transfer_t *xfer) +{ + flexio_spi_shift_direction_t direction; + uint8_t bytesPerFrame; + uint32_t dataMode = 0; + uint16_t timerCmp = base->flexioBase->TIMCMP[base->timerIndex[0]]; + uint16_t tmpData = FLEXIO_SPI_DUMMYDATA; + + timerCmp &= 0x00FFU; + /* Configure the values in handle. */ + switch (xfer->flags) + { + case kFLEXIO_SPI_8bitMsb: + dataMode = (8 * 2 - 1U) << 8U; + bytesPerFrame = 1; + direction = kFLEXIO_SPI_MsbFirst; + break; + + case kFLEXIO_SPI_8bitLsb: + dataMode = (8 * 2 - 1U) << 8U; + bytesPerFrame = 1; + direction = kFLEXIO_SPI_LsbFirst; + break; + + case kFLEXIO_SPI_16bitMsb: + dataMode = (16 * 2 - 1U) << 8U; + bytesPerFrame = 2; + direction = kFLEXIO_SPI_MsbFirst; + break; + + case kFLEXIO_SPI_16bitLsb: + dataMode = (16 * 2 - 1U) << 8U; + bytesPerFrame = 2; + direction = kFLEXIO_SPI_LsbFirst; + break; + + default: + dataMode = (8 * 2 - 1U) << 8U; + bytesPerFrame = 1; + direction = kFLEXIO_SPI_MsbFirst; + assert(true); + break; + } + + dataMode |= timerCmp; + + /* Configure transfer size. */ + base->flexioBase->TIMCMP[base->timerIndex[0]] = dataMode; + + while (xfer->dataSize) + { + /* Wait until data transfer complete. */ + while (!(FLEXIO_SPI_GetStatusFlags(base) & kFLEXIO_SPI_TxBufferEmptyFlag)) + { + } + if (xfer->txData != NULL) + { + /* Transmit data and update tx size/buff. */ + if (bytesPerFrame == 1U) + { + tmpData = *(xfer->txData); + xfer->txData++; + } + else + { + tmpData = (uint32_t)(xfer->txData[0]) << 8U; + tmpData += xfer->txData[1]; + xfer->txData += 2U; + } + } + else + { + tmpData = FLEXIO_SPI_DUMMYDATA; + } + + xfer->dataSize -= bytesPerFrame; + + FLEXIO_SPI_WriteData(base, direction, tmpData); + + while (!(FLEXIO_SPI_GetStatusFlags(base) & kFLEXIO_SPI_RxBufferFullFlag)) + { + } + tmpData = FLEXIO_SPI_ReadData(base, direction); + + if (xfer->rxData != NULL) + { + if (bytesPerFrame == 1U) + { + *xfer->rxData = tmpData; + xfer->rxData++; + } + else + { + *((uint16_t *)(xfer->rxData)) = tmpData; + xfer->rxData += 2U; + } + } + } +} + +status_t FLEXIO_SPI_MasterTransferCreateHandle(FLEXIO_SPI_Type *base, + flexio_spi_master_handle_t *handle, + flexio_spi_master_transfer_callback_t callback, + void *userData) +{ + assert(handle); + + IRQn_Type flexio_irqs[] = FLEXIO_IRQS; + + /* Zero the handle. */ + memset(handle, 0, sizeof(*handle)); + + /* Register callback and userData. */ + handle->callback = callback; + handle->userData = userData; + + /* Enable interrupt in NVIC. */ + EnableIRQ(flexio_irqs[0]); + + /* Save the context in global variables to support the double weak mechanism. */ + return FLEXIO_RegisterHandleIRQ(base, handle, FLEXIO_SPI_MasterTransferHandleIRQ); +} + +status_t FLEXIO_SPI_MasterTransferNonBlocking(FLEXIO_SPI_Type *base, + flexio_spi_master_handle_t *handle, + flexio_spi_transfer_t *xfer) +{ + assert(handle); + assert(xfer); + + uint32_t dataMode = 0; + uint16_t timerCmp = base->flexioBase->TIMCMP[base->timerIndex[0]]; + uint16_t tmpData = FLEXIO_SPI_DUMMYDATA; + + timerCmp &= 0x00FFU; + + /* Check if SPI is busy. */ + if (handle->state == kFLEXIO_SPI_Busy) + { + return kStatus_FLEXIO_SPI_Busy; + } + + /* Check if the argument is legal. */ + if ((xfer->txData == NULL) && (xfer->rxData == NULL)) + { + return kStatus_InvalidArgument; + } + + /* Configure the values in handle */ + switch (xfer->flags) + { + case kFLEXIO_SPI_8bitMsb: + dataMode = (8 * 2 - 1U) << 8U; + handle->bytePerFrame = 1U; + handle->direction = kFLEXIO_SPI_MsbFirst; + break; + case kFLEXIO_SPI_8bitLsb: + dataMode = (8 * 2 - 1U) << 8U; + handle->bytePerFrame = 1U; + handle->direction = kFLEXIO_SPI_LsbFirst; + break; + case kFLEXIO_SPI_16bitMsb: + dataMode = (16 * 2 - 1U) << 8U; + handle->bytePerFrame = 2U; + handle->direction = kFLEXIO_SPI_MsbFirst; + break; + case kFLEXIO_SPI_16bitLsb: + dataMode = (16 * 2 - 1U) << 8U; + handle->bytePerFrame = 2U; + handle->direction = kFLEXIO_SPI_LsbFirst; + break; + default: + dataMode = (8 * 2 - 1U) << 8U; + handle->bytePerFrame = 1U; + handle->direction = kFLEXIO_SPI_MsbFirst; + assert(true); + break; + } + + dataMode |= timerCmp; + + /* Configure transfer size. */ + base->flexioBase->TIMCMP[base->timerIndex[0]] = dataMode; + + handle->state = kFLEXIO_SPI_Busy; + handle->txData = xfer->txData; + handle->rxData = xfer->rxData; + handle->rxRemainingBytes = xfer->dataSize; + + /* Save total transfer size. */ + handle->transferSize = xfer->dataSize; + + /* Send first byte of data to trigger the rx interrupt. */ + if (handle->txData != NULL) + { + /* Transmit data and update tx size/buff. */ + if (handle->bytePerFrame == 1U) + { + tmpData = *(handle->txData); + handle->txData++; + } + else + { + tmpData = (uint32_t)(handle->txData[0]) << 8U; + tmpData += handle->txData[1]; + handle->txData += 2U; + } + } + else + { + tmpData = FLEXIO_SPI_DUMMYDATA; + } + + handle->txRemainingBytes = xfer->dataSize - handle->bytePerFrame; + + FLEXIO_SPI_WriteData(base, handle->direction, tmpData); + + /* Enable transmit and receive interrupt to handle rx. */ + FLEXIO_SPI_EnableInterrupts(base, kFLEXIO_SPI_RxFullInterruptEnable); + + return kStatus_Success; +} + +status_t FLEXIO_SPI_MasterTransferGetCount(FLEXIO_SPI_Type *base, flexio_spi_master_handle_t *handle, size_t *count) +{ + assert(handle); + + if (!count) + { + return kStatus_InvalidArgument; + } + + /* Return remaing bytes in different cases. */ + if (handle->rxData) + { + *count = handle->transferSize - handle->rxRemainingBytes; + } + else + { + *count = handle->transferSize - handle->txRemainingBytes; + } + + return kStatus_Success; +} + +void FLEXIO_SPI_MasterTransferAbort(FLEXIO_SPI_Type *base, flexio_spi_master_handle_t *handle) +{ + assert(handle); + + FLEXIO_SPI_DisableInterrupts(base, kFLEXIO_SPI_RxFullInterruptEnable); + FLEXIO_SPI_DisableInterrupts(base, kFLEXIO_SPI_TxEmptyInterruptEnable); + + /* Transfer finished, set the state to idle. */ + handle->state = kFLEXIO_SPI_Idle; + + /* Clear the internal state. */ + handle->rxRemainingBytes = 0; + handle->txRemainingBytes = 0; +} + +void FLEXIO_SPI_MasterTransferHandleIRQ(void *spiType, void *spiHandle) +{ + assert(spiHandle); + + flexio_spi_master_handle_t *handle = (flexio_spi_master_handle_t *)spiHandle; + FLEXIO_SPI_Type *base; + uint32_t status; + + if (handle->state == kFLEXIO_SPI_Idle) + { + return; + } + + base = (FLEXIO_SPI_Type *)spiType; + status = FLEXIO_SPI_GetStatusFlags(base); + + /* Handle rx. */ + if ((status & kFLEXIO_SPI_RxBufferFullFlag) && (handle->rxRemainingBytes)) + { + FLEXIO_SPI_TransferReceiveTransaction(base, handle); + } + + /* Handle tx. */ + if ((status & kFLEXIO_SPI_TxBufferEmptyFlag) && (handle->txRemainingBytes)) + { + FLEXIO_SPI_TransferSendTransaction(base, handle); + } + + /* All the transfer finished. */ + if ((handle->txRemainingBytes == 0U) && (handle->rxRemainingBytes == 0U)) + { + FLEXIO_SPI_MasterTransferAbort(base, handle); + if (handle->callback) + { + (handle->callback)(base, handle, kStatus_FLEXIO_SPI_Idle, handle->userData); + } + } +} + +status_t FLEXIO_SPI_SlaveTransferCreateHandle(FLEXIO_SPI_Type *base, + flexio_spi_slave_handle_t *handle, + flexio_spi_slave_transfer_callback_t callback, + void *userData) +{ + assert(handle); + + IRQn_Type flexio_irqs[] = FLEXIO_IRQS; + + /* Zero the handle. */ + memset(handle, 0, sizeof(*handle)); + + /* Register callback and userData. */ + handle->callback = callback; + handle->userData = userData; + + /* Enable interrupt in NVIC. */ + EnableIRQ(flexio_irqs[0]); + + /* Save the context in global variables to support the double weak mechanism. */ + return FLEXIO_RegisterHandleIRQ(base, handle, FLEXIO_SPI_SlaveTransferHandleIRQ); +} + +status_t FLEXIO_SPI_SlaveTransferNonBlocking(FLEXIO_SPI_Type *base, + flexio_spi_slave_handle_t *handle, + flexio_spi_transfer_t *xfer) +{ + assert(handle); + assert(xfer); + + uint32_t dataMode = 0; + + /* Check if SPI is busy. */ + if (handle->state == kFLEXIO_SPI_Busy) + { + return kStatus_FLEXIO_SPI_Busy; + } + + /* Check if the argument is legal. */ + if ((xfer->txData == NULL) && (xfer->rxData == NULL)) + { + return kStatus_InvalidArgument; + } + + /* Configure the values in handle */ + switch (xfer->flags) + { + case kFLEXIO_SPI_8bitMsb: + dataMode = 8 * 2 - 1U; + handle->bytePerFrame = 1U; + handle->direction = kFLEXIO_SPI_MsbFirst; + break; + case kFLEXIO_SPI_8bitLsb: + dataMode = 8 * 2 - 1U; + handle->bytePerFrame = 1U; + handle->direction = kFLEXIO_SPI_LsbFirst; + break; + case kFLEXIO_SPI_16bitMsb: + dataMode = 16 * 2 - 1U; + handle->bytePerFrame = 2U; + handle->direction = kFLEXIO_SPI_MsbFirst; + break; + case kFLEXIO_SPI_16bitLsb: + dataMode = 16 * 2 - 1U; + handle->bytePerFrame = 2U; + handle->direction = kFLEXIO_SPI_LsbFirst; + break; + default: + dataMode = 8 * 2 - 1U; + handle->bytePerFrame = 1U; + handle->direction = kFLEXIO_SPI_MsbFirst; + assert(true); + break; + } + + /* Configure transfer size. */ + base->flexioBase->TIMCMP[base->timerIndex[0]] = dataMode; + + handle->state = kFLEXIO_SPI_Busy; + handle->txData = xfer->txData; + handle->rxData = xfer->rxData; + handle->txRemainingBytes = xfer->dataSize; + handle->rxRemainingBytes = xfer->dataSize; + + /* Save total transfer size. */ + handle->transferSize = xfer->dataSize; + + /* Enable transmit and receive interrupt to handle tx and rx. */ + FLEXIO_SPI_EnableInterrupts(base, kFLEXIO_SPI_TxEmptyInterruptEnable); + FLEXIO_SPI_EnableInterrupts(base, kFLEXIO_SPI_RxFullInterruptEnable); + + return kStatus_Success; +} + +void FLEXIO_SPI_SlaveTransferHandleIRQ(void *spiType, void *spiHandle) +{ + assert(spiHandle); + + flexio_spi_master_handle_t *handle = (flexio_spi_master_handle_t *)spiHandle; + FLEXIO_SPI_Type *base; + uint32_t status; + + if (handle->state == kFLEXIO_SPI_Idle) + { + return; + } + + base = (FLEXIO_SPI_Type *)spiType; + status = FLEXIO_SPI_GetStatusFlags(base); + + /* Handle tx. */ + if ((status & kFLEXIO_SPI_TxBufferEmptyFlag) && (handle->txRemainingBytes)) + { + FLEXIO_SPI_TransferSendTransaction(base, handle); + } + + /* Handle rx. */ + if ((status & kFLEXIO_SPI_RxBufferFullFlag) && (handle->rxRemainingBytes)) + { + FLEXIO_SPI_TransferReceiveTransaction(base, handle); + } + + /* All the transfer finished. */ + if ((handle->txRemainingBytes == 0U) && (handle->rxRemainingBytes == 0U)) + { + FLEXIO_SPI_SlaveTransferAbort(base, handle); + if (handle->callback) + { + (handle->callback)(base, handle, kStatus_FLEXIO_SPI_Idle, handle->userData); + } + } +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_spi.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_spi.h new file mode 100644 index 00000000000..8bdad286e06 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_spi.h @@ -0,0 +1,707 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _FSL_FLEXIO_SPI_H_ +#define _FSL_FLEXIO_SPI_H_ + +#include "fsl_common.h" +#include "fsl_flexio.h" + +/*! + * @addtogroup flexio_spi + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief FlexIO SPI driver version 2.1.0. */ +#define FSL_FLEXIO_SPI_DRIVER_VERSION (MAKE_VERSION(2, 1, 0)) +/*@}*/ + +/*! @brief FlexIO SPI dummy transfer data, the data is sent while txData is NULL. */ +#define FLEXIO_SPI_DUMMYDATA (0xFFFFU) + +/*! @brief Error codes for the FlexIO SPI driver. */ +enum _flexio_spi_status +{ + kStatus_FLEXIO_SPI_Busy = MAKE_STATUS(kStatusGroup_FLEXIO_SPI, 1), /*!< FlexIO SPI is busy. */ + kStatus_FLEXIO_SPI_Idle = MAKE_STATUS(kStatusGroup_FLEXIO_SPI, 2), /*!< SPI is idle */ + kStatus_FLEXIO_SPI_Error = MAKE_STATUS(kStatusGroup_FLEXIO_SPI, 3), /*!< FlexIO SPI error. */ +}; + +/*! @brief FlexIO SPI clock phase configuration. */ +typedef enum _flexio_spi_clock_phase +{ + kFLEXIO_SPI_ClockPhaseFirstEdge = 0x0U, /*!< First edge on SPSCK occurs at the middle of the first + * cycle of a data transfer. */ + kFLEXIO_SPI_ClockPhaseSecondEdge = 0x1U, /*!< First edge on SPSCK occurs at the start of the + * first cycle of a data transfer. */ +} flexio_spi_clock_phase_t; + +/*! @brief FlexIO SPI data shifter direction options. */ +typedef enum _flexio_spi_shift_direction +{ + kFLEXIO_SPI_MsbFirst = 0, /*!< Data transfers start with most significant bit. */ + kFLEXIO_SPI_LsbFirst = 1, /*!< Data transfers start with least significant bit. */ +} flexio_spi_shift_direction_t; + +/*! @brief FlexIO SPI data length mode options. */ +typedef enum _flexio_spi_data_bitcount_mode +{ + kFLEXIO_SPI_8BitMode = 0x08U, /*!< 8-bit data transmission mode. */ + kFLEXIO_SPI_16BitMode = 0x10U, /*!< 16-bit data transmission mode. */ +} flexio_spi_data_bitcount_mode_t; + +/*! @brief Define FlexIO SPI interrupt mask. */ +enum _flexio_spi_interrupt_enable +{ + kFLEXIO_SPI_TxEmptyInterruptEnable = 0x1U, /*!< Transmit buffer empty interrupt enable. */ + kFLEXIO_SPI_RxFullInterruptEnable = 0x2U, /*!< Receive buffer full interrupt enable. */ +}; + +/*! @brief Define FlexIO SPI status mask. */ +enum _flexio_spi_status_flags +{ + kFLEXIO_SPI_TxBufferEmptyFlag = 0x1U, /*!< Transmit buffer empty flag. */ + kFLEXIO_SPI_RxBufferFullFlag = 0x2U, /*!< Receive buffer full flag. */ +}; + +/*! @brief Define FlexIO SPI DMA mask. */ +enum _flexio_spi_dma_enable +{ + kFLEXIO_SPI_TxDmaEnable = 0x1U, /*!< Tx DMA request source */ + kFLEXIO_SPI_RxDmaEnable = 0x2U, /*!< Rx DMA request source */ + kFLEXIO_SPI_DmaAllEnable = 0x3U, /*!< All DMA request source*/ +}; + +/*! @brief Define FlexIO SPI transfer flags. */ +enum _flexio_spi_transfer_flags +{ + kFLEXIO_SPI_8bitMsb = 0x1U, /*!< FlexIO SPI 8-bit MSB first */ + kFLEXIO_SPI_8bitLsb = 0x2U, /*!< FlexIO SPI 8-bit LSB first */ + kFLEXIO_SPI_16bitMsb = 0x9U, /*!< FlexIO SPI 16-bit MSB first */ + kFLEXIO_SPI_16bitLsb = 0xaU, /*!< FlexIO SPI 16-bit LSB first */ +}; + +/*! @brief Define FlexIO SPI access structure typedef. */ +typedef struct _flexio_spi_type +{ + FLEXIO_Type *flexioBase; /*!< FlexIO base pointer. */ + uint8_t SDOPinIndex; /*!< Pin select for data output. */ + uint8_t SDIPinIndex; /*!< Pin select for data input. */ + uint8_t SCKPinIndex; /*!< Pin select for clock. */ + uint8_t CSnPinIndex; /*!< Pin select for enable. */ + uint8_t shifterIndex[2]; /*!< Shifter index used in FlexIO SPI. */ + uint8_t timerIndex[2]; /*!< Timer index used in FlexIO SPI. */ +} FLEXIO_SPI_Type; + +/*! @brief Define FlexIO SPI master configuration structure. */ +typedef struct _flexio_spi_master_config +{ + bool enableMaster; /*!< Enable/disable FlexIO SPI master after configuration. */ + bool enableInDoze; /*!< Enable/disable FlexIO operation in doze mode. */ + bool enableInDebug; /*!< Enable/disable FlexIO operation in debug mode. */ + bool enableFastAccess; /*!< Enable/disable fast access to FlexIO registers, + fast access requires the FlexIO clock to be at least + twice the frequency of the bus clock. */ + uint32_t baudRate_Bps; /*!< Baud rate in Bps. */ + flexio_spi_clock_phase_t phase; /*!< Clock phase. */ + flexio_spi_data_bitcount_mode_t dataMode; /*!< 8bit or 16bit mode. */ +} flexio_spi_master_config_t; + +/*! @brief Define FlexIO SPI slave configuration structure. */ +typedef struct _flexio_spi_slave_config +{ + bool enableSlave; /*!< Enable/disable FlexIO SPI slave after configuration. */ + bool enableInDoze; /*!< Enable/disable FlexIO operation in doze mode. */ + bool enableInDebug; /*!< Enable/disable FlexIO operation in debug mode. */ + bool enableFastAccess; /*!< Enable/disable fast access to FlexIO registers, + fast access requires the FlexIO clock to be at least + twice the frequency of the bus clock. */ + flexio_spi_clock_phase_t phase; /*!< Clock phase. */ + flexio_spi_data_bitcount_mode_t dataMode; /*!< 8bit or 16bit mode. */ +} flexio_spi_slave_config_t; + +/*! @brief Define FlexIO SPI transfer structure. */ +typedef struct _flexio_spi_transfer +{ + uint8_t *txData; /*!< Send buffer. */ + uint8_t *rxData; /*!< Receive buffer. */ + size_t dataSize; /*!< Transfer bytes. */ + uint8_t flags; /*!< FlexIO SPI control flag, MSB first or LSB first. */ +} flexio_spi_transfer_t; + +/*! @brief typedef for flexio_spi_master_handle_t in advance. */ +typedef struct _flexio_spi_master_handle flexio_spi_master_handle_t; + +/*! @brief Slave handle is the same with master handle. */ +typedef flexio_spi_master_handle_t flexio_spi_slave_handle_t; + +/*! @brief FlexIO SPI master callback for finished transmit */ +typedef void (*flexio_spi_master_transfer_callback_t)(FLEXIO_SPI_Type *base, + flexio_spi_master_handle_t *handle, + status_t status, + void *userData); + +/*! @brief FlexIO SPI slave callback for finished transmit */ +typedef void (*flexio_spi_slave_transfer_callback_t)(FLEXIO_SPI_Type *base, + flexio_spi_slave_handle_t *handle, + status_t status, + void *userData); + +/*! @brief Define FlexIO SPI handle structure. */ +struct _flexio_spi_master_handle +{ + uint8_t *txData; /*!< Transfer buffer. */ + uint8_t *rxData; /*!< Receive buffer. */ + size_t transferSize; /*!< Total bytes to be transferred. */ + volatile size_t txRemainingBytes; /*!< Send data remaining in bytes. */ + volatile size_t rxRemainingBytes; /*!< Receive data remaining in bytes. */ + volatile uint32_t state; /*!< FlexIO SPI internal state. */ + uint8_t bytePerFrame; /*!< SPI mode, 2bytes or 1byte in a frame */ + flexio_spi_shift_direction_t direction; /*!< Shift direction. */ + flexio_spi_master_transfer_callback_t callback; /*!< FlexIO SPI callback. */ + void *userData; /*!< Callback parameter. */ +}; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif /*_cplusplus*/ + +/*! + * @name FlexIO SPI Configuration + * @{ + */ + +/*! + * @brief Ungates the FlexIO clock, resets the FlexIO module and configures the FlexIO SPI master hardware, + * and configures the FlexIO SPI with FlexIO SPI master configuration. The + * configuration structure can be filled by the user, or be set with default values + * by the FLEXIO_SPI_MasterGetDefaultConfig(). + * + * @note FlexIO SPI master only support CPOL = 0, which means clock inactive low. + * + * Example + @code + FLEXIO_SPI_Type spiDev = { + .flexioBase = FLEXIO, + .SDOPinIndex = 0, + .SDIPinIndex = 1, + .SCKPinIndex = 2, + .CSnPinIndex = 3, + .shifterIndex = {0,1}, + .timerIndex = {0,1} + }; + flexio_spi_master_config_t config = { + .enableMaster = true, + .enableInDoze = false, + .enableInDebug = true, + .enableFastAccess = false, + .baudRate_Bps = 500000, + .phase = kFLEXIO_SPI_ClockPhaseFirstEdge, + .direction = kFLEXIO_SPI_MsbFirst, + .dataMode = kFLEXIO_SPI_8BitMode + }; + FLEXIO_SPI_MasterInit(&spiDev, &config, srcClock_Hz); + @endcode + * + * @param base Pointer to the FLEXIO_SPI_Type structure. + * @param masterConfig Pointer to the flexio_spi_master_config_t structure. + * @param srcClock_Hz FlexIO source clock in Hz. +*/ +void FLEXIO_SPI_MasterInit(FLEXIO_SPI_Type *base, flexio_spi_master_config_t *masterConfig, uint32_t srcClock_Hz); + +/*! + * @brief Gates the FlexIO clock. + * + * @param base Pointer to the FLEXIO_SPI_Type. +*/ +void FLEXIO_SPI_MasterDeinit(FLEXIO_SPI_Type *base); + +/*! + * @brief Gets the default configuration to configure the FlexIO SPI master. The configuration + * can be used directly by calling the FLEXIO_SPI_MasterConfigure(). + * Example: + @code + flexio_spi_master_config_t masterConfig; + FLEXIO_SPI_MasterGetDefaultConfig(&masterConfig); + @endcode + * @param masterConfig Pointer to the flexio_spi_master_config_t structure. +*/ +void FLEXIO_SPI_MasterGetDefaultConfig(flexio_spi_master_config_t *masterConfig); + +/*! + * @brief Ungates the FlexIO clock, resets the FlexIO module, configures the FlexIO SPI slave hardware + * configuration, and configures the FlexIO SPI with FlexIO SPI slave configuration. The + * configuration structure can be filled by the user, or be set with default values + * by the FLEXIO_SPI_SlaveGetDefaultConfig(). + * + * @note Only one timer is needed in the FlexIO SPI slave. As a result, the second timer index is ignored. + * FlexIO SPI slave only support CPOL = 0, which means clock inactive low. + * Example + @code + FLEXIO_SPI_Type spiDev = { + .flexioBase = FLEXIO, + .SDOPinIndex = 0, + .SDIPinIndex = 1, + .SCKPinIndex = 2, + .CSnPinIndex = 3, + .shifterIndex = {0,1}, + .timerIndex = {0} + }; + flexio_spi_slave_config_t config = { + .enableSlave = true, + .enableInDoze = false, + .enableInDebug = true, + .enableFastAccess = false, + .phase = kFLEXIO_SPI_ClockPhaseFirstEdge, + .direction = kFLEXIO_SPI_MsbFirst, + .dataMode = kFLEXIO_SPI_8BitMode + }; + FLEXIO_SPI_SlaveInit(&spiDev, &config); + @endcode + * @param base Pointer to the FLEXIO_SPI_Type structure. + * @param slaveConfig Pointer to the flexio_spi_slave_config_t structure. +*/ +void FLEXIO_SPI_SlaveInit(FLEXIO_SPI_Type *base, flexio_spi_slave_config_t *slaveConfig); + +/*! + * @brief Gates the FlexIO clock. + * + * @param base Pointer to the FLEXIO_SPI_Type. +*/ +void FLEXIO_SPI_SlaveDeinit(FLEXIO_SPI_Type *base); + +/*! + * @brief Gets the default configuration to configure the FlexIO SPI slave. The configuration + * can be used directly for calling the FLEXIO_SPI_SlaveConfigure(). + * Example: + @code + flexio_spi_slave_config_t slaveConfig; + FLEXIO_SPI_SlaveGetDefaultConfig(&slaveConfig); + @endcode + * @param slaveConfig Pointer to the flexio_spi_slave_config_t structure. +*/ +void FLEXIO_SPI_SlaveGetDefaultConfig(flexio_spi_slave_config_t *slaveConfig); + +/*@}*/ + +/*! + * @name Status + * @{ + */ + +/*! + * @brief Gets FlexIO SPI status flags. + * + * @param base Pointer to the FLEXIO_SPI_Type structure. + * @return status flag; Use the status flag to AND the following flag mask and get the status. + * @arg kFLEXIO_SPI_TxEmptyFlag + * @arg kFLEXIO_SPI_RxEmptyFlag +*/ + +uint32_t FLEXIO_SPI_GetStatusFlags(FLEXIO_SPI_Type *base); + +/*! + * @brief Clears FlexIO SPI status flags. + * + * @param base Pointer to the FLEXIO_SPI_Type structure. + * @param mask status flag + * The parameter can be any combination of the following values: + * @arg kFLEXIO_SPI_TxEmptyFlag + * @arg kFLEXIO_SPI_RxEmptyFlag +*/ + +void FLEXIO_SPI_ClearStatusFlags(FLEXIO_SPI_Type *base, uint32_t mask); + +/*@}*/ + +/*! + * @name Interrupts + * @{ + */ + +/*! + * @brief Enables the FlexIO SPI interrupt. + * + * This function enables the FlexIO SPI interrupt. + * + * @param base Pointer to the FLEXIO_SPI_Type structure. + * @param mask interrupt source. The parameter can be any combination of the following values: + * @arg kFLEXIO_SPI_RxFullInterruptEnable + * @arg kFLEXIO_SPI_TxEmptyInterruptEnable + */ +void FLEXIO_SPI_EnableInterrupts(FLEXIO_SPI_Type *base, uint32_t mask); + +/*! + * @brief Disables the FlexIO SPI interrupt. + * + * This function disables the FlexIO SPI interrupt. + * + * @param base Pointer to the FLEXIO_SPI_Type structure. + * @param mask interrupt source The parameter can be any combination of the following values: + * @arg kFLEXIO_SPI_RxFullInterruptEnable + * @arg kFLEXIO_SPI_TxEmptyInterruptEnable + */ +void FLEXIO_SPI_DisableInterrupts(FLEXIO_SPI_Type *base, uint32_t mask); + +/*@}*/ + +/*! + * @name DMA Control + * @{ + */ + +/*! + * @brief Enables/disables the FlexIO SPI transmit DMA. This function enables/disables the FlexIO SPI Tx DMA, + * which means that asserting the kFLEXIO_SPI_TxEmptyFlag does/doesn't trigger the DMA request. + * + * @param base Pointer to the FLEXIO_SPI_Type structure. + * @param mask SPI DMA source. + * @param enable True means enable DMA, false means disable DMA. + */ +void FLEXIO_SPI_EnableDMA(FLEXIO_SPI_Type *base, uint32_t mask, bool enable); + +/*! + * @brief Gets the FlexIO SPI transmit data register address for MSB first transfer. + * + * This function returns the SPI data register address, which is mainly used by DMA/eDMA. + * + * @param base Pointer to the FLEXIO_SPI_Type structure. + * @param direction Shift direction of MSB first or LSB first. + * @return FlexIO SPI transmit data register address. + */ +static inline uint32_t FLEXIO_SPI_GetTxDataRegisterAddress(FLEXIO_SPI_Type *base, + flexio_spi_shift_direction_t direction) +{ + if (direction == kFLEXIO_SPI_MsbFirst) + { + return FLEXIO_GetShifterBufferAddress(base->flexioBase, kFLEXIO_ShifterBufferBitSwapped, + base->shifterIndex[0]) + + 3U; + } + else + { + return FLEXIO_GetShifterBufferAddress(base->flexioBase, kFLEXIO_ShifterBuffer, base->shifterIndex[0]); + } +} + +/*! + * @brief Gets the FlexIO SPI receive data register address for the MSB first transfer. + * + * This function returns the SPI data register address, which is mainly used by DMA/eDMA. + * + * @param base Pointer to the FLEXIO_SPI_Type structure. + * @param direction Shift direction of MSB first or LSB first. + * @return FlexIO SPI receive data register address. + */ +static inline uint32_t FLEXIO_SPI_GetRxDataRegisterAddress(FLEXIO_SPI_Type *base, + flexio_spi_shift_direction_t direction) +{ + if (direction == kFLEXIO_SPI_MsbFirst) + { + return FLEXIO_GetShifterBufferAddress(base->flexioBase, kFLEXIO_ShifterBufferBitSwapped, base->shifterIndex[1]); + } + else + { + return FLEXIO_GetShifterBufferAddress(base->flexioBase, kFLEXIO_ShifterBufferByteSwapped, + base->shifterIndex[1]); + } +} + +/*@}*/ + +/*! + * @name Bus Operations + * @{ + */ + +/*! + * @brief Enables/disables the FlexIO SPI module operation. + * + * @param base Pointer to the FLEXIO_SPI_Type. + * @param enable True to enable, false to disable. +*/ +static inline void FLEXIO_SPI_Enable(FLEXIO_SPI_Type *base, bool enable) +{ + if (enable) + { + base->flexioBase->CTRL |= FLEXIO_CTRL_FLEXEN_MASK; + } + else + { + base->flexioBase->CTRL &= ~FLEXIO_CTRL_FLEXEN_MASK; + } +} + +/*! + * @brief Sets baud rate for the FlexIO SPI transfer, which is only used for the master. + * + * @param base Pointer to the FLEXIO_SPI_Type structure. + * @param baudRate_Bps Baud Rate needed in Hz. + * @param srcClockHz SPI source clock frequency in Hz. + */ +void FLEXIO_SPI_MasterSetBaudRate(FLEXIO_SPI_Type *base, uint32_t baudRate_Bps, uint32_t srcClockHz); + +/*! + * @brief Writes one byte of data, which is sent using the MSB method. + * + * @note This is a non-blocking API, which returns directly after the data is put into the + * data register but the data transfer is not finished on the bus. Ensure that + * the TxEmptyFlag is asserted before calling this API. + * + * @param base Pointer to the FLEXIO_SPI_Type structure. + * @param direction Shift direction of MSB first or LSB first. + * @param data 8 bit/16 bit data. + */ +static inline void FLEXIO_SPI_WriteData(FLEXIO_SPI_Type *base, flexio_spi_shift_direction_t direction, uint16_t data) +{ + if (direction == kFLEXIO_SPI_MsbFirst) + { + base->flexioBase->SHIFTBUFBBS[base->shifterIndex[0]] = data; + } + else + { + base->flexioBase->SHIFTBUF[base->shifterIndex[0]] = data; + } +} + +/*! + * @brief Reads 8 bit/16 bit data. + * + * @note This is a non-blocking API, which returns directly after the data is read from the + * data register. Ensure that the RxFullFlag is asserted before calling this API. + * + * @param base Pointer to the FLEXIO_SPI_Type structure. + * @param direction Shift direction of MSB first or LSB first. + * @return 8 bit/16 bit data received. + */ +static inline uint16_t FLEXIO_SPI_ReadData(FLEXIO_SPI_Type *base, flexio_spi_shift_direction_t direction) +{ + if (direction == kFLEXIO_SPI_MsbFirst) + { + return base->flexioBase->SHIFTBUFBIS[base->shifterIndex[1]]; + } + else + { + return base->flexioBase->SHIFTBUFBYS[base->shifterIndex[1]]; + } +} + +/*! + * @brief Sends a buffer of data bytes. + * + * @note This function blocks using the polling method until all bytes have been sent. + * + * @param base Pointer to the FLEXIO_SPI_Type structure. + * @param direction Shift direction of MSB first or LSB first. + * @param buffer The data bytes to send. + * @param size The number of data bytes to send. + */ +void FLEXIO_SPI_WriteBlocking(FLEXIO_SPI_Type *base, + flexio_spi_shift_direction_t direction, + const uint8_t *buffer, + size_t size); + +/*! + * @brief Receives a buffer of bytes. + * + * @note This function blocks using the polling method until all bytes have been received. + * + * @param base Pointer to the FLEXIO_SPI_Type structure. + * @param direction Shift direction of MSB first or LSB first. + * @param buffer The buffer to store the received bytes. + * @param size The number of data bytes to be received. + * @param direction Shift direction of MSB first or LSB first. + */ +void FLEXIO_SPI_ReadBlocking(FLEXIO_SPI_Type *base, + flexio_spi_shift_direction_t direction, + uint8_t *buffer, + size_t size); + +/*! + * @brief Receives a buffer of bytes. + * + * @note This function blocks via polling until all bytes have been received. + * + * @param base pointer to FLEXIO_SPI_Type structure + * @param xfer FlexIO SPI transfer structure, see #flexio_spi_transfer_t. + */ +void FLEXIO_SPI_MasterTransferBlocking(FLEXIO_SPI_Type *base, flexio_spi_transfer_t *xfer); + +/*Transactional APIs*/ + +/*! + * @name Transactional + * @{ + */ + +/*! + * @brief Initializes the FlexIO SPI Master handle, which is used in transactional functions. + * + * @param base Pointer to the FLEXIO_SPI_Type structure. + * @param handle Pointer to the flexio_spi_master_handle_t structure to store the transfer state. + * @param callback The callback function. + * @param userData The parameter of the callback function. + * @retval kStatus_Success Successfully create the handle. + * @retval kStatus_OutOfRange The FlexIO type/handle/ISR table out of range. + */ +status_t FLEXIO_SPI_MasterTransferCreateHandle(FLEXIO_SPI_Type *base, + flexio_spi_master_handle_t *handle, + flexio_spi_master_transfer_callback_t callback, + void *userData); + +/*! + * @brief Master transfer data using IRQ. + * + * This function sends data using IRQ. This is a non-blocking function, which returns + * right away. When all data is sent out/received, the callback function is called. + * + * @param base Pointer to the FLEXIO_SPI_Type structure. + * @param handle Pointer to the flexio_spi_master_handle_t structure to store the transfer state. + * @param xfer FlexIO SPI transfer structure. See #flexio_spi_transfer_t. + * @retval kStatus_Success Successfully start a transfer. + * @retval kStatus_InvalidArgument Input argument is invalid. + * @retval kStatus_FLEXIO_SPI_Busy SPI is not idle, is running another transfer. + */ +status_t FLEXIO_SPI_MasterTransferNonBlocking(FLEXIO_SPI_Type *base, + flexio_spi_master_handle_t *handle, + flexio_spi_transfer_t *xfer); + +/*! + * @brief Aborts the master data transfer, which used IRQ. + * + * @param base Pointer to the FLEXIO_SPI_Type structure. + * @param handle Pointer to the flexio_spi_master_handle_t structure to store the transfer state. + */ +void FLEXIO_SPI_MasterTransferAbort(FLEXIO_SPI_Type *base, flexio_spi_master_handle_t *handle); + +/*! + * @brief Gets the data transfer status which used IRQ. + * + * @param base Pointer to the FLEXIO_SPI_Type structure. + * @param handle Pointer to the flexio_spi_master_handle_t structure to store the transfer state. + * @param count Number of bytes transferred so far by the non-blocking transaction. + * @retval kStatus_InvalidArgument count is Invalid. + * @retval kStatus_Success Successfully return the count. + */ +status_t FLEXIO_SPI_MasterTransferGetCount(FLEXIO_SPI_Type *base, flexio_spi_master_handle_t *handle, size_t *count); + +/*! + * @brief FlexIO SPI master IRQ handler function. + * + * @param spiType Pointer to the FLEXIO_SPI_Type structure. + * @param spiHandle Pointer to the flexio_spi_master_handle_t structure to store the transfer state. + */ +void FLEXIO_SPI_MasterTransferHandleIRQ(void *spiType, void *spiHandle); + +/*! + * @brief Initializes the FlexIO SPI Slave handle, which is used in transactional functions. + * + * @param base Pointer to the FLEXIO_SPI_Type structure. + * @param handle Pointer to the flexio_spi_slave_handle_t structure to store the transfer state. + * @param callback The callback function. + * @param userData The parameter of the callback function. + * @retval kStatus_Success Successfully create the handle. + * @retval kStatus_OutOfRange The FlexIO type/handle/ISR table out of range. + */ +status_t FLEXIO_SPI_SlaveTransferCreateHandle(FLEXIO_SPI_Type *base, + flexio_spi_slave_handle_t *handle, + flexio_spi_slave_transfer_callback_t callback, + void *userData); + +/*! + * @brief Slave transfer data using IRQ. + * + * This function sends data using IRQ. This is a non-blocking function, which returns + * right away. When all data is sent out/received, the callback function is called. + * @param handle Pointer to the flexio_spi_slave_handle_t structure to store the transfer state. + * + * @param base Pointer to the FLEXIO_SPI_Type structure. + * @param xfer FlexIO SPI transfer structure. See #flexio_spi_transfer_t. + * @retval kStatus_Success Successfully start a transfer. + * @retval kStatus_InvalidArgument Input argument is invalid. + * @retval kStatus_FLEXIO_SPI_Busy SPI is not idle; it is running another transfer. + */ +status_t FLEXIO_SPI_SlaveTransferNonBlocking(FLEXIO_SPI_Type *base, + flexio_spi_slave_handle_t *handle, + flexio_spi_transfer_t *xfer); + +/*! + * @brief Aborts the slave data transfer which used IRQ, share same API with master. + * + * @param base Pointer to the FLEXIO_SPI_Type structure. + * @param handle Pointer to the flexio_spi_slave_handle_t structure to store the transfer state. + */ +static inline void FLEXIO_SPI_SlaveTransferAbort(FLEXIO_SPI_Type *base, flexio_spi_slave_handle_t *handle) +{ + FLEXIO_SPI_MasterTransferAbort(base, handle); +} +/*! + * @brief Gets the data transfer status which used IRQ, share same API with master. + * + * @param base Pointer to the FLEXIO_SPI_Type structure. + * @param handle Pointer to the flexio_spi_slave_handle_t structure to store the transfer state. + * @param count Number of bytes transferred so far by the non-blocking transaction. + * @retval kStatus_InvalidArgument count is Invalid. + * @retval kStatus_Success Successfully return the count. + */ +static inline status_t FLEXIO_SPI_SlaveTransferGetCount(FLEXIO_SPI_Type *base, + flexio_spi_slave_handle_t *handle, + size_t *count) +{ + return FLEXIO_SPI_MasterTransferGetCount(base, handle, count); +} + +/*! + * @brief FlexIO SPI slave IRQ handler function. + * + * @param spiType Pointer to the FLEXIO_SPI_Type structure. + * @param spiHandle Pointer to the flexio_spi_slave_handle_t structure to store the transfer state. + */ +void FLEXIO_SPI_SlaveTransferHandleIRQ(void *spiType, void *spiHandle); + +/*@}*/ + +#if defined(__cplusplus) +} +#endif /*_cplusplus*/ +/*@}*/ + +#endif /*_FSL_FLEXIO_SPI_H_*/ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_spi_edma.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_spi_edma.c new file mode 100644 index 00000000000..f6f69c9ed88 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_spi_edma.c @@ -0,0 +1,418 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_flexio_spi_edma.h" + +/******************************************************************************* + * Definitons + ******************************************************************************/ +/*base, kFLEXIO_SPI_TxDmaEnable, false); + + /* change the state */ + spiPrivateHandle->handle->txInProgress = false; + + /* All finished, call the callback */ + if ((spiPrivateHandle->handle->txInProgress == false) && (spiPrivateHandle->handle->rxInProgress == false)) + { + if (spiPrivateHandle->handle->callback) + { + (spiPrivateHandle->handle->callback)(spiPrivateHandle->base, spiPrivateHandle->handle, kStatus_Success, + spiPrivateHandle->handle->userData); + } + } + } +} + +static void FLEXIO_SPI_RxEDMACallback(edma_handle_t *handle, void *param, bool transferDone, uint32_t tcds) +{ + tcds = tcds; + flexio_spi_master_edma_private_handle_t *spiPrivateHandle = (flexio_spi_master_edma_private_handle_t *)param; + + if (transferDone) + { + /* Disable Rx dma */ + FLEXIO_SPI_EnableDMA(spiPrivateHandle->base, kFLEXIO_SPI_RxDmaEnable, false); + + /* change the state */ + spiPrivateHandle->handle->rxInProgress = false; + + /* All finished, call the callback */ + if ((spiPrivateHandle->handle->txInProgress == false) && (spiPrivateHandle->handle->rxInProgress == false)) + { + if (spiPrivateHandle->handle->callback) + { + (spiPrivateHandle->handle->callback)(spiPrivateHandle->base, spiPrivateHandle->handle, kStatus_Success, + spiPrivateHandle->handle->userData); + } + } + } +} + +static void FLEXIO_SPI_EDMAConfig(FLEXIO_SPI_Type *base, + flexio_spi_master_edma_handle_t *handle, + flexio_spi_transfer_t *xfer) +{ + edma_transfer_config_t xferConfig; + flexio_spi_shift_direction_t direction; + uint8_t bytesPerFrame; + + /* Configure the values in handle. */ + switch (xfer->flags) + { + case kFLEXIO_SPI_8bitMsb: + bytesPerFrame = 1; + direction = kFLEXIO_SPI_MsbFirst; + break; + case kFLEXIO_SPI_8bitLsb: + bytesPerFrame = 1; + direction = kFLEXIO_SPI_LsbFirst; + break; + case kFLEXIO_SPI_16bitMsb: + bytesPerFrame = 2; + direction = kFLEXIO_SPI_MsbFirst; + break; + case kFLEXIO_SPI_16bitLsb: + bytesPerFrame = 2; + direction = kFLEXIO_SPI_LsbFirst; + break; + default: + bytesPerFrame = 1U; + direction = kFLEXIO_SPI_MsbFirst; + assert(true); + break; + } + + /* Save total transfer size. */ + handle->transferSize = xfer->dataSize; + + /* Configure tx transfer EDMA. */ + xferConfig.destAddr = FLEXIO_SPI_GetTxDataRegisterAddress(base, direction); + xferConfig.destOffset = 0; + if (bytesPerFrame == 1U) + { + xferConfig.srcTransferSize = kEDMA_TransferSize1Bytes; + xferConfig.destTransferSize = kEDMA_TransferSize1Bytes; + xferConfig.minorLoopBytes = 1; + } + else + { + if (direction == kFLEXIO_SPI_MsbFirst) + { + xferConfig.destAddr -= 1U; + } + xferConfig.srcTransferSize = kEDMA_TransferSize2Bytes; + xferConfig.destTransferSize = kEDMA_TransferSize2Bytes; + xferConfig.minorLoopBytes = 2; + } + + /* Configure DMA channel. */ + if (xfer->txData) + { + xferConfig.srcOffset = 1; + xferConfig.srcAddr = (uint32_t)(xfer->txData); + } + else + { + /* Disable the source increasement and source set to dummyData. */ + xferConfig.srcOffset = 0; + xferConfig.srcAddr = (uint32_t)(&s_dummyData); + } + + xferConfig.majorLoopCounts = (xfer->dataSize / xferConfig.minorLoopBytes); + + if (handle->txHandle) + { + EDMA_SubmitTransfer(handle->txHandle, &xferConfig); + } + + /* Configure tx transfer EDMA. */ + if (xfer->rxData) + { + xferConfig.srcAddr = FLEXIO_SPI_GetRxDataRegisterAddress(base, direction); + xferConfig.srcOffset = 0; + xferConfig.destAddr = (uint32_t)(xfer->rxData); + xferConfig.destOffset = 1; + EDMA_SubmitTransfer(handle->rxHandle, &xferConfig); + handle->rxInProgress = true; + FLEXIO_SPI_EnableDMA(base, kFLEXIO_SPI_RxDmaEnable, true); + EDMA_StartTransfer(handle->rxHandle); + } + + /* Always start Tx transfer. */ + if (handle->txHandle) + { + handle->txInProgress = true; + FLEXIO_SPI_EnableDMA(base, kFLEXIO_SPI_TxDmaEnable, true); + EDMA_StartTransfer(handle->txHandle); + } +} + +status_t FLEXIO_SPI_MasterTransferCreateHandleEDMA(FLEXIO_SPI_Type *base, + flexio_spi_master_edma_handle_t *handle, + flexio_spi_master_edma_transfer_callback_t callback, + void *userData, + edma_handle_t *txHandle, + edma_handle_t *rxHandle) +{ + assert(handle); + + uint8_t index = 0; + + /* Find the an empty handle pointer to store the handle. */ + for (index = 0; index < FLEXIO_SPI_HANDLE_COUNT; index++) + { + if (s_edmaPrivateHandle[index].base == NULL) + { + s_edmaPrivateHandle[index].base = base; + s_edmaPrivateHandle[index].handle = handle; + break; + } + } + + if (index == FLEXIO_SPI_HANDLE_COUNT) + { + return kStatus_OutOfRange; + } + + /* Set spi base to handle. */ + handle->txHandle = txHandle; + handle->rxHandle = rxHandle; + + /* Register callback and userData. */ + handle->callback = callback; + handle->userData = userData; + + /* Set SPI state to idle. */ + handle->txInProgress = false; + handle->rxInProgress = false; + + /* Install callback for Tx/Rx dma channel. */ + if (handle->txHandle) + { + EDMA_SetCallback(handle->txHandle, FLEXIO_SPI_TxEDMACallback, &s_edmaPrivateHandle[index]); + } + if (handle->rxHandle) + { + EDMA_SetCallback(handle->rxHandle, FLEXIO_SPI_RxEDMACallback, &s_edmaPrivateHandle[index]); + } + + return kStatus_Success; +} + +status_t FLEXIO_SPI_MasterTransferEDMA(FLEXIO_SPI_Type *base, + flexio_spi_master_edma_handle_t *handle, + flexio_spi_transfer_t *xfer) +{ + assert(handle); + assert(xfer); + + uint32_t dataMode = 0; + uint16_t timerCmp = base->flexioBase->TIMCMP[base->timerIndex[0]]; + + timerCmp &= 0x00FFU; + + /* Check if the device is busy. */ + if ((handle->txInProgress) || (handle->rxInProgress)) + { + return kStatus_FLEXIO_SPI_Busy; + } + + /* Check if input parameter invalid. */ + if (((xfer->txData == NULL) && (xfer->rxData == NULL)) || (xfer->dataSize == 0U)) + { + return kStatus_InvalidArgument; + } + + /* configure data mode. */ + if ((xfer->flags == kFLEXIO_SPI_8bitMsb) || (xfer->flags == kFLEXIO_SPI_8bitLsb)) + { + dataMode = (8 * 2 - 1U) << 8U; + } + else if ((xfer->flags == kFLEXIO_SPI_16bitMsb) || (xfer->flags == kFLEXIO_SPI_16bitLsb)) + { + dataMode = (16 * 2 - 1U) << 8U; + } + else + { + dataMode = 8 * 2 - 1U; + } + + dataMode |= timerCmp; + + base->flexioBase->TIMCMP[base->timerIndex[0]] = dataMode; + + FLEXIO_SPI_EDMAConfig(base, handle, xfer); + + return kStatus_Success; +} + +status_t FLEXIO_SPI_MasterTransferGetCountEDMA(FLEXIO_SPI_Type *base, + flexio_spi_master_edma_handle_t *handle, + size_t *count) +{ + assert(handle); + + if (!count) + { + return kStatus_InvalidArgument; + } + + if (handle->rxInProgress) + { + *count = (handle->transferSize - EDMA_GetRemainingBytes(handle->rxHandle->base, handle->rxHandle->channel)); + } + else + { + *count = (handle->transferSize - EDMA_GetRemainingBytes(handle->txHandle->base, handle->txHandle->channel)); + } + + return kStatus_Success; +} + +void FLEXIO_SPI_MasterTransferAbortEDMA(FLEXIO_SPI_Type *base, flexio_spi_master_edma_handle_t *handle) +{ + assert(handle); + + /* Disable dma. */ + EDMA_StopTransfer(handle->txHandle); + EDMA_StopTransfer(handle->rxHandle); + + /* Disable DMA enable bit. */ + FLEXIO_SPI_EnableDMA(base, kFLEXIO_SPI_DmaAllEnable, false); + + /* Set the handle state. */ + handle->txInProgress = false; + handle->rxInProgress = false; +} + +status_t FLEXIO_SPI_SlaveTransferEDMA(FLEXIO_SPI_Type *base, + flexio_spi_slave_edma_handle_t *handle, + flexio_spi_transfer_t *xfer) +{ + assert(handle); + assert(xfer); + + uint32_t dataMode = 0; + + /* Check if the device is busy. */ + if ((handle->txInProgress) || (handle->rxInProgress)) + { + return kStatus_FLEXIO_SPI_Busy; + } + + /* Check if input parameter invalid. */ + if (((xfer->txData == NULL) && (xfer->rxData == NULL)) || (xfer->dataSize == 0U)) + { + return kStatus_InvalidArgument; + } + + /* configure data mode. */ + if ((xfer->flags == kFLEXIO_SPI_8bitMsb) || (xfer->flags == kFLEXIO_SPI_8bitLsb)) + { + dataMode = 8 * 2 - 1U; + } + else if ((xfer->flags == kFLEXIO_SPI_16bitMsb) || (xfer->flags == kFLEXIO_SPI_16bitLsb)) + { + dataMode = 16 * 2 - 1U; + } + else + { + dataMode = 8 * 2 - 1U; + } + + base->flexioBase->TIMCMP[base->timerIndex[0]] = dataMode; + + FLEXIO_SPI_EDMAConfig(base, handle, xfer); + + return kStatus_Success; +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_spi_edma.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_spi_edma.h new file mode 100644 index 00000000000..4b942e8cc82 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_spi_edma.h @@ -0,0 +1,222 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FSL_FLEXIO_SPI_EDMA_H_ +#define _FSL_FLEXIO_SPI_EDMA_H_ + +#include "fsl_flexio_spi.h" +#include "fsl_edma.h" + +/*! + * @addtogroup flexio_edma_spi + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @brief typedef for flexio_spi_master_edma_handle_t in advance. */ +typedef struct _flexio_spi_master_edma_handle flexio_spi_master_edma_handle_t; + +/*! @brief Slave handle is the same with master handle. */ +typedef flexio_spi_master_edma_handle_t flexio_spi_slave_edma_handle_t; + +/*! @brief FlexIO SPI master callback for finished transmit */ +typedef void (*flexio_spi_master_edma_transfer_callback_t)(FLEXIO_SPI_Type *base, + flexio_spi_master_edma_handle_t *handle, + status_t status, + void *userData); + +/*! @brief FlexIO SPI slave callback for finished transmit */ +typedef void (*flexio_spi_slave_edma_transfer_callback_t)(FLEXIO_SPI_Type *base, + flexio_spi_slave_edma_handle_t *handle, + status_t status, + void *userData); + +/*! @brief FlexIO SPI eDMA transfer handle, users should not touch the content of the handle.*/ +struct _flexio_spi_master_edma_handle +{ + size_t transferSize; /*!< Total bytes to be transferred. */ + bool txInProgress; /*!< Send transfer in progress */ + bool rxInProgress; /*!< Receive transfer in progress */ + edma_handle_t *txHandle; /*!< DMA handler for SPI send */ + edma_handle_t *rxHandle; /*!< DMA handler for SPI receive */ + flexio_spi_master_edma_transfer_callback_t callback; /*!< Callback for SPI DMA transfer */ + void *userData; /*!< User Data for SPI DMA callback */ +}; + +/******************************************************************************* + * APIs + ******************************************************************************/ +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @name eDMA Transactional + * @{ + */ + +/*! + * @brief Initializes the FLEXO SPI master eDMA handle. + * + * This function initializes the FLEXO SPI master eDMA handle which can be used for other FLEXO SPI master transactional + * APIs. + * For a specified FLEXO SPI instance, call this API once to get the initialized handle. + * + * @param base pointer to FLEXIO_SPI_Type structure. + * @param handle pointer to flexio_spi_master_edma_handle_t structure to store the transfer state. + * @param callback SPI callback, NULL means no callback. + * @param userData callback function parameter. + * @param txHandle User requested eDMA handle for FlexIO SPI RX eDMA transfer. + * @param rxHandle User requested eDMA handle for FlexIO SPI TX eDMA transfer. + * @retval kStatus_Success Successfully create the handle. + * @retval kStatus_OutOfRange The FlexIO SPI eDMA type/handle table out of range. + */ +status_t FLEXIO_SPI_MasterTransferCreateHandleEDMA(FLEXIO_SPI_Type *base, + flexio_spi_master_edma_handle_t *handle, + flexio_spi_master_edma_transfer_callback_t callback, + void *userData, + edma_handle_t *txHandle, + edma_handle_t *rxHandle); + +/*! + * @brief Performs a non-blocking FlexIO SPI transfer using eDMA. + * + * @note This interface returns immediately after transfer initiates. Call + * FLEXIO_SPI_MasterGetTransferCountEDMA to poll the transfer status to check + * whether FlexIO SPI transfer finished. + * + * @param base pointer to FLEXIO_SPI_Type structure. + * @param handle pointer to flexio_spi_master_edma_handle_t structure to store the transfer state. + * @param xfer Pointer to FlexIO SPI transfer structure. + * @retval kStatus_Success Successfully start a transfer. + * @retval kStatus_InvalidArgument Input argument is invalid. + * @retval kStatus_FLEXIO_SPI_Busy FlexIO SPI is not idle, is running another transfer. + */ +status_t FLEXIO_SPI_MasterTransferEDMA(FLEXIO_SPI_Type *base, + flexio_spi_master_edma_handle_t *handle, + flexio_spi_transfer_t *xfer); + +/*! + * @brief Aborts a FlexIO SPI transfer using eDMA. + * + * @param base pointer to FLEXIO_SPI_Type structure. + * @param handle FlexIO SPI eDMA handle pointer. + */ +void FLEXIO_SPI_MasterTransferAbortEDMA(FLEXIO_SPI_Type *base, flexio_spi_master_edma_handle_t *handle); + +/*! + * @brief Gets the remaining bytes for FlexIO SPI eDMA transfer. + * + * @param base pointer to FLEXIO_SPI_Type structure. + * @param handle FlexIO SPI eDMA handle pointer. + * @param count Number of bytes transferred so far by the non-blocking transaction. + */ +status_t FLEXIO_SPI_MasterTransferGetCountEDMA(FLEXIO_SPI_Type *base, + flexio_spi_master_edma_handle_t *handle, + size_t *count); + +/*! + * @brief Initializes the FlexIO SPI slave eDMA handle. + * + * This function initializes the FlexIO SPI slave eDMA handle. + * + * @param base pointer to FLEXIO_SPI_Type structure. + * @param handle pointer to flexio_spi_slave_edma_handle_t structure to store the transfer state. + * @param callback SPI callback, NULL means no callback. + * @param userData callback function parameter. + * @param txHandle User requested eDMA handle for FlexIO SPI TX eDMA transfer. + * @param rxHandle User requested eDMA handle for FlexIO SPI RX eDMA transfer. + */ +static inline void FLEXIO_SPI_SlaveTransferCreateHandleEDMA(FLEXIO_SPI_Type *base, + flexio_spi_slave_edma_handle_t *handle, + flexio_spi_slave_edma_transfer_callback_t callback, + void *userData, + edma_handle_t *txHandle, + edma_handle_t *rxHandle) +{ + FLEXIO_SPI_MasterTransferCreateHandleEDMA(base, handle, callback, userData, txHandle, rxHandle); +} + +/*! + * @brief Performs a non-blocking FlexIO SPI transfer using eDMA. + * + * @note This interface returns immediately after transfer initiates. Call + * FLEXIO_SPI_SlaveGetTransferCountEDMA to poll the transfer status to + * check whether FlexIO SPI transfer finished. + * + * @param base pointer to FLEXIO_SPI_Type structure. + * @param handle pointer to flexio_spi_slave_edma_handle_t structure to store the transfer state. + * @param xfer Pointer to FlexIO SPI transfer structure. + * @retval kStatus_Success Successfully start a transfer. + * @retval kStatus_InvalidArgument Input argument is invalid. + * @retval kStatus_FLEXIO_SPI_Busy FlexIO SPI is not idle, is running another transfer. + */ +status_t FLEXIO_SPI_SlaveTransferEDMA(FLEXIO_SPI_Type *base, + flexio_spi_slave_edma_handle_t *handle, + flexio_spi_transfer_t *xfer); + +/*! + * @brief Aborts a FlexIO SPI transfer using eDMA. + * + * @param base pointer to FLEXIO_SPI_Type structure. + * @param handle pointer to flexio_spi_slave_edma_handle_t structure to store the transfer state. + */ +static inline void FLEXIO_SPI_SlaveTransferAbortEDMA(FLEXIO_SPI_Type *base, flexio_spi_slave_edma_handle_t *handle) +{ + FLEXIO_SPI_MasterTransferAbortEDMA(base, handle); +} + +/*! + * @brief Gets the remaining bytes to be transferred for FlexIO SPI eDMA. + * + * @param base pointer to FLEXIO_SPI_Type structure. + * @param handle FlexIO SPI eDMA handle pointer. + * @param count Number of bytes transferred so far by the non-blocking transaction. + */ +static inline status_t FLEXIO_SPI_SlaveTransferGetCountEDMA(FLEXIO_SPI_Type *base, + flexio_spi_slave_edma_handle_t *handle, + size_t *count) +{ + return FLEXIO_SPI_MasterTransferGetCountEDMA(base, handle, count); +} + +/*! @} */ + +#if defined(__cplusplus) +} +#endif + +/*! + * @} + */ +#endif diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_uart.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_uart.c new file mode 100644 index 00000000000..92349ea5a5f --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_uart.c @@ -0,0 +1,690 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_flexio_uart.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*rxRingBufferTail > handle->rxRingBufferHead) + { + size = (size_t)(handle->rxRingBufferHead + handle->rxRingBufferSize - handle->rxRingBufferTail); + } + else + { + size = (size_t)(handle->rxRingBufferHead - handle->rxRingBufferTail); + } + + return size; +} + +static bool FLEXIO_UART_TransferIsRxRingBufferFull(flexio_uart_handle_t *handle) +{ + bool full; + + if (FLEXIO_UART_TransferGetRxRingBufferLength(handle) == (handle->rxRingBufferSize - 1U)) + { + full = true; + } + else + { + full = false; + } + + return full; +} + +void FLEXIO_UART_Init(FLEXIO_UART_Type *base, const flexio_uart_config_t *userConfig, uint32_t srcClock_Hz) +{ + assert(base && userConfig); + + flexio_shifter_config_t shifterConfig; + flexio_timer_config_t timerConfig; + uint32_t ctrlReg = 0; + uint16_t timerDiv = 0; + uint16_t timerCmp = 0; + + /* Clear the shifterConfig & timerConfig struct. */ + memset(&shifterConfig, 0, sizeof(shifterConfig)); + memset(&timerConfig, 0, sizeof(timerConfig)); + + /* Ungate flexio clock. */ + CLOCK_EnableClock(kCLOCK_Flexio0); + + /* Reset FLEXIO before configuration. */ + FLEXIO_Reset(base->flexioBase); + + /* Configure FLEXIO UART */ + ctrlReg = base->flexioBase->CTRL; + ctrlReg &= ~(FLEXIO_CTRL_DOZEN_MASK | FLEXIO_CTRL_DBGE_MASK | FLEXIO_CTRL_FASTACC_MASK | FLEXIO_CTRL_FLEXEN_MASK); + ctrlReg |= (FLEXIO_CTRL_DOZEN(userConfig->enableInDoze) | FLEXIO_CTRL_DBGE(userConfig->enableInDebug) | + FLEXIO_CTRL_FASTACC(userConfig->enableFastAccess) | FLEXIO_CTRL_FLEXEN(userConfig->enableUart)); + + base->flexioBase->CTRL = ctrlReg; + + /* Do hardware configuration. */ + /* 1. Configure the shifter 0 for tx. */ + shifterConfig.timerSelect = base->timerIndex[0]; + shifterConfig.timerPolarity = kFLEXIO_ShifterTimerPolarityOnPositive; + shifterConfig.pinConfig = kFLEXIO_PinConfigOutput; + shifterConfig.pinSelect = base->TxPinIndex; + shifterConfig.pinPolarity = kFLEXIO_PinActiveHigh; + shifterConfig.shifterMode = kFLEXIO_ShifterModeTransmit; + shifterConfig.inputSource = kFLEXIO_ShifterInputFromPin; + shifterConfig.shifterStop = kFLEXIO_ShifterStopBitHigh; + shifterConfig.shifterStart = kFLEXIO_ShifterStartBitLow; + + FLEXIO_SetShifterConfig(base->flexioBase, base->shifterIndex[0], &shifterConfig); + + /*2. Configure the timer 0 for tx. */ + timerConfig.triggerSelect = FLEXIO_TIMER_TRIGGER_SEL_SHIFTnSTAT(base->shifterIndex[0]); + timerConfig.triggerPolarity = kFLEXIO_TimerTriggerPolarityActiveLow; + timerConfig.triggerSource = kFLEXIO_TimerTriggerSourceInternal; + timerConfig.pinConfig = kFLEXIO_PinConfigOutputDisabled; + timerConfig.pinSelect = base->TxPinIndex; + timerConfig.pinPolarity = kFLEXIO_PinActiveHigh; + timerConfig.timerMode = kFLEXIO_TimerModeDual8BitBaudBit; + timerConfig.timerOutput = kFLEXIO_TimerOutputOneNotAffectedByReset; + timerConfig.timerDecrement = kFLEXIO_TimerDecSrcOnFlexIOClockShiftTimerOutput; + timerConfig.timerReset = kFLEXIO_TimerResetNever; + timerConfig.timerDisable = kFLEXIO_TimerDisableOnTimerCompare; + timerConfig.timerEnable = kFLEXIO_TimerEnableOnTriggerHigh; + timerConfig.timerStop = kFLEXIO_TimerStopBitEnableOnTimerDisable; + timerConfig.timerStart = kFLEXIO_TimerStartBitEnabled; + + timerDiv = srcClock_Hz / userConfig->baudRate_Bps; + timerDiv = timerDiv / 2 - 1; + + timerCmp = ((uint32_t)(userConfig->bitCountPerChar * 2 - 1)) << 8U; + timerCmp |= timerDiv; + + timerConfig.timerCompare = timerCmp; + + FLEXIO_SetTimerConfig(base->flexioBase, base->timerIndex[0], &timerConfig); + + /* 3. Configure the shifter 1 for rx. */ + shifterConfig.timerSelect = base->timerIndex[1]; + shifterConfig.timerPolarity = kFLEXIO_ShifterTimerPolarityOnNegitive; + shifterConfig.pinConfig = kFLEXIO_PinConfigOutputDisabled; + shifterConfig.pinSelect = base->RxPinIndex; + shifterConfig.pinPolarity = kFLEXIO_PinActiveHigh; + shifterConfig.shifterMode = kFLEXIO_ShifterModeReceive; + shifterConfig.inputSource = kFLEXIO_ShifterInputFromPin; + shifterConfig.shifterStop = kFLEXIO_ShifterStopBitHigh; + shifterConfig.shifterStart = kFLEXIO_ShifterStartBitLow; + + FLEXIO_SetShifterConfig(base->flexioBase, base->shifterIndex[1], &shifterConfig); + + /* 4. Configure the timer 1 for rx. */ + timerConfig.triggerSelect = FLEXIO_TIMER_TRIGGER_SEL_PININPUT(base->RxPinIndex); + timerConfig.triggerPolarity = kFLEXIO_TimerTriggerPolarityActiveHigh; + timerConfig.triggerSource = kFLEXIO_TimerTriggerSourceExternal; + timerConfig.pinConfig = kFLEXIO_PinConfigOutputDisabled; + timerConfig.pinSelect = base->RxPinIndex; + timerConfig.pinPolarity = kFLEXIO_PinActiveLow; + timerConfig.timerMode = kFLEXIO_TimerModeDual8BitBaudBit; + timerConfig.timerOutput = kFLEXIO_TimerOutputOneAffectedByReset; + timerConfig.timerDecrement = kFLEXIO_TimerDecSrcOnFlexIOClockShiftTimerOutput; + timerConfig.timerReset = kFLEXIO_TimerResetOnTimerPinRisingEdge; + timerConfig.timerDisable = kFLEXIO_TimerDisableOnTimerCompare; + timerConfig.timerEnable = kFLEXIO_TimerEnableOnPinRisingEdge; + timerConfig.timerStop = kFLEXIO_TimerStopBitEnableOnTimerDisable; + timerConfig.timerStart = kFLEXIO_TimerStartBitEnabled; + + timerConfig.timerCompare = timerCmp; + + FLEXIO_SetTimerConfig(base->flexioBase, base->timerIndex[1], &timerConfig); +} + +void FLEXIO_UART_Deinit(FLEXIO_UART_Type *base) +{ + /* Disable FLEXIO UART module. */ + FLEXIO_UART_Enable(base, false); + + /* Gate flexio clock. */ + CLOCK_DisableClock(kCLOCK_Flexio0); +} + +void FLEXIO_UART_GetDefaultConfig(flexio_uart_config_t *userConfig) +{ + assert(userConfig); + + userConfig->enableUart = true; + userConfig->enableInDoze = false; + userConfig->enableInDebug = true; + userConfig->enableFastAccess = false; + /* Default baud rate 115200. */ + userConfig->baudRate_Bps = 115200U; + /* Default bit count at 8. */ + userConfig->bitCountPerChar = kFLEXIO_UART_8BitsPerChar; +} + +void FLEXIO_UART_EnableInterrupts(FLEXIO_UART_Type *base, uint32_t mask) +{ + if (mask & kFLEXIO_UART_TxDataRegEmptyInterruptEnable) + { + FLEXIO_EnableShifterStatusInterrupts(base->flexioBase, 1U << base->shifterIndex[0]); + } + if (mask & kFLEXIO_UART_RxDataRegFullInterruptEnable) + { + FLEXIO_EnableShifterStatusInterrupts(base->flexioBase, 1U << base->shifterIndex[1]); + } +} + +void FLEXIO_UART_DisableInterrupts(FLEXIO_UART_Type *base, uint32_t mask) +{ + if (mask & kFLEXIO_UART_TxDataRegEmptyInterruptEnable) + { + FLEXIO_DisableShifterStatusInterrupts(base->flexioBase, 1U << base->shifterIndex[0]); + } + if (mask & kFLEXIO_UART_RxDataRegFullInterruptEnable) + { + FLEXIO_DisableShifterStatusInterrupts(base->flexioBase, 1U << base->shifterIndex[1]); + } +} + +uint32_t FLEXIO_UART_GetStatusFlags(FLEXIO_UART_Type *base) +{ + uint32_t status = 0; + status = + ((FLEXIO_GetShifterStatusFlags(base->flexioBase) & (1U << base->shifterIndex[0])) >> base->shifterIndex[0]); + status |= + (((FLEXIO_GetShifterStatusFlags(base->flexioBase) & (1U << base->shifterIndex[1])) >> (base->shifterIndex[1])) + << 1U); + status |= + (((FLEXIO_GetShifterErrorFlags(base->flexioBase) & (1U << base->shifterIndex[1])) >> (base->shifterIndex[1])) + << 2U); + return status; +} + +void FLEXIO_UART_ClearStatusFlags(FLEXIO_UART_Type *base, uint32_t mask) +{ + if (mask & kFLEXIO_UART_TxDataRegEmptyFlag) + { + FLEXIO_ClearShifterStatusFlags(base->flexioBase, 1U << base->shifterIndex[0]); + } + if (mask & kFLEXIO_UART_RxDataRegFullFlag) + { + FLEXIO_ClearShifterStatusFlags(base->flexioBase, 1U << base->shifterIndex[1]); + } + if (mask & kFLEXIO_UART_RxOverRunFlag) + { + FLEXIO_ClearShifterErrorFlags(base->flexioBase, 1U << base->shifterIndex[1]); + } +} + +void FLEXIO_UART_WriteBlocking(FLEXIO_UART_Type *base, const uint8_t *txData, size_t txSize) +{ + assert(txData); + assert(txSize); + + while (txSize--) + { + /* Wait until data transfer complete. */ + while (!(FLEXIO_GetShifterStatusFlags(base->flexioBase) & (1U << base->shifterIndex[0]))) + { + } + + base->flexioBase->SHIFTBUF[base->shifterIndex[0]] = *txData++; + } +} + +void FLEXIO_UART_ReadBlocking(FLEXIO_UART_Type *base, uint8_t *rxData, size_t rxSize) +{ + assert(rxData); + assert(rxSize); + + while (rxSize--) + { + /* Wait until data transfer complete. */ + while (!(FLEXIO_UART_GetStatusFlags(base) & kFLEXIO_UART_RxDataRegFullFlag)) + { + } + + *rxData++ = base->flexioBase->SHIFTBUFBYS[base->shifterIndex[1]]; + } +} + +status_t FLEXIO_UART_TransferCreateHandle(FLEXIO_UART_Type *base, + flexio_uart_handle_t *handle, + flexio_uart_transfer_callback_t callback, + void *userData) +{ + assert(handle); + + IRQn_Type flexio_irqs[] = FLEXIO_IRQS; + + /* Zero the handle. */ + memset(handle, 0, sizeof(*handle)); + + /* Set the TX/RX state. */ + handle->rxState = kFLEXIO_UART_RxIdle; + handle->txState = kFLEXIO_UART_TxIdle; + + /* Set the callback and user data. */ + handle->callback = callback; + handle->userData = userData; + + /* Enable interrupt in NVIC. */ + EnableIRQ(flexio_irqs[0]); + + /* Save the context in global variables to support the double weak mechanism. */ + return FLEXIO_RegisterHandleIRQ(base, handle, FLEXIO_UART_TransferHandleIRQ); +} + +void FLEXIO_UART_TransferStartRingBuffer(FLEXIO_UART_Type *base, + flexio_uart_handle_t *handle, + uint8_t *ringBuffer, + size_t ringBufferSize) +{ + assert(handle); + + /* Setup the ringbuffer address */ + if (ringBuffer) + { + handle->rxRingBuffer = ringBuffer; + handle->rxRingBufferSize = ringBufferSize; + handle->rxRingBufferHead = 0U; + handle->rxRingBufferTail = 0U; + + /* Enable the interrupt to accept the data when user need the ring buffer. */ + FLEXIO_UART_EnableInterrupts(base, kFLEXIO_UART_RxDataRegFullInterruptEnable); + } +} + +void FLEXIO_UART_TransferStopRingBuffer(FLEXIO_UART_Type *base, flexio_uart_handle_t *handle) +{ + assert(handle); + + if (handle->rxState == kFLEXIO_UART_RxIdle) + { + FLEXIO_UART_DisableInterrupts(base, kFLEXIO_UART_RxDataRegFullInterruptEnable); + } + + handle->rxRingBuffer = NULL; + handle->rxRingBufferSize = 0U; + handle->rxRingBufferHead = 0U; + handle->rxRingBufferTail = 0U; +} + +status_t FLEXIO_UART_TransferSendNonBlocking(FLEXIO_UART_Type *base, + flexio_uart_handle_t *handle, + flexio_uart_transfer_t *xfer) +{ + status_t status; + + /* Return error if xfer invalid. */ + if ((0U == xfer->dataSize) || (NULL == xfer->data)) + { + return kStatus_InvalidArgument; + } + + /* Return error if current TX busy. */ + if (kFLEXIO_UART_TxBusy == handle->txState) + { + status = kStatus_FLEXIO_UART_TxBusy; + } + else + { + handle->txData = xfer->data; + handle->txDataSize = xfer->dataSize; + handle->txState = kFLEXIO_UART_TxBusy; + + /* Enable transmiter interrupt. */ + FLEXIO_UART_EnableInterrupts(base, kFLEXIO_UART_TxDataRegEmptyInterruptEnable); + + status = kStatus_Success; + } + + return status; +} + +void FLEXIO_UART_TransferAbortSend(FLEXIO_UART_Type *base, flexio_uart_handle_t *handle) +{ + /* Disable the transmitter and disable the interrupt. */ + FLEXIO_UART_DisableInterrupts(base, kFLEXIO_UART_TxDataRegEmptyInterruptEnable); + + handle->txDataSize = 0; + handle->txState = kFLEXIO_UART_TxIdle; +} + +status_t FLEXIO_UART_TransferGetSendCount(FLEXIO_UART_Type *base, flexio_uart_handle_t *handle, size_t *count) +{ + assert(handle); + + if (!count) + { + return kStatus_Success; + } + + *count = handle->txSize - handle->txDataSize; + + return kStatus_Success; +} + +status_t FLEXIO_UART_TransferReceiveNonBlocking(FLEXIO_UART_Type *base, + flexio_uart_handle_t *handle, + flexio_uart_transfer_t *xfer, + size_t *receivedBytes) +{ + uint32_t i; + status_t status; + /* How many bytes to copy from ring buffer to user memory. */ + size_t bytesToCopy = 0U; + /* How many bytes to receive. */ + size_t bytesToReceive; + /* How many bytes currently have received. */ + size_t bytesCurrentReceived; + uint32_t regPrimask = 0U; + + /* Return error if xfer invalid. */ + if ((0U == xfer->dataSize) || (NULL == xfer->data)) + { + return kStatus_InvalidArgument; + } + + /* How to get data: + 1. If RX ring buffer is not enabled, then save xfer->data and xfer->dataSize + to uart handle, enable interrupt to store received data to xfer->data. When + all data received, trigger callback. + 2. If RX ring buffer is enabled and not empty, get data from ring buffer first. + If there are enough data in ring buffer, copy them to xfer->data and return. + If there are not enough data in ring buffer, copy all of them to xfer->data, + save the xfer->data remained empty space to uart handle, receive data + to this empty space and trigger callback when finished. */ + + if (kFLEXIO_UART_RxBusy == handle->rxState) + { + status = kStatus_FLEXIO_UART_RxBusy; + } + else + { + bytesToReceive = xfer->dataSize; + bytesCurrentReceived = 0U; + + /* If RX ring buffer is used. */ + if (handle->rxRingBuffer) + { + /* Disable IRQ, protect ring buffer. */ + regPrimask = __get_PRIMASK(); + __disable_irq(); + + /* How many bytes in RX ring buffer currently. */ + bytesToCopy = FLEXIO_UART_TransferGetRxRingBufferLength(handle); + + if (bytesToCopy) + { + bytesToCopy = MIN(bytesToReceive, bytesToCopy); + + bytesToReceive -= bytesToCopy; + + /* Copy data from ring buffer to user memory. */ + for (i = 0U; i < bytesToCopy; i++) + { + xfer->data[bytesCurrentReceived++] = handle->rxRingBuffer[handle->rxRingBufferTail]; + + /* Wrap to 0. Not use modulo (%) because it might be large and slow. */ + if (handle->rxRingBufferTail + 1U == handle->rxRingBufferSize) + { + handle->rxRingBufferTail = 0U; + } + else + { + handle->rxRingBufferTail++; + } + } + } + + /* If ring buffer does not have enough data, still need to read more data. */ + if (bytesToReceive) + { + /* No data in ring buffer, save the request to UART handle. */ + handle->rxData = xfer->data + bytesCurrentReceived; + handle->rxDataSize = bytesToReceive; + handle->rxState = kFLEXIO_UART_RxBusy; + } + + /* Recover PRIMASK, enable IRQ if previously enabled. */ + __set_PRIMASK(regPrimask); + } + /* Ring buffer not used. */ + else + { + handle->rxData = xfer->data + bytesCurrentReceived; + handle->rxDataSize = bytesToReceive; + handle->rxState = kFLEXIO_UART_RxBusy; + + /* Enable RX interrupt. */ + FLEXIO_UART_EnableInterrupts(base, kFLEXIO_UART_RxDataRegFullInterruptEnable); + } + + /* Return the how many bytes have read. */ + if (receivedBytes) + { + *receivedBytes = bytesCurrentReceived; + } + + status = kStatus_Success; + } + + return status; +} + +void FLEXIO_UART_TransferAbortReceive(FLEXIO_UART_Type *base, flexio_uart_handle_t *handle) +{ + /* Only abort the receive to handle->rxData, the RX ring buffer is still working. */ + if (!handle->rxRingBuffer) + { + /* Disable RX interrupt. */ + FLEXIO_UART_DisableInterrupts(base, kFLEXIO_UART_RxDataRegFullInterruptEnable); + } + + handle->rxDataSize = 0U; + handle->rxState = kFLEXIO_UART_RxIdle; +} + +status_t FLEXIO_UART_TransferGetReceiveCount(FLEXIO_UART_Type *base, flexio_uart_handle_t *handle, size_t *count) +{ + assert(handle); + + if (!count) + { + return kStatus_Success; + } + + *count = handle->rxSize - handle->rxDataSize; + + return kStatus_Success; +} + +void FLEXIO_UART_TransferHandleIRQ(void *uartType, void *uartHandle) +{ + uint8_t count = 1; + FLEXIO_UART_Type *base = (FLEXIO_UART_Type *)uartType; + flexio_uart_handle_t *handle = (flexio_uart_handle_t *)uartHandle; + + /* Read the status back. */ + uint8_t status = FLEXIO_UART_GetStatusFlags(base); + + /* If RX overrun. */ + if (kFLEXIO_UART_RxOverRunFlag & status) + { + /* Clear Overrun flag. */ + FLEXIO_UART_ClearStatusFlags(base, kFLEXIO_UART_RxOverRunFlag); + + /* Trigger callback. */ + if (handle->callback) + { + handle->callback(base, handle, kStatus_FLEXIO_UART_RxHardwareOverrun, handle->userData); + } + } + + /* Receive data register full */ + if ((kFLEXIO_UART_RxDataRegFullFlag & status) && (base->flexioBase->SHIFTSIEN & (1U << base->shifterIndex[1]))) + { + /* If handle->rxDataSize is not 0, first save data to handle->rxData. */ + if (handle->rxDataSize) + { + /* Using non block API to read the data from the registers. */ + FLEXIO_UART_ReadByte(base, handle->rxData); + handle->rxDataSize--; + handle->rxData++; + count--; + + /* If all the data required for upper layer is ready, trigger callback. */ + if (!handle->rxDataSize) + { + handle->rxState = kFLEXIO_UART_RxIdle; + + if (handle->callback) + { + handle->callback(base, handle, kStatus_FLEXIO_UART_RxIdle, handle->userData); + } + } + } + + if (handle->rxRingBuffer) + { + if (count) + { + /* If RX ring buffer is full, trigger callback to notify over run. */ + if (FLEXIO_UART_TransferIsRxRingBufferFull(handle)) + { + if (handle->callback) + { + handle->callback(base, handle, kStatus_FLEXIO_UART_RxRingBufferOverrun, handle->userData); + } + } + + /* If ring buffer is still full after callback function, the oldest data is overrided. */ + if (FLEXIO_UART_TransferIsRxRingBufferFull(handle)) + { + /* Increase handle->rxRingBufferTail to make room for new data. */ + if (handle->rxRingBufferTail + 1U == handle->rxRingBufferSize) + { + handle->rxRingBufferTail = 0U; + } + else + { + handle->rxRingBufferTail++; + } + } + + /* Read data. */ + handle->rxRingBuffer[handle->rxRingBufferHead] = base->flexioBase->SHIFTBUFBYS[base->shifterIndex[1]]; + + /* Increase handle->rxRingBufferHead. */ + if (handle->rxRingBufferHead + 1U == handle->rxRingBufferSize) + { + handle->rxRingBufferHead = 0U; + } + else + { + handle->rxRingBufferHead++; + } + } + } + /* If no receive requst pending, stop RX interrupt. */ + else if (!handle->rxDataSize) + { + FLEXIO_UART_DisableInterrupts(base, kFLEXIO_UART_RxDataRegFullInterruptEnable); + } + else + { + } + } + + /* Send data register empty and the interrupt is enabled. */ + if ((kFLEXIO_UART_TxDataRegEmptyFlag & status) && (base->flexioBase->SHIFTSIEN & (1U << base->shifterIndex[0]))) + { + if (handle->txDataSize) + { + /* Using non block API to write the data to the registers. */ + FLEXIO_UART_WriteByte(base, handle->txData); + handle->txData++; + handle->txDataSize--; + count--; + + /* If all the data are written to data register, TX finished. */ + if (!handle->txDataSize) + { + handle->txState = kFLEXIO_UART_TxIdle; + + /* Disable TX register empty interrupt. */ + FLEXIO_UART_DisableInterrupts(base, kFLEXIO_UART_TxDataRegEmptyInterruptEnable); + + /* Trigger callback. */ + if (handle->callback) + { + handle->callback(base, handle, kStatus_FLEXIO_UART_TxIdle, handle->userData); + } + } + } + } +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_uart.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_uart.h new file mode 100644 index 00000000000..53b35faeab4 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_uart.h @@ -0,0 +1,585 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _FSL_FLEXIO_UART_H_ +#define _FSL_FLEXIO_UART_H_ + +#include "fsl_common.h" +#include "fsl_flexio.h" + +/*! + * @addtogroup flexio_uart + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief FlexIO UART driver version 2.1.1. */ +#define FSL_FLEXIO_UART_DRIVER_VERSION (MAKE_VERSION(2, 1, 1)) +/*@}*/ + +/*! @brief Error codes for the UART driver. */ +enum _flexio_uart_status +{ + kStatus_FLEXIO_UART_TxBusy = MAKE_STATUS(kStatusGroup_FLEXIO_UART, 0), /*!< Transmitter is busy. */ + kStatus_FLEXIO_UART_RxBusy = MAKE_STATUS(kStatusGroup_FLEXIO_UART, 1), /*!< Receiver is busy. */ + kStatus_FLEXIO_UART_TxIdle = MAKE_STATUS(kStatusGroup_FLEXIO_UART, 2), /*!< UART transmitter is idle. */ + kStatus_FLEXIO_UART_RxIdle = MAKE_STATUS(kStatusGroup_FLEXIO_UART, 3), /*!< UART receiver is idle. */ + kStatus_FLEXIO_UART_ERROR = MAKE_STATUS(kStatusGroup_FLEXIO_UART, 4), /*!< ERROR happens on UART. */ + kStatus_FLEXIO_UART_RxRingBufferOverrun = + MAKE_STATUS(kStatusGroup_FLEXIO_UART, 5), /*!< UART RX software ring buffer overrun. */ + kStatus_FLEXIO_UART_RxHardwareOverrun = MAKE_STATUS(kStatusGroup_FLEXIO_UART, 6) /*!< UART RX receiver overrun. */ +}; + +/*! @brief FlexIO UART bit count per char. */ +typedef enum _flexio_uart_bit_count_per_char +{ + kFLEXIO_UART_7BitsPerChar = 7U, /*!< 7-bit data characters */ + kFLEXIO_UART_8BitsPerChar = 8U, /*!< 8-bit data characters */ + kFLEXIO_UART_9BitsPerChar = 9U, /*!< 9-bit data characters */ +} flexio_uart_bit_count_per_char_t; + +/*! @brief Define FlexIO UART interrupt mask. */ +enum _flexio_uart_interrupt_enable +{ + kFLEXIO_UART_TxDataRegEmptyInterruptEnable = 0x1U, /*!< Transmit buffer empty interrupt enable. */ + kFLEXIO_UART_RxDataRegFullInterruptEnable = 0x2U, /*!< Receive buffer full interrupt enable. */ +}; + +/*! @brief Define FlexIO UART status mask. */ +enum _flexio_uart_status_flags +{ + kFLEXIO_UART_TxDataRegEmptyFlag = 0x1U, /*!< Transmit buffer empty flag. */ + kFLEXIO_UART_RxDataRegFullFlag = 0x2U, /*!< Receive buffer full flag. */ + kFLEXIO_UART_RxOverRunFlag = 0x4U, /*!< Receive buffer over run flag. */ +}; + +/*! @brief Define FlexIO UART access structure typedef. */ +typedef struct _flexio_uart_type +{ + FLEXIO_Type *flexioBase; /*!< FlexIO base pointer. */ + uint8_t TxPinIndex; /*!< Pin select for UART_Tx. */ + uint8_t RxPinIndex; /*!< Pin select for UART_Rx. */ + uint8_t shifterIndex[2]; /*!< Shifter index used in FlexIO UART. */ + uint8_t timerIndex[2]; /*!< Timer index used in FlexIO UART. */ +} FLEXIO_UART_Type; + +/*! @brief Define FlexIO UART user configuration structure. */ +typedef struct _flexio_uart_config +{ + bool enableUart; /*!< Enable/disable FlexIO UART TX & RX. */ + bool enableInDoze; /*!< Enable/disable FlexIO operation in doze mode*/ + bool enableInDebug; /*!< Enable/disable FlexIO operation in debug mode*/ + bool enableFastAccess; /*!< Enable/disable fast access to FlexIO registers, + fast access requires the FlexIO clock to be at least + twice the frequency of the bus clock. */ + uint32_t baudRate_Bps; /*!< Baud rate in Bps. */ + flexio_uart_bit_count_per_char_t bitCountPerChar; /*!< number of bits, 7/8/9 -bit */ +} flexio_uart_config_t; + +/*! @brief Define FlexIO UART transfer structure. */ +typedef struct _flexio_uart_transfer +{ + uint8_t *data; /*!< Transfer buffer*/ + size_t dataSize; /*!< Transfer size*/ +} flexio_uart_transfer_t; + +/* Forward declaration of the handle typedef. */ +typedef struct _flexio_uart_handle flexio_uart_handle_t; + +/*! @brief FlexIO UART transfer callback function. */ +typedef void (*flexio_uart_transfer_callback_t)(FLEXIO_UART_Type *base, + flexio_uart_handle_t *handle, + status_t status, + void *userData); + +/*! @brief Define FLEXIO UART handle structure*/ +struct _flexio_uart_handle +{ + uint8_t *volatile txData; /*!< Address of remaining data to send. */ + volatile size_t txDataSize; /*!< Size of the remaining data to send. */ + uint8_t *volatile rxData; /*!< Address of remaining data to receive. */ + volatile size_t rxDataSize; /*!< Size of the remaining data to receive. */ + size_t txSize; /*!< Total bytes to be sent. */ + size_t rxSize; /*!< Total bytes to be received. */ + + uint8_t *rxRingBuffer; /*!< Start address of the receiver ring buffer. */ + size_t rxRingBufferSize; /*!< Size of the ring buffer. */ + volatile uint16_t rxRingBufferHead; /*!< Index for the driver to store received data into ring buffer. */ + volatile uint16_t rxRingBufferTail; /*!< Index for the user to get data from the ring buffer. */ + + flexio_uart_transfer_callback_t callback; /*!< Callback function. */ + void *userData; /*!< UART callback function parameter.*/ + + volatile uint8_t txState; /*!< TX transfer state. */ + volatile uint8_t rxState; /*!< RX transfer state */ +}; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif /*_cplusplus*/ + +/*! + * @name Initialization and deinitialization + * @{ + */ + +/*! + * @brief Ungates the FlexIO clock, resets the FlexIO module, configures FlexIO UART + * hardware, and configures the FlexIO UART with FlexIO UART configuration. + * The configuration structure can be filled by the user, or be set with + * default values by FLEXIO_UART_GetDefaultConfig(). + * + * Example + @code + FLEXIO_UART_Type base = { + .flexioBase = FLEXIO, + .TxPinIndex = 0, + .RxPinIndex = 1, + .shifterIndex = {0,1}, + .timerIndex = {0,1} + }; + flexio_uart_config_t config = { + .enableInDoze = false, + .enableInDebug = true, + .enableFastAccess = false, + .baudRate_Bps = 115200U, + .bitCountPerChar = 8 + }; + FLEXIO_UART_Init(base, &config, srcClock_Hz); + @endcode + * + * @param base Pointer to the FLEXIO_UART_Type structure. + * @param userConfig Pointer to the flexio_uart_config_t structure. + * @param srcClock_Hz FlexIO source clock in Hz. +*/ +void FLEXIO_UART_Init(FLEXIO_UART_Type *base, const flexio_uart_config_t *userConfig, uint32_t srcClock_Hz); + +/*! + * @brief Disables the FlexIO UART and gates the FlexIO clock. + * + * @note After calling this API, call the FLEXO_UART_Init to use the FlexIO UART module. + * + * @param base pointer to FLEXIO_UART_Type structure +*/ +void FLEXIO_UART_Deinit(FLEXIO_UART_Type *base); + +/*! + * @brief Gets the default configuration to configure the FlexIO UART. The configuration + * can be used directly for calling the FLEXIO_UART_Init(). + * Example: + @code + flexio_uart_config_t config; + FLEXIO_UART_GetDefaultConfig(&userConfig); + @endcode + * @param userConfig Pointer to the flexio_uart_config_t structure. +*/ +void FLEXIO_UART_GetDefaultConfig(flexio_uart_config_t *userConfig); + +/* @} */ + +/*! + * @name Status + * @{ + */ + +/*! + * @brief Gets the FlexIO UART status flags. + * + * @param base Pointer to the FLEXIO_UART_Type structure. + * @return FlexIO UART status flags. +*/ + +uint32_t FLEXIO_UART_GetStatusFlags(FLEXIO_UART_Type *base); + +/*! + * @brief Gets the FlexIO UART status flags. + * + * @param base Pointer to the FLEXIO_UART_Type structure. + * @param mask Status flag. + * The parameter can be any combination of the following values: + * @arg kFLEXIO_UART_TxDataRegEmptyFlag + * @arg kFLEXIO_UART_RxEmptyFlag + * @arg kFLEXIO_UART_RxOverRunFlag +*/ + +void FLEXIO_UART_ClearStatusFlags(FLEXIO_UART_Type *base, uint32_t mask); + +/* @} */ + +/*! + * @name Interrupts + * @{ + */ + +/*! + * @brief Enables the FlexIO UART interrupt. + * + * This function enables the FlexIO UART interrupt. + * + * @param base Pointer to the FLEXIO_UART_Type structure. + * @param mask Interrupt source. + */ +void FLEXIO_UART_EnableInterrupts(FLEXIO_UART_Type *base, uint32_t mask); + +/*! + * @brief Disables the FlexIO UART interrupt. + * + * This function disables the FlexIO UART interrupt. + * + * @param base Pointer to the FLEXIO_UART_Type structure. + * @param mask Interrupt source. + */ +void FLEXIO_UART_DisableInterrupts(FLEXIO_UART_Type *base, uint32_t mask); + +/* @} */ + +/*! + * @name DMA Control + * @{ + */ + +/*! + * @brief Gets the FlexIO UARt transmit data register address. + * + * This function returns the UART data register address, which is mainly used by DMA/eDMA. + * + * @param base Pointer to the FLEXIO_UART_Type structure. + * @return FlexIO UART transmit data register address. + */ +static inline uint32_t FLEXIO_UART_GetTxDataRegisterAddress(FLEXIO_UART_Type *base) +{ + return FLEXIO_GetShifterBufferAddress(base->flexioBase, kFLEXIO_ShifterBuffer, base->shifterIndex[0]); +} + +/*! + * @brief Gets the FlexIO UART receive data register address. + * + * This function returns the UART data register address, which is mainly used by DMA/eDMA. + * + * @param base Pointer to the FLEXIO_UART_Type structure. + * @return FlexIO UART receive data register address. + */ +static inline uint32_t FLEXIO_UART_GetRxDataRegisterAddress(FLEXIO_UART_Type *base) +{ + return FLEXIO_GetShifterBufferAddress(base->flexioBase, kFLEXIO_ShifterBufferByteSwapped, base->shifterIndex[1]); +} + +/*! + * @brief Enables/disables the FlexIO UART transmit DMA. + * This function enables/disables the FlexIO UART Tx DMA, + * which means asserting the kFLEXIO_UART_TxDataRegEmptyFlag does/doesn't trigger the DMA request. + * + * @param base Pointer to the FLEXIO_UART_Type structure. + * @param enable True to enable, false to disable. + */ +static inline void FLEXIO_UART_EnableTxDMA(FLEXIO_UART_Type *base, bool enable) +{ + FLEXIO_EnableShifterStatusDMA(base->flexioBase, 1 << base->shifterIndex[0], enable); +} + +/*! + * @brief Enables/disables the FlexIO UART receive DMA. + * This function enables/disables the FlexIO UART Rx DMA, + * which means asserting kFLEXIO_UART_RxDataRegFullFlag does/doesn't trigger the DMA request. + * + * @param base Pointer to the FLEXIO_UART_Type structure. + * @param enable True to enable, false to disable. + */ +static inline void FLEXIO_UART_EnableRxDMA(FLEXIO_UART_Type *base, bool enable) +{ + FLEXIO_EnableShifterStatusDMA(base->flexioBase, 1 << base->shifterIndex[1], enable); +} + +/* @} */ + +/*! + * @name Bus Operations + * @{ + */ + +/*! + * @brief Enables/disables the FlexIO UART module operation. + * + * @param base Pointer to the FLEXIO_UART_Type. + * @param enable True to enable, false to disable. +*/ +static inline void FLEXIO_UART_Enable(FLEXIO_UART_Type *base, bool enable) +{ + if (enable) + { + base->flexioBase->CTRL |= FLEXIO_CTRL_FLEXEN_MASK; + } + else + { + base->flexioBase->CTRL &= ~FLEXIO_CTRL_FLEXEN_MASK; + } +} + +/*! + * @brief Writes one byte of data. + * + * @note This is a non-blocking API, which returns directly after the data is put into the + * data register. Ensure that the TxEmptyFlag is asserted before calling + * this API. + * + * @param base Pointer to the FLEXIO_UART_Type structure. + * @param buffer The data bytes to send. + */ +static inline void FLEXIO_UART_WriteByte(FLEXIO_UART_Type *base, const uint8_t *buffer) +{ + base->flexioBase->SHIFTBUF[base->shifterIndex[0]] = *buffer; +} + +/*! + * @brief Reads one byte of data. + * + * @note This is a non-blocking API, which returns directly after the data is read from the + * data register. Ensure that the RxFullFlag is asserted before calling this API. + * + * @param base Pointer to the FLEXIO_UART_Type structure. + * @param buffer The buffer to store the received bytes. + */ +static inline void FLEXIO_UART_ReadByte(FLEXIO_UART_Type *base, uint8_t *buffer) +{ + *buffer = base->flexioBase->SHIFTBUFBYS[base->shifterIndex[1]]; +} + +/*! + * @brief Sends a buffer of data bytes. + * + * @note This function blocks using the polling method until all bytes have been sent. + * + * @param base Pointer to the FLEXIO_UART_Type structure. + * @param txData The data bytes to send. + * @param txSize The number of data bytes to send. + */ +void FLEXIO_UART_WriteBlocking(FLEXIO_UART_Type *base, const uint8_t *txData, size_t txSize); + +/*! + * @brief Receives a buffer of bytes. + * + * @note This function blocks using the polling method until all bytes have been received. + * + * @param base Pointer to the FLEXIO_UART_Type structure. + * @param rxData The buffer to store the received bytes. + * @param rxSize The number of data bytes to be received. + */ +void FLEXIO_UART_ReadBlocking(FLEXIO_UART_Type *base, uint8_t *rxData, size_t rxSize); + +/* @} */ + +/*! + * @name Transactional + * @{ + */ + +/*! + * @brief Initializes the UART handle. + * + * This function initializes the FlexIO UART handle, which can be used for other FlexIO + * UART transactional APIs. Call this API once to get the + * initialized handle. + * + * The UART driver supports the "background" receiving, which means that user can set up + * a RX ring buffer optionally. Data received is stored into the ring buffer even when + * the user doesn't call the FLEXIO_UART_TransferReceiveNonBlocking() API. If there is already data + * received in the ring buffer, user can get the received data from the ring buffer + * directly. The ring buffer is disabled if passing NULL as @p ringBuffer. + * + * @param base to FLEXIO_UART_Type structure. + * @param handle Pointer to the flexio_uart_handle_t structure to store the transfer state. + * @param callback The callback function. + * @param userData The parameter of the callback function. + * @retval kStatus_Success Successfully create the handle. + * @retval kStatus_OutOfRange The FlexIO type/handle/ISR table out of range. + */ +status_t FLEXIO_UART_TransferCreateHandle(FLEXIO_UART_Type *base, + flexio_uart_handle_t *handle, + flexio_uart_transfer_callback_t callback, + void *userData); + +/*! + * @brief Sets up the RX ring buffer. + * + * This function sets up the RX ring buffer to a specific UART handle. + * + * When the RX ring buffer is used, data received is stored into the ring buffer even when + * the user doesn't call the UART_ReceiveNonBlocking() API. If there are already data received + * in the ring buffer, user can get the received data from the ring buffer directly. + * + * @note When using the RX ring buffer, one byte is reserved for internal use. In other + * words, if @p ringBufferSize is 32, only 31 bytes are used for saving data. + * + * @param base Pointer to the FLEXIO_UART_Type structure. + * @param handle Pointer to the flexio_uart_handle_t structure to store the transfer state. + * @param ringBuffer Start address of ring buffer for background receiving. Pass NULL to disable the ring buffer. + * @param ringBufferSize Size of the ring buffer. + */ +void FLEXIO_UART_TransferStartRingBuffer(FLEXIO_UART_Type *base, + flexio_uart_handle_t *handle, + uint8_t *ringBuffer, + size_t ringBufferSize); + +/*! + * @brief Aborts the background transfer and uninstalls the ring buffer. + * + * This function aborts the background transfer and uninstalls the ring buffer. + * + * @param base Pointer to the FLEXIO_UART_Type structure. + * @param handle Pointer to the flexio_uart_handle_t structure to store the transfer state. + */ +void FLEXIO_UART_TransferStopRingBuffer(FLEXIO_UART_Type *base, flexio_uart_handle_t *handle); + +/*! + * @brief Transmits a buffer of data using the interrupt method. + * + * This function sends data using an interrupt method. This is a non-blocking function, + * which returns directly without waiting for all data to be written to the TX register. When + * all data are written to TX register in ISR, the FlexIO UART driver calls the callback + * function and passes the @ref kStatus_FLEXIO_UART_TxIdle as status parameter. + * + * @note The kStatus_FLEXIO_UART_TxIdle is passed to the upper layer when all data is written + * to the TX register. However, it does not ensure that all data is sent out. + * + * @param base Pointer to the FLEXIO_UART_Type structure. + * @param handle Pointer to the flexio_uart_handle_t structure to store the transfer state. + * @param xfer FlexIO UART transfer structure. See #flexio_uart_transfer_t. + * @retval kStatus_Success Successfully starts the data transmission. + * @retval kStatus_UART_TxBusy Previous transmission still not finished, data not written to the TX register. + */ +status_t FLEXIO_UART_TransferSendNonBlocking(FLEXIO_UART_Type *base, + flexio_uart_handle_t *handle, + flexio_uart_transfer_t *xfer); + +/*! + * @brief Aborts the interrupt-driven data transmit. + * + * This function aborts the interrupt-driven data sending. Get the remainBytes to know + * how many bytes are still not sent out. + * + * @param base Pointer to the FLEXIO_UART_Type structure. + * @param handle Pointer to the flexio_uart_handle_t structure to store the transfer state. + */ +void FLEXIO_UART_TransferAbortSend(FLEXIO_UART_Type *base, flexio_uart_handle_t *handle); + +/*! + * @brief Gets the number of remaining bytes not sent. + * + * This function gets the number of remaining bytes not sent driven by interrupt. + * + * @param base Pointer to the FLEXIO_UART_Type structure. + * @param handle Pointer to the flexio_uart_handle_t structure to store the transfer state. + * @param count Number of bytes sent so far by the non-blocking transaction. + * @retval kStatus_InvalidArgument count is Invalid. + * @retval kStatus_Success Successfully return the count. + */ +status_t FLEXIO_UART_TransferGetSendCount(FLEXIO_UART_Type *base, flexio_uart_handle_t *handle, size_t *count); + +/*! + * @brief Receives a buffer of data using the interrupt method. + * + * This function receives data using the interrupt method. This is a non-blocking function, + * which returns without waiting for all data to be received. + * If the RX ring buffer is used and not empty, the data in ring buffer is copied and + * the parameter @p receivedBytes shows how many bytes are copied from the ring buffer. + * After copying, if the data in ring buffer is not enough to read, the receive + * request is saved by the UART driver. When new data arrives, the receive request + * is serviced first. When all data is received, the UART driver notifies the upper layer + * through a callback function and passes the status parameter @ref kStatus_UART_RxIdle. + * For example, if the upper layer needs 10 bytes but there are only 5 bytes in the ring buffer, + * the 5 bytes are copied to xfer->data. This function returns with the + * parameter @p receivedBytes set to 5. For the last 5 bytes, newly arrived data is + * saved from the xfer->data[5]. When 5 bytes are received, the UART driver notifies upper layer. + * If the RX ring buffer is not enabled, this function enables the RX and RX interrupt + * to receive data to xfer->data. When all data is received, the upper layer is notified. + * + * @param base Pointer to the FLEXIO_UART_Type structure. + * @param handle Pointer to the flexio_uart_handle_t structure to store the transfer state. + * @param xfer UART transfer structure. See #flexio_uart_transfer_t. + * @param receivedBytes Bytes received from the ring buffer directly. + * @retval kStatus_Success Successfully queue the transfer into the transmit queue. + * @retval kStatus_FLEXIO_UART_RxBusy Previous receive request is not finished. + */ +status_t FLEXIO_UART_TransferReceiveNonBlocking(FLEXIO_UART_Type *base, + flexio_uart_handle_t *handle, + flexio_uart_transfer_t *xfer, + size_t *receivedBytes); + +/*! + * @brief Aborts the receive data which was using IRQ. + * + * This function aborts the receive data which was using IRQ. + * + * @param base Pointer to the FLEXIO_UART_Type structure. + * @param handle Pointer to the flexio_uart_handle_t structure to store the transfer state. + */ +void FLEXIO_UART_TransferAbortReceive(FLEXIO_UART_Type *base, flexio_uart_handle_t *handle); + +/*! + * @brief Gets the number of remaining bytes not received. + * + * This function gets the number of remaining bytes not received driven by interrupt. + * + * @param base Pointer to the FLEXIO_UART_Type structure. + * @param handle Pointer to the flexio_uart_handle_t structure to store the transfer state. + * @param count Number of bytes received so far by the non-blocking transaction. + * @retval kStatus_InvalidArgument count is Invalid. + * @retval kStatus_Success Successfully return the count. + */ +status_t FLEXIO_UART_TransferGetReceiveCount(FLEXIO_UART_Type *base, flexio_uart_handle_t *handle, size_t *count); + +/*! + * @brief FlexIO UART IRQ handler function. + * + * This function processes the FlexIO UART transmit and receives the IRQ request. + * + * @param uartType Pointer to the FLEXIO_UART_Type structure. + * @param uartHandle Pointer to the flexio_uart_handle_t structure to store the transfer state. + */ +void FLEXIO_UART_TransferHandleIRQ(void *uartType, void *uartHandle); + +/*@}*/ + +#if defined(__cplusplus) +} +#endif /*_cplusplus*/ +/*@}*/ + +#endif /*_FSL_FLEXIO_UART_H_*/ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_uart_edma.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_uart_edma.c new file mode 100644 index 00000000000..0c3655419c5 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_uart_edma.c @@ -0,0 +1,348 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_flexio_uart_edma.h" +#include "fsl_dmamux.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*handle); + + /* Avoid the warning for unused variables. */ + handle = handle; + tcds = tcds; + + if (transferDone) + { + FLEXIO_UART_TransferAbortSendEDMA(uartPrivateHandle->base, uartPrivateHandle->handle); + + if (uartPrivateHandle->handle->callback) + { + uartPrivateHandle->handle->callback(uartPrivateHandle->base, uartPrivateHandle->handle, + kStatus_FLEXIO_UART_TxIdle, uartPrivateHandle->handle->userData); + } + } +} + +static void FLEXIO_UART_TransferReceiveEDMACallback(edma_handle_t *handle, + void *param, + bool transferDone, + uint32_t tcds) +{ + flexio_uart_edma_private_handle_t *uartPrivateHandle = (flexio_uart_edma_private_handle_t *)param; + + assert(uartPrivateHandle->handle); + + /* Avoid the warning for unused variables. */ + handle = handle; + tcds = tcds; + + if (transferDone) + { + /* Disable transfer. */ + FLEXIO_UART_TransferAbortReceiveEDMA(uartPrivateHandle->base, uartPrivateHandle->handle); + + if (uartPrivateHandle->handle->callback) + { + uartPrivateHandle->handle->callback(uartPrivateHandle->base, uartPrivateHandle->handle, + kStatus_FLEXIO_UART_RxIdle, uartPrivateHandle->handle->userData); + } + } +} + +status_t FLEXIO_UART_TransferCreateHandleEDMA(FLEXIO_UART_Type *base, + flexio_uart_edma_handle_t *handle, + flexio_uart_edma_transfer_callback_t callback, + void *userData, + edma_handle_t *txEdmaHandle, + edma_handle_t *rxEdmaHandle) +{ + assert(handle); + + uint8_t index = 0; + + /* Find the an empty handle pointer to store the handle. */ + for (index = 0; index < FLEXIO_UART_HANDLE_COUNT; index++) + { + if (s_edmaPrivateHandle[index].base == NULL) + { + s_edmaPrivateHandle[index].base = base; + s_edmaPrivateHandle[index].handle = handle; + break; + } + } + + if (index == FLEXIO_UART_HANDLE_COUNT) + { + return kStatus_OutOfRange; + } + + memset(handle, 0, sizeof(*handle)); + + handle->rxState = kFLEXIO_UART_RxIdle; + handle->txState = kFLEXIO_UART_TxIdle; + + handle->rxEdmaHandle = rxEdmaHandle; + handle->txEdmaHandle = txEdmaHandle; + + handle->callback = callback; + handle->userData = userData; + + /* Configure TX. */ + if (txEdmaHandle) + { + EDMA_SetCallback(handle->txEdmaHandle, FLEXIO_UART_TransferSendEDMACallback, &s_edmaPrivateHandle); + } + + /* Configure RX. */ + if (rxEdmaHandle) + { + EDMA_SetCallback(handle->rxEdmaHandle, FLEXIO_UART_TransferReceiveEDMACallback, &s_edmaPrivateHandle); + } + + return kStatus_Success; +} + +status_t FLEXIO_UART_TransferSendEDMA(FLEXIO_UART_Type *base, + flexio_uart_edma_handle_t *handle, + flexio_uart_transfer_t *xfer) +{ + assert(handle->txEdmaHandle); + + edma_transfer_config_t xferConfig; + status_t status; + + /* Return error if xfer invalid. */ + if ((0U == xfer->dataSize) || (NULL == xfer->data)) + { + return kStatus_InvalidArgument; + } + + /* If previous TX not finished. */ + if (kFLEXIO_UART_TxBusy == handle->txState) + { + status = kStatus_FLEXIO_UART_TxBusy; + } + else + { + handle->txState = kFLEXIO_UART_TxBusy; + + /* Prepare transfer. */ + EDMA_PrepareTransfer(&xferConfig, xfer->data, sizeof(uint8_t), + (void *)FLEXIO_UART_GetTxDataRegisterAddress(base), sizeof(uint8_t), sizeof(uint8_t), + xfer->dataSize, kEDMA_MemoryToPeripheral); + + /* Submit transfer. */ + EDMA_SubmitTransfer(handle->txEdmaHandle, &xferConfig); + EDMA_StartTransfer(handle->txEdmaHandle); + + /* Enable UART TX EDMA. */ + FLEXIO_UART_EnableTxDMA(base, true); + + status = kStatus_Success; + } + + return status; +} + +status_t FLEXIO_UART_TransferReceiveEDMA(FLEXIO_UART_Type *base, + flexio_uart_edma_handle_t *handle, + flexio_uart_transfer_t *xfer) +{ + assert(handle->rxEdmaHandle); + + edma_transfer_config_t xferConfig; + status_t status; + + /* Return error if xfer invalid. */ + if ((0U == xfer->dataSize) || (NULL == xfer->data)) + { + return kStatus_InvalidArgument; + } + + /* If previous RX not finished. */ + if (kFLEXIO_UART_RxBusy == handle->rxState) + { + status = kStatus_FLEXIO_UART_RxBusy; + } + else + { + handle->rxState = kFLEXIO_UART_RxBusy; + + /* Prepare transfer. */ + EDMA_PrepareTransfer(&xferConfig, (void *)FLEXIO_UART_GetRxDataRegisterAddress(base), sizeof(uint8_t), + xfer->data, sizeof(uint8_t), sizeof(uint8_t), xfer->dataSize, kEDMA_PeripheralToMemory); + + /* Submit transfer. */ + EDMA_SubmitTransfer(handle->rxEdmaHandle, &xferConfig); + EDMA_StartTransfer(handle->rxEdmaHandle); + + /* Enable UART RX EDMA. */ + FLEXIO_UART_EnableRxDMA(base, true); + + status = kStatus_Success; + } + + return status; +} + +void FLEXIO_UART_TransferAbortSendEDMA(FLEXIO_UART_Type *base, flexio_uart_edma_handle_t *handle) +{ + assert(handle->txEdmaHandle); + + /* Disable UART TX EDMA. */ + FLEXIO_UART_EnableTxDMA(base, false); + + /* Stop transfer. */ + EDMA_StopTransfer(handle->txEdmaHandle); + + handle->txState = kFLEXIO_UART_TxIdle; +} + +void FLEXIO_UART_TransferAbortReceiveEDMA(FLEXIO_UART_Type *base, flexio_uart_edma_handle_t *handle) +{ + assert(handle->rxEdmaHandle); + + /* Disable UART RX EDMA. */ + FLEXIO_UART_EnableRxDMA(base, false); + + /* Stop transfer. */ + EDMA_StopTransfer(handle->rxEdmaHandle); + + handle->rxState = kFLEXIO_UART_RxIdle; +} + +status_t FLEXIO_UART_TransferGetReceiveCountEDMA(FLEXIO_UART_Type *base, + flexio_uart_edma_handle_t *handle, + size_t *count) +{ + assert(handle->rxEdmaHandle); + + if (!count) + { + return kStatus_InvalidArgument; + } + + if (kFLEXIO_UART_RxBusy == handle->rxState) + { + *count = (handle->rxSize - EDMA_GetRemainingBytes(handle->rxEdmaHandle->base, handle->rxEdmaHandle->channel)); + } + else + { + *count = handle->rxSize; + } + + return kStatus_Success; +} + +status_t FLEXIO_UART_TransferGetSendCountEDMA(FLEXIO_UART_Type *base, flexio_uart_edma_handle_t *handle, size_t *count) +{ + assert(handle->txEdmaHandle); + + if (!count) + { + return kStatus_InvalidArgument; + } + + if (kFLEXIO_UART_TxBusy == handle->txState) + { + *count = (handle->txSize - EDMA_GetRemainingBytes(handle->txEdmaHandle->base, handle->txEdmaHandle->channel)); + } + else + { + *count = handle->txSize; + } + + return kStatus_Success; +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_uart_edma.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_uart_edma.h new file mode 100644 index 00000000000..bcd5945c676 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_flexio_uart_edma.h @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FSL_FLEXIO_UART_EDMA_H_ +#define _FSL_FLEXIO_UART_EDMA_H_ + +#include "fsl_flexio_uart.h" +#include "fsl_dmamux.h" +#include "fsl_edma.h" + +/*! + * @addtogroup flexio_edma_uart + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/* Forward declaration of the handle typedef. */ +typedef struct _flexio_uart_edma_handle flexio_uart_edma_handle_t; + +/*! @brief UART transfer callback function. */ +typedef void (*flexio_uart_edma_transfer_callback_t)(FLEXIO_UART_Type *base, + flexio_uart_edma_handle_t *handle, + status_t status, + void *userData); + +/*! +* @brief UART eDMA handle +*/ +struct _flexio_uart_edma_handle +{ + flexio_uart_edma_transfer_callback_t callback; /*!< Callback function. */ + void *userData; /*!< UART callback function parameter.*/ + + size_t txSize; /*!< Total bytes to be sent. */ + size_t rxSize; /*!< Total bytes to be received. */ + + edma_handle_t *txEdmaHandle; /*!< The eDMA TX channel used. */ + edma_handle_t *rxEdmaHandle; /*!< The eDMA RX channel used. */ + + volatile uint8_t txState; /*!< TX transfer state. */ + volatile uint8_t rxState; /*!< RX transfer state */ +}; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @name eDMA transactional + * @{ + */ + +/*! + * @brief Initializes the UART handle which is used in transactional functions. + * + * @param base pointer to FLEXIO_UART_Type. + * @param handle Pointer to flexio_uart_edma_handle_t structure. + * @param callback The callback function. + * @param userData The parameter of the callback function. + * @param rxEdmaHandle User requested DMA handle for RX DMA transfer. + * @param txEdmaHandle User requested DMA handle for TX DMA transfer. + * @retval kStatus_Success Successfully create the handle. + * @retval kStatus_OutOfRange The FlexIO SPI eDMA type/handle table out of range. + */ +status_t FLEXIO_UART_TransferCreateHandleEDMA(FLEXIO_UART_Type *base, + flexio_uart_edma_handle_t *handle, + flexio_uart_edma_transfer_callback_t callback, + void *userData, + edma_handle_t *txEdmaHandle, + edma_handle_t *rxEdmaHandle); + +/*! + * @brief Sends data using eDMA. + * + * This function sends data using eDMA. This is a non-blocking function, which returns + * right away. When all data have been sent out, the send callback function is called. + * + * @param base pointer to FLEXIO_UART_Type + * @param handle UART handle pointer. + * @param xfer UART eDMA transfer structure, see #flexio_uart_transfer_t. + * @retval kStatus_Success if succeed, others failed. + * @retval kStatus_FLEXIO_UART_TxBusy Previous transfer on going. + */ +status_t FLEXIO_UART_TransferSendEDMA(FLEXIO_UART_Type *base, + flexio_uart_edma_handle_t *handle, + flexio_uart_transfer_t *xfer); + +/*! + * @brief Receives data using eDMA. + * + * This function receives data using eDMA. This is a non-blocking function, which returns + * right away. When all data have been received, the receive callback function is called. + * + * @param base pointer to FLEXIO_UART_Type + * @param handle Pointer to flexio_uart_edma_handle_t structure + * @param xfer UART eDMA transfer structure, see #flexio_uart_transfer_t. + * @retval kStatus_Success if succeed, others failed. + * @retval kStatus_UART_RxBusy Previous transfer on going. + */ +status_t FLEXIO_UART_TransferReceiveEDMA(FLEXIO_UART_Type *base, + flexio_uart_edma_handle_t *handle, + flexio_uart_transfer_t *xfer); + +/*! + * @brief Aborts the sent data which using eDMA. + * + * This function aborts sent data which using eDMA. + * + * @param base pointer to FLEXIO_UART_Type + * @param handle Pointer to flexio_uart_edma_handle_t structure + */ +void FLEXIO_UART_TransferAbortSendEDMA(FLEXIO_UART_Type *base, flexio_uart_edma_handle_t *handle); + +/*! + * @brief Aborts the receive data which using eDMA. + * + * This function aborts the receive data which using eDMA. + * + * @param base pointer to FLEXIO_UART_Type + * @param handle Pointer to flexio_uart_edma_handle_t structure + */ +void FLEXIO_UART_TransferAbortReceiveEDMA(FLEXIO_UART_Type *base, flexio_uart_edma_handle_t *handle); + +/*! + * @brief Gets the number of bytes still not sent out. + * + * This function gets the number of bytes still not sent out. + * + * @param base pointer to FLEXIO_UART_Type + * @param handle Pointer to flexio_uart_edma_handle_t structure + * @param count Number of bytes sent so far by the non-blocking transaction. + */ +status_t FLEXIO_UART_TransferGetSendCountEDMA(FLEXIO_UART_Type *base, flexio_uart_edma_handle_t *handle, size_t *count); + +/*! + * @brief Gets the number of bytes still not received. + * + * This function gets the number of bytes still not received. + * + * @param base pointer to FLEXIO_UART_Type + * @param handle Pointer to flexio_uart_edma_handle_t structure + * @param count Number of bytes sent so far by the non-blocking transaction. + */ +status_t FLEXIO_UART_TransferGetReceiveCountEDMA(FLEXIO_UART_Type *base, + flexio_uart_edma_handle_t *handle, + size_t *count); + +/*@}*/ + +#if defined(__cplusplus) +} +#endif + +/*! @}*/ + +#endif /* _FSL_UART_EDMA_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_gpio.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_gpio.c new file mode 100644 index 00000000000..8fc068f2d6a --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_gpio.c @@ -0,0 +1,179 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_gpio.h" + +/******************************************************************************* + * Variables + ******************************************************************************/ +static PORT_Type *const s_portBases[] = PORT_BASE_PTRS; +static GPIO_Type *const s_gpioBases[] = GPIO_BASE_PTRS; + +/******************************************************************************* +* Prototypes +******************************************************************************/ + +/*! +* @brief Gets the GPIO instance according to the GPIO base +* +* @param base GPIO peripheral base pointer(PTA, PTB, PTC, etc.) +* @retval GPIO instance +*/ +static uint32_t GPIO_GetInstance(GPIO_Type *base); + +/******************************************************************************* + * Code + ******************************************************************************/ + +static uint32_t GPIO_GetInstance(GPIO_Type *base) +{ + uint32_t instance; + + /* Find the instance index from base address mappings. */ + for (instance = 0; instance < FSL_FEATURE_SOC_GPIO_COUNT; instance++) + { + if (s_gpioBases[instance] == base) + { + break; + } + } + + assert(instance < FSL_FEATURE_SOC_GPIO_COUNT); + + return instance; +} + +void GPIO_PinInit(GPIO_Type *base, uint32_t pin, const gpio_pin_config_t *config) +{ + assert(config); + + if (config->pinDirection == kGPIO_DigitalInput) + { + base->PDDR &= ~(1U << pin); + } + else + { + GPIO_WritePinOutput(base, pin, config->outputLogic); + base->PDDR |= (1U << pin); + } +} + +uint32_t GPIO_GetPinsInterruptFlags(GPIO_Type *base) +{ + uint8_t instance; + PORT_Type *portBase; + instance = GPIO_GetInstance(base); + portBase = s_portBases[instance]; + return portBase->ISFR; +} + +void GPIO_ClearPinsInterruptFlags(GPIO_Type *base, uint32_t mask) +{ + uint8_t instance; + PORT_Type *portBase; + instance = GPIO_GetInstance(base); + portBase = s_portBases[instance]; + portBase->ISFR = mask; +} + +#if defined(FSL_FEATURE_SOC_FGPIO_COUNT) && FSL_FEATURE_SOC_FGPIO_COUNT + +/******************************************************************************* + * Variables + ******************************************************************************/ +static FGPIO_Type *const s_fgpioBases[] = FGPIO_BASE_PTRS; + +/******************************************************************************* +* Prototypes +******************************************************************************/ +/*! +* @brief Gets the FGPIO instance according to the GPIO base +* +* @param base FGPIO peripheral base pointer(PTA, PTB, PTC, etc.) +* @retval FGPIO instance +*/ +static uint32_t FGPIO_GetInstance(FGPIO_Type *base); + +/******************************************************************************* + * Code + ******************************************************************************/ + +static uint32_t FGPIO_GetInstance(FGPIO_Type *base) +{ + uint32_t instance; + + /* Find the instance index from base address mappings. */ + for (instance = 0; instance < FSL_FEATURE_SOC_FGPIO_COUNT; instance++) + { + if (s_fgpioBases[instance] == base) + { + break; + } + } + + assert(instance < FSL_FEATURE_SOC_FGPIO_COUNT); + + return instance; +} + +void FGPIO_PinInit(FGPIO_Type *base, uint32_t pin, const gpio_pin_config_t *config) +{ + assert(config); + + if (config->pinDirection == kGPIO_DigitalInput) + { + base->PDDR &= ~(1U << pin); + } + else + { + FGPIO_WritePinOutput(base, pin, config->outputLogic); + base->PDDR |= (1U << pin); + } +} + +uint32_t FGPIO_GetPinsInterruptFlags(FGPIO_Type *base) +{ + uint8_t instance; + instance = FGPIO_GetInstance(base); + PORT_Type *portBase; + portBase = s_portBases[instance]; + return portBase->ISFR; +} + +void FGPIO_ClearPinsInterruptFlags(FGPIO_Type *base, uint32_t mask) +{ + uint8_t instance; + instance = FGPIO_GetInstance(base); + PORT_Type *portBase; + portBase = s_portBases[instance]; + portBase->ISFR = mask; +} + +#endif /* FSL_FEATURE_SOC_FGPIO_COUNT */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_gpio.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_gpio.h new file mode 100644 index 00000000000..d62545fea1e --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_gpio.h @@ -0,0 +1,389 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SDRVL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _FSL_GPIO_H_ +#define _FSL_GPIO_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup gpio + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief GPIO driver version 2.1.0. */ +#define FSL_GPIO_DRIVER_VERSION (MAKE_VERSION(2, 1, 0)) +/*@}*/ + +/*! @brief GPIO direction definition*/ +typedef enum _gpio_pin_direction +{ + kGPIO_DigitalInput = 0U, /*!< Set current pin as digital input*/ + kGPIO_DigitalOutput = 1U, /*!< Set current pin as digital output*/ +} gpio_pin_direction_t; + +/*! + * @brief The GPIO pin configuration structure. + * + * Every pin can only be configured as either output pin or input pin at a time. + * If configured as a input pin, then leave the outputConfig unused + * Note : In some use cases, the corresponding port property should be configured in advance + * with the PORT_SetPinConfig() + */ +typedef struct _gpio_pin_config +{ + gpio_pin_direction_t pinDirection; /*!< GPIO direction, input or output */ + /* Output configurations, please ignore if configured as a input one */ + uint8_t outputLogic; /*!< Set default output logic, no use in input */ +} gpio_pin_config_t; + +/*! @} */ + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @addtogroup gpio_driver + * @{ + */ + +/*! @name GPIO Configuration */ +/*@{*/ + +/*! + * @brief Initializes a GPIO pin used by the board. + * + * To initialize the GPIO, define a pin configuration, either input or output, in the user file. + * Then, call the GPIO_PinInit() function. + * + * This is an example to define an input pin or output pin configuration: + * @code + * // Define a digital input pin configuration, + * gpio_pin_config_t config = + * { + * kGPIO_DigitalInput, + * 0, + * } + * //Define a digital output pin configuration, + * gpio_pin_config_t config = + * { + * kGPIO_DigitalOutput, + * 0, + * } + * @endcode + * + * @param base GPIO peripheral base pointer(GPIOA, GPIOB, GPIOC, and so on.) + * @param pin GPIO port pin number + * @param config GPIO pin configuration pointer + */ +void GPIO_PinInit(GPIO_Type *base, uint32_t pin, const gpio_pin_config_t *config); + +/*@}*/ + +/*! @name GPIO Output Operations */ +/*@{*/ + +/*! + * @brief Sets the output level of the multiple GPIO pins to the logic 1 or 0. + * + * @param base GPIO peripheral base pointer(GPIOA, GPIOB, GPIOC, and so on.) + * @param pin GPIO pin number + * @param output GPIO pin output logic level. + * - 0: corresponding pin output low-logic level. + * - 1: corresponding pin output high-logic level. + */ +static inline void GPIO_WritePinOutput(GPIO_Type *base, uint32_t pin, uint8_t output) +{ + if (output == 0U) + { + base->PCOR = 1 << pin; + } + else + { + base->PSOR = 1 << pin; + } +} + +/*! + * @brief Sets the output level of the multiple GPIO pins to the logic 1. + * + * @param base GPIO peripheral base pointer(GPIOA, GPIOB, GPIOC, and so on.) + * @param mask GPIO pin number macro + */ +static inline void GPIO_SetPinsOutput(GPIO_Type *base, uint32_t mask) +{ + base->PSOR = mask; +} + +/*! + * @brief Sets the output level of the multiple GPIO pins to the logic 0. + * + * @param base GPIO peripheral base pointer(GPIOA, GPIOB, GPIOC, and so on.) + * @param mask GPIO pin number macro + */ +static inline void GPIO_ClearPinsOutput(GPIO_Type *base, uint32_t mask) +{ + base->PCOR = mask; +} + +/*! + * @brief Reverses current output logic of the multiple GPIO pins. + * + * @param base GPIO peripheral base pointer(GPIOA, GPIOB, GPIOC, and so on.) + * @param mask GPIO pin number macro + */ +static inline void GPIO_TogglePinsOutput(GPIO_Type *base, uint32_t mask) +{ + base->PTOR = mask; +} +/*@}*/ + +/*! @name GPIO Input Operations */ +/*@{*/ + +/*! + * @brief Reads the current input value of the whole GPIO port. + * + * @param base GPIO peripheral base pointer(GPIOA, GPIOB, GPIOC, and so on.) + * @param pin GPIO pin number + * @retval GPIO port input value + * - 0: corresponding pin input low-logic level. + * - 1: corresponding pin input high-logic level. + */ +static inline uint32_t GPIO_ReadPinInput(GPIO_Type *base, uint32_t pin) +{ + return (((base->PDIR) >> pin) & 0x01U); +} +/*@}*/ + +/*! @name GPIO Interrupt */ +/*@{*/ + +/*! + * @brief Reads whole GPIO port interrupt status flag. + * + * If a pin is configured to generate the DMA request, the corresponding flag + * is cleared automatically at the completion of the requested DMA transfer. + * Otherwise, the flag remains set until a logic one is written to that flag. + * If configured for a level sensitive interrupt that remains asserted, the flag + * is set again immediately. + * + * @param base GPIO peripheral base pointer(GPIOA, GPIOB, GPIOC, and so on.) + * @retval Current GPIO port interrupt status flag, for example, 0x00010001 means the + * pin 0 and 17 have the interrupt. + */ +uint32_t GPIO_GetPinsInterruptFlags(GPIO_Type *base); + +/*! + * @brief Clears multiple GPIO pin interrupt status flag. + * + * @param base GPIO peripheral base pointer(GPIOA, GPIOB, GPIOC, and so on.) + * @param mask GPIO pin number macro + */ +void GPIO_ClearPinsInterruptFlags(GPIO_Type *base, uint32_t mask); + +/*@}*/ +/*! @} */ + +/*! + * @addtogroup fgpio_driver + * @{ + */ + +/* + * Introduce the FGPIO feature. + * + * The FGPIO features are only support on some of Kinetis chips. The FGPIO registers are aliased to the IOPORT + * interface. Accesses via the IOPORT interface occur in parallel with any instruction fetches and will therefore + * complete in a single cycle. This aliased Fast GPIO memory map is called FGPIO. + */ + +#if defined(FSL_FEATURE_SOC_FGPIO_COUNT) && FSL_FEATURE_SOC_FGPIO_COUNT + +/*! @name FGPIO Configuration */ +/*@{*/ + +/*! + * @brief Initializes a FGPIO pin used by the board. + * + * To initialize the FGPIO driver, define a pin configuration, either input or output, in the user file. + * Then, call the FGPIO_PinInit() function. + * + * This is an example to define an input pin or output pin configuration: + * @code + * // Define a digital input pin configuration, + * gpio_pin_config_t config = + * { + * kGPIO_DigitalInput, + * 0, + * } + * //Define a digital output pin configuration, + * gpio_pin_config_t config = + * { + * kGPIO_DigitalOutput, + * 0, + * } + * @endcode + * + * @param base FGPIO peripheral base pointer(GPIOA, GPIOB, GPIOC, and so on.) + * @param pin FGPIO port pin number + * @param config FGPIO pin configuration pointer + */ +void FGPIO_PinInit(FGPIO_Type *base, uint32_t pin, const gpio_pin_config_t *config); + +/*@}*/ + +/*! @name FGPIO Output Operations */ +/*@{*/ + +/*! + * @brief Sets the output level of the multiple FGPIO pins to the logic 1 or 0. + * + * @param base FGPIO peripheral base pointer(GPIOA, GPIOB, GPIOC, and so on.) + * @param pin FGPIO pin number + * @param output FGPIOpin output logic level. + * - 0: corresponding pin output low-logic level. + * - 1: corresponding pin output high-logic level. + */ +static inline void FGPIO_WritePinOutput(FGPIO_Type *base, uint32_t pin, uint8_t output) +{ + if (output == 0U) + { + base->PCOR = 1 << pin; + } + else + { + base->PSOR = 1 << pin; + } +} + +/*! + * @brief Sets the output level of the multiple FGPIO pins to the logic 1. + * + * @param base FGPIO peripheral base pointer(GPIOA, GPIOB, GPIOC, and so on.) + * @param mask FGPIO pin number macro + */ +static inline void FGPIO_SetPinsOutput(FGPIO_Type *base, uint32_t mask) +{ + base->PSOR = mask; +} + +/*! + * @brief Sets the output level of the multiple FGPIO pins to the logic 0. + * + * @param base FGPIO peripheral base pointer(GPIOA, GPIOB, GPIOC, and so on.) + * @param mask FGPIO pin number macro + */ +static inline void FGPIO_ClearPinsOutput(FGPIO_Type *base, uint32_t mask) +{ + base->PCOR = mask; +} + +/*! + * @brief Reverses current output logic of the multiple FGPIO pins. + * + * @param base FGPIO peripheral base pointer(GPIOA, GPIOB, GPIOC, and so on.) + * @param mask FGPIO pin number macro + */ +static inline void FGPIO_TogglePinsOutput(FGPIO_Type *base, uint32_t mask) +{ + base->PTOR = mask; +} +/*@}*/ + +/*! @name FGPIO Input Operations */ +/*@{*/ + +/*! + * @brief Reads the current input value of the whole FGPIO port. + * + * @param base FGPIO peripheral base pointer(GPIOA, GPIOB, GPIOC, and so on.) + * @param pin FGPIO pin number + * @retval FGPIO port input value + * - 0: corresponding pin input low-logic level. + * - 1: corresponding pin input high-logic level. + */ +static inline uint32_t FGPIO_ReadPinInput(FGPIO_Type *base, uint32_t pin) +{ + return (((base->PDIR) >> pin) & 0x01U); +} +/*@}*/ + +/*! @name FGPIO Interrupt */ +/*@{*/ + +/*! + * @brief Reads the whole FGPIO port interrupt status flag. + * + * If a pin is configured to generate the DMA request, the corresponding flag + * is cleared automatically at the completion of the requested DMA transfer. + * Otherwise, the flag remains set until a logic one is written to that flag. + * If configured for a level sensitive interrupt that remains asserted, the flag + * is set again immediately. + * + * @param base FGPIO peripheral base pointer(GPIOA, GPIOB, GPIOC, and so on.) + * @retval Current FGPIO port interrupt status flags, for example, 0x00010001 means the + * pin 0 and 17 have the interrupt. + */ +uint32_t FGPIO_GetPinsInterruptFlags(FGPIO_Type *base); + +/*! + * @brief Clears the multiple FGPIO pin interrupt status flag. + * + * @param base FGPIO peripheral base pointer(GPIOA, GPIOB, GPIOC, and so on.) + * @param mask FGPIO pin number macro + */ +void FGPIO_ClearPinsInterruptFlags(FGPIO_Type *base, uint32_t mask); + +/*@}*/ + +#endif /* FSL_FEATURE_SOC_FGPIO_COUNT */ + +#if defined(__cplusplus) +} +#endif + +/*! + * @} + */ + +#endif /* _FSL_GPIO_H_*/ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_i2c.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_i2c.c new file mode 100644 index 00000000000..b51fc07a151 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_i2c.c @@ -0,0 +1,1633 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "fsl_i2c.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @brief i2c transfer state. */ +enum _i2c_transfer_states +{ + kIdleState = 0x0U, /*!< I2C bus idle. */ + kCheckAddressState = 0x1U, /*!< 7-bit address check state. */ + kSendCommandState = 0x2U, /*!< Send command byte phase. */ + kSendDataState = 0x3U, /*!< Send data transfer phase. */ + kReceiveDataBeginState = 0x4U, /*!< Receive data transfer phase begin. */ + kReceiveDataState = 0x5U, /*!< Receive data transfer phase. */ +}; + +/*! @brief Common sets of flags used by the driver. */ +enum _i2c_flag_constants +{ +/*! All flags which are cleared by the driver upon starting a transfer. */ +#if defined(FSL_FEATURE_I2C_HAS_START_STOP_DETECT) && FSL_FEATURE_I2C_HAS_START_STOP_DETECT + kClearFlags = kI2C_ArbitrationLostFlag | kI2C_IntPendingFlag | kI2C_StartDetectFlag | kI2C_StopDetectFlag, + kIrqFlags = kI2C_GlobalInterruptEnable | kI2C_StartStopDetectInterruptEnable, +#elif defined(FSL_FEATURE_I2C_HAS_STOP_DETECT) && FSL_FEATURE_I2C_HAS_STOP_DETECT + kClearFlags = kI2C_ArbitrationLostFlag | kI2C_IntPendingFlag | kI2C_StopDetectFlag, + kIrqFlags = kI2C_GlobalInterruptEnable | kI2C_StopDetectInterruptEnable, +#else + kClearFlags = kI2C_ArbitrationLostFlag | kI2C_IntPendingFlag, + kIrqFlags = kI2C_GlobalInterruptEnable, +#endif + +}; + +/*! @brief Typedef for interrupt handler. */ +typedef void (*i2c_isr_t)(I2C_Type *base, void *i2cHandle); + +/******************************************************************************* + * Prototypes + ******************************************************************************/ + +/*! + * @brief Get instance number for I2C module. + * + * @param base I2C peripheral base address. + */ +uint32_t I2C_GetInstance(I2C_Type *base); + +/*! + * @brief Set up master transfer, send slave address and decide the initial + * transfer state. + * + * @param base I2C peripheral base address. + * @param handle pointer to i2c_master_handle_t structure which stores the transfer state. + * @param xfer pointer to i2c_master_transfer_t structure. + */ +static status_t I2C_InitTransferStateMachine(I2C_Type *base, i2c_master_handle_t *handle, i2c_master_transfer_t *xfer); + +/*! + * @brief Check and clear status operation. + * + * @param base I2C peripheral base address. + * @param status current i2c hardware status. + * @retval kStatus_Success No error found. + * @retval kStatus_I2C_ArbitrationLost Transfer error, arbitration lost. + * @retval kStatus_I2C_Nak Received Nak error. + */ +static status_t I2C_CheckAndClearError(I2C_Type *base, uint32_t status); + +/*! + * @brief Master run transfer state machine to perform a byte of transfer. + * + * @param base I2C peripheral base address. + * @param handle pointer to i2c_master_handle_t structure which stores the transfer state + * @param isDone input param to get whether the thing is done, true is done + * @retval kStatus_Success No error found. + * @retval kStatus_I2C_ArbitrationLost Transfer error, arbitration lost. + * @retval kStatus_I2C_Nak Received Nak error. + * @retval kStatus_I2C_Timeout Transfer error, wait signal timeout. + */ +static status_t I2C_MasterTransferRunStateMachine(I2C_Type *base, i2c_master_handle_t *handle, bool *isDone); + +/*! + * @brief I2C common interrupt handler. + * + * @param base I2C peripheral base address. + * @param handle pointer to i2c_master_handle_t structure which stores the transfer state + */ +static void I2C_TransferCommonIRQHandler(I2C_Type *base, void *handle); + +/******************************************************************************* + * Variables + ******************************************************************************/ + +/*! @brief Pointers to i2c handles for each instance. */ +static void *s_i2cHandle[FSL_FEATURE_SOC_I2C_COUNT] = {NULL}; + +/*! @brief SCL clock divider used to calculate baudrate. */ +static const uint16_t s_i2cDividerTable[] = { + 20, 22, 24, 26, 28, 30, 34, 40, 28, 32, 36, 40, 44, 48, 56, 68, + 48, 56, 64, 72, 80, 88, 104, 128, 80, 96, 112, 128, 144, 160, 192, 240, + 160, 192, 224, 256, 288, 320, 384, 480, 320, 384, 448, 512, 576, 640, 768, 960, + 640, 768, 896, 1024, 1152, 1280, 1536, 1920, 1280, 1536, 1792, 2048, 2304, 2560, 3072, 3840}; + +/*! @brief Pointers to i2c bases for each instance. */ +static I2C_Type *const s_i2cBases[] = I2C_BASE_PTRS; + +/*! @brief Pointers to i2c IRQ number for each instance. */ +static const IRQn_Type s_i2cIrqs[] = I2C_IRQS; + +/*! @brief Pointers to i2c clocks for each instance. */ +static const clock_ip_name_t s_i2cClocks[] = I2C_CLOCKS; + +/*! @brief Pointer to master IRQ handler for each instance. */ +static i2c_isr_t s_i2cMasterIsr; + +/*! @brief Pointer to slave IRQ handler for each instance. */ +static i2c_isr_t s_i2cSlaveIsr; + +/******************************************************************************* + * Codes + ******************************************************************************/ + +uint32_t I2C_GetInstance(I2C_Type *base) +{ + uint32_t instance; + + /* Find the instance index from base address mappings. */ + for (instance = 0; instance < FSL_FEATURE_SOC_I2C_COUNT; instance++) + { + if (s_i2cBases[instance] == base) + { + break; + } + } + + assert(instance < FSL_FEATURE_SOC_I2C_COUNT); + + return instance; +} + +static status_t I2C_InitTransferStateMachine(I2C_Type *base, i2c_master_handle_t *handle, i2c_master_transfer_t *xfer) +{ + status_t result = kStatus_Success; + i2c_direction_t direction = xfer->direction; + uint16_t timeout = UINT16_MAX; + + /* Initialize the handle transfer information. */ + handle->transfer = *xfer; + + /* Save total transfer size. */ + handle->transferSize = xfer->dataSize; + + /* Initial transfer state. */ + if (handle->transfer.subaddressSize > 0) + { + handle->state = kSendCommandState; + if (xfer->direction == kI2C_Read) + { + direction = kI2C_Write; + } + } + else + { + handle->state = kCheckAddressState; + } + + /* Wait until the data register is ready for transmit. */ + while ((!(base->S & kI2C_TransferCompleteFlag)) && (--timeout)) + { + } + + /* Failed to start the transfer. */ + if (timeout == 0) + { + return kStatus_I2C_Timeout; + } + + /* Clear all status before transfer. */ + I2C_MasterClearStatusFlags(base, kClearFlags); + + /* If repeated start is requested, send repeated start. */ + if (handle->transfer.flags & kI2C_TransferRepeatedStartFlag) + { + result = I2C_MasterRepeatedStart(base, handle->transfer.slaveAddress, direction); + } + else /* For normal transfer, send start. */ + { + result = I2C_MasterStart(base, handle->transfer.slaveAddress, direction); + } + + return result; +} + +static status_t I2C_CheckAndClearError(I2C_Type *base, uint32_t status) +{ + status_t result = kStatus_Success; + + /* Check arbitration lost. */ + if (status & kI2C_ArbitrationLostFlag) + { + /* Clear arbitration lost flag. */ + base->S = kI2C_ArbitrationLostFlag; + result = kStatus_I2C_ArbitrationLost; + } + /* Check NAK */ + else if (status & kI2C_ReceiveNakFlag) + { + result = kStatus_I2C_Nak; + } + else + { + } + + return result; +} + +static status_t I2C_MasterTransferRunStateMachine(I2C_Type *base, i2c_master_handle_t *handle, bool *isDone) +{ + status_t result = kStatus_Success; + uint32_t statusFlags = base->S; + *isDone = false; + volatile uint8_t dummy = 0; + bool ignoreNak = ((handle->state == kSendDataState) && (handle->transfer.dataSize == 0U)) || + ((handle->state == kReceiveDataState) && (handle->transfer.dataSize == 1U)); + + /* Add this to avoid build warning. */ + dummy++; + + /* Check & clear error flags. */ + result = I2C_CheckAndClearError(base, statusFlags); + + /* Ignore Nak when it's appeared for last byte. */ + if ((result == kStatus_I2C_Nak) && ignoreNak) + { + result = kStatus_Success; + } + + if (result) + { + return result; + } + + /* Handle Check address state to check the slave address is Acked in slave + probe application. */ + if (handle->state == kCheckAddressState) + { + if (statusFlags & kI2C_ReceiveNakFlag) + { + return kStatus_I2C_Nak; + } + else + { + if (handle->transfer.direction == kI2C_Write) + { + /* Next state, send data. */ + handle->state = kSendDataState; + } + else + { + /* Next state, receive data begin. */ + handle->state = kReceiveDataBeginState; + } + } + } + + /* Run state machine. */ + switch (handle->state) + { + /* Send I2C command. */ + case kSendCommandState: + if (handle->transfer.subaddressSize) + { + handle->transfer.subaddressSize--; + base->D = ((handle->transfer.subaddress) >> (8 * handle->transfer.subaddressSize)); + } + else + { + if (handle->transfer.direction == kI2C_Write) + { + /* Next state, send data. */ + handle->state = kSendDataState; + + /* Send first byte of data. */ + if (handle->transfer.dataSize > 0) + { + base->D = *handle->transfer.data; + handle->transfer.data++; + handle->transfer.dataSize--; + } + } + else + { + /* Send repeated start and slave address. */ + result = I2C_MasterRepeatedStart(base, handle->transfer.slaveAddress, kI2C_Read); + + /* Next state, receive data begin. */ + handle->state = kReceiveDataBeginState; + } + } + break; + + /* Send I2C data. */ + case kSendDataState: + /* Send one byte of data. */ + if (handle->transfer.dataSize > 0) + { + base->D = *handle->transfer.data; + handle->transfer.data++; + handle->transfer.dataSize--; + } + else + { + *isDone = true; + } + break; + + /* Start I2C data receive. */ + case kReceiveDataBeginState: + base->C1 &= ~(I2C_C1_TX_MASK | I2C_C1_TXAK_MASK); + + /* Send nak at the last receive byte. */ + if (handle->transfer.dataSize == 1) + { + base->C1 |= I2C_C1_TXAK_MASK; + } + + /* Read dummy to release the bus. */ + dummy = base->D; + + /* Next state, receive data. */ + handle->state = kReceiveDataState; + break; + + /* Receive I2C data. */ + case kReceiveDataState: + /* Receive one byte of data. */ + if (handle->transfer.dataSize--) + { + if (handle->transfer.dataSize == 0) + { + *isDone = true; + + /* Send stop if kI2C_TransferNoStop is not asserted. */ + if (!(handle->transfer.flags & kI2C_TransferNoStopFlag)) + { + result = I2C_MasterStop(base); + } + } + + /* Send NAK at the last receive byte. */ + if (handle->transfer.dataSize == 1) + { + base->C1 |= I2C_C1_TXAK_MASK; + } + + /* Read the data byte into the transfer buffer. */ + *handle->transfer.data = base->D; + handle->transfer.data++; + } + break; + + default: + break; + } + + return result; +} + +static void I2C_TransferCommonIRQHandler(I2C_Type *base, void *handle) +{ + /* Check if master interrupt. */ + if ((base->S & kI2C_ArbitrationLostFlag) || (base->C1 & I2C_C1_MST_MASK)) + { + s_i2cMasterIsr(base, handle); + } + else + { + s_i2cSlaveIsr(base, handle); + } +} + +void I2C_MasterInit(I2C_Type *base, const i2c_master_config_t *masterConfig, uint32_t srcClock_Hz) +{ + assert(masterConfig && srcClock_Hz); + + /* Temporary register for filter read. */ + uint8_t fltReg; +#if defined(FSL_FEATURE_I2C_HAS_HIGH_DRIVE_SELECTION) && FSL_FEATURE_I2C_HAS_HIGH_DRIVE_SELECTION + uint8_t c2Reg; +#endif +#if defined(FSL_FEATURE_I2C_HAS_DOUBLE_BUFFER_ENABLE) && FSL_FEATURE_I2C_HAS_DOUBLE_BUFFER_ENABLE + uint8_t s2Reg; +#endif + /* Enable I2C clock. */ + CLOCK_EnableClock(s_i2cClocks[I2C_GetInstance(base)]); + + /* Disable I2C prior to configuring it. */ + base->C1 &= ~(I2C_C1_IICEN_MASK); + + /* Clear all flags. */ + I2C_MasterClearStatusFlags(base, kClearFlags); + + /* Configure baud rate. */ + I2C_MasterSetBaudRate(base, masterConfig->baudRate_Bps, srcClock_Hz); + +#if defined(FSL_FEATURE_I2C_HAS_HIGH_DRIVE_SELECTION) && FSL_FEATURE_I2C_HAS_HIGH_DRIVE_SELECTION + /* Configure high drive feature. */ + c2Reg = base->C2; + c2Reg &= ~(I2C_C2_HDRS_MASK); + c2Reg |= I2C_C2_HDRS(masterConfig->enableHighDrive); + base->C2 = c2Reg; +#endif + + /* Read out the FLT register. */ + fltReg = base->FLT; + +#if defined(FSL_FEATURE_I2C_HAS_STOP_HOLD_OFF) && FSL_FEATURE_I2C_HAS_STOP_HOLD_OFF + /* Configure the stop / hold enable. */ + fltReg &= ~(I2C_FLT_SHEN_MASK); + fltReg |= I2C_FLT_SHEN(masterConfig->enableStopHold); +#endif + + /* Configure the glitch filter value. */ + fltReg &= ~(I2C_FLT_FLT_MASK); + fltReg |= I2C_FLT_FLT(masterConfig->glitchFilterWidth); + + /* Write the register value back to the filter register. */ + base->FLT = fltReg; + +/* Enable/Disable double buffering. */ +#if defined(FSL_FEATURE_I2C_HAS_DOUBLE_BUFFER_ENABLE) && FSL_FEATURE_I2C_HAS_DOUBLE_BUFFER_ENABLE + s2Reg = base->S2 & (~I2C_S2_DFEN_MASK); + base->S2 = s2Reg | I2C_S2_DFEN(masterConfig->enableDoubleBuffering); +#endif + + /* Enable the I2C peripheral based on the configuration. */ + base->C1 = I2C_C1_IICEN(masterConfig->enableMaster); +} + +void I2C_MasterDeinit(I2C_Type *base) +{ + /* Disable I2C module. */ + I2C_Enable(base, false); + + /* Disable I2C clock. */ + CLOCK_DisableClock(s_i2cClocks[I2C_GetInstance(base)]); +} + +void I2C_MasterGetDefaultConfig(i2c_master_config_t *masterConfig) +{ + assert(masterConfig); + + /* Default baud rate at 100kbps. */ + masterConfig->baudRate_Bps = 100000U; + +/* Default pin high drive is disabled. */ +#if defined(FSL_FEATURE_I2C_HAS_HIGH_DRIVE_SELECTION) && FSL_FEATURE_I2C_HAS_HIGH_DRIVE_SELECTION + masterConfig->enableHighDrive = false; +#endif + +/* Default stop hold enable is disabled. */ +#if defined(FSL_FEATURE_I2C_HAS_STOP_HOLD_OFF) && FSL_FEATURE_I2C_HAS_STOP_HOLD_OFF + masterConfig->enableStopHold = false; +#endif + + /* Default glitch filter value is no filter. */ + masterConfig->glitchFilterWidth = 0U; + +/* Default enable double buffering. */ +#if defined(FSL_FEATURE_I2C_HAS_DOUBLE_BUFFER_ENABLE) && FSL_FEATURE_I2C_HAS_DOUBLE_BUFFER_ENABLE + masterConfig->enableDoubleBuffering = true; +#endif + + /* Enable the I2C peripheral. */ + masterConfig->enableMaster = true; +} + +void I2C_EnableInterrupts(I2C_Type *base, uint32_t mask) +{ +#ifdef I2C_HAS_STOP_DETECT + uint8_t fltReg; +#endif + + if (mask & kI2C_GlobalInterruptEnable) + { + base->C1 |= I2C_C1_IICIE_MASK; + } + +#if defined(FSL_FEATURE_I2C_HAS_STOP_DETECT) && FSL_FEATURE_I2C_HAS_STOP_DETECT + if (mask & kI2C_StopDetectInterruptEnable) + { + fltReg = base->FLT; + + /* Keep STOPF flag. */ + fltReg &= ~I2C_FLT_STOPF_MASK; + + /* Stop detect enable. */ + fltReg |= I2C_FLT_STOPIE_MASK; + base->FLT = fltReg; + } +#endif /* FSL_FEATURE_I2C_HAS_STOP_DETECT */ + +#if defined(FSL_FEATURE_I2C_HAS_START_STOP_DETECT) && FSL_FEATURE_I2C_HAS_START_STOP_DETECT + if (mask & kI2C_StartStopDetectInterruptEnable) + { + fltReg = base->FLT; + + /* Keep STARTF and STOPF flags. */ + fltReg &= ~(I2C_FLT_STOPF_MASK | I2C_FLT_STARTF_MASK); + + /* Start and stop detect enable. */ + fltReg |= I2C_FLT_SSIE_MASK; + base->FLT = fltReg; + } +#endif /* FSL_FEATURE_I2C_HAS_START_STOP_DETECT */ +} + +void I2C_DisableInterrupts(I2C_Type *base, uint32_t mask) +{ + if (mask & kI2C_GlobalInterruptEnable) + { + base->C1 &= ~I2C_C1_IICIE_MASK; + } + +#if defined(FSL_FEATURE_I2C_HAS_STOP_DETECT) && FSL_FEATURE_I2C_HAS_STOP_DETECT + if (mask & kI2C_StopDetectInterruptEnable) + { + base->FLT &= ~(I2C_FLT_STOPIE_MASK | I2C_FLT_STOPF_MASK); + } +#endif /* FSL_FEATURE_I2C_HAS_STOP_DETECT */ + +#if defined(FSL_FEATURE_I2C_HAS_START_STOP_DETECT) && FSL_FEATURE_I2C_HAS_START_STOP_DETECT + if (mask & kI2C_StartStopDetectInterruptEnable) + { + base->FLT &= ~(I2C_FLT_SSIE_MASK | I2C_FLT_STOPF_MASK | I2C_FLT_STARTF_MASK); + } +#endif /* FSL_FEATURE_I2C_HAS_START_STOP_DETECT */ +} + +void I2C_MasterSetBaudRate(I2C_Type *base, uint32_t baudRate_Bps, uint32_t srcClock_Hz) +{ + uint32_t multiplier; + uint32_t computedRate; + uint32_t absError; + uint32_t bestError = UINT32_MAX; + uint32_t bestMult = 0u; + uint32_t bestIcr = 0u; + uint8_t mult; + uint8_t i; + + /* Search for the settings with the lowest error. Mult is the MULT field of the I2C_F register, + * and ranges from 0-2. It selects the multiplier factor for the divider. */ + for (mult = 0u; (mult <= 2u) && (bestError != 0); ++mult) + { + multiplier = 1u << mult; + + /* Scan table to find best match. */ + for (i = 0u; i < sizeof(s_i2cDividerTable) / sizeof(uint16_t); ++i) + { + computedRate = srcClock_Hz / (multiplier * s_i2cDividerTable[i]); + absError = baudRate_Bps > computedRate ? (baudRate_Bps - computedRate) : (computedRate - baudRate_Bps); + + if (absError < bestError) + { + bestMult = mult; + bestIcr = i; + bestError = absError; + + /* If the error is 0, then we can stop searching because we won't find a better match. */ + if (absError == 0) + { + break; + } + } + } + } + + /* Set frequency register based on best settings. */ + base->F = I2C_F_MULT(bestMult) | I2C_F_ICR(bestIcr); +} + +status_t I2C_MasterStart(I2C_Type *base, uint8_t address, i2c_direction_t direction) +{ + status_t result = kStatus_Success; + uint32_t statusFlags = I2C_MasterGetStatusFlags(base); + + /* Return an error if the bus is already in use. */ + if (statusFlags & kI2C_BusBusyFlag) + { + result = kStatus_I2C_Busy; + } + else + { + /* Send the START signal. */ + base->C1 |= I2C_C1_MST_MASK | I2C_C1_TX_MASK; + +#if defined(FSL_FEATURE_I2C_HAS_DOUBLE_BUFFERING) && FSL_FEATURE_I2C_HAS_DOUBLE_BUFFERING + while (!(base->S2 & I2C_S2_EMPTY_MASK)) + { + } +#endif /* FSL_FEATURE_I2C_HAS_DOUBLE_BUFFERING */ + + base->D = (((uint32_t)address) << 1U | ((direction == kI2C_Read) ? 1U : 0U)); + } + + return result; +} + +status_t I2C_MasterRepeatedStart(I2C_Type *base, uint8_t address, i2c_direction_t direction) +{ + status_t result = kStatus_Success; + uint8_t savedMult; + uint32_t statusFlags = I2C_MasterGetStatusFlags(base); + uint8_t timeDelay = 6; + + /* Return an error if the bus is already in use, but not by us. */ + if ((statusFlags & kI2C_BusBusyFlag) && ((base->C1 & I2C_C1_MST_MASK) == 0)) + { + result = kStatus_I2C_Busy; + } + else + { + savedMult = base->F; + base->F = savedMult & (~I2C_F_MULT_MASK); + + /* We are already in a transfer, so send a repeated start. */ + base->C1 |= I2C_C1_RSTA_MASK; + + /* Restore the multiplier factor. */ + base->F = savedMult; + + /* Add some delay to wait the Re-Start signal. */ + while (timeDelay--) + { + __NOP(); + } + +#if defined(FSL_FEATURE_I2C_HAS_DOUBLE_BUFFERING) && FSL_FEATURE_I2C_HAS_DOUBLE_BUFFERING + while (!(base->S2 & I2C_S2_EMPTY_MASK)) + { + } +#endif /* FSL_FEATURE_I2C_HAS_DOUBLE_BUFFERING */ + + base->D = (((uint32_t)address) << 1U | ((direction == kI2C_Read) ? 1U : 0U)); + } + + return result; +} + +status_t I2C_MasterStop(I2C_Type *base) +{ + status_t result = kStatus_Success; + uint16_t timeout = UINT16_MAX; + + /* Issue the STOP command on the bus. */ + base->C1 &= ~(I2C_C1_MST_MASK | I2C_C1_TX_MASK | I2C_C1_TXAK_MASK); + + /* Wait until data transfer complete. */ + while ((base->S & kI2C_BusBusyFlag) && (--timeout)) + { + } + + if (timeout == 0) + { + result = kStatus_I2C_Timeout; + } + + return result; +} + +uint32_t I2C_MasterGetStatusFlags(I2C_Type *base) +{ + uint32_t statusFlags = base->S; + +#ifdef I2C_HAS_STOP_DETECT + /* Look up the STOPF bit from the filter register. */ + if (base->FLT & I2C_FLT_STOPF_MASK) + { + statusFlags |= kI2C_StopDetectFlag; + } +#endif + +#if defined(FSL_FEATURE_I2C_HAS_START_STOP_DETECT) && FSL_FEATURE_I2C_HAS_START_STOP_DETECT + /* Look up the STARTF bit from the filter register. */ + if (base->FLT & I2C_FLT_STARTF_MASK) + { + statusFlags |= kI2C_StartDetectFlag; + } +#endif /* FSL_FEATURE_I2C_HAS_START_STOP_DETECT */ + + return statusFlags; +} + +status_t I2C_MasterWriteBlocking(I2C_Type *base, const uint8_t *txBuff, size_t txSize) +{ + status_t result = kStatus_Success; + uint8_t statusFlags = 0; + + /* Wait until the data register is ready for transmit. */ + while (!(base->S & kI2C_TransferCompleteFlag)) + { + } + + /* Clear the IICIF flag. */ + base->S = kI2C_IntPendingFlag; + + /* Setup the I2C peripheral to transmit data. */ + base->C1 |= I2C_C1_TX_MASK; + + while (txSize--) + { + /* Send a byte of data. */ + base->D = *txBuff++; + + /* Wait until data transfer complete. */ + while (!(base->S & kI2C_IntPendingFlag)) + { + } + + statusFlags = base->S; + + /* Clear the IICIF flag. */ + base->S = kI2C_IntPendingFlag; + + /* Check if arbitration lost or no acknowledgement (NAK), return failure status. */ + if (statusFlags & kI2C_ArbitrationLostFlag) + { + base->S = kI2C_ArbitrationLostFlag; + result = kStatus_I2C_ArbitrationLost; + } + + if ((statusFlags & kI2C_ReceiveNakFlag) && txSize) + { + base->S = kI2C_ReceiveNakFlag; + result = kStatus_I2C_Nak; + } + + if (result != kStatus_Success) + { + /* Breaking out of the send loop. */ + break; + } + } + + return result; +} + +status_t I2C_MasterReadBlocking(I2C_Type *base, uint8_t *rxBuff, size_t rxSize) +{ + status_t result = kStatus_Success; + volatile uint8_t dummy = 0; + + /* Add this to avoid build warning. */ + dummy++; + + /* Wait until the data register is ready for transmit. */ + while (!(base->S & kI2C_TransferCompleteFlag)) + { + } + + /* Clear the IICIF flag. */ + base->S = kI2C_IntPendingFlag; + + /* Setup the I2C peripheral to receive data. */ + base->C1 &= ~(I2C_C1_TX_MASK | I2C_C1_TXAK_MASK); + + /* If rxSize equals 1, configure to send NAK. */ + if (rxSize == 1) + { + /* Issue NACK on read. */ + base->C1 |= I2C_C1_TXAK_MASK; + } + + /* Do dummy read. */ + dummy = base->D; + + while ((rxSize--)) + { + /* Wait until data transfer complete. */ + while (!(base->S & kI2C_IntPendingFlag)) + { + } + + /* Clear the IICIF flag. */ + base->S = kI2C_IntPendingFlag; + + /* Single byte use case. */ + if (rxSize == 0) + { + /* Read the final byte. */ + result = I2C_MasterStop(base); + } + + if (rxSize == 1) + { + /* Issue NACK on read. */ + base->C1 |= I2C_C1_TXAK_MASK; + } + + /* Read from the data register. */ + *rxBuff++ = base->D; + } + + return result; +} + +status_t I2C_MasterTransferBlocking(I2C_Type *base, i2c_master_transfer_t *xfer) +{ + assert(xfer); + + i2c_direction_t direction = xfer->direction; + status_t result = kStatus_Success; + + /* Clear all status before transfer. */ + I2C_MasterClearStatusFlags(base, kClearFlags); + + /* Wait until ready to complete. */ + while (!(base->S & kI2C_TransferCompleteFlag)) + { + } + + /* Change to send write address when it's a read operation with command. */ + if ((xfer->subaddressSize > 0) && (xfer->direction == kI2C_Read)) + { + direction = kI2C_Write; + } + + /* If repeated start is requested, send repeated start. */ + if (xfer->flags & kI2C_TransferRepeatedStartFlag) + { + result = I2C_MasterRepeatedStart(base, xfer->slaveAddress, direction); + } + else /* For normal transfer, send start. */ + { + result = I2C_MasterStart(base, xfer->slaveAddress, direction); + } + + /* Return if error. */ + if (result) + { + return result; + } + + /* Send subaddress. */ + if (xfer->subaddressSize) + { + do + { + /* Wait until data transfer complete. */ + while (!(base->S & kI2C_IntPendingFlag)) + { + } + + /* Clear interrupt pending flag. */ + base->S = kI2C_IntPendingFlag; + + /* Check if there's transfer error. */ + result = I2C_CheckAndClearError(base, base->S); + + if (result) + { + if (result == kStatus_I2C_Nak) + { + I2C_MasterStop(base); + } + + return result; + } + + xfer->subaddressSize--; + base->D = ((xfer->subaddress) >> (8 * xfer->subaddressSize)); + + } while ((xfer->subaddressSize > 0) && (result == kStatus_Success)); + + if (xfer->direction == kI2C_Read) + { + /* Wait until data transfer complete. */ + while (!(base->S & kI2C_IntPendingFlag)) + { + } + + /* Clear pending flag. */ + base->S = kI2C_IntPendingFlag; + + /* Check if there's transfer error. */ + result = I2C_CheckAndClearError(base, base->S); + + if (result) + { + if (result == kStatus_I2C_Nak) + { + I2C_MasterStop(base); + } + + return result; + } + + /* Send repeated start and slave address. */ + result = I2C_MasterRepeatedStart(base, xfer->slaveAddress, kI2C_Read); + + /* Return if error. */ + if (result) + { + return result; + } + } + } + + /* Wait until address + command transfer complete. */ + while (!(base->S & kI2C_IntPendingFlag)) + { + } + + /* Check if there's transfer error. */ + result = I2C_CheckAndClearError(base, base->S); + + /* Return if error. */ + if (result) + { + if (result == kStatus_I2C_Nak) + { + I2C_MasterStop(base); + } + + return result; + } + + /* Transmit data. */ + if ((xfer->direction == kI2C_Write) && (xfer->dataSize > 0)) + { + /* Send Data. */ + result = I2C_MasterWriteBlocking(base, xfer->data, xfer->dataSize); + + if (((result == kStatus_Success) && (!(xfer->flags & kI2C_TransferNoStopFlag))) || (result == kStatus_I2C_Nak)) + { + /* Clear the IICIF flag. */ + base->S = kI2C_IntPendingFlag; + + /* Send stop. */ + result = I2C_MasterStop(base); + } + } + + /* Receive Data. */ + if ((xfer->direction == kI2C_Read) && (xfer->dataSize > 0)) + { + result = I2C_MasterReadBlocking(base, xfer->data, xfer->dataSize); + } + + return result; +} + +void I2C_MasterTransferCreateHandle(I2C_Type *base, + i2c_master_handle_t *handle, + i2c_master_transfer_callback_t callback, + void *userData) +{ + assert(handle); + + uint32_t instance = I2C_GetInstance(base); + + /* Zero handle. */ + memset(handle, 0, sizeof(*handle)); + + /* Set callback and userData. */ + handle->completionCallback = callback; + handle->userData = userData; + + /* Save the context in global variables to support the double weak mechanism. */ + s_i2cHandle[instance] = handle; + + /* Save master interrupt handler. */ + s_i2cMasterIsr = I2C_MasterTransferHandleIRQ; + + /* Enable NVIC interrupt. */ + EnableIRQ(s_i2cIrqs[instance]); +} + +status_t I2C_MasterTransferNonBlocking(I2C_Type *base, i2c_master_handle_t *handle, i2c_master_transfer_t *xfer) +{ + assert(handle); + assert(xfer); + + status_t result = kStatus_Success; + + /* Check if the I2C bus is idle - if not return busy status. */ + if (handle->state != kIdleState) + { + result = kStatus_I2C_Busy; + } + else + { + /* Start up the master transfer state machine. */ + result = I2C_InitTransferStateMachine(base, handle, xfer); + + if (result == kStatus_Success) + { + /* Enable the I2C interrupts. */ + I2C_EnableInterrupts(base, kI2C_GlobalInterruptEnable); + } + } + + return result; +} + +void I2C_MasterTransferAbort(I2C_Type *base, i2c_master_handle_t *handle) +{ + assert(handle); + + /* Disable interrupt. */ + I2C_DisableInterrupts(base, kI2C_GlobalInterruptEnable); + + /* Reset the state to idle. */ + handle->state = kIdleState; +} + +status_t I2C_MasterTransferGetCount(I2C_Type *base, i2c_master_handle_t *handle, size_t *count) +{ + assert(handle); + + if (!count) + { + return kStatus_InvalidArgument; + } + + *count = handle->transferSize - handle->transfer.dataSize; + + return kStatus_Success; +} + +void I2C_MasterTransferHandleIRQ(I2C_Type *base, void *i2cHandle) +{ + assert(i2cHandle); + + i2c_master_handle_t *handle = (i2c_master_handle_t *)i2cHandle; + status_t result = kStatus_Success; + bool isDone; + + /* Clear the interrupt flag. */ + base->S = kI2C_IntPendingFlag; + + /* Check transfer complete flag. */ + result = I2C_MasterTransferRunStateMachine(base, handle, &isDone); + + if (isDone || result) + { + /* Send stop command if transfer done or received Nak. */ + if ((!(handle->transfer.flags & kI2C_TransferNoStopFlag)) || (result == kStatus_I2C_Nak)) + { + /* Ensure stop command is a need. */ + if ((base->C1 & I2C_C1_MST_MASK)) + { + if (I2C_MasterStop(base) != kStatus_Success) + { + result = kStatus_I2C_Timeout; + } + } + } + + /* Restore handle to idle state. */ + handle->state = kIdleState; + + /* Disable interrupt. */ + I2C_DisableInterrupts(base, kI2C_GlobalInterruptEnable); + + /* Call the callback function after the function has completed. */ + if (handle->completionCallback) + { + handle->completionCallback(base, handle, result, handle->userData); + } + } +} + +void I2C_SlaveInit(I2C_Type *base, const i2c_slave_config_t *slaveConfig) +{ + assert(slaveConfig); + + uint8_t tmpReg; + + CLOCK_EnableClock(s_i2cClocks[I2C_GetInstance(base)]); + + /* Configure addressing mode. */ + switch (slaveConfig->addressingMode) + { + case kI2C_Address7bit: + base->A1 = ((uint32_t)(slaveConfig->slaveAddress)) << 1U; + break; + + case kI2C_RangeMatch: + assert(slaveConfig->slaveAddress < slaveConfig->upperAddress); + base->A1 = ((uint32_t)(slaveConfig->slaveAddress)) << 1U; + base->RA = ((uint32_t)(slaveConfig->upperAddress)) << 1U; + base->C2 |= I2C_C2_RMEN_MASK; + break; + + default: + break; + } + + /* Configure low power wake up feature. */ + tmpReg = base->C1; + tmpReg &= ~I2C_C1_WUEN_MASK; + base->C1 = tmpReg | I2C_C1_WUEN(slaveConfig->enableWakeUp) | I2C_C1_IICEN(slaveConfig->enableSlave); + + /* Configure general call & baud rate control & high drive feature. */ + tmpReg = base->C2; + tmpReg &= ~(I2C_C2_SBRC_MASK | I2C_C2_GCAEN_MASK); + tmpReg |= I2C_C2_SBRC(slaveConfig->enableBaudRateCtl) | I2C_C2_GCAEN(slaveConfig->enableGeneralCall); +#if defined(FSL_FEATURE_I2C_HAS_HIGH_DRIVE_SELECTION) && FSL_FEATURE_I2C_HAS_HIGH_DRIVE_SELECTION + tmpReg &= ~I2C_C2_HDRS_MASK; + tmpReg |= I2C_C2_HDRS(slaveConfig->enableHighDrive); +#endif + base->C2 = tmpReg; + +/* Enable/Disable double buffering. */ +#if defined(FSL_FEATURE_I2C_HAS_DOUBLE_BUFFER_ENABLE) && FSL_FEATURE_I2C_HAS_DOUBLE_BUFFER_ENABLE + tmpReg = base->S2 & (~I2C_S2_DFEN_MASK); + base->S2 = tmpReg | I2C_S2_DFEN(slaveConfig->enableDoubleBuffering); +#endif +} + +void I2C_SlaveDeinit(I2C_Type *base) +{ + /* Disable I2C module. */ + I2C_Enable(base, false); + + /* Disable I2C clock. */ + CLOCK_DisableClock(s_i2cClocks[I2C_GetInstance(base)]); +} + +void I2C_SlaveGetDefaultConfig(i2c_slave_config_t *slaveConfig) +{ + assert(slaveConfig); + + /* By default slave is addressed with 7-bit address. */ + slaveConfig->addressingMode = kI2C_Address7bit; + + /* General call mode is disabled by default. */ + slaveConfig->enableGeneralCall = false; + + /* Slave address match waking up MCU from low power mode is disabled. */ + slaveConfig->enableWakeUp = false; + +#if defined(FSL_FEATURE_I2C_HAS_HIGH_DRIVE_SELECTION) && FSL_FEATURE_I2C_HAS_HIGH_DRIVE_SELECTION + /* Default pin high drive is disabled. */ + slaveConfig->enableHighDrive = false; +#endif + + /* Independent slave mode baud rate at maximum frequency is disabled. */ + slaveConfig->enableBaudRateCtl = false; + +/* Default enable double buffering. */ +#if defined(FSL_FEATURE_I2C_HAS_DOUBLE_BUFFER_ENABLE) && FSL_FEATURE_I2C_HAS_DOUBLE_BUFFER_ENABLE + slaveConfig->enableDoubleBuffering = true; +#endif + + /* Enable the I2C peripheral. */ + slaveConfig->enableSlave = true; +} + +status_t I2C_SlaveWriteBlocking(I2C_Type *base, const uint8_t *txBuff, size_t txSize) +{ + status_t result = kStatus_Success; + volatile uint8_t dummy = 0; + + /* Add this to avoid build warning. */ + dummy++; + +#if defined(FSL_FEATURE_I2C_HAS_START_STOP_DETECT) && FSL_FEATURE_I2C_HAS_START_STOP_DETECT + /* Check start flag. */ + while (!(base->FLT & I2C_FLT_STARTF_MASK)) + { + } + /* Clear STARTF flag. */ + base->FLT |= I2C_FLT_STARTF_MASK; + /* Clear the IICIF flag. */ + base->S = kI2C_IntPendingFlag; +#endif /* FSL_FEATURE_I2C_HAS_START_STOP_DETECT */ + + /* Wait for address match flag. */ + while (!(base->S & kI2C_AddressMatchFlag)) + { + } + + /* Read dummy to release bus. */ + dummy = base->D; + + result = I2C_MasterWriteBlocking(base, txBuff, txSize); + + /* Switch to receive mode. */ + base->C1 &= ~(I2C_C1_TX_MASK | I2C_C1_TXAK_MASK); + + /* Read dummy to release bus. */ + dummy = base->D; + + return result; +} + +void I2C_SlaveReadBlocking(I2C_Type *base, uint8_t *rxBuff, size_t rxSize) +{ + volatile uint8_t dummy = 0; + + /* Add this to avoid build warning. */ + dummy++; + +/* Wait until address match. */ +#if defined(FSL_FEATURE_I2C_HAS_START_STOP_DETECT) && FSL_FEATURE_I2C_HAS_START_STOP_DETECT + /* Check start flag. */ + while (!(base->FLT & I2C_FLT_STARTF_MASK)) + { + } + /* Clear STARTF flag. */ + base->FLT |= I2C_FLT_STARTF_MASK; + /* Clear the IICIF flag. */ + base->S = kI2C_IntPendingFlag; +#endif /* FSL_FEATURE_I2C_HAS_START_STOP_DETECT */ + + /* Wait for address match and int pending flag. */ + while (!(base->S & kI2C_AddressMatchFlag)) + { + } + while (!(base->S & kI2C_IntPendingFlag)) + { + } + + /* Read dummy to release bus. */ + dummy = base->D; + + /* Clear the IICIF flag. */ + base->S = kI2C_IntPendingFlag; + + /* Setup the I2C peripheral to receive data. */ + base->C1 &= ~(I2C_C1_TX_MASK); + + while (rxSize--) + { + /* Wait until data transfer complete. */ + while (!(base->S & kI2C_IntPendingFlag)) + { + } + /* Clear the IICIF flag. */ + base->S = kI2C_IntPendingFlag; + + /* Read from the data register. */ + *rxBuff++ = base->D; + } +} + +void I2C_SlaveTransferCreateHandle(I2C_Type *base, + i2c_slave_handle_t *handle, + i2c_slave_transfer_callback_t callback, + void *userData) +{ + assert(handle); + + uint32_t instance = I2C_GetInstance(base); + + /* Zero handle. */ + memset(handle, 0, sizeof(*handle)); + + /* Set callback and userData. */ + handle->callback = callback; + handle->userData = userData; + + /* Save the context in global variables to support the double weak mechanism. */ + s_i2cHandle[instance] = handle; + + /* Save slave interrupt handler. */ + s_i2cSlaveIsr = I2C_SlaveTransferHandleIRQ; + + /* Enable NVIC interrupt. */ + EnableIRQ(s_i2cIrqs[instance]); +} + +status_t I2C_SlaveTransferNonBlocking(I2C_Type *base, i2c_slave_handle_t *handle, uint32_t eventMask) +{ + assert(handle); + + /* Check if the I2C bus is idle - if not return busy status. */ + if (handle->isBusy) + { + return kStatus_I2C_Busy; + } + else + { + /* Disable LPI2C IRQ sources while we configure stuff. */ + I2C_DisableInterrupts(base, kIrqFlags); + + /* Clear transfer in handle. */ + memset(&handle->transfer, 0, sizeof(handle->transfer)); + + /* Record that we're busy. */ + handle->isBusy = true; + + /* Set up event mask. tx and rx are always enabled. */ + handle->eventMask = eventMask | kI2C_SlaveTransmitEvent | kI2C_SlaveReceiveEvent; + + /* Clear all flags. */ + I2C_SlaveClearStatusFlags(base, kClearFlags); + + /* Enable I2C internal IRQ sources. NVIC IRQ was enabled in CreateHandle() */ + I2C_EnableInterrupts(base, kIrqFlags); + } + + return kStatus_Success; +} + +void I2C_SlaveTransferAbort(I2C_Type *base, i2c_slave_handle_t *handle) +{ + assert(handle); + + if (handle->isBusy) + { + /* Disable interrupts. */ + I2C_DisableInterrupts(base, kIrqFlags); + + /* Reset transfer info. */ + memset(&handle->transfer, 0, sizeof(handle->transfer)); + + /* Reset the state to idle. */ + handle->isBusy = false; + } +} + +status_t I2C_SlaveTransferGetCount(I2C_Type *base, i2c_slave_handle_t *handle, size_t *count) +{ + assert(handle); + + if (!count) + { + return kStatus_InvalidArgument; + } + + /* Catch when there is not an active transfer. */ + if (!handle->isBusy) + { + *count = 0; + return kStatus_NoTransferInProgress; + } + + /* For an active transfer, just return the count from the handle. */ + *count = handle->transfer.transferredCount; + + return kStatus_Success; +} + +void I2C_SlaveTransferHandleIRQ(I2C_Type *base, void *i2cHandle) +{ + assert(i2cHandle); + + uint16_t status; + bool doTransmit = false; + i2c_slave_handle_t *handle = (i2c_slave_handle_t *)i2cHandle; + i2c_slave_transfer_t *xfer; + volatile uint8_t dummy = 0; + + /* Add this to avoid build warning. */ + dummy++; + + status = I2C_SlaveGetStatusFlags(base); + xfer = &(handle->transfer); + +#ifdef I2C_HAS_STOP_DETECT + /* Check stop flag. */ + if (status & kI2C_StopDetectFlag) + { + I2C_MasterClearStatusFlags(base, kI2C_StopDetectFlag); + + /* Clear the interrupt flag. */ + base->S = kI2C_IntPendingFlag; + + /* Call slave callback if this is the STOP of the transfer. */ + if (handle->isBusy) + { + xfer->event = kI2C_SlaveCompletionEvent; + xfer->completionStatus = kStatus_Success; + handle->isBusy = false; + + if ((handle->eventMask & xfer->event) && (handle->callback)) + { + handle->callback(base, xfer, handle->userData); + } + } + + return; + } +#endif /* I2C_HAS_STOP_DETECT */ + +#if defined(FSL_FEATURE_I2C_HAS_START_STOP_DETECT) && FSL_FEATURE_I2C_HAS_START_STOP_DETECT + /* Check start flag. */ + if (status & kI2C_StartDetectFlag) + { + I2C_MasterClearStatusFlags(base, kI2C_StartDetectFlag); + + /* Clear the interrupt flag. */ + base->S = kI2C_IntPendingFlag; + + xfer->event = kI2C_SlaveStartEvent; + + if ((handle->eventMask & xfer->event) && (handle->callback)) + { + handle->callback(base, xfer, handle->userData); + } + + if (!(status & kI2C_AddressMatchFlag)) + { + return; + } + } +#endif /* FSL_FEATURE_I2C_HAS_START_STOP_DETECT */ + + /* Clear the interrupt flag. */ + base->S = kI2C_IntPendingFlag; + + /* Check NAK */ + if (status & kI2C_ReceiveNakFlag) + { + /* Set receive mode. */ + base->C1 &= ~(I2C_C1_TX_MASK | I2C_C1_TXAK_MASK); + + /* Read dummy. */ + dummy = base->D; + + if (handle->transfer.dataSize != 0) + { + xfer->event = kI2C_SlaveCompletionEvent; + xfer->completionStatus = kStatus_I2C_Nak; + handle->isBusy = false; + + if ((handle->eventMask & xfer->event) && (handle->callback)) + { + handle->callback(base, xfer, handle->userData); + } + } + else + { +#ifndef I2C_HAS_STOP_DETECT + xfer->event = kI2C_SlaveCompletionEvent; + xfer->completionStatus = kStatus_Success; + handle->isBusy = false; + + if ((handle->eventMask & xfer->event) && (handle->callback)) + { + handle->callback(base, xfer, handle->userData); + } +#endif /* !FSL_FEATURE_I2C_HAS_START_STOP_DETECT or !FSL_FEATURE_I2C_HAS_STOP_DETECT */ + } + } + /* Check address match. */ + else if (status & kI2C_AddressMatchFlag) + { + handle->isBusy = true; + xfer->event = kI2C_SlaveAddressMatchEvent; + + if ((handle->eventMask & xfer->event) && (handle->callback)) + { + handle->callback(base, xfer, handle->userData); + } + + /* Slave transmit, master reading from slave. */ + if (status & kI2C_TransferDirectionFlag) + { + /* Change direction to send data. */ + base->C1 |= I2C_C1_TX_MASK; + + doTransmit = true; + } + else + { + /* Slave receive, master writing to slave. */ + base->C1 &= ~(I2C_C1_TX_MASK | I2C_C1_TXAK_MASK); + + /* Read dummy to release the bus. */ + dummy = base->D; + } + } + /* Check transfer complete flag. */ + else if (status & kI2C_TransferCompleteFlag) + { + /* Slave transmit, master reading from slave. */ + if (status & kI2C_TransferDirectionFlag) + { + doTransmit = true; + } + else + { + /* If we're out of data, invoke callback to get more. */ + if ((!xfer->data) || (!xfer->dataSize)) + { + xfer->event = kI2C_SlaveReceiveEvent; + + if (handle->callback) + { + handle->callback(base, xfer, handle->userData); + } + + /* Clear the transferred count now that we have a new buffer. */ + xfer->transferredCount = 0; + } + + /* Slave receive, master writing to slave. */ + uint8_t data = base->D; + + if (handle->transfer.dataSize) + { + /* Receive data. */ + *handle->transfer.data++ = data; + handle->transfer.dataSize--; + xfer->transferredCount++; + if (!handle->transfer.dataSize) + { +#ifndef I2C_HAS_STOP_DETECT + xfer->event = kI2C_SlaveCompletionEvent; + xfer->completionStatus = kStatus_Success; + handle->isBusy = false; + + /* Proceed receive complete event. */ + if ((handle->eventMask & xfer->event) && (handle->callback)) + { + handle->callback(base, xfer, handle->userData); + } +#endif /* !FSL_FEATURE_I2C_HAS_START_STOP_DETECT or !FSL_FEATURE_I2C_HAS_STOP_DETECT */ + } + } + } + } + else + { + /* Read dummy to release bus. */ + dummy = base->D; + } + + /* Send data if there is the need. */ + if (doTransmit) + { + /* If we're out of data, invoke callback to get more. */ + if ((!xfer->data) || (!xfer->dataSize)) + { + xfer->event = kI2C_SlaveTransmitEvent; + + if (handle->callback) + { + handle->callback(base, xfer, handle->userData); + } + + /* Clear the transferred count now that we have a new buffer. */ + xfer->transferredCount = 0; + } + + if (handle->transfer.dataSize) + { + /* Send data. */ + base->D = *handle->transfer.data++; + handle->transfer.dataSize--; + xfer->transferredCount++; + } + else + { + /* Switch to receive mode. */ + base->C1 &= ~(I2C_C1_TX_MASK | I2C_C1_TXAK_MASK); + + /* Read dummy to release bus. */ + dummy = base->D; + +#ifndef I2C_HAS_STOP_DETECT + xfer->event = kI2C_SlaveCompletionEvent; + xfer->completionStatus = kStatus_Success; + handle->isBusy = false; + + /* Proceed txdone event. */ + if ((handle->eventMask & xfer->event) && (handle->callback)) + { + handle->callback(base, xfer, handle->userData); + } +#endif /* !FSL_FEATURE_I2C_HAS_START_STOP_DETECT or !FSL_FEATURE_I2C_HAS_STOP_DETECT */ + } + } +} + +void I2C0_DriverIRQHandler(void) +{ + I2C_TransferCommonIRQHandler(I2C0, s_i2cHandle[0]); +} + +#if (FSL_FEATURE_SOC_I2C_COUNT > 1) +void I2C1_DriverIRQHandler(void) +{ + I2C_TransferCommonIRQHandler(I2C1, s_i2cHandle[1]); +} +#endif /* I2C COUNT > 1 */ + +#if (FSL_FEATURE_SOC_I2C_COUNT > 2) +void I2C2_DriverIRQHandler(void) +{ + I2C_TransferCommonIRQHandler(I2C2, s_i2cHandle[2]); +} +#endif /* I2C COUNT > 2 */ +#if (FSL_FEATURE_SOC_I2C_COUNT > 3) +void I2C3_DriverIRQHandler(void) +{ + I2C_TransferCommonIRQHandler(I2C3, s_i2cHandle[3]); +} +#endif /* I2C COUNT > 3 */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_i2c.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_i2c.h new file mode 100644 index 00000000000..7117fd5753c --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_i2c.h @@ -0,0 +1,788 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FSL_I2C_H_ +#define _FSL_I2C_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup i2c_driver + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief I2C driver version 2.0.1. */ +#define FSL_I2C_DRIVER_VERSION (MAKE_VERSION(2, 0, 1)) +/*@}*/ + +#if (defined(FSL_FEATURE_I2C_HAS_START_STOP_DETECT) && FSL_FEATURE_I2C_HAS_START_STOP_DETECT || \ + defined(FSL_FEATURE_I2C_HAS_STOP_DETECT) && FSL_FEATURE_I2C_HAS_STOP_DETECT) +#define I2C_HAS_STOP_DETECT +#endif /* FSL_FEATURE_I2C_HAS_START_STOP_DETECT / FSL_FEATURE_I2C_HAS_STOP_DETECT */ + +/*! @brief I2C status return codes. */ +enum _i2c_status +{ + kStatus_I2C_Busy = MAKE_STATUS(kStatusGroup_I2C, 0), /*!< I2C is busy with current transfer. */ + kStatus_I2C_Idle = MAKE_STATUS(kStatusGroup_I2C, 1), /*!< Bus is Idle. */ + kStatus_I2C_Nak = MAKE_STATUS(kStatusGroup_I2C, 2), /*!< NAK received during transfer. */ + kStatus_I2C_ArbitrationLost = MAKE_STATUS(kStatusGroup_I2C, 3), /*!< Arbitration lost during transfer. */ + kStatus_I2C_Timeout = MAKE_STATUS(kStatusGroup_I2C, 4), /*!< Wait event timeout. */ +}; + +/*! + * @brief I2C peripheral flags + * + * The following status register flags can be cleared: + * - #kI2C_ArbitrationLostFlag + * - #kI2C_IntPendingFlag + * - #kI2C_StartDetectFlag + * - #kI2C_StopDetectFlag + * + * @note These enumerations are meant to be OR'd together to form a bit mask. + * + */ +enum _i2c_flags +{ + kI2C_ReceiveNakFlag = I2C_S_RXAK_MASK, /*!< I2C receive NAK flag. */ + kI2C_IntPendingFlag = I2C_S_IICIF_MASK, /*!< I2C interrupt pending flag. */ + kI2C_TransferDirectionFlag = I2C_S_SRW_MASK, /*!< I2C transfer direction flag. */ + kI2C_RangeAddressMatchFlag = I2C_S_RAM_MASK, /*!< I2C range address match flag. */ + kI2C_ArbitrationLostFlag = I2C_S_ARBL_MASK, /*!< I2C arbitration lost flag. */ + kI2C_BusBusyFlag = I2C_S_BUSY_MASK, /*!< I2C bus busy flag. */ + kI2C_AddressMatchFlag = I2C_S_IAAS_MASK, /*!< I2C address match flag. */ + kI2C_TransferCompleteFlag = I2C_S_TCF_MASK, /*!< I2C transfer complete flag. */ +#ifdef I2C_HAS_STOP_DETECT + kI2C_StopDetectFlag = I2C_FLT_STOPF_MASK << 8, /*!< I2C stop detect flag. */ +#endif /* FSL_FEATURE_I2C_HAS_START_STOP_DETECT / FSL_FEATURE_I2C_HAS_STOP_DETECT */ + +#if defined(FSL_FEATURE_I2C_HAS_START_STOP_DETECT) && FSL_FEATURE_I2C_HAS_START_STOP_DETECT + kI2C_StartDetectFlag = I2C_FLT_STARTF_MASK << 8, /*!< I2C start detect flag. */ +#endif /* FSL_FEATURE_I2C_HAS_START_STOP_DETECT */ +}; + +/*! @brief I2C feature interrupt source. */ +enum _i2c_interrupt_enable +{ + kI2C_GlobalInterruptEnable = I2C_C1_IICIE_MASK, /*!< I2C global interrupt. */ + +#if defined(FSL_FEATURE_I2C_HAS_STOP_DETECT) && FSL_FEATURE_I2C_HAS_STOP_DETECT + kI2C_StopDetectInterruptEnable = I2C_FLT_STOPIE_MASK, /*!< I2C stop detect interrupt. */ +#endif /* FSL_FEATURE_I2C_HAS_STOP_DETECT */ + +#if defined(FSL_FEATURE_I2C_HAS_START_STOP_DETECT) && FSL_FEATURE_I2C_HAS_START_STOP_DETECT + kI2C_StartStopDetectInterruptEnable = I2C_FLT_SSIE_MASK, /*!< I2C start&stop detect interrupt. */ +#endif /* FSL_FEATURE_I2C_HAS_START_STOP_DETECT */ +}; + +/*! @brief Direction of master and slave transfers. */ +typedef enum _i2c_direction +{ + kI2C_Write = 0x0U, /*!< Master transmit to slave. */ + kI2C_Read = 0x1U, /*!< Master receive from slave. */ +} i2c_direction_t; + +/*! @brief Addressing mode. */ +typedef enum _i2c_slave_address_mode +{ + kI2C_Address7bit = 0x0U, /*!< 7-bit addressing mode. */ + kI2C_RangeMatch = 0X2U, /*!< Range address match addressing mode. */ +} i2c_slave_address_mode_t; + +/*! @brief I2C transfer control flag. */ +enum _i2c_master_transfer_flags +{ + kI2C_TransferDefaultFlag = 0x0U, /*!< Transfer starts with a start signal, stops with a stop signal. */ + kI2C_TransferNoStartFlag = 0x1U, /*!< Transfer starts without a start signal. */ + kI2C_TransferRepeatedStartFlag = 0x2U, /*!< Transfer starts with a repeated start signal. */ + kI2C_TransferNoStopFlag = 0x4U, /*!< Transfer ends without a stop signal. */ +}; + +/*! + * @brief Set of events sent to the callback for nonblocking slave transfers. + * + * These event enumerations are used for two related purposes. First, a bit mask created by OR'ing together + * events is passed to I2C_SlaveTransferNonBlocking() in order to specify which events to enable. + * Then, when the slave callback is invoked, it is passed the current event through its @a transfer + * parameter. + * + * @note These enumerations are meant to be OR'd together to form a bit mask of events. + */ +typedef enum _i2c_slave_transfer_event +{ + kI2C_SlaveAddressMatchEvent = 0x01U, /*!< Received the slave address after a start or repeated start. */ + kI2C_SlaveTransmitEvent = 0x02U, /*!< Callback is requested to provide data to transmit + (slave-transmitter role). */ + kI2C_SlaveReceiveEvent = 0x04U, /*!< Callback is requested to provide a buffer in which to place received + data (slave-receiver role). */ + kI2C_SlaveTransmitAckEvent = 0x08U, /*!< Callback needs to either transmit an ACK or NACK. */ +#if defined(FSL_FEATURE_I2C_HAS_START_STOP_DETECT) && FSL_FEATURE_I2C_HAS_START_STOP_DETECT + kI2C_SlaveStartEvent = 0x10U, /*!< A start/repeated start was detected. */ +#endif + kI2C_SlaveCompletionEvent = 0x20U, /*!< A stop was detected or finished transfer, completing the transfer. */ + + /*! Bit mask of all available events. */ + kI2C_SlaveAllEvents = kI2C_SlaveAddressMatchEvent | kI2C_SlaveTransmitEvent | kI2C_SlaveReceiveEvent | +#if defined(FSL_FEATURE_I2C_HAS_START_STOP_DETECT) && FSL_FEATURE_I2C_HAS_START_STOP_DETECT + kI2C_SlaveStartEvent | +#endif + kI2C_SlaveCompletionEvent, +} i2c_slave_transfer_event_t; + +/*! @brief I2C master user configuration. */ +typedef struct _i2c_master_config +{ + bool enableMaster; /*!< Enables the I2C peripheral at initialization time. */ +#if defined(FSL_FEATURE_I2C_HAS_HIGH_DRIVE_SELECTION) && FSL_FEATURE_I2C_HAS_HIGH_DRIVE_SELECTION + bool enableHighDrive; /*!< Controls the drive capability of the I2C pads. */ +#endif +#if defined(FSL_FEATURE_I2C_HAS_STOP_HOLD_OFF) && FSL_FEATURE_I2C_HAS_STOP_HOLD_OFF + bool enableStopHold; /*!< Controls the stop hold enable. */ +#endif +#if defined(FSL_FEATURE_I2C_HAS_DOUBLE_BUFFER_ENABLE) && FSL_FEATURE_I2C_HAS_DOUBLE_BUFFER_ENABLE + bool enableDoubleBuffering; /*!< Controls double buffer enable, notice that + enabling the double buffer disables the clock stretch. */ +#endif + uint32_t baudRate_Bps; /*!< Baud rate configuration of I2C peripheral. */ + uint8_t glitchFilterWidth; /*!< Controls the width of the glitch. */ +} i2c_master_config_t; + +/*! @brief I2C slave user configuration. */ +typedef struct _i2c_slave_config +{ + bool enableSlave; /*!< Enables the I2C peripheral at initialization time. */ + bool enableGeneralCall; /*!< Enable general call addressing mode. */ + bool enableWakeUp; /*!< Enables/disables waking up MCU from low-power mode. */ +#if defined(FSL_FEATURE_I2C_HAS_HIGH_DRIVE_SELECTION) && FSL_FEATURE_I2C_HAS_HIGH_DRIVE_SELECTION + bool enableHighDrive; /*!< Controls the drive capability of the I2C pads. */ +#endif +#if defined(FSL_FEATURE_I2C_HAS_DOUBLE_BUFFER_ENABLE) && FSL_FEATURE_I2C_HAS_DOUBLE_BUFFER_ENABLE + bool enableDoubleBuffering; /*!< Controls double buffer enable, notice that + enabling the double buffer disables the clock stretch. */ +#endif + bool enableBaudRateCtl; /*!< Enables/disables independent slave baud rate on SCL in very fast I2C modes. */ + uint16_t slaveAddress; /*!< Slave address configuration. */ + uint16_t upperAddress; /*!< Maximum boundary slave address used in range matching mode. */ + i2c_slave_address_mode_t addressingMode; /*!< Addressing mode configuration of i2c_slave_address_mode_config_t. */ +} i2c_slave_config_t; + +/*! @brief I2C master handle typedef. */ +typedef struct _i2c_master_handle i2c_master_handle_t; + +/*! @brief I2C master transfer callback typedef. */ +typedef void (*i2c_master_transfer_callback_t)(I2C_Type *base, + i2c_master_handle_t *handle, + status_t status, + void *userData); + +/*! @brief I2C slave handle typedef. */ +typedef struct _i2c_slave_handle i2c_slave_handle_t; + +/*! @brief I2C master transfer structure. */ +typedef struct _i2c_master_transfer +{ + uint32_t flags; /*!< Transfer flag which controls the transfer. */ + uint8_t slaveAddress; /*!< 7-bit slave address. */ + i2c_direction_t direction; /*!< Transfer direction, read or write. */ + uint32_t subaddress; /*!< Sub address. Transferred MSB first. */ + uint8_t subaddressSize; /*!< Size of command buffer. */ + uint8_t *volatile data; /*!< Transfer buffer. */ + volatile size_t dataSize; /*!< Transfer size. */ +} i2c_master_transfer_t; + +/*! @brief I2C master handle structure. */ +struct _i2c_master_handle +{ + i2c_master_transfer_t transfer; /*!< I2C master transfer copy. */ + size_t transferSize; /*!< Total bytes to be transferred. */ + uint8_t state; /*!< Transfer state maintained during transfer. */ + i2c_master_transfer_callback_t completionCallback; /*!< Callback function called when transfer finished. */ + void *userData; /*!< Callback parameter passed to callback function. */ +}; + +/*! @brief I2C slave transfer structure. */ +typedef struct _i2c_slave_transfer +{ + i2c_slave_transfer_event_t event; /*!< Reason the callback is being invoked. */ + uint8_t *volatile data; /*!< Transfer buffer. */ + volatile size_t dataSize; /*!< Transfer size. */ + status_t completionStatus; /*!< Success or error code describing how the transfer completed. Only applies for + #kI2C_SlaveCompletionEvent. */ + size_t transferredCount; /*!< Number of bytes actually transferred since start or last repeated start. */ +} i2c_slave_transfer_t; + +/*! @brief I2C slave transfer callback typedef. */ +typedef void (*i2c_slave_transfer_callback_t)(I2C_Type *base, i2c_slave_transfer_t *xfer, void *userData); + +/*! @brief I2C slave handle structure. */ +struct _i2c_slave_handle +{ + bool isBusy; /*!< Whether transfer is busy. */ + i2c_slave_transfer_t transfer; /*!< I2C slave transfer copy. */ + uint32_t eventMask; /*!< Mask of enabled events. */ + i2c_slave_transfer_callback_t callback; /*!< Callback function called at transfer event. */ + void *userData; /*!< Callback parameter passed to callback. */ +}; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif /*_cplusplus. */ + +/*! + * @name Initialization and deinitialization + * @{ + */ + +/*! + * @brief Initializes the I2C peripheral. Call this API to ungate the I2C clock + * and configure the I2C with master configuration. + * + * @note This API should be called at the beginning of the application to use + * the I2C driver, or any operation to the I2C module may cause a hard fault + * because clock is not enabled. The configuration structure can be filled by user + * from scratch, or be set with default values by I2C_MasterGetDefaultConfig(). + * After calling this API, the master is ready to transfer. + * Example: + * @code + * i2c_master_config_t config = { + * .enableMaster = true, + * .enableStopHold = false, + * .highDrive = false, + * .baudRate_Bps = 100000, + * .glitchFilterWidth = 0 + * }; + * I2C_MasterInit(I2C0, &config, 12000000U); + * @endcode + * + * @param base I2C base pointer + * @param masterConfig pointer to master configuration structure + * @param srcClock_Hz I2C peripheral clock frequency in Hz + */ +void I2C_MasterInit(I2C_Type *base, const i2c_master_config_t *masterConfig, uint32_t srcClock_Hz); + +/*! + * @brief Initializes the I2C peripheral. Call this API to ungate the I2C clock + * and initializes the I2C with slave configuration. + * + * @note This API should be called at the beginning of the application to use + * the I2C driver, or any operation to the I2C module can cause a hard fault + * because the clock is not enabled. The configuration structure can partly be set + * with default values by I2C_SlaveGetDefaultConfig(), or can be filled by the user. + * Example + * @code + * i2c_slave_config_t config = { + * .enableSlave = true, + * .enableGeneralCall = false, + * .addressingMode = kI2C_Address7bit, + * .slaveAddress = 0x1DU, + * .enableWakeUp = false, + * .enablehighDrive = false, + * .enableBaudRateCtl = false + * }; + * I2C_SlaveInit(I2C0, &config); + * @endcode + * + * @param base I2C base pointer + * @param slaveConfig pointer to slave configuration structure + */ +void I2C_SlaveInit(I2C_Type *base, const i2c_slave_config_t *slaveConfig); + +/*! + * @brief De-initializes the I2C master peripheral. Call this API to gate the I2C clock. + * The I2C master module can't work unless the I2C_MasterInit is called. + * @param base I2C base pointer + */ +void I2C_MasterDeinit(I2C_Type *base); + +/*! + * @brief De-initializes the I2C slave peripheral. Calling this API gates the I2C clock. + * The I2C slave module can't work unless the I2C_SlaveInit is called to enable the clock. + * @param base I2C base pointer + */ +void I2C_SlaveDeinit(I2C_Type *base); + +/*! + * @brief Sets the I2C master configuration structure to default values. + * + * The purpose of this API is to get the configuration structure initialized for use in the I2C_MasterConfigure(). + * Use the initialized structure unchanged in I2C_MasterConfigure(), or modify some fields of + * the structure before calling I2C_MasterConfigure(). + * Example: + * @code + * i2c_master_config_t config; + * I2C_MasterGetDefaultConfig(&config); + * @endcode + * @param masterConfig Pointer to the master configuration structure. +*/ +void I2C_MasterGetDefaultConfig(i2c_master_config_t *masterConfig); + +/*! + * @brief Sets the I2C slave configuration structure to default values. + * + * The purpose of this API is to get the configuration structure initialized for use in I2C_SlaveConfigure(). + * Modify fields of the structure before calling the I2C_SlaveConfigure(). + * Example: + * @code + * i2c_slave_config_t config; + * I2C_SlaveGetDefaultConfig(&config); + * @endcode + * @param slaveConfig Pointer to the slave configuration structure. + */ +void I2C_SlaveGetDefaultConfig(i2c_slave_config_t *slaveConfig); + +/*! + * @brief Enables or disabless the I2C peripheral operation. + * + * @param base I2C base pointer + * @param enable pass true to enable module, false to disable module + */ +static inline void I2C_Enable(I2C_Type *base, bool enable) +{ + if (enable) + { + base->C1 |= I2C_C1_IICEN_MASK; + } + else + { + base->C1 &= ~I2C_C1_IICEN_MASK; + } +} + +/* @} */ + +/*! + * @name Status + * @{ + */ + +/*! + * @brief Gets the I2C status flags. + * + * @param base I2C base pointer + * @return status flag, use status flag to AND #_i2c_flags to get the related status. + */ +uint32_t I2C_MasterGetStatusFlags(I2C_Type *base); + +/*! + * @brief Gets the I2C status flags. + * + * @param base I2C base pointer + * @return status flag, use status flag to AND #_i2c_flags to get the related status. + */ +static inline uint32_t I2C_SlaveGetStatusFlags(I2C_Type *base) +{ + return I2C_MasterGetStatusFlags(base); +} + +/*! + * @brief Clears the I2C status flag state. + * + * The following status register flags can be cleared: kI2C_ArbitrationLostFlag and kI2C_IntPendingFlag + * + * @param base I2C base pointer + * @param statusMask The status flag mask, defined in type i2c_status_flag_t. + * The parameter can be any combination of the following values: + * @arg kI2C_StartDetectFlag (if available) + * @arg kI2C_StopDetectFlag (if available) + * @arg kI2C_ArbitrationLostFlag + * @arg kI2C_IntPendingFlagFlag + */ +static inline void I2C_MasterClearStatusFlags(I2C_Type *base, uint32_t statusMask) +{ +/* Must clear the STARTF / STOPF bits prior to clearing IICIF */ +#if defined(FSL_FEATURE_I2C_HAS_START_STOP_DETECT) && FSL_FEATURE_I2C_HAS_START_STOP_DETECT + if (statusMask & kI2C_StartDetectFlag) + { + /* Shift the odd-ball flags back into place. */ + base->FLT |= (uint8_t)(statusMask >> 8U); + } +#endif + +#ifdef I2C_HAS_STOP_DETECT + if (statusMask & kI2C_StopDetectFlag) + { + /* Shift the odd-ball flags back into place. */ + base->FLT |= (uint8_t)(statusMask >> 8U); + } +#endif + + base->S = (uint8_t)statusMask; +} + +/*! + * @brief Clears the I2C status flag state. + * + * The following status register flags can be cleared: kI2C_ArbitrationLostFlag and kI2C_IntPendingFlag + * + * @param base I2C base pointer + * @param statusMask The status flag mask, defined in type i2c_status_flag_t. + * The parameter can be any combination of the following values: + * @arg kI2C_StartDetectFlag (if available) + * @arg kI2C_StopDetectFlag (if available) + * @arg kI2C_ArbitrationLostFlag + * @arg kI2C_IntPendingFlagFlag + */ +static inline void I2C_SlaveClearStatusFlags(I2C_Type *base, uint32_t statusMask) +{ + I2C_MasterClearStatusFlags(base, statusMask); +} + +/* @} */ + +/*! + * @name Interrupts + * @{ + */ + +/*! + * @brief Enables I2C interrupt requests. + * + * @param base I2C base pointer + * @param mask interrupt source + * The parameter can be combination of the following source if defined: + * @arg kI2C_GlobalInterruptEnable + * @arg kI2C_StopDetectInterruptEnable/kI2C_StartDetectInterruptEnable + * @arg kI2C_SdaTimeoutInterruptEnable + */ +void I2C_EnableInterrupts(I2C_Type *base, uint32_t mask); + +/*! + * @brief Disables I2C interrupt requests. + * + * @param base I2C base pointer + * @param mask interrupt source + * The parameter can be combination of the following source if defined: + * @arg kI2C_GlobalInterruptEnable + * @arg kI2C_StopDetectInterruptEnable/kI2C_StartDetectInterruptEnable + * @arg kI2C_SdaTimeoutInterruptEnable + */ +void I2C_DisableInterrupts(I2C_Type *base, uint32_t mask); + +/*! + * @name DMA Control + * @{ + */ +#if defined(FSL_FEATURE_I2C_HAS_DMA_SUPPORT) && FSL_FEATURE_I2C_HAS_DMA_SUPPORT +/*! + * @brief Enables/disables the I2C DMA interrupt. + * + * @param base I2C base pointer + * @param enable true to enable, false to disable +*/ +static inline void I2C_EnableDMA(I2C_Type *base, bool enable) +{ + if (enable) + { + base->C1 |= I2C_C1_DMAEN_MASK; + } + else + { + base->C1 &= ~I2C_C1_DMAEN_MASK; + } +} + +#endif /* FSL_FEATURE_I2C_HAS_DMA_SUPPORT */ + +/*! + * @brief Gets the I2C tx/rx data register address. This API is used to provide a transfer address + * for I2C DMA transfer configuration. + * + * @param base I2C base pointer + * @return data register address + */ +static inline uint32_t I2C_GetDataRegAddr(I2C_Type *base) +{ + return (uint32_t)(&(base->D)); +} + +/* @} */ +/*! + * @name Bus Operations + * @{ + */ + +/*! + * @brief Sets the I2C master transfer baud rate. + * + * @param base I2C base pointer + * @param baudRate_Bps the baud rate value in bps + * @param srcClock_Hz Source clock + */ +void I2C_MasterSetBaudRate(I2C_Type *base, uint32_t baudRate_Bps, uint32_t srcClock_Hz); + +/*! + * @brief Sends a START on the I2C bus. + * + * This function is used to initiate a new master mode transfer by sending the START signal. + * The slave address is sent following the I2C START signal. + * + * @param base I2C peripheral base pointer + * @param address 7-bit slave device address. + * @param direction Master transfer directions(transmit/receive). + * @retval kStatus_Success Successfully send the start signal. + * @retval kStatus_I2C_Busy Current bus is busy. + */ +status_t I2C_MasterStart(I2C_Type *base, uint8_t address, i2c_direction_t direction); + +/*! + * @brief Sends a STOP signal on the I2C bus. + * + * @retval kStatus_Success Successfully send the stop signal. + * @retval kStatus_I2C_Timeout Send stop signal failed, timeout. + */ +status_t I2C_MasterStop(I2C_Type *base); + +/*! + * @brief Sends a REPEATED START on the I2C bus. + * + * @param base I2C peripheral base pointer + * @param address 7-bit slave device address. + * @param direction Master transfer directions(transmit/receive). + * @retval kStatus_Success Successfully send the start signal. + * @retval kStatus_I2C_Busy Current bus is busy but not occupied by current I2C master. + */ +status_t I2C_MasterRepeatedStart(I2C_Type *base, uint8_t address, i2c_direction_t direction); + +/*! + * @brief Performs a polling send transaction on the I2C bus without a STOP signal. + * + * @param base The I2C peripheral base pointer. + * @param txBuff The pointer to the data to be transferred. + * @param txSize The length in bytes of the data to be transferred. + * @retval kStatus_Success Successfully complete the data transmission. + * @retval kStatus_I2C_ArbitrationLost Transfer error, arbitration lost. + * @retval kStataus_I2C_Nak Transfer error, receive NAK during transfer. + */ +status_t I2C_MasterWriteBlocking(I2C_Type *base, const uint8_t *txBuff, size_t txSize); + +/*! + * @brief Performs a polling receive transaction on the I2C bus with a STOP signal. + * + * @note The I2C_MasterReadBlocking function stops the bus before reading the final byte. + * Without stopping the bus prior for the final read, the bus issues another read, resulting + * in garbage data being read into the data register. + * + * @param base I2C peripheral base pointer. + * @param rxBuff The pointer to the data to store the received data. + * @param rxSize The length in bytes of the data to be received. + * @retval kStatus_Success Successfully complete the data transmission. + * @retval kStatus_I2C_Timeout Send stop signal failed, timeout. + */ +status_t I2C_MasterReadBlocking(I2C_Type *base, uint8_t *rxBuff, size_t rxSize); + +/*! + * @brief Performs a polling send transaction on the I2C bus. + * + * @param base The I2C peripheral base pointer. + * @param txBuff The pointer to the data to be transferred. + * @param txSize The length in bytes of the data to be transferred. + * @retval kStatus_Success Successfully complete the data transmission. + * @retval kStatus_I2C_ArbitrationLost Transfer error, arbitration lost. + * @retval kStataus_I2C_Nak Transfer error, receive NAK during transfer. + */ +status_t I2C_SlaveWriteBlocking(I2C_Type *base, const uint8_t *txBuff, size_t txSize); + +/*! + * @brief Performs a polling receive transaction on the I2C bus. + * + * @param base I2C peripheral base pointer. + * @param rxBuff The pointer to the data to store the received data. + * @param rxSize The length in bytes of the data to be received. + */ +void I2C_SlaveReadBlocking(I2C_Type *base, uint8_t *rxBuff, size_t rxSize); + +/*! + * @brief Performs a master polling transfer on the I2C bus. + * + * @note The API does not return until the transfer succeeds or fails due + * to arbitration lost or receiving a NAK. + * + * @param base I2C peripheral base address. + * @param xfer Pointer to the transfer structure. + * @retval kStatus_Success Successfully complete the data transmission. + * @retval kStatus_I2C_Busy Previous transmission still not finished. + * @retval kStatus_I2C_Timeout Transfer error, wait signal timeout. + * @retval kStatus_I2C_ArbitrationLost Transfer error, arbitration lost. + * @retval kStataus_I2C_Nak Transfer error, receive NAK during transfer. + */ +status_t I2C_MasterTransferBlocking(I2C_Type *base, i2c_master_transfer_t *xfer); + +/* @} */ + +/*! + * @name Transactional + * @{ + */ + +/*! + * @brief Initializes the I2C handle which is used in transactional functions. + * + * @param base I2C base pointer. + * @param handle pointer to i2c_master_handle_t structure to store the transfer state. + * @param callback pointer to user callback function. + * @param userData user parameter passed to the callback function. + */ +void I2C_MasterTransferCreateHandle(I2C_Type *base, + i2c_master_handle_t *handle, + i2c_master_transfer_callback_t callback, + void *userData); + +/*! + * @brief Performs a master interrupt non-blocking transfer on the I2C bus. + * + * @note Calling the API returns immediately after transfer initiates. The user needs + * to call I2C_MasterGetTransferCount to poll the transfer status to check whether + * the transfer is finished. If the return status is not kStatus_I2C_Busy, the transfer + * is finished. + * + * @param base I2C base pointer. + * @param handle pointer to i2c_master_handle_t structure which stores the transfer state. + * @param xfer pointer to i2c_master_transfer_t structure. + * @retval kStatus_Success Successfully start the data transmission. + * @retval kStatus_I2C_Busy Previous transmission still not finished. + * @retval kStatus_I2C_Timeout Transfer error, wait signal timeout. + */ +status_t I2C_MasterTransferNonBlocking(I2C_Type *base, i2c_master_handle_t *handle, i2c_master_transfer_t *xfer); + +/*! + * @brief Gets the master transfer status during a interrupt non-blocking transfer. + * + * @param base I2C base pointer. + * @param handle pointer to i2c_master_handle_t structure which stores the transfer state. + * @param count Number of bytes transferred so far by the non-blocking transaction. + * @retval kStatus_InvalidArgument count is Invalid. + * @retval kStatus_Success Successfully return the count. + */ +status_t I2C_MasterTransferGetCount(I2C_Type *base, i2c_master_handle_t *handle, size_t *count); + +/*! + * @brief Aborts an interrupt non-blocking transfer early. + * + * @note This API can be called at any time when an interrupt non-blocking transfer initiates + * to abort the transfer early. + * + * @param base I2C base pointer. + * @param handle pointer to i2c_master_handle_t structure which stores the transfer state + */ +void I2C_MasterTransferAbort(I2C_Type *base, i2c_master_handle_t *handle); + +/*! + * @brief Master interrupt handler. + * + * @param base I2C base pointer. + * @param i2cHandle pointer to i2c_master_handle_t structure. + */ +void I2C_MasterTransferHandleIRQ(I2C_Type *base, void *i2cHandle); + +/*! + * @brief Initializes the I2C handle which is used in transactional functions. + * + * @param base I2C base pointer. + * @param handle pointer to i2c_slave_handle_t structure to store the transfer state. + * @param callback pointer to user callback function. + * @param userData user parameter passed to the callback function. + */ +void I2C_SlaveTransferCreateHandle(I2C_Type *base, + i2c_slave_handle_t *handle, + i2c_slave_transfer_callback_t callback, + void *userData); + +/*! + * @brief Starts accepting slave transfers. + * + * Call this API after calling the I2C_SlaveInit() and I2C_SlaveTransferCreateHandle() to start processing + * transactions driven by an I2C master. The slave monitors the I2C bus and passes events to the + * callback that was passed into the call to I2C_SlaveTransferCreateHandle(). The callback is always invoked + * from the interrupt context. + * + * The set of events received by the callback is customizable. To do so, set the @a eventMask parameter to + * the OR'd combination of #i2c_slave_transfer_event_t enumerators for the events you wish to receive. + * The #kI2C_SlaveTransmitEvent and #kLPI2C_SlaveReceiveEvent events are always enabled and do not need + * to be included in the mask. Alternatively, pass 0 to get a default set of only the transmit and + * receive events that are always enabled. In addition, the #kI2C_SlaveAllEvents constant is provided as + * a convenient way to enable all events. + * + * @param base The I2C peripheral base address. + * @param handle Pointer to #i2c_slave_handle_t structure which stores the transfer state. + * @param eventMask Bit mask formed by OR'ing together #i2c_slave_transfer_event_t enumerators to specify + * which events to send to the callback. Other accepted values are 0 to get a default set of + * only the transmit and receive events, and #kI2C_SlaveAllEvents to enable all events. + * + * @retval #kStatus_Success Slave transfers were successfully started. + * @retval #kStatus_I2C_Busy Slave transfers have already been started on this handle. + */ +status_t I2C_SlaveTransferNonBlocking(I2C_Type *base, i2c_slave_handle_t *handle, uint32_t eventMask); + +/*! + * @brief Aborts the slave transfer. + * + * @note This API can be called at any time to stop slave for handling the bus events. + * + * @param base I2C base pointer. + * @param handle pointer to i2c_slave_handle_t structure which stores the transfer state. + */ +void I2C_SlaveTransferAbort(I2C_Type *base, i2c_slave_handle_t *handle); + +/*! + * @brief Gets the slave transfer remaining bytes during a interrupt non-blocking transfer. + * + * @param base I2C base pointer. + * @param handle pointer to i2c_slave_handle_t structure. + * @param count Number of bytes transferred so far by the non-blocking transaction. + * @retval kStatus_InvalidArgument count is Invalid. + * @retval kStatus_Success Successfully return the count. + */ +status_t I2C_SlaveTransferGetCount(I2C_Type *base, i2c_slave_handle_t *handle, size_t *count); + +/*! + * @brief Slave interrupt handler. + * + * @param base I2C base pointer. + * @param i2cHandle pointer to i2c_slave_handle_t structure which stores the transfer state + */ +void I2C_SlaveTransferHandleIRQ(I2C_Type *base, void *i2cHandle); + +/* @} */ +#if defined(__cplusplus) +} +#endif /*_cplusplus. */ +/*@}*/ + +#endif /* _FSL_I2C_H_*/ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_i2c_edma.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_i2c_edma.c new file mode 100644 index 00000000000..c8f7c20629f --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_i2c_edma.c @@ -0,0 +1,526 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_i2c_edma.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*base, false); + + /* Send stop if kI2C_TransferNoStop flag is not asserted. */ + if (!(i2cPrivateHandle->handle->transfer.flags & kI2C_TransferNoStopFlag)) + { + if (i2cPrivateHandle->handle->transfer.direction == kI2C_Read) + { + /* Change to send NAK at the last byte. */ + i2cPrivateHandle->base->C1 |= I2C_C1_TXAK_MASK; + + /* Wait the last data to be received. */ + while (!(i2cPrivateHandle->base->S & kI2C_TransferCompleteFlag)) + { + } + + /* Send stop signal. */ + result = I2C_MasterStop(i2cPrivateHandle->base); + + /* Read the last data byte. */ + *(i2cPrivateHandle->handle->transfer.data + i2cPrivateHandle->handle->transfer.dataSize - 1) = + i2cPrivateHandle->base->D; + } + else + { + /* Wait the last data to be sent. */ + while (!(i2cPrivateHandle->base->S & kI2C_TransferCompleteFlag)) + { + } + + /* Send stop signal. */ + result = I2C_MasterStop(i2cPrivateHandle->base); + } + } + + i2cPrivateHandle->handle->state = kIdleState; + + if (i2cPrivateHandle->handle->completionCallback) + { + i2cPrivateHandle->handle->completionCallback(i2cPrivateHandle->base, i2cPrivateHandle->handle, result, + i2cPrivateHandle->handle->userData); + } +} + +static status_t I2C_CheckAndClearError(I2C_Type *base, uint32_t status) +{ + status_t result = kStatus_Success; + + /* Check arbitration lost. */ + if (status & kI2C_ArbitrationLostFlag) + { + /* Clear arbitration lost flag. */ + base->S = kI2C_ArbitrationLostFlag; + result = kStatus_I2C_ArbitrationLost; + } + /* Check NAK */ + else if (status & kI2C_ReceiveNakFlag) + { + result = kStatus_I2C_Nak; + } + else + { + } + + return result; +} + +static status_t I2C_InitTransferStateMachineEDMA(I2C_Type *base, + i2c_master_edma_handle_t *handle, + i2c_master_transfer_t *xfer) +{ + assert(handle); + assert(xfer); + + status_t result = kStatus_Success; + uint16_t timeout = UINT16_MAX; + + if (handle->state != kIdleState) + { + return kStatus_I2C_Busy; + } + else + { + i2c_direction_t direction = xfer->direction; + + /* Init the handle member. */ + handle->transfer = *xfer; + + /* Save total transfer size. */ + handle->transferSize = xfer->dataSize; + + handle->state = kTransferDataState; + + /* Wait until ready to complete. */ + while ((!(base->S & kI2C_TransferCompleteFlag)) && (--timeout)) + { + } + + /* Failed to start the transfer. */ + if (timeout == 0) + { + return kStatus_I2C_Timeout; + } + /* Clear all status before transfer. */ + I2C_MasterClearStatusFlags(base, kClearFlags); + + /* Change to send write address when it's a read operation with command. */ + if ((xfer->subaddressSize > 0) && (xfer->direction == kI2C_Read)) + { + direction = kI2C_Write; + } + + /* If repeated start is requested, send repeated start. */ + if (handle->transfer.flags & kI2C_TransferRepeatedStartFlag) + { + result = I2C_MasterRepeatedStart(base, handle->transfer.slaveAddress, direction); + } + else /* For normal transfer, send start. */ + { + result = I2C_MasterStart(base, handle->transfer.slaveAddress, direction); + } + + /* Send subaddress. */ + if (handle->transfer.subaddressSize) + { + do + { + /* Wait until data transfer complete. */ + while (!(base->S & kI2C_IntPendingFlag)) + { + } + + /* Clear interrupt pending flag. */ + base->S = kI2C_IntPendingFlag; + + handle->transfer.subaddressSize--; + base->D = ((handle->transfer.subaddress) >> (8 * handle->transfer.subaddressSize)); + + /* Check if there's transfer error. */ + result = I2C_CheckAndClearError(base, base->S); + + if (result) + { + return result; + } + + } while ((handle->transfer.subaddressSize > 0) && (result == kStatus_Success)); + + if (handle->transfer.direction == kI2C_Read) + { + /* Wait until data transfer complete. */ + while (!(base->S & kI2C_IntPendingFlag)) + { + } + + /* Clear pending flag. */ + base->S = kI2C_IntPendingFlag; + + /* Send repeated start and slave address. */ + result = I2C_MasterRepeatedStart(base, handle->transfer.slaveAddress, kI2C_Read); + } + } + + if (result) + { + return result; + } + + /* Wait until data transfer complete. */ + while (!(base->S & kI2C_IntPendingFlag)) + { + } + + /* Clear pending flag. */ + base->S = kI2C_IntPendingFlag; + + /* Check if there's transfer error. */ + result = I2C_CheckAndClearError(base, base->S); + } + + return result; +} + +static void I2C_MasterTransferEDMAConfig(I2C_Type *base, i2c_master_edma_handle_t *handle) +{ + edma_transfer_config_t transfer_config; + + if (handle->transfer.direction == kI2C_Read) + { + transfer_config.srcAddr = (uint32_t)I2C_GetDataRegAddr(base); + transfer_config.destAddr = (uint32_t)(handle->transfer.data); + + /* Send stop if kI2C_TransferNoStop flag is not asserted. */ + if (!(handle->transfer.flags & kI2C_TransferNoStopFlag)) + { + transfer_config.majorLoopCounts = (handle->transfer.dataSize - 1); + } + else + { + transfer_config.majorLoopCounts = handle->transfer.dataSize; + } + + transfer_config.srcTransferSize = kEDMA_TransferSize1Bytes; + transfer_config.srcOffset = 0; + transfer_config.destTransferSize = kEDMA_TransferSize1Bytes; + transfer_config.destOffset = 1; + transfer_config.minorLoopBytes = 1; + } + else + { + transfer_config.srcAddr = (uint32_t)(handle->transfer.data + 1); + transfer_config.destAddr = (uint32_t)I2C_GetDataRegAddr(base); + transfer_config.majorLoopCounts = (handle->transfer.dataSize - 1); + transfer_config.srcTransferSize = kEDMA_TransferSize1Bytes; + transfer_config.srcOffset = 1; + transfer_config.destTransferSize = kEDMA_TransferSize1Bytes; + transfer_config.destOffset = 0; + transfer_config.minorLoopBytes = 1; + } + + EDMA_SubmitTransfer(handle->dmaHandle, &transfer_config); + EDMA_StartTransfer(handle->dmaHandle); +} + +void I2C_MasterCreateEDMAHandle(I2C_Type *base, + i2c_master_edma_handle_t *handle, + i2c_master_edma_transfer_callback_t callback, + void *userData, + edma_handle_t *edmaHandle) +{ + assert(handle); + assert(edmaHandle); + + uint32_t instance = I2C_GetInstance(base); + + /* Zero handle. */ + memset(handle, 0, sizeof(*handle)); + + /* Set the user callback and userData. */ + handle->completionCallback = callback; + handle->userData = userData; + + /* Set the base for the handle. */ + base = base; + + /* Set the handle for EDMA. */ + handle->dmaHandle = edmaHandle; + + s_edmaPrivateHandle[instance].base = base; + s_edmaPrivateHandle[instance].handle = handle; + + EDMA_SetCallback(edmaHandle, (edma_callback)I2C_MasterTransferCallbackEDMA, &s_edmaPrivateHandle[instance]); +} + +status_t I2C_MasterTransferEDMA(I2C_Type *base, i2c_master_edma_handle_t *handle, i2c_master_transfer_t *xfer) +{ + assert(handle); + assert(xfer); + + status_t result; + uint8_t tmpReg; + volatile uint8_t dummy = 0; + + /* Add this to avoid build warning. */ + dummy++; + + /* Disable dma xfer. */ + I2C_EnableDMA(base, false); + + /* Send address and command buffer(if there is), until senddata phase or receive data phase. */ + result = I2C_InitTransferStateMachineEDMA(base, handle, xfer); + + if (result) + { + /* Send stop if received Nak. */ + if (result == kStatus_I2C_Nak) + { + if (I2C_MasterStop(base) != kStatus_Success) + { + result = kStatus_I2C_Timeout; + } + } + + /* Reset the state to idle state. */ + handle->state = kIdleState; + + return result; + } + + /* Configure dma transfer. */ + /* For i2c send, need to send 1 byte first to trigger the dma, for i2c read, + need to send stop before reading the last byte, so the dma transfer size should + be (xSize - 1). */ + if (handle->transfer.dataSize > 1) + { + I2C_MasterTransferEDMAConfig(base, handle); + if (handle->transfer.direction == kI2C_Read) + { + /* Change direction for receive. */ + base->C1 &= ~I2C_C1_TX_MASK; + + /* Read dummy to release the bus. */ + dummy = base->D; + + /* Enabe dma transfer. */ + I2C_EnableDMA(base, true); + } + else + { + /* Enabe dma transfer. */ + I2C_EnableDMA(base, true); + + /* Send the first data. */ + base->D = *handle->transfer.data; + } + } + else /* If transfer size is 1, use polling method. */ + { + if (handle->transfer.direction == kI2C_Read) + { + tmpReg = base->C1; + + /* Change direction to Rx. */ + tmpReg &= ~I2C_C1_TX_MASK; + + /* Configure send NAK */ + tmpReg |= I2C_C1_TXAK_MASK; + + base->C1 = tmpReg; + + /* Read dummy to release the bus. */ + dummy = base->D; + } + else + { + base->D = *handle->transfer.data; + } + + /* Wait until data transfer complete. */ + while (!(base->S & kI2C_IntPendingFlag)) + { + } + + /* Clear pending flag. */ + base->S = kI2C_IntPendingFlag; + + /* Send stop if kI2C_TransferNoStop flag is not asserted. */ + if (!(handle->transfer.flags & kI2C_TransferNoStopFlag)) + { + result = I2C_MasterStop(base); + } + + /* Read the last byte of data. */ + if (handle->transfer.direction == kI2C_Read) + { + *handle->transfer.data = base->D; + } + + /* Reset the state to idle. */ + handle->state = kIdleState; + } + + return result; +} + +status_t I2C_MasterTransferGetCountEDMA(I2C_Type *base, i2c_master_edma_handle_t *handle, size_t *count) +{ + assert(handle->dmaHandle); + + if (!count) + { + return kStatus_InvalidArgument; + } + + if (kIdleState != handle->state) + { + *count = (handle->transferSize - EDMA_GetRemainingBytes(handle->dmaHandle->base, handle->dmaHandle->channel)); + } + else + { + *count = handle->transferSize; + } + + return kStatus_Success; +} + +void I2C_MasterTransferAbortEDMA(I2C_Type *base, i2c_master_edma_handle_t *handle) +{ + EDMA_AbortTransfer(handle->dmaHandle); + + /* Disable dma transfer. */ + I2C_EnableDMA(base, false); + + /* Reset the state to idle. */ + handle->state = kIdleState; +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_i2c_edma.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_i2c_edma.h new file mode 100644 index 00000000000..c95d6adeeed --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_i2c_edma.h @@ -0,0 +1,132 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FSL_I2C_DMA_H_ +#define _FSL_I2C_DMA_H_ + +#include "fsl_i2c.h" +#include "fsl_dmamux.h" +#include "fsl_edma.h" + +/*! + * @addtogroup i2c_edma_driver + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @brief I2C master eDMA handle typedef. */ +typedef struct _i2c_master_edma_handle i2c_master_edma_handle_t; + +/*! @brief I2C master eDMA transfer callback typedef. */ +typedef void (*i2c_master_edma_transfer_callback_t)(I2C_Type *base, + i2c_master_edma_handle_t *handle, + status_t status, + void *userData); + +/*! @brief I2C master eDMA transfer structure. */ +struct _i2c_master_edma_handle +{ + i2c_master_transfer_t transfer; /*!< I2C master transfer struct. */ + size_t transferSize; /*!< Total bytes to be transferred. */ + uint8_t state; /*!< I2C master transfer status. */ + edma_handle_t *dmaHandle; /*!< The eDMA handler used. */ + i2c_master_edma_transfer_callback_t + completionCallback; /*!< Callback function called after eDMA transfer finished. */ + void *userData; /*!< Callback parameter passed to callback function. */ +}; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif /*_cplusplus. */ + +/*! + * @name I2C Block eDMA Transfer Operation + * @{ + */ + +/*! + * @brief Init the I2C handle which is used in transcational functions. + * + * @param base I2C peripheral base address. + * @param handle pointer to i2c_master_edma_handle_t structure. + * @param callback pointer to user callback function. + * @param userData user param passed to the callback function. + * @param edmaHandle eDMA handle pointer. + */ +void I2C_MasterCreateEDMAHandle(I2C_Type *base, + i2c_master_edma_handle_t *handle, + i2c_master_edma_transfer_callback_t callback, + void *userData, + edma_handle_t *edmaHandle); + +/*! + * @brief Performs a master eDMA non-blocking transfer on the I2C bus. + * + * @param base I2C peripheral base address. + * @param handle pointer to i2c_master_edma_handle_t structure. + * @param xfer pointer to transfer structure of i2c_master_transfer_t. + * @retval kStatus_Success Sucessully complete the data transmission. + * @retval kStatus_I2C_Busy Previous transmission still not finished. + * @retval kStatus_I2C_Timeout Transfer error, wait signal timeout. + * @retval kStatus_I2C_ArbitrationLost Transfer error, arbitration lost. + * @retval kStataus_I2C_Nak Transfer error, receive Nak during transfer. + */ +status_t I2C_MasterTransferEDMA(I2C_Type *base, i2c_master_edma_handle_t *handle, i2c_master_transfer_t *xfer); + +/*! + * @brief Get master transfer status during a eDMA non-blocking transfer. + * + * @param base I2C peripheral base address. + * @param handle pointer to i2c_master_edma_handle_t structure. + * @param count Number of bytes transferred so far by the non-blocking transaction. + */ +status_t I2C_MasterTransferGetCountEDMA(I2C_Type *base, i2c_master_edma_handle_t *handle, size_t *count); + +/*! + * @brief Abort a master eDMA non-blocking transfer in a early time. + * + * @param base I2C peripheral base address. + * @param handle pointer to i2c_master_edma_handle_t structure. + */ +void I2C_MasterTransferAbortEDMA(I2C_Type *base, i2c_master_edma_handle_t *handle); + +/* @} */ +#if defined(__cplusplus) +} +#endif /*_cplusplus. */ +/*@}*/ +#endif /*_FSL_I2C_DMA_H_*/ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_intmux.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_intmux.c new file mode 100644 index 00000000000..c6a55a153b9 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_intmux.c @@ -0,0 +1,177 @@ +/* +* Copyright (c) 2015, Freescale Semiconductor, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without modification, +* are permitted provided that the following conditions are met: +* +* o Redistributions of source code must retain the above copyright notice, this list +* of conditions and the following disclaimer. +* +* o Redistributions in binary form must reproduce the above copyright notice, this +* list of conditions and the following disclaimer in the documentation and/or +* other materials provided with the distribution. +* +* o Neither the name of Freescale Semiconductor, Inc. nor the names of its +* contributors may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "fsl_intmux.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/******************************************************************************* + * Prototypes + ******************************************************************************/ + +/*! + * @brief Get instance number for INTMUX. + * + * @param base INTMUX peripheral base address. + */ +static uint32_t INTMUX_GetInstance(INTMUX_Type *base); + +/*! + * @brief Handle INTMUX all channels IRQ. + * + * The handler reads the INTMUX channel's active vector register. This returns the offset + * from the start of the vector table to the vector for the INTMUX channel's highest priority + * pending source interrupt. After a check for spurious interrupts (an offset of 0), the + * function address at the vector offset is read and jumped to. + * + * @param instance INTMUX instance number. + * @param channel INTMUX channel number. + */ +static void INTMUX_CommonIRQHandler(uint32_t instance, uint32_t channel); + +/******************************************************************************* + * Variables + ******************************************************************************/ + +/*! @brief Array to map INTMUX instance number to base pointer. */ +static INTMUX_Type *const s_intmuxBases[] = INTMUX_BASE_PTRS; + +/*! @brief Array to map INTMUX instance number to clock name. */ +static const clock_ip_name_t s_intmuxClockName[] = INTMUX_CLOCKS; + +/*! @brief Array to map INTMUX instance number to IRQ number. */ +static const IRQn_Type s_intmuxIRQNumber[] = INTMUX_IRQS; + +/******************************************************************************* + * Code + ******************************************************************************/ + +static uint32_t INTMUX_GetInstance(INTMUX_Type *base) +{ + uint32_t instance; + + /* Find the instance index from base address mappings. */ + for (instance = 0; instance < FSL_FEATURE_SOC_INTMUX_COUNT; instance++) + { + if (s_intmuxBases[instance] == base) + { + break; + } + } + + assert(instance < FSL_FEATURE_SOC_INTMUX_COUNT); + + return instance; +} + +static void INTMUX_CommonIRQHandler(uint32_t instance, uint32_t channel) +{ + INTMUX_Type *intmuxBase; + uint32_t pendingIrqOffset; + + intmuxBase = s_intmuxBases[instance]; + pendingIrqOffset = intmuxBase->CHANNEL[channel].CHn_VEC; + if (pendingIrqOffset) + { + uint32_t isr = *(uint32_t *)(SCB->VTOR + pendingIrqOffset); + ((void (*)(void))isr)(); + } +} + +void INTMUX_Init(INTMUX_Type *base) +{ + uint32_t channel; + + /* Enable clock gate. */ + CLOCK_EnableClock(s_intmuxClockName[INTMUX_GetInstance(base)]); + /* Reset all channels and enable NVIC vectors for all INTMUX channels. */ + for (channel = 0; channel < FSL_FEATURE_INTMUX_CHANNEL_COUNT; channel++) + { + INTMUX_ResetChannel(base, channel); + NVIC_EnableIRQ(s_intmuxIRQNumber[channel]); + } +} + +void INTMUX_Deinit(INTMUX_Type *base) +{ + uint32_t channel; + + /* Disable clock gate. */ + CLOCK_DisableClock(s_intmuxClockName[INTMUX_GetInstance(base)]); + /* Disable NVIC vectors for all of the INTMUX channels. */ + for (channel = 0; channel < FSL_FEATURE_INTMUX_CHANNEL_COUNT; channel++) + { + NVIC_DisableIRQ(s_intmuxIRQNumber[channel]); + } +} + +void INTMUX0_0_DriverIRQHandler(void) +{ + INTMUX_CommonIRQHandler(0, 0); +} + +void INTMUX0_1_DriverIRQHandler(void) +{ + INTMUX_CommonIRQHandler(0, 1); +} + +void INTMUX0_2_DriverIRQHandler(void) +{ + INTMUX_CommonIRQHandler(0, 2); +} + +void INTMUX0_3_DriverIRQHandler(void) +{ + INTMUX_CommonIRQHandler(0, 3); +} + +#if defined(INTMUX1) +void INTMUX1_0_DriverIRQHandler(void) +{ + INTMUX_CommonIRQHandler(0, 0); +} + +void INTMUX1_1_DriverIRQHandler(void) +{ + INTMUX_CommonIRQHandler(0, 1); +} + +void INTMUX1_2_DriverIRQHandler(void) +{ + INTMUX_CommonIRQHandler(0, 2); +} + +void INTMUX1_3_DriverIRQHandler(void) +{ + INTMUX_CommonIRQHandler(0, 3); +} +#endif diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_intmux.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_intmux.h new file mode 100644 index 00000000000..a272360de1a --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_intmux.h @@ -0,0 +1,186 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _FSL_INTMUX_H_ +#define _FSL_INTMUX_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup intmux + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*!< Version 2.0.0. */ +#define FSL_INTMUX_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) +/*@}*/ + +/*! @brief INTMUX channel logic mode. */ +typedef enum _intmux_channel_logic_mode +{ + kINTMUX_ChannelLogicOR = 0x0U, /*!< Logic OR all enabled interrupt inputs */ + kINTMUX_ChannelLogicAND, /*!< Logic AND all enabled interrupt inputs */ +} intmux_channel_logic_mode_t; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/*! @name Initialization and deinitialization */ +/*@{*/ + +/*! + * @brief Initializes the INTMUX module. + * + * This function enables the clock gate for the specified INTMUX. It then resets all channels, so that no + * interrupt sources are routed and the logic mode is set to default of #kINTMUX_ChannelLogicOR. + * Finally, the NVIC vectors for all the INTMUX output channels are enabled. + * + * @param base INTMUX peripheral base address. + */ +void INTMUX_Init(INTMUX_Type *base); + +/*! + * @brief Deinitializes an INTMUX instance for operation. + * + * The clock gate for the specified INTMUX is disabled and the NVIC vectors for all channels are disabled. + * + * @param base INTMUX peripheral base address. + */ +void INTMUX_Deinit(INTMUX_Type *base); + +/*! + * @brief Resets an INTMUX channel. + * + * Sets all register values in the specified channel to their reset value. This function disables all interrupt + * sources for the channel. + * + * @param base INTMUX peripheral base address. + * @param channel The INTMUX channel number. + */ +static inline void INTMUX_ResetChannel(INTMUX_Type *base, uint32_t channel) +{ + assert(channel < FSL_FEATURE_INTMUX_CHANNEL_COUNT); + + base->CHANNEL[channel].CHn_CSR |= INTMUX_CHn_CSR_RST_MASK; +} + +/*! + * @brief Sets the logic mode for an INTMUX channel. + * + * INTMUX channels can be configured to use one of the two logic modes that control how pending interrupt sources + * on the channel trigger the output interrupt. + * - #kINTMUX_ChannelLogicOR means any source pending triggers the output interrupt. + * - #kINTMUX_ChannelLogicAND means all selected sources on the channel must be pending before the channel + * output interrupt triggers. + * + * @param base INTMUX peripheral base address. + * @param channel The INTMUX channel number. + * @param logic The INTMUX channel logic mode. + */ +static inline void INTMUX_SetChannelMode(INTMUX_Type *base, uint32_t channel, intmux_channel_logic_mode_t logic) +{ + assert(channel < FSL_FEATURE_INTMUX_CHANNEL_COUNT); + + base->CHANNEL[channel].CHn_CSR = INTMUX_CHn_CSR_AND(logic); +} + +/*@}*/ +/*! @name Sources */ +/*@{*/ + +/*! + * @brief Enables an interrupt source on an INTMUX channel. + * + * @param base INTMUX peripheral base address. + * @param channel Index of the INTMUX channel on which the specified interrupt is enabled. + * @param irq Interrupt to route to the specified INTMUX channel. The interrupt must be an INTMUX source. + */ +static inline void INTMUX_EnableInterrupt(INTMUX_Type *base, uint32_t channel, IRQn_Type irq) +{ + assert(channel < FSL_FEATURE_INTMUX_CHANNEL_COUNT); + assert(irq >= FSL_FEATURE_INTMUX_IRQ_START_INDEX); + + base->CHANNEL[channel].CHn_IER_31_0 |= (1U << ((uint32_t)irq - FSL_FEATURE_INTMUX_IRQ_START_INDEX)); +} + +/*! + * @brief Disables an interrupt source on an INTMUX channel. + * + * @param base INTMUX peripheral base address. + * @param channel Index of the INTMUX channel on which the specified interrupt is disabled. + * @param irq Interrupt number. The interrupt must be an INTMUX source. + */ +static inline void INTMUX_DisableInterrupt(INTMUX_Type *base, uint32_t channel, IRQn_Type irq) +{ + assert(channel < FSL_FEATURE_INTMUX_CHANNEL_COUNT); + assert(irq >= FSL_FEATURE_INTMUX_IRQ_START_INDEX); + + base->CHANNEL[channel].CHn_IER_31_0 &= ~(1U << ((uint32_t)irq - FSL_FEATURE_INTMUX_IRQ_START_INDEX)); +} + +/*@}*/ +/*! @name Status */ +/*@{*/ + +/*! + * @brief Gets INTMUX pending interrupt sources for a specific channel. + * + * @param base INTMUX peripheral base address. + * @param channel The INTMUX channel number. + * @return The mask of pending interrupt bits. Bit[n] set means INTMUX source n is pending. + */ +static inline uint32_t INTMUX_GetChannelPendingSources(INTMUX_Type *base, uint32_t channel) +{ + assert(channel < FSL_FEATURE_INTMUX_CHANNEL_COUNT); + + return base->CHANNEL[channel].CHn_IPR_31_0; +} + +/*@}*/ + +#if defined(__cplusplus) +} +#endif + +/*! @} */ + +#endif /* _FSL_INTMUX_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_llwu.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_llwu.c new file mode 100644 index 00000000000..c27b91e9f04 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_llwu.c @@ -0,0 +1,404 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_llwu.h" + +#if (defined(FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN) && FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN) +void LLWU_SetExternalWakeupPinMode(LLWU_Type *base, uint32_t pinIndex, llwu_external_pin_mode_t pinMode) +{ +#if (defined(FSL_FEATURE_LLWU_REG_BITWIDTH) && (FSL_FEATURE_LLWU_REG_BITWIDTH == 32)) + volatile uint32_t *regBase; + uint32_t regOffset; + uint32_t reg; + + switch (pinIndex >> 4U) + { + case 0U: + regBase = &base->PE1; + break; +#if (defined(FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN) && (FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN > 16)) + case 1U: + regBase = &base->PE2; + break; +#endif + default: + regBase = NULL; + break; + } +#else + volatile uint8_t *regBase; + uint8_t regOffset; + uint8_t reg; + switch (pinIndex >> 2U) + { + case 0U: + regBase = &base->PE1; + break; + case 1U: + regBase = &base->PE2; + break; +#if (defined(FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN) && (FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN > 8)) + case 2U: + regBase = &base->PE3; + break; +#endif +#if (defined(FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN) && (FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN > 12)) + case 3U: + regBase = &base->PE4; + break; +#endif +#if (defined(FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN) && (FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN > 16)) + case 4U: + regBase = &base->PE5; + break; +#endif +#if (defined(FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN) && (FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN > 20)) + case 5U: + regBase = &base->PE6; + break; +#endif +#if (defined(FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN) && (FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN > 24)) + case 6U: + regBase = &base->PE7; + break; +#endif +#if (defined(FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN) && (FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN > 28)) + case 7U: + regBase = &base->PE8; + break; +#endif + default: + regBase = NULL; + break; + } +#endif /* FSL_FEATURE_LLWU_REG_BITWIDTH == 32 */ + + if (regBase) + { + reg = *regBase; +#if (defined(FSL_FEATURE_LLWU_REG_BITWIDTH) && (FSL_FEATURE_LLWU_REG_BITWIDTH == 32)) + regOffset = ((pinIndex & 0x0FU) << 1U); +#else + regOffset = ((pinIndex & 0x03U) << 1U); +#endif + reg &= ~(0x3U << regOffset); + reg |= ((uint32_t)pinMode << regOffset); + *regBase = reg; + } +} + +bool LLWU_GetExternalWakeupPinFlag(LLWU_Type *base, uint32_t pinIndex) +{ +#if (defined(FSL_FEATURE_LLWU_REG_BITWIDTH) && (FSL_FEATURE_LLWU_REG_BITWIDTH == 32)) + return (bool)(base->PF & (1U << pinIndex)); +#else + volatile uint8_t *regBase; + + switch (pinIndex >> 3U) + { +#if (defined(FSL_FEATURE_LLWU_HAS_PF) && FSL_FEATURE_LLWU_HAS_PF) + case 0U: + regBase = &base->PF1; + break; +#if (defined(FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN) && (FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN > 8)) + case 1U: + regBase = &base->PF2; + break; +#endif /* FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN */ +#if (defined(FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN) && (FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN > 16)) + case 2U: + regBase = &base->PF3; + break; +#endif /* FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN */ +#if (defined(FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN) && (FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN > 24)) + case 3U: + regBase = &base->PF4; + break; +#endif /* FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN */ +#else + case 0U: + regBase = &base->F1; + break; +#if (defined(FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN) && (FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN > 8)) + case 1U: + regBase = &base->F2; + break; +#endif /* FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN */ +#if (defined(FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN) && (FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN > 16)) + case 2U: + regBase = &base->F3; + break; +#endif /* FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN */ +#if (defined(FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN) && (FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN > 24)) + case 3U: + regBase = &base->F4; + break; +#endif /* FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN */ +#endif /* FSL_FEATURE_LLWU_HAS_PF */ + default: + regBase = NULL; + break; + } + + if (regBase) + { + return (bool)(*regBase & (1U << pinIndex % 8)); + } + else + { + return false; + } +#endif /* FSL_FEATURE_LLWU_REG_BITWIDTH */ +} + +void LLWU_ClearExternalWakeupPinFlag(LLWU_Type *base, uint32_t pinIndex) +{ +#if (defined(FSL_FEATURE_LLWU_REG_BITWIDTH) && (FSL_FEATURE_LLWU_REG_BITWIDTH == 32)) + base->PF = (1U << pinIndex); +#else + volatile uint8_t *regBase; + switch (pinIndex >> 3U) + { +#if (defined(FSL_FEATURE_LLWU_HAS_PF) && FSL_FEATURE_LLWU_HAS_PF) + case 0U: + regBase = &base->PF1; + break; +#if (defined(FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN) && (FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN > 8)) + case 1U: + regBase = &base->PF2; + break; +#endif /* FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN */ +#if (defined(FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN) && (FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN > 16)) + case 2U: + regBase = &base->PF3; + break; +#endif /* FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN */ +#if (defined(FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN) && (FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN > 24)) + case 3U: + regBase = &base->PF4; + break; +#endif /* FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN */ +#else + case 0U: + regBase = &base->F1; + break; +#if (defined(FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN) && (FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN > 8)) + case 1U: + regBase = &base->F2; + break; +#endif /* FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN */ +#if (defined(FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN) && (FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN > 16)) + case 2U: + regBase = &base->F3; + break; +#endif /* FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN */ +#if (defined(FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN) && (FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN > 24)) + case 3U: + regBase = &base->F4; + break; +#endif /* FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN */ +#endif /* FSL_FEATURE_LLWU_HAS_PF */ + default: + regBase = NULL; + break; + } + if (regBase) + { + *regBase = (1U << pinIndex % 8U); + } +#endif /* FSL_FEATURE_LLWU_REG_BITWIDTH */ +} +#endif /* FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN */ + +#if (defined(FSL_FEATURE_LLWU_HAS_PIN_FILTER) && FSL_FEATURE_LLWU_HAS_PIN_FILTER) +void LLWU_SetPinFilterMode(LLWU_Type *base, uint32_t filterIndex, llwu_external_pin_filter_mode_t filterMode) +{ +#if (defined(FSL_FEATURE_LLWU_REG_BITWIDTH) && (FSL_FEATURE_LLWU_REG_BITWIDTH == 32)) + uint32_t reg; + + reg = base->FILT; + reg &= ~((LLWU_FILT_FILTSEL1_MASK | LLWU_FILT_FILTE1_MASK) << (filterIndex * 8U - 1U)); + reg |= (((filterMode.pinIndex << LLWU_FILT_FILTSEL1_SHIFT) | (filterMode.filterMode << LLWU_FILT_FILTE1_SHIFT) + /* Clear the Filter Detect Flag */ + | LLWU_FILT_FILTF1_MASK) + << (filterIndex * 8U - 1U)); + base->FILT = reg; +#else + volatile uint8_t *regBase; + uint8_t reg; + + switch (filterIndex) + { + case 1: + regBase = &base->FILT1; + break; +#if (defined(FSL_FEATURE_LLWU_HAS_PIN_FILTER) && (FSL_FEATURE_LLWU_HAS_PIN_FILTER > 1)) + case 2: + regBase = &base->FILT2; + break; +#endif /* FSL_FEATURE_LLWU_HAS_PIN_FILTER */ +#if (defined(FSL_FEATURE_LLWU_HAS_PIN_FILTER) && (FSL_FEATURE_LLWU_HAS_PIN_FILTER > 2)) + case 3: + regBase = &base->FILT3; + break; +#endif /* FSL_FEATURE_LLWU_HAS_PIN_FILTER */ +#if (defined(FSL_FEATURE_LLWU_HAS_PIN_FILTER) && (FSL_FEATURE_LLWU_HAS_PIN_FILTER > 3)) + case 4: + regBase = &base->FILT4; + break; +#endif /* FSL_FEATURE_LLWU_HAS_PIN_FILTER */ + default: + regBase = NULL; + break; + } + + if (regBase) + { + reg = *regBase; + reg &= ~(LLWU_FILT1_FILTSEL_MASK | LLWU_FILT1_FILTE_MASK); + reg |= ((uint32_t)filterMode.pinIndex << LLWU_FILT1_FILTSEL_SHIFT); + reg |= ((uint32_t)filterMode.filterMode << LLWU_FILT1_FILTE_SHIFT); + /* Clear the Filter Detect Flag */ + reg |= LLWU_FILT1_FILTF_MASK; + *regBase = reg; + } +#endif /* FSL_FEATURE_LLWU_REG_BITWIDTH */ +} + +bool LLWU_GetPinFilterFlag(LLWU_Type *base, uint32_t filterIndex) +{ +#if (defined(FSL_FEATURE_LLWU_REG_BITWIDTH) && (FSL_FEATURE_LLWU_REG_BITWIDTH == 32)) + return (bool)(base->FILT & (1U << (filterIndex * 8U - 1))); +#else + bool status = false; + + switch (filterIndex) + { + case 1: + status = (base->FILT1 & LLWU_FILT1_FILTF_MASK); + break; +#if (defined(FSL_FEATURE_LLWU_HAS_PIN_FILTER) && (FSL_FEATURE_LLWU_HAS_PIN_FILTER > 1)) + case 2: + status = (base->FILT2 & LLWU_FILT2_FILTF_MASK); + break; +#endif /* FSL_FEATURE_LLWU_HAS_PIN_FILTER */ +#if (defined(FSL_FEATURE_LLWU_HAS_PIN_FILTER) && (FSL_FEATURE_LLWU_HAS_PIN_FILTER > 2)) + case 3: + status = (base->FILT3 & LLWU_FILT3_FILTF_MASK); + break; +#endif /* FSL_FEATURE_LLWU_HAS_PIN_FILTER */ +#if (defined(FSL_FEATURE_LLWU_HAS_PIN_FILTER) && (FSL_FEATURE_LLWU_HAS_PIN_FILTER > 3)) + case 4: + status = (base->FILT4 & LLWU_FILT4_FILTF_MASK); + break; +#endif /* FSL_FEATURE_LLWU_HAS_PIN_FILTER */ + default: + break; + } + + return status; +#endif /* FSL_FEATURE_LLWU_REG_BITWIDTH */ +} + +void LLWU_ClearPinFilterFlag(LLWU_Type *base, uint32_t filterIndex) +{ +#if (defined(FSL_FEATURE_LLWU_REG_BITWIDTH) && (FSL_FEATURE_LLWU_REG_BITWIDTH == 32)) + uint32_t reg; + + reg = base->FILT; + switch (filterIndex) + { + case 1: + reg |= LLWU_FILT_FILTF1_MASK; + break; + case 2: + reg |= LLWU_FILT_FILTF2_MASK; + break; + case 3: + reg |= LLWU_FILT_FILTF3_MASK; + break; + case 4: + reg |= LLWU_FILT_FILTF4_MASK; + break; + default: + break; + } + base->FILT = reg; +#else + volatile uint8_t *regBase; + uint8_t reg; + + switch (filterIndex) + { + case 1: + regBase = &base->FILT1; + break; +#if (defined(FSL_FEATURE_LLWU_HAS_PIN_FILTER) && (FSL_FEATURE_LLWU_HAS_PIN_FILTER > 1)) + case 2: + regBase = &base->FILT2; + break; +#endif /* FSL_FEATURE_LLWU_HAS_PIN_FILTER */ +#if (defined(FSL_FEATURE_LLWU_HAS_PIN_FILTER) && (FSL_FEATURE_LLWU_HAS_PIN_FILTER > 2)) + case 3: + regBase = &base->FILT3; + break; +#endif /* FSL_FEATURE_LLWU_HAS_PIN_FILTER */ +#if (defined(FSL_FEATURE_LLWU_HAS_PIN_FILTER) && (FSL_FEATURE_LLWU_HAS_PIN_FILTER > 3)) + case 4: + regBase = &base->FILT4; + break; +#endif /* FSL_FEATURE_LLWU_HAS_PIN_FILTER */ + default: + regBase = NULL; + break; + } + + if (regBase) + { + reg = *regBase; + reg |= LLWU_FILT1_FILTF_MASK; + *regBase = reg; + } +#endif /* FSL_FEATURE_LLWU_REG_BITWIDTH */ +} +#endif /* FSL_FEATURE_LLWU_HAS_PIN_FILTER */ + +#if (defined(FSL_FEATURE_LLWU_HAS_RESET_ENABLE) && FSL_FEATURE_LLWU_HAS_RESET_ENABLE) +void LLWU_SetResetPinMode(LLWU_Type *base, bool pinEnable, bool enableInLowLeakageMode) +{ + uint8_t reg; + + reg = base->RST; + reg &= ~(LLWU_RST_LLRSTE_MASK | LLWU_RST_RSTFILT_MASK); + reg |= + (((uint32_t)pinEnable << LLWU_RST_LLRSTE_SHIFT) | ((uint32_t)enableInLowLeakageMode << LLWU_RST_RSTFILT_SHIFT)); + base->RST = reg; +} +#endif /* FSL_FEATURE_LLWU_HAS_RESET_ENABLE */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_llwu.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_llwu.h new file mode 100644 index 00000000000..1384d51cc57 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_llwu.h @@ -0,0 +1,320 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FSL_LLWU_H_ +#define _FSL_LLWU_H_ + +#include "fsl_common.h" + +/*! @addtogroup llwu */ +/*! @{ */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief LLWU driver version 2.0.1. */ +#define FSL_LLWU_DRIVER_VERSION (MAKE_VERSION(2, 0, 1)) +/*@}*/ + +/*! + * @brief External input pin control modes + */ +typedef enum _llwu_external_pin_mode +{ + kLLWU_ExternalPinDisable = 0U, /*!< Pin disabled as wakeup input. */ + kLLWU_ExternalPinRisingEdge = 1U, /*!< Pin enabled with rising edge detection. */ + kLLWU_ExternalPinFallingEdge = 2U, /*!< Pin enabled with falling edge detection.*/ + kLLWU_ExternalPinAnyEdge = 3U /*!< Pin enabled with any change detection. */ +} llwu_external_pin_mode_t; + +/*! + * @brief Digital filter control modes + */ +typedef enum _llwu_pin_filter_mode +{ + kLLWU_PinFilterDisable = 0U, /*!< Filter disabled. */ + kLLWU_PinFilterRisingEdge = 1U, /*!< Filter positive edge detection.*/ + kLLWU_PinFilterFallingEdge = 2U, /*!< Filter negative edge detection.*/ + kLLWU_PinFilterAnyEdge = 3U /*!< Filter any edge detection. */ +} llwu_pin_filter_mode_t; + +#if (defined(FSL_FEATURE_LLWU_HAS_VERID) && FSL_FEATURE_LLWU_HAS_VERID) +/*! + * @brief IP version ID definition. + */ +typedef struct _llwu_version_id +{ + uint16_t feature; /*!< Feature Specification Number. */ + uint8_t minor; /*!< Minor version number. */ + uint8_t major; /*!< Major version number. */ +} llwu_version_id_t; +#endif /* FSL_FEATURE_LLWU_HAS_VERID */ + +#if (defined(FSL_FEATURE_LLWU_HAS_PARAM) && FSL_FEATURE_LLWU_HAS_PARAM) +/*! + * @brief IP parameter definition. + */ +typedef struct _llwu_param +{ + uint8_t filters; /*!< Number of pin filter. */ + uint8_t dmas; /*!< Number of wakeup DMA. */ + uint8_t modules; /*!< Number of wakeup module. */ + uint8_t pins; /*!< Number of wake up pin. */ +} llwu_param_t; +#endif /* FSL_FEATURE_LLWU_HAS_PARAM */ + +#if (defined(FSL_FEATURE_LLWU_HAS_PIN_FILTER) && FSL_FEATURE_LLWU_HAS_PIN_FILTER) +/*! + * @brief External input pin filter control structure + */ +typedef struct _llwu_external_pin_filter_mode +{ + uint32_t pinIndex; /*!< Pin number */ + llwu_pin_filter_mode_t filterMode; /*!< Filter mode */ +} llwu_external_pin_filter_mode_t; +#endif /* FSL_FEATURE_LLWU_HAS_PIN_FILTER */ + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @name Low-Leakage Wakeup Unit Control APIs + * @{ + */ + +#if (defined(FSL_FEATURE_LLWU_HAS_VERID) && FSL_FEATURE_LLWU_HAS_VERID) +/*! + * @brief Gets the LLWU version ID. + * + * This function gets the LLWU version ID, including major version number, + * minor version number, and feature specification number. + * + * @param base LLWU peripheral base address. + * @param versionId Pointer to version ID structure. + */ +static inline void LLWU_GetVersionId(LLWU_Type *base, llwu_version_id_t *versionId) +{ + *((uint32_t *)versionId) = base->VERID; +} +#endif /* FSL_FEATURE_LLWU_HAS_VERID */ + +#if (defined(FSL_FEATURE_LLWU_HAS_PARAM) && FSL_FEATURE_LLWU_HAS_PARAM) +/*! + * @brief Gets the LLWU parameter. + * + * This function gets the LLWU parameter, including wakeup pin number, module + * number, DMA number, and pin filter number. + * + * @param base LLWU peripheral base address. + * @param param Pointer to LLWU param structure. + */ +static inline void LLWU_GetParam(LLWU_Type *base, llwu_param_t *param) +{ + *((uint32_t *)param) = base->PARAM; +} +#endif /* FSL_FEATURE_LLWU_HAS_PARAM */ + +#if (defined(FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN) && FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN) +/*! + * @brief Sets the external input pin source mode. + * + * This function sets the external input pin source mode that is used + * as a wake up source. + * + * @param base LLWU peripheral base address. + * @param pinIndex pin index which to be enabled as external wakeup source, start from 1. + * @param pinMode pin configuration mode defined in llwu_external_pin_modes_t + */ +void LLWU_SetExternalWakeupPinMode(LLWU_Type *base, uint32_t pinIndex, llwu_external_pin_mode_t pinMode); + +/*! + * @brief Gets the external wakeup source flag. + * + * This function checks the external pin flag to detect whether the MCU is + * woke up by the specific pin. + * + * @param base LLWU peripheral base address. + * @param pinIndex pin index, start from 1. + * @return true if the specific pin is wake up source. + */ +bool LLWU_GetExternalWakeupPinFlag(LLWU_Type *base, uint32_t pinIndex); + +/*! + * @brief Clears the external wakeup source flag. + * + * This function clears the external wakeup source flag for a specific pin. + * + * @param base LLWU peripheral base address. + * @param pinIndex pin index, start from 1. + */ +void LLWU_ClearExternalWakeupPinFlag(LLWU_Type *base, uint32_t pinIndex); +#endif /* FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN */ + +#if (defined(FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE) && FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE) +/*! + * @brief Enables/disables the internal module source. + * + * This function enables/disables the internal module source mode that is used + * as a wake up source. + * + * @param base LLWU peripheral base address. + * @param moduleIndex module index which to be enabled as internal wakeup source, start from 1. + * @param enable enable or disable setting + */ +static inline void LLWU_EnableInternalModuleInterruptWakup(LLWU_Type *base, uint32_t moduleIndex, bool enable) +{ + if (enable) + { + base->ME |= 1U << moduleIndex; + } + else + { + base->ME &= ~(1U << moduleIndex); + } +} + +/*! + * @brief Gets the external wakeup source flag. + * + * This function checks the external pin flag to detect whether the system is + * woke up by the specific pin. + * + * @param base LLWU peripheral base address. + * @param moduleIndex module index, start from 1. + * @return true if the specific pin is wake up source. + */ +static inline bool LLWU_GetInternalWakeupModuleFlag(LLWU_Type *base, uint32_t moduleIndex) +{ +#if (defined(FSL_FEATURE_LLWU_HAS_MF) && FSL_FEATURE_LLWU_HAS_MF) +#if (defined(FSL_FEATURE_LLWU_REG_BITWIDTH) && (FSL_FEATURE_LLWU_REG_BITWIDTH == 32)) + return (bool)(base->MF & (1U << moduleIndex)); +#else + return (bool)(base->MF5 & (1U << moduleIndex)); +#endif /* FSL_FEATURE_LLWU_REG_BITWIDTH */ +#else +#if (defined(FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN) && (FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN > 16)) + return (bool)(base->F5 & (1U << moduleIndex)); +#else +#if (defined(FSL_FEATURE_LLWU_HAS_PF) && FSL_FEATURE_LLWU_HAS_PF) + return (bool)(base->PF3 & (1U << moduleIndex)); +#else + return (bool)(base->F3 & (1U << moduleIndex)); +#endif /* FSL_FEATURE_LLWU_HAS_PF */ +#endif /* FSL_FEATURE_LLWU_HAS_EXTERNAL_PIN */ +#endif /* FSL_FEATURE_LLWU_HAS_MF */ +} +#endif /* FSL_FEATURE_LLWU_HAS_INTERNAL_MODULE */ + +#if (defined(FSL_FEATURE_LLWU_HAS_DMA_ENABLE_REG) && FSL_FEATURE_LLWU_HAS_DMA_ENABLE_REG) +/*! + * @brief Enables/disables the internal module DMA wakeup source. + * + * This function enables/disables the internal DMA that is used as a wake up source. + * + * @param base LLWU peripheral base address. + * @param moduleIndex Internal module index which used as DMA request source, start from 1. + * @param enable Enable or disable DMA request source + */ +static inline void LLWU_EnableInternalModuleDmaRequestWakup(LLWU_Type *base, uint32_t moduleIndex, bool enable) +{ + if (enable) + { + base->DE |= 1U << moduleIndex; + } + else + { + base->DE &= ~(1U << moduleIndex); + } +} +#endif /* FSL_FEATURE_LLWU_HAS_DMA_ENABLE_REG */ + +#if (defined(FSL_FEATURE_LLWU_HAS_PIN_FILTER) && FSL_FEATURE_LLWU_HAS_PIN_FILTER) +/*! + * @brief Sets the pin filter configuration. + * + * This function sets the pin filter configuration. + * + * @param base LLWU peripheral base address. + * @param filterIndex pin filter index which used to enable/disable the digital filter, start from 1. + * @param filterMode filter mode configuration + */ +void LLWU_SetPinFilterMode(LLWU_Type *base, uint32_t filterIndex, llwu_external_pin_filter_mode_t filterMode); + +/*! + * @brief Gets the pin filter configuration. + * + * This function gets the pin filter flag. + * + * @param base LLWU peripheral base address. + * @param filterIndex pin filter index, start from 1. + * @return true if the flag is a source of existing a low-leakage power mode. + */ +bool LLWU_GetPinFilterFlag(LLWU_Type *base, uint32_t filterIndex); + +/*! + * @brief Clear the pin filter configuration. + * + * This function clear the pin filter flag. + * + * @param base LLWU peripheral base address. + * @param filterIndex pin filter index which to be clear the flag, start from 1. + */ +void LLWU_ClearPinFilterFlag(LLWU_Type *base, uint32_t filterIndex); + +#endif /* FSL_FEATURE_LLWU_HAS_PIN_FILTER */ + +#if (defined(FSL_FEATURE_LLWU_HAS_RESET_ENABLE) && FSL_FEATURE_LLWU_HAS_RESET_ENABLE) +/*! + * @brief Sets the reset pin mode. + * + * This function sets how the reset pin is used as a low leakage mode exit source. + * + * @param pinEnable Enable reset pin filter + * @param pinFilterEnable Specify whether pin filter is enabled in Low-Leakage power mode. + */ +void LLWU_SetResetPinMode(LLWU_Type *base, bool pinEnable, bool enableInLowLeakageMode); +#endif /* FSL_FEATURE_LLWU_HAS_RESET_ENABLE */ + +/*@}*/ + +#if defined(__cplusplus) +} +#endif + +/*! @}*/ +#endif /* _FSL_LLWU_H_*/ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_lptmr.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_lptmr.c new file mode 100644 index 00000000000..b3dcc89d55d --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_lptmr.c @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_lptmr.h" + +/******************************************************************************* + * Prototypes + ******************************************************************************/ +/*! + * @brief Gets the instance from the base address to be used to gate or ungate the module clock + * + * @param base LPTMR peripheral base address + * + * @return The LPTMR instance + */ +static uint32_t LPTMR_GetInstance(LPTMR_Type *base); + +/******************************************************************************* + * Variables + ******************************************************************************/ +/*! @brief Pointers to LPTMR bases for each instance. */ +static LPTMR_Type *const s_lptmrBases[] = LPTMR_BASE_PTRS; + +/*! @brief Pointers to LPTMR clocks for each instance. */ +static const clock_ip_name_t s_lptmrClocks[] = LPTMR_CLOCKS; + +/******************************************************************************* + * Code + ******************************************************************************/ +static uint32_t LPTMR_GetInstance(LPTMR_Type *base) +{ + uint32_t instance; + + /* Find the instance index from base address mappings. */ + for (instance = 0; instance < FSL_FEATURE_SOC_LPTMR_COUNT; instance++) + { + if (s_lptmrBases[instance] == base) + { + break; + } + } + + assert(instance < FSL_FEATURE_SOC_LPTMR_COUNT); + + return instance; +} + +void LPTMR_Init(LPTMR_Type *base, const lptmr_config_t *config) +{ + assert(config); + + /* Ungate the LPTMR clock*/ + CLOCK_EnableClock(s_lptmrClocks[LPTMR_GetInstance(base)]); + + /* Configure the timers operation mode and input pin setup */ + base->CSR = (LPTMR_CSR_TMS(config->timerMode) | LPTMR_CSR_TFC(config->enableFreeRunning) | + LPTMR_CSR_TPP(config->pinPolarity) | LPTMR_CSR_TPS(config->pinSelect)); + + /* Configure the prescale value and clock source */ + base->PSR = (LPTMR_PSR_PRESCALE(config->value) | LPTMR_PSR_PBYP(config->bypassPrescaler) | + LPTMR_PSR_PCS(config->prescalerClockSource)); +} + +void LPTMR_Deinit(LPTMR_Type *base) +{ + /* Disable the LPTMR and reset the internal logic */ + base->CSR &= ~LPTMR_CSR_TEN_MASK; + /* Gate the LPTMR clock*/ + CLOCK_DisableClock(s_lptmrClocks[LPTMR_GetInstance(base)]); +} + +void LPTMR_GetDefaultConfig(lptmr_config_t *config) +{ + assert(config); + + /* Use time counter mode */ + config->timerMode = kLPTMR_TimerModeTimeCounter; + /* Use input 0 as source in pulse counter mode */ + config->pinSelect = kLPTMR_PinSelectInput_0; + /* Pulse input pin polarity is active-high */ + config->pinPolarity = kLPTMR_PinPolarityActiveHigh; + /* Counter resets whenever TCF flag is set */ + config->enableFreeRunning = false; + /* Bypass the prescaler */ + config->bypassPrescaler = true; + /* LPTMR clock source */ + config->prescalerClockSource = kLPTMR_PrescalerClock_1; + /* Divide the prescaler clock by 2 */ + config->value = kLPTMR_Prescale_Glitch_0; +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_lptmr.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_lptmr.h new file mode 100644 index 00000000000..d022cbba6a8 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_lptmr.h @@ -0,0 +1,370 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FSL_LPTMR_H_ +#define _FSL_LPTMR_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup lptmr + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +#define FSL_LPTMR_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) /*!< Version 2.0.0 */ +/*@}*/ + +/*! @brief LPTMR pin selection, used in pulse counter mode.*/ +typedef enum _lptmr_pin_select +{ + kLPTMR_PinSelectInput_0 = 0x0U, /*!< Pulse counter input 0 is selected */ + kLPTMR_PinSelectInput_1 = 0x1U, /*!< Pulse counter input 1 is selected */ + kLPTMR_PinSelectInput_2 = 0x2U, /*!< Pulse counter input 2 is selected */ + kLPTMR_PinSelectInput_3 = 0x3U /*!< Pulse counter input 3 is selected */ +} lptmr_pin_select_t; + +/*! @brief LPTMR pin polarity, used in pulse counter mode.*/ +typedef enum _lptmr_pin_polarity +{ + kLPTMR_PinPolarityActiveHigh = 0x0U, /*!< Pulse Counter input source is active-high */ + kLPTMR_PinPolarityActiveLow = 0x1U /*!< Pulse Counter input source is active-low */ +} lptmr_pin_polarity_t; + +/*! @brief LPTMR timer mode selection.*/ +typedef enum _lptmr_timer_mode +{ + kLPTMR_TimerModeTimeCounter = 0x0U, /*!< Time Counter mode */ + kLPTMR_TimerModePulseCounter = 0x1U /*!< Pulse Counter mode */ +} lptmr_timer_mode_t; + +/*! @brief LPTMR prescaler/glitch filter values*/ +typedef enum _lptmr_prescaler_glitch_value +{ + kLPTMR_Prescale_Glitch_0 = 0x0U, /*!< Prescaler divide 2, glitch filter does not support this setting */ + kLPTMR_Prescale_Glitch_1 = 0x1U, /*!< Prescaler divide 4, glitch filter 2 */ + kLPTMR_Prescale_Glitch_2 = 0x2U, /*!< Prescaler divide 8, glitch filter 4 */ + kLPTMR_Prescale_Glitch_3 = 0x3U, /*!< Prescaler divide 16, glitch filter 8 */ + kLPTMR_Prescale_Glitch_4 = 0x4U, /*!< Prescaler divide 32, glitch filter 16 */ + kLPTMR_Prescale_Glitch_5 = 0x5U, /*!< Prescaler divide 64, glitch filter 32 */ + kLPTMR_Prescale_Glitch_6 = 0x6U, /*!< Prescaler divide 128, glitch filter 64 */ + kLPTMR_Prescale_Glitch_7 = 0x7U, /*!< Prescaler divide 256, glitch filter 128 */ + kLPTMR_Prescale_Glitch_8 = 0x8U, /*!< Prescaler divide 512, glitch filter 256 */ + kLPTMR_Prescale_Glitch_9 = 0x9U, /*!< Prescaler divide 1024, glitch filter 512*/ + kLPTMR_Prescale_Glitch_10 = 0xAU, /*!< Prescaler divide 2048 glitch filter 1024 */ + kLPTMR_Prescale_Glitch_11 = 0xBU, /*!< Prescaler divide 4096, glitch filter 2048 */ + kLPTMR_Prescale_Glitch_12 = 0xCU, /*!< Prescaler divide 8192, glitch filter 4096 */ + kLPTMR_Prescale_Glitch_13 = 0xDU, /*!< Prescaler divide 16384, glitch filter 8192 */ + kLPTMR_Prescale_Glitch_14 = 0xEU, /*!< Prescaler divide 32768, glitch filter 16384 */ + kLPTMR_Prescale_Glitch_15 = 0xFU /*!< Prescaler divide 65536, glitch filter 32768 */ +} lptmr_prescaler_glitch_value_t; + +/*! + * @brief LPTMR prescaler/glitch filter clock select. + * @note Clock connections are SoC-specific + */ +typedef enum _lptmr_prescaler_clock_select +{ + kLPTMR_PrescalerClock_0 = 0x0U, /*!< Prescaler/glitch filter clock 0 selected. */ + kLPTMR_PrescalerClock_1 = 0x1U, /*!< Prescaler/glitch filter clock 1 selected. */ + kLPTMR_PrescalerClock_2 = 0x2U, /*!< Prescaler/glitch filter clock 2 selected. */ + kLPTMR_PrescalerClock_3 = 0x3U, /*!< Prescaler/glitch filter clock 3 selected. */ +} lptmr_prescaler_clock_select_t; + +/*! @brief List of LPTMR interrupts */ +typedef enum _lptmr_interrupt_enable +{ + kLPTMR_TimerInterruptEnable = LPTMR_CSR_TIE_MASK, /*!< Timer interrupt enable */ +} lptmr_interrupt_enable_t; + +/*! @brief List of LPTMR status flags */ +typedef enum _lptmr_status_flags +{ + kLPTMR_TimerCompareFlag = LPTMR_CSR_TCF_MASK, /*!< Timer compare flag */ +} lptmr_status_flags_t; + +/*! + * @brief LPTMR config structure + * + * This structure holds the configuration settings for the LPTMR peripheral. To initialize this + * structure to reasonable defaults, call the LPTMR_GetDefaultConfig() function and pass a + * pointer to your config structure instance. + * + * The config struct can be made const so it resides in flash + */ +typedef struct _lptmr_config +{ + lptmr_timer_mode_t timerMode; /*!< Time counter mode or pulse counter mode */ + lptmr_pin_select_t pinSelect; /*!< LPTMR pulse input pin select; used only in pulse counter mode */ + lptmr_pin_polarity_t pinPolarity; /*!< LPTMR pulse input pin polarity; used only in pulse counter mode */ + bool enableFreeRunning; /*!< true: enable free running, counter is reset on overflow + false: counter is reset when the compare flag is set */ + bool bypassPrescaler; /*!< true: bypass prescaler; false: use clock from prescaler */ + lptmr_prescaler_clock_select_t prescalerClockSource; /*!< LPTMR clock source */ + lptmr_prescaler_glitch_value_t value; /*!< Prescaler or glitch filter value */ +} lptmr_config_t; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @name Initialization and deinitialization + * @{ + */ + +/*! + * @brief Ungate the LPTMR clock and configures the peripheral for basic operation. + * + * @note This API should be called at the beginning of the application using the LPTMR driver. + * + * @param base LPTMR peripheral base address + * @param config Pointer to user's LPTMR config structure. + */ +void LPTMR_Init(LPTMR_Type *base, const lptmr_config_t *config); + +/*! + * @brief Gate the LPTMR clock + * + * @param base LPTMR peripheral base address + */ +void LPTMR_Deinit(LPTMR_Type *base); + +/*! + * @brief Fill in the LPTMR config struct with the default settings + * + * The default values are: + * @code + * config->timerMode = kLPTMR_TimerModeTimeCounter; + * config->pinSelect = kLPTMR_PinSelectInput_0; + * config->pinPolarity = kLPTMR_PinPolarityActiveHigh; + * config->enableFreeRunning = false; + * config->bypassPrescaler = true; + * config->prescalerClockSource = kLPTMR_PrescalerClock_1; + * config->value = kLPTMR_Prescale_Glitch_0; + * @endcode + * @param config Pointer to user's LPTMR config structure. + */ +void LPTMR_GetDefaultConfig(lptmr_config_t *config); + +/*! @}*/ + +/*! + * @name Interrupt Interface + * @{ + */ + +/*! + * @brief Enables the selected LPTMR interrupts. + * + * @param base LPTMR peripheral base address + * @param mask The interrupts to enable. This is a logical OR of members of the + * enumeration ::lptmr_interrupt_enable_t + */ +static inline void LPTMR_EnableInterrupts(LPTMR_Type *base, uint32_t mask) +{ + uint32_t reg = base->CSR; + + /* Clear the TCF bit so that we don't clear this w1c bit when writing back */ + reg &= ~(LPTMR_CSR_TCF_MASK); + reg |= mask; + base->CSR = reg; +} + +/*! + * @brief Disables the selected LPTMR interrupts. + * + * @param base LPTMR peripheral base address + * @param mask The interrupts to disable. This is a logical OR of members of the + * enumeration ::lptmr_interrupt_enable_t + */ +static inline void LPTMR_DisableInterrupts(LPTMR_Type *base, uint32_t mask) +{ + uint32_t reg = base->CSR; + + /* Clear the TCF bit so that we don't clear this w1c bit when writing back */ + reg &= ~(LPTMR_CSR_TCF_MASK); + reg &= ~mask; + base->CSR = reg; +} + +/*! + * @brief Gets the enabled LPTMR interrupts. + * + * @param base LPTMR peripheral base address + * + * @return The enabled interrupts. This is the logical OR of members of the + * enumeration ::lptmr_interrupt_enable_t + */ +static inline uint32_t LPTMR_GetEnabledInterrupts(LPTMR_Type *base) +{ + return (base->CSR & LPTMR_CSR_TIE_MASK); +} + +/*! @}*/ + +/*! + * @name Status Interface + * @{ + */ + +/*! + * @brief Gets the LPTMR status flags + * + * @param base LPTMR peripheral base address + * + * @return The status flags. This is the logical OR of members of the + * enumeration ::lptmr_status_flags_t + */ +static inline uint32_t LPTMR_GetStatusFlags(LPTMR_Type *base) +{ + return (base->CSR & LPTMR_CSR_TCF_MASK); +} + +/*! + * @brief Clears the LPTMR status flags + * + * @param base LPTMR peripheral base address + * @param mask The status flags to clear. This is a logical OR of members of the + * enumeration ::lptmr_status_flags_t + */ +static inline void LPTMR_ClearStatusFlags(LPTMR_Type *base, uint32_t mask) +{ + base->CSR |= mask; +} + +/*! @}*/ + +/*! + * @name Read and Write the timer period + * @{ + */ + +/*! + * @brief Sets the timer period in units of count. + * + * Timers counts from 0 till it equals the count value set here. The count value is written to + * the CMR register. + * + * @note + * 1. The TCF flag is set with the CNR equals the count provided here and then increments. + * 2. User can call the utility macros provided in fsl_common.h to convert to ticks + * + * @param base LPTMR peripheral base address + * @param ticks Timer period in units of ticks + */ +static inline void LPTMR_SetTimerPeriod(LPTMR_Type *base, uint16_t ticks) +{ + base->CMR = ticks; +} + +/*! + * @brief Reads the current timer counting value. + * + * This function returns the real-time timer counting value, in a range from 0 to a + * timer period. + * + * @note User can call the utility macros provided in fsl_common.h to convert ticks to usec or msec + * + * @param base LPTMR peripheral base address + * + * @return Current counter value in ticks + */ +static inline uint16_t LPTMR_GetCurrentTimerCount(LPTMR_Type *base) +{ + /* Must first write any value to the CNR. This synchronizes and registers the current value + * of the CNR into a temporary register which can then be read + */ + base->CNR = 0U; + return (uint16_t)base->CNR; +} + +/*! @}*/ + +/*! + * @name Timer Start and Stop + * @{ + */ + +/*! + * @brief Starts the timer counting. + * + * After calling this function, the timer counts up to the CMR register value. + * Each time the timer reaches CMR value and then increments, it generates a + * trigger pulse and sets the timeout interrupt flag. An interrupt is also + * triggered if the timer interrupt is enabled. + * + * @param base LPTMR peripheral base address + */ +static inline void LPTMR_StartTimer(LPTMR_Type *base) +{ + uint32_t reg = base->CSR; + + /* Clear the TCF bit so that we don't clear this w1c bit when writing back */ + reg &= ~(LPTMR_CSR_TCF_MASK); + reg |= LPTMR_CSR_TEN_MASK; + base->CSR = reg; +} + +/*! + * @brief Stops the timer counting. + * + * This function stops the timer counting and resets the timer's counter register + * + * @param base LPTMR peripheral base address + */ +static inline void LPTMR_StopTimer(LPTMR_Type *base) +{ + uint32_t reg = base->CSR; + + /* Clear the TCF bit so that we don't clear this w1c bit when writing back */ + reg &= ~(LPTMR_CSR_TCF_MASK); + reg &= ~LPTMR_CSR_TEN_MASK; + base->CSR = reg; +} + +/*! @}*/ + +#if defined(__cplusplus) +} +#endif + +/*! @}*/ + +#endif /* _FSL_LPTMR_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_lpuart.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_lpuart.c new file mode 100644 index 00000000000..9a7fd9cb3f5 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_lpuart.c @@ -0,0 +1,1266 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_lpuart.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ +/* LPUART transfer state. */ +enum _lpuart_transfer_states +{ + kLPUART_TxIdle, /*!< TX idle. */ + kLPUART_TxBusy, /*!< TX busy. */ + kLPUART_RxIdle, /*!< RX idle. */ + kLPUART_RxBusy /*!< RX busy. */ +}; + +/* Typedef for interrupt handler. */ +typedef void (*lpuart_isr_t)(LPUART_Type *base, lpuart_handle_t *handle); + +/******************************************************************************* + * Prototypes + ******************************************************************************/ +/*! + * @brief Get the LPUART instance from peripheral base address. + * + * @param base LPUART peripheral base address. + * @return LPUART instance. + */ +uint32_t LPUART_GetInstance(LPUART_Type *base); + +/*! + * @brief Get the length of received data in RX ring buffer. + * + * @userData handle LPUART handle pointer. + * @return Length of received data in RX ring buffer. + */ +static size_t LPUART_TransferGetRxRingBufferLength(LPUART_Type *base, lpuart_handle_t *handle); + +/*! + * @brief Check whether the RX ring buffer is full. + * + * @userData handle LPUART handle pointer. + * @retval true RX ring buffer is full. + * @retval false RX ring buffer is not full. + */ +static bool LPUART_TransferIsRxRingBufferFull(LPUART_Type *base, lpuart_handle_t *handle); + +/*! + * @brief Write to TX register using non-blocking method. + * + * This function writes data to the TX register directly, upper layer must make + * sure the TX register is empty or TX FIFO has empty room before calling this function. + * + * @note This function does not check whether all the data has been sent out to bus, + * so before disable TX, check kLPUART_TransmissionCompleteFlag to ensure the TX is + * finished. + * + * @param base LPUART peripheral base address. + * @param data Start addresss of the data to write. + * @param length Size of the buffer to be sent. + */ +static void LPUART_WriteNonBlocking(LPUART_Type *base, const uint8_t *data, size_t length); + +/*! + * @brief Read RX register using non-blocking method. + * + * This function reads data from the TX register directly, upper layer must make + * sure the RX register is full or TX FIFO has data before calling this function. + * + * @param base LPUART peripheral base address. + * @param data Start addresss of the buffer to store the received data. + * @param length Size of the buffer. + */ +static void LPUART_ReadNonBlocking(LPUART_Type *base, uint8_t *data, size_t length); + +/******************************************************************************* + * Variables + ******************************************************************************/ +/* Array of LPUART handle. */ +static lpuart_handle_t *s_lpuartHandle[FSL_FEATURE_SOC_LPUART_COUNT]; +/* Array of LPUART peripheral base address. */ +static LPUART_Type *const s_lpuartBases[] = LPUART_BASE_PTRS; +/* Array of LPUART IRQ number. */ +#if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ +static const IRQn_Type s_lpuartRxIRQ[] = LPUART_RX_IRQS; +static const IRQn_Type s_lpuartTxIRQ[] = LPUART_TX_IRQS; +#else +static const IRQn_Type s_lpuartIRQ[] = LPUART_RX_TX_IRQS; +#endif +/* Array of LPUART clock name. */ +static const clock_ip_name_t s_lpuartClock[] = LPUART_CLOCKS; +/* LPUART ISR for transactional APIs. */ +static lpuart_isr_t s_lpuartIsr; + +/******************************************************************************* + * Code + ******************************************************************************/ +uint32_t LPUART_GetInstance(LPUART_Type *base) +{ + uint32_t instance; + + /* Find the instance index from base address mappings. */ + for (instance = 0; instance < FSL_FEATURE_SOC_LPUART_COUNT; instance++) + { + if (s_lpuartBases[instance] == base) + { + break; + } + } + + assert(instance < FSL_FEATURE_SOC_LPUART_COUNT); + + return instance; +} + +static size_t LPUART_TransferGetRxRingBufferLength(LPUART_Type *base, lpuart_handle_t *handle) +{ + assert(handle); + + size_t size; + + if (handle->rxRingBufferTail > handle->rxRingBufferHead) + { + size = (size_t)(handle->rxRingBufferHead + handle->rxRingBufferSize - handle->rxRingBufferTail); + } + else + { + size = (size_t)(handle->rxRingBufferHead - handle->rxRingBufferTail); + } + + return size; +} + +static bool LPUART_TransferIsRxRingBufferFull(LPUART_Type *base, lpuart_handle_t *handle) +{ + assert(handle); + + bool full; + + if (LPUART_TransferGetRxRingBufferLength(base, handle) == (handle->rxRingBufferSize - 1U)) + { + full = true; + } + else + { + full = false; + } + return full; +} + +static void LPUART_WriteNonBlocking(LPUART_Type *base, const uint8_t *data, size_t length) +{ + assert(data); + + size_t i; + + /* The Non Blocking write data API assume user have ensured there is enough space in + peripheral to write. */ + for (i = 0; i < length; i++) + { + base->DATA = data[i]; + } +} + +static void LPUART_ReadNonBlocking(LPUART_Type *base, uint8_t *data, size_t length) +{ + assert(data); + + size_t i; +#if defined(FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT) && FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT + uint32_t ctrl = base->CTRL; + bool isSevenDataBits = + ((ctrl & LPUART_CTRL_M7_MASK) || + ((!(ctrl & LPUART_CTRL_M7_MASK)) && (!(ctrl & LPUART_CTRL_M_MASK)) && (ctrl & LPUART_CTRL_PE_MASK))); +#endif + + /* The Non Blocking read data API assume user have ensured there is enough space in + peripheral to write. */ + for (i = 0; i < length; i++) + { +#if defined(FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT) && FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT + if (isSevenDataBits) + { + data[i] = (base->DATA & 0x7F); + } + else + { + data[i] = base->DATA; + } +#else + data[i] = base->DATA; +#endif + } +} + +status_t LPUART_Init(LPUART_Type *base, const lpuart_config_t *config, uint32_t srcClock_Hz) +{ + assert(config); + assert(config->baudRate_Bps); +#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO + assert(FSL_FEATURE_LPUART_FIFO_SIZEn(base) >= config->txFifoWatermark); + assert(FSL_FEATURE_LPUART_FIFO_SIZEn(base) >= config->rxFifoWatermark); +#endif + + uint32_t temp; + uint16_t sbr, sbrTemp; + uint32_t osr, osrTemp, tempDiff, calculatedBaud, baudDiff; + + /* This LPUART instantiation uses a slightly different baud rate calculation + * The idea is to use the best OSR (over-sampling rate) possible + * Note, OSR is typically hard-set to 16 in other LPUART instantiations + * loop to find the best OSR value possible, one that generates minimum baudDiff + * iterate through the rest of the supported values of OSR */ + + baudDiff = config->baudRate_Bps; + osr = 0; + sbr = 0; + for (osrTemp = 4; osrTemp <= 32; osrTemp++) + { + /* calculate the temporary sbr value */ + sbrTemp = (srcClock_Hz / (config->baudRate_Bps * osrTemp)); + /*set sbrTemp to 1 if the sourceClockInHz can not satisfy the desired baud rate*/ + if (sbrTemp == 0) + { + sbrTemp = 1; + } + /* Calculate the baud rate based on the temporary OSR and SBR values */ + calculatedBaud = (srcClock_Hz / (osrTemp * sbrTemp)); + + tempDiff = calculatedBaud - config->baudRate_Bps; + + /* Select the better value between srb and (sbr + 1) */ + if (tempDiff > (config->baudRate_Bps - (srcClock_Hz / (osrTemp * (sbrTemp + 1))))) + { + tempDiff = config->baudRate_Bps - (srcClock_Hz / (osrTemp * (sbrTemp + 1))); + sbrTemp++; + } + + if (tempDiff <= baudDiff) + { + baudDiff = tempDiff; + osr = osrTemp; /* update and store the best OSR value calculated */ + sbr = sbrTemp; /* update store the best SBR value calculated */ + } + } + + /* Check to see if actual baud rate is within 3% of desired baud rate + * based on the best calculate OSR value */ + if (baudDiff > ((config->baudRate_Bps / 100) * 3)) + { + /* Unacceptable baud rate difference of more than 3%*/ + return kStatus_LPUART_BaudrateNotSupport; + } + + /* Enable lpuart clock */ + CLOCK_EnableClock(s_lpuartClock[LPUART_GetInstance(base)]); + + /* Disable LPUART TX RX before setting. */ + base->CTRL &= ~(LPUART_CTRL_TE_MASK | LPUART_CTRL_RE_MASK); + + temp = base->BAUD; + + /* Acceptable baud rate, check if OSR is between 4x and 7x oversampling. + * If so, then "BOTHEDGE" sampling must be turned on */ + if ((osr > 3) && (osr < 8)) + { + temp |= LPUART_BAUD_BOTHEDGE_MASK; + } + + /* program the osr value (bit value is one less than actual value) */ + temp &= ~LPUART_BAUD_OSR_MASK; + temp |= LPUART_BAUD_OSR(osr - 1); + + /* write the sbr value to the BAUD registers */ + temp &= ~LPUART_BAUD_SBR_MASK; + base->BAUD = temp | LPUART_BAUD_SBR(sbr); + + /* Set bit count and parity mode. */ + base->BAUD &= ~LPUART_BAUD_M10_MASK; + + temp = base->CTRL & ~(LPUART_CTRL_PE_MASK | LPUART_CTRL_PT_MASK | LPUART_CTRL_M_MASK); + + temp |= (uint8_t)config->parityMode; + +#if defined(FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT) && FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT + if (kLPUART_SevenDataBits == config->dataBitsCount) + { + if (kLPUART_ParityDisabled != config->parityMode) + { + temp &= ~LPUART_CTRL_M7_MASK; /* Seven data bits and one parity bit */ + } + else + { + temp |= LPUART_CTRL_M7_MASK; + } + } + else +#endif + { + if (kLPUART_ParityDisabled != config->parityMode) + { + temp |= LPUART_CTRL_M_MASK; /* Eight data bits and one parity bit */ + } + } + + base->CTRL = temp; + +#if defined(FSL_FEATURE_LPUART_HAS_STOP_BIT_CONFIG_SUPPORT) && FSL_FEATURE_LPUART_HAS_STOP_BIT_CONFIG_SUPPORT + /* set stop bit per char */ + temp = base->BAUD & ~LPUART_BAUD_SBNS_MASK; + base->BAUD = temp | LPUART_BAUD_SBNS((uint8_t)config->stopBitCount); +#endif + +#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO + /* Set tx/rx WATER watermark */ + base->WATER = (((uint32_t)(config->rxFifoWatermark) << 16) | config->txFifoWatermark); + + /* Enable tx/rx FIFO */ + base->FIFO |= (LPUART_FIFO_TXFE_MASK | LPUART_FIFO_RXFE_MASK); + + /* Flush FIFO */ + base->FIFO |= (LPUART_FIFO_TXFLUSH_MASK | LPUART_FIFO_RXFLUSH_MASK); +#endif + + /* Clear all status flags */ + temp = (LPUART_STAT_RXEDGIF_MASK | LPUART_STAT_IDLE_MASK | LPUART_STAT_OR_MASK | LPUART_STAT_NF_MASK | + LPUART_STAT_FE_MASK | LPUART_STAT_PF_MASK); + +#if defined(FSL_FEATURE_LPUART_HAS_LIN_BREAK_DETECT) && FSL_FEATURE_LPUART_HAS_LIN_BREAK_DETECT + temp |= LPUART_STAT_LBKDIF_MASK; +#endif + +#if defined(FSL_FEATURE_LPUART_HAS_ADDRESS_MATCHING) && FSL_FEATURE_LPUART_HAS_ADDRESS_MATCHING + temp |= (LPUART_STAT_MA1F_MASK | LPUART_STAT_MA2F_MASK); +#endif + + /* Set data bits order. */ + if (config->isMsb) + { + temp |= LPUART_STAT_MSBF_MASK; + } + else + { + temp &= ~LPUART_STAT_MSBF_MASK; + } + + base->STAT |= temp; + + /* Enable TX/RX base on configure structure. */ + temp = base->CTRL; + if (config->enableTx) + { + temp |= LPUART_CTRL_TE_MASK; + } + + if (config->enableRx) + { + temp |= LPUART_CTRL_RE_MASK; + } + + base->CTRL = temp; + + return kStatus_Success; +} +void LPUART_Deinit(LPUART_Type *base) +{ + uint32_t temp; + +#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO + /* Wait tx FIFO send out*/ + while (0 != ((base->WATER & LPUART_WATER_TXCOUNT_MASK) >> LPUART_WATER_TXWATER_SHIFT)) + { + } +#endif + /* Wait last char shoft out */ + while (0 == (base->STAT & LPUART_STAT_TC_MASK)) + { + } + + /* Clear all status flags */ + temp = (LPUART_STAT_RXEDGIF_MASK | LPUART_STAT_IDLE_MASK | LPUART_STAT_OR_MASK | LPUART_STAT_NF_MASK | + LPUART_STAT_FE_MASK | LPUART_STAT_PF_MASK); + +#if defined(FSL_FEATURE_LPUART_HAS_LIN_BREAK_DETECT) && FSL_FEATURE_LPUART_HAS_LIN_BREAK_DETECT + temp |= LPUART_STAT_LBKDIF_MASK; +#endif + +#if defined(FSL_FEATURE_LPUART_HAS_ADDRESS_MATCHING) && FSL_FEATURE_LPUART_HAS_ADDRESS_MATCHING + temp |= (LPUART_STAT_MA1F_MASK | LPUART_STAT_MA2F_MASK); +#endif + + base->STAT |= temp; + + /* Disable the module. */ + base->CTRL = 0; + + /* Disable lpuart clock */ + CLOCK_DisableClock(s_lpuartClock[LPUART_GetInstance(base)]); +} + +void LPUART_GetDefaultConfig(lpuart_config_t *config) +{ + assert(config); + + config->baudRate_Bps = 115200U; + config->parityMode = kLPUART_ParityDisabled; + config->dataBitsCount = kLPUART_EightDataBits; + config->isMsb = false; +#if defined(FSL_FEATURE_LPUART_HAS_STOP_BIT_CONFIG_SUPPORT) && FSL_FEATURE_LPUART_HAS_STOP_BIT_CONFIG_SUPPORT + config->stopBitCount = kLPUART_OneStopBit; +#endif +#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO + config->txFifoWatermark = 0; + config->rxFifoWatermark = 0; +#endif + config->enableTx = false; + config->enableRx = false; +} + +status_t LPUART_SetBaudRate(LPUART_Type *base, uint32_t baudRate_Bps, uint32_t srcClock_Hz) +{ + assert(baudRate_Bps); + + uint32_t temp, oldCtrl; + uint16_t sbr, sbrTemp; + uint32_t osr, osrTemp, tempDiff, calculatedBaud, baudDiff; + + /* This LPUART instantiation uses a slightly different baud rate calculation + * The idea is to use the best OSR (over-sampling rate) possible + * Note, OSR is typically hard-set to 16 in other LPUART instantiations + * loop to find the best OSR value possible, one that generates minimum baudDiff + * iterate through the rest of the supported values of OSR */ + + baudDiff = baudRate_Bps; + osr = 0; + sbr = 0; + for (osrTemp = 4; osrTemp <= 32; osrTemp++) + { + /* calculate the temporary sbr value */ + sbrTemp = (srcClock_Hz / (baudRate_Bps * osrTemp)); + /*set sbrTemp to 1 if the sourceClockInHz can not satisfy the desired baud rate*/ + if (sbrTemp == 0) + { + sbrTemp = 1; + } + /* Calculate the baud rate based on the temporary OSR and SBR values */ + calculatedBaud = (srcClock_Hz / (osrTemp * sbrTemp)); + + tempDiff = calculatedBaud - baudRate_Bps; + + /* Select the better value between srb and (sbr + 1) */ + if (tempDiff > (baudRate_Bps - (srcClock_Hz / (osrTemp * (sbrTemp + 1))))) + { + tempDiff = baudRate_Bps - (srcClock_Hz / (osrTemp * (sbrTemp + 1))); + sbrTemp++; + } + + if (tempDiff <= baudDiff) + { + baudDiff = tempDiff; + osr = osrTemp; /* update and store the best OSR value calculated */ + sbr = sbrTemp; /* update store the best SBR value calculated */ + } + } + + /* Check to see if actual baud rate is within 3% of desired baud rate + * based on the best calculate OSR value */ + if (baudDiff < ((baudRate_Bps / 100) * 3)) + { + /* Store CTRL before disable Tx and Rx */ + oldCtrl = base->CTRL; + + /* Disable LPUART TX RX before setting. */ + base->CTRL &= ~(LPUART_CTRL_TE_MASK | LPUART_CTRL_RE_MASK); + + temp = base->BAUD; + + /* Acceptable baud rate, check if OSR is between 4x and 7x oversampling. + * If so, then "BOTHEDGE" sampling must be turned on */ + if ((osr > 3) && (osr < 8)) + { + temp |= LPUART_BAUD_BOTHEDGE_MASK; + } + + /* program the osr value (bit value is one less than actual value) */ + temp &= ~LPUART_BAUD_OSR_MASK; + temp |= LPUART_BAUD_OSR(osr - 1); + + /* write the sbr value to the BAUD registers */ + temp &= ~LPUART_BAUD_SBR_MASK; + base->BAUD = temp | LPUART_BAUD_SBR(sbr); + + /* Restore CTRL. */ + base->CTRL = oldCtrl; + + return kStatus_Success; + } + else + { + /* Unacceptable baud rate difference of more than 3%*/ + return kStatus_LPUART_BaudrateNotSupport; + } +} + +void LPUART_EnableInterrupts(LPUART_Type *base, uint32_t mask) +{ + base->BAUD |= ((mask << 8) & (LPUART_BAUD_LBKDIE_MASK | LPUART_BAUD_RXEDGIE_MASK)); +#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO + base->FIFO = (base->FIFO & ~(LPUART_FIFO_TXOF_MASK | LPUART_FIFO_RXUF_MASK)) | + ((mask << 8) & (LPUART_FIFO_TXOFE_MASK | LPUART_FIFO_RXUFE_MASK)); +#endif + mask &= 0xFFFFFF00U; + base->CTRL |= mask; +} + +void LPUART_DisableInterrupts(LPUART_Type *base, uint32_t mask) +{ + base->BAUD &= ~((mask << 8) & (LPUART_BAUD_LBKDIE_MASK | LPUART_BAUD_RXEDGIE_MASK)); +#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO + base->FIFO = (base->FIFO & ~(LPUART_FIFO_TXOF_MASK | LPUART_FIFO_RXUF_MASK)) & + ~((mask << 8) & (LPUART_FIFO_TXOFE_MASK | LPUART_FIFO_RXUFE_MASK)); +#endif + mask &= 0xFFFFFF00U; + base->CTRL &= ~mask; +} + +uint32_t LPUART_GetEnabledInterrupts(LPUART_Type *base) +{ + uint32_t temp; + temp = (base->BAUD & (LPUART_BAUD_LBKDIE_MASK | LPUART_BAUD_RXEDGIE_MASK)) >> 8; +#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO + temp |= (base->FIFO & (LPUART_FIFO_TXOFE_MASK | LPUART_FIFO_RXUFE_MASK)) >> 8; +#endif + temp |= (base->CTRL & 0xFF0C000); + + return temp; +} + +uint32_t LPUART_GetStatusFlags(LPUART_Type *base) +{ + uint32_t temp; + temp = base->STAT; +#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO + temp |= (base->FIFO & + (LPUART_FIFO_TXEMPT_MASK | LPUART_FIFO_RXEMPT_MASK | LPUART_FIFO_TXOF_MASK | LPUART_FIFO_RXUF_MASK)) >> + 16; +#endif + return temp; +} + +status_t LPUART_ClearStatusFlags(LPUART_Type *base, uint32_t mask) +{ + uint32_t temp; + status_t status; +#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO + temp = (uint32_t)base->FIFO; + temp &= (uint32_t)(~(LPUART_FIFO_TXOF_MASK | LPUART_FIFO_RXUF_MASK)); + temp |= (mask << 16) & (LPUART_FIFO_TXOF_MASK | LPUART_FIFO_RXUF_MASK); + base->FIFO = temp; +#endif + temp = (uint32_t)base->STAT; +#if defined(FSL_FEATURE_LPUART_HAS_LIN_BREAK_DETECT) && FSL_FEATURE_LPUART_HAS_LIN_BREAK_DETECT + temp &= (uint32_t)(~(LPUART_STAT_LBKDIF_MASK)); + temp |= mask & LPUART_STAT_LBKDIF_MASK; +#endif + temp &= (uint32_t)(~(LPUART_STAT_RXEDGIF_MASK | LPUART_STAT_IDLE_MASK | LPUART_STAT_OR_MASK | LPUART_STAT_NF_MASK | + LPUART_STAT_FE_MASK | LPUART_STAT_PF_MASK)); + temp |= mask & (LPUART_STAT_RXEDGIF_MASK | LPUART_STAT_IDLE_MASK | LPUART_STAT_OR_MASK | LPUART_STAT_NF_MASK | + LPUART_STAT_FE_MASK | LPUART_STAT_PF_MASK); +#if defined(FSL_FEATURE_LPUART_HAS_ADDRESS_MATCHING) && FSL_FEATURE_LPUART_HAS_ADDRESS_MATCHING + temp &= (uint32_t)(~(LPUART_STAT_MA2F_MASK | LPUART_STAT_MA1F_MASK)); + temp |= mask & (LPUART_STAT_MA2F_MASK | LPUART_STAT_MA1F_MASK); +#endif + base->STAT = temp; + /* If some flags still pending. */ + if (mask & LPUART_GetStatusFlags(base)) + { + /* Some flags can only clear or set by the hardware itself, these flags are: kLPUART_TxDataRegEmptyFlag, + kLPUART_TransmissionCompleteFlag, kLPUART_RxDataRegFullFlag, kLPUART_RxActiveFlag, + kLPUART_NoiseErrorInRxDataRegFlag, kLPUART_ParityErrorInRxDataRegFlag, + kLPUART_TxFifoEmptyFlag, kLPUART_RxFifoEmptyFlag. */ + status = kStatus_LPUART_FlagCannotClearManually; /* flags can not clear manually */ + } + else + { + status = kStatus_Success; + } + + return status; +} + +void LPUART_WriteBlocking(LPUART_Type *base, const uint8_t *data, size_t length) +{ + assert(data); + + /* This API can only ensure that the data is written into the data buffer but can't + ensure all data in the data buffer are sent into the transmit shift buffer. */ + while (length--) + { + while (!(base->STAT & LPUART_STAT_TDRE_MASK)) + { + } + base->DATA = *(data++); + } +} + +status_t LPUART_ReadBlocking(LPUART_Type *base, uint8_t *data, size_t length) +{ + assert(data); + + uint32_t statusFlag; +#if defined(FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT) && FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT + uint32_t ctrl = base->CTRL; + bool isSevenDataBits = + ((ctrl & LPUART_CTRL_M7_MASK) || + ((!(ctrl & LPUART_CTRL_M7_MASK)) && (!(ctrl & LPUART_CTRL_M_MASK)) && (ctrl & LPUART_CTRL_PE_MASK))); +#endif + + while (length--) + { +#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO + while (0 == ((base->WATER & LPUART_WATER_RXCOUNT_MASK) >> LPUART_WATER_RXCOUNT_SHIFT)) +#else + while (!(base->STAT & LPUART_STAT_RDRF_MASK)) +#endif + { + statusFlag = LPUART_GetStatusFlags(base); + + if (statusFlag & kLPUART_RxOverrunFlag) + { + LPUART_ClearStatusFlags(base, kLPUART_RxOverrunFlag); + return kStatus_LPUART_RxHardwareOverrun; + } + + if (statusFlag & kLPUART_NoiseErrorFlag) + { + LPUART_ClearStatusFlags(base, kLPUART_NoiseErrorFlag); + return kStatus_LPUART_NoiseError; + } + + if (statusFlag & kLPUART_FramingErrorFlag) + { + LPUART_ClearStatusFlags(base, kLPUART_FramingErrorFlag); + return kStatus_LPUART_FramingError; + } + + if (statusFlag & kLPUART_ParityErrorFlag) + { + LPUART_ClearStatusFlags(base, kLPUART_ParityErrorFlag); + return kStatus_LPUART_ParityError; + } + } +#if defined(FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT) && FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT + if (isSevenDataBits) + { + *(data++) = (base->DATA & 0x7F); + } + else + { + *(data++) = base->DATA; + } +#else + *(data++) = base->DATA; +#endif + } + + return kStatus_Success; +} + +void LPUART_TransferCreateHandle(LPUART_Type *base, + lpuart_handle_t *handle, + lpuart_transfer_callback_t callback, + void *userData) +{ + assert(handle); + + uint32_t instance; +#if defined(FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT) && FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT + uint32_t ctrl = base->CTRL; + bool isSevenDataBits = + ((ctrl & LPUART_CTRL_M7_MASK) || + ((!(ctrl & LPUART_CTRL_M7_MASK)) && (!(ctrl & LPUART_CTRL_M_MASK)) && (ctrl & LPUART_CTRL_PE_MASK))); +#endif + + /* Zero the handle. */ + memset(handle, 0, sizeof(lpuart_handle_t)); + + /* Set the TX/RX state. */ + handle->rxState = kLPUART_RxIdle; + handle->txState = kLPUART_TxIdle; + + /* Set the callback and user data. */ + handle->callback = callback; + handle->userData = userData; + +#if defined(FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT) && FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT + /* Initial seven data bits flag */ + handle->isSevenDataBits = isSevenDataBits; +#endif + +#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO + /* Note: + Take care of the RX FIFO, RX interrupt request only assert when received bytes + equal or more than RX water mark, there is potential issue if RX water + mark larger than 1. + For example, if RX FIFO water mark is 2, upper layer needs 5 bytes and + 5 bytes are received. the last byte will be saved in FIFO but not trigger + RX interrupt because the water mark is 2. + */ + base->WATER &= (~LPUART_WATER_RXWATER_MASK); +#endif + + /* Get instance from peripheral base address. */ + instance = LPUART_GetInstance(base); + + /* Save the handle in global variables to support the double weak mechanism. */ + s_lpuartHandle[instance] = handle; + + s_lpuartIsr = LPUART_TransferHandleIRQ; + +/* Enable interrupt in NVIC. */ +#if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ + EnableIRQ(s_lpuartRxIRQ[instance]); + EnableIRQ(s_lpuartTxIRQ[instance]); +#else + EnableIRQ(s_lpuartIRQ[instance]); +#endif +} + +void LPUART_TransferStartRingBuffer(LPUART_Type *base, + lpuart_handle_t *handle, + uint8_t *ringBuffer, + size_t ringBufferSize) +{ + assert(handle); + assert(ringBuffer); + + /* Setup the ring buffer address */ + handle->rxRingBuffer = ringBuffer; + handle->rxRingBufferSize = ringBufferSize; + handle->rxRingBufferHead = 0U; + handle->rxRingBufferTail = 0U; + + /* Enable the interrupt to accept the data when user need the ring buffer. */ + LPUART_EnableInterrupts(base, kLPUART_RxDataRegFullInterruptEnable | kLPUART_RxOverrunInterruptEnable); +} + +void LPUART_TransferStopRingBuffer(LPUART_Type *base, lpuart_handle_t *handle) +{ + assert(handle); + + if (handle->rxState == kLPUART_RxIdle) + { + LPUART_DisableInterrupts(base, kLPUART_RxDataRegFullInterruptEnable | kLPUART_RxOverrunInterruptEnable); + } + + handle->rxRingBuffer = NULL; + handle->rxRingBufferSize = 0U; + handle->rxRingBufferHead = 0U; + handle->rxRingBufferTail = 0U; +} + +status_t LPUART_TransferSendNonBlocking(LPUART_Type *base, lpuart_handle_t *handle, lpuart_transfer_t *xfer) +{ + assert(handle); + assert(xfer); + assert(xfer->data); + assert(xfer->dataSize); + + status_t status; + + /* Return error if current TX busy. */ + if (kLPUART_TxBusy == handle->txState) + { + status = kStatus_LPUART_TxBusy; + } + else + { + handle->txData = xfer->data; + handle->txDataSize = xfer->dataSize; + handle->txDataSizeAll = xfer->dataSize; + handle->txState = kLPUART_TxBusy; + + /* Enable transmiter interrupt. */ + LPUART_EnableInterrupts(base, kLPUART_TxDataRegEmptyInterruptEnable); + + status = kStatus_Success; + } + + return status; +} + +void LPUART_TransferAbortSend(LPUART_Type *base, lpuart_handle_t *handle) +{ + assert(handle); + + LPUART_DisableInterrupts(base, kLPUART_TxDataRegEmptyInterruptEnable | kLPUART_TransmissionCompleteInterruptEnable); + + handle->txDataSize = 0; + handle->txState = kLPUART_TxIdle; +} + +status_t LPUART_TransferGetSendCount(LPUART_Type *base, lpuart_handle_t *handle, uint32_t *count) +{ + assert(handle); + assert(count); + + if (kLPUART_TxIdle == handle->txState) + { + return kStatus_NoTransferInProgress; + } + + *count = handle->txDataSizeAll - handle->txDataSize; + + return kStatus_Success; +} + +status_t LPUART_TransferReceiveNonBlocking(LPUART_Type *base, + lpuart_handle_t *handle, + lpuart_transfer_t *xfer, + size_t *receivedBytes) +{ + assert(handle); + assert(xfer); + assert(xfer->data); + assert(xfer->dataSize); + + uint32_t i; + status_t status; + /* How many bytes to copy from ring buffer to user memory. */ + size_t bytesToCopy = 0U; + /* How many bytes to receive. */ + size_t bytesToReceive; + /* How many bytes currently have received. */ + size_t bytesCurrentReceived; + uint32_t regPrimask = 0U; + + /* How to get data: + 1. If RX ring buffer is not enabled, then save xfer->data and xfer->dataSize + to lpuart handle, enable interrupt to store received data to xfer->data. When + all data received, trigger callback. + 2. If RX ring buffer is enabled and not empty, get data from ring buffer first. + If there are enough data in ring buffer, copy them to xfer->data and return. + If there are not enough data in ring buffer, copy all of them to xfer->data, + save the xfer->data remained empty space to lpuart handle, receive data + to this empty space and trigger callback when finished. */ + + if (kLPUART_RxBusy == handle->rxState) + { + status = kStatus_LPUART_RxBusy; + } + else + { + bytesToReceive = xfer->dataSize; + bytesCurrentReceived = 0; + + /* If RX ring buffer is used. */ + if (handle->rxRingBuffer) + { + /* Disable IRQ, protect ring buffer. */ + regPrimask = DisableGlobalIRQ(); + + /* How many bytes in RX ring buffer currently. */ + bytesToCopy = LPUART_TransferGetRxRingBufferLength(base, handle); + + if (bytesToCopy) + { + bytesToCopy = MIN(bytesToReceive, bytesToCopy); + + bytesToReceive -= bytesToCopy; + + /* Copy data from ring buffer to user memory. */ + for (i = 0U; i < bytesToCopy; i++) + { + xfer->data[bytesCurrentReceived++] = handle->rxRingBuffer[handle->rxRingBufferTail]; + + /* Wrap to 0. Not use modulo (%) because it might be large and slow. */ + if (handle->rxRingBufferTail + 1U == handle->rxRingBufferSize) + { + handle->rxRingBufferTail = 0U; + } + else + { + handle->rxRingBufferTail++; + } + } + } + + /* If ring buffer does not have enough data, still need to read more data. */ + if (bytesToReceive) + { + /* No data in ring buffer, save the request to LPUART handle. */ + handle->rxData = xfer->data + bytesCurrentReceived; + handle->rxDataSize = bytesToReceive; + handle->rxDataSizeAll = bytesToReceive; + handle->rxState = kLPUART_RxBusy; + } + /* Enable IRQ if previously enabled. */ + EnableGlobalIRQ(regPrimask); + + /* Call user callback since all data are received. */ + if (0 == bytesToReceive) + { + if (handle->callback) + { + handle->callback(base, handle, kStatus_LPUART_RxIdle, handle->userData); + } + } + } + /* Ring buffer not used. */ + else + { + handle->rxData = xfer->data + bytesCurrentReceived; + handle->rxDataSize = bytesToReceive; + handle->rxDataSizeAll = bytesToReceive; + handle->rxState = kLPUART_RxBusy; + + /* Enable RX interrupt. */ + LPUART_EnableInterrupts(base, kLPUART_RxDataRegFullInterruptEnable | kLPUART_RxOverrunInterruptEnable); + } + + /* Return the how many bytes have read. */ + if (receivedBytes) + { + *receivedBytes = bytesCurrentReceived; + } + + status = kStatus_Success; + } + + return status; +} + +void LPUART_TransferAbortReceive(LPUART_Type *base, lpuart_handle_t *handle) +{ + assert(handle); + + /* Only abort the receive to handle->rxData, the RX ring buffer is still working. */ + if (!handle->rxRingBuffer) + { + /* Disable RX interrupt. */ + LPUART_DisableInterrupts(base, kLPUART_RxDataRegFullInterruptEnable | kLPUART_RxOverrunInterruptEnable); + } + + handle->rxDataSize = 0U; + handle->rxState = kLPUART_RxIdle; +} + +status_t LPUART_TransferGetReceiveCount(LPUART_Type *base, lpuart_handle_t *handle, uint32_t *count) +{ + assert(handle); + assert(count); + + if (kLPUART_RxIdle == handle->rxState) + { + return kStatus_NoTransferInProgress; + } + + *count = handle->rxDataSizeAll - handle->rxDataSize; + + return kStatus_Success; +} + +void LPUART_TransferHandleIRQ(LPUART_Type *base, lpuart_handle_t *handle) +{ + assert(handle); + + uint8_t count; + uint8_t tempCount; + + /* If RX overrun. */ + if (LPUART_STAT_OR_MASK & base->STAT) + { + /* Clear overrun flag, otherwise the RX does not work. */ + base->STAT = ((base->STAT & 0x3FE00000U) | LPUART_STAT_OR_MASK); + + /* Trigger callback. */ + if (handle->callback) + { + handle->callback(base, handle, kStatus_LPUART_RxHardwareOverrun, handle->userData); + } + } + + /* Receive data register full */ + if ((LPUART_STAT_RDRF_MASK & base->STAT) && (LPUART_CTRL_RIE_MASK & base->CTRL)) + { +/* Get the size that can be stored into buffer for this interrupt. */ +#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO + count = ((uint8_t)((base->WATER & LPUART_WATER_RXCOUNT_MASK) >> LPUART_WATER_RXCOUNT_SHIFT)); +#else + count = 1; +#endif + + /* If handle->rxDataSize is not 0, first save data to handle->rxData. */ + while ((count) && (handle->rxDataSize)) + { +#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO + tempCount = MIN(handle->rxDataSize, count); +#else + tempCount = 1; +#endif + + /* Using non block API to read the data from the registers. */ + LPUART_ReadNonBlocking(base, handle->rxData, tempCount); + handle->rxData += tempCount; + handle->rxDataSize -= tempCount; + count -= tempCount; + + /* If all the data required for upper layer is ready, trigger callback. */ + if (!handle->rxDataSize) + { + handle->rxState = kLPUART_RxIdle; + + if (handle->callback) + { + handle->callback(base, handle, kStatus_LPUART_RxIdle, handle->userData); + } + } + } + + /* If use RX ring buffer, receive data to ring buffer. */ + if (handle->rxRingBuffer) + { + while (count--) + { + /* If RX ring buffer is full, trigger callback to notify over run. */ + if (LPUART_TransferIsRxRingBufferFull(base, handle)) + { + if (handle->callback) + { + handle->callback(base, handle, kStatus_LPUART_RxRingBufferOverrun, handle->userData); + } + } + + /* If ring buffer is still full after callback function, the oldest data is overrided. */ + if (LPUART_TransferIsRxRingBufferFull(base, handle)) + { + /* Increase handle->rxRingBufferTail to make room for new data. */ + if (handle->rxRingBufferTail + 1U == handle->rxRingBufferSize) + { + handle->rxRingBufferTail = 0U; + } + else + { + handle->rxRingBufferTail++; + } + } + +/* Read data. */ +#if defined(FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT) && FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT + if (handle->isSevenDataBits) + { + handle->rxRingBuffer[handle->rxRingBufferHead] = (base->DATA & 0x7F); + } + else + { + handle->rxRingBuffer[handle->rxRingBufferHead] = base->DATA; + } +#else + handle->rxRingBuffer[handle->rxRingBufferHead] = base->DATA; +#endif + + /* Increase handle->rxRingBufferHead. */ + if (handle->rxRingBufferHead + 1U == handle->rxRingBufferSize) + { + handle->rxRingBufferHead = 0U; + } + else + { + handle->rxRingBufferHead++; + } + } + } + /* If no receive requst pending, stop RX interrupt. */ + else if (!handle->rxDataSize) + { + LPUART_DisableInterrupts(base, kLPUART_RxDataRegFullInterruptEnable | kLPUART_RxOverrunInterruptEnable); + } + else + { + } + } + + /* Send data register empty and the interrupt is enabled. */ + if ((base->STAT & LPUART_STAT_TDRE_MASK) && (base->CTRL & LPUART_CTRL_TIE_MASK)) + { +/* Get the bytes that available at this moment. */ +#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO + count = FSL_FEATURE_LPUART_FIFO_SIZEn(base) - + ((base->WATER & LPUART_WATER_TXCOUNT_MASK) >> LPUART_WATER_TXCOUNT_SHIFT); +#else + count = 1; +#endif + + while ((count) && (handle->txDataSize)) + { +#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO + tempCount = MIN(handle->txDataSize, count); +#else + tempCount = 1; +#endif + + /* Using non block API to write the data to the registers. */ + LPUART_WriteNonBlocking(base, handle->txData, tempCount); + handle->txData += tempCount; + handle->txDataSize -= tempCount; + count -= tempCount; + + /* If all the data are written to data register, notify user with the callback, then TX finished. */ + if (!handle->txDataSize) + { + handle->txState = kLPUART_TxIdle; + + /* Disable TX register empty interrupt. */ + base->CTRL = (base->CTRL & ~LPUART_CTRL_TIE_MASK); + + /* Trigger callback. */ + if (handle->callback) + { + handle->callback(base, handle, kStatus_LPUART_TxIdle, handle->userData); + } + } + } + } +} + +void LPUART_TransferHandleErrorIRQ(LPUART_Type *base, lpuart_handle_t *handle) +{ + /* To be implemented by User. */ +} + +#if defined(LPUART0) +#if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ +void LPUART0_TX_DriverIRQHandler(void) +{ + s_lpuartIsr(LPUART0, s_lpuartHandle[0]); +} +void LPUART0_RX_DriverIRQHandler(void) +{ + s_lpuartIsr(LPUART0, s_lpuartHandle[0]); +} +#else +void LPUART0_DriverIRQHandler(void) +{ + s_lpuartIsr(LPUART0, s_lpuartHandle[0]); +} +#endif +#endif + +#if defined(LPUART1) +#if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ +void LPUART1_TX_DriverIRQHandler(void) +{ + s_lpuartIsr(LPUART1, s_lpuartHandle[1]); +} +void LPUART1_RX_DriverIRQHandler(void) +{ + s_lpuartIsr(LPUART1, s_lpuartHandle[1]); +} +#else +void LPUART1_DriverIRQHandler(void) +{ + s_lpuartIsr(LPUART1, s_lpuartHandle[1]); +} +#endif +#endif + +#if defined(LPUART2) +#if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ +void LPUART2_TX_DriverIRQHandler(void) +{ + s_lpuartIsr(LPUART2, s_lpuartHandle[2]); +} +void LPUART2_RX_DriverIRQHandler(void) +{ + s_lpuartIsr(LPUART2, s_lpuartHandle[2]); +} +#else +void LPUART2_DriverIRQHandler(void) +{ + s_lpuartIsr(LPUART2, s_lpuartHandle[2]); +} +#endif +#endif + +#if defined(LPUART3) +#if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ +void LPUART3_TX_DriverIRQHandler(void) +{ + s_lpuartIsr(LPUART3, s_lpuartHandle[3]); +} +void LPUART3_RX_DriverIRQHandler(void) +{ + s_lpuartIsr(LPUART3, s_lpuartHandle[3]); +} +#else +void LPUART3_DriverIRQHandler(void) +{ + s_lpuartIsr(LPUART3, s_lpuartHandle[3]); +} +#endif +#endif + +#if defined(LPUART4) +#if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ +void LPUART4_TX_DriverIRQHandler(void) +{ + s_lpuartIsr(LPUART4, s_lpuartHandle[4]); +} +void LPUART4_RX_DriverIRQHandler(void) +{ + s_lpuartIsr(LPUART4, s_lpuartHandle[4]); +} +#else +void LPUART4_DriverIRQHandler(void) +{ + s_lpuartIsr(LPUART4, s_lpuartHandle[4]); +} +#endif +#endif + +#if defined(LPUART5) +#if defined(FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ) && FSL_FEATURE_LPUART_HAS_SEPARATE_RX_TX_IRQ +void LPUART5_TX_DriverIRQHandler(void) +{ + s_lpuartIsr(LPUART5, s_lpuartHandle[5]); +} +void LPUART5_RX_DriverIRQHandler(void) +{ + s_lpuartIsr(LPUART5, s_lpuartHandle[5]); +} +#else +void LPUART5_DriverIRQHandler(void) +{ + s_lpuartIsr(LPUART5, s_lpuartHandle[5]); +} +#endif +#endif diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_lpuart.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_lpuart.h new file mode 100644 index 00000000000..c538d723d38 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_lpuart.h @@ -0,0 +1,792 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FSL_LPUART_H_ +#define _FSL_LPUART_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup lpuart_driver + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief LPUART driver version 2.2.1. */ +#define FSL_LPUART_DRIVER_VERSION (MAKE_VERSION(2, 2, 1)) +/*@}*/ + +/*! @brief Error codes for the LPUART driver. */ +enum _lpuart_status +{ + kStatus_LPUART_TxBusy = MAKE_STATUS(kStatusGroup_LPUART, 0), /*!< TX busy */ + kStatus_LPUART_RxBusy = MAKE_STATUS(kStatusGroup_LPUART, 1), /*!< RX busy */ + kStatus_LPUART_TxIdle = MAKE_STATUS(kStatusGroup_LPUART, 2), /*!< LPUART transmitter is idle. */ + kStatus_LPUART_RxIdle = MAKE_STATUS(kStatusGroup_LPUART, 3), /*!< LPUART receiver is idle. */ + kStatus_LPUART_TxWatermarkTooLarge = MAKE_STATUS(kStatusGroup_LPUART, 4), /*!< TX FIFO watermark too large */ + kStatus_LPUART_RxWatermarkTooLarge = MAKE_STATUS(kStatusGroup_LPUART, 5), /*!< RX FIFO watermark too large */ + kStatus_LPUART_FlagCannotClearManually = + MAKE_STATUS(kStatusGroup_LPUART, 6), /*!< Some flag can't manually clear */ + kStatus_LPUART_Error = MAKE_STATUS(kStatusGroup_LPUART, 7), /*!< Error happens on LPUART. */ + kStatus_LPUART_RxRingBufferOverrun = + MAKE_STATUS(kStatusGroup_LPUART, 8), /*!< LPUART RX software ring buffer overrun. */ + kStatus_LPUART_RxHardwareOverrun = MAKE_STATUS(kStatusGroup_LPUART, 9), /*!< LPUART RX receiver overrun. */ + kStatus_LPUART_NoiseError = MAKE_STATUS(kStatusGroup_LPUART, 10), /*!< LPUART noise error. */ + kStatus_LPUART_FramingError = MAKE_STATUS(kStatusGroup_LPUART, 11), /*!< LPUART framing error. */ + kStatus_LPUART_ParityError = MAKE_STATUS(kStatusGroup_LPUART, 12), /*!< LPUART parity error. */ + kStatus_LPUART_BaudrateNotSupport = + MAKE_STATUS(kStatusGroup_LPUART, 13), /*!< Baudrate is not support in current clock source */ +}; + +/*! @brief LPUART parity mode. */ +typedef enum _lpuart_parity_mode +{ + kLPUART_ParityDisabled = 0x0U, /*!< Parity disabled */ + kLPUART_ParityEven = 0x2U, /*!< Parity enabled, type even, bit setting: PE|PT = 10 */ + kLPUART_ParityOdd = 0x3U, /*!< Parity enabled, type odd, bit setting: PE|PT = 11 */ +} lpuart_parity_mode_t; + +/*! @brief LPUART data bits count. */ +typedef enum _lpuart_data_bits +{ + kLPUART_EightDataBits = 0x0U, /*!< Eight data bit */ +#if defined(FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT) && FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT + kLPUART_SevenDataBits = 0x1U, /*!< Seven data bit */ +#endif +} lpuart_data_bits_t; + +/*! @brief LPUART stop bit count. */ +typedef enum _lpuart_stop_bit_count +{ + kLPUART_OneStopBit = 0U, /*!< One stop bit */ + kLPUART_TwoStopBit = 1U, /*!< Two stop bits */ +} lpuart_stop_bit_count_t; + +/*! + * @brief LPUART interrupt configuration structure, default settings all disabled. + * + * This structure contains the settings for all LPUART interrupt configurations. + */ +enum _lpuart_interrupt_enable +{ +#if defined(FSL_FEATURE_LPUART_HAS_LIN_BREAK_DETECT) && FSL_FEATURE_LPUART_HAS_LIN_BREAK_DETECT + kLPUART_LinBreakInterruptEnable = (LPUART_BAUD_LBKDIE_MASK >> 8), /*!< LIN break detect. */ +#endif + kLPUART_RxActiveEdgeInterruptEnable = (LPUART_BAUD_RXEDGIE_MASK >> 8), /*!< Receive Active Edge. */ + kLPUART_TxDataRegEmptyInterruptEnable = (LPUART_CTRL_TIE_MASK), /*!< Transmit data register empty. */ + kLPUART_TransmissionCompleteInterruptEnable = (LPUART_CTRL_TCIE_MASK), /*!< Transmission complete. */ + kLPUART_RxDataRegFullInterruptEnable = (LPUART_CTRL_RIE_MASK), /*!< Receiver data register full. */ + kLPUART_IdleLineInterruptEnable = (LPUART_CTRL_ILIE_MASK), /*!< Idle line. */ + kLPUART_RxOverrunInterruptEnable = (LPUART_CTRL_ORIE_MASK), /*!< Receiver Overrun. */ + kLPUART_NoiseErrorInterruptEnable = (LPUART_CTRL_NEIE_MASK), /*!< Noise error flag. */ + kLPUART_FramingErrorInterruptEnable = (LPUART_CTRL_FEIE_MASK), /*!< Framing error flag. */ + kLPUART_ParityErrorInterruptEnable = (LPUART_CTRL_PEIE_MASK), /*!< Parity error flag. */ +#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO + kLPUART_TxFifoOverflowInterruptEnable = (LPUART_FIFO_TXOFE_MASK >> 8), /*!< Transmit FIFO Overflow. */ + kLPUART_RxFifoUnderflowInterruptEnable = (LPUART_FIFO_RXUFE_MASK >> 8), /*!< Receive FIFO Underflow. */ +#endif +}; + +/*! + * @brief LPUART status flags. + * + * This provides constants for the LPUART status flags for use in the LPUART functions. + */ +enum _lpuart_flags +{ + kLPUART_TxDataRegEmptyFlag = + (LPUART_STAT_TDRE_MASK), /*!< Transmit data register empty flag, sets when transmit buffer is empty */ + kLPUART_TransmissionCompleteFlag = + (LPUART_STAT_TC_MASK), /*!< Transmission complete flag, sets when transmission activity complete */ + kLPUART_RxDataRegFullFlag = + (LPUART_STAT_RDRF_MASK), /*!< Receive data register full flag, sets when the receive data buffer is full */ + kLPUART_IdleLineFlag = (LPUART_STAT_IDLE_MASK), /*!< Idle line detect flag, sets when idle line detected */ + kLPUART_RxOverrunFlag = (LPUART_STAT_OR_MASK), /*!< Receive Overrun, sets when new data is received before data is + read from receive register */ + kLPUART_NoiseErrorFlag = (LPUART_STAT_NF_MASK), /*!< Receive takes 3 samples of each received bit. If any of these + samples differ, noise flag sets */ + kLPUART_FramingErrorFlag = + (LPUART_STAT_FE_MASK), /*!< Frame error flag, sets if logic 0 was detected where stop bit expected */ + kLPUART_ParityErrorFlag = (LPUART_STAT_PF_MASK), /*!< If parity enabled, sets upon parity error detection */ +#if defined(FSL_FEATURE_LPUART_HAS_LIN_BREAK_DETECT) && FSL_FEATURE_LPUART_HAS_LIN_BREAK_DETECT + kLPUART_LinBreakFlag = (LPUART_STAT_LBKDIF_MASK), /*!< LIN break detect interrupt flag, sets when LIN break char + detected and LIN circuit enabled */ +#endif + kLPUART_RxActiveEdgeFlag = + (LPUART_STAT_RXEDGIF_MASK), /*!< Receive pin active edge interrupt flag, sets when active edge detected */ + kLPUART_RxActiveFlag = + (LPUART_STAT_RAF_MASK), /*!< Receiver Active Flag (RAF), sets at beginning of valid start bit */ +#if defined(FSL_FEATURE_LPUART_HAS_ADDRESS_MATCHING) && FSL_FEATURE_LPUART_HAS_ADDRESS_MATCHING + kLPUART_DataMatch1Flag = LPUART_STAT_MA1F_MASK, /*!< The next character to be read from LPUART_DATA matches MA1*/ + kLPUART_DataMatch2Flag = LPUART_STAT_MA2F_MASK, /*!< The next character to be read from LPUART_DATA matches MA2*/ +#endif +#if defined(FSL_FEATURE_LPUART_HAS_EXTENDED_DATA_REGISTER_FLAGS) && FSL_FEATURE_LPUART_HAS_EXTENDED_DATA_REGISTER_FLAGS + kLPUART_NoiseErrorInRxDataRegFlag = + (LPUART_DATA_NOISY_MASK >> 10), /*!< NOISY bit, sets if noise detected in current data word */ + kLPUART_ParityErrorInRxDataRegFlag = + (LPUART_DATA_PARITYE_MASK >> 10), /*!< PARITYE bit, sets if noise detected in current data word */ +#endif +#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO + kLPUART_TxFifoEmptyFlag = (LPUART_FIFO_TXEMPT_MASK >> 16), /*!< TXEMPT bit, sets if transmit buffer is empty */ + kLPUART_RxFifoEmptyFlag = (LPUART_FIFO_RXEMPT_MASK >> 16), /*!< RXEMPT bit, sets if receive buffer is empty */ + kLPUART_TxFifoOverflowFlag = + (LPUART_FIFO_TXOF_MASK >> 16), /*!< TXOF bit, sets if transmit buffer overflow occurred */ + kLPUART_RxFifoUnderflowFlag = + (LPUART_FIFO_RXUF_MASK >> 16), /*!< RXUF bit, sets if receive buffer underflow occurred */ +#endif +}; + +/*! @brief LPUART configure structure. */ +typedef struct _lpuart_config +{ + uint32_t baudRate_Bps; /*!< LPUART baud rate */ + lpuart_parity_mode_t parityMode; /*!< Parity mode, disabled (default), even, odd */ + lpuart_data_bits_t dataBitsCount; /*!< Data bits count, eight (default), seven */ + bool isMsb; /*!< Data bits order, LSB (default), MSB */ +#if defined(FSL_FEATURE_LPUART_HAS_STOP_BIT_CONFIG_SUPPORT) && FSL_FEATURE_LPUART_HAS_STOP_BIT_CONFIG_SUPPORT + lpuart_stop_bit_count_t stopBitCount; /*!< Number of stop bits, 1 stop bit (default) or 2 stop bits */ +#endif +#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO + uint8_t txFifoWatermark; /*!< TX FIFO watermark */ + uint8_t rxFifoWatermark; /*!< RX FIFO watermark */ +#endif + bool enableTx; /*!< Enable TX */ + bool enableRx; /*!< Enable RX */ +} lpuart_config_t; + +/*! @brief LPUART transfer structure. */ +typedef struct _lpuart_transfer +{ + uint8_t *data; /*!< The buffer of data to be transfer.*/ + size_t dataSize; /*!< The byte count to be transfer. */ +} lpuart_transfer_t; + +/* Forward declaration of the handle typedef. */ +typedef struct _lpuart_handle lpuart_handle_t; + +/*! @brief LPUART transfer callback function. */ +typedef void (*lpuart_transfer_callback_t)(LPUART_Type *base, lpuart_handle_t *handle, status_t status, void *userData); + +/*! @brief LPUART handle structure. */ +struct _lpuart_handle +{ + uint8_t *volatile txData; /*!< Address of remaining data to send. */ + volatile size_t txDataSize; /*!< Size of the remaining data to send. */ + size_t txDataSizeAll; /*!< Size of the data to send out. */ + uint8_t *volatile rxData; /*!< Address of remaining data to receive. */ + volatile size_t rxDataSize; /*!< Size of the remaining data to receive. */ + size_t rxDataSizeAll; /*!< Size of the data to receive. */ + + uint8_t *rxRingBuffer; /*!< Start address of the receiver ring buffer. */ + size_t rxRingBufferSize; /*!< Size of the ring buffer. */ + volatile uint16_t rxRingBufferHead; /*!< Index for the driver to store received data into ring buffer. */ + volatile uint16_t rxRingBufferTail; /*!< Index for the user to get data from the ring buffer. */ + + lpuart_transfer_callback_t callback; /*!< Callback function. */ + void *userData; /*!< LPUART callback function parameter.*/ + + volatile uint8_t txState; /*!< TX transfer state. */ + volatile uint8_t rxState; /*!< RX transfer state. */ + +#if defined(FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT) && FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT + bool isSevenDataBits; /*!< Seven data bits flag. */ +#endif +}; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif /* _cplusplus */ + +/*! + * @name Initialization and deinitialization + * @{ + */ + +/*! +* @brief Initializes an LPUART instance with the user configuration structure and the peripheral clock. +* +* This function configures the LPUART module with user-defined settings. Call the LPUART_GetDefaultConfig() function +* to configure the configuration structure and get the default configuration. +* The example below shows how to use this API to configure the LPUART. +* @code +* lpuart_config_t lpuartConfig; +* lpuartConfig.baudRate_Bps = 115200U; +* lpuartConfig.parityMode = kLPUART_ParityDisabled; +* lpuartConfig.dataBitsCount = kLPUART_EightDataBits; +* lpuartConfig.isMsb = false; +* lpuartConfig.stopBitCount = kLPUART_OneStopBit; +* lpuartConfig.txFifoWatermark = 0; +* lpuartConfig.rxFifoWatermark = 1; +* LPUART_Init(LPUART1, &lpuartConfig, 20000000U); +* @endcode +* +* @param base LPUART peripheral base address. +* @param config Pointer to a user-defined configuration structure. +* @param srcClock_Hz LPUART clock source frequency in HZ. +* @retval kStatus_LPUART_BaudrateNotSupport Baudrate is not support in current clock source. +* @retval kStatus_Success LPUART initialize succeed +*/ +status_t LPUART_Init(LPUART_Type *base, const lpuart_config_t *config, uint32_t srcClock_Hz); + +/*! + * @brief Deinitializes a LPUART instance. + * + * This function waits for transmit to complete, disables TX and RX, and disables the LPUART clock. + * + * @param base LPUART peripheral base address. + */ +void LPUART_Deinit(LPUART_Type *base); + +/*! + * @brief Gets the default configuration structure. + * + * This function initializes the LPUART configuration structure to a default value. The default + * values are: + * lpuartConfig->baudRate_Bps = 115200U; + * lpuartConfig->parityMode = kLPUART_ParityDisabled; + * lpuartConfig->dataBitsCount = kLPUART_EightDataBits; + * lpuartConfig->isMsb = false; + * lpuartConfig->stopBitCount = kLPUART_OneStopBit; + * lpuartConfig->txFifoWatermark = 0; + * lpuartConfig->rxFifoWatermark = 1; + * lpuartConfig->enableTx = false; + * lpuartConfig->enableRx = false; + * + * @param config Pointer to a configuration structure. + */ +void LPUART_GetDefaultConfig(lpuart_config_t *config); + +/*! + * @brief Sets the LPUART instance baudrate. + * + * This function configures the LPUART module baudrate. This function is used to update + * the LPUART module baudrate after the LPUART module is initialized by the LPUART_Init. + * @code + * LPUART_SetBaudRate(LPUART1, 115200U, 20000000U); + * @endcode + * + * @param base LPUART peripheral base address. + * @param baudRate_Bps LPUART baudrate to be set. + * @param srcClock_Hz LPUART clock source frequency in HZ. + * @retval kStatus_LPUART_BaudrateNotSupport Baudrate is not supported in the current clock source. + * @retval kStatus_Success Set baudrate succeeded. + */ +status_t LPUART_SetBaudRate(LPUART_Type *base, uint32_t baudRate_Bps, uint32_t srcClock_Hz); + +/* @} */ + +/*! + * @name Status + * @{ + */ + +/*! + * @brief Gets LPUART status flags. + * + * This function gets all LPUART status flags. The flags are returned as the logical + * OR value of the enumerators @ref _lpuart_flags. To check for a specific status, + * compare the return value with enumerators in the @ref _lpuart_flags. + * For example, to check whether the TX is empty: + * @code + * if (kLPUART_TxDataRegEmptyFlag & LPUART_GetStatusFlags(LPUART1)) + * { + * ... + * } + * @endcode + * + * @param base LPUART peripheral base address. + * @return LPUART status flags which are ORed by the enumerators in the _lpuart_flags. + */ +uint32_t LPUART_GetStatusFlags(LPUART_Type *base); + +/*! + * @brief Clears status flags with a provided mask. + * + * This function clears LPUART status flags with a provided mask. Automatically cleared flags + * can't be cleared by this function. + * Flags that can only cleared or set by hardware are: + * kLPUART_TxDataRegEmptyFlag, kLPUART_TransmissionCompleteFlag, kLPUART_RxDataRegFullFlag, + * kLPUART_RxActiveFlag, kLPUART_NoiseErrorInRxDataRegFlag, kLPUART_ParityErrorInRxDataRegFlag, + * kLPUART_TxFifoEmptyFlag,kLPUART_RxFifoEmptyFlag + * Note: This API should be called when the Tx/Rx is idle, otherwise it takes no effects. + * + * @param base LPUART peripheral base address. + * @param mask the status flags to be cleared. The user can use the enumerators in the + * _lpuart_status_flag_t to do the OR operation and get the mask. + * @return 0 succeed, others failed. + * @retval kStatus_LPUART_FlagCannotClearManually The flag can't be cleared by this function but + * it is cleared automatically by hardware. + * @retval kStatus_Success Status in the mask are cleared. + */ +status_t LPUART_ClearStatusFlags(LPUART_Type *base, uint32_t mask); + +/* @} */ + +/*! + * @name Interrupts + * @{ + */ + +/*! + * @brief Enables LPUART interrupts according to a provided mask. + * + * This function enables the LPUART interrupts according to a provided mask. The mask + * is a logical OR of enumeration members. See the @ref _lpuart_interrupt_enable. + * This examples shows how to enable TX empty interrupt and RX full interrupt: + * @code + * LPUART_EnableInterrupts(LPUART1,kLPUART_TxDataRegEmptyInterruptEnable | kLPUART_RxDataRegFullInterruptEnable); + * @endcode + * + * @param base LPUART peripheral base address. + * @param mask The interrupts to enable. Logical OR of @ref _uart_interrupt_enable. + */ +void LPUART_EnableInterrupts(LPUART_Type *base, uint32_t mask); + +/*! + * @brief Disables LPUART interrupts according to a provided mask. + * + * This function disables the LPUART interrupts according to a provided mask. The mask + * is a logical OR of enumeration members. See @ref _lpuart_interrupt_enable. + * This example shows how to disable the TX empty interrupt and RX full interrupt: + * @code + * LPUART_DisableInterrupts(LPUART1,kLPUART_TxDataRegEmptyInterruptEnable | kLPUART_RxDataRegFullInterruptEnable); + * @endcode + * + * @param base LPUART peripheral base address. + * @param mask The interrupts to disable. Logical OR of @ref _lpuart_interrupt_enable. + */ +void LPUART_DisableInterrupts(LPUART_Type *base, uint32_t mask); + +/*! + * @brief Gets enabled LPUART interrupts. + * + * This function gets the enabled LPUART interrupts. The enabled interrupts are returned + * as the logical OR value of the enumerators @ref _lpuart_interrupt_enable. To check + * a specific interrupt enable status, compare the return value with enumerators + * in @ref _lpuart_interrupt_enable. + * For example, to check whether the TX empty interrupt is enabled: + * @code + * uint32_t enabledInterrupts = LPUART_GetEnabledInterrupts(LPUART1); + * + * if (kLPUART_TxDataRegEmptyInterruptEnable & enabledInterrupts) + * { + * ... + * } + * @endcode + * + * @param base LPUART peripheral base address. + * @return LPUART interrupt flags which are logical OR of the enumerators in @ref _lpuart_interrupt_enable. + */ +uint32_t LPUART_GetEnabledInterrupts(LPUART_Type *base); + +#if defined(FSL_FEATURE_LPUART_HAS_DMA_ENABLE) && FSL_FEATURE_LPUART_HAS_DMA_ENABLE +/*! + * @brief Gets the LPUART data register address. + * + * This function returns the LPUART data register address, which is mainly used by the DMA/eDMA. + * + * @param base LPUART peripheral base address. + * @return LPUART data register addresses which are used both by the transmitter and receiver. + */ +static inline uint32_t LPUART_GetDataRegisterAddress(LPUART_Type *base) +{ + return (uint32_t) & (base->DATA); +} + +/*! + * @brief Enables or disables the LPUART transmitter DMA request. + * + * This function enables or disables the transmit data register empty flag, STAT[TDRE], to generate DMA requests. + * + * @param base LPUART peripheral base address. + * @param enable True to enable, false to disable. + */ +static inline void LPUART_EnableTxDMA(LPUART_Type *base, bool enable) +{ + if (enable) + { + base->BAUD |= LPUART_BAUD_TDMAE_MASK; + base->CTRL |= LPUART_CTRL_TIE_MASK; + } + else + { + base->BAUD &= ~LPUART_BAUD_TDMAE_MASK; + base->CTRL &= ~LPUART_CTRL_TIE_MASK; + } +} + +/*! + * @brief Enables or disables the LPUART receiver DMA. + * + * This function enables or disables the receiver data register full flag, STAT[RDRF], to generate DMA requests. + * + * @param base LPUART peripheral base address. + * @param enable True to enable, false to disable. + */ +static inline void LPUART_EnableRxDMA(LPUART_Type *base, bool enable) +{ + if (enable) + { + base->BAUD |= LPUART_BAUD_RDMAE_MASK; + base->CTRL |= LPUART_CTRL_RIE_MASK; + } + else + { + base->BAUD &= ~LPUART_BAUD_RDMAE_MASK; + base->CTRL &= ~LPUART_CTRL_RIE_MASK; + } +} + +/* @} */ +#endif /* FSL_FEATURE_LPUART_HAS_DMA_ENABLE */ + +/*! + * @name Bus Operations + * @{ + */ + +/*! + * @brief Enables or disables the LPUART transmitter. + * + * This function enables or disables the LPUART transmitter. + * + * @param base LPUART peripheral base address. + * @param enable True to enable, false to disable. + */ +static inline void LPUART_EnableTx(LPUART_Type *base, bool enable) +{ + if (enable) + { + base->CTRL |= LPUART_CTRL_TE_MASK; + } + else + { + base->CTRL &= ~LPUART_CTRL_TE_MASK; + } +} + +/*! + * @brief Enables or disables the LPUART receiver. + * + * This function enables or disables the LPUART receiver. + * + * @param base LPUART peripheral base address. + * @param enable True to enable, false to disable. + */ +static inline void LPUART_EnableRx(LPUART_Type *base, bool enable) +{ + if (enable) + { + base->CTRL |= LPUART_CTRL_RE_MASK; + } + else + { + base->CTRL &= ~LPUART_CTRL_RE_MASK; + } +} + +/*! + * @brief Writes to the transmitter register. + * + * This function writes data to the transmitter register directly. The upper layer must + * ensure that the TX register is empty or that the TX FIFO has room before calling this function. + * + * @param base LPUART peripheral base address. + * @param data Data write to the TX register. + */ +static inline void LPUART_WriteByte(LPUART_Type *base, uint8_t data) +{ + base->DATA = data; +} + +/*! + * @brief Reads the RX register. + * + * This function reads data from the receiver register directly. The upper layer must + * ensure that the RX register is full or that the RX FIFO has data before calling this function. + * + * @param base LPUART peripheral base address. + * @return Data read from data register. + */ +static inline uint8_t LPUART_ReadByte(LPUART_Type *base) +{ +#if defined(FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT) && FSL_FEATURE_LPUART_HAS_7BIT_DATA_SUPPORT + uint32_t ctrl = base->CTRL; + bool isSevenDataBits = ((ctrl & LPUART_CTRL_M7_MASK) || + ((!(ctrl & LPUART_CTRL_M7_MASK)) && (!(ctrl & LPUART_CTRL_M_MASK)) && (ctrl & LPUART_CTRL_PE_MASK))); + + if (isSevenDataBits) + { + return (base->DATA & 0x7F); + } + else + { + return base->DATA; + } +#else + return base->DATA; +#endif +} + +/*! + * @brief Writes to transmitter register using a blocking method. + * + * This function polls the transmitter register, waits for the register to be empty or for TX FIFO to have + * room and then writes data to the transmitter buffer. + * + * @note This function does not check whether all data has been sent out to the bus. + * Before disabling the transmitter, check the kLPUART_TransmissionCompleteFlag to ensure that the transmit is + * finished. + * + * @param base LPUART peripheral base address. + * @param data Start address of the data to write. + * @param length Size of the data to write. + */ +void LPUART_WriteBlocking(LPUART_Type *base, const uint8_t *data, size_t length); + +/*! +* @brief Reads the RX data register using a blocking method. + * + * This function polls the RX register, waits for the RX register full or RX FIFO + * has data then reads data from the TX register. + * + * @param base LPUART peripheral base address. + * @param data Start address of the buffer to store the received data. + * @param length Size of the buffer. + * @retval kStatus_LPUART_RxHardwareOverrun Receiver overrun happened while receiving data. + * @retval kStatus_LPUART_NoiseError Noise error happened while receiving data. + * @retval kStatus_LPUART_FramingError Framing error happened while receiving data. + * @retval kStatus_LPUART_ParityError Parity error happened while receiving data. + * @retval kStatus_Success Successfully received all data. + */ +status_t LPUART_ReadBlocking(LPUART_Type *base, uint8_t *data, size_t length); + +/* @} */ + +/*! + * @name Transactional + * @{ + */ + +/*! + * @brief Initializes the LPUART handle. + * + * This function initializes the LPUART handle, which can be used for other LPUART + * transactional APIs. Usually, for a specified LPUART instance, + * call this API once to get the initialized handle. + * + * The LPUART driver supports the "background" receiving, which means that user can set up + * an RX ring buffer optionally. Data received is stored into the ring buffer even when the + * user doesn't call the LPUART_TransferReceiveNonBlocking() API. If there is already data received + * in the ring buffer, the user can get the received data from the ring buffer directly. + * The ring buffer is disabled if passing NULL as @p ringBuffer. + * + * @param base LPUART peripheral base address. + * @param handle LPUART handle pointer. + * @param callback Callback function. + * @param userData User data. + */ +void LPUART_TransferCreateHandle(LPUART_Type *base, + lpuart_handle_t *handle, + lpuart_transfer_callback_t callback, + void *userData); +/*! + * @brief Transmits a buffer of data using the interrupt method. + * + * This function send data using an interrupt method. This is a non-blocking function, which + * returns directly without waiting for all data written to the transmitter register. When + * all data is written to the TX register in the ISR, the LPUART driver calls the callback + * function and passes the @ref kStatus_LPUART_TxIdle as status parameter. + * + * @note The kStatus_LPUART_TxIdle is passed to the upper layer when all data are written + * to the TX register. However, there is no check to ensure that all the data sent out. Before disabling the TX, + * check the kLPUART_TransmissionCompleteFlag to ensure that the transmit is finished. + * + * @param base LPUART peripheral base address. + * @param handle LPUART handle pointer. + * @param xfer LPUART transfer structure, see #lpuart_transfer_t. + * @retval kStatus_Success Successfully start the data transmission. + * @retval kStatus_LPUART_TxBusy Previous transmission still not finished, data not all written to the TX register. + * @retval kStatus_InvalidArgument Invalid argument. + */ +status_t LPUART_TransferSendNonBlocking(LPUART_Type *base, lpuart_handle_t *handle, lpuart_transfer_t *xfer); + +/*! + * @brief Sets up the RX ring buffer. + * + * This function sets up the RX ring buffer to a specific UART handle. + * + * When the RX ring buffer is used, data received is stored into the ring buffer even when + * the user doesn't call the UART_TransferReceiveNonBlocking() API. If there is already data received + * in the ring buffer, the user can get the received data from the ring buffer directly. + * + * @note When using RX ring buffer, one byte is reserved for internal use. In other + * words, if @p ringBufferSize is 32, then only 31 bytes are used for saving data. + * + * @param base LPUART peripheral base address. + * @param handle LPUART handle pointer. + * @param ringBuffer Start address of ring buffer for background receiving. Pass NULL to disable the ring buffer. + * @param ringBufferSize size of the ring buffer. + */ +void LPUART_TransferStartRingBuffer(LPUART_Type *base, + lpuart_handle_t *handle, + uint8_t *ringBuffer, + size_t ringBufferSize); + +/*! + * @brief Abort the background transfer and uninstall the ring buffer. + * + * This function aborts the background transfer and uninstalls the ring buffer. + * + * @param base LPUART peripheral base address. + * @param handle LPUART handle pointer. + */ +void LPUART_TransferStopRingBuffer(LPUART_Type *base, lpuart_handle_t *handle); + +/*! + * @brief Aborts the interrupt-driven data transmit. + * + * This function aborts the interrupt driven data sending. The user can get the remainBtyes to find out + * how many bytes are still not sent out. + * + * @param base LPUART peripheral base address. + * @param handle LPUART handle pointer. + */ +void LPUART_TransferAbortSend(LPUART_Type *base, lpuart_handle_t *handle); + +/*! + * @brief Get the number of bytes that have been written to LPUART TX register. + * + * This function gets the number of bytes that have been written to LPUART TX + * register by interrupt method. + * + * @param base LPUART peripheral base address. + * @param handle LPUART handle pointer. + * @param count Send bytes count. + * @retval kStatus_NoTransferInProgress No send in progress. + * @retval kStatus_InvalidArgument Parameter is invalid. + * @retval kStatus_Success Get successfully through the parameter \p count; + */ +status_t LPUART_TransferGetSendCount(LPUART_Type *base, lpuart_handle_t *handle, uint32_t *count); + +/*! + * @brief Receives a buffer of data using the interrupt method. + * + * This function receives data using an interrupt method. This is a non-blocking function + * which returns without waiting to ensure that all data are received. + * If the RX ring buffer is used and not empty, the data in the ring buffer is copied and + * the parameter @p receivedBytes shows how many bytes are copied from the ring buffer. + * After copying, if the data in the ring buffer is not enough for read, the receive + * request is saved by the LPUART driver. When the new data arrives, the receive request + * is serviced first. When all data is received, the LPUART driver notifies the upper layer + * through a callback function and passes a status parameter @ref kStatus_UART_RxIdle. + * For example, the upper layer needs 10 bytes but there are only 5 bytes in ring buffer. + * The 5 bytes are copied to xfer->data, which returns with the + * parameter @p receivedBytes set to 5. For the remaining 5 bytes, the newly arrived data is + * saved from xfer->data[5]. When 5 bytes are received, the LPUART driver notifies the upper layer. + * If the RX ring buffer is not enabled, this function enables the RX and RX interrupt + * to receive data to xfer->data. When all data is received, the upper layer is notified. + * + * @param base LPUART peripheral base address. + * @param handle LPUART handle pointer. + * @param xfer LPUART transfer structure, see #uart_transfer_t. + * @param receivedBytes Bytes received from the ring buffer directly. + * @retval kStatus_Success Successfully queue the transfer into the transmit queue. + * @retval kStatus_LPUART_RxBusy Previous receive request is not finished. + * @retval kStatus_InvalidArgument Invalid argument. + */ +status_t LPUART_TransferReceiveNonBlocking(LPUART_Type *base, + lpuart_handle_t *handle, + lpuart_transfer_t *xfer, + size_t *receivedBytes); + +/*! + * @brief Aborts the interrupt-driven data receiving. + * + * This function aborts the interrupt-driven data receiving. The user can get the remainBytes to find out + * how many bytes not received yet. + * + * @param base LPUART peripheral base address. + * @param handle LPUART handle pointer. + */ +void LPUART_TransferAbortReceive(LPUART_Type *base, lpuart_handle_t *handle); + +/*! + * @brief Get the number of bytes that have been received. + * + * This function gets the number of bytes that have been received. + * + * @param base LPUART peripheral base address. + * @param handle LPUART handle pointer. + * @param count Receive bytes count. + * @retval kStatus_NoTransferInProgress No receive in progress. + * @retval kStatus_InvalidArgument Parameter is invalid. + * @retval kStatus_Success Get successfully through the parameter \p count; + */ +status_t LPUART_TransferGetReceiveCount(LPUART_Type *base, lpuart_handle_t *handle, uint32_t *count); + +/*! + * @brief LPUART IRQ handle function. + * + * This function handles the LPUART transmit and receive IRQ request. + * + * @param base LPUART peripheral base address. + * @param handle LPUART handle pointer. + */ +void LPUART_TransferHandleIRQ(LPUART_Type *base, lpuart_handle_t *handle); + +/*! + * @brief LPUART Error IRQ handle function. + * + * This function handles the LPUART error IRQ request. + * + * @param base LPUART peripheral base address. + * @param handle LPUART handle pointer. + */ +void LPUART_TransferHandleErrorIRQ(LPUART_Type *base, lpuart_handle_t *handle); + +/* @} */ + +#if defined(__cplusplus) +} +#endif + +/*! @}*/ + +#endif /* _FSL_LPUART_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_lpuart_edma.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_lpuart_edma.c new file mode 100644 index 00000000000..0ba8df3335b --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_lpuart_edma.c @@ -0,0 +1,331 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_lpuart_edma.h" +#include "fsl_dmamux.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*base, lpuartPrivateHandle->handle); + + if (lpuartPrivateHandle->handle->callback) + { + lpuartPrivateHandle->handle->callback(lpuartPrivateHandle->base, lpuartPrivateHandle->handle, + kStatus_LPUART_TxIdle, lpuartPrivateHandle->handle->userData); + } + } +} + +static void LPUART_ReceiveEDMACallback(edma_handle_t *handle, void *param, bool transferDone, uint32_t tcds) +{ + assert(param); + + lpuart_edma_private_handle_t *lpuartPrivateHandle = (lpuart_edma_private_handle_t *)param; + + /* Avoid warning for unused parameters. */ + handle = handle; + tcds = tcds; + + if (transferDone) + { + /* Disable transfer. */ + LPUART_TransferAbortReceiveEDMA(lpuartPrivateHandle->base, lpuartPrivateHandle->handle); + + if (lpuartPrivateHandle->handle->callback) + { + lpuartPrivateHandle->handle->callback(lpuartPrivateHandle->base, lpuartPrivateHandle->handle, + kStatus_LPUART_RxIdle, lpuartPrivateHandle->handle->userData); + } + } +} + +void LPUART_TransferCreateHandleEDMA(LPUART_Type *base, + lpuart_edma_handle_t *handle, + lpuart_edma_transfer_callback_t callback, + void *userData, + edma_handle_t *txEdmaHandle, + edma_handle_t *rxEdmaHandle) +{ + assert(handle); + + uint32_t instance = LPUART_GetInstance(base); + + s_edmaPrivateHandle[instance].base = base; + s_edmaPrivateHandle[instance].handle = handle; + + memset(handle, 0, sizeof(*handle)); + + handle->rxState = kLPUART_RxIdle; + handle->txState = kLPUART_TxIdle; + + handle->rxEdmaHandle = rxEdmaHandle; + handle->txEdmaHandle = txEdmaHandle; + + handle->callback = callback; + handle->userData = userData; + +#if defined(FSL_FEATURE_LPUART_HAS_FIFO) && FSL_FEATURE_LPUART_HAS_FIFO + /* Note: + Take care of the RX FIFO, EDMA request only assert when received bytes + equal or more than RX water mark, there is potential issue if RX water + mark larger than 1. + For example, if RX FIFO water mark is 2, upper layer needs 5 bytes and + 5 bytes are received. the last byte will be saved in FIFO but not trigger + EDMA transfer because the water mark is 2. + */ + if (rxEdmaHandle) + { + base->WATER &= (~LPUART_WATER_RXWATER_MASK); + } +#endif + + /* Configure TX. */ + if (txEdmaHandle) + { + EDMA_SetCallback(handle->txEdmaHandle, LPUART_SendEDMACallback, &s_edmaPrivateHandle[instance]); + } + + /* Configure RX. */ + if (rxEdmaHandle) + { + EDMA_SetCallback(handle->rxEdmaHandle, LPUART_ReceiveEDMACallback, &s_edmaPrivateHandle[instance]); + } +} + +status_t LPUART_SendEDMA(LPUART_Type *base, lpuart_edma_handle_t *handle, lpuart_transfer_t *xfer) +{ + assert(handle); + assert(handle->txEdmaHandle); + assert(xfer); + assert(xfer->data); + assert(xfer->dataSize); + + edma_transfer_config_t xferConfig; + status_t status; + + /* If previous TX not finished. */ + if (kLPUART_TxBusy == handle->txState) + { + status = kStatus_LPUART_TxBusy; + } + else + { + handle->txState = kLPUART_TxBusy; + handle->txDataSizeAll = xfer->dataSize; + + /* Prepare transfer. */ + EDMA_PrepareTransfer(&xferConfig, xfer->data, sizeof(uint8_t), (void *)LPUART_GetDataRegisterAddress(base), + sizeof(uint8_t), sizeof(uint8_t), xfer->dataSize, kEDMA_MemoryToPeripheral); + + /* Submit transfer. */ + EDMA_SubmitTransfer(handle->txEdmaHandle, &xferConfig); + EDMA_StartTransfer(handle->txEdmaHandle); + + /* Enable LPUART TX EDMA. */ + LPUART_EnableTxDMA(base, true); + + status = kStatus_Success; + } + + return status; +} + +status_t LPUART_ReceiveEDMA(LPUART_Type *base, lpuart_edma_handle_t *handle, lpuart_transfer_t *xfer) +{ + assert(handle); + assert(handle->rxEdmaHandle); + assert(xfer); + assert(xfer->data); + assert(xfer->dataSize); + + edma_transfer_config_t xferConfig; + status_t status; + + /* If previous RX not finished. */ + if (kLPUART_RxBusy == handle->rxState) + { + status = kStatus_LPUART_RxBusy; + } + else + { + handle->rxState = kLPUART_RxBusy; + handle->rxDataSizeAll = xfer->dataSize; + + /* Prepare transfer. */ + EDMA_PrepareTransfer(&xferConfig, (void *)LPUART_GetDataRegisterAddress(base), sizeof(uint8_t), xfer->data, + sizeof(uint8_t), sizeof(uint8_t), xfer->dataSize, kEDMA_PeripheralToMemory); + + /* Submit transfer. */ + EDMA_SubmitTransfer(handle->rxEdmaHandle, &xferConfig); + EDMA_StartTransfer(handle->rxEdmaHandle); + + /* Enable LPUART RX EDMA. */ + LPUART_EnableRxDMA(base, true); + + status = kStatus_Success; + } + + return status; +} + +void LPUART_TransferAbortSendEDMA(LPUART_Type *base, lpuart_edma_handle_t *handle) +{ + assert(handle); + assert(handle->txEdmaHandle); + + /* Disable LPUART TX EDMA. */ + LPUART_EnableTxDMA(base, false); + + /* Stop transfer. */ + EDMA_AbortTransfer(handle->txEdmaHandle); + + handle->txState = kLPUART_TxIdle; +} + +void LPUART_TransferAbortReceiveEDMA(LPUART_Type *base, lpuart_edma_handle_t *handle) +{ + assert(handle); + assert(handle->rxEdmaHandle); + + /* Disable LPUART RX EDMA. */ + LPUART_EnableRxDMA(base, false); + + /* Stop transfer. */ + EDMA_AbortTransfer(handle->rxEdmaHandle); + + handle->rxState = kLPUART_RxIdle; +} + +status_t LPUART_TransferGetReceiveCountEDMA(LPUART_Type *base, lpuart_edma_handle_t *handle, uint32_t *count) +{ + assert(handle); + assert(handle->rxEdmaHandle); + assert(count); + + if (kLPUART_RxIdle == handle->rxState) + { + return kStatus_NoTransferInProgress; + } + + *count = handle->rxDataSizeAll - EDMA_GetRemainingBytes(handle->rxEdmaHandle->base, handle->rxEdmaHandle->channel); + + return kStatus_Success; +} + +status_t LPUART_TransferGetSendCountEDMA(LPUART_Type *base, lpuart_edma_handle_t *handle, uint32_t *count) +{ + assert(handle); + assert(handle->txEdmaHandle); + assert(count); + + if (kLPUART_TxIdle == handle->txState) + { + return kStatus_NoTransferInProgress; + } + + *count = handle->txDataSizeAll - EDMA_GetRemainingBytes(handle->txEdmaHandle->base, handle->txEdmaHandle->channel); + + return kStatus_Success; +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_lpuart_edma.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_lpuart_edma.h new file mode 100644 index 00000000000..99baf90e146 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_lpuart_edma.h @@ -0,0 +1,189 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FSL_LPUART_EDMA_H_ +#define _FSL_LPUART_EDMA_H_ + +#include "fsl_lpuart.h" +#include "fsl_dmamux.h" +#include "fsl_edma.h" + +/*! + * @addtogroup lpuart_edma_driver + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/* Forward declaration of the handle typedef. */ +typedef struct _lpuart_edma_handle lpuart_edma_handle_t; + +/*! @brief LPUART transfer callback function. */ +typedef void (*lpuart_edma_transfer_callback_t)(LPUART_Type *base, + lpuart_edma_handle_t *handle, + status_t status, + void *userData); + +/*! +* @brief LPUART eDMA handle +*/ +struct _lpuart_edma_handle +{ + lpuart_edma_transfer_callback_t callback; /*!< Callback function. */ + void *userData; /*!< LPUART callback function parameter.*/ + size_t rxDataSizeAll; /*!< Size of the data to receive. */ + size_t txDataSizeAll; /*!< Size of the data to send out. */ + + edma_handle_t *txEdmaHandle; /*!< The eDMA TX channel used. */ + edma_handle_t *rxEdmaHandle; /*!< The eDMA RX channel used. */ + + volatile uint8_t txState; /*!< TX transfer state. */ + volatile uint8_t rxState; /*!< RX transfer state */ +}; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @name eDMA transactional + * @{ + */ + +/*! + * @brief Initializes the LPUART handle which is used in transactional functions. + * @param base LPUART peripheral base address. + * @param handle Pointer to lpuart_edma_handle_t structure. + * @param callback Callback function. + * @param userData User data. + * @param txEdmaHandle User requested DMA handle for TX DMA transfer. + * @param rxEdmaHandle User requested DMA handle for RX DMA transfer. + */ +void LPUART_TransferCreateHandleEDMA(LPUART_Type *base, + lpuart_edma_handle_t *handle, + lpuart_edma_transfer_callback_t callback, + void *userData, + edma_handle_t *txEdmaHandle, + edma_handle_t *rxEdmaHandle); + +/*! + * @brief Sends data using eDMA. + * + * This function sends data using eDMA. This is a non-blocking function, which returns + * right away. When all data is sent, the send callback function is called. + * + * @param base LPUART peripheral base address. + * @param handle LPUART handle pointer. + * @param xfer LPUART eDMA transfer structure. See #lpuart_transfer_t. + * @retval kStatus_Success if succeed, others failed. + * @retval kStatus_LPUART_TxBusy Previous transfer on going. + * @retval kStatus_InvalidArgument Invalid argument. + */ +status_t LPUART_SendEDMA(LPUART_Type *base, lpuart_edma_handle_t *handle, lpuart_transfer_t *xfer); + +/*! + * @brief Receives data using eDMA. + * + * This function receives data using eDMA. This is non-blocking function, which returns + * right away. When all data is received, the receive callback function is called. + * + * @param base LPUART peripheral base address. + * @param handle Pointer to lpuart_edma_handle_t structure. + * @param xfer LPUART eDMA transfer structure, see #lpuart_transfer_t. + * @retval kStatus_Success if succeed, others fail. + * @retval kStatus_LPUART_RxBusy Previous transfer ongoing. + * @retval kStatus_InvalidArgument Invalid argument. + */ +status_t LPUART_ReceiveEDMA(LPUART_Type *base, lpuart_edma_handle_t *handle, lpuart_transfer_t *xfer); + +/*! + * @brief Aborts the sent data using eDMA. + * + * This function aborts the sent data using eDMA. + * + * @param base LPUART peripheral base address. + * @param handle Pointer to lpuart_edma_handle_t structure. + */ +void LPUART_TransferAbortSendEDMA(LPUART_Type *base, lpuart_edma_handle_t *handle); + +/*! + * @brief Aborts the received data using eDMA. + * + * This function aborts the received data using eDMA. + * + * @param base LPUART peripheral base address. + * @param handle Pointer to lpuart_edma_handle_t structure. + */ +void LPUART_TransferAbortReceiveEDMA(LPUART_Type *base, lpuart_edma_handle_t *handle); + +/*! + * @brief Get the number of bytes that have been written to LPUART TX register. + * + * This function gets the number of bytes that have been written to LPUART TX + * register by DMA. + * + * @param base LPUART peripheral base address. + * @param handle LPUART handle pointer. + * @param count Send bytes count. + * @retval kStatus_NoTransferInProgress No send in progress. + * @retval kStatus_InvalidArgument Parameter is invalid. + * @retval kStatus_Success Get successfully through the parameter \p count; + */ +status_t LPUART_TransferGetSendCountEDMA(LPUART_Type *base, lpuart_edma_handle_t *handle, uint32_t *count); + +/*! + * @brief Get the number of bytes that have been received. + * + * This function gets the number of bytes that have been received. + * + * @param base LPUART peripheral base address. + * @param handle LPUART handle pointer. + * @param count Receive bytes count. + * @retval kStatus_NoTransferInProgress No receive in progress. + * @retval kStatus_InvalidArgument Parameter is invalid. + * @retval kStatus_Success Get successfully through the parameter \p count; + */ +status_t LPUART_TransferGetReceiveCountEDMA(LPUART_Type *base, lpuart_edma_handle_t *handle, uint32_t *count); + +/*@}*/ + +#if defined(__cplusplus) +} +#endif + +/*! @}*/ + +#endif /* _FSL_LPUART_EDMA_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_ltc.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_ltc.c new file mode 100644 index 00000000000..37bd746f750 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_ltc.c @@ -0,0 +1,4292 @@ +/* + * Copyright (c) 2015-2016, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_ltc.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ +/*! Full word representing the actual bit values for the LTC mode register. */ +typedef uint32_t ltc_mode_t; + +#define LTC_FIFO_SZ_MAX_DOWN_ALGN (0xff0u) +#define LTC_MD_ALG_AES (0x10U) /*!< Bit field value for LTC_MD_ALG: AES */ +#define LTC_MD_ALG_DES (0x20U) /*!< Bit field value for LTC_MD_ALG: DES */ +#define LTC_MD_ALG_TRIPLE_DES (0x21U) /*!< Bit field value for LTC_MD_ALG: 3DES */ +#define LTC_MD_ALG_SHA1 (0x41U) /*!< Bit field value for LTC_MD_ALG: SHA-1 */ +#define LTC_MD_ALG_SHA224 (0x42U) /*!< Bit field value for LTC_MD_ALG: SHA-224 */ +#define LTC_MD_ALG_SHA256 (0x43U) /*!< Bit field value for LTC_MD_ALG: SHA-256 */ +#define LTC_MDPK_ALG_PKHA (0x80U) /*!< Bit field value for LTC_MDPK_ALG: PKHA */ +#define LTC_MD_ENC_DECRYPT (0U) /*!< Bit field value for LTC_MD_ENC: Decrypt. */ +#define LTC_MD_ENC_ENCRYPT (0x1U) /*!< Bit field value for LTC_MD_ENC: Encrypt. */ +#define LTC_MD_AS_UPDATE (0U) /*!< Bit field value for LTC_MD_AS: Update */ +#define LTC_MD_AS_INITIALIZE (0x1U) /*!< Bit field value for LTC_MD_AS: Initialize */ +#define LTC_MD_AS_FINALIZE (0x2U) /*!< Bit field value for LTC_MD_AS: Finalize */ +#define LTC_MD_AS_INIT_FINAL (0x3U) /*!< Bit field value for LTC_MD_AS: Initialize/Finalize */ + +#define LTC_AES_GCM_TYPE_AAD 55 +#define LTC_AES_GCM_TYPE_IV 0 + +#define LTC_CCM_TAG_IDX 8 /*! For CCM encryption, the encrypted final MAC is written to the context word 8-11 */ +#define LTC_GCM_TAG_IDX 0 /*! For GCM encryption, the encrypted final MAC is written to the context word 0-3 */ + +enum _ltc_md_dk_bit_shift +{ + kLTC_ModeRegBitShiftDK = 12U, +}; + +typedef enum _ltc_algorithm +{ +#if defined(FSL_FEATURE_LTC_HAS_PKHA) && FSL_FEATURE_LTC_HAS_PKHA + kLTC_AlgorithmPKHA = LTC_MDPK_ALG_PKHA << LTC_MD_ALG_SHIFT, +#endif /* FSL_FEATURE_LTC_HAS_PKHA */ + kLTC_AlgorithmAES = LTC_MD_ALG_AES << LTC_MD_ALG_SHIFT, +#if defined(FSL_FEATURE_LTC_HAS_DES) && FSL_FEATURE_LTC_HAS_DES + kLTC_AlgorithmDES = LTC_MD_ALG_DES << LTC_MD_ALG_SHIFT, + kLTC_Algorithm3DES = LTC_MD_ALG_TRIPLE_DES << LTC_MD_ALG_SHIFT, +#endif /* FSL_FEATURE_LTC_HAS_DES */ +#if defined(FSL_FEATURE_LTC_HAS_SHA) && FSL_FEATURE_LTC_HAS_SHA + kLTC_AlgorithmSHA1 = LTC_MD_ALG_SHA1 << LTC_MD_ALG_SHIFT, + kLTC_AlgorithmSHA224 = LTC_MD_ALG_SHA224 << LTC_MD_ALG_SHIFT, + kLTC_AlgorithmSHA256 = LTC_MD_ALG_SHA256 << LTC_MD_ALG_SHIFT, +#endif /* FSL_FEATURE_LTC_HAS_SHA */ +} ltc_algorithm_t; + +typedef enum _ltc_mode_symmetric_alg +{ + kLTC_ModeCTR = 0x00U << LTC_MD_AAI_SHIFT, + kLTC_ModeCBC = 0x10U << LTC_MD_AAI_SHIFT, + kLTC_ModeECB = 0x20U << LTC_MD_AAI_SHIFT, + kLTC_ModeCFB = 0x30U << LTC_MD_AAI_SHIFT, + kLTC_ModeOFB = 0x40U << LTC_MD_AAI_SHIFT, + kLTC_ModeCMAC = 0x60U << LTC_MD_AAI_SHIFT, + kLTC_ModeXCBCMAC = 0x70U << LTC_MD_AAI_SHIFT, + kLTC_ModeCCM = 0x80U << LTC_MD_AAI_SHIFT, + kLTC_ModeGCM = 0x90U << LTC_MD_AAI_SHIFT, +} ltc_mode_symmetric_alg_t; + +typedef enum _ltc_mode_encrypt +{ + kLTC_ModeDecrypt = LTC_MD_ENC_DECRYPT << LTC_MD_ENC_SHIFT, + kLTC_ModeEncrypt = LTC_MD_ENC_ENCRYPT << LTC_MD_ENC_SHIFT, +} ltc_mode_encrypt_t; + +typedef enum _ltc_mode_algorithm_state +{ + kLTC_ModeUpdate = LTC_MD_AS_UPDATE << LTC_MD_AS_SHIFT, + kLTC_ModeInit = LTC_MD_AS_INITIALIZE << LTC_MD_AS_SHIFT, + kLTC_ModeFinalize = LTC_MD_AS_FINALIZE << LTC_MD_AS_SHIFT, + kLTC_ModeInitFinal = LTC_MD_AS_INIT_FINAL << LTC_MD_AS_SHIFT +} ltc_mode_algorithm_state_t; + +/*! @brief LTC status flags */ +enum _ltc_status_flag +{ + kLTC_StatusAesBusy = 1U << LTC_STA_AB_SHIFT, +#if defined(FSL_FEATURE_LTC_HAS_DES) && FSL_FEATURE_LTC_HAS_DES + kLTC_StatusDesBusy = 1U << LTC_STA_DB_SHIFT, +#endif /* FSL_FEATURE_LTC_HAS_DES */ +#if defined(FSL_FEATURE_LTC_HAS_PKHA) && FSL_FEATURE_LTC_HAS_PKHA + kLTC_StatusPkhaBusy = 1U << LTC_STA_PB_SHIFT, +#endif /* FSL_FEATURE_LTC_HAS_PKHA */ +#if defined(FSL_FEATURE_LTC_HAS_SHA) && FSL_FEATURE_LTC_HAS_SHA + kLTC_StatusMdhaBusy = 1U << LTC_STA_MB_SHIFT, +#endif /* FSL_FEATURE_LTC_HAS_SHA */ + kLTC_StatusDoneIsr = 1U << LTC_STA_DI_SHIFT, + kLTC_StatusErrorIsr = 1U << LTC_STA_EI_SHIFT, +#if defined(FSL_FEATURE_LTC_HAS_PKHA) && FSL_FEATURE_LTC_HAS_PKHA + kLTC_StatusPublicKeyPrime = 1U << LTC_STA_PKP_SHIFT, + kLTC_StatusPublicKeyOpOne = 1U << LTC_STA_PKO_SHIFT, + kLTC_StatusPublicKeyOpZero = 1U << LTC_STA_PKZ_SHIFT, +#endif /* FSL_FEATURE_LTC_HAS_PKHA */ + kLTC_StatusAll = LTC_STA_AB_MASK | +#if defined(FSL_FEATURE_LTC_HAS_DES) && FSL_FEATURE_LTC_HAS_DES + LTC_STA_DB_MASK | +#endif /* FSL_FEATURE_LTC_HAS_DES */ +#if defined(FSL_FEATURE_LTC_HAS_SHA) && FSL_FEATURE_LTC_HAS_SHA + LTC_STA_MB_MASK | +#endif /* FSL_FEATURE_LTC_HAS_SHA */ + LTC_STA_DI_MASK | LTC_STA_EI_MASK +#if defined(FSL_FEATURE_LTC_HAS_PKHA) && FSL_FEATURE_LTC_HAS_PKHA + | + LTC_STA_PB_MASK | LTC_STA_PKP_MASK | LTC_STA_PKO_MASK | LTC_STA_PKZ_MASK +#endif /* FSL_FEATURE_LTC_HAS_PKHA */ +}; + +/*! @brief LTC clear register */ +typedef enum _ltc_clear_written +{ + kLTC_ClearMode = 1U << LTC_CW_CM_SHIFT, + kLTC_ClearDataSize = 1U << LTC_CW_CDS_SHIFT, + kLTC_ClearIcvSize = 1U << LTC_CW_CICV_SHIFT, + kLTC_ClearContext = 1U << LTC_CW_CCR_SHIFT, + kLTC_ClearKey = 1U << LTC_CW_CKR_SHIFT, +#if defined(FSL_FEATURE_LTC_HAS_PKHA) && FSL_FEATURE_LTC_HAS_PKHA + kLTC_ClearPkhaSizeA = 1U << LTC_CW_CPKA_SHIFT, + kLTC_ClearPkhaSizeB = 1U << LTC_CW_CPKB_SHIFT, + kLTC_ClearPkhaSizeN = 1U << LTC_CW_CPKN_SHIFT, + kLTC_ClearPkhaSizeE = 1U << LTC_CW_CPKE_SHIFT, + kLTC_ClearAllSize = (int)kLTC_ClearPkhaSizeA | kLTC_ClearPkhaSizeB | kLTC_ClearPkhaSizeN | kLTC_ClearPkhaSizeE, +#endif /* FSL_FEATURE_LTC_HAS_PKHA */ + kLTC_ClearOutputFifo = 1U << LTC_CW_COF_SHIFT, + kLTC_ClearInputFifo = (int)(1U << LTC_CW_CIF_SHIFT), + kLTC_ClearAll = (int)(LTC_CW_CM_MASK | LTC_CW_CDS_MASK | LTC_CW_CICV_MASK | LTC_CW_CCR_MASK | LTC_CW_CKR_MASK | +#if defined(FSL_FEATURE_LTC_HAS_PKHA) && FSL_FEATURE_LTC_HAS_PKHA + LTC_CW_CPKA_MASK | LTC_CW_CPKB_MASK | LTC_CW_CPKN_MASK | LTC_CW_CPKE_MASK | +#endif /* FSL_FEATURE_LTC_HAS_PKHA */ + LTC_CW_COF_MASK | LTC_CW_CIF_MASK) +} ltc_clear_written_t; + +enum _ltc_ctrl_swap +{ + kLTC_CtrlSwapAll = + LTC_CTL_IFS_MASK | LTC_CTL_OFS_MASK | LTC_CTL_KIS_MASK | LTC_CTL_KOS_MASK | LTC_CTL_CIS_MASK | LTC_CTL_COS_MASK, +}; + +/*! @brief Type used in GCM and CCM modes. + + Content of a block is established via individual bytes and moved to LTC + IFIFO by moving 32-bit words. +*/ +typedef union _ltc_xcm_block_t +{ + uint32_t w[4]; /*!< LTC context register is 16 bytes written as four 32-bit words */ + uint8_t b[16]; /*!< 16 octets block for CCM B0 and CTR0 and for GCM */ +} ltc_xcm_block_t; + +#if defined(FSL_FEATURE_LTC_HAS_PKHA) && FSL_FEATURE_LTC_HAS_PKHA + +/*! @brief PKHA functions - arithmetic, copy/clear memory. */ +typedef enum _ltc_pkha_func_t +{ + kLTC_PKHA_ClearMem = 1U, + kLTC_PKHA_ArithModAdd = 2U, /*!< (A + B) mod N */ + kLTC_PKHA_ArithModSub1 = 3U, /*!< (A - B) mod N */ + kLTC_PKHA_ArithModSub2 = 4U, /*!< (B - A) mod N */ + kLTC_PKHA_ArithModMul = 5U, /*!< (A x B) mod N */ + kLTC_PKHA_ArithModExp = 6U, /*!< (A^E) mod N */ + kLTC_PKHA_ArithModRed = 7U, /*!< (A) mod N */ + kLTC_PKHA_ArithModInv = 8U, /*!< (A^-1) mod N */ + kLTC_PKHA_ArithEccAdd = 9U, /*!< (P1 + P2) */ + kLTC_PKHA_ArithEccDouble = 10U, /*!< (P2 + P2) */ + kLTC_PKHA_ArithEccMul = 11U, /*!< (E x P1) */ + kLTC_PKHA_ArithModR2 = 12U, /*!< (R^2 mod N) */ + kLTC_PKHA_ArithGcd = 14U, /*!< GCD (A, N) */ + kLTC_PKHA_ArithPrimalityTest = 15U, /*!< Miller-Rabin */ + kLTC_PKHA_CopyMemSizeN = 16U, + kLTC_PKHA_CopyMemSizeSrc = 17U, +} ltc_pkha_func_t; + +/*! @brief Register areas for PKHA clear memory operations. */ +typedef enum _ltc_pkha_reg_area +{ + kLTC_PKHA_RegA = 8U, + kLTC_PKHA_RegB = 4U, + kLTC_PKHA_RegE = 2U, + kLTC_PKHA_RegN = 1U, + kLTC_PKHA_RegAll = kLTC_PKHA_RegA | kLTC_PKHA_RegB | kLTC_PKHA_RegE | kLTC_PKHA_RegN, +} ltc_pkha_reg_area_t; + +/*! @brief Quadrant areas for 2048-bit registers for PKHA copy memory + * operations. */ +typedef enum _ltc_pkha_quad_area_t +{ + kLTC_PKHA_Quad0 = 0U, + kLTC_PKHA_Quad1 = 1U, + kLTC_PKHA_Quad2 = 2U, + kLTC_PKHA_Quad3 = 3U, +} ltc_pkha_quad_area_t; + +/*! @brief User-supplied (R^2 mod N) input or LTC should calculate. */ +typedef enum _ltc_pkha_r2_t +{ + kLTC_PKHA_CalcR2 = 0U, /*!< Calculate (R^2 mod N) */ + kLTC_PKHA_InputR2 = 1U /*!< (R^2 mod N) supplied as input */ +} ltc_pkha_r2_t; + +/*! @brief LTC PKHA parameters */ +typedef struct _ltc_pkha_mode_params_t +{ + ltc_pkha_func_t func; + ltc_pkha_f2m_t arithType; + ltc_pkha_montgomery_form_t montFormIn; + ltc_pkha_montgomery_form_t montFormOut; + ltc_pkha_reg_area_t srcReg; + ltc_pkha_quad_area_t srcQuad; + ltc_pkha_reg_area_t dstReg; + ltc_pkha_quad_area_t dstQuad; + ltc_pkha_timing_t equalTime; + ltc_pkha_r2_t r2modn; +} ltc_pkha_mode_params_t; + +#endif /* FSL_FEATURE_LTC_HAS_PKHA */ + +/******************************************************************************* + * Prototypes + ******************************************************************************/ +#if defined(FSL_FEATURE_LTC_HAS_PKHA) && FSL_FEATURE_LTC_HAS_PKHA +static status_t ltc_pkha_clear_regabne(LTC_Type *base, bool A, bool B, bool N, bool E); +#endif /* FSL_FEATURE_LTC_HAS_PKHA */ + +/******************************************************************************* + * Code + ******************************************************************************/ + +/******************************************************************************* + * LTC Common code static + ******************************************************************************/ +/*! + * @brief Tests the correct key size. + * + * This function tests the correct key size. + * @param keySize Input key length in bytes. + * @return True if the key length is supported, false if not. + */ +bool ltc_check_key_size(const uint32_t keySize) +{ + return ((keySize == 16u) +#if defined(FSL_FEATURE_LTC_HAS_AES192) && FSL_FEATURE_LTC_HAS_AES192 + || ((keySize == 24u)) +#endif /* FSL_FEATURE_LTC_HAS_AES192 */ +#if defined(FSL_FEATURE_LTC_HAS_AES256) && FSL_FEATURE_LTC_HAS_AES256 + || ((keySize == 32u)) +#endif /* FSL_FEATURE_LTC_HAS_AES256 */ + ); +} + +/*! @brief LTC driver wait mechanism. */ +status_t ltc_wait(LTC_Type *base) +{ + status_t status; + + bool error = false; + bool done = false; + + /* Wait for 'done' or 'error' flag. */ + while ((!error) && (!done)) + { + uint32_t temp32 = base->STA; + error = temp32 & LTC_STA_EI_MASK; + done = temp32 & LTC_STA_DI_MASK; + } + + if (error) + { + base->COM = LTC_COM_ALL_MASK; /* Reset all engine to clear the error flag */ + status = kStatus_Fail; + } + else /* 'done' */ + { + status = kStatus_Success; + + base->CW = kLTC_ClearDataSize; + /* Clear 'done' interrupt status. This also clears the mode register. */ + base->STA = kLTC_StatusDoneIsr; + } + + return status; +} + +/*! + * @brief Clears the LTC module. + * This function can be used to clear all sensitive data from theLTC module, such as private keys. It is called + * internally by the LTC driver in case of an error or operation complete. + * @param base LTC peripheral base address + * @param pkha Include LTC PKHA register clear. If there is no PKHA, the argument is ignored. + */ +void ltc_clear_all(LTC_Type *base, bool addPKHA) +{ + base->CW = (uint32_t)kLTC_ClearAll; +#if defined(FSL_FEATURE_LTC_HAS_PKHA) && FSL_FEATURE_LTC_HAS_PKHA + if (addPKHA) + { + ltc_pkha_clear_regabne(base, true, true, true, true); + } +#endif /* FSL_FEATURE_LTC_HAS_PKHA */ +} + +void ltc_memcpy(void *dst, const void *src, size_t size) +{ +#if defined(__cplusplus) + register uint8_t *to = (uint8_t *)dst; + register const uint8_t *from = (const uint8_t *)src; +#else + register uint8_t *to = dst; + register const uint8_t *from = src; +#endif + while (size) + { + *to = *from; + size--; + to++; + from++; + } +} + +/*! + * @brief Reads an unaligned word. + * + * This function creates a 32-bit word from an input array of four bytes. + * + * @param src Input array of four bytes. The array can start at any address in memory. + * @return 32-bit unsigned int created from the input byte array. + */ +static inline uint32_t ltc_get_word_from_unaligned(const uint8_t *srcAddr) +{ +#if (!(defined(__CORTEX_M)) || (defined(__CORTEX_M) && (__CORTEX_M == 0))) + register const uint8_t *src = srcAddr; + /* Cortex M0 does not support misaligned loads */ + if ((uint32_t)src & 0x3u) + { + union _align_bytes_t + { + uint32_t word; + uint8_t byte[sizeof(uint32_t)]; + } my_bytes; + + my_bytes.byte[0] = *src; + my_bytes.byte[1] = *(src + 1); + my_bytes.byte[2] = *(src + 2); + my_bytes.byte[3] = *(src + 3); + return my_bytes.word; + } + else + { + /* addr aligned to 0-modulo-4 so it is safe to type cast */ + return *((const uint32_t *)src); + } +#elif defined(__CC_ARM) + /* -O3 optimization in Keil 5.15 and 5.16a uses LDM instruction here (LDM r4!, {r0}) + * which is wrong, because srcAddr might be unaligned. + * LDM on unaligned address causes hard-fault. in contrary, + * LDR supports unaligned address on Cortex M4 */ + register uint32_t retVal; + __asm + { + LDR retVal, [srcAddr] + } + return retVal; +#else + return *((const uint32_t *)srcAddr); +#endif +} + +/*! + * @brief Converts a 32-bit word into a byte array. + * + * This function creates an output array of four bytes from an input 32-bit word. + * + * @param srcWord Input 32-bit unsigned integer. + * @param dst Output array of four bytes. The array can start at any address in memory. + */ +static inline void ltc_set_unaligned_from_word(uint32_t srcWord, uint8_t *dstAddr) +{ +#if (!(defined(__CORTEX_M)) || (defined(__CORTEX_M) && (__CORTEX_M == 0))) + register uint8_t *dst = dstAddr; + /* Cortex M0 does not support misaligned stores */ + if ((uint32_t)dst & 0x3u) + { + *dst++ = (srcWord & 0x000000FFU); + *dst++ = (srcWord & 0x0000FF00U) >> 8; + *dst++ = (srcWord & 0x00FF0000U) >> 16; + *dst++ = (srcWord & 0xFF000000U) >> 24; + } + else + { + *((uint32_t *)dstAddr) = srcWord; /* addr aligned to 0-modulo-4 so it is safe to type cast */ + } +#elif defined(__CC_ARM) + __asm + { + STR srcWord, [dstAddr] + } + return; +#else + *((uint32_t *)dstAddr) = srcWord; +#endif +} + +/*! + * @brief Sets the LTC keys. + * + * This function writes the LTC keys into the key register. The keys should + * be written before the key size. + * + * @param base LTC peripheral base address + * @param key Key + * @param keySize Number of bytes for all keys to be loaded (maximum 32, must be a + * multiple of 4). + * @returns Key set status + */ +static status_t ltc_set_key(LTC_Type *base, const uint8_t *key, uint8_t keySize) +{ + int32_t i; + + for (i = 0; i < (keySize / 4); i++) + { + base->KEY[i] = ltc_get_word_from_unaligned(key + i * sizeof(uint32_t)); + } + + return kStatus_Success; +} + +/*! + * @brief Gets the LTC keys. + * + * This function retrieves the LTC keys from the key register. + * + * @param base LTC peripheral base address + * @param key Array of data to store keys + * @param keySize Number of bytes of keys to retrieve + * @returns Key set status + */ +static status_t ltc_get_key(LTC_Type *base, uint8_t *key, uint8_t keySize) +{ + int32_t i; + + for (i = 0; i < (keySize / 4); i++) + { + ltc_set_unaligned_from_word(base->KEY[i], key + i * sizeof(uint32_t)); + } + + return kStatus_Success; +} + +/*! + * @brief Writes the LTC context register; + * + * The LTC context register is a 512 bit (64 byte) register that holds + * internal context for the crypto engine. The meaning varies based on the + * algorithm and operating state being used. This register is written by the + * driver/application to load state such as IV, counter, and so on. Then, it is + * updated by the internal crypto engine as needed. + * + * @param base LTC peripheral base address + * @param data Data to write + * @param dataSize Size of data to write in bytes + * @param startIndex Starting word (4-byte) index into the 16-word register. + * @return Status of write + */ +status_t ltc_set_context(LTC_Type *base, const uint8_t *data, uint8_t dataSize, uint8_t startIndex) +{ + int32_t i; + int32_t j; + int32_t szLeft; + + /* Context register is 16 words in size (64 bytes). Ensure we are only + * writing a valid amount of data. */ + if (startIndex + (dataSize / 4) >= 16) + { + return kStatus_InvalidArgument; + } + + j = 0; + szLeft = dataSize % 4; + for (i = startIndex; i < (startIndex + dataSize / 4); i++) + { + base->CTX[i] = ltc_get_word_from_unaligned(data + j); + j += sizeof(uint32_t); + } + + if (szLeft) + { + uint32_t context_data = {0}; + ltc_memcpy(&context_data, data + j, szLeft); + base->CTX[i] = context_data; + } + return kStatus_Success; +} + +/*! + * @brief Reads the LTC context register. + * + * The LTC context register is a 512 bit (64 byte) register that holds + * internal context for the crypto engine. The meaning varies based on the + * algorithm and operating state being used. This register is written by the + * driver/application to load state such as IV, counter, and so on. Then, it is + * updated by the internal crypto engine as needed. + * + * @param base LTC peripheral base address + * @param data Destination of read data + * @param dataSize Size of data to read in bytes + * @param startIndex Starting word (4-byte) index into the 16-word register. + * @return Status of read + */ +status_t ltc_get_context(LTC_Type *base, uint8_t *dest, uint8_t dataSize, uint8_t startIndex) +{ + int32_t i; + int32_t j; + int32_t szLeft; + uint32_t rdCtx; + + /* Context register is 16 words in size (64 bytes). Ensure we are only + * writing a valid amount of data. */ + if (startIndex + (dataSize / 4) >= 16) + { + return kStatus_InvalidArgument; + } + + j = 0; + szLeft = dataSize % 4; + for (i = startIndex; i < (startIndex + dataSize / 4); i++) + { + ltc_set_unaligned_from_word(base->CTX[i], dest + j); + j += sizeof(uint32_t); + } + + if (szLeft) + { + rdCtx = 0; + rdCtx = base->CTX[i]; + ltc_memcpy(dest + j, &rdCtx, szLeft); + } + return kStatus_Success; +} + +static status_t ltc_symmetric_alg_state(LTC_Type *base, + const uint8_t *key, + uint8_t keySize, + ltc_algorithm_t alg, + ltc_mode_symmetric_alg_t mode, + ltc_mode_encrypt_t enc, + ltc_mode_algorithm_state_t as) +{ + ltc_mode_t modeReg; + + /* Clear internal register states. */ + base->CW = (uint32_t)kLTC_ClearAll; + + /* Set byte swap on for several registers we will be reading and writing + * user data to/from. */ + base->CTL |= kLTC_CtrlSwapAll; + + /* Write the key in place. */ + ltc_set_key(base, key, keySize); + + /* Write the key size. This must be done after writing the key, and this + * action locks the ability to modify the key registers. */ + base->KS = keySize; + + /* Clear the 'done' interrupt. */ + base->STA = kLTC_StatusDoneIsr; + + /* Set the proper block and algorithm mode. */ + modeReg = (uint32_t)alg | (uint32_t)enc | (uint32_t)as | (uint32_t)mode; + + /* Write the mode register to the hardware. */ + base->MD = modeReg; + + return kStatus_Success; +} + +/*! + * @brief Initializes the LTC for symmetric encrypt/decrypt operation. Mode is set to UPDATE. + * + * @param base LTC peripheral base address + * @param key Input key to use for encryption + * @param keySize Size of the input key, in bytes. Must be 8, 16, 24, or 32. + * @param alg Symmetric algorithm + * @param mode Symmetric block mode + * @param enc Encrypt/decrypt control + * @return Status + */ +status_t ltc_symmetric_update(LTC_Type *base, + const uint8_t *key, + uint8_t keySize, + ltc_algorithm_t alg, + ltc_mode_symmetric_alg_t mode, + ltc_mode_encrypt_t enc) +{ + return ltc_symmetric_alg_state(base, key, keySize, alg, mode, enc, kLTC_ModeUpdate); +} + +#if defined(FSL_FEATURE_LTC_HAS_GCM) && FSL_FEATURE_LTC_HAS_GCM +/*! + * @brief Initializes the LTC for symmetric encrypt/decrypt operation. Mode is set to FINALIZE. + * + * @param base LTC peripheral base address + * @param key Input key to use for encryption + * @param keySize Size of the input key, in bytes. Must be 8, 16, 24, or 32. + * @param alg Symmetric algorithm + * @param mode Symmetric block mode + * @param enc Encrypt/decrypt control + * @return Status + */ +static status_t ltc_symmetric_final(LTC_Type *base, + const uint8_t *key, + uint8_t keySize, + ltc_algorithm_t alg, + ltc_mode_symmetric_alg_t mode, + ltc_mode_encrypt_t enc) +{ + return ltc_symmetric_alg_state(base, key, keySize, alg, mode, enc, kLTC_ModeFinalize); +} +#endif /* FSL_FEATURE_LTC_HAS_GCM */ + +/*! + * @brief Initializes the LTC for symmetric encrypt/decrypt operation. Mode is set to INITIALIZE. + * + * @param base LTC peripheral base address + * @param key Input key to use for encryption + * @param keySize Size of the input key, in bytes. Must be 8, 16, 24, or 32. + * @param alg Symmetric algorithm + * @param mode Symmetric block mode + * @param enc Encrypt/decrypt control + * @return Status + */ +static status_t ltc_symmetric_init(LTC_Type *base, + const uint8_t *key, + uint8_t keySize, + ltc_algorithm_t alg, + ltc_mode_symmetric_alg_t mode, + ltc_mode_encrypt_t enc) +{ + return ltc_symmetric_alg_state(base, key, keySize, alg, mode, enc, kLTC_ModeInit); +} + +/*! + * @brief Initializes the LTC for symmetric encrypt/decrypt operation. Mode is set to INITIALIZE/FINALIZE. + * + * @param base LTC peripheral base address + * @param key Input key to use for encryption + * @param keySize Size of the input key, in bytes. Must be 8, 16, 24, or 32. + * @param alg Symmetric algorithm + * @param mode Symmetric block mode + * @param enc Encrypt/decrypt control + * @return Status + */ +static status_t ltc_symmetric_init_final(LTC_Type *base, + const uint8_t *key, + uint8_t keySize, + ltc_algorithm_t alg, + ltc_mode_symmetric_alg_t mode, + ltc_mode_encrypt_t enc) +{ + return ltc_symmetric_alg_state(base, key, keySize, alg, mode, enc, kLTC_ModeInitFinal); +} + +void ltc_symmetric_process(LTC_Type *base, uint32_t inSize, const uint8_t **inData, uint8_t **outData) +{ + uint32_t outSize; + uint32_t fifoData; + uint32_t fifoStatus; + + register const uint8_t *in = *inData; + register uint8_t *out = *outData; + + outSize = inSize; + while ((outSize > 0) || (inSize > 0)) + { + fifoStatus = base->FIFOSTA; + + /* Check output FIFO level to make sure there is at least an entry + * ready to be read. */ + if (fifoStatus & LTC_FIFOSTA_OFL_MASK) + { + /* Read data from the output FIFO. */ + if (outSize > 0) + { + if (outSize >= sizeof(uint32_t)) + { + ltc_set_unaligned_from_word(base->OFIFO, out); + out += sizeof(uint32_t); + outSize -= sizeof(uint32_t); + } + else /* (outSize > 0) && (outSize < 4) */ + { + fifoData = base->OFIFO; + ltc_memcpy(out, &fifoData, outSize); + out += outSize; + outSize = 0; + } + } + } + + /* Check input FIFO status to see if it is full. We can + * only write more data when both input and output FIFOs are not at a full state. + * At the same time we are sure Output FIFO is not full because we have poped at least one entry + * by the while loop above. + */ + if (!(fifoStatus & LTC_FIFOSTA_IFF_MASK)) + { + /* Copy data to the input FIFO. + * Data can only be copied one word at a time, so pad the data + * appropriately if it is less than this size. */ + if (inSize > 0) + { + if (inSize >= sizeof(uint32_t)) + { + base->IFIFO = ltc_get_word_from_unaligned(in); + inSize -= sizeof(uint32_t); + in += sizeof(uint32_t); + } + else /* (inSize > 0) && (inSize < 4) */ + { + fifoData = 0; + ltc_memcpy(&fifoData, in, inSize); + base->IFIFO = fifoData; + in += inSize; + inSize = 0; + } + } + } + } + *inData = in; + *outData = out; +} + +/*! + * @brief Processes symmetric data through LTC AES and DES engines. + * + * @param base LTC peripheral base address + * @param inData Input data + * @param inSize Size of input data, in bytes + * @param outData Output data + * @return Status from encrypt/decrypt operation + */ +status_t ltc_symmetric_process_data(LTC_Type *base, const uint8_t *inData, uint32_t inSize, uint8_t *outData) +{ + uint32_t lastSize; + + if ((!inData) || (!outData)) + { + return kStatus_InvalidArgument; + } + + /* Write the data size. */ + base->DS = inSize; + + /* Split the inSize into full 16-byte chunks and last incomplete block due to LTC AES OFIFO errata */ + if (inSize <= 16u) + { + lastSize = inSize; + inSize = 0; + } + else + { + /* Process all 16-byte data chunks. */ + lastSize = inSize % 16u; + if (lastSize == 0) + { + lastSize = 16; + inSize -= 16; + } + else + { + inSize -= lastSize; /* inSize will be rounded down to 16 byte boundary. remaining bytes in lastSize */ + } + } + + ltc_symmetric_process(base, inSize, &inData, &outData); + ltc_symmetric_process(base, lastSize, &inData, &outData); + return ltc_wait(base); +} + +/*! + * @brief Splits the LTC job into sessions. Used for CBC, CTR, CFB, OFB cipher block modes. + * + * @param base LTC peripheral base address + * @param inData Input data to process. + * @param inSize Input size of the input buffer. + * @param outData Output data buffer. + */ +static status_t ltc_process_message_in_sessions(LTC_Type *base, + const uint8_t *inData, + uint32_t inSize, + uint8_t *outData) +{ + uint32_t sz; + status_t retval; + ltc_mode_t modeReg; /* read and write LTC mode register */ + + sz = LTC_FIFO_SZ_MAX_DOWN_ALGN; + modeReg = base->MD; + retval = kStatus_Success; + + while (inSize) + { + if (inSize <= sz) + { + retval = ltc_symmetric_process_data(base, inData, inSize, outData); + if (kStatus_Success != retval) + { + return retval; + } + inSize = 0; + } + else + { + retval = ltc_symmetric_process_data(base, inData, sz, outData); + if (kStatus_Success != retval) + { + return retval; + } + inData += sz; + inSize -= sz; + outData += sz; + base->MD = modeReg; + } + } + return retval; +} + +static void ltc_move_block_to_ififo(LTC_Type *base, const ltc_xcm_block_t *blk, uint32_t num_bytes) +{ + uint32_t i = 0; + uint32_t words; + + words = num_bytes / 4u; + if (num_bytes % 4u) + { + words++; + } + + if (words > 4) + { + words = 4; + } + + while (i < words) + { + if (0U == (base->FIFOSTA & LTC_FIFOSTA_IFF_MASK)) + { + /* Copy data to the input FIFO. */ + base->IFIFO = blk->w[i++]; + } + } +} + +static void ltc_move_to_ififo(LTC_Type *base, const uint8_t *data, uint32_t dataSize) +{ + ltc_xcm_block_t blk; + ltc_xcm_block_t blkZero = {{0x0u, 0x0u, 0x0u, 0x0u}}; + + while (dataSize) + { + if (dataSize > 16u) + { + ltc_memcpy(&blk, data, 16u); + dataSize -= 16u; + data += 16u; + } + else + { + ltc_memcpy(&blk, &blkZero, sizeof(ltc_xcm_block_t)); /* memset blk to zeroes */ + ltc_memcpy(&blk, data, dataSize); + dataSize = 0; + } + ltc_move_block_to_ififo(base, &blk, sizeof(ltc_xcm_block_t)); + } +} + +/*! + * @brief Processes symmetric data through LTC AES in multiple sessions. + * + * Specific for AES CCM and GCM modes as they need to update mode register. + * + * @param base LTC peripheral base address + * @param inData Input data + * @param inSize Size of input data, in bytes + * @param outData Output data + * @param lastAs The LTC Algorithm state to be set sup for last block during message processing in multiple sessions. + * For CCM it is kLTC_ModeFinalize. For GCM it is kLTC_ModeInitFinal. + * @return Status from encrypt/decrypt operation + */ +static status_t ltc_symmetric_process_data_multiple(LTC_Type *base, + const uint8_t *inData, + uint32_t inSize, + uint8_t *outData, + ltc_mode_t modeReg, + ltc_mode_algorithm_state_t lastAs) +{ + uint32_t fifoConsumed; + uint32_t lastSize; + uint32_t sz; + uint32_t max_ltc_fifo_size; + ltc_mode_algorithm_state_t fsm; + status_t status; + + if ((!inData) || (!outData)) + { + return kStatus_InvalidArgument; + } + + if (!((kLTC_ModeFinalize == lastAs) || (kLTC_ModeInitFinal == lastAs))) + { + return kStatus_InvalidArgument; + } + + if (0 == inSize) + { + return kStatus_Success; + } + + if (inSize <= 16u) + { + fsm = lastAs; + lastSize = inSize; + } + else + { + fsm = (ltc_mode_algorithm_state_t)( + modeReg & + LTC_MD_AS_MASK); /* this will be either kLTC_ModeInit or kLTC_ModeUpdate, based on prior processing */ + + /* Process all 16-byte data chunks. */ + lastSize = inSize % 16u; + if (lastSize == 0u) + { + lastSize = 16u; + inSize -= 16u; + } + else + { + inSize -= lastSize; /* inSize will be rounded down to 16 byte boundary. remaining bytes in lastSize */ + } + } + + max_ltc_fifo_size = LTC_FIFO_SZ_MAX_DOWN_ALGN; + fifoConsumed = base->DS; + + while (lastSize) + { + switch (fsm) + { + case kLTC_ModeUpdate: + case kLTC_ModeInit: + while (inSize) + { + if (inSize > (max_ltc_fifo_size - fifoConsumed)) + { + sz = (max_ltc_fifo_size - fifoConsumed); + } + else + { + sz = inSize; + } + base->DS = sz; + ltc_symmetric_process(base, sz, &inData, &outData); + inSize -= sz; + fifoConsumed = 0; + + /* after we completed INITIALIZE job, are there still any data left? */ + if (inSize) + { + fsm = kLTC_ModeUpdate; + status = ltc_wait(base); + if (kStatus_Success != status) + { + return status; + } + modeReg &= ~LTC_MD_AS_MASK; + modeReg |= (uint32_t)fsm; + base->MD = modeReg; + } + else + { + fsm = lastAs; + } + } + break; + + case kLTC_ModeFinalize: + case kLTC_ModeInitFinal: + /* process last block in FINALIZE */ + + status = ltc_wait(base); + if (kStatus_Success != status) + { + return status; + } + + modeReg &= ~LTC_MD_AS_MASK; + modeReg |= (uint32_t)lastAs; + base->MD = modeReg; + + base->DS = lastSize; + ltc_symmetric_process(base, lastSize, &inData, &outData); + lastSize = 0; + break; + + default: + break; + } + } + + status = ltc_wait(base); + return status; +} + +/*! + * @brief Receives MAC compare. + * + * This function is a sub-process of CCM and GCM decryption. + * It compares received MAC with the MAC computed during decryption. + * + * @param base LTC peripheral base address + * @param tag Received MAC. + * @param tagSize Number of bytes in the received MAC. + * @param modeReg LTC Mode Register current value. It is modified and written to LTC Mode Register. + */ +static status_t ltc_aes_received_mac_compare(LTC_Type *base, const uint8_t *tag, uint32_t tagSize, ltc_mode_t modeReg) +{ + ltc_xcm_block_t blk = {{0x0u, 0x0u, 0x0u, 0x0u}}; + + base->CW = kLTC_ClearDataSize; + base->STA = kLTC_StatusDoneIsr; + + modeReg &= ~LTC_MD_AS_MASK; + modeReg |= (uint32_t)kLTC_ModeUpdate | LTC_MD_ICV_TEST_MASK; + base->MD = modeReg; + + base->DS = 0u; + base->ICVS = tagSize; + ltc_memcpy(&blk.b[0], &tag[0], tagSize); + + ltc_move_block_to_ififo(base, &blk, tagSize); + return ltc_wait(base); +} + +/*! + * @brief Processes tag during AES GCM and CCM. + * + * This function is a sub-process of CCM and GCM encryption and decryption. + * For encryption, it writes computed MAC to the output tag. + * For decryption, it compares the received MAC with the computed MAC. + * + * @param base LTC peripheral base address + * @param[in,out] tag Output computed MAC during encryption or Input received MAC during decryption. + * @param tagSize Size of MAC buffer in bytes. + * @param modeReg LTC Mode Register current value. It is checked to read Enc/Dec bit. + * It is modified and written to LTC Mode Register during decryption. + * @param ctx Index to LTC context registers with computed MAC for encryption process. + */ +static status_t ltc_aes_process_tag(LTC_Type *base, uint8_t *tag, uint32_t tagSize, ltc_mode_t modeReg, uint32_t ctx) +{ + status_t status = kStatus_Success; + if (tag) + { + /* For decrypt, compare received MAC with the computed MAC. */ + if (kLTC_ModeDecrypt == (modeReg & LTC_MD_ENC_MASK)) + { + status = ltc_aes_received_mac_compare(base, tag, tagSize, modeReg); + } + else /* FSL_AES_GCM_TYPE_ENCRYPT */ + { + /* For encryption, write the computed and encrypted MAC to user buffer */ + ltc_get_context(base, &tag[0], tagSize, ctx); + } + } + return status; +} + +/******************************************************************************* + * LTC Common code public + ******************************************************************************/ +void LTC_Init(LTC_Type *base) +{ + /* ungate clock */ + CLOCK_EnableClock(kCLOCK_Ltc0); +} + +void LTC_Deinit(LTC_Type *base) +{ + /* gate clock */ + CLOCK_DisableClock(kCLOCK_Ltc0); +} + +#if defined(FSL_FEATURE_LTC_HAS_DPAMS) && FSL_FEATURE_LTC_HAS_DPAMS +void LTC_SetDpaMaskSeed(LTC_Type *base, uint32_t mask) +{ + base->DPAMS = mask; + /* second write as workaround for DPA mask re-seed errata */ + base->DPAMS = mask; +} +#endif /* FSL_FEATURE_LTC_HAS_DPAMS */ + +/******************************************************************************* + * AES Code static + ******************************************************************************/ +static status_t ltc_aes_decrypt_ecb(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t *key, + uint32_t keySize, + ltc_aes_key_t keyType) +{ + status_t retval; + + /* Initialize algorithm state. */ + ltc_symmetric_update(base, key, keySize, kLTC_AlgorithmAES, kLTC_ModeECB, kLTC_ModeDecrypt); + + /* set DK bit in the LTC Mode Register AAI field for directly loaded decrypt keys */ + if (keyType == kLTC_DecryptKey) + { + base->MD |= (1U << kLTC_ModeRegBitShiftDK); + } + + /* Process data and return status. */ + retval = ltc_process_message_in_sessions(base, &ciphertext[0], size, &plaintext[0]); + return retval; +} + +/******************************************************************************* + * AES Code public + ******************************************************************************/ +status_t LTC_AES_GenerateDecryptKey(LTC_Type *base, const uint8_t *encryptKey, uint8_t *decryptKey, uint32_t keySize) +{ + uint8_t plaintext[LTC_AES_BLOCK_SIZE]; + uint8_t ciphertext[LTC_AES_BLOCK_SIZE]; + status_t status; + + if (!ltc_check_key_size(keySize)) + { + return kStatus_InvalidArgument; + } + + /* ECB decrypt with encrypt key will convert the key in LTC context into decrypt form of the key */ + status = ltc_aes_decrypt_ecb(base, ciphertext, plaintext, LTC_AES_BLOCK_SIZE, encryptKey, keySize, kLTC_EncryptKey); + /* now there is decrypt form of the key in the LTC context, so take it */ + ltc_get_key(base, decryptKey, keySize); + + ltc_clear_all(base, false); + + return status; +} + +status_t LTC_AES_EncryptEcb( + LTC_Type *base, const uint8_t *plaintext, uint8_t *ciphertext, uint32_t size, const uint8_t *key, uint32_t keySize) +{ + status_t retval; + + if (!ltc_check_key_size(keySize)) + { + return kStatus_InvalidArgument; + } + /* ECB mode, size must be 16-byte multiple */ + if ((size < 16u) || (size % 16u)) + { + return kStatus_InvalidArgument; + } + + /* Initialize algorithm state. */ + ltc_symmetric_update(base, key, keySize, kLTC_AlgorithmAES, kLTC_ModeECB, kLTC_ModeEncrypt); + + /* Process data and return status. */ + retval = ltc_process_message_in_sessions(base, &plaintext[0], size, &ciphertext[0]); + ltc_clear_all(base, false); + return retval; +} + +status_t LTC_AES_DecryptEcb(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t *key, + uint32_t keySize, + ltc_aes_key_t keyType) +{ + status_t status; + + if (!ltc_check_key_size(keySize)) + { + return kStatus_InvalidArgument; + } + /* ECB mode, size must be 16-byte multiple */ + if ((size < 16u) || (size % 16u)) + { + return kStatus_InvalidArgument; + } + + status = ltc_aes_decrypt_ecb(base, ciphertext, plaintext, size, key, keySize, keyType); + ltc_clear_all(base, false); + return status; +} + +status_t LTC_AES_EncryptCbc(LTC_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_AES_IV_SIZE], + const uint8_t *key, + uint32_t keySize) +{ + status_t retval; + + if (!ltc_check_key_size(keySize)) + { + return kStatus_InvalidArgument; + } + + /* CBC mode, size must be 16-byte multiple */ + if ((size < 16u) || (size % 16u)) + { + return kStatus_InvalidArgument; + } + + /* Initialize algorithm state. */ + ltc_symmetric_update(base, key, keySize, kLTC_AlgorithmAES, kLTC_ModeCBC, kLTC_ModeEncrypt); + + /* Write IV data to the context register. */ + ltc_set_context(base, &iv[0], LTC_AES_IV_SIZE, 0); + + /* Process data and return status. */ + retval = ltc_process_message_in_sessions(base, &plaintext[0], size, &ciphertext[0]); + ltc_clear_all(base, false); + return retval; +} + +status_t LTC_AES_DecryptCbc(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_AES_IV_SIZE], + const uint8_t *key, + uint32_t keySize, + ltc_aes_key_t keyType) +{ + status_t retval; + + if (!ltc_check_key_size(keySize)) + { + return kStatus_InvalidArgument; + } + /* CBC mode, size must be 16-byte multiple */ + if ((size < 16u) || (size % 16u)) + { + return kStatus_InvalidArgument; + } + + /* set DK bit in the LTC Mode Register AAI field for directly loaded decrypt keys */ + if (keyType == kLTC_DecryptKey) + { + base->MD |= (1U << kLTC_ModeRegBitShiftDK); + } + + /* Initialize algorithm state. */ + ltc_symmetric_update(base, key, keySize, kLTC_AlgorithmAES, kLTC_ModeCBC, kLTC_ModeDecrypt); + + /* Write IV data to the context register. */ + ltc_set_context(base, &iv[0], LTC_AES_IV_SIZE, 0); + + /* Process data and return status. */ + retval = ltc_process_message_in_sessions(base, &ciphertext[0], size, &plaintext[0]); + ltc_clear_all(base, false); + return retval; +} + +status_t LTC_AES_CryptCtr(LTC_Type *base, + const uint8_t *input, + uint8_t *output, + uint32_t size, + uint8_t counter[LTC_AES_BLOCK_SIZE], + const uint8_t *key, + uint32_t keySize, + uint8_t counterlast[LTC_AES_BLOCK_SIZE], + uint32_t *szLeft) +{ + status_t retval; + uint32_t lastSize; + + if (!ltc_check_key_size(keySize)) + { + return kStatus_InvalidArgument; + } + + lastSize = 0U; + if (counterlast != NULL) + { + /* Split the size into full 16-byte chunks and last incomplete block due to LTC AES OFIFO errata */ + if (size <= 16U) + { + lastSize = size; + size = 0U; + } + else + { + /* Process all 16-byte data chunks. */ + lastSize = size % 16U; + if (lastSize == 0U) + { + lastSize = 16U; + size -= 16U; + } + else + { + size -= lastSize; /* size will be rounded down to 16 byte boundary. remaining bytes in lastSize */ + } + } + } + + /* Initialize algorithm state. */ + ltc_symmetric_update(base, key, keySize, kLTC_AlgorithmAES, kLTC_ModeCTR, kLTC_ModeEncrypt); + + /* Write initial counter data to the context register. + * NOTE the counter values start at 4-bytes offset into the context. */ + ltc_set_context(base, &counter[0], 16U, 4U); + + /* Process data and return status. */ + retval = ltc_process_message_in_sessions(base, input, size, output); + if (kStatus_Success != retval) + { + return retval; + } + + input += size; + output += size; + + if ((counterlast != NULL) && lastSize) + { + uint8_t zeroes[16] = {0}; + ltc_mode_t modeReg; + + modeReg = (uint32_t)kLTC_AlgorithmAES | (uint32_t)kLTC_ModeCTR | (uint32_t)kLTC_ModeEncrypt; + /* Write the mode register to the hardware. */ + base->MD = modeReg | (uint32_t)kLTC_ModeFinalize; + + /* context is re-used (CTRi) */ + + /* Process data and return status. */ + retval = ltc_symmetric_process_data(base, input, lastSize, output); + if (kStatus_Success != retval) + { + return retval; + } + if (szLeft) + { + *szLeft = 16U - lastSize; + } + + /* Initialize algorithm state. */ + base->MD = modeReg | (uint32_t)kLTC_ModeUpdate; + + /* context is re-used (CTRi) */ + + /* Process data and return status. */ + retval = ltc_symmetric_process_data(base, zeroes, 16U, counterlast); + } + ltc_get_context(base, &counter[0], 16U, 4U); + ltc_clear_all(base, false); + return retval; +} + +#if defined(FSL_FEATURE_LTC_HAS_GCM) && FSL_FEATURE_LTC_HAS_GCM +/******************************************************************************* + * GCM Code static + ******************************************************************************/ +static status_t ltc_aes_gcm_check_input_args(LTC_Type *base, + const uint8_t *src, + const uint8_t *iv, + const uint8_t *aad, + const uint8_t *key, + uint8_t *dst, + uint32_t inputSize, + uint32_t ivSize, + uint32_t aadSize, + uint32_t keySize, + uint32_t tagSize) +{ + if (!base) + { + return kStatus_InvalidArgument; + } + + /* tag can be NULL to skip tag processing */ + if ((!key) || (ivSize && (!iv)) || (aadSize && (!aad)) || (inputSize && ((!src) || (!dst)))) + { + return kStatus_InvalidArgument; + } + + /* octet length of tag (tagSize) must be element of 4,8,12,13,14,15,16 */ + if (((tagSize > 16u) || (tagSize < 12u)) && (tagSize != 4u) && (tagSize != 8u)) + { + return kStatus_InvalidArgument; + } + + /* check if keySize is supported */ + if (!ltc_check_key_size(keySize)) + { + return kStatus_InvalidArgument; + } + + /* no IV AAD DATA makes no sense */ + if (0 == (inputSize + ivSize + aadSize)) + { + return kStatus_InvalidArgument; + } + + return kStatus_Success; +} + +/*! + * @brief Process Wrapper for void (*pfunc)(LTC_Type*, uint32_t, bool). Sets IV Size register. + */ +static void ivsize_next(LTC_Type *base, uint32_t ivSize, bool iv_only) +{ + base->IVSZ = LTC_IVSZ_IL(iv_only) | ((ivSize)<C_DS_DS_MASK); +} + +/*! + * @brief Process Wrapper for void (*pfunc)(LTC_Type*, uint32_t, bool). Sets AAD Size register. + */ +static void aadsize_next(LTC_Type *base, uint32_t aadSize, bool aad_only) +{ + base->AADSZ = LTC_AADSZ_AL(aad_only) | ((aadSize)<C_DS_DS_MASK); +} + +/*! + * @brief Process IV or AAD string in multi-session. + * + * @param base LTC peripheral base address + * @param iv IV or AAD data + * @param ivSize Size in bytes of IV or AAD data + * @param modeReg LTC peripheral Mode register value + * @param iv_only IV only or AAD only flag + * @param type selects between IV or AAD + */ +static status_t ltc_aes_gcm_process_iv_aad( + LTC_Type *base, const uint8_t *iv, uint32_t ivSize, ltc_mode_t modeReg, bool iv_only, int type, ltc_mode_t modeLast) +{ + uint32_t sz; + status_t retval; + void (*next_size_func)(LTC_Type *ltcBase, uint32_t nextSize, bool authOnly); + + if ((NULL == iv) || (ivSize == 0)) + { + return kStatus_InvalidArgument; + } + + sz = LTC_FIFO_SZ_MAX_DOWN_ALGN; + next_size_func = type == LTC_AES_GCM_TYPE_AAD ? aadsize_next : ivsize_next; + + while (ivSize) + { + if (ivSize < sz) + { + modeReg &= ~LTC_MD_AS_MASK; + modeReg |= modeLast; + base->MD = modeReg; + next_size_func(base, ivSize, iv_only); + ltc_move_to_ififo(base, iv, ivSize); + ivSize = 0; + } + else + { + /* set algorithm state to UPDATE */ + modeReg &= ~LTC_MD_AS_MASK; + modeReg |= kLTC_ModeUpdate; + base->MD = modeReg; + + next_size_func(base, (uint16_t)sz, true); + ltc_move_to_ififo(base, iv, sz); + ivSize -= sz; + iv += sz; + } + + retval = ltc_wait(base); + if (kStatus_Success != retval) + { + return retval; + } + } /* end while */ + return kStatus_Success; +} + +static status_t ltc_aes_gcm_process(LTC_Type *base, + ltc_mode_encrypt_t encryptMode, + const uint8_t *src, + uint32_t inputSize, + const uint8_t *iv, + uint32_t ivSize, + const uint8_t *aad, + uint32_t aadSize, + const uint8_t *key, + uint32_t keySize, + uint8_t *dst, + uint8_t *tag, + uint32_t tagSize) +{ + status_t retval; /* return value */ + uint32_t max_ltc_fifo_sz; /* maximum data size that we can put to LTC FIFO in one session. 12-bit limit. */ + ltc_mode_t modeReg; /* read and write LTC mode register */ + + bool single_ses_proc_all; /* iv, aad and src data can be processed in one session */ + bool iv_only; + bool aad_only; + + retval = ltc_aes_gcm_check_input_args(base, src, iv, aad, key, dst, inputSize, ivSize, aadSize, keySize, tagSize); + + /* API input validation */ + if (kStatus_Success != retval) + { + return retval; + } + + max_ltc_fifo_sz = LTC_DS_DS_MASK; /* 12-bit field limit */ + + /* + * Write value to LTC AADSIZE (rounded up to next 16 byte boundary) + * plus the write value to LTC IV (rounded up to next 16 byte boundary) + * plus the inputSize. If the result is less than max_ltc_fifo_sz + * then all can be processed in one session FINALIZE. + * Otherwise, we have to split into multiple session, going through UPDATE(s), INITIALIZE, UPDATE(s) and FINALIZE. + */ + single_ses_proc_all = + (((aadSize + 15u) & 0xfffffff0u) + ((ivSize + 15u) & 0xfffffff0u) + inputSize) <= max_ltc_fifo_sz; + + /* setup key, algorithm and set the alg.state */ + if (single_ses_proc_all) + { + ltc_symmetric_final(base, key, keySize, kLTC_AlgorithmAES, kLTC_ModeGCM, encryptMode); + modeReg = base->MD; + + iv_only = (aadSize == 0) && (inputSize == 0); + aad_only = (inputSize == 0); + + /* DS_MASK here is not a bug. IV size field can be written with more than 4-bits, + * as the IVSZ write value, aligned to next 16 bytes boundary, is written also to the Data Size. + * For example, I can write 22 to IVSZ, 32 will be written to Data Size and IVSZ will have value 6, which is 22 + * mod 16. + */ + base->IVSZ = LTC_IVSZ_IL(iv_only) | ((ivSize)<C_DS_DS_MASK); + ltc_move_to_ififo(base, iv, ivSize); + if (iv_only && ivSize) + { + retval = ltc_wait(base); + if (kStatus_Success != retval) + { + return retval; + } + } + base->AADSZ = LTC_AADSZ_AL(aad_only) | ((aadSize)<C_DS_DS_MASK); + ltc_move_to_ififo(base, aad, aadSize); + if (aad_only && aadSize) + { + retval = ltc_wait(base); + if (kStatus_Success != retval) + { + return retval; + } + } + + if (inputSize) + { + /* Workaround for the LTC Data Size register update errata TKT261180 */ + while (16U < base->DS) + { + } + + ltc_symmetric_process_data(base, &src[0], inputSize, &dst[0]); + } + } + else + { + ltc_symmetric_init(base, key, keySize, kLTC_AlgorithmAES, kLTC_ModeGCM, encryptMode); + modeReg = base->MD; + + /* process IV */ + if (ivSize) + { + /* last chunk of IV is always INITIALIZE (for GHASH to occur) */ + retval = ltc_aes_gcm_process_iv_aad(base, iv, ivSize, modeReg, true, LTC_AES_GCM_TYPE_IV, kLTC_ModeInit); + if (kStatus_Success != retval) + { + return retval; + } + } + + /* process AAD */ + if (aadSize) + { + /* AS mode to process last chunk of AAD. it differs if we are in GMAC or GCM */ + ltc_mode_t lastModeReg; + if (0 == inputSize) + { + /* if there is no DATA, set mode to compute final MAC. this is GMAC mode */ + lastModeReg = kLTC_ModeInitFinal; + } + else + { + /* there are confidential DATA. so process last chunk of AAD in UPDATE mode */ + lastModeReg = kLTC_ModeUpdate; + } + retval = ltc_aes_gcm_process_iv_aad(base, aad, aadSize, modeReg, true, LTC_AES_GCM_TYPE_AAD, lastModeReg); + if (kStatus_Success != retval) + { + return retval; + } + } + + /* there are DATA. */ + if (inputSize) + { + /* set algorithm state to UPDATE */ + modeReg &= ~LTC_MD_AS_MASK; + modeReg |= kLTC_ModeUpdate; + base->MD = modeReg; + retval = + ltc_symmetric_process_data_multiple(base, &src[0], inputSize, &dst[0], modeReg, kLTC_ModeInitFinal); + } + } + if (kStatus_Success != retval) + { + return retval; + } + retval = ltc_aes_process_tag(base, tag, tagSize, modeReg, LTC_GCM_TAG_IDX); + return retval; +} + +/******************************************************************************* + * GCM Code public + ******************************************************************************/ +status_t LTC_AES_EncryptTagGcm(LTC_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t *iv, + uint32_t ivSize, + const uint8_t *aad, + uint32_t aadSize, + const uint8_t *key, + uint32_t keySize, + uint8_t *tag, + uint32_t tagSize) +{ + status_t status; + + status = ltc_aes_gcm_process(base, kLTC_ModeEncrypt, plaintext, size, iv, ivSize, aad, aadSize, key, keySize, + ciphertext, tag, tagSize); + + ltc_clear_all(base, false); + return status; +} + +status_t LTC_AES_DecryptTagGcm(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t *iv, + uint32_t ivSize, + const uint8_t *aad, + uint32_t aadSize, + const uint8_t *key, + uint32_t keySize, + const uint8_t *tag, + uint32_t tagSize) +{ + uint8_t temp_tag[16] = {0}; /* max. octet length of Integrity Check Value ICV (tag) is 16 */ + uint8_t *tag_ptr; + status_t status; + + tag_ptr = NULL; + if (tag) + { + ltc_memcpy(temp_tag, tag, tagSize); + tag_ptr = &temp_tag[0]; + } + status = ltc_aes_gcm_process(base, kLTC_ModeDecrypt, ciphertext, size, iv, ivSize, aad, aadSize, key, keySize, + plaintext, tag_ptr, tagSize); + + ltc_clear_all(base, false); + return status; +} +#endif /* FSL_FEATURE_LTC_HAS_GCM */ + +/******************************************************************************* + * CCM Code static + ******************************************************************************/ +static status_t ltc_aes_ccm_check_input_args(LTC_Type *base, + const uint8_t *src, + const uint8_t *iv, + const uint8_t *key, + uint8_t *dst, + uint32_t ivSize, + uint32_t aadSize, + uint32_t keySize, + uint32_t tagSize) +{ + if (!base) + { + return kStatus_InvalidArgument; + } + + /* tag can be NULL to skip tag processing */ + if ((!src) || (!iv) || (!key) || (!dst)) + { + return kStatus_InvalidArgument; + } + + /* size of Nonce (ivSize) must be element of 7,8,9,10,11,12,13 */ + if ((ivSize < 7u) || (ivSize > 13u)) + { + return kStatus_InvalidArgument; + } + /* octet length of MAC (tagSize) must be element of 4,6,8,10,12,14,16 for tag processing or zero to skip tag + * processing */ + if (((tagSize > 0) && (tagSize < 4u)) || (tagSize > 16u) || (tagSize & 1u)) + { + return kStatus_InvalidArgument; + } + + /* check if keySize is supported */ + if (!ltc_check_key_size(keySize)) + { + return kStatus_InvalidArgument; + } + + /* LTC does not support more AAD than this */ + if (aadSize >= 65280u) + { + return kStatus_InvalidArgument; + } + return kStatus_Success; +} + +static uint32_t swap_bytes(uint32_t in) +{ + return (((in & 0x000000ffu) << 24) | ((in & 0x0000ff00u) << 8) | ((in & 0x00ff0000u) >> 8) | + ((in & 0xff000000u) >> 24)); +} + +static void ltc_aes_ccm_context_init( + LTC_Type *base, uint32_t inputSize, const uint8_t *iv, uint32_t ivSize, uint32_t aadSize, uint32_t tagSize) +{ + ltc_xcm_block_t blk; + ltc_xcm_block_t blkZero = {{0x0u, 0x0u, 0x0u, 0x0u}}; + + int q; /* octet length of binary representation of the octet length of the payload. computed as (15 - n), where n is + length of nonce(=ivSize) */ + uint8_t flags; /* flags field in B0 and CTR0 */ + + /* compute B0 */ + ltc_memcpy(&blk, &blkZero, sizeof(blk)); + /* tagSize - size of output MAC */ + q = 15 - ivSize; + flags = (uint8_t)(8 * ((tagSize - 2) / 2) + q - 1); /* 8*M' + L' */ + if (aadSize) + { + flags |= 0x40; /* Adata */ + } + blk.b[0] = flags; /* flags field */ + blk.w[3] = swap_bytes(inputSize); /* message size, most significant byte first */ + ltc_memcpy(&blk.b[1], iv, ivSize); /* nonce field */ + + /* Write B0 data to the context register. + */ + ltc_set_context(base, &blk.b[0], 16, 0); + + /* Write CTR0 to the context register. + */ + ltc_memcpy(&blk, &blkZero, sizeof(blk)); /* ctr(0) field = zero */ + blk.b[0] = q - 1; /* flags field */ + ltc_memcpy(&blk.b[1], iv, ivSize); /* nonce field */ + ltc_set_context(base, &blk.b[0], 16, 4); +} + +static status_t ltc_aes_ccm_process_aad( + LTC_Type *base, uint32_t inputSize, const uint8_t *aad, uint32_t aadSize, ltc_mode_t *modeReg) +{ + ltc_xcm_block_t blk = {{0x0u, 0x0u, 0x0u, 0x0u}}; + uint32_t swapped; /* holds byte swap of uint32_t */ + status_t retval; + + if (aadSize) + { + bool aad_only; + bool aad_single_session; + + uint32_t sz = 0; + + aad_only = inputSize == 0u; + aad_single_session = (((aadSize + 2u) + 15u) & 0xfffffff0u) <= LTC_FIFO_SZ_MAX_DOWN_ALGN; + + /* limit by CCM spec: 2^16 - 2^8 = 65280 */ + + /* encoding is two octets, msbyte first */ + swapped = swap_bytes(aadSize); + ltc_memcpy(&blk.b[0], ((uint8_t *)&swapped) + sizeof(uint16_t), sizeof(uint16_t)); + + sz = aadSize > 14u ? 14u : aadSize; /* limit aad to the end of 16 bytes blk */ + ltc_memcpy(&blk.b[2], aad, sz); /* fill B1 with aad */ + + if (aad_single_session) + { + base->AADSZ = LTC_AADSZ_AL(aad_only) | ((aadSize + 2U) & LTC_DS_DS_MASK); + /* move first AAD block (16 bytes block B1) to FIFO */ + ltc_move_block_to_ififo(base, &blk, sizeof(blk)); + } + else + { + base->AADSZ = LTC_AADSZ_AL(true) | (16U); + /* move first AAD block (16 bytes block B1) to FIFO */ + ltc_move_block_to_ififo(base, &blk, sizeof(blk)); + } + + /* track consumed AAD. sz bytes have been moved to fifo. */ + aadSize -= sz; + aad += sz; + + if (aad_single_session) + { + /* move remaining AAD to FIFO, then return, to continue with MDATA */ + ltc_move_to_ififo(base, aad, aadSize); + } + else if (aadSize == 0u) + { + retval = ltc_wait(base); + if (kStatus_Success != retval) + { + return retval; + } + } + else + { + while (aadSize) + { + retval = ltc_wait(base); + if (kStatus_Success != retval) + { + return retval; + } + + *modeReg &= ~LTC_MD_AS_MASK; + *modeReg |= (uint32_t)kLTC_ModeUpdate; + base->MD = *modeReg; + + sz = LTC_FIFO_SZ_MAX_DOWN_ALGN; + if (aadSize < sz) + { + base->AADSZ = LTC_AADSZ_AL(aad_only) | (aadSize & LTC_DS_DS_MASK); + ltc_move_to_ififo(base, aad, aadSize); + aadSize = 0; + } + else + { + base->AADSZ = LTC_AADSZ_AL(true) | (sz & LTC_DS_DS_MASK); + ltc_move_to_ififo(base, aad, sz); + aadSize -= sz; + aad += sz; + } + } /* end while */ + } /* end else */ + } /* end if */ + return kStatus_Success; +} + +static status_t ltc_aes_ccm_process(LTC_Type *base, + ltc_mode_encrypt_t encryptMode, + const uint8_t *src, + uint32_t inputSize, + const uint8_t *iv, + uint32_t ivSize, + const uint8_t *aad, + uint32_t aadSize, + const uint8_t *key, + uint32_t keySize, + uint8_t *dst, + uint8_t *tag, + uint32_t tagSize) +{ + status_t retval; /* return value */ + uint32_t max_ltc_fifo_sz; /* maximum data size that we can put to LTC FIFO in one session. 12-bit limit. */ + ltc_mode_t modeReg; /* read and write LTC mode register */ + + bool single_ses_proc_all; /* aad and src data can be processed in one session */ + + retval = ltc_aes_ccm_check_input_args(base, src, iv, key, dst, ivSize, aadSize, keySize, tagSize); + + /* API input validation */ + if (kStatus_Success != retval) + { + return retval; + } + + max_ltc_fifo_sz = LTC_DS_DS_MASK; /* 12-bit field limit */ + + /* Write value to LTC AADSIZE will be (aadSize+2) value. + * The value will be rounded up to next 16 byte boundary and added to Data Size register. + * We then add inputSize to Data Size register. If the resulting Data Size is less than max_ltc_fifo_sz + * then all can be processed in one session INITIALIZE/FINALIZE. + * Otherwise, we have to split into multiple session, going through INITIALIZE, UPDATE (if required) and FINALIZE. + */ + single_ses_proc_all = ((((aadSize + 2) + 15u) & 0xfffffff0u) + inputSize) <= max_ltc_fifo_sz; + + /* setup key, algorithm and set the alg.state to INITIALIZE */ + if (single_ses_proc_all) + { + ltc_symmetric_init_final(base, key, keySize, kLTC_AlgorithmAES, kLTC_ModeCCM, encryptMode); + } + else + { + ltc_symmetric_init(base, key, keySize, kLTC_AlgorithmAES, kLTC_ModeCCM, encryptMode); + } + modeReg = base->MD; + + /* Initialize LTC context for AES CCM: block B0 and initial counter CTR0 */ + ltc_aes_ccm_context_init(base, inputSize, iv, ivSize, aadSize, tagSize); + + /* Process additional authentication data, if there are any. + * Need to split the job into individual sessions of up to 4096 bytes, due to LTC IFIFO data size limit. + */ + retval = ltc_aes_ccm_process_aad(base, inputSize, aad, aadSize, &modeReg); + if (kStatus_Success != retval) + { + return retval; + } + + /* Workaround for the LTC Data Size register update errata TKT261180 */ + if (inputSize) + { + while (16u < base->DS) + { + } + } + + /* Process message */ + if (single_ses_proc_all) + { + retval = ltc_symmetric_process_data(base, &src[0], inputSize, &dst[0]); + } + else + { + retval = ltc_symmetric_process_data_multiple(base, &src[0], inputSize, &dst[0], modeReg, kLTC_ModeFinalize); + } + if (kStatus_Success != retval) + { + return retval; + } + retval = ltc_aes_process_tag(base, tag, tagSize, modeReg, LTC_CCM_TAG_IDX); + return retval; +} + +/******************************************************************************* + * CCM Code public + ******************************************************************************/ +status_t LTC_AES_EncryptTagCcm(LTC_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t *iv, + uint32_t ivSize, + const uint8_t *aad, + uint32_t aadSize, + const uint8_t *key, + uint32_t keySize, + uint8_t *tag, + uint32_t tagSize) +{ + status_t status; + status = ltc_aes_ccm_process(base, kLTC_ModeEncrypt, plaintext, size, iv, ivSize, aad, aadSize, key, keySize, + ciphertext, tag, tagSize); + + ltc_clear_all(base, false); + return status; +} + +status_t LTC_AES_DecryptTagCcm(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t *iv, + uint32_t ivSize, + const uint8_t *aad, + uint32_t aadSize, + const uint8_t *key, + uint32_t keySize, + const uint8_t *tag, + uint32_t tagSize) +{ + uint8_t temp_tag[16] = {0}; /* max. octet length of MAC (tag) is 16 */ + uint8_t *tag_ptr; + status_t status; + + tag_ptr = NULL; + if (tag) + { + ltc_memcpy(temp_tag, tag, tagSize); + tag_ptr = &temp_tag[0]; + } + + status = ltc_aes_ccm_process(base, kLTC_ModeDecrypt, ciphertext, size, iv, ivSize, aad, aadSize, key, keySize, + plaintext, tag_ptr, tagSize); + + ltc_clear_all(base, false); + return status; +} + +#if defined(FSL_FEATURE_LTC_HAS_DES) && FSL_FEATURE_LTC_HAS_DES +/******************************************************************************* + * DES / 3DES Code static + ******************************************************************************/ +static status_t ltc_des_process(LTC_Type *base, + const uint8_t *input, + uint8_t *output, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key[LTC_DES_KEY_SIZE], + ltc_mode_symmetric_alg_t modeAs, + ltc_mode_encrypt_t modeEnc) +{ + status_t retval; + + /* all but OFB, size must be 8-byte multiple */ + if ((modeAs != kLTC_ModeOFB) && ((size < 8u) || (size % 8u))) + { + return kStatus_InvalidArgument; + } + + /* Initialize algorithm state. */ + ltc_symmetric_update(base, &key[0], LTC_DES_KEY_SIZE, kLTC_AlgorithmDES, modeAs, modeEnc); + + if ((modeAs != kLTC_ModeECB)) + { + ltc_set_context(base, iv, LTC_DES_IV_SIZE, 0); + } + + /* Process data and return status. */ + retval = ltc_process_message_in_sessions(base, input, size, output); + ltc_clear_all(base, false); + return retval; +} + +status_t ltc_3des_check_input_args(ltc_mode_symmetric_alg_t modeAs, + uint32_t size, + const uint8_t *key1, + const uint8_t *key2) +{ + /* all but OFB, size must be 8-byte multiple */ + if ((modeAs != kLTC_ModeOFB) && ((size < 8u) || (size % 8u))) + { + return kStatus_InvalidArgument; + } + + if ((key1 == NULL) || (key2 == NULL)) + { + return kStatus_InvalidArgument; + } + return kStatus_Success; +} + +static status_t ltc_3des_process(LTC_Type *base, + const uint8_t *input, + uint8_t *output, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE], + ltc_mode_symmetric_alg_t modeAs, + ltc_mode_encrypt_t modeEnc) +{ + status_t retval; + uint8_t key[LTC_DES_KEY_SIZE * 3]; + uint8_t keySize = LTC_DES_KEY_SIZE * 2; + + retval = ltc_3des_check_input_args(modeAs, size, key1, key2); + if (kStatus_Success != retval) + { + return retval; + } + + ltc_memcpy(&key[0], &key1[0], LTC_DES_KEY_SIZE); + ltc_memcpy(&key[LTC_DES_KEY_SIZE], &key2[0], LTC_DES_KEY_SIZE); + if (key3) + { + ltc_memcpy(&key[LTC_DES_KEY_SIZE * 2], &key3[0], LTC_DES_KEY_SIZE); + keySize = sizeof(key); + } + + /* Initialize algorithm state. */ + ltc_symmetric_update(base, &key[0], keySize, kLTC_Algorithm3DES, modeAs, modeEnc); + + if ((modeAs != kLTC_ModeECB)) + { + ltc_set_context(base, iv, LTC_DES_IV_SIZE, 0); + } + + /* Process data and return status. */ + retval = ltc_process_message_in_sessions(base, input, size, output); + ltc_clear_all(base, false); + return retval; +} +/******************************************************************************* + * DES / 3DES Code public + ******************************************************************************/ +status_t LTC_DES_EncryptEcb( + LTC_Type *base, const uint8_t *plaintext, uint8_t *ciphertext, uint32_t size, const uint8_t key[LTC_DES_KEY_SIZE]) +{ + return ltc_des_process(base, plaintext, ciphertext, size, NULL, key, kLTC_ModeECB, kLTC_ModeEncrypt); +} + +status_t LTC_DES_DecryptEcb( + LTC_Type *base, const uint8_t *ciphertext, uint8_t *plaintext, uint32_t size, const uint8_t key[LTC_DES_KEY_SIZE]) +{ + return ltc_des_process(base, ciphertext, plaintext, size, NULL, key, kLTC_ModeECB, kLTC_ModeDecrypt); +} + +status_t LTC_DES_EncryptCbc(LTC_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key[LTC_DES_KEY_SIZE]) +{ + return ltc_des_process(base, plaintext, ciphertext, size, iv, key, kLTC_ModeCBC, kLTC_ModeEncrypt); +} + +status_t LTC_DES_DecryptCbc(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key[LTC_DES_KEY_SIZE]) +{ + return ltc_des_process(base, ciphertext, plaintext, size, iv, key, kLTC_ModeCBC, kLTC_ModeDecrypt); +} + +status_t LTC_DES_EncryptCfb(LTC_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key[LTC_DES_KEY_SIZE]) +{ + return ltc_des_process(base, plaintext, ciphertext, size, iv, key, kLTC_ModeCFB, kLTC_ModeEncrypt); +} + +status_t LTC_DES_DecryptCfb(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key[LTC_DES_KEY_SIZE]) +{ + return ltc_des_process(base, ciphertext, plaintext, size, iv, key, kLTC_ModeCFB, kLTC_ModeDecrypt); +} + +status_t LTC_DES_EncryptOfb(LTC_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key[LTC_DES_KEY_SIZE]) +{ + return ltc_des_process(base, plaintext, ciphertext, size, iv, key, kLTC_ModeOFB, kLTC_ModeEncrypt); +} + +status_t LTC_DES_DecryptOfb(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key[LTC_DES_KEY_SIZE]) +{ + return ltc_des_process(base, ciphertext, plaintext, size, iv, key, kLTC_ModeOFB, kLTC_ModeDecrypt); +} + +status_t LTC_DES2_EncryptEcb(LTC_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process(base, plaintext, ciphertext, size, NULL, key1, key2, NULL, kLTC_ModeECB, kLTC_ModeEncrypt); +} + +status_t LTC_DES3_EncryptEcb(LTC_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process(base, plaintext, ciphertext, size, NULL, key1, key2, key3, kLTC_ModeECB, kLTC_ModeEncrypt); +} + +status_t LTC_DES2_DecryptEcb(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process(base, ciphertext, plaintext, size, NULL, key1, key2, NULL, kLTC_ModeECB, kLTC_ModeDecrypt); +} + +status_t LTC_DES3_DecryptEcb(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process(base, ciphertext, plaintext, size, NULL, key1, key2, key3, kLTC_ModeECB, kLTC_ModeDecrypt); +} + +status_t LTC_DES2_EncryptCbc(LTC_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process(base, plaintext, ciphertext, size, iv, key1, key2, NULL, kLTC_ModeCBC, kLTC_ModeEncrypt); +} + +status_t LTC_DES3_EncryptCbc(LTC_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process(base, plaintext, ciphertext, size, iv, key1, key2, key3, kLTC_ModeCBC, kLTC_ModeEncrypt); +} + +status_t LTC_DES2_DecryptCbc(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process(base, ciphertext, plaintext, size, iv, key1, key2, NULL, kLTC_ModeCBC, kLTC_ModeDecrypt); +} + +status_t LTC_DES3_DecryptCbc(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process(base, ciphertext, plaintext, size, iv, key1, key2, key3, kLTC_ModeCBC, kLTC_ModeDecrypt); +} + +status_t LTC_DES2_EncryptCfb(LTC_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process(base, plaintext, ciphertext, size, iv, key1, key2, NULL, kLTC_ModeCFB, kLTC_ModeEncrypt); +} + +status_t LTC_DES3_EncryptCfb(LTC_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process(base, plaintext, ciphertext, size, iv, key1, key2, key3, kLTC_ModeCFB, kLTC_ModeEncrypt); +} + +status_t LTC_DES2_DecryptCfb(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process(base, ciphertext, plaintext, size, iv, key1, key2, NULL, kLTC_ModeCFB, kLTC_ModeDecrypt); +} + +status_t LTC_DES3_DecryptCfb(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process(base, ciphertext, plaintext, size, iv, key1, key2, key3, kLTC_ModeCFB, kLTC_ModeDecrypt); +} + +status_t LTC_DES2_EncryptOfb(LTC_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process(base, plaintext, ciphertext, size, iv, key1, key2, NULL, kLTC_ModeOFB, kLTC_ModeEncrypt); +} + +status_t LTC_DES3_EncryptOfb(LTC_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process(base, plaintext, ciphertext, size, iv, key1, key2, key3, kLTC_ModeOFB, kLTC_ModeEncrypt); +} + +status_t LTC_DES2_DecryptOfb(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process(base, ciphertext, plaintext, size, iv, key1, key2, NULL, kLTC_ModeOFB, kLTC_ModeDecrypt); +} + +status_t LTC_DES3_DecryptOfb(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process(base, ciphertext, plaintext, size, iv, key1, key2, key3, kLTC_ModeOFB, kLTC_ModeDecrypt); +} +#endif /* FSL_FEATURE_LTC_HAS_DES */ + +/******************************************************************************* + * HASH Definitions + ******************************************************************************/ +#if defined(FSL_FEATURE_LTC_HAS_SHA) && FSL_FEATURE_LTC_HAS_SHA +#define LTC_SHA_BLOCK_SIZE 64 /*!< SHA-1, SHA-224 & SHA-256 block size */ +#define LTC_HASH_BLOCK_SIZE LTC_SHA_BLOCK_SIZE /*!< LTC hash block size */ + +enum _ltc_sha_digest_len +{ + kLTC_RunLenSha1 = 28u, + kLTC_OutLenSha1 = 20u, + kLTC_RunLenSha224 = 40u, + kLTC_OutLenSha224 = 28u, + kLTC_RunLenSha256 = 40u, + kLTC_OutLenSha256 = 32u, +}; +#else +#define LTC_HASH_BLOCK_SIZE LTC_AES_BLOCK_SIZE /*!< LTC hash block size */ +#endif /* FSL_FEATURE_LTC_HAS_SHA */ + +/*! Internal states of the HASH creation process */ +typedef enum _ltc_hash_algo_state +{ + kLTC_HashInit = 1u, /*!< Key in the HASH context is the input key. */ + kLTC_HashUpdate, /*!< HASH context has algorithm specific context: MAC, K2 and K3 (XCBC-MAC), MAC and L (CMAC), + running digest (MDHA). Key in the HASH context is the derived key. */ +} ltc_hash_algo_state_t; + +/*! 16/64-byte block represented as byte array or 4/16 32-bit words */ +typedef union _ltc_hash_block +{ + uint32_t w[LTC_HASH_BLOCK_SIZE / 4]; /*!< array of 32-bit words */ + uint8_t b[LTC_HASH_BLOCK_SIZE]; /*!< byte array */ +} ltc_hash_block_t; + +/*! Definitions of indexes into hash context array */ +typedef enum _ltc_hash_ctx_indexes +{ + kLTC_HashCtxKeyStartIdx = 12, /*!< context word array index where key is stored */ + kLTC_HashCtxKeySize = 20, /*!< context word array index where key size is stored */ + kLTC_HashCtxNumWords = 21, /*!< number of context array 32-bit words */ +} ltc_hash_ctx_indexes; + +typedef struct _ltc_hash_ctx_internal +{ + ltc_hash_block_t blk; /*!< memory buffer. only full 64/16-byte blocks are written to LTC during hash updates */ + uint32_t blksz; /*!< number of valid bytes in memory buffer */ + LTC_Type *base; /*!< LTC peripheral base address */ + ltc_hash_algo_t algo; /*!< selected algorithm from the set of supported algorithms in ltc_drv_hash_algo */ + ltc_hash_algo_state_t state; /*!< finite machine state of the hash software process */ + uint32_t word[kLTC_HashCtxNumWords]; /*!< LTC module context that needs to be saved/restored between LTC jobs */ +} ltc_hash_ctx_internal_t; + +/******************************************************************************* + * HASH Code static + ******************************************************************************/ +static status_t ltc_hash_check_input_alg(ltc_hash_algo_t algo) +{ + if ((algo != kLTC_XcbcMac) && (algo != kLTC_Cmac) +#if defined(FSL_FEATURE_LTC_HAS_SHA) && FSL_FEATURE_LTC_HAS_SHA + && (algo != kLTC_Sha1) && (algo != kLTC_Sha224) && (algo != kLTC_Sha256) +#endif /* FSL_FEATURE_LTC_HAS_SHA */ + ) + { + return kStatus_InvalidArgument; + } + return kStatus_Success; +} + +static inline bool ltc_hash_alg_is_cmac(ltc_hash_algo_t algo) +{ + return ((algo == kLTC_XcbcMac) || (algo == kLTC_Cmac)); +} + +#if defined(FSL_FEATURE_LTC_HAS_SHA) && FSL_FEATURE_LTC_HAS_SHA +static inline bool ltc_hash_alg_is_sha(ltc_hash_algo_t algo) +{ + return ((algo == kLTC_Sha1) || (algo == kLTC_Sha224) || (algo == kLTC_Sha256)); +} +#endif /* FSL_FEATURE_LTC_HAS_SHA */ + +static status_t ltc_hash_check_input_args( + LTC_Type *base, ltc_hash_ctx_t *ctx, ltc_hash_algo_t algo, const uint8_t *key, uint32_t keySize) +{ + /* Check validity of input algorithm */ + if (kStatus_Success != ltc_hash_check_input_alg(algo)) + { + return kStatus_InvalidArgument; + } + + if ((NULL == ctx) || (NULL == base)) + { + return kStatus_InvalidArgument; + } + + if (ltc_hash_alg_is_cmac(algo)) + { + if ((NULL == key) || (!ltc_check_key_size(keySize))) + { + return kStatus_InvalidArgument; + } + } + + return kStatus_Success; +} + +static status_t ltc_hash_check_context(ltc_hash_ctx_internal_t *ctxInternal, const uint8_t *data) +{ + if ((NULL == data) || (NULL == ctxInternal) || (NULL == ctxInternal->base) || + (kStatus_Success != ltc_hash_check_input_alg(ctxInternal->algo))) + { + return kStatus_InvalidArgument; + } + return kStatus_Success; +} + +static uint32_t ltc_hash_algo2mode(ltc_hash_algo_t algo, ltc_mode_algorithm_state_t asMode, uint32_t *algOutSize) +{ + uint32_t modeReg = 0u; + uint32_t outSize = 0u; + + /* Set LTC algorithm */ + switch (algo) + { + case kLTC_XcbcMac: + modeReg = (uint32_t)kLTC_AlgorithmAES | (uint32_t)kLTC_ModeXCBCMAC; + outSize = 16u; + break; + case kLTC_Cmac: + modeReg = (uint32_t)kLTC_AlgorithmAES | (uint32_t)kLTC_ModeCMAC; + outSize = 16u; + break; +#if defined(FSL_FEATURE_LTC_HAS_SHA) && FSL_FEATURE_LTC_HAS_SHA + case kLTC_Sha1: + modeReg = (uint32_t)kLTC_AlgorithmSHA1; + outSize = kLTC_OutLenSha1; + break; + case kLTC_Sha224: + modeReg = (uint32_t)kLTC_AlgorithmSHA224; + outSize = kLTC_OutLenSha224; + break; + case kLTC_Sha256: + modeReg = (uint32_t)kLTC_AlgorithmSHA256; + outSize = kLTC_OutLenSha256; + break; +#endif /* FSL_FEATURE_LTC_HAS_SHA */ + default: + break; + } + + modeReg |= (uint32_t)asMode; + if (algOutSize) + { + *algOutSize = outSize; + } + + return modeReg; +} + +static void ltc_hash_engine_init(ltc_hash_ctx_internal_t *ctx) +{ + uint8_t *key; + uint32_t keySize; + LTC_Type *base; + ltc_mode_symmetric_alg_t algo; + + base = ctx->base; +#if defined(FSL_FEATURE_LTC_HAS_SHA) && FSL_FEATURE_LTC_HAS_SHA + if (ltc_hash_alg_is_cmac(ctx->algo)) + { +#endif /* FSL_FEATURE_LTC_HAS_SHA */ + /* + * word[kLtcCmacCtxKeySize] = key_length + * word[1-8] = key + */ + keySize = ctx->word[kLTC_HashCtxKeySize]; + key = (uint8_t *)&ctx->word[kLTC_HashCtxKeyStartIdx]; + + /* set LTC mode register to INITIALIZE */ + algo = (ctx->algo == kLTC_XcbcMac) ? kLTC_ModeXCBCMAC : kLTC_ModeCMAC; + ltc_symmetric_init(base, key, keySize, kLTC_AlgorithmAES, algo, kLTC_ModeEncrypt); +#if defined(FSL_FEATURE_LTC_HAS_SHA) && FSL_FEATURE_LTC_HAS_SHA + } + else if (ltc_hash_alg_is_sha(ctx->algo)) + { + /* Clear internal register states. */ + base->CW = (uint32_t)kLTC_ClearAll; + + /* Set byte swap on for several registers we will be reading and writing + * user data to/from. */ + base->CTL |= kLTC_CtrlSwapAll; + } + else + { + /* do nothing in this case */ + } +#endif /* FSL_FEATURE_LTC_HAS_SHA */ +} + +static void ltc_hash_save_context(ltc_hash_ctx_internal_t *ctx) +{ + uint32_t sz; + LTC_Type *base; + + base = ctx->base; + /* Get context size */ + switch (ctx->algo) + { + case kLTC_XcbcMac: + /* + * word[0-3] = mac + * word[3-7] = k3 + * word[8-11] = k2 + * word[kLtcCmacCtxKeySize] = keySize + */ + sz = 12 * sizeof(uint32_t); + break; + case kLTC_Cmac: + /* + * word[0-3] = mac + * word[3-7] = L */ + sz = 8 * sizeof(uint32_t); + break; +#if defined(FSL_FEATURE_LTC_HAS_SHA) && FSL_FEATURE_LTC_HAS_SHA + case kLTC_Sha1: + sz = (kLTC_RunLenSha1); + break; + case kLTC_Sha224: + sz = (kLTC_RunLenSha224); + break; + case kLTC_Sha256: + sz = (kLTC_RunLenSha256); + break; +#endif /* FSL_FEATURE_LTC_HAS_SHA */ + default: + sz = 0; + break; + } + + ltc_get_context(base, (uint8_t *)&ctx->word[0], sz, 0); + + if (true == ltc_hash_alg_is_cmac(ctx->algo)) + { + /* word[12-19] = key */ + ltc_get_key(base, (uint8_t *)&ctx->word[kLTC_HashCtxKeyStartIdx], ctx->word[kLTC_HashCtxKeySize]); + } +} + +static void ltc_hash_restore_context(ltc_hash_ctx_internal_t *ctx) +{ + uint32_t sz; + uint32_t keySize; + LTC_Type *base; + + base = ctx->base; + /* Get context size */ + switch (ctx->algo) + { + case kLTC_XcbcMac: + /* + * word[0-3] = mac + * word[3-7] = k3 + * word[8-11] = k2 + * word[kLtcCmacCtxKeySize] = keySize + */ + sz = 12 * sizeof(uint32_t); + break; + case kLTC_Cmac: + /* + * word[0-3] = mac + * word[3-7] = L */ + sz = 8 * sizeof(uint32_t); + break; +#if defined(FSL_FEATURE_LTC_HAS_SHA) && FSL_FEATURE_LTC_HAS_SHA + case kLTC_Sha1: + sz = (kLTC_RunLenSha1); + break; + case kLTC_Sha224: + sz = (kLTC_RunLenSha224); + break; + case kLTC_Sha256: + sz = (kLTC_RunLenSha256); + break; +#endif /* FSL_FEATURE_LTC_HAS_SHA */ + default: + sz = 0; + break; + } + + ltc_set_context(base, (const uint8_t *)&ctx->word[0], sz, 0); + + if (ltc_hash_alg_is_cmac(ctx->algo)) + { + /* + * word[12-19] = key + * word[kLtcCmacCtxKeySize] = keySize + */ + base->CW = kLTC_ClearKey; /* clear Key and Key Size registers */ + + keySize = ctx->word[kLTC_HashCtxKeySize]; + /* Write the key in place. */ + ltc_set_key(base, (const uint8_t *)&ctx->word[kLTC_HashCtxKeyStartIdx], keySize); + + /* Write the key size. This must be done after writing the key, and this + * action locks the ability to modify the key registers. */ + base->KS = keySize; + } +} + +static void ltc_hash_prepare_context_switch(LTC_Type *base) +{ + base->CW = (uint32_t)kLTC_ClearDataSize | (uint32_t)kLTC_ClearMode; + base->STA = kLTC_StatusDoneIsr; +} + +static uint32_t ltc_hash_get_block_size(ltc_hash_algo_t algo) +{ + if ((algo == kLTC_XcbcMac) || (algo == kLTC_Cmac)) + { + return (uint32_t)LTC_AES_BLOCK_SIZE; + } +#if defined(FSL_FEATURE_LTC_HAS_SHA) && FSL_FEATURE_LTC_HAS_SHA + else if ((algo == kLTC_Sha1) || (algo == kLTC_Sha224) || (algo == kLTC_Sha256)) + { + return (uint32_t)LTC_SHA_BLOCK_SIZE; + } + else + { + return 0; + } +#else + return 0; +#endif +} + +static void ltc_hash_block_to_ififo(LTC_Type *base, const ltc_hash_block_t *blk, uint32_t numBytes, uint32_t blockSize) +{ + uint32_t i = 0; + uint32_t words; + + words = numBytes / 4u; + if (numBytes % 4u) + { + words++; + } + + if (words > blockSize / 4u) + { + words = blockSize / 4u; + } + + while (i < words) + { + if (0U == (base->FIFOSTA & LTC_FIFOSTA_IFF_MASK)) + { + /* Copy data to the input FIFO. */ + base->IFIFO = blk->w[i++]; + } + } +} + +static void ltc_hash_move_to_ififo(ltc_hash_ctx_internal_t *ctx, + const uint8_t *data, + uint32_t dataSize, + uint32_t blockSize) +{ + ltc_hash_block_t blkZero; + uint32_t i; + + for (i = 0; i < ARRAY_SIZE(blkZero.w); i++) + { + blkZero.w[i] = 0; + } + + while (dataSize) + { + if (dataSize >= blockSize) + { + ltc_memcpy(&ctx->blk, data, blockSize); + ltc_hash_block_to_ififo(ctx->base, &ctx->blk, blockSize, blockSize); + dataSize -= blockSize; + data += blockSize; + } + else + { + /* last incomplete 16/64-bytes block of this message chunk */ + ltc_memcpy(&ctx->blk, &blkZero, sizeof(ctx->blk)); + ltc_memcpy(&ctx->blk, data, dataSize); + ctx->blksz = dataSize; + dataSize = 0; + } + } +} + +static status_t ltc_hash_merge_and_flush_buf(ltc_hash_ctx_internal_t *ctx, + const uint8_t *input, + uint32_t inputSize, + ltc_mode_t modeReg, + uint32_t blockSize, + uint32_t *consumedSize) +{ + uint32_t sz; + LTC_Type *base; + status_t status = kStatus_Success; + + base = ctx->base; + sz = 0; + if (ctx->blksz) + { + sz = blockSize - ctx->blksz; + if (sz > inputSize) + { + sz = inputSize; + } + ltc_memcpy(ctx->blk.b + ctx->blksz, input, sz); + input += sz; + inputSize -= sz; + ctx->blksz += sz; + + if (ctx->blksz == blockSize) + { + base->DS = blockSize; + ltc_hash_block_to_ififo(base, &ctx->blk, blockSize, blockSize); + ctx->blksz = 0; + + status = ltc_wait(base); + if (kStatus_Success != status) + { + return status; + } + + /* if there is still inputSize left, make sure LTC alg.state is set to UPDATE and continue */ + if (inputSize) + { + /* set algorithm state to UPDATE */ + modeReg &= ~LTC_MD_AS_MASK; + modeReg |= kLTC_ModeUpdate; + base->MD = modeReg; + } + } + } + if (consumedSize) + { + *consumedSize = sz; + } + return status; +} + +static status_t ltc_hash_move_rest_to_context( + ltc_hash_ctx_internal_t *ctx, const uint8_t *data, uint32_t dataSize, ltc_mode_t modeReg, uint32_t blockSize) +{ + status_t status = kStatus_Success; + ltc_hash_block_t blkZero; + uint32_t i; + + /* make blkZero clear */ + for (i = 0; i < ARRAY_SIZE(blkZero.w); i++) + { + blkZero.w[i] = 0; + } + + while (dataSize) + { + if (dataSize > blockSize) + { + dataSize -= blockSize; + data += blockSize; + } + else + { + if (dataSize + ctx->blksz > blockSize) + { + uint32_t sz; + status = ltc_hash_merge_and_flush_buf(ctx, data, dataSize, modeReg, blockSize, &sz); + if (kStatus_Success != status) + { + return status; + } + data += sz; + dataSize -= sz; + } + /* last incomplete 16/64-bytes block of this message chunk */ + ltc_memcpy(&ctx->blk, &blkZero, blockSize); + ltc_memcpy(&ctx->blk, data, dataSize); + ctx->blksz = dataSize; + dataSize = 0; + } + } + return status; +} + +static status_t ltc_hash_process_input_data(ltc_hash_ctx_internal_t *ctx, + const uint8_t *input, + uint32_t inputSize, + ltc_mode_t modeReg) +{ + uint32_t sz = 0; + LTC_Type *base; + uint32_t blockSize = 0; + status_t status = kStatus_Success; + + blockSize = ltc_hash_get_block_size(ctx->algo); + base = ctx->base; + + /* fill context struct blk and flush to LTC ififo in case it is full block */ + status = ltc_hash_merge_and_flush_buf(ctx, input, inputSize, modeReg, blockSize, &sz); + if (kStatus_Success != status) + { + return status; + } + input += sz; + inputSize -= sz; + + /* if there is still more than or equal to 16 bytes, move each 16 bytes through LTC */ + sz = LTC_FIFO_SZ_MAX_DOWN_ALGN; + while (inputSize) + { + if (inputSize < sz) + { + uint32_t lastSize; + + lastSize = inputSize % blockSize; + if (lastSize == 0) + { + lastSize = blockSize; + } + inputSize -= lastSize; + if (inputSize) + { + /* move all complete blocks to ififo. */ + base->DS = inputSize; + ltc_hash_move_to_ififo(ctx, input, inputSize, blockSize); + + status = ltc_wait(base); + if (kStatus_Success != status) + { + return status; + } + + input += inputSize; + } + /* keep last (in)complete 16-bytes block in context struct. */ + /* when 3rd argument of cmac_move_to_ififo() is <= 16 bytes, it only stores the data to context struct */ + status = ltc_hash_move_rest_to_context(ctx, input, lastSize, modeReg, blockSize); + if (kStatus_Success != status) + { + return status; + } + inputSize = 0; + } + else + { + base->DS = sz; + ltc_hash_move_to_ififo(ctx, input, sz, blockSize); + inputSize -= sz; + input += sz; + + status = ltc_wait(base); + if (kStatus_Success != status) + { + return status; + } + + /* set algorithm state to UPDATE */ + modeReg &= ~LTC_MD_AS_MASK; + modeReg |= kLTC_ModeUpdate; + base->MD = modeReg; + } + } /* end while */ + + return status; +} + +/******************************************************************************* + * HASH Code public + ******************************************************************************/ +status_t LTC_HASH_Init(LTC_Type *base, ltc_hash_ctx_t *ctx, ltc_hash_algo_t algo, const uint8_t *key, uint32_t keySize) +{ + status_t ret; + ltc_hash_ctx_internal_t *ctxInternal; + uint32_t i; + + ret = ltc_hash_check_input_args(base, ctx, algo, key, keySize); + if (ret != kStatus_Success) + { + return ret; + } + + /* set algorithm in context struct for later use */ + ctxInternal = (ltc_hash_ctx_internal_t *)ctx; + ctxInternal->algo = algo; + for (i = 0; i < kLTC_HashCtxNumWords; i++) + { + ctxInternal->word[i] = 0u; + } + + /* Steps required only using AES engine */ + if (ltc_hash_alg_is_cmac(algo)) + { + /* store input key and key length in context struct for later use */ + ctxInternal->word[kLTC_HashCtxKeySize] = keySize; + ltc_memcpy(&ctxInternal->word[kLTC_HashCtxKeyStartIdx], key, keySize); + } + ctxInternal->blksz = 0u; + for (i = 0; i < sizeof(ctxInternal->blk.w) / sizeof(ctxInternal->blk.w[0]); i++) + { + ctxInternal->blk.w[0] = 0u; + } + ctxInternal->state = kLTC_HashInit; + ctxInternal->base = base; + + return kStatus_Success; +} + +status_t LTC_HASH_Update(ltc_hash_ctx_t *ctx, const uint8_t *input, uint32_t inputSize) +{ + bool isUpdateState; + ltc_mode_t modeReg = 0; /* read and write LTC mode register */ + LTC_Type *base; + status_t status; + ltc_hash_ctx_internal_t *ctxInternal; + uint32_t blockSize; + + ctxInternal = (ltc_hash_ctx_internal_t *)ctx; + status = ltc_hash_check_context(ctxInternal, input); + if (kStatus_Success != status) + { + return status; + } + + base = ctxInternal->base; + blockSize = ltc_hash_get_block_size(ctxInternal->algo); + /* if we are still less than 64 bytes, keep only in context */ + if ((ctxInternal->blksz + inputSize) <= blockSize) + { + ltc_memcpy((&ctxInternal->blk.b[0]) + ctxInternal->blksz, input, inputSize); + ctxInternal->blksz += inputSize; + return status; + } + else + { + isUpdateState = ctxInternal->state == kLTC_HashUpdate; + if (ctxInternal->state == kLTC_HashInit) + { + /* set LTC mode register to INITIALIZE job */ + ltc_hash_engine_init(ctxInternal); + +#if defined(FSL_FEATURE_LTC_HAS_SHA) && FSL_FEATURE_LTC_HAS_SHA + if (ltc_hash_alg_is_cmac(ctxInternal->algo)) + { +#endif /* FSL_FEATURE_LTC_HAS_SHA */ + ctxInternal->state = kLTC_HashUpdate; + isUpdateState = true; + base->DS = 0u; + status = ltc_wait(base); +#if defined(FSL_FEATURE_LTC_HAS_SHA) && FSL_FEATURE_LTC_HAS_SHA + } + else + { + /* Set the proper block and algorithm mode. */ + modeReg = ltc_hash_algo2mode(ctxInternal->algo, kLTC_ModeInit, NULL); + base->MD = modeReg; + + ctxInternal->state = kLTC_HashUpdate; + status = ltc_hash_process_input_data(ctxInternal, input, inputSize, modeReg); + ltc_hash_save_context(ctxInternal); + } +#endif /* FSL_FEATURE_LTC_HAS_SHA */ + } + else if (isUpdateState) + { + /* restore LTC context from context struct */ + ltc_hash_restore_context(ctxInternal); + } + else + { + /* nothing special at this place */ + } + } + + if (kStatus_Success != status) + { + return status; + } + + if (isUpdateState) + { + /* set LTC mode register to UPDATE job */ + ltc_hash_prepare_context_switch(base); + base->CW = kLTC_ClearDataSize; + modeReg = ltc_hash_algo2mode(ctxInternal->algo, kLTC_ModeUpdate, NULL); + base->MD = modeReg; + + /* process input data and save LTC context to context structure */ + status = ltc_hash_process_input_data(ctxInternal, input, inputSize, modeReg); + ltc_hash_save_context(ctxInternal); + } + ltc_clear_all(base, false); + return status; +} + +status_t LTC_HASH_Finish(ltc_hash_ctx_t *ctx, uint8_t *output, uint32_t *outputSize) +{ + ltc_mode_t modeReg; /* read and write LTC mode register */ + LTC_Type *base; + uint32_t algOutSize = 0; + status_t status; + ltc_hash_ctx_internal_t *ctxInternal; + uint32_t *ctxW; + uint32_t i; + + ctxInternal = (ltc_hash_ctx_internal_t *)ctx; + status = ltc_hash_check_context(ctxInternal, output); + if (kStatus_Success != status) + { + return status; + } + + base = ctxInternal->base; + ltc_hash_prepare_context_switch(base); + + base->CW = kLTC_ClearDataSize; + if (ctxInternal->state == kLTC_HashInit) + { + ltc_hash_engine_init(ctxInternal); +#if defined(FSL_FEATURE_LTC_HAS_SHA) && FSL_FEATURE_LTC_HAS_SHA + if (ltc_hash_alg_is_cmac(ctxInternal->algo)) + { +#endif /* FSL_FEATURE_LTC_HAS_SHA */ + base->DS = 0u; + status = ltc_wait(base); + if (kStatus_Success != status) + { + return status; + } + modeReg = ltc_hash_algo2mode(ctxInternal->algo, kLTC_ModeFinalize, &algOutSize); +#if defined(FSL_FEATURE_LTC_HAS_SHA) && FSL_FEATURE_LTC_HAS_SHA + } + else + { + modeReg = ltc_hash_algo2mode(ctxInternal->algo, kLTC_ModeInitFinal, &algOutSize); + } +#endif /* FSL_FEATURE_LTC_HAS_SHA */ + base->MD = modeReg; + } + else + { + modeReg = ltc_hash_algo2mode(ctxInternal->algo, kLTC_ModeFinalize, &algOutSize); + base->MD = modeReg; + + /* restore LTC context from context struct */ + ltc_hash_restore_context(ctxInternal); + } + + /* flush message last incomplete block, if there is any, or write zero to data size register. */ + base->DS = ctxInternal->blksz; + ltc_hash_block_to_ififo(base, &ctxInternal->blk, ctxInternal->blksz, ltc_hash_get_block_size(ctxInternal->algo)); + /* Wait for finish of the encryption */ + status = ltc_wait(base); + + if (outputSize) + { + if (algOutSize < *outputSize) + { + *outputSize = algOutSize; + } + else + { + algOutSize = *outputSize; + } + } + + ltc_get_context(base, &output[0], algOutSize, 0u); + + ctxW = (uint32_t *)ctx; + for (i = 0; i < LTC_HASH_CTX_SIZE; i++) + { + ctxW[i] = 0u; + } + + ltc_clear_all(base, false); + return status; +} + +status_t LTC_HASH(LTC_Type *base, + ltc_hash_algo_t algo, + const uint8_t *input, + uint32_t inputSize, + const uint8_t *key, + uint32_t keySize, + uint8_t *output, + uint32_t *outputSize) +{ + status_t status; + ltc_hash_ctx_t ctx; + + status = LTC_HASH_Init(base, &ctx, algo, key, keySize); + if (status != kStatus_Success) + { + return status; + } + status = LTC_HASH_Update(&ctx, input, inputSize); + if (status != kStatus_Success) + { + return status; + } + status = LTC_HASH_Finish(&ctx, output, outputSize); + return status; +} + +/******************************************************************************* + * PKHA Code static + ******************************************************************************/ +#if defined(FSL_FEATURE_LTC_HAS_PKHA) && FSL_FEATURE_LTC_HAS_PKHA +static status_t ltc_pkha_clear_regabne(LTC_Type *base, bool A, bool B, bool N, bool E) +{ + ltc_mode_t mode; + + /* Set the PKHA algorithm and the appropriate function. */ + mode = (uint32_t)kLTC_AlgorithmPKHA | 1U; + + /* Set ram area to clear. Clear all. */ + if (A) + { + mode |= 1U << 19U; + } + if (B) + { + mode |= 1U << 18U; + } + if (N) + { + mode |= 1U << 16U; + } + if (E) + { + mode |= 1U << 17U; + } + + /* Write the mode register to the hardware. + * NOTE: This will begin the operation. */ + base->MDPK = mode; + + /* Wait for 'done' */ + return ltc_wait(base); +} + +static void ltc_pkha_default_parms(ltc_pkha_mode_params_t *params) +{ + params->func = (ltc_pkha_func_t)0; + params->arithType = kLTC_PKHA_IntegerArith; + params->montFormIn = kLTC_PKHA_NormalValue; + params->montFormOut = kLTC_PKHA_NormalValue; + params->srcReg = kLTC_PKHA_RegAll; + params->srcQuad = kLTC_PKHA_Quad0; + params->dstReg = kLTC_PKHA_RegAll; + params->dstQuad = kLTC_PKHA_Quad0; + params->equalTime = kLTC_PKHA_NoTimingEqualized; + params->r2modn = kLTC_PKHA_CalcR2; +} + +static void ltc_pkha_write_word(LTC_Type *base, ltc_pkha_reg_area_t reg, uint8_t index, uint32_t data) +{ + switch (reg) + { + case kLTC_PKHA_RegA: + base->PKA[index] = data; + break; + + case kLTC_PKHA_RegB: + base->PKB[index] = data; + break; + + case kLTC_PKHA_RegN: + base->PKN[index] = data; + break; + + case kLTC_PKHA_RegE: + base->PKE[index] = data; + break; + + default: + break; + } +} + +static uint32_t ltc_pkha_read_word(LTC_Type *base, ltc_pkha_reg_area_t reg, uint8_t index) +{ + uint32_t retval; + + switch (reg) + { + case kLTC_PKHA_RegA: + retval = base->PKA[index]; + break; + + case kLTC_PKHA_RegB: + retval = base->PKB[index]; + break; + + case kLTC_PKHA_RegN: + retval = base->PKN[index]; + break; + + case kLTC_PKHA_RegE: + retval = base->PKE[index]; + break; + + default: + retval = 0; + break; + } + return retval; +} + +static status_t ltc_pkha_write_reg( + LTC_Type *base, ltc_pkha_reg_area_t reg, uint8_t quad, const uint8_t *data, uint16_t dataSize) +{ + /* Select the word-based start index for each quadrant of 64 bytes. */ + uint8_t startIndex = (quad * 16u); + uint32_t outWord; + + while (dataSize > 0) + { + if (dataSize >= sizeof(uint32_t)) + { + ltc_pkha_write_word(base, reg, startIndex++, ltc_get_word_from_unaligned(data)); + dataSize -= sizeof(uint32_t); + data += sizeof(uint32_t); + } + else /* (dataSize > 0) && (dataSize < 4) */ + { + outWord = 0; + ltc_memcpy(&outWord, data, dataSize); + ltc_pkha_write_word(base, reg, startIndex, outWord); + dataSize = 0; + } + } + + return kStatus_Success; +} + +static void ltc_pkha_read_reg(LTC_Type *base, ltc_pkha_reg_area_t reg, uint8_t quad, uint8_t *data, uint16_t dataSize) +{ + /* Select the word-based start index for each quadrant of 64 bytes. */ + uint8_t startIndex = (quad * 16u); + uint16_t calcSize; + uint32_t word; + + while (dataSize > 0) + { + word = ltc_pkha_read_word(base, reg, startIndex++); + + calcSize = (dataSize >= sizeof(uint32_t)) ? sizeof(uint32_t) : dataSize; + ltc_memcpy(data, &word, calcSize); + + data += calcSize; + dataSize -= calcSize; + } +} + +static void ltc_pkha_init_data(LTC_Type *base, + const uint8_t *A, + uint16_t sizeA, + const uint8_t *B, + uint16_t sizeB, + const uint8_t *N, + uint16_t sizeN, + const uint8_t *E, + uint16_t sizeE) +{ + uint32_t clearMask = kLTC_ClearMode; /* clear Mode Register */ + + /* Clear internal register states. */ + if (sizeA) + { + clearMask |= kLTC_ClearPkhaSizeA; + } + if (sizeB) + { + clearMask |= kLTC_ClearPkhaSizeB; + } + if (sizeN) + { + clearMask |= kLTC_ClearPkhaSizeN; + } + if (sizeE) + { + clearMask |= kLTC_ClearPkhaSizeE; + } + + base->CW = clearMask; + base->STA = kLTC_StatusDoneIsr; + ltc_pkha_clear_regabne(base, A, B, N, E); + + /* Write register sizes. */ + /* Write modulus (N) and A and B register arguments. */ + if (sizeN) + { + base->PKNSZ = sizeN; + if (N) + { + ltc_pkha_write_reg(base, kLTC_PKHA_RegN, 0, N, sizeN); + } + } + + if (sizeA) + { + base->PKASZ = sizeA; + if (A) + { + ltc_pkha_write_reg(base, kLTC_PKHA_RegA, 0, A, sizeA); + } + } + + if (sizeB) + { + base->PKBSZ = sizeB; + if (B) + { + ltc_pkha_write_reg(base, kLTC_PKHA_RegB, 0, B, sizeB); + } + } + + if (sizeE) + { + base->PKESZ = sizeE; + if (E) + { + ltc_pkha_write_reg(base, kLTC_PKHA_RegE, 0, E, sizeE); + } + } +} + +static void ltc_pkha_mode_set_src_reg_copy(ltc_mode_t *outMode, ltc_pkha_reg_area_t reg) +{ + int i = 0; + + do + { + reg = (ltc_pkha_reg_area_t)(((uint32_t)reg) >> 1u); + i++; + } while (reg); + + i = 4 - i; + /* Source register must not be E. */ + if (i != 2) + { + *outMode |= ((uint32_t)i << 17u); + } +} + +static void ltc_pkha_mode_set_dst_reg_copy(ltc_mode_t *outMode, ltc_pkha_reg_area_t reg) +{ + int i = 0; + + do + { + reg = (ltc_pkha_reg_area_t)(((uint32_t)reg) >> 1u); + i++; + } while (reg); + + i = 4 - i; + *outMode |= ((uint32_t)i << 10u); +} + +static void ltc_pkha_mode_set_src_seg_copy(ltc_mode_t *outMode, const ltc_pkha_quad_area_t quad) +{ + *outMode |= ((uint32_t)quad << 8u); +} + +static void ltc_pkha_mode_set_dst_seg_copy(ltc_mode_t *outMode, const ltc_pkha_quad_area_t quad) +{ + *outMode |= ((uint32_t)quad << 6u); +} + +/*! + * @brief Starts the PKHA operation. + * + * This function starts an operation configured by the params parameter. + * + * @param base LTC peripheral base address + * @param params Configuration structure containing all settings required for PKHA operation. + */ +static status_t ltc_pkha_init_mode(LTC_Type *base, const ltc_pkha_mode_params_t *params) +{ + ltc_mode_t modeReg; + status_t retval; + + /* Set the PKHA algorithm and the appropriate function. */ + modeReg = kLTC_AlgorithmPKHA; + modeReg |= (uint32_t)params->func; + + if ((params->func == kLTC_PKHA_CopyMemSizeN) || (params->func == kLTC_PKHA_CopyMemSizeSrc)) + { + /* Set source and destination registers and quads. */ + ltc_pkha_mode_set_src_reg_copy(&modeReg, params->srcReg); + ltc_pkha_mode_set_dst_reg_copy(&modeReg, params->dstReg); + ltc_pkha_mode_set_src_seg_copy(&modeReg, params->srcQuad); + ltc_pkha_mode_set_dst_seg_copy(&modeReg, params->dstQuad); + } + else + { + /* Set the arithmetic type - integer or binary polynomial (F2m). */ + modeReg |= ((uint32_t)params->arithType << 17u); + + /* Set to use Montgomery form of inputs and/or outputs. */ + modeReg |= ((uint32_t)params->montFormIn << 19u); + modeReg |= ((uint32_t)params->montFormOut << 18u); + + /* Set to use pre-computed R2modN */ + modeReg |= ((uint32_t)params->r2modn << 16u); + } + + modeReg |= ((uint32_t)params->equalTime << 10u); + + /* Write the mode register to the hardware. + * NOTE: This will begin the operation. */ + base->MDPK = modeReg; + + retval = ltc_wait(base); + return (retval); +} + +static status_t ltc_pkha_modR2( + LTC_Type *base, const uint8_t *N, uint16_t sizeN, uint8_t *result, uint16_t *resultSize, ltc_pkha_f2m_t arithType) +{ + status_t status; + ltc_pkha_mode_params_t params; + + ltc_pkha_default_parms(¶ms); + params.func = kLTC_PKHA_ArithModR2; + params.arithType = arithType; + + ltc_pkha_init_data(base, NULL, 0, NULL, 0, N, sizeN, NULL, 0); + status = ltc_pkha_init_mode(base, ¶ms); + + if (status == kStatus_Success) + { + /* Read the result and size from register B0. */ + if (resultSize && result) + { + *resultSize = base->PKBSZ; + /* Read the data from the result register into place. */ + ltc_pkha_read_reg(base, kLTC_PKHA_RegB, 0, result, *resultSize); + } + } + + return status; +} + +static status_t ltc_pkha_modmul(LTC_Type *base, + const uint8_t *A, + uint16_t sizeA, + const uint8_t *B, + uint16_t sizeB, + const uint8_t *N, + uint16_t sizeN, + uint8_t *result, + uint16_t *resultSize, + ltc_pkha_f2m_t arithType, + ltc_pkha_montgomery_form_t montIn, + ltc_pkha_montgomery_form_t montOut, + ltc_pkha_timing_t equalTime) +{ + ltc_pkha_mode_params_t params; + status_t status; + + if (arithType == kLTC_PKHA_IntegerArith) + { + if (LTC_PKHA_CompareBigNum(A, sizeA, N, sizeN) >= 0) + { + return (kStatus_InvalidArgument); + } + + if (LTC_PKHA_CompareBigNum(B, sizeB, N, sizeN) >= 0) + { + return (kStatus_InvalidArgument); + } + } + + ltc_pkha_default_parms(¶ms); + params.func = kLTC_PKHA_ArithModMul; + params.arithType = arithType; + params.montFormIn = montIn; + params.montFormOut = montOut; + params.equalTime = equalTime; + + ltc_pkha_init_data(base, A, sizeA, B, sizeB, N, sizeN, NULL, 0); + status = ltc_pkha_init_mode(base, ¶ms); + + if (status == kStatus_Success) + { + /* Read the result and size from register B0. */ + if (resultSize && result) + { + *resultSize = base->PKBSZ; + /* Read the data from the result register into place. */ + ltc_pkha_read_reg(base, kLTC_PKHA_RegB, 0, result, *resultSize); + } + } + + return status; +} + +/******************************************************************************* + * PKHA Code public + ******************************************************************************/ +int LTC_PKHA_CompareBigNum(const uint8_t *a, size_t sizeA, const uint8_t *b, size_t sizeB) +{ + int retval; + + /* skip zero msbytes - integer a */ + if (sizeA) + { + while (0u == a[sizeA - 1]) + { + sizeA--; + } + } + + /* skip zero msbytes - integer b */ + if (sizeB) + { + while (0u == b[sizeB - 1]) + { + sizeB--; + } + } + + if (sizeA > sizeB) + { + retval = 1; + } /* int a has more non-zero bytes, thus it is bigger than b */ + else if (sizeA < sizeB) + { + retval = -1; + } /* int b has more non-zero bytes, thus it is bigger than a */ + else if (sizeA == 0) + { + retval = 0; + } /* sizeA = sizeB = 0 */ + else + { + int n; + + n = sizeA - 1; + /* skip all equal bytes */ + while ((n >= 0) && (a[n] == b[n])) + { + n--; + } + if (n < 0) + { + retval = 0; + } + else + { + retval = (a[n] > b[n]) ? 1 : -1; + } + } + return (retval); +} + +status_t LTC_PKHA_NormalToMontgomery(LTC_Type *base, + const uint8_t *N, + uint16_t sizeN, + uint8_t *A, + uint16_t *sizeA, + uint8_t *B, + uint16_t *sizeB, + uint8_t *R2, + uint16_t *sizeR2, + ltc_pkha_timing_t equalTime, + ltc_pkha_f2m_t arithType) +{ + status_t status; + + /* need to convert our Integer inputs into Montgomery format */ + if (N && sizeN && R2 && sizeR2) + { + /* 1. R2 = MOD_R2(N) */ + status = ltc_pkha_modR2(base, N, sizeN, R2, sizeR2, arithType); + if (status != kStatus_Success) + { + return status; + } + + /* 2. A(Montgomery) = MOD_MUL_IM_OM(A, R2, N) */ + if (A && sizeA) + { + status = ltc_pkha_modmul(base, A, *sizeA, R2, *sizeR2, N, sizeN, A, sizeA, arithType, + kLTC_PKHA_MontgomeryFormat, kLTC_PKHA_MontgomeryFormat, equalTime); + if (status != kStatus_Success) + { + return status; + } + } + + /* 2. B(Montgomery) = MOD_MUL_IM_OM(B, R2, N) */ + if (B && sizeB) + { + status = ltc_pkha_modmul(base, B, *sizeB, R2, *sizeR2, N, sizeN, B, sizeB, arithType, + kLTC_PKHA_MontgomeryFormat, kLTC_PKHA_MontgomeryFormat, equalTime); + if (status != kStatus_Success) + { + return status; + } + } + + ltc_clear_all(base, true); + } + else + { + status = kStatus_InvalidArgument; + } + + return status; +} + +status_t LTC_PKHA_MontgomeryToNormal(LTC_Type *base, + const uint8_t *N, + uint16_t sizeN, + uint8_t *A, + uint16_t *sizeA, + uint8_t *B, + uint16_t *sizeB, + ltc_pkha_timing_t equalTime, + ltc_pkha_f2m_t arithType) +{ + uint8_t one = 1; + status_t status = kStatus_InvalidArgument; + + /* A = MOD_MUL_IM_OM(A(Montgomery), 1, N) */ + if (A && sizeA) + { + status = ltc_pkha_modmul(base, A, *sizeA, &one, sizeof(one), N, sizeN, A, sizeA, arithType, + kLTC_PKHA_MontgomeryFormat, kLTC_PKHA_MontgomeryFormat, equalTime); + if (kStatus_Success != status) + { + return status; + } + } + + /* B = MOD_MUL_IM_OM(B(Montgomery), 1, N) */ + if (B && sizeB) + { + status = ltc_pkha_modmul(base, B, *sizeB, &one, sizeof(one), N, sizeN, B, sizeB, arithType, + kLTC_PKHA_MontgomeryFormat, kLTC_PKHA_MontgomeryFormat, equalTime); + if (kStatus_Success != status) + { + return status; + } + } + + ltc_clear_all(base, true); + return status; +} + +status_t LTC_PKHA_ModAdd(LTC_Type *base, + const uint8_t *A, + uint16_t sizeA, + const uint8_t *B, + uint16_t sizeB, + const uint8_t *N, + uint16_t sizeN, + uint8_t *result, + uint16_t *resultSize, + ltc_pkha_f2m_t arithType) +{ + ltc_pkha_mode_params_t params; + status_t status; + + if (arithType == kLTC_PKHA_IntegerArith) + { + if (LTC_PKHA_CompareBigNum(A, sizeA, N, sizeN) >= 0) + { + return (kStatus_InvalidArgument); + } + + if (LTC_PKHA_CompareBigNum(B, sizeB, N, sizeN) >= 0) + { + return (kStatus_InvalidArgument); + } + } + + ltc_pkha_default_parms(¶ms); + params.func = kLTC_PKHA_ArithModAdd; + params.arithType = arithType; + + ltc_pkha_init_data(base, A, sizeA, B, sizeB, N, sizeN, NULL, 0); + status = ltc_pkha_init_mode(base, ¶ms); + + if (status == kStatus_Success) + { + /* Read the result and size from register B0. */ + if (resultSize && result) + { + *resultSize = base->PKBSZ; + /* Read the data from the result register into place. */ + ltc_pkha_read_reg(base, kLTC_PKHA_RegB, 0, result, *resultSize); + } + } + + ltc_clear_all(base, true); + return status; +} + +status_t LTC_PKHA_ModSub1(LTC_Type *base, + const uint8_t *A, + uint16_t sizeA, + const uint8_t *B, + uint16_t sizeB, + const uint8_t *N, + uint16_t sizeN, + uint8_t *result, + uint16_t *resultSize) +{ + ltc_pkha_mode_params_t params; + status_t status; + + if (LTC_PKHA_CompareBigNum(A, sizeA, N, sizeN) >= 0) + { + return (kStatus_InvalidArgument); + } + + if (LTC_PKHA_CompareBigNum(B, sizeB, N, sizeN) >= 0) + { + return (kStatus_InvalidArgument); + } + + ltc_pkha_default_parms(¶ms); + params.func = kLTC_PKHA_ArithModSub1; + ltc_pkha_init_data(base, A, sizeA, B, sizeB, N, sizeN, NULL, 0); + + status = ltc_pkha_init_mode(base, ¶ms); + + if (status == kStatus_Success) + { + /* Read the result and size from register B0. */ + if (resultSize && result) + { + *resultSize = base->PKBSZ; + /* Read the data from the result register into place. */ + ltc_pkha_read_reg(base, kLTC_PKHA_RegB, 0, result, *resultSize); + } + } + + ltc_clear_all(base, true); + return status; +} + +status_t LTC_PKHA_ModSub2(LTC_Type *base, + const uint8_t *A, + uint16_t sizeA, + const uint8_t *B, + uint16_t sizeB, + const uint8_t *N, + uint16_t sizeN, + uint8_t *result, + uint16_t *resultSize) +{ + ltc_pkha_mode_params_t params; + status_t status; + + ltc_pkha_default_parms(¶ms); + params.func = kLTC_PKHA_ArithModSub2; + + ltc_pkha_init_data(base, A, sizeA, B, sizeB, N, sizeN, NULL, 0); + status = ltc_pkha_init_mode(base, ¶ms); + + if (status == kStatus_Success) + { + /* Read the result and size from register B0. */ + if (resultSize && result) + { + *resultSize = base->PKBSZ; + /* Read the data from the result register into place. */ + ltc_pkha_read_reg(base, kLTC_PKHA_RegB, 0, result, *resultSize); + } + } + + ltc_clear_all(base, true); + return status; +} + +status_t LTC_PKHA_ModMul(LTC_Type *base, + const uint8_t *A, + uint16_t sizeA, + const uint8_t *B, + uint16_t sizeB, + const uint8_t *N, + uint16_t sizeN, + uint8_t *result, + uint16_t *resultSize, + ltc_pkha_f2m_t arithType, + ltc_pkha_montgomery_form_t montIn, + ltc_pkha_montgomery_form_t montOut, + ltc_pkha_timing_t equalTime) +{ + status_t status; + + status = + ltc_pkha_modmul(base, A, sizeA, B, sizeB, N, sizeN, result, resultSize, arithType, montIn, montOut, equalTime); + + ltc_clear_all(base, true); + return status; +} + +status_t LTC_PKHA_ModExp(LTC_Type *base, + const uint8_t *A, + uint16_t sizeA, + const uint8_t *N, + uint16_t sizeN, + const uint8_t *E, + uint16_t sizeE, + uint8_t *result, + uint16_t *resultSize, + ltc_pkha_f2m_t arithType, + ltc_pkha_montgomery_form_t montIn, + ltc_pkha_timing_t equalTime) +{ + ltc_pkha_mode_params_t params; + status_t status; + + if (arithType == kLTC_PKHA_IntegerArith) + { + if (LTC_PKHA_CompareBigNum(A, sizeA, N, sizeN) >= 0) + { + return (kStatus_InvalidArgument); + } + } + + ltc_pkha_default_parms(¶ms); + params.func = kLTC_PKHA_ArithModExp; + params.arithType = arithType; + params.montFormIn = montIn; + params.equalTime = equalTime; + + ltc_pkha_init_data(base, A, sizeA, NULL, 0, N, sizeN, E, sizeE); + status = ltc_pkha_init_mode(base, ¶ms); + + if (status == kStatus_Success) + { + /* Read the result and size from register B0. */ + if (resultSize && result) + { + *resultSize = base->PKBSZ; + /* Read the data from the result register into place. */ + ltc_pkha_read_reg(base, kLTC_PKHA_RegB, 0, result, *resultSize); + } + } + + ltc_clear_all(base, true); + return status; +} + +status_t LTC_PKHA_ModRed(LTC_Type *base, + const uint8_t *A, + uint16_t sizeA, + const uint8_t *N, + uint16_t sizeN, + uint8_t *result, + uint16_t *resultSize, + ltc_pkha_f2m_t arithType) +{ + ltc_pkha_mode_params_t params; + status_t status; + + ltc_pkha_default_parms(¶ms); + params.func = kLTC_PKHA_ArithModRed; + params.arithType = arithType; + + ltc_pkha_init_data(base, A, sizeA, NULL, 0, N, sizeN, NULL, 0); + status = ltc_pkha_init_mode(base, ¶ms); + + if (status == kStatus_Success) + { + /* Read the result and size from register B0. */ + if (resultSize && result) + { + *resultSize = base->PKBSZ; + /* Read the data from the result register into place. */ + ltc_pkha_read_reg(base, kLTC_PKHA_RegB, 0, result, *resultSize); + } + } + + ltc_clear_all(base, true); + return status; +} + +status_t LTC_PKHA_ModInv(LTC_Type *base, + const uint8_t *A, + uint16_t sizeA, + const uint8_t *N, + uint16_t sizeN, + uint8_t *result, + uint16_t *resultSize, + ltc_pkha_f2m_t arithType) +{ + ltc_pkha_mode_params_t params; + status_t status; + + /* A must be less than N -> LTC_PKHA_CompareBigNum() must return -1 */ + if (arithType == kLTC_PKHA_IntegerArith) + { + if (LTC_PKHA_CompareBigNum(A, sizeA, N, sizeN) >= 0) + { + return (kStatus_InvalidArgument); + } + } + + ltc_pkha_default_parms(¶ms); + params.func = kLTC_PKHA_ArithModInv; + params.arithType = arithType; + + ltc_pkha_init_data(base, A, sizeA, NULL, 0, N, sizeN, NULL, 0); + status = ltc_pkha_init_mode(base, ¶ms); + + if (status == kStatus_Success) + { + /* Read the result and size from register B0. */ + if (resultSize && result) + { + *resultSize = base->PKBSZ; + /* Read the data from the result register into place. */ + ltc_pkha_read_reg(base, kLTC_PKHA_RegB, 0, result, *resultSize); + } + } + + ltc_clear_all(base, true); + return status; +} + +status_t LTC_PKHA_ModR2( + LTC_Type *base, const uint8_t *N, uint16_t sizeN, uint8_t *result, uint16_t *resultSize, ltc_pkha_f2m_t arithType) +{ + status_t status; + status = ltc_pkha_modR2(base, N, sizeN, result, resultSize, arithType); + ltc_clear_all(base, true); + return status; +} + +status_t LTC_PKHA_GCD(LTC_Type *base, + const uint8_t *A, + uint16_t sizeA, + const uint8_t *N, + uint16_t sizeN, + uint8_t *result, + uint16_t *resultSize, + ltc_pkha_f2m_t arithType) +{ + ltc_pkha_mode_params_t params; + status_t status; + + ltc_pkha_default_parms(¶ms); + params.func = kLTC_PKHA_ArithGcd; + params.arithType = arithType; + + ltc_pkha_init_data(base, A, sizeA, NULL, 0, N, sizeN, NULL, 0); + status = ltc_pkha_init_mode(base, ¶ms); + + if (status == kStatus_Success) + { + /* Read the result and size from register B0. */ + if (resultSize && result) + { + *resultSize = base->PKBSZ; + /* Read the data from the result register into place. */ + ltc_pkha_read_reg(base, kLTC_PKHA_RegB, 0, result, *resultSize); + } + } + + ltc_clear_all(base, true); + return status; +} + +status_t LTC_PKHA_PrimalityTest(LTC_Type *base, + const uint8_t *A, + uint16_t sizeA, + const uint8_t *B, + uint16_t sizeB, + const uint8_t *N, + uint16_t sizeN, + bool *res) +{ + uint8_t result; + ltc_pkha_mode_params_t params; + status_t status; + + ltc_pkha_default_parms(¶ms); + params.func = kLTC_PKHA_ArithPrimalityTest; + ltc_pkha_init_data(base, A, sizeA, B, sizeB, N, sizeN, NULL, 0); + status = ltc_pkha_init_mode(base, ¶ms); + + if (status == kStatus_Success) + { + /* Read the data from the result register into place. */ + ltc_pkha_read_reg(base, kLTC_PKHA_RegB, 0, &result, 1); + + *res = (bool)result; + } + + ltc_clear_all(base, true); + return status; +} + +status_t LTC_PKHA_ECC_PointAdd(LTC_Type *base, + const ltc_pkha_ecc_point_t *A, + const ltc_pkha_ecc_point_t *B, + const uint8_t *N, + const uint8_t *R2modN, + const uint8_t *aCurveParam, + const uint8_t *bCurveParam, + uint8_t size, + ltc_pkha_f2m_t arithType, + ltc_pkha_ecc_point_t *result) +{ + ltc_pkha_mode_params_t params; + uint32_t clearMask; + status_t status; + + ltc_pkha_default_parms(¶ms); + params.func = kLTC_PKHA_ArithEccAdd; + params.arithType = arithType; + params.r2modn = R2modN ? kLTC_PKHA_InputR2 : kLTC_PKHA_CalcR2; + + clearMask = kLTC_ClearMode; + + /* Clear internal register states. */ + clearMask |= kLTC_ClearPkhaSizeA; + clearMask |= kLTC_ClearPkhaSizeB; + clearMask |= kLTC_ClearPkhaSizeN; + clearMask |= kLTC_ClearPkhaSizeE; + + base->CW = clearMask; + base->STA = kLTC_StatusDoneIsr; + ltc_pkha_clear_regabne(base, true, true, true, false); + + /* sizeN should be less than 64 bytes. */ + base->PKNSZ = size; + ltc_pkha_write_reg(base, kLTC_PKHA_RegN, 0, N, size); + + base->PKASZ = size; + ltc_pkha_write_reg(base, kLTC_PKHA_RegA, 0, A->X, size); + ltc_pkha_write_reg(base, kLTC_PKHA_RegA, 1, A->Y, size); + ltc_pkha_write_reg(base, kLTC_PKHA_RegA, 3, aCurveParam, size); + + base->PKBSZ = size; + ltc_pkha_write_reg(base, kLTC_PKHA_RegB, 0, bCurveParam, size); + ltc_pkha_write_reg(base, kLTC_PKHA_RegB, 1, B->X, size); + ltc_pkha_write_reg(base, kLTC_PKHA_RegB, 2, B->Y, size); + if (R2modN) + { + ltc_pkha_write_reg(base, kLTC_PKHA_RegB, 3, R2modN, size); + } + + status = ltc_pkha_init_mode(base, ¶ms); + + if (status == kStatus_Success) + { + /* Read the data from the result register into place. */ + ltc_pkha_read_reg(base, kLTC_PKHA_RegB, 1, result->X, size); + ltc_pkha_read_reg(base, kLTC_PKHA_RegB, 2, result->Y, size); + } + + ltc_clear_all(base, true); + return status; +} + +status_t LTC_PKHA_ECC_PointDouble(LTC_Type *base, + const ltc_pkha_ecc_point_t *B, + const uint8_t *N, + const uint8_t *aCurveParam, + const uint8_t *bCurveParam, + uint8_t size, + ltc_pkha_f2m_t arithType, + ltc_pkha_ecc_point_t *result) +{ + ltc_pkha_mode_params_t params; + uint32_t clearMask; + status_t status; + + ltc_pkha_default_parms(¶ms); + params.func = kLTC_PKHA_ArithEccDouble; + params.arithType = arithType; + + clearMask = kLTC_ClearMode; + + /* Clear internal register states. */ + clearMask |= kLTC_ClearPkhaSizeA; + clearMask |= kLTC_ClearPkhaSizeB; + clearMask |= kLTC_ClearPkhaSizeN; + clearMask |= kLTC_ClearPkhaSizeE; + + base->CW = clearMask; + base->STA = kLTC_StatusDoneIsr; + ltc_pkha_clear_regabne(base, true, true, true, false); + + /* sizeN should be less than 64 bytes. */ + base->PKNSZ = size; + ltc_pkha_write_reg(base, kLTC_PKHA_RegN, 0, N, size); + + base->PKASZ = size; + ltc_pkha_write_reg(base, kLTC_PKHA_RegA, 3, aCurveParam, size); + + base->PKBSZ = size; + ltc_pkha_write_reg(base, kLTC_PKHA_RegB, 0, bCurveParam, size); + ltc_pkha_write_reg(base, kLTC_PKHA_RegB, 1, B->X, size); + ltc_pkha_write_reg(base, kLTC_PKHA_RegB, 2, B->Y, size); + status = ltc_pkha_init_mode(base, ¶ms); + + if (status == kStatus_Success) + { + /* Read the data from the result register into place. */ + ltc_pkha_read_reg(base, kLTC_PKHA_RegB, 1, result->X, size); + ltc_pkha_read_reg(base, kLTC_PKHA_RegB, 2, result->Y, size); + } + + ltc_clear_all(base, true); + return status; +} + +status_t LTC_PKHA_ECC_PointMul(LTC_Type *base, + const ltc_pkha_ecc_point_t *A, + const uint8_t *E, + uint8_t sizeE, + const uint8_t *N, + const uint8_t *R2modN, + const uint8_t *aCurveParam, + const uint8_t *bCurveParam, + uint8_t size, + ltc_pkha_timing_t equalTime, + ltc_pkha_f2m_t arithType, + ltc_pkha_ecc_point_t *result, + bool *infinity) +{ + ltc_pkha_mode_params_t params; + uint32_t clearMask; + status_t status; + + ltc_pkha_default_parms(¶ms); + params.func = kLTC_PKHA_ArithEccMul; + params.equalTime = equalTime; + params.arithType = arithType; + params.r2modn = R2modN ? kLTC_PKHA_InputR2 : kLTC_PKHA_CalcR2; + + clearMask = kLTC_ClearMode; + + /* Clear internal register states. */ + clearMask |= kLTC_ClearPkhaSizeA; + clearMask |= kLTC_ClearPkhaSizeB; + clearMask |= kLTC_ClearPkhaSizeN; + clearMask |= kLTC_ClearPkhaSizeE; + + base->CW = clearMask; + base->STA = kLTC_StatusDoneIsr; + ltc_pkha_clear_regabne(base, true, true, true, true); + + /* sizeN should be less than 64 bytes. */ + base->PKNSZ = size; + ltc_pkha_write_reg(base, kLTC_PKHA_RegN, 0, N, size); + + base->PKESZ = sizeE; + ltc_pkha_write_reg(base, kLTC_PKHA_RegE, 0, E, sizeE); + + base->PKASZ = size; + ltc_pkha_write_reg(base, kLTC_PKHA_RegA, 0, A->X, size); + ltc_pkha_write_reg(base, kLTC_PKHA_RegA, 1, A->Y, size); + ltc_pkha_write_reg(base, kLTC_PKHA_RegA, 3, aCurveParam, size); + + base->PKBSZ = size; + ltc_pkha_write_reg(base, kLTC_PKHA_RegB, 0, bCurveParam, size); + if (R2modN) + { + ltc_pkha_write_reg(base, kLTC_PKHA_RegB, 1, R2modN, size); + } + + status = ltc_pkha_init_mode(base, ¶ms); + + if (status == kStatus_Success) + { + /* Read the data from the result register into place. */ + ltc_pkha_read_reg(base, kLTC_PKHA_RegB, 1, result->X, size); + ltc_pkha_read_reg(base, kLTC_PKHA_RegB, 2, result->Y, size); + + if (infinity) + { + *infinity = (bool)(base->STA & kLTC_StatusPublicKeyOpZero); + } + } + + ltc_clear_all(base, true); + return status; +} + +#endif /* FSL_FEATURE_LTC_HAS_PKHA */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_ltc.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_ltc.h new file mode 100644 index 00000000000..910ad7790f3 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_ltc.h @@ -0,0 +1,1575 @@ +/* + * Copyright (c) 2015-2016, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FSL_LTC_H_ +#define _FSL_LTC_H_ + +#include "fsl_common.h" + +/******************************************************************************* + * Definitions + *******************************************************************************/ + +/*! + * @addtogroup ltc + * @{ + */ +/*! @name Driver version */ +/*@{*/ +/*! @brief LTC driver version. Version 2.0.1. + * + * Current version: 2.0.1 + * + * Change log: + * - Version 2.0.1 + * - fixed warning during g++ compilation + */ +#define FSL_LTC_DRIVER_VERSION (MAKE_VERSION(2, 0, 1)) +/*@}*/ +/*! @} */ + +/******************************************************************************* + * AES Definitions + *******************************************************************************/ +/*! + * @addtogroup ltc_driver_aes + * @{ + */ +/*! AES block size in bytes */ +#define LTC_AES_BLOCK_SIZE 16 +/*! AES Input Vector size in bytes */ +#define LTC_AES_IV_SIZE 16 + +/*! @brief Type of AES key for ECB and CBC decrypt operations. */ +typedef enum _ltc_aes_key_t +{ + kLTC_EncryptKey = 0U, /*!< Input key is an encrypt key */ + kLTC_DecryptKey = 1U, /*!< Input key is a decrypt key */ +} ltc_aes_key_t; + +/*! + *@} + */ + +/******************************************************************************* + * DES Definitions + *******************************************************************************/ +/*! + * @addtogroup ltc_driver_des + * @{ + */ + +/*! @brief LTC DES key size - 64 bits. */ +#define LTC_DES_KEY_SIZE 8 + +/*! @brief LTC DES IV size - 8 bytes */ +#define LTC_DES_IV_SIZE 8 + +/*! + *@} + */ + +/******************************************************************************* + * HASH Definitions + ******************************************************************************/ +/*! + * @addtogroup ltc_driver_hash + * @{ + */ +/*! Supported cryptographic block cipher functions for HASH creation */ +typedef enum _ltc_hash_algo_t +{ + kLTC_XcbcMac = 0, /*!< XCBC-MAC (AES engine) */ + kLTC_Cmac, /*!< CMAC (AES engine) */ +#if defined(FSL_FEATURE_LTC_HAS_SHA) && FSL_FEATURE_LTC_HAS_SHA + kLTC_Sha1, /*!< SHA_1 (MDHA engine) */ + kLTC_Sha224, /*!< SHA_224 (MDHA engine) */ + kLTC_Sha256, /*!< SHA_256 (MDHA engine) */ +#endif /* FSL_FEATURE_LTC_HAS_SHA */ +} ltc_hash_algo_t; + +/*! @brief LTC HASH Context size. */ +#if defined(FSL_FEATURE_LTC_HAS_SHA) && FSL_FEATURE_LTC_HAS_SHA +#define LTC_HASH_CTX_SIZE 41 +#else +#define LTC_HASH_CTX_SIZE 29 +#endif /* FSL_FEATURE_LTC_HAS_SHA */ + +/*! @brief Storage type used to save hash context. */ +typedef uint32_t ltc_hash_ctx_t[LTC_HASH_CTX_SIZE]; + +/*! + *@} + */ +/******************************************************************************* + * PKHA Definitions + ******************************************************************************/ +/*! + * @addtogroup ltc_driver_pkha + * @{ + */ +/*! PKHA ECC point structure */ +typedef struct _ltc_pkha_ecc_point_t +{ + uint8_t *X; /*!< X coordinate (affine) */ + uint8_t *Y; /*!< Y coordinate (affine) */ +} ltc_pkha_ecc_point_t; + +/*! @brief Use of timing equalized version of a PKHA function. */ +typedef enum _ltc_pkha_timing_t +{ + kLTC_PKHA_NoTimingEqualized = 0U, /*!< Normal version of a PKHA operation */ + kLTC_PKHA_TimingEqualized = 1U /*!< Timing-equalized version of a PKHA operation */ +} ltc_pkha_timing_t; + +/*! @brief Integer vs binary polynomial arithmetic selection. */ +typedef enum _ltc_pkha_f2m_t +{ + kLTC_PKHA_IntegerArith = 0U, /*!< Use integer arithmetic */ + kLTC_PKHA_F2mArith = 1U /*!< Use binary polynomial arithmetic */ +} ltc_pkha_f2m_t; + +/*! @brief Montgomery or normal PKHA input format. */ +typedef enum _ltc_pkha_montgomery_form_t +{ + kLTC_PKHA_NormalValue = 0U, /*!< PKHA number is normal integer */ + kLTC_PKHA_MontgomeryFormat = 1U /*!< PKHA number is in montgomery format */ +} ltc_pkha_montgomery_form_t; + +/*! + *@} + */ + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @addtogroup ltc + * @{ + */ + +/*! + * @brief Initializes the LTC driver. + * This function initializes the LTC driver. + * @param base LTC peripheral base address + */ +void LTC_Init(LTC_Type *base); + +/*! + * @brief Deinitializes the LTC driver. + * This function deinitializes the LTC driver. + * @param base LTC peripheral base address + */ +void LTC_Deinit(LTC_Type *base); + +#if defined(FSL_FEATURE_LTC_HAS_DPAMS) && FSL_FEATURE_LTC_HAS_DPAMS +/*! + * @brief Sets the DPA Mask Seed register. + * + * The DPA Mask Seed register reseeds the mask that provides resistance against DPA (differential power analysis) + * attacks on AES or DES keys. + * + * Differential Power Analysis Mask (DPA) resistance uses a randomly changing mask that introduces + * "noise" into the power consumed by the AES or DES. This reduces the signal-to-noise ratio that differential + * power analysis attacks use to "guess" bits of the key. This randomly changing mask should be + * seeded at POR, and continues to provide DPA resistance from that point on. However, to provide even more + * DPA protection it is recommended that the DPA mask be reseeded after every 50,000 blocks have + * been processed. At that time, software can opt to write a new seed (preferably obtained from an RNG) + * into the DPA Mask Seed register (DPAMS), or software can opt to provide the new seed earlier or + * later, or not at all. DPA resistance continues even if the DPA mask is never reseeded. + * + * @param base LTC peripheral base address + * @param mask The DPA mask seed. + */ +void LTC_SetDpaMaskSeed(LTC_Type *base, uint32_t mask); +#endif /* FSL_FEATURE_LTC_HAS_DPAMS */ + +/*! + *@} + */ + +/******************************************************************************* + * AES API + ******************************************************************************/ + +/*! + * @addtogroup ltc_driver_aes + * @{ + */ + +/*! + * @brief Transforms an AES encrypt key (forward AES) into the decrypt key (inverse AES). + * + * Transforms the AES encrypt key (forward AES) into the decrypt key (inverse AES). + * The key derived by this function can be used as a direct load decrypt key + * for AES ECB and CBC decryption operations (keyType argument). + * + * @param base LTC peripheral base address + * @param encryptKey Input key for decrypt key transformation + * @param[out] decryptKey Output key, the decrypt form of the AES key. + * @param keySize Size of the input key and output key in bytes. Must be 16, 24, or 32. + * @return Status from key generation operation + */ +status_t LTC_AES_GenerateDecryptKey(LTC_Type *base, const uint8_t *encryptKey, uint8_t *decryptKey, uint32_t keySize); + +/*! + * @brief Encrypts AES using the ECB block mode. + * + * Encrypts AES using the ECB block mode. + * + * @param base LTC peripheral base address + * @param plaintext Input plain text to encrypt + * @param[out] ciphertext Output cipher text + * @param size Size of input and output data in bytes. Must be multiple of 16 bytes. + * @param key Input key to use for encryption + * @param keySize Size of the input key, in bytes. Must be 16, 24, or 32. + * @return Status from encrypt operation + */ +status_t LTC_AES_EncryptEcb( + LTC_Type *base, const uint8_t *plaintext, uint8_t *ciphertext, uint32_t size, const uint8_t *key, uint32_t keySize); + +/*! + * @brief Decrypts AES using ECB block mode. + * + * Decrypts AES using ECB block mode. + * + * @param base LTC peripheral base address + * @param ciphertext Input cipher text to decrypt + * @param[out] plaintext Output plain text + * @param size Size of input and output data in bytes. Must be multiple of 16 bytes. + * @param key Input key. + * @param keySize Size of the input key, in bytes. Must be 16, 24, or 32. + * @param keyType Input type of the key (allows to directly load decrypt key for AES ECB decrypt operation.) + * @return Status from decrypt operation + */ +status_t LTC_AES_DecryptEcb(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t *key, + uint32_t keySize, + ltc_aes_key_t keyType); + +/*! + * @brief Encrypts AES using CBC block mode. + * + * @param base LTC peripheral base address + * @param plaintext Input plain text to encrypt + * @param[out] ciphertext Output cipher text + * @param size Size of input and output data in bytes. Must be multiple of 16 bytes. + * @param iv Input initial vector to combine with the first input block. + * @param key Input key to use for encryption + * @param keySize Size of the input key, in bytes. Must be 16, 24, or 32. + * @return Status from encrypt operation + */ +status_t LTC_AES_EncryptCbc(LTC_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_AES_IV_SIZE], + const uint8_t *key, + uint32_t keySize); + +/*! + * @brief Decrypts AES using CBC block mode. + * + * @param base LTC peripheral base address + * @param ciphertext Input cipher text to decrypt + * @param[out] plaintext Output plain text + * @param size Size of input and output data in bytes. Must be multiple of 16 bytes. + * @param iv Input initial vector to combine with the first input block. + * @param key Input key to use for decryption + * @param keySize Size of the input key, in bytes. Must be 16, 24, or 32. + * @param keyType Input type of the key (allows to directly load decrypt key for AES CBC decrypt operation.) + * @return Status from decrypt operation + */ +status_t LTC_AES_DecryptCbc(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_AES_IV_SIZE], + const uint8_t *key, + uint32_t keySize, + ltc_aes_key_t keyType); + +/*! + * @brief Encrypts or decrypts AES using CTR block mode. + * + * Encrypts or decrypts AES using CTR block mode. + * AES CTR mode uses only forward AES cipher and same algorithm for encryption and decryption. + * The only difference between encryption and decryption is that, for encryption, the input argument + * is plain text and the output argument is cipher text. For decryption, the input argument is cipher text + * and the output argument is plain text. + * + * @param base LTC peripheral base address + * @param input Input data for CTR block mode + * @param[out] output Output data for CTR block mode + * @param size Size of input and output data in bytes + * @param[in,out] counter Input counter (updates on return) + * @param key Input key to use for forward AES cipher + * @param keySize Size of the input key, in bytes. Must be 16, 24, or 32. + * @param[out] counterlast Output cipher of last counter, for chained CTR calls. NULL can be passed if chained calls are + * not used. + * @param[out] szLeft Output number of bytes in left unused in counterlast block. NULL can be passed if chained calls + * are not used. + * @return Status from encrypt operation + */ +status_t LTC_AES_CryptCtr(LTC_Type *base, + const uint8_t *input, + uint8_t *output, + uint32_t size, + uint8_t counter[LTC_AES_BLOCK_SIZE], + const uint8_t *key, + uint32_t keySize, + uint8_t counterlast[LTC_AES_BLOCK_SIZE], + uint32_t *szLeft); + +/*! AES CTR decrypt is mapped to the AES CTR generic operation */ +#define LTC_AES_DecryptCtr(base, input, output, size, counter, key, keySize, counterlast, szLeft) \ + LTC_AES_CryptCtr(base, input, output, size, counter, key, keySize, counterlast, szLeft) + +/*! AES CTR encrypt is mapped to the AES CTR generic operation */ +#define LTC_AES_EncryptCtr(base, input, output, size, counter, key, keySize, counterlast, szLeft) \ + LTC_AES_CryptCtr(base, input, output, size, counter, key, keySize, counterlast, szLeft) + +#if defined(FSL_FEATURE_LTC_HAS_GCM) && FSL_FEATURE_LTC_HAS_GCM +/*! + * @brief Encrypts AES and tags using GCM block mode. + * + * Encrypts AES and optionally tags using GCM block mode. If plaintext is NULL, only the GHASH is calculated and output + * in the 'tag' field. + * + * @param base LTC peripheral base address + * @param plaintext Input plain text to encrypt + * @param[out] ciphertext Output cipher text. + * @param size Size of input and output data in bytes + * @param iv Input initial vector + * @param ivSize Size of the IV + * @param aad Input additional authentication data + * @param aadSize Input size in bytes of AAD + * @param key Input key to use for encryption + * @param keySize Size of the input key, in bytes. Must be 16, 24, or 32. + * @param[out] tag Output hash tag. Set to NULL to skip tag processing. + * @param tagSize Input size of the tag to generate, in bytes. Must be 4,8,12,13,14,15 or 16. + * @return Status from encrypt operation + */ +status_t LTC_AES_EncryptTagGcm(LTC_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t *iv, + uint32_t ivSize, + const uint8_t *aad, + uint32_t aadSize, + const uint8_t *key, + uint32_t keySize, + uint8_t *tag, + uint32_t tagSize); + +/*! + * @brief Decrypts AES and authenticates using GCM block mode. + * + * Decrypts AES and optionally authenticates using GCM block mode. If ciphertext is NULL, only the GHASH is calculated + * and compared with the received GHASH in 'tag' field. + * + * @param base LTC peripheral base address + * @param ciphertext Input cipher text to decrypt + * @param[out] plaintext Output plain text. + * @param size Size of input and output data in bytes + * @param iv Input initial vector + * @param ivSize Size of the IV + * @param aad Input additional authentication data + * @param aadSize Input size in bytes of AAD + * @param key Input key to use for encryption + * @param keySize Size of the input key, in bytes. Must be 16, 24, or 32. + * @param tag Input hash tag to compare. Set to NULL to skip tag processing. + * @param tagSize Input size of the tag, in bytes. Must be 4, 8, 12, 13, 14, 15, or 16. + * @return Status from decrypt operation + */ +status_t LTC_AES_DecryptTagGcm(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t *iv, + uint32_t ivSize, + const uint8_t *aad, + uint32_t aadSize, + const uint8_t *key, + uint32_t keySize, + const uint8_t *tag, + uint32_t tagSize); +#endif /* FSL_FEATURE_LTC_HAS_GCM */ + +/*! + * @brief Encrypts AES and tags using CCM block mode. + * + * Encrypts AES and optionally tags using CCM block mode. + * + * @param base LTC peripheral base address + * @param plaintext Input plain text to encrypt + * @param[out] ciphertext Output cipher text. + * @param size Size of input and output data in bytes. Zero means authentication only. + * @param iv Nonce + * @param ivSize Length of the Nonce in bytes. Must be 7, 8, 9, 10, 11, 12, or 13. + * @param aad Input additional authentication data. Can be NULL if aadSize is zero. + * @param aadSize Input size in bytes of AAD. Zero means data mode only (authentication skipped). + * @param key Input key to use for encryption + * @param keySize Size of the input key, in bytes. Must be 16, 24, or 32. + * @param[out] tag Generated output tag. Set to NULL to skip tag processing. + * @param tagSize Input size of the tag to generate, in bytes. Must be 4, 6, 8, 10, 12, 14, or 16. + * @return Status from encrypt operation + */ +status_t LTC_AES_EncryptTagCcm(LTC_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t *iv, + uint32_t ivSize, + const uint8_t *aad, + uint32_t aadSize, + const uint8_t *key, + uint32_t keySize, + uint8_t *tag, + uint32_t tagSize); + +/*! + * @brief Decrypts AES and authenticates using CCM block mode. + * + * Decrypts AES and optionally authenticates using CCM block mode. + * + * @param base LTC peripheral base address + * @param ciphertext Input cipher text to decrypt + * @param[out] plaintext Output plain text. + * @param size Size of input and output data in bytes. Zero means authentication only. + * @param iv Nonce + * @param ivSize Length of the Nonce in bytes. Must be 7, 8, 9, 10, 11, 12, or 13. + * @param aad Input additional authentication data. Can be NULL if aadSize is zero. + * @param aadSize Input size in bytes of AAD. Zero means data mode only (authentication skipped). + * @param key Input key to use for decryption + * @param keySize Size of the input key, in bytes. Must be 16, 24, or 32. + * @param tag Received tag. Set to NULL to skip tag processing. + * @param tagSize Input size of the received tag to compare with the computed tag, in bytes. Must be 4, 6, 8, 10, 12, + * 14, or 16. + * @return Status from decrypt operation + */ +status_t LTC_AES_DecryptTagCcm(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t *iv, + uint32_t ivSize, + const uint8_t *aad, + uint32_t aadSize, + const uint8_t *key, + uint32_t keySize, + const uint8_t *tag, + uint32_t tagSize); + +/*! + *@} + */ + +/******************************************************************************* + * DES API + ******************************************************************************/ +/*! + * @addtogroup ltc_driver_des + * @{ + */ +/*! + * @brief Encrypts DES using ECB block mode. + * + * Encrypts DES using ECB block mode. + * + * @param base LTC peripheral base address + * @param plaintext Input plaintext to encrypt + * @param[out] ciphertext Output ciphertext + * @param size Size of input and output data in bytes. Must be multiple of 8 bytes. + * @param key Input key to use for encryption + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES_EncryptEcb( + LTC_Type *base, const uint8_t *plaintext, uint8_t *ciphertext, uint32_t size, const uint8_t key[LTC_DES_KEY_SIZE]); + +/*! + * @brief Decrypts DES using ECB block mode. + * + * Decrypts DES using ECB block mode. + * + * @param base LTC peripheral base address + * @param ciphertext Input ciphertext to decrypt + * @param[out] plaintext Output plaintext + * @param size Size of input and output data in bytes. Must be multiple of 8 bytes. + * @param key Input key to use for decryption + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES_DecryptEcb( + LTC_Type *base, const uint8_t *ciphertext, uint8_t *plaintext, uint32_t size, const uint8_t key[LTC_DES_KEY_SIZE]); + +/*! + * @brief Encrypts DES using CBC block mode. + * + * Encrypts DES using CBC block mode. + * + * @param base LTC peripheral base address + * @param plaintext Input plaintext to encrypt + * @param[out] ciphertext Ouput ciphertext + * @param size Size of input and output data in bytes + * @param iv Input initial vector to combine with the first plaintext block. + * The iv does not need to be secret, but it must be unpredictable. + * @param key Input key to use for encryption + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES_EncryptCbc(LTC_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key[LTC_DES_KEY_SIZE]); + +/*! + * @brief Decrypts DES using CBC block mode. + * + * Decrypts DES using CBC block mode. + * + * @param base LTC peripheral base address + * @param ciphertext Input ciphertext to decrypt + * @param[out] plaintext Output plaintext + * @param size Size of input data in bytes + * @param iv Input initial vector to combine with the first plaintext block. + * The iv does not need to be secret, but it must be unpredictable. + * @param key Input key to use for decryption + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES_DecryptCbc(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key[LTC_DES_KEY_SIZE]); + +/*! + * @brief Encrypts DES using CFB block mode. + * + * Encrypts DES using CFB block mode. + * + * @param base LTC peripheral base address + * @param plaintext Input plaintext to encrypt + * @param size Size of input data in bytes + * @param iv Input initial block. + * @param key Input key to use for encryption + * @param[out] ciphertext Output ciphertext + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES_EncryptCfb(LTC_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key[LTC_DES_KEY_SIZE]); + +/*! + * @brief Decrypts DES using CFB block mode. + * + * Decrypts DES using CFB block mode. + * + * @param base LTC peripheral base address + * @param ciphertext Input ciphertext to decrypt + * @param[out] plaintext Output plaintext + * @param size Size of input and output data in bytes + * @param iv Input initial block. + * @param key Input key to use for decryption + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES_DecryptCfb(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key[LTC_DES_KEY_SIZE]); + +/*! + * @brief Encrypts DES using OFB block mode. + * + * Encrypts DES using OFB block mode. + * + * @param base LTC peripheral base address + * @param plaintext Input plaintext to encrypt + * @param[out] ciphertext Output ciphertext + * @param size Size of input and output data in bytes + * @param iv Input unique input vector. The OFB mode requires that the IV be unique + * for each execution of the mode under the given key. + * @param key Input key to use for encryption + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES_EncryptOfb(LTC_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key[LTC_DES_KEY_SIZE]); + +/*! + * @brief Decrypts DES using OFB block mode. + * + * Decrypts DES using OFB block mode. + * + * @param base LTC peripheral base address + * @param ciphertext Input ciphertext to decrypt + * @param[out] plaintext Output plaintext + * @param size Size of input and output data in bytes. Must be multiple of 8 bytes. + * @param iv Input unique input vector. The OFB mode requires that the IV be unique + * for each execution of the mode under the given key. + * @param key Input key to use for decryption + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES_DecryptOfb(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key[LTC_DES_KEY_SIZE]); + +/*! + * @brief Encrypts triple DES using ECB block mode with two keys. + * + * Encrypts triple DES using ECB block mode with two keys. + * + * @param base LTC peripheral base address + * @param plaintext Input plaintext to encrypt + * @param[out] ciphertext Output ciphertext + * @param size Size of input and output data in bytes. Must be multiple of 8 bytes. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES2_EncryptEcb(LTC_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]); + +/*! + * @brief Decrypts triple DES using ECB block mode with two keys. + * + * Decrypts triple DES using ECB block mode with two keys. + * + * @param base LTC peripheral base address + * @param ciphertext Input ciphertext to decrypt + * @param[out] plaintext Output plaintext + * @param size Size of input and output data in bytes. Must be multiple of 8 bytes. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES2_DecryptEcb(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]); + +/*! + * @brief Encrypts triple DES using CBC block mode with two keys. + * + * Encrypts triple DES using CBC block mode with two keys. + * + * @param base LTC peripheral base address + * @param plaintext Input plaintext to encrypt + * @param[out] ciphertext Output ciphertext + * @param size Size of input and output data in bytes + * @param iv Input initial vector to combine with the first plaintext block. + * The iv does not need to be secret, but it must be unpredictable. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES2_EncryptCbc(LTC_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]); + +/*! + * @brief Decrypts triple DES using CBC block mode with two keys. + * + * Decrypts triple DES using CBC block mode with two keys. + * + * @param base LTC peripheral base address + * @param ciphertext Input ciphertext to decrypt + * @param[out] plaintext Output plaintext + * @param size Size of input and output data in bytes + * @param iv Input initial vector to combine with the first plaintext block. + * The iv does not need to be secret, but it must be unpredictable. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES2_DecryptCbc(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]); + +/*! + * @brief Encrypts triple DES using CFB block mode with two keys. + * + * Encrypts triple DES using CFB block mode with two keys. + * + * @param base LTC peripheral base address + * @param plaintext Input plaintext to encrypt + * @param[out] ciphertext Output ciphertext + * @param size Size of input and output data in bytes + * @param iv Input initial block. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES2_EncryptCfb(LTC_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]); + +/*! + * @brief Decrypts triple DES using CFB block mode with two keys. + * + * Decrypts triple DES using CFB block mode with two keys. + * + * @param base LTC peripheral base address + * @param ciphertext Input ciphertext to decrypt + * @param[out] plaintext Output plaintext + * @param size Size of input and output data in bytes + * @param iv Input initial block. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES2_DecryptCfb(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]); + +/*! + * @brief Encrypts triple DES using OFB block mode with two keys. + * + * Encrypts triple DES using OFB block mode with two keys. + * + * @param base LTC peripheral base address + * @param plaintext Input plaintext to encrypt + * @param[out] ciphertext Output ciphertext + * @param size Size of input and output data in bytes + * @param iv Input unique input vector. The OFB mode requires that the IV be unique + * for each execution of the mode under the given key. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES2_EncryptOfb(LTC_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]); + +/*! + * @brief Decrypts triple DES using OFB block mode with two keys. + * + * Decrypts triple DES using OFB block mode with two keys. + * + * @param base LTC peripheral base address + * @param ciphertext Input ciphertext to decrypt + * @param[out] plaintext Output plaintext + * @param size Size of input and output data in bytes + * @param iv Input unique input vector. The OFB mode requires that the IV be unique + * for each execution of the mode under the given key. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES2_DecryptOfb(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]); + +/*! + * @brief Encrypts triple DES using ECB block mode with three keys. + * + * Encrypts triple DES using ECB block mode with three keys. + * + * @param base LTC peripheral base address + * @param plaintext Input plaintext to encrypt + * @param[out] ciphertext Output ciphertext + * @param size Size of input and output data in bytes. Must be multiple of 8 bytes. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @param key3 Third input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES3_EncryptEcb(LTC_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]); + +/*! + * @brief Decrypts triple DES using ECB block mode with three keys. + * + * Decrypts triple DES using ECB block mode with three keys. + * + * @param base LTC peripheral base address + * @param ciphertext Input ciphertext to decrypt + * @param[out] plaintext Output plaintext + * @param size Size of input and output data in bytes. Must be multiple of 8 bytes. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @param key3 Third input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES3_DecryptEcb(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]); + +/*! + * @brief Encrypts triple DES using CBC block mode with three keys. + * + * Encrypts triple DES using CBC block mode with three keys. + * + * @param base LTC peripheral base address + * @param plaintext Input plaintext to encrypt + * @param[out] ciphertext Output ciphertext + * @param size Size of input data in bytes + * @param iv Input initial vector to combine with the first plaintext block. + * The iv does not need to be secret, but it must be unpredictable. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @param key3 Third input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES3_EncryptCbc(LTC_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]); + +/*! + * @brief Decrypts triple DES using CBC block mode with three keys. + * + * Decrypts triple DES using CBC block mode with three keys. + * + * @param base LTC peripheral base address + * @param ciphertext Input ciphertext to decrypt + * @param[out] plaintext Output plaintext + * @param size Size of input and output data in bytes + * @param iv Input initial vector to combine with the first plaintext block. + * The iv does not need to be secret, but it must be unpredictable. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @param key3 Third input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES3_DecryptCbc(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]); + +/*! + * @brief Encrypts triple DES using CFB block mode with three keys. + * + * Encrypts triple DES using CFB block mode with three keys. + * + * @param base LTC peripheral base address + * @param plaintext Input plaintext to encrypt + * @param[out] ciphertext Output ciphertext + * @param size Size of input and ouput data in bytes + * @param iv Input initial block. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @param key3 Third input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES3_EncryptCfb(LTC_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]); + +/*! + * @brief Decrypts triple DES using CFB block mode with three keys. + * + * Decrypts triple DES using CFB block mode with three keys. + * + * @param base LTC peripheral base address + * @param ciphertext Input ciphertext to decrypt + * @param[out] plaintext Output plaintext + * @param size Size of input data in bytes + * @param iv Input initial block. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @param key3 Third input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES3_DecryptCfb(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]); + +/*! + * @brief Encrypts triple DES using OFB block mode with three keys. + * + * Encrypts triple DES using OFB block mode with three keys. + * + * @param base LTC peripheral base address + * @param plaintext Input plaintext to encrypt + * @param[out] ciphertext Output ciphertext + * @param size Size of input and output data in bytes + * @param iv Input unique input vector. The OFB mode requires that the IV be unique + * for each execution of the mode under the given key. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @param key3 Third input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES3_EncryptOfb(LTC_Type *base, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]); + +/*! + * @brief Decrypts triple DES using OFB block mode with three keys. + * + * Decrypts triple DES using OFB block mode with three keys. + * + * @param base LTC peripheral base address + * @param ciphertext Input ciphertext to decrypt + * @param[out] plaintext Output plaintext + * @param size Size of input and output data in bytes + * @param iv Input unique input vector. The OFB mode requires that the IV be unique + * for each execution of the mode under the given key. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @param key3 Third input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES3_DecryptOfb(LTC_Type *base, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]); + +/*! + *@} + */ + +/******************************************************************************* + * HASH API + ******************************************************************************/ + +/*! + * @addtogroup ltc_driver_hash + * @{ + */ +/*! + * @brief Initialize HASH context + * + * This function initialize the HASH. + * Key shall be supplied if the underlaying algoritm is AES XCBC-MAC or CMAC. + * Key shall be NULL if the underlaying algoritm is SHA. + * + * For XCBC-MAC, the key length must be 16. For CMAC, the key length can be + * the AES key lengths supported by AES engine. For MDHA the key length argument + * is ignored. + * + * @param base LTC peripheral base address + * @param[out] ctx Output hash context + * @param algo Underlaying algorithm to use for hash computation. + * @param key Input key (NULL if underlaying algorithm is SHA) + * @param keySize Size of input key in bytes + * @return Status of initialization + */ +status_t LTC_HASH_Init(LTC_Type *base, ltc_hash_ctx_t *ctx, ltc_hash_algo_t algo, const uint8_t *key, uint32_t keySize); + +/*! + * @brief Add data to current HASH + * + * Add data to current HASH. This can be called repeatedly with an arbitrary amount of data to be + * hashed. + * + * @param[in,out] ctx HASH context + * @param input Input data + * @param inputSize Size of input data in bytes + * @return Status of the hash update operation + */ +status_t LTC_HASH_Update(ltc_hash_ctx_t *ctx, const uint8_t *input, uint32_t inputSize); + +/*! + * @brief Finalize hashing + * + * Outputs the final hash and erases the context. + * + * @param[in,out] ctx Input hash context + * @param[out] output Output hash data + * @param[out] outputSize Output parameter storing the size of the output hash in bytes + * @return Status of the hash finish operation + */ +status_t LTC_HASH_Finish(ltc_hash_ctx_t *ctx, uint8_t *output, uint32_t *outputSize); + +/*! + * @brief Create HASH on given data + * + * Perform the full keyed HASH in one function call. + * + * @param base LTC peripheral base address + * @param algo Block cipher algorithm to use for CMAC creation + * @param input Input data + * @param inputSize Size of input data in bytes + * @param key Input key + * @param keySize Size of input key in bytes + * @param[out] output Output hash data + * @param[out] outputSize Output parameter storing the size of the output hash in bytes + * @return Status of the one call hash operation. + */ +status_t LTC_HASH(LTC_Type *base, + ltc_hash_algo_t algo, + const uint8_t *input, + uint32_t inputSize, + const uint8_t *key, + uint32_t keySize, + uint8_t *output, + uint32_t *outputSize); +/*! + *@} + */ + +/******************************************************************************* + * PKHA API + ******************************************************************************/ +/*! + * @addtogroup ltc_driver_pkha + * @{ + */ + +/*! + * @brief Compare two PKHA big numbers. + * + * Compare two PKHA big numbers. Return 1 for a > b, -1 for a < b and 0 if they are same. + * PKHA big number is lsbyte first. Thus the comparison starts at msbyte which is the last member of tested arrays. + * + * @param a First integer represented as an array of bytes, lsbyte first. + * @param sizeA Size in bytes of the first integer. + * @param b Second integer represented as an array of bytes, lsbyte first. + * @param sizeB Size in bytes of the second integer. + * @return 1 if a > b. + * @return -1 if a < b. + * @return 0 if a = b. + */ +int LTC_PKHA_CompareBigNum(const uint8_t *a, size_t sizeA, const uint8_t *b, size_t sizeB); + +/*! + * @brief Converts from integer to Montgomery format. + * + * This function computes R2 mod N and optionally converts A or B into Montgomery format of A or B. + * + * @param base LTC peripheral base address + * @param N modulus + * @param sizeN size of N in bytes + * @param[in,out] A The first input in non-Montgomery format. Output Montgomery format of the first input. + * @param[in,out] sizeA pointer to size variable. On input it holds size of input A in bytes. On output it holds size of + * Montgomery format of A in bytes. + * @param[in,out] B Second input in non-Montgomery format. Output Montgomery format of the second input. + * @param[in,out] sizeB pointer to size variable. On input it holds size of input B in bytes. On output it holds size of + * Montgomery format of B in bytes. + * @param[out] R2 Output Montgomery factor R2 mod N. + * @param[out] sizeR2 pointer to size variable. On output it holds size of Montgomery factor R2 mod N in bytes. + * @param equalTime Run the function time equalized or no timing equalization. + * @param arithType Type of arithmetic to perform (integer or F2m) + * @return Operation status. + */ +status_t LTC_PKHA_NormalToMontgomery(LTC_Type *base, + const uint8_t *N, + uint16_t sizeN, + uint8_t *A, + uint16_t *sizeA, + uint8_t *B, + uint16_t *sizeB, + uint8_t *R2, + uint16_t *sizeR2, + ltc_pkha_timing_t equalTime, + ltc_pkha_f2m_t arithType); + +/*! + * @brief Converts from Montgomery format to int. + * + * This function converts Montgomery format of A or B into int A or B. + * + * @param base LTC peripheral base address + * @param N modulus. + * @param sizeN size of N modulus in bytes. + * @param[in,out] A Input first number in Montgomery format. Output is non-Montgomery format. + * @param[in,out] sizeA pointer to size variable. On input it holds size of the input A in bytes. On output it holds + * size of non-Montgomery A in bytes. + * @param[in,out] B Input first number in Montgomery format. Output is non-Montgomery format. + * @param[in,out] sizeB pointer to size variable. On input it holds size of the input B in bytes. On output it holds + * size of non-Montgomery B in bytes. + * @param equalTime Run the function time equalized or no timing equalization. + * @param arithType Type of arithmetic to perform (integer or F2m) + * @return Operation status. + */ +status_t LTC_PKHA_MontgomeryToNormal(LTC_Type *base, + const uint8_t *N, + uint16_t sizeN, + uint8_t *A, + uint16_t *sizeA, + uint8_t *B, + uint16_t *sizeB, + ltc_pkha_timing_t equalTime, + ltc_pkha_f2m_t arithType); + +/*! + * @brief Performs modular addition - (A + B) mod N. + * + * This function performs modular addition of (A + B) mod N, with either + * integer or binary polynomial (F2m) inputs. In the F2m form, this function is + * equivalent to a bitwise XOR and it is functionally the same as subtraction. + * + * @param base LTC peripheral base address + * @param A first addend (integer or binary polynomial) + * @param sizeA Size of A in bytes + * @param B second addend (integer or binary polynomial) + * @param sizeB Size of B in bytes + * @param N modulus. For F2m operation this can be NULL, as N is ignored during F2m polynomial addition. + * @param sizeN Size of N in bytes. This must be given for both integer and F2m polynomial additions. + * @param[out] result Output array to store result of operation + * @param[out] resultSize Output size of operation in bytes + * @param arithType Type of arithmetic to perform (integer or F2m) + * @return Operation status. + */ +status_t LTC_PKHA_ModAdd(LTC_Type *base, + const uint8_t *A, + uint16_t sizeA, + const uint8_t *B, + uint16_t sizeB, + const uint8_t *N, + uint16_t sizeN, + uint8_t *result, + uint16_t *resultSize, + ltc_pkha_f2m_t arithType); + +/*! + * @brief Performs modular subtraction - (A - B) mod N. + * + * This function performs modular subtraction of (A - B) mod N with + * integer inputs. + * + * @param base LTC peripheral base address + * @param A first addend (integer or binary polynomial) + * @param sizeA Size of A in bytes + * @param B second addend (integer or binary polynomial) + * @param sizeB Size of B in bytes + * @param N modulus + * @param sizeN Size of N in bytes + * @param[out] result Output array to store result of operation + * @param[out] resultSize Output size of operation in bytes + * @return Operation status. + */ +status_t LTC_PKHA_ModSub1(LTC_Type *base, + const uint8_t *A, + uint16_t sizeA, + const uint8_t *B, + uint16_t sizeB, + const uint8_t *N, + uint16_t sizeN, + uint8_t *result, + uint16_t *resultSize); + +/*! + * @brief Performs modular subtraction - (B - A) mod N. + * + * This function performs modular subtraction of (B - A) mod N, + * with integer inputs. + * + * @param base LTC peripheral base address + * @param A first addend (integer or binary polynomial) + * @param sizeA Size of A in bytes + * @param B second addend (integer or binary polynomial) + * @param sizeB Size of B in bytes + * @param N modulus + * @param sizeN Size of N in bytes + * @param[out] result Output array to store result of operation + * @param[out] resultSize Output size of operation in bytes + * @return Operation status. + */ +status_t LTC_PKHA_ModSub2(LTC_Type *base, + const uint8_t *A, + uint16_t sizeA, + const uint8_t *B, + uint16_t sizeB, + const uint8_t *N, + uint16_t sizeN, + uint8_t *result, + uint16_t *resultSize); + +/*! + * @brief Performs modular multiplication - (A x B) mod N. + * + * This function performs modular multiplication with either integer or + * binary polynomial (F2m) inputs. It can optionally specify whether inputs + * and/or outputs will be in Montgomery form or not. + * + * @param base LTC peripheral base address + * @param A first addend (integer or binary polynomial) + * @param sizeA Size of A in bytes + * @param B second addend (integer or binary polynomial) + * @param sizeB Size of B in bytes + * @param N modulus. + * @param sizeN Size of N in bytes + * @param[out] result Output array to store result of operation + * @param[out] resultSize Output size of operation in bytes + * @param arithType Type of arithmetic to perform (integer or F2m) + * @param montIn Format of inputs + * @param montOut Format of output + * @param equalTime Run the function time equalized or no timing equalization. This argument is ignored for F2m modular + * multiplication. + * @return Operation status. + */ +status_t LTC_PKHA_ModMul(LTC_Type *base, + const uint8_t *A, + uint16_t sizeA, + const uint8_t *B, + uint16_t sizeB, + const uint8_t *N, + uint16_t sizeN, + uint8_t *result, + uint16_t *resultSize, + ltc_pkha_f2m_t arithType, + ltc_pkha_montgomery_form_t montIn, + ltc_pkha_montgomery_form_t montOut, + ltc_pkha_timing_t equalTime); + +/*! + * @brief Performs modular exponentiation - (A^E) mod N. + * + * This function performs modular exponentiation with either integer or + * binary polynomial (F2m) inputs. + * + * @param base LTC peripheral base address + * @param A first addend (integer or binary polynomial) + * @param sizeA Size of A in bytes + * @param N modulus + * @param sizeN Size of N in bytes + * @param E exponent + * @param sizeE Size of E in bytes + * @param[out] result Output array to store result of operation + * @param[out] resultSize Output size of operation in bytes + * @param montIn Format of A input (normal or Montgomery) + * @param arithType Type of arithmetic to perform (integer or F2m) + * @param equalTime Run the function time equalized or no timing equalization. + * @return Operation status. + */ +status_t LTC_PKHA_ModExp(LTC_Type *base, + const uint8_t *A, + uint16_t sizeA, + const uint8_t *N, + uint16_t sizeN, + const uint8_t *E, + uint16_t sizeE, + uint8_t *result, + uint16_t *resultSize, + ltc_pkha_f2m_t arithType, + ltc_pkha_montgomery_form_t montIn, + ltc_pkha_timing_t equalTime); + +/*! + * @brief Performs modular reduction - (A) mod N. + * + * This function performs modular reduction with either integer or + * binary polynomial (F2m) inputs. + * + * @param base LTC peripheral base address + * @param A first addend (integer or binary polynomial) + * @param sizeA Size of A in bytes + * @param N modulus + * @param sizeN Size of N in bytes + * @param[out] result Output array to store result of operation + * @param[out] resultSize Output size of operation in bytes + * @param arithType Type of arithmetic to perform (integer or F2m) + * @return Operation status. + */ +status_t LTC_PKHA_ModRed(LTC_Type *base, + const uint8_t *A, + uint16_t sizeA, + const uint8_t *N, + uint16_t sizeN, + uint8_t *result, + uint16_t *resultSize, + ltc_pkha_f2m_t arithType); + +/*! + * @brief Performs modular inversion - (A^-1) mod N. + * + * This function performs modular inversion with either integer or + * binary polynomial (F2m) inputs. + * + * @param base LTC peripheral base address + * @param A first addend (integer or binary polynomial) + * @param sizeA Size of A in bytes + * @param N modulus + * @param sizeN Size of N in bytes + * @param[out] result Output array to store result of operation + * @param[out] resultSize Output size of operation in bytes + * @param arithType Type of arithmetic to perform (integer or F2m) + * @return Operation status. + */ +status_t LTC_PKHA_ModInv(LTC_Type *base, + const uint8_t *A, + uint16_t sizeA, + const uint8_t *N, + uint16_t sizeN, + uint8_t *result, + uint16_t *resultSize, + ltc_pkha_f2m_t arithType); + +/*! + * @brief Computes integer Montgomery factor R^2 mod N. + * + * This function computes a constant to assist in converting operands + * into the Montgomery residue system representation. + * + * @param base LTC peripheral base address + * @param N modulus + * @param sizeN Size of N in bytes + * @param[out] result Output array to store result of operation + * @param[out] resultSize Output size of operation in bytes + * @param arithType Type of arithmetic to perform (integer or F2m) + * @return Operation status. + */ +status_t LTC_PKHA_ModR2( + LTC_Type *base, const uint8_t *N, uint16_t sizeN, uint8_t *result, uint16_t *resultSize, ltc_pkha_f2m_t arithType); + +/*! + * @brief Calculates the greatest common divisor - GCD (A, N). + * + * This function calculates the greatest common divisor of two inputs with + * either integer or binary polynomial (F2m) inputs. + * + * @param base LTC peripheral base address + * @param A first value (must be smaller than or equal to N) + * @param sizeA Size of A in bytes + * @param N second value (must be non-zero) + * @param sizeN Size of N in bytes + * @param[out] result Output array to store result of operation + * @param[out] resultSize Output size of operation in bytes + * @param arithType Type of arithmetic to perform (integer or F2m) + * @return Operation status. + */ +status_t LTC_PKHA_GCD(LTC_Type *base, + const uint8_t *A, + uint16_t sizeA, + const uint8_t *N, + uint16_t sizeN, + uint8_t *result, + uint16_t *resultSize, + ltc_pkha_f2m_t arithType); + +/*! + * @brief Executes Miller-Rabin primality test. + * + * This function calculates whether or not a candidate prime number is likely + * to be a prime. + * + * @param base LTC peripheral base address + * @param A initial random seed + * @param sizeA Size of A in bytes + * @param B number of trial runs + * @param sizeB Size of B in bytes + * @param N candidate prime integer + * @param sizeN Size of N in bytes + * @param[out] res True if the value is likely prime or false otherwise + * @return Operation status. + */ +status_t LTC_PKHA_PrimalityTest(LTC_Type *base, + const uint8_t *A, + uint16_t sizeA, + const uint8_t *B, + uint16_t sizeB, + const uint8_t *N, + uint16_t sizeN, + bool *res); + +/*! + * @brief Adds elliptic curve points - A + B. + * + * This function performs ECC point addition over a prime field (Fp) or binary field (F2m) using + * affine coordinates. + * + * @param base LTC peripheral base address + * @param A Left-hand point + * @param B Right-hand point + * @param N Prime modulus of the field + * @param R2modN NULL (the function computes R2modN internally) or pointer to pre-computed R2modN (obtained from + * LTC_PKHA_ModR2() function). + * @param aCurveParam A parameter from curve equation + * @param bCurveParam B parameter from curve equation (constant) + * @param size Size in bytes of curve points and parameters + * @param arithType Type of arithmetic to perform (integer or F2m) + * @param[out] result Result point + * @return Operation status. + */ +status_t LTC_PKHA_ECC_PointAdd(LTC_Type *base, + const ltc_pkha_ecc_point_t *A, + const ltc_pkha_ecc_point_t *B, + const uint8_t *N, + const uint8_t *R2modN, + const uint8_t *aCurveParam, + const uint8_t *bCurveParam, + uint8_t size, + ltc_pkha_f2m_t arithType, + ltc_pkha_ecc_point_t *result); + +/*! + * @brief Doubles elliptic curve points - B + B. + * + * This function performs ECC point doubling over a prime field (Fp) or binary field (F2m) using + * affine coordinates. + * + * @param base LTC peripheral base address + * @param B Point to double + * @param N Prime modulus of the field + * @param aCurveParam A parameter from curve equation + * @param bCurveParam B parameter from curve equation (constant) + * @param size Size in bytes of curve points and parameters + * @param arithType Type of arithmetic to perform (integer or F2m) + * @param[out] result Result point + * @return Operation status. + */ +status_t LTC_PKHA_ECC_PointDouble(LTC_Type *base, + const ltc_pkha_ecc_point_t *B, + const uint8_t *N, + const uint8_t *aCurveParam, + const uint8_t *bCurveParam, + uint8_t size, + ltc_pkha_f2m_t arithType, + ltc_pkha_ecc_point_t *result); + +/*! + * @brief Multiplies an elliptic curve point by a scalar - E x (A0, A1). + * + * This function performs ECC point multiplication to multiply an ECC point by + * a scalar integer multiplier over a prime field (Fp) or a binary field (F2m). + * + * @param base LTC peripheral base address + * @param A Point as multiplicand + * @param E Scalar multiple + * @param sizeE The size of E, in bytes + * @param N Modulus, a prime number for the Fp field or Irreducible polynomial for F2m field. + * @param R2modN NULL (the function computes R2modN internally) or pointer to pre-computed R2modN (obtained from + * LTC_PKHA_ModR2() function). + * @param aCurveParam A parameter from curve equation + * @param bCurveParam B parameter from curve equation (C parameter for operation over F2m). + * @param size Size in bytes of curve points and parameters + * @param equalTime Run the function time equalized or no timing equalization. + * @param arithType Type of arithmetic to perform (integer or F2m) + * @param[out] result Result point + * @param[out] infinity Output true if the result is point of infinity, and false otherwise. Writing of this output will + * be ignored if the argument is NULL. + * @return Operation status. + */ +status_t LTC_PKHA_ECC_PointMul(LTC_Type *base, + const ltc_pkha_ecc_point_t *A, + const uint8_t *E, + uint8_t sizeE, + const uint8_t *N, + const uint8_t *R2modN, + const uint8_t *aCurveParam, + const uint8_t *bCurveParam, + uint8_t size, + ltc_pkha_timing_t equalTime, + ltc_pkha_f2m_t arithType, + ltc_pkha_ecc_point_t *result, + bool *infinity); + +/*! + *@} + */ + +#if defined(__cplusplus) +} +#endif + +/*! + *@} + */ + +#endif /* _FSL_LTC_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_ltc_edma.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_ltc_edma.c new file mode 100644 index 00000000000..93e969b6a2e --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_ltc_edma.c @@ -0,0 +1,1247 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_ltc_edma.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*modeReg = base->MD; + retval = kStatus_Success; + + if ((!handle->inData) || (!handle->outData)) + { + handle->state = LTC_SM_STATE_FINISH; /* END */ + retval = kStatus_InvalidArgument; + } + + while (exit_sm == false) + { + switch (handle->state) + { + case LTC_SM_STATE_START: + if (handle->size) + { + uint32_t sz; + + if (handle->size <= LTC_FIFO_SZ_MAX_DOWN_ALGN) + { + sz = handle->size; + } + else + { + sz = LTC_FIFO_SZ_MAX_DOWN_ALGN; + } + + /* retval = ltc_symmetric_process_data_EDMA(base, handle->inData, sz, handle->outData); */ + { + uint32_t lastSize; + uint32_t inSize = sz; + + /* Write the data size. */ + base->DS = inSize; + + /* Split the inSize into full 16-byte chunks and last incomplete block due to LTC AES OFIFO + * errata */ + if (inSize <= 16u) + { + lastSize = inSize; + inSize = 0; + } + else + { + /* Process all 16-byte data chunks. */ + lastSize = inSize % 16u; + if (lastSize == 0) + { + lastSize = 16; + inSize -= 16; + } + else + { + inSize -= + lastSize; /* inSize will be rounded down to 16 byte boundary. remaining bytes in + lastSize */ + } + } + + if (inSize) + { + handle->size -= inSize; + ltc_symmetric_process_EDMA(base, inSize, &handle->inData, &handle->outData); + exit_sm = true; + } + else if (lastSize) + { + ltc_symmetric_process(base, lastSize, &handle->inData, &handle->outData); + retval = ltc_wait(base); + handle->size -= lastSize; + } + else + { + } + } + } + else + { + handle->state = LTC_SM_STATE_FINISH; + } + break; + case LTC_SM_STATE_FINISH: + default: + base->MD = handle->modeReg; + + ltc_clear_all(base, false); + + if (handle->callback) + { + handle->callback(base, handle, retval, handle->userData); + } + exit_sm = true; + break; + } + } + + return retval; +} + +/*! + * @brief Splits the LTC job into sessions. Used for CBC, CTR, CFB, OFB cipher block modes. + * + * @param base LTC peripheral base address + * @param inData Input data to process. + * @param inSize Input size of the input buffer. + * @param outData Output data buffer. + */ +static status_t ltc_process_message_in_sessions_ctr_EDMA(LTC_Type *base, ltc_edma_handle_t *handle) +{ + status_t retval; + bool exit_sm = false; + + handle->modeReg = base->MD; + retval = kStatus_Success; + + if ((!handle->inData) || (!handle->outData)) + { + handle->state = LTC_SM_STATE_FINISH; + retval = kStatus_InvalidArgument; + } + + while (exit_sm == false) + { + switch (handle->state) + { + case LTC_SM_STATE_START: + if (handle->size) + { + uint32_t sz; + + if (handle->size <= LTC_FIFO_SZ_MAX_DOWN_ALGN) + { + sz = handle->size; + } + else + { + sz = LTC_FIFO_SZ_MAX_DOWN_ALGN; + } + + /* retval = ltc_symmetric_process_data_EDMA(base, handle->inData, sz, handle->outData); */ + { + uint32_t lastSize; + uint32_t inSize = sz; + + /* Write the data size. */ + base->DS = inSize; + + /* Split the inSize into full 16-byte chunks and last incomplete block due to LTC AES OFIFO + * errata */ + if (inSize <= 16u) + { + lastSize = inSize; + inSize = 0; + } + else + { + /* Process all 16-byte data chunks. */ + lastSize = inSize % 16u; + if (lastSize == 0) + { + lastSize = 16; + inSize -= 16; + } + else + { + inSize -= + lastSize; /* inSize will be rounded down to 16 byte boundary. remaining bytes in + lastSize */ + } + } + + if (inSize) + { + handle->size -= inSize; + ltc_symmetric_process_EDMA(base, inSize, &handle->inData, &handle->outData); + exit_sm = true; + } + else if (lastSize) + { + ltc_symmetric_process(base, lastSize, &handle->inData, &handle->outData); + retval = ltc_wait(base); + handle->size -= lastSize; + } + else + { + } + } + } + else + { + handle->state = LTC_SM_STATE_FINISH; + } + break; + case LTC_SM_STATE_FINISH: + default: + base->MD = handle->modeReg; + + /* CTR final phase.*/ + if (kStatus_Success == retval) + { + const uint8_t *input = handle->inData; + uint8_t *output = handle->outData; + + if ((handle->counterlast != NULL) && (handle->lastSize)) + { + uint8_t zeroes[16] = {0}; + ltc_mode_t modeReg; + + modeReg = (uint32_t)kLTC_AlgorithmAES | (uint32_t)kLTC_ModeCTR | (uint32_t)kLTC_ModeEncrypt; + /* Write the mode register to the hardware. */ + base->MD = modeReg | (uint32_t)kLTC_ModeFinalize; + + /* context is re-used (CTRi) */ + + /* Process data and return status. */ + retval = ltc_symmetric_process_data(base, input, handle->lastSize, output); + if (kStatus_Success == retval) + { + if (handle->szLeft) + { + *handle->szLeft = 16U - handle->lastSize; + } + + /* Initialize algorithm state. */ + base->MD = modeReg | (uint32_t)kLTC_ModeUpdate; + + /* context is re-used (CTRi) */ + + /* Process data and return status. */ + retval = ltc_symmetric_process_data(base, zeroes, 16U, handle->counterlast); + } + } + if (kStatus_Success == retval) + { + ltc_get_context(base, &handle->counter[0], 16U, 4U); + + ltc_clear_all(base, false); + } + } + + if (handle->callback) + { + handle->callback(base, handle, retval, handle->userData); + } + + exit_sm = true; + break; + } + } + + return retval; +} + +/******************************************************************************* + * AES Code public + ******************************************************************************/ + +status_t LTC_AES_EncryptEcbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t *key, + uint32_t keySize) +{ + status_t retval; + + if ((ltc_check_key_size(keySize) == 0) || (size < 16u) || + (size % 16u)) /* ECB mode, size must be 16-byte multiple */ + { + if (handle->callback) + { + handle->callback(base, handle, kStatus_InvalidArgument, handle->userData); + } + + return kStatus_InvalidArgument; + } + + /* Initialize algorithm state. */ + ltc_symmetric_update(base, key, keySize, kLTC_AlgorithmAES, kLTC_ModeECB, kLTC_ModeEncrypt); + + /* Process data and return status. */ + handle->inData = &plaintext[0]; + handle->outData = &ciphertext[0]; + handle->size = size; + handle->state = LTC_SM_STATE_START; + handle->state_machine = ltc_process_message_in_sessions_EDMA; + retval = handle->state_machine(base, handle); + return retval; +} + +status_t LTC_AES_DecryptEcbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t *key, + uint32_t keySize, + ltc_aes_key_t keyType) +{ + status_t status; + + if ((ltc_check_key_size(keySize) == 0) || (size < 16u) || + (size % 16u)) /* ECB mode, size must be 16-byte multiple */ + { + if (handle->callback) + { + handle->callback(base, handle, kStatus_InvalidArgument, handle->userData); + } + + return kStatus_InvalidArgument; + } + + /* Initialize algorithm state. */ + ltc_symmetric_update(base, key, keySize, kLTC_AlgorithmAES, kLTC_ModeECB, kLTC_ModeDecrypt); + + /* set DK bit in the LTC Mode Register AAI field for directly loaded decrypt keys */ + if (keyType == kLTC_DecryptKey) + { + base->MD |= (1U << kLTC_ModeRegBitShiftDK); + } + + /* Process data and return status. */ + handle->inData = &ciphertext[0]; + handle->outData = &plaintext[0]; + handle->size = size; + handle->state = LTC_SM_STATE_START; + handle->state_machine = ltc_process_message_in_sessions_EDMA; + status = handle->state_machine(base, handle); + + return status; +} + +status_t LTC_AES_EncryptCbcEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_AES_IV_SIZE], + const uint8_t *key, + uint32_t keySize) +{ + status_t retval; + + if ((ltc_check_key_size(keySize) == 0) || (size < 16u) || + (size % 16u)) /* CBC mode, size must be 16-byte multiple */ + { + if (handle->callback) + { + handle->callback(base, handle, kStatus_InvalidArgument, handle->userData); + } + + return kStatus_InvalidArgument; + } + + /* Initialize algorithm state. */ + ltc_symmetric_update(base, key, keySize, kLTC_AlgorithmAES, kLTC_ModeCBC, kLTC_ModeEncrypt); + + /* Write IV data to the context register. */ + ltc_set_context(base, &iv[0], LTC_AES_IV_SIZE, 0); + + /* Process data and return status. */ + handle->inData = &plaintext[0]; + handle->outData = &ciphertext[0]; + handle->size = size; + handle->state = LTC_SM_STATE_START; + handle->state_machine = ltc_process_message_in_sessions_EDMA; + retval = handle->state_machine(base, handle); + return retval; +} + +status_t LTC_AES_DecryptCbcEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_AES_IV_SIZE], + const uint8_t *key, + uint32_t keySize, + ltc_aes_key_t keyType) +{ + status_t retval; + + if ((ltc_check_key_size(keySize) == 0) || (size < 16u) || + (size % 16u)) /* CBC mode, size must be 16-byte multiple */ + { + if (handle->callback) + { + handle->callback(base, handle, kStatus_InvalidArgument, handle->userData); + } + + return kStatus_InvalidArgument; + } + + /* set DK bit in the LTC Mode Register AAI field for directly loaded decrypt keys */ + if (keyType == kLTC_DecryptKey) + { + base->MD |= (1U << kLTC_ModeRegBitShiftDK); + } + + /* Initialize algorithm state. */ + ltc_symmetric_update(base, key, keySize, kLTC_AlgorithmAES, kLTC_ModeCBC, kLTC_ModeDecrypt); + + /* Write IV data to the context register. */ + ltc_set_context(base, &iv[0], LTC_AES_IV_SIZE, 0); + + /* Process data and return status. */ + handle->inData = &ciphertext[0]; + handle->outData = &plaintext[0]; + handle->size = size; + handle->state = LTC_SM_STATE_START; + handle->state_machine = ltc_process_message_in_sessions_EDMA; + retval = handle->state_machine(base, handle); + return retval; +} + +status_t LTC_AES_CryptCtrEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *input, + uint8_t *output, + uint32_t size, + uint8_t counter[LTC_AES_BLOCK_SIZE], + const uint8_t *key, + uint32_t keySize, + uint8_t counterlast[LTC_AES_BLOCK_SIZE], + uint32_t *szLeft) +{ + status_t retval; + uint32_t lastSize; + + if (!ltc_check_key_size(keySize)) + { + if (handle->callback) + { + handle->callback(base, handle, kStatus_InvalidArgument, handle->userData); + } + return kStatus_InvalidArgument; + } + + lastSize = 0U; + if (counterlast != NULL) + { + /* Split the size into full 16-byte chunks and last incomplete block due to LTC AES OFIFO errata */ + if (size <= 16U) + { + lastSize = size; + size = 0U; + } + else + { + /* Process all 16-byte data chunks. */ + lastSize = size % 16U; + if (lastSize == 0U) + { + lastSize = 16U; + size -= 16U; + } + else + { + size -= lastSize; /* size will be rounded down to 16 byte boundary. remaining bytes in lastSize */ + } + } + } + + /* Initialize algorithm state. */ + ltc_symmetric_update(base, key, keySize, kLTC_AlgorithmAES, kLTC_ModeCTR, kLTC_ModeEncrypt); + + /* Write initial counter data to the context register. + * NOTE the counter values start at 4-bytes offset into the context. */ + ltc_set_context(base, &counter[0], 16U, 4U); + + /* Process data and return status. */ + handle->inData = &input[0]; + handle->outData = &output[0]; + handle->size = size; + handle->state = LTC_SM_STATE_START; + handle->state_machine = ltc_process_message_in_sessions_ctr_EDMA; + + handle->counter = counter; + handle->key = key; + handle->keySize = keySize; + handle->counterlast = counterlast; + handle->szLeft = szLeft; + handle->lastSize = lastSize; + retval = handle->state_machine(base, handle); + + return retval; +} + +#if defined(FSL_FEATURE_LTC_HAS_DES) && FSL_FEATURE_LTC_HAS_DES +/******************************************************************************* + * DES / 3DES Code static + ******************************************************************************/ +static status_t ltc_des_process_EDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *input, + uint8_t *output, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key[LTC_DES_KEY_SIZE], + ltc_mode_symmetric_alg_t modeAs, + ltc_mode_encrypt_t modeEnc) +{ + status_t retval; + + /* all but OFB, size must be 8-byte multiple */ + if ((modeAs != kLTC_ModeOFB) && ((size < 8u) || (size % 8u))) + { + if (handle->callback) + { + handle->callback(base, handle, kStatus_InvalidArgument, handle->userData); + } + return kStatus_InvalidArgument; + } + + /* Initialize algorithm state. */ + ltc_symmetric_update(base, &key[0], LTC_DES_KEY_SIZE, kLTC_AlgorithmDES, modeAs, modeEnc); + + if ((modeAs != kLTC_ModeECB)) + { + ltc_set_context(base, iv, LTC_DES_IV_SIZE, 0); + } + + /* Process data and return status. */ + handle->inData = input; + handle->outData = output; + handle->size = size; + handle->state = LTC_SM_STATE_START; + handle->state_machine = ltc_process_message_in_sessions_EDMA; + retval = handle->state_machine(base, handle); + + return retval; +} + +static status_t ltc_3des_process_EDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *input, + uint8_t *output, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE], + ltc_mode_symmetric_alg_t modeAs, + ltc_mode_encrypt_t modeEnc) +{ + status_t retval; + uint8_t key[LTC_DES_KEY_SIZE * 3]; + uint8_t keySize = LTC_DES_KEY_SIZE * 2; + + retval = ltc_3des_check_input_args(modeAs, size, key1, key2); + if (kStatus_Success != retval) + { + if (handle->callback) + { + handle->callback(base, handle, kStatus_InvalidArgument, handle->userData); + } + return retval; + } + + ltc_memcpy(&key[0], &key1[0], LTC_DES_KEY_SIZE); + ltc_memcpy(&key[LTC_DES_KEY_SIZE], &key2[0], LTC_DES_KEY_SIZE); + if (key3) + { + ltc_memcpy(&key[LTC_DES_KEY_SIZE * 2], &key3[0], LTC_DES_KEY_SIZE); + keySize = sizeof(key); + } + + /* Initialize algorithm state. */ + ltc_symmetric_update(base, &key[0], keySize, kLTC_Algorithm3DES, modeAs, modeEnc); + + if ((modeAs != kLTC_ModeECB)) + { + ltc_set_context(base, iv, LTC_DES_IV_SIZE, 0); + } + + /* Process data and return status. */ + handle->inData = input; + handle->outData = output; + handle->size = size; + handle->state = LTC_SM_STATE_START; + handle->state_machine = ltc_process_message_in_sessions_EDMA; + retval = handle->state_machine(base, handle); + + return retval; +} +/******************************************************************************* + * DES / 3DES Code public + ******************************************************************************/ +status_t LTC_DES_EncryptEcbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t key[LTC_DES_KEY_SIZE]) +{ + return ltc_des_process_EDMA(base, handle, plaintext, ciphertext, size, NULL, key, kLTC_ModeECB, kLTC_ModeEncrypt); +} + +status_t LTC_DES_DecryptEcbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t key[LTC_DES_KEY_SIZE]) +{ + return ltc_des_process_EDMA(base, handle, ciphertext, plaintext, size, NULL, key, kLTC_ModeECB, kLTC_ModeDecrypt); +} + +status_t LTC_DES_EncryptCbcEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key[LTC_DES_KEY_SIZE]) +{ + return ltc_des_process_EDMA(base, handle, plaintext, ciphertext, size, iv, key, kLTC_ModeCBC, kLTC_ModeEncrypt); +} + +status_t LTC_DES_DecryptCbcEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key[LTC_DES_KEY_SIZE]) +{ + return ltc_des_process_EDMA(base, handle, ciphertext, plaintext, size, iv, key, kLTC_ModeCBC, kLTC_ModeDecrypt); +} + +status_t LTC_DES_EncryptCfbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key[LTC_DES_KEY_SIZE]) +{ + return ltc_des_process_EDMA(base, handle, plaintext, ciphertext, size, iv, key, kLTC_ModeCFB, kLTC_ModeEncrypt); +} + +status_t LTC_DES_DecryptCfbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key[LTC_DES_KEY_SIZE]) +{ + return ltc_des_process_EDMA(base, handle, ciphertext, plaintext, size, iv, key, kLTC_ModeCFB, kLTC_ModeDecrypt); +} + +status_t LTC_DES_EncryptOfbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key[LTC_DES_KEY_SIZE]) +{ + return ltc_des_process_EDMA(base, handle, plaintext, ciphertext, size, iv, key, kLTC_ModeOFB, kLTC_ModeEncrypt); +} + +status_t LTC_DES_DecryptOfbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key[LTC_DES_KEY_SIZE]) +{ + return ltc_des_process_EDMA(base, handle, ciphertext, plaintext, size, iv, key, kLTC_ModeOFB, kLTC_ModeDecrypt); +} + +status_t LTC_DES2_EncryptEcbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process_EDMA(base, handle, plaintext, ciphertext, size, NULL, key1, key2, NULL, kLTC_ModeECB, + kLTC_ModeEncrypt); +} + +status_t LTC_DES3_EncryptEcbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process_EDMA(base, handle, plaintext, ciphertext, size, NULL, key1, key2, key3, kLTC_ModeECB, + kLTC_ModeEncrypt); +} + +status_t LTC_DES2_DecryptEcbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process_EDMA(base, handle, ciphertext, plaintext, size, NULL, key1, key2, NULL, kLTC_ModeECB, + kLTC_ModeDecrypt); +} + +status_t LTC_DES3_DecryptEcbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process_EDMA(base, handle, ciphertext, plaintext, size, NULL, key1, key2, key3, kLTC_ModeECB, + kLTC_ModeDecrypt); +} + +status_t LTC_DES2_EncryptCbcEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process_EDMA(base, handle, plaintext, ciphertext, size, iv, key1, key2, NULL, kLTC_ModeCBC, + kLTC_ModeEncrypt); +} + +status_t LTC_DES3_EncryptCbcEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process_EDMA(base, handle, plaintext, ciphertext, size, iv, key1, key2, key3, kLTC_ModeCBC, + kLTC_ModeEncrypt); +} + +status_t LTC_DES2_DecryptCbcEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process_EDMA(base, handle, ciphertext, plaintext, size, iv, key1, key2, NULL, kLTC_ModeCBC, + kLTC_ModeDecrypt); +} + +status_t LTC_DES3_DecryptCbcEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process_EDMA(base, handle, ciphertext, plaintext, size, iv, key1, key2, key3, kLTC_ModeCBC, + kLTC_ModeDecrypt); +} + +status_t LTC_DES2_EncryptCfbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process_EDMA(base, handle, plaintext, ciphertext, size, iv, key1, key2, NULL, kLTC_ModeCFB, + kLTC_ModeEncrypt); +} + +status_t LTC_DES3_EncryptCfbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process_EDMA(base, handle, plaintext, ciphertext, size, iv, key1, key2, key3, kLTC_ModeCFB, + kLTC_ModeEncrypt); +} + +status_t LTC_DES2_DecryptCfbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process_EDMA(base, handle, ciphertext, plaintext, size, iv, key1, key2, NULL, kLTC_ModeCFB, + kLTC_ModeDecrypt); +} + +status_t LTC_DES3_DecryptCfbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process_EDMA(base, handle, ciphertext, plaintext, size, iv, key1, key2, key3, kLTC_ModeCFB, + kLTC_ModeDecrypt); +} + +status_t LTC_DES2_EncryptOfbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process_EDMA(base, handle, plaintext, ciphertext, size, iv, key1, key2, NULL, kLTC_ModeOFB, + kLTC_ModeEncrypt); +} + +status_t LTC_DES3_EncryptOfbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process_EDMA(base, handle, plaintext, ciphertext, size, iv, key1, key2, key3, kLTC_ModeOFB, + kLTC_ModeEncrypt); +} + +status_t LTC_DES2_DecryptOfbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process_EDMA(base, handle, ciphertext, plaintext, size, iv, key1, key2, NULL, kLTC_ModeOFB, + kLTC_ModeDecrypt); +} + +status_t LTC_DES3_DecryptOfbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]) +{ + return ltc_3des_process_EDMA(base, handle, ciphertext, plaintext, size, iv, key1, key2, key3, kLTC_ModeOFB, + kLTC_ModeDecrypt); +} +#endif /* FSL_FEATURE_LTC_HAS_DES */ + +/*********************** LTC EDMA tools ***************************************/ + +static uint32_t LTC_GetInstance(LTC_Type *base) +{ + uint32_t instance = 0; + uint32_t i; + + for (i = 0; i < FSL_FEATURE_SOC_LTC_COUNT; i++) + { + if (s_ltcBase[instance] == base) + { + instance = i; + break; + } + } + return instance; +} + +/*! + * @brief Enable or disable LTC Input FIFO DMA request. + * + * This function enables or disables DMA request and done signals for Input FIFO. + * + * @param base LTC peripheral base address. + * @param enable True to enable, false to disable. + */ +static inline void LTC_EnableInputFifoDMA(LTC_Type *base, bool enable) +{ + if (enable) + { + base->CTL |= LTC_CTL_IFE_MASK; + } + else + { + base->CTL &= ~LTC_CTL_IFE_MASK; + } +} + +/*! + * @brief Enable or disable LTC Output FIFO DMA request. + * + * This function enables or disables DMA request and done signals for Output FIFO. + * + * @param base LTC peripheral base address. + * @param enable True to enable, false to disable. + */ +static inline void LTC_EnableOutputFifoDMA(LTC_Type *base, bool enable) +{ + if (enable) + { + base->CTL |= LTC_CTL_OFE_MASK; + } + else + { + base->CTL &= ~LTC_CTL_OFE_MASK; + } +} + +static void LTC_InputFifoEDMACallback(edma_handle_t *handle, void *param, bool transferDone, uint32_t tcds) +{ + ltc_edma_private_handle_t *ltcPrivateHandle = (ltc_edma_private_handle_t *)param; + + /* Avoid the warning for unused variables. */ + handle = handle; + tcds = tcds; + + if (transferDone) + { + /* Stop DMA channel. */ + EDMA_StopTransfer(ltcPrivateHandle->handle->inputFifoEdmaHandle); + + /* Disable Input Fifo DMA */ + LTC_EnableInputFifoDMA(ltcPrivateHandle->base, false); + } +} + +static void LTC_OutputFifoEDMACallback(edma_handle_t *handle, void *param, bool transferDone, uint32_t tcds) +{ + ltc_edma_private_handle_t *ltcPrivateHandle = (ltc_edma_private_handle_t *)param; + + /* Avoid the warning for unused variables. */ + handle = handle; + tcds = tcds; + + if (transferDone) + { + /* Stop DMA channel. */ + EDMA_StopTransfer(ltcPrivateHandle->handle->outputFifoEdmaHandle); + + /* Disable Output Fifo DMA */ + LTC_EnableOutputFifoDMA(ltcPrivateHandle->base, false); + + if (ltcPrivateHandle->handle->state_machine) + { + ltcPrivateHandle->handle->state_machine(ltcPrivateHandle->base, ltcPrivateHandle->handle); + } + } +} + +/* @brief Copy data to Input FIFO and reading from Ouput FIFO using eDMA. */ +static void ltc_symmetric_process_EDMA(LTC_Type *base, uint32_t inSize, const uint8_t **inData, uint8_t **outData) +{ + const uint8_t *in = *inData; + uint8_t *out = *outData; + uint32_t instance = LTC_GetInstance(base); + uint32_t entry_number = inSize / sizeof(uint32_t); + const uint8_t *inputBuffer = *inData; + uint8_t *outputBuffer = *outData; + edma_transfer_config_t config; + + if (entry_number) + { + /* =========== Init Input FIFO DMA ======================*/ + memset(&config, 0, sizeof(config)); + + /* Prepare transfer. */ + EDMA_PrepareTransfer(&config, (void *)inputBuffer, 1, (void *)(&((base)->IFIFO)), 4U, 4U, entry_number * 4, + kEDMA_MemoryToPeripheral); + /* Submit transfer. */ + EDMA_SubmitTransfer(s_edmaPrivateHandle[instance].handle->inputFifoEdmaHandle, &config); + + /* Set request size.*/ + base->CTL &= ~LTC_CTL_IFR_MASK; /* 1 entry */ + /* Enable Input Fifo DMA */ + LTC_EnableInputFifoDMA(base, true); + + /* Start the DMA channel */ + EDMA_StartTransfer(s_edmaPrivateHandle[instance].handle->inputFifoEdmaHandle); + + /* =========== Init Output FIFO DMA ======================*/ + memset(&config, 0, sizeof(config)); + + /* Prepare transfer. */ + EDMA_PrepareTransfer(&config, (void *)(&((base)->OFIFO)), 4U, (void *)outputBuffer, 1U, 4U, entry_number * 4, + kEDMA_PeripheralToMemory); + /* Submit transfer. */ + EDMA_SubmitTransfer(s_edmaPrivateHandle[instance].handle->outputFifoEdmaHandle, &config); + + /* Set request size.*/ + base->CTL &= ~LTC_CTL_OFR_MASK; /* 1 entry */ + + /* Enable Output Fifo DMA */ + LTC_EnableOutputFifoDMA(base, true); + + /* Start the DMA channel */ + EDMA_StartTransfer(s_edmaPrivateHandle[instance].handle->outputFifoEdmaHandle); + + { /* Dummy read of LTC register. Do not delete.*/ + volatile uint32_t status_reg; + + status_reg = (base)->STA; + + (void)status_reg; + } + + out += entry_number * sizeof(uint32_t); + in += entry_number * sizeof(uint32_t); + + *inData = in; + *outData = out; + } +} + +void LTC_CreateHandleEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + ltc_edma_callback_t callback, + void *userData, + edma_handle_t *inputFifoEdmaHandle, + edma_handle_t *outputFifoEdmaHandle) +{ + assert(handle); + assert(inputFifoEdmaHandle); + assert(outputFifoEdmaHandle); + + uint32_t instance = LTC_GetInstance(base); + + s_edmaPrivateHandle[instance].base = base; + s_edmaPrivateHandle[instance].handle = handle; + + memset(handle, 0, sizeof(*handle)); + + handle->inputFifoEdmaHandle = inputFifoEdmaHandle; + handle->outputFifoEdmaHandle = outputFifoEdmaHandle; + + handle->callback = callback; + handle->userData = userData; + + /* Register DMA callback functions */ + EDMA_SetCallback(handle->inputFifoEdmaHandle, LTC_InputFifoEDMACallback, &s_edmaPrivateHandle[instance]); + EDMA_SetCallback(handle->outputFifoEdmaHandle, LTC_OutputFifoEDMACallback, &s_edmaPrivateHandle[instance]); + + /* Set request size. DMA request size is 1 entry.*/ + base->CTL &= ~LTC_CTL_IFR_MASK; + base->CTL &= ~LTC_CTL_OFR_MASK; +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_ltc_edma.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_ltc_edma.h new file mode 100644 index 00000000000..5456fb443b6 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_ltc_edma.h @@ -0,0 +1,850 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FSL_LTC_EDMA_H_ +#define _FSL_LTC_EDMA_H_ + +#include "fsl_common.h" + +#include "fsl_ltc.h" +#include "fsl_dmamux.h" +#include "fsl_edma.h" + +/*! + * @addtogroup ltc_edma_driver + * @{ + */ + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/* @brief The LTC eDMA handle type. */ +typedef struct _ltc_edma_handle ltc_edma_handle_t; + +/*! @brief LTC eDMA callback function. */ +typedef void (*ltc_edma_callback_t)(LTC_Type *base, ltc_edma_handle_t *handle, status_t status, void *userData); + +/*! @brief LTC eDMA state machine function. It is defined only for private usage inside LTC eDMA driver. */ +typedef status_t (*ltc_edma_state_machine_t)(LTC_Type *base, ltc_edma_handle_t *handle); + +/*! +* @brief LTC eDMA handle. It is defined only for private usage inside LTC eDMA driver. +*/ +struct _ltc_edma_handle +{ + ltc_edma_callback_t callback; /*!< Callback function. */ + void *userData; /*!< LTC callback function parameter.*/ + + edma_handle_t *inputFifoEdmaHandle; /*!< The eDMA TX channel used. */ + edma_handle_t *outputFifoEdmaHandle; /*!< The eDMA RX channel used. */ + + ltc_edma_state_machine_t state_machine; /*!< State machine. */ + uint32_t state; /*!< Internal state. */ + const uint8_t *inData; /*!< Input data. */ + uint8_t *outData; /*!< Output data. */ + uint32_t size; /*!< Size of input and output data in bytes.*/ + uint32_t modeReg; /*!< LTC mode register.*/ + /* Used by AES CTR*/ + uint8_t *counter; /*!< Input counter (updates on return)*/ + const uint8_t *key; /*!< Input key to use for forward AES cipher*/ + uint32_t keySize; /*!< Size of the input key, in bytes. Must be 16, 24, or 32.*/ + uint8_t + *counterlast; /*!< Output cipher of last counter, for chained CTR calls. NULL can be passed if chained calls are + not used.*/ + uint32_t *szLeft; /*!< Output number of bytes in left unused in counterlast block. NULL can be passed if chained + calls are not used.*/ + uint32_t lastSize; /*!< Last size.*/ +}; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @brief Init the LTC eDMA handle which is used in transcational functions + * @param base LTC module base address + * @param handle Pointer to ltc_edma_handle_t structure + * @param callback Callback function, NULL means no callback. + * @param userData Callback function parameter. + * @param inputFifoEdmaHandle User requested eDMA handle for Input FIFO eDMA. + * @param outputFifoEdmaHandle User requested eDMA handle for Output FIFO eDMA. + */ +void LTC_CreateHandleEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + ltc_edma_callback_t callback, + void *userData, + edma_handle_t *inputFifoEdmaHandle, + edma_handle_t *outputFifoEdmaHandle); + +/*! @}*/ + +/******************************************************************************* + * AES API + ******************************************************************************/ + +/*! + * @addtogroup ltc_edma_driver_aes + * @{ + */ + +/*! + * @brief Encrypts AES using the ECB block mode. + * + * Encrypts AES using the ECB block mode. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param plaintext Input plain text to encrypt + * @param[out] ciphertext Output cipher text + * @param size Size of input and output data in bytes. Must be multiple of 16 bytes. + * @param key Input key to use for encryption + * @param keySize Size of the input key, in bytes. Must be 16, 24, or 32. + * @return Status from encrypt operation + */ +status_t LTC_AES_EncryptEcbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t *key, + uint32_t keySize); + +/*! + * @brief Decrypts AES using ECB block mode. + * + * Decrypts AES using ECB block mode. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param ciphertext Input cipher text to decrypt + * @param[out] plaintext Output plain text + * @param size Size of input and output data in bytes. Must be multiple of 16 bytes. + * @param key Input key. + * @param keySize Size of the input key, in bytes. Must be 16, 24, or 32. + * @param keyType Input type of the key (allows to directly load decrypt key for AES ECB decrypt operation.) + * @return Status from decrypt operation + */ +status_t LTC_AES_DecryptEcbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t *key, + uint32_t keySize, + ltc_aes_key_t keyType); + +/*! + * @brief Encrypts AES using CBC block mode. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param plaintext Input plain text to encrypt + * @param[out] ciphertext Output cipher text + * @param size Size of input and output data in bytes. Must be multiple of 16 bytes. + * @param iv Input initial vector to combine with the first input block. + * @param key Input key to use for encryption + * @param keySize Size of the input key, in bytes. Must be 16, 24, or 32. + * @return Status from encrypt operation + */ +status_t LTC_AES_EncryptCbcEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_AES_IV_SIZE], + const uint8_t *key, + uint32_t keySize); + +/*! + * @brief Decrypts AES using CBC block mode. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param ciphertext Input cipher text to decrypt + * @param[out] plaintext Output plain text + * @param size Size of input and output data in bytes. Must be multiple of 16 bytes. + * @param iv Input initial vector to combine with the first input block. + * @param key Input key to use for decryption + * @param keySize Size of the input key, in bytes. Must be 16, 24, or 32. + * @param keyType Input type of the key (allows to directly load decrypt key for AES CBC decrypt operation.) + * @return Status from decrypt operation + */ +status_t LTC_AES_DecryptCbcEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_AES_IV_SIZE], + const uint8_t *key, + uint32_t keySize, + ltc_aes_key_t keyType); + +/*! + * @brief Encrypts or decrypts AES using CTR block mode. + * + * Encrypts or decrypts AES using CTR block mode. + * AES CTR mode uses only forward AES cipher and same algorithm for encryption and decryption. + * The only difference between encryption and decryption is that, for encryption, the input argument + * is plain text and the output argument is cipher text. For decryption, the input argument is cipher text + * and the output argument is plain text. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param input Input data for CTR block mode + * @param[out] output Output data for CTR block mode + * @param size Size of input and output data in bytes + * @param[in,out] counter Input counter (updates on return) + * @param key Input key to use for forward AES cipher + * @param keySize Size of the input key, in bytes. Must be 16, 24, or 32. + * @param[out] counterlast Output cipher of last counter, for chained CTR calls. NULL can be passed if chained calls are + * not used. + * @param[out] szLeft Output number of bytes in left unused in counterlast block. NULL can be passed if chained calls + * are not used. + * @return Status from encrypt operation + */ +status_t LTC_AES_CryptCtrEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *input, + uint8_t *output, + uint32_t size, + uint8_t counter[LTC_AES_BLOCK_SIZE], + const uint8_t *key, + uint32_t keySize, + uint8_t counterlast[LTC_AES_BLOCK_SIZE], + uint32_t *szLeft); + +/*! AES CTR decrypt is mapped to the AES CTR generic operation */ +#define LTC_AES_DecryptCtrEDMA(base, handle, input, output, size, counter, key, keySize, counterlast, szLeft) \ + LTC_AES_CryptCtrEDMA(base, handle, input, output, size, counter, key, keySize, counterlast, szLeft) + +/*! AES CTR encrypt is mapped to the AES CTR generic operation */ +#define LTC_AES_EncryptCtrEDMA(base, handle, input, output, size, counter, key, keySize, counterlast, szLeft) \ + LTC_AES_CryptCtrEDMA(base, handle, input, output, size, counter, key, keySize, counterlast, szLeft) + +/*! + *@} + */ + +/******************************************************************************* + * DES API + ******************************************************************************/ +/*! + * @addtogroup ltc_edma_driver_des + * @{ + */ +/*! + * @brief Encrypts DES using ECB block mode. + * + * Encrypts DES using ECB block mode. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param plaintext Input plaintext to encrypt + * @param[out] ciphertext Output ciphertext + * @param size Size of input and output data in bytes. Must be multiple of 8 bytes. + * @param key Input key to use for encryption + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES_EncryptEcbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t key[LTC_DES_KEY_SIZE]); + +/*! + * @brief Decrypts DES using ECB block mode. + * + * Decrypts DES using ECB block mode. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param ciphertext Input ciphertext to decrypt + * @param[out] plaintext Output plaintext + * @param size Size of input and output data in bytes. Must be multiple of 8 bytes. + * @param key Input key to use for decryption + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES_DecryptEcbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t key[LTC_DES_KEY_SIZE]); + +/*! + * @brief Encrypts DES using CBC block mode. + * + * Encrypts DES using CBC block mode. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param plaintext Input plaintext to encrypt + * @param[out] ciphertext Ouput ciphertext + * @param size Size of input and output data in bytes + * @param iv Input initial vector to combine with the first plaintext block. + * The iv does not need to be secret, but it must be unpredictable. + * @param key Input key to use for encryption + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES_EncryptCbcEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key[LTC_DES_KEY_SIZE]); + +/*! + * @brief Decrypts DES using CBC block mode. + * + * Decrypts DES using CBC block mode. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param ciphertext Input ciphertext to decrypt + * @param[out] plaintext Output plaintext + * @param size Size of input data in bytes + * @param iv Input initial vector to combine with the first plaintext block. + * The iv does not need to be secret, but it must be unpredictable. + * @param key Input key to use for decryption + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES_DecryptCbcEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key[LTC_DES_KEY_SIZE]); + +/*! + * @brief Encrypts DES using CFB block mode. + * + * Encrypts DES using CFB block mode. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param plaintext Input plaintext to encrypt + * @param size Size of input data in bytes + * @param iv Input initial block. + * @param key Input key to use for encryption + * @param[out] ciphertext Output ciphertext + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES_EncryptCfbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key[LTC_DES_KEY_SIZE]); + +/*! + * @brief Decrypts DES using CFB block mode. + * + * Decrypts DES using CFB block mode. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param ciphertext Input ciphertext to decrypt + * @param[out] plaintext Output plaintext + * @param size Size of input and output data in bytes + * @param iv Input initial block. + * @param key Input key to use for decryption + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES_DecryptCfbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key[LTC_DES_KEY_SIZE]); + +/*! + * @brief Encrypts DES using OFB block mode. + * + * Encrypts DES using OFB block mode. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param plaintext Input plaintext to encrypt + * @param[out] ciphertext Output ciphertext + * @param size Size of input and output data in bytes + * @param iv Input unique input vector. The OFB mode requires that the IV be unique + * for each execution of the mode under the given key. + * @param key Input key to use for encryption + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES_EncryptOfbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key[LTC_DES_KEY_SIZE]); + +/*! + * @brief Decrypts DES using OFB block mode. + * + * Decrypts DES using OFB block mode. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param ciphertext Input ciphertext to decrypt + * @param[out] plaintext Output plaintext + * @param size Size of input and output data in bytes. Must be multiple of 8 bytes. + * @param iv Input unique input vector. The OFB mode requires that the IV be unique + * for each execution of the mode under the given key. + * @param key Input key to use for decryption + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES_DecryptOfbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key[LTC_DES_KEY_SIZE]); + +/*! + * @brief Encrypts triple DES using ECB block mode with two keys. + * + * Encrypts triple DES using ECB block mode with two keys. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param plaintext Input plaintext to encrypt + * @param[out] ciphertext Output ciphertext + * @param size Size of input and output data in bytes. Must be multiple of 8 bytes. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES2_EncryptEcbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]); + +/*! + * @brief Decrypts triple DES using ECB block mode with two keys. + * + * Decrypts triple DES using ECB block mode with two keys. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param ciphertext Input ciphertext to decrypt + * @param[out] plaintext Output plaintext + * @param size Size of input and output data in bytes. Must be multiple of 8 bytes. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES2_DecryptEcbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]); + +/*! + * @brief Encrypts triple DES using CBC block mode with two keys. + * + * Encrypts triple DES using CBC block mode with two keys. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param plaintext Input plaintext to encrypt + * @param[out] ciphertext Output ciphertext + * @param size Size of input and output data in bytes + * @param iv Input initial vector to combine with the first plaintext block. + * The iv does not need to be secret, but it must be unpredictable. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES2_EncryptCbcEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]); + +/*! + * @brief Decrypts triple DES using CBC block mode with two keys. + * + * Decrypts triple DES using CBC block mode with two keys. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param ciphertext Input ciphertext to decrypt + * @param[out] plaintext Output plaintext + * @param size Size of input and output data in bytes + * @param iv Input initial vector to combine with the first plaintext block. + * The iv does not need to be secret, but it must be unpredictable. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES2_DecryptCbcEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]); + +/*! + * @brief Encrypts triple DES using CFB block mode with two keys. + * + * Encrypts triple DES using CFB block mode with two keys. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param plaintext Input plaintext to encrypt + * @param[out] ciphertext Output ciphertext + * @param size Size of input and output data in bytes + * @param iv Input initial block. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES2_EncryptCfbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]); + +/*! + * @brief Decrypts triple DES using CFB block mode with two keys. + * + * Decrypts triple DES using CFB block mode with two keys. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param ciphertext Input ciphertext to decrypt + * @param[out] plaintext Output plaintext + * @param size Size of input and output data in bytes + * @param iv Input initial block. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES2_DecryptCfbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]); + +/*! + * @brief Encrypts triple DES using OFB block mode with two keys. + * + * Encrypts triple DES using OFB block mode with two keys. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param plaintext Input plaintext to encrypt + * @param[out] ciphertext Output ciphertext + * @param size Size of input and output data in bytes + * @param iv Input unique input vector. The OFB mode requires that the IV be unique + * for each execution of the mode under the given key. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES2_EncryptOfbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]); + +/*! + * @brief Decrypts triple DES using OFB block mode with two keys. + * + * Decrypts triple DES using OFB block mode with two keys. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param ciphertext Input ciphertext to decrypt + * @param[out] plaintext Output plaintext + * @param size Size of input and output data in bytes + * @param iv Input unique input vector. The OFB mode requires that the IV be unique + * for each execution of the mode under the given key. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES2_DecryptOfbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE]); + +/*! + * @brief Encrypts triple DES using ECB block mode with three keys. + * + * Encrypts triple DES using ECB block mode with three keys. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param plaintext Input plaintext to encrypt + * @param[out] ciphertext Output ciphertext + * @param size Size of input and output data in bytes. Must be multiple of 8 bytes. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @param key3 Third input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES3_EncryptEcbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]); + +/*! + * @brief Decrypts triple DES using ECB block mode with three keys. + * + * Decrypts triple DES using ECB block mode with three keys. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param ciphertext Input ciphertext to decrypt + * @param[out] plaintext Output plaintext + * @param size Size of input and output data in bytes. Must be multiple of 8 bytes. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @param key3 Third input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES3_DecryptEcbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]); + +/*! + * @brief Encrypts triple DES using CBC block mode with three keys. + * + * Encrypts triple DES using CBC block mode with three keys. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param plaintext Input plaintext to encrypt + * @param[out] ciphertext Output ciphertext + * @param size Size of input data in bytes + * @param iv Input initial vector to combine with the first plaintext block. + * The iv does not need to be secret, but it must be unpredictable. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @param key3 Third input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES3_EncryptCbcEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]); + +/*! + * @brief Decrypts triple DES using CBC block mode with three keys. + * + * Decrypts triple DES using CBC block mode with three keys. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param ciphertext Input ciphertext to decrypt + * @param[out] plaintext Output plaintext + * @param size Size of input and output data in bytes + * @param iv Input initial vector to combine with the first plaintext block. + * The iv does not need to be secret, but it must be unpredictable. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @param key3 Third input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES3_DecryptCbcEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]); + +/*! + * @brief Encrypts triple DES using CFB block mode with three keys. + * + * Encrypts triple DES using CFB block mode with three keys. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param plaintext Input plaintext to encrypt + * @param[out] ciphertext Output ciphertext + * @param size Size of input and ouput data in bytes + * @param iv Input initial block. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @param key3 Third input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES3_EncryptCfbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]); + +/*! + * @brief Decrypts triple DES using CFB block mode with three keys. + * + * Decrypts triple DES using CFB block mode with three keys. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param ciphertext Input ciphertext to decrypt + * @param[out] plaintext Output plaintext + * @param size Size of input data in bytes + * @param iv Input initial block. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @param key3 Third input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES3_DecryptCfbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]); + +/*! + * @brief Encrypts triple DES using OFB block mode with three keys. + * + * Encrypts triple DES using OFB block mode with three keys. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param plaintext Input plaintext to encrypt + * @param[out] ciphertext Output ciphertext + * @param size Size of input and output data in bytes + * @param iv Input unique input vector. The OFB mode requires that the IV be unique + * for each execution of the mode under the given key. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @param key3 Third input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES3_EncryptOfbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *plaintext, + uint8_t *ciphertext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]); + +/*! + * @brief Decrypts triple DES using OFB block mode with three keys. + * + * Decrypts triple DES using OFB block mode with three keys. + * + * @param base LTC peripheral base address + * @param handle pointer to ltc_edma_handle_t structure which stores the transaction state. + * @param ciphertext Input ciphertext to decrypt + * @param[out] plaintext Output plaintext + * @param size Size of input and output data in bytes + * @param iv Input unique input vector. The OFB mode requires that the IV be unique + * for each execution of the mode under the given key. + * @param key1 First input key for key bundle + * @param key2 Second input key for key bundle + * @param key3 Third input key for key bundle + * @return Status from encrypt/decrypt operation + */ +status_t LTC_DES3_DecryptOfbEDMA(LTC_Type *base, + ltc_edma_handle_t *handle, + const uint8_t *ciphertext, + uint8_t *plaintext, + uint32_t size, + const uint8_t iv[LTC_DES_IV_SIZE], + const uint8_t key1[LTC_DES_KEY_SIZE], + const uint8_t key2[LTC_DES_KEY_SIZE], + const uint8_t key3[LTC_DES_KEY_SIZE]); + +/*! + *@} + */ + +#if defined(__cplusplus) +} +#endif + +#endif /* _FSL_LTC_EDMA_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_mpu.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_mpu.c new file mode 100644 index 00000000000..8e0e77df570 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_mpu.c @@ -0,0 +1,239 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_mpu.h" + +/******************************************************************************* + * Variables + ******************************************************************************/ + +const clock_ip_name_t g_mpuClock[FSL_FEATURE_SOC_MPU_COUNT] = MPU_CLOCKS; + +/******************************************************************************* + * Codes + ******************************************************************************/ + +void MPU_Init(MPU_Type *base, const mpu_config_t *config) +{ + assert(config); + uint8_t count; + + /* Un-gate MPU clock */ + CLOCK_EnableClock(g_mpuClock[0]); + + /* Initializes the regions. */ + for (count = 1; count < FSL_FEATURE_MPU_DESCRIPTOR_COUNT; count++) + { + base->WORD[count][3] = 0; /* VLD/VID+PID. */ + base->WORD[count][0] = 0; /* Start address. */ + base->WORD[count][1] = 0; /* End address. */ + base->WORD[count][2] = 0; /* Access rights. */ + base->RGDAAC[count] = 0; /* Alternate access rights. */ + } + + /* MPU configure. */ + while (config) + { + MPU_SetRegionConfig(base, &(config->regionConfig)); + config = config->next; + } + /* Enable MPU. */ + MPU_Enable(base, true); +} + +void MPU_Deinit(MPU_Type *base) +{ + /* Disable MPU. */ + MPU_Enable(base, false); + + /* Gate the clock. */ + CLOCK_DisableClock(g_mpuClock[0]); +} + +void MPU_GetHardwareInfo(MPU_Type *base, mpu_hardware_info_t *hardwareInform) +{ + assert(hardwareInform); + + uint32_t cesReg = base->CESR; + + hardwareInform->hardwareRevisionLevel = (cesReg & MPU_CESR_HRL_MASK) >> MPU_CESR_HRL_SHIFT; + hardwareInform->slavePortsNumbers = (cesReg & MPU_CESR_NSP_MASK) >> MPU_CESR_NSP_SHIFT; + hardwareInform->regionsNumbers = (mpu_region_total_num_t)((cesReg & MPU_CESR_NRGD_MASK) >> MPU_CESR_NRGD_SHIFT); +} + +void MPU_SetRegionConfig(MPU_Type *base, const mpu_region_config_t *regionConfig) +{ + assert(regionConfig); + assert(regionConfig->regionNum < FSL_FEATURE_MPU_DESCRIPTOR_COUNT); + + uint32_t wordReg = 0; + uint8_t msPortNum; + uint8_t regNumber = regionConfig->regionNum; + + /* The start and end address of the region descriptor. */ + base->WORD[regNumber][0] = regionConfig->startAddress; + base->WORD[regNumber][1] = regionConfig->endAddress; + + /* Set the privilege rights for master 0 ~ master 3. */ + for (msPortNum = 0; msPortNum <= FSL_FEATURE_MPU_PRIVILEGED_RIGHTS_MASTER_MAX_INDEX; msPortNum++) + { + wordReg |= MPU_REGION_RWXRIGHTS_MASTER( + msPortNum, (((uint32_t)regionConfig->accessRights1[msPortNum].superAccessRights << 3U) | + (uint32_t)regionConfig->accessRights1[msPortNum].userAccessRights)); + +#if FSL_FEATURE_MPU_HAS_PROCESS_IDENTIFIER + wordReg |= + MPU_REGION_RWXRIGHTS_MASTER_PE(msPortNum, regionConfig->accessRights1[msPortNum].processIdentifierEnable); +#endif /* FSL_FEATURE_MPU_HAS_PROCESS_IDENTIFIER */ + } + + /* Set the normal read write rights for master 4 ~ master 7. */ + for (msPortNum = FSL_FEATURE_MPU_PRIVILEGED_RIGHTS_MASTER_COUNT; msPortNum < FSL_FEATURE_MPU_MASTER_COUNT; + msPortNum++) + { + wordReg |= MPU_REGION_RWRIGHTS_MASTER(msPortNum, + ((uint32_t)regionConfig->accessRights2[msPortNum - FSL_FEATURE_MPU_PRIVILEGED_RIGHTS_MASTER_COUNT].readEnable << 1U | + (uint32_t)regionConfig->accessRights2[msPortNum - FSL_FEATURE_MPU_PRIVILEGED_RIGHTS_MASTER_COUNT].writeEnable)); + } + + /* Set region descriptor access rights. */ + base->WORD[regNumber][2] = wordReg; + + wordReg = MPU_WORD_VLD(1); +#if FSL_FEATURE_MPU_HAS_PROCESS_IDENTIFIER + wordReg |= MPU_WORD_PID(regionConfig->processIdentifier) | MPU_WORD_PIDMASK(regionConfig->processIdMask); +#endif /* FSL_FEATURE_MPU_HAS_PROCESS_IDENTIFIER */ + + base->WORD[regNumber][3] = wordReg; +} + +void MPU_SetRegionAddr(MPU_Type *base, uint32_t regionNum, uint32_t startAddr, uint32_t endAddr) +{ + assert(regionNum < FSL_FEATURE_MPU_DESCRIPTOR_COUNT); + + base->WORD[regionNum][0] = startAddr; + base->WORD[regionNum][1] = endAddr; +} + +void MPU_SetRegionRwxMasterAccessRights(MPU_Type *base, + uint32_t regionNum, + uint32_t masterNum, + const mpu_rwxrights_master_access_control_t *accessRights) +{ + assert(accessRights); + assert(regionNum < FSL_FEATURE_MPU_DESCRIPTOR_COUNT); + assert(masterNum <= FSL_FEATURE_MPU_PRIVILEGED_RIGHTS_MASTER_MAX_INDEX); + + uint32_t mask = MPU_REGION_RWXRIGHTS_MASTER_MASK(masterNum); + uint32_t right = base->RGDAAC[regionNum]; + +#if FSL_FEATURE_MPU_HAS_PROCESS_IDENTIFIER + mask |= MPU_REGION_RWXRIGHTS_MASTER_PE_MASK(masterNum); +#endif + + /* Build rights control value. */ + right &= ~mask; + right |= MPU_REGION_RWXRIGHTS_MASTER( + masterNum, ((uint32_t)(accessRights->superAccessRights << 3U) | accessRights->userAccessRights)); +#if FSL_FEATURE_MPU_HAS_PROCESS_IDENTIFIER + right |= MPU_REGION_RWXRIGHTS_MASTER_PE(masterNum, accessRights->processIdentifierEnable); +#endif /* FSL_FEATURE_MPU_HAS_PROCESS_IDENTIFIER */ + + /* Set low master region access rights. */ + base->RGDAAC[regionNum] = right; +} + +void MPU_SetRegionRwMasterAccessRights(MPU_Type *base, + uint32_t regionNum, + uint32_t masterNum, + const mpu_rwrights_master_access_control_t *accessRights) +{ + assert(accessRights); + assert(regionNum < FSL_FEATURE_MPU_DESCRIPTOR_COUNT); + assert(masterNum > FSL_FEATURE_MPU_PRIVILEGED_RIGHTS_MASTER_MAX_INDEX); + assert(masterNum <= FSL_FEATURE_MPU_MASTER_MAX_INDEX); + + uint32_t mask = MPU_REGION_RWRIGHTS_MASTER_MASK(masterNum); + uint32_t right = base->RGDAAC[regionNum]; + + /* Build rights control value. */ + right &= ~mask; + right |= + MPU_REGION_RWRIGHTS_MASTER(masterNum, (((uint32_t)accessRights->readEnable << 1U) | accessRights->writeEnable)); + /* Set low master region access rights. */ + base->RGDAAC[regionNum] = right; +} + +bool MPU_GetSlavePortErrorStatus(MPU_Type *base, mpu_slave_t slaveNum) +{ + uint8_t sperr; + + sperr = ((base->CESR & MPU_CESR_SPERR_MASK) >> MPU_CESR_SPERR_SHIFT) & (0x1U << slaveNum); + + return (sperr != 0) ? true : false; +} + +void MPU_GetDetailErrorAccessInfo(MPU_Type *base, mpu_slave_t slaveNum, mpu_access_err_info_t *errInform) +{ + assert(errInform); + + uint16_t value; + uint32_t cesReg; + + /* Error address. */ + errInform->address = base->SP[slaveNum].EAR; + + /* Error detail information. */ + value = (base->SP[slaveNum].EDR & MPU_EDR_EACD_MASK) >> MPU_EDR_EACD_SHIFT; + if (!value) + { + errInform->accessControl = kMPU_NoRegionHit; + } + else if (!(value & (uint16_t)(value - 1))) + { + errInform->accessControl = kMPU_NoneOverlappRegion; + } + else + { + errInform->accessControl = kMPU_OverlappRegion; + } + + value = base->SP[slaveNum].EDR; + errInform->master = (uint32_t)((value & MPU_EDR_EMN_MASK) >> MPU_EDR_EMN_SHIFT); + errInform->attributes = (mpu_err_attributes_t)((value & MPU_EDR_EATTR_MASK) >> MPU_EDR_EATTR_SHIFT); + errInform->accessType = (mpu_err_access_type_t)((value & MPU_EDR_ERW_MASK) >> MPU_EDR_ERW_SHIFT); +#if FSL_FEATURE_MPU_HAS_PROCESS_IDENTIFIER + errInform->processorIdentification = (uint8_t)((value & MPU_EDR_EPID_MASK) >> MPU_EDR_EPID_SHIFT); +#endif + + /* Clears error slave port bit. */ + cesReg = (base->CESR & ~MPU_CESR_SPERR_MASK) | ((0x1U << slaveNum) << MPU_CESR_SPERR_SHIFT); + base->CESR = cesReg; +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_mpu.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_mpu.h new file mode 100644 index 00000000000..d39d78ae48f --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_mpu.h @@ -0,0 +1,422 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FSL_MPU_H_ +#define _FSL_MPU_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup mpu + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief MPU driver version 2.1.0. */ +#define FSL_MPU_DRIVER_VERSION (MAKE_VERSION(2, 1, 0)) +/*@}*/ + +/*! @brief MPU the bit shift for masters with privilege rights: read write and execute. */ +#define MPU_REGION_RWXRIGHTS_MASTER_SHIFT(n) (n * 6) + +/*! @brief MPU masters with read, write and execute rights bit mask. */ +#define MPU_REGION_RWXRIGHTS_MASTER_MASK(n) (0x1Fu << MPU_REGION_RWXRIGHTS_MASTER_SHIFT(n)) + +/*! @brief MPU masters with read, write and execute rights bit width. */ +#define MPU_REGION_RWXRIGHTS_MASTER_WIDTH 5 + +/*! @brief MPU masters with read, write and execute rights priority setting. */ +#define MPU_REGION_RWXRIGHTS_MASTER(n, x) \ + (((uint32_t)(((uint32_t)(x)) << MPU_REGION_RWXRIGHTS_MASTER_SHIFT(n))) & MPU_REGION_RWXRIGHTS_MASTER_MASK(n)) + +/*! @brief MPU masters with read, write and execute rights process enable bit shift. */ +#define MPU_REGION_RWXRIGHTS_MASTER_PE_SHIFT(n) (n * 6 + MPU_REGION_RWXRIGHTS_MASTER_WIDTH) + +/*! @brief MPU masters with read, write and execute rights process enable bit mask. */ +#define MPU_REGION_RWXRIGHTS_MASTER_PE_MASK(n) (0x1u << MPU_REGION_RWXRIGHTS_MASTER_PE_SHIFT(n)) + +/*! @brief MPU masters with read, write and execute rights process enable setting. */ +#define MPU_REGION_RWXRIGHTS_MASTER_PE(n, x) \ + (((uint32_t)(((uint32_t)(x)) << MPU_REGION_RWXRIGHTS_MASTER_PE_SHIFT(n))) & MPU_REGION_RWXRIGHTS_MASTER_PE_MASK(n)) + +/*! @brief MPU masters with normal read write permission bit shift. */ +#define MPU_REGION_RWRIGHTS_MASTER_SHIFT(n) ((n - FSL_FEATURE_MPU_PRIVILEGED_RIGHTS_MASTER_COUNT) * 2 + 24) + +/*! @brief MPU masters with normal read write rights bit mask. */ +#define MPU_REGION_RWRIGHTS_MASTER_MASK(n) (0x3u << MPU_REGION_RWRIGHTS_MASTER_SHIFT(n)) + +/*! @brief MPU masters with normal read write rights priority setting. */ +#define MPU_REGION_RWRIGHTS_MASTER(n, x) \ + (((uint32_t)(((uint32_t)(x)) << MPU_REGION_RWRIGHTS_MASTER_SHIFT(n))) & MPU_REGION_RWRIGHTS_MASTER_MASK(n)) + +/*! @brief Describes the number of MPU regions. */ +typedef enum _mpu_region_total_num +{ + kMPU_8Regions = 0x0U, /*!< MPU supports 8 regions. */ + kMPU_12Regions = 0x1U, /*!< MPU supports 12 regions. */ + kMPU_16Regions = 0x2U /*!< MPU supports 16 regions. */ +} mpu_region_total_num_t; + +/*! @brief MPU slave port number. */ +typedef enum _mpu_slave +{ + kMPU_Slave0 = 4U, /*!< MPU slave port 0. */ + kMPU_Slave1 = 3U, /*!< MPU slave port 1. */ + kMPU_Slave2 = 2U, /*!< MPU slave port 2. */ + kMPU_Slave3 = 1U, /*!< MPU slave port 3. */ + kMPU_Slave4 = 0U /*!< MPU slave port 4. */ +} mpu_slave_t; + +/*! @brief MPU error access control detail. */ +typedef enum _mpu_err_access_control +{ + kMPU_NoRegionHit = 0U, /*!< No region hit error. */ + kMPU_NoneOverlappRegion = 1U, /*!< Access single region error. */ + kMPU_OverlappRegion = 2U /*!< Access overlapping region error. */ +} mpu_err_access_control_t; + +/*! @brief MPU error access type. */ +typedef enum _mpu_err_access_type +{ + kMPU_ErrTypeRead = 0U, /*!< MPU error access type --- read. */ + kMPU_ErrTypeWrite = 1U /*!< MPU error access type --- write. */ +} mpu_err_access_type_t; + +/*! @brief MPU access error attributes.*/ +typedef enum _mpu_err_attributes +{ + kMPU_InstructionAccessInUserMode = 0U, /*!< Access instruction error in user mode. */ + kMPU_DataAccessInUserMode = 1U, /*!< Access data error in user mode. */ + kMPU_InstructionAccessInSupervisorMode = 2U, /*!< Access instruction error in supervisor mode. */ + kMPU_DataAccessInSupervisorMode = 3U /*!< Access data error in supervisor mode. */ +} mpu_err_attributes_t; + +/*! @brief MPU access rights in supervisor mode for bus master 0 ~ 3. */ +typedef enum _mpu_supervisor_access_rights +{ + kMPU_SupervisorReadWriteExecute = 0U, /*!< Read write and execute operations are allowed in supervisor mode. */ + kMPU_SupervisorReadExecute = 1U, /*!< Read and execute operations are allowed in supervisor mode. */ + kMPU_SupervisorReadWrite = 2U, /*!< Read write operations are allowed in supervisor mode. */ + kMPU_SupervisorEqualToUsermode = 3U /*!< Access permission equal to user mode. */ +} mpu_supervisor_access_rights_t; + +/*! @brief MPU access rights in user mode for bus master 0 ~ 3. */ +typedef enum _mpu_user_access_rights +{ + kMPU_UserNoAccessRights = 0U, /*!< No access allowed in user mode. */ + kMPU_UserExecute = 1U, /*!< Execute operation is allowed in user mode. */ + kMPU_UserWrite = 2U, /*!< Write operation is allowed in user mode. */ + kMPU_UserWriteExecute = 3U, /*!< Write and execute operations are allowed in user mode. */ + kMPU_UserRead = 4U, /*!< Read is allowed in user mode. */ + kMPU_UserReadExecute = 5U, /*!< Read and execute operations are allowed in user mode. */ + kMPU_UserReadWrite = 6U, /*!< Read and write operations are allowed in user mode. */ + kMPU_UserReadWriteExecute = 7U /*!< Read write and execute operations are allowed in user mode. */ +} mpu_user_access_rights_t; + +/*! @brief MPU hardware basic information. */ +typedef struct _mpu_hardware_info +{ + uint8_t hardwareRevisionLevel; /*!< Specifies the MPU's hardware and definition reversion level. */ + uint8_t slavePortsNumbers; /*!< Specifies the number of slave ports connected to MPU. */ + mpu_region_total_num_t regionsNumbers; /*!< Indicates the number of region descriptors implemented. */ +} mpu_hardware_info_t; + +/*! @brief MPU detail error access information. */ +typedef struct _mpu_access_err_info +{ + uint32_t master; /*!< Access error master. */ + mpu_err_attributes_t attributes; /*!< Access error attributes. */ + mpu_err_access_type_t accessType; /*!< Access error type. */ + mpu_err_access_control_t accessControl; /*!< Access error control. */ + uint32_t address; /*!< Access error address. */ +#if FSL_FEATURE_MPU_HAS_PROCESS_IDENTIFIER + uint8_t processorIdentification; /*!< Access error processor identification. */ +#endif /* FSL_FEATURE_MPU_HAS_PROCESS_IDENTIFIER */ +} mpu_access_err_info_t; + +/*! @brief MPU read/write/execute rights control for bus master 0 ~ 3. */ +typedef struct _mpu_rwxrights_master_access_control +{ + mpu_supervisor_access_rights_t superAccessRights; /*!< Master access rights in supervisor mode. */ + mpu_user_access_rights_t userAccessRights; /*!< Master access rights in user mode. */ +#if FSL_FEATURE_MPU_HAS_PROCESS_IDENTIFIER + bool processIdentifierEnable; /*!< Enables or disables process identifier. */ +#endif /* FSL_FEATURE_MPU_HAS_PROCESS_IDENTIFIER */ +} mpu_rwxrights_master_access_control_t; + +/*! @brief MPU read/write access control for bus master 4 ~ 7. */ +typedef struct _mpu_rwrights_master_access_control +{ + bool writeEnable; /*!< Enables or disables write permission. */ + bool readEnable; /*!< Enables or disables read permission. */ +} mpu_rwrights_master_access_control_t; + +/*! + * @brief MPU region configuration structure. + * + * This structure is used to configure the regionNum region. + * The accessRights1[0] ~ accessRights1[3] are used to configure the bus master + * 0 ~ 3 with the privilege rights setting. The accessRights2[0] ~ accessRights2[3] + * are used to configure the high master 4 ~ 7 with the normal read write permission. + * The master port assignment is the chip configuration. Normally, the core is the + * master 0, debugger is the master 1. + * Note: MPU assigns a priority scheme where the debugger is treated as the highest + * priority master followed by the core and then all the remaining masters. + * MPU protection does not allow writes from the core to affect the "regionNum 0" start + * and end address nor the permissions associated with the debugger. It can only write + * the permission fields associated with the other masters. This protection guarantee + * the debugger always has access to the entire address space and those rights can't + * be changed by the core or any other bus master. Prepare + * the region configuration when regionNum is 0. + */ +typedef struct _mpu_region_config +{ + uint32_t regionNum; /*!< MPU region number, range form 0 ~ FSL_FEATURE_MPU_DESCRIPTOR_COUNT - 1. */ + uint32_t startAddress; /*!< Memory region start address. Note: bit0 ~ bit4 always be marked as 0 by MPU. The actual + start address is 0-modulo-32 byte address. */ + uint32_t endAddress; /*!< Memory region end address. Note: bit0 ~ bit4 always be marked as 1 by MPU. The actual end + address is 31-modulo-32 byte address. */ + mpu_rwxrights_master_access_control_t accessRights1[4]; /*!< Masters with read, write and execute rights setting. */ + mpu_rwrights_master_access_control_t accessRights2[4]; /*!< Masters with normal read write rights setting. */ +#if FSL_FEATURE_MPU_HAS_PROCESS_IDENTIFIER + uint8_t processIdentifier; /*!< Process identifier used when "processIdentifierEnable" set with true. */ + uint8_t + processIdMask; /*!< Process identifier mask. The setting bit will ignore the same bit in process identifier. */ +#endif /* FSL_FEATURE_MPU_HAS_PROCESS_IDENTIFIER */ +} mpu_region_config_t; + +/*! + * @brief The configuration structure for the MPU initialization. + * + * This structure is used when calling the MPU_Init function. + */ +typedef struct _mpu_config +{ + mpu_region_config_t regionConfig; /*!< region access permission. */ + struct _mpu_config *next; /*!< pointer to the next structure. */ +} mpu_config_t; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif /* _cplusplus */ + +/*! + * @name Initialization and deinitialization + * @{ + */ + +/*! + * @brief Initializes the MPU with the user configuration structure. + * + * This function configures the MPU module with the user-defined configuration. + * + * @param base MPU peripheral base address. + * @param config The pointer to the configuration structure. + */ +void MPU_Init(MPU_Type *base, const mpu_config_t *config); + +/*! + * @brief Deinitializes the MPU regions. + * + * @param base MPU peripheral base address. + */ +void MPU_Deinit(MPU_Type *base); + +/* @}*/ + +/*! + * @name Basic Control Operations + * @{ + */ + +/*! + * @brief Enables/disables the MPU globally. + * + * Call this API to enable or disable the MPU module. + * + * @param base MPU peripheral base address. + * @param enable True enable MPU, false disable MPU. + */ +static inline void MPU_Enable(MPU_Type *base, bool enable) +{ + if (enable) + { + /* Enable the MPU globally. */ + base->CESR |= MPU_CESR_VLD_MASK; + } + else + { /* Disable the MPU globally. */ + base->CESR &= ~MPU_CESR_VLD_MASK; + } +} + +/*! + * @brief Enables/disables the MPU for a special region. + * + * When MPU is enabled, call this API to disable an unused region + * of an enabled MPU. Call this API to minimize the power dissipation. + * + * @param base MPU peripheral base address. + * @param number MPU region number. + * @param enable True enable the special region MPU, false disable the special region MPU. + */ +static inline void MPU_RegionEnable(MPU_Type *base, uint32_t number, bool enable) +{ + if (enable) + { + /* Enable the #number region MPU. */ + base->WORD[number][3] |= MPU_WORD_VLD_MASK; + } + else + { /* Disable the #number region MPU. */ + base->WORD[number][3] &= ~MPU_WORD_VLD_MASK; + } +} + +/*! + * @brief Gets the MPU basic hardware information. + * + * @param base MPU peripheral base address. + * @param hardwareInform The pointer to the MPU hardware information structure. See "mpu_hardware_info_t". + */ +void MPU_GetHardwareInfo(MPU_Type *base, mpu_hardware_info_t *hardwareInform); + +/*! + * @brief Sets the MPU region. + * + * Note: Due to the MPU protection, the Region number 0 does not allow writes from + * core to affect the start and end address nor the permissions associated with + * the debugger. It can only write the permission fields associated + * with the other masters. + * + * @param base MPU peripheral base address. + * @param regionConfig The pointer to the MPU user configuration structure. See "mpu_region_config_t". + */ +void MPU_SetRegionConfig(MPU_Type *base, const mpu_region_config_t *regionConfig); + +/*! + * @brief Sets the region start and end address. + * + * Memory region start address. Note: bit0 ~ bit4 is always marked as 0 by MPU. + * The actual start address by MPU is 0-modulo-32 byte address. + * Memory region end address. Note: bit0 ~ bit4 always be marked as 1 by MPU. + * The actual end address used by MPU is 31-modulo-32 byte address. + * Note: Due to the MPU protection, the startAddr and endAddr can't be + * changed by the core when regionNum is 0. + * + * @param base MPU peripheral base address. + * @param regionNum MPU region number. The range is from 0 to + * FSL_FEATURE_MPU_DESCRIPTOR_COUNT - 1. + * @param startAddr Region start address. + * @param endAddr Region end address. + */ +void MPU_SetRegionAddr(MPU_Type *base, uint32_t regionNum, uint32_t startAddr, uint32_t endAddr); + +/*! + * @brief Sets the MPU region access rights for masters with read, write and execute rights. + * The MPU access rights depend on two board classifications of bus masters. + * The privilege rights masters and the normal rights masters. + * The privilege rights masters have the read, write and execute access rights. + * So except the normal read and write rights, the execute rights is also + * allowed for these masters. The privilege rights masters are normally range from + * bus masters 0 - 3. However, the maximum master number is device-specific. + * See the "FSL_FEATURE_MPU_PRIVILEGED_RIGHTS_MASTER_MAX_INDEX". + * The normal rights masters access rights control see + * "MPU_SetRegionRwMasterAccessRights()". + * + * @param base MPU peripheral base address. + * @param regionNum MPU region number. Should range from 0 to + * FSL_FEATURE_MPU_DESCRIPTOR_COUNT - 1. + * @param masterNum MPU bus master number. Should range from 0 to + * FSL_FEATURE_MPU_PRIVILEGED_RIGHTS_MASTER_MAX_INDEX. + * @param accessRights The pointer to the MPU access rights configuration. See "mpu_rwxrights_master_access_control_t". + */ +void MPU_SetRegionRwxMasterAccessRights(MPU_Type *base, + uint32_t regionNum, + uint32_t masterNum, + const mpu_rwxrights_master_access_control_t *accessRights); + +/*! + * @brief Sets the MPU region access rights for masters with read and write rights. + * The MPU access rights depend on two board classifications of bus masters. + * The privilege rights masters and the normal rights masters. + * The normal rights masters only have the read and write access permissions. + * The privilege rights access control see "MPU_SetRegionRwxMasterAccessRights". + * + * @param base MPU peripheral base address. + * @param regionNum MPU region number. The range is from 0 to + * FSL_FEATURE_MPU_DESCRIPTOR_COUNT - 1. + * @param masterNum MPU bus master number. Should range from FSL_FEATURE_MPU_PRIVILEGED_RIGHTS_MASTER_COUNT + * to ~ FSL_FEATURE_MPU_MASTER_MAX_INDEX. + * @param accessRights The pointer to the MPU access rights configuration. See "mpu_rwrights_master_access_control_t". + */ +void MPU_SetRegionRwMasterAccessRights(MPU_Type *base, + uint32_t regionNum, + uint32_t masterNum, + const mpu_rwrights_master_access_control_t *accessRights); + +/*! + * @brief Gets the numbers of slave ports where errors occur. + * + * @param base MPU peripheral base address. + * @param slaveNum MPU slave port number. + * @return The slave ports error status. + * true - error happens in this slave port. + * false - error didn't happen in this slave port. + */ +bool MPU_GetSlavePortErrorStatus(MPU_Type *base, mpu_slave_t slaveNum); + +/*! + * @brief Gets the MPU detailed error access information. + * + * @param base MPU peripheral base address. + * @param slaveNum MPU slave port number. + * @param errInform The pointer to the MPU access error information. See "mpu_access_err_info_t". + */ +void MPU_GetDetailErrorAccessInfo(MPU_Type *base, mpu_slave_t slaveNum, mpu_access_err_info_t *errInform); + +/* @} */ + +#if defined(__cplusplus) +} +#endif + +/*! @}*/ + +#endif /* _FSL_MPU_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_pit.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_pit.c new file mode 100644 index 00000000000..1f2fdfe8b45 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_pit.c @@ -0,0 +1,119 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_pit.h" + +/******************************************************************************* + * Prototypes + ******************************************************************************/ +/*! + * @brief Gets the instance from the base address to be used to gate or ungate the module clock + * + * @param base PIT peripheral base address + * + * @return The PIT instance + */ +static uint32_t PIT_GetInstance(PIT_Type *base); + +/******************************************************************************* + * Variables + ******************************************************************************/ +/*! @brief Pointers to PIT bases for each instance. */ +static PIT_Type *const s_pitBases[] = PIT_BASE_PTRS; + +/*! @brief Pointers to PIT clocks for each instance. */ +static const clock_ip_name_t s_pitClocks[] = PIT_CLOCKS; + +/******************************************************************************* + * Code + ******************************************************************************/ +static uint32_t PIT_GetInstance(PIT_Type *base) +{ + uint32_t instance; + + /* Find the instance index from base address mappings. */ + for (instance = 0; instance < FSL_FEATURE_SOC_PIT_COUNT; instance++) + { + if (s_pitBases[instance] == base) + { + break; + } + } + + assert(instance < FSL_FEATURE_SOC_PIT_COUNT); + + return instance; +} + +void PIT_Init(PIT_Type *base, const pit_config_t *config) +{ + assert(config); + + /* Ungate the PIT clock*/ + CLOCK_EnableClock(s_pitClocks[PIT_GetInstance(base)]); + + /* Enable PIT timers */ + base->MCR &= ~PIT_MCR_MDIS_MASK; + + /* Config timer operation when in debug mode */ + if (config->enableRunInDebug) + { + base->MCR &= ~PIT_MCR_FRZ_MASK; + } + else + { + base->MCR |= PIT_MCR_FRZ_MASK; + } +} + +void PIT_Deinit(PIT_Type *base) +{ + /* Disable PIT timers */ + base->MCR |= PIT_MCR_MDIS_MASK; + + /* Gate the PIT clock*/ + CLOCK_DisableClock(s_pitClocks[PIT_GetInstance(base)]); +} + +#if defined(FSL_FEATURE_PIT_HAS_LIFETIME_TIMER) && FSL_FEATURE_PIT_HAS_LIFETIME_TIMER + +uint64_t PIT_GetLifetimeTimerCount(PIT_Type *base) +{ + uint32_t valueH = 0U; + uint32_t valueL = 0U; + + /* LTMR64H should be read before LTMR64L */ + valueH = base->LTMR64H; + valueL = base->LTMR64L; + + return (((uint64_t)valueH << 32U) + (uint64_t)(valueL)); +} + +#endif /* FSL_FEATURE_PIT_HAS_LIFETIME_TIMER */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_pit.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_pit.h new file mode 100644 index 00000000000..f94c14af4f7 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_pit.h @@ -0,0 +1,354 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FSL_PIT_H_ +#define _FSL_PIT_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup pit + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +#define FSL_PIT_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) /*!< Version 2.0.0 */ +/*@}*/ + +/*! + * @brief List of PIT channels + * @note Actual number of available channels is SoC dependent + */ +typedef enum _pit_chnl +{ + kPIT_Chnl_0 = 0U, /*!< PIT channel number 0*/ + kPIT_Chnl_1, /*!< PIT channel number 1 */ + kPIT_Chnl_2, /*!< PIT channel number 2 */ + kPIT_Chnl_3, /*!< PIT channel number 3 */ +} pit_chnl_t; + +/*! @brief List of PIT interrupts */ +typedef enum _pit_interrupt_enable +{ + kPIT_TimerInterruptEnable = PIT_TCTRL_TIE_MASK, /*!< Timer interrupt enable*/ +} pit_interrupt_enable_t; + +/*! @brief List of PIT status flags */ +typedef enum _pit_status_flags +{ + kPIT_TimerFlag = PIT_TFLG_TIF_MASK, /*!< Timer flag */ +} pit_status_flags_t; + +/*! + * @brief PIT config structure + * + * This structure holds the configuration settings for the PIT peripheral. To initialize this + * structure to reasonable defaults, call the PIT_GetDefaultConfig() function and pass a + * pointer to your config structure instance. + * + * The config struct can be made const so it resides in flash + */ +typedef struct _pit_config +{ + bool enableRunInDebug; /*!< true: Timers run in debug mode; false: Timers stop in debug mode */ +} pit_config_t; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @name Initialization and deinitialization + * @{ + */ + +/*! + * @brief Ungates the PIT clock, enables the PIT module and configures the peripheral for basic operation. + * + * @note This API should be called at the beginning of the application using the PIT driver. + * + * @param base PIT peripheral base address + * @param config Pointer to user's PIT config structure + */ +void PIT_Init(PIT_Type *base, const pit_config_t *config); + +/*! + * @brief Gate the PIT clock and disable the PIT module + * + * @param base PIT peripheral base address + */ +void PIT_Deinit(PIT_Type *base); + +/*! + * @brief Fill in the PIT config struct with the default settings + * + * The default values are: + * @code + * config->enableRunInDebug = false; + * @endcode + * @param config Pointer to user's PIT config structure. + */ +static inline void PIT_GetDefaultConfig(pit_config_t *config) +{ + assert(config); + + /* Timers are stopped in Debug mode */ + config->enableRunInDebug = false; +} + +#if defined(FSL_FEATURE_PIT_HAS_CHAIN_MODE) && FSL_FEATURE_PIT_HAS_CHAIN_MODE + +/*! + * @brief Enables or disables chaining a timer with the previous timer. + * + * When a timer has a chain mode enabled, it only counts after the previous + * timer has expired. If the timer n-1 has counted down to 0, counter n + * decrements the value by one. Each timer is 32-bits, this allows the developers + * to chain timers together and form a longer timer (64-bits and larger). The first timer + * (timer 0) cannot be chained to any other timer. + * + * @param base PIT peripheral base address + * @param channel Timer channel number which is chained with the previous timer + * @param enable Enable or disable chain. + * true: Current timer is chained with the previous timer. + * false: Timer doesn't chain with other timers. + */ +static inline void PIT_SetTimerChainMode(PIT_Type *base, pit_chnl_t channel, bool enable) +{ + if (enable) + { + base->CHANNEL[channel].TCTRL |= PIT_TCTRL_CHN_MASK; + } + else + { + base->CHANNEL[channel].TCTRL &= ~PIT_TCTRL_CHN_MASK; + } +} + +#endif /* FSL_FEATURE_PIT_HAS_CHAIN_MODE */ + +/*! @}*/ + +/*! + * @name Interrupt Interface + * @{ + */ + +/*! + * @brief Enables the selected PIT interrupts. + * + * @param base PIT peripheral base address + * @param channel Timer channel number + * @param mask The interrupts to enable. This is a logical OR of members of the + * enumeration ::pit_interrupt_enable_t + */ +static inline void PIT_EnableInterrupts(PIT_Type *base, pit_chnl_t channel, uint32_t mask) +{ + base->CHANNEL[channel].TCTRL |= mask; +} + +/*! + * @brief Disables the selected PIT interrupts. + * + * @param base PIT peripheral base address + * @param channel Timer channel number + * @param mask The interrupts to disable. This is a logical OR of members of the + * enumeration ::pit_interrupt_enable_t + */ +static inline void PIT_DisableInterrupts(PIT_Type *base, pit_chnl_t channel, uint32_t mask) +{ + base->CHANNEL[channel].TCTRL &= ~mask; +} + +/*! + * @brief Gets the enabled PIT interrupts. + * + * @param base PIT peripheral base address + * @param channel Timer channel number + * + * @return The enabled interrupts. This is the logical OR of members of the + * enumeration ::pit_interrupt_enable_t + */ +static inline uint32_t PIT_GetEnabledInterrupts(PIT_Type *base, pit_chnl_t channel) +{ + return (base->CHANNEL[channel].TCTRL & PIT_TCTRL_TIE_MASK); +} + +/*! @}*/ + +/*! + * @name Status Interface + * @{ + */ + +/*! + * @brief Gets the PIT status flags + * + * @param base PIT peripheral base address + * @param channel Timer channel number + * + * @return The status flags. This is the logical OR of members of the + * enumeration ::pit_status_flags_t + */ +static inline uint32_t PIT_GetStatusFlags(PIT_Type *base, pit_chnl_t channel) +{ + return (base->CHANNEL[channel].TFLG & PIT_TFLG_TIF_MASK); +} + +/*! + * @brief Clears the PIT status flags. + * + * @param base PIT peripheral base address + * @param channel Timer channel number + * @param mask The status flags to clear. This is a logical OR of members of the + * enumeration ::pit_status_flags_t + */ +static inline void PIT_ClearStatusFlags(PIT_Type *base, pit_chnl_t channel, uint32_t mask) +{ + base->CHANNEL[channel].TFLG = mask; +} + +/*! @}*/ + +/*! + * @name Read and Write the timer period + * @{ + */ + +/*! + * @brief Sets the timer period in units of count. + * + * Timers begin counting from the value set by this function until it reaches 0, + * then it generates an interrupt and load this register value again. + * Writing a new value to this register does not restart the timer. Instead, the value + * is loaded after the timer expires. + * + * @note User can call the utility macros provided in fsl_common.h to convert to ticks + * + * @param base PIT peripheral base address + * @param channel Timer channel number + * @param count Timer period in units of ticks + */ +static inline void PIT_SetTimerPeriod(PIT_Type *base, pit_chnl_t channel, uint32_t count) +{ + base->CHANNEL[channel].LDVAL = count; +} + +/*! + * @brief Reads the current timer counting value. + * + * This function returns the real-time timer counting value, in a range from 0 to a + * timer period. + * + * @note User can call the utility macros provided in fsl_common.h to convert ticks to usec or msec + * + * @param base PIT peripheral base address + * @param channel Timer channel number + * + * @return Current timer counting value in ticks + */ +static inline uint32_t PIT_GetCurrentTimerCount(PIT_Type *base, pit_chnl_t channel) +{ + return base->CHANNEL[channel].CVAL; +} + +/*! @}*/ + +/*! + * @name Timer Start and Stop + * @{ + */ + +/*! + * @brief Starts the timer counting. + * + * After calling this function, timers load period value, count down to 0 and + * then load the respective start value again. Each time a timer reaches 0, + * it generates a trigger pulse and sets the timeout interrupt flag. + * + * @param base PIT peripheral base address + * @param channel Timer channel number. + */ +static inline void PIT_StartTimer(PIT_Type *base, pit_chnl_t channel) +{ + base->CHANNEL[channel].TCTRL |= PIT_TCTRL_TEN_MASK; +} + +/*! + * @brief Stops the timer counting. + * + * This function stops every timer counting. Timers reload their periods + * respectively after the next time they call the PIT_DRV_StartTimer. + * + * @param base PIT peripheral base address + * @param channel Timer channel number. + */ +static inline void PIT_StopTimer(PIT_Type *base, pit_chnl_t channel) +{ + base->CHANNEL[channel].TCTRL &= ~PIT_TCTRL_TEN_MASK; +} + +/*! @}*/ + +#if defined(FSL_FEATURE_PIT_HAS_LIFETIME_TIMER) && FSL_FEATURE_PIT_HAS_LIFETIME_TIMER + +/*! + * @brief Reads the current lifetime counter value. + * + * The lifetime timer is a 64-bit timer which chains timer 0 and timer 1 together. + * Timer 0 and 1 are chained by calling the PIT_SetTimerChainMode before using this timer. + * The period of lifetime timer is equal to the "period of timer 0 * period of timer 1". + * For the 64-bit value, the higher 32-bit has the value of timer 1, and the lower 32-bit + * has the value of timer 0. + * + * @param base PIT peripheral base address + * + * @return Current lifetime timer value + */ +uint64_t PIT_GetLifetimeTimerCount(PIT_Type *base); + +#endif /* FSL_FEATURE_PIT_HAS_LIFETIME_TIMER */ + +#if defined(__cplusplus) +} +#endif + +/*! @}*/ + +#endif /* _FSL_PIT_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_pmc.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_pmc.c new file mode 100644 index 00000000000..82d7b7ace13 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_pmc.c @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "fsl_pmc.h" + +#if (defined(FSL_FEATURE_PMC_HAS_PARAM) && FSL_FEATURE_PMC_HAS_PARAM) +void PMC_GetParam(PMC_Type *base, pmc_param_t *param) +{ + uint32_t reg = base->PARAM; + ; + param->vlpoEnable = (bool)(reg & PMC_PARAM_VLPOE_MASK); + param->hvdEnable = (bool)(reg & PMC_PARAM_HVDE_MASK); +} +#endif /* FSL_FEATURE_PMC_HAS_PARAM */ + +void PMC_ConfigureLowVoltDetect(PMC_Type *base, const pmc_low_volt_detect_config_t *config) +{ + base->LVDSC1 = (0U | +#if (defined(FSL_FEATURE_PMC_HAS_LVDV) && FSL_FEATURE_PMC_HAS_LVDV) + ((uint32_t)config->voltSelect << PMC_LVDSC1_LVDV_SHIFT) | +#endif + ((uint32_t)config->enableInt << PMC_LVDSC1_LVDIE_SHIFT) | + ((uint32_t)config->enableReset << PMC_LVDSC1_LVDRE_SHIFT) + /* Clear the Low Voltage Detect Flag with previouse power detect setting */ + | PMC_LVDSC1_LVDACK_MASK); +} + +void PMC_ConfigureLowVoltWarning(PMC_Type *base, const pmc_low_volt_warning_config_t *config) +{ + base->LVDSC2 = (0U | +#if (defined(FSL_FEATURE_PMC_HAS_LVWV) && FSL_FEATURE_PMC_HAS_LVWV) + ((uint32_t)config->voltSelect << PMC_LVDSC2_LVWV_SHIFT) | +#endif + ((uint32_t)config->enableInt << PMC_LVDSC2_LVWIE_SHIFT) + /* Clear the Low Voltage Warning Flag with previouse power detect setting */ + | PMC_LVDSC2_LVWACK_MASK); +} + +#if (defined(FSL_FEATURE_PMC_HAS_HVDSC1) && FSL_FEATURE_PMC_HAS_HVDSC1) +void PMC_ConfigureHighVoltDetect(PMC_Type *base, const pmc_high_volt_detect_config_t *config) +{ + base->HVDSC1 = (((uint32_t)config->voltSelect << PMC_HVDSC1_HVDV_SHIFT) | + ((uint32_t)config->enableInt << PMC_HVDSC1_HVDIE_SHIFT) | + ((uint32_t)config->enableReset << PMC_HVDSC1_HVDRE_SHIFT) + /* Clear the High Voltage Detect Flag with previouse power detect setting */ + | PMC_HVDSC1_HVDACK_MASK); +} +#endif /* FSL_FEATURE_PMC_HAS_HVDSC1 */ + +#if ((defined(FSL_FEATURE_PMC_HAS_BGBE) && FSL_FEATURE_PMC_HAS_BGBE) || \ + (defined(FSL_FEATURE_PMC_HAS_BGEN) && FSL_FEATURE_PMC_HAS_BGEN) || \ + (defined(FSL_FEATURE_PMC_HAS_BGBDS) && FSL_FEATURE_PMC_HAS_BGBDS)) +void PMC_ConfigureBandgapBuffer(PMC_Type *base, const pmc_bandgap_buffer_config_t *config) +{ + base->REGSC = (0U +#if (defined(FSL_FEATURE_PMC_HAS_BGBE) && FSL_FEATURE_PMC_HAS_BGBE) + | ((uint32_t)config->enable << PMC_REGSC_BGBE_SHIFT) +#endif /* FSL_FEATURE_PMC_HAS_BGBE */ +#if (defined(FSL_FEATURE_PMC_HAS_BGEN) && FSL_FEATURE_PMC_HAS_BGEN) + | (((uint32_t)config->enableInLowPowerMode << PMC_REGSC_BGEN_SHIFT)) +#endif /* FSL_FEATURE_PMC_HAS_BGEN */ +#if (defined(FSL_FEATURE_PMC_HAS_BGBDS) && FSL_FEATURE_PMC_HAS_BGBDS) + | ((uint32_t)config->drive << PMC_REGSC_BGBDS_SHIFT) +#endif /* FSL_FEATURE_PMC_HAS_BGBDS */ + ); +} +#endif diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_pmc.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_pmc.h new file mode 100644 index 00000000000..f39a22fc6c2 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_pmc.h @@ -0,0 +1,421 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FSL_PMC_H_ +#define _FSL_PMC_H_ + +#include "fsl_common.h" + +/*! @addtogroup pmc */ +/*! @{ */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief PMC driver version */ +#define FSL_PMC_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) /*!< Version 2.0.0. */ +/*@}*/ + +#if (defined(FSL_FEATURE_PMC_HAS_LVDV) && FSL_FEATURE_PMC_HAS_LVDV) +/*! + * @brief Low-Voltage Detect Voltage Select + */ +typedef enum _pmc_low_volt_detect_volt_select +{ + kPMC_LowVoltDetectLowTrip = 0U, /*!< Low trip point selected (VLVD = VLVDL )*/ + kPMC_LowVoltDetectHighTrip = 1U /*!< High trip point selected (VLVD = VLVDH )*/ +} pmc_low_volt_detect_volt_select_t; +#endif + +#if (defined(FSL_FEATURE_PMC_HAS_LVWV) && FSL_FEATURE_PMC_HAS_LVWV) +/*! + * @brief Low-Voltage Warning Voltage Select + */ +typedef enum _pmc_low_volt_warning_volt_select +{ + kPMC_LowVoltWarningLowTrip = 0U, /*!< Low trip point selected (VLVW = VLVW1)*/ + kPMC_LowVoltWarningMid1Trip = 1U, /*!< Mid 1 trip point selected (VLVW = VLVW2)*/ + kPMC_LowVoltWarningMid2Trip = 2U, /*!< Mid 2 trip point selected (VLVW = VLVW3)*/ + kPMC_LowVoltWarningHighTrip = 3U /*!< High trip point selected (VLVW = VLVW4)*/ +} pmc_low_volt_warning_volt_select_t; +#endif + +#if (defined(FSL_FEATURE_PMC_HAS_HVDSC1) && FSL_FEATURE_PMC_HAS_HVDSC1) +/*! + * @brief High-Voltage Detect Voltage Select + */ +typedef enum _pmc_high_volt_detect_volt_select +{ + kPMC_HighVoltDetectLowTrip = 0U, /*!< Low trip point selected (VHVD = VHVDL )*/ + kPMC_HighVoltDetectHighTrip = 1U /*!< High trip point selected (VHVD = VHVDH )*/ +} pmc_high_volt_detect_volt_select_t; +#endif /* FSL_FEATURE_PMC_HAS_HVDSC1 */ + +#if (defined(FSL_FEATURE_PMC_HAS_BGBDS) && FSL_FEATURE_PMC_HAS_BGBDS) +/*! + * @brief Bandgap Buffer Drive Select. + */ +typedef enum _pmc_bandgap_buffer_drive_select +{ + kPMC_BandgapBufferDriveLow = 0U, /*!< Low drive. */ + kPMC_BandgapBufferDriveHigh = 1U /*!< High drive. */ +} pmc_bandgap_buffer_drive_select_t; +#endif /* FSL_FEATURE_PMC_HAS_BGBDS */ + +#if (defined(FSL_FEATURE_PMC_HAS_VLPO) && FSL_FEATURE_PMC_HAS_VLPO) +/*! + * @brief VLPx Option + */ +typedef enum _pmc_vlp_freq_option +{ + kPMC_FreqRestrict = 0U, /*!< Frequency is restricted in VLPx mode. */ + kPMC_FreqUnrestrict = 1U /*!< Frequency is unrestricted in VLPx mode. */ +} pmc_vlp_freq_mode_t; +#endif /* FSL_FEATURE_PMC_HAS_VLPO */ + +#if (defined(FSL_FEATURE_PMC_HAS_VERID) && FSL_FEATURE_PMC_HAS_VERID) +/*! + @brief IP version ID definition. + */ +typedef struct _pmc_version_id +{ + uint16_t feature; /*!< Feature Specification Number. */ + uint8_t minor; /*!< Minor version number. */ + uint8_t major; /*!< Major version number. */ +} pmc_version_id_t; +#endif /* FSL_FEATURE_PMC_HAS_VERID */ + +#if (defined(FSL_FEATURE_PMC_HAS_PARAM) && FSL_FEATURE_PMC_HAS_PARAM) +/*! @brief IP parameter definition. */ +typedef struct _pmc_param +{ + bool vlpoEnable; /*!< VLPO enable. */ + bool hvdEnable; /*!< HVD enable. */ +} pmc_param_t; +#endif /* FSL_FEATURE_PMC_HAS_PARAM */ + +/*! + * @brief Low-Voltage Detect Configuration Structure + */ +typedef struct _pmc_low_volt_detect_config +{ + bool enableInt; /*!< Enable interrupt when low-voltage detect*/ + bool enableReset; /*!< Enable system reset when low-voltage detect*/ +#if (defined(FSL_FEATURE_PMC_HAS_LVDV) && FSL_FEATURE_PMC_HAS_LVDV) + pmc_low_volt_detect_volt_select_t voltSelect; /*!< Low-voltage detect trip point voltage selection*/ +#endif +} pmc_low_volt_detect_config_t; + +/*! + * @brief Low-Voltage Warning Configuration Structure + */ +typedef struct _pmc_low_volt_warning_config +{ + bool enableInt; /*!< Enable interrupt when low-voltage warning*/ +#if (defined(FSL_FEATURE_PMC_HAS_LVWV) && FSL_FEATURE_PMC_HAS_LVWV) + pmc_low_volt_warning_volt_select_t voltSelect; /*!< Low-voltage warning trip point voltage selection*/ +#endif +} pmc_low_volt_warning_config_t; + +#if (defined(FSL_FEATURE_PMC_HAS_HVDSC1) && FSL_FEATURE_PMC_HAS_HVDSC1) +/*! + * @brief High-Voltage Detect Configuration Structure + */ +typedef struct _pmc_high_volt_detect_config +{ + bool enableInt; /*!< Enable interrupt when high-voltage detect*/ + bool enableReset; /*!< Enable system reset when high-voltage detect*/ + pmc_high_volt_detect_volt_select_t voltSelect; /*!< High-voltage detect trip point voltage selection*/ +} pmc_high_volt_detect_config_t; +#endif /* FSL_FEATURE_PMC_HAS_HVDSC1 */ + +#if ((defined(FSL_FEATURE_PMC_HAS_BGBE) && FSL_FEATURE_PMC_HAS_BGBE) || \ + (defined(FSL_FEATURE_PMC_HAS_BGEN) && FSL_FEATURE_PMC_HAS_BGEN) || \ + (defined(FSL_FEATURE_PMC_HAS_BGBDS) && FSL_FEATURE_PMC_HAS_BGBDS)) +/*! + * @brief Bandgap Buffer configuration. + */ +typedef struct _pmc_bandgap_buffer_config +{ +#if (defined(FSL_FEATURE_PMC_HAS_BGBE) && FSL_FEATURE_PMC_HAS_BGBE) + bool enable; /*!< Enable bandgap buffer. */ +#endif +#if (defined(FSL_FEATURE_PMC_HAS_BGEN) && FSL_FEATURE_PMC_HAS_BGEN) + bool enableInLowPowerMode; /*!< Enable bandgap buffer in low-power mode. */ +#endif /* FSL_FEATURE_PMC_HAS_BGEN */ +#if (defined(FSL_FEATURE_PMC_HAS_BGBDS) && FSL_FEATURE_PMC_HAS_BGBDS) + pmc_bandgap_buffer_drive_select_t drive; /*!< Bandgap buffer drive select. */ +#endif /* FSL_FEATURE_PMC_HAS_BGBDS */ +} pmc_bandgap_buffer_config_t; +#endif + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus*/ + +/*! @name Power Management Controller Control APIs*/ +/*@{*/ + +#if (defined(FSL_FEATURE_PMC_HAS_VERID) && FSL_FEATURE_PMC_HAS_VERID) +/*! + * @brief Gets the PMC version ID. + * + * This function gets the PMC version ID, including major version number, + * minor version number and feature specification number. + * + * @param base PMC peripheral base address. + * @param versionId Pointer to version ID structure. + */ +static inline void PMC_GetVersionId(PMC_Type *base, pmc_version_id_t *versionId) +{ + *((uint32_t *)versionId) = base->VERID; +} +#endif /* FSL_FEATURE_PMC_HAS_VERID */ + +#if (defined(FSL_FEATURE_PMC_HAS_PARAM) && FSL_FEATURE_PMC_HAS_PARAM) +/*! + * @brief Gets the PMC parameter. + * + * This function gets the PMC parameter, including VLPO enable and HVD enable. + * + * @param base PMC peripheral base address. + * @param param Pointer to PMC param structure. + */ +void PMC_GetParam(PMC_Type *base, pmc_param_t *param); +#endif + +/*! + * @brief Configure the low-voltage detect setting. + * + * This function configures the low-voltage detect setting, including the trip + * point voltage setting, enable interrupt or not, enable system reset or not. + * + * @param base PMC peripheral base address. + * @param config Low-Voltage detect configuration structure. + */ +void PMC_ConfigureLowVoltDetect(PMC_Type *base, const pmc_low_volt_detect_config_t *config); + +/*! + * @brief Get Low-Voltage Detect Flag status + * + * This function reads the current LVDF status. If it returns 1, a low-voltage event is detected. + * + * @param base PMC peripheral base address. + * @return Current low-voltage detect flag + * - true: Low-voltage detected + * - false: Low-voltage not detected + */ +static inline bool PMC_GetLowVoltDetectFlag(PMC_Type *base) +{ + return (bool)(base->LVDSC1 & PMC_LVDSC1_LVDF_MASK); +} + +/*! + * @brief Acknowledge to clear the Low-voltage Detect flag + * + * This function acknowledges the low-voltage detection errors (write 1 to + * clear LVDF). + * + * @param base PMC peripheral base address. + */ +static inline void PMC_ClearLowVoltDetectFlag(PMC_Type *base) +{ + base->LVDSC1 |= PMC_LVDSC1_LVDACK_MASK; +} + +/*! + * @brief Configure the low-voltage warning setting. + * + * This function configures the low-voltage warning setting, including the trip + * point voltage setting and enable interrupt or not. + * + * @param base PMC peripheral base address. + * @param config Low-Voltage warning configuration structure. + */ +void PMC_ConfigureLowVoltWarning(PMC_Type *base, const pmc_low_volt_warning_config_t *config); + +/*! + * @brief Get Low-Voltage Warning Flag status + * + * This function polls the current LVWF status. When 1 is returned, it + * indicates a low-voltage warning event. LVWF is set when V Supply transitions + * below the trip point or after reset and V Supply is already below the V LVW. + * + * @param base PMC peripheral base address. + * @return Current LVWF status + * - true: Low-Voltage Warning Flag is set. + * - false: the Low-Voltage Warning does not happen. + */ +static inline bool PMC_GetLowVoltWarningFlag(PMC_Type *base) +{ + return (bool)(base->LVDSC2 & PMC_LVDSC2_LVWF_MASK); +} + +/*! + * @brief Acknowledge to Low-Voltage Warning flag + * + * This function acknowledges the low voltage warning errors (write 1 to + * clear LVWF). + * + * @param base PMC peripheral base address. + */ +static inline void PMC_ClearLowVoltWarningFlag(PMC_Type *base) +{ + base->LVDSC2 |= PMC_LVDSC2_LVWACK_MASK; +} + +#if (defined(FSL_FEATURE_PMC_HAS_HVDSC1) && FSL_FEATURE_PMC_HAS_HVDSC1) +/*! + * @brief Configure the high-voltage detect setting. + * + * This function configures the high-voltage detect setting, including the trip + * point voltage setting, enable interrupt or not, enable system reset or not. + * + * @param base PMC peripheral base address. + * @param config High-voltage detect configuration structure. + */ +void PMC_ConfigureHighVoltDetect(PMC_Type *base, const pmc_high_volt_detect_config_t *config); + +/*! + * @brief Get High-Voltage Detect Flag status + * + * This function reads the current HVDF status. If it returns 1, a low + * voltage event is detected. + * + * @param base PMC peripheral base address. + * @return Current high-voltage detect flag + * - true: High-Voltage detected + * - false: High-Voltage not detected + */ +static inline bool PMC_GetHighVoltDetectFlag(PMC_Type *base) +{ + return (bool)(base->HVDSC1 & PMC_HVDSC1_HVDF_MASK); +} + +/*! + * @brief Acknowledge to clear the High-Voltage Detect flag + * + * This function acknowledges the high-voltage detection errors (write 1 to + * clear HVDF). + * + * @param base PMC peripheral base address. + */ +static inline void PMC_ClearHighVoltDetectFlag(PMC_Type *base) +{ + base->HVDSC1 |= PMC_HVDSC1_HVDACK_MASK; +} +#endif /* FSL_FEATURE_PMC_HAS_HVDSC1 */ + +#if ((defined(FSL_FEATURE_PMC_HAS_BGBE) && FSL_FEATURE_PMC_HAS_BGBE) || \ + (defined(FSL_FEATURE_PMC_HAS_BGEN) && FSL_FEATURE_PMC_HAS_BGEN) || \ + (defined(FSL_FEATURE_PMC_HAS_BGBDS) && FSL_FEATURE_PMC_HAS_BGBDS)) +/*! + * @brief Configure the PMC bandgap + * + * This function configures the PMC bandgap, including the drive select and + * behavior in low-power mode. + * + * @param base PMC peripheral base address. + * @param config Pointer to the configuration structure + */ +void PMC_ConfigureBandgapBuffer(PMC_Type *base, const pmc_bandgap_buffer_config_t *config); +#endif + +#if (defined(FSL_FEATURE_PMC_HAS_ACKISO) && FSL_FEATURE_PMC_HAS_ACKISO) +/*! + * @brief Gets the acknowledge Peripherals and I/O pads isolation flag. + * + * This function reads the Acknowledge Isolation setting that indicates + * whether certain peripherals and the I/O pads are in a latched state as + * a result of having been in the VLLS mode. + * + * @param base PMC peripheral base address. + * @param base Base address for current PMC instance. + * @return ACK isolation + * 0 - Peripherals and I/O pads are in a normal run state. + * 1 - Certain peripherals and I/O pads are in an isolated and + * latched state. + */ +static inline bool PMC_GetPeriphIOIsolationFlag(PMC_Type *base) +{ + return (bool)(base->REGSC & PMC_REGSC_ACKISO_MASK); +} + +/*! + * @brief Acknowledge to Peripherals and I/O pads isolation flag. + * + * This function clears the ACK Isolation flag. Writing one to this setting + * when it is set releases the I/O pads and certain peripherals to their normal + * run mode state. + * + * @param base PMC peripheral base address. + */ +static inline void PMC_ClearPeriphIOIsolationFlag(PMC_Type *base) +{ + base->REGSC |= PMC_REGSC_ACKISO_MASK; +} +#endif /* FSL_FEATURE_PMC_HAS_ACKISO */ + +#if (defined(FSL_FEATURE_PMC_HAS_REGONS) && FSL_FEATURE_PMC_HAS_REGONS) +/*! + * @brief Gets the Regulator regulation status. + * + * This function returns the regulator to a run regulation status. It provides + * the current status of the internal voltage regulator. + * + * @param base PMC peripheral base address. + * @param base Base address for current PMC instance. + * @return Regulation status + * 0 - Regulator is in a stop regulation or in transition to/from the regulation. + * 1 - Regulator is in a run regulation. + * + */ +static inline bool PMC_IsRegulatorInRunRegulation(PMC_Type *base) +{ + return (bool)(base->REGSC & PMC_REGSC_REGONS_MASK); +} +#endif /* FSL_FEATURE_PMC_HAS_REGONS */ + +/*@}*/ + +#if defined(__cplusplus) +} +#endif /* __cplusplus*/ + +/*! @}*/ + +#endif /* _FSL_PMC_H_*/ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_port.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_port.h new file mode 100644 index 00000000000..935b032b223 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_port.h @@ -0,0 +1,381 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SDRVL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FSL_PORT_H_ +#define _FSL_PORT_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup port + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! Version 2.0.1. */ +#define FSL_PORT_DRIVER_VERSION (MAKE_VERSION(2, 0, 1)) +/*@}*/ + +/*! @brief Internal resistor pull feature selection */ +enum _port_pull +{ + kPORT_PullDisable = 0U, /*!< Internal pull-up/down resistor is disabled. */ + kPORT_PullDown = 2U, /*!< Internal pull-down resistor is enabled. */ + kPORT_PullUp = 3U, /*!< Internal pull-up resistor is enabled. */ +}; + +/*! @brief Slew rate selection */ +enum _port_slew_rate +{ + kPORT_FastSlewRate = 0U, /*!< Fast slew rate is configured. */ + kPORT_SlowSlewRate = 1U, /*!< Slow slew rate is configured. */ +}; + +#if defined(FSL_FEATURE_PORT_HAS_OPEN_DRAIN) && FSL_FEATURE_PORT_HAS_OPEN_DRAIN +/*! @brief Internal resistor pull feature enable/disable */ +enum _port_open_drain_enable +{ + kPORT_OpenDrainDisable = 0U, /*!< Internal pull-down resistor is disabled. */ + kPORT_OpenDrainEnable = 1U, /*!< Internal pull-up resistor is enabled. */ +}; +#endif /* FSL_FEATURE_PORT_HAS_OPEN_DRAIN */ + +/*! @brief Passive filter feature enable/disable */ +enum _port_passive_filter_enable +{ + kPORT_PassiveFilterDisable = 0U, /*!< Fast slew rate is configured. */ + kPORT_PassiveFilterEnable = 1U, /*!< Slow slew rate is configured. */ +}; + +/*! @brief Configures the drive strength. */ +enum _port_drive_strength +{ + kPORT_LowDriveStrength = 0U, /*!< Low-drive strength is configured. */ + kPORT_HighDriveStrength = 1U, /*!< High-drive strength is configured. */ +}; + +#if defined(FSL_FEATURE_PORT_HAS_PIN_CONTROL_LOCK) && FSL_FEATURE_PORT_HAS_PIN_CONTROL_LOCK +/*! @brief Unlock/lock the pin control register field[15:0] */ +enum _port_lock_register +{ + kPORT_UnlockRegister = 0U, /*!< Pin Control Register fields [15:0] are not locked. */ + kPORT_LockRegister = 1U, /*!< Pin Control Register fields [15:0] are locked. */ +}; +#endif /* FSL_FEATURE_PORT_HAS_PIN_CONTROL_LOCK */ + +/*! @brief Pin mux selection */ +typedef enum _port_mux +{ + kPORT_PinDisabledOrAnalog = 0U, /*!< Corresponding pin is disabled, but is used as an analog pin. */ + kPORT_MuxAsGpio = 1U, /*!< Corresponding pin is configured as GPIO. */ + kPORT_MuxAlt2 = 2U, /*!< Chip-specific */ + kPORT_MuxAlt3 = 3U, /*!< Chip-specific */ + kPORT_MuxAlt4 = 4U, /*!< Chip-specific */ + kPORT_MuxAlt5 = 5U, /*!< Chip-specific */ + kPORT_MuxAlt6 = 6U, /*!< Chip-specific */ + kPORT_MuxAlt7 = 7U, /*!< Chip-specific */ +} port_mux_t; + +/*! @brief Configures the interrupt generation condition. */ +typedef enum _port_interrupt +{ + kPORT_InterruptOrDMADisabled = 0x0U, /*!< Interrupt/DMA request is disabled. */ +#if defined(FSL_FEATURE_PORT_HAS_DMA_REQUEST) && FSL_FEATURE_PORT_HAS_DMA_REQUEST + kPORT_DMARisingEdge = 0x1U, /*!< DMA request on rising edge. */ + kPORT_DMAFallingEdge = 0x2U, /*!< DMA request on falling edge. */ + kPORT_DMAEitherEdge = 0x3U, /*!< DMA request on either edge. */ +#endif +#if defined(FSL_FEATURE_PORT_HAS_IRQC_FLAG) && FSL_FEATURE_PORT_HAS_IRQC_FLAG + kPORT_FlagRisingEdge = 0x05U, /*!< Flag sets on rising edge. */ + kPORT_FlagFallingEdge = 0x06U, /*!< Flag sets on falling edge. */ + kPORT_FlagEitherEdge = 0x07U, /*!< Flag sets on either edge. */ +#endif + kPORT_InterruptLogicZero = 0x8U, /*!< Interrupt when logic zero. */ + kPORT_InterruptRisingEdge = 0x9U, /*!< Interrupt on rising edge. */ + kPORT_InterruptFallingEdge = 0xAU, /*!< Interrupt on falling edge. */ + kPORT_InterruptEitherEdge = 0xBU, /*!< Interrupt on either edge. */ + kPORT_InterruptLogicOne = 0xCU, /*!< Interrupt when logic one. */ +#if defined(FSL_FEATURE_PORT_HAS_IRQC_TRIGGER) && FSL_FEATURE_PORT_HAS_IRQC_TRIGGER + kPORT_ActiveHighTriggerOutputEnable = 0xDU, /*!< Enable active high-trigger output. */ + kPORT_ActiveLowTriggerOutputEnable = 0xEU, /*!< Enable active low-trigger output. */ +#endif +} port_interrupt_t; + +#if defined(FSL_FEATURE_PORT_HAS_DIGITAL_FILTER) && FSL_FEATURE_PORT_HAS_DIGITAL_FILTER +/*! @brief Digital filter clock source selection */ +typedef enum _port_digital_filter_clock_source +{ + kPORT_BusClock = 0U, /*!< Digital filters are clocked by the bus clock. */ + kPORT_LpoClock = 1U, /*!< Digital filters are clocked by the 1 kHz LPO clock. */ +} port_digital_filter_clock_source_t; + +/*! @brief PORT digital filter feature configuration definition */ +typedef struct _port_digital_filter_config +{ + uint32_t digitalFilterWidth; /*!< Set digital filter width */ + port_digital_filter_clock_source_t clockSource; /*!< Set digital filter clockSource */ +} port_digital_filter_config_t; +#endif /* FSL_FEATURE_PORT_HAS_DIGITAL_FILTER */ + +/*! @brief PORT pin configuration structure */ +typedef struct _port_pin_config +{ + uint16_t pullSelect : 2; /*!< No-pull/pull-down/pull-up select */ + uint16_t slewRate : 1; /*!< Fast/slow slew rate Configure */ + uint16_t : 1; + uint16_t passiveFilterEnable : 1; /*!< Passive filter enable/disable */ +#if defined(FSL_FEATURE_PORT_HAS_OPEN_DRAIN) && FSL_FEATURE_PORT_HAS_OPEN_DRAIN + uint16_t openDrainEnable : 1; /*!< Open drain enable/disable */ +#else + uint16_t : 1; +#endif /* FSL_FEATURE_PORT_HAS_OPEN_DRAIN */ + uint16_t driveStrength : 1; /*!< Fast/slow drive strength configure */ + uint16_t : 1; + uint16_t mux : 3; /*!< Pin mux Configure */ + uint16_t : 4; +#if defined(FSL_FEATURE_PORT_HAS_PIN_CONTROL_LOCK) && FSL_FEATURE_PORT_HAS_PIN_CONTROL_LOCK + uint16_t lockRegister : 1; /*!< Lock/unlock the PCR field[15:0] */ +#else + uint16_t : 1; +#endif /* FSL_FEATURE_PORT_HAS_PIN_CONTROL_LOCK */ +} port_pin_config_t; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/*! @name Configuration */ +/*@{*/ + +/*! + * @brief Sets the port PCR register. + * + * This is an example to define an input pin or output pin PCR configuration: + * @code + * // Define a digital input pin PCR configuration + * port_pin_config_t config = { + * kPORT_PullUp, + * kPORT_FastSlewRate, + * kPORT_PassiveFilterDisable, + * kPORT_OpenDrainDisable, + * kPORT_LowDriveStrength, + * kPORT_MuxAsGpio, + * kPORT_UnLockRegister, + * }; + * @endcode + * + * @param base PORT peripheral base pointer. + * @param pin PORT pin number. + * @param config PORT PCR register configuration structure. + */ +static inline void PORT_SetPinConfig(PORT_Type *base, uint32_t pin, const port_pin_config_t *config) +{ + assert(config); + uint32_t addr = (uint32_t)&base->PCR[pin]; + *(volatile uint16_t *)(addr) = *((const uint16_t *)config); +} + +/*! + * @brief Sets the port PCR register for multiple pins. + * + * This is an example to define input pins or output pins PCR configuration: + * @code + * // Define a digital input pin PCR configuration + * port_pin_config_t config = { + * kPORT_PullUp , + * kPORT_PullEnable, + * kPORT_FastSlewRate, + * kPORT_PassiveFilterDisable, + * kPORT_OpenDrainDisable, + * kPORT_LowDriveStrength, + * kPORT_MuxAsGpio, + * kPORT_UnlockRegister, + * }; + * @endcode + * + * @param base PORT peripheral base pointer. + * @param mask PORT pin number macro. + * @param config PORT PCR register configuration structure. + */ +static inline void PORT_SetMultiplePinsConfig(PORT_Type *base, uint32_t mask, const port_pin_config_t *config) +{ + assert(config); + + uint16_t pcrl = *((const uint16_t *)config); + + if (mask & 0xffffU) + { + base->GPCLR = ((mask & 0xffffU) << 16) | pcrl; + } + if (mask >> 16) + { + base->GPCHR = (mask & 0xffff0000U) | pcrl; + } +} + +/*! + * @brief Configures the pin muxing. + * + * @param base PORT peripheral base pointer. + * @param pin PORT pin number. + * @param mux pin muxing slot selection. + * - #kPORT_PinDisabledOrAnalog: Pin disabled or work in analog function. + * - #kPORT_MuxAsGpio : Set as GPIO. + * - #kPORT_MuxAlt2 : chip-specific. + * - #kPORT_MuxAlt3 : chip-specific. + * - #kPORT_MuxAlt4 : chip-specific. + * - #kPORT_MuxAlt5 : chip-specific. + * - #kPORT_MuxAlt6 : chip-specific. + * - #kPORT_MuxAlt7 : chip-specific. + * @Note : This function is NOT recommended to use together with the PORT_SetPinsConfig, because + * the PORT_SetPinsConfig need to configure the pin mux anyway (Otherwise the pin mux is + * reset to zero : kPORT_PinDisabledOrAnalog). + * This function is recommended to use to reset the pin mux + * + */ +static inline void PORT_SetPinMux(PORT_Type *base, uint32_t pin, port_mux_t mux) +{ + base->PCR[pin] = (base->PCR[pin] & ~PORT_PCR_MUX_MASK) | PORT_PCR_MUX(mux); +} + +#if defined(FSL_FEATURE_PORT_HAS_DIGITAL_FILTER) && FSL_FEATURE_PORT_HAS_DIGITAL_FILTER + +/*! + * @brief Enables the digital filter in one port, each bit of the 32-bit register represents one pin. + * + * @param base PORT peripheral base pointer. + * @param mask PORT pin number macro. + */ +static inline void PORT_EnablePinsDigitalFilter(PORT_Type *base, uint32_t mask, bool enable) +{ + if (enable == true) + { + base->DFER |= mask; + } + else + { + base->DFER &= ~mask; + } +} + +/*! + * @brief Sets the digital filter in one port, each bit of the 32-bit register represents one pin. + * + * @param base PORT peripheral base pointer. + * @param config PORT digital filter configuration structure. + */ +static inline void PORT_SetDigitalFilterConfig(PORT_Type *base, const port_digital_filter_config_t *config) +{ + assert(config); + + base->DFCR = PORT_DFCR_CS(config->clockSource); + base->DFWR = PORT_DFWR_FILT(config->digitalFilterWidth); +} + +#endif /* FSL_FEATURE_PORT_HAS_DIGITAL_FILTER */ + +/*@}*/ + +/*! @name Interrupt */ +/*@{*/ + +/*! + * @brief Configures the port pin interrupt/DMA request. + * + * @param base PORT peripheral base pointer. + * @param pin PORT pin number. + * @param config PORT pin interrupt configuration. + * - #kPORT_InterruptOrDMADisabled: Interrupt/DMA request disabled. + * - #kPORT_DMARisingEdge : DMA request on rising edge(if the DMA requests exit). + * - #kPORT_DMAFallingEdge: DMA request on falling edge(if the DMA requests exit). + * - #kPORT_DMAEitherEdge : DMA request on either edge(if the DMA requests exit). + * - #kPORT_FlagRisingEdge : Flag sets on rising edge(if the Flag states exit). + * - #kPORT_FlagFallingEdge : Flag sets on falling edge(if the Flag states exit). + * - #kPORT_FlagEitherEdge : Flag sets on either edge(if the Flag states exit). + * - #kPORT_InterruptLogicZero : Interrupt when logic zero. + * - #kPORT_InterruptRisingEdge : Interrupt on rising edge. + * - #kPORT_InterruptFallingEdge: Interrupt on falling edge. + * - #kPORT_InterruptEitherEdge : Interrupt on either edge. + * - #kPORT_InterruptLogicOne : Interrupt when logic one. + * - #kPORT_ActiveHighTriggerOutputEnable : Enable active high-trigger output (if the trigger states exit). + * - #kPORT_ActiveLowTriggerOutputEnable : Enable active low-trigger output (if the trigger states exit). + */ +static inline void PORT_SetPinInterruptConfig(PORT_Type *base, uint32_t pin, port_interrupt_t config) +{ + base->PCR[pin] = (base->PCR[pin] & ~PORT_PCR_IRQC_MASK) | PORT_PCR_IRQC(config); +} + +/*! + * @brief Reads the whole port status flag. + * + * If a pin is configured to generate the DMA request, the corresponding flag + * is cleared automatically at the completion of the requested DMA transfer. + * Otherwise, the flag remains set until a logic one is written to that flag. + * If configured for a level sensitive interrupt that remains asserted, the flag + * is set again immediately. + * + * @param base PORT peripheral base pointer. + * @return Current port interrupt status flags, for example, 0x00010001 means the + * pin 0 and 17 have the interrupt. + */ +static inline uint32_t PORT_GetPinsInterruptFlags(PORT_Type *base) +{ + return base->ISFR; +} + +/*! + * @brief Clears the multiple pin interrupt status flag. + * + * @param base PORT peripheral base pointer. + * @param mask PORT pin number macro. + */ +static inline void PORT_ClearPinsInterruptFlags(PORT_Type *base, uint32_t mask) +{ + base->ISFR = mask; +} + +/*@}*/ + +#if defined(__cplusplus) +} +#endif + +/*! @}*/ + +#endif /* _FSL_PORT_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_qspi.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_qspi.c new file mode 100644 index 00000000000..00f511cd73c --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_qspi.c @@ -0,0 +1,345 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_qspi.h" + +/******************************************************************************* + * Definitations + ******************************************************************************/ +enum _qspi_transfer_state +{ + kQSPI_TxBusy = 0x0U, /*!< QSPI is busy */ + kQSPI_TxIdle, /*!< Transfer is done. */ + kQSPI_TxError /*!< Transfer error occured. */ +}; + +#define QSPI_AHB_BUFFER_REG(base, index) (*((uint32_t *)&(base->BUF0CR) + index)) + +/******************************************************************************* + * Prototypes + ******************************************************************************/ +/*! +* @brief Get the instance number for QSPI. +* +* @param base QSPI base pointer. +*/ +uint32_t QSPI_GetInstance(QuadSPI_Type *base); + +/******************************************************************************* + * Variables + ******************************************************************************/ +/* Base pointer array */ +static QuadSPI_Type *const s_qspiBases[] = QuadSPI_BASE_PTRS; +/* Clock name array */ +static const clock_ip_name_t s_qspiClock[] = QSPI_CLOCKS; + +/******************************************************************************* + * Code + ******************************************************************************/ +uint32_t QSPI_GetInstance(QuadSPI_Type *base) +{ + uint32_t instance; + + /* Find the instance index from base address mappings. */ + for (instance = 0; instance < FSL_FEATURE_SOC_QuadSPI_COUNT; instance++) + { + if (s_qspiBases[instance] == base) + { + break; + } + } + + assert(instance < FSL_FEATURE_SOC_QuadSPI_COUNT); + + return instance; +} + +void QSPI_Init(QuadSPI_Type *base, qspi_config_t *config, uint32_t srcClock_Hz) +{ + uint32_t i = 0; + uint32_t val = 0; + + /* Enable QSPI clock */ + CLOCK_EnableClock(s_qspiClock[QSPI_GetInstance(base)]); + + /* Do software reset to QSPI module */ + QSPI_SoftwareReset(base); + + /* Clear the FIFO region */ + QSPI_ClearFifo(base, kQSPI_AllFifo); + + /* Configure QSPI */ + QSPI_Enable(base, false); + + /* Set qspi clock source */ + base->SOCCR = config->clockSource; + + /* Set the divider of QSPI clock */ + base->MCR &= ~QuadSPI_MCR_SCLKCFG_MASK; + base->MCR |= QuadSPI_MCR_SCLKCFG(srcClock_Hz / config->baudRate - 1U); + + /* Set AHB buffer size and buffer master */ + for (i = 0; i < FSL_FEATURE_QSPI_AHB_BUFFER_COUNT; i++) + { + val = QuadSPI_BUF0CR_MSTRID(config->AHBbufferMaster[i]) | QuadSPI_BUF0CR_ADATSZ(config->AHBbufferSize[i] / 8U); + QSPI_AHB_BUFFER_REG(base, i) = val; + } + if (config->enableAHBbuffer3AllMaster) + { + base->BUF3CR |= QuadSPI_BUF3CR_ALLMST_MASK; + } + else + { + base->BUF3CR &= ~QuadSPI_BUF3CR_ALLMST_MASK; + } + + /* Set watermark */ + base->RBCT &= ~QuadSPI_RBCT_WMRK_MASK; + base->RBCT |= QuadSPI_RBCT_WMRK(config->rxWatermark - 1); + base->TBCT &= ~QuadSPI_TBCT_WMRK_MASK; + base->TBCT |= QuadSPI_TBCT_WMRK(config->txWatermark - 1); + + /* Enable QSPI module */ + if (config->enableQspi) + { + QSPI_Enable(base, true); + } +} + +void QSPI_GetDefaultQspiConfig(qspi_config_t *config) +{ + config->clockSource = 2U; + config->baudRate = 24000000U; + config->AHBbufferMaster[0] = 0xE; + config->AHBbufferMaster[1] = 0xE; + config->AHBbufferMaster[2] = 0xE; + config->enableAHBbuffer3AllMaster = true; + config->txWatermark = 8; + config->rxWatermark = 8; + config->enableQspi = true; +} + +void QSPI_Deinit(QuadSPI_Type *base) +{ + QSPI_Enable(base, false); + CLOCK_DisableClock(s_qspiClock[QSPI_GetInstance(base)]); +} + +void QSPI_SetFlashConfig(QuadSPI_Type *base, qspi_flash_config_t *config) +{ + uint32_t address = FSL_FEATURE_QSPI_AMBA_BASE + config->flashA1Size; + uint32_t val = 0; + uint32_t i = 0; + + /* Disable module */ + QSPI_Enable(base, false); + + /* Config the serial flash size */ + base->SFA1AD = address; + address += config->flashA2Size; + base->SFA2AD = address; + address += config->flashB1Size; + base->SFB1AD = address; + address += config->flashB2Size; + base->SFB2AD = address; + + /* Set Word Addressable feature */ + val = QuadSPI_SFACR_WA(config->enableWordAddress) | QuadSPI_SFACR_CAS(config->cloumnspace); + base->SFACR = val; + + /* Config look up table */ + base->LUTKEY = 0x5AF05AF0U; + base->LCKCR = 0x2U; + for (i = 0; i < FSL_FEATURE_QSPI_LUT_DEPTH; i++) + { + base->LUT[i] = config->lookuptable[i]; + } + base->LUTKEY = 0x5AF05AF0U; + base->LCKCR = 0x1U; + + /* Config flash timing */ + val = QuadSPI_FLSHCR_TCSS(config->CSHoldTime) | QuadSPI_FLSHCR_TDH(config->dataHoldTime) | + QuadSPI_FLSHCR_TCSH(config->CSSetupTime); + base->FLSHCR = val; + + /* Set flash endianness */ + base->MCR &= ~QuadSPI_MCR_END_CFG_MASK; + base->MCR |= QuadSPI_MCR_END_CFG(config->endian); + + /* Enable QSPI again */ + QSPI_Enable(base, true); +} + +void QSPI_SoftwareReset(QuadSPI_Type *base) +{ + volatile uint32_t i = 0; + + /* Reset AHB domain and buffer domian */ + base->MCR |= (QuadSPI_MCR_SWRSTHD_MASK | QuadSPI_MCR_SWRSTSD_MASK); + + /* Wait several time for the reset to finish, this method came from IC team */ + for (i = 0; i < 100; i++) + { + __ASM("nop"); + } + + /* Disable QSPI module */ + QSPI_Enable(base, false); + + /* Clear the reset flags */ + base->MCR &= ~(QuadSPI_MCR_SWRSTHD_MASK | QuadSPI_MCR_SWRSTSD_MASK); + + /* Enable QSPI module */ + QSPI_Enable(base, true); +} + +uint32_t QSPI_GetRxDataRegisterAddress(QuadSPI_Type *base) +{ + /* From RDBR */ + if (base->RBCT & QuadSPI_RBCT_RXBRD_MASK) + { + return (uint32_t)(&(base->RBDR[0])); + } + else + { + /* From ARDB */ + return FSL_FEATURE_QSPI_ARDB_BASE; + } +} + +void QSPI_ExecuteIPCommand(QuadSPI_Type *base, uint32_t index) +{ + while (QSPI_GetStatusFlags(base) & (kQSPI_Busy | kQSPI_IPAccess)) + { + } + QSPI_ClearCommandSequence(base, kQSPI_IPSeq); + + /* Write the seqid bit */ + base->IPCR = ((base->IPCR & (~QuadSPI_IPCR_SEQID_MASK)) | QuadSPI_IPCR_SEQID(index / 4U)); +} + +void QSPI_ExecuteAHBCommand(QuadSPI_Type *base, uint32_t index) +{ + while (QSPI_GetStatusFlags(base) & (kQSPI_Busy | kQSPI_AHBAccess)) + { + } + QSPI_ClearCommandSequence(base, kQSPI_BufferSeq); + base->BFGENCR = ((base->BFGENCR & (~QuadSPI_BFGENCR_SEQID_MASK)) | QuadSPI_BFGENCR_SEQID(index / 4U)); +} + +void QSPI_UpdateLUT(QuadSPI_Type *base, uint32_t index, uint32_t *cmd) +{ + uint8_t i = 0; + + /* Unlock the LUT */ + base->LUTKEY = 0x5AF05AF0U; + base->LCKCR = 0x2U; + + /* Write data into LUT */ + for (i = 0; i < 4; i++) + { + base->LUT[index + i] = *cmd; + cmd++; + } + + /* Lcok LUT again */ + base->LUTKEY = 0x5AF05AF0U; + base->LCKCR = 0x1U; +} + +void QSPI_SetReadDataArea(QuadSPI_Type *base, qspi_read_area_t area) +{ + base->RBCT &= ~QuadSPI_RBCT_RXBRD_MASK; + base->RBCT |= QuadSPI_RBCT_RXBRD(area); +} + +uint32_t QSPI_ReadData(QuadSPI_Type *base) +{ + if (base->RBCT & QuadSPI_RBCT_RXBRD_MASK) + { + return base->RBDR[0]; + } + else + { + /* Data from ARDB. */ + return *((uint32_t *)FSL_FEATURE_QSPI_ARDB_BASE); + } +} + +void QSPI_WriteBlocking(QuadSPI_Type *base, uint32_t *buffer, size_t size) +{ + assert(size >= 16U); + + uint32_t i = 0; + + for (i = 0; i < size / 4U; i++) + { + /* Check if the buffer is full */ + while (QSPI_GetStatusFlags(base) & kQSPI_TxBufferFull) + { + } + QSPI_WriteData(base, *buffer); + buffer++; + } +} + +void QSPI_ReadBlocking(QuadSPI_Type *base, uint32_t *buffer, size_t size) +{ + uint32_t i = 0; + uint32_t j = 0; + uint32_t level = 0; + + while (i < size / 4) + { + /* Check if there is data */ + do + { + level = (base->RBSR & QuadSPI_RBSR_RDBFL_MASK) >> QuadSPI_RBSR_RDBFL_SHIFT; + } while (!level); + + /* Data from RBDR */ + if (base->RBCT & QuadSPI_RBCT_RXBRD_MASK) + { + for (j = 0; j < level; j++) + { + buffer[i + j] = base->RBDR[j]; + } + } + else + { + /* Data from ARDB. */ + for (j = 0; j < level; j++) + { + buffer[i + j] = ((uint32_t *)FSL_FEATURE_QSPI_ARDB_BASE)[j]; + } + } + i += level; + } +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_qspi.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_qspi.h new file mode 100644 index 00000000000..aff961228d9 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_qspi.h @@ -0,0 +1,629 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _FSL_QSPI_H_ +#define _FSL_QSPI_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup qspi + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief I2C driver version 2.0.1. */ +#define FSL_QSPI_DRIVER_VERSION (MAKE_VERSION(2, 0, 1)) +/*@}*/ + +/*! @brief Status structure of QSPI.*/ +enum _status_t +{ + kStatus_QSPI_Idle = MAKE_STATUS(kStatusGroup_QSPI, 0), /*!< QSPI is in idle state */ + kStatus_QSPI_Busy = MAKE_STATUS(kStatusGroup_QSPI, 1), /*!< QSPI is busy */ + kStatus_QSPI_Error = MAKE_STATUS(kStatusGroup_QSPI, 2), /*!< Error occurred during QSPI transfer */ +}; + +/*! @brief QSPI read data area, from IP FIFO or AHB buffer.*/ +typedef enum _qspi_read_area +{ + kQSPI_ReadAHB = 0x0U, /*!< QSPI read from AHB buffer. */ + kQSPI_ReadIP /*!< QSPI read from IP FIFO. */ +} qspi_read_area_t; + +/*! @brief QSPI command sequence type */ +typedef enum _qspi_command_seq +{ + kQSPI_IPSeq = QuadSPI_SPTRCLR_IPPTRC_MASK, /*!< IP command sequence */ + kQSPI_BufferSeq = QuadSPI_SPTRCLR_BFPTRC_MASK, /*!< Buffer command sequence */ + kQSPI_AllSeq = QuadSPI_SPTRCLR_IPPTRC_MASK | QuadSPI_SPTRCLR_BFPTRC_MASK /* All command sequence */ +} qspi_command_seq_t; + +/*! @brief QSPI buffer type */ +typedef enum _qspi_fifo +{ + kQSPI_TxFifo = QuadSPI_MCR_CLR_TXF_MASK, /*!< QSPI Tx FIFO */ + kQSPI_RxFifo = QuadSPI_MCR_CLR_RXF_MASK, /*!< QSPI Rx FIFO */ + kQSPI_AllFifo = QuadSPI_MCR_CLR_TXF_MASK | QuadSPI_MCR_CLR_RXF_MASK /*!< QSPI all FIFO, including Tx and Rx */ +} qspi_fifo_t; + +/*! @brief QSPI transfer endianess*/ +typedef enum _qspi_endianness +{ + kQSPI_64BigEndian = 0x0U, /*!< 64 bits big endian */ + kQSPI_32LittleEndian, /*!< 32 bit little endian */ + kQSPI_32BigEndian, /*!< 32 bit big endian */ + kQSPI_64LittleEndian /*!< 64 bit little endian */ +} qspi_endianness_t; + +/*! @brief QSPI error flags */ +enum _qspi_error_flags +{ + kQSPI_DataLearningFail = QuadSPI_FR_DLPFF_MASK, /*!< Data learning pattern failure flag */ + kQSPI_TxBufferFill = QuadSPI_FR_TBFF_MASK, /*!< Tx buffer fill flag */ + kQSPI_TxBufferUnderrun = QuadSPI_FR_TBUF_MASK, /*!< Tx buffer underrun flag */ + kQSPI_IllegalInstruction = QuadSPI_FR_ILLINE_MASK, /*!< Illegal instruction error flag */ + kQSPI_RxBufferOverflow = QuadSPI_FR_RBOF_MASK, /*!< Rx buffer overflow flag */ + kQSPI_RxBufferDrain = QuadSPI_FR_RBDF_MASK, /*!< Rx buffer drain flag */ + kQSPI_AHBSequenceError = QuadSPI_FR_ABSEF_MASK, /*!< AHB sequence error flag */ + kQSPI_AHBIllegalTransaction = QuadSPI_FR_AITEF_MASK, /*!< AHB illegal transaction error flag */ + kQSPI_AHBIllegalBurstSize = QuadSPI_FR_AIBSEF_MASK, /*!< AHB illegal burst error flag */ + kQSPI_AHBBufferOverflow = QuadSPI_FR_ABOF_MASK, /*!< AHB buffer overflow flag */ + kQSPI_IPCommandUsageError = QuadSPI_FR_IUEF_MASK, /*!< IP command usage error flag */ + kQSPI_IPCommandTriggerDuringAHBAccess = QuadSPI_FR_IPAEF_MASK, /*!< IP command trigger during AHB access error */ + kQSPI_IPCommandTriggerDuringIPAccess = QuadSPI_FR_IPIEF_MASK, /*!< IP command trigger cannot be executed */ + kQSPI_IPCommandTriggerDuringAHBGrant = QuadSPI_FR_IPGEF_MASK, /*!< IP command trigger during AHB grant error */ + kQSPI_IPCommandTransactionFinished = QuadSPI_FR_TFF_MASK, /*!< IP command transaction finished flag */ + kQSPI_FlagAll = 0x8C83F8D1U /*!< All error flag */ +}; + +/*! @brief QSPI state bit */ +enum _qspi_flags +{ + kQSPI_DataLearningSamplePoint = QuadSPI_SR_DLPSMP_MASK, /*!< Data learning sample point */ + kQSPI_TxBufferFull = QuadSPI_SR_TXFULL_MASK, /*!< Tx buffer full flag */ + kQSPI_TxDMA = QuadSPI_SR_TXDMA_MASK, /*!< Tx DMA is requested or running */ + kQSPI_TxWatermark = QuadSPI_SR_TXWA_MASK, /*!< Tx buffer watermark available */ + kQSPI_TxBufferEnoughData = QuadSPI_SR_TXEDA_MASK, /*!< Tx buffer enough data available */ + kQSPI_RxDMA = QuadSPI_SR_RXDMA_MASK, /*!< Rx DMA is requesting or running */ + kQSPI_RxBufferFull = QuadSPI_SR_RXFULL_MASK, /*!< Rx buffer full */ + kQSPI_RxWatermark = QuadSPI_SR_RXWE_MASK, /*!< Rx buffer watermark exceeded */ + kQSPI_AHB3BufferFull = QuadSPI_SR_AHB3FUL_MASK, /*!< AHB buffer 3 full*/ + kQSPI_AHB2BufferFull = QuadSPI_SR_AHB2FUL_MASK, /*!< AHB buffer 2 full */ + kQSPI_AHB1BufferFull = QuadSPI_SR_AHB1FUL_MASK, /*!< AHB buffer 1 full */ + kQSPI_AHB0BufferFull = QuadSPI_SR_AHB0FUL_MASK, /*!< AHB buffer 0 full */ + kQSPI_AHB3BufferNotEmpty = QuadSPI_SR_AHB3NE_MASK, /*!< AHB buffer 3 not empty */ + kQSPI_AHB2BufferNotEmpty = QuadSPI_SR_AHB2NE_MASK, /*!< AHB buffer 2 not empty */ + kQSPI_AHB1BufferNotEmpty = QuadSPI_SR_AHB1NE_MASK, /*!< AHB buffer 1 not empty */ + kQSPI_AHB0BufferNotEmpty = QuadSPI_SR_AHB0NE_MASK, /*!< AHB buffer 0 not empty */ + kQSPI_AHBTransactionPending = QuadSPI_SR_AHBTRN_MASK, /*!< AHB access transaction pending */ + kQSPI_AHBCommandPriorityGranted = QuadSPI_SR_AHBGNT_MASK, /*!< AHB command priority granted */ + kQSPI_AHBAccess = QuadSPI_SR_AHB_ACC_MASK, /*!< AHB access */ + kQSPI_IPAccess = QuadSPI_SR_IP_ACC_MASK, /*!< IP access */ + kQSPI_Busy = QuadSPI_SR_BUSY_MASK, /*!< Module busy */ + kQSPI_StateAll = 0xEF897FE7U /*!< All flags */ +}; + +/*! @brief QSPI interrupt enable */ +enum _qspi_interrupt_enable +{ + kQSPI_DataLearningFailInterruptEnable = + QuadSPI_RSER_DLPFIE_MASK, /*!< Data learning pattern failure interrupt enable */ + kQSPI_TxBufferFillInterruptEnable = QuadSPI_RSER_TBFIE_MASK, /*!< Tx buffer fill interrupt enable */ + kQSPI_TxBufferUnderrunInterruptEnable = QuadSPI_RSER_TBUIE_MASK, /*!< Tx buffer underrun interrupt enable */ + kQSPI_IllegalInstructionInterruptEnable = + QuadSPI_RSER_ILLINIE_MASK, /*!< Illegal instruction error interrupt enable */ + kQSPI_RxBufferOverflowInterruptEnable = QuadSPI_RSER_RBOIE_MASK, /*!< Rx buffer overflow interrupt enable */ + kQSPI_RxBufferDrainInterruptEnable = QuadSPI_RSER_RBDIE_MASK, /*!< Rx buffer drain interrupt enable */ + kQSPI_AHBSequenceErrorInterruptEnable = QuadSPI_RSER_ABSEIE_MASK, /*!< AHB sequence error interrupt enable */ + kQSPI_AHBIllegalTransactionInterruptEnable = + QuadSPI_RSER_AITIE_MASK, /*!< AHB illegal transaction error interrupt enable */ + kQSPI_AHBIllegalBurstSizeInterruptEnable = + QuadSPI_RSER_AIBSIE_MASK, /*!< AHB illegal burst error interrupt enable */ + kQSPI_AHBBufferOverflowInterruptEnable = QuadSPI_RSER_ABOIE_MASK, /*!< AHB buffer overflow interrupt enable */ + kQSPI_IPCommandUsageErrorInterruptEnable = QuadSPI_RSER_IUEIE_MASK, /*!< IP command usage error interrupt enable */ + kQSPI_IPCommandTriggerDuringAHBAccessInterruptEnable = + QuadSPI_RSER_IPAEIE_MASK, /*!< IP command trigger during AHB access error */ + kQSPI_IPCommandTriggerDuringIPAccessInterruptEnable = + QuadSPI_RSER_IPIEIE_MASK, /*!< IP command trigger cannot be executed */ + kQSPI_IPCommandTriggerDuringAHBGrantInterruptEnable = + QuadSPI_RSER_IPGEIE_MASK, /*!< IP command trigger during AHB grant error */ + kQSPI_IPCommandTransactionFinishedInterruptEnable = + QuadSPI_RSER_TFIE_MASK, /*!< IP command transaction finished interrupt enable */ + kQSPI_AllInterruptEnable = 0x8C83F8D1U /*!< All error interrupt enable */ +}; + +/*! @brief QSPI DMA request flag */ +enum _qspi_dma_enable +{ + kQSPI_TxBufferFillDMAEnable = QuadSPI_RSER_TBFDE_MASK, /*!< Tx buffer fill DMA */ + kQSPI_RxBufferDrainDMAEnable = QuadSPI_RSER_RBDDE_MASK, /*!< Rx buffer drain DMA */ + kQSPI_AllDDMAEnable = QuadSPI_RSER_TBFDE_MASK | QuadSPI_RSER_RBDDE_MASK /*!< All DMA source */ +}; + +/*! @brief Phrase shift number for DQS mode. */ +typedef enum _qspi_dqs_phrase_shift +{ + kQSPI_DQSNoPhraseShift = 0x0U, /*!< No phase shift */ + kQSPI_DQSPhraseShift45Degree, /*!< Select 45 degree phase shift*/ + kQSPI_DQSPhraseShift90Degree, /*!< Select 90 degree phase shift */ + kQSPI_DQSPhraseShift135Degree /*!< Select 135 degree phase shift */ +} qspi_dqs_phrase_shift_t; + +/*! @brief DQS configure features*/ +typedef struct QspiDQSConfig +{ + uint32_t portADelayTapNum; /*!< Delay chain tap number selection for QSPI port A DQS */ + uint32_t portBDelayTapNum; /*!< Delay chain tap number selection for QSPI port B DQS*/ + qspi_dqs_phrase_shift_t shift; /*!< Phase shift for internal DQS generation */ + bool enableDQSClkInverse; /*!< Enable inverse clock for internal DQS generation */ + bool enableDQSPadLoopback; /*!< Enable DQS loop back from DQS pad */ + bool enableDQSLoopback; /*!< Enable DQS loop back */ +} qspi_dqs_config_t; + +/*! @brief Flash timing configuration. */ +typedef struct QspiFlashTiming +{ + uint32_t dataHoldTime; /*!< Serial flash data in hold time */ + uint32_t CSHoldTime; /*!< Serial flash CS hold time in terms of serial flash clock cycles */ + uint32_t CSSetupTime; /*!< Serial flash CS setup time in terms of serial flash clock cycles */ +} qspi_flash_timing_t; + +/*! @brief QSPI configuration structure*/ +typedef struct QspiConfig +{ + uint32_t clockSource; /*!< Clock source for QSPI module */ + uint32_t baudRate; /*!< Serial flash clock baud rate */ + uint8_t txWatermark; /*!< QSPI transmit watermark value */ + uint8_t rxWatermark; /*!< QSPI receive watermark value. */ + uint32_t AHBbufferSize[FSL_FEATURE_QSPI_AHB_BUFFER_COUNT]; /*!< AHB buffer size. */ + uint8_t AHBbufferMaster[FSL_FEATURE_QSPI_AHB_BUFFER_COUNT]; /*!< AHB buffer master. */ + bool enableAHBbuffer3AllMaster; /*!< Is AHB buffer3 for all master.*/ + qspi_read_area_t area; /*!< Which area Rx data readout */ + bool enableQspi; /*!< Enable QSPI after initialization */ +} qspi_config_t; + +/*! @brief External flash configuration items*/ +typedef struct _qspi_flash_config +{ + uint32_t flashA1Size; /*!< Flash A1 size */ + uint32_t flashA2Size; /*!< Flash A2 size */ + uint32_t flashB1Size; /*!< Flash B1 size */ + uint32_t flashB2Size; /*!< Flash B2 size */ + uint32_t lookuptable[FSL_FEATURE_QSPI_LUT_DEPTH]; /*!< Flash command in LUT */ + uint32_t dataHoldTime; /*!< Data line hold time. */ + uint32_t CSHoldTime; /*!< CS line hold time */ + uint32_t CSSetupTime; /*!< CS line setup time*/ + uint32_t cloumnspace; /*!< Column space size */ + uint32_t dataLearnValue; /*!< Data Learn value if enable data learn */ + qspi_endianness_t endian; /*!< Flash data endianess. */ + bool enableWordAddress; /*!< If enable word address.*/ +} qspi_flash_config_t; + +/*! @brief Transfer structure for QSPI */ +typedef struct _qspi_transfer +{ + uint32_t *data; /*!< Pointer to data to transmit */ + size_t dataSize; /*!< Bytes to be transmit */ +} qspi_transfer_t; + +/****************************************************************************** + * API + *****************************************************************************/ +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @name Initialization and deinitialization + * @{ + */ + +/*! + * @brief Initializes the QSPI module and internal state. + * + * This function enables the clock for QSPI and also configures the QSPI with the + * input configure parameters. Users should call this function before any QSPI operations. + * + * @param base Pointer to QuadSPI Type. + * @param config QSPI configure structure. + * @param srcClock_Hz QSPI source clock frequency in Hz. + */ +void QSPI_Init(QuadSPI_Type *base, qspi_config_t *config, uint32_t srcClock_Hz); + +/*! + * @brief Gets default settings for QSPI. + * + * @param config QSPI configuration structure. + */ +void QSPI_GetDefaultQspiConfig(qspi_config_t *config); + +/*! + * @brief Deinitializes the QSPI module. + * + * Clears the QSPI state and QSPI module registers. + * @param base Pointer to QuadSPI Type. + */ +void QSPI_Deinit(QuadSPI_Type *base); + +/*! + * @brief Configures the serial flash parameter. + * + * This function configures the serial flash relevant parameters, such as the size, command, and so on. + * The flash configuration value cannot have a default value. The user needs to configure it according to the + * QSPI features. + * + * @param base Pointer to QuadSPI Type. + * @param config Flash configuration parameters. + */ +void QSPI_SetFlashConfig(QuadSPI_Type *base, qspi_flash_config_t *config); + +/*! + * @brief Software reset for the QSPI logic. + * + * This function sets the software reset flags for both AHB and buffer domain and + * resets both AHB buffer and also IP FIFOs. + * + * @param base Pointer to QuadSPI Type. + */ +void QSPI_SoftwareReset(QuadSPI_Type *base); + +/*! + * @brief Enables or disables the QSPI module. + * + * @param base Pointer to QuadSPI Type. + * @param enable True means enable QSPI, false means disable. + */ +static inline void QSPI_Enable(QuadSPI_Type *base, bool enable) +{ + if (enable) + { + base->MCR &= ~QuadSPI_MCR_MDIS_MASK; + } + else + { + base->MCR |= QuadSPI_MCR_MDIS_MASK; + } +} + +/*! @} */ + +/*! + * @name Status + * @{ + */ + +/*! + * @brief Gets the state value of QSPI. + * + * @param base Pointer to QuadSPI Type. + * @return status flag, use status flag to AND #_qspi_flags could get the related status. + */ +static inline uint32_t QSPI_GetStatusFlags(QuadSPI_Type *base) +{ + return base->SR; +} + +/*! + * @brief Gets QSPI error status flags. + * + * @param base Pointer to QuadSPI Type. + * @return status flag, use status flag to AND #_qspi_error_flags could get the related status. + */ +static inline uint32_t QSPI_GetErrorStatusFlags(QuadSPI_Type *base) +{ + return base->FR; +} + +/*! @brief Clears the QSPI error flags. + * + * @param base Pointer to QuadSPI Type. + * @param mask Which kind of QSPI flags to be cleared, a combination of _qspi_error_flags. + */ +static inline void QSPI_ClearErrorFlag(QuadSPI_Type *base, uint32_t mask) +{ + base->FR = mask; +} + +/*! @} */ + +/*! + * @name Interrupts + * @{ + */ + +/*! + * @brief Enables the QSPI interrupts. + * + * @param base Pointer to QuadSPI Type. + * @param mask QSPI interrupt source. + */ +static inline void QSPI_EnableInterrupts(QuadSPI_Type *base, uint32_t mask) +{ + base->RSER |= mask; +} + +/*! + * @brief Disables the QSPI interrupts. + * + * @param base Pointer to QuadSPI Type. + * @param mask QSPI interrupt source. + */ +static inline void QSPI_DisableInterrupts(QuadSPI_Type *base, uint32_t mask) +{ + base->RSER &= ~mask; +} + +/*! @} */ + +/*! + * @name DMA Control + * @{ + */ + +/*! + * @brief Enables the QSPI DMA source. + * + * @param base Pointer to QuadSPI Type. + * @param mask QSPI DMA source. + * @param enable True means enable DMA, false means disable. + */ +static inline void QSPI_EnableDMA(QuadSPI_Type *base, uint32_t mask, bool enable) +{ + if (enable) + { + base->RSER |= mask; + } + else + { + base->RSER &= ~mask; + } +} + +/*! + * @brief Gets the Tx data register address. It is used for DMA operation. + * + * @param base Pointer to QuadSPI Type. + * @return QSPI Tx data register address. + */ +static inline uint32_t QSPI_GetTxDataRegisterAddress(QuadSPI_Type *base) +{ + return (uint32_t)(&base->TBDR); +} + +/*! + * @brief Gets the Rx data register address used for DMA operation. + * + * This function returns the Rx data register address or Rx buffer address + * according to the Rx read area settings. + * + * @param base Pointer to QuadSPI Type. + * @return QSPI Rx data register address. + */ +uint32_t QSPI_GetRxDataRegisterAddress(QuadSPI_Type *base); + +/* @} */ + +/*! + * @name Bus Operations + * @{ + */ + +/*! @brief Sets the IP command address. + * + * @param base Pointer to QuadSPI Type. + * @param addr IP command address. + */ +static inline void QSPI_SetIPCommandAddress(QuadSPI_Type *base, uint32_t addr) +{ + base->SFAR = addr; +} + +/*! @brief Sets the IP command size. + * + * @param base Pointer to QuadSPI Type. + * @param size IP command size. + */ +static inline void QSPI_SetIPCommandSize(QuadSPI_Type *base, uint32_t size) +{ + base->IPCR = ((base->IPCR & (~QuadSPI_IPCR_IDATSZ_MASK)) | QuadSPI_IPCR_IDATSZ(size)); +} + +/*! @brief Executes IP commands located in LUT table. + * + * @param base Pointer to QuadSPI Type. + * @param index IP command located in which LUT table index. + */ +void QSPI_ExecuteIPCommand(QuadSPI_Type *base, uint32_t index); + +/*! @brief Executes AHB commands located in LUT table. + * + * @param base Pointer to QuadSPI Type. + * @param index AHB command located in which LUT table index. + */ +void QSPI_ExecuteAHBCommand(QuadSPI_Type *base, uint32_t index); + +/*! @brief Enables/disables the QSPI IP command parallel mode. + * + * @param base Pointer to QuadSPI Type. + * @param enable True means enable parallel mode, false means disable parallel mode. + */ +static inline void QSPI_EnableIPParallelMode(QuadSPI_Type *base, bool enable) +{ + if (enable) + { + base->IPCR |= QuadSPI_IPCR_PAR_EN_MASK; + } + else + { + base->IPCR &= ~QuadSPI_IPCR_PAR_EN_MASK; + } +} + +/*! @brief Enables/disables the QSPI AHB command parallel mode. + * + * @param base Pointer to QuadSPI Type. + * @param enable True means enable parallel mode, false means disable parallel mode. + */ +static inline void QSPI_EnableAHBParallelMode(QuadSPI_Type *base, bool enable) +{ + if (enable) + { + base->BFGENCR |= QuadSPI_BFGENCR_PAR_EN_MASK; + } + else + { + base->BFGENCR &= ~QuadSPI_BFGENCR_PAR_EN_MASK; + } +} + +/*! @brief Updates the LUT table. +* +* @param base Pointer to QuadSPI Type. +* @param index Which LUT index needs to be located. It should be an integer divided by 4. +* @param cmd Command sequence array. +*/ +void QSPI_UpdateLUT(QuadSPI_Type *base, uint32_t index, uint32_t *cmd); + +/*! @brief Clears the QSPI FIFO logic. + * + * @param base Pointer to QuadSPI Type. + * @param mask Which kind of QSPI FIFO to be cleared. + */ +static inline void QSPI_ClearFifo(QuadSPI_Type *base, uint32_t mask) +{ + base->MCR |= mask; +} + +/*!@ brief Clears the command sequence for the IP/buffer command. + * + * This function can reset the command sequence. + * @param base QSPI base address. + * @param seq Which command sequence need to reset, IP command, buffer command or both. + */ +static inline void QSPI_ClearCommandSequence(QuadSPI_Type *base, qspi_command_seq_t seq) +{ + base->SPTRCLR = seq; +} + +/*!@ brief Set the RX buffer readout area. + * + * This function can set the RX buffer readout, from AHB bus or IP Bus. + * @param base QSPI base address. + * @param area QSPI Rx buffer readout area. AHB bus buffer or IP bus buffer. + */ +void QSPI_SetReadDataArea(QuadSPI_Type *base, qspi_read_area_t area); + +/*! + * @brief Sends a buffer of data bytes using a blocking method. + * @note This function blocks via polling until all bytes have been sent. + * @param base QSPI base pointer + * @param buffer The data bytes to send + * @param size The number of data bytes to send + */ +void QSPI_WriteBlocking(QuadSPI_Type *base, uint32_t *buffer, size_t size); + +/*! + * @brief Writes data into FIFO. + * + * @param base QSPI base pointer + * @param data The data bytes to send + */ +static inline void QSPI_WriteData(QuadSPI_Type *base, uint32_t data) +{ + base->TBDR = data; +} + +/*! + * @brief Receives a buffer of data bytes using a blocking method. + * @note This function blocks via polling until all bytes have been sent. + * @param base QSPI base pointer + * @param buffer The data bytes to send + * @param size The number of data bytes to receive + */ +void QSPI_ReadBlocking(QuadSPI_Type *base, uint32_t *buffer, size_t size); + +/*! + * @brief Receives data from data FIFO. + * + * @param base QSPI base pointer + * @return The data in the FIFO. + */ +uint32_t QSPI_ReadData(QuadSPI_Type *base); + +/*! @} */ + +/*! + * @name Transactional + * @{ + */ + +/*! + * @brief Writes data to the QSPI transmit buffer. + * + * This function writes a continuous data to the QSPI transmit FIFO. This function is a block function + * and can return only when finished. This function uses polling methods. + * + * @param base Pointer to QuadSPI Type. + * @param xfer QSPI transfer structure. + */ +static inline void QSPI_TransferSendBlocking(QuadSPI_Type *base, qspi_transfer_t *xfer) +{ + QSPI_WriteBlocking(base, xfer->data, xfer->dataSize); +} + +/*! + * @brief Reads data from the QSPI receive buffer in polling way. + * + * This function reads continuous data from the QSPI receive buffer/FIFO. This function is a blocking + * function and can return only when finished. This function uses polling methods. + * @param base Pointer to QuadSPI Type. + * @param xfer QSPI transfer structure. + */ +static inline void QSPI_TransferReceiveBlocking(QuadSPI_Type *base, qspi_transfer_t *xfer) +{ + QSPI_ReadBlocking(base, xfer->data, xfer->dataSize); +} + +/*! @} */ + +#if defined(__cplusplus) +} +#endif + +/* @}*/ + +#endif /* _FSL_QSPI_H_*/ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_qspi_edma.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_qspi_edma.c new file mode 100644 index 00000000000..290ee3af3d3 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_qspi_edma.c @@ -0,0 +1,321 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_qspi_edma.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*base, qspiPrivateHandle->handle); + + if (qspiPrivateHandle->handle->callback) + { + qspiPrivateHandle->handle->callback(qspiPrivateHandle->base, qspiPrivateHandle->handle, kStatus_QSPI_Idle, + qspiPrivateHandle->handle->userData); + } + } +} + +static void QSPI_ReceiveEDMACallback(edma_handle_t *handle, void *param, bool transferDone, uint32_t tcds) +{ + qspi_edma_private_handle_t *qspiPrivateHandle = (qspi_edma_private_handle_t *)param; + + /* Avoid warning for unused parameters. */ + handle = handle; + tcds = tcds; + + if (transferDone) + { + /* Disable transfer. */ + QSPI_TransferAbortReceiveEDMA(qspiPrivateHandle->base, qspiPrivateHandle->handle); + + if (qspiPrivateHandle->handle->callback) + { + qspiPrivateHandle->handle->callback(qspiPrivateHandle->base, qspiPrivateHandle->handle, kStatus_QSPI_Idle, + qspiPrivateHandle->handle->userData); + } + } +} + +void QSPI_TransferTxCreateHandleEDMA(QuadSPI_Type *base, + qspi_edma_handle_t *handle, + qspi_edma_callback_t callback, + void *userData, + edma_handle_t *dmaHandle) +{ + assert(handle); + + uint32_t instance = QSPI_GetInstance(base); + + s_edmaPrivateHandle[instance].base = base; + s_edmaPrivateHandle[instance].handle = handle; + + memset(handle, 0, sizeof(*handle)); + + handle->state = kQSPI_Idle; + handle->dmaHandle = dmaHandle; + + handle->callback = callback; + handle->userData = userData; + + /* Get the watermark value */ + handle->count = base->TBCT + 1; + + /* Configure TX edma callback */ + EDMA_SetCallback(handle->dmaHandle, QSPI_SendEDMACallback, &s_edmaPrivateHandle[instance]); +} + +void QSPI_TransferRxCreateHandleEDMA(QuadSPI_Type *base, + qspi_edma_handle_t *handle, + qspi_edma_callback_t callback, + void *userData, + edma_handle_t *dmaHandle) +{ + assert(handle); + + uint32_t instance = QSPI_GetInstance(base); + + s_edmaPrivateHandle[instance].base = base; + s_edmaPrivateHandle[instance].handle = handle; + + memset(handle, 0, sizeof(*handle)); + + handle->state = kQSPI_Idle; + handle->dmaHandle = dmaHandle; + + handle->callback = callback; + handle->userData = userData; + + /* Get the watermark value */ + handle->count = (base->RBCT & QuadSPI_RBCT_WMRK_MASK) + 1; + + /* Configure RX edma callback */ + EDMA_SetCallback(handle->dmaHandle, QSPI_ReceiveEDMACallback, &s_edmaPrivateHandle[instance]); +} + +status_t QSPI_TransferSendEDMA(QuadSPI_Type *base, qspi_edma_handle_t *handle, qspi_transfer_t *xfer) +{ + assert(handle && (handle->dmaHandle)); + + edma_transfer_config_t xferConfig; + status_t status; + + /* If previous TX not finished. */ + if (kQSPI_BusBusy == handle->state) + { + status = kStatus_QSPI_Busy; + } + else + { + handle->state = kQSPI_BusBusy; + + /* Prepare transfer. */ + EDMA_PrepareTransfer(&xferConfig, xfer->data, sizeof(uint32_t), (void *)QSPI_GetTxDataRegisterAddress(base), + sizeof(uint32_t), (sizeof(uint32_t) * handle->count), xfer->dataSize, + kEDMA_MemoryToPeripheral); + + /* Submit transfer. */ + EDMA_SubmitTransfer(handle->dmaHandle, &xferConfig); + EDMA_StartTransfer(handle->dmaHandle); + + /* Enable QSPI TX EDMA. */ + QSPI_EnableDMA(base, kQSPI_TxBufferFillDMAEnable, true); + + status = kStatus_Success; + } + + return status; +} + +status_t QSPI_TransferReceiveEDMA(QuadSPI_Type *base, qspi_edma_handle_t *handle, qspi_transfer_t *xfer) +{ + assert(handle && (handle->dmaHandle)); + + edma_transfer_config_t xferConfig; + status_t status; + + /* If previous TX not finished. */ + if (kQSPI_BusBusy == handle->state) + { + status = kStatus_QSPI_Busy; + } + else + { + handle->state = kQSPI_BusBusy; + + /* Prepare transfer. */ + EDMA_PrepareTransfer(&xferConfig, (void *)QSPI_GetRxDataRegisterAddress(base), sizeof(uint32_t), xfer->data, + sizeof(uint32_t), (sizeof(uint32_t) * handle->count), xfer->dataSize, + kEDMA_PeripheralToMemory); + + /* Submit transfer. */ + EDMA_SubmitTransfer(handle->dmaHandle, &xferConfig); + EDMA_StartTransfer(handle->dmaHandle); + + /* Enable QSPI TX EDMA. */ + QSPI_EnableDMA(base, kQSPI_RxBufferDrainDMAEnable, true); + + status = kStatus_Success; + } + + return status; +} + +void QSPI_TransferAbortSendEDMA(QuadSPI_Type *base, qspi_edma_handle_t *handle) +{ + assert(handle && (handle->dmaHandle)); + + /* Disable QSPI TX EDMA. */ + QSPI_EnableDMA(base, kQSPI_TxBufferFillDMAEnable, false); + + /* Stop transfer. */ + EDMA_AbortTransfer(handle->dmaHandle); + + handle->state = kQSPI_Idle; +} + +void QSPI_TransferAbortReceiveEDMA(QuadSPI_Type *base, qspi_edma_handle_t *handle) +{ + assert(handle && (handle->dmaHandle)); + + /* Disable QSPI RX EDMA. */ + QSPI_EnableDMA(base, kQSPI_RxBufferDrainDMAEnable, false); + + /* Stop transfer. */ + EDMA_AbortTransfer(handle->dmaHandle); + + handle->state = kQSPI_Idle; +} + +status_t QSPI_TransferGetSendCountEDMA(QuadSPI_Type *base, qspi_edma_handle_t *handle, size_t *count) +{ + assert(handle); + + status_t status = kStatus_Success; + + if (handle->state != kQSPI_BusBusy) + { + status = kStatus_NoTransferInProgress; + } + else + { + *count = (handle->transferSize - EDMA_GetRemainingBytes(handle->dmaHandle->base, handle->dmaHandle->channel)); + } + + return status; +} + +status_t QSPI_TransferGetReceiveCountEDMA(QuadSPI_Type *base, qspi_edma_handle_t *handle, size_t *count) +{ + assert(handle); + + status_t status = kStatus_Success; + + if (handle->state != kQSPI_BusBusy) + { + status = kStatus_NoTransferInProgress; + } + else + { + *count = (handle->transferSize - EDMA_GetRemainingBytes(handle->dmaHandle->base, handle->dmaHandle->channel)); + } + + return status; +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_qspi_edma.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_qspi_edma.h new file mode 100644 index 00000000000..b3d6081145a --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_qspi_edma.h @@ -0,0 +1,175 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _FSL_QSPI_EDMA_H_ +#define _FSL_QSPI_EDMA_H_ + +#include "fsl_qspi.h" +#include "fsl_edma.h" + +/*! + * @addtogroup qspi_edma + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +typedef struct _qspi_edma_handle qspi_edma_handle_t; + +/*! @brief QSPI eDMA transfer callback function for finish and error */ +typedef void (*qspi_edma_callback_t)(QuadSPI_Type *base, qspi_edma_handle_t *handle, status_t status, void *userData); + +/*! @brief QSPI DMA transfer handle, users should not touch the content of the handle.*/ +struct _qspi_edma_handle +{ + edma_handle_t *dmaHandle; /*!< eDMA handler for QSPI send */ + size_t transferSize; /*!< Bytes need to transfer. */ + uint8_t count; /*!< The transfer data count in a DMA request */ + uint32_t state; /*!< Internal state for QSPI eDMA transfer */ + qspi_edma_callback_t callback; /*!< Callback for users while transfer finish or error occurred */ + void *userData; /*!< User callback parameter */ +}; + +/******************************************************************************* + * APIs + ******************************************************************************/ +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @name eDMA Transactional + * @{ + */ + +/*! + * @brief Initializes the QSPI handle for send which is used in transactional functions and set the callback. + * + * @param base QSPI peripheral base address + * @param handle Pointer to qspi_edma_handle_t structure + * @param callback QSPI callback, NULL means no callback. + * @param userData User callback function data. + * @param rxDmaHandle User requested eDMA handle for eDMA transfer + */ +void QSPI_TransferTxCreateHandleEDMA(QuadSPI_Type *base, + qspi_edma_handle_t *handle, + qspi_edma_callback_t callback, + void *userData, + edma_handle_t *dmaHandle); + +/*! + * @brief Initializes the QSPI handle for receive which is used in transactional functions and set the callback. + * + * @param base QSPI peripheral base address + * @param handle Pointer to qspi_edma_handle_t structure + * @param callback QSPI callback, NULL means no callback. + * @param userData User callback function data. + * @param rxDmaHandle User requested eDMA handle for eDMA transfer + */ +void QSPI_TransferRxCreateHandleEDMA(QuadSPI_Type *base, + qspi_edma_handle_t *handle, + qspi_edma_callback_t callback, + void *userData, + edma_handle_t *dmaHandle); + +/*! + * @brief Transfers QSPI data using an eDMA non-blocking method. + * + * This function writes data to the QSPI transmit FIFO. This function is non-blocking. + * @param base Pointer to QuadSPI Type. + * @param handle Pointer to qspi_edma_handle_t structure + * @param xfer QSPI transfer structure. + */ +status_t QSPI_TransferSendEDMA(QuadSPI_Type *base, qspi_edma_handle_t *handle, qspi_transfer_t *xfer); + +/*! + * @brief Receives data using an eDMA non-blocking method. + * + * This function receive data from the QSPI receive buffer/FIFO. This function is non-blocking. + * @param base Pointer to QuadSPI Type. + * @param handle Pointer to qspi_edma_handle_t structure + * @param xfer QSPI transfer structure. + */ +status_t QSPI_TransferReceiveEDMA(QuadSPI_Type *base, qspi_edma_handle_t *handle, qspi_transfer_t *xfer); + +/*! + * @brief Aborts the sent data using eDMA. + * + * This function aborts the sent data using eDMA. + * + * @param base QSPI peripheral base address. + * @param handle Pointer to qspi_edma_handle_t structure + */ +void QSPI_TransferAbortSendEDMA(QuadSPI_Type *base, qspi_edma_handle_t *handle); + +/*! + * @brief Aborts the receive data using eDMA. + * + * This function abort receive data which using eDMA. + * + * @param base QSPI peripheral base address. + * @param handle Pointer to qspi_edma_handle_t structure + */ +void QSPI_TransferAbortReceiveEDMA(QuadSPI_Type *base, qspi_edma_handle_t *handle); + +/*! + * @brief Gets the transferred counts of send. + * + * @param base Pointer to QuadSPI Type. + * @param handle Pointer to qspi_edma_handle_t structure. + * @param count Bytes sent. + * @retval kStatus_Success Succeed get the transfer count. + * @retval kStatus_NoTransferInProgress There is not a non-blocking transaction currently in progress. + */ +status_t QSPI_TransferGetSendCountEDMA(QuadSPI_Type *base, qspi_edma_handle_t *handle, size_t *count); + +/*! + * @brief Gets the status of the receive transfer. + * + * @param base Pointer to QuadSPI Type. + * @param handle Pointer to qspi_edma_handle_t structure + * @param count Bytes received. + * @retval kStatus_Success Succeed get the transfer count. + * @retval kStatus_NoTransferInProgress There is not a non-blocking transaction currently in progress. + */ +status_t QSPI_TransferGetReceiveCountEDMA(QuadSPI_Type *base, qspi_edma_handle_t *handle, size_t *count); + +/* @} */ + +#if defined(__cplusplus) +} +#endif + +/* @} */ + +#endif /* _FSL_QSPI_EDMA_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_rcm.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_rcm.c new file mode 100644 index 00000000000..9cf7479d337 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_rcm.c @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_rcm.h" + +void RCM_ConfigureResetPinFilter(RCM_Type *base, const rcm_reset_pin_filter_config_t *config) +{ + assert(config); + +#if (defined(FSL_FEATURE_RCM_REG_WIDTH) && (FSL_FEATURE_RCM_REG_WIDTH == 32)) + uint32_t reg; + + reg = (((uint32_t)config->enableFilterInStop << RCM_RPC_RSTFLTSS_SHIFT) | (uint32_t)config->filterInRunWait); + if (config->filterInRunWait == kRCM_FilterBusClock) + { + reg |= ((uint32_t)config->busClockFilterCount << RCM_RPC_RSTFLTSEL_SHIFT); + } + base->RPC = reg; +#else + base->RPFC = ((uint8_t)(config->enableFilterInStop << RCM_RPFC_RSTFLTSS_SHIFT) | (uint8_t)config->filterInRunWait); + if (config->filterInRunWait == kRCM_FilterBusClock) + { + base->RPFW = config->busClockFilterCount; + } +#endif /* FSL_FEATURE_RCM_REG_WIDTH */ +} + +#if (defined(FSL_FEATURE_RCM_HAS_BOOTROM) && FSL_FEATURE_RCM_HAS_BOOTROM) +void RCM_SetForceBootRomSource(RCM_Type *base, rcm_boot_rom_config_t config) +{ + uint32_t reg; + + reg = base->FM; + reg &= ~RCM_FM_FORCEROM_MASK; + reg |= ((uint32_t)config << RCM_FM_FORCEROM_SHIFT); + base->FM = reg; +} +#endif /* #if FSL_FEATURE_RCM_HAS_BOOTROM */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_rcm.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_rcm.h new file mode 100644 index 00000000000..fbc51691976 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_rcm.h @@ -0,0 +1,431 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FSL_RCM_H_ +#define _FSL_RCM_H_ + +#include "fsl_common.h" + +/*! @addtogroup rcm */ +/*! @{*/ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief RCM driver version 2.0.1. */ +#define FSL_RCM_DRIVER_VERSION (MAKE_VERSION(2, 0, 1)) +/*@}*/ + +/*! + * @brief System Reset Source Name definitions + */ +typedef enum _rcm_reset_source +{ +#if (defined(FSL_FEATURE_RCM_REG_WIDTH) && (FSL_FEATURE_RCM_REG_WIDTH == 32)) +/* RCM register bit width is 32. */ +#if (defined(FSL_FEATURE_RCM_HAS_WAKEUP) && FSL_FEATURE_RCM_HAS_WAKEUP) + kRCM_SourceWakeup = RCM_SRS_WAKEUP_MASK, /*!< Low-leakage wakeup reset */ +#endif + kRCM_SourceLvd = RCM_SRS_LVD_MASK, /*!< Low-voltage detect reset */ +#if (defined(FSL_FEATURE_RCM_HAS_LOC) && FSL_FEATURE_RCM_HAS_LOC) + kRCM_SourceLoc = RCM_SRS_LOC_MASK, /*!< Loss of clock reset */ +#endif /* FSL_FEATURE_RCM_HAS_LOC */ +#if (defined(FSL_FEATURE_RCM_HAS_LOL) && FSL_FEATURE_RCM_HAS_LOL) + kRCM_SourceLol = RCM_SRS_LOL_MASK, /*!< Loss of lock reset */ +#endif /* FSL_FEATURE_RCM_HAS_LOL */ + kRCM_SourceWdog = RCM_SRS_WDOG_MASK, /*!< Watchdog reset */ + kRCM_SourcePin = RCM_SRS_PIN_MASK, /*!< External pin reset */ + kRCM_SourcePor = RCM_SRS_POR_MASK, /*!< Power on reset */ +#if (defined(FSL_FEATURE_RCM_HAS_JTAG) && FSL_FEATURE_RCM_HAS_JTAG) + kRCM_SourceJtag = RCM_SRS_JTAG_MASK, /*!< JTAG generated reset */ +#endif /* FSL_FEATURE_RCM_HAS_JTAG */ + kRCM_SourceLockup = RCM_SRS_LOCKUP_MASK, /*!< Core lock up reset */ + kRCM_SourceSw = RCM_SRS_SW_MASK, /*!< Software reset */ +#if (defined(FSL_FEATURE_RCM_HAS_MDM_AP) && FSL_FEATURE_RCM_HAS_MDM_AP) + kRCM_SourceMdmap = RCM_SRS_MDM_AP_MASK, /*!< MDM-AP system reset */ +#endif /* FSL_FEATURE_RCM_HAS_MDM_AP */ +#if (defined(FSL_FEATURE_RCM_HAS_EZPORT) && FSL_FEATURE_RCM_HAS_EZPORT) + kRCM_SourceEzpt = RCM_SRS_EZPT_MASK, /*!< EzPort reset */ +#endif /* FSL_FEATURE_RCM_HAS_EZPORT */ + kRCM_SourceSackerr = RCM_SRS_SACKERR_MASK, /*!< Parameter could get all reset flags */ + +#else /* (FSL_FEATURE_RCM_REG_WIDTH == 32) */ +/* RCM register bit width is 8. */ +#if (defined(FSL_FEATURE_RCM_HAS_WAKEUP) && FSL_FEATURE_RCM_HAS_WAKEUP) + kRCM_SourceWakeup = RCM_SRS0_WAKEUP_MASK, /*!< Low-leakage wakeup reset */ +#endif + kRCM_SourceLvd = RCM_SRS0_LVD_MASK, /*!< Low-voltage detect reset */ +#if (defined(FSL_FEATURE_RCM_HAS_LOC) && FSL_FEATURE_RCM_HAS_LOC) + kRCM_SourceLoc = RCM_SRS0_LOC_MASK, /*!< Loss of clock reset */ +#endif /* FSL_FEATURE_RCM_HAS_LOC */ +#if (defined(FSL_FEATURE_RCM_HAS_LOL) && FSL_FEATURE_RCM_HAS_LOL) + kRCM_SourceLol = RCM_SRS0_LOL_MASK, /*!< Loss of lock reset */ +#endif /* FSL_FEATURE_RCM_HAS_LOL */ + kRCM_SourceWdog = RCM_SRS0_WDOG_MASK, /*!< Watchdog reset */ + kRCM_SourcePin = RCM_SRS0_PIN_MASK, /*!< External pin reset */ + kRCM_SourcePor = RCM_SRS0_POR_MASK, /*!< Power on reset */ +#if (defined(FSL_FEATURE_RCM_HAS_JTAG) && FSL_FEATURE_RCM_HAS_JTAG) + kRCM_SourceJtag = RCM_SRS1_JTAG_MASK << 8U, /*!< JTAG generated reset */ +#endif /* FSL_FEATURE_RCM_HAS_JTAG */ + kRCM_SourceLockup = RCM_SRS1_LOCKUP_MASK << 8U, /*!< Core lock up reset */ + kRCM_SourceSw = RCM_SRS1_SW_MASK << 8U, /*!< Software reset */ +#if (defined(FSL_FEATURE_RCM_HAS_MDM_AP) && FSL_FEATURE_RCM_HAS_MDM_AP) + kRCM_SourceMdmap = RCM_SRS1_MDM_AP_MASK << 8U, /*!< MDM-AP system reset */ +#endif /* FSL_FEATURE_RCM_HAS_MDM_AP */ +#if (defined(FSL_FEATURE_RCM_HAS_EZPORT) && FSL_FEATURE_RCM_HAS_EZPORT) + kRCM_SourceEzpt = RCM_SRS1_EZPT_MASK << 8U, /*!< EzPort reset */ +#endif /* FSL_FEATURE_RCM_HAS_EZPORT */ + kRCM_SourceSackerr = RCM_SRS1_SACKERR_MASK << 8U, /*!< Parameter could get all reset flags */ +#endif /* (FSL_FEATURE_RCM_REG_WIDTH == 32) */ + kRCM_SourceAll = 0xffffffffU, +} rcm_reset_source_t; + +/*! + * @brief Reset pin filter select in Run and Wait modes + */ +typedef enum _rcm_run_wait_filter_mode +{ + kRCM_FilterDisable = 0U, /*!< All filtering disabled */ + kRCM_FilterBusClock = 1U, /*!< Bus clock filter enabled */ + kRCM_FilterLpoClock = 2U /*!< LPO clock filter enabled */ +} rcm_run_wait_filter_mode_t; + +#if (defined(FSL_FEATURE_RCM_HAS_BOOTROM) && FSL_FEATURE_RCM_HAS_BOOTROM) +/*! + * @brief Boot from ROM configuration. + */ +typedef enum _rcm_boot_rom_config +{ + kRCM_BootFlash = 0U, /*!< Boot from flash */ + kRCM_BootRomCfg0 = 1U, /*!< Boot from boot ROM due to BOOTCFG0 */ + kRCM_BootRomFopt = 2U, /*!< Boot from boot ROM due to FOPT[7] */ + kRCM_BootRomBoth = 3U /*!< Boot from boot ROM due to both BOOTCFG0 and FOPT[7] */ +} rcm_boot_rom_config_t; +#endif /* FSL_FEATURE_RCM_HAS_BOOTROM */ + +#if (defined(FSL_FEATURE_RCM_HAS_SRIE) && FSL_FEATURE_RCM_HAS_SRIE) +/*! + * @brief Max delay time from interrupt asserts to system reset. + */ +typedef enum _rcm_reset_delay +{ + kRCM_ResetDelay8Lpo = 0U, /*!< Delay 8 LPO cycles. */ + kRCM_ResetDelay32Lpo = 1U, /*!< Delay 32 LPO cycles. */ + kRCM_ResetDelay128Lpo = 2U, /*!< Delay 128 LPO cycles. */ + kRCM_ResetDelay512Lpo = 3U /*!< Delay 512 LPO cycles. */ +} rcm_reset_delay_t; + +/*! + * @brief System reset interrupt enable bit definitions. + */ +typedef enum _rcm_interrupt_enable +{ + kRCM_IntNone = 0U, /*!< No interrupt enabled. */ + kRCM_IntLossOfClk = RCM_SRIE_LOC_MASK, /*!< Loss of clock interrupt. */ + kRCM_IntLossOfLock = RCM_SRIE_LOL_MASK, /*!< Loss of lock interrupt. */ + kRCM_IntWatchDog = RCM_SRIE_WDOG_MASK, /*!< Watch dog interrupt. */ + kRCM_IntExternalPin = RCM_SRIE_PIN_MASK, /*!< External pin interrupt. */ + kRCM_IntGlobal = RCM_SRIE_GIE_MASK, /*!< Global interrupts. */ + kRCM_IntCoreLockup = RCM_SRIE_LOCKUP_MASK, /*!< Core lock up interrupt */ + kRCM_IntSoftware = RCM_SRIE_SW_MASK, /*!< software interrupt */ + kRCM_IntStopModeAckErr = RCM_SRIE_SACKERR_MASK, /*!< Stop mode ACK error interrupt. */ +#if (defined(FSL_FEATURE_RCM_HAS_CORE1) && FSL_FEATURE_RCM_HAS_CORE1) + kRCM_IntCore1 = RCM_SRIE_CORE1_MASK, /*!< Core 1 interrupt. */ +#endif + kRCM_IntAll = RCM_SRIE_LOC_MASK /*!< Enable all interrupts. */ + | + RCM_SRIE_LOL_MASK | RCM_SRIE_WDOG_MASK | RCM_SRIE_PIN_MASK | RCM_SRIE_GIE_MASK | + RCM_SRIE_LOCKUP_MASK | RCM_SRIE_SW_MASK | RCM_SRIE_SACKERR_MASK +#if (defined(FSL_FEATURE_RCM_HAS_CORE1) && FSL_FEATURE_RCM_HAS_CORE1) + | + RCM_SRIE_CORE1_MASK +#endif +} rcm_interrupt_enable_t; +#endif /* FSL_FEATURE_RCM_HAS_SRIE */ + +#if (defined(FSL_FEATURE_RCM_HAS_VERID) && FSL_FEATURE_RCM_HAS_VERID) +/*! + * @brief IP version ID definition. + */ +typedef struct _rcm_version_id +{ + uint16_t feature; /*!< Feature Specification Number. */ + uint8_t minor; /*!< Minor version number. */ + uint8_t major; /*!< Major version number. */ +} rcm_version_id_t; +#endif + +/*! + * @brief Reset pin filter configuration + */ +typedef struct _rcm_reset_pin_filter_config +{ + bool enableFilterInStop; /*!< Reset pin filter select in stop mode. */ + rcm_run_wait_filter_mode_t filterInRunWait; /*!< Reset pin filter in run/wait mode. */ + uint8_t busClockFilterCount; /*!< Reset pin bus clock filter width. */ +} rcm_reset_pin_filter_config_t; + +/******************************************************************************* + * API + ******************************************************************************/ +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus*/ + +/*! @name Reset Control Module APIs*/ +/*@{*/ + +#if (defined(FSL_FEATURE_RCM_HAS_VERID) && FSL_FEATURE_RCM_HAS_VERID) +/*! + * @brief Gets the RCM version ID. + * + * This function gets the RCM version ID including the major version number, + * the minor version number, and the feature specification number. + * + * @param base RCM peripheral base address. + * @param versionId Pointer to version ID structure. + */ +static inline void RCM_GetVersionId(RCM_Type *base, rcm_version_id_t *versionId) +{ + *((uint32_t *)versionId) = base->VERID; +} +#endif + +#if (defined(FSL_FEATURE_RCM_HAS_PARAM) && FSL_FEATURE_RCM_HAS_PARAM) +/*! + * @brief Gets the reset source implemented status. + * + * This function gets the RCM parameter that indicates whether the corresponding reset source is implemented. + * Use source masks defined in the rcm_reset_source_t to get the desired source status. + * + * Example: + @code + uint32_t status; + + // To test whether the MCU is reset using Watchdog. + status = RCM_GetResetSourceImplementedStatus(RCM) & (kRCM_SourceWdog | kRCM_SourcePin); + @endcode + * + * @param base RCM peripheral base address. + * @return All reset source implemented status bit map. + */ +static inline uint32_t RCM_GetResetSourceImplementedStatus(RCM_Type *base) +{ + return base->PARAM; +} +#endif /* FSL_FEATURE_RCM_HAS_PARAM */ + +/*! + * @brief Gets the reset source status which caused a previous reset. + * + * This function gets the current reset source status. Use source masks + * defined in the rcm_reset_source_t to get the desired source status. + * + * Example: + @code + uint32_t resetStatus; + + // To get all reset source statuses. + resetStatus = RCM_GetPreviousResetSources(RCM) & kRCM_SourceAll; + + // To test whether the MCU is reset using Watchdog. + resetStatus = RCM_GetPreviousResetSources(RCM) & kRCM_SourceWdog; + + // To test multiple reset sources. + resetStatus = RCM_GetPreviousResetSources(RCM) & (kRCM_SourceWdog | kRCM_SourcePin); + @endcode + * + * @param base RCM peripheral base address. + * @return All reset source status bit map. + */ +static inline uint32_t RCM_GetPreviousResetSources(RCM_Type *base) +{ +#if (defined(FSL_FEATURE_RCM_REG_WIDTH) && (FSL_FEATURE_RCM_REG_WIDTH == 32)) + return base->SRS; +#else + return (uint32_t)((uint32_t)base->SRS0 | ((uint32_t)base->SRS1 << 8U)); +#endif /* (FSL_FEATURE_RCM_REG_WIDTH == 32) */ +} + +#if (defined(FSL_FEATURE_RCM_HAS_SSRS) && FSL_FEATURE_RCM_HAS_SSRS) +/*! + * @brief Gets the sticky reset source status. + * + * This function gets the current reset source status that has not been cleared + * by software for some specific source. + * + * Example: + @code + uint32_t resetStatus; + + // To get all reset source statuses. + resetStatus = RCM_GetStickyResetSources(RCM) & kRCM_SourceAll; + + // To test whether the MCU is reset using Watchdog. + resetStatus = RCM_GetStickyResetSources(RCM) & kRCM_SourceWdog; + + // To test multiple reset sources. + resetStatus = RCM_GetStickyResetSources(RCM) & (kRCM_SourceWdog | kRCM_SourcePin); + @endcode + * + * @param base RCM peripheral base address. + * @return All reset source status bit map. + */ +static inline uint32_t RCM_GetStickyResetSources(RCM_Type *base) +{ +#if (defined(FSL_FEATURE_RCM_REG_WIDTH) && (FSL_FEATURE_RCM_REG_WIDTH == 32)) + return base->SSRS; +#else + return (base->SSRS0 | ((uint32_t)base->SSRS1 << 8U)); +#endif /* (FSL_FEATURE_RCM_REG_WIDTH == 32) */ +} + +/*! + * @brief Clears the sticky reset source status. + * + * This function clears the sticky system reset flags indicated by source masks. + * + * Example: + @code + // Clears multiple reset sources. + RCM_ClearStickyResetSources(kRCM_SourceWdog | kRCM_SourcePin); + @endcode + * + * @param base RCM peripheral base address. + * @param sourceMasks reset source status bit map + */ +static inline void RCM_ClearStickyResetSources(RCM_Type *base, uint32_t sourceMasks) +{ +#if (defined(FSL_FEATURE_RCM_REG_WIDTH) && (FSL_FEATURE_RCM_REG_WIDTH == 32)) + base->SSRS = sourceMasks; +#else + base->SSRS0 = (sourceMasks & 0xffU); + base->SSRS1 = ((sourceMasks >> 8U) & 0xffU); +#endif /* (FSL_FEATURE_RCM_REG_WIDTH == 32) */ +} +#endif /* FSL_FEATURE_RCM_HAS_SSRS */ + +/*! + * @brief Configures the reset pin filter. + * + * This function sets the reset pin filter including the filter source, filter + * width, and so on. + * + * @param base RCM peripheral base address. + * @param config Pointer to the configuration structure. + */ +void RCM_ConfigureResetPinFilter(RCM_Type *base, const rcm_reset_pin_filter_config_t *config); + +#if (defined(FSL_FEATURE_RCM_HAS_EZPMS) && FSL_FEATURE_RCM_HAS_EZPMS) +/*! + * @brief Gets the EZP_MS_B pin assert status. + * + * This function gets the easy port mode status (EZP_MS_B) pin assert status. + * + * @param base RCM peripheral base address. + * @return status true - asserted, false - reasserted + */ +static inline bool RCM_GetEasyPortModePinStatus(RCM_Type *base) +{ + return (bool)(base->MR & RCM_MR_EZP_MS_MASK); +} +#endif /* FSL_FEATURE_RCM_HAS_EZPMS */ + +#if (defined(FSL_FEATURE_RCM_HAS_BOOTROM) && FSL_FEATURE_RCM_HAS_BOOTROM) +/*! + * @brief Gets the ROM boot source. + * + * This function gets the ROM boot source during the last chip reset. + * + * @param base RCM peripheral base address. + * @return The ROM boot source. + */ +static inline rcm_boot_rom_config_t RCM_GetBootRomSource(RCM_Type *base) +{ + return (rcm_boot_rom_config_t)((base->MR & RCM_MR_BOOTROM_MASK) >> RCM_MR_BOOTROM_SHIFT); +} + +/*! + * @brief Clears the ROM boot source flag. + * + * This function clears the ROM boot source flag. + * + * @param base Register base address of RCM + */ +static inline void RCM_ClearBootRomSource(RCM_Type *base) +{ + base->MR |= RCM_MR_BOOTROM_MASK; +} + +/*! + * @brief Forces the boot from ROM. + * + * This function forces booting from ROM during all subsequent system resets. + * + * @param base RCM peripheral base address. + * @param config Boot configuration. + */ +void RCM_SetForceBootRomSource(RCM_Type *base, rcm_boot_rom_config_t config); +#endif /* FSL_FEATURE_RCM_HAS_BOOTROM */ + +#if (defined(FSL_FEATURE_RCM_HAS_SRIE) && FSL_FEATURE_RCM_HAS_SRIE) +/*! + * @brief Sets the system reset interrupt configuration. + * + * For a graceful shut down, the RCM supports delaying the assertion of the system + * reset for a period of time when the reset interrupt is generated. This function + * can be used to enable the interrupt and the delay period. The interrupts + * are passed in as bit mask. See rcm_int_t for details. For example, to + * delay a reset for 512 LPO cycles after the WDOG timeout or loss-of-clock occurs, + * configure as follows: + * RCM_SetSystemResetInterruptConfig(kRCM_IntWatchDog | kRCM_IntLossOfClk, kRCM_ResetDelay512Lpo); + * + * @param base RCM peripheral base address. + * @param intMask Bit mask of the system reset interrupts to enable. See + * rcm_interrupt_enable_t for details. + * @param Delay Bit mask of the system reset interrupts to enable. + */ +static inline void RCM_SetSystemResetInterruptConfig(RCM_Type *base, uint32_t intMask, rcm_reset_delay_t delay) +{ + base->SRIE = (intMask | delay); +} +#endif /* FSL_FEATURE_RCM_HAS_SRIE */ +/*@}*/ + +#if defined(__cplusplus) +} +#endif /* __cplusplus*/ + +/*! @}*/ + +#endif /* _FSL_RCM_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_rtc.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_rtc.c new file mode 100644 index 00000000000..db6a2fadbb3 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_rtc.c @@ -0,0 +1,379 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_rtc.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ +#define SECONDS_IN_A_DAY (86400U) +#define SECONDS_IN_A_HOUR (3600U) +#define SECONDS_IN_A_MINUTE (60U) +#define DAYS_IN_A_YEAR (365U) +#define YEAR_RANGE_START (1970U) +#define YEAR_RANGE_END (2099U) + +/******************************************************************************* + * Prototypes + ******************************************************************************/ +/*! + * @brief Checks whether the date and time passed in is valid + * + * @param datetime Pointer to structure where the date and time details are stored + * + * @return Returns false if the date & time details are out of range; true if in range + */ +static bool RTC_CheckDatetimeFormat(const rtc_datetime_t *datetime); + +/*! + * @brief Converts time data from datetime to seconds + * + * @param datetime Pointer to datetime structure where the date and time details are stored + * + * @return The result of the conversion in seconds + */ +static uint32_t RTC_ConvertDatetimeToSeconds(const rtc_datetime_t *datetime); + +/*! + * @brief Converts time data from seconds to a datetime structure + * + * @param seconds Seconds value that needs to be converted to datetime format + * @param datetime Pointer to the datetime structure where the result of the conversion is stored + */ +static void RTC_ConvertSecondsToDatetime(uint32_t seconds, rtc_datetime_t *datetime); + +/******************************************************************************* + * Code + ******************************************************************************/ +static bool RTC_CheckDatetimeFormat(const rtc_datetime_t *datetime) +{ + assert(datetime); + + /* Table of days in a month for a non leap year. First entry in the table is not used, + * valid months start from 1 + */ + uint8_t daysPerMonth[] = {0U, 31U, 28U, 31U, 30U, 31U, 30U, 31U, 31U, 30U, 31U, 30U, 31U}; + + /* Check year, month, hour, minute, seconds */ + if ((datetime->year < YEAR_RANGE_START) || (datetime->year > YEAR_RANGE_END) || (datetime->month > 12U) || + (datetime->month < 1U) || (datetime->hour >= 24U) || (datetime->minute >= 60U) || (datetime->second >= 60U)) + { + /* If not correct then error*/ + return false; + } + + /* Adjust the days in February for a leap year */ + if ((((datetime->year & 3U) == 0) && (datetime->year % 100 != 0)) || (datetime->year % 400 == 0)) + { + daysPerMonth[2] = 29U; + } + + /* Check the validity of the day */ + if ((datetime->day > daysPerMonth[datetime->month]) || (datetime->day < 1U)) + { + return false; + } + + return true; +} + +static uint32_t RTC_ConvertDatetimeToSeconds(const rtc_datetime_t *datetime) +{ + assert(datetime); + + /* Number of days from begin of the non Leap-year*/ + /* Number of days from begin of the non Leap-year*/ + uint16_t monthDays[] = {0U, 0U, 31U, 59U, 90U, 120U, 151U, 181U, 212U, 243U, 273U, 304U, 334U}; + uint32_t seconds; + + /* Compute number of days from 1970 till given year*/ + seconds = (datetime->year - 1970U) * DAYS_IN_A_YEAR; + /* Add leap year days */ + seconds += ((datetime->year / 4) - (1970U / 4)); + /* Add number of days till given month*/ + seconds += monthDays[datetime->month]; + /* Add days in given month. We subtract the current day as it is + * represented in the hours, minutes and seconds field*/ + seconds += (datetime->day - 1); + /* For leap year if month less than or equal to Febraury, decrement day counter*/ + if ((!(datetime->year & 3U)) && (datetime->month <= 2U)) + { + seconds--; + } + + seconds = (seconds * SECONDS_IN_A_DAY) + (datetime->hour * SECONDS_IN_A_HOUR) + + (datetime->minute * SECONDS_IN_A_MINUTE) + datetime->second; + + return seconds; +} + +static void RTC_ConvertSecondsToDatetime(uint32_t seconds, rtc_datetime_t *datetime) +{ + assert(datetime); + + uint32_t x; + uint32_t secondsRemaining, days; + uint16_t daysInYear; + /* Table of days in a month for a non leap year. First entry in the table is not used, + * valid months start from 1 + */ + uint8_t daysPerMonth[] = {0U, 31U, 28U, 31U, 30U, 31U, 30U, 31U, 31U, 30U, 31U, 30U, 31U}; + + /* Start with the seconds value that is passed in to be converted to date time format */ + secondsRemaining = seconds; + + /* Calcuate the number of days, we add 1 for the current day which is represented in the + * hours and seconds field + */ + days = secondsRemaining / SECONDS_IN_A_DAY + 1; + + /* Update seconds left*/ + secondsRemaining = secondsRemaining % SECONDS_IN_A_DAY; + + /* Calculate the datetime hour, minute and second fields */ + datetime->hour = secondsRemaining / SECONDS_IN_A_HOUR; + secondsRemaining = secondsRemaining % SECONDS_IN_A_HOUR; + datetime->minute = secondsRemaining / 60U; + datetime->second = secondsRemaining % SECONDS_IN_A_MINUTE; + + /* Calculate year */ + daysInYear = DAYS_IN_A_YEAR; + datetime->year = YEAR_RANGE_START; + while (days > daysInYear) + { + /* Decrease day count by a year and increment year by 1 */ + days -= daysInYear; + datetime->year++; + + /* Adjust the number of days for a leap year */ + if (datetime->year & 3U) + { + daysInYear = DAYS_IN_A_YEAR; + } + else + { + daysInYear = DAYS_IN_A_YEAR + 1; + } + } + + /* Adjust the days in February for a leap year */ + if (!(datetime->year & 3U)) + { + daysPerMonth[2] = 29U; + } + + for (x = 1U; x <= 12U; x++) + { + if (days <= daysPerMonth[x]) + { + datetime->month = x; + break; + } + else + { + days -= daysPerMonth[x]; + } + } + + datetime->day = days; +} + +void RTC_Init(RTC_Type *base, const rtc_config_t *config) +{ + assert(config); + + uint32_t reg; + + CLOCK_EnableClock(kCLOCK_Rtc0); + + /* Issue a software reset if timer is invalid */ + if (RTC_GetStatusFlags(RTC) & kRTC_TimeInvalidFlag) + { + RTC_Reset(RTC); + } + + reg = base->CR; + /* Setup the update mode and supervisor access mode */ + reg &= ~(RTC_CR_UM_MASK | RTC_CR_SUP_MASK); + reg |= RTC_CR_UM(config->updateMode) | RTC_CR_SUP(config->supervisorAccess); +#if defined(FSL_FEATURE_RTC_HAS_WAKEUP_PIN_SELECTION) && FSL_FEATURE_RTC_HAS_WAKEUP_PIN_SELECTION + /* Setup the wakeup pin select */ + reg &= ~(RTC_CR_WPS_MASK); + reg |= RTC_CR_WPS(config->wakeupSelect); +#endif /* FSL_FEATURE_RTC_HAS_WAKEUP_PIN */ + base->CR = reg; + + /* Configure the RTC time compensation register */ + base->TCR = (RTC_TCR_CIR(config->compensationInterval) | RTC_TCR_TCR(config->compensationTime)); +} + +void RTC_GetDefaultConfig(rtc_config_t *config) +{ + assert(config); + + /* Wakeup pin will assert if the RTC interrupt asserts or if the wakeup pin is turned on */ + config->wakeupSelect = false; + /* Registers cannot be written when locked */ + config->updateMode = false; + /* Non-supervisor mode write accesses are not supported and will generate a bus error */ + config->supervisorAccess = false; + /* Compensation interval used by the crystal compensation logic */ + config->compensationInterval = 0; + /* Compensation time used by the crystal compensation logic */ + config->compensationTime = 0; +} + +status_t RTC_SetDatetime(RTC_Type *base, const rtc_datetime_t *datetime) +{ + assert(datetime); + + /* Return error if the time provided is not valid */ + if (!(RTC_CheckDatetimeFormat(datetime))) + { + return kStatus_InvalidArgument; + } + + /* Set time in seconds */ + base->TSR = RTC_ConvertDatetimeToSeconds(datetime); + + return kStatus_Success; +} + +void RTC_GetDatetime(RTC_Type *base, rtc_datetime_t *datetime) +{ + assert(datetime); + + uint32_t seconds = 0; + + seconds = base->TSR; + RTC_ConvertSecondsToDatetime(seconds, datetime); +} + +status_t RTC_SetAlarm(RTC_Type *base, const rtc_datetime_t *alarmTime) +{ + assert(alarmTime); + + uint32_t alarmSeconds = 0; + uint32_t currSeconds = 0; + + /* Return error if the alarm time provided is not valid */ + if (!(RTC_CheckDatetimeFormat(alarmTime))) + { + return kStatus_InvalidArgument; + } + + alarmSeconds = RTC_ConvertDatetimeToSeconds(alarmTime); + + /* Get the current time */ + currSeconds = base->TSR; + + /* Return error if the alarm time has passed */ + if (alarmSeconds < currSeconds) + { + return kStatus_Fail; + } + + /* Set alarm in seconds*/ + base->TAR = alarmSeconds; + + return kStatus_Success; +} + +void RTC_GetAlarm(RTC_Type *base, rtc_datetime_t *datetime) +{ + assert(datetime); + + uint32_t alarmSeconds = 0; + + /* Get alarm in seconds */ + alarmSeconds = base->TAR; + + RTC_ConvertSecondsToDatetime(alarmSeconds, datetime); +} + +void RTC_ClearStatusFlags(RTC_Type *base, uint32_t mask) +{ + /* The alarm flag is cleared by writing to the TAR register */ + if (mask & kRTC_AlarmFlag) + { + base->TAR = 0U; + } + + /* The timer overflow flag is cleared by initializing the TSR register. + * The time counter should be disabled for this write to be successful + */ + if (mask & kRTC_TimeOverflowFlag) + { + base->TSR = 1U; + } + + /* The timer overflow flag is cleared by initializing the TSR register. + * The time counter should be disabled for this write to be successful + */ + if (mask & kRTC_TimeInvalidFlag) + { + base->TSR = 1U; + } +} + +#if defined(FSL_FEATURE_RTC_HAS_MONOTONIC) && (FSL_FEATURE_RTC_HAS_MONOTONIC) + +void RTC_GetMonotonicCounter(RTC_Type *base, uint64_t *counter) +{ + assert(counter); + + *counter = (((uint64_t)base->MCHR << 32) | ((uint64_t)base->MCLR)); +} + +void RTC_SetMonotonicCounter(RTC_Type *base, uint64_t counter) +{ + /* Prepare to initialize the register with the new value written */ + base->MER &= ~RTC_MER_MCE_MASK; + + base->MCHR = (uint32_t)((counter) >> 32); + base->MCLR = (uint32_t)(counter); +} + +status_t RTC_IncrementMonotonicCounter(RTC_Type *base) +{ + if (base->SR & (RTC_SR_MOF_MASK | RTC_SR_TIF_MASK)) + { + return kStatus_Fail; + } + + /* Prepare to switch to increment mode */ + base->MER |= RTC_MER_MCE_MASK; + /* Write anything so the counter increments*/ + base->MCLR = 1U; + + return kStatus_Success; +} + +#endif /* FSL_FEATURE_RTC_HAS_MONOTONIC */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_rtc.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_rtc.h new file mode 100644 index 00000000000..4357c2e9f9d --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_rtc.h @@ -0,0 +1,412 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FSL_RTC_H_ +#define _FSL_RTC_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup rtc + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +#define FSL_RTC_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) /*!< Version 2.0.0 */ +/*@}*/ + +/*! @brief List of RTC interrupts */ +typedef enum _rtc_interrupt_enable +{ + kRTC_TimeInvalidInterruptEnable = RTC_IER_TIIE_MASK, /*!< Time invalid interrupt.*/ + kRTC_TimeOverflowInterruptEnable = RTC_IER_TOIE_MASK, /*!< Time overflow interrupt.*/ + kRTC_AlarmInterruptEnable = RTC_IER_TAIE_MASK, /*!< Alarm interrupt.*/ + kRTC_SecondsInterruptEnable = RTC_IER_TSIE_MASK /*!< Seconds interrupt.*/ +} rtc_interrupt_enable_t; + +/*! @brief List of RTC flags */ +typedef enum _rtc_status_flags +{ + kRTC_TimeInvalidFlag = RTC_SR_TIF_MASK, /*!< Time invalid flag */ + kRTC_TimeOverflowFlag = RTC_SR_TOF_MASK, /*!< Time overflow flag */ + kRTC_AlarmFlag = RTC_SR_TAF_MASK /*!< Alarm flag*/ +} rtc_status_flags_t; + +#if (defined(FSL_FEATURE_RTC_HAS_OSC_SCXP) && FSL_FEATURE_RTC_HAS_OSC_SCXP) + +/*! @brief List of RTC Oscillator capacitor load settings */ +typedef enum _rtc_osc_cap_load +{ + kRTC_Capacitor_2p = RTC_CR_SC2P_MASK, /*!< 2pF capacitor load */ + kRTC_Capacitor_4p = RTC_CR_SC4P_MASK, /*!< 4pF capacitor load */ + kRTC_Capacitor_8p = RTC_CR_SC8P_MASK, /*!< 8pF capacitor load */ + kRTC_Capacitor_16p = RTC_CR_SC16P_MASK /*!< 16pF capacitor load */ +} rtc_osc_cap_load_t; + +#endif /* FSL_FEATURE_SCG_HAS_OSC_SCXP */ + +/*! @brief Structure is used to hold the date and time */ +typedef struct _rtc_datetime +{ + uint16_t year; /*!< Range from 1970 to 2099.*/ + uint8_t month; /*!< Range from 1 to 12.*/ + uint8_t day; /*!< Range from 1 to 31 (depending on month).*/ + uint8_t hour; /*!< Range from 0 to 23.*/ + uint8_t minute; /*!< Range from 0 to 59.*/ + uint8_t second; /*!< Range from 0 to 59.*/ +} rtc_datetime_t; + +/*! + * @brief RTC config structure + * + * This structure holds the configuration settings for the RTC peripheral. To initialize this + * structure to reasonable defaults, call the RTC_GetDefaultConfig() function and pass a + * pointer to your config structure instance. + * + * The config struct can be made const so it resides in flash + */ +typedef struct _rtc_config +{ + bool wakeupSelect; /*!< true: Wakeup pin outputs the 32 KHz clock; + false:Wakeup pin used to wakeup the chip */ + bool updateMode; /*!< true: Registers can be written even when locked under certain + conditions, false: No writes allowed when registers are locked */ + bool supervisorAccess; /*!< true: Non-supervisor accesses are allowed; + false: Non-supervisor accesses are not supported */ + uint32_t compensationInterval; /*!< Compensation interval that is written to the CIR field in RTC TCR Register */ + uint32_t compensationTime; /*!< Compensation time that is written to the TCR field in RTC TCR Register */ +} rtc_config_t; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @name Initialization and deinitialization + * @{ + */ + +/*! + * @brief Ungates the RTC clock and configures the peripheral for basic operation. + * + * This function will issue a software reset if the timer invalid flag is set. + * + * @note This API should be called at the beginning of the application using the RTC driver. + * + * @param base RTC peripheral base address + * @param config Pointer to user's RTC config structure. + */ +void RTC_Init(RTC_Type *base, const rtc_config_t *config); + +/*! + * @brief Stop the timer and gate the RTC clock + * + * @param base RTC peripheral base address + */ +static inline void RTC_Deinit(RTC_Type *base) +{ + /* Stop the RTC timer */ + base->SR &= ~RTC_SR_TCE_MASK; + + /* Gate the module clock */ + CLOCK_DisableClock(kCLOCK_Rtc0); +} + +/*! + * @brief Fill in the RTC config struct with the default settings + * + * The default values are: + * @code + * config->wakeupSelect = false; + * config->updateMode = false; + * config->supervisorAccess = false; + * config->compensationInterval = 0; + * config->compensationTime = 0; + * @endcode + * @param config Pointer to user's RTC config structure. + */ +void RTC_GetDefaultConfig(rtc_config_t *config); + +/*! @}*/ + +/*! + * @name Current Time & Alarm + * @{ + */ + +/*! + * @brief Sets the RTC date and time according to the given time structure. + * + * The RTC counter must be stopped prior to calling this function as writes to the RTC + * seconds register will fail if the RTC counter is running. + * + * @param base RTC peripheral base address + * @param datetime Pointer to structure where the date and time details to set are stored + * + * @return kStatus_Success: Success in setting the time and starting the RTC + * kStatus_InvalidArgument: Error because the datetime format is incorrect + */ +status_t RTC_SetDatetime(RTC_Type *base, const rtc_datetime_t *datetime); + +/*! + * @brief Gets the RTC time and stores it in the given time structure. + * + * @param base RTC peripheral base address + * @param datetime Pointer to structure where the date and time details are stored. + */ +void RTC_GetDatetime(RTC_Type *base, rtc_datetime_t *datetime); + +/*! + * @brief Sets the RTC alarm time + * + * The function checks whether the specified alarm time is greater than the present + * time. If not, the function does not set the alarm and returns an error. + * + * @param base RTC peripheral base address + * @param alarmTime Pointer to structure where the alarm time is stored. + * + * @return kStatus_Success: success in setting the RTC alarm + * kStatus_InvalidArgument: Error because the alarm datetime format is incorrect + * kStatus_Fail: Error because the alarm time has already passed + */ +status_t RTC_SetAlarm(RTC_Type *base, const rtc_datetime_t *alarmTime); + +/*! + * @brief Returns the RTC alarm time. + * + * @param base RTC peripheral base address + * @param datetime Pointer to structure where the alarm date and time details are stored. + */ +void RTC_GetAlarm(RTC_Type *base, rtc_datetime_t *datetime); + +/*! @}*/ + +/*! + * @name Interrupt Interface + * @{ + */ + +/*! + * @brief Enables the selected RTC interrupts. + * + * @param base RTC peripheral base address + * @param mask The interrupts to enable. This is a logical OR of members of the + * enumeration ::rtc_interrupt_enable_t + */ +static inline void RTC_EnableInterrupts(RTC_Type *base, uint32_t mask) +{ + base->IER |= mask; +} + +/*! + * @brief Disables the selected RTC interrupts. + * + * @param base RTC peripheral base address + * @param mask The interrupts to enable. This is a logical OR of members of the + * enumeration ::rtc_interrupt_enable_t + */ +static inline void RTC_DisableInterrupts(RTC_Type *base, uint32_t mask) +{ + base->IER &= ~mask; +} + +/*! + * @brief Gets the enabled RTC interrupts. + * + * @param base RTC peripheral base address + * + * @return The enabled interrupts. This is the logical OR of members of the + * enumeration ::rtc_interrupt_enable_t + */ +static inline uint32_t RTC_GetEnabledInterrupts(RTC_Type *base) +{ + return (base->IER & (RTC_IER_TIIE_MASK | RTC_IER_TOIE_MASK | RTC_IER_TAIE_MASK | RTC_IER_TSIE_MASK)); +} + +/*! @}*/ + +/*! + * @name Status Interface + * @{ + */ + +/*! + * @brief Gets the RTC status flags + * + * @param base RTC peripheral base address + * + * @return The status flags. This is the logical OR of members of the + * enumeration ::rtc_status_flags_t + */ +static inline uint32_t RTC_GetStatusFlags(RTC_Type *base) +{ + return (base->SR & (RTC_SR_TIF_MASK | RTC_SR_TOF_MASK | RTC_SR_TAF_MASK)); +} + +/*! + * @brief Clears the RTC status flags. + * + * @param base RTC peripheral base address + * @param mask The status flags to clear. This is a logical OR of members of the + * enumeration ::rtc_status_flags_t + */ +void RTC_ClearStatusFlags(RTC_Type *base, uint32_t mask); + +/*! @}*/ + +/*! + * @name Timer Start and Stop + * @{ + */ + +/*! + * @brief Starts the RTC time counter. + * + * After calling this function, the timer counter increments once a second provided SR[TOF] or + * SR[TIF] are not set. + * + * @param base RTC peripheral base address + */ +static inline void RTC_StartTimer(RTC_Type *base) +{ + base->SR |= RTC_SR_TCE_MASK; +} + +/*! + * @brief Stops the RTC time counter. + * + * RTC's seconds register can be written to only when the timer is stopped. + * + * @param base RTC peripheral base address + */ +static inline void RTC_StopTimer(RTC_Type *base) +{ + base->SR &= ~RTC_SR_TCE_MASK; +} + +/*! @}*/ + +#if (defined(FSL_FEATURE_RTC_HAS_OSC_SCXP) && FSL_FEATURE_RTC_HAS_OSC_SCXP) + +/*! + * @brief This function sets the specified capacitor configuration for the RTC oscillator. + * + * @param base RTC peripheral base address + * @param capLoad Oscillator loads to enable. This is a logical OR of members of the + * enumeration ::rtc_osc_cap_load_t + */ +static inline void RTC_SetOscCapLoad(RTC_Type *base, uint32_t capLoad) +{ + uint32_t reg = base->CR; + + reg &= ~(RTC_CR_SC2P_MASK | RTC_CR_SC4P_MASK | RTC_CR_SC8P_MASK | RTC_CR_SC16P_MASK); + reg |= capLoad; + + base->CR = reg; +} + +#endif /* FSL_FEATURE_SCG_HAS_OSC_SCXP */ + +/*! + * @brief Performs a software reset on the RTC module. + * + * This resets all RTC registers except for the SWR bit and the RTC_WAR and RTC_RAR + * registers. The SWR bit is cleared by software explicitly clearing it. + * + * @param base RTC peripheral base address + */ +static inline void RTC_Reset(RTC_Type *base) +{ + base->CR |= RTC_CR_SWR_MASK; + base->CR &= ~RTC_CR_SWR_MASK; + + /* Set TSR register to 0x1 to avoid the timer invalid (TIF) bit being set in the SR register */ + base->TSR = 1U; +} + +#if defined(FSL_FEATURE_RTC_HAS_MONOTONIC) && (FSL_FEATURE_RTC_HAS_MONOTONIC) + +/*! + * @name Monotonic counter functions + * @{ + */ + +/*! + * @brief Reads the values of the Monotonic Counter High and Monotonic Counter Low and returns + * them as a single value. + * + * @param base RTC peripheral base address + * @param counter Pointer to variable where the value is stored. + */ +void RTC_GetMonotonicCounter(RTC_Type *base, uint64_t *counter); + +/*! + * @brief Writes values Monotonic Counter High and Monotonic Counter Low by decomposing + * the given single value. + * + * @param base RTC peripheral base address + * @param counter Counter value + */ +void RTC_SetMonotonicCounter(RTC_Type *base, uint64_t counter); + +/*! + * @brief Increments the Monotonic Counter by one. + * + * Increments the Monotonic Counter (registers RTC_MCLR and RTC_MCHR accordingly) by setting + * the monotonic counter enable (MER[MCE]) and then writing to the RTC_MCLR register. A write to the + * monotonic counter low that causes it to overflow also increments the monotonic counter high. + * + * @param base RTC peripheral base address + * + * @return kStatus_Success: success + * kStatus_Fail: error occurred, either time invalid or monotonic overflow flag was found + */ +status_t RTC_IncrementMonotonicCounter(RTC_Type *base); + +/*! @}*/ + +#endif /* FSL_FEATURE_RTC_HAS_MONOTONIC */ + +#if defined(__cplusplus) +} +#endif + +/*! @}*/ + +#endif /* _FSL_RTC_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_sim.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_sim.c new file mode 100644 index 00000000000..3a4b801b7b3 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_sim.c @@ -0,0 +1,53 @@ +/* +* Copyright (c) 2015, Freescale Semiconductor, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without modification, +* are permitted provided that the following conditions are met: +* +* o Redistributions of source code must retain the above copyright notice, this list +* of conditions and the following disclaimer. +* +* o Redistributions in binary form must reproduce the above copyright notice, this +* list of conditions and the following disclaimer in the documentation and/or +* other materials provided with the distribution. +* +* o Neither the name of Freescale Semiconductor, Inc. nor the names of its +* contributors may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "fsl_sim.h" + +/******************************************************************************* + * Codes + ******************************************************************************/ +#if (defined(FSL_FEATURE_SIM_OPT_HAS_USB_VOLTAGE_REGULATOR) && FSL_FEATURE_SIM_OPT_HAS_USB_VOLTAGE_REGULATOR) +void SIM_SetUsbVoltRegulatorEnableMode(uint32_t mask) +{ + SIM->SOPT1CFG |= (SIM_SOPT1CFG_URWE_MASK | SIM_SOPT1CFG_UVSWE_MASK | SIM_SOPT1CFG_USSWE_MASK); + + SIM->SOPT1 = (SIM->SOPT1 & ~kSIM_UsbVoltRegEnableInAllModes) | mask; +} +#endif /* FSL_FEATURE_SIM_OPT_HAS_USB_VOLTAGE_REGULATOR */ + +void SIM_GetUniqueId(sim_uid_t *uid) +{ +#if defined(SIM_UIDH) + uid->H = SIM->UIDH; +#endif + uid->MH = SIM->UIDMH; + uid->ML = SIM->UIDML; + uid->L = SIM->UIDL; +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_sim.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_sim.h new file mode 100644 index 00000000000..77958f86fd3 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_sim.h @@ -0,0 +1,127 @@ +/* +* Copyright (c) 2015, Freescale Semiconductor, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without modification, +* are permitted provided that the following conditions are met: +* +* o Redistributions of source code must retain the above copyright notice, this list +* of conditions and the following disclaimer. +* +* o Redistributions in binary form must reproduce the above copyright notice, this +* list of conditions and the following disclaimer in the documentation and/or +* other materials provided with the distribution. +* +* o Neither the name of Freescale Semiconductor, Inc. nor the names of its +* contributors may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#ifndef _FSL_SIM_H_ +#define _FSL_SIM_H_ + +#include "fsl_common.h" + +/*! @addtogroup sim */ +/*! @{*/ + + +/******************************************************************************* + * Definitions + *******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +#define FSL_SIM_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) /*!< Driver version 2.0.0 */ +/*@}*/ + +#if (defined(FSL_FEATURE_SIM_OPT_HAS_USB_VOLTAGE_REGULATOR) && FSL_FEATURE_SIM_OPT_HAS_USB_VOLTAGE_REGULATOR) +/*!@brief USB voltage regulator enable setting. */ +enum _sim_usb_volt_reg_enable_mode +{ + kSIM_UsbVoltRegEnable = SIM_SOPT1_USBREGEN_MASK, /*!< Enable voltage regulator. */ + kSIM_UsbVoltRegEnableInLowPower = SIM_SOPT1_USBVSTBY_MASK, /*!< Enable voltage regulator in VLPR/VLPW modes. */ + kSIM_UsbVoltRegEnableInStop = SIM_SOPT1_USBSSTBY_MASK, /*!< Enable voltage regulator in STOP/VLPS/LLS/VLLS modes. */ + kSIM_UsbVoltRegEnableInAllModes = SIM_SOPT1_USBREGEN_MASK | SIM_SOPT1_USBSSTBY_MASK | + SIM_SOPT1_USBVSTBY_MASK /*!< Enable voltage regulator in all power modes. */ +}; +#endif /* (defined(FSL_FEATURE_SIM_OPT_HAS_USB_VOLTAGE_REGULATOR) && FSL_FEATURE_SIM_OPT_HAS_USB_VOLTAGE_REGULATOR) */ + +/*!@brief Unique ID. */ +typedef struct _sim_uid +{ +#if defined(SIM_UIDH) + uint32_t H; /*!< UIDH. */ +#endif + uint32_t MH; /*!< UIDMH. */ + uint32_t ML; /*!< UIDML. */ + uint32_t L; /*!< UIDL. */ +} sim_uid_t; + +/*!@brief Flash enable mode. */ +enum _sim_flash_mode +{ + kSIM_FlashDisableInWait = SIM_FCFG1_FLASHDOZE_MASK, /*!< Disable flash in wait mode. */ + kSIM_FlashDisable = SIM_FCFG1_FLASHDIS_MASK /*!< Disable flash in normal mode. */ +}; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus*/ + +#if (defined(FSL_FEATURE_SIM_OPT_HAS_USB_VOLTAGE_REGULATOR) && FSL_FEATURE_SIM_OPT_HAS_USB_VOLTAGE_REGULATOR) +/*! + * @brief Sets the USB voltage regulator setting. + * + * This function configures whether the USB voltage regulator is enabled in + * normal RUN mode, STOP/VLPS/LLS/VLLS modes and VLPR/VLPW modes. The configurations + * are passed in as mask value of \ref _sim_usb_volt_reg_enable_mode. For example, enable + * USB voltage regulator in RUN/VLPR/VLPW modes and disable in STOP/VLPS/LLS/VLLS mode, + * please use: + * + * SIM_SetUsbVoltRegulatorEnableMode(kSIM_UsbVoltRegEnable | kSIM_UsbVoltRegEnableInLowPower); + * + * @param mask USB voltage regulator enable setting. + */ +void SIM_SetUsbVoltRegulatorEnableMode(uint32_t mask); +#endif /* FSL_FEATURE_SIM_OPT_HAS_USB_VOLTAGE_REGULATOR */ + +/*! + * @brief Get the unique identification register value. + * + * @param uid Pointer to the structure to save the UID value. + */ +void SIM_GetUniqueId(sim_uid_t *uid); + +/*! + * @brief Set the flash enable mode. + * + * @param mode The mode to set, see \ref _sim_flash_mode for mode details. + */ +static inline void SIM_SetFlashMode(uint8_t mode) +{ + SIM->FCFG1 = mode; +} + +#if defined(__cplusplus) +} +#endif /* __cplusplus*/ + +/*! @}*/ + +#endif /* _FSL_SIM_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smartcard.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smartcard.h new file mode 100644 index 00000000000..98baf325e9b --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smartcard.h @@ -0,0 +1,296 @@ +/* + * Copyright (c) 2015-2016, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _FSL_SMARTCARD_H_ +#define _FSL_SMARTCARD_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup smartcard + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief Smart card driver version 2.1.1. + */ +#define FSL_SMARTCARD_DRIVER_VERSION (MAKE_VERSION(2, 1, 1)) +/*@}*/ + +/*! @brief Smart card global define which specify number of clock cycles until initial 'TS' character has to be received + */ +#define SMARTCARD_INIT_DELAY_CLOCK_CYCLES (42000u) + +/*! @brief Smart card global define which specify number of clock cycles during which ATR string has to be received */ +#define SMARTCARD_EMV_ATR_DURATION_ETU (20150u) + +/*! @brief Smart card specification initial TS character definition of direct convention */ +#define SMARTCARD_TS_DIRECT_CONVENTION (0x3Bu) + +/*! @brief Smart card specification initial TS character definition of inverse convention */ +#define SMARTCARD_TS_INVERSE_CONVENTION (0x3Fu) + +/*! @brief Smart card Error codes. */ +typedef enum _smartcard_status +{ + kStatus_SMARTCARD_Success = MAKE_STATUS(kStatusGroup_SMARTCARD, 0), /*!< Transfer ends successfully */ + kStatus_SMARTCARD_TxBusy = MAKE_STATUS(kStatusGroup_SMARTCARD, 1), /*!< Transmit in progress */ + kStatus_SMARTCARD_RxBusy = MAKE_STATUS(kStatusGroup_SMARTCARD, 2), /*!< Receiving in progress */ + kStatus_SMARTCARD_NoTransferInProgress = MAKE_STATUS(kStatusGroup_SMARTCARD, 3), /*!< No transfer in progress */ + kStatus_SMARTCARD_Timeout = MAKE_STATUS(kStatusGroup_SMARTCARD, 4), /*!< Transfer ends with time-out */ + kStatus_SMARTCARD_Initialized = + MAKE_STATUS(kStatusGroup_SMARTCARD, 5), /*!< Smart card driver is already initialized */ + kStatus_SMARTCARD_PhyInitialized = + MAKE_STATUS(kStatusGroup_SMARTCARD, 6), /*!< Smart card PHY drive is already initialized */ + kStatus_SMARTCARD_CardNotActivated = MAKE_STATUS(kStatusGroup_SMARTCARD, 7), /*!< Smart card is not activated */ + kStatus_SMARTCARD_InvalidInput = + MAKE_STATUS(kStatusGroup_SMARTCARD, 8), /*!< Function called with invalid input arguments */ + kStatus_SMARTCARD_OtherError = MAKE_STATUS(kStatusGroup_SMARTCARD, 9) /*!< Some other error occur */ +} smartcard_status_t; + +/*! @brief Control codes for the Smart card protocol timers and misc. */ +typedef enum _smartcard_control +{ + kSMARTCARD_EnableADT = 0x0u, + kSMARTCARD_DisableADT = 0x1u, + kSMARTCARD_EnableGTV = 0x2u, + kSMARTCARD_DisableGTV = 0x3u, + kSMARTCARD_ResetWWT = 0x4u, + kSMARTCARD_EnableWWT = 0x5u, + kSMARTCARD_DisableWWT = 0x6u, + kSMARTCARD_ResetCWT = 0x7u, + kSMARTCARD_EnableCWT = 0x8u, + kSMARTCARD_DisableCWT = 0x9u, + kSMARTCARD_ResetBWT = 0xAu, + kSMARTCARD_EnableBWT = 0xBu, + kSMARTCARD_DisableBWT = 0xCu, + kSMARTCARD_EnableInitDetect = 0xDu, + kSMARTCARD_EnableAnack = 0xEu, + kSMARTCARD_DisableAnack = 0xFu, + kSMARTCARD_ConfigureBaudrate = 0x10u, + kSMARTCARD_SetupATRMode = 0x11u, + kSMARTCARD_SetupT0Mode = 0x12u, + kSMARTCARD_SetupT1Mode = 0x13u, + kSMARTCARD_EnableReceiverMode = 0x14u, + kSMARTCARD_DisableReceiverMode = 0x15u, + kSMARTCARD_EnableTransmitterMode = 0x16u, + kSMARTCARD_DisableTransmitterMode = 0x17u, + kSMARTCARD_ResetWaitTimeMultiplier = 0x18u, +} smartcard_control_t; + +/*! @brief Defines Smart card interface voltage class values */ +typedef enum _smartcard_card_voltage_class +{ + kSMARTCARD_VoltageClassUnknown = 0x0u, + kSMARTCARD_VoltageClassA5_0V = 0x1u, + kSMARTCARD_VoltageClassB3_3V = 0x2u, + kSMARTCARD_VoltageClassC1_8V = 0x3u +} smartcard_card_voltage_class_t; + +/*! @brief Defines Smart card I/O transfer states */ +typedef enum _smartcard_transfer_state +{ + kSMARTCARD_IdleState = 0x0u, + kSMARTCARD_WaitingForTSState = 0x1u, + kSMARTCARD_InvalidTSDetecetedState = 0x2u, + kSMARTCARD_ReceivingState = 0x3u, + kSMARTCARD_TransmittingState = 0x4u, +} smartcard_transfer_state_t; + +/*! @brief Defines Smart card reset types */ +typedef enum _smartcard_reset_type +{ + kSMARTCARD_ColdReset = 0x0u, + kSMARTCARD_WarmReset = 0x1u, + kSMARTCARD_NoColdReset = 0x2u, + kSMARTCARD_NoWarmReset = 0x3u, +} smartcard_reset_type_t; + +/*! @brief Defines Smart card transport protocol types */ +typedef enum _smartcard_transport_type +{ + kSMARTCARD_T0Transport = 0x0u, + kSMARTCARD_T1Transport = 0x1u +} smartcard_transport_type_t; + +/*! @brief Defines Smart card data parity types */ +typedef enum _smartcard_parity_type +{ + kSMARTCARD_EvenParity = 0x0u, + kSMARTCARD_OddParity = 0x1u +} smartcard_parity_type_t; + +/*! @brief Defines data Convention format */ +typedef enum _smartcard_card_convention +{ + kSMARTCARD_DirectConvention = 0x0u, + kSMARTCARD_InverseConvention = 0x1u +} smartcard_card_convention_t; + +/*! @brief Defines Smart card interface IC control types */ +typedef enum _smartcard_interface_control +{ + kSMARTCARD_InterfaceSetVcc = 0x00u, + kSMARTCARD_InterfaceSetClockToResetDelay = 0x01u, + kSMARTCARD_InterfaceReadStatus = 0x02u +} smartcard_interface_control_t; + +/*! @brief Defines transfer direction.*/ +typedef enum _smartcard_direction +{ + kSMARTCARD_Receive = 0u, + kSMARTCARD_Transmit = 1u +} smartcard_direction_t; + +/*! @brief Smart card interface interrupt callback function type */ +typedef void (*smartcard_interface_callback_t)(void *smartcardContext, void *param); +/*! @brief Smart card transfer interrupt callback function type */ +typedef void (*smartcard_transfer_callback_t)(void *smartcardContext, void *param); + +/*! @brief Time Delay function used to passive waiting using RTOS [ms] */ +typedef void (*smartcard_time_delay_t)(uint32_t miliseconds); + +/*! @brief Defines card-specific parameters for Smart card driver */ +typedef struct _smartcard_card_params +{ + /* ISO7816/EMV4.3 specification variables */ + uint16_t Fi; /*!< 4 bits Fi - clock rate conversion integer */ + uint8_t fMax; /*!< Maximum Smart card frequency in MHz */ + uint8_t WI; /*!< 8 bits WI - work wait time integer */ + uint8_t Di; /*!< 4 bits DI - baud rate divisor */ + uint8_t BWI; /*!< 4 bits BWI - block wait time integer */ + uint8_t CWI; /*!< 4 bits CWI - character wait time integer */ + uint8_t BGI; /*!< 4 bits BGI - block guard time integer */ + uint8_t GTN; /*!< 8 bits GTN - extended guard time integer */ + uint8_t IFSC; /*!< Indicates IFSC value of the card */ + uint8_t modeNegotiable; /*!< Indicates if the card acts in negotiable or a specific mode. */ + uint8_t currentD; /*!< 4 bits DI - current baud rate divisor*/ + /* Driver-specific variables */ + uint8_t status; /*!< Indicates smart card status */ + bool t0Indicated; /*!< Indicates ff T=0 indicated in TD1 byte */ + bool t1Indicated; /*!< Indicates if T=1 indicated in TD2 byte */ + bool atrComplete; /*!< Indicates whether the ATR received from the card was complete or not */ + bool atrValid; /*!< Indicates whether the ATR received from the card was valid or not */ + bool present; /*!< Indicates if a smart card is present */ + bool active; /*!< Indicates if the smart card is activated */ + bool faulty; /*!< Indicates whether smart card/interface is faulty */ + smartcard_card_convention_t convention; /*!< Card convention, kSMARTCARD_DirectConvention for direct convention, + kSMARTCARD_InverseConvention for inverse convention */ +} smartcard_card_params_t; + +/*! @brief Smart card Defines the state of the EMV timers in the Smart card driver */ +typedef struct _smartcard_timers_state +{ + volatile bool adtExpired; /*!< Indicates whether ADT timer expired */ + volatile bool wwtExpired; /*!< Indicates whether WWT timer expired */ + volatile bool cwtExpired; /*!< Indicates whether CWT timer expired */ + volatile bool bwtExpired; /*!< Indicates whether BWT timer expired */ + volatile bool initCharTimerExpired; /*!< Indicates whether reception timer + for initialization character (TS) after the RST has expired */ +} smartcard_timers_state_t; + +/*! @brief Defines user specified configuration of Smart card interface */ +typedef struct _smartcard_interface_config +{ + uint32_t smartCardClock; /*!< Smart card interface clock [Hz] */ + uint32_t clockToResetDelay; /*!< Indicates clock to RST apply delay [smart card clock cycles] */ + uint8_t clockModule; /*!< Smart card clock module number */ + uint8_t clockModuleChannel; /*!< Smart card clock module channel number */ + uint8_t clockModuleSourceClock; /*!< Smart card clock module source clock [e.g., BusClk] */ + smartcard_card_voltage_class_t vcc; /*!< Smart card voltage class */ + uint8_t controlPort; /*!< Smart card PHY control port instance */ + uint8_t controlPin; /*!< Smart card PHY control pin instance */ + uint8_t irqPort; /*!< Smart card PHY Interrupt port instance */ + uint8_t irqPin; /*!< Smart card PHY Interrupt pin instance */ + uint8_t resetPort; /*!< Smart card reset port instance */ + uint8_t resetPin; /*!< Smart card reset pin instance */ + uint8_t vsel0Port; /*!< Smart card PHY Vsel0 control port instance */ + uint8_t vsel0Pin; /*!< Smart card PHY Vsel0 control pin instance */ + uint8_t vsel1Port; /*!< Smart card PHY Vsel1 control port instance */ + uint8_t vsel1Pin; /*!< Smart card PHY Vsel1 control pin instance */ + uint8_t dataPort; /*!< Smart card PHY data port instance */ + uint8_t dataPin; /*!< Smart card PHY data pin instance */ + uint8_t dataPinMux; /*!< Smart card PHY data pin mux option */ + uint8_t tsTimerId; /*!< Numerical identifier of the External HW timer for Initial character detection */ +} smartcard_interface_config_t; + +/*! @brief Defines user transfer structure used to initialize transfer */ +typedef struct _smartcard_xfer +{ + smartcard_direction_t direction; /*!< Direction of communication. (RX/TX) */ + uint8_t *buff; /*!< The buffer of data. */ + size_t size; /*!< The number of transferred units. */ +} smartcard_xfer_t; + +/*! + * @brief Runtime state of the Smart card driver. + */ +typedef struct _smartcard_context +{ + /* Xfer part */ + void *base; /*!< Smart card module base address */ + smartcard_direction_t direction; /*!< Direction of communication. (RX/TX) */ + uint8_t *xBuff; /*!< The buffer of data being transferred.*/ + volatile size_t xSize; /*!< The number of bytes to be transferred. */ + volatile bool xIsBusy; /*!< True if there is an active transfer. */ + uint8_t txFifoEntryCount; /*!< Number of data word entries in transmit FIFO. */ + /* Smart card Interface part */ + smartcard_interface_callback_t interfaceCallback; /*!< Callback to invoke after interface IC raised interrupt.*/ + smartcard_transfer_callback_t transferCallback; /*!< Callback to invoke after transfer event occur.*/ + void *interfaceCallbackParam; /*!< Interface callback parameter pointer.*/ + void *transferCallbackParam; /*!< Transfer callback parameter pointer.*/ + smartcard_time_delay_t timeDelay; /*!< Function which handles time delay defined by user or RTOS. */ + smartcard_reset_type_t resetType; /*!< Indicates whether a Cold reset or Warm reset was requested. */ + smartcard_transport_type_t tType; /*!< Indicates current transfer protocol (T0 or T1) */ + /* Smart card State part */ + volatile smartcard_transfer_state_t transferState; /*!< Indicates the current transfer state */ + smartcard_timers_state_t timersState; /*!< Indicates the state of different protocol timers used in driver */ + smartcard_card_params_t + cardParams; /*!< Smart card parameters(ATR and current) and interface slots states(ATR and current) */ + uint8_t IFSD; /*!< Indicates the terminal IFSD */ + smartcard_parity_type_t parity; /*!< Indicates current parity even/odd */ + volatile bool rxtCrossed; /*!< Indicates whether RXT thresholds has been crossed */ + volatile bool txtCrossed; /*!< Indicates whether TXT thresholds has been crossed */ + volatile bool wtxRequested; /*!< Indicates whether WTX has been requested or not*/ + volatile bool parityError; /*!< Indicates whether a parity error has been detected */ + uint8_t statusBytes[2]; /*!< Used to store Status bytes SW1, SW2 of the last executed card command response */ + /* Configuration part */ + smartcard_interface_config_t interfaceConfig; /*!< Smart card interface configuration structure */ + +} smartcard_context_t; + +/*! @}*/ +#endif /* _FSL_SMARTCARD_H_*/ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smartcard_emvsim.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smartcard_emvsim.c new file mode 100644 index 00000000000..5482771783c --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smartcard_emvsim.c @@ -0,0 +1,955 @@ +/* +* Copyright (c) 2015-2016, Freescale Semiconductor, Inc. +* All rights reserved. +* +* Redistribution and use in source and binary forms, with or without modification, +* are permitted provided that the following conditions are met: +* +* o Redistributions of source code must retain the above copyright notice, this list +* of conditions and the following disclaimer. +* +* o Redistributions in binary form must reproduce the above copyright notice, this +* list of conditions and the following disclaimer in the documentation and/or +* other materials provided with the distribution. +* +* o Neither the name of Freescale Semiconductor, Inc. nor the names of its +* contributors may be used to endorse or promote products derived from this +* software without specific prior written permission. +* +* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +* DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR +* ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES +* (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; +* LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON +* ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT +* (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +*/ + +#include "fsl_smartcard_emvsim.h" + +/******************************************************************************* +* Variables +******************************************************************************/ +/*! @brief Pointers to emvsim bases for each instance. */ +static EMVSIM_Type *const s_emvsimBases[] = EMVSIM_BASE_PTRS; + +/*! @brief Pointers to emvsim IRQ number for each instance. */ +static const IRQn_Type s_emvsimIRQ[] = EMVSIM_IRQS; + +/*! @brief Pointers to emvsim clocks for each instance. */ +static const clock_ip_name_t s_emvsimClock[] = EMVSIM_CLOCKS; + +/******************************************************************************* +* Private Functions +******************************************************************************/ +static void smartcard_emvsim_CompleteSendData(EMVSIM_Type *base, smartcard_context_t *context); +static void smartcard_emvsim_StartSendData(EMVSIM_Type *base, smartcard_context_t *context); +static void smartcard_emvsim_CompleteReceiveData(EMVSIM_Type *base, smartcard_context_t *context); +static void smartcard_emvsim_StartReceiveData(EMVSIM_Type *base, smartcard_context_t *context); +static void smartcard_emvsim_SetTransferType(EMVSIM_Type *base, + smartcard_context_t *context, + smartcard_control_t control); +static uint32_t smartcard_emvsim_GetInstance(EMVSIM_Type *base); + +/******************************************************************************* +* Code +******************************************************************************/ +/*! + * @brief Get the UART instance from peripheral base address. + * + * @param base UART peripheral base address. + * @return UART instance. + */ +static uint32_t smartcard_emvsim_GetInstance(EMVSIM_Type *base) +{ + uint8_t instance = 0; + uint32_t emvsimArrayCount = (sizeof(s_emvsimBases) / sizeof(s_emvsimBases[0])); + + /* Find the instance index from base address mappings. */ + for (instance = 0; instance < emvsimArrayCount; instance++) + { + if (s_emvsimBases[instance] == base) + { + break; + } + } + + assert(instance < emvsimArrayCount); + + return instance; +} +/*! + * @brief Finish up a transmit by completing the process of sending data and disabling the interrupt. + * + * @param base The EMVSIM peripheral base address. + * @param context A pointer to a SMARTCARD driver context structure. + */ +static void smartcard_emvsim_CompleteSendData(EMVSIM_Type *base, smartcard_context_t *context) +{ + assert((NULL != context)); + + /* Reset additional GETU */ + base->TX_GETU = 0x00u; + /* Disable the transmission complete interrupt */ + base->INT_MASK |= EMVSIM_INT_MASK_TC_IM_MASK; + /* Wait for TC bit to set - last byte transmission has finished */ + while ((!(base->TX_STATUS & EMVSIM_TX_STATUS_TCF_MASK))) + { + } + /* Restore previous TX_GETU value */ + base->TX_GETU = context->cardParams.GTN; + /* disable after transmit */ + base->CTRL &= ~EMVSIM_CTRL_XMT_EN_MASK; + /* Clear receive status flag */ + base->RX_STATUS = EMVSIM_RX_STATUS_RX_DATA_MASK; + /* Enable Receiver */ + base->CTRL |= EMVSIM_CTRL_RCV_EN_MASK; + /* Update the information of the module driver context */ + context->xIsBusy = false; + context->transferState = kSMARTCARD_IdleState; + /* Clear txSize to avoid any spurious transmit from ISR */ + context->xSize = 0u; + /* Invoke user call-back */ + if (NULL != context->transferCallback) + { + context->transferCallback(context, context->transferCallbackParam); + } +} + +/*! + * @brief Finish up a receive by completing the process of receiving data and disabling the interrupt. + * + * @param base The EMVSIM peripheral base address. + * @param context A pointer to a SMARTCARD driver context structure. + */ +static void smartcard_emvsim_CompleteReceiveData(EMVSIM_Type *base, smartcard_context_t *context) +{ + assert((NULL != context)); + + /* Clear receive status flag */ + base->RX_STATUS = EMVSIM_RX_STATUS_RX_DATA_MASK; + /* Disable receive data full interrupt */ + base->INT_MASK |= EMVSIM_INT_MASK_RX_DATA_IM_MASK; + /* Update the information of the module driver context */ + context->xIsBusy = false; + /* Invoke user call-back */ + if (NULL != context->transferCallback) + { + context->transferCallback(context, context->transferCallbackParam); + } +} + +/*! + * @brief Initiate (start) a transmit by beginning the process of sending data and enabling the interrupt. + * + * @param base The EMVSIM peripheral base address. + * @param context A pointer to a SMARTCARD driver context structure. + */ +static void smartcard_emvsim_StartSendData(EMVSIM_Type *base, smartcard_context_t *context) +{ + assert((NULL != context)); + + uint32_t delay = 0u; + uint32_t control = 0u; + + /* Block guard time */ + /* 22 etus (16 Receiver Clocks == 1 etu) */ + delay = 22u * 16u; + /* Disable all functionality like protocol timers, NACK generation */ + control = base->CTRL; + base->CTRL = 0u; + /* Clear Global counter time-out flag */ + base->TX_STATUS = EMVSIM_TX_STATUS_GPCNT1_TO_MASK; + /* Disable counter interrupt */ + base->INT_MASK |= EMVSIM_INT_MASK_GPCNT1_IM_MASK; + /* Set counter value */ + base->GPCNT1_VAL = delay; + /* Select the clock for GPCNT */ + base->CLKCFG = + (base->CLKCFG & ~EMVSIM_CLKCFG_GPCNT1_CLK_SEL_MASK) | EMVSIM_CLKCFG_GPCNT1_CLK_SEL(kEMVSIM_GPCRxClock); + /* Trigger the counter */ + base->CTRL |= EMVSIM_CTRL_RCV_EN_MASK; + /* Wait until counter overflow event occur */ + while ((!(base->TX_STATUS & EMVSIM_TX_STATUS_GPCNT1_TO_MASK))) + { + } + /* Clear status flag and disable GPCNT1 clock */ + base->TX_STATUS = EMVSIM_TX_STATUS_GPCNT1_TO_MASK; + base->CLKCFG &= ~EMVSIM_CLKCFG_GPCNT1_CLK_SEL_MASK; + /* Restore Control register */ + base->CTRL = control & ~(EMVSIM_CTRL_XMT_EN_MASK | EMVSIM_CTRL_RCV_EN_MASK); + /* Update transferState */ + context->transferState = kSMARTCARD_TransmittingState; + context->xIsBusy = true; + /* Enable transmitter */ + base->CTRL |= EMVSIM_CTRL_XMT_EN_MASK; + /* Enable the transmission complete interrupt. The TC bit will + * set whenever the transmit data is shifted out */ + base->INT_MASK &= ~EMVSIM_INT_MASK_TC_IM_MASK; +} + +/*! + * @brief Initiate (start) a receive by beginning the process of receiving data and enabling the interrupt. + * + * @param base The EMVSIM peripheral base address. + * @param context A pointer to a SMARTCARD driver context structure. + */ +static void smartcard_emvsim_StartReceiveData(EMVSIM_Type *base, smartcard_context_t *context) +{ + assert((NULL != context)); + + /* Initialize the module driver context structure to indicate transfer in progress */ + context->xIsBusy = true; + /* Enable BWT Timer interrupt to occur */ + base->INT_MASK &= ~EMVSIM_INT_MASK_BWT_ERR_IM_MASK; + /* Clear receive status flag */ + base->RX_STATUS = EMVSIM_RX_STATUS_RX_DATA_MASK; + /* Disable transmitter */ + base->CTRL &= ~EMVSIM_CTRL_XMT_EN_MASK; + /* Enable receiver and switch to receive direction */ + base->CTRL |= EMVSIM_CTRL_RCV_EN_MASK; + /* Enable the receive data full interrupt */ + base->INT_MASK &= ~EMVSIM_INT_MASK_RX_DATA_IM_MASK; +} + +/*! + * @brief Sets up the EMVSIM hardware for T=0 or T=1 protocol data exchange and initialize timer values. + * + * @param base The EMVSIM peripheral base address. + * @param context A pointer to a SMARTCARD driver context structure. + */ +static void smartcard_emvsim_SetTransferType(EMVSIM_Type *base, + smartcard_context_t *context, + smartcard_control_t control) +{ + assert((NULL != context)); + assert((control == kSMARTCARD_SetupATRMode) || (control == kSMARTCARD_SetupT0Mode) || + (control == kSMARTCARD_SetupT1Mode)); + + uint16_t temp16 = 0u; + uint32_t bwiVal = 0u; + uint8_t tdt = 0u; + + if (control == kSMARTCARD_SetupATRMode) + { + /* Disable all functionality at first */ + base->CTRL &= ~(EMVSIM_CTRL_RCVR_11_MASK | EMVSIM_CTRL_XMT_CRC_LRC_MASK | EMVSIM_CTRL_LRC_EN_MASK | + EMVSIM_CTRL_ANACK_MASK | EMVSIM_CTRL_ONACK_MASK | EMVSIM_CTRL_RCV_EN_MASK); + /* Set default values as per EMV specification */ + context->cardParams.Fi = 372u; + context->cardParams.Di = 1u; + context->cardParams.currentD = 1u; + context->cardParams.WI = 0x0Au; + context->cardParams.GTN = 0x00u; + /* Set default baudrate/ETU time based on EMV parameters and card clock */ + base->DIVISOR = ((context->cardParams.Fi / context->cardParams.currentD) & 0x1FFu); + /* EMV expectation: WWT = (960 x D x WI) + (D x 480) + * EMVSIM formula: BWT_VAL[15:0] = CWT_VAL[15:0] */ + temp16 = (960u * context->cardParams.currentD * context->cardParams.WI) + + (context->cardParams.currentD * 480u) + SMARTCARD_WWT_ADJUSTMENT; + base->CWT_VAL = temp16; + base->BWT_VAL = temp16; + /* Set Extended Guard Timer value + * EMV expectation: GT = GTN not equal to 255 -> 12 + GTN = GTN equal to 255 -> 12 + * EMVSIM formula: same as above */ + base->TX_GETU = context->cardParams.GTN; + /* Setting Rx threshold so that an interrupt is generated when a NACK is + sent either due to parity error or wrong INIT char*/ + base->RX_THD = EMVSIM_RX_THD_RDT(1); + /* Setting up Tx NACK threshold */ + tdt = ((base->PARAM & EMVSIM_PARAM_TX_FIFO_DEPTH_MASK) >> EMVSIM_PARAM_TX_FIFO_DEPTH_SHIFT) - 1; + base->TX_THD = (EMVSIM_TX_THD_TNCK_THD(SMARTCARD_EMV_TX_NACK_THRESHOLD) | EMVSIM_TX_THD_TDT(tdt)); + /* Clear all pending interrupts */ + base->RX_STATUS = 0xFFFFFFFFu; + /* Enable Tx NACK threshold interrupt to occur */ + base->INT_MASK &= ~EMVSIM_INT_MASK_TNACK_IM_MASK; + /* Set transport type to T=0 in SMARTCARD context structure */ + context->tType = kSMARTCARD_T0Transport; + } + else if (control == kSMARTCARD_SetupT0Mode) + { + /* Disable receiver at first if it's not, Disable T=0 mode counters 1st, + * Setup for single wire ISO7816 mode (setup 12 etu mode). + * Set transport protocol type to T=0, Disable initial character detection.*/ + base->CTRL &= + ~(EMVSIM_CTRL_RCV_EN_MASK | EMVSIM_CTRL_CWT_EN_MASK | EMVSIM_CTRL_BWT_EN_MASK | EMVSIM_CTRL_RCVR_11_MASK | + EMVSIM_CTRL_XMT_CRC_LRC_MASK | EMVSIM_CTRL_LRC_EN_MASK | EMVSIM_CTRL_ICM_MASK); + /* EMV expectation: WWT = (960 x D x WI) + (D x 480) + * EMVSIM formula: BWT_VAL[15:0] = CWT_VAL[15:0] */ + temp16 = (960u * context->cardParams.currentD * context->cardParams.WI) + + (context->cardParams.currentD * 480u) + SMARTCARD_WWT_ADJUSTMENT; + base->CWT_VAL = temp16; + base->BWT_VAL = temp16; + /* Set Extended Guard Timer value + * EMV expectation: GT = GTN not equal to 255 -> 12 + GTN = GTN equal to 255 -> 12 + * EMVSIM formula: same as above for range [0:254] + * Fix for EMV. If TX_GETU == 0 in T0 mode, 3 stop bits are inserted. */ + context->cardParams.GTN = (context->cardParams.GTN == 0xFFu) ? 0x00u : context->cardParams.GTN; + base->TX_GETU = context->cardParams.GTN; + /* Setting Rx threshold so that an interrupt is generated when a NACK is + sent either due to parity error or wrong INIT char */ + base->RX_THD = (EMVSIM_RX_THD_RNCK_THD(SMARTCARD_EMV_RX_NACK_THRESHOLD) | EMVSIM_RX_THD_RDT(1)); + /* Setting up Tx NACK threshold */ + tdt = ((base->PARAM & EMVSIM_PARAM_TX_FIFO_DEPTH_MASK) >> EMVSIM_PARAM_TX_FIFO_DEPTH_SHIFT) - 1; + base->TX_THD = (EMVSIM_TX_THD_TNCK_THD(SMARTCARD_EMV_TX_NACK_THRESHOLD) | EMVSIM_TX_THD_TDT(tdt)); + /* Enable Tx NACK threshold interrupt to occur */ + base->INT_MASK &= ~EMVSIM_INT_MASK_TNACK_IM_MASK; + /* Enable T=0 mode counters, Enable NACK on error interrupt and NACK on overflow interrupt */ + base->CTRL |= + (EMVSIM_CTRL_CWT_EN_MASK | EMVSIM_CTRL_BWT_EN_MASK | EMVSIM_CTRL_ANACK_MASK | EMVSIM_CTRL_ONACK_MASK); + /* Set transport type to T=0 in SMARTCARD context structure */ + context->tType = kSMARTCARD_T0Transport; + } + else + { /* Disable T=1 mode counters 1st, Disable NACK on error interrupt, Disable NACK on overflow interrupt */ + base->CTRL &= ~(EMVSIM_CTRL_CWT_EN_MASK | EMVSIM_CTRL_BWT_EN_MASK | EMVSIM_CTRL_ANACK_MASK | + EMVSIM_CTRL_ONACK_MASK | EMVSIM_CTRL_XMT_CRC_LRC_MASK | EMVSIM_CTRL_LRC_EN_MASK); + /* Calculate and set Block Wait Timer (BWT) value + * EMV expectation: BWT = 11 + (2^BWI x 960 x D) + (D x 960) = 11 + (2^BWI + 1) x 960 x D + * EMVSIM formula: BWT = Same */ + bwiVal = 11 + (((1 << context->cardParams.BWI) + 1u) * 960u * context->cardParams.currentD); + base->BWT_VAL = bwiVal; + /* Calculate and set Character Wait Timer (CWT) value + * EMV expectation: CWT = ((2^CWI + 11) + 4) + * EMVSIM formula: CWT = Same */ + if (context->cardParams.currentD == 1u) + { + temp16 = (1u << context->cardParams.CWI) + 15u; + } + else + { + temp16 = (1u << context->cardParams.CWI) + 15u + SMARTCARD_CWT_ADJUSTMENT; + } + /* EMV = 15, ISO = 11, + * EMV expectation: BGT = 22 + * EMVSIM formula: BGT = Same */ + base->CWT_VAL = temp16; + context->cardParams.BGI = 22u; + base->BGT_VAL = context->cardParams.BGI; + /* Set Extended Guard Timer value + * EMV expectation: GT = GTN not equal to 255 -> 12 + GTN = GTN equal to 255 -> 11 + * EMVSIM formula: same as above */ + base->TX_GETU = context->cardParams.GTN; + /* Setup for single wire ISO7816 mode, + * Set transport protocol type to T=1, Enable T=0 mode counters */ + base->CTRL |= (EMVSIM_CTRL_RCVR_11_MASK | EMVSIM_CTRL_CWT_EN_MASK | EMVSIM_CTRL_BWT_EN_MASK); + /* Setting Rx threshold */ + base->RX_THD = (EMVSIM_RX_THD_RNCK_THD(SMARTCARD_EMV_RX_NACK_THRESHOLD) | EMVSIM_RX_THD_RDT(1)); + /* Setting up Tx threshold */ + tdt = ((base->PARAM & EMVSIM_PARAM_TX_FIFO_DEPTH_MASK) >> EMVSIM_PARAM_TX_FIFO_DEPTH_SHIFT) - 1; + base->TX_THD = (EMVSIM_TX_THD_TDT(tdt) | EMVSIM_TX_THD_TNCK_THD(SMARTCARD_EMV_TX_NACK_THRESHOLD)); + /* Set transport type to T=1 in SMARTCARD context structure */ + context->tType = kSMARTCARD_T1Transport; + } +} + +void SMARTCARD_EMVSIM_GetDefaultConfig(smartcard_card_params_t *cardParams) +{ + /* EMV default values */ + cardParams->Fi = 372u; + cardParams->Di = 1u; + cardParams->currentD = 1u; + cardParams->WI = 0x0Au; + cardParams->GTN = 0x00u; +} + +status_t SMARTCARD_EMVSIM_Init(EMVSIM_Type *base, smartcard_context_t *context, uint32_t srcClock_Hz) +{ + assert((NULL != base)); + + if ((NULL == context) || (srcClock_Hz == 0u)) + { + return kStatus_SMARTCARD_InvalidInput; + } + + uint32_t instance = smartcard_emvsim_GetInstance(base); +/* Set source clock for EMVSIM MCGPLLCLK */ +#if !(defined(FSL_FEATURE_SOC_SCG_COUNT) && FSL_FEATURE_SOC_SCG_COUNT) + CLOCK_SetEmvsimClock(1u); +#endif + /* Enable emvsim clock */ + CLOCK_EnableClock(s_emvsimClock[instance]); + context->base = base; + /* Initialize EMVSIM to a known context. */ + base->CLKCFG = 0u; + base->DIVISOR = 372u; + base->CTRL = 0x300u; + base->INT_MASK = 0x7FFFu; + base->RX_THD = 1u; + base->TX_THD = 0u; + base->PCSR = 0x1000000u; + base->TX_GETU = 0u; + base->CWT_VAL = 0xFFFFu; + base->BWT_VAL = 0xFFFFFFFFu; + base->BGT_VAL = 0u; + base->GPCNT0_VAL = 0xFFFFu; + base->GPCNT1_VAL = 0xFFFFu; + /* Initialize EMVSIM module for SMARTCARD mode of default operation */ + smartcard_emvsim_SetTransferType(base, context, kSMARTCARD_SetupATRMode); + /* For modules that do not support a FIFO, they have a data buffer that + * essentially acts likes a one-entry FIFO, thus to make the code cleaner, + * we'll equate txFifoEntryCount to 1. Also note that TDRE flag will set + * only when the tx buffer is empty. */ + context->txFifoEntryCount = 1u; +/* Enable EMVSIM interrupt on NVIC level. */ +#if defined(FSL_FEATURE_SOC_INTMUX_COUNT) && FSL_FEATURE_SOC_INTMUX_COUNT + if (s_emvsimIRQ[instance] >= FSL_FEATURE_INTMUX_IRQ_START_INDEX) + { + INTMUX0->CHANNEL[0].CHn_IER_31_0 |= 1U << (s_emvsimIRQ[instance] - FSL_FEATURE_INTERRUPT_IRQ_MAX - 1U); + NVIC_EnableIRQ(INTMUX0_0_IRQn); + } + else + { + NVIC_EnableIRQ(s_emvsimIRQ[instance]); + } +#else + NVIC_EnableIRQ(s_emvsimIRQ[instance]); +#endif + /* Finally, disable the EMVSIM receiver and transmitter */ + base->CTRL &= ~EMVSIM_CTRL_XMT_EN_MASK & ~EMVSIM_CTRL_RCV_EN_MASK; + + return kStatus_SMARTCARD_Success; +} + +void SMARTCARD_EMVSIM_Deinit(EMVSIM_Type *base) +{ + uint32_t instance = 0u; + /* In case there is still data in the TX FIFO or shift register that is + * being transmitted wait till transmit is complete. + * Wait until the data is completely shifted out of shift register */ + while ((!(base->TX_STATUS & EMVSIM_TX_STATUS_TCF_MASK))) + { + } + instance = smartcard_emvsim_GetInstance(base); + /* Disable TX and RX */ + base->CTRL &= ~EMVSIM_CTRL_XMT_EN_MASK & ~EMVSIM_CTRL_RCV_EN_MASK; + /* Gate EMVSIM module clock */ + CLOCK_DisableClock(s_emvsimClock[instance]); +/* Disable emvsim interrupt in NVIC */ +#if defined(FSL_FEATURE_SOC_INTMUX_COUNT) && FSL_FEATURE_SOC_INTMUX_COUNT + if (s_emvsimIRQ[instance] >= FSL_FEATURE_INTMUX_IRQ_START_INDEX) + { + INTMUX0->CHANNEL[0].CHn_IER_31_0 &= ~(1U << (s_emvsimIRQ[instance] - FSL_FEATURE_INTERRUPT_IRQ_MAX - 1U)); + NVIC_DisableIRQ(INTMUX0_0_IRQn); + } + else + { + NVIC_DisableIRQ(s_emvsimIRQ[instance]); + } +#else + NVIC_DisableIRQ(s_emvsimIRQ[instance]); +#endif +} + +status_t SMARTCARD_EMVSIM_TransferNonBlocking(EMVSIM_Type *base, smartcard_context_t *context, smartcard_xfer_t *xfer) +{ + if ((NULL == context) || (NULL == xfer) || (xfer->buff == NULL)) + { + return kStatus_SMARTCARD_InvalidInput; + } + + /* Check input parameters */ + if ((0u == xfer->size)) + { + return kStatus_SMARTCARD_Success; + } + /* Check if some transfer is in progress */ + if (0u != SMARTCARD_EMVSIM_GetTransferRemainingBytes(base, context)) + { + if (kSMARTCARD_Receive == context->direction) + { + return kStatus_SMARTCARD_RxBusy; + } + else + { + return kStatus_SMARTCARD_TxBusy; + } + } + /* Initialize error check flags */ + context->rxtCrossed = false; + context->txtCrossed = false; + context->parityError = false; + /* Initialize SMARTCARD context structure to start transfer */ + context->xBuff = xfer->buff; + context->xSize = xfer->size; + + if (kSMARTCARD_Receive == xfer->direction) + { + context->direction = xfer->direction; + context->transferState = kSMARTCARD_ReceivingState; + /* Start transfer */ + smartcard_emvsim_StartReceiveData(base, context); + } + else if (kSMARTCARD_Transmit == xfer->direction) + { + context->direction = xfer->direction; + context->transferState = kSMARTCARD_TransmittingState; + /* Start transfer */ + smartcard_emvsim_StartSendData(base, context); + } + else + { + return kStatus_SMARTCARD_InvalidInput; + } + + return kStatus_SMARTCARD_Success; +} + +int32_t SMARTCARD_EMVSIM_GetTransferRemainingBytes(EMVSIM_Type *base, smartcard_context_t *context) +{ + if ((NULL == context)) + { + return -1; + } + + /* Return kStatus_SMARTCARD_(Tx/Rx)Busy or kStatus_SMARTCARD_Success depending on whether + * or not the EMVSIM has a FIFO. If TX transfer and it does have a FIFO, we'll need to wait + * until the FIFO is completely drained before indicating success in addition to xIsBusy = 0. + * If there is no FIFO, then we need to only worry about xIsBusy. */ + if (context->xIsBusy) + { + return context->xSize; + } + + return 0; +} + +status_t SMARTCARD_EMVSIM_AbortTransfer(EMVSIM_Type *base, smartcard_context_t *context) +{ + if ((NULL == context)) + { + return kStatus_SMARTCARD_InvalidInput; + } + + /* Check if a transfer is running. */ + if ((!context->xIsBusy)) + { + return kStatus_SMARTCARD_NoTransferInProgress; + } + /* Call transfer complete to abort transfer */ + if (kSMARTCARD_Receive == context->direction) + { /* Stop the running transfer. */ + smartcard_emvsim_CompleteReceiveData(base, context); + } + else if (kSMARTCARD_Transmit == context->direction) + { /* Stop the running transfer. */ + smartcard_emvsim_CompleteSendData(base, context); + } + else + { + return kStatus_SMARTCARD_InvalidInput; + } + + return kStatus_SMARTCARD_Success; +} + +void SMARTCARD_EMVSIM_IRQHandler(EMVSIM_Type *base, smartcard_context_t *context) +{ + uint8_t temp8 = 0u; + + if (NULL == context) + { + return; + } + + /* Check card insertion/removal interrupt occurs, only EMVSIM DIRECT interface driver using enables this interrupt + * to occur */ + if ((!(base->PCSR & EMVSIM_PCSR_SPDIM_MASK)) && (base->PCSR & EMVSIM_PCSR_SPDIF_MASK)) + { + /* Clear card presence interrupt status */ + base->PCSR |= EMVSIM_PCSR_SPDIF_MASK; + /* Set PD signal edge behaviour */ + if (((emvsim_presence_detect_edge_t)((base->PCSR & EMVSIM_PCSR_SPDES_MASK) >> EMVSIM_PCSR_SPDES_SHIFT) == + kEMVSIM_DetectOnFallingEdge) && + ((emvsim_presence_detect_status_t)((base->PCSR & EMVSIM_PCSR_SPDP_MASK) >> EMVSIM_PCSR_SPDP_SHIFT) == + kEMVSIM_DetectPinIsLow)) + { /* Set rising edge interrupt */ + base->PCSR |= EMVSIM_PCSR_SPDES_MASK; + } + if (((emvsim_presence_detect_edge_t)((base->PCSR & EMVSIM_PCSR_SPDES_MASK) >> EMVSIM_PCSR_SPDES_SHIFT) == + kEMVSIM_DetectOnRisingEdge) && + ((emvsim_presence_detect_status_t)((base->PCSR & EMVSIM_PCSR_SPDP_MASK) >> EMVSIM_PCSR_SPDP_SHIFT) == + kEMVSIM_DetectPinIsHigh)) + { /* Set falling edge interrupt */ + base->PCSR &= ~EMVSIM_PCSR_SPDES_MASK; + } + /* Card presence(insertion)/removal detected */ + /* Invoke callback if there is one */ + if (NULL != context->interfaceCallback) + { + context->interfaceCallback(context, context->interfaceCallbackParam); + } + return; + } + /* Check if timer for initial character (TS) detection has expired */ + if (((base->INT_MASK & EMVSIM_INT_MASK_GPCNT0_IM_MASK) >> EMVSIM_INT_MASK_GPCNT0_IM_SHIFT == 0) && + (base->TX_STATUS & EMVSIM_TX_STATUS_GPCNT0_TO_MASK)) + { + /* Disable TS and ADT timers by clearing source clock to 0 */ + base->CLKCFG &= ~(EMVSIM_CLKCFG_GPCNT0_CLK_SEL_MASK | EMVSIM_CLKCFG_GPCNT1_CLK_SEL_MASK); + context->timersState.initCharTimerExpired = true; + /* Disable and clear GPCNT interrupt */ + base->INT_MASK |= EMVSIM_INT_MASK_GPCNT0_IM_MASK; + base->TX_STATUS = EMVSIM_TX_STATUS_GPCNT0_TO_MASK; + /* Down counter trigger, and clear any pending counter status flag */ + base->CTRL &= ~EMVSIM_CTRL_RCV_EN_MASK; + base->CTRL |= EMVSIM_CTRL_RCV_EN_MASK; + context->transferState = kSMARTCARD_IdleState; + /* Unblock the caller */ + smartcard_emvsim_CompleteReceiveData(base, context); + return; + } + /* Check if timer for ATR duration timer has expired */ + if ((!(base->INT_MASK & EMVSIM_INT_MASK_GPCNT1_IM_MASK)) && (base->TX_STATUS & EMVSIM_TX_STATUS_GPCNT1_TO_MASK)) + { /* Disable clock counter by clearing source clock to 0 */ + base->CLKCFG &= ~EMVSIM_CLKCFG_GPCNT1_CLK_SEL_MASK; + /* Disable and clear GPCNT interrupt */ + base->INT_MASK |= EMVSIM_INT_MASK_GPCNT1_IM_MASK; + base->TX_STATUS = EMVSIM_TX_STATUS_GPCNT1_TO_MASK; + context->timersState.adtExpired = true; + /* Unblock the caller */ + smartcard_emvsim_CompleteReceiveData(base, context); + return; + } + /* + * Check if a parity error was indicated. + * A parity error will cause transmission of NACK if ANACK bit is set in + * CTRL register and PEF bit will not be asserted. When ANACK is not set, + * PEF will be asserted. + */ + if (base->RX_STATUS & EMVSIM_RX_STATUS_PEF_MASK) + { + context->parityError = true; + /* Clear parity error indication */ + base->RX_STATUS = EMVSIM_RX_STATUS_PEF_MASK; + } + /* Check if transmit NACK generation threshold was reached */ + if ((base->TX_STATUS & EMVSIM_TX_STATUS_TNTE_MASK)) + { + context->txtCrossed = true; + } + /* Check if receive NACK generation threshold was reached */ + if (base->RX_STATUS & EMVSIM_RX_STATUS_RTE_MASK) + { + context->rxtCrossed = true; + /* Clear receiver NACK threshold interrupt status */ + base->RX_STATUS = EMVSIM_RX_STATUS_RTE_MASK; + if (context->xIsBusy) + { /* Unblock the caller */ + smartcard_emvsim_CompleteReceiveData(base, context); + } + } + /* Check if a Character Wait Timer expired */ + if ((!(base->INT_MASK & EMVSIM_INT_MASK_CWT_ERR_IM_MASK)) && (base->RX_STATUS & EMVSIM_RX_STATUS_CWT_ERR_MASK)) + { /* Disable Character Wait Timer interrupt */ + base->INT_MASK |= EMVSIM_INT_MASK_CWT_ERR_IM_MASK; + /* Reset the counter */ + base->CTRL &= ~EMVSIM_CTRL_CWT_EN_MASK; + /* Clear interrupt status */ + base->RX_STATUS = EMVSIM_RX_STATUS_CWT_ERR_MASK; + /* Enable CWT timer */ + base->CTRL |= EMVSIM_CTRL_CWT_EN_MASK; + context->transferState = kSMARTCARD_IdleState; + + if (kSMARTCARD_T0Transport == context->tType) + { /* Indicate WWT expired */ + context->timersState.wwtExpired = true; + } + else + { /* Indicate CWT expired */ + context->timersState.cwtExpired = true; + } + if (context->xIsBusy) + { /* Terminate and unblock any caller */ + smartcard_emvsim_CompleteReceiveData(base, context); + } + } + /* Check if a Block Wait Timer expired */ + if ((!(base->INT_MASK & EMVSIM_INT_MASK_BWT_ERR_IM_MASK)) && (base->RX_STATUS & EMVSIM_RX_STATUS_BWT_ERR_MASK)) + { /* Disable Block Wait Timer interrupt */ + base->INT_MASK |= EMVSIM_INT_MASK_BWT_ERR_IM_MASK; + /* Clear interrupt status flag */ + base->CTRL &= ~EMVSIM_CTRL_BWT_EN_MASK; + /* Clear error */ + base->RX_STATUS = EMVSIM_RX_STATUS_BWT_ERR_MASK; + /* Enable BWT timer */ + base->CTRL |= EMVSIM_CTRL_BWT_EN_MASK; + + if (kSMARTCARD_T0Transport == context->tType) + { /* Indicate WWT expired */ + context->timersState.wwtExpired = true; + } + else + { /* Indicate BWT expired */ + context->timersState.bwtExpired = true; + } + /* Check if Wait Time Extension(WTX) was requested */ + if (context->wtxRequested) + { /* Reset WTX to default */ + SMARTCARD_EMVSIM_Control(base, context, kSMARTCARD_ResetWaitTimeMultiplier, 1); + } + if (context->xIsBusy) + { /* Terminate and unblock any caller */ + smartcard_emvsim_CompleteReceiveData(base, context); + } + } + /* Handle receive data register full interrupt, if rx data register full + * interrupt is enabled AND there is data available. */ + if ((!(base->INT_MASK & EMVSIM_INT_MASK_RX_DATA_IM_MASK)) && (base->RX_STATUS & EMVSIM_RX_STATUS_RX_DATA_MASK)) + { + if (kSMARTCARD_WaitingForTSState == context->transferState) + { + temp8 = (uint8_t)(base->RX_BUF); + + if (base->CTRL & EMVSIM_CTRL_ICM_MASK) + { /* ICM mode still enabled, this is due to parity error */ + context->transferState = kSMARTCARD_InvalidTSDetecetedState; + } + else + { /* Received valid TS */ + context->transferState = kSMARTCARD_ReceivingState; + /* Get Data Convention form by reading IC bit of EMVSIM_CTRL register */ + context->cardParams.convention = + (smartcard_card_convention_t)((base->CTRL & EMVSIM_CTRL_IC_MASK) >> EMVSIM_CTRL_IC_SHIFT); + } + if (kSMARTCARD_InvalidTSDetecetedState == context->transferState) + { /* Stop initial character (TS) detection timer, ADT timer and it's interrupt to occur */ + base->CLKCFG &= ~(EMVSIM_CLKCFG_GPCNT0_CLK_SEL_MASK | EMVSIM_CLKCFG_GPCNT1_CLK_SEL_MASK); + base->INT_MASK |= EMVSIM_INT_MASK_GPCNT0_IM_MASK; + smartcard_emvsim_CompleteReceiveData(base, context); + } + if (kSMARTCARD_ReceivingState == context->transferState) + { /* Stop initial character (TS) detection timer and disable ATR duration timer to reset it */ + base->CLKCFG &= ~(EMVSIM_CLKCFG_GPCNT0_CLK_SEL_MASK | EMVSIM_CLKCFG_GPCNT1_CLK_SEL_MASK); + /* Start ATR duration counter (restart GPCNT) */ + base->CLKCFG |= EMVSIM_CLKCFG_GPCNT1_CLK_SEL(kEMVSIM_GPCTxClock); + /* Start ATR duration counter, Disable counter 0 interrupt and Enable counter 1 interrupt */ + base->INT_MASK = (base->INT_MASK & ~EMVSIM_INT_MASK_GPCNT1_IM_MASK) | EMVSIM_INT_MASK_GPCNT0_IM_MASK; + /* Complete receive transfer */ + smartcard_emvsim_CompleteReceiveData(base, context); + } + /* Return anyway */ + return; + } + /* Get data and put into receive buffer */ + *context->xBuff = (uint8_t)(base->RX_BUF); + /* Clear received data interrupt status */ + base->RX_STATUS = EMVSIM_RX_STATUS_RX_DATA_MASK; + + ++context->xBuff; + --context->xSize; + + if ((context->tType == kSMARTCARD_T1Transport) && (context->xSize > 0u) && + (!(base->INT_MASK & EMVSIM_INT_MASK_BWT_ERR_IM_MASK))) + { + /* And, enable CWT interrupt */ + context->timersState.cwtExpired = false; + /* Clear interrupt status */ + base->RX_STATUS = EMVSIM_RX_STATUS_CWT_ERR_MASK; + base->CTRL |= EMVSIM_CTRL_CWT_EN_MASK; + /* Only the 1st byte has been received, now time to disable BWT interrupt */ + base->INT_MASK = (base->INT_MASK & ~EMVSIM_INT_MASK_CWT_ERR_IM_MASK) | EMVSIM_INT_MASK_BWT_ERR_IM_MASK; + } + /* Check and see if this was the last byte received */ + if (0u == context->xSize) + { + smartcard_emvsim_CompleteReceiveData(base, context); + } + } + /* Handle transmit data register empty interrupt and + * last data was shifted out of IO line */ + if ((!(base->INT_MASK & EMVSIM_INT_MASK_TC_IM_MASK)) && + (base->TX_STATUS & (EMVSIM_TX_STATUS_TFE_MASK | EMVSIM_TX_STATUS_TCF_MASK))) + { + if (context->txtCrossed) + { /* Disable and Clear TNTE interrupt */ + base->INT_MASK |= EMVSIM_INT_MASK_TNACK_IM_MASK; + base->TX_STATUS = EMVSIM_TX_STATUS_TNTE_MASK; + /* Unblock the caller */ + smartcard_emvsim_CompleteSendData(base, context); + return; + } + /* Check to see if there are any more bytes to send */ + if (context->xSize > 0u) + { + temp8 = context->txFifoEntryCount; + + while (temp8--) + { + /* Transmit data and update TX size/buff */ + base->TX_BUF = *(context->xBuff); + /* Clear TCF interrupt */ + base->TX_STATUS = EMVSIM_TX_STATUS_TCF_MASK; + /* Move buffer pointer and transfer data size */ + ++context->xBuff; + --context->xSize; + + if (!context->xSize) + { + smartcard_emvsim_CompleteSendData(base, context); + break; + } + } + } + } +} + +status_t SMARTCARD_EMVSIM_Control(EMVSIM_Type *base, + smartcard_context_t *context, + smartcard_control_t control, + uint32_t param) +{ + if ((NULL == context)) + { + return kStatus_SMARTCARD_InvalidInput; + } + + uint32_t temp32 = 0u; + + switch (control) + { + case kSMARTCARD_EnableADT: + /* Do nothing, ADT counter has been loaded and started after reset + * and during starting TS delay counter only. This is because, once + * TS counter has been triggered with RCV_EN down-up, we should not + * trigger again after TS is received(to avoid missing next character to + * TS. Rather, after TS is received, the ATR duration counter should just + * be restarted w/o re-triggering the counter. */ + break; + case kSMARTCARD_DisableADT: + base->CTRL &= ~EMVSIM_CTRL_RCV_EN_MASK; + /* Stop ADT specific counter and it's interrupt to occur */ + base->CLKCFG &= ~EMVSIM_CLKCFG_GPCNT1_CLK_SEL_MASK; + base->TX_STATUS = EMVSIM_TX_STATUS_GPCNT1_TO_MASK; + base->INT_MASK |= EMVSIM_INT_MASK_GPCNT1_IM_MASK; + break; + case kSMARTCARD_EnableGTV: + /* Enable GTV specific interrupt */ + base->INT_MASK &= ~EMVSIM_INT_MASK_BGT_ERR_IM_MASK; + break; + case kSMARTCARD_DisableGTV: + /* Disable GTV specific interrupt */ + base->INT_MASK |= EMVSIM_INT_MASK_BGT_ERR_IM_MASK; + break; + case kSMARTCARD_ResetWWT: + /* Reset WWT Timer */ + base->CTRL &= ~(EMVSIM_CTRL_CWT_EN_MASK | EMVSIM_CTRL_BWT_EN_MASK); + base->CTRL |= (EMVSIM_CTRL_CWT_EN_MASK | EMVSIM_CTRL_BWT_EN_MASK); + break; + case kSMARTCARD_EnableWWT: + /* BGT must be masked */ + base->INT_MASK |= EMVSIM_INT_MASK_BGT_ERR_IM_MASK; + /* Enable WWT Timer interrupt to occur */ + base->INT_MASK &= (~EMVSIM_INT_MASK_CWT_ERR_IM_MASK & ~EMVSIM_INT_MASK_BWT_ERR_IM_MASK); + break; + case kSMARTCARD_DisableWWT: + /* Disable WWT Timer interrupt to occur */ + base->INT_MASK |= (EMVSIM_INT_MASK_CWT_ERR_IM_MASK | EMVSIM_INT_MASK_BWT_ERR_IM_MASK); + break; + case kSMARTCARD_ResetCWT: + /* Reset CWT Timer */ + base->CTRL &= ~EMVSIM_CTRL_CWT_EN_MASK; + base->CTRL |= EMVSIM_CTRL_CWT_EN_MASK; + break; + case kSMARTCARD_EnableCWT: + base->CTRL |= EMVSIM_CTRL_CWT_EN_MASK; + /* Enable CWT Timer interrupt to occur */ + base->INT_MASK &= ~EMVSIM_INT_MASK_CWT_ERR_IM_MASK; + break; + case kSMARTCARD_DisableCWT: + /* CWT counter is for receive mode only */ + base->CTRL &= ~EMVSIM_CTRL_CWT_EN_MASK; + /* Disable CWT Timer interrupt to occur */ + base->INT_MASK |= EMVSIM_INT_MASK_CWT_ERR_IM_MASK; + break; + case kSMARTCARD_ResetBWT: + /* Reset BWT Timer */ + base->CTRL &= ~EMVSIM_CTRL_BWT_EN_MASK; + base->CTRL |= EMVSIM_CTRL_BWT_EN_MASK; + break; + case kSMARTCARD_EnableBWT: + base->CTRL |= EMVSIM_CTRL_BWT_EN_MASK; + /* Enable BWT Timer interrupt to occur */ + base->INT_MASK &= ~EMVSIM_INT_MASK_BWT_ERR_IM_MASK; + break; + case kSMARTCARD_DisableBWT: + /* Disable BWT Timer interrupt to occur */ + base->INT_MASK |= EMVSIM_INT_MASK_BWT_ERR_IM_MASK; + break; + case kSMARTCARD_EnableInitDetect: + /* Clear all ISO7816 interrupt flags */ + base->RX_STATUS = 0xFFFFFFFFu; + /* Enable initial character detection : hardware method */ + context->transferState = kSMARTCARD_WaitingForTSState; + /* Enable initial character detection */ + base->CTRL |= EMVSIM_CTRL_ICM_MASK; + base->CTRL |= EMVSIM_CTRL_RCV_EN_MASK; + break; + case kSMARTCARD_EnableAnack: + /* Enable NACK-on-error interrupt to occur */ + base->CTRL |= EMVSIM_CTRL_ANACK_MASK; + break; + case kSMARTCARD_DisableAnack: + /* Disable NACK-on-error interrupt to occur */ + base->CTRL &= ~EMVSIM_CTRL_ANACK_MASK; + break; + case kSMARTCARD_ConfigureBaudrate: + /* Set default baudrate/ETU time based on EMV parameters and card clock */ + base->DIVISOR = ((context->cardParams.Fi / context->cardParams.currentD) & 0x1FFu); + break; + case kSMARTCARD_SetupATRMode: + /* Set in default ATR mode */ + smartcard_emvsim_SetTransferType(base, context, kSMARTCARD_SetupATRMode); + break; + case kSMARTCARD_SetupT0Mode: + /* Set transport protocol type to T=0 */ + smartcard_emvsim_SetTransferType(base, context, kSMARTCARD_SetupT0Mode); + break; + case kSMARTCARD_SetupT1Mode: + /* Set transport protocol type to T=1 */ + smartcard_emvsim_SetTransferType(base, context, kSMARTCARD_SetupT1Mode); + break; + case kSMARTCARD_EnableReceiverMode: + /* Enable receiver mode and switch to receive direction */ + base->CTRL |= EMVSIM_CTRL_RCV_EN_MASK; + /* Enable RX_DATA interrupt */ + base->INT_MASK &= ~EMVSIM_INT_MASK_RX_DATA_IM_MASK; + break; + case kSMARTCARD_DisableReceiverMode: + /* Disable receiver */ + base->CTRL &= ~EMVSIM_CTRL_RCV_EN_MASK; + break; + case kSMARTCARD_EnableTransmitterMode: + /* Enable transmitter mode and switch to transmit direction */ + base->CTRL |= EMVSIM_CTRL_XMT_EN_MASK; + break; + case kSMARTCARD_DisableTransmitterMode: + /* Disable transmitter */ + base->CTRL &= ~EMVSIM_CTRL_XMT_EN_MASK; + break; + case kSMARTCARD_ResetWaitTimeMultiplier: + base->CTRL &= ~EMVSIM_CTRL_BWT_EN_MASK; + /* Reset Wait Timer Multiplier + * EMV Formula : WTX x (11 + ((2^BWI + 1) x 960 x D)) */ + temp32 = ((uint8_t)param) * + (11u + (((1 << context->cardParams.BWI) + 1u) * 960u * context->cardParams.currentD)); + base->BWT_VAL = temp32; + /* Set flag to SMARTCARD context accordingly */ + if (param > 1u) + { + context->wtxRequested = true; + } + else + { + context->wtxRequested = false; + } + base->CTRL |= EMVSIM_CTRL_BWT_EN_MASK; + break; + default: + return kStatus_SMARTCARD_InvalidInput; + } + return kStatus_SMARTCARD_Success; +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smartcard_emvsim.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smartcard_emvsim.h new file mode 100644 index 00000000000..92878e37d73 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smartcard_emvsim.h @@ -0,0 +1,205 @@ +/* + * Copyright (c) 2015-2016, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _FSL_SMARTCARD_EMVSIM_H_ +#define _FSL_SMARTCARD_EMVSIM_H_ + +#include "fsl_smartcard.h" + +/*! + * @addtogroup smartcard_emvsim_driver + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @brief EMV RX NACK interrupt generation threshold */ +#define SMARTCARD_EMV_RX_NACK_THRESHOLD (5u) + +/*! @brief EMV TX NACK interrupt generation threshold */ +#define SMARTCARD_EMV_TX_NACK_THRESHOLD (5u) + +/*! @brief Smart card Word Wait Timer adjustment value */ +#define SMARTCARD_WWT_ADJUSTMENT (160u) + +/*! @brief Smart card Character Wait Timer adjustment value */ +#define SMARTCARD_CWT_ADJUSTMENT (3u) + +/*! @brief General Purpose Counter clock selections */ +typedef enum _emvsim_gpc_clock_select +{ + kEMVSIM_GPCClockDisable = 0u, /*!< disabled */ + kEMVSIM_GPCCardClock = 1u, /*!< card clock */ + kEMVSIM_GPCRxClock = 2u, /*!< receive clock */ + kEMVSIM_GPCTxClock = 3u, /*!< transmit ETU clock */ +} emvsim_gpc_clock_select_t; + +/*! @brief EMVSIM card presence detection edge control */ +typedef enum _presence_detect_edge +{ + kEMVSIM_DetectOnFallingEdge = 0u, /*!< presence detect on falling edge */ + kEMVSIM_DetectOnRisingEdge = 1u, /*!< presence detect on rising edge */ +} emvsim_presence_detect_edge_t; + +/*! @brief EMVSIM card presence detection status */ +typedef enum _presence_detect_status +{ + kEMVSIM_DetectPinIsLow = 0u, /*!< presence detect pin is logic low */ + kEMVSIM_DetectPinIsHigh = 1u, /*!< presence detect pin is logic high */ +} emvsim_presence_detect_status_t; + +/******************************************************************************* + * API + ******************************************************************************/ +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @name Smart card EMVSIM Driver + * @{ + */ + +/*! + * @brief Fill in smartcard_card_params structure with default values according EMV 4.3 specification. + * + * @param cardParams The configuration structure of type smartcard_interface_config_t. + * Function fill in members: + * Fi = 372; + * Di = 1; + * currentD = 1; + * WI = 0x0A; + * GTN = 0x00; + * with default values. + */ +void SMARTCARD_EMVSIM_GetDefaultConfig(smartcard_card_params_t *cardParams); + +/*! + * @brief Initializes an EMVSIM peripheral for smart card/ISO-7816 operation. + * + * This function Un-gate EMVSIM clock, initializes the module to EMV default settings, + * configures the IRQ, enables the module-level interrupt to the core and initialize driver context. + * + * @param base The EMVSIM peripheral base address. + * @param context A pointer to a smart card driver context structure. + * @param srcClock_Hz Smart card clock generation module source clock. + * + * @return An error code or kStatus_SMARTCARD_Success. + */ +status_t SMARTCARD_EMVSIM_Init(EMVSIM_Type *base, smartcard_context_t *context, uint32_t srcClock_Hz); + +/*! + * @brief This function disables the EMVSIM interrupts, disables the transmitter and receiver, + * flushes the FIFOs and gates EMVSIM clock in SIM. + * + * @param base The EMVSIM module base address. + */ +void SMARTCARD_EMVSIM_Deinit(EMVSIM_Type *base); + +/*! + * @brief Returns whether the previous EMVSIM transfer has finished. + * + * When performing an async transfer, call this function to ascertain the context of the + * current transfer: in progress (or busy) or complete (success). If the + * transfer is still in progress, the user can obtain the number of words that have not been + * transferred. + * + * @param base The EMVSIM module base address. + * @param context A pointer to a smart card driver context structure. + * + * @return The number of bytes not transferred. + */ +int32_t SMARTCARD_EMVSIM_GetTransferRemainingBytes(EMVSIM_Type *base, smartcard_context_t *context); + +/*! + * @brief Terminates an asynchronous EMVSIM transfer early. + * + * During an async EMVSIM transfer, the user can terminate the transfer early + * if the transfer is still in progress. + * + * @param base The EMVSIM peripheral address. + * @param context A pointer to a smart card driver context structure. + * @retval kStatus_SMARTCARD_Success The transmit abort was successful. + * @retval kStatus_SMARTCARD_NoTransmitInProgress No transmission is currently in progress. + */ +status_t SMARTCARD_EMVSIM_AbortTransfer(EMVSIM_Type *base, smartcard_context_t *context); + +/*! + * @brief Transfer data using interrupts. + * + * A non-blocking (also known as asynchronous) function means that the function returns + * immediately after initiating the transfer function. The application has to get the + * transfer status to see when the transfer is complete. In other words, after calling non-blocking + * (asynchronous) transfer function, the application must get the transfer status to check if transmit + * is completed or not. + * + * @param base The EMVSIM peripheral base address. + * @param context A pointer to a smart card driver context structure. + * @param xfer A pointer to smart card transfer structure where are linked buffers and sizes. + * + * @return An error code or kStatus_SMARTCARD_Success. + */ +status_t SMARTCARD_EMVSIM_TransferNonBlocking(EMVSIM_Type *base, smartcard_context_t *context, smartcard_xfer_t *xfer); + +/*! + * @brief Controls EMVSIM module as per different user request. + * + * @param base The EMVSIM peripheral base address. + * @param context A pointer to a smart card driver context structure. + * @param control Control type + * @param param Integer value of specific to control command. + * + * return kStatus_SMARTCARD_Success in success. + * return kStatus_SMARTCARD_OtherError in case of error. + */ +status_t SMARTCARD_EMVSIM_Control(EMVSIM_Type *base, + smartcard_context_t *context, + smartcard_control_t control, + uint32_t param); + +/*! + * @brief Handles EMVSIM module interrupts. + * + * @param base The EMVSIM peripheral base address. + * @param context A pointer to a smart card driver context structure. + */ +void SMARTCARD_EMVSIM_IRQHandler(EMVSIM_Type *base, smartcard_context_t *context); +/*@}*/ + +#if defined(__cplusplus) +} +#endif + +/*! @}*/ + +#endif /* _FSL_SMARTCARD_EMVSIM_H_*/ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smartcard_phy_emvsim.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smartcard_phy_emvsim.c new file mode 100644 index 00000000000..55ac6483ee5 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smartcard_phy_emvsim.c @@ -0,0 +1,234 @@ +/* + * Copyright (c) 2015-2016, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_smartcard_emvsim.h" +#include "fsl_smartcard_phy_emvsim.h" + +/******************************************************************************* + * Variables + ******************************************************************************/ + +/******************************************************************************* + * Private Functions + ******************************************************************************/ +static uint32_t smartcard_phy_emvsim_InterfaceClockInit(EMVSIM_Type *base, + const smartcard_interface_config_t *config, + uint32_t srcClock_Hz); + +/******************************************************************************* + * Code + ******************************************************************************/ + +/*! + * @brief This function initializes clock module used for card clock generation + */ +static uint32_t smartcard_phy_emvsim_InterfaceClockInit(EMVSIM_Type *base, + const smartcard_interface_config_t *config, + uint32_t srcClock_Hz) +{ + assert((NULL != config) && (0u != srcClock_Hz)); + + uint32_t emvsimClkMhz = 0u; + uint8_t emvsimPRSCValue; + + /* Retrieve EMV SIM clock */ + emvsimClkMhz = srcClock_Hz / 1000000u; + /* Calculate MOD value */ + emvsimPRSCValue = (emvsimClkMhz * 1000u) / (config->smartCardClock / 1000u); + /* Set clock prescaler */ + base->CLKCFG = (base->CLKCFG & ~EMVSIM_CLKCFG_CLK_PRSC_MASK) | EMVSIM_CLKCFG_CLK_PRSC(emvsimPRSCValue); + + return config->smartCardClock; +} + +void SMARTCARD_PHY_EMVSIM_GetDefaultConfig(smartcard_interface_config_t *config) +{ + assert((NULL != config)); + + config->clockToResetDelay = SMARTCARD_INIT_DELAY_CLOCK_CYCLES; + config->vcc = kSMARTCARD_VoltageClassB3_3V; +} + +status_t SMARTCARD_PHY_EMVSIM_Init(EMVSIM_Type *base, smartcard_interface_config_t const *config, uint32_t srcClock_Hz) +{ + if ((NULL == config) || (0u == srcClock_Hz)) + { + return kStatus_SMARTCARD_InvalidInput; + } + + /* SMARTCARD clock initialization. Clock is still not active after this call */ + if (config->smartCardClock != smartcard_phy_emvsim_InterfaceClockInit(base, config, srcClock_Hz)) + { + return kStatus_SMARTCARD_OtherError; + } + /* Configure EMVSIM direct interface driver interrupt occur according card presence */ + if (base->PCSR & EMVSIM_PCSR_SPDP_MASK) + { + base->PCSR &= ~EMVSIM_PCSR_SPDES_MASK; + } + else + { + base->PCSR |= EMVSIM_PCSR_SPDES_MASK; + } + /* Un-mask presence detect interrupt flag */ + base->PCSR &= ~EMVSIM_PCSR_SPDIM_MASK; + + return kStatus_SMARTCARD_Success; +} + +void SMARTCARD_PHY_EMVSIM_Deinit(EMVSIM_Type *base, const smartcard_interface_config_t *config) +{ + assert((NULL != config)); + /* Deactivate VCC, CLOCK */ + base->PCSR &= ~(EMVSIM_PCSR_SCEN_MASK | EMVSIM_PCSR_SVCC_EN_MASK); +} + +status_t SMARTCARD_PHY_EMVSIM_Activate(EMVSIM_Type *base, + smartcard_context_t *context, + smartcard_reset_type_t resetType) +{ + if ((NULL == context) || (NULL == context->timeDelay)) + { + return kStatus_SMARTCARD_InvalidInput; + } + assert(context->interfaceConfig.vcc == kSMARTCARD_VoltageClassB3_3V); + + context->timersState.initCharTimerExpired = false; + context->resetType = resetType; + + /* Disable receiver to deactivate GPC timers trigger */ + base->CTRL &= ~EMVSIM_CTRL_RCV_EN_MASK; + if (resetType == kSMARTCARD_ColdReset) + { /* Set polarity of VCC to active high, Enable VCC for SMARTCARD, Enable smart card clock */ + base->PCSR = (base->PCSR & ~EMVSIM_PCSR_VCCENP_MASK) | (EMVSIM_PCSR_SVCC_EN_MASK | EMVSIM_PCSR_SCEN_MASK); + /* Set transfer inversion to default(direct) value */ + base->CTRL &= ~EMVSIM_CTRL_IC_MASK; + } + else if (resetType == kSMARTCARD_WarmReset) + { /* Ensure that card is already active */ + if (!context->cardParams.active) + { /* Card is not active;hence return */ + return kStatus_SMARTCARD_CardNotActivated; + } + } + else + { + return kStatus_SMARTCARD_InvalidInput; + } + /* Set Reset low */ + base->PCSR &= ~EMVSIM_PCSR_SRST_MASK; + /* Calculate time delay needed for reset */ + uint32_t temp = (uint32_t)((float)(1 + (float)(((float)(1000u * context->interfaceConfig.clockToResetDelay)) / + ((float)context->interfaceConfig.smartCardClock)))); + context->timeDelay(temp); + /* Pull reset HIGH Now to mark the end of Activation sequence */ + base->PCSR |= EMVSIM_PCSR_SRST_MASK; + /* Disable GPC timers input clock */ + base->CLKCFG &= ~(EMVSIM_CLKCFG_GPCNT0_CLK_SEL_MASK | EMVSIM_CLKCFG_GPCNT1_CLK_SEL_MASK); + /* Down counter trigger, and clear any pending counter status flag */ + base->TX_STATUS = EMVSIM_TX_STATUS_GPCNT1_TO_MASK | EMVSIM_TX_STATUS_GPCNT0_TO_MASK; + /* Set counter value for TS detection delay */ + base->GPCNT0_VAL = (SMARTCARD_INIT_DELAY_CLOCK_CYCLES + SMARTCARD_INIT_DELAY_CLOCK_CYCLES_ADJUSTMENT); + /* Pre-load counter value for ATR duration delay */ + base->GPCNT1_VAL = (SMARTCARD_EMV_ATR_DURATION_ETU + SMARTCARD_ATR_DURATION_ADJUSTMENT); + /* Select the clock for GPCNT for both TS detection and early start of ATR duration counter */ + base->CLKCFG |= + (EMVSIM_CLKCFG_GPCNT0_CLK_SEL(kEMVSIM_GPCCardClock) | EMVSIM_CLKCFG_GPCNT1_CLK_SEL(kEMVSIM_GPCTxClock)); + /* Set receiver to ICM mode, Flush RX FIFO */ + base->CTRL |= (EMVSIM_CTRL_ICM_MASK | EMVSIM_CTRL_FLSH_RX_MASK); + /* Enable counter interrupt for TS detection */ + base->INT_MASK &= ~EMVSIM_INT_MASK_GPCNT0_IM_MASK; + /* Clear any pending status flags */ + base->RX_STATUS = 0xFFFFFFFFu; + /* Enable receiver */ + base->CTRL |= EMVSIM_CTRL_RCV_EN_MASK; + /* Here the card was activated */ + context->cardParams.active = true; + + return kStatus_SMARTCARD_Success; +} + +status_t SMARTCARD_PHY_EMVSIM_Deactivate(EMVSIM_Type *base, smartcard_context_t *context) +{ + if ((NULL == context)) + { + return kStatus_SMARTCARD_InvalidInput; + } + + /* Assert Reset */ + base->PCSR &= ~EMVSIM_PCSR_SRST_MASK; + /* Stop SMARTCARD clock generation */ + base->PCSR &= ~EMVSIM_PCSR_SCEN_MASK; + /* Deactivate card by disabling VCC */ + base->PCSR &= ~EMVSIM_PCSR_SVCC_EN_MASK; + /* According EMV 4.3 specification deactivation sequence should be done within 100ms. + * The period is measured from the time that RST is set to state L to the time that Vcc + * reaches 0.4 V or less. + */ + context->timeDelay(100); + /* Here the card was deactivated */ + context->cardParams.active = false; + + return kStatus_SMARTCARD_Success; +} + +status_t SMARTCARD_PHY_EMVSIM_Control(EMVSIM_Type *base, + smartcard_context_t *context, + smartcard_interface_control_t control, + uint32_t param) +{ + if ((NULL == context)) + { + return kStatus_SMARTCARD_InvalidInput; + } + + switch (control) + { + case kSMARTCARD_InterfaceSetVcc: + /* Only 3.3V interface supported by the direct interface */ + assert((smartcard_card_voltage_class_t)param == kSMARTCARD_VoltageClassB3_3V); + context->interfaceConfig.vcc = (smartcard_card_voltage_class_t)param; + break; + case kSMARTCARD_InterfaceSetClockToResetDelay: + /* Set interface clock to Reset delay set by caller */ + context->interfaceConfig.clockToResetDelay = param; + break; + case kSMARTCARD_InterfaceReadStatus: + /* Expecting active low present detect */ + context->cardParams.present = + (emvsim_presence_detect_status_t)((base->PCSR & EMVSIM_PCSR_SPDP_MASK) >> EMVSIM_PCSR_SPDP_SHIFT) == + kEMVSIM_DetectPinIsLow; + break; + default: + return kStatus_SMARTCARD_InvalidInput; + } + + return kStatus_SMARTCARD_Success; +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smartcard_phy_emvsim.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smartcard_phy_emvsim.h new file mode 100644 index 00000000000..e69bb4bae66 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smartcard_phy_emvsim.h @@ -0,0 +1,140 @@ +/* + * Copyright (c) 2015-2016, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _FSL_SMARTCARD_PHY_EMVSIM_H_ +#define _FSL_SMARTCARD_PHY_EMVSIM_H_ + +#include "fsl_smartcard.h" + +/*! + * @addtogroup smartcard_phy_emvsim_driver + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @brief Smart card define which specify adjustment number of clock cycles during which ATR string has to be received + */ +#define SMARTCARD_ATR_DURATION_ADJUSTMENT (360u) + +/*! @brief Smart card define which specify adjustment number of clock cycles until initial 'TS' character has to be + * received */ +#define SMARTCARD_INIT_DELAY_CLOCK_CYCLES_ADJUSTMENT (4200u) + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @brief Fill in smartcardInterfaceConfig structure with default values. + * + * @param config The user configuration structure of type smartcard_interface_config_t. + * Function fill in members: + * clockToResetDelay = 42000, + * vcc = kSmartcardVoltageClassB3_3V, + * with default values. + */ +void SMARTCARD_PHY_EMVSIM_GetDefaultConfig(smartcard_interface_config_t *config); + +/*! + * @brief Configures a Smart card interface for operation. + * + * @param base The Smart card peripheral module base address. + * @param config The user configuration structure of type smartcard_interface_config_t. The user + * is responsible to fill out the members of this structure and to pass the pointer of this structure + * into this function or call SMARTCARD_PHY_EMVSIMInitUserConfigDefault to fill out structure with default values. + * @param srcClock_Hz Smart card clock generation module source clock. + * + * @retval kStatus_SMARTCARD_Success or kStatus_SMARTCARD_OtherError in case of error. + */ +status_t SMARTCARD_PHY_EMVSIM_Init(EMVSIM_Type *base, const smartcard_interface_config_t *config, uint32_t srcClock_Hz); + +/*! + * @brief De-initializes a Smart card interface. Stops Smart card clock and disable VCC. + * + * @param base Smart card peripheral module base address. + * @param config Smart card configuration structure. + */ +void SMARTCARD_PHY_EMVSIM_Deinit(EMVSIM_Type *base, const smartcard_interface_config_t *config); + +/*! + * @brief Activates the smart card IC. + * + * @param base The EMVSIM peripheral base address. + * @param context A pointer to a Smart card driver context structure. + * @param resetType type of reset to be performed, possible values + * = kSmartcardColdReset, kSmartcardWarmReset + * + * @retval kStatus_SMARTCARD_Success or kStatus_SMARTCARD_OtherError in case of error. + */ +status_t SMARTCARD_PHY_EMVSIM_Activate(EMVSIM_Type *base, + smartcard_context_t *context, + smartcard_reset_type_t resetType); + +/*! + * @brief De-activates the smart card IC. + * + * @param base The EMVSIM peripheral base address. + * @param context A pointer to a Smart card driver context structure. + * + * @retval kStatus_SMARTCARD_Success or kStatus_SMARTCARD_OtherError in case of error. + */ +status_t SMARTCARD_PHY_EMVSIM_Deactivate(EMVSIM_Type *base, smartcard_context_t *context); + +/*! + * @brief Controls Smart card interface IC. + * + * @param base The EMVSIM peripheral base address. + * @param context A pointer to a Smart card driver context structure. + * @param control A interface command type. + * @param param Integer value specific to control type + * + * @retval kStatus_SMARTCARD_Success or kStatus_SMARTCARD_OtherError in case of error. + */ +status_t SMARTCARD_PHY_EMVSIM_Control(EMVSIM_Type *base, + smartcard_context_t *context, + smartcard_interface_control_t control, + uint32_t param); +/*@}*/ + +#if defined(__cplusplus) +} +#endif + +/*! @}*/ + +#endif /* _FSL_SMARTCARD_PHY_EMVSIM_H_*/ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smartcard_phy_tda8035.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smartcard_phy_tda8035.c new file mode 100644 index 00000000000..e191f207cab --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smartcard_phy_tda8035.c @@ -0,0 +1,543 @@ +/* + * Copyright (c) 2015-2016, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_smartcard_phy_tda8035.h" +#if (defined(FSL_FEATURE_SOC_EMVSIM_COUNT) && (FSL_FEATURE_SOC_EMVSIM_COUNT)) +#include "fsl_smartcard_emvsim.h" +#endif + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/******************************************************************************* +* Prototypes +******************************************************************************/ +static uint32_t smartcard_phy_tda8035_InterfaceClockInit(void *base, + smartcard_interface_config_t const *config, + uint32_t srcClock_Hz); +static void smartcard_phy_tda8035_InterfaceClockDeinit(void *base, smartcard_interface_config_t const *config); +static void smartcard_phy_tda8035_InterfaceClockEnable(void *base, smartcard_interface_config_t const *config); +#if !(defined(FSL_FEATURE_SOC_EMVSIM_COUNT) && (FSL_FEATURE_SOC_EMVSIM_COUNT)) +extern void smartcard_uart_TimerStart(uint8_t channel, uint32_t time); +#endif + +/******************************************************************************* + * Variables + ******************************************************************************/ + +/******************************************************************************* +* Code +******************************************************************************/ + +/*! + * @brief This function initializes clock module used for card clock generation + */ +static uint32_t smartcard_phy_tda8035_InterfaceClockInit(void *base, + smartcard_interface_config_t const *config, + uint32_t srcClock_Hz) +{ + assert((NULL != config)); +#if defined(FSL_FEATURE_SOC_EMVSIM_COUNT) && (FSL_FEATURE_SOC_EMVSIM_COUNT) + assert(config->clockModule < FSL_FEATURE_SOC_EMVSIM_COUNT); + + uint32_t emvsimClkMhz = 0u; + uint8_t emvsimPRSCValue; + + /* Retrieve EMV SIM clock */ + emvsimClkMhz = srcClock_Hz / 1000000u; + /* Calculate MOD value */ + emvsimPRSCValue = (emvsimClkMhz * 1000u) / (config->smartCardClock / 1000u); + /* Set clock prescaler */ + ((EMVSIM_Type *)base)->CLKCFG = + (((EMVSIM_Type *)base)->CLKCFG & ~EMVSIM_CLKCFG_CLK_PRSC_MASK) | EMVSIM_CLKCFG_CLK_PRSC(emvsimPRSCValue); + + return config->smartCardClock; +#elif defined(FSL_FEATURE_SOC_FTM_COUNT) && (FSL_FEATURE_SOC_FTM_COUNT) + assert(config->clockModule < FSL_FEATURE_SOC_FTM_COUNT); + + uint32_t periph_clk_mhz = 0u; + uint16_t ftmModValue; + uint32_t ftm_base[] = FTM_BASE_ADDRS; + FTM_Type *ftmBase = (FTM_Type *)ftm_base[config->clockModule]; + + /* Retrieve FTM system clock */ + periph_clk_mhz = srcClock_Hz / 1000000u; + /* Calculate MOD value */ + ftmModValue = ((periph_clk_mhz * 1000u / 2u) / (config->smartCardClock / 1000u)) - 1u; + /* un-gate FTM peripheral clock */ + switch (config->clockModule) + { + case 0u: + CLOCK_EnableClock(kCLOCK_Ftm0); + break; +#if FSL_FEATURE_SOC_FTM_COUNT > 1 + case 1u: + CLOCK_EnableClock(kCLOCK_Ftm1); + break; +#endif +#if FSL_FEATURE_SOC_FTM_COUNT > 2 + case 2u: + CLOCK_EnableClock(kCLOCK_Ftm2); + break; +#endif +#if FSL_FEATURE_SOC_FTM_COUNT > 3 + case 3u: + CLOCK_EnableClock(kCLOCK_Ftm3); + break; +#endif + default: + return 0u; + } + /* Initialize FTM driver */ + /* Reset FTM prescaler to 'Divide by 1', i.e., to be same clock as peripheral clock + * Disable FTM counter, Set counter to operates in Up-counting mode */ + ftmBase->SC &= ~(FTM_SC_PS_MASK | FTM_SC_CLKS_MASK | FTM_SC_CPWMS_MASK); + /* Set initial counter value */ + ftmBase->CNTIN = 0u; + /* Set MOD value */ + ftmBase->MOD = ftmModValue; + /* Configure mode to output compare, toggle output on match */ + ftmBase->CONTROLS[config->clockModuleChannel].CnSC = (FTM_CnSC_ELSA_MASK | FTM_CnSC_MSA_MASK); + /* Configure a match value to toggle output at */ + ftmBase->CONTROLS[config->clockModuleChannel].CnV = 1; + /* Re-calculate the actually configured smartcard clock and return to caller */ + return (uint32_t)(((periph_clk_mhz * 1000u / 2u) / (ftmBase->MOD + 1u)) * 1000u); +#else + return 0u; +#endif +} + +/*! + * @brief This function de-initialize clock module used for card clock generation + */ +static void smartcard_phy_tda8035_InterfaceClockDeinit(void *base, smartcard_interface_config_t const *config) +{ +#if defined(FSL_FEATURE_SOC_EMVSIM_COUNT) && (FSL_FEATURE_SOC_EMVSIM_COUNT) + assert((config->clockModule < FSL_FEATURE_SOC_EMVSIM_COUNT) && (NULL != base)); + + /* Disable smart card clock */ + ((EMVSIM_Type *)base)->PCSR &= ~EMVSIM_PCSR_SCEN_MASK; +#elif defined(FSL_FEATURE_SOC_FTM_COUNT) && (FSL_FEATURE_SOC_FTM_COUNT) + assert(config->clockModule < FSL_FEATURE_SOC_FTM_COUNT); + /* gate FTM peripheral clock */ + switch (config->clockModule) + { + case 0u: + CLOCK_DisableClock(kCLOCK_Ftm0); + break; +#if FSL_FEATURE_SOC_FTM_COUNT > 1 + case 1u: + CLOCK_DisableClock(kCLOCK_Ftm1); + break; +#endif +#if FSL_FEATURE_SOC_FTM_COUNT > 2 + case 2u: + CLOCK_DisableClock(kCLOCK_Ftm2); + break; +#endif +#if FSL_FEATURE_SOC_FTM_COUNT > 3 + case 3u: + CLOCK_DisableClock(kCLOCK_Ftm3); + break; +#endif + default: + break; + } +#endif +} + +/*! + * @brief This function activate smart card clock + */ +static void smartcard_phy_tda8035_InterfaceClockEnable(void *base, smartcard_interface_config_t const *config) +{ +/* Enable smart card clock */ +#if defined(FSL_FEATURE_SOC_EMVSIM_COUNT) && (FSL_FEATURE_SOC_EMVSIM_COUNT) + ((EMVSIM_Type *)base)->PCSR |= EMVSIM_PCSR_SCEN_MASK; +#elif defined(FSL_FEATURE_SOC_FTM_COUNT) && (FSL_FEATURE_SOC_FTM_COUNT) + uint32_t ftm_base[] = FTM_BASE_ADDRS; + FTM_Type *ftmBase = (FTM_Type *)ftm_base[config->clockModule]; + /* Set clock source to start the counter : System clock */ + ftmBase->SC = FTM_SC_CLKS(1); +#endif +} + +/*! + * @brief This function deactivate smart card clock + */ +static void smartcard_phy_tda8035_InterfaceClockDisable(void *base, smartcard_interface_config_t const *config) +{ +/* Enable smart card clock */ +#if defined(FSL_FEATURE_SOC_EMVSIM_COUNT) && (FSL_FEATURE_SOC_EMVSIM_COUNT) + ((EMVSIM_Type *)base)->PCSR &= ~EMVSIM_PCSR_SCEN_MASK; +#elif defined(FSL_FEATURE_SOC_FTM_COUNT) && (FSL_FEATURE_SOC_FTM_COUNT) + uint32_t ftm_base[] = FTM_BASE_ADDRS; + FTM_Type *ftmBase = (FTM_Type *)ftm_base[config->clockModule]; + /* Set clock source to start the counter : System clock */ + ftmBase->SC &= ~FTM_SC_CLKS_MASK; +#endif +} + +void SMARTCARD_PHY_TDA8035_GetDefaultConfig(smartcard_interface_config_t *config) +{ + assert((NULL != config)); + + config->clockToResetDelay = SMARTCARD_INIT_DELAY_CLOCK_CYCLES; + config->vcc = kSMARTCARD_VoltageClassB3_3V; +} + +status_t SMARTCARD_PHY_TDA8035_Init(void *base, smartcard_interface_config_t const *config, uint32_t srcClock_Hz) +{ + if ((NULL == config) || (0u == srcClock_Hz)) + { + return kStatus_SMARTCARD_InvalidInput; + } + + /* Configure GPIO(CMDVCC, RST, INT, VSEL0, VSEL1) pins */ + uint32_t gpio_base[] = GPIO_BASE_ADDRS; + IRQn_Type port_irq[] = PORT_IRQS; + /* Set VSEL pins to low level context */ + ((GPIO_Type *)gpio_base[config->vsel0Port])->PCOR |= (1u << config->vsel0Pin); + ((GPIO_Type *)gpio_base[config->vsel1Port])->PCOR |= (1u << config->vsel1Pin); + /* Set VSEL pins to output pins */ + ((GPIO_Type *)gpio_base[config->vsel0Port])->PDDR |= (1u << config->vsel0Pin); + ((GPIO_Type *)gpio_base[config->vsel1Port])->PDDR |= (1u << config->vsel1Pin); +#if defined(FSL_FEATURE_SOC_EMVSIM_COUNT) && (FSL_FEATURE_SOC_EMVSIM_COUNT) + /* Set CMD_VCC pin to logic level '1', to allow card detection interrupt from TDA8035 */ + ((EMVSIM_Type *)base)->PCSR |= EMVSIM_PCSR_SVCC_EN_MASK; + ((EMVSIM_Type *)base)->PCSR &= ~EMVSIM_PCSR_VCCENP_MASK; +#else + /* Set RST pin to zero context and CMDVCC to high context */ + ((GPIO_Type *)gpio_base[config->resetPort])->PCOR |= (1u << config->resetPin); + ((GPIO_Type *)gpio_base[config->controlPort])->PSOR |= (1u << config->controlPin); + /* Set CMDVCC, RESET pins as output pins */ + ((GPIO_Type *)gpio_base[config->resetPort])->PDDR |= (1u << config->resetPin); + ((GPIO_Type *)gpio_base[config->controlPort])->PDDR |= (1u << config->controlPin); + +#endif + /* Initialize INT pin */ + ((GPIO_Type *)gpio_base[config->irqPort])->PDDR &= ~(1u << config->irqPin); + /* Enable Port IRQ for smartcard presence detection */ + NVIC_EnableIRQ(port_irq[config->irqPort]); + /* Smartcard clock initialization */ + if (config->smartCardClock != smartcard_phy_tda8035_InterfaceClockInit(base, config, srcClock_Hz)) + { + return kStatus_SMARTCARD_OtherError; + } + + return kStatus_SMARTCARD_Success; +} + +void SMARTCARD_PHY_TDA8035_Deinit(void *base, smartcard_interface_config_t *config) +{ + assert((NULL != config)); + + IRQn_Type port_irq[] = PORT_IRQS; + NVIC_DisableIRQ(port_irq[config->irqPort]); + /* Stop smartcard clock */ + smartcard_phy_tda8035_InterfaceClockDeinit(base, config); +} + +status_t SMARTCARD_PHY_TDA8035_Activate(void *base, smartcard_context_t *context, smartcard_reset_type_t resetType) +{ + if ((NULL == context) || (NULL == context->timeDelay)) + { + return kStatus_SMARTCARD_InvalidInput; + } + + context->timersState.initCharTimerExpired = false; + context->resetType = resetType; + uint32_t gpio_base[] = GPIO_BASE_ADDRS; +#if defined(FSL_FEATURE_SOC_EMVSIM_COUNT) && (FSL_FEATURE_SOC_EMVSIM_COUNT) + EMVSIM_Type *emvsimBase = (EMVSIM_Type *)base; + /* Disable receiver to deactivate GPC timers trigger */ + emvsimBase->CTRL &= ~EMVSIM_CTRL_RCV_EN_MASK; +#endif + + if (resetType == kSMARTCARD_ColdReset) + { /* Ensure that RST is HIGH and CMD is high here so that PHY goes in normal mode */ +#if defined(FSL_FEATURE_SOC_EMVSIM_COUNT) && (FSL_FEATURE_SOC_EMVSIM_COUNT) + emvsimBase->PCSR = + (emvsimBase->PCSR & ~(EMVSIM_PCSR_VCCENP_MASK | EMVSIM_PCSR_SRST_MASK)) | EMVSIM_PCSR_SVCC_EN_MASK; + emvsimBase->PCSR &= ~EMVSIM_PCSR_SRST_MASK; +#else + ((GPIO_Type *)gpio_base[context->interfaceConfig.resetPort])->PCOR |= (1u << context->interfaceConfig.resetPin); + ((GPIO_Type *)gpio_base[context->interfaceConfig.controlPort])->PSOR |= + (1u << context->interfaceConfig.controlPin); +#endif + /* vcc = 5v: vsel0=1,vsel1=1 + * vcc = 3.3v: vsel0=0,vsel1=1 + * vcc = 1.8v: vsel0=x,vsel1=0 */ + /* Setting of VSEL1 pin */ + if ((kSMARTCARD_VoltageClassA5_0V == context->interfaceConfig.vcc) || + (kSMARTCARD_VoltageClassB3_3V == context->interfaceConfig.vcc)) + { + ((GPIO_Type *)gpio_base[context->interfaceConfig.vsel1Port])->PSOR |= + (1u << context->interfaceConfig.vsel1Pin); + } + else + { + ((GPIO_Type *)gpio_base[context->interfaceConfig.vsel1Port])->PCOR |= + (1u << context->interfaceConfig.vsel1Pin); + } + /* Setting of VSEL0 pin */ + if (kSMARTCARD_VoltageClassA5_0V == context->interfaceConfig.vcc) + { + ((GPIO_Type *)gpio_base[context->interfaceConfig.vsel0Port])->PSOR |= + (1u << context->interfaceConfig.vsel0Pin); + } + else + { + ((GPIO_Type *)gpio_base[context->interfaceConfig.vsel0Port])->PCOR |= + (1u << context->interfaceConfig.vsel0Pin); + } +/* Set PHY to start Activation sequence by pulling CMDVCC low */ +#if defined(FSL_FEATURE_SOC_EMVSIM_COUNT) && (FSL_FEATURE_SOC_EMVSIM_COUNT) + emvsimBase->PCSR |= EMVSIM_PCSR_VCCENP_MASK; +#else + ((GPIO_Type *)gpio_base[context->interfaceConfig.controlPort])->PCOR |= + (1u << context->interfaceConfig.controlPin); +#endif + /* wait 3.42ms then enable clock an10997 P29 + During t0, the TDA8035 checks for the XTAL1 pin to detect if a crystal is present or if the clock is supplied + from the micro-controller, and then waits for the crystal to start. + This time is fixed, even if there is no crystal, and its maximum value is 3.1 ms. + t1 is the time between the beginning of the activation and the start of the clock on the smart card side. This + time depends on the internal oscillator frequency and + lasts at maximum 320 us. */ + + /* Set counter value , no card clock ,so use OS delay */ + context->timeDelay(4u); + smartcard_phy_tda8035_InterfaceClockEnable(base, &context->interfaceConfig); + } + else if (resetType == kSMARTCARD_WarmReset) + { /* Ensure that card is already active */ + if (!context->cardParams.active) + { /* Card is not active;hence return */ + return kStatus_SMARTCARD_CardNotActivated; + } +/* Pull RESET low to start warm Activation sequence */ +#if defined(FSL_FEATURE_SOC_EMVSIM_COUNT) && (FSL_FEATURE_SOC_EMVSIM_COUNT) + emvsimBase->PCSR &= ~EMVSIM_PCSR_SRST_MASK; +#else + ((GPIO_Type *)gpio_base[context->interfaceConfig.resetPort])->PCOR |= (1u << context->interfaceConfig.resetPin); +#endif + } + else + { + return kStatus_SMARTCARD_InvalidInput; + } + /* Wait for sometime as specified by EMV before pulling RST High + * As per EMV delay <= 42000 Clock cycles + * as per PHY delay >= 1us */ + uint32_t temp = (uint32_t)((float)(1 + (float)(((float)(1000u * context->interfaceConfig.clockToResetDelay)) / + ((float)context->interfaceConfig.smartCardClock)))); + context->timeDelay(temp); +/* Pull reset HIGH Now to mark the end of Activation sequence */ +#if defined(FSL_FEATURE_SOC_EMVSIM_COUNT) && (FSL_FEATURE_SOC_EMVSIM_COUNT) + emvsimBase->PCSR |= EMVSIM_PCSR_SRST_MASK; +#else + ((GPIO_Type *)gpio_base[context->interfaceConfig.resetPort])->PSOR |= (1u << context->interfaceConfig.resetPin); +#endif +/* Configure TS character and ATR duration timers and enable receiver */ +#if defined(FSL_FEATURE_SOC_EMVSIM_COUNT) && (FSL_FEATURE_SOC_EMVSIM_COUNT) + emvsimBase->CLKCFG &= ~(EMVSIM_CLKCFG_GPCNT0_CLK_SEL_MASK | EMVSIM_CLKCFG_GPCNT1_CLK_SEL_MASK); + /* Down counter trigger, and clear any pending counter status flag */ + emvsimBase->TX_STATUS = EMVSIM_TX_STATUS_GPCNT1_TO_MASK | EMVSIM_TX_STATUS_GPCNT0_TO_MASK; + /* Set counter value for TS detection delay */ + emvsimBase->GPCNT0_VAL = (SMARTCARD_INIT_DELAY_CLOCK_CYCLES + SMARTCARD_INIT_DELAY_CLOCK_CYCLES_ADJUSTMENT); + /* Pre-load counter value for ATR duration delay */ + emvsimBase->GPCNT1_VAL = (SMARTCARD_EMV_ATR_DURATION_ETU + SMARTCARD_ATR_DURATION_ADJUSTMENT); + /* Select the clock for GPCNT for both TS detection and early start of ATR duration counter */ + emvsimBase->CLKCFG |= + (EMVSIM_CLKCFG_GPCNT0_CLK_SEL(kEMVSIM_GPCCardClock) | EMVSIM_CLKCFG_GPCNT1_CLK_SEL(kEMVSIM_GPCTxClock)); + /* Set receiver to ICM mode, Flush RX FIFO */ + emvsimBase->CTRL |= (EMVSIM_CTRL_ICM_MASK | EMVSIM_CTRL_FLSH_RX_MASK); + /* Enable counter interrupt for TS detection */ + emvsimBase->INT_MASK &= ~EMVSIM_INT_MASK_GPCNT0_IM_MASK; + /* Clear any pending status flags */ + emvsimBase->RX_STATUS = 0xFFFFFFFFu; + /* Enable receiver */ + emvsimBase->CTRL |= EMVSIM_CTRL_RCV_EN_MASK; +#else + /* Enable external timer for TS detection time-out */ + smartcard_uart_TimerStart(context->interfaceConfig.tsTimerId, + (SMARTCARD_INIT_DELAY_CLOCK_CYCLES + SMARTCARD_INIT_DELAY_CLOCK_CYCLES_ADJUSTMENT) * + (CLOCK_GetFreq(kCLOCK_BusClk) / context->interfaceConfig.smartCardClock)); +#endif + /* Here the card was activated */ + context->cardParams.active = true; + + return kStatus_SMARTCARD_Success; +} + +status_t SMARTCARD_PHY_TDA8035_Deactivate(void *base, smartcard_context_t *context) +{ + if ((NULL == context)) + { + return kStatus_SMARTCARD_InvalidInput; + } + +#if !(defined(FSL_FEATURE_SOC_EMVSIM_COUNT) && (FSL_FEATURE_SOC_EMVSIM_COUNT)) + uint32_t gpio_base[] = GPIO_BASE_ADDRS; +#endif +/* Tell PHY to start Deactivation sequence by pulling CMD high and reset low */ +#if defined(FSL_FEATURE_SOC_EMVSIM_COUNT) && (FSL_FEATURE_SOC_EMVSIM_COUNT) + ((EMVSIM_Type *)base)->PCSR |= EMVSIM_PCSR_SVCC_EN_MASK; + ((EMVSIM_Type *)base)->PCSR &= ~EMVSIM_PCSR_VCCENP_MASK; + ((EMVSIM_Type *)base)->PCSR &= ~EMVSIM_PCSR_SRST_MASK; +#else + ((GPIO_Type *)gpio_base[context->interfaceConfig.controlPort])->PSOR |= (1u << context->interfaceConfig.controlPin); + ((GPIO_Type *)gpio_base[context->interfaceConfig.resetPort])->PCOR |= (1u << context->interfaceConfig.resetPin); +#endif + smartcard_phy_tda8035_InterfaceClockDisable(base, &context->interfaceConfig); + /* According EMV 4.3 specification deactivation sequence should be done within 100ms. + * The period is measured from the time that RST is set to state L to the time that Vcc + * reaches 0.4 V or less. */ + context->timeDelay(100); + /* Here the card was deactivated */ + context->cardParams.active = false; + + return kStatus_SMARTCARD_Success; +} + +status_t SMARTCARD_PHY_TDA8035_Control(void *base, + smartcard_context_t *context, + smartcard_interface_control_t control, + uint32_t param) +{ + if ((NULL == context)) + { + return kStatus_SMARTCARD_InvalidInput; + } +#if !(defined(FSL_FEATURE_SOC_EMVSIM_COUNT) && (FSL_FEATURE_SOC_EMVSIM_COUNT)) + uint32_t gpio_base[] = GPIO_BASE_ADDRS; +#endif + + switch (control) + { + case kSMARTCARD_InterfaceSetVcc: + /* Set card parameter to VCC level set by caller */ + context->interfaceConfig.vcc = (smartcard_card_voltage_class_t)param; + break; + case kSMARTCARD_InterfaceSetClockToResetDelay: + /* Set interface clock to Reset delay set by caller */ + context->interfaceConfig.clockToResetDelay = param; + break; + case kSMARTCARD_InterfaceReadStatus: +#if defined(FSL_FEATURE_SOC_EMVSIM_COUNT) && (FSL_FEATURE_SOC_EMVSIM_COUNT) + /* Expecting active low present detect */ + context->cardParams.present = + ((emvsim_presence_detect_status_t)((((EMVSIM_Type *)base)->PCSR & EMVSIM_PCSR_SPDP_MASK) >> + EMVSIM_PCSR_SPDP_SHIFT) == kEMVSIM_DetectPinIsLow); +#else + if (((GPIO_Type *)gpio_base[context->interfaceConfig.controlPort])->PDIR & + (1u << context->interfaceConfig.controlPin)) + { + if (((GPIO_Type *)gpio_base[context->interfaceConfig.irqPort])->PDIR & + (1u << context->interfaceConfig.irqPin)) + { /* CMDVCC is high => session is inactive and INT is high => card is present */ + context->cardParams.present = true; + context->cardParams.active = false; + context->cardParams.faulty = false; + context->cardParams.status = SMARTCARD_TDA8035_STATUS_PRES; + } + else + { /* CMDVCC is high => session is inactive and INT is low => card is absent */ + context->cardParams.present = false; + context->cardParams.active = false; + context->cardParams.faulty = false; + context->cardParams.status = 0u; + } + } + else + { + if (((GPIO_Type *)gpio_base[context->interfaceConfig.irqPort])->PDIR & + (1u << context->interfaceConfig.irqPin)) + { /* CMDVCC is low => session is active and INT is high => card is present */ + context->cardParams.present = true; + context->cardParams.active = true; + context->cardParams.faulty = false; + context->cardParams.status = SMARTCARD_TDA8035_STATUS_PRES | SMARTCARD_TDA8035_STATUS_ACTIVE; + } + else + { + /* CMDVCC is low => session is active and INT is high => card is absent/deactivated due to some + * fault + * A fault has been detected (card has been deactivated) but The cause of the deactivation is not + * yet known. + * Lets determine the cause of fault by pulling CMD high */ + if (((GPIO_Type *)gpio_base[context->interfaceConfig.irqPort])->PDIR & + (1u << context->interfaceConfig.irqPin)) + { /* The fault detected was not a card removal (card is still present) */ + /* If INT follows CMDVCCN, the fault is due to a supply voltage drop, a VCC over-current + * detection or overheating. */ + context->cardParams.present = true; + context->cardParams.active = false; + context->cardParams.faulty = true; + context->cardParams.status = SMARTCARD_TDA8035_STATUS_PRES | SMARTCARD_TDA8035_STATUS_FAULTY | + SMARTCARD_TDA8035_STATUS_CARD_DEACTIVATED; + } + else + { /* The fault detected was the card removal + * Setting CMDVCCN allows checking if the deactivation is due to card removal. + * In this case the INT pin will stay low after CMDVCCN is high. */ + context->cardParams.present = false; + context->cardParams.active = false; + context->cardParams.faulty = false; + context->cardParams.status = + SMARTCARD_TDA8035_STATUS_CARD_REMOVED | SMARTCARD_TDA8035_STATUS_CARD_DEACTIVATED; + } + } + } +#endif + break; + default: + return kStatus_SMARTCARD_InvalidInput; + } + + return kStatus_SMARTCARD_Success; +} + +void SMARTCARD_PHY_TDA8035_IRQHandler(void *base, smartcard_context_t *context) +{ + if ((NULL == context)) + { + return; + } + /* Read interface/card status */ + SMARTCARD_PHY_TDA8035_Control(base, context, kSMARTCARD_InterfaceReadStatus, 0u); + /* Invoke callback if there is one */ + if (NULL != context->interfaceCallback) + { + context->interfaceCallback(context, context->interfaceCallbackParam); + } +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smartcard_phy_tda8035.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smartcard_phy_tda8035.h new file mode 100644 index 00000000000..803e2f1c131 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smartcard_phy_tda8035.h @@ -0,0 +1,153 @@ +/* + * Copyright (c) 2015-2016, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _FSL_SMARTCARD_PHY_TDA8035_H_ +#define _FSL_SMARTCARD_PHY_TDA8035_H_ + +#include "fsl_smartcard.h" + +/*! + * @addtogroup smartcard_phy_tda8035_driver + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @brief Smart card definition which specifies adjustment number of clock cycles during which ATR string has to be received + */ +#define SMARTCARD_ATR_DURATION_ADJUSTMENT (360u) + +/*! @brief Smart card definition which specifies adjustment number of clock cycles until initial 'TS' character has to be + * received */ +#define SMARTCARD_INIT_DELAY_CLOCK_CYCLES_ADJUSTMENT (4200u) + +/*! @brief Masks for TDA8035 status register */ +#define SMARTCARD_TDA8035_STATUS_PRES (0x01u) /*!< Smart card phy TDA8035 Smart card present status */ +#define SMARTCARD_TDA8035_STATUS_ACTIVE (0x02u) /*!< Smart card phy TDA8035 Smart card active status */ +#define SMARTCARD_TDA8035_STATUS_FAULTY (0x04u) /*!< Smart card phy TDA8035 Smart card faulty status */ +#define SMARTCARD_TDA8035_STATUS_CARD_REMOVED (0x08u) /*!< Smart card phy TDA8035 Smart card removed status */ +#define SMARTCARD_TDA8035_STATUS_CARD_DEACTIVATED (0x10u) /*!< Smart card phy TDA8035 Smart card deactivated status */ + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @brief Fills in config structure with default values. + * + * @param config The Smart card user configuration structure which contains configuration structure of type + * smartcard_interface_config_t. + * Function fill in members: + * clockToResetDelay = 42000, + * vcc = kSmartcardVoltageClassB3_3V, + * with default values. + */ +void SMARTCARD_PHY_TDA8035_GetDefaultConfig(smartcard_interface_config_t *config); + +/*! + * @brief Initializes a Smart card interface instance for operation. + * + * @param base The Smart card peripheral base address. + * @param config The user configuration structure of type smartcard_interface_config_t. The user + * can call to fill out configuration structure function SMARTCARD_PHY_TDA8035_GetDefaultConfig(). + * @param srcClock_Hz Smart card clock generation module source clock. + * + * @retval kStatus_SMARTCARD_Success or kStatus_SMARTCARD_OtherError in case of error. + */ +status_t SMARTCARD_PHY_TDA8035_Init(void *base, smartcard_interface_config_t const *config, uint32_t srcClock_Hz); + +/*! + * @brief De-initializes a Smart card interface. Stops Smart card clock and disable VCC. + * + * @param base The Smart card peripheral module base address. + * @param config The user configuration structure of type smartcard_interface_config_t. + */ +void SMARTCARD_PHY_TDA8035_Deinit(void *base, smartcard_interface_config_t *config); + +/*! + * @brief Activates the Smart card IC. + * + * @param base The Smart card peripheral module base address. + * @param context A pointer to a Smart card driver context structure. + * @param resetType type of reset to be performed, possible values + * = kSmartcardColdReset, kSmartcardWarmReset + * + * @retval kStatus_SMARTCARD_Success or kStatus_SMARTCARD_OtherError in case of error. + */ +status_t SMARTCARD_PHY_TDA8035_Activate(void *base, smartcard_context_t *context, smartcard_reset_type_t resetType); + +/*! + * @brief De-activates the Smart card IC. + * + * @param base The Smart card peripheral module base address. + * @param context A pointer to a Smart card driver context structure. + * + * @retval kStatus_SMARTCARD_Success or kStatus_SMARTCARD_OtherError in case of error. + */ +status_t SMARTCARD_PHY_TDA8035_Deactivate(void *base, smartcard_context_t *context); + +/*! + * @brief Controls Smart card interface IC. + * + * @param base The Smart card peripheral module base address. + * @param context A pointer to a Smart card driver context structure. + * @param control A interface command type. + * @param param Integer value specific to control type + * + * @retval kStatus_SMARTCARD_Success or kStatus_SMARTCARD_OtherError in case of error. + */ +status_t SMARTCARD_PHY_TDA8035_Control(void *base, + smartcard_context_t *context, + smartcard_interface_control_t control, + uint32_t param); + +/*! + * @brief Smart card interface IC IRQ ISR. + * + * @param base The Smart card peripheral module base address. + * @param context The Smart card context pointer. + */ +void SMARTCARD_PHY_TDA8035_IRQHandler(void *base, smartcard_context_t *context); +/*@}*/ + +#if defined(__cplusplus) +} +#endif + +/*! @}*/ + +#endif /* _FSL_SMARTCARD_TDA8035_H_*/ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smc.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smc.c new file mode 100644 index 00000000000..45382fdffea --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smc.c @@ -0,0 +1,366 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_smc.h" + +#if (defined(FSL_FEATURE_SMC_HAS_PARAM) && FSL_FEATURE_SMC_HAS_PARAM) +void SMC_GetParam(SMC_Type *base, smc_param_t *param) +{ + uint32_t reg = base->PARAM; + param->hsrunEnable = (bool)(reg & SMC_PARAM_EHSRUN_MASK); + param->llsEnable = (bool)(reg & SMC_PARAM_ELLS_MASK); + param->lls2Enable = (bool)(reg & SMC_PARAM_ELLS2_MASK); + param->vlls0Enable = (bool)(reg & SMC_PARAM_EVLLS0_MASK); +} +#endif /* FSL_FEATURE_SMC_HAS_PARAM */ + +status_t SMC_SetPowerModeRun(SMC_Type *base) +{ + uint8_t reg; + + reg = base->PMCTRL; + /* configure Normal RUN mode */ + reg &= ~SMC_PMCTRL_RUNM_MASK; + reg |= (kSMC_RunNormal << SMC_PMCTRL_RUNM_SHIFT); + base->PMCTRL = reg; + + return kStatus_Success; +} + +#if (defined(FSL_FEATURE_SMC_HAS_HIGH_SPEED_RUN_MODE) && FSL_FEATURE_SMC_HAS_HIGH_SPEED_RUN_MODE) +status_t SMC_SetPowerModeHsrun(SMC_Type *base) +{ + uint8_t reg; + + reg = base->PMCTRL; + /* configure High Speed RUN mode */ + reg &= ~SMC_PMCTRL_RUNM_MASK; + reg |= (kSMC_Hsrun << SMC_PMCTRL_RUNM_SHIFT); + base->PMCTRL = reg; + + return kStatus_Success; +} +#endif /* FSL_FEATURE_SMC_HAS_HIGH_SPEED_RUN_MODE */ + +status_t SMC_SetPowerModeWait(SMC_Type *base) +{ + /* configure Normal Wait mode */ + SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk; + __DSB(); + __WFI(); + __ISB(); + + return kStatus_Success; +} + +status_t SMC_SetPowerModeStop(SMC_Type *base, smc_partial_stop_option_t option) +{ + uint8_t reg; + +#if (defined(FSL_FEATURE_SMC_HAS_PSTOPO) && FSL_FEATURE_SMC_HAS_PSTOPO) + /* configure the Partial Stop mode in Noraml Stop mode */ + reg = base->STOPCTRL; + reg &= ~SMC_STOPCTRL_PSTOPO_MASK; + reg |= ((uint32_t)option << SMC_STOPCTRL_PSTOPO_SHIFT); + base->STOPCTRL = reg; +#endif + + /* configure Normal Stop mode */ + reg = base->PMCTRL; + reg &= ~SMC_PMCTRL_STOPM_MASK; + reg |= (kSMC_StopNormal << SMC_PMCTRL_STOPM_SHIFT); + base->PMCTRL = reg; + + /* Set the SLEEPDEEP bit to enable deep sleep mode (stop mode) */ + SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; + + /* read back to make sure the configuration valid before enter stop mode */ + (void)base->PMCTRL; + __DSB(); + __WFI(); + __ISB(); + + /* check whether the power mode enter Stop mode succeed */ + if (base->PMCTRL & SMC_PMCTRL_STOPA_MASK) + { + return kStatus_SMC_StopAbort; + } + else + { + return kStatus_Success; + } +} + +status_t SMC_SetPowerModeVlpr(SMC_Type *base +#if (defined(FSL_FEATURE_SMC_HAS_LPWUI) && FSL_FEATURE_SMC_HAS_LPWUI) + , + bool wakeupMode +#endif + ) +{ + uint8_t reg; + + reg = base->PMCTRL; +#if (defined(FSL_FEATURE_SMC_HAS_LPWUI) && FSL_FEATURE_SMC_HAS_LPWUI) + /* configure whether the system remains in VLP mode on an interrupt */ + if (wakeupMode) + { + /* exits to RUN mode on an interrupt */ + reg |= SMC_PMCTRL_LPWUI_MASK; + } + else + { + /* remains in VLP mode on an interrupt */ + reg &= ~SMC_PMCTRL_LPWUI_MASK; + } +#endif /* FSL_FEATURE_SMC_HAS_LPWUI */ + + /* configure VLPR mode */ + reg &= ~SMC_PMCTRL_RUNM_MASK; + reg |= (kSMC_RunVlpr << SMC_PMCTRL_RUNM_SHIFT); + base->PMCTRL = reg; + + return kStatus_Success; +} + +status_t SMC_SetPowerModeVlpw(SMC_Type *base) +{ + /* configure VLPW mode */ + /* Set the SLEEPDEEP bit to enable deep sleep mode */ + SCB->SCR &= ~SCB_SCR_SLEEPDEEP_Msk; + __DSB(); + __WFI(); + __ISB(); + + return kStatus_Success; +} + +status_t SMC_SetPowerModeVlps(SMC_Type *base) +{ + uint8_t reg; + + /* configure VLPS mode */ + reg = base->PMCTRL; + reg &= ~SMC_PMCTRL_STOPM_MASK; + reg |= (kSMC_StopVlps << SMC_PMCTRL_STOPM_SHIFT); + base->PMCTRL = reg; + + /* Set the SLEEPDEEP bit to enable deep sleep mode */ + SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; + + /* read back to make sure the configuration valid before enter stop mode */ + (void)base->PMCTRL; + __DSB(); + __WFI(); + __ISB(); + + /* check whether the power mode enter VLPS mode succeed */ + if (base->PMCTRL & SMC_PMCTRL_STOPA_MASK) + { + return kStatus_SMC_StopAbort; + } + else + { + return kStatus_Success; + } +} + +#if (defined(FSL_FEATURE_SMC_HAS_LOW_LEAKAGE_STOP_MODE) && FSL_FEATURE_SMC_HAS_LOW_LEAKAGE_STOP_MODE) +status_t SMC_SetPowerModeLls(SMC_Type *base +#if ((defined(FSL_FEATURE_SMC_HAS_LLS_SUBMODE) && FSL_FEATURE_SMC_HAS_LLS_SUBMODE) || \ + (defined(FSL_FEATURE_SMC_HAS_LPOPO) && FSL_FEATURE_SMC_HAS_LPOPO)) + , + const smc_power_mode_lls_config_t *config +#endif + ) +{ + uint8_t reg; + + /* configure to LLS mode */ + reg = base->PMCTRL; + reg &= ~SMC_PMCTRL_STOPM_MASK; + reg |= (kSMC_StopLls << SMC_PMCTRL_STOPM_SHIFT); + base->PMCTRL = reg; + +/* configure LLS sub-mode*/ +#if (defined(FSL_FEATURE_SMC_HAS_LLS_SUBMODE) && FSL_FEATURE_SMC_HAS_LLS_SUBMODE) + reg = base->STOPCTRL; + reg &= ~SMC_STOPCTRL_LLSM_MASK; + reg |= ((uint32_t)config->subMode << SMC_STOPCTRL_LLSM_SHIFT); + base->STOPCTRL = reg; +#endif /* FSL_FEATURE_SMC_HAS_LLS_SUBMODE */ + +#if (defined(FSL_FEATURE_SMC_HAS_LPOPO) && FSL_FEATURE_SMC_HAS_LPOPO) + if (config->enableLpoClock) + { + base->STOPCTRL &= ~SMC_STOPCTRL_LPOPO_MASK; + } + else + { + base->STOPCTRL |= SMC_STOPCTRL_LPOPO_MASK; + } +#endif /* FSL_FEATURE_SMC_HAS_LPOPO */ + + /* Set the SLEEPDEEP bit to enable deep sleep mode */ + SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; + + /* read back to make sure the configuration valid before enter stop mode */ + (void)base->PMCTRL; + __DSB(); + __WFI(); + __ISB(); + + /* check whether the power mode enter LLS mode succeed */ + if (base->PMCTRL & SMC_PMCTRL_STOPA_MASK) + { + return kStatus_SMC_StopAbort; + } + else + { + return kStatus_Success; + } +} +#endif /* FSL_FEATURE_SMC_HAS_LOW_LEAKAGE_STOP_MODE */ + +#if (defined(FSL_FEATURE_SMC_HAS_VERY_LOW_LEAKAGE_STOP_MODE) && FSL_FEATURE_SMC_HAS_VERY_LOW_LEAKAGE_STOP_MODE) +status_t SMC_SetPowerModeVlls(SMC_Type *base, const smc_power_mode_vlls_config_t *config) +{ + uint8_t reg; + +#if (defined(FSL_FEATURE_SMC_HAS_PORPO) && FSL_FEATURE_SMC_HAS_PORPO) +#if (defined(FSL_FEATURE_SMC_USE_VLLSCTRL_REG) && FSL_FEATURE_SMC_USE_VLLSCTRL_REG) || \ + (defined(FSL_FEATURE_SMC_USE_STOPCTRL_VLLSM) && FSL_FEATURE_SMC_USE_STOPCTRL_VLLSM) || \ + (defined(FSL_FEATURE_SMC_HAS_LLS_SUBMODE) && FSL_FEATURE_SMC_HAS_LLS_SUBMODE) + if (config->subMode == kSMC_StopSub0) +#endif + { + /* configure whether the Por Detect work in Vlls0 mode */ + if (config->enablePorDetectInVlls0) + { +#if (defined(FSL_FEATURE_SMC_USE_VLLSCTRL_REG) && FSL_FEATURE_SMC_USE_VLLSCTRL_REG) + base->VLLSCTRL &= ~SMC_VLLSCTRL_PORPO_MASK; +#else + base->STOPCTRL &= ~SMC_STOPCTRL_PORPO_MASK; +#endif + } + else + { +#if (defined(FSL_FEATURE_SMC_USE_VLLSCTRL_REG) && FSL_FEATURE_SMC_USE_VLLSCTRL_REG) + base->VLLSCTRL |= SMC_VLLSCTRL_PORPO_MASK; +#else + base->STOPCTRL |= SMC_STOPCTRL_PORPO_MASK; +#endif + } + } +#endif /* FSL_FEATURE_SMC_HAS_PORPO */ + +#if (defined(FSL_FEATURE_SMC_HAS_RAM2_POWER_OPTION) && FSL_FEATURE_SMC_HAS_RAM2_POWER_OPTION) + else if (config->subMode == kSMC_StopSub2) + { + /* configure whether the Por Detect work in Vlls0 mode */ + if (config->enableRam2InVlls2) + { +#if (defined(FSL_FEATURE_SMC_USE_VLLSCTRL_REG) && FSL_FEATURE_SMC_USE_VLLSCTRL_REG) + base->VLLSCTRL |= SMC_VLLSCTRL_RAM2PO_MASK; +#else + base->STOPCTRL |= SMC_STOPCTRL_RAM2PO_MASK; +#endif + } + else + { +#if (defined(FSL_FEATURE_SMC_USE_VLLSCTRL_REG) && FSL_FEATURE_SMC_USE_VLLSCTRL_REG) + base->VLLSCTRL &= ~SMC_VLLSCTRL_RAM2PO_MASK; +#else + base->STOPCTRL &= ~SMC_STOPCTRL_RAM2PO_MASK; +#endif + } + } + else + { + } +#endif /* FSL_FEATURE_SMC_HAS_RAM2_POWER_OPTION */ + + /* configure to VLLS mode */ + reg = base->PMCTRL; + reg &= ~SMC_PMCTRL_STOPM_MASK; + reg |= (kSMC_StopVlls << SMC_PMCTRL_STOPM_SHIFT); + base->PMCTRL = reg; + +/* configure the VLLS sub-mode */ +#if (defined(FSL_FEATURE_SMC_USE_VLLSCTRL_REG) && FSL_FEATURE_SMC_USE_VLLSCTRL_REG) + reg = base->VLLSCTRL; + reg &= ~SMC_VLLSCTRL_VLLSM_MASK; + reg |= ((uint32_t)config->subMode << SMC_VLLSCTRL_VLLSM_SHIFT); + base->VLLSCTRL = reg; +#else +#if (defined(FSL_FEATURE_SMC_HAS_LLS_SUBMODE) && FSL_FEATURE_SMC_HAS_LLS_SUBMODE) + reg = base->STOPCTRL; + reg &= ~SMC_STOPCTRL_LLSM_MASK; + reg |= ((uint32_t)config->subMode << SMC_STOPCTRL_LLSM_SHIFT); + base->STOPCTRL = reg; +#else + reg = base->STOPCTRL; + reg &= ~SMC_STOPCTRL_VLLSM_MASK; + reg |= ((uint32_t)config->subMode << SMC_STOPCTRL_VLLSM_SHIFT); + base->STOPCTRL = reg; +#endif /* FSL_FEATURE_SMC_HAS_LLS_SUBMODE */ +#endif + +#if (defined(FSL_FEATURE_SMC_HAS_LPOPO) && FSL_FEATURE_SMC_HAS_LPOPO) + if (config->enableLpoClock) + { + base->STOPCTRL &= ~SMC_STOPCTRL_LPOPO_MASK; + } + else + { + base->STOPCTRL |= SMC_STOPCTRL_LPOPO_MASK; + } +#endif /* FSL_FEATURE_SMC_HAS_LPOPO */ + + /* Set the SLEEPDEEP bit to enable deep sleep mode */ + SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; + + /* read back to make sure the configuration valid before enter stop mode */ + (void)base->PMCTRL; + __DSB(); + __WFI(); + __ISB(); + + /* check whether the power mode enter LLS mode succeed */ + if (base->PMCTRL & SMC_PMCTRL_STOPA_MASK) + { + return kStatus_SMC_StopAbort; + } + else + { + return kStatus_Success; + } +} +#endif /* FSL_FEATURE_SMC_HAS_VERY_LOW_LEAKAGE_STOP_MODE */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smc.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smc.h new file mode 100644 index 00000000000..4148734a2a4 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_smc.h @@ -0,0 +1,418 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _FSL_SMC_H_ +#define _FSL_SMC_H_ + +#include "fsl_common.h" + +/*! @addtogroup smc */ +/*! @{ */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief SMC driver version 2.0.2. */ +#define FSL_SMC_DRIVER_VERSION (MAKE_VERSION(2, 0, 2)) +/*@}*/ + +/*! + * @brief Power Modes Protection + */ +typedef enum _smc_power_mode_protection +{ +#if (defined(FSL_FEATURE_SMC_HAS_VERY_LOW_LEAKAGE_STOP_MODE) && FSL_FEATURE_SMC_HAS_VERY_LOW_LEAKAGE_STOP_MODE) + kSMC_AllowPowerModeVlls = SMC_PMPROT_AVLLS_MASK, /*!< Allow Very-Low-Leakage Stop Mode. */ +#endif +#if (defined(FSL_FEATURE_SMC_HAS_LOW_LEAKAGE_STOP_MODE) && FSL_FEATURE_SMC_HAS_LOW_LEAKAGE_STOP_MODE) + kSMC_AllowPowerModeLls = SMC_PMPROT_ALLS_MASK, /*!< Allow Low-Leakage Stop Mode. */ +#endif /* FSL_FEATURE_SMC_HAS_LOW_LEAKAGE_STOP_MODE */ + kSMC_AllowPowerModeVlp = SMC_PMPROT_AVLP_MASK, /*!< Allow Very-Low-Power Mode. */ +#if (defined(FSL_FEATURE_SMC_HAS_HIGH_SPEED_RUN_MODE) && FSL_FEATURE_SMC_HAS_HIGH_SPEED_RUN_MODE) + kSMC_AllowPowerModeHsrun = SMC_PMPROT_AHSRUN_MASK, /*!< Allow High Speed Run mode. */ +#endif /* FSL_FEATURE_SMC_HAS_HIGH_SPEED_RUN_MODE */ + kSMC_AllowPowerModeAll = (0U +#if (defined(FSL_FEATURE_SMC_HAS_VERY_LOW_LEAKAGE_STOP_MODE) && FSL_FEATURE_SMC_HAS_VERY_LOW_LEAKAGE_STOP_MODE) + | + SMC_PMPROT_AVLLS_MASK +#endif +#if (defined(FSL_FEATURE_SMC_HAS_LOW_LEAKAGE_STOP_MODE) && FSL_FEATURE_SMC_HAS_LOW_LEAKAGE_STOP_MODE) + | + SMC_PMPROT_ALLS_MASK +#endif /* FSL_FEATURE_SMC_HAS_LOW_LEAKAGE_STOP_MODE */ + | + SMC_PMPROT_AVLP_MASK +#if (defined(FSL_FEATURE_SMC_HAS_HIGH_SPEED_RUN_MODE) && FSL_FEATURE_SMC_HAS_HIGH_SPEED_RUN_MODE) + | + kSMC_AllowPowerModeHsrun +#endif /* FSL_FEATURE_SMC_HAS_HIGH_SPEED_RUN_MODE */ + ) /*!< Allow all power mode. */ +} smc_power_mode_protection_t; + +/*! + * @brief Power Modes in PMSTAT + */ +typedef enum _smc_power_state +{ + kSMC_PowerStateRun = 0x01U << 0U, /*!< 0000_0001 - Current power mode is RUN */ + kSMC_PowerStateStop = 0x01U << 1U, /*!< 0000_0010 - Current power mode is STOP */ + kSMC_PowerStateVlpr = 0x01U << 2U, /*!< 0000_0100 - Current power mode is VLPR */ + kSMC_PowerStateVlpw = 0x01U << 3U, /*!< 0000_1000 - Current power mode is VLPW */ + kSMC_PowerStateVlps = 0x01U << 4U, /*!< 0001_0000 - Current power mode is VLPS */ +#if (defined(FSL_FEATURE_SMC_HAS_LOW_LEAKAGE_STOP_MODE) && FSL_FEATURE_SMC_HAS_LOW_LEAKAGE_STOP_MODE) + kSMC_PowerStateLls = 0x01U << 5U, /*!< 0010_0000 - Current power mode is LLS */ +#endif /* FSL_FEATURE_SMC_HAS_LOW_LEAKAGE_STOP_MODE */ +#if (defined(FSL_FEATURE_SMC_HAS_VERY_LOW_LEAKAGE_STOP_MODE) && FSL_FEATURE_SMC_HAS_VERY_LOW_LEAKAGE_STOP_MODE) + kSMC_PowerStateVlls = 0x01U << 6U, /*!< 0100_0000 - Current power mode is VLLS */ +#endif +#if (defined(FSL_FEATURE_SMC_HAS_HIGH_SPEED_RUN_MODE) && FSL_FEATURE_SMC_HAS_HIGH_SPEED_RUN_MODE) + kSMC_PowerStateHsrun = 0x01U << 7U /*!< 1000_0000 - Current power mode is HSRUN */ +#endif /* FSL_FEATURE_SMC_HAS_HIGH_SPEED_RUN_MODE */ +} smc_power_state_t; + +/*! + * @brief Run mode definition + */ +typedef enum _smc_run_mode +{ + kSMC_RunNormal = 0U, /*!< normal RUN mode. */ + kSMC_RunVlpr = 2U, /*!< Very-Low-Power RUN mode. */ +#if (defined(FSL_FEATURE_SMC_HAS_HIGH_SPEED_RUN_MODE) && FSL_FEATURE_SMC_HAS_HIGH_SPEED_RUN_MODE) + kSMC_Hsrun = 3U /*!< High Speed Run mode (HSRUN). */ +#endif /* FSL_FEATURE_SMC_HAS_HIGH_SPEED_RUN_MODE */ +} smc_run_mode_t; + +/*! + * @brief Stop mode definition + */ +typedef enum _smc_stop_mode +{ + kSMC_StopNormal = 0U, /*!< Normal STOP mode. */ + kSMC_StopVlps = 2U, /*!< Very-Low-Power STOP mode. */ +#if (defined(FSL_FEATURE_SMC_HAS_LOW_LEAKAGE_STOP_MODE) && FSL_FEATURE_SMC_HAS_LOW_LEAKAGE_STOP_MODE) + kSMC_StopLls = 3U, /*!< Low-Leakage Stop mode. */ +#endif /* FSL_FEATURE_SMC_HAS_LOW_LEAKAGE_STOP_MODE */ +#if (defined(FSL_FEATURE_SMC_HAS_VERY_LOW_LEAKAGE_STOP_MODE) && FSL_FEATURE_SMC_HAS_VERY_LOW_LEAKAGE_STOP_MODE) + kSMC_StopVlls = 4U /*!< Very-Low-Leakage Stop mode. */ +#endif +} smc_stop_mode_t; + +#if (defined(FSL_FEATURE_SMC_USE_VLLSCTRL_REG) && FSL_FEATURE_SMC_USE_VLLSCTRL_REG) || \ + (defined(FSL_FEATURE_SMC_USE_STOPCTRL_VLLSM) && FSL_FEATURE_SMC_USE_STOPCTRL_VLLSM) || \ + (defined(FSL_FEATURE_SMC_HAS_LLS_SUBMODE) && FSL_FEATURE_SMC_HAS_LLS_SUBMODE) +/*! + * @brief VLLS/LLS stop sub mode definition + */ +typedef enum _smc_stop_submode +{ + kSMC_StopSub0 = 0U, /*!< Stop submode 0, for VLLS0/LLS0. */ + kSMC_StopSub1 = 1U, /*!< Stop submode 1, for VLLS1/LLS1. */ + kSMC_StopSub2 = 2U, /*!< Stop submode 2, for VLLS2/LLS2. */ + kSMC_StopSub3 = 3U /*!< Stop submode 3, for VLLS3/LLS3. */ +} smc_stop_submode_t; +#endif + +/*! + * @brief Partial STOP option + */ +typedef enum _smc_partial_stop_mode +{ + kSMC_PartialStop = 0U, /*!< STOP - Normal Stop mode*/ + kSMC_PartialStop1 = 1U, /*!< Partial Stop with both system and bus clocks disabled*/ + kSMC_PartialStop2 = 2U, /*!< Partial Stop with system clock disabled and bus clock enabled*/ +} smc_partial_stop_option_t; + +/*! + * @brief SMC configuration status + */ +enum _smc_status +{ + kStatus_SMC_StopAbort = MAKE_STATUS(kStatusGroup_POWER, 0) /*!< Entering Stop mode is abort*/ +}; + +#if (defined(FSL_FEATURE_SMC_HAS_VERID) && FSL_FEATURE_SMC_HAS_VERID) +/*! + * @brief IP version ID definition. + */ +typedef struct _smc_version_id +{ + uint16_t feature; /*!< Feature Specification Number. */ + uint8_t minor; /*!< Minor version number. */ + uint8_t major; /*!< Major version number. */ +} smc_version_id_t; +#endif /* FSL_FEATURE_SMC_HAS_VERID */ + +#if (defined(FSL_FEATURE_SMC_HAS_PARAM) && FSL_FEATURE_SMC_HAS_PARAM) +/*! + * @brief IP parameter definition. + */ +typedef struct _smc_param +{ + bool hsrunEnable; /*!< HSRUN mode enable. */ + bool llsEnable; /*!< LLS mode enable. */ + bool lls2Enable; /*!< LLS2 mode enable. */ + bool vlls0Enable; /*!< VLLS0 mode enable. */ +} smc_param_t; +#endif /* FSL_FEATURE_SMC_HAS_PARAM */ + +#if (defined(FSL_FEATURE_SMC_HAS_LLS_SUBMODE) && FSL_FEATURE_SMC_HAS_LLS_SUBMODE) || \ + (defined(FSL_FEATURE_SMC_HAS_LPOPO) && FSL_FEATURE_SMC_HAS_LPOPO) +/*! + * @brief SMC Low-Leakage Stop power mode config + */ +typedef struct _smc_power_mode_lls_config +{ +#if (defined(FSL_FEATURE_SMC_HAS_LLS_SUBMODE) && FSL_FEATURE_SMC_HAS_LLS_SUBMODE) + smc_stop_submode_t subMode; /*!< Low-leakage Stop sub-mode */ +#endif +#if (defined(FSL_FEATURE_SMC_HAS_LPOPO) && FSL_FEATURE_SMC_HAS_LPOPO) + bool enableLpoClock; /*!< Enable LPO clock in LLS mode */ +#endif +} smc_power_mode_lls_config_t; +#endif /* (FSL_FEATURE_SMC_HAS_LLS_SUBMODE || FSL_FEATURE_SMC_HAS_LPOPO) */ + +#if (defined(FSL_FEATURE_SMC_HAS_VERY_LOW_LEAKAGE_STOP_MODE) && FSL_FEATURE_SMC_HAS_VERY_LOW_LEAKAGE_STOP_MODE) +/*! + * @brief SMC Very Low-Leakage Stop power mode config + */ +typedef struct _smc_power_mode_vlls_config +{ +#if (defined(FSL_FEATURE_SMC_USE_VLLSCTRL_REG) && FSL_FEATURE_SMC_USE_VLLSCTRL_REG) || \ + (defined(FSL_FEATURE_SMC_USE_STOPCTRL_VLLSM) && FSL_FEATURE_SMC_USE_STOPCTRL_VLLSM) || \ + (defined(FSL_FEATURE_SMC_HAS_LLS_SUBMODE) && FSL_FEATURE_SMC_HAS_LLS_SUBMODE) + smc_stop_submode_t subMode; /*!< Very Low-leakage Stop sub-mode */ +#endif +#if (defined(FSL_FEATURE_SMC_HAS_PORPO) && FSL_FEATURE_SMC_HAS_PORPO) + bool enablePorDetectInVlls0; /*!< Enable Power on reset detect in VLLS mode */ +#endif +#if (defined(FSL_FEATURE_SMC_HAS_RAM2_POWER_OPTION) && FSL_FEATURE_SMC_HAS_RAM2_POWER_OPTION) + bool enableRam2InVlls2; /*!< Enable RAM2 power in VLLS2 */ +#endif +#if (defined(FSL_FEATURE_SMC_HAS_LPOPO) && FSL_FEATURE_SMC_HAS_LPOPO) + bool enableLpoClock; /*!< Enable LPO clock in VLLS mode */ +#endif +} smc_power_mode_vlls_config_t; +#endif + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus */ + +/*! @name System mode controller APIs*/ +/*@{*/ + +#if (defined(FSL_FEATURE_SMC_HAS_VERID) && FSL_FEATURE_SMC_HAS_VERID) +/*! + * @brief Gets the SMC version ID. + * + * This function gets the SMC version ID, including major version number, + * minor version number and feature specification number. + * + * @param base SMC peripheral base address. + * @param versionId Pointer to version ID structure. + */ +static inline void SMC_GetVersionId(SMC_Type *base, smc_version_id_t *versionId) +{ + *((uint32_t *)versionId) = base->VERID; +} +#endif /* FSL_FEATURE_SMC_HAS_VERID */ + +#if (defined(FSL_FEATURE_SMC_HAS_PARAM) && FSL_FEATURE_SMC_HAS_PARAM) +/*! + * @brief Gets the SMC parameter. + * + * This function gets the SMC parameter, including the enabled power mdoes. + * + * @param base SMC peripheral base address. + * @param param Pointer to SMC param structure. + */ +void SMC_GetParam(SMC_Type *base, smc_param_t *param); +#endif + +/*! + * @brief Configures all power mode protection settings. + * + * This function configures the power mode protection settings for + * supported power modes in the specified chip family. The available power modes + * are defined in the smc_power_mode_protection_t. This should be done at an early + * system level initialization stage. See the reference manual for details. + * This register can only write once after the power reset. + * + * The allowed modes are passed as bit map, for example, to allow LLS and VLLS, + * use SMC_SetPowerModeProtection(kSMC_AllowPowerModeVlls | kSMC_AllowPowerModeVlps). + * To allow all modes, use SMC_SetPowerModeProtection(kSMC_AllowPowerModeAll). + * + * @param base SMC peripheral base address. + * @param allowedModes Bitmap of the allowed power modes. + */ +static inline void SMC_SetPowerModeProtection(SMC_Type *base, uint8_t allowedModes) +{ + base->PMPROT = allowedModes; +} + +/*! + * @brief Gets the current power mode status. + * + * This function returns the current power mode stat. Once application + * switches the power mode, it should always check the stat to check whether it + * runs into the specified mode or not. An application should check + * this mode before switching to a different mode. The system requires that + * only certain modes can switch to other specific modes. See the + * reference manual for details and the smc_power_state_t for information about + * the power stat. + * + * @param base SMC peripheral base address. + * @return Current power mode status. + */ +static inline smc_power_state_t SMC_GetPowerModeState(SMC_Type *base) +{ + return (smc_power_state_t)base->PMSTAT; +} + +/*! + * @brief Configure the system to RUN power mode. + * + * @param base SMC peripheral base address. + * @return SMC configuration error code. + */ +status_t SMC_SetPowerModeRun(SMC_Type *base); + +#if (defined(FSL_FEATURE_SMC_HAS_HIGH_SPEED_RUN_MODE) && FSL_FEATURE_SMC_HAS_HIGH_SPEED_RUN_MODE) +/*! + * @brief Configure the system to HSRUN power mode. + * + * @param base SMC peripheral base address. + * @return SMC configuration error code. + */ +status_t SMC_SetPowerModeHsrun(SMC_Type *base); +#endif /* FSL_FEATURE_SMC_HAS_HIGH_SPEED_RUN_MODE */ + +/*! + * @brief Configure the system to WAIT power mode. + * + * @param base SMC peripheral base address. + * @return SMC configuration error code. + */ +status_t SMC_SetPowerModeWait(SMC_Type *base); + +/*! + * @brief Configure the system to Stop power mode. + * + * @param base SMC peripheral base address. + * @param option Partial Stop mode option. + * @return SMC configuration error code. + */ +status_t SMC_SetPowerModeStop(SMC_Type *base, smc_partial_stop_option_t option); + +#if (defined(FSL_FEATURE_SMC_HAS_LPWUI) && FSL_FEATURE_SMC_HAS_LPWUI) +/*! + * @brief Configure the system to VLPR power mode. + * + * @param base SMC peripheral base address. + * @param wakeupMode Enter Normal Run mode if true, else stay in VLPR mode. + * @return SMC configuration error code. + */ +status_t SMC_SetPowerModeVlpr(SMC_Type *base, bool wakeupMode); +#else +/*! + * @brief Configure the system to VLPR power mode. + * + * @param base SMC peripheral base address. + * @return SMC configuration error code. + */ +status_t SMC_SetPowerModeVlpr(SMC_Type *base); +#endif /* FSL_FEATURE_SMC_HAS_LPWUI */ + +/*! + * @brief Configure the system to VLPW power mode. + * + * @param base SMC peripheral base address. + * @return SMC configuration error code. + */ +status_t SMC_SetPowerModeVlpw(SMC_Type *base); + +/*! + * @brief Configure the system to VLPS power mode. + * + * @param base SMC peripheral base address. + * @return SMC configuration error code. + */ +status_t SMC_SetPowerModeVlps(SMC_Type *base); + +#if (defined(FSL_FEATURE_SMC_HAS_LOW_LEAKAGE_STOP_MODE) && FSL_FEATURE_SMC_HAS_LOW_LEAKAGE_STOP_MODE) +#if ((defined(FSL_FEATURE_SMC_HAS_LLS_SUBMODE) && FSL_FEATURE_SMC_HAS_LLS_SUBMODE) || \ + (defined(FSL_FEATURE_SMC_HAS_LPOPO) && FSL_FEATURE_SMC_HAS_LPOPO)) +/*! + * @brief Configure the system to LLS power mode. + * + * @param base SMC peripheral base address. + * @param config The LLS power mode configuration structure + * @return SMC configuration error code. + */ +status_t SMC_SetPowerModeLls(SMC_Type *base, const smc_power_mode_lls_config_t *config); +#else +/*! + * @brief Configure the system to LLS power mode. + * + * @param base SMC peripheral base address. + * @return SMC configuration error code. + */ +status_t SMC_SetPowerModeLls(SMC_Type *base); +#endif +#endif /* FSL_FEATURE_SMC_HAS_LOW_LEAKAGE_STOP_MODE */ + +#if (defined(FSL_FEATURE_SMC_HAS_VERY_LOW_LEAKAGE_STOP_MODE) && FSL_FEATURE_SMC_HAS_VERY_LOW_LEAKAGE_STOP_MODE) +/*! + * @brief Configure the system to VLLS power mode. + * + * @param base SMC peripheral base address. + * @param config The VLLS power mode configuration structure. + * @return SMC configuration error code. + */ +status_t SMC_SetPowerModeVlls(SMC_Type *base, const smc_power_mode_vlls_config_t *config); +#endif /* FSL_FEATURE_SMC_HAS_VERY_LOW_LEAKAGE_STOP_MODE */ + +/*@}*/ + +#if defined(__cplusplus) +} +#endif /* __cplusplus */ + +/*! @}*/ + +#endif /* _FSL_SMC_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_tpm.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_tpm.c new file mode 100644 index 00000000000..0571adbf638 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_tpm.c @@ -0,0 +1,729 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_tpm.h" + +/******************************************************************************* + * Definitions + ******************************************************************************/ +#define TPM_COMBINE_SHIFT (8U) + +/******************************************************************************* + * Prototypes + ******************************************************************************/ +/*! + * @brief Gets the instance from the base address + * + * @param base TPM peripheral base address + * + * @return The TPM instance + */ +static uint32_t TPM_GetInstance(TPM_Type *base); + +/******************************************************************************* + * Variables + ******************************************************************************/ +/*! @brief Pointers to TPM bases for each instance. */ +static TPM_Type *const s_tpmBases[] = TPM_BASE_PTRS; + +/*! @brief Pointers to TPM clocks for each instance. */ +static const clock_ip_name_t s_tpmClocks[] = TPM_CLOCKS; + +/******************************************************************************* + * Code + ******************************************************************************/ +static uint32_t TPM_GetInstance(TPM_Type *base) +{ + uint32_t instance; + uint32_t tpmArrayCount = (sizeof(s_tpmBases) / sizeof(s_tpmBases[0])); + + /* Find the instance index from base address mappings. */ + for (instance = 0; instance < tpmArrayCount; instance++) + { + if (s_tpmBases[instance] == base) + { + break; + } + } + + assert(instance < tpmArrayCount); + + return instance; +} + +void TPM_Init(TPM_Type *base, const tpm_config_t *config) +{ + assert(config); + + /* Enable the module clock */ + CLOCK_EnableClock(s_tpmClocks[TPM_GetInstance(base)]); + +#if defined(FSL_FEATURE_TPM_HAS_GLOBAL) && FSL_FEATURE_TPM_HAS_GLOBAL + /* TPM reset is available on certain SoC's */ + TPM_Reset(base); +#endif + + /* Set the clock prescale factor */ + base->SC = TPM_SC_PS(config->prescale); + + /* Setup the counter operation */ + base->CONF = TPM_CONF_DOZEEN(config->enableDoze) | + TPM_CONF_GTBEEN(config->useGlobalTimeBase) | TPM_CONF_CROT(config->enableReloadOnTrigger) | + TPM_CONF_CSOT(config->enableStartOnTrigger) | TPM_CONF_CSOO(config->enableStopOnOverflow) | +#if defined(FSL_FEATURE_TPM_HAS_PAUSE_COUNTER_ON_TRIGGER) && FSL_FEATURE_TPM_HAS_PAUSE_COUNTER_ON_TRIGGER + TPM_CONF_CPOT(config->enablePauseOnTrigger) | +#endif +#if defined(FSL_FEATURE_TPM_HAS_EXTERNAL_TRIGGER_SELECTION) && FSL_FEATURE_TPM_HAS_EXTERNAL_TRIGGER_SELECTION + TPM_CONF_TRGSRC(config->triggerSource) | +#endif + TPM_CONF_TRGSEL(config->triggerSelect); + if (config->enableDebugMode) + { + base->CONF |= TPM_CONF_DBGMODE_MASK; + } + else + { + base->CONF &= ~TPM_CONF_DBGMODE_MASK; + } +} + +void TPM_Deinit(TPM_Type *base) +{ + /* Stop the counter */ + base->SC &= ~TPM_SC_CMOD_MASK; + /* Gate the TPM clock */ + CLOCK_DisableClock(s_tpmClocks[TPM_GetInstance(base)]); +} + +void TPM_GetDefaultConfig(tpm_config_t *config) +{ + assert(config); + + /* TPM clock divide by 1 */ + config->prescale = kTPM_Prescale_Divide_1; + /* Use internal TPM counter as timebase */ + config->useGlobalTimeBase = false; + /* TPM counter continues in doze mode */ + config->enableDoze = false; + /* TPM counter pauses when in debug mode */ + config->enableDebugMode = false; + /* TPM counter will not be reloaded on input trigger */ + config->enableReloadOnTrigger = false; + /* TPM counter continues running after overflow */ + config->enableStopOnOverflow = false; + /* TPM counter starts immediately once it is enabled */ + config->enableStartOnTrigger = false; +#if defined(FSL_FEATURE_TPM_HAS_PAUSE_COUNTER_ON_TRIGGER) && FSL_FEATURE_TPM_HAS_PAUSE_COUNTER_ON_TRIGGER + config->enablePauseOnTrigger = false; +#endif + /* Choose trigger select 0 as input trigger for controlling counter operation */ + config->triggerSelect = kTPM_Trigger_Select_0; +#if defined(FSL_FEATURE_TPM_HAS_EXTERNAL_TRIGGER_SELECTION) && FSL_FEATURE_TPM_HAS_EXTERNAL_TRIGGER_SELECTION + /* Choose external trigger source to control counter operation */ + config->triggerSource = kTPM_TriggerSource_External; +#endif +} + +status_t TPM_SetupPwm(TPM_Type *base, + const tpm_chnl_pwm_signal_param_t *chnlParams, + uint8_t numOfChnls, + tpm_pwm_mode_t mode, + uint32_t pwmFreq_Hz, + uint32_t srcClock_Hz) +{ + assert(chnlParams); + assert(pwmFreq_Hz); + assert(numOfChnls); + assert(srcClock_Hz); + + uint32_t mod; + uint32_t tpmClock = (srcClock_Hz / (1U << (base->SC & TPM_SC_PS_MASK))); + uint16_t cnv; + uint8_t i; + +#if defined(FSL_FEATURE_TPM_HAS_QDCTRL) && FSL_FEATURE_TPM_HAS_QDCTRL + /* Clear quadrature Decoder mode because in quadrature Decoder mode PWM doesn't operate*/ + base->QDCTRL &= ~TPM_QDCTRL_QUADEN_MASK; +#endif + + switch (mode) + { + case kTPM_EdgeAlignedPwm: +#if defined(FSL_FEATURE_TPM_HAS_COMBINE) && FSL_FEATURE_TPM_HAS_COMBINE + case kTPM_CombinedPwm: +#endif + base->SC &= ~TPM_SC_CPWMS_MASK; + mod = (tpmClock / pwmFreq_Hz) - 1; + break; + case kTPM_CenterAlignedPwm: + base->SC |= TPM_SC_CPWMS_MASK; + mod = tpmClock / (pwmFreq_Hz * 2); + break; + default: + return kStatus_Fail; + } + + /* Return an error in case we overflow the registers, probably would require changing + * clock source to get the desired frequency */ + if (mod > 65535U) + { + return kStatus_Fail; + } + /* Set the PWM period */ + base->MOD = mod; + + /* Setup each TPM channel */ + for (i = 0; i < numOfChnls; i++) + { + /* Return error if requested dutycycle is greater than the max allowed */ + if (chnlParams->dutyCyclePercent > 100) + { + return kStatus_Fail; + } +#if defined(FSL_FEATURE_TPM_HAS_COMBINE) && FSL_FEATURE_TPM_HAS_COMBINE + if (mode == kTPM_CombinedPwm) + { + uint16_t cnvFirstEdge; + + /* This check is added for combined mode as the channel number should be the pair number */ + if (chnlParams->chnlNumber >= (FSL_FEATURE_TPM_CHANNEL_COUNTn(base) / 2)) + { + return kStatus_Fail; + } + + /* Return error if requested value is greater than the max allowed */ + if (chnlParams->firstEdgeDelayPercent > 100) + { + return kStatus_Fail; + } + /* Configure delay of the first edge */ + if (chnlParams->firstEdgeDelayPercent == 0) + { + /* No delay for the first edge */ + cnvFirstEdge = 0; + } + else + { + cnvFirstEdge = (mod * chnlParams->firstEdgeDelayPercent) / 100; + } + /* Configure dutycycle */ + if (chnlParams->dutyCyclePercent == 0) + { + /* Signal stays low */ + cnv = 0; + cnvFirstEdge = 0; + } + else + { + cnv = (mod * chnlParams->dutyCyclePercent) / 100; + /* For 100% duty cycle */ + if (cnv >= mod) + { + cnv = mod + 1; + } + } + + /* Set the combine bit for the channel pair */ + base->COMBINE |= (1U << (TPM_COMBINE_COMBINE0_SHIFT + (TPM_COMBINE_SHIFT * chnlParams->chnlNumber))); + + /* When switching mode, disable channel n first */ + base->CONTROLS[chnlParams->chnlNumber * 2].CnSC &= + ~(TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK); + + /* Wait till mode change to disable channel is acknowledged */ + while ((base->CONTROLS[chnlParams->chnlNumber * 2].CnSC & + (TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK))) + { + } + + /* Set the requested PWM mode for channel n, PWM output requires mode select to be set to 2 */ + base->CONTROLS[chnlParams->chnlNumber * 2].CnSC |= + ((chnlParams->level << TPM_CnSC_ELSA_SHIFT) | (2U << TPM_CnSC_MSA_SHIFT)); + + /* Wait till mode change is acknowledged */ + while (!(base->CONTROLS[chnlParams->chnlNumber * 2].CnSC & + (TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK))) + { + } + /* Set the channel pair values */ + base->CONTROLS[chnlParams->chnlNumber * 2].CnV = cnvFirstEdge; + + /* When switching mode, disable channel n + 1 first */ + base->CONTROLS[(chnlParams->chnlNumber * 2) + 1].CnSC &= + ~(TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK); + + /* Wait till mode change to disable channel is acknowledged */ + while ((base->CONTROLS[(chnlParams->chnlNumber * 2) + 1].CnSC & + (TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK))) + { + } + + /* Set the requested PWM mode for channel n + 1, PWM output requires mode select to be set to 2 */ + base->CONTROLS[(chnlParams->chnlNumber * 2) + 1].CnSC |= + ((chnlParams->level << TPM_CnSC_ELSA_SHIFT) | (2U << TPM_CnSC_MSA_SHIFT)); + + /* Wait till mode change is acknowledged */ + while (!(base->CONTROLS[(chnlParams->chnlNumber * 2) + 1].CnSC & + (TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK))) + { + } + /* Set the channel pair values */ + base->CONTROLS[(chnlParams->chnlNumber * 2) + 1].CnV = cnvFirstEdge + cnv; + } + else + { +#endif + if (chnlParams->dutyCyclePercent == 0) + { + /* Signal stays low */ + cnv = 0; + } + else + { + cnv = (mod * chnlParams->dutyCyclePercent) / 100; + /* For 100% duty cycle */ + if (cnv >= mod) + { + cnv = mod + 1; + } + } + + /* When switching mode, disable channel first */ + base->CONTROLS[chnlParams->chnlNumber].CnSC &= + ~(TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK); + + /* Wait till mode change to disable channel is acknowledged */ + while ((base->CONTROLS[chnlParams->chnlNumber].CnSC & + (TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK))) + { + } + + /* Set the requested PWM mode, PWM output requires mode select to be set to 2 */ + base->CONTROLS[chnlParams->chnlNumber].CnSC |= + ((chnlParams->level << TPM_CnSC_ELSA_SHIFT) | (2U << TPM_CnSC_MSA_SHIFT)); + + /* Wait till mode change is acknowledged */ + while (!(base->CONTROLS[chnlParams->chnlNumber].CnSC & + (TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK))) + { + } + base->CONTROLS[chnlParams->chnlNumber].CnV = cnv; +#if defined(FSL_FEATURE_TPM_HAS_COMBINE) && FSL_FEATURE_TPM_HAS_COMBINE + } +#endif + + chnlParams++; + } + + return kStatus_Success; +} + +void TPM_UpdatePwmDutycycle(TPM_Type *base, + tpm_chnl_t chnlNumber, + tpm_pwm_mode_t currentPwmMode, + uint8_t dutyCyclePercent) +{ + assert(chnlNumber < FSL_FEATURE_TPM_CHANNEL_COUNTn(base)); + + uint16_t cnv, mod; + + mod = base->MOD; +#if defined(FSL_FEATURE_TPM_HAS_COMBINE) && FSL_FEATURE_TPM_HAS_COMBINE + if (currentPwmMode == kTPM_CombinedPwm) + { + uint16_t cnvFirstEdge; + + /* This check is added for combined mode as the channel number should be the pair number */ + if (chnlNumber >= (FSL_FEATURE_TPM_CHANNEL_COUNTn(base) / 2)) + { + return; + } + cnv = (mod * dutyCyclePercent) / 100; + cnvFirstEdge = base->CONTROLS[chnlNumber * 2].CnV; + /* For 100% duty cycle */ + if (cnv >= mod) + { + cnv = mod + 1; + } + base->CONTROLS[(chnlNumber * 2) + 1].CnV = cnvFirstEdge + cnv; + } + else + { +#endif + cnv = (mod * dutyCyclePercent) / 100; + /* For 100% duty cycle */ + if (cnv >= mod) + { + cnv = mod + 1; + } + base->CONTROLS[chnlNumber].CnV = cnv; +#if defined(FSL_FEATURE_TPM_HAS_COMBINE) && FSL_FEATURE_TPM_HAS_COMBINE + } +#endif +} + +void TPM_UpdateChnlEdgeLevelSelect(TPM_Type *base, tpm_chnl_t chnlNumber, uint8_t level) +{ + assert(chnlNumber < FSL_FEATURE_TPM_CHANNEL_COUNTn(base)); + + uint32_t reg = base->CONTROLS[chnlNumber].CnSC & ~(TPM_CnSC_CHF_MASK); + + /* When switching mode, disable channel first */ + base->CONTROLS[chnlNumber].CnSC &= + ~(TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK); + + /* Wait till mode change to disable channel is acknowledged */ + while ((base->CONTROLS[chnlNumber].CnSC & + (TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK))) + { + } + + /* Clear the field and write the new level value */ + reg &= ~(TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK); + reg |= ((uint32_t)level << TPM_CnSC_ELSA_SHIFT) & (TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK); + + base->CONTROLS[chnlNumber].CnSC = reg; + + /* Wait till mode change is acknowledged */ + reg &= (TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK); + while (reg != (base->CONTROLS[chnlNumber].CnSC & + (TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK))) + { + } +} + +void TPM_SetupInputCapture(TPM_Type *base, tpm_chnl_t chnlNumber, tpm_input_capture_edge_t captureMode) +{ + assert(chnlNumber < FSL_FEATURE_TPM_CHANNEL_COUNTn(base)); + +#if defined(FSL_FEATURE_TPM_HAS_QDCTRL) && FSL_FEATURE_TPM_HAS_QDCTRL + /* Clear quadrature Decoder mode for channel 0 or 1*/ + if (chnlNumber == 0 || chnlNumber == 1) + { + base->QDCTRL &= ~TPM_QDCTRL_QUADEN_MASK; + } +#endif + +#if defined(FSL_FEATURE_TPM_HAS_COMBINE) && FSL_FEATURE_TPM_HAS_COMBINE + /* Clear the combine bit for chnlNumber */ + base->COMBINE &= ~(1U << TPM_COMBINE_COMBINE1_SHIFT *(chnlNumber/2)); +#endif + + /* When switching mode, disable channel first */ + base->CONTROLS[chnlNumber].CnSC &= + ~(TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK); + + /* Wait till mode change to disable channel is acknowledged */ + while ((base->CONTROLS[chnlNumber].CnSC & + (TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK))) + { + } + + /* Set the requested input capture mode */ + base->CONTROLS[chnlNumber].CnSC |= captureMode; + + /* Wait till mode change is acknowledged */ + while (!(base->CONTROLS[chnlNumber].CnSC & + (TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK))) + { + } +} + +void TPM_SetupOutputCompare(TPM_Type *base, + tpm_chnl_t chnlNumber, + tpm_output_compare_mode_t compareMode, + uint32_t compareValue) +{ + assert(chnlNumber < FSL_FEATURE_TPM_CHANNEL_COUNTn(base)); + +#if defined(FSL_FEATURE_TPM_HAS_QDCTRL) && FSL_FEATURE_TPM_HAS_QDCTRL + /* Clear quadrature Decoder mode for channel 0 or 1 */ + if (chnlNumber == 0 || chnlNumber == 1) + { + base->QDCTRL &= ~TPM_QDCTRL_QUADEN_MASK; + } +#endif + + /* When switching mode, disable channel first */ + base->CONTROLS[chnlNumber].CnSC &= + ~(TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK); + + /* Wait till mode change to disable channel is acknowledged */ + while ((base->CONTROLS[chnlNumber].CnSC & + (TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK))) + { + } + + /* Setup the channel output behaviour when a match occurs with the compare value */ + base->CONTROLS[chnlNumber].CnSC |= compareMode; + + /* Setup the compare value */ + base->CONTROLS[chnlNumber].CnV = compareValue; + + /* Wait till mode change is acknowledged */ + while (!(base->CONTROLS[chnlNumber].CnSC & + (TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK))) + { + } +} + +#if defined(FSL_FEATURE_TPM_HAS_COMBINE) && FSL_FEATURE_TPM_HAS_COMBINE +void TPM_SetupDualEdgeCapture(TPM_Type *base, + tpm_chnl_t chnlPairNumber, + const tpm_dual_edge_capture_param_t *edgeParam, + uint32_t filterValue) +{ + assert(edgeParam); + assert(chnlPairNumber < FSL_FEATURE_TPM_CHANNEL_COUNTn(base)/2); + + uint32_t reg; + /* Clear quadrature Decoder mode for channel 0 or 1*/ +#if defined(FSL_FEATURE_TPM_HAS_QDCTRL) && FSL_FEATURE_TPM_HAS_QDCTRL + if (chnlPairNumber == 0) + { + base->QDCTRL &= ~TPM_QDCTRL_QUADEN_MASK; + } +#endif + + /* Unlock: When switching mode, disable channel first */ + base->CONTROLS[chnlPairNumber * 2].CnSC &= + ~(TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK); + + /* Wait till mode change to disable channel is acknowledged */ + while ((base->CONTROLS[chnlPairNumber * 2].CnSC & + (TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK))) + { + } + + base->CONTROLS[chnlPairNumber * 2 + 1].CnSC &= + ~(TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK); + + /* Wait till mode change to disable channel is acknowledged */ + while ((base->CONTROLS[chnlPairNumber * 2 + 1].CnSC & + (TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK))) + { + } + + /* Now, the registers for input mode can be operated. */ + if (edgeParam->enableSwap) + { + /* Set the combine and swap bits for the channel pair */ + base->COMBINE |= (TPM_COMBINE_COMBINE0_MASK | TPM_COMBINE_COMSWAP0_MASK) + << (TPM_COMBINE_SHIFT * chnlPairNumber); + + /* Input filter setup for channel n+1 input */ + reg = base->FILTER; + reg &= ~(TPM_FILTER_CH0FVAL_MASK << (TPM_FILTER_CH1FVAL_SHIFT * (chnlPairNumber + 1))); + reg |= (filterValue << (TPM_FILTER_CH1FVAL_SHIFT * (chnlPairNumber + 1))); + base->FILTER = reg; + } + else + { + reg = base->COMBINE; + /* Clear the swap bit for the channel pair */ + reg &= ~(TPM_COMBINE_COMSWAP0_MASK << (TPM_COMBINE_COMSWAP0_SHIFT * chnlPairNumber)); + + /* Set the combine bit for the channel pair */ + reg |= TPM_COMBINE_COMBINE0_MASK << (TPM_COMBINE_SHIFT * chnlPairNumber); + base->COMBINE = reg; + + /* Input filter setup for channel n input */ + reg = base->FILTER; + reg &= ~(TPM_FILTER_CH0FVAL_MASK << (TPM_FILTER_CH1FVAL_SHIFT * chnlPairNumber)); + reg |= (filterValue << (TPM_FILTER_CH1FVAL_SHIFT * chnlPairNumber)); + base->FILTER = reg; + } + + /* Setup the edge detection from channel n */ + base->CONTROLS[chnlPairNumber * 2].CnSC |= edgeParam->currChanEdgeMode; + + /* Wait till mode change is acknowledged */ + while (!(base->CONTROLS[chnlPairNumber * 2].CnSC & + (TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK))) + { + } + + /* Setup the edge detection from channel n+1 */ + base->CONTROLS[(chnlPairNumber * 2) + 1].CnSC |= edgeParam->nextChanEdgeMode; + + /* Wait till mode change is acknowledged */ + while (!(base->CONTROLS[(chnlPairNumber * 2) + 1].CnSC & + (TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK))) + { + } +} +#endif + +#if defined(FSL_FEATURE_TPM_HAS_QDCTRL) && FSL_FEATURE_TPM_HAS_QDCTRL +void TPM_SetupQuadDecode(TPM_Type *base, + const tpm_phase_params_t *phaseAParams, + const tpm_phase_params_t *phaseBParams, + tpm_quad_decode_mode_t quadMode) +{ + assert(phaseAParams); + assert(phaseBParams); + + base->CONTROLS[0].CnSC &= + ~(TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK); + + /* Wait till mode change to disable channel is acknowledged */ + while ((base->CONTROLS[0].CnSC & + (TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK))) + { + } + uint32_t reg; + + /* Set Phase A filter value */ + reg = base->FILTER; + reg &= ~(TPM_FILTER_CH0FVAL_MASK); + reg |= TPM_FILTER_CH0FVAL(phaseAParams->phaseFilterVal); + base->FILTER = reg; + +#if defined(FSL_FEATURE_TPM_HAS_POL) && FSL_FEATURE_TPM_HAS_POL + /* Set Phase A polarity */ + if (phaseAParams->phasePolarity) + { + base->POL |= TPM_POL_POL0_MASK; + } + else + { + base->POL &= ~TPM_POL_POL0_MASK; + } +#endif + + base->CONTROLS[1].CnSC &= + ~(TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK); + + /* Wait till mode change to disable channel is acknowledged */ + while ((base->CONTROLS[1].CnSC & + (TPM_CnSC_MSA_MASK | TPM_CnSC_MSB_MASK | TPM_CnSC_ELSA_MASK | TPM_CnSC_ELSB_MASK))) + { + } + /* Set Phase B filter value */ + reg = base->FILTER; + reg &= ~(TPM_FILTER_CH1FVAL_MASK); + reg |= TPM_FILTER_CH1FVAL(phaseBParams->phaseFilterVal); + base->FILTER = reg; +#if defined(FSL_FEATURE_TPM_HAS_POL) && FSL_FEATURE_TPM_HAS_POL + /* Set Phase B polarity */ + if (phaseBParams->phasePolarity) + { + base->POL |= TPM_POL_POL1_MASK; + } + else + { + base->POL &= ~TPM_POL_POL1_MASK; + } +#endif + + /* Set Quadrature mode */ + reg = base->QDCTRL; + reg &= ~(TPM_QDCTRL_QUADMODE_MASK); + reg |= TPM_QDCTRL_QUADMODE(quadMode); + base->QDCTRL = reg; + + /* Enable Quad decode */ + base->QDCTRL |= TPM_QDCTRL_QUADEN_MASK; +} + +#endif + +void TPM_EnableInterrupts(TPM_Type *base, uint32_t mask) +{ + uint32_t chnlInterrupts = (mask & 0xFF); + uint8_t chnlNumber = 0; + + /* Enable the timer overflow interrupt */ + if (mask & kTPM_TimeOverflowInterruptEnable) + { + base->SC |= TPM_SC_TOIE_MASK; + } + + /* Enable the channel interrupts */ + while (chnlInterrupts) + { + if (chnlInterrupts & 0x1) + { + base->CONTROLS[chnlNumber].CnSC |= TPM_CnSC_CHIE_MASK; + } + chnlNumber++; + chnlInterrupts = chnlInterrupts >> 1U; + } +} + +void TPM_DisableInterrupts(TPM_Type *base, uint32_t mask) +{ + uint32_t chnlInterrupts = (mask & 0xFF); + uint8_t chnlNumber = 0; + + /* Disable the timer overflow interrupt */ + if (mask & kTPM_TimeOverflowInterruptEnable) + { + base->SC &= ~TPM_SC_TOIE_MASK; + } + + /* Disable the channel interrupts */ + while (chnlInterrupts) + { + if (chnlInterrupts & 0x1) + { + base->CONTROLS[chnlNumber].CnSC &= ~TPM_CnSC_CHIE_MASK; + } + chnlNumber++; + chnlInterrupts = chnlInterrupts >> 1U; + } +} + +uint32_t TPM_GetEnabledInterrupts(TPM_Type *base) +{ + uint32_t enabledInterrupts = 0; + int8_t chnlCount = FSL_FEATURE_TPM_CHANNEL_COUNTn(base); + + /* The CHANNEL_COUNT macro returns -1 if it cannot match the TPM instance */ + assert(chnlCount != -1); + + /* Check if timer overflow interrupt is enabled */ + if (base->SC & TPM_SC_TOIE_MASK) + { + enabledInterrupts |= kTPM_TimeOverflowInterruptEnable; + } + + /* Check if the channel interrupts are enabled */ + while (chnlCount > 0) + { + chnlCount--; + if (base->CONTROLS[chnlCount].CnSC & TPM_CnSC_CHIE_MASK) + { + enabledInterrupts |= (1U << chnlCount); + } + } + + return enabledInterrupts; +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_tpm.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_tpm.h new file mode 100644 index 00000000000..e83a92ab52d --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_tpm.h @@ -0,0 +1,589 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FSL_TPM_H_ +#define _FSL_TPM_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup tpm + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +#define FSL_TPM_DRIVER_VERSION (MAKE_VERSION(2, 0, 2)) /*!< Version 2.0.2 */ +/*@}*/ + +/*! + * @brief List of TPM channels. + * @note Actual number of available channels is SoC dependent + */ +typedef enum _tpm_chnl +{ + kTPM_Chnl_0 = 0U, /*!< TPM channel number 0*/ + kTPM_Chnl_1, /*!< TPM channel number 1 */ + kTPM_Chnl_2, /*!< TPM channel number 2 */ + kTPM_Chnl_3, /*!< TPM channel number 3 */ + kTPM_Chnl_4, /*!< TPM channel number 4 */ + kTPM_Chnl_5, /*!< TPM channel number 5 */ + kTPM_Chnl_6, /*!< TPM channel number 6 */ + kTPM_Chnl_7 /*!< TPM channel number 7 */ +} tpm_chnl_t; + +/*! @brief TPM PWM operation modes */ +typedef enum _tpm_pwm_mode +{ + kTPM_EdgeAlignedPwm = 0U, /*!< Edge aligned PWM */ + kTPM_CenterAlignedPwm, /*!< Center aligned PWM */ +#if defined(FSL_FEATURE_TPM_HAS_COMBINE) && FSL_FEATURE_TPM_HAS_COMBINE + kTPM_CombinedPwm /*!< Combined PWM */ +#endif +} tpm_pwm_mode_t; + +/*! @brief TPM PWM output pulse mode: high-true, low-true or no output */ +typedef enum _tpm_pwm_level_select +{ + kTPM_NoPwmSignal = 0U, /*!< No PWM output on pin */ + kTPM_LowTrue, /*!< Low true pulses */ + kTPM_HighTrue /*!< High true pulses */ +} tpm_pwm_level_select_t; + +/*! @brief Options to configure a TPM channel's PWM signal */ +typedef struct _tpm_chnl_pwm_signal_param +{ + tpm_chnl_t chnlNumber; /*!< TPM channel to configure. + In combined mode (available in some SoC's, this represents the + channel pair number */ + tpm_pwm_level_select_t level; /*!< PWM output active level select */ + uint8_t dutyCyclePercent; /*!< PWM pulse width, value should be between 0 to 100 + 0=inactive signal(0% duty cycle)... + 100=always active signal (100% duty cycle)*/ +#if defined(FSL_FEATURE_TPM_HAS_COMBINE) && FSL_FEATURE_TPM_HAS_COMBINE + uint8_t firstEdgeDelayPercent; /*!< Used only in combined PWM mode to generate asymmetrical PWM. + Specifies the delay to the first edge in a PWM period. + If unsure, leave as 0; Should be specified as + percentage of the PWM period */ +#endif +} tpm_chnl_pwm_signal_param_t; + +/*! + * @brief Trigger options available. + * + * This is used for both internal & external trigger sources (external option available in certain SoC's) + * + * @note The actual trigger options available is SoC-specific. + */ +typedef enum _tpm_trigger_select +{ + kTPM_Trigger_Select_0 = 0U, + kTPM_Trigger_Select_1, + kTPM_Trigger_Select_2, + kTPM_Trigger_Select_3, + kTPM_Trigger_Select_4, + kTPM_Trigger_Select_5, + kTPM_Trigger_Select_6, + kTPM_Trigger_Select_7, + kTPM_Trigger_Select_8, + kTPM_Trigger_Select_9, + kTPM_Trigger_Select_10, + kTPM_Trigger_Select_11, + kTPM_Trigger_Select_12, + kTPM_Trigger_Select_13, + kTPM_Trigger_Select_14, + kTPM_Trigger_Select_15 +} tpm_trigger_select_t; + +#if defined(FSL_FEATURE_TPM_HAS_EXTERNAL_TRIGGER_SELECTION) && FSL_FEATURE_TPM_HAS_EXTERNAL_TRIGGER_SELECTION +/*! + * @brief Trigger source options available + * + * @note This selection is available only on some SoC's. For SoC's without this selection, the only + * trigger source available is internal triger. + */ +typedef enum _tpm_trigger_source +{ + kTPM_TriggerSource_External = 0U, /*!< Use external trigger input */ + kTPM_TriggerSource_Internal /*!< Use internal trigger */ +} tpm_trigger_source_t; +#endif + +/*! @brief TPM output compare modes */ +typedef enum _tpm_output_compare_mode +{ + kTPM_NoOutputSignal = (1U << TPM_CnSC_MSA_SHIFT), /*!< No channel output when counter reaches CnV */ + kTPM_ToggleOnMatch = ((1U << TPM_CnSC_MSA_SHIFT) | (1U << TPM_CnSC_ELSA_SHIFT)), /*!< Toggle output */ + kTPM_ClearOnMatch = ((1U << TPM_CnSC_MSA_SHIFT) | (2U << TPM_CnSC_ELSA_SHIFT)), /*!< Clear output */ + kTPM_SetOnMatch = ((1U << TPM_CnSC_MSA_SHIFT) | (3U << TPM_CnSC_ELSA_SHIFT)), /*!< Set output */ + kTPM_HighPulseOutput = ((3U << TPM_CnSC_MSA_SHIFT) | (1U << TPM_CnSC_ELSA_SHIFT)), /*!< Pulse output high */ + kTPM_LowPulseOutput = ((3U << TPM_CnSC_MSA_SHIFT) | (2U << TPM_CnSC_ELSA_SHIFT)) /*!< Pulse output low */ +} tpm_output_compare_mode_t; + +/*! @brief TPM input capture edge */ +typedef enum _tpm_input_capture_edge +{ + kTPM_RisingEdge = (1U << TPM_CnSC_ELSA_SHIFT), /*!< Capture on rising edge only */ + kTPM_FallingEdge = (2U << TPM_CnSC_ELSA_SHIFT), /*!< Capture on falling edge only */ + kTPM_RiseAndFallEdge = (3U << TPM_CnSC_ELSA_SHIFT) /*!< Capture on rising or falling edge */ +} tpm_input_capture_edge_t; + +#if defined(FSL_FEATURE_TPM_HAS_COMBINE) && FSL_FEATURE_TPM_HAS_COMBINE +/*! + * @brief TPM dual edge capture parameters + * + * @note This mode is available only on some SoC's. + */ +typedef struct _tpm_dual_edge_capture_param +{ + bool enableSwap; /*!< true: Use channel n+1 input, channel n input is ignored; + false: Use channel n input, channel n+1 input is ignored */ + tpm_input_capture_edge_t currChanEdgeMode; /*!< Input capture edge select for channel n */ + tpm_input_capture_edge_t nextChanEdgeMode; /*!< Input capture edge select for channel n+1 */ +} tpm_dual_edge_capture_param_t; +#endif + +#if defined(FSL_FEATURE_TPM_HAS_QDCTRL) && FSL_FEATURE_TPM_HAS_QDCTRL +/*! + * @brief TPM quadrature decode modes + * + * @note This mode is available only on some SoC's. + */ +typedef enum _tpm_quad_decode_mode +{ + kTPM_QuadPhaseEncode = 0U, /*!< Phase A and Phase B encoding mode */ + kTPM_QuadCountAndDir /*!< Count and direction encoding mode */ +} tpm_quad_decode_mode_t; + +/*! @brief TPM quadrature phase polarities */ +typedef enum _tpm_phase_polarity +{ + kTPM_QuadPhaseNormal = 0U, /*!< Phase input signal is not inverted */ + kTPM_QuadPhaseInvert /*!< Phase input signal is inverted */ +} tpm_phase_polarity_t; + +/*! @brief TPM quadrature decode phase parameters */ +typedef struct _tpm_phase_param +{ + uint32_t phaseFilterVal; /*!< Filter value, filter is disabled when the value is zero */ + tpm_phase_polarity_t phasePolarity; /*!< Phase polarity */ +} tpm_phase_params_t; +#endif + +/*! @brief TPM clock source selection*/ +typedef enum _tpm_clock_source +{ + kTPM_SystemClock = 1U, /*!< System clock */ + kTPM_ExternalClock /*!< External clock */ +} tpm_clock_source_t; + +/*! @brief TPM prescale value selection for the clock source*/ +typedef enum _tpm_clock_prescale +{ + kTPM_Prescale_Divide_1 = 0U, /*!< Divide by 1 */ + kTPM_Prescale_Divide_2, /*!< Divide by 2 */ + kTPM_Prescale_Divide_4, /*!< Divide by 4 */ + kTPM_Prescale_Divide_8, /*!< Divide by 8 */ + kTPM_Prescale_Divide_16, /*!< Divide by 16 */ + kTPM_Prescale_Divide_32, /*!< Divide by 32 */ + kTPM_Prescale_Divide_64, /*!< Divide by 64 */ + kTPM_Prescale_Divide_128 /*!< Divide by 128 */ +} tpm_clock_prescale_t; + +/*! + * @brief TPM config structure + * + * This structure holds the configuration settings for the TPM peripheral. To initialize this + * structure to reasonable defaults, call the TPM_GetDefaultConfig() function and pass a + * pointer to your config structure instance. + * + * The config struct can be made const so it resides in flash + */ +typedef struct _tpm_config +{ + tpm_clock_prescale_t prescale; /*!< Select TPM clock prescale value */ + bool useGlobalTimeBase; /*!< true: Use of an external global time base is enabled; + false: disabled */ + tpm_trigger_select_t triggerSelect; /*!< Input trigger to use for controlling the counter operation */ +#if defined(FSL_FEATURE_TPM_HAS_EXTERNAL_TRIGGER_SELECTION) && FSL_FEATURE_TPM_HAS_EXTERNAL_TRIGGER_SELECTION + tpm_trigger_source_t triggerSource; /*!< Decides if we use external or internal trigger. */ +#endif + bool enableDoze; /*!< true: TPM counter is paused in doze mode; + false: TPM counter continues in doze mode */ + bool enableDebugMode; /*!< true: TPM counter continues in debug mode; + false: TPM counter is paused in debug mode */ + bool enableReloadOnTrigger; /*!< true: TPM counter is reloaded on trigger; + false: TPM counter not reloaded */ + bool enableStopOnOverflow; /*!< true: TPM counter stops after overflow; + false: TPM counter continues running after overflow */ + bool enableStartOnTrigger; /*!< true: TPM counter only starts when a trigger is detected; + false: TPM counter starts immediately */ +#if defined(FSL_FEATURE_TPM_HAS_PAUSE_COUNTER_ON_TRIGGER) && FSL_FEATURE_TPM_HAS_PAUSE_COUNTER_ON_TRIGGER + bool enablePauseOnTrigger; /*!< true: TPM counter will pause while trigger remains asserted; + false: TPM counter continues running */ +#endif +} tpm_config_t; + +/*! @brief List of TPM interrupts */ +typedef enum _tpm_interrupt_enable +{ + kTPM_Chnl0InterruptEnable = (1U << 0), /*!< Channel 0 interrupt.*/ + kTPM_Chnl1InterruptEnable = (1U << 1), /*!< Channel 1 interrupt.*/ + kTPM_Chnl2InterruptEnable = (1U << 2), /*!< Channel 2 interrupt.*/ + kTPM_Chnl3InterruptEnable = (1U << 3), /*!< Channel 3 interrupt.*/ + kTPM_Chnl4InterruptEnable = (1U << 4), /*!< Channel 4 interrupt.*/ + kTPM_Chnl5InterruptEnable = (1U << 5), /*!< Channel 5 interrupt.*/ + kTPM_Chnl6InterruptEnable = (1U << 6), /*!< Channel 6 interrupt.*/ + kTPM_Chnl7InterruptEnable = (1U << 7), /*!< Channel 7 interrupt.*/ + kTPM_TimeOverflowInterruptEnable = (1U << 8) /*!< Time overflow interrupt.*/ +} tpm_interrupt_enable_t; + +/*! @brief List of TPM flags */ +typedef enum _tpm_status_flags +{ + kTPM_Chnl0Flag = (1U << 0), /*!< Channel 0 flag */ + kTPM_Chnl1Flag = (1U << 1), /*!< Channel 1 flag */ + kTPM_Chnl2Flag = (1U << 2), /*!< Channel 2 flag */ + kTPM_Chnl3Flag = (1U << 3), /*!< Channel 3 flag */ + kTPM_Chnl4Flag = (1U << 4), /*!< Channel 4 flag */ + kTPM_Chnl5Flag = (1U << 5), /*!< Channel 5 flag */ + kTPM_Chnl6Flag = (1U << 6), /*!< Channel 6 flag */ + kTPM_Chnl7Flag = (1U << 7), /*!< Channel 7 flag */ + kTPM_TimeOverflowFlag = (1U << 8) /*!< Time overflow flag */ +} tpm_status_flags_t; + +/******************************************************************************* + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @name Initialization and deinitialization + * @{ + */ + +/*! + * @brief Ungates the TPM clock and configures the peripheral for basic operation. + * + * @note This API should be called at the beginning of the application using the TPM driver. + * + * @param base TPM peripheral base address + * @param config Pointer to user's TPM config structure. + */ +void TPM_Init(TPM_Type *base, const tpm_config_t *config); + +/*! + * @brief Stops the counter and gates the TPM clock + * + * @param base TPM peripheral base address + */ +void TPM_Deinit(TPM_Type *base); + +/*! + * @brief Fill in the TPM config struct with the default settings + * + * The default values are: + * @code + * config->prescale = kTPM_Prescale_Divide_1; + * config->useGlobalTimeBase = false; + * config->dozeEnable = false; + * config->dbgMode = false; + * config->enableReloadOnTrigger = false; + * config->enableStopOnOverflow = false; + * config->enableStartOnTrigger = false; + *#if FSL_FEATURE_TPM_HAS_PAUSE_COUNTER_ON_TRIGGER + * config->enablePauseOnTrigger = false; + *#endif + * config->triggerSelect = kTPM_Trigger_Select_0; + *#if FSL_FEATURE_TPM_HAS_EXTERNAL_TRIGGER_SELECTION + * config->triggerSource = kTPM_TriggerSource_External; + *#endif + * @endcode + * @param config Pointer to user's TPM config structure. + */ +void TPM_GetDefaultConfig(tpm_config_t *config); + +/*! @}*/ + +/*! + * @name Channel mode operations + * @{ + */ + +/*! + * @brief Configures the PWM signal parameters + * + * User calls this function to configure the PWM signals period, mode, dutycycle and edge. Use this + * function to configure all the TPM channels that will be used to output a PWM signal + * + * @param base TPM peripheral base address + * @param chnlParams Array of PWM channel parameters to configure the channel(s) + * @param numOfChnls Number of channels to configure, this should be the size of the array passed in + * @param mode PWM operation mode, options available in enumeration ::tpm_pwm_mode_t + * @param pwmFreq_Hz PWM signal frequency in Hz + * @param srcClock_Hz TPM counter clock in Hz + * + * @return kStatus_Success if the PWM setup was successful, + * kStatus_Error on failure + */ +status_t TPM_SetupPwm(TPM_Type *base, + const tpm_chnl_pwm_signal_param_t *chnlParams, + uint8_t numOfChnls, + tpm_pwm_mode_t mode, + uint32_t pwmFreq_Hz, + uint32_t srcClock_Hz); + +/*! + * @brief Update the duty cycle of an active PWM signal + * + * @param base TPM peripheral base address + * @param chnlNumber The channel number. In combined mode, this represents + * the channel pair number + * @param currentPwmMode The current PWM mode set during PWM setup + * @param dutyCyclePercent New PWM pulse width, value should be between 0 to 100 + * 0=inactive signal(0% duty cycle)... + * 100=active signal (100% duty cycle) + */ +void TPM_UpdatePwmDutycycle(TPM_Type *base, + tpm_chnl_t chnlNumber, + tpm_pwm_mode_t currentPwmMode, + uint8_t dutyCyclePercent); + +/*! + * @brief Update the edge level selection for a channel + * + * @param base TPM peripheral base address + * @param chnlNumber The channel number + * @param level The level to be set to the ELSnB:ELSnA field; valid values are 00, 01, 10, 11. + * See the appropriate SoC reference manual for details about this field. + */ +void TPM_UpdateChnlEdgeLevelSelect(TPM_Type *base, tpm_chnl_t chnlNumber, uint8_t level); + +/*! + * @brief Enables capturing an input signal on the channel using the function parameters. + * + * When the edge specified in the captureMode argument occurs on the channel, the TPM counter is captured into + * the CnV register. The user has to read the CnV register separately to get this value. + * + * @param base TPM peripheral base address + * @param chnlNumber The channel number + * @param captureMode Specifies which edge to capture + */ +void TPM_SetupInputCapture(TPM_Type *base, tpm_chnl_t chnlNumber, tpm_input_capture_edge_t captureMode); + +/*! + * @brief Configures the TPM to generate timed pulses. + * + * When the TPM counter matches the value of compareVal argument (this is written into CnV reg), the channel + * output is changed based on what is specified in the compareMode argument. + * + * @param base TPM peripheral base address + * @param chnlNumber The channel number + * @param compareMode Action to take on the channel output when the compare condition is met + * @param compareValue Value to be programmed in the CnV register. + */ +void TPM_SetupOutputCompare(TPM_Type *base, + tpm_chnl_t chnlNumber, + tpm_output_compare_mode_t compareMode, + uint32_t compareValue); + +#if defined(FSL_FEATURE_TPM_HAS_COMBINE) && FSL_FEATURE_TPM_HAS_COMBINE +/*! + * @brief Configures the dual edge capture mode of the TPM. + * + * This function allows to measure a pulse width of the signal on the input of channel of a + * channel pair. The filter function is disabled if the filterVal argument passed is zero. + * + * @param base TPM peripheral base address + * @param chnlPairNumber The TPM channel pair number; options are 0, 1, 2, 3 + * @param edgeParam Sets up the dual edge capture function + * @param filterValue Filter value, specify 0 to disable filter. + */ +void TPM_SetupDualEdgeCapture(TPM_Type *base, + tpm_chnl_t chnlPairNumber, + const tpm_dual_edge_capture_param_t *edgeParam, + uint32_t filterValue); +#endif + +#if defined(FSL_FEATURE_TPM_HAS_QDCTRL) && FSL_FEATURE_TPM_HAS_QDCTRL +/*! + * @brief Configures the parameters and activates the quadrature decode mode. + * + * @param base TPM peripheral base address + * @param phaseAParams Phase A configuration parameters + * @param phaseBParams Phase B configuration parameters + * @param quadMode Selects encoding mode used in quadrature decoder mode + */ +void TPM_SetupQuadDecode(TPM_Type *base, + const tpm_phase_params_t *phaseAParams, + const tpm_phase_params_t *phaseBParams, + tpm_quad_decode_mode_t quadMode); +#endif + +/*! @}*/ + +/*! + * @name Interrupt Interface + * @{ + */ + +/*! + * @brief Enables the selected TPM interrupts. + * + * @param base TPM peripheral base address + * @param mask The interrupts to enable. This is a logical OR of members of the + * enumeration ::tpm_interrupt_enable_t + */ +void TPM_EnableInterrupts(TPM_Type *base, uint32_t mask); + +/*! + * @brief Disables the selected TPM interrupts. + * + * @param base TPM peripheral base address + * @param mask The interrupts to disable. This is a logical OR of members of the + * enumeration ::tpm_interrupt_enable_t + */ +void TPM_DisableInterrupts(TPM_Type *base, uint32_t mask); + +/*! + * @brief Gets the enabled TPM interrupts. + * + * @param base TPM peripheral base address + * + * @return The enabled interrupts. This is the logical OR of members of the + * enumeration ::tpm_interrupt_enable_t + */ +uint32_t TPM_GetEnabledInterrupts(TPM_Type *base); + +/*! @}*/ + +/*! + * @name Status Interface + * @{ + */ + +/*! + * @brief Gets the TPM status flags + * + * @param base TPM peripheral base address + * + * @return The status flags. This is the logical OR of members of the + * enumeration ::tpm_status_flags_t + */ +static inline uint32_t TPM_GetStatusFlags(TPM_Type *base) +{ + return base->STATUS; +} + +/*! + * @brief Clears the TPM status flags + * + * @param base TPM peripheral base address + * @param mask The status flags to clear. This is a logical OR of members of the + * enumeration ::tpm_status_flags_t + */ +static inline void TPM_ClearStatusFlags(TPM_Type *base, uint32_t mask) +{ + /* Clear the status flags */ + base->STATUS = mask; +} + +/*! @}*/ + +/*! + * @name Timer Start and Stop + * @{ + */ + +/*! + * @brief Starts the TPM counter. + * + * + * @param base TPM peripheral base address + * @param clockSource TPM clock source; once clock source is set the counter will start running + */ +static inline void TPM_StartTimer(TPM_Type *base, tpm_clock_source_t clockSource) +{ + uint32_t reg = base->SC; + + reg &= ~(TPM_SC_CMOD_MASK); + reg |= TPM_SC_CMOD(clockSource); + base->SC = reg; +} + +/*! + * @brief Stops the TPM counter. + * + * @param base TPM peripheral base address + */ +static inline void TPM_StopTimer(TPM_Type *base) +{ + /* Set clock source to none to disable counter */ + base->SC &= ~(TPM_SC_CMOD_MASK); + + /* Wait till this reads as zero acknowledging the counter is disabled */ + while (base->SC & TPM_SC_CMOD_MASK) + { + } +} + +/*! @}*/ + +#if defined(FSL_FEATURE_TPM_HAS_GLOBAL) && FSL_FEATURE_TPM_HAS_GLOBAL +/*! + * @brief Performs a software reset on the TPM module. + * + * Reset all internal logic and registers, except the Global Register. Remains set until cleared by software.. + * + * @note TPM software reset is available on certain SoC's only + * + * @param base TPM peripheral base address + */ +static inline void TPM_Reset(TPM_Type *base) +{ + base->GLOBAL |= TPM_GLOBAL_RST_MASK; + base->GLOBAL &= ~TPM_GLOBAL_RST_MASK; +} +#endif + +#if defined(__cplusplus) +} +#endif + +/*! @}*/ + +#endif /* _FSL_TPM_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_trng.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_trng.c new file mode 100644 index 00000000000..a5fd937dcd5 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_trng.c @@ -0,0 +1,1618 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "fsl_trng.h" + +#if defined(FSL_FEATURE_SOC_TRNG_COUNT) && FSL_FEATURE_SOC_TRNG_COUNT + +/******************************************************************************* + * Definitions + *******************************************************************************/ +/* Default values for user configuration structure.*/ +#if (defined(KW40Z4_SERIES) || defined(KW41Z4_SERIES) || defined(KW31Z4_SERIES) || defined(KW21Z4_SERIES)) +#define TRNG_USER_CONFIG_DEFAULT_OSC_DIV kTRNG_RingOscDiv8 +#elif(defined(KV56F22_SERIES) || defined(KV58F22_SERIES) || defined(KL28Z7_SERIES) || defined(KL81Z7_SERIES) || \ + defined(KL82Z7_SERIES)) +#define TRNG_USER_CONFIG_DEFAULT_OSC_DIV kTRNG_RingOscDiv4 +#elif defined(K81F25615_SERIES) +#define TRNG_USER_CONFIG_DEFAULT_OSC_DIV kTRNG_RingOscDiv2 +#else +#define TRNG_USER_CONFIG_DEFAULT_OSC_DIV kTRNG_RingOscDiv0 +#endif + +#define TRNG_USER_CONFIG_DEFAULT_LOCK 0 +#define TRNG_USER_CONFIG_DEFAULT_ENTROPY_DELAY 3200 +#define TRNG_USER_CONFIG_DEFAULT_SAMPLE_SIZE 2500 +#define TRNG_USER_CONFIG_DEFAULT_SPARSE_BIT_LIMIT 63 +#define TRNG_USER_CONFIG_DEFAULT_RETRY_COUNT 1 +#define TRNG_USER_CONFIG_DEFAULT_RUN_MAX_LIMIT 34 + +#define TRNG_USER_CONFIG_DEFAULT_MONOBIT_MAXIMUM 1384 +#define TRNG_USER_CONFIG_DEFAULT_MONOBIT_MINIMUM (TRNG_USER_CONFIG_DEFAULT_MONOBIT_MAXIMUM - 268) +#define TRNG_USER_CONFIG_DEFAULT_RUNBIT1_MAXIMUM 405 +#define TRNG_USER_CONFIG_DEFAULT_RUNBIT1_MINIMUM (TRNG_USER_CONFIG_DEFAULT_RUNBIT1_MAXIMUM - 178) +#define TRNG_USER_CONFIG_DEFAULT_RUNBIT2_MAXIMUM 220 +#define TRNG_USER_CONFIG_DEFAULT_RUNBIT2_MINIMUM (TRNG_USER_CONFIG_DEFAULT_RUNBIT2_MAXIMUM - 122) +#define TRNG_USER_CONFIG_DEFAULT_RUNBIT3_MAXIMUM 125 +#define TRNG_USER_CONFIG_DEFAULT_RUNBIT3_MINIMUM (TRNG_USER_CONFIG_DEFAULT_RUNBIT3_MAXIMUM - 88) +#define TRNG_USER_CONFIG_DEFAULT_RUNBIT4_MAXIMUM 75 +#define TRNG_USER_CONFIG_DEFAULT_RUNBIT4_MINIMUM (TRNG_USER_CONFIG_DEFAULT_RUNBIT4_MAXIMUM - 64) +#define TRNG_USER_CONFIG_DEFAULT_RUNBIT5_MAXIMUM 47 +#define TRNG_USER_CONFIG_DEFAULT_RUNBIT5_MINIMUM (TRNG_USER_CONFIG_DEFAULT_RUNBIT5_MAXIMUM - 46) +#define TRNG_USER_CONFIG_DEFAULT_RUNBIT6PLUS_MAXIMUM 47 +#define TRNG_USER_CONFIG_DEFAULT_RUNBIT6PLUS_MINIMUM (TRNG_USER_CONFIG_DEFAULT_RUNBIT6PLUS_MAXIMUM - 46) +#define TRNG_USER_CONFIG_DEFAULT_POKER_MAXIMUM 26912 +#define TRNG_USER_CONFIG_DEFAULT_POKER_MINIMUM (TRNG_USER_CONFIG_DEFAULT_POKER_MAXIMUM - 2467) +#define TRNG_USER_CONFIG_DEFAULT_FREQUENCY_MAXIMUM 25600 +#define TRNG_USER_CONFIG_DEFAULT_FREQUENCY_MINIMUM 1600 + +/*! @brief TRNG work mode */ +typedef enum _trng_work_mode +{ + kTRNG_WorkModeRun = 0U, /*!< Run Mode. */ + kTRNG_WorkModeProgram = 1U /*!< Program Mode. */ +} trng_work_mode_t; + +/*! @brief TRNG statistical check type*/ +typedef enum _trng_statistical_check +{ + kTRNG_StatisticalCheckMonobit = + 1U, /*!< Statistical check of number of ones/zero detected during entropy generation. */ + kTRNG_StatisticalCheckRunBit1, /*!< Statistical check of number of runs of length 1 detected during entropy + generation. */ + kTRNG_StatisticalCheckRunBit2, /*!< Statistical check of number of runs of length 2 detected during entropy + generation. */ + kTRNG_StatisticalCheckRunBit3, /*!< Statistical check of number of runs of length 3 detected during entropy + generation. */ + kTRNG_StatisticalCheckRunBit4, /*!< Statistical check of number of runs of length 4 detected during entropy + generation. */ + kTRNG_StatisticalCheckRunBit5, /*!< Statistical check of number of runs of length 5 detected during entropy + generation. */ + kTRNG_StatisticalCheckRunBit6Plus, /*!< Statistical check of number of runs of length 6 or more detected during + entropy generation. */ + kTRNG_StatisticalCheckPoker, /*!< Statistical check of "Poker Test". */ + kTRNG_StatisticalCheckFrequencyCount /*!< Statistical check of entropy sample frequency count. */ +} trng_statistical_check_t; + +/******************************************************************************* + * TRNG_SCMISC - RNG Statistical Check Miscellaneous Register + ******************************************************************************/ +/*! + * @name Register TRNG_SCMISC, field RTY_CT[19:16] (RW) + * + * RETRY COUNT. If a statistical check fails during the TRNG Entropy Generation, + * the RTY_CT value indicates the number of times a retry should occur before + * generating an error. This field is writable only if MCTL[PRGM] bit is 1. This + * field will read zeroes if MCTL[PRGM] = 0. This field is cleared to 1h by writing + * the MCTL[RST_DEF] bit to 1. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_SCMISC_RTY_CT field. */ +#define TRNG_RD_SCMISC_RTY_CT(base) ((TRNG_SCMISC_REG(base) & TRNG_SCMISC_RTY_CT_MASK) >> TRNG_SCMISC_RTY_CT_SHIFT) + +/*! @brief Set the RTY_CT field to a new value. */ +#define TRNG_WR_SCMISC_RTY_CT(base, value) (TRNG_RMW_SCMISC(base, TRNG_SCMISC_RTY_CT_MASK, TRNG_SCMISC_RTY_CT(value))) +/*@}*/ + +/******************************************************************************* + * TRNG_SCML - RNG Statistical Check Monobit Limit Register + ******************************************************************************/ +/*! + * @brief TRNG_SCML - RNG Statistical Check Monobit Limit Register (RW) + * + * Reset value: 0x010C0568U + * + * The RNG Statistical Check Monobit Limit Register defines the allowable + * maximum and minimum number of ones/zero detected during entropy generation. To pass + * the test, the number of ones/zeroes generated must be less than the programmed + * maximum value, and the number of ones/zeroes generated must be greater than + * (maximum - range). If this test fails, the Retry Counter in SCMISC will be + * decremented, and a retry will occur if the Retry Count has not reached zero. If + * the Retry Count has reached zero, an error will be generated. Note that this + * offset (0xBASE_0620) is used as SCML only if MCTL[PRGM] is 1. If MCTL[PRGM] is 0, + * this offset is used as SCMC readback register. + */ +/*! + * @name Constants and macros for entire TRNG_SCML register + */ +/*@{*/ +#define TRNG_SCML_REG(base) ((base)->SCML) +#define TRNG_RD_SCML(base) (TRNG_SCML_REG(base)) +#define TRNG_WR_SCML(base, value) (TRNG_SCML_REG(base) = (value)) +#define TRNG_RMW_SCML(base, mask, value) (TRNG_WR_SCML(base, (TRNG_RD_SCML(base) & ~(mask)) | (value))) +/*@}*/ +/*! + * @name Register TRNG_SCML, field MONO_MAX[15:0] (RW) + * + * Monobit Maximum Limit. Defines the maximum allowable count taken during + * entropy generation. The number of ones/zeroes detected during entropy generation + * must be less than MONO_MAX, else a retry or error will occur. This register is + * cleared to 00056Bh (decimal 1387) by writing the MCTL[RST_DEF] bit to 1. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_SCML_MONO_MAX field. */ +#define TRNG_RD_SCML_MONO_MAX(base) ((TRNG_SCML_REG(base) & TRNG_SCML_MONO_MAX_MASK) >> TRNG_SCML_MONO_MAX_SHIFT) + +/*! @brief Set the MONO_MAX field to a new value. */ +#define TRNG_WR_SCML_MONO_MAX(base, value) (TRNG_RMW_SCML(base, TRNG_SCML_MONO_MAX_MASK, TRNG_SCML_MONO_MAX(value))) +/*@}*/ +/*! + * @name Register TRNG_SCML, field MONO_RNG[31:16] (RW) + * + * Monobit Range. The number of ones/zeroes detected during entropy generation + * must be greater than MONO_MAX - MONO_RNG, else a retry or error will occur. + * This register is cleared to 000112h (decimal 274) by writing the MCTL[RST_DEF] + * bit to 1. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_SCML_MONO_RNG field. */ +#define TRNG_RD_SCML_MONO_RNG(base) ((TRNG_SCML_REG(base) & TRNG_SCML_MONO_RNG_MASK) >> TRNG_SCML_MONO_RNG_SHIFT) + +/*! @brief Set the MONO_RNG field to a new value. */ +#define TRNG_WR_SCML_MONO_RNG(base, value) (TRNG_RMW_SCML(base, TRNG_SCML_MONO_RNG_MASK, TRNG_SCML_MONO_RNG(value))) +/*@}*/ + +/******************************************************************************* + * TRNG_SCR1L - RNG Statistical Check Run Length 1 Limit Register + ******************************************************************************/ + +/*! + * @brief TRNG_SCR1L - RNG Statistical Check Run Length 1 Limit Register (RW) + * + * Reset value: 0x00B20195U + * + * The RNG Statistical Check Run Length 1 Limit Register defines the allowable + * maximum and minimum number of runs of length 1 detected during entropy + * generation. To pass the test, the number of runs of length 1 (for samples of both 0 + * and 1) must be less than the programmed maximum value, and the number of runs of + * length 1 must be greater than (maximum - range). If this test fails, the + * Retry Counter in SCMISC will be decremented, and a retry will occur if the Retry + * Count has not reached zero. If the Retry Count has reached zero, an error will + * be generated. Note that this address (0xBASE_0624) is used as SCR1L only if + * MCTL[PRGM] is 1. If MCTL[PRGM] is 0, this address is used as SCR1C readback + * register. + */ +/*! + * @name Constants and macros for entire TRNG_SCR1L register + */ +/*@{*/ +#define TRNG_SCR1L_REG(base) ((base)->SCR1L) +#define TRNG_RD_SCR1L(base) (TRNG_SCR1L_REG(base)) +#define TRNG_WR_SCR1L(base, value) (TRNG_SCR1L_REG(base) = (value)) +#define TRNG_RMW_SCR1L(base, mask, value) (TRNG_WR_SCR1L(base, (TRNG_RD_SCR1L(base) & ~(mask)) | (value))) +/*@}*/ + +/*! + * @name Register TRNG_SCR1L, field RUN1_MAX[14:0] (RW) + * + * Run Length 1 Maximum Limit. Defines the maximum allowable runs of length 1 + * (for both 0 and 1) detected during entropy generation. The number of runs of + * length 1 detected during entropy generation must be less than RUN1_MAX, else a + * retry or error will occur. This register is cleared to 01E5h (decimal 485) by + * writing the MCTL[RST_DEF] bit to 1. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_SCR1L_RUN1_MAX field. */ +#define TRNG_RD_SCR1L_RUN1_MAX(base) ((TRNG_SCR1L_REG(base) & TRNG_SCR1L_RUN1_MAX_MASK) >> TRNG_SCR1L_RUN1_MAX_SHIFT) + +/*! @brief Set the RUN1_MAX field to a new value. */ +#define TRNG_WR_SCR1L_RUN1_MAX(base, value) (TRNG_RMW_SCR1L(base, TRNG_SCR1L_RUN1_MAX_MASK, TRNG_SCR1L_RUN1_MAX(value))) +/*@}*/ + +/*! + * @name Register TRNG_SCR1L, field RUN1_RNG[30:16] (RW) + * + * Run Length 1 Range. The number of runs of length 1 (for both 0 and 1) + * detected during entropy generation must be greater than RUN1_MAX - RUN1_RNG, else a + * retry or error will occur. This register is cleared to 0102h (decimal 258) by + * writing the MCTL[RST_DEF] bit to 1. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_SCR1L_RUN1_RNG field. */ +#define TRNG_RD_SCR1L_RUN1_RNG(base) ((TRNG_SCR1L_REG(base) & TRNG_SCR1L_RUN1_RNG_MASK) >> TRNG_SCR1L_RUN1_RNG_SHIFT) + +/*! @brief Set the RUN1_RNG field to a new value. */ +#define TRNG_WR_SCR1L_RUN1_RNG(base, value) (TRNG_RMW_SCR1L(base, TRNG_SCR1L_RUN1_RNG_MASK, TRNG_SCR1L_RUN1_RNG(value))) +/*@}*/ + +/******************************************************************************* + * TRNG_SCR2L - RNG Statistical Check Run Length 2 Limit Register + ******************************************************************************/ + +/*! + * @brief TRNG_SCR2L - RNG Statistical Check Run Length 2 Limit Register (RW) + * + * Reset value: 0x007A00DCU + * + * The RNG Statistical Check Run Length 2 Limit Register defines the allowable + * maximum and minimum number of runs of length 2 detected during entropy + * generation. To pass the test, the number of runs of length 2 (for samples of both 0 + * and 1) must be less than the programmed maximum value, and the number of runs of + * length 2 must be greater than (maximum - range). If this test fails, the + * Retry Counter in SCMISC will be decremented, and a retry will occur if the Retry + * Count has not reached zero. If the Retry Count has reached zero, an error will + * be generated. Note that this address (0xBASE_0628) is used as SCR2L only if + * MCTL[PRGM] is 1. If MCTL[PRGM] is 0, this address is used as SCR2C readback + * register. + */ +/*! + * @name Constants and macros for entire TRNG_SCR2L register + */ +/*@{*/ +#define TRNG_SCR2L_REG(base) ((base)->SCR2L) +#define TRNG_RD_SCR2L(base) (TRNG_SCR2L_REG(base)) +#define TRNG_WR_SCR2L(base, value) (TRNG_SCR2L_REG(base) = (value)) +#define TRNG_RMW_SCR2L(base, mask, value) (TRNG_WR_SCR2L(base, (TRNG_RD_SCR2L(base) & ~(mask)) | (value))) +/*@}*/ + +/* + * Constants & macros for individual TRNG_SCR2L bitfields + */ + +/*! + * @name Register TRNG_SCR2L, field RUN2_MAX[13:0] (RW) + * + * Run Length 2 Maximum Limit. Defines the maximum allowable runs of length 2 + * (for both 0 and 1) detected during entropy generation. The number of runs of + * length 2 detected during entropy generation must be less than RUN2_MAX, else a + * retry or error will occur. This register is cleared to 00DCh (decimal 220) by + * writing the MCTL[RST_DEF] bit to 1. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_SCR2L_RUN2_MAX field. */ +#define TRNG_RD_SCR2L_RUN2_MAX(base) ((TRNG_SCR2L_REG(base) & TRNG_SCR2L_RUN2_MAX_MASK) >> TRNG_SCR2L_RUN2_MAX_SHIFT) + +/*! @brief Set the RUN2_MAX field to a new value. */ +#define TRNG_WR_SCR2L_RUN2_MAX(base, value) (TRNG_RMW_SCR2L(base, TRNG_SCR2L_RUN2_MAX_MASK, TRNG_SCR2L_RUN2_MAX(value))) +/*@}*/ + +/*! + * @name Register TRNG_SCR2L, field RUN2_RNG[29:16] (RW) + * + * Run Length 2 Range. The number of runs of length 2 (for both 0 and 1) + * detected during entropy generation must be greater than RUN2_MAX - RUN2_RNG, else a + * retry or error will occur. This register is cleared to 007Ah (decimal 122) by + * writing the MCTL[RST_DEF] bit to 1. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_SCR2L_RUN2_RNG field. */ +#define TRNG_RD_SCR2L_RUN2_RNG(base) ((TRNG_SCR2L_REG(base) & TRNG_SCR2L_RUN2_RNG_MASK) >> TRNG_SCR2L_RUN2_RNG_SHIFT) + +/*! @brief Set the RUN2_RNG field to a new value. */ +#define TRNG_WR_SCR2L_RUN2_RNG(base, value) (TRNG_RMW_SCR2L(base, TRNG_SCR2L_RUN2_RNG_MASK, TRNG_SCR2L_RUN2_RNG(value))) +/*@}*/ + +/******************************************************************************* + * TRNG_SCR3L - RNG Statistical Check Run Length 3 Limit Register + ******************************************************************************/ + +/*! + * @brief TRNG_SCR3L - RNG Statistical Check Run Length 3 Limit Register (RW) + * + * Reset value: 0x0058007DU + * + * The RNG Statistical Check Run Length 3 Limit Register defines the allowable + * maximum and minimum number of runs of length 3 detected during entropy + * generation. To pass the test, the number of runs of length 3 (for samples of both 0 + * and 1) must be less than the programmed maximum value, and the number of runs of + * length 3 must be greater than (maximum - range). If this test fails, the + * Retry Counter in SCMISC will be decremented, and a retry will occur if the Retry + * Count has not reached zero. If the Retry Count has reached zero, an error will + * be generated. Note that this address (0xBASE_062C) is used as SCR3L only if + * MCTL[PRGM] is 1. If MCTL[PRGM] is 0, this address is used as SCR3C readback + * register. + */ +/*! + * @name Constants and macros for entire TRNG_SCR3L register + */ +/*@{*/ +#define TRNG_SCR3L_REG(base) ((base)->SCR3L) +#define TRNG_RD_SCR3L(base) (TRNG_SCR3L_REG(base)) +#define TRNG_WR_SCR3L(base, value) (TRNG_SCR3L_REG(base) = (value)) +#define TRNG_RMW_SCR3L(base, mask, value) (TRNG_WR_SCR3L(base, (TRNG_RD_SCR3L(base) & ~(mask)) | (value))) +/*@}*/ + +/* + * Constants & macros for individual TRNG_SCR3L bitfields + */ + +/*! + * @name Register TRNG_SCR3L, field RUN3_MAX[12:0] (RW) + * + * Run Length 3 Maximum Limit. Defines the maximum allowable runs of length 3 + * (for both 0 and 1) detected during entropy generation. The number of runs of + * length 3 detected during entropy generation must be less than RUN3_MAX, else a + * retry or error will occur. This register is cleared to 007Dh (decimal 125) by + * writing the MCTL[RST_DEF] bit to 1. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_SCR3L_RUN3_MAX field. */ +#define TRNG_RD_SCR3L_RUN3_MAX(base) ((TRNG_SCR3L_REG(base) & TRNG_SCR3L_RUN3_MAX_MASK) >> TRNG_SCR3L_RUN3_MAX_SHIFT) + +/*! @brief Set the RUN3_MAX field to a new value. */ +#define TRNG_WR_SCR3L_RUN3_MAX(base, value) (TRNG_RMW_SCR3L(base, TRNG_SCR3L_RUN3_MAX_MASK, TRNG_SCR3L_RUN3_MAX(value))) +/*@}*/ + +/*! + * @name Register TRNG_SCR3L, field RUN3_RNG[28:16] (RW) + * + * Run Length 3 Range. The number of runs of length 3 (for both 0 and 1) + * detected during entropy generation must be greater than RUN3_MAX - RUN3_RNG, else a + * retry or error will occur. This register is cleared to 0058h (decimal 88) by + * writing the MCTL[RST_DEF] bit to 1. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_SCR3L_RUN3_RNG field. */ +#define TRNG_RD_SCR3L_RUN3_RNG(base) ((TRNG_SCR3L_REG(base) & TRNG_SCR3L_RUN3_RNG_MASK) >> TRNG_SCR3L_RUN3_RNG_SHIFT) + +/*! @brief Set the RUN3_RNG field to a new value. */ +#define TRNG_WR_SCR3L_RUN3_RNG(base, value) (TRNG_RMW_SCR3L(base, TRNG_SCR3L_RUN3_RNG_MASK, TRNG_SCR3L_RUN3_RNG(value))) +/*@}*/ + +/******************************************************************************* + * TRNG_SCR4L - RNG Statistical Check Run Length 4 Limit Register + ******************************************************************************/ + +/*! + * @brief TRNG_SCR4L - RNG Statistical Check Run Length 4 Limit Register (RW) + * + * Reset value: 0x0040004BU + * + * The RNG Statistical Check Run Length 4 Limit Register defines the allowable + * maximum and minimum number of runs of length 4 detected during entropy + * generation. To pass the test, the number of runs of length 4 (for samples of both 0 + * and 1) must be less than the programmed maximum value, and the number of runs of + * length 4 must be greater than (maximum - range). If this test fails, the + * Retry Counter in SCMISC will be decremented, and a retry will occur if the Retry + * Count has not reached zero. If the Retry Count has reached zero, an error will + * be generated. Note that this address (0xBASE_0630) is used as SCR4L only if + * MCTL[PRGM] is 1. If MCTL[PRGM] is 0, this address is used as SCR4C readback + * register. + */ +/*! + * @name Constants and macros for entire TRNG_SCR4L register + */ +/*@{*/ +#define TRNG_SCR4L_REG(base) ((base)->SCR4L) +#define TRNG_RD_SCR4L(base) (TRNG_SCR4L_REG(base)) +#define TRNG_WR_SCR4L(base, value) (TRNG_SCR4L_REG(base) = (value)) +#define TRNG_RMW_SCR4L(base, mask, value) (TRNG_WR_SCR4L(base, (TRNG_RD_SCR4L(base) & ~(mask)) | (value))) +/*@}*/ + +/* + * Constants & macros for individual TRNG_SCR4L bitfields + */ + +/*! + * @name Register TRNG_SCR4L, field RUN4_MAX[11:0] (RW) + * + * Run Length 4 Maximum Limit. Defines the maximum allowable runs of length 4 + * (for both 0 and 1) detected during entropy generation. The number of runs of + * length 4 detected during entropy generation must be less than RUN4_MAX, else a + * retry or error will occur. This register is cleared to 004Bh (decimal 75) by + * writing the MCTL[RST_DEF] bit to 1. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_SCR4L_RUN4_MAX field. */ +#define TRNG_RD_SCR4L_RUN4_MAX(base) ((TRNG_SCR4L_REG(base) & TRNG_SCR4L_RUN4_MAX_MASK) >> TRNG_SCR4L_RUN4_MAX_SHIFT) + +/*! @brief Set the RUN4_MAX field to a new value. */ +#define TRNG_WR_SCR4L_RUN4_MAX(base, value) (TRNG_RMW_SCR4L(base, TRNG_SCR4L_RUN4_MAX_MASK, TRNG_SCR4L_RUN4_MAX(value))) +/*@}*/ + +/*! + * @name Register TRNG_SCR4L, field RUN4_RNG[27:16] (RW) + * + * Run Length 4 Range. The number of runs of length 4 (for both 0 and 1) + * detected during entropy generation must be greater than RUN4_MAX - RUN4_RNG, else a + * retry or error will occur. This register is cleared to 0040h (decimal 64) by + * writing the MCTL[RST_DEF] bit to 1. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_SCR4L_RUN4_RNG field. */ +#define TRNG_RD_SCR4L_RUN4_RNG(base) ((TRNG_SCR4L_REG(base) & TRNG_SCR4L_RUN4_RNG_MASK) >> TRNG_SCR4L_RUN4_RNG_SHIFT) + +/*! @brief Set the RUN4_RNG field to a new value. */ +#define TRNG_WR_SCR4L_RUN4_RNG(base, value) (TRNG_RMW_SCR4L(base, TRNG_SCR4L_RUN4_RNG_MASK, TRNG_SCR4L_RUN4_RNG(value))) +/*@}*/ + +/******************************************************************************* + * TRNG_SCR5L - RNG Statistical Check Run Length 5 Limit Register + ******************************************************************************/ + +/*! + * @brief TRNG_SCR5L - RNG Statistical Check Run Length 5 Limit Register (RW) + * + * Reset value: 0x002E002FU + * + * The RNG Statistical Check Run Length 5 Limit Register defines the allowable + * maximum and minimum number of runs of length 5 detected during entropy + * generation. To pass the test, the number of runs of length 5 (for samples of both 0 + * and 1) must be less than the programmed maximum value, and the number of runs of + * length 5 must be greater than (maximum - range). If this test fails, the + * Retry Counter in SCMISC will be decremented, and a retry will occur if the Retry + * Count has not reached zero. If the Retry Count has reached zero, an error will + * be generated. Note that this address (0xBASE_0634) is used as SCR5L only if + * MCTL[PRGM] is 1. If MCTL[PRGM] is 0, this address is used as SCR5C readback + * register. + */ +/*! + * @name Constants and macros for entire TRNG_SCR5L register + */ +/*@{*/ +#define TRNG_SCR5L_REG(base) ((base)->SCR5L) +#define TRNG_RD_SCR5L(base) (TRNG_SCR5L_REG(base)) +#define TRNG_WR_SCR5L(base, value) (TRNG_SCR5L_REG(base) = (value)) +#define TRNG_RMW_SCR5L(base, mask, value) (TRNG_WR_SCR5L(base, (TRNG_RD_SCR5L(base) & ~(mask)) | (value))) +/*@}*/ + +/* + * Constants & macros for individual TRNG_SCR5L bitfields + */ + +/*! + * @name Register TRNG_SCR5L, field RUN5_MAX[10:0] (RW) + * + * Run Length 5 Maximum Limit. Defines the maximum allowable runs of length 5 + * (for both 0 and 1) detected during entropy generation. The number of runs of + * length 5 detected during entropy generation must be less than RUN5_MAX, else a + * retry or error will occur. This register is cleared to 002Fh (decimal 47) by + * writing the MCTL[RST_DEF] bit to 1. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_SCR5L_RUN5_MAX field. */ +#define TRNG_RD_SCR5L_RUN5_MAX(base) ((TRNG_SCR5L_REG(base) & TRNG_SCR5L_RUN5_MAX_MASK) >> TRNG_SCR5L_RUN5_MAX_SHIFT) + +/*! @brief Set the RUN5_MAX field to a new value. */ +#define TRNG_WR_SCR5L_RUN5_MAX(base, value) (TRNG_RMW_SCR5L(base, TRNG_SCR5L_RUN5_MAX_MASK, TRNG_SCR5L_RUN5_MAX(value))) +/*@}*/ + +/*! + * @name Register TRNG_SCR5L, field RUN5_RNG[26:16] (RW) + * + * Run Length 5 Range. The number of runs of length 5 (for both 0 and 1) + * detected during entropy generation must be greater than RUN5_MAX - RUN5_RNG, else a + * retry or error will occur. This register is cleared to 002Eh (decimal 46) by + * writing the MCTL[RST_DEF] bit to 1. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_SCR5L_RUN5_RNG field. */ +#define TRNG_RD_SCR5L_RUN5_RNG(base) ((TRNG_SCR5L_REG(base) & TRNG_SCR5L_RUN5_RNG_MASK) >> TRNG_SCR5L_RUN5_RNG_SHIFT) + +/*! @brief Set the RUN5_RNG field to a new value. */ +#define TRNG_WR_SCR5L_RUN5_RNG(base, value) (TRNG_RMW_SCR5L(base, TRNG_SCR5L_RUN5_RNG_MASK, TRNG_SCR5L_RUN5_RNG(value))) +/*@}*/ + +/******************************************************************************* + * TRNG_SCR6PL - RNG Statistical Check Run Length 6+ Limit Register + ******************************************************************************/ + +/*! + * @brief TRNG_SCR6PL - RNG Statistical Check Run Length 6+ Limit Register (RW) + * + * Reset value: 0x002E002FU + * + * The RNG Statistical Check Run Length 6+ Limit Register defines the allowable + * maximum and minimum number of runs of length 6 or more detected during entropy + * generation. To pass the test, the number of runs of length 6 or more (for + * samples of both 0 and 1) must be less than the programmed maximum value, and the + * number of runs of length 6 or more must be greater than (maximum - range). If + * this test fails, the Retry Counter in SCMISC will be decremented, and a retry + * will occur if the Retry Count has not reached zero. If the Retry Count has + * reached zero, an error will be generated. Note that this offset (0xBASE_0638) is + * used as SCR6PL only if MCTL[PRGM] is 1. If MCTL[PRGM] is 0, this offset is + * used as SCR6PC readback register. + */ +/*! + * @name Constants and macros for entire TRNG_SCR6PL register + */ +/*@{*/ +#define TRNG_SCR6PL_REG(base) ((base)->SCR6PL) +#define TRNG_RD_SCR6PL(base) (TRNG_SCR6PL_REG(base)) +#define TRNG_WR_SCR6PL(base, value) (TRNG_SCR6PL_REG(base) = (value)) +#define TRNG_RMW_SCR6PL(base, mask, value) (TRNG_WR_SCR6PL(base, (TRNG_RD_SCR6PL(base) & ~(mask)) | (value))) +/*@}*/ + +/* + * Constants & macros for individual TRNG_SCR6PL bitfields + */ + +/*! + * @name Register TRNG_SCR6PL, field RUN6P_MAX[10:0] (RW) + * + * Run Length 6+ Maximum Limit. Defines the maximum allowable runs of length 6 + * or more (for both 0 and 1) detected during entropy generation. The number of + * runs of length 6 or more detected during entropy generation must be less than + * RUN6P_MAX, else a retry or error will occur. This register is cleared to 002Fh + * (decimal 47) by writing the MCTL[RST_DEF] bit to 1. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_SCR6PL_RUN6P_MAX field. */ +#define TRNG_RD_SCR6PL_RUN6P_MAX(base) \ + ((TRNG_SCR6PL_REG(base) & TRNG_SCR6PL_RUN6P_MAX_MASK) >> TRNG_SCR6PL_RUN6P_MAX_SHIFT) + +/*! @brief Set the RUN6P_MAX field to a new value. */ +#define TRNG_WR_SCR6PL_RUN6P_MAX(base, value) \ + (TRNG_RMW_SCR6PL(base, TRNG_SCR6PL_RUN6P_MAX_MASK, TRNG_SCR6PL_RUN6P_MAX(value))) +/*@}*/ + +/*! + * @name Register TRNG_SCR6PL, field RUN6P_RNG[26:16] (RW) + * + * Run Length 6+ Range. The number of runs of length 6 or more (for both 0 and + * 1) detected during entropy generation must be greater than RUN6P_MAX - + * RUN6P_RNG, else a retry or error will occur. This register is cleared to 002Eh + * (decimal 46) by writing the MCTL[RST_DEF] bit to 1. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_SCR6PL_RUN6P_RNG field. */ +#define TRNG_RD_SCR6PL_RUN6P_RNG(base) \ + ((TRNG_SCR6PL_REG(base) & TRNG_SCR6PL_RUN6P_RNG_MASK) >> TRNG_SCR6PL_RUN6P_RNG_SHIFT) + +/*! @brief Set the RUN6P_RNG field to a new value. */ +#define TRNG_WR_SCR6PL_RUN6P_RNG(base, value) \ + (TRNG_RMW_SCR6PL(base, TRNG_SCR6PL_RUN6P_RNG_MASK, TRNG_SCR6PL_RUN6P_RNG(value))) +/*@}*/ + +/******************************************************************************* + * TRNG_PKRMAX - RNG Poker Maximum Limit Register + ******************************************************************************/ + +/*! + * @brief TRNG_PKRMAX - RNG Poker Maximum Limit Register (RW) + * + * Reset value: 0x00006920U + * + * The RNG Poker Maximum Limit Register defines Maximum Limit allowable during + * the TRNG Statistical Check Poker Test. Note that this offset (0xBASE_060C) is + * used as PKRMAX only if MCTL[PRGM] is 1. If MCTL[PRGM] is 0, this offset is used + * as the PKRSQ readback register. + */ +/*! + * @name Constants and macros for entire TRNG_PKRMAX register + */ +/*@{*/ +#define TRNG_PKRMAX_REG(base) ((base)->PKRMAX) +#define TRNG_RD_PKRMAX(base) (TRNG_PKRMAX_REG(base)) +#define TRNG_WR_PKRMAX(base, value) (TRNG_PKRMAX_REG(base) = (value)) +#define TRNG_RMW_PKRMAX(base, mask, value) (TRNG_WR_PKRMAX(base, (TRNG_RD_PKRMAX(base) & ~(mask)) | (value))) +/*@}*/ + +/* + * Constants & macros for individual TRNG_PKRMAX bitfields + */ + +/*! + * @name Register TRNG_PKRMAX, field PKR_MAX[23:0] (RW) + * + * Poker Maximum Limit. During the TRNG Statistical Checks, a "Poker Test" is + * run which requires a maximum and minimum limit. The maximum allowable result is + * programmed in the PKRMAX[PKR_MAX] register. This field is writable only if + * MCTL[PRGM] bit is 1. This register is cleared to 006920h (decimal 26912) by + * writing the MCTL[RST_DEF] bit to 1. Note that the PKRMAX and PKRRNG registers + * combined are used to define the minimum allowable Poker result, which is PKR_MAX - + * PKR_RNG + 1. Note that if MCTL[PRGM] bit is 0, this register address is used + * to read the Poker Test Square Calculation result in register PKRSQ, as defined + * in the following section. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_PKRMAX_PKR_MAX field. */ +#define TRNG_RD_PKRMAX_PKR_MAX(base) ((TRNG_PKRMAX_REG(base) & TRNG_PKRMAX_PKR_MAX_MASK) >> TRNG_PKRMAX_PKR_MAX_SHIFT) + +/*! @brief Set the PKR_MAX field to a new value. */ +#define TRNG_WR_PKRMAX_PKR_MAX(base, value) \ + (TRNG_RMW_PKRMAX(base, TRNG_PKRMAX_PKR_MAX_MASK, TRNG_PKRMAX_PKR_MAX(value))) +/*@}*/ + +/******************************************************************************* + * TRNG_PKRRNG - RNG Poker Range Register + ******************************************************************************/ + +/*! + * @brief TRNG_PKRRNG - RNG Poker Range Register (RW) + * + * Reset value: 0x000009A3U + * + * The RNG Poker Range Register defines the difference between the TRNG Poker + * Maximum Limit and the minimum limit. These limits are used during the TRNG + * Statistical Check Poker Test. + */ +/*! + * @name Constants and macros for entire TRNG_PKRRNG register + */ +/*@{*/ +#define TRNG_PKRRNG_REG(base) ((base)->PKRRNG) +#define TRNG_RD_PKRRNG(base) (TRNG_PKRRNG_REG(base)) +#define TRNG_WR_PKRRNG(base, value) (TRNG_PKRRNG_REG(base) = (value)) +#define TRNG_RMW_PKRRNG(base, mask, value) (TRNG_WR_PKRRNG(base, (TRNG_RD_PKRRNG(base) & ~(mask)) | (value))) +/*@}*/ + +/* + * Constants & macros for individual TRNG_PKRRNG bitfields + */ + +/*! + * @name Register TRNG_PKRRNG, field PKR_RNG[15:0] (RW) + * + * Poker Range. During the TRNG Statistical Checks, a "Poker Test" is run which + * requires a maximum and minimum limit. The maximum is programmed in the + * RTPKRMAX[PKR_MAX] register, and the minimum is derived by subtracting the PKR_RNG + * value from the programmed maximum value. This field is writable only if + * MCTL[PRGM] bit is 1. This field will read zeroes if MCTL[PRGM] = 0. This field is + * cleared to 09A3h (decimal 2467) by writing the MCTL[RST_DEF] bit to 1. Note that + * the minimum allowable Poker result is PKR_MAX - PKR_RNG + 1. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_PKRRNG_PKR_RNG field. */ +#define TRNG_RD_PKRRNG_PKR_RNG(base) ((TRNG_PKRRNG_REG(base) & TRNG_PKRRNG_PKR_RNG_MASK) >> TRNG_PKRRNG_PKR_RNG_SHIFT) + +/*! @brief Set the PKR_RNG field to a new value. */ +#define TRNG_WR_PKRRNG_PKR_RNG(base, value) \ + (TRNG_RMW_PKRRNG(base, TRNG_PKRRNG_PKR_RNG_MASK, TRNG_PKRRNG_PKR_RNG(value))) +/*@}*/ + +/******************************************************************************* + * TRNG_FRQMAX - RNG Frequency Count Maximum Limit Register + ******************************************************************************/ + +/*! + * @brief TRNG_FRQMAX - RNG Frequency Count Maximum Limit Register (RW) + * + * Reset value: 0x00006400U + * + * The RNG Frequency Count Maximum Limit Register defines the maximum allowable + * count taken by the Entropy sample counter during each Entropy sample. During + * any sample period, if the count is greater than this programmed maximum, a + * Frequency Count Fail is flagged in MCTL[FCT_FAIL] and an error is generated. Note + * that this address (061C) is used as FRQMAX only if MCTL[PRGM] is 1. If + * MCTL[PRGM] is 0, this address is used as FRQCNT readback register. + */ +/*! + * @name Constants and macros for entire TRNG_FRQMAX register + */ +/*@{*/ +#define TRNG_FRQMAX_REG(base) ((base)->FRQMAX) +#define TRNG_RD_FRQMAX(base) (TRNG_FRQMAX_REG(base)) +#define TRNG_WR_FRQMAX(base, value) (TRNG_FRQMAX_REG(base) = (value)) +#define TRNG_RMW_FRQMAX(base, mask, value) (TRNG_WR_FRQMAX(base, (TRNG_RD_FRQMAX(base) & ~(mask)) | (value))) +/*@}*/ + +/* + * Constants & macros for individual TRNG_FRQMAX bitfields + */ + +/*! + * @name Register TRNG_FRQMAX, field FRQ_MAX[21:0] (RW) + * + * Frequency Counter Maximum Limit. Defines the maximum allowable count taken + * during each entropy sample. This field is writable only if MCTL[PRGM] bit is 1. + * This register is cleared to 000640h by writing the MCTL[RST_DEF] bit to 1. + * Note that if MCTL[PRGM] bit is 0, this register address is used to read the + * Frequency Count result in register FRQCNT, as defined in the following section. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_FRQMAX_FRQ_MAX field. */ +#define TRNG_RD_FRQMAX_FRQ_MAX(base) ((TRNG_FRQMAX_REG(base) & TRNG_FRQMAX_FRQ_MAX_MASK) >> TRNG_FRQMAX_FRQ_MAX_SHIFT) + +/*! @brief Set the FRQ_MAX field to a new value. */ +#define TRNG_WR_FRQMAX_FRQ_MAX(base, value) \ + (TRNG_RMW_FRQMAX(base, TRNG_FRQMAX_FRQ_MAX_MASK, TRNG_FRQMAX_FRQ_MAX(value))) +/*@}*/ + +/******************************************************************************* + * TRNG_FRQMIN - RNG Frequency Count Minimum Limit Register + ******************************************************************************/ + +/*! + * @brief TRNG_FRQMIN - RNG Frequency Count Minimum Limit Register (RW) + * + * Reset value: 0x00000640U + * + * The RNG Frequency Count Minimum Limit Register defines the minimum allowable + * count taken by the Entropy sample counter during each Entropy sample. During + * any sample period, if the count is less than this programmed minimum, a + * Frequency Count Fail is flagged in MCTL[FCT_FAIL] and an error is generated. + */ +/*! + * @name Constants and macros for entire TRNG_FRQMIN register + */ +/*@{*/ +#define TRNG_FRQMIN_REG(base) ((base)->FRQMIN) +#define TRNG_RD_FRQMIN(base) (TRNG_FRQMIN_REG(base)) +#define TRNG_WR_FRQMIN(base, value) (TRNG_FRQMIN_REG(base) = (value)) +#define TRNG_RMW_FRQMIN(base, mask, value) (TRNG_WR_FRQMIN(base, (TRNG_RD_FRQMIN(base) & ~(mask)) | (value))) +/*@}*/ + +/* + * Constants & macros for individual TRNG_FRQMIN bitfields + */ + +/*! + * @name Register TRNG_FRQMIN, field FRQ_MIN[21:0] (RW) + * + * Frequency Count Minimum Limit. Defines the minimum allowable count taken + * during each entropy sample. This field is writable only if MCTL[PRGM] bit is 1. + * This field will read zeroes if MCTL[PRGM] = 0. This field is cleared to 0000h64 + * by writing the MCTL[RST_DEF] bit to 1. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_FRQMIN_FRQ_MIN field. */ +#define TRNG_RD_FRQMIN_FRQ_MIN(base) ((TRNG_FRQMIN_REG(base) & TRNG_FRQMIN_FRQ_MIN_MASK) >> TRNG_FRQMIN_FRQ_MIN_SHIFT) + +/*! @brief Set the FRQ_MIN field to a new value. */ +#define TRNG_WR_FRQMIN_FRQ_MIN(base, value) \ + (TRNG_RMW_FRQMIN(base, TRNG_FRQMIN_FRQ_MIN_MASK, TRNG_FRQMIN_FRQ_MIN(value))) +/*@}*/ + +/******************************************************************************* + * TRNG_MCTL - RNG Miscellaneous Control Register + ******************************************************************************/ + +/*! + * @brief TRNG_MCTL - RNG Miscellaneous Control Register (RW) + * + * Reset value: 0x00012001U + * + * This register is intended to be used for programming, configuring and testing + * the RNG. It is the main register to read/write, in order to enable Entropy + * generation, to stop entropy generation and to block access to entropy registers. + * This is done via the special TRNG_ACC and PRGM bits below. The RNG + * Miscellaneous Control Register is a read/write register used to control the RNG's True + * Random Number Generator (TRNG) access, operation and test. Note that in many + * cases two RNG registers share the same address, and a particular register at the + * shared address is selected based upon the value in the PRGM field of the MCTL + * register. + */ +/*! + * @name Constants and macros for entire TRNG_MCTL register + */ +/*@{*/ +#define TRNG_MCTL_REG(base) ((base)->MCTL) +#define TRNG_RD_MCTL(base) (TRNG_MCTL_REG(base)) +#define TRNG_WR_MCTL(base, value) (TRNG_MCTL_REG(base) = (value)) +#define TRNG_RMW_MCTL(base, mask, value) (TRNG_WR_MCTL(base, (TRNG_RD_MCTL(base) & ~(mask)) | (value))) +/*@}*/ + +/*! + * @name Register TRNG_MCTL, field FOR_SCLK[7] (RW) + * + * Force System Clock. If set, the system clock is used to operate the TRNG, + * instead of the ring oscillator. This is for test use only, and indeterminate + * results may occur. This bit is writable only if PRGM bit is 1, or PRGM bit is + * being written to 1 simultaneously to writing this bit. This bit is cleared by + * writing the RST_DEF bit to 1. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_MCTL_FOR_SCLK field. */ +#define TRNG_RD_MCTL_FOR_SCLK(base) ((TRNG_MCTL_REG(base) & TRNG_MCTL_FOR_SCLK_MASK) >> TRNG_MCTL_FOR_SCLK_SHIFT) + +/*! @brief Set the FOR_SCLK field to a new value. */ +#define TRNG_WR_MCTL_FOR_SCLK(base, value) \ + (TRNG_RMW_MCTL(base, (TRNG_MCTL_FOR_SCLK_MASK | TRNG_MCTL_ERR_MASK), TRNG_MCTL_FOR_SCLK(value))) +/*@}*/ + +/*! + * @name Register TRNG_MCTL, field OSC_DIV[3:2] (RW) + * + * Oscillator Divide. Determines the amount of dividing done to the ring + * oscillator before it is used by the TRNG.This field is writable only if PRGM bit is + * 1, or PRGM bit is being written to 1 simultaneously to writing this field. This + * field is cleared to 00 by writing the RST_DEF bit to 1. + * + * Values: + * - 0b00 - use ring oscillator with no divide + * - 0b01 - use ring oscillator divided-by-2 + * - 0b10 - use ring oscillator divided-by-4 + * - 0b11 - use ring oscillator divided-by-8 + */ +/*@{*/ +/*! @brief Read current value of the TRNG_MCTL_OSC_DIV field. */ +#define TRNG_RD_MCTL_OSC_DIV(base) ((TRNG_MCTL_REG(base) & TRNG_MCTL_OSC_DIV_MASK) >> TRNG_MCTL_OSC_DIV_SHIFT) + +/*! @brief Set the OSC_DIV field to a new value. */ +#define TRNG_WR_MCTL_OSC_DIV(base, value) \ + (TRNG_RMW_MCTL(base, (TRNG_MCTL_OSC_DIV_MASK | TRNG_MCTL_ERR_MASK), TRNG_MCTL_OSC_DIV(value))) +/*@}*/ + +/*! + * @name Register TRNG_MCTL, field SAMP_MODE[1:0] (RW) + * + * Sample Mode. Determines the method of sampling the ring oscillator while + * generating the Entropy value:This field is writable only if PRGM bit is 1, or PRGM + * bit is being written to 1 simultaneously with writing this field. This field + * is cleared to 01 by writing the RST_DEF bit to 1. + * + * Values: + * - 0b00 - use Von Neumann data into both Entropy shifter and Statistical + * Checker + * - 0b01 - use raw data into both Entropy shifter and Statistical Checker + * - 0b10 - use Von Neumann data into Entropy shifter. Use raw data into + * Statistical Checker + * - 0b11 - reserved. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_MCTL_SAMP_MODE field. */ +#define TRNG_RD_MCTL_SAMP_MODE(base) ((TRNG_MCTL_REG(base) & TRNG_MCTL_SAMP_MODE_MASK) >> TRNG_MCTL_SAMP_MODE_SHIFT) + +/*! @brief Set the SAMP_MODE field to a new value. */ +#define TRNG_WR_MCTL_SAMP_MODE(base, value) \ + (TRNG_RMW_MCTL(base, (TRNG_MCTL_SAMP_MODE_MASK | TRNG_MCTL_ERR_MASK), TRNG_MCTL_SAMP_MODE(value))) +/*@}*/ + +/*! + * @name Register TRNG_MCTL, field PRGM[16] (RW) + * + * Programming Mode Select. When this bit is 1, the TRNG is in Program Mode, + * otherwise it is in Run Mode. No Entropy value will be generated while the TRNG is + * in Program Mode. Note that different RNG registers are accessible at the same + * address depending on whether PRGM is set to 1 or 0. This is noted in the RNG + * register descriptions. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_MCTL_PRGM field. */ +#define TRNG_RD_MCTL_PRGM(base) ((TRNG_MCTL_REG(base) & TRNG_MCTL_PRGM_MASK) >> TRNG_MCTL_PRGM_SHIFT) + +/*! @brief Set the PRGM field to a new value. */ +#define TRNG_WR_MCTL_PRGM(base, value) \ + (TRNG_RMW_MCTL(base, (TRNG_MCTL_PRGM_MASK | TRNG_MCTL_ERR_MASK), TRNG_MCTL_PRGM(value))) +/*@}*/ + +/*! + * @name Register TRNG_MCTL, field RST_DEF[6] (WO) + * + * Reset Defaults. Writing a 1 to this bit clears various TRNG registers, and + * bits within registers, to their default state. This bit is writable only if PRGM + * bit is 1, or PRGM bit is being written to 1 simultaneously to writing this + * bit. Reading this bit always produces a 0. + */ +/*@{*/ +/*! @brief Set the RST_DEF field to a new value. */ +#define TRNG_WR_MCTL_RST_DEF(base, value) \ + (TRNG_RMW_MCTL(base, (TRNG_MCTL_RST_DEF_MASK | TRNG_MCTL_ERR_MASK), TRNG_MCTL_RST_DEF(value))) +/*@}*/ + +/*! + * @name Register TRNG_MCTL, field TRNG_ACC[5] (RW) + * + * TRNG Access Mode. If this bit is set to 1, the TRNG will generate an Entropy + * value that can be read via the ENT0-ENT15 registers. The Entropy value may be + * read once the ENT VAL bit is asserted. Also see ENTa register descriptions + * (For a = 0 to 15). + */ +/*@{*/ +/*! @brief Read current value of the TRNG_MCTL_TRNG_ACC field. */ +#define TRNG_RD_MCTL_TRNG_ACC(base) ((TRNG_MCTL_REG(base) & TRNG_MCTL_TRNG_ACC_MASK) >> TRNG_MCTL_TRNG_ACC_SHIFT) + +/*! @brief Set the TRNG_ACC field to a new value. */ +#define TRNG_WR_MCTL_TRNG_ACC(base, value) \ + (TRNG_RMW_MCTL(base, (TRNG_MCTL_TRNG_ACC_MASK | TRNG_MCTL_ERR_MASK), TRNG_MCTL_TRNG_ACC(value))) +/*@}*/ + +/*! + * @name Register TRNG_MCTL, field TSTOP_OK[13] (RO) + * + * TRNG_OK_TO_STOP. Software should check that this bit is a 1 before + * transitioning RNG to low power mode (RNG clock stopped). RNG turns on the TRNG + * free-running ring oscillator whenever new entropy is being generated and turns off the + * ring oscillator when entropy generation is complete. If the RNG clock is + * stopped while the TRNG ring oscillator is running, the oscillator will continue + * running even though the RNG clock is stopped. TSTOP_OK is asserted when the TRNG + * ring oscillator is not running. and therefore it is ok to stop the RNG clock. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_MCTL_TSTOP_OK field. */ +#define TRNG_RD_MCTL_TSTOP_OK(base) ((TRNG_MCTL_REG(base) & TRNG_MCTL_TSTOP_OK_MASK) >> TRNG_MCTL_TSTOP_OK_SHIFT) +/*@}*/ + +/*! + * @name Register TRNG_MCTL, field ENT_VAL[10] (RO) + * + * Read only: Entropy Valid. Will assert only if TRNG ACC bit is set, and then + * after an entropy value is generated. Will be cleared when ENT15 is read. (ENT0 + * through ENT14 should be read before reading ENT15). + */ +/*@{*/ +/*! @brief Read current value of the TRNG_MCTL_ENT_VAL field. */ +#define TRNG_RD_MCTL_ENT_VAL(base) ((TRNG_MCTL_REG(base) & TRNG_MCTL_ENT_VAL_MASK) >> TRNG_MCTL_ENT_VAL_SHIFT) +/*@}*/ + +/*! + * @name Register TRNG_MCTL, field ERR[12] (W1C) + * + * Read: Error status. 1 = error detected. 0 = no error.Write: Write 1 to clear + * errors. Writing 0 has no effect. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_MCTL_ERR field. */ +#define TRNG_RD_MCTL_ERR(base) ((TRNG_MCTL_REG(base) & TRNG_MCTL_ERR_MASK) >> TRNG_MCTL_ERR_SHIFT) + +/*! @brief Set the ERR field to a new value. */ +#define TRNG_WR_MCTL_ERR(base, value) (TRNG_RMW_MCTL(base, TRNG_MCTL_ERR_MASK, TRNG_MCTL_ERR(value))) +/*@}*/ + +/******************************************************************************* + * TRNG_SDCTL - RNG Seed Control Register + ******************************************************************************/ + +/*! + * @brief TRNG_SDCTL - RNG Seed Control Register (RW) + * + * Reset value: 0x0C8009C4U + * + * The RNG Seed Control Register contains two fields. One field defines the + * length (in system clocks) of each Entropy sample (ENT_DLY), and the other field + * indicates the number of samples that will taken during each TRNG Entropy + * generation (SAMP_SIZE). + */ +/*! + * @name Constants and macros for entire TRNG_SDCTL register + */ +/*@{*/ +#define TRNG_SDCTL_REG(base) ((base)->SDCTL) +#define TRNG_RD_SDCTL(base) (TRNG_SDCTL_REG(base)) +#define TRNG_WR_SDCTL(base, value) (TRNG_SDCTL_REG(base) = (value)) +#define TRNG_RMW_SDCTL(base, mask, value) (TRNG_WR_SDCTL(base, (TRNG_RD_SDCTL(base) & ~(mask)) | (value))) +/*@}*/ + +/* + * Constants & macros for individual TRNG_SDCTL bitfields + */ + +/*! + * @name Register TRNG_SDCTL, field SAMP_SIZE[15:0] (RW) + * + * Sample Size. Defines the total number of Entropy samples that will be taken + * during Entropy generation. This field is writable only if MCTL[PRGM] bit is 1. + * This field will read zeroes if MCTL[PRGM] = 0. This field is cleared to 09C4h + * (decimal 2500) by writing the MCTL[RST_DEF] bit to 1. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_SDCTL_SAMP_SIZE field. */ +#define TRNG_RD_SDCTL_SAMP_SIZE(base) ((TRNG_SDCTL_REG(base) & TRNG_SDCTL_SAMP_SIZE_MASK) >> TRNG_SDCTL_SAMP_SIZE_SHIFT) + +/*! @brief Set the SAMP_SIZE field to a new value. */ +#define TRNG_WR_SDCTL_SAMP_SIZE(base, value) \ + (TRNG_RMW_SDCTL(base, TRNG_SDCTL_SAMP_SIZE_MASK, TRNG_SDCTL_SAMP_SIZE(value))) +/*@}*/ + +/*! + * @name Register TRNG_SDCTL, field ENT_DLY[31:16] (RW) + * + * Entropy Delay. Defines the length (in system clocks) of each Entropy sample + * taken. This field is writable only if MCTL[PRGM] bit is 1. This field will read + * zeroes if MCTL[PRGM] = 0. This field is cleared to 0C80h (decimal 3200) by + * writing the MCTL[RST_DEF] bit to 1. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_SDCTL_ENT_DLY field. */ +#define TRNG_RD_SDCTL_ENT_DLY(base) ((TRNG_SDCTL_REG(base) & TRNG_SDCTL_ENT_DLY_MASK) >> TRNG_SDCTL_ENT_DLY_SHIFT) + +/*! @brief Set the ENT_DLY field to a new value. */ +#define TRNG_WR_SDCTL_ENT_DLY(base, value) (TRNG_RMW_SDCTL(base, TRNG_SDCTL_ENT_DLY_MASK, TRNG_SDCTL_ENT_DLY(value))) +/*@}*/ + +/******************************************************************************* + * TRNG_SBLIM - RNG Sparse Bit Limit Register + ******************************************************************************/ + +/*! + * @brief TRNG_SBLIM - RNG Sparse Bit Limit Register (RW) + * + * Reset value: 0x0000003FU + * + * The RNG Sparse Bit Limit Register is used when Von Neumann sampling is + * selected during Entropy Generation. It defines the maximum number of consecutive Von + * Neumann samples which may be discarded before an error is generated. Note + * that this address (0xBASE_0614) is used as SBLIM only if MCTL[PRGM] is 1. If + * MCTL[PRGM] is 0, this address is used as TOTSAM readback register. + */ +/*! + * @name Constants and macros for entire TRNG_SBLIM register + */ +/*@{*/ +#define TRNG_SBLIM_REG(base) ((base)->SBLIM) +#define TRNG_RD_SBLIM(base) (TRNG_SBLIM_REG(base)) +#define TRNG_WR_SBLIM(base, value) (TRNG_SBLIM_REG(base) = (value)) +#define TRNG_RMW_SBLIM(base, mask, value) (TRNG_WR_SBLIM(base, (TRNG_RD_SBLIM(base) & ~(mask)) | (value))) +/*@}*/ + +/* + * Constants & macros for individual TRNG_SBLIM bitfields + */ + +/*! + * @name Register TRNG_SBLIM, field SB_LIM[9:0] (RW) + * + * Sparse Bit Limit. During Von Neumann sampling (if enabled by MCTL[SAMP_MODE], + * samples are discarded if two consecutive raw samples are both 0 or both 1. If + * this discarding occurs for a long period of time, it indicates that there is + * insufficient Entropy. The Sparse Bit Limit defines the maximum number of + * consecutive samples that may be discarded before an error is generated. This field + * is writable only if MCTL[PRGM] bit is 1. This register is cleared to 03hF by + * writing the MCTL[RST_DEF] bit to 1. Note that if MCTL[PRGM] bit is 0, this + * register address is used to read the Total Samples count in register TOTSAM, as + * defined in the following section. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_SBLIM_SB_LIM field. */ +#define TRNG_RD_SBLIM_SB_LIM(base) ((TRNG_SBLIM_REG(base) & TRNG_SBLIM_SB_LIM_MASK) >> TRNG_SBLIM_SB_LIM_SHIFT) + +/*! @brief Set the SB_LIM field to a new value. */ +#define TRNG_WR_SBLIM_SB_LIM(base, value) (TRNG_RMW_SBLIM(base, TRNG_SBLIM_SB_LIM_MASK, TRNG_SBLIM_SB_LIM(value))) +/*@}*/ + +/******************************************************************************* + * TRNG_SCMISC - RNG Statistical Check Miscellaneous Register + ******************************************************************************/ + +/*! + * @brief TRNG_SCMISC - RNG Statistical Check Miscellaneous Register (RW) + * + * Reset value: 0x0001001FU + * + * The RNG Statistical Check Miscellaneous Register contains the Long Run + * Maximum Limit value and the Retry Count value. This register is accessible only when + * the MCTL[PRGM] bit is 1, otherwise this register will read zeroes, and cannot + * be written. + */ +/*! + * @name Constants and macros for entire TRNG_SCMISC register + */ +/*@{*/ +#define TRNG_SCMISC_REG(base) ((base)->SCMISC) +#define TRNG_RD_SCMISC(base) (TRNG_SCMISC_REG(base)) +#define TRNG_WR_SCMISC(base, value) (TRNG_SCMISC_REG(base) = (value)) +#define TRNG_RMW_SCMISC(base, mask, value) (TRNG_WR_SCMISC(base, (TRNG_RD_SCMISC(base) & ~(mask)) | (value))) +/*@}*/ + +/* + * Constants & macros for individual TRNG_SCMISC bitfields + */ + +/*! + * @name Register TRNG_SCMISC, field LRUN_MAX[7:0] (RW) + * + * LONG RUN MAX LIMIT. This value is the largest allowable number of consecutive + * samples of all 1, or all 0, that is allowed during the Entropy generation. + * This field is writable only if MCTL[PRGM] bit is 1. This field will read zeroes + * if MCTL[PRGM] = 0. This field is cleared to 22h by writing the MCTL[RST_DEF] + * bit to 1. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_SCMISC_LRUN_MAX field. */ +#define TRNG_RD_SCMISC_LRUN_MAX(base) \ + ((TRNG_SCMISC_REG(base) & TRNG_SCMISC_LRUN_MAX_MASK) >> TRNG_SCMISC_LRUN_MAX_SHIFT) + +/*! @brief Set the LRUN_MAX field to a new value. */ +#define TRNG_WR_SCMISC_LRUN_MAX(base, value) \ + (TRNG_RMW_SCMISC(base, TRNG_SCMISC_LRUN_MAX_MASK, TRNG_SCMISC_LRUN_MAX(value))) +/*@}*/ + +/******************************************************************************* + * TRNG_ENT - RNG TRNG Entropy Read Register + ******************************************************************************/ + +/*! + * @brief TRNG_ENT - RNG TRNG Entropy Read Register (RO) + * + * Reset value: 0x00000000U + * + * The RNG TRNG can be programmed to generate an entropy value that is readable + * via the SkyBlue bus. To do this, set the MCTL[TRNG_ACC] bit to 1. Once the + * entropy value has been generated, the MCTL[ENT_VAL] bit will be set to 1. At this + * point, ENT0 through ENT15 may be read to retrieve the 512-bit entropy value. + * Note that once ENT15 is read, the entropy value will be cleared and a new + * value will begin generation, so it is important that ENT15 be read last. These + * registers are readable only when MCTL[PRGM] = 0 (Run Mode), MCTL[TRNG_ACC] = 1 + * (TRNG access mode) and MCTL[ENT_VAL] = 1, otherwise zeroes will be read. + */ +/*! + * @name Constants and macros for entire TRNG_ENT register + */ +/*@{*/ +#define TRNG_ENT_REG(base, index) ((base)->ENT[index]) +#define TRNG_RD_ENT(base, index) (TRNG_ENT_REG(base, index)) +/*@}*/ + +/******************************************************************************* + * TRNG_SEC_CFG - RNG Security Configuration Register + ******************************************************************************/ + +/*! + * @brief TRNG_SEC_CFG - RNG Security Configuration Register (RW) + * + * Reset value: 0x00000000U + * + * The RNG Security Configuration Register is a read/write register used to + * control the test mode, programmability and state modes of the RNG. Many bits are + * place holders for this version. More configurability will be added here. Clears + * on asynchronous reset. For SA-TRNG releases before 2014/July/01, offsets 0xA0 + * to 0xAC used to be 0xB0 to 0xBC respectively. So, update newer tests that use + * these registers, if hard coded. + */ +/*! + * @name Constants and macros for entire TRNG_SEC_CFG register + */ +/*@{*/ +#define TRNG_SEC_CFG_REG(base) ((base)->SEC_CFG) +#define TRNG_RD_SEC_CFG(base) (TRNG_SEC_CFG_REG(base)) +#define TRNG_WR_SEC_CFG(base, value) (TRNG_SEC_CFG_REG(base) = (value)) +#define TRNG_RMW_SEC_CFG(base, mask, value) (TRNG_WR_SEC_CFG(base, (TRNG_RD_SEC_CFG(base) & ~(mask)) | (value))) +/*@}*/ + +/*! + * @name Register TRNG_SEC_CFG, field NO_PRGM[1] (RW) + * + * If set the TRNG registers cannot be programmed. That is, regardless of the + * TRNG access mode in the SA-TRNG Miscellaneous Control Register. + * + * Values: + * - 0b0 - Programability of registers controlled only by the RNG Miscellaneous + * Control Register's access mode bit. + * - 0b1 - Overides RNG Miscellaneous Control Register access mode and prevents + * TRNG register programming. + */ +/*@{*/ +/*! @brief Read current value of the TRNG_SEC_CFG_NO_PRGM field. */ +#define TRNG_RD_SEC_CFG_NO_PRGM(base) \ + ((TRNG_SEC_CFG_REG(base) & TRNG_SEC_CFG_NO_PRGM_MASK) >> TRNG_SEC_CFG_NO_PRGM_SHIFT) + +/*! @brief Set the NO_PRGM field to a new value. */ +#define TRNG_WR_SEC_CFG_NO_PRGM(base, value) \ + (TRNG_RMW_SEC_CFG(base, TRNG_SEC_CFG_NO_PRGM_MASK, TRNG_SEC_CFG_NO_PRGM(value))) +/*@}*/ + +/******************************************************************************* + * Prototypes + *******************************************************************************/ +static status_t trng_ApplyUserConfig(TRNG_Type *base, const trng_config_t *userConfig); +static status_t trng_SetRetryCount(TRNG_Type *base, uint8_t retry_count); +static status_t trng_SetStatisticalCheckLimit(TRNG_Type *base, + trng_statistical_check_t statistical_check, + const trng_statistical_check_limit_t *limit); +static uint32_t trng_ReadEntropy(TRNG_Type *base, uint32_t index); + +/******************************************************************************* + * Code + ******************************************************************************/ + +/*FUNCTION********************************************************************* + * + * Function Name : TRNG_InitUserConfigDefault + * Description : Initializes user configuration structure to default settings. + * + *END*************************************************************************/ +status_t TRNG_GetDefaultConfig(trng_config_t *userConfig) +{ + status_t result; + + if (userConfig != 0) + { + userConfig->lock = TRNG_USER_CONFIG_DEFAULT_LOCK; + userConfig->clockMode = kTRNG_ClockModeRingOscillator; + userConfig->ringOscDiv = TRNG_USER_CONFIG_DEFAULT_OSC_DIV; + userConfig->sampleMode = kTRNG_SampleModeRaw; + userConfig->entropyDelay = TRNG_USER_CONFIG_DEFAULT_ENTROPY_DELAY; + userConfig->sampleSize = TRNG_USER_CONFIG_DEFAULT_SAMPLE_SIZE; + userConfig->sparseBitLimit = TRNG_USER_CONFIG_DEFAULT_SPARSE_BIT_LIMIT; + + /* Statistical Check Parameters.*/ + userConfig->retryCount = TRNG_USER_CONFIG_DEFAULT_RETRY_COUNT; + userConfig->longRunMaxLimit = TRNG_USER_CONFIG_DEFAULT_RUN_MAX_LIMIT; + + userConfig->monobitLimit.maximum = TRNG_USER_CONFIG_DEFAULT_MONOBIT_MAXIMUM; + userConfig->monobitLimit.minimum = TRNG_USER_CONFIG_DEFAULT_MONOBIT_MINIMUM; + userConfig->runBit1Limit.maximum = TRNG_USER_CONFIG_DEFAULT_RUNBIT1_MAXIMUM; + userConfig->runBit1Limit.minimum = TRNG_USER_CONFIG_DEFAULT_RUNBIT1_MINIMUM; + userConfig->runBit2Limit.maximum = TRNG_USER_CONFIG_DEFAULT_RUNBIT2_MAXIMUM; + userConfig->runBit2Limit.minimum = TRNG_USER_CONFIG_DEFAULT_RUNBIT2_MINIMUM; + userConfig->runBit3Limit.maximum = TRNG_USER_CONFIG_DEFAULT_RUNBIT3_MAXIMUM; + userConfig->runBit3Limit.minimum = TRNG_USER_CONFIG_DEFAULT_RUNBIT3_MINIMUM; + userConfig->runBit4Limit.maximum = TRNG_USER_CONFIG_DEFAULT_RUNBIT4_MAXIMUM; + userConfig->runBit4Limit.minimum = TRNG_USER_CONFIG_DEFAULT_RUNBIT4_MINIMUM; + userConfig->runBit5Limit.maximum = TRNG_USER_CONFIG_DEFAULT_RUNBIT5_MAXIMUM; + userConfig->runBit5Limit.minimum = TRNG_USER_CONFIG_DEFAULT_RUNBIT5_MINIMUM; + userConfig->runBit6PlusLimit.maximum = TRNG_USER_CONFIG_DEFAULT_RUNBIT6PLUS_MAXIMUM; + userConfig->runBit6PlusLimit.minimum = TRNG_USER_CONFIG_DEFAULT_RUNBIT6PLUS_MINIMUM; + userConfig->pokerLimit.maximum = TRNG_USER_CONFIG_DEFAULT_POKER_MAXIMUM; + userConfig->pokerLimit.minimum = TRNG_USER_CONFIG_DEFAULT_POKER_MINIMUM; + userConfig->frequencyCountLimit.maximum = TRNG_USER_CONFIG_DEFAULT_FREQUENCY_MAXIMUM; + userConfig->frequencyCountLimit.minimum = TRNG_USER_CONFIG_DEFAULT_FREQUENCY_MINIMUM; + + result = kStatus_Success; + } + else + { + result = kStatus_InvalidArgument; + } + + return result; +} + +/*! + * @brief Sets the TRNG retry count. + * + * This function sets the retry counter which defines the number of times a + * statistical check may fails during the TRNG Entropy Generation before + * generating an error. +*/ +static status_t trng_SetRetryCount(TRNG_Type *base, uint8_t retry_count) +{ + status_t status; + + if ((retry_count >= 1u) && (retry_count <= 15u)) + { + /* Set retry count.*/ + TRNG_WR_SCMISC_RTY_CT(base, retry_count); + status = kStatus_Success; + } + else + { + status = kStatus_InvalidArgument; + } + return status; +} + +/*! + * @brief Sets statistical check limits. + * + * This function is used to set minimum and maximum limits of statistical checks. + * + */ +static status_t trng_SetStatisticalCheckLimit(TRNG_Type *base, + trng_statistical_check_t statistical_check, + const trng_statistical_check_limit_t *limit) +{ + uint32_t range; + status_t status = kStatus_Success; + + if (limit && (limit->maximum > limit->minimum)) + { + range = limit->maximum - limit->minimum; /* Registers use range instead of minimum value.*/ + + switch (statistical_check) + { + case kTRNG_StatisticalCheckMonobit: /* Allowable maximum and minimum number of ones/zero detected during + entropy generation. */ + if ((range <= 0xffffu) && (limit->maximum <= 0xffffu)) + { + TRNG_WR_SCML_MONO_MAX(base, limit->maximum); + TRNG_WR_SCML_MONO_RNG(base, range); + } + else + { + status = kStatus_InvalidArgument; + } + break; + case kTRNG_StatisticalCheckRunBit1: /* Allowable maximum and minimum number of runs of length 1 detected + during entropy generation. */ + if ((range <= 0x7fffu) && (limit->maximum <= 0x7fffu)) + { + TRNG_WR_SCR1L_RUN1_MAX(base, limit->maximum); + TRNG_WR_SCR1L_RUN1_RNG(base, range); + } + else + { + status = kStatus_InvalidArgument; + } + break; + case kTRNG_StatisticalCheckRunBit2: /* Allowable maximum and minimum number of runs of length 2 detected + during entropy generation. */ + if ((range <= 0x3fffu) && (limit->maximum <= 0x3fffu)) + { + TRNG_WR_SCR2L_RUN2_MAX(base, limit->maximum); + TRNG_WR_SCR2L_RUN2_RNG(base, range); + } + else + { + status = kStatus_InvalidArgument; + } + break; + case kTRNG_StatisticalCheckRunBit3: /* Allowable maximum and minimum number of runs of length 3 detected + during entropy generation. */ + if ((range <= 0x1fffu) && (limit->maximum <= 0x1fffu)) + { + TRNG_WR_SCR3L_RUN3_MAX(base, limit->maximum); + TRNG_WR_SCR3L_RUN3_RNG(base, range); + } + else + { + status = kStatus_InvalidArgument; + } + break; + case kTRNG_StatisticalCheckRunBit4: /* Allowable maximum and minimum number of runs of length 4 detected + during entropy generation. */ + if ((range <= 0xfffu) && (limit->maximum <= 0xfffu)) + { + TRNG_WR_SCR4L_RUN4_MAX(base, limit->maximum); + TRNG_WR_SCR4L_RUN4_RNG(base, range); + } + else + { + status = kStatus_InvalidArgument; + } + break; + case kTRNG_StatisticalCheckRunBit5: /* Allowable maximum and minimum number of runs of length 5 detected + during entropy generation. */ + if ((range <= 0x7ffu) && (limit->maximum <= 0x7ffu)) + { + TRNG_WR_SCR5L_RUN5_MAX(base, limit->maximum); + TRNG_WR_SCR5L_RUN5_RNG(base, range); + } + else + { + status = kStatus_InvalidArgument; + } + break; + case kTRNG_StatisticalCheckRunBit6Plus: /* Allowable maximum and minimum number of length 6 or more detected + during entropy generation */ + if ((range <= 0x7ffu) && (limit->maximum <= 0x7ffu)) + { + TRNG_WR_SCR6PL_RUN6P_MAX(base, limit->maximum); + TRNG_WR_SCR6PL_RUN6P_RNG(base, range); + } + else + { + status = kStatus_InvalidArgument; + } + break; + case kTRNG_StatisticalCheckPoker: /* Allowable maximum and minimum limit of "Poker Test" detected during + entropy generation . */ + if ((range <= 0xffffu) && (limit->maximum <= 0xffffffu)) + { + TRNG_WR_PKRMAX_PKR_MAX(base, limit->maximum); + TRNG_WR_PKRRNG_PKR_RNG(base, range); + } + else + { + status = kStatus_InvalidArgument; + } + break; + case kTRNG_StatisticalCheckFrequencyCount: /* Allowable maximum and minimum limit of entropy sample frquency + count during entropy generation . */ + if ((limit->minimum <= 0x3fffffu) && (limit->maximum <= 0x3fffffu)) + { + TRNG_WR_FRQMAX_FRQ_MAX(base, limit->maximum); + TRNG_WR_FRQMIN_FRQ_MIN(base, limit->minimum); + } + else + { + status = kStatus_InvalidArgument; + } + break; + default: + status = kStatus_InvalidArgument; + break; + } + } + + return status; +} + +/*FUNCTION********************************************************************* + * + * Function Name : trng_ApplyUserConfig + * Description : Apply user configuration settings to TRNG module. + * + *END*************************************************************************/ +static status_t trng_ApplyUserConfig(TRNG_Type *base, const trng_config_t *userConfig) +{ + status_t status; + + if (((status = trng_SetRetryCount(base, userConfig->retryCount)) == kStatus_Success) && + ((status = trng_SetStatisticalCheckLimit(base, kTRNG_StatisticalCheckMonobit, &userConfig->monobitLimit)) == + kStatus_Success) && + ((status = trng_SetStatisticalCheckLimit(base, kTRNG_StatisticalCheckRunBit1, &userConfig->runBit1Limit)) == + kStatus_Success) && + ((status = trng_SetStatisticalCheckLimit(base, kTRNG_StatisticalCheckRunBit2, &userConfig->runBit2Limit)) == + kStatus_Success) && + ((status = trng_SetStatisticalCheckLimit(base, kTRNG_StatisticalCheckRunBit3, &userConfig->runBit3Limit)) == + kStatus_Success) && + ((status = trng_SetStatisticalCheckLimit(base, kTRNG_StatisticalCheckRunBit4, &userConfig->runBit4Limit)) == + kStatus_Success) && + ((status = trng_SetStatisticalCheckLimit(base, kTRNG_StatisticalCheckRunBit5, &userConfig->runBit5Limit)) == + kStatus_Success) && + ((status = trng_SetStatisticalCheckLimit(base, kTRNG_StatisticalCheckRunBit6Plus, + &userConfig->runBit6PlusLimit)) == kStatus_Success) && + ((status = trng_SetStatisticalCheckLimit(base, kTRNG_StatisticalCheckPoker, &userConfig->pokerLimit)) == + kStatus_Success) && + ((status = trng_SetStatisticalCheckLimit(base, kTRNG_StatisticalCheckFrequencyCount, + &userConfig->frequencyCountLimit)) == kStatus_Success)) + { + TRNG_WR_MCTL_FOR_SCLK(base, userConfig->clockMode); + TRNG_WR_MCTL_OSC_DIV(base, userConfig->ringOscDiv); + TRNG_WR_MCTL_SAMP_MODE(base, userConfig->sampleMode); + TRNG_WR_SDCTL_ENT_DLY(base, userConfig->entropyDelay); + TRNG_WR_SDCTL_SAMP_SIZE(base, userConfig->sampleSize); + TRNG_WR_SBLIM_SB_LIM(base, userConfig->sparseBitLimit); + TRNG_WR_SCMISC_LRUN_MAX(base, userConfig->longRunMaxLimit); + } + + return status; +} + +/*! + * @brief Gets a entry data from the TRNG. + * + * This function gets an entropy data from TRNG. + * Entropy data is spread over TRNG_ENT_COUNT registers. + * Read register number is defined by index parameter. +*/ +static uint32_t trng_ReadEntropy(TRNG_Type *base, uint32_t index) +{ + uint32_t data; + + index = index % TRNG_ENT_COUNT; /* This way we can use incremental index without limit control from application.*/ + + data = TRNG_RD_ENT(base, index); + + if (index == (TRNG_ENT_COUNT - 1)) + { + /* Dummy read. Defect workaround. + * TRNG could not clear ENT_VAL flag automatically, application + * had to do a dummy reading operation for anyone TRNG register + * to clear it firstly, then to read the RTENT0 to RTENT15 again */ + index = TRNG_RD_ENT(base, 0); + } + + return data; +} + +status_t TRNG_Init(TRNG_Type *base, const trng_config_t *userConfig) +{ + status_t result; + + /* Check input parameters.*/ + if ((base != 0) && (userConfig != 0)) + { + /* Enable the clock gate. */ + CLOCK_EnableClock(kCLOCK_Trng0); + + /* Reset the registers of TRNG module to reset state. */ + /* Must be in program mode.*/ + TRNG_WR_MCTL_PRGM(base, kTRNG_WorkModeProgram); + /* Reset Defaults.*/ + TRNG_WR_MCTL_RST_DEF(base, 1); + + /* Set configuration.*/ + if ((result = trng_ApplyUserConfig(base, userConfig)) == kStatus_Success) + { + /* Start entropy generation.*/ + /* Set to Run mode.*/ + TRNG_WR_MCTL_PRGM(base, kTRNG_WorkModeRun); + /* Enable TRNG Access Mode. To generate an Entropy + * value that can be read via the true0-true15 registers.*/ + TRNG_WR_MCTL_TRNG_ACC(base, 1); + + if (userConfig->lock == 1) /* Disable programmability of TRNG registers. */ + { + TRNG_WR_SEC_CFG_NO_PRGM(base, 1); + } + + result = kStatus_Success; + } + } + else + { + result = kStatus_InvalidArgument; + } + + return result; +} + +void TRNG_Deinit(TRNG_Type *base) +{ + /* Check input parameters.*/ + if (base) + { + /* Move to program mode. Stop entropy generation.*/ + TRNG_WR_MCTL_PRGM(base, kTRNG_WorkModeProgram); + + /* Check before clock stop. + TRNG turns on the TRNG free-running ring oscillator whenever new entropy + is being generated and turns off the ring oscillator when entropy generation + is complete. If the TRNG clock is stopped while the TRNG ring oscillator + is running, the oscillator continues running though the RNG clock. + is stopped. */ + while (TRNG_RD_MCTL_TSTOP_OK(base) == 0) + { + } + + /* Disable Clock*/ + CLOCK_DisableClock(kCLOCK_Trng0); + } +} + +status_t TRNG_GetRandomData(TRNG_Type *base, void *data, size_t dataSize) +{ + status_t result = kStatus_Success; + uint32_t random_32; + uint8_t *random_p; + uint32_t random_size; + uint8_t *data_p = (uint8_t *)data; + uint32_t i; + int index = 0; + + /* Check input parameters.*/ + if (base && data && dataSize) + { + do + { + /* Wait for Valid or Error flag*/ + while ((TRNG_RD_MCTL_ENT_VAL(base) == 0) && (TRNG_RD_MCTL_ERR(base) == 0)) + { + } + + /* Check HW error.*/ + if (TRNG_RD_MCTL_ERR(base)) + { + result = kStatus_Fail; /* TRNG module error occurred */ + /* Clear error.*/ + TRNG_WR_MCTL_ERR(base, 1); + break; /* No sense stay here.*/ + } + + /* Read Entropy.*/ + random_32 = trng_ReadEntropy(base, index++); + + random_p = (uint8_t *)&random_32; + + if (dataSize < sizeof(random_32)) + { + random_size = dataSize; + } + else + { + random_size = sizeof(random_32); + } + + for (i = 0U; i < random_size; i++) + { + *data_p++ = *random_p++; + } + + dataSize -= random_size; + } while (dataSize > 0); + + /* Start a new entropy generation. + It is done by reading of the last entropy register.*/ + if ((index % TRNG_ENT_COUNT) != (TRNG_ENT_COUNT - 1)) + { + trng_ReadEntropy(base, (TRNG_ENT_COUNT - 1)); + } + } + else + { + result = kStatus_InvalidArgument; + } + + return result; +} + +#endif /* FSL_FEATURE_SOC_TRNG_COUNT */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_trng.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_trng.h new file mode 100644 index 00000000000..53354c04991 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_trng.h @@ -0,0 +1,239 @@ +/* + * Copyright (c) 2015-2016, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FSL_TRNG_DRIVER_H_ +#define _FSL_TRNG_DRIVER_H_ + +#include "fsl_common.h" + +#if defined(FSL_FEATURE_SOC_TRNG_COUNT) && FSL_FEATURE_SOC_TRNG_COUNT + +/*! + * @addtogroup trng_driver + * @{ + */ + + +/******************************************************************************* + * Definitions + *******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief TRNG driver version 2.0.1. + * + * Current version: 2.0.1 + * + * Change log: + * - Version 2.0.1 + * - add support for KL8x and KL28Z + * - update default OSCDIV for K81 to divide by 2 + */ +#define FSL_TRNG_DRIVER_VERSION (MAKE_VERSION(2, 0, 1)) +/*@}*/ + +/*! @brief TRNG sample mode. Used by trng_config_t. */ +typedef enum _trng_sample_mode +{ + kTRNG_SampleModeVonNeumann = 0U, /*!< Use von Neumann data in both Entropy shifter and Statistical Checker. */ + kTRNG_SampleModeRaw = 1U, /*!< Use raw data into both Entropy shifter and Statistical Checker. */ + kTRNG_SampleModeVonNeumannRaw = + 2U /*!< Use von Neumann data in Entropy shifter. Use raw data into Statistical Checker. */ +} trng_sample_mode_t; + +/*! @brief TRNG clock mode. Used by trng_config_t. */ +typedef enum _trng_clock_mode +{ + kTRNG_ClockModeRingOscillator = 0U, /*!< Ring oscillator is used to operate the TRNG (default). */ + kTRNG_ClockModeSystem = 1U /*!< System clock is used to operate the TRNG. This is for test use only, and + indeterminate results may occur. */ +} trng_clock_mode_t; + +/*! @brief TRNG ring oscillator divide. Used by trng_config_t. */ +typedef enum _trng_ring_osc_div +{ + kTRNG_RingOscDiv0 = 0U, /*!< Ring oscillator with no divide */ + kTRNG_RingOscDiv2 = 1U, /*!< Ring oscillator divided-by-2. */ + kTRNG_RingOscDiv4 = 2U, /*!< Ring oscillator divided-by-4. */ + kTRNG_RingOscDiv8 = 3U /*!< Ring oscillator divided-by-8. */ +} trng_ring_osc_div_t; + +/*! @brief Data structure for definition of statistical check limits. Used by trng_config_t. */ +typedef struct _trng_statistical_check_limit +{ + uint32_t maximum; /*!< Maximum limit.*/ + uint32_t minimum; /*!< Minimum limit.*/ +} trng_statistical_check_limit_t; + +/*! + * @brief Data structure for the TRNG initialization + * + * This structure initializes the TRNG by calling the the TRNG_Init() function. + * It contains all TRNG configurations. + */ +typedef struct _trng_user_config +{ + bool lock; /*!< @brief Disable programmability of TRNG registers. */ + trng_clock_mode_t clockMode; /*!< @brief Clock mode used to operate TRNG.*/ + trng_ring_osc_div_t ringOscDiv; /*!< @brief Ring oscillator divide used by TRNG. */ + trng_sample_mode_t sampleMode; /*!< @brief Sample mode of the TRNG ring oscillator. */ + /* Seed Control*/ + uint16_t + entropyDelay; /*!< @brief Entropy Delay. Defines the length (in system clocks) of each Entropy sample taken. */ + uint16_t sampleSize; /*!< @brief Sample Size. Defines the total number of Entropy samples that will be taken during + Entropy generation. */ + uint16_t + sparseBitLimit; /*!< @brief Sparse Bit Limit which defines the maximum number of + * consecutive samples that may be discarded before an error is generated. + * This limit is used only for during von Neumann sampling (enabled by TRNG_HAL_SetSampleMode()). + * Samples are discarded if two consecutive raw samples are both 0 or both 1. If + * this discarding occurs for a long period of time, it indicates that there is + * insufficient Entropy. */ + /* Statistical Check Parameters.*/ + uint8_t retryCount; /*!< @brief Retry count. It defines the number of times a statistical check may fails + * during the TRNG Entropy Generation before generating an error. */ + uint8_t longRunMaxLimit; /*!< @brief Largest allowable number of consecutive samples of all 1, or all 0, + * that is allowed during the Entropy generation. */ + trng_statistical_check_limit_t + monobitLimit; /*!< @brief Maximum and minimum limits for statistical check of number of ones/zero detected + during entropy generation. */ + trng_statistical_check_limit_t + runBit1Limit; /*!< @brief Maximum and minimum limits for statistical check of number of runs of length 1 + detected during entropy generation. */ + trng_statistical_check_limit_t + runBit2Limit; /*!< @brief Maximum and minimum limits for statistical check of number of runs of length 2 + detected during entropy generation. */ + trng_statistical_check_limit_t + runBit3Limit; /*!< @brief Maximum and minimum limits for statistical check of number of runs of length 3 + detected during entropy generation. */ + trng_statistical_check_limit_t + runBit4Limit; /*!< @brief Maximum and minimum limits for statistical check of number of runs of length 4 + detected during entropy generation. */ + trng_statistical_check_limit_t + runBit5Limit; /*!< @brief Maximum and minimum limits for statistical check of number of runs of length 5 + detected during entropy generation. */ + trng_statistical_check_limit_t runBit6PlusLimit; /*!< @brief Maximum and minimum limits for statistical check of + number of runs of length 6 or more detected during entropy + generation. */ + trng_statistical_check_limit_t + pokerLimit; /*!< @brief Maximum and minimum limits for statistical check of "Poker Test". */ + trng_statistical_check_limit_t + frequencyCountLimit; /*!< @brief Maximum and minimum limits for statistical check of entropy sample frequency + count. */ +} trng_config_t; + +/******************************************************************************* + * API + *******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif + +/*! + * @brief Initializes user configuration structure to default. + * + * This function initializes the configure structure to default value. the default + * value are: + * @code + * user_config->lock = 0; + * user_config->clockMode = kTRNG_ClockModeRingOscillator; + * user_config->ringOscDiv = kTRNG_RingOscDiv0; Or to other kTRNG_RingOscDiv[2|8] depending on platform. + * user_config->sampleMode = kTRNG_SampleModeRaw; + * user_config->entropyDelay = 3200; + * user_config->sampleSize = 2500; + * user_config->sparseBitLimit = TRNG_USER_CONFIG_DEFAULT_SPARSE_BIT_LIMIT; + * user_config->retryCount = 63; + * user_config->longRunMaxLimit = 34; + * user_config->monobitLimit.maximum = 1384; + * user_config->monobitLimit.minimum = 1116; + * user_config->runBit1Limit.maximum = 405; + * user_config->runBit1Limit.minimum = 227; + * user_config->runBit2Limit.maximum = 220; + * user_config->runBit2Limit.minimum = 98; + * user_config->runBit3Limit.maximum = 125; + * user_config->runBit3Limit.minimum = 37; + * user_config->runBit4Limit.maximum = 75; + * user_config->runBit4Limit.minimum = 11; + * user_config->runBit5Limit.maximum = 47; + * user_config->runBit5Limit.minimum = 1; + * user_config->runBit6PlusLimit.maximum = 47; + * user_config->runBit6PlusLimit.minimum = 1; + * user_config->pokerLimit.maximum = 26912; + * user_config->pokerLimit.minimum = 24445; + * user_config->frequencyCountLimit.maximum = 25600; + * user_config->frequencyCountLimit.minimum = 1600; + * @endcode + * + * @param user_config User configuration structure. + * @return If successful, returns the kStatus_TRNG_Success. Otherwise, it returns an error. + */ +status_t TRNG_GetDefaultConfig(trng_config_t *userConfig); + +/*! + * @brief Initializes the TRNG. + * + * This function initializes the TRNG. + * When called, the TRNG entropy generation starts immediately. + * + * @param base TRNG base address + * @param userConfig Pointer to initialize configuration structure. + * @return If successful, returns the kStatus_TRNG_Success. Otherwise, it returns an error. + */ +status_t TRNG_Init(TRNG_Type *base, const trng_config_t *userConfig); + +/*! + * @brief Shuts down the TRNG. + * + * This function shuts down the TRNG. + * + * @param base TRNG base address + */ +void TRNG_Deinit(TRNG_Type *base); + +/*! + * @brief Gets random data. + * + * This function gets random data from the TRNG. + * + * @param base TRNG base address + * @param data Pointer address used to store random data + * @param dataSize Size of the buffer pointed by the data parameter + * @return random data + */ +status_t TRNG_GetRandomData(TRNG_Type *base, void *data, size_t dataSize); + +#if defined(__cplusplus) +} +#endif + +/*! @}*/ + +#endif /* FSL_FEATURE_SOC_TRNG_COUNT */ +#endif /*_FSL_TRNG_H_*/ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_tsi_v4.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_tsi_v4.c new file mode 100644 index 00000000000..841627e6fdd --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_tsi_v4.c @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2014 - 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#include "fsl_tsi_v4.h" + +void TSI_Init(TSI_Type *base, const tsi_config_t *config) +{ + assert(config != NULL); + + bool is_module_enabled = false; + bool is_int_enabled = false; + + CLOCK_EnableClock(kCLOCK_Tsi0); + if (base->GENCS & TSI_GENCS_TSIEN_MASK) + { + is_module_enabled = true; + TSI_EnableModule(base, false); + } + if (base->GENCS & TSI_GENCS_TSIIEN_MASK) + { + is_int_enabled = true; + TSI_DisableInterrupts(base, kTSI_GlobalInterruptEnable); + } + + TSI_SetHighThreshold(base, config->thresh); + TSI_SetLowThreshold(base, config->thresl); + TSI_SetElectrodeOSCPrescaler(base, config->prescaler); + TSI_SetReferenceChargeCurrent(base, config->refchrg); + TSI_SetElectrodeChargeCurrent(base, config->extchrg); + TSI_SetNumberOfScans(base, config->nscn); + TSI_SetAnalogMode(base, config->mode); + TSI_SetOscVoltageRails(base, config->dvolt); + TSI_SetElectrodeSeriesResistor(base, config->resistor); + TSI_SetFilterBits(base, config->filter); + + if (is_module_enabled) + { + TSI_EnableModule(base, true); + } + if (is_int_enabled) + { + TSI_EnableInterrupts(base, kTSI_GlobalInterruptEnable); + } +} + +void TSI_Deinit(TSI_Type *base) +{ + base->GENCS = 0U; + base->DATA = 0U; + base->TSHD = 0U; + CLOCK_DisableClock(kCLOCK_Tsi0); +} + +void TSI_GetNormalModeDefaultConfig(tsi_config_t *userConfig) +{ + userConfig->thresh = 0U; + userConfig->thresl = 0U; + userConfig->prescaler = kTSI_ElecOscPrescaler_2div; + userConfig->extchrg = kTSI_ExtOscChargeCurrent_4uA; + userConfig->refchrg = kTSI_RefOscChargeCurrent_4uA; + userConfig->nscn = kTSI_ConsecutiveScansNumber_5time; + userConfig->mode = kTSI_AnalogModeSel_Capacitive; + userConfig->dvolt = kTSI_OscVolRailsOption_0; + userConfig->resistor = kTSI_SeriesResistance_32k; + userConfig->filter = kTSI_FilterBits_3; +} + +void TSI_GetLowPowerModeDefaultConfig(tsi_config_t *userConfig) +{ + userConfig->thresh = 400U; + userConfig->thresl = 0U; + userConfig->prescaler = kTSI_ElecOscPrescaler_2div; + userConfig->extchrg = kTSI_ExtOscChargeCurrent_4uA; + userConfig->refchrg = kTSI_RefOscChargeCurrent_4uA; + userConfig->nscn = kTSI_ConsecutiveScansNumber_5time; + userConfig->mode = kTSI_AnalogModeSel_Capacitive; + userConfig->dvolt = kTSI_OscVolRailsOption_0; + userConfig->resistor = kTSI_SeriesResistance_32k; + userConfig->filter = kTSI_FilterBits_3; +} + +void TSI_Calibrate(TSI_Type *base, tsi_calibration_data_t *calBuff) +{ + assert(calBuff != NULL); + + uint8_t i = 0U; + bool is_int_enabled = false; + + if (base->GENCS & TSI_GENCS_TSIIEN_MASK) + { + is_int_enabled = true; + TSI_DisableInterrupts(base, kTSI_GlobalInterruptEnable); + } + for (i = 0U; i < FSL_FEATURE_TSI_CHANNEL_COUNT; i++) + { + TSI_SetMeasuredChannelNumber(base, i); + TSI_StartSoftwareTrigger(base); + while (!(TSI_GetStatusFlags(base) & kTSI_EndOfScanFlag)) + { + } + calBuff->calibratedData[i] = TSI_GetCounter(base); + TSI_ClearStatusFlags(base, kTSI_EndOfScanFlag); + } + if (is_int_enabled) + { + TSI_EnableInterrupts(base, kTSI_GlobalInterruptEnable); + } +} + +void TSI_EnableInterrupts(TSI_Type *base, uint32_t mask) +{ + uint32_t regValue = base->GENCS & (~ALL_FLAGS_MASK); + + if (mask & kTSI_GlobalInterruptEnable) + { + regValue |= TSI_GENCS_TSIIEN_MASK; + } + if (mask & kTSI_OutOfRangeInterruptEnable) + { + regValue &= (~TSI_GENCS_ESOR_MASK); + } + if (mask & kTSI_EndOfScanInterruptEnable) + { + regValue |= TSI_GENCS_ESOR_MASK; + } + + base->GENCS = regValue; /* write value to register */ +} + +void TSI_DisableInterrupts(TSI_Type *base, uint32_t mask) +{ + uint32_t regValue = base->GENCS & (~ALL_FLAGS_MASK); + + if (mask & kTSI_GlobalInterruptEnable) + { + regValue &= (~TSI_GENCS_TSIIEN_MASK); + } + if (mask & kTSI_OutOfRangeInterruptEnable) + { + regValue |= TSI_GENCS_ESOR_MASK; + } + if (mask & kTSI_EndOfScanInterruptEnable) + { + regValue &= (~TSI_GENCS_ESOR_MASK); + } + + base->GENCS = regValue; /* write value to register */ +} + +void TSI_ClearStatusFlags(TSI_Type *base, uint32_t mask) +{ + uint32_t regValue = base->GENCS & (~ALL_FLAGS_MASK); + + if (mask & kTSI_EndOfScanFlag) + { + regValue |= TSI_GENCS_EOSF_MASK; + } + if (mask & kTSI_OutOfRangeFlag) + { + regValue |= TSI_GENCS_OUTRGF_MASK; + } + + base->GENCS = regValue; /* write value to register */ +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_tsi_v4.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_tsi_v4.h new file mode 100644 index 00000000000..e4f189ef226 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_tsi_v4.h @@ -0,0 +1,710 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FSL_TSI_V4_H_ +#define _FSL_TSI_V4_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup tsi_v4_driver + * @{ + */ + + +/******************************************************************************* + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief TSI driver version */ +#define FSL_TSI_DRIVER_VERSION (MAKE_VERSION(2, 1, 2)) +/*@}*/ + +/*! @brief TSI status flags macro collection */ +#define ALL_FLAGS_MASK (TSI_GENCS_EOSF_MASK | TSI_GENCS_OUTRGF_MASK) + +/*! @brief resistor bit shift in EXTCHRG bit-field */ +#define TSI_V4_EXTCHRG_RESISTOR_BIT_SHIFT TSI_GENCS_EXTCHRG_SHIFT + +/*! @brief filter bits shift in EXTCHRG bit-field */ +#define TSI_V4_EXTCHRG_FILTER_BITS_SHIFT (1U + TSI_GENCS_EXTCHRG_SHIFT) + +/*! @brief macro of clearing the resistor bit in EXTCHRG bit-field */ +#define TSI_V4_EXTCHRG_RESISTOR_BIT_CLEAR \ + ((uint32_t)((~(ALL_FLAGS_MASK | TSI_GENCS_EXTCHRG_MASK)) | (3U << TSI_V4_EXTCHRG_FILTER_BITS_SHIFT))) + +/*! @brief macro of clearing the filter bits in EXTCHRG bit-field */ +#define TSI_V4_EXTCHRG_FILTER_BITS_CLEAR \ + ((uint32_t)((~(ALL_FLAGS_MASK | TSI_GENCS_EXTCHRG_MASK)) | (1U << TSI_V4_EXTCHRG_RESISTOR_BIT_SHIFT))) + +/*! + * @brief TSI number of scan intervals for each electrode. + * + * These constants define the tsi number of consecutive scans in a TSI instance for each electrode. + */ +typedef enum _tsi_n_consecutive_scans +{ + kTSI_ConsecutiveScansNumber_1time = 0U, /*!< Once per electrode */ + kTSI_ConsecutiveScansNumber_2time = 1U, /*!< Twice per electrode */ + kTSI_ConsecutiveScansNumber_3time = 2U, /*!< 3 times consecutive scan */ + kTSI_ConsecutiveScansNumber_4time = 3U, /*!< 4 times consecutive scan */ + kTSI_ConsecutiveScansNumber_5time = 4U, /*!< 5 times consecutive scan */ + kTSI_ConsecutiveScansNumber_6time = 5U, /*!< 6 times consecutive scan */ + kTSI_ConsecutiveScansNumber_7time = 6U, /*!< 7 times consecutive scan */ + kTSI_ConsecutiveScansNumber_8time = 7U, /*!< 8 times consecutive scan */ + kTSI_ConsecutiveScansNumber_9time = 8U, /*!< 9 times consecutive scan */ + kTSI_ConsecutiveScansNumber_10time = 9U, /*!< 10 times consecutive scan */ + kTSI_ConsecutiveScansNumber_11time = 10U, /*!< 11 times consecutive scan */ + kTSI_ConsecutiveScansNumber_12time = 11U, /*!< 12 times consecutive scan */ + kTSI_ConsecutiveScansNumber_13time = 12U, /*!< 13 times consecutive scan */ + kTSI_ConsecutiveScansNumber_14time = 13U, /*!< 14 times consecutive scan */ + kTSI_ConsecutiveScansNumber_15time = 14U, /*!< 15 times consecutive scan */ + kTSI_ConsecutiveScansNumber_16time = 15U, /*!< 16 times consecutive scan */ + kTSI_ConsecutiveScansNumber_17time = 16U, /*!< 17 times consecutive scan */ + kTSI_ConsecutiveScansNumber_18time = 17U, /*!< 18 times consecutive scan */ + kTSI_ConsecutiveScansNumber_19time = 18U, /*!< 19 times consecutive scan */ + kTSI_ConsecutiveScansNumber_20time = 19U, /*!< 20 times consecutive scan */ + kTSI_ConsecutiveScansNumber_21time = 20U, /*!< 21 times consecutive scan */ + kTSI_ConsecutiveScansNumber_22time = 21U, /*!< 22 times consecutive scan */ + kTSI_ConsecutiveScansNumber_23time = 22U, /*!< 23 times consecutive scan */ + kTSI_ConsecutiveScansNumber_24time = 23U, /*!< 24 times consecutive scan */ + kTSI_ConsecutiveScansNumber_25time = 24U, /*!< 25 times consecutive scan */ + kTSI_ConsecutiveScansNumber_26time = 25U, /*!< 26 times consecutive scan */ + kTSI_ConsecutiveScansNumber_27time = 26U, /*!< 27 times consecutive scan */ + kTSI_ConsecutiveScansNumber_28time = 27U, /*!< 28 times consecutive scan */ + kTSI_ConsecutiveScansNumber_29time = 28U, /*!< 29 times consecutive scan */ + kTSI_ConsecutiveScansNumber_30time = 29U, /*!< 30 times consecutive scan */ + kTSI_ConsecutiveScansNumber_31time = 30U, /*!< 31 times consecutive scan */ + kTSI_ConsecutiveScansNumber_32time = 31U /*!< 32 times consecutive scan */ +} tsi_n_consecutive_scans_t; + +/*! + * @brief TSI electrode oscillator prescaler. + * + * These constants define the TSI electrode oscillator prescaler in a TSI instance. + */ +typedef enum _tsi_electrode_osc_prescaler +{ + kTSI_ElecOscPrescaler_1div = 0U, /*!< Electrode oscillator frequency divided by 1 */ + kTSI_ElecOscPrescaler_2div = 1U, /*!< Electrode oscillator frequency divided by 2 */ + kTSI_ElecOscPrescaler_4div = 2U, /*!< Electrode oscillator frequency divided by 4 */ + kTSI_ElecOscPrescaler_8div = 3U, /*!< Electrode oscillator frequency divided by 8 */ + kTSI_ElecOscPrescaler_16div = 4U, /*!< Electrode oscillator frequency divided by 16 */ + kTSI_ElecOscPrescaler_32div = 5U, /*!< Electrode oscillator frequency divided by 32 */ + kTSI_ElecOscPrescaler_64div = 6U, /*!< Electrode oscillator frequency divided by 64 */ + kTSI_ElecOscPrescaler_128div = 7U /*!< Electrode oscillator frequency divided by 128 */ +} tsi_electrode_osc_prescaler_t; + +/*! + * @brief TSI analog mode select. + * + * Set up TSI analog modes in a TSI instance. + */ +typedef enum _tsi_analog_mode +{ + kTSI_AnalogModeSel_Capacitive = 0U, /*!< Active TSI capacitive sensing mode */ + kTSI_AnalogModeSel_NoiseNoFreqLim = 4U, /*!< Single threshold noise detection mode with no freq. limitation. */ + kTSI_AnalogModeSel_NoiseFreqLim = 8U, /*!< Single threshold noise detection mode with freq. limitation. */ + kTSI_AnalogModeSel_AutoNoise = 12U /*!< Active TSI analog in automatic noise detection mode */ +} tsi_analog_mode_t; + +/*! + * @brief TSI Reference oscillator charge and discharge current select. + * + * These constants define the TSI Reference oscillator charge current select in a TSI (REFCHRG) instance. + */ +typedef enum _tsi_reference_osc_charge_current +{ + kTSI_RefOscChargeCurrent_500nA = 0U, /*!< Reference oscillator charge current is 500 µA */ + kTSI_RefOscChargeCurrent_1uA = 1U, /*!< Reference oscillator charge current is 1 µA */ + kTSI_RefOscChargeCurrent_2uA = 2U, /*!< Reference oscillator charge current is 2 µA */ + kTSI_RefOscChargeCurrent_4uA = 3U, /*!< Reference oscillator charge current is 4 µA */ + kTSI_RefOscChargeCurrent_8uA = 4U, /*!< Reference oscillator charge current is 8 µA */ + kTSI_RefOscChargeCurrent_16uA = 5U, /*!< Reference oscillator charge current is 16 µA */ + kTSI_RefOscChargeCurrent_32uA = 6U, /*!< Reference oscillator charge current is 32 µA */ + kTSI_RefOscChargeCurrent_64uA = 7U /*!< Reference oscillator charge current is 64 µA */ +} tsi_reference_osc_charge_current_t; + +/*! + * @brief TSI oscilator's voltage rails. + * + * These bits indicate the oscillator's voltage rails. + */ +typedef enum _tsi_osc_voltage_rails +{ + kTSI_OscVolRailsOption_0 = 0U, /*!< DVOLT value option 0, the value may differ on different platforms */ + kTSI_OscVolRailsOption_1 = 1U, /*!< DVOLT value option 1, the value may differ on different platforms */ + kTSI_OscVolRailsOption_2 = 2U, /*!< DVOLT value option 2, the value may differ on different platforms */ + kTSI_OscVolRailsOption_3 = 3U /*!< DVOLT value option 3, the value may differ on different platforms */ +} tsi_osc_voltage_rails_t; + +/*! + * @brief TSI External oscillator charge and discharge current select. + * + * These bits indicate the electrode oscillator charge and discharge current value + * in TSI (EXTCHRG) instance. + */ +typedef enum _tsi_external_osc_charge_current +{ + kTSI_ExtOscChargeCurrent_500nA = 0U, /*!< External oscillator charge current is 500 µA */ + kTSI_ExtOscChargeCurrent_1uA = 1U, /*!< External oscillator charge current is 1 µA */ + kTSI_ExtOscChargeCurrent_2uA = 2U, /*!< External oscillator charge current is 2 µA */ + kTSI_ExtOscChargeCurrent_4uA = 3U, /*!< External oscillator charge current is 4 µA */ + kTSI_ExtOscChargeCurrent_8uA = 4U, /*!< External oscillator charge current is 8 µA */ + kTSI_ExtOscChargeCurrent_16uA = 5U, /*!< External oscillator charge current is 16 µA */ + kTSI_ExtOscChargeCurrent_32uA = 6U, /*!< External oscillator charge current is 32 µA */ + kTSI_ExtOscChargeCurrent_64uA = 7U /*!< External oscillator charge current is 64 µA */ +} tsi_external_osc_charge_current_t; + +/*! + * @brief TSI series resistance RS value select. + * + * These bits indicate the electrode RS series resistance for the noise mode + * in TSI (EXTCHRG) instance. + */ +typedef enum _tsi_series_resistance +{ + kTSI_SeriesResistance_32k = 0U, /*!< Series Resistance is 32 kilo ohms */ + kTSI_SeriesResistance_187k = 1U /*!< Series Resistance is 18 7 kilo ohms */ +} tsi_series_resistor_t; + +/*! + * @brief TSI series filter bits select. + * + * These bits indicate the count of the filter bits + * in TSI noise mode EXTCHRG[2:1] bits + */ +typedef enum _tsi_filter_bits +{ + kTSI_FilterBits_3 = 0U, /*!< 3 filter bits, 8 peaks increments the cnt+1 */ + kTSI_FilterBits_2 = 1U, /*!< 2 filter bits, 4 peaks increments the cnt+1 */ + kTSI_FilterBits_1 = 2U, /*!< 1 filter bits, 2 peaks increments the cnt+1 */ + kTSI_FilterBits_0 = 3U /*!< no filter bits,1 peak increments the cnt+1 */ +} tsi_filter_bits_t; + +/*! @brief TSI status flags. */ +typedef enum _tsi_status_flags +{ + kTSI_EndOfScanFlag = TSI_GENCS_EOSF_MASK, /*!< End-Of-Scan flag */ + kTSI_OutOfRangeFlag = TSI_GENCS_OUTRGF_MASK /*!< Out-Of-Range flag */ +} tsi_status_flags_t; + +/*! @brief TSI feature interrupt source.*/ +typedef enum _tsi_interrupt_enable +{ + kTSI_GlobalInterruptEnable = 1U, /*!< TSI module global interrupt */ + kTSI_OutOfRangeInterruptEnable = 2U, /*!< Out-Of-Range interrupt */ + kTSI_EndOfScanInterruptEnable = 4U /*!< End-Of-Scan interrupt */ +} tsi_interrupt_enable_t; + +/*! @brief TSI calibration data storage. */ +typedef struct _tsi_calibration_data +{ + uint16_t calibratedData[FSL_FEATURE_TSI_CHANNEL_COUNT]; /*!< TSI calibration data storage buffer */ +} tsi_calibration_data_t; + +/*! + * @brief TSI configuration structure. + * + * This structure contains the settings for the most common TSI configurations including + * the TSI module charge currents, number of scans, thresholds, and so on. + */ +typedef struct _tsi_config +{ + uint16_t thresh; /*!< High threshold. */ + uint16_t thresl; /*!< Low threshold. */ + tsi_electrode_osc_prescaler_t prescaler; /*!< Prescaler */ + tsi_external_osc_charge_current_t extchrg; /*!< Electrode charge current */ + tsi_reference_osc_charge_current_t refchrg; /*!< Reference charge current */ + tsi_n_consecutive_scans_t nscn; /*!< Number of scans. */ + tsi_analog_mode_t mode; /*!< TSI mode of operation. */ + tsi_osc_voltage_rails_t dvolt; /*!< Oscillator's voltage rails. */ + tsi_series_resistor_t resistor; /*!< Series resistance value */ + tsi_filter_bits_t filter; /*!< Noise mode filter bits */ +} tsi_config_t; + +/******************************************************************************* + * API + ******************************************************************************/ + +#ifdef __cplusplus +extern "C" { +#endif + +/*! + * @brief Initializes hardware. + * + * @details Initializes the peripheral to the targeted state specified by parameter configuration, + * such as sets prescalers, number of scans, clocks, delta voltage + * series resistor, filter bits, reference, and electrode charge current and threshold. + * @param base TSI peripheral base address. + * @param config Pointer to TSI module configuration structure. + * @return none + */ +void TSI_Init(TSI_Type *base, const tsi_config_t *config); + +/*! + * @brief De-initializes hardware. + * + * @details De-initializes the peripheral to default state. + * + * @param base TSI peripheral base address. + * @return none + */ +void TSI_Deinit(TSI_Type *base); + +/*! + * @brief Gets the TSI normal mode user configuration structure. + * This interface sets userConfig structure to a default value. The configuration structure only + * includes the settings for the whole TSI. + * The user configure is set to these values: + * @code + userConfig->prescaler = kTSI_ElecOscPrescaler_2div; + userConfig->extchrg = kTSI_ExtOscChargeCurrent_4uA; + userConfig->refchrg = kTSI_RefOscChargeCurrent_4uA; + userConfig->nscn = kTSI_ConsecutiveScansNumber_10time; + userConfig->mode = kTSI_AnalogModeSel_Capacitive; + userConfig->dvolt = kTSI_OscVolRailsOption_0; + userConfig->resistor = kTSI_SeriesResistance_32k; + userConfig->filter = kTSI_FilterBits_1; + userConfig->thresh = 0U; + userConfig->thresl = 0U; + @endcode + * + * @param userConfig Pointer to the TSI user configuration structure. + */ +void TSI_GetNormalModeDefaultConfig(tsi_config_t *userConfig); + +/*! + * @brief Gets the TSI low power mode default user configuration structure. + * This interface sets userConfig structure to a default value. The configuration structure only + * includes the settings for the whole TSI. + * The user configure is set to these values: + * @code + userConfig->prescaler = kTSI_ElecOscPrescaler_2div; + userConfig->extchrg = kTSI_ExtOscChargeCurrent_4uA; + userConfig->refchrg = kTSI_RefOscChargeCurrent_4uA; + userConfig->nscn = kTSI_ConsecutiveScansNumber_10time; + userConfig->mode = kTSI_AnalogModeSel_Capacitive; + userConfig->dvolt = kTSI_OscVolRailsOption_0; + userConfig->resistor = kTSI_SeriesResistance_32k; + userConfig->filter = kTSI_FilterBits_1; + userConfig->thresh = 400U; + userConfig->thresl = 0U; + @endcode + * + * @param userConfig Pointer to the TSI user configuration structure. + */ +void TSI_GetLowPowerModeDefaultConfig(tsi_config_t *userConfig); + +/*! + * @brief Hardware calibration. + * + * @details Calibrates the peripheral to fetch the initial counter value of + * the enabled electrodes. + * This API is mostly used at initial application setup. Call + * this function after the \ref TSI_Init API and use the calibrated + * counter values to set up applications (such as to determine + * under which counter value we can confirm a touch event occurs). + * + * @param base TSI peripheral base address. + * @param calBuff Data buffer that store the calibrated counter value. + * @return none + * + */ +void TSI_Calibrate(TSI_Type *base, tsi_calibration_data_t *calBuff); + +/*! + * @brief Enables the TSI interrupt requests. + * @param base TSI peripheral base address. + * @param mask interrupt source + * The parameter can be combination of the following source if defined: + * @arg kTSI_GlobalInterruptEnable + * @arg kTSI_EndOfScanInterruptEnable + * @arg kTSI_OutOfRangeInterruptEnable + */ +void TSI_EnableInterrupts(TSI_Type *base, uint32_t mask); + +/*! + * @brief Disables the TSI interrupt requests. + * @param base TSI peripheral base address. + * @param mask interrupt source + * The parameter can be combination of the following source if defined: + * @arg kTSI_GlobalInterruptEnable + * @arg kTSI_EndOfScanInterruptEnable + * @arg kTSI_OutOfRangeInterruptEnable + */ +void TSI_DisableInterrupts(TSI_Type *base, uint32_t mask); + +/*! +* @brief Gets an interrupt flag. +* This function gets the TSI interrupt flags. +* +* @param base TSI peripheral base address. +* @return The mask of these status flags combination. +*/ +static inline uint32_t TSI_GetStatusFlags(TSI_Type *base) +{ + return (base->GENCS & (kTSI_EndOfScanFlag | kTSI_OutOfRangeFlag)); +} + +/*! + * @brief Clears the interrupt flag. + * + * This function clears the TSI interrupt flag, + * automatically cleared flags can't be cleared by this function. + * + * @param base TSI peripheral base address. + * @param mask The status flags to clear. + */ +void TSI_ClearStatusFlags(TSI_Type *base, uint32_t mask); + +/*! +* @brief Gets the TSI scan trigger mode. +* +* @param base TSI peripheral base address. +* @return Scan trigger mode. +*/ +static inline uint32_t TSI_GetScanTriggerMode(TSI_Type *base) +{ + return (base->GENCS & TSI_GENCS_STM_MASK); +} + +/*! +* @brief Gets the scan in progress flag. +* +* @param base TSI peripheral base address. +* @return True - scan is in progress. +* False - scan is not in progress. +*/ +static inline bool TSI_IsScanInProgress(TSI_Type *base) +{ + return (base->GENCS & TSI_GENCS_SCNIP_MASK); +} + +/*! +* @brief Sets the prescaler. +* +* @param base TSI peripheral base address. +* @param prescaler Prescaler value. +* @return none. +*/ +static inline void TSI_SetElectrodeOSCPrescaler(TSI_Type *base, tsi_electrode_osc_prescaler_t prescaler) +{ + base->GENCS = (base->GENCS & ~(TSI_GENCS_PS_MASK | ALL_FLAGS_MASK)) | (TSI_GENCS_PS(prescaler)); +} + +/*! +* @brief Sets the number of scans (NSCN). +* +* @param base TSI peripheral base address. +* @param number Number of scans. +* @return none. +*/ +static inline void TSI_SetNumberOfScans(TSI_Type *base, tsi_n_consecutive_scans_t number) +{ + base->GENCS = (base->GENCS & ~(TSI_GENCS_NSCN_MASK | ALL_FLAGS_MASK)) | (TSI_GENCS_NSCN(number)); +} + +/*! +* @brief Enables/disables the TSI module. +* +* @param base TSI peripheral base address. +* @param enable Choose whether to enable or disable module; +* - true Enable TSI module; +* - false Disable TSI module; +* @return none. +*/ +static inline void TSI_EnableModule(TSI_Type *base, bool enable) +{ + if (enable) + { + base->GENCS = (base->GENCS & ~ALL_FLAGS_MASK) | TSI_GENCS_TSIEN_MASK; /* Enable module */ + } + else + { + base->GENCS = (base->GENCS & ~ALL_FLAGS_MASK) & (~TSI_GENCS_TSIEN_MASK); /* Disable module */ + } +} + +/*! +* @brief Sets the TSI low power STOP mode as enabled or disabled. +* This enables the TSI module function in low power modes. +* +* @param base TSI peripheral base address. +* @param enable Choose to enable or disable STOP mode. +* - true Enable module in STOP mode; +* - false Disable module in STOP mode; +* @return none. +*/ +static inline void TSI_EnableLowPower(TSI_Type *base, bool enable) +{ + if (enable) + { + base->GENCS = (base->GENCS & ~ALL_FLAGS_MASK) | TSI_GENCS_STPE_MASK; /* Module enabled in low power stop modes */ + } + else + { + base->GENCS = (base->GENCS & ~ALL_FLAGS_MASK) & (~TSI_GENCS_STPE_MASK); /* Module disabled in low power stop modes */ + } +} + +/*! +* @brief Enables/disables the hardware trigger scan. +* +* @param base TSI peripheral base address. +* @param enable Choose to enable hardware trigger or software trigger scan. +* - true Enable hardware trigger scan; +* - false Enable software trigger scan; +* @return none. +*/ +static inline void TSI_EnableHardwareTriggerScan(TSI_Type *base, bool enable) +{ + if (enable) + { + base->GENCS = (base->GENCS & ~ALL_FLAGS_MASK) | TSI_GENCS_STM_MASK; /* Enable hardware trigger scan */ + } + else + { + base->GENCS = (base->GENCS & ~ALL_FLAGS_MASK) & (~TSI_GENCS_STM_MASK); /* Enable software trigger scan */ + } +} + +/*! +* @brief Starts a software trigger measurement (triggers a new measurement). +* +* @param base TSI peripheral base address. +* @return none. +*/ +static inline void TSI_StartSoftwareTrigger(TSI_Type *base) +{ + base->DATA |= TSI_DATA_SWTS_MASK; +} + +/*! +* @brief Sets the the measured channel number. +* +* @param base TSI peripheral base address. +* @param channel Channel number 0 ... 15. +* @return none. +*/ +static inline void TSI_SetMeasuredChannelNumber(TSI_Type *base, uint8_t channel) +{ + assert(channel < FSL_FEATURE_TSI_CHANNEL_COUNT); + + base->DATA = ((base->DATA) & ~TSI_DATA_TSICH_MASK) | (TSI_DATA_TSICH(channel)); +} + +/*! +* @brief Gets the current measured channel number. +* +* @param base TSI peripheral base address. +* @return uint8_t Channel number 0 ... 15. +*/ +static inline uint8_t TSI_GetMeasuredChannelNumber(TSI_Type *base) +{ + return (uint8_t)((base->DATA & TSI_DATA_TSICH_MASK) >> TSI_DATA_TSICH_SHIFT); +} + +/*! +* @brief Enables/disables the DMA transfer. +* +* @param base TSI peripheral base address. +* @param enable Choose to enable DMA transfer or not. +* - true Enable DMA transfer; +* - false Disable DMA transfer; +* @return none. +*/ +static inline void TSI_EnableDmaTransfer(TSI_Type *base, bool enable) +{ + if (enable) + { + base->DATA |= TSI_DATA_DMAEN_MASK; /* Enable DMA transfer */ + } + else + { + base->DATA &= ~TSI_DATA_DMAEN_MASK; /* Disable DMA transfer */ + } +} + +#if defined(FSL_FEATURE_TSI_HAS_END_OF_SCAN_DMA_ENABLE) && (FSL_FEATURE_TSI_HAS_END_OF_SCAN_DMA_ENABLE == 1) +/*! +* @brief Decides whether to enable end of scan DMA transfer request only. +* +* @param base TSI peripheral base address. +* @param enable Choose whether to enable End of Scan DMA transfer request only. +* - true Enable End of Scan DMA transfer request only; +* - false Both End-of-Scan and Out-of-Range can generate DMA transfer request. +* @return none. +*/ +static inline void TSI_EnableEndOfScanDmaTransferOnly(TSI_Type *base, bool enable) +{ + if (enable) + { + base->GENCS = (base->GENCS & ~ALL_FLAGS_MASK) | TSI_GENCS_EOSDMEO_MASK; /* Enable End of Scan DMA transfer request only; */ + } + else + { + base->GENCS = + (base->GENCS & ~ALL_FLAGS_MASK) & (~TSI_GENCS_EOSDMEO_MASK); /* Both End-of-Scan and Out-of-Range can generate DMA transfer request. */ + } +} +#endif /* End of (FSL_FEATURE_TSI_HAS_END_OF_SCAN_DMA_ENABLE == 1)*/ + +/*! +* @brief Gets the conversion counter value. +* +* @param base TSI peripheral base address. +* @return Accumulated scan counter value ticked by the reference clock. +*/ +static inline uint16_t TSI_GetCounter(TSI_Type *base) +{ + return (uint16_t)(base->DATA & TSI_DATA_TSICNT_MASK); +} + +/*! +* @brief Sets the TSI wake-up channel low threshold. +* +* @param base TSI peripheral base address. +* @param low_threshold Low counter threshold. +* @return none. +*/ +static inline void TSI_SetLowThreshold(TSI_Type *base, uint16_t low_threshold) +{ + assert(low_threshold < 0xFFFFU); + + base->TSHD = ((base->TSHD) & ~TSI_TSHD_THRESL_MASK) | (TSI_TSHD_THRESL(low_threshold)); +} + +/*! +* @brief Sets the TSI wake-up channel high threshold. +* +* @param base TSI peripheral base address. +* @param high_threshold High counter threshold. +* @return none. +*/ +static inline void TSI_SetHighThreshold(TSI_Type *base, uint16_t high_threshold) +{ + assert(high_threshold < 0xFFFFU); + + base->TSHD = ((base->TSHD) & ~TSI_TSHD_THRESH_MASK) | (TSI_TSHD_THRESH(high_threshold)); +} + +/*! +* @brief Sets the analog mode of the TSI module. +* +* @param base TSI peripheral base address. +* @param mode Mode value. +* @return none. +*/ +static inline void TSI_SetAnalogMode(TSI_Type *base, tsi_analog_mode_t mode) +{ + base->GENCS = (base->GENCS & ~(TSI_GENCS_MODE_MASK | ALL_FLAGS_MASK)) | (TSI_GENCS_MODE(mode)); +} + +/*! +* @brief Gets the noise mode result of the TSI module. +* +* @param base TSI peripheral base address. +* @return Value of the GENCS[MODE] bit-fields. +*/ +static inline uint8_t TSI_GetNoiseModeResult(TSI_Type *base) +{ + return (base->GENCS & TSI_GENCS_MODE_MASK) >> TSI_GENCS_MODE_SHIFT; +} + +/*! +* @brief Sets the reference oscillator charge current. +* +* @param base TSI peripheral base address. +* @param current The reference oscillator charge current. +* @return none. +*/ +static inline void TSI_SetReferenceChargeCurrent(TSI_Type *base, tsi_reference_osc_charge_current_t current) +{ + base->GENCS = (base->GENCS & ~(TSI_GENCS_REFCHRG_MASK | ALL_FLAGS_MASK)) | (TSI_GENCS_REFCHRG(current)); +} + +/*! +* @brief Sets the external electrode charge current. +* +* @param base TSI peripheral base address. +* @param current External electrode charge current. +* @return none. +*/ +static inline void TSI_SetElectrodeChargeCurrent(TSI_Type *base, tsi_external_osc_charge_current_t current) +{ + base->GENCS = (base->GENCS & ~(TSI_GENCS_EXTCHRG_MASK | ALL_FLAGS_MASK)) | (TSI_GENCS_EXTCHRG(current)); +} + +/*! +* @brief Sets the oscillator's voltage rails. +* +* @param base TSI peripheral base address. +* @param dvolt The voltage rails. +* @return none. +*/ +static inline void TSI_SetOscVoltageRails(TSI_Type *base, tsi_osc_voltage_rails_t dvolt) +{ + base->GENCS = (base->GENCS & ~(TSI_GENCS_DVOLT_MASK | ALL_FLAGS_MASK)) | (TSI_GENCS_DVOLT(dvolt)); +} + +/*! +* @brief Sets the electrode series resistance value in EXTCHRG[0] bit. +* +* @param base TSI peripheral base address. +* @param resistor Series resistance. +* @return none. +*/ +static inline void TSI_SetElectrodeSeriesResistor(TSI_Type *base, tsi_series_resistor_t resistor) +{ + base->GENCS = (base->GENCS & TSI_V4_EXTCHRG_RESISTOR_BIT_CLEAR) | TSI_GENCS_EXTCHRG(resistor); +} + +/*! +* @brief Sets the electrode filter bits value in EXTCHRG[2:1] bits. +* +* @param base TSI peripheral base address. +* @param filter Series resistance. +* @return none. +*/ +static inline void TSI_SetFilterBits(TSI_Type *base, tsi_filter_bits_t filter) +{ + base->GENCS = (base->GENCS & TSI_V4_EXTCHRG_FILTER_BITS_CLEAR) | (filter << TSI_V4_EXTCHRG_FILTER_BITS_SHIFT); +} + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +/*! @}*/ + +#endif /* _FSL_TSI_V4_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_vref.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_vref.c new file mode 100644 index 00000000000..248132c6179 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_vref.c @@ -0,0 +1,224 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_vref.h" + +/******************************************************************************* + * Prototypes + ******************************************************************************/ + +/*! + * @brief Gets the instance from the base address + * + * @param base VREF peripheral base address + * + * @return The VREF instance + */ +static uint32_t VREF_GetInstance(VREF_Type *base); + +/******************************************************************************* + * Variables + ******************************************************************************/ + +/*! @brief Pointers to VREF bases for each instance. */ +static VREF_Type *const s_vrefBases[] = VREF_BASE_PTRS; + +/*! @brief Pointers to VREF clocks for each instance. */ +static const clock_ip_name_t s_vrefClocks[] = VREF_CLOCKS; + +/******************************************************************************* + * Code + ******************************************************************************/ + +static uint32_t VREF_GetInstance(VREF_Type *base) +{ + uint32_t instance; + + /* Find the instance index from base address mappings. */ + for (instance = 0; instance < FSL_FEATURE_SOC_VREF_COUNT; instance++) + { + if (s_vrefBases[instance] == base) + { + break; + } + } + + assert(instance < FSL_FEATURE_SOC_VREF_COUNT); + + return instance; +} + +void VREF_Init(VREF_Type *base, const vref_config_t *config) +{ + assert(config != NULL); + + uint8_t reg = 0U; + + /* Ungate clock for VREF */ + CLOCK_EnableClock(s_vrefClocks[VREF_GetInstance(base)]); + +/* Configure VREF to a known state */ +#if defined(FSL_FEATURE_VREF_HAS_CHOP_OSC) && FSL_FEATURE_VREF_HAS_CHOP_OSC + /* Set chop oscillator bit */ + base->TRM |= VREF_TRM_CHOPEN_MASK; +#endif /* FSL_FEATURE_VREF_HAS_CHOP_OSC */ + /* Get current SC register */ +#if defined(FSL_FEATURE_VREF_HAS_LOW_REFERENCE) && FSL_FEATURE_VREF_HAS_LOW_REFERENCE + reg = base->VREFH_SC; +#else + reg = base->SC; +#endif/* FSL_FEATURE_VREF_HAS_LOW_REFERENCE */ + /* Clear old buffer mode selection bits */ + reg &= ~VREF_SC_MODE_LV_MASK; + /* Set buffer Mode selection and Regulator enable bit */ + reg |= VREF_SC_MODE_LV(config->bufferMode) | VREF_SC_REGEN(1U); +#if defined(FSL_FEATURE_VREF_HAS_COMPENSATION) && FSL_FEATURE_VREF_HAS_COMPENSATION + /* Set second order curvature compensation enable bit */ + reg |= VREF_SC_ICOMPEN(1U); +#endif /* FSL_FEATURE_VREF_HAS_COMPENSATION */ + /* Enable VREF module */ + reg |= VREF_SC_VREFEN(1U); + /* Update bit-field from value to Status and Control register */ +#if defined(FSL_FEATURE_VREF_HAS_LOW_REFERENCE) && FSL_FEATURE_VREF_HAS_LOW_REFERENCE + base->VREFH_SC = reg; +#else + base->SC = reg; +#endif/* FSL_FEATURE_VREF_HAS_LOW_REFERENCE */ +#if defined(FSL_FEATURE_VREF_HAS_LOW_REFERENCE) && FSL_FEATURE_VREF_HAS_LOW_REFERENCE + reg = base->VREFL_TRM; + /* Clear old select external voltage reference and VREFL (0.4 V) reference buffer enable bits */ + reg &= ~(VREF_VREFL_TRM_VREFL_EN_MASK | VREF_VREFL_TRM_VREFL_SEL_MASK); + /* Select external voltage reference and set VREFL (0.4 V) reference buffer enable */ + reg |= VREF_VREFL_TRM_VREFL_SEL(config->enableExternalVoltRef) | VREF_VREFL_TRM_VREFL_EN(config->enableLowRef); + base->VREFL_TRM = reg; +#endif /* FSL_FEATURE_VREF_HAS_LOW_REFERENCE */ + +#if defined(FSL_FEATURE_VREF_HAS_TRM4) && FSL_FEATURE_VREF_HAS_TRM4 + reg = base->TRM4; + /* Clear old select internal voltage reference bit (2.1V) */ + reg &= ~VREF_TRM4_VREF2V1_EN_MASK; + /* Select internal voltage reference (2.1V) */ + reg |= VREF_TRM4_VREF2V1_EN(config->enable2V1VoltRef); + base->TRM4 = reg; +#endif /* FSL_FEATURE_VREF_HAS_TRM4 */ + + /* Wait until internal voltage stable */ +#if defined(FSL_FEATURE_VREF_HAS_LOW_REFERENCE) && FSL_FEATURE_VREF_HAS_LOW_REFERENCE + while ((base->VREFH_SC & VREF_SC_VREFST_MASK) == 0) +#else + while ((base->SC & VREF_SC_VREFST_MASK) == 0) +#endif/* FSL_FEATURE_VREF_HAS_LOW_REFERENCE */ + { + } +} + +void VREF_Deinit(VREF_Type *base) +{ + /* Gate clock for VREF */ + CLOCK_DisableClock(s_vrefClocks[VREF_GetInstance(base)]); +} + +void VREF_GetDefaultConfig(vref_config_t *config) +{ + assert(config); + +/* Set High power buffer mode in */ +#if defined(FSL_FEATURE_VREF_MODE_LV_TYPE) && FSL_FEATURE_VREF_MODE_LV_TYPE + config->bufferMode = kVREF_ModeHighPowerBuffer; +#else + config->bufferMode = kVREF_ModeTightRegulationBuffer; +#endif /* FSL_FEATURE_VREF_MODE_LV_TYPE */ + +#if defined(FSL_FEATURE_VREF_HAS_LOW_REFERENCE) && FSL_FEATURE_VREF_HAS_LOW_REFERENCE + /* Select internal voltage reference */ + config->enableExternalVoltRef = false; + /* Set VREFL (0.4 V) reference buffer disable */ + config->enableLowRef = false; +#endif /* FSL_FEATURE_VREF_HAS_LOW_REFERENCE */ + +#if defined(FSL_FEATURE_VREF_HAS_TRM4) && FSL_FEATURE_VREF_HAS_TRM4 + /* Disable internal voltage reference (2.1V) */ + config->enable2V1VoltRef = false; +#endif /* FSL_FEATURE_VREF_HAS_TRM4 */ +} + +void VREF_SetTrimVal(VREF_Type *base, uint8_t trimValue) +{ + uint8_t reg = 0U; + + /* Set TRIM bits value in voltage reference */ + reg = base->TRM; + reg = ((reg & ~VREF_TRM_TRIM_MASK) | VREF_TRM_TRIM(trimValue)); + base->TRM = reg; + /* Wait until internal voltage stable */ +#if defined(FSL_FEATURE_VREF_HAS_LOW_REFERENCE) && FSL_FEATURE_VREF_HAS_LOW_REFERENCE + while ((base->VREFH_SC & VREF_SC_VREFST_MASK) == 0) +#else + while ((base->SC & VREF_SC_VREFST_MASK) == 0) +#endif/* FSL_FEATURE_VREF_HAS_LOW_REFERENCE */ + { + } +} + +#if defined(FSL_FEATURE_VREF_HAS_TRM4) && FSL_FEATURE_VREF_HAS_TRM4 +void VREF_SetTrim2V1Val(VREF_Type *base, uint8_t trimValue) +{ + uint8_t reg = 0U; + + /* Set TRIM bits value in voltage reference (2V1) */ + reg = base->TRM4; + reg = ((reg & ~VREF_TRM4_TRIM2V1_MASK) | VREF_TRM4_TRIM2V1(trimValue)); + base->TRM4 = reg; + /* Wait until internal voltage stable */ + while ((base->SC & VREF_SC_VREFST_MASK) == 0) + { + } +} +#endif /* FSL_FEATURE_VREF_HAS_TRM4 */ + +#if defined(FSL_FEATURE_VREF_HAS_LOW_REFERENCE) && FSL_FEATURE_VREF_HAS_LOW_REFERENCE +void VREF_SetLowReferenceTrimVal(VREF_Type *base, uint8_t trimValue) +{ + /* The values 111b and 110b are NOT valid/allowed */ + assert((trimValue != 0x7U) && (trimValue != 0x6U)); + + uint8_t reg = 0U; + + /* Set TRIM bits value in low voltage reference */ + reg = base->VREFL_TRM; + reg = ((reg & ~VREF_VREFL_TRM_VREFL_TRIM_MASK) | VREF_VREFL_TRM_VREFL_TRIM(trimValue)); + base->VREFL_TRM = reg; + /* Wait until internal voltage stable */ + + while ((base->VREFH_SC & VREF_SC_VREFST_MASK) == 0) + { + } +} +#endif /* FSL_FEATURE_VREF_HAS_LOW_REFERENCE */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_vref.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_vref.h new file mode 100644 index 00000000000..349c124dc35 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_vref.h @@ -0,0 +1,256 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _FSL_VREF_H_ +#define _FSL_VREF_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup vref + * @{ + */ + + +/****************************************************************************** + * Definitions + ******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +#define FSL_VREF_DRIVER_VERSION (MAKE_VERSION(2, 1, 0)) /*!< Version 2.1.0. */ +/*@}*/ + +/* Those macros below defined to support SoC family which have VREFL (0.4V) reference */ +#if defined(FSL_FEATURE_VREF_HAS_LOW_REFERENCE) && FSL_FEATURE_VREF_HAS_LOW_REFERENCE +#define VREF_SC_MODE_LV VREF_VREFH_SC_MODE_LV +#define VREF_SC_REGEN VREF_VREFH_SC_REGEN +#define VREF_SC_VREFEN VREF_VREFH_SC_VREFEN +#define VREF_SC_ICOMPEN VREF_VREFH_SC_ICOMPEN +#define VREF_SC_REGEN_MASK VREF_VREFH_SC_REGEN_MASK +#define VREF_SC_VREFST_MASK VREF_VREFH_SC_VREFST_MASK +#define VREF_SC_VREFEN_MASK VREF_VREFH_SC_VREFEN_MASK +#define VREF_SC_MODE_LV_MASK VREF_VREFH_SC_MODE_LV_MASK +#define VREF_SC_ICOMPEN_MASK VREF_VREFH_SC_ICOMPEN_MASK +#define TRM VREFH_TRM +#define VREF_TRM_TRIM VREF_VREFH_TRM_TRIM +#define VREF_TRM_CHOPEN_MASK VREF_VREFH_TRM_CHOPEN_MASK +#define VREF_TRM_TRIM_MASK VREF_VREFH_TRM_TRIM_MASK +#define VREF_TRM_CHOPEN_SHIFT VREF_VREFH_TRM_CHOPEN_SHIFT +#define VREF_TRM_TRIM_SHIFT VREF_VREFH_TRM_TRIM_SHIFT +#define VREF_SC_MODE_LV_SHIFT VREF_VREFH_SC_MODE_LV_SHIFT +#define VREF_SC_REGEN_SHIFT VREF_VREFH_SC_REGEN_SHIFT +#define VREF_SC_VREFST_SHIFT VREF_VREFH_SC_VREFST_SHIFT +#define VREF_SC_ICOMPEN_SHIFT VREF_VREFH_SC_ICOMPEN_SHIFT +#endif /* FSL_FEATURE_VREF_HAS_LOW_REFERENCE */ + +/*! + * @brief VREF modes. + */ +typedef enum _vref_buffer_mode +{ + kVREF_ModeBandgapOnly = 0U, /*!< Bandgap on only, for stabilization and startup */ +#if defined(FSL_FEATURE_VREF_MODE_LV_TYPE) && FSL_FEATURE_VREF_MODE_LV_TYPE + kVREF_ModeHighPowerBuffer = 1U, /*!< High power buffer mode enabled */ + kVREF_ModeLowPowerBuffer = 2U /*!< Low power buffer mode enabled */ +#else + kVREF_ModeTightRegulationBuffer = 2U /*!< Tight regulation buffer enabled */ +#endif /* FSL_FEATURE_VREF_MODE_LV_TYPE */ +} vref_buffer_mode_t; + +/*! + * @brief The description structure for the VREF module. + */ +typedef struct _vref_config +{ + vref_buffer_mode_t bufferMode; /*!< Buffer mode selection */ +#if defined(FSL_FEATURE_VREF_HAS_LOW_REFERENCE) && FSL_FEATURE_VREF_HAS_LOW_REFERENCE + bool enableLowRef; /*!< Set VREFL (0.4 V) reference buffer enable or disable */ + bool enableExternalVoltRef; /*!< Select external voltage reference or not (internal) */ +#endif /* FSL_FEATURE_VREF_HAS_LOW_REFERENCE */ +#if defined(FSL_FEATURE_VREF_HAS_TRM4) && FSL_FEATURE_VREF_HAS_TRM4 + bool enable2V1VoltRef; /*!< Enable Internal Voltage Reference (2.1V) */ +#endif /* FSL_FEATURE_VREF_HAS_TRM4 */ +} vref_config_t; + +/****************************************************************************** + * API + ******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus */ + +/*! + * @name VREF functional operation + * @{ + */ + +/*! + * @brief Enables the clock gate and configures the VREF module according to the configuration structure. + * + * This function must be called before calling all the other VREF driver functions, + * read/write registers, and configurations with user-defined settings. + * The example below shows how to set up vref_config_t parameters and + * how to call the VREF_Init function by passing in these parameters: + * Example: + * @code + * vref_config_t vrefConfig; + * vrefConfig.bufferMode = kVREF_ModeHighPowerBuffer; + * vrefConfig.enableExternalVoltRef = false; + * vrefConfig.enableLowRef = false; + * VREF_Init(VREF, &vrefConfig); + * @endcode + * + * @param base VREF peripheral address. + * @param config Pointer to the configuration structure. + */ +void VREF_Init(VREF_Type *base, const vref_config_t *config); + +/*! + * @brief Stops and disables the clock for the VREF module. + * + * This function should be called to shut down the module. + * Example: + * @code + * vref_config_t vrefUserConfig; + * VREF_Init(VREF); + * VREF_GetDefaultConfig(&vrefUserConfig); + * ... + * VREF_Deinit(VREF); + * @endcode + * + * @param base VREF peripheral address. + */ +void VREF_Deinit(VREF_Type *base); + +/*! + * @brief Initializes the VREF configuration structure. + * + * This function initializes the VREF configuration structure to a default value. + * Example: + * @code + * vrefConfig->bufferMode = kVREF_ModeHighPowerBuffer; + * vrefConfig->enableExternalVoltRef = false; + * vrefConfig->enableLowRef = false; + * @endcode + * + * @param config Pointer to the initialization structure. + */ +void VREF_GetDefaultConfig(vref_config_t *config); + +/*! + * @brief Sets a TRIM value for reference voltage. + * + * This function sets a TRIM value for reference voltage. + * Note that the TRIM value maximum is 0x3F. + * + * @param base VREF peripheral address. + * @param trimValue Value of the trim register to set the output reference voltage (maximum 0x3F (6-bit)). + */ +void VREF_SetTrimVal(VREF_Type *base, uint8_t trimValue); + +/*! + * @brief Reads the value of the TRIM meaning output voltage. + * + * This function gets the TRIM value from the TRM register. + * + * @param base VREF peripheral address. + * @return Six-bit value of trim setting. + */ +static inline uint8_t VREF_GetTrimVal(VREF_Type *base) +{ + return (base->TRM & VREF_TRM_TRIM_MASK); +} + +#if defined(FSL_FEATURE_VREF_HAS_TRM4) && FSL_FEATURE_VREF_HAS_TRM4 +/*! + * @brief Sets a TRIM value for reference voltage (2V1). + * + * This function sets a TRIM value for reference voltage (2V1). + * Note that the TRIM value maximum is 0x3F. + * + * @param base VREF peripheral address. + * @param trimValue Value of the trim register to set the output reference voltage (maximum 0x3F (6-bit)). + */ +void VREF_SetTrim2V1Val(VREF_Type *base, uint8_t trimValue); + +/*! + * @brief Reads the value of the TRIM meaning output voltage (2V1). + * + * This function gets the TRIM value from the VREF_TRM4 register. + * + * @param base VREF peripheral address. + * @return Six-bit value of trim setting. + */ +static inline uint8_t VREF_GetTrim2V1Val(VREF_Type *base) +{ + return (base->TRM4 & VREF_TRM4_TRIM2V1_MASK); +} +#endif /* FSL_FEATURE_VREF_HAS_TRM4 */ + +#if defined(FSL_FEATURE_VREF_HAS_LOW_REFERENCE) && FSL_FEATURE_VREF_HAS_LOW_REFERENCE + +/*! + * @brief Sets the TRIM value for low voltage reference. + * + * This function sets the TRIM value for low reference voltage. + * NOTE: + * - The TRIM value maximum is 0x05U + * - The values 111b and 110b are not valid/allowed. + * + * @param base VREF peripheral address. + * @param trimValue Value of the trim register to set output low reference voltage (maximum 0x05U (3-bit)). + */ +void VREF_SetLowReferenceTrimVal(VREF_Type *base, uint8_t trimValue); + +/*! + * @brief Reads the value of the TRIM meaning output voltage. + * + * This function gets the TRIM value from the VREFL_TRM register. + * + * @param base VREF peripheral address. + * @return Three-bit value of the trim setting. + */ +static inline uint8_t VREF_GetLowReferenceTrimVal(VREF_Type *base) +{ + return (base->VREFL_TRM & VREF_VREFL_TRM_VREFL_TRIM_MASK); +} +#endif /* FSL_FEATURE_VREF_HAS_LOW_REFERENCE */ + +/*@}*/ + +#if defined(__cplusplus) +} +#endif /* __cplusplus */ + +/*! @}*/ + +#endif /* _FSL_VREF_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_wdog.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_wdog.c new file mode 100644 index 00000000000..489798ca889 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_wdog.c @@ -0,0 +1,153 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include "fsl_wdog.h" + +/******************************************************************************* + * Code + ******************************************************************************/ + +void WDOG_GetDefaultConfig(wdog_config_t *config) +{ + assert(config); + + config->enableWdog = true; + config->clockSource = kWDOG_LpoClockSource; + config->prescaler = kWDOG_ClockPrescalerDivide1; +#if defined(FSL_FEATURE_WDOG_HAS_WAITEN) && FSL_FEATURE_WDOG_HAS_WAITEN + config->workMode.enableWait = true; +#endif /* FSL_FEATURE_WDOG_HAS_WAITEN */ + config->workMode.enableStop = false; + config->workMode.enableDebug = false; + config->enableUpdate = true; + config->enableInterrupt = false; + config->enableWindowMode = false; + config->windowValue = 0U; + config->timeoutValue = 0xFFFFU; +} + +void WDOG_Init(WDOG_Type *base, const wdog_config_t *config) +{ + assert(config); + + uint32_t value = 0U; + uint32_t primaskValue = 0U; + + value = WDOG_STCTRLH_WDOGEN(config->enableWdog) | WDOG_STCTRLH_CLKSRC(config->clockSource) | + WDOG_STCTRLH_IRQRSTEN(config->enableInterrupt) | WDOG_STCTRLH_WINEN(config->enableWindowMode) | + WDOG_STCTRLH_ALLOWUPDATE(config->enableUpdate) | WDOG_STCTRLH_DBGEN(config->workMode.enableDebug) | + WDOG_STCTRLH_STOPEN(config->workMode.enableStop) | +#if defined(FSL_FEATURE_WDOG_HAS_WAITEN) && FSL_FEATURE_WDOG_HAS_WAITEN + WDOG_STCTRLH_WAITEN(config->workMode.enableWait) | +#endif /* FSL_FEATURE_WDOG_HAS_WAITEN */ + WDOG_STCTRLH_DISTESTWDOG(1U); + + /* Disable the global interrupts. Otherwise, an interrupt could effectively invalidate the unlock sequence + * and the WCT may expire. After the configuration finishes, re-enable the global interrupts. */ + primaskValue = DisableGlobalIRQ(); + WDOG_Unlock(base); + /* Wait one bus clock cycle */ + base->RSTCNT = 0U; + /* Set configruation */ + base->PRESC = WDOG_PRESC_PRESCVAL(config->prescaler); + base->WINH = (uint16_t)((config->windowValue >> 16U) & 0xFFFFU); + base->WINL = (uint16_t)((config->windowValue) & 0xFFFFU); + base->TOVALH = (uint16_t)((config->timeoutValue >> 16U) & 0xFFFFU); + base->TOVALL = (uint16_t)((config->timeoutValue) & 0xFFFFU); + base->STCTRLH = value; + EnableGlobalIRQ(primaskValue); +} + +void WDOG_Deinit(WDOG_Type *base) +{ + uint32_t primaskValue = 0U; + + /* Disable the global interrupts */ + primaskValue = DisableGlobalIRQ(); + WDOG_Unlock(base); + /* Wait one bus clock cycle */ + base->RSTCNT = 0U; + WDOG_Disable(base); + EnableGlobalIRQ(primaskValue); + WDOG_ClearResetCount(base); +} + +void WDOG_SetTestModeConfig(WDOG_Type *base, wdog_test_config_t *config) +{ + assert(config); + + uint32_t value = 0U; + uint32_t primaskValue = 0U; + + value = WDOG_STCTRLH_DISTESTWDOG(0U) | WDOG_STCTRLH_TESTWDOG(1U) | WDOG_STCTRLH_TESTSEL(config->testMode) | + WDOG_STCTRLH_BYTESEL(config->testedByte) | WDOG_STCTRLH_IRQRSTEN(0U) | WDOG_STCTRLH_WDOGEN(1U) | + WDOG_STCTRLH_ALLOWUPDATE(1U); + + /* Disable the global interrupts. Otherwise, an interrupt could effectively invalidate the unlock sequence + * and the WCT may expire. After the configuration finishes, re-enable the global interrupts. */ + primaskValue = DisableGlobalIRQ(); + WDOG_Unlock(base); + /* Wait one bus clock cycle */ + base->RSTCNT = 0U; + /* Set configruation */ + base->TOVALH = (uint16_t)((config->timeoutValue >> 16U) & 0xFFFFU); + base->TOVALL = (uint16_t)((config->timeoutValue) & 0xFFFFU); + base->STCTRLH = value; + EnableGlobalIRQ(primaskValue); +} + +uint32_t WDOG_GetStatusFlags(WDOG_Type *base) +{ + uint32_t status_flag = 0U; + + status_flag |= (base->STCTRLH & WDOG_STCTRLH_WDOGEN_MASK); + status_flag |= (base->STCTRLL & WDOG_STCTRLL_INTFLG_MASK); + + return status_flag; +} + +void WDOG_ClearStatusFlags(WDOG_Type *base, uint32_t mask) +{ + if (mask & kWDOG_TimeoutFlag) + { + base->STCTRLL |= WDOG_STCTRLL_INTFLG_MASK; + } +} + +void WDOG_Refresh(WDOG_Type *base) +{ + uint32_t primaskValue = 0U; + + /* Disable the global interrupt to protect refresh sequence */ + primaskValue = DisableGlobalIRQ(); + base->REFRESH = WDOG_FIRST_WORD_OF_REFRESH; + base->REFRESH = WDOG_SECOND_WORD_OF_REFRESH; + EnableGlobalIRQ(primaskValue); +} diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_wdog.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_wdog.h new file mode 100644 index 00000000000..f49740667b9 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/drivers/fsl_wdog.h @@ -0,0 +1,433 @@ +/* + * Copyright (c) 2015, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +#ifndef _FSL_WDOG_H_ +#define _FSL_WDOG_H_ + +#include "fsl_common.h" + +/*! + * @addtogroup wdog + * @{ + */ + + +/******************************************************************************* + * Definitions + *******************************************************************************/ + +/*! @name Driver version */ +/*@{*/ +/*! @brief Defines WDOG driver version 2.0.0. */ +#define FSL_WDOG_DRIVER_VERSION (MAKE_VERSION(2, 0, 0)) +/*@}*/ + +/*! @name Unlock sequence */ +/*@{*/ +#define WDOG_FIRST_WORD_OF_UNLOCK (0xC520U) /*!< First word of unlock sequence */ +#define WDOG_SECOND_WORD_OF_UNLOCK (0xD928U) /*!< Second word of unlock sequence */ +/*@}*/ + +/*! @name Refresh sequence */ +/*@{*/ +#define WDOG_FIRST_WORD_OF_REFRESH (0xA602U) /*!< First word of refresh sequence */ +#define WDOG_SECOND_WORD_OF_REFRESH (0xB480U) /*!< Second word of refresh sequence */ +/*@}*/ + +/*! @brief Describes WDOG clock source. */ +typedef enum _wdog_clock_source +{ + kWDOG_LpoClockSource = 0U, /*!< WDOG clock sourced from LPO*/ + kWDOG_AlternateClockSource = 1U, /*!< WDOG clock sourced from alternate clock source*/ +} wdog_clock_source_t; + +/*! @brief Defines WDOG work mode. */ +typedef struct _wdog_work_mode +{ +#if defined(FSL_FEATURE_WDOG_HAS_WAITEN) && FSL_FEATURE_WDOG_HAS_WAITEN + bool enableWait; /*!< Enables or disables WDOG in wait mode */ +#endif /* FSL_FEATURE_WDOG_HAS_WAITEN */ + bool enableStop; /*!< Enables or disables WDOG in stop mode */ + bool enableDebug; /*!< Enables or disables WDOG in debug mode */ +} wdog_work_mode_t; + +/*! @brief Describes the selection of the clock prescaler. */ +typedef enum _wdog_clock_prescaler +{ + kWDOG_ClockPrescalerDivide1 = 0x0U, /*!< Divided by 1 */ + kWDOG_ClockPrescalerDivide2 = 0x1U, /*!< Divided by 2 */ + kWDOG_ClockPrescalerDivide3 = 0x2U, /*!< Divided by 3 */ + kWDOG_ClockPrescalerDivide4 = 0x3U, /*!< Divided by 4 */ + kWDOG_ClockPrescalerDivide5 = 0x4U, /*!< Divided by 5 */ + kWDOG_ClockPrescalerDivide6 = 0x5U, /*!< Divided by 6 */ + kWDOG_ClockPrescalerDivide7 = 0x6U, /*!< Divided by 7 */ + kWDOG_ClockPrescalerDivide8 = 0x7U, /*!< Divided by 8 */ +} wdog_clock_prescaler_t; + +/*! @brief Describes WDOG configuration structure. */ +typedef struct _wdog_config +{ + bool enableWdog; /*!< Enables or disables WDOG */ + wdog_clock_source_t clockSource; /*!< Clock source select */ + wdog_clock_prescaler_t prescaler; /*!< Clock prescaler value */ + wdog_work_mode_t workMode; /*!< Configures WDOG work mode in debug stop and wait mode */ + bool enableUpdate; /*!< Update write-once register enable */ + bool enableInterrupt; /*!< Enables or disables WDOG interrupt */ + bool enableWindowMode; /*!< Enables or disables WDOG window mode */ + uint32_t windowValue; /*!< Window value */ + uint32_t timeoutValue; /*!< Timeout value */ +} wdog_config_t; + +/*! @brief Describes WDOG test mode. */ +typedef enum _wdog_test_mode +{ + kWDOG_QuickTest = 0U, /*!< Selects quick test */ + kWDOG_ByteTest = 1U, /*!< Selects byte test */ +} wdog_test_mode_t; + +/*! @brief Describes WDOG tested byte selection in byte test mode. */ +typedef enum _wdog_tested_byte +{ + kWDOG_TestByte0 = 0U, /*!< Byte 0 selected in byte test mode */ + kWDOG_TestByte1 = 1U, /*!< Byte 1 selected in byte test mode */ + kWDOG_TestByte2 = 2U, /*!< Byte 2 selected in byte test mode */ + kWDOG_TestByte3 = 3U, /*!< Byte 3 selected in byte test mode */ +} wdog_tested_byte_t; + +/*! @brief Describes WDOG test mode configuration structure. */ +typedef struct _wdog_test_config +{ + wdog_test_mode_t testMode; /*!< Selects test mode */ + wdog_tested_byte_t testedByte; /*!< Selects tested byte in byte test mode */ + uint32_t timeoutValue; /*!< Timeout value */ +} wdog_test_config_t; + +/*! + * @brief WDOG interrupt configuration structure, default settings all disabled. + * + * This structure contains the settings for all of the WDOG interrupt configurations. + */ +enum _wdog_interrupt_enable_t +{ + kWDOG_InterruptEnable = WDOG_STCTRLH_IRQRSTEN_MASK, /*!< WDOG timeout generates an interrupt before reset*/ +}; + +/*! + * @brief WDOG status flags. + * + * This structure contains the WDOG status flags for use in the WDOG functions. + */ +enum _wdog_status_flags_t +{ + kWDOG_RunningFlag = WDOG_STCTRLH_WDOGEN_MASK, /*!< Running flag, set when WDOG is enabled*/ + kWDOG_TimeoutFlag = WDOG_STCTRLL_INTFLG_MASK, /*!< Interrupt flag, set when an exception occurs*/ +}; + +/******************************************************************************* + * API + *******************************************************************************/ + +#if defined(__cplusplus) +extern "C" { +#endif /* __cplusplus */ + +/*! + * @name WDOG Initialization and De-initialization + * @{ + */ + +/*! + * @brief Initializes WDOG configure sturcture. + * + * This function initializes the WDOG configuration structure to default value. The default + * values are: + * @code + * wdogConfig->enableWdog = true; + * wdogConfig->clockSource = kWDOG_LpoClockSource; + * wdogConfig->prescaler = kWDOG_ClockPrescalerDivide1; + * wdogConfig->workMode.enableWait = true; + * wdogConfig->workMode.enableStop = false; + * wdogConfig->workMode.enableDebug = false; + * wdogConfig->enableUpdate = true; + * wdogConfig->enableInterrupt = false; + * wdogConfig->enableWindowMode = false; + * wdogConfig->windowValue = 0; + * wdogConfig->timeoutValue = 0xFFFFU; + * @endcode + * + * @param config Pointer to WDOG config structure. + * @see wdog_config_t + */ +void WDOG_GetDefaultConfig(wdog_config_t *config); + +/*! + * @brief Initializes the WDOG. + * + * This function initializes the WDOG. When called, the WDOG runs according to the configuration. + * If user wants to reconfigure WDOG without forcing a reset first, enableUpdate must be set to true + * in configuration. + * + * Example: + * @code + * wdog_config_t config; + * WDOG_GetDefaultConfig(&config); + * config.timeoutValue = 0x7ffU; + * config.enableUpdate = true; + * WDOG_Init(wdog_base,&config); + * @endcode + * + * @param base WDOG peripheral base address + * @param config The configuration of WDOG + */ +void WDOG_Init(WDOG_Type *base, const wdog_config_t *config); + +/*! + * @brief Shuts down the WDOG. + * + * This function shuts down the WDOG. + * Make sure that the WDOG_STCTRLH.ALLOWUPDATE is 1 which means that the register update is enabled. + */ +void WDOG_Deinit(WDOG_Type *base); + +/*! + * @brief Configures WDOG functional test. + * + * This function is used to configure the WDOG functional test. When called, the WDOG goes into test mode + * and runs according to the configuration. + * Make sure that the WDOG_STCTRLH.ALLOWUPDATE is 1 which means that the register update is enabled. + * + * Example: + * @code + * wdog_test_config_t test_config; + * test_config.testMode = kWDOG_QuickTest; + * test_config.timeoutValue = 0xfffffu; + * WDOG_SetTestModeConfig(wdog_base, &test_config); + * @endcode + * @param base WDOG peripheral base address + * @param config The functional test configuration of WDOG + */ +void WDOG_SetTestModeConfig(WDOG_Type *base, wdog_test_config_t *config); + +/* @} */ + +/*! + * @name WDOG Functional Operation + * @{ + */ + +/*! + * @brief Enables the WDOG module. + * + * This function write value into WDOG_STCTRLH register to enable the WDOG, it is a write-once register, + * make sure that the WCT window is still open and this register has not been written in this WCT + * while this function is called. + * + * @param base WDOG peripheral base address + */ +static inline void WDOG_Enable(WDOG_Type *base) +{ + base->STCTRLH |= WDOG_STCTRLH_WDOGEN_MASK; +} + +/*! + * @brief Disables the WDOG module. + * + * This function write value into WDOG_STCTRLH register to disable the WDOG, it is a write-once register, + * make sure that the WCT window is still open and this register has not been written in this WCT + * while this function is called. + * + * @param base WDOG peripheral base address + */ +static inline void WDOG_Disable(WDOG_Type *base) +{ + base->STCTRLH &= ~WDOG_STCTRLH_WDOGEN_MASK; +} + +/*! + * @brief Enable WDOG interrupt. + * + * This function write value into WDOG_STCTRLH register to enable WDOG interrupt, it is a write-once register, + * make sure that the WCT window is still open and this register has not been written in this WCT + * while this function is called. + * + * @param base WDOG peripheral base address + * @param mask The interrupts to enable + * The parameter can be combination of the following source if defined: + * @arg kWDOG_InterruptEnable + */ +static inline void WDOG_EnableInterrupts(WDOG_Type *base, uint32_t mask) +{ + base->STCTRLH |= mask; +} + +/*! + * @brief Disable WDOG interrupt. + * + * This function write value into WDOG_STCTRLH register to disable WDOG interrupt, it is a write-once register, + * make sure that the WCT window is still open and this register has not been written in this WCT + * while this function is called. + * + * @param base WDOG peripheral base address + * @param mask The interrupts to disable + * The parameter can be combination of the following source if defined: + * @arg kWDOG_InterruptEnable + */ +static inline void WDOG_DisableInterrupts(WDOG_Type *base, uint32_t mask) +{ + base->STCTRLH &= ~mask; +} + +/*! + * @brief Gets WDOG all status flags. + * + * This function gets all status flags. + * + * Example for getting Running Flag: + * @code + * uint32_t status; + * status = WDOG_GetStatusFlags(wdog_base) & kWDOG_RunningFlag; + * @endcode + * @param base WDOG peripheral base address + * @return State of the status flag: asserted (true) or not-asserted (false).@see _wdog_status_flags_t + * - true: a related status flag has been set. + * - false: a related status flag is not set. + */ +uint32_t WDOG_GetStatusFlags(WDOG_Type *base); + +/*! + * @brief Clear WDOG flag. + * + * This function clears WDOG status flag. + * + * Example for clearing timeout(interrupt) flag: + * @code + * WDOG_ClearStatusFlags(wdog_base,kWDOG_TimeoutFlag); + * @endcode + * @param base WDOG peripheral base address + * @param mask The status flags to clear. + * The parameter could be any combination of the following values: + * kWDOG_TimeoutFlag + */ +void WDOG_ClearStatusFlags(WDOG_Type *base, uint32_t mask); + +/*! + * @brief Set the WDOG timeout value. + * + * This function sets the timeout value. + * It should be ensured that the time-out value for the WDOG is always greater than + * 2xWCT time + 20 bus clock cycles. + * This function write value into WDOG_TOVALH and WDOG_TOVALL registers which are wirte-once. + * Make sure the WCT window is still open and these two registers have not been written in this WCT + * while this function is called. + * + * @param base WDOG peripheral base address + * @param timeoutCount WDOG timeout value, count of WDOG clock tick. + */ +static inline void WDOG_SetTimeoutValue(WDOG_Type *base, uint32_t timeoutCount) +{ + base->TOVALH = (uint16_t)((timeoutCount >> 16U) & 0xFFFFU); + base->TOVALL = (uint16_t)((timeoutCount)&0xFFFFU); +} + +/*! + * @brief Sets the WDOG window value. + * + * This function sets the WDOG window value. + * This function write value into WDOG_WINH and WDOG_WINL registers which are wirte-once. + * Make sure the WCT window is still open and these two registers have not been written in this WCT + * while this function is called. + * + * @param base WDOG peripheral base address + * @param windowValue WDOG window value. + */ +static inline void WDOG_SetWindowValue(WDOG_Type *base, uint32_t windowValue) +{ + base->WINH = (uint16_t)((windowValue >> 16U) & 0xFFFFU); + base->WINL = (uint16_t)((windowValue)&0xFFFFU); +} + +/*! + * @brief Unlocks the WDOG register written. + * + * This function unlocks the WDOG register written. + * Before starting the unlock sequence and following congfiguration, disable the global interrupts. + * Otherwise, an interrupt could effectively invalidate the unlock sequence and the WCT may expire, + * After the configuration finishes, re-enable the global interrupts. + * + * @param base WDOG peripheral base address + */ +static inline void WDOG_Unlock(WDOG_Type *base) +{ + base->UNLOCK = WDOG_FIRST_WORD_OF_UNLOCK; + base->UNLOCK = WDOG_SECOND_WORD_OF_UNLOCK; +} + +/*! + * @brief Refreshes the WDOG timer. + * + * This function feeds the WDOG. + * This function should be called before WDOG timer is in timeout. Otherwise, a reset is asserted. + * + * @param base WDOG peripheral base address + */ +void WDOG_Refresh(WDOG_Type *base); + +/*! + * @brief Gets the WDOG reset count. + * + * This function gets the WDOG reset count value. + * + * @param base WDOG peripheral base address + * @return WDOG reset count value + */ +static inline uint16_t WDOG_GetResetCount(WDOG_Type *base) +{ + return base->RSTCNT; +} +/*! + * @brief Clears the WDOG reset count. + * + * This function clears the WDOG reset count value. + * + * @param base WDOG peripheral base address + */ +static inline void WDOG_ClearResetCount(WDOG_Type *base) +{ + base->RSTCNT |= UINT16_MAX; +} + +/*@}*/ + +#if defined(__cplusplus) +} +#endif /* __cplusplus */ + +/*! @}*/ + +#endif /* _FSL_WDOG_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/peripheral_clock_defines.h b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/peripheral_clock_defines.h new file mode 100644 index 00000000000..0f2d38d8adb --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/peripheral_clock_defines.h @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2016, Freescale Semiconductor, Inc. + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * + * o Redistributions of source code must retain the above copyright notice, this list + * of conditions and the following disclaimer. + * + * o Redistributions in binary form must reproduce the above copyright notice, this + * list of conditions and the following disclaimer in the documentation and/or + * other materials provided with the distribution. + * + * o Neither the name of Freescale Semiconductor, Inc. nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND + * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED + * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR + * ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON + * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#ifndef _FSL_PERIPHERAL_CLOCK_H_ +#define _FSL_PERIPHERAL_CLOCK_H_ + +#include "fsl_clock.h" + +/* Array for LPUART module clocks */ +#define LPUART_CLOCK_FREQS \ + { \ + kCLOCK_Osc0ErClk, kCLOCK_Osc0ErClk, kCLOCK_Osc0ErClk \ + } + +/* Array for I2C module clocks */ +#define I2C_CLOCK_FREQS \ + { \ + I2C0_CLK_SRC, I2C1_CLK_SRC \ + } + +/* Array for DSPI module clocks */ +#define SPI_CLOCK_FREQS \ + { \ + DSPI0_CLK_SRC, DSPI1_CLK_SRC \ + } + +#endif /* _FSL_PERIPHERAL_CLOCK_H_ */ diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/pwmout_api.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/pwmout_api.c new file mode 100644 index 00000000000..a2a90e8b8b2 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/pwmout_api.c @@ -0,0 +1,139 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "mbed_assert.h" +#include "pwmout_api.h" + +#if DEVICE_PWMOUT + +#include "cmsis.h" +#include "pinmap.h" +#include "fsl_tpm.h" +#include "PeripheralPins.h" + +static float pwm_clock_mhz; +/* Array of TPM peripheral base address. */ +static TPM_Type *const tpm_addrs[] = TPM_BASE_PTRS; + +void pwmout_init(pwmout_t* obj, PinName pin) { + PWMName pwm = (PWMName)pinmap_peripheral(pin, PinMap_PWM); + MBED_ASSERT(pwm != (PWMName)NC); + + obj->pwm_name = pwm; + + uint32_t pwm_base_clock; + + /* Set the TPM clock source to be IRC 48M */ + CLOCK_SetTpmClock(1U); + pwm_base_clock = CLOCK_GetFreq(kCLOCK_McgIrc48MClk); + float clkval = (float)pwm_base_clock / 1000000.0f; + uint32_t clkdiv = 0; + while (clkval > 1) { + clkdiv++; + clkval /= 2.0f; + if (clkdiv == 7) { + break; + } + } + + pwm_clock_mhz = clkval; + uint32_t channel = pwm & 0xF; + uint32_t instance = pwm >> TPM_SHIFT; + tpm_config_t tpmInfo; + + TPM_GetDefaultConfig(&tpmInfo); + tpmInfo.prescale = (tpm_clock_prescale_t)clkdiv; + /* Initialize TPM module */ + TPM_Init(tpm_addrs[instance], &tpmInfo); + + tpm_chnl_pwm_signal_param_t config = { + .chnlNumber = (tpm_chnl_t)channel, + .level = kTPM_HighTrue, + .dutyCyclePercent = 0, + }; + // default to 20ms: standard for servos, and fine for e.g. brightness control + TPM_SetupPwm(tpm_addrs[instance], &config, 1, kTPM_EdgeAlignedPwm, 50, pwm_base_clock); + + TPM_StartTimer(tpm_addrs[instance], kTPM_SystemClock); + + // Wire pinout + pinmap_pinout(pin, PinMap_PWM); +} + +void pwmout_free(pwmout_t* obj) { + TPM_Deinit(tpm_addrs[obj->pwm_name >> TPM_SHIFT]); +} + +void pwmout_write(pwmout_t* obj, float value) { + if (value < 0.0f) { + value = 0.0f; + } else if (value > 1.0f) { + value = 1.0f; + } + + TPM_Type *base = tpm_addrs[obj->pwm_name >> TPM_SHIFT]; + uint16_t mod = base->MOD & TPM_MOD_MOD_MASK; + uint32_t new_count = (uint32_t)((float)(mod) * value); + // Update of CnV register + base->CONTROLS[obj->pwm_name & 0xF].CnV = new_count; + base->CNT = 0; +} + +float pwmout_read(pwmout_t* obj) { + TPM_Type *base = tpm_addrs[obj->pwm_name >> TPM_SHIFT]; + uint16_t count = (base->CONTROLS[obj->pwm_name & 0xF].CnV) & TPM_CnV_VAL_MASK; + uint16_t mod = base->MOD & TPM_MOD_MOD_MASK; + + if (mod == 0) + return 0.0; + float v = (float)(count) / (float)(mod); + return (v > 1.0f) ? (1.0f) : (v); +} + +void pwmout_period(pwmout_t* obj, float seconds) { + pwmout_period_us(obj, seconds * 1000000.0f); +} + +void pwmout_period_ms(pwmout_t* obj, int ms) { + pwmout_period_us(obj, ms * 1000); +} + +// Set the PWM period, keeping the duty cycle the same. +void pwmout_period_us(pwmout_t* obj, int us) { + TPM_Type *base = tpm_addrs[obj->pwm_name >> TPM_SHIFT]; + float dc = pwmout_read(obj); + + // Stop TPM clock to ensure instant update of MOD register + base->MOD = TPM_MOD_MOD((pwm_clock_mhz * (float)us) - 1); + pwmout_write(obj, dc); +} + +void pwmout_pulsewidth(pwmout_t* obj, float seconds) { + pwmout_pulsewidth_us(obj, seconds * 1000000.0f); +} + +void pwmout_pulsewidth_ms(pwmout_t* obj, int ms) { + pwmout_pulsewidth_us(obj, ms * 1000); +} + +void pwmout_pulsewidth_us(pwmout_t* obj, int us) { + TPM_Type *base = tpm_addrs[obj->pwm_name >> TPM_SHIFT]; + uint32_t value = (uint32_t)(pwm_clock_mhz * (float)us); + + // Update of CnV register + base->CONTROLS[obj->pwm_name & 0xF].CnV = value; +} + +#endif diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/serial_api.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/serial_api.c new file mode 100644 index 00000000000..bea40787f12 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/serial_api.c @@ -0,0 +1,262 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "serial_api.h" + +#if DEVICE_SERIAL + +// math.h required for floating point operations for baud rate calculation +#include +#include "mbed_assert.h" + +#include + +#include "cmsis.h" +#include "pinmap.h" +#include "fsl_lpuart.h" +#include "peripheral_clock_defines.h" +#include "PeripheralPins.h" +#include "fsl_clock_config.h" + +static uint32_t serial_irq_ids[FSL_FEATURE_SOC_LPUART_COUNT] = {0}; +static uart_irq_handler irq_handler; +/* Array of UART peripheral base address. */ +static LPUART_Type *const uart_addrs[] = LPUART_BASE_PTRS; +/* Array of LPUART bus clock frequencies */ +static clock_name_t const uart_clocks[] = LPUART_CLOCK_FREQS; + +int stdio_uart_inited = 0; +serial_t stdio_uart; + +void serial_init(serial_t *obj, PinName tx, PinName rx) { + uint32_t uart_tx = pinmap_peripheral(tx, PinMap_UART_TX); + uint32_t uart_rx = pinmap_peripheral(rx, PinMap_UART_RX); + obj->index = pinmap_merge(uart_tx, uart_rx); + MBED_ASSERT((int)obj->index != NC); + + // Need to initialize the clocks here as ticker init gets called before mbed_sdk_init + if (SystemCoreClock == DEFAULT_SYSTEM_CLOCK) + BOARD_BootClockRUN(); + + /* Set the LPUART clock source */ + CLOCK_SetLpuartClock(2U); + + lpuart_config_t config; + LPUART_GetDefaultConfig(&config); + config.baudRate_Bps = 9600; + config.enableTx = false; + config.enableRx = false; + + LPUART_Init(uart_addrs[obj->index], &config, CLOCK_GetFreq(uart_clocks[obj->index])); + + pinmap_pinout(tx, PinMap_UART_TX); + pinmap_pinout(rx, PinMap_UART_RX); + + if (tx != NC) { + LPUART_EnableTx(uart_addrs[obj->index], true); + pin_mode(tx, PullUp); + } + if (rx != NC) { + LPUART_EnableRx(uart_addrs[obj->index], true); + pin_mode(rx, PullUp); + } + + if (obj->index == STDIO_UART) { + stdio_uart_inited = 1; + memcpy(&stdio_uart, obj, sizeof(serial_t)); + } +} + +void serial_free(serial_t *obj) { + LPUART_Deinit(uart_addrs[obj->index]); + serial_irq_ids[obj->index] = 0; +} + +void serial_baud(serial_t *obj, int baudrate) { + LPUART_SetBaudRate(uart_addrs[obj->index], (uint32_t)baudrate, CLOCK_GetFreq(uart_clocks[obj->index])); +} + +void serial_format(serial_t *obj, int data_bits, SerialParity parity, int stop_bits) { + LPUART_Type *base = uart_addrs[obj->index]; + uint8_t temp; + /* Set bit count and parity mode. */ + temp = base->CTRL & ~(LPUART_CTRL_PE_MASK | LPUART_CTRL_PT_MASK | LPUART_CTRL_M_MASK); + if (parity != ParityNone) + { + /* Enable Parity */ + temp |= (LPUART_CTRL_PE_MASK | LPUART_CTRL_M_MASK); + if (parity == ParityOdd) { + temp |= LPUART_CTRL_PT_MASK; + } else if (parity == ParityEven) { + // PT=0 so nothing more to do + } else { + // Hardware does not support forced parity + MBED_ASSERT(0); + } + } + base->CTRL = temp; + +#if defined(FSL_FEATURE_LPUART_HAS_STOP_BIT_CONFIG_SUPPORT) && FSL_FEATURE_LPUART_HAS_STOP_BIT_CONFIG_SUPPORT + /* set stop bit per char */ + temp = base->BAUD & ~LPUART_BAUD_SBNS_MASK; + base->BAUD = temp | LPUART_BAUD_SBNS((uint8_t)--stop_bits); +#endif +} + +/****************************************************************************** + * INTERRUPTS HANDLING + ******************************************************************************/ +static inline void uart_irq(uint32_t transmit_empty, uint32_t receive_full, uint32_t index) { + LPUART_Type *base = uart_addrs[index]; + + /* If RX overrun. */ + if (LPUART_STAT_OR_MASK & base->STAT) + { + /* Read base->D, otherwise the RX does not work. */ + (void)base->DATA; + LPUART_ClearStatusFlags(base, kLPUART_RxOverrunFlag); + } + + if (serial_irq_ids[index] != 0) { + if (transmit_empty) + irq_handler(serial_irq_ids[index], TxIrq); + + if (receive_full) + irq_handler(serial_irq_ids[index], RxIrq); + } +} + +void uart0_irq() { + uint32_t status_flags = LPUART0->STAT; + uart_irq((status_flags & kLPUART_TxDataRegEmptyFlag), (status_flags & kLPUART_RxDataRegFullFlag), 0); +} + +void uart1_irq() { + uint32_t status_flags = LPUART1->STAT; + uart_irq((status_flags & kLPUART_TxDataRegEmptyFlag), (status_flags & kLPUART_RxDataRegFullFlag), 1); +} + +void uart2_irq() { + uint32_t status_flags = LPUART2->STAT; + uart_irq((status_flags & kLPUART_TxDataRegEmptyFlag), (status_flags & kLPUART_RxDataRegFullFlag), 2); +} + +void serial_irq_handler(serial_t *obj, uart_irq_handler handler, uint32_t id) { + irq_handler = handler; + serial_irq_ids[obj->index] = id; +} + +void serial_irq_set(serial_t *obj, SerialIrq irq, uint32_t enable) { + IRQn_Type uart_irqs[] = LPUART_RX_TX_IRQS; + uint32_t vector = 0; + + switch (obj->index) { + case 0: + vector = (uint32_t)&uart0_irq; + break; + case 1: + vector = (uint32_t)&uart1_irq; + break; + case 2: + vector = (uint32_t)&uart2_irq; + break; + default: + break; + } + + if (enable) { + switch (irq) { + case RxIrq: + LPUART_EnableInterrupts(uart_addrs[obj->index], kLPUART_RxDataRegFullInterruptEnable); + break; + case TxIrq: + LPUART_EnableInterrupts(uart_addrs[obj->index], kLPUART_TxDataRegEmptyInterruptEnable); + break; + default: + break; + } + NVIC_SetVector(uart_irqs[obj->index], vector); + NVIC_EnableIRQ(uart_irqs[obj->index]); + + } else { // disable + int all_disabled = 0; + SerialIrq other_irq = (irq == RxIrq) ? (TxIrq) : (RxIrq); + switch (irq) { + case RxIrq: + LPUART_DisableInterrupts(uart_addrs[obj->index], kLPUART_RxDataRegFullInterruptEnable); + break; + case TxIrq: + LPUART_DisableInterrupts(uart_addrs[obj->index], kLPUART_TxDataRegEmptyInterruptEnable); + break; + default: + break; + } + switch (other_irq) { + case RxIrq: + all_disabled = ((LPUART_GetEnabledInterrupts(uart_addrs[obj->index]) & kLPUART_RxDataRegFullInterruptEnable) == 0); + break; + case TxIrq: + all_disabled = ((LPUART_GetEnabledInterrupts(uart_addrs[obj->index]) & kLPUART_TxDataRegEmptyInterruptEnable) == 0); + break; + default: + break; + } + if (all_disabled) + NVIC_DisableIRQ(uart_irqs[obj->index]); + } +} + +int serial_getc(serial_t *obj) { + uint8_t data; + + LPUART_ReadBlocking(uart_addrs[obj->index], &data, 1); + return data; +} + +void serial_putc(serial_t *obj, int c) { + while (!serial_writable(obj)); + LPUART_WriteByte(uart_addrs[obj->index], (uint8_t)c); +} + +int serial_readable(serial_t *obj) { + uint32_t status_flags = LPUART_GetStatusFlags(uart_addrs[obj->index]); + if (status_flags & kLPUART_RxOverrunFlag) + LPUART_ClearStatusFlags(uart_addrs[obj->index], kLPUART_RxOverrunFlag); + return (status_flags & kLPUART_RxDataRegFullFlag); +} + +int serial_writable(serial_t *obj) { + uint32_t status_flags = LPUART_GetStatusFlags(uart_addrs[obj->index]); + if (status_flags & kLPUART_RxOverrunFlag) + LPUART_ClearStatusFlags(uart_addrs[obj->index], kLPUART_RxOverrunFlag); + return (status_flags & kLPUART_TxDataRegEmptyFlag); +} + +void serial_clear(serial_t *obj) { +} + +void serial_pinout_tx(PinName tx) { + pinmap_pinout(tx, PinMap_UART_TX); +} + +void serial_break_set(serial_t *obj) { + uart_addrs[obj->index]->CTRL |= LPUART_CTRL_SBK_MASK; +} + +void serial_break_clear(serial_t *obj) { + uart_addrs[obj->index]->CTRL &= ~LPUART_CTRL_SBK_MASK; +} + +#endif diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/spi_api.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/spi_api.c new file mode 100644 index 00000000000..54b4d177615 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/spi_api.c @@ -0,0 +1,132 @@ +/* mbed Microcontroller Library + * Copyright (c) 2013 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include +#include "mbed_assert.h" + +#include "spi_api.h" + +#if DEVICE_SPI + +#include "cmsis.h" +#include "pinmap.h" +#include "mbed_error.h" +#include "fsl_dspi.h" +#include "peripheral_clock_defines.h" +#include "PeripheralPins.h" + +/* Array of SPI peripheral base address. */ +static SPI_Type *const spi_address[] = SPI_BASE_PTRS; +/* Array of SPI bus clock frequencies */ +static clock_name_t const spi_clocks[] = SPI_CLOCK_FREQS; + +void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel) { + // determine the SPI to use + uint32_t spi_mosi = pinmap_peripheral(mosi, PinMap_SPI_MOSI); + uint32_t spi_miso = pinmap_peripheral(miso, PinMap_SPI_MISO); + uint32_t spi_sclk = pinmap_peripheral(sclk, PinMap_SPI_SCLK); + uint32_t spi_ssel = pinmap_peripheral(ssel, PinMap_SPI_SSEL); + uint32_t spi_data = pinmap_merge(spi_mosi, spi_miso); + uint32_t spi_cntl = pinmap_merge(spi_sclk, spi_ssel); + + obj->instance = pinmap_merge(spi_data, spi_cntl); + MBED_ASSERT((int)obj->instance != NC); + + // pin out the spi pins + pinmap_pinout(mosi, PinMap_SPI_MOSI); + pinmap_pinout(miso, PinMap_SPI_MISO); + pinmap_pinout(sclk, PinMap_SPI_SCLK); + if (ssel != NC) { + pinmap_pinout(ssel, PinMap_SPI_SSEL); + } +} + +void spi_free(spi_t *obj) { + DSPI_Deinit(spi_address[obj->instance]); +} + +void spi_format(spi_t *obj, int bits, int mode, int slave) { + + dspi_master_config_t master_config; + dspi_slave_config_t slave_config; + + if (slave) { + /* Slave config */ + DSPI_SlaveGetDefaultConfig(&slave_config); + slave_config.whichCtar = kDSPI_Ctar0; + slave_config.ctarConfig.bitsPerFrame = (uint32_t)bits;; + slave_config.ctarConfig.cpol = (mode & 0x2) ? kDSPI_ClockPolarityActiveLow : kDSPI_ClockPolarityActiveHigh; + slave_config.ctarConfig.cpha = (mode & 0x1) ? kDSPI_ClockPhaseSecondEdge : kDSPI_ClockPhaseFirstEdge; + + DSPI_SlaveInit(spi_address[obj->instance], &slave_config); + } else { + /* Master config */ + DSPI_MasterGetDefaultConfig(&master_config); + master_config.ctarConfig.bitsPerFrame = (uint32_t)bits;; + master_config.ctarConfig.cpol = (mode & 0x2) ? kDSPI_ClockPolarityActiveLow : kDSPI_ClockPolarityActiveHigh; + master_config.ctarConfig.cpha = (mode & 0x1) ? kDSPI_ClockPhaseSecondEdge : kDSPI_ClockPhaseFirstEdge; + master_config.ctarConfig.direction = kDSPI_MsbFirst; + master_config.ctarConfig.pcsToSckDelayInNanoSec = 0; + + DSPI_MasterInit(spi_address[obj->instance], &master_config, CLOCK_GetFreq(spi_clocks[obj->instance])); + } +} + +void spi_frequency(spi_t *obj, int hz) { + uint32_t busClock = CLOCK_GetFreq(spi_clocks[obj->instance]); + DSPI_MasterSetBaudRate(spi_address[obj->instance], kDSPI_Ctar0, (uint32_t)hz, busClock); + //Half clock period delay after SPI transfer + DSPI_MasterSetDelayTimes(spi_address[obj->instance], kDSPI_Ctar0, kDSPI_LastSckToPcs, busClock, 500000000 / hz); +} + +static inline int spi_readable(spi_t * obj) { + return (DSPI_GetStatusFlags(spi_address[obj->instance]) & kDSPI_RxFifoDrainRequestFlag); +} + +int spi_master_write(spi_t *obj, int value) { + dspi_command_data_config_t command; + uint32_t rx_data; + DSPI_GetDefaultDataCommandConfig(&command); + command.isEndOfQueue = true; + + DSPI_MasterWriteDataBlocking(spi_address[obj->instance], &command, (uint16_t)value); + + DSPI_ClearStatusFlags(spi_address[obj->instance], kDSPI_TxFifoFillRequestFlag); + + // wait rx buffer full + while (!spi_readable(obj)); + rx_data = DSPI_ReadData(spi_address[obj->instance]); + DSPI_ClearStatusFlags(spi_address[obj->instance], kDSPI_RxFifoDrainRequestFlag | kDSPI_EndOfQueueFlag); + return rx_data & 0xffff; +} + +int spi_slave_receive(spi_t *obj) { + return spi_readable(obj); +} + +int spi_slave_read(spi_t *obj) { + uint32_t rx_data; + + while (!spi_readable(obj)); + rx_data = DSPI_ReadData(spi_address[obj->instance]); + DSPI_ClearStatusFlags(spi_address[obj->instance], kDSPI_RxFifoDrainRequestFlag); + return rx_data & 0xffff; +} + +void spi_slave_write(spi_t *obj, int value) { + DSPI_SlaveWriteDataBlocking(spi_address[obj->instance], (uint32_t)value); +} + +#endif diff --git a/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/us_ticker.c b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/us_ticker.c new file mode 100644 index 00000000000..0603a867a20 --- /dev/null +++ b/targets/TARGET_Freescale/TARGET_KSDK2_MCUS/TARGET_KL82Z/us_ticker.c @@ -0,0 +1,90 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include +#include "us_ticker_api.h" +#include "PeripheralNames.h" +#include "fsl_pit.h" +#include "fsl_clock_config.h" + +static int us_ticker_inited = 0; + +void us_ticker_init(void) { + if (us_ticker_inited) { + return; + } + us_ticker_inited = 1; + // Need to initialize the clocks here as ticker init gets called before mbed_sdk_init + if (SystemCoreClock == DEFAULT_SYSTEM_CLOCK) + BOARD_BootClockRUN(); + //Common for ticker/timer + uint32_t busClock; + // Structure to initialize PIT + pit_config_t pitConfig; + + PIT_GetDefaultConfig(&pitConfig); + PIT_Init(PIT, &pitConfig); + + busClock = CLOCK_GetFreq(kCLOCK_BusClk); + + //Timer + PIT_SetTimerPeriod(PIT, kPIT_Chnl_0, busClock / 1000000 - 1); + PIT_SetTimerPeriod(PIT, kPIT_Chnl_1, 0xFFFFFFFF); + PIT_SetTimerChainMode(PIT, kPIT_Chnl_1, true); + PIT_StartTimer(PIT, kPIT_Chnl_0); + PIT_StartTimer(PIT, kPIT_Chnl_1); + + //Ticker + PIT_SetTimerPeriod(PIT, kPIT_Chnl_2, busClock / 1000000 - 1); + PIT_SetTimerChainMode(PIT, kPIT_Chnl_3, true); + NVIC_SetVector(PIT0_IRQn, (uint32_t)us_ticker_irq_handler); + NVIC_EnableIRQ(PIT0_IRQn); +} + + +uint32_t us_ticker_read() { + if (!us_ticker_inited) { + us_ticker_init(); + } + + return ~(PIT_GetCurrentTimerCount(PIT, kPIT_Chnl_1)); +} + +void us_ticker_disable_interrupt(void) { + PIT_DisableInterrupts(PIT, kPIT_Chnl_3, kPIT_TimerInterruptEnable); +} + +void us_ticker_clear_interrupt(void) { + PIT_ClearStatusFlags(PIT, kPIT_Chnl_3, PIT_TFLG_TIF_MASK); +} + +void us_ticker_set_interrupt(timestamp_t timestamp) { + int delta = (int)(timestamp - us_ticker_read()); + if (delta <= 0) { + // This event was in the past. + // Set the interrupt as pending, but don't process it here. + // This prevents a recurive loop under heavy load + // which can lead to a stack overflow. + NVIC_SetPendingIRQ(PIT0_IRQn); + return; + } + + PIT_StopTimer(PIT, kPIT_Chnl_3); + PIT_StopTimer(PIT, kPIT_Chnl_2); + PIT_SetTimerPeriod(PIT, kPIT_Chnl_3, (uint32_t)delta); + PIT_EnableInterrupts(PIT, kPIT_Chnl_3, kPIT_TimerInterruptEnable); + PIT_StartTimer(PIT, kPIT_Chnl_3); + PIT_StartTimer(PIT, kPIT_Chnl_2); +} diff --git a/targets/TARGET_Freescale/mbed_rtx.h b/targets/TARGET_Freescale/mbed_rtx.h index c0943d5aa98..0d208973c4f 100644 --- a/targets/TARGET_Freescale/mbed_rtx.h +++ b/targets/TARGET_Freescale/mbed_rtx.h @@ -167,6 +167,21 @@ #define OS_CLOCK 48000000 #endif +#elif defined(TARGET_KL82Z) + +#ifndef INITIAL_SP +#define INITIAL_SP (0x20012000UL) +#endif +#ifndef OS_TASKCNT +#define OS_TASKCNT 14 +#endif +#ifndef OS_MAINSTKSIZE +#define OS_MAINSTKSIZE 256 +#endif +#ifndef OS_CLOCK +#define OS_CLOCK 72000000 +#endif + #elif defined(TARGET_K64F) #ifndef INITIAL_SP diff --git a/targets/targets.json b/targets/targets.json index d4108cea399..4cf2d398999 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -523,6 +523,19 @@ "release_versions": ["2", "5"], "device_name": "MKL43Z256xxx4" }, + "KL82Z": { + "supported_form_factors": ["ARDUINO"], + "core": "Cortex-M0+", + "supported_toolchains": ["GCC_ARM", "ARM", "IAR"], + "extra_labels": ["Freescale", "KSDK2_MCUS", "FRDM"], + "macros": ["CPU_MKL82Z128VLK7", "FSL_RTOS_MBED"], + "is_disk_virtual": true, + "inherits": ["Target"], + "progen": {"target": "frdm-kl82z"}, + "detect_code": ["0218"], + "device_has": ["ANALOGIN", "ANALOGOUT", "ERROR_RED", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SEMIHOST", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "release_versions": ["2", "5"] + }, "K64F": { "supported_form_factors": ["ARDUINO"], "core": "Cortex-M4F", From 504b2ac6b6377b2302a757ac38fa7d3eb509c504 Mon Sep 17 00:00:00 2001 From: Mahadevan Mahesh Date: Mon, 19 Sep 2016 09:43:43 -0500 Subject: [PATCH 68/89] Update tests to add support for FRDM KL43Z and FRDM KL82Z Signed-off-by: Mahadevan Mahesh --- features/unsupported/tests/mbed/analog/main.cpp | 6 +++++- features/unsupported/tests/mbed/i2c_eeprom/main.cpp | 6 ++++++ features/unsupported/tests/mbed/i2c_eeprom_line/main.cpp | 6 ++++++ features/unsupported/tests/rtos/mbed/file/main.cpp | 2 +- 4 files changed, 18 insertions(+), 2 deletions(-) diff --git a/features/unsupported/tests/mbed/analog/main.cpp b/features/unsupported/tests/mbed/analog/main.cpp index d23121c65ff..31bc2d54d3d 100644 --- a/features/unsupported/tests/mbed/analog/main.cpp +++ b/features/unsupported/tests/mbed/analog/main.cpp @@ -20,10 +20,14 @@ AnalogOut out(PTE30); AnalogIn in(PTB11); // D9 AnalogOut out(PTB1); // D1 -#elif defined(TARGET_KL46Z) +#elif defined(TARGET_KL46Z) || defined(TARGET_KL43Z) AnalogIn in(PTB0); AnalogOut out(PTE30); +#elif defined(TARGET_KL82Z) +AnalogIn in(A2); +AnalogOut out(DAC0_OUT); + #elif defined(TARGET_LPC1549) AnalogIn in(A0); AnalogOut out(D12); //D12 is P0_12, the DAC output pin diff --git a/features/unsupported/tests/mbed/i2c_eeprom/main.cpp b/features/unsupported/tests/mbed/i2c_eeprom/main.cpp index 62dfc98714f..47294dee051 100644 --- a/features/unsupported/tests/mbed/i2c_eeprom/main.cpp +++ b/features/unsupported/tests/mbed/i2c_eeprom/main.cpp @@ -30,6 +30,12 @@ I2C i2c(PTD6, PTD7); #elif defined(TARGET_KL46Z) I2C i2c(PTC9, PTC8); +#elif defined(TARGET_KL43Z) +I2C i2c(PTE0, PTE1); + +#elif defined(TARGET_KL82Z) +I2C i2c(PTC11, PTC10); + #elif defined(TARGET_K64F) I2C i2c(PTE25, PTE24); diff --git a/features/unsupported/tests/mbed/i2c_eeprom_line/main.cpp b/features/unsupported/tests/mbed/i2c_eeprom_line/main.cpp index 34a718b2975..28214efcfd5 100644 --- a/features/unsupported/tests/mbed/i2c_eeprom_line/main.cpp +++ b/features/unsupported/tests/mbed/i2c_eeprom_line/main.cpp @@ -40,6 +40,12 @@ I2C i2c(PTD6, PTD7); #elif defined(TARGET_KL46Z) I2C i2c(PTC9, PTC8); +#elif defined(TARGET_KL43Z) +I2C i2c(PTE0, PTE1); + +#elif defined(TARGET_KL82Z) +I2C i2c(PTC11, PTC10); + #elif defined(TARGET_K64F) I2C i2c(PTE25, PTE24); diff --git a/features/unsupported/tests/rtos/mbed/file/main.cpp b/features/unsupported/tests/rtos/mbed/file/main.cpp index c542ae821ec..738be7cb7a8 100644 --- a/features/unsupported/tests/rtos/mbed/file/main.cpp +++ b/features/unsupported/tests/rtos/mbed/file/main.cpp @@ -24,7 +24,7 @@ void sd_thread(void const *argument) #if defined(TARGET_KL25Z) SDFileSystem sd(PTD2, PTD3, PTD1, PTD0, "sd"); -#elif defined(TARGET_KL46Z) +#elif defined(TARGET_KL46Z) || defined(TARGET_KL43Z) || defined(TARGET_KL82Z) SDFileSystem sd(PTD6, PTD7, PTD5, PTD4, "sd"); #elif defined(TARGET_K64F) || defined(TARGET_K66F) From 0e5d0bda91bee986c52c45b6aa418002a6002a64 Mon Sep 17 00:00:00 2001 From: Laurent MEUNIER Date: Tue, 30 Aug 2016 15:27:24 +0200 Subject: [PATCH 69/89] Deploy SPI_ASYNCH to all family the SPI_ASYNCH feature has been already activated for STM32F4. This patchset makes it supported on all STM32 families by: - moving spi_s structure at family level instead of board level - using the F4 spi_api.c reference implementation and making it a common stm_spi_api.c file which makes maintenance a lot easier. - the only part that needs to be implemented for each family is the computation of the clock frequency input to the spi peripheral which is not the same accross families. So this is what remains in the spi_api.c of each family. Because of the introduction of the common file, all the above modifications needs to be done at once. --- .../TARGET_DISCO_F051R8/objects.h | 14 - .../TARGET_NUCLEO_F030R8/objects.h | 14 - .../TARGET_NUCLEO_F031K6/objects.h | 14 - .../TARGET_NUCLEO_F042K6/objects.h | 14 - .../TARGET_NUCLEO_F070RB/objects.h | 14 - .../TARGET_NUCLEO_F072RB/objects.h | 14 - .../TARGET_NUCLEO_F091RC/objects.h | 14 - .../TARGET_STM32F0/common_objects.h | 15 + targets/TARGET_STM/TARGET_STM32F0/spi_api.c | 257 +------- .../TARGET_BLUEPILL_F103C8/objects.h | 14 - .../TARGET_DISCO_F100RB/objects.h | 14 - .../TARGET_NUCLEO_F103RB/objects.h | 14 - .../TARGET_STM32F1/common_objects.h | 15 + targets/TARGET_STM/TARGET_STM32F1/spi_api.c | 275 +------- targets/TARGET_STM/TARGET_STM32F2/objects.h | 13 +- targets/TARGET_STM/TARGET_STM32F2/spi_api.c | 298 +-------- .../TARGET_DISCO_F303VC/objects.h | 14 - .../TARGET_DISCO_F334C8/objects.h | 14 - .../TARGET_NUCLEO_F302R8/objects.h | 14 - .../TARGET_NUCLEO_F303K8/objects.h | 14 - .../TARGET_NUCLEO_F303RE/objects.h | 14 - .../TARGET_NUCLEO_F303ZE/objects.h | 14 - .../TARGET_NUCLEO_F334R8/objects.h | 14 - .../TARGET_STM32F3/common_objects.h | 15 + targets/TARGET_STM/TARGET_STM32F3/spi_api.c | 308 +-------- targets/TARGET_STM/TARGET_STM32F4/spi_api.c | 517 +-------------- .../TARGET_DISCO_F746NG/objects.h | 14 - .../TARGET_DISCO_F769NI/objects.h | 14 - .../TARGET_NUCLEO_F746ZG/objects.h | 14 - .../TARGET_NUCLEO_F767ZI/objects.h | 14 - .../TARGET_STM32F7/common_objects.h | 15 + targets/TARGET_STM/TARGET_STM32F7/spi_api.c | 317 +-------- .../TARGET_DISCO_L053C8/objects.h | 14 - .../TARGET_NUCLEO_L011K4/objects.h | 14 - .../TARGET_NUCLEO_L031K6/objects.h | 14 - .../TARGET_NUCLEO_L053R8/objects.h | 14 - .../TARGET_NUCLEO_L073RZ/objects.h | 14 - .../TARGET_STM32L0/common_objects.h | 15 + targets/TARGET_STM/TARGET_STM32L0/spi_api.c | 248 +------ .../TARGET_MOTE_L152RC/objects.h | 14 - .../TARGET_NUCLEO_L152RE/objects.h | 14 - .../TARGET_NZ32_SC151/objects.h | 14 - .../TARGET_STM32L1/common_objects.h | 15 + targets/TARGET_STM/TARGET_STM32L1/spi_api.c | 252 +------ .../TARGET_DISCO_L476VG/objects.h | 14 - .../TARGET_NUCLEO_L432KC/objects.h | 14 - .../TARGET_NUCLEO_L476RG/objects.h | 14 - .../TARGET_STM32L4/common_objects.h | 15 + targets/TARGET_STM/TARGET_STM32L4/spi_api.c | 314 +-------- targets/TARGET_STM/stm_spi_api.c | 613 ++++++++++++++++++ 50 files changed, 852 insertions(+), 3113 deletions(-) create mode 100644 targets/TARGET_STM/stm_spi_api.c diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/objects.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/objects.h index 4a19b70bd67..70b7bcf2a43 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/objects.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_DISCO_F051R8/objects.h @@ -66,20 +66,6 @@ struct dac_s { uint32_t channel; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; }; diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/objects.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/objects.h index 16c179a610f..f006abac8a9 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/objects.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F030R8/objects.h @@ -60,20 +60,6 @@ struct analogin_s { uint32_t channel; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; }; diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/objects.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/objects.h index 16c179a610f..f006abac8a9 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/objects.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F031K6/objects.h @@ -60,20 +60,6 @@ struct analogin_s { uint32_t channel; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; }; diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/objects.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/objects.h index 10cf3d139bd..6a4a844c468 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/objects.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F042K6/objects.h @@ -60,20 +60,6 @@ struct analogin_s { uint32_t channel; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; }; diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/objects.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/objects.h index 16c179a610f..f006abac8a9 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/objects.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F070RB/objects.h @@ -60,20 +60,6 @@ struct analogin_s { uint32_t channel; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; }; diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/objects.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/objects.h index 8f908717dc5..11c94c05072 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/objects.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F072RB/objects.h @@ -66,20 +66,6 @@ struct dac_s { uint32_t channel; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; }; diff --git a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/objects.h b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/objects.h index 8f908717dc5..11c94c05072 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/objects.h +++ b/targets/TARGET_STM/TARGET_STM32F0/TARGET_NUCLEO_F091RC/objects.h @@ -66,20 +66,6 @@ struct dac_s { uint32_t channel; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; }; diff --git a/targets/TARGET_STM/TARGET_STM32F0/common_objects.h b/targets/TARGET_STM/TARGET_STM32F0/common_objects.h index 41fa23726fe..3bbfc82717d 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/common_objects.h +++ b/targets/TARGET_STM/TARGET_STM32F0/common_objects.h @@ -49,6 +49,21 @@ struct pwmout_s { uint8_t inverted; }; +struct spi_s { + SPI_HandleTypeDef handle; + IRQn_Type spiIRQ; + SPIName spi; + PinName pin_miso; + PinName pin_mosi; + PinName pin_sclk; + PinName pin_ssel; +#ifdef DEVICE_SPI_ASYNCH + uint32_t event; + uint8_t module; + uint8_t transfer_type; +#endif +}; + struct serial_s { UARTName uart; int index; // Used by irq diff --git a/targets/TARGET_STM/TARGET_STM32F0/spi_api.c b/targets/TARGET_STM/TARGET_STM32F0/spi_api.c index 117a441ded0..d7dc4c10dd1 100644 --- a/targets/TARGET_STM/TARGET_STM32F0/spi_api.c +++ b/targets/TARGET_STM/TARGET_STM32F0/spi_api.c @@ -32,260 +32,23 @@ #include "spi_api.h" #if DEVICE_SPI - -#include #include "cmsis.h" #include "pinmap.h" #include "PeripheralPins.h" -static SPI_HandleTypeDef SpiHandle; - -static void init_spi(spi_t *obj) { - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - - __HAL_SPI_DISABLE(&SpiHandle); - - SpiHandle.Init.Mode = obj->mode; - SpiHandle.Init.BaudRatePrescaler = obj->br_presc; - SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; - SpiHandle.Init.CLKPhase = obj->cpha; - SpiHandle.Init.CLKPolarity = obj->cpol; - SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED; - SpiHandle.Init.CRCPolynomial = 7; - SpiHandle.Init.DataSize = obj->bits; - SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; - SpiHandle.Init.NSS = obj->nss; - SpiHandle.Init.TIMode = SPI_TIMODE_DISABLED; - - HAL_SPI_Init(&SpiHandle); - - __HAL_SPI_ENABLE(&SpiHandle); -} - -void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel) { - // Determine the SPI to use - SPIName spi_mosi = (SPIName)pinmap_peripheral(mosi, PinMap_SPI_MOSI); - SPIName spi_miso = (SPIName)pinmap_peripheral(miso, PinMap_SPI_MISO); - SPIName spi_sclk = (SPIName)pinmap_peripheral(sclk, PinMap_SPI_SCLK); - SPIName spi_ssel = (SPIName)pinmap_peripheral(ssel, PinMap_SPI_SSEL); - - SPIName spi_data = (SPIName)pinmap_merge(spi_mosi, spi_miso); - SPIName spi_cntl = (SPIName)pinmap_merge(spi_sclk, spi_ssel); - - obj->spi = (SPIName)pinmap_merge(spi_data, spi_cntl); - MBED_ASSERT(obj->spi != (SPIName)NC); - - // Enable SPI clock - if (obj->spi == SPI_1) { - __SPI1_CLK_ENABLE(); - } -#if defined(SPI2_BASE) - if (obj->spi == SPI_2) { - __SPI2_CLK_ENABLE(); - } +#if DEVICE_SPI_ASYNCH + #define SPI_S(obj) (( struct spi_s *)(&(obj->spi))) +#else + #define SPI_S(obj) (( struct spi_s *)(obj)) #endif - // Configure the SPI pins - pinmap_pinout(mosi, PinMap_SPI_MOSI); - pinmap_pinout(miso, PinMap_SPI_MISO); - pinmap_pinout(sclk, PinMap_SPI_SCLK); - - // Save new values - obj->bits = SPI_DATASIZE_8BIT; - obj->cpol = SPI_POLARITY_LOW; - obj->cpha = SPI_PHASE_1EDGE; - obj->br_presc = SPI_BAUDRATEPRESCALER_256; - - obj->pin_miso = miso; - obj->pin_mosi = mosi; - obj->pin_sclk = sclk; - obj->pin_ssel = ssel; - - if (ssel != NC) { - pinmap_pinout(ssel, PinMap_SPI_SSEL); - } else { - obj->nss = SPI_NSS_SOFT; - } - - init_spi(obj); -} - -void spi_free(spi_t *obj) { - // Reset SPI and disable clock - if (obj->spi == SPI_1) { - __SPI1_FORCE_RESET(); - __SPI1_RELEASE_RESET(); - __SPI1_CLK_DISABLE(); - } - -#if defined(SPI2_BASE) - if (obj->spi == SPI_2) { - __SPI2_FORCE_RESET(); - __SPI2_RELEASE_RESET(); - __SPI2_CLK_DISABLE(); - } -#endif - - // Configure GPIOs - pin_function(obj->pin_miso, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); - pin_function(obj->pin_mosi, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); - pin_function(obj->pin_sclk, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); - pin_function(obj->pin_ssel, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); -} - -void spi_format(spi_t *obj, int bits, int mode, int slave) { - // Save new values - if (bits == 16) { - obj->bits = SPI_DATASIZE_16BIT; - } else { - obj->bits = SPI_DATASIZE_8BIT; - } - - switch (mode) { - case 0: - obj->cpol = SPI_POLARITY_LOW; - obj->cpha = SPI_PHASE_1EDGE; - break; - case 1: - obj->cpol = SPI_POLARITY_LOW; - obj->cpha = SPI_PHASE_2EDGE; - break; - case 2: - obj->cpol = SPI_POLARITY_HIGH; - obj->cpha = SPI_PHASE_1EDGE; - break; - default: - obj->cpol = SPI_POLARITY_HIGH; - obj->cpha = SPI_PHASE_2EDGE; - break; - } - - if (obj->nss != SPI_NSS_SOFT) { - obj->nss = (slave) ? SPI_NSS_HARD_INPUT : SPI_NSS_HARD_OUTPUT; - } - - obj->mode = (slave) ? SPI_MODE_SLAVE : SPI_MODE_MASTER; - - init_spi(obj); -} - -static const uint16_t baudrate_prescaler_table[] = {SPI_BAUDRATEPRESCALER_2, - SPI_BAUDRATEPRESCALER_4, - SPI_BAUDRATEPRESCALER_8, - SPI_BAUDRATEPRESCALER_16, - SPI_BAUDRATEPRESCALER_32, - SPI_BAUDRATEPRESCALER_64, - SPI_BAUDRATEPRESCALER_128, - SPI_BAUDRATEPRESCALER_256}; - -void spi_frequency(spi_t *obj, int hz) { - int spi_hz = 0; - uint8_t prescaler_rank = 0; - +/* + * Only the frequency is managed in the family specific part + * the rest of SPI management is common to all STM32 families + */ +int spi_get_clock_freq(spi_t *obj) { /* SPI_1, SPI_2. Source CLK is PCKL1 */ - spi_hz = HAL_RCC_GetPCLK1Freq(); - - /* Define pre-scaler in order to get highest available frequency below requested frequency */ - while ((spi_hz > hz) && (prescaler_rank < sizeof(baudrate_prescaler_table)/sizeof(baudrate_prescaler_table[0]))){ - spi_hz = spi_hz / 2; - prescaler_rank++; - } - - if (prescaler_rank <= sizeof(baudrate_prescaler_table)/sizeof(baudrate_prescaler_table[0])) { - obj->br_presc = baudrate_prescaler_table[prescaler_rank-1]; - } else { - error("Couldn't setup requested SPI frequency"); - } - - init_spi(obj); -} - -static inline int ssp_readable(spi_t *obj) { - int status; - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - // Check if data is received - status = ((__HAL_SPI_GET_FLAG(&SpiHandle, SPI_FLAG_RXNE) != RESET) ? 1 : 0); - return status; -} - -static inline int ssp_writeable(spi_t *obj) { - int status; - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - // Check if data is transmitted - status = ((__HAL_SPI_GET_FLAG(&SpiHandle, SPI_FLAG_TXE) != RESET) ? 1 : 0); - return status; -} - -static inline void ssp_write(spi_t *obj, int value) { - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_writeable(obj)); - if (obj->bits == SPI_DATASIZE_8BIT) { - // Force 8-bit access to the data register - uint8_t *p_spi_dr = 0; - p_spi_dr = (uint8_t *) & (spi->DR); - *p_spi_dr = (uint8_t)value; - } else { // SPI_DATASIZE_16BIT - spi->DR = (uint16_t)value; - } -} - -static inline int ssp_read(spi_t *obj) { - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_readable(obj)); - if (obj->bits == SPI_DATASIZE_8BIT) { - // Force 8-bit access to the data register - uint8_t *p_spi_dr = 0; - p_spi_dr = (uint8_t *) & (spi->DR); - return (int)(*p_spi_dr); - } else { - return (int)spi->DR; - } -} - -static inline int ssp_busy(spi_t *obj) { - int status; - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - status = ((__HAL_SPI_GET_FLAG(&SpiHandle, SPI_FLAG_BSY) != RESET) ? 1 : 0); - return status; -} - -int spi_master_write(spi_t *obj, int value) { - ssp_write(obj, value); - return ssp_read(obj); -} - -int spi_slave_receive(spi_t *obj) { - return ((ssp_readable(obj) && !ssp_busy(obj)) ? 1 : 0); -}; - -int spi_slave_read(spi_t *obj) { - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_readable(obj)); - if (obj->bits == SPI_DATASIZE_8BIT) { - // Force 8-bit access to the data register - uint8_t *p_spi_dr = 0; - p_spi_dr = (uint8_t *) & (spi->DR); - return (int)(*p_spi_dr); - } else { - return (int)spi->DR; - } -} - -void spi_slave_write(spi_t *obj, int value) { - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_writeable(obj)); - if (obj->bits == SPI_DATASIZE_8BIT) { - // Force 8-bit access to the data register - uint8_t *p_spi_dr = 0; - p_spi_dr = (uint8_t *) & (spi->DR); - *p_spi_dr = (uint8_t)value; - } else { // SPI_DATASIZE_16BIT - spi->DR = (uint16_t)value; - } -} - -int spi_busy(spi_t *obj) { - return ssp_busy(obj); + return HAL_RCC_GetPCLK1Freq(); } #endif diff --git a/targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/objects.h b/targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/objects.h index 3fc3ed5c335..708f2f5f7cb 100644 --- a/targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/objects.h +++ b/targets/TARGET_STM/TARGET_STM32F1/TARGET_BLUEPILL_F103C8/objects.h @@ -60,20 +60,6 @@ struct analogin_s { uint8_t channel; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; uint32_t slave; diff --git a/targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/objects.h b/targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/objects.h index fa4a7243520..da4126e6ce5 100644 --- a/targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/objects.h +++ b/targets/TARGET_STM/TARGET_STM32F1/TARGET_DISCO_F100RB/objects.h @@ -60,20 +60,6 @@ struct analogin_s { uint8_t channel; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; uint32_t slave; diff --git a/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/objects.h b/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/objects.h index e16970c065b..b0b234ba744 100644 --- a/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/objects.h +++ b/targets/TARGET_STM/TARGET_STM32F1/TARGET_NUCLEO_F103RB/objects.h @@ -60,20 +60,6 @@ struct analogin_s { uint8_t channel; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; uint32_t slave; diff --git a/targets/TARGET_STM/TARGET_STM32F1/common_objects.h b/targets/TARGET_STM/TARGET_STM32F1/common_objects.h index 585d323084c..e39a16c0198 100644 --- a/targets/TARGET_STM/TARGET_STM32F1/common_objects.h +++ b/targets/TARGET_STM/TARGET_STM32F1/common_objects.h @@ -68,6 +68,21 @@ struct serial_s { #endif }; +struct spi_s { + SPI_HandleTypeDef handle; + IRQn_Type spiIRQ; + SPIName spi; + PinName pin_miso; + PinName pin_mosi; + PinName pin_sclk; + PinName pin_ssel; +#ifdef DEVICE_SPI_ASYNCH + uint32_t event; + uint8_t module; + uint8_t transfer_type; +#endif +}; + #include "gpio_object.h" #ifdef __cplusplus diff --git a/targets/TARGET_STM/TARGET_STM32F1/spi_api.c b/targets/TARGET_STM/TARGET_STM32F1/spi_api.c index 198c29acb83..6cd4d8af9da 100644 --- a/targets/TARGET_STM/TARGET_STM32F1/spi_api.c +++ b/targets/TARGET_STM/TARGET_STM32F1/spi_api.c @@ -32,159 +32,26 @@ #include "spi_api.h" #if DEVICE_SPI - -#include #include "cmsis.h" #include "pinmap.h" #include "PeripheralPins.h" -static SPI_HandleTypeDef SpiHandle; - -static void init_spi(spi_t *obj) -{ - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - - __HAL_SPI_DISABLE(&SpiHandle); - - SpiHandle.Init.Mode = obj->mode; - SpiHandle.Init.BaudRatePrescaler = obj->br_presc; - SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; - SpiHandle.Init.CLKPhase = obj->cpha; - SpiHandle.Init.CLKPolarity = obj->cpol; - SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED; - SpiHandle.Init.CRCPolynomial = 7; - SpiHandle.Init.DataSize = obj->bits; - SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; - SpiHandle.Init.NSS = obj->nss; - SpiHandle.Init.TIMode = SPI_TIMODE_DISABLED; - - HAL_SPI_Init(&SpiHandle); - - __HAL_SPI_ENABLE(&SpiHandle); -} - -void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel) -{ - // Determine the SPI to use - SPIName spi_mosi = (SPIName)pinmap_peripheral(mosi, PinMap_SPI_MOSI); - SPIName spi_miso = (SPIName)pinmap_peripheral(miso, PinMap_SPI_MISO); - SPIName spi_sclk = (SPIName)pinmap_peripheral(sclk, PinMap_SPI_SCLK); - SPIName spi_ssel = (SPIName)pinmap_peripheral(ssel, PinMap_SPI_SSEL); - - SPIName spi_data = (SPIName)pinmap_merge(spi_mosi, spi_miso); - SPIName spi_cntl = (SPIName)pinmap_merge(spi_sclk, spi_ssel); - - obj->spi = (SPIName)pinmap_merge(spi_data, spi_cntl); - MBED_ASSERT(obj->spi != (SPIName)NC); - - // Enable SPI clock - if (obj->spi == SPI_1) { - __SPI1_CLK_ENABLE(); - } - if (obj->spi == SPI_2) { - __SPI2_CLK_ENABLE(); - } - - // Configure the SPI pins - pinmap_pinout(mosi, PinMap_SPI_MOSI); - pinmap_pinout(miso, PinMap_SPI_MISO); - pinmap_pinout(sclk, PinMap_SPI_SCLK); - - // Save new values - obj->bits = SPI_DATASIZE_8BIT; - obj->cpol = SPI_POLARITY_LOW; - obj->cpha = SPI_PHASE_1EDGE; - obj->br_presc = SPI_BAUDRATEPRESCALER_256; - - obj->pin_miso = miso; - obj->pin_mosi = mosi; - obj->pin_sclk = sclk; - obj->pin_ssel = ssel; - - if (ssel != NC) { - pinmap_pinout(ssel, PinMap_SPI_SSEL); - } else { - obj->nss = SPI_NSS_SOFT; - } - - init_spi(obj); -} - -void spi_free(spi_t *obj) -{ - // Reset SPI and disable clock - if (obj->spi == SPI_1) { - __SPI1_FORCE_RESET(); - __SPI1_RELEASE_RESET(); - __SPI1_CLK_DISABLE(); - } - - if (obj->spi == SPI_2) { - __SPI2_FORCE_RESET(); - __SPI2_RELEASE_RESET(); - __SPI2_CLK_DISABLE(); - } - - // Configure GPIOs - pin_function(obj->pin_miso, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); - pin_function(obj->pin_mosi, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); - pin_function(obj->pin_sclk, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); - pin_function(obj->pin_ssel, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); -} - -void spi_format(spi_t *obj, int bits, int mode, int slave) -{ - // Save new values - if (bits == 16) { - obj->bits = SPI_DATASIZE_16BIT; - } else { - obj->bits = SPI_DATASIZE_8BIT; - } - - switch (mode) { - case 0: - obj->cpol = SPI_POLARITY_LOW; - obj->cpha = SPI_PHASE_1EDGE; - break; - case 1: - obj->cpol = SPI_POLARITY_LOW; - obj->cpha = SPI_PHASE_2EDGE; - break; - case 2: - obj->cpol = SPI_POLARITY_HIGH; - obj->cpha = SPI_PHASE_1EDGE; - break; - default: - obj->cpol = SPI_POLARITY_HIGH; - obj->cpha = SPI_PHASE_2EDGE; - break; - } - - if (obj->nss != SPI_NSS_SOFT) { - obj->nss = (slave) ? SPI_NSS_HARD_INPUT : SPI_NSS_HARD_OUTPUT; - } - - obj->mode = (slave) ? SPI_MODE_SLAVE : SPI_MODE_MASTER; - - init_spi(obj); -} - -static const uint16_t baudrate_prescaler_table[] = {SPI_BAUDRATEPRESCALER_2, - SPI_BAUDRATEPRESCALER_4, - SPI_BAUDRATEPRESCALER_8, - SPI_BAUDRATEPRESCALER_16, - SPI_BAUDRATEPRESCALER_32, - SPI_BAUDRATEPRESCALER_64, - SPI_BAUDRATEPRESCALER_128, - SPI_BAUDRATEPRESCALER_256}; +#if DEVICE_SPI_ASYNCH + #define SPI_S(obj) (( struct spi_s *)(&(obj->spi))) +#else + #define SPI_S(obj) (( struct spi_s *)(obj)) +#endif -void spi_frequency(spi_t *obj, int hz) -{ - int spi_hz = 0; - uint8_t prescaler_rank = 0; +/* + * Only the frequency is managed in the family specific part + * the rest of SPI management is common to all STM32 families + */ +int spi_get_clock_freq(spi_t *obj) { + struct spi_s *spiobj = SPI_S(obj); + int spi_hz = 0; /* Get source clock depending on SPI instance */ - switch ((int)obj->spi) { + switch ((int)spiobj->spi) { case SPI_1: /* SPI_1. Source CLK is PCKL2 */ spi_hz = HAL_RCC_GetPCLK2Freq(); @@ -194,120 +61,10 @@ void spi_frequency(spi_t *obj, int hz) spi_hz = HAL_RCC_GetPCLK1Freq(); break; default: - error("SPI instance not set"); - } - - /* Define pre-scaler in order to get highest available frequency below requested frequency */ - while ((spi_hz > hz) && (prescaler_rank < sizeof(baudrate_prescaler_table)/sizeof(baudrate_prescaler_table[0]))){ - spi_hz = spi_hz / 2; - prescaler_rank++; - } - - if (prescaler_rank <= sizeof(baudrate_prescaler_table)/sizeof(baudrate_prescaler_table[0])) { - obj->br_presc = baudrate_prescaler_table[prescaler_rank-1]; - } else { - error("Couldn't setup requested SPI frequency"); - } - - init_spi(obj); -} - -static inline int ssp_readable(spi_t *obj) -{ - int status; - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - // Check if data is received - status = ((__HAL_SPI_GET_FLAG(&SpiHandle, SPI_FLAG_RXNE) != RESET) ? 1 : 0); - return status; -} - -static inline int ssp_writeable(spi_t *obj) -{ - int status; - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - // Check if data is transmitted - status = ((__HAL_SPI_GET_FLAG(&SpiHandle, SPI_FLAG_TXE) != RESET) ? 1 : 0); - return status; -} - -static inline void ssp_write(spi_t *obj, int value) -{ - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_writeable(obj)); - if (obj->bits == SPI_DATASIZE_8BIT) { - // Force 8-bit access to the data register - uint8_t *p_spi_dr = 0; - p_spi_dr = (uint8_t *) & (spi->DR); - *p_spi_dr = (uint8_t)value; - } else { // SPI_DATASIZE_16BIT - spi->DR = (uint16_t)value; - } -} - -static inline int ssp_read(spi_t *obj) -{ - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_readable(obj)); - if (obj->bits == SPI_DATASIZE_8BIT) { - // Force 8-bit access to the data register - uint8_t *p_spi_dr = 0; - p_spi_dr = (uint8_t *) & (spi->DR); - return (int)(*p_spi_dr); - } else { - return (int)spi->DR; - } -} - -static inline int ssp_busy(spi_t *obj) -{ - int status; - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - status = ((__HAL_SPI_GET_FLAG(&SpiHandle, SPI_FLAG_BSY) != RESET) ? 1 : 0); - return status; -} - -int spi_master_write(spi_t *obj, int value) -{ - ssp_write(obj, value); - return ssp_read(obj); -} - -int spi_slave_receive(spi_t *obj) -{ - return ((ssp_readable(obj) && !ssp_busy(obj)) ? 1 : 0); -}; - -int spi_slave_read(spi_t *obj) -{ - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_readable(obj)); - if (obj->bits == SPI_DATASIZE_8BIT) { - // Force 8-bit access to the data register - uint8_t *p_spi_dr = 0; - p_spi_dr = (uint8_t *) & (spi->DR); - return (int)(*p_spi_dr); - } else { - return (int)spi->DR; - } -} - -void spi_slave_write(spi_t *obj, int value) -{ - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_writeable(obj)); - if (obj->bits == SPI_DATASIZE_8BIT) { - // Force 8-bit access to the data register - uint8_t *p_spi_dr = 0; - p_spi_dr = (uint8_t *) & (spi->DR); - *p_spi_dr = (uint8_t)value; - } else { // SPI_DATASIZE_16BIT - spi->DR = (uint16_t)value; + error("CLK: SPI instance not set"); + break; } -} - -int spi_busy(spi_t *obj) -{ - return ssp_busy(obj); + return spi_hz; } #endif diff --git a/targets/TARGET_STM/TARGET_STM32F2/objects.h b/targets/TARGET_STM/TARGET_STM32F2/objects.h index a2cf58dc60f..5834dcd655a 100644 --- a/targets/TARGET_STM/TARGET_STM32F2/objects.h +++ b/targets/TARGET_STM/TARGET_STM32F2/objects.h @@ -85,17 +85,18 @@ struct serial_s { }; struct spi_s { + SPI_HandleTypeDef handle; + IRQn_Type spiIRQ; SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; PinName pin_miso; PinName pin_mosi; PinName pin_sclk; PinName pin_ssel; +#ifdef DEVICE_SPI_ASYNCH + uint32_t event; + uint8_t module; + uint8_t transfer_type; +#endif }; struct i2c_s { diff --git a/targets/TARGET_STM/TARGET_STM32F2/spi_api.c b/targets/TARGET_STM/TARGET_STM32F2/spi_api.c index 095ed728acc..39ffb1d152e 100644 --- a/targets/TARGET_STM/TARGET_STM32F2/spi_api.c +++ b/targets/TARGET_STM/TARGET_STM32F2/spi_api.c @@ -33,217 +33,27 @@ #if DEVICE_SPI -#include #include "cmsis.h" #include "pinmap.h" #include "PeripheralPins.h" #include "mbed_error.h" -static SPI_HandleTypeDef SpiHandle; - -static void init_spi(spi_t *obj) -{ - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - - __HAL_SPI_DISABLE(&SpiHandle); - - SpiHandle.Init.Mode = obj->mode; - SpiHandle.Init.BaudRatePrescaler = obj->br_presc; - SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; - SpiHandle.Init.CLKPhase = obj->cpha; - SpiHandle.Init.CLKPolarity = obj->cpol; - SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED; - SpiHandle.Init.CRCPolynomial = 7; - SpiHandle.Init.DataSize = obj->bits; - SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; - SpiHandle.Init.NSS = obj->nss; - SpiHandle.Init.TIMode = SPI_TIMODE_DISABLED; - - if (HAL_SPI_Init(&SpiHandle) != HAL_OK) { - error("Cannot initialize SPI"); - } - - __HAL_SPI_ENABLE(&SpiHandle); -} - -void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel) -{ - // Determine the SPI to use - SPIName spi_mosi = (SPIName)pinmap_peripheral(mosi, PinMap_SPI_MOSI); - SPIName spi_miso = (SPIName)pinmap_peripheral(miso, PinMap_SPI_MISO); - SPIName spi_sclk = (SPIName)pinmap_peripheral(sclk, PinMap_SPI_SCLK); - SPIName spi_ssel = (SPIName)pinmap_peripheral(ssel, PinMap_SPI_SSEL); - - SPIName spi_data = (SPIName)pinmap_merge(spi_mosi, spi_miso); - SPIName spi_cntl = (SPIName)pinmap_merge(spi_sclk, spi_ssel); - - obj->spi = (SPIName)pinmap_merge(spi_data, spi_cntl); - MBED_ASSERT(obj->spi != (SPIName)NC); - - // Enable SPI clock - if (obj->spi == SPI_1) { - __HAL_RCC_SPI1_CLK_ENABLE(); - } - - if (obj->spi == SPI_2) { - __HAL_RCC_SPI2_CLK_ENABLE(); - } - -#if defined SPI3_BASE - if (obj->spi == SPI_3) { - __HAL_RCC_SPI3_CLK_ENABLE(); - } -#endif - -#if defined SPI4_BASE - if (obj->spi == SPI_4) { - __HAL_RCC_SPI4_CLK_ENABLE(); - } -#endif - -#if defined SPI5_BASE - if (obj->spi == SPI_5) { - __HAL_RCC_SPI5_CLK_ENABLE(); - } -#endif - -#if defined SPI6_BASE - if (obj->spi == SPI_6) { - __HAL_RCC_SPI6_CLK_ENABLE(); - } -#endif - - // Configure the SPI pins - pinmap_pinout(mosi, PinMap_SPI_MOSI); - pinmap_pinout(miso, PinMap_SPI_MISO); - pinmap_pinout(sclk, PinMap_SPI_SCLK); - - // Save new values - obj->bits = SPI_DATASIZE_8BIT; - obj->cpol = SPI_POLARITY_LOW; - obj->cpha = SPI_PHASE_1EDGE; - obj->br_presc = SPI_BAUDRATEPRESCALER_256; - - obj->pin_miso = miso; - obj->pin_mosi = mosi; - obj->pin_sclk = sclk; - obj->pin_ssel = ssel; - - if (ssel != NC) { - pinmap_pinout(ssel, PinMap_SPI_SSEL); - } else { - obj->nss = SPI_NSS_SOFT; - } - - init_spi(obj); -} - -void spi_free(spi_t *obj) -{ - // Reset SPI and disable clock - if (obj->spi == SPI_1) { - __HAL_RCC_SPI1_FORCE_RESET(); - __HAL_RCC_SPI1_RELEASE_RESET(); - __HAL_RCC_SPI1_CLK_DISABLE(); - } - - if (obj->spi == SPI_2) { - __HAL_RCC_SPI2_FORCE_RESET(); - __HAL_RCC_SPI2_RELEASE_RESET(); - __HAL_RCC_SPI2_CLK_DISABLE(); - } -#if defined SPI3_BASE - if (obj->spi == SPI_3) { - __HAL_RCC_SPI3_FORCE_RESET(); - __HAL_RCC_SPI3_RELEASE_RESET(); - __HAL_RCC_SPI3_CLK_DISABLE(); - } -#endif - -#if defined SPI4_BASE - if (obj->spi == SPI_4) { - __HAL_RCC_SPI4_FORCE_RESET(); - __HAL_RCC_SPI4_RELEASE_RESET(); - __HAL_RCC_SPI4_CLK_DISABLE(); - } -#endif - -#if defined SPI5_BASE - if (obj->spi == SPI_5) { - __HAL_RCC_SPI5_FORCE_RESET(); - __HAL_RCC_SPI5_RELEASE_RESET(); - __HAL_RCC_SPI5_CLK_DISABLE(); - } -#endif - -#if defined SPI6_BASE - if (obj->spi == SPI_6) { - __HAL_RCC_SPI6_FORCE_RESET(); - __HAL_RCC_SPI6_RELEASE_RESET(); - __HAL_RCC_SPI6_CLK_DISABLE(); - } +#if DEVICE_SPI_ASYNCH + #define SPI_S(obj) (( struct spi_s *)(&(obj->spi))) +#else + #define SPI_S(obj) (( struct spi_s *)(obj)) #endif - // Configure GPIOs - pin_function(obj->pin_miso, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); - pin_function(obj->pin_mosi, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); - pin_function(obj->pin_sclk, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); - pin_function(obj->pin_ssel, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); -} - -void spi_format(spi_t *obj, int bits, int mode, int slave) -{ - // Save new values - if (bits == 16) { - obj->bits = SPI_DATASIZE_16BIT; - } else { - obj->bits = SPI_DATASIZE_8BIT; - } - - switch (mode) { - case 0: - obj->cpol = SPI_POLARITY_LOW; - obj->cpha = SPI_PHASE_1EDGE; - break; - case 1: - obj->cpol = SPI_POLARITY_LOW; - obj->cpha = SPI_PHASE_2EDGE; - break; - case 2: - obj->cpol = SPI_POLARITY_HIGH; - obj->cpha = SPI_PHASE_1EDGE; - break; - default: - obj->cpol = SPI_POLARITY_HIGH; - obj->cpha = SPI_PHASE_2EDGE; - break; - } - - if (obj->nss != SPI_NSS_SOFT) { - obj->nss = (slave) ? SPI_NSS_HARD_INPUT : SPI_NSS_HARD_OUTPUT; - } - - obj->mode = (slave) ? SPI_MODE_SLAVE : SPI_MODE_MASTER; - - init_spi(obj); -} - -static const uint16_t baudrate_prescaler_table[] = {SPI_BAUDRATEPRESCALER_2, - SPI_BAUDRATEPRESCALER_4, - SPI_BAUDRATEPRESCALER_8, - SPI_BAUDRATEPRESCALER_16, - SPI_BAUDRATEPRESCALER_32, - SPI_BAUDRATEPRESCALER_64, - SPI_BAUDRATEPRESCALER_128, - SPI_BAUDRATEPRESCALER_256}; - -void spi_frequency(spi_t *obj, int hz) -{ +/* + * Only the frequency is managed in the family specific part + * the rest of SPI management is common to all STM32 families + */ +int spi_get_clock_freq(spi_t *obj) { + struct spi_s *spiobj = SPI_S(obj); int spi_hz = 0; - uint8_t prescaler_rank = 0; /* Get source clock depending on SPI instance */ - switch ((int)obj->spi) { + switch ((int)spiobj->spi) { case SPI_1: #if defined SPI4_BASE case SPI_4: @@ -266,91 +76,9 @@ void spi_frequency(spi_t *obj, int hz) break; default: error("SPI instance not set"); + break; } - - /* Define pre-scaler in order to get highest available frequency below requested frequency */ - while ((spi_hz > hz) && (prescaler_rank < sizeof(baudrate_prescaler_table)/sizeof(baudrate_prescaler_table[0]))){ - spi_hz = spi_hz / 2; - prescaler_rank++; - } - - if (prescaler_rank <= sizeof(baudrate_prescaler_table)/sizeof(baudrate_prescaler_table[0])) { - obj->br_presc = baudrate_prescaler_table[prescaler_rank-1]; - } else { - error("Couldn't setup requested SPI frequency"); - } - - init_spi(obj); -} - -static inline int ssp_readable(spi_t *obj) -{ - int status; - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - // Check if data is received - status = ((__HAL_SPI_GET_FLAG(&SpiHandle, SPI_FLAG_RXNE) != RESET) ? 1 : 0); - return status; -} - -static inline int ssp_writeable(spi_t *obj) -{ - int status; - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - // Check if data is transmitted - status = ((__HAL_SPI_GET_FLAG(&SpiHandle, SPI_FLAG_TXE) != RESET) ? 1 : 0); - return status; -} - -static inline void ssp_write(spi_t *obj, int value) -{ - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_writeable(obj)); - spi->DR = (uint16_t)value; -} - -static inline int ssp_read(spi_t *obj) -{ - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_readable(obj)); - return (int)spi->DR; -} - -static inline int ssp_busy(spi_t *obj) -{ - int status; - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - status = ((__HAL_SPI_GET_FLAG(&SpiHandle, SPI_FLAG_BSY) != RESET) ? 1 : 0); - return status; -} - -int spi_master_write(spi_t *obj, int value) -{ - ssp_write(obj, value); - return ssp_read(obj); -} - -int spi_slave_receive(spi_t *obj) -{ - return ((ssp_readable(obj) && !ssp_busy(obj)) ? 1 : 0); -}; - -int spi_slave_read(spi_t *obj) -{ - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_readable(obj)); - return (int)spi->DR; -} - -void spi_slave_write(spi_t *obj, int value) -{ - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_writeable(obj)); - spi->DR = (uint16_t)value; -} - -int spi_busy(spi_t *obj) -{ - return ssp_busy(obj); + return spi_hz; } #endif diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_DISCO_F303VC/objects.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_DISCO_F303VC/objects.h index e784a105d34..aeabfa3307a 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_DISCO_F303VC/objects.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_DISCO_F303VC/objects.h @@ -66,20 +66,6 @@ struct dac_s { uint32_t channel; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; uint32_t slave; diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_DISCO_F334C8/objects.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_DISCO_F334C8/objects.h index e784a105d34..aeabfa3307a 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_DISCO_F334C8/objects.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_DISCO_F334C8/objects.h @@ -66,20 +66,6 @@ struct dac_s { uint32_t channel; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; uint32_t slave; diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F302R8/objects.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F302R8/objects.h index 9650260ca46..61a56f7c047 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F302R8/objects.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F302R8/objects.h @@ -66,20 +66,6 @@ struct dac_s { uint32_t channel; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; uint32_t slave; diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F303K8/objects.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F303K8/objects.h index 9650260ca46..61a56f7c047 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F303K8/objects.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F303K8/objects.h @@ -66,20 +66,6 @@ struct dac_s { uint32_t channel; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; uint32_t slave; diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F303RE/objects.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F303RE/objects.h index 9650260ca46..61a56f7c047 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F303RE/objects.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F303RE/objects.h @@ -66,20 +66,6 @@ struct dac_s { uint32_t channel; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; uint32_t slave; diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F303ZE/objects.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F303ZE/objects.h index 81ebc1d3710..f410f62461f 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F303ZE/objects.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F303ZE/objects.h @@ -77,20 +77,6 @@ struct serial_s { PinName pin_rx; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; uint32_t slave; diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F334R8/objects.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F334R8/objects.h index 9650260ca46..61a56f7c047 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F334R8/objects.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F334R8/objects.h @@ -66,20 +66,6 @@ struct dac_s { uint32_t channel; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; uint32_t slave; diff --git a/targets/TARGET_STM/TARGET_STM32F3/common_objects.h b/targets/TARGET_STM/TARGET_STM32F3/common_objects.h index 585d323084c..fd235f0781f 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/common_objects.h +++ b/targets/TARGET_STM/TARGET_STM32F3/common_objects.h @@ -49,6 +49,21 @@ struct pwmout_s { uint8_t inverted; }; +struct spi_s { + SPI_HandleTypeDef handle; + IRQn_Type spiIRQ; + SPIName spi; + PinName pin_miso; + PinName pin_mosi; + PinName pin_sclk; + PinName pin_ssel; +#ifdef DEVICE_SPI_ASYNCH + uint32_t event; + uint8_t module; + uint8_t transfer_type; +#endif +}; + struct serial_s { UARTName uart; int index; // Used by irq diff --git a/targets/TARGET_STM/TARGET_STM32F3/spi_api.c b/targets/TARGET_STM/TARGET_STM32F3/spi_api.c index 674b0936455..c7082808e6c 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/spi_api.c +++ b/targets/TARGET_STM/TARGET_STM32F3/spi_api.c @@ -33,199 +33,27 @@ #if DEVICE_SPI -#include #include "cmsis.h" #include "pinmap.h" #include "PeripheralPins.h" -static SPI_HandleTypeDef SpiHandle; -static void init_spi(spi_t *obj) -{ - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - - __HAL_SPI_DISABLE(&SpiHandle); - - SpiHandle.Init.Mode = obj->mode; - SpiHandle.Init.BaudRatePrescaler = obj->br_presc; - SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; - SpiHandle.Init.CLKPhase = obj->cpha; - SpiHandle.Init.CLKPolarity = obj->cpol; - SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED; - SpiHandle.Init.CRCPolynomial = 7; - SpiHandle.Init.DataSize = obj->bits; - SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; - SpiHandle.Init.NSS = obj->nss; - SpiHandle.Init.TIMode = SPI_TIMODE_DISABLED; - - HAL_SPI_Init(&SpiHandle); - - __HAL_SPI_ENABLE(&SpiHandle); -} - -void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel) -{ - // Determine the SPI to use - SPIName spi_mosi = (SPIName)pinmap_peripheral(mosi, PinMap_SPI_MOSI); - SPIName spi_miso = (SPIName)pinmap_peripheral(miso, PinMap_SPI_MISO); - SPIName spi_sclk = (SPIName)pinmap_peripheral(sclk, PinMap_SPI_SCLK); - SPIName spi_ssel = (SPIName)pinmap_peripheral(ssel, PinMap_SPI_SSEL); - - SPIName spi_data = (SPIName)pinmap_merge(spi_mosi, spi_miso); - SPIName spi_cntl = (SPIName)pinmap_merge(spi_sclk, spi_ssel); - - obj->spi = (SPIName)pinmap_merge(spi_data, spi_cntl); - MBED_ASSERT(obj->spi != (SPIName)NC); - - // Enable SPI clock -#if defined(SPI1_BASE) - if (obj->spi == SPI_1) { - __SPI1_CLK_ENABLE(); - } -#endif - -#if defined(SPI2_BASE) - if (obj->spi == SPI_2) { - __SPI2_CLK_ENABLE(); - } -#endif - -#if defined(SPI3_BASE) - if (obj->spi == SPI_3) { - __SPI3_CLK_ENABLE(); - } -#endif - -#if defined(SPI4_BASE) - if (obj->spi == SPI_3) { - __SPI4_CLK_ENABLE(); - } -#endif - - // Configure the SPI pins - pinmap_pinout(mosi, PinMap_SPI_MOSI); - pinmap_pinout(miso, PinMap_SPI_MISO); - pinmap_pinout(sclk, PinMap_SPI_SCLK); - - // Save new values - obj->bits = SPI_DATASIZE_8BIT; - obj->cpol = SPI_POLARITY_LOW; - obj->cpha = SPI_PHASE_1EDGE; -#if defined(TARGET_STM32F334C8) - obj->br_presc = SPI_BAUDRATEPRESCALER_256; +#if DEVICE_SPI_ASYNCH + #define SPI_S(obj) (( struct spi_s *)(&(obj->spi))) #else - obj->br_presc = SPI_BAUDRATEPRESCALER_32; // 1 MHz (HSI) or 1.13 MHz (HSE) + #define SPI_S(obj) (( struct spi_s *)(obj)) #endif - obj->pin_miso = miso; - obj->pin_mosi = mosi; - obj->pin_sclk = sclk; - obj->pin_ssel = ssel; - - if (ssel != NC) { - pinmap_pinout(ssel, PinMap_SPI_SSEL); - } else { - obj->nss = SPI_NSS_SOFT; - } - - init_spi(obj); -} - -void spi_free(spi_t *obj) -{ - // Reset SPI and disable clock -#if defined(SPI1_BASE) - if (obj->spi == SPI_1) { - __SPI1_FORCE_RESET(); - __SPI1_RELEASE_RESET(); - __SPI1_CLK_DISABLE(); - } -#endif - -#if defined(SPI2_BASE) - if (obj->spi == SPI_2) { - __SPI2_FORCE_RESET(); - __SPI2_RELEASE_RESET(); - __SPI2_CLK_DISABLE(); - } -#endif - -#if defined(SPI3_BASE) - if (obj->spi == SPI_3) { - __SPI3_FORCE_RESET(); - __SPI3_RELEASE_RESET(); - __SPI3_CLK_DISABLE(); - } -#endif - -#if defined(SPI4_BASE) - if (obj->spi == SPI_4) { - __SPI4_FORCE_RESET(); - __SPI4_RELEASE_RESET(); - __SPI4_CLK_DISABLE(); - } -#endif - - // Configure GPIOs - pin_function(obj->pin_miso, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); - pin_function(obj->pin_mosi, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); - pin_function(obj->pin_sclk, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); - pin_function(obj->pin_ssel, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); -} - -void spi_format(spi_t *obj, int bits, int mode, int slave) -{ - // Save new values - if (bits == 16) { - obj->bits = SPI_DATASIZE_16BIT; - } else { - obj->bits = SPI_DATASIZE_8BIT; - } - - switch (mode) { - case 0: - obj->cpol = SPI_POLARITY_LOW; - obj->cpha = SPI_PHASE_1EDGE; - break; - case 1: - obj->cpol = SPI_POLARITY_LOW; - obj->cpha = SPI_PHASE_2EDGE; - break; - case 2: - obj->cpol = SPI_POLARITY_HIGH; - obj->cpha = SPI_PHASE_1EDGE; - break; - default: - obj->cpol = SPI_POLARITY_HIGH; - obj->cpha = SPI_PHASE_2EDGE; - break; - } - - if (obj->nss != SPI_NSS_SOFT) { - obj->nss = (slave) ? SPI_NSS_HARD_INPUT : SPI_NSS_HARD_OUTPUT; - } - - obj->mode = (slave) ? SPI_MODE_SLAVE : SPI_MODE_MASTER; - - init_spi(obj); -} - -static const uint16_t baudrate_prescaler_table[] = {SPI_BAUDRATEPRESCALER_2, - SPI_BAUDRATEPRESCALER_4, - SPI_BAUDRATEPRESCALER_8, - SPI_BAUDRATEPRESCALER_16, - SPI_BAUDRATEPRESCALER_32, - SPI_BAUDRATEPRESCALER_64, - SPI_BAUDRATEPRESCALER_128, - SPI_BAUDRATEPRESCALER_256}; - -void spi_frequency(spi_t *obj, int hz) -{ +/* + * Only the frequency is managed in the family specific part + * the rest of SPI management is common to all STM32 families + */ +int spi_get_clock_freq(spi_t *obj) { + struct spi_s *spiobj = SPI_S(obj); int spi_hz = 0; - uint8_t prescaler_rank = 0; /* Get source clock depending on SPI instance */ - switch ((int)obj->spi) { + switch ((int)spiobj->spi) { #if defined SPI1_BASE case SPI_1: /* SPI_1. Source CLK is PCKL2 */ @@ -245,120 +73,10 @@ void spi_frequency(spi_t *obj, int hz) spi_hz = HAL_RCC_GetPCLK1Freq(); break; default: - error("SPI instance not set"); - } - - /* Define pre-scaler in order to get highest available frequency below requested frequency */ - while ((spi_hz > hz) && (prescaler_rank < sizeof(baudrate_prescaler_table)/sizeof(baudrate_prescaler_table[0]))){ - spi_hz = spi_hz / 2; - prescaler_rank++; - } - - if (prescaler_rank <= sizeof(baudrate_prescaler_table)/sizeof(baudrate_prescaler_table[0])) { - obj->br_presc = baudrate_prescaler_table[prescaler_rank-1]; - } else { - error("Couldn't setup requested SPI frequency"); - } - - init_spi(obj); -} - -static inline int ssp_readable(spi_t *obj) -{ - int status; - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - // Check if data is received - status = ((__HAL_SPI_GET_FLAG(&SpiHandle, SPI_FLAG_RXNE) != RESET) ? 1 : 0); - return status; -} - -static inline int ssp_writeable(spi_t *obj) -{ - int status; - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - // Check if data is transmitted - status = ((__HAL_SPI_GET_FLAG(&SpiHandle, SPI_FLAG_TXE) != RESET) ? 1 : 0); - return status; -} - -static inline void ssp_write(spi_t *obj, int value) -{ - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_writeable(obj)); - if (obj->bits == SPI_DATASIZE_8BIT) { - // Force 8-bit access to the data register - uint8_t *p_spi_dr = 0; - p_spi_dr = (uint8_t *) & (spi->DR); - *p_spi_dr = (uint8_t)value; - } else { // SPI_DATASIZE_16BIT - spi->DR = (uint16_t)value; - } -} - -static inline int ssp_read(spi_t *obj) -{ - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_readable(obj)); - if (obj->bits == SPI_DATASIZE_8BIT) { - // Force 8-bit access to the data register - uint8_t *p_spi_dr = 0; - p_spi_dr = (uint8_t *) & (spi->DR); - return (int)(*p_spi_dr); - } else { - return (int)spi->DR; - } -} - -static inline int ssp_busy(spi_t *obj) -{ - int status; - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - status = ((__HAL_SPI_GET_FLAG(&SpiHandle, SPI_FLAG_BSY) != RESET) ? 1 : 0); - return status; -} - -int spi_master_write(spi_t *obj, int value) -{ - ssp_write(obj, value); - return ssp_read(obj); -} - -int spi_slave_receive(spi_t *obj) -{ - return ((ssp_readable(obj) && !ssp_busy(obj)) ? 1 : 0); -}; - -int spi_slave_read(spi_t *obj) -{ - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_readable(obj)); - if (obj->bits == SPI_DATASIZE_8BIT) { - // Force 8-bit access to the data register - uint8_t *p_spi_dr = 0; - p_spi_dr = (uint8_t *) & (spi->DR); - return (int)(*p_spi_dr); - } else { - return (int)spi->DR; - } -} - -void spi_slave_write(spi_t *obj, int value) -{ - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_writeable(obj)); - if (obj->bits == SPI_DATASIZE_8BIT) { - // Force 8-bit access to the data register - uint8_t *p_spi_dr = 0; - p_spi_dr = (uint8_t *) & (spi->DR); - *p_spi_dr = (uint8_t)value; - } else { // SPI_DATASIZE_16BIT - spi->DR = (uint16_t)value; + error("CLK: SPI instance not set"); + break; } -} - -int spi_busy(spi_t *obj) -{ - return ssp_busy(obj); + return spi_hz; } #endif diff --git a/targets/TARGET_STM/TARGET_STM32F4/spi_api.c b/targets/TARGET_STM/TARGET_STM32F4/spi_api.c index aa1a8b7b4ec..af4414c1501 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/spi_api.c +++ b/targets/TARGET_STM/TARGET_STM32F4/spi_api.c @@ -39,248 +39,19 @@ #include "pinmap.h" #include "PeripheralPins.h" -#if DEVICE_SPI_ASYNCH - #define SPI_INST(obj) ((SPI_TypeDef *)(obj->spi.spi)) -#else - #define SPI_INST(obj) ((SPI_TypeDef *)(obj->spi)) -#endif - #if DEVICE_SPI_ASYNCH #define SPI_S(obj) (( struct spi_s *)(&(obj->spi))) #else #define SPI_S(obj) (( struct spi_s *)(obj)) #endif -#ifndef DEBUG_STDIO -# define DEBUG_STDIO 0 -#endif - -#if DEBUG_STDIO -# include -# define DEBUG_PRINTF(...) do { printf(__VA_ARGS__); } while(0) -#else -# define DEBUG_PRINTF(...) {} -#endif - -static void init_spi(spi_t *obj) -{ - struct spi_s *spiobj = SPI_S(obj); - SPI_HandleTypeDef *handle = &(spiobj->handle); - - __HAL_SPI_DISABLE(handle); - - DEBUG_PRINTF("init_spi: instance=0x%8X\r\n", (int)handle->Instance); - if (HAL_SPI_Init(handle) != HAL_OK) { - error("Cannot initialize SPI"); - } - - __HAL_SPI_ENABLE(handle); -} - -void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel) -{ - struct spi_s *spiobj = SPI_S(obj); - SPI_HandleTypeDef *handle = &(spiobj->handle); - - // Determine the SPI to use - SPIName spi_mosi = (SPIName)pinmap_peripheral(mosi, PinMap_SPI_MOSI); - SPIName spi_miso = (SPIName)pinmap_peripheral(miso, PinMap_SPI_MISO); - SPIName spi_sclk = (SPIName)pinmap_peripheral(sclk, PinMap_SPI_SCLK); - SPIName spi_ssel = (SPIName)pinmap_peripheral(ssel, PinMap_SPI_SSEL); - - SPIName spi_data = (SPIName)pinmap_merge(spi_mosi, spi_miso); - SPIName spi_cntl = (SPIName)pinmap_merge(spi_sclk, spi_ssel); - - spiobj->spi = (SPIName)pinmap_merge(spi_data, spi_cntl); - MBED_ASSERT(spiobj->spi != (SPIName)NC); - - // Enable SPI clock - if (spiobj->spi == SPI_1) { - __HAL_RCC_SPI1_CLK_ENABLE(); - spiobj->spiIRQ = SPI1_IRQn; - } - - if (spiobj->spi == SPI_2) { - __HAL_RCC_SPI2_CLK_ENABLE(); - spiobj->spiIRQ = SPI2_IRQn; - } - -#if defined SPI3_BASE - if (spiobj->spi == SPI_3) { - __HAL_RCC_SPI3_CLK_ENABLE(); - spiobj->spiIRQ = SPI3_IRQn; - } -#endif - -#if defined SPI4_BASE - if (spiobj->spi == SPI_4) { - __HAL_RCC_SPI4_CLK_ENABLE(); - spiobj->spiIRQ = SPI4_IRQn; - } -#endif - -#if defined SPI5_BASE - if (spiobj->spi == SPI_5) { - __HAL_RCC_SPI5_CLK_ENABLE(); - spiobj->spiIRQ = SPI5_IRQn; - } -#endif - -#if defined SPI6_BASE - if (spiobj->spi == SPI_6) { - __HAL_RCC_SPI6_CLK_ENABLE(); - spiobj->spiIRQ = SPI6_IRQn; - } -#endif - - // Configure the SPI pins - pinmap_pinout(mosi, PinMap_SPI_MOSI); - pinmap_pinout(miso, PinMap_SPI_MISO); - pinmap_pinout(sclk, PinMap_SPI_SCLK); - spiobj->pin_miso = miso; - spiobj->pin_mosi = mosi; - spiobj->pin_sclk = sclk; - spiobj->pin_ssel = ssel; - if (ssel != NC) { - pinmap_pinout(ssel, PinMap_SPI_SSEL); - } else { - handle->Init.NSS = SPI_NSS_SOFT; - } - - /* Fill default value */ - handle->Instance = SPI_INST(obj); - handle->Init.Mode = SPI_MODE_MASTER; - handle->Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256; - handle->Init.Direction = SPI_DIRECTION_2LINES; - handle->Init.CLKPhase = SPI_PHASE_1EDGE; - handle->Init.CLKPolarity = SPI_POLARITY_LOW; - handle->Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED; - handle->Init.CRCPolynomial = 7; - handle->Init.DataSize = SPI_DATASIZE_8BIT; - handle->Init.FirstBit = SPI_FIRSTBIT_MSB; - handle->Init.TIMode = SPI_TIMODE_DISABLED; - - init_spi(obj); -} - -void spi_free(spi_t *obj) -{ - struct spi_s *spiobj = SPI_S(obj); - SPI_HandleTypeDef *handle = &(spiobj->handle); - - DEBUG_PRINTF("spi_free\r\n"); - - __HAL_SPI_DISABLE(handle); - HAL_SPI_DeInit(handle); - - // Reset SPI and disable clock - if (spiobj->spi == SPI_1) { - __HAL_RCC_SPI1_FORCE_RESET(); - __HAL_RCC_SPI1_RELEASE_RESET(); - __HAL_RCC_SPI1_CLK_DISABLE(); - } - - if (spiobj->spi == SPI_2) { - __HAL_RCC_SPI2_FORCE_RESET(); - __HAL_RCC_SPI2_RELEASE_RESET(); - __HAL_RCC_SPI2_CLK_DISABLE(); - } -#if defined SPI3_BASE - if (spiobj->spi == SPI_3) { - __HAL_RCC_SPI3_FORCE_RESET(); - __HAL_RCC_SPI3_RELEASE_RESET(); - __HAL_RCC_SPI3_CLK_DISABLE(); - } -#endif - -#if defined SPI4_BASE - if (spiobj->spi == SPI_4) { - __HAL_RCC_SPI4_FORCE_RESET(); - __HAL_RCC_SPI4_RELEASE_RESET(); - __HAL_RCC_SPI4_CLK_DISABLE(); - } -#endif - -#if defined SPI5_BASE - if (spiobj->spi == SPI_5) { - __HAL_RCC_SPI5_FORCE_RESET(); - __HAL_RCC_SPI5_RELEASE_RESET(); - __HAL_RCC_SPI5_CLK_DISABLE(); - } -#endif - -#if defined SPI6_BASE - if (spiobj->spi == SPI_6) { - __HAL_RCC_SPI6_FORCE_RESET(); - __HAL_RCC_SPI6_RELEASE_RESET(); - __HAL_RCC_SPI6_CLK_DISABLE(); - } -#endif - - // Configure GPIOs - pin_function(spiobj->pin_miso, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); - pin_function(spiobj->pin_mosi, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); - pin_function(spiobj->pin_sclk, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); - if (handle->Init.NSS != SPI_NSS_SOFT) { - pin_function(spiobj->pin_ssel, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); - } -} - -void spi_format(spi_t *obj, int bits, int mode, int slave) -{ - struct spi_s *spiobj = SPI_S(obj); - SPI_HandleTypeDef *handle = &(spiobj->handle); - - DEBUG_PRINTF("spi_format, bits:%d, mode:%d, slave?:%d\r\n", bits, mode, slave); - - // Save new values - handle->Init.DataSize = (bits == 16) ? SPI_DATASIZE_16BIT : SPI_DATASIZE_8BIT; - - switch (mode) { - case 0: - handle->Init.CLKPolarity = SPI_POLARITY_LOW; - handle->Init.CLKPhase = SPI_PHASE_1EDGE; - break; - case 1: - handle->Init.CLKPolarity = SPI_POLARITY_LOW; - handle->Init.CLKPhase = SPI_PHASE_2EDGE; - break; - case 2: - handle->Init.CLKPolarity = SPI_POLARITY_HIGH; - handle->Init.CLKPhase = SPI_PHASE_1EDGE; - break; - default: - handle->Init.CLKPolarity = SPI_POLARITY_HIGH; - handle->Init.CLKPhase = SPI_PHASE_2EDGE; - break; - } - - if (handle->Init.NSS != SPI_NSS_SOFT) { - handle->Init.NSS = (slave) ? SPI_NSS_HARD_INPUT : SPI_NSS_HARD_OUTPUT; - } - - handle->Init.Mode = (slave) ? SPI_MODE_SLAVE : SPI_MODE_MASTER; - - init_spi(obj); -} - -static const uint16_t baudrate_prescaler_table[] = {SPI_BAUDRATEPRESCALER_2, - SPI_BAUDRATEPRESCALER_4, - SPI_BAUDRATEPRESCALER_8, - SPI_BAUDRATEPRESCALER_16, - SPI_BAUDRATEPRESCALER_32, - SPI_BAUDRATEPRESCALER_64, - SPI_BAUDRATEPRESCALER_128, - SPI_BAUDRATEPRESCALER_256}; - -void spi_frequency(spi_t *obj, int hz) -{ +/* + * Only the frequency is managed in the family specific part + * the rest of SPI management is common to all STM32 families + */ +int spi_get_clock_freq(spi_t *obj) { struct spi_s *spiobj = SPI_S(obj); - SPI_HandleTypeDef *handle = &(spiobj->handle); int spi_hz = 0; - uint8_t prescaler_rank = 0; - - DEBUG_PRINTF("spi_frequency:%d\r\n", hz); /* Get source clock depending on SPI instance */ switch ((int)spiobj->spi) { @@ -305,284 +76,10 @@ void spi_frequency(spi_t *obj, int hz) spi_hz = HAL_RCC_GetPCLK1Freq(); break; default: - error("SPI instance not set"); - } - - /* Define pre-scaler in order to get highest available frequency below requested frequency */ - while ((spi_hz > hz) && (prescaler_rank < sizeof(baudrate_prescaler_table)/sizeof(baudrate_prescaler_table[0]))){ - spi_hz = spi_hz / 2; - prescaler_rank++; - } - - if (prescaler_rank <= sizeof(baudrate_prescaler_table)/sizeof(baudrate_prescaler_table[0])) { - handle->Init.BaudRatePrescaler = baudrate_prescaler_table[prescaler_rank-1]; - } else { - error("Couldn't setup requested SPI frequency"); - } - - init_spi(obj); -} - -static inline int ssp_readable(spi_t *obj) -{ - int status; - struct spi_s *spiobj = SPI_S(obj); - SPI_HandleTypeDef *handle = &(spiobj->handle); - - // Check if data is received - status = ((__HAL_SPI_GET_FLAG(handle, SPI_FLAG_RXNE) != RESET) ? 1 : 0); - return status; -} - -static inline int ssp_writeable(spi_t *obj) -{ - int status; - struct spi_s *spiobj = SPI_S(obj); - SPI_HandleTypeDef *handle = &(spiobj->handle); - - // Check if data is transmitted - status = ((__HAL_SPI_GET_FLAG(handle, SPI_FLAG_TXE) != RESET) ? 1 : 0); - return status; -} - -static inline void ssp_write(spi_t *obj, int value) -{ - SPI_TypeDef *spi = SPI_INST(obj); - while (!ssp_writeable(obj)); - spi->DR = (uint16_t)value; -} - -static inline int ssp_read(spi_t *obj) -{ - SPI_TypeDef *spi = SPI_INST(obj); - while (!ssp_readable(obj)); - return (int)spi->DR; -} - -static inline int ssp_busy(spi_t *obj) -{ - int status; - struct spi_s *spiobj = SPI_S(obj); - SPI_HandleTypeDef *handle = &(spiobj->handle); - - status = ((__HAL_SPI_GET_FLAG(handle, SPI_FLAG_BSY) != RESET) ? 1 : 0); - return status; -} - -int spi_master_write(spi_t *obj, int value) -{ - ssp_write(obj, value); - return ssp_read(obj); -} - -int spi_slave_receive(spi_t *obj) -{ - return ((ssp_readable(obj) && !ssp_busy(obj)) ? 1 : 0); -}; - -int spi_slave_read(spi_t *obj) -{ - SPI_TypeDef *spi = SPI_INST(obj); - while (!ssp_readable(obj)); - return (int)spi->DR; -} - -void spi_slave_write(spi_t *obj, int value) -{ - SPI_TypeDef *spi = SPI_INST(obj); - while (!ssp_writeable(obj)); - spi->DR = (uint16_t)value; -} - -int spi_busy(spi_t *obj) -{ - return ssp_busy(obj); -} - -#ifdef DEVICE_SPI_ASYNCH -typedef enum { - SPI_TRANSFER_TYPE_NONE = 0, - SPI_TRANSFER_TYPE_TX = 1, - SPI_TRANSFER_TYPE_RX = 2, - SPI_TRANSFER_TYPE_TXRX = 3, -} transfer_type_t; - - -/// @returns the number of bytes transferred, or `0` if nothing transferred -static int spi_master_start_asynch_transfer(spi_t *obj, transfer_type_t transfer_type, const void *tx, void *rx, size_t length) -{ - struct spi_s *spiobj = SPI_S(obj); - SPI_HandleTypeDef *handle = &(spiobj->handle); - bool is16bit = (handle->Init.DataSize == SPI_DATASIZE_16BIT); - // the HAL expects number of transfers instead of number of bytes - // so for 16 bit transfer width the count needs to be halved - size_t words; - - DEBUG_PRINTF("SPI inst=0x%8X Start: %u, %u\r\n", (int)handle->Instance, transfer_type, length); - - obj->spi.transfer_type = transfer_type; - - if (is16bit) words = length / 2; - else words = length; - - // enable the interrupt - IRQn_Type irq_n = spiobj->spiIRQ; - NVIC_ClearPendingIRQ(irq_n); - NVIC_DisableIRQ(irq_n); - NVIC_SetPriority(irq_n, 1); - NVIC_EnableIRQ(irq_n); - - // enable the right hal transfer - //static uint16_t sink; - int rc = 0; - switch(transfer_type) { - case SPI_TRANSFER_TYPE_TXRX: - rc = HAL_SPI_TransmitReceive_IT(handle, (uint8_t*)tx, (uint8_t*)rx, words); - break; - case SPI_TRANSFER_TYPE_TX: - // TODO: we do not use `HAL_SPI_Transmit_IT`, since it has some unknown bug - // and makes the HAL keep some state and then that fails successive transfers - rc = HAL_SPI_Transmit_IT(handle, (uint8_t*)tx, words); - //rc = HAL_SPI_TransmitReceive_IT(handle, (uint8_t*)tx, (uint8_t*)&sink, 1); - //length = is16bit ? 2 : 1; + error("CLK: SPI instance not set"); break; - case SPI_TRANSFER_TYPE_RX: - // the receive function also "transmits" the receive buffer so in order - // to guarantee that 0xff is on the line, we explicitly memset it here - memset(rx, SPI_FILL_WORD, length); - rc = HAL_SPI_Receive_IT(handle, (uint8_t*)rx, words); - break; - default: - length = 0; - } - - if (rc) { - DEBUG_PRINTF("SPI: RC=%u\n", rc); - length = 0; - } - - return length; -} - -// asynchronous API -void spi_master_transfer(spi_t *obj, const void *tx, size_t tx_length, void *rx, size_t rx_length, uint8_t bit_width, uint32_t handler, uint32_t event, DMAUsage hint) -{ - struct spi_s *spiobj = SPI_S(obj); - SPI_HandleTypeDef *handle = &(spiobj->handle); - - // TODO: DMA usage is currently ignored - (void) hint; - - // check which use-case we have - bool use_tx = (tx != NULL && tx_length > 0); - bool use_rx = (rx != NULL && rx_length > 0); - bool is16bit = (handle->Init.DataSize == SPI_DATASIZE_16BIT); - - // don't do anything, if the buffers aren't valid - if (!use_tx && !use_rx) - return; - - // copy the buffers to the SPI object - obj->tx_buff.buffer = (void *) tx; - obj->tx_buff.length = tx_length; - obj->tx_buff.pos = 0; - obj->tx_buff.width = is16bit ? 16 : 8; - - obj->rx_buff.buffer = rx; - obj->rx_buff.length = rx_length; - obj->rx_buff.pos = 0; - obj->rx_buff.width = obj->tx_buff.width; - - obj->spi.event = event; - - DEBUG_PRINTF("SPI: Transfer: %u, %u\n", tx_length, rx_length); - - // register the thunking handler - IRQn_Type irq_n = spiobj->spiIRQ; - NVIC_SetVector(irq_n, (uint32_t)handler); - - // enable the right hal transfer - if (use_tx && use_rx) { - // we cannot manage different rx / tx sizes, let's use smaller one - size_t size = (tx_length < rx_length)? tx_length : rx_length; - if(tx_length != rx_length) { - DEBUG_PRINTF("SPI: Full duplex transfer only 1 size: %d\n", size); - obj->tx_buff.length = size; - obj->rx_buff.length = size; - } - spi_master_start_asynch_transfer(obj, SPI_TRANSFER_TYPE_TXRX, tx, rx, size); - } else if (use_tx) { - spi_master_start_asynch_transfer(obj, SPI_TRANSFER_TYPE_TX, tx, NULL, tx_length); - } else if (use_rx) { - spi_master_start_asynch_transfer(obj, SPI_TRANSFER_TYPE_RX, NULL, rx, rx_length); } + return spi_hz; } -uint32_t spi_irq_handler_asynch(spi_t *obj) -{ - // use the right instance - struct spi_s *spiobj = SPI_S(obj); - SPI_HandleTypeDef *handle = &spiobj->handle; - int event = 0; - - // call the CubeF4 handler, this will update the handle - HAL_SPI_IRQHandler(handle); - - if (HAL_SPI_GetState(handle) == HAL_SPI_STATE_READY) { - // When HAL SPI is back to READY state, check if there was an error - int error = HAL_SPI_GetError(handle); - if(error != HAL_SPI_ERROR_NONE) { - // something went wrong and the transfer has definitely completed - event = SPI_EVENT_ERROR | SPI_EVENT_INTERNAL_TRANSFER_COMPLETE; - - if (error & HAL_SPI_ERROR_OVR) { - // buffer overrun - event |= SPI_EVENT_RX_OVERFLOW; - } - } else { - // else we're done - event = SPI_EVENT_COMPLETE | SPI_EVENT_INTERNAL_TRANSFER_COMPLETE; - } - } - - if (event) DEBUG_PRINTF("SPI: Event: 0x%x\n", event); - - return (event & (obj->spi.event | SPI_EVENT_INTERNAL_TRANSFER_COMPLETE)); -} - -uint8_t spi_active(spi_t *obj) -{ - struct spi_s *spiobj = SPI_S(obj); - SPI_HandleTypeDef *handle = &(spiobj->handle); - HAL_SPI_StateTypeDef state = HAL_SPI_GetState(handle); - - switch(state) { - case HAL_SPI_STATE_RESET: - case HAL_SPI_STATE_READY: - case HAL_SPI_STATE_ERROR: - return 0; - default: - return 1; - } -} - -void spi_abort_asynch(spi_t *obj) -{ - struct spi_s *spiobj = SPI_S(obj); - SPI_HandleTypeDef *handle = &(spiobj->handle); - - // disable interrupt - IRQn_Type irq_n = spiobj->spiIRQ; - NVIC_ClearPendingIRQ(irq_n); - NVIC_DisableIRQ(irq_n); - - // clean-up - __HAL_SPI_DISABLE(handle); - HAL_SPI_DeInit(handle); - HAL_SPI_Init(handle); - __HAL_SPI_ENABLE(handle); -} - -#endif //DEVICE_SPI_ASYNCH - #endif diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_DISCO_F746NG/objects.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_DISCO_F746NG/objects.h index 84c61ff5448..40972f65744 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_DISCO_F746NG/objects.h +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_DISCO_F746NG/objects.h @@ -66,20 +66,6 @@ struct dac_s { uint32_t channel; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; uint32_t slave; diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_DISCO_F769NI/objects.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_DISCO_F769NI/objects.h index 7639c231df1..3e253f11acd 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_DISCO_F769NI/objects.h +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_DISCO_F769NI/objects.h @@ -66,20 +66,6 @@ struct dac_s { uint32_t channel; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; uint32_t slave; diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/objects.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/objects.h index e8af139f961..84fc17241de 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/objects.h +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/objects.h @@ -66,20 +66,6 @@ struct dac_s { uint32_t channel; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; uint32_t slave; diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F767ZI/objects.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F767ZI/objects.h index 7639c231df1..3e253f11acd 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F767ZI/objects.h +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F767ZI/objects.h @@ -66,20 +66,6 @@ struct dac_s { uint32_t channel; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; uint32_t slave; diff --git a/targets/TARGET_STM/TARGET_STM32F7/common_objects.h b/targets/TARGET_STM/TARGET_STM32F7/common_objects.h index eef1f6aced4..1aa659360e7 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/common_objects.h +++ b/targets/TARGET_STM/TARGET_STM32F7/common_objects.h @@ -49,6 +49,21 @@ struct pwmout_s { uint8_t inverted; }; +struct spi_s { + SPI_HandleTypeDef handle; + IRQn_Type spiIRQ; + SPIName spi; + PinName pin_miso; + PinName pin_mosi; + PinName pin_sclk; + PinName pin_ssel; +#ifdef DEVICE_SPI_ASYNCH + uint32_t event; + uint8_t module; + uint8_t transfer_type; +#endif +}; + struct serial_s { UARTName uart; int index; // Used by irq diff --git a/targets/TARGET_STM/TARGET_STM32F7/spi_api.c b/targets/TARGET_STM/TARGET_STM32F7/spi_api.c index 255e03d38d1..6e54e2bf937 100644 --- a/targets/TARGET_STM/TARGET_STM32F7/spi_api.c +++ b/targets/TARGET_STM/TARGET_STM32F7/spi_api.c @@ -33,202 +33,27 @@ #if DEVICE_SPI -#include #include "cmsis.h" #include "pinmap.h" #include "PeripheralPins.h" #include "mbed_error.h" -static SPI_HandleTypeDef SpiHandle; - -static void init_spi(spi_t *obj) -{ - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - - __HAL_SPI_DISABLE(&SpiHandle); - - SpiHandle.Init.Mode = obj->mode; - SpiHandle.Init.BaudRatePrescaler = obj->br_presc; - SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; - SpiHandle.Init.CLKPhase = obj->cpha; - SpiHandle.Init.CLKPolarity = obj->cpol; - SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED; - SpiHandle.Init.CRCPolynomial = 7; - SpiHandle.Init.DataSize = obj->bits; - SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; - SpiHandle.Init.NSS = obj->nss; - SpiHandle.Init.TIMode = SPI_TIMODE_DISABLED; - - if (HAL_SPI_Init(&SpiHandle) != HAL_OK) { - error("Cannot initialize SPI"); - } - - __HAL_SPI_ENABLE(&SpiHandle); -} - -void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel) -{ - // Determine the SPI to use - SPIName spi_mosi = (SPIName)pinmap_peripheral(mosi, PinMap_SPI_MOSI); - SPIName spi_miso = (SPIName)pinmap_peripheral(miso, PinMap_SPI_MISO); - SPIName spi_sclk = (SPIName)pinmap_peripheral(sclk, PinMap_SPI_SCLK); - SPIName spi_ssel = (SPIName)pinmap_peripheral(ssel, PinMap_SPI_SSEL); - - SPIName spi_data = (SPIName)pinmap_merge(spi_mosi, spi_miso); - SPIName spi_cntl = (SPIName)pinmap_merge(spi_sclk, spi_ssel); - - obj->spi = (SPIName)pinmap_merge(spi_data, spi_cntl); - MBED_ASSERT(obj->spi != (SPIName)NC); - - // Enable SPI clock - if (obj->spi == SPI_1) { - __HAL_RCC_SPI1_CLK_ENABLE(); - } - - if (obj->spi == SPI_2) { - __HAL_RCC_SPI2_CLK_ENABLE(); - } - - if (obj->spi == SPI_3) { - __HAL_RCC_SPI3_CLK_ENABLE(); - } - - if (obj->spi == SPI_4) { - __HAL_RCC_SPI4_CLK_ENABLE(); - } - - if (obj->spi == SPI_5) { - __HAL_RCC_SPI5_CLK_ENABLE(); - } - - if (obj->spi == SPI_6) { - __HAL_RCC_SPI6_CLK_ENABLE(); - } - - // Configure the SPI pins - pinmap_pinout(mosi, PinMap_SPI_MOSI); - pinmap_pinout(miso, PinMap_SPI_MISO); - pinmap_pinout(sclk, PinMap_SPI_SCLK); - - // Save new values - obj->bits = SPI_DATASIZE_8BIT; - obj->cpol = SPI_POLARITY_LOW; - obj->cpha = SPI_PHASE_1EDGE; - obj->br_presc = SPI_BAUDRATEPRESCALER_256; - - obj->pin_miso = miso; - obj->pin_mosi = mosi; - obj->pin_sclk = sclk; - obj->pin_ssel = ssel; - - if (ssel != NC) { - pinmap_pinout(ssel, PinMap_SPI_SSEL); - } else { - obj->nss = SPI_NSS_SOFT; - } - - init_spi(obj); -} - -void spi_free(spi_t *obj) -{ - // Reset SPI and disable clock - if (obj->spi == SPI_1) { - __HAL_RCC_SPI1_FORCE_RESET(); - __HAL_RCC_SPI1_RELEASE_RESET(); - __HAL_RCC_SPI1_CLK_DISABLE(); - } - - if (obj->spi == SPI_2) { - __HAL_RCC_SPI2_FORCE_RESET(); - __HAL_RCC_SPI2_RELEASE_RESET(); - __HAL_RCC_SPI2_CLK_DISABLE(); - } - - if (obj->spi == SPI_3) { - __HAL_RCC_SPI3_FORCE_RESET(); - __HAL_RCC_SPI3_RELEASE_RESET(); - __HAL_RCC_SPI3_CLK_DISABLE(); - } - - if (obj->spi == SPI_4) { - __HAL_RCC_SPI4_FORCE_RESET(); - __HAL_RCC_SPI4_RELEASE_RESET(); - __HAL_RCC_SPI4_CLK_DISABLE(); - } - - if (obj->spi == SPI_5) { - __HAL_RCC_SPI5_FORCE_RESET(); - __HAL_RCC_SPI5_RELEASE_RESET(); - __HAL_RCC_SPI5_CLK_DISABLE(); - } - - if (obj->spi == SPI_6) { - __HAL_RCC_SPI6_FORCE_RESET(); - __HAL_RCC_SPI6_RELEASE_RESET(); - __HAL_RCC_SPI6_CLK_DISABLE(); - } - - // Configure GPIOs - pin_function(obj->pin_miso, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); - pin_function(obj->pin_mosi, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); - pin_function(obj->pin_sclk, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); - pin_function(obj->pin_ssel, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); -} - -void spi_format(spi_t *obj, int bits, int mode, int slave) -{ - // Save new values - if (bits == 16) { - obj->bits = SPI_DATASIZE_16BIT; - } else { - obj->bits = SPI_DATASIZE_8BIT; - } - - switch (mode) { - case 0: - obj->cpol = SPI_POLARITY_LOW; - obj->cpha = SPI_PHASE_1EDGE; - break; - case 1: - obj->cpol = SPI_POLARITY_LOW; - obj->cpha = SPI_PHASE_2EDGE; - break; - case 2: - obj->cpol = SPI_POLARITY_HIGH; - obj->cpha = SPI_PHASE_1EDGE; - break; - default: - obj->cpol = SPI_POLARITY_HIGH; - obj->cpha = SPI_PHASE_2EDGE; - break; - } - - if (obj->nss != SPI_NSS_SOFT) { - obj->nss = (slave) ? SPI_NSS_HARD_INPUT : SPI_NSS_HARD_OUTPUT; - } - - obj->mode = (slave) ? SPI_MODE_SLAVE : SPI_MODE_MASTER; - - init_spi(obj); -} - -static const uint16_t baudrate_prescaler_table[] = {SPI_BAUDRATEPRESCALER_2, - SPI_BAUDRATEPRESCALER_4, - SPI_BAUDRATEPRESCALER_8, - SPI_BAUDRATEPRESCALER_16, - SPI_BAUDRATEPRESCALER_32, - SPI_BAUDRATEPRESCALER_64, - SPI_BAUDRATEPRESCALER_128, - SPI_BAUDRATEPRESCALER_256}; +#if DEVICE_SPI_ASYNCH + #define SPI_S(obj) (( struct spi_s *)(&(obj->spi))) +#else + #define SPI_S(obj) (( struct spi_s *)(obj)) +#endif -void spi_frequency(spi_t *obj, int hz) -{ +/* + * Only the frequency is managed in the family specific part + * the rest of SPI management is common to all STM32 families + */ +int spi_get_clock_freq(spi_t *obj) { + struct spi_s *spiobj = SPI_S(obj); int spi_hz = 0; - uint8_t prescaler_rank = 0; - + /* Get source clock depending on SPI instance */ - switch ((int)obj->spi) { + switch ((int)spiobj->spi) { case SPI_1: case SPI_4: case SPI_5: @@ -242,120 +67,10 @@ void spi_frequency(spi_t *obj, int hz) spi_hz = HAL_RCC_GetPCLK1Freq(); break; default: - error("SPI instance not set"); - } - - /* Define pre-scaler in order to get highest available frequency below requested frequency */ - while ((spi_hz > hz) && (prescaler_rank < sizeof(baudrate_prescaler_table)/sizeof(baudrate_prescaler_table[0]))){ - spi_hz = spi_hz / 2; - prescaler_rank++; - } - - if (prescaler_rank <= sizeof(baudrate_prescaler_table)/sizeof(baudrate_prescaler_table[0])) { - obj->br_presc = baudrate_prescaler_table[prescaler_rank-1]; - } else { - error("Couldn't setup requested SPI frequency"); - } - - init_spi(obj); -} - -static inline int ssp_readable(spi_t *obj) -{ - int status; - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - // Check if data is received - status = ((__HAL_SPI_GET_FLAG(&SpiHandle, SPI_FLAG_RXNE) != RESET) ? 1 : 0); - return status; -} - -static inline int ssp_writeable(spi_t *obj) -{ - int status; - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - // Check if data is transmitted - status = ((__HAL_SPI_GET_FLAG(&SpiHandle, SPI_FLAG_TXE) != RESET) ? 1 : 0); - return status; -} - -static inline void ssp_write(spi_t *obj, int value) -{ - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_writeable(obj)); - if (obj->bits == SPI_DATASIZE_8BIT) { - // Force 8-bit access to the data register - uint8_t *p_spi_dr = 0; - p_spi_dr = (uint8_t *) & (spi->DR); - *p_spi_dr = (uint8_t)value; - } else { // SPI_DATASIZE_16BIT - spi->DR = (uint16_t)value; - } -} - -static inline int ssp_read(spi_t *obj) -{ - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_readable(obj)); - if (obj->bits == SPI_DATASIZE_8BIT) { - // Force 8-bit access to the data register - uint8_t *p_spi_dr = 0; - p_spi_dr = (uint8_t *) & (spi->DR); - return (int)(*p_spi_dr); - } else { - return (int)spi->DR; - } -} - -static inline int ssp_busy(spi_t *obj) -{ - int status; - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - status = ((__HAL_SPI_GET_FLAG(&SpiHandle, SPI_FLAG_BSY) != RESET) ? 1 : 0); - return status; -} - -int spi_master_write(spi_t *obj, int value) -{ - ssp_write(obj, value); - return ssp_read(obj); -} - -int spi_slave_receive(spi_t *obj) -{ - return ((ssp_readable(obj) && !ssp_busy(obj)) ? 1 : 0); -}; - -int spi_slave_read(spi_t *obj) -{ - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_readable(obj)); - if (obj->bits == SPI_DATASIZE_8BIT) { - // Force 8-bit access to the data register - uint8_t *p_spi_dr = 0; - p_spi_dr = (uint8_t *) & (spi->DR); - return (int)(*p_spi_dr); - } else { - return (int)spi->DR; - } -} - -void spi_slave_write(spi_t *obj, int value) -{ - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_writeable(obj)); - if (obj->bits == SPI_DATASIZE_8BIT) { - // Force 8-bit access to the data register - uint8_t *p_spi_dr = 0; - p_spi_dr = (uint8_t *) & (spi->DR); - *p_spi_dr = (uint8_t)value; - } else { // SPI_DATASIZE_16BIT - spi->DR = (uint16_t)value; + error("CLK: SPI instance not set"); + break; } -} - -int spi_busy(spi_t *obj) -{ - return ssp_busy(obj); + return spi_hz; } #endif diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L053C8/objects.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L053C8/objects.h index 3932d461284..5f05cd5bdaf 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L053C8/objects.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_DISCO_L053C8/objects.h @@ -66,20 +66,6 @@ struct dac_s { uint32_t channel; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; }; diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/objects.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/objects.h index 2d78a15eedb..f006abac8a9 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/objects.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L011K4/objects.h @@ -60,20 +60,6 @@ struct analogin_s { uint32_t channel; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; }; diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/objects.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/objects.h index 2d78a15eedb..f006abac8a9 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/objects.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L031K6/objects.h @@ -60,20 +60,6 @@ struct analogin_s { uint32_t channel; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; }; diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L053R8/objects.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L053R8/objects.h index b464a5f2e79..617ccbb6973 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L053R8/objects.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L053R8/objects.h @@ -66,20 +66,6 @@ struct dac_s { uint32_t channel; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; }; diff --git a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/objects.h b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/objects.h index 3932d461284..5f05cd5bdaf 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/objects.h +++ b/targets/TARGET_STM/TARGET_STM32L0/TARGET_NUCLEO_L073RZ/objects.h @@ -66,20 +66,6 @@ struct dac_s { uint32_t channel; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; }; diff --git a/targets/TARGET_STM/TARGET_STM32L0/common_objects.h b/targets/TARGET_STM/TARGET_STM32L0/common_objects.h index 585d323084c..fd235f0781f 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/common_objects.h +++ b/targets/TARGET_STM/TARGET_STM32L0/common_objects.h @@ -49,6 +49,21 @@ struct pwmout_s { uint8_t inverted; }; +struct spi_s { + SPI_HandleTypeDef handle; + IRQn_Type spiIRQ; + SPIName spi; + PinName pin_miso; + PinName pin_mosi; + PinName pin_sclk; + PinName pin_ssel; +#ifdef DEVICE_SPI_ASYNCH + uint32_t event; + uint8_t module; + uint8_t transfer_type; +#endif +}; + struct serial_s { UARTName uart; int index; // Used by irq diff --git a/targets/TARGET_STM/TARGET_STM32L0/spi_api.c b/targets/TARGET_STM/TARGET_STM32L0/spi_api.c index bbd0838a1fb..44c422c9f2b 100644 --- a/targets/TARGET_STM/TARGET_STM32L0/spi_api.c +++ b/targets/TARGET_STM/TARGET_STM32L0/spi_api.c @@ -33,166 +33,28 @@ #if DEVICE_SPI -#include #include "cmsis.h" #include "pinmap.h" #include "mbed_error.h" #include "PeripheralPins.h" -static SPI_HandleTypeDef SpiHandle; - -static void init_spi(spi_t *obj) -{ - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - - __HAL_SPI_DISABLE(&SpiHandle); - - SpiHandle.Init.Mode = obj->mode; - SpiHandle.Init.BaudRatePrescaler = obj->br_presc; - SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; - SpiHandle.Init.CLKPhase = obj->cpha; - SpiHandle.Init.CLKPolarity = obj->cpol; - SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED; - SpiHandle.Init.CRCPolynomial = 7; - SpiHandle.Init.DataSize = obj->bits; - SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; - SpiHandle.Init.NSS = obj->nss; - SpiHandle.Init.TIMode = SPI_TIMODE_DISABLED; - - if (HAL_SPI_Init(&SpiHandle) != HAL_OK) { - error("Cannot initialize SPI"); - } - - __HAL_SPI_ENABLE(&SpiHandle); -} - -void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel) -{ - // Determine the SPI to use - SPIName spi_mosi = (SPIName)pinmap_peripheral(mosi, PinMap_SPI_MOSI); - SPIName spi_miso = (SPIName)pinmap_peripheral(miso, PinMap_SPI_MISO); - SPIName spi_sclk = (SPIName)pinmap_peripheral(sclk, PinMap_SPI_SCLK); - SPIName spi_ssel = (SPIName)pinmap_peripheral(ssel, PinMap_SPI_SSEL); - - SPIName spi_data = (SPIName)pinmap_merge(spi_mosi, spi_miso); - SPIName spi_cntl = (SPIName)pinmap_merge(spi_sclk, spi_ssel); - - obj->spi = (SPIName)pinmap_merge(spi_data, spi_cntl); - MBED_ASSERT(obj->spi != (SPIName)NC); - - // Enable SPI clock - if (obj->spi == SPI_1) { - __SPI1_CLK_ENABLE(); - } - -#if defined(SPI2_BASE) - if (obj->spi == SPI_2) { - __SPI2_CLK_ENABLE(); - } -#endif - - // Configure the SPI pins - pinmap_pinout(mosi, PinMap_SPI_MOSI); - pinmap_pinout(miso, PinMap_SPI_MISO); - pinmap_pinout(sclk, PinMap_SPI_SCLK); - - // Save new values - obj->bits = SPI_DATASIZE_8BIT; - obj->cpol = SPI_POLARITY_LOW; - obj->cpha = SPI_PHASE_1EDGE; - obj->br_presc = SPI_BAUDRATEPRESCALER_256; - - obj->pin_miso = miso; - obj->pin_mosi = mosi; - obj->pin_sclk = sclk; - obj->pin_ssel = ssel; - - if (ssel != NC) { - pinmap_pinout(ssel, PinMap_SPI_SSEL); - } else { - obj->nss = SPI_NSS_SOFT; - } - - init_spi(obj); -} - -void spi_free(spi_t *obj) -{ - // Reset SPI and disable clock - if (obj->spi == SPI_1) { - __SPI1_FORCE_RESET(); - __SPI1_RELEASE_RESET(); - __SPI1_CLK_DISABLE(); - } - -#if defined(SPI2_BASE) - if (obj->spi == SPI_2) { - __SPI2_FORCE_RESET(); - __SPI2_RELEASE_RESET(); - __SPI2_CLK_DISABLE(); - } +#if DEVICE_SPI_ASYNCH + #define SPI_S(obj) (( struct spi_s *)(&(obj->spi))) +#else + #define SPI_S(obj) (( struct spi_s *)(obj)) #endif - // Configure GPIO - pin_function(obj->pin_miso, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); - pin_function(obj->pin_mosi, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); - pin_function(obj->pin_sclk, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); - pin_function(obj->pin_ssel, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); -} - -void spi_format(spi_t *obj, int bits, int mode, int slave) -{ - // Save new values - if (bits == 16) { - obj->bits = SPI_DATASIZE_16BIT; - } else { - obj->bits = SPI_DATASIZE_8BIT; - } - switch (mode) { - case 0: - obj->cpol = SPI_POLARITY_LOW; - obj->cpha = SPI_PHASE_1EDGE; - break; - case 1: - obj->cpol = SPI_POLARITY_LOW; - obj->cpha = SPI_PHASE_2EDGE; - break; - case 2: - obj->cpol = SPI_POLARITY_HIGH; - obj->cpha = SPI_PHASE_1EDGE; - break; - default: - obj->cpol = SPI_POLARITY_HIGH; - obj->cpha = SPI_PHASE_2EDGE; - break; - } - - if (obj->nss != SPI_NSS_SOFT) { - obj->nss = (slave) ? SPI_NSS_HARD_INPUT : SPI_NSS_HARD_OUTPUT; - } - - obj->mode = (slave) ? SPI_MODE_SLAVE : SPI_MODE_MASTER; - - init_spi(obj); -} - -static const uint16_t baudrate_prescaler_table[] = {SPI_BAUDRATEPRESCALER_2, - SPI_BAUDRATEPRESCALER_4, - SPI_BAUDRATEPRESCALER_8, - SPI_BAUDRATEPRESCALER_16, - SPI_BAUDRATEPRESCALER_32, - SPI_BAUDRATEPRESCALER_64, - SPI_BAUDRATEPRESCALER_128, - SPI_BAUDRATEPRESCALER_256}; - -void spi_frequency(spi_t *obj, int hz) -{ +/* + * Only the frequency is managed in the family specific part + * the rest of SPI management is common to all STM32 families + */ +int spi_get_clock_freq(spi_t *obj) { + struct spi_s *spiobj = SPI_S(obj); int spi_hz = 0; - uint8_t prescaler_rank = 0; /* Get source clock depending on SPI instance */ - switch ((int)obj->spi) { + switch ((int)spiobj->spi) { case SPI_1: /* SPI_1. Source CLK is PCKL2 */ spi_hz = HAL_RCC_GetPCLK2Freq(); @@ -204,92 +66,10 @@ void spi_frequency(spi_t *obj, int hz) break; #endif default: - error("SPI instance not set"); + error("CLK: SPI instance not set"); + break; } - - /* Define pre-scaler in order to get highest available frequency below requested frequency */ - while ((spi_hz > hz) && (prescaler_rank < sizeof(baudrate_prescaler_table)/sizeof(baudrate_prescaler_table[0]))){ - spi_hz = spi_hz / 2; - prescaler_rank++; - } - - if (prescaler_rank <= sizeof(baudrate_prescaler_table)/sizeof(baudrate_prescaler_table[0])) { - obj->br_presc = baudrate_prescaler_table[prescaler_rank-1]; - } else { - error("Couldn't setup requested SPI frequency"); - } - - init_spi(obj); -} - -static inline int ssp_readable(spi_t *obj) -{ - int status; - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - // Check if data is received - status = ((__HAL_SPI_GET_FLAG(&SpiHandle, SPI_FLAG_RXNE) != RESET) ? 1 : 0); - return status; -} - -static inline int ssp_writeable(spi_t *obj) -{ - int status; - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - // Check if data is transmitted - status = ((__HAL_SPI_GET_FLAG(&SpiHandle, SPI_FLAG_TXE) != RESET) ? 1 : 0); - return status; -} - -static inline void ssp_write(spi_t *obj, int value) -{ - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_writeable(obj)); - spi->DR = (uint16_t)value; -} - -static inline int ssp_read(spi_t *obj) -{ - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_readable(obj)); - return (int)spi->DR; -} - -static inline int ssp_busy(spi_t *obj) -{ - int status; - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - status = ((__HAL_SPI_GET_FLAG(&SpiHandle, SPI_FLAG_BSY) != RESET) ? 1 : 0); - return status; -} - -int spi_master_write(spi_t *obj, int value) -{ - ssp_write(obj, value); - return ssp_read(obj); -} - -int spi_slave_receive(spi_t *obj) -{ - return (ssp_readable(obj) ? 1 : 0); -}; - -int spi_slave_read(spi_t *obj) -{ - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_readable(obj)); - return (int)spi->DR; -} - -void spi_slave_write(spi_t *obj, int value) -{ - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_writeable(obj)); - spi->DR = (uint16_t)value; -} - -int spi_busy(spi_t *obj) -{ - return ssp_busy(obj); + return spi_hz; } #endif diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/objects.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/objects.h index 7a0d5f1489f..84754ae7488 100644 --- a/targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/objects.h +++ b/targets/TARGET_STM/TARGET_STM32L1/TARGET_MOTE_L152RC/objects.h @@ -65,20 +65,6 @@ struct dac_s { PinName pin; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; uint32_t slave; diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/objects.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/objects.h index 7a0d5f1489f..84754ae7488 100644 --- a/targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/objects.h +++ b/targets/TARGET_STM/TARGET_STM32L1/TARGET_NUCLEO_L152RE/objects.h @@ -65,20 +65,6 @@ struct dac_s { PinName pin; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; uint32_t slave; diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_NZ32_SC151/objects.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_NZ32_SC151/objects.h index 7a0d5f1489f..84754ae7488 100644 --- a/targets/TARGET_STM/TARGET_STM32L1/TARGET_NZ32_SC151/objects.h +++ b/targets/TARGET_STM/TARGET_STM32L1/TARGET_NZ32_SC151/objects.h @@ -65,20 +65,6 @@ struct dac_s { PinName pin; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; uint32_t slave; diff --git a/targets/TARGET_STM/TARGET_STM32L1/common_objects.h b/targets/TARGET_STM/TARGET_STM32L1/common_objects.h index 335b444aac0..fbbbc9868a7 100644 --- a/targets/TARGET_STM/TARGET_STM32L1/common_objects.h +++ b/targets/TARGET_STM/TARGET_STM32L1/common_objects.h @@ -66,6 +66,21 @@ struct serial_s { #endif }; +struct spi_s { + SPI_HandleTypeDef handle; + IRQn_Type spiIRQ; + SPIName spi; + PinName pin_miso; + PinName pin_mosi; + PinName pin_sclk; + PinName pin_ssel; +#ifdef DEVICE_SPI_ASYNCH + uint32_t event; + uint8_t module; + uint8_t transfer_type; +#endif +}; + #include "gpio_object.h" #ifdef __cplusplus diff --git a/targets/TARGET_STM/TARGET_STM32L1/spi_api.c b/targets/TARGET_STM/TARGET_STM32L1/spi_api.c index e312af1e4c7..ed3efe7a8e8 100644 --- a/targets/TARGET_STM/TARGET_STM32L1/spi_api.c +++ b/targets/TARGET_STM/TARGET_STM32L1/spi_api.c @@ -33,167 +33,27 @@ #if DEVICE_SPI -#include #include "cmsis.h" #include "pinmap.h" #include "PeripheralPins.h" -static SPI_HandleTypeDef SpiHandle; -static void init_spi(spi_t *obj) -{ - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - - __HAL_SPI_DISABLE(&SpiHandle); - - SpiHandle.Init.Mode = obj->mode; - SpiHandle.Init.BaudRatePrescaler = obj->br_presc; - SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; - SpiHandle.Init.CLKPhase = obj->cpha; - SpiHandle.Init.CLKPolarity = obj->cpol; - SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED; - SpiHandle.Init.CRCPolynomial = 7; - SpiHandle.Init.DataSize = obj->bits; - SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; - SpiHandle.Init.NSS = obj->nss; - SpiHandle.Init.TIMode = SPI_TIMODE_DISABLED; - - HAL_SPI_Init(&SpiHandle); - - __HAL_SPI_ENABLE(&SpiHandle); -} - -void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel) -{ - // Determine the SPI to use - SPIName spi_mosi = (SPIName)pinmap_peripheral(mosi, PinMap_SPI_MOSI); - SPIName spi_miso = (SPIName)pinmap_peripheral(miso, PinMap_SPI_MISO); - SPIName spi_sclk = (SPIName)pinmap_peripheral(sclk, PinMap_SPI_SCLK); - SPIName spi_ssel = (SPIName)pinmap_peripheral(ssel, PinMap_SPI_SSEL); - - SPIName spi_data = (SPIName)pinmap_merge(spi_mosi, spi_miso); - SPIName spi_cntl = (SPIName)pinmap_merge(spi_sclk, spi_ssel); - - obj->spi = (SPIName)pinmap_merge(spi_data, spi_cntl); - MBED_ASSERT(obj->spi != (SPIName)NC); - - // Enable SPI clock - if (obj->spi == SPI_1) { - __SPI1_CLK_ENABLE(); - } - if (obj->spi == SPI_2) { - __SPI2_CLK_ENABLE(); - } - if (obj->spi == SPI_3) { - __SPI3_CLK_ENABLE(); - } - - // Configure the SPI pins - pinmap_pinout(mosi, PinMap_SPI_MOSI); - pinmap_pinout(miso, PinMap_SPI_MISO); - pinmap_pinout(sclk, PinMap_SPI_SCLK); - - // Save new values - obj->bits = SPI_DATASIZE_8BIT; - obj->cpol = SPI_POLARITY_LOW; - obj->cpha = SPI_PHASE_1EDGE; - obj->br_presc = SPI_BAUDRATEPRESCALER_256; - - obj->pin_miso = miso; - obj->pin_mosi = mosi; - obj->pin_sclk = sclk; - obj->pin_ssel = ssel; - - if (ssel != NC) { - pinmap_pinout(ssel, PinMap_SPI_SSEL); - } else { - obj->nss = SPI_NSS_SOFT; - } - - init_spi(obj); -} - -void spi_free(spi_t *obj) -{ - // Reset SPI and disable clock - if (obj->spi == SPI_1) { - __SPI1_FORCE_RESET(); - __SPI1_RELEASE_RESET(); - __SPI1_CLK_DISABLE(); - } - - if (obj->spi == SPI_2) { - __SPI2_FORCE_RESET(); - __SPI2_RELEASE_RESET(); - __SPI2_CLK_DISABLE(); - } - - if (obj->spi == SPI_3) { - __SPI3_FORCE_RESET(); - __SPI3_RELEASE_RESET(); - __SPI3_CLK_DISABLE(); - } - - // Configure GPIO - pin_function(obj->pin_miso, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); - pin_function(obj->pin_mosi, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); - pin_function(obj->pin_sclk, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); - pin_function(obj->pin_ssel, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); -} - -void spi_format(spi_t *obj, int bits, int mode, int slave) -{ - // Save new values - if (bits == 16) { - obj->bits = SPI_DATASIZE_16BIT; - } else { - obj->bits = SPI_DATASIZE_8BIT; - } - - switch (mode) { - case 0: - obj->cpol = SPI_POLARITY_LOW; - obj->cpha = SPI_PHASE_1EDGE; - break; - case 1: - obj->cpol = SPI_POLARITY_LOW; - obj->cpha = SPI_PHASE_2EDGE; - break; - case 2: - obj->cpol = SPI_POLARITY_HIGH; - obj->cpha = SPI_PHASE_1EDGE; - break; - default: - obj->cpol = SPI_POLARITY_HIGH; - obj->cpha = SPI_PHASE_2EDGE; - break; - } - - if (obj->nss != SPI_NSS_SOFT) { - obj->nss = (slave) ? SPI_NSS_HARD_INPUT : SPI_NSS_HARD_OUTPUT; - } - - obj->mode = (slave) ? SPI_MODE_SLAVE : SPI_MODE_MASTER; - - init_spi(obj); -} - -static const uint16_t baudrate_prescaler_table[] = {SPI_BAUDRATEPRESCALER_2, - SPI_BAUDRATEPRESCALER_4, - SPI_BAUDRATEPRESCALER_8, - SPI_BAUDRATEPRESCALER_16, - SPI_BAUDRATEPRESCALER_32, - SPI_BAUDRATEPRESCALER_64, - SPI_BAUDRATEPRESCALER_128, - SPI_BAUDRATEPRESCALER_256}; +#if DEVICE_SPI_ASYNCH + #define SPI_S(obj) (( struct spi_s *)(&(obj->spi))) +#else + #define SPI_S(obj) (( struct spi_s *)(obj)) +#endif -void spi_frequency(spi_t *obj, int hz) -{ +/* + * Only the frequency is managed in the family specific part + * the rest of SPI management is common to all STM32 families + */ +int spi_get_clock_freq(spi_t *obj) { + struct spi_s *spiobj = SPI_S(obj); int spi_hz = 0; - uint8_t prescaler_rank = 0; /* Get source clock depending on SPI instance */ - switch ((int)obj->spi) { + switch ((int)spiobj->spi) { case SPI_1: /* SPI_1. Source CLK is PCKL2 */ spi_hz = HAL_RCC_GetPCLK2Freq(); @@ -204,92 +64,10 @@ void spi_frequency(spi_t *obj, int hz) spi_hz = HAL_RCC_GetPCLK1Freq(); break; default: - error("SPI instance not set"); + error("CLK: SPI instance not set"); + break; } - - /* Define pre-scaler in order to get highest available frequency below requested frequency */ - while ((spi_hz > hz) && (prescaler_rank < sizeof(baudrate_prescaler_table)/sizeof(baudrate_prescaler_table[0]))){ - spi_hz = spi_hz / 2; - prescaler_rank++; - } - - if (prescaler_rank <= sizeof(baudrate_prescaler_table)/sizeof(baudrate_prescaler_table[0])) { - obj->br_presc = baudrate_prescaler_table[prescaler_rank-1]; - } else { - error("Couldn't setup requested SPI frequency"); - } - - init_spi(obj); -} - -static inline int ssp_readable(spi_t *obj) -{ - int status; - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - // Check if data is received - status = ((__HAL_SPI_GET_FLAG(&SpiHandle, SPI_FLAG_RXNE) != RESET) ? 1 : 0); - return status; -} - -static inline int ssp_writeable(spi_t *obj) -{ - int status; - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - // Check if data is transmitted - status = ((__HAL_SPI_GET_FLAG(&SpiHandle, SPI_FLAG_TXE) != RESET) ? 1 : 0); - return status; -} - -static inline void ssp_write(spi_t *obj, int value) -{ - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_writeable(obj)); - spi->DR = (uint16_t)value; -} - -static inline int ssp_read(spi_t *obj) -{ - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_readable(obj)); - return (int)spi->DR; -} - -static inline int ssp_busy(spi_t *obj) -{ - int status; - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - status = ((__HAL_SPI_GET_FLAG(&SpiHandle, SPI_FLAG_BSY) != RESET) ? 1 : 0); - return status; -} - -int spi_master_write(spi_t *obj, int value) -{ - ssp_write(obj, value); - return ssp_read(obj); -} - -int spi_slave_receive(spi_t *obj) -{ - return (ssp_readable(obj) ? 1 : 0); -}; - -int spi_slave_read(spi_t *obj) -{ - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_readable(obj)); - return (int)spi->DR; -} - -void spi_slave_write(spi_t *obj, int value) -{ - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_writeable(obj)); - spi->DR = (uint16_t)value; -} - -int spi_busy(spi_t *obj) -{ - return ssp_busy(obj); + return spi_hz; } #endif diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_DISCO_L476VG/objects.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_DISCO_L476VG/objects.h index 20556881d81..6d890131c39 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_DISCO_L476VG/objects.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_DISCO_L476VG/objects.h @@ -66,20 +66,6 @@ struct dac_s { uint32_t channel; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; uint32_t slave; diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L432KC/objects.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L432KC/objects.h index c3407b008d6..689609d7979 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L432KC/objects.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L432KC/objects.h @@ -66,20 +66,6 @@ struct dac_s { uint32_t channel; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; uint32_t slave; diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/objects.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/objects.h index 20556881d81..6d890131c39 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/objects.h +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/objects.h @@ -66,20 +66,6 @@ struct dac_s { uint32_t channel; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; uint32_t slave; diff --git a/targets/TARGET_STM/TARGET_STM32L4/common_objects.h b/targets/TARGET_STM/TARGET_STM32L4/common_objects.h index 585d323084c..fd235f0781f 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/common_objects.h +++ b/targets/TARGET_STM/TARGET_STM32L4/common_objects.h @@ -49,6 +49,21 @@ struct pwmout_s { uint8_t inverted; }; +struct spi_s { + SPI_HandleTypeDef handle; + IRQn_Type spiIRQ; + SPIName spi; + PinName pin_miso; + PinName pin_mosi; + PinName pin_sclk; + PinName pin_ssel; +#ifdef DEVICE_SPI_ASYNCH + uint32_t event; + uint8_t module; + uint8_t transfer_type; +#endif +}; + struct serial_s { UARTName uart; int index; // Used by irq diff --git a/targets/TARGET_STM/TARGET_STM32L4/spi_api.c b/targets/TARGET_STM/TARGET_STM32L4/spi_api.c index c0ec856511f..d383c9d31f2 100644 --- a/targets/TARGET_STM/TARGET_STM32L4/spi_api.c +++ b/targets/TARGET_STM/TARGET_STM32L4/spi_api.c @@ -32,311 +32,43 @@ #if DEVICE_SPI -#include #include "cmsis.h" #include "pinmap.h" #include "mbed_error.h" #include "PeripheralPins.h" -static SPI_HandleTypeDef SpiHandle; - -static void init_spi(spi_t *obj) -{ - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - - __HAL_SPI_DISABLE(&SpiHandle); - - SpiHandle.Init.Mode = obj->mode; - SpiHandle.Init.BaudRatePrescaler = obj->br_presc; - SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; - SpiHandle.Init.CLKPhase = obj->cpha; - SpiHandle.Init.CLKPolarity = obj->cpol; - SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLE; - SpiHandle.Init.CRCPolynomial = 7; - SpiHandle.Init.CRCLength = SPI_CRC_LENGTH_8BIT; - SpiHandle.Init.DataSize = obj->bits; - SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; - SpiHandle.Init.TIMode = SPI_TIMODE_DISABLE; - SpiHandle.Init.NSS = obj->nss; - SpiHandle.Init.NSSPMode = SPI_NSS_PULSE_DISABLE; - - if (HAL_SPI_Init(&SpiHandle) != HAL_OK) { - error("Cannot initialize SPI\n"); - } - - __HAL_SPI_ENABLE(&SpiHandle); -} - -void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel) -{ - // Determine the SPI to use - SPIName spi_mosi = (SPIName)pinmap_peripheral(mosi, PinMap_SPI_MOSI); - SPIName spi_miso = (SPIName)pinmap_peripheral(miso, PinMap_SPI_MISO); - SPIName spi_sclk = (SPIName)pinmap_peripheral(sclk, PinMap_SPI_SCLK); - SPIName spi_ssel = (SPIName)pinmap_peripheral(ssel, PinMap_SPI_SSEL); - - SPIName spi_data = (SPIName)pinmap_merge(spi_mosi, spi_miso); - SPIName spi_cntl = (SPIName)pinmap_merge(spi_sclk, spi_ssel); - - obj->spi = (SPIName)pinmap_merge(spi_data, spi_cntl); - MBED_ASSERT(obj->spi != (SPIName)NC); - - // Enable SPI clock - if (obj->spi == SPI_1) { - __HAL_RCC_SPI1_CLK_ENABLE(); - } -#if defined(SPI2_BASE) - if (obj->spi == SPI_2) { - __HAL_RCC_SPI2_CLK_ENABLE(); - } +#if DEVICE_SPI_ASYNCH + #define SPI_S(obj) (( struct spi_s *)(&(obj->spi))) +#else + #define SPI_S(obj) (( struct spi_s *)(obj)) #endif - if (obj->spi == SPI_3) { - __HAL_RCC_SPI3_CLK_ENABLE(); - } - - // Configure the SPI pins - pinmap_pinout(mosi, PinMap_SPI_MOSI); - pinmap_pinout(miso, PinMap_SPI_MISO); - pinmap_pinout(sclk, PinMap_SPI_SCLK); - - // Save new values - obj->bits = SPI_DATASIZE_8BIT; - obj->cpol = SPI_POLARITY_LOW; - obj->cpha = SPI_PHASE_1EDGE; - obj->br_presc = SPI_BAUDRATEPRESCALER_256; - - obj->pin_miso = miso; - obj->pin_mosi = mosi; - obj->pin_sclk = sclk; - obj->pin_ssel = ssel; - - if (ssel == NC) { // SW NSS Master mode - obj->mode = SPI_MODE_MASTER; - obj->nss = SPI_NSS_SOFT; - } else { // Slave - pinmap_pinout(ssel, PinMap_SPI_SSEL); - obj->mode = SPI_MODE_SLAVE; - obj->nss = SPI_NSS_HARD_INPUT; - } - init_spi(obj); -} - -void spi_free(spi_t *obj) -{ - // Reset SPI and disable clock - if (obj->spi == SPI_1) { - __HAL_RCC_SPI1_FORCE_RESET(); - __HAL_RCC_SPI1_RELEASE_RESET(); - __HAL_RCC_SPI1_CLK_DISABLE(); - } - -#if defined(SPI2_BASE) - if (obj->spi == SPI_2) { - __HAL_RCC_SPI2_FORCE_RESET(); - __HAL_RCC_SPI2_RELEASE_RESET(); - __HAL_RCC_SPI2_CLK_DISABLE(); - } -#endif - - if (obj->spi == SPI_3) { - __HAL_RCC_SPI3_FORCE_RESET(); - __HAL_RCC_SPI3_RELEASE_RESET(); - __HAL_RCC_SPI3_CLK_DISABLE(); - } - - // Configure GPIO - pin_function(obj->pin_miso, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); - pin_function(obj->pin_mosi, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); - pin_function(obj->pin_sclk, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); - pin_function(obj->pin_ssel, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); -} - -void spi_format(spi_t *obj, int bits, int mode, int slave) -{ - // Save new values - if (bits == 16) { - obj->bits = SPI_DATASIZE_16BIT; - } else { - obj->bits = SPI_DATASIZE_8BIT; - } - - switch (mode) { - case 0: - obj->cpol = SPI_POLARITY_LOW; - obj->cpha = SPI_PHASE_1EDGE; - break; - case 1: - obj->cpol = SPI_POLARITY_LOW; - obj->cpha = SPI_PHASE_2EDGE; - break; - case 2: - obj->cpol = SPI_POLARITY_HIGH; - obj->cpha = SPI_PHASE_1EDGE; - break; - default: - obj->cpol = SPI_POLARITY_HIGH; - obj->cpha = SPI_PHASE_2EDGE; - break; - } - - if (slave == 0) { - obj->mode = SPI_MODE_MASTER; - obj->nss = SPI_NSS_SOFT; - } else { - obj->mode = SPI_MODE_SLAVE; - obj->nss = SPI_NSS_HARD_INPUT; - } - - init_spi(obj); -} - -static const uint16_t baudrate_prescaler_table[] = {SPI_BAUDRATEPRESCALER_2, - SPI_BAUDRATEPRESCALER_4, - SPI_BAUDRATEPRESCALER_8, - SPI_BAUDRATEPRESCALER_16, - SPI_BAUDRATEPRESCALER_32, - SPI_BAUDRATEPRESCALER_64, - SPI_BAUDRATEPRESCALER_128, - SPI_BAUDRATEPRESCALER_256}; - -void spi_frequency(spi_t *obj, int hz) -{ +/* + * Only the frequency is managed in the family specific part + * the rest of SPI management is common to all STM32 families + */ +int spi_get_clock_freq(spi_t *obj) { + struct spi_s *spiobj = SPI_S(obj); int spi_hz = 0; - uint8_t prescaler_rank = 0; /* Get source clock depending on SPI instance */ - switch ((int)obj->spi) { + switch ((int)spiobj->spi) { case SPI_1: - /* SPI_1. Source CLK is PCKL2 */ - spi_hz = HAL_RCC_GetPCLK2Freq(); - break; + /* SPI_1. Source CLK is PCKL2 */ + spi_hz = HAL_RCC_GetPCLK2Freq(); + break; #if defined(SPI2_BASE) - case SPI_2: + case SPI_2: #endif - case SPI_3: - /* SPI_2, SPI_3. Source CLK is PCKL1 */ - spi_hz = HAL_RCC_GetPCLK1Freq(); - break; - default: - error("SPI instance not set"); - } - - /* Define pre-scaler in order to get highest available frequency below requested frequency */ - while ((spi_hz > hz) && (prescaler_rank < sizeof(baudrate_prescaler_table)/sizeof(baudrate_prescaler_table[0]))){ - spi_hz = spi_hz / 2; - prescaler_rank++; - } - - if (prescaler_rank <= sizeof(baudrate_prescaler_table)/sizeof(baudrate_prescaler_table[0])) { - obj->br_presc = baudrate_prescaler_table[prescaler_rank-1]; - } else { - error("Couldn't setup requested SPI frequency"); - } - - init_spi(obj); -} - -static inline int ssp_readable(spi_t *obj) -{ - int status; - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - // Check if data is received - status = ((__HAL_SPI_GET_FLAG(&SpiHandle, SPI_FLAG_RXNE) != RESET) ? 1 : 0); - return status; -} - -static inline int ssp_writeable(spi_t *obj) -{ - int status; - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - // Check if data is transmitted - status = ((__HAL_SPI_GET_FLAG(&SpiHandle, SPI_FLAG_TXE) != RESET) ? 1 : 0); - return status; -} - -static inline void ssp_write(spi_t *obj, int value) -{ - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_writeable(obj)); - //spi->DR = (uint16_t)value; - if (obj->bits == SPI_DATASIZE_8BIT) { - // Force 8-bit access to the data register - uint8_t *p_spi_dr = 0; - p_spi_dr = (uint8_t *) & (spi->DR); - *p_spi_dr = (uint8_t)value; - } else { // SPI_DATASIZE_16BIT - spi->DR = (uint16_t)value; - } -} - -static inline int ssp_read(spi_t *obj) -{ - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_readable(obj)); - //return (int)spi->DR; - if (obj->bits == SPI_DATASIZE_8BIT) { - // Force 8-bit access to the data register - uint8_t *p_spi_dr = 0; - p_spi_dr = (uint8_t *) & (spi->DR); - return (int)(*p_spi_dr); - } else { - return (int)spi->DR; - } -} - -static inline int ssp_busy(spi_t *obj) -{ - int status; - SpiHandle.Instance = (SPI_TypeDef *)(obj->spi); - status = ((__HAL_SPI_GET_FLAG(&SpiHandle, SPI_FLAG_BSY) != RESET) ? 1 : 0); - return status; -} - -int spi_master_write(spi_t *obj, int value) -{ - ssp_write(obj, value); - return ssp_read(obj); -} - -int spi_slave_receive(spi_t *obj) -{ - return (ssp_readable(obj) ? 1 : 0); -}; - -int spi_slave_read(spi_t *obj) -{ - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_readable(obj)); - //return (int)spi->DR; - if (obj->bits == SPI_DATASIZE_8BIT) { - // Force 8-bit access to the data register - uint8_t *p_spi_dr = 0; - p_spi_dr = (uint8_t *) & (spi->DR); - return (int)(*p_spi_dr); - } else { - return (int)spi->DR; - } -} - -void spi_slave_write(spi_t *obj, int value) -{ - SPI_TypeDef *spi = (SPI_TypeDef *)(obj->spi); - while (!ssp_writeable(obj)); - //spi->DR = (uint16_t)value; - if (obj->bits == SPI_DATASIZE_8BIT) { - // Force 8-bit access to the data register - uint8_t *p_spi_dr = 0; - p_spi_dr = (uint8_t *) & (spi->DR); - *p_spi_dr = (uint8_t)value; - } else { // SPI_DATASIZE_16BIT - spi->DR = (uint16_t)value; + case SPI_3: + /* SPI_2, SPI_3. Source CLK is PCKL1 */ + spi_hz = HAL_RCC_GetPCLK1Freq(); + break; + default: + error("CLK: SPI instance not set"); + break; } -} - -int spi_busy(spi_t *obj) -{ - return ssp_busy(obj); + return spi_hz; } #endif diff --git a/targets/TARGET_STM/stm_spi_api.c b/targets/TARGET_STM/stm_spi_api.c new file mode 100644 index 00000000000..b8b0f79cbac --- /dev/null +++ b/targets/TARGET_STM/stm_spi_api.c @@ -0,0 +1,613 @@ +/* mbed Microcontroller Library + ******************************************************************************* + * Copyright (c) 2015, STMicroelectronics + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + ******************************************************************************* + */ +#include "mbed_assert.h" +#include "mbed_error.h" +#include "spi_api.h" + +#if DEVICE_SPI +#include +#include +#include +#include "cmsis.h" +#include "pinmap.h" +#include "PeripheralPins.h" + +#if DEVICE_SPI_ASYNCH + #define SPI_INST(obj) ((SPI_TypeDef *)(obj->spi.spi)) +#else + #define SPI_INST(obj) ((SPI_TypeDef *)(obj->spi)) +#endif + +#if DEVICE_SPI_ASYNCH + #define SPI_S(obj) (( struct spi_s *)(&(obj->spi))) +#else + #define SPI_S(obj) (( struct spi_s *)(obj)) +#endif + +#ifndef DEBUG_STDIO +# define DEBUG_STDIO 0 +#endif + +#if DEBUG_STDIO +# include +# define DEBUG_PRINTF(...) do { printf(__VA_ARGS__); } while(0) +#else +# define DEBUG_PRINTF(...) {} +#endif + +void init_spi(spi_t *obj) +{ + struct spi_s *spiobj = SPI_S(obj); + SPI_HandleTypeDef *handle = &(spiobj->handle); + + __HAL_SPI_DISABLE(handle); + + DEBUG_PRINTF("init_spi: instance=0x%8X\r\n", (int)handle->Instance); + if (HAL_SPI_Init(handle) != HAL_OK) { + error("Cannot initialize SPI"); + } + + __HAL_SPI_ENABLE(handle); +} + +void spi_init(spi_t *obj, PinName mosi, PinName miso, PinName sclk, PinName ssel) +{ + struct spi_s *spiobj = SPI_S(obj); + SPI_HandleTypeDef *handle = &(spiobj->handle); + + // Determine the SPI to use + SPIName spi_mosi = (SPIName)pinmap_peripheral(mosi, PinMap_SPI_MOSI); + SPIName spi_miso = (SPIName)pinmap_peripheral(miso, PinMap_SPI_MISO); + SPIName spi_sclk = (SPIName)pinmap_peripheral(sclk, PinMap_SPI_SCLK); + SPIName spi_ssel = (SPIName)pinmap_peripheral(ssel, PinMap_SPI_SSEL); + + SPIName spi_data = (SPIName)pinmap_merge(spi_mosi, spi_miso); + SPIName spi_cntl = (SPIName)pinmap_merge(spi_sclk, spi_ssel); + + spiobj->spi = (SPIName)pinmap_merge(spi_data, spi_cntl); + MBED_ASSERT(spiobj->spi != (SPIName)NC); + +#if defined SPI1_BASE + // Enable SPI clock + if (spiobj->spi == SPI_1) { + __HAL_RCC_SPI1_CLK_ENABLE(); + spiobj->spiIRQ = SPI1_IRQn; + } +#endif + +#if defined SPI2_BASE + if (spiobj->spi == SPI_2) { + __HAL_RCC_SPI2_CLK_ENABLE(); + spiobj->spiIRQ = SPI2_IRQn; + } +#endif + +#if defined SPI3_BASE + if (spiobj->spi == SPI_3) { + __HAL_RCC_SPI3_CLK_ENABLE(); + spiobj->spiIRQ = SPI3_IRQn; + } +#endif + +#if defined SPI4_BASE + if (spiobj->spi == SPI_4) { + __HAL_RCC_SPI4_CLK_ENABLE(); + spiobj->spiIRQ = SPI4_IRQn; + } +#endif + +#if defined SPI5_BASE + if (spiobj->spi == SPI_5) { + __HAL_RCC_SPI5_CLK_ENABLE(); + spiobj->spiIRQ = SPI5_IRQn; + } +#endif + +#if defined SPI6_BASE + if (spiobj->spi == SPI_6) { + __HAL_RCC_SPI6_CLK_ENABLE(); + spiobj->spiIRQ = SPI6_IRQn; + } +#endif + + // Configure the SPI pins + pinmap_pinout(mosi, PinMap_SPI_MOSI); + pinmap_pinout(miso, PinMap_SPI_MISO); + pinmap_pinout(sclk, PinMap_SPI_SCLK); + spiobj->pin_miso = miso; + spiobj->pin_mosi = mosi; + spiobj->pin_sclk = sclk; + spiobj->pin_ssel = ssel; + if (ssel != NC) { + pinmap_pinout(ssel, PinMap_SPI_SSEL); + } else { + handle->Init.NSS = SPI_NSS_SOFT; + } + + /* Fill default value */ + handle->Instance = SPI_INST(obj); + handle->Init.Mode = SPI_MODE_MASTER; + handle->Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_256; + handle->Init.Direction = SPI_DIRECTION_2LINES; + handle->Init.CLKPhase = SPI_PHASE_1EDGE; + handle->Init.CLKPolarity = SPI_POLARITY_LOW; + handle->Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED; + handle->Init.CRCPolynomial = 7; + handle->Init.DataSize = SPI_DATASIZE_8BIT; + handle->Init.FirstBit = SPI_FIRSTBIT_MSB; + handle->Init.TIMode = SPI_TIMODE_DISABLED; + + init_spi(obj); +} + +void spi_free(spi_t *obj) +{ + struct spi_s *spiobj = SPI_S(obj); + SPI_HandleTypeDef *handle = &(spiobj->handle); + + DEBUG_PRINTF("spi_free\r\n"); + + __HAL_SPI_DISABLE(handle); + HAL_SPI_DeInit(handle); + +#if defined SPI1_BASE + // Reset SPI and disable clock + if (spiobj->spi == SPI_1) { + __HAL_RCC_SPI1_FORCE_RESET(); + __HAL_RCC_SPI1_RELEASE_RESET(); + __HAL_RCC_SPI1_CLK_DISABLE(); + } +#endif +#if defined SPI2_BASE + if (spiobj->spi == SPI_2) { + __HAL_RCC_SPI2_FORCE_RESET(); + __HAL_RCC_SPI2_RELEASE_RESET(); + __HAL_RCC_SPI2_CLK_DISABLE(); + } +#endif + +#if defined SPI3_BASE + if (spiobj->spi == SPI_3) { + __HAL_RCC_SPI3_FORCE_RESET(); + __HAL_RCC_SPI3_RELEASE_RESET(); + __HAL_RCC_SPI3_CLK_DISABLE(); + } +#endif + +#if defined SPI4_BASE + if (spiobj->spi == SPI_4) { + __HAL_RCC_SPI4_FORCE_RESET(); + __HAL_RCC_SPI4_RELEASE_RESET(); + __HAL_RCC_SPI4_CLK_DISABLE(); + } +#endif + +#if defined SPI5_BASE + if (spiobj->spi == SPI_5) { + __HAL_RCC_SPI5_FORCE_RESET(); + __HAL_RCC_SPI5_RELEASE_RESET(); + __HAL_RCC_SPI5_CLK_DISABLE(); + } +#endif + +#if defined SPI6_BASE + if (spiobj->spi == SPI_6) { + __HAL_RCC_SPI6_FORCE_RESET(); + __HAL_RCC_SPI6_RELEASE_RESET(); + __HAL_RCC_SPI6_CLK_DISABLE(); + } +#endif + + // Configure GPIOs + pin_function(spiobj->pin_miso, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); + pin_function(spiobj->pin_mosi, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); + pin_function(spiobj->pin_sclk, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); + if (handle->Init.NSS != SPI_NSS_SOFT) { + pin_function(spiobj->pin_ssel, STM_PIN_DATA(STM_MODE_INPUT, GPIO_NOPULL, 0)); + } +} + +void spi_format(spi_t *obj, int bits, int mode, int slave) +{ + struct spi_s *spiobj = SPI_S(obj); + SPI_HandleTypeDef *handle = &(spiobj->handle); + + DEBUG_PRINTF("spi_format, bits:%d, mode:%d, slave?:%d\r\n", bits, mode, slave); + + // Save new values + handle->Init.DataSize = (bits == 16) ? SPI_DATASIZE_16BIT : SPI_DATASIZE_8BIT; + + switch (mode) { + case 0: + handle->Init.CLKPolarity = SPI_POLARITY_LOW; + handle->Init.CLKPhase = SPI_PHASE_1EDGE; + break; + case 1: + handle->Init.CLKPolarity = SPI_POLARITY_LOW; + handle->Init.CLKPhase = SPI_PHASE_2EDGE; + break; + case 2: + handle->Init.CLKPolarity = SPI_POLARITY_HIGH; + handle->Init.CLKPhase = SPI_PHASE_1EDGE; + break; + default: + handle->Init.CLKPolarity = SPI_POLARITY_HIGH; + handle->Init.CLKPhase = SPI_PHASE_2EDGE; + break; + } + + if (handle->Init.NSS != SPI_NSS_SOFT) { + handle->Init.NSS = (slave) ? SPI_NSS_HARD_INPUT : SPI_NSS_HARD_OUTPUT; + } + + handle->Init.Mode = (slave) ? SPI_MODE_SLAVE : SPI_MODE_MASTER; + + init_spi(obj); +} + +/* + * Only the IP clock input is family dependant so it computed + * separately in spi_get_clock_freq + */ +extern int spi_get_clock_freq(spi_t *obj); + +static const uint16_t baudrate_prescaler_table[] = {SPI_BAUDRATEPRESCALER_2, + SPI_BAUDRATEPRESCALER_4, + SPI_BAUDRATEPRESCALER_8, + SPI_BAUDRATEPRESCALER_16, + SPI_BAUDRATEPRESCALER_32, + SPI_BAUDRATEPRESCALER_64, + SPI_BAUDRATEPRESCALER_128, + SPI_BAUDRATEPRESCALER_256}; + +void spi_frequency(spi_t *obj, int hz) { + struct spi_s *spiobj = SPI_S(obj); + int spi_hz = 0; + uint8_t prescaler_rank = 0; + SPI_HandleTypeDef *handle = &(spiobj->handle); + + /* Get the clock of the peripheral */ + spi_hz = spi_get_clock_freq(obj); + + /* Define pre-scaler in order to get highest available frequency below requested frequency */ + while ((spi_hz > hz) && (prescaler_rank < sizeof(baudrate_prescaler_table)/sizeof(baudrate_prescaler_table[0]))){ + spi_hz = spi_hz / 2; + prescaler_rank++; + } + + if (prescaler_rank <= sizeof(baudrate_prescaler_table)/sizeof(baudrate_prescaler_table[0])) { + handle->Init.BaudRatePrescaler = baudrate_prescaler_table[prescaler_rank-1]; + } else { + error("Couldn't setup requested SPI frequency"); + } + + init_spi(obj); +} + +static inline int ssp_readable(spi_t *obj) +{ + int status; + struct spi_s *spiobj = SPI_S(obj); + SPI_HandleTypeDef *handle = &(spiobj->handle); + + // Check if data is received + status = ((__HAL_SPI_GET_FLAG(handle, SPI_FLAG_RXNE) != RESET) ? 1 : 0); + return status; +} + +static inline int ssp_writeable(spi_t *obj) +{ + int status; + struct spi_s *spiobj = SPI_S(obj); + SPI_HandleTypeDef *handle = &(spiobj->handle); + + // Check if data is transmitted + status = ((__HAL_SPI_GET_FLAG(handle, SPI_FLAG_TXE) != RESET) ? 1 : 0); + return status; +} + +static inline void ssp_write(spi_t *obj, int value) +{ + SPI_TypeDef *spi = SPI_INST(obj); + struct spi_s *spiobj = SPI_S(obj); + SPI_HandleTypeDef *handle = &(spiobj->handle); + + while (!ssp_writeable(obj)); + + //spi->DR = (uint16_t)value; + if (handle->Init.DataSize == SPI_DATASIZE_8BIT) { + // Force 8-bit access to the data register + uint8_t *p_spi_dr = 0; + p_spi_dr = (uint8_t *) & (spi->DR); + *p_spi_dr = (uint8_t)value; + } else { // SPI_DATASIZE_16BIT + spi->DR = (uint16_t)value; + } +} + +static inline int ssp_read(spi_t *obj) +{ + SPI_TypeDef *spi = SPI_INST(obj); + struct spi_s *spiobj = SPI_S(obj); + SPI_HandleTypeDef *handle = &(spiobj->handle); + while (!ssp_readable(obj)); + //return (int)spi->DR; + if (handle->Init.DataSize == SPI_DATASIZE_8BIT) { + // Force 8-bit access to the data register + uint8_t *p_spi_dr = 0; + p_spi_dr = (uint8_t *) & (spi->DR); + return (int)(*p_spi_dr); + } else { + return (int)spi->DR; + } +} + +static inline int ssp_busy(spi_t *obj) +{ + int status; + struct spi_s *spiobj = SPI_S(obj); + SPI_HandleTypeDef *handle = &(spiobj->handle); + status = ((__HAL_SPI_GET_FLAG(handle, SPI_FLAG_BSY) != RESET) ? 1 : 0); + return status; +} + +int spi_master_write(spi_t *obj, int value) +{ + ssp_write(obj, value); + return ssp_read(obj); +} + +int spi_slave_receive(spi_t *obj) +{ + return ((ssp_readable(obj) && !ssp_busy(obj)) ? 1 : 0); +}; + +int spi_slave_read(spi_t *obj) +{ + SPI_TypeDef *spi = SPI_INST(obj); + struct spi_s *spiobj = SPI_S(obj); + SPI_HandleTypeDef *handle = &(spiobj->handle); + while (!ssp_readable(obj)); + //return (int)spi->DR; + if (handle->Init.DataSize == SPI_DATASIZE_8BIT) { + // Force 8-bit access to the data register + uint8_t *p_spi_dr = 0; + p_spi_dr = (uint8_t *) & (spi->DR); + return (int)(*p_spi_dr); + } else { + return (int)spi->DR; + } +} + +void spi_slave_write(spi_t *obj, int value) +{ + SPI_TypeDef *spi = SPI_INST(obj); + struct spi_s *spiobj = SPI_S(obj); + SPI_HandleTypeDef *handle = &(spiobj->handle); + while (!ssp_writeable(obj)); + //spi->DR = (uint16_t)value; + if (handle->Init.DataSize == SPI_DATASIZE_8BIT) { + // Force 8-bit access to the data register + uint8_t *p_spi_dr = 0; + p_spi_dr = (uint8_t *) & (spi->DR); + *p_spi_dr = (uint8_t)value; + } else { // SPI_DATASIZE_16BIT + spi->DR = (uint16_t)value; + } +} + +int spi_busy(spi_t *obj) +{ + return ssp_busy(obj); +} + +#ifdef DEVICE_SPI_ASYNCH +typedef enum { + SPI_TRANSFER_TYPE_NONE = 0, + SPI_TRANSFER_TYPE_TX = 1, + SPI_TRANSFER_TYPE_RX = 2, + SPI_TRANSFER_TYPE_TXRX = 3, +} transfer_type_t; + + +/// @returns the number of bytes transferred, or `0` if nothing transferred +static int spi_master_start_asynch_transfer(spi_t *obj, transfer_type_t transfer_type, const void *tx, void *rx, size_t length) +{ + struct spi_s *spiobj = SPI_S(obj); + SPI_HandleTypeDef *handle = &(spiobj->handle); + bool is16bit = (handle->Init.DataSize == SPI_DATASIZE_16BIT); + // the HAL expects number of transfers instead of number of bytes + // so for 16 bit transfer width the count needs to be halved + size_t words; + + DEBUG_PRINTF("SPI inst=0x%8X Start: %u, %u\r\n", (int)handle->Instance, transfer_type, length); + + obj->spi.transfer_type = transfer_type; + + if (is16bit) words = length / 2; + else words = length; + + // enable the interrupt + IRQn_Type irq_n = spiobj->spiIRQ; + NVIC_ClearPendingIRQ(irq_n); + NVIC_DisableIRQ(irq_n); + NVIC_SetPriority(irq_n, 1); + NVIC_EnableIRQ(irq_n); + + // enable the right hal transfer + //static uint16_t sink; + int rc = 0; + switch(transfer_type) { + case SPI_TRANSFER_TYPE_TXRX: + rc = HAL_SPI_TransmitReceive_IT(handle, (uint8_t*)tx, (uint8_t*)rx, words); + break; + case SPI_TRANSFER_TYPE_TX: + rc = HAL_SPI_Transmit_IT(handle, (uint8_t*)tx, words); + break; + case SPI_TRANSFER_TYPE_RX: + // the receive function also "transmits" the receive buffer so in order + // to guarantee that 0xff is on the line, we explicitly memset it here + memset(rx, SPI_FILL_WORD, length); + rc = HAL_SPI_Receive_IT(handle, (uint8_t*)rx, words); + break; + default: + length = 0; + } + + if (rc) { + DEBUG_PRINTF("SPI: RC=%u\n", rc); + length = 0; + } + + return length; +} + +// asynchronous API +void spi_master_transfer(spi_t *obj, const void *tx, size_t tx_length, void *rx, size_t rx_length, uint8_t bit_width, uint32_t handler, uint32_t event, DMAUsage hint) +{ + struct spi_s *spiobj = SPI_S(obj); + SPI_HandleTypeDef *handle = &(spiobj->handle); + + // TODO: DMA usage is currently ignored + (void) hint; + + // check which use-case we have + bool use_tx = (tx != NULL && tx_length > 0); + bool use_rx = (rx != NULL && rx_length > 0); + bool is16bit = (handle->Init.DataSize == SPI_DATASIZE_16BIT); + + // don't do anything, if the buffers aren't valid + if (!use_tx && !use_rx) + return; + + // copy the buffers to the SPI object + obj->tx_buff.buffer = (void *) tx; + obj->tx_buff.length = tx_length; + obj->tx_buff.pos = 0; + obj->tx_buff.width = is16bit ? 16 : 8; + + obj->rx_buff.buffer = rx; + obj->rx_buff.length = rx_length; + obj->rx_buff.pos = 0; + obj->rx_buff.width = obj->tx_buff.width; + + obj->spi.event = event; + + DEBUG_PRINTF("SPI: Transfer: %u, %u\n", tx_length, rx_length); + + // register the thunking handler + IRQn_Type irq_n = spiobj->spiIRQ; + NVIC_SetVector(irq_n, (uint32_t)handler); + + // enable the right hal transfer + if (use_tx && use_rx) { + // we cannot manage different rx / tx sizes, let's use smaller one + size_t size = (tx_length < rx_length)? tx_length : rx_length; + if(tx_length != rx_length) { + DEBUG_PRINTF("SPI: Full duplex transfer only 1 size: %d\n", size); + obj->tx_buff.length = size; + obj->rx_buff.length = size; + } + spi_master_start_asynch_transfer(obj, SPI_TRANSFER_TYPE_TXRX, tx, rx, size); + } else if (use_tx) { + spi_master_start_asynch_transfer(obj, SPI_TRANSFER_TYPE_TX, tx, NULL, tx_length); + } else if (use_rx) { + spi_master_start_asynch_transfer(obj, SPI_TRANSFER_TYPE_RX, NULL, rx, rx_length); + } +} + +uint32_t spi_irq_handler_asynch(spi_t *obj) +{ + // use the right instance + struct spi_s *spiobj = SPI_S(obj); + SPI_HandleTypeDef *handle = &spiobj->handle; + int event = 0; + + // call the CubeF4 handler, this will update the handle + HAL_SPI_IRQHandler(handle); + + if (HAL_SPI_GetState(handle) == HAL_SPI_STATE_READY) { + // When HAL SPI is back to READY state, check if there was an error + int error = HAL_SPI_GetError(handle); + if(error != HAL_SPI_ERROR_NONE) { + // something went wrong and the transfer has definitely completed + event = SPI_EVENT_ERROR | SPI_EVENT_INTERNAL_TRANSFER_COMPLETE; + + if (error & HAL_SPI_ERROR_OVR) { + // buffer overrun + event |= SPI_EVENT_RX_OVERFLOW; + } + } else { + // else we're done + event = SPI_EVENT_COMPLETE | SPI_EVENT_INTERNAL_TRANSFER_COMPLETE; + } + } + + if (event) DEBUG_PRINTF("SPI: Event: 0x%x\n", event); + + return (event & (obj->spi.event | SPI_EVENT_INTERNAL_TRANSFER_COMPLETE)); +} + +uint8_t spi_active(spi_t *obj) +{ + struct spi_s *spiobj = SPI_S(obj); + SPI_HandleTypeDef *handle = &(spiobj->handle); + HAL_SPI_StateTypeDef state = HAL_SPI_GetState(handle); + + switch(state) { + case HAL_SPI_STATE_RESET: + case HAL_SPI_STATE_READY: + case HAL_SPI_STATE_ERROR: + return 0; + default: + return 1; + } +} + +void spi_abort_asynch(spi_t *obj) +{ + struct spi_s *spiobj = SPI_S(obj); + SPI_HandleTypeDef *handle = &(spiobj->handle); + + // disable interrupt + IRQn_Type irq_n = spiobj->spiIRQ; + NVIC_ClearPendingIRQ(irq_n); + NVIC_DisableIRQ(irq_n); + + // clean-up + __HAL_SPI_DISABLE(handle); + HAL_SPI_DeInit(handle); + HAL_SPI_Init(handle); + __HAL_SPI_ENABLE(handle); +} + +#endif //DEVICE_SPI_ASYNCH + +#endif From 0dcd5083f346c02982b94fc4ca362c2ef943659f Mon Sep 17 00:00:00 2001 From: Laurent MEUNIER Date: Thu, 29 Sep 2016 09:18:37 +0200 Subject: [PATCH 70/89] spi_master_write - rely on HAL ASYNCH SPI transfer support has been added based on STM HAL services. To have both ASYNCH and SYNCH work together, we're also moving the write API to STM HAL instead of direct registers access. --- targets/TARGET_STM/stm_spi_api.c | 54 +++++++++----------------------- 1 file changed, 15 insertions(+), 39 deletions(-) diff --git a/targets/TARGET_STM/stm_spi_api.c b/targets/TARGET_STM/stm_spi_api.c index b8b0f79cbac..6153a0aef2c 100644 --- a/targets/TARGET_STM/stm_spi_api.c +++ b/targets/TARGET_STM/stm_spi_api.c @@ -333,42 +333,6 @@ static inline int ssp_writeable(spi_t *obj) return status; } -static inline void ssp_write(spi_t *obj, int value) -{ - SPI_TypeDef *spi = SPI_INST(obj); - struct spi_s *spiobj = SPI_S(obj); - SPI_HandleTypeDef *handle = &(spiobj->handle); - - while (!ssp_writeable(obj)); - - //spi->DR = (uint16_t)value; - if (handle->Init.DataSize == SPI_DATASIZE_8BIT) { - // Force 8-bit access to the data register - uint8_t *p_spi_dr = 0; - p_spi_dr = (uint8_t *) & (spi->DR); - *p_spi_dr = (uint8_t)value; - } else { // SPI_DATASIZE_16BIT - spi->DR = (uint16_t)value; - } -} - -static inline int ssp_read(spi_t *obj) -{ - SPI_TypeDef *spi = SPI_INST(obj); - struct spi_s *spiobj = SPI_S(obj); - SPI_HandleTypeDef *handle = &(spiobj->handle); - while (!ssp_readable(obj)); - //return (int)spi->DR; - if (handle->Init.DataSize == SPI_DATASIZE_8BIT) { - // Force 8-bit access to the data register - uint8_t *p_spi_dr = 0; - p_spi_dr = (uint8_t *) & (spi->DR); - return (int)(*p_spi_dr); - } else { - return (int)spi->DR; - } -} - static inline int ssp_busy(spi_t *obj) { int status; @@ -380,8 +344,21 @@ static inline int ssp_busy(spi_t *obj) int spi_master_write(spi_t *obj, int value) { - ssp_write(obj, value); - return ssp_read(obj); + uint16_t size, Rx, ret; + struct spi_s *spiobj = SPI_S(obj); + SPI_HandleTypeDef *handle = &(spiobj->handle); + + size = (handle->Init.DataSize == SPI_DATASIZE_16BIT) ? 2 : 1; + + /* Use 10ms timeout */ + ret = HAL_SPI_TransmitReceive(handle,(uint8_t*)&value,(uint8_t*)&Rx,size,10); + + if(ret == HAL_OK) { + return Rx; + } else { + DEBUG_PRINTF("SPI inst=0x%8X ERROR in write\r\n", (int)handle->Instance); + return -1; + } } int spi_slave_receive(spi_t *obj) @@ -395,7 +372,6 @@ int spi_slave_read(spi_t *obj) struct spi_s *spiobj = SPI_S(obj); SPI_HandleTypeDef *handle = &(spiobj->handle); while (!ssp_readable(obj)); - //return (int)spi->DR; if (handle->Init.DataSize == SPI_DATASIZE_8BIT) { // Force 8-bit access to the data register uint8_t *p_spi_dr = 0; From 5376654581525211e1ce634ef7d90ceb188c89a0 Mon Sep 17 00:00:00 2001 From: Laurent MEUNIER Date: Tue, 30 Aug 2016 15:27:24 +0200 Subject: [PATCH 71/89] Enable SPI_ASYNCH on STM32 boards Now that SPI_ASYNCH is supported on all STM32 based boards, let's activate the feature. Using a default SPI QUEUE of size 2 - this can be later modified if this prives to be to low. (or too high) --- targets/targets.json | 84 +++++++++++++++++++++++++++----------------- 1 file changed, 52 insertions(+), 32 deletions(-) diff --git a/targets/targets.json b/targets/targets.json index 4cf2d398999..11143b43eca 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -595,7 +595,8 @@ "supported_toolchains": ["ARM", "uARM", "IAR", "GCC_ARM"], "inherits": ["Target"], "detect_code": ["0725"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], "default_lib": "small", "release_versions": ["2"], "device_name": "STM32F030R8" @@ -605,11 +606,11 @@ "core": "Cortex-M0", "default_toolchain": "uARM", "extra_labels": ["STM", "STM32F0", "STM32F031K6"], - "macros": ["RTC_LSI=1"], "supported_toolchains": ["ARM", "uARM", "IAR", "GCC_ARM"], "inherits": ["Target"], "detect_code": ["0791"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "macros": ["RTC_LSI=1", "TRANSACTION_QUEUE_SIZE_SPI=2"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], "default_lib": "small", "release_versions": ["2"], "device_name": "STM32F031K6" @@ -619,11 +620,11 @@ "core": "Cortex-M0", "default_toolchain": "uARM", "extra_labels": ["STM", "STM32F0", "STM32F042K6"], - "macros": ["RTC_LSI=1"], "supported_toolchains": ["ARM", "uARM", "IAR", "GCC_ARM"], "inherits": ["Target"], "detect_code": ["0785"], - "device_has": ["ANALOGIN", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "macros": ["RTC_LSI=1", "TRANSACTION_QUEUE_SIZE_SPI=2"], + "device_has": ["ANALOGIN", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], "default_lib": "small", "release_versions": ["2"], "device_name": "STM32F042K6" @@ -636,7 +637,8 @@ "supported_toolchains": ["ARM", "uARM", "IAR", "GCC_ARM"], "inherits": ["Target"], "detect_code": ["0755"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], "release_versions": ["2", "5"], "device_name": "STM32F070RB" }, @@ -648,7 +650,8 @@ "supported_toolchains": ["ARM", "uARM", "IAR", "GCC_ARM"], "inherits": ["Target"], "detect_code": ["0730"], - "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], "release_versions": ["2", "5"], "device_name": "STM32F072RB" }, @@ -660,7 +663,8 @@ "supported_toolchains": ["ARM", "uARM", "IAR", "GCC_ARM"], "inherits": ["Target"], "detect_code": ["0750"], - "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], "release_versions": ["2", "5"], "device_name": "STM32F091RC" }, @@ -672,7 +676,8 @@ "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "IAR"], "inherits": ["Target"], "detect_code": ["0700"], - "device_has": ["ANALOGIN", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"], + "device_has": ["ANALOGIN", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], "release_versions": ["2", "5"], "device_name": "STM32F103RB" }, @@ -684,7 +689,8 @@ "supported_toolchains": ["ARM", "uARM", "IAR", "GCC_ARM"], "inherits": ["Target"], "detect_code": ["0835"], - "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], "features": ["LWIP"], "release_versions": ["2", "5"], "device_name" : "STM32F207ZG" @@ -697,7 +703,8 @@ "supported_toolchains": ["ARM", "uARM", "IAR", "GCC_ARM"], "inherits": ["Target"], "detect_code": ["0705"], - "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], "default_lib": "small", "release_versions": ["2"], "device_name": "STM32F302R8" @@ -707,12 +714,12 @@ "core": "Cortex-M4F", "default_toolchain": "ARM", "extra_labels": ["STM", "STM32F3", "STM32F303K8"], - "macros": ["RTC_LSI=1"], + "macros": ["RTC_LSI=1", "TRANSACTION_QUEUE_SIZE_SPI=2"], "supported_toolchains": ["ARM", "uARM", "IAR", "GCC_ARM"], "inherits": ["Target"], "detect_code": ["0775"], "default_lib": "small", - "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], "release_versions": ["2"], "device_name": "STM32F303K8" }, @@ -724,7 +731,8 @@ "supported_toolchains": ["ARM", "uARM", "IAR", "GCC_ARM"], "inherits": ["Target"], "detect_code": ["0745"], - "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], "release_versions": ["2", "5"], "device_name": "STM32F303RE" }, @@ -736,7 +744,8 @@ "supported_toolchains": ["ARM", "uARM", "IAR", "GCC_ARM"], "inherits": ["Target"], "detect_code": ["0747"], - "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], "release_versions": ["2", "5"], "device_name": "STM32F303RE" }, @@ -748,7 +757,8 @@ "supported_toolchains": ["ARM", "uARM", "IAR", "GCC_ARM"], "inherits": ["Target"], "detect_code": ["0735"], - "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], "default_lib": "small", "release_versions": ["2"], "device_name": "STM32F334R8" @@ -788,7 +798,7 @@ "inherits": ["Target"], "detect_code": ["0740"], "macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"], - "device_has": ["ANALOGIN", "ERROR_RED", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "ERROR_RED", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], "release_versions": ["2", "5"], "device_name": "STM32F411RE" }, @@ -866,9 +876,10 @@ "extra_labels": ["STM", "STM32F7", "STM32F746", "STM32F746ZG"], "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "IAR"], "default_toolchain": "ARM", + "macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"], "supported_form_factors": ["ARDUINO"], "detect_code": ["0816"], - "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "TRNG"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "TRNG"], "features": ["LWIP"], "release_versions": ["2", "5"], "device_name": "STM32F746ZG" @@ -880,8 +891,9 @@ "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "IAR"], "default_toolchain": "ARM", "supported_form_factors": ["ARDUINO"], + "macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"], "detect_code": ["0818"], - "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "TRNG"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "TRNG"], "features": ["LWIP"], "release_versions": ["2", "5"], "device_name" : "STM32F767ZI" @@ -957,7 +969,8 @@ "supported_toolchains": ["ARM", "uARM", "IAR", "GCC_ARM"], "inherits": ["Target"], "detect_code": ["0770"], - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "CAN", "STDIO_MESSAGES", "TRNG"], + "macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "CAN", "SPI_ASYNCH", "STDIO_MESSAGES", "TRNG"], "release_versions": ["2", "5"], "device_name" : "STM32L432KC" }, @@ -969,7 +982,8 @@ "supported_toolchains": ["ARM", "uARM", "IAR", "GCC_ARM"], "inherits": ["Target"], "detect_code": ["0765"], - "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "TRNG"], + "macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "TRNG"], "release_versions": ["2", "5"], "device_name": "stm32l476rg" }, @@ -994,7 +1008,8 @@ "extra_labels": ["STM", "STM32F4", "STM32F407", "STM32F407VG"], "macros": ["LSI_VALUE=32000"], "inherits": ["Target"], - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], "release_versions": ["2"], "device_name": "STM32F407VG" }, @@ -1004,7 +1019,8 @@ "default_toolchain": "ARM", "extra_labels": ["STM", "STM32F0", "STM32F051", "STM32F051R8"], "supported_toolchains": ["GCC_ARM"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], "device_name": "STM32F051R8" }, "DISCO_F100RB": { @@ -1013,7 +1029,8 @@ "default_toolchain": "ARM", "extra_labels": ["STM", "STM32F1", "STM32F100RB"], "supported_toolchains": ["GCC_ARM"], - "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"], + "device_has": ["ANALOGIN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], "device_name": "STM32F100RB" }, "DISCO_F303VC": { @@ -1021,9 +1038,9 @@ "core": "Cortex-M4F", "default_toolchain": "ARM", "extra_labels": ["STM", "STM32F3", "STM32F303", "STM32F303VC"], - "macros": ["RTC_LSI=1"], + "macros": ["RTC_LSI=1", "TRANSACTION_QUEUE_SIZE_SPI=2"], "supported_toolchains": ["GCC_ARM"], - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], "device_name": "STM32F303VC" }, "DISCO_F334C8": { @@ -1031,10 +1048,10 @@ "core": "Cortex-M4F", "default_toolchain": "ARM", "extra_labels": ["STM", "STM32F3", "STM32F334C8"], - "macros": ["RTC_LSI=1"], + "macros": ["RTC_LSI=1", "TRANSACTION_QUEUE_SIZE_SPI=2"], "supported_toolchains": ["ARM", "uARM", "IAR", "GCC_ARM"], "detect_code": ["0810"], - "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "device_has": ["ANALOGIN", "ANALOGOUT", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], "default_lib": "small", "release_versions": ["2"], "device_name": "STM32F334C8" @@ -1068,7 +1085,7 @@ "inherits": ["Target"], "macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"], "detect_code": ["0788"], - "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "ERROR_RED", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "TRNG"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "ERROR_RED", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "TRNG"], "release_versions": ["2", "5"], "device_name": "STM32F469NI" }, @@ -1091,7 +1108,8 @@ "default_toolchain": "ARM", "supported_form_factors": ["ARDUINO"], "detect_code": ["0815"], - "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "TRNG"], + "macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "TRNG"], "features": ["LWIP"], "release_versions": ["2", "5"], "device_name": "STM32F746NG" @@ -1103,7 +1121,8 @@ "supported_toolchains": ["ARM", "GCC_ARM", "IAR"], "default_toolchain": "ARM", "detect_code": ["0817"], - "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES"], "features": ["LWIP"], "release_versions": ["2"], "device_name": "STM32F769NI" @@ -1115,7 +1134,8 @@ "extra_labels": ["STM", "STM32L4", "STM32L476VG"], "supported_toolchains": ["ARM", "uARM", "IAR", "GCC_ARM"], "detect_code": ["0820"], - "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "TRNG"], + "macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "TRNG"], "release_versions": ["2", "5"], "device_name": "stm32l476vg" }, From 6b3d9b24279f8e20bfdc77cee1343f42679e95af Mon Sep 17 00:00:00 2001 From: Laurent MEUNIER Date: Tue, 30 Aug 2016 15:27:24 +0200 Subject: [PATCH 72/89] SPI Peripheral pin - allow SPI3 to be used Let's swap default PA_4 pin mapping to SPI_3 otherwise SPI3 cannot be used --- .../TARGET_STM32F4/TARGET_ELMO_F411RE/PeripheralPins.c | 4 ++-- .../TARGET_STM32F4/TARGET_NUCLEO_F411RE/PeripheralPins.c | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_ELMO_F411RE/PeripheralPins.c b/targets/TARGET_STM/TARGET_STM32F4/TARGET_ELMO_F411RE/PeripheralPins.c index 056931c0399..f8f4654c527 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_ELMO_F411RE/PeripheralPins.c +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_ELMO_F411RE/PeripheralPins.c @@ -196,8 +196,8 @@ const PinMap PinMap_SPI_SCLK[] = { }; const PinMap PinMap_SPI_SSEL[] = { - {PA_4, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, -// {PA_4, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, + // {PA_4, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, + {PA_4, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, {PA_15, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, // {PA_15, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, {PB_1, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI5)}, diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F411RE/PeripheralPins.c b/targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F411RE/PeripheralPins.c index dd952ad24f0..0a4fd7d9cd8 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F411RE/PeripheralPins.c +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F411RE/PeripheralPins.c @@ -208,8 +208,8 @@ const PinMap PinMap_SPI_SCLK[] = { }; const PinMap PinMap_SPI_SSEL[] = { - {PA_4, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, -// {PA_4, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, +// {PA_4, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, + {PA_4, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, {PA_15, SPI_1, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF5_SPI1)}, // {PA_15, SPI_3, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_NOPULL, GPIO_AF6_SPI3)}, {PB_1, SPI_5, STM_PIN_DATA(STM_MODE_AF_PP, GPIO_PULLUP, GPIO_AF6_SPI5)}, From 37f84ca840ce18260aa94cbedd4755cceac50115 Mon Sep 17 00:00:00 2001 From: Laurent MEUNIER Date: Tue, 11 Oct 2016 18:55:40 +0200 Subject: [PATCH 73/89] Clean-up style issues Fix indentation issues, remove useless comments, correct if/else format --- targets/TARGET_STM/stm_spi_api.c | 37 ++++++++++++++++---------------- 1 file changed, 19 insertions(+), 18 deletions(-) diff --git a/targets/TARGET_STM/stm_spi_api.c b/targets/TARGET_STM/stm_spi_api.c index 6153a0aef2c..4068a4cca35 100644 --- a/targets/TARGET_STM/stm_spi_api.c +++ b/targets/TARGET_STM/stm_spi_api.c @@ -289,24 +289,24 @@ static const uint16_t baudrate_prescaler_table[] = {SPI_BAUDRATEPRESCALER_2, void spi_frequency(spi_t *obj, int hz) { struct spi_s *spiobj = SPI_S(obj); - int spi_hz = 0; - uint8_t prescaler_rank = 0; + int spi_hz = 0; + uint8_t prescaler_rank = 0; SPI_HandleTypeDef *handle = &(spiobj->handle); - /* Get the clock of the peripheral */ - spi_hz = spi_get_clock_freq(obj); + /* Get the clock of the peripheral */ + spi_hz = spi_get_clock_freq(obj); - /* Define pre-scaler in order to get highest available frequency below requested frequency */ - while ((spi_hz > hz) && (prescaler_rank < sizeof(baudrate_prescaler_table)/sizeof(baudrate_prescaler_table[0]))){ - spi_hz = spi_hz / 2; - prescaler_rank++; - } + /* Define pre-scaler in order to get highest available frequency below requested frequency */ + while ((spi_hz > hz) && (prescaler_rank < sizeof(baudrate_prescaler_table)/sizeof(baudrate_prescaler_table[0]))){ + spi_hz = spi_hz / 2; + prescaler_rank++; + } - if (prescaler_rank <= sizeof(baudrate_prescaler_table)/sizeof(baudrate_prescaler_table[0])) { - handle->Init.BaudRatePrescaler = baudrate_prescaler_table[prescaler_rank-1]; - } else { - error("Couldn't setup requested SPI frequency"); - } + if (prescaler_rank <= sizeof(baudrate_prescaler_table)/sizeof(baudrate_prescaler_table[0])) { + handle->Init.BaudRatePrescaler = baudrate_prescaler_table[prescaler_rank-1]; + } else { + error("Couldn't setup requested SPI frequency"); + } init_spi(obj); } @@ -388,7 +388,6 @@ void spi_slave_write(spi_t *obj, int value) struct spi_s *spiobj = SPI_S(obj); SPI_HandleTypeDef *handle = &(spiobj->handle); while (!ssp_writeable(obj)); - //spi->DR = (uint16_t)value; if (handle->Init.DataSize == SPI_DATASIZE_8BIT) { // Force 8-bit access to the data register uint8_t *p_spi_dr = 0; @@ -427,8 +426,11 @@ static int spi_master_start_asynch_transfer(spi_t *obj, transfer_type_t transfer obj->spi.transfer_type = transfer_type; - if (is16bit) words = length / 2; - else words = length; + if (is16bit) { + words = length / 2; + } else { + words = length; + } // enable the interrupt IRQn_Type irq_n = spiobj->spiIRQ; @@ -438,7 +440,6 @@ static int spi_master_start_asynch_transfer(spi_t *obj, transfer_type_t transfer NVIC_EnableIRQ(irq_n); // enable the right hal transfer - //static uint16_t sink; int rc = 0; switch(transfer_type) { case SPI_TRANSFER_TYPE_TXRX: From 1807983a73d96a59ba2861f60b4f8e786121d5b8 Mon Sep 17 00:00:00 2001 From: Laurent MEUNIER Date: Wed, 12 Oct 2016 09:10:35 +0200 Subject: [PATCH 74/89] Update objects definition STM32F303ZE was introduced in parallel to the changes which consist in having family wide definitions like device.h file and a common objects definition. This target is updated accordingly now to benefit of SPI definitions. --- .../TARGET_NUCLEO_F303ZE/device.h | 54 ------------------- .../TARGET_NUCLEO_F303ZE/objects.h | 22 +------- 2 files changed, 1 insertion(+), 75 deletions(-) delete mode 100644 targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F303ZE/device.h diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F303ZE/device.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F303ZE/device.h deleted file mode 100644 index bdad16c6f18..00000000000 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F303ZE/device.h +++ /dev/null @@ -1,54 +0,0 @@ -// The 'features' section in 'target.json' is now used to create the device's hardware preprocessor switches. -// Check the 'features' section of the target description in 'targets.json' for more details. -/* mbed Microcontroller Library - ******************************************************************************* - * Copyright (c) 2015, STMicroelectronics - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * 1. Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * 2. Redistributions in binary form must reproduce the above copyright notice, - * this list of conditions and the following disclaimer in the documentation - * and/or other materials provided with the distribution. - * 3. Neither the name of STMicroelectronics nor the names of its contributors - * may be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" - * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE - * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE - * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE - * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL - * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR - * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER - * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, - * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - ******************************************************************************* - */ -#ifndef MBED_DEVICE_H -#define MBED_DEVICE_H - - - - - - - - - - - -//======================================= - -#define DEVICE_ID_LENGTH 24 - - - - -#include "objects.h" - -#endif diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F303ZE/objects.h b/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F303ZE/objects.h index f410f62461f..61a56f7c047 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F303ZE/objects.h +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F303ZE/objects.h @@ -66,37 +66,17 @@ struct dac_s { uint32_t channel; }; -struct serial_s { - UARTName uart; - int index; // Used by irq - uint32_t baudrate; - uint32_t databits; - uint32_t stopbits; - uint32_t parity; - PinName pin_tx; - PinName pin_rx; -}; - struct i2c_s { I2CName i2c; uint32_t slave; }; -struct pwmout_s { - PWMName pwm; - PinName pin; - uint32_t prescaler; - uint32_t period; - uint32_t pulse; - uint32_t channel; - uint32_t inverted; -}; - struct can_s { CANName can; int index; }; +#include "common_objects.h" #include "gpio_object.h" #ifdef __cplusplus From ac0caaba9a6f2639c73c6a924ef275c96e4293c5 Mon Sep 17 00:00:00 2001 From: Bartek Szatkowski Date: Tue, 11 Oct 2016 09:40:09 -0500 Subject: [PATCH 75/89] DNS: Rework DNS query Don't ask multiple DNS servers in case of successful connection, even if the response is negative. Make sure the return value is correct. --- features/netsocket/nsapi_dns.cpp | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/features/netsocket/nsapi_dns.cpp b/features/netsocket/nsapi_dns.cpp index de498660210..efeb84f0338 100644 --- a/features/netsocket/nsapi_dns.cpp +++ b/features/netsocket/nsapi_dns.cpp @@ -217,7 +217,7 @@ static int nsapi_dns_query_multiple(NetworkStack *stack, const char *host, return NSAPI_ERROR_NO_MEMORY; } - int result = NSAPI_ERROR_OK; + int result = NSAPI_ERROR_DNS_FAILURE; // check against each dns server for (unsigned i = 0; i < DNS_SERVERS_SIZE; i++) { @@ -243,11 +243,12 @@ static int nsapi_dns_query_multiple(NetworkStack *stack, const char *host, } const uint8_t *response = packet; - if (!dns_scan_response(&response, addr, addr_count)) { - result = NSAPI_ERROR_DNS_FAILURE; - } else { - break; + if (dns_scan_response(&response, addr, addr_count) > 0) { + result = NSAPI_ERROR_OK; } + + /* The DNS response is final, no need to check other servers */ + break; } // clean up packet From fa4df0998c5270b4a3087d43ba01c56c905d839d Mon Sep 17 00:00:00 2001 From: Sarah Marsh Date: Tue, 11 Oct 2016 18:25:07 +0100 Subject: [PATCH 76/89] NRF52_DK support for IAR exporter --- tools/export/iar/iar_definitions.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/tools/export/iar/iar_definitions.json b/tools/export/iar/iar_definitions.json index 82169c160bb..641705cb9bd 100644 --- a/tools/export/iar/iar_definitions.json +++ b/tools/export/iar/iar_definitions.json @@ -146,5 +146,8 @@ }, "STM32F407VG": { "OGChipSelectEditMenu": "STM32F407VG\tST STM32F407VG" + }, + "nRF52832_xxAA":{ + "OGChipSelectEditMenu": "nRF52832-xxAA\tNordicSemi nRF52832-xxAA" } } From 0e292ed57b164ec9682900cde8b5a7d42fef483e Mon Sep 17 00:00:00 2001 From: Russ Butler Date: Tue, 11 Oct 2016 18:03:28 -0500 Subject: [PATCH 77/89] Properly set flags for default_lib = small Use newlib nano for targets which have the key "default_lib" set to "small". Also support the legacy key of "default_build". --- tools/toolchains/gcc.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/tools/toolchains/gcc.py b/tools/toolchains/gcc.py index 190f7f9f748..f21ce54624b 100644 --- a/tools/toolchains/gcc.py +++ b/tools/toolchains/gcc.py @@ -35,6 +35,17 @@ def __init__(self, target, notify=None, macros=None, extra_verbose=extra_verbose, build_profile=build_profile) + # Add flags for current size setting + default_lib = "std" + if hasattr(target, "default_lib"): + default_lib = target.default_lib + elif hasattr(target, "default_build"): # Legacy + default_lib = target.default_build + + if default_lib == "small": + self.flags["common"].append("-DMBED_RTOS_SINGLE_THREAD") + self.flags["ld"].append("--specs=nano.specs") + if target.core == "Cortex-M0+": cpu = "cortex-m0plus" elif target.core == "Cortex-M4F": From 3a33de65778261fa6eac0557434d7a70672fdc34 Mon Sep 17 00:00:00 2001 From: Martin Kojtal Date: Wed, 12 Oct 2016 14:24:21 +0100 Subject: [PATCH 78/89] lwip-interface: fix issue #2993 DEVICE_ are passed as command line -D, thus no inclusion is required. ``platform.h`` is C++ header file, should not be pulled in C files --- features/FEATURE_LWIP/lwip-interface/emac_lwip.c | 2 -- features/FEATURE_LWIP/lwip-interface/emac_stack_lwip.cpp | 2 -- features/netsocket/emac_stack_mem.h | 2 -- hal/hal/emac_api.h | 3 --- 4 files changed, 9 deletions(-) diff --git a/features/FEATURE_LWIP/lwip-interface/emac_lwip.c b/features/FEATURE_LWIP/lwip-interface/emac_lwip.c index 01f09faf0f9..f79be5d4717 100644 --- a/features/FEATURE_LWIP/lwip-interface/emac_lwip.c +++ b/features/FEATURE_LWIP/lwip-interface/emac_lwip.c @@ -14,8 +14,6 @@ * limitations under the License. */ -#include "platform.h" - #if DEVICE_EMAC #include "emac_api.h" diff --git a/features/FEATURE_LWIP/lwip-interface/emac_stack_lwip.cpp b/features/FEATURE_LWIP/lwip-interface/emac_stack_lwip.cpp index d543529fd6d..44de56e6ae2 100644 --- a/features/FEATURE_LWIP/lwip-interface/emac_stack_lwip.cpp +++ b/features/FEATURE_LWIP/lwip-interface/emac_stack_lwip.cpp @@ -14,8 +14,6 @@ * limitations under the License. */ -#include "platform.h" - #if DEVICE_EMAC #include "emac_stack_mem.h" diff --git a/features/netsocket/emac_stack_mem.h b/features/netsocket/emac_stack_mem.h index b407308fd58..1a88bde94d3 100644 --- a/features/netsocket/emac_stack_mem.h +++ b/features/netsocket/emac_stack_mem.h @@ -16,8 +16,6 @@ #ifndef MBED_EMAC_STACK_MEM_H #define MBED_EMAC_STACK_MEM_H -#include "platform.h" - #if DEVICE_EMAC #include diff --git a/hal/hal/emac_api.h b/hal/hal/emac_api.h index bebd56f7072..e5fbd1a9419 100644 --- a/hal/hal/emac_api.h +++ b/hal/hal/emac_api.h @@ -17,9 +17,6 @@ #ifndef MBED_EMAC_API_H #define MBED_EMAC_API_H -#include "platform.h" - - #if DEVICE_EMAC #include From a5cbb71b988a2e7e8b13feb9c319025dcb42e56c Mon Sep 17 00:00:00 2001 From: jeromecoutant Date: Wed, 12 Oct 2016 16:52:26 +0200 Subject: [PATCH 79/89] NUCLEO_F303ZE: Enable all I2C instances --- .../TARGET_NUCLEO_F303ZE/PeripheralPins.c | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F303ZE/PeripheralPins.c b/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F303ZE/PeripheralPins.c index f07f0816243..f5b57f3a868 100644 --- a/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F303ZE/PeripheralPins.c +++ b/targets/TARGET_STM/TARGET_STM32F3/TARGET_NUCLEO_F303ZE/PeripheralPins.c @@ -117,24 +117,24 @@ const PinMap PinMap_DAC[] = { //*** I2C *** const PinMap PinMap_I2C_SDA[] = { - //{PA_10, I2C_2 , STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, //(pin used for usb) + {PA_10, I2C_2 , STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, // warning: pin can be used for usb //{PA_14, I2C_1 , STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)},// (pin used for stmc) - // {PB_5, I2C_3 , STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF8_I2C3)},// I2C3 not useable with usb , no SCL available. + {PB_5, I2C_3 , STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF8_I2C3)},// warning: I2C3 not useable with usb as no SCL available. //{PB_7, I2C_1 , STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)},//(pin used by LED2) {PB_9, I2C_1 , STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, //- ARDUINO D14 - //{PC_9, I2C_3 , STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF3_I2C3)}, + {PC_9, I2C_3 , STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF3_I2C3)}, //{PF_0, I2C_2 , STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},// PF_0 not useable on board , need resistors changes I2C2 not useable {NC, NC, 0} }; const PinMap PinMap_I2C_SCL[] = { - //{PA_8, I2C_3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF3_I2C3)}, //(pin used for usb) - //{PA_9, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, //(pin used for usb) + {PA_8, I2C_3, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF3_I2C3)}, // warning: pin can be used for usb + {PA_9, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, // warning: pin can be used for usb // {PA_15, I2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, // {PB_6, I2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, {PB_8, I2C_1, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C1)}, //- ARDUINO D15 - //{PF_1, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},// I2C2 not useable due to PF_0 not useable - //{PF_6, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)},// I2C2 not useable due to PF_0 not useable + {PF_1, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, + {PF_6, I2C_2, STM_PIN_DATA(STM_MODE_AF_OD, GPIO_NOPULL, GPIO_AF4_I2C2)}, {NC, NC, 0} }; From d111b09eb2d36690092ad3fe986528a65605975e Mon Sep 17 00:00:00 2001 From: Christopher Haster Date: Wed, 12 Oct 2016 17:48:54 -0500 Subject: [PATCH 80/89] callback - Fixed missing workaround for IAR issue with type information Related to commit abba0c2 --- events/Event.h | 90 ++++++--------------------------------------- events/EventQueue.h | 40 ++++++++++---------- 2 files changed, 31 insertions(+), 99 deletions(-) diff --git a/events/Event.h b/events/Event.h index 9659192cd48..e9a9161c26f 100644 --- a/events/Event.h +++ b/events/Event.h @@ -212,8 +212,8 @@ class Event { new (p) C(*(F*)(e + 1)); equeue_event_delay(p, e->delay); equeue_event_period(p, e->period); - equeue_event_dtor(p, &Event::function_dtor); - return equeue_post(e->equeue, &Event::function_call, p); + equeue_event_dtor(p, &EventQueue::function_dtor); + return equeue_post(e->equeue, &EventQueue::function_call, p); } template @@ -221,17 +221,6 @@ class Event { ((F*)(e + 1))->~F(); } - // Function attributes - template - static void function_call(void *p) { - (*(F*)p)(); - } - - template - static void function_dtor(void *p) { - ((F*)p)->~F(); - } - public: /** Create an event * @see Event::Event @@ -616,8 +605,8 @@ class Event { new (p) C(*(F*)(e + 1), a0); equeue_event_delay(p, e->delay); equeue_event_period(p, e->period); - equeue_event_dtor(p, &Event::function_dtor); - return equeue_post(e->equeue, &Event::function_call, p); + equeue_event_dtor(p, &EventQueue::function_dtor); + return equeue_post(e->equeue, &EventQueue::function_call, p); } template @@ -625,17 +614,6 @@ class Event { ((F*)(e + 1))->~F(); } - // Function attributes - template - static void function_call(void *p) { - (*(F*)p)(); - } - - template - static void function_dtor(void *p) { - ((F*)p)->~F(); - } - public: /** Create an event * @see Event::Event @@ -1020,8 +998,8 @@ class Event { new (p) C(*(F*)(e + 1), a0, a1); equeue_event_delay(p, e->delay); equeue_event_period(p, e->period); - equeue_event_dtor(p, &Event::function_dtor); - return equeue_post(e->equeue, &Event::function_call, p); + equeue_event_dtor(p, &EventQueue::function_dtor); + return equeue_post(e->equeue, &EventQueue::function_call, p); } template @@ -1029,17 +1007,6 @@ class Event { ((F*)(e + 1))->~F(); } - // Function attributes - template - static void function_call(void *p) { - (*(F*)p)(); - } - - template - static void function_dtor(void *p) { - ((F*)p)->~F(); - } - public: /** Create an event * @see Event::Event @@ -1424,8 +1391,8 @@ class Event { new (p) C(*(F*)(e + 1), a0, a1, a2); equeue_event_delay(p, e->delay); equeue_event_period(p, e->period); - equeue_event_dtor(p, &Event::function_dtor); - return equeue_post(e->equeue, &Event::function_call, p); + equeue_event_dtor(p, &EventQueue::function_dtor); + return equeue_post(e->equeue, &EventQueue::function_call, p); } template @@ -1433,17 +1400,6 @@ class Event { ((F*)(e + 1))->~F(); } - // Function attributes - template - static void function_call(void *p) { - (*(F*)p)(); - } - - template - static void function_dtor(void *p) { - ((F*)p)->~F(); - } - public: /** Create an event * @see Event::Event @@ -1828,8 +1784,8 @@ class Event { new (p) C(*(F*)(e + 1), a0, a1, a2, a3); equeue_event_delay(p, e->delay); equeue_event_period(p, e->period); - equeue_event_dtor(p, &Event::function_dtor); - return equeue_post(e->equeue, &Event::function_call, p); + equeue_event_dtor(p, &EventQueue::function_dtor); + return equeue_post(e->equeue, &EventQueue::function_call, p); } template @@ -1837,17 +1793,6 @@ class Event { ((F*)(e + 1))->~F(); } - // Function attributes - template - static void function_call(void *p) { - (*(F*)p)(); - } - - template - static void function_dtor(void *p) { - ((F*)p)->~F(); - } - public: /** Create an event * @see Event::Event @@ -2232,8 +2177,8 @@ class Event { new (p) C(*(F*)(e + 1), a0, a1, a2, a3, a4); equeue_event_delay(p, e->delay); equeue_event_period(p, e->period); - equeue_event_dtor(p, &Event::function_dtor); - return equeue_post(e->equeue, &Event::function_call, p); + equeue_event_dtor(p, &EventQueue::function_dtor); + return equeue_post(e->equeue, &EventQueue::function_call, p); } template @@ -2241,17 +2186,6 @@ class Event { ((F*)(e + 1))->~F(); } - // Function attributes - template - static void function_call(void *p) { - (*(F*)p)(); - } - - template - static void function_dtor(void *p) { - ((F*)p)->~F(); - } - public: /** Create an event * @see Event::Event diff --git a/events/EventQueue.h b/events/EventQueue.h index 9ae9c1ce2a0..cf1ae224880 100644 --- a/events/EventQueue.h +++ b/events/EventQueue.h @@ -13,6 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ + #ifndef EVENT_QUEUE_H #define EVENT_QUEUE_H @@ -173,19 +174,14 @@ class EventQueue { */ template int call(F f) { - struct local { - static void call(void *p) { (*static_cast(p))(); } - static void dtor(void *p) { static_cast(p)->~F(); } - }; - void *p = equeue_alloc(&_equeue, sizeof(F)); if (!p) { return 0; } F *e = new (p) F(f); - equeue_event_dtor(e, &local::dtor); - return equeue_post(&_equeue, &local::call, e); + equeue_event_dtor(e, &EventQueue::function_dtor); + return equeue_post(&_equeue, &EventQueue::function_call, e); } /** Calls an event on the queue @@ -437,11 +433,6 @@ class EventQueue { */ template int call_in(int ms, F f) { - struct local { - static void call(void *p) { (*static_cast(p))(); } - static void dtor(void *p) { static_cast(p)->~F(); } - }; - void *p = equeue_alloc(&_equeue, sizeof(F)); if (!p) { return 0; @@ -449,8 +440,8 @@ class EventQueue { F *e = new (p) F(f); equeue_event_delay(e, ms); - equeue_event_dtor(e, &local::dtor); - return equeue_post(&_equeue, &local::call, e); + equeue_event_dtor(e, &EventQueue::function_dtor); + return equeue_post(&_equeue, &EventQueue::function_call, e); } /** Calls an event on the queue after a specified delay @@ -702,11 +693,6 @@ class EventQueue { */ template int call_every(int ms, F f) { - struct local { - static void call(void *p) { (*static_cast(p))(); } - static void dtor(void *p) { static_cast(p)->~F(); } - }; - void *p = equeue_alloc(&_equeue, sizeof(F)); if (!p) { return 0; @@ -715,8 +701,8 @@ class EventQueue { F *e = new (p) F(f); equeue_event_delay(e, ms); equeue_event_period(e, ms); - equeue_event_dtor(e, &local::dtor); - return equeue_post(&_equeue, &local::call, e); + equeue_event_dtor(e, &EventQueue::function_dtor); + return equeue_post(&_equeue, &EventQueue::function_call, e); } /** Calls an event on the queue periodically @@ -2044,6 +2030,18 @@ class EventQueue { struct equeue _equeue; mbed::Callback _update; + // Function attributes + template + static void function_call(void *p) { + (*(F*)p)(); + } + + template + static void function_dtor(void *p) { + ((F*)p)->~F(); + } + + // Context structures template struct context00 { F f; From 1b61b2cc0ceca69a58cff1ccad38098039e90186 Mon Sep 17 00:00:00 2001 From: Brian Daniels Date: Thu, 13 Oct 2016 12:43:27 -0500 Subject: [PATCH 81/89] Remove shared spi_s struct from XDOT_L151CC --- .../TARGET_STM32L1/TARGET_XDOT_L151CC/objects.h | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/targets/TARGET_STM/TARGET_STM32L1/TARGET_XDOT_L151CC/objects.h b/targets/TARGET_STM/TARGET_STM32L1/TARGET_XDOT_L151CC/objects.h index 7a0d5f1489f..84754ae7488 100644 --- a/targets/TARGET_STM/TARGET_STM32L1/TARGET_XDOT_L151CC/objects.h +++ b/targets/TARGET_STM/TARGET_STM32L1/TARGET_XDOT_L151CC/objects.h @@ -65,20 +65,6 @@ struct dac_s { PinName pin; }; -struct spi_s { - SPIName spi; - uint32_t bits; - uint32_t cpol; - uint32_t cpha; - uint32_t mode; - uint32_t nss; - uint32_t br_presc; - PinName pin_miso; - PinName pin_mosi; - PinName pin_sclk; - PinName pin_ssel; -}; - struct i2c_s { I2CName i2c; uint32_t slave; From 283a82f23e919dc706459560d0142e18c45031cf Mon Sep 17 00:00:00 2001 From: adustm Date: Mon, 10 Oct 2016 18:31:45 +0200 Subject: [PATCH 82/89] ADD NEW TARGET : NUCLEO_F439ZI, based on existing NUCLEO_F429ZI --- .../stm32f4_eth_init.c | 0 .../PeripheralNames.h | 0 .../PeripheralPins.c | 0 .../PinNames.h | 0 .../PortNames.h | 0 .../TARGET_NUCLEO_F429ZI/device/stm32f429xx.h | 0 .../TARGET_NUCLEO_F429ZI/device/stm32f4xx.h | 0 .../TARGET_NUCLEO_F439ZI/device/stm32f439xx.h | 9308 +++++++++++++++++ .../TARGET_NUCLEO_F439ZI/device/stm32f4xx.h | 264 + .../TOOLCHAIN_ARM_MICRO/startup_stm32f429xx.s | 0 .../TOOLCHAIN_ARM_MICRO/stm32f429xx.sct | 0 .../TOOLCHAIN_ARM_STD/startup_stm32f429xx.s | 0 .../device/TOOLCHAIN_ARM_STD/stm32f429xx.sct | 0 .../device/TOOLCHAIN_ARM_STD/sys.cpp | 0 .../device/TOOLCHAIN_GCC_ARM/STM32F429ZI.ld | 0 .../TOOLCHAIN_GCC_ARM/startup_stm32f429xx.S | 0 .../TOOLCHAIN_IAR/startup_stm32f429xx.S | 0 .../TOOLCHAIN_IAR/stm32f429xx_flash.icf | 0 .../device/cmsis.h | 0 .../device/cmsis_nvic.c | 0 .../device/cmsis_nvic.h | 0 .../device/hal_tick.c | 0 .../device/hal_tick.h | 0 .../device/stm32f4xx_hal_conf.h | 0 .../device/system_stm32f4xx.c | 0 .../device/system_stm32f4xx.h | 0 .../objects.h | 0 targets/TARGET_STM/mbed_rtx.h | 2 +- targets/targets.json | 17 +- 29 files changed, 9589 insertions(+), 2 deletions(-) rename features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_STM/TARGET_STM32F4/{TARGET_NUCLEO_F429ZI => TARGET_F429_F439}/stm32f4_eth_init.c (100%) rename targets/TARGET_STM/TARGET_STM32F4/{TARGET_NUCLEO_F429ZI => TARGET_F429_F439}/PeripheralNames.h (100%) rename targets/TARGET_STM/TARGET_STM32F4/{TARGET_NUCLEO_F429ZI => TARGET_F429_F439}/PeripheralPins.c (100%) rename targets/TARGET_STM/TARGET_STM32F4/{TARGET_NUCLEO_F429ZI => TARGET_F429_F439}/PinNames.h (100%) rename targets/TARGET_STM/TARGET_STM32F4/{TARGET_NUCLEO_F429ZI => TARGET_F429_F439}/PortNames.h (100%) rename targets/TARGET_STM/TARGET_STM32F4/{ => TARGET_F429_F439}/TARGET_NUCLEO_F429ZI/device/stm32f429xx.h (100%) rename targets/TARGET_STM/TARGET_STM32F4/{ => TARGET_F429_F439}/TARGET_NUCLEO_F429ZI/device/stm32f4xx.h (100%) create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/TARGET_NUCLEO_F439ZI/device/stm32f439xx.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/TARGET_NUCLEO_F439ZI/device/stm32f4xx.h rename targets/TARGET_STM/TARGET_STM32F4/{TARGET_NUCLEO_F429ZI => TARGET_F429_F439}/device/TOOLCHAIN_ARM_MICRO/startup_stm32f429xx.s (100%) rename targets/TARGET_STM/TARGET_STM32F4/{TARGET_NUCLEO_F429ZI => TARGET_F429_F439}/device/TOOLCHAIN_ARM_MICRO/stm32f429xx.sct (100%) rename targets/TARGET_STM/TARGET_STM32F4/{TARGET_NUCLEO_F429ZI => TARGET_F429_F439}/device/TOOLCHAIN_ARM_STD/startup_stm32f429xx.s (100%) rename targets/TARGET_STM/TARGET_STM32F4/{TARGET_NUCLEO_F429ZI => TARGET_F429_F439}/device/TOOLCHAIN_ARM_STD/stm32f429xx.sct (100%) rename targets/TARGET_STM/TARGET_STM32F4/{TARGET_NUCLEO_F429ZI => TARGET_F429_F439}/device/TOOLCHAIN_ARM_STD/sys.cpp (100%) rename targets/TARGET_STM/TARGET_STM32F4/{TARGET_NUCLEO_F429ZI => TARGET_F429_F439}/device/TOOLCHAIN_GCC_ARM/STM32F429ZI.ld (100%) rename targets/TARGET_STM/TARGET_STM32F4/{TARGET_NUCLEO_F429ZI => TARGET_F429_F439}/device/TOOLCHAIN_GCC_ARM/startup_stm32f429xx.S (100%) rename targets/TARGET_STM/TARGET_STM32F4/{TARGET_NUCLEO_F429ZI => TARGET_F429_F439}/device/TOOLCHAIN_IAR/startup_stm32f429xx.S (100%) rename targets/TARGET_STM/TARGET_STM32F4/{TARGET_NUCLEO_F429ZI => TARGET_F429_F439}/device/TOOLCHAIN_IAR/stm32f429xx_flash.icf (100%) rename targets/TARGET_STM/TARGET_STM32F4/{TARGET_NUCLEO_F429ZI => TARGET_F429_F439}/device/cmsis.h (100%) rename targets/TARGET_STM/TARGET_STM32F4/{TARGET_NUCLEO_F429ZI => TARGET_F429_F439}/device/cmsis_nvic.c (100%) rename targets/TARGET_STM/TARGET_STM32F4/{TARGET_NUCLEO_F429ZI => TARGET_F429_F439}/device/cmsis_nvic.h (100%) rename targets/TARGET_STM/TARGET_STM32F4/{TARGET_NUCLEO_F429ZI => TARGET_F429_F439}/device/hal_tick.c (100%) rename targets/TARGET_STM/TARGET_STM32F4/{TARGET_NUCLEO_F429ZI => TARGET_F429_F439}/device/hal_tick.h (100%) rename targets/TARGET_STM/TARGET_STM32F4/{TARGET_NUCLEO_F429ZI => TARGET_F429_F439}/device/stm32f4xx_hal_conf.h (100%) rename targets/TARGET_STM/TARGET_STM32F4/{TARGET_NUCLEO_F429ZI => TARGET_F429_F439}/device/system_stm32f4xx.c (100%) rename targets/TARGET_STM/TARGET_STM32F4/{TARGET_NUCLEO_F429ZI => TARGET_F429_F439}/device/system_stm32f4xx.h (100%) rename targets/TARGET_STM/TARGET_STM32F4/{TARGET_NUCLEO_F429ZI => TARGET_F429_F439}/objects.h (100%) diff --git a/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/stm32f4_eth_init.c b/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/stm32f4_eth_init.c similarity index 100% rename from features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/stm32f4_eth_init.c rename to features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/stm32f4_eth_init.c diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/PeripheralNames.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/PeripheralNames.h rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/PeripheralNames.h diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/PeripheralPins.c b/targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/PeripheralPins.c similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/PeripheralPins.c rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/PeripheralPins.c diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/PinNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/PinNames.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/PinNames.h rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/PinNames.h diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/PortNames.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/PortNames.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/PortNames.h rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/PortNames.h diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/stm32f429xx.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/TARGET_NUCLEO_F429ZI/device/stm32f429xx.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/stm32f429xx.h rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/TARGET_NUCLEO_F429ZI/device/stm32f429xx.h diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/stm32f4xx.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/TARGET_NUCLEO_F429ZI/device/stm32f4xx.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/stm32f4xx.h rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/TARGET_NUCLEO_F429ZI/device/stm32f4xx.h diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/TARGET_NUCLEO_F439ZI/device/stm32f439xx.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/TARGET_NUCLEO_F439ZI/device/stm32f439xx.h new file mode 100644 index 00000000000..37f22294967 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/TARGET_NUCLEO_F439ZI/device/stm32f439xx.h @@ -0,0 +1,9308 @@ +/** + ****************************************************************************** + * @file stm32f439xx.h + * @author MCD Application Team + * @version V2.5.0 + * @date 22-April-2016 + * @brief CMSIS STM32F439xx Device Peripheral Access Layer Header File. + * + * This file contains: + * - Data structures and the address mapping for all peripherals + * - peripherals registers declarations and bits definition + * - Macros to access peripherals registers hardware + * + ****************************************************************************** + * @attention + * + *

      © COPYRIGHT(c) 2016 STMicroelectronics

      + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS_Device + * @{ + */ + +/** @addtogroup stm32f439xx + * @{ + */ + +#ifndef __STM32F439xx_H +#define __STM32F439xx_H + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +/** @addtogroup Configuration_section_for_CMSIS + * @{ + */ + +/** + * @brief Configuration of the Cortex-M4 Processor and Core Peripherals + */ +#define __CM4_REV 0x0001U /*!< Core revision r0p1 */ +#define __MPU_PRESENT 1U /*!< STM32F4XX provides an MPU */ +#define __NVIC_PRIO_BITS 4U /*!< STM32F4XX uses 4 Bits for the Priority Levels */ +#define __Vendor_SysTickConfig 0U /*!< Set to 1 if different SysTick Config is used */ +#ifndef __FPU_PRESENT +#define __FPU_PRESENT 1U /*!< FPU present */ +#endif /* __FPU_PRESENT */ + +/** + * @} + */ + +/** @addtogroup Peripheral_interrupt_number_definition + * @{ + */ + +/** + * @brief STM32F4XX Interrupt Number Definition, according to the selected device + * in @ref Library_configuration_section + */ +typedef enum +{ +/****** Cortex-M4 Processor Exceptions Numbers ****************************************************************/ + NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */ + MemoryManagement_IRQn = -12, /*!< 4 Cortex-M4 Memory Management Interrupt */ + BusFault_IRQn = -11, /*!< 5 Cortex-M4 Bus Fault Interrupt */ + UsageFault_IRQn = -10, /*!< 6 Cortex-M4 Usage Fault Interrupt */ + SVCall_IRQn = -5, /*!< 11 Cortex-M4 SV Call Interrupt */ + DebugMonitor_IRQn = -4, /*!< 12 Cortex-M4 Debug Monitor Interrupt */ + PendSV_IRQn = -2, /*!< 14 Cortex-M4 Pend SV Interrupt */ + SysTick_IRQn = -1, /*!< 15 Cortex-M4 System Tick Interrupt */ +/****** STM32 specific Interrupt Numbers **********************************************************************/ + WWDG_IRQn = 0, /*!< Window WatchDog Interrupt */ + PVD_IRQn = 1, /*!< PVD through EXTI Line detection Interrupt */ + TAMP_STAMP_IRQn = 2, /*!< Tamper and TimeStamp interrupts through the EXTI line */ + RTC_WKUP_IRQn = 3, /*!< RTC Wakeup interrupt through the EXTI line */ + FLASH_IRQn = 4, /*!< FLASH global Interrupt */ + RCC_IRQn = 5, /*!< RCC global Interrupt */ + EXTI0_IRQn = 6, /*!< EXTI Line0 Interrupt */ + EXTI1_IRQn = 7, /*!< EXTI Line1 Interrupt */ + EXTI2_IRQn = 8, /*!< EXTI Line2 Interrupt */ + EXTI3_IRQn = 9, /*!< EXTI Line3 Interrupt */ + EXTI4_IRQn = 10, /*!< EXTI Line4 Interrupt */ + DMA1_Stream0_IRQn = 11, /*!< DMA1 Stream 0 global Interrupt */ + DMA1_Stream1_IRQn = 12, /*!< DMA1 Stream 1 global Interrupt */ + DMA1_Stream2_IRQn = 13, /*!< DMA1 Stream 2 global Interrupt */ + DMA1_Stream3_IRQn = 14, /*!< DMA1 Stream 3 global Interrupt */ + DMA1_Stream4_IRQn = 15, /*!< DMA1 Stream 4 global Interrupt */ + DMA1_Stream5_IRQn = 16, /*!< DMA1 Stream 5 global Interrupt */ + DMA1_Stream6_IRQn = 17, /*!< DMA1 Stream 6 global Interrupt */ + ADC_IRQn = 18, /*!< ADC1, ADC2 and ADC3 global Interrupts */ + CAN1_TX_IRQn = 19, /*!< CAN1 TX Interrupt */ + CAN1_RX0_IRQn = 20, /*!< CAN1 RX0 Interrupt */ + CAN1_RX1_IRQn = 21, /*!< CAN1 RX1 Interrupt */ + CAN1_SCE_IRQn = 22, /*!< CAN1 SCE Interrupt */ + EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ + TIM1_BRK_TIM9_IRQn = 24, /*!< TIM1 Break interrupt and TIM9 global interrupt */ + TIM1_UP_TIM10_IRQn = 25, /*!< TIM1 Update Interrupt and TIM10 global interrupt */ + TIM1_TRG_COM_TIM11_IRQn = 26, /*!< TIM1 Trigger and Commutation Interrupt and TIM11 global interrupt */ + TIM1_CC_IRQn = 27, /*!< TIM1 Capture Compare Interrupt */ + TIM2_IRQn = 28, /*!< TIM2 global Interrupt */ + TIM3_IRQn = 29, /*!< TIM3 global Interrupt */ + TIM4_IRQn = 30, /*!< TIM4 global Interrupt */ + I2C1_EV_IRQn = 31, /*!< I2C1 Event Interrupt */ + I2C1_ER_IRQn = 32, /*!< I2C1 Error Interrupt */ + I2C2_EV_IRQn = 33, /*!< I2C2 Event Interrupt */ + I2C2_ER_IRQn = 34, /*!< I2C2 Error Interrupt */ + SPI1_IRQn = 35, /*!< SPI1 global Interrupt */ + SPI2_IRQn = 36, /*!< SPI2 global Interrupt */ + USART1_IRQn = 37, /*!< USART1 global Interrupt */ + USART2_IRQn = 38, /*!< USART2 global Interrupt */ + USART3_IRQn = 39, /*!< USART3 global Interrupt */ + EXTI15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ + RTC_Alarm_IRQn = 41, /*!< RTC Alarm (A and B) through EXTI Line Interrupt */ + OTG_FS_WKUP_IRQn = 42, /*!< USB OTG FS Wakeup through EXTI line interrupt */ + TIM8_BRK_TIM12_IRQn = 43, /*!< TIM8 Break Interrupt and TIM12 global interrupt */ + TIM8_UP_TIM13_IRQn = 44, /*!< TIM8 Update Interrupt and TIM13 global interrupt */ + TIM8_TRG_COM_TIM14_IRQn = 45, /*!< TIM8 Trigger and Commutation Interrupt and TIM14 global interrupt */ + TIM8_CC_IRQn = 46, /*!< TIM8 Capture Compare Interrupt */ + DMA1_Stream7_IRQn = 47, /*!< DMA1 Stream7 Interrupt */ + FMC_IRQn = 48, /*!< FMC global Interrupt */ + SDIO_IRQn = 49, /*!< SDIO global Interrupt */ + TIM5_IRQn = 50, /*!< TIM5 global Interrupt */ + SPI3_IRQn = 51, /*!< SPI3 global Interrupt */ + UART4_IRQn = 52, /*!< UART4 global Interrupt */ + UART5_IRQn = 53, /*!< UART5 global Interrupt */ + TIM6_DAC_IRQn = 54, /*!< TIM6 global and DAC1&2 underrun error interrupts */ + TIM7_IRQn = 55, /*!< TIM7 global interrupt */ + DMA2_Stream0_IRQn = 56, /*!< DMA2 Stream 0 global Interrupt */ + DMA2_Stream1_IRQn = 57, /*!< DMA2 Stream 1 global Interrupt */ + DMA2_Stream2_IRQn = 58, /*!< DMA2 Stream 2 global Interrupt */ + DMA2_Stream3_IRQn = 59, /*!< DMA2 Stream 3 global Interrupt */ + DMA2_Stream4_IRQn = 60, /*!< DMA2 Stream 4 global Interrupt */ + ETH_IRQn = 61, /*!< Ethernet global Interrupt */ + ETH_WKUP_IRQn = 62, /*!< Ethernet Wakeup through EXTI line Interrupt */ + CAN2_TX_IRQn = 63, /*!< CAN2 TX Interrupt */ + CAN2_RX0_IRQn = 64, /*!< CAN2 RX0 Interrupt */ + CAN2_RX1_IRQn = 65, /*!< CAN2 RX1 Interrupt */ + CAN2_SCE_IRQn = 66, /*!< CAN2 SCE Interrupt */ + OTG_FS_IRQn = 67, /*!< USB OTG FS global Interrupt */ + DMA2_Stream5_IRQn = 68, /*!< DMA2 Stream 5 global interrupt */ + DMA2_Stream6_IRQn = 69, /*!< DMA2 Stream 6 global interrupt */ + DMA2_Stream7_IRQn = 70, /*!< DMA2 Stream 7 global interrupt */ + USART6_IRQn = 71, /*!< USART6 global interrupt */ + I2C3_EV_IRQn = 72, /*!< I2C3 event interrupt */ + I2C3_ER_IRQn = 73, /*!< I2C3 error interrupt */ + OTG_HS_EP1_OUT_IRQn = 74, /*!< USB OTG HS End Point 1 Out global interrupt */ + OTG_HS_EP1_IN_IRQn = 75, /*!< USB OTG HS End Point 1 In global interrupt */ + OTG_HS_WKUP_IRQn = 76, /*!< USB OTG HS Wakeup through EXTI interrupt */ + OTG_HS_IRQn = 77, /*!< USB OTG HS global interrupt */ + DCMI_IRQn = 78, /*!< DCMI global interrupt */ + CRYP_IRQn = 79, /*!< CRYP crypto global interrupt */ + HASH_RNG_IRQn = 80, /*!< Hash and Rng global interrupt */ + FPU_IRQn = 81, /*!< FPU global interrupt */ + UART7_IRQn = 82, /*!< UART7 global interrupt */ + UART8_IRQn = 83, /*!< UART8 global interrupt */ + SPI4_IRQn = 84, /*!< SPI4 global Interrupt */ + SPI5_IRQn = 85, /*!< SPI5 global Interrupt */ + SPI6_IRQn = 86, /*!< SPI6 global Interrupt */ + SAI1_IRQn = 87, /*!< SAI1 global Interrupt */ + LTDC_IRQn = 88, /*!< LTDC global Interrupt */ + LTDC_ER_IRQn = 89, /*!< LTDC Error global Interrupt */ + DMA2D_IRQn = 90 /*!< DMA2D global Interrupt */ +} IRQn_Type; + +/** + * @} + */ + +#include "core_cm4.h" /* Cortex-M4 processor and core peripherals */ +#include "system_stm32f4xx.h" +#include + +/** @addtogroup Peripheral_registers_structures + * @{ + */ + +/** + * @brief Analog to Digital Converter + */ + +typedef struct +{ + __IO uint32_t SR; /*!< ADC status register, Address offset: 0x00 */ + __IO uint32_t CR1; /*!< ADC control register 1, Address offset: 0x04 */ + __IO uint32_t CR2; /*!< ADC control register 2, Address offset: 0x08 */ + __IO uint32_t SMPR1; /*!< ADC sample time register 1, Address offset: 0x0C */ + __IO uint32_t SMPR2; /*!< ADC sample time register 2, Address offset: 0x10 */ + __IO uint32_t JOFR1; /*!< ADC injected channel data offset register 1, Address offset: 0x14 */ + __IO uint32_t JOFR2; /*!< ADC injected channel data offset register 2, Address offset: 0x18 */ + __IO uint32_t JOFR3; /*!< ADC injected channel data offset register 3, Address offset: 0x1C */ + __IO uint32_t JOFR4; /*!< ADC injected channel data offset register 4, Address offset: 0x20 */ + __IO uint32_t HTR; /*!< ADC watchdog higher threshold register, Address offset: 0x24 */ + __IO uint32_t LTR; /*!< ADC watchdog lower threshold register, Address offset: 0x28 */ + __IO uint32_t SQR1; /*!< ADC regular sequence register 1, Address offset: 0x2C */ + __IO uint32_t SQR2; /*!< ADC regular sequence register 2, Address offset: 0x30 */ + __IO uint32_t SQR3; /*!< ADC regular sequence register 3, Address offset: 0x34 */ + __IO uint32_t JSQR; /*!< ADC injected sequence register, Address offset: 0x38*/ + __IO uint32_t JDR1; /*!< ADC injected data register 1, Address offset: 0x3C */ + __IO uint32_t JDR2; /*!< ADC injected data register 2, Address offset: 0x40 */ + __IO uint32_t JDR3; /*!< ADC injected data register 3, Address offset: 0x44 */ + __IO uint32_t JDR4; /*!< ADC injected data register 4, Address offset: 0x48 */ + __IO uint32_t DR; /*!< ADC regular data register, Address offset: 0x4C */ +} ADC_TypeDef; + +typedef struct +{ + __IO uint32_t CSR; /*!< ADC Common status register, Address offset: ADC1 base address + 0x300 */ + __IO uint32_t CCR; /*!< ADC common control register, Address offset: ADC1 base address + 0x304 */ + __IO uint32_t CDR; /*!< ADC common regular data register for dual + AND triple modes, Address offset: ADC1 base address + 0x308 */ +} ADC_Common_TypeDef; + + +/** + * @brief Controller Area Network TxMailBox + */ + +typedef struct +{ + __IO uint32_t TIR; /*!< CAN TX mailbox identifier register */ + __IO uint32_t TDTR; /*!< CAN mailbox data length control and time stamp register */ + __IO uint32_t TDLR; /*!< CAN mailbox data low register */ + __IO uint32_t TDHR; /*!< CAN mailbox data high register */ +} CAN_TxMailBox_TypeDef; + +/** + * @brief Controller Area Network FIFOMailBox + */ + +typedef struct +{ + __IO uint32_t RIR; /*!< CAN receive FIFO mailbox identifier register */ + __IO uint32_t RDTR; /*!< CAN receive FIFO mailbox data length control and time stamp register */ + __IO uint32_t RDLR; /*!< CAN receive FIFO mailbox data low register */ + __IO uint32_t RDHR; /*!< CAN receive FIFO mailbox data high register */ +} CAN_FIFOMailBox_TypeDef; + +/** + * @brief Controller Area Network FilterRegister + */ + +typedef struct +{ + __IO uint32_t FR1; /*!< CAN Filter bank register 1 */ + __IO uint32_t FR2; /*!< CAN Filter bank register 1 */ +} CAN_FilterRegister_TypeDef; + +/** + * @brief Controller Area Network + */ + +typedef struct +{ + __IO uint32_t MCR; /*!< CAN master control register, Address offset: 0x00 */ + __IO uint32_t MSR; /*!< CAN master status register, Address offset: 0x04 */ + __IO uint32_t TSR; /*!< CAN transmit status register, Address offset: 0x08 */ + __IO uint32_t RF0R; /*!< CAN receive FIFO 0 register, Address offset: 0x0C */ + __IO uint32_t RF1R; /*!< CAN receive FIFO 1 register, Address offset: 0x10 */ + __IO uint32_t IER; /*!< CAN interrupt enable register, Address offset: 0x14 */ + __IO uint32_t ESR; /*!< CAN error status register, Address offset: 0x18 */ + __IO uint32_t BTR; /*!< CAN bit timing register, Address offset: 0x1C */ + uint32_t RESERVED0[88]; /*!< Reserved, 0x020 - 0x17F */ + CAN_TxMailBox_TypeDef sTxMailBox[3]; /*!< CAN Tx MailBox, Address offset: 0x180 - 0x1AC */ + CAN_FIFOMailBox_TypeDef sFIFOMailBox[2]; /*!< CAN FIFO MailBox, Address offset: 0x1B0 - 0x1CC */ + uint32_t RESERVED1[12]; /*!< Reserved, 0x1D0 - 0x1FF */ + __IO uint32_t FMR; /*!< CAN filter master register, Address offset: 0x200 */ + __IO uint32_t FM1R; /*!< CAN filter mode register, Address offset: 0x204 */ + uint32_t RESERVED2; /*!< Reserved, 0x208 */ + __IO uint32_t FS1R; /*!< CAN filter scale register, Address offset: 0x20C */ + uint32_t RESERVED3; /*!< Reserved, 0x210 */ + __IO uint32_t FFA1R; /*!< CAN filter FIFO assignment register, Address offset: 0x214 */ + uint32_t RESERVED4; /*!< Reserved, 0x218 */ + __IO uint32_t FA1R; /*!< CAN filter activation register, Address offset: 0x21C */ + uint32_t RESERVED5[8]; /*!< Reserved, 0x220-0x23F */ + CAN_FilterRegister_TypeDef sFilterRegister[28]; /*!< CAN Filter Register, Address offset: 0x240-0x31C */ +} CAN_TypeDef; + +/** + * @brief CRC calculation unit + */ + +typedef struct +{ + __IO uint32_t DR; /*!< CRC Data register, Address offset: 0x00 */ + __IO uint8_t IDR; /*!< CRC Independent data register, Address offset: 0x04 */ + uint8_t RESERVED0; /*!< Reserved, 0x05 */ + uint16_t RESERVED1; /*!< Reserved, 0x06 */ + __IO uint32_t CR; /*!< CRC Control register, Address offset: 0x08 */ +} CRC_TypeDef; + +/** + * @brief Digital to Analog Converter + */ + +typedef struct +{ + __IO uint32_t CR; /*!< DAC control register, Address offset: 0x00 */ + __IO uint32_t SWTRIGR; /*!< DAC software trigger register, Address offset: 0x04 */ + __IO uint32_t DHR12R1; /*!< DAC channel1 12-bit right-aligned data holding register, Address offset: 0x08 */ + __IO uint32_t DHR12L1; /*!< DAC channel1 12-bit left aligned data holding register, Address offset: 0x0C */ + __IO uint32_t DHR8R1; /*!< DAC channel1 8-bit right aligned data holding register, Address offset: 0x10 */ + __IO uint32_t DHR12R2; /*!< DAC channel2 12-bit right aligned data holding register, Address offset: 0x14 */ + __IO uint32_t DHR12L2; /*!< DAC channel2 12-bit left aligned data holding register, Address offset: 0x18 */ + __IO uint32_t DHR8R2; /*!< DAC channel2 8-bit right-aligned data holding register, Address offset: 0x1C */ + __IO uint32_t DHR12RD; /*!< Dual DAC 12-bit right-aligned data holding register, Address offset: 0x20 */ + __IO uint32_t DHR12LD; /*!< DUAL DAC 12-bit left aligned data holding register, Address offset: 0x24 */ + __IO uint32_t DHR8RD; /*!< DUAL DAC 8-bit right aligned data holding register, Address offset: 0x28 */ + __IO uint32_t DOR1; /*!< DAC channel1 data output register, Address offset: 0x2C */ + __IO uint32_t DOR2; /*!< DAC channel2 data output register, Address offset: 0x30 */ + __IO uint32_t SR; /*!< DAC status register, Address offset: 0x34 */ +} DAC_TypeDef; + +/** + * @brief Debug MCU + */ + +typedef struct +{ + __IO uint32_t IDCODE; /*!< MCU device ID code, Address offset: 0x00 */ + __IO uint32_t CR; /*!< Debug MCU configuration register, Address offset: 0x04 */ + __IO uint32_t APB1FZ; /*!< Debug MCU APB1 freeze register, Address offset: 0x08 */ + __IO uint32_t APB2FZ; /*!< Debug MCU APB2 freeze register, Address offset: 0x0C */ +}DBGMCU_TypeDef; + +/** + * @brief DCMI + */ + +typedef struct +{ + __IO uint32_t CR; /*!< DCMI control register 1, Address offset: 0x00 */ + __IO uint32_t SR; /*!< DCMI status register, Address offset: 0x04 */ + __IO uint32_t RISR; /*!< DCMI raw interrupt status register, Address offset: 0x08 */ + __IO uint32_t IER; /*!< DCMI interrupt enable register, Address offset: 0x0C */ + __IO uint32_t MISR; /*!< DCMI masked interrupt status register, Address offset: 0x10 */ + __IO uint32_t ICR; /*!< DCMI interrupt clear register, Address offset: 0x14 */ + __IO uint32_t ESCR; /*!< DCMI embedded synchronization code register, Address offset: 0x18 */ + __IO uint32_t ESUR; /*!< DCMI embedded synchronization unmask register, Address offset: 0x1C */ + __IO uint32_t CWSTRTR; /*!< DCMI crop window start, Address offset: 0x20 */ + __IO uint32_t CWSIZER; /*!< DCMI crop window size, Address offset: 0x24 */ + __IO uint32_t DR; /*!< DCMI data register, Address offset: 0x28 */ +} DCMI_TypeDef; + +/** + * @brief DMA Controller + */ + +typedef struct +{ + __IO uint32_t CR; /*!< DMA stream x configuration register */ + __IO uint32_t NDTR; /*!< DMA stream x number of data register */ + __IO uint32_t PAR; /*!< DMA stream x peripheral address register */ + __IO uint32_t M0AR; /*!< DMA stream x memory 0 address register */ + __IO uint32_t M1AR; /*!< DMA stream x memory 1 address register */ + __IO uint32_t FCR; /*!< DMA stream x FIFO control register */ +} DMA_Stream_TypeDef; + +typedef struct +{ + __IO uint32_t LISR; /*!< DMA low interrupt status register, Address offset: 0x00 */ + __IO uint32_t HISR; /*!< DMA high interrupt status register, Address offset: 0x04 */ + __IO uint32_t LIFCR; /*!< DMA low interrupt flag clear register, Address offset: 0x08 */ + __IO uint32_t HIFCR; /*!< DMA high interrupt flag clear register, Address offset: 0x0C */ +} DMA_TypeDef; + +/** + * @brief DMA2D Controller + */ + +typedef struct +{ + __IO uint32_t CR; /*!< DMA2D Control Register, Address offset: 0x00 */ + __IO uint32_t ISR; /*!< DMA2D Interrupt Status Register, Address offset: 0x04 */ + __IO uint32_t IFCR; /*!< DMA2D Interrupt Flag Clear Register, Address offset: 0x08 */ + __IO uint32_t FGMAR; /*!< DMA2D Foreground Memory Address Register, Address offset: 0x0C */ + __IO uint32_t FGOR; /*!< DMA2D Foreground Offset Register, Address offset: 0x10 */ + __IO uint32_t BGMAR; /*!< DMA2D Background Memory Address Register, Address offset: 0x14 */ + __IO uint32_t BGOR; /*!< DMA2D Background Offset Register, Address offset: 0x18 */ + __IO uint32_t FGPFCCR; /*!< DMA2D Foreground PFC Control Register, Address offset: 0x1C */ + __IO uint32_t FGCOLR; /*!< DMA2D Foreground Color Register, Address offset: 0x20 */ + __IO uint32_t BGPFCCR; /*!< DMA2D Background PFC Control Register, Address offset: 0x24 */ + __IO uint32_t BGCOLR; /*!< DMA2D Background Color Register, Address offset: 0x28 */ + __IO uint32_t FGCMAR; /*!< DMA2D Foreground CLUT Memory Address Register, Address offset: 0x2C */ + __IO uint32_t BGCMAR; /*!< DMA2D Background CLUT Memory Address Register, Address offset: 0x30 */ + __IO uint32_t OPFCCR; /*!< DMA2D Output PFC Control Register, Address offset: 0x34 */ + __IO uint32_t OCOLR; /*!< DMA2D Output Color Register, Address offset: 0x38 */ + __IO uint32_t OMAR; /*!< DMA2D Output Memory Address Register, Address offset: 0x3C */ + __IO uint32_t OOR; /*!< DMA2D Output Offset Register, Address offset: 0x40 */ + __IO uint32_t NLR; /*!< DMA2D Number of Line Register, Address offset: 0x44 */ + __IO uint32_t LWR; /*!< DMA2D Line Watermark Register, Address offset: 0x48 */ + __IO uint32_t AMTCR; /*!< DMA2D AHB Master Timer Configuration Register, Address offset: 0x4C */ + uint32_t RESERVED[236]; /*!< Reserved, 0x50-0x3FF */ + __IO uint32_t FGCLUT[256]; /*!< DMA2D Foreground CLUT, Address offset:400-7FF */ + __IO uint32_t BGCLUT[256]; /*!< DMA2D Background CLUT, Address offset:800-BFF */ +} DMA2D_TypeDef; + +/** + * @brief Ethernet MAC + */ + +typedef struct +{ + __IO uint32_t MACCR; + __IO uint32_t MACFFR; + __IO uint32_t MACHTHR; + __IO uint32_t MACHTLR; + __IO uint32_t MACMIIAR; + __IO uint32_t MACMIIDR; + __IO uint32_t MACFCR; + __IO uint32_t MACVLANTR; /* 8 */ + uint32_t RESERVED0[2]; + __IO uint32_t MACRWUFFR; /* 11 */ + __IO uint32_t MACPMTCSR; + uint32_t RESERVED1[2]; + __IO uint32_t MACSR; /* 15 */ + __IO uint32_t MACIMR; + __IO uint32_t MACA0HR; + __IO uint32_t MACA0LR; + __IO uint32_t MACA1HR; + __IO uint32_t MACA1LR; + __IO uint32_t MACA2HR; + __IO uint32_t MACA2LR; + __IO uint32_t MACA3HR; + __IO uint32_t MACA3LR; /* 24 */ + uint32_t RESERVED2[40]; + __IO uint32_t MMCCR; /* 65 */ + __IO uint32_t MMCRIR; + __IO uint32_t MMCTIR; + __IO uint32_t MMCRIMR; + __IO uint32_t MMCTIMR; /* 69 */ + uint32_t RESERVED3[14]; + __IO uint32_t MMCTGFSCCR; /* 84 */ + __IO uint32_t MMCTGFMSCCR; + uint32_t RESERVED4[5]; + __IO uint32_t MMCTGFCR; + uint32_t RESERVED5[10]; + __IO uint32_t MMCRFCECR; + __IO uint32_t MMCRFAECR; + uint32_t RESERVED6[10]; + __IO uint32_t MMCRGUFCR; + uint32_t RESERVED7[334]; + __IO uint32_t PTPTSCR; + __IO uint32_t PTPSSIR; + __IO uint32_t PTPTSHR; + __IO uint32_t PTPTSLR; + __IO uint32_t PTPTSHUR; + __IO uint32_t PTPTSLUR; + __IO uint32_t PTPTSAR; + __IO uint32_t PTPTTHR; + __IO uint32_t PTPTTLR; + __IO uint32_t RESERVED8; + __IO uint32_t PTPTSSR; + uint32_t RESERVED9[565]; + __IO uint32_t DMABMR; + __IO uint32_t DMATPDR; + __IO uint32_t DMARPDR; + __IO uint32_t DMARDLAR; + __IO uint32_t DMATDLAR; + __IO uint32_t DMASR; + __IO uint32_t DMAOMR; + __IO uint32_t DMAIER; + __IO uint32_t DMAMFBOCR; + __IO uint32_t DMARSWTR; + uint32_t RESERVED10[8]; + __IO uint32_t DMACHTDR; + __IO uint32_t DMACHRDR; + __IO uint32_t DMACHTBAR; + __IO uint32_t DMACHRBAR; +} ETH_TypeDef; + +/** + * @brief External Interrupt/Event Controller + */ + +typedef struct +{ + __IO uint32_t IMR; /*!< EXTI Interrupt mask register, Address offset: 0x00 */ + __IO uint32_t EMR; /*!< EXTI Event mask register, Address offset: 0x04 */ + __IO uint32_t RTSR; /*!< EXTI Rising trigger selection register, Address offset: 0x08 */ + __IO uint32_t FTSR; /*!< EXTI Falling trigger selection register, Address offset: 0x0C */ + __IO uint32_t SWIER; /*!< EXTI Software interrupt event register, Address offset: 0x10 */ + __IO uint32_t PR; /*!< EXTI Pending register, Address offset: 0x14 */ +} EXTI_TypeDef; + +/** + * @brief FLASH Registers + */ + +typedef struct +{ + __IO uint32_t ACR; /*!< FLASH access control register, Address offset: 0x00 */ + __IO uint32_t KEYR; /*!< FLASH key register, Address offset: 0x04 */ + __IO uint32_t OPTKEYR; /*!< FLASH option key register, Address offset: 0x08 */ + __IO uint32_t SR; /*!< FLASH status register, Address offset: 0x0C */ + __IO uint32_t CR; /*!< FLASH control register, Address offset: 0x10 */ + __IO uint32_t OPTCR; /*!< FLASH option control register , Address offset: 0x14 */ + __IO uint32_t OPTCR1; /*!< FLASH option control register 1, Address offset: 0x18 */ +} FLASH_TypeDef; + +/** + * @brief Flexible Memory Controller + */ + +typedef struct +{ + __IO uint32_t BTCR[8]; /*!< NOR/PSRAM chip-select control register(BCR) and chip-select timing register(BTR), Address offset: 0x00-1C */ +} FMC_Bank1_TypeDef; + +/** + * @brief Flexible Memory Controller Bank1E + */ + +typedef struct +{ + __IO uint32_t BWTR[7]; /*!< NOR/PSRAM write timing registers, Address offset: 0x104-0x11C */ +} FMC_Bank1E_TypeDef; + +/** + * @brief Flexible Memory Controller Bank2 + */ + +typedef struct +{ + __IO uint32_t PCR2; /*!< NAND Flash control register 2, Address offset: 0x60 */ + __IO uint32_t SR2; /*!< NAND Flash FIFO status and interrupt register 2, Address offset: 0x64 */ + __IO uint32_t PMEM2; /*!< NAND Flash Common memory space timing register 2, Address offset: 0x68 */ + __IO uint32_t PATT2; /*!< NAND Flash Attribute memory space timing register 2, Address offset: 0x6C */ + uint32_t RESERVED0; /*!< Reserved, 0x70 */ + __IO uint32_t ECCR2; /*!< NAND Flash ECC result registers 2, Address offset: 0x74 */ + uint32_t RESERVED1; /*!< Reserved, 0x78 */ + uint32_t RESERVED2; /*!< Reserved, 0x7C */ + __IO uint32_t PCR3; /*!< NAND Flash control register 3, Address offset: 0x80 */ + __IO uint32_t SR3; /*!< NAND Flash FIFO status and interrupt register 3, Address offset: 0x84 */ + __IO uint32_t PMEM3; /*!< NAND Flash Common memory space timing register 3, Address offset: 0x88 */ + __IO uint32_t PATT3; /*!< NAND Flash Attribute memory space timing register 3, Address offset: 0x8C */ + uint32_t RESERVED3; /*!< Reserved, 0x90 */ + __IO uint32_t ECCR3; /*!< NAND Flash ECC result registers 3, Address offset: 0x94 */ +} FMC_Bank2_3_TypeDef; + +/** + * @brief Flexible Memory Controller Bank4 + */ + +typedef struct +{ + __IO uint32_t PCR4; /*!< PC Card control register 4, Address offset: 0xA0 */ + __IO uint32_t SR4; /*!< PC Card FIFO status and interrupt register 4, Address offset: 0xA4 */ + __IO uint32_t PMEM4; /*!< PC Card Common memory space timing register 4, Address offset: 0xA8 */ + __IO uint32_t PATT4; /*!< PC Card Attribute memory space timing register 4, Address offset: 0xAC */ + __IO uint32_t PIO4; /*!< PC Card I/O space timing register 4, Address offset: 0xB0 */ +} FMC_Bank4_TypeDef; + +/** + * @brief Flexible Memory Controller Bank5_6 + */ + +typedef struct +{ + __IO uint32_t SDCR[2]; /*!< SDRAM Control registers , Address offset: 0x140-0x144 */ + __IO uint32_t SDTR[2]; /*!< SDRAM Timing registers , Address offset: 0x148-0x14C */ + __IO uint32_t SDCMR; /*!< SDRAM Command Mode register, Address offset: 0x150 */ + __IO uint32_t SDRTR; /*!< SDRAM Refresh Timer register, Address offset: 0x154 */ + __IO uint32_t SDSR; /*!< SDRAM Status register, Address offset: 0x158 */ +} FMC_Bank5_6_TypeDef; + +/** + * @brief General Purpose I/O + */ + +typedef struct +{ + __IO uint32_t MODER; /*!< GPIO port mode register, Address offset: 0x00 */ + __IO uint32_t OTYPER; /*!< GPIO port output type register, Address offset: 0x04 */ + __IO uint32_t OSPEEDR; /*!< GPIO port output speed register, Address offset: 0x08 */ + __IO uint32_t PUPDR; /*!< GPIO port pull-up/pull-down register, Address offset: 0x0C */ + __IO uint32_t IDR; /*!< GPIO port input data register, Address offset: 0x10 */ + __IO uint32_t ODR; /*!< GPIO port output data register, Address offset: 0x14 */ + __IO uint32_t BSRR; /*!< GPIO port bit set/reset register, Address offset: 0x18 */ + __IO uint32_t LCKR; /*!< GPIO port configuration lock register, Address offset: 0x1C */ + __IO uint32_t AFR[2]; /*!< GPIO alternate function registers, Address offset: 0x20-0x24 */ +} GPIO_TypeDef; + +/** + * @brief System configuration controller + */ + +typedef struct +{ + __IO uint32_t MEMRMP; /*!< SYSCFG memory remap register, Address offset: 0x00 */ + __IO uint32_t PMC; /*!< SYSCFG peripheral mode configuration register, Address offset: 0x04 */ + __IO uint32_t EXTICR[4]; /*!< SYSCFG external interrupt configuration registers, Address offset: 0x08-0x14 */ + uint32_t RESERVED[2]; /*!< Reserved, 0x18-0x1C */ + __IO uint32_t CMPCR; /*!< SYSCFG Compensation cell control register, Address offset: 0x20 */ +} SYSCFG_TypeDef; + +/** + * @brief Inter-integrated Circuit Interface + */ + +typedef struct +{ + __IO uint32_t CR1; /*!< I2C Control register 1, Address offset: 0x00 */ + __IO uint32_t CR2; /*!< I2C Control register 2, Address offset: 0x04 */ + __IO uint32_t OAR1; /*!< I2C Own address register 1, Address offset: 0x08 */ + __IO uint32_t OAR2; /*!< I2C Own address register 2, Address offset: 0x0C */ + __IO uint32_t DR; /*!< I2C Data register, Address offset: 0x10 */ + __IO uint32_t SR1; /*!< I2C Status register 1, Address offset: 0x14 */ + __IO uint32_t SR2; /*!< I2C Status register 2, Address offset: 0x18 */ + __IO uint32_t CCR; /*!< I2C Clock control register, Address offset: 0x1C */ + __IO uint32_t TRISE; /*!< I2C TRISE register, Address offset: 0x20 */ + __IO uint32_t FLTR; /*!< I2C FLTR register, Address offset: 0x24 */ +} I2C_TypeDef; + +/** + * @brief Independent WATCHDOG + */ + +typedef struct +{ + __IO uint32_t KR; /*!< IWDG Key register, Address offset: 0x00 */ + __IO uint32_t PR; /*!< IWDG Prescaler register, Address offset: 0x04 */ + __IO uint32_t RLR; /*!< IWDG Reload register, Address offset: 0x08 */ + __IO uint32_t SR; /*!< IWDG Status register, Address offset: 0x0C */ +} IWDG_TypeDef; + +/** + * @brief LCD-TFT Display Controller + */ + +typedef struct +{ + uint32_t RESERVED0[2]; /*!< Reserved, 0x00-0x04 */ + __IO uint32_t SSCR; /*!< LTDC Synchronization Size Configuration Register, Address offset: 0x08 */ + __IO uint32_t BPCR; /*!< LTDC Back Porch Configuration Register, Address offset: 0x0C */ + __IO uint32_t AWCR; /*!< LTDC Active Width Configuration Register, Address offset: 0x10 */ + __IO uint32_t TWCR; /*!< LTDC Total Width Configuration Register, Address offset: 0x14 */ + __IO uint32_t GCR; /*!< LTDC Global Control Register, Address offset: 0x18 */ + uint32_t RESERVED1[2]; /*!< Reserved, 0x1C-0x20 */ + __IO uint32_t SRCR; /*!< LTDC Shadow Reload Configuration Register, Address offset: 0x24 */ + uint32_t RESERVED2[1]; /*!< Reserved, 0x28 */ + __IO uint32_t BCCR; /*!< LTDC Background Color Configuration Register, Address offset: 0x2C */ + uint32_t RESERVED3[1]; /*!< Reserved, 0x30 */ + __IO uint32_t IER; /*!< LTDC Interrupt Enable Register, Address offset: 0x34 */ + __IO uint32_t ISR; /*!< LTDC Interrupt Status Register, Address offset: 0x38 */ + __IO uint32_t ICR; /*!< LTDC Interrupt Clear Register, Address offset: 0x3C */ + __IO uint32_t LIPCR; /*!< LTDC Line Interrupt Position Configuration Register, Address offset: 0x40 */ + __IO uint32_t CPSR; /*!< LTDC Current Position Status Register, Address offset: 0x44 */ + __IO uint32_t CDSR; /*!< LTDC Current Display Status Register, Address offset: 0x48 */ +} LTDC_TypeDef; + +/** + * @brief LCD-TFT Display layer x Controller + */ + +typedef struct +{ + __IO uint32_t CR; /*!< LTDC Layerx Control Register Address offset: 0x84 */ + __IO uint32_t WHPCR; /*!< LTDC Layerx Window Horizontal Position Configuration Register Address offset: 0x88 */ + __IO uint32_t WVPCR; /*!< LTDC Layerx Window Vertical Position Configuration Register Address offset: 0x8C */ + __IO uint32_t CKCR; /*!< LTDC Layerx Color Keying Configuration Register Address offset: 0x90 */ + __IO uint32_t PFCR; /*!< LTDC Layerx Pixel Format Configuration Register Address offset: 0x94 */ + __IO uint32_t CACR; /*!< LTDC Layerx Constant Alpha Configuration Register Address offset: 0x98 */ + __IO uint32_t DCCR; /*!< LTDC Layerx Default Color Configuration Register Address offset: 0x9C */ + __IO uint32_t BFCR; /*!< LTDC Layerx Blending Factors Configuration Register Address offset: 0xA0 */ + uint32_t RESERVED0[2]; /*!< Reserved */ + __IO uint32_t CFBAR; /*!< LTDC Layerx Color Frame Buffer Address Register Address offset: 0xAC */ + __IO uint32_t CFBLR; /*!< LTDC Layerx Color Frame Buffer Length Register Address offset: 0xB0 */ + __IO uint32_t CFBLNR; /*!< LTDC Layerx ColorFrame Buffer Line Number Register Address offset: 0xB4 */ + uint32_t RESERVED1[3]; /*!< Reserved */ + __IO uint32_t CLUTWR; /*!< LTDC Layerx CLUT Write Register Address offset: 0x144 */ + +} LTDC_Layer_TypeDef; + +/** + * @brief Power Control + */ + +typedef struct +{ + __IO uint32_t CR; /*!< PWR power control register, Address offset: 0x00 */ + __IO uint32_t CSR; /*!< PWR power control/status register, Address offset: 0x04 */ +} PWR_TypeDef; + +/** + * @brief Reset and Clock Control + */ + +typedef struct +{ + __IO uint32_t CR; /*!< RCC clock control register, Address offset: 0x00 */ + __IO uint32_t PLLCFGR; /*!< RCC PLL configuration register, Address offset: 0x04 */ + __IO uint32_t CFGR; /*!< RCC clock configuration register, Address offset: 0x08 */ + __IO uint32_t CIR; /*!< RCC clock interrupt register, Address offset: 0x0C */ + __IO uint32_t AHB1RSTR; /*!< RCC AHB1 peripheral reset register, Address offset: 0x10 */ + __IO uint32_t AHB2RSTR; /*!< RCC AHB2 peripheral reset register, Address offset: 0x14 */ + __IO uint32_t AHB3RSTR; /*!< RCC AHB3 peripheral reset register, Address offset: 0x18 */ + uint32_t RESERVED0; /*!< Reserved, 0x1C */ + __IO uint32_t APB1RSTR; /*!< RCC APB1 peripheral reset register, Address offset: 0x20 */ + __IO uint32_t APB2RSTR; /*!< RCC APB2 peripheral reset register, Address offset: 0x24 */ + uint32_t RESERVED1[2]; /*!< Reserved, 0x28-0x2C */ + __IO uint32_t AHB1ENR; /*!< RCC AHB1 peripheral clock register, Address offset: 0x30 */ + __IO uint32_t AHB2ENR; /*!< RCC AHB2 peripheral clock register, Address offset: 0x34 */ + __IO uint32_t AHB3ENR; /*!< RCC AHB3 peripheral clock register, Address offset: 0x38 */ + uint32_t RESERVED2; /*!< Reserved, 0x3C */ + __IO uint32_t APB1ENR; /*!< RCC APB1 peripheral clock enable register, Address offset: 0x40 */ + __IO uint32_t APB2ENR; /*!< RCC APB2 peripheral clock enable register, Address offset: 0x44 */ + uint32_t RESERVED3[2]; /*!< Reserved, 0x48-0x4C */ + __IO uint32_t AHB1LPENR; /*!< RCC AHB1 peripheral clock enable in low power mode register, Address offset: 0x50 */ + __IO uint32_t AHB2LPENR; /*!< RCC AHB2 peripheral clock enable in low power mode register, Address offset: 0x54 */ + __IO uint32_t AHB3LPENR; /*!< RCC AHB3 peripheral clock enable in low power mode register, Address offset: 0x58 */ + uint32_t RESERVED4; /*!< Reserved, 0x5C */ + __IO uint32_t APB1LPENR; /*!< RCC APB1 peripheral clock enable in low power mode register, Address offset: 0x60 */ + __IO uint32_t APB2LPENR; /*!< RCC APB2 peripheral clock enable in low power mode register, Address offset: 0x64 */ + uint32_t RESERVED5[2]; /*!< Reserved, 0x68-0x6C */ + __IO uint32_t BDCR; /*!< RCC Backup domain control register, Address offset: 0x70 */ + __IO uint32_t CSR; /*!< RCC clock control & status register, Address offset: 0x74 */ + uint32_t RESERVED6[2]; /*!< Reserved, 0x78-0x7C */ + __IO uint32_t SSCGR; /*!< RCC spread spectrum clock generation register, Address offset: 0x80 */ + __IO uint32_t PLLI2SCFGR; /*!< RCC PLLI2S configuration register, Address offset: 0x84 */ + __IO uint32_t PLLSAICFGR; /*!< RCC PLLSAI configuration register, Address offset: 0x88 */ + __IO uint32_t DCKCFGR; /*!< RCC Dedicated Clocks configuration register, Address offset: 0x8C */ + +} RCC_TypeDef; + +/** + * @brief Real-Time Clock + */ + +typedef struct +{ + __IO uint32_t TR; /*!< RTC time register, Address offset: 0x00 */ + __IO uint32_t DR; /*!< RTC date register, Address offset: 0x04 */ + __IO uint32_t CR; /*!< RTC control register, Address offset: 0x08 */ + __IO uint32_t ISR; /*!< RTC initialization and status register, Address offset: 0x0C */ + __IO uint32_t PRER; /*!< RTC prescaler register, Address offset: 0x10 */ + __IO uint32_t WUTR; /*!< RTC wakeup timer register, Address offset: 0x14 */ + __IO uint32_t CALIBR; /*!< RTC calibration register, Address offset: 0x18 */ + __IO uint32_t ALRMAR; /*!< RTC alarm A register, Address offset: 0x1C */ + __IO uint32_t ALRMBR; /*!< RTC alarm B register, Address offset: 0x20 */ + __IO uint32_t WPR; /*!< RTC write protection register, Address offset: 0x24 */ + __IO uint32_t SSR; /*!< RTC sub second register, Address offset: 0x28 */ + __IO uint32_t SHIFTR; /*!< RTC shift control register, Address offset: 0x2C */ + __IO uint32_t TSTR; /*!< RTC time stamp time register, Address offset: 0x30 */ + __IO uint32_t TSDR; /*!< RTC time stamp date register, Address offset: 0x34 */ + __IO uint32_t TSSSR; /*!< RTC time-stamp sub second register, Address offset: 0x38 */ + __IO uint32_t CALR; /*!< RTC calibration register, Address offset: 0x3C */ + __IO uint32_t TAFCR; /*!< RTC tamper and alternate function configuration register, Address offset: 0x40 */ + __IO uint32_t ALRMASSR;/*!< RTC alarm A sub second register, Address offset: 0x44 */ + __IO uint32_t ALRMBSSR;/*!< RTC alarm B sub second register, Address offset: 0x48 */ + uint32_t RESERVED7; /*!< Reserved, 0x4C */ + __IO uint32_t BKP0R; /*!< RTC backup register 1, Address offset: 0x50 */ + __IO uint32_t BKP1R; /*!< RTC backup register 1, Address offset: 0x54 */ + __IO uint32_t BKP2R; /*!< RTC backup register 2, Address offset: 0x58 */ + __IO uint32_t BKP3R; /*!< RTC backup register 3, Address offset: 0x5C */ + __IO uint32_t BKP4R; /*!< RTC backup register 4, Address offset: 0x60 */ + __IO uint32_t BKP5R; /*!< RTC backup register 5, Address offset: 0x64 */ + __IO uint32_t BKP6R; /*!< RTC backup register 6, Address offset: 0x68 */ + __IO uint32_t BKP7R; /*!< RTC backup register 7, Address offset: 0x6C */ + __IO uint32_t BKP8R; /*!< RTC backup register 8, Address offset: 0x70 */ + __IO uint32_t BKP9R; /*!< RTC backup register 9, Address offset: 0x74 */ + __IO uint32_t BKP10R; /*!< RTC backup register 10, Address offset: 0x78 */ + __IO uint32_t BKP11R; /*!< RTC backup register 11, Address offset: 0x7C */ + __IO uint32_t BKP12R; /*!< RTC backup register 12, Address offset: 0x80 */ + __IO uint32_t BKP13R; /*!< RTC backup register 13, Address offset: 0x84 */ + __IO uint32_t BKP14R; /*!< RTC backup register 14, Address offset: 0x88 */ + __IO uint32_t BKP15R; /*!< RTC backup register 15, Address offset: 0x8C */ + __IO uint32_t BKP16R; /*!< RTC backup register 16, Address offset: 0x90 */ + __IO uint32_t BKP17R; /*!< RTC backup register 17, Address offset: 0x94 */ + __IO uint32_t BKP18R; /*!< RTC backup register 18, Address offset: 0x98 */ + __IO uint32_t BKP19R; /*!< RTC backup register 19, Address offset: 0x9C */ +} RTC_TypeDef; + +/** + * @brief Serial Audio Interface + */ + +typedef struct +{ + __IO uint32_t GCR; /*!< SAI global configuration register, Address offset: 0x00 */ +} SAI_TypeDef; + +typedef struct +{ + __IO uint32_t CR1; /*!< SAI block x configuration register 1, Address offset: 0x04 */ + __IO uint32_t CR2; /*!< SAI block x configuration register 2, Address offset: 0x08 */ + __IO uint32_t FRCR; /*!< SAI block x frame configuration register, Address offset: 0x0C */ + __IO uint32_t SLOTR; /*!< SAI block x slot register, Address offset: 0x10 */ + __IO uint32_t IMR; /*!< SAI block x interrupt mask register, Address offset: 0x14 */ + __IO uint32_t SR; /*!< SAI block x status register, Address offset: 0x18 */ + __IO uint32_t CLRFR; /*!< SAI block x clear flag register, Address offset: 0x1C */ + __IO uint32_t DR; /*!< SAI block x data register, Address offset: 0x20 */ +} SAI_Block_TypeDef; + +/** + * @brief SD host Interface + */ + +typedef struct +{ + __IO uint32_t POWER; /*!< SDIO power control register, Address offset: 0x00 */ + __IO uint32_t CLKCR; /*!< SDI clock control register, Address offset: 0x04 */ + __IO uint32_t ARG; /*!< SDIO argument register, Address offset: 0x08 */ + __IO uint32_t CMD; /*!< SDIO command register, Address offset: 0x0C */ + __I uint32_t RESPCMD; /*!< SDIO command response register, Address offset: 0x10 */ + __I uint32_t RESP1; /*!< SDIO response 1 register, Address offset: 0x14 */ + __I uint32_t RESP2; /*!< SDIO response 2 register, Address offset: 0x18 */ + __I uint32_t RESP3; /*!< SDIO response 3 register, Address offset: 0x1C */ + __I uint32_t RESP4; /*!< SDIO response 4 register, Address offset: 0x20 */ + __IO uint32_t DTIMER; /*!< SDIO data timer register, Address offset: 0x24 */ + __IO uint32_t DLEN; /*!< SDIO data length register, Address offset: 0x28 */ + __IO uint32_t DCTRL; /*!< SDIO data control register, Address offset: 0x2C */ + __I uint32_t DCOUNT; /*!< SDIO data counter register, Address offset: 0x30 */ + __I uint32_t STA; /*!< SDIO status register, Address offset: 0x34 */ + __IO uint32_t ICR; /*!< SDIO interrupt clear register, Address offset: 0x38 */ + __IO uint32_t MASK; /*!< SDIO mask register, Address offset: 0x3C */ + uint32_t RESERVED0[2]; /*!< Reserved, 0x40-0x44 */ + __I uint32_t FIFOCNT; /*!< SDIO FIFO counter register, Address offset: 0x48 */ + uint32_t RESERVED1[13]; /*!< Reserved, 0x4C-0x7C */ + __IO uint32_t FIFO; /*!< SDIO data FIFO register, Address offset: 0x80 */ +} SDIO_TypeDef; + +/** + * @brief Serial Peripheral Interface + */ + +typedef struct +{ + __IO uint32_t CR1; /*!< SPI control register 1 (not used in I2S mode), Address offset: 0x00 */ + __IO uint32_t CR2; /*!< SPI control register 2, Address offset: 0x04 */ + __IO uint32_t SR; /*!< SPI status register, Address offset: 0x08 */ + __IO uint32_t DR; /*!< SPI data register, Address offset: 0x0C */ + __IO uint32_t CRCPR; /*!< SPI CRC polynomial register (not used in I2S mode), Address offset: 0x10 */ + __IO uint32_t RXCRCR; /*!< SPI RX CRC register (not used in I2S mode), Address offset: 0x14 */ + __IO uint32_t TXCRCR; /*!< SPI TX CRC register (not used in I2S mode), Address offset: 0x18 */ + __IO uint32_t I2SCFGR; /*!< SPI_I2S configuration register, Address offset: 0x1C */ + __IO uint32_t I2SPR; /*!< SPI_I2S prescaler register, Address offset: 0x20 */ +} SPI_TypeDef; + +/** + * @brief TIM + */ + +typedef struct +{ + __IO uint32_t CR1; /*!< TIM control register 1, Address offset: 0x00 */ + __IO uint32_t CR2; /*!< TIM control register 2, Address offset: 0x04 */ + __IO uint32_t SMCR; /*!< TIM slave mode control register, Address offset: 0x08 */ + __IO uint32_t DIER; /*!< TIM DMA/interrupt enable register, Address offset: 0x0C */ + __IO uint32_t SR; /*!< TIM status register, Address offset: 0x10 */ + __IO uint32_t EGR; /*!< TIM event generation register, Address offset: 0x14 */ + __IO uint32_t CCMR1; /*!< TIM capture/compare mode register 1, Address offset: 0x18 */ + __IO uint32_t CCMR2; /*!< TIM capture/compare mode register 2, Address offset: 0x1C */ + __IO uint32_t CCER; /*!< TIM capture/compare enable register, Address offset: 0x20 */ + __IO uint32_t CNT; /*!< TIM counter register, Address offset: 0x24 */ + __IO uint32_t PSC; /*!< TIM prescaler, Address offset: 0x28 */ + __IO uint32_t ARR; /*!< TIM auto-reload register, Address offset: 0x2C */ + __IO uint32_t RCR; /*!< TIM repetition counter register, Address offset: 0x30 */ + __IO uint32_t CCR1; /*!< TIM capture/compare register 1, Address offset: 0x34 */ + __IO uint32_t CCR2; /*!< TIM capture/compare register 2, Address offset: 0x38 */ + __IO uint32_t CCR3; /*!< TIM capture/compare register 3, Address offset: 0x3C */ + __IO uint32_t CCR4; /*!< TIM capture/compare register 4, Address offset: 0x40 */ + __IO uint32_t BDTR; /*!< TIM break and dead-time register, Address offset: 0x44 */ + __IO uint32_t DCR; /*!< TIM DMA control register, Address offset: 0x48 */ + __IO uint32_t DMAR; /*!< TIM DMA address for full transfer, Address offset: 0x4C */ + __IO uint32_t OR; /*!< TIM option register, Address offset: 0x50 */ +} TIM_TypeDef; + +/** + * @brief Universal Synchronous Asynchronous Receiver Transmitter + */ + +typedef struct +{ + __IO uint32_t SR; /*!< USART Status register, Address offset: 0x00 */ + __IO uint32_t DR; /*!< USART Data register, Address offset: 0x04 */ + __IO uint32_t BRR; /*!< USART Baud rate register, Address offset: 0x08 */ + __IO uint32_t CR1; /*!< USART Control register 1, Address offset: 0x0C */ + __IO uint32_t CR2; /*!< USART Control register 2, Address offset: 0x10 */ + __IO uint32_t CR3; /*!< USART Control register 3, Address offset: 0x14 */ + __IO uint32_t GTPR; /*!< USART Guard time and prescaler register, Address offset: 0x18 */ +} USART_TypeDef; + +/** + * @brief Window WATCHDOG + */ + +typedef struct +{ + __IO uint32_t CR; /*!< WWDG Control register, Address offset: 0x00 */ + __IO uint32_t CFR; /*!< WWDG Configuration register, Address offset: 0x04 */ + __IO uint32_t SR; /*!< WWDG Status register, Address offset: 0x08 */ +} WWDG_TypeDef; + +/** + * @brief Crypto Processor + */ + +typedef struct +{ + __IO uint32_t CR; /*!< CRYP control register, Address offset: 0x00 */ + __IO uint32_t SR; /*!< CRYP status register, Address offset: 0x04 */ + __IO uint32_t DR; /*!< CRYP data input register, Address offset: 0x08 */ + __IO uint32_t DOUT; /*!< CRYP data output register, Address offset: 0x0C */ + __IO uint32_t DMACR; /*!< CRYP DMA control register, Address offset: 0x10 */ + __IO uint32_t IMSCR; /*!< CRYP interrupt mask set/clear register, Address offset: 0x14 */ + __IO uint32_t RISR; /*!< CRYP raw interrupt status register, Address offset: 0x18 */ + __IO uint32_t MISR; /*!< CRYP masked interrupt status register, Address offset: 0x1C */ + __IO uint32_t K0LR; /*!< CRYP key left register 0, Address offset: 0x20 */ + __IO uint32_t K0RR; /*!< CRYP key right register 0, Address offset: 0x24 */ + __IO uint32_t K1LR; /*!< CRYP key left register 1, Address offset: 0x28 */ + __IO uint32_t K1RR; /*!< CRYP key right register 1, Address offset: 0x2C */ + __IO uint32_t K2LR; /*!< CRYP key left register 2, Address offset: 0x30 */ + __IO uint32_t K2RR; /*!< CRYP key right register 2, Address offset: 0x34 */ + __IO uint32_t K3LR; /*!< CRYP key left register 3, Address offset: 0x38 */ + __IO uint32_t K3RR; /*!< CRYP key right register 3, Address offset: 0x3C */ + __IO uint32_t IV0LR; /*!< CRYP initialization vector left-word register 0, Address offset: 0x40 */ + __IO uint32_t IV0RR; /*!< CRYP initialization vector right-word register 0, Address offset: 0x44 */ + __IO uint32_t IV1LR; /*!< CRYP initialization vector left-word register 1, Address offset: 0x48 */ + __IO uint32_t IV1RR; /*!< CRYP initialization vector right-word register 1, Address offset: 0x4C */ + __IO uint32_t CSGCMCCM0R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 0, Address offset: 0x50 */ + __IO uint32_t CSGCMCCM1R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 1, Address offset: 0x54 */ + __IO uint32_t CSGCMCCM2R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 2, Address offset: 0x58 */ + __IO uint32_t CSGCMCCM3R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 3, Address offset: 0x5C */ + __IO uint32_t CSGCMCCM4R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 4, Address offset: 0x60 */ + __IO uint32_t CSGCMCCM5R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 5, Address offset: 0x64 */ + __IO uint32_t CSGCMCCM6R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 6, Address offset: 0x68 */ + __IO uint32_t CSGCMCCM7R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 7, Address offset: 0x6C */ + __IO uint32_t CSGCM0R; /*!< CRYP GCM/GMAC context swap register 0, Address offset: 0x70 */ + __IO uint32_t CSGCM1R; /*!< CRYP GCM/GMAC context swap register 1, Address offset: 0x74 */ + __IO uint32_t CSGCM2R; /*!< CRYP GCM/GMAC context swap register 2, Address offset: 0x78 */ + __IO uint32_t CSGCM3R; /*!< CRYP GCM/GMAC context swap register 3, Address offset: 0x7C */ + __IO uint32_t CSGCM4R; /*!< CRYP GCM/GMAC context swap register 4, Address offset: 0x80 */ + __IO uint32_t CSGCM5R; /*!< CRYP GCM/GMAC context swap register 5, Address offset: 0x84 */ + __IO uint32_t CSGCM6R; /*!< CRYP GCM/GMAC context swap register 6, Address offset: 0x88 */ + __IO uint32_t CSGCM7R; /*!< CRYP GCM/GMAC context swap register 7, Address offset: 0x8C */ +} CRYP_TypeDef; + +/** + * @brief HASH + */ + +typedef struct +{ + __IO uint32_t CR; /*!< HASH control register, Address offset: 0x00 */ + __IO uint32_t DIN; /*!< HASH data input register, Address offset: 0x04 */ + __IO uint32_t STR; /*!< HASH start register, Address offset: 0x08 */ + __IO uint32_t HR[5]; /*!< HASH digest registers, Address offset: 0x0C-0x1C */ + __IO uint32_t IMR; /*!< HASH interrupt enable register, Address offset: 0x20 */ + __IO uint32_t SR; /*!< HASH status register, Address offset: 0x24 */ + uint32_t RESERVED[52]; /*!< Reserved, 0x28-0xF4 */ + __IO uint32_t CSR[54]; /*!< HASH context swap registers, Address offset: 0x0F8-0x1CC */ +} HASH_TypeDef; + +/** + * @brief HASH_DIGEST + */ + +typedef struct +{ + __IO uint32_t HR[8]; /*!< HASH digest registers, Address offset: 0x310-0x32C */ +} HASH_DIGEST_TypeDef; + +/** + * @brief RNG + */ + +typedef struct +{ + __IO uint32_t CR; /*!< RNG control register, Address offset: 0x00 */ + __IO uint32_t SR; /*!< RNG status register, Address offset: 0x04 */ + __IO uint32_t DR; /*!< RNG data register, Address offset: 0x08 */ +} RNG_TypeDef; + + +/** + * @brief __USB_OTG_Core_register + */ +typedef struct +{ + __IO uint32_t GOTGCTL; /*!< USB_OTG Control and Status Register 000h */ + __IO uint32_t GOTGINT; /*!< USB_OTG Interrupt Register 004h */ + __IO uint32_t GAHBCFG; /*!< Core AHB Configuration Register 008h */ + __IO uint32_t GUSBCFG; /*!< Core USB Configuration Register 00Ch */ + __IO uint32_t GRSTCTL; /*!< Core Reset Register 010h */ + __IO uint32_t GINTSTS; /*!< Core Interrupt Register 014h */ + __IO uint32_t GINTMSK; /*!< Core Interrupt Mask Register 018h */ + __IO uint32_t GRXSTSR; /*!< Receive Sts Q Read Register 01Ch */ + __IO uint32_t GRXSTSP; /*!< Receive Sts Q Read & POP Register 020h */ + __IO uint32_t GRXFSIZ; /* Receive FIFO Size Register 024h */ + __IO uint32_t DIEPTXF0_HNPTXFSIZ; /*!< EP0 / Non Periodic Tx FIFO Size Register 028h*/ + __IO uint32_t HNPTXSTS; /*!< Non Periodic Tx FIFO/Queue Sts reg 02Ch */ + uint32_t Reserved30[2]; /* Reserved 030h*/ + __IO uint32_t GCCFG; /* General Purpose IO Register 038h*/ + __IO uint32_t CID; /* User ID Register 03Ch*/ + uint32_t Reserved40[48]; /* Reserved 040h-0FFh*/ + __IO uint32_t HPTXFSIZ; /* Host Periodic Tx FIFO Size Reg 100h*/ + __IO uint32_t DIEPTXF[0x0F];/* dev Periodic Transmit FIFO */ +} +USB_OTG_GlobalTypeDef; + + +/** + * @brief __device_Registers + */ +typedef struct +{ + __IO uint32_t DCFG; /* dev Configuration Register 800h*/ + __IO uint32_t DCTL; /* dev Control Register 804h*/ + __IO uint32_t DSTS; /* dev Status Register (RO) 808h*/ + uint32_t Reserved0C; /* Reserved 80Ch*/ + __IO uint32_t DIEPMSK; /* dev IN Endpoint Mask 810h*/ + __IO uint32_t DOEPMSK; /* dev OUT Endpoint Mask 814h*/ + __IO uint32_t DAINT; /* dev All Endpoints Itr Reg 818h*/ + __IO uint32_t DAINTMSK; /* dev All Endpoints Itr Mask 81Ch*/ + uint32_t Reserved20; /* Reserved 820h*/ + uint32_t Reserved9; /* Reserved 824h*/ + __IO uint32_t DVBUSDIS; /* dev VBUS discharge Register 828h*/ + __IO uint32_t DVBUSPULSE; /* dev VBUS Pulse Register 82Ch*/ + __IO uint32_t DTHRCTL; /* dev thr 830h*/ + __IO uint32_t DIEPEMPMSK; /* dev empty msk 834h*/ + __IO uint32_t DEACHINT; /* dedicated EP interrupt 838h*/ + __IO uint32_t DEACHMSK; /* dedicated EP msk 83Ch*/ + uint32_t Reserved40; /* dedicated EP mask 840h*/ + __IO uint32_t DINEP1MSK; /* dedicated EP mask 844h*/ + uint32_t Reserved44[15]; /* Reserved 844-87Ch*/ + __IO uint32_t DOUTEP1MSK; /* dedicated EP msk 884h*/ +} +USB_OTG_DeviceTypeDef; + + +/** + * @brief __IN_Endpoint-Specific_Register + */ +typedef struct +{ + __IO uint32_t DIEPCTL; /* dev IN Endpoint Control Reg 900h + (ep_num * 20h) + 00h*/ + uint32_t Reserved04; /* Reserved 900h + (ep_num * 20h) + 04h*/ + __IO uint32_t DIEPINT; /* dev IN Endpoint Itr Reg 900h + (ep_num * 20h) + 08h*/ + uint32_t Reserved0C; /* Reserved 900h + (ep_num * 20h) + 0Ch*/ + __IO uint32_t DIEPTSIZ; /* IN Endpoint Txfer Size 900h + (ep_num * 20h) + 10h*/ + __IO uint32_t DIEPDMA; /* IN Endpoint DMA Address Reg 900h + (ep_num * 20h) + 14h*/ + __IO uint32_t DTXFSTS;/*IN Endpoint Tx FIFO Status Reg 900h + (ep_num * 20h) + 18h*/ + uint32_t Reserved18; /* Reserved 900h+(ep_num*20h)+1Ch-900h+ (ep_num * 20h) + 1Ch*/ +} +USB_OTG_INEndpointTypeDef; + + +/** + * @brief __OUT_Endpoint-Specific_Registers + */ +typedef struct +{ + __IO uint32_t DOEPCTL; /* dev OUT Endpoint Control Reg B00h + (ep_num * 20h) + 00h*/ + uint32_t Reserved04; /* Reserved B00h + (ep_num * 20h) + 04h*/ + __IO uint32_t DOEPINT; /* dev OUT Endpoint Itr Reg B00h + (ep_num * 20h) + 08h*/ + uint32_t Reserved0C; /* Reserved B00h + (ep_num * 20h) + 0Ch*/ + __IO uint32_t DOEPTSIZ; /* dev OUT Endpoint Txfer Size B00h + (ep_num * 20h) + 10h*/ + __IO uint32_t DOEPDMA; /* dev OUT Endpoint DMA Address B00h + (ep_num * 20h) + 14h*/ + uint32_t Reserved18[2]; /* Reserved B00h + (ep_num * 20h) + 18h - B00h + (ep_num * 20h) + 1Ch*/ +} +USB_OTG_OUTEndpointTypeDef; + + +/** + * @brief __Host_Mode_Register_Structures + */ +typedef struct +{ + __IO uint32_t HCFG; /* Host Configuration Register 400h*/ + __IO uint32_t HFIR; /* Host Frame Interval Register 404h*/ + __IO uint32_t HFNUM; /* Host Frame Nbr/Frame Remaining 408h*/ + uint32_t Reserved40C; /* Reserved 40Ch*/ + __IO uint32_t HPTXSTS; /* Host Periodic Tx FIFO/ Queue Status 410h*/ + __IO uint32_t HAINT; /* Host All Channels Interrupt Register 414h*/ + __IO uint32_t HAINTMSK; /* Host All Channels Interrupt Mask 418h*/ +} +USB_OTG_HostTypeDef; + +/** + * @brief __Host_Channel_Specific_Registers + */ +typedef struct +{ + __IO uint32_t HCCHAR; + __IO uint32_t HCSPLT; + __IO uint32_t HCINT; + __IO uint32_t HCINTMSK; + __IO uint32_t HCTSIZ; + __IO uint32_t HCDMA; + uint32_t Reserved[2]; +} +USB_OTG_HostChannelTypeDef; +/** + * @} + */ + +/** @addtogroup Peripheral_memory_map + * @{ + */ +#define FLASH_BASE 0x08000000U /*!< FLASH(up to 2 MB) base address in the alias region */ +#define CCMDATARAM_BASE 0x10000000U /*!< CCM(core coupled memory) data RAM(64 KB) base address in the alias region */ +#define SRAM1_BASE 0x20000000U /*!< SRAM1(112 KB) base address in the alias region */ +#define SRAM2_BASE 0x2001C000U /*!< SRAM2(16 KB) base address in the alias region */ +#define SRAM3_BASE 0x20020000U /*!< SRAM3(64 KB) base address in the alias region */ +#define PERIPH_BASE 0x40000000U /*!< Peripheral base address in the alias region */ +#define BKPSRAM_BASE 0x40024000U /*!< Backup SRAM(4 KB) base address in the alias region */ +#define FMC_R_BASE 0xA0000000U /*!< FMC registers base address */ +#define SRAM1_BB_BASE 0x22000000U /*!< SRAM1(112 KB) base address in the bit-band region */ +#define SRAM2_BB_BASE 0x22380000U /*!< SRAM2(16 KB) base address in the bit-band region */ +#define SRAM3_BB_BASE 0x22400000U /*!< SRAM3(64 KB) base address in the bit-band region */ +#define PERIPH_BB_BASE 0x42000000U /*!< Peripheral base address in the bit-band region */ +#define BKPSRAM_BB_BASE 0x42480000U /*!< Backup SRAM(4 KB) base address in the bit-band region */ +#define FLASH_END 0x081FFFFFU /*!< FLASH end address */ +#define CCMDATARAM_END 0x1000FFFFU /*!< CCM data RAM end address */ + +/* Legacy defines */ +#define SRAM_BASE SRAM1_BASE +#define SRAM_BB_BASE SRAM1_BB_BASE + + +/*!< Peripheral memory map */ +#define APB1PERIPH_BASE PERIPH_BASE +#define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000U) +#define AHB1PERIPH_BASE (PERIPH_BASE + 0x00020000U) +#define AHB2PERIPH_BASE (PERIPH_BASE + 0x10000000U) + +/*!< APB1 peripherals */ +#define TIM2_BASE (APB1PERIPH_BASE + 0x0000U) +#define TIM3_BASE (APB1PERIPH_BASE + 0x0400U) +#define TIM4_BASE (APB1PERIPH_BASE + 0x0800U) +#define TIM5_BASE (APB1PERIPH_BASE + 0x0C00U) +#define TIM6_BASE (APB1PERIPH_BASE + 0x1000U) +#define TIM7_BASE (APB1PERIPH_BASE + 0x1400U) +#define TIM12_BASE (APB1PERIPH_BASE + 0x1800U) +#define TIM13_BASE (APB1PERIPH_BASE + 0x1C00U) +#define TIM14_BASE (APB1PERIPH_BASE + 0x2000U) +#define RTC_BASE (APB1PERIPH_BASE + 0x2800U) +#define WWDG_BASE (APB1PERIPH_BASE + 0x2C00U) +#define IWDG_BASE (APB1PERIPH_BASE + 0x3000U) +#define I2S2ext_BASE (APB1PERIPH_BASE + 0x3400U) +#define SPI2_BASE (APB1PERIPH_BASE + 0x3800U) +#define SPI3_BASE (APB1PERIPH_BASE + 0x3C00U) +#define I2S3ext_BASE (APB1PERIPH_BASE + 0x4000U) +#define USART2_BASE (APB1PERIPH_BASE + 0x4400U) +#define USART3_BASE (APB1PERIPH_BASE + 0x4800U) +#define UART4_BASE (APB1PERIPH_BASE + 0x4C00U) +#define UART5_BASE (APB1PERIPH_BASE + 0x5000U) +#define I2C1_BASE (APB1PERIPH_BASE + 0x5400U) +#define I2C2_BASE (APB1PERIPH_BASE + 0x5800U) +#define I2C3_BASE (APB1PERIPH_BASE + 0x5C00U) +#define CAN1_BASE (APB1PERIPH_BASE + 0x6400U) +#define CAN2_BASE (APB1PERIPH_BASE + 0x6800U) +#define PWR_BASE (APB1PERIPH_BASE + 0x7000U) +#define DAC_BASE (APB1PERIPH_BASE + 0x7400U) +#define UART7_BASE (APB1PERIPH_BASE + 0x7800U) +#define UART8_BASE (APB1PERIPH_BASE + 0x7C00U) + +/*!< APB2 peripherals */ +#define TIM1_BASE (APB2PERIPH_BASE + 0x0000U) +#define TIM8_BASE (APB2PERIPH_BASE + 0x0400U) +#define USART1_BASE (APB2PERIPH_BASE + 0x1000U) +#define USART6_BASE (APB2PERIPH_BASE + 0x1400U) +#define ADC1_BASE (APB2PERIPH_BASE + 0x2000U) +#define ADC2_BASE (APB2PERIPH_BASE + 0x2100U) +#define ADC3_BASE (APB2PERIPH_BASE + 0x2200U) +#define ADC_BASE (APB2PERIPH_BASE + 0x2300U) +#define SDIO_BASE (APB2PERIPH_BASE + 0x2C00U) +#define SPI1_BASE (APB2PERIPH_BASE + 0x3000U) +#define SPI4_BASE (APB2PERIPH_BASE + 0x3400U) +#define SYSCFG_BASE (APB2PERIPH_BASE + 0x3800U) +#define EXTI_BASE (APB2PERIPH_BASE + 0x3C00U) +#define TIM9_BASE (APB2PERIPH_BASE + 0x4000U) +#define TIM10_BASE (APB2PERIPH_BASE + 0x4400U) +#define TIM11_BASE (APB2PERIPH_BASE + 0x4800U) +#define SPI5_BASE (APB2PERIPH_BASE + 0x5000U) +#define SPI6_BASE (APB2PERIPH_BASE + 0x5400U) +#define SAI1_BASE (APB2PERIPH_BASE + 0x5800U) +#define SAI1_Block_A_BASE (SAI1_BASE + 0x004U) +#define SAI1_Block_B_BASE (SAI1_BASE + 0x024U) +#define LTDC_BASE (APB2PERIPH_BASE + 0x6800U) +#define LTDC_Layer1_BASE (LTDC_BASE + 0x84U) +#define LTDC_Layer2_BASE (LTDC_BASE + 0x104U) + +/*!< AHB1 peripherals */ +#define GPIOA_BASE (AHB1PERIPH_BASE + 0x0000U) +#define GPIOB_BASE (AHB1PERIPH_BASE + 0x0400U) +#define GPIOC_BASE (AHB1PERIPH_BASE + 0x0800U) +#define GPIOD_BASE (AHB1PERIPH_BASE + 0x0C00U) +#define GPIOE_BASE (AHB1PERIPH_BASE + 0x1000U) +#define GPIOF_BASE (AHB1PERIPH_BASE + 0x1400U) +#define GPIOG_BASE (AHB1PERIPH_BASE + 0x1800U) +#define GPIOH_BASE (AHB1PERIPH_BASE + 0x1C00U) +#define GPIOI_BASE (AHB1PERIPH_BASE + 0x2000U) +#define GPIOJ_BASE (AHB1PERIPH_BASE + 0x2400U) +#define GPIOK_BASE (AHB1PERIPH_BASE + 0x2800U) +#define CRC_BASE (AHB1PERIPH_BASE + 0x3000U) +#define RCC_BASE (AHB1PERIPH_BASE + 0x3800U) +#define FLASH_R_BASE (AHB1PERIPH_BASE + 0x3C00U) +#define DMA1_BASE (AHB1PERIPH_BASE + 0x6000U) +#define DMA1_Stream0_BASE (DMA1_BASE + 0x010U) +#define DMA1_Stream1_BASE (DMA1_BASE + 0x028U) +#define DMA1_Stream2_BASE (DMA1_BASE + 0x040U) +#define DMA1_Stream3_BASE (DMA1_BASE + 0x058U) +#define DMA1_Stream4_BASE (DMA1_BASE + 0x070U) +#define DMA1_Stream5_BASE (DMA1_BASE + 0x088U) +#define DMA1_Stream6_BASE (DMA1_BASE + 0x0A0U) +#define DMA1_Stream7_BASE (DMA1_BASE + 0x0B8U) +#define DMA2_BASE (AHB1PERIPH_BASE + 0x6400U) +#define DMA2_Stream0_BASE (DMA2_BASE + 0x010U) +#define DMA2_Stream1_BASE (DMA2_BASE + 0x028U) +#define DMA2_Stream2_BASE (DMA2_BASE + 0x040U) +#define DMA2_Stream3_BASE (DMA2_BASE + 0x058U) +#define DMA2_Stream4_BASE (DMA2_BASE + 0x070U) +#define DMA2_Stream5_BASE (DMA2_BASE + 0x088U) +#define DMA2_Stream6_BASE (DMA2_BASE + 0x0A0U) +#define DMA2_Stream7_BASE (DMA2_BASE + 0x0B8U) +#define ETH_BASE (AHB1PERIPH_BASE + 0x8000U) +#define ETH_MAC_BASE (ETH_BASE) +#define ETH_MMC_BASE (ETH_BASE + 0x0100U) +#define ETH_PTP_BASE (ETH_BASE + 0x0700U) +#define ETH_DMA_BASE (ETH_BASE + 0x1000U) +#define DMA2D_BASE (AHB1PERIPH_BASE + 0xB000U) + +/*!< AHB2 peripherals */ +#define DCMI_BASE (AHB2PERIPH_BASE + 0x50000U) +#define CRYP_BASE (AHB2PERIPH_BASE + 0x60000U) +#define HASH_BASE (AHB2PERIPH_BASE + 0x60400U) +#define HASH_DIGEST_BASE (AHB2PERIPH_BASE + 0x60710U) +#define RNG_BASE (AHB2PERIPH_BASE + 0x60800U) + +/*!< FMC Bankx registers base address */ +#define FMC_Bank1_R_BASE (FMC_R_BASE + 0x0000U) +#define FMC_Bank1E_R_BASE (FMC_R_BASE + 0x0104U) +#define FMC_Bank2_3_R_BASE (FMC_R_BASE + 0x0060U) +#define FMC_Bank4_R_BASE (FMC_R_BASE + 0x00A0U) +#define FMC_Bank5_6_R_BASE (FMC_R_BASE + 0x0140U) + +/* Debug MCU registers base address */ +#define DBGMCU_BASE 0xE0042000U + +/*!< USB registers base address */ +#define USB_OTG_HS_PERIPH_BASE 0x40040000U +#define USB_OTG_FS_PERIPH_BASE 0x50000000U + +#define USB_OTG_GLOBAL_BASE 0x000U +#define USB_OTG_DEVICE_BASE 0x800U +#define USB_OTG_IN_ENDPOINT_BASE 0x900U +#define USB_OTG_OUT_ENDPOINT_BASE 0xB00U +#define USB_OTG_EP_REG_SIZE 0x20U +#define USB_OTG_HOST_BASE 0x400U +#define USB_OTG_HOST_PORT_BASE 0x440U +#define USB_OTG_HOST_CHANNEL_BASE 0x500U +#define USB_OTG_HOST_CHANNEL_SIZE 0x20U +#define USB_OTG_PCGCCTL_BASE 0xE00U +#define USB_OTG_FIFO_BASE 0x1000U +#define USB_OTG_FIFO_SIZE 0x1000U + +/** + * @} + */ + +/** @addtogroup Peripheral_declaration + * @{ + */ +#define TIM2 ((TIM_TypeDef *) TIM2_BASE) +#define TIM3 ((TIM_TypeDef *) TIM3_BASE) +#define TIM4 ((TIM_TypeDef *) TIM4_BASE) +#define TIM5 ((TIM_TypeDef *) TIM5_BASE) +#define TIM6 ((TIM_TypeDef *) TIM6_BASE) +#define TIM7 ((TIM_TypeDef *) TIM7_BASE) +#define TIM12 ((TIM_TypeDef *) TIM12_BASE) +#define TIM13 ((TIM_TypeDef *) TIM13_BASE) +#define TIM14 ((TIM_TypeDef *) TIM14_BASE) +#define RTC ((RTC_TypeDef *) RTC_BASE) +#define WWDG ((WWDG_TypeDef *) WWDG_BASE) +#define IWDG ((IWDG_TypeDef *) IWDG_BASE) +#define I2S2ext ((SPI_TypeDef *) I2S2ext_BASE) +#define SPI2 ((SPI_TypeDef *) SPI2_BASE) +#define SPI3 ((SPI_TypeDef *) SPI3_BASE) +#define I2S3ext ((SPI_TypeDef *) I2S3ext_BASE) +#define USART2 ((USART_TypeDef *) USART2_BASE) +#define USART3 ((USART_TypeDef *) USART3_BASE) +#define UART4 ((USART_TypeDef *) UART4_BASE) +#define UART5 ((USART_TypeDef *) UART5_BASE) +#define I2C1 ((I2C_TypeDef *) I2C1_BASE) +#define I2C2 ((I2C_TypeDef *) I2C2_BASE) +#define I2C3 ((I2C_TypeDef *) I2C3_BASE) +#define CAN1 ((CAN_TypeDef *) CAN1_BASE) +#define CAN2 ((CAN_TypeDef *) CAN2_BASE) +#define PWR ((PWR_TypeDef *) PWR_BASE) +#define DAC ((DAC_TypeDef *) DAC_BASE) +#define UART7 ((USART_TypeDef *) UART7_BASE) +#define UART8 ((USART_TypeDef *) UART8_BASE) +#define TIM1 ((TIM_TypeDef *) TIM1_BASE) +#define TIM8 ((TIM_TypeDef *) TIM8_BASE) +#define USART1 ((USART_TypeDef *) USART1_BASE) +#define USART6 ((USART_TypeDef *) USART6_BASE) +#define ADC ((ADC_Common_TypeDef *) ADC_BASE) +#define ADC1 ((ADC_TypeDef *) ADC1_BASE) +#define ADC2 ((ADC_TypeDef *) ADC2_BASE) +#define ADC3 ((ADC_TypeDef *) ADC3_BASE) +#define SDIO ((SDIO_TypeDef *) SDIO_BASE) +#define SPI1 ((SPI_TypeDef *) SPI1_BASE) +#define SPI4 ((SPI_TypeDef *) SPI4_BASE) +#define SYSCFG ((SYSCFG_TypeDef *) SYSCFG_BASE) +#define EXTI ((EXTI_TypeDef *) EXTI_BASE) +#define TIM9 ((TIM_TypeDef *) TIM9_BASE) +#define TIM10 ((TIM_TypeDef *) TIM10_BASE) +#define TIM11 ((TIM_TypeDef *) TIM11_BASE) +#define SPI5 ((SPI_TypeDef *) SPI5_BASE) +#define SPI6 ((SPI_TypeDef *) SPI6_BASE) +#define SAI1 ((SAI_TypeDef *) SAI1_BASE) +#define SAI1_Block_A ((SAI_Block_TypeDef *)SAI1_Block_A_BASE) +#define SAI1_Block_B ((SAI_Block_TypeDef *)SAI1_Block_B_BASE) +#define LTDC ((LTDC_TypeDef *)LTDC_BASE) +#define LTDC_Layer1 ((LTDC_Layer_TypeDef *)LTDC_Layer1_BASE) +#define LTDC_Layer2 ((LTDC_Layer_TypeDef *)LTDC_Layer2_BASE) + +#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) +#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE) +#define GPIOC ((GPIO_TypeDef *) GPIOC_BASE) +#define GPIOD ((GPIO_TypeDef *) GPIOD_BASE) +#define GPIOE ((GPIO_TypeDef *) GPIOE_BASE) +#define GPIOF ((GPIO_TypeDef *) GPIOF_BASE) +#define GPIOG ((GPIO_TypeDef *) GPIOG_BASE) +#define GPIOH ((GPIO_TypeDef *) GPIOH_BASE) +#define GPIOI ((GPIO_TypeDef *) GPIOI_BASE) +#define GPIOJ ((GPIO_TypeDef *) GPIOJ_BASE) +#define GPIOK ((GPIO_TypeDef *) GPIOK_BASE) +#define CRC ((CRC_TypeDef *) CRC_BASE) +#define RCC ((RCC_TypeDef *) RCC_BASE) +#define FLASH ((FLASH_TypeDef *) FLASH_R_BASE) +#define DMA1 ((DMA_TypeDef *) DMA1_BASE) +#define DMA1_Stream0 ((DMA_Stream_TypeDef *) DMA1_Stream0_BASE) +#define DMA1_Stream1 ((DMA_Stream_TypeDef *) DMA1_Stream1_BASE) +#define DMA1_Stream2 ((DMA_Stream_TypeDef *) DMA1_Stream2_BASE) +#define DMA1_Stream3 ((DMA_Stream_TypeDef *) DMA1_Stream3_BASE) +#define DMA1_Stream4 ((DMA_Stream_TypeDef *) DMA1_Stream4_BASE) +#define DMA1_Stream5 ((DMA_Stream_TypeDef *) DMA1_Stream5_BASE) +#define DMA1_Stream6 ((DMA_Stream_TypeDef *) DMA1_Stream6_BASE) +#define DMA1_Stream7 ((DMA_Stream_TypeDef *) DMA1_Stream7_BASE) +#define DMA2 ((DMA_TypeDef *) DMA2_BASE) +#define DMA2_Stream0 ((DMA_Stream_TypeDef *) DMA2_Stream0_BASE) +#define DMA2_Stream1 ((DMA_Stream_TypeDef *) DMA2_Stream1_BASE) +#define DMA2_Stream2 ((DMA_Stream_TypeDef *) DMA2_Stream2_BASE) +#define DMA2_Stream3 ((DMA_Stream_TypeDef *) DMA2_Stream3_BASE) +#define DMA2_Stream4 ((DMA_Stream_TypeDef *) DMA2_Stream4_BASE) +#define DMA2_Stream5 ((DMA_Stream_TypeDef *) DMA2_Stream5_BASE) +#define DMA2_Stream6 ((DMA_Stream_TypeDef *) DMA2_Stream6_BASE) +#define DMA2_Stream7 ((DMA_Stream_TypeDef *) DMA2_Stream7_BASE) +#define ETH ((ETH_TypeDef *) ETH_BASE) +#define DMA2D ((DMA2D_TypeDef *)DMA2D_BASE) +#define DCMI ((DCMI_TypeDef *) DCMI_BASE) +#define CRYP ((CRYP_TypeDef *) CRYP_BASE) +#define HASH ((HASH_TypeDef *) HASH_BASE) +#define HASH_DIGEST ((HASH_DIGEST_TypeDef *) HASH_DIGEST_BASE) +#define RNG ((RNG_TypeDef *) RNG_BASE) +#define FMC_Bank1 ((FMC_Bank1_TypeDef *) FMC_Bank1_R_BASE) +#define FMC_Bank1E ((FMC_Bank1E_TypeDef *) FMC_Bank1E_R_BASE) +#define FMC_Bank2_3 ((FMC_Bank2_3_TypeDef *) FMC_Bank2_3_R_BASE) +#define FMC_Bank4 ((FMC_Bank4_TypeDef *) FMC_Bank4_R_BASE) +#define FMC_Bank5_6 ((FMC_Bank5_6_TypeDef *) FMC_Bank5_6_R_BASE) + +#define DBGMCU ((DBGMCU_TypeDef *) DBGMCU_BASE) + +#define USB_OTG_FS ((USB_OTG_GlobalTypeDef *) USB_OTG_FS_PERIPH_BASE) +#define USB_OTG_HS ((USB_OTG_GlobalTypeDef *) USB_OTG_HS_PERIPH_BASE) + +/** + * @} + */ + +/** @addtogroup Exported_constants + * @{ + */ + + /** @addtogroup Peripheral_Registers_Bits_Definition + * @{ + */ + +/******************************************************************************/ +/* Peripheral Registers_Bits_Definition */ +/******************************************************************************/ + +/******************************************************************************/ +/* */ +/* Analog to Digital Converter */ +/* */ +/******************************************************************************/ +/******************** Bit definition for ADC_SR register ********************/ +#define ADC_SR_AWD 0x00000001U /*!
      © COPYRIGHT(c) 2016 STMicroelectronics

    oS&gwtI>EGi7`+asP)lYi3&~CH>wz%~y}& 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 AYybcN delta 94597 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 diff --git a/targets/TARGET_Maxim/TARGET_MAX32610/TOOLCHAIN_GCC_ARM/libexactLE.a b/targets/TARGET_Maxim/TARGET_MAX32610/TOOLCHAIN_GCC_ARM/libexactLE.a index 996a08ba8f2d099c40f4a121713fcb411d576c98..7ac5141b89d6ca15664797c917ad7cf2c066c72c 100644 GIT binary patch literal 1173804 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

  • + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f4xx + * @{ + */ + +#ifndef __STM32F4xx_H +#define __STM32F4xx_H + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +/** @addtogroup Library_configuration_section + * @{ + */ + +/** + * @brief STM32 Family + */ +#if !defined (STM32F4) +#define STM32F4 +#endif /* STM32F4 */ + +/* Uncomment the line below according to the target STM32 device used in your + application + */ +#if !defined (STM32F405xx) && !defined (STM32F415xx) && !defined (STM32F407xx) && !defined (STM32F417xx) && \ + !defined (STM32F427xx) && !defined (STM32F437xx) && !defined (STM32F429xx) && !defined (STM32F439xx) && \ + !defined (STM32F401xC) && !defined (STM32F401xE) && !defined (STM32F410Tx) && !defined (STM32F410Cx) && \ + !defined (STM32F410Rx) && !defined (STM32F411xE) && !defined (STM32F446xx) && !defined (STM32F469xx) && \ + !defined (STM32F479xx) && !defined (STM32F412Cx) && !defined (STM32F412Rx) && !defined (STM32F412Vx) && \ + !defined (STM32F412Zx) + /* #define STM32F405xx */ /*!< STM32F405RG, STM32F405VG and STM32F405ZG Devices */ + /* #define STM32F415xx */ /*!< STM32F415RG, STM32F415VG and STM32F415ZG Devices */ + /* #define STM32F407xx */ /*!< STM32F407VG, STM32F407VE, STM32F407ZG, STM32F407ZE, STM32F407IG and STM32F407IE Devices */ + /* #define STM32F417xx */ /*!< STM32F417VG, STM32F417VE, STM32F417ZG, STM32F417ZE, STM32F417IG and STM32F417IE Devices */ + /* #define STM32F427xx */ /*!< STM32F427VG, STM32F427VI, STM32F427ZG, STM32F427ZI, STM32F427IG and STM32F427II Devices */ + /* #define STM32F437xx */ /*!< STM32F437VG, STM32F437VI, STM32F437ZG, STM32F437ZI, STM32F437IG and STM32F437II Devices */ + /*#define STM32F429xx */ /*!< STM32F429VG, STM32F429VI, STM32F429ZG, STM32F429ZI, STM32F429BG, STM32F429BI, STM32F429NG, + STM32F439NI, STM32F429IG and STM32F429II Devices */ +#define STM32F439xx /*!< STM32F439VG, STM32F439VI, STM32F439ZG, STM32F439ZI, STM32F439BG, STM32F439BI, STM32F439NG, + STM32F439NI, STM32F439IG and STM32F439II Devices */ + /* #define STM32F401xC */ /*!< STM32F401CB, STM32F401CC, STM32F401RB, STM32F401RC, STM32F401VB and STM32F401VC Devices */ + /* #define STM32F401xE */ /*!< STM32F401CD, STM32F401RD, STM32F401VD, STM32F401CE, STM32F401RE and STM32F401VE Devices */ + /* #define STM32F410Tx */ /*!< STM32F410T8 and STM32F410TB Devices */ + /* #define STM32F410Cx */ /*!< STM32F410C8 and STM32F410CB Devices */ + /* #define STM32F410Rx */ /*!< STM32F410R8 and STM32F410RB Devices */ + /* #define STM32F411xE */ /*!< STM32F411CC, STM32F411RC, STM32F411VC, STM32F411CE, STM32F411RE and STM32F411VE Devices */ + /* #define STM32F446xx */ /*!< STM32F446MC, STM32F446ME, STM32F446RC, STM32F446RE, STM32F446VC, STM32F446VE, STM32F446ZC, + and STM32F446ZE Devices */ + /* #define STM32F469xx */ /*!< STM32F469AI, STM32F469II, STM32F469BI, STM32F469NI, STM32F469AG, STM32F469IG, STM32F469BG, + STM32F469NG, STM32F469AE, STM32F469IE, STM32F469BE and STM32F469NE Devices */ + /* #define STM32F479xx */ /*!< STM32F479AI, STM32F479II, STM32F479BI, STM32F479NI, STM32F479AG, STM32F479IG, STM32F479BG + and STM32F479NG Devices */ + /* #define STM32F412Cx */ /*!< STM32F412CEU and STM32F412CGU Devices */ + /* #define STM32F412Zx */ /*!< STM32F412ZET, STM32F412ZGT, STM32F412ZEJ and STM32F412ZGJ Devices */ + /* #define STM32F412Vx */ /*!< STM32F412VET, STM32F412VGT, STM32F412VEH and STM32F412VGH Devices */ + /* #define STM32F412Rx */ /*!< STM32F412RET, STM32F412RGT, STM32F412REY and STM32F412RGY Devices */ +#endif + +/* Tip: To avoid modifying this file each time you need to switch between these + devices, you can define the device in your toolchain compiler preprocessor. + */ +#if !defined (USE_HAL_DRIVER) +/** + * @brief Comment the line below if you will not use the peripherals drivers. + In this case, these drivers will not be included and the application code will + be based on direct access to peripherals registers + */ + #define USE_HAL_DRIVER +#endif /* USE_HAL_DRIVER */ + +/** + * @brief CMSIS version number V2.5.0 + */ +#define __STM32F4xx_CMSIS_VERSION_MAIN (0x02U) /*!< [31:24] main version */ +#define __STM32F4xx_CMSIS_VERSION_SUB1 (0x05U) /*!< [23:16] sub1 version */ +#define __STM32F4xx_CMSIS_VERSION_SUB2 (0x00U) /*!< [15:8] sub2 version */ +#define __STM32F4xx_CMSIS_VERSION_RC (0x00U) /*!< [7:0] release candidate */ +#define __STM32F4xx_CMSIS_VERSION ((__STM32F4xx_CMSIS_VERSION_MAIN << 24)\ + |(__STM32F4xx_CMSIS_VERSION_SUB1 << 16)\ + |(__STM32F4xx_CMSIS_VERSION_SUB2 << 8 )\ + |(__STM32F4xx_CMSIS_VERSION)) + +/** + * @} + */ + +/** @addtogroup Device_Included + * @{ + */ + +#if defined(STM32F405xx) + #include "stm32f405xx.h" +#elif defined(STM32F415xx) + #include "stm32f415xx.h" +#elif defined(STM32F407xx) + #include "stm32f407xx.h" +#elif defined(STM32F417xx) + #include "stm32f417xx.h" +#elif defined(STM32F427xx) + #include "stm32f427xx.h" +#elif defined(STM32F437xx) + #include "stm32f437xx.h" +#elif defined(STM32F429xx) + #include "stm32f429xx.h" +#elif defined(STM32F439xx) + #include "stm32f439xx.h" +#elif defined(STM32F401xC) + #include "stm32f401xc.h" +#elif defined(STM32F401xE) + #include "stm32f401xe.h" +#elif defined(STM32F410Tx) + #include "stm32f410tx.h" +#elif defined(STM32F410Cx) + #include "stm32f410cx.h" +#elif defined(STM32F410Rx) + #include "stm32f410rx.h" +#elif defined(STM32F411xE) + #include "stm32f411xe.h" +#elif defined(STM32F446xx) + #include "stm32f446xx.h" +#elif defined(STM32F469xx) + #include "stm32f469xx.h" +#elif defined(STM32F479xx) + #include "stm32f479xx.h" +#elif defined(STM32F412Cx) + #include "stm32f412cx.h" +#elif defined(STM32F412Zx) + #include "stm32f412zx.h" +#elif defined(STM32F412Rx) + #include "stm32f412rx.h" +#elif defined(STM32F412Vx) + #include "stm32f412vx.h" +#else + #error "Please select first the target STM32F4xx device used in your application (in stm32f4xx.h file)" +#endif + +/** + * @} + */ + +/** @addtogroup Exported_types + * @{ + */ +typedef enum +{ + RESET = 0U, + SET = !RESET +} FlagStatus, ITStatus; + +typedef enum +{ + DISABLE = 0U, + ENABLE = !DISABLE +} FunctionalState; +#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE)) + +typedef enum +{ + ERROR = 0U, + SUCCESS = !ERROR +} ErrorStatus; + +/** + * @} + */ + + +/** @addtogroup Exported_macro + * @{ + */ +#define SET_BIT(REG, BIT) ((REG) |= (BIT)) + +#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT)) + +#define READ_BIT(REG, BIT) ((REG) & (BIT)) + +#define CLEAR_REG(REG) ((REG) = (0x0)) + +#define WRITE_REG(REG, VAL) ((REG) = (VAL)) + +#define READ_REG(REG) ((REG)) + +#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK))) + +#define POSITION_VAL(VAL) (__CLZ(__RBIT(VAL))) + + +/** + * @} + */ + +#if defined (USE_HAL_DRIVER) + #include "stm32f4xx_hal.h" +#endif /* USE_HAL_DRIVER */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __STM32F4xx_H */ +/** + * @} + */ + +/** + * @} + */ + + + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/TOOLCHAIN_ARM_MICRO/startup_stm32f429xx.s b/targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/TOOLCHAIN_ARM_MICRO/startup_stm32f429xx.s similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/TOOLCHAIN_ARM_MICRO/startup_stm32f429xx.s rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/TOOLCHAIN_ARM_MICRO/startup_stm32f429xx.s diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/TOOLCHAIN_ARM_MICRO/stm32f429xx.sct b/targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/TOOLCHAIN_ARM_MICRO/stm32f429xx.sct similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/TOOLCHAIN_ARM_MICRO/stm32f429xx.sct rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/TOOLCHAIN_ARM_MICRO/stm32f429xx.sct diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/TOOLCHAIN_ARM_STD/startup_stm32f429xx.s b/targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/TOOLCHAIN_ARM_STD/startup_stm32f429xx.s similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/TOOLCHAIN_ARM_STD/startup_stm32f429xx.s rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/TOOLCHAIN_ARM_STD/startup_stm32f429xx.s diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/TOOLCHAIN_ARM_STD/stm32f429xx.sct b/targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/TOOLCHAIN_ARM_STD/stm32f429xx.sct similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/TOOLCHAIN_ARM_STD/stm32f429xx.sct rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/TOOLCHAIN_ARM_STD/stm32f429xx.sct diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/TOOLCHAIN_ARM_STD/sys.cpp b/targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/TOOLCHAIN_ARM_STD/sys.cpp similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/TOOLCHAIN_ARM_STD/sys.cpp rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/TOOLCHAIN_ARM_STD/sys.cpp diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/TOOLCHAIN_GCC_ARM/STM32F429ZI.ld b/targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/TOOLCHAIN_GCC_ARM/STM32F429ZI.ld similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/TOOLCHAIN_GCC_ARM/STM32F429ZI.ld rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/TOOLCHAIN_GCC_ARM/STM32F429ZI.ld diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/TOOLCHAIN_GCC_ARM/startup_stm32f429xx.S b/targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/TOOLCHAIN_GCC_ARM/startup_stm32f429xx.S similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/TOOLCHAIN_GCC_ARM/startup_stm32f429xx.S rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/TOOLCHAIN_GCC_ARM/startup_stm32f429xx.S diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/TOOLCHAIN_IAR/startup_stm32f429xx.S b/targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/TOOLCHAIN_IAR/startup_stm32f429xx.S similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/TOOLCHAIN_IAR/startup_stm32f429xx.S rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/TOOLCHAIN_IAR/startup_stm32f429xx.S diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/TOOLCHAIN_IAR/stm32f429xx_flash.icf b/targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/TOOLCHAIN_IAR/stm32f429xx_flash.icf similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/TOOLCHAIN_IAR/stm32f429xx_flash.icf rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/TOOLCHAIN_IAR/stm32f429xx_flash.icf diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/cmsis.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/cmsis.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/cmsis.h rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/cmsis.h diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/cmsis_nvic.c b/targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/cmsis_nvic.c similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/cmsis_nvic.c rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/cmsis_nvic.c diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/cmsis_nvic.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/cmsis_nvic.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/cmsis_nvic.h rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/cmsis_nvic.h diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/hal_tick.c b/targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/hal_tick.c similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/hal_tick.c rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/hal_tick.c diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/hal_tick.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/hal_tick.h diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/stm32f4xx_hal_conf.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/stm32f4xx_hal_conf.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/stm32f4xx_hal_conf.h rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/stm32f4xx_hal_conf.h diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/system_stm32f4xx.c b/targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/system_stm32f4xx.c similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/system_stm32f4xx.c rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/system_stm32f4xx.c diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/system_stm32f4xx.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/system_stm32f4xx.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/device/system_stm32f4xx.h rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/device/system_stm32f4xx.h diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/objects.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/objects.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F4/TARGET_NUCLEO_F429ZI/objects.h rename to targets/TARGET_STM/TARGET_STM32F4/TARGET_F429_F439/objects.h diff --git a/targets/TARGET_STM/mbed_rtx.h b/targets/TARGET_STM/mbed_rtx.h index 77febaaf6da..3f598f6c952 100644 --- a/targets/TARGET_STM/mbed_rtx.h +++ b/targets/TARGET_STM/mbed_rtx.h @@ -272,7 +272,7 @@ #define OS_CLOCK 84000000 #endif -#elif defined(TARGET_STM32F429ZI) +#elif (defined(TARGET_STM32F429ZI) || defined(TARGET_STM32F439ZI)) #ifndef INITIAL_SP #define INITIAL_SP (0x20030000UL) diff --git a/targets/targets.json b/targets/targets.json index 11143b43eca..d05bf59ca64 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -821,7 +821,7 @@ "inherits": ["Target"], "core": "Cortex-M4F", "default_toolchain": "ARM", - "extra_labels": ["STM", "STM32F4", "STM32F429", "STM32F429ZI", "STM32F429xx"], + "extra_labels": ["STM", "STM32F4", "STM32F429", "STM32F429ZI", "STM32F429xx", "F429_F439"], "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "IAR"], "progen": {"target": "nucleo-f429zi"}, "macros": ["RTC_LSI=1", "TRANSACTION_QUEUE_SIZE_SPI=2"], @@ -831,6 +831,21 @@ "release_versions": ["2", "5"], "device_name" : "STM32F429ZI" }, + "NUCLEO_F439ZI": { + "supported_form_factors": ["ARDUINO"], + "inherits": ["Target"], + "core": "Cortex-M4F", + "default_toolchain": "ARM", + "extra_labels": ["STM", "STM32F4", "STM32F439", "STM32F439ZI", "STM32F439xx", "F429_F439"], + "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "IAR"], + "progen": {"target": "nucleo-f439zi"}, + "macros": ["RTC_LSI=1", "TRANSACTION_QUEUE_SIZE_SPI=2"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "ERROR_RED", "I2C", "I2CSLAVE", "I2C_ASYNCH", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "SPI_ASYNCH", "STDIO_MESSAGES", "TRNG"], + "detect_code": ["0797"], + "features": ["LWIP"], + "release_versions": ["2", "5"], + "device_name" : "STM32F429ZI" + }, "NUCLEO_F446RE": { "supported_form_factors": ["ARDUINO", "MORPHO"], "core": "Cortex-M4F", From 025a041462316677248c132d26e84afed4189138 Mon Sep 17 00:00:00 2001 From: adustm Date: Tue, 11 Oct 2016 09:45:41 +0200 Subject: [PATCH 83/89] ADD NEW TARGET : NUCLEO_L486RG, based on existing NUCLEO_L476RG --- .../PeripheralNames.h | 0 .../PeripheralPins.c | 0 .../PinNames.h | 0 .../PortNames.h | 0 .../TARGET_NUCLEO_L476RG/device/stm32l476xx.h | 0 .../TARGET_NUCLEO_L476RG/device/stm32l4xx.h | 0 .../TARGET_NUCLEO_L486RG/device/stm32l486xx.h | 18737 ++++++++++++++++ .../TARGET_NUCLEO_L486RG/device/stm32l4xx.h | 241 + .../TOOLCHAIN_ARM_MICRO/startup_stm32l476xx.S | 0 .../TOOLCHAIN_ARM_MICRO/stm32l476xx.sct | 0 .../TOOLCHAIN_ARM_STD/startup_stm32l476xx.S | 0 .../device/TOOLCHAIN_ARM_STD/stm32l476xx.sct | 0 .../device/TOOLCHAIN_ARM_STD/sys.cpp | 0 .../device/TOOLCHAIN_GCC_ARM/STM32L476XX.ld | 0 .../TOOLCHAIN_GCC_ARM/startup_stm32l476xx.S | 0 .../TOOLCHAIN_IAR/startup_stm32l476xx.S | 0 .../device/TOOLCHAIN_IAR/stm32l476xx.icf | 0 .../device/cmsis.h | 0 .../device/cmsis_nvic.c | 0 .../device/cmsis_nvic.h | 0 .../device/hal_tick.c | 0 .../device/hal_tick.h | 0 .../device/stm32l4xx_hal_conf.h | 0 .../device/system_stm32l4xx.c | 0 .../device/system_stm32l4xx.h | 0 .../objects.h | 0 targets/TARGET_STM/mbed_rtx.h | 2 +- targets/targets.json | 14 +- 28 files changed, 18992 insertions(+), 2 deletions(-) rename targets/TARGET_STM/TARGET_STM32L4/{TARGET_NUCLEO_L476RG => TARGET_L476_L486}/PeripheralNames.h (100%) rename targets/TARGET_STM/TARGET_STM32L4/{TARGET_NUCLEO_L476RG => TARGET_L476_L486}/PeripheralPins.c (100%) rename targets/TARGET_STM/TARGET_STM32L4/{TARGET_NUCLEO_L476RG => TARGET_L476_L486}/PinNames.h (100%) rename targets/TARGET_STM/TARGET_STM32L4/{TARGET_NUCLEO_L476RG => TARGET_L476_L486}/PortNames.h (100%) rename targets/TARGET_STM/TARGET_STM32L4/{ => TARGET_L476_L486}/TARGET_NUCLEO_L476RG/device/stm32l476xx.h (100%) rename targets/TARGET_STM/TARGET_STM32L4/{ => TARGET_L476_L486}/TARGET_NUCLEO_L476RG/device/stm32l4xx.h (100%) create mode 100644 targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/TARGET_NUCLEO_L486RG/device/stm32l486xx.h create mode 100644 targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/TARGET_NUCLEO_L486RG/device/stm32l4xx.h rename targets/TARGET_STM/TARGET_STM32L4/{TARGET_NUCLEO_L476RG => TARGET_L476_L486}/device/TOOLCHAIN_ARM_MICRO/startup_stm32l476xx.S (100%) rename targets/TARGET_STM/TARGET_STM32L4/{TARGET_NUCLEO_L476RG => TARGET_L476_L486}/device/TOOLCHAIN_ARM_MICRO/stm32l476xx.sct (100%) rename targets/TARGET_STM/TARGET_STM32L4/{TARGET_NUCLEO_L476RG => TARGET_L476_L486}/device/TOOLCHAIN_ARM_STD/startup_stm32l476xx.S (100%) rename targets/TARGET_STM/TARGET_STM32L4/{TARGET_NUCLEO_L476RG => TARGET_L476_L486}/device/TOOLCHAIN_ARM_STD/stm32l476xx.sct (100%) rename targets/TARGET_STM/TARGET_STM32L4/{TARGET_NUCLEO_L476RG => TARGET_L476_L486}/device/TOOLCHAIN_ARM_STD/sys.cpp (100%) rename targets/TARGET_STM/TARGET_STM32L4/{TARGET_NUCLEO_L476RG => TARGET_L476_L486}/device/TOOLCHAIN_GCC_ARM/STM32L476XX.ld (100%) rename targets/TARGET_STM/TARGET_STM32L4/{TARGET_NUCLEO_L476RG => TARGET_L476_L486}/device/TOOLCHAIN_GCC_ARM/startup_stm32l476xx.S (100%) rename targets/TARGET_STM/TARGET_STM32L4/{TARGET_NUCLEO_L476RG => TARGET_L476_L486}/device/TOOLCHAIN_IAR/startup_stm32l476xx.S (100%) rename targets/TARGET_STM/TARGET_STM32L4/{TARGET_NUCLEO_L476RG => TARGET_L476_L486}/device/TOOLCHAIN_IAR/stm32l476xx.icf (100%) rename targets/TARGET_STM/TARGET_STM32L4/{TARGET_NUCLEO_L476RG => TARGET_L476_L486}/device/cmsis.h (100%) rename targets/TARGET_STM/TARGET_STM32L4/{TARGET_NUCLEO_L476RG => TARGET_L476_L486}/device/cmsis_nvic.c (100%) rename targets/TARGET_STM/TARGET_STM32L4/{TARGET_NUCLEO_L476RG => TARGET_L476_L486}/device/cmsis_nvic.h (100%) rename targets/TARGET_STM/TARGET_STM32L4/{TARGET_NUCLEO_L476RG => TARGET_L476_L486}/device/hal_tick.c (100%) rename targets/TARGET_STM/TARGET_STM32L4/{TARGET_NUCLEO_L476RG => TARGET_L476_L486}/device/hal_tick.h (100%) rename targets/TARGET_STM/TARGET_STM32L4/{TARGET_NUCLEO_L476RG => TARGET_L476_L486}/device/stm32l4xx_hal_conf.h (100%) rename targets/TARGET_STM/TARGET_STM32L4/{TARGET_NUCLEO_L476RG => TARGET_L476_L486}/device/system_stm32l4xx.c (100%) rename targets/TARGET_STM/TARGET_STM32L4/{TARGET_NUCLEO_L476RG => TARGET_L476_L486}/device/system_stm32l4xx.h (100%) rename targets/TARGET_STM/TARGET_STM32L4/{TARGET_NUCLEO_L476RG => TARGET_L476_L486}/objects.h (100%) diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/PeripheralNames.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/PeripheralNames.h rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/PeripheralNames.h diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/PeripheralPins.c b/targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/PeripheralPins.c similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/PeripheralPins.c rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/PeripheralPins.c diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/PinNames.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/PinNames.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/PinNames.h rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/PinNames.h diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/PortNames.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/PortNames.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/PortNames.h rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/PortNames.h diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/stm32l476xx.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/TARGET_NUCLEO_L476RG/device/stm32l476xx.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/stm32l476xx.h rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/TARGET_NUCLEO_L476RG/device/stm32l476xx.h diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/stm32l4xx.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/TARGET_NUCLEO_L476RG/device/stm32l4xx.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/stm32l4xx.h rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/TARGET_NUCLEO_L476RG/device/stm32l4xx.h diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/TARGET_NUCLEO_L486RG/device/stm32l486xx.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/TARGET_NUCLEO_L486RG/device/stm32l486xx.h new file mode 100644 index 00000000000..3d209d91795 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/TARGET_NUCLEO_L486RG/device/stm32l486xx.h @@ -0,0 +1,18737 @@ +/** + ****************************************************************************** + * @file stm32l486xx.h + * @author MCD Application Team + * @version V1.1.1 + * @date 29-April-2016 + * @brief CMSIS STM32L486xx Device Peripheral Access Layer Header File. + * + * This file contains: + * - Data structures and the address mapping for all peripherals + * - Peripheral's registers declarations and bits definition + * - Macros to access peripherals registers hardware + * + ****************************************************************************** + * @attention + * + *

    © COPYRIGHT(c) 2016 STMicroelectronics

    + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS_Device + * @{ + */ + +/** @addtogroup stm32l486xx + * @{ + */ + +#ifndef __STM32L486xx_H +#define __STM32L486xx_H + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +/** @addtogroup Configuration_section_for_CMSIS + * @{ + */ + +/** + * @brief Configuration of the Cortex-M4 Processor and Core Peripherals + */ +#define __CM4_REV 0x0001 /*!< Cortex-M4 revision r0p1 */ +#define __MPU_PRESENT 1 /*!< STM32L4XX provides an MPU */ +#define __NVIC_PRIO_BITS 4 /*!< STM32L4XX uses 4 Bits for the Priority Levels */ +#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */ +#define __FPU_PRESENT 1 /*!< FPU present */ + +/** + * @} + */ + +/** @addtogroup Peripheral_interrupt_number_definition + * @{ + */ + +/** + * @brief STM32L4XX Interrupt Number Definition, according to the selected device + * in @ref Library_configuration_section + */ +typedef enum +{ +/****** Cortex-M4 Processor Exceptions Numbers ****************************************************************/ + NonMaskableInt_IRQn = -14, /*!< 2 Cortex-M4 Non Maskable Interrupt */ + HardFault_IRQn = -13, /*!< 3 Cortex-M4 Hard Fault Interrupt */ + MemoryManagement_IRQn = -12, /*!< 4 Cortex-M4 Memory Management Interrupt */ + BusFault_IRQn = -11, /*!< 5 Cortex-M4 Bus Fault Interrupt */ + UsageFault_IRQn = -10, /*!< 6 Cortex-M4 Usage Fault Interrupt */ + SVCall_IRQn = -5, /*!< 11 Cortex-M4 SV Call Interrupt */ + DebugMonitor_IRQn = -4, /*!< 12 Cortex-M4 Debug Monitor Interrupt */ + PendSV_IRQn = -2, /*!< 14 Cortex-M4 Pend SV Interrupt */ + SysTick_IRQn = -1, /*!< 15 Cortex-M4 System Tick Interrupt */ +/****** STM32 specific Interrupt Numbers **********************************************************************/ + WWDG_IRQn = 0, /*!< Window WatchDog Interrupt */ + PVD_PVM_IRQn = 1, /*!< PVD/PVM1/PVM2/PVM3/PVM4 through EXTI Line detection Interrupts */ + TAMP_STAMP_IRQn = 2, /*!< Tamper and TimeStamp interrupts through the EXTI line */ + RTC_WKUP_IRQn = 3, /*!< RTC Wakeup interrupt through the EXTI line */ + FLASH_IRQn = 4, /*!< FLASH global Interrupt */ + RCC_IRQn = 5, /*!< RCC global Interrupt */ + EXTI0_IRQn = 6, /*!< EXTI Line0 Interrupt */ + EXTI1_IRQn = 7, /*!< EXTI Line1 Interrupt */ + EXTI2_IRQn = 8, /*!< EXTI Line2 Interrupt */ + EXTI3_IRQn = 9, /*!< EXTI Line3 Interrupt */ + EXTI4_IRQn = 10, /*!< EXTI Line4 Interrupt */ + DMA1_Channel1_IRQn = 11, /*!< DMA1 Channel 1 global Interrupt */ + DMA1_Channel2_IRQn = 12, /*!< DMA1 Channel 2 global Interrupt */ + DMA1_Channel3_IRQn = 13, /*!< DMA1 Channel 3 global Interrupt */ + DMA1_Channel4_IRQn = 14, /*!< DMA1 Channel 4 global Interrupt */ + DMA1_Channel5_IRQn = 15, /*!< DMA1 Channel 5 global Interrupt */ + DMA1_Channel6_IRQn = 16, /*!< DMA1 Channel 6 global Interrupt */ + DMA1_Channel7_IRQn = 17, /*!< DMA1 Channel 7 global Interrupt */ + ADC1_2_IRQn = 18, /*!< ADC1, ADC2 SAR global Interrupts */ + CAN1_TX_IRQn = 19, /*!< CAN1 TX Interrupt */ + CAN1_RX0_IRQn = 20, /*!< CAN1 RX0 Interrupt */ + CAN1_RX1_IRQn = 21, /*!< CAN1 RX1 Interrupt */ + CAN1_SCE_IRQn = 22, /*!< CAN1 SCE Interrupt */ + EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ + TIM1_BRK_TIM15_IRQn = 24, /*!< TIM1 Break interrupt and TIM15 global interrupt */ + TIM1_UP_TIM16_IRQn = 25, /*!< TIM1 Update Interrupt and TIM16 global interrupt */ + TIM1_TRG_COM_TIM17_IRQn = 26, /*!< TIM1 Trigger and Commutation Interrupt and TIM17 global interrupt */ + TIM1_CC_IRQn = 27, /*!< TIM1 Capture Compare Interrupt */ + TIM2_IRQn = 28, /*!< TIM2 global Interrupt */ + TIM3_IRQn = 29, /*!< TIM3 global Interrupt */ + TIM4_IRQn = 30, /*!< TIM4 global Interrupt */ + I2C1_EV_IRQn = 31, /*!< I2C1 Event Interrupt */ + I2C1_ER_IRQn = 32, /*!< I2C1 Error Interrupt */ + I2C2_EV_IRQn = 33, /*!< I2C2 Event Interrupt */ + I2C2_ER_IRQn = 34, /*!< I2C2 Error Interrupt */ + SPI1_IRQn = 35, /*!< SPI1 global Interrupt */ + SPI2_IRQn = 36, /*!< SPI2 global Interrupt */ + USART1_IRQn = 37, /*!< USART1 global Interrupt */ + USART2_IRQn = 38, /*!< USART2 global Interrupt */ + USART3_IRQn = 39, /*!< USART3 global Interrupt */ + EXTI15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ + RTC_Alarm_IRQn = 41, /*!< RTC Alarm (A and B) through EXTI Line Interrupt */ + DFSDM1_FLT3_IRQn = 42, /*!< DFSDM1 Filter 3 global Interrupt */ + TIM8_BRK_IRQn = 43, /*!< TIM8 Break Interrupt */ + TIM8_UP_IRQn = 44, /*!< TIM8 Update Interrupt */ + TIM8_TRG_COM_IRQn = 45, /*!< TIM8 Trigger and Commutation Interrupt */ + TIM8_CC_IRQn = 46, /*!< TIM8 Capture Compare Interrupt */ + ADC3_IRQn = 47, /*!< ADC3 global Interrupt */ + FMC_IRQn = 48, /*!< FMC global Interrupt */ + SDMMC1_IRQn = 49, /*!< SDMMC1 global Interrupt */ + TIM5_IRQn = 50, /*!< TIM5 global Interrupt */ + SPI3_IRQn = 51, /*!< SPI3 global Interrupt */ + UART4_IRQn = 52, /*!< UART4 global Interrupt */ + UART5_IRQn = 53, /*!< UART5 global Interrupt */ + TIM6_DAC_IRQn = 54, /*!< TIM6 global and DAC1&2 underrun error interrupts */ + TIM7_IRQn = 55, /*!< TIM7 global interrupt */ + DMA2_Channel1_IRQn = 56, /*!< DMA2 Channel 1 global Interrupt */ + DMA2_Channel2_IRQn = 57, /*!< DMA2 Channel 2 global Interrupt */ + DMA2_Channel3_IRQn = 58, /*!< DMA2 Channel 3 global Interrupt */ + DMA2_Channel4_IRQn = 59, /*!< DMA2 Channel 4 global Interrupt */ + DMA2_Channel5_IRQn = 60, /*!< DMA2 Channel 5 global Interrupt */ + DFSDM1_FLT0_IRQn = 61, /*!< DFSDM1 Filter 0 global Interrupt */ + DFSDM1_FLT1_IRQn = 62, /*!< DFSDM1 Filter 1 global Interrupt */ + DFSDM1_FLT2_IRQn = 63, /*!< DFSDM1 Filter 2 global Interrupt */ + COMP_IRQn = 64, /*!< COMP1 and COMP2 Interrupts */ + LPTIM1_IRQn = 65, /*!< LP TIM1 interrupt */ + LPTIM2_IRQn = 66, /*!< LP TIM2 interrupt */ + OTG_FS_IRQn = 67, /*!< USB OTG FS global Interrupt */ + DMA2_Channel6_IRQn = 68, /*!< DMA2 Channel 6 global interrupt */ + DMA2_Channel7_IRQn = 69, /*!< DMA2 Channel 7 global interrupt */ + LPUART1_IRQn = 70, /*!< LP UART1 interrupt */ + QUADSPI_IRQn = 71, /*!< Quad SPI global interrupt */ + I2C3_EV_IRQn = 72, /*!< I2C3 event interrupt */ + I2C3_ER_IRQn = 73, /*!< I2C3 error interrupt */ + SAI1_IRQn = 74, /*!< Serial Audio Interface 1 global interrupt */ + SAI2_IRQn = 75, /*!< Serial Audio Interface 2 global interrupt */ + SWPMI1_IRQn = 76, /*!< Serial Wire Interface 1 global interrupt */ + TSC_IRQn = 77, /*!< Touch Sense Controller global interrupt */ + LCD_IRQn = 78, /*!< LCD global interrupt */ + AES_IRQn = 79, /*!< AES global interrupt */ + RNG_IRQn = 80, /*!< RNG global interrupt */ + FPU_IRQn = 81 /*!< FPU global interrupt */ +} IRQn_Type; + +/** + * @} + */ + +#include "core_cm4.h" /* Cortex-M4 processor and core peripherals */ +#include "system_stm32l4xx.h" +#include + +/** @addtogroup Peripheral_registers_structures + * @{ + */ + +/** + * @brief Analog to Digital Converter + */ + +typedef struct +{ + __IO uint32_t ISR; /*!< ADC interrupt and status register, Address offset: 0x00 */ + __IO uint32_t IER; /*!< ADC interrupt enable register, Address offset: 0x04 */ + __IO uint32_t CR; /*!< ADC control register, Address offset: 0x08 */ + __IO uint32_t CFGR; /*!< ADC configuration register 1, Address offset: 0x0C */ + __IO uint32_t CFGR2; /*!< ADC configuration register 2, Address offset: 0x10 */ + __IO uint32_t SMPR1; /*!< ADC sampling time register 1, Address offset: 0x14 */ + __IO uint32_t SMPR2; /*!< ADC sampling time register 2, Address offset: 0x18 */ + uint32_t RESERVED1; /*!< Reserved, 0x1C */ + __IO uint32_t TR1; /*!< ADC analog watchdog 1 threshold register, Address offset: 0x20 */ + __IO uint32_t TR2; /*!< ADC analog watchdog 2 threshold register, Address offset: 0x24 */ + __IO uint32_t TR3; /*!< ADC analog watchdog 3 threshold register, Address offset: 0x28 */ + uint32_t RESERVED2; /*!< Reserved, 0x2C */ + __IO uint32_t SQR1; /*!< ADC group regular sequencer register 1, Address offset: 0x30 */ + __IO uint32_t SQR2; /*!< ADC group regular sequencer register 2, Address offset: 0x34 */ + __IO uint32_t SQR3; /*!< ADC group regular sequencer register 3, Address offset: 0x38 */ + __IO uint32_t SQR4; /*!< ADC group regular sequencer register 4, Address offset: 0x3C */ + __IO uint32_t DR; /*!< ADC group regular data register, Address offset: 0x40 */ + uint32_t RESERVED3; /*!< Reserved, 0x44 */ + uint32_t RESERVED4; /*!< Reserved, 0x48 */ + __IO uint32_t JSQR; /*!< ADC group injected sequencer register, Address offset: 0x4C */ + uint32_t RESERVED5[4]; /*!< Reserved, 0x50 - 0x5C */ + __IO uint32_t OFR1; /*!< ADC offset register 1, Address offset: 0x60 */ + __IO uint32_t OFR2; /*!< ADC offset register 2, Address offset: 0x64 */ + __IO uint32_t OFR3; /*!< ADC offset register 3, Address offset: 0x68 */ + __IO uint32_t OFR4; /*!< ADC offset register 4, Address offset: 0x6C */ + uint32_t RESERVED6[4]; /*!< Reserved, 0x70 - 0x7C */ + __IO uint32_t JDR1; /*!< ADC group injected rank 1 data register, Address offset: 0x80 */ + __IO uint32_t JDR2; /*!< ADC group injected rank 2 data register, Address offset: 0x84 */ + __IO uint32_t JDR3; /*!< ADC group injected rank 3 data register, Address offset: 0x88 */ + __IO uint32_t JDR4; /*!< ADC group injected rank 4 data register, Address offset: 0x8C */ + uint32_t RESERVED7[4]; /*!< Reserved, 0x090 - 0x09C */ + __IO uint32_t AWD2CR; /*!< ADC analog watchdog 1 configuration register, Address offset: 0xA0 */ + __IO uint32_t AWD3CR; /*!< ADC analog watchdog 3 Configuration Register, Address offset: 0xA4 */ + uint32_t RESERVED8; /*!< Reserved, 0x0A8 */ + uint32_t RESERVED9; /*!< Reserved, 0x0AC */ + __IO uint32_t DIFSEL; /*!< ADC differential mode selection register, Address offset: 0xB0 */ + __IO uint32_t CALFACT; /*!< ADC calibration factors, Address offset: 0xB4 */ + +} ADC_TypeDef; + +typedef struct +{ + __IO uint32_t CSR; /*!< ADC common status register, Address offset: ADC1 base address + 0x300 */ + uint32_t RESERVED; /*!< Reserved, Address offset: ADC1 base address + 0x304 */ + __IO uint32_t CCR; /*!< ADC common configuration register, Address offset: ADC1 base address + 0x308 */ + __IO uint32_t CDR; /*!< ADC common group regular data register Address offset: ADC1 base address + 0x30C */ +} ADC_Common_TypeDef; + + +/** + * @brief Controller Area Network TxMailBox + */ + +typedef struct +{ + __IO uint32_t TIR; /*!< CAN TX mailbox identifier register */ + __IO uint32_t TDTR; /*!< CAN mailbox data length control and time stamp register */ + __IO uint32_t TDLR; /*!< CAN mailbox data low register */ + __IO uint32_t TDHR; /*!< CAN mailbox data high register */ +} CAN_TxMailBox_TypeDef; + +/** + * @brief Controller Area Network FIFOMailBox + */ + +typedef struct +{ + __IO uint32_t RIR; /*!< CAN receive FIFO mailbox identifier register */ + __IO uint32_t RDTR; /*!< CAN receive FIFO mailbox data length control and time stamp register */ + __IO uint32_t RDLR; /*!< CAN receive FIFO mailbox data low register */ + __IO uint32_t RDHR; /*!< CAN receive FIFO mailbox data high register */ +} CAN_FIFOMailBox_TypeDef; + +/** + * @brief Controller Area Network FilterRegister + */ + +typedef struct +{ + __IO uint32_t FR1; /*!< CAN Filter bank register 1 */ + __IO uint32_t FR2; /*!< CAN Filter bank register 1 */ +} CAN_FilterRegister_TypeDef; + +/** + * @brief Controller Area Network + */ + +typedef struct +{ + __IO uint32_t MCR; /*!< CAN master control register, Address offset: 0x00 */ + __IO uint32_t MSR; /*!< CAN master status register, Address offset: 0x04 */ + __IO uint32_t TSR; /*!< CAN transmit status register, Address offset: 0x08 */ + __IO uint32_t RF0R; /*!< CAN receive FIFO 0 register, Address offset: 0x0C */ + __IO uint32_t RF1R; /*!< CAN receive FIFO 1 register, Address offset: 0x10 */ + __IO uint32_t IER; /*!< CAN interrupt enable register, Address offset: 0x14 */ + __IO uint32_t ESR; /*!< CAN error status register, Address offset: 0x18 */ + __IO uint32_t BTR; /*!< CAN bit timing register, Address offset: 0x1C */ + uint32_t RESERVED0[88]; /*!< Reserved, 0x020 - 0x17F */ + CAN_TxMailBox_TypeDef sTxMailBox[3]; /*!< CAN Tx MailBox, Address offset: 0x180 - 0x1AC */ + CAN_FIFOMailBox_TypeDef sFIFOMailBox[2]; /*!< CAN FIFO MailBox, Address offset: 0x1B0 - 0x1CC */ + uint32_t RESERVED1[12]; /*!< Reserved, 0x1D0 - 0x1FF */ + __IO uint32_t FMR; /*!< CAN filter master register, Address offset: 0x200 */ + __IO uint32_t FM1R; /*!< CAN filter mode register, Address offset: 0x204 */ + uint32_t RESERVED2; /*!< Reserved, 0x208 */ + __IO uint32_t FS1R; /*!< CAN filter scale register, Address offset: 0x20C */ + uint32_t RESERVED3; /*!< Reserved, 0x210 */ + __IO uint32_t FFA1R; /*!< CAN filter FIFO assignment register, Address offset: 0x214 */ + uint32_t RESERVED4; /*!< Reserved, 0x218 */ + __IO uint32_t FA1R; /*!< CAN filter activation register, Address offset: 0x21C */ + uint32_t RESERVED5[8]; /*!< Reserved, 0x220-0x23F */ + CAN_FilterRegister_TypeDef sFilterRegister[28]; /*!< CAN Filter Register, Address offset: 0x240-0x31C */ +} CAN_TypeDef; + + +/** + * @brief Comparator + */ + +typedef struct +{ + __IO uint32_t CSR; /*!< COMP control and status register, Address offset: 0x00 */ +} COMP_TypeDef; + +typedef struct +{ + __IO uint32_t CSR; /*!< COMP control and status register, used for bits common to several COMP instances, Address offset: 0x00 */ +} COMP_Common_TypeDef; + +/** + * @brief CRC calculation unit + */ + +typedef struct +{ + __IO uint32_t DR; /*!< CRC Data register, Address offset: 0x00 */ + __IO uint8_t IDR; /*!< CRC Independent data register, Address offset: 0x04 */ + uint8_t RESERVED0; /*!< Reserved, 0x05 */ + uint16_t RESERVED1; /*!< Reserved, 0x06 */ + __IO uint32_t CR; /*!< CRC Control register, Address offset: 0x08 */ + uint32_t RESERVED2; /*!< Reserved, 0x0C */ + __IO uint32_t INIT; /*!< Initial CRC value register, Address offset: 0x10 */ + __IO uint32_t POL; /*!< CRC polynomial register, Address offset: 0x14 */ +} CRC_TypeDef; + +/** + * @brief Digital to Analog Converter + */ + +typedef struct +{ + __IO uint32_t CR; /*!< DAC control register, Address offset: 0x00 */ + __IO uint32_t SWTRIGR; /*!< DAC software trigger register, Address offset: 0x04 */ + __IO uint32_t DHR12R1; /*!< DAC channel1 12-bit right-aligned data holding register, Address offset: 0x08 */ + __IO uint32_t DHR12L1; /*!< DAC channel1 12-bit left aligned data holding register, Address offset: 0x0C */ + __IO uint32_t DHR8R1; /*!< DAC channel1 8-bit right aligned data holding register, Address offset: 0x10 */ + __IO uint32_t DHR12R2; /*!< DAC channel2 12-bit right aligned data holding register, Address offset: 0x14 */ + __IO uint32_t DHR12L2; /*!< DAC channel2 12-bit left aligned data holding register, Address offset: 0x18 */ + __IO uint32_t DHR8R2; /*!< DAC channel2 8-bit right-aligned data holding register, Address offset: 0x1C */ + __IO uint32_t DHR12RD; /*!< Dual DAC 12-bit right-aligned data holding register, Address offset: 0x20 */ + __IO uint32_t DHR12LD; /*!< DUAL DAC 12-bit left aligned data holding register, Address offset: 0x24 */ + __IO uint32_t DHR8RD; /*!< DUAL DAC 8-bit right aligned data holding register, Address offset: 0x28 */ + __IO uint32_t DOR1; /*!< DAC channel1 data output register, Address offset: 0x2C */ + __IO uint32_t DOR2; /*!< DAC channel2 data output register, Address offset: 0x30 */ + __IO uint32_t SR; /*!< DAC status register, Address offset: 0x34 */ + __IO uint32_t CCR; /*!< DAC calibration control register, Address offset: 0x38 */ + __IO uint32_t MCR; /*!< DAC mode control register, Address offset: 0x3C */ + __IO uint32_t SHSR1; /*!< DAC Sample and Hold sample time register 1, Address offset: 0x40 */ + __IO uint32_t SHSR2; /*!< DAC Sample and Hold sample time register 2, Address offset: 0x44 */ + __IO uint32_t SHHR; /*!< DAC Sample and Hold hold time register, Address offset: 0x48 */ + __IO uint32_t SHRR; /*!< DAC Sample and Hold refresh time register, Address offset: 0x4C */ +} DAC_TypeDef; + +/** + * @brief DFSDM module registers + */ +typedef struct +{ + __IO uint32_t FLTCR1; /*!< DFSDM control register1, Address offset: 0x100 */ + __IO uint32_t FLTCR2; /*!< DFSDM control register2, Address offset: 0x104 */ + __IO uint32_t FLTISR; /*!< DFSDM interrupt and status register, Address offset: 0x108 */ + __IO uint32_t FLTICR; /*!< DFSDM interrupt flag clear register, Address offset: 0x10C */ + __IO uint32_t FLTJCHGR; /*!< DFSDM injected channel group selection register, Address offset: 0x110 */ + __IO uint32_t FLTFCR; /*!< DFSDM filter control register, Address offset: 0x114 */ + __IO uint32_t FLTJDATAR; /*!< DFSDM data register for injected group, Address offset: 0x118 */ + __IO uint32_t FLTRDATAR; /*!< DFSDM data register for regular group, Address offset: 0x11C */ + __IO uint32_t FLTAWHTR; /*!< DFSDM analog watchdog high threshold register, Address offset: 0x120 */ + __IO uint32_t FLTAWLTR; /*!< DFSDM analog watchdog low threshold register, Address offset: 0x124 */ + __IO uint32_t FLTAWSR; /*!< DFSDM analog watchdog status register Address offset: 0x128 */ + __IO uint32_t FLTAWCFR; /*!< DFSDM analog watchdog clear flag register Address offset: 0x12C */ + __IO uint32_t FLTEXMAX; /*!< DFSDM extreme detector maximum register, Address offset: 0x130 */ + __IO uint32_t FLTEXMIN; /*!< DFSDM extreme detector minimum register Address offset: 0x134 */ + __IO uint32_t FLTCNVTIMR; /*!< DFSDM conversion timer, Address offset: 0x138 */ +} DFSDM_Filter_TypeDef; + +/** + * @brief DFSDM channel configuration registers + */ +typedef struct +{ + __IO uint32_t CHCFGR1; /*!< DFSDM channel configuration register1, Address offset: 0x00 */ + __IO uint32_t CHCFGR2; /*!< DFSDM channel configuration register2, Address offset: 0x04 */ + __IO uint32_t CHAWSCDR; /*!< DFSDM channel analog watchdog and + short circuit detector register, Address offset: 0x08 */ + __IO uint32_t CHWDATAR; /*!< DFSDM channel watchdog filter data register, Address offset: 0x0C */ + __IO uint32_t CHDATINR; /*!< DFSDM channel data input register, Address offset: 0x10 */ +} DFSDM_Channel_TypeDef; + +/** + * @brief Debug MCU + */ + +typedef struct +{ + __IO uint32_t IDCODE; /*!< MCU device ID code, Address offset: 0x00 */ + __IO uint32_t CR; /*!< Debug MCU configuration register, Address offset: 0x04 */ + __IO uint32_t APB1FZR1; /*!< Debug MCU APB1 freeze register 1, Address offset: 0x08 */ + __IO uint32_t APB1FZR2; /*!< Debug MCU APB1 freeze register 2, Address offset: 0x0C */ + __IO uint32_t APB2FZ; /*!< Debug MCU APB2 freeze register, Address offset: 0x10 */ +} DBGMCU_TypeDef; + + +/** + * @brief DMA Controller + */ + +typedef struct +{ + __IO uint32_t CCR; /*!< DMA channel x configuration register */ + __IO uint32_t CNDTR; /*!< DMA channel x number of data register */ + __IO uint32_t CPAR; /*!< DMA channel x peripheral address register */ + __IO uint32_t CMAR; /*!< DMA channel x memory address register */ +} DMA_Channel_TypeDef; + +typedef struct +{ + __IO uint32_t ISR; /*!< DMA interrupt status register, Address offset: 0x00 */ + __IO uint32_t IFCR; /*!< DMA interrupt flag clear register, Address offset: 0x04 */ +} DMA_TypeDef; + +typedef struct +{ + __IO uint32_t CSELR; /*!< DMA channel selection register */ +} DMA_Request_TypeDef; + +/* Legacy define */ +#define DMA_request_TypeDef DMA_Request_TypeDef + + +/** + * @brief External Interrupt/Event Controller + */ + +typedef struct +{ + __IO uint32_t IMR1; /*!< EXTI Interrupt mask register 1, Address offset: 0x00 */ + __IO uint32_t EMR1; /*!< EXTI Event mask register 1, Address offset: 0x04 */ + __IO uint32_t RTSR1; /*!< EXTI Rising trigger selection register 1, Address offset: 0x08 */ + __IO uint32_t FTSR1; /*!< EXTI Falling trigger selection register 1, Address offset: 0x0C */ + __IO uint32_t SWIER1; /*!< EXTI Software interrupt event register 1, Address offset: 0x10 */ + __IO uint32_t PR1; /*!< EXTI Pending register 1, Address offset: 0x14 */ + uint32_t RESERVED1; /*!< Reserved, 0x18 */ + uint32_t RESERVED2; /*!< Reserved, 0x1C */ + __IO uint32_t IMR2; /*!< EXTI Interrupt mask register 2, Address offset: 0x20 */ + __IO uint32_t EMR2; /*!< EXTI Event mask register 2, Address offset: 0x24 */ + __IO uint32_t RTSR2; /*!< EXTI Rising trigger selection register 2, Address offset: 0x28 */ + __IO uint32_t FTSR2; /*!< EXTI Falling trigger selection register 2, Address offset: 0x2C */ + __IO uint32_t SWIER2; /*!< EXTI Software interrupt event register 2, Address offset: 0x30 */ + __IO uint32_t PR2; /*!< EXTI Pending register 2, Address offset: 0x34 */ +} EXTI_TypeDef; + + +/** + * @brief Firewall + */ + +typedef struct +{ + __IO uint32_t CSSA; /*!< Code Segment Start Address register, Address offset: 0x00 */ + __IO uint32_t CSL; /*!< Code Segment Length register, Address offset: 0x04 */ + __IO uint32_t NVDSSA; /*!< NON volatile data Segment Start Address register, Address offset: 0x08 */ + __IO uint32_t NVDSL; /*!< NON volatile data Segment Length register, Address offset: 0x0C */ + __IO uint32_t VDSSA ; /*!< Volatile data Segment Start Address register, Address offset: 0x10 */ + __IO uint32_t VDSL ; /*!< Volatile data Segment Length register, Address offset: 0x14 */ + uint32_t RESERVED1; /*!< Reserved1, Address offset: 0x18 */ + uint32_t RESERVED2; /*!< Reserved2, Address offset: 0x1C */ + __IO uint32_t CR ; /*!< Configuration register, Address offset: 0x20 */ +} FIREWALL_TypeDef; + + +/** + * @brief FLASH Registers + */ + +typedef struct +{ + __IO uint32_t ACR; /*!< FLASH access control register, Address offset: 0x00 */ + __IO uint32_t PDKEYR; /*!< FLASH power down key register, Address offset: 0x04 */ + __IO uint32_t KEYR; /*!< FLASH key register, Address offset: 0x08 */ + __IO uint32_t OPTKEYR; /*!< FLASH option key register, Address offset: 0x0C */ + __IO uint32_t SR; /*!< FLASH status register, Address offset: 0x10 */ + __IO uint32_t CR; /*!< FLASH control register, Address offset: 0x14 */ + __IO uint32_t ECCR; /*!< FLASH ECC register, Address offset: 0x18 */ + __IO uint32_t RESERVED1; /*!< Reserved1, Address offset: 0x1C */ + __IO uint32_t OPTR; /*!< FLASH option register, Address offset: 0x20 */ + __IO uint32_t PCROP1SR; /*!< FLASH bank1 PCROP start address register, Address offset: 0x24 */ + __IO uint32_t PCROP1ER; /*!< FLASH bank1 PCROP end address register, Address offset: 0x28 */ + __IO uint32_t WRP1AR; /*!< FLASH bank1 WRP area A address register, Address offset: 0x2C */ + __IO uint32_t WRP1BR; /*!< FLASH bank1 WRP area B address register, Address offset: 0x30 */ + uint32_t RESERVED2[4]; /*!< Reserved2, Address offset: 0x34 */ + __IO uint32_t PCROP2SR; /*!< FLASH bank2 PCROP start address register, Address offset: 0x44 */ + __IO uint32_t PCROP2ER; /*!< FLASH bank2 PCROP end address register, Address offset: 0x48 */ + __IO uint32_t WRP2AR; /*!< FLASH bank2 WRP area A address register, Address offset: 0x4C */ + __IO uint32_t WRP2BR; /*!< FLASH bank2 WRP area B address register, Address offset: 0x50 */ +} FLASH_TypeDef; + + +/** + * @brief Flexible Memory Controller + */ + +typedef struct +{ + __IO uint32_t BTCR[8]; /*!< NOR/PSRAM chip-select control register(BCR) and chip-select timing register(BTR), Address offset: 0x00-1C */ +} FMC_Bank1_TypeDef; + +/** + * @brief Flexible Memory Controller Bank1E + */ + +typedef struct +{ + __IO uint32_t BWTR[7]; /*!< NOR/PSRAM write timing registers, Address offset: 0x104-0x11C */ +} FMC_Bank1E_TypeDef; + +/** + * @brief Flexible Memory Controller Bank3 + */ + +typedef struct +{ + __IO uint32_t PCR; /*!< NAND Flash control register, Address offset: 0x80 */ + __IO uint32_t SR; /*!< NAND Flash FIFO status and interrupt register, Address offset: 0x84 */ + __IO uint32_t PMEM; /*!< NAND Flash Common memory space timing register, Address offset: 0x88 */ + __IO uint32_t PATT; /*!< NAND Flash Attribute memory space timing register, Address offset: 0x8C */ + uint32_t RESERVED0; /*!< Reserved, 0x90 */ + __IO uint32_t ECCR; /*!< NAND Flash ECC result registers, Address offset: 0x94 */ +} FMC_Bank3_TypeDef; + +/** + * @brief General Purpose I/O + */ + +typedef struct +{ + __IO uint32_t MODER; /*!< GPIO port mode register, Address offset: 0x00 */ + __IO uint32_t OTYPER; /*!< GPIO port output type register, Address offset: 0x04 */ + __IO uint32_t OSPEEDR; /*!< GPIO port output speed register, Address offset: 0x08 */ + __IO uint32_t PUPDR; /*!< GPIO port pull-up/pull-down register, Address offset: 0x0C */ + __IO uint32_t IDR; /*!< GPIO port input data register, Address offset: 0x10 */ + __IO uint32_t ODR; /*!< GPIO port output data register, Address offset: 0x14 */ + __IO uint32_t BSRR; /*!< GPIO port bit set/reset register, Address offset: 0x18 */ + __IO uint32_t LCKR; /*!< GPIO port configuration lock register, Address offset: 0x1C */ + __IO uint32_t AFR[2]; /*!< GPIO alternate function registers, Address offset: 0x20-0x24 */ + __IO uint32_t BRR; /*!< GPIO Bit Reset register, Address offset: 0x28 */ + __IO uint32_t ASCR; /*!< GPIO analog switch control register, Address offset: 0x2C */ + +} GPIO_TypeDef; + + +/** + * @brief Inter-integrated Circuit Interface + */ + +typedef struct +{ + __IO uint32_t CR1; /*!< I2C Control register 1, Address offset: 0x00 */ + __IO uint32_t CR2; /*!< I2C Control register 2, Address offset: 0x04 */ + __IO uint32_t OAR1; /*!< I2C Own address 1 register, Address offset: 0x08 */ + __IO uint32_t OAR2; /*!< I2C Own address 2 register, Address offset: 0x0C */ + __IO uint32_t TIMINGR; /*!< I2C Timing register, Address offset: 0x10 */ + __IO uint32_t TIMEOUTR; /*!< I2C Timeout register, Address offset: 0x14 */ + __IO uint32_t ISR; /*!< I2C Interrupt and status register, Address offset: 0x18 */ + __IO uint32_t ICR; /*!< I2C Interrupt clear register, Address offset: 0x1C */ + __IO uint32_t PECR; /*!< I2C PEC register, Address offset: 0x20 */ + __IO uint32_t RXDR; /*!< I2C Receive data register, Address offset: 0x24 */ + __IO uint32_t TXDR; /*!< I2C Transmit data register, Address offset: 0x28 */ +} I2C_TypeDef; + +/** + * @brief Independent WATCHDOG + */ + +typedef struct +{ + __IO uint32_t KR; /*!< IWDG Key register, Address offset: 0x00 */ + __IO uint32_t PR; /*!< IWDG Prescaler register, Address offset: 0x04 */ + __IO uint32_t RLR; /*!< IWDG Reload register, Address offset: 0x08 */ + __IO uint32_t SR; /*!< IWDG Status register, Address offset: 0x0C */ + __IO uint32_t WINR; /*!< IWDG Window register, Address offset: 0x10 */ +} IWDG_TypeDef; + +/** + * @brief LCD + */ + +typedef struct +{ + __IO uint32_t CR; /*!< LCD control register, Address offset: 0x00 */ + __IO uint32_t FCR; /*!< LCD frame control register, Address offset: 0x04 */ + __IO uint32_t SR; /*!< LCD status register, Address offset: 0x08 */ + __IO uint32_t CLR; /*!< LCD clear register, Address offset: 0x0C */ + uint32_t RESERVED; /*!< Reserved, Address offset: 0x10 */ + __IO uint32_t RAM[16]; /*!< LCD display memory, Address offset: 0x14-0x50 */ +} LCD_TypeDef; + +/** + * @brief LPTIMER + */ +typedef struct +{ + __IO uint32_t ISR; /*!< LPTIM Interrupt and Status register, Address offset: 0x00 */ + __IO uint32_t ICR; /*!< LPTIM Interrupt Clear register, Address offset: 0x04 */ + __IO uint32_t IER; /*!< LPTIM Interrupt Enable register, Address offset: 0x08 */ + __IO uint32_t CFGR; /*!< LPTIM Configuration register, Address offset: 0x0C */ + __IO uint32_t CR; /*!< LPTIM Control register, Address offset: 0x10 */ + __IO uint32_t CMP; /*!< LPTIM Compare register, Address offset: 0x14 */ + __IO uint32_t ARR; /*!< LPTIM Autoreload register, Address offset: 0x18 */ + __IO uint32_t CNT; /*!< LPTIM Counter register, Address offset: 0x1C */ + __IO uint32_t OR; /*!< LPTIM Option register, Address offset: 0x20 */ +} LPTIM_TypeDef; + +/** + * @brief Operational Amplifier (OPAMP) + */ + +typedef struct +{ + __IO uint32_t CSR; /*!< OPAMP control/status register, Address offset: 0x00 */ + __IO uint32_t OTR; /*!< OPAMP offset trimming register for normal mode, Address offset: 0x04 */ + __IO uint32_t LPOTR; /*!< OPAMP offset trimming register for low power mode, Address offset: 0x08 */ +} OPAMP_TypeDef; + +typedef struct +{ + __IO uint32_t CSR; /*!< OPAMP control/status register, used for bits common to several OPAMP instances, Address offset: 0x00 */ +} OPAMP_Common_TypeDef; + +/** + * @brief Power Control + */ + +typedef struct +{ + __IO uint32_t CR1; /*!< PWR power control register 1, Address offset: 0x00 */ + __IO uint32_t CR2; /*!< PWR power control register 2, Address offset: 0x04 */ + __IO uint32_t CR3; /*!< PWR power control register 3, Address offset: 0x08 */ + __IO uint32_t CR4; /*!< PWR power control register 4, Address offset: 0x0C */ + __IO uint32_t SR1; /*!< PWR power status register 1, Address offset: 0x10 */ + __IO uint32_t SR2; /*!< PWR power status register 2, Address offset: 0x14 */ + __IO uint32_t SCR; /*!< PWR power status reset register, Address offset: 0x18 */ + uint32_t RESERVED; /*!< Reserved, Address offset: 0x1C */ + __IO uint32_t PUCRA; /*!< Pull_up control register of portA, Address offset: 0x20 */ + __IO uint32_t PDCRA; /*!< Pull_Down control register of portA, Address offset: 0x24 */ + __IO uint32_t PUCRB; /*!< Pull_up control register of portB, Address offset: 0x28 */ + __IO uint32_t PDCRB; /*!< Pull_Down control register of portB, Address offset: 0x2C */ + __IO uint32_t PUCRC; /*!< Pull_up control register of portC, Address offset: 0x30 */ + __IO uint32_t PDCRC; /*!< Pull_Down control register of portC, Address offset: 0x34 */ + __IO uint32_t PUCRD; /*!< Pull_up control register of portD, Address offset: 0x38 */ + __IO uint32_t PDCRD; /*!< Pull_Down control register of portD, Address offset: 0x3C */ + __IO uint32_t PUCRE; /*!< Pull_up control register of portE, Address offset: 0x40 */ + __IO uint32_t PDCRE; /*!< Pull_Down control register of portE, Address offset: 0x44 */ + __IO uint32_t PUCRF; /*!< Pull_up control register of portF, Address offset: 0x48 */ + __IO uint32_t PDCRF; /*!< Pull_Down control register of portF, Address offset: 0x4C */ + __IO uint32_t PUCRG; /*!< Pull_up control register of portG, Address offset: 0x50 */ + __IO uint32_t PDCRG; /*!< Pull_Down control register of portG, Address offset: 0x54 */ + __IO uint32_t PUCRH; /*!< Pull_up control register of portH, Address offset: 0x58 */ + __IO uint32_t PDCRH; /*!< Pull_Down control register of portH, Address offset: 0x5C */ +} PWR_TypeDef; + + +/** + * @brief QUAD Serial Peripheral Interface + */ + +typedef struct +{ + __IO uint32_t CR; /*!< QUADSPI Control register, Address offset: 0x00 */ + __IO uint32_t DCR; /*!< QUADSPI Device Configuration register, Address offset: 0x04 */ + __IO uint32_t SR; /*!< QUADSPI Status register, Address offset: 0x08 */ + __IO uint32_t FCR; /*!< QUADSPI Flag Clear register, Address offset: 0x0C */ + __IO uint32_t DLR; /*!< QUADSPI Data Length register, Address offset: 0x10 */ + __IO uint32_t CCR; /*!< QUADSPI Communication Configuration register, Address offset: 0x14 */ + __IO uint32_t AR; /*!< QUADSPI Address register, Address offset: 0x18 */ + __IO uint32_t ABR; /*!< QUADSPI Alternate Bytes register, Address offset: 0x1C */ + __IO uint32_t DR; /*!< QUADSPI Data register, Address offset: 0x20 */ + __IO uint32_t PSMKR; /*!< QUADSPI Polling Status Mask register, Address offset: 0x24 */ + __IO uint32_t PSMAR; /*!< QUADSPI Polling Status Match register, Address offset: 0x28 */ + __IO uint32_t PIR; /*!< QUADSPI Polling Interval register, Address offset: 0x2C */ + __IO uint32_t LPTR; /*!< QUADSPI Low Power Timeout register, Address offset: 0x30 */ +} QUADSPI_TypeDef; + + +/** + * @brief Reset and Clock Control + */ + +typedef struct +{ + __IO uint32_t CR; /*!< RCC clock control register, Address offset: 0x00 */ + __IO uint32_t ICSCR; /*!< RCC internal clock sources calibration register, Address offset: 0x04 */ + __IO uint32_t CFGR; /*!< RCC clock configuration register, Address offset: 0x08 */ + __IO uint32_t PLLCFGR; /*!< RCC system PLL configuration register, Address offset: 0x0C */ + __IO uint32_t PLLSAI1CFGR; /*!< RCC PLL SAI1 configuration register, Address offset: 0x10 */ + __IO uint32_t PLLSAI2CFGR; /*!< RCC PLL SAI2 configuration register, Address offset: 0x14 */ + __IO uint32_t CIER; /*!< RCC clock interrupt enable register, Address offset: 0x18 */ + __IO uint32_t CIFR; /*!< RCC clock interrupt flag register, Address offset: 0x1C */ + __IO uint32_t CICR; /*!< RCC clock interrupt clear register, Address offset: 0x20 */ + uint32_t RESERVED0; /*!< Reserved, Address offset: 0x24 */ + __IO uint32_t AHB1RSTR; /*!< RCC AHB1 peripheral reset register, Address offset: 0x28 */ + __IO uint32_t AHB2RSTR; /*!< RCC AHB2 peripheral reset register, Address offset: 0x2C */ + __IO uint32_t AHB3RSTR; /*!< RCC AHB3 peripheral reset register, Address offset: 0x30 */ + uint32_t RESERVED1; /*!< Reserved, Address offset: 0x34 */ + __IO uint32_t APB1RSTR1; /*!< RCC APB1 peripheral reset register 1, Address offset: 0x38 */ + __IO uint32_t APB1RSTR2; /*!< RCC APB1 peripheral reset register 2, Address offset: 0x3C */ + __IO uint32_t APB2RSTR; /*!< RCC APB2 peripheral reset register, Address offset: 0x40 */ + uint32_t RESERVED2; /*!< Reserved, Address offset: 0x44 */ + __IO uint32_t AHB1ENR; /*!< RCC AHB1 peripheral clocks enable register, Address offset: 0x48 */ + __IO uint32_t AHB2ENR; /*!< RCC AHB2 peripheral clocks enable register, Address offset: 0x4C */ + __IO uint32_t AHB3ENR; /*!< RCC AHB3 peripheral clocks enable register, Address offset: 0x50 */ + uint32_t RESERVED3; /*!< Reserved, Address offset: 0x54 */ + __IO uint32_t APB1ENR1; /*!< RCC APB1 peripheral clocks enable register 1, Address offset: 0x58 */ + __IO uint32_t APB1ENR2; /*!< RCC APB1 peripheral clocks enable register 2, Address offset: 0x5C */ + __IO uint32_t APB2ENR; /*!< RCC APB2 peripheral clocks enable register, Address offset: 0x60 */ + uint32_t RESERVED4; /*!< Reserved, Address offset: 0x64 */ + __IO uint32_t AHB1SMENR; /*!< RCC AHB1 peripheral clocks enable in sleep and stop modes register, Address offset: 0x68 */ + __IO uint32_t AHB2SMENR; /*!< RCC AHB2 peripheral clocks enable in sleep and stop modes register, Address offset: 0x6C */ + __IO uint32_t AHB3SMENR; /*!< RCC AHB3 peripheral clocks enable in sleep and stop modes register, Address offset: 0x70 */ + uint32_t RESERVED5; /*!< Reserved, Address offset: 0x74 */ + __IO uint32_t APB1SMENR1; /*!< RCC APB1 peripheral clocks enable in sleep mode and stop modes register 1, Address offset: 0x78 */ + __IO uint32_t APB1SMENR2; /*!< RCC APB1 peripheral clocks enable in sleep mode and stop modes register 2, Address offset: 0x7C */ + __IO uint32_t APB2SMENR; /*!< RCC APB2 peripheral clocks enable in sleep mode and stop modes register, Address offset: 0x80 */ + uint32_t RESERVED6; /*!< Reserved, Address offset: 0x84 */ + __IO uint32_t CCIPR; /*!< RCC peripherals independent clock configuration register, Address offset: 0x88 */ + __IO uint32_t RESERVED7; /*!< Reserved, Address offset: 0x8C */ + __IO uint32_t BDCR; /*!< RCC backup domain control register, Address offset: 0x90 */ + __IO uint32_t CSR; /*!< RCC clock control & status register, Address offset: 0x94 */ +} RCC_TypeDef; + +/** + * @brief Real-Time Clock + */ + +typedef struct +{ + __IO uint32_t TR; /*!< RTC time register, Address offset: 0x00 */ + __IO uint32_t DR; /*!< RTC date register, Address offset: 0x04 */ + __IO uint32_t CR; /*!< RTC control register, Address offset: 0x08 */ + __IO uint32_t ISR; /*!< RTC initialization and status register, Address offset: 0x0C */ + __IO uint32_t PRER; /*!< RTC prescaler register, Address offset: 0x10 */ + __IO uint32_t WUTR; /*!< RTC wakeup timer register, Address offset: 0x14 */ + uint32_t reserved; /*!< Reserved */ + __IO uint32_t ALRMAR; /*!< RTC alarm A register, Address offset: 0x1C */ + __IO uint32_t ALRMBR; /*!< RTC alarm B register, Address offset: 0x20 */ + __IO uint32_t WPR; /*!< RTC write protection register, Address offset: 0x24 */ + __IO uint32_t SSR; /*!< RTC sub second register, Address offset: 0x28 */ + __IO uint32_t SHIFTR; /*!< RTC shift control register, Address offset: 0x2C */ + __IO uint32_t TSTR; /*!< RTC time stamp time register, Address offset: 0x30 */ + __IO uint32_t TSDR; /*!< RTC time stamp date register, Address offset: 0x34 */ + __IO uint32_t TSSSR; /*!< RTC time-stamp sub second register, Address offset: 0x38 */ + __IO uint32_t CALR; /*!< RTC calibration register, Address offset: 0x3C */ + __IO uint32_t TAMPCR; /*!< RTC tamper configuration register, Address offset: 0x40 */ + __IO uint32_t ALRMASSR; /*!< RTC alarm A sub second register, Address offset: 0x44 */ + __IO uint32_t ALRMBSSR; /*!< RTC alarm B sub second register, Address offset: 0x48 */ + __IO uint32_t OR; /*!< RTC option register, Address offset: 0x4C */ + __IO uint32_t BKP0R; /*!< RTC backup register 0, Address offset: 0x50 */ + __IO uint32_t BKP1R; /*!< RTC backup register 1, Address offset: 0x54 */ + __IO uint32_t BKP2R; /*!< RTC backup register 2, Address offset: 0x58 */ + __IO uint32_t BKP3R; /*!< RTC backup register 3, Address offset: 0x5C */ + __IO uint32_t BKP4R; /*!< RTC backup register 4, Address offset: 0x60 */ + __IO uint32_t BKP5R; /*!< RTC backup register 5, Address offset: 0x64 */ + __IO uint32_t BKP6R; /*!< RTC backup register 6, Address offset: 0x68 */ + __IO uint32_t BKP7R; /*!< RTC backup register 7, Address offset: 0x6C */ + __IO uint32_t BKP8R; /*!< RTC backup register 8, Address offset: 0x70 */ + __IO uint32_t BKP9R; /*!< RTC backup register 9, Address offset: 0x74 */ + __IO uint32_t BKP10R; /*!< RTC backup register 10, Address offset: 0x78 */ + __IO uint32_t BKP11R; /*!< RTC backup register 11, Address offset: 0x7C */ + __IO uint32_t BKP12R; /*!< RTC backup register 12, Address offset: 0x80 */ + __IO uint32_t BKP13R; /*!< RTC backup register 13, Address offset: 0x84 */ + __IO uint32_t BKP14R; /*!< RTC backup register 14, Address offset: 0x88 */ + __IO uint32_t BKP15R; /*!< RTC backup register 15, Address offset: 0x8C */ + __IO uint32_t BKP16R; /*!< RTC backup register 16, Address offset: 0x90 */ + __IO uint32_t BKP17R; /*!< RTC backup register 17, Address offset: 0x94 */ + __IO uint32_t BKP18R; /*!< RTC backup register 18, Address offset: 0x98 */ + __IO uint32_t BKP19R; /*!< RTC backup register 19, Address offset: 0x9C */ + __IO uint32_t BKP20R; /*!< RTC backup register 20, Address offset: 0xA0 */ + __IO uint32_t BKP21R; /*!< RTC backup register 21, Address offset: 0xA4 */ + __IO uint32_t BKP22R; /*!< RTC backup register 22, Address offset: 0xA8 */ + __IO uint32_t BKP23R; /*!< RTC backup register 23, Address offset: 0xAC */ + __IO uint32_t BKP24R; /*!< RTC backup register 24, Address offset: 0xB0 */ + __IO uint32_t BKP25R; /*!< RTC backup register 25, Address offset: 0xB4 */ + __IO uint32_t BKP26R; /*!< RTC backup register 26, Address offset: 0xB8 */ + __IO uint32_t BKP27R; /*!< RTC backup register 27, Address offset: 0xBC */ + __IO uint32_t BKP28R; /*!< RTC backup register 28, Address offset: 0xC0 */ + __IO uint32_t BKP29R; /*!< RTC backup register 29, Address offset: 0xC4 */ + __IO uint32_t BKP30R; /*!< RTC backup register 30, Address offset: 0xC8 */ + __IO uint32_t BKP31R; /*!< RTC backup register 31, Address offset: 0xCC */ +} RTC_TypeDef; + + +/** + * @brief Serial Audio Interface + */ + +typedef struct +{ + __IO uint32_t GCR; /*!< SAI global configuration register, Address offset: 0x00 */ +} SAI_TypeDef; + +typedef struct +{ + __IO uint32_t CR1; /*!< SAI block x configuration register 1, Address offset: 0x04 */ + __IO uint32_t CR2; /*!< SAI block x configuration register 2, Address offset: 0x08 */ + __IO uint32_t FRCR; /*!< SAI block x frame configuration register, Address offset: 0x0C */ + __IO uint32_t SLOTR; /*!< SAI block x slot register, Address offset: 0x10 */ + __IO uint32_t IMR; /*!< SAI block x interrupt mask register, Address offset: 0x14 */ + __IO uint32_t SR; /*!< SAI block x status register, Address offset: 0x18 */ + __IO uint32_t CLRFR; /*!< SAI block x clear flag register, Address offset: 0x1C */ + __IO uint32_t DR; /*!< SAI block x data register, Address offset: 0x20 */ +} SAI_Block_TypeDef; + + +/** + * @brief Secure digital input/output Interface + */ + +typedef struct +{ + __IO uint32_t POWER; /*!< SDMMC power control register, Address offset: 0x00 */ + __IO uint32_t CLKCR; /*!< SDMMC clock control register, Address offset: 0x04 */ + __IO uint32_t ARG; /*!< SDMMC argument register, Address offset: 0x08 */ + __IO uint32_t CMD; /*!< SDMMC command register, Address offset: 0x0C */ + __I uint32_t RESPCMD; /*!< SDMMC command response register, Address offset: 0x10 */ + __I uint32_t RESP1; /*!< SDMMC response 1 register, Address offset: 0x14 */ + __I uint32_t RESP2; /*!< SDMMC response 2 register, Address offset: 0x18 */ + __I uint32_t RESP3; /*!< SDMMC response 3 register, Address offset: 0x1C */ + __I uint32_t RESP4; /*!< SDMMC response 4 register, Address offset: 0x20 */ + __IO uint32_t DTIMER; /*!< SDMMC data timer register, Address offset: 0x24 */ + __IO uint32_t DLEN; /*!< SDMMC data length register, Address offset: 0x28 */ + __IO uint32_t DCTRL; /*!< SDMMC data control register, Address offset: 0x2C */ + __I uint32_t DCOUNT; /*!< SDMMC data counter register, Address offset: 0x30 */ + __I uint32_t STA; /*!< SDMMC status register, Address offset: 0x34 */ + __IO uint32_t ICR; /*!< SDMMC interrupt clear register, Address offset: 0x38 */ + __IO uint32_t MASK; /*!< SDMMC mask register, Address offset: 0x3C */ + uint32_t RESERVED0[2]; /*!< Reserved, 0x40-0x44 */ + __I uint32_t FIFOCNT; /*!< SDMMC FIFO counter register, Address offset: 0x48 */ + uint32_t RESERVED1[13]; /*!< Reserved, 0x4C-0x7C */ + __IO uint32_t FIFO; /*!< SDMMC data FIFO register, Address offset: 0x80 */ +} SDMMC_TypeDef; + + +/** + * @brief Serial Peripheral Interface + */ + +typedef struct +{ + __IO uint32_t CR1; /*!< SPI Control register 1, Address offset: 0x00 */ + __IO uint32_t CR2; /*!< SPI Control register 2, Address offset: 0x04 */ + __IO uint32_t SR; /*!< SPI Status register, Address offset: 0x08 */ + __IO uint32_t DR; /*!< SPI data register, Address offset: 0x0C */ + __IO uint32_t CRCPR; /*!< SPI CRC polynomial register, Address offset: 0x10 */ + __IO uint32_t RXCRCR; /*!< SPI Rx CRC register, Address offset: 0x14 */ + __IO uint32_t TXCRCR; /*!< SPI Tx CRC register, Address offset: 0x18 */ + uint32_t RESERVED1; /*!< Reserved, Address offset: 0x1C */ + uint32_t RESERVED2; /*!< Reserved, Address offset: 0x20 */ +} SPI_TypeDef; + + +/** + * @brief Single Wire Protocol Master Interface SPWMI + */ + +typedef struct +{ + __IO uint32_t CR; /*!< SWPMI Configuration/Control register, Address offset: 0x00 */ + __IO uint32_t BRR; /*!< SWPMI bitrate register, Address offset: 0x04 */ + uint32_t RESERVED1; /*!< Reserved, 0x08 */ + __IO uint32_t ISR; /*!< SWPMI Interrupt and Status register, Address offset: 0x0C */ + __IO uint32_t ICR; /*!< SWPMI Interrupt Flag Clear register, Address offset: 0x10 */ + __IO uint32_t IER; /*!< SWPMI Interrupt Enable register, Address offset: 0x14 */ + __IO uint32_t RFL; /*!< SWPMI Receive Frame Length register, Address offset: 0x18 */ + __IO uint32_t TDR; /*!< SWPMI Transmit data register, Address offset: 0x1C */ + __IO uint32_t RDR; /*!< SWPMI Receive data register, Address offset: 0x20 */ + __IO uint32_t OR; /*!< SWPMI Option register, Address offset: 0x24 */ +} SWPMI_TypeDef; + + +/** + * @brief System configuration controller + */ + +typedef struct +{ + __IO uint32_t MEMRMP; /*!< SYSCFG memory remap register, Address offset: 0x00 */ + __IO uint32_t CFGR1; /*!< SYSCFG configuration register 1, Address offset: 0x04 */ + __IO uint32_t EXTICR[4]; /*!< SYSCFG external interrupt configuration registers, Address offset: 0x08-0x14 */ + __IO uint32_t SCSR; /*!< SYSCFG SRAM2 control and status register, Address offset: 0x18 */ + __IO uint32_t CFGR2; /*!< SYSCFG configuration register 2, Address offset: 0x1C */ + __IO uint32_t SWPR; /*!< SYSCFG SRAM2 write protection register, Address offset: 0x20 */ + __IO uint32_t SKR; /*!< SYSCFG SRAM2 key register, Address offset: 0x24 */ +} SYSCFG_TypeDef; + + +/** + * @brief TIM + */ + +typedef struct +{ + __IO uint32_t CR1; /*!< TIM control register 1, Address offset: 0x00 */ + __IO uint32_t CR2; /*!< TIM control register 2, Address offset: 0x04 */ + __IO uint32_t SMCR; /*!< TIM slave mode control register, Address offset: 0x08 */ + __IO uint32_t DIER; /*!< TIM DMA/interrupt enable register, Address offset: 0x0C */ + __IO uint32_t SR; /*!< TIM status register, Address offset: 0x10 */ + __IO uint32_t EGR; /*!< TIM event generation register, Address offset: 0x14 */ + __IO uint32_t CCMR1; /*!< TIM capture/compare mode register 1, Address offset: 0x18 */ + __IO uint32_t CCMR2; /*!< TIM capture/compare mode register 2, Address offset: 0x1C */ + __IO uint32_t CCER; /*!< TIM capture/compare enable register, Address offset: 0x20 */ + __IO uint32_t CNT; /*!< TIM counter register, Address offset: 0x24 */ + __IO uint32_t PSC; /*!< TIM prescaler, Address offset: 0x28 */ + __IO uint32_t ARR; /*!< TIM auto-reload register, Address offset: 0x2C */ + __IO uint32_t RCR; /*!< TIM repetition counter register, Address offset: 0x30 */ + __IO uint32_t CCR1; /*!< TIM capture/compare register 1, Address offset: 0x34 */ + __IO uint32_t CCR2; /*!< TIM capture/compare register 2, Address offset: 0x38 */ + __IO uint32_t CCR3; /*!< TIM capture/compare register 3, Address offset: 0x3C */ + __IO uint32_t CCR4; /*!< TIM capture/compare register 4, Address offset: 0x40 */ + __IO uint32_t BDTR; /*!< TIM break and dead-time register, Address offset: 0x44 */ + __IO uint32_t DCR; /*!< TIM DMA control register, Address offset: 0x48 */ + __IO uint32_t DMAR; /*!< TIM DMA address for full transfer, Address offset: 0x4C */ + __IO uint32_t OR1; /*!< TIM option register 1, Address offset: 0x50 */ + __IO uint32_t CCMR3; /*!< TIM capture/compare mode register 3, Address offset: 0x54 */ + __IO uint32_t CCR5; /*!< TIM capture/compare register5, Address offset: 0x58 */ + __IO uint32_t CCR6; /*!< TIM capture/compare register6, Address offset: 0x5C */ + __IO uint32_t OR2; /*!< TIM option register 2, Address offset: 0x60 */ + __IO uint32_t OR3; /*!< TIM option register 3, Address offset: 0x64 */ +} TIM_TypeDef; + + +/** + * @brief Touch Sensing Controller (TSC) + */ + +typedef struct +{ + __IO uint32_t CR; /*!< TSC control register, Address offset: 0x00 */ + __IO uint32_t IER; /*!< TSC interrupt enable register, Address offset: 0x04 */ + __IO uint32_t ICR; /*!< TSC interrupt clear register, Address offset: 0x08 */ + __IO uint32_t ISR; /*!< TSC interrupt status register, Address offset: 0x0C */ + __IO uint32_t IOHCR; /*!< TSC I/O hysteresis control register, Address offset: 0x10 */ + uint32_t RESERVED1; /*!< Reserved, Address offset: 0x14 */ + __IO uint32_t IOASCR; /*!< TSC I/O analog switch control register, Address offset: 0x18 */ + uint32_t RESERVED2; /*!< Reserved, Address offset: 0x1C */ + __IO uint32_t IOSCR; /*!< TSC I/O sampling control register, Address offset: 0x20 */ + uint32_t RESERVED3; /*!< Reserved, Address offset: 0x24 */ + __IO uint32_t IOCCR; /*!< TSC I/O channel control register, Address offset: 0x28 */ + uint32_t RESERVED4; /*!< Reserved, Address offset: 0x2C */ + __IO uint32_t IOGCSR; /*!< TSC I/O group control status register, Address offset: 0x30 */ + __IO uint32_t IOGXCR[8]; /*!< TSC I/O group x counter register, Address offset: 0x34-50 */ +} TSC_TypeDef; + +/** + * @brief Universal Synchronous Asynchronous Receiver Transmitter + */ + +typedef struct +{ + __IO uint32_t CR1; /*!< USART Control register 1, Address offset: 0x00 */ + __IO uint32_t CR2; /*!< USART Control register 2, Address offset: 0x04 */ + __IO uint32_t CR3; /*!< USART Control register 3, Address offset: 0x08 */ + __IO uint32_t BRR; /*!< USART Baud rate register, Address offset: 0x0C */ + __IO uint16_t GTPR; /*!< USART Guard time and prescaler register, Address offset: 0x10 */ + uint16_t RESERVED2; /*!< Reserved, 0x12 */ + __IO uint32_t RTOR; /*!< USART Receiver Time Out register, Address offset: 0x14 */ + __IO uint16_t RQR; /*!< USART Request register, Address offset: 0x18 */ + uint16_t RESERVED3; /*!< Reserved, 0x1A */ + __IO uint32_t ISR; /*!< USART Interrupt and status register, Address offset: 0x1C */ + __IO uint32_t ICR; /*!< USART Interrupt flag Clear register, Address offset: 0x20 */ + __IO uint16_t RDR; /*!< USART Receive Data register, Address offset: 0x24 */ + uint16_t RESERVED4; /*!< Reserved, 0x26 */ + __IO uint16_t TDR; /*!< USART Transmit Data register, Address offset: 0x28 */ + uint16_t RESERVED5; /*!< Reserved, 0x2A */ +} USART_TypeDef; + +/** + * @brief VREFBUF + */ + +typedef struct +{ + __IO uint32_t CSR; /*!< VREFBUF control and status register, Address offset: 0x00 */ + __IO uint32_t CCR; /*!< VREFBUF calibration and control register, Address offset: 0x04 */ +} VREFBUF_TypeDef; + +/** + * @brief Window WATCHDOG + */ + +typedef struct +{ + __IO uint32_t CR; /*!< WWDG Control register, Address offset: 0x00 */ + __IO uint32_t CFR; /*!< WWDG Configuration register, Address offset: 0x04 */ + __IO uint32_t SR; /*!< WWDG Status register, Address offset: 0x08 */ +} WWDG_TypeDef; + +/** + * @brief AES hardware accelerator + */ + +typedef struct +{ + __IO uint32_t CR; /*!< AES control register, Address offset: 0x00 */ + __IO uint32_t SR; /*!< AES status register, Address offset: 0x04 */ + __IO uint32_t DINR; /*!< AES data input register, Address offset: 0x08 */ + __IO uint32_t DOUTR; /*!< AES data output register, Address offset: 0x0C */ + __IO uint32_t KEYR0; /*!< AES key register 0, Address offset: 0x10 */ + __IO uint32_t KEYR1; /*!< AES key register 1, Address offset: 0x14 */ + __IO uint32_t KEYR2; /*!< AES key register 2, Address offset: 0x18 */ + __IO uint32_t KEYR3; /*!< AES key register 3, Address offset: 0x1C */ + __IO uint32_t IVR0; /*!< AES initialization vector register 0, Address offset: 0x20 */ + __IO uint32_t IVR1; /*!< AES initialization vector register 1, Address offset: 0x24 */ + __IO uint32_t IVR2; /*!< AES initialization vector register 2, Address offset: 0x28 */ + __IO uint32_t IVR3; /*!< AES initialization vector register 3, Address offset: 0x2C */ + __IO uint32_t KEYR4; /*!< AES key register 4, Address offset: 0x30 */ + __IO uint32_t KEYR5; /*!< AES key register 5, Address offset: 0x34 */ + __IO uint32_t KEYR6; /*!< AES key register 6, Address offset: 0x38 */ + __IO uint32_t KEYR7; /*!< AES key register 7, Address offset: 0x3C */ + __IO uint32_t SUSP0R; /*!< AES Suspend register 0, Address offset: 0x40 */ + __IO uint32_t SUSP1R; /*!< AES Suspend register 1, Address offset: 0x44 */ + __IO uint32_t SUSP2R; /*!< AES Suspend register 2, Address offset: 0x48 */ + __IO uint32_t SUSP3R; /*!< AES Suspend register 3, Address offset: 0x4C */ + __IO uint32_t SUSP4R; /*!< AES Suspend register 4, Address offset: 0x50 */ + __IO uint32_t SUSP5R; /*!< AES Suspend register 5, Address offset: 0x54 */ + __IO uint32_t SUSP6R; /*!< AES Suspend register 6, Address offset: 0x58 */ + __IO uint32_t SUSP7R; /*!< AES Suspend register 7, Address offset: 0x6C */ +} AES_TypeDef; + +/** + * @brief RNG + */ + +typedef struct +{ + __IO uint32_t CR; /*!< RNG control register, Address offset: 0x00 */ + __IO uint32_t SR; /*!< RNG status register, Address offset: 0x04 */ + __IO uint32_t DR; /*!< RNG data register, Address offset: 0x08 */ +} RNG_TypeDef; + +/** + * @brief USB_OTG_Core_register + */ +typedef struct +{ + __IO uint32_t GOTGCTL; /*!< USB_OTG Control and Status Register 000h*/ + __IO uint32_t GOTGINT; /*!< USB_OTG Interrupt Register 004h*/ + __IO uint32_t GAHBCFG; /*!< Core AHB Configuration Register 008h*/ + __IO uint32_t GUSBCFG; /*!< Core USB Configuration Register 00Ch*/ + __IO uint32_t GRSTCTL; /*!< Core Reset Register 010h*/ + __IO uint32_t GINTSTS; /*!< Core Interrupt Register 014h*/ + __IO uint32_t GINTMSK; /*!< Core Interrupt Mask Register 018h*/ + __IO uint32_t GRXSTSR; /*!< Receive Sts Q Read Register 01Ch*/ + __IO uint32_t GRXSTSP; /*!< Receive Sts Q Read & POP Register 020h*/ + __IO uint32_t GRXFSIZ; /* Receive FIFO Size Register 024h*/ + __IO uint32_t DIEPTXF0_HNPTXFSIZ; /*!< EP0 / Non Periodic Tx FIFO Size Register 028h*/ + __IO uint32_t HNPTXSTS; /*!< Non Periodic Tx FIFO/Queue Sts reg 02Ch*/ + uint32_t Reserved30[2]; /* Reserved 030h*/ + __IO uint32_t GCCFG; /* General Purpose IO Register 038h*/ + __IO uint32_t CID; /* User ID Register 03Ch*/ + uint32_t Reserved5[3]; /* Reserved 040h-048h*/ + __IO uint32_t GHWCFG3; /* User HW config3 04Ch*/ + uint32_t Reserved6; /* Reserved 050h*/ + __IO uint32_t GLPMCFG; /* LPM Register 054h*/ + __IO uint32_t GPWRDN; /* Power Down Register 058h*/ + __IO uint32_t GDFIFOCFG; /* DFIFO Software Config Register 05Ch*/ + __IO uint32_t GADPCTL; /* ADP Timer, Control and Status Register 60Ch*/ + uint32_t Reserved43[39]; /* Reserved 058h-0FFh*/ + __IO uint32_t HPTXFSIZ; /* Host Periodic Tx FIFO Size Reg 100h*/ + __IO uint32_t DIEPTXF[0x0F]; /* dev Periodic Transmit FIFO */ +} USB_OTG_GlobalTypeDef; + +/** + * @brief USB_OTG_device_Registers + */ +typedef struct +{ + __IO uint32_t DCFG; /* dev Configuration Register 800h*/ + __IO uint32_t DCTL; /* dev Control Register 804h*/ + __IO uint32_t DSTS; /* dev Status Register (RO) 808h*/ + uint32_t Reserved0C; /* Reserved 80Ch*/ + __IO uint32_t DIEPMSK; /* dev IN Endpoint Mask 810h*/ + __IO uint32_t DOEPMSK; /* dev OUT Endpoint Mask 814h*/ + __IO uint32_t DAINT; /* dev All Endpoints Itr Reg 818h*/ + __IO uint32_t DAINTMSK; /* dev All Endpoints Itr Mask 81Ch*/ + uint32_t Reserved20; /* Reserved 820h*/ + uint32_t Reserved9; /* Reserved 824h*/ + __IO uint32_t DVBUSDIS; /* dev VBUS discharge Register 828h*/ + __IO uint32_t DVBUSPULSE; /* dev VBUS Pulse Register 82Ch*/ + __IO uint32_t DTHRCTL; /* dev thr 830h*/ + __IO uint32_t DIEPEMPMSK; /* dev empty msk 834h*/ + __IO uint32_t DEACHINT; /* dedicated EP interrupt 838h*/ + __IO uint32_t DEACHMSK; /* dedicated EP msk 83Ch*/ + uint32_t Reserved40; /* dedicated EP mask 840h*/ + __IO uint32_t DINEP1MSK; /* dedicated EP mask 844h*/ + uint32_t Reserved44[15]; /* Reserved 844-87Ch*/ + __IO uint32_t DOUTEP1MSK; /* dedicated EP msk 884h*/ +} USB_OTG_DeviceTypeDef; + +/** + * @brief USB_OTG_IN_Endpoint-Specific_Register + */ +typedef struct +{ + __IO uint32_t DIEPCTL; /* dev IN Endpoint Control Reg 900h + (ep_num * 20h) + 00h*/ + uint32_t Reserved04; /* Reserved 900h + (ep_num * 20h) + 04h*/ + __IO uint32_t DIEPINT; /* dev IN Endpoint Itr Reg 900h + (ep_num * 20h) + 08h*/ + uint32_t Reserved0C; /* Reserved 900h + (ep_num * 20h) + 0Ch*/ + __IO uint32_t DIEPTSIZ; /* IN Endpoint Txfer Size 900h + (ep_num * 20h) + 10h*/ + __IO uint32_t DIEPDMA; /* IN Endpoint DMA Address Reg 900h + (ep_num * 20h) + 14h*/ + __IO uint32_t DTXFSTS; /*IN Endpoint Tx FIFO Status Reg 900h + (ep_num * 20h) + 18h*/ + uint32_t Reserved18; /* Reserved 900h+(ep_num*20h)+1Ch-900h+ (ep_num * 20h) + 1Ch*/ +} USB_OTG_INEndpointTypeDef; + +/** + * @brief USB_OTG_OUT_Endpoint-Specific_Registers + */ +typedef struct +{ + __IO uint32_t DOEPCTL; /* dev OUT Endpoint Control Reg B00h + (ep_num * 20h) + 00h*/ + uint32_t Reserved04; /* Reserved B00h + (ep_num * 20h) + 04h*/ + __IO uint32_t DOEPINT; /* dev OUT Endpoint Itr Reg B00h + (ep_num * 20h) + 08h*/ + uint32_t Reserved0C; /* Reserved B00h + (ep_num * 20h) + 0Ch*/ + __IO uint32_t DOEPTSIZ; /* dev OUT Endpoint Txfer Size B00h + (ep_num * 20h) + 10h*/ + __IO uint32_t DOEPDMA; /* dev OUT Endpoint DMA Address B00h + (ep_num * 20h) + 14h*/ + uint32_t Reserved18[2]; /* Reserved B00h + (ep_num * 20h) + 18h - B00h + (ep_num * 20h) + 1Ch*/ +} USB_OTG_OUTEndpointTypeDef; + +/** + * @brief USB_OTG_Host_Mode_Register_Structures + */ +typedef struct +{ + __IO uint32_t HCFG; /* Host Configuration Register 400h*/ + __IO uint32_t HFIR; /* Host Frame Interval Register 404h*/ + __IO uint32_t HFNUM; /* Host Frame Nbr/Frame Remaining 408h*/ + uint32_t Reserved40C; /* Reserved 40Ch*/ + __IO uint32_t HPTXSTS; /* Host Periodic Tx FIFO/ Queue Status 410h*/ + __IO uint32_t HAINT; /* Host All Channels Interrupt Register 414h*/ + __IO uint32_t HAINTMSK; /* Host All Channels Interrupt Mask 418h*/ +} USB_OTG_HostTypeDef; + +/** + * @brief USB_OTG_Host_Channel_Specific_Registers + */ +typedef struct +{ + __IO uint32_t HCCHAR; + __IO uint32_t HCSPLT; + __IO uint32_t HCINT; + __IO uint32_t HCINTMSK; + __IO uint32_t HCTSIZ; + __IO uint32_t HCDMA; + uint32_t Reserved[2]; +} USB_OTG_HostChannelTypeDef; + +/** + * @} + */ + +/** @addtogroup Peripheral_memory_map + * @{ + */ +#define FLASH_BASE ((uint32_t)0x08000000U) /*!< FLASH(up to 1 MB) base address */ +#define SRAM1_BASE ((uint32_t)0x20000000U) /*!< SRAM1(up to 96 KB) base address */ +#define PERIPH_BASE ((uint32_t)0x40000000U) /*!< Peripheral base address */ +#define FMC_BASE ((uint32_t)0x60000000U) /*!< FMC base address */ +#define SRAM2_BASE ((uint32_t)0x10000000U) /*!< SRAM2(32 KB) base address */ +#define QSPI_BASE ((uint32_t)0x90000000U) /*!< QSPI memories accessible over AHB base address */ +#define FMC_R_BASE ((uint32_t)0xA0000000U) /*!< FMC control registers base address */ +#define QSPI_R_BASE ((uint32_t)0xA0001000U) /*!< QUADSPI control registers base address */ +#define SRAM1_BB_BASE ((uint32_t)0x22000000U) /*!< SRAM1(96 KB) base address in the bit-band region */ +#define PERIPH_BB_BASE ((uint32_t)0x42000000U) /*!< Peripheral base address in the bit-band region */ +#define SRAM2_BB_BASE ((uint32_t)0x12000000U) /*!< SRAM2(32 KB) base address in the bit-band region */ + +/* Legacy defines */ +#define SRAM_BASE SRAM1_BASE +#define SRAM_BB_BASE SRAM1_BB_BASE + +#define SRAM1_SIZE_MAX ((uint32_t)0x00018000U) /*!< maximum SRAM1 size (up to 96 KBytes) */ +#define SRAM2_SIZE ((uint32_t)0x00008000U) /*!< SRAM2 size (32 KBytes) */ + +/*!< Peripheral memory map */ +#define APB1PERIPH_BASE PERIPH_BASE +#define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000U) +#define AHB1PERIPH_BASE (PERIPH_BASE + 0x00020000U) +#define AHB2PERIPH_BASE (PERIPH_BASE + 0x08000000U) + +#define FMC_BANK1 FMC_BASE +#define FMC_BANK1_1 FMC_BANK1 +#define FMC_BANK1_2 (FMC_BANK1 + 0x04000000U) +#define FMC_BANK1_3 (FMC_BANK1 + 0x08000000U) +#define FMC_BANK1_4 (FMC_BANK1 + 0x0C000000U) +#define FMC_BANK3 (FMC_BASE + 0x20000000U) + +/*!< APB1 peripherals */ +#define TIM2_BASE (APB1PERIPH_BASE + 0x0000U) +#define TIM3_BASE (APB1PERIPH_BASE + 0x0400U) +#define TIM4_BASE (APB1PERIPH_BASE + 0x0800U) +#define TIM5_BASE (APB1PERIPH_BASE + 0x0C00U) +#define TIM6_BASE (APB1PERIPH_BASE + 0x1000U) +#define TIM7_BASE (APB1PERIPH_BASE + 0x1400U) +#define LCD_BASE (APB1PERIPH_BASE + 0x2400U) +#define RTC_BASE (APB1PERIPH_BASE + 0x2800U) +#define WWDG_BASE (APB1PERIPH_BASE + 0x2C00U) +#define IWDG_BASE (APB1PERIPH_BASE + 0x3000U) +#define SPI2_BASE (APB1PERIPH_BASE + 0x3800U) +#define SPI3_BASE (APB1PERIPH_BASE + 0x3C00U) +#define USART2_BASE (APB1PERIPH_BASE + 0x4400U) +#define USART3_BASE (APB1PERIPH_BASE + 0x4800U) +#define UART4_BASE (APB1PERIPH_BASE + 0x4C00U) +#define UART5_BASE (APB1PERIPH_BASE + 0x5000U) +#define I2C1_BASE (APB1PERIPH_BASE + 0x5400U) +#define I2C2_BASE (APB1PERIPH_BASE + 0x5800U) +#define I2C3_BASE (APB1PERIPH_BASE + 0x5C00U) +#define CAN1_BASE (APB1PERIPH_BASE + 0x6400U) +#define PWR_BASE (APB1PERIPH_BASE + 0x7000U) +#define DAC_BASE (APB1PERIPH_BASE + 0x7400U) +#define DAC1_BASE (APB1PERIPH_BASE + 0x7400U) +#define OPAMP_BASE (APB1PERIPH_BASE + 0x7800U) +#define OPAMP1_BASE (APB1PERIPH_BASE + 0x7800U) +#define OPAMP2_BASE (APB1PERIPH_BASE + 0x7810U) +#define LPTIM1_BASE (APB1PERIPH_BASE + 0x7C00U) +#define LPUART1_BASE (APB1PERIPH_BASE + 0x8000U) +#define SWPMI1_BASE (APB1PERIPH_BASE + 0x8800U) +#define LPTIM2_BASE (APB1PERIPH_BASE + 0x9400U) + + +/*!< APB2 peripherals */ +#define SYSCFG_BASE (APB2PERIPH_BASE + 0x0000U) +#define VREFBUF_BASE (APB2PERIPH_BASE + 0x0030U) +#define COMP1_BASE (APB2PERIPH_BASE + 0x0200U) +#define COMP2_BASE (APB2PERIPH_BASE + 0x0204U) +#define EXTI_BASE (APB2PERIPH_BASE + 0x0400U) +#define FIREWALL_BASE (APB2PERIPH_BASE + 0x1C00U) +#define SDMMC1_BASE (APB2PERIPH_BASE + 0x2800U) +#define TIM1_BASE (APB2PERIPH_BASE + 0x2C00U) +#define SPI1_BASE (APB2PERIPH_BASE + 0x3000U) +#define TIM8_BASE (APB2PERIPH_BASE + 0x3400U) +#define USART1_BASE (APB2PERIPH_BASE + 0x3800U) +#define TIM15_BASE (APB2PERIPH_BASE + 0x4000U) +#define TIM16_BASE (APB2PERIPH_BASE + 0x4400U) +#define TIM17_BASE (APB2PERIPH_BASE + 0x4800U) +#define SAI1_BASE (APB2PERIPH_BASE + 0x5400U) +#define SAI1_Block_A_BASE (SAI1_BASE + 0x004) +#define SAI1_Block_B_BASE (SAI1_BASE + 0x024) +#define SAI2_BASE (APB2PERIPH_BASE + 0x5800U) +#define SAI2_Block_A_BASE (SAI2_BASE + 0x004) +#define SAI2_Block_B_BASE (SAI2_BASE + 0x024) +#define DFSDM1_BASE (APB2PERIPH_BASE + 0x6000U) +#define DFSDM1_Channel0_BASE (DFSDM1_BASE + 0x00) +#define DFSDM1_Channel1_BASE (DFSDM1_BASE + 0x20) +#define DFSDM1_Channel2_BASE (DFSDM1_BASE + 0x40) +#define DFSDM1_Channel3_BASE (DFSDM1_BASE + 0x60) +#define DFSDM1_Channel4_BASE (DFSDM1_BASE + 0x80) +#define DFSDM1_Channel5_BASE (DFSDM1_BASE + 0xA0) +#define DFSDM1_Channel6_BASE (DFSDM1_BASE + 0xC0) +#define DFSDM1_Channel7_BASE (DFSDM1_BASE + 0xE0) +#define DFSDM1_Filter0_BASE (DFSDM1_BASE + 0x100) +#define DFSDM1_Filter1_BASE (DFSDM1_BASE + 0x180) +#define DFSDM1_Filter2_BASE (DFSDM1_BASE + 0x200) +#define DFSDM1_Filter3_BASE (DFSDM1_BASE + 0x280) + +/*!< AHB1 peripherals */ +#define DMA1_BASE (AHB1PERIPH_BASE) +#define DMA2_BASE (AHB1PERIPH_BASE + 0x0400U) +#define RCC_BASE (AHB1PERIPH_BASE + 0x1000U) +#define FLASH_R_BASE (AHB1PERIPH_BASE + 0x2000U) +#define CRC_BASE (AHB1PERIPH_BASE + 0x3000U) +#define TSC_BASE (AHB1PERIPH_BASE + 0x4000U) + + +#define DMA1_Channel1_BASE (DMA1_BASE + 0x0008U) +#define DMA1_Channel2_BASE (DMA1_BASE + 0x001CU) +#define DMA1_Channel3_BASE (DMA1_BASE + 0x0030U) +#define DMA1_Channel4_BASE (DMA1_BASE + 0x0044U) +#define DMA1_Channel5_BASE (DMA1_BASE + 0x0058U) +#define DMA1_Channel6_BASE (DMA1_BASE + 0x006CU) +#define DMA1_Channel7_BASE (DMA1_BASE + 0x0080U) +#define DMA1_CSELR_BASE (DMA1_BASE + 0x00A8U) + + +#define DMA2_Channel1_BASE (DMA2_BASE + 0x0008U) +#define DMA2_Channel2_BASE (DMA2_BASE + 0x001CU) +#define DMA2_Channel3_BASE (DMA2_BASE + 0x0030U) +#define DMA2_Channel4_BASE (DMA2_BASE + 0x0044U) +#define DMA2_Channel5_BASE (DMA2_BASE + 0x0058U) +#define DMA2_Channel6_BASE (DMA2_BASE + 0x006CU) +#define DMA2_Channel7_BASE (DMA2_BASE + 0x0080U) +#define DMA2_CSELR_BASE (DMA2_BASE + 0x00A8U) + + +/*!< AHB2 peripherals */ +#define GPIOA_BASE (AHB2PERIPH_BASE + 0x0000U) +#define GPIOB_BASE (AHB2PERIPH_BASE + 0x0400U) +#define GPIOC_BASE (AHB2PERIPH_BASE + 0x0800U) +#define GPIOD_BASE (AHB2PERIPH_BASE + 0x0C00U) +#define GPIOE_BASE (AHB2PERIPH_BASE + 0x1000U) +#define GPIOF_BASE (AHB2PERIPH_BASE + 0x1400U) +#define GPIOG_BASE (AHB2PERIPH_BASE + 0x1800U) +#define GPIOH_BASE (AHB2PERIPH_BASE + 0x1C00U) + +#define USBOTG_BASE (AHB2PERIPH_BASE + 0x08000000U) + +#define ADC1_BASE (AHB2PERIPH_BASE + 0x08040000U) +#define ADC2_BASE (AHB2PERIPH_BASE + 0x08040100U) +#define ADC3_BASE (AHB2PERIPH_BASE + 0x08040200U) +#define ADC123_COMMON_BASE (AHB2PERIPH_BASE + 0x08040300U) + + +#define AES_BASE (AHB2PERIPH_BASE + 0x08060000U) +#define RNG_BASE (AHB2PERIPH_BASE + 0x08060800U) + + +/*!< FMC Banks registers base address */ +#define FMC_Bank1_R_BASE (FMC_R_BASE + 0x0000U) +#define FMC_Bank1E_R_BASE (FMC_R_BASE + 0x0104U) +#define FMC_Bank3_R_BASE (FMC_R_BASE + 0x0080U) + +/* Debug MCU registers base address */ +#define DBGMCU_BASE ((uint32_t)0xE0042000U) + +/*!< USB registers base address */ +#define USB_OTG_FS_PERIPH_BASE ((uint32_t)0x50000000U) + +#define USB_OTG_GLOBAL_BASE ((uint32_t)0x00000000U) +#define USB_OTG_DEVICE_BASE ((uint32_t)0x00000800U) +#define USB_OTG_IN_ENDPOINT_BASE ((uint32_t)0x00000900U) +#define USB_OTG_OUT_ENDPOINT_BASE ((uint32_t)0x00000B00U) +#define USB_OTG_EP_REG_SIZE ((uint32_t)0x00000020U) +#define USB_OTG_HOST_BASE ((uint32_t)0x00000400U) +#define USB_OTG_HOST_PORT_BASE ((uint32_t)0x00000440U) +#define USB_OTG_HOST_CHANNEL_BASE ((uint32_t)0x00000500U) +#define USB_OTG_HOST_CHANNEL_SIZE ((uint32_t)0x00000020U) +#define USB_OTG_PCGCCTL_BASE ((uint32_t)0x00000E00U) +#define USB_OTG_FIFO_BASE ((uint32_t)0x00001000U) +#define USB_OTG_FIFO_SIZE ((uint32_t)0x00001000U) + + +#define PACKAGE_BASE ((uint32_t)0x1FFF7500U) /*!< Package data register base address */ +#define UID_BASE ((uint32_t)0x1FFF7590U) /*!< Unique device ID register base address */ +#define FLASHSIZE_BASE ((uint32_t)0x1FFF75E0U) /*!< Flash size data register base address */ +/** + * @} + */ + +/** @addtogroup Peripheral_declaration + * @{ + */ +#define TIM2 ((TIM_TypeDef *) TIM2_BASE) +#define TIM3 ((TIM_TypeDef *) TIM3_BASE) +#define TIM4 ((TIM_TypeDef *) TIM4_BASE) +#define TIM5 ((TIM_TypeDef *) TIM5_BASE) +#define TIM6 ((TIM_TypeDef *) TIM6_BASE) +#define TIM7 ((TIM_TypeDef *) TIM7_BASE) +#define LCD ((LCD_TypeDef *) LCD_BASE) +#define RTC ((RTC_TypeDef *) RTC_BASE) +#define WWDG ((WWDG_TypeDef *) WWDG_BASE) +#define IWDG ((IWDG_TypeDef *) IWDG_BASE) +#define SPI2 ((SPI_TypeDef *) SPI2_BASE) +#define SPI3 ((SPI_TypeDef *) SPI3_BASE) +#define USART2 ((USART_TypeDef *) USART2_BASE) +#define USART3 ((USART_TypeDef *) USART3_BASE) +#define UART4 ((USART_TypeDef *) UART4_BASE) +#define UART5 ((USART_TypeDef *) UART5_BASE) +#define I2C1 ((I2C_TypeDef *) I2C1_BASE) +#define I2C2 ((I2C_TypeDef *) I2C2_BASE) +#define I2C3 ((I2C_TypeDef *) I2C3_BASE) +#define CAN1 ((CAN_TypeDef *) CAN1_BASE) +#define PWR ((PWR_TypeDef *) PWR_BASE) +#define DAC ((DAC_TypeDef *) DAC1_BASE) +#define DAC1 ((DAC_TypeDef *) DAC1_BASE) +#define OPAMP ((OPAMP_TypeDef *) OPAMP_BASE) +#define OPAMP1 ((OPAMP_TypeDef *) OPAMP1_BASE) +#define OPAMP2 ((OPAMP_TypeDef *) OPAMP2_BASE) +#define OPAMP12_COMMON ((OPAMP_Common_TypeDef *) OPAMP1_BASE) +#define LPTIM1 ((LPTIM_TypeDef *) LPTIM1_BASE) +#define LPUART1 ((USART_TypeDef *) LPUART1_BASE) +#define SWPMI1 ((SWPMI_TypeDef *) SWPMI1_BASE) +#define LPTIM2 ((LPTIM_TypeDef *) LPTIM2_BASE) + +#define SYSCFG ((SYSCFG_TypeDef *) SYSCFG_BASE) +#define VREFBUF ((VREFBUF_TypeDef *) VREFBUF_BASE) +#define COMP1 ((COMP_TypeDef *) COMP1_BASE) +#define COMP2 ((COMP_TypeDef *) COMP2_BASE) +#define COMP12_COMMON ((COMP_Common_TypeDef *) COMP2_BASE) +#define EXTI ((EXTI_TypeDef *) EXTI_BASE) +#define FIREWALL ((FIREWALL_TypeDef *) FIREWALL_BASE) +#define SDMMC1 ((SDMMC_TypeDef *) SDMMC1_BASE) +#define TIM1 ((TIM_TypeDef *) TIM1_BASE) +#define SPI1 ((SPI_TypeDef *) SPI1_BASE) +#define TIM8 ((TIM_TypeDef *) TIM8_BASE) +#define USART1 ((USART_TypeDef *) USART1_BASE) +#define TIM15 ((TIM_TypeDef *) TIM15_BASE) +#define TIM16 ((TIM_TypeDef *) TIM16_BASE) +#define TIM17 ((TIM_TypeDef *) TIM17_BASE) +#define SAI1 ((SAI_TypeDef *) SAI1_BASE) +#define SAI1_Block_A ((SAI_Block_TypeDef *)SAI1_Block_A_BASE) +#define SAI1_Block_B ((SAI_Block_TypeDef *)SAI1_Block_B_BASE) +#define SAI2 ((SAI_TypeDef *) SAI2_BASE) +#define SAI2_Block_A ((SAI_Block_TypeDef *)SAI2_Block_A_BASE) +#define SAI2_Block_B ((SAI_Block_TypeDef *)SAI2_Block_B_BASE) +#define DFSDM1_Channel0 ((DFSDM_Channel_TypeDef *) DFSDM1_Channel0_BASE) +#define DFSDM1_Channel1 ((DFSDM_Channel_TypeDef *) DFSDM1_Channel1_BASE) +#define DFSDM1_Channel2 ((DFSDM_Channel_TypeDef *) DFSDM1_Channel2_BASE) +#define DFSDM1_Channel3 ((DFSDM_Channel_TypeDef *) DFSDM1_Channel3_BASE) +#define DFSDM1_Channel4 ((DFSDM_Channel_TypeDef *) DFSDM1_Channel4_BASE) +#define DFSDM1_Channel5 ((DFSDM_Channel_TypeDef *) DFSDM1_Channel5_BASE) +#define DFSDM1_Channel6 ((DFSDM_Channel_TypeDef *) DFSDM1_Channel6_BASE) +#define DFSDM1_Channel7 ((DFSDM_Channel_TypeDef *) DFSDM1_Channel7_BASE) +#define DFSDM1_Filter0 ((DFSDM_Filter_TypeDef *) DFSDM1_Filter0_BASE) +#define DFSDM1_Filter1 ((DFSDM_Filter_TypeDef *) DFSDM1_Filter1_BASE) +#define DFSDM1_Filter2 ((DFSDM_Filter_TypeDef *) DFSDM1_Filter2_BASE) +#define DFSDM1_Filter3 ((DFSDM_Filter_TypeDef *) DFSDM1_Filter3_BASE) +/* Aliases to keep compatibility after DFSDM renaming */ +#define DFSDM_Channel0 DFSDM1_Channel0 +#define DFSDM_Channel1 DFSDM1_Channel1 +#define DFSDM_Channel2 DFSDM1_Channel2 +#define DFSDM_Channel3 DFSDM1_Channel3 +#define DFSDM_Channel4 DFSDM1_Channel4 +#define DFSDM_Channel5 DFSDM1_Channel5 +#define DFSDM_Channel6 DFSDM1_Channel6 +#define DFSDM_Channel7 DFSDM1_Channel7 +#define DFSDM_Filter0 DFSDM1_Filter0 +#define DFSDM_Filter1 DFSDM1_Filter1 +#define DFSDM_Filter2 DFSDM1_Filter2 +#define DFSDM_Filter3 DFSDM1_Filter3 +#define DMA1 ((DMA_TypeDef *) DMA1_BASE) +#define DMA2 ((DMA_TypeDef *) DMA2_BASE) +#define RCC ((RCC_TypeDef *) RCC_BASE) +#define FLASH ((FLASH_TypeDef *) FLASH_R_BASE) +#define CRC ((CRC_TypeDef *) CRC_BASE) +#define TSC ((TSC_TypeDef *) TSC_BASE) + +#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) +#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE) +#define GPIOC ((GPIO_TypeDef *) GPIOC_BASE) +#define GPIOD ((GPIO_TypeDef *) GPIOD_BASE) +#define GPIOE ((GPIO_TypeDef *) GPIOE_BASE) +#define GPIOF ((GPIO_TypeDef *) GPIOF_BASE) +#define GPIOG ((GPIO_TypeDef *) GPIOG_BASE) +#define GPIOH ((GPIO_TypeDef *) GPIOH_BASE) +#define ADC1 ((ADC_TypeDef *) ADC1_BASE) +#define ADC2 ((ADC_TypeDef *) ADC2_BASE) +#define ADC3 ((ADC_TypeDef *) ADC3_BASE) +#define ADC123_COMMON ((ADC_Common_TypeDef *) ADC123_COMMON_BASE) +#define AES ((AES_TypeDef *) AES_BASE) +#define RNG ((RNG_TypeDef *) RNG_BASE) + + +#define DMA1_Channel1 ((DMA_Channel_TypeDef *) DMA1_Channel1_BASE) +#define DMA1_Channel2 ((DMA_Channel_TypeDef *) DMA1_Channel2_BASE) +#define DMA1_Channel3 ((DMA_Channel_TypeDef *) DMA1_Channel3_BASE) +#define DMA1_Channel4 ((DMA_Channel_TypeDef *) DMA1_Channel4_BASE) +#define DMA1_Channel5 ((DMA_Channel_TypeDef *) DMA1_Channel5_BASE) +#define DMA1_Channel6 ((DMA_Channel_TypeDef *) DMA1_Channel6_BASE) +#define DMA1_Channel7 ((DMA_Channel_TypeDef *) DMA1_Channel7_BASE) +#define DMA1_CSELR ((DMA_request_TypeDef *) DMA1_CSELR_BASE) + + +#define DMA2_Channel1 ((DMA_Channel_TypeDef *) DMA2_Channel1_BASE) +#define DMA2_Channel2 ((DMA_Channel_TypeDef *) DMA2_Channel2_BASE) +#define DMA2_Channel3 ((DMA_Channel_TypeDef *) DMA2_Channel3_BASE) +#define DMA2_Channel4 ((DMA_Channel_TypeDef *) DMA2_Channel4_BASE) +#define DMA2_Channel5 ((DMA_Channel_TypeDef *) DMA2_Channel5_BASE) +#define DMA2_Channel6 ((DMA_Channel_TypeDef *) DMA2_Channel6_BASE) +#define DMA2_Channel7 ((DMA_Channel_TypeDef *) DMA2_Channel7_BASE) +#define DMA2_CSELR ((DMA_request_TypeDef *) DMA2_CSELR_BASE) + + +#define FMC_Bank1_R ((FMC_Bank1_TypeDef *) FMC_Bank1_R_BASE) +#define FMC_Bank1E_R ((FMC_Bank1E_TypeDef *) FMC_Bank1E_R_BASE) +#define FMC_Bank3_R ((FMC_Bank3_TypeDef *) FMC_Bank3_R_BASE) + +#define QUADSPI ((QUADSPI_TypeDef *) QSPI_R_BASE) + +#define DBGMCU ((DBGMCU_TypeDef *) DBGMCU_BASE) + +#define USB_OTG_FS ((USB_OTG_GlobalTypeDef *) USB_OTG_FS_PERIPH_BASE) +/** + * @} + */ + +/** @addtogroup Exported_constants + * @{ + */ + +/** @addtogroup Peripheral_Registers_Bits_Definition + * @{ + */ + +/******************************************************************************/ +/* Peripheral Registers_Bits_Definition */ +/******************************************************************************/ + +/******************************************************************************/ +/* */ +/* Analog to Digital Converter */ +/* */ +/******************************************************************************/ + +/* + * @brief Specific device feature definitions (not present on all devices in the STM32L4 serie) + */ +#define ADC_MULTIMODE_SUPPORT /*!< ADC feature available only on specific devices: multimode available on devices with several ADC instances */ + +/******************** Bit definition for ADC_ISR register *******************/ +#define ADC_ISR_ADRDY_Pos (0U) +#define ADC_ISR_ADRDY_Msk (0x1U << ADC_ISR_ADRDY_Pos) /*!< 0x00000001 */ +#define ADC_ISR_ADRDY ADC_ISR_ADRDY_Msk /*!< ADC ready flag */ +#define ADC_ISR_EOSMP_Pos (1U) +#define ADC_ISR_EOSMP_Msk (0x1U << ADC_ISR_EOSMP_Pos) /*!< 0x00000002 */ +#define ADC_ISR_EOSMP ADC_ISR_EOSMP_Msk /*!< ADC group regular end of sampling flag */ +#define ADC_ISR_EOC_Pos (2U) +#define ADC_ISR_EOC_Msk (0x1U << ADC_ISR_EOC_Pos) /*!< 0x00000004 */ +#define ADC_ISR_EOC ADC_ISR_EOC_Msk /*!< ADC group regular end of unitary conversion flag */ +#define ADC_ISR_EOS_Pos (3U) +#define ADC_ISR_EOS_Msk (0x1U << ADC_ISR_EOS_Pos) /*!< 0x00000008 */ +#define ADC_ISR_EOS ADC_ISR_EOS_Msk /*!< ADC group regular end of sequence conversions flag */ +#define ADC_ISR_OVR_Pos (4U) +#define ADC_ISR_OVR_Msk (0x1U << ADC_ISR_OVR_Pos) /*!< 0x00000010 */ +#define ADC_ISR_OVR ADC_ISR_OVR_Msk /*!< ADC group regular overrun flag */ +#define ADC_ISR_JEOC_Pos (5U) +#define ADC_ISR_JEOC_Msk (0x1U << ADC_ISR_JEOC_Pos) /*!< 0x00000020 */ +#define ADC_ISR_JEOC ADC_ISR_JEOC_Msk /*!< ADC group injected end of unitary conversion flag */ +#define ADC_ISR_JEOS_Pos (6U) +#define ADC_ISR_JEOS_Msk (0x1U << ADC_ISR_JEOS_Pos) /*!< 0x00000040 */ +#define ADC_ISR_JEOS ADC_ISR_JEOS_Msk /*!< ADC group injected end of sequence conversions flag */ +#define ADC_ISR_AWD1_Pos (7U) +#define ADC_ISR_AWD1_Msk (0x1U << ADC_ISR_AWD1_Pos) /*!< 0x00000080 */ +#define ADC_ISR_AWD1 ADC_ISR_AWD1_Msk /*!< ADC analog watchdog 1 flag */ +#define ADC_ISR_AWD2_Pos (8U) +#define ADC_ISR_AWD2_Msk (0x1U << ADC_ISR_AWD2_Pos) /*!< 0x00000100 */ +#define ADC_ISR_AWD2 ADC_ISR_AWD2_Msk /*!< ADC analog watchdog 2 flag */ +#define ADC_ISR_AWD3_Pos (9U) +#define ADC_ISR_AWD3_Msk (0x1U << ADC_ISR_AWD3_Pos) /*!< 0x00000200 */ +#define ADC_ISR_AWD3 ADC_ISR_AWD3_Msk /*!< ADC analog watchdog 3 flag */ +#define ADC_ISR_JQOVF_Pos (10U) +#define ADC_ISR_JQOVF_Msk (0x1U << ADC_ISR_JQOVF_Pos) /*!< 0x00000400 */ +#define ADC_ISR_JQOVF ADC_ISR_JQOVF_Msk /*!< ADC group injected contexts queue overflow flag */ + +/******************** Bit definition for ADC_IER register *******************/ +#define ADC_IER_ADRDYIE_Pos (0U) +#define ADC_IER_ADRDYIE_Msk (0x1U << ADC_IER_ADRDYIE_Pos) /*!< 0x00000001 */ +#define ADC_IER_ADRDYIE ADC_IER_ADRDYIE_Msk /*!< ADC ready interrupt */ +#define ADC_IER_EOSMPIE_Pos (1U) +#define ADC_IER_EOSMPIE_Msk (0x1U << ADC_IER_EOSMPIE_Pos) /*!< 0x00000002 */ +#define ADC_IER_EOSMPIE ADC_IER_EOSMPIE_Msk /*!< ADC group regular end of sampling interrupt */ +#define ADC_IER_EOCIE_Pos (2U) +#define ADC_IER_EOCIE_Msk (0x1U << ADC_IER_EOCIE_Pos) /*!< 0x00000004 */ +#define ADC_IER_EOCIE ADC_IER_EOCIE_Msk /*!< ADC group regular end of unitary conversion interrupt */ +#define ADC_IER_EOSIE_Pos (3U) +#define ADC_IER_EOSIE_Msk (0x1U << ADC_IER_EOSIE_Pos) /*!< 0x00000008 */ +#define ADC_IER_EOSIE ADC_IER_EOSIE_Msk /*!< ADC group regular end of sequence conversions interrupt */ +#define ADC_IER_OVRIE_Pos (4U) +#define ADC_IER_OVRIE_Msk (0x1U << ADC_IER_OVRIE_Pos) /*!< 0x00000010 */ +#define ADC_IER_OVRIE ADC_IER_OVRIE_Msk /*!< ADC group regular overrun interrupt */ +#define ADC_IER_JEOCIE_Pos (5U) +#define ADC_IER_JEOCIE_Msk (0x1U << ADC_IER_JEOCIE_Pos) /*!< 0x00000020 */ +#define ADC_IER_JEOCIE ADC_IER_JEOCIE_Msk /*!< ADC group injected end of unitary conversion interrupt */ +#define ADC_IER_JEOSIE_Pos (6U) +#define ADC_IER_JEOSIE_Msk (0x1U << ADC_IER_JEOSIE_Pos) /*!< 0x00000040 */ +#define ADC_IER_JEOSIE ADC_IER_JEOSIE_Msk /*!< ADC group injected end of sequence conversions interrupt */ +#define ADC_IER_AWD1IE_Pos (7U) +#define ADC_IER_AWD1IE_Msk (0x1U << ADC_IER_AWD1IE_Pos) /*!< 0x00000080 */ +#define ADC_IER_AWD1IE ADC_IER_AWD1IE_Msk /*!< ADC analog watchdog 1 interrupt */ +#define ADC_IER_AWD2IE_Pos (8U) +#define ADC_IER_AWD2IE_Msk (0x1U << ADC_IER_AWD2IE_Pos) /*!< 0x00000100 */ +#define ADC_IER_AWD2IE ADC_IER_AWD2IE_Msk /*!< ADC analog watchdog 2 interrupt */ +#define ADC_IER_AWD3IE_Pos (9U) +#define ADC_IER_AWD3IE_Msk (0x1U << ADC_IER_AWD3IE_Pos) /*!< 0x00000200 */ +#define ADC_IER_AWD3IE ADC_IER_AWD3IE_Msk /*!< ADC analog watchdog 3 interrupt */ +#define ADC_IER_JQOVFIE_Pos (10U) +#define ADC_IER_JQOVFIE_Msk (0x1U << ADC_IER_JQOVFIE_Pos) /*!< 0x00000400 */ +#define ADC_IER_JQOVFIE ADC_IER_JQOVFIE_Msk /*!< ADC group injected contexts queue overflow interrupt */ + +/* Legacy defines */ +#define ADC_IER_ADRDY (ADC_IER_ADRDYIE) +#define ADC_IER_EOSMP (ADC_IER_EOSMPIE) +#define ADC_IER_EOC (ADC_IER_EOCIE) +#define ADC_IER_EOS (ADC_IER_EOSIE) +#define ADC_IER_OVR (ADC_IER_OVRIE) +#define ADC_IER_JEOC (ADC_IER_JEOCIE) +#define ADC_IER_JEOS (ADC_IER_JEOSIE) +#define ADC_IER_AWD1 (ADC_IER_AWD1IE) +#define ADC_IER_AWD2 (ADC_IER_AWD2IE) +#define ADC_IER_AWD3 (ADC_IER_AWD3IE) +#define ADC_IER_JQOVF (ADC_IER_JQOVFIE) + +/******************** Bit definition for ADC_CR register ********************/ +#define ADC_CR_ADEN_Pos (0U) +#define ADC_CR_ADEN_Msk (0x1U << ADC_CR_ADEN_Pos) /*!< 0x00000001 */ +#define ADC_CR_ADEN ADC_CR_ADEN_Msk /*!< ADC enable */ +#define ADC_CR_ADDIS_Pos (1U) +#define ADC_CR_ADDIS_Msk (0x1U << ADC_CR_ADDIS_Pos) /*!< 0x00000002 */ +#define ADC_CR_ADDIS ADC_CR_ADDIS_Msk /*!< ADC disable */ +#define ADC_CR_ADSTART_Pos (2U) +#define ADC_CR_ADSTART_Msk (0x1U << ADC_CR_ADSTART_Pos) /*!< 0x00000004 */ +#define ADC_CR_ADSTART ADC_CR_ADSTART_Msk /*!< ADC group regular conversion start */ +#define ADC_CR_JADSTART_Pos (3U) +#define ADC_CR_JADSTART_Msk (0x1U << ADC_CR_JADSTART_Pos) /*!< 0x00000008 */ +#define ADC_CR_JADSTART ADC_CR_JADSTART_Msk /*!< ADC group injected conversion start */ +#define ADC_CR_ADSTP_Pos (4U) +#define ADC_CR_ADSTP_Msk (0x1U << ADC_CR_ADSTP_Pos) /*!< 0x00000010 */ +#define ADC_CR_ADSTP ADC_CR_ADSTP_Msk /*!< ADC group regular conversion stop */ +#define ADC_CR_JADSTP_Pos (5U) +#define ADC_CR_JADSTP_Msk (0x1U << ADC_CR_JADSTP_Pos) /*!< 0x00000020 */ +#define ADC_CR_JADSTP ADC_CR_JADSTP_Msk /*!< ADC group injected conversion stop */ +#define ADC_CR_ADVREGEN_Pos (28U) +#define ADC_CR_ADVREGEN_Msk (0x1U << ADC_CR_ADVREGEN_Pos) /*!< 0x10000000 */ +#define ADC_CR_ADVREGEN ADC_CR_ADVREGEN_Msk /*!< ADC voltage regulator enable */ +#define ADC_CR_DEEPPWD_Pos (29U) +#define ADC_CR_DEEPPWD_Msk (0x1U << ADC_CR_DEEPPWD_Pos) /*!< 0x20000000 */ +#define ADC_CR_DEEPPWD ADC_CR_DEEPPWD_Msk /*!< ADC deep power down enable */ +#define ADC_CR_ADCALDIF_Pos (30U) +#define ADC_CR_ADCALDIF_Msk (0x1U << ADC_CR_ADCALDIF_Pos) /*!< 0x40000000 */ +#define ADC_CR_ADCALDIF ADC_CR_ADCALDIF_Msk /*!< ADC differential mode for calibration */ +#define ADC_CR_ADCAL_Pos (31U) +#define ADC_CR_ADCAL_Msk (0x1U << ADC_CR_ADCAL_Pos) /*!< 0x80000000 */ +#define ADC_CR_ADCAL ADC_CR_ADCAL_Msk /*!< ADC calibration */ + +/******************** Bit definition for ADC_CFGR register ******************/ +#define ADC_CFGR_DMAEN_Pos (0U) +#define ADC_CFGR_DMAEN_Msk (0x1U << ADC_CFGR_DMAEN_Pos) /*!< 0x00000001 */ +#define ADC_CFGR_DMAEN ADC_CFGR_DMAEN_Msk /*!< ADC DMA transfer enable */ +#define ADC_CFGR_DMACFG_Pos (1U) +#define ADC_CFGR_DMACFG_Msk (0x1U << ADC_CFGR_DMACFG_Pos) /*!< 0x00000002 */ +#define ADC_CFGR_DMACFG ADC_CFGR_DMACFG_Msk /*!< ADC DMA transfer configuration */ + +#define ADC_CFGR_RES_Pos (3U) +#define ADC_CFGR_RES_Msk (0x3U << ADC_CFGR_RES_Pos) /*!< 0x00000018 */ +#define ADC_CFGR_RES ADC_CFGR_RES_Msk /*!< ADC data resolution */ +#define ADC_CFGR_RES_0 (0x1U << ADC_CFGR_RES_Pos) /*!< 0x00000008 */ +#define ADC_CFGR_RES_1 (0x2U << ADC_CFGR_RES_Pos) /*!< 0x00000010 */ + +#define ADC_CFGR_ALIGN_Pos (5U) +#define ADC_CFGR_ALIGN_Msk (0x1U << ADC_CFGR_ALIGN_Pos) /*!< 0x00000020 */ +#define ADC_CFGR_ALIGN ADC_CFGR_ALIGN_Msk /*!< ADC data alignement */ + +#define ADC_CFGR_EXTSEL_Pos (6U) +#define ADC_CFGR_EXTSEL_Msk (0xFU << ADC_CFGR_EXTSEL_Pos) /*!< 0x000003C0 */ +#define ADC_CFGR_EXTSEL ADC_CFGR_EXTSEL_Msk /*!< ADC group regular external trigger source */ +#define ADC_CFGR_EXTSEL_0 (0x1U << ADC_CFGR_EXTSEL_Pos) /*!< 0x00000040 */ +#define ADC_CFGR_EXTSEL_1 (0x2U << ADC_CFGR_EXTSEL_Pos) /*!< 0x00000080 */ +#define ADC_CFGR_EXTSEL_2 (0x4U << ADC_CFGR_EXTSEL_Pos) /*!< 0x00000100 */ +#define ADC_CFGR_EXTSEL_3 (0x8U << ADC_CFGR_EXTSEL_Pos) /*!< 0x00000200 */ + +#define ADC_CFGR_EXTEN_Pos (10U) +#define ADC_CFGR_EXTEN_Msk (0x3U << ADC_CFGR_EXTEN_Pos) /*!< 0x00000C00 */ +#define ADC_CFGR_EXTEN ADC_CFGR_EXTEN_Msk /*!< ADC group regular external trigger polarity */ +#define ADC_CFGR_EXTEN_0 (0x1U << ADC_CFGR_EXTEN_Pos) /*!< 0x00000400 */ +#define ADC_CFGR_EXTEN_1 (0x2U << ADC_CFGR_EXTEN_Pos) /*!< 0x00000800 */ + +#define ADC_CFGR_OVRMOD_Pos (12U) +#define ADC_CFGR_OVRMOD_Msk (0x1U << ADC_CFGR_OVRMOD_Pos) /*!< 0x00001000 */ +#define ADC_CFGR_OVRMOD ADC_CFGR_OVRMOD_Msk /*!< ADC group regular overrun configuration */ +#define ADC_CFGR_CONT_Pos (13U) +#define ADC_CFGR_CONT_Msk (0x1U << ADC_CFGR_CONT_Pos) /*!< 0x00002000 */ +#define ADC_CFGR_CONT ADC_CFGR_CONT_Msk /*!< ADC group regular continuous conversion mode */ +#define ADC_CFGR_AUTDLY_Pos (14U) +#define ADC_CFGR_AUTDLY_Msk (0x1U << ADC_CFGR_AUTDLY_Pos) /*!< 0x00004000 */ +#define ADC_CFGR_AUTDLY ADC_CFGR_AUTDLY_Msk /*!< ADC low power auto wait */ + +#define ADC_CFGR_DISCEN_Pos (16U) +#define ADC_CFGR_DISCEN_Msk (0x1U << ADC_CFGR_DISCEN_Pos) /*!< 0x00010000 */ +#define ADC_CFGR_DISCEN ADC_CFGR_DISCEN_Msk /*!< ADC group regular sequencer discontinuous mode */ + +#define ADC_CFGR_DISCNUM_Pos (17U) +#define ADC_CFGR_DISCNUM_Msk (0x7U << ADC_CFGR_DISCNUM_Pos) /*!< 0x000E0000 */ +#define ADC_CFGR_DISCNUM ADC_CFGR_DISCNUM_Msk /*!< ADC group regular sequencer discontinuous number of ranks */ +#define ADC_CFGR_DISCNUM_0 (0x1U << ADC_CFGR_DISCNUM_Pos) /*!< 0x00020000 */ +#define ADC_CFGR_DISCNUM_1 (0x2U << ADC_CFGR_DISCNUM_Pos) /*!< 0x00040000 */ +#define ADC_CFGR_DISCNUM_2 (0x4U << ADC_CFGR_DISCNUM_Pos) /*!< 0x00080000 */ + +#define ADC_CFGR_JDISCEN_Pos (20U) +#define ADC_CFGR_JDISCEN_Msk (0x1U << ADC_CFGR_JDISCEN_Pos) /*!< 0x00100000 */ +#define ADC_CFGR_JDISCEN ADC_CFGR_JDISCEN_Msk /*!< ADC group injected sequencer discontinuous mode */ +#define ADC_CFGR_JQM_Pos (21U) +#define ADC_CFGR_JQM_Msk (0x1U << ADC_CFGR_JQM_Pos) /*!< 0x00200000 */ +#define ADC_CFGR_JQM ADC_CFGR_JQM_Msk /*!< ADC group injected contexts queue mode */ +#define ADC_CFGR_AWD1SGL_Pos (22U) +#define ADC_CFGR_AWD1SGL_Msk (0x1U << ADC_CFGR_AWD1SGL_Pos) /*!< 0x00400000 */ +#define ADC_CFGR_AWD1SGL ADC_CFGR_AWD1SGL_Msk /*!< ADC analog watchdog 1 monitoring a single channel or all channels */ +#define ADC_CFGR_AWD1EN_Pos (23U) +#define ADC_CFGR_AWD1EN_Msk (0x1U << ADC_CFGR_AWD1EN_Pos) /*!< 0x00800000 */ +#define ADC_CFGR_AWD1EN ADC_CFGR_AWD1EN_Msk /*!< ADC analog watchdog 1 enable on scope ADC group regular */ +#define ADC_CFGR_JAWD1EN_Pos (24U) +#define ADC_CFGR_JAWD1EN_Msk (0x1U << ADC_CFGR_JAWD1EN_Pos) /*!< 0x01000000 */ +#define ADC_CFGR_JAWD1EN ADC_CFGR_JAWD1EN_Msk /*!< ADC analog watchdog 1 enable on scope ADC group injected */ +#define ADC_CFGR_JAUTO_Pos (25U) +#define ADC_CFGR_JAUTO_Msk (0x1U << ADC_CFGR_JAUTO_Pos) /*!< 0x02000000 */ +#define ADC_CFGR_JAUTO ADC_CFGR_JAUTO_Msk /*!< ADC group injected automatic trigger mode */ + +#define ADC_CFGR_AWD1CH_Pos (26U) +#define ADC_CFGR_AWD1CH_Msk (0x1FU << ADC_CFGR_AWD1CH_Pos) /*!< 0x7C000000 */ +#define ADC_CFGR_AWD1CH ADC_CFGR_AWD1CH_Msk /*!< ADC analog watchdog 1 monitored channel selection */ +#define ADC_CFGR_AWD1CH_0 (0x01U << ADC_CFGR_AWD1CH_Pos) /*!< 0x04000000 */ +#define ADC_CFGR_AWD1CH_1 (0x02U << ADC_CFGR_AWD1CH_Pos) /*!< 0x08000000 */ +#define ADC_CFGR_AWD1CH_2 (0x04U << ADC_CFGR_AWD1CH_Pos) /*!< 0x10000000 */ +#define ADC_CFGR_AWD1CH_3 (0x08U << ADC_CFGR_AWD1CH_Pos) /*!< 0x20000000 */ +#define ADC_CFGR_AWD1CH_4 (0x10U << ADC_CFGR_AWD1CH_Pos) /*!< 0x40000000 */ + +#define ADC_CFGR_JQDIS_Pos (31U) +#define ADC_CFGR_JQDIS_Msk (0x1U << ADC_CFGR_JQDIS_Pos) /*!< 0x80000000 */ +#define ADC_CFGR_JQDIS ADC_CFGR_JQDIS_Msk /*!< ADC group injected contexts queue disable */ + +/******************** Bit definition for ADC_CFGR2 register *****************/ +#define ADC_CFGR2_ROVSE_Pos (0U) +#define ADC_CFGR2_ROVSE_Msk (0x1U << ADC_CFGR2_ROVSE_Pos) /*!< 0x00000001 */ +#define ADC_CFGR2_ROVSE ADC_CFGR2_ROVSE_Msk /*!< ADC oversampler enable on scope ADC group regular */ +#define ADC_CFGR2_JOVSE_Pos (1U) +#define ADC_CFGR2_JOVSE_Msk (0x1U << ADC_CFGR2_JOVSE_Pos) /*!< 0x00000002 */ +#define ADC_CFGR2_JOVSE ADC_CFGR2_JOVSE_Msk /*!< ADC oversampler enable on scope ADC group injected */ + +#define ADC_CFGR2_OVSR_Pos (2U) +#define ADC_CFGR2_OVSR_Msk (0x7U << ADC_CFGR2_OVSR_Pos) /*!< 0x0000001C */ +#define ADC_CFGR2_OVSR ADC_CFGR2_OVSR_Msk /*!< ADC oversampling ratio */ +#define ADC_CFGR2_OVSR_0 (0x1U << ADC_CFGR2_OVSR_Pos) /*!< 0x00000004 */ +#define ADC_CFGR2_OVSR_1 (0x2U << ADC_CFGR2_OVSR_Pos) /*!< 0x00000008 */ +#define ADC_CFGR2_OVSR_2 (0x4U << ADC_CFGR2_OVSR_Pos) /*!< 0x00000010 */ + +#define ADC_CFGR2_OVSS_Pos (5U) +#define ADC_CFGR2_OVSS_Msk (0xFU << ADC_CFGR2_OVSS_Pos) /*!< 0x000001E0 */ +#define ADC_CFGR2_OVSS ADC_CFGR2_OVSS_Msk /*!< ADC oversampling shift */ +#define ADC_CFGR2_OVSS_0 (0x1U << ADC_CFGR2_OVSS_Pos) /*!< 0x00000020 */ +#define ADC_CFGR2_OVSS_1 (0x2U << ADC_CFGR2_OVSS_Pos) /*!< 0x00000040 */ +#define ADC_CFGR2_OVSS_2 (0x4U << ADC_CFGR2_OVSS_Pos) /*!< 0x00000080 */ +#define ADC_CFGR2_OVSS_3 (0x8U << ADC_CFGR2_OVSS_Pos) /*!< 0x00000100 */ + +#define ADC_CFGR2_TROVS_Pos (9U) +#define ADC_CFGR2_TROVS_Msk (0x1U << ADC_CFGR2_TROVS_Pos) /*!< 0x00000200 */ +#define ADC_CFGR2_TROVS ADC_CFGR2_TROVS_Msk /*!< ADC oversampling discontinuous mode (triggered mode) for ADC group regular */ +#define ADC_CFGR2_ROVSM_Pos (10U) +#define ADC_CFGR2_ROVSM_Msk (0x1U << ADC_CFGR2_ROVSM_Pos) /*!< 0x00000400 */ +#define ADC_CFGR2_ROVSM ADC_CFGR2_ROVSM_Msk /*!< ADC oversampling mode managing interlaced conversions of ADC group regular and group injected */ + +/******************** Bit definition for ADC_SMPR1 register *****************/ +#define ADC_SMPR1_SMP0_Pos (0U) +#define ADC_SMPR1_SMP0_Msk (0x7U << ADC_SMPR1_SMP0_Pos) /*!< 0x00000007 */ +#define ADC_SMPR1_SMP0 ADC_SMPR1_SMP0_Msk /*!< ADC channel 0 sampling time selection */ +#define ADC_SMPR1_SMP0_0 (0x1U << ADC_SMPR1_SMP0_Pos) /*!< 0x00000001 */ +#define ADC_SMPR1_SMP0_1 (0x2U << ADC_SMPR1_SMP0_Pos) /*!< 0x00000002 */ +#define ADC_SMPR1_SMP0_2 (0x4U << ADC_SMPR1_SMP0_Pos) /*!< 0x00000004 */ + +#define ADC_SMPR1_SMP1_Pos (3U) +#define ADC_SMPR1_SMP1_Msk (0x7U << ADC_SMPR1_SMP1_Pos) /*!< 0x00000038 */ +#define ADC_SMPR1_SMP1 ADC_SMPR1_SMP1_Msk /*!< ADC channel 1 sampling time selection */ +#define ADC_SMPR1_SMP1_0 (0x1U << ADC_SMPR1_SMP1_Pos) /*!< 0x00000008 */ +#define ADC_SMPR1_SMP1_1 (0x2U << ADC_SMPR1_SMP1_Pos) /*!< 0x00000010 */ +#define ADC_SMPR1_SMP1_2 (0x4U << ADC_SMPR1_SMP1_Pos) /*!< 0x00000020 */ + +#define ADC_SMPR1_SMP2_Pos (6U) +#define ADC_SMPR1_SMP2_Msk (0x7U << ADC_SMPR1_SMP2_Pos) /*!< 0x000001C0 */ +#define ADC_SMPR1_SMP2 ADC_SMPR1_SMP2_Msk /*!< ADC channel 2 sampling time selection */ +#define ADC_SMPR1_SMP2_0 (0x1U << ADC_SMPR1_SMP2_Pos) /*!< 0x00000040 */ +#define ADC_SMPR1_SMP2_1 (0x2U << ADC_SMPR1_SMP2_Pos) /*!< 0x00000080 */ +#define ADC_SMPR1_SMP2_2 (0x4U << ADC_SMPR1_SMP2_Pos) /*!< 0x00000100 */ + +#define ADC_SMPR1_SMP3_Pos (9U) +#define ADC_SMPR1_SMP3_Msk (0x7U << ADC_SMPR1_SMP3_Pos) /*!< 0x00000E00 */ +#define ADC_SMPR1_SMP3 ADC_SMPR1_SMP3_Msk /*!< ADC channel 3 sampling time selection */ +#define ADC_SMPR1_SMP3_0 (0x1U << ADC_SMPR1_SMP3_Pos) /*!< 0x00000200 */ +#define ADC_SMPR1_SMP3_1 (0x2U << ADC_SMPR1_SMP3_Pos) /*!< 0x00000400 */ +#define ADC_SMPR1_SMP3_2 (0x4U << ADC_SMPR1_SMP3_Pos) /*!< 0x00000800 */ + +#define ADC_SMPR1_SMP4_Pos (12U) +#define ADC_SMPR1_SMP4_Msk (0x7U << ADC_SMPR1_SMP4_Pos) /*!< 0x00007000 */ +#define ADC_SMPR1_SMP4 ADC_SMPR1_SMP4_Msk /*!< ADC channel 4 sampling time selection */ +#define ADC_SMPR1_SMP4_0 (0x1U << ADC_SMPR1_SMP4_Pos) /*!< 0x00001000 */ +#define ADC_SMPR1_SMP4_1 (0x2U << ADC_SMPR1_SMP4_Pos) /*!< 0x00002000 */ +#define ADC_SMPR1_SMP4_2 (0x4U << ADC_SMPR1_SMP4_Pos) /*!< 0x00004000 */ + +#define ADC_SMPR1_SMP5_Pos (15U) +#define ADC_SMPR1_SMP5_Msk (0x7U << ADC_SMPR1_SMP5_Pos) /*!< 0x00038000 */ +#define ADC_SMPR1_SMP5 ADC_SMPR1_SMP5_Msk /*!< ADC channel 5 sampling time selection */ +#define ADC_SMPR1_SMP5_0 (0x1U << ADC_SMPR1_SMP5_Pos) /*!< 0x00008000 */ +#define ADC_SMPR1_SMP5_1 (0x2U << ADC_SMPR1_SMP5_Pos) /*!< 0x00010000 */ +#define ADC_SMPR1_SMP5_2 (0x4U << ADC_SMPR1_SMP5_Pos) /*!< 0x00020000 */ + +#define ADC_SMPR1_SMP6_Pos (18U) +#define ADC_SMPR1_SMP6_Msk (0x7U << ADC_SMPR1_SMP6_Pos) /*!< 0x001C0000 */ +#define ADC_SMPR1_SMP6 ADC_SMPR1_SMP6_Msk /*!< ADC channel 6 sampling time selection */ +#define ADC_SMPR1_SMP6_0 (0x1U << ADC_SMPR1_SMP6_Pos) /*!< 0x00040000 */ +#define ADC_SMPR1_SMP6_1 (0x2U << ADC_SMPR1_SMP6_Pos) /*!< 0x00080000 */ +#define ADC_SMPR1_SMP6_2 (0x4U << ADC_SMPR1_SMP6_Pos) /*!< 0x00100000 */ + +#define ADC_SMPR1_SMP7_Pos (21U) +#define ADC_SMPR1_SMP7_Msk (0x7U << ADC_SMPR1_SMP7_Pos) /*!< 0x00E00000 */ +#define ADC_SMPR1_SMP7 ADC_SMPR1_SMP7_Msk /*!< ADC channel 7 sampling time selection */ +#define ADC_SMPR1_SMP7_0 (0x1U << ADC_SMPR1_SMP7_Pos) /*!< 0x00200000 */ +#define ADC_SMPR1_SMP7_1 (0x2U << ADC_SMPR1_SMP7_Pos) /*!< 0x00400000 */ +#define ADC_SMPR1_SMP7_2 (0x4U << ADC_SMPR1_SMP7_Pos) /*!< 0x00800000 */ + +#define ADC_SMPR1_SMP8_Pos (24U) +#define ADC_SMPR1_SMP8_Msk (0x7U << ADC_SMPR1_SMP8_Pos) /*!< 0x07000000 */ +#define ADC_SMPR1_SMP8 ADC_SMPR1_SMP8_Msk /*!< ADC channel 8 sampling time selection */ +#define ADC_SMPR1_SMP8_0 (0x1U << ADC_SMPR1_SMP8_Pos) /*!< 0x01000000 */ +#define ADC_SMPR1_SMP8_1 (0x2U << ADC_SMPR1_SMP8_Pos) /*!< 0x02000000 */ +#define ADC_SMPR1_SMP8_2 (0x4U << ADC_SMPR1_SMP8_Pos) /*!< 0x04000000 */ + +#define ADC_SMPR1_SMP9_Pos (27U) +#define ADC_SMPR1_SMP9_Msk (0x7U << ADC_SMPR1_SMP9_Pos) /*!< 0x38000000 */ +#define ADC_SMPR1_SMP9 ADC_SMPR1_SMP9_Msk /*!< ADC channel 9 sampling time selection */ +#define ADC_SMPR1_SMP9_0 (0x1U << ADC_SMPR1_SMP9_Pos) /*!< 0x08000000 */ +#define ADC_SMPR1_SMP9_1 (0x2U << ADC_SMPR1_SMP9_Pos) /*!< 0x10000000 */ +#define ADC_SMPR1_SMP9_2 (0x4U << ADC_SMPR1_SMP9_Pos) /*!< 0x20000000 */ + +/******************** Bit definition for ADC_SMPR2 register *****************/ +#define ADC_SMPR2_SMP10_Pos (0U) +#define ADC_SMPR2_SMP10_Msk (0x7U << ADC_SMPR2_SMP10_Pos) /*!< 0x00000007 */ +#define ADC_SMPR2_SMP10 ADC_SMPR2_SMP10_Msk /*!< ADC channel 10 sampling time selection */ +#define ADC_SMPR2_SMP10_0 (0x1U << ADC_SMPR2_SMP10_Pos) /*!< 0x00000001 */ +#define ADC_SMPR2_SMP10_1 (0x2U << ADC_SMPR2_SMP10_Pos) /*!< 0x00000002 */ +#define ADC_SMPR2_SMP10_2 (0x4U << ADC_SMPR2_SMP10_Pos) /*!< 0x00000004 */ + +#define ADC_SMPR2_SMP11_Pos (3U) +#define ADC_SMPR2_SMP11_Msk (0x7U << ADC_SMPR2_SMP11_Pos) /*!< 0x00000038 */ +#define ADC_SMPR2_SMP11 ADC_SMPR2_SMP11_Msk /*!< ADC channel 11 sampling time selection */ +#define ADC_SMPR2_SMP11_0 (0x1U << ADC_SMPR2_SMP11_Pos) /*!< 0x00000008 */ +#define ADC_SMPR2_SMP11_1 (0x2U << ADC_SMPR2_SMP11_Pos) /*!< 0x00000010 */ +#define ADC_SMPR2_SMP11_2 (0x4U << ADC_SMPR2_SMP11_Pos) /*!< 0x00000020 */ + +#define ADC_SMPR2_SMP12_Pos (6U) +#define ADC_SMPR2_SMP12_Msk (0x7U << ADC_SMPR2_SMP12_Pos) /*!< 0x000001C0 */ +#define ADC_SMPR2_SMP12 ADC_SMPR2_SMP12_Msk /*!< ADC channel 12 sampling time selection */ +#define ADC_SMPR2_SMP12_0 (0x1U << ADC_SMPR2_SMP12_Pos) /*!< 0x00000040 */ +#define ADC_SMPR2_SMP12_1 (0x2U << ADC_SMPR2_SMP12_Pos) /*!< 0x00000080 */ +#define ADC_SMPR2_SMP12_2 (0x4U << ADC_SMPR2_SMP12_Pos) /*!< 0x00000100 */ + +#define ADC_SMPR2_SMP13_Pos (9U) +#define ADC_SMPR2_SMP13_Msk (0x7U << ADC_SMPR2_SMP13_Pos) /*!< 0x00000E00 */ +#define ADC_SMPR2_SMP13 ADC_SMPR2_SMP13_Msk /*!< ADC channel 13 sampling time selection */ +#define ADC_SMPR2_SMP13_0 (0x1U << ADC_SMPR2_SMP13_Pos) /*!< 0x00000200 */ +#define ADC_SMPR2_SMP13_1 (0x2U << ADC_SMPR2_SMP13_Pos) /*!< 0x00000400 */ +#define ADC_SMPR2_SMP13_2 (0x4U << ADC_SMPR2_SMP13_Pos) /*!< 0x00000800 */ + +#define ADC_SMPR2_SMP14_Pos (12U) +#define ADC_SMPR2_SMP14_Msk (0x7U << ADC_SMPR2_SMP14_Pos) /*!< 0x00007000 */ +#define ADC_SMPR2_SMP14 ADC_SMPR2_SMP14_Msk /*!< ADC channel 14 sampling time selection */ +#define ADC_SMPR2_SMP14_0 (0x1U << ADC_SMPR2_SMP14_Pos) /*!< 0x00001000 */ +#define ADC_SMPR2_SMP14_1 (0x2U << ADC_SMPR2_SMP14_Pos) /*!< 0x00002000 */ +#define ADC_SMPR2_SMP14_2 (0x4U << ADC_SMPR2_SMP14_Pos) /*!< 0x00004000 */ + +#define ADC_SMPR2_SMP15_Pos (15U) +#define ADC_SMPR2_SMP15_Msk (0x7U << ADC_SMPR2_SMP15_Pos) /*!< 0x00038000 */ +#define ADC_SMPR2_SMP15 ADC_SMPR2_SMP15_Msk /*!< ADC channel 15 sampling time selection */ +#define ADC_SMPR2_SMP15_0 (0x1U << ADC_SMPR2_SMP15_Pos) /*!< 0x00008000 */ +#define ADC_SMPR2_SMP15_1 (0x2U << ADC_SMPR2_SMP15_Pos) /*!< 0x00010000 */ +#define ADC_SMPR2_SMP15_2 (0x4U << ADC_SMPR2_SMP15_Pos) /*!< 0x00020000 */ + +#define ADC_SMPR2_SMP16_Pos (18U) +#define ADC_SMPR2_SMP16_Msk (0x7U << ADC_SMPR2_SMP16_Pos) /*!< 0x001C0000 */ +#define ADC_SMPR2_SMP16 ADC_SMPR2_SMP16_Msk /*!< ADC channel 16 sampling time selection */ +#define ADC_SMPR2_SMP16_0 (0x1U << ADC_SMPR2_SMP16_Pos) /*!< 0x00040000 */ +#define ADC_SMPR2_SMP16_1 (0x2U << ADC_SMPR2_SMP16_Pos) /*!< 0x00080000 */ +#define ADC_SMPR2_SMP16_2 (0x4U << ADC_SMPR2_SMP16_Pos) /*!< 0x00100000 */ + +#define ADC_SMPR2_SMP17_Pos (21U) +#define ADC_SMPR2_SMP17_Msk (0x7U << ADC_SMPR2_SMP17_Pos) /*!< 0x00E00000 */ +#define ADC_SMPR2_SMP17 ADC_SMPR2_SMP17_Msk /*!< ADC channel 17 sampling time selection */ +#define ADC_SMPR2_SMP17_0 (0x1U << ADC_SMPR2_SMP17_Pos) /*!< 0x00200000 */ +#define ADC_SMPR2_SMP17_1 (0x2U << ADC_SMPR2_SMP17_Pos) /*!< 0x00400000 */ +#define ADC_SMPR2_SMP17_2 (0x4U << ADC_SMPR2_SMP17_Pos) /*!< 0x00800000 */ + +#define ADC_SMPR2_SMP18_Pos (24U) +#define ADC_SMPR2_SMP18_Msk (0x7U << ADC_SMPR2_SMP18_Pos) /*!< 0x07000000 */ +#define ADC_SMPR2_SMP18 ADC_SMPR2_SMP18_Msk /*!< ADC channel 18 sampling time selection */ +#define ADC_SMPR2_SMP18_0 (0x1U << ADC_SMPR2_SMP18_Pos) /*!< 0x01000000 */ +#define ADC_SMPR2_SMP18_1 (0x2U << ADC_SMPR2_SMP18_Pos) /*!< 0x02000000 */ +#define ADC_SMPR2_SMP18_2 (0x4U << ADC_SMPR2_SMP18_Pos) /*!< 0x04000000 */ + +/******************** Bit definition for ADC_TR1 register *******************/ +#define ADC_TR1_LT1_Pos (0U) +#define ADC_TR1_LT1_Msk (0xFFFU << ADC_TR1_LT1_Pos) /*!< 0x00000FFF */ +#define ADC_TR1_LT1 ADC_TR1_LT1_Msk /*!< ADC analog watchdog 1 threshold low */ +#define ADC_TR1_LT1_0 (0x001U << ADC_TR1_LT1_Pos) /*!< 0x00000001 */ +#define ADC_TR1_LT1_1 (0x002U << ADC_TR1_LT1_Pos) /*!< 0x00000002 */ +#define ADC_TR1_LT1_2 (0x004U << ADC_TR1_LT1_Pos) /*!< 0x00000004 */ +#define ADC_TR1_LT1_3 (0x008U << ADC_TR1_LT1_Pos) /*!< 0x00000008 */ +#define ADC_TR1_LT1_4 (0x010U << ADC_TR1_LT1_Pos) /*!< 0x00000010 */ +#define ADC_TR1_LT1_5 (0x020U << ADC_TR1_LT1_Pos) /*!< 0x00000020 */ +#define ADC_TR1_LT1_6 (0x040U << ADC_TR1_LT1_Pos) /*!< 0x00000040 */ +#define ADC_TR1_LT1_7 (0x080U << ADC_TR1_LT1_Pos) /*!< 0x00000080 */ +#define ADC_TR1_LT1_8 (0x100U << ADC_TR1_LT1_Pos) /*!< 0x00000100 */ +#define ADC_TR1_LT1_9 (0x200U << ADC_TR1_LT1_Pos) /*!< 0x00000200 */ +#define ADC_TR1_LT1_10 (0x400U << ADC_TR1_LT1_Pos) /*!< 0x00000400 */ +#define ADC_TR1_LT1_11 (0x800U << ADC_TR1_LT1_Pos) /*!< 0x00000800 */ + +#define ADC_TR1_HT1_Pos (16U) +#define ADC_TR1_HT1_Msk (0xFFFU << ADC_TR1_HT1_Pos) /*!< 0x0FFF0000 */ +#define ADC_TR1_HT1 ADC_TR1_HT1_Msk /*!< ADC Analog watchdog 1 threshold high */ +#define ADC_TR1_HT1_0 (0x001U << ADC_TR1_HT1_Pos) /*!< 0x00010000 */ +#define ADC_TR1_HT1_1 (0x002U << ADC_TR1_HT1_Pos) /*!< 0x00020000 */ +#define ADC_TR1_HT1_2 (0x004U << ADC_TR1_HT1_Pos) /*!< 0x00040000 */ +#define ADC_TR1_HT1_3 (0x008U << ADC_TR1_HT1_Pos) /*!< 0x00080000 */ +#define ADC_TR1_HT1_4 (0x010U << ADC_TR1_HT1_Pos) /*!< 0x00100000 */ +#define ADC_TR1_HT1_5 (0x020U << ADC_TR1_HT1_Pos) /*!< 0x00200000 */ +#define ADC_TR1_HT1_6 (0x040U << ADC_TR1_HT1_Pos) /*!< 0x00400000 */ +#define ADC_TR1_HT1_7 (0x080U << ADC_TR1_HT1_Pos) /*!< 0x00800000 */ +#define ADC_TR1_HT1_8 (0x100U << ADC_TR1_HT1_Pos) /*!< 0x01000000 */ +#define ADC_TR1_HT1_9 (0x200U << ADC_TR1_HT1_Pos) /*!< 0x02000000 */ +#define ADC_TR1_HT1_10 (0x400U << ADC_TR1_HT1_Pos) /*!< 0x04000000 */ +#define ADC_TR1_HT1_11 (0x800U << ADC_TR1_HT1_Pos) /*!< 0x08000000 */ + +/******************** Bit definition for ADC_TR2 register *******************/ +#define ADC_TR2_LT2_Pos (0U) +#define ADC_TR2_LT2_Msk (0xFFU << ADC_TR2_LT2_Pos) /*!< 0x000000FF */ +#define ADC_TR2_LT2 ADC_TR2_LT2_Msk /*!< ADC analog watchdog 2 threshold low */ +#define ADC_TR2_LT2_0 (0x01U << ADC_TR2_LT2_Pos) /*!< 0x00000001 */ +#define ADC_TR2_LT2_1 (0x02U << ADC_TR2_LT2_Pos) /*!< 0x00000002 */ +#define ADC_TR2_LT2_2 (0x04U << ADC_TR2_LT2_Pos) /*!< 0x00000004 */ +#define ADC_TR2_LT2_3 (0x08U << ADC_TR2_LT2_Pos) /*!< 0x00000008 */ +#define ADC_TR2_LT2_4 (0x10U << ADC_TR2_LT2_Pos) /*!< 0x00000010 */ +#define ADC_TR2_LT2_5 (0x20U << ADC_TR2_LT2_Pos) /*!< 0x00000020 */ +#define ADC_TR2_LT2_6 (0x40U << ADC_TR2_LT2_Pos) /*!< 0x00000040 */ +#define ADC_TR2_LT2_7 (0x80U << ADC_TR2_LT2_Pos) /*!< 0x00000080 */ + +#define ADC_TR2_HT2_Pos (16U) +#define ADC_TR2_HT2_Msk (0xFFU << ADC_TR2_HT2_Pos) /*!< 0x00FF0000 */ +#define ADC_TR2_HT2 ADC_TR2_HT2_Msk /*!< ADC analog watchdog 2 threshold high */ +#define ADC_TR2_HT2_0 (0x01U << ADC_TR2_HT2_Pos) /*!< 0x00010000 */ +#define ADC_TR2_HT2_1 (0x02U << ADC_TR2_HT2_Pos) /*!< 0x00020000 */ +#define ADC_TR2_HT2_2 (0x04U << ADC_TR2_HT2_Pos) /*!< 0x00040000 */ +#define ADC_TR2_HT2_3 (0x08U << ADC_TR2_HT2_Pos) /*!< 0x00080000 */ +#define ADC_TR2_HT2_4 (0x10U << ADC_TR2_HT2_Pos) /*!< 0x00100000 */ +#define ADC_TR2_HT2_5 (0x20U << ADC_TR2_HT2_Pos) /*!< 0x00200000 */ +#define ADC_TR2_HT2_6 (0x40U << ADC_TR2_HT2_Pos) /*!< 0x00400000 */ +#define ADC_TR2_HT2_7 (0x80U << ADC_TR2_HT2_Pos) /*!< 0x00800000 */ + +/******************** Bit definition for ADC_TR3 register *******************/ +#define ADC_TR3_LT3_Pos (0U) +#define ADC_TR3_LT3_Msk (0xFFU << ADC_TR3_LT3_Pos) /*!< 0x000000FF */ +#define ADC_TR3_LT3 ADC_TR3_LT3_Msk /*!< ADC analog watchdog 3 threshold low */ +#define ADC_TR3_LT3_0 (0x01U << ADC_TR3_LT3_Pos) /*!< 0x00000001 */ +#define ADC_TR3_LT3_1 (0x02U << ADC_TR3_LT3_Pos) /*!< 0x00000002 */ +#define ADC_TR3_LT3_2 (0x04U << ADC_TR3_LT3_Pos) /*!< 0x00000004 */ +#define ADC_TR3_LT3_3 (0x08U << ADC_TR3_LT3_Pos) /*!< 0x00000008 */ +#define ADC_TR3_LT3_4 (0x10U << ADC_TR3_LT3_Pos) /*!< 0x00000010 */ +#define ADC_TR3_LT3_5 (0x20U << ADC_TR3_LT3_Pos) /*!< 0x00000020 */ +#define ADC_TR3_LT3_6 (0x40U << ADC_TR3_LT3_Pos) /*!< 0x00000040 */ +#define ADC_TR3_LT3_7 (0x80U << ADC_TR3_LT3_Pos) /*!< 0x00000080 */ + +#define ADC_TR3_HT3_Pos (16U) +#define ADC_TR3_HT3_Msk (0xFFU << ADC_TR3_HT3_Pos) /*!< 0x00FF0000 */ +#define ADC_TR3_HT3 ADC_TR3_HT3_Msk /*!< ADC analog watchdog 3 threshold high */ +#define ADC_TR3_HT3_0 (0x01U << ADC_TR3_HT3_Pos) /*!< 0x00010000 */ +#define ADC_TR3_HT3_1 (0x02U << ADC_TR3_HT3_Pos) /*!< 0x00020000 */ +#define ADC_TR3_HT3_2 (0x04U << ADC_TR3_HT3_Pos) /*!< 0x00040000 */ +#define ADC_TR3_HT3_3 (0x08U << ADC_TR3_HT3_Pos) /*!< 0x00080000 */ +#define ADC_TR3_HT3_4 (0x10U << ADC_TR3_HT3_Pos) /*!< 0x00100000 */ +#define ADC_TR3_HT3_5 (0x20U << ADC_TR3_HT3_Pos) /*!< 0x00200000 */ +#define ADC_TR3_HT3_6 (0x40U << ADC_TR3_HT3_Pos) /*!< 0x00400000 */ +#define ADC_TR3_HT3_7 (0x80U << ADC_TR3_HT3_Pos) /*!< 0x00800000 */ + +/******************** Bit definition for ADC_SQR1 register ******************/ +#define ADC_SQR1_L_Pos (0U) +#define ADC_SQR1_L_Msk (0xFU << ADC_SQR1_L_Pos) /*!< 0x0000000F */ +#define ADC_SQR1_L ADC_SQR1_L_Msk /*!< ADC group regular sequencer scan length */ +#define ADC_SQR1_L_0 (0x1U << ADC_SQR1_L_Pos) /*!< 0x00000001 */ +#define ADC_SQR1_L_1 (0x2U << ADC_SQR1_L_Pos) /*!< 0x00000002 */ +#define ADC_SQR1_L_2 (0x4U << ADC_SQR1_L_Pos) /*!< 0x00000004 */ +#define ADC_SQR1_L_3 (0x8U << ADC_SQR1_L_Pos) /*!< 0x00000008 */ + +#define ADC_SQR1_SQ1_Pos (6U) +#define ADC_SQR1_SQ1_Msk (0x1FU << ADC_SQR1_SQ1_Pos) /*!< 0x000007C0 */ +#define ADC_SQR1_SQ1 ADC_SQR1_SQ1_Msk /*!< ADC group regular sequencer rank 1 */ +#define ADC_SQR1_SQ1_0 (0x01U << ADC_SQR1_SQ1_Pos) /*!< 0x00000040 */ +#define ADC_SQR1_SQ1_1 (0x02U << ADC_SQR1_SQ1_Pos) /*!< 0x00000080 */ +#define ADC_SQR1_SQ1_2 (0x04U << ADC_SQR1_SQ1_Pos) /*!< 0x00000100 */ +#define ADC_SQR1_SQ1_3 (0x08U << ADC_SQR1_SQ1_Pos) /*!< 0x00000200 */ +#define ADC_SQR1_SQ1_4 (0x10U << ADC_SQR1_SQ1_Pos) /*!< 0x00000400 */ + +#define ADC_SQR1_SQ2_Pos (12U) +#define ADC_SQR1_SQ2_Msk (0x1FU << ADC_SQR1_SQ2_Pos) /*!< 0x0001F000 */ +#define ADC_SQR1_SQ2 ADC_SQR1_SQ2_Msk /*!< ADC group regular sequencer rank 2 */ +#define ADC_SQR1_SQ2_0 (0x01U << ADC_SQR1_SQ2_Pos) /*!< 0x00001000 */ +#define ADC_SQR1_SQ2_1 (0x02U << ADC_SQR1_SQ2_Pos) /*!< 0x00002000 */ +#define ADC_SQR1_SQ2_2 (0x04U << ADC_SQR1_SQ2_Pos) /*!< 0x00004000 */ +#define ADC_SQR1_SQ2_3 (0x08U << ADC_SQR1_SQ2_Pos) /*!< 0x00008000 */ +#define ADC_SQR1_SQ2_4 (0x10U << ADC_SQR1_SQ2_Pos) /*!< 0x00010000 */ + +#define ADC_SQR1_SQ3_Pos (18U) +#define ADC_SQR1_SQ3_Msk (0x1FU << ADC_SQR1_SQ3_Pos) /*!< 0x007C0000 */ +#define ADC_SQR1_SQ3 ADC_SQR1_SQ3_Msk /*!< ADC group regular sequencer rank 3 */ +#define ADC_SQR1_SQ3_0 (0x01U << ADC_SQR1_SQ3_Pos) /*!< 0x00040000 */ +#define ADC_SQR1_SQ3_1 (0x02U << ADC_SQR1_SQ3_Pos) /*!< 0x00080000 */ +#define ADC_SQR1_SQ3_2 (0x04U << ADC_SQR1_SQ3_Pos) /*!< 0x00100000 */ +#define ADC_SQR1_SQ3_3 (0x08U << ADC_SQR1_SQ3_Pos) /*!< 0x00200000 */ +#define ADC_SQR1_SQ3_4 (0x10U << ADC_SQR1_SQ3_Pos) /*!< 0x00400000 */ + +#define ADC_SQR1_SQ4_Pos (24U) +#define ADC_SQR1_SQ4_Msk (0x1FU << ADC_SQR1_SQ4_Pos) /*!< 0x1F000000 */ +#define ADC_SQR1_SQ4 ADC_SQR1_SQ4_Msk /*!< ADC group regular sequencer rank 4 */ +#define ADC_SQR1_SQ4_0 (0x01U << ADC_SQR1_SQ4_Pos) /*!< 0x01000000 */ +#define ADC_SQR1_SQ4_1 (0x02U << ADC_SQR1_SQ4_Pos) /*!< 0x02000000 */ +#define ADC_SQR1_SQ4_2 (0x04U << ADC_SQR1_SQ4_Pos) /*!< 0x04000000 */ +#define ADC_SQR1_SQ4_3 (0x08U << ADC_SQR1_SQ4_Pos) /*!< 0x08000000 */ +#define ADC_SQR1_SQ4_4 (0x10U << ADC_SQR1_SQ4_Pos) /*!< 0x10000000 */ + +/******************** Bit definition for ADC_SQR2 register ******************/ +#define ADC_SQR2_SQ5_Pos (0U) +#define ADC_SQR2_SQ5_Msk (0x1FU << ADC_SQR2_SQ5_Pos) /*!< 0x0000001F */ +#define ADC_SQR2_SQ5 ADC_SQR2_SQ5_Msk /*!< ADC group regular sequencer rank 5 */ +#define ADC_SQR2_SQ5_0 (0x01U << ADC_SQR2_SQ5_Pos) /*!< 0x00000001 */ +#define ADC_SQR2_SQ5_1 (0x02U << ADC_SQR2_SQ5_Pos) /*!< 0x00000002 */ +#define ADC_SQR2_SQ5_2 (0x04U << ADC_SQR2_SQ5_Pos) /*!< 0x00000004 */ +#define ADC_SQR2_SQ5_3 (0x08U << ADC_SQR2_SQ5_Pos) /*!< 0x00000008 */ +#define ADC_SQR2_SQ5_4 (0x10U << ADC_SQR2_SQ5_Pos) /*!< 0x00000010 */ + +#define ADC_SQR2_SQ6_Pos (6U) +#define ADC_SQR2_SQ6_Msk (0x1FU << ADC_SQR2_SQ6_Pos) /*!< 0x000007C0 */ +#define ADC_SQR2_SQ6 ADC_SQR2_SQ6_Msk /*!< ADC group regular sequencer rank 6 */ +#define ADC_SQR2_SQ6_0 (0x01U << ADC_SQR2_SQ6_Pos) /*!< 0x00000040 */ +#define ADC_SQR2_SQ6_1 (0x02U << ADC_SQR2_SQ6_Pos) /*!< 0x00000080 */ +#define ADC_SQR2_SQ6_2 (0x04U << ADC_SQR2_SQ6_Pos) /*!< 0x00000100 */ +#define ADC_SQR2_SQ6_3 (0x08U << ADC_SQR2_SQ6_Pos) /*!< 0x00000200 */ +#define ADC_SQR2_SQ6_4 (0x10U << ADC_SQR2_SQ6_Pos) /*!< 0x00000400 */ + +#define ADC_SQR2_SQ7_Pos (12U) +#define ADC_SQR2_SQ7_Msk (0x1FU << ADC_SQR2_SQ7_Pos) /*!< 0x0001F000 */ +#define ADC_SQR2_SQ7 ADC_SQR2_SQ7_Msk /*!< ADC group regular sequencer rank 7 */ +#define ADC_SQR2_SQ7_0 (0x01U << ADC_SQR2_SQ7_Pos) /*!< 0x00001000 */ +#define ADC_SQR2_SQ7_1 (0x02U << ADC_SQR2_SQ7_Pos) /*!< 0x00002000 */ +#define ADC_SQR2_SQ7_2 (0x04U << ADC_SQR2_SQ7_Pos) /*!< 0x00004000 */ +#define ADC_SQR2_SQ7_3 (0x08U << ADC_SQR2_SQ7_Pos) /*!< 0x00008000 */ +#define ADC_SQR2_SQ7_4 (0x10U << ADC_SQR2_SQ7_Pos) /*!< 0x00010000 */ + +#define ADC_SQR2_SQ8_Pos (18U) +#define ADC_SQR2_SQ8_Msk (0x1FU << ADC_SQR2_SQ8_Pos) /*!< 0x007C0000 */ +#define ADC_SQR2_SQ8 ADC_SQR2_SQ8_Msk /*!< ADC group regular sequencer rank 8 */ +#define ADC_SQR2_SQ8_0 (0x01U << ADC_SQR2_SQ8_Pos) /*!< 0x00040000 */ +#define ADC_SQR2_SQ8_1 (0x02U << ADC_SQR2_SQ8_Pos) /*!< 0x00080000 */ +#define ADC_SQR2_SQ8_2 (0x04U << ADC_SQR2_SQ8_Pos) /*!< 0x00100000 */ +#define ADC_SQR2_SQ8_3 (0x08U << ADC_SQR2_SQ8_Pos) /*!< 0x00200000 */ +#define ADC_SQR2_SQ8_4 (0x10U << ADC_SQR2_SQ8_Pos) /*!< 0x00400000 */ + +#define ADC_SQR2_SQ9_Pos (24U) +#define ADC_SQR2_SQ9_Msk (0x1FU << ADC_SQR2_SQ9_Pos) /*!< 0x1F000000 */ +#define ADC_SQR2_SQ9 ADC_SQR2_SQ9_Msk /*!< ADC group regular sequencer rank 9 */ +#define ADC_SQR2_SQ9_0 (0x01U << ADC_SQR2_SQ9_Pos) /*!< 0x01000000 */ +#define ADC_SQR2_SQ9_1 (0x02U << ADC_SQR2_SQ9_Pos) /*!< 0x02000000 */ +#define ADC_SQR2_SQ9_2 (0x04U << ADC_SQR2_SQ9_Pos) /*!< 0x04000000 */ +#define ADC_SQR2_SQ9_3 (0x08U << ADC_SQR2_SQ9_Pos) /*!< 0x08000000 */ +#define ADC_SQR2_SQ9_4 (0x10U << ADC_SQR2_SQ9_Pos) /*!< 0x10000000 */ + +/******************** Bit definition for ADC_SQR3 register ******************/ +#define ADC_SQR3_SQ10_Pos (0U) +#define ADC_SQR3_SQ10_Msk (0x1FU << ADC_SQR3_SQ10_Pos) /*!< 0x0000001F */ +#define ADC_SQR3_SQ10 ADC_SQR3_SQ10_Msk /*!< ADC group regular sequencer rank 10 */ +#define ADC_SQR3_SQ10_0 (0x01U << ADC_SQR3_SQ10_Pos) /*!< 0x00000001 */ +#define ADC_SQR3_SQ10_1 (0x02U << ADC_SQR3_SQ10_Pos) /*!< 0x00000002 */ +#define ADC_SQR3_SQ10_2 (0x04U << ADC_SQR3_SQ10_Pos) /*!< 0x00000004 */ +#define ADC_SQR3_SQ10_3 (0x08U << ADC_SQR3_SQ10_Pos) /*!< 0x00000008 */ +#define ADC_SQR3_SQ10_4 (0x10U << ADC_SQR3_SQ10_Pos) /*!< 0x00000010 */ + +#define ADC_SQR3_SQ11_Pos (6U) +#define ADC_SQR3_SQ11_Msk (0x1FU << ADC_SQR3_SQ11_Pos) /*!< 0x000007C0 */ +#define ADC_SQR3_SQ11 ADC_SQR3_SQ11_Msk /*!< ADC group regular sequencer rank 11 */ +#define ADC_SQR3_SQ11_0 (0x01U << ADC_SQR3_SQ11_Pos) /*!< 0x00000040 */ +#define ADC_SQR3_SQ11_1 (0x02U << ADC_SQR3_SQ11_Pos) /*!< 0x00000080 */ +#define ADC_SQR3_SQ11_2 (0x04U << ADC_SQR3_SQ11_Pos) /*!< 0x00000100 */ +#define ADC_SQR3_SQ11_3 (0x08U << ADC_SQR3_SQ11_Pos) /*!< 0x00000200 */ +#define ADC_SQR3_SQ11_4 (0x10U << ADC_SQR3_SQ11_Pos) /*!< 0x00000400 */ + +#define ADC_SQR3_SQ12_Pos (12U) +#define ADC_SQR3_SQ12_Msk (0x1FU << ADC_SQR3_SQ12_Pos) /*!< 0x0001F000 */ +#define ADC_SQR3_SQ12 ADC_SQR3_SQ12_Msk /*!< ADC group regular sequencer rank 12 */ +#define ADC_SQR3_SQ12_0 (0x01U << ADC_SQR3_SQ12_Pos) /*!< 0x00001000 */ +#define ADC_SQR3_SQ12_1 (0x02U << ADC_SQR3_SQ12_Pos) /*!< 0x00002000 */ +#define ADC_SQR3_SQ12_2 (0x04U << ADC_SQR3_SQ12_Pos) /*!< 0x00004000 */ +#define ADC_SQR3_SQ12_3 (0x08U << ADC_SQR3_SQ12_Pos) /*!< 0x00008000 */ +#define ADC_SQR3_SQ12_4 (0x10U << ADC_SQR3_SQ12_Pos) /*!< 0x00010000 */ + +#define ADC_SQR3_SQ13_Pos (18U) +#define ADC_SQR3_SQ13_Msk (0x1FU << ADC_SQR3_SQ13_Pos) /*!< 0x007C0000 */ +#define ADC_SQR3_SQ13 ADC_SQR3_SQ13_Msk /*!< ADC group regular sequencer rank 13 */ +#define ADC_SQR3_SQ13_0 (0x01U << ADC_SQR3_SQ13_Pos) /*!< 0x00040000 */ +#define ADC_SQR3_SQ13_1 (0x02U << ADC_SQR3_SQ13_Pos) /*!< 0x00080000 */ +#define ADC_SQR3_SQ13_2 (0x04U << ADC_SQR3_SQ13_Pos) /*!< 0x00100000 */ +#define ADC_SQR3_SQ13_3 (0x08U << ADC_SQR3_SQ13_Pos) /*!< 0x00200000 */ +#define ADC_SQR3_SQ13_4 (0x10U << ADC_SQR3_SQ13_Pos) /*!< 0x00400000 */ + +#define ADC_SQR3_SQ14_Pos (24U) +#define ADC_SQR3_SQ14_Msk (0x1FU << ADC_SQR3_SQ14_Pos) /*!< 0x1F000000 */ +#define ADC_SQR3_SQ14 ADC_SQR3_SQ14_Msk /*!< ADC group regular sequencer rank 14 */ +#define ADC_SQR3_SQ14_0 (0x01U << ADC_SQR3_SQ14_Pos) /*!< 0x01000000 */ +#define ADC_SQR3_SQ14_1 (0x02U << ADC_SQR3_SQ14_Pos) /*!< 0x02000000 */ +#define ADC_SQR3_SQ14_2 (0x04U << ADC_SQR3_SQ14_Pos) /*!< 0x04000000 */ +#define ADC_SQR3_SQ14_3 (0x08U << ADC_SQR3_SQ14_Pos) /*!< 0x08000000 */ +#define ADC_SQR3_SQ14_4 (0x10U << ADC_SQR3_SQ14_Pos) /*!< 0x10000000 */ + +/******************** Bit definition for ADC_SQR4 register ******************/ +#define ADC_SQR4_SQ15_Pos (0U) +#define ADC_SQR4_SQ15_Msk (0x1FU << ADC_SQR4_SQ15_Pos) /*!< 0x0000001F */ +#define ADC_SQR4_SQ15 ADC_SQR4_SQ15_Msk /*!< ADC group regular sequencer rank 15 */ +#define ADC_SQR4_SQ15_0 (0x01U << ADC_SQR4_SQ15_Pos) /*!< 0x00000001 */ +#define ADC_SQR4_SQ15_1 (0x02U << ADC_SQR4_SQ15_Pos) /*!< 0x00000002 */ +#define ADC_SQR4_SQ15_2 (0x04U << ADC_SQR4_SQ15_Pos) /*!< 0x00000004 */ +#define ADC_SQR4_SQ15_3 (0x08U << ADC_SQR4_SQ15_Pos) /*!< 0x00000008 */ +#define ADC_SQR4_SQ15_4 (0x10U << ADC_SQR4_SQ15_Pos) /*!< 0x00000010 */ + +#define ADC_SQR4_SQ16_Pos (6U) +#define ADC_SQR4_SQ16_Msk (0x1FU << ADC_SQR4_SQ16_Pos) /*!< 0x000007C0 */ +#define ADC_SQR4_SQ16 ADC_SQR4_SQ16_Msk /*!< ADC group regular sequencer rank 16 */ +#define ADC_SQR4_SQ16_0 (0x01U << ADC_SQR4_SQ16_Pos) /*!< 0x00000040 */ +#define ADC_SQR4_SQ16_1 (0x02U << ADC_SQR4_SQ16_Pos) /*!< 0x00000080 */ +#define ADC_SQR4_SQ16_2 (0x04U << ADC_SQR4_SQ16_Pos) /*!< 0x00000100 */ +#define ADC_SQR4_SQ16_3 (0x08U << ADC_SQR4_SQ16_Pos) /*!< 0x00000200 */ +#define ADC_SQR4_SQ16_4 (0x10U << ADC_SQR4_SQ16_Pos) /*!< 0x00000400 */ + +/******************** Bit definition for ADC_DR register ********************/ +#define ADC_DR_RDATA_Pos (0U) +#define ADC_DR_RDATA_Msk (0xFFFFU << ADC_DR_RDATA_Pos) /*!< 0x0000FFFF */ +#define ADC_DR_RDATA ADC_DR_RDATA_Msk /*!< ADC group regular conversion data */ +#define ADC_DR_RDATA_0 (0x0001U << ADC_DR_RDATA_Pos) /*!< 0x00000001 */ +#define ADC_DR_RDATA_1 (0x0002U << ADC_DR_RDATA_Pos) /*!< 0x00000002 */ +#define ADC_DR_RDATA_2 (0x0004U << ADC_DR_RDATA_Pos) /*!< 0x00000004 */ +#define ADC_DR_RDATA_3 (0x0008U << ADC_DR_RDATA_Pos) /*!< 0x00000008 */ +#define ADC_DR_RDATA_4 (0x0010U << ADC_DR_RDATA_Pos) /*!< 0x00000010 */ +#define ADC_DR_RDATA_5 (0x0020U << ADC_DR_RDATA_Pos) /*!< 0x00000020 */ +#define ADC_DR_RDATA_6 (0x0040U << ADC_DR_RDATA_Pos) /*!< 0x00000040 */ +#define ADC_DR_RDATA_7 (0x0080U << ADC_DR_RDATA_Pos) /*!< 0x00000080 */ +#define ADC_DR_RDATA_8 (0x0100U << ADC_DR_RDATA_Pos) /*!< 0x00000100 */ +#define ADC_DR_RDATA_9 (0x0200U << ADC_DR_RDATA_Pos) /*!< 0x00000200 */ +#define ADC_DR_RDATA_10 (0x0400U << ADC_DR_RDATA_Pos) /*!< 0x00000400 */ +#define ADC_DR_RDATA_11 (0x0800U << ADC_DR_RDATA_Pos) /*!< 0x00000800 */ +#define ADC_DR_RDATA_12 (0x1000U << ADC_DR_RDATA_Pos) /*!< 0x00001000 */ +#define ADC_DR_RDATA_13 (0x2000U << ADC_DR_RDATA_Pos) /*!< 0x00002000 */ +#define ADC_DR_RDATA_14 (0x4000U << ADC_DR_RDATA_Pos) /*!< 0x00004000 */ +#define ADC_DR_RDATA_15 (0x8000U << ADC_DR_RDATA_Pos) /*!< 0x00008000 */ + +/******************** Bit definition for ADC_JSQR register ******************/ +#define ADC_JSQR_JL_Pos (0U) +#define ADC_JSQR_JL_Msk (0x3U << ADC_JSQR_JL_Pos) /*!< 0x00000003 */ +#define ADC_JSQR_JL ADC_JSQR_JL_Msk /*!< ADC group injected sequencer scan length */ +#define ADC_JSQR_JL_0 (0x1U << ADC_JSQR_JL_Pos) /*!< 0x00000001 */ +#define ADC_JSQR_JL_1 (0x2U << ADC_JSQR_JL_Pos) /*!< 0x00000002 */ + +#define ADC_JSQR_JEXTSEL_Pos (2U) +#define ADC_JSQR_JEXTSEL_Msk (0xFU << ADC_JSQR_JEXTSEL_Pos) /*!< 0x0000003C */ +#define ADC_JSQR_JEXTSEL ADC_JSQR_JEXTSEL_Msk /*!< ADC group injected external trigger source */ +#define ADC_JSQR_JEXTSEL_0 (0x1U << ADC_JSQR_JEXTSEL_Pos) /*!< 0x00000004 */ +#define ADC_JSQR_JEXTSEL_1 (0x2U << ADC_JSQR_JEXTSEL_Pos) /*!< 0x00000008 */ +#define ADC_JSQR_JEXTSEL_2 (0x4U << ADC_JSQR_JEXTSEL_Pos) /*!< 0x00000010 */ +#define ADC_JSQR_JEXTSEL_3 (0x8U << ADC_JSQR_JEXTSEL_Pos) /*!< 0x00000020 */ + +#define ADC_JSQR_JEXTEN_Pos (6U) +#define ADC_JSQR_JEXTEN_Msk (0x3U << ADC_JSQR_JEXTEN_Pos) /*!< 0x000000C0 */ +#define ADC_JSQR_JEXTEN ADC_JSQR_JEXTEN_Msk /*!< ADC group injected external trigger polarity */ +#define ADC_JSQR_JEXTEN_0 (0x1U << ADC_JSQR_JEXTEN_Pos) /*!< 0x00000040 */ +#define ADC_JSQR_JEXTEN_1 (0x2U << ADC_JSQR_JEXTEN_Pos) /*!< 0x00000080 */ + +#define ADC_JSQR_JSQ1_Pos (8U) +#define ADC_JSQR_JSQ1_Msk (0x1FU << ADC_JSQR_JSQ1_Pos) /*!< 0x00001F00 */ +#define ADC_JSQR_JSQ1 ADC_JSQR_JSQ1_Msk /*!< ADC group injected sequencer rank 1 */ +#define ADC_JSQR_JSQ1_0 (0x01U << ADC_JSQR_JSQ1_Pos) /*!< 0x00000100 */ +#define ADC_JSQR_JSQ1_1 (0x02U << ADC_JSQR_JSQ1_Pos) /*!< 0x00000200 */ +#define ADC_JSQR_JSQ1_2 (0x04U << ADC_JSQR_JSQ1_Pos) /*!< 0x00000400 */ +#define ADC_JSQR_JSQ1_3 (0x08U << ADC_JSQR_JSQ1_Pos) /*!< 0x00000800 */ +#define ADC_JSQR_JSQ1_4 (0x10U << ADC_JSQR_JSQ1_Pos) /*!< 0x00001000 */ + +#define ADC_JSQR_JSQ2_Pos (14U) +#define ADC_JSQR_JSQ2_Msk (0x1FU << ADC_JSQR_JSQ2_Pos) /*!< 0x0007C000 */ +#define ADC_JSQR_JSQ2 ADC_JSQR_JSQ2_Msk /*!< ADC group injected sequencer rank 2 */ +#define ADC_JSQR_JSQ2_0 (0x01U << ADC_JSQR_JSQ2_Pos) /*!< 0x00004000 */ +#define ADC_JSQR_JSQ2_1 (0x02U << ADC_JSQR_JSQ2_Pos) /*!< 0x00008000 */ +#define ADC_JSQR_JSQ2_2 (0x04U << ADC_JSQR_JSQ2_Pos) /*!< 0x00010000 */ +#define ADC_JSQR_JSQ2_3 (0x08U << ADC_JSQR_JSQ2_Pos) /*!< 0x00020000 */ +#define ADC_JSQR_JSQ2_4 (0x10U << ADC_JSQR_JSQ2_Pos) /*!< 0x00040000 */ + +#define ADC_JSQR_JSQ3_Pos (20U) +#define ADC_JSQR_JSQ3_Msk (0x1FU << ADC_JSQR_JSQ3_Pos) /*!< 0x01F00000 */ +#define ADC_JSQR_JSQ3 ADC_JSQR_JSQ3_Msk /*!< ADC group injected sequencer rank 3 */ +#define ADC_JSQR_JSQ3_0 (0x01U << ADC_JSQR_JSQ3_Pos) /*!< 0x00100000 */ +#define ADC_JSQR_JSQ3_1 (0x02U << ADC_JSQR_JSQ3_Pos) /*!< 0x00200000 */ +#define ADC_JSQR_JSQ3_2 (0x04U << ADC_JSQR_JSQ3_Pos) /*!< 0x00400000 */ +#define ADC_JSQR_JSQ3_3 (0x08U << ADC_JSQR_JSQ3_Pos) /*!< 0x00800000 */ +#define ADC_JSQR_JSQ3_4 (0x10U << ADC_JSQR_JSQ3_Pos) /*!< 0x01000000 */ + +#define ADC_JSQR_JSQ4_Pos (26U) +#define ADC_JSQR_JSQ4_Msk (0x1FU << ADC_JSQR_JSQ4_Pos) /*!< 0x7C000000 */ +#define ADC_JSQR_JSQ4 ADC_JSQR_JSQ4_Msk /*!< ADC group injected sequencer rank 4 */ +#define ADC_JSQR_JSQ4_0 (0x01U << ADC_JSQR_JSQ4_Pos) /*!< 0x04000000 */ +#define ADC_JSQR_JSQ4_1 (0x02U << ADC_JSQR_JSQ4_Pos) /*!< 0x08000000 */ +#define ADC_JSQR_JSQ4_2 (0x04U << ADC_JSQR_JSQ4_Pos) /*!< 0x10000000 */ +#define ADC_JSQR_JSQ4_3 (0x08U << ADC_JSQR_JSQ4_Pos) /*!< 0x20000000 */ +#define ADC_JSQR_JSQ4_4 (0x10U << ADC_JSQR_JSQ4_Pos) /*!< 0x40000000 */ + + +/******************** Bit definition for ADC_OFR1 register ******************/ +#define ADC_OFR1_OFFSET1_Pos (0U) +#define ADC_OFR1_OFFSET1_Msk (0xFFFU << ADC_OFR1_OFFSET1_Pos) /*!< 0x00000FFF */ +#define ADC_OFR1_OFFSET1 ADC_OFR1_OFFSET1_Msk /*!< ADC offset number 1 offset level */ +#define ADC_OFR1_OFFSET1_0 (0x001U << ADC_OFR1_OFFSET1_Pos) /*!< 0x00000001 */ +#define ADC_OFR1_OFFSET1_1 (0x002U << ADC_OFR1_OFFSET1_Pos) /*!< 0x00000002 */ +#define ADC_OFR1_OFFSET1_2 (0x004U << ADC_OFR1_OFFSET1_Pos) /*!< 0x00000004 */ +#define ADC_OFR1_OFFSET1_3 (0x008U << ADC_OFR1_OFFSET1_Pos) /*!< 0x00000008 */ +#define ADC_OFR1_OFFSET1_4 (0x010U << ADC_OFR1_OFFSET1_Pos) /*!< 0x00000010 */ +#define ADC_OFR1_OFFSET1_5 (0x020U << ADC_OFR1_OFFSET1_Pos) /*!< 0x00000020 */ +#define ADC_OFR1_OFFSET1_6 (0x040U << ADC_OFR1_OFFSET1_Pos) /*!< 0x00000040 */ +#define ADC_OFR1_OFFSET1_7 (0x080U << ADC_OFR1_OFFSET1_Pos) /*!< 0x00000080 */ +#define ADC_OFR1_OFFSET1_8 (0x100U << ADC_OFR1_OFFSET1_Pos) /*!< 0x00000100 */ +#define ADC_OFR1_OFFSET1_9 (0x200U << ADC_OFR1_OFFSET1_Pos) /*!< 0x00000200 */ +#define ADC_OFR1_OFFSET1_10 (0x400U << ADC_OFR1_OFFSET1_Pos) /*!< 0x00000400 */ +#define ADC_OFR1_OFFSET1_11 (0x800U << ADC_OFR1_OFFSET1_Pos) /*!< 0x00000800 */ + +#define ADC_OFR1_OFFSET1_CH_Pos (26U) +#define ADC_OFR1_OFFSET1_CH_Msk (0x1FU << ADC_OFR1_OFFSET1_CH_Pos) /*!< 0x7C000000 */ +#define ADC_OFR1_OFFSET1_CH ADC_OFR1_OFFSET1_CH_Msk /*!< ADC offset number 1 channel selection */ +#define ADC_OFR1_OFFSET1_CH_0 (0x01U << ADC_OFR1_OFFSET1_CH_Pos) /*!< 0x04000000 */ +#define ADC_OFR1_OFFSET1_CH_1 (0x02U << ADC_OFR1_OFFSET1_CH_Pos) /*!< 0x08000000 */ +#define ADC_OFR1_OFFSET1_CH_2 (0x04U << ADC_OFR1_OFFSET1_CH_Pos) /*!< 0x10000000 */ +#define ADC_OFR1_OFFSET1_CH_3 (0x08U << ADC_OFR1_OFFSET1_CH_Pos) /*!< 0x20000000 */ +#define ADC_OFR1_OFFSET1_CH_4 (0x10U << ADC_OFR1_OFFSET1_CH_Pos) /*!< 0x40000000 */ + +#define ADC_OFR1_OFFSET1_EN_Pos (31U) +#define ADC_OFR1_OFFSET1_EN_Msk (0x1U << ADC_OFR1_OFFSET1_EN_Pos) /*!< 0x80000000 */ +#define ADC_OFR1_OFFSET1_EN ADC_OFR1_OFFSET1_EN_Msk /*!< ADC offset number 1 enable */ + +/******************** Bit definition for ADC_OFR2 register ******************/ +#define ADC_OFR2_OFFSET2_Pos (0U) +#define ADC_OFR2_OFFSET2_Msk (0xFFFU << ADC_OFR2_OFFSET2_Pos) /*!< 0x00000FFF */ +#define ADC_OFR2_OFFSET2 ADC_OFR2_OFFSET2_Msk /*!< ADC offset number 2 offset level */ +#define ADC_OFR2_OFFSET2_0 (0x001U << ADC_OFR2_OFFSET2_Pos) /*!< 0x00000001 */ +#define ADC_OFR2_OFFSET2_1 (0x002U << ADC_OFR2_OFFSET2_Pos) /*!< 0x00000002 */ +#define ADC_OFR2_OFFSET2_2 (0x004U << ADC_OFR2_OFFSET2_Pos) /*!< 0x00000004 */ +#define ADC_OFR2_OFFSET2_3 (0x008U << ADC_OFR2_OFFSET2_Pos) /*!< 0x00000008 */ +#define ADC_OFR2_OFFSET2_4 (0x010U << ADC_OFR2_OFFSET2_Pos) /*!< 0x00000010 */ +#define ADC_OFR2_OFFSET2_5 (0x020U << ADC_OFR2_OFFSET2_Pos) /*!< 0x00000020 */ +#define ADC_OFR2_OFFSET2_6 (0x040U << ADC_OFR2_OFFSET2_Pos) /*!< 0x00000040 */ +#define ADC_OFR2_OFFSET2_7 (0x080U << ADC_OFR2_OFFSET2_Pos) /*!< 0x00000080 */ +#define ADC_OFR2_OFFSET2_8 (0x100U << ADC_OFR2_OFFSET2_Pos) /*!< 0x00000100 */ +#define ADC_OFR2_OFFSET2_9 (0x200U << ADC_OFR2_OFFSET2_Pos) /*!< 0x00000200 */ +#define ADC_OFR2_OFFSET2_10 (0x400U << ADC_OFR2_OFFSET2_Pos) /*!< 0x00000400 */ +#define ADC_OFR2_OFFSET2_11 (0x800U << ADC_OFR2_OFFSET2_Pos) /*!< 0x00000800 */ + +#define ADC_OFR2_OFFSET2_CH_Pos (26U) +#define ADC_OFR2_OFFSET2_CH_Msk (0x1FU << ADC_OFR2_OFFSET2_CH_Pos) /*!< 0x7C000000 */ +#define ADC_OFR2_OFFSET2_CH ADC_OFR2_OFFSET2_CH_Msk /*!< ADC offset number 2 channel selection */ +#define ADC_OFR2_OFFSET2_CH_0 (0x01U << ADC_OFR2_OFFSET2_CH_Pos) /*!< 0x04000000 */ +#define ADC_OFR2_OFFSET2_CH_1 (0x02U << ADC_OFR2_OFFSET2_CH_Pos) /*!< 0x08000000 */ +#define ADC_OFR2_OFFSET2_CH_2 (0x04U << ADC_OFR2_OFFSET2_CH_Pos) /*!< 0x10000000 */ +#define ADC_OFR2_OFFSET2_CH_3 (0x08U << ADC_OFR2_OFFSET2_CH_Pos) /*!< 0x20000000 */ +#define ADC_OFR2_OFFSET2_CH_4 (0x10U << ADC_OFR2_OFFSET2_CH_Pos) /*!< 0x40000000 */ + +#define ADC_OFR2_OFFSET2_EN_Pos (31U) +#define ADC_OFR2_OFFSET2_EN_Msk (0x1U << ADC_OFR2_OFFSET2_EN_Pos) /*!< 0x80000000 */ +#define ADC_OFR2_OFFSET2_EN ADC_OFR2_OFFSET2_EN_Msk /*!< ADC offset number 2 enable */ + +/******************** Bit definition for ADC_OFR3 register ******************/ +#define ADC_OFR3_OFFSET3_Pos (0U) +#define ADC_OFR3_OFFSET3_Msk (0xFFFU << ADC_OFR3_OFFSET3_Pos) /*!< 0x00000FFF */ +#define ADC_OFR3_OFFSET3 ADC_OFR3_OFFSET3_Msk /*!< ADC offset number 3 offset level */ +#define ADC_OFR3_OFFSET3_0 (0x001U << ADC_OFR3_OFFSET3_Pos) /*!< 0x00000001 */ +#define ADC_OFR3_OFFSET3_1 (0x002U << ADC_OFR3_OFFSET3_Pos) /*!< 0x00000002 */ +#define ADC_OFR3_OFFSET3_2 (0x004U << ADC_OFR3_OFFSET3_Pos) /*!< 0x00000004 */ +#define ADC_OFR3_OFFSET3_3 (0x008U << ADC_OFR3_OFFSET3_Pos) /*!< 0x00000008 */ +#define ADC_OFR3_OFFSET3_4 (0x010U << ADC_OFR3_OFFSET3_Pos) /*!< 0x00000010 */ +#define ADC_OFR3_OFFSET3_5 (0x020U << ADC_OFR3_OFFSET3_Pos) /*!< 0x00000020 */ +#define ADC_OFR3_OFFSET3_6 (0x040U << ADC_OFR3_OFFSET3_Pos) /*!< 0x00000040 */ +#define ADC_OFR3_OFFSET3_7 (0x080U << ADC_OFR3_OFFSET3_Pos) /*!< 0x00000080 */ +#define ADC_OFR3_OFFSET3_8 (0x100U << ADC_OFR3_OFFSET3_Pos) /*!< 0x00000100 */ +#define ADC_OFR3_OFFSET3_9 (0x200U << ADC_OFR3_OFFSET3_Pos) /*!< 0x00000200 */ +#define ADC_OFR3_OFFSET3_10 (0x400U << ADC_OFR3_OFFSET3_Pos) /*!< 0x00000400 */ +#define ADC_OFR3_OFFSET3_11 (0x800U << ADC_OFR3_OFFSET3_Pos) /*!< 0x00000800 */ + +#define ADC_OFR3_OFFSET3_CH_Pos (26U) +#define ADC_OFR3_OFFSET3_CH_Msk (0x1FU << ADC_OFR3_OFFSET3_CH_Pos) /*!< 0x7C000000 */ +#define ADC_OFR3_OFFSET3_CH ADC_OFR3_OFFSET3_CH_Msk /*!< ADC offset number 3 channel selection */ +#define ADC_OFR3_OFFSET3_CH_0 (0x01U << ADC_OFR3_OFFSET3_CH_Pos) /*!< 0x04000000 */ +#define ADC_OFR3_OFFSET3_CH_1 (0x02U << ADC_OFR3_OFFSET3_CH_Pos) /*!< 0x08000000 */ +#define ADC_OFR3_OFFSET3_CH_2 (0x04U << ADC_OFR3_OFFSET3_CH_Pos) /*!< 0x10000000 */ +#define ADC_OFR3_OFFSET3_CH_3 (0x08U << ADC_OFR3_OFFSET3_CH_Pos) /*!< 0x20000000 */ +#define ADC_OFR3_OFFSET3_CH_4 (0x10U << ADC_OFR3_OFFSET3_CH_Pos) /*!< 0x40000000 */ + +#define ADC_OFR3_OFFSET3_EN_Pos (31U) +#define ADC_OFR3_OFFSET3_EN_Msk (0x1U << ADC_OFR3_OFFSET3_EN_Pos) /*!< 0x80000000 */ +#define ADC_OFR3_OFFSET3_EN ADC_OFR3_OFFSET3_EN_Msk /*!< ADC offset number 3 enable */ + +/******************** Bit definition for ADC_OFR4 register ******************/ +#define ADC_OFR4_OFFSET4_Pos (0U) +#define ADC_OFR4_OFFSET4_Msk (0xFFFU << ADC_OFR4_OFFSET4_Pos) /*!< 0x00000FFF */ +#define ADC_OFR4_OFFSET4 ADC_OFR4_OFFSET4_Msk /*!< ADC offset number 4 offset level */ +#define ADC_OFR4_OFFSET4_0 (0x001U << ADC_OFR4_OFFSET4_Pos) /*!< 0x00000001 */ +#define ADC_OFR4_OFFSET4_1 (0x002U << ADC_OFR4_OFFSET4_Pos) /*!< 0x00000002 */ +#define ADC_OFR4_OFFSET4_2 (0x004U << ADC_OFR4_OFFSET4_Pos) /*!< 0x00000004 */ +#define ADC_OFR4_OFFSET4_3 (0x008U << ADC_OFR4_OFFSET4_Pos) /*!< 0x00000008 */ +#define ADC_OFR4_OFFSET4_4 (0x010U << ADC_OFR4_OFFSET4_Pos) /*!< 0x00000010 */ +#define ADC_OFR4_OFFSET4_5 (0x020U << ADC_OFR4_OFFSET4_Pos) /*!< 0x00000020 */ +#define ADC_OFR4_OFFSET4_6 (0x040U << ADC_OFR4_OFFSET4_Pos) /*!< 0x00000040 */ +#define ADC_OFR4_OFFSET4_7 (0x080U << ADC_OFR4_OFFSET4_Pos) /*!< 0x00000080 */ +#define ADC_OFR4_OFFSET4_8 (0x100U << ADC_OFR4_OFFSET4_Pos) /*!< 0x00000100 */ +#define ADC_OFR4_OFFSET4_9 (0x200U << ADC_OFR4_OFFSET4_Pos) /*!< 0x00000200 */ +#define ADC_OFR4_OFFSET4_10 (0x400U << ADC_OFR4_OFFSET4_Pos) /*!< 0x00000400 */ +#define ADC_OFR4_OFFSET4_11 (0x800U << ADC_OFR4_OFFSET4_Pos) /*!< 0x00000800 */ + +#define ADC_OFR4_OFFSET4_CH_Pos (26U) +#define ADC_OFR4_OFFSET4_CH_Msk (0x1FU << ADC_OFR4_OFFSET4_CH_Pos) /*!< 0x7C000000 */ +#define ADC_OFR4_OFFSET4_CH ADC_OFR4_OFFSET4_CH_Msk /*!< ADC offset number 4 channel selection */ +#define ADC_OFR4_OFFSET4_CH_0 (0x01U << ADC_OFR4_OFFSET4_CH_Pos) /*!< 0x04000000 */ +#define ADC_OFR4_OFFSET4_CH_1 (0x02U << ADC_OFR4_OFFSET4_CH_Pos) /*!< 0x08000000 */ +#define ADC_OFR4_OFFSET4_CH_2 (0x04U << ADC_OFR4_OFFSET4_CH_Pos) /*!< 0x10000000 */ +#define ADC_OFR4_OFFSET4_CH_3 (0x08U << ADC_OFR4_OFFSET4_CH_Pos) /*!< 0x20000000 */ +#define ADC_OFR4_OFFSET4_CH_4 (0x10U << ADC_OFR4_OFFSET4_CH_Pos) /*!< 0x40000000 */ + +#define ADC_OFR4_OFFSET4_EN_Pos (31U) +#define ADC_OFR4_OFFSET4_EN_Msk (0x1U << ADC_OFR4_OFFSET4_EN_Pos) /*!< 0x80000000 */ +#define ADC_OFR4_OFFSET4_EN ADC_OFR4_OFFSET4_EN_Msk /*!< ADC offset number 4 enable */ + +/******************** Bit definition for ADC_JDR1 register ******************/ +#define ADC_JDR1_JDATA_Pos (0U) +#define ADC_JDR1_JDATA_Msk (0xFFFFU << ADC_JDR1_JDATA_Pos) /*!< 0x0000FFFF */ +#define ADC_JDR1_JDATA ADC_JDR1_JDATA_Msk /*!< ADC group injected sequencer rank 1 conversion data */ +#define ADC_JDR1_JDATA_0 (0x0001U << ADC_JDR1_JDATA_Pos) /*!< 0x00000001 */ +#define ADC_JDR1_JDATA_1 (0x0002U << ADC_JDR1_JDATA_Pos) /*!< 0x00000002 */ +#define ADC_JDR1_JDATA_2 (0x0004U << ADC_JDR1_JDATA_Pos) /*!< 0x00000004 */ +#define ADC_JDR1_JDATA_3 (0x0008U << ADC_JDR1_JDATA_Pos) /*!< 0x00000008 */ +#define ADC_JDR1_JDATA_4 (0x0010U << ADC_JDR1_JDATA_Pos) /*!< 0x00000010 */ +#define ADC_JDR1_JDATA_5 (0x0020U << ADC_JDR1_JDATA_Pos) /*!< 0x00000020 */ +#define ADC_JDR1_JDATA_6 (0x0040U << ADC_JDR1_JDATA_Pos) /*!< 0x00000040 */ +#define ADC_JDR1_JDATA_7 (0x0080U << ADC_JDR1_JDATA_Pos) /*!< 0x00000080 */ +#define ADC_JDR1_JDATA_8 (0x0100U << ADC_JDR1_JDATA_Pos) /*!< 0x00000100 */ +#define ADC_JDR1_JDATA_9 (0x0200U << ADC_JDR1_JDATA_Pos) /*!< 0x00000200 */ +#define ADC_JDR1_JDATA_10 (0x0400U << ADC_JDR1_JDATA_Pos) /*!< 0x00000400 */ +#define ADC_JDR1_JDATA_11 (0x0800U << ADC_JDR1_JDATA_Pos) /*!< 0x00000800 */ +#define ADC_JDR1_JDATA_12 (0x1000U << ADC_JDR1_JDATA_Pos) /*!< 0x00001000 */ +#define ADC_JDR1_JDATA_13 (0x2000U << ADC_JDR1_JDATA_Pos) /*!< 0x00002000 */ +#define ADC_JDR1_JDATA_14 (0x4000U << ADC_JDR1_JDATA_Pos) /*!< 0x00004000 */ +#define ADC_JDR1_JDATA_15 (0x8000U << ADC_JDR1_JDATA_Pos) /*!< 0x00008000 */ + +/******************** Bit definition for ADC_JDR2 register ******************/ +#define ADC_JDR2_JDATA_Pos (0U) +#define ADC_JDR2_JDATA_Msk (0xFFFFU << ADC_JDR2_JDATA_Pos) /*!< 0x0000FFFF */ +#define ADC_JDR2_JDATA ADC_JDR2_JDATA_Msk /*!< ADC group injected sequencer rank 2 conversion data */ +#define ADC_JDR2_JDATA_0 (0x0001U << ADC_JDR2_JDATA_Pos) /*!< 0x00000001 */ +#define ADC_JDR2_JDATA_1 (0x0002U << ADC_JDR2_JDATA_Pos) /*!< 0x00000002 */ +#define ADC_JDR2_JDATA_2 (0x0004U << ADC_JDR2_JDATA_Pos) /*!< 0x00000004 */ +#define ADC_JDR2_JDATA_3 (0x0008U << ADC_JDR2_JDATA_Pos) /*!< 0x00000008 */ +#define ADC_JDR2_JDATA_4 (0x0010U << ADC_JDR2_JDATA_Pos) /*!< 0x00000010 */ +#define ADC_JDR2_JDATA_5 (0x0020U << ADC_JDR2_JDATA_Pos) /*!< 0x00000020 */ +#define ADC_JDR2_JDATA_6 (0x0040U << ADC_JDR2_JDATA_Pos) /*!< 0x00000040 */ +#define ADC_JDR2_JDATA_7 (0x0080U << ADC_JDR2_JDATA_Pos) /*!< 0x00000080 */ +#define ADC_JDR2_JDATA_8 (0x0100U << ADC_JDR2_JDATA_Pos) /*!< 0x00000100 */ +#define ADC_JDR2_JDATA_9 (0x0200U << ADC_JDR2_JDATA_Pos) /*!< 0x00000200 */ +#define ADC_JDR2_JDATA_10 (0x0400U << ADC_JDR2_JDATA_Pos) /*!< 0x00000400 */ +#define ADC_JDR2_JDATA_11 (0x0800U << ADC_JDR2_JDATA_Pos) /*!< 0x00000800 */ +#define ADC_JDR2_JDATA_12 (0x1000U << ADC_JDR2_JDATA_Pos) /*!< 0x00001000 */ +#define ADC_JDR2_JDATA_13 (0x2000U << ADC_JDR2_JDATA_Pos) /*!< 0x00002000 */ +#define ADC_JDR2_JDATA_14 (0x4000U << ADC_JDR2_JDATA_Pos) /*!< 0x00004000 */ +#define ADC_JDR2_JDATA_15 (0x8000U << ADC_JDR2_JDATA_Pos) /*!< 0x00008000 */ + +/******************** Bit definition for ADC_JDR3 register ******************/ +#define ADC_JDR3_JDATA_Pos (0U) +#define ADC_JDR3_JDATA_Msk (0xFFFFU << ADC_JDR3_JDATA_Pos) /*!< 0x0000FFFF */ +#define ADC_JDR3_JDATA ADC_JDR3_JDATA_Msk /*!< ADC group injected sequencer rank 3 conversion data */ +#define ADC_JDR3_JDATA_0 (0x0001U << ADC_JDR3_JDATA_Pos) /*!< 0x00000001 */ +#define ADC_JDR3_JDATA_1 (0x0002U << ADC_JDR3_JDATA_Pos) /*!< 0x00000002 */ +#define ADC_JDR3_JDATA_2 (0x0004U << ADC_JDR3_JDATA_Pos) /*!< 0x00000004 */ +#define ADC_JDR3_JDATA_3 (0x0008U << ADC_JDR3_JDATA_Pos) /*!< 0x00000008 */ +#define ADC_JDR3_JDATA_4 (0x0010U << ADC_JDR3_JDATA_Pos) /*!< 0x00000010 */ +#define ADC_JDR3_JDATA_5 (0x0020U << ADC_JDR3_JDATA_Pos) /*!< 0x00000020 */ +#define ADC_JDR3_JDATA_6 (0x0040U << ADC_JDR3_JDATA_Pos) /*!< 0x00000040 */ +#define ADC_JDR3_JDATA_7 (0x0080U << ADC_JDR3_JDATA_Pos) /*!< 0x00000080 */ +#define ADC_JDR3_JDATA_8 (0x0100U << ADC_JDR3_JDATA_Pos) /*!< 0x00000100 */ +#define ADC_JDR3_JDATA_9 (0x0200U << ADC_JDR3_JDATA_Pos) /*!< 0x00000200 */ +#define ADC_JDR3_JDATA_10 (0x0400U << ADC_JDR3_JDATA_Pos) /*!< 0x00000400 */ +#define ADC_JDR3_JDATA_11 (0x0800U << ADC_JDR3_JDATA_Pos) /*!< 0x00000800 */ +#define ADC_JDR3_JDATA_12 (0x1000U << ADC_JDR3_JDATA_Pos) /*!< 0x00001000 */ +#define ADC_JDR3_JDATA_13 (0x2000U << ADC_JDR3_JDATA_Pos) /*!< 0x00002000 */ +#define ADC_JDR3_JDATA_14 (0x4000U << ADC_JDR3_JDATA_Pos) /*!< 0x00004000 */ +#define ADC_JDR3_JDATA_15 (0x8000U << ADC_JDR3_JDATA_Pos) /*!< 0x00008000 */ + +/******************** Bit definition for ADC_JDR4 register ******************/ +#define ADC_JDR4_JDATA_Pos (0U) +#define ADC_JDR4_JDATA_Msk (0xFFFFU << ADC_JDR4_JDATA_Pos) /*!< 0x0000FFFF */ +#define ADC_JDR4_JDATA ADC_JDR4_JDATA_Msk /*!< ADC group injected sequencer rank 4 conversion data */ +#define ADC_JDR4_JDATA_0 (0x0001U << ADC_JDR4_JDATA_Pos) /*!< 0x00000001 */ +#define ADC_JDR4_JDATA_1 (0x0002U << ADC_JDR4_JDATA_Pos) /*!< 0x00000002 */ +#define ADC_JDR4_JDATA_2 (0x0004U << ADC_JDR4_JDATA_Pos) /*!< 0x00000004 */ +#define ADC_JDR4_JDATA_3 (0x0008U << ADC_JDR4_JDATA_Pos) /*!< 0x00000008 */ +#define ADC_JDR4_JDATA_4 (0x0010U << ADC_JDR4_JDATA_Pos) /*!< 0x00000010 */ +#define ADC_JDR4_JDATA_5 (0x0020U << ADC_JDR4_JDATA_Pos) /*!< 0x00000020 */ +#define ADC_JDR4_JDATA_6 (0x0040U << ADC_JDR4_JDATA_Pos) /*!< 0x00000040 */ +#define ADC_JDR4_JDATA_7 (0x0080U << ADC_JDR4_JDATA_Pos) /*!< 0x00000080 */ +#define ADC_JDR4_JDATA_8 (0x0100U << ADC_JDR4_JDATA_Pos) /*!< 0x00000100 */ +#define ADC_JDR4_JDATA_9 (0x0200U << ADC_JDR4_JDATA_Pos) /*!< 0x00000200 */ +#define ADC_JDR4_JDATA_10 (0x0400U << ADC_JDR4_JDATA_Pos) /*!< 0x00000400 */ +#define ADC_JDR4_JDATA_11 (0x0800U << ADC_JDR4_JDATA_Pos) /*!< 0x00000800 */ +#define ADC_JDR4_JDATA_12 (0x1000U << ADC_JDR4_JDATA_Pos) /*!< 0x00001000 */ +#define ADC_JDR4_JDATA_13 (0x2000U << ADC_JDR4_JDATA_Pos) /*!< 0x00002000 */ +#define ADC_JDR4_JDATA_14 (0x4000U << ADC_JDR4_JDATA_Pos) /*!< 0x00004000 */ +#define ADC_JDR4_JDATA_15 (0x8000U << ADC_JDR4_JDATA_Pos) /*!< 0x00008000 */ + +/******************** Bit definition for ADC_AWD2CR register ****************/ +#define ADC_AWD2CR_AWD2CH_Pos (0U) +#define ADC_AWD2CR_AWD2CH_Msk (0x7FFFFU << ADC_AWD2CR_AWD2CH_Pos) /*!< 0x0007FFFF */ +#define ADC_AWD2CR_AWD2CH ADC_AWD2CR_AWD2CH_Msk /*!< ADC analog watchdog 2 monitored channel selection */ +#define ADC_AWD2CR_AWD2CH_0 (0x00001U << ADC_AWD2CR_AWD2CH_Pos) /*!< 0x00000001 */ +#define ADC_AWD2CR_AWD2CH_1 (0x00002U << ADC_AWD2CR_AWD2CH_Pos) /*!< 0x00000002 */ +#define ADC_AWD2CR_AWD2CH_2 (0x00004U << ADC_AWD2CR_AWD2CH_Pos) /*!< 0x00000004 */ +#define ADC_AWD2CR_AWD2CH_3 (0x00008U << ADC_AWD2CR_AWD2CH_Pos) /*!< 0x00000008 */ +#define ADC_AWD2CR_AWD2CH_4 (0x00010U << ADC_AWD2CR_AWD2CH_Pos) /*!< 0x00000010 */ +#define ADC_AWD2CR_AWD2CH_5 (0x00020U << ADC_AWD2CR_AWD2CH_Pos) /*!< 0x00000020 */ +#define ADC_AWD2CR_AWD2CH_6 (0x00040U << ADC_AWD2CR_AWD2CH_Pos) /*!< 0x00000040 */ +#define ADC_AWD2CR_AWD2CH_7 (0x00080U << ADC_AWD2CR_AWD2CH_Pos) /*!< 0x00000080 */ +#define ADC_AWD2CR_AWD2CH_8 (0x00100U << ADC_AWD2CR_AWD2CH_Pos) /*!< 0x00000100 */ +#define ADC_AWD2CR_AWD2CH_9 (0x00200U << ADC_AWD2CR_AWD2CH_Pos) /*!< 0x00000200 */ +#define ADC_AWD2CR_AWD2CH_10 (0x00400U << ADC_AWD2CR_AWD2CH_Pos) /*!< 0x00000400 */ +#define ADC_AWD2CR_AWD2CH_11 (0x00800U << ADC_AWD2CR_AWD2CH_Pos) /*!< 0x00000800 */ +#define ADC_AWD2CR_AWD2CH_12 (0x01000U << ADC_AWD2CR_AWD2CH_Pos) /*!< 0x00001000 */ +#define ADC_AWD2CR_AWD2CH_13 (0x02000U << ADC_AWD2CR_AWD2CH_Pos) /*!< 0x00002000 */ +#define ADC_AWD2CR_AWD2CH_14 (0x04000U << ADC_AWD2CR_AWD2CH_Pos) /*!< 0x00004000 */ +#define ADC_AWD2CR_AWD2CH_15 (0x08000U << ADC_AWD2CR_AWD2CH_Pos) /*!< 0x00008000 */ +#define ADC_AWD2CR_AWD2CH_16 (0x10000U << ADC_AWD2CR_AWD2CH_Pos) /*!< 0x00010000 */ +#define ADC_AWD2CR_AWD2CH_17 (0x20000U << ADC_AWD2CR_AWD2CH_Pos) /*!< 0x00020000 */ +#define ADC_AWD2CR_AWD2CH_18 (0x40000U << ADC_AWD2CR_AWD2CH_Pos) /*!< 0x00040000 */ + +/******************** Bit definition for ADC_AWD3CR register ****************/ +#define ADC_AWD3CR_AWD3CH_Pos (0U) +#define ADC_AWD3CR_AWD3CH_Msk (0x7FFFFU << ADC_AWD3CR_AWD3CH_Pos) /*!< 0x0007FFFF */ +#define ADC_AWD3CR_AWD3CH ADC_AWD3CR_AWD3CH_Msk /*!< ADC analog watchdog 3 monitored channel selection */ +#define ADC_AWD3CR_AWD3CH_0 (0x00001U << ADC_AWD3CR_AWD3CH_Pos) /*!< 0x00000001 */ +#define ADC_AWD3CR_AWD3CH_1 (0x00002U << ADC_AWD3CR_AWD3CH_Pos) /*!< 0x00000002 */ +#define ADC_AWD3CR_AWD3CH_2 (0x00004U << ADC_AWD3CR_AWD3CH_Pos) /*!< 0x00000004 */ +#define ADC_AWD3CR_AWD3CH_3 (0x00008U << ADC_AWD3CR_AWD3CH_Pos) /*!< 0x00000008 */ +#define ADC_AWD3CR_AWD3CH_4 (0x00010U << ADC_AWD3CR_AWD3CH_Pos) /*!< 0x00000010 */ +#define ADC_AWD3CR_AWD3CH_5 (0x00020U << ADC_AWD3CR_AWD3CH_Pos) /*!< 0x00000020 */ +#define ADC_AWD3CR_AWD3CH_6 (0x00040U << ADC_AWD3CR_AWD3CH_Pos) /*!< 0x00000040 */ +#define ADC_AWD3CR_AWD3CH_7 (0x00080U << ADC_AWD3CR_AWD3CH_Pos) /*!< 0x00000080 */ +#define ADC_AWD3CR_AWD3CH_8 (0x00100U << ADC_AWD3CR_AWD3CH_Pos) /*!< 0x00000100 */ +#define ADC_AWD3CR_AWD3CH_9 (0x00200U << ADC_AWD3CR_AWD3CH_Pos) /*!< 0x00000200 */ +#define ADC_AWD3CR_AWD3CH_10 (0x00400U << ADC_AWD3CR_AWD3CH_Pos) /*!< 0x00000400 */ +#define ADC_AWD3CR_AWD3CH_11 (0x00800U << ADC_AWD3CR_AWD3CH_Pos) /*!< 0x00000800 */ +#define ADC_AWD3CR_AWD3CH_12 (0x01000U << ADC_AWD3CR_AWD3CH_Pos) /*!< 0x00001000 */ +#define ADC_AWD3CR_AWD3CH_13 (0x02000U << ADC_AWD3CR_AWD3CH_Pos) /*!< 0x00002000 */ +#define ADC_AWD3CR_AWD3CH_14 (0x04000U << ADC_AWD3CR_AWD3CH_Pos) /*!< 0x00004000 */ +#define ADC_AWD3CR_AWD3CH_15 (0x08000U << ADC_AWD3CR_AWD3CH_Pos) /*!< 0x00008000 */ +#define ADC_AWD3CR_AWD3CH_16 (0x10000U << ADC_AWD3CR_AWD3CH_Pos) /*!< 0x00010000 */ +#define ADC_AWD3CR_AWD3CH_17 (0x20000U << ADC_AWD3CR_AWD3CH_Pos) /*!< 0x00020000 */ +#define ADC_AWD3CR_AWD3CH_18 (0x40000U << ADC_AWD3CR_AWD3CH_Pos) /*!< 0x00040000 */ + +/******************** Bit definition for ADC_DIFSEL register ****************/ +#define ADC_DIFSEL_DIFSEL_Pos (0U) +#define ADC_DIFSEL_DIFSEL_Msk (0x7FFFFU << ADC_DIFSEL_DIFSEL_Pos) /*!< 0x0007FFFF */ +#define ADC_DIFSEL_DIFSEL ADC_DIFSEL_DIFSEL_Msk /*!< ADC channel differential or single-ended mode */ +#define ADC_DIFSEL_DIFSEL_0 (0x00001U << ADC_DIFSEL_DIFSEL_Pos) /*!< 0x00000001 */ +#define ADC_DIFSEL_DIFSEL_1 (0x00002U << ADC_DIFSEL_DIFSEL_Pos) /*!< 0x00000002 */ +#define ADC_DIFSEL_DIFSEL_2 (0x00004U << ADC_DIFSEL_DIFSEL_Pos) /*!< 0x00000004 */ +#define ADC_DIFSEL_DIFSEL_3 (0x00008U << ADC_DIFSEL_DIFSEL_Pos) /*!< 0x00000008 */ +#define ADC_DIFSEL_DIFSEL_4 (0x00010U << ADC_DIFSEL_DIFSEL_Pos) /*!< 0x00000010 */ +#define ADC_DIFSEL_DIFSEL_5 (0x00020U << ADC_DIFSEL_DIFSEL_Pos) /*!< 0x00000020 */ +#define ADC_DIFSEL_DIFSEL_6 (0x00040U << ADC_DIFSEL_DIFSEL_Pos) /*!< 0x00000040 */ +#define ADC_DIFSEL_DIFSEL_7 (0x00080U << ADC_DIFSEL_DIFSEL_Pos) /*!< 0x00000080 */ +#define ADC_DIFSEL_DIFSEL_8 (0x00100U << ADC_DIFSEL_DIFSEL_Pos) /*!< 0x00000100 */ +#define ADC_DIFSEL_DIFSEL_9 (0x00200U << ADC_DIFSEL_DIFSEL_Pos) /*!< 0x00000200 */ +#define ADC_DIFSEL_DIFSEL_10 (0x00400U << ADC_DIFSEL_DIFSEL_Pos) /*!< 0x00000400 */ +#define ADC_DIFSEL_DIFSEL_11 (0x00800U << ADC_DIFSEL_DIFSEL_Pos) /*!< 0x00000800 */ +#define ADC_DIFSEL_DIFSEL_12 (0x01000U << ADC_DIFSEL_DIFSEL_Pos) /*!< 0x00001000 */ +#define ADC_DIFSEL_DIFSEL_13 (0x02000U << ADC_DIFSEL_DIFSEL_Pos) /*!< 0x00002000 */ +#define ADC_DIFSEL_DIFSEL_14 (0x04000U << ADC_DIFSEL_DIFSEL_Pos) /*!< 0x00004000 */ +#define ADC_DIFSEL_DIFSEL_15 (0x08000U << ADC_DIFSEL_DIFSEL_Pos) /*!< 0x00008000 */ +#define ADC_DIFSEL_DIFSEL_16 (0x10000U << ADC_DIFSEL_DIFSEL_Pos) /*!< 0x00010000 */ +#define ADC_DIFSEL_DIFSEL_17 (0x20000U << ADC_DIFSEL_DIFSEL_Pos) /*!< 0x00020000 */ +#define ADC_DIFSEL_DIFSEL_18 (0x40000U << ADC_DIFSEL_DIFSEL_Pos) /*!< 0x00040000 */ + +/******************** Bit definition for ADC_CALFACT register ***************/ +#define ADC_CALFACT_CALFACT_S_Pos (0U) +#define ADC_CALFACT_CALFACT_S_Msk (0x7FU << ADC_CALFACT_CALFACT_S_Pos) /*!< 0x0000007F */ +#define ADC_CALFACT_CALFACT_S ADC_CALFACT_CALFACT_S_Msk /*!< ADC calibration factor in single-ended mode */ +#define ADC_CALFACT_CALFACT_S_0 (0x01U << ADC_CALFACT_CALFACT_S_Pos) /*!< 0x00000001 */ +#define ADC_CALFACT_CALFACT_S_1 (0x02U << ADC_CALFACT_CALFACT_S_Pos) /*!< 0x00000002 */ +#define ADC_CALFACT_CALFACT_S_2 (0x04U << ADC_CALFACT_CALFACT_S_Pos) /*!< 0x00000004 */ +#define ADC_CALFACT_CALFACT_S_3 (0x08U << ADC_CALFACT_CALFACT_S_Pos) /*!< 0x00000008 */ +#define ADC_CALFACT_CALFACT_S_4 (0x10U << ADC_CALFACT_CALFACT_S_Pos) /*!< 0x00000010 */ +#define ADC_CALFACT_CALFACT_S_5 (0x20U << ADC_CALFACT_CALFACT_S_Pos) /*!< 0x00000020 */ +#define ADC_CALFACT_CALFACT_S_6 (0x40U << ADC_CALFACT_CALFACT_S_Pos) /*!< 0x00000040 */ + +#define ADC_CALFACT_CALFACT_D_Pos (16U) +#define ADC_CALFACT_CALFACT_D_Msk (0x7FU << ADC_CALFACT_CALFACT_D_Pos) /*!< 0x007F0000 */ +#define ADC_CALFACT_CALFACT_D ADC_CALFACT_CALFACT_D_Msk /*!< ADC calibration factor in differential mode */ +#define ADC_CALFACT_CALFACT_D_0 (0x01U << ADC_CALFACT_CALFACT_D_Pos) /*!< 0x00010000 */ +#define ADC_CALFACT_CALFACT_D_1 (0x02U << ADC_CALFACT_CALFACT_D_Pos) /*!< 0x00020000 */ +#define ADC_CALFACT_CALFACT_D_2 (0x04U << ADC_CALFACT_CALFACT_D_Pos) /*!< 0x00040000 */ +#define ADC_CALFACT_CALFACT_D_3 (0x08U << ADC_CALFACT_CALFACT_D_Pos) /*!< 0x00080000 */ +#define ADC_CALFACT_CALFACT_D_4 (0x10U << ADC_CALFACT_CALFACT_D_Pos) /*!< 0x00100000 */ +#define ADC_CALFACT_CALFACT_D_5 (0x20U << ADC_CALFACT_CALFACT_D_Pos) /*!< 0x00200000 */ +#define ADC_CALFACT_CALFACT_D_6 (0x40U << ADC_CALFACT_CALFACT_D_Pos) /*!< 0x00400000 */ + +/************************* ADC Common registers *****************************/ +/******************** Bit definition for ADC_CSR register *******************/ +#define ADC_CSR_ADRDY_MST_Pos (0U) +#define ADC_CSR_ADRDY_MST_Msk (0x1U << ADC_CSR_ADRDY_MST_Pos) /*!< 0x00000001 */ +#define ADC_CSR_ADRDY_MST ADC_CSR_ADRDY_MST_Msk /*!< ADC multimode master ready flag */ +#define ADC_CSR_EOSMP_MST_Pos (1U) +#define ADC_CSR_EOSMP_MST_Msk (0x1U << ADC_CSR_EOSMP_MST_Pos) /*!< 0x00000002 */ +#define ADC_CSR_EOSMP_MST ADC_CSR_EOSMP_MST_Msk /*!< ADC multimode master group regular end of sampling flag */ +#define ADC_CSR_EOC_MST_Pos (2U) +#define ADC_CSR_EOC_MST_Msk (0x1U << ADC_CSR_EOC_MST_Pos) /*!< 0x00000004 */ +#define ADC_CSR_EOC_MST ADC_CSR_EOC_MST_Msk /*!< ADC multimode master group regular end of unitary conversion flag */ +#define ADC_CSR_EOS_MST_Pos (3U) +#define ADC_CSR_EOS_MST_Msk (0x1U << ADC_CSR_EOS_MST_Pos) /*!< 0x00000008 */ +#define ADC_CSR_EOS_MST ADC_CSR_EOS_MST_Msk /*!< ADC multimode master group regular end of sequence conversions flag */ +#define ADC_CSR_OVR_MST_Pos (4U) +#define ADC_CSR_OVR_MST_Msk (0x1U << ADC_CSR_OVR_MST_Pos) /*!< 0x00000010 */ +#define ADC_CSR_OVR_MST ADC_CSR_OVR_MST_Msk /*!< ADC multimode master group regular overrun flag */ +#define ADC_CSR_JEOC_MST_Pos (5U) +#define ADC_CSR_JEOC_MST_Msk (0x1U << ADC_CSR_JEOC_MST_Pos) /*!< 0x00000020 */ +#define ADC_CSR_JEOC_MST ADC_CSR_JEOC_MST_Msk /*!< ADC multimode master group injected end of unitary conversion flag */ +#define ADC_CSR_JEOS_MST_Pos (6U) +#define ADC_CSR_JEOS_MST_Msk (0x1U << ADC_CSR_JEOS_MST_Pos) /*!< 0x00000040 */ +#define ADC_CSR_JEOS_MST ADC_CSR_JEOS_MST_Msk /*!< ADC multimode master group injected end of sequence conversions flag */ +#define ADC_CSR_AWD1_MST_Pos (7U) +#define ADC_CSR_AWD1_MST_Msk (0x1U << ADC_CSR_AWD1_MST_Pos) /*!< 0x00000080 */ +#define ADC_CSR_AWD1_MST ADC_CSR_AWD1_MST_Msk /*!< ADC multimode master analog watchdog 1 flag */ +#define ADC_CSR_AWD2_MST_Pos (8U) +#define ADC_CSR_AWD2_MST_Msk (0x1U << ADC_CSR_AWD2_MST_Pos) /*!< 0x00000100 */ +#define ADC_CSR_AWD2_MST ADC_CSR_AWD2_MST_Msk /*!< ADC multimode master analog watchdog 2 flag */ +#define ADC_CSR_AWD3_MST_Pos (9U) +#define ADC_CSR_AWD3_MST_Msk (0x1U << ADC_CSR_AWD3_MST_Pos) /*!< 0x00000200 */ +#define ADC_CSR_AWD3_MST ADC_CSR_AWD3_MST_Msk /*!< ADC multimode master analog watchdog 3 flag */ +#define ADC_CSR_JQOVF_MST_Pos (10U) +#define ADC_CSR_JQOVF_MST_Msk (0x1U << ADC_CSR_JQOVF_MST_Pos) /*!< 0x00000400 */ +#define ADC_CSR_JQOVF_MST ADC_CSR_JQOVF_MST_Msk /*!< ADC multimode master group injected contexts queue overflow flag */ + +#define ADC_CSR_ADRDY_SLV_Pos (16U) +#define ADC_CSR_ADRDY_SLV_Msk (0x1U << ADC_CSR_ADRDY_SLV_Pos) /*!< 0x00010000 */ +#define ADC_CSR_ADRDY_SLV ADC_CSR_ADRDY_SLV_Msk /*!< ADC multimode slave ready flag */ +#define ADC_CSR_EOSMP_SLV_Pos (17U) +#define ADC_CSR_EOSMP_SLV_Msk (0x1U << ADC_CSR_EOSMP_SLV_Pos) /*!< 0x00020000 */ +#define ADC_CSR_EOSMP_SLV ADC_CSR_EOSMP_SLV_Msk /*!< ADC multimode slave group regular end of sampling flag */ +#define ADC_CSR_EOC_SLV_Pos (18U) +#define ADC_CSR_EOC_SLV_Msk (0x1U << ADC_CSR_EOC_SLV_Pos) /*!< 0x00040000 */ +#define ADC_CSR_EOC_SLV ADC_CSR_EOC_SLV_Msk /*!< ADC multimode slave group regular end of unitary conversion flag */ +#define ADC_CSR_EOS_SLV_Pos (19U) +#define ADC_CSR_EOS_SLV_Msk (0x1U << ADC_CSR_EOS_SLV_Pos) /*!< 0x00080000 */ +#define ADC_CSR_EOS_SLV ADC_CSR_EOS_SLV_Msk /*!< ADC multimode slave group regular end of sequence conversions flag */ +#define ADC_CSR_OVR_SLV_Pos (20U) +#define ADC_CSR_OVR_SLV_Msk (0x1U << ADC_CSR_OVR_SLV_Pos) /*!< 0x00100000 */ +#define ADC_CSR_OVR_SLV ADC_CSR_OVR_SLV_Msk /*!< ADC multimode slave group regular overrun flag */ +#define ADC_CSR_JEOC_SLV_Pos (21U) +#define ADC_CSR_JEOC_SLV_Msk (0x1U << ADC_CSR_JEOC_SLV_Pos) /*!< 0x00200000 */ +#define ADC_CSR_JEOC_SLV ADC_CSR_JEOC_SLV_Msk /*!< ADC multimode slave group injected end of unitary conversion flag */ +#define ADC_CSR_JEOS_SLV_Pos (22U) +#define ADC_CSR_JEOS_SLV_Msk (0x1U << ADC_CSR_JEOS_SLV_Pos) /*!< 0x00400000 */ +#define ADC_CSR_JEOS_SLV ADC_CSR_JEOS_SLV_Msk /*!< ADC multimode slave group injected end of sequence conversions flag */ +#define ADC_CSR_AWD1_SLV_Pos (23U) +#define ADC_CSR_AWD1_SLV_Msk (0x1U << ADC_CSR_AWD1_SLV_Pos) /*!< 0x00800000 */ +#define ADC_CSR_AWD1_SLV ADC_CSR_AWD1_SLV_Msk /*!< ADC multimode slave analog watchdog 1 flag */ +#define ADC_CSR_AWD2_SLV_Pos (24U) +#define ADC_CSR_AWD2_SLV_Msk (0x1U << ADC_CSR_AWD2_SLV_Pos) /*!< 0x01000000 */ +#define ADC_CSR_AWD2_SLV ADC_CSR_AWD2_SLV_Msk /*!< ADC multimode slave analog watchdog 2 flag */ +#define ADC_CSR_AWD3_SLV_Pos (25U) +#define ADC_CSR_AWD3_SLV_Msk (0x1U << ADC_CSR_AWD3_SLV_Pos) /*!< 0x02000000 */ +#define ADC_CSR_AWD3_SLV ADC_CSR_AWD3_SLV_Msk /*!< ADC multimode slave analog watchdog 3 flag */ +#define ADC_CSR_JQOVF_SLV_Pos (26U) +#define ADC_CSR_JQOVF_SLV_Msk (0x1U << ADC_CSR_JQOVF_SLV_Pos) /*!< 0x04000000 */ +#define ADC_CSR_JQOVF_SLV ADC_CSR_JQOVF_SLV_Msk /*!< ADC multimode slave group injected contexts queue overflow flag */ + +/******************** Bit definition for ADC_CCR register *******************/ +#define ADC_CCR_DUAL_Pos (0U) +#define ADC_CCR_DUAL_Msk (0x1FU << ADC_CCR_DUAL_Pos) /*!< 0x0000001F */ +#define ADC_CCR_DUAL ADC_CCR_DUAL_Msk /*!< ADC multimode mode selection */ +#define ADC_CCR_DUAL_0 (0x01U << ADC_CCR_DUAL_Pos) /*!< 0x00000001 */ +#define ADC_CCR_DUAL_1 (0x02U << ADC_CCR_DUAL_Pos) /*!< 0x00000002 */ +#define ADC_CCR_DUAL_2 (0x04U << ADC_CCR_DUAL_Pos) /*!< 0x00000004 */ +#define ADC_CCR_DUAL_3 (0x08U << ADC_CCR_DUAL_Pos) /*!< 0x00000008 */ +#define ADC_CCR_DUAL_4 (0x10U << ADC_CCR_DUAL_Pos) /*!< 0x00000010 */ + +#define ADC_CCR_DELAY_Pos (8U) +#define ADC_CCR_DELAY_Msk (0xFU << ADC_CCR_DELAY_Pos) /*!< 0x00000F00 */ +#define ADC_CCR_DELAY ADC_CCR_DELAY_Msk /*!< ADC multimode delay between 2 sampling phases */ +#define ADC_CCR_DELAY_0 (0x1U << ADC_CCR_DELAY_Pos) /*!< 0x00000100 */ +#define ADC_CCR_DELAY_1 (0x2U << ADC_CCR_DELAY_Pos) /*!< 0x00000200 */ +#define ADC_CCR_DELAY_2 (0x4U << ADC_CCR_DELAY_Pos) /*!< 0x00000400 */ +#define ADC_CCR_DELAY_3 (0x8U << ADC_CCR_DELAY_Pos) /*!< 0x00000800 */ + +#define ADC_CCR_DMACFG_Pos (13U) +#define ADC_CCR_DMACFG_Msk (0x1U << ADC_CCR_DMACFG_Pos) /*!< 0x00002000 */ +#define ADC_CCR_DMACFG ADC_CCR_DMACFG_Msk /*!< ADC multimode DMA transfer configuration */ + +#define ADC_CCR_MDMA_Pos (14U) +#define ADC_CCR_MDMA_Msk (0x3U << ADC_CCR_MDMA_Pos) /*!< 0x0000C000 */ +#define ADC_CCR_MDMA ADC_CCR_MDMA_Msk /*!< ADC multimode DMA transfer enable */ +#define ADC_CCR_MDMA_0 (0x1U << ADC_CCR_MDMA_Pos) /*!< 0x00004000 */ +#define ADC_CCR_MDMA_1 (0x2U << ADC_CCR_MDMA_Pos) /*!< 0x00008000 */ + +#define ADC_CCR_CKMODE_Pos (16U) +#define ADC_CCR_CKMODE_Msk (0x3U << ADC_CCR_CKMODE_Pos) /*!< 0x00030000 */ +#define ADC_CCR_CKMODE ADC_CCR_CKMODE_Msk /*!< ADC common clock source and prescaler (prescaler only for clock source synchronous) */ +#define ADC_CCR_CKMODE_0 (0x1U << ADC_CCR_CKMODE_Pos) /*!< 0x00010000 */ +#define ADC_CCR_CKMODE_1 (0x2U << ADC_CCR_CKMODE_Pos) /*!< 0x00020000 */ + +#define ADC_CCR_PRESC_Pos (18U) +#define ADC_CCR_PRESC_Msk (0xFU << ADC_CCR_PRESC_Pos) /*!< 0x003C0000 */ +#define ADC_CCR_PRESC ADC_CCR_PRESC_Msk /*!< ADC common clock prescaler, only for clock source asynchronous */ +#define ADC_CCR_PRESC_0 (0x1U << ADC_CCR_PRESC_Pos) /*!< 0x00040000 */ +#define ADC_CCR_PRESC_1 (0x2U << ADC_CCR_PRESC_Pos) /*!< 0x00080000 */ +#define ADC_CCR_PRESC_2 (0x4U << ADC_CCR_PRESC_Pos) /*!< 0x00100000 */ +#define ADC_CCR_PRESC_3 (0x8U << ADC_CCR_PRESC_Pos) /*!< 0x00200000 */ + +#define ADC_CCR_VREFEN_Pos (22U) +#define ADC_CCR_VREFEN_Msk (0x1U << ADC_CCR_VREFEN_Pos) /*!< 0x00400000 */ +#define ADC_CCR_VREFEN ADC_CCR_VREFEN_Msk /*!< ADC internal path to VrefInt enable */ +#define ADC_CCR_TSEN_Pos (23U) +#define ADC_CCR_TSEN_Msk (0x1U << ADC_CCR_TSEN_Pos) /*!< 0x00800000 */ +#define ADC_CCR_TSEN ADC_CCR_TSEN_Msk /*!< ADC internal path to temperature sensor enable */ +#define ADC_CCR_VBATEN_Pos (24U) +#define ADC_CCR_VBATEN_Msk (0x1U << ADC_CCR_VBATEN_Pos) /*!< 0x01000000 */ +#define ADC_CCR_VBATEN ADC_CCR_VBATEN_Msk /*!< ADC internal path to battery voltage enable */ + +/******************** Bit definition for ADC_CDR register *******************/ +#define ADC_CDR_RDATA_MST_Pos (0U) +#define ADC_CDR_RDATA_MST_Msk (0xFFFFU << ADC_CDR_RDATA_MST_Pos) /*!< 0x0000FFFF */ +#define ADC_CDR_RDATA_MST ADC_CDR_RDATA_MST_Msk /*!< ADC multimode master group regular conversion data */ +#define ADC_CDR_RDATA_MST_0 (0x0001U << ADC_CDR_RDATA_MST_Pos) /*!< 0x00000001 */ +#define ADC_CDR_RDATA_MST_1 (0x0002U << ADC_CDR_RDATA_MST_Pos) /*!< 0x00000002 */ +#define ADC_CDR_RDATA_MST_2 (0x0004U << ADC_CDR_RDATA_MST_Pos) /*!< 0x00000004 */ +#define ADC_CDR_RDATA_MST_3 (0x0008U << ADC_CDR_RDATA_MST_Pos) /*!< 0x00000008 */ +#define ADC_CDR_RDATA_MST_4 (0x0010U << ADC_CDR_RDATA_MST_Pos) /*!< 0x00000010 */ +#define ADC_CDR_RDATA_MST_5 (0x0020U << ADC_CDR_RDATA_MST_Pos) /*!< 0x00000020 */ +#define ADC_CDR_RDATA_MST_6 (0x0040U << ADC_CDR_RDATA_MST_Pos) /*!< 0x00000040 */ +#define ADC_CDR_RDATA_MST_7 (0x0080U << ADC_CDR_RDATA_MST_Pos) /*!< 0x00000080 */ +#define ADC_CDR_RDATA_MST_8 (0x0100U << ADC_CDR_RDATA_MST_Pos) /*!< 0x00000100 */ +#define ADC_CDR_RDATA_MST_9 (0x0200U << ADC_CDR_RDATA_MST_Pos) /*!< 0x00000200 */ +#define ADC_CDR_RDATA_MST_10 (0x0400U << ADC_CDR_RDATA_MST_Pos) /*!< 0x00000400 */ +#define ADC_CDR_RDATA_MST_11 (0x0800U << ADC_CDR_RDATA_MST_Pos) /*!< 0x00000800 */ +#define ADC_CDR_RDATA_MST_12 (0x1000U << ADC_CDR_RDATA_MST_Pos) /*!< 0x00001000 */ +#define ADC_CDR_RDATA_MST_13 (0x2000U << ADC_CDR_RDATA_MST_Pos) /*!< 0x00002000 */ +#define ADC_CDR_RDATA_MST_14 (0x4000U << ADC_CDR_RDATA_MST_Pos) /*!< 0x00004000 */ +#define ADC_CDR_RDATA_MST_15 (0x8000U << ADC_CDR_RDATA_MST_Pos) /*!< 0x00008000 */ + +#define ADC_CDR_RDATA_SLV_Pos (16U) +#define ADC_CDR_RDATA_SLV_Msk (0xFFFFU << ADC_CDR_RDATA_SLV_Pos) /*!< 0xFFFF0000 */ +#define ADC_CDR_RDATA_SLV ADC_CDR_RDATA_SLV_Msk /*!< ADC multimode slave group regular conversion data */ +#define ADC_CDR_RDATA_SLV_0 (0x0001U << ADC_CDR_RDATA_SLV_Pos) /*!< 0x00010000 */ +#define ADC_CDR_RDATA_SLV_1 (0x0002U << ADC_CDR_RDATA_SLV_Pos) /*!< 0x00020000 */ +#define ADC_CDR_RDATA_SLV_2 (0x0004U << ADC_CDR_RDATA_SLV_Pos) /*!< 0x00040000 */ +#define ADC_CDR_RDATA_SLV_3 (0x0008U << ADC_CDR_RDATA_SLV_Pos) /*!< 0x00080000 */ +#define ADC_CDR_RDATA_SLV_4 (0x0010U << ADC_CDR_RDATA_SLV_Pos) /*!< 0x00100000 */ +#define ADC_CDR_RDATA_SLV_5 (0x0020U << ADC_CDR_RDATA_SLV_Pos) /*!< 0x00200000 */ +#define ADC_CDR_RDATA_SLV_6 (0x0040U << ADC_CDR_RDATA_SLV_Pos) /*!< 0x00400000 */ +#define ADC_CDR_RDATA_SLV_7 (0x0080U << ADC_CDR_RDATA_SLV_Pos) /*!< 0x00800000 */ +#define ADC_CDR_RDATA_SLV_8 (0x0100U << ADC_CDR_RDATA_SLV_Pos) /*!< 0x01000000 */ +#define ADC_CDR_RDATA_SLV_9 (0x0200U << ADC_CDR_RDATA_SLV_Pos) /*!< 0x02000000 */ +#define ADC_CDR_RDATA_SLV_10 (0x0400U << ADC_CDR_RDATA_SLV_Pos) /*!< 0x04000000 */ +#define ADC_CDR_RDATA_SLV_11 (0x0800U << ADC_CDR_RDATA_SLV_Pos) /*!< 0x08000000 */ +#define ADC_CDR_RDATA_SLV_12 (0x1000U << ADC_CDR_RDATA_SLV_Pos) /*!< 0x10000000 */ +#define ADC_CDR_RDATA_SLV_13 (0x2000U << ADC_CDR_RDATA_SLV_Pos) /*!< 0x20000000 */ +#define ADC_CDR_RDATA_SLV_14 (0x4000U << ADC_CDR_RDATA_SLV_Pos) /*!< 0x40000000 */ +#define ADC_CDR_RDATA_SLV_15 (0x8000U << ADC_CDR_RDATA_SLV_Pos) /*!< 0x80000000 */ + +/******************************************************************************/ +/* */ +/* Controller Area Network */ +/* */ +/******************************************************************************/ +/******************* Bit definition for CAN_MCR register ********************/ +#define CAN_MCR_INRQ_Pos (0U) +#define CAN_MCR_INRQ_Msk (0x1U << CAN_MCR_INRQ_Pos) /*!< 0x00000001 */ +#define CAN_MCR_INRQ CAN_MCR_INRQ_Msk /*!*/ +#define DAC_CR_CEN1_Pos (14U) +#define DAC_CR_CEN1_Msk (0x1U << DAC_CR_CEN1_Pos) /*!< 0x00004000 */ +#define DAC_CR_CEN1 DAC_CR_CEN1_Msk /*!*/ + +#define DAC_CR_EN2_Pos (16U) +#define DAC_CR_EN2_Msk (0x1U << DAC_CR_EN2_Pos) /*!< 0x00010000 */ +#define DAC_CR_EN2 DAC_CR_EN2_Msk /*!*/ +#define DAC_CR_CEN2_Pos (30U) +#define DAC_CR_CEN2_Msk (0x1U << DAC_CR_CEN2_Pos) /*!< 0x40000000 */ +#define DAC_CR_CEN2 DAC_CR_CEN2_Msk /*!*/ + +/***************** Bit definition for DAC_SWTRIGR register ******************/ +#define DAC_SWTRIGR_SWTRIG1_Pos (0U) +#define DAC_SWTRIGR_SWTRIG1_Msk (0x1U << DAC_SWTRIGR_SWTRIG1_Pos) /*!< 0x00000001 */ +#define DAC_SWTRIGR_SWTRIG1 DAC_SWTRIGR_SWTRIG1_Msk /*!
    © COPYRIGHT(c) 2016 STMicroelectronics
    + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32l4xx + * @{ + */ + +#ifndef __STM32L4xx_H +#define __STM32L4xx_H + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +/** @addtogroup Library_configuration_section + * @{ + */ + +/** + * @brief STM32 Family + */ +#if !defined (STM32L4) +#define STM32L4 +#endif /* STM32L4 */ + +/* Uncomment the line below according to the target STM32L4 device used in your + application + */ + +#if !defined (STM32L431xx) && !defined (STM32L432xx) && !defined (STM32L433xx) && !defined (STM32L442xx) && !defined (STM32L443xx) && \ + !defined (STM32L471xx) && !defined (STM32L475xx) && !defined (STM32L476xx) && !defined (STM32L485xx) && !defined (STM32L486xx) + /* #define STM32L431xx */ /*!< STM32L431xx Devices */ + /* #define STM32L432xx */ /*!< STM32L432xx Devices */ + /* #define STM32L433xx */ /*!< STM32L433xx Devices */ + /* #define STM32L442xx */ /*!< STM32L442xx Devices */ + /* #define STM32L443xx */ /*!< STM32L443xx Devices */ + /* #define STM32L471xx */ /*!< STM32L471xx Devices */ + /* #define STM32L475xx */ /*!< STM32L475xx Devices */ + /* #define STM32L476xx */ /*!< STM32L476xx Devices */ + /* #define STM32L485xx */ /*!< STM32L485xx Devices */ + #define STM32L486xx /*!< STM32L486xx Devices */ +#endif + +/* Tip: To avoid modifying this file each time you need to switch between these + devices, you can define the device in your toolchain compiler preprocessor. + */ +#if !defined (USE_HAL_DRIVER) +/** + * @brief Comment the line below if you will not use the peripherals drivers. + In this case, these drivers will not be included and the application code will + be based on direct access to peripherals registers + */ + #define USE_HAL_DRIVER +#endif /* USE_HAL_DRIVER */ + +/** + * @brief CMSIS Device version number V1.1.1 + */ +#define __STM32L4_CMSIS_VERSION_MAIN (0x01) /*!< [31:24] main version */ +#define __STM32L4_CMSIS_VERSION_SUB1 (0x01) /*!< [23:16] sub1 version */ +#define __STM32L4_CMSIS_VERSION_SUB2 (0x01) /*!< [15:8] sub2 version */ +#define __STM32L4_CMSIS_VERSION_RC (0x00) /*!< [7:0] release candidate */ +#define __STM32L4_CMSIS_VERSION ((__STM32L4_CMSIS_VERSION_MAIN << 24)\ + |(__STM32L4_CMSIS_VERSION_SUB1 << 16)\ + |(__STM32L4_CMSIS_VERSION_SUB2 << 8 )\ + |(__STM32L4_CMSIS_VERSION_RC)) + +/** + * @} + */ + +/** @addtogroup Device_Included + * @{ + */ + +#if defined(STM32L431xx) + #include "stm32l431xx.h" +#elif defined(STM32L432xx) + #include "stm32l432xx.h" +#elif defined(STM32L433xx) + #include "stm32l433xx.h" +#elif defined(STM32L442xx) + #include "stm32l442xx.h" +#elif defined(STM32L443xx) + #include "stm32l443xx.h" +#elif defined(STM32L451xx) + #include "stm32l451xx.h" +#elif defined(STM32L452xx) + #include "stm32l452xx.h" +#elif defined(STM32L462xx) + #include "stm32l462xx.h" +#elif defined(STM32L471xx) + #include "stm32l471xx.h" +#elif defined(STM32L475xx) + #include "stm32l475xx.h" +#elif defined(STM32L476xx) + #include "stm32l476xx.h" +#elif defined(STM32L485xx) + #include "stm32l485xx.h" +#elif defined(STM32L486xx) + #include "stm32l486xx.h" +#elif defined(STM32L496xx) + #include "stm32l496xx.h" +#elif defined(STM32L4A6xx) + #include "stm32l4a6xx.h" +#elif defined(STM32L4R5xx) + #include "stm32l4r5xx.h" +#elif defined(STM32L4R9xx) + #include "stm32l4r9xx.h" +#elif defined(STM32L4S5xx) + #include "stm32l4s5xx.h" +#elif defined(STM32L4S9xx) + #include "stm32l4s9xx.h" +#else + #error "Please select first the target STM32L4xx device used in your application (in stm32l4xx.h file)" +#endif + +/** + * @} + */ + +/** @addtogroup Exported_types + * @{ + */ +typedef enum +{ + RESET = 0, + SET = !RESET +} FlagStatus, ITStatus; + +typedef enum +{ + DISABLE = 0, + ENABLE = !DISABLE +} FunctionalState; +#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE)) + +typedef enum +{ + ERROR = 0, + SUCCESS = !ERROR +} ErrorStatus; + +/** + * @} + */ + + +/** @addtogroup Exported_macros + * @{ + */ +#define SET_BIT(REG, BIT) ((REG) |= (BIT)) + +#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT)) + +#define READ_BIT(REG, BIT) ((REG) & (BIT)) + +#define CLEAR_REG(REG) ((REG) = (0x0)) + +#define WRITE_REG(REG, VAL) ((REG) = (VAL)) + +#define READ_REG(REG) ((REG)) + +#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK))) + +#define POSITION_VAL(VAL) (__CLZ(__RBIT(VAL))) + + +/** + * @} + */ + +#if defined (USE_HAL_DRIVER) + #include "stm32l4xx_hal.h" +#endif /* USE_HAL_DRIVER */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __STM32L4xx_H */ +/** + * @} + */ + +/** + * @} + */ + + + + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/TOOLCHAIN_ARM_MICRO/startup_stm32l476xx.S b/targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/TOOLCHAIN_ARM_MICRO/startup_stm32l476xx.S similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/TOOLCHAIN_ARM_MICRO/startup_stm32l476xx.S rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/TOOLCHAIN_ARM_MICRO/startup_stm32l476xx.S diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/TOOLCHAIN_ARM_MICRO/stm32l476xx.sct b/targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/TOOLCHAIN_ARM_MICRO/stm32l476xx.sct similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/TOOLCHAIN_ARM_MICRO/stm32l476xx.sct rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/TOOLCHAIN_ARM_MICRO/stm32l476xx.sct diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/TOOLCHAIN_ARM_STD/startup_stm32l476xx.S b/targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/TOOLCHAIN_ARM_STD/startup_stm32l476xx.S similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/TOOLCHAIN_ARM_STD/startup_stm32l476xx.S rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/TOOLCHAIN_ARM_STD/startup_stm32l476xx.S diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/TOOLCHAIN_ARM_STD/stm32l476xx.sct b/targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/TOOLCHAIN_ARM_STD/stm32l476xx.sct similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/TOOLCHAIN_ARM_STD/stm32l476xx.sct rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/TOOLCHAIN_ARM_STD/stm32l476xx.sct diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/TOOLCHAIN_ARM_STD/sys.cpp b/targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/TOOLCHAIN_ARM_STD/sys.cpp similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/TOOLCHAIN_ARM_STD/sys.cpp rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/TOOLCHAIN_ARM_STD/sys.cpp diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/TOOLCHAIN_GCC_ARM/STM32L476XX.ld b/targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/TOOLCHAIN_GCC_ARM/STM32L476XX.ld similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/TOOLCHAIN_GCC_ARM/STM32L476XX.ld rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/TOOLCHAIN_GCC_ARM/STM32L476XX.ld diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/TOOLCHAIN_GCC_ARM/startup_stm32l476xx.S b/targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/TOOLCHAIN_GCC_ARM/startup_stm32l476xx.S similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/TOOLCHAIN_GCC_ARM/startup_stm32l476xx.S rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/TOOLCHAIN_GCC_ARM/startup_stm32l476xx.S diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/TOOLCHAIN_IAR/startup_stm32l476xx.S b/targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/TOOLCHAIN_IAR/startup_stm32l476xx.S similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/TOOLCHAIN_IAR/startup_stm32l476xx.S rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/TOOLCHAIN_IAR/startup_stm32l476xx.S diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/TOOLCHAIN_IAR/stm32l476xx.icf b/targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/TOOLCHAIN_IAR/stm32l476xx.icf similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/TOOLCHAIN_IAR/stm32l476xx.icf rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/TOOLCHAIN_IAR/stm32l476xx.icf diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/cmsis.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/cmsis.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/cmsis.h rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/cmsis.h diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/cmsis_nvic.c b/targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/cmsis_nvic.c similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/cmsis_nvic.c rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/cmsis_nvic.c diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/cmsis_nvic.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/cmsis_nvic.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/cmsis_nvic.h rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/cmsis_nvic.h diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/hal_tick.c b/targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/hal_tick.c similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/hal_tick.c rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/hal_tick.c diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/hal_tick.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/hal_tick.h diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/stm32l4xx_hal_conf.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/stm32l4xx_hal_conf.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/stm32l4xx_hal_conf.h rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/stm32l4xx_hal_conf.h diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/system_stm32l4xx.c b/targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/system_stm32l4xx.c similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/system_stm32l4xx.c rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/system_stm32l4xx.c diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/system_stm32l4xx.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/system_stm32l4xx.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/device/system_stm32l4xx.h rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/device/system_stm32l4xx.h diff --git a/targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/objects.h b/targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/objects.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32L4/TARGET_NUCLEO_L476RG/objects.h rename to targets/TARGET_STM/TARGET_STM32L4/TARGET_L476_L486/objects.h diff --git a/targets/TARGET_STM/mbed_rtx.h b/targets/TARGET_STM/mbed_rtx.h index 3f598f6c952..c46f27a052a 100644 --- a/targets/TARGET_STM/mbed_rtx.h +++ b/targets/TARGET_STM/mbed_rtx.h @@ -647,7 +647,7 @@ #define OS_CLOCK 80000000 #endif -#elif defined(TARGET_STM32L476RG) +#elif (defined(TARGET_STM32L476RG) || defined(TARGET_STM32L486RG)) #ifndef INITIAL_SP #define INITIAL_SP (0x20018000UL) diff --git a/targets/targets.json b/targets/targets.json index d05bf59ca64..7d6ea0c3f84 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -993,7 +993,7 @@ "supported_form_factors": ["ARDUINO", "MORPHO"], "core": "Cortex-M4F", "default_toolchain": "ARM", - "extra_labels": ["STM", "STM32L4", "STM32L476RG"], + "extra_labels": ["STM", "STM32L4", "STM32L476RG", "L476_L486"], "supported_toolchains": ["ARM", "uARM", "IAR", "GCC_ARM"], "inherits": ["Target"], "detect_code": ["0765"], @@ -1002,6 +1002,18 @@ "release_versions": ["2", "5"], "device_name": "stm32l476rg" }, + "NUCLEO_L486RG": { + "supported_form_factors": ["ARDUINO", "MORPHO"], + "core": "Cortex-M4F", + "default_toolchain": "ARM", + "extra_labels": ["STM", "STM32L4", "STM32L486RG", "L476_L486"], + "supported_toolchains": ["ARM", "uARM", "IAR", "GCC_ARM"], + "inherits": ["Target"], + "detect_code": ["0827"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SERIAL_FC", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES"], + "release_versions": ["2", "5"], + "device_name": "stm32l486rg" + }, "STM32F3XX": { "inherits": ["Target"], "core": "Cortex-M4", From 899acb1627f0263354a5ebb35157cd3a4b91f397 Mon Sep 17 00:00:00 2001 From: adustm Date: Tue, 11 Oct 2016 10:47:14 +0200 Subject: [PATCH 84/89] ADD NEW TARGET : NUCLEO_F756ZG, based on existing NUCLEO_F746ZG --- .../stm32f7_eth_init.c | 0 .../PeripheralNames.h | 0 .../PeripheralPins.c | 0 .../PinNames.h | 0 .../PortNames.h | 0 .../TARGET_NUCLEO_F746ZG/device/stm32f746xx.h | 0 .../TARGET_NUCLEO_F746ZG/device/stm32f7xx.h | 0 .../TARGET_NUCLEO_F756ZG/device/stm32f756xx.h | 9659 +++++++++++++++++ .../TARGET_NUCLEO_F756ZG/device/stm32f7xx.h | 216 + .../TOOLCHAIN_ARM_MICRO/startup_stm32f746zg.S | 0 .../TOOLCHAIN_ARM_MICRO/stm32f746zg.sct | 0 .../TOOLCHAIN_ARM_STD/startup_stm32f746zg.S | 0 .../device/TOOLCHAIN_ARM_STD/stm32f746zg.sct | 0 .../device/TOOLCHAIN_ARM_STD/sys.cpp | 0 .../device/TOOLCHAIN_GCC_ARM/STM32F746ZG.ld | 0 .../TOOLCHAIN_GCC_ARM/startup_stm32f746xx.S | 0 .../TOOLCHAIN_IAR/startup_stm32f746xx.S | 0 .../device/TOOLCHAIN_IAR/stm32f746zg.icf | 0 .../device/cmsis.h | 0 .../device/cmsis_nvic.c | 0 .../device/cmsis_nvic.h | 0 .../device/hal_tick.c | 0 .../device/hal_tick.h | 0 .../device/stm32f7xx_hal_conf.h | 0 .../device/system_stm32f7xx.c | 0 .../device/system_stm32f7xx.h | 0 .../objects.h | 0 targets/TARGET_STM/mbed_rtx.h | 2 +- targets/targets.json | 15 +- 29 files changed, 9890 insertions(+), 2 deletions(-) rename features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_STM/TARGET_STM32F7/{TARGET_NUCLEO_F746ZG => TARGET_F746_F756}/stm32f7_eth_init.c (100%) rename targets/TARGET_STM/TARGET_STM32F7/{TARGET_NUCLEO_F746ZG => TARGET_F746_F756}/PeripheralNames.h (100%) rename targets/TARGET_STM/TARGET_STM32F7/{TARGET_NUCLEO_F746ZG => TARGET_F746_F756}/PeripheralPins.c (100%) rename targets/TARGET_STM/TARGET_STM32F7/{TARGET_NUCLEO_F746ZG => TARGET_F746_F756}/PinNames.h (100%) rename targets/TARGET_STM/TARGET_STM32F7/{TARGET_NUCLEO_F746ZG => TARGET_F746_F756}/PortNames.h (100%) rename targets/TARGET_STM/TARGET_STM32F7/{ => TARGET_F746_F756}/TARGET_NUCLEO_F746ZG/device/stm32f746xx.h (100%) rename targets/TARGET_STM/TARGET_STM32F7/{ => TARGET_F746_F756}/TARGET_NUCLEO_F746ZG/device/stm32f7xx.h (100%) create mode 100644 targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/TARGET_NUCLEO_F756ZG/device/stm32f756xx.h create mode 100644 targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/TARGET_NUCLEO_F756ZG/device/stm32f7xx.h rename targets/TARGET_STM/TARGET_STM32F7/{TARGET_NUCLEO_F746ZG => TARGET_F746_F756}/device/TOOLCHAIN_ARM_MICRO/startup_stm32f746zg.S (100%) rename targets/TARGET_STM/TARGET_STM32F7/{TARGET_NUCLEO_F746ZG => TARGET_F746_F756}/device/TOOLCHAIN_ARM_MICRO/stm32f746zg.sct (100%) rename targets/TARGET_STM/TARGET_STM32F7/{TARGET_NUCLEO_F746ZG => TARGET_F746_F756}/device/TOOLCHAIN_ARM_STD/startup_stm32f746zg.S (100%) rename targets/TARGET_STM/TARGET_STM32F7/{TARGET_NUCLEO_F746ZG => TARGET_F746_F756}/device/TOOLCHAIN_ARM_STD/stm32f746zg.sct (100%) rename targets/TARGET_STM/TARGET_STM32F7/{TARGET_NUCLEO_F746ZG => TARGET_F746_F756}/device/TOOLCHAIN_ARM_STD/sys.cpp (100%) rename targets/TARGET_STM/TARGET_STM32F7/{TARGET_NUCLEO_F746ZG => TARGET_F746_F756}/device/TOOLCHAIN_GCC_ARM/STM32F746ZG.ld (100%) rename targets/TARGET_STM/TARGET_STM32F7/{TARGET_NUCLEO_F746ZG => TARGET_F746_F756}/device/TOOLCHAIN_GCC_ARM/startup_stm32f746xx.S (100%) rename targets/TARGET_STM/TARGET_STM32F7/{TARGET_NUCLEO_F746ZG => TARGET_F746_F756}/device/TOOLCHAIN_IAR/startup_stm32f746xx.S (100%) rename targets/TARGET_STM/TARGET_STM32F7/{TARGET_NUCLEO_F746ZG => TARGET_F746_F756}/device/TOOLCHAIN_IAR/stm32f746zg.icf (100%) rename targets/TARGET_STM/TARGET_STM32F7/{TARGET_NUCLEO_F746ZG => TARGET_F746_F756}/device/cmsis.h (100%) rename targets/TARGET_STM/TARGET_STM32F7/{TARGET_NUCLEO_F746ZG => TARGET_F746_F756}/device/cmsis_nvic.c (100%) rename targets/TARGET_STM/TARGET_STM32F7/{TARGET_NUCLEO_F746ZG => TARGET_F746_F756}/device/cmsis_nvic.h (100%) rename targets/TARGET_STM/TARGET_STM32F7/{TARGET_NUCLEO_F746ZG => TARGET_F746_F756}/device/hal_tick.c (100%) rename targets/TARGET_STM/TARGET_STM32F7/{TARGET_NUCLEO_F746ZG => TARGET_F746_F756}/device/hal_tick.h (100%) rename targets/TARGET_STM/TARGET_STM32F7/{TARGET_NUCLEO_F746ZG => TARGET_F746_F756}/device/stm32f7xx_hal_conf.h (100%) rename targets/TARGET_STM/TARGET_STM32F7/{TARGET_NUCLEO_F746ZG => TARGET_F746_F756}/device/system_stm32f7xx.c (100%) rename targets/TARGET_STM/TARGET_STM32F7/{TARGET_NUCLEO_F746ZG => TARGET_F746_F756}/device/system_stm32f7xx.h (100%) rename targets/TARGET_STM/TARGET_STM32F7/{TARGET_NUCLEO_F746ZG => TARGET_F746_F756}/objects.h (100%) diff --git a/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/stm32f7_eth_init.c b/features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/stm32f7_eth_init.c similarity index 100% rename from features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/stm32f7_eth_init.c rename to features/FEATURE_LWIP/lwip-interface/lwip-eth/arch/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/stm32f7_eth_init.c diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/PeripheralNames.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/PeripheralNames.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/PeripheralNames.h rename to targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/PeripheralNames.h diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/PeripheralPins.c b/targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/PeripheralPins.c similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/PeripheralPins.c rename to targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/PeripheralPins.c diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/PinNames.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/PinNames.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/PinNames.h rename to targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/PinNames.h diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/PortNames.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/PortNames.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/PortNames.h rename to targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/PortNames.h diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/stm32f746xx.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/TARGET_NUCLEO_F746ZG/device/stm32f746xx.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/stm32f746xx.h rename to targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/TARGET_NUCLEO_F746ZG/device/stm32f746xx.h diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/stm32f7xx.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/TARGET_NUCLEO_F746ZG/device/stm32f7xx.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/stm32f7xx.h rename to targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/TARGET_NUCLEO_F746ZG/device/stm32f7xx.h diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/TARGET_NUCLEO_F756ZG/device/stm32f756xx.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/TARGET_NUCLEO_F756ZG/device/stm32f756xx.h new file mode 100644 index 00000000000..286cf4ea6e0 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/TARGET_NUCLEO_F756ZG/device/stm32f756xx.h @@ -0,0 +1,9659 @@ +/** + ****************************************************************************** + * @file stm32f756xx.h + * @author MCD Application Team + * @version V1.1.0 + * @date 22-April-2016 + * @brief CMSIS Cortex-M7 Device Peripheral Access Layer Header File. + * + * This file contains: + * - Data structures and the address mapping for all peripherals + * - Peripheral's registers declarations and bits definition + * - Macros to access peripherals registers hardware + * + ****************************************************************************** + * @attention + * + *

    © COPYRIGHT(c) 2016 STMicroelectronics

    + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS_Device + * @{ + */ + +/** @addtogroup stm32f756xx + * @{ + */ + +#ifndef __STM32F756xx_H +#define __STM32F756xx_H + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +/** @addtogroup Configuration_section_for_CMSIS + * @{ + */ + +/** + * @brief STM32F7xx Interrupt Number Definition, according to the selected device + * in @ref Library_configuration_section + */ +typedef enum +{ +/****** Cortex-M7 Processor Exceptions Numbers ****************************************************************/ + NonMaskableInt_IRQn = -14, /*!< 2 Non Maskable Interrupt */ + MemoryManagement_IRQn = -12, /*!< 4 Cortex-M7 Memory Management Interrupt */ + BusFault_IRQn = -11, /*!< 5 Cortex-M7 Bus Fault Interrupt */ + UsageFault_IRQn = -10, /*!< 6 Cortex-M7 Usage Fault Interrupt */ + SVCall_IRQn = -5, /*!< 11 Cortex-M7 SV Call Interrupt */ + DebugMonitor_IRQn = -4, /*!< 12 Cortex-M7 Debug Monitor Interrupt */ + PendSV_IRQn = -2, /*!< 14 Cortex-M7 Pend SV Interrupt */ + SysTick_IRQn = -1, /*!< 15 Cortex-M7 System Tick Interrupt */ +/****** STM32 specific Interrupt Numbers **********************************************************************/ + WWDG_IRQn = 0, /*!< Window WatchDog Interrupt */ + PVD_IRQn = 1, /*!< PVD through EXTI Line detection Interrupt */ + TAMP_STAMP_IRQn = 2, /*!< Tamper and TimeStamp interrupts through the EXTI line */ + RTC_WKUP_IRQn = 3, /*!< RTC Wakeup interrupt through the EXTI line */ + FLASH_IRQn = 4, /*!< FLASH global Interrupt */ + RCC_IRQn = 5, /*!< RCC global Interrupt */ + EXTI0_IRQn = 6, /*!< EXTI Line0 Interrupt */ + EXTI1_IRQn = 7, /*!< EXTI Line1 Interrupt */ + EXTI2_IRQn = 8, /*!< EXTI Line2 Interrupt */ + EXTI3_IRQn = 9, /*!< EXTI Line3 Interrupt */ + EXTI4_IRQn = 10, /*!< EXTI Line4 Interrupt */ + DMA1_Stream0_IRQn = 11, /*!< DMA1 Stream 0 global Interrupt */ + DMA1_Stream1_IRQn = 12, /*!< DMA1 Stream 1 global Interrupt */ + DMA1_Stream2_IRQn = 13, /*!< DMA1 Stream 2 global Interrupt */ + DMA1_Stream3_IRQn = 14, /*!< DMA1 Stream 3 global Interrupt */ + DMA1_Stream4_IRQn = 15, /*!< DMA1 Stream 4 global Interrupt */ + DMA1_Stream5_IRQn = 16, /*!< DMA1 Stream 5 global Interrupt */ + DMA1_Stream6_IRQn = 17, /*!< DMA1 Stream 6 global Interrupt */ + ADC_IRQn = 18, /*!< ADC1, ADC2 and ADC3 global Interrupts */ + CAN1_TX_IRQn = 19, /*!< CAN1 TX Interrupt */ + CAN1_RX0_IRQn = 20, /*!< CAN1 RX0 Interrupt */ + CAN1_RX1_IRQn = 21, /*!< CAN1 RX1 Interrupt */ + CAN1_SCE_IRQn = 22, /*!< CAN1 SCE Interrupt */ + EXTI9_5_IRQn = 23, /*!< External Line[9:5] Interrupts */ + TIM1_BRK_TIM9_IRQn = 24, /*!< TIM1 Break interrupt and TIM9 global interrupt */ + TIM1_UP_TIM10_IRQn = 25, /*!< TIM1 Update Interrupt and TIM10 global interrupt */ + TIM1_TRG_COM_TIM11_IRQn = 26, /*!< TIM1 Trigger and Commutation Interrupt and TIM11 global interrupt */ + TIM1_CC_IRQn = 27, /*!< TIM1 Capture Compare Interrupt */ + TIM2_IRQn = 28, /*!< TIM2 global Interrupt */ + TIM3_IRQn = 29, /*!< TIM3 global Interrupt */ + TIM4_IRQn = 30, /*!< TIM4 global Interrupt */ + I2C1_EV_IRQn = 31, /*!< I2C1 Event Interrupt */ + I2C1_ER_IRQn = 32, /*!< I2C1 Error Interrupt */ + I2C2_EV_IRQn = 33, /*!< I2C2 Event Interrupt */ + I2C2_ER_IRQn = 34, /*!< I2C2 Error Interrupt */ + SPI1_IRQn = 35, /*!< SPI1 global Interrupt */ + SPI2_IRQn = 36, /*!< SPI2 global Interrupt */ + USART1_IRQn = 37, /*!< USART1 global Interrupt */ + USART2_IRQn = 38, /*!< USART2 global Interrupt */ + USART3_IRQn = 39, /*!< USART3 global Interrupt */ + EXTI15_10_IRQn = 40, /*!< External Line[15:10] Interrupts */ + RTC_Alarm_IRQn = 41, /*!< RTC Alarm (A and B) through EXTI Line Interrupt */ + OTG_FS_WKUP_IRQn = 42, /*!< USB OTG FS Wakeup through EXTI line interrupt */ + TIM8_BRK_TIM12_IRQn = 43, /*!< TIM8 Break Interrupt and TIM12 global interrupt */ + TIM8_UP_TIM13_IRQn = 44, /*!< TIM8 Update Interrupt and TIM13 global interrupt */ + TIM8_TRG_COM_TIM14_IRQn = 45, /*!< TIM8 Trigger and Commutation Interrupt and TIM14 global interrupt */ + TIM8_CC_IRQn = 46, /*!< TIM8 Capture Compare Interrupt */ + DMA1_Stream7_IRQn = 47, /*!< DMA1 Stream7 Interrupt */ + FMC_IRQn = 48, /*!< FMC global Interrupt */ + SDMMC1_IRQn = 49, /*!< SDMMC1 global Interrupt */ + TIM5_IRQn = 50, /*!< TIM5 global Interrupt */ + SPI3_IRQn = 51, /*!< SPI3 global Interrupt */ + UART4_IRQn = 52, /*!< UART4 global Interrupt */ + UART5_IRQn = 53, /*!< UART5 global Interrupt */ + TIM6_DAC_IRQn = 54, /*!< TIM6 global and DAC1&2 underrun error interrupts */ + TIM7_IRQn = 55, /*!< TIM7 global interrupt */ + DMA2_Stream0_IRQn = 56, /*!< DMA2 Stream 0 global Interrupt */ + DMA2_Stream1_IRQn = 57, /*!< DMA2 Stream 1 global Interrupt */ + DMA2_Stream2_IRQn = 58, /*!< DMA2 Stream 2 global Interrupt */ + DMA2_Stream3_IRQn = 59, /*!< DMA2 Stream 3 global Interrupt */ + DMA2_Stream4_IRQn = 60, /*!< DMA2 Stream 4 global Interrupt */ + ETH_IRQn = 61, /*!< Ethernet global Interrupt */ + ETH_WKUP_IRQn = 62, /*!< Ethernet Wakeup through EXTI line Interrupt */ + CAN2_TX_IRQn = 63, /*!< CAN2 TX Interrupt */ + CAN2_RX0_IRQn = 64, /*!< CAN2 RX0 Interrupt */ + CAN2_RX1_IRQn = 65, /*!< CAN2 RX1 Interrupt */ + CAN2_SCE_IRQn = 66, /*!< CAN2 SCE Interrupt */ + OTG_FS_IRQn = 67, /*!< USB OTG FS global Interrupt */ + DMA2_Stream5_IRQn = 68, /*!< DMA2 Stream 5 global interrupt */ + DMA2_Stream6_IRQn = 69, /*!< DMA2 Stream 6 global interrupt */ + DMA2_Stream7_IRQn = 70, /*!< DMA2 Stream 7 global interrupt */ + USART6_IRQn = 71, /*!< USART6 global interrupt */ + I2C3_EV_IRQn = 72, /*!< I2C3 event interrupt */ + I2C3_ER_IRQn = 73, /*!< I2C3 error interrupt */ + OTG_HS_EP1_OUT_IRQn = 74, /*!< USB OTG HS End Point 1 Out global interrupt */ + OTG_HS_EP1_IN_IRQn = 75, /*!< USB OTG HS End Point 1 In global interrupt */ + OTG_HS_WKUP_IRQn = 76, /*!< USB OTG HS Wakeup through EXTI interrupt */ + OTG_HS_IRQn = 77, /*!< USB OTG HS global interrupt */ + DCMI_IRQn = 78, /*!< DCMI global interrupt */ + CRYP_IRQn = 79, /*!< CRYP crypto global interrupt */ + HASH_RNG_IRQn = 80, /*!< Hash and Rng global interrupt */ + FPU_IRQn = 81, /*!< FPU global interrupt */ + UART7_IRQn = 82, /*!< UART7 global interrupt */ + UART8_IRQn = 83, /*!< UART8 global interrupt */ + SPI4_IRQn = 84, /*!< SPI4 global Interrupt */ + SPI5_IRQn = 85, /*!< SPI5 global Interrupt */ + SPI6_IRQn = 86, /*!< SPI6 global Interrupt */ + SAI1_IRQn = 87, /*!< SAI1 global Interrupt */ + LTDC_IRQn = 88, /*!< LTDC global Interrupt */ + LTDC_ER_IRQn = 89, /*!< LTDC Error global Interrupt */ + DMA2D_IRQn = 90, /*!< DMA2D global Interrupt */ + SAI2_IRQn = 91, /*!< SAI2 global Interrupt */ + QUADSPI_IRQn = 92, /*!< Quad SPI global interrupt */ + LPTIM1_IRQn = 93, /*!< LP TIM1 interrupt */ + CEC_IRQn = 94, /*!< HDMI-CEC global Interrupt */ + I2C4_EV_IRQn = 95, /*!< I2C4 Event Interrupt */ + I2C4_ER_IRQn = 96, /*!< I2C4 Error Interrupt */ + SPDIF_RX_IRQn = 97, /*!< SPDIF-RX global Interrupt */ +} IRQn_Type; + +/** + * @} + */ + +/** + * @brief Configuration of the Cortex-M7 Processor and Core Peripherals + */ +#define __CM7_REV 0x0001U /*!< Cortex-M7 revision r0p1 */ +#define __MPU_PRESENT 1 /*!< CM7 provides an MPU */ +#define __NVIC_PRIO_BITS 4 /*!< CM7 uses 4 Bits for the Priority Levels */ +#define __Vendor_SysTickConfig 0 /*!< Set to 1 if different SysTick Config is used */ +#define __FPU_PRESENT 1 /*!< FPU present */ +#define __ICACHE_PRESENT 1 /*!< CM7 instruction cache present */ +#define __DCACHE_PRESENT 1 /*!< CM7 data cache present */ +#include "core_cm7.h" /*!< Cortex-M7 processor and core peripherals */ + + +#include "system_stm32f7xx.h" +#include + +/** @addtogroup Peripheral_registers_structures + * @{ + */ + +/** + * @brief Analog to Digital Converter + */ + +typedef struct +{ + __IO uint32_t SR; /*!< ADC status register, Address offset: 0x00 */ + __IO uint32_t CR1; /*!< ADC control register 1, Address offset: 0x04 */ + __IO uint32_t CR2; /*!< ADC control register 2, Address offset: 0x08 */ + __IO uint32_t SMPR1; /*!< ADC sample time register 1, Address offset: 0x0C */ + __IO uint32_t SMPR2; /*!< ADC sample time register 2, Address offset: 0x10 */ + __IO uint32_t JOFR1; /*!< ADC injected channel data offset register 1, Address offset: 0x14 */ + __IO uint32_t JOFR2; /*!< ADC injected channel data offset register 2, Address offset: 0x18 */ + __IO uint32_t JOFR3; /*!< ADC injected channel data offset register 3, Address offset: 0x1C */ + __IO uint32_t JOFR4; /*!< ADC injected channel data offset register 4, Address offset: 0x20 */ + __IO uint32_t HTR; /*!< ADC watchdog higher threshold register, Address offset: 0x24 */ + __IO uint32_t LTR; /*!< ADC watchdog lower threshold register, Address offset: 0x28 */ + __IO uint32_t SQR1; /*!< ADC regular sequence register 1, Address offset: 0x2C */ + __IO uint32_t SQR2; /*!< ADC regular sequence register 2, Address offset: 0x30 */ + __IO uint32_t SQR3; /*!< ADC regular sequence register 3, Address offset: 0x34 */ + __IO uint32_t JSQR; /*!< ADC injected sequence register, Address offset: 0x38*/ + __IO uint32_t JDR1; /*!< ADC injected data register 1, Address offset: 0x3C */ + __IO uint32_t JDR2; /*!< ADC injected data register 2, Address offset: 0x40 */ + __IO uint32_t JDR3; /*!< ADC injected data register 3, Address offset: 0x44 */ + __IO uint32_t JDR4; /*!< ADC injected data register 4, Address offset: 0x48 */ + __IO uint32_t DR; /*!< ADC regular data register, Address offset: 0x4C */ +} ADC_TypeDef; + +typedef struct +{ + __IO uint32_t CSR; /*!< ADC Common status register, Address offset: ADC1 base address + 0x300 */ + __IO uint32_t CCR; /*!< ADC common control register, Address offset: ADC1 base address + 0x304 */ + __IO uint32_t CDR; /*!< ADC common regular data register for dual + AND triple modes, Address offset: ADC1 base address + 0x308 */ +} ADC_Common_TypeDef; + + +/** + * @brief Controller Area Network TxMailBox + */ + +typedef struct +{ + __IO uint32_t TIR; /*!< CAN TX mailbox identifier register */ + __IO uint32_t TDTR; /*!< CAN mailbox data length control and time stamp register */ + __IO uint32_t TDLR; /*!< CAN mailbox data low register */ + __IO uint32_t TDHR; /*!< CAN mailbox data high register */ +} CAN_TxMailBox_TypeDef; + +/** + * @brief Controller Area Network FIFOMailBox + */ + +typedef struct +{ + __IO uint32_t RIR; /*!< CAN receive FIFO mailbox identifier register */ + __IO uint32_t RDTR; /*!< CAN receive FIFO mailbox data length control and time stamp register */ + __IO uint32_t RDLR; /*!< CAN receive FIFO mailbox data low register */ + __IO uint32_t RDHR; /*!< CAN receive FIFO mailbox data high register */ +} CAN_FIFOMailBox_TypeDef; + +/** + * @brief Controller Area Network FilterRegister + */ + +typedef struct +{ + __IO uint32_t FR1; /*!< CAN Filter bank register 1 */ + __IO uint32_t FR2; /*!< CAN Filter bank register 1 */ +} CAN_FilterRegister_TypeDef; + +/** + * @brief Controller Area Network + */ + +typedef struct +{ + __IO uint32_t MCR; /*!< CAN master control register, Address offset: 0x00 */ + __IO uint32_t MSR; /*!< CAN master status register, Address offset: 0x04 */ + __IO uint32_t TSR; /*!< CAN transmit status register, Address offset: 0x08 */ + __IO uint32_t RF0R; /*!< CAN receive FIFO 0 register, Address offset: 0x0C */ + __IO uint32_t RF1R; /*!< CAN receive FIFO 1 register, Address offset: 0x10 */ + __IO uint32_t IER; /*!< CAN interrupt enable register, Address offset: 0x14 */ + __IO uint32_t ESR; /*!< CAN error status register, Address offset: 0x18 */ + __IO uint32_t BTR; /*!< CAN bit timing register, Address offset: 0x1C */ + uint32_t RESERVED0[88]; /*!< Reserved, 0x020 - 0x17F */ + CAN_TxMailBox_TypeDef sTxMailBox[3]; /*!< CAN Tx MailBox, Address offset: 0x180 - 0x1AC */ + CAN_FIFOMailBox_TypeDef sFIFOMailBox[2]; /*!< CAN FIFO MailBox, Address offset: 0x1B0 - 0x1CC */ + uint32_t RESERVED1[12]; /*!< Reserved, 0x1D0 - 0x1FF */ + __IO uint32_t FMR; /*!< CAN filter master register, Address offset: 0x200 */ + __IO uint32_t FM1R; /*!< CAN filter mode register, Address offset: 0x204 */ + uint32_t RESERVED2; /*!< Reserved, 0x208 */ + __IO uint32_t FS1R; /*!< CAN filter scale register, Address offset: 0x20C */ + uint32_t RESERVED3; /*!< Reserved, 0x210 */ + __IO uint32_t FFA1R; /*!< CAN filter FIFO assignment register, Address offset: 0x214 */ + uint32_t RESERVED4; /*!< Reserved, 0x218 */ + __IO uint32_t FA1R; /*!< CAN filter activation register, Address offset: 0x21C */ + uint32_t RESERVED5[8]; /*!< Reserved, 0x220-0x23F */ + CAN_FilterRegister_TypeDef sFilterRegister[28]; /*!< CAN Filter Register, Address offset: 0x240-0x31C */ +} CAN_TypeDef; + +/** + * @brief HDMI-CEC + */ + +typedef struct +{ + __IO uint32_t CR; /*!< CEC control register, Address offset:0x00 */ + __IO uint32_t CFGR; /*!< CEC configuration register, Address offset:0x04 */ + __IO uint32_t TXDR; /*!< CEC Tx data register , Address offset:0x08 */ + __IO uint32_t RXDR; /*!< CEC Rx Data Register, Address offset:0x0C */ + __IO uint32_t ISR; /*!< CEC Interrupt and Status Register, Address offset:0x10 */ + __IO uint32_t IER; /*!< CEC interrupt enable register, Address offset:0x14 */ +}CEC_TypeDef; + + +/** + * @brief CRC calculation unit + */ + +typedef struct +{ + __IO uint32_t DR; /*!< CRC Data register, Address offset: 0x00 */ + __IO uint8_t IDR; /*!< CRC Independent data register, Address offset: 0x04 */ + uint8_t RESERVED0; /*!< Reserved, 0x05 */ + uint16_t RESERVED1; /*!< Reserved, 0x06 */ + __IO uint32_t CR; /*!< CRC Control register, Address offset: 0x08 */ + uint32_t RESERVED2; /*!< Reserved, 0x0C */ + __IO uint32_t INIT; /*!< Initial CRC value register, Address offset: 0x10 */ + __IO uint32_t POL; /*!< CRC polynomial register, Address offset: 0x14 */ +} CRC_TypeDef; + +/** + * @brief Digital to Analog Converter + */ + +typedef struct +{ + __IO uint32_t CR; /*!< DAC control register, Address offset: 0x00 */ + __IO uint32_t SWTRIGR; /*!< DAC software trigger register, Address offset: 0x04 */ + __IO uint32_t DHR12R1; /*!< DAC channel1 12-bit right-aligned data holding register, Address offset: 0x08 */ + __IO uint32_t DHR12L1; /*!< DAC channel1 12-bit left aligned data holding register, Address offset: 0x0C */ + __IO uint32_t DHR8R1; /*!< DAC channel1 8-bit right aligned data holding register, Address offset: 0x10 */ + __IO uint32_t DHR12R2; /*!< DAC channel2 12-bit right aligned data holding register, Address offset: 0x14 */ + __IO uint32_t DHR12L2; /*!< DAC channel2 12-bit left aligned data holding register, Address offset: 0x18 */ + __IO uint32_t DHR8R2; /*!< DAC channel2 8-bit right-aligned data holding register, Address offset: 0x1C */ + __IO uint32_t DHR12RD; /*!< Dual DAC 12-bit right-aligned data holding register, Address offset: 0x20 */ + __IO uint32_t DHR12LD; /*!< DUAL DAC 12-bit left aligned data holding register, Address offset: 0x24 */ + __IO uint32_t DHR8RD; /*!< DUAL DAC 8-bit right aligned data holding register, Address offset: 0x28 */ + __IO uint32_t DOR1; /*!< DAC channel1 data output register, Address offset: 0x2C */ + __IO uint32_t DOR2; /*!< DAC channel2 data output register, Address offset: 0x30 */ + __IO uint32_t SR; /*!< DAC status register, Address offset: 0x34 */ +} DAC_TypeDef; + + +/** + * @brief Debug MCU + */ + +typedef struct +{ + __IO uint32_t IDCODE; /*!< MCU device ID code, Address offset: 0x00 */ + __IO uint32_t CR; /*!< Debug MCU configuration register, Address offset: 0x04 */ + __IO uint32_t APB1FZ; /*!< Debug MCU APB1 freeze register, Address offset: 0x08 */ + __IO uint32_t APB2FZ; /*!< Debug MCU APB2 freeze register, Address offset: 0x0C */ +}DBGMCU_TypeDef; + +/** + * @brief DCMI + */ + +typedef struct +{ + __IO uint32_t CR; /*!< DCMI control register 1, Address offset: 0x00 */ + __IO uint32_t SR; /*!< DCMI status register, Address offset: 0x04 */ + __IO uint32_t RISR; /*!< DCMI raw interrupt status register, Address offset: 0x08 */ + __IO uint32_t IER; /*!< DCMI interrupt enable register, Address offset: 0x0C */ + __IO uint32_t MISR; /*!< DCMI masked interrupt status register, Address offset: 0x10 */ + __IO uint32_t ICR; /*!< DCMI interrupt clear register, Address offset: 0x14 */ + __IO uint32_t ESCR; /*!< DCMI embedded synchronization code register, Address offset: 0x18 */ + __IO uint32_t ESUR; /*!< DCMI embedded synchronization unmask register, Address offset: 0x1C */ + __IO uint32_t CWSTRTR; /*!< DCMI crop window start, Address offset: 0x20 */ + __IO uint32_t CWSIZER; /*!< DCMI crop window size, Address offset: 0x24 */ + __IO uint32_t DR; /*!< DCMI data register, Address offset: 0x28 */ +} DCMI_TypeDef; + +/** + * @brief DMA Controller + */ + +typedef struct +{ + __IO uint32_t CR; /*!< DMA stream x configuration register */ + __IO uint32_t NDTR; /*!< DMA stream x number of data register */ + __IO uint32_t PAR; /*!< DMA stream x peripheral address register */ + __IO uint32_t M0AR; /*!< DMA stream x memory 0 address register */ + __IO uint32_t M1AR; /*!< DMA stream x memory 1 address register */ + __IO uint32_t FCR; /*!< DMA stream x FIFO control register */ +} DMA_Stream_TypeDef; + +typedef struct +{ + __IO uint32_t LISR; /*!< DMA low interrupt status register, Address offset: 0x00 */ + __IO uint32_t HISR; /*!< DMA high interrupt status register, Address offset: 0x04 */ + __IO uint32_t LIFCR; /*!< DMA low interrupt flag clear register, Address offset: 0x08 */ + __IO uint32_t HIFCR; /*!< DMA high interrupt flag clear register, Address offset: 0x0C */ +} DMA_TypeDef; + + +/** + * @brief DMA2D Controller + */ + +typedef struct +{ + __IO uint32_t CR; /*!< DMA2D Control Register, Address offset: 0x00 */ + __IO uint32_t ISR; /*!< DMA2D Interrupt Status Register, Address offset: 0x04 */ + __IO uint32_t IFCR; /*!< DMA2D Interrupt Flag Clear Register, Address offset: 0x08 */ + __IO uint32_t FGMAR; /*!< DMA2D Foreground Memory Address Register, Address offset: 0x0C */ + __IO uint32_t FGOR; /*!< DMA2D Foreground Offset Register, Address offset: 0x10 */ + __IO uint32_t BGMAR; /*!< DMA2D Background Memory Address Register, Address offset: 0x14 */ + __IO uint32_t BGOR; /*!< DMA2D Background Offset Register, Address offset: 0x18 */ + __IO uint32_t FGPFCCR; /*!< DMA2D Foreground PFC Control Register, Address offset: 0x1C */ + __IO uint32_t FGCOLR; /*!< DMA2D Foreground Color Register, Address offset: 0x20 */ + __IO uint32_t BGPFCCR; /*!< DMA2D Background PFC Control Register, Address offset: 0x24 */ + __IO uint32_t BGCOLR; /*!< DMA2D Background Color Register, Address offset: 0x28 */ + __IO uint32_t FGCMAR; /*!< DMA2D Foreground CLUT Memory Address Register, Address offset: 0x2C */ + __IO uint32_t BGCMAR; /*!< DMA2D Background CLUT Memory Address Register, Address offset: 0x30 */ + __IO uint32_t OPFCCR; /*!< DMA2D Output PFC Control Register, Address offset: 0x34 */ + __IO uint32_t OCOLR; /*!< DMA2D Output Color Register, Address offset: 0x38 */ + __IO uint32_t OMAR; /*!< DMA2D Output Memory Address Register, Address offset: 0x3C */ + __IO uint32_t OOR; /*!< DMA2D Output Offset Register, Address offset: 0x40 */ + __IO uint32_t NLR; /*!< DMA2D Number of Line Register, Address offset: 0x44 */ + __IO uint32_t LWR; /*!< DMA2D Line Watermark Register, Address offset: 0x48 */ + __IO uint32_t AMTCR; /*!< DMA2D AHB Master Timer Configuration Register, Address offset: 0x4C */ + uint32_t RESERVED[236]; /*!< Reserved, 0x50-0x3FF */ + __IO uint32_t FGCLUT[256]; /*!< DMA2D Foreground CLUT, Address offset:400-7FF */ + __IO uint32_t BGCLUT[256]; /*!< DMA2D Background CLUT, Address offset:800-BFF */ +} DMA2D_TypeDef; + + +/** + * @brief Ethernet MAC + */ + +typedef struct +{ + __IO uint32_t MACCR; + __IO uint32_t MACFFR; + __IO uint32_t MACHTHR; + __IO uint32_t MACHTLR; + __IO uint32_t MACMIIAR; + __IO uint32_t MACMIIDR; + __IO uint32_t MACFCR; + __IO uint32_t MACVLANTR; /* 8 */ + uint32_t RESERVED0[2]; + __IO uint32_t MACRWUFFR; /* 11 */ + __IO uint32_t MACPMTCSR; + uint32_t RESERVED1[2]; + __IO uint32_t MACSR; /* 15 */ + __IO uint32_t MACIMR; + __IO uint32_t MACA0HR; + __IO uint32_t MACA0LR; + __IO uint32_t MACA1HR; + __IO uint32_t MACA1LR; + __IO uint32_t MACA2HR; + __IO uint32_t MACA2LR; + __IO uint32_t MACA3HR; + __IO uint32_t MACA3LR; /* 24 */ + uint32_t RESERVED2[40]; + __IO uint32_t MMCCR; /* 65 */ + __IO uint32_t MMCRIR; + __IO uint32_t MMCTIR; + __IO uint32_t MMCRIMR; + __IO uint32_t MMCTIMR; /* 69 */ + uint32_t RESERVED3[14]; + __IO uint32_t MMCTGFSCCR; /* 84 */ + __IO uint32_t MMCTGFMSCCR; + uint32_t RESERVED4[5]; + __IO uint32_t MMCTGFCR; + uint32_t RESERVED5[10]; + __IO uint32_t MMCRFCECR; + __IO uint32_t MMCRFAECR; + uint32_t RESERVED6[10]; + __IO uint32_t MMCRGUFCR; + uint32_t RESERVED7[334]; + __IO uint32_t PTPTSCR; + __IO uint32_t PTPSSIR; + __IO uint32_t PTPTSHR; + __IO uint32_t PTPTSLR; + __IO uint32_t PTPTSHUR; + __IO uint32_t PTPTSLUR; + __IO uint32_t PTPTSAR; + __IO uint32_t PTPTTHR; + __IO uint32_t PTPTTLR; + __IO uint32_t RESERVED8; + __IO uint32_t PTPTSSR; + uint32_t RESERVED9[565]; + __IO uint32_t DMABMR; + __IO uint32_t DMATPDR; + __IO uint32_t DMARPDR; + __IO uint32_t DMARDLAR; + __IO uint32_t DMATDLAR; + __IO uint32_t DMASR; + __IO uint32_t DMAOMR; + __IO uint32_t DMAIER; + __IO uint32_t DMAMFBOCR; + __IO uint32_t DMARSWTR; + uint32_t RESERVED10[8]; + __IO uint32_t DMACHTDR; + __IO uint32_t DMACHRDR; + __IO uint32_t DMACHTBAR; + __IO uint32_t DMACHRBAR; +} ETH_TypeDef; + +/** + * @brief External Interrupt/Event Controller + */ + +typedef struct +{ + __IO uint32_t IMR; /*!< EXTI Interrupt mask register, Address offset: 0x00 */ + __IO uint32_t EMR; /*!< EXTI Event mask register, Address offset: 0x04 */ + __IO uint32_t RTSR; /*!< EXTI Rising trigger selection register, Address offset: 0x08 */ + __IO uint32_t FTSR; /*!< EXTI Falling trigger selection register, Address offset: 0x0C */ + __IO uint32_t SWIER; /*!< EXTI Software interrupt event register, Address offset: 0x10 */ + __IO uint32_t PR; /*!< EXTI Pending register, Address offset: 0x14 */ +} EXTI_TypeDef; + +/** + * @brief FLASH Registers + */ + +typedef struct +{ + __IO uint32_t ACR; /*!< FLASH access control register, Address offset: 0x00 */ + __IO uint32_t KEYR; /*!< FLASH key register, Address offset: 0x04 */ + __IO uint32_t OPTKEYR; /*!< FLASH option key register, Address offset: 0x08 */ + __IO uint32_t SR; /*!< FLASH status register, Address offset: 0x0C */ + __IO uint32_t CR; /*!< FLASH control register, Address offset: 0x10 */ + __IO uint32_t OPTCR; /*!< FLASH option control register , Address offset: 0x14 */ + __IO uint32_t OPTCR1; /*!< FLASH option control register 1 , Address offset: 0x18 */ +} FLASH_TypeDef; + + + +/** + * @brief Flexible Memory Controller + */ + +typedef struct +{ + __IO uint32_t BTCR[8]; /*!< NOR/PSRAM chip-select control register(BCR) and chip-select timing register(BTR), Address offset: 0x00-1C */ +} FMC_Bank1_TypeDef; + +/** + * @brief Flexible Memory Controller Bank1E + */ + +typedef struct +{ + __IO uint32_t BWTR[7]; /*!< NOR/PSRAM write timing registers, Address offset: 0x104-0x11C */ +} FMC_Bank1E_TypeDef; + +/** + * @brief Flexible Memory Controller Bank3 + */ + +typedef struct +{ + __IO uint32_t PCR; /*!< NAND Flash control register, Address offset: 0x80 */ + __IO uint32_t SR; /*!< NAND Flash FIFO status and interrupt register, Address offset: 0x84 */ + __IO uint32_t PMEM; /*!< NAND Flash Common memory space timing register, Address offset: 0x88 */ + __IO uint32_t PATT; /*!< NAND Flash Attribute memory space timing register, Address offset: 0x8C */ + uint32_t RESERVED0; /*!< Reserved, 0x90 */ + __IO uint32_t ECCR; /*!< NAND Flash ECC result registers, Address offset: 0x94 */ +} FMC_Bank3_TypeDef; + +/** + * @brief Flexible Memory Controller Bank5_6 + */ + +typedef struct +{ + __IO uint32_t SDCR[2]; /*!< SDRAM Control registers , Address offset: 0x140-0x144 */ + __IO uint32_t SDTR[2]; /*!< SDRAM Timing registers , Address offset: 0x148-0x14C */ + __IO uint32_t SDCMR; /*!< SDRAM Command Mode register, Address offset: 0x150 */ + __IO uint32_t SDRTR; /*!< SDRAM Refresh Timer register, Address offset: 0x154 */ + __IO uint32_t SDSR; /*!< SDRAM Status register, Address offset: 0x158 */ +} FMC_Bank5_6_TypeDef; + + +/** + * @brief General Purpose I/O + */ + +typedef struct +{ + __IO uint32_t MODER; /*!< GPIO port mode register, Address offset: 0x00 */ + __IO uint32_t OTYPER; /*!< GPIO port output type register, Address offset: 0x04 */ + __IO uint32_t OSPEEDR; /*!< GPIO port output speed register, Address offset: 0x08 */ + __IO uint32_t PUPDR; /*!< GPIO port pull-up/pull-down register, Address offset: 0x0C */ + __IO uint32_t IDR; /*!< GPIO port input data register, Address offset: 0x10 */ + __IO uint32_t ODR; /*!< GPIO port output data register, Address offset: 0x14 */ + __IO uint32_t BSRR; /*!< GPIO port bit set/reset register, Address offset: 0x18 */ + __IO uint32_t LCKR; /*!< GPIO port configuration lock register, Address offset: 0x1C */ + __IO uint32_t AFR[2]; /*!< GPIO alternate function registers, Address offset: 0x20-0x24 */ +} GPIO_TypeDef; + +/** + * @brief System configuration controller + */ + +typedef struct +{ + __IO uint32_t MEMRMP; /*!< SYSCFG memory remap register, Address offset: 0x00 */ + __IO uint32_t PMC; /*!< SYSCFG peripheral mode configuration register, Address offset: 0x04 */ + __IO uint32_t EXTICR[4]; /*!< SYSCFG external interrupt configuration registers, Address offset: 0x08-0x14 */ + uint32_t RESERVED[2]; /*!< Reserved, 0x18-0x1C */ + __IO uint32_t CMPCR; /*!< SYSCFG Compensation cell control register, Address offset: 0x20 */ +} SYSCFG_TypeDef; + +/** + * @brief Inter-integrated Circuit Interface + */ + +typedef struct +{ + __IO uint32_t CR1; /*!< I2C Control register 1, Address offset: 0x00 */ + __IO uint32_t CR2; /*!< I2C Control register 2, Address offset: 0x04 */ + __IO uint32_t OAR1; /*!< I2C Own address 1 register, Address offset: 0x08 */ + __IO uint32_t OAR2; /*!< I2C Own address 2 register, Address offset: 0x0C */ + __IO uint32_t TIMINGR; /*!< I2C Timing register, Address offset: 0x10 */ + __IO uint32_t TIMEOUTR; /*!< I2C Timeout register, Address offset: 0x14 */ + __IO uint32_t ISR; /*!< I2C Interrupt and status register, Address offset: 0x18 */ + __IO uint32_t ICR; /*!< I2C Interrupt clear register, Address offset: 0x1C */ + __IO uint32_t PECR; /*!< I2C PEC register, Address offset: 0x20 */ + __IO uint32_t RXDR; /*!< I2C Receive data register, Address offset: 0x24 */ + __IO uint32_t TXDR; /*!< I2C Transmit data register, Address offset: 0x28 */ +} I2C_TypeDef; + +/** + * @brief Independent WATCHDOG + */ + +typedef struct +{ + __IO uint32_t KR; /*!< IWDG Key register, Address offset: 0x00 */ + __IO uint32_t PR; /*!< IWDG Prescaler register, Address offset: 0x04 */ + __IO uint32_t RLR; /*!< IWDG Reload register, Address offset: 0x08 */ + __IO uint32_t SR; /*!< IWDG Status register, Address offset: 0x0C */ + __IO uint32_t WINR; /*!< IWDG Window register, Address offset: 0x10 */ +} IWDG_TypeDef; + + +/** + * @brief LCD-TFT Display Controller + */ + +typedef struct +{ + uint32_t RESERVED0[2]; /*!< Reserved, 0x00-0x04 */ + __IO uint32_t SSCR; /*!< LTDC Synchronization Size Configuration Register, Address offset: 0x08 */ + __IO uint32_t BPCR; /*!< LTDC Back Porch Configuration Register, Address offset: 0x0C */ + __IO uint32_t AWCR; /*!< LTDC Active Width Configuration Register, Address offset: 0x10 */ + __IO uint32_t TWCR; /*!< LTDC Total Width Configuration Register, Address offset: 0x14 */ + __IO uint32_t GCR; /*!< LTDC Global Control Register, Address offset: 0x18 */ + uint32_t RESERVED1[2]; /*!< Reserved, 0x1C-0x20 */ + __IO uint32_t SRCR; /*!< LTDC Shadow Reload Configuration Register, Address offset: 0x24 */ + uint32_t RESERVED2[1]; /*!< Reserved, 0x28 */ + __IO uint32_t BCCR; /*!< LTDC Background Color Configuration Register, Address offset: 0x2C */ + uint32_t RESERVED3[1]; /*!< Reserved, 0x30 */ + __IO uint32_t IER; /*!< LTDC Interrupt Enable Register, Address offset: 0x34 */ + __IO uint32_t ISR; /*!< LTDC Interrupt Status Register, Address offset: 0x38 */ + __IO uint32_t ICR; /*!< LTDC Interrupt Clear Register, Address offset: 0x3C */ + __IO uint32_t LIPCR; /*!< LTDC Line Interrupt Position Configuration Register, Address offset: 0x40 */ + __IO uint32_t CPSR; /*!< LTDC Current Position Status Register, Address offset: 0x44 */ + __IO uint32_t CDSR; /*!< LTDC Current Display Status Register, Address offset: 0x48 */ +} LTDC_TypeDef; + +/** + * @brief LCD-TFT Display layer x Controller + */ + +typedef struct +{ + __IO uint32_t CR; /*!< LTDC Layerx Control Register Address offset: 0x84 */ + __IO uint32_t WHPCR; /*!< LTDC Layerx Window Horizontal Position Configuration Register Address offset: 0x88 */ + __IO uint32_t WVPCR; /*!< LTDC Layerx Window Vertical Position Configuration Register Address offset: 0x8C */ + __IO uint32_t CKCR; /*!< LTDC Layerx Color Keying Configuration Register Address offset: 0x90 */ + __IO uint32_t PFCR; /*!< LTDC Layerx Pixel Format Configuration Register Address offset: 0x94 */ + __IO uint32_t CACR; /*!< LTDC Layerx Constant Alpha Configuration Register Address offset: 0x98 */ + __IO uint32_t DCCR; /*!< LTDC Layerx Default Color Configuration Register Address offset: 0x9C */ + __IO uint32_t BFCR; /*!< LTDC Layerx Blending Factors Configuration Register Address offset: 0xA0 */ + uint32_t RESERVED0[2]; /*!< Reserved */ + __IO uint32_t CFBAR; /*!< LTDC Layerx Color Frame Buffer Address Register Address offset: 0xAC */ + __IO uint32_t CFBLR; /*!< LTDC Layerx Color Frame Buffer Length Register Address offset: 0xB0 */ + __IO uint32_t CFBLNR; /*!< LTDC Layerx ColorFrame Buffer Line Number Register Address offset: 0xB4 */ + uint32_t RESERVED1[3]; /*!< Reserved */ + __IO uint32_t CLUTWR; /*!< LTDC Layerx CLUT Write Register Address offset: 0x144 */ + +} LTDC_Layer_TypeDef; + +/** + * @brief Power Control + */ + +typedef struct +{ + __IO uint32_t CR1; /*!< PWR power control register 1, Address offset: 0x00 */ + __IO uint32_t CSR1; /*!< PWR power control/status register 2, Address offset: 0x04 */ + __IO uint32_t CR2; /*!< PWR power control register 2, Address offset: 0x08 */ + __IO uint32_t CSR2; /*!< PWR power control/status register 2, Address offset: 0x0C */ +} PWR_TypeDef; + + +/** + * @brief Reset and Clock Control + */ + +typedef struct +{ + __IO uint32_t CR; /*!< RCC clock control register, Address offset: 0x00 */ + __IO uint32_t PLLCFGR; /*!< RCC PLL configuration register, Address offset: 0x04 */ + __IO uint32_t CFGR; /*!< RCC clock configuration register, Address offset: 0x08 */ + __IO uint32_t CIR; /*!< RCC clock interrupt register, Address offset: 0x0C */ + __IO uint32_t AHB1RSTR; /*!< RCC AHB1 peripheral reset register, Address offset: 0x10 */ + __IO uint32_t AHB2RSTR; /*!< RCC AHB2 peripheral reset register, Address offset: 0x14 */ + __IO uint32_t AHB3RSTR; /*!< RCC AHB3 peripheral reset register, Address offset: 0x18 */ + uint32_t RESERVED0; /*!< Reserved, 0x1C */ + __IO uint32_t APB1RSTR; /*!< RCC APB1 peripheral reset register, Address offset: 0x20 */ + __IO uint32_t APB2RSTR; /*!< RCC APB2 peripheral reset register, Address offset: 0x24 */ + uint32_t RESERVED1[2]; /*!< Reserved, 0x28-0x2C */ + __IO uint32_t AHB1ENR; /*!< RCC AHB1 peripheral clock register, Address offset: 0x30 */ + __IO uint32_t AHB2ENR; /*!< RCC AHB2 peripheral clock register, Address offset: 0x34 */ + __IO uint32_t AHB3ENR; /*!< RCC AHB3 peripheral clock register, Address offset: 0x38 */ + uint32_t RESERVED2; /*!< Reserved, 0x3C */ + __IO uint32_t APB1ENR; /*!< RCC APB1 peripheral clock enable register, Address offset: 0x40 */ + __IO uint32_t APB2ENR; /*!< RCC APB2 peripheral clock enable register, Address offset: 0x44 */ + uint32_t RESERVED3[2]; /*!< Reserved, 0x48-0x4C */ + __IO uint32_t AHB1LPENR; /*!< RCC AHB1 peripheral clock enable in low power mode register, Address offset: 0x50 */ + __IO uint32_t AHB2LPENR; /*!< RCC AHB2 peripheral clock enable in low power mode register, Address offset: 0x54 */ + __IO uint32_t AHB3LPENR; /*!< RCC AHB3 peripheral clock enable in low power mode register, Address offset: 0x58 */ + uint32_t RESERVED4; /*!< Reserved, 0x5C */ + __IO uint32_t APB1LPENR; /*!< RCC APB1 peripheral clock enable in low power mode register, Address offset: 0x60 */ + __IO uint32_t APB2LPENR; /*!< RCC APB2 peripheral clock enable in low power mode register, Address offset: 0x64 */ + uint32_t RESERVED5[2]; /*!< Reserved, 0x68-0x6C */ + __IO uint32_t BDCR; /*!< RCC Backup domain control register, Address offset: 0x70 */ + __IO uint32_t CSR; /*!< RCC clock control & status register, Address offset: 0x74 */ + uint32_t RESERVED6[2]; /*!< Reserved, 0x78-0x7C */ + __IO uint32_t SSCGR; /*!< RCC spread spectrum clock generation register, Address offset: 0x80 */ + __IO uint32_t PLLI2SCFGR; /*!< RCC PLLI2S configuration register, Address offset: 0x84 */ + __IO uint32_t PLLSAICFGR; /*!< RCC PLLSAI configuration register, Address offset: 0x88 */ + __IO uint32_t DCKCFGR1; /*!< RCC Dedicated Clocks configuration register1, Address offset: 0x8C */ + __IO uint32_t DCKCFGR2; /*!< RCC Dedicated Clocks configuration register 2, Address offset: 0x90 */ + +} RCC_TypeDef; + +/** + * @brief Real-Time Clock + */ + +typedef struct +{ + __IO uint32_t TR; /*!< RTC time register, Address offset: 0x00 */ + __IO uint32_t DR; /*!< RTC date register, Address offset: 0x04 */ + __IO uint32_t CR; /*!< RTC control register, Address offset: 0x08 */ + __IO uint32_t ISR; /*!< RTC initialization and status register, Address offset: 0x0C */ + __IO uint32_t PRER; /*!< RTC prescaler register, Address offset: 0x10 */ + __IO uint32_t WUTR; /*!< RTC wakeup timer register, Address offset: 0x14 */ + uint32_t reserved; /*!< Reserved */ + __IO uint32_t ALRMAR; /*!< RTC alarm A register, Address offset: 0x1C */ + __IO uint32_t ALRMBR; /*!< RTC alarm B register, Address offset: 0x20 */ + __IO uint32_t WPR; /*!< RTC write protection register, Address offset: 0x24 */ + __IO uint32_t SSR; /*!< RTC sub second register, Address offset: 0x28 */ + __IO uint32_t SHIFTR; /*!< RTC shift control register, Address offset: 0x2C */ + __IO uint32_t TSTR; /*!< RTC time stamp time register, Address offset: 0x30 */ + __IO uint32_t TSDR; /*!< RTC time stamp date register, Address offset: 0x34 */ + __IO uint32_t TSSSR; /*!< RTC time-stamp sub second register, Address offset: 0x38 */ + __IO uint32_t CALR; /*!< RTC calibration register, Address offset: 0x3C */ + __IO uint32_t TAMPCR; /*!< RTC tamper configuration register, Address offset: 0x40 */ + __IO uint32_t ALRMASSR; /*!< RTC alarm A sub second register, Address offset: 0x44 */ + __IO uint32_t ALRMBSSR; /*!< RTC alarm B sub second register, Address offset: 0x48 */ + __IO uint32_t OR; /*!< RTC option register, Address offset: 0x4C */ + __IO uint32_t BKP0R; /*!< RTC backup register 0, Address offset: 0x50 */ + __IO uint32_t BKP1R; /*!< RTC backup register 1, Address offset: 0x54 */ + __IO uint32_t BKP2R; /*!< RTC backup register 2, Address offset: 0x58 */ + __IO uint32_t BKP3R; /*!< RTC backup register 3, Address offset: 0x5C */ + __IO uint32_t BKP4R; /*!< RTC backup register 4, Address offset: 0x60 */ + __IO uint32_t BKP5R; /*!< RTC backup register 5, Address offset: 0x64 */ + __IO uint32_t BKP6R; /*!< RTC backup register 6, Address offset: 0x68 */ + __IO uint32_t BKP7R; /*!< RTC backup register 7, Address offset: 0x6C */ + __IO uint32_t BKP8R; /*!< RTC backup register 8, Address offset: 0x70 */ + __IO uint32_t BKP9R; /*!< RTC backup register 9, Address offset: 0x74 */ + __IO uint32_t BKP10R; /*!< RTC backup register 10, Address offset: 0x78 */ + __IO uint32_t BKP11R; /*!< RTC backup register 11, Address offset: 0x7C */ + __IO uint32_t BKP12R; /*!< RTC backup register 12, Address offset: 0x80 */ + __IO uint32_t BKP13R; /*!< RTC backup register 13, Address offset: 0x84 */ + __IO uint32_t BKP14R; /*!< RTC backup register 14, Address offset: 0x88 */ + __IO uint32_t BKP15R; /*!< RTC backup register 15, Address offset: 0x8C */ + __IO uint32_t BKP16R; /*!< RTC backup register 16, Address offset: 0x90 */ + __IO uint32_t BKP17R; /*!< RTC backup register 17, Address offset: 0x94 */ + __IO uint32_t BKP18R; /*!< RTC backup register 18, Address offset: 0x98 */ + __IO uint32_t BKP19R; /*!< RTC backup register 19, Address offset: 0x9C */ + __IO uint32_t BKP20R; /*!< RTC backup register 20, Address offset: 0xA0 */ + __IO uint32_t BKP21R; /*!< RTC backup register 21, Address offset: 0xA4 */ + __IO uint32_t BKP22R; /*!< RTC backup register 22, Address offset: 0xA8 */ + __IO uint32_t BKP23R; /*!< RTC backup register 23, Address offset: 0xAC */ + __IO uint32_t BKP24R; /*!< RTC backup register 24, Address offset: 0xB0 */ + __IO uint32_t BKP25R; /*!< RTC backup register 25, Address offset: 0xB4 */ + __IO uint32_t BKP26R; /*!< RTC backup register 26, Address offset: 0xB8 */ + __IO uint32_t BKP27R; /*!< RTC backup register 27, Address offset: 0xBC */ + __IO uint32_t BKP28R; /*!< RTC backup register 28, Address offset: 0xC0 */ + __IO uint32_t BKP29R; /*!< RTC backup register 29, Address offset: 0xC4 */ + __IO uint32_t BKP30R; /*!< RTC backup register 30, Address offset: 0xC8 */ + __IO uint32_t BKP31R; /*!< RTC backup register 31, Address offset: 0xCC */ +} RTC_TypeDef; + + +/** + * @brief Serial Audio Interface + */ + +typedef struct +{ + __IO uint32_t GCR; /*!< SAI global configuration register, Address offset: 0x00 */ +} SAI_TypeDef; + +typedef struct +{ + __IO uint32_t CR1; /*!< SAI block x configuration register 1, Address offset: 0x04 */ + __IO uint32_t CR2; /*!< SAI block x configuration register 2, Address offset: 0x08 */ + __IO uint32_t FRCR; /*!< SAI block x frame configuration register, Address offset: 0x0C */ + __IO uint32_t SLOTR; /*!< SAI block x slot register, Address offset: 0x10 */ + __IO uint32_t IMR; /*!< SAI block x interrupt mask register, Address offset: 0x14 */ + __IO uint32_t SR; /*!< SAI block x status register, Address offset: 0x18 */ + __IO uint32_t CLRFR; /*!< SAI block x clear flag register, Address offset: 0x1C */ + __IO uint32_t DR; /*!< SAI block x data register, Address offset: 0x20 */ +} SAI_Block_TypeDef; + +/** + * @brief SPDIF-RX Interface + */ + +typedef struct +{ + __IO uint32_t CR; /*!< Control register, Address offset: 0x00 */ + __IO uint32_t IMR; /*!< Interrupt mask register, Address offset: 0x04 */ + __IO uint32_t SR; /*!< Status register, Address offset: 0x08 */ + __IO uint32_t IFCR; /*!< Interrupt Flag Clear register, Address offset: 0x0C */ + __IO uint32_t DR; /*!< Data input register, Address offset: 0x10 */ + __IO uint32_t CSR; /*!< Channel Status register, Address offset: 0x14 */ + __IO uint32_t DIR; /*!< Debug Information register, Address offset: 0x18 */ +} SPDIFRX_TypeDef; + + +/** + * @brief SD host Interface + */ + +typedef struct +{ + __IO uint32_t POWER; /*!< SDMMC power control register, Address offset: 0x00 */ + __IO uint32_t CLKCR; /*!< SDMMClock control register, Address offset: 0x04 */ + __IO uint32_t ARG; /*!< SDMMC argument register, Address offset: 0x08 */ + __IO uint32_t CMD; /*!< SDMMC command register, Address offset: 0x0C */ + __I uint32_t RESPCMD; /*!< SDMMC command response register, Address offset: 0x10 */ + __I uint32_t RESP1; /*!< SDMMC response 1 register, Address offset: 0x14 */ + __I uint32_t RESP2; /*!< SDMMC response 2 register, Address offset: 0x18 */ + __I uint32_t RESP3; /*!< SDMMC response 3 register, Address offset: 0x1C */ + __I uint32_t RESP4; /*!< SDMMC response 4 register, Address offset: 0x20 */ + __IO uint32_t DTIMER; /*!< SDMMC data timer register, Address offset: 0x24 */ + __IO uint32_t DLEN; /*!< SDMMC data length register, Address offset: 0x28 */ + __IO uint32_t DCTRL; /*!< SDMMC data control register, Address offset: 0x2C */ + __I uint32_t DCOUNT; /*!< SDMMC data counter register, Address offset: 0x30 */ + __I uint32_t STA; /*!< SDMMC status register, Address offset: 0x34 */ + __IO uint32_t ICR; /*!< SDMMC interrupt clear register, Address offset: 0x38 */ + __IO uint32_t MASK; /*!< SDMMC mask register, Address offset: 0x3C */ + uint32_t RESERVED0[2]; /*!< Reserved, 0x40-0x44 */ + __I uint32_t FIFOCNT; /*!< SDMMC FIFO counter register, Address offset: 0x48 */ + uint32_t RESERVED1[13]; /*!< Reserved, 0x4C-0x7C */ + __IO uint32_t FIFO; /*!< SDMMC data FIFO register, Address offset: 0x80 */ +} SDMMC_TypeDef; + +/** + * @brief Serial Peripheral Interface + */ + +typedef struct +{ + __IO uint32_t CR1; /*!< SPI control register 1 (not used in I2S mode), Address offset: 0x00 */ + __IO uint32_t CR2; /*!< SPI control register 2, Address offset: 0x04 */ + __IO uint32_t SR; /*!< SPI status register, Address offset: 0x08 */ + __IO uint32_t DR; /*!< SPI data register, Address offset: 0x0C */ + __IO uint32_t CRCPR; /*!< SPI CRC polynomial register (not used in I2S mode), Address offset: 0x10 */ + __IO uint32_t RXCRCR; /*!< SPI RX CRC register (not used in I2S mode), Address offset: 0x14 */ + __IO uint32_t TXCRCR; /*!< SPI TX CRC register (not used in I2S mode), Address offset: 0x18 */ + __IO uint32_t I2SCFGR; /*!< SPI_I2S configuration register, Address offset: 0x1C */ + __IO uint32_t I2SPR; /*!< SPI_I2S prescaler register, Address offset: 0x20 */ +} SPI_TypeDef; + +/** + * @brief QUAD Serial Peripheral Interface + */ + +typedef struct +{ + __IO uint32_t CR; /*!< QUADSPI Control register, Address offset: 0x00 */ + __IO uint32_t DCR; /*!< QUADSPI Device Configuration register, Address offset: 0x04 */ + __IO uint32_t SR; /*!< QUADSPI Status register, Address offset: 0x08 */ + __IO uint32_t FCR; /*!< QUADSPI Flag Clear register, Address offset: 0x0C */ + __IO uint32_t DLR; /*!< QUADSPI Data Length register, Address offset: 0x10 */ + __IO uint32_t CCR; /*!< QUADSPI Communication Configuration register, Address offset: 0x14 */ + __IO uint32_t AR; /*!< QUADSPI Address register, Address offset: 0x18 */ + __IO uint32_t ABR; /*!< QUADSPI Alternate Bytes register, Address offset: 0x1C */ + __IO uint32_t DR; /*!< QUADSPI Data register, Address offset: 0x20 */ + __IO uint32_t PSMKR; /*!< QUADSPI Polling Status Mask register, Address offset: 0x24 */ + __IO uint32_t PSMAR; /*!< QUADSPI Polling Status Match register, Address offset: 0x28 */ + __IO uint32_t PIR; /*!< QUADSPI Polling Interval register, Address offset: 0x2C */ + __IO uint32_t LPTR; /*!< QUADSPI Low Power Timeout register, Address offset: 0x30 */ +} QUADSPI_TypeDef; + +/** + * @brief TIM + */ + +typedef struct +{ + __IO uint32_t CR1; /*!< TIM control register 1, Address offset: 0x00 */ + __IO uint32_t CR2; /*!< TIM control register 2, Address offset: 0x04 */ + __IO uint32_t SMCR; /*!< TIM slave mode control register, Address offset: 0x08 */ + __IO uint32_t DIER; /*!< TIM DMA/interrupt enable register, Address offset: 0x0C */ + __IO uint32_t SR; /*!< TIM status register, Address offset: 0x10 */ + __IO uint32_t EGR; /*!< TIM event generation register, Address offset: 0x14 */ + __IO uint32_t CCMR1; /*!< TIM capture/compare mode register 1, Address offset: 0x18 */ + __IO uint32_t CCMR2; /*!< TIM capture/compare mode register 2, Address offset: 0x1C */ + __IO uint32_t CCER; /*!< TIM capture/compare enable register, Address offset: 0x20 */ + __IO uint32_t CNT; /*!< TIM counter register, Address offset: 0x24 */ + __IO uint32_t PSC; /*!< TIM prescaler, Address offset: 0x28 */ + __IO uint32_t ARR; /*!< TIM auto-reload register, Address offset: 0x2C */ + __IO uint32_t RCR; /*!< TIM repetition counter register, Address offset: 0x30 */ + __IO uint32_t CCR1; /*!< TIM capture/compare register 1, Address offset: 0x34 */ + __IO uint32_t CCR2; /*!< TIM capture/compare register 2, Address offset: 0x38 */ + __IO uint32_t CCR3; /*!< TIM capture/compare register 3, Address offset: 0x3C */ + __IO uint32_t CCR4; /*!< TIM capture/compare register 4, Address offset: 0x40 */ + __IO uint32_t BDTR; /*!< TIM break and dead-time register, Address offset: 0x44 */ + __IO uint32_t DCR; /*!< TIM DMA control register, Address offset: 0x48 */ + __IO uint32_t DMAR; /*!< TIM DMA address for full transfer, Address offset: 0x4C */ + __IO uint32_t OR; /*!< TIM option register, Address offset: 0x50 */ + __IO uint32_t CCMR3; /*!< TIM capture/compare mode register 3, Address offset: 0x54 */ + __IO uint32_t CCR5; /*!< TIM capture/compare mode register5, Address offset: 0x58 */ + __IO uint32_t CCR6; /*!< TIM capture/compare mode register6, Address offset: 0x5C */ + +} TIM_TypeDef; + +/** + * @brief LPTIMIMER + */ +typedef struct +{ + __IO uint32_t ISR; /*!< LPTIM Interrupt and Status register, Address offset: 0x00 */ + __IO uint32_t ICR; /*!< LPTIM Interrupt Clear register, Address offset: 0x04 */ + __IO uint32_t IER; /*!< LPTIM Interrupt Enable register, Address offset: 0x08 */ + __IO uint32_t CFGR; /*!< LPTIM Configuration register, Address offset: 0x0C */ + __IO uint32_t CR; /*!< LPTIM Control register, Address offset: 0x10 */ + __IO uint32_t CMP; /*!< LPTIM Compare register, Address offset: 0x14 */ + __IO uint32_t ARR; /*!< LPTIM Autoreload register, Address offset: 0x18 */ + __IO uint32_t CNT; /*!< LPTIM Counter register, Address offset: 0x1C */ +} LPTIM_TypeDef; + + +/** + * @brief Universal Synchronous Asynchronous Receiver Transmitter + */ + +typedef struct +{ + __IO uint32_t CR1; /*!< USART Control register 1, Address offset: 0x00 */ + __IO uint32_t CR2; /*!< USART Control register 2, Address offset: 0x04 */ + __IO uint32_t CR3; /*!< USART Control register 3, Address offset: 0x08 */ + __IO uint32_t BRR; /*!< USART Baud rate register, Address offset: 0x0C */ + __IO uint32_t GTPR; /*!< USART Guard time and prescaler register, Address offset: 0x10 */ + __IO uint32_t RTOR; /*!< USART Receiver Time Out register, Address offset: 0x14 */ + __IO uint32_t RQR; /*!< USART Request register, Address offset: 0x18 */ + __IO uint32_t ISR; /*!< USART Interrupt and status register, Address offset: 0x1C */ + __IO uint32_t ICR; /*!< USART Interrupt flag Clear register, Address offset: 0x20 */ + __IO uint32_t RDR; /*!< USART Receive Data register, Address offset: 0x24 */ + __IO uint32_t TDR; /*!< USART Transmit Data register, Address offset: 0x28 */ +} USART_TypeDef; + + +/** + * @brief Window WATCHDOG + */ + +typedef struct +{ + __IO uint32_t CR; /*!< WWDG Control register, Address offset: 0x00 */ + __IO uint32_t CFR; /*!< WWDG Configuration register, Address offset: 0x04 */ + __IO uint32_t SR; /*!< WWDG Status register, Address offset: 0x08 */ +} WWDG_TypeDef; + +/** + * @brief Crypto Processor + */ + +typedef struct +{ + __IO uint32_t CR; /*!< CRYP control register, Address offset: 0x00 */ + __IO uint32_t SR; /*!< CRYP status register, Address offset: 0x04 */ + __IO uint32_t DR; /*!< CRYP data input register, Address offset: 0x08 */ + __IO uint32_t DOUT; /*!< CRYP data output register, Address offset: 0x0C */ + __IO uint32_t DMACR; /*!< CRYP DMA control register, Address offset: 0x10 */ + __IO uint32_t IMSCR; /*!< CRYP interrupt mask set/clear register, Address offset: 0x14 */ + __IO uint32_t RISR; /*!< CRYP raw interrupt status register, Address offset: 0x18 */ + __IO uint32_t MISR; /*!< CRYP masked interrupt status register, Address offset: 0x1C */ + __IO uint32_t K0LR; /*!< CRYP key left register 0, Address offset: 0x20 */ + __IO uint32_t K0RR; /*!< CRYP key right register 0, Address offset: 0x24 */ + __IO uint32_t K1LR; /*!< CRYP key left register 1, Address offset: 0x28 */ + __IO uint32_t K1RR; /*!< CRYP key right register 1, Address offset: 0x2C */ + __IO uint32_t K2LR; /*!< CRYP key left register 2, Address offset: 0x30 */ + __IO uint32_t K2RR; /*!< CRYP key right register 2, Address offset: 0x34 */ + __IO uint32_t K3LR; /*!< CRYP key left register 3, Address offset: 0x38 */ + __IO uint32_t K3RR; /*!< CRYP key right register 3, Address offset: 0x3C */ + __IO uint32_t IV0LR; /*!< CRYP initialization vector left-word register 0, Address offset: 0x40 */ + __IO uint32_t IV0RR; /*!< CRYP initialization vector right-word register 0, Address offset: 0x44 */ + __IO uint32_t IV1LR; /*!< CRYP initialization vector left-word register 1, Address offset: 0x48 */ + __IO uint32_t IV1RR; /*!< CRYP initialization vector right-word register 1, Address offset: 0x4C */ + __IO uint32_t CSGCMCCM0R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 0, Address offset: 0x50 */ + __IO uint32_t CSGCMCCM1R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 1, Address offset: 0x54 */ + __IO uint32_t CSGCMCCM2R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 2, Address offset: 0x58 */ + __IO uint32_t CSGCMCCM3R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 3, Address offset: 0x5C */ + __IO uint32_t CSGCMCCM4R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 4, Address offset: 0x60 */ + __IO uint32_t CSGCMCCM5R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 5, Address offset: 0x64 */ + __IO uint32_t CSGCMCCM6R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 6, Address offset: 0x68 */ + __IO uint32_t CSGCMCCM7R; /*!< CRYP GCM/GMAC or CCM/CMAC context swap register 7, Address offset: 0x6C */ + __IO uint32_t CSGCM0R; /*!< CRYP GCM/GMAC context swap register 0, Address offset: 0x70 */ + __IO uint32_t CSGCM1R; /*!< CRYP GCM/GMAC context swap register 1, Address offset: 0x74 */ + __IO uint32_t CSGCM2R; /*!< CRYP GCM/GMAC context swap register 2, Address offset: 0x78 */ + __IO uint32_t CSGCM3R; /*!< CRYP GCM/GMAC context swap register 3, Address offset: 0x7C */ + __IO uint32_t CSGCM4R; /*!< CRYP GCM/GMAC context swap register 4, Address offset: 0x80 */ + __IO uint32_t CSGCM5R; /*!< CRYP GCM/GMAC context swap register 5, Address offset: 0x84 */ + __IO uint32_t CSGCM6R; /*!< CRYP GCM/GMAC context swap register 6, Address offset: 0x88 */ + __IO uint32_t CSGCM7R; /*!< CRYP GCM/GMAC context swap register 7, Address offset: 0x8C */ +} CRYP_TypeDef; + +/** + * @brief HASH + */ + +typedef struct +{ + __IO uint32_t CR; /*!< HASH control register, Address offset: 0x00 */ + __IO uint32_t DIN; /*!< HASH data input register, Address offset: 0x04 */ + __IO uint32_t STR; /*!< HASH start register, Address offset: 0x08 */ + __IO uint32_t HR[5]; /*!< HASH digest registers, Address offset: 0x0C-0x1C */ + __IO uint32_t IMR; /*!< HASH interrupt enable register, Address offset: 0x20 */ + __IO uint32_t SR; /*!< HASH status register, Address offset: 0x24 */ + uint32_t RESERVED[52]; /*!< Reserved, 0x28-0xF4 */ + __IO uint32_t CSR[54]; /*!< HASH context swap registers, Address offset: 0x0F8-0x1CC */ +} HASH_TypeDef; + +/** + * @brief HASH_DIGEST + */ + +typedef struct +{ + __IO uint32_t HR[8]; /*!< HASH digest registers, Address offset: 0x310-0x32C */ +} HASH_DIGEST_TypeDef; + +/** + * @brief RNG + */ + +typedef struct +{ + __IO uint32_t CR; /*!< RNG control register, Address offset: 0x00 */ + __IO uint32_t SR; /*!< RNG status register, Address offset: 0x04 */ + __IO uint32_t DR; /*!< RNG data register, Address offset: 0x08 */ +} RNG_TypeDef; + +/** + * @} + */ + +/** + * @brief USB_OTG_Core_Registers + */ +typedef struct +{ + __IO uint32_t GOTGCTL; /*!< USB_OTG Control and Status Register 000h */ + __IO uint32_t GOTGINT; /*!< USB_OTG Interrupt Register 004h */ + __IO uint32_t GAHBCFG; /*!< Core AHB Configuration Register 008h */ + __IO uint32_t GUSBCFG; /*!< Core USB Configuration Register 00Ch */ + __IO uint32_t GRSTCTL; /*!< Core Reset Register 010h */ + __IO uint32_t GINTSTS; /*!< Core Interrupt Register 014h */ + __IO uint32_t GINTMSK; /*!< Core Interrupt Mask Register 018h */ + __IO uint32_t GRXSTSR; /*!< Receive Sts Q Read Register 01Ch */ + __IO uint32_t GRXSTSP; /*!< Receive Sts Q Read & POP Register 020h */ + __IO uint32_t GRXFSIZ; /*!< Receive FIFO Size Register 024h */ + __IO uint32_t DIEPTXF0_HNPTXFSIZ; /*!< EP0 / Non Periodic Tx FIFO Size Register 028h */ + __IO uint32_t HNPTXSTS; /*!< Non Periodic Tx FIFO/Queue Sts reg 02Ch */ + uint32_t Reserved30[2]; /*!< Reserved 030h */ + __IO uint32_t GCCFG; /*!< General Purpose IO Register 038h */ + __IO uint32_t CID; /*!< User ID Register 03Ch */ + uint32_t Reserved5[3]; /*!< Reserved 040h-048h */ + __IO uint32_t GHWCFG3; /*!< User HW config3 04Ch */ + uint32_t Reserved6; /*!< Reserved 050h */ + __IO uint32_t GLPMCFG; /*!< LPM Register 054h */ + __IO uint32_t GPWRDN; /*!< Power Down Register 058h */ + __IO uint32_t GDFIFOCFG; /*!< DFIFO Software Config Register 05Ch */ + __IO uint32_t GADPCTL; /*!< ADP Timer, Control and Status Register 60Ch */ + uint32_t Reserved43[39]; /*!< Reserved 058h-0FFh */ + __IO uint32_t HPTXFSIZ; /*!< Host Periodic Tx FIFO Size Reg 100h */ + __IO uint32_t DIEPTXF[0x0F]; /*!< dev Periodic Transmit FIFO */ +} USB_OTG_GlobalTypeDef; + + +/** + * @brief USB_OTG_device_Registers + */ +typedef struct +{ + __IO uint32_t DCFG; /*!< dev Configuration Register 800h */ + __IO uint32_t DCTL; /*!< dev Control Register 804h */ + __IO uint32_t DSTS; /*!< dev Status Register (RO) 808h */ + uint32_t Reserved0C; /*!< Reserved 80Ch */ + __IO uint32_t DIEPMSK; /*!< dev IN Endpoint Mask 810h */ + __IO uint32_t DOEPMSK; /*!< dev OUT Endpoint Mask 814h */ + __IO uint32_t DAINT; /*!< dev All Endpoints Itr Reg 818h */ + __IO uint32_t DAINTMSK; /*!< dev All Endpoints Itr Mask 81Ch */ + uint32_t Reserved20; /*!< Reserved 820h */ + uint32_t Reserved9; /*!< Reserved 824h */ + __IO uint32_t DVBUSDIS; /*!< dev VBUS discharge Register 828h */ + __IO uint32_t DVBUSPULSE; /*!< dev VBUS Pulse Register 82Ch */ + __IO uint32_t DTHRCTL; /*!< dev threshold 830h */ + __IO uint32_t DIEPEMPMSK; /*!< dev empty msk 834h */ + __IO uint32_t DEACHINT; /*!< dedicated EP interrupt 838h */ + __IO uint32_t DEACHMSK; /*!< dedicated EP msk 83Ch */ + uint32_t Reserved40; /*!< dedicated EP mask 840h */ + __IO uint32_t DINEP1MSK; /*!< dedicated EP mask 844h */ + uint32_t Reserved44[15]; /*!< Reserved 844-87Ch */ + __IO uint32_t DOUTEP1MSK; /*!< dedicated EP msk 884h */ +} USB_OTG_DeviceTypeDef; + + +/** + * @brief USB_OTG_IN_Endpoint-Specific_Register + */ +typedef struct +{ + __IO uint32_t DIEPCTL; /*!< dev IN Endpoint Control Reg 900h + (ep_num * 20h) + 00h */ + uint32_t Reserved04; /*!< Reserved 900h + (ep_num * 20h) + 04h */ + __IO uint32_t DIEPINT; /*!< dev IN Endpoint Itr Reg 900h + (ep_num * 20h) + 08h */ + uint32_t Reserved0C; /*!< Reserved 900h + (ep_num * 20h) + 0Ch */ + __IO uint32_t DIEPTSIZ; /*!< IN Endpoint Txfer Size 900h + (ep_num * 20h) + 10h */ + __IO uint32_t DIEPDMA; /*!< IN Endpoint DMA Address Reg 900h + (ep_num * 20h) + 14h */ + __IO uint32_t DTXFSTS; /*!< IN Endpoint Tx FIFO Status Reg 900h + (ep_num * 20h) + 18h */ + uint32_t Reserved18; /*!< Reserved 900h+(ep_num*20h)+1Ch-900h+ (ep_num * 20h) + 1Ch */ +} USB_OTG_INEndpointTypeDef; + + +/** + * @brief USB_OTG_OUT_Endpoint-Specific_Registers + */ +typedef struct +{ + __IO uint32_t DOEPCTL; /*!< dev OUT Endpoint Control Reg B00h + (ep_num * 20h) + 00h */ + uint32_t Reserved04; /*!< Reserved B00h + (ep_num * 20h) + 04h */ + __IO uint32_t DOEPINT; /*!< dev OUT Endpoint Itr Reg B00h + (ep_num * 20h) + 08h */ + uint32_t Reserved0C; /*!< Reserved B00h + (ep_num * 20h) + 0Ch */ + __IO uint32_t DOEPTSIZ; /*!< dev OUT Endpoint Txfer Size B00h + (ep_num * 20h) + 10h */ + __IO uint32_t DOEPDMA; /*!< dev OUT Endpoint DMA Address B00h + (ep_num * 20h) + 14h */ + uint32_t Reserved18[2]; /*!< Reserved B00h + (ep_num * 20h) + 18h - B00h + (ep_num * 20h) + 1Ch */ +} USB_OTG_OUTEndpointTypeDef; + + +/** + * @brief USB_OTG_Host_Mode_Register_Structures + */ +typedef struct +{ + __IO uint32_t HCFG; /*!< Host Configuration Register 400h */ + __IO uint32_t HFIR; /*!< Host Frame Interval Register 404h */ + __IO uint32_t HFNUM; /*!< Host Frame Nbr/Frame Remaining 408h */ + uint32_t Reserved40C; /*!< Reserved 40Ch */ + __IO uint32_t HPTXSTS; /*!< Host Periodic Tx FIFO/ Queue Status 410h */ + __IO uint32_t HAINT; /*!< Host All Channels Interrupt Register 414h */ + __IO uint32_t HAINTMSK; /*!< Host All Channels Interrupt Mask 418h */ +} USB_OTG_HostTypeDef; + +/** + * @brief USB_OTG_Host_Channel_Specific_Registers + */ +typedef struct +{ + __IO uint32_t HCCHAR; /*!< Host Channel Characteristics Register 500h */ + __IO uint32_t HCSPLT; /*!< Host Channel Split Control Register 504h */ + __IO uint32_t HCINT; /*!< Host Channel Interrupt Register 508h */ + __IO uint32_t HCINTMSK; /*!< Host Channel Interrupt Mask Register 50Ch */ + __IO uint32_t HCTSIZ; /*!< Host Channel Transfer Size Register 510h */ + __IO uint32_t HCDMA; /*!< Host Channel DMA Address Register 514h */ + uint32_t Reserved[2]; /*!< Reserved */ +} USB_OTG_HostChannelTypeDef; +/** + * @} + */ + + + + +/** @addtogroup Peripheral_memory_map + * @{ + */ +#define RAMITCM_BASE 0x00000000U /*!< Base address of : 16KB RAM reserved for CPU execution/instruction accessible over ITCM */ +#define FLASHITCM_BASE 0x00200000U /*!< Base address of : (up to 1 MB) embedded FLASH memory accessible over ITCM */ +#define FLASHAXI_BASE 0x08000000U /*!< Base address of : (up to 1 MB) embedded FLASH memory accessible over AXI */ +#define RAMDTCM_BASE 0x20000000U /*!< Base address of : 64KB system data RAM accessible over DTCM */ +#define PERIPH_BASE 0x40000000U /*!< Base address of : AHB/ABP Peripherals */ +#define BKPSRAM_BASE 0x40024000U /*!< Base address of : Backup SRAM(4 KB) */ +#define QSPI_BASE 0x90000000U /*!< Base address of : QSPI memories accessible over AXI */ +#define FMC_R_BASE 0xA0000000U /*!< Base address of : FMC Control registers */ +#define QSPI_R_BASE 0xA0001000U /*!< Base address of : QSPI Control registers */ +#define SRAM1_BASE 0x20010000U /*!< Base address of : 240KB RAM1 accessible over AXI/AHB */ +#define SRAM2_BASE 0x2004C000U /*!< Base address of : 16KB RAM2 accessible over AXI/AHB */ +#define FLASH_END 0x080FFFFFU /*!< FLASH end address */ + +/* Legacy define */ +#define FLASH_BASE FLASHAXI_BASE + +/*!< Peripheral memory map */ +#define APB1PERIPH_BASE PERIPH_BASE +#define APB2PERIPH_BASE (PERIPH_BASE + 0x00010000U) +#define AHB1PERIPH_BASE (PERIPH_BASE + 0x00020000U) +#define AHB2PERIPH_BASE (PERIPH_BASE + 0x10000000U) + +/*!< APB1 peripherals */ +#define TIM2_BASE (APB1PERIPH_BASE + 0x0000U) +#define TIM3_BASE (APB1PERIPH_BASE + 0x0400U) +#define TIM4_BASE (APB1PERIPH_BASE + 0x0800U) +#define TIM5_BASE (APB1PERIPH_BASE + 0x0C00U) +#define TIM6_BASE (APB1PERIPH_BASE + 0x1000U) +#define TIM7_BASE (APB1PERIPH_BASE + 0x1400U) +#define TIM12_BASE (APB1PERIPH_BASE + 0x1800U) +#define TIM13_BASE (APB1PERIPH_BASE + 0x1C00U) +#define TIM14_BASE (APB1PERIPH_BASE + 0x2000U) +#define LPTIM1_BASE (APB1PERIPH_BASE + 0x2400U) +#define RTC_BASE (APB1PERIPH_BASE + 0x2800U) +#define WWDG_BASE (APB1PERIPH_BASE + 0x2C00U) +#define IWDG_BASE (APB1PERIPH_BASE + 0x3000U) +#define SPI2_BASE (APB1PERIPH_BASE + 0x3800U) +#define SPI3_BASE (APB1PERIPH_BASE + 0x3C00U) +#define SPDIFRX_BASE (APB1PERIPH_BASE + 0x4000U) +#define USART2_BASE (APB1PERIPH_BASE + 0x4400U) +#define USART3_BASE (APB1PERIPH_BASE + 0x4800U) +#define UART4_BASE (APB1PERIPH_BASE + 0x4C00U) +#define UART5_BASE (APB1PERIPH_BASE + 0x5000U) +#define I2C1_BASE (APB1PERIPH_BASE + 0x5400U) +#define I2C2_BASE (APB1PERIPH_BASE + 0x5800U) +#define I2C3_BASE (APB1PERIPH_BASE + 0x5C00U) +#define I2C4_BASE (APB1PERIPH_BASE + 0x6000U) +#define CAN1_BASE (APB1PERIPH_BASE + 0x6400U) +#define CAN2_BASE (APB1PERIPH_BASE + 0x6800U) +#define CEC_BASE (APB1PERIPH_BASE + 0x6C00U) +#define PWR_BASE (APB1PERIPH_BASE + 0x7000U) +#define DAC_BASE (APB1PERIPH_BASE + 0x7400U) +#define UART7_BASE (APB1PERIPH_BASE + 0x7800U) +#define UART8_BASE (APB1PERIPH_BASE + 0x7C00U) + +/*!< APB2 peripherals */ +#define TIM1_BASE (APB2PERIPH_BASE + 0x0000U) +#define TIM8_BASE (APB2PERIPH_BASE + 0x0400U) +#define USART1_BASE (APB2PERIPH_BASE + 0x1000U) +#define USART6_BASE (APB2PERIPH_BASE + 0x1400U) +#define ADC1_BASE (APB2PERIPH_BASE + 0x2000U) +#define ADC2_BASE (APB2PERIPH_BASE + 0x2100U) +#define ADC3_BASE (APB2PERIPH_BASE + 0x2200U) +#define ADC_BASE (APB2PERIPH_BASE + 0x2300U) +#define SDMMC1_BASE (APB2PERIPH_BASE + 0x2C00U) +#define SPI1_BASE (APB2PERIPH_BASE + 0x3000U) +#define SPI4_BASE (APB2PERIPH_BASE + 0x3400U) +#define SYSCFG_BASE (APB2PERIPH_BASE + 0x3800U) +#define EXTI_BASE (APB2PERIPH_BASE + 0x3C00U) +#define TIM9_BASE (APB2PERIPH_BASE + 0x4000U) +#define TIM10_BASE (APB2PERIPH_BASE + 0x4400U) +#define TIM11_BASE (APB2PERIPH_BASE + 0x4800U) +#define SPI5_BASE (APB2PERIPH_BASE + 0x5000U) +#define SPI6_BASE (APB2PERIPH_BASE + 0x5400U) +#define SAI1_BASE (APB2PERIPH_BASE + 0x5800U) +#define SAI2_BASE (APB2PERIPH_BASE + 0x5C00U) +#define SAI1_Block_A_BASE (SAI1_BASE + 0x004U) +#define SAI1_Block_B_BASE (SAI1_BASE + 0x024U) +#define SAI2_Block_A_BASE (SAI2_BASE + 0x004U) +#define SAI2_Block_B_BASE (SAI2_BASE + 0x024U) +#define LTDC_BASE (APB2PERIPH_BASE + 0x6800U) +#define LTDC_Layer1_BASE (LTDC_BASE + 0x84U) +#define LTDC_Layer2_BASE (LTDC_BASE + 0x104U) +/*!< AHB1 peripherals */ +#define GPIOA_BASE (AHB1PERIPH_BASE + 0x0000U) +#define GPIOB_BASE (AHB1PERIPH_BASE + 0x0400U) +#define GPIOC_BASE (AHB1PERIPH_BASE + 0x0800U) +#define GPIOD_BASE (AHB1PERIPH_BASE + 0x0C00U) +#define GPIOE_BASE (AHB1PERIPH_BASE + 0x1000U) +#define GPIOF_BASE (AHB1PERIPH_BASE + 0x1400U) +#define GPIOG_BASE (AHB1PERIPH_BASE + 0x1800U) +#define GPIOH_BASE (AHB1PERIPH_BASE + 0x1C00U) +#define GPIOI_BASE (AHB1PERIPH_BASE + 0x2000U) +#define GPIOJ_BASE (AHB1PERIPH_BASE + 0x2400U) +#define GPIOK_BASE (AHB1PERIPH_BASE + 0x2800U) +#define CRC_BASE (AHB1PERIPH_BASE + 0x3000U) +#define RCC_BASE (AHB1PERIPH_BASE + 0x3800U) +#define FLASH_R_BASE (AHB1PERIPH_BASE + 0x3C00U) +#define UID_BASE 0x1FF0F420U /*!< Unique device ID register base address */ +#define FLASHSIZE_BASE 0x1FF0F442U /*!< FLASH Size register base address */ +#define PACKAGESIZE_BASE 0x1FFF7BF0U /*!< Package size register base address */ +#define DMA1_BASE (AHB1PERIPH_BASE + 0x6000U) +#define DMA1_Stream0_BASE (DMA1_BASE + 0x010U) +#define DMA1_Stream1_BASE (DMA1_BASE + 0x028U) +#define DMA1_Stream2_BASE (DMA1_BASE + 0x040U) +#define DMA1_Stream3_BASE (DMA1_BASE + 0x058U) +#define DMA1_Stream4_BASE (DMA1_BASE + 0x070U) +#define DMA1_Stream5_BASE (DMA1_BASE + 0x088U) +#define DMA1_Stream6_BASE (DMA1_BASE + 0x0A0U) +#define DMA1_Stream7_BASE (DMA1_BASE + 0x0B8U) +#define DMA2_BASE (AHB1PERIPH_BASE + 0x6400U) +#define DMA2_Stream0_BASE (DMA2_BASE + 0x010U) +#define DMA2_Stream1_BASE (DMA2_BASE + 0x028U) +#define DMA2_Stream2_BASE (DMA2_BASE + 0x040U) +#define DMA2_Stream3_BASE (DMA2_BASE + 0x058U) +#define DMA2_Stream4_BASE (DMA2_BASE + 0x070U) +#define DMA2_Stream5_BASE (DMA2_BASE + 0x088U) +#define DMA2_Stream6_BASE (DMA2_BASE + 0x0A0U) +#define DMA2_Stream7_BASE (DMA2_BASE + 0x0B8U) +#define ETH_BASE (AHB1PERIPH_BASE + 0x8000U) +#define ETH_MAC_BASE (ETH_BASE) +#define ETH_MMC_BASE (ETH_BASE + 0x0100U) +#define ETH_PTP_BASE (ETH_BASE + 0x0700U) +#define ETH_DMA_BASE (ETH_BASE + 0x1000U) +#define DMA2D_BASE (AHB1PERIPH_BASE + 0xB000U) +/*!< AHB2 peripherals */ +#define DCMI_BASE (AHB2PERIPH_BASE + 0x50000U) +#define CRYP_BASE (AHB2PERIPH_BASE + 0x60000U) +#define HASH_BASE (AHB2PERIPH_BASE + 0x60400U) +#define HASH_DIGEST_BASE (AHB2PERIPH_BASE + 0x60710U) +#define RNG_BASE (AHB2PERIPH_BASE + 0x60800U) +/*!< FMC Bankx registers base address */ +#define FMC_Bank1_R_BASE (FMC_R_BASE + 0x0000U) +#define FMC_Bank1E_R_BASE (FMC_R_BASE + 0x0104U) +#define FMC_Bank3_R_BASE (FMC_R_BASE + 0x0080U) +#define FMC_Bank5_6_R_BASE (FMC_R_BASE + 0x0140U) + +/* Debug MCU registers base address */ +#define DBGMCU_BASE 0xE0042000U + +/*!< USB registers base address */ +#define USB_OTG_HS_PERIPH_BASE 0x40040000U +#define USB_OTG_FS_PERIPH_BASE 0x50000000U + +#define USB_OTG_GLOBAL_BASE 0x000U +#define USB_OTG_DEVICE_BASE 0x800U +#define USB_OTG_IN_ENDPOINT_BASE 0x900U +#define USB_OTG_OUT_ENDPOINT_BASE 0xB00U +#define USB_OTG_EP_REG_SIZE 0x20U +#define USB_OTG_HOST_BASE 0x400U +#define USB_OTG_HOST_PORT_BASE 0x440U +#define USB_OTG_HOST_CHANNEL_BASE 0x500U +#define USB_OTG_HOST_CHANNEL_SIZE 0x20U +#define USB_OTG_PCGCCTL_BASE 0xE00U +#define USB_OTG_FIFO_BASE 0x1000U +#define USB_OTG_FIFO_SIZE 0x1000U + +/** + * @} + */ + +/** @addtogroup Peripheral_declaration + * @{ + */ +#define TIM2 ((TIM_TypeDef *) TIM2_BASE) +#define TIM3 ((TIM_TypeDef *) TIM3_BASE) +#define TIM4 ((TIM_TypeDef *) TIM4_BASE) +#define TIM5 ((TIM_TypeDef *) TIM5_BASE) +#define TIM6 ((TIM_TypeDef *) TIM6_BASE) +#define TIM7 ((TIM_TypeDef *) TIM7_BASE) +#define TIM12 ((TIM_TypeDef *) TIM12_BASE) +#define TIM13 ((TIM_TypeDef *) TIM13_BASE) +#define TIM14 ((TIM_TypeDef *) TIM14_BASE) +#define LPTIM1 ((LPTIM_TypeDef *) LPTIM1_BASE) +#define RTC ((RTC_TypeDef *) RTC_BASE) +#define WWDG ((WWDG_TypeDef *) WWDG_BASE) +#define IWDG ((IWDG_TypeDef *) IWDG_BASE) +#define SPI2 ((SPI_TypeDef *) SPI2_BASE) +#define SPI3 ((SPI_TypeDef *) SPI3_BASE) +#define SPDIFRX ((SPDIFRX_TypeDef *) SPDIFRX_BASE) +#define USART2 ((USART_TypeDef *) USART2_BASE) +#define USART3 ((USART_TypeDef *) USART3_BASE) +#define UART4 ((USART_TypeDef *) UART4_BASE) +#define UART5 ((USART_TypeDef *) UART5_BASE) +#define I2C1 ((I2C_TypeDef *) I2C1_BASE) +#define I2C2 ((I2C_TypeDef *) I2C2_BASE) +#define I2C3 ((I2C_TypeDef *) I2C3_BASE) +#define I2C4 ((I2C_TypeDef *) I2C4_BASE) +#define CAN1 ((CAN_TypeDef *) CAN1_BASE) +#define CAN2 ((CAN_TypeDef *) CAN2_BASE) +#define CEC ((CEC_TypeDef *) CEC_BASE) +#define PWR ((PWR_TypeDef *) PWR_BASE) +#define DAC ((DAC_TypeDef *) DAC_BASE) +#define UART7 ((USART_TypeDef *) UART7_BASE) +#define UART8 ((USART_TypeDef *) UART8_BASE) +#define TIM1 ((TIM_TypeDef *) TIM1_BASE) +#define TIM8 ((TIM_TypeDef *) TIM8_BASE) +#define USART1 ((USART_TypeDef *) USART1_BASE) +#define USART6 ((USART_TypeDef *) USART6_BASE) +#define ADC ((ADC_Common_TypeDef *) ADC_BASE) +#define ADC1 ((ADC_TypeDef *) ADC1_BASE) +#define ADC2 ((ADC_TypeDef *) ADC2_BASE) +#define ADC3 ((ADC_TypeDef *) ADC3_BASE) +#define SDMMC1 ((SDMMC_TypeDef *) SDMMC1_BASE) +#define SPI1 ((SPI_TypeDef *) SPI1_BASE) +#define SPI4 ((SPI_TypeDef *) SPI4_BASE) +#define SYSCFG ((SYSCFG_TypeDef *) SYSCFG_BASE) +#define EXTI ((EXTI_TypeDef *) EXTI_BASE) +#define TIM9 ((TIM_TypeDef *) TIM9_BASE) +#define TIM10 ((TIM_TypeDef *) TIM10_BASE) +#define TIM11 ((TIM_TypeDef *) TIM11_BASE) +#define SPI5 ((SPI_TypeDef *) SPI5_BASE) +#define SPI6 ((SPI_TypeDef *) SPI6_BASE) +#define SAI1 ((SAI_TypeDef *) SAI1_BASE) +#define SAI2 ((SAI_TypeDef *) SAI2_BASE) +#define SAI1_Block_A ((SAI_Block_TypeDef *)SAI1_Block_A_BASE) +#define SAI1_Block_B ((SAI_Block_TypeDef *)SAI1_Block_B_BASE) +#define SAI2_Block_A ((SAI_Block_TypeDef *)SAI2_Block_A_BASE) +#define SAI2_Block_B ((SAI_Block_TypeDef *)SAI2_Block_B_BASE) +#define LTDC ((LTDC_TypeDef *)LTDC_BASE) +#define LTDC_Layer1 ((LTDC_Layer_TypeDef *)LTDC_Layer1_BASE) +#define LTDC_Layer2 ((LTDC_Layer_TypeDef *)LTDC_Layer2_BASE) +#define GPIOA ((GPIO_TypeDef *) GPIOA_BASE) +#define GPIOB ((GPIO_TypeDef *) GPIOB_BASE) +#define GPIOC ((GPIO_TypeDef *) GPIOC_BASE) +#define GPIOD ((GPIO_TypeDef *) GPIOD_BASE) +#define GPIOE ((GPIO_TypeDef *) GPIOE_BASE) +#define GPIOF ((GPIO_TypeDef *) GPIOF_BASE) +#define GPIOG ((GPIO_TypeDef *) GPIOG_BASE) +#define GPIOH ((GPIO_TypeDef *) GPIOH_BASE) +#define GPIOI ((GPIO_TypeDef *) GPIOI_BASE) +#define GPIOJ ((GPIO_TypeDef *) GPIOJ_BASE) +#define GPIOK ((GPIO_TypeDef *) GPIOK_BASE) +#define CRC ((CRC_TypeDef *) CRC_BASE) +#define RCC ((RCC_TypeDef *) RCC_BASE) +#define FLASH ((FLASH_TypeDef *) FLASH_R_BASE) +#define DMA1 ((DMA_TypeDef *) DMA1_BASE) +#define DMA1_Stream0 ((DMA_Stream_TypeDef *) DMA1_Stream0_BASE) +#define DMA1_Stream1 ((DMA_Stream_TypeDef *) DMA1_Stream1_BASE) +#define DMA1_Stream2 ((DMA_Stream_TypeDef *) DMA1_Stream2_BASE) +#define DMA1_Stream3 ((DMA_Stream_TypeDef *) DMA1_Stream3_BASE) +#define DMA1_Stream4 ((DMA_Stream_TypeDef *) DMA1_Stream4_BASE) +#define DMA1_Stream5 ((DMA_Stream_TypeDef *) DMA1_Stream5_BASE) +#define DMA1_Stream6 ((DMA_Stream_TypeDef *) DMA1_Stream6_BASE) +#define DMA1_Stream7 ((DMA_Stream_TypeDef *) DMA1_Stream7_BASE) +#define DMA2 ((DMA_TypeDef *) DMA2_BASE) +#define DMA2_Stream0 ((DMA_Stream_TypeDef *) DMA2_Stream0_BASE) +#define DMA2_Stream1 ((DMA_Stream_TypeDef *) DMA2_Stream1_BASE) +#define DMA2_Stream2 ((DMA_Stream_TypeDef *) DMA2_Stream2_BASE) +#define DMA2_Stream3 ((DMA_Stream_TypeDef *) DMA2_Stream3_BASE) +#define DMA2_Stream4 ((DMA_Stream_TypeDef *) DMA2_Stream4_BASE) +#define DMA2_Stream5 ((DMA_Stream_TypeDef *) DMA2_Stream5_BASE) +#define DMA2_Stream6 ((DMA_Stream_TypeDef *) DMA2_Stream6_BASE) +#define DMA2_Stream7 ((DMA_Stream_TypeDef *) DMA2_Stream7_BASE) +#define ETH ((ETH_TypeDef *) ETH_BASE) +#define DMA2D ((DMA2D_TypeDef *)DMA2D_BASE) +#define DCMI ((DCMI_TypeDef *) DCMI_BASE) +#define CRYP ((CRYP_TypeDef *) CRYP_BASE) +#define HASH ((HASH_TypeDef *) HASH_BASE) +#define HASH_DIGEST ((HASH_DIGEST_TypeDef *) HASH_DIGEST_BASE) +#define RNG ((RNG_TypeDef *) RNG_BASE) +#define FMC_Bank1 ((FMC_Bank1_TypeDef *) FMC_Bank1_R_BASE) +#define FMC_Bank1E ((FMC_Bank1E_TypeDef *) FMC_Bank1E_R_BASE) +#define FMC_Bank3 ((FMC_Bank3_TypeDef *) FMC_Bank3_R_BASE) +#define FMC_Bank5_6 ((FMC_Bank5_6_TypeDef *) FMC_Bank5_6_R_BASE) +#define QUADSPI ((QUADSPI_TypeDef *) QSPI_R_BASE) +#define DBGMCU ((DBGMCU_TypeDef *) DBGMCU_BASE) +#define USB_OTG_FS ((USB_OTG_GlobalTypeDef *) USB_OTG_FS_PERIPH_BASE) +#define USB_OTG_HS ((USB_OTG_GlobalTypeDef *) USB_OTG_HS_PERIPH_BASE) + +/** + * @} + */ + +/** @addtogroup Exported_constants + * @{ + */ + + /** @addtogroup Peripheral_Registers_Bits_Definition + * @{ + */ + +/******************************************************************************/ +/* Peripheral Registers_Bits_Definition */ +/******************************************************************************/ + +/******************************************************************************/ +/* */ +/* Analog to Digital Converter */ +/* */ +/******************************************************************************/ +/******************** Bit definition for ADC_SR register ********************/ +#define ADC_SR_AWD 0x00000001U /*!
    © COPYRIGHT(c) 2016 STMicroelectronics
    + * + * Redistribution and use in source and binary forms, with or without modification, + * are permitted provided that the following conditions are met: + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * 2. Redistributions in binary form must reproduce the above copyright notice, + * this list of conditions and the following disclaimer in the documentation + * and/or other materials provided with the distribution. + * 3. Neither the name of STMicroelectronics nor the names of its contributors + * may be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" + * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE + * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE + * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL + * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR + * SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER + * CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, + * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE + * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + ****************************************************************************** + */ + +/** @addtogroup CMSIS + * @{ + */ + +/** @addtogroup stm32f7xx + * @{ + */ + +#ifndef __STM32F7xx_H +#define __STM32F7xx_H + +#ifdef __cplusplus + extern "C" { +#endif /* __cplusplus */ + +/** @addtogroup Library_configuration_section + * @{ + */ + +/** + * @brief STM32 Family + */ +#if !defined (STM32F7) +#define STM32F7 +#endif /* STM32F7 */ + +/* Uncomment the line below according to the target STM32 device used in your + application + */ +#if !defined (STM32F756xx) && !defined (STM32F746xx) && !defined (STM32F745xx) && !defined (STM32F767xx) && \ + !defined (STM32F769xx) && !defined (STM32F777xx) && !defined (STM32F779xx) + #define STM32F756xx /*!< STM32F756VG, STM32F756ZG, STM32F756ZG, STM32F756IG, STM32F756BG, + STM32F756NG Devices */ + /* #define STM32F746xx */ /*!< STM32F746VE, STM32F746VG, STM32F746ZE, STM32F746ZG, STM32F746IE, STM32F746IG, + STM32F746BE, STM32F746BG, STM32F746NE, STM32F746NG Devices */ + /* #define STM32F745xx */ /*!< STM32F745VE, STM32F745VG, STM32F745ZG, STM32F745ZE, STM32F745IE, STM32F745IG Devices */ + /* #define STM32F765xx */ /*!< STM32F765BI, STM32F765BG, STM32F765NI, STM32F765NG, STM32F765II, STM32F765IG, + STM32F765ZI, STM32F765ZG, STM32F765VI, STM32F765VG Devices */ + /* #define STM32F767xx */ /*!< STM32F767BG, STM32F767BI, STM32F767IG, STM32F767II, STM32F767NG, STM32F767NI, + STM32F767VG, STM32F767VI, STM32F767ZG, STM32F767ZI, STM32F768AI Devices */ + /* #define STM32F769xx */ /*!< STM32F769AG, STM32F769AI, STM32F769BG, STM32F769BI, STM32F769IG, STM32F769II, + STM32F769NG, STM32F769NI Devices */ + /* #define STM32F777xx */ /*!< STM32F777VI, STM32F777ZI, STM32F777II, STM32F777BI, STM32F777NI, STM32F778AI Devices */ + /* #define STM32F779xx */ /*!< STM32F779II, STM32F779BI, STM32F779NI, STM32F779AI Devices */ +#endif + +/* Tip: To avoid modifying this file each time you need to switch between these + devices, you can define the device in your toolchain compiler preprocessor. + */ + +#if !defined (USE_HAL_DRIVER) +/** + * @brief Comment the line below if you will not use the peripherals drivers. + In this case, these drivers will not be included and the application code will + be based on direct access to peripherals registers + */ +#define USE_HAL_DRIVER +#endif /* USE_HAL_DRIVER */ + +/** + * @brief CMSIS Device version number V1.1.0 + */ +#define __STM32F7_CMSIS_VERSION_MAIN (0x01) /*!< [31:24] main version */ +#define __STM32F7_CMSIS_VERSION_SUB1 (0x01) /*!< [23:16] sub1 version */ +#define __STM32F7_CMSIS_VERSION_SUB2 (0x00) /*!< [15:8] sub2 version */ +#define __STM32F7_CMSIS_VERSION_RC (0x00) /*!< [7:0] release candidate */ +#define __STM32F7_CMSIS_VERSION ((__STM32F7_CMSIS_VERSION_MAIN << 24)\ + |(__STM32F7_CMSIS_VERSION_SUB1 << 16)\ + |(__STM32F7_CMSIS_VERSION_SUB2 << 8 )\ + |(__STM32F7_CMSIS_VERSION)) +/** + * @} + */ + +/** @addtogroup Device_Included + * @{ + */ +#if defined(STM32F756xx) + #include "stm32f756xx.h" +#elif defined(STM32F746xx) + #include "stm32f746xx.h" +#elif defined(STM32F745xx) + #include "stm32f745xx.h" +#elif defined(STM32F765xx) + #include "stm32f765xx.h" +#elif defined(STM32F767xx) + #include "stm32f767xx.h" +#elif defined(STM32F769xx) + #include "stm32f769xx.h" +#elif defined(STM32F777xx) + #include "stm32f777xx.h" +#elif defined(STM32F779xx) + #include "stm32f779xx.h" +#else + #error "Please select first the target STM32F7xx device used in your application (in stm32f7xx.h file)" +#endif + +/** + * @} + */ + +/** @addtogroup Exported_types + * @{ + */ +typedef enum +{ + RESET = 0, + SET = !RESET +} FlagStatus, ITStatus; + +typedef enum +{ + DISABLE = 0, + ENABLE = !DISABLE +} FunctionalState; +#define IS_FUNCTIONAL_STATE(STATE) (((STATE) == DISABLE) || ((STATE) == ENABLE)) + +typedef enum +{ + ERROR = 0, + SUCCESS = !ERROR +} ErrorStatus; + +/** + * @} + */ + +/** @addtogroup Exported_macro + * @{ + */ +#define SET_BIT(REG, BIT) ((REG) |= (BIT)) + +#define CLEAR_BIT(REG, BIT) ((REG) &= ~(BIT)) + +#define READ_BIT(REG, BIT) ((REG) & (BIT)) + +#define CLEAR_REG(REG) ((REG) = (0x0)) + +#define WRITE_REG(REG, VAL) ((REG) = (VAL)) + +#define READ_REG(REG) ((REG)) + +#define MODIFY_REG(REG, CLEARMASK, SETMASK) WRITE_REG((REG), (((READ_REG(REG)) & (~(CLEARMASK))) | (SETMASK))) + +#define POSITION_VAL(VAL) (__CLZ(__RBIT(VAL))) + +/** + * @} + */ + +#ifdef USE_HAL_DRIVER + #include "stm32f7xx_hal_conf.h" +#endif /* USE_HAL_DRIVER */ + +#ifdef __cplusplus +} +#endif /* __cplusplus */ + +#endif /* __STM32F7xx_H */ + +/** + * @} + */ + + /** + * @} + */ + +/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/ diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/TOOLCHAIN_ARM_MICRO/startup_stm32f746zg.S b/targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/TOOLCHAIN_ARM_MICRO/startup_stm32f746zg.S similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/TOOLCHAIN_ARM_MICRO/startup_stm32f746zg.S rename to targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/TOOLCHAIN_ARM_MICRO/startup_stm32f746zg.S diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/TOOLCHAIN_ARM_MICRO/stm32f746zg.sct b/targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/TOOLCHAIN_ARM_MICRO/stm32f746zg.sct similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/TOOLCHAIN_ARM_MICRO/stm32f746zg.sct rename to targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/TOOLCHAIN_ARM_MICRO/stm32f746zg.sct diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/TOOLCHAIN_ARM_STD/startup_stm32f746zg.S b/targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/TOOLCHAIN_ARM_STD/startup_stm32f746zg.S similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/TOOLCHAIN_ARM_STD/startup_stm32f746zg.S rename to targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/TOOLCHAIN_ARM_STD/startup_stm32f746zg.S diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/TOOLCHAIN_ARM_STD/stm32f746zg.sct b/targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/TOOLCHAIN_ARM_STD/stm32f746zg.sct similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/TOOLCHAIN_ARM_STD/stm32f746zg.sct rename to targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/TOOLCHAIN_ARM_STD/stm32f746zg.sct diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/TOOLCHAIN_ARM_STD/sys.cpp b/targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/TOOLCHAIN_ARM_STD/sys.cpp similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/TOOLCHAIN_ARM_STD/sys.cpp rename to targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/TOOLCHAIN_ARM_STD/sys.cpp diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/TOOLCHAIN_GCC_ARM/STM32F746ZG.ld b/targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/TOOLCHAIN_GCC_ARM/STM32F746ZG.ld similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/TOOLCHAIN_GCC_ARM/STM32F746ZG.ld rename to targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/TOOLCHAIN_GCC_ARM/STM32F746ZG.ld diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/TOOLCHAIN_GCC_ARM/startup_stm32f746xx.S b/targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/TOOLCHAIN_GCC_ARM/startup_stm32f746xx.S similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/TOOLCHAIN_GCC_ARM/startup_stm32f746xx.S rename to targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/TOOLCHAIN_GCC_ARM/startup_stm32f746xx.S diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/TOOLCHAIN_IAR/startup_stm32f746xx.S b/targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/TOOLCHAIN_IAR/startup_stm32f746xx.S similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/TOOLCHAIN_IAR/startup_stm32f746xx.S rename to targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/TOOLCHAIN_IAR/startup_stm32f746xx.S diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/TOOLCHAIN_IAR/stm32f746zg.icf b/targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/TOOLCHAIN_IAR/stm32f746zg.icf similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/TOOLCHAIN_IAR/stm32f746zg.icf rename to targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/TOOLCHAIN_IAR/stm32f746zg.icf diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/cmsis.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/cmsis.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/cmsis.h rename to targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/cmsis.h diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/cmsis_nvic.c b/targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/cmsis_nvic.c similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/cmsis_nvic.c rename to targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/cmsis_nvic.c diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/cmsis_nvic.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/cmsis_nvic.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/cmsis_nvic.h rename to targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/cmsis_nvic.h diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/hal_tick.c b/targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/hal_tick.c similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/hal_tick.c rename to targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/hal_tick.c diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/hal_tick.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/hal_tick.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/hal_tick.h rename to targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/hal_tick.h diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/stm32f7xx_hal_conf.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/stm32f7xx_hal_conf.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/stm32f7xx_hal_conf.h rename to targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/stm32f7xx_hal_conf.h diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/system_stm32f7xx.c b/targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/system_stm32f7xx.c similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/system_stm32f7xx.c rename to targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/system_stm32f7xx.c diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/system_stm32f7xx.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/system_stm32f7xx.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/device/system_stm32f7xx.h rename to targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/device/system_stm32f7xx.h diff --git a/targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/objects.h b/targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/objects.h similarity index 100% rename from targets/TARGET_STM/TARGET_STM32F7/TARGET_NUCLEO_F746ZG/objects.h rename to targets/TARGET_STM/TARGET_STM32F7/TARGET_F746_F756/objects.h diff --git a/targets/TARGET_STM/mbed_rtx.h b/targets/TARGET_STM/mbed_rtx.h index c46f27a052a..d2fef8854e8 100644 --- a/targets/TARGET_STM/mbed_rtx.h +++ b/targets/TARGET_STM/mbed_rtx.h @@ -452,7 +452,7 @@ #define OS_CLOCK 216000000 #endif -#elif defined(TARGET_STM32F746ZG) +#elif (defined(TARGET_STM32F746ZG) || defined(TARGET_STM32F756ZG)) #ifndef INITIAL_SP #define INITIAL_SP (0x20050000UL) diff --git a/targets/targets.json b/targets/targets.json index 7d6ea0c3f84..38be1eaa0ca 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -888,7 +888,7 @@ "NUCLEO_F746ZG": { "inherits": ["Target"], "core": "Cortex-M7F", - "extra_labels": ["STM", "STM32F7", "STM32F746", "STM32F746ZG"], + "extra_labels": ["STM", "STM32F7", "STM32F746", "STM32F746ZG", "F746_F756"], "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "IAR"], "default_toolchain": "ARM", "macros": ["TRANSACTION_QUEUE_SIZE_SPI=2"], @@ -899,6 +899,19 @@ "release_versions": ["2", "5"], "device_name": "STM32F746ZG" }, + "NUCLEO_F756ZG": { + "inherits": ["Target"], + "core": "Cortex-M7F", + "extra_labels": ["STM", "STM32F7", "STM32F756", "STM32F756ZG", "F746_F756"], + "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "IAR"], + "default_toolchain": "ARM", + "supported_form_factors": ["ARDUINO"], + "detect_code": ["0819"], + "device_has": ["ANALOGIN", "ANALOGOUT", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_ASYNCH", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "TRNG"], + "features": ["LWIP"], + "release_versions": ["2", "5"], + "device_name": "STM32F756ZG" + }, "NUCLEO_F767ZI": { "inherits": ["Target"], "core": "Cortex-M7FD", From dbafb03dd2eea628dc41b92b39d6385231bc697d Mon Sep 17 00:00:00 2001 From: Andres AG Date: Thu, 13 Oct 2016 17:33:57 +0100 Subject: [PATCH 85/89] Update to mbed TLS release candidate --- features/mbedtls/VERSION.txt | 2 +- features/mbedtls/inc/mbedtls/cmac.h | 4 - features/mbedtls/inc/mbedtls/config.h | 12 -- features/mbedtls/inc/mbedtls/gcm.h | 4 +- features/mbedtls/inc/mbedtls/ssl.h | 2 + features/mbedtls/inc/mbedtls/ssl_internal.h | 6 + features/mbedtls/inc/mbedtls/x509_csr.h | 2 +- features/mbedtls/src/asn1parse.c | 2 +- features/mbedtls/src/cmac.c | 74 ++++++------ features/mbedtls/src/error.c | 4 + features/mbedtls/src/gcm.c | 3 +- features/mbedtls/src/rsa.c | 18 ++- features/mbedtls/src/sha256.c | 15 ++- features/mbedtls/src/sha512.c | 15 ++- features/mbedtls/src/ssl_cli.c | 18 +++ features/mbedtls/src/ssl_srv.c | 63 ++++++---- features/mbedtls/src/ssl_tls.c | 123 ++++++++++++++++---- features/mbedtls/src/threading.c | 5 +- features/mbedtls/src/version_features.c | 3 - features/mbedtls/src/x509.c | 36 +++++- features/mbedtls/src/x509write_crt.c | 3 + features/mbedtls/src/x509write_csr.c | 3 + 22 files changed, 290 insertions(+), 127 deletions(-) diff --git a/features/mbedtls/VERSION.txt b/features/mbedtls/VERSION.txt index 1dc8d398707..bc9d7e9d2cf 100644 --- a/features/mbedtls/VERSION.txt +++ b/features/mbedtls/VERSION.txt @@ -1 +1 @@ -a592dcc1c6277bb191269e709cdd3d5593e593ed +8e004104020dd4328434e8a207245b0327bbb9b1 diff --git a/features/mbedtls/inc/mbedtls/cmac.h b/features/mbedtls/inc/mbedtls/cmac.h index f64ae69b471..75e0b97c4ad 100644 --- a/features/mbedtls/inc/mbedtls/cmac.h +++ b/features/mbedtls/inc/mbedtls/cmac.h @@ -44,7 +44,6 @@ extern "C" { */ struct mbedtls_cmac_context_t { - /** Internal state of the CMAC algorithm */ unsigned char state[MBEDTLS_CIPHER_BLKSIZE_MAX]; @@ -54,9 +53,6 @@ struct mbedtls_cmac_context_t /** Length of data pending to be processed */ size_t unprocessed_len; - - /** Flag to indicate if the last block needs padding */ - int padding_flag; }; /** diff --git a/features/mbedtls/inc/mbedtls/config.h b/features/mbedtls/inc/mbedtls/config.h index e9b862a2b34..40fcf85b94d 100644 --- a/features/mbedtls/inc/mbedtls/config.h +++ b/features/mbedtls/inc/mbedtls/config.h @@ -955,18 +955,6 @@ */ //#define MBEDTLS_SHA256_SMALLER -/** - * \def MBEDTLS_SSL_AEAD_RANDOM_IV - * - * Generate a random IV rather than using the record sequence number as a - * nonce for ciphersuites using and AEAD algorithm (GCM or CCM). - * - * Using the sequence number is generally recommended. - * - * Uncomment this macro to always use random IVs with AEAD ciphersuites. - */ -//#define MBEDTLS_SSL_AEAD_RANDOM_IV - /** * \def MBEDTLS_SSL_ALL_ALERT_MESSAGES * diff --git a/features/mbedtls/inc/mbedtls/gcm.h b/features/mbedtls/inc/mbedtls/gcm.h index 6743ac9a5f9..1b77aaedd48 100644 --- a/features/mbedtls/inc/mbedtls/gcm.h +++ b/features/mbedtls/inc/mbedtls/gcm.h @@ -190,8 +190,8 @@ int mbedtls_gcm_update( mbedtls_gcm_context *ctx, * 16 bytes. * * \param ctx GCM context - * \param tag buffer for holding the tag (may be NULL if tag_len is 0) - * \param tag_len length of the tag to generate + * \param tag buffer for holding the tag + * \param tag_len length of the tag to generate (must be at least 4) * * \return 0 if successful or MBEDTLS_ERR_GCM_BAD_INPUT */ diff --git a/features/mbedtls/inc/mbedtls/ssl.h b/features/mbedtls/inc/mbedtls/ssl.h index 1c0513da7f6..ba499d2bde6 100644 --- a/features/mbedtls/inc/mbedtls/ssl.h +++ b/features/mbedtls/inc/mbedtls/ssl.h @@ -107,6 +107,8 @@ #define MBEDTLS_ERR_SSL_TIMEOUT -0x6800 /**< The operation timed out. */ #define MBEDTLS_ERR_SSL_CLIENT_RECONNECT -0x6780 /**< The client initiated a reconnect from the same port. */ #define MBEDTLS_ERR_SSL_UNEXPECTED_RECORD -0x6700 /**< Record header looks valid but is not expected. */ +#define MBEDTLS_ERR_SSL_NON_FATAL -0x6680 /**< The alert message received indicates a non-fatal error. */ +#define MBEDTLS_ERR_SSL_INVALID_VERIFY_HASH -0x6600 /**< Couldn't set the hash for verifying CertificateVerify */ /* * Various constants diff --git a/features/mbedtls/inc/mbedtls/ssl_internal.h b/features/mbedtls/inc/mbedtls/ssl_internal.h index d63d7d4e7ec..668c0f567cc 100644 --- a/features/mbedtls/inc/mbedtls/ssl_internal.h +++ b/features/mbedtls/inc/mbedtls/ssl_internal.h @@ -355,6 +355,11 @@ int mbedtls_ssl_send_fatal_handshake_failure( mbedtls_ssl_context *ssl ); void mbedtls_ssl_reset_checksum( mbedtls_ssl_context *ssl ); int mbedtls_ssl_derive_keys( mbedtls_ssl_context *ssl ); +int mbedtls_ssl_read_record_layer( mbedtls_ssl_context *ssl ); +int mbedtls_ssl_handle_message_type( mbedtls_ssl_context *ssl ); +int mbedtls_ssl_prepare_handshake_record( mbedtls_ssl_context *ssl ); +void mbedtls_ssl_update_handshake_status( mbedtls_ssl_context *ssl ); + int mbedtls_ssl_read_record( mbedtls_ssl_context *ssl ); int mbedtls_ssl_fetch_input( mbedtls_ssl_context *ssl, size_t nb_want ); @@ -384,6 +389,7 @@ mbedtls_pk_type_t mbedtls_ssl_pk_alg_from_sig( unsigned char sig ); mbedtls_md_type_t mbedtls_ssl_md_alg_from_hash( unsigned char hash ); unsigned char mbedtls_ssl_hash_from_md_alg( int md ); +int mbedtls_ssl_set_calc_verify_md( mbedtls_ssl_context *ssl, int md ); #if defined(MBEDTLS_ECP_C) int mbedtls_ssl_check_curve( const mbedtls_ssl_context *ssl, mbedtls_ecp_group_id grp_id ); diff --git a/features/mbedtls/inc/mbedtls/x509_csr.h b/features/mbedtls/inc/mbedtls/x509_csr.h index 7a9c2e0550e..fe9843cb545 100644 --- a/features/mbedtls/inc/mbedtls/x509_csr.h +++ b/features/mbedtls/inc/mbedtls/x509_csr.h @@ -282,7 +282,7 @@ int mbedtls_x509write_csr_der( mbedtls_x509write_csr *ctx, unsigned char *buf, s * * \note f_rng may be NULL if RSA is used for signature and the * signature is made offline (otherwise f_rng is desirable - * for couermeasures against timing attacks). + * for countermeasures against timing attacks). * ECDSA signatures always require a non-NULL f_rng. */ int mbedtls_x509write_csr_pem( mbedtls_x509write_csr *ctx, unsigned char *buf, size_t size, diff --git a/features/mbedtls/src/asn1parse.c b/features/mbedtls/src/asn1parse.c index ffa2f5299a4..4dd65c03c02 100644 --- a/features/mbedtls/src/asn1parse.c +++ b/features/mbedtls/src/asn1parse.c @@ -153,7 +153,7 @@ int mbedtls_asn1_get_int( unsigned char **p, if( ( ret = mbedtls_asn1_get_tag( p, end, &len, MBEDTLS_ASN1_INTEGER ) ) != 0 ) return( ret ); - if( len > sizeof( int ) || ( **p & 0x80 ) != 0 ) + if( len == 0 || len > sizeof( int ) || ( **p & 0x80 ) != 0 ) return( MBEDTLS_ERR_ASN1_INVALID_LENGTH ); *val = 0; diff --git a/features/mbedtls/src/cmac.c b/features/mbedtls/src/cmac.c index 03d939278a2..ee2fe056ce6 100644 --- a/features/mbedtls/src/cmac.c +++ b/features/mbedtls/src/cmac.c @@ -235,7 +235,6 @@ int mbedtls_cipher_cmac_starts( mbedtls_cipher_context_t *ctx, ctx->cmac_ctx = cmac_ctx; mbedtls_zeroize( cmac_ctx->state, sizeof( cmac_ctx->state ) ); - cmac_ctx->padding_flag = 1; return 0; } @@ -256,8 +255,8 @@ int mbedtls_cipher_cmac_update( mbedtls_cipher_context_t *ctx, block_size = ctx->cipher_info->block_size; state = ctx->cmac_ctx->state; - /* Is their data still to process from the last call, that's equal to - * or greater than a block? */ + /* Is there data still to process from the last call, that's greater in + * size than a block? */ if( cmac_ctx->unprocessed_len > 0 && ilen > block_size - cmac_ctx->unprocessed_len ) { @@ -273,9 +272,8 @@ int mbedtls_cipher_cmac_update( mbedtls_cipher_context_t *ctx, goto exit; } - ilen -= block_size; - input += cmac_ctx->unprocessed_len; - + input += block_size - cmac_ctx->unprocessed_len; + ilen -= block_size - cmac_ctx->unprocessed_len; cmac_ctx->unprocessed_len = 0; } @@ -293,20 +291,15 @@ int mbedtls_cipher_cmac_update( mbedtls_cipher_context_t *ctx, ilen -= block_size; input += block_size; - - cmac_ctx->padding_flag = 0; } /* If there is data left over that wasn't aligned to a block */ if( ilen > 0 ) { - memcpy( &cmac_ctx->unprocessed_block, input, ilen ); - cmac_ctx->unprocessed_len = ilen; - - if( ilen % block_size > 0 ) - cmac_ctx->padding_flag = 1; - else - cmac_ctx->padding_flag = 0; + memcpy( &cmac_ctx->unprocessed_block[cmac_ctx->unprocessed_len], + input, + ilen ); + cmac_ctx->unprocessed_len += ilen; } exit: @@ -339,7 +332,7 @@ int mbedtls_cipher_cmac_finish( mbedtls_cipher_context_t *ctx, last_block = cmac_ctx->unprocessed_block; /* Calculate last block */ - if( cmac_ctx->padding_flag ) + if( cmac_ctx->unprocessed_len < block_size ) { cmac_pad( M_last, block_size, last_block, cmac_ctx->unprocessed_len ); cmac_xor_block( M_last, M_last, K2, block_size ); @@ -366,7 +359,6 @@ int mbedtls_cipher_cmac_finish( mbedtls_cipher_context_t *ctx, mbedtls_zeroize( K1, sizeof( K1 ) ); mbedtls_zeroize( K2, sizeof( K2 ) ); - cmac_ctx->padding_flag = 1; cmac_ctx->unprocessed_len = 0; mbedtls_zeroize( cmac_ctx->unprocessed_block, sizeof( cmac_ctx->unprocessed_block ) ); @@ -390,7 +382,6 @@ int mbedtls_cipher_cmac_reset( mbedtls_cipher_context_t *ctx ) sizeof( cmac_ctx->unprocessed_block ) ); mbedtls_zeroize( cmac_ctx->state, sizeof( cmac_ctx->state ) ); - cmac_ctx->padding_flag = 1; return( 0 ); } @@ -746,19 +737,19 @@ static int cmac_test_subkeys( int verbose, return( MBEDTLS_ERR_CIPHER_FEATURE_UNAVAILABLE ); } - mbedtls_cipher_init( &ctx ); - for( i = 0; i < num_tests; i++ ) { if( verbose != 0 ) mbedtls_printf( " %s CMAC subkey #%u: ", testname, i + 1 ); + mbedtls_cipher_init( &ctx ); + if( ( ret = mbedtls_cipher_setup( &ctx, cipher_info ) ) != 0 ) { if( verbose != 0 ) mbedtls_printf( "test execution failed\n" ); - goto exit; + goto cleanup; } if( ( ret = mbedtls_cipher_setkey( &ctx, key, keybits, @@ -767,7 +758,7 @@ static int cmac_test_subkeys( int verbose, if( verbose != 0 ) mbedtls_printf( "test execution failed\n" ); - goto exit; + goto cleanup; } ret = cmac_generate_subkeys( &ctx, K1, K2 ); @@ -775,24 +766,31 @@ static int cmac_test_subkeys( int verbose, { if( verbose != 0 ) mbedtls_printf( "failed\n" ); - goto exit; + + goto cleanup; } - if( ( ret = memcmp( K1, subkeys, block_size ) != 0 ) || - ( ret = memcmp( K2, &subkeys[block_size], block_size ) != 0 ) ) + if( ( ret = memcmp( K1, subkeys, block_size ) ) != 0 || + ( ret = memcmp( K2, &subkeys[block_size], block_size ) ) != 0 ) { if( verbose != 0 ) mbedtls_printf( "failed\n" ); - goto exit; + + goto cleanup; } if( verbose != 0 ) mbedtls_printf( "passed\n" ); + + mbedtls_cipher_free( &ctx ); } -exit: + goto exit; + +cleanup: mbedtls_cipher_free( &ctx ); +exit: return( ret ); } @@ -889,7 +887,7 @@ int mbedtls_cmac_self_test( int verbose ) (const unsigned char*)aes_128_subkeys, MBEDTLS_CIPHER_AES_128_ECB, MBEDTLS_AES_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) != 0 ) ) + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { return( ret ); } @@ -903,7 +901,7 @@ int mbedtls_cmac_self_test( int verbose ) (const unsigned char*)aes_128_expected_result, MBEDTLS_CIPHER_AES_128_ECB, MBEDTLS_AES_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) != 0 ) ) + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { return( ret ); } @@ -916,7 +914,7 @@ int mbedtls_cmac_self_test( int verbose ) (const unsigned char*)aes_192_subkeys, MBEDTLS_CIPHER_AES_192_ECB, MBEDTLS_AES_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) != 0 ) ) + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { return( ret ); } @@ -930,7 +928,7 @@ int mbedtls_cmac_self_test( int verbose ) (const unsigned char*)aes_192_expected_result, MBEDTLS_CIPHER_AES_192_ECB, MBEDTLS_AES_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) != 0 ) ) + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { return( ret ); } @@ -943,7 +941,7 @@ int mbedtls_cmac_self_test( int verbose ) (const unsigned char*)aes_256_subkeys, MBEDTLS_CIPHER_AES_256_ECB, MBEDTLS_AES_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) != 0 ) ) + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { return( ret ); } @@ -957,7 +955,7 @@ int mbedtls_cmac_self_test( int verbose ) (const unsigned char*)aes_256_expected_result, MBEDTLS_CIPHER_AES_256_ECB, MBEDTLS_AES_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) != 0 ) ) + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { return( ret ); } @@ -972,7 +970,7 @@ int mbedtls_cmac_self_test( int verbose ) (const unsigned char*)des3_2key_subkeys, MBEDTLS_CIPHER_DES_EDE3_ECB, MBEDTLS_DES3_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) != 0 ) ) + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { return( ret ); } @@ -986,7 +984,7 @@ int mbedtls_cmac_self_test( int verbose ) (const unsigned char*)des3_2key_expected_result, MBEDTLS_CIPHER_DES_EDE3_ECB, MBEDTLS_DES3_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) != 0 ) ) + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { return( ret ); } @@ -999,7 +997,7 @@ int mbedtls_cmac_self_test( int verbose ) (const unsigned char*)des3_3key_subkeys, MBEDTLS_CIPHER_DES_EDE3_ECB, MBEDTLS_DES3_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) != 0 ) ) + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { return( ret ); } @@ -1013,14 +1011,14 @@ int mbedtls_cmac_self_test( int verbose ) (const unsigned char*)des3_3key_expected_result, MBEDTLS_CIPHER_DES_EDE3_ECB, MBEDTLS_DES3_BLOCK_SIZE, - NB_CMAC_TESTS_PER_KEY ) != 0 ) ) + NB_CMAC_TESTS_PER_KEY ) ) != 0 ) { return( ret ); } #endif /* MBEDTLS_DES_C */ #if defined(MBEDTLS_AES_C) - if( ( ret = test_aes128_cmac_prf( verbose ) != 0 ) ) + if( ( ret = test_aes128_cmac_prf( verbose ) ) != 0 ) return( ret ); #endif /* MBEDTLS_AES_C */ diff --git a/features/mbedtls/src/error.c b/features/mbedtls/src/error.c index 71d4faa7080..dd2db0c45c0 100644 --- a/features/mbedtls/src/error.c +++ b/features/mbedtls/src/error.c @@ -435,6 +435,10 @@ void mbedtls_strerror( int ret, char *buf, size_t buflen ) mbedtls_snprintf( buf, buflen, "SSL - The client initiated a reconnect from the same port" ); if( use_ret == -(MBEDTLS_ERR_SSL_UNEXPECTED_RECORD) ) mbedtls_snprintf( buf, buflen, "SSL - Record header looks valid but is not expected" ); + if( use_ret == -(MBEDTLS_ERR_SSL_NON_FATAL) ) + mbedtls_snprintf( buf, buflen, "SSL - The alert message received indicates a non-fatal error" ); + if( use_ret == -(MBEDTLS_ERR_SSL_INVALID_VERIFY_HASH) ) + mbedtls_snprintf( buf, buflen, "SSL - Couldn't set the hash for verifying CertificateVerify" ); #endif /* MBEDTLS_SSL_TLS_C */ #if defined(MBEDTLS_X509_USE_C) || defined(MBEDTLS_X509_CREATE_C) diff --git a/features/mbedtls/src/gcm.c b/features/mbedtls/src/gcm.c index aaacf97d612..f1210c52c39 100644 --- a/features/mbedtls/src/gcm.c +++ b/features/mbedtls/src/gcm.c @@ -415,8 +415,7 @@ int mbedtls_gcm_finish( mbedtls_gcm_context *ctx, if( tag_len > 16 || tag_len < 4 ) return( MBEDTLS_ERR_GCM_BAD_INPUT ); - if( tag_len != 0 ) - memcpy( tag, ctx->base_ectr, tag_len ); + memcpy( tag, ctx->base_ectr, tag_len ); if( orig_len || orig_add_len ) { diff --git a/features/mbedtls/src/rsa.c b/features/mbedtls/src/rsa.c index 7a33689b2e3..40ef2a9480f 100644 --- a/features/mbedtls/src/rsa.c +++ b/features/mbedtls/src/rsa.c @@ -102,7 +102,10 @@ int mbedtls_rsa_gen_key( mbedtls_rsa_context *ctx, if( f_rng == NULL || nbits < 128 || exponent < 3 ) return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); - mbedtls_mpi_init( &P1 ); mbedtls_mpi_init( &Q1 ); + if( nbits % 2 ) + return( MBEDTLS_ERR_RSA_BAD_INPUT_DATA ); + + mbedtls_mpi_init( &P1 ); mbedtls_mpi_init( &Q1 ); mbedtls_mpi_init( &H ); mbedtls_mpi_init( &G ); /* @@ -116,16 +119,8 @@ int mbedtls_rsa_gen_key( mbedtls_rsa_context *ctx, MBEDTLS_MPI_CHK( mbedtls_mpi_gen_prime( &ctx->P, nbits >> 1, 0, f_rng, p_rng ) ); - if( nbits % 2 ) - { - MBEDTLS_MPI_CHK( mbedtls_mpi_gen_prime( &ctx->Q, ( nbits >> 1 ) + 1, 0, + MBEDTLS_MPI_CHK( mbedtls_mpi_gen_prime( &ctx->Q, nbits >> 1, 0, f_rng, p_rng ) ); - } - else - { - MBEDTLS_MPI_CHK( mbedtls_mpi_gen_prime( &ctx->Q, nbits >> 1, 0, - f_rng, p_rng ) ); - } if( mbedtls_mpi_cmp_mpi( &ctx->P, &ctx->Q ) == 0 ) continue; @@ -134,6 +129,9 @@ int mbedtls_rsa_gen_key( mbedtls_rsa_context *ctx, if( mbedtls_mpi_bitlen( &ctx->N ) != nbits ) continue; + if( mbedtls_mpi_cmp_mpi( &ctx->P, &ctx->Q ) < 0 ) + mbedtls_mpi_swap( &ctx->P, &ctx->Q ); + MBEDTLS_MPI_CHK( mbedtls_mpi_sub_int( &P1, &ctx->P, 1 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_sub_int( &Q1, &ctx->Q, 1 ) ); MBEDTLS_MPI_CHK( mbedtls_mpi_mul_mpi( &H, &P1, &Q1 ) ); diff --git a/features/mbedtls/src/sha256.c b/features/mbedtls/src/sha256.c index 4e82c0b7931..ad25d38333f 100644 --- a/features/mbedtls/src/sha256.c +++ b/features/mbedtls/src/sha256.c @@ -41,7 +41,10 @@ #include "mbedtls/platform.h" #else #include +#include #define mbedtls_printf printf +#define mbedtls_calloc calloc +#define mbedtls_free free #endif /* MBEDTLS_PLATFORM_C */ #endif /* MBEDTLS_SELF_TEST */ @@ -389,10 +392,19 @@ static const unsigned char sha256_test_sum[6][32] = int mbedtls_sha256_self_test( int verbose ) { int i, j, k, buflen, ret = 0; - unsigned char buf[1024]; + unsigned char *buf; unsigned char sha256sum[32]; mbedtls_sha256_context ctx; + buf = mbedtls_calloc( 1024, sizeof(unsigned char) ); + if( NULL == buf ) + { + if( verbose != 0 ) + mbedtls_printf( "Buffer allocation failed\n" ); + + return( 1 ); + } + mbedtls_sha256_init( &ctx ); for( i = 0; i < 6; i++ ) @@ -436,6 +448,7 @@ int mbedtls_sha256_self_test( int verbose ) exit: mbedtls_sha256_free( &ctx ); + mbedtls_free( buf ); return( ret ); } diff --git a/features/mbedtls/src/sha512.c b/features/mbedtls/src/sha512.c index 0f9e1e5352f..724522ac68f 100644 --- a/features/mbedtls/src/sha512.c +++ b/features/mbedtls/src/sha512.c @@ -47,7 +47,10 @@ #include "mbedtls/platform.h" #else #include +#include #define mbedtls_printf printf +#define mbedtls_calloc calloc +#define mbedtls_free free #endif /* MBEDTLS_PLATFORM_C */ #endif /* MBEDTLS_SELF_TEST */ @@ -445,10 +448,19 @@ static const unsigned char sha512_test_sum[6][64] = int mbedtls_sha512_self_test( int verbose ) { int i, j, k, buflen, ret = 0; - unsigned char buf[1024]; + unsigned char *buf; unsigned char sha512sum[64]; mbedtls_sha512_context ctx; + buf = mbedtls_calloc( 1024, sizeof(unsigned char) ); + if( NULL == buf ) + { + if( verbose != 0 ) + mbedtls_printf( "Buffer allocation failed\n" ); + + return( 1 ); + } + mbedtls_sha512_init( &ctx ); for( i = 0; i < 6; i++ ) @@ -492,6 +504,7 @@ int mbedtls_sha512_self_test( int verbose ) exit: mbedtls_sha512_free( &ctx ); + mbedtls_free( buf ); return( ret ); } diff --git a/features/mbedtls/src/ssl_cli.c b/features/mbedtls/src/ssl_cli.c index 29a39435848..223823b3cd6 100644 --- a/features/mbedtls/src/ssl_cli.c +++ b/features/mbedtls/src/ssl_cli.c @@ -1355,6 +1355,15 @@ static int ssl_parse_hello_verify_request( mbedtls_ssl_context *ssl ) cookie_len = *p++; MBEDTLS_SSL_DEBUG_BUF( 3, "cookie", p, cookie_len ); + if( ( ssl->in_msg + ssl->in_msglen ) - p < cookie_len ) + { + MBEDTLS_SSL_DEBUG_MSG( 1, + ( "cookie length does not match incoming message size" ) ); + mbedtls_ssl_send_alert_message( ssl, MBEDTLS_SSL_ALERT_LEVEL_FATAL, + MBEDTLS_SSL_ALERT_MSG_DECODE_ERROR ); + return( MBEDTLS_ERR_SSL_BAD_HS_SERVER_HELLO ); + } + mbedtls_free( ssl->handshake->verify_cookie ); ssl->handshake->verify_cookie = mbedtls_calloc( 1, cookie_len ); @@ -2630,6 +2639,15 @@ static int ssl_parse_certificate_request( mbedtls_ssl_context *ssl ) { size_t sig_alg_len = ( ( buf[mbedtls_ssl_hs_hdr_len( ssl ) + 1 + n] << 8 ) | ( buf[mbedtls_ssl_hs_hdr_len( ssl ) + 2 + n] ) ); +#if defined(MBEDTLS_DEBUG_C) + unsigned char* sig_alg = buf + mbedtls_ssl_hs_hdr_len( ssl ) + 3 + n; + size_t i; + + for( i = 0; i < sig_alg_len; i += 2 ) + { + MBEDTLS_SSL_DEBUG_MSG( 3, ( "Supported Signature Algorithm found: %d,%d", sig_alg[i], sig_alg[i + 1] ) ); + } +#endif n += 2 + sig_alg_len; diff --git a/features/mbedtls/src/ssl_srv.c b/features/mbedtls/src/ssl_srv.c index 4b0f9971430..fc0d2d7b427 100644 --- a/features/mbedtls/src/ssl_srv.c +++ b/features/mbedtls/src/ssl_srv.c @@ -1043,7 +1043,6 @@ static int ssl_parse_client_hello_v2( mbedtls_ssl_context *ssl ) ssl->session_negotiate->ciphersuite = ciphersuites[i]; ssl->transform_negotiate->ciphersuite_info = ciphersuite_info; - mbedtls_ssl_optimize_checksum( ssl, ssl->transform_negotiate->ciphersuite_info ); /* * SSLv2 Client Hello relevant renegotiation security checks @@ -1840,7 +1839,6 @@ static int ssl_parse_client_hello( mbedtls_ssl_context *ssl ) ssl->session_negotiate->ciphersuite = ciphersuites[i]; ssl->transform_negotiate->ciphersuite_info = ciphersuite_info; - mbedtls_ssl_optimize_checksum( ssl, ssl->transform_negotiate->ciphersuite_info ); ssl->state++; @@ -2556,29 +2554,27 @@ static int ssl_write_certificate_request( mbedtls_ssl_context *ssl ) */ if( ssl->minor_ver == MBEDTLS_SSL_MINOR_VERSION_3 ) { - /* - * Only use current running hash algorithm that is already required - * for requested ciphersuite. - */ - ssl->handshake->verify_sig_alg = MBEDTLS_SSL_HASH_SHA256; - - if( ssl->transform_negotiate->ciphersuite_info->mac == - MBEDTLS_MD_SHA384 ) - { - ssl->handshake->verify_sig_alg = MBEDTLS_SSL_HASH_SHA384; - } + const int *cur; /* * Supported signature algorithms */ + for( cur = ssl->conf->sig_hashes; *cur != MBEDTLS_MD_NONE; cur++ ) + { + unsigned char hash = mbedtls_ssl_hash_from_md_alg( *cur ); + + if( MBEDTLS_SSL_HASH_NONE == hash || mbedtls_ssl_set_calc_verify_md( ssl, hash ) ) + continue; + #if defined(MBEDTLS_RSA_C) - p[2 + sa_len++] = ssl->handshake->verify_sig_alg; - p[2 + sa_len++] = MBEDTLS_SSL_SIG_RSA; + p[2 + sa_len++] = hash; + p[2 + sa_len++] = MBEDTLS_SSL_SIG_RSA; #endif #if defined(MBEDTLS_ECDSA_C) - p[2 + sa_len++] = ssl->handshake->verify_sig_alg; - p[2 + sa_len++] = MBEDTLS_SSL_SIG_ECDSA; + p[2 + sa_len++] = hash; + p[2 + sa_len++] = MBEDTLS_SSL_SIG_ECDSA; #endif + } p[0] = (unsigned char)( sa_len >> 8 ); p[1] = (unsigned char)( sa_len ); @@ -3581,17 +3577,28 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl ) return( 0 ); } - /* Needs to be done before read_record() to exclude current message */ - ssl->handshake->calc_verify( ssl, hash ); + /* Read the message without adding it to the checksum */ + do { - if( ( ret = mbedtls_ssl_read_record( ssl ) ) != 0 ) + if( ( ret = mbedtls_ssl_read_record_layer( ssl ) ) != 0 ) + { + MBEDTLS_SSL_DEBUG_RET( 1, ( "mbedtls_ssl_read_record_layer" ), ret ); + return( ret ); + } + + ret = mbedtls_ssl_handle_message_type( ssl ); + + } while( MBEDTLS_ERR_SSL_NON_FATAL == ret ); + + if( 0 != ret ) { - MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_read_record", ret ); + MBEDTLS_SSL_DEBUG_RET( 1, ( "mbedtls_ssl_handle_message_type" ), ret ); return( ret ); } ssl->state++; + /* Process the message contents */ if( ssl->in_msgtype != MBEDTLS_SSL_MSG_HANDSHAKE || ssl->in_msg[0] != MBEDTLS_SSL_HS_CERTIFICATE_VERIFY ) { @@ -3638,14 +3645,19 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl ) /* * Hash */ - if( ssl->in_msg[i] != ssl->handshake->verify_sig_alg ) + md_alg = mbedtls_ssl_md_alg_from_hash( ssl->in_msg[i] ); + + if( md_alg == MBEDTLS_MD_NONE || mbedtls_ssl_set_calc_verify_md( ssl, ssl->in_msg[i] ) ) { MBEDTLS_SSL_DEBUG_MSG( 1, ( "peer not adhering to requested sig_alg" " for verify message" ) ); return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); } - md_alg = mbedtls_ssl_md_alg_from_hash( ssl->handshake->verify_sig_alg ); +#if !defined(MBEDTLS_MD_SHA1) + if( MBEDTLS_MD_SHA1 == md_alg ) + hash_start += 16; +#endif /* Info from md_alg will be used instead */ hashlen = 0; @@ -3696,6 +3708,9 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl ) return( MBEDTLS_ERR_SSL_BAD_HS_CERTIFICATE_VERIFY ); } + /* Calculate hash and verify signature */ + ssl->handshake->calc_verify( ssl, hash ); + if( ( ret = mbedtls_pk_verify( &ssl->session_negotiate->peer_cert->pk, md_alg, hash_start, hashlen, ssl->in_msg + i, sig_len ) ) != 0 ) @@ -3704,6 +3719,8 @@ static int ssl_parse_certificate_verify( mbedtls_ssl_context *ssl ) return( ret ); } + mbedtls_ssl_update_handshake_status( ssl ); + MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= parse certificate verify" ) ); return( ret ); diff --git a/features/mbedtls/src/ssl_tls.c b/features/mbedtls/src/ssl_tls.c index 505bb6cb3a5..84a04ae53f3 100644 --- a/features/mbedtls/src/ssl_tls.c +++ b/features/mbedtls/src/ssl_tls.c @@ -49,8 +49,7 @@ #include -#if defined(MBEDTLS_X509_CRT_PARSE_C) && \ - defined(MBEDTLS_X509_CHECK_EXTENDED_KEY_USAGE) +#if defined(MBEDTLS_X509_CRT_PARSE_C) #include "mbedtls/oid.h" #endif @@ -1374,17 +1373,6 @@ static int ssl_encrypt_buf( mbedtls_ssl_context *ssl ) /* * Generate IV */ -#if defined(MBEDTLS_SSL_AEAD_RANDOM_IV) - ret = ssl->conf->f_rng( ssl->conf->p_rng, - ssl->transform_out->iv_enc + ssl->transform_out->fixed_ivlen, - ssl->transform_out->ivlen - ssl->transform_out->fixed_ivlen ); - if( ret != 0 ) - return( ret ); - - memcpy( ssl->out_iv, - ssl->transform_out->iv_enc + ssl->transform_out->fixed_ivlen, - ssl->transform_out->ivlen - ssl->transform_out->fixed_ivlen ); -#else if( ssl->transform_out->ivlen - ssl->transform_out->fixed_ivlen != 8 ) { /* Reminder if we ever add an AEAD mode with a different size */ @@ -1395,7 +1383,6 @@ static int ssl_encrypt_buf( mbedtls_ssl_context *ssl ) memcpy( ssl->transform_out->iv_enc + ssl->transform_out->fixed_ivlen, ssl->out_ctr, 8 ); memcpy( ssl->out_iv, ssl->out_ctr, 8 ); -#endif MBEDTLS_SSL_DEBUG_BUF( 4, "IV used", ssl->out_iv, ssl->transform_out->ivlen - ssl->transform_out->fixed_ivlen ); @@ -3083,7 +3070,7 @@ static int ssl_reassemble_dtls_handshake( mbedtls_ssl_context *ssl ) } #endif /* MBEDTLS_SSL_PROTO_DTLS */ -static int ssl_prepare_handshake_record( mbedtls_ssl_context *ssl ) +int mbedtls_ssl_prepare_handshake_record( mbedtls_ssl_context *ssl ) { if( ssl->in_msglen < mbedtls_ssl_hs_hdr_len( ssl ) ) { @@ -3165,6 +3152,12 @@ static int ssl_prepare_handshake_record( mbedtls_ssl_context *ssl ) return( MBEDTLS_ERR_SSL_FEATURE_UNAVAILABLE ); } + return( 0 ); +} + +void mbedtls_ssl_update_handshake_status( mbedtls_ssl_context *ssl ) +{ + if( ssl->state != MBEDTLS_SSL_HANDSHAKE_OVER && ssl->handshake != NULL ) { @@ -3179,8 +3172,6 @@ static int ssl_prepare_handshake_record( mbedtls_ssl_context *ssl ) ssl->handshake->in_msg_seq++; } #endif - - return( 0 ); } /* @@ -3736,6 +3727,38 @@ int mbedtls_ssl_read_record( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_MSG( 2, ( "=> read record" ) ); + do { + + if( ( ret = mbedtls_ssl_read_record_layer( ssl ) ) != 0 ) + { + MBEDTLS_SSL_DEBUG_RET( 1, ( "mbedtls_ssl_read_record_layer" ), ret ); + return( ret ); + } + + ret = mbedtls_ssl_handle_message_type( ssl ); + + } while( MBEDTLS_ERR_SSL_NON_FATAL == ret ); + + if( 0 != ret ) + { + MBEDTLS_SSL_DEBUG_RET( 1, ( "mbedtls_ssl_handle_message_type" ), ret ); + return( ret ); + } + + if( ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE ) + { + mbedtls_ssl_update_handshake_status( ssl ); + } + + MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= read record" ) ); + + return( 0 ); +} + +int mbedtls_ssl_read_record_layer( mbedtls_ssl_context *ssl ) +{ + int ret; + if( ssl->in_hslen != 0 && ssl->in_hslen < ssl->in_msglen ) { /* @@ -3749,9 +3772,6 @@ int mbedtls_ssl_read_record( mbedtls_ssl_context *ssl ) MBEDTLS_SSL_DEBUG_BUF( 4, "remaining content in record", ssl->in_msg, ssl->in_msglen ); - if( ( ret = ssl_prepare_handshake_record( ssl ) ) != 0 ) - return( ret ); - return( 0 ); } @@ -3760,7 +3780,10 @@ int mbedtls_ssl_read_record( mbedtls_ssl_context *ssl ) /* * Read the record header and parse it */ +#if defined(MBEDTLS_SSL_PROTO_DTLS) read_record_header: +#endif + if( ( ret = mbedtls_ssl_fetch_input( ssl, mbedtls_ssl_hdr_len( ssl ) ) ) != 0 ) { MBEDTLS_SSL_DEBUG_RET( 1, "mbedtls_ssl_fetch_input", ret ); @@ -3914,13 +3937,22 @@ int mbedtls_ssl_read_record( mbedtls_ssl_context *ssl ) } #endif + return( 0 ); +} + +int mbedtls_ssl_handle_message_type( mbedtls_ssl_context *ssl ) +{ + int ret; + /* * Handle particular types of records */ if( ssl->in_msgtype == MBEDTLS_SSL_MSG_HANDSHAKE ) { - if( ( ret = ssl_prepare_handshake_record( ssl ) ) != 0 ) + if( ( ret = mbedtls_ssl_prepare_handshake_record( ssl ) ) != 0 ) + { return( ret ); + } } if( ssl->in_msgtype == MBEDTLS_SSL_MSG_ALERT ) @@ -3968,11 +4000,9 @@ int mbedtls_ssl_read_record( mbedtls_ssl_context *ssl ) #endif /* MBEDTLS_SSL_PROTO_SSL3 && MBEDTLS_SSL_SRV_C */ /* Silently ignore: fetch new message */ - goto read_record_header; + return MBEDTLS_ERR_SSL_NON_FATAL; } - MBEDTLS_SSL_DEBUG_MSG( 2, ( "<= read record" ) ); - return( 0 ); } @@ -4347,7 +4377,7 @@ int mbedtls_ssl_parse_certificate( mbedtls_ssl_context *ssl ) ret = mbedtls_x509_crt_parse_der( ssl->session_negotiate->peer_cert, ssl->in_msg + i, n ); - if( ret != 0 ) + if( 0 != ret && ( MBEDTLS_ERR_X509_UNKNOWN_SIG_ALG + MBEDTLS_ERR_OID_NOT_FOUND ) != ret ) { MBEDTLS_SSL_DEBUG_RET( 1, " mbedtls_x509_crt_parse_der", ret ); return( ret ); @@ -7603,4 +7633,47 @@ void mbedtls_ssl_read_version( int *major, int *minor, int transport, } } +int mbedtls_ssl_set_calc_verify_md( mbedtls_ssl_context *ssl, int md ) +{ +#if defined(MBEDTLS_SSL_PROTO_TLS1_2) + if( ssl->minor_ver != MBEDTLS_SSL_MINOR_VERSION_3 ) + return MBEDTLS_ERR_SSL_INVALID_VERIFY_HASH; + + switch( md ) + { +#if defined(MBEDTLS_SSL_PROTO_TLS1) || defined(MBEDTLS_SSL_PROTO_TLS1_1) +#if defined(MBEDTLS_MD5_C) + case MBEDTLS_SSL_HASH_MD5: + ssl->handshake->calc_verify = ssl_calc_verify_tls; + break; +#endif +#if defined(MBEDTLS_SHA1_C) + case MBEDTLS_SSL_HASH_SHA1: + ssl->handshake->calc_verify = ssl_calc_verify_tls; + break; +#endif +#endif /* MBEDTLS_SSL_PROTO_TLS1 || MBEDTLS_SSL_PROTO_TLS1_1 */ +#if defined(MBEDTLS_SHA512_C) + case MBEDTLS_SSL_HASH_SHA384: + ssl->handshake->calc_verify = ssl_calc_verify_tls_sha384; + break; +#endif +#if defined(MBEDTLS_SHA256_C) + case MBEDTLS_SSL_HASH_SHA256: + ssl->handshake->calc_verify = ssl_calc_verify_tls_sha256; + break; +#endif + default: + return MBEDTLS_ERR_SSL_INVALID_VERIFY_HASH; + } + + return 0; +#else /* !MBEDTLS_SSL_PROTO_TLS1_2 */ + (void) ssl; + (void) md; + + return MBEDTLS_ERR_SSL_INVALID_VERIFY_HASH; +#endif /* MBEDTLS_SSL_PROTO_TLS1_2 */ +} + #endif /* MBEDTLS_SSL_TLS_C */ diff --git a/features/mbedtls/src/threading.c b/features/mbedtls/src/threading.c index 1b6d9cd4451..83ec01a45fd 100644 --- a/features/mbedtls/src/threading.c +++ b/features/mbedtls/src/threading.c @@ -32,7 +32,7 @@ #if defined(MBEDTLS_THREADING_PTHREAD) static void threading_mutex_init_pthread( mbedtls_threading_mutex_t *mutex ) { - if( mutex == NULL ) + if( mutex == NULL || mutex->is_valid ) return; mutex->is_valid = pthread_mutex_init( &mutex->mutex, NULL ) == 0; @@ -40,10 +40,11 @@ static void threading_mutex_init_pthread( mbedtls_threading_mutex_t *mutex ) static void threading_mutex_free_pthread( mbedtls_threading_mutex_t *mutex ) { - if( mutex == NULL ) + if( mutex == NULL || !mutex->is_valid ) return; (void) pthread_mutex_destroy( &mutex->mutex ); + mutex->is_valid = 0; } static int threading_mutex_lock_pthread( mbedtls_threading_mutex_t *mutex ) diff --git a/features/mbedtls/src/version_features.c b/features/mbedtls/src/version_features.c index 0a2f0657518..e866e67a230 100644 --- a/features/mbedtls/src/version_features.c +++ b/features/mbedtls/src/version_features.c @@ -324,9 +324,6 @@ static const char *features[] = { #if defined(MBEDTLS_SHA256_SMALLER) "MBEDTLS_SHA256_SMALLER", #endif /* MBEDTLS_SHA256_SMALLER */ -#if defined(MBEDTLS_SSL_AEAD_RANDOM_IV) - "MBEDTLS_SSL_AEAD_RANDOM_IV", -#endif /* MBEDTLS_SSL_AEAD_RANDOM_IV */ #if defined(MBEDTLS_SSL_ALL_ALERT_MESSAGES) "MBEDTLS_SSL_ALL_ALERT_MESSAGES", #endif /* MBEDTLS_SSL_ALL_ALERT_MESSAGES */ diff --git a/features/mbedtls/src/x509.c b/features/mbedtls/src/x509.c index bc3bfe018f5..fad390d8577 100644 --- a/features/mbedtls/src/x509.c +++ b/features/mbedtls/src/x509.c @@ -80,6 +80,7 @@ #endif #define CHECK(code) if( ( ret = code ) != 0 ){ return( ret ); } +#define CHECK_RANGE(min, max, val) if( val < min || val > max ){ return( ret ); } /* * CertificateSerialNumber ::= INTEGER @@ -489,6 +490,33 @@ static int x509_parse_int(unsigned char **p, unsigned n, int *res){ return 0; } +static int x509_date_is_valid(const mbedtls_x509_time *time) +{ + int ret = MBEDTLS_ERR_X509_INVALID_DATE; + + CHECK_RANGE( 0, 9999, time->year ); + CHECK_RANGE( 0, 23, time->hour ); + CHECK_RANGE( 0, 59, time->min ); + CHECK_RANGE( 0, 59, time->sec ); + + switch( time->mon ) + { + case 1: case 3: case 5: case 7: case 8: case 10: case 12: + CHECK_RANGE( 1, 31, time->day ); + break; + case 4: case 6: case 9: case 11: + CHECK_RANGE( 1, 30, time->day ); + break; + case 2: + CHECK_RANGE( 1, 28 + (time->year % 4 == 0), time->day ); + break; + default: + return( ret ); + } + + return( 0 ); +} + /* * Time ::= CHOICE { * utcTime UTCTime, @@ -528,6 +556,8 @@ int mbedtls_x509_get_time( unsigned char **p, const unsigned char *end, time->year += 100 * ( time->year < 50 ); time->year += 1900; + CHECK( x509_date_is_valid( time ) ); + return( 0 ); } else if( tag == MBEDTLS_ASN1_GENERALIZED_TIME ) @@ -548,6 +578,8 @@ int mbedtls_x509_get_time( unsigned char **p, const unsigned char *end, if( len > 14 && *(*p)++ != 'Z' ) return( MBEDTLS_ERR_X509_INVALID_DATE ); + CHECK( x509_date_is_valid( time ) ); + return( 0 ); } else @@ -559,16 +591,18 @@ int mbedtls_x509_get_sig( unsigned char **p, const unsigned char *end, mbedtls_x { int ret; size_t len; + int tag_type; if( ( end - *p ) < 1 ) return( MBEDTLS_ERR_X509_INVALID_SIGNATURE + MBEDTLS_ERR_ASN1_OUT_OF_DATA ); - sig->tag = **p; + tag_type = **p; if( ( ret = mbedtls_asn1_get_bitstring_null( p, end, &len ) ) != 0 ) return( MBEDTLS_ERR_X509_INVALID_SIGNATURE + ret ); + sig->tag = tag_type; sig->len = len; sig->p = *p; diff --git a/features/mbedtls/src/x509write_crt.c b/features/mbedtls/src/x509write_crt.c index 9041d440ff1..d1d9a22a7ee 100644 --- a/features/mbedtls/src/x509write_crt.c +++ b/features/mbedtls/src/x509write_crt.c @@ -413,6 +413,9 @@ int mbedtls_x509write_crt_der( mbedtls_x509write_cert *ctx, unsigned char *buf, MBEDTLS_ASN1_CHK_ADD( sig_and_oid_len, mbedtls_x509_write_sig( &c2, buf, sig_oid, sig_oid_len, sig, sig_len ) ); + if( len > (size_t)( c2 - buf ) ) + return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + c2 -= len; memcpy( c2, c, len ); diff --git a/features/mbedtls/src/x509write_csr.c b/features/mbedtls/src/x509write_csr.c index 0b9a2851e0a..8fd856b2a28 100644 --- a/features/mbedtls/src/x509write_csr.c +++ b/features/mbedtls/src/x509write_csr.c @@ -213,6 +213,9 @@ int mbedtls_x509write_csr_der( mbedtls_x509write_csr *ctx, unsigned char *buf, s MBEDTLS_ASN1_CHK_ADD( sig_and_oid_len, mbedtls_x509_write_sig( &c2, buf, sig_oid, sig_oid_len, sig, sig_len ) ); + if( len > (size_t)( c2 - buf ) ) + return( MBEDTLS_ERR_ASN1_BUF_TOO_SMALL ); + c2 -= len; memcpy( c2, c, len ); From c869d015749591484e2974f003e498d0d8ecb17d Mon Sep 17 00:00:00 2001 From: "andreas.larsson" Date: Fri, 7 Oct 2016 04:47:27 +0200 Subject: [PATCH 86/89] Added u-blox ODIN-W2 drivers for all toolchains --- .../TARGET_UBLOX_EVK_ODIN_W2/sdk/LICENSE | 2 + .../LICENSE-permissive-binary-license-1.0.txt | 49 ++ .../sdk/TOOLCHAIN_ARM/ublox-odin-w2-driver.ar | Bin 0 -> 3774356 bytes .../libublox-odin-w2-driver.a | Bin 0 -> 1863404 bytes .../sdk/TOOLCHAIN_IAR/ublox-odin-w2-driver.a | Bin 0 -> 4064460 bytes .../sdk/odin_w2_mbedtls_config.h | 10 + .../ublox-odin-w2-drivers/OdinWiFiInterface.h | 218 +++++ .../sdk/ublox-odin-w2-drivers/bt_types.h | 204 +++++ .../sdk/ublox-odin-w2-drivers/cb_assert.h | 94 ++ .../ublox-odin-w2-drivers/cb_bt_conn_man.h | 826 ++++++++++++++++++ .../sdk/ublox-odin-w2-drivers/cb_bt_man.h | 625 +++++++++++++ .../sdk/ublox-odin-w2-drivers/cb_bt_pan.h | 142 +++ .../sdk/ublox-odin-w2-drivers/cb_bt_sec_man.h | 378 ++++++++ .../sdk/ublox-odin-w2-drivers/cb_bt_serial.h | 155 ++++ .../ublox-odin-w2-drivers/cb_bt_serial_le.h | 153 ++++ .../ublox-odin-w2-drivers/cb_bt_test_man.h | 253 ++++++ .../sdk/ublox-odin-w2-drivers/cb_bt_utils.h | 86 ++ .../sdk/ublox-odin-w2-drivers/cb_comdefs.h | 178 ++++ .../sdk/ublox-odin-w2-drivers/cb_gatt.h | 504 +++++++++++ .../ublox-odin-w2-drivers/cb_gatt_client.h | 652 ++++++++++++++ .../ublox-odin-w2-drivers/cb_gatt_server.h | 329 +++++++ .../sdk/ublox-odin-w2-drivers/cb_gatt_utils.h | 104 +++ .../sdk/ublox-odin-w2-drivers/cb_hw.h | 146 ++++ .../sdk/ublox-odin-w2-drivers/cb_main.h | 131 +++ .../sdk/ublox-odin-w2-drivers/cb_otp.h | 68 ++ .../cb_platform_basic_types.h | 130 +++ .../sdk/ublox-odin-w2-drivers/cb_port_types.h | 35 + .../sdk/ublox-odin-w2-drivers/cb_status.h | 44 + .../sdk/ublox-odin-w2-drivers/cb_types.h | 287 ++++++ .../sdk/ublox-odin-w2-drivers/cb_watchdog.h | 71 ++ .../sdk/ublox-odin-w2-drivers/cb_wlan.h | 567 ++++++++++++ .../cb_wlan_target_data.h | 119 +++ .../sdk/ublox-odin-w2-drivers/cb_wlan_types.h | 552 ++++++++++++ .../sdk/wifi_emac/wifi_emac_api.cpp | 327 +++++++ .../sdk/wifi_emac/wifi_emac_api.h | 10 + targets/targets.json | 4 +- 36 files changed, 7451 insertions(+), 2 deletions(-) create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/LICENSE create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/LICENSE-permissive-binary-license-1.0.txt create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/TOOLCHAIN_ARM/ublox-odin-w2-driver.ar create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/TOOLCHAIN_GCC_ARM/libublox-odin-w2-driver.a create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/TOOLCHAIN_IAR/ublox-odin-w2-driver.a create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/odin_w2_mbedtls_config.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/OdinWiFiInterface.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/bt_types.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_assert.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_conn_man.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_man.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_pan.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_sec_man.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_serial.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_serial_le.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_test_man.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_utils.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_comdefs.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_gatt.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_gatt_client.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_gatt_server.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_gatt_utils.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_hw.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_main.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_otp.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_platform_basic_types.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_port_types.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_status.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_types.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_watchdog.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_wlan.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_wlan_target_data.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_wlan_types.h create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/wifi_emac/wifi_emac_api.cpp create mode 100644 targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/wifi_emac/wifi_emac_api.h diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/LICENSE b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/LICENSE new file mode 100644 index 00000000000..a8161761a33 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/LICENSE @@ -0,0 +1,2 @@ +Unless specifically indicated otherwise in a file, files are licensed under the +Permissive Binary License1.0 (PBL-1.0) as can be found in: LICENSE-permissive-binary-license-1.0.txt diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/LICENSE-permissive-binary-license-1.0.txt b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/LICENSE-permissive-binary-license-1.0.txt new file mode 100644 index 00000000000..d648fd563a7 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/LICENSE-permissive-binary-license-1.0.txt @@ -0,0 +1,49 @@ +Permissive Binary License + +Version 1.0, September 2015 + +Redistribution. Redistribution and use in binary form, without +modification, are permitted provided that the following conditions are +met: + +1) Redistributions must reproduce the above copyright notice and the + following disclaimer in the documentation and/or other materials + provided with the distribution. + +2) Unless to the extent explicitly permitted by law, no reverse + engineering, decompilation, or disassembly of this software is + permitted. + +3) Redistribution as part of a software development kit must include the + accompanying file named “DEPENDENCIES” and any dependencies listed in + that file. + +4) Neither the name of the copyright holder nor the names of its + contributors may be used to endorse or promote products derived from + this software without specific prior written permission. + +Limited patent license. The copyright holders (and contributors) grant a +worldwide, non-exclusive, no-charge, royalty-free patent license to +make, have made, use, offer to sell, sell, import, and otherwise +transfer this software, where such license applies only to those patent +claims licensable by the copyright holders (and contributors) that are +necessarily infringed by this software. This patent license shall not +apply to any combinations that include this software. No hardware is +licensed hereunder. + +If you institute patent litigation against any entity (including a +cross-claim or counterclaim in a lawsuit) alleging that the software +itself infringes your patent(s), then your rights granted under this +license shall terminate as of the date such litigation is filed. + +DISCLAIMER. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND +CONTRIBUTORS "AS IS." ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT +NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS +FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT +HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, +SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED +TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR +PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF +LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING +NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS +SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/TOOLCHAIN_ARM/ublox-odin-w2-driver.ar b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/TOOLCHAIN_ARM/ublox-odin-w2-driver.ar new file mode 100644 index 0000000000000000000000000000000000000000..296ec9f0c137baac0fa26f70f419a459a285e20e GIT binary patch literal 3774356 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

    j_iwVcmH&pV)nT~g$LEB@ENd{WMWs0Qj)|1 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%0A6!^=Cj3!yw5Rns#?x#F}cUuSE(UzREy6sgtV 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Ν6(_H0eOK2+59p`!cozOg@^l>*$LjcWUG9t% zHxVbUV@-VJz8WX49t|4^H#gK5l%|f;Dd5haGsyQXshU#%VY%neLseJf_&UaQNk|WZ z@)Hh^3r0F*D(-}WOIC0+FIC*Af=f|wS82GXfus6Rxs+d)tK(i&aCmG*#l5QFV(FZm zRd9IhMU^+H;9}{VIG}qZ+o9^5=(-x20>UFJ^9U-t4FXW2w@>Y{n+3m4B@xWcw(@fq9dMQ3c_r{fA!c8x7BmD6SJq%*-B z2ltLu;xS_PN<-S#z{isBxVnonl*6H z#T`M(^PN)_MEI{Vp`+o`9mOYYn`s2fqNW@ronc7{jgy4NiP-}QuUA2?0uw=XCan2k zy}QEcv-V!4X_CY%Up?m*T2_?mBs5Mesyk941Sfi=`iQlsB|vJ7#O5Y6PMUVOT0*8P z<+Dh&Fq-gsmGF863!PKEa3#E6X=h4Q&s*xMKBLpi5ribXUQIb}7pa#LUa!cI_tf)c zk@_m(^$Lc4qiG*R>adUkOTz2b4D>h>Ua#U(bxC-=ieD{A^wn$+;)iuL`1gVtJ(|OL z6JD?AiJb6yHRY6hLgPfLHp^rGv-ad?)u`~z-e-}hK~ci%6->lN-}NYJ2s2+AmCSQh zQPT885?-&Yb_CR(HdQ?4Hd+=nk&7rQp>d+U9pD3(&^SqGoFu$nZQPphdZlQYB)ncF zyk3zvxj#^^SLWHJRvcW4r2KI)6%@$0vnC9vEqvA zHtC8=@|Ad#JOqa{(qSl7XgUpQr43dDKAp)kgTeW94pP#@58F*P82Jy8fpiuYTWEvb zCYd}we}T@v%3y|0BHWoU>6s3&#L#$3!o*BAo99R!@UUlsXRiMLCVn2lYbQFzlS9VaWve2 z0CzM3j_yg>CSo7O`EMtL&{<=7E}7P_I(+8gBf|+)gqCsKzPwCo2i>~*Icz%r?L<1^ zs2qvY&sU!Tj>;jNdahf?O(;0^T(^GCnH+7X{;_1g=;xe20^A|VMA`C^V)dN!yEum( zUaP~nqS8$pxygF*N4oATFL64Hd7AmRq_}wVW*E0GDJ?6B*T(%>oUKL(opWB!meOJg z+xGCk@zj?_?QWLa`0lu`(~Z;37rNc{oP2&&d(z%&ch9S%)Lgft&P;8bxKLsu&A*qA z7C*=3hyJK-r$k9#XF+e_UhWQc@04Sf zd*S_MPP#SSfgWEUmT_M&=#o1sLiaQA}2qbJo|zZXPaTH zr|Uo-x&L4 z?g(dzTPpc6^r>?DJ8ruOB8mZ8d@SkqTdNY8DoOpE-pJ>*SCt!6&3{D4-%ntmh|BHlHLv(1UK z%`r`w%Y)Vy>-VK})C=FrXS81P`IfMzA8|uy_KkK*diJN|O+o#=`v&B<<5`T9MaacD z0G>G89H*}&bv_LEyJ=5i{;DwZah&xto7W+6wmEUOIdQf*akkm3o@Z9CckQlgZfx@I z+S$Cz<7sSaapCQ7O^s`JUA4>G>}sm3tlwUOl!hu-O-p^VcNfxNm}IBBZim-hSMS=s zHy3Y%i)dN&9w_w+J1^pUTw&+l+_1E|oh`1Wrd^(vx}994D5S2mS|zCtjk{XZBp|}4 zaJ?b3D0Em`Rh7od)qsGeK_z_(AF35@AGy9eEWNP`=O*tX@Gb5akR3-3nOWG zNP1xow*$IxVBv?efxbZdfQjlG7zjA$W@*=YG^afnWUV;!^nM>b7N)Z4cojb%Te;+; zN0RO~K5eU9($>1kOwM_NAp{&O>N+O-DE>~zeiDsn@jZR{l zfT#1uW=LZHE)TCEfzDDtZ=ntLRSTWO-ji8*eEz~eDm2-1|7#09&tm_b?6dy|j>1sM}fDFm=pXc#wL?ao$2~OUa=8L6Uf0e|u;}jV zD(e{N?Q?mCU_X4OIY}br)U3W^1tP2O5lz99W%xlqZxa*OysBQRg-n6i-gf4V*o>MI z*H9Ezb&2a%PiGWnc}Ji>=o@J7bOoZFWRG#g-HXR+gLi*l&|BEyZyVh2<>x{2O8zTZ zkdHB|W9dyx?6T{eHx>wBh_W57BTBf=f863x#O7N5CVTte3?!mQ+I|2G^9wE#id22z+YvLTkng1gug#VR19k+B%WLxe!j&uVCBFNi^G}$&{ zzX#kf3L|^(WLKTqL1+7`@lkaM?#ySb0%>?W@V+J-^-~!>D(+d}D4lSGiH3VY!Kpd~ zy1XANxD-X+Rk&8m{V8x%Zz`A4Ww|=;R|*b~wy3yw6&xOsA)KzeU|+}Bzk@G>95-Ee z;R0}r=;hdB6S7V)omQ29H<0@M?FqQSjs|l#6Pe z4RFD^iAJ{ijmhJ~4~%}&ec1gC_d0h9uUCqw^Bz&>&AiTON}VqkbxsSWe`Pu9oN>C= zbz}{rSANQf)`8 z%EyksH7~XIr2Q@2L+8_N+uR;LYSj8aU!2J$*hkA@Nq^$rSYu}Ghi7;{JpPJ(lsPG9 zc-$^DzA^divHM0p<-W_!)^62i+6N}Fs-4eBcAZ{_nHI4v_ZW|4VbrcXy&I$U9oOZ* z`02@IBS)$>j2Z4+cQRU#K0-bG`nma~IqqWj$PQcnym13_&>WMBcUI*r=H3E)E0*#x zwTH%ZLDtiJOnEKDn4YM5=GBj98%2*#8B=+Gwxe+c=YH2XincnB{byat$k8hM&l}%8 zeEWO69BB3w+m12k>SI?OD;c4?VI!X%Hs|l^ez%jYPU~Frxb3YU8lG0Pna|VL&!x{> z^l;i|>F(P(PTU{aY|h$Nx)0v|#cIf46W%@GX z*R0zQMBU~a3m!JtlqT0&w=q77{w^C&Td|n01-6MK+w!V}&Zj4#_DK77@Pqq<_^>xXS4m_@&+c&B>tJ-l4dYgxYc?_Jr{(;F)9=BaN?I__e5Iilx` z5o*PCr(d09?0D6-agw?kbzfO|2S*zl?5|Y3b9v>ENj=^>VPl8SK5E;Ibs{5|dU>_G zcOog3aEmDw7Cja5XRY@<~ zoVH_m$CA$E@tL^zFmqmwnT_?FWsR*LDS6oTMMuq=$2T0qtmgC9HuC!9spD53L;s-` zZ8_KQT5Q=_+-at?=WOOF_7hh=Ol^K+^2Ooe&eSg_KeA`i$tYz@XLoiU@3##cX%w0L zmTywdw6(mEn96e_zB=y`Xj!b#*@_OpG7NAJ(l_OU^+=4PNdmT$^ zS*N(3cUdiatMbObaCQDXJ-5=Gs?6kcF6Z@gshRWmn!0+N`l)4n$(dhWutDe8d}h;{ zAcLCrE->sZhmD?n3&)sK_I!G=?JedgI@9EGVD>(7tlphoyu%HYEt{T@{H|D#b>(@!=_QA&j8|WpykE?akH7oVKf7uq|Cx$+KDzi@@8o5WZ0E?? zKc{m{0T>Uk zz<<_Kx$N_lL-t3~8JVBfgO`56@>aWTYuANVDq5G*!fYHMcoOD>8mFZ_%~mw@j{K$Imn0$={w? z?7+Td`M60>p6QX&6bWQvATX8ok z1O6i6wdA9HZvS}!2hx~?qz?Vy{m$H(yK_go(rP6;B=3&BntSH_=FI1vJ9~G|IpppN zcld#3?|0K7X-=*;eK*zB)m>6|<&u2n{w$vDta6f_#M7Pc^jBgYLe3SCw5k5g>Z8Vk z?$2IxgiuQ-Uw?(}-#qNWi;q)pn0xRWd7Vv3-+!^FW=UDunQ|^=f4M2=N6XFK{}as% zzr8{1V6F=kh!tc_>l4jCN1tEIzTApZYYVY{9BzL5&7r?q@P=!_Q*Rhc-hQ+9uU2C{ zT7HsUea#sO*TT=yy!W1byt(2L3C&Vz&04}SCSAI`1nb(0lLr3M-l(W{SDCppvhTQ`z>Yir z46RP|eS?Cr_W%9Pw_Y)?=UGR5^Je_c^Xt$NH@^_0aPxPlEf-E3otNZjggYAH)Aj&Y zB+bG(6+gR|wYF~-0;Lkz6jiTTmgIQ5O6dZVBDtdxUY+$c<*M*fDLsvosH{}!ZTYL? zWPN1T>iAP+RL94Laf~53oP)454N2)q+vTOw9dB3B@c0C2Pb+;gF^)qass|TqW=#Qc zsJ(N=!KAc_)v*yeCK*j+;EtLKs#bZ@nH46A#>9B_j`rGyIj#mm!_5-sXoNc&;f_Z50M~EJ=r1m_cDbVw?r4NV7rol1 zRi68ni>uk$Wz9uJzS`30p8ZpUSH;Rd$0nuZ%&j>vzCD(!;=k!VbdC*?D$6_CgwK9KOiqygOC&rB4Zoc3 zhm?RhPGd#ToE~%IV`IbS8_-$w2Dygboox@ys)V$aKuIm{uI`>lCLN7%M(5n9TMwBO9Up1B9y0i477pV?qC`Sgm zR@`4*ls+JRDj7&$st=zF-S4F1C&Q1S9M)VqesIAd?_Hj|3l8VslXtKCKCXk`y1lS; zZ}UR;L4(IePbrl2`jGKL*AFUMR(KXy&87PedJlQ-D!4oUaNa%cdr`ZV((&61OZT-b zd|&Cli&Cdw$2h6|@G$zJsr2^`<{!$t%Y8R`pt&?YTv+=1O$!73@B2!B|DyB*)b_0K z2(Fq-_fDNVt)(9_ZYYVa82c)(PjYH~T1r23E1$z3q$zw+`boXVK8Q1- zY5S?Uw9Wl>7q8hZ{4d55cbw8Be)&^HuaWFQysprsZFm+m%?~rUn4NEMK8=+b42|#R z{M0(=*7$jxPivDI@-%+FMi+2A-M3~a(D)wCr?E1FN8@`rKTn*iC2dz~&l-iM_R_j# z29qx-(oQ8lJx|QAK$Bm{`Hhkddle-A28E{lFX3YblmAZ&P5gGNJ|=&sLQ5$TBd)@-8}uc&`dP#z=Q)ZYe;K7CA3Yl=A4Ktdyd9tq3;Hx-%E$8~ zAB`{7m(~Kxe=Eg}jNK*D9}+ROgK*!YxRJ3R3i=$ye)J1En9|9IDdF~s80vo@6k^gfPH#2rx#ARZfD#iG;QT%(bXCTraq8M_Xq!@Be zQw%vj6nrTCaGH!QkX#yH;?uK?`lpNHt8w2`jQ$)#dyVzNUJ*Kz)3_OjDcvV%7+d0W zxuDkw8ge)uj&(VIm7vl2oURabwV+oD8aFNHUnS^TL01YIiw)nL9pU(IjMwAzcS~%Yey3Qs zgy|jHBKaL+QOez6OM~?=aYymH!lKMO!XmZ1K}%=r}8J3|Kdkae+ z9wj#0P>+F@0n0ZJ|AfCP?hI&prpX|2{{sms?g$7x4y+(?PieTvfGf68rVSq=|5U?0 z4IJ&2Wx(T%2Qt~BmisJ-Nx`E?mirM6NBf_b)8Ia&;o^ASy@@@63{oELYt?cG7MM2u zbXfl`>aKMw!6LetH(qJZ}nS$tw{! zG?Rx(;AB~pAg}3Bsn+i$;12Q}<{!z^aXazs-=78UW#GoMz_nxVa4ZYl>%bk&0=FM~ zoovc|6S!>T9maQ%BUzMN27{9iW`R2n+_5ycLUgzsTVi)%qQx;-*a~r5mNag3U;Ppv zOgSr@y58K&!u9|kPr}i>pzk3n?!1DdawP5>8m?xGSq{mgIV5o>G+d*CBaFm-LBn+c zNA)3jblXYXeHv~jaCC1Gu0X-vqT!AxIFEuG)Ns!NM{5Vkqw;0BT^jBP_R3{QBOLXY z#9_MG`tMQTYJ@ymwBXk0VNJFno#zF8)mw<%R_$uzh!1y?!^ zu1dizn+DgQ;4Ya4*QVeuod&m4!Cf{DZb-q=_{n~uag=KxF4;cdu6NOu8RVsIEAEMA zeCJX!N*u*Vj?4V7`ZL;!8%tS=gCG0)O&ixYY~Gy7&wbs7x~%=&SG|XqZrO?(!?&G= z6RfhhW>MhyFWwqk^8Ka3rz`qazIeX)RM8ineuKeoNHE4e$tuolB^wU^^$PuMg!L6y zUsGS_FW>&~sk6oy>IBMz$Jmgs>R=5@rBMeU;A)M4*LYFs13*- zIPv(U+fKc9iWR)JpA~TnC;dZTeeJ6(aNgHNX{XM*?(SOg&GXFH*Z0h;=kN4>q48(` zur!l2s#U69bd46BbOl{LZ#=%0XzvMXE#J$ffxRJ)G@n;_H)Xvgv%i7u1E?+bp9%9#C{*RH^-@W#Cu7cMN z7~ei$#>dKa^4mk~y7#UKhYMg!vAmf14sT_?YXkW1JM@X>AAO%y{jbSmLu9vU|JLul z!W)G@?jcse-c>NU;Jb}OUFR!KJv(&J?|RYYi*Nl@^RHfJh`HUxrh~@|*){FYpEZ22 z|KkbAemAfskT*&Fv1*&~S659Q=GK?WgU`P9EOTLQzZ({t%sKCS{PQu~_xZtwm8mVL6KAj4{=)+K)8 zl8#H-*=m<>P|Se-7}gS3{%Z%^-?3)E_fg(^_zc)?&4Aj#pf&?=M?Le*tMNw0R}CtK zvGXUcZ7&SuGg^g>m->bdH5YyV&5Elt)a+j#|Km4`3!2Y+SI}K|We|5AA9XqA$6}2u zj)~DO6{C$6j^F>ks92IgDvj~NEXG)lE!DdbpN12Q0(pG?mEOSCJbbci=vedOA1u9b zS*-DA+gH#?S3drp7^{Fyo>Ov-Dr`Ib+G$!TT!&-DPkkr${uSQ|SG61tQ+u9ywSm`E z%BQ&D#IhS$)x#%yhVF#yl4)gQ&36~VmfW502V+%Fef#{1Q$=sMioS~2+wx#om2TFb zKPw~Mg?3v4vr;8Xg#sd6=^PL3S%@(&amLJ#*T-{sN`7W=BTL~W37Kl{0JG| zZLV%ZVbc~B;%fC;U_#-3_|FPQ#$!VBQdW)^fM~J?C{Q>vlPcx zk7KK6mUc(_N28|QyR=$hYcsfuPG`X+Vp{i_yPUE46EvKIBi*!Z%TX~soh&k|H9Cmz zrn6OMOebu2csvKS$aIp1BC+|Y(r{fQJWo?=GAE#o@#EY7jj zmai`wtA+RtF#*;O74a4?PP5CX!Y3M;q@E#<=Wre2+W)^&vn9>W@x0%?&Lr$hh4bY zH<~2z{&`k=R8>%NY;b%eY`zPctC0EWB*#{dW26j%|^Oq)$t)7AE=;$8b+EzIG?&O ze=_C?p-@M&A96XN%iD(slq{q@c%z?VQ&PKNS3bC{b9=9vxw{v7JstI-j!l%ev$MUW zttq%IG}iwi=<}q+i8>=86l&?{3HF32BgmHKP)l2|D?|o-ckV<&TaQ1~gPQej?+Wz> zJN#7MhMJlhuy(XJZG*S?rsj5kt3ck=)V|%nrLGd;HsM zqZ$an&3x;2jCLx&Is81I=*(_^yT7T&pXxLI%f2kHw|m=Gj^;D2d3&(El@BNex1(!| zJnUMtVckYPb(*@j`g<|*{5OO3o8K3NSTS2u69#i9RiU1CzaN59#i#j&K~|=v$?Q)| zH{Qj8CK@_)2<5hBZBus#YCv;K_StW(tsd+2u6cGT)89TYrrO@{GOx>Pc-`JSZ@#y{ z>+yQM3%rHig*Y9#*t_5G9x%Lj7~VS#??Jd!OOG-|&9S z@IGL8KMuu$BBgMUEPa`t3sxrS4rD6Rc`cn%t#Lx$%r z!!unw=}f!~P*Y`|#jsR_xDTJHee7Wus%#(1`*oGQ24$nw56~I;K71}_yW3D+^RKDw zUuU~X_e9vlx+r~4x)m}&g~;slU|}hHp?P5+=!-e#RQ|=BZ))3*@Um|^=spBHOStaC z=R&t#E&qmJL;31jPS+Qs&6OxehDUG#!*413Rte0z(_j1gH!jlLQ`=vGy7b|5p~qZr ze>2)&a47$-yu00pxdpa8u<&(j%SE~OR-nBybmM~T;PLrCNW<{LMd=T<4m;I4#4cVP z)cf##Y8`OhhtGwc6Y5^0hL`{AdFEd1veo;K^!qMGU;9vw40qvz>5pQi9$mQhKtH_?ar!xbVZKL@{;nRrK^uJ$$o}1F zg(gktuYjg!rWst!&Nn#!h-5QE}`_v4VY5X$IPt~tX<1goYdcK)qxyHYo^XVCEhRfO0qJ3l+0v_kt-w4_VfSavk zf2_2h>TMlWK2W}_Fg2W|8ccE61-X8UdQQZ`_tOW1ZBUCK7w=w)oBjlP7rZS~*U1#Q~-SiyFQ{-f_2E{x}YxlQ{HlKwZ) zl!ZRTe+@LPKa&1mpy~N3>2HHBR_L#SmU{h^|8dZ?&yn~)0!@1_Ngo0&gNv23n{9Lj zdykD?#WvaKN_M4ZeJ}W|0;I5jla%jjKc*h96zFt7r_N9g3sCLTJ|LyUB@1@(d*eqZFD^&yKpkN z*amikjo!#@O{Dmn*kv}pkNu})B6h)Y2HDLcNCiFyD`5{~{t!*iK(b%?F+tNakL*|O z6ZBo2cC(uWP2)}WD|ZN*=2VH1&zc2I&oHuIxk1qM%qlTF>>5G)IPGPnHaskA2%6?( zi2-}7qQ3M#qr_Oq$bKKy7ckI8?4+RSnNwmcVqX+AJ!49Y#q4u7dI@_#&@_xCMlriX z(DV!`F_y9&f_{Y4rR;YEP0xf9V;S?==u23>plQu7F)n4lM8{D5XpJv1E@M9yv?;HQ zeOJ)5hL;%2+1CV3Yj%loIr|Y}8OR>z_auRs=)cowvbQ1w@&8;Bh>8AxH2Q9hp3vw) zjZQsFOnEIDf1^fUqtTaYH1&-P6{ueoh{DebyNVw-?S>k4jQK=*tB7fS7Vcw=>Qi{X zuq%3$v3mud<}2lUh~nQ7c10mKKzwwNte*Jx_*N(iTZA)L%l@>hOL$bTSJUIF3IE}E}}$k!|K?LtiQ z`zS^|2Pj7Q*C8gk4Mc;l(=?9>PjZOAn(&bSZi+v{*iMR34!wgWImbl&C}P4tMsdQl z^+j@?CK}~(Il$9>V98bJDx{OVW)Zgu9F<3MWP2oz>QD9Jh*+>^CZQn z5AU~6h@O~&a#LHh;0ThQoS&c`2)zfsUJLBr+|=YL4h zO@h8z(2asdW}Y862gi>HdV`=x1sxRhn4q!faQue_4cl0`+wbH?DPdpJzlTnZ29pWP zDkgr^w$km1qXR0Pm>BIGjifAXB3~l9n=FAQdZMEPZQ;>@;iyflWCy{RhV3U)nQ8fv zD7?F=br=c9QkFwe0d7xmbiiIL5<8;FB$NVzwgw>GY`rQGi7gX}1UjWFF&05KjoCCj zJQnE)@9T-(YOBd$A{rH?s5zqhV&g4|*f?BKrRGBT5 zlHva0Xh&=`Z0lawbqq@rtbBMQFcdi+P1BD4iNV2WqG?Y!HcXP#YJ_?F%pNG?M1Xka<7Z3j)+9pRg! z6LCJIz#}a>O05efKCF@$Kr2P`q)yu)yi+00-_#Wv;k`rBh(hr|re=dkrkNlidPn0_ z3w~$cors6l4Mh7Vc89q7Z)HP9GpP-ktfX$rXg_sRM*FFoYBNdOn6aFV8#3m}XhU{G zMjNslGTM;ckkN+hhK!w)v1;`hJEuNl=hSEHob?$yXMM&R{N@_i6|0}QGWOt392F^I zbxT?aa$(_XnOv`v%F-WG*7;FFCs{eEsr*`Aa#jh=~hvL<|M&yN8o>rO)D^{;TP;*JBCZvNe; z$@8K@6(mRmDep(1Re9w1=#&H@mhJeuhI<_he5JI4#Qmv;tISW2JFMY$0oQ9uOO;FS zn$-Fo2d*y-E~?>*3(WTr5-RIQ?>ba@&jB|eL5L-e+NR=aJn75*ebLWS#1Y`63`&#N zdw}zT#&Gd)6gYYxFN4I5Xz~d6rAmo1>qHd2gQo0KUfUYRe8dnz%DV=%QVbgcZd`&C zo{sxLmbfnX+qf+YdCz5uYs2gDY~-EJ64zLroxG>B#No>a+n+^yp9C(Oc3>l&mAogi z#MR@yR5s)LC~)^@(T@5oZLL2FTvqb%-sxZ#ZNXux}>Y;aEi zmrXxc;k^^Bbu!3%QNQ2Fc6&Cs1}sebq%g!8BWe zo4j7&C_mu{BXK`Q!_{(kDL6bLEZmD4ZU8tR_#_WYzlA%c;SK^v{XjS@!4~c>HQZ4J zNA;BT`;3Nr7`QSakLoRPw`;hkfs^f}eT>A>Z+dEbPb;{E3T~^0drrX>DY!Zf_Y!be zvUqzJDY(luTwZIcUluF4d=0lu!7Wj6zreNHj!Ff$RKfj=hN}mz4QVtUr3&t=8tyhl z-ZBOE1r2weqp~$;T!G$&4Y2ai#NNyfJG~VqRuE=lh zo2b3Z@sT(zi?(uGfvZ9q;plfIiCd-NhJlmw`KoDfw<$Q^G`RZ}T=_J(hZJ1JG`PnU z9MwHjJDyf>mDAv!Q*c*LgZqJkTRjc#bp=Ojcc%LNhk~PV$%HEkq{idgX>cnP+;!97 z)+o4lO@q5$!L6AF*RJ5Ob<5a}T?!6cvW&Q41&6IxM%--*j@F}0{dd2D!`3Jx?jZ$- zEl)<=V+syinT)un6&&4*ndd#9u!Jpv4~KJ2mjxCF@|pX^_VP=Q zk)7`~Lu_5yN#-kfalx7LKttg8R`NDbIduAQR`ttCcIM&7t6)id`N@~gGMBf{H&lfW z*^v(qHT4aFlXntP-=jl~DkMk}aI{^|BCC z42H|PO<_2e#5dXPWb>XCwzt)5`N-q;KrkU^G|!zOvm(c_BtCO5%I=zC2c??K&+Ls2 z#zIkPD{aOhsU~a7k!-C%^8w7->ecMf)%dcc+FhPo?%b_osdZ4-%B-8MH$(`jb}WhO zwtLfbHEe^8j0i^ybMA4+lKALgY+#D@%5>fCSQ3wouH9R=b_V0h>AKFccFxU{Z=B=0 zB~0XLLf66m)qI%4PY&c@d7jSC&AxcDwVYe7+}Ca@Gv_s%8;4GgkF2lDt=b`;w_2Lb zos$spC2USIOJ3i+#$DcaE)^7>~itkQ^$1(b#mMi zDVgWk5P75II89`B$CCJzy%--OtA89z;_~rLPZ+ar982OEd`zj`V}8${5Bu}t{euuy zJs3-j>%al6cKLc8#sq(_uOjwR(e zral~Ex|l}(=pc3GGUv~5Hy!Ae;RakNh7~VL`731MhzIe}47@5_>yq^1WFT9IZ3;~% z?);!hlo?#i&NnpL&GFQ9Gq_p3B9CmvU2UTcw#-Jm*{ICQ<2T;!RcIGZO2e#)6#hFCSv{c3puPtj3>s! z{fLL;RU$g98a%KJPS|WbNZS`?qA>2TE_urc7e>E<;G1GvyAx)PY0XQJK@C%zIFk*A zOm+@3>iE~z{s!r*+j^QboRvOHk)qS*N5xsLjqeaW=MGF&x)%!Yp+IMB_wg(951l`z za63LK?lI7GugM^f7}Hr~7560QT@r*?${Q0n$)fc^@+eJS)BR2IWFTG2uT)AZ#k&Sc zD(<^b1{hDlES`?*Sk2h}EO5^QcQ6eOW|(YxR=p^o1{I<8MC#4ZHI7%?^f?Yznff4D zI(Xfvy;xRw|5KU__X9_d8%o1DY~C+~TP4yE@$fKkR1V>2ETudh_k@C@WhxWyw1T7Z zBu+nH{t|ExfG>j_1O0q?|Fw*LN-_bKmlUI2ahd-Y*JV6k9v|BqP2kr@e!yJ1i)pC! z`D*w%a`SI(P0hxQ8*%=;t}g5I<*jRY>DKx3OQCs$^W-P#jCaiwtYXoPO9SrL4ix?1 zd|o44lXucp@!a`57FTx;G|ko(A%|6(=eF>++hX4LbFG(rgj7M^?QfNFtdO zep}9VTaAPNzqJF=IILuBS+|Qj_t`b&*vT$D6L-!0YDn2jYFkUIH0N~pv}c?7iyrF? z+)Rf#XNRUE)3eW!!@1*hXR~uGSRRDJ`7`B`j*!i}Kq-I9w7{yWIel)Q*-hr%rU!jx;qx$cEEq&p@)?I~>MbT;lXF&Z=XAI1!YPk)aU9y-L#DGxbn(om zsfEkTsd8~No6m!}iEvJL+k`lt6*&gpLWHP1prLg}kq&+u{){Dk)G zAI+(}&gpLJWcKX4ksnoaPIqToGkNzor@O@o-Lc37{ao#w?w+y*=JUik-JN#JYxa$E zx;w+ROzj@$boaisW7%y#c(*yHyQ`H$*>md+MNqE$IX))N>2BwA_u5wReiXmhnm^OF zhC(eJJ;9z3z0CHlZEa}|wX_AhLOa@P8+PtQLR*g?uV0&-)7|QE?qFSuN;;>zozvaE zb@OusC&K!0j%n)gZZGq?E{qR%I%Al=Ob_$8=I?lS5z3K)&b{^FGqs)bTPBXtS%Lg< zHkE$#pmE66T?jYiUu#;}BI0Hu`@m0Ep9|UVR^`OSU&#Y}py@pMV+u{D`|Px#(Qfu< zz*9TT;MVwg>|r5~j=H;XqVZluKAkUDeIdJX0&~#DH_xZ1r020ek_3<6c>5tilYBZ~ zeuu($;biNOjb6w)ZM2vBaFt0eoVvUp@CzR-E}{eq@BOXtz0{~BsDoku78?Swb^ zdA9TIbUuBi^XkaTRsyt&ar25qNvF386S&N z?w;}R_(ambXPkS#0wBwy?h(@qA}Z4}9F1~OnNGQ9^l_K@_##ANdVB8=p;& zOW&o|aMPiAITGSJ-LTJ>$1v+WXoS5(&eM|~3*Far2Acw%r>8YR2D;xVoWMuL(Ybla zBfh-W&(qU=-bDZrr0k=hReAS=mNEz`uMY|wrBOJ7kCZ{Qyr%R1ST5*nHV-79)=C*9 zZVwWuTp0*=x>8ap-Ze;4aXYg-pZ{EzxW?6HTV%D>5E| zkY%_o!H3$5WtI26dOn}dzf(UI;X`E-j_7)PRNN1Mqx^)UK9#st8t!!kM{+XZ{zJi0 zIhk-pICn40C4G%dxD^VH9s?4mpZ8w_+*iPtLH4tL-v1}SotI32ve_ZDO->~gY zIutTU9L~)T4u_LNrZsuRo;-}kr#G+9)KoMH_2wHeafLd5}GLH6Lg7%rEey+TfOZ~{>Y*od+ z+CW*rO#eesn}HQ0D+}Im75wx?*^)=fJyt!+9{;m)H>a47Y~81+kC!!?^+L?A`8?Qf zUi16%lzC0}4rUW>4HuuIxNC83uza4L$FB?cbpgM|mI%Siuki<=kY6w0*G2r=)MHxA zuW9b%j^TBndzCes*W@dQ?KiJUuZNv7ud#JPSc<$ZexG5r;Bx4G!0N%TY5l;Cj$e~c z8))?KYg$|2&4pi+ZyKzy{2JRjgq8f7e9ZLWqwe=zw=FJN1RcnW`JLytu}qpLdfytn zZ-4W@!%&A(4R;L6b6`JGFouOyA>8l*#yz$pVeQ&@I58fh1HfxX$3o$O0emNd zJM?5|d@M8p7s7+F(I{yzfw?<68co154LqpFW33wUa zvTICo2zU1*_&T;_a4Zpt7P86hLlzVF6sH}*HIg|nU9`#PK)5na83 zcQw&^C)IAOsasQ9vuQmz+4WR79!YM&0a1Jtq?7fjD=vEv?4kO|FNVrfbH*dz@WPCU_9!i>yzcKQ}**!YpqbghwZMqBt=_u4W3U$-=K(^jZ_z5CQpJXQ0 z!*n`+^2ojT=|_@NPRh@+BuAmnQK&O}z;T!2DAZM}nr@ClT@>IX$6ZQ&#>cs%P?xo4+3ZhgtExV8%k3!C(YN~hI6o7s}8qS)f{bur<3KlOG$fBIbByd3Uyg21EuRa&9lk;+)x|s}i zTi*j5cPTTt?&G(&iLv`Q$@MN3j!41@SQ2*JrKGoO!aLn@mx7T1&FY1|aOkbNnY1!sQWc)M7k8Fa1e zw4u>xfr58K!u!>O{ze{aS7}|pz#aXY8&69@jc8Z_&ywJcHqrlRTSgQ{~C(xO??BR2LzwmLG)b|*P41H zL?09Bk5CLb#|8Za#dVBLA~q^ay%>_aTJUkn3US`?cLlwTV&vZ`=v@>e|Dd3U5F0oc zK1?wVnsa)YpmD&Q(>Nf``8Zh4Y3Rjp`f@>|a85%>hx4Jo!fBtNs{~D*G6x;MKzmb9 zTWD`0HV*AQoNOf}FEfqKFpeesiEvWqB%2GdosO2GQd z?x|z#vHr@+?kL>9B*!Z&`ElWXoGw*8@Pwn`{#a-vIueQB!rGeJLuN;8AI16Mo0WvF z#MtgcctlBQw*mb7Lgp}-`FDh4h9i|4a$F0Pg{1l+KrjiENiDznw-67B7R`EhfhcNUDBqNId#)d+f*u_ zvd#3hqsemNR9V^E))5N!H0`Oc^jCIOwpQL)*<9IExyj#Ai8I)-^_Bjey*PtSL=XOS zG*x!_E1TZkURSrhy}ovPdtGhi&Ud%h)>if)r3WcJND2D=e*E20xxL5VbJNDkkM{K5 z*m7g5Np1q!)?V4!8|=t9u~L=hcg#Dd(#q{%yAyJ-KakXnI!5Ag`$_Re7zTQ@g@co^}n_1^Ns=GRXSTc&PHoKhu5*LM(Bg5jeSBJPw?X zGKwH^c(ihPGJO&iAD4u}({Zg3oDJ^DEOBd4p={(G1Mapg>bC+)bo;ZwJp|nSX>fNT zP3bOHg-Ia$jNtN`RBu$=8sJ)26T%FVHvv-43F5@pU~h)Lp)Jg{_>jC}eERW8eTx8r zy_Odd>D{5K97l8;J}S-&+z`?ThbmY&x*t?r9JofL5svOVDwpJ~!bim&2d)@tgroFK zxKj#_=5;3Aq=KUxJrnMXf-9N^cTU04qLN7-!ydR8d}_zyX>i2~j`SdQcQ*+ULE;3B(eIjm*$qsW1$mV3v=t3_8Q>YwH{8 zx$m&P!rT4r0chJ=QeF7gkfQM2VSuwNA7P(lAJ=q-(Pt;v(6Kl6H$DD~{o%5c#m^MB zxrWNm87^1fg0>^)dztU4&Nml+*waS3vw3Yte$~sKd9}C^6nup>HW-aGcGSoQo1BJc ziXo?o%fWO#hdbiPqBizMZ=RI7;KPMnrl&1D^wp80zk;?XN}%|eR~ypESL<0YNp)!a z*}s>#KTkEGoTT$?_T>;;(01TBN`I3rb@jQ1T!`5xh~AG@p*C;sCpG!w@vSwefANXM zZFe0n3bM*mXW6oYeW&~K!X&Tr&HY{MNGwobw)|+`pXIgXA0ZmQY;0aaJ#`X#+OFag-Zu8yfjr+nbCmLV zUClm}V8z{7J`U+*>+dc8hoYabGkNT-d>=g2{e8LX7}Z6Nm%A-5xPR!` z=4B`G=<=D~=1x!iv}#cxFMyHZC6ouulCBLHR*3~Dv0zGxjNSUm!vB=zxr2p6M&AuX z&3*R_9q5CO{H`eW9>N|6m_yWbxtUY_KEb?_+`THuh;=AI$lc zV$NSlcXNjO>9P*GqsjwA0W;sSc2?fk=jCN?wo;Gvv2t?+slSW(j62h}^th}1nOD!X zpggQ6az4m=i|$V>X^pte_&QyD;_&f2w!DoUDLd&}bIqi&rtGA9&8o>f#QAHknk+!< zS#!mt7x98MmrWKTUbv=ovIy~_HA^NJBVMv*;bbx5rE5HsC5TJcxF^3WAlVn=TEZ-+Gy-&eul z_TcYz0ohmVvu}f50NWC%gwkh58){AK+*Y=gR}k}`$M}QSKzxrwG})HI(}9No{?gt@ z4QV9fs#l!*kH^95Ot28J@ch?_tAx zkKw)7@ZM*5?>D?3GrSKN-j8FD2)7bUlqxP+7_h5eQ0N_=m74E=QQ>oCyZz>)C zC=~GfkajWaFwE-!yLu0}no9R1OFs%aa~-^f*RA)x7k%&DZ+H(F-a8EMord?I;XPz{ z?=rm8_5CuGBLmI%=F;2WLv}#=@VS`n$F^D8foLw>w_}F(&!0WT8k8#o{Wj2Cddor2 zp@O^e@6J2yzK4&-knxeyTUyAt;n%^EPyIDJzrD}|W)#)B_AeTXmgn5gAa-%MZb z{LMpk4WJiEncI3{%A|H@E_43oo7ztLI_Z>ovHSMI+0XfPj3@1B($Aq^M>{WEnKSJR z=IeQ=-k%q1O;De~yD*+J+e5lAYarDl{al*gy_ecvx}Lec^S4Hnp*$IeaFLz;r}^t| zwS3xdwU*xA2K&iP3j?J&^!?oSd#h1?OX=;M7i+(#-dh)ItyKG4nQL3IoqM4V?Z43b zDYg7M-rszW-+QsjSHI_UqkNk0+}_wAZD?P}Vb0C|`<>bc=A7ewub$3S8h!X&=y|7(dqt|vwAP${!N2gL)In{xyw2Uu+W+M??daDd7+#yvpxyd` z!N_m0K|5;ZZ>u#sw9PSPH?1KzuEdnJfwtM9$(-Blb5w^DkzBJ$b22a%mt(<-1m)6n zIs{MdS@)D<%5HDWv?~^l$7VMc)i4!R9T`iQmQJ$naVuMOEWW2c$08{&%%;v}q=g&FTrVLzl4>N{ejw!pf=@jYtJ(jh7pxL2GHCnY4 zHMiWk+wM^7pstl!H(PIrG|tdJ8iiSRY)0lRDKdW+=;ors|=Hxrd(f zJQ%Kvgy(5WIi~EgvXz!@I5n$t^K(aOLLF0fSq%@FDa(1yPFaDQ{Sc<|I;QN>?i}Pp z5D$5!uaqxMvsw(f2yTup$Dwje**T`{(wccS&A-LsL(v4h_T;{c)a2wk(M>UqDLZRb ztsa~hhX1A6?xJ}=S{C(^dqV@!WNi27ya^)9Uv>NT&8xii8*-M%jgsYB8PlSf`VMqf zYqQzaHX+r?ff#;#%Wcp!N#gx;&Q(f|4UUh5&9_B!6*9-=!DfbTZrwAk+Mk<8QPqR7 z#K_*Tczd67f7z;6ZN4jY1OgIQbLI~!_dV;29GLS9Jp_aB_S7=9jZNtu;NNDTvhkB5!cY9ZeY-vz=8)|B5 zz}nH?v@PV{*3{h2t3}A0n%cMfx75`GU}Ac{?Ll5qj~4L! zJ40j;O{DOK%4Ga9DbqWY>+LrMdpf&A+qVhnYOnP8yMs;byi2INdfR(KFb~olYU$h- z2yP7pg6;k-yDE|cH&>4h#70AV>q6p}3Sp9b-O#QIlq$@#1-JG3ySuk{p`#sBc9<*F zrOJeHOxdl4>!1*bul|_XtZ0S^VmbkPv-&6kf-tUIiJoCCbj3N`*hjV|JNI&W!)B8|UD zqZe!R5}u#VteRno#xK_Br5sN>LuOd2@k=zil;gb;&Pp}@GR~(n_-0t9@h{>0RR3L~ z@h{c#U#jsh)95mdUe5EU&Z;lh_?K(+6&##p#=lZ4?@EoolJiM7 z$_y(t{#6?7)97-ZKQ$lAHGT!>r{+tA#$Uzxq$_ELRT{sN^W`~D#wytn+x>a9Mz7ZB zYc#q_qp#KIZLC?5Pqr5~3YyNAlWoX4g-@0^R@?Z7#y8js!7t$X-5TF5+AVECUZ>IT z(&#npJC-Ii>9xP{cCA7)*gmw=hDO7vl7c7OkO|eG3v402U!lo1q@AD7e#gcy(D(&x zt&Q)|_#U>>#`kJ`FFT*QdC}hsH2wninvGwm@eA4C+xQDL{zCS*Hhz)DFJh0`_=`0D zBKDw-zgXihW(REiB^rMTi`)3c8o!urxAB*1{H5&oZ2S_9U&5}l@k=#+DZ9+ZU#9Vw zu>u?a5{-We`!`a47s1Ug)%cgPf3fi|)A*OMNgKaRr>9#=l(SU(Oz~ z@vqSMSFk&5{1qC11?#i%uhjTgvJM-6rN&>$HrV)AY5c3$RW`m)) zx|Z}x%x{|Fl0GctOL|P?2L$=ovYTx5I(EH{u4WZBx`ugebS?W=Y50N5t79+O==JQ& zHoBf2v(X#aT{e0n8@AD#ShtOCU=22UGh1n+-wk_v)G{-;VBzA&)Nm18?0Pn7qqnfX zvC+TF9{V4T_#CQbQb2fUb%~rAt z7SA5E@q_H6Hu?rOV54tjH`wTQR&Ap@*h0{BKTtKvw(u)Zwn@*vYo=NzfGN zepzZ<&7QK+tJ&uTP4~l6;~I7tG|8qpxzwm)m*e?N^65JS*(Uw~o|i<^cLuUeyhYFz zoGxJ1g0A8;Y%dF%_OK;}m;D5SDgO|s3)#zpHrun1of7nF&M#trY2z`6*`0!> zJ$#9Q=bMdR%ytNx_Ut9bQr2YSm#{U0Mg)E-TP|q2pG%Bo%qwWK{+F;{;r^xioBT`J z4+Xu8<1b_17PQ%(GWKOb(;mCTSkC_3MqkeUP|&oeE-|iP2L(OM@he!r4Syx;6g2IT zON^Cllc3G1D@`W!dKAeBBuLeCCa1w*!Tm{4)BR4T$zXqDSnHY z{ehTlUlLtOF$}BMi1>ODw^0nsf7H(u_lg)1TlrIzMKs#M>w|tMB3jn(tmwy|i1Jat zF5>^IuvLBz_TU74KgAfI&rpo<`D2PPJ}*%G24ml&8149>pdo_O5XlPv3*}?pu6!Hi zAg1x8c}@LLMe&2?yrA(I5c#RUsNU2+D^cHNhzY+!#B#j&xFX*;;eRIfZNO1};}d2- z8{aV3e*>L0OzD^;Llg%E-708I8qN<0`tySRn4r;U&c`_O{9h3Cc0oTZ=pBOo6G4AO z(2ofE!-D=(LB|CBsG#o@^q&bD+IzgbKNoaZ&|ehvZb3gL=nn|`F9aPC^j`}4WRB}W_j z>u?4%InE77o96R}!lMJj(axUUSmb6{D;Fm9+jf{X_M5|znJBvaE#61+5`qQl`^MB6%c(hpPXLqX^Oi6rs>fV5B-jv0*&_=m&sWOP6q zFNtY}*M(3=GM*;8WVJ?3X7ZMi@o+!GL>w7GpRsjm{V=TSPbRrD2J|c)hiK(>6+?r$ zwIh6UbRzEGLlQ(PpL1!_#RQ?*FcBS%+#>NvZ`%h5g; zs` zDYtA*j7`LG#E%QonW;p-xr%hZCzaGHRtb@2H5N6Y#S)_z8mFnv{@o5*#?&|diMsA;H;L?Rp4>wY^jAZ$K6GGeCj*HKfO$(6_EhK!sI z89CG>cr^&^PQ*j&2BQ5FyF*+pva(@wMova&A`R;^=BdfV*|aGmC!=eUO&R-OW5zz% zn6VEwX6%Cv8T(*E#y;4Pu@5$6?1TD@eNdmV59%}a!TOASus&lStk2j7bs77hE@L0m zW$c5xjD1j>u@C0iMU8T6;|Ykp9IXneXS?aMMs6lL!f|?BTl+@y(QMy1ipM4QZlmqp zvi3mE~RzmJKQ#qBrW-3wL zaiq4Lg0F5lMUuHIk=spMqP|t(P;CQhWsrMDdx9Kc*765JmG5_;E0p&lQ44<&=V{v!>?t1m%_CGOK2?t1W~Y=TSNF}&n+DZEx( zw-G=Di94j>?gzh5f)GnwSi`*z-kLPHyS4h!yS;Qc>0eUTy%o5|H1filyo11@Dpru! zTeSKe1}<))QthbJaOZ)OZ6vsq=hblk0bETQc|Sus{##?P2Kmy-`<{lY$$⪙p%~- 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

    )5j31>Bv6q5ovFkvZ;-N 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%0AMv33=3Y{8;;# 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

    I%r09qkvKH#yVyNo?E!2Vws)*l;R?x=1G zGH76$Di>j0qXjRM04BOmf&Spp>h%Lln(u9GLX_v+mAn2rhpN_}7=*@2 zhw)sfuB@&HE1-y;S(j|uMxIv!o)Ln~;m$7Y)N`b7rBUalWK+$0d^Z8@Oy8~oTMc<$ zXCCqcr)%3Jos?MaK9Z(#OC<-QMwfP+swx%hBtAHD>^oS)?V)>lzz5>a+r_1#^~AnF zEyL;sG3f5LEw*I^7fG->^CQQ$VBMPCR%Tyz&A>TehpvGg`#y1>6d1n`Qq?=^|6+T2 zE%{cAJZM`kEt5`NGt4DD(2L-XJavsN$2Rc|FwF9}mMiVXlbiTg=kKe41si?~>;6CQ zJ$cRGNxjz)b6nrZbKQ|*?)pY96Ei8!xf*%61a>OHCX`_1{95>{Pzj#5-7o!6!ke`3 zq7=VOm0$&x;Fr+YkCk?(@z*!5rV`Z6-@n9+^ld0Zs`U4v?IJdhG>6h_-nnL&^U60h z$bZFSjA^83+L|)(ABHH_u5}5aIiK`D9%$+kd9%2>%)HFFVzu8h-u&=MjEf%oNu^1M z;J2MU=0|)f_9%WC_o%vZ;TQeO{44xOMJ$E~vAu)sb8K4p#pGj~ z1BXHRm}`N-cO2f)2I~}?B#rR3XIMjNah9)7{0A`ngpaxn9L}G&T#=eQ-RDRvDVHw3 z3o(j-p{@5Zuyz~d%R_a(@e97mr9DF!&SS}N9yfg}53Fj`NU;X_i(z(Qx%B&YMUZ30 zaDM-Z{LBk(_?%O@m}SHnmQQ6!|HMEsS5dC1YM$4>09QEVGFT~Gh(`8x-mPlh)??0c z;?6^##T=8a1j^4v-$i zQ)O`h8S@scWoRuzKI1i3!4_36j*2ShACD>*mb30PPYxB(dV^RmlhbaBC#Q~#jZwM! zTUZitoVVcrQ>UE2Wsh?47H#*M)%!d&V`cit9>j^(L@P^9h7N~Hs{`XptK<{4()-PEtTl%U$-bW~;2zJ2jZvdw(fYDxBqwbH z7Hmyb4Xk0zqCr$&tjG|Dm#|0B6Qiu)G#8mPQEU>$X0QNV)8}Gyj45^F9kD^Ii#A#M;oV>Pc1pYQ!L}N`UK~YTY!vr}cG%QtaBT6uVV4&0DWv6r`S@ zImd)o5RaJVE>m!1up);+W}!RUi`#OTzzR;|UT7ZvPYa**0pa1^2G64G;qUAMYH`hz zRO&|GkZRGq5>Bf7L&N)Ds^x&4!~6rEIWb1H>d|-|$$Y}5wo`(;c~$d|TT{;wCaTbP z8u7QTUBoQwOFI7^Ckyh3wqzdGT@3A?=bcM6bNTL5k)Scx0kL(e_9Q{vA0qiM%%S#yk}eTn(z1IxS`FN48H`dj$J2oYk$+X>H1`^X0>ckhCs⪚pDO#dWH(< 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�-N|_#Bnu7%+UCxH42p$uxYc#+>lm&yZ@NycWp<; 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�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 z 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 QQ4Cy6q~GgH?U(I;0B|I)00000 literal 0 HcmV?d00001 diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/TOOLCHAIN_GCC_ARM/libublox-odin-w2-driver.a b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/TOOLCHAIN_GCC_ARM/libublox-odin-w2-driver.a new file mode 100644 index 0000000000000000000000000000000000000000..cf5b8af77135b27cb4e804b32b709d1f7be9e817 GIT binary patch literal 1863404 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

    d=g zpmlsYpZVy7S#H&OGwtL$#B)>cqdh%ReD1%x4sipGGu9zq$Y<%j11mE7Ump>ku zb|ZGq9v0gj9dIbxl{N0#vWDxPj0O(o#;iQ6=;Nd2eztDCM_2yqdYN*s=`^f)3v{Pr zr`Ehu&JFitzvmA&j^AX)k-eAu>Hc$uy^1bi@61~7-q+if$%vXVOFT01y+Oq3E41Ux z#Gc0O)p90#ctzVc+QRWDUI3E2@5(F^0;?-ZZ-th>uvJ>x3`-xJPOaBJ9++7YYgoYR z3tM(ZSN4>|)+VXezF)TPUYV8W`@4v|x2Sfg{U-@GXf@b@T5Mt!>m# zbnQzNhZdarv$j)<7+ZTaZY3RMabcT z*xPl}QQj+hS01XVv(vF`tC@}&&^csVS^vAlzE;{5d1+r_crqQ65cjPz?#J#j)4?5? z-ZdvUm_E!3L;hGktzpy7!Zz11g7d6ckOPsCWf~z+iIsM z+!i>(9jotmt}MUyR#1_wlL;`doHQ4_rDIv6;CIQ=5D=q>y~J1-^SKZY*#yTtq^$@I2=Vu zmCBO35M>a;?%cWzzP9q~+p@wplvRwlW=qbYB)V{CQtdT5M>nEt+w7WAu!}(@=U>$@~r7uMSnO-gz$X3omt_+#%lO_eKOd3p;7r-t(BJh8hb1>iONOBiWaS6` zo;EYQ-YOi@gHs6_hs>XWRe0HPI~`|_tE!45_fGc}W}qbn&~mC9b&rlaipRzG7FCKc z>s&Atj)&W7+P>btyY2n<-PPe`@5?(ws5-Z+aNg^({!G4f@?`}rSYs+$1#@h2OH~!y zn;3V$q$37zM$2Q%Ox~oHsyY$AJDPqdEAP58#CXfbMO@9VW8b~;{f&8>!<&d(Rg>E_ zc-}iQ&gm_@hgg62<&7-QDq@R4}41V;C{?#Vitr6~*88|<8OK_z%Be*Ph$+cT@>V8!>a-EnSj^!S-#@Tn$H00K1N5^muy-^_TG_OuiyGW)cr&Be?DzS zUio#)c5Qv9{p-;-thYNmHso;0NpUS!_l2#5e|9+dwc~-Hl?XhH{SszdXa#e77xanX zRk3eIiw}Kc)YH!&*!oDc;NX~;^@M#wfYll98jE`NLs`!ywXr*~$*^p5b(T3NKc>67TFux>HP0xI$uks(=S&Bo<5y@r48~~Dh*{9 z=w6H5%8~Wl-s^vrZ29T2l|43HujsVH1+nGG#W527>)YOE&wjWH+7qRAY0Q>y#c3MX zA#}0~Ma!9ZTiJ!>R_MAd){N^~cW<+bc5k%zL#VoW!DTFwEnUxV`xt104#j24URVkF zm@WST1A)(Y&oSTWR@p@UE3S)AA{(g=fjK!Cl^Ed3Y<%^k}m!57m#8mLJ(;qfPQy zH4@mjDXVH)$G3`bxFNSgUgnt}rTL0HaVL3pg{hq4I{6M% z^S^UhXmX9(P2B%$d2I_9L2pV~xN5X86{}J%U7NqAx~94Q zR;-v@yxKhD0ON1!z;D-5tMa9GZhFshD8C}PEgB8w23b*g8bGpCBp^m8VUgN??KJBZ z0VTgb7zH-341wI2EV;}V^nw*Dnrh85i8t2b%#2!`R_d6X40DyP#KV#_Io#_AOB1nS z8BUBijcv#in}69dETpuB-0KKo7$mr^b@95ms!?i|$|LgLx|G(Cb zMbO`1XpB>urJISr#p;?K$N%W2;AhV53*e(OhflC&l$4fh=J$ShQXPIcH?RyOYrhTh`7eW}*%P};KcNEvAecT7^ zBmU_25+k5C0_|$EG#jk3D#I0FUu$r|tWZ2d^1m5S4f# z_!{p&J$O4IM80+!k8?E4`f>;GSdW=re!I|kKA*e3>;s<0AST$-{nLYY5AYx=@$%to zyc`eSeh6s{0_p1lkKD_U>!W~j+J=0{ndx`{@y>$`(}60HjF)F3z{F%f{v4D(1g)LM zEB4^MW8h7KuujJ!58h66dcBN5IgNLj2QMEWy^x`Oh4^W_dJkR;Iz9G#+G)I64_;uh zlh0Ejtns#b@HU(VZ=(k<%fLIwz|(VN(7dJF4m`G7?X-R0^56{zo~~EZA*}7wXDmQm zx+j1aQrGk}-j6(Z`M@gypZQm$r-+O#W@T)d~QiP zE%#T*p{tE+M){zBZO-@YkQ)F+?TAN5ACO76e+2RchVy&UV*Hq1<`e6(p)TGShj@(u zjR!H8GsFKU=6oYt3>T1d@)!r7Rd^->ZZF1~HeFh_3g>*g_0zFSyPXHNe!53r*D9@_ z>Cw-W^7%F!e_7&=;~a5!d_gJi^rJyX7+0J#?v~H;$h*0mL+%b4Eaj&pQTasSIL;|| z%V$gZ-ee)Mq#egO=5Be;va|O(wWat(;5g1Xcgqi#^1n~w^N#O0KknFW`7@co&(*S-U%4LrT&cfYX}fy@%8&HOkCgJ=NqOF(9mhHBZu>?{`PoSkrz9D~ zIqh!wu~I&il;<7Rah&7smJdmJr~e8$!nop`cei|=ly|Ji^T_9W3D|0S|fn1@r(Ge7h|2{nF8(bwIhEAe$1{Z_;F6~lkl}8e=mOIv*bA^_*MAYk^f8l zh|eGK-+}MQXNmt(^i24iGwdT%IqGx127~x+!a2k|<3Ky|r+MfLJ#+te$&-Dd^;wV~u@oL4A|G zcfKO+V+^Qh&KkDC?IEpZ?4R#C06{TbLz4vPf8>BIX$(_pBuQxB4CR6Ey*rK|xmotLUpB4h}U-T*|j z^2#}j7c5vjZ)v=7Z4CtG%Spa^( zvHNu&_ywT3Z#ZC&q*ZbS22-i65zlal|4?W_Iy;04VLp*t)gBdnIh!+?H z$@rJiud?@wqCKso!M~qA=pQTpPs$IWvtamS`c*R$3_`jkLyN}R^y?jn#dT1BywcH%h9}0tIHs59H{41ecD2*LP1TDQRWA@u zJ6WD@(TCoL@EPx)=)*4AUVy{=BF-K3f%6P~;OtZ3Z_o$MA^O1Sg-@K{(+AF(42M4L zWO+}akMfGrhaR#>@~@}A4)sydo9M%cFVnA5`CP5)^X_OvbgyYv6I7G) zQ_nli{M6zZ#gPzQRq#u5Dr1%fLzS~on;Z&fkf0sFCC|yY2q#SXFgxW@&VoB=e_zhr zYsE@WWXYK~{t8Qe-!|u?*!;n#k7^*IrT?5n_)o3h?a1j$jgll zOXOBO6ZLmnGwzFi@|Fk{t2rvlWKq0#P*Q&&^nWAugGzsNOKxoVp3z&MiKa;e|M6V^ zNgG82z~?+Lp4qTd&I<{|L_u-)#ICb}wnKiwpU^cL*AK|+P)pg^Kw_YR`TY|o zP88|KGiB=1Fc%>Qa$l8lX$ZX_R#!DcVs6A4232+TOqaT@Oh`R0r82lf`>Ais`4l3= zFZ!1JYv(QPn%k1r($VtcmN~~V#s^|$$I@}q!oakG*f`8*^vRiHEnS(I+m+E5vCgjh z+VPP8+Gs)S+S0r+MX~*y?O0khSI!hbIukerphV7+%!p0sIulmdGZcnHKP+u;kyeTE z2cje2ic3k(uwcG^QF1tI*WXiRb9w`XK6M?EskF|0?`Xm(pTyn~nB|uq3wPxL;qS6! zL_X)0?T&`u&JEX;O|I*?zB~8LJsDfS7tQTiFg9?`5aet|U%Ed%Jze<6^(+qb3jF09 z2!9)AFQjpI`%^i2{`sV=nZIR>hU?oq9dX|MT(~QOILAnPEJRaPGvVWv}0070m7lU*>z-+EIi&VI4R}Y82Hmk49k*M!1@2MRnE_qcBG^ zaD1q5=iFS($g($fGwN8ZQZ36b#a*3NB-iIMatks3LV zG}xPlS=M&mefr7QKlSxmMZ2Qke`_Fi@-~u`yhMFi;BPsr@S*2AV&b?jL-akq;qoH` z3q{|G_JSj6@GIN0kNDv4!Te?m{;pQ5?`H@6xO%@efWIT!tiD$cWa8>S+A@x$!@sL7 z1Ao7Y@b4WMfU66e0c)4%c zhLO11vtbne{u+|E90=j6cw@$qG4QR8WAS&?Mys#>z&KoO-k68Kb3s=hD8ki&P1#2x z@E^xK<8$CAz*&4?I<5*g&A{KXO;%s!feUeU=cbG!GvP1YbRPcx4B;gQF2dFCH+@=I z+Ba)sajY|8Wy>1XS9IVp^eF6)zKS_K=U&dxFiKw(T7Ba;cH+fx=Ul5Vbl~4m&%#|_ zfy`VfQ&_h|$_(2m@*%Z-LhOa-E9SKI4cs{B_`=NU(U^l=POMoY3hH*CMwCPj<8NtX z*zNZx2K8=BL?dF{j@!2-uF4koS@(4(0xxIp+WDbhTz1SK9z3&mu65q;pa1pI;m^L> zvON)KUALehHt=|wMMM#XR^&oh)5KXv(wfH0Sbx`|zJ5p6S6CFfzw5%f&bsnrnfb%^ zgfNG7=UmomrmJg1DE8oo=`v+6>@TW&5b-XlV>+MNU!`*6dSKtDa)UZw-Owp@J2wn} zCWM)#jwM%AbS4IdM%6t4lun7Vb^j|Zfpula0{M1rPmk$Z|Ibh7R^-;<2+6+NHq1dx zV`6xu?rYcpd$X^7sjO}wEZsTxs;)xJT4t=vVQFU~Et|I8xPKOUt|fJ&AY+G}@1bW( zntJmLz3Bdnx`x#=^a}_j(gpkTk-Fc=)LDHqU~L+#O&dQ>rF{&z@2RwRO3l!Q0>tT) zc8uIVT-F87hW{@q#T*%k(@mHs%z3+n3hNei*?DGdVBQQoJ^+1()%UlT?6jTgU?@Y5 zzm#nBDK40on_FT=em)C3TVrETXP<@*L0RJaj*B6|9^{*}_w^2z(F~c|AHB4j`EoOJ zV80Rm-IpGzXlof&_oEiEj=XPobV`}0I-*}nxYd-OB zcd0TWp|7Uunxa+d$?@F9k^P~ z9$*1*R!W@0y189TRx;;?c0_Q8riEEAb;^)T88SJLf~*@CMT$_nFY1{M zEc<>_dct4!aCA|3^AVg{gR5EH;>3NMU;N9awXJ=Xn@dgDVqb(d{iJ=ctd;2&!^5ZntZn2@mR5c5`*xhU-Lq7jC4GlC z71e#A>u};>iSW&KrfB!~4<{az^rP(sQghe$I}_=V&P0YNLp>>~yA&E5q{O!N&P1kc zBU_-gMTT{>Pm)?+`o6bnM^6m#KOD9CCbU{7hO|Xb_$4*Hwe-Zi*64{0N&OVmTcEN) zm7Yk4)LFKK8h4+1yRQtzZp9qk7niY=t-d$98ZX_{f||KL z+!crPekpDCPr7fqtm|#r+Fxj6y|8QQvt46WiK$lKlPatz_5`f`dRMjV@3?a1Z56xS zgFQ%Fw_hI{_|et@m2=Sk+um<^0B!PHsOgynHS5F#w!W0Bma1|HAw4?KRBg_Em>;N+@7cjM%$&O~k`zs|QK z_vvAO^yADRe1Cj8>t~Ozsa`@Tn& z%p;JwNXk5n5Z0lG5OT2$DXi#^fg27MV-1tKDDC!_jRk#{mN^gnOYii{>6}wMbokDY!(!3d(H!ICf zsd<&5xlr0j3-$BMQpnq@;E*;ce-SKX>Cf6X{8`?ASn76b;1f({mHiZWIm-38D%VkK zn6kW9mW+Kb9ldX!YzuRN{xg+}cK)?>M z-@1>_gU+*H*|EXNXTifqed~X?KI8uO^>f$9Zl7~U`4{c`-}XfMW7`uM+XnNfOC^^w3Q<>TMc0z;>C6>RuAI}-0Z|CNWUB0hu`*4F85%WJ7 zc%USb&I~Wn+s&?W{Y_Y zI5!<+ofdsH2QXq~+uTTlZ zMu}Kd*C`RdB@y#v&VTLy3KQ$;BqmnVo!Y1{d9M+DUo0{K@EMZGckNSWgmf-RhZMA zi8m`zSkV)JMOj11nbVu1e=a!I^G%iRZ=eSmUrou!F)jt|ys;eD8kpI2Sr^{8^s@5m(KBK@M)l{NJQ^!cJMP2zZ@vLvFE5Jq%o)@@ z52x&9>|p+8bdJD^vaN~qPQ({tX=+IzS+}`C+GaNXH4&-$j?u@Vd3l%iQtqcQB#KPK~J$AL+d*p z`s>-*)_v&xd)x5VGkDzgL}qU{?%udAeQxeMN41qd+^?StQY;B9_- z%t=X&PNh>wZQY!g#U`rhu?`v-BNqm}Q57ag+S3|srUJM1^ZX-9DS zaoNLI5&jc|_;8hmH$=YGjKavw{`X(}OWWEnoveQHLe1K8i2R4A&f!x@7p@?W*Fj|;iOm;Z&0|`U>u?C{d8D0 z6Sj!HJ32o7BoBInpf^}rmL58scn)QjkuA#~BLmT6?88>PUvi4?#9ulYd=g{GvfOUy zu>EThPa5vFiy?C{WX1q#YS*Z>M5yT4Id|UsOXT$&pzWMn`hJT3+Gq$b{-u2FqC+qK zCAwDhP3ahix8WRMI@Z0Iv~En&y0Z{7-@m_f@}(#2{5_o5kM~{N{}F#CxKqI$hi85B zO?fKblply(xTo{4nc4o{!-<`dfqVFNtfcVPX^rC>{4)~i1NpxF-g_md&Ii_?uvUHJ zzLHZ{;ac<^X`ci;=ixfLXHFL^km>z7-oH7j_xgJUv1jlEKXnG{<`01|ACg}>SqodI zcD*fSzlXQ`7vDRaXq9n2C*ykNJ*+VHKOD{Pc|_HZU8o=Sig@PucD%tdhEeq>uZ4J~ zKnVwBxovMRIhGc(OK$6X+Yon+jJpGftRtgQLJuPKkIUHBxyB|sP`dWm#N&~jb63Kq zC!`ccxsf-^VEr}H`t&C*MM@7RUY6Xe+dKctv@Swg8xY?t8DGVF4M6*X9G4M&b5wqm zyw@q8(!L-OFL-xa=<{UvDLN?b^_H&T>d!*%mYh(HEocot|4=1+EkmGHv z1^@XjMmV5(=gIrNqiTd0bo@FW$07zE&#~|{WFFrw@izmXHEBpsHe^xf zB=3uDJLj%{ca-caZj*9NkW2Uf^OG~w_eG;wx-N0TDbX-0#?heRxDNGvjn+!6%iB1% zvvY1G(Cm{?JMnE&)&rTE(l(SaY@GeBU8)zzxX*nz?Fdf01=gEy{_~UH{vdkd3|x=x zxw{fMQiT$ZhwC;f%R@lOL@h~E_a@xeLT|5RoH;5zLnP)vSa23l?mYROZ{tdSDGbEM z?`c6hnpMiy2upCc%9c3xGtvz`_7|%_tffnTsS0(if<{bggtk(Tzjt~EMFt)pX4&h# zi@O5G_oRP*`t#nZOL@2AC?!Ylub0||DEDyJHK1=$^wpP+s+)xSmHjPiP-j8a?mfd@ z->`0w->`1PH!Sa6s?+ri>z|+Q=q zvu>26Ly$UK;=cOqBVBC!Y@h6{2c>!!&^31)_e^>l-!zChLY~D;R$?!|z>ew~rgpf< zxpde(mTqB7ZV0>F$T~BmLgeRGjg1xJ+v(u9XVmfQ>2GuOx6upRhRZLS*36cw|8#wW z)lt(2=0OWjB6@9jHqJQC?efq2NY*`H#po*R0HK`b9sdlTy`M{ey--&G&p~YsOoQSk z#{h_H^EZ4BfAiO$p1BZ&jnxgQ=CA?F*iW8Z@*@iEsy?&Xmc%jhmWF&Nhad*;>2l=j+w6;}A$dw2MG z*UQmV|7Q-atGDNFU;@bh#`BhwOSqBJIgO2L>Ck&ZLIAFWzQZxodui_c?I=SoOIhLPfJbOVZ@|nOkF!4gbTZk~?ao(xM z`w^~9yvIOLPCJeF0|c0Oap18Y5Rbmb>&3N+*9RhwFzqznI|wlGS`GVhz|(mDz_p22 zg^J#+!IT`y1b!x7H}E0|qkY5i(|DXKYU2G0c(g@3ZC?(AOgvTsrh|B#->UJx;K6$i z4eAIRt8yBT=h>Qg@e(1nq}h0^*BXy&jPO6%&bORx&+k=mQjXVGdhil+>^0o9ZzO&i zZ?y-n4|v)p;vo6b)qC(tVs?8a-e~+Z9_PT~f6~5_z+?T?PGjHc!JB8`jfJqrMuZV&LI_(&_xmhMZYnb{cpSAg%MS#DmuyN{z?0{3hOW23~=Ix6*_6z-jPSc<^2~ z@Fp90_j>SNJPqF69=u)ykM|ax-hCdtUjeTKeC>4pz39P97>HE78U&Ig|YHw#i&Me=B zhJAbn(0DwLmG&_Xx>gS!dHl_W9Pf+pq`L=l#L!M(^E}pnMQ)jjmw81;yaxMH{?+l` z3_1K~S1a9rL+*S{z^5GDQ2Zd5bTjjWxZMcQa`biHQMd}rYI|{m{sOMo9X&peh5Dw z_|#{AZo71SA$>ne(ygC~Rg`wxL-2jzyY*S}j^myJZvCLF&y2qWKOgwicb-Z4q~tj6 zG2qtElFuU4FUQXZKJ|-}Do#!?h)Y~pbW_geKcGqZq?9Cp zpY6fV7WH5ge<6N8@QGiEpY2#`j^myMZu@fN8fxmt@$-RyFMQH`hTxt8#H+*4c6>5& z9QQPE;|&*I1DpEI`1!!6KB}^EwtR^u72m-hp5*X?dmy;+&lGzQPW*T9^MOzN*YUF* zpNt&GJrLabc6$DlY-lz=Gg*yoes{83+WcOFW_8xrc;1zemdQS)3H&lcD3dhlE?+=@}@+JtN%wu@cW|^?Z_Z9QTZH%ZH@A zQ>#LbFs`^~gj+t(BacqqaDJ?ibIa#@~7Im#C+n&}ye_FJxKdPDJKeT9og&w{beXhv@r{t9ys)KXZWI*c}6d>-Js@-1On|c1UpaX7t~qqsH7@ z;xwBzxHgigu{Y9K!(C$MH)9tHy|shAmxjVy!5wX#Ju1|}X8J&^c)ua=@7lT;;t_mwC#%9s^h}8!1bkqJdEVK&j{nD7^~w<)10O9V+y6@g{wT& zULPvU)ovhC$^P0xt>l&SCBxUrpR!M{1Tu7caeX@%+jwmLg-L@~A{Rdv#J=l~@8fpGQD0mK(UJuW;xJ zm{al-iRW`j+{uzA`R?k&i$5Rf$KnN?&yrl5&;FHb?D+T@_C;p z{ixz|uczQWLi~dMWFZdGk6=#<-0vvYs{C&%|9Ser=ewkD8{Vnt!_JfRJMcY#{+IEt zNdI0Kjr*K$J3RXLp`O8Ke3R(||6%3-Liztx{^B&nSN?~}kDvlmZytTv!FN{1_bd9a z;|P7k`wo5BH#q}x_oKY%L+_aKb2Dvv8hw;&Owo(z1NSS64&a@adef92r4Rl}Mc=9D z#}&O#(R^3-?Lhj2wjBZbuX*i8+_hpxPN2VXgq@w87Ui zw82Nr2>0Oyg?!AR4ZI%1?lb)V$#DPPaHnVMbUxaM_i4ku!*JhexPNH4-!|MXyyKI8 z8EvF<9c}azM+|?i2~aM5w87{7v~NSZp^bX=Pp}#P_lA9j_CC}%ukN2d4t5mnjyCYW zLHkR{H*L@j(?e z`>(W*pif2Hr+<((+)HSKzRU3MHQWyv_VcvSFT72=M^VnxMtskBJ>Dk6j?zYcmSBy8 z@>xNf{L%(rYiWbeb+iwHU)nn$2ik{`UvyNgPdC#BKhGHMH)sPlh%#V!gf{p-f|qx? zxrV}Y&e4WE;jeUk(31(MF!n z8@8uF56`4M6W>s2qkk%-{WbKjw9#*t8~*jQfw$7IchH7B57CA^@1YI)KH9)}i#GV- z+7J1Egf{p+P8<1rj5g%=IBm%9DcZ;v*MexHxrp>o97^V0isGYv6#WV9yY+sb@>vTv z@z&8seQKt?O&jY1l)`@AhUcwqZj|>vF+6fAZOPMdZ*yt*>G=2+<^7(o zrhJ8T5zs{p-7c=C&tebbI4!?X$Aw;!M*Y6W6s`AUsN*=!0KXXbL|+RRb?7Hf%DP`k z%Xx_!2|Po2*c-S+?5$gfy`ax&xh0Ap8ftJWUqM>>OVg=sW_V5ochvc`%e3^^s)1<( zy!&Rkh~vZAd{XCAtIbXNo;vEuNzu}^EN%Z8HI*^bv`Bxb? zA%$5jOrZ_B2zWl_ZX*qe0Ubp+t#rKqLB#M=%h7PA*j3rqF{vk~tgI*NbnWont+m7V zl^n*MSb5s(`!@IZ_e0YWOa%KS$7=3wWk&T--kH>t6+_V;rj@GY_bZ$DG`rQ`-P)0N zMs?>7D%k(K3cGuKNaIc;jpm;9;d^_Ol1Ffps9ui#$YIc22$@b7GHvT#^MMcAC8F_YL{_b8)ko zt`jQ#X|K402zx;LpAq*SDgM`6xa+j$R6cY-F+VAgl&m$A(#E{Bx#Lyvkp@1#C#1X? z<@hSjuK2)fO)X-ahNMJ#l+^^yk5g~%v+16{zBxAhaCl6!Km2fWRsYiSk2VLfA2TPH zX-sYY+{sx@6T^4(b07R&xXZ76ac+0er@Zf~%ECFi)K^Gf3i=BL{WQ=jGv*JL7}Ui! z>MB7!5!91%XT%Bx?j(b<0F?OxH<-Z92Blx%jtA|%{oD~x9&&87>92Sekqg|eg*~JZ zkyEt5Phe_Jr5JV8hn9m=AEGAIo_{wv`C9e5 z_{=X=kvi{5Ll2VT#odXAjP|hbvv>%w8#6GpHVXv|Nb8JFxy6z zhLdW2%2((v(NbbAKRWBf>YaKx<5}-)%ZILo zyi)}c?kI*ftKsh(HQtY%)V0IU8ZNdm(Zbr$!u+rEZp%*pKEcDTK2eMHzp2&Lyvc3v z?|bmVCQh`88}STzvya=S<>OYi3sFy>j{BOQj+aJ>!qZ_5gYGY`T2MFS?tV4x(=XkG z(+2`y{7tje_4ivQ^sBQ{1}}^S*v~YA>aXHmN)Qh&qJ_}#Pg#sFSyLmpD`eMYo6OpQS0~vj_b>p#>KWwe%DNTP<@BV&{?2opxFHSiNiLSopH$ zjMzy$dj`irQr{B&{;}}M=3mCs4?ThWsDoKecwN9*ru&);o14S={p3aQw>7J?|9qla zQ)8r@rY+Ha^rk4Gn~dTY7VcPHI;;E31Gv37+}WSs^BJ-4+aFF___^j{-114RGRUYb z^7fl@td#LTIIS1I#Cb&koO{-hA0T<_B>Qygxmc5 z2wNb+s=}Y?NtxlsxrR$cN%^~r78WkT>DUr~guFieR$TNd6Ajeyh`A<#S~N7?f;tvq zpGlyqHqgZxhYpI`pr3z0brSl*d&Ib#R)85sM@I|V*ZzT%1zd0#w>`QuI#FpY2 zVu^p<;9{`xM{iE2-ooKyhR@@T|AZDo9s|&rB>NuOcH^N7waXUclsjjdDQZVc-k`u>Fj`H|{Hst zp*sz;h3K*9p6*M#za4eG<1V@LMBZfh96Vf~`(j_1b1!m~6}$J~aQ@BpDZiy(euM6N ztf#2q+tJs1?&~>RKX&NCMJM08?)n=rKkk7Z3u{Vgu?a8aEE*G5tHv}RL)v%Q(nd+* z%qQ(bB{kG1HU?CU>vuogV&BW+v9w|WXOi)1cJ zMQ?xW<$MlcY|M=P2zWCzSBd)Yqj693qw&-z!^DUv=BlV0p&O4=;$E#sy8|P0);CGP zp8kr#%X-EPJbUo6sK5Ktp3svQ&wTx$=as|tM^582r61~u(TgjGJ!iAs9I2~}5qz#i zPn&PoLcy2*H?>+HDFep+#lhIcGgEL1UTRSx;)FA58d1GN61NV>C+137f~T63dhHLKWUC;T$NO`eio&1k z_xjzD{hSq)1~m0ZvF6u~W4z797(NE|;67c`k}nhPG`JrWZkNv$OYG@<;UfM{`f{7dfA%zvA;g?ZHpyHrVe*TaIFWEoafv<0#0r2f0RB z8TXS$@cuJiGj3Oh&IUg?(sLPk`aeb36eARA1=YiBKX3dp!aD!o%RGHjRsBsGY8Y3zC@I(a%VnzP%BbUlzFyxfxwRRKYQ@u`mry1 zy0;93diEVeDSsv3sG~l-dmqSMPd>He{+$?#3|@s})nE&f3?*ga=?eyJ zs_q}hv1(V?8me5P6w}Ao?U~9M_66@Neap{eWn{dsoS}b7cTMvJ@4N0(iZkAK4bx}Z z;+HwoYo5BeChTpl>~>YU{+juo`YEM&n)dvON9xtHYFgTFvWi+-WICN|vLJXgbQ z^2NCGy7E5USFe;DZLaFROIcm`!ik&fk(N8{H>*NF$j4pwE?2`t%_Z8|H`VvuRc_o0 zAHwa-OjG_cFhAgP#zOlzA@l$Lw=LFV+K}r1>N9uvg0~3gi@I1po@j|7Ql+2$K3YBbysj$e(u5MCU&xPqMBrc{HA(+dTZrf!&p@*-_JGzqK z2!B28q)8xXYddb%h2U*swZt3AbD~s?m^N|Cz^gm1F=E<_R9p~3;qu<&%Po@7#cP~p zB!TTN+!3Lcm%t#}Z)D#h6d7Xj z}*@KaaQ%*>I%IE80T>}bgkI2t!rD`wk?kI4E`L%_VOoVZ5&I)nQk2EZSR^jJ6Jg< z!GjcUBA1aaB3!<+eP_G$i->rgtGBTdtzi619En;5Ig)`5xRl;n;mDLB7SR{V{!U2I zlD@&Dwd|1Y$P>w^B~p}n6agM;i9qOokK@Syqs}AeTPBGGSbO!q-NTk(#-?Zrc*E?@c^g@pz}pM)*l1@m`0A74JFV z@!Ku&m>-GvUwF3S^}xYz!_r8+zre$a_b1@7UJ(ylC=z(%5#NgU+$eZn_*?Nj%XPkp zH{OC*?!aTgKZS5*^-4!kWEJbuoWcu@!5TL5T~U%mIp%pCBmhV`F+rV_XhBKKt%p3@soJZIrw`Scwq@<(9!vf z18)lk#%A~vuNpsz$8*)z@~DN-??<>al0WKcu$IU3z+<|^n}eUk`ws`+8;Hd6l1Ada zvv)aU~ zwcu@Y;5`q#W`s*4<;Qd1R=h0W$@W$cV#(j_4!m+qM*bkdV9Wg8;=r2+yk>;6JR0zm zc;9v4jUSu5{XXo#y9ana15dNyz2LxG0X)ucq>=pn!h!dcMSiR|l0TmRvDUw4;6)^u zK}Y8w9C*(GkM)@OU5uZ^v`NSMeT4(>IpA^rAdTd2r2}uT zg+FvP3A}3^croAwBp7Uo*Wtjs)q)36Ch%@|;HBqaKVlNRTO4@z08h4GzMCLexceP= zxxmX!g7>Hc?|uv3S_|F}9eAa{V_MS4{C?ko_lO1WDiAXc`TdmxFE9$;pB!}MphHtn z7@6){j&vWhq`Mx}GF=7p5No}!0iM3iQiqgyA2{%yvfyp7;BlU0#aj)$h6Hz}jPgNe zZAZ@mkL`o?w8er~<-qG5MJ^XR@P2FIug!vYr2~)q*C`8WWPVpU@ZPZCwS!p7?+Xq* z?t{0Mhs56P!26R0?-~o?u2f*{e zpXIR`Kbhb69C&X4&x>$rWPZ;&@CwlwWxKo<#1gL*6EJIiIS0I?<38xD^`#Vehk!%= zwpsA1LC18^?F;h(n3FuwLq0F~gmmkZ&=Fr6iMKZi9rGoPe7++IT{67mN$6x+#FWp^ zB%w=&7fV7Xc_N;C{?8P7p_6G@)13`E`pfpma!dBUPysq?J$MZD zpd0a65BB0mUdh)AN4hoROqn4#A-`5fx}>v?(=zX$bEI2-rP)5NH}IJ5Zb!N+fR`-4 zhm+9Bw5@_xO%l3fa&7`0{VVaKVY*;BVHn2WRSvv$qvT`rC#3s=k#5jPiFn%+sp@Gm z-7kR-GKt8bpM&la>3~fd8h9sUN4E!)7oLHWM$*xiZHQq%@G6eZyF5D&>(X>XZ!SY7J?n z45-)1YTPJ!dwOYN&6xC@`??U$^vw2ettm_|!x2A2fp{(HSz8S0GadAq$^wJFRHTRkKdBo`(k+I1ob2>oWhcTZ zpN;rYj}y~di=S@Dg=whA$sRvf*@s}pXJ1Y|PK;lJpKh!(aPm9e5r4e6^W2O--Vxud z8N{PrCVTo5lzZUM_)pJhSs7bwT!PkbV|Y%^!l z7dq$*6>P~8^bLZ(Q1DZWXWbOa2VqmskUhO3c3X;HMj(d=NJE5ZU9GC~qRfj9((+vo7nVL_P?cdWr1uONBmC#_z$; zg>a^SgP`Ug6NxVBDYD0(ri?*k#@~XU3*n5v5kK8blMlkC-XeSafKp_{XB}`Mobg$P zx(Ub!VY`)?j`%Yb>a}6|di3n%lII339SiM`dSBlt@1k?eXU81CpWY^*zxO? ze>dox5$-}b<+Bby-PFqmVY~5WZ;#)gcrf_@gjjoY+1~t_p5~y}lmdfZug{uD&#Z-* zlvs=#E64Wq7Ft4yzt|DJSm1>dR9x{hjT>LJ?RZPfKs@0-a!2?wNB9ay_zIEU0|_d# zX4A{9taQ+?Oi=3Ks~zF19pP6v!twHBF>Z{^_WZ21gfjiB9N}DnGL0K0ZI5r3JgMB6 zeb~dfl4KgUvcVC~l_Ar(v9e>2-y-Byn;>aPJn_M;v^nV89O3Pb@ODS|HIDFWM0zF< z*Er}q9P}Ly`VI&EW(WOdLGMdYaplA`Zsl4B{k4KVD?!4Q5!1M_vSIQ{|80W)jRXl- zK1}1r8wT5}X|^j>XkRoQ{8ZZ;2<5xOLBB(pZ=>HK;>tg6rPD#*sjM{U$)}2Nt8qiy z<`yHIeS!+Noxd(CIr!P>2;Zsfwc&F%Y8tn)%R#?O`KpcoT_!P}+{))2^q*Jmwc&r> zLEo)#p8$={f43ukw;pKxb>k{|d;WF{y)6vZ<-glOf1QK=I^}mZ{;zY;?@{<2k4EQb zk0bsbJ<#~;#)^oYpS{XojQH$tRk31XMsX`&bkKiM!EShAbpF3+6649OT<@U2UZK8a zntc3JgjVR*R_9uVQHl?F#R*Yg>lD=oRo70OOW_?L}vu1w@&K6RHP{C*>x#gL2n)OT#| zb;=Wln`3$|=1b2RZhlkC#r)`3a7#me|6qhS;5irbqjwFrj^Cz?wJbrA-Um1N*TdVD zd5-X9M!25-HA>j#?ohsDxXVR)o0SI)H?eauKl!=g=KD!5<{MlumWDL%INZYyx5qMJ zA^il0JK%6%;&5MXxS79k3i^vJR4CJ?K;@=>$Orm1jpGQ36F$PtP5nITAsp5N5Yo@F z>zfBo44@IGcf{sw<6MrQ;YMYizObLcNp|wacA!R&>pVuIAD*!vnXw#r(GSWbSTm2u zSZL&-7$=n_ul55liNh%Rv6m6YS+IY5gr8zN*pfidr6#s+;}DDE=*q|gE7on>f?aFb z$TARxCmrU2591(;%%vqulGeGKoP}gP36SIvzy@)zn&qHJVz2xL>-KR-WJ8w~-n#1_ zNyrWVb|Twef8aT``6t=oZ`qNKB+Y&ON%r!~RKb{S=X}y#`xYrME0(?Ta3>+I@9OE<8M z39<;(xNf&q7sW_Hm%D5xCcsFowM*;PZm0__*|22MvZhsv4v)iZIvXoGuN{Rk{j3kU z2NU|qAibrUjM;fu7=nsfaTrKE$pbth|Ii*Rk}*MTBDtcYMOQGYGbO17m@R%nevu6< zKh$v?Eun(g$ZpA2C)CX*PCJ^OY=EZAE>a_t?VF54l_s4%hvM8&;)s`ViYRfgOS(;L zbR;+vrXS+cL!C#rWXci*{ed0{(z9}GxMUJw%X%JD@~a;*vow4IYvj2uBi)e!A_cva zL@DZz!dH}rcrs3SiDz-HOFS6`E_xJ$BbL#XxC^j7ktzB}N0O6VqOfJ1w4^=CkuDp# z$)8kXYddLU@Tey`;^34m)Y>T~`c4~#qX6tg;>cE;RaZ0ywyusgspDC2Eqeq(Y|Dq~ zBilj3huwjm0qE;RYm+WpUuHY-qrV5ZUe@1NUGHLkg?WeT8U33YZBExRF&W~QmCOuP z?9t84RCRr^u*39+y%)CYLw(*$`Vzx`t>Mp=G}rTr(oFk@IzH)qa5H`l{Slw10hjYX^2>QR`4I9Sr;4?D@`EfWE_~2-(iM^(bfpZJbYoTV z?wE;73+SJjr{^mZhgQ1jhJ6F+@o`S3=c7N;74n8$8|eO&zGpPEPG1wxyg=2zi~b)& z?=aGvKsxXpqzyUFG2FGZA?J05dlPNobA^ih-fFm6UgY~R+Q=W}T(n3pSIS@F3tZp} zz5<5+WAJx`IIu;0@YTck5Y_{QT$9qFkgJLFgh7Y$&4-)$rax`Lzfaf0nF;)@hX2imE$TJGAEF!K zkHdB${ikSy-)Cqe{pV zfxUw9UNZE9BE7YABfrEUZZmD9vynFPN4XMz32or}U^9OK+Nck;w84KfZTRmn+)~ag zH|D38Ht_DDjr{b{M!E}O6ZbmWNQd%aJIREdnQzn!BR%4jFudL9XC@l$7WHQ_=|R^_ z8<~z6?)`@SW!eR*o-S}Gf8vO8o22S;lI_1x@Aon%t73l%?H3py{^wx3&KvFh4WqpS z5290CAQJ8U&w4*0+j|i{&U%>M6uqCK+(f(g8TA(Yi+T_KS2CSqy*)9%19M7@ICR?{Cg`Cxyug*I?ReDE*I6Z}pf9r!Jwjs9HX z=fYhy)#%SaPkz{cT}m7MgvdYKSI}+Aw-=AAEQjf3`V}lo;+>*e6u>T{i{>y3wd1;R7oevWp%D*A!UkSh9t%m!6_ug+YcioFsX zZ{8x_+r~JB@#zfR=qJw6M!SpCe$}YA3`7=OzccFXU!V^eUPU}C2t)n19@-0x{46!* z4+r#q#&x+d&$!;0XUsPC8|^jnjZBJs?>6#{LM|sBJcG15jCyy0QSTSXXcYd?$eNVjt&8WH#Q=L2fElFEc>UY2I%Dby)U%fh%uSFWw%JiA<4k7iYBM~orlq`sq<{XU}=*UE$C4z?>sSoX7B0Rl7i@@o&!N*2UXRuef3qz$My;Xh#ji(Q@cp*GY`?BQ)W4saYyGWb zo0gvo?D+k@g76e=Q~$$z)T)O&^TLy$cl7~*c3JqrJ(Hjzi~4G1Udby>#L$Ji@T4;J z#^^I0UZE50-&%Z|q+UvYYxdHz@Xz|2h5jw*{DpSpzY5%wd(_KLc9w-FiL^cter4h2 zo_?f8ZL!eJEXtDU#7`AB6)!y;S7H~3m68`vd}G0!SI3vG3w?UxW$V>SrR=>SwWKl< ziJpwU8$H>1#{lx_V`-Izk2m`p?uOn`>Qmhd9FVqZbXTD9u@pm8VFS+^H!K3xwSNg(C-FGwp_BHzkJkb67)9rNm zZ$7pUI*#}2b-TupU!Y%^ni7eMSl`-L^R(KO-z?h--;+A9R{FnN*VD-NLsQ*|EljM2 zd_b7pgo42maLg<+q`Bv(HkuU1W_>f`xOZ;dNx%j0kwGxThUU(gGWLUDq z3q$B*-%kE7#Uz?m-R3DR&5LPNg{@udHG3iAdZ9_ddS{+Qkp z{H%D*aAV4mFcNPee5`oC1s>xQk5d4N7sj&{?*@YgmM{`;BV1OzH!OI>m3a92W5YWR zw^fD`@1O(kPZm7RrzPIw4!k$u_Tndv#Cr@LR{qWbk95p$7Jd@%mw2}3_Z-|TBWWbw zAUv#i9!&0~{5ZdrcxUiz#Vds)S$_ZIz{>(2-!sS``ILBA_ORitg`4R~BkL(%18n@2 zTKMDphQz~bhYjy)xFrTL<#U~bE(~|Fe0&Q2R=JcTUGmR-K;(&Z*E{g2v*I|yrIB*} zj00~T@M=LsybJM@`MA!3w*-u{?n)!^cz2VPzr7YbPQfMKR~>k~WBrH(GwA5N(}DLC z@M_>s{@ABTJl<7_|B3!(Av%TzxTTT&aWATszjMF~fQWdL@soH%4!m1|$ND0TEH~~g zwc-^*XtF$}fLP-F*@1UI@UkSBK}Y8w9eCxyll8vXprbn*4A7SS-*G(1JiIk7)J82ItkrsNd#NcZA?N3uY{4$U3g$JK_i6x z;T0}nWInzCIs`>zzzigGiFCl0ta8r~=n|$Gbku_(jijS(@m753434Kjzb^b6@MAt$ z-mC*wyumzt_m?0Dvpm9O8ms@`<7|+%E|NRevC>3xD2YsfXmt}}mheS+1@a&EqKTFV??ZkZ2>9Za5*@C`2foko!iSKpL zdma3+Bu&G!Id*>7vzvxzZ|vdY%|JZ4(IeZ#FL3b39@{i-^tg8V3kCiC2@>|mrg7t9 zDm(o|LEoGpF%~@xw;MgCoqm#_?@7?JM>UNbJ))g{vY@X`kg&%zja!-Gpl1(g8aHNl zcD!PNXZA{U5i||b4SB9H$bHV*vhC3+S z*~(uHw@&X>IDe9caj?8A@Yxb`@vqEqGrzfLKb+4niXQ(0Wx3%#F2XNVS`BwtxF;%I zBsL83zhHzP!E-L^_aR64H;nKG5k6Tt;RydHBb;M z!p02yyB0hW?^W0(V{FR6Zj;2@l;uUr_Nx7H-*oMpENoE|dlo)w%Y)>F#EI8-7U839>LPcule?(6m2tefw8XKXsj#GQ4}BQLXoE1uDOOkY_1^tmVL$_+RBwag{PcZp>N{cOFh(_hdb9f5;%1pPu?hYrKxrDS3qyq-4VA2RIw zVY}w*-zQzbdxY*v0~hf*N@cFr*UM=$9pZ4_OdLQ9yBRj)ZKMqxw!zFR^zUY*TWh$t z(1yE*bl~?^+F*|SFkY4sF1~vp68je709wSWg-trPdGg_<4LatR>9Z6gf5UovMX=%% z-+x!0jYKT#?TeL00Z+9DpSw8QZfeJWjTXt*_feUbl=kLekT>{(P=UH9Ez&3NvZCaW=wqjP1T1L zR{oUCCf*KrfmX0NP0PmZP$lBFvK9J@<>ngPIyaLyq~O*$J$>@P7VS$r}=d|gE@i%qa*ruyC z@5Aj7kDj>y#OV{?J8=}q8CY%A@5oZVrhfG|@#^Ma759DJuibfqa%mnR7v{~( zS7y^u;N*zB6d4lQA+WyJK_uqjF(D-&8Ag|{6X&WCIG+HZT_jM^U)IP>x4V+Lx7`tak8yv4(;|Nn_Qtx~nxV)cRXxR;FaRlj?? z%ip;D*{EmV1^s2=XX2SbwcI`EDt8a1;!Bgq|7`Tx9`&fFN-cIr>+tP}v55Mg_?D0Z zPHKxM7+5Y~kzOrM2V&~J1^XC7J*waEl01$ZanccocaR*|huhtP&+b!;vqp`dqooM` zCur&SkP{E$KZ|cmOfR%gIh&>4-;cX`{O->BPJhqUJ5-0F9=kXzmy)MKPqgqz$lM2aa$G1cHW8c&I) z?bG%hK+4%h$_F~XFH&}kZ&plsf7kbs@&S=@E>fP5NckvI&UB=#-{Er6AOACysvQ*a zJ;d8);=vWnub#R`qr?J`7&ti87f+8i?i+L0Of5S|n&0=#Y`F8p?@^x=toJ)a-P9*uiNp3>MZZ5jU!XBX z9jo(Hwo%W<3qHp9(f+n;+tY^FHWYto-?Po0eOdlA(H>Q}6+eB_{d%iZkLtCS_vDO} zUoK?fY-1^-wy{pM>uf_Rw70sXQkl=pqiIe|H<0CGbuTZxLb8a&UE}O$+>9ok@|uc{?L7_ z+t=OFT{0OlN^}2u!?{Q5t6vTk<(8$sJh5pN?tiQi7Tc5+V{V)HHDi6%)9~dpW z!o`It;uELXK(24{9(nJ~s`jlL#eQY;qoHHpul?o~XCOBJn=!4)+XCdt5R=s0K+fYK zw##4aK{gyc7fG*#A!Es|lCk(Zpb{sKOs+(o!H(m^Ci#&;)?Mr)LTyI~Mudv3>*nzn zi{OlOMfAUcz+o%~7sEp;Lp9E-=gnLi1_ z$B~#D@STwvB5Hq9Z*Sk6j(6T?z~?OO)l$7xpKXQjidyI3P& z7>%Th;Mq!dKiph1kVf*y^#Ut@kAc5@_>n*ICHXsmXDi;zaAO%IVI*%D^e7A8xbyz zUIc8FV6Y_~zs+0mKCs}GTJX+0@KRHBeWwyq;tf0SvZk5x!()QK3lRaNiT1G{cvnd< z*b*-f4_5vP0V3OPz=C&~1CQtW`z&~r3(X}CylUXpz@Ozi6F(_G-ZNq4kNS0!l`r+r zSozxmJXv2jwn)6sJMgGqHyIx9t+3+lwcyRN;PpE2-T+=L!lgm5Fh?ACw*pVfF9-_B z-*E?CXqBk@u}XDyH4TJTtJB;G|1yz+FtzjflxaNzw3cpw$^?@|jM z^~PBFYXH%YC73}+XUKtf4tTZjUx**aSIJ+C11}4iV*QkcbTsQ7c-7O*`ph|y#M=cr z@(oLv8sJF`ddTOmCZS6L_~ST0TbBJH&~2AQ1`Wf12Ri(Z$RHJyrBAXKrUrCp5m6dq(a@H8rTeLg z-~kLS!ZVIhhJ3HOcnU;8UW&XCLB1$&){`zFTVok^2@Y79}d=NJE5$-bs@kBkj_V^`^@KQ&3sUv)vBOHT> z#ZZr}9Y0_RW%@H6;WHC@e)~Y_LO4sjHxY|7Ez?j>tsUQNsidMFT6;KWLZ+dfS$lZU z48#-l$lAl@sGyTkPpmz>+7W+_Bb+k{(@@W=Jw9g!rlB5JdpJjW(@;;VJ$#;!*W(Ei z_CltiURFE(rv<%PsvN0J<3`K1x42s6Z6nwNTeY-odb^c62YsEA!paOoPE>?j4fVL% z@#~d*gMNjeueXu|zro>N;BafobR#|k*jrUO+&IE1+84)zT(qAiNB9*+I7>2D@g?*Q z*9v!uBHstM3U{f(_cTK674B&Y?-8V%??D=w0pLQGW9}D+9p74M6J8D?22s6m3E6Jmc(kc$(}Cg zPo|@1l*RPq-pnjRZ2Q(^YEHF82?(2JxJxBUv{v5&RUkjV~4YYwjnmgGYRTH> zyP69k^1SczGam*cji2N%&>BObOMQXHWovw^w{6?f>4Oq5AC5r!7F^rfzHwvwMjyK3 zw)W1>Z96(=_^M~komJ(l#NNc>m06tl@w{*78@O>6hE^arXTvWYb?nSLTTDG=@ zeLLEBb#&r`tgo`Ny0WHby;8>-)6(A3+M%cvVoGS+4t!L;Xlb>QIyP--hAT5Q*E3$d zK)ukNuTE48)JbZQr$kj|b?&~ltEClo*ACqd%O`%5R%UIajx2s$vwWIsYpn}y=-AqU zVDaHvxI4SH?Py=we(kodcK!PrVwj;b?aF7m_2#APOtR7~8-&~fgX zEZv_t=$c2N`?G`Y>QU&R&cw#wmQm;~1|8)i*R#6toQ0n>QqFR2&pw`pblb&~{)e*Q zFN8nVHMxI--zQmV*Pj|#;Nt%XtQ`zyY zErs#*yQa(-ndT#&+{ze7d<=RP!!Vc+-b^{Hg`I-@0;y_r`>vO?o6TEiFH878`l{TVjY2Pe}$B;h$t!5&k3kck6&+A|@S5MDVDCNOE{%_%Nc595`4{T@w`LVttyT zPfhSQF^{=K&S32Gn5wxoHPwRp3)p9sK-=|*cp6Nc@=k7hN25+fd-nE7hv(GS}dVvmeg?k3lcA6X|=pMIH?LJ2xexKBH43 zZ7cQ*@gsi|_R7s4jUB=MRqm<`6{cvOA?&g|KT)MSqvY`+7$J z`z~KKH0Dq)G~6$mja}9zP8MS1h!~j`oK*OZOW@4aDz&?TWIyMT)pXS+@>HnZ+5ckr zK);Cztw`tNVh3p3CMy@_9?ooWuH-`Ps!fc46ujSJiJy-6e@?`=rf%Ik8ab7>v~1Ho z9iIN+z-D2O8+fPVo{oF^m1%wchr*qq7oky!^JPygh+Wf4AU=p)+HEOnz#VNx>!}yl9lk^TO9} zlZIX*qm{{NqfB%hmMuB?=LC*bD(2Y(mhZSF$2Rfo!vyRh&q16k>zG5uU#op<)3H{) zlsu?Gl=3p8~CMr|0-~aQI*UZq; zO1>1IzvA2R+DPiz8im+C_=F;n!Wp8DA%@~>0B)75BpNSXaiH~?_>mym^ok$c7{zY; zXuQG~jaT{_+oHgECLYD_5PtUrMM<9~3*2k1beAj*70uf0E~|d|wYS`7E_1mq@*S)j zcIWj%Z`bkn4sA#qtQ%J0${y<5+tP8oF(-B;9*ihoyXMQj+gfhB@3z-(Q@?h+(GwfD zsP_DSRFYGFx4Z0uq0O7e^eetzoSQ0Z+uSxbwt2Hs79ZSpCQUi_W-4e?>)qTrPwi%> z?dLqG`>e0@;c!F9-|%Am9+CTp!-XQZ&mjjj#+i`#se)w%%d5jrpw}5%mo{U@U|-cq z^nCH5zNt@y+e51+9*zf<-u{*A(`V)kos8Ei#X@$ze&~=oKevLsJ{e9cxoVB-Q(`#I zTb=EH?EQC#-S6i%_y(%N_tgJpi2l{h&_rc1EVpkQ@6jeLB|=~6L*O)TVycD|ypQ6? z-tjj44#z{VL*De_ach*41MFAvHz;&qF+abI_eO5&|9QMRI_}Y&pKsC39ol7Ke>D5y z?4Lb_voL*)MU>M%y)O3o*M?HjpQjh+<&RtKKs9u)O*xgj_>M69VP%|K8;VDL*Y$gQ z9*ujH75JN~4B~IP;@zEl@KK(1h-WJ5Lp2rdpD;H{F#ojbtF2EtzCP}GUr+P;Q~4;5 z2At@4Ana=xj34q2^kGFF7V-Z7?s5?Xrzn!$=&7lX!hZei?6VCiNlM{tjXV2izl|%kH7JQ!kf)-CU&VW4kDpa?atBkB#;KX})wi;h ze~o)YoV*xI_@gP)1!WG)`GCF885{UAFNRV}j;_&94=~qi zBG-MIufGh`-xt*ETbRFpjrTtD_5M+Fnf(p${M!W2W54oolseBZAV*yd{}u8;rikk2RwM@zp*xc5{4n z@PY8WVqXJdw4_(~O4f*W@DTc-l7@-enfya>HTJ^=8AB7|?pXHO59d8~)|GS5>ALX# z`25&B^iMBb|EHnv$9uiS1Cx-igCbww2~SJNinYt$6JP}J96{;SX#a|O*w;7#qpn`N zc_QSnKw#@q{5N1umlnfZW%!%hgR7hW^BNdY+Az9dz&8d@!`{;e!YExnm3=h1$#WpdvrwuPdhZ(#6v` zvR`<&ZnCEM^CCG~SwwwMuNzTqj*$}EqGu=v?K)euYqfX!jsv^ZGS?7s^858(UyQ;* z#ee*-(KEFf!AMy|KiQ|BVWLdz{SVulU-TSoZ^`5N!!*s;HNcgaq z@u8PF^gpYYVTNHimU%I!IV5BsDojOtn+4vNs+8SDVjS)g#kV}@@4pa!s}g=M#(RVQfn4~lHvIC}rv$PG z(*mABcfdP@S!HnsYP(v@6wy1@!9E?-r~_4hc4HuVK63wDQ!+~_?HMLF+rP5x9*)y+y-?U_SSwnofT+-!+s4=3-#WShJ?#xYS9 zeL(F1Tj9yQH$W;X+G26ABQ~e$SMl-DZ-%EgsF&z{^<2$`6NKbI3H)Jjtt0-4z5a#+ z@sOA)6#K@-rZN7ZyTUj>oSuGGP1j@A0b`+o@x~ze{VGyZ%d&>Phmr5Am~#{?W(qG4 zOu#!^N=d<*(%8r4NRC>1zh0w>(I`ZDr!HE4?o+L%+c{3L9;F$*h|Bc?W@u_v%3!)y zd%mO6wTKA%`=hLH7cO}n^XRd7TjE*F<>wk(gfuXZ{==r%E%Rv3(sr`MKfI`4y(n|Y z$9KsJHRi+l;7heCV>TVoJg5Wv>yy@jx=Er2b0!(pFqZ^p*{B7qg-b*&P-l%9bj?zS z@)ok5aSnT>n8RW=7;793u6Q_{y=cnBN-ZR${c!k4n2&PiMx@jsz7?*kkSW97$2`&; z+Q1bOy?uT8IP)-T$+U1EG|XN;R1TiHFp3pSoU~pon>Tc4e7+JYN-3)pGjO-Nq9QF# z@8MlWPhW$Y3W{f#!NVJ$IF^@eu@vb$he}6n^_*6BFdldZw z>T9}t?BOIcGR%vapIXevo(vaZ)We$+-b7Q7t5g>yE#}Ljr!f12GpD|JJS*{j&R%W~ z%I-Fm^rd3{_+{~2(bQLZG~5*`X_&0N5byQrZ~vT4-7dl(3XfZ#GQ;(b$Gw1gv(5KC z7t0xc_IH<`QPjMlG@o}3^Mbj*ciWjv!?@5wnIdC~A=Pwqhvt`svpPYkVe_|+YJ zmhD9}5TlJa#~?_2_(6d*Gr{TIn>YeZMaUzGbS39g;QOe>cYaXkd?IS+`4*+wHflP08Iv_#U+Q8nQZnbHXnntMj)QexF2Ewde23C09?sW#@Nf z{VWCtJ48F1-d}|0PVror;Qrb8ktjyT2s!2q1NHL!=LL;fx~P}uyAytidU<}g;pdbm zM~{7?-*A?tu4|jCf}z2&0naPs?rX)&iEmjz>k}F*wuDZG^Vg>a@J8aAj-EW|o!g&Y zJaLVJ9&Ntp(cG~#U;Y}nya8h#(}_9aXYnRF7I@zgc%4|k`fRwj@g&-OKtqcUz6zJ# zr~PAzF1v^*YdI%od7J#Dpck$keq%c+)fjn2OFutfV3#E2^`fM_X2c>LYCxYikL3GZ zyg`$1*3PR0_PbaMO~yB6+GgXM{L)CCQ?-<#i-7Zws>$;VxHk#hz*6*SLcSa)rF<_H zJa_bWbf`0Q9>>H+leL^PmKn0<9P=iDUA8GGcxH`Z?HJSlD)IzP4FVNDKOq{s1`$lNlFI=Bmo_>09Sbtj_9+LX%Ij6n%c=jW`TBzuTw^Eg_ z$L~Lsh8gTT`(Ar1?@YS#DsG*hsQ$Zp2)}<7QE{i)S@ZJftI^#41Bdw!1_r<;uxbYp@=YI`&A;FT^PP3yi|}Rbdp)K3gN! zPHME@#?x0kz&Gv>ryJ>{4AE5r{GrwY;Wq`(FSU;U-DKFmY4!e2N+iFDb0_88(Qxj1 z*UU8Nr11=Locd!65p<69_mb3)d@pg%;u)L2e~Fp%0@hucjI$qBEURBuC&%bCO$~a6 zu7R|ECsJ)++&A@wczWy$q3m~3+^i+!_O6>UvJS*Q?R6LTwvE@a<0+W4)E~mu<};5( znUWf)J@XIIV|#Fk#hGJK|6bbP6d}j3CUeOPukZ2qFGJ2Q6us5A!?PL`U#efl>UOyg zE8Gg+U|`P=J{n($d152xi%p^)|1jRG_y*=9=2Q{$Sa@>77VV{YZ*v}2PwguvUd$1z z!(6dziRrRik6K9X>g5~maJ4`wcl0!Aq9?x$T0Ray%g36W3h4LfNplU|om%lyMhr9c zU`ko}5N3wKAie?hHcpEX)fFg#z9Dk^a2WhX5;M2R*u&&*3$(>7jE>|ns67?#LqDI1 z+Hi%K8|ia&V(K%dR^h9Z`m|zwbxs)gXW79}trB@jA9`sYLm zaLm0_pq@;W0B5!K+;R0usf!&|0({Tigk#|NU2Svq_6Yx&EF&5E?9yi*X3ke)7LTc zjeH)%I|=IY3a`b@cNAk~?)=_y;{AC!a&%feC3FX|XlqUtEm2S+uHxnAvYP#!ZJn>T zw6*$MkF~zu>ThdnD~YsqwY3!QI@VdzMVa*Bu8Ul>*khtLD^oGYm`(rei~cgC_{T0< zo3E7AH`hn5TCI;J?+s-vWVo*%@2f1KC6AO)qz> z9eAZB(wN$mzbQB{u{F}@Zd$u3ec&^A;u@j;jvt4vuM449$Txu5(y%^DoIX$l4u2>( zEL>8&N3HnDi5Zcg*1CtBsM^{mTlZYJa31bzK}lvSSU3HC{#S7G$bPJ(rdREc*LbgN z&TpvDd}0jn(8uUggCY3AnZA~!R-Qx?jZrv1AOvuEe;Q4vGu@7JG*KiA*D zpWDIT=}*8PG-oYW{QSyzhp4ZYExml=%Jrph6vHMw7nL8pzmlrKjgCO=vD$R4tlf{y!DFm=hx9{pC-Nr+S&rk>&&TfOD@n_ z_uhE?OOVM!1Fd`1!g&Bvi1p-R$SgxhbIOvEJ!<6(CoV;ut<%~> zt&Kj}yyvy}mP7NVhC}X>jJV>$x+I>|d5QJpJXh4-Gh*Ey?;|%+23Es7{7c+-Xe@gEB8~UqV4ZrnN#sMX1y$fX zPw>68U)QTO1@8lxYY#6MR4u#xyM5u%+p7QG-S}H4${?r>y%z87e+`F4!G?kLxn>ZW58~`<<_Yl95T-{$0em1_#yB&Y8 z^Hv-@7XPBxeRh}YS$v6n{OpH0DT6N5pb*~VihU`usr_s5OJ{AK<6ILe&k+u*Q1v+vklwmTql{-7o2 zE0FU?jx*;^ikvS@Io?pz+x9@ugUI`*y}dW7cVPys=;aI= ze34iEQG6kC1Eg`pQV-@O zq`}d6wxb@nM%07<-Z~HurGJAfT9_T9{4w7d{)@=rv;nRc>9<_XY%2JoYvx^;IZT7! z`yxDfUTcO}>I0(GE16G0%ToW6Hghl^D{y9w_aw_{Gi&>ScqM9bMWnrdhN$%&qSnu_ z)%pnPbzH2a>-9Q*K(^@!?jI8^u;!T)Y9R3Pg-gD*XTg)gCs1%&^}pWvZ=HDyf466R zi6Y*weEnE28lGK2incvD3puCRm!CTI#?@+-GPSL9X+-reYtCGFOpJ>GE%G!|j6A*V zj7PDq9mw=)%lB9{kU69j`?O4LjNnOrq4x?5@6-ByYtlCz8YbDF-l?UbEGYla3$FCG z$W`IbiF!6|8F}Sg^U@bopZ;bRD)eYogMCwf6;D5;_l`AaSE(hB_Y8<$g=?YpiM|DO zs*jRpKbdLaT3=kOTK9P3q`vOdn92zRsA5bvw1GHxd7$KgL5Gqd0@&2=zxH z)9C}O%WsQks|-IiSggOJ8Bz>FiYdk4i+f_nDMznb3^{t0;$!i7G4xoFS8oK8^iI%5 zmt{1mEYnR{R^tn8LXxP-iG0LQ^_|Ujd#kXz{&Fe!omj`R!Ja0J@879c2RjRA4^3(6 zE7=sfE8Mg0mi)*`b-Fu%74OJo%rmDCaV>)D5V`mcB32=?#-;UcB1T&5#rP40Pp;V7 z%>uPFCpHFeO`odIh%p|%H$dCuEvtvQw`h22J!#b0*%y6(h)?!=^u`8IbL;e7CioIG z+#>j#AXXXo;!DwCybZnG-@A!2a*H>KR4pe)9IhE5HWtBSx9S@p^pC^9+X2ioVjql=;)& zejgIlC&RDB&qW2VL8WYq;L;VCGQ`~;T-Q3HOzCHw6m6~GT=ysMDH>K$eG4%U385~` z7wu=Ek%#)&^(TAdIaniS`Tf91sbsmoK`EAdYErbGfhVzgGG$`HnpFQy80VPIkMM4o z|0JdPa}jHD?1^yRM5I@N)KCMF8s-S|y_qp^;u9gW5wb#Z!97xJ_4@88u7m2k8RRSu z{b!=jq;}bZ*da1Si~?NwKPS?hHh?eA!|#dbf~7CTgHe{CYYmlfqYZIff zrS7vI9m&_^%Zab^RV1GO{(QMV5nnxcpU~xnb@ky!!OL{)Kv{n7!4~p3aoOz67l=Kb z(_@a&GL!;IO-xA2+eA63hm%uLPWrb}N-Fd2OWHa=k*t=V`;Op4m(}+F7FprlU?ubV zQDt}u`uz*E`!;cROs3{zb^#5j~-+!FQM06bo zFQQLKKV|OFK5pz>Ge=pyf8}?ju>pQnoE!CMeYr|F4kNSYy88sXiil zk1<17&4IRJ?mHE^Hg@*K#b}N<<3zt5JT*3O<8hDJWyY_1g`y<*1(Ne0iI+3ycAzZMTixz|1IoZjQ{ zUA5eIV}DK6VaOc&6TKN(%Awohsb1H^K`rl(sbW+~)y5fL+Kqnl{D(VIwX53DJE4b~ z4^6xJ+%TvayM+?68#|*08g{dgOKQq*61n7F`abL^^I(T!O%8UT_1v=iq3FZg1KP+n z7AdPwYU5}{YuAQ0oLa_x7h8Er>EB@fcb{D}PSS6^#&V!hoc37Kv30XNAkRbKmT(*= zS+*0$Fn27!ng_o1llYyXEiIj$9c>>=w`75xWYI=#$F^&655;@DS$kQ?MnndnP?x&(YD*NubHOegqy#!x1Aas^Kz6$8!ZTc zUBZKtEgf6ycV4}!^a|TiRA`+tMyh^6zTju{(tOTUuM%Hd_)* z6raVfwX1W7alB_$d&`ctaA@n*t2RcKZ{4!nLWOfhkto%dazfPoOy=VUKS(6?a&EEm$WD4C*f^}O;%Qx?0?=Upd=;F z%7HeRB&4&eWk=UX6|GqY)}l3qHlkof=8bG63p9f)yqkFTEIX=@C5AP`9>>9eGmcqT zM@0LGpe1_C5}leoUYp+2K~9#GPqJik1I}CjpqH7u1OXx)HTU%PUwCg;hx4*grj!4A9 z)Tm?)J8|mUkz^7yw8c@#8gOX84PB+tEv;;C+qT2nFOHh>nw=dRD=KlDvLp2!LQy$~ zqhwhyLmB@gA}7n38F}>ltcqCs4xRg!on70EhA<*UU09F;M^{4#BZ$m|lfmO;fBlx7 z?Oofpb%kZ)zM=&_BXB^u0;5EG*XrGoq@hb&x;f$}8O8OSpr(Hu3DS@xwlRJLK$1{1 zpJ-sV-d>O0cI`&9)mn46?OLb@LjPm+6K!HgLa9A!!$%XK#6OyVHRhu!P&!Eo+P51e ztB<;)R7@MqDD}@qGg=k45y=KNLNvAs#E4LoGzXCp{*CQjtRa{0Y}wM$Wt}x7%J(B` z7|KuAW$_U-MrW!|Cxv>Ukqv5RWMfO098IC|V-zw#$+@dO2#?5(Sv``qXvDWo2Mmq* zZJ2YQC#_G+w+w&1e>VD9GQAC4wor+P(4Cq#*fw z+kwYByjJ91RGUM#|6c z!22!m0w7}jqkag9H_w6h9NbGJm_bKpjRVhf(8PlpgaqE@4m>aPkIW;0VI+S}J^JOq z^MQu^<>M#$3p?<5*L(xQrIC0W9sDh^;1z&a;$82+I|RJ763n2ZbB_aW3-HJn`76Xv z;vIJ2y#>5v<$JpW?*Xr1|}>1MeQ-$@2AC@P7LLxcm0Ntco-5 zIqw@Fh5#|3q9UFosNo`pix{sBB)kL&5CN4cm4qacXdp2O3f0=EsCc2pik5n5sZfj8 zB`Phb6l$rpRaa2kqPE*~?YCO%cEM%cx0hYN-*3*$Idh)8FLrmof4&_!dFGktH@|u2 za^_s#bLI%XMc~WSzg!>kDCDzYuftc2L|fnA3O;_jexc1|a8!RS_&##@Mj2c#CE5$n zu)b;Vbwjs-<>~;O>))_DqW(A)0PEjy!M6&AjfR54@^L*&mv0>SeAwB)Y)8v?f#55^ znmV-GVEN7wd^ONR0k(X13%+qUxQw!721j+B;Cs-iFXv0k_q5=v1z#-*OtAhvCHS6j_$C5t z`FlJ)&fv*}E_Aggzv;KW5 z_=cm9!-k8(^8H2djkptYEbQc?w0tLEe{lWdy7!zDZLoa!I%8}+F9cs5K;%0Io8_A* z_`33xs({@F%Qs%|JqtcNo;jaezBz*LS@5-5GJ~T!Q}FF|>dUnwE#Gp%=MT)>zb%6A zuMS^@!?#ZGtp#7E{o896 zy#PMelm5-cMjZL(3BD&V=yxF92Fo{F@a23Z*pJ9pi_P*~Dfk+(2w0}^cZJ}qa`@&u ze76a{ML0R!YMnDUsy7S1HQ-x>bo#dt8_c@C-x7Rks8X-OW&?2y4+y?rfv+9u(idlh_{jz`Z3z8X9MYWstJTE6{)uX>nL+hDhWIEL2*-v;nCBc1+Tip}!05ALn0N--D757ZZ2EZiB7* zM}lt)_^JV7eOF+!eEo1f6&ugsn{3Gpj;aToJDxuRpY0FM3zlz;;CmH(n@C`S_3u={ zcNlzjf9n9&@?9wST2Ic*H%IW*Y>4=}9KKb8FW=96{?{e=wt$cIWcyv?@O?}0jVQ`| zz4d_L8+LDW{9Wbny(0LU!M7K78*KaiMDUFRUmZa7?~B-M`+Xw##uek;2-t0~d>;$G zyTE7rgY&uN8;0{`cf5=$$=rSgz`5h)caDEIIDC@?-{eu5kC$f%zN-5o|GFK%3k6^4 zDN4NsyA8I!a|GXm;IsS3O#s{awh2CdZ*GkxGdQYO3BKQfuNLX-58^G~?SilS)cE|D z0G8nv!8iHq(fRnTuv@f1KYeUm=`!$KP7;;SwYaw!VXbbI0Enhwm#6 zUzy>5vJwKRN{8 z3*Z|L496d)uCVh;Y7JT{Odm#hgQ-beT;Hw6X{%v&l z-Vl5*gKujFzP|^~?T=9)sQ`|A_hYl;<)GkeA04dE42TZ4z8?v`M(~vZLB0pES-u<; z>W;tPfzNV~(2hSkhyP*N06r9<`MwEh`A!jhA7tSx5_}Ije48A;l;Ha)3*R)sx5eRm z*x_pydM$8_|FOZ=_cg)ypu_hVz_z}h2)@JML(_!8@_j7$-g5Y!aQIHf zWao~*yH3yid&P;sfievF*eQlXV}Cq_&H8t~;Cmqp-`Rq1l*6~p;k!uieFVM&*ln=; z$AyCLJn-55<7t4cf4pDi*7vXAvu#FB%hxXWsvN#&9loy#KD^JK@qXu51YZsKSP!<} z_Z+_O3BFO_TMWAm*4L*6-(v9j0FiG8He26!1YbA!7Qt?V<@<%;yWZh@4q(gY;r^G~ zeh0Gf{fFRt(Bb2JZuv?CU)dR%uRl%(&K-X*fUg`ptnUvTzNv!m1@IAPgRSrRg6}Z+ zh66;tJ=m;&iw&P07l*+&0(KiL-y*@6|3Kv5ivU}`F2PrTgF+_0cEMNW@a=W@?lgQ8 zjYH$WceHg5l6}SPe&D!2B(X760B3!tZsXq<{t;J7fC(1&jPUPz_*V-I+wWy;#Id~B zMY+vc%Kd{W7iJxZyV}GlY&{MGhdQ)d)7!wEWfg;?$~LfdrCu-rJ~<~QC8V08^1&9Lvjm3e;d(~-$01x&sAr`66MF6tkAgyfg>Oa z{02fie_r?v0Ut1aXOuG9A25kHf!{!g=g-#zf#qWuAb-Bj&$bAH)8R6bB>zY1Fdb|3OQY(W@iBUc9mqRfc#JEQUZBhipanf`FS%PDsKU&+n@t$jtnK|Gv&2`R_ZqS$?s| zU#v!${6YH{>-bcte>dz2*nP}Da>rUWzP~-J4RW&C6M&J^#`;gJ73-Hk>2<+=a&S+0#62GGw=O3egt3(lcPUCk} zeZ-?$je!;gen&N)f1Fxr{96TB0(Kv=HO#_Zj{?858qYso-C^>xO%kyCkmL%&cpK4@ z-(ijCFH;Yh{PZ~iyAR1N2%NQ|!0)ui^G{UIn*1Eo3D|wesDCF$nGxf6T;usCs~1iF zX4n(3`;d*;f)MSg)RXunI-Y-udc))|fK0&d1DA_<5T@9Omi!KEJb$@*&*VQ0L;`jn z@*|DrpYkxq2)`2>&wq|OZ1OilCSdo0Ta0)R&an|K`5oDK{_|7<2Y13Nuq9ykA*1~> ziXj>0Um)^dpoW_K95V^neMq)t5H7G0E%}|i+(CjS8-6PTrZ$bDh1sxZb#Ql&)xlv--?^IRwayAND6Y6E;U ziUK>Ir3ymIMzl=g4o$p$s@1iIpEE%Mb{~>k5UOoN%OrjYj_04H)|&i5|IE^PqxPL8 z^4Ey`HEN^DzXr$z_ADQ=E6i0B#u!QBm)>~!bJZgzKif0`yAL@LTMz<#G|B_}UTfCB z9ES?{YXyI;dfxEw04xE!54kPOQX9q?NvioG|9thT$sdfL`8t0ze&&n(3q}5g>Nh6; zRv;7j<=2PYge?dQZA8l?e#wou&&BGWP5xJbNWktxM)ki~=d*v3xH66BU!?e)iw8h3 z|1Q$`qyAZBvuc^dFSYUfm#Tp{X=i@6Sps$+l648fr8c5v5?9*s{EO9zCjTZN60rM_ z8?gmpv5jb%#4oY&{Fke-vHX{d{FjUTbs~SAy1?Xr7RZFE)A^qWbJc}0Mv`i&$iGz0 zGx>w|U#jy*?Y~syZxs0()l!q6dtw4d4j-~A%+(mi7)j!n)Oh``Q1*G8QrHu)`;eos z1>p)C(K3mdHJ-m&c z_k|!tHKm@!)leMYuJL6C?OZnNlq9}x8^?EO{Q3~z5yluvVrGovy97SkGXwlJ0)LIh z>m5=vU!(upKS`Wf#raohJjY%TR@sP_N&GSy$A3}dxvvD_i#DQV60=Agf4#;Z3{g?b zGAXHU5cnH3KG(AuZmTtnyca^$9bt@-B%U0I`*)Yd=Z2`e!dQU+iokzG z*w+jDdd*iFqN0%+@O@3-zb4B6T9`AyZxHwm8b2;XZ3trl{yu@fPw?L-@EZkwqsB+$ zGdhw4{Pzp|{Te?vWDV>K9owr&>GJ%L<$Ga_ zktBXuh~sx?d^8?+2>f#b|D49xhN$Pl7$Zsi(i`W0LF31SsK8$4=sw~RUobj{YXXZXX;Ne{-4FH zN%e}*UsVNgguawxJ6e7GDWAi&p#TwI=%)#NqR^)b{UV`XA@t=!?-u$!LjSJNpNGz* zEneXNOTy0QL~USw{z2#;2|cHuMF+nl@cj=Pn18g;X9#_P(D_Yf8<>Bk&~Fy{2BGu0 zMH`s^8R)30e#Ws7=fAs!{g*=jz0lJ_AK2fr2lXuy`V{Cak8^k-&Tpp*`$a-;HTcOI z->z;m`X;S+s4W7|=h$pu{eC6%L$Ul_YVZJy4*Z<}o&FWzPa&Snn=9-MLhls%eL{Z% zI{9j_72^E%?}hynW8bUoUsT8CB4Pslzd-1hLMLAuTOrP8R|xy{#vb^8gSy-3hc&)i zeaGl;Y5gX()97oozDE5Nx(zJ<9igX%ek^_%qd%qC3UR(!>ikH{{O1}w(q+ zH1?qWcc>eTp0DwDsc#xRPwQV%PmBC78T&YGU$1@>%l|c%HhM6AHmH0M(cgd{=Wj;m zk)se-_EU_$RqOYwSuEHD*5PuY^LYXrXusX$??Su~=U?{-`xay8G*O82t>@#Ebt*XK38#MkgbwkYlgnG#6W!nCf z>Va+p%lmQ6zD>O;?7ua3Vhh#N>Jwofh=!-XLH(aqC$l3=V4g|FJ__+doS)1Q_GQMt zSlf4~8-@J=V_&50{4{&vj%f;wdMyEOg>s-N?lF8w(UI{oGGtWfRI-zbkSq&2Eb zVTlvH1QeE#8r7)6#fR+s_j>Ipyib3G6{9j+u}TCCa&@RM39rkWSNq+ha3!cP(OLfq zS@dEkSS`Xtxx|ZpdEcgo3N7F;t2ya+^ZTsfq*HCqP+?9k#FKHArm%Tbrd59IicGO} zm@=-uUIF_g3gSpmd=J??=X;PC5JFiJjuY}Ih&g0Rhnfbj=Z*zTRfZEb&q<3vvNgX3sNr*0-IcNI(B@Oi}8k$<6 z*3?ukLG2=@D9yAkSsL0`_esZSZCF}4Z_X0ETh=dc;!12)zVS zFcP9+8FWh=Xqr0e2dvW-4d|fFg1*3z$l#lucd(OoHg&Yrx7K1sL*u;TguB!i=($hF zljv2(HNP5`R!zTn$;`Q_dExM*KY&LS#@A}3SPPcGNqx}BvMaKA~9U{Dc*(u?!g&`igc7jGJh>oxX}kNYlM$90e0`Z1lz~&NxHs z#!PnKHk`53PNea8E7MpudRedX6(DeYG8%2r+?BpUNIcQ7#0C~i19L2mIP_kh<-Y>j z%of9KCWC05uOJUf$Y5cfEX#wT+qgeww$5+5+O!=#?`Z34YiP4;(aPar<`O;Kh9fM> zZ6|Tw4@k6o$`_LNMVUU%NQ;v?uMhK144x&+yV}!hpirL2e2t!}F!^&0Za5|E=ofb^CNh^_WaN9-gb9L^-XHiK{&Qye;e5MIHHZdqVqDLHYUM**MyL=#(cwjzl`! zIq#atUtQm8Jv_03^i`gICXM)E)KT84lotihlIE?B{NQh4d0+JOJNecxO8zEGfAT4_ z@gUzc!~d+2A3-wTK}zJa^`YP7}fJ3@QaNfb;b`+ ztHkvfH;^M?*Sudc;~3@X@q0s5Z|)y?SY)b}vfI;ZBjnxa>396|Zu0aK3iOx1YvduH z<^!Jl56eG?@@7-dHKv`AzY*!om$7|siP~592Y52J3&yE!mno*a8Y7n)d5w{G7`c`5 zmf#r)mj4!Xw(~Yfj*Ay4VgDH=#vz~eU_II?Z}s%^)s&m4-xlPf{*JN#&ZH;MzIkg= zPt)$rlu%kJFULFpIkFz_zEGkZANlCVC`#a1FQ#YP&vg3%-)!)g8@vxmfA#oAemy>K zH~R!I67Qt9LUJ77Hnhsayb4zG-pkNg-X2JnXWP-%-`1ms`B0v2PrQ)A{wGft zB=fUg^q=E3o0dZV))Sk6{R^0OW+kL{GH-L2o% z%oqA=_9N)sOur@g-G#gxp_7;8kaq(lc@xAr{`=H%4|f_R{98zg@p%O$c-K;9;A1^P zKJ=rWuYfN$`NmO#SMM+2)$MXeaGW9k4F7<%5^yYVqVIt$GD;V3g&Z4Ec$l=CGu67^o2(9_(I&3l-S=N zp+x^ZVbY&9a*vS*DB;&9l;Ha-C6BM@aMq)o68S42S)VFOv`01NI@E^}^XOv8JiKt# zN(r8aDdEQpltVGkoAf_Z?#G7TkBKX%tOq|O=9^lRekmpVxQ`M%y_9J8f1-q6A5x;< zJ~8QhR*!z=Qo>I?Pk_(P6Jyw(D6fJN{=K05Ey`{l!)UQ>_x*?+9}Fy=@3ql}zvr0(A>rrpqfUtv1rCd%)a<0Z=3 z0i8TAP@>)TP{I$+OKiX4kmT3pLzYp;dCCPQeLf}jzso5xo>ov|KYEAqyXLrxat=dh zIlqG(`C8v`t=kj470icn7E*$@juO1>l;Hg)CF-Hu4g9*Dz@N|d0{@?3C;xxf?_ZD~ zydOcb9}ZH2w-=JU_V`x}oqkR+auy~0)$IX)mr{qnuR@ZC{Z5`ekmSjMJ<`3;R z{JWKS90&CHzlgWxQAn$9@I2%Xa8D{=?U8H|K zIG-80-}KX)X8!+qbX{b}-38?RWpuw|k@45|=QP^i4(4^%hyBR<3}!motBMlitCs1G zo%=`LJJGy3m-??fy*2@ltJhFRf3Gq5bbEoffa%~ZGwG8lk1-Dr7Kh4#4hL12|@>x?Rm7iUH))e0_V}kiR zp{#7m6r@c$^Qh!w2FHf&Yd0x;4^o+e7X?RwMlZR6M*j7AqJ**BXesz6#Ph$4* zb&1)->w<5v)5=)xtT)nY$_lnG=ut&4rq>j_nC>pf)!($+^+7?!@EP`-YQ${_aT|bJ zpAkpS&h2?~f015W(J!^`gZ`>HRRivq(rXKj*?D|wOiF(PZsMjHiEZ{eBx>8)k_4(O?=p*!)Fxics0Z)JL=>HS41RpO-|9Wp$%CjFTH!ezfy z>GSh?R;?=U**PNT(4z^KzqO}d>IC?sd}`lIPw~E&E1AbOdycC1iqxU0 z8XbI36ki49m+E$xhTjLp@Y2_#?c0yh9`#EN4*bD)d&x_G_%+N|%GRWRR(5_*^QzLG zN8!WIG;3~eZZ%N@X5tINhhEfa{?3s-yFO^wbw*Dha6c{B-oNIp^j&2)PwTgzIZ)$C zd!gHL;O|W0dyohC4ZGdwYuz8!J9B5{Houtm)PfOrti8Ycj@9>H4V#}tA6&vdF#W_b z(%a8NU(NDIrV4wKV_Ns6cOBI2!f$m?!PoI_yqcw|qSDmCV#e-E*AyJJa~xW5Y^p{r z9g$2Y#-2VeS$t)?@=r*uot8M1NDO@AtaRdE66wT8-%qRFc^{4(pGbQjd1e3d{)npk z(if{8JxR}-RMK9O>R+5pduOPk8>i*J(fD+_NV>cgoE!F zPEM4RwC9yHwBMJ$e8SM`#JQXG7f_EX@ybfB?rk5e+j7v%M5^v2`Zzij^lk7Z^<>Gd z=~-pzUH$M?!CAih4MiSL*v5(3H>WT6qIN0QeL4%@ryYVX9jb%L+`;*S^N-f0cqOVg zfqtD;*1tEWgFNuiw~{ z_9e#_Aun3TFJ6@xMF{pi{)>3#+Oc=aDvf6)BMve7MTFynZq zo~p-ObIYSG^b21e*Wa>Slm1TK*e`y2^_ujSvWC@fA%E_y$`8Gg-|DZ`=N#IU+-3IZ zXda^r{boOto>+9#v{QF)PM3Mg=l3%0{!3dKZ1=-9QP>i*H>bxV&0=%6=K@_0bncs* zF_(Eo$$z_5d#dnFY_jsp*cj&;H-)$Zo73f4apXV8;ir!CxUf9xlO3JDRv2F|K)S5Q z1+cM>6&Y+PW2?$wt1_G^VPpB#NVD~)K1=A+9G(8nHC#1Q#4mQ@i=23^6Tj4nFShZSgL%B# zjj^CS6UVp>r^_fs8O6c3fPEZ6^zohf0$*6hpLDK%vrlL)uDgHj!`%<8-h6fB56?w& zw(T@Lx6;mv7uFGr;_Qa{N!WJshnP>HK)!_sp5f;Z<;X-XVeF8 z4174a{p8d=+m4;x?`!>^yaiu9eiP^Y$A8m@H>dd{QorpPyi=77>QzN~TUkO`>R?eG z$~-MeO_d(ppZEB>531F{lEgi4rMoNoedD1&)s>Z|&Pi>WF?8EO(PPL0;vwG$)Jx9;nkL#9S?fhYSZP|j64?I2ZlmEE-&S`6R&pWK< z&pZ6Z_Gy(BA7AZ1{g;CWyPqakDZcq!oSLLZX`Hun`=Hcg&uo5X?k9Cc>!y_*I00wX z-39f}?@f36dvV3(_jslG``6)H(}~_m=-HgIJMp()**EdGe_4*ce)*4yETiJ%f1JAg zFNY3!6Mp)%D)w}LsN&L8?#!XOT%4UNoE_+vi>|5AG&VfrN*AWZzsn2Ir~ngZ)MLspDdlM&p-R+B?fq>j8FCN^-fW}>XhWE9%6}8i+j8= zCHwJx@qsMO8%X9IJNKs7ckfMaSpRJLf}`=>?;>@t!uP&kOXqGYOD#y{&LgU}=O-A6 zKS^(>NcK`smcF--J>8EZ@~d<-cY8n1jAbYGSbu2`=8m%McjC+A{kH~R^B(rhpl60+ zPhabQxN}$f1oflz+FG@KS9*l<@OPw2;IFTe>jzfnAXZ$kD?Q5Jl^$N^2eX>_!gq`Ee?E_QMK`BUuTWp(nUnXm86THjn8Y=mpZeJ(q5?l{yW2UI z^Q7e%INKX{b9#KmQTxGg^fT%4MLdS85^dM*5O5Ue@dyTlV4m%V+39|LKAJ?Uj4vy} zycyVCOvT4Sw(x93+(QziFI8}iPop5G2%yUHs| zR^5ZEJr7@w{}ipG{Dbc^_RsH^@ANUg?O83;Tpy1Ccm9Pef9a}|$DADFKKhNdhI`M` zF8f-r2QBu%(|^dypT@lJ?>r9tXJ~%iUZptGAJy7kIP-2?YkTKDIPJK11|EM;`tkOA z(od9mV+S1a`VZXKysD_Gv?@{d_=KnR{(03ZZ_>F{SG7;B+Vb>o-&eRAV=dB7p9k&D zqv1TKtp5A`RKJ-;;juQV`_Iq;!JIP$c^Y({L6~!vRorFfoMtoUEGz4WGh=U(S9A-m z@>vIGh6u+T_Q}fIw|P&j!D81VYIdbLX8U*VO6Rt}w`|^r$CvC%=hdxCk0_h>;c&$B zYuBYuC_6WA9maF+)=7}Zmi_o&`b9h-YLDWcce6bfbk^LqjUIC2b>;Itj3s>jT|NgXYIO6J&5t)f zdHa)TRacI>eMfnpzY6`h&wD>${KxMiEc@!P=o3^UI}3)#nz4OF3p}SnOV&% zyfx_>*e|Z5FUgJP>N)7slANvU(npuAOBcYKLTp2^4a0T}wqvm!r#a}=zxEJI+|k&w zV{unX@9npxPp`WzJs#Vj`rFbU)dej#?~_kE8*bfv>wCAB+&1HrPdl&x<0)_9+W0M8 zBQL#;zO6~0QM)ExhHWgiak_k_k4^=xVx?`(=Nrd&CV(m*8bB-c@Z-6UUdS@UdY(cxLo78s)!Y zo>5tOj$b-s?nVB>wzk$z|BAK_f9m`>{`BQbn;ILN8ht!h*?^C$w{>)m_9u@&d;BDS zV%dZ<%g&s5wqJ_RI5*XIHjVZ#LzXj|OqSCpFFE`4r5$*0q}lJl^XZ*<3e=xCaq`6S z@-L{VQ{Y{FQ~lBw<&8tMUnQQ&Zd!HvoXM*HpaFA^O62t~%o*k#;~keA?j7%);GO7= z%qhkLlAWuUchxV2?CJ<)vyCA;K1<(-@3yM(`1YzA&xG;8D@)Z4Ethn(bTuu&Yb?|C z7qj_{aP_;H8$ic;h4!edY32^F~WH1e#<<(+WHf z-w>;6--4>Ioz9nobVG#J;7MFIr&IqRacU!+?rQ05;wvA0tjsdMvt8I)OoQo)FKk)f z)V4BX!y1qI;>pU+xJO~*&u`T4V+8L6VaUdtC-4!EaHEglhvQ#BFu$q3F)%G$RoixL zQ%6nHHBGH?4m|RFNeA22$=ww={aLNrz&BS~RRacu zxb1r+VErn`83$;-W52xKt*W(~hp;J*Tw*3*#u6Q14ZicdqCtFTTEDhnKztg#wXL&r z;qtZ&zFVe_CiA`MBf>bWY!$MT5p_w+ipI8UGhn8*tmA`UTcQst zV>4J(_BJ5m$PJ)5jx+>OFJeBU>K2l<-qGk}=N(~MLU~!R8QUO^&E66b?#S&C;XZ3j zM99x*n>a9Q3$Y1n>-p9#4wpFN3r|n<0WKO|N5n*B;YFhC$l&EUvm4=5HdArtZCl|7 za#prAX7sL4DzN(OMVwvO`h2F%zQEMi1$#PKzqGY!PFtgU?qb-Y~W!WHsIj{VYIcp2(}d6c`(}06Tm#g2WK(i;4F9 z>^#8yZH2AG8Uo943Lq|7bcb?}(00yeeJ^Y5j+G@hTsT6$%)Q*VvhZQ*70u>!Vov-# zKiosG2Xu6;Y`0gWvh(0cRt{dVz>Zgn%@vW%%x-JCq8>y3;`-K=O`SDOdKTpb*~ZK9 z@k_dDS{p9ztiu+-pU4ErHVUW$_867CF)Uy8y66b?r2@h}pS zRAPM-J5W|f7|oNt3iHs^^uGZ$(>DolXJmYR7bd8sE4!LH|0}m#g#+n^M*F$m7zxeE=%U1(EQ@I-jj?ZY8Vza@Py8#JqxxFZt<*-~zTka1KcgtM` zJrf_F-F5jsaQN~Zz5{}96ZA~=_^ZHefzIbcZLsx7Bf%{fzk7!D7zCTG$4RJ!TaUM3 z^Rd}reK;NY1r8q`Z4deIx@e4V81zN3+hG0svf%T<$Nr^%$6&MmZ4`X1&^d-|uzVW?Up4q@ z0V3aV*eo9&pO5*+K~M*~4VDj&@yGgOBlyYzBH!`YEZ-Y~uMT`Z>^4}wzZZP_z-Rk| zbBg6VB>1|)H_Vb59Myjoe7z3eNe0LL=@{e(G#oD*pmQ# zX8k))@a=)lF=K<}<2zt3U+&F8JCm;no8`M$@a@G!m}&g++Y>HdGx%)#l{kECFSovL zfv?dzXK+-n7ksP0XZ!aQgJb)#yINqJ1zUu|wHt?-Ne%6_x6R=@+u_T}iTAG>ka_&k0k?m5IDB|zA@pyI;2V*J?^MCJ$KgBQ;hQV?%Cqpz z5_~T^e4lgpx&+_CEPU;PZ=b_A)#1Be@U??4)BbUv;5*>(RXThx2)^ztd^-eRufsRp z;p3Xb?*6+z3*S3}?*oT#hQpV@eCP6Q0$-;2>OTeFL5FXq!*`0{dm#&75peGKOFMjc z)h!%Qx6%XRqXIegy~d^GL4t}1z&-~ccH`g zlHl{R@VzMb@LXv)UoCL>{wVm$vhaN<_A@r@O{DI zdrt7J&%*aT!B_3@EphnX5quA3;roT)t9AJ59lj*?2e*H>X5sr(@GWxq8XUfHg74WZ ze5Js-Ce+@LenT{49K(f^VzCcdf(sfZ!XK zh41TvZ=1un+Tr_w;49C<_nhF{;qYDO@cl;cRb}COSMcp|_`c-u4Mcu-ywqml8-R5D z55vn2-ZgcqF5qx)L;roT)JLvG;?(liI$>;X(#w>jQA^6hZv)6-nI()@~ zZ%Y=wk-)(ehTK~tzI6^?O7LyV!Z%Iu4R`py>hQG-z8An}&oSr>F3WXj6?~=O!!Dz* z_wR2^h`v`ocmdxO& zz99Ij!RI5L_cy+d&GP+1@C}2W>3$f$oq(dk&_m6Kme6@ma z2lz5wf7A%RUhvuR_icx-Q}Df<#lJSe_krWzW{2-y!S|~y{@pG3(vE-MarnM3_&x$( zrv7+F@F`4sK6p4@zU%P4EBJ;(w_^mbaR2?K;Pb&}+wW0_?^D4y0(z$Nm%j+UQitzx zhi^18d(iu1V<^qScM5Rs_$zbxo3YBnS(#J?z046Ir!{&{yT@SL-6ed z-J)G-6i;%9lmEAzGnsB6VR(N@NE-(-QctP+jfWVO~H2% zx}SmXb-}kDe0IEi-{Jd<;42uE*}s1md>g@M=f9l}UlH=V<7FZAg&F)i3F+>5+2gd| z^A6v+f^RGIwHf%%5_|{1R|XvSw_Oh3e8E?S#bmGxhru2%=L)`D6l&XVx5L*a_|600 zgCSeAFJC423c%+BNB@3^jpLsD>jmEd@MXHcahKpL1D_o)KXUlKFZd3FuNih5ST4ge zg0I5y@5iuP|K1dQi-%+$FRu%}I*0Ek4qsaEZ315f>^4~c4hz0+@Rb6@_WLO|>)!~} z&mDig;2UMh436q>;N0=I6?}GndBxyzAu9x54jMTVAN$?q+vD)P=I}KMzEbclhTR5R z-+IA!z~OrxU|Zi?1m7C))mbuwqk5y@JLvH3H#pY!QNi~+@U@b_1nb{-1Yhp$QGdJ% zto83lg0J@I__Gg|Z@1tpbNGJl@cmZstpQ(+bmV>to1 zq7W6>Xdh*8Hs5)`aU9rS%k`1yj+b($Ki&t})^{p!Zar$iSI2@(uzd4Gxx|gLAV`aw zEy`Vla(Vs1e*4hiSYC_ZTLr#M?c5~z)`QQ^lOH*Jw*%+aV-5JMPk@E-ZKm8ZCL$1b zbr98mS#@qZfkWT6ThqS*ca~KQhAMW~a12l%cPx$v$ZLabN=n;jv<;u5)WKq<{uOa7 zQLg=CHujkvQ;4cuc<^HuVuIzfx|MEvjym+IO{Yxi8bv9|m?yNmB~s5(INUiQM~^XE zheX(#0VIhhwBq=FdTbDn-4Uhr(`#Et{oBvsW_bfd{s9WjqrGOECHNz*6O!oZczL<1 z33irOiY)>AEXYyVg20gxg(S|n;`#H`jW9>~^F)6442}Ngi~RXm1i;3ql;7R6|7mA$pBv`s-s$!0v`5MrEAgXoY3`bp1HS60ozp$jhVk znyKXL#-D_KLIjElNi|gP4OPbhM|{9HRPYV8S+z`J5{>(Fj2dh5F9IR~JN>B*b75z5 zLK06*#q%GhrkMO2fJ?y6{Alul6vh}y;zjOw`6X(H$shE8iOwI5 zrxKC>6p{ZFb-?6r1Tvvc5%mx7m`Y6u>{0)mVhvg*F<#^Tou>JCJ`;q~Y(&c>o>+?G zM{9gnh#IZ_(fF5!Oz1PB(1`XJEAo%k`FUIl!dM&8GO11%_|pacbb&uZ;Lp(bsC~~6 z_z40(LF1$GFhSra3H&61pCs^S3jCSEpECviEP+2u;N2rB$Jf~cf40D%E%?tB_;WQr zYX5Tu{(ONyU*OLd_|FOa=LG(90zXyYrwaU3fv*(!N{x^Dw^HDz3;c9}pDyq-1b&9V z&k*>T0zXsuKU3gm3;b+>pDpln1b&Xd&k^`}0zXgS=L!6U0)L^#N9}o`z%LN^1p>c7 z;4c#Riv<26fxkrHFA@GV;F|=#N#J?*7lou+Ch*Gyepv)YEU8)qzD3|$1pX?4ze?b* z68Pl;zg*y#3w)cvw+Vckz+Wx!R}1{r0^cd{odVw}@GAv=rNFNg_-h6JT7kb-;8zR$ zYJp!Z@Yf0abpn5#z<){Lza;Qq68J9*{Fep(%L0F+z~3nFHwygC0)Ml>-z@OA2>dMq ze~ZB1Ch)fj{A~h%yTIQr@V5*6odSQSz~ds_2}!k1;MWQKItR`D@v8#=Re}Giz~3$K zcMJPH!hVn7yGP*f75IBKK03d@SKz-c@L$(>KSX^!j4_hLFSdhXDc{ie=zQ%PF>6vi zAn*@pd|8NkAdE4RR1XRKLxTSyf&Z4ke@o+|>yd8>{I>=E+ZrDoZ@(?@n+1Ne;NL9p z-x2ul2>$N~{C5TZyBg1X0YUh#jcA!vj|%*w!v46hKd$+reyj-U9o$FjrvT=;&b-k)-;O;QNv0 zi>_yWy3+s{I1LU*i{tsQqCqz`rT*Z)!aEjUc>f zBU&ca&jtSH8Xxud&jtRM0{=^muL@DW3}cKW)!PF9w#IjdsJFuyBT3w!i1*jK8o!S_ zxDM~yh?Yt9Yk~i@#`_`a*I|s2Bz|#;^Z!QUqxtYR0{>fq|E@w*x43^>I`+N(Rs`(R1?(nm_A80 z#_(sVFURz=6yFD8c>&+q>ib3y%0E}V8Pm^K{~Xglr;fq{VUfR6)hR{~_$n3Omx=hN ztBYd#4AmCPKU1xZ>9f_hV)`8Q!XoQ}@U8FQ}a{eTjNKrq`=K#&q0Y!Q{;P2YgMcG^Q_8l`*|V)y4Fy)b%la zxw4MB5Yw+y)iM1`>dKh@WyR;Tqx#*b z9*gNWtCwT?E$V}qew!MQ=jOj%jf&}as&ixdI(1P@|EgMPbnZrl>TY!xbQ?G(_*`q` z-#zLXqx-NG;@8660{{2MUaIY1SML~ooYudg_?)K=%;tkL3siGAys5_ z{=QVGzNOAFdN5wUtro=Wo7Gh@`*+mMMi2PDs~&=G13CB{stweCW$;0JJgPns_5uvV zs68H6WikCpHQVUx!BvP~N1KdZrSuz&wZEfe-N#@?*+|5)88 z?2j9JP~V@ZmxTS-#$KWG|5W|Eu%GBWR6>8sq0|3S8vlx#AJbn`%ZPe$d*80!Y4~<@<^UKSSu}3VoK) zFBW=(&^v|xC86IX^sftjv(TRt`ny8^tI+dVX%iSdUFelUUo73?)TBG{ltb*XSc-wZ1^hqiDnW_J^e}91xrjt>jy^3eV1Pj3(m0U@)6e#4l_FIFgvR+XIgVPGTSA|VoST(^_4^B zKC3E+mP~6Y%N3LZ@cgXnCP%9!H)LIoEZ~Tmo@?iYPMEHWR@Ia1iDg|KY)My!CBXFR zUz#FZ&1*?l=2gBLmM)w*XZrjl^;ckhNi4@cZ^4o#u7!++@x@KI#Em%?eAQsn+^soeSHr44jh~EF8yG<)p=3c{-kF0T)f=Dri^@ROT`(3tqIc zrE$W<@|d-gtG_MiYHJ4@*5>Yn7Yi27UxG!`TANllE``fW>fBfe5jIm%yT1gB14d0T zk&x+AYq3myYinDBTHdrA>%l2Q4XvSlb;NQ>N3^=4$#+FZ6Pqe*PrYEFX-P1JE*VUd zUcG&OePc`8CG}km&5do#+}v=J9Wu3{tL2)Ou2{*&v~YEMti0N6cx^CfyJ&aA(wf=9 z^4*M~uk}*i4NIq1+Sr1HQ!8hqWzpd93;DP_pIH%IEbM(GGZt=j%+6ZDHr1?wXvRXg zSoo354yTjbuKy}>x=X$aQ+$Zj7~F429KTTK8xR35RUh8gsekk%~X@fnz&qs9s1au3Rs); zp6Quf*Z95z6~57u(P?WC9!EXRM$F`Q7KGz{93krvSu@onvS#jw$eyuQakHo!tL!Y* zECy2sOT-pmnd9$@ z;P7Zz+ZyUy&GFAkncCRcf$vy^v#C7`wQJjk`%-2D3N}^ilObceuC-i!nFr*cJ^EV0 zL$_H4mV+T!*m*%yR~HU?#&wM0zRNmm;w%>1f|-|jww<0~ac67lyQH(W;EXJ`46{zm zy7;oqf|IIgEnTrCnuC__h!$FQ20?B8vL=4AB20>gV34gP_~uCjFsE2CYo$HkLR<7* zg4vuV2}3|2675%IVALn6I27|6Gx#n~L$thYkTa?e78^Ej^pNx)<3tX)2rrBQF%rdy zi)FZIMPo}xQ$rU%zJm!15of$=pOJrV+ls!%aGbcAG<9If=q60`C$_q??&>g=(~`Y_ z(iSuVj*xmCXsh?ZWL>q{a>v(M4oAl&9WYe4VJ+n5dQ`quFA&~xMN30{7iJ_?GqG~& zl9~K&%z~;wHY}Ynb>TvL+NtC4+`aHH=cbkOcu``Ms_7RmnK?H#&+6E#jb*{~`4`Wu z41vgHEz{;sueEXR>m5zYS~v@Ymrp?@Y_hqUG|MjQ1)t-9i<|HTmW~DOP0^CeW|Ub9 zJL;@%J5aB`%!Ql*Ftg5rCM>j$6_zox*i_UOS7uoa`gTH16We;h%Jz1AcPe7Lqysyl zUL8LyV18rxC7}p6-~C3A{z4FJJY<;0oVFlpy@gRUYVBzY!zP`!AZ&D`PMsTZ)CAGW zd2<&m!Ftk1o(AQ(3WmP3YPTJLnb+$6o0j7~0>~_Qje9%1|C6}U3*H-P^Ys161Rm7q zeM-u4M)E%DNc_?GQ=NtEWx?E)TN8$XZD9@IG(?xLJ@RZ}ap! zV|i=wi7?`B_tZ4XJ3Rf)NgiINxSaZ3o_^sgZ=I*#B_YpUNT*zHz;n^CvT&t-|b*|X{3|)uawYvla5li zDQUd=yO5pcW0*`N>tC0_)Unw8*R5Rr_J=H<^Elb3BZqL_5Xo zzcKSljp=vbN)3)bYmjGzk*87uk0GM@IR0Ed&F|!AJ@Uo{_s}iQ_EV;G);I5c5BJQ2 zaycL5ePH|nFT=H7btsR!oi3fjS!14;WRN_e4hULvS3aJs(0<v@W3Ds@% z{?rF1f_BbN1jnU8iQqUqI1!AWA&FrA#Y3hQ#A7jc?Qda1ACL2fCUkxCh9&fIF%OHv z)Bn6<6M8<*J1(K;>%8GXxp~JYf_^?B5gg|*PTnE@A3XJsl<%V7u`A@An9%Qq=8Z_` z<3-*{34OfC8<|ko(0)`x;ZUvjKXjeSJ2|0Hbv?i1P@?kC2smV@JU^ixp)5+M$0&;v z>M6>SgnF8CR6>1^@|1*nj`Gxm`T^x>3H35%X+rVYJGS3jlz7?m0OfU_!jz;ED?Qaq ziH`^Tj`9XieLy)np+2I-`OZN~^y^_GZU1MRzjDzIEYI#gP*tKN7~csDQfnrt}30=8hm%SDxI4@eCM&%7wQ~urB$yg?wCGw-@PVVta241a7?ySR?nkT(d=S}?m`!A<)g6Icd`sO$0bM_ZZ z#uwv{Ql&rMzw3jv`R+8^{;`W5y9nRFo^j%w0p8%$AHLv?U7t$sJHGk~UGhlyuuR9) zsE1P@9{*YRs`OO8B8Y&ZiNFMdZqCvCopO)M=u)0;Fzmd)!j{eEo<-@U#qXdkv7%U52(>=PGzV+*$DqwK-eU(_7M&H0)$ zulhQzm#jXqXF&D!I_{N}pvIeZjo+)oSJA@Rf8nsiqD? z--vrZP?wZjy-wrkeX_@!;!S>^Em^1hsLia;!Pkz>_-at`()Td)}`8e%u#b$%$n~DUNuMA2l(#S_&EFX{MF5f}u-Pmlf zd^{I$`4%~R^vm*fAnx+DL#ef721j)THkYs4;p2Ic<+}}Wmv0Z0Mx@zb{ks_nF5gxt zKGIlU&TW?Oe#FT)5gP*zm$4NpXyf*%k?cQ)Nx)qlMD<^bdm0)J0qxeb1-P@U0!bVL z9~l8I4DSN>VyHzp;$aHI9&{Fuw?mO~95&XY02}M-@@+#W@VwIoTdviubkqM|ti?iK zqL8EgjM8lH1c)R?USwlhe~o`IB(Qsl#peoquEuwTc#ga%aP5>hf1buyg%FOcC~&Qm zI6hzFIo5-~krRbvY;`2Izw=-fU`ep?9EfeqeY_C8RRqaa@Ub1OKK>M^Puji}vJmyR z;}EL$S4)Ed2a|ZfV;+3q+-@dpbImwB*x&MSfj0&IfLP z3vlnoa5%f%J)ksqd-4F!GnJpa3ulC7xx13Hb7rdI9RGwmBBFDpg6%n};XOBl_eaeq z?#!v4sn33JChL!gol})>ACwxFBIoE-G0xx0E67vv@gHm9;SoaA{tf@jPmq?bXyPqz z{-P8AkSY!O_ke6RJW!P(2U7WXUUaHNo|&D&LuM&HgA|$YI|}Zb^JmOXJXYu!8h9pV z@6bnhn;iaJ!NSZZCo|;kXu3N1mS}W#2TuJP=&BSyX1t)~i^d)E70RUz%b6qM48A^D zThGr}24BduAHe*dpX6b>(Q~6cicA*c(H>We49*@uC64ne!)e%fg!wF788FP_mdp9c zh8z=-=Xlk4PMZ9@4?+w#>NByqe4Gn8zu92p*9eucQ}-|wK8Vza^W z9YBK1$MtV5ACHTcF9|Z2kH2g1_-cc#@25y``M6#%{i1(tAIrz@Yr1^JQ0&+SEbI?{ zHJO3xK1v`&$)s%Yo!DemT^zP-c68!kWX-|CV$3G;p|090nVuv~5CTH!8(*gp(2H`3vjB zc4wQ|x+1D8F~gETb)wpA|G4S@FV5l79ZrbWQ>;QN*Hfh56(Pdy5&GX>yieO-6$48j zIi?b@Ge7Ga1a~Acf8X^ICj%Je&lUMOLZXmqy~GNbqx^Xyf8T3>c>VMBnz_u+nkHf+ zi~bH4^&PCf5G#)}M-+HX5a%xt{zNUqTuGeq#_@$3?}wD!^P`YNE64HfOh>+Bh25PQ zXg^N#M~ugXYZ`N3_VgYaS-D;z`!fp1>-)OY* z;eC6yc_xWuH4+mf+dc1$2&dQ(&ZhfZ31n z&L3xv1TNWmtVrO7iuME7oE%pP9EgH$?rdtnD*?Pt46hN-vcC|-eA@SJwK;630ay_ zy$OFpYU2!5Qqs}x+~XcJ`-D~f&Pj}E-%gehDevveR$bTAfa|z-n@e^M0OwA9CD+hg zmKvRUw|UnG?G?Cg3>OvY+&-{o-3Lj z+itpWhtiJvn+nfV$k42uZ=vF&*=TOAIs^e_M0V9U*_D(BHosH{M z?{TKo?R;jnH}4L5o|eY$B|`}RAwu_p&VdgBNA>Y;RXS^u%Ess2yq?|%rXPp0z=j>=E0UzZ+S zkk~ppRrnZ7*g*W_Po{^#mIK?d1w&pz&bnJZ7@~53ny7v9dpM@v(LK|D_V6zb-+5Vc zQR=dmjWhCa$D_Rh<08Cw(7AocY-_o}|b0RXtZVUxqP4rr?*EtD61P zWx=@WZPw+u?kj7TNlPLA>REn3yC$L9m!ISM@A3CG$4X1~apIq&e; z4*JA4(fy>y>d|1MS7dC3N0zS{UJbDj3%#W}hz)N*(F9bPYf-|E2cTi2{fAKyK?xu^%dt%6ZIx~0CS zpqM(*=ymmIORgTzkKeKR=HItW0QOXa^}tY;3dW4>g9*A1eEteI6%4yM8d&F(x3jK& zd;RFt3EH<{Z^+qJfIURtH^Tj*t-9{KU$i)Ozle5!XTR!shwr?aUgBQWs*-l)BX8Kg z#L&jApeGogM0lm;unbBK*C2E66nC5^v~(-S9GoGK+Jjy?{x4(r>)iT|Tzk2`n^$hy zFn9Z)*{aC%KVNrz$LHHwhTf+?&8@cOmG|`5@&47jKFF;=>h4^p{p~nsx;J|fdMDT) zF;3^*wk_w0qB(0Y9V(3oZMV!(*_KRxlpZ0rWN_DHN(tkDcCd=#Aeh$!o`|H0q z>%TYYzc=c?ucg(t0ibeuwyc%Q zKQk*{i5%~GbY`w}P1DRqJS?x9 zB}1dZoGo8XSH@PXX`0^Ha!sc8tz160>Dt-Z`klS2E6}lAzu=IGp{B_h1DOD^L6Qkj z(}Z8&I=ZH>Xy{no&i5!%`0=i@xv4Qzt5q&HBMMH($r_gOd47ALXYa!E0gI;A@%AP@ z5V%xZ(A2Q911}!ycL<~%!=tvorGu}v^vSD-&JptJUmYbO3d~9vyeK`j_1gN?om25@ z_O<#Azc6O%o@9V3v$1|EIqm{r~pcQ339A@V-SIHr{vR#`_zyuzA?* zUDj2IS75V&IEEB9_nv&I!^gaq?<&Myz8%oZvDskxmLb9At8n<}m*u+!ahLBP^a^Y? zSiT#P;PNeU_}t%)9s$nfD}%!O$2M5Lhmqj&wL5&gA7uS|32~RN5lWXOGdQX*VsrV{ zg0BK;b=chBj^2mv^6^<)_YQFac82$`xqL5!kL^~6jrXane}j?V<@={Be0=8E<=f}* zxxXEqE%^9MZzliF6nqC9KHi_R{xu1{1S*(`uU_!=I()oOYx(XKd|Vqi6W`r}?*oUA z`-$ayQSkZTWBb}b90Q-3cH8eD_=u~+hFgXqAD@}V|8RdR%fiQgclr2$jOF8fcI)3? z1YboKzJC{d1rDG6J(=SNkFm%6tA&0g(rtjM1KZX0&j()_EOpp?Y}UWi1>bYfIbYad z`S7@SjIS1ac03mYZ24vYhpL1ed!VniWClmIQt&MTUn$b-u#LiI`5FXYbuxHH2oN2J zV^|{iy20loy$;){*eu`ef^R+eYGAj)^4%i%HaUFs)ABtg_XFV8;{NM z4M+Xl{!PQ+!)^m{48wqP$6q=4xZl=c<2bZ@=Lo*x{eu1nL7R=U#a;;weuX5k$Kh|b>& z47~4JcrOBv-&0K*`*{oRX#?*fFq4n??^}4^2i_hHrub-l&%%2ScnR1yLtPA|@y6r9 zEPsit^xu!M;4{lh`T1Uas|-Azjcej<1s=+uGgK{<#@k`xJqf%rxNFjQDe#%`Z8q@YVAgnFv+#a6Li#;q;Ux_` zmRF7UJqz!3;L%N!mhUACF9keZ{+5AR*21|I8kjW-JKtC_#Q1Rm=j zOcq|8+w0v<3Z@`G} zN-%4@O%~qeBj9bY@QxdJO$OfQ6rPqN0X)_}niwwWvliYU@RG1^hPoU|%lDMR)9=^; zOFrfm)pxCMxgI{p79(mvk8EcUip^)Lz;1c;rQu@!0DAIV^taa1=qgac?czF~SYls*|Efm)xl|kqCLXw#yls{9X zi*{wJ@=O@$zY2*XpY1hC=9iZKb1nb5j$W(T3lBlK(?8!cNoG%q{_`yV zdCt9Hr2OOz`f3{T=Ue z#a|%KcJTNMEdD7L{}e~BY2-V>ox@BoFO}Kz^N4Gg{PGn#^$3jNN&khGf3rqn{E969 zMNYHNf05;%Jv)y=PSo-rb#QEn2!8|Ef^at}gq3-Ic}pB@?-l%f6M|ypp64Tk(Ea>n z4)-SGU!Fk%ccxFu^+Ja)g1>sH~Rj!wr?h_wE=;8VOmpjiW{|#^t z!kzwW$tp525Ah=btP1y;7#Xni_w; z#m`#BqY!!?e!K+&4_mMmv1j5@2(_Z0f1%*_>R0cHzCt*O#?Q~5ghwIN?0)x)1fKU9 z@@jti3ZZuP^It6Zce#-433wDjN%Qkpd5(Arp=IuOueRK4EqAZvkuii(RlonZ<-g8y z_e!4hzsz!9X8CWh-1!!G6vEfWA3j^69)-{&^t;s)qGji~hQvukruj6UqsWp1|2*IVX0EVF$V%~vesJt@6(?m3-7!-In`y%e>bzKW3T#24>2~H!&ae**{qB zZ&~KiXzy#HycMdSK(>6;Zy&SVFIDa=Px+|d`jmN(FkkF^%HrQ+nV+!CFIeV(w#>h^ z%oB|!F6EtVnd6q3chP7fe~V?_1T)i%?ZJGf%DKyO*LTzK%af1#^oZqtRQZnx_gd$K z1Jg4ruSaVMtCGW{B+AlecWoff5PXE`qy6Aa(<^mFJV^61Zord;pq_$^0Y>9~G{(yxc zIxzookP&9#X+3PJ9k&aln_f5fh`09kw6|e_JW8HEaCIY$XL0IlI~Ew>7*^o~Pc7Vsk5l+>z%m9e+`YHkisrl0{B+ItEMH{(%R7}uP@MWK0c)0a8BdQQDe`F_NP}Z=~UILnbNqM zXS~XCjMJxO@e{XTFd(Fqkpu|OZ$Xw1vj9n^jb3)7a!M}#fuJ&FnUFkYSD#=$%puL$ z;OS2sClU&+i)5ZdKg_K~-N1l|X*c`)bK3h)J{P%VMhAyBb0w3^UC%)!VY;PKqHu2# ztF4HQ#c1OAY?>XvFiX5uehbB7uFuk3emliz)czu|5n@MALpzgDo0D=Os;o=+ ziu5G?zPvE~_99n3-w0no8ugA^;|gm-9N&U2E&Q-r%Jl-+VU82feu-d!nLYO4XB@N? zq3@9W0NS%ZNPFQ9d-ext&vq8==PUl1%HHPZNF4b&;zEAm4>)XBM*d8$(V)Bb&-Pbj zmkclRSvkiLxz~|rJMNZaqLh!_u?QOHLjRo7?^F8cmA=;z{X_Dzc~Qi1A9no#EqO#9zmg=@j|0#ACYD zDn9Kl%&@Oh_Epd+zepe8a>OJ8vv3C=M;I6mM_QS#QR)Yj{76sYQSOyW|G3hVO23)< z1M2)2;2~+9BE(Om1L7s}3*j>V84m3!H~UMBr!d1ls_etG|Ef&)$e+tTdE{%dKN5LF zm7_-$KHO)MA38^x=+1ai7xIGda^>Di{V`b%=zbH;a8FVHicDwXAj*R80Cn(zMeu!{ zI^3V84xAU2`!VJIL*+h59quQo!~buo1LP0X;h%d`>7GaZailYJrbjN_AI3Tf>X2s& zbp%?Z{LQ3}!FT3A`7fe=yDA6UR5{ow-;<()a0C@SDbtbsWiT`R+0+lIa`#P%7x_z7 zE)cm|x*wM73?tu?YYZaaR_XYRNLcG@InFKAvD1g?#&E(k|FvB2Lp_h?=T&@Q zjw-V#|KE{(MSrXO0Z)_*$Vd0c-zl7zU;q`ptn}|Gd&DOfR*?Z!E{-~4ggb&v5puv? z;K5y_>-SZ;`GLa!N2TL^A_Y-+=r1^0rCXzV?>{Ev5xhX+1Q)3CJXe)pBx;oY&^Iij zULn^maSv=I%`;T}Rif&>>9C~zBo$tR3U9m$uU3WEq{6FG;f)pEoZwWiTiD&v(&;<% za)iCC=luuHyqrHugyZgIo$XXOu|uQk3;RaZe=*^dJXoD|Y;rs{Z`Dxw+S{vx1A)1} zIpGv%$IZQ**k?1>DZQ;Zc-!AJ2TDT8(3b5j&$n)Gt+_3DL#VZ;HMzvU*HZ3p<(?bv zC(FZrvY(6nWTl^!J7@o49Nix3;7+_1@0<{BPVs9S9_%RI^0U?lS{~TYAa=lh1-spn zRn1En1Mb7iitof8LycPqzsDtRU$7$lqXO&_{DwewilcXuYeM~li3038edqe51JOi`zhKDvRj8DaG!;^~&mgxO#{+nc%HPoCNo!j9Ch^t(LUo;LxG0c-F%yoMTn7w6gx$p|a*X69s)^;!f#yl!XcL{Gr&? zQHN^}V>jcx-<&8z46hS0bjnt|`^TOyRfmsGM<`E;P_W-I`L*VSB83N=1F`T?=E6q7 zKl8Rh?Apx_P=;uKKKvXOep>H*Z0G&e;UDFKvqx}}BUkL;Yi?e67-x1?F&@us4j+UI zb~+AKdFO2Dc#JH_Iws#m+hy8o!tEwh-NNzce1*9#jsh2k+=gc zCqB7P4&lqgv}IVi z@yUlv>W&Ma(+*Fs`;mCkA?AsljLBz1eZdO@6`>zZs(V$qJJDEk>4x&=pQyJh+Uk`5 zVqiN`XKdY@f}?c9RGdCLy6!Dy%9}S2KAh+m6BW(Pt;uIwHUv)P1*g=`h3yv;S5K*E zPO5i>yA>%jQ?3vxmmyLPF@^-PuE~-%8(QG=tlBSBx3q?T#8Q6yX8J4M(7NHS#QoI; zM|10)8S=fJ(c0chH~Dt2=|^hZP}{&w$ur@PqEs4`>WA*U>-S;|t-Uvp;#>IA(% z61f}NTb+cY6OU$#Jg2ldkl}!kp|nr#!CoXJeP}~@g0&gX6ku(#1ht8O@3hW;Ti3&u z;``JF*FWj~hUkim{+!%%B}S{H+1rQJwb6IHhp}O*Yoj%l4nj3k#HgZ&9*hzJ5EuC!`h**zHqZVyikJ~ESvDvK~opVnrjN<5n zM~0m=r>}+axZBXXT)eI;*=}!TTC7IHY*r-LO7``)mMkQkoPHBP zanDpQ#C+?;V7r!73`IUYy=L>#jdUhdHq`0(V&JjErJW}IO<;ReHt(d%fyuJ1Nqh28 zF}#bROuY3lqxtHRj>k&an0%jtnQd}Sn(tCrnBg8oxD1EkqS@?*+lglrZx7692D_x= zk${bf_cZXzVW;D#@Y8vkf3vUhZs^Ct%X^Jl! zI?u+#zgu6e$w(YdV4{EG6+>yf zgBITJfY%@pXG$Z?k+9zZx$S2?;C~VL|^J zeCKHcbn=n-F6%I9E<|OEt4>_feAEqVXMLXIq=0!g?CYQ?AFM>4nRu^HbewM+9yK0V zePr5y6zhm7i%0TYa)uFu;yPl!Gt7TUI(4Nf-8tn&aH9VbD6S(mDTFVSKfEk~O@4ms zg65(Im_tYh@GILrSy=X&M;Md5#(@c#^+ zC9#xx6v7w7AO3jfMmRJ6jZi_jGklgyN&Lci6v7w6@Ba*UoipF{Al&J{!1cl}ibp&% z(eHnf;7__N{9<^-GZX#%lLh~JmxW&hk9bC+pMR?0Pq-|U&Z7`&Y(M`r!OymlB-ZF2 zg-|2=`KJs1l*_^z+oKR_Tt9!Y=ZL2eYEZv>slfBnztrNNA>2L78O{UB!1ND@8q{+Q ziB_&@F1P%bJN?R;b*8+5%;Z1IGvJBqg1=?hP4@Nz1&`GJnxBKVq4mgPB&WGxAZs|K4(c)iVFa zGIO7|Cd!ZNtpr{tp7T-uaqW~#bicqd*IMSQeEz2nTc_Ep+}XCtNBQUeTZ*((n5R2m zRA!c^e3akEl(|8eQ68-U2rQe@opdah@_Oj#@%j4Ys^iV0Jk=xn;C%G;yv_bL9F1P~ zh<$6TM{RdZx$H)CLYFUEvu;sM!@7p0m)5UBH1zrup4Z8XTsbbVh=--fWf;7rp#`U? zw0TQz;!DLfy1?TFveMMEcw@5nMs2*dy|*m^13jy?If89HjxFl$BAX6XF{yhX+FE)0 zE@FbyiCS>*%ckqlgBORw152&7u+I*q49;b-h-QfDMQ2R z#Z4<#G}Wz3c6YUbVX3f%XT4~LVqo@NdNs#~7lwWK$Z|*C zw+DXK5yauUW`@uAns{t0QKx(ne7Z3m=0woJXCFVZLd|hQ7=HgEmkq~D!oCPimRqPJ z@NDv}^5P}%(NLn?3}2)JHe>wHlYK|ZF-893JxRh^~()pc?;1hX2^(!2Q z?GEBTN4?H*UZ4*AuR||_Kaqau+)RYojW6VzrOflGL%u3y286&vQVJa5ADslIKk?Z{ zj9exA8N`dxjQC$b{c1Jm3VV@$Yt>o+m_JT;;4r<2(@Pz4_fdzuH!E|B`X%z*hoWn| zbesZvmY3Po0WQKrLyq!N4n)C;G|PMyc=AH<94!*bR~ z9qF2aPP`q|kzU!f2d+^t_+sAsp_8d6{d0}D7f{TpjXOTNe&5dA(zP{m z&Pkpz`-+f3&hhYkNX|oHrqZC{;r&X4=gsE%!y7(F%o*9E!cS@6_>;dM8y+|VHphgG zqh^WoKg29C=g!^|@_zWa;VJNQqx6G$n28AYSrP7sn++a)+S%YQc(cJO&HgiUyDdUO z|J-iBkkg#o4VDi!%eh@S7d-Q}19$l6cE2h7m~*>w7MP`O_}uQ{51iXg9-6p(Vw(BZ ze08JbNb{`|ibvHwkkT`(S#`IIS-;F^#t3t(Ot#_ks=I}+)6J{S3+VSL8#()^i2dp3 zRmWnkvq;S=avt?BiNET)Svt2QRSR1=TWED zy&`;0J6urreevX7?58+__TB z;EH;|n=36q=)c!-QggL`l;&acq}xQA{eLr0I&Xw|(tSb(Jx_Z6IOeH6PkPCJYMyjm zXZvh?PXGV8Qmap9OdgIfS1P+BsxRU{BGc-2d01u_&a*W-eSS+{_s{2Kbp8x`^j{j* zr8yh3A>A}-L)vN52KJlMPm?ytHPItZlQxVvP1^83VwzNp@323wM_T8z+#3{B&uE5; zet$@rZ9Za<&V*u9>2!QC@YvzfPE%Mtu+K3{TSAYb9msYc?a4#M@Ggcj@z%p!2Bk^I zgUw2lZzs%bk809!37IK2ie8jK@OYMPaAor{l2= zb|&5+%<0nQldw1O));tbdb{#{8P6sj*Sl81PLr1Ji?A^9`hdr9DIZ6rwR}(G*~Dvv zA)S0rfzQNy7D05yJ0`;TItly!Fo^IwuqU1{Pxso#I5D0B2*29<7} z)X$%VmE$ta_^nGfPwM9%jeKOAzv+?C7Ev)^L4Z(-)M2}u@}G5R{Z#d@`&@K z{_w|$u_^kmf(pW&>EpFIhR>7w{f~9;YnJId)(U_4JgMLRIA;sOWB5Bn_~V5CoAE4( zUmTA(PwMwS-bulk{^^JFq?ErGN|K+O^Q3;8Gn~(Yk^WzV;yfw+KLaI+UlflxPwMwS zN${_AS%%M(`uQgd{`D?DzX%?2p487jRq(SumBbp~BhHih`KJl~K9_|xx<{NR_47{` z{9byq#`cKwq<;Ql&k;|YC-u9R3Otr&NvvT#3ZaH%`g%0OVY`V`2=!s+N&WuI#ra(H z&pPwN%#%J%W<`0>|4tjA)BFR={4bXIeamdmgU(`MQbfE3mic3rndfV1BL7vE`8vzY zbxE4Yzs)k=ZJEDfnGaj$@4`&0PAJZk9<$te9=9fj_iM|Xi#p!(KiQdV)cNGEu*~OL z=6dCy?@&I<{}q<|b;_M(l=Gr}%FOzLH%Wd*nOS}~FZv~AZV+aaKXYDG4mkYhrbdT# zxvh@2*}XP8)x%~|{j;YZZdMeV^yM^Ndv|wNx4Ots-&NnnIZAA@O*5q^9nw!<{@)fbPK6b4+aaa*p+4>geRdtC%ZoqTc8@&D6oq_nP6Q zs2lNR-9dK|E_8;=Ij<_}7+m1E0q0P~oG3thVI~g0eZ*;n&N_gO{ztG&70wJB4ar})D(!(HcBlxFzX{373xPffH(I$lK`@^?~)WiNH)lU)w7X%Ac>5A;Hsfvd|G zwO6Fo$-FPwE z5^d4=6k1a@_Q8&-3zSSrIwkk_+`sLr=KGtu*L6yZnA>sh-_!im>1Rq`VAklP!ICx2 zQ^XB^#w~}qd5-g#xUmlu0cY^!?}LF^yj5-#d|at~44d^lLjIvc6B^Elmnc73*cDfJ zw5>UaJ(iT`kLP3zER4@lHxrH-fkwA!qT%Sw(zzY!W@ZKk2<{bz+xPU0a7ZXsQV-zPQ-Uo4Ih^ z8`|l(7$?*C+^aiVEE?p47 z%J#N)+y>T70Y>I(>TcQ8v$3NW+t<=E;zTMHgJBrG9kt!bR=SE?u$uZ#$FcH*IT~Bq zu5a&c>eFoMx~r`{48ltux!X)cO6*SCxbBA8=gwI;M~1FECE7atz7*?CWQ~0Uo7C8A zX1&Zd6luQH+~1&j!skNpg_POm({=lqaOd~sbbS2A+ToTdY-;>gkt(4^i6{B(xmae1`89f0eDf^5ibWy<9!Fu zCSENJjE5$T_t&s6@j8LW_5$(P9?^Jj;n~FF-Z-}FG-P^9!N9xB!kZ5~=9?xR-{ltG zPYpZ_3%m05Sa@rJ*Qmi1AB|lW-Y*S2=8I0h`xTykpC8AAmWep}`92HpcfeygE`wq_ zTjTYEkM{aKKL|XghbE1u&+s<+v>SQ#^Z&BsdkT0=XHA;#?=AVl2s8?&GAOpk$w#?P zC_EkR3nRq$UB#!%(u?5R4F8(oEXv6r@c^u(wm%<+4>Na=1m9R-Y9bzqx?$}k(at{! z;WAPh=QOcg`JDK#xL6qVyhd z?!fOqQ>;U!|0opa4(Ol#7)knTBu%`l!S6p?^lj*$^)K&gpntD^VF~bvcQyF^M+ASl z%fgz~Bi_y6=g+bDS#x^CyBPfZI2#4dUVY4((Ieiy;OEa1{7o(kbKWD~z2N81xA6V0 zynDfKGePjjTuAdxW%-(D@lO=|%v(vUnLG-i#`ohF2>u3_g*A^yA=Dg9509oe&C0-% z5)d_u=gPYl{QQMZmvW}$0i&eQnq&Qb{%Kk$ zGr?g!tBLO8QHRlr?_fU4pFI{{r`#Kbdx6t#)Oqx;#;$wOeqM(IYOz+%Jq+3I&bUV+ z!@<{&`Jmp5)mm?5K#to)x0~e~*Qo}1n?5%d2W8k@lD5{SrOOwuT-S0fIvU&{qB}*> zlir=8+xyk%Mu5va=k#*yMCs~Ym27Xbm)CUxMe zYg@YoJv)60tczrKy(A2Vq7gM;pG?NY?XL}wHl;KAUnUUafnFtKlxYL`+S)r+;tcPY zxlw5n-6GLn>+RUowWSBWHYtbY37xQ!JqbrjXL>TaZ^L{VZYY9Ls32ZIez&N{p-1rX zUP=8z`8^7ri*GjF&r#!#;7ibq>0h>|A|I3Q0R7|N3C@-8B**Jm{}x>=>!e7P+Jmx4 z`K$K)v390A<%rZO9DoUY*z+BuTnm*B79n2~bcVZzI^@Zr{Sp;UorfdFIhQH9z|T6E zt_vjHgbXrXl~A~J87COl`O=zT%x!@{af}fxr{vfH}am{db9##N$_77SAeiW@Me3;LH%Ch~V#Wc0Z74 zPUJ3|CwvumEbXt0kD8MwP6E5IW9m&ihn$!gOFK6vILhO}gE(*Q)09cm$wTKheD+|b z2!Cw+o}sbgyfjLX5f2TVQ}<)B$~qR$cx23}u|Xkytm5cHiPpqm;{GX4@x3BOQkv$( z1BudQ6(TH3_Whxp!N?S+ba(aWfuf<%bI+V|#)gmXt_~k7s2yy{9t_Mobwc`_q}eD#ad3v?TroCyb4+b;|Cq&KSra3QTp*`uBmr{P#}C^q_PxUwXWEXcEdSLzU-$ z>2%3QxHpJ!nJY6}o!!n%8P>I}7sh9bR4MK_zkhLmc|0&DOO&&7k?y_`p_-R`EP9Bgpu7vE0@o1>Fw?AXx)OwmQl1$`}jX;43pnRP5kbW_(?R! zknTnUmfynZP~@Sane7I)iFNN6pJ4G#h9*ek;Zy6w+hgFFW0-y5Gx7MnXB$D2#_NTJ zDc?Q=k8)}GzKmxRF9~xQlqQY$MOc`4UjZKeMSRUM%;#Wd;_ZPsoqW&0-o$&#z++oN z%lCZ??;y-6C{0?v0a%!LF945e&HP|bUE{rhXH&iy47Agv@m`08iI;;pRi-`h0PW)a z9?vFT0s1sa*lE&u{|*ZiZwK(SeC&5?`Njjx#M=qHat)^VXdDYB6YpiJaY_lnT1z|fvipq23_ODExbxZvI_3RD^Psd(7E1= zI$#9xe)e?nWnUKm?p@8~L-W=px>0RYd@<$nW$8{H!57;#i=cUycPvT^8n|M;r_E^UJZogv&B~EYQy{#{!#OelMkHm2NEX z7RAeVdH7f$zwRD!Y|tc*{p~O;D9ab1bot=e*h7|kzj9AO=h)Y`E%)zQ=I>eNA6w?1 z!_4sBfMV{PvfPI(a|W2npA`JKSCx8EY&GIZA2u`BJHzJE%WGGyV`y*|*HEcrYTU*wE|`)7U4l~|$Ko|>+ggQ#YUBzj zyr!+s(YU?`-mPY?@Ho72E8dsjEctDs&Js_ZZ+ax=I8kM0O%a*vxihb6E}=eOj{Qb3 zUKFQ!fm#;^GvB=kJ~+&8;`UL;CX<_~V}6cryotm5H8Rh^jeOA0S2)1ClV<4mQ3vj$ zO8*vhj1Rp?9dfX|GrZ%_8QxE+BfLTCS-8iNI=)#VT<}kUnc<6Yfm=m0!fB)qoHf)h zQsZC1V|<9m@=EzdIsk|17QuK|l=k2g^)vXgX%Bo64*1|C;sr<%&c~@E9Dxf*feU|0 z*i&Ae?qVDZ{ue5Lb<`p6<;s6EbcV~il=2BYd~?q^_uQyS?m9Re^$`;e@^?-wwqOB9 zsLqYe`_SW5ee!eXj#HJO)$@OMoa()r^5xsas6mbx;idiW*cKDk0cU_smp4Fud_NPeu+h>ded|1ZoW94j9?m?jM6WdFT?1ZDm;_9hn%{x}ff- zVq9xsJSfie4}9R5);VhY=RY>4RjPb(RB6nqQDXcmh1Aj+(wQ|sS&Uv zD6T%T$H2ZSa!rpu{dbRneO-k19~lGd5OGRB*7)B!26np$_oEvFeOZc*8;-$M7~rI<7RWjdX0jc8ABn?=pW#AD<<9!*=CLY@+Wl)+lo;`N<4Di@Kib6%8 zG~RP~Hu3hroKC)HU~kIDu^)}cc9F*Wp@nx4=BJ=EY59)9!o>S2@S0&4g<^YGRyjQ)WDh^2NN>amAyPjY79igTQP&(%B``{-YRUL$(>@?agNy;}{$JRuD}QrS~Y^ z-uyXmri^^YxxSA6nXi(}oM-&At-Z?G&T=r)KkF2ZvC%)vlOzv`W{$D><&QWUU{C*L zP#j~U|0t9s)?^-Wy`A5Gjujqb;StB!{QS9s|6!LU*L~sx$JqS*d4gXEC^)^8mHhb@ zf4<;fFL?Q5mUQAzu=vq00#}r*f|!dQag5C`&qTqWa9LOrc*ON~e*OZ%-|Vt@IYTRs zvHAJgbM}aP=_#K_Q=M(fP!2r+cazeMx%u6ToKG7TOwD~z%zu_2j=_0(Bg^qOmHSh| zJ=ggg=$h#Nd)fe<<{wz*pIPRAg_+^;8^bZU-&*bgIw~SwF3hw_LUDDay?$<%a%XyQ z4DLe9|7FUZbv(!5+LW1fG{@j>R%X6w`5d_z-YNJWH7uvw%WcC3=5(9+KR7f8Z?aK6 z(%_uij7HMf!*j0NqE0RbGn{<`bYL@@+eRyT_`T6!9kF@M@(`?)^&@q@P1IS7aNH@X z%sDjAx7=Z-JIA~DUEw%XE%k-oxKg*WPbvK~O23~v#^?BMFucd9pW`?OspAC};R9cc zTLFJ2`7vH~0rd+Vxo;TZ+(t8WjmvkBa`2s^KA`kL>K8fAuc!m>9qI_5F9O34Q%Cqb z&t8n1QP<;q;72JI@t;i{xK-2CA8os8@OED!vg6 zm-dLS2nT!^iWBjK$RZpu&WCUWF7O2|{3YS;j`JDm1<{1RI_i-3a_aEk44v``IpJU6 zjg_xxXB$_dNjlv)-`u$i)Pl6r?{}TgOf=S`-R9itB$xRAZpAsfPI2JjNJ(M5U^!P1 z&HVPG8>+uid{f&^p|=91PYi`)58U|Ljq*7&R(xZddd`kL(Dz!Ow2#D!``XlVP7G_< z9@(|z>#Z4sk8KFynY(2lYsGz-Y8_Jy_d;gJvzFFxaLO85FYF(4_$;jS2^5#$=Fk{! z`ooGMF}@VTS-g|`cpmTM+R^pgu6=!+M3F1c2s8{nGz4o`}K)D z-~F$QIQEZXH){m`r__$BccO)fP<(fF)<7k0;0(-bSsOkp`$!=6n-h7~`YMd46i4Et zIr?{G;UV52y0GV7~xMcWRv7|`r3D}p*yvN;vG-!T@tK!N~YkhNx$4U<2F7`;y_mB3uQ&hyuur4 zr;Ab9?E0yRO57+Kjy;R<$4~9}&W_OSHV*S9iM_qAbz~s^^1jDMh40ro&Ny6-{leUX z?G&@zyw(EWif$Em*iJ{-(^c4+@p;Fl)r%OsGbNFCO`tsZRyZ&%UOo^mFFIP^7drX- zP#EjvxazI-GN!;29Y5&LtDl@GuFZ(Pl&HVMx%aa}CDFjW!TWMm0^ti${Q!W@~h>ce)ccktGNf4ball)8%If)@5~qn`Nj$P_E%3j)>e4N z(N~8SrYdJ1A99>cHL=mdDrbs~&so`ob|sBlQJ|%F@vLVJ8@qHxWDK1xIGY z1M}a&y1$_N9%~VKhV`coGEQ?5_qlG~TzM?Eyt1seW)^ZL%$y134`6WqXrOr9>a3Eh zu!H@ot$!@Jf9u{tykp&0ZOdfL7XjzU!-<;0u)EXyvF3_Ipm@sU$*af3vq~?+`>-nM zl&;$P$I{(f@47L(>z<*Bv7I}g7@FYlU43#Wl3KMbTcq(59pS$?)Sp{FB{88kGx}P> z*}VrN;ep-3`#z5psfp`+{_aXIZ1J>B$4%>4OS?#>nll6GcHXN)RjK2s8=1$SKpt0? zF@HO2qR3ySM5D;vSfYRDlQ$ODo)doo7uWqPRni?e_h%ELmk%~X6YlZ=Ga@E5npgDGU$}Doc+U4_O6gBYiqv!#)&bfrVH-D>hj^Hh089Ok{!qR*t3sPgyLL*pANXDqKN zO)m;2v+@*jqrRN%g#sLxP`MW0@hJ(wM5eOys}y7yF`jZUmQ zgq^3t9)GN|bWIIvy2SW`{IwyRgwfRh+rxdT;iXF{KGbm6mAZ;!=O`M~s7zVdD;6sVYb zeBrb5Z9~0=mc&?~{DVM2D?)uQXT_i28MtWx64gK=El)HaM!a8X)n>CT!FT)9;@!@4 z@HUH7-z)09>cXse&QazgfXDr%35)#h^( zjn^zHS~WR*mh<+fQ?I@eI2p=WaC^HGO*{{|o*D`d9=P$Lq0GU8Zm0Oltyi`LqT%9) zh9bKrw-ju>y6>{pS@_mgF>Z?(4oZ1RMeVM|S0%R(m8614>x69I>~LmZH*hZEJ*_qz zeKT?W9l_7v^F}x@YfxgM^;kT4D^UwtuI>vLXH{IbIy^87sHYTaMQs3I4`M!zRsSaL zg#&0A05@RZ^4oWC$?QQH2dDVJjRoD5{cAg4O@)gCQCoh#XSt%SFpo&3*C%gBNV$U% zI#J3&f8M9W`Hk5Rg*Q+5VjE|u=B&C| z4V2(4aX-BLEf>$ISyw%@?b3G(+g{riD1E5cDJ{Ki#XEIv58X!o8S%XS>4Izf~KCXaJwd2@gKK>Q2%?jUBd@wH#BE;v?^s4Tm=reHG8x>=o7 z>ddT3GA(PiZQmMiiEou($cjW^ZQ#5=-|_PuGjD(O#ItVpZ%TrvoXCvi7eJ&&6=-R{*!d&?b4fG!c3$J9yhriSv)m zp_0&0b~JM^Yw3!2-s`42W5m|De~%H90B_ogKRcNH#O;vxb5LJUy{aq~zsSS%|B1q? zlb=r&_0LO;uc&(a-c(sXdFhfBuS5LmMEqDQ?nu2l6zyl}`w4Qs0KJOPTjAjGc=u7t zMjyAuo$_l2__XWW7x&Led=oX}H-|ExJMWI3J4OvYJ5-+c?9eRemCrppG&_lNfnvu| zwx1oE>y*@vzx~0XvcZ4c@$At2C|XR<-SbAUDpLH7_fP#gyxS=q7Y}_tV|V86Swi-q z{!--nxXqIXrJVfD6fWn-L-DzB*_w#<^WK)_#dM{L_H%dF1W{HHZfwfrKrtlG`kVQL4U36^YT1F97*;Yfi628Q#~`vh`q0gUC}L(G(>Sd#MGG=kr3INy{svwKWxq zDU+vO6NWUqZ<%^H7JuYU`Wka8OXP91KL`8|3jXp$w08R~HU0aCvSJm7cOfmu9ae4h z=u=jQ67j9HV8zxqb- zWN36~>iDT^?ijDa&nyksW(=+oHB5OT3{zV&YcP!OV0e)E^`^i<4P*7$r7ZmZFq}z{ zW|EO2yjf_jNO68e(3(w@)UL$cEz{86p=iO{9Icn1O*M`Q7z+MN|1%s{xuL^(+x zu561HAI<<$%N&Lut}l=8YvmKq*V6gLehua`+ESWRg?f<-Im_SL z&?9bC(th+@5)+|M!tmtDcYY||4%JUf%I`@+K)bM+K)!s zCzquA#^`UHksbf7kDTJb_-R|(K>ie0K=row_0E=Oq&2iRbclOFv75bpJ?{yXOM9ei zZAW)|Td%qthKqaBa*0FOR`qrz7p=#p!QLKm)|xMj)k*A~YgafOU7KtUoN%DFsNa}u zuSv9Qx~|<81uV&&R-L;Wdd$t?f5jS;-Yfh2Ko38KiCGDcET^;M0 zXpEIOfzI$IkQdj#U@OVmLtZjMqgN4 zBaUA1hamwzz_0%%TyMb}ax>oDj#4Ia)DUS?7wuIxrim|7Zq*GPxRKT`h)fVyR)79+ zJHYUeq?e_eu)!2(6MFBAT}GB}+TgvLG6~acv6WoD=%(Sa#2l6((!D_z4!k36y(8rN zlJ-rw0l1A>x1}c?kBZOij-Kw8*>jBq)3&DdpyE>D;p--0$=4Hz zkQntsV@r3-M!be@{z;EGVno(CUL7=y2RI+#id`HZ?7FC}bA-V4@hNF?MM?*3ToCL< zVz~SOSI)!4_M95bYDpq{j`AH!=bI%S;MaDT@2BhCD_6t(F2T-l@fzdC;dG9^`Zg^? zTc<1&!yH$d)zmOo1k74GoxMKd#j6O@aTzsNI%lMsl#BJf`}&HnjZBwX^KxrZ*3{PV zb-k#LiQd@N+0k~R&T*AIHj{jZMq+ZS6n;%{bg4LX#~)bD#s;y)Upe`=uk#f!L&S@V zcghIu|Ka`Zm?C!qP+;eQ=4FRtJ zOev^5D2?}7@ZsMrFHsnn$C@;reUDY%3J)(I%o^{j7Ty||)8+4r79Z~kF;^IBKQF-E zj7K@b)#-AE5$>-nJg!|{qa&gCXnfPcivf@Mk%F28rQET;ZqjuCnlwBj86$|eq%zHGL;-m3^h4%*VSpHH_#ZVgWyB6LKEC5~) zcTMCYJ#XPf8@==^g}cW4-xeN*HqxHe`ZEi!3V3{fQcyhiQ{!dBzgb=u!U3!tpOhWr=S)?X}tF=yae!GhPx*6k$#N_ zv%E9|F9mz5B~aueeh%J$v%Jh7lRkg5!Dr$P0xt^xDX67T8ZTzy-3`16aMwgWQl*8* zi(c|zpMt7~(s)f4-T~kt$}VZVMhh@H;_9-Z2jf?j^3ojdu+;X^U((=7z z;Z+%UtHDe@rYFA_W_gJL@3;n2d^G;j!dnA8RQW=_D-<8`M&o;7;$@G;cYzj)w0v3M zGt1w@z8V$S_ zFl)RAExZH3E7xF(kH#-qczb~tg?$RD4NBuZZ{fWNJf@2#E#DCf?`Z?C9n2bU(84Pi zpC0e07T$5-F&-(X>kPabv(ArOExbLz(-_3m-?x2= zPn-9GuS^H3@Mzp?g}V#k#$ca<>W0$c{%fa@FvUk>2KdZ!khezWM+$Cyk2PLY;mw5| zDSU?CAIluoJS*Hh@TE(abF6S15iYEp6x1i6bhwQQk9k0f0&lZ?6u&y$E5U~*Z&Evb z7JTPv19b9{P~DNwr5C~1!GINMKI%H{=(Gb7A3)u)4bN{vQ9j0tX=ma!Eq0u{j0Dwq zVDph_|55BwHOEva9X{J4&Wr>1sG1aVGJIn&CByLzYtR0&p%3hV?BN&0|bA>;*W^?cRhYT8t<$2 z+l&_HFM0fElpDl7vVQ&?=bzwCe!k;Dxc@tJw{ZGekc>~R_12sx82 z|C5~?mH!0XgK%g3yngv)dUJ_;a{b{?6=z2RLX7PN;ZFZmt`CmjdBk(@{QjpoPpR-5 zz!ro%{d0_55=ZPj;{Dft|I?iT<)3*PgggCv`NI)9k9g;W-+!?fAEo?zpn`Cx{~fNE zV)uy;yf54DztjmKW9ffAR1og;&%BUSsvm^T`?LN2XE>9T|3+{G;ZFZd3rREdgV00H znU?=EvC%+=Fa4h>{MWj^&UByn5W)zVKm4+!;RKbxCLI2cd_Yb1eVoI2;FN`pf)3 zNBEDqzBoeWQ3xYke);D(pH}`kRu+Ui!!IPDpgGR{%AM~-P>et+CukvOo`pBhdD<7B zc>*u$dYR`w@gW2}zdYv(elP#ewfN7o_|J1*P~pk+KTr5)S&(FY`5E5%mjCmeL7)Hg zE&u0hAfbmaBITF&Lg#nN|4wiO;m-8ybA53H%cGFx6&RPKA+^0CNu z;X?=`PJa9v=L&`YG~BUML*PH``l@lC_z*&C!tZ~v!|`7R$1hD#v^K~oDTEOuKmQVe z|F~ulBTTLV_)9JRrGnopZ%aL9JcTd<}4n+y*nNvzLj5?+?fC zH4*fzjorxe{iEzXmEF-@CXnPY~vMr`h7aNxA0;_vOxK zeC8F79*2zy_sg6^$~`K~tDKjWxm=i6JFhGAabdo~`3=mPC||bGJ$)sC;~1PFU{0v&{L~l7ENbzs8vfvnJwSpxp1q zb3VQ&ms;-a%AId=KE4lqmiw*Byz%w&08&KxXT!|&Xn@K`{aj*Wtt`PIF;RS)@$Xt z1lL|6?_U=$J*8O@FCB(QmFuY6hOd4%0w2EA)0aHHC8VCq@Q}FB*nl(**@&F3wyr4UF(b7i`@9^I4Aw+db3sI|dNGif!_+H!L}`UkBp|DZMH zR-i~EF721L_WE&Yi^4i=)wn{D3%B)JaSg)wxGTgJr@1bC#AUXwgT1tNU9X!f=5ktE z8%t<~cYB?zIwcJIhn(e$)~s7p)3B~#>816n{HApci%}`mEXQeHTdb`xa#{Gwo+KE& zI|SOiYY4FZd+DaF*hsNnuBSHm@R;_tf?;=3sv8YDdTb>3E=?BfRa=tn-CH|)kOoZ~ zyM(}8Kfk=C2N!>?>TKECE*CCKm+qdVDp{@>S?yW*FAY@z`QAI_uYI#u(uEaL3Bi(8 z8+)v35cckhf2J$WNV~3sQmWupF18N8iqyaSS}cuj^W9Y{5<+ZWsL{)+{S2zGs@2j8 zp?Wz*ZfG}!c4Y#NmSpjwMqK;a+1VwwNOZKRh`_HWx!NcoqnK`Qf|Mt{3zG$CUiGg+ z@b6HN*s#N5c3*I5WF{gwtvv`5!P`NAVBE6Q*m7OFTY$RTH+yA*Se_qjNk9P>DW_P3 zEbYk09=M3tWxcrr&1IJx%}`P|U8fJ$TaG*0G+H|67ID$42n^0@tJlUBzIGxYL{WZ> z+t({$xZjOmN^tn)R=XvX$2M6@8I~xGI?k@GLSX3vJhxN02`2Xqsgk4kd~bwG*u{Mv zy{k5LTzjn{)Dm--1?r-<KSR>fkr|=&x3}*C}^~OPnZmgv)sl`mdr6|AHTK2!8n2@`-rBEaCxo49R-(0B487 z*{N{urVjpH)WOeQb`hqqj%1I)7(za5VT#joSTzF6ef z>P{D=&-dvLeD;wTub(RZLF$m_Qs_nCdx<*as)QbS$4l=5WiE$KxpHX6(42@r%rjvw z`i-)0QFjHyoyQwS&QxbqLSIQUhQw0T-&JQ(zUMeUqMld{P)p6zr-6qd)L zE7e(`kh2zMrZf2%&%2=$cNcYp(+i#c7#{O?BJ>F4W4=+JPaXMkDRq>aebj;TB=z4q z4vMHSN08n$ucZ!mj>{8&FLi`>6LjM5r2f7NN9RBID~W^mO_YP*InGry|6ZMS3jdG8 z%y=K9j(9&s9r%m~<^KxxJ7m16XTu!%qe=%SAl6$(0`j)7NH8GgkRzdh%!hD5yk8Mq zv~?f-omAodlL`;vi17YVu6qss*m0f#U+{Iud5-#^UfF1MIHGeX766)DhkU@&RuOb>Njy&kx8uyiqP#KADaz#}VY4cwceR zB$CF7ObCc|DUmY*4wBS~Obm!M1Q8sPkEn}yX28YH{=xM7U^}7l1sd2lLPWBSJ*ex9_2Vm9pMPMrv%d1%Lr!|_=vxU z`i*k@k>ymp|G>L|IKNTv^SkOjfqjDZsHA%75Arh{%6~I;;HIbpHw>M4v#2A!%c$f1 zSVO%?jsnwO_ybM~_Qcsi9sZfG#1rKSI8m5cUPSz%i}xuSa6V3Z;7~5g(@7mTOb7ZG zasn@xeDGI5y(A#;=w3!XxaZJ*_3-aygK`(;1^%PtD-Fnc^|#h{8#p%KLh{cH$nPn_ z(|Dpj0$#bon@_!bIG>F-mwY&syB0d-ucMA|>7Vguc#J>ON#{dwyn6o-DB~F{l;fJg z$?E<4n0o)(;Yj!MW&Q;hD}SZRpIYh=+^yU{soXo1`;`iJsZ599WeV@l6#q8GpQZRw zxbqm^7{$Lx$pcG>=mZhjF!kHT5EwdbZP)8liBESX@w~a`e(1Z$>Ow-!45lG-gs0MH z*6(@v>6*8&f}K*|g?| zZj2@#*tvW2==!|o&!)0UrX+C=FjQn&L1JQapqS@m$}?TPGhT=}jG}pm0^;19a6Iu1 zo|$ssH>s5mo|+ICbynzjv2ZCGeDGAnFi#vTx?t2S?K*bwz;Cv#dgxSk(6h@J%)f9{ zMNs*V3KU{LpOy22EOAmAO&Rs!x{Re$MEqesg44c^nDSwmQsz;cGk10j>%Hmtr+D6p zyWc<2)`78~Zk_|eBL>jZ^zHCo)wHOlo@vsJV^CaAZLQS}s~0z|SkY9sF4^7HCO5SE zw^Q?;a1Mv`c6W7lieU(M$Go^TyscGYClP$x^_QcAiy;a}+>gX#3p{BEu!>KujDg-*>@lnLy=Fue#80bMnZE+v>#5#haxvDTr+Ie zC8SEIQQ}Gd@J0=wivD!^aUMvA1#9>D5j>Os zbbMb0k15|l$VYt2heubw@8H=C_vR78Mf3AR@uAx^j1Qj@mnb`F6dw4@@<3v^o8_bU zr5hERdyH#RJN+xn=V^oDp>Z6PP7|8B&lpVzm-HibUAF1?G%~*t9?!rt+f_{SJSe7} ziIpq`3$9ddmMtLzBD40o2^YO-nqwn+S`!bsI zDK#rDUA4~mK&$WRs@`r4AtM~~%P;(4IC$~a_D#J#{)rsFNlxnwYaJ}*ebB>fVTbu0 zoTt{_v6W-WFkqm5Ilkc-E{7M4^46}CgPO~GFlAP=bg^N?Y>Ht5{Hn$45-pq7V~85e zG&lInK<9Lxf_H;cacUET_2R%J`Ph|g-{goy673`KtMz`JenDwQmpnBjtWVY#^0aG^Y_?0C;70oN4 zSakH)o#PGZ@c1n=@m?_S=vU+EZyet#(nV0|+G^dfN1G{09?}y~AEvGLI{0p*2Su{j z%Q)z`(}`zgoP?eOrQ?iOb68ug8G^5cy(W#P&006@KZ>>*W%7ur=Mmdtes`Tal80?C zlenjg<6)GMNcs3hHRuxKy#UH{&lKZ#nt|?a<<#cjQ=0aj67SJs-)pA%%$G~DnKpzk zVn$Ghpy!-7Ush}C*R2Q7AL-utg&(>eyjgZ2+C*$&ruJ zNH|%OEX^s)-JX0Q8Q4oZp75J>Xk2mN(G~A5YNQP|a+QRV)yeJ2=aZq$HJfkS{QTxn zcTM;9?&rHhJvBYsd!FwJ^-ABNgVzj&-{(y|+v4J6eSx#1F|vR3z9KRHQW2@yT#>VV zb7>?skzgzO#8acBVL`evFXyB_Zo{CF^#`nwfll z^MXieB%Vy+)b-R*D7AQVEn+XF&DxxSbO`sD^7i0FYNquW@fGj>eIrwxQihXdk=o>^ zlHYMtI{B;@vs@AS%V}b^UBv9ukm8bv8N2T$GZFT7gw5DJ-@PEh_{BFb?ymJo!~1kn z@v%6meUu0zr*RrmuTrI4RHR%P(=4?_NLRD@1%y~0+rGIh5?1*jZ_#=0(3toHoHssR z;1ohu#;YQ-Jz0_Se6loxT+MkNextGNNbxerBytAwA!qO#i*3j6{MhqC;!yAYp^IW! z$;HXq%{9Ge=k6b>ie+pr%MEwOySKaL>EyFLxDO-~X_+ZPO^GszuuyI@leH+5@UeOE zW?g!jroUd43;t9*@aUZ474L3sl({(%e&#_=$ctPx<%}m6Z$|n-f^v}#XXl3FOxq*yo37PdA=vC(oW{t zc}Tr*afW*DZy6?+F1N8~Q9s}gAinpBq%5yGei#w`lOFFxUA?Ym)O<=R%roa zL7cOMv6D-#(u&j24iLtkD}2jzm0IReZR>UD`mMlG&A?0- zl$4s$?`rGnyu70wr$0Nh|LaX-aRwjT8oJdoUwrw!AKgwXh86kHR1;+L(T#+znrQKy zjxPp2J6v?sLk8L!{N4d0o_v6{bg;IWyf@%{*20R%l8LZ znDW&bc#OBk!!)iBuMz;uG#GS^$FX4(Z;gS6takC1Sa@3jz`WF?@oFqQo?D~yV*;49 ze48x1UjiVe!Juor4HjOXfj7~>+il?$;)O~l-=A4{JAqdK9F{-oTE4>;-o3!%yQN9X zcgVs!V8}NG%o^{97T#Y0uTz6T*LcS)yn_Z_p@H{%3vU(zN>~2=-NJj$z$-HFI8Ojp zw_fA9c??gJmM@A2v%Cx#cu_Fx_|_>rou^4Sr0XkR20kQ3Qit<1@O_xRazTdUv}mE= znX;3p8`jPq%-6HOJQMc14rF;`9ANEI7!xNy(;%=l9$g+jnD!qoos-#=?Ok2nwEcV~^|5$6^B?o3&acz%fAoi&O_JRijG z&Kkm_5LP$%-TB6Q6v7+pcjp`IQ3xxh{O)`sJqn?O``yhF&+<`Zx$}+jDC9&f_o(NH zr;s(v!t*jpV9zqdca>uq7em*?)WfnKmuOBxk-rLx^D1{LbE7b4I|r1R-$tI+@_)E{ z^YAFDv~T#F>a98np%Xxo(1hwN(9NP97EKhj(}C*hPC^pgKv6oPP6xs1pfC-BR9HI* z+JOWExP(PT9cPkA95N%5;NT26<4iZq%*!GVjkAbkoTn2KrVy3)cPfj4@%i4luJ8Th zyT0VAuKO%?>fC3!&%K>fZ2e;S?^VMIs@>$f_a&;nU@ZKYnr>3RAI`!aHJnUFA;7|n zb|#~La{Iz|HGC7f=eqP1!p@oQ|6}!C)|bv`Wir~ox-ZOVT{7DHjlOU%{^{gbePPz} z$wYu*ctOQ{#-~BQKOaVj$9}kE{?q=)7gRh^!M;+%HkJK9@bxS$pY1Rx=q;g_MOGhq zU`Yl03X58BZ}ep3{;srt$zai=S%DbM2A9&#V zIQN0Xf9KZ+lD>ya?{k|U$nqVFJ`nYNjQK#~_p##xiQmhFqn{ZSi334qbAkEA#`T47 z?F+M6%+kfaFdG{z%y?0jzdxOgSr%qgWpH`@`5(L?zvG7dPxXb_xMj~<`@)P0u`ruM zag%%3Y4)D}d|7?@7&T(~9_zaYO!4-A!*DQ+II<>C5Gc6FWtLoCKYN>#KUs2l9qz{CC6`Cy9v9I@_x7wR z`1lTPg7zd=*d7?=8|6!Ju_y8O|98E?%=xqX_Eg=kQlNW4fFR!v`p`u02bP$b^51j1 znN!n1?(cH;+Bd%|k?m}}PQvZCd487#`ip}8&%rS7C=kc*68qny?ypkasjf?ARp?Fn ze=GL>f5}H`Fo)95EwQy`Fi(2G&?`%_`N;CHi*ZJb9$>i{;Bg&*zpuRe5kI)R4+fQ| zM_PY*>i`cfuL$AZX$W8t{3hVR`AQL<&NB4E~ZJ z_od;c{`Hsl4}|`cd?*s4j_hlo@$KpTX)u-Y)fxV#buODRh z!R?g=p1vKCV8sVyG1i9+_kLUfs%Hv>8PNCFUtWK>|2{bW{|2u#CZ4X^XqTO&qmUBe~g#EKL2+mvs}y$c73{0EiZSVh`}R=<&Rg>2a*xa>YapDK3_i@wQK27uJ)P`ogTwnNLq+ zUzp8>WY)`!_roXJo_gl{IX`&3Tu0%qBY@YX4A4ICBHu@%2gvjPkltUiy2Dk?^L@no zdlLqcY}SJV{_GgYtgl%3mYgZq843SSe88=@=1lE168@ikB~oH|$sj&pEP9=N=ls^f zM3H2iP)yNNzV(g6#UZIBm)FdDGEk>*@_&O9;H}Y_+D@&8c4%~l4vp3j`R)Df9h!ts zJBg;CBSAx=uozBWGLt(=CPc%!Xl83BzLWWY>NRc?>HgbQt5Mw*YQh;ePTiRyIH-ir zU>1il(Yh;XO#N2FR%Zs;#%o|);7gVmSe{jZkcMUPfwR_t_YP9#geSNm*l#d+T==8sce zFE0(8Ht#9dPAPeKZ}|)JK1rc(PnnS;IxZT7z2&U_Hhd>p#Z;hbn_vIkU{j%?Wt%d^ zlqOa;X*wrUe1Tb^Lxw0CLZ|2_D3OuiF!hcKahTeYx@by<##RB*~Pcf@{^KT+3eD({ru)YKhHf6 z`}jTVsRs1)G_|K$-@aO$HPE}aod5TJz3Kddiaiyz#dOMo^1q;+N1mv=GS!r5BbOpF z5!jn}^#AztFBJa8>*&fJmRUZlD`&x9%AYTM-jn7vps!e-G`xL{`t~Z+`8~DHRH#Ks zEY+BKJldbW9O>_?>D)kiT;_)Z>6J)tRns*C>G7G(1L+k=|3FRW2htNV_Y9<$BfU*c zj~_@MlDTyteJ;{JRMQg%(i1b+45XJK{UbHqIFLRxbICxu8|g>Y^rFHPpFXrJ_^x8M z>n%FiDX*3?Z1r#HRq8p>N(zV!5b=2yyD@OwKGox~!(>ApJcx zeY!C7a;y@w1$l>MP9Df%LylH8$H>06pNBNF`g8{B_L*9@Qi0WSyZZEq%wfneLCukh z9Dh@DT+1XDvW>DiSVQ}2auZ6NhP(-CUiMAyFVwuf;~*8O3l`S9vXDbxz($%LIbv## z6r{1)!D>4^di{PCHjmlgfCfv@U?hL8j%2_&v$2FR}4t^gw!3lD}>j*BrFeSZrE_MPuPLl+K@W^Q|}M;Q8CW z<#>T=t{Izuq!F}nU_GerS`TZ?7+V_+;*W}y6-#Gji<3t0_vb##SuXf<#YUG^Hgtlb zh{j-?oyvL(iz|sy{zBDyMJwm7@>K>_?O$?m)rBR>D(lmRPUt0khE6jTym-b(I)@YL zeMu3Bq0>UGO9e3wacP9}x_$ZHidioyHqz)%X(g6UFE1LS=al-IF?h#OSInEK-igIt zo;9XiTCa?d1@DFGMj5l(ACq(ZP2NgBTlr!w4;ER1mKddTi!HJx_`^%*a@gI{E$3Tg z8^U99^1J0So4no~7xZ4za18MnLp)B#0Q-;rS4fs1Um(ar&=I3VkgY+XTlQQ36YGo3mm&>8 zOR)Wtk+8iGu zgY>FfyNv`A9vmTRCmv|icKz3ktTE@5MSFI6PAkNe>)Y2%YTi|}j*yF3r8b9i{HX1i zU!TqJ7K}(Sr35j;i1D8zWpP9YuREtW)|A9nafM>Z#XA4}9Y%cb*wg=>< z0H1igx0K#8FuIV}DnE=e9(EHU=wgmInhHnPnEV}1!^t?2>*Tnd&g2vKdp?`&TyVeV zy`JY*Ya*rqiCrZo|L#sJ-Qi?m*5mCOAWmZcLW1A*{8Bx^j>L>2cS&KKoGRXzlMwK@ zuT9j1_c#)K83l3PyF5*bd1i9p(M!7Fy8$7Toe|?Xz}fj8T5g}5DmoWTXm9WuAv zU38b5zOxYROzX)GM}p(xVY~T|2_82M6?tyrt8!{1xj-XVnrinhFdg!@=*5KiPZ99_kx zpmRv%O;1vQvvHB6g|B-;uGi6I4Dm)S5D&Uum&oN8Ozh>PJW*IWK91b`6i6X73tJBI z!tQr?!mc*~PhGbDrjSg!m7P` zlKUfGAU~qy3(Ttr-qMp*zvP9zI3bXY7`=F);+!I^u>@)N>injj+LDo(3TUt(H2iOR#YU*jvC$U|~C0CNzOMUlkefJmp?$4`v z&j(E+L%cx;#2xeUDeZ7rtm4d+W_JPx5fzEe8YYv*hD*As_caeMTgA1}Xt3m>BdIqh zKO>~vVQOj(Dbr0mTI)SeM=gN^!b^oxLCQR+hGVsIorJAzR!8hb*(5sV8LaJHn`8m= zZj=ndrb3}N2=X5%3E;P{THdio#pVZAlAi^b?%X<)#jo& zVU1hxvSIG^vefbw!ivvUkPa&7hV5PVn;i+b8A%I*aukI_%2X4v zNw`y)As*5L@gK-^QnsuMR~Fv^aZlTsK=-?T=&?Y2!jSs>sggT`x#AKJXOYc}{3u~v z>|0%hbf+x4p7P|1#1eAt{9N0~>mM(+i~C)>i_R&b!*SzsM8W@r7$0a}o#xoCOt!C1 z*IeW@fP@WjuG4o?Jyqz0e@48b)xO`wi3bWTf%}Adb>_B1^eN*Y#S`xQ-W|d5af*#%qWjlgJ|t5oK4c@<+;94dGg)9d}Jw zl&FuJG%QRf6-Ii8x@-XAN0gKFi1I1TcOOxrv?O-Tenj~zrQl00UU+@l1dAXC}GNFtW*AINsbZ=mvKaCM7{&K4kppSI;Gvh z@=D0}0oIds%HgDS$`?su*M8(UiR-TvZ?a%c0{%2<)@82+^+*zmEn=mx-!;blK7NPy zjl{gBlI~guFAIS*&rz9Rw%ZR?y@S){!<0PULaeAU)0&Wy<)0uWjV7HwU9&=>_P}Oy0nv02^Btn5<5!vmGdkw& z7RiK}k$aYFVs~rk1VLNMV4Xp`VZmG&HdUEkh!+z#O5wMg{4F zl<+S*HA6>4c3`#MpHgjlRLu7~x~hddG3?3-NaPcRmoYz+ISbculq-#X@@oT`4uo{P zw&RF4MbQe}c-O!?oPDL<74B`a+xwdARx}wmbV`Kp&}tqET$^xn`0iF)iaX#)v8Fh% z#2UkKQF=>a#FkRMg2l-z*c>m71LD+5!&Fs}td}&8GE`}FjigzK_APl7ZCoQ9R4a-~ znuHXM#dfbf;A96ZBy;tTey$mx8j-M8-c1bF;SnAXlshq)(hG(}u#5%St62l+Baf;* zwn+%Pw3bq^r~9hTDbm(opr>yhD8YsjOc)7Zh)@P+we*!S8f9=p)B4JI9%ZnmV>RM- z=rZ_}@%Q$J1r?@X5q2n*NqhlkDT(UFoBQ5iw2q80#2xWKd~jt=eJ@H-D{E9=RMMU4 z54-dhLHzH(yU{DZ=+qC*87OFCUsbJrRn6)vK~SqYy05BRuB)o%->Pa4z?=3f(uK;> zP(d|*?N|YxlE@Cy^P*qE8u0Cl`5GRce+L!)FUplE^h}#o@c>YSQO&`JDU}SmFGgs1sP7|;Jq++i7fg-X(XVrxbRzt*y zWyC0O(Ky`Wga()CP`fx6)R9dS#-i#(ELFj+qJwY8+FK;)I%q~=k;dof`k;(M{-1Y} zpxbjvEQTWZ@cS!bqPuiI;Vtblo7mh$_I^{ zWsbUz3qyc-JBHpIJft1>i1@yFV)1SAewRtG<9Ck8q3Aqu4hplVFBqe~EM0}KSzeZ2 z_E4Eam3E;$4N*Et7l9_u;uuZ+)ROOKFHW4w5Ef)E{HlsF*54P~MMi1kJ-iThgILby z$U!hYQIyw>N(ABwk&v>=JFB%M zrqjvFs?w6!0rG4yxk_V`=8bN}g61$4eAw(Z8*I@to85eXbDG;i1-u`8^?lXu{pgX# zp07#_r*c$yg9mEC{Qb=#*J5*imyzsu{^L_JuB!Mhu};Y)3D!}O3jv|2PPv^VTKTqd z<~rpL5^SwgrW1c_i}DPe)AX`ii!njP94uY;mi}I@0RzSQdzo3+!!I@5eELLP@!hSu z&aVj%~pzoN6;k?t>VuCQ0gDNIB;3RXq?slP&K(nr^ig55;$m%pO&PjzhmHSJWW&T8e( zzT}QaCF@IagARW5i9qmV-)riWcgX%$KZb7d=|GU9T!)<8xbVBO4QGk4t}sK4vou!L zyEwsLX%CcGN1vA6jB_~Jx~^z-p)uo{McX-@)Vo#-ao`hXlD(^ImC2^r>GYxoYroZ` z?WEf7$Wn~962Z=-^Nka!R`~Lt@X`8j9&(3Pd_^KYtu-+$RJ`P_a>kw9j$ej&j3I6~ zwcX?Bdb>=6R;`sJRba3P2C`@uFGTBl`EJG>_)*X+M+FrmeeV4=>DY0Bep0yGNe;a z8eD%;0wdV3U;SN&-)G(InPj2l@`Q*!DB}43A*ax;swEl;K7I>$o4}UYk9%mqFXfw1F*hnXi*ZV1B0=& zMp8fs`AK}_K1?fWHMg;5?Txh`S_*2s4M&VzF z_#Fu4vnOD_g+$2+BOAS|SMq}1lqlq2IcA8rCj;>}Fw~C35`;R4k9!C&>_9K>#N|MN zzun0TxyCs1H?XXXU2R9c%@9LF$jg>6HYoSI&nYiApHmt>u#d%?E_if;T*G&KfcAXtNoE^0&?TUGL2< z>3+15gfs%JYjn|!UCJZO87TI?yi0iokR#S4?~=%PN32f1Hc<$dT%3`#yJH>29-NMN zTBFo?r-|#EN-pY>9P_+QTitdvSk0hchIr#JAU;=oETvYdD~<2aB^j&j;<~72$BAkroH*l8O@HMb4++qldhh0Xibi19Zip@ zPqxbQ{B7fC1otBtgyC{Y=_uVo@MthAkm@OI@@g#hiEP$omqUX z@-*1hiID?}pRf^Ah3OW3sf58t_S&sQW8BL8Ue(0vCFz&D^ul`awgoji`}pB z!VC=cB3x`qsKi{=T8$CEs_9~{*F?Zf_B4WaLub>nSXu-{5(IwCxm!T}Ddtf%m=F5C zmYhATC8HY|;nRw{D;}>Pwu#|jkWb-OkWQmU8DDboQ8KYDEkH7`vfG6Td|T@H;o%f( zY9wodE?lSNku2-5$o+0Zv`%>&vNadESM7>>)L;9d*&bcb`~HxtOgfI$$bRTe2R>N# zg;D}lN~qX#PRWHlFrx!PjiaN0WP+hb6%{4Akuus zlj=`G4q};}&5hSab_SALPY1YGYS|?I$!!d}lGVfFdU`UTz=mcw$&@3PaqR0>ob)c0ievL^FD$=OhtJz3YIoLIXv;*U`PG zbRXaY%2#Wzm52}a!9l>kMjpR+AMSP1ImNq`!lp8m=Ep`- zD#PstJjodHhEhZiC=XI0<|U3;irV9)sX%-mA`d8w2ookq_iD#Jz$3#<_qjnLkc1u+ zj=FlGqvB)Wdu7C)L~OgO3ebb#));(1`LM5|AEKfM@fwEwL6pp3)+h(*k0gVI`WH!! zAX)@f(qqp4-t#+&^Rjo}6h5GQKpbjAeLw{9m-dq=brW@{Pj5m=8&J|vRNjEnHXs~8 z6RbwqjBr5nGv%VD{Zf^QT8E${q;-GoaCDoz3DI`(w^)9ILV}Qyksz=hcccOF-b_(s zVr>^dJ3i7^?MLYQibT=3YgpSmz?Qs$@cT+eUj;^@H8Xm{NMlv*4Hr>Iw*zny(x5ej zO2H8ujl2#u+?&SWMx;^1H$ubL?owLcR~8M*y$CrF9w?cGpBj|@RBw17orV2A z_a9L9p?HEu+DFsSnlEny*Y%eK;n;YdNatZ?i6#icTc|2NG9!f+u&TquDnT)N7N@`4 zoXd=R!cnXC6q(c=dDs077Muf$!Z~6x-mBofyrviC(GmL?`s(`*D6b-()$LUcD~pAD z$JVRJ$I`Snr1gdcye|&TuY9aoBgsb#lDtX2D*T3|YvW`k2mA1+_+O9=eb@zf%s^A8FEM-E9h7=*S*@ARDhzAr^z%r4;9(&-j4Oq`{DLNqi>Tl`OGF~diXt0 zb=s70Gk$I1hxlV@nc+vp*?e_cYIq1n023m9jI>eVV`(=br8;d$_$`FF@N$$lCh8No zjFRq#MJ1R0kH=eXik6C8#*aluW}GD{%3GESe00|3?CB+!zh25)0)j58w>$(%>&V2C z%Tt!pjJq=rC|`Z%y~HQ(!~KBrHCKK~k6!+o+oyaxd!It4>{Ga3O%wJh+RS~59^)Y4 zo|)+BeM*7`E)V{rE`~Ts2jYmj=O@xni%H&? zca?Ti>)08O__stMGaB@u8i4W>YJ`@9&fVjP7Uy)7}AbI6N9@m`MCWJxow)Qpo25e5 zb@D`OY4F(OYbvWXPW>(EHkCtr2qtS+(VtbR{m-h@&Jd4|0pfp#VBg^Svl3K)H>U$W(G+fl=rAhsCnc2qC#7~;N%xpa4yFNzNP_MBP?(mD(aG=wJ2en1^N`|&Oy6YD zCLVN+Wwx@lrj{ySLV&=Ru+W?^(HQw*QSS7tfMa56n<2B%ueX5l@#UB2`>M)ck$Afa zjkgO8&zP&!|AGrhV5i4xv<9g|UgzOdKt&JeKS|_ZBG}_zCSJ?p zvNwzOq^yNyr6zTr-!QIxMzwi$IxJ>|S0jtlHQ?3toksmXBQfy%q+*|&1cI);7%Lz9 z$sq@9@ctHFZ189;bL{B1tk;TPlc-pl6CZ$hJBHY_Z6qVf%;dq3o9V+eW}x-6o`c%$nvbIHWNp4clTLo21nN;Bze9bu~sL%iJr#7!-nSmt}J@D(Xx1wYXk)=$)i zwG+AUR-b0PCj17h$~2l_uXpX2($!X+jY`2-pblMTc8ayUsaBd~zftl=5rOZDY=)W# z=EPi#l()^)(pXUApr}-X`vO#xi_P4mFV4Iw-ENN^Vk|FH8Zc!9Qy`4{&_E>g64S0S zP3sN}Ntmnhw_$>8n-zUd2NR&)n$l(fe{L5^&sNZnZ>wsdf2&o-5ywR;G_0vrvJo0f zzz$QwIWATqlx1>U+)biL%Q7*<8#91-t&*ueQmbT`WXdwg&BEH`ZI%0X#PWKi?FE}8)8pL`J-JcI0F4(%U=^zwFL&7*bdDCZ`GM}$4 zBB8sXOsbK5<#zEYJFBQ&^r`oD(e`UC;Xs%wKh`qk;A(CqeNMBAqS;dmxJZ07wLl-{ z#v3BUa=3i2MEzWJuiJz-?vXrdCorORW)CkkxSN!EK~vqNEHYK6<#%nIJUfL6s9Udg zcGbIgI<;q^UxI^?h!M&VZ^#7Vyf_`fc5&$hN))sH~sQ@RFOKx6lpUK~D9&I*iCVRba052&M;bXyj~!O*86%@ zPoXRzPFgmr%);~19#p?w%&{AY0A>9*6M6EtTMXom9B5pj+nTgp#|W8gX2mORYk<(i zc`uh(0|#A>uBkBYD`(FswOctXez1?Pu?E^*Yebg1r^ps?LlIO3gJXX38}6hTap0m7 zxizf~R@0froWjC#B{~$+tlTQRTC@wcir%Mos!ut(-b!MXte5twJ@5n?Z~4u7@&&GU9)i;kxGAO_TnVK` z3~Bv}i;5;fHonS}A-~p>k643a)zFJmSKsClnOG3f!=7TPed#0*a_l^VNy~E;4_5PnW3US>LX9y<3sq=}#k zrI>q6rL^6X?Gs?E3&DRW+v_dAO?thY^o&y(7^c4ZRhxm>ex@ahQ+V>t?HbaBUS6u@ zz|7c-?8QuXR;RpT(smG&qng4$iL>r+x^b zYFyd6&1&4Xiqsi3@ z@*z==FQPsiS!akoSD4?WaFGYuOCz&y_eCmHsNCLK_9BDIHqt13UG;VFGCHT6tUBLn zFGz{ppPG>H{o^!kapfrBFf4n6P~bQ;_d|pXp_bxrwxWMzpDY%f8ls_s5c1{ z(#VfZEpo+@_p^&EKDXK8&4R8PP`brSB9FeGp|05iiuusb*2W+nuEzBOu1&a}$F&*P z7F>T!RTFtW zTFR3h3k;+l$Q--ClXq^xSE8|X>}5>3U2x^PGryPSV3=k*nlR1U#deX)ic{|lzVV-p zXYWBQ7rck-3{pP8CRuwk@3*#^0x2+wWB0OBO*qETx)=-eCkrL!mdA@qx*e6@`D3=n zJ1*us%<#I@irGGQswK8EKh?W0n4FsMM|8I%-sSTd`a2N6%;dN+(tmFAP@JZ}plhni1f5epZJY{Ey`v$L{fMaTbQm7Ib?VeqML%YWZ6dF8BiG;>`)r~J5q|BA%ya@h4&^HI2`hgHTwFh7c9IIxcV zm4U<`HW22_%E)<7hn6r2WYQPc=KDlA%3M2i;o58cp+pb&`_ULBm~ z9F#_51%pB)*7)^zIZ3Siy3i-z3{D#}D2>Lf*Oij=ZEsG7xcwJEoK>I35(ZV6#Qt{O zBh&jH=|%LXgVJcsd);$Cy{;P4Ak;|gok1ZQyLjDmKe{gMuY=NP>~GhF{(fEP^Xozv zt_yu}UFf^_F~o%rfH>>5b;{s&%eW4;v)2{yU)P1sT^EX87dn4k=(FoWf4MI7e-lx; z;(qvaq($zB+tg7L^Xz7BQ%A`?5ZOsEH&5thh?@=parnP)ES0zblkuE^@vSmQTR$V_ zcQFP`Sf#fnMkLHUso3fhnk3cbg$P!!DA{3=qgZL|AVk+nZ~(06oRywA|EqNheY*nQ zzKyPh&by1@$oh^Ce!O=|`-@?;rp$IsVYsFpM9Z$5lop94o5DIX`fw+F=i1trTpf{s82k=JB&jgp***H}B~T>@D%#+c5fY zb19TFyWLDO=60NP6^pvg2X*GwSFpk{#K|v#_!DLteZt(?>=8FjF1=S0H`otCqr@J> zRt|?%egg<+js9!1B<_LZvX?16tV*Q8LoB7>MTtN{>y?S1ve%$BBpd}sRJc7eLHHds ze?J8EWKOWmC!=mZ6l|?p)w!L~5k@~)V=Z}qx10Al%)FP`mqV?=qL*QYX>dtRJ0*&{ zwW(g>aA$V^u-xFz0cHPfbPs&^8TUa$uSr;ejC`kwci6em4%mz4?9qg**+ajoj*+Xn z&JwIkaCD5{22IEuP=AJaj3Hj@{&lksh4n@+GaqT*ezhm&E4Vf7fb$=b`CnCE-Qu2u zmV>_q1R#=nqb%Uz^9qR*JNKt%tzZCj@V6GG1z%?JT(n zzM{jK#O+KD?CaokL$H}v2e$}!lRF*Sp>)3Opi<=5Mi0Wqipfzo$LWQc?I~C3(mTKzj3h@QA3=8Wl z`N|mE54VZiJcViuv0e!?#G`FMe6y-6-0Y#E#4^{D(KN)>8#}4dVdg@b`c}A`#&zoB zNT-%)Lf0-o`qS~~nLW7dtsHnmM(v&MThMen5I3W!-cx~Pt`s619LR$0*hjIw(6acD zLWGaubbhnj2p(vnL{%<`gnCB`lUDpFhnZC_rNVm$(u%!hCwPVp{sxHk7E=SX*y{n8 zbcgU;TU=LEr_7;MSi_ksC4(J2J#GZd)UeFW`Yg;hY-Pgu2}I!{2Z^hcSwI-#;dUT? zy?@S2ef~My2TUQgH<&`0n6?C!WUNz9JJSnqDb|V?0;Z;C+&2Mztzh-<#_(d+ct3{p zRj_O8a36)rSfLkYOC?)E*)qv&(EgTHMSDEki=Uki)2HcJyzRJLQ4>gMN)A9jfXylJ z#~jU^p2kIV9f!GB3mua+oqlqYZ?;eGb$Ss;O6{C4FeT0F@XbLupM(lSidR^xlx3|!rChtrghK(5@E9KB)qmN!E7^IG+z*&T?>as3U}wl=&3oa$O*3= z!`aDJ-Dy*>*91C}XrukGnV95^sSBWTf1=Ob>FiIT0Dxxl8PJ&b;DW(;5XSgF2PBi73+(oC@UK2@oY=4Fh0(qaOwJP%rL^cmw)PLS1&O`pT@Eq#s=;nk%pCF_Od+P0{0eFtA0ZV}J@RsRlu~+?WKQ;MQ%Xq5 zMVW1wNh*5~`YL+3X`AxAX=0(qmKf$}s#rabLWhx{VxURzY{xifD#=&d8xBkwZ{%b6otOr~%PVo-RlC_BkX<)$~=>pyoI?kmGb; zjz7y^er^pc8m+Mo$1w$t*zaX1Gz0N~j>#{$rLGba`WhvEC~xiyv3k@(05NsmHq>$H zeffv6TgmTGMmvbtg`~9-XB!%+!}b>&Jbe!*p+_Tc*-7+myDe}a!&5*lRrkh6#|I8r zNG6<{xHagy@d4)MBr9*(t${|kv|*cr%B#yC0dd;(kILl>hGDx1v962|VRNBQ)zmGE zK97oOtji;Dg11~KAIVUMw9}xvK-ooynfNNj_P8pgl6>d9SPp9s@f!oV@->?QR^p%| z6*l5jZz^oWsb2X1shf%FQL@mK4sEe_pj?u@wWOhZq;g;=wZ?~Q;9m`ws;{v0VR&9> zZg)-hUubTG&A~9~A17E7*#asp>Wp(*!p-2ZDJZiFFwX!!aHvVuw07IzfdgU8H!87cHG$t2j-1YS-{Z|5p%r`0%R!4ySEaXy_cFukL33+sHj*d1)ciH zLNp)q^QvIdq(272s)NmHk{MpVph0ZvJS;7Rve#+4W=jft=$?)$t}2BMb?ty%_=Py!1Cii zRI3EAGmKJGYcya2XAun$>`1>(%-_0MP> z=8(#?ht6lmx_{m@JAG_~7qdJxnB-vQY%1sXLHTl3A5vdrU_sXv$gRYNX7`N32#t3IHl z{9#@tx;Mk0B>J_wYZuP4<{?znhDt7Py?;kxFM*o}L+riHahpmiNY-|zZYx4t^|jVB z+nppftm=)#+l;*2Syqz2G=vrPi z8#&*T*;8|>Lg!JXJ-W^W0+5}hG$1A?z{-q6nWXbL$-}eE;|@C| z*suJ8G(Y<73J%6oIKgJU5AJt5J%uPb2tTps5Co zkG-`P%_B8!Q$2L8O<7H&&gYBQgrYp&58nf9J!p^pOV;nSiMiOy))@^-cRu^=3KDQM zZB(rW!f#c?gD#<|8rfxDj{Q+yE5+Tci?9kZe>gVCuT3JcZh2bk;JA)xZ|KVB3U;?T zVh81As&;=Fn(%P621IT@hBezY&vxH4Vw3kQZ{to|Mcz*3<$Z7h;43S8@Q!VT2^ogYcuM!zyIz6N z>P{cZ1fQ@mPlJ0B*j;0Ej_9)M@mm7XcELNn2SJ#A2gK)yciV9s5lC3?0S%9cRCs^1 z-Me}Mw<-F)- zcP?o1%qa5-1rk{=6;~IsA&A`&j{Vq@x@9O&ykKV5q3m^TeSOfi#?5=zLa5Ik{?_4%Sy$$O1aX4%lG<7Bz}^5@Idx9RJBt=8y|RCveV+eK!m ze?|>GgEye=7$X`hx)j8Xd;-LmNR{y1Vvd2>b>W`Zs@*x#tE(^d>gz)=8^3JVq5&9D zf)j#WyF*%FXvAU%*_*MMY{|MG3cPXiZB2D(dxA6krGb|)cdd-L(?)X;zl!>4i)yrdEEc*fhP8eT{Bg&%dE1j zF@`u5X51iunV@Z#U3V9;c4vYhbwJqjWcRiE?QGTjL6x$Um<};TH)**YLy_2QVX|td zb!=n`j@Sstw`-CklO^oBkjJ|n0?s&)G}zv$150D|)H{axQVL97CMfdqSjp+53zMA2 zFusNg5ony-s)|74)L(L_5}N*#OE99KDP@i;%q@bsN5nw&|F9N(*;^WN1nhA+mZ&Q1 zq#1FVlJ_71HsX+z;jm?$|0h-VVzAN2MlkE~=oOt7-qVmDqX!rR(myY66dKq( zWj)XKYOtZk_G_?SAIzVxX(Y9@h}Oc~(e?$l>5>)7Z$IKAeEhPiSBK9lNadHoPi-d<3&j$K9tT~)lP248XPR#P}GD4RyKPt#o+{v z6++ORC}=w$<5-D%P~rw@9mw6cpOcpLZYxCBwbCpY$xJPqiuQGWt`&UNrm8}c@hkX| zLs;^z#?)Nxu0y`np31`2Zj-RpT<>}goZ5fGzC~J|^(-n}iCC`Z!V)&r8zVrx-i0M- zG&ux58dP=pERt=CX@+XT_MpsL+h{i1u1B)kdEE)SD5sO49EaE}W@4JuloLD_PfjF& zeWc8ziw4`4+Wn9DQVV&kJ~2#^CY zS{8yzc(s>z>_e`(QUF$c?5Du-L-U!_c@+uXvC_dCj^7Jn#`f1b#IPM357uJWb&bO_ z+kFad4_xQh+Iwf+SIm1Y*jFi+S>&zC;-o2l&ZY}%Y}l*@#2bzSaqMYXGF~1YaTR?Q z951hF;>RbRF1q}!;C9cz)=f^hh8G}@e@b9{Fe*zT@!efSLa9LJH_(0&A-5df6+I1p zRsqs-rD3MD*A+w<+f~&)N!Ou&L+h>ZCK%-0c;{ zz+wMX$p801;Y^aGYJ#0~CNt^z$PYDhajNG8i$UW2UgcOBU~pC=3Mgc2BthfVKZBHo6L z{$yx8HXgw^XsU6NOaGMjJ{!7XH0^LEoc$b5ETJo$8vmKRYh~z49OB8PPv!hoe+j-G zoLjKPsr|HS)kCQ};LjJ1_CiC>WCkA(&PCH|k{IIhAA$JVXP+$Cfy|9plCeRoy{k=T z_Vkpt58!Eer}}!%#Htb(3E`ARR*|0!RK$4p%_xg`U5)9j!fUc6_|db4I0%9cD-RYI zyyMiJK9+*g?a!n1kXpJnvY1$s$Gba%`~UwRqoWFbHy3f6qD6v zaEMyGU4yr4&)A}&D>^{gr*}Wg>cvvxQMUH187T>XQa*hncs^)YwRY8()a3;)IO*AU zoU_in<4jP|XNdd%1jKvWp%;D4*_R$Y;U5!Lowq zokPybE03pyoW|3f;1+p5!ESu2LYpvq?}SU*Sj_3zM)EQ*e2bmErk1?IJooLMlz_pi zKfS9cE4UB4FB5$G_z}mqDOSQ_o0a?RyW+VMMqf1_cYG^0J3}7-GZ1IH)U=VU@U#gw zG0jMl7#~f7D_HWpQc60ULMlTz}ZQaDkBX+_;V-jXGc%x*7V*|tmK%{3I<}YdCe4q{G^wD+d z6BhVvttq4;^VzDxQ7u)HF@9p3$^IPZ#LP!^q#OR&Okc+wYuGU)RpKc)RD!fQPAOV1 zt(g*_+50+qx-*>{uRk?=j4?bL5IvPV1}8oM@zVbV#D6Gpb)-WRA0O2Se5JnA5TEEZ z2+yO1{XvJhy_pNab+PgX5Mr=NbTV&2Sw)jIipKsLb;^SQ?DfAbG>|rgR+tro2N$$OEkhvPpcWRa(_OShMcDRGM0_z zr@}K0GdiDYGM)GGDU*|zr-*)2&i&#VRV;O!1mbuQCKmPz0VX~?Dm)v+iF1UXT0?S` zWT9a8>J&$c`8I8)Q_d6FYbFfj{?g2zX3viEaIf-H=ZaHARsmZ7WwYL&DIHTtX%`0P zx8UtPP(ENRRMg@~fD9MX~0$F08^ zU$VHzKt_OIGD2Li0!RJasZ~{8OvCdG1O z0%z2R;X?c_T5kvD%r{sfUWb#IL9Y?E=rqE+xP~CE6)OeH&z7M1xY#Q4C0vW#S@2qb zH{B_~O_}ieL%94P_CCW2<`m*r;mSk&B$WLdRK$Ho4JA^#9ue?z%ts8{F-jXVas(jh%L{Gy%|FXKrQoHw&!OgnEuuOO#of{wfbZ#vs8dNK_z zffl$3Rii6+ya7`zJZrbW71uon?nLit$+3K#Lj)h_Q=b#k2{&ZytAW!f4mpC;=wi6^ zRl@`KOStz{>o^skZ{SkY1lOXu7&hmzZkJUXNYf?*nS?r){Z@M;&T5#oh`%cS`&)#$ z`o&@`xh1z2=g-RXjrUcjKODZZXj-8={qAse`uqsU4p;L?#J7FJkz83L9Ies_ z%36@o4H_XATOzk%k~Kq!w72}yO){P@JZj$L=lrDeJeTGTdTe%+Hz++{d|3Gh*(e=W zlu})`tn`!yi`Nw%R=zGhtigHt)(S^A1f08KTui>*jHu&d|zoH;6-H_fS)gQ1NN6?W`FdI1n8NvtnBqqi+}=U z*+@TCIs-66Jj?;{m1SeIKdLN1lw3A0d*;*mfYy~+v)3&!-tZ~((AjN!Ep_cItp z?*dNJYSe?qrekez;M$A4SwDnlIPM#9HQ{Q*H4MH_ui-ia_+PkmfREv_;JO9Zow(-W z`T?%dAMnBiTuTAh;985T5ZAl7{ui!a;JOd#f5ZI}E{1r!28dHc4#l+qS0%31xVGTh zh3hR`Kg0DAt`oS<@$@25U7r5sk?85cIT3(ojLo}JX#NV=E)=GiT5Hh*!bwxM> zv+JX>$^NJPEq)Em*3E%S@WlUh8H1nmIJ$lVDCAnn=4Hmpq9pNNMLRUNiN=O%m|RJ| z(!`+4<(w>r3r&rjflfGn+dhIgI!h*w)aqkLWYk@CeTZLws? zpdz1x18CHpM8mN&xI(IM>r`%`5gou}KtC`0B%fRBzXny*4BNKJ%X7nQBN_8~$r?jLvls$nm;!5Pa8tl4 zKT!C(q76ZdCtQ$e{c%X-626aowXD_2xW+YNsbmP0qPiQMSE0GHsU9F~M{QiVxP*%q zBV~1Z5f~_fJw4=>%aLW~#+jd-Eb>S=$0_8JRL_xLFzFzCMl!epRNNt8VwTOG?F*v|Cz zUEOG6ccXFrx1bV1*DdZ+G&B#Vl&_Bq(i||oxfuRN_-U{cSCT-0n6N8jO#;&sJq3!) zxSD=hb30%rZ>EFWVeHZ=toBSGW-g9Q3M4)wASIGQ5P zl&Bt`$X0u{d4Z`Am!nW47WcDQ+`TJ$eJhziZw>r@qbqsgwo@Fb!lM5qw0(~tZX6s6 z;-Z{7f7p`2jz}(%g&!6DXqF)VsL;QhWb+yMrq^WwEdDcvf>;^gGstMRMWcInWy$|0 z?p@%cD(=4VIcINYH=FF)BtQsDa&`$}0|7S}B`E4i0*BpPNB}P&Rsvd!m+A&BEY?R( zB9{%&n#7<9s0~Od_0}W?CH0cU+DEWjH^jEerLNjmN_sf~B$MmD-`NDAwtfHa^FGh} z`3L5lnK`pF^PBtcH^0kTUpaWk2-DtM9$4}K)b^;rXrR2utUCtf8IU&4Q}6TMvj{1K zYzPFn9e0=9Q~WBuE6M8O*abtOzIPvCxjo&=@aa3jjAigIQ-nMw@VldK;aO8<*#+BL zrub`_va)!(VuChHcKuThuI^81V9%%2Uj>bI5JC%qf?kwg2vSHnQqN&=X`zKTgMo_^ zRLWs4XW`egFn>~7 z=|-VrE4H&YPcy&|{RaSN1;Nm2$DKuLCWykIK5xgj zzXF-FcoL)ykfOQ?VX-1Xnus@VONj9#vC}&{&Y#Bk^x78H1oM!mhN_-pU*6YZJF?F%w?m3tQzGSv^ z=@~o0Vw|N^r;5eN`I(A4(8bOwopaAx&iUC|OVQK^ol3=nwF?E@mNCE&VB3PiT+f>( zpUwsJu?h?8SKBHFy4a;Gn}BT6G1a7@={o81)8+)6nl2Bk8?oTSHN&;Qh2X+)5jYJF zig+XuPJ;8W6Bt|tJB7j3R_i1;PGcdsWt)&5F1Q(a!5xAN!<~jB*k@DVGT@fM`QaXc zYk+HpdlBvs+&ge#xawgm=|1_#zx5GI@(ocELRiPb4Dd!)uggB@zmbsp_3t8oK09O- z$9~9vBP@LK#b5ilxN+%Y-_0NW{xnOTIu^Ek<9pmU^0!_d-a2eCus^*)uh)l^P{!~R zAbRc?Yu`ERD^Hy|xqkiRlkmJd`CUil;di+ZGxtW~NxV)Dhr`_uAw}ik5Fz1HIVVl= z@i`%KDx_OaPW{5~Azu7re>w(u5Dl-%SB2u^NjNvRyRfh{_tczH{QBg2lY^|EeE8k< z4lcBQy`T8uuRPUV8h?tMA|{hg?k@j8l8_G+YN3MM|APwtPt=S57xiL*2QbpK|85KZ z4^$Asxfgpj|3xAMp*U36Lp5(^I=XRHNuU}vJuER0*O;@sEARD8M+#CE@t)^$+RfT#|e8p;PhUQ@ITAHJDyne0+E5soe0XcOOD; zBh!aY<(`~;>J&^_tzT~(S-4&fvkJs|mb=um|L-gKU#Zunp8fx>7Xy45))Vc&+k*dv z3i6kF7IO+y5^X#7hgs|Q$EGZ6W`dr=+$%lxE{hE3c2~YjbfqVWt}@i^*ZFmm`a>+$ zLj1cb=3^n&LAl{D<}K--e9{j-S4>L6g}9K(UF7S|L^O?0MElNq5XGT@S7FfG@J+mOoE(nF8=-a2jerb z=#qG>(un7XDrSoB+g`EVWt(XGQ^KDTM&k)b67Gt>GX4{*YAvx|iGO41Iji`fO-9P5 zgu4<-@NXPq}WJQp<*nUmOT4Xqo_i3$C> zvE4B}k>swW0!cPl3`A!#a*0V6z1@&t6U=eec#)4@_J_el5=W9Yl0$Jf#to1^SRGck zg}2#k#*i{NY=rbD?u$@BERAYC^smyyArF>jaM;A9X_G9hM))mHWDw9s<8^7_6=U%x zeHtO`_DxP5Rfa38_hhB?kW46gD7Nq`-)(3is#d4bno)(p`oYY6r? zmX6sg3ps|9qQN9WqOqjxD@zBR?*9;v>W{@|k8u3qs7}|c3n|}1dGfp?GMX^7Y}m>D z`q#hy{PWNM@|PBtjV{?zOKQnH%S5m|amg3{a^Wx0VV$bt4EIuRcD%_u@5tTCyu5AfFO%m7Qc~cLVSYrV2nF0=AZYv%i4x5Bgh=hYWuO0#toRieDRutZ3 ziDEy16&OYk)AOhVGYJzoj=)aDumGc1=pRB10!Bu#K;00{NE>?H*bf*f0?9b#i7IEqJ3M1HF-m5eg@fEylTcyF5 zU*TVv2OKa1KfoxFKFHEbC*Z_`wki5Ro&1FSbfL9Sk82#p&ipC;L)C^wAA_jBrGN{s z2Xe6XRiNsOw!nR_^m`?#N>&9B_Bg4Psl4GJ`KK#nJ{!0|AMol_GG&QFoc`DDQHlbY z#yd?F_mwQH*yA_4R{OVByjx*fwQ$weRqw9)z7+AZa-9Ax;8?kH(M+jj;hwN4>nZx!=}pfY+iJa3NxMDAmR8NxT}&!ujw4=h*C zV3wLeGp+8R;H8vrBM+ra}TaGPi}jjzZBx56g+j#rN;w+g3PoAwfDbSuZgK)!pAEh8xZ?`w0J*|DrGf+_tC&a|&Cgym z6{-)(R0ynwo}@QOxl{BPT>1J7{40ORgF5EzuAua)N%g5q`u9Tt)UWS?LaJeTd>pc3ftn5G+KoHgwxMSX`MDJUx z-&_Tmy$Yi@uu6a78b1a9I;~<2G`yUUDQGO#P_VZ`7_)W;8ax}}x!(a>0UU1t3XC*{ z5<=1teK zYIhw<{;&SAg{}p))3YjaV_WMeV+FF3G-BnX>lR_S{0sNZvM#1!@fZCU-#@(?^5Iwh zbNt2c-+a%!ijZIC{$u(NkOxcmk_QDG9o}Vo^ zEntEvl8)Th0{coY7bSrNvqE?bhPJB<=5ss=w^zYDgBC zZNN_diVyNanmifG$ssqi)hp#OIRZcQOfjoCdc_QjIgwR*Jjp6(c+KP^flSzR%6z%> zKu}*0ANHW;9}P8mTOi#>5)9q>XYGkO%JpcnzYe*B`oe6GgvEnp;82S8eH7hW@<5D? z8sPvq=tisNfe)9H^weS91g51;)C+eb(bGJHKZYXqP4p48kxu)`5J;}E5bU7n89&x& zmOqO=&e$d)vXVEqii(`zucA9(3rB_91Sc5?)=#7@kM=c1x0E!{eP*qr$|uhif+Q1X zcTmZUQl?+0tsB}z)e0lZsvP2`LgV^k1N`?6P4ycjSf5+0)4t78lp7+WUs)W<+(a{$ zZ=%xO{x>~irQ8+$ZYjwyO4$$Uw34B_eA#|h7E^-BdOXYna6#QnhZb(86y%_mej+Ud ztHcuprtsT6hm%%8tZaE9-{W+V$a@?Qo_#RS1qxbM6i*8N;w$x`)rH)k&Z*{@6FKbB zKqIB=UB)U-3b{Nkwqx%Ar@#bdqH+Z`xuNPqR8QV24V^2{=XPwSYy6vOMQAf!CXSC} zE;9DaH?~ZU_PrH-wckkYoVZGnJt6xh=$F*@R*-1lFQRiH2Dt{lx1uj&0IT3)gIp&G zo!cVLOu1q$MqgD(StfJRPr$Wo?QEsVTq_;V$(%Vr+EmZmcG8nr5$}SgG5{XZ0dUDB zw#g7n6MI$Lq0R@Ga?mygV5o#c@3MY=W03W;PCGQnfKxGW3Hck}0oGUIE;ui*wWyPd zOyKka>D`e6-R;7IY`dD&igX<0dm+|_VGO0ycA|1M7B;kDqeUjXe<9=c`e_m0lh6Ou z2Tp#d*z?;tDBy$ASv+g)RcPvEP>k6ib5h>^t6gO8)h_pQa0ZS^c9jJclk!CD#v&Ov z54_Y^niXtXX5U3qx? zLZ@dfl-BL-@Uk$0aX2BoSgD!Z3LY*<@~wqjRIi*G?b{vwCB<{qD5(`X zw@{(>W~F7vVY?4hZgv`i))DRDp{T_2+e~jE=B_~53>^$r#FNrO_Y)546Q3u6 zLd0?;xn|;zDekywo2Qk&N`7)-b)wAc27!SkPoJi`FcX}$e@8xvbrvnFLw}Q=3?Wrv#3kSfH2~%)3qR-Ah zL%1K)rDEj7L3$H8gq85KHr8rCM#$8~;v_5-jJc7;_#xTJGJJjDvl`!4dFc(9Cng5H@xSpEr(=XiP)jaS>fe# zr-vs*l(WBGQj_XL+^R}PxbQ-ps|Gql_niHny{2`~+4{w+TJtaXXV;_}5m&d$+!~eq zu>RtQ?lAvCBOHO_*x}!4jd%wZGSD++WtVWgoP>;o_3J@0B~#mP3d*pR`a(=TUdkuOL7u zLj%-Tyex{)^7Iw2isD1;9TKa-y0DYt%E>NP?xg4V39gpS6D1foc_>A3LcjZ?7@+Ur zmSut%I;WE9ke(>_TGf^ zp{za6E>#V%@Df)BwjEsJ=ng1~Qmqu>P8gOUu#T&IYHJxZIy%n~avPOI-K@jsl8EU< zZkv8E?tFIkq0X{_)?V%e^5K5oN-};z%mb#gn9R6QrZNM(!VJI-*$*HC;8-!x$bgAm zIg`Jfu(uv9^f`QOYlXbdGmf}!Lr(&%WN{@G=hBnQ&WIupzX8S;7s1TOZ`$mw`SWcs z>a`+mo#RBCdDhQPq)Cn7^PYvTY+i>Tpvd8JoMe=N&3d--XE4=8`~D;PUB|?$#hDjQ z+zHhMBwGvn!HjK}_AkmP<1+S_YW~;gt9&+gl;`Pdw4Kkc)M-Da*$=%&f6havl&sU9 zrCVr`EGcZiZiI|KLgY1i252hOdOUZFp9?V&$JcvCFAht|WtWz1g-e{jsd1O9FB|44Gu1nVo%<}>QIT7%nH zpEHwnMZw2jp$#aHgK0`EQZA;94Y$JTOsR?*IcNZxtO|i}} zZCr*vQg;5O^}u${-a2Q)B5ult(*0kVK`nISUJ_=!3a4LYc9q3JLDrcn;#R@Vs(l(Y zQvHt0jJh^@{Mc``?kKAwwm%iWIPdq%XKF+@cmlRi2X`qo`zBY&XSPXhRaSWIP!u9h zC?TEb3$2%x%I^HjR6~~+-vUI|T8KB6z8M;Rh8`~kA7b5QsTtrND*!K#WmSIJCoxu_ zcv;MU6tg(LUsNBXlKoQE5DVaC)+3jtp6F-sR>ZLd@lMQlHQVDN2a_>yk}gqyc5i5&1@(O~QpC4r9EQ7G;1-@c^7Wb_r5n{sjuMH?YOYM~ zl+SXa+tCbp4TB#%z(HO!M*XNUr~rzy^Y9@G_9Rm-&xe=4XgdNXbO~s=SUo$QLs0UMiC_e3Zi*fQtzL ze3ft8Ty`p}5%}(hL1r;Sq&Hukjza}l%f!oC6Z|oZT{+tKHcY=CkFwsWMFWTjAMjPD zjSttSTN$e{-V?f*tZps+MScr?!(L0@<`QDz!wCNz;Sgtxg*y>Ggz#G&cb?wCX*clP z`9OZbnaB9$#RX^b6AP(6dm^fvjss|ln!?5$2EJZ`@B_-e6T8dmW{eKY)iJza5l|nZ zE-ICRnF>3M$ry_grqa^urSp*r8N%`Vanc-R%fN{g8W*(ek>Ap-Y|bJ9`^aXYYviR| zaz)vhFNyv)asf${3l_HV5!F*RP}}z^JE|hC+P!3CRg`!4!KPh z_w*3R)0#kr%A}lw*Degt@NJ<>u>uJGb{e(e96|QsJq=@O6w!zP(XnE&x?P7uP;68= zF&#$F+>WoyIW|1L*x_}QEWP&dHuC5c@`#M7yUg|B6=V}{q3Wvg<+8pS~fu`KXZ88_M6!I!$Y1f2ohVCc4ToWJgp=qBP zexigeagTdzi=2DRktcpH+G;-MM`;b&iDw(>FSG_0`mmBhN$X z7GE`8tHuR3Q?FW}EQUQ6m`<-RPz?20&2`55jXu*8LcO_8-<03F=kXdSo`GebEI!8e z9uWa}V#Ls-uiMEq7-v~wz-0>FLYO5r9BZH=R60N}auew?G+F9i^u1JM4tRhlWUZ@H zPFLG^oT84FFe*2(#ju;(75BtI>rbf*71eRpy8I+Y*Nm?-H?`8IMW4ldEWYWeAat9W z;_Bj?Y+1T6?<5h6GrkU}DqjY{ql9{U(?z!Wz4Q)oA6+dna8glkR{!y1^-lzKj@3LN%*rm3+WR+&b{U#Lxy_@ji*^9M zShRL7hrz$ibP0}xTgH3Xsyo6fL7!N=xX@lF?vgJ&Vy}ZjKU0(Oq_~UgO@)wYdnY)D zn%e0aX$e${zXuDL`H35g|D)^?Urma|wV3LEHGy(HOVSGI^`XA5cKVhGAb8z$bGV&W zi0=t;$5@q0L}qQp6!BT6bson0a@bb`E!#ToQ%asI(==-t7=#k*mcQali-VAHc2_y1 z{L8ds*6CB6Q2UXu$($3~``NN3Bc#UcKj63~F`{7$4orJ7A}3;`reFlKa|autY^aA4 z0eCqQeufBktQ^fGgtafR=@*OI`;C&I0AI5k>2DokBaqT*aE~r5Oc*4+Kk2ESX8LMi z{cD3G+Qez59(CGm={20yNY5RlW$@fN*o9yE9@Tr=`vp%;>amnex;MK>;CrmA+kla) zZ6T6Lo2`DuTNv&8E+t)2tqBVy4)BJ|kjoVK^n70XUOQFz*)nvmb`{A#MrO2dr!oPaVzs!0yRjllInu&KitwqTkc*WZ3lZjW;)z(!wpl0ITK=0y> zG>8=M!~op_tbZQP<@?BIkuoDjD|5Y^H?9F;{MW1*h!8|@VLGS*yyMs_l=Dfyc5QN#Of1kA~qK8fp2sy+=p&tJ+6)i z;19dlz_>rw2dqE+F(2#CwJ{&-&xc|@)}QO(yV#$BG5`Hv_ggz{bdC01{aD|zeq)FQ z>$i5=QddPi?N`%vRtX0R8AsJj_%Cn3nX!IES8xEHV_mVI9^;<$+H0Y=&3#qa)|3O( zXer4FCNw&MnhJ#;fc7*dI)*h1VOT#K8`jMj*6nm}Y&7rV*+|}xI++Lq+&=+;j}GYr zJR8o>#{e81jxUb+mtmm292;oyjnTekgQz~g-j_+2Sa*V{QG&Vlk1;r{O?PAGj>p<- zhO=TFzZGaMM@+TL6l1MEVrt~zjJ1YZQ=`3!DV%l@v6XA&+==1l$EyVEF2icH!xDCc-HP-+i;kCp4k*(OTTTB4n+PMsx6%(7Hee3#7s8R8N*jS(}S4R5M zM)sEN3I52tO-S$7?>f^lS7B-n%z?Vr&DeC!jbYkCLS_bdMG62nc09TUV^i3pdRu|*>1XW9g0yaMH6=?^r#ewWM zc`SQ1-q^iqEZ4cn^?`oKd26rs6SKX0tO7{!$XJSN@a^{g0Eos;sE{&07Waj&v6j9_ z*0eT*O0ZnPMR70R$OrR5NZ?gI=sLsUZD~}YI_hHcS;D+_bw97PeRXW3{`j|%^DW5r z%Kn|;Je50aO}IU%*h9DD3Y!65J`sTPn!cZljP%VLN=DL_{szogMlMX~GB#FpNZ&8- zVA#=F8tr>=z=SzRh{wf9z81uONf|&&e{+zS%>b!|?gE9xfKy!_n8#)9nQE>{25!uo z?5%N4T*or#>0T@X>FEDCXyP*Tu|1FX&%io+TT8UhLT$)l3UUaEIK2^;_nQ8zDeqvz z*ms8GGU0CkJ#Z7fO>6*da1;HO7~dq!O~)w9>}tRof-hK-eRzKh@7uxEo7z3ncgF~) zM6<@>#%QFE0SF%h8p^ph*brLI&si!fgC0nson73+#)oJt@cKcDr>k#p*0Re znrS|=pdmBtZr6=CT+}AHUFh4$RkvcOdXe-YwClkAOVsUEeK;G!rr7b}r z4ly@jK<=bB6QT8ppzCfxe~t9Hhp`*$WXC={SDu+DCL-O9BmfEi`LWpfI#xfF*&>^7 z?w$uI%IHE(GzoyZiy}Q0FhI< zHj4yhdz!6j551BEB~JT$lmU4u6a8hGuy|YxBGt+0NMH95>-DDw8~P8U*R3Z;3l-3O zAv9lnx3zIuhw_;KBu7BA@(^|&>3eZ73FCmYoT4SQsah4p&#REz!Kg8^zZ&>7{6CAb zZ~wjyqicq0v7lKbaVK>WVV8UcHE5fOUoVNW4&sl&RJXP*%0>|bT$~KR_xzjTG@7A| zJ1Q)E_6!MxDecNAPDruVF3_UI}P!i_M@l?71|bM&5^H!&hd%dbOG3c^nHkiz=DdoE86!I1;&p2K^n~B5dI4C zHJmm(`XojjBz-}N;hGkABsB3^?{>oOsj9=!*Q;?6HdUU4Z5Xy~9VOiPM=OOwUDFY@ zWrwbb(F6C;>ezNh(g3)w@wfE2Jw!K&zooyo>l#BeD2}bX7E^c24leeS>b6-Z`t_0P z%Ybn3TWN;MX|*FGeSaR@iuE0QCwOw0$83u5T~Lj!{e7ecaWzzKxfnmA%hm)o51h+F ze5f}MMr$}tikgx3gArLUvmS#oDAs2w7|y@u*_LT*0>0qC6KUdNDc?a#Q#VGXws>SK zb*O9z`#V@C%)l1<9+6+s?YbM*)z{7*>H8CPMmQi``#^PfMC{<*aI|m%*5euj+=lLd z0xKz(xE$Fn8Q~gJI&8>pehVLAZ>6Q8hC?fVtZa@UoFDclw=jZnE$C=$*s@k0#mD7% zQj5FqS}yR?zre_UHinVot`it}5z2Cmya>h0FP7+PgL8FtxGg`gdLYV1nzwV>(<6}m zuHIjEz}rY~5`Dt>ZrDN;i-g2ujkqQP4;0T&w{{((MC2+9?z$57Z{8BVe^iO(JHe<()a8uiSMw)b+B|xOb7>aI(p;m5X z>!|J+TLzhNA27+(!U8204+G}0$g!bm+{t$_N}92jJ-1?mVR9WU#V;>1)sm){yuGbL zEo41#X45qRnUM5qNt z2P=Lvy|X+eh#bm^rcWS9Wrks3E-O}(7!6@7T~aP;vNfSI1Y-rjMSucVI~!tiJS+k5 z&s}l#4fGE#E1rJ>l5gG>I`^LXNjjprc(2q%H+-S^H3BHi4N6i2D9DEe-v@ zl=Pi?NV&Jt^LBlhWsU=_v!<;~%Q8=nTuNJkwC{YK_7DG%wt;>zJMM`F`p4N;JinY> zrpe~`CxqS0w>))O4$F|kyI<$<(LdzC(r%0}tqbAGfz0Gec(4DGDJv#Yl8;O{l zm+BEfF098xP5^%N>+F&fFRwfXi$@2MKI07ICk_3NcvdVp0z<8;r|@JuJvLj8oF$_O zKPzwo3S`Dww-wmO3QUMxBm~sTmxuri=f^ygF0YIql{xZt9rXVPb$Hanp$_5Mz`!2? zW5O>^Q7Ke*=D8^^(%GIDsYgV!bEdj7ZHXDXl~~t-2@xZuw$mNrh7JaJ3$}Xg)&(<; z11Z2jAohg1{ElfjRIqu=Wu=GttjS#oJ3rf|-*x!hCMQothjaU=PrwN(TeN?#fzA{c zf6vs!3@n=JlJQ$dGbfQ+IKmDiu&-1%`uq9zi@#?+!2zoVdv;O%gpPHFrnyku`yFxl zf_*T|e3!TlvHcr!5Vu8w71ad?IpM2;cdbe>Kf+VJ{{A}|Rg+jBOTX%!r(G`-tk*YYok!u)MCcUn6=lemovrk~S1lY~VXmM?JJ%`@Rx z-I~y-?~yUx)?$fQUPcw?PxE_TeBO;k5e)BU_ts2uP8AKhmLfh*3!5GF|;QoWSSr1UN&^&UWu~m<$Rx9MXl1(?b7-k10g#V1$p~wB1tjB@kvF%~JYHVzQ zJo5GdUKt$$tRMc>L0?2~EJGC^8DIyA*9JgkbMwb_O}g0O!~%us;xQJdo~=_^iv0sB z&imWd;l5KtTO)2DC2S4x`~W+E$FteZPJ{!VAGFisi7W;UFMBrof55IRxWakf%FP%h zfyIMUg{!)CNb%?XoF7br9H(dV%*Z6~@H#H=bx+5R zKEwS4M;~@PT~N+P*n465sv1lbEH`e)Rt#yPZ5Xyi;=HV78kQQUhW3q3I4RI+pA{NCmcBUa4x*7 z?wMF|_@3nzwe&jNS-hTJOXuPJMml%z+w{Zqd^~@bUWI2gox87=D&%e2ot^~7YY+Oa zU<9(#y`=;~r5!einTiBD4*glMaD|%{$;xys24V0Q7lT})uRtgafwe58u&wWp0PgNR zoK%9FnHHd_X)-fkJi29$o(yk{*FRyXH`bYI8OFG>%H@?7acf#v=damT*1LK`U<>Lw z7tia&4R`0<(SLX49UJazy`uwKxx}`dJ9mSgzlACy16u zh(8#+ybhucISSMDBq=Xejr17?3(lI!f!N8-GaY~zbFYJM>;PuC{#hI+8_l&ZKpHy5 zY^mMqSa9Ks^0?agUK6q68Asyr)RBbRm#}cyYUK;}iDIp!*lX=r9`F11aNmnVVxtS} z1;c%G==m5^mjQ$EPWlty=?AQSTNCsW*lcwPyEqFNNzxPQ<9BgZ=8LblHsN@RuhzQV z^nLLlT|{0@10RfK)wy)35eDKGq3^5c8^*ZaUy(%A@OkJvVQho1(>7wp^~USqhm-l{ z9=k}a<%RjsT(8>W8kyo>wGE^dn_Eq66j4%QOqN@k0l--yEc?;SgIGf$_Nyh*GMuN4 zj6#Bo0CxStR>>J)*=@GtBH7&s1R+Thn!s~5L%{9WAvz8W9sCS)odt11v88UF`iT05 z8rLMuG55;mpZ9VWuGh`Q)g9;(859s$YFfrsur zVw1q`32=$_eiT00)X0{|s;cjox&!&l&gnG1%jUIsOi(IuKbrSmN-{E)y~-;Jxq@gb zs(930)p=avQ_GZ3X{hc~YE{2mn$*CCx|j{XS1QT10uou9F~2a^nBD+(>e4sH)j}U^ zYz*inQ*Cmi<=^(bt;vqwBD}5c0Boft#6k&mLFl-OkNM-_M_0uBR`?T%Io5Lq$zB`R zsHVl$3U~^&xIsxX*TyyFppVc*=!A>?bZD%54&W`sz6*5+s?0H;x$bloQ|_Jb&JIJ1 zs^0@v0&N&5+fC4@9Vy3ULqa558sNBce>ZiZ&)Xy5OLBmSf&3&;0V zC0d$lQg#+42FUcm@ZYu{q>ko;G^OQ%?K|3@W_u;}U^J0ti?V_UaOG_%7>2JdOMCNz z2e!9&mMb2|>kHaD=Q@@vLD1p^M+bG-s|suNoJNXyx z;qozd_FTvc!bIeS=sKSzv3p!`nUlB>TK`>TD&@cLOVd$qMt|2D^kQ{1M_Ho~t#{Df z!Z(;Q8Wj!fn-5D0=-V0Lwec_{N-@*G1xZA^PBF?!>5mSax zF`N=!8CjfVIk`A%W;kc=+^}sfyGWXew>!Kf;*SygQxO`6Sm+XuJZ3Uy?B1bjSjdQgdm`@GQvym5@}x8N%Syd?*K-#=nP5*?yW5AjGa z(syX24tBTH9H9b@l9}hv^t%JI6{hVLR8N;1R-%?DF~*#=YK$>Jy&L3d*(=1l2+qdzH7*qRj3`C)Pc%0?x@ z#2`2Qs;&tUXTXk{j6;oD3TA~$uU+yP&u&yRm3xiKSv3{A8BV#W`E(Nr)0nGP^rneotrLmy2XhA_s^2{z`}X z9v;!huCe&;I$tGlN5-4S09SJXcsBUSw1Yof^uv-O z`*BM52CUzsD9Y}yQIx6ZQ`utdX5QUzPtjs5Ap1Sf(BgyN&jVU40bAdPfIha5`h=A$` zxL$i97rR38Uj@L8Y`d`-y0cLHi$gKeIQCKNwM?p5s z1)PFN5Ze)OcBi8s{k?XC5duKfl4?-tPw6{*R-XBo%5K;JXtd0@|qjSCK_ z>nH-7QIb{a$6_a~A#oR*=L*z!!9YtaR{lEHgV<{ZG{J(j>esP3h`nN9sBh!2$DDvK z4Dj+f06Y|D?qvQ}4NddU_La0#*Q$1!kJOY3Df>|iF>#eLWDY8o!J({m|*!$di_VAAoq zf#rol&Ko_>^rVv;zV=&Ab_9wGg)86anUa3IQx6qd)wr0{NAPTBfXjIRoMXXSd!Q1< z|4>=t_-@*7y8H_3$5Hg(8^5L4P)DY6%K8#x-SWVTim5I&;8fW)&MHON`6tD^lgqR` zxm$_b85g-TZ7<}>Wo=HCWfx3t*YBo`S=z>1cJC?(X?a!OF1o9vjb_%hQTHD6uI5~R zy8eW)tD?BR%~YQX11YCywpy0?j+b96*aR67&bV@5%aHD46d&?Aj<&JO0<76!zI+RUSeEeNi0xVS4Kp?Y zDf=Vf`1oD;|dh$jtG&u2u6{nxk!}sNB43!O6}fS$tx;%=$Hbpqk#bKo_>{ zS~Ok8-MVepZpxQGUa+^v%Kx@4?G(vk)=Ugd;;tVczha!+{x&k%XRkE}#a$*~>Uy!Q zhf7~|%7ot;#obgWuPeCe1nBuic6D*&R%OZLL`);z;V3ffhJ`^8uZ7vK^tjR;CsPo! zBo@N}m#$%e$3DfKOv0!7%MyRosdwpILWFl2BW&gV6NWB3CdTbrw7`xVuKhh`-cY>6 zQ4BEWN0zW-W>0_DI}1`_Ad?*z%Q5^P#*VR@n&8akvx`}uns>GKEVN-d@W#~q7n>gX}>%V0VyvF)XaOuTQ=Onpy0Z?D9Y<9e;!N1bQd7P;

    Pur&d~w{avZ*y`yVI_u`~$#@%W~xgoYY;I1YdP6lF%2# z&=j}Z*a-Q)k;EA0bFon#fi*rd-P#F*muvPF;o6}0Xq&gNsvsKzkaFrCpWbCrC2gbZ ztss(6#SSfAh-nUmEs$kk#!fkZ3(V(0*5qJg$&|pi1K+~-dV^u!%*iJgBnh32{;KaO zG^}vISFY1;&>c__CMz6ODhqMW(NJ|Pw8cBcKOv7(J#SV(OLhg`)mTBem`)Zl4}kCO zHS>$H+{hr;FisKDVUX&!$tk#cAz~0BYD%E!NTKY!XTNM+&O=PenYgcA!>1kQfk4?nwXk6 zskV)G8%{=DS&9=m?0_6Xw68tNj;PVT4-r}(tLne2VR<#H$Cg-{e+7XU`_6=@L#rX? zeXgl(67Fu;P}dmX{MqW%hBk|`l-KoCPYK}&$ux?C@Fa@)DPjGf{_H1`Zc2G!C`pA} z7dcxG2HhUl(!$k+Cz6keyW8s9)KsKS45jitL=^J#3*`$PiA9Bw-YsX61UQpPhvO1E zSNn*5weOCiU&QOWl3*Hl1v#4fiv$>3<7!e1Y`QMr1<9q7n$&9e=U)()$ncY%ay|(c z)1p#vAsJGJq^EW)oPXg%o`u5*&x1hko(n09NsowCFBUrc<|_R5>(IS9_~lrL0Uo&y zfbTim0TJWySoEp6p)(irI!R>a*sm&Kwi)_6hF)`}!^#DBV=Xxr*BQg4R zHUQj$h3x!edRR+~M)Px_QTr?>h2`sAY=ILGKF3Z#|3K7Vfei}U`kibS_}4S=-gZxF#e4VMT2V)@ zgJ}GhSJcsYc%Qz)a4rNkM?>EN7BMsgas(+(uh2)u)Oeu36z~TvtVA&|y0*VsRIPE$}GwcVc%Za;7JL3$uChepV zaSs+Wt79kq48C@3M4Lu_s4Vc6=a>UziV-4hT+dSY`q}=y^ zUhsa*;>ZfeoIu$Oe!zOR;EV|@q1=o=cf$yS^+0dA@bll`obVWQhLp_#VnQsxRqE&$ z{yO?O_$WB5oEBErD(jR7mBk9F15vn)%SPL0r-lDm*sYAy(riL_oHh@#%g~)}b99c= z0=6#{lKm|uq4P$?+G9xmL)#ZI!EU{u@6xv#TDz5xL3_ciTXSj*J8O{vxIW-c{ldx`7}59IXcAbS;KR81ZBq8EvA&BM4xtVrp2x$19gUtT+FZC-$b zn*W_JlN;^(`_QLU4=t)g>Kug;BH4-ZeKJa++33g$bQF|)!g{~F^XIA3nP8o2R(>y?w@@C0$C$S zE0#lTr*$pS8ivyl7an2HNznt9EX9QAPdChXm@9m*?e2$tj=R_Ln14r8UU)cb?b~2V zIGXa)wSRv2bS2mGx&6;;7n@%`wkCiSI`Ft~6AQ^1SCWo}&g>QA3fa6*DHJ;S3_g6I zMs^&if)Y@6uPQ4oLX6xHQW&jZ7S0i;s|jJ}57zi-^n3<*Z2#^@n@ z*Jk8-pmj4y|BQEy5g6D;=NaNMC1n=yxEVvU*0PvsL$e-a?oW!H-znAtg?YSTvUybHcC=PLwhN7tD$P|3=a0aFw#KFMW|3N zWEyM(_sc+Z82jyPB^N1vH+Tg2!6sT%VTo+G|EM*t`&lTV!fMXvC|BeAyMyJpwL2N& z@3o#;O+rEzep@WC+={2q}aKCD`tE`-2ak_F9 z@_BCXKV#(-mkW`={UqMdy|aMzxPLwX*M+l`IY_i~@O2Dp)|(C(l9$k%LIv(1e3M{U zi8$>KUb@(~uf5D)dCC8JzvS5sdBq00*rV&P`!~^BL<3}tvVd;tzg~G6`g37y-my8@ zj(N`*gcwmn&4dCB?rPWXFihF44qFo#0fM2ui7=DQFu&YZHe{n^TB$adU} z`j0#Ye_0hR$Zv&&$=f|Wj$*5|9RWtCBCw)be`OTEzzm@xn_2?jUET#Lel2>=T#2% z{b7JDT%QdT;KDT*074!>mcUOgs9R|Zm^A~fO&AXqt;>|E9o1mOV4`b2So#{NbAthJu`BP>-`lHchXh74p1J zLr;P3IVyyfID8Ia`ro_tDv!HYuJIYliO&G3)$Jban>g~9b>MWC_tSJadp-D-YQ8X)#P-|7CJ|iA*S~*HY|NXT$pWE@Aa?uavQMx zXh&2Ih8AV*9d&P8`oKPv8twbEzXD_9_Jj}u}!p*VYx8gek+~Wn{>^O*o!o+U(y_`ijrqgD9{d2eCfexh*%$V!6nO|q3 z)7B5M4E5}Hu>$9?Z|Btt6o5rcrx_><6Hi`61uDR4zZhZZMOFc`(9MM4Q-=Z@QaV_y z#Bzxfx|t}i?P4tOFaU$R#!>-oL0+-4#8}>{A9*3nYe!>c6NDv@n{?U-tZ~4^g!Bl5 zx1Kc)usNiUeP@765Xsg)XFx!!KN3PUbS#kvRfz$xFqVlbAyce~I&ITvT7=R(iFk`uT_k&(8Z+9GCHr~73aOI?T5$Jt(zpzpp0isElT ziYjWGX*@o&mF4p1ST27$dGXtWC`n2&JVdnBl$E>?VW^yJLxZ?qJ;61izN#PRfT71T zz1BR&wgMaFiDwD*wUZ zREBfpP;?Qamd7~VU>mxQZBWJDk}|gEyasWv@(w+qSWgKwM9v2Zg7L~l`_jQFF@Moh zP^dJ&GwTP=I)cb4b{xU(Sq5DvHRC%rcW?Uh#gQKB)H=P5HMJ8~wW^-P^y*3b7 zvv#oWv*q2N30&|E)wo@MQ zOzo0Jl8|2#)^>J+7`;h} zlmKwn;*2!R81I-`vR&{$iq?NfMjUzqG%@KSCt{!$B;;mJVw{6#(QAw(O{Nz?@P$~n zn;cz_nOt4sbfMedE?yHj8VHHk3?B2pA!)XT3)2nV*6A6Y!cie~(bb!#hwE*w zNF1&dVcNv8B+V7xZtCm$g((@ieGE(AiQU3cojS={sFKNv>GYT-g0O#*r4a5hxL^2L z{P|;vlMUfZx%78c02}uooLD-kI+S_@~u?O%f{8g>m} z`ub$XG!C#ui!ENPLHjN?kd>2GQs}x=Ovni<2M^OpS&yFo^!bs#36N(oz2kR*j4P*lpBUJiGg3@wG_ARNpK}(*9)~`>_WxlUUsE-+29` z&1u)7Hv8y<^yx1C;-;GxBt<@W{a3?cB7Qdd3l^u1TudDM8R{~YWHkH2oAAd5r5X zDU}6k%=eq0GlS%J-b%9P$VFDgC6X1L8kQIKIYGd;fH_q2nGc~_{M_)t}(ztj5-6-U@~2LSgls0@zP`8|L`9JJaQ)hM`Qhu z{-J+je{8VD{;+hI%@!z4Pq2yh#H8eL?$4$Dl_aRDLgOxF!p3hVIzWG;7Z)uBMIkc<3$wzEWA?h&l{2I+hxt zgzsalMT~*Z`Ac#b!WR9VyV8F;?>Jim>8fY zR`pB(%K&u60JY9civb!xGc^XN84bY4KunAQY#ReO?zjc90vaH0tO4TD00L`(X`j-M z4wK9)Q9m8$0Pd=r!FNw<^*OkRt+fU>opC+JgcXjraI`nfU{JZVbRMGT+{+*dGQeBD z1Hk{#4S~MH(DeKnnRY$0GV*DZ7abHTbRl{5LV@w*L0mQ(PSiN~NHYgkhqR+;Z8U@9 z*u#J_`KF{}T<7-mp6fM5ZFb%}@GgWD~D!)z1 z2{OQ&*8uR1u?(H({gsO#m!6}Z@0#sfq0B1s)%dPGeC{#s=G&lOPGlstgu*N+Vx8{e z(S9|-=je_KuoH3ri@P@ujH*2M$KNyiOco{~z$AolGD9E`mPuGe#L2>#kU+wwh*Gj@ zA^|1~5SNw-o53mup%#L+!L4E!lPIlNEveUf+gp2YqPCYs+p*qOYFe8hl_MbeeV+H6 zGjrw$*6+Rd_s@NkGw*rc_jy0>dfxLc&-)xFmgX$DlKP*^v%D7*DyU)XIfx_TGu!W3 zL`UdV4E>(VGrtGb&!H=ojCEEqW)odSu0XBRcDrHf>HrmyLn$K5nOGE&@r(`H2L+Lx zVd8@rN7G0XJu&lDGlq_dwd3+4o|gDI?#?lDSQ2A~m7t%(Wx4};SBw~1!lsI<5XKww zgg*(H!ZBf_u$S)`w$~x!g0N9I$5se`W;Y1$vMIvbY^?AmB**`inS|FMz40^l3HvGg z8#~UAKUb{c2ob$L&gy=o)9J)ChjdR{pjDU zr;`)fx`gz>UVQS5Bumn{bYJi;WW1LzmAWK+^Prs+tHwgBP%A%RzrC=~>vJ7pxzHpe z1Pg+e(ANu1qSR-!5!ERIUD+4TcB{s7$|I8LTf+;Ic7*Z?!Mu;oSKW*rk z-)-o4AkWrk9{BC%yPT`?jG-w#hD*Y^RXtOZ4f_uCh*J%x$4?dd459H8NdDmb@$RAF z8^`vK$Iixaq{q~E>qjPGRR5MV7TS`!wrESwuaaZhdIZm4uW@94OfaU+IRVvRCpsnH z5oFU2_oqVjZ&94}ZI)ShqTIi|XPJK-iau4M0;8rLSdWa4??+}#w@FqUfU*w67}C#6 z2||7`=w-E#*0T_8%P%V@4z=uLUn)oPk(aY31O>6ZjIqo*#(rjy=bF^Z|8OW6_r0aF z{7V-cz!8F!_IDtGe`Lwn_Epfw&{>+={#(g_MY5#aD0PaHVHQNHpW8?%Wd|cJ=jVI z3(y|Kn2)h4nZ$Wog1vmft-Kx?-wB;m@wH1O)B2^gCHReRix0}z#PfkW{O5x=%k&Y+ z)CK*J?aqm0gQPScfFlWZmCuXKPdRG!I|GWyCg z@$Eflx+Snsd^Yfxz>M_C4O7$W8c78FvDy1faoaa5vwf|Od{ zCf!$+n%*Y0SM8F%mawL%Rl2XIO$xl&Ce^=~-j<7gCLNz&$Q_J@T{`HtWAUbZr*ypC z@!T${q9Pk-zsm(Hb|HVwjQFJ*FWZ2OzloW8^_7;r>n;W_zqB{6bf*8c9%EKa-yz1b zgn@q%Vo$_EK}fm3W%)v!g2-Eb8(w`MpFzach@gG0zZ)w|$IBf9R(zG=*X>w+M(Nvv zZQO2y&Sz4(N3?SW-L)ZUPAGM#z&qCqyIgn^pCB}1M~Xt<3amHTx{G_TtDJI$PIL%% z-;BO9UM%%|>ynb8^0Y#V9oeo9O7~T!97KV!u?JsAOG-Tm-59as4*mkIDDBYrgFbg| z&~da3p__-z&*%8fp1*RjM&CwcJhtd|$#mO;u8i_qV8`a%mR3{#kN#|bJTxO*zVO5q zkxP2?`d>$_rlC1wCLq3o`ydW`?8M1=ldLxoO?pC{6+6YEgFW(fhLz+kY=W?_-*5Pq zdEn>fWq#wMqTfVYp)uxm!{n+n_5l;i#bGcD^vtmt%L+&r79-T}#T)?;j^8uxBO#w`b}?M}seH$Jy%=^@1#Hy&q`-#KA<>^;fV z&Zb!3vxnH^m0{ZO&Tk}VkcD3Jn+`rVz}U}wjv^cMsrEys*$kYLIcVs&9`wOwDNnxZ zgzcaa$|N9d0=LD;0v64eu%AMRytTmJwcs5bPHm01zAYS_($d-!hwOa(Il28DZpMSw zL)&{6!0o@FZw1>X*gmx#>gl-wE@wU$4q^HJqHykUbZ3sd1$_*MiLdK>7W)#9{c&20 zz2!R+^Rmg_zJG=EfUU#&7`jztTnr%N!Z}DsxlK@mX6SgZr}U#=KoDjT4g~KI90e1L z9$emmV<{co#))kx`5m#j$=F~!*O>21-IF5gt}`4mW+oI=6l6+*@9%F5GYtK=r3U=Q zfStFL06vKNbm7xWgo$FhDG*;cJ-`NDXF?!1;KX4!=Kgsg-A`vKKE}a^9H?2&#A51M z95qSz8{qoEmB6dis*=#sNGIA2xR}A~rX`~gbfw9i=hV2pMUL9_{*>|u+B$*{E*{xt zI2se&-}24C10^iuDXF#$TCQ;3x?Z%KZ2XIB&IV*0n#{ZpxPIkYSv=jJTrQ-K#Q0jc zXt{8Gp0RIR>CaX!PkpOrOR6~i{F$vw-E9~@J(AO6dgQ=oi$(JzEsICqZQ0)f0pmYN zp>FH`{i(M7kF-JX0-_FiII_AXXzFY8e^XjgMgrvgE@%+HiDN_)3#a(a0cb^dq@d97 zJVw_J(w^|kfEe5~xQJmdk&VN4tB@Io)6ucCP@9wIx3_)!GaO37%a9HFT)wpN7lWS_ zqJeL|VmlPX0%WHDvkOy(Gx0=!_cI^dU%Gr)8i&`++J0J4%m|v%8!V;(D60vkYL?*e$(?JQaQfJht*|h zNC^yoT7k1XDG+M6ouJsweWW8X7elnCVB>6--_g;UPZ=Mij3?t+x#hA6nt_c6#UM^T zAIc5J6j={a34VUT@mY-0xn-c4HDibv#Jjo;7cGpDT0ZLR7NhCyM52C!dnzbuf_En9*qU2;`NGhppOj#i053r7 zZJ_4MP-h=r`sEN~??}FOaK@^f?_MH4AL&FZm-*ht_9(M~uagin6~td&`h(Qfm5CO| zf|oD+{1Pb!!6^b{Jk*4Ydyzp(44MX4=mNGfvF+%9!%m41@kt^YDYIiqZZVyxsa3cl`v?@>_r%wTz<_f;pm(M>08B4TqamhFgokeKEq0P0YFgC?jP7`IkuNfJ~&W$86$l3Z0 zQ|NSM@Z8xTHSwvEAo|W-^xE4yhte5Kx3~Mw-QdKxzlL&{qdjI{Ebc0C;FM*2pG)y! z<4a@{8;Wq~)IQgLM0$;R{c-I~jBiJietts{M$S&!q?1QqpI%0-4T|ACpvxBoszD8_TZ0gq<|ujPhX_j-g7F-27G zW*i56gINxWO}0Z&xEH_~9NuU~bWsgblkfFEs65}a_e0P314px&(O>8k(tWA>(AgHH z`SKu@;|ttG-+!|Dowa)*9b~oq!iitgcam}PL$FOZz4wNbW&+0PX??#+9?{}*9UBOZ zi0=!zAdt3Bm}r~#`VhX*<+tE8MN!&yzE+>jKRE<9lQ8kWQoiGxl)EL(@{yHgg+eZ2 z;%6E5QY`))P(Sc5xuzh>|(3u+?Cz;DmDhm;vTaj^WU5D7k*g@7~ z9|y4%=f5CA`&e6cT(0F}?9g|Rku7PHeYX6B+S^>LXCy>qobKTZdxsfGb+yu&yCjU* zgnhPJBPmrJ_qY`26xvzs<5IlW)c!b5*g~yq`s30F=IFUHagt;j>-)$kvL2Hk_c6f~ za}PGy+6@PtgX2e7`h|l+t#Kb4M+l~N;aS#h@ED#m9W_E^YTdAN$S@+Y|JuB^FmKUt zZgO1DmNfH#NuW4mdwv6KGY&pdjkmWTfe*opWLOKc}J=Tyay3w!R z^O=2#qeu|#$@UTwTneTQUwCL(@ROj@o?$xc=Eb(j_t2~Nq9bDESP{64ryU2s68v{A z9$96k~E*U*z4T|;ZXF~)r_F5E2{f@}u8lVh<+VGy4~EA;st5onC~m%&IUh8V*^vHNADas;@JN_Z`UI@;p|^#n3+2vT8vexY63 zmb!>fQUdoN<0!Xaf&V#dD;s7Ef4cU0Ram626J05uV|riHvrOLzDYwQ5zLu{Gp*v?Y zUvUYBj8ds|;f71ng;kgMnb^Qm97@AyRh&PsFDYd1w!G1A6&JSUIr*>cEkD{0MrrY+ zU7-~+V2%(r!9W@9W`0NFl0y8De?j4S|Mf-f;CO!#8x$DvR-Uo>OT4sye7=jdA03FL zuU*)1=I7At;_geAKYbw&ZAF-VGN<^3OP_vnTk7E+%O&GKyv5(on{evbrAwbc7_RfX zJu!T&UVbk!KIWF&Q(sVHC@(`A% zV$H*bIoIX4dV2bY7TNmQ(4gR`{mg49UtF74?zqR$XvVvF{Kd|p?LG6vOVCzN@}MNs zMTJg<+KHd7FWC_-^7A?(a zEyQ3k6b!Y^4lsKRn!K&;QE74~?e)`u#TFzj#*?}Hi4WN|?VA@A#2x;ppwI(S1{ikY zx9sADCndO)UAoYJrLz@%%9TqO-n2fMDb2(8%r)sE_p4Oy!7X&(RwfDy39Dh@|}J&rn6>DXAOO` zSJFsnL#jCKA7}8g#FmmdJ$|zB?L5R}zhVmo6Jm?#$gGkL+0o)nNs=_=^fNnu!qDMGnafz`ku4MiLX9EYuQfc zk#ot}dwYH&{Vs9aZ0k99rqNz{J~+RK?dh2`X|cKI(kJJZ+Yj_qq>R7VddUin)Yi$P z`p3*L_gfI|seu^NUcPt6T9NUmdcO4;bN)&oT^E5AbR%~AnLT3>@UseMObCALnSows zVF4xN)aQ_SzGOO56#Fc?u5D>g4+-XHhYYrUI&OgBEPwUM8MrC42x9Byg%Ef>z?U9L zhor#TP}UO0VD3^j(I74iT)ObL%VJTi|EV;wjlTFK&j_&z!Iv%NFMim9B8q7|o?)XX z(z>kUnb!Mp)Zo&E|G2!!pEOCl$A+1GnIA%~m$#)|=r>QA+;&%65?a>>m#2**7cU;z z$3L4GOht>OrVjlCn549e4M_I=bV81r7acyKLnr~9u3|$@gW&1!LCw;`GrFXP*e2;q`9nQ$7ewPy|7pM8a7a7Hc#{)D6@ ziAB#~%J>XMUG?R%Fx}L05k1S=D-Q5(ygY4FZJe*C*ExLQ)NpN#eE0J33Sj?)#QiNR2@5Ep;h8QE$BoZvhHq7)-c0pnj&+p}-Bnc3@5Q20w0 zgpUzd#Jnc#G{!k7glr%yA&j)reJ1<<0mYGxw2rkCkH8Wh1A@_NeJN(EUG-(`G+Ss~ z2w;JA!4XRc5ii|cV6*&pCiV=*HH^K~^HLAl2KLCe8H3#*avL z#D0uo`|lV7%rDIJ_o(Gp_Eq>DX*7&?k6%9OyCc3E|E>6a&@ctL3K*BmVqq*TEjd{i zk8nS`2_<(wYflPX7tBtuB$$(snx>qlP80Jf%oYg4Btfdjhov~mxYvY?_p-YLt;f}9 zD~n@eP?v?M`~PB(3VK?Xm?+ZDW}~N>BkUID&$fHUCYjiLwp<8do>a%`*@58{mclxO zTxMb;*$-Kn@G<+C?cfO2kf@@tT5k0I@Wb>Pb!}$PVaqdfj%}oUq=DrCCxzX?5^Vzf z*EV5P)P`=P>$4 zazQ7E`+T8c{=sA-AZ)gch}GRh;5j6soD)WwsO5x7CIXx=%R~z&EHV+~gjFWmh!7N? zc1|ch2Z=B!KAoIUe4Zu3s6a!9BM8MO#MzXzo#lj*wn0uPX_Gji0I(iSJT^`!XkH>z z=vchUO}wEZ+b=?gy-duz!i4Rg$Ffr&{Oy7eGiv;e!<;t0^ZT>sE?eS9E41nDcmMS9 z1?EUnXhES>e}j&;DR|=)e!GIFhIi=Vi_zi7YU%qwcW_xDlNrK7!llpA-Js>EUGcV7 zc2j=-d@=K;rK`l1n>N)qiFa&j6myp^5f^Q!tf{W9sTRu`H&xX%HEn8ank>$me%{R@I7)HCyVM>Naf@b8=?o z%$v8C<>JHEtfHo(vW^K;acj=s)Yx3pGHuB$W{I;du^SwgL{pM5N*H5w3CTi=Fjh!2 zxdk@8>Fy296_v1?8)dszy+iP3Hodx{xq?lvY-(cDk*w+DIK8Q+xop$cn#P-Js+u=7 zYCLMI>Y8q;Xs)WQ-gIYvMSXo`Mb&zp_sY5rHH}yEtJqjwU$eXh*o(Fx-f(1F8|#{D zmLl3RfYoSyz?xfK-H1}uu-9^&{0-Iln>GaMYnp4K(eg`|u2{FCxuQ`E#2s&{XnbY4d5eJDT(hxyQ{#$2O;t1;#Wl zrU~ujE1R+4r1p)L&dn^vRxP|FxJkz^@u@=}J)ioFOac#e*8hyptKezlJqtJ0sN)oB z^qNr;JAVbcLU5aai+Jdw_=<38^N|WdgqvzqyhU)(;uQ=thSwa&qqL}awYb;fEdW6S zGu5bg)o{?_-448RxJ|%C=~D4_;$DmQR}h78Qw{Nv3F6Y?y`o8<1AZ#rQji9NXgYVA@A3YOf zHiEA~zU9A!N7vu+gE#}K*B`()S0xl4A`@__X(M{{$27{OJK3nWWUFODKDJL83z-?q z!2Nt&RDRU{sjX=7&R&9>#zDmcTa?kdo7fPZ`iP01(-FQlB}8i?Krm=gWAvVg7!yka zL2;bLg|A&e!z$8`OEzll%ajoL)cF*^Q4 z9v_vhY^djq7$bVVX#OP5A1QU}86(EXM(g-T>-eeXix{J(C6KETJrt!sVxkuSj5>59 zOV#nGvU`=l)JF;M*BT>(%#Oww(YmAKqt+fVMhJ3hjghzFh>MY>M+n>*vFZ@ixX^R` zppM?JqdRnTw~qd~j@G^l3I9KJ{_pE(dY`I>_&-w#*hJ&?5H>{9cuF-yUk93;Xv~p_ z=c7oW>3K>-`(LT!uhY>xb@aD&^p8MOFG5!WJ2$NM=akPx{Qakn|D2AtYPvK^Z@6g{3@ zQD}NsCQ$pt+@iU0Q+<6+Cr{8mQUG0Wr~AQAZO!g=15IoENQIUUO$%Q*%wDI(N#W znJ7ht04wYK6-~{+ty-VIY2zJrcjh(M1(<%GshM3W;clsGuFb1fr<`H1MH?$B>uWII ztHb2H8I$rzJcU(t_4Q>HjZG1!74Y9o+Zb59-a$1uv6sWrzP5_HyK%~cLZ@e@A&dHN9r z&*x&Yk$xI?5dLbifj@=ZixeE-t2p%5b|9W|vH`YHp?P|Jj0K5CejX(o{=D1}_(h_T zk9Wz&c%3>r$4wYtkPW^xvf(~Up=qu{H1+x9|22hfR_Jdi^Z|wbjzYhv&_7e?cNF^f z3VmLoW6>8#L`fCc^tkBd~JMdznIW6%&Ms_jQv=#ad zvP&5Iy+Z#N*)+h!c!~JwRILN$O5-cuUdTrIr;?3&70I57IVRaluSZd~Q&BIl zsUCcaJB=sCiC)K9`1Dcn}p2gTJWXCXUXu(E0ZDh|;Y-Lho7%9Jd4S4m;$exoeYE1U5 zxpQXDyKdgxd7|j$?(%Q8*E?s<98sK?a~*!klsmR9D)D2T9Wls8z?MXWVr*wDcQ+$h zFqs&4O<|_uGcB>#3t0zF7(7OgF#z3qC&+i(G3Vk()(ej?kI{WF?;(6og^tBzQ`GQ~ z6zjzYVfH^H*+tulk^YBplF#WEjvAkPNQ&`7@OjwUwN`>MMUFG?SRCZKt_)ADt+M8w zuoT}_+fhNZsW{#5s(tnBJRd0f8k1t2SkNYaONn){APW8v=Z^Dy5HNeH0tSz#0ehff z-cco?7CW>P$7Q0W=xOlxgWRBV2dR zt7n}&B|s0Sg`yczj1Mij4e2R?uc_uaQ_?CFyC731W0U60U0tr@V+#M0PU#z6;<+F$o32S4f~Cc;PbZNcN7cmjwZq5Y5Jh$>GGH?Tfeo~Rg0bZ z1~X*4y*wZ0F6dR%81Jz$h-Fuor+aiEaS~3|y`JvGLf<(dfv6|%6~ywU+q#E6m>A3P zeQPpK3y`0!_;JK#568sxF-4V`_t-S3G!?S$?=t&MeOZWMJdeTRc`{)47~ID64+4qP zAOc`?2Py*Y25L*xrk<`E-Df!|OpEDrP8;7}dj5Uy$k51XBl?o2xja!#Lbv*qH>8}cW5D-LzM+|tdt1q`1wU`C3^H{Kl%FE;zkDF1> zCwMuFew^i(gzMF|^+mp4DttmT-#lO;Re@tOOU!<1*M>fG=CZz9LR1%qzL>1*`tm~? z(@gzSk;c)y#f*}KSbXQQ&yZ>CbA*nzn6eY`JJ4dz76y#?)Z?wkO(78?6OKkoXX*Kv zhH-^-$I?yi_bVy`2tRd9v0;jE;`DkU2kp4tbYi(HrCPwjl~>OOc-ta=Po1Yb9^~FL@M?KM{^X|JU4$0InItxN z>vrd$X+&M${lzJ@X@2+d-3VREbG2*9M|Iz?>&P?pwZd%~cdKpLR>C}{%z+9j6<1$j z$mp&NRDM0ByJ|CG#)LdyAI^fpc0B#2p(I1(`JY*Pxc1;pvpN5;+r2pw#>z|9)GyXK zyWJIpGSG5Ii6e_z<2^XELwyOyMh{{{UsPU9&yuT_+^X)4Iqs=j(LK--lV$BE7gOkF zk>D=hSMFGN{w`gVtk6|Ei9PNxjcKX zFYxSUhrgTm%z)KmIu%5#&*RUqX@=?4eTd7RP5HdeFW2`Id(-!}6bm`~^0u8fKEGee zVFoCfG-W!V^T{omL;Ix(&i#@{Gz{hlB-XgtfHhvod34c)6Mx9R(e=SynJ4~ZtgApcboKIBfS6W9 zmB9OZpWN%-JGV5ZK$zKqQV9O&+q@LeN;94PGmE9W#?}hnv3M@yLo*cWHc#QMgH=1l>LB}Rh4-qs}`*+EnQi-j>89J2?^vZ zyeVE9xTRu!O)eKI&^e+!!<_0?yEY)N4<7P=z8O9i&k4;*(xu`BaIeLC9W>=l zH7Z^`9JF|}3@XBn@MsRL;ysLeE#4sLYFw&O@xBQMEuIKGT6-b9SX?UJ)412-tpq`3 zsu~sV2pqI{tAR)LMtHQgqv9RMy%z5=5EP$kRJ>zw(BcJvN99I%R4*!CKkl`7&w^-% zn`%_N-@rkO*8)5r+z5}>hE%+daj(Ur^%W|6)u?zM!9k1nlBWEU;HTn|EUXr<4S27s zUp{vF9ar$ zX6W#Iz*Flt1+=lTU z(BYi~-bn&djGEuwI=mKuP`ju45OJybeOiat1&?=C5QPsGJEFtu1s=6k!gDKpl-}1B zJT+erqEWypY}ETxI=+Xl!S}Jkm!lx;1>g8Env6}DpX=~`cnv(r*YfmG+a&WN@HNP{ z{FkukqUQ!h8&JK*qmxpW)53golYk3+VRJM1rmC5TD`Al#TjR_g#F|_H4Ph$W3vf}9 zQ@?=ZMB!b=_UP-HfGQr?qKwx4e?vxq+FZn#SUL!bgPs|Z5x`O-mzjYDqiHapNJbz! zyahtda(HTkBqKoKDc`cuJ`oh&rVDR_f=M|%)f>qOQ20zaFn+1!MGVOZM91%7et1** zsk{yFr|=VS$%fuQ5koQp(cxp6`rfPtn*sh5eswsA_6~p zd;HP-F3wM7EgNbz5o3gSdo+Iv=a19}^~e!JG62#1sXBh@aU+KI{G<7!Dca+Yb`d#V zUl>9R-_Z^2`A74+Isd%yb1D0mXlQC5Z<Gp zbyXGh^6ogr80`X~fkj)u*#w5GPiKp&RcLuXU5TfPOF8IeANX=WRb|UOg4^+5uVeF!T`jm)p~}?(QHF5gLkLBcUEuY&aZ}#i zka#cJn78>3wE`MzDyqpgSeU_zJ#g4*OXX3Gp-i4%(%vz>70I5c z*u+PB$hEKum-;e_CqOpRT@IVlP5ldn_@4qz zd(b~38|6mh01EdC*$CH5_J~M4yxibV`6quWpEQ&U^?i<8<#8jWXM*B?EqCgI(okp= zp7<$Uw6|Zb(CuVn9Q_@I?t@L~dWUSp`ylKz)YF?}BOH%sU8MYYIRJMJ{2gQDa-(|P ztI(Zfua)=S9p#Mum}unV-^fO}zDqXZKT9_7KP9^Y=|xBGsASAfHtz^C&Ag!d`gRY)r`PX08$p!#1xHuB>m8~H0B8}(F3HU`FAMgs9Pf~NSmY(zEE zOLPrmeTqAmiGcr~iN1qzSqF-TWE-en=93M7KiLRZsnA;#`vBR%eM9jNDeh;<240Q{ zHt_t4U9Z?Ll8xt~SD|TKMEU6>y8!j2*eA(Gek+^THPtk3sjI4)zG(&|55h7E*Iivk zA$yj0ZVvdqij2Z5m`}lkWfXku28MleW-abmAHcqOD)t48#*2b%VuZP=UnobN?t`YlB@K?;Z6|A6red%p9I&2q;=p#T&p@|~hl z#TkJ$>nqD&kjg~&_S1Ji(cJN{yEWw=N4F8*)2yu6FD(=e-EoWmSia^P?k%V5{#cRn zpnK<X=4A*xv0?-B?9V%S`ew<)a&ZYWFMODL&XUlU z7t^2V&#uiZHoE7Ba?csza<1QZ&YW!qWd>yiWz0SWMQz!&li@Zhu|4lkeYxjG!?wdO zCg(JC%H=nvK=(y7gg@_8j*FOpq!tdB=y!+eY&CV)0l)Pu!i;t+cb2eK&dc=gmlx;0t4M+FFN3S)#ayssb$OcatUT=a5O{4$8^esCuaP!N0b~ zEA6Rw@XxKe=f?6_QO?wWz9!<75c45vp8Z_%l@AVo}I{n_3%z9 z&zlmzQ@T-1iQOsr#1w}OZn+}4<#V?JD2ecUQyg}4#0ZaRKRz;|uYBrjWwKO5ht3n5{3$ga4f?ITrYuK& zd}rQr=o2sx3wIdn`olUNv^yq~e-@%XM@o(qE!WKSTPHc>2qEOeUn?!qe|V zD!;F{pLqLI{pBz5Awg%o+arRBb&4JU)k zAdNvPUat(NqffEG-`c-;1NqMLFNdGeJ&5<68SVyppLzfIp#y1LRcQ-7+eV>Go~(c= zL~?}{Jl!sxjDXr+yvIhAh%JW9hr1H{pT2tuzNDr0wZgL*yw%5O-Yt0FaJhr^{2ioy zN0{(sEmye-5{9?}2OG3~JH<8aFBeMp_}l$LyZmko_F!mx@N31XwWg`;To1JREt_;_ z{wK+$gZ9|c!32jzvi6n^+G2J{@tqhCI2`UBQex*0X*@p27VCi2NcZUg%b4xPlNxVK z-yvCpJESCVCPUM@*>Sq@bTi~3x2z339vIiKLo$aR$FHq-ZQ~Bf5lU{_A;p1zL}&-p zX|8QPw0Va#2DB@*cFPWFZ08PWeO$Zs(AFK2*d8O9+IL73L?_~(BpUFWDQ4g|y?2M? zF54k_z@34wOHV}j$#9zz+974ZeX6)an#OkJS>F;4uUR{gJhMQUy+fKV{^P@CP}OOw zHla`2Da{aP<2M`q=}ggryIEqg+m7};TVzAmn-kzN9kNzluMMiG=74LS7jmGUWz!&k z<=iRFh0Arg=6g-2;?Vl`B~Z=VOFXs9L?~@3KiWgIrxsFK6oM@lGGN^><+a#rfvr)FmF}s^eKT7c!CI+QZouwZo zOnF@LqDPt4ZVD_4>4W`CLjX{)kP>R8KL1TM^Qe4+BnoQ09=3ULNHybza z-2BGoAWFPoOHfMb{P`BsR^f0^N*5CxDUQc6E(uDLye3ajn&Qp$Jf9bovb?BQqwB<0 zC_fgRL205GlxBEKKT387rP9OP z;eI;qy|A;zpp?@dlxE_7R#{M*6AVgodxO%vuAp?CHz>_7r_#gwM=mkmhNV)Af1m%b z{{eq`w~arY_oE$;@UJd@8|o8Z8ZwPw=bj0!Dl8pb79W4fc7+YZo2W%QJPGMcitl9^ z9|Y2yW_tv8Dr(f)^+97z;ORg{LuJF$4Li|3YZ{+utZ2$^Invb7@_tiyOM3HAOGR_` z-A9@m?tZ_y`|kA3Lw8qf&c5f!=7xLT-`ssq`j(-4Dz;?bdt^()z3*@7zBhdBfmWB{$m6^!DWR7<`uk{7}`Oj#lQum5D2@ z_fH5lp?oLW^-h%YPH9rvPH776vtUn!`;1<+N!(|*lN_Lv+AE}6(L%i$_?-!kS>T=v zu6ZI_C^+YPcS_d>Ud^+;Wgdt(8Vgb+GoFtHqA>eBo(JpD0>OC628~`+;%4Xq6=se^ zizTIp)Mm+6+bP*XCbd=zMtEcV3Kd`81CV2VMl+l^98 z`^W-M0nnHWm}X|mIN7+U@bSRxjQ0ZQ<>J>iJl=TI%C*hpw|0v&gP}h&#_o_v_o2;! zr!C&KWgO}hN`5ldZaukmO<;#)K`&zstwB!~8(M>&EFScT&hgFYA8|J_l!D%DROb$9 zbo*)CrNC`$Xor;6o{@q6OvJOr(0ieWax>v@`jQURiD4kdIIaMi6!EcGjHh$XedzLg zyux%-K~n!R_u~AK$@cWWto**qQ(#QLHE<{}JN;C^ke=LdWSmW0=33n_>{-9kI&0Zf z)2SHLLqX_=`|A9t!$jMExD| zGkpKGytQZX3&r~a4oJbxcAsuELV^xG<^(}p)0E&&4Wu^S3K{v;4Tl=uYq+)XU}Hy9 zsz0rJH^zFSJ<$H>`Jl;}VGccszH)OmwU-eYr=YKYpSU_dKiTg7<4TV!3$+!G+8bdv zp>4S0QNDPR%rPt-wShiRa6E=OFokBr*8<d>T?0D{_D0wlBHlT;rr?^|h4+nEI(Qe{y`X2}nk^>aO*I#(bNAv6<-{8- zg!h*Z?;+gJK#1&4oEE_SEL?NoJ`dM*p&iovUh~ib`wr=Pabow)i|qY{1*1JesIXv^ zXT@Uk&<*yHD@~#0sOx)qU6(9bT9R42FFiNE%2iw-4A2{#-Whg>Ns2`b0uZT1XT&q4 z#}Zn1vF%DnV25PvT!T`vhVm9s8;mu23dTqV@Y_0tobw;rhHS<|1^Ybt`Njde!BbF- znz6^4Btx&@UK8jDWS|WYu5HL{C@Nr{e4rQyg!pHGV(i^3nR|tq=Re%%*$4fkgkVoU zvht6v#RUwdL|SGYvBLE2NZWQG_6M8|_92V4tRbcU`ht|w&sN5GMm7$6_BUSfyxkb< z+23^5v%k5}vmL2j)|h~P0qW&Yd(P&Yo9#nM*0-DYLFSg;!83BHU1inoqc^bcIB)w| zX!}`8e}?Z2c=i1mJqGiRje>l=*fMzh$o-~6N2<(+YJwG2ST*pH^3U>`PP`u$vb^pD z$dTX3NTD=lE$D3*dNCH~^8i{;l1F?sdF0DPtn!@DK4SPrX36d@(~ovzrAKV>{`86a zV>+Iw5;9)Jn5LZK66Lt)U9^y0PqTcM%#~MP8HP)lkl|Qtz-gR^&SpX@d;Yn!Z24q{ z>v%?h^t29pEnNXkoYYG{fcK@)?&Qxijrb~*5#RA(d1S;FpOB969uRCXhnh_34)-BE z72~^N@!qQD<2)n!#o5%VY-lg-$(!*k+Rf=HO{beWHg{|dkMe?ilo#Toyx@i7R(mS7|G3Hcpoy0NaH&%y%$-gJ6ZJ2Hew_|qdYzegaT4}o7yJfoeBOM zya}Sf$9psIM$JK}S-9o~@HU0-0=O+i$Qwna?Jc8v|L=|ewC&`p+-ufft2qDvMNL^; zOV*0&z>21dnzYo2B0;|p*B4o$GeBw4l|WR4(J9Ycxnj9q0-C$6 z2n5uf&K2_7{qmZsO^qb*s|qA@z5-}PtEwrg{z}Z7H`i5X=gj*`y#D4u=~qlcS;fY$ z1gT_XMNLIxRjocFQJ#xP4Vx~bo39lK6tzJ;8{glM%LwU_Lo342>zea7&_;0{9f&8r zZqqB9o0RqyW}!-|ufslegj4ZTMXMqez8WQe9~x$}Jf&qcerh7fF(@%=pNpJwq+D)NKvEpF2BOMKX# z;zrL$eq<)$vf=t?d{e=rk5`QgUQE6B>G&cvk}Y;$q50Kc@Rr<#*qS-x%|9L%_g zkJ7aamp0yV&=giRDjtq2N8#baC_G-m!?to5ZzJxtc#nY&;8Kl>cNZMA>2qaA(ns!U z`gY)6ix&&xYU$gi!}9`<%7xO0?ZGhKlepL76@s8kHER043kPlbRs(M}+z2lYmzqA> zx7Fg&{%9xMRHNecz(I@G1-wGI5gxX;!+8C;*W!86a0=k28Wm43vn^@zn*e4teSgKh z7Oxq2q6(()5qTDuHhp4Fq&~0>9mX30FfAVK+fqJMqoywgOj^8oz!Skl`5lEzO&`fl zYw_L%o|hV^VpO~=9o}l-k-RwJVf#CbN3vU5yjUdSYUx|3!wca7Mw8}v$r`-1I=q#@ z6XCBKHGQ}0@SL+FpIa??B?!&xGXa z@WeTh_CkHUidU(_lYn=%{*UA;wCO7Yo(LRD-((Hmb{$?V9>yPBrTo63!wUdUZ7*3G zJd(w;fyQITP0}dF_9^#dsnESjys)?-K9_P&mRioQ=;D1=laJ{NAH_#nq_y!*1s?UM zs!{Pi(8Wu9SBv)#x_E!7sSk98;rbX>@X%dwQvf{bzg0u|r7Iot^5DRnTGf%bQ8~~ng=@5pfyH}z@quh z;c;gs7)fcn8@3n@q-|l8U#l*>mG@~BAB~L+@Tc%Z#2ub}W$fd=?f z_}Xv~ZBIq<$LPYxuzc`F;*a6sBV%G3fkliFPhfQZ4W#}n9 zjhzher|{Ukvlph$do4&tf!xI_D?ZN!g^UH{3R2 z#1YN!;rzc0^Lups89IJ!$bjRo;quSW@lVq6PvZQM_aTiaB8JXXM5kvm=Z`#}G-8Mt zBTmjm^Jj7X$HM8S5kbTlp-t&G3b_xq0GiStG3Zn^#t02m(f-rf?-hS)^H3|V;il&m z%ac(qUN)f6lxIQHQ<1X~3I?M2v)Q1+FXLw`lx!KF9$x`WYSlypE8(S6N-=IJAC^o5<2Ltt->2q`Zc$tW~Q35jF+m ziylgNc{Mr;h}NLLuwojuO3D{V*ELh9=ta@+3MLjnqt`y80K?0kVScQ5Msd)h=2g}? zbxyRzsXfQDq5x`687avO?7u}#2K5YC|AM!55uquRyLs^^t=E zXDhhYmI0n^EKx8ACRHMA!!5E5s9~)JBvZ(CDBAj;Hv4OcfR93IsFul#@LRp%j*whZzLM=wv&zY9fVDIw02E6 zqsjdnN;zy(=2#S;;!pWV1Fnl`xTh-al&>_k{D7YWn&P238pTsUeBkHl+p3fk_@5*H zpnMj}(TX)QqPHvhX?G}Rf?!`J_nnMwp>hCUkZkbL`BMr{`W%R+aWv5f6uN`#UBFk| zUs2rOQQYZW>Hz*A*}JheVt{?WqDK|s=-o)TtH}m#E!nLoN5#E`Y=jSzjqs0=jqpDs z8+@d5fWrS9*}(g~;(k_f|5$OS`3segL^kSy-d%<^WZEdZn-tro*e=+Vo=mb4&vdf4 zBfVtrKz)&o_?D9m|J7u}pPxm7|6PjzeTx5f#h=znC_JroQ}}1dM))6)jqpDvdk6AI zHvId@hX3!#hJT3c9jG_5;cqa>{x-7VpGY?RQ^fg!6b7C^X#`BRxHu!12N98wxY?Nmv*(l$sWZ$W@bKs<*hzTc?Y&;*- zzA3y9Ht`pbjqucN4I7kpA5hvo{P}bDO~&pJ5Dw|%?ejso9TGpaL&IHo&d3H1%}Wdw zz=Q1opGb7I(k}p~QgNsG8il8JPT_ZwU7@5~ea^t&33rOOi)`T0yp7^{lWc_VBOBqV zy;FEKy&I7q3il%1$$rBi+cfqf9GcG=kk3J~5uUftWs&yjrSNFy3&}=*xs+^_+iKWU zZnu-YhOu(8kse;I;9m*av0vAJ!ck3EqmrKOWFsBCypRvdC#B;lvVr$3*%bhTF~rMj zWCnCzgkzW@m#1MO_htsS;y+8CgBVchoG(S;o37Na6)NQ`|KHBc&CH%POXTLC>-D8F zgbAOS8;f2P(kLhB3LJY}a+c#PLD}Py%V&Dj{4L7?RS&1iquS16>dB#z$LK^FPDMCP z`yR)g0dlyCuG9aEvL<24fU3$Bi#J-G;!(eL zHM~V|*W%eUcoroL;i2n{!lUt0DlXNi>1%|87SE}{BOEn-&*EO2KI)IJmcFNScrFc| zLxXophe!ST)$o3+!xJ@lxDBVzg2ZXlSAGpV1DLe=&D7wbyAR{d(cx8J120F1=hfgj zHF%`&1pnc7T8n!s57nsku}+6ad&g7{)Lt;G2&ZqC4v*>)ubr?_@mh6wJ`G+HxT(wu zpVpG_A6`X#5cdtZR6~Ar(Haw;4ZOi+^Es@!Dgm2#$RyxWpCO`W!Q+JL30l1+TTLtR zO~t#i3l5YQ^%SBu(E#LyENF{C#u+Mh~3 zVn{Dmw7<56Q2t|e{-{iiA-z`7;iDW-6#Tc%^?rRxaQJQ1R#1C#6v|dIbDO5#zSA^CRZ|PO6Q)2 z2f;-&O)$w8xy91liakNGF-M`^CoNN++oj<_YpRy@b;$FIf3CMfUI<0pCb2aGiz#YDh@NBoScI@zEv*4uLIP*66}4(DRF(mlu`W*Ct?>kJ+)_Q9U=98Y@I25e_Netu~*Srf)g8x zq5cv26Y{-Fj!8+uU0rR9EI48Jp5$#`**~>JtnK~BqmAE&7W!}Zh$zqbev?-&x$y;) z$`9cj)j&5=;!Q7suKS^h!ndUBz1IGR&Ke9}f3DwMN4(z90ck#cNo3z|aQ2YgO+zjt zM+td(DOml3s29)igz$M*!Zc)EUmJU3eBHV_=Gg^$(s9yKayWrPrngyxs_)M+W4_*E|yz3@z>(24gGf8>19V1k_EQRxUi!&Dr+%^@y zde%m9;z@`YqM--IFY^e+spYaR4RRkmwyTSItdlMNIJAX_q!C{8DI2sP3^pe5Q%55g zCzXtB`}1}>4L>sY0ucu!6y)dh%-qRNm#2vFXOod`nd8V54im^ zd0R5jX(WxA_Lt#Y$CQK6Fu{ygKbF#B_ViZ zyTS9}_FO-kbQjJ%DKQ3+A0A^2VjNHTF$j-Pey;bjN9C4oqIznLK7U0?!Sj{7yDQCa zolL0+Dy2FGsThw`%;%|aOgEhx3+j4Kr7TWC2~#PmWqh6A=(&qg`67*GO4C!)=%8B0 zv4KD5G+!0axTqlXBXo znUphbs@hbqIfsK2PpU6(6ydWx|KsJTuneL)^V6?0sl)$tJe4$6Q0KIIK6M)LRoA1Y zDtOv>)wrkwQ15efd~-B@T0Shb^Yp2Bv>wGfBVvM4@mAnoyPmQD<5Zf}X5*r;{GA9J zOYKp31)zPnR6~4Z>TqfC3V??pEXN~U6>ksjsf^V0?Nt0=aigYh7bq=Wy(WE>9~JLu z+-vdLK-c3^jhenAaM0p41CPpv@=LRE74K)b*W#TA9l)g;74Ky@Xz_la$uG^dRlNVi zy%w(;#7PxQ;Un^GTw1($fL8`LN*~QPRXj?M7HJ9 z&$Q6~p;rZit>Wp=v@`?H2Y*UmlEO#zoQ}k4(?|P^Dh9m6?Qa~IwCQ^hcod%SXf;C3 zZ-EZ)cHmKbs!_3hI=okaN99I%;V~ZWZ`a`ku93dgI=nYE=|k0o(?_yk_z$;dl0m-@ zv})A!HRs~m?*zA#Z>WVe@vS`A3S!d zUeANG_M#Y;A25tSmi1MR$Oy!3qfpGcVqQiR$c*Lg~ z6>o(O?@i#*b53|uaSH?{UEr&#&b0A;E=dk20YX3xA;gml7zp4A z1dNI`UVSkY=ri_<})9a`)RR@;KgjI_1bi*2W0rxUEx zv9+D1_M$U(<^yZnOxyYVo@ZV5UVG&PnAZ8v_w)b$&OU3u>wVX=u6ylu+iOvu?>?UM zU=qit{WcMix74q~#d961VXnp{i8<{N$FKeFqfQ;fbkB6>xeg|AJln6ICC)XXey`Ba z68?3%j?5Cy@-V}4kMUdR(me}Q5ORjsbMGI$=6JZ@|7`JH4BfvZ++!bmnBT-Di6zG) zj+gu0=ZN!y>He3vf{@cau_W=0=@G}%{qE-o{SsHjd_yt5=UV#qczdoT&lPxHsLdyu zczKpS-$)+uTnB&n@&z9AMiL%=gLtlkU%x=;*Sb1t&{FZ(3B}Tn3H>2gKjz-?hUYx^ z@v-kd?DxA`MeZGMc#Z?*9+fx`Dkcas)wvFS{RPgalzv#~FHoE`Ql0bQcYlHNx5`Bo z%z&6(Ru(XL?t@>y)Ok*c`EKC(%_i|1hHop2N|*uhm7}K-LXGanTP*g#rUsv!fT;0J z{Uw(E66fEQm?b43YIIY7naAKRgzbj^VA!ynMOpY2k)LPr7g&6y#b06Z{B~Fq@!0Ow zM841BcUe5w)YB@Ci}NoZwB%d|q=|UuccJ8;wdD4i`8Oe_3d=_hp3mt)$@9t0LG3&b zye8t6DY?|o6MKi#{jIoi@VxO`T20h%Quo%YA426hc&{HVq8O78KW8IV8G;Y0JqQIVs!WIZvN!1 z{gAIaKiHXUX=)o7?4m7ZKYChfdOFv1ZtLme>T1lq;e>-Oj>;_e3wdsWsVz=qKqAzv zu@-i#rPK6><0SM$-eJVUz2%ZKYUp8ghG3mHtFKfrfh^nEH`EwW!5ZIx@CgY~k% z7R1E)66gi5knt{P0|P36zHpC3V0tpWNCim0e3;Q290yKBIxwB0@K>Y{!j%Ni^9zP( zBHY6?5pMd!bQAf}qt>!Q4?z)njY^Mid#1+*rQc0cr8DC#@Zj!N>H~j-Ch%i0>28@a z5q068a1Vd)BaeLA50f|#(*(`|n!tIKCU8hNd0nUb zt22HuHxXH}Vj_IqUDd&{!17J&y2abup6^QumavoPUA?y+$Fd&S&^Q~ars;?`I~ zo;M)pr6M?&`_7RFW@ajnW;JH5j}1TP&|T4RX{%HCg1TSS&Heq;eh_&5t0-idh}3^kgmi6P@I-tr=WGHir!9T;1a}`b=Wi;HhA~&eaN<<^6It~ysQ5+K zy?bJX^8+V#Y|X@qst@KqGE(_$V8yhuH%^4=#|!oBu{RHdXQi;7yZ0TJcFflfM&zA1 z7vipIHD5d8z2^CBpkph&&a@bOWiXJF9Wc*`%{(1o=Peh-z? z6v0%IRG~Cqp<u^#bF6zn0 zUB2sRuZc3!1-Murok=ea9ot{pX=2?*VqI;H|GbnX>o?Z@)Zs<{8gQ9-o#0DwX`&v9 z559@_8t`&qM?9v1#=8OcCf*+KGjM6r>B8sF#N);y3=i>WYP>seZ{o4;UyVzX4&VD> zVd6!A7lR$~P^G(gkKo?Kdl5YS)1>j(Uo`PbjqoArF5VY#Z{qzBd<>T+jmQ3=i5EBU zm_9nbFX7(A`vdrTT$(fTc-NM@fyi(XP{WyA|@utJQ ziFY3u`lm^UkLL)Q;Tr)S^@zv!tHvva9@Af!d-lsT2CUtCt|P@yjOWpwdivQTPZ_To z{F!(hzfKk3O|YlFes-vrYMk;~*duI7s0um<1^6P(z$6CA9;f6t&o^oze)Ix+2Zn&8&?W+wJJ(;(oDTZ&yW?ca`Z$_y8oH(~KCF`SajoML#> zv3rV1=|Vr|TA4XU{fMQH#4w2CihjJP!1L-_KG_~|T+y$eCG@>e^2zmxstzeePbm#YRtmA0U@)cdC`mPts_7B}x!afN1 zET`@u*(_e=%N>vM*PO zm9BEJtNbsI$5*Xd6^mUIk4uZQ=*vBdx*6p5o!`}NfVXTH+RUDoOT;OGapbNEXYVsu&-i#U zFB-UfYx2C4Z)K#N3Z+#}1TUR721)Fp>epY&z?!wo%GpQy`KwFj1y?`%WN~yb`E-&i zTPN<6{T-gqm65pbaCTx2d=UL9oIey3cY%`hM53npN1uv9*p;VlW6>`tU$}QuGZxNvvJ`{OO?u~xMZFEWr<^v$!tqZa2&u?>-z(IQv!=hmzQ79;tF~ z;_Lb0$FfDZ!=o7q=k?Gur0npB7`&5>0OoTjH>Wxuq-2yHWn_+IFU9wKWp^K zjB$PuS(XTm7d7Bax#VTzM}OUXTj}wQZ#M6EO5Y8RCf-~3;!8jt++P0siTbak4hl-BmMcb1Hlko&&oxvD?n1x65b%#+7u3dU0mI$a_-j~#}A3uSW$Xp4U zpO}3lbI-x*{O>Q`lQZw5PnOSJJRtpF!2 za;5LjMQ{7>Q3`ipplmJ@J_*pF8=_w+AjwFLT})zx~Ir%|4ldagw_+!uH+3<$>=8KDeuKSLpR{$=4em z>VEXe^AYl|VLk6`v7Yw}Si8F@QIy!f_A5WB7a^N|swfZ|-a8RE5Zo6O>!?TSo;&%e z+ov63_?eR-5q9T-n&eXrcO}1(%-Ftm``z2Wu{~n|CGpg>$oa|8KI+|>h(Go6gyVc+ zBAk7Nz&><@_q3xtm^CZ9XCe>_T=d+pGK%(~-0YbM#`a8voa0YMPK6_((Y#@2an;Es zw{H=yzxQfzH2QjIaZTd<-`)GW&_p0JZ{F2)pTsE(AAPd)_|=J7(W33&0Mc7ewr_uB z`%jX8z5RlLym?2)Ke+276KQ+@0ckL8QRdB|*E24-vmvkh_>+NC)52U?9e(}p=zgTi zZOG5NM1J1?T6Q>|cxl3^T9mi~E4UA=UGbBKUBP|-YgcGr;8bR~;pXtZSmJ{>e;CM- z!)YS6@;PT(&Ak2DiC8>+AJc1^IA!Y&RqE4fmT46|l`$=l$QX?uo3@`kb1hi(i}B4HixQV6>l1-u z+Wy_^PUtfeMe%RJ6syG(;g{DTuU{1ThVJgk4~$$o?37iVykjK%P}=CBQ?nzX*Mr3m zJ$e4`_DodQl^(AaC;Sx!(npDh7um@NMu^4}@$wMvP>dmd7Je|qv`LFWj+OM&9{i{{ zQ{v;}vK)nmgZrFQ!D!8JXkU}aKb=DF|E^3Kq|#yf5>}~`fpa2O6_rIhlCNxciu14d zRPv|E;_V&V4{qn_c;UU_Q_+ms$+VBsP1<Oj3jcOLT)+FxFs!qq!MfR zHzgdAE*XhS=ZW-qIUT9-2bmfd{^*2E%T?oiMm1eJFDl{+A4iJ@4kCqu4~0g(R2rWj zeXP3fuU~gEm|BGs>3?>uh@F`;X+?9#L-S;sy@EI}y$)_iowhwVuLrgJqC}`DGS0Fk zWo>tS>A(DHjaO@&j}ywM8^p7B7itb?K{!#3x8U>z@z28>R^zi?T3KAPeHOj~xpR9yYNxLx zgWJElJ)C$xA7h$gPRn%o<`k}ohLMgRfWLw5)p*u*S_UAUTl@%4CaOtJE1Whe z(=?jGw^A!*u^Z+$gAI4SmVs}4^jK<=W2x`NkyNpOT+Ab4rfjIEZwH#*{pv&jDcd17 zZ@SuloPzugp3`DY*tDu^z;sd5pWNjx`!)}ZXxcGkdLmXmyCb=>ac;_u;ZqSniHQZ$ z%X$U}+LkRh}W-={Zu^wE{^-WecSAV-xgOe@gjOL_?OF4Qw zd0JPm*4Bf#fAXj;)+L}aWPeYOM40_m)|2eFkP2~8FGL1p>rqC!09ORpne>)G$MzT9 z7MHZY?1!3qTfld_THbgV`#a|N+E}ja50}6`4ObW!!^Jr?6Yn|jPvg==JrbtXe0bx) zYl0o|I3}U-ZpOWdHw5M+>@;b-ov<*&7st>+73_#ddyTgb_aWD_q5 zJjRcB?0#vy!?-u`Mu5k7XwvEY1T0LvVFQn2C>rnYac|;{0iaQXDLt}(hs(qp0UnZ2 zgl{HHjrVW3H}UdOa4KP^Nr&%WU}56z2VOSp7+;PxYP>MOOuS~`{XrK-r3XVOnRthQ zR|<#3n~h83LeIn-%X6F(DJyd@UiN#N=9 zq|;6PD@Y`^f>0GN$Y(BH}KO<+I`SFn{n@NLC;((MLZHsotESuKq1aXMYRC; z#AQ5~PH^tV6}Qf#7!X=wIMjHQnPl4kca3|~k0M;D*5|U0^e9c#Vbt%&#XZScRyth; z*3cetPjbKe4DJ#t(u{RA_avwL!>$v*Huog=+e~vVQ|?a+_tS*?U%Kv@${uk~a=-gb zQO7a-Vq8wtu%`ZWOMkl40x|WQaB&ZElep)&AAhDZ00ru^F6Ex%j9)D-NvttF;-2Gv z_pAXu;-2Du`D}sb)vHpTaGgkbw|=OUdwzQ%i8Z1}+;iNI&l=7n?swsr+vDtWEjeo- zkGSWz-#u#-kGRLTUp`;N&#MPmV|c_pzL}mLoiElWlc$>iaCTXNR>nuyn{ z^nZskkc0AYvnBtK#dE(nO?3YSi+|qY|Iy-q44zi4xN=aw{zdV8H|C%`{Z8>o!OwNV zr~|3bcN6zKo~d~H%{`CB0JoT@nA~GQ=YpHeihc@aF(!9VtZqq)&Pa+bNa~J9%j8zP zIo*M&hbeco^>2i`p?_doTW`&}=K8B0&~?G)XuD^O;lc_w4?=hAGD?Gx@HdIfp7 zzm+DccBp}HPNqkqSuGc0*~PP4&l`Ww@T}JT`LoBj3_my=c-<+y=gC>EFXd;BKRCQ) zcv=`XZ7&J?++Bg%S*=^Pyzh4G15)1b!PbMP0-F#1diLytzqxD0 z|7s0KVIZdt+cMPha;Fd8n)9Lp{{cPv;|eIhuF@n(!@k3L!48jN2$ zUNamV=AJ0Qjyr_?SB7!!d22YnYzj%uuHY`EkNJXN@mF@uuI*^8xjA^Vvc>!XY;T@j zd$6_Umf$VQ_7-7#%k0{pwr0nj@!Z@y+HAyAgaZEGhPkn<#QnKXRL_4QX3bJYFiROr1jQ_6aP;HVu|(DwQ#qUn zj;Dzb$T`q(;>WK#v9NoN^5igQzpY_L7>-Z&Bi0%#3y)R7r;y5hoz_g}$@-5_3YDpEt1Dm^1xa6Blmb?#tn2hT(_5iAUR#EFUhn%6jITS znnKp>Uy|!Fxn?Gnrya4s^ukr`m)>qr^auG`Cux-D_jto6QZ4-uJ|Wl z{!rc12&;R%UVY<9W9ag-Eg!?hR~PjnxLR;a=OV2!@Bq-$ZAz4~$B(R~aT zni?+N&A2!5xPCJg-cIP5c&{0FwAbO=Z{h6)9-0y^>F_-O8x!xOftLxH#yf(0Gkk1| zwZcx54(n%NVd6~~>BrFrjdud~CSC*qYSv&%kL=&$GVvnFj8fReZ~@xIdmZ;C-gUrh zg`FlHzE@#k;>Cfd^LG|xI(%FwYvO$ocp8J4I{nh1Wa3o;Oy{pTe!IZJdkz3`0x8ni z+-JkYt2e@Dj^D1a@J>#FcbSE^#lSlce(U(Y*TRd1WIEg7v(JR>Ht^82b@6Vq@aloL zP=mqL>3542zG2|yLLS3450?(#Un;yf>_~mU+b(a#Kg1%xSS}$-YSE9uplR+B^+?QX zh+H}s9zCOlu+_ITby%q!!$Ywb4hwO=1Q)}HAd5UR@eZSZFkgc}Zrp``n%xjk8rG9WoL z`8fiQ59N z?NhZ2RXTA@d4lRyST**Sv9KbA3v?`kHm7^3_cneU7hgT(hBNQ=-mvdu4O;#tp8; zJ934R+bQD^dre}kKE0&B6B{2ad)rpcuzke3O!sLjj6CP9ZnqTTo_e}{V(U>xx&RlS zt2620@tWlCVc2P6-Av-MYQEv?Q9q2sj?XrAc+tNaTnqyqUqL^^|A@R5|CI6Cq)hrx z>V)NXc`N?4-nHNmholy9j^}LJfZP-8M(qeD@klgvT9V&_fFFh>TPM62k8E6wt4=%I zIuT^dyEF)R3<%0Gki-exqgZ0&y9Rf zwU|Zg80cyn>caXtRfqcORLo|bzLpgVXR3CE(%DzWmip=HX`y_%cwA})#1{jm9={lgS7CI0t?&VVNqjRh2WzB>(^$Tyz6$h#ViL@8m@cfvX!)Xuit&V;-g7xNd z+`1HD(|bS2y)P!~22Z0Ket3Q&I}s2o)lDp(18@$$y@^0pEn=dYl(5{zQG|hRg=r&hJuj8&7_%v?zX}8*18md)wPOZZsUZ zvc!(Q4r>9qE4#XFps%OT42&ykVn_|Vj`rHR>MPf_G;Y+*J+T(uv>xmlLRcERc6Rkv zBzk(yEj&!MfiAf|zzDRz;mEzaQPtG##3{v8sunR*wgMjEl1|!t+xl+Ag7!aoh4%kT zZOsxsfQn@GIJvDk2k!|~;bMG)I=oQzyZc}2R?imLneAbXw+8lR+jR->VzA@*8Qp5U z>v7NKg2v;!Wi>8M8m}D|CSD`(N?}JlhD+n!hI$F>&Z%f7mf?+ds$@h$;F z9ZeeVJFqbEo;L7^tMOjPy@|I4Ocm@j>GXRQ7AD@;fY$^&`i&-pi^ucnOuYSIbeN## z-Y>HBxDN)?O_TPQ^8lv5a}apu6a6*E_Zt=7as|L~Z8V8o0xQDB_0M##`yCv^)_zf0 z-)~Q$M+{B+UXR=BI1+DIE5X!yTzAL&xRS-;AXQ(C>!cC3q=xte^e)m2OpS-;n;Qp; zUxMCWYoVb>D;+lKjUX|{;Q_}!%5gEiNK%o;I!(Yjtw=oXU9HKu)mFkZ?ca{R7{lUG z7$e3q&LuGQczn!N(77co*f;aLPj?C-Vi;Lxalc@e8}E76wGb>py6+}A{zt^xFS=(P z#r=cn-mCvul04!*AAbL%V!t7}r=Q$EnC?qmC#-oq;=Uh#_gT(+Aokp6S?6!^^k2N8DfdQyweg z@_CE@JMi?2f9&gzS@M5Y@+z1-fA4==a(h483j~-{V%pVNe22yJ+-O>{4&Xi@A67g| z4#)qWQ2MO1X7SDB>zs)mywS+S`2G~FORG)kHv8O0nQP;=A6*;WYIH4RTX9m84HmMs z*3rJXc~i?^pYZhhtJ*j?kAQPXptgD~4ywlPs8Gf!E3mD4xDg3P$jo<<3nj#g()IuGl)KZ-Uo>T|4hlezqVVcz9HHA8q8qZOURXLWA%AD;t zj_Jo>1~H(`r;%g&`O03@L9mZget~=sMp2n@ZYhd^IZ;Q#zLN4~a=f7cctVc%J?pJt znH-PcT*g%PVlD#ulv9tjP82+!CU*{Gm9odnjkN;Tl~T_2wj!MHM}!j(s0bGxJrS<+ zR9%c0!$RU+BI6N6;81k8we|G5lNau|LV4=FQ7SK9i5*f%XP&!wKvqib+{H?azGh&L zg6yODiM(U!^?SwqgN#(s`81H$Iyt6Di@ z9Zpp14nDNxSl~-(7(2)oV+V7wZ-s|DvbzA|4@?=*A7f%=C99hLP_D%b9%8DMZnHZTK-4`yNx$nG&%zfF#*+PS|oX^xvlsJKk z>?OYyzEu^^+7~%Aqao|hr$3e^#v8KMg^L1*s2dP_Ajp5g7q3VbS!b#-zHD=3V}H!t zW1;#liPQ+XXUI_ww@9~il~SeH9rWAS8B>l#U>{I-EFun!4<4SLn0std{XYtv{9_C2 zzbEb%G|U^Gcci%fp9ELjFu#={GOwTRx_@GJy!ht(C+5U|+MThlxM$kFs^9#qCVgKZ zR`r`FHm4T`J{=M1kY1WGHd~~n6PvN_-$bnC>dU4hfmnK>+*>BSG=eYg@1MwthsQ&Q z3e|ogp+o8G=xgR-?0#xcmAbDKXYb8w$Q#a26dlRNUKgQRI+Pf>N-ii|DEzC*PfLWc z`{>3ucZ<<1>d5_5xq7mcJEpqnGAP!S1`)EYV$2628_QPVpSf=1oA(dUHCCLiOBdK_ zi7m&dU8J7BTe)SZWGxu$XX^7bL@($#Sz{sxA2By0M&C40Mux^^04I8ZAu z@4=9fdbQcI__kde2b;Sw*x%XIU<;Rvt;?0m-rj9Z4ISJ3*sJ({+_>5AaQQ_Y?d#X9 z+u**m#f|_9rYW(rmpFAkpz;;UNh-YZ3MCw5JZ;~6POFES$}d*h)kEAz4Brm5Z5xEI zJ1rkq8a`f)F(rQ-%2%0wQr_FNe0fK^nEn;%Er5~Q1Lo!mE!QlMD~D*&h~cbv@95fL zWl6bCAo*A{_IKQ9`L5$26|U^-wNyk(>_{$aS=+d=dQD?X%ixaomUS)gUPJ4q$Z67^ zY2DH`FwnM3oqLC}vb;rlxgLiF4!hPX;{AgyL!y*mUf}u`c;9hji&u19#qx`kdoSvq zY*oumNJnN0o_>6U)aj1t>G@+0__4&UkelY~=Gd~neumXUs%U8!nd{+r=k4*qsPG3j zRX{6R`UibM(SBc~u=Uea)BX+{Yh>F^lkT0<&K$#e5rYpg*r6#Z#viE1=GE1>SjXyK zc`NQU25vl>Eh?j*+hwtxjZ{pnwhHZaM z8t-{nn0Vnr*>@lw+v*zc54bn+IF_d|Aae6#0{13fKJb`s#N+EyjII-MO*(w{Sa>Bxa%`1&xwtgm*Dbu&Xgo8W zHEF!BSa?Ig)A_+Zmd5*63yE;bFHQp~Qyjy`sJ%*3vOXFoCeo%GOk9&Bqd}`8o z8PGHH<30nA<1rdwPVSUatm&srANF=rP?j>HFV9kN4=p3u5@* ztL|w~#w!YYGagy+Nc%-SeP0AU>cbF3J+r(}Mp|s)VzW<~OU!0a8;%%3=;-B&0^*HqKOKQ<4 zpm$bd_R#wR9BR_(LQ|&+Wj{nBS0Mo^aL@5zhL7paG%=hz`FObh##mym@u21-)Bf!k zvp45i7&?ZHelTx1X1^3>43{K^-Xo6L``xFDcQ4&jGu0V?etmhSAN5Oxe#G*RCBq|* z(fi#;ohu>s+(#|<{w^WM=>6`q#9jt;|4m#$$d|%=8kZ!q24sHCu-wlO`d+zb4doHX z=>7gNbv@#kykDLp@Vxgv-N{RLhd2Sp(ub{_IP z;F*4Y{e{kJO57{(Icn-r2&-7%QY_=hGyeSUFYuIc$20#-;+cMa{Y4JjZzSensx$sd zm0Z>ni!Jwyg!VW^!N?(Sr%+kj|u|Xl!I{xr1ajsJCS+Y}|3CR5tND_aU<$jqI zs(+pt=*Pd%*`wUc_+Dt~$1T3x;kQ|um;~8e2c%p;wvov zT^7I2;+rkL)#A5WJljQ@7@kKg{?iu!d5iys#s8zlziRP8<0VM{&awCf7Qe*eFSB^I zH#8A%19&DmYnB|;-#00q`OO*8dlg?I_#Efsmix~r`PYPej`IUc{tJtL!{W2)ks^j? zp2Zhg{8EdrxA;xq8J}icJoE7eOFm@ryDk0!i$4IKc%1?-*ZBua{ymHTk;VV3#lHcb zc&wvy@P5cbn}$5&&NC*970)`KGtjGzHV<_+TKxMg{uYx*S=wXra6fAC?!*!Yk4uJ} z(~gc}igfa@C~d64P+FxN0)@aG`21r>-~_mDunjh69A~4e6hmyZo;(< z+d4bz`i8LPaM#YdRh>OIbYX6m%J#4t>`pV3CSCYP(P)=q08OkY7lX;mkyDuN#SB2# zz~1GGzV8zaFt}8H{=e1Ts*Jb*I&J9&4${I>ouO7{jR@StTgveg}bU| zJgc->#rCX+kz20ujlOee9#)fv>-*IVLyh>RfGXy2|LMo<)z@1p?KWIh>*hoCdMqOt zs_nYIZAb6WRc*aHx&|A&ds^@X$S}s;p^@U*gXY$z zZs>Ln_P2D4B^lH-9^_hqmC~^gsr3cuFvn1*2l28ip;@c?i49;t1=q;;49^Ya`y_gu z9E0GwrR;g|+|n4#V5M^ZF2&dJ-2?Y6%AZ!rN88l8h<4?^13J))cB=0(%!h zH^{z3v|H^n*5fz{>Ti`}fYBS}cN|eP-r0VSZj;|@MElhFt{A-DPy3|fe4Hi*C?2Ib zp!Ovjlzq|QyYam~?1KpO7infX&T};D<(Mf=_H=o^Dci|RC-z5zh$pE4-Mn;|(VJvD zD7ZnT1N5k00C()U(mmbLT&PU8pt&#Ca+6J_oKJ%fB0oj^kk2B1uz!yB8Mt85e}>Zy-yJePqj#$G zM|dkK->vo$yUUS#dajZAKz~H}KsW&9Fq}m+5zZwv?^f}F97*X!_o)242j9Per~B)a z*-8_U3e$X-#AW$n`tsb|2<^c$+y(Db;Tr5R<@v13{2WOjBqD?KYKlHL#;Pj7H=Nxd|fA?hnPbf<~#17&w&KPc+R zvs)?4><*W4UCE5Gw6Zy4fwCDVYTpP1z&8!^%|iQMfHCxT&nMm+Kac& zJ2qdPAltEZ?)u_mrHMsb=}&ii2W02ge?{oG3cJ|W+3T{epwuavotU+*GbZkfiwAOw zI|hDLd~hI8{L_J8ajdO)kTDGvhhrUs)RD1uS5+8s)3=eMOvS9SJdq3Y=g&W9{@l59 zGc)GSo#|w9pRJqH$EU%(=BD5{(25?qN#Lrqiy-Zo_E?R>%OLF0RVdO~tpO4Kl!bA+ zZPgp=xK0GCR`ePkh9LWBTG@ONhEOb)AIqKDc(BJQ3;$>aR=VVgl`aQ+TDJyP9BiXo zp6$~oQYZtVlDWtd#&zA{QxQk5eJTF4%wt$xvm?Es4CN&(;*Rn*?!-b|&ExY+r>FF#s3-%z6cn7B zJ7;E|GovBzwynpmx$TN$qqmhEiH=7bq<_Oj(~FX50`jQP$J3 zzuxo{(-dN4JiW1XYxq=aK&JG8o3ft`=~C`uNw*nrIm30yXF$4bRBl^^Ta~t!+i)Va zzfH<*ETzBMMt6yfnQ?tc%J$lBZ(k!~$X+QaDld z6ytW_*CSPd%Cyn~;thvF*!o_PQB9~3C507UQ-~U>!lUd&*TxE_&)|d6y z;B>0}Yn|e<8$#n@g)7%_8TpBIO{|MEj%GC6Ik7%F_}H|fJ0}_);4aM-Smyq7sI?x; zD$2cKl2oME?4vUpcTa4Jhevc)o^ZVn-t42(;l3mO$V7I0_e5Lv?upKL@Ucg*UTyb8SA06$w=!Ip#S*(G+C7)T z?~J3t$1)Wz(@TX~$O4Oy_umaJii{=KrsIjaeOCH-7|+|+w+F|A;6E}8F5ER->9OgF z+Bf7LkKsh@SOgl6P~)vdIEPI>DY|B?tP(C&L6!ArSdS_6vW74gky0t%Rvqk9&i~M9>IB&cfKm7Y&oqYQDCr@TSo5We> z_u>RE)(e3r7}J^GUYVHr{LF99e7?B5tTmp9y8A6A*K!F8fZx$;!;GE?mMRT(wXBnC zZj2>Yw#sQlEx;JS!aH_pPp{UWOrksKZO?bpwx+Iu9;^ZEXztmDKB^}XeHnI-3_CkW z*nWn~+vv5SHHe)D+j`e+dbeRW$))I*pH5-(5W?#J3~~~P@cV3ZeBnzC)79D3*xcOT zcZLKMk%i_aEWL79`kfAO3O&*1Oo^a3MM){dn8NxsHS7p;-;|Up1H&R&rV_5jkOE5F z6pn{Z=XeOIb6V_Xxb9E-e8xU3S7G&=7+Dg7LaC&KEJJ!V*J-r+-363WDv8(+4Jx_% z8de3O18dsa2k^8_=^Du^zHwN;*%wTA)By6Uu$)kw{N%^Rce#k;4jekKmUwDECVxfS zt>NB=RcrrqXBfp%MF()PzeQq~NOn^MEBa-;W514b?3(VoK=#GhC1&4^7uyG$ahZ5k z;CX4H9%&;k6Yl}w#b8G~hDGD?6=LFzfX~IHN#kvWg^BmH5k7`Xv3t) zc<4g<@V*GVQrIzkQCu4D8QhzAc=rJ>20P-hZ>+L*unsc;Q8|91t&8=`nm<--e(2yv@Pjdz!YR{=a7 zK90rd@bQ~96K^;0R%p|spDH^;dMeVtgvWk zyww)oFM(GDIn%F1=`nxbYvKJ60JPVn@!n(MEm`cJ-QpQ@O}nCi3U@8WN)?b zDuAb-w^F4?JkCFx=@&_p<$xF@9li%GyjlYfw{G~JweU)TS4AL28t<5e*KFYN-9kNv z?*|rMH}F!Gm+x74od(`A1Mfd9yhnk@@~%mT@7EUIkbxJ6vJT&QD8FX>+cUOym8>A%D0y+yb1&FG6N6CKKsf+Rz~W06d>X(FU)h&4Co7vadb@`tz+!ITZl(QY8dE)ClqJA}a;%~vly#z3oA^1+gpDW%u zl(TLMirE?5DB@lW{`f>3PGL|#7Z>+ppnsnK5wXu0NuN0RgFXhN{9jHG%GaR-b8J?$c zajyotKY&XT^p%`tE@-*tI#EAfws1c~J6Ce=Js{q`AL zbA&$gN|KjT60(~ub@zntzTg27g+k{ zn}ql=OFw4m$CN+P;JQ|Sc#4F6iK~T5&mgXI_3M`ieU@oSQtrh^%7?Vr*WzP%7g~4= z1)f)JFLYhc?Lq^qJR^mgpN{h9LFp zFBAHeu9lZFv39^vNuhrCms#Os zOU9#+bGfB|xhKS3NW2w2tB|us;CVJ{oMAr9AePyHlFt)1{FC)7nhc6$edEd5qxC2x z-j*g`n;9Di@(9*xvp3f-QQ*L9|KSSBe-%FiKElQjp= z^ZknFnHlTU%a;6qE4jqS^NP(KIOEnbaD5ln*)0>h6-}DZ z(9=^`m}|=>S(vjzwlZd_)U?hdiJTFdWGyBf)YR5g!pT7p-eA@zwF^!e*)v~a4noX# zdGlAPU5l9_%>SH5+I)H`XPLZNfR6V1#OC#!!^1paGv-gkLP%_}+264qvpj7#a8)Um zMv5Jo3{TZWkywJM!RnF zCjF^DWMcFFE^HSf*XweTr-TsO!CnhJT4b3yI`N!JonJ;pj$IXyHm>`qI$&gE>A zNDk%Jn}2eZINf8a=*cfvffHJ$f}Y?q(ow}&WP-ZaGc@jr0U`sCd@`C|9NlRjScz4~ z9bMQ)MKVxV`6t&6Gn4gVXb)isdumDj>j%2JybO1PKp1bz&j_~{S6A1Uj;?KrIGai7 z>J1F52|PFTjA=X9F2!V>A+x9GT#;{L&b76smFI(Q?G>PJ!;)2_$u=E z;(Hn;Z>IS{b>8iL_^zJ({c2q+{5t?Xc#B-mO8*X#2j~+t;mKi|@c&_$^nW?bC<4<+ zd$?<&iFnW-#v_X+^wVJ$d`PWVMYxy_#24uRp6%u+1{;`ejE8U!ye&%aI+}AGrNL-(SYCMNYNU^1TckNKHR`;RI4Urd$@_xqLn!O8L{-6I}IVu4#qGegF&U=;V1KO)mH z`f*hr{!+Fdq6gGD%b$?pkA70+=Rw&%W;nwN7eRHR(2FTvgd2Rm;u$Z>S1VrR2Y3-r z;4mL4&sA~}PL+QJ$S)C(-KuStAN*#D;LMPn`?DcNKBpPb+u~qB)k&Ew(*EzNB_2M_@2sHwr11% zWo<)413m57^l6Yq<*aBPv;w$TSCjbcnk0+0JXerF}Z2_u+lhz+-)@@xF?CGkkl%r@~{UVa9jNz+-xAyq{Tk z`=`JghrNmSl7Tk^GL5Il*mb!&GzDH5kudSb4Lrt2<8eP;rl&4f&nOuTLDVB%1U;q; z%NL1ysphb%paiU>P{JSgNk5x8tXAkX(E~;LmZpAIC`uyYt+3#@6yIYEALGNg>Nw!m z8AGIg#2ZB#PxIO|?ca_$EN{GwK7_?A4%1hXPEE;i?-0L!y3o(n>Td0!^&^&k#M1YC zq6^L$`SGJd->VN;@;&05kY7K`()V1_73YBb`ZFwjmRyfG$K%(}w)B~k9&rvQ&tq}N z7NAEwkJBX1;mn5x^OPaw*;T6*&pIXt>3Ow}kBEXwefpe(^xC83lFxF`JQR46pWz(y z@!8G`;7QEcSqz^Z(~*7tmQJ1kCkA%h@tY}MtLWaVZzdxPM6U}kwfyUn8)-U%QSj(>#!tvzVk%_Ca z`At@GZK%5nZNmwCku@`MZeqSzZU1W9!uH)0%}rcY@5Cmat%P*CknEngQrT7-wx8h`_L}e(%|U4;ZRxHSfoC(uIi1KbF{rv5*Xk3 zMr|$m*pp#|7|{`Rt^6W@_R^2mC$pa|iDwtW=6HoNYn5s4ahpV#7`J0y|tXKz>W=QF$XUrw$`OE?SfJsh}Tj|kmoyY8B}D%ma4 zxI7U~bc>LMPc;ktC)(0Zb%vOqO|6$~C~i$VwL8?&x?&jLsf>h9z7=-Lt`;FIy*?0s z-&kQHd?-`6Ps1+B=fz9=?w>ff>aF7NWA{(w#_yk)iz`p0UgU^Vk{G|B{;?jBW~FlH zY2Lrq#s7>$J-*zIJX|~+C<~9xtIuEewD934!v}}khn+zmI3DT^pBAGc(yT^K7>$-iSDJggDKK#3pH#?`%K8Ei;o_*~klT6U3 z@P835)@S_gkUHU0xq-0QYx#f(J?#SO`$FViL#S2i#S+=ivR=^cWTb77saM_|0RYm#2?etS6k)L#H?%dD* z{Y37_%n<4Uj)}b}3>}H7clD^A$-Fl2qSfch&PqWBNZ9d); z6i;hdNU5{BHumHak)Dk4p2PWxG*M45jE_uI#+`lm=4)?oZ!u17yEw62`RJ4moH+37 z)t#T+mN=rZKfCR4_0z|lg@J{1n`V@bA0ZaB+dtvN)5_+KrQ=(<{S$$BplstwCnIfa z@fC|3gJrqL=OnVn7d6fp50*v8O6yDUjI0rLhI2u99CgM8f${SjoeQc&7|uK9EIU3n zQ^fqwC$4hRPL%}GPE`ccPSu9!mrRHA#~<%WbL%I0UfhR{nPH=Dx~iw9*Jom1?$3&S zxltNjcd%WzfU;atOGS83?H0Kj1BTE?8FY@bY*xB@vW5=3nu|nA5RZCa z#g6#lMCOsv?)__33Er5Vc>M6aiM>Mash)XTFFo>}`u8AR|3jqfmioUM|NJRuX6VE- z_^&$omm|3``hEWAoZ@GyzuH>U7EToHi;mH5^^u~{c}K48X3e;NZPDmYTV?5fvS;nO zIqjK;oRZlOP>)yS(Dx>GXPa+=A5D}T9!1USEWPSPZC%p~@4**q(@!-`n|^A$h;@A; z^Hd}d6Scg;v!@IcnvP9_j;e*pp zJvw7?BJ{0+y4=?Hw4Rd)or;8hb0TL?-bkRrSr8s)iUdwfyc$@rMWmjy^dnbT8aa}eNC@07orw-=C(V2-zVH)03)DI`N9LZ=+ zw5EyLko&Lm`%C$jnGo+ox*J4}20ohJoxaF<WuG>lQJ;b5c(r(rxnsU_ocp3J!LJ$xE`1j!Erxas#xA=orltxuH?L{Fa&t@Vy3I8kH*Bb@X|BWg%O9~N{zhz{ ze|1lyXC1%)xxTHVOKgtcIj~cH^3>9S&2yx;%Eyfj&h>4*gIyw!VlL%$;e(@14BCSD z@?jhVnflKWQ>QV`U2(hZK}>JPhPu0Am>k*B73*)`ibRO&IT96&&CMH|n(At8>$**w zHg2*l%|xk2pJwlNj#sjb_vIo@(HLPE{* z_&RLv-?X!C^NN-_P)~D9-G-Hz-EQlx=)|r^w0}D>832jtexR8;smfO}QrH_v9d|KU zhhq;mm$#Hx^bNKpdoZotv16cT2z&3J38-8EVTYZ*uHL%tv(z8L7q|U8hOjTz8S&#@ zZN_{$LvSjYwF85LJ!hd?UP0xaq*)Bk0AF5CCw*N*+u8S~P|VsF~nv>aPViMiv= zK822jS{wD zJEM=-=u5sPTiOP9^>s|~2y{2?+EO}nO*py&nOIkMR*71{qEt5-z)GGJyK%{yQB{S@ zQ5B*hY>rPVsF6}CCt zDRxzJ&+C|K?rGT#1N}RaXaBxFgt78jhC1h#*vCoWx*iwDEP2^_95dB=H=IVV*3i4= zGZGQRX*hwnlQFAjH z!;Kl=TY<-Ma^mTERmS&P3$GS-E84K1iV!eLi}sIjTYXEz#|UxqX?JA+i&5qe0M^wNyqmA z3-3+fac+WmCAc)+mn}T*f4v%*nl#?C7T%JTI9C};#9N3<ujc9 z7>QB}CF0T4csaOXaME#+7_T|PTV~-sVBjI@F5YI1r{dcSJeC7ZIzR5ydP;CB^!BDG_j@dVpN7Bt;UM4FPXV;az6ntwH?g zT-Rk!AakBH@OaCsS?TF?YQ;CbTVSsV!4T90Ju`o6kr)RcVLYmE>39r5k8bc-2zmy1 zhPUqhhn2r9yCmwRS_85ldcaCbEvx}SWsfXzNn^8Zs{N#}6?&h8TTNPzrj9FRO?Vmb zJ7zBO>%hf$u>3HtCf6vTE^DMd9LZ|zDOU{;wM?7D}k6$3d>*cE1QYK!^(vNvy zxZ`)Ge!L=gO$zJ4plB(0PWYXvU%x~=%Pfccp&!3x$5ETc{U0 zH$jgq>!u*SGc<|cnfl$A3imNrsnosWO~_en=`R-geEuZyP3{rDGxg*1&Fm4sEA`9y zruB&5k^1Fv;a`axKV2J1H~fy&ufJUAds@17)%q2deucz$gJ8ZP82?q4{whnKx$F_Y zBlU*|mA^qDyrKN^iv`}TZv6NL^N8P(`t>gr`d+H?4doHPEA{JNCiK0hR?5AnM#}45 z|LyW}xd)CrerM{rrKpO3F7dn2rxi!Y0C>N?pf`Nkk`N97@o~P2CBIq8Wqfm;gO>b@K6#$=iY3?kut@j$4)VI1D zY_#t*G5iZGzS-gjEdB!)f574oS^VcL{@WJ+vc>-jJi}jti{IJKGMY3DZ#j6%WqvPq z8ZG_?#k0=HL4AIQ;@=SbGUuz{H4*Py7C&zBzqNSo!=s7r&$swh7QY_6mmhIww%4xLt8x+sD72$pGF^hj* z@$B2=;C=9G@S5l*U^L>%mx8DNGCr3&S6T87i{D}Kw_E%k#j}ku%c*h>Sn}^%e4){% zW_X-QGofN89w!Zzh{J^b*f}7cuydN3ABva%u|xJei)ZrCyL&>1e{N(YCUYn{%ef4t zo?_VFou(0ZDHKx84X2(#HD`r!a8ar=NdCzA;I{?Moe54I`m>(@{Ugq6NtLYDEb$b9 z5?bEe@Dy798DTXutHr!mV%q8ChQ`R|Cj1gyh6@Q+c^sBEV^CN5o0YSWf{t)hzYk&_G{Dau;0n-LzGI zE6<~aVCUvw(++XIPl}9jrnyU8F zQ|S7c=$bP4smi*T15W)I=(CbiWJE1z+EcswFU+r_H1u}$>4jQYQc@#Vlr;9>^fwiq zD~Eb|TbedE@H5Azt82Bjn!~@kX$@qS<;EmH{Uu~2R{U@?1KV0IQFoeIUB?%(X_NoR%w0woEsl)@+CKCR?ur`4k zEbQoN5#RMViV=%mTDWpc+a&u@K;7p%^;!d_>8cHKosPR$vU~-e{BF2z-_?iDb-DPY zseHv|94^>3q&K<$V;$;FgWCVy^*c)@^FA{YTT1P0eVJ`nG+m zoMR%-`DmUo#;yc;wnGcRvuj44O=zAm#y&IkifHz$Grb_cgnUw+m4!jTjZn_=t2tcsW)&+#Gd5y1FyuZ&J* z4=X470mu0$&AT1vA)0&CS#0;Hv)B;d!?Z{GJxvq%U#AKGUZHufBhF~%UKqb5f1l%= zq=~&S-lX{Oln!x2aW$-Gwt~huh;!7U!t59a8GQ-4yzaoBnRl32y zT-pOC29xeZzJFMjhae&=+B_w)2562r4t_%ZahiYO zIDbWRzvFzCCc+`o;X%jwJbC#4Et*KY7if-p`LK}u19C42?mcmZ(npj~ox-Dft^TkuSed@+i`a`Eo8zxSuLLXHb7cmCFONFUvhC z;;?7>M=AfLD!(vAdAd`UC#EaMW+9|u;Hop3)vZq!a z3znQ)zej{4xFmdHcKto_zGO~uN6l|@oubH!P~nQ&%Wl74|@OHHMg+yj_M|{xcNkCFWdFkeE{(`n`j1Smxa`9p6jM!)aGf z2>;|4QR$@qo&{(+s9|d~AKD#f*5Xm#v7hApXPOE$)u>?8jMaKW**o z`L|c&;>)8z=^})o@x(>l7aS|YSzwomv%vnd`wQKxd;TrYSyBs}KpD@aiva79>NH?I zQXN!S^dsX${uP^XqTlA$*~hZGnbw^>ue@5(U2^O^;9V{7N_xUi74MpTOoo82W}TS1 zp6T|})*HJ6D{gFUI8rLyIz^qa=(^b=Y^4b2E3fi2w0?mSXO69b59%B=ov!#)T|IMn zu-}Q_YPc)DWi;LHv$qtSTfnj7j*kJ1HP#*N)mJt*=2%spe%q1|VX-k;7Gh~~bbD7lP#d>rdE)(xL@Y%RD zX}mgEn0QIxQIB}(xHMi1?oGTg@TIskX}oJ;Vd9MdkKrL6O^tUG?oGT2@OyA+(s+Zg zF!A;PuO4>9W1B_eeF*m^-Uygh*lE&uY@e8TW5A2Sj(AzPG#*~zKD=?@F^@E9ywAeI z#5-x=;nv0b4(`qHWuqXmjju`LeG3*QUiM76V2I&kzUc7%9QRC5UH&R@lPY{nS9-G? z7m0d|rzXmHW#Esd#;AoJnsY8`y=>e-l+=QwU@p=OOzM$l;eyDeUxJBgA#C+6P5n$! z`AtM>1iHDnFT%z6GTuxR6K@ESIH*A&Gj73oWZF+&!(>W{Z-#`t=_C2D*fYaJ4~wu7 z2I4-GyY_62D807AH143oI4l-W!ZmaJEzWwIpn1$ZgqQRwb!ORApxnfvbL7hRsX*8-~5vE`AXK<@3yU z7ODo}hWrD#OnbzP;c~ydN5Pv}YKI_i0=vUP8%W2-0|e1ZShAfy8yDltv}7FM zuS@(^;trRSI0oz9YJX_)cC@pZW*#wg9)+AVtR^)n&14Y%bW4s%7{qTC{O(zTJmR+s zez}>mOrK0k?$_qG1}3qc%y*8?1Ma_=r+CIJ2k|NQ@#&(EOMNNNnA9$PuTOuP(*s@; z^RW+?=N{qHFC%rBhN#g*&8ccpyUtYBc5SJwWv%BZLs^OnQvCU}RI5jZu7Dj`P{CYf zf=AGLyE@(1@BniW8lDjt1yuk^L9IQ+1GJZwlyE-LBo#mv3l z8USlf%9oY@>03?zkG)G-x3k#kT8Hn_5?S2EzpjV*&NXY6r%{b@+#?GYpL2i4&+ z@z`$e#-)jRq&2uqJg$E(g&px27LCXDJ@MGyCq0MDbVnI4)+sdgyXx<7pXyyT0DJRY z#q;pa=3TWNda2$m^i!u1Zk-YYyb6}ARWTeU;*siI)rt77rvpXANkyjp+wrc7`aIFO zAuahX^2_BIkY^|5b6gB5?=*P#7B{KBtMkjF;yundmf+&MhHXksOt*!&C}$bs-oNPT zxJ3CHmy>M*T|s->^|}wU*MEkR?`f8uOWjYFva+Dc^Spa@D zc~~~mM5ClxnM{iy3UMpU0@z=OgA!!@FaO;+QS_eV-njC=JRbkQ?7a(ol+~R#{>(g+ zWHK3&kOU1O#7QP#AQ1yWK*2gp!b2cH5Kt*)SuKRi4zn}M)Jaf+P zoZtDL`{g;eXVxryQDOR}Gd}Q|XuT|WZhujL+QYPB{h`W{f{hz*xzboa@ZjOrQ^|I# zD$DU5V(acZ6cDXHZeHxqY72_n_k4$P)U9;BLtM9%a{Qfmxc+ItN%|R7jQ(X#m~)?Tw>KCYKrv6ef-8sWz}Zj(Ld z3)>%hr_AffMUJI4vCU^WXPd=3#a4ljSB_;~%hA1-^S%c*!OkSzK32kzhf8 zU5JPNyq{bhWauVac|bgdNt5>XCK#A<&ET~iWwrh>Ek{ET>oy-v8v76o%s!|Y6)grc zrXRyiIjVn)hyK>%A??RATA%bH%*{S27mhwipA>`KZwRc2evzo^IFa9j0PTe#$MrgY zsWJ{ajiI$l(Qr)DAm9xxtz9zB&+d~0c77KiIit_X7?OY{U@+>QyM}HKm zCZ_WbGy|3VaS#7X4}a3b7aIvq_w3^~Z`jh_jc%&FtE;m+#m`)WRWnD@{JUdm~1J#|Mrd*HyMSuOKN3a?)|Qf&pq`(T#QC*LOaLXB}M`^RF> zNEvsEoblBKUK#^#g5Uy=`lJ5dt;0SWD3=FY?E8u2yHDN(A91!0+dkosxF=SG3O~0E zGP$s@YLnn2{WJm3WMI?}eD<*K+W{x6 zZ-nm8My#fOl5XyMJqNdW=UBMKma!S6zc~Z`Zw0CvM*v8Q=83`K;{&;=#Jmux&qk zGLUECmhEdD+`1hI4q8!PZ|FM@I}d?BGpk75CSKg zHO0w4^wW{>GYozH1BHFBLO=Foupn!w;DELNj(BkJQ74pITpk?q?GK#{`~6K*o5Jr{ z^>@U_9xooY{r1VQT{`%eCjlnzEANcg{4}@4UP1!FckxHR&ksTMj0V;Ws;Z z4dPuX_WxL^mz;6^R$Xwg4&TQbci^k>BZC!A=vzN_8b{_ttmy7GU&@Ey;B4O4>>p|! z_5~j}K@|UxRW~=e=I8l`J}y$TpwBwc8xJI7z`j&q=OdPZt#-~L%{x0>}8KY4}ne$Da@hxAK{pJts`{OJpfmb^r zy-vigV@WiD`}|*OgGq-lnT|5RuzX@^G;!5P)S`aufk>j@0pASjX*#(JHnD91Tjg%y z?82G8UX~(X-=D;rpU*jTsYr#KzT5|kQGObRg2);FSHhR{q6~e_8HbWuI*77rPi(UH zVc%YI{Y8fy=EC}5(INi>ap5}BKNq38QiRIhU-YOpy#%>APUNP)ud&JBYvb4MMP6pT zbi&t=n}68wf?H{|j@RJ%`6QCC+}<<=nubMZ%W= zN_19|;T^}Cko(q&3s7dJJQO-vnC&|>UC8+M+kJ&d_p%}XfhXhV4?P(79k(JErlyYX zjn5gp4*LjymqZHrV$SrYD&gXpeun*+C_zOj)MX#)vcGijdnW_F-toSA`%Pc=bIFj( z@2|%H>iE;xX(?{Zzgvg7a3JgyBc4^*&nLfmfqnJ^+0N$=U44f z)XwlxU-hdeEX;D|t5nYKD>x8r$QiPxqJ-E#8f+T2ntEg9jZCF~Jy938lhtoz1vXp% zej?n@*yVh?2Jw`kVY|4{38@+!>dQMAY`9{`R~LMhl4yDAZ^gaqbH%;uzRB6|2Hq}x z!!BrjWeMY2SLS zbVJL>oP&caM=q>yf*V~ggQ?~>?BKL-l{d8`j?%8+sPDojPQdrs^PD5d(|nbu`3J`K zl^xx`zXoS=QpKD{m`z{4X&EliQHmVoz#5zIEVh z@QE)UAl9Luj#v*}W5hhzaO+TvA?OLBZk;!5=b?o_|LTA2yG;>C_Bi{{zke1_4%+)r zG8ex{_2_D63PuDuy}6>jpk44C>(abr?twK;ix=d)WL4$dn|rU666t?n?8LmJ{o-Hu z2WOn0ydc$EUYPXFm@xF?H**6GsoaBTJ$p;sHZwf4yy<1y;PZwV8taI`o{pmlYU=sN#Dcqn!zZ(-HB0y zPwlSmt8_~7ofNBY|3Y6)Hg;N1NEV{~tPpJla>I{)As|OWfj9H)BPfaXoBlk}X3g-w z^KN(Vg71ko>+utLp0;1M5qezS!3cd6=cL@d&wTyh;=@XOiePKEJVA~q$R z2@kBOH6&vhM58m|QgCf>gSk6|Gm!=mxFLT}ApM`;m*91Jg?h8E53TeErLvP~E1Veu{X*`}A zGx4r7@WQauc+Ws@;_;l9u!KU=cuzrZ;%x^W&yH2YoO5>??;oJgz{8Z<6EM@H@i@<9 z;yr}|sq>={b{g+(=uNyrWER&uH0g56xkeN3UxCMbVE8Dn@i>2J;#C80C+s!p@MS^B z#5)DN2!x1Nf=A<3dhiYcuLt&;G~PrHUI`}dA`l`T=YBNad=FlEPWl`d#DpBx%RP8A zfyZvfPbXG>|v=WF<(dmY6DO4I$> z`-dh&kfB(Ohx_#DemNdVs5}O7{v63|P*BW+(tQ&iKkVs#o-1LN9Qq&fxDSbWaJpx{ z`(d9MezQc;ec0nZY+Va?bYCOfhlTrU=q0gbO%wMkWrjarhSyDYX}`qa8J<(N#$d~u zChq&s#48kdkGUc&Iceg)|4ezaBW{RO}v{m6R%w09dB$h0nIBhOi@nd^VRq*cCO!pD%7A4M_;e)+NwpD4e$d4-PGlmIs^9vq+zlZ-5 z56`l|^2vsT=N687?4R-QFMy}~6L@&8;a7@hN#Wg(Zz+DK;E{6>rhJd!&lBg%$ulL3 zkl#^d&pw7_AnCiLJkaTGVQg$!W`ky<_s6{HNS@P z1(qo9+@tckaz6uwgM1TJ;PG4y)my2?EbDWM-$yl$`!W>&6jk88Koyn#AE_cydsUm!+tRg&Ns=z&uD&kwE z_|;V5f16VGEBi;3{b9xPE>pVy0oC&nex?4SQrQk3u@*$u31eJX&!@r3t{N-J@G=B^#)AKM@#On#FNT(ms9{#1M0`EVl z!hJo`o$4&A@R#R08D921bkBUI`w|uYI;wCl%6TlEFCstaAM7cQ=5K3y_0~Asa*jP% zm)6&R;5}F`2H}aZe!CE(COZ-BZ%mXWew;WE|NRipxpXZI4sdQRJSX@x+UAzh1omVN z(qYa(o|CmGoT%=%?hPy+o3N@L;)$3u|9L{%QwDp0oe*acAaG(@xSzi?MX#SSc zHed=YDO-3ntNGr_Kq{-HEK%0)Z|)UxLW%+)>Hff|?hES=zw_=^u2R^qkpe*+n&Vl`)xXq$w&Vc<&KGyU0#{;i$<@qYHR+6{4 zyc%n^)emo&a5Q&mUBWlBu1%Ok@*3~NJrQ%n`b9bp#3juc$a2DB<)y}vD~7Ht;t(;` z^OlbU!%SJmO`3mE_`G~1;F>cQIg5*T77zQZKr#!V8xS&$nEfyA%1px`%Vcb&_^?bGEwjN z8lHZ=D^}bF6VKfcGJux#y8-JS-`?^4ss55BTO401?BqK|EfdB3{@9irftv-~O7&Ii z`u;IM_RTGBV~ny>0Vj~k#d_kwPtsTU_27tOyX#2WAFa+A$ZIJV=%JSKD*x%gjQciB z><=yqC485K+JwnWEBbId(Q23)1~C>~mnvSG|+s4XnM*jtlmYHS$qj0E;RI}+%5b|m=FoHk#5O&iw7?#?V*T?55StZ1~& zS5>qqn#fIjF<$&~VRLz<@3igvqYYz@{#D}A{_?7ojnA&OBDgc8s;cdc6WNP=4S8+9 zI$=#sC9{z)#r;fm?5#BFo{omB>;G}W*W#-x>k>6XwLu*p&3S5dWDUcn&G;Z-`;DE> zhD|t+x&+@SLag<)^F-;Zr_4mZso_9{?akfA}c$$tbZR7@!jBa$cSxC`T(%U3m!W;hZV-d^5pEI zZD)ndwetp9jM2AbPWg*bH!PGti!$#zVFGP2PYioPm~mj(W9L153u$Eo-Ks4DCv;YtWccb+exaVpHDAjzs7B9XKQ;g*w!sY`$*s+o@Z3Y~iv< z=Eo-KSRJQsj7xWC2UC>u4F5Km#n=p}%Ju&ruVHX(hhe5Wr;6d6c>mIEEQXANI0iQ5 z_^zexD4_Li(3^4?US`Z~YPsuRZqBJ5j$ljyvjupv@o;QT{x&=&-YW26Jenv++KtD= zI}%Cb5l7=a1igvZ2EH1PCXIIx1}5G!5&6Ey@Ns5M;|)M>;@t(F?;VkcyGYK#2bmE@faVC zHx^(f-V3lBEqr4jWa1T8rt$cGukrNvL73;HVLbIhCx3MKrhD*e47?JEYP>5Uhkv&` zN5C+@H0k_U3Uf1jvC4FQm}?lDAcub!uMW&|4F*+*F9CBCuenmjgXN`E$*~;nfgJu_ zJkAA_f!CzN$9F>$Z)asX{V1>F`!&en-^JSxhW=^N;d>C~Cf?pkSxy-~=AXuU5_0%= z@eYF-4e!rkZsI*unZ~Oy@ctfh_;>O6Zp$`DlMdhWFgNiIS6WsCLJS{O9lp0AhkqCE z6qwQQegkt8FIkz!t1|Ekkl-d>1pGYMYtrG%gSm+}47?f$F?`i{boi!u@c6x&ga%V` zWT$%YN~RE;?!lXhcm2`gdzA<85b$(- zry6+O9z1>@Q-_IRgtee89=s&*g0NwHnSVNbcYE-*1FsGCnl$#E9=sQUr^Cnj9*y^i z2aj`7Z5m9;k$uR6$I0&q%o#qmM;h;#2an(1VLUX!TG0RY;6;F^<2wTq8t-pCc=KSv z{y-DuNI&-A)fjj)VXyH{K#u;{bOdUKg~lMS^>2SbxgdZ(2;K!BP>yp?9|VtcQeHXM zQ%zd`3CK~;G$k>mT}na{V7r z?uU?Lcyu4hc#O8zn}i(x-KOGuki!(6OFB+tVFEdqMj)3m4740o6d9L>F(25429e`H zdcyb?;$a(UIJep+Vqc44pz$D2jFX(FNCXGvz}Nd*sa)g7*0y`+R}NagijB2-C#1 z*G&HlJ^nK%)5NvcOnH9UOU@5VDW+ zKUK)ryHXr6q>10T%#=@;3`+4kmznm{JmF;zpC*3yGE=@@$S-$A(jlP{zk8V}uX_*a zz{W1VO#7JvFI|h-A4Ci>SV?5A1djWHC{V{(Rlz15(2 zwoyfB-!50YEH7xUzR-pbuKnN@0u~? znlamIPPA$t-8oh?{^k#cUcWg&0KApyk(R_*8TMGMT z@@wT@7XJ#l*QNrK>)9|5-7fdQ@EboIdGi}dY}d6v#P{-SuJ|n^%2SU0h#wnDYp6nA zhtq3b0sD$Q>Ki$5N1oqUV*kr;BXMNMZys?(LmZ|H@rg@0wx9fF(kj{`eygcM?mDVS z?>4H4=X$CeEo&Ln3gEHdpnIklzp=EKDsY!mg}rc}quc{WxCc%G_Qcsl75<3y0*(j| z+||<@@@Qd&zard7UsAgI+#vQ(OguWKd8W`s z@!bx4D7X0%!CBGTwvBBMLT560?6@Vhz6TaWEbj z>PT#C^QEk6f9hM3{dD z85pyn5OEB{IzwU|F-aCP%c_JS92rlz7O)8O$27VQX~rxCWwggKce-XCkyX!j$PK!9;(S>+vlm5OJX`bpE>GFi+!@xzj7onVeC=dWE1XM*c<=dklp-U_9fV- zr*pY$p&7!Ck90S%eCgTyzhEXt@XMJ=E8B1GT)K6A<~ANk=+~J>yrjsh@YH@S!*1pF ztzC30&nhpt`5c>UHvjjJ_5NSgf0*r@*2hpNSu}P3HVb-P-k^2cM%Gia_WuYD*k2Uj zG5e2o;7vTbtHGm5V`CVaftLgx$G5~Y`;X6nH}Tek*I|d&)jzD{X3!9H10J(&BL<(x z@i5%FE#D4(IUY?qd{4rF^18jE+-UvLvoHr%7ZgFi#P0{`kGP-yxN<{GL?9Zwc&zQ15GiQ~V zFUyoY%X|?^@_MM6Xy1h=jfe1OHtDj%>)H%s-2w{TDD7Scr%r_V%1xb}qCJzY&T0WO z`^fif2SrdT&XalIM`BmQ#E*)^InD|s27-ITruJdRpN9~MRb3X7pTd6EQ zZXYSX{ULWqTlnVV$bfZnXXAI@u`bBLuJm!vMbDSEyj}G&ce9@I7^X{K{@ z!ejBurf|}Vl#KXlttcg|nzxfbjoVLtDmd*v+?*7=h)E=z@3bBR+B z!igVxzi98#5(zz;9Zc#s(kJO7c z{28g2b$=|}`a~Ou8YXZ!)<^3o^lU#c;uCr-?}JK(o^2;evCzvlfcL`q#oP}{w$PtX zk&oitFlq!Ok4~QTYHggTG+(UE)0bzPo98RNZ{2FcvS=r`m3eFThp@RAS@VC>ySS() zEH5CfZ-kz8N!AHF9R#X6Y&6FQmxTe_6}A-& zpN=~qTzVae@Kcvd;~7RmtNkJKVT`#lM=3h>q^}%vW!j%T=E}6s5o0utZzY{Q=E{`M z74pn0NoGlrV=iq&m1C;RFu;x0IT-r-pV#)Ky?)J@=6uqW>!**wD_mcK) z+gowzGd|C^b&Hi2#%U|!NLjNfcSRQLTq_UHBW|o4JZsCbaA>@`6Bz?Sj(tODlpU(z zna-hdxt>A(I`R|M_x8Z=1kW+0z=2$qayOYOa0MRBo0Pe5kIcV8@hqdn-9;60cPV}k zRrvFW;-7#@e~wT^24eh^_>>;7V*TL##;nupXU&lx;(7mdh8o%6xntHP_(JjE+pT|` zwJ5vguM_@LsddGTKW?LmHTZj;)BUxT3Rv%E`Ef4L?ib%%7(_6wtd{J>6B4{@H>-I< z+3NV}`CSYBI1NlY|Dx#5yx;FSVdE^Y-SVummFE=aeWCCl>IXi5INW0O7T53|X#1s* z8q)?3{dLvyk;vt1)~&2sv#!#aD$bNzeP_Vs@&@G^QB`mbmS<W|2C zv|_|Lxa&mT?*mS7z=~u^sX7~XirPX?35JnjDIC~yI7fxWekr^8aWQI5s57}iIW|@P z!kzmyKk6em8SHERd%6&55(6I-rl@a=!n~t!uyEIz3knCWi})%nacAN6u8t<35Tp9* z#BXE8b@A5W>#ghN!`&HQP3!O{tl*%3rsl2#7ZBX_LSDLUD}Uzk!lw^KS2x~qcue&0 z>9>b@vu@t9no z+O4M^S`GD@V5RTSnBLrddHaIlmn{d^bmUv^=z`^UXoC>G$>p4cydcNOjeT||2=)Uu^#0)ah+J9*fMa zMIOtHO-B0Uw+?K2-t8<`h`3&4aF4XZnP;by0VvYj+y&)U5#3Z&OVzBVLd$wf9Pn@$`zianx(7PHZ7gMb`kEVHG&6IeEqq>Yb;8n zoYF|glcQK6yu7n}!`Af+Hnn$c>s+7q#*MQQT>E}+%F$xYi}}12}K$lmI-XommevPl7WVYOZDLwzb@^kuJo; zw*UR)^gE;JZ#4lF1(do7DzUZPYUue6s7cE$fPwkuTaJJ*9EN#G~S=Xzzp9K;6-3YJkI}WJg$+McwsQrFw>;*{uTx%-Xwu>*h^fnS3CvBrgTT|}h4a)J zZwBP>@0P!|bKp($;5}mC={YOnw|MZ@p96292k$WhkK-mCKAsWBzZ*XCqs5p0nDKqW zz{9J)i`V19<5~65@V@Gi>jJOGhk$e49Dup$?^E!X^_S%eQwFZT|J#GdGwh@JJLHjL zcy-$VI5&S!dgS(iA1!>phPfHOpBU*9F~S!_!GWmj7w^|w2VRpdR{>~DycdAi3?at1 z3XjgWO30abJgY!^O|TZkd-+VcQt+d-f2%!mHQ+}}zf~|d!&i>RK$rW;@KJ}4XRA$r z>%cR=G->QFd*qtImuMlVUK-1r9_^aEiDUi_q{;3C#XWg3=1{Lk^*FAXifL9ND zrgN>5W4yd)s~>{9(b{M4+3HP3_%1T=e(nk15%6T73V^gLfD3A_|Z1#~SZ>58i9AsD`~J%8~xYgZGFL zKE8Wvyx%~M;f5k8h{27LSat#p_5^`(?q{W9DC@vlK&Fq`m|@@wVW9?$_3GhM=(%pfqn-bI$?S;jZM6o zD%^KH3LeBVNc%&>4`WTs%xfaD@1!5qczD(w%K%1yU<456qn&+6G=zJ`kvkUXKHVQ9 z6Aa=$*i8R(ggo05NjX|0RPKY#l+P9N^h;8vE%za1n&b)jbi2V3begyZmMK3*$TKY@ zi5(J}LHr9m@&!UZ-G6cfoF*HkC=-9I2cM-ZO}16+k(WCww1kaS(o8&#K+|Mf=X>lq zqD+&Gudrsi=Lj)PHdg*K?fDj&rqRyAGr!aAPdX*&YP7TPX*Akj;PH=WX&UWpe5QYq zv@mp|osBmIY?SiM_@#52ayGt3kZC_jkfA(2nryW6newxRe7b!wdjjHL z>XE-x$fsk)5k{JL);$w{t|vSkL8OUi+cV`a7xL*^#1TT8cvhY1m8L7)JsfPQeXuu) zXVp#OS@cZz^G$2Sx6xzY=;o!wZ}iAFdE}eKxQjwkzR4rMz$3rFx>`v{`2`+%$0P5E zHEIfR4B!*1AZaJIwJ^;3NSj!Q=FS(Sg%_C3qS!zC~#7r+e&IWY~|h+CBESXV{-_ z@qLvd5^ucqry2YNOW)DPHjHQCf0|)mVf|e3eAg~QYX460Qa)nwy;l>%&%4baBHodU z@Mc@#v7h4MXL|UUa$g0EBDBXmdrv%K7oq*VQSmZ9ldVsI*F>2=R`#qTMaYG3D4uOv z5!%o1dgKQ^d{W6b3He&<6~)W)aFIA$&+xEKC_;OfgFzd4DPM1u7=t*5hiB_Gk&k)! z8^ALzY!k;?Z=Kl$o_Md};o19}J@U7C_=6t)u!sLk56`=tG%-A{f~S8>hAPYg`w$rN zvizdGWZ)E0eyXyML0^RS@(PdrDi437l9%aqsdcO3CH`Dopsv875dTk=eYL>9+d;`}FtVX~g_sdi|T?b^57ICgN^_QC8im*ISv(ZRWgw=JdQdGw+?0&zOww;9{JK zBMeOE!eF#DIqw#t6{{Mt;V0g5)$(g_1#KrH1L*WhonS{>pA#0NtjcjgB#nt>L>}S- zq+SH!8UC%^oojb&->_+|zG(rgV`Ak`t^`U4=~cV;lHZAyA`{=e6aZdktl*_1l3u$r z%+#?UiRD?V6Jlqr(g{<&Hs@~Ng14Cqa~ z`VBX4-m0@pT{wXFyvM4Yxn7sCN|&)LCYH3c36_s<*l?o=?#it@uple~gC#qZ!ll@= z*4Zs3R^GCuBhkHe%Z6QY2U`MFr9q~ZSo0&E3oMtqu^@^yKa}EI7Itsl(Y0aAjRJcG z5=r&lUMJuk<$+R|OrBP(7u3CDzF73KWUivVabG6cV&ecQL0^2`~R?1>N%n z{>`#Y^ta1))PIwFj|lBVn~kiXsWFWxEJc@l|NrpxKP<=hoDwb{gRvqrTQ_&FQNKJ zmbib4>T1P95%(jo4-3Ixj#WbY7L6xo#Du4e(oo9VWr5oZa!ud6vk*52vtNoJT_mF=8b4OJ7 zTi6r^^;XOJDpjQWBZ@z)c#btg598Z-RAHHf%5;5!YCFzCQ$@c2jB2N4rKsKrS*W3J z$T2SEnST}kOT`D_6Y+mkj%oZ|>2kvKsQ9LI7dn*A{|L+}S4|ao%(sef%k-*v3=GJh zC)3f7z>7UgYrC<{W$R{c|9szlpK~t3S6)c(zwa~5Ovh61Org|ZOpuRnwfGm8iQ6S$ z7|dRtGr;{?!Ioh2nvL<{n14;jwHxi>nAmZbv0rPBKSr3K{>J&@l^dgwTiGGMQ^NgM z_^ylCoo3er2YD8X@*l~4OYYu`4h$Gp%wN{jI?734*G9IZ#x@bdm1+@3w?zNELKKW; zJ2tQ5E~WqW&W8VU=TquY6nuEt{*YKE3x!Vp1eCrGs`*|YK-(IGnO+~K9Qnm~OuQ!W z^h1-zb6{ZNg@H$ZiN~;Lyc?i5@wS6!-PNS=*1^EUb;a?u6dN+Y7z~k0y=B zuE4~rGw|3pX}m|EC!UTY`O)U+(bVAGJv~Q14vuESOcOCk-Z}auu#gp2+G{zgvKf)) zPar^tVaPb^Jpt4+4)E8d^+;Sa_bzEX*Fb4Z^ABT=o?%H-K!lO`B8jP)Cf+xjDW5Im zYg`eQkTmiB*-ZJMkWc4p+9$f=S>H_gkdRNCF^AJM+Sy+At4t%h;klB@P#KFb9=_w% zLZy8@9^PkoIaEz_qw5LFGVe3IURy$?{U$tg&o~qzymv#@MElGRO1wJaJ<({v#27cx zjUlXIsG2;E7*{M?D2Km>wQlvay&B>f65ggyOX6K1qe&EPfggcq{6a`9wjbn~MxjzQ zPSHF%cgBhK=yx~F=tv*9c)xyk#;lni_#0|m9|mRgyWETItJ#KA4Ec_otZTkn>@;63 zcJ=d)rwf}uE=(ehRk>Q68kp4Oo7CAg#i?~>Mr>hH>r8R%s!N0$vHSUqRT*+B1uuWo zrd7gJ{*G)OjU`6tCs_4qrx#BOb|+deW; z?$(Yton6>>ufGYk+KREC=YIZD+(orVggDF{*>F|7ex~qKhEIk^`p^C1YS;guNEu*U z^e?|_4S)6X&R(a_$pPA==7$B^k&{-z?4&g*zt8Gj6x-i#(GVW03BnDq%)B-4}V~Xh*sb z4_oW^lVf}0^;i1^E4Oc)?~$7W{znv0qoN9?CIXSK~4LCDQ~m zO&V_n3{1Qf82U}T96TCNxAQvvnt=Bh>@{h;1Pn~PQgl%c8m3FzFAUUKh1rhS&!fBKXgB9@#qaj!t8e2$Qx=Zdgo zq=|b4GUaoH{2^Dw%vt6WUSJIxZQR0i)_K5ji>|*vf;sOb;W$PUWpz2C8TlABipVe2 z3{>*0ADYN>tx6O5J(__^9#ax7k!Rc(z9u|e+j;`3CfYxv8K~r6@bD?{bk91(wXk8R znkXMM3JCdP51;N-^!;IO1KhFBZFbR5yT@od(IZ5XRhaSEwpmPxBZl$} zhDT(D`pBM|Gs1R_5~L%?coC}Lr&2v%&dG4B*GwL&IOB`$8LP=-%=ZbZD1hs!!d%QX z!F;K(apZEH3K;@gZV`F!2{rD$8u>0(G}3RMscT&w^SJQQ?ETX_TvyWh)f5 zN?%o$V^zI9e+z{K~WRr8Bvzz}S4s95s(!&YU)nJ31z)}#q7)_rSm zV$kPbv;NvmRS6qkr?q;mzT$-Vnr&N2%QxD1(lg@3e(R6^qK!UJaeRl$h5P#GRNPbJ zd(r%HzdJ|qmt#S*C+tEuItONB@C4Kogt{1yiN`)-4<1dF zB{_IZyh8>a!$LXYZNg*X%>+{eGfg^O5->3FQoxJAjNv1W#``q%#ACckJP$J3nCx?~ zvyCws_dk4)F&Xzg+%J&j5B(xh)nO&iJ)E3N%7>m0!-wWn!~y=g^av8;CoU&(4A#|Z ze`xSOKPJoejG3}UI^XJshB=rf&KKhci7Uo$z8C7 zpjb;?yJ(g2(j8cFF>yK!-R6$vHH4R#pEj6E~+u5ZlMa{FjWj>;#4tK zSfY3_M#0$T2J#rwbW;T=%ab2t7SAEAT>tq}{xEwD~Mt5+X0RlfTpJ z>u1fHh5JQjT&ga;d;fK$BW#$BvBNB@!RmS9vxlwk>}=be=-YU@?R3Idb?3cQO`(%po_q{Y1$F-&THRm}WY(PNmUI^EV2 zo!f3jcjGyR=XCq-L|G!|WY8{j#*2Fq$`+4rxfU}{R>#Wqr7c!fS=;&IcXwh!qEtvM z5+jqv;)s7@>;dj`LH|2HO*4s8?5u!$Kq0bvtR zZUTl4Mo6`xB=Jx0v}%1r8rKJz)4NL@GcUe?u#dFuYAbUPrtV_rShqiV_sE6yyAyNU zPwz^nHD(1n=B_K|ci!8M?eYONhFti{NPWGp)<4vG%G!3i{WRkLeflBtrO?e6+p!?y z6S!XicBxY%Q*)4MvKRNi_|FQ%=^gLxdTN&ywR%SqW1U@zsK`ItIlbfbr%Ro3xZnG9 z&%j+G<(ZlYc^Bh(dbh7Od+6BCoe5bc;6j*%hnS)=FKy@8wkLO=-gzMIlc|I>DHI{< z8Ms5{rO18TDRqL%{9chxN0Cye;m_S83+r2l&orD~cPuftqbIt%!yi4?fil_Qi_Tpy zQyrxgxfrW$PR44-z8I*TlMK{mzv!!-mh{z5Iqt8$D0y|Nu(lx?shyb&*48CkaU){S z*2|Op4Zeuq+onTr;kT!DN-{>QoHBm8s?Utw^=ucS5QQzon@j{EkcQ#cxsSA^aAk4&yhRdIrC_ zsU&{0Qz`t~DVB_d_1555@awB>7-D{xqoxLu6Pjah{qa~aMppH+2ldm6&Ru6kcjGy> zPL_!hw@g@rbp6UrVmx0v0xZ_$I@ey58RQOqq<^JOvnn&X4(=Ve$IX+uZOjMe%N6x9 z-TQ*f8++JBT?iz5aev6K#r+}oiW0m#(Ni0HtLhGh_z1$*JF>o>rT)lGG+`ON6Ym+X zJZ{zg8X?nd0K=3!BtyPtW9+R^LvhTi{arFEbsBBPfzB-9|1MGQPbaQTyqj2&C`we} z-K7le;I)Y|XFF~x+4R!(#pK32+gcuouS-h(C!t@X^jo1{q4b-fU##>Sp`Wkx8=#+~ z^fy9(vC?-!KUwKJpr5Gp?a-Gf{aWbrl>U0?Mg1+VNVN`IC>5y7#iinRocJx`FG>Y} z!{Rqr{AQzc1@QRsSa^=N-TZSI%SDJ~?5%rxE>rQm6n^M<&W2vc^AhNFJR6|b@th95 zj_1YD>v&!Sy^d!s^g5nXpx5!d5PBWYNzm(fMxp<3;@R8g|2ew=wq0LB`@ed(u%Z^g6Y^ z0KHDFJ<#ja`W*B+weEsmr`8?N>(uIjUZ>V)px3E&EA%?Gc0vE)q}K7ajj3x@%+>%^ z$80t9I%ZcxuVc0fdL6SB(Ce5jhhE2Q8T2}4OQ6>=TMWI9Su^xHW)Ac^W=+t4I5F#O zJAKo!j!CH!)cy(V_fc=G+A+yv8~d!wHoj0wQ{CT0+m3DYH5}{s3fd=MZQjt68&BVa zJByyD3|o?^QMM#6C#AhJ1Y2u2?o2}LZ|bvlC61TPMJtuY+ubgGDQ-I5o^!Iq=6Gm# z$K=#%lqn0(A6gdQ-LQLOansQayEcZJiguQD?M7&KckJ3Y7oi*;nkiZ|8Mb9A?0(TU zUr}$yJtrw!K$@YoDB?&!q|9&xt#G#CA|gf!(#|jJ(k}gm9lm`GcLC9^5-XUt!-&JG z_4wF*pd%o1L#DeKwzr2E{!*t&j2y&ROpG2z+SsSF|3E)6bUymASz^qI79D&s_}Pk| zAWRC-ljMt@WLIKt;_=gOzkON4f7*VFxfMv}K>ku8Kax0_palC9jw9sw!UD-ri}Y9e zIu4kH0#o`r7AW&Gd=0}SE=+bOI3@@j55lC;@JZghX80uLv&<0^Mkg3=PF}nQBXhL$ z>khQZaZ0QTvvO6t6EDLYBVUZFG1gnRMye|gK#f$Dt)ppd#u}&?Y2w$edRdtD#9tPY z7H(vtj8(J->aN7g_zf>E>)f3PEiPLRS85zB$72|kqBLMNHR`6!plC;tK8FXsd^mvj zhf6W$-wi)}wRUn%^F1Q2bCC!3&^68Xs}x~p+r$`_H3bhxC#*Gd*Ue2#*y%?pvulGGnT2pm*|B!n&mC(IqNnRwd8|E< zx~%z|0vqeT;w^+Dn`3RW7th8UN27S-muDJ897_~BWzKF@3pjQ+bG}rKtxasawd~;NEc{Yt4We7d8KZwu z!_j7yKV!#Ay7) zClfMGL1*l!F*;9$>dXoqDqSNpLlh7pV!4+gvIb?C8TgQwfm+*KKY4nCui94hTF213sy+uaysLbTHl#2=GA&IbH{nMjV-$|=A3|ekqu}WK9Q9A8==2i={uocrt}@qJ4)XU z{l}DkE%dXL{(9)ADgCw3PgeSmLqAdJuYtZq>92x5Pw7`e&l=OyP{vW8eLjC1O2qG2 z@tco1v@o6!o*A#o6sCL4GwD-p50EU?OJPmqI0h~kK z(bcqk<e4MOtnxc+=m<;BOnu=r2~a1s>HMcuc%%FiZnY8t+~h zm~zX(?A1b0b+`vSaw*8&Wyoo~ewdlz3)jnVF??JvrX0if4|q&}*TbXBV5Uj?dmIKP zUWtLnb#IOLHuNUmR{^j>gF)4Jzk%MwD+gX7%oskZ8joj{Og!EXSPFYh8gDFwOuRZH zd|VgTc(Xism}eAserP<(k$9h}i8m8?5tuW4C3rL*^9lcMc|Hh>m@eE(4vNLIR3_dk z;Kg80JS_3Mc%2@+pJ9W@PS|VG;cNHc?E@bE1s>B!hwnBI-YRUc z=TYPFo>Kg~@qGq(PiQbDNA`XX-YMV}!kqCf$D{Ec_uy?u;p81GnsoU7%!3!0F6#&J zupQII`=JLfh{AcD27{{0%d;N5eZbSdGOW)ugk#G;rlxe-XjKHm4WxR2k!;o z?HdK}Hy*qvfX94ge5(z-d_)MMZhj=N|HNgK926@AIkWuz1bA&QC*EW{IzOttc-W6J zTKS83@akry%U_LwcZCNp1-#M9-&_ygbp{^y&*<=7>%m)s%ER_d6RZVYKU~PM?Lez=cc~2 zx}PSJpNJ6SY*nF z#aU0v-zDV3!oMEqC7Csa`J3yQHc~DVKb?{kv$5kW)4s@XP5Tm$eTj7yBp5!n z@qXAd{k}v4K_yxvR2w~GCjNO=Cu}IrK9*m>r2AXl0xjjAGkDsUxJO~6{St$x{XDn7 zX5~+ljTSf4|5D-Kc2@+I(I6YA12W~yggncdB=)3f;{A`A^5vqUGk#Ct@xz|sd(3sh zo-<9n4>Hqzg^=%Y(~~`8nrtiLk&jrPfi=b1NBUuJ67PS^#IF+gn_QtPS4R!+gUpn# zwmt`Q;_t)bhdtxNvMi}uYlO=CA2Z!gw!Q)zx@Vu}hdtfzck@@urwpF1mGV7L;I=`oy@W8M0$fHp;$VN|+>Hjo=_k>6Q z3bLn36Yq;;eA85))`=4qC zD*0DE{7Dc0dk^nD^Hc@T=pR#pt;wZi6cK;1vgbQV5!x&6OQ*;R!53QFJ@RZzXvCUX zgujP9_UW{g;pcc!6aC|OPZRk!Jp2fF8tueW1Yh)h_pB2|sQ=^LvMBK(&hrbg%@woG4zRc<>Ik9_yrqxdi8-96_U-NJDlWk<-})(j zLD%DC`~9}aSFJkYVvnEn&kD>CV{6h@Lf(r^O99Mw#Jl#QkI&I@&kED;nYcI@g3d=@|?7vw+|Dv;+(% z*PKO8s|s6sl27G8dTLL*S0@aa24WUZz?f;e3|JWl96NYJpZ8)i;Y?s@U}GCU!P9ep z!oAKF-tcGOffY!il&Fa4{5RudmLhY$PX;4BhsVH(^OlX9I@`OKBRg@?8*ex}*QB2g zy)h3c`iKxZY}O|~Cbl?g3E{B7$Eadrs*NgsZlKyO-?ylCE1qo^dG`HOIaZ{)m+Csp zIzY8Uok2uJhmjTPlxH@0Rx&~!p3bC-&W?Rn=q9{J`k*2l%cvq8Ta>yNsvkIbWfJyH zR5!}=x*;?yTgY#g<2cIkPRkGsf2-6A^!?;HdLll1RjTupx<;uYz8A_foWx-tKsol> zRN046U82<0R3Xp)n(|*JkC(8+zIm*3(UlVJkla6wgv~es~(W;N; z!u;#PJf~&Cu6o?nQsqqO*I&xis({2#G44?DAHvCp5#QyNj<4#EMzZUP^WaEM{h8Xp zNuSR*6vWLWV@_sUKC!0!;7E3%e`Z^$pWmmoat1;z_&V=9)+e7W^S!xp?3j}|u3V0F z_}!l2Sg!l6P574?{sTt%FEPU3_kqJdp#?X%G)_$PI0epmI6?e?^U{b_|6ttz{3Ayv zInfkCw(Y_A$n!j<>sR3q)YmwT3xb1n;*>|0^UD*_osA1@>{&Y?)|ESU{z?3Dr)F@X zQ}2AOTz(0-1}BEa7fw~e)el4$N0)r|aOegtUpYl^#8>dAqPVQ@Jh?Nfa%mi*TepQ6*MDcODHdx+zg3^x?>c#8jc% znAjiBO$M7kQyEB6Z{yp?w+oak`90a4XD(1dv(D5M4rC=O`^%8)>b{!@^NQb^{o>&s zeE0Z#=6PjAq{oqyX9^Z4H&#rnUHGDP@xo-xiB$T($uJ#?2b@4MzAWpcKX+#0ywn`W z|7ev+Gppup+*i{rc46%7m*0sEI1Pz|@si_A@q_Wg=c7B%)JB|>L;reWM&jYJ=HFe3I{pq-OAZEejRg0w0Z*pLrU0*VfSbb&XSaab+0H_ks+G-!AUNhA~YYy!YPkE zqPuaY*kymfLLdoUsGv&xQqGpF7%M5QP-sWO@FQcs*o&v->LEux`$7`s*q>`cS1qUx zzvevubNTW-I>SvFK0!R_-ZSv-0{<~Qnshv9X5#$^@Cso@JcdQ%T@Ae%zURO*%$g`i z;(NP^7sh&p#$&iN-UjGRyi?#ui*Kg~uN-)DV8-x;@Mt^?S2FN;*U?UxY0}}NnHj!S zz+*g!hoO#(w;y^ld{2Qn2s2F@ZyyXyyt{z68fL^pQo4BGhTgiGU8^d?>x0Ger_NQdt)z?*ol0dEh?h*yM14Y|TKW9BC{b?I-!yAXla>!D}s5oi~)*gF@E^hvm>u!Nc$&2}ImXyw}HA z*2^&0r13PbRnz=`ay?}^Jmh-HIH=9qa}j!%L3*5hzd_jvgI9{v#z-w&R6jA;>kd`j_b z+c@9*Bk-CSp1;LId4{8iv)=B&4R>tmp$+C8(_@+qdL-kHU*yPy(}{Z2!oh@j510D| z1!u|pmCgDq36hcH6k~MLG5V!l%dT!(sa*=a>5!h&M~sl9F@4-D0s$j2=#l9kLZidB zhiZ*dS)Xy{%34CTTF#qPOqKHn6{t`wMZB+mno^mze zSxYN`%i2Zvj8_O9k3$unte^^^HB=GKuTllxV^o3nH%fhhD&+oA@gqvjMggN7`v>0V zA?CrLat{&t7*vLbV-AK#yxK z7rKBw89Rq*8?-A^B|=wdm#2z^E@GdbDiFGuU6dLlbUpT%REWA$J==n*pwL;{>{OOC z>nQH%T4-bDq=YjMgE)6L#~))LBQ5*mQF{`nlC~^m^8Cc5&pQ%NDL`-?Dp;#rt|&Tgq@JKkgOin1K66eBw_2 z&!w!Wzju+a@hcm@?eF#X-2xlCH!f@f$|hjjy>{Ow*aUj#37ep@3EF|)K;K%}Wc6Mm zYzmc4p`F#6)wcpR*}d3>ju1qYO~lUb&F)(Oo1ESnVG~m}F*~O>r*95yg1uG3rbpTI z*umalUoC8MdneH5R8O~v56VMsZ*E@&Y(l-`gpH+atZkv*P~TYCIDJns3lIrqiMiJ`kd55qso%d7X+I9R_XFhKeS0PydtvsDEbL71GiE-@rkDxS}=PBXs@IZUb z-G_6Wz)R;Loac#fmMr~G>s#Z0w&zS;V5kr%^0w#a-nNUUHC;6_d%4{k7%s5?e2>4k z#zEdc8tBdH_1(|%Qx)p1SQD>traNoqlh5JI#2}+b3Qf7_U*29Az%1Ne_%{*$l?(qS zEaSb&-^Q$>HR*9@e9Ov_3-_)WxupJq1%*S8?#~i0ly7|8<3QtL-#x9TZip53lx~b+ z<7a6{=|&5xZ?A8^|DMvwa$z12=J)hi!vV{`*T3Jshtfe|It0_8W$(532ZU*%!YH%? zdjtEkU^e#l*lL{n{C4*EYo3UoO8)YNhI%3rSp6v zQyN@-@zIpLrFv#w-EW4*%6Ua5CJAL2^M|c#ma#;QaSkA#=`Q=tAKLzl4({>oYaO;x zm$Q-&#&NgMMa4r`;-t!zIH>})*M}B?(ziRjS37TLDN5cAq7-GN7DHb(owj$Rdg>M= zi(U-YU7E~((O*}e4Af0e`s$Vrtw=@cW+Y>E4avefXDEMCpt>c6*|V*)lX)+47VVmo^v_>IowMJo5P+gPCo8+sWlnPJs zS68LROtPylNEJ-VsxHTGcJ+At=2V}D-`wirRNK9s>k4WOmzsq`PDg?pB#_# zR!_zmgU}?a`uxS=sC_yR?RBnAMEi>nyT1@I4M(qQ%zHC{(*5j6py%0<;6t?|0de1B zvq;ISM`l~TM~RYS-1&`L1`F|Kh-W$;Nyvx!CC=xN5Bbi1;dWg`cxn;)PycYv)vLyi z&COe~WXySE3al)IHCUaO3RmZ*au8Nubyg~h5Umm+vZ^c50{zf`Xs-HQLSN#_!j5sy2jlBCX+sIErdZX}l zhiW4qN1Czh1ctiMwp=UP7THp6g6w7?D`$gmT6zikxzac60?b|yt%vk=LYgH!`bN;6 z1eGB?aeCEAd-cFk>h` z5{S-D9YN{4KAHa_)Z1W>(g%CoqEt0h5Xp^ZRkaQW^Cwek?eb(0Qax+O4HZTTq9NFX z^T)%cr*#orSgpCrJU^8e@!_;rIO31yAT4JtYCUymohVfiD_Z7!)tR{nZo}cz{-W?{ zyZG}?>##3;QEE)Yj{fF^^tC9Zeb3H6q0Cx`bMk+#^glZx!*IXzqSCbv=jA`|>c`~& z#MS5L|KP-dcy{v2gf*pfuyxo9hiClu1j}~*f9AfKZ(ll+A9*~UGh|h*X*gqz%e5fGE`NBq+ol5hzG zBob7LwA_#cZzMo~(BjsvsnC{M+ftz|f_ACc)>^v-m9A`cv8&s4TiYh0U9q-J)xO&5 z?nb3HtM2;yexI2+XU@q@_4l^>dEd8_oco+-=9%w2^XJT&Gv_%o(z17%IyclkcLDYz z7||O!7psSrXZPnOYhHV+I)4e#oN_gf9zVe~C_W+eoGqiC=D~T+7xt84P5%WokmQ(6 zyMg1MIywrg^PeT@7cFsLel&V*$)P>&z6i!2W0FyQtwgf(MsXD5CS0sZ!B(7)wjJ5` z=8I_Q`<%oZFIFT+phf?;+(WJ!#LkOyea6m<;_XM3pvzrQr_22asB>KI-k%d)M?%*} zBh85Wg*^;wI_6fmeG$Bmi2-@E^coI0SKiPlAeZkQPDbQ6CcnAzTcFO5$4TF*k>4Kq z#kYgfli+L6u7_UAtzrD!DEW=t3?o=^guYZp9q-!WFZ6 zV>sN3_xCmS$17&`*5D|pxS%gqUf+KdSHY~_yr)5LDDORrt02MO8!Gy8%jYq4-PGO~ zLVMOt?aMEp1)rW3MUZe-oZUC3yd3>eS%0KF-XAS5>1VH-U0#fSs;GYidfmM8@%_=;5_?8^mw0jv&VMQAW6RMamFF*)Ubh*2E?NrqWsqy0eeUdu6<0Ht z+tcS>9Z4Qd^9^XxV$)U>eFqPuk(!tT8jIA_kQPMn2xal`cUiZt_>Txi$iTnsIsH6jZWAul9f{*m1ypUcl(*>@S7pRwhOz9)#1i2ylFh6#F zP5zlbQ$7aI;1kEiAJTVt25QnX_4g;27t4w1P#;p04_)pazFjZWhdjzl^dQf6K}tMQ z;*biC0|#E*AEA&pcr# z(hG6mFFLb*v#y9k9T4A%<1p?o`h8@pSbu4It)?y5=F)r_ORKOhcr0m4Zrid+1$kes zc5Q3NE64VbuNcZTb!-m2T_g_7!{A-tzM*ADr~RH&rOvmM9W9+5f7Pxfv;m;~Hj*eq z-e%I1W^Gq>bf@cDIy=|5$m>e~gI5Z8E6j%B^jE@Oo|G~}Uxb=ehU7}75q;D}t5+?l z418khK{Kdo_@L_HgM#0z1_0*{AM3((^M((snzycM7(Hnpx0v~*!t1OeRd0Z?kLvOk zy!e$jz$kZYHIVuB@a8Su9UHFm-W;aw0 zatxz82S+ZBcay7xOgP;G@G~x^PiBFRFrJ`yO><?0FRT%HSi-I(=m8^ zac<-70bVEkj5ByQ!^76E26!w};$e!|!~0vD+jwVy$25#Hcz46Y#_O{1@G8*5`x(w{ zyxjm`85(Eso`8pqcNlmT@S}csh3nzHjB^|BY1r)T$$;FPn$n-;>Gi$vaL0@@k8(hy!6csn6O{U+crco&E8 zD)Tbi4O|ey>j$2xU%nMHc$bIpdVt4tjWhZ!58)M{G7R2C2phZ&A-qB0H5f20M|OP( zug1b-pJMR%-7fyU{-p+uGn)X~nf~P?A-pc&hVWJogZF$0Z?A=iuFEUG2nrmc zULAZ0co6lRsgM5-;T?bwPJur zV<0~&WWO>>-r+MnmSF_p!Sdip!go=O1aNz?+!&Fkt%P!DW@##P?J~|1@MV)D(aNfCm7sZ_?7@v0{-$h~377XW|#dlbMEEGOd%Ht(Z zgm(_#MV<2`-1j-pvmfF;#6`I6_MP( zF#i3dOY!|a>2gQ<1cp!7@@&WCFCn#X(%>1N{S4!Gk!FaGAo-S1Y}VGPu?yo#d<2eX zIPh1Jeo#Ft^V>s?*(kS%6mmC{A`^L(Yr&Wt`f^{*1*8~uag4(Bmyuqs^MT=qhKy(lcXqTL>0X@lR|&_78JNYpk5sq6Olqs_E#*2=SWcw zuYfY00aB!Mh7{$(ev5h+5f33cY_u+Nr+LrM|C#XZfM~-ri;zS60ov zVE&v17cN*ZoNZ;*-1+a-wsI#kW!Y9PMkzh~`k1(zJ@U!g?3^c~IXO=j3`ED|pLFB2 zJLEx|L)w%aNY-HwqAXaIoSl4Vu&5^b%-ML8`irfx{+yYyUyR55_wSA6n^agWTpBx7 zfUsZ6TUJ`^-W)Q2SevDXWnM_OB2K3C_PR=Q-!cP8WmwhH$Mn9e?Zf*P83T zg&j4xH^vOfQ#{>z6Vqp0w_;+SNWFgOUhD>2x-?mr)K(69e^<967y76e@|`Gcs!r-J zMkSy4N_EAkuZ&6Fl01~mf@ZYBxk=K`Ka@BT2lp9Ix5>~#t-BAai`=7&X7oPxa(1ld zwRgtdR$Fm$ax(u=MLPO&?uaG$vRAEs44Z=FxV|IMZcVb;(@j}UFf6NYNwOlXzTI?_ z?zxBSPhodlw=`FM)%tl=7qsB}#b8Cx$lFIl&s&o@&~q|0Tepyb5 z`|LjTC9knkS%4T_kRJ{CGWl-%(}GtivFDaXk|t)Zj+v#)G56%OE?9WNZ9jfiGIBR8 zRq)MrRx)3QkLcqUs};$z-(^QillZDNPJJSKrBY7PhT2yiJP;%;VQw*D7v^KrQ6V0-09|;;Wgc|W_a6ZoF8r*iQk9YxSLFWTUI~& z<=KKkTdLTr1@7I~Gk92BSPwFUk&MZRBD~lqQ*&k5v*-5AL zlMO{;6_wbD9j1D-vBO|~Uo`RA!C0l67}f8}*@*rK))R=uv-+=x4!@Rm5lQS^zJAZO zH@Y*+cFyP?)mNERHdPg=_=##&CaePjLQC?RD5>CV2TFTRZZ087B+ zWe=>?)NV6w#f@^VQgAD7IP=l(FrDbYm`HTSrEhe9XVQq+%(5MqzOe<`R3$G;w#r^D zl-yt>qtTg{zOfGBvC`_~5ik5o_(TIX;rVDU9CNY1b1L578^bQ|)Crd5O1JWvA3ah# zXBhMu%q%7eWWV^0?Ay0fd4bRPPTr1T#Z$q4ju=Thc{ zd;4I!Cuxbj7tT(qzEkyWQKa#{g$$2>RQ2Iqx<5M?AxR0Dd}2Dz7cW%lB#_RhTNr~n z$DWvquq7flP41C7(n3{EYOS1%P%RfZQTh?Vttja;xp6Cs`nZ0_iZd5UE+%9Bj+)ng zTdGoJfBL&p#;HIl#L%Cb(Gai2oZ}9@oxqOsveT1VWyARCT@j9A7u>gu-@D17KU}y6 zW4|e~z6g7wzm*))dNu0_js(6VJbKZ-NPJfRcHH^T(RY65%kKV4)N5^0rQ%jh?)zHp zS*OpbpEYSZYHY=sEt0=;PUHdSAt{w`oM^urcQICY?nN01e4Ke4s?$$GI{oxd&}pls z(?7juolqYqd2kT_m$?vw-V;DplJeF>TRAVovj3jQ`W+peW}UEkb2uLoumtkt^ul4Y zJGO6YnO&V(X2}Z1muaF!JG-%9RbY*W*7X9GyyCLDRZCV}Hq0viK^d8?@r{r)gvewL z3ZjcDnRN~1yPA5}cWi5K?VjC=9Td8|wr%N}U3Ed`s7qD|?oj!;!^vlcpEp!|<)Xz) znpZ7aiACVB=2vY;_x3*`gGsy05_QAhHx~!zbByC05#0(Lw%ls)I~kxI$18M=I7Y~s`gszsrQ$eUgd+jYj6{D_CCNe?dv@ol`d z$l%QgH_qTiA!Os-13df--WX8I<>Dv{;k`5r9_MatyeBRFFjeW{Ee_#z;~ilf;l>&L z>Oy$q&sFn_%&%>Gc4G){Kk#N7Fi=y!e;vXr2VNZE#N!)jli%=O29E--2I0mT{la@0 z)B~>)Ld3&VtB3dNkbW@$P|i4`-!DS?bzAwhZO^h00iynOISd}Yz6{jIZVQiZv`v1` z3E{ONpxh{@<;W&Nc>958uD2;#j_su`gtrHH>^qEOx^&!AV1zoA-+O=;#~I6SDh|pK zuQi1CAOiNn-#CM}E`;|u@D@Obc%?WD-mVZH*AdTjecTYji=h)jlNP*$h4(ihJlbYv z((h0RZx--Odzoh8{UC&wMhDDtHqPYtA47O+foJLiU7?rXXG3^Bz?%y{;|$)@A-ryO zx@c%DKNO{h_gV<=epFJX^85EN9$vFH0f%@v_3%dE`m)<|4H`wJ{ANK8L7saQAO+xv zcODK?zcWL4s}bpbFP4%cdrk=NN#L!9Kk?4TVelG5c=>tiJrP92nW9`A!kdK~DBCab zs&E**mJnWi7`zXL@a9^0b1b}%hVbSNgZGgT-X#_u?G=rFw}kK-hQa$>2(RA4yTHQx zb_j1R@b)9zIHpVY%@E!);4OeZ%kM%QM!z3~@CJs#`^OO8ZVT^X3$H(fw|k^Y3nJo7 z{XQGQd(g`7`ygrb`|l9mo?-Cb4B$3BJb z3y|BYPUY9goew!A-DQFz`R~p4@j}R5%1mlUJUUWSM&$S6=CT(JKZ$d^Vw7^>b;@fO z>3S|+?l|{a9tO`7&?mP4pTqVM#bUXbypv=aPzU+2G6!O$??t!dVXi%ExigHqmypMGVT16x$}sb4<#;MtJ=k z@FE4JX`2}I8ReMq@|_ZYl*B*m#pg)VceG6m#vdc=E;Id`aYPW#^!IpCII{E|Z54y@ z$2#9fupfVHC_YD$zN778F#b4M$C>ftI3fsV`jc@e7q;D+5Q;y+8HLD<&oN{~Mus{n z2yGRE>7DJ&(egDSf3~D|i5G<*KGvhwxexgP=1oLEg;X4obPCx z7?htPwpYxLYTr{tzql8LBRAjCb}<-#szcip#^)F=f^e3n>0{JL&5mChieKuO@$_Da zUn=q0Hk2zhCqila7)(FmJf_oE?I|Jg{q~dy#h(_6Kh1eY$5-i3llT>0EG6&fM}_

    |@ivC|kB0c0L;UR_{yX5QVi6A7N`5aC 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

    KIk1miDBLU7JqU7 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≫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

    -?_REuFy)npdxR)8_W8d%A8r_`vx`xw9!V{L7Wk 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:FxCg9~0?}%%Kv57+3SkbfN-X^h;#zpD&D85Ll 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

      Trr! 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

      7zm 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⁣r-e?h8iUT+4YSDT0#pH*jL5YEx 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ⅈ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

      w!E+llptV#)OfjWg{=%0m3)gH>veQo^(Cqa6w{ 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 DsrH^V literal 0 HcmV?d00001 diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/odin_w2_mbedtls_config.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/odin_w2_mbedtls_config.h new file mode 100644 index 00000000000..926f23b304f --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/odin_w2_mbedtls_config.h @@ -0,0 +1,10 @@ +#ifndef _ODIN_W2_MBEDTLS_CONFIG_H_ +#define _ODIN_W2_MBEDTLS_CONFIG_H_ + +#define MBEDTLS_ARC4_C +#define MBEDTLS_DES_C +#define MBEDTLS_MD4_C +#define MBEDTLS_MD5_C +#define MBEDTLS_SHA1_C + +#endif /* _ODIN_W2_MBEDTLS_CONFIG_H_ */ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/OdinWiFiInterface.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/OdinWiFiInterface.h new file mode 100644 index 00000000000..091609c402b --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/OdinWiFiInterface.h @@ -0,0 +1,218 @@ +/* ODIN-W2 implementation of WiFiInterface + * Copyright (c) 2016 u-blox Malm AB + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ODIN_WIFI_INTERFACE_H +#define ODIN_WIFI_INTERFACE_H + +#include "WiFiInterface.h" +#include "Callback.h" +#include "mbed_events.h" + +#include "rtos.h" +#include "emac_api.h" +#include "nsapi_types.h" +#include "lwip/netif.h" + +typedef Queue MsgQueue; + +class OdinWiFiInterface; + +struct PrivContext; + +/** OdinWiFiInterface class + * Implementation of the WiFiInterface for the ODIN-W2 module + */ +class OdinWiFiInterface : public WiFiInterface +{ +public: + /** OdinWiFiInterface lifetime + */ + OdinWiFiInterface(); + + OdinWiFiInterface(bool debug); + + ~OdinWiFiInterface(); + + /** Set the WiFi network credentials + * + * @param ssid Name of the network to connect to + * @param pass Security passphrase to connect to the network + * @param security Type of encryption for connection + * (defaults to NSAPI_SECURITY_NONE) + * @return 0 on success, or error code on failure + */ + virtual int set_credentials(const char *ssid, const char *pass, nsapi_security_t security = NSAPI_SECURITY_NONE); + + /** Set the WiFi network channel + * + * @param channel Channel on which the connection is to be made, or 0 for any (Default: 0) + * @return 0 on success, or error code on failure + */ + virtual int set_channel(uint8_t channel); + + /** Start the interface + * + * Attempts to connect to a WiFi network. + * + * @param ssid Name of the network to connect to + * @param pass Security passphrase to connect to the network + * @param security Type of encryption for connection (Default: NSAPI_SECURITY_NONE) + * @param channel Channel on which the connection is to be made, or 0 for any (Default: 0) + * @return 0 on success, or error code on failure + */ + virtual int connect(const char *ssid, + const char *pass, + nsapi_security_t security = NSAPI_SECURITY_NONE, + uint8_t channel = 0); + + /** Start the interface + * + * Attempts to connect to a WiFi network. Requires ssid and passphrase to be set. + * If passphrase is invalid, NSAPI_ERROR_AUTH_ERROR is returned. + * + * @return 0 on success, negative error code on failure + */ + virtual int connect(); + + /** Stop the interface + * + * @return 0 on success, or error code on failure + */ + virtual int disconnect(); + + /** Get the local MAC address + * + * Provided MAC address is intended for info or debug purposes and + * may not be provided if the underlying network interface does not + * provide a MAC address + * + * @return Null-terminated representation of the local MAC address + * or null if no MAC address is available + */ + virtual const char *get_mac_address(); + + /** Get the local IP address + * + * @return Null-terminated representation of the local IP address + * or null if no IP address has been recieved + */ + virtual const char *get_ip_address(); + + /** Get the local network mask + * + * @return Null-terminated representation of the local network mask + * or null if no network mask has been recieved + */ + virtual const char *get_netmask(); + + /** Get the local gateway + * + * @return Null-terminated representation of the local gateway + * or null if no network mask has been recieved + */ + virtual const char *get_gateway(); + + /** Set a static IP address + * + * Configures this network interface to use a static IP address. + * Implicitly disables DHCP, which can be enabled in set_dhcp. + * Requires that the network is disconnected. + * + * @param address Null-terminated representation of the local IP address + * @param netmask Null-terminated representation of the local network mask + * @param gateway Null-terminated representation of the local gateway + * @return 0 on success, negative error code on failure + */ + virtual int set_network(const char *ip_address, const char *netmask, const char *gateway); + + /** Enable or disable DHCP on the network + * + * Enables DHCP on connecting the network. Defaults to enabled unless + * a static IP address has been assigned. Requires that the network is + * disconnected. + * + * @param dhcp True to enable DHCP + * @return 0 on success, negative error code on failure + */ + virtual int set_dhcp(bool dhcp); + + /** Gets the current radio signal strength for active connection + * + * @return Connection strength in dBm (negative value), + * or 0 if measurement impossible + */ + virtual int8_t get_rssi(); + + /** Scan for available networks + * + * If the network interface is set to non-blocking mode, scan will attempt to scan + * for WiFi networks asynchronously and return NSAPI_ERROR_WOULD_BLOCK. If a callback + * is attached, the callback will be called when the operation has completed. + * + * @param ap Pointer to allocated array to store discovered AP + * @param count Size of allocated @a res array, or 0 to only count available AP + * @param timeout Timeout in milliseconds; 0 for no timeout (Default: 0) + * @return Number of entries in @a, or if @a count was 0 number of available networks, negative on error + * see @a nsapi_error + */ + virtual int scan(WiFiAccessPoint *res, unsigned count); + + /** Sets timeout for connection setup. Note that the time for DHCP retrieval is not included. + * + * @param timeout Timeout in ms. Use 0 for waiting forever. The timeout might take up to X sec longer than + * specified since the Wi-Fi driver might need some time to finish and cleanup. + * @return 0 on success, negative error code on failure + */ + virtual void set_timeout(int timeout); + + virtual NetworkStack *get_stack(); + +protected: + +private: + + int connect_async(const char *ssid, + const char *pass, + nsapi_security_t security = NSAPI_SECURITY_NONE, + uint8_t channel = 0, + void *data = NULL, + unsigned timeout = 0); + + bool start(bool debug); + bool stop(); + + char _mac_addr_str[18]; + // Private context to share between C and C++ calls + PrivContext* _priv_context; + const char *_ssid; + const char *_pass; + char _ip_address[IPADDR_STRLEN_MAX]; + char _netmask[IPADDR_STRLEN_MAX]; + char _gateway[IPADDR_STRLEN_MAX]; + nsapi_security_t _security; + uint8_t _channel; + bool _use_dhcp; + int _timeout; + // Event queue when the driver context need to be used + EventQueue* _odin_event_queue; + int32_t target_id; + // Event queue for sending start up and connection events from driver to this class + MsgQueue _event_queue; + // Event queue for sending scan events from driver to this class + MsgQueue _scan_event_queue; +}; + +#endif diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/bt_types.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/bt_types.h new file mode 100644 index 00000000000..9a8b73ae367 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/bt_types.h @@ -0,0 +1,204 @@ +/*--------------------------------------------------------------------------- + * Copyright (c) 2016, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Component : + * File : bt_types.h + * + * Description : Common Bluetooth types + *-------------------------------------------------------------------------*/ + +/** + * @file bt_types.h + * @brief Common Bluetooth types + */ + +#ifndef _BT_TYPES_H_ +#define _BT_TYPES_H_ + +#include "cb_comdefs.h" + +/*=========================================================================== + * DEFINES + *=========================================================================*/ + +#define SIZE_OF_BD_ADDR (6) +#define SIZE_OF_COD (3) +#define SIZE_OF_LINK_KEY (16) +#define SIZE_OF_NAME (248) +#define SIZE_OF_PIN_CODE ((cb_uint8)16) +#define SIZE_OF_LAP (3) +#define SIZE_OF_AFH_LMP_HCI_CHANNEL_MAP (10) +#define CHANNEL_MAP_SIZE (5) +#define SIZE_OF_EXT_INQ_RSP (240) +#define MIN_PASSKEY_VALUE (0) +#define MAX_PASSKEY_VALUE (999999) +#define INVALID_CONN_HANDLE ((TConnHandle)0xFFFF) +#define MAX_ADV_DATA_LENGTH (31) +#define UUID_LENGTH (16) + + +#define PACKET_TYPE_DM1 (0x0008) +#define PACKET_TYPE_DH1 (0x0010) +#define PACKET_TYPE_DM3 (0x0400) +#define PACKET_TYPE_DH3 (0x0800) +#define PACKET_TYPE_DM5 (0x4000) +#define PACKET_TYPE_DH5 (0x8000) + +#define PACKET_TYPE_NO_2_DH1 (0x0002) +#define PACKET_TYPE_NO_3_DH1 (0x0004) +#define PACKET_TYPE_NO_2_DH3 (0x0100) +#define PACKET_TYPE_NO_3_DH3 (0x0200) +#define PACKET_TYPE_NO_2_DH5 (0x1000) +#define PACKET_TYPE_NO_3_DH5 (0x2000) + +#define PACKET_TYPE_ALL (PACKET_TYPE_DM1 | PACKET_TYPE_DH1 | PACKET_TYPE_DM3 | PACKET_TYPE_DH3 | PACKET_TYPE_DM5 | PACKET_TYPE_DH5) + +/*=========================================================================== + * TYPES + *=========================================================================*/ + +typedef cb_int32 int32; +typedef cb_uint32 uint32; +typedef cb_boolean boolean; +typedef cb_int8 int8; +typedef cb_uint8 uint8; +typedef cb_int16 int16; +typedef cb_uint16 uint16; + +typedef cb_uint8 TErrorCode; +typedef cb_uint8 TLinkType; +typedef cb_uint16 TPacketType; +typedef cb_uint16 TConnHandle; + +typedef enum +{ + BT_SECURITY_MODE_1 = 1, + BT_SECURITY_MODE_2, + BT_SECURITY_MODE_3, + BT_SECURITY_MODE_4 + +} TSecurityMode; + +typedef enum +{ + BT_SECURITY_LEVEL_0 = 0, + BT_SECURITY_LEVEL_1, + BT_SECURITY_LEVEL_2, + BT_SECURITY_LEVEL_3, + // Used with security modes 1,2,3 where security level is not applicable + BT_SECURITY_LEVEL_DUMMY = 5, + +} TSecurityLevel; + + +typedef enum +{ + BT_MASTER_SLAVE_POLICY_ALWAYS_MASTER = 0, + BT_MASTER_SLAVE_POLICY_OTHER_SIDE_DECIDE = 1 + +} TMasterSlavePolicy; + +typedef enum +{ + BT_TYPE_CLASSIC = 0, + BT_TYPE_LOW_ENERGY = 1 + +} TBluetoothType; + +typedef enum +{ + BT_PUBLIC_ADDRESS = 0x00, + BT_RANDOM_ADDRESS = 0x01, + +} TAddressType; + +typedef struct +{ + cb_uint8 BdAddress[SIZE_OF_BD_ADDR]; + TAddressType AddrType; + +} TBdAddr; + +typedef struct +{ + cb_uint8 Cod[SIZE_OF_COD]; + +} TCod; + +typedef struct +{ + cb_uint8 LinkKey[SIZE_OF_LINK_KEY]; + +} TLinkKey; + +typedef struct +{ + cb_uint8 Name[SIZE_OF_NAME]; + +} TName; + +typedef struct +{ + cb_uint8 PinCode[SIZE_OF_PIN_CODE]; + +} TPinCode; + +typedef cb_uint32 TPasskey; + +typedef struct +{ + cb_uint8 Lap[SIZE_OF_LAP]; + +} TLap; + +typedef struct +{ + cb_uint8 Data[SIZE_OF_EXT_INQ_RSP]; + +} TExtInqRsp; + +typedef cb_uint8 TAfhLmpHciChannelMap[SIZE_OF_AFH_LMP_HCI_CHANNEL_MAP]; + +typedef struct +{ + uint16 channel[CHANNEL_MAP_SIZE]; +} TChannelMap; + + +typedef enum +{ + BT_ADV_TYPE_ADV = 0x01, + BT_ADV_TYPE_SCAN = 0x00, +} TAdvDataType; + +typedef struct +{ + TAdvDataType type; + cb_uint8 length; + cb_uint8 data[MAX_ADV_DATA_LENGTH]; +} TAdvData; + +typedef struct +{ + cb_uint16 createConnectionTimeout; + cb_uint16 connectionIntervalMin; + cb_uint16 connectionIntervalMax; + cb_uint16 connectionLatency; + cb_uint16 linkLossTimeout; + cb_uint16 scanInterval; + cb_uint16 scanWindow; +} TAclParamsLe; + +#endif /* _BT_TYPES_H */ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_assert.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_assert.h new file mode 100644 index 00000000000..249036572d7 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_assert.h @@ -0,0 +1,94 @@ +/*--------------------------------------------------------------------------- + * Copyright (c) 2016, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Component : Assert + * File : cb_assert.h + * + * Description : ASSERT macro variations. + *-------------------------------------------------------------------------*/ + +#ifndef _CB_ASSERT_H_ +#define _CB_ASSERT_H_ + +#include "cb_comdefs.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/*=========================================================================== + * DEFINES + *=========================================================================*/ + +/* + * Internal platform function declaration. + * Shall never be called directly. + */ + +extern void cbOS_error(cb_int32 errorCode, const cb_char *file, cb_uint32 line); +extern void cbOS_error2(const cb_char *file, cb_uint32 line); + +#ifndef NASSERT + +#ifndef __CB_FILE__ + #define __CB_FILE__ __FILE__ +#endif + +/* + * If the condition (C) evaluates to FALSE, the registered error handler in cbOS + * is called with file and line info before the system is reset. + */ + +#define cb_ASSERT(C) do { if(!(C)){cbOS_error2(__CB_FILE__,__LINE__);} } while(0) + +#define cb_ASSERTC(C) do { if(!(C)){cbOS_error2(__CB_FILE__ , __LINE__);} } while(0) + +#define cb_ASSERT2(C, E) do { if(!(C)){cbOS_error(E, __CB_FILE__ , __LINE__);} } while(0) + +/* + * The registered error handler is called with the file and line info before a system reset. + */ + +#define cb_EXIT(E) do { cbOS_error(((cb_int32)(E)), __CB_FILE__, __LINE__); } while(0) + + +#else + +#define cb_ASSERT(C) + +#define cb_ASSERTC(C) do { if(!(C)){cbWD_systemReset();} } while(0) // Critical assert is never removed. + +#define cb_ASSERT2(C, E) + +#define cb_EXIT(E) do { cbWD_systemReset(); } while(0) + +#endif + + +/*=========================================================================== + * TYPES + *=========================================================================*/ + +#ifdef __cplusplus +} +#endif + +#endif /* _cb_ASSERT_H_ */ + + + + + diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_conn_man.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_conn_man.h new file mode 100644 index 00000000000..4fe40ca6956 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_conn_man.h @@ -0,0 +1,826 @@ +/** + *--------------------------------------------------------------------------- + * Copyright (c) 2016, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Component : Bluetooth Connection Manager + * File : cb_bt_conn_man.h + * + * Description : Bluetooth Connection Management + * + *-------------------------------------------------------------------------*/ + +/** +* @file cb_bt_conn_man.h +* @brief Connection management. Functionality for setting up and tearing +* down Bluetooth connections. Profile services are also enabled +* using this module. + */ + +#ifndef _CB_BT_CONN_MAN_H_ +#define _CB_BT_CONN_MAN_H_ + +#include "cb_comdefs.h" +#include "bt_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*=========================================================================== + * DEFINES + *=========================================================================*/ +#define cbBCM_OK (0) +#define cbBCM_ERROR (-1) +#define cbBCM_ILLEGAL_HANDLE (-2) +#define cbBCM_NOT_IMPLEMENTED (-3) +#define cbBCM_ERROR_DISCONNECTING (-4) +#define cbBCM_ERROR_ALREADY_REGISTERED (-5) +#define cbBCM_ERROR_ALREADY_CONNECTED (-6) + +#define cbBCM_ACL_CONNECTION_FAILED (-7) +#define cbBCM_SERVICE_SEARCH_FAILED (-8) +#define cbBCM_RFCOMM_CONNECTION_FAILED (-9) +#define cbBCM_SPS_CONNECTION_FAILED (-10) +#define cbBCM_ACL_DISCONNECTED (-11) + +#define cbBCM_INVALID_CONNECTION_HANDLE (cb_UINT32_MAX) +#define cbBCM_INVALID_SERVER_CHANNEL (cb_UINT8_MAX) +#define cbBCM_SERVICE_NAME_MAX_LEN (32) + +#define cbBCM_DEV_ID_VENDOR_ID_SRC_BLUETOOTH (0x0001) +#define cbBCM_DEV_ID_VENDOR_ID_SRC_USB (0x0002) +#define cbBCM_CONNECTBLUE_VENDOR_ID (0x0071) + +/*=========================================================================== + * TYPES + *=========================================================================*/ +typedef cb_uint32 cbBCM_Handle; + +typedef enum +{ + cbBCM_INVALID_CONNECTION = 0, + cbBCM_SPP_CONNECTION, // Serial Port Profile + cbBCM_DUN_CONNECTION, // Dial Up Networking Profile + cbBCM_UUID_CONNECTION, // UUID + cbBCM_PAN_CONNECTION, // PAN + + cbBCM_ACL_LE_CONNECTION, // GATT + cbBCM_SPS_CONNECTION // LE connectBlue Serial Service connection +}cbBCM_ConnectionType; + +typedef enum +{ + cbBM_LINK_QUALITY_READY_OK, + cbBM_LINK_QUALITY_READY_ERROR +} cbBCM_LinkQualityEvt; + +/** + * Bluetooth Classic Acl connection parameters + */ +typedef struct +{ + cb_uint16 pageTimeout; /** Length of connection attempt. Default value 5000ms. */ + cb_uint16 packetType; /** Packet types allowed in the connection. By default all packets but 3MBit EDR are allowed. */ + TMasterSlavePolicy masterSlavePolicy; /** Whether master slave switch shall be allowed or not. By default master slave switch is allowed. */ + cb_uint16 clockOffset; /** Clock offset is part in inquiry response. Using this value may result in faster connection setup Default value 0. */ + cb_uint16 linkSupervisionTimeout; /** Link supervision timeout. Default value 2000ms. */ +} cbBCM_ConnectionParameters; + +/** + * Bluetooth Low Energy Acl connection parameters + */ +typedef struct +{ + cb_uint32 createConnectionTimeout; /** Length of connection attempt in ms. Default value 5000ms. */ + cb_uint16 connectionIntervalMin; /** Minimum connection interval in ms. Default value 6ms. */ + cb_uint16 connectionIntervalMax; /** Maximum connection interval in ms. Default value 8ms. */ + cb_uint16 connectionLatency; /** Slave latency. Default value 0. */ + cb_uint16 linkLossTimeout; /** Link loss timeout in ms. Default 2000ms. */ +} cbBCM_ConnectionParametersLe; + +typedef enum +{ + cbBCM_PAN_ROLE_PANU = 0, + cbBCM_PAN_ROLE_NAP, + cbBCM_PAN_ROLE_NONE +}cbBCM_PAN_Role; + +typedef struct +{ + TBdAddr address; + cbBCM_ConnectionType type; + TConnHandle aclHandle; + TBluetoothType btType; + cb_uint8 serverChannel; + cb_uint8 uuid[16] ; + cb_boolean uuidValid; + cb_char serviceName[cbBCM_SERVICE_NAME_MAX_LEN]; +} cbBCM_ConnectionInfo; + +typedef void (*cbBCM_ConnectInd)( + cbBCM_Handle handle, + cbBCM_ConnectionInfo info); + +typedef void (*cbBCM_ConnectEvt)( + cbBCM_Handle handle, + cbBCM_ConnectionInfo info); + +typedef void (*cbBCM_ConnectCnf)( + cbBCM_Handle handle, + cbBCM_ConnectionInfo info, + cb_int32 status); + +typedef void (*cbBCM_DisconnectEvt)( + cbBCM_Handle handle); + +typedef struct +{ + cbBCM_ConnectInd pfConnectInd; + cbBCM_ConnectEvt pfConnectEvt; + cbBCM_ConnectCnf pfConnectCnf; + cbBCM_DisconnectEvt pfDisconnectEvt; +} cbBCM_ConnectionCallback; + +typedef void(*cbBCM_RoleDiscoveryCallback)( + cbBCM_Handle handle, + cb_int8 status, + cb_int8 role); + +typedef void (*cbBCM_RssiCallback)( + cbBCM_Handle handle, + cb_int32 status, + cb_int8 rssi); + +typedef void (*cbBCM_DataEvt)( + cbBCM_Handle handle, + cb_uint8 *pBuf, + cb_uint32 nBytes); + +typedef void (*cbBCM_WriteCnf)( + cbBCM_Handle handle, + cb_int32 status); + +/** + * Set max number of Bluetooth links. + * Not used by application + * @return status TRUE if command was successful + */ +typedef cb_int32 (*cbBCM_SetMaxLinksCmd)(cb_uint32 maxLinks); + +/** + * Check if Handle is free to use + * @return TRUE if handle is free, FALSE otherwise + */ +typedef cb_boolean (*cbBCM_IsHandleFree)(cbBCM_Handle handle); +/** + * Callback to indicate that remaining buffer size needs to be obtained from + * upper layer. The callback returns remaining buffer size and there is + * therefore no response function. + * Not used by application + * @return Number of free bytes in channel data buffer + */ +typedef cb_uint16 (*cbBCM_RemainBufSizeInd)(void); + +typedef struct +{ + cbBCM_ConnectEvt pfConnectEvt; + cbBCM_DisconnectEvt pfDisconnectEvt; + cbBCM_DataEvt pfDataEvt; + cbBCM_WriteCnf pfWriteCnf; + cbBCM_SetMaxLinksCmd pfSetMaxLinks; + cbBCM_RemainBufSizeInd pfRemainBufSizeInd; + cbBCM_IsHandleFree pfIsHandleFree; +} cbBCM_DataCallback; + +typedef void (*cbBCM_ServiceSearchCompleteCallback)(cb_int32 status); + +typedef void (*cbBCM_ServiceSearchSppCallback)( + cb_uint8 serverChannel, + cb_char *pServiceName); + +typedef void (*cbBCM_ServiceSearchDunCallback)( + cb_uint8 serverChannel, + cb_char *pServiceName); + +typedef void (*cbBCM_ServiceSearchDeviceIdCallback)( + cb_uint16 didSpecVersion, + cb_uint16 didVendorId, + cb_uint16 didProductId, + cb_uint16 didProductVersion, + cb_boolean didPrimaryService, + cb_uint16 didVendorIdSource); + +typedef void(*cbBCM_LinkQualityCallback)( + cbBCM_LinkQualityEvt linkQualityEvt, + uint8 linkQuality); + +/*=========================================================================== + * FUNCTIONS + *=========================================================================*/ +/** + * Initialization of connection manager. Called during stack + * initialization. Shall not be called by application. + * + * @return None + */ +extern void cbBCM_init(void); + +/** + * Enable a Bluetooth Serial Port Profile (SPP)service record to + * allow other devices to connect to this device using SPP. + * + * @param pServiceName The name of the service + * @param pServerChannel Pointer to return variable. The server channel is used to identify + * incoming connections. + * @param pConnectionCallback Callback structure for connection management. + * @return If the operation is successful cbBCM_OK is returned. + */ +extern cb_int32 cbBCM_enableServerProfileSpp( + cb_char *pServiceName, + cb_uint8 *pServerChannel, + cbBCM_ConnectionCallback *pConnectionCallback); + +/** + * Enable a Dial Up Networking Profile (DUN)service record to + * allow other devices to connect to this device using DUN. + * + * @param pServiceName The name of the service + * @param pServerChannel Pointer to return variable. The server channel is used to identify + * incoming connections. + * @param pConnectionCallback Callback structure for connection management. + * @return If the operation is successful cbBCM_OK is returned. + */ +extern cb_int32 cbBCM_enableServerProfileDun( + cb_char *pServiceName, + cb_uint8 *pServerChannel, + cbBCM_ConnectionCallback *pConnectionCallback); + +/** + * Enable a service record with an application specific UUID. + * This is used to enable Android and iOS support. + * + * @param pUuid128 The UUID of the service. + * @param pServiceName The name of the service + * @param pServerChannel Pointer to return variable. The server channel is used to identify + * incoming connections. + * @param pConnectionCallback Callback structure for connection management. + * @return If the operation is successful cbBCM_OK is returned. + */ +extern cb_int32 cbBCM_enableServerProfileUuid128( + cb_uint8 *pUuid128, + cb_char *pServiceName, + cb_uint8 *pServerChannel, + cbBCM_ConnectionCallback *pConnectionCallback); + + +/** +* Registers the server role of the local device. If role is cbBCM_PAN_ROLE_NAP a service +* record will be registred in the local service data base. The local device can only act as a +* PAN NAP or Pan user at a time. If PAN NAP is enabled the device will only accept incoming +* connections from PAN users. If PAN user is enabled it is only possible to be connected to +* one remote PAN NAP device. +* +* @param pServiceName The name of the service +* @param role The PAN role of the local device +* @param pConnectionCallback Callback structure for connection management. +* @return If the operation is successful cbBCM_OK is returned. +*/ +extern cb_int32 cbBCM_enableServerProfilePan( + cb_char *pServiceName, + cbBCM_PAN_Role role, + cbBCM_ConnectionCallback *pConnectionCallback); + +/** + * Enable device id service record.The device id service record is a method by which + * Bluetooth devices may provide information that may be used by peer Bluetooth devices + * to find representative icons or load associated support software. + * This information is published as Bluetooth SDP records, and optionally in the + * Extended Inquiry Response. + * @param vendorId Uniquely identifier for the vendor of the device. Used in conjunction with required attribute 0x0205, VendorIDSource, which determines which organization assigned the VendorID value. Note: The Bluetooth Special Interest Group assigns Device ID Vendor ID and the USB Implementer's Forum assigns vendor IDs, either of which can be used for the VendorID value here. Device providers should procure the vendor ID from the USB Implementer's Forum or the Company Identifier from the Bluetooth SIG. The VendorID '0xFFFF' is reserved as the default VendorID when no Device ID Service Record is present in the device. + * @param productId This is intended to distinguish between different products made by the vendor above. These IDs are managed by the vendors themselves. + * @param version A numeric expression identifying the device release number in Binary-Coded Decimal. This is a vendor-assigned field, which defines the version of the product identified by the VendorID and ProductID attributes. This attribute is intended to differentiate between versions of products with identical VendorIDs and ProductIDs. The value of the field is 0xJJMN for version JJ.M.N (JJ - major version number, M - minor version number, N - sub-minor version number); e.g., version 2.1.3 is represented with value 0x0213 and version 2.0.0 is represented with a value of 0x0200. When upward-compatible changes are made to the device, it is recommended that the minor version number be incremented. If incompatible changes are made to the device, it is recommended that the major version number be incremented. + * @param vendorIdSource Organization that assigned the VendorID attribute. Use 0x0001 for Bluetooth SIG assigned Device ID Vendor ID value from the Assigned Numbers document and 0x0002 for USB Implementer's Forum assigned Vendor ID value + * @return If the operation is successful cbBCM_OK is returned. Note that only one device id service record can be registered. + */ +extern cb_int32 cbBCM_enableDeviceIdServiceRecord( + cb_uint16 vendorId, + cb_uint16 productId, + cb_uint16 version, + cb_uint16 vendorIdSource); + +/** +* Set Bluetooth watchdog settings +* +* @param disconnectReset Reset the device on any dropped Bluetooth connection +* @return void +*/ +extern void cbBCM_setBluetoothWatchdogValue(cb_uint32 disconnectReset); + +/** +* Set the packet types to use. Call cbBCM_cmdChangePacketType() +* to start using the new packet types. +* +* @param packetType See packet types in bt_types.h +* @return If the operation is successful cbBCM_OK is returned. +*/ +extern cb_uint32 cbBCM_setPacketType(cb_uint16 packetType); + +/** +* Get BT classic packet type. +* +* @return Allowed packet types returned. +*/ +extern cb_uint16 cbBCM_getPacketType(void); + +/** + * Set max number of Bluetooth classic links. Reconfigures buffer management. + * + * @param maxLinks Max number of Bluetooth classic connections. + * @return If the operation is successful cbBCM_OK is returned. + */ +extern cb_int32 cbBCM_setMaxLinksClassic(cb_uint16 maxLinks); + +/** + * Get max number of Bluetooth classic links. + * + * @return The maximum number of Bluetooth classic links. + */ +extern cb_uint16 cbBCM_getMaxLinksClassic(void); + +/** + * Set max number of Bluetooth Low Energy links. Reconfigures buffer management. + * + * @param maxLinks Max number of Bluetooth Low Energy connections. + * @return If the operation is successful cbBCM_OK is returned. + */ +extern cb_int32 cbBCM_setMaxLinksLE(cb_uint16 maxLinks); + +/** + * Get max number of Bluetooth Low Energy links. + * + * @return The maximum number of Bluetooth Low Energy links. + */ +extern cb_uint16 cbBCM_getMaxLinksLE(void); + +/** + * Initiate a Bluetooth Serial Port Profile connection. + * The connection sequence includes ACL connection setup, SDP service + * search and RFCOMM connection setup. The server channel of the first + * valid SPP service record will be used. A pfConnectCnf callback will + * be received when the connection is complete.The error code in the + * callback is cbBCM_OK if the connection was successfully established. + * The error code in the callback is cbBCM_ERROR if the connection failed. + * @param pAddress Pointer to address of remote device. + * @param pServiceName Name of SPP service. Automatic service search + * is performed to find a service with matching name. + * If set to NULL then the last of the SPP services + * on the remote device will be used. If serverChannel + * parameter is different than cbBCM_INVALID_SERVER_CHANNEL + * this parameter is ignored and the specified server channel + * will be used. + * @param serverChannel RFCOMM server channel that shall be used. Set to + * cbBCM_INVALID_SERVER_CHANNEL to perform automatic + * service search to find the server channel. + * @param pAclParameters Link configuration including link supervision timeout + * and master slave policy. Pass NULL to use default connection + * parameters. + * @param pConnectionCallback Callback structure for connection management. + * @return If the operation is successful the connection handle is returned. If + * not cbBCM_INVALID_CONNECTION_HANDLE is returned. + */ +extern cbBCM_Handle cbBCM_reqConnectSpp( + TBdAddr *pAddress, + cb_char *pServiceName, + cb_uint8 serverChannel, + cbBCM_ConnectionParameters *pAclParameters, + cbBCM_ConnectionCallback *pConnectionCallback); + +/** + * Accept or reject an incoming SPP connection. This is a + * response to a cbBCM_ConnectInd connection indication. + * + * @param handle Connection handle + * @param accept TRUE to accept the incoming connection. + FALSE to reject. + * @return If the operation is successful cbBCM_OK is returned. + */ +extern cb_int32 cbBCM_rspConnectSppCnf( + cbBCM_Handle handle, + cb_boolean accept); + +/** + * Initiate a Bluetooth Dial Up Networking Profile connection. + * The connection sequence includes ACL connection setup, SDP service + * search and RFCOMM connection setup. The server channel of the first + * valid SPP service record will be used. A pfConnectCnf callback will + * be received when the connection is complete.The error code in the + * callback is cbBCM_OK if the connection was successfully established. + * The error code in the callback is cbBCM_ERROR if the connection failed. + * @param pAddress Pointer to address of remote device. + * @param pServiceName Name of DUN service. Automatic service search + * is performed to find a service with matching name. + * If set to NULL then the last of the DUN services + * on the remote device will be used. If serverChannel + * parameter is different than cbBCM_INVALID_SERVER_CHANNEL + * this parameter is ignored and the specified server channel + * will be used. + * @param serverChannel RFCOMM server channel that shall be used. Set to + * cbBCM_INVALID_SERVER_CHANNEL to perform automatic + * service search to find the server channel. + * @param pAclParameters Link configuration including link supervision timeout + * and master slave policy. Pass NULL to use default connection + * parameters. + * @param pConnectionCallback Callback structure for connection management. + * @return If the operation is successful the connection handle is returned. If + * not cbBCM_INVALID_CONNECTION_HANDLE is returned. + */ +extern cbBCM_Handle cbBCM_reqConnectDun( + TBdAddr *pAddress, + cb_char *pServiceName, + cb_uint8 serverChannel, + cbBCM_ConnectionParameters *pAclParameters, + cbBCM_ConnectionCallback *pConnectionCallback); + +/** + * Accept or reject an incoming DUN connection. This is a + * response to a cbBCM_ConnectInd connection indication. + * + * @param handle Connection handle + * @param accept TRUE to accept the incoming connection. + FALSE to reject. + * @return If the operation is successful cbBCM_OK is returned. + */ +extern cb_int32 cbBCM_rspConnectDunCnf( + cbBCM_Handle handle, + cb_boolean accept); + +/** + * Initiate a Bluetooth Serial Port Profile connection with a specific UUID. + * The connection sequence includes ACL connection setup, SDP service + * search and RFCOMM connection setup. The server channel of the first + * valid SPP service record with the specified UUID will be used. A pfConnectCnf + * callback will be received when the connection is complete.The error code in the + * callback is cbBCM_OK if the connection was successfully established. + * The error code in the callback is cbBCM_ERROR if the connection failed. + * @param pAddress Pointer to address of remote device. + * @param pUuid Pointer to uuid of the remote service. + * @param pServiceName Name of SPP service. Automatic service search + * is performed to find a service with matching name. + * If set to NULL then the last of the SPP services + * on the remote device will be used. If serverChannel + * parameter is different than cbBCM_INVALID_SERVER_CHANNEL + * this parameter is ignored and the specified server channel + * will be used. + * @param serverChannel RFCOMM server channel that shall be used. Set to + * cbBCM_INVALID_SERVER_CHANNEL to perform automatic + * service search to find the server channel. + * @param pAclParameters Link configuration including link supervision timeout + * and master slave policy. Pass NULL to use default connection + * parameters. + * @param pConnectionCallback Callback structure for connection management. + * @return If the operation is successful the connection handle is returned. If + * not cbBCM_INVALID_CONNECTION_HANDLE is returned. + */ +extern cbBCM_Handle cbBCM_reqConnectUuid( + TBdAddr *pAddress, + cb_uint8 *pUuid, + cb_char *pServiceName, + cb_uint8 serverChannel, + cbBCM_ConnectionParameters *pAclParameters, + cbBCM_ConnectionCallback *pConnectionCallback); + +/** + * Accept or reject an incoming SPP connection. This is a + * response to a cbBCM_ConnectInd connection indication. + * + * @param handle Connection handle + * @param accept TRUE to accept the incoming connection. + FALSE to reject. + * @return If the operation is successful cbBCM_OK is returned. + */ +extern cb_int32 cbBCM_rspConnectUuidCnf( + cbBCM_Handle handle, + cb_boolean accept); + +/** +* Initiate a Bluetooth PAN Profile connection. +* The connection sequence includes ACL connection setup and L2CAP connection setup. +* A pfConnectCnf callback will be received when the connection is complete. +* The error code in the*callback is cbBCM_OK if the connection was successfully established. +* The error code in the callback is cbBCM_ERROR if the connection failed. +* +* @param pAddress Pointer to address of remote device. +* @param remoteRole PAN role of the remote device +* @param localRole PAN role of the local device +* @param pAclParams Link configuration including link supervision timeout +* and master slave policy. Pass NULL to use default connection +* parameters. +* @param pConnectionCallback Callback structure for connection management. +* @return If the operation is successful the connection handle is returned. If +* not cbBCM_INVALID_CONNECTION_HANDLE is returned. +*/ +extern cbBCM_Handle cbBCM_reqConnectPan( + TBdAddr *pAddress, + cbBCM_PAN_Role remoteRole, + cbBCM_PAN_Role localRole, + cbBCM_ConnectionParameters *pAclParams, + cbBCM_ConnectionCallback *pConnectionCallback); + +/** +* Accept or reject an incoming PAN connection. This is a +* response to a cbBCM_ConnectInd connection indication. +* +* @param handle Connection handle +* @param accept TRUE to accept the incoming connection. +* FALSE to reject. +* @return If the operation is successful cbBCM_OK is returned. +*/ +extern cb_int32 cbBCM_rspConnectPan( + cbBCM_Handle handle, + cb_boolean accept); + +/** + * Enable Serial Port Service. + * When the device is acting Bluetooth Low Energy peripheral the Serial + * Port Service will be added to the attribute table. + * + * @param pConnectionCallback Callback structure for connection management. + * @return If the operation is successful cbBCM_OK is returned. + * @param pConnectionCallback Callback structure for connection management. + * @return If the operation is successful cbBCM_OK is returned. + */ +extern cb_int32 cbBCM_enableSps( + cbBCM_ConnectionCallback *pConnectionCallback); + +/** + * Enable or disable Bluetooth low energy auto connect. + * When the device is acting as central and auto connect is enabled it runs + * passive scan and initiates an ACL connection to devices that performs + * directed advertisements. + * The serial port service muast be enabled using cbBCM_enableSps() before + * auto connect is enabled. + * If SPS is enabled the SPS Gatt client will initiate a SPS connection + * attempt on the ACL connection. + * When the device is acting peripheral this functionality is inactive. + * + * @param enable Set to TRUE to enable. Set to false to disable. + * @return If the operation is successful cbBCM_OK is returned. + */ +extern cb_int32 cbBCM_autoConnect( + cb_boolean enable); + +/** + * Initiate a Serial Port Service connection. + * The connection sequence includes ACL connection setup , GATT service + * search and Serial Port Service connection setup. A connect confirm + * callback will be received when the connection is complete. The error + * code in the callback is cbBCM_OK if the connection was successfully established. + * The error code in the callback is cbBCM_ERROR if the connection failed. + * The serial port service must be enabled using cbBCM_enableSps() before + * auto connect request is made.. + * @param pAddress Address of remote device. + * @param pAclLeParams Link configuration parameters + * @param pConnectionCallback Callback structure for connection management. + * @return If the operation is successful the connection handle is returned. If + * not cbBCM_INVALID_CONNECTION_HANDLE is returned. + */ +extern cbBCM_Handle cbBCM_reqConnectSps( + TBdAddr *pAddress, + cbBCM_ConnectionParametersLe *pAclLeParams, + cbBCM_ConnectionCallback *pConnectionCallback); + +/** + * Accept or reject an incoming SPS connection. This is a + * response to a cbBCM_ConnectInd connection indication. + * @param handle Connection handle + * @param accept TRUE to accept the incoming connection. + * FALSE to reject. + * @return If the operation is successful cbBCM_OK is returned. + */ +extern cb_int32 cbBCM_rspConnectSpsCnf( + cbBCM_Handle handle, + cb_boolean accept); + +/** + * Initiate a Bluetooth low energy ACL connection. The ACL connection is + * intended for GATT communication. + * A connect confirm callback will be received when the connection is complete. The error + * code in the callback is cbBCM_OK if the connection was successfully established. + * The error code in the callback is cbBCM_ERROR if the connection failed. + * @param pAddress Address of remote device. + * @param pAclLeParams Link configuration parameters + * @param pConnectionCallback Callback structure for connection management. + * @return If the operation is successful the connection handle is returned. If + * not cbBCM_INVALID_CONNECTION_HANDLE is returned. + */ +extern cbBCM_Handle cbBCM_reqConnectAclLe( + TBdAddr *pAddress, + cbBCM_ConnectionParametersLe *pAclLeParams, + cbBCM_ConnectionCallback *pConnectionCallback); + +/** + * @brief Initiate disconnection of active connection. A disconnect event + * will be received when the disconnection is complete. + * + * @param handle Connection handle + * @return If the operation is successful cbBCM_OK is returned. + */ +extern cb_int32 cbBCM_cmdDisconnect( + cbBCM_Handle handle); + +/** + * @brief Initiate a Serial Port Profile (SPP) service search to find server channel and service name. + * @param pAddress Address of device on which service search shall be performed. + * @param maxServices Max number of services + * @param pCallback Callback used to notify each found service record + * @param pCompleteCallback Callback used to notify that the search is completed + * @return If the operation is successful initiated cbBCM_OK is returned. + */ +extern cb_int32 cbBCM_reqServiceSearchSpp( + TBdAddr *pAddress, + cb_uint16 maxServices, + cbBCM_ServiceSearchSppCallback pCallback, + cbBCM_ServiceSearchCompleteCallback pCompleteCallback); + +/** + * @brief Initiate a Dial Up Networking (DUN) service search to find server channel and service name. + * @param pAddress Address of device on which service search shall be performed. + * @param maxServices Max number of services + * @param pCallback Callback used to notify each found service record + * @param pCompleteCallback Callback used to notify that the search is completed + * @return If the operation is successful initiated cbBCM_OK is returned. + */ +extern cb_int32 cbBCM_reqServiceSearchDun( + TBdAddr *pAddress, + cb_uint16 maxServices, + cbBCM_ServiceSearchSppCallback pCallback, + cbBCM_ServiceSearchCompleteCallback pCompleteCallback); + +/** + * @brief Initiate a UUID service search to find server channel and service name. + * @param pAddress Address of device on which service search shall be performed. + * @param pUuid128 128 UUID to search for. + * @param maxServices Max number of services + * @param pCallback Callback used to notify each found service record + * @param pCompleteCallback Callback used to notify that the search is completed + * @return If the operation is successful initiated cbBCM_OK is returned. + */ +extern cb_int32 cbBCM_reqServiceSearchUuid( + TBdAddr *pAddress, + const cb_uint8 *pUuid128, + cb_uint16 maxServices, + cbBCM_ServiceSearchSppCallback pCallback, + cbBCM_ServiceSearchCompleteCallback pCompleteCallback); + +/** + * @brief Initiate a Device information service search. + * @param pAddress Address of device on which service search shall be performed. + * @param maxServices Max number of services + * @param pCallback Callback used to notify each found service record + * @param pCompleteCallback Callback used to notify that the search is completed + * @return If the operation is successful initiated cbBCM_OK is returned. + */ +cb_int32 cbBCM_reqServiceSearchDeviceId( + TBdAddr *pAddress, + cb_uint16 maxServices, + cbBCM_ServiceSearchDeviceIdCallback pCallback, + cbBCM_ServiceSearchCompleteCallback pCompleteCallback); + +/** +* @brief Get local Master/Slave role in an active connection. +* @param bdAddr address to the connection +* @param roleDiscoveryCallback Callback function used to notify the role +* @return If the operation is successful cbBCM_OK is returned. +*/ +extern cb_int32 cbBCM_RoleDiscovery( + TBdAddr bdAddr, + cbBCM_RoleDiscoveryCallback roleDiscoveryCallback); + +/** + * @brief Get current Received Signal Strength Indication (RSSI) + * of an active connection. + * @param bdAddress bt address to the connected device + * @param rssiCallback Callback function used to notify the rssi value + * @return If the operation is successful cbBCM_OK is returned. + */ +extern cb_int32 cbBCM_getRssi( + TBdAddr bdAddress, + cbBCM_RssiCallback rssiCallback); + +/* +* Read the LinkQuality . +* @return status as int32. +* @cbBM_LinkQualityCallback is used to provide result. +*/ +extern cb_int32 cbBCM_GetLinkQuality(TBdAddr bdAddr, cbBCM_LinkQualityCallback linkQualityCallback); + +/** + * @brief Change the packet types currently used for an active Bluetooth + * Classic connection. + * @param handle Connection handle + * @return If the operation is successful cbBCM_OK is returned. + */ +extern cb_int32 cbBCM_cmdChangePacketType( + cbBCM_Handle handle); + +/** + * @brief Get the current connection parameters for an active Bluetooth + * Low Energy ACL connection. + * @param handle Connection handle + * @param pConnectionInterval Connection interval + * @param pConnectionLatency Connection latency + * @param pLinkSupervisionTmo Link supervision timeout + * @return If the update is successfully initiated cbBCM_OK is returned. + */ +extern cb_int32 cbBCM_getConnectionParams( + cbBCM_Handle handle, + cb_uint16 *pConnectionInterval, + cb_uint16 *pConnectionLatency, + cb_uint16 *pLinkSupervisionTmo); + +/** + * @brief Update connection parameters for an active Bluetooth + * Low Energy ACL connection. + * @param handle Connection handle + * @param pAclLeParams New Link configuration parameters + * @return If the update is successfully initiated cbBCM_OK is returned. + */ +extern cb_int32 cbBCM_updateConnectionParams( + cbBCM_Handle handle, + cbBCM_ConnectionParametersLe *pAclLeParams); + +/** + * Register a GATT device information service. The device information service + * is used by remote devices to get for example the model and firmware version + * of this device. + * Note that an application easily can define and register its own device information + * service if other characteristics are required. + * @param pManufacturer String defining the manufacturer. + * @param pModel String defining the device model. + * @param pFwVersion String defining the firmware version. + * @param startIndex Start index of the attribute database for the device info service. + * Note that this must not change during the lifetime of the product. + * @return If the operation is successful cbBCM_OK is returned. + */ +extern cb_int32 cbBCM_enableDevInfoService( + const cb_char *pManufacturer, + const cb_char *pModel, + const cb_char *pFwVersion, + cb_uint16 startIndex); + +/** + * @brief Get the address of the remote device on an + * active connection + * + * @param handle Connection handle + * @return Address of the remote device. + */ +extern TBdAddr cbBCM_getAddress(cbBCM_Handle handle); + +/** + * @brief Register a data manager for a type of connections. Shall not be + * used by the application. Only used by data managers. + * + * @param type Connection type. + * @param pDataCallback Data callback + * @return If the operation is successful cbBCM_OK is returned. + */ +extern cb_int32 cbBCM_registerDataCallback( + cbBCM_ConnectionType type, + cbBCM_DataCallback *pDataCallback); + +/** + * @brief Get the protocol handle for an active connection. Shall not be used + * by the application. Only used by data managers. + * + * @param handle Connection handle + * @return If the operation is not successful cbBCM_INVALID_CONNECTION_HANDLE + * is returned. If the operation is successful the protocol handle is + * returned. + */ +extern cbBCM_Handle cbBCM_getProtocolHandle( + cbBCM_Handle handle); + +#ifdef __cplusplus +} +#endif + +#endif /* _CB_BT_CONN_MAN_H_ */ + + + + + + diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_man.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_man.h new file mode 100644 index 00000000000..240081d526e --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_man.h @@ -0,0 +1,625 @@ +/* + *--------------------------------------------------------------------------- + * Copyright (c) 2016, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Component : Bluetooth Manager + * File : cb_bt_man.h + * + * Description : General Bluetooth functionality + * + *-------------------------------------------------------------------------*/ + +/** + * @file cb_bt_man.h + * + * @brief General Bluetooth functionality. This includes initialization of + * the Bluetooth radio and stack, handling properties such as device + * name, scanning for other devices using inquiry or Bluetooth Low Energy + * scan and more. + */ + +#ifndef _CB_BT_MAN_H_ +#define _CB_BT_MAN_H_ + +#include "cb_comdefs.h" +#include "bt_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*=========================================================================== +* DEFINES +*=========================================================================*/ +#define cbBM_OK (0) +#define cbBM_ERROR (-1) +#define cbBM_MAX_OUTPUT_POWER (127) + +#define cbBM_ADV_CHANNEL_MAP_CH_37_BIT 0x01 +#define cbBM_ADV_CHANNEL_MAP_CH_38_BIT 0x02 +#define cbBM_ADV_CHANNEL_MAP_CH_39_BIT 0x04 +#define cbBM_ADV_CHANNEL_MAP_ALL (cbBM_ADV_CHANNEL_MAP_CH_37_BIT | cbBM_ADV_CHANNEL_MAP_CH_38_BIT | cbBM_ADV_CHANNEL_MAP_CH_39_BIT) +/*=========================================================================== +* TYPES +*=========================================================================*/ + +extern const TBdAddr invalidBdAddress; + +typedef enum +{ + cbBM_INQUIRY_GENERAL = 0, + cbBM_INQUIRY_LIMITED = 1, +} cbBM_InquiryType; + +typedef void (*cbBM_InquiryEventCallback)( + TBdAddr *pBdAddress, + TCod cod, + cb_uint16 clockOffset, + cb_int8 rssi, + cb_char *pName, + TExtInqRsp* pExtInqRsp, + cb_uint8 length); + +typedef void (*cbBM_InquiryCompleteCallback)( + cb_int32 status); + +typedef void (*cbBM_RemoteNameCallback)( + TBdAddr *pBdAddress, + TName *pName, + cb_int32 status); + +typedef enum +{ + cbBM_DEVICE_DISCOVERY_LE_ALL = 0, + cbBM_DEVICE_DISCOVERY_LE_GENERAL, + cbBM_DEVICE_DISCOVERY_LE_LIMITED, + cbBM_DEVICE_DISCOVERY_LE_ALL_NO_FILTERING +} cbBM_DeviceDiscoveryTypeLe; + +typedef enum +{ + cbBM_ACTIVE_SCAN = 0, + cbBM_PASSIVE_SCAN = 1 +} cbBM_ScanTypeLe; + + +typedef void (*cbBM_DeviceDiscoveryLeEventCallback)( + TBdAddr *pBdAddress, + cb_int8 rssi, + cb_char *pName, + TAdvData *pAdvData); + +typedef void (*cbBM_DeviceDiscoveryLeCompleteCallback)( + cb_int32 status); + +typedef enum +{ + cbBM_DISCOVERABLE_MODE_NONE = 0, + cbBM_DISCOVERABLE_MODE_LIMITED = 1, + cbBM_DISCOVERABLE_MODE_GENERAL = 2, +} cbBM_DiscoverableMode; + +typedef enum +{ + cbBM_CONNECTABLE_MODE_NOT_CONNECTABLE = 0, + cbBM_CONNECTABLE_MODE_CONNECTABLE +} cbBM_ConnectableMode; + +typedef enum +{ + cbBM_DISCOVERABLE_MODE_LE_NONE = 0, + cbBM_DISCOVERABLE_MODE_LE_LIMITED = 1, + cbBM_DISCOVERABLE_MODE_LE_GENERAL = 2, +} cbBM_DiscoverableModeLe; + +typedef enum +{ + cbBM_CONNECTABLE_MODE_LE_NOT_CONNECTABLE = 0, + cbBM_CONNECTABLE_MODE_LE_CONNECTABLE +} cbBM_ConnectableModeLe; + +typedef enum +{ + cbBM_SET_CHANNEL_MAP_CNF_POS, + cbBM_SET_CHANNEL_MAP_CNF_NEG, +} cbBM_ChannelMapEvt; + +typedef void (*cbBM_ChannelMapCallb)( + cbBM_ChannelMapEvt chMapEvt, + TChannelMap *pChMap); + +typedef void (*cbBM_InitComplete)(void); + +typedef enum +{ + cbBM_LE_ROLE_DISABLED = 0, + cbBM_LE_ROLE_CENTRAL = 1, + cbBM_LE_ROLE_PERIPHERAL = 2, +} cbBM_LeRole; + +/** + * Bluetooth Manager initialization parameters. +*/ +typedef struct +{ + TBdAddr address; /** Bluetooth address that shall be assigned to controller. Pass invalidBdAddress to use controller default address*/ + cbBM_LeRole leRole; /** Bluetooth low energy role */ + cb_int8 maxOutputPower; /** Maximum output power. */ + cb_uint32 nvdsStartIdLinkKeysClassic; /** Start id for CLASSIC link keys storage in NVDS. */ + cb_uint32 maxLinkKeysClassic; /** Max number of CLASSIC link keys */ + cb_uint32 nvdsStartIdLinkKeysLe; /** Start id for BLE link keys storage in NVDS. */ + cb_uint32 maxLinkKeysLe; /** Max number of link keys BLE*/ +} cbBM_InitParams; + +/*=========================================================================== + * FUNCTIONS + *=========================================================================*/ + +/** + * Initialize the Bluetooth Radio, the connectBlue Embedded Bluetooth + * Stack and the Bluetooth Manager. + * The init complete callback is used to notify when the initialization is + * complete. During initialization default values are set for all properties. + * The application shall set desired values for the main Bluetooth properties + * such as local name after the initialization is complete. After init the device + * is non discoverable and non connectable. + * + * @param pInitParameters Init parameters + * @param initCompleteCallback Callback used to notify when the initialization is complete. + * @return None + */ +extern void cbBM_init( + cbBM_InitParams *pInitParameters, + cbBM_InitComplete initCompleteCallback); + +/** + * This function sets all default parameters for LE. + * This function needs to be called before the cbBM_init. +*/ +extern void cbBM_setDefaultValuesLeParams(void); + +/** + * Get the current Bluetooth address of the device. + * @param pAddress Pointer to return variable. + * @return if the operation is successful cbBM_OK is returned. + */ +extern cb_int32 cbBM_getLocalAddress(TBdAddr *pAddress); + +/** + * Set local name + * This sets the Bluetooth Classic device name as well as the Bluetooth Low + * Energy device name. Inquiry and advertising is updated. + * @param pName The new local name. + * @return If the operation is successful cbBM_OK is returned. + */ +extern cb_int32 cbBM_setLocalName(cb_char* pName); + +/** + * Get local name. + * Get the current local name. + * @param pName Pointer to return variable. + * @param length Max length of the name string. + * @return If the operation is successful cbBM_OK is returned. + */ +extern cb_int32 cbBM_getLocalName( + cb_char *pName, + cb_uint32 length); + +/** + * Set class of device + * @param cod New Class of Device. + * @return If the operation is successful cbBM_OK is returned. + */ +extern cb_int32 cbBM_setCod(TCod cod); + +/** + * Get current class of device. + * @param pCod Pointer to return variable. + * @return If the operation is successful cbBM_OK is returned. + */ +extern cb_int32 cbBM_getCod(TCod* pCod); + +/** + * Set discoverable mode for Bluetooth Classic. + * @param discoverable New discoverable mode. + * @return If the operation is successful cbBM_OK is returned. + */ +extern cb_int32 cbBM_setDiscoverableMode(cbBM_DiscoverableMode discoverable); + +/** + * Get current discoverable mode for Bluetooth Classic. + * @param pDiscoverable Pointer to return variable. + * @return If the operation is successful cbBM_OK is returned. + */ +extern cb_int32 cbBM_getDiscoverableMode(cbBM_DiscoverableMode *pDiscoverable); + +/** + * Set connectable mode for Bluetooth Classic. + * @param connectable Connectable mode + * @return If the operation is successful cbBM_OK is returned. + */ +extern cb_int32 cbBM_setConnectableMode(cbBM_ConnectableMode connectable); + +/** + * Get current connectable mode for Bluetooth Classic + * @param pConnectable Pointer to return variable. + * @return If the operation is successful cbBM_OK is returned. + */ +extern cb_int32 cbBM_getConnectableMode(cbBM_ConnectableMode *pConnectable); + +/** + * Set master slave policy for Bluetooth Classic + * @param policy Master slave policy + * @return If the operation is successful cbBM_OK is returned. + */ +extern cb_int32 cbBM_setMasterSlavePolicy(TMasterSlavePolicy policy); + +/** + * Set master slave policy for Bluetooth Classic + * @param pPolicy Pointer to return variable + * @return If the operation is successful cbBM_OK is returned. + */ +extern cb_int32 cbBM_getMasterSlavePolicy(TMasterSlavePolicy *pPolicy); + +/** + * Set default channel map for Bluetooth Classic. Used to exclude channels + * from usage. + * Request an update of which channels shall be used by adaptive frequency hopping. + * typically this is not needed since the Bluetooth is very good at select which + * channels to use. + * @param channelMap Channel map. Note that at least 20 channels must be enabled. + * @param channelMapCallback Callback used to notify if the channel map + * is accepted by the radio. + * @return If the operation is successfully initiated cbBM_OK is returned. + */ +extern cb_int32 cbBM_setAfhChannelMap( + TChannelMap channelMap, + cbBM_ChannelMapCallb channelMapCallback); + +/** + * Get the default channel map. + * @param pMap Pointer to return variable. + * @return If the operation is successful cbBM_OK is returned. + */ +extern cb_int32 cbBM_getAfhChannelMap(TChannelMap *pMap); + +/** + * Start an Bluetooth inquiry. + * The event callback is called for every device that is found during inquiry. + * @param type Type of inquiry. + * @param inquiryLengthInMs Length of inquiry in ms + * @param eventCallback Callback used to notify each found device + * @param completeCallback Callback used to notify when the inquiry is completed + * @return If the inquiry is successfully started cbBM_OK is returned + */ +extern cb_int32 cbBM_inquiry( + cbBM_InquiryType type, + cb_uint32 inquiryLengthInMs, + cbBM_InquiryEventCallback eventCallback, + cbBM_InquiryCompleteCallback completeCallback); + +/** + * Cancel an ongoing inquiry. + * @return If the operation is successful cbBM_OK is returned. + */ +extern cb_int32 cbBM_inquiryCancel(void); + +/** + * Perform a remote name request for Bluetooth Classic. + * @param pAddress Pointer to address of remote device. + * @param clockOffset Clock offset. Can be found in inquiry response. + * @param pageTimeout Page timeout in ms (Length of connection attempt). + * @param remoteNameCallb Callback used to notify the the completion of the + * name request. + * @return If the operation is successfully initiated cbBM_OK is returned. + */ +extern cb_int32 cbBM_remoteName( + TBdAddr *pAddress, + cb_uint16 clockOffset, + cb_uint16 pageTimeout, + cbBM_RemoteNameCallback remoteNameCallb); + +/** + * Add service class to inquiry response data. Typically + * not used by the application. + * @param uuid16 The UUID to add + * @return If the operation is successful cbBM_OK is returned. + */ +extern cb_int32 cbBM_addServiceClass(cb_uint16 uuid16); + +/** + * Check if service class is already registered. + * @param uuid16 The UUID to check + * @return TRUE If the ServiceClass is registered, FALSE otherwise. + */ +cb_boolean cbBM_isServiceClassRegistered(cb_uint16 uuid16 ); + +/** + * Add service class to inquiry response data. Typically + * not used by the application. + * @param uuid128 The UUID to add. + * @return If the operation is successful cbBM_OK is returned. + */ +extern cb_int32 cbBM_add128BitsServiceClass(cb_uint8* uuid128); + +/** + * Set maximum Bluetooth Classic ACL links the stack + * shall allow. + * @param maxConnections Max ACL connections. + * @return If the operation is successful cbBM_OK is returned. + */ +extern cb_int32 cbBM_setMaxConnections(cb_uint32 maxConnections); + +/** + * Get controller version string. + * @return Pointer to NULL terminated version string. + */ +extern cb_char* cbBM_getControllerVersionString(void); + +/** + * Get stack version string. + * @return Pointer to NULL terminated version string. + */ +extern cb_char* cbBM_getStackVersionString(void); + +/** + * Get current Bluetooth Low Energy Role. + * @return Current Bluetooth Low Energy role. + */ +extern cbBM_LeRole cbBM_getLeRole(void); + +/** + * Set Bluetooth Low Energy discoverable mode. + * Only valid for peripheral role. + * @param discoverableMode Bluetooth Low Energy discoverable mode + * @return cbBM_OK is returned on success. + */ +extern cb_int32 cbBM_setDiscoverableModeLe( + cbBM_DiscoverableModeLe discoverableMode); + +/** + * Get Bluetooth Low Energy discoverable mode. + * @param pDiscoverableMode Pointer to return variable + * @return cbBM_OK is returned on success. + */ +extern cb_int32 cbBM_getDiscoverableModeLe( + cbBM_DiscoverableModeLe *pDiscoverableMode); + +/** + * Set Bluetooth Low Energy connectable mode. + * Only valid for peripheral role. + * @param connectable Set to TRUE to accept connections + * Set to FALSE to reject incoming connections + * @return cbBM_OK is returned on success. + */ +extern cb_int32 cbBM_setConnectableModeLe( + cbBM_ConnectableModeLe connectable); + +/** + * Get current connectable mode. + * @param pConnectable Pointer to return variable. + * @return cbBM_OK is returned on success. + */ +extern cb_int32 cbBM_getConnectableModeLe( + cbBM_ConnectableModeLe* pConnectable); + +/** + * Set custom advertising data. + * Only valid for peripheral role. + * @param pAdvData Pointer to advertising data. + * @return cbBM_OK is returned on success. + */ +extern cb_int32 cbBM_setCustomAdvData( + TAdvData* pAdvData); + +/** + * Set custom scan response data. + * Only valid for peripheral role. + * @param pScanRspData Pointer to scan response data. + * @return cbBM_OK is returned on success. + */ +extern cb_int32 cbBM_setCustomScanRspData( + TAdvData* pScanRspData); + +/** + * Set current scan response data. + * Only valid for peripheral role. + * @param pAdvData Pointer to scan response data. + * @return cbBM_OK is returned on success. + */ +extern cb_int32 cbBM_getAdvData( + TAdvData* pAdvData); + +/** + * Get current scan response data. + * Only valid for peripheral role. + * @param pScanRspData Pointer to scan response data. + * @return cbBM_OK is returned on success. + */ + extern cb_int32 cbBM_getScanRspData( + TAdvData* pScanRspData); + +/** + * Set default Bluetooth Low Energy connection parameters. + * Note that setting the connection parameters does not change + * the parameters on active connections. + * @param createConnectionTimeout Default timeout connection for connection attempts + * @param connIntervalMin Default connection min interval + * @param connIntervalMax Default connection max interval + * @param connLatency Default connection latency + * @param linklossTmo Default link loss timeout + * @return cbBM_OK is returned on success. + */ + cb_int32 cbBM_setAutoConnectionParams( + cb_uint32 createConnectionTimeout, + cb_uint16 connIntervalMin, + cb_uint16 connIntervalMax, + cb_uint16 connLatency, + cb_uint16 linklossTmo); + +/** + * Get default Bluetooth Low Energy connection parameters. + * @param pCreateConnectionTimeout Default create connection timeout + * @param pConnIntervalMin Default connection min interval + * @param pConnIntervalMax Default connection max interval + * @param pConnLatency Default connection latency + * @param pLinklossTmo Default link loss timeout + * @return cbBM_OK is returned on success. + */ + cb_int32 cbBM_getAutoConnectionParams( + cb_uint32 *pCreateConnectionTimeout, + cb_uint16 *pConnIntervalMin, + cb_uint16 *pConnIntervalMax, + cb_uint16 *pConnLatency, + cb_uint16 *pLinklossTmo); + +/** + * Get Bluetooth Low Energy scan parameters. + * @param pScanInterval Scan interval + * @param pScanWindow Scan window + * @return cbBM_OK is returned on success. + */ +extern cb_int32 cbBM_getAutoconnScanParams( + cb_uint16 *pScanInterval, + cb_uint16 *pScanWindow); + +/** + * Start an Bluetooth Low Energy device discovery. + * The event callback is called for every device that is found during inquiry. + * @param type Type of discovery. + * @param discoveryLength Length of inquiry in seconds. + * @param scanType Active or passive scan + * @param eventCallback Callback used to notify each found device + * @param completeCallback Callback used to notify when the inquiry is completed. + * @return If the device discovery is successfully started cbBM_OK is returned. + */ +extern cb_int32 cbBM_deviceDiscoveryLe( + cbBM_DeviceDiscoveryTypeLe type, + cb_uint16 discoveryLength, + cbBM_ScanTypeLe scanType, + cbBM_DeviceDiscoveryLeEventCallback eventCallback, + cbBM_DeviceDiscoveryLeCompleteCallback completeCallback); + +/** + * Cancel an ongoing device discovery. + * @return If the operation is successful cbBM_OK is returned. + */ +extern cb_int32 cbBM_deviceDiscoveryLeCancel(void); + +/** + * Perform a remote name request for Bluetooth Low Energy. + * @param pAddress Pointer to address of remote device. + * @param remoteNameCallback Callback used to notify the the completion of the + * name request. + * @return If the operation is successfully initiated cbBM_OK is returned. + */ +extern cb_int32 cbBM_remoteNameLe(TBdAddr *pAddress, + cbBM_RemoteNameCallback remoteNameCallback); + + + +/* + * Add 128bit service UUID to scan response data. Typically + * not used by the application. + * @param uuid128 Pointer to 128bit UUID + * @return If the operation is successfully initiated cbBM_OK is returned. + */ +extern cb_int32 cbBM_add128BitsServiceClassLe(cb_uint8* uuid128); + +/* + * Read the used max tx power . + * @return max tx power level as int8. + */ +extern cb_int8 cbBM_getMaxTxPower(void); + +/* +* Read the connection parameters for Bond. +* @return cbCMLE_AclParamsLe pointer to values. +*/ +void cbBM_getBondParameters(TAclParamsLe* bondParams); +/* +* Read the connection parameters for connection. +* @return cbCMLE_AclParamsLe pointer to values. +*/ +void cbBM_getConnectParameters(TAclParamsLe* aclParams); +/* +* Read the connection parameters for remote name request. +* @return cbCMLE_AclParamsLe pointer to values. +*/ +void cbBM_getRemoteNameReqParameters(TAclParamsLe* aclParams); + +/* +* Sets the LE parameter. +* @newValue new parameter value. +*/ +extern cb_int32 cbBM_setAdvertisingIntervalMin(cb_uint16 newValue); +extern cb_int32 cbBM_setAdvertisingIntervalMax(cb_uint16 newValue); +extern cb_int32 cbBM_setAdvChannelmap(cb_uint16 newValue); +extern cb_int32 cbBM_setConnectConnIntervalMin(cb_uint16 newValue); +extern cb_int32 cbBM_setConnectConnIntervalMax(cb_uint16 newValue); +extern cb_int32 cbBM_setConnectConnLatency(cb_uint16 newValue); +extern cb_int32 cbBM_setConnectLinklossTmo(cb_uint16 newValue); +extern cb_int32 cbBM_setConnectCreateConnTmo(cb_uint16 newValue); +extern cb_int32 cbBM_setConnectScanInterval(cb_uint16 newValue); +extern cb_int32 cbBM_setConnectScanWindow(cb_uint16 newValue); +extern cb_int32 cbBM_setBondConnIntervalMin(cb_uint16 newValue); +extern cb_int32 cbBM_setBondConnIntervalMax(cb_uint16 newValue); +extern cb_int32 cbBM_setBondConnLatency(cb_uint16 newValue); +extern cb_int32 cbBM_setBondLinklossTmo(cb_uint16 newValue); +extern cb_int32 cbBM_setBondCreateConnTmo(cb_uint16 newValue); +extern cb_int32 cbBM_setBondScanInterval(cb_uint16 newValue); +extern cb_int32 cbBM_setBondScanWindow(cb_uint16 newValue); +extern cb_int32 cbBM_setRemoteNameConnIntervalMin(cb_uint16 newValue); +extern cb_int32 cbBM_setRemoteNameConnIntervalMax(cb_uint16 newValue); +extern cb_int32 cbBM_setRemoteNameConnLatency(cb_uint16 newValue); +extern cb_int32 cbBM_setRemoteNameLinklossTmo(cb_uint16 newValue); +extern cb_int32 cbBM_setRemoteNameCreateConnTmo(cb_uint16 newValue); +extern cb_int32 cbBM_setRemoteNameScanInterval(cb_uint16 newValue); +extern cb_int32 cbBM_setRemoteNameScanWindow(cb_uint16 newValue); + +/* +* Read the LE parameter. +* @return parameter. +*/ +extern cb_uint16 cbBM_getAdvertisingIntervalMin(void); +extern cb_uint16 cbBM_getAdvertisingIntervalMax(void); +extern cb_uint16 cbBM_getAdvChannelmap(void); +extern cb_uint16 cbBM_getConnectConnIntervalMin(void); +extern cb_uint16 cbBM_getConnectConnIntervalMax(void); +extern cb_uint16 cbBM_getConnectConnLatency(void); +extern cb_uint16 cbBM_getConnectLinklossTmo(void); +extern cb_uint16 cbBM_getConnectCreateConnTmo(void); +extern cb_uint16 cbBM_getConnectScanInterval(void); +extern cb_uint16 cbBM_getConnectScanWindow(void); +extern cb_uint16 cbBM_getBondConnIntervalMin(void); +extern cb_uint16 cbBM_getBondConnIntervalMax(void); +extern cb_uint16 cbBM_getBondConnLatency(void); +extern cb_uint16 cbBM_getBondLinklossTmo(void); +extern cb_uint16 cbBM_getBondCreateConnTmo(void); +extern cb_uint16 cbBM_getBondScanInterval(void); +extern cb_uint16 cbBM_getBondScanWindow(void); +extern cb_uint16 cbBM_getRemoteNameConnIntervalMin(void); +extern cb_uint16 cbBM_getRemoteNameConnIntervalMax(void); +extern cb_uint16 cbBM_getRemoteNameConnLatency(void); +extern cb_uint16 cbBM_getRemoteNameLinklossTmo(void); +extern cb_uint16 cbBM_getRemoteNameCreateConnTmo(void); +extern cb_uint16 cbBM_getRemoteNameScanInterval(void); +extern cb_uint16 cbBM_getRemoteNameScanWindow(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_pan.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_pan.h new file mode 100644 index 00000000000..cfc7e8cb885 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_pan.h @@ -0,0 +1,142 @@ +/** +*--------------------------------------------------------------------------- + * Copyright (c) 2016, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Component : Bluetooth Serial + * File : cb_bt_pan.h + * + * Description : Data management for PAN profile + * + *-------------------------------------------------------------------------*/ + +#ifndef _CB_BT_PAN_H_ +#define _CB_BT_PAN_H_ + +#include "cb_comdefs.h" +#include "bt_types.h" +#include "cb_bt_conn_man.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*=========================================================================== +* DEFINES +*=========================================================================*/ +#define cbBTPAN_RESULT_OK ((cb_int32)0x00000000) +#define cbBTPAN_RESULT_ERROR ((cb_int32)0x00000001) +#define cbBTPAN_RESULT_ILLEGAL_HANDLE ((cb_int32)0x00000002) +#define cbBTPAN_RESULT_FLOW_STOP ((cb_int32)0x00000003) +#define cbBTPAN_RESULT_LINK_LOSS ((cb_int32)0x00000004) + +/*=========================================================================== +* TYPES +*=========================================================================*/ +typedef cb_uint32 cbBTPAN_Handle; + +/*--------------------------------------------------------------------------- +* Callback to indicate that a Bnep connection has been established. +* +* @param connHandle: Connection handle +* @param info: Information about the connection +* +* @return None +*-------------------------------------------------------------------------*/ +typedef void(*cbBTPAN_ConnectEvt) (cbBCM_Handle connHandle, cbBCM_ConnectionInfo info); + +/*--------------------------------------------------------------------------- +* Callback to indicate that a Bnep connection has been disconnected. +* +* @param connHandle: Connection handle +* +* @return None +*-------------------------------------------------------------------------*/ +typedef void(*cbBTPAN_DisconnectEvt) (cbBCM_Handle connHandle); + +/*--------------------------------------------------------------------------- +* Callback to indicate that data has been received from remote device. +* +* @param btPanHandle: PAN handle +* @param length: Length of the data +* @param pData: Pointer to the data +* +* @return None +*-------------------------------------------------------------------------*/ +typedef void(*cbBTPAN_DataEvt) (cbBCM_Handle connHandle, cb_uint8* pData, cb_uint16 length); + +/*--------------------------------------------------------------------------- +* Callback to indicate that data has been taken care by PAN. New +* data can now be sent on this handle. +* +* @param btPanHandle: PAN handle +* @param result: cbBTPAN_RESULT_OK if the data sending succeeded +* +* @return None +*-------------------------------------------------------------------------*/ +typedef void(*cbBTPAN_DataCnf) (cbBCM_Handle connHandle, cb_int32 result); + +typedef struct +{ + cbBTPAN_ConnectEvt pfConnectEvt; + cbBTPAN_DisconnectEvt pfDisconnectEvt; + cbBTPAN_DataEvt pfDataEvt; + cbBTPAN_DataCnf pfWriteCnf; +}cbBTPAN_Callback; + +/*=========================================================================== +* FUNCTIONS +*=========================================================================*/ +/** +* Initialization of Bluetooth PAN data. Called during stack +* initialization. Shall not be called by application. +* +* @return None +*/ +extern void cbBTPAN_init(void); + +/** +* Registers for PAN data callbacks. Only one registration is supported. +* +* @param pDataCallback Data callback +* +* @return cbBTPAN_RESULT_OK if successful +*/ +extern cb_uint32 cbBTPAN_registerDataCallback(cbBTPAN_Callback* pDataCallback); + +/*--------------------------------------------------------------------------- +* Sends data to the remote device. Note that you have to wait for the +* confirmation callback (cbBTPAN_DataCnf) before calling another cbBTPAN_reqData. +* +* @param connHandle: Connection handle +* @param pBuf: Pointer to the data +* @param bufSize: Length of the data +* +* @return cbBTPAN_RESULT_OK if successful +*-------------------------------------------------------------------------*/ +extern cb_int32 cbBTPAN_reqData(cbBCM_Handle connHandle, cb_uint8* pBuf, cb_uint16 bufSize); + +/*--------------------------------------------------------------------------- +* Gets the max frame size that can be sent/received with +* cbBTPAN_reqData/pfDataEvt +* +* @return max frame size +*-------------------------------------------------------------------------*/ +extern cb_int32 cbBTPAN_getMaxFrameSize(void); + +#ifdef __cplusplus +} +#endif + +#endif //_cb_BT_PAN_H_ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_sec_man.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_sec_man.h new file mode 100644 index 00000000000..c6a38b49af7 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_sec_man.h @@ -0,0 +1,378 @@ +/*--------------------------------------------------------------------------- + * Copyright (c) 2016, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Component : Bluetooth Security Manager + * File : cb_bt_sec_man.h + * + * Description : Bluetooth security application support + *-------------------------------------------------------------------------*/ + +/** + * @file cb_bt_sec_man.h + * @brief Bluetooth security application support. This includes bonding, + * security modes, passkey and pin code handling. + */ + +#ifndef _CB_BT_SEC_MAN_H_ +#define _CB_BT_SEC_MAN_H_ + +#include "cb_comdefs.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*=========================================================================== + * DEFINES + *=========================================================================*/ +#define cbBSM_OK (0) +#define cbBSM_ERROR (-1) + +#define cbBSM_PASSKEY_MAX_VALUE (999999) + +/*=========================================================================== + * TYPES + *=========================================================================*/ + +/** + * cbBSM_SECURITY_MODE_1_DISABLED + * Security disabled + * - Remote Device BT 2.1: Auto accept (No man-in-the-middle attack protection, encryption enabled) + * - Remote Device BT 2.0: Authentication and encryption disabled. + * - Bluetooth Low Energy: Auto accept (No man-in-the-middle attack protection, encryption enabled) + * + * cbBSM_SECURITY_MODE_2_BT_2_0 + * - Enforce BT 2.0 (Service level authentication and encryption enabled) + * Please note that the device is not BT 2.1 qualified for this setting. It is included for backward compatibility. Invalid for Bluetooth Low Energy. + * + * cbBSM_SECURITY_MODE_3_FIXED_PIN + * - Remote Device BT 2.1: Service level authentication and encryption enabled. + * - Remote Device BT 2.0: Service level authentication and encryption enabled. + * - Bluetooth Low Energy: Service level authentication and encryption enabled. + * Please note that this security mode will not work with a general BT 2.1 device. However, it will work between two connectBlue BT 2.1 Serial Port Adapters. Use security mode 4 to make the device work with a general BT 2.1 device. + * + * cbBSM_SECURITY_MODE_4_JUST_WORKS + * - Remote Device BT 2.1: Auto accept (no man-in-the-middle attack protection, encryption enabled) + * - Remote Device BT 2.0: Service level authentication and encryption enabled. + * - Bluetooth Low Energy: Auto accept (no man-in-the-middle attack protection, encryption enabled) + * This security mode is intended for pairing in safe environments. When this mode is set, pairability (see AT*AGPM) is automatically disabled. In data mode, pairing can be enabled for 60 seconds by pressing the "External Connect" button for at least 5 seconds. When the module is pairable, the LED will blink. If the mode is changed from Just Works to another, pairability must be enabled again using the AT*AGPM command. + * + * cbBSM_SECURITY_MODE_5_DISPLAY_ONLY + * - Remote Device BT 2.1: Service level authentication and encryption enabled. User should be presented a passkey. + * - Remote Device BT 2.0: Service level authentication and encryption enabled. No user interaction required. + * - Bluetooth Low Energy: Service level authentication and encryption enabled. User should be presented a passkey. + * This security mode is used when the device has a display that can present a 6-digit value that the user shall enter on the remote device. + * + * cbBSM_SECURITY_MODE_6_DISPLAY_YES_NO + * - Remote Device BT 2.1: Service level authentication and encryption enabled. User should compare two values. + * - Remote Device BT 2.0: Service level authentication and encryption enabled. No user interaction required. + * This security mode is used when the device has a display that can present a 6-digit value that the user shall verify with yes or no to the remote device's presented value. + * Invalid for Bluetooth Low Energy. + * + * cbBSM_SECURITY_MODE_7_KEYBOARD_ONLY + * - Remote Device BT 2.1: Service level authentication and encryption enabled. User should enter a passkey. + * - Remote Device BT 2.0: Service level authentication and encryption enabled. No user interaction required. + * - Bluetooth Low Energy: Service level authentication and encryption enabled. User should enter a passkey. + * This security mode is used when the device only has a keyboard where the user can enter a 6-digit value that is presented on the remote device. + */ +typedef enum +{ + cbBSM_SECURITY_MODE_1_DISABLED = 1, + cbBSM_SECURITY_MODE_2_BT_2_0, + cbBSM_SECURITY_MODE_3_FIXED_PIN, + cbBSM_SECURITY_MODE_4_JUST_WORKS, + cbBSM_SECURITY_MODE_5_DISPLAY_ONLY, + cbBSM_SECURITY_MODE_6_DISPLAY_YES_NO, + cbBSM_SECURITY_MODE_7_KEYBOARD_ONLY +} cbBSM_SecurityMode; + +typedef struct +{ + TPinCode pin; + cb_uint8 nBytes; +} cbBSM_PinCode; + +typedef enum +{ + cbBSM_BOND_TYPE_CLASSIC, + cbBSM_BOND_TYPE_LE, + cbBSM_BOND_TYPE_ALL, +} cbBSM_BondTypes; + +typedef enum +{ + cbBSM_BOND_STATUS_OK = 0, + cbBSM_BOND_STATUS_ERR_PAGE_TMO, + cbBSM_BOND_STATUS_ERR_AUTH_FAIL, + cbBSM_BOND_STATUS_ERR_NO_MITM +} cbBSM_BondStatus; + +/** + * Callback to indicate that bonding is finished. + * @param bdAddress Remote BD address + * @param bondStatus Bond status, e.g. cbBSM_BOND_STATUS_OK + * @return None + */ +typedef void (*cbBSM_BondCnf)( + cbBSM_BondStatus status, + TBdAddr* pBdAddress); + +/** + * Callback to indicate that a pin code is required from upper layer. + * Respond the pin code request with cbBSM_rspFixedPin/cbBSM_rspNegFixedPin + * This is only used when either local or remote side does not support + * BT 2.1 secure simple pairing. + * @param bdAddress Remote BD address + * @return None + */ +typedef void (*cbBSM_RequestPinInd)( + TBdAddr* pBdAddress); + +/** + * Callback to indicate that user confirmation is required. The user should + * compare numericValues on local and remote side and respond the confirmation + * request with cbBSM_rspUserConfirmation if values match and + * cbBSM_rspNegUserConfirmation if they do not match or user wants to interrupt + * the pairing attempt. + * This is only used when both sides support BT 2.1 secure simple pairing and + * security mode cbBSM_SECURITY_MODE_6_DISPLAY_YES_NO is used. + * @param bdAddress Remote BD address + * @param numericValue The numeric value to be compared + * @return None + */ +typedef void (*cbBSM_UserConfirmationInd)( + TBdAddr* pBdAddress, + cb_uint32 numericValue); + +/** + * Callback to indicate that a passkey is required from upper layer. + * Respond the passkey request with cbBSM_rspUserPasskey/cbBSM_rspNegUserPasskey. + * This is only used when both sides support BT 2.1 secure simple pairing and + * security modes cbBSM_SECURITY_MODE_3_FIXED_PIN or cbBSM_SECURITY_MODE_7_KEYBOARD_ONLY is used + * @param bdAddress Remote BD address + * @return None + */ +typedef void (*cbBSM_UserPasskeyInd)( + TBdAddr* pBdAddress); + +/** + * Callback to indicate that a passkey is used in the pairing procedure. + * The passkey should be displayed to the user. + * This is only used when both sides support BT 2.1 secure simple pairing and + * security mode cbBSM_SECURITY_MODE_5_DISPLAY_ONLY is used. + * @param bdAddress Remote BD address + * @param passkey Passkey + * @return None + */ +typedef void (*cbBSM_UserPasskeyEvt)( + TBdAddr* pBdAddress, + cb_uint32 passkey); + +typedef struct +{ + cbBSM_RequestPinInd requestPinInd; + cbBSM_UserConfirmationInd userConfirmationInd; + cbBSM_UserPasskeyInd userPasskeyInd; + cbBSM_UserPasskeyEvt userPasskeyEvt; + cbBSM_BondCnf bondConfirmation; + cbBSM_BondCnf bondEvent; +} cbBSM_Callbacks; + +/*=========================================================================== + * FUNCTIONS + *=========================================================================*/ + +/** + * Initialization of BLuetooth security manager. Called during stack + * initialization. Shall not be called by application. + * + * @return None + */ +extern void cbBSM_init(void); + +/** + * Register security callbacks. Callbacks in the struct that are not + * of any interest can be set to NULL. + * + * @param pPairingCallbacks Pointer to the security callback struct + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_registerCallbacks(cbBSM_Callbacks* pPairingCallbacks); + +/** + * Set security mode. See comments on cbBSM_SecurityMode for + * description of the different security modes. + * + * @param securityMode Security mode. Default security is cbBSM_SECURITY_MODE_1_DISABLED + * @param allowPairingInNonBondableMode Normally FALSE. Set to TRUE if pairing should be allowed when not bondable. + * No link keys will then be stored. + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_setSecurityMode( + cbBSM_SecurityMode securityMode, + cb_boolean allowPairingInNonBondableMode); + +/** + * Read current security mode. + * + * @param pSecurityMode Security mode + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_getSecurityMode(cbBSM_SecurityMode* pSecurityMode); + +/** + * Sets the local device pairable mode. + * + * @param pairable TRUE=pairable, FALSE=not pairable (default) + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_setPairable(boolean pairable); + +/** + * Gets the local device pairable mode. + * + * @param pPairable Pointer to return value + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_getPairable(boolean* pPairable); + +/** + * Performs bonding with a remote device. The cbBSM_BondCnf callback will + * be called upon success/failure. + * + * @param remoteDevice Remote BD address + * @param type Classic or LE + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_reqBond( + TBdAddr remoteDevice, + TBluetoothType type); + +/** + * Responds on the cbBSM_RequestPinInd callback with a pin code + * This is only used when either local or remote side does not support + * BT 2.1 secure simple pairing. + * + * @param pBdAddress Pointer to the remote BD address + * @param pinCodeLength Length of the provided pin code + * @param pPinCode Pointer to the provided pin code + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_rspFixedPin( + TBdAddr* pBdAddress, + cb_uint8 pinCodeLength, + cb_uint8 *pPinCode); + +/** + * Responds the cbBSM_RequestPinInd callback. Can be used to interrupt a + * pairing attempt from the remote device. + * This is only used when either local or remote side does not support + * BT 2.1 secure simple pairing. + * + * @param pBdAddress Pointer to the remote BD address + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_rspNegFixedPin(TBdAddr* pBdAddress); + +/** + * Responds on the cbBSM_UserPasskeyInd callback. + * This is only used when both sides support BT 2.1 secure simple pairing. + * + * @param pBdAddress Pointer to the remote BD address + * @param passkey Passkey, range: 0-999999 + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_rspUserPasskey( + TBdAddr *pBdAddress, + uint32 passkey); + +/** + * Responds on the cbBSM_UserPasskeyInd callback. Can be used to interrupt a + * pairing attempt from the remote device. + * This is only used when both sides support BT 2.1 secure simple pairing. + * + * @param pBdAddress Pointer to the remote BD address + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_rspNegUserPasskey(TBdAddr *pBdAddress); + +/** + * Responds on the cbBSM_UserConfirmationInd callback. Accepts the numeric value. + * This is only used when both sides support BT 2.1 secure simple pairing. + * + * @param pBdAddress Pointer to the remote BD address + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_rspUserConfirmation(TBdAddr* pBdAddress); + +/** + * Responds on the cbBSM_UserConfirmationInd callback. Rejects the numeric value. + * This is only used when both sides support BT 2.1 secure simple pairing. + * + * @param pBdAddress Pointer to the remote BD address + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_rspNegUserConfirmation(TBdAddr* pBdAddress); + +/** + * Get number of bonded devices. + * + * @param type Bond type + * @param pNo Pointer to return value. + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_getAllNumberBondedDevices( + cbBSM_BondTypes type, + uint32* pNo); + +/** +* Get a bonded devices. +* +* @param deviceIndex Index of the bonded device +* @param pBdAddr Pointer to remote BD address. +* @param pIsLe Should be TRUE for LE and FALSE for classic +* @return If the operation is successful cbBSM_OK is returned. +*/ +extern cb_int32 cbBSM_getBondedDevice( + uint32 deviceIndex, + TBdAddr* pBdAddr, + cb_boolean pIsLe); + +/** + * Delete a bonded device and its link keys. + * + * @param pBdAddress to the address of the device which bond shall be deleted. + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_deleteBondedDevice(TBdAddr* pBdAddress); + +/** + * Delete all bonded devices and link keys. + * + * @return If the operation is successful cbBSM_OK is returned. + */ +extern cb_int32 cbBSM_deleteAllBondedDevices(void); + +#ifdef __cplusplus +} +#endif + +#endif /* _CB_BT_SEC_MAN_H_ */ + + + + + + diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_serial.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_serial.h new file mode 100644 index 00000000000..b1d9992e804 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_serial.h @@ -0,0 +1,155 @@ +/** + *--------------------------------------------------------------------------- + * Copyright (c) 2016, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Component : Bluetooth Serial + * File : cb_bt_serial.h + * + * Description : Data management for RFCOMM based profiles such and Serial + * Port Profile (SPP). + * + *-------------------------------------------------------------------------*/ + +/** + * @file cb_bt_serial.h + * @brief Data management for RFCOMM based profiles such and Serial + * Port Profile (SPP). + */ + +#ifndef _CB_BT_SERIAL_H_ +#define _CB_BT_SERIAL_H_ + +#include "cb_comdefs.h" +#include "bt_types.h" +#include "cb_bt_conn_man.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*=========================================================================== +* DEFINES +*=========================================================================*/ +#define cbBSE_OK 0 +#define cbBSE_ERROR -1 +#define cbBSE_NO_DATA -2 + +/*=========================================================================== +* TYPES +*=========================================================================*/ + +typedef void (*cbBSE_DataAvailEvt)( + cbBCM_Handle handle); + +typedef void (*cbBSE_WriteCnf)( + cbBCM_Handle handle, + cb_int32 status, + cb_uint32 nBytes, + cb_int32 tag); + +typedef struct +{ + cbBSE_DataAvailEvt pfDataEvt; + cbBSE_WriteCnf pfWriteCnf; +}cbBSE_Callback; + +/*=========================================================================== +* FUNCTIONS +*=========================================================================*/ +/** + * Initialization of Bluetooth serial manager. Called during stack + * initialization. Shall not be called by application. + * + * @return None + */ +extern void cbBSE_init(void); + +/** + * Open a data channel. + * + * @param handle Connection handle + * @param pCallback Callback for data events. + * @return If the operation is successful cbBSE_OK is returned. + */ +extern cb_int32 cbBSE_open( + cbBCM_Handle handle, + cbBSE_Callback *pCallback); + +/** + * Send data to remote device. A data confirmation event is generated when + * the data has been sent and a cbBSE_write call can be done. + * + * Detailed description optionally verbose. + * @param handle Connection handle + * @param pBuf Data pointer + * @param nBytes nBytes Size of data to be sent. + * @param tag Tag passed as argument in corresponding data confirmation callback. + * @return If the operation is successful cbBSE_OK is returned. + */ +extern cb_int32 cbBSE_write( + cbBCM_Handle handle, + cb_uint8 *pBuf, + cb_uint32 nBytes, + cb_int32 tag); + +/** + * Get received data. + * + * @param handle Connection handle + * @param ppBuf Pointer to data buffer + * @param pLength Pointer to buffer length variable. + * @return cbBSE_OK is returned if data is available. If no data is available + * then cbBSE_NO_DATA is returned. + */ +extern cb_int32 cbBSE_getReadBuf( + cbBCM_Handle handle, + cb_uint8 **ppBuf, + cb_uint32 *pLength); + +/** + * Notify that received data has been handled and underlying buffers + * can be freed. + * + * @param handle Connection handle + * @param nBytes Number of bytes consumed. + * @return If the operation is successful cbBSE_OK is returned. + */ +extern cb_int32 cbBSE_readBufConsumed( + cbBCM_Handle handle, + cb_uint32 nBytes); + +/** + * Read max frame size for a data channel. + * + * @param handle Connection handle + * @param pFrameSize Max frame size for connection. + * @return If the operation is successful cbBSE_OK is returned. + */ +extern cb_int32 cbBSE_frameSize(cbBCM_Handle handle, cb_uint32 *pFrameSize); + +/** + * Bluetooth serial message handling. Shall not be called by application. + * + * @param msgId Message id + * @param pData Pointer to message data + * @return None + */ +extern void cbBSE_handleMsg(cb_uint32 msgId, void* pData); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_serial_le.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_serial_le.h new file mode 100644 index 00000000000..ed953dcd980 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_serial_le.h @@ -0,0 +1,153 @@ +/** + *--------------------------------------------------------------------------- + * Copyright (c) 2016, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Component : Bluetooth Serial + * File : cb_bt_serial_le.h + * + * Description : Data management for Serial Port Service. + * + *-------------------------------------------------------------------------*/ + +/** + * @file cb_bt_serial_le.h + * @brief Data management for Serial Port Service. + */ + +#ifndef _CB_BT_SERIAL_LE_H_ +#define _CB_BT_SERIAL_LE_H_ + +#include "cb_comdefs.h" +#include "bt_types.h" +#include "cb_bt_conn_man.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*=========================================================================== +* DEFINES +*=========================================================================*/ +#define cbBSL_OK 0 +#define cbBSL_ERROR -1 +#define cbBSL_NO_DATA -2 + +/*=========================================================================== +* TYPES +*=========================================================================*/ + +typedef void (*cbBSL_DataAvailEvt)( + cbBCM_Handle handle); + +typedef void (*cbBSL_WriteCnf)( + cbBCM_Handle handle, + cb_int32 status, + cb_uint32 nBytes, + cb_int32 tag); + +typedef struct +{ + cbBSL_DataAvailEvt pfDataEvt; + cbBSL_WriteCnf pfWriteCnf; +}cbBSL_Callback; + +/*=========================================================================== + * FUNCTIONS + *=========================================================================*/ +/** + * Initialization of Bluetooth serial manager. Called during stack + * initialization. Shall not be called by application. + * + * @return None + */ +extern void cbBSL_init(void); + +/** + * Open a data channel. + * + * @param handle Connection handle + * @param pCallback Callback for data events. + * @return If the operation is successful cbBSL_OK is returned. + */ +extern cb_int32 cbBSL_open( + cbBCM_Handle handle, + cbBSL_Callback *pCallback); + +/** + * Send data to remote device. A data confirmation event is generated when + * the data has been sent and a cbBSL_write call can be done. + * + * Detailed description optionally verbose. + * @param handle Connection handle + * @param pBuf Data pointer + * @param nBytes nBytes Size of data to be sent. + * @param tag Tag passed as argument in corresponding data confirmation callback. + * @return If the operation is successful cbBSL_OK is returned. + */ +extern cb_int32 cbBSL_write( + cbBCM_Handle handle, + cb_uint8 *pBuf, + cb_uint32 nBytes, + cb_int32 tag); + +/** + * Get received data. + * + * @param handle Connection handle + * @param ppBuf Pointer to data buffer + * @param pLength Pointer to buffer length variable. + * @return cbBSL_OK is returned if data is available. If no data is available + * then cbBSL_NO_DATA is returned. + */ +extern cb_int32 cbBSL_getReadBuf( + cbBCM_Handle handle, + cb_uint8 **ppBuf, + cb_uint32 *pLength); + +/** + * Notify that received data has been handled and underlying buffers + * can be freed. + * + * @param handle Connection handle + * @param nBytes Number of bytes consumed. + * @return If the operation is successful cbBSL_OK is returned. + */ +extern cb_int32 cbBSL_readBufConsumed( + cbBCM_Handle handle, + cb_uint32 nBytes); + +/** + * Read max frame size for a data channel. + * + * @param handle Connection handle + * @param pFrameSize Max frame size for connection. + * @return If the operation is successful cbBSE_OK is returned. + */ +extern cb_int32 cbBSL_frameSize(cbBCM_Handle handle, cb_uint32 *pFrameSize); + +/** + * Bluetooth serial message handling. Shall not be called by application. + * + * @param msgId Message id + * @param pData Pointer to message data + * @return None + */ +extern void cbBSL_handleMsg(cb_uint32 msgId, void* pData); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_test_man.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_test_man.h new file mode 100644 index 00000000000..6cbc8b3767d --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_test_man.h @@ -0,0 +1,253 @@ +/*--------------------------------------------------------------------------- + * Copyright (c) 2016, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Component : Bluetooth Test + * File : cb_bt_test_man.h + * + * Description : Functionality for Bluetooth radio tests and qualification. + *-------------------------------------------------------------------------*/ + +/** +* @file cb_bt_test_man.h +* @brief Functionality for Bluetooth radio tests and qualification. + */ + +#ifndef _CB_BT_TEST_MAN_H_ +#define _CB_BT_TEST_MAN_H_ + +#include "cb_comdefs.h" + +#include "cb_bt_man.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*=========================================================================== + * DEFINES + *=========================================================================*/ +#define cbBTM_OK (0) +#define cbBTM_ERROR (-1) + +/*=========================================================================== + * TYPES + *=========================================================================*/ +typedef enum +{ + cbBTM_TEST_CONF_POS, + cbBTM_TEST_CONF_NEG +} cbBTM_TestEvt; + +typedef void (*cbBTM_TestCallback)(cbBTM_TestEvt evt); +typedef void (*cbBTM_LeTestEndCallback)(cbBTM_TestEvt evt, cb_uint16 nbrOfPackets); + + +/*=========================================================================== + * FUNCTIONS + *=========================================================================*/ + +/** + * Init Bluetooth test manager + * @returns None + */ +extern void cbBTM_init(void); + +/** + * Enable Device under test mode. Used for Bluetooth Classic radio tests. + * + * @param callback Test callback used to notify if the test was successfully started. + * @returns cbBTM_OK is returned + */ +extern cb_int32 cbBTM_enableDUT(cbBTM_TestCallback callback); + +/** + * This command operates the RF transceiver in continuous transmission mode (which is most likely used in + * regulatory and standardization procedures and tests, such as FCC and ETSI certifications). Activating the + * VS runs the TX START sequence code using the configured frequency, modulation, pattern, and power + * level. The VS also enables the generation of a user-defined pattern (or correcting definitions without a + * patch) by setting a new pattern generator (also known as a PN generator) init value and mask. + * based on HCI_VS_DRPb_Tester_Con_TX, HCI Opcode 0xFDCA + * The cbBTM_TestCallback is used to notify if the test is sucessfully started. + * + * @param frequency Transmission frequency in MHz Range: 2402 - 2480 + * @param modulationScheme Range: 0x00 - 0x05 where + * 0x00 = CW + * 0x01 = BT BR (GFSK) + * 0x02 = BT EDR 2MB (p/4-DQPSK) + * 0x03 = BT EDR 3MB (8-DPSK) + * 0x04 = BT LE (BLE, GMSK) + * 0x05 = ANT (GFSK) + * @param testPattern Range: 0x00 - 0x07 + * 0x00 = PN9 + * 0x01 = PN15 + * 0x02 = ZOZO (101010101010101010) + * 0x03 = All 1 + * 0x04 = All 0 + * 0x05 = FOFO (1111000011110000) + * 0x06 = FFOO (1111111100000000) + * 0x07 = Not used + * @param powerLevelIndex Range: 0-7: 7 = Max Output Power, 0 = Min Output Power, 0x08 (PA off) 8 = PA Off (leakage) + * @param reserved1 shall be set to 0 + * @param reserved2 shall be set to 0 + * @param callback Test callback used to notify if the test was successfully started. + * + * @return cbBTM_OK is returned + */ +extern cb_int32 cbBTM_tiDrpbTesterConTx( + cb_uint16 frequency, + cb_uint8 modulationScheme, + cb_uint8 testPattern, + cb_uint8 powerLevelIndex, + cb_uint32 reserved1, + cb_uint32 reserved2, + cbBTM_TestCallback callback); + +/** + *This command operates the RF transceiver in continuous reception mode (most likely used in regulatory + * and standardization procedures and tests, such as FCC and ETSI certifications). By activating the VS, the + * RX START sequence code runs, using the configured frequency, RX mode, and modulation type. + * based on HCI_VS_DRPb_Tester_Con_RX, HCI Opcode 0xFDCB + * + * The cbBTM_TestCallback is used to notify if the test is successfully started. + * @param frequency Transmission frequency in MHz Range: 2402 - 2480 + * @param rxMode Range: 0 -3: + * 0x00 = Connection mode + * 0x01 = Best RF mode (ADPL closed loop) - For expert use only! + * 0x02 = Low current mode (ADPLL open loop) - For expert use only! + * 0x03 = Scan mode + * @param modulationScheme Range: 0x03 - 0x05 where + * 0x03 = BT (BR, EDR 2MB, EDR 3MB) + * 0x04 = BT LE (BLE, GMSK) + * 0x05 = ANT (GFSK) + * @param callback Test callback used to notify if the test was successfully started. + * + * @return cbBTM_OK is returned + */ +extern cb_int32 cbBTM_tiDrpbTesterConRx( + cb_uint16 frequency, + cb_uint8 rxMode, + cb_uint8 modulationScheme, + cbBTM_TestCallback callback); + +/** + * + * This command operates the RF transceiver in continuous reception mode (most likely used in regulatory + * and standardization procedures and tests, such as FCC and ETSI certifications). Activating the VS runs + * the RX START sequence code using the configured frequency, RX mode, and modulation type. + * This command emulates Bluetooth connection mode. Connection does not require a setup procedure. + * Based on HCI_VS_DRPb_Tester_Packet_TX_RX HCI Opcode 0xFDCC + * + * @param aclPacketType ACL TX packet type. Range: 0x00 - 0x0B + * 0x00 = DM1 + * 0x01 = DH1 + * 0x02 = DM3 + * 0x03 = DH3 + * 0x04 = DM5 + * 0x05 = DH5 + * 0x06 = 2-DH1 + * 0x07 = 2-DH3 + * 0x08 = 2-DH5 + * 0x09 = 3-DH1 + * 0x0A = 3-DH3 + * 0x0B = 3-DH5 + * @param frequencyMode 0x00 = Hopping 0x03 = Single frequency + * @param txSingleFrequency Transmission frequency in MHz,Range 2402 - 2480, 0xFFFF = no TX + * @param rxSingleFrequency Transmission frequency in MHz,Range 2402 - 2480, 0xFFFF = no RX + * @param aclDataPattern ACL TX packet data pattern Range: 0x00 - 0x05 + * 0x00 = All 0 + * 0x01 = All 1 + * 0x02 = ZOZO (101010101010101010) + * 0x03 = FOFO (1111000011110000) + * 0x04 = Ordered (1, 2, 3, 4, and so on) + * 0x05 = PRBS9 (pseudo-random bit sequence) + * @param useExtendedFeatures Shall be SET to 0 + * @param aclDataLength ACL packet data length. + * DM1: 0 - 17 ACL packet data length in bytes + * DH1: 0 - 27 + * DM3: 0 - 121 + * DH3: 0 - 183 + * DM5: 0 - 224 + * DH5: 0 - 339 + * 2-DH1: 0 - 54 + * 2-DH3: 0 - 367 + * 2-DH5: 0 - 679 + * 3-DH1: 0 - 83 + * 3-DH3: 0 - 552 + * 3-DH5: 0 - 1021 + * @param powerLevel Range 0-7: 7 = Max Output Power; 0 = Min Output; Power 8 = PA Off (leakage) 0x08 (PA off) + * @param disableWhitening 0x00 = Enable whitening, 0x01 = Disable whitening + * @param prbs9Init PRBS9 Init, range 0x0000 - 0x01FF + * @param callback Test callback used to notify if the test was successfully started. + * + * @return cbBTM_OK is returned + */ +extern cb_int32 cbBTM_tiDrpbTesterPacketTxRx( + cb_uint8 aclPacketType, + cb_uint8 frequencyMode, + cb_uint16 txSingleFrequency, + cb_uint16 rxSingleFrequency, + cb_uint8 aclDataPattern, + cb_uint8 useExtendedFeatures, + cb_uint16 aclDataLength, + cb_uint8 powerLevel, + cb_uint8 disableWhitening, + cb_uint16 prbs9Init, + cbBTM_TestCallback callback); + +/** + * Enable Bluetooth Low Energy Transmitter test. + * @param txFreq Transmit frequency. N = (F - 2402) / 2, Range: 0x00 to 0x27, Frequency Range : 2402 MHz to 2480 MHz, + Use oxFF to generate a pseudo random hopping frequency useful for some scenarios during type approval. + * @param length Length in bytes of payload data in each packet + * @param packetPayload 0x00 Pseudo-Random bit sequence 9 + * 0x01 Pattern of alternating bits 11110000 + * 0x02 Pattern of alternating bits 10101010 + * 0x03 Pseudo-Random bit sequence 15 + * 0x04 Pattern of All 1 bits + * 0x05 Pattern of All 0 bits + * 0x06 Pattern of alternating bits 00001111 + * 0x07 Pattern of alternating bits 0101 + * @param callback Test callback used to notify if the test was successfully started. + * @return cbBTM_OK is returned + */ +extern cb_int32 cbBTM_enableBleTransmitterTest( + cb_uint8 txFreq, + cb_uint8 length, + cb_uint8 packetPayload, + cbBTM_TestCallback callback); + +/** + * Enable Bluetooth Low Energy Receiver test. + * @param rxFreq Receive frequency. N = (F - 2402) / 2, Range: 0x00 to 0x27, Frequency Range : 2402 MHz to 2480 MHz, + * @param callback Test callback used to notify if the test was successfully started. + * @returns cbBTM_OK is returned + */ +extern cb_int32 cbBTM_enableBleReceiverTest( + cb_uint8 rxFreq, + cbBTM_TestCallback callback); + +/** + * End Bluetooth Low Energy Receiver or Transmitter test. + * @param callback Test callback used to notify if the test was successfully ended. + * @returns cbBTM_OK is returned + */ +extern cb_int32 cbBTM_bleTestEnd(cbBTM_LeTestEndCallback callback); + +#ifdef __cplusplus +} +#endif + +#endif /* _CB_BT_TEST_MAN_H_ */ + diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_utils.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_utils.h new file mode 100644 index 00000000000..255a4c056f7 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_bt_utils.h @@ -0,0 +1,86 @@ +/*--------------------------------------------------------------------------- + * Copyright (c) 2016, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Component : Bluetooth utility + * File : cb_bt_utils.h + * + * Description : + *-------------------------------------------------------------------------*/ + +#ifndef _CB_BT_UTILS_H_ +#define _CB_BT_UTILS_H_ + +#include "cb_comdefs.h" +#include "bt_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*=========================================================================== + * FUNCTIONS + *========================================================================= + */ + +/** + * Compare two Bluetooth addresses + * + * @param addr1 Pointer to first address to compare + * @param addr2 Pointer to second address to compare + * @returns TRUE if equal otherwise FALSE + */ +extern cb_boolean cbBT_UTILS_cmpBdAddr( + TBdAddr* addr1, + TBdAddr* addr2); + +/** + * Check if address in invalid i.e. {{0,0,0,0,0,0},BT_PUBLIC_ADDRESS} + * + * @param addr Pointer to address to check + * @returns TRUE if invalid otherwise FALSE + */ +extern cb_boolean cbBT_UTILS_isInvalidBdAddr( + TBdAddr* addr); + +/** + * Set invalid address i.e. {{0,0,0,0,0,0},BT_PUBLIC_ADDRESS} + * + * @param addr Pointer where to put the address + */ +extern void cbBT_UTILS_setInvalidBdAddr( + TBdAddr* addr); + +/** + * Get invalid address + * + * @returns Pointer to the invalid address + */ +extern const TBdAddr* cbBT_UTILS_getInvalidBdAddr(void); + +/** + * Copy Bluetooth address + * + * @param dest Pointer to destination address + * @param src Pointer to source address + */ +extern void cbBT_UTILS_cpyBdAddr( + TBdAddr* dest, + TBdAddr* src); + +#ifdef __cplusplus +} +#endif + +#endif /* _CB_BT_UTILS_H_ */ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_comdefs.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_comdefs.h new file mode 100644 index 00000000000..3b901fa6516 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_comdefs.h @@ -0,0 +1,178 @@ +/*--------------------------------------------------------------------------- + * Copyright (c) 2016, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Component : Common Definitions + * File : cb_comdefs.h + * + * Description : Common definitions. + *-------------------------------------------------------------------------*/ + +#ifndef _CB_COMDEFS_H_ +#define _CB_COMDEFS_H_ + +#include "cb_platform_basic_types.h" + +/*=========================================================================== + * DEFINES + *=========================================================================*/ + +#ifndef FALSE +# define FALSE (0) +#endif + +#ifndef TRUE +# define TRUE (!FALSE) +#endif + +#ifndef NULL +# define NULL ((void*)0) +#endif + +/** + * Returns the maximum value of the two parameters. + */ +#define cb_MAX(a,b) (((a) > (b)) ? (a) : (b)) + +/** + * Returns the minimum value of the two parameters. + */ +#define cb_MIN(a,b) (((a) < (b)) ? (a) : (b)) + +/** + * Used in function definitions to declare an input parameter unused to avoid warnings. + */ +#ifndef cb_UNUSED +# define cb_UNUSED(x) x +#endif + + +#ifndef cb_ASSERT +# error "No platform definition for ASSERT!" +#endif + +/** + * Used when declaring an empty array that does not take up space in a struct. + * Example: struct { cb_uint8 payload[cb_EMPTY_ARRAY]; } + * In some compilers this is empty i.e. payload[]. While in some it requires a zero. + * I.e. payload[0]; + * Use this define to get it working for your system. + */ +#ifndef cb_EMPTY_ARRAY +# define cb_EMPTY_ARRAY (0) +#endif + + +#define cb_BIT_0 (1ul) +#define cb_BIT_1 (1ul << 1) +#define cb_BIT_2 (1ul << 2) +#define cb_BIT_3 (1ul << 3) +#define cb_BIT_4 (1ul << 4) +#define cb_BIT_5 (1ul << 5) +#define cb_BIT_6 (1ul << 6) +#define cb_BIT_7 (1ul << 7) +#define cb_BIT_8 (1ul << 8) +#define cb_BIT_9 (1ul << 9) +#define cb_BIT_10 (1ul << 10) +#define cb_BIT_11 (1ul << 11) +#define cb_BIT_12 (1ul << 12) +#define cb_BIT_13 (1ul << 13) +#define cb_BIT_14 (1ul << 14) +#define cb_BIT_15 (1ul << 15) +#define cb_BIT_16 (1ul << 16) +#define cb_BIT_17 (1ul << 17) +#define cb_BIT_18 (1ul << 18) +#define cb_BIT_19 (1ul << 19) +#define cb_BIT_20 (1ul << 20) +#define cb_BIT_21 (1ul << 21) +#define cb_BIT_22 (1ul << 22) +#define cb_BIT_23 (1ul << 23) +#define cb_BIT_24 (1ul << 24) +#define cb_BIT_25 (1ul << 25) +#define cb_BIT_26 (1ul << 26) +#define cb_BIT_27 (1ul << 27) +#define cb_BIT_28 (1ul << 28) +#define cb_BIT_29 (1ul << 29) +#define cb_BIT_30 (1ul << 30) +#define cb_BIT_31 (1ul << 31) + +/** + * Clears (set to zero) a bit or bits in a variable. + * @param variable The variable. + * @param bit The bit or bits to clear + */ +#define cb_CLEAR_BIT(variable,bit) ((variable) &= ~((bit))) + +/** + * Gets a bit i.e. checks if it is set in a variable. + * + * Also works to see if any of several bits are set. + * + * @param variable The variable. + * @param bit The bit to check if it set. + * @return @ref TRUE if any of the bits are set, @ref FALSE otherwise. + */ +#define cb_GET_BIT(variable,bit) (((variable) & ((bit))) ? TRUE : FALSE) + +/** + * Calculate the number of elements in an array. + * + * @note Won't work on pointer to array as the sizeof(pointer) is 4. + * + * @param _array The array. + * @return Number of elements in array. + */ +#define ELEMENTS_OF(_array) (sizeof((_array)) / sizeof((_array)[0])) + +/** + * Sets (set to 1) a bit or bits in a variable. + * + * @param variable The variable. + * @param bit The bit or bits to set in the variable. + */ +#define cb_SET_BIT(variable,bit) ((variable) |= (bit)) + +#define cb_UINT8_MAX ((cb_uint8)0xff) +#define cb_UINT16_MAX ((cb_uint16)0xffff) +#define cb_UINT32_MAX ((cb_uint32)0xffffffff) +#define cb_INT8_MAX ((cb_int8)0x7f) +#define cb_INT16_MAX ((cb_int16)0x7fff) +#define cb_INT32_MAX ((cb_int32)0x7fffffff) +#define cb_INT8_MIN ((cb_int8)0x80) +#define cb_INT16_MIN ((cb_int16)0x8000) +#define cb_INT32_MIN ((cb_int32)0x80000000) + + + +#define cb_PACKED_STRUCT_BEGIN(name) \ + cb_PACKED_STRUCT_ATTR_PRE \ + typedef cb_PACKED_STRUCT_ATTR_INLINE_PRE struct name##_t + +#define cb_PACKED_STRUCT_END(name) \ + cb_PACKED_STRUCT_ATTR_INLINE_POST name; \ + cb_PACKED_STRUCT_ATTR_POST + +#ifdef __GNUC__ +# define DO_PRAGMA(x) _Pragma (#x) +# define TODO(x) DO_PRAGMA(message ("TODO - " #x)) +#else +# define TODO(x) +#endif + +/*=========================================================================== + * TYPES + *=========================================================================*/ + +#endif /* _cb_COMDEFS_H_ */ + diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_gatt.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_gatt.h new file mode 100644 index 00000000000..319f45f3760 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_gatt.h @@ -0,0 +1,504 @@ +/* + *--------------------------------------------------------------------------- + * Copyright (c) 2016, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Component : GATT + * File : cb_gatt.h + * + * Description : Definitions and types for GATT(Generic Attribute Profile) + * that are in common for both client and server. + * + *-------------------------------------------------------------------------*/ + +/** + * @file cb_gatt.h + * + * @brief Definitions and types for GATT(Generic Attribute Profile) + * that are in common for both client and server. + */ + +#ifndef _CB_GATT_H_ +#define _CB_GATT_H_ + +#include "bt_types.h" + +/*=========================================================================== + * DEFINES + *=========================================================================*/ + +#ifdef __cplusplus +extern "C" { +#endif + +#define cbGATT_OK (0) +#define cbGATT_ERROR (-1) +#define cbGATT_ERROR_WRONG_STATE (-2) +#define cbGATT_ERROR_WRONG_HANDLE (-3) +#define cbGATT_ERROR_WRONG_PARAMETERS (-4) + +// This should be the same as in ATT +#define cbGATT_DEFAULT_MTU_LE 23 + +#define cbGATT_GET_MAX_READ_MULTIPLE_MTU(mtu) (mtu-1) +#define cbGATT_GET_MAX_WRITE_CHARACTERISTIC_MTU(mtu) (mtu-3) +#define cbGATT_GET_MAX_WRITE_SIGNED_CHARACTERISTIC_MTU(mtu) (mtu-13) +#define cbGATT_GET_MAX_NOTIFICATION_MTU(mtu) (mtu-3) +#define cbGATT_GET_MAX_INDICATION_MTU(mtu) (mtu-3) + +#define cbGATT_INVALID_ATTR_HANDLE 0x0000 +#define cbGATT_MIN_ATTR_HANDLE 0x0001 +#define cbGATT_MAX_ATTR_HANDLE 0xFFFF + +#define cbGATT_PROP_BCST 0x01 // Broadcast +#define cbGATT_PROP_RD 0x02 // Readable +#define cbGATT_PROP_WR_NO_RSP 0x04 // Write with no response +#define cbGATT_PROP_WR 0x08 // Writable +#define cbGATT_PROP_NOT 0x10 // Notify +#define cbGATT_PROP_IND 0x20 // Indicate +#define cbGATT_PROP_SIGN_WR 0x40 // Authenticated signed write +#define cbGATT_PROP_EXT 0x80 // extended property + +#define cbGATT_PROP_EXT_REL_WR 0x0001 // Reliable write +#define cbGATT_PROP_EXT_WR_AUX 0x0002 // auxiliary write +#define cbGATT_CLIENT_CFG_NONE 0x0000 // Client configuration disabled +#define cbGATT_CLIENT_CFG_NOT 0x0001 // Client notification configuration +#define cbGATT_CLIENT_CFG_IND 0x0002 // Server indication configuration +#define cbGATT_SERVER_CFG_BCST 0x0001 // Server broadcast configuration + +#define cbGATT_GET_BROADCAST_PROP(prop) ((0x01 & prop) == 0x01) +#define cbGATT_GET_READ_PROP(prop) ((0x02 & prop) == 0x02) +#define cbGATT_GET_WRITE_WITHOUT_RSP_PROP(prop) ((0x04 & prop) == 0x04) +#define cbGATT_GET_WRITE_PROP(prop) ((0x08 & prop) == 0x08) +#define cbGATT_GET_NOTIFY_PROP(prop) ((0x10 & prop) == 0x10) +#define cbGATT_GET_INDICATE_PROP(prop) ((0x20 & prop) == 0x20) +#define cbGATT_GET_AUTH_SIGNED_WRITES_PROP(prop) ((0x40 & prop) == 0x40) +#define cbGATT_GET_EXTENDED_PROP(prop) ((0x80 & prop) == 0x80) + +#define cbGATT_GET_PROP_EXT_REL_WR(prop) ((0x0001 & prop) == 0x0001) +#define cbGATT_GET_PROP_EXT_WR_AUX(prop) ((0x0002 & prop) == 0x0002) +#define cbGATT_GET_CLIENT_CFG_NOT(cfg) ((0x0001 & cfg) == 0x0001) +#define cbGATT_GET_CLIENT_CFG_IND(cfg) ((0x0002 & cfg) == 0x0002) +#define cbGATT_GET_SERVER_CFG_BCST(cfg) ((0x0001 & cfg) == 0x0001) + +#define cbGATT_SET_BROADCAST_PROP(prop) (prop = prop | 0x01) +#define cbGATT_SET_READ_PROPERTY(prop) (prop = prop | 0x02) +#define cbGATT_SET_WRITE_WITHOUT_RSP_PROP(prop) (prop = prop | 0x04) +#define cbGATT_SET_WRITE_PROP(prop) (prop = prop | 0x08) +#define cbGATT_SET_NOTIFY_PROP(prop) (prop = prop | 0x10) +#define cbGATT_SET_INDICATE_PROP(prop) (prop = prop | 0x20) +#define cbGATT_SET_AUTH_SIGNED_WRITES_PROP(prop) (prop = prop | 0x40) +#define cbGATT_SET_EXTENDED_PROP(prop) (prop = prop | 0x80) + +#define cbGATT_SET_PROP_EXT_REL_WR(prop) (prop = prop | 0x0001) +#define cbGATT_SET_PROP_EXT_WR_AUX(prop) (prop = prop | 0x0002) +#define cbGATT_SET_CLIENT_CFG_NOT(cfg) (cfg = cfg | 0x0001) +#define cbGATT_SET_CLIENT_CFG_IND(cfg) (cfg = cfg | 0x0002) +#define cbGATT_SET_SERVER_CFG_BCST(cfg) (cfg = cfg | 0x0001) + +// Below specification level as of 2011-09-13 +#define cbGATT_SERVICE_GENERIC_ACCESS 0x1800 // 0.5 +#define cbGATT_SERVICE_GENERIC_ATTRIBUTE 0x1801 // 0.5 +#define cbGATT_SERVICE_IMMEDIATE_ALERT 0x1802 // Adopted +#define cbGATT_SERVICE_LINK_LOSS 0x1803 // Adopted +#define cbGATT_SERVICE_TX_POWER 0x1804 // Adopted +#define cbGATT_SERVICE_CURRENT_TIME 0x1805 // Prototype +#define cbGATT_SERVICE_REFERENCE_TIME_UPDATE 0x1806 // Prototype +#define cbGATT_SERVICE_NEXT_DST_CHANGE 0x1807 // Prototype +#define cbGATT_SERVICE_HEALTH_THERMOMETER 0x1809 // Adopted +#define cbGATT_SERVICE_DEVICE_INFORMATION 0x180A // Adopted +#define cbGATT_SERVICE_NETWORK_AVAILABILITY 0x180B // 0.9 +#define cbGATT_SERVICE_WATCHDOG 0x180C // 0.5 +#define cbGATT_SERVICE_HEART_RATE 0x180D // Adopted +#define cbGATT_SERVICE_PHONE_ALERT_STATUS 0x180E // Prototype +#define cbGATT_SERVICE_BATTERY_SERVICE 0x180F // Prototype +#define cbGATT_SERVICE_BLOOD_PRESSURE 0x1810 // 0.9 +#define cbGATT_SERVICE_ALERT_NOTIFICATION 0x1811 // Prototype +#define cbGATT_SERVICE_HUMAN_INTERFACE_DEVICE 0x1812 // 0.5 +#define cbGATT_SERVICE_SCAN_PARAMETER 0x1813 // 0.5 + +#define cbGATT_PRIMARY_SERVICE_DECL 0x2800 +#define cbGATT_SECONDARY_SERVICE_DECL 0x2801 +#define cbGATT_INCLUDE_DECL 0x2802 +#define cbGATT_CHAR_DECL 0x2803 +#define cbGATT_CHAR_EXT_PROP 0x2900 +#define cbGATT_CHAR_USER_DESC 0x2901 +#define cbGATT_CLIENT_CHAR_CONFIG 0x2902 +#define cbGATT_SERVER_CHAR_CONFIG 0x2903 +#define cbGATT_CHAR_FORMAT 0x2904 +#define cbGATT_CHAR_AGGR_FORMAT 0x2905 + +#define cbGATT_CHAR_GAP_DEVICE_NAME 0x2A00 // Adopted +#define cbGATT_CHAR_GAP_APPEARANCE 0x2A01 // Adopted +#define cbGATT_CHAR_GAP_PERIP_PRIV 0x2A02 // Adopted +#define cbGATT_CHAR_GAP_RECONN_ADDR 0x2A03 // Adopted +#define cbGATT_CHAR_GAP_CONN_PARAMS 0x2A04 // Adopted +#define cbGATT_CHAR_GATT_SVC_CHANGED 0x2A05 // Adopted +#define cbGATT_CHAR_ALERT_LEVEL 0x2A06 // Adopted +#define cbGATT_CHAR_TX_POWER_LEVEL 0x2A07 // Adopted +#define cbGATT_CHAR_DATE_TIME 0x2A08 // Adopted +#define cbGATT_CHAR_DAY_OF_WEEK 0x2A09 // Prototype +#define cbGATT_CHAR_DAY_DATE_TIME 0x2A0A // Prototype +#define cbGATT_CHAR_EXACT_TIME_100 0x2A0B // 0.9 +#define cbGATT_CHAR_EXACT_TIME_256 0x2A0C // Prototype +#define cbGATT_CHAR_DST_OFFSET 0x2A0D // Prototype +#define cbGATT_CHAR_TIME_ZONE 0x2A0E // Prototype +#define cbGATT_CHAR_LOCAL_TIME_INFORMATION 0x2A0F // Prototype +#define cbGATT_CHAR_SECONDARY_TIME_ZONE 0x2A10 // 0.9 +#define cbGATT_CHAR_TIME_WITH_DST 0x2A11 // Prototype +#define cbGATT_CHAR_TIME_ACCURACY 0x2A12 // Prototype +#define cbGATT_CHAR_TIME_SOURCE 0x2A13 // Prototype +#define cbGATT_CHAR_REFERENCE_TIME_INFORMATION 0x2A14 // Prototype +#define cbGATT_CHAR_TIME_BROADCAST 0x2A15 // 0.9 +#define cbGATT_CHAR_TIME_UPDATE_CONTROL_POINT 0x2A16 // Prototype +#define cbGATT_CHAR_TIME_UPDATE_STATE 0x2A17 // Prototype +#define cbGATT_CHAR_BOOLEAN 0x2A18 // 0.9 +#define cbGATT_CHAR_BATTERY_LEVEL 0x2A19 // 0.9 +#define cbGATT_CHAR_BATTERY_POWER_STATE 0x2A1A // 0.9 +#define cbGATT_CHAR_BATTERY_LEVEL_STATE 0x2A1B // 0.9 +#define cbGATT_CHAR_TEMP_MEASUREMENT 0x2A1C // Adopted +#define cbGATT_CHAR_TEMP_TYPE 0x2A1D // Adopted +#define cbGATT_CHAR_INTERMEDIATE_TEMP 0x2A1E // Adopted +#define cbGATT_CHAR_TEMP_CELSIUS 0x2A1F // 0.9 +#define cbGATT_CHAR_TEMP_FAHRENHEIT 0x2A20 // 0.9 +#define cbGATT_CHAR_MEASUREMENT_INTERVAL 0x2A21 // Adopted +#define cbGATT_CHAR_SYSTEM_ID 0x2A23 // Adopted +#define cbGATT_CHAR_MODEL_NUMBER_STRING 0x2A24 // Adopted +#define cbGATT_CHAR_SERIAL_NUMBER_STRING 0x2A25 // Adopted +#define cbGATT_CHAR_FIRMWARE_REV_STRING 0x2A26 // Adopted +#define cbGATT_CHAR_HARDWARE_REV_STRING 0x2A27 // Adopted +#define cbGATT_CHAR_SOFTWARE_REV_STRING 0x2A28 // Adopted +#define cbGATT_CHAR_MANUFACTURER_NAME_STRING 0x2A29 // Adopted +#define cbGATT_CHAR_IEEE_REG_CERT_DATA_LIST 0x2A2A // Adopted +#define cbGATT_CHAR_CURRENT_TIME 0x2A2B // Prototype +#define cbGATT_CHAR_ELEVATION 0x2A2C // 0.5 +#define cbGATT_CHAR_LATITUDE 0x2A2D // 0.5 +#define cbGATT_CHAR_LONGITUDE 0x2A2E // 0.5 +#define cbGATT_CHAR_POSITION_2D 0x2A2F // 0.5 +#define cbGATT_CHAR_POSITION_3D 0x2A30 // 0.5 +#define cbGATT_CHAR_VENDOR_ID_V1_1 0x2A31 // 0.5 +#define cbGATT_CHAR_PRODUCT_ID 0x2A32 // 0.5 +#define cbGATT_CHAR_HID_VERSION 0x2A33 // 0.5 +#define cbGATT_CHAR_VENDOR_ID_SOURCE 0x2A34 // 0.5 +#define cbGATT_CHAR_BLOOD_PRESSURE_MEASUREMENT 0x2A35 // 0.9 +#define cbGATT_CHAR_INTERMEDIATE_BLOOD_PRESSURE 0x2A36 // 0.9 +#define cbGATT_CHAR_HEART_RATE_MEASUREMENT 0x2A37 // Adopted +#define cbGATT_CHAR_BODY_SENSOR_LOCATION 0x2A38 // Adopted +#define cbGATT_CHAR_HEART_RATE_CONTROL_POINT 0x2A39 // Adopted +#define cbGATT_CHAR_REMOVABLE 0x2A3A // 0.5 +#define cbGATT_CHAR_SERVICE_REQUIRED 0x2A3B // 0.9 +#define cbGATT_CHAR_SCIENTIFIC_TEMP_CELSIUS 0x2A3C // 0.9 +#define cbGATT_CHAR_STRING 0x2A3D // 0.9 +#define cbGATT_CHAR_NETWORK_AVAILABILITY 0x2A3E // 0.9 +#define cbGATT_CHAR_ALERT_STATUS 0x2A3F // Prototype +#define cbGATT_CHAR_RINGER_CONTROL_POINT 0x2A40 // Prototype +#define cbGATT_CHAR_RINGER_SETTING 0x2A41 // Prototype +#define cbGATT_CHAR_ALERT_CATEGORY_ID_BIT_MASK 0x2A42 // 0.9 +#define cbGATT_CHAR_ALERT_CATEGORY_ID 0x2A43 // 0.9 +#define cbGATT_CHAR_ALERT_NOTIF_CONTROL_POINT 0x2A44 // 0.9 +#define cbGATT_CHAR_UNREAD_ALERT_STATUS 0x2A45 // 0.9 +#define cbGATT_CHAR_NEW_ALERT 0x2A46 // 0.9 +#define cbGATT_CHAR_SUPPORTED_NEW_ALERT_CATEGORY 0x2A47 // 0.9 +#define cbGATT_CHAR_SUPPORTED_UNREAD_ALERT_CATEGORY 0x2A48 // 0.9 +#define cbGATT_CHAR_BLOOD_PRESSURE_FEATURE 0x2A49 // 0.9 + +/*============================================================================== + * TYPES + *============================================================================== + */ + +typedef enum +{ + cbGATT_WRITE_METHOD_WITH_RSP, + cbGATT_WRITE_METHOD_NO_RSP, + cbGATT_WRITE_METHOD_SIGN, + cbGATT_WRITE_METHOD_RELIABLE_PREPARE, +} cbGATT_WriteMethod; + +typedef enum +{ + cbGATT_UNIT_UNITLESS = 0x2700, + cbGATT_UNIT_LENGTH_METRE = 0x2701, + cbGATT_UNIT_MASS_KILOGRAM = 0x2702, + cbGATT_UNIT_TIME_SECOND = 0x2703, + cbGATT_UNIT_ELECTRIC_CURRENT_AMPERE = 0x2704, + cbGATT_UNIT_THERMODYNAMIC_TEMPERATURE_KELVIN = 0x2705, + cbGATT_UNIT_AMOUNT_OF_SUBSTANCE_MOLE = 0x2706, + cbGATT_UNIT_LUMINOUS_INTENSITY_CANDELA = 0x2707, + cbGATT_UNIT_AREA_SQUARE_METRES = 0x2710, + cbGATT_UNIT_VOLUME_CUBIC_METRES = 0x2711, + cbGATT_UNIT_VELOCITY_METRES_PER_SECOND = 0x2712, + cbGATT_UNIT_ACCELERATION_METRES_PER_SECOND_SQUARED = 0x2713, + cbGATT_UNIT_WAVENUMBER_RECIPROCAL_METRE = 0x2714, + cbGATT_UNIT_DENSITY_KILOGRAM_PER_CUBIC_METRE = 0x2715, + cbGATT_UNIT_SURFACE_DENSITY_KILOGRAM_PER_SQUARE_METRE = 0x2716, + cbGATT_UNIT_SPECIFIC_VOLUME_CUBIC_METRE_PER_KILOGRAM = 0x2717, + cbGATT_UNIT_CURRENT_DENSITY_AMPERE_PER_SQUARE_METRE = 0x2718, + cbGATT_UNIT_MAGNETIC_FIELD_STRENGTH_AMPERE_PER_METRE = 0x2719, + cbGATT_UNIT_AMOUNT_CONCENTRATION_MOLE_PER_CUBIC_METRE = 0x271A, + cbGATT_UNIT_MASS_CONCENTRATION_KILOGRAM_PER_CUBIC_METRE = 0x271B, + cbGATT_UNIT_LUMINANCE_CANDELA_PER_SQUARE_METRE = 0x271C, + cbGATT_UNIT_REFRACTIVE_INDEX = 0x271D, + cbGATT_UNIT_RELATIVE_PERMEABILITY = 0x271E, + cbGATT_UNIT_PLANE_ANGLE_RADIAN = 0x2720, + cbGATT_UNIT_SOLID_ANGLE_STERADIAN = 0x2721, + cbGATT_UNIT_FREQUENCY_HERTZ = 0x2722, + cbGATT_UNIT_FORCE_NEWTON = 0x2723, + cbGATT_UNIT_PRESSURE_PASCAL = 0x2724, + cbGATT_UNIT_ENERGY_JOULE = 0x2725, + cbGATT_UNIT_POWER_WATT = 0x2726, + cbGATT_UNIT_ELECTRIC_CHARGE_COULOMB = 0x2727, + cbGATT_UNIT_ELECTRIC_POTENTIAL_DIFFERENCE_VOLT = 0x2728, + cbGATT_UNIT_CAPACITANCE_FARAD = 0x2729, + cbGATT_UNIT_ELECTRIC_RESISTANCE_OHM = 0x272A, + cbGATT_UNIT_ELECTRIC_CONDUCTANCE_SIEMENS = 0x272B, + cbGATT_UNIT_MAGNETIC_FLEX_WEBER = 0x272C, + cbGATT_UNIT_MAGNETIC_FLEX_DENSITY_TESLA = 0x272D, + cbGATT_UNIT_INDUCTANCE_HENRY = 0x272E, + cbGATT_UNIT_THERMODYNAMIC_TEMPERATURE_DEGREE_CELSIUS = 0x272F, + cbGATT_UNIT_LUMINOUS_FLUX_LUMEN = 0x2730, + cbGATT_UNIT_ILLUMINANCE_LUX = 0x2731, + cbGATT_UNIT_ACTIVITY_REFERRED_TO_A_RADIONUCLIDE_BECQUEREL = 0x2732, + cbGATT_UNIT_ABSORBED_DOSE_GRAY = 0x2733, + cbGATT_UNIT_DOSE_EQUIVALENT_SIEVERT = 0x2734, + cbGATT_UNIT_CATALYTIC_ACTIVITY_KATAL = 0x2735, + cbGATT_UNIT_DYNAMIC_VISCOSITY_PASCAL_SECOND = 0x2740, + cbGATT_UNIT_MOMENT_OF_FORCE_NEWTON_METRE = 0x2741, + cbGATT_UNIT_SURFACE_TENSION_NEWTON_PER_METRE = 0x2742, + cbGATT_UNIT_ANGULAR_VELOCITY_RADIAN_PER_SECOND = 0x2743, + cbGATT_UNIT_ANGULAR_ACCELERATION_RADIAN_PER_SECOND_SQUARED = 0x2744, + cbGATT_UNIT_HEAT_FLUX_DENSITY_WATT_PER_SQUARE_METRE = 0x2745, + cbGATT_UNIT_HEAT_CAPACITY_JOULE_PER_KELVIN = 0x2746, + cbGATT_UNIT_SPECIFIC_HEAT_CAPACITY_JOULE_PER_KILOGRAM_KELVIN = 0x2747, + cbGATT_UNIT_SPECIFIC_ENERGY_JOULE_PER_KILOGRAM = 0x2748, + cbGATT_UNIT_THERMAL_CONDUCTIVITY_WATT_PER_METRE_KELVIN = 0x2749, + cbGATT_UNIT_ENERGY_DENSITY_JOULE_PER_CUBIC_METRE = 0x274A, + cbGATT_UNIT_ELECTRIC_FIELD_STRENGTH_VOLT_PER_METRE = 0x274B, + cbGATT_UNIT_ELECTRIC_CHARGE_DENSITY_COULOMB_PER_CUBIC_METRE = 0x274C, + cbGATT_UNIT_SURFACE_CHARGE_DENSITY_COULOMB_PER_SQUARE_METRE = 0x274D, + cbGATT_UNIT_ELECTRIC_FLUX_DENSITY_COULOMB_PER_SQUARE_METRE = 0x274E, + cbGATT_UNIT_PERMITTIVITY_FARAD_PER_METRE = 0x274F, + cbGATT_UNIT_PERMEABILITY_HENRY_PER_METRE = 0x2750, + cbGATT_UNIT_MOLAR_ENERGY_JOULE_PER_MOLE = 0x2751, + cbGATT_UNIT_MOLAR_ENTROPY_JOULE_PER_MOLE_KELVIN = 0x2752, + cbGATT_UNIT_EXPOSURE_COULOMB_PER_KILOGRAM = 0x2753, + cbGATT_UNIT_ABSORBED_DOSE_RATE_GRAY_PER_SECOND = 0x2754, + cbGATT_UNIT_RADIANT_INTENSITY_WATT_PER_STERADIAN = 0x2755, + cbGATT_UNIT_RADIANCE_WATT_PER_SQUARE_METER_STERADIAN = 0x2756, + cbGATT_UNIT_CATALYTIC_ACTIVITY_CONCENTRATION_KATAL_PER_CUBIC_METRE = 0x2757, + cbGATT_UNIT_TIME_MINUTE = 0x2760, + cbGATT_UNIT_TIME_HOUR = 0x2761, + cbGATT_UNIT_TIME_DAY = 0x2762, + cbGATT_UNIT_PLANE_ANGLE_DEGREE = 0x2763, + cbGATT_UNIT_PLANE_ANGLE_MINUTE = 0x2764, + cbGATT_UNIT_PLANE_ANGLE_SECOND = 0x2765, + cbGATT_UNIT_AREA_HECTARE = 0x2766, + cbGATT_UNIT_VOLUME_LITRE = 0x2767, + cbGATT_UNIT_MASS_TONNE = 0x2768, + cbGATT_UNIT_PRESSURE_BAR = 0x2780, + cbGATT_UNIT_PRESSURE_MILLIMETRE_OF_MERCURY = 0x2781, + cbGATT_UNIT_LENGTH_ANGSTROM = 0x2782, + cbGATT_UNIT_LENGTH_NAUTICAL_MILE = 0x2783, + cbGATT_UNIT_AREA_BARN = 0x2784, + cbGATT_UNIT_VELOCITY_KNOT = 0x2785, + cbGATT_UNIT_LOGARITHMIC_RADIO_QUANTITY_NEPER = 0x2786, + cbGATT_UNIT_LOGARITHMIC_RADIO_QUANTITY_BEL = 0x2787, + cbGATT_UNIT_LENGTH_YARD = 0x27A0, + cbGATT_UNIT_LENGTH_PARSEC = 0x27A1, + cbGATT_UNIT_LENGTH_INCH = 0x27A2, + cbGATT_UNIT_LENGTH_FOOT = 0x27A3, + cbGATT_UNIT_LENGTH_MILE = 0x27A4, + cbGATT_UNIT_PRESSURE_POUND_FORCE_PER_SQUARE_INCH = 0x27A5, + cbGATT_UNIT_VELOCITY_KILOMETRE_PER_HOUR = 0x27A6, + cbGATT_UNIT_VELOCITY_MILE_PER_HOUR = 0x27A7, + cbGATT_UNIT_ANGULAR_VELOCITY_REVOLUTION_PER_MINUTE = 0x27A8, + cbGATT_UNIT_ENERGY_GRAM_CALORIE = 0x27A9, + cbGATT_UNIT_ENERGY_KILOGRAM_CALORIE = 0x27AA, + cbGATT_UNIT_ENERGY_KILOWATT_HOUR = 0x27AB, + cbGATT_UNIT_THERMODYNAMIC_TEMPERATURE_DEGREE_FAHRENHEIT = 0x27AC, + cbGATT_UNIT_PERCENTAGE = 0x27AD, + cbGATT_UNIT_PER_MILLE = 0x27AE, + cbGATT_UNIT_PERIOD_BEATS_PER_MINUTE = 0x27AF, + cbGATT_UNIT_ELECTRIC_CHARGE_AMPERE_HOURS = 0x27B0, + cbGATT_UNIT_MASS_DENSITY_MILLIGRAM_PER_DECILITRE = 0x27B1, + cbGATT_UNIT_MASS_DENSITY_MILLIMOLE_PER_LITRE = 0x27B2, + cbGATT_UNIT_TIME_YEAR = 0x27B3, + cbGATT_UNIT_TIME_MONTH = 0x27B4, +} cbGATT_Unit; + +typedef enum +{ + + // Note, check http://developer.bluetooth.org/gatt/descriptors/Pages/DescriptorViewer.aspx?u=org.bluetooth.descriptor.cbGATT.characteristic_presentation_format.xml + // for any changes + cbGATT_FORMAT_TYPE_BOOLEAN = 0x01, + cbGATT_FORMAT_TYPE_2BIT = 0x02, + cbGATT_FORMAT_TYPE_NIBBLE = 0x03, + cbGATT_FORMAT_TYPE_UINT8 = 0x04, + cbGATT_FORMAT_TYPE_UINT12 = 0x05, + cbGATT_FORMAT_TYPE_UINT16 = 0x06, + cbGATT_FORMAT_TYPE_UINT24 = 0x07, + cbGATT_FORMAT_TYPE_UINT32 = 0x08, + cbGATT_FORMAT_TYPE_UINT48 = 0x09, + cbGATT_FORMAT_TYPE_UINT64 = 0x0A, + cbGATT_FORMAT_TYPE_UINT128 = 0x0B, + cbGATT_FORMAT_TYPE_SINT8 = 0x0C, + cbGATT_FORMAT_TYPE_SINT12 = 0x0D, + cbGATT_FORMAT_TYPE_SINT16 = 0x0E, + cbGATT_FORMAT_TYPE_SINT24 = 0x0F, + cbGATT_FORMAT_TYPE_SINT32 = 0x10, + cbGATT_FORMAT_TYPE_SINT48 = 0x11, + cbGATT_FORMAT_TYPE_SINT64 = 0x12, + cbGATT_FORMAT_TYPE_SINT128 = 0x13, + cbGATT_FORMAT_TYPE_FLOAT32 = 0x14, + cbGATT_FORMAT_TYPE_FLOAT64 = 0x15, + cbGATT_FORMAT_TYPE_SFLOAT = 0x16, + cbGATT_FORMAT_TYPE_FLOAT = 0x17, + cbGATT_FORMAT_TYPE_DUINT16 = 0x18, + cbGATT_FORMAT_TYPE_UTF8S = 0x19, + cbGATT_FORMAT_TYPE_UTF16S = 0x1A, + cbGATT_FORMAT_TYPE_STRUCT = 0x1B, +} cbGATT_FormatType; + +typedef enum +{ + // This should map to ATT_TRole + cbGATT_ROLE_CLIENT = 0, + cbGATT_ROLE_SERVER = 1, + cbGATT_ROLE_BOTH = 2 +} cbGATT_Role; + +typedef enum +{ + cbGATT_NAMESPACE_BT_SIG = 0x01, +} cbGATT_Namespace; + +typedef enum +{ + cbGATT_NAMESPACE_DESC_UNKNOWN = 0x0000, +} cbGATT_NamespaceDesc; + +typedef struct +{ + cbGATT_FormatType format; + cb_uint8 exponent; + cbGATT_Unit unit; + cbGATT_Namespace gattNamespace; + cbGATT_NamespaceDesc namespaceDesc; +} cbGATT_CharFormat; + +// This enum must match ATT_TErrorCode for the first two parts +// (not the GATT specific) +typedef enum +{ + cbGATT_ERROR_CODE_OK = 0x00, + cbGATT_ERROR_CODE_INVALID_HANDLE = 0x01, + cbGATT_ERROR_CODE_READ_NOT_PERMITTED = 0x02, + cbGATT_ERROR_CODE_WRITE_NOT_PERMITTED = 0x03, + cbGATT_ERROR_CODE_INVALID_PDU = 0x04, + cbGATT_ERROR_CODE_INSUFFICIENT_AUTHENTICATION = 0x05, + cbGATT_ERROR_CODE_REQUEST_NOT_SUPPORTED = 0x06, + cbGATT_ERROR_CODE_INVALID_OFFSET = 0x07, + cbGATT_ERROR_CODE_INSUFFICIENT_AUTHORIZATION = 0x08, + cbGATT_ERROR_CODE_PREPARE_FULL_QUEUE = 0x09, + cbGATT_ERROR_CODE_ATTRIBUTE_NOT_FOUND = 0x0A, + cbGATT_ERROR_CODE_ATTRIBUTE_NOT_LONG = 0x0B, + cbGATT_ERROR_CODE_INSUFFICIENT_ENCRYPT_KEY_SIZE = 0x0C, + cbGATT_ERROR_CODE_INVALID_ATTRIBUTE_VALUE_LENGTH = 0x0D, + cbGATT_ERROR_CODE_UNLIKELY_ERROR = 0x0E, + cbGATT_ERROR_CODE_INSUFFICIENT_ENCRYPTION = 0x0F, + cbGATT_ERROR_CODE_UNSUPPORTED_GROUP_TPYE = 0x10, + cbGATT_ERROR_CODE_INSUFFICIENT_RESOURCES = 0x11, + + cbGATT_ERROR_CODE_OUT_OF_RANGE = 0xFF, + cbGATT_ERROR_CODE_PROCEDURE_ALREADY_IN_PROGRESS = 0xFE, + cbGATT_ERROR_CODE_IMPROPER_CLIENT_CHAR_CFG = 0xFD, + + // Special error codes not according to BT spec. + // Will never be sent over the air. + cbGATT_ERROR_CODE_TRANSACTION_TIMEOUT = 0x80, + cbGATT_ERROR_CODE_DISCONNECTED = 0x81, + cbGATT_ERROR_CODE_RELIABLE_CHECK_FAILED = 0x82, + cbGATT_ERROR_CODE_DELAYED_RSP = 0x83, +} cbGATT_ErrorCode; + + +typedef enum +{ + // This must map to ATT_TUuidFormat + cbGATT_UUID_16 = 0x01, + cbGATT_UUID_128 = 0x02 +} cbGATT_UuidFormat; + +typedef enum +{ + cbGATT_FINAL_DATA = 0x00, + cbGATT_MORE_DATA = 0x01, + cbGATT_CANCEL_DATA = 0x02 +} cbGATT_WriteLongCharFlag; + +typedef struct +{ + // This must map to ATT_TUuid + union + { + cb_uint16 uuid16; + cb_uint8 uuid128[16]; + }; + cbGATT_UuidFormat format; +} cbGATT_Uuid; + +/** + * Called when an ACL connection is established + * @param handle Connection handle + * @param errorCode Connect error code + * @param role TODO Add a proper type for role client/server master/slave central/peripheral + * @param peerBdAddress Address of remote device + * @param connInterval Connection interval + * @param connLatency Connection latency + * @param connTmo Connection timeout + * @param masterClkAccuracy Master clock accuracy + * @return None + */ +typedef void (*cbGATT_ConnComplEvt)( + TConnHandle handle, + TErrorCode errorCode, + cb_uint8 role, + TBdAddr peerBdAddress, + cb_uint16 connInterval, + cb_uint16 connLatency, + cb_uint16 connTmo, + cb_uint8 masterClkAccuracy); +/** + * Called when ACL connection is lost. + * @param handle Connection handle + * @param errorCode Disconnect error code + * @return None + */ +typedef void (*cbGATT_DisconnectEvt)( + TConnHandle handle, + TErrorCode errorCode); + + +/*=========================================================================== + * FUNCTIONS + *=========================================================================*/ + + + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_gatt_client.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_gatt_client.h new file mode 100644 index 00000000000..d41f6544229 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_gatt_client.h @@ -0,0 +1,652 @@ +/* + *--------------------------------------------------------------------------- + * Copyright (c) 2016, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Component GATT + * File cb_gatt_client.h + * + * Description Definitions and types for GATT client functionality + * + */ + +/** + * @file cb_gatt_client.h + * + * This file contains all GATT client functionality. There are some restrictions + * on how this API is used. + * - Pointer data in callbacks are only valid in the context of the callback + * - Only one request at a time should be done from each app(app handle). The + * app must wait until all responses from an outstanding request have been + * received. + * - In the callback of the request another request can not be done except when + * - The request is interrupted by setting the return value to FALSE + * or when in the last callback which contains an error code. + * - Most of the GATT requests can be interrupted by returning FALSE in the + * callback. + * + * See Bluetooth 4.0 specification for more info on GATT and ATT chapters: + * https://www.bluetooth.org/en-us/specification/adopted-specifications + * + */ + +#ifndef _CB_GATT_CLIENT_H_ +#define _CB_GATT_CLIENT_H_ + +#include "bt_types.h" +#include "cb_gatt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*============================================================================== + * TYPES + *============================================================================== + */ + +/** + * Callback for discover all primary services. This callback will be called + * for each primary service found. + * @param connHandle Connection handle + * @param errorCode cbGATT_ERROR_CODE_OK when succeeded + * cbGATT_ERROR_CODE_ATTRIBUTE_NOT_FOUND as last callback + * when search is finished. + * cbGATT_ERROR_CODE_ on failure + * @param startGroupHandle Start handle of the service + * @param endGroupHandle End handle of the service + * @param pUuid Pointer to UUID of the service + * @return TRUE to continue or FALSE to interrupt the search. + */ +typedef cb_boolean (*cbGATT_DiscoverAllPrimaryServicesCnf)( + TConnHandle connHandle, + cbGATT_ErrorCode errorCode, + cb_uint16 startGroupHandle, + cb_uint16 endGroupHandle, + cbGATT_Uuid* pUuid); + +/** + * Callback for discover all secondary services. This callback will be called + * for each secondary service found. + * @param connHandle Connection handle + * @param errorCode cbGATT_ERROR_CODE_OK when succeeded + * cbGATT_ERROR_CODE_ATTRIBUTE_NOT_FOUND as last callback + * when search is finished. + * cbGATT_ERROR_CODE on failure + * @param startGroupHandle Start handle of the service + * @param endGroupHandle End handle of the service + * @param pUuid Pointer to UUID of the service + * @return TRUE to continue or FALSE to interrupt the search. + */ +typedef cb_boolean (*cbGATT_DiscoverAllSecondaryServicesCnf)( + TConnHandle connHandle, + cbGATT_ErrorCode errorCode, + cb_uint16 startGroupHandle, + cb_uint16 endGroupHandle, + cbGATT_Uuid* pUuid); + +/** + * Callback for discover all primary services by UUID. This callback will be + * called for each primary service found. + * @param connHandle Connection handle + * @param errorCode cbGATT_ERROR_CODE_OK when succeeded + * cbGATT_ERROR_CODE_ATTRIBUTE_NOT_FOUND as last callback + * when search is finished. + * cbGATT_ERROR_CODE_* on failure + * @param startGroupHandle Start handle of the service + * @param endGroupHandle End handle of the service + * @return TRUE to continue or FALSE to interrupt the search. + */ +typedef cb_boolean (*cbGATT_DiscoverPrimaryServiceByUuidCnf)( + TConnHandle connHandle, + cbGATT_ErrorCode errorCode, + cb_uint16 startHandle, + cb_uint16 endHandle); + +/** + * Callback for find included services. This callback will be called + * for each service found. + * @param connHandle Connection handle + * @param errorCode cbGATT_ERROR_CODE_OK when succeeded + * cbGATT_ERROR_CODE_ATTRIBUTE_NOT_FOUND as last callback + * when search is finished. + * cbGATT_ERROR_CODE_* on failure + * @param startGroupHandle Start handle of the service + * @param endGroupHandle End handle of the service + * @param pUuid Pointer to UUID of the service + * @return TRUE to continue or FALSE to interrupt the search. + */ +typedef cb_boolean (*cbGATT_FindIncludedServicesCnf)( + TConnHandle connHandle, + cbGATT_ErrorCode errorCode, + cb_uint16 attrHandle, + cb_uint16 startGroupHandle, + cb_uint16 endGroupHandle, + cbGATT_Uuid* pUuid); + +/** + * Callback for discover all characteristics of service. This callback will + * be called for each characteristic found. + * @param connHandle Connection handle + * @param errorCode cbGATT_ERROR_CODE_OK when succeeded + * cbGATT_ERROR_CODE_ATTRIBUTE_NOT_FOUND as last callback + * when search is finished. + * cbGATT_ERROR_CODE_* on failure + * @param attrHandle Attribute handle of the characteristic + * @param properties Bitmap of properties of the characteristic. + * See cbGATT_PROP_*. + * @param valueHandle Attribute handle of the characteristic value. + * This is where the actual data is located. + * @param pUuid Pointer to UUID of the characteristic + * @return TRUE to continue or FALSE to interrupt the search. + */ +typedef cb_boolean (*cbGATT_DiscoverAllCharacteristicsOfServiceCnf)( + TConnHandle connHandle, + cbGATT_ErrorCode errorCode, + cb_uint16 attrHandle, + cb_uint8 properties, + cb_uint16 valueHandle, + cbGATT_Uuid* pUuid); + +/** + * Callback for discover all descriptors of a characteristic. This callback + * will be called for each descriptor found. + * @param connHandle Connection handle + * @param errorCode cbGATT_ERROR_CODE_OK when succeeded + * cbGATT_ERROR_CODE_ATTRIBUTE_NOT_FOUND as last callback + * when search is finished. + * cbGATT_ERROR_CODE_* on failure + * @param charAttrHandle Attribute handle of the characteristic + * @param attrHandle Attribute handle of the characteristic descriptor. + * @param pUuid Pointer to UUID of the descriptor + * @return TRUE to continue or FALSE to interrupt the search. + */ +typedef cb_boolean (*cbGATT_DiscoverAllCharacteristicDescriptorsCnf)( + TConnHandle connHandle, + cbGATT_ErrorCode errorCode, + cb_uint16 charAttrHandle, + cb_uint16 attrHandle, + cbGATT_Uuid* pUuid); + +/** + * Callback for read characteristic. This callback will be called for each + * data chunk read. + * The last callback will contain either an error code or moreToRead = FALSE + * @param connHandle Connection handle + * @param errorCode Error code, cbGATT_ERROR_CODE_OK when succeeded + * @param attrHandle Attribute handle of the characteristic + * @param pAttrValue Pointer to the read data chunk. + * @param length Length of the read data chunk + * @param moreToRead TRUE = more data to read from the characteristic + * FALSE = no more data to read + * @return TRUE to continue or FALSE to interrupt the search. + */ +typedef cb_boolean (*cbGATT_ReadCharacteristicCnf)( + TConnHandle connHandle, + cbGATT_ErrorCode errorCode, + cb_uint16 attrHandle, + cb_uint8* pAttrValue, + cb_uint16 length, + cb_boolean moreToRead); + +/** + * Callback for read characteristic by UUID. This callback will be called + * for each data chunk read. + * The last callback will contain either an error code or moreToRead = FALSE + * @param connHandle Connection handle + * @param errorCode Error code, cbGATT_ERROR_CODE_OK when succeeded + * @param attrHandle Attribute handle of the characteristic + * @param pAttrValue Pointer to the read data chunk. + * @param length Length of the read data chunk + * @param moreToRead TRUE = more data to read from the characteristic + * FALSE = no more data to read + * @return TRUE to continue or FALSE to interrupt the search. + */ +typedef cb_boolean (*cbGATT_ReadCharacteristicByUuidCnf)( + TConnHandle connHandle, + cbGATT_ErrorCode errorCode, + cb_uint16 attrHandle, + cb_uint8* pAttrValue, + cb_uint16 length, + cb_boolean moreToRead); + +// TODO to have or not?? +typedef void (*cbGATT_ReadLongCharacteristicCnf)( + TConnHandle connHandle, + cbGATT_ErrorCode errorCode, + cb_uint8* pAttrValue, + cb_uint16 length); + +/** + * Callback for read multiple characteristics. This callback will be called + * for each data chunk read. + * The last callback will contain either an error code or moreToRead = FALSE + * @param connHandle Connection handle + * @param errorCode Error code, cbGATT_ERROR_CODE_OK when succeeded + * @param pAttrValues Pointer to the read data chunk. + * @param length Length of the read data chunk + * @param moreToRead TRUE = more data to read from the characteristic(s) + * FALSE = no more data to read + * @return TRUE to continue or FALSE to interrupt the search. + */ +typedef cb_boolean (*cbGATT_ReadMultipleCharacteristicCnf)( + TConnHandle connHandle, + cbGATT_ErrorCode errorCode, + cb_uint8* pAttrValues, + cb_uint16 length, + cb_boolean moreToRead); + +/** + * Callback for write characteristic with response from the remote side + * @param connHandle Connection handle + * @param errorCode Error code, cbGATT_ERROR_CODE_OK when succeeded + */ +typedef void (*cbGATT_WriteCharacteristicCnf)( + TConnHandle connHandle, + cbGATT_ErrorCode errorCode); + +/** + * Callback for write characteristic with no response from the remote side + * @param connHandle Connection handle + * @param errorCode Error code, cbGATT_ERROR_CODE_OK when succeeded + */ +typedef void (*cbGATT_WriteCharacteristicNoRspCnf)( + TConnHandle connHandle, + cbGATT_ErrorCode errorCode); + +/** + * Callback for write characteristic configuration with response from the + * remote side. + * @param connHandle Connection handle + * @param errorCode Error code, cbGATT_ERROR_CODE_OK when succeeded + */ +typedef void (*cbGATT_WriteCharacteristicConfigCnf)( + TConnHandle connHandle, + cbGATT_ErrorCode errorCode); + +/** + * Callback for write long characteristic with response from the + * remote side. + * @param connHandle Connection handle + * @param errorCode Error code, cbGATT_ERROR_CODE_OK when succeeded + */ +typedef void (*cbGATT_WriteLongCharacteristicCnf)( + TConnHandle connHandle, + cbGATT_ErrorCode errorCode); + +/** +* Callback for receiving value indication. The client configuration + * notifications must have been enabled before this will be sent to the app. + * Note that the indication is replied by GATT when exiting the callback. + * @param connHandle Connection handle + * @param attrHandle Attribute handle of the indicated value + * @param pAttrValue Pointer to the value data + * @param length Length of the value data + */ +typedef void (*cbGATT_CharacteristicValueIndication)( + TConnHandle connHandle, + cb_uint16 attrHandle, + cb_uint8* pAttrValue, + cb_uint16 length); + +/** + * Callback for receiving value notification. The client configuration + * notifications must have been enabled before this will be sent to the app. + * @param connHandle Connection handle + * @param attrHandle Attribute handle of the notified value + * @param pAttrValue Pointer to the value data + * @param length Length of the value data + */ +typedef void (*cbGATT_CharacteristicValueNotification)( + TConnHandle connHandle, + cb_uint16 attrHandle, + cb_uint8* pAttrValue, + cb_uint16 length); + +typedef struct +{ + cbGATT_ConnComplEvt connComplEvt; + cbGATT_DisconnectEvt disconnectEvt; + cbGATT_DiscoverAllPrimaryServicesCnf discoverAllPrimaryServicesCnf; + cbGATT_DiscoverAllSecondaryServicesCnf discoverAllSecondaryServicesCnf; + cbGATT_DiscoverPrimaryServiceByUuidCnf discoverPrimaryServiceByUuidCnf; + cbGATT_FindIncludedServicesCnf findIncludedServicesCnf; + cbGATT_DiscoverAllCharacteristicsOfServiceCnf discoverAllCharacteristicsOfServiceCnf; + cbGATT_DiscoverAllCharacteristicDescriptorsCnf discoverAllCharacteristicDescriptorsCnf; + cbGATT_ReadCharacteristicCnf readCharacteristicCnf; + cbGATT_ReadCharacteristicByUuidCnf readCharacteristicByUuidCnf; + cbGATT_ReadLongCharacteristicCnf readLongCharacteristicCnf; + cbGATT_ReadMultipleCharacteristicCnf readMultipleCharacteristicCnf; + cbGATT_WriteCharacteristicCnf writeCharacteristicCnf; + cbGATT_WriteCharacteristicNoRspCnf writeCharacteristicNoRspCnf; + cbGATT_WriteCharacteristicConfigCnf writeCharacteristicConfigCnf; + cbGATT_WriteLongCharacteristicCnf writeLongCharacteristicCnf; +} cbGATT_ClientCallBack; + + +typedef struct +{ + cbGATT_CharacteristicValueIndication characteristicValueIndication; + cbGATT_CharacteristicValueNotification characteristicValueNotification; +} cbGATT_ClientNotIndCallBack; + +/*============================================================================= + * EXPORTED FUNCTIONS + *============================================================================= + */ + +/** + * Register a GATT client. This must be done before any GATT client + * functionality can be used. + * @param pCallBack Callback structure that should be provided by the app. Use + * NULL as pointer for callbacks that are not used. + * @param pAppHandle Pointer where to put created app handle + * @return cbGATT_OK if succeeded or cbGATT_ERROR when failed. + */ +cb_int32 cbGATT_registerClient( + const cbGATT_ClientCallBack* pCallBack, + cb_uint8* pAppHandle); + +/** + * Register a notification/indication handler for an attribute handle + * This is used when the application needs a specific handler for an + * attribute. This can be done first after connection setup. + * @param pCallBack Callback structure that should be provided by the app. Use + * NULL as pointer for callbacks that are not used. + * @param appHandle App handle + * @param attrHandle Attribute handle for the notification/indication to + * subscribe on. + * @param connHandle Connection handle + * @return cbGATT_OK if succeeded or cbGATT_ERROR when failed. + */ +cb_int32 cbGATT_registerNotIndHandler( + const cbGATT_ClientNotIndCallBack* pCallBack, + cb_uint8 appHandle, + cb_uint16 attrHandle, + TConnHandle connHandle); + +/** + * De-register a notification/indication handler. This is used when the + * app does not want to subscribe to the attribute handle any longer e.g. + * the client characteristic configuration has been disabled. The handler is + * automatically de-registered on disconnection. + * @param pCallBack Registered callback. + * @param appHandle App handle + * @param attrHandle Attribute handle for the notification/indication to + * subscribe on. + * @param connHandle Connection handle + * @return cbGATT_OK if succeeded or cbGATT_ERROR when failed. + */ +cb_int32 cbGATT_deregisterNotIndHandler( + const cbGATT_ClientNotIndCallBack* pCallBack, + cb_uint8 appHandle, + cb_uint16 attrHandle, + TConnHandle connHandle); + +/** + * Register a default notification/indication handler. This is used when the + * app wants to subscribe to all attribute handles notifications/indications + * for all connections. This can only be used by one app at a time. + * @param pCallBack Callback structure that should be provided by the app. Use + * NULL as pointer for callbacks that are not used. + * @return cbGATT_OK if succeeded or cbGATT_ERROR when failed. + */ +cb_int32 cbGATT_registerDefaultNotIndHandler( + const cbGATT_ClientNotIndCallBack* pCallBack); + +/** + * Discover all primary services. Results will be provided in the + * cbGATT_DiscoverAllPrimaryServicesCnf callback. + * @param connHandle Connection handle + * @param appHandle App handle + * @return cbGATT_OK if succeeded or cbGATT_ERROR when failed. + */ +cb_int32 cbGATT_discoverAllPrimaryServices( + TConnHandle connHandle, + cb_uint8 appHandle); + +/** + * Discover all secondary services. Results will be provided in the + * cbGATT_DiscoverAllSecondaryServicesCnf callback. + * @param connHandle Connection handle + * @param appHandle App handle + * @return cbGATT_OK if succeeded or cbGATT_ERROR when failed. + */ +cb_int32 cbGATT_discoverAllSecondaryServices( + TConnHandle connHandle, + cb_uint8 appHandle); + +/** + * Discover all primary services by UUID. This will filter out all results + * based on the UUID. Results will be provided in the + * cbGATT_DiscoverPrimaryServiceByUuidCnf callback. + * @param connHandle Connection handle + * @param pUuid Pointer to the 16 or 128 bits UUID to search for + * @param appHandle App handle + * @return cbGATT_OK if succeeded or cbGATT_ERROR when failed. + */ +cb_int32 cbGATT_discoverPrimaryServiceByUuid( + TConnHandle connHandle, + cbGATT_Uuid* pUuid, + cb_uint8 appHandle); + +/** + * Discover all characteristics of a service. The handles can be + * retrieved by doing a discover primary/secondary services request. Results + * will be provided in the cbGATT_DiscoverAllCharacteristicsOfServiceCnf + * callback. + * @param connHandle Connection handle + * @param startHandle Start handle of the service + * @param endHandle End handle of the service + * @param appHandle App handle + * @return cbGATT_OK if succeeded or cbGATT_ERROR when failed. + */ +cb_int32 cbGATT_discoverAllCharacteristicsOfService( + TConnHandle connHandle, + cb_uint16 startHandle, + cb_uint16 endHandle, + cb_uint8 appHandle); + +/** + * Find included services of a given service. The handles can be + * retrieved by doing a discover primary/secondary services request. Results + * will be provided in the cbGATT_FindIncludedServicesCnf callback. + * @param connHandle Connection handle + * @param startHandle Start handle of the service + * @param endHandle End handle of the service + * @param appHandle App handle + * @return cbGATT_OK if succeeded or cbGATT_ERROR when failed. + */ +cb_int32 cbGATT_findIncludedServices( + TConnHandle connHandle, + cb_uint16 startHandle, + cb_uint16 endHandle, + cb_uint8 appHandle); + +/** + * Discover all descriptors of a characteristic. The handles can be + * retrieved by doing a cbGATT_discoverAllCharacteristicsOfService. Results + * will be provided in the cbGATT_DiscoverAllCharacteristicDescriptorsCnf. + * callback. If the app wants to do a discover characteristics by UUID this + * function can be used and in the callback filter on UUID. + * @param connHandle Connection handle + * @param valueHandle Handle of the characteristic value + * @param serviceEndHandle End handle of the service which the characteristic + * belongs to. + * @param appHandle App handle + * @return cbGATT_OK if succeeded or cbGATT_ERROR when failed. + */ +cb_int32 cbGATT_discoverAllCharacteristicDescriptors( + TConnHandle connHandle, + cb_uint16 valueHandle, + cb_uint16 serviceEndHandle, + cb_uint8 appHandle); + +/** + * Read characteristic/descriptor value. The handles can be retrieved by + * doing a cbGATT_discoverAllCharacteristicsOfService or + * cbGATT_discoverAllCharacteristicDescriptors. Results will be provided in + * the cbGATT_ReadCharacteristicCnf callback. + * @param connHandle Connection handle + * @param attrHandle Handle of the attribute value + * @param offset Offset where to start read from + * @param appHandle App handle + * @return cbGATT_OK if succeeded or cbGATT_ERROR when failed. + */ +cb_int32 cbGATT_readCharacteristic( + TConnHandle connHandle, + cb_uint16 attrHandle, + cb_uint16 offset, + cb_uint8 appHandle); + +/** + * Read characteristic/descriptor value by UUID. The app can search the whole + * database by using cbGATT_MIN_ATTR_HANDLE and cbGATT_MAX_ATTR_HANDLE. + * Results will be provided in the cbGATT_ReadCharacteristicByUuidCnf + * callback. + * @param connHandle Connection handle + * @param startHandle Handle, where to start looking for the UUID + * @param endHandle Handle, where to stop looking for the UUID + * @param pUuid Pointer to the 16 or 128 bits UUID + * @param appHandle App handle + * @return cbGATT_OK if succeeded or cbGATT_ERROR when failed. + */ +cb_int32 cbGATT_readCharacteristicByUuid( + TConnHandle connHandle, + cb_uint16 startHandle, + cb_uint16 endHandle, + cbGATT_Uuid* pUuid, + cb_uint8 appHandle); + +// Used for reading long characteristics value or descriptor +// TODO is this function necessary, because cbGATT_readCharacteristic will read long if needed +cb_int32 cbGATT_readLongCharacteristic( + TConnHandle connHandle, + cb_uint16 attrHandle, + cb_uint8* pDest, + cb_uint8 appHandle); + + +/** + * Read multiple characteristics in a single read. The app must know the + * length of each data element in the returned list. Therefore only the last + * data element may have a variable length. + * Results will be provided in the cbGATT_ReadMultipleCharacteristicCnf + * callback. + * @param connHandle Connection handle + * @param pAttrHandleList Pointer to a list of attribute handles + * @param nbrOfHandles Number of attribute handles in pAttrHandleList + * @param appHandle App handle + * @return cbGATT_OK if succeeded or cbGATT_ERROR when failed. + */ +cb_int32 cbGATT_readMultipleCharacteristic( + TConnHandle connHandle, + cb_uint16* pAttrHandleList, + cb_uint16 nbrOfHandles, + cb_uint8 appHandle); + +/** + * Write characteristic/descriptor and wait for response from remote side. + * Results will be provided in the cbGATT_WriteCharacteristicCnf + * callback. + * @param connHandle Connection handle + * @param attrHandle Attribute handle of the value + * @param pData Pointer to the data byte sequence + * @param length Number of bytes to write + * @param appHandle App handle + * @return cbGATT_OK if succeeded or cbGATT_ERROR when failed. + */ +cb_int32 cbGATT_writeCharacteristic( + TConnHandle connHandle, + cb_uint16 attrHandle, + cb_uint8* pData, + cb_uint16 length, + cb_uint8 appHandle); + +/** + * Write client/server characteristic/descriptor configuration. + * cbGATT_writeCharacteristic can also be used instead of this function. + * Results will be provided in the cbGATT_WriteCharacteristicConfigCnf + * callback. + * @param connHandle Connection handle + * @param attrHandle Attribute handle of the value + * @param config Configuration i.e. cbGATT_CLIENT_CFG_* or + * cbGATT_SERVER_CFG_* + * @param appHandle App handle + * @return cbGATT_OK if succeeded or cbGATT_ERROR when failed. + */ +cb_int32 cbGATT_writeCharacteristicConfig( + TConnHandle connHandle, + cb_uint16 attrHandle, + cb_uint16 config, + cb_uint8 appHandle); + +/** + * Write characteristic/descriptor with no response from remote side. + * Results will be provided in the cbGATT_WriteCharacteristicNoRspCnf + * callback. + * @param connHandle Connection handle + * @param attrHandle Attribute handle of the value + * @param pData Pointer to the data byte sequence + * @param length Number of bytes to write + * @param pSignature Pointer to encrypted signature which is checked by the + * server. If the check fails the write is discarded. + * The devices must be bonded and CSRK exchanged. Use NULL + * when no signature is being used. + * @param appHandle App handle + * @return cbGATT_OK if succeeded or cbGATT_ERROR when failed. + */ +cb_int32 cbGATT_writeCharacteristicNoRsp( + TConnHandle connHandle, + cb_uint16 attrHandle, + cb_uint8* pData, + cb_uint16 length, + cb_uint8* pSignature, + cb_uint8 appHandle); + +/** + * Write long characteristic/descriptor and wait for response from remote + * side. Results will be provided in the cbGATT_WriteLongCharacteristicCnf + * callback. + * @param connHandle Connection handle + * @param attrHandle Attribute handle of the value + * @param pData Pointer to the data byte sequence + * @param length Number of bytes to write + * @param reliable TRUE = the data will be sent back to client and + * checked by GATT. + * FALSE = no check of data + * @param flag Flag which is used when sending several packets + * or when data is canceled. If sending several packets all + * but the last packet should set the flag to more data. + * The last data packet should set the flag to final. + * @param offset Offset of the data to write. Is used when several packets + * need to be sent to write a complete data value. + * @param appHandle App handle + * @return cbGATT_OK if succeeded or cbGATT_ERROR when failed. + */ +cb_int32 cbGATT_writeLongCharacteristic( + TConnHandle connHandle, + cb_uint16 attrHandle, + cb_uint8* pData, + cb_uint16 length, + cb_boolean reliable, + cbGATT_WriteLongCharFlag flag, + cb_uint16 offset, + cb_uint8 appHandle); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_gatt_server.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_gatt_server.h new file mode 100644 index 00000000000..23656acb8aa --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_gatt_server.h @@ -0,0 +1,329 @@ +/*------------------------------------------------------------------------------ + * Copyright (c) 2016, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. +*------------------------------------------------------------------------------ +* Component: GATT +* File : cb_gatt_server.h +* +* Description: +* GATT server functionality +*------------------------------------------------------------------------------ +*/ + +/** + * @file cb_gatt_server.h + * + * @brief GATT server functionality + */ + +#ifndef _CB_GATT_SERVER_H_ +#define _CB_GATT_SERVER_H_ + +#include "bt_types.h" +#include "cb_gatt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*============================================================================== + * CONSTANTS + *============================================================================== + */ + +#define cbGATT_RD_SEC_NONE 0x01 +#define cbGATT_RD_SEC_UNAUTH 0x02 +#define cbGATT_RD_SEC_AUTH 0x04 +#define cbGATT_WR_SEC_NONE 0x10 +#define cbGATT_WR_SEC_UNAUTH 0x20 +#define cbGATT_WR_SEC_AUTH 0x40 + +#define cbGATT_NBR_OF_ATTR_OF_SERVICE(x) (sizeof(x)/sizeof(cbGATT_Attribute)) + +#define cbGATT_APP_START_SERVICE_HANDLE 1024 + +/*============================================================================== + * TYPES + *============================================================================== + */ + +/** + * Attribute database entry + * @param pUuid 16 or 128-bits UUID + * @param uuidFormat Format of the pUuid + * @param properties Properties see cbGATT_PROP_* in cb_gatt.h + * @param security Read/write security properties for this characteristic see cbGATT_WR_SEC_* and cbGATT_RD_SEC_* + * @param pvValue1 Depends on pUuid, see below + * cbGATT_CHAR_EXT_PROP - properties as cb_uint32 + * cbGATT_CLIENT_CHAR_CONFIG - callback that is called when remote device reads the client config, cbGATT_ServerReadClientConfig + * cbGATT_SERVER_CHAR_CONFIG - callback that is called when remote device reads the server config, cbGATT_ServerReadServerConfig + * cbGATT_CHAR_FORMAT - Pointer to cbGATT_CharFormat + * cbGATT_CHAR_USER_DESC and all other CHARACTERISTICS value - cbGATT_ServerReadAttr callback + * cbGATT_INCLUDE_DECL - Pointer to inlcuded service cbGATT_Attribute + * @param pvValue2 Depends on pUuid, see below + * cbGATT_CLIENT_CHAR_CONFIG - callback that is called when remote device writes the client config cbGATT_ServerWriteClientConfig + * cbGATT_CLIENT_CHAR_CONFIG - callback that is called when remote device writes the client config cbGATT_ServerWriteClientConfig + * cbGATT_SERVER_CHAR_CONFIG - callback that is called when remote device writes the server config cbGATT_ServerWriteServerConfig + * cbGATT_CHAR_USER_DESC and all other CHARACTERISTICS value - cbGATT_ServerWriteAttr callback + * @param pAttrHandle Pointer where to write the attribute handle in case it's needed by the app. + * If not needed, pass NULL. Will be written after the service has been added. + */ +typedef struct +{ + void* pUuid; + cbGATT_UuidFormat uuidFormat; + cb_uint8 properties; + cb_uint8 security; + void* pvValue1; + void* pvValue2; + cb_uint16* pAttrHandle; +} cbGATT_Attribute; + +/** + * Callback is called when the indication has been confirmed. + * @param connHandle Connection handle + * @param attrHandle Handle of the attribute value + * @param errorCode cbGATT_ERROR_CODE_OK when succeeded + */ +typedef void (*cbGATT_CharacteristicValueIndicationCnf)( + TConnHandle connHandle, + cb_uint16 attrHandle, + cbGATT_ErrorCode errorCode); + +/** + * Callback is called when the notification has been sent. + * @param connHandle Connection handle + * @param errorCode cbGATT_ERROR_CODE_OK when succeeded + */ +typedef void (*cbGATT_CharacteristicValueNotificationCnf)( + TConnHandle connHandle, + cbGATT_ErrorCode errorCode); + +/** + * Callback is called when the GATT client has commited a write long + * @param connHandle Connection handle + * @param commit TRUE = commit, FALSE = cancel + * @return cbGATT_ERROR_CODE_OK if accepted or some cbGATT_ERROR_CODE_* code when failed. + */ +typedef cbGATT_ErrorCode (*cbGATT_CharacteristicWriteLongCommitEvt)( + TConnHandle connHandle, + cb_boolean commit); + +// Callbacks to use in server table + +/** + * Callback is called when the client is reading an attribute + * @param connHandle Connection handle + * @param attrHandle Handle of the attribute value + * @param pAttr Pointer to attribute record + * @param pAttrValue Pointer where to put the read data + * @param pLength Pointer where to put the read length. + * @param maxLength Max number of bytes that is allowed for pAttrValue + * @param offset The offset of the read data + * @return cbGATT_ERROR_CODE_OK if accepted or some cbGATT_ERROR_CODE_* code when failed. + */ +typedef cbGATT_ErrorCode (*cbGATT_ServerReadAttr)( + TConnHandle connHandle, + cb_uint16 attrHandle, + cbGATT_Attribute* pAttr, + cb_uint8* pAttrValue, + cb_uint16* pLength, + cb_uint16 maxLength, + cb_uint16 offset); + +/** + * Callback is called when the client is writing an attribute. + * If the application wants to send the response later it can + * return the cbGATT_ERROR_CODE_DELAYED_RSP error code and call cbGATT_writeRsp + * when ready. + * @param connHandle Connection handle + * @param attrHandle Handle of the attribute value + * @param pAttr Pointer to attribute record + * @param pAttrValue Pointer where to get the data + * @param length The length. + * @param writeMethod Which write method the client is using. + * This depends on the properties in the attribute table. + * @param offset The offset of the written data + * @return cbGATT_ERROR_CODE_OK if accepted or some cbGATT_ERROR_CODE_* code when failed. + */ +typedef cbGATT_ErrorCode (*cbGATT_ServerWriteAttr)( + TConnHandle connHandle, + cb_uint16 attrHandle, + cbGATT_Attribute* pAttr, + cb_uint8* pAttrValue, + cb_uint16 length, + cbGATT_WriteMethod writeMethod, + cb_uint16 offset); + +/** + * Callback is called when the client is reading the client config + * @param connHandle Connection handle + * @param attrHandle Handle of the attribute value + * @param pConfig Pointer where to write the config + * @return cbGATT_ERROR_CODE_OK if accepted or some cbGATT_ERROR_CODE_* code when failed. + */ +typedef cbGATT_ErrorCode (*cbGATT_ServerReadClientConfig)( + TConnHandle connHandle, + cb_uint16 attrHandle, + cb_uint16* pConfig); + +/** + * Callback is called when the client is writing the client config + * @param connHandle Connection handle + * @param attrHandle Handle of the attribute value + * @param config The config to be stored + * @param writeMethod Which write method the client is using. + * This depends on the properties in the attribute table. + * @return cbGATT_ERROR_CODE_OK if accepted or some cbGATT_ERROR_CODE_* code when failed. + */ +typedef cbGATT_ErrorCode (*cbGATT_ServerWriteClientConfig)( + TConnHandle connHandle, + cb_uint16 attrHandle, + cb_uint16 config, + cbGATT_WriteMethod writeMethod); + +/** + * Callback is called when the client is reading the server config + * @param connHandle Connection handle + * @param attrHandle Handle of the attribute value + * @param pConfig Pointer where to write the config + * @return cbGATT_ERROR_CODE_OK if accepted or some cbGATT_ERROR_CODE_* code when failed. + */ +typedef cbGATT_ErrorCode (*cbGATT_ServerReadServerConfig)( + TConnHandle connHandle, + cb_uint16 attrHandle, + cb_uint16* pConfig); + +/** + * Callback is called when the client is writing the server config + * @param connHandle Connection handle + * @param attrHandle Handle of the attribute value + * @param config The config to be stored + * @param writeMethod Which write method the client is using. + * This depends on the properties in the attribute table. + * @return cbGATT_ERROR_CODE_OK if accepted or some cbGATT_ERROR_CODE_* code when failed. + */ +typedef cbGATT_ErrorCode (*cbGATT_ServerWriteServerConfig)( + TConnHandle connHandle, + cb_uint16 attrHandle, + cb_uint16 config, + cbGATT_WriteMethod writeMethod); + +typedef struct +{ + cbGATT_ConnComplEvt connComplEvt; + cbGATT_DisconnectEvt disconnectEvt; + cbGATT_CharacteristicValueIndicationCnf characteristicValueIndicationCnf; + cbGATT_CharacteristicValueNotificationCnf characteristicValueNotificationCnf; + cbGATT_CharacteristicWriteLongCommitEvt characteristicWriteLongCommitEvt; +} cbGATT_ServerCallBack; + + +/*============================================================================= + * EXPORTED FUNCTIONS + *============================================================================= + */ + +/** + * Register server callbacks + * @param pCallBack Server callback + * @param pAppHandle Where to store app handle + * @return cbGATT_OK if succeeded or cbGATT_ERROR when failed. + */ +cb_int32 cbGATT_registerServer( + const cbGATT_ServerCallBack* pCallBack, + cb_uint8* pAppHandle); + +/** + * Deregister all server callbacks + * @return cbGATT_OK if succeeded or cbGATT_ERROR when failed. + */ +cb_int32 cbGATT_deregisterAllServers(void); + +/** + * Send notification to GATT client. The characteristicValueNotificationCnf + * callback will be called when finished and a new notification can be sent. + * The client config notification must have been enabled by the GATT client + * before an notification can be sent. + * @param connHandle Connection handle + * @param attrHandle Handle of the attribute value + * @param pData Pointer to data to send + * @param length Length of pData + * @param appHandle App handle + * @return cbGATT_OK if succeeded or some cbGATT_ERROR* when failed. + */ +cb_int32 cbGATT_notification( + TConnHandle connHandle, + cb_uint16 attrHandle, + cb_uint8* pData, + cb_uint16 length, + cb_uint8 appHandle); + +/** + * Send indication to GATT client. The characteristicValueIndicationCnf + * callback will be called when finished and a new indication can be sent. + * The client config indication must have been enabled by the GATT client + * before an indication can be sent. + * @param connHandle Connection handle + * @param attrHandle Handle of the attribute value + * @param pData Pointer to data to send + * @param length Length of pData + * @param appHandle App handle + * @return cbGATT_OK if succeeded or some cbGATT_ERROR* when failed. + */ +cb_int32 cbGATT_indication( + TConnHandle connHandle, + cb_uint16 attrHandle, + cb_uint8* pData, + cb_uint16 length, + cb_uint8 appHandle); + +/** + * Delay write respone to client, see cbGATT_ServerWriteAttr + * @param connHandle Connection handle + * @param attrHandle Handle of the attribute value + * @param errorCode Error code, use cbGATT_ERROR_CODE_OK if OK otherwise some cbGATT_ERROR_CODE_* + * @return cbGATT_OK if succeeded or some cbGATT_ERROR* when failed. + */ +cb_int32 cbGATT_writeRsp( + TConnHandle connHandle, + cb_uint16 attrHandle, + cb_uint8 errorCode); // For delayed write responses + +/** + * Add service list to attribute database + * @param pAttrList Attribute list + * @param attrListSize Size of the attribute list + * @param startHandle Start handle. Note that startHandle for the application + * should start at lowest 1024, cbGATT_APP_START_SERVICE_HANDLE. + * 1-1023 is reserved for GATT/GAP and other u-blox services. + * @return cbGATT_OK if succeeded or some cbGATT_ERROR* when failed. + */ +cb_int32 cbGATT_addService( + const cbGATT_Attribute* pAttrList, + cb_uint16 attrListSize, + cb_int16 startHandle); + +/** + * NOTE: Only for tests + * Free all services. Use with care since this will also remove GATT and GAP services. + * @return cbGATT_OK if succeeded or some cbGATT_ERROR* when failed. + */ +cb_int32 cbGATT_freeServices(void); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_gatt_utils.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_gatt_utils.h new file mode 100644 index 00000000000..248a7511e05 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_gatt_utils.h @@ -0,0 +1,104 @@ +/* + *--------------------------------------------------------------------------- + * Copyright (c) 2016, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Component : GATT + * File : cb_gatt_utils.h + * + * Description : Helper functions for GATT + * + *-------------------------------------------------------------------------*/ + +/** + * @file cb_gatt_utils.h + * + * @brief Helper functions for GATT + */ + +#ifndef _CB_GATT_UTILS_H_ +#define _CB_GATT_UTILS_H_ + +#include "cb_comdefs.h" +#include "bt_types.h" +#include "cb_gatt.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*============================================================================= + * FUNCTIONS + *============================================================================= + */ + +/** + * Returns a string representing the error code. NULL if the error code is + * not found. + * @param errorCode GATT error code + */ +cb_char* cbGATT_UTILS_getStringFromErrorCode( + cbGATT_ErrorCode errorCode); + +/** + * Returns a string representing the GATT/ATT properties for a characteristic. + * @param properties Bitmap of properties see cbGATT_PROP_* + */ +cb_char* cbGATT_UTILS_getStringFromProperties( + cb_uint8 properties); + +/** + * Returns a string representing the UUID. NULL if the UUID is not + * found. + * @param pUuid Pointer to 128 or 16-bit UUID + */ +cb_char* cbGATT_UTILS_getStringFromUuid( + cbGATT_Uuid* pUuid); + +/** + * Returns a string representing the UUID as hex bytes. + * @param pUuid Pointer to 128 or 16-bit UUID + * @param resultStr Allocated buffer to put hex string in. + * Should fit 16*2+1 = 33 bytes + */ +cb_char* cbGATT_UTILS_getHexStringFromUuid( + cbGATT_Uuid* pUuid, + cb_char* resultStr); + +/** + * Returns a string representing the data as hex bytes. + * @param pData Pointer to data + * @param len Length of data + * @param resultStr Pointer to allocated buffer to put hex string in. + * Should fit len*2+1 bytes + */ +cb_char* cbGATT_UTILS_dataToHex( + cb_uint8* pData, + cb_uint16 len, + cb_char* resultStr); + +/** + * Reverse bytes + * @param src Pointer to data to reverse bytes for + * @param nbrOfBytes Length of src + */ +void cbGATT_UTILS_reverseBytes( + cb_uint8* src, + cb_uint16 nbrOfBytes); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_hw.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_hw.h new file mode 100644 index 00000000000..b0b3f5cba55 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_hw.h @@ -0,0 +1,146 @@ +/*--------------------------------------------------------------------------- + * Copyright (c) 2016, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Component: CB HW + * File : cb_hw.h + * + * Description: Setup of hardware. + * TODO clean up this interface.. + *-------------------------------------------------------------------------*/ + +#ifndef _CB_HW_H_ +#define _CB_HW_H_ + +#include "cb_comdefs.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*=========================================================================== + * DEFINES + *=========================================================================*/ +typedef enum { + cbHW_PCB_VERSION_UNKNOWN, + cbHW_PCB_VERSION_1, + cbHW_PCB_VERSION_2, + cbHW_PCB_VERSION_3, + cbHW_PCB_VERSION_4, + cbHW_PCB_VERSION_5 +} cbHW_PCBVersion; + +typedef enum { + cbHW_RESET_REASON_UNKNOWN = 0, + cbHW_RESET_REASON_FW_UPDATE, + cbHW_RESET_REASON_PRODUCTION_MODE +}cbHW_ResetReason; + +typedef enum { + cbHW_FLOW_CONTROL_DISABLED = 0, + cbHW_FLOW_CONTROL_ENABLED +} cbHW_FlowControl; + +typedef enum { + cbHW_IRQ_HIGH = 2U, + cbHW_IRQ_MEDIUM = 3U, + cbHW_IRQ_DEFAULT = 5U, + cbHW_IRQ_LOW = 12U +}cbHW_PRIO_LVL; + +/*=========================================================================== + * TYPES + *=========================================================================*/ + +typedef void (*cbHW_StopModeStatusEvt)(cb_boolean enable); +typedef void (*cbHW_SysTickCb)(void); + +/*=========================================================================== + * FUNCTIONS + *=========================================================================*/ + +void cbHW_init(void); +void cbHW_registerStopModeStatusEvt(cbHW_StopModeStatusEvt evt); +void cbHW_disableIrq(void); +void cbHW_disableAllIrq(void); // Should not be used unless extremely critical +void cbHW_enableIrq(void); +void cbHW_enterSleepMode(void); +void cbHW_enterStopMode(void); +void cbHW_setWakeupEvent(void); +void cbHW_resetWakeupEvent(void); + +/** + * Wait for specified amount of microseconds. May be interrupt dependent. + * @note Granularity may vary between systems. Will be at least systick based. + * The system may go to sleep during the delay. + * + * @param us Time to delay in microseconds. + */ +void cbHW_delay(cb_uint32 us); + +/** +* Wait for specified amount of microseconds using a software loop. +* @note Granularity may vary between systems. +* The system will not go to sleep during the delay. +* +* @param us Time to delay in microseconds. +*/ +void cbHW_softDelay(cb_uint32 us); +cb_boolean cbHW_sysFreqIsSupported(cb_uint32 sysFreq); +void cbHW_setSysFreq(cb_uint32 sysFreq); +cb_uint32 cbHW_getSysFreq(void); +void cbHW_writeBackupRegister(cb_uint32 registerId, cb_uint32 value); +cb_uint32 cbHW_readBackupRegister(cb_int32 registerId); +void cbHW_getHWId(cb_uint8 uid[12]); +cbHW_PCBVersion cbHW_getPCBVersion(void); + +/** +* Register a system tick callback. +* The system tick will be generated once evert millisecond. +* +* @param cb Callback function for the system tick timer. +*/ +void cbHW_registerSysTickISRCallback(cbHW_SysTickCb cb); + +/** +* Get the current tick frequency for the @ref cbHW_getTicks tick counter. +* @note The frequency may be altered with different system clocks and power modes. +* +* @return The current tick frequency. +*/ +cb_uint32 cbHW_getTickFrequency(void); + +/** +* Get the current value of the tick counter. +* Time base in @ref cbHW_getTickFrequency. +* @note The value may wrap. +* +* @return The current tick counter. +*/ +cb_uint32 cbHW_getTicks(void); + +void cbHW_forceBoot(cb_uint32 address, cb_uint32 baudrate); +void cbHW_enterProductionMode(cbHW_FlowControl flowControl); +cbHW_ResetReason cbHW_resetReason(void); +cbHW_FlowControl cbHW_flowControl(void); + +void cbHW_enableAllIrq(void); + +#ifdef __cplusplus +} +#endif + +#endif + + diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_main.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_main.h new file mode 100644 index 00000000000..b0b30a9294b --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_main.h @@ -0,0 +1,131 @@ +/*--------------------------------------------------------------------------- + * Copyright (c) 2016, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Component: Main for WiFi-driver and BT stack + * File : cb_main.h + * + * Description : + *-------------------------------------------------------------------------*/ + +#ifndef _CB_MAIN_H_ +#define _CB_MAIN_H_ + +#include "bt_types.h" +#include "cb_bt_man.h" +#include "cb_wlan.h" +#include "mbed_events.h" + +/*=========================================================================== + * DEFINES + *=========================================================================*/ +#define cbMAIN_TARGET_INVALID_ID -1 + +/*=========================================================================== + * TYPES + *=========================================================================*/ +typedef struct +{ + TBdAddr address; /** Bluetooth address that shall be assigned to controller. Pass invalidBdAddress to use controller default address*/ + cbBM_LeRole leRole; /** Bluetooth low energy role */ + cb_int8 maxOutputPower; /** Maximum output power. */ + cb_uint32 maxLinkKeysClassic; /** Max number of CLASSIC link keys */ + cb_uint32 maxLinkKeysLe; /** Max number of link keys BLE*/ +} cbMAIN_BtInitParams; + +typedef void(*cbMAIN_ErrorHandler)( + cb_int32 errorCode, + const cb_char* filename, + cb_uint32 line); + +/*--------------------------------------------------------------------------- +* Callback to indicate that initialization of BT stack is completed. +*-------------------------------------------------------------------------*/ +typedef void(*cbMAIN_initBtComplete)(void); + +/*=========================================================================== + * FUNCTIONS + *=========================================================================*/ + +/** +* Initialize OS, timers, GPIO's, heap and OTP. +* +* @return void +*/ +extern void cbMAIN_initOS(void); + +/** +* Start Bluetooth HW. +* +* @param pInitParameters Initial configuration parameters. These parameters can +* not be changed once Bluetooth has been started. +* @param callback Will be invoked when initialisation is done. +* @return void +*/ +extern void cbMAIN_initBt(cbMAIN_BtInitParams *pInitParameters, cbMAIN_initBtComplete callback); + +/** +* Initialize WLAN component. +* @return Port specific TARGET identifier +*/ +extern cb_int32 cbMAIN_initWlan(void); + +/** +* Start WLAN component. +* Create WLAN driver instance, bind it to targetId and start the driver. +* +* @param targetId Port specific TARGET identifier. +* @param params Start parameters passed to WLAN driver instance. +* @return cbSTATUS_OK if successful, otherwise cbSTATUS_ERROR. +*/ +extern cb_int32 cbMAIN_startWlan(cb_int32 targetId, cbWLAN_StartParameters *params); + +/** +* Register error handler function. +* +* @param errHandler Function to be invoked in case of error. +* @return void +*/ +extern void cbMAIN_registerErrorHandler(cbMAIN_ErrorHandler errHandler); + +/** +* Start driver OS. This must be called after all cbMAIN_initOS/cbMAIN_initBt/cbMAIN_initWlan +* to start the driver thread. +* +* @return void +*/ +extern void cbMAIN_startOS(void); + +/** +* Get event queue. Used for running a function in the same thread context as the driver. +* Can not be called before cbMAIN_initOS/cbMAIN_initBt/cbMAIN_initWlan. +* @return EventQueue Pointer to the event queue where function calls can be enqueued. +*/ +extern EventQueue* cbMAIN_getEventQueue(void); + +/** +* Lock driver from usage. This must be used if a C API function is used outside of the driver thread context. +* The driver should only be locked for as small time as possible. +* @return void +*/ +extern void cbMAIN_driverLock(void); + +/** +* Unlock driver. used when the C API function has finished executing to release the driver for others to use. +* +* @return void +*/ +extern void cbMAIN_driverUnlock(void); + +#endif /*_CB_MAIN_H_*/ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_otp.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_otp.h new file mode 100644 index 00000000000..0ae615bd265 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_otp.h @@ -0,0 +1,68 @@ +/*--------------------------------------------------------------------------- + * Copyright (c) 2016, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Component : OTP + * File : cb_otp.h + * + * Description : Support for One Time Programmable memory intended for + * storing production parameters such as mac addresses, trim + * values and product configuration. Writing to OTP memory shall + * only be done in a production environment. + *-------------------------------------------------------------------------*/ + +/** + * @file cb_otp.h + * @ingroup platform + */ + +#ifndef _CB_OTP_H_ +#define _CB_OTP_H_ + +#include "cb_comdefs.h" +#include "cb_status.h" + +#define cbOTP_MAX_SIZE (30) + +#ifdef __cplusplus +extern "C" { +#endif + +typedef enum +{ + cbOTP_MAC_BLUETOOTH = 1, + cbOTP_MAC_WLAN, + cbOTP_MAC_ETHERNET, + cbOTP_MAC_FEATURE_INFO, + cbOTP_MAC_DEBUG_UNIT, + cbOTP_SERIAL_NUMBER, + cbOTP_TYPE_CODE, + cbOTP_RESERVED_UNUSED = 255 +} cbOTP_Id; + + +/** + * Read a OTP parameter + * @param id The id of the parameter to write + * @param len The length of the parameter to write + * @param buf Pointer to data to be written + * @returns The read length of the id is returned. If the read fails 0 is returned + */ +cb_uint32 cbOTP_read(cbOTP_Id id, cb_uint32 len, cb_uint8 *buf); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_platform_basic_types.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_platform_basic_types.h new file mode 100644 index 00000000000..c64e2c7b7cc --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_platform_basic_types.h @@ -0,0 +1,130 @@ +/*--------------------------------------------------------------------------- + * Copyright (c) 2016, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Component : Wireless LAN driver + * File : cb_types.h + * + * Description : Common definitions for a GCC compatible compiler. + *-------------------------------------------------------------------------*/ + +/** + * @file cb_types.h Defines type required for the entire driver. + * The defines in this file will have to be adapted for the platform. + * @ingroup platform + */ + +#ifndef _CB_PLATFORM_BASIC_TYPES_H_ +#define _CB_PLATFORM_BASIC_TYPES_H_ + +#include +#include + +/*=========================================================================== + * TYPES + *=========================================================================*/ + +/*=========================================================================== + * COMMON SYSTEM DEFINES + *=========================================================================*/ + +typedef int8_t cb_int8; +typedef int16_t cb_int16; +typedef int32_t cb_int32; +typedef int64_t cb_int64; + +typedef uint8_t cb_uint8; +typedef uint16_t cb_uint16; +typedef uint32_t cb_uint32; +typedef uint64_t cb_uint64; + +typedef bool cb_boolean; +typedef char cb_char; +typedef int cb_int; + +/** + * Used when declaring an empty array that does not take up space in a struct. + * Example: struct { cb_uint8 payload[cb_EMPTY_ARRAY]; } + * In some compilers this is empty i.e. payload[]. While in some it requires a zero. + * I.e. payload[0]; + * Use this define to get it working for your system. + */ +#define cb_EMPTY_ARRAY (0) + +/*=========================================================================== + * DEFINES + *=========================================================================*/ + +/** + * Used in function definitions to declare an input parameter unused to avoid warnings. + */ +#if defined(__GNUC__) || defined(__clang__) || defined(__CC_ARM) +#define cb_UNUSED(x) UNUSED_ ## x __attribute__((unused)) +#else +#define cb_UNUSED(x) UNUSED_ ## x +#endif + + +/** + * Define cb_ASSERT to the wanted assert handler. + */ +/* +#define cb_ASSERT(exp) do { if (!(exp)) { \ + W_PRINT("ASSERT %s:%d\n", __FILE__, __LINE__); \ + while(1); \ + } } while(0) +*/ +#include "cb_assert.h" + + +/**@{*/ +/** + * Packed struct defines. + * - cb_PACKED_STRUCT_ATTR_PRE is used before the typedef'ed struct declaration. + * - cb_PACKED_STRUCT_ATTR_INLINE_PRE is after the typedef but before the struct declaration. + * - cb_PACKED_STRUCT_ATTR_INLINE_POST is used after the struct declaration but before the typedef'ed name. + * - cb_PACKED_STRUCT_ATTR_POST is used after the entire struct declaration. + * + * example: + * cb_PACKED_STRUCT_ATTR_PRE + * typedef cb_PACKED_STRUCT_ATTR_INLINE_PRE struct myPackedStruct { + * int a; + * int b; + * } cb_PACKED_STRUCT_ATTR_INLINE_POST myPackedStruct + * cb_PACKED_STRUCT_ATTR_POST + * + */ + +#define cb_PACKED_STRUCT_ATTR_PRE + +#if defined(__ICCARM__) +#define cb_PACKED_STRUCT_ATTR_INLINE_PRE __packed +#else +#define cb_PACKED_STRUCT_ATTR_INLINE_PRE +#endif + +#if defined(__ICCARM__) +#define cb_PACKED_STRUCT_ATTR_INLINE_POST __packed +#else +#define cb_PACKED_STRUCT_ATTR_INLINE_POST __attribute__ ((__packed__)) +#endif + + +#define cb_PACKED_STRUCT_ATTR_POST + +/**@}*/ + + +#endif /* _CB_PLATFORM_BASIC_TYPES_H_ */ + diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_port_types.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_port_types.h new file mode 100644 index 00000000000..c53ff67848d --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_port_types.h @@ -0,0 +1,35 @@ +/*--------------------------------------------------------------------------- + * Copyright (c) 2016, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Component : Wireless LAN driver + * File : cb_types.h + * + * Description : Common definitions for a GCC compatible compiler. + *-------------------------------------------------------------------------*/ + +/** + * @file cb_types.h Defines type required for the entire driver. + * The defines in this file will have to be adapted for the platform. + * @ingroup platform + */ + +#ifndef _CB_PORT_TYPES_H_ +#define _CB_PORT_TYPES_H_ + +#include + + +#endif /* _CB_PORT_TYPES_H_ */ + diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_status.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_status.h new file mode 100644 index 00000000000..9e2f5d72de6 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_status.h @@ -0,0 +1,44 @@ +/*--------------------------------------------------------------------------- + * Copyright (c) 2016, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Component : RTSL + * File : cb_status.h + * + * Description : Common RTSL status codes + *-------------------------------------------------------------------------*/ +#ifndef _CB_STATUS_H_ +#define _CB_STATUS_H_ + +/*=========================================================================== + * DEFINES + *=========================================================================*/ + +#define OK(status) (status == cbSTATUS_OK) + +/*=========================================================================== + * TYPES + *=========================================================================*/ + + typedef enum + { + cbSTATUS_OK, + cbSTATUS_ERROR, + cbSTATUS_BUSY, + cbSTATUS_TIMEOUT + + } cbRTSL_Status; + +#endif /* _CB_STATUS_H_ */ + diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_types.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_types.h new file mode 100644 index 00000000000..5f318e02622 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_types.h @@ -0,0 +1,287 @@ +/*--------------------------------------------------------------------------- + * Copyright (c) 2016, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Component : RTSL + * File : cb_types.h + * + * Description : Common type definitions + *-------------------------------------------------------------------------*/ + +/** + * @file cb_types.h Defines type required for the entire driver. + * The defines in this file will have to be adapted for the platform. + * @ingroup platform + */ + +#ifndef _CB_TYPES_H_ +#define _CB_TYPES_H_ + +#include "cb_port_types.h" + +/*=========================================================================== + * TYPES + *=========================================================================*/ + +/*=========================================================================== + * COMMON SYSTEM DEFINES + *=========================================================================*/ + +#ifndef FALSE +# define FALSE (0) +#endif +#ifndef TRUE +# define TRUE (!FALSE) +#endif + +#ifndef NULL +# define NULL ((void *) 0) +#endif + +/** + * Returns the maximum value of the two parameters. + */ +#ifndef cb_MAX +# define cb_MAX(x , y) (((x) > (y)) ? (x) : (y)) +#endif +/** + * Returns the minimum value of the two parameters. + */ +#ifndef cb_MIN +# define cb_MIN(x , y) (((x) < (y)) ? (x) : (y)) +#endif + +#ifndef ELEMENTS_OF +# define ELEMENTS_OF(_array) (sizeof((_array)) / sizeof((_array)[0])) +#endif + +#define cbWM_ARRAY_SIZE(a) ELEMENTS_OF(a) + +/** + * Used when declaring an empty array that does not take up space in a struct. + * Example: struct { cb_uint8 payload[cb_EMPTY_ARRAY]; } + * In some compilers this is empty i.e. payload[]. While in some it requires a zero. + * I.e. payload[0]; + * Use this define to get it working for your system. + */ +#ifndef cb_EMPTY_ARRAY +# define cb_EMPTY_ARRAY (0) +#endif + +/*=========================================================================== + * DEFINES + *=========================================================================*/ +/** + * Used in function definitions to declare an inparameter unused to avoid warnings. + */ +#ifndef cb_UNUSED +# define cb_UNUSED(x) x +#endif + +#ifndef cb_ASSERT +# error "No port definition for ASSERT!" +#endif + +#ifndef cb_ARG_POINTER_CHECK +# define cb_ARG_POINTER_CHECK(ptr) if((ptr) == NULL) {cb_ASSERT(FALSE); return;} +#endif +#ifndef cb_ARG_POINTER_CHECK_RETURN +# define cb_ARG_POINTER_CHECK_RETURN(ptr, returnValue) if((ptr) == NULL) {cb_ASSERT(FALSE); return (returnValue);} +#endif + +#ifndef cb_BIT_0 +#define cb_BIT_0 (1ul) +#endif +#ifndef cb_BIT_1 +#define cb_BIT_1 (1ul << 1) +#endif +#ifndef cb_BIT_2 +#define cb_BIT_2 (1ul << 2) +#endif +#ifndef cb_BIT_3 +#define cb_BIT_3 (1ul << 3) +#endif +#ifndef cb_BIT_4 +#define cb_BIT_4 (1ul << 4) +#endif +#ifndef cb_BIT_5 +#define cb_BIT_5 (1ul << 5) +#endif +#ifndef cb_BIT_6 +#define cb_BIT_6 (1ul << 6) +#endif +#ifndef cb_BIT_7 +#define cb_BIT_7 (1ul << 7) +#endif +#ifndef cb_BIT_8 +#define cb_BIT_8 (1ul << 8) +#endif +#ifndef cb_BIT_9 +#define cb_BIT_9 (1ul << 9) +#endif +#ifndef cb_BIT_10 +#define cb_BIT_10 (1ul << 10) +#endif +#ifndef cb_BIT_11 +#define cb_BIT_11 (1ul << 11) +#endif +#ifndef cb_BIT_12 +#define cb_BIT_12 (1ul << 12) +#endif +#ifndef cb_BIT_13 +#define cb_BIT_13 (1ul << 13) +#endif +#ifndef cb_BIT_14 +#define cb_BIT_14 (1ul << 14) +#endif +#ifndef cb_BIT_15 +#define cb_BIT_15 (1ul << 15) +#endif +#ifndef cb_BIT_16 +#define cb_BIT_16 (1ul << 16) +#endif +#ifndef cb_BIT_17 +#define cb_BIT_17 (1ul << 17) +#endif +#ifndef cb_BIT_18 +#define cb_BIT_18 (1ul << 18) +#endif +#ifndef cb_BIT_19 +#define cb_BIT_19 (1ul << 19) +#endif +#ifndef cb_BIT_20 +#define cb_BIT_20 (1ul << 20) +#endif +#ifndef cb_BIT_21 +#define cb_BIT_21 (1ul << 21) +#endif +#ifndef cb_BIT_22 +#define cb_BIT_22 (1ul << 22) +#endif +#ifndef cb_BIT_23 +#define cb_BIT_23 (1ul << 23) +#endif +#ifndef cb_BIT_24 +#define cb_BIT_24 (1ul << 24) +#endif +#ifndef cb_BIT_25 +#define cb_BIT_25 (1ul << 25) +#endif +#ifndef cb_BIT_26 +#define cb_BIT_26 (1ul << 26) +#endif +#ifndef cb_BIT_27 +#define cb_BIT_27 (1ul << 27) +#endif +#ifndef cb_BIT_28 +#define cb_BIT_28 (1ul << 28) +#endif +#ifndef cb_BIT_29 +#define cb_BIT_29 (1ul << 29) +#endif +#ifndef cb_BIT_30 +#define cb_BIT_30 (1ul << 30) +#endif +#ifndef cb_BIT_31 +#define cb_BIT_31 (1ul << 31) +#endif + +#ifndef cb_UINT8_MAX +#define cb_UINT8_MAX ((cb_uint8)0xff) +#endif +#ifndef cb_UINT16_MAX +#define cb_UINT16_MAX ((cb_uint16)0xffff) +#endif +#ifndef cb_UINT32_MAX +#define cb_UINT32_MAX ((cb_uint32)0xffffffff) +#endif +#ifndef cb_INT8_MAX +#define cb_INT8_MAX ((cb_uint8)0x7f) +#endif +#ifndef cb_INT16_MAX +#define cb_INT16_MAX ((cb_uint16)0x7fff) +#endif +#ifndef cb_INT32_MAX +#define cb_INT32_MAX ((cb_uint32)0x7fffffff) +#endif +#ifndef cb_INT8_MIN +#define cb_INT8_MIN ((cb_uint8)0x80) +#endif +#ifndef cb_INT16_MIN +#define cb_INT16_MIN ((cb_uint16)0x8000) +#endif +#ifndef cb_INT32_MIN +#define cb_INT32_MIN ((cb_uint32)0x80000000) +#endif + +/** + * Clears (set to zero) a bit or bits in a variable. + * @param variable The variable. + * @param bit The bit or bits to clear + */ +#ifndef cb_CLEAR_BIT +# define cb_CLEAR_BIT(variable,bit) ((variable) &= ~((bit))) +#endif + +/** + * Gets a bit i.e. checks if it is set in a variable. + * + * Also works to see if any of several bits are set. + * + * @param variable The variable. + * @param bit The bit to check if it set. + * @return @ref TRUE if any of the bits are set, @ref FALSE otherwise. + */ +#ifndef cb_GET_BIT +# define cb_GET_BIT(variable,bit) (((variable) & ((bit))) ? TRUE : FALSE) +#endif + +/** + * Sets (set to 1) a bit or bits in a variable. + * + * @param variable The variable. + * @param bit The bit or bits to set in the variable. + */ +#ifndef cb_SET_BIT +# define cb_SET_BIT(variable,bit) ((variable) |= (bit)) +#endif + + +/*Packed struct defines*/ +#ifndef cb_PACKED_STRUCT_ATTR_INLINE_POST +# define cb_PACKED_STRUCT_ATTR_INLINE_POST +#endif +#ifndef cb_PACKED_STRUCT_ATTR_INLINE_PRE +# define cb_PACKED_STRUCT_ATTR_INLINE_PRE +#endif +#ifndef cb_PACKED_STRUCT_ATTR_PRE +# define cb_PACKED_STRUCT_ATTR_PRE +#endif +#ifndef cb_PACKED_STRUCT_ATTR_POST +# define cb_PACKED_STRUCT_ATTR_POST +#endif + +#ifndef cb_PACKED_STRUCT_BEGIN +# define cb_PACKED_STRUCT_BEGIN(name) \ + cb_PACKED_STRUCT_ATTR_PRE \ + typedef cb_PACKED_STRUCT_ATTR_INLINE_PRE struct name##_t +#endif + +#ifndef cb_PACKED_STRUCT_END +# define cb_PACKED_STRUCT_END(name) \ + cb_PACKED_STRUCT_ATTR_INLINE_POST name; \ + cb_PACKED_STRUCT_ATTR_POST +#endif + +#endif /* _CB_TYPES_H_ */ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_watchdog.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_watchdog.h new file mode 100644 index 00000000000..fe3e6f1df42 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_watchdog.h @@ -0,0 +1,71 @@ +/*--------------------------------------------------------------------------- + * Copyright (c) 2016, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Component: Watchdog + * File: cb_watchdog.h + * + * Description: Functionality for watchdog and reset. + *-------------------------------------------------------------------------*/ +#ifndef _CB_WATCHDOG_H_ +#define _CB_WATCHDOG_H_ + +#include "cb_comdefs.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*=========================================================================== + * DEFINES + *=========================================================================*/ + +/*=========================================================================== + * TYPES + *=========================================================================*/ + + +/*=========================================================================== + * FUNCTIONS + *=========================================================================*/ + +/** +* Put watchdog in a defined state. +*/ +void cbWD_init(void); + +/** +* Resets the CPU. +*/ +void cbWD_systemReset(void); + +/** +* Enables watchdog. Watchdog needs to be polled using cbWD_poll() with +* shorter intervals then specified by timeInMilliseconds. +* +* @param timeInMilliseconds Watchdog timeout in milliseconds. +*/ +void cbWD_enable(cb_uint32 timeInMilliseconds); + +/** +* Poll the watchdog timer. This must be done with shorter intervalls +* than the time in cbWD_enable(). +*/ +void cbWD_poll(void); + +#ifdef __cplusplus +} +#endif + +#endif /* _CB_WATCHDOG_H_ */ diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_wlan.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_wlan.h new file mode 100644 index 00000000000..a451e9ff8e1 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_wlan.h @@ -0,0 +1,567 @@ +/*--------------------------------------------------------------------------- + * Copyright (c) 2016, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Component : WLAN + * File : cb_wlan.h + * + * Description : Main WLAN component, ties together WM, SUPPLICANT and + * TARGET to one streamlined API. + *-------------------------------------------------------------------------*/ + +/** + * @file cb_wlan.h The main WLAN component interface. + * All functions declared extern needs to be provided by another/upper layer. + * @ingroup wlan + */ + +#ifndef _CB_WLAN_H_ +#define _CB_WLAN_H_ + +#include "cb_types.h" +#include "cb_wlan_types.h" +#include "cb_status.h" + +#ifdef __cplusplus +extern "C" { +#endif + + +/*=========================================================================== + * DEFINES + *=========================================================================*/ + +/** + * Max username length in @ref cbWLAN_EnterpriseConnectParameters + * + * @ingroup wlan + */ +#define cbWLAN_MAX_USERNAME_LENGTH 64 + +/** + * Max password length in @ref cbWLAN_Util_PSKFromPWD and @ref cbWLAN_EnterpriseConnectParameters + * + * @ingroup wlan + */ +#define cbWLAN_MAX_PASSPHRASE_LENGTH 64 + +/** + * PSK length in @ref cbWLAN_WPAPSKConnectParameters + * + * @ingroup wlan + */ +#define cbWLAN_PSK_LENGTH 32 + + +/** + * Max domain name length in @ref cbWLAN_EnterpriseConnectParameters + * + * @ingroup wlan + */ +#define cbWLAN_MAX_DOMAIN_LENGTH 64 + + +/*=========================================================================== + * TYPES + *=========================================================================*/ + +typedef struct cbWLAN_Stream_s cbWLAN_Stream; +typedef cb_uint32 cbWLAN_StreamPosition; + +/** + * Stream vtable interface used by WLAN supplicant to access SSL certificates + * for WPA Enterprise authentication. + * + * @ingroup wlan + */ +struct cbWLAN_Stream_s { + cb_int32 (*read)(const cbWLAN_Stream *stream, void *buf, cb_uint32 count); /**< Read function pointer, place count bytes in buf. */ + cb_int32 (*write)(const cbWLAN_Stream *stream, void *buf, cb_uint32 count); /**< Read function pointer, place count bytes in buf. */ + void (*rewind)(const cbWLAN_Stream *stream); /**< Rewind function pointer, rewind stream internal iterator to the beginning. Mandatory for all streams. */ + void (*setPosition)(const cbWLAN_Stream *stream, cbWLAN_StreamPosition position); /**< Set absolute position. */ + cbWLAN_StreamPosition (*getPosition)(const cbWLAN_Stream *stream); /**< Get current position. */ + cb_uint32 (*getSize)(const cbWLAN_Stream *stream); /**< GetSize function pointer, return total size of stream contents. */ +}; + +/** + * Start parameters passed to WLAN driver. + * + * @ingroup wlan + */ +typedef struct cbWLAN_StartParameters { + cbWLAN_MACAddress mac; /**< MAC of WLAN interface, set to all zeros if hardware programmed address should be used. */ + cb_boolean disable80211d; + cbWM_ModuleType deviceType; /**< Specify current device type. */ + union { + struct { + cbWM_TxPowerSettings txPowerSettings; /**< Transmission power settings. */ + } ODIN_W26X; + } deviceSpecific; +} cbWLAN_StartParameters; + +/** + * Common connect parameters. + * + * @ingroup wlan + */ +typedef struct cbWLAN_CommonConnectParameters { + cbWLAN_MACAddress bssid; /**< BSSID to connect to, set to all zero for any BSSID. */ + cbWLAN_Ssid ssid; /**< SSID to connect to. */ +} cbWLAN_CommonConnectParameters; + + +/** + * WEP specific connect parameters. + * + * @ingroup wlan + */ +typedef struct cbWLAN_WEPConnectParameters { + cbWLAN_WEPKey keys[4]; /**< WEP keys. */ + cb_uint32 txKey; /**< Active WEP transmission key index (0-3). */ +} cbWLAN_WEPConnectParameters; + +/** +* WPA PSK parameters. +* +* @ingroup wlan +*/ +typedef struct cbWLAN_WPAPSK { + cb_uint8 key[cbWLAN_PSK_LENGTH]; /**< WPA pre-shared key in binary form. */ +} cbWLAN_WPAPSK; + +/** + * WPA PSK specific connect parameters. + * + * @ingroup wlan + */ +typedef struct cbWLAN_WPAPSKConnectParameters { + cbWLAN_WPAPSK psk; /**< WPA pre-shared key*/ +} cbWLAN_WPAPSKConnectParameters; + + +typedef enum cbWLAN_CipherSuite { + cbWLAN_CIPHER_SUITE_NONE = 0x00, + cbWLAN_CIPHER_SUITE_WEP64 = 0x01, + cbWLAN_CIPHER_SUITE_WEP128 = 0x02, + cbWLAN_CIPHER_SUITE_TKIP = 0x04, + cbWLAN_CIPHER_SUITE_AES_CCMP = 0x08, +} cbWLAN_CipherSuite; + +typedef enum cbWLAN_AuthenticationSuite { + cbWLAN_AUTHENTICATION_SUITE_NONE = 0x00, + cbWLAN_AUTHENTICATION_SUITE_SHARED_SECRET = 0x01, + cbWLAN_AUTHENTICATION_SUITE_PSK = 0x02, + cbWLAN_AUTHENTICATION_SUITE_8021X = 0x04, + cbWLAN_AUTHENTICATION_SUITE_USE_WPA = 0x08, + cbWLAN_AUTHENTICATION_SUITE_USE_WPA2 = 0x10, +} cbWLAN_AuthenticationSuite; + + +/** + * WPA Enterprise specific connect parameters. + * + * @ingroup wlan + */ +typedef struct cbWLAN_EnterpriseConnectParameters { + cbWLAN_EnterpriseMode authMode; /**< Enterprise authentication mode. */ + cb_uint8 username[cbWLAN_MAX_USERNAME_LENGTH]; /**< Username string. */ + cb_uint8 passphrase[cbWLAN_MAX_PASSPHRASE_LENGTH]; /**< Passphrase string. */ + cb_uint8 domain[cbWLAN_MAX_DOMAIN_LENGTH]; /**< Domain string. */ + cbWLAN_Stream *clientCertificate; /**< Stream handle to provide SSL certificate for authentication. */ + cbWLAN_Stream *clientPrivateKey; /**< STream handle to provide SSL private key for authentication. */ +} cbWLAN_EnterpriseConnectParameters; + +/** + * Common access point parameters. + * + * @ingroup wlan + */ +typedef struct cbWLAN_CommonApParameters { + cbWLAN_Ssid ssid; /**< SSID to connect to. */ + cbWLAN_Channel channel; /**< Active channel. */ + cbWLAN_RateMask basicRates; /**< Basic rates. */ +}cbWLAN_CommonApParameters; + + +/** +* WPA PSK specific AP parameters. +* +* @ingroup wlan +*/ +typedef struct cbWLAN_WPAPSKApParameters { + cbWLAN_CipherSuite rsnCiphers; /**< Bit field indicating which ciphers that shall be displayed in RSN information elements. If 0 no RSN information elements is added to beacons and probe responses. */ + cbWLAN_CipherSuite wpaCiphers; /**< Bit field indicating which ciphers that shall be displayed in WPA information elements. If 0 no WPA information elements is added to beacons and probe responses. */ + cbWLAN_WPAPSK psk; /**< WPA pre-shared key*/ +} cbWLAN_WPAPSKApParameters; + + +/** + * Scan parameters + * + * @ingroup wlan + */ +typedef struct cbWLAN_ScanParameters { + cbWLAN_Ssid ssid; /**< SSID to scan for, set to zero length for broadcast scan. */ +} cbWLAN_ScanParameters; + +/** + * Scan result information reported from WLAN component. Contains info for + * one specific BSS. + * + * @ingroup wlan + */ +typedef struct cbWLAN_ScanIndicationInfo { + cbWLAN_MACAddress bssid; /**< BSS BSSID */ + cbWLAN_Ssid ssid; /**< BSS SSID */ + cbWLAN_Channel channel; /**< BSS channel */ + cbWLAN_OperationalMode operationalMode; /**< BSS type */ + cb_int32 rssi; /**< RSSI for scan result packet. */ + + cbWLAN_AuthenticationSuite authenticationSuites; /**< Supported authentication suites */ + cbWLAN_CipherSuite unicastCiphers; /**< Supported unicast cipher suites */ + cbWLAN_CipherSuite groupCipher; /**< Supported group cipher suites */ + + cbWLAN_RateMask basicRateSet; /**< Basic rate set, i.e. required rates. */ + cbWLAN_RateMask supportedRateSet; /**< Supported rate set, super set of basic rate set. */ + cb_uint32 beaconPeriod; /**< Beacon period in ms. */ + cb_uint32 DTIMPeriod; /**< DTIM period in beacon intervals */ + cb_uint8 countryCode[3]; /**< Three letter country code */ + cb_uint32 flags; // QoS, short preamble, DFS, privacy, +} cbWLAN_ScanIndicationInfo; + +/** + * Status indications indicated by @ref cbWLAN_statusIndication. + * + * @ingroup wlan + */ +typedef enum { + cbWLAN_STATUS_STOPPED, + cbWLAN_STATUS_STARTED, + cbWLAN_STATUS_ERROR, + cbWLAN_STATUS_DISCONNECTED, + cbWLAN_STATUS_CONNECTING, + cbWLAN_STATUS_CONNECTED, + cbWLAN_STATUS_CONNECTION_FAILURE, + cbWLAN_STATUS_AP_UP, + cbWLAN_STATUS_AP_DOWN, + cbWLAN_STATUS_AP_STA_ADDED, + cbWLAN_STATUS_AP_STA_REMOVED, +} cbWLAN_StatusIndicationInfo; + +/** + * Disconnection reasons for @ref cbWLAN_STATUS_DISCONNECTED. + * + * @ingroup wlan + */ +typedef enum { + cbWLAN_STATUS_DISCONNECTED_UNKNOWN, + cbWLAN_STATUS_DISCONNECTED_NO_BSSID_FOUND, + cbWLAN_STATUS_DISCONNECTED_AUTH_TIMEOUT, + cbWLAN_STATUS_DISCONNECTED_MIC_FAILURE, +} cbWLAN_StatusDisconnectedInfo; + +/** + * IOCTL parameters @ref cbWLAN_ioctl + * + * @ingroup wlan + */ +typedef enum { + cbWLAN_IOCTL_FIRST, + cbWLAN_IOCTL_SET_POWER_SAVE_MODE = cbWLAN_IOCTL_FIRST, //!< Set power mode @ref cbWLAN_IoctlPowerSaveMode + cbWLAN_IOCTL_GET_POWER_SAVE_MODE, //!< Get power mode @ref cbWLAN_IoctlPowerSaveMode + cbWLAN_IOCTL_SET_LISTEN_INTERVAL, //!< Set listen interval, integer value 0 - 16 + cbWLAN_IOCTL_GET_LISTEN_INTERVAL, //!< Get listen interval, integer value 0 - 16 + cbWLAN_IOCTL_SET_DTIM_ENABLE, //!< Set DTIM enable 0, disable 1 enable + cbWLAN_IOCTL_GET_DTIM_ENABLE, //!< Get DTIM enable 0, disable 1 enable + cbWLAN_IOCTL_SET_SLEEP_TIMEOUT, //!< Set enter power save entry delay (in ms). Power save mode will be entered only if there no activity during this delay + cbWLAN_IOCTL_GET_SLEEP_TIMEOUT, //!< Get enter power save entry delay (in ms). Power save mode will be entered only if there no activity during this delay + + cbWLAN_IOCTL_LAST, +} cbWLAN_Ioctl; + +/** + * Power save modes set using @ref cbWLAN_ioctl + * + * @ingroup wlan + */ +typedef enum { + cbWLAN_IOCTL_POWER_SAVE_MODE_OFF, + cbWLAN_IOCTL_POWER_SAVE_MODE_SLEEP, + cbWLAN_IOCTL_POWER_SAVE_MODE_DEEP_SLEEP +} cbWLAN_IoctlPowerSaveMode; + +/** + * Start parameters indicated from WLAN driver for status indication + * @ref cbWLAN_STATUS_STARTED. + * + * @ingroup wlan + */ +typedef struct cbWLAN_StatusStartedInfo { + cbWLAN_MACAddress macAddress; /**< MAC address of WLAN driver. */ +} cbWLAN_StatusStartedInfo; + +/** + * Connected parameters indicated from WLAN driver for status indication + * @ref cbWLAN_STATUS_CONNECTED. + * + * @ingroup wlan + */ +typedef struct cbWLAN_StatusConnectedInfo { + cbWLAN_MACAddress bssid; /**< BSSID of the BSS connected to. */ + cbWLAN_Channel channel; /**< Operating channels of the BSS connected to. */ +} cbWLAN_StatusConnectedInfo; + +/** + * Received Ethernet data packet information and properties. + * + * @ingroup wlan + */ +typedef struct cbWLAN_PacketIndicationInfo { + void *rxData; /**< Pointer to the port specific data type. */ + cb_uint32 size; /**< Length of the data payload in the port specific packet data type. */ + cb_boolean isChecksumVerified; /**< True if the TCP/UDP checksum is verified and correct. */ +} cbWLAN_PacketIndicationInfo; + +/** + * Status updates from WLAN component. + * @note The callback must not make any call back to WLAN. + * + * @param callbackContext Context pointer provided in @ref cbWLAN_registerStatusCallback. + * @param status Status indication type. + * @param data Additional status indication data, depends on indication type. + * + * @sa cbWLAN_registerStatusCallback + */ +typedef void (*cbWLAN_statusIndication)(void *callbackContext, cbWLAN_StatusIndicationInfo status, void *data); + + +/** + * Indication of received Ethernet data packet. + * + * @param callbackContext Context pointer provided in @ref cbWLAN_init. + * @param packetInfo Pointer to struct containing packet information and data pointers. + */ +typedef void (*cbWLAN_packetIndication)(void *callbackContext, cbWLAN_PacketIndicationInfo *packetInfo); + +/** +* Scan result indication from WLAN component. +* +* @param callbackContext Context pointer provided in @ref cbWLAN_init. +* @param bssDescriptor Pointer to struct containing scan result information. +* @param isLastResult @ref TRUE if scan scan is finished. +*/ +typedef void (*cbWLAN_scanIndication)(void *callbackContext, cbWLAN_ScanIndicationInfo *bssDescriptor, cb_boolean isLastResult); + +/*=========================================================================== + * WLAN API + *=========================================================================*/ + +/** + * Initialize WLAN component. + * + * @param callbackContext Context handle used in indication callbacks. + * @return @ref cbSTATUS_OK if successful, otherwise cbSTATUS_ERROR. + */ +cbRTSL_Status cbWLAN_init(void *callbackContext); + + +/** + * Stop WLAN component. + * Stop and destroy WLAN driver instance. + * + * @return @ref cbSTATUS_OK if successful, otherwise cbSTATUS_ERROR. + */ +cbRTSL_Status cbWLAN_stop(void); + +/** + * Connect to access point in open mode (no encryption). + * Connection progress is reported as @ref cbWLAN_statusIndication callbacks. + * + * @param commonParams Connection parameters. + * @return @ref cbSTATUS_OK if call successful, otherwise cbSTATUS_ERROR. + */ +cbRTSL_Status cbWLAN_connectOpen(cbWLAN_CommonConnectParameters *commonParams); + +/** + * Connect to access point in open mode with WEP encryption. + * Connection progress is reported as @ref cbWLAN_statusIndication callbacks. + * + * @param commonParams Connection parameters. + * @param wepParams WEP specific connection parameters. + * @return @ref cbSTATUS_OK if call successful, otherwise cbSTATUS_ERROR. + */ +cbRTSL_Status cbWLAN_connectWEP(cbWLAN_CommonConnectParameters *commonParams, cbWLAN_WEPConnectParameters *wepParams); + +/** + * Connect to access point with WPA PSK authentication. + * Connection progress is reported as @ref cbWLAN_statusIndication callbacks. + * + * @param commonParams Connection parameters. + * @param wpaParams WPA PSK specific connection parameters. + * @return @ref cbSTATUS_OK if call successful, otherwise cbSTATUS_ERROR. + */ +cbRTSL_Status cbWLAN_connectWPAPSK(cbWLAN_CommonConnectParameters *commonParams, cbWLAN_WPAPSKConnectParameters *wpaParams); + +/** + * Disconnect from access point or stop ongoing connection attempt. + * Disconnection progress is reported as @ref cbWLAN_statusIndication callback. + * + * @return @ref cbSTATUS_OK if call successful, otherwise cbSTATUS_ERROR. + */ +cbRTSL_Status cbWLAN_disconnect(void); + +/** + * Initiate BSS scan. + * If specific channel is set in scan parameters, only that channel is + * scanned. If SSID is specified, a directed probe request against that SSID + * will be used. Scan results are reported in @ref cbWLAN_scanIndication + * callbacks. + * @note Depending on channel using DFS or not, passive scans may be used + * instead of active probe requests. + * + * @param params Scan parameters + * @param scanIndication Callback function for scan results. + * @param callbackContext Context pointer, will be sent back in callback. + * @return @ref cbSTATUS_OK if call successful, otherwise cbSTATUS_ERROR. + */ +cbRTSL_Status cbWLAN_scan(cbWLAN_ScanParameters *params, cbWLAN_scanIndication scanIndication, void *callbackContext); + + +/** +* Retrieve an RSSI value for station mode. +* +* @note Depending on connection state and data transfer interval +* the value may be incorrect. +* +* @return RSSI value in dBm +*/ +cb_int16 cbWLAN_STA_getRSSI(); + +/** + * Start access point in open mode (no encryption). + * Connection progress is reported as @ref cbWLAN_statusIndication callbacks. + * + * @param commonParams Common Accesspoint parameters. + * @return @ref cbSTATUS_OK if call successful, otherwise cbSTATUS_ERROR. + */ +cbRTSL_Status cbWLAN_apStartOpen(cbWLAN_CommonApParameters *commonParams); + +/** +* Start access point with WPA PSK authentication. +* Connection progress is reported as @ref cbWLAN_statusIndication callbacks. +* +* @param commonParams Common Accesspoint parameters. +* @param wpaParams WPA PSK specific parameters. +* @return @ref cbSTATUS_OK if call successful, otherwise cbSTATUS_ERROR. +*/ +cbRTSL_Status cbWLAN_apStartWPAPSK(cbWLAN_CommonApParameters *commonParams, cbWLAN_WPAPSKApParameters *wpaParams); + +/** + * Stop access point. + * + * @return @ref cbSTATUS_OK if call successful, otherwise cbSTATUS_ERROR. + */ +cbRTSL_Status cbWLAN_apStop(void); + +/** + * Send an Ethernet data packet. + * @note Data send when not in connected state is just dropped. + * + * @param txData Pointer to the port specific Ethernet data type containing transmit data + */ +void cbWLAN_sendPacket(void *txData); + +/** + * Register a status indication callback. + * @note There may be multiple clients connected. + * + * @param statusIndication Callback function. + * @param callbackContext Context pointer, will be sent back in callback. + * @return @ref cbSTATUS_OK if call successful, otherwise cbSTATUS_ERROR. + */ +cbRTSL_Status cbWLAN_registerStatusCallback(cbWLAN_statusIndication statusIndication, void *callbackContext); + + +/** + * Register a status indication callback. + * + * @param packetIndication Callback function. + * @param callbackContext Context pointer, will be sent back in callback. + * @return @ref cbSTATUS_OK if call successful, otherwise cbSTATUS_ERROR. + */ +cbRTSL_Status cbWLAN_registerPacketIndicationCallback(cbWLAN_packetIndication packetIndication, void *callbackContext); + +/** + * Deregister the specified status indication callback. + * + * @param statusIndication Callback function. + * @param callbackContext Context pointer, will be sent back in callback. + * @return @ref cbSTATUS_OK if call successful, otherwise cbSTATUS_ERROR. + */ +cbRTSL_Status cbWLAN_deregisterStatusCallback(cbWLAN_statusIndication statusIndication, void *callbackContext); + + +cbRTSL_Status cbWLAN_Util_PSKFromPWD(cb_char passphrase[cbWLAN_MAX_PASSPHRASE_LENGTH], cbWLAN_Ssid ssid, cb_uint8 psk[cbWLAN_PSK_LENGTH]); + +/** + * Set the channel list to be used for connection and scanning. + * The list will be filtered according to the allowed channel list + * set. The list can include both 2.4GHz and 5GHz channels. + * If channel list parameter is NULL the default channel list is + * restored. + * + * @param channelList Pointer to channel list for the driver to use. + * + * @return @ref cbSTATUS_OK if call successful, otherwise cbSTATUS_ERROR. + */ +cbRTSL_Status cbWLAN_setChannelList(const cbWLAN_ChannelList *channelList); + +/** + * Returns the wanted channel list. + * + * @param channelList Pointer to channel list + * + * @return @ref cbSTATUS_OK if call successful, otherwise cbSTATUS_ERROR. + */ +cbRTSL_Status cbWLAN_getChannelList(cbWLAN_ChannelList *channelList); + +/** + * Returns the channel list currently used. This channel list + * depend on the channel list specified by the user and the + * current regulatory domain. + * + * @param channelList Pointer to channel list + * + * @return @ref cbSTATUS_OK if call successful, otherwise cbSTATUS_ERROR. + */ +cbRTSL_Status cbWLAN_getActiveChannelList(cbWLAN_ChannelList *channelList); + +/** + * WLAN control settings. Both in and out parameters are supported. + * If an ioctl request is not supported cbSTATUS_ERROR is returned and + * the value parameter shall be ignored. + * + * @param ioctl Parameter that shall be set. @ref cbWLAN_Ioctl lists all supported parameters. + * @param value Value. @ref cbWLAN_Ioctl lists the type for all supported parameters. + * + * @return @ref cbSTATUS_OK if call successful, otherwise cbSTATUS_ERROR. + */ +cbRTSL_Status cbWLAN_ioctl(cbWLAN_Ioctl ioctl, void* value); + +#ifdef __cplusplus +} +#endif + +#endif /* _CB_WLAN_H_ */ + diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_wlan_target_data.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_wlan_target_data.h new file mode 100644 index 00000000000..9136b91f0d6 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_wlan_target_data.h @@ -0,0 +1,119 @@ +/*--------------------------------------------------------------------------- + * Copyright (c) 2016, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Component : Wireless LAN driver + * File : cb_wlan_target_data.h + * + * Description : Port specific data buffer handling (ethernet frames) + *-------------------------------------------------------------------------*/ + +/** + * @file cb_wlan_target_data.h Handles the anonymous port specific packetization + * of ethernet frames. + * @ingroup target + */ + +#ifndef _CB_WLANTARGET_DATA_H_ +#define _CB_WLANTARGET_DATA_H_ + +#include "cb_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*=========================================================================== + * DEFINES + *=========================================================================*/ + +/*=========================================================================== + * TYPES + *=========================================================================*/ + +typedef struct cbWLANTARGET_dataFrame cbWLANTARGET_dataFrame; +typedef struct cbWLANTARGET_Handle cbWLANTARGET_Handle; + + +/** + * Copy data from frame data memory to buffer. + * + * @param buffer The destination buffer. + * @param frame Frame memory pointer (@ref cbWLANTARGET_allocDataFrame). + * @param size Number of bytes to copy. + * @param offsetInFrame Offset into frame memory. + * @return @ref TRUE if successful, otherwise @ref FALSE. + */ +typedef cb_boolean(*cbWLANTARGET_copyFromDataFrame)(cb_uint8* buffer, cbWLANTARGET_dataFrame* frame, cb_uint32 size, cb_uint32 offsetInFrame); + +/** + * Copy data from buffer to frame data memory. + * + * @param frame Frame memory pointer (@ref cbWLANTARGET_allocDataFrame). + * @param buffer The destination buffer. + * @param size Number of bytes to copy. + * @param offsetInFrame Offset into frame memory. + * @return @ref TRUE if successful, otherwise @ref FALSE. + */ +typedef cb_boolean(*cbWLANTARGET_copyToDataFrame)(cbWLANTARGET_dataFrame* frame, cb_uint8* buffer, cb_uint32 size, cb_uint32 offsetInFrame); + +/** + * Allocate memory in frame data memory. + * + * @param size Number of bytes to allocate. + * @return Pointer to the frame memory. + * + * @ref cbWLANTARGET_freeDataFrame + */ +typedef cbWLANTARGET_dataFrame*(*cbWLANTARGET_allocDataFrame)(cb_uint32 size); + +/** + * Destroy memory in frame data memory. + * + * @param frame Pointer to the frame memory that should be destroyed. + * @ref cbWLANTARGET_allocDataFrame + */ +typedef void(*cbWLANTARGET_freeDataFrame)(cbWLANTARGET_dataFrame* frame); + +typedef cb_uint32(*cbWLANTARGET_getDataFrameSize)(cbWLANTARGET_dataFrame* frame); + +typedef cb_uint8(*cbWLANTARGET_getDataFrameTID)(cbWLANTARGET_dataFrame* frame); + +typedef struct +{ + cbWLANTARGET_copyFromDataFrame copyFromDataFrameIndication; + cbWLANTARGET_copyToDataFrame copyToDataFrameIndication; + cbWLANTARGET_allocDataFrame allocDataFrameIndication; + cbWLANTARGET_freeDataFrame freeDataFrameIndication; + cbWLANTARGET_getDataFrameSize getDataFrameSizeIndication; + cbWLANTARGET_getDataFrameTID getDataFrameTIDIndication; +}cbWLANTARGET_Callback; + +/*=========================================================================== + * FUNCTIONS + *=========================================================================*/ + +/** + * Register WLAN target callbacks. This should be done for packetization between + * the WLAN driver and an IP stack. + * + * @param callbacks Callbacks + */ +void cbWLANTARGET_registerCallbacks(cbWLANTARGET_Callback* callbacks); + +#ifdef __cplusplus +} +#endif + +#endif diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_wlan_types.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_wlan_types.h new file mode 100644 index 00000000000..7774d44a246 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/ublox-odin-w2-drivers/cb_wlan_types.h @@ -0,0 +1,552 @@ +/*--------------------------------------------------------------------------- + * Copyright (c) 2016, u-blox Malmö, All Rights Reserved + * SPDX-License-Identifier: LicenseRef-PBL + * + * This file and the related binary are licensed under the + * Permissive Binary License, Version 1.0 (the "License"); + * you may not use these files except in compliance with the License. + * + * You may obtain a copy of the License here: + * LICENSE-permissive-binary-license-1.0.txt and at + * https://www.mbed.com/licenses/PBL-1.0 + * + * See the License for the specific language governing permissions and + * limitations under the License. + * + * Component : WLAN driver + * File : cb_wlan_types.h + * + * Description : Common wireless LAN defines and types. + *-------------------------------------------------------------------------*/ + +/** + * @file cb_wlan_types.h The main WLAN 802.11 interface + * + * @ingroup WLANDriver + */ + +#ifndef _CB_WLAN_TYPES_H_ +#define _CB_WLAN_TYPES_H_ + +#include "cb_types.h" + +#ifdef __cplusplus +extern "C" { +#endif + +/*=========================================================================== + * DEFINES + *=========================================================================*/ + +/** + * Max length for an SSID + * + * @ingroup wlantypes + */ +#define cbWLAN_SSID_MAX_LENGTH (32) + +/** + * EAPOL ethernet type + * + * @ingroup wlantypes + */ +#define cbWLAN_ETHTYPE_EAPOL (0x888E) + +/** + * Maximum size of a predefined WEP key + * + * @ingroup wlantypes + */ +#define cbWLAN_KEY_SIZE_WEP_MAX (cbWLAN_KEY_SIZE_WEP128) + +#define cbWLAN_OUI_SIZE 3 + +#define cbRATE_MASK_B (cbRATE_MASK_01 | cbRATE_MASK_02 | cbRATE_MASK_5_5 | cbRATE_MASK_11) +#define cbRATE_MASK_G (cbRATE_MASK_06 | cbRATE_MASK_09 | cbRATE_MASK_12 | cbRATE_MASK_18 | cbRATE_MASK_24 | cbRATE_MASK_36 | cbRATE_MASK_48 | cbRATE_MASK_54) +#define cbRATE_MASK_N (cbRATE_MASK_MCS0 | cbRATE_MASK_MCS1 | cbRATE_MASK_MCS2 | cbRATE_MASK_MCS3 | cbRATE_MASK_MCS4 | cbRATE_MASK_MCS5 | cbRATE_MASK_MCS6 | cbRATE_MASK_MCS7) +#define cbRATE_MASK_ALL (cbRATE_MASK_B | cbRATE_MASK_G | cbRATE_MASK_N) + +#define cbWLAN_MAX_CHANNEL_LIST_LENGTH 38 + +#define cbWLAN_TX_POWER_AUTO 0xFF + +/*=========================================================================== + * TYPES + *=========================================================================*/ + +/** + * The encryption mode. + * + * @ingroup wlantypes + */ +typedef enum cbWLAN_EncryptionMode_e { + cbWLAN_ENC_NONE, + cbWLAN_ENC_WEP64, + cbWLAN_ENC_WEP128, + cbWLAN_ENC_TKIP, + cbWLAN_ENC_AES, +} cbWLAN_EncryptionMode; + + +/** + * Enterprise authentication mode. + * + * @ingroup wlan + */ +typedef enum cbWLAN_EnterpriseMode { + cbWLAN_ENTERPRISE_MODE_LEAP, + cbWLAN_ENTERPRISE_MODE_PEAP, + cbWLAN_ENTERPRISE_MODE_EAPTLS, +} cbWLAN_EnterpriseMode; + +/** + * Key sizes for the supported encryptions. + * + * @ingroup wlantypes + */ +typedef enum cbWLAN_EncryptionKeySize_e { + cbWLAN_KEY_SIZE_WEP64 = 5, + cbWLAN_KEY_SIZE_WEP128 = 13, + cbWLAN_KEY_SIZE_WEP2 = 16, + cbWLAN_KEY_SIZE_TKIP = 16, + cbWLAN_KEY_SIZE_AES = 16, + cbWLAN_KEY_SIZE_TKIP_MIC = 8 +} cbWLAN_EncryptionKeySize; + +enum cbWLAN_Channel_e { + cbWLAN_CHANNEL_ALL = 0, + cbWLAN_CHANNEL_01 = 1, + cbWLAN_CHANNEL_02, + cbWLAN_CHANNEL_03, + cbWLAN_CHANNEL_04, + cbWLAN_CHANNEL_05, + cbWLAN_CHANNEL_06, + cbWLAN_CHANNEL_07, + cbWLAN_CHANNEL_08, + cbWLAN_CHANNEL_09, + cbWLAN_CHANNEL_10, + cbWLAN_CHANNEL_11, + cbWLAN_CHANNEL_12, + cbWLAN_CHANNEL_13, + cbWLAN_CHANNEL_14, + + cbWLAN_CHANNEL_36 = 36, + cbWLAN_CHANNEL_40 = 40, + cbWLAN_CHANNEL_44 = 44, + cbWLAN_CHANNEL_48 = 48, + cbWLAN_CHANNEL_52 = 52, + cbWLAN_CHANNEL_56 = 56, + cbWLAN_CHANNEL_60 = 60, + cbWLAN_CHANNEL_64 = 64, + cbWLAN_CHANNEL_100 = 100, + cbWLAN_CHANNEL_104 = 104, + cbWLAN_CHANNEL_108 = 108, + cbWLAN_CHANNEL_112 = 112, + cbWLAN_CHANNEL_116 = 116, + cbWLAN_CHANNEL_120 = 120, + cbWLAN_CHANNEL_124 = 124, + cbWLAN_CHANNEL_128 = 128, + cbWLAN_CHANNEL_132 = 132, + cbWLAN_CHANNEL_136 = 136, + cbWLAN_CHANNEL_140 = 140, + cbWLAN_CHANNEL_149 = 149, + cbWLAN_CHANNEL_153 = 153, + cbWLAN_CHANNEL_157 = 157, + cbWLAN_CHANNEL_161 = 161, + cbWLAN_CHANNEL_165 = 165 +}; + +/** + * WLAN Channels + * Valid values are found in @ref cbWLAN_Channel_e + * @ingroup wlantypes + */ +typedef cb_uint8 cbWLAN_Channel; + +/** + * WLAN Channel list + * @ingroup wlantypes + */ +typedef struct { + cb_uint32 length; + cbWLAN_Channel channels[cbWLAN_MAX_CHANNEL_LIST_LENGTH]; +} cbWLAN_ChannelList; + +/** + * Standard 802.11 rates + * + * @ingroup wlantypes + */ +enum cbWLAN_Rate_e { + cbWLAN_RATE_01 = 1, // 1 + cbWLAN_RATE_02, // 2 + cbWLAN_RATE_5_5, // 3 + cbWLAN_RATE_06, // 4 + cbWLAN_RATE_09, // 5 + cbWLAN_RATE_11, // 6 + cbWLAN_RATE_12, // 7 + cbWLAN_RATE_18, // 8 + cbWLAN_RATE_24, // 9 + cbWLAN_RATE_36, // 10 + cbWLAN_RATE_48, // 11 + cbWLAN_RATE_54, // 12 + cbWLAN_RATE_MCS0, // 13 + cbWLAN_RATE_MCS1, // 14 + cbWLAN_RATE_MCS2, // 15 + cbWLAN_RATE_MCS3, // 16 + cbWLAN_RATE_MCS4, // 17 + cbWLAN_RATE_MCS5, // 18 + cbWLAN_RATE_MCS6, // 19 + cbWLAN_RATE_MCS7, // 20 + cbWLAN_RATE_MCS8, // 21 + cbWLAN_RATE_MCS9, // 22 + cbWLAN_RATE_MCS10, // 23 + cbWLAN_RATE_MCS11, // 24 + cbWLAN_RATE_MCS12, // 25 + cbWLAN_RATE_MCS13, // 26 + cbWLAN_RATE_MCS14, // 27 + cbWLAN_RATE_MCS15, // 28 +}; + +/** + * Type for containing values found in @ref cbWLAN_Rate_e + * @ingroup wlantypes + */ +typedef cb_uint8 cbWLAN_Rate; + + +/** + * Mask bits for standard 802.11 rates + * + * @ingroup wlantypes + */ +enum cbWLAN_RateMask_e { + cbRATE_MASK_01 = 0x00000001, + cbRATE_MASK_02 = 0x00000002, + cbRATE_MASK_5_5 = 0x00000004, + cbRATE_MASK_11 = 0x00000008, + cbRATE_MASK_06 = 0x00000010, + cbRATE_MASK_09 = 0x00000020, + cbRATE_MASK_12 = 0x00000040, + cbRATE_MASK_18 = 0x00000080, + cbRATE_MASK_24 = 0x00000100, + cbRATE_MASK_36 = 0x00000200, + cbRATE_MASK_48 = 0x00000400, + cbRATE_MASK_54 = 0x00000800, + // NOTE: Don't move MCS rates bit offset, see note on define below + cbRATE_MASK_MCS0 = 0x00001000, + cbRATE_MASK_MCS1 = 0x00002000, + cbRATE_MASK_MCS2 = 0x00004000, + cbRATE_MASK_MCS3 = 0x00008000, + cbRATE_MASK_MCS4 = 0x00010000, + cbRATE_MASK_MCS5 = 0x00020000, + cbRATE_MASK_MCS6 = 0x00040000, + cbRATE_MASK_MCS7 = 0x00080000, + cbRATE_MASK_MCS8 = 0x00100000, + cbRATE_MASK_MCS9 = 0x00200000, + cbRATE_MASK_MCS10 = 0x00400000, + cbRATE_MASK_MCS11 = 0x00800000, + cbRATE_MASK_MCS12 = 0x01000000, + cbRATE_MASK_MCS13 = 0x02000000, + cbRATE_MASK_MCS14 = 0x04000000, + cbRATE_MASK_MCS15 = 0x08000000, +}; + +/** + * Access categories + * + * @ingroup wlantypes + */ +typedef enum cbWLAN_AccessCategory_e { + cbWLAN_AC_BK = 1, /**< Background */ + cbWLAN_AC_SP = 2, /**< Background (Spare) */ + + cbWLAN_AC_BE = 0, /**< Best effort */ + cbWLAN_AC_EE = 3, /**< Best effort (Excellent Effort) */ + + cbWLAN_AC_CL = 4, /**< Video (Controlled Load) */ + cbWLAN_AC_VI = 5, /**< Video */ + + cbWLAN_AC_VO = 6, /**< Voice */ + cbWLAN_AC_NC = 7, /**< Voice (Network Control)*/ +} cbWLAN_AccessCategory; + + + +/** +* connectBlue Hardware Identification +* +* @ingroup types +*/ +typedef enum cbWM_ModuleType_e { + cbWM_MODULE_UNKNOWN, + cbWM_MODULE_OWL22X, + cbWM_MODULE_OWL253, + cbWM_MODULE_OWS451, + cbWM_MODULE_OWL351, + cbWM_MODULE_ODIN_W16X = cbWM_MODULE_OWL351, + cbWM_MODULE_ODIN_W26X, +} cbWM_ModuleType; + +/** + * Mac address type + * + * @ingroup wlantypes + */ +typedef cb_uint8 cbWLAN_MACAddress[6]; + +/** + * Type for containing values found in @ref cbWLAN_RateMask_e + * @ingroup wlantypes + */ +typedef cb_uint32 cbWLAN_RateMask; + +/** +* Transmission power +* +* @ingroup wlantypes +*/ +typedef cb_uint8 cbWLAN_TxPower; + +/** + * The different frequency bands to choose from. + * + * @ingroup wlantypes + */ +typedef enum cbWLAN_Band_e { + cbWLAN_BAND_UNDEFINED, + cbWLAN_BAND_2_4GHz, + cbWLAN_BAND_5GHz, +} cbWLAN_Band; + +/** + * The operational mode. + * + * @ingroup wlantypes + */ +typedef enum cbWLAN_OperationalMode_e { + cbWLAN_OPMODE_MANAGED, + cbWLAN_OPMODE_ADHOC, +} cbWLAN_OperationalMode; + +/** + * Encryption key type + * + * @ingroup wlantypes + */ +typedef enum cbWLAN_KeyType_e { + cbWLAN_KEY_UNICAST, + cbWLAN_KEY_BROADCAST, +} cbWLAN_KeyType; + +typedef enum { + cbWLAN_CONNECT_MODE_OPEN, + cbWLAN_CONNECT_MODE_WEP_OPEN, + cbWLAN_CONNECT_MODE_WPA_PSK, + cbWLAN_CONNECT_MODE_ENTERPRISE, +} cbWLAN_ConnectMode; + +typedef enum { + cbWLAN_AP_MODE_OPEN, + cbWLAN_AP_MODE_WEP_OPEN, + cbWLAN_AP_MODE_WPA_PSK, + cbWLAN_AP_MODE_ENTERPRISE, +} cbWLAN_ApMode; + +/** + * Ethernet header + * + * @ingroup wlantypes + */ +cb_PACKED_STRUCT_BEGIN(cbWLAN_EthernetHeader) { + cbWLAN_MACAddress dest; + cbWLAN_MACAddress src; + cb_uint16 type; +} cb_PACKED_STRUCT_END(cbWLAN_EthernetHeader); + + +cb_PACKED_STRUCT_BEGIN(cbWLAN_EthernetFrame) { + cbWLAN_EthernetHeader header; + cb_uint8 payload[cb_EMPTY_ARRAY]; +} cb_PACKED_STRUCT_END(cbWLAN_EthernetFrame); + +/** + * SNAP header + * + * @ingroup wlantypes + */ +cb_PACKED_STRUCT_BEGIN(cbWLAN_SNAPHeader) { + cb_uint8 dsap; + cb_uint8 ssap; + cb_uint8 ctrl; + cb_uint8 encapsulation[3]; + cb_uint16 ethType; +} cb_PACKED_STRUCT_END(cbWLAN_SNAPHeader); + +cb_PACKED_STRUCT_BEGIN(cbWLAN_SNAPFrame) { + cbWLAN_SNAPHeader header; + cb_uint8 payload[cb_EMPTY_ARRAY]; +} cb_PACKED_STRUCT_END(cbWLAN_SNAPFrame); + + +/** + * Defines an ssid. + * + * @ingroup wlantypes + */ +typedef struct cbWLAN_Ssid_s { + cb_uint8 ssid[cbWLAN_SSID_MAX_LENGTH]; + cb_uint32 ssidLength; +} cbWLAN_Ssid; + +/** + * Defines one wep key. + * + * @ingroup wlantypes + */ +typedef struct cbWLAN_WepKey_s { + cb_uint8 key[cbWLAN_KEY_SIZE_WEP_MAX]; + cb_uint32 length; +} cbWLAN_WEPKey; + +/** +* Describes host revisions. +* @see cbWM_Version +* +* @ingroup types +*/ +typedef struct { + struct { + cb_uint32 major; + cb_uint32 minor; + cb_uint32 patch1; + } software; + struct { + const char* id; + } manufacturer; +} cbWM_DriverRevision; + +/** +* Describes firmware revisions. +* @see cbWM_Version +* +* @ingroup types +*/ +typedef struct { + struct { + cb_uint32 major; + cb_uint32 minor; + cb_uint32 patch1; + cb_uint32 patch2; + } firmware; + struct { + const char* id; + } manufacturer; +} cbWM_FWRevision; + +/** +* Describes firmware revisions. Is divided into three parts; one for the +* host driver side, one for target firmware, and one information string +* descibing the HW manufacturer. +* +* @ingroup types +*/ +typedef struct version_st{ + cbWM_DriverRevision host; + cbWM_FWRevision target; +} cbWM_Version; + +/** +* Describes power levels for dynamic power level control. +* +* @ingroup types +*/ +typedef struct cbWM_TxPowerSettings_s { + cbWLAN_TxPower lowTxPowerLevel; + cbWLAN_TxPower medTxPowerLevel; + cbWLAN_TxPower maxTxPowerLevel; +} cbWM_TxPowerSettings; + +/** +* Describes an access point. +* +* @ingroup types +*/ +typedef struct cbWLAN_ApInformation { + cbWLAN_Ssid ssid; /**< SSID */ + cbWLAN_MACAddress bssid; /**< BSSID */ + cbWLAN_Channel channel; /**< Channel */ +} cbWLAN_ApInformation; + +/** +* Describes a station connected to an access point. +* +* @ingroup types +*/ +typedef struct cbWLAN_ApStaInformation { + cbWLAN_MACAddress MAC; +} cbWLAN_ApStaInformation; + +/*--------------------------------------------------------------------------- + * VARIABLE DECLARATIONS + *-------------------------------------------------------------------------*/ +extern const cbWLAN_MACAddress nullMac; +extern const cbWLAN_MACAddress broadcastMac; + +extern const cb_uint8 OUI_Microsoft[cbWLAN_OUI_SIZE]; +extern const cb_uint8 OUI_Epigram[cbWLAN_OUI_SIZE]; +extern const cb_uint8 OUI_ConnectBlue[cbWLAN_OUI_SIZE]; +extern const cb_uint8 OUI_IEEE8021[cbWLAN_OUI_SIZE]; + +extern const cb_uint8 PATTERN_HTInformationDraft[1]; +extern const cb_uint8 PATTERN_TKIP[2]; +extern const cb_uint8 PATTERN_WME_IE[3]; +extern const cb_uint8 PATTERN_WME_PE[3]; + +/*--------------------------------------------------------------------------- + * FUNCTIONS + *-------------------------------------------------------------------------*/ + +/** + * Misc + */ + +/** + * Returns the correct frequency @ref cbWLAN_Band band based on the input channel. + * + * For @ref cbWLAN_CHANNEL_ALL This function will return @ref cbWLAN_BAND_2_4GHz. + * + * @param channel The channel to be queried for band. + * @return The @ref cbWLAN_Band band for the requested channel. + */ +cbWLAN_Band cbWLAN_getBandFromChannel(cbWLAN_Channel channel); + +/** +* Returns the valid rates @ref cbWLAN_RateMask based for the channel. +* +* @param channel The channel to be queried for rates. +* @return The valid rates @ref cbWLAN_RateMask for the requested channel. +*/ +cbWLAN_RateMask cbWLAN_getRatesForChannel(cbWLAN_Channel channel); + +/** + * Checks is the input rate is a 802.11n rate or not. + * + * @param rate The rate to check + * @return @ref TRUE if the input rate is an n-rate. @ref FALSE otherwise. + */ +cb_boolean cbWLAN_isNRate(cbWLAN_Rate rate); + +/** + * Checks if a channel is valid + * + * @return @ref TRUE if the channel is valid. @ref FALSE otherwise. + */ +cb_boolean cbWLAN_isValidChannel(cbWLAN_Channel channel); + +#ifdef __cplusplus +} +#endif + +#endif + diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/wifi_emac/wifi_emac_api.cpp b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/wifi_emac/wifi_emac_api.cpp new file mode 100644 index 00000000000..6a9dd6497f5 --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/wifi_emac/wifi_emac_api.cpp @@ -0,0 +1,327 @@ + +#include +#include "cb_main.h" +#include "cb_wlan.h" +#include "cb_wlan_types.h" +#include "cb_otp.h" +#include "cb_wlan_target_data.h" +#include "emac_api.h" +#include "mbed_assert.h" +#include "rtos.h" +#include "mbed_events.h" + +/*=========================================================================== +* DEFINES +*=========================================================================*/ +#define WIFI_EMAC_API_MTU_SIZE (1500U) + +/*=========================================================================== +* TYPES +*=========================================================================*/ +typedef struct { + emac_link_input_fn wifi_input_cb; + emac_link_state_change_fn wifi_state_cb; + void* link_input_user_data; + void* link_state_user_data; + bool linkStateRegistered; +} wifi_emac_api_s; + +/*=========================================================================== +* DECLARATIONS +*=========================================================================*/ +static void statusIndication(void *dummy, cbWLAN_StatusIndicationInfo status, void *data); +static void packetIndication(void *dummy, cbWLAN_PacketIndicationInfo *packetInfo); +static cb_boolean handleWlanTargetCopyFromDataFrame(uint8_t* buffer, cbWLANTARGET_dataFrame* frame, uint32_t size, uint32_t offsetInFrame); +static cb_boolean handleWlanTargetCopyToDataFrame(cbWLANTARGET_dataFrame* frame, uint8_t* buffer, uint32_t size, uint32_t offsetInFrame); +static cbWLANTARGET_dataFrame* handleWlanTargetAllocDataFrame(uint32_t size); +static void handleWlanTargetFreeDataFrame(cbWLANTARGET_dataFrame* frame); +static cb_uint32 handleWlanTargetGetDataFrameSize(cbWLANTARGET_dataFrame* frame); +static cb_uint8 handleWlanTargetGetDataFrameTID(cbWLANTARGET_dataFrame* frame); + +static uint32_t wifi_get_mtu_size(emac_interface_t *emac); +static void wifi_get_ifname(emac_interface_t *emac, char *name, uint8_t size); +static uint8_t wifi_get_hwaddr_size(emac_interface_t *emac); +static void wifi_get_hwaddr(emac_interface_t *emac, uint8_t *addr); +static void wifi_set_hwaddr(emac_interface_t *emac, uint8_t *addr); +static bool wifi_link_out(emac_interface_t *emac, emac_stack_mem_t *buf); +static bool wifi_power_up(emac_interface_t *emac); +static void wifi_power_down(emac_interface_t *emac); +static void wifi_set_link_input_cb(emac_interface_t *emac, emac_link_input_fn input_cb, void *data); +static void wifi_set_link_state_cb(emac_interface_t *emac, emac_link_state_change_fn state_cb, void *data); + +/*=========================================================================== +* DEFINITIONS +*=========================================================================*/ +static wifi_emac_api_s _admin; +static const char _ifname[] = "WL0"; + +const emac_interface_ops_t wifi_emac_interface = { + .get_mtu_size = wifi_get_mtu_size, + .get_ifname = wifi_get_ifname, + .get_hwaddr_size = wifi_get_hwaddr_size, + .get_hwaddr = wifi_get_hwaddr, + .set_hwaddr = wifi_set_hwaddr, + .link_out = wifi_link_out, + .power_up = wifi_power_up, + .power_down = wifi_power_down, + .set_link_input_cb = wifi_set_link_input_cb, + .set_link_state_cb = wifi_set_link_state_cb +}; + +static emac_interface_t _intf = { wifi_emac_interface, NULL }; + +static const cbWLANTARGET_Callback _wlanTargetCallback = +{ + handleWlanTargetCopyFromDataFrame, + handleWlanTargetCopyToDataFrame, + handleWlanTargetAllocDataFrame, + handleWlanTargetFreeDataFrame, + handleWlanTargetGetDataFrameSize, + handleWlanTargetGetDataFrameTID +}; + +/*=========================================================================== +* FUNCTIONS +*=========================================================================*/ +static void statusIndication(void *dummy, cbWLAN_StatusIndicationInfo status, void *data) +{ + bool linkUp = false; + bool sendCb = true; + (void)dummy; + (void)data; + + switch (status) { + case cbWLAN_STATUS_CONNECTED: + case cbWLAN_STATUS_AP_STA_ADDED: + linkUp = true; + break; + case cbWLAN_STATUS_STOPPED: + case cbWLAN_STATUS_ERROR: + case cbWLAN_STATUS_DISCONNECTED: + case cbWLAN_STATUS_CONNECTION_FAILURE: + break; + case cbWLAN_STATUS_CONNECTING: + default: + sendCb = false; + break; + } + if (sendCb) { + _admin.wifi_state_cb(_admin.link_state_user_data, linkUp); + } +} + +static void packetIndication(void *dummy, cbWLAN_PacketIndicationInfo *packetInfo) +{ + (void)dummy; + _admin.wifi_input_cb(_admin.link_input_user_data, (void*)packetInfo->rxData); +} + +static cb_boolean handleWlanTargetCopyFromDataFrame(uint8_t* buffer, cbWLANTARGET_dataFrame* frame, uint32_t size, uint32_t offsetInFrame) +{ + void* dummy = NULL; + emac_stack_mem_t** phead = (emac_stack_mem_chain_t **)&frame; + emac_stack_mem_t* pbuf; + uint32_t copySize, bytesCopied = 0, pbufOffset = 0; + + MBED_ASSERT(frame != NULL); + MBED_ASSERT(buffer != NULL); + + pbuf = emac_stack_mem_chain_dequeue(dummy, phead); + while (pbuf != NULL) { + if ((pbufOffset + emac_stack_mem_len(dummy, pbuf)) >= offsetInFrame) { + copySize = cb_MIN(size, emac_stack_mem_len(dummy, pbuf) - (offsetInFrame - pbufOffset)); + memcpy(buffer, (int8_t *)emac_stack_mem_ptr(dummy, pbuf) + (offsetInFrame - pbufOffset), copySize); + buffer += copySize; + bytesCopied += copySize; + pbuf = emac_stack_mem_chain_dequeue(dummy, phead); + break; + } + pbufOffset += emac_stack_mem_len(dummy, pbuf); + pbuf = emac_stack_mem_chain_dequeue(dummy, phead); + } + + while (pbuf != NULL && bytesCopied < size) { + copySize = cb_MIN(emac_stack_mem_len(dummy, pbuf), size - bytesCopied); + memcpy(buffer, emac_stack_mem_ptr(dummy, pbuf), copySize); + buffer += copySize; + bytesCopied += copySize; + pbuf = emac_stack_mem_chain_dequeue(dummy, phead); + } + + MBED_ASSERT(bytesCopied <= size); + + return (bytesCopied == size); +} + +static cb_boolean handleWlanTargetCopyToDataFrame(cbWLANTARGET_dataFrame* frame, uint8_t* buffer, uint32_t size, uint32_t offsetInFrame) +{ + void* dummy = NULL; + emac_stack_mem_t** phead = (emac_stack_mem_chain_t **)&frame; + emac_stack_mem_t* pbuf; + uint32_t copySize, bytesCopied = 0, pbufOffset = 0; + + MBED_ASSERT(frame != NULL); + MBED_ASSERT(buffer != NULL); + + pbuf = emac_stack_mem_chain_dequeue(dummy, phead); + while (pbuf != NULL) { + if ((pbufOffset + emac_stack_mem_len(dummy, pbuf)) >= offsetInFrame) { + copySize = cb_MIN(size, emac_stack_mem_len(dummy, pbuf) - (offsetInFrame - pbufOffset)); + memcpy((uint8_t *)emac_stack_mem_ptr(dummy, pbuf) + (offsetInFrame - pbufOffset), buffer, copySize); + buffer += copySize; + bytesCopied += copySize; + pbuf = emac_stack_mem_chain_dequeue(dummy, phead); + break; + } + pbufOffset += emac_stack_mem_len(dummy, pbuf); + pbuf = emac_stack_mem_chain_dequeue(dummy, phead); + } + + while (pbuf != NULL && bytesCopied < size) { + copySize = cb_MIN(emac_stack_mem_len(dummy, pbuf), size - bytesCopied); + memcpy(emac_stack_mem_ptr(dummy, pbuf), buffer, copySize); + buffer += copySize; + bytesCopied += copySize; + pbuf = emac_stack_mem_chain_dequeue(dummy, phead); + } + + MBED_ASSERT(bytesCopied <= size); + + return (bytesCopied == size); +} + +static cbWLANTARGET_dataFrame* handleWlanTargetAllocDataFrame(uint32_t size) +{ + void* dummy = NULL; + + return (cbWLANTARGET_dataFrame*)emac_stack_mem_alloc(dummy, size, 0); +} + +static void handleWlanTargetFreeDataFrame(cbWLANTARGET_dataFrame* frame) +{ + void* dummy = NULL; + + emac_stack_mem_free(dummy, (emac_stack_mem_t*)frame); +} + +static uint32_t handleWlanTargetGetDataFrameSize(cbWLANTARGET_dataFrame* frame) +{ + void* dummy = NULL; + return emac_stack_mem_chain_len(dummy, (emac_stack_mem_t*)frame); +} + +static uint8_t handleWlanTargetGetDataFrameTID(cbWLANTARGET_dataFrame* frame) +{ + (void)frame; + return (uint8_t)cbWLAN_AC_BE; +} + +/*=========================================================================== +* API FUNCTIONS +*=========================================================================*/ +static uint32_t wifi_get_mtu_size(emac_interface_t *emac) +{ + (void)emac; + + return WIFI_EMAC_API_MTU_SIZE; +} + +static void wifi_get_ifname(emac_interface_t *emac, char *name, uint8_t size) +{ + (void)emac; + MBED_ASSERT(name != NULL); + memcpy((void*)name, (void*)&_ifname, cb_MIN(size, sizeof(_ifname))); +} + +static uint8_t wifi_get_hwaddr_size(emac_interface_t *emac) +{ + (void)emac; + + return sizeof(cbWLAN_MACAddress); +} + +static void wifi_get_hwaddr(emac_interface_t *emac, uint8_t *addr) +{ + (void)emac; + + cbOTP_read(cbOTP_MAC_WLAN, sizeof(cbWLAN_MACAddress), addr); +} + +static void wifi_set_hwaddr(emac_interface_t *emac, uint8_t *addr) +{ + (void)emac; + (void)addr; + + // Do nothing, not possible to change the address +} + +static void send_packet(emac_interface_t *emac, void *buf) +{ + cbWLAN_sendPacket(buf); + emac_stack_mem_free(emac,buf); +} + +static bool wifi_link_out(emac_interface_t *emac, emac_stack_mem_t *buf) +{ + (void)emac; + // Break call chain to avoid the driver affecting stack usage for the IP stack thread too much + emac_stack_mem_ref(emac,buf); + cbMAIN_getEventQueue()->call(send_packet,emac,buf); + return true; +} + + +static bool wifi_power_up(emac_interface_t *emac) +{ + (void)emac; + + return true; +} + +static void wifi_power_down(emac_interface_t *emac) +{ + (void)emac; +} + +static void wifi_set_link_input_cb(emac_interface_t *emac, emac_link_input_fn input_cb, void *data) +{ + void *dummy = NULL; + (void)emac; + + _admin.wifi_input_cb = input_cb; + _admin.link_input_user_data = data; + + cbMAIN_driverLock(); + cbWLAN_registerPacketIndicationCallback(packetIndication, dummy); + cbMAIN_driverUnlock(); +} + +static void wifi_set_link_state_cb(emac_interface_t *emac, emac_link_state_change_fn state_cb, void *data) +{ + cbRTSL_Status result; + void *dummy = NULL; + (void)emac; + + _admin.wifi_state_cb = state_cb; + _admin.link_state_user_data = data; + + if (!_admin.linkStateRegistered) { + cbMAIN_driverLock(); + result = cbWLAN_registerStatusCallback(statusIndication, dummy); + cbMAIN_driverUnlock(); + if (result == cbSTATUS_OK) { + _admin.linkStateRegistered = true; + } + } +} + +emac_interface_t* wifi_emac_get_interface() +{ + return &_intf; +} + +void wifi_emac_init_mem(void) +{ + cbWLANTARGET_registerCallbacks((cbWLANTARGET_Callback*)&_wlanTargetCallback); +} + diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/wifi_emac/wifi_emac_api.h b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/wifi_emac/wifi_emac_api.h new file mode 100644 index 00000000000..e9689ffb53b --- /dev/null +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/wifi_emac/wifi_emac_api.h @@ -0,0 +1,10 @@ +#include "emac_api.h" + +#ifndef WIFI_EMAC_API_H +#define WIFI_EMAC_API_H + +emac_interface_t* wifi_emac_get_interface(); + +void wifi_emac_init_mem(); + +#endif diff --git a/targets/targets.json b/targets/targets.json index 38be1eaa0ca..ac5d36aa604 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -1259,9 +1259,9 @@ "default_toolchain": "ARM", "supported_toolchains": ["ARM", "uARM", "GCC_ARM", "IAR"], "extra_labels": ["STM", "STM32F4", "STM32F439", "STM32F439ZI","STM32F439xx"], - "macros": ["HSE_VALUE=24000000", "HSE_STARTUP_TIMEOUT=5000", "CB_INTERFACE_SDIO","CB_CHIP_WL18XX","SUPPORT_80211D_ALWAYS","WLAN_ENABLED"], + "macros": ["HSE_VALUE=24000000", "HSE_STARTUP_TIMEOUT=5000", "CB_INTERFACE_SDIO","CB_CHIP_WL18XX","SUPPORT_80211D_ALWAYS","WLAN_ENABLED","MBEDTLS_USER_CONFIG_FILE=\"sdk/odin_w2_mbedtls_config.h\""], "inherits": ["Target"], - "device_has": ["ANALOGIN", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "TRNG"], + "device_has": ["ANALOGIN", "CAN", "EMAC", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "TRNG"], "features": ["LWIP"], "release_versions": ["5"], "device_name": "STM32F439ZI" From 22a40da74dd0d2dd671f2d11cecf8ca0e129ee04 Mon Sep 17 00:00:00 2001 From: "andreas.larsson" Date: Fri, 14 Oct 2016 02:42:53 +0200 Subject: [PATCH 87/89] Added guard for DEVICE_EMAC in wifi_emac_api.cpp --- .../TARGET_UBLOX_EVK_ODIN_W2/sdk/wifi_emac/wifi_emac_api.cpp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/wifi_emac/wifi_emac_api.cpp b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/wifi_emac/wifi_emac_api.cpp index 6a9dd6497f5..022c225585f 100644 --- a/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/wifi_emac/wifi_emac_api.cpp +++ b/targets/TARGET_STM/TARGET_STM32F4/TARGET_UBLOX_EVK_ODIN_W2/sdk/wifi_emac/wifi_emac_api.cpp @@ -1,3 +1,4 @@ +#if DEVICE_EMAC #include #include "cb_main.h" @@ -325,3 +326,4 @@ void wifi_emac_init_mem(void) cbWLANTARGET_registerCallbacks((cbWLANTARGET_Callback*)&_wlanTargetCallback); } +#endif From 9c52ac2fa9afede5d941fb38956ca57b18e1facc Mon Sep 17 00:00:00 2001 From: Bartek Szatkowski Date: Fri, 14 Oct 2016 10:36:30 -0500 Subject: [PATCH 88/89] Odin: Disable WiFi by default Currently only one network interface can be compiled in at a given time, to avoid failing automated test on this target WiFi will be disabled by default. --- targets/targets.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/targets/targets.json b/targets/targets.json index ac5d36aa604..8ae47e5e42a 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -1261,7 +1261,7 @@ "extra_labels": ["STM", "STM32F4", "STM32F439", "STM32F439ZI","STM32F439xx"], "macros": ["HSE_VALUE=24000000", "HSE_STARTUP_TIMEOUT=5000", "CB_INTERFACE_SDIO","CB_CHIP_WL18XX","SUPPORT_80211D_ALWAYS","WLAN_ENABLED","MBEDTLS_USER_CONFIG_FILE=\"sdk/odin_w2_mbedtls_config.h\""], "inherits": ["Target"], - "device_has": ["ANALOGIN", "CAN", "EMAC", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "TRNG"], + "device_has": ["ANALOGIN", "CAN", "I2C", "I2CSLAVE", "INTERRUPTIN", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "SERIAL", "SLEEP", "SPI", "SPISLAVE", "STDIO_MESSAGES", "TRNG"], "features": ["LWIP"], "release_versions": ["5"], "device_name": "STM32F439ZI" From a3def803be7e3b680998a3b13925ec819faf12c0 Mon Sep 17 00:00:00 2001 From: Russ Butler Date: Fri, 14 Oct 2016 16:29:00 -0500 Subject: [PATCH 89/89] squash TARGET_NRF5: corrections Squash all the changes in the PR 2865 - "TARGET_NRF5: A few corrections in HAL implementation." This PR causes problems with the release script so a squashed version without merges is needed. --- .../TARGET_MCU_NRF51822/hal_patch/sleep.c | 71 +++++++++++++++++++ .../TARGET_NORDIC/TARGET_MCU_NRF51822/sleep.c | 5 +- .../TARGET_NRF52_DK/PinNames.h | 1 + targets/TARGET_NORDIC/TARGET_NRF5/gpio_api.c | 6 +- targets/TARGET_NORDIC/TARGET_NRF5/sleep.c | 45 +++++++++++- 5 files changed, 122 insertions(+), 6 deletions(-) create mode 100644 features/FEATURE_BLE/targets/TARGET_NORDIC/TARGET_MCU_NRF51822/hal_patch/sleep.c diff --git a/features/FEATURE_BLE/targets/TARGET_NORDIC/TARGET_MCU_NRF51822/hal_patch/sleep.c b/features/FEATURE_BLE/targets/TARGET_NORDIC/TARGET_MCU_NRF51822/hal_patch/sleep.c new file mode 100644 index 00000000000..efb46699eef --- /dev/null +++ b/features/FEATURE_BLE/targets/TARGET_NORDIC/TARGET_MCU_NRF51822/hal_patch/sleep.c @@ -0,0 +1,71 @@ +/* mbed Microcontroller Library + * Copyright (c) 2006-2013 ARM Limited + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +#include "sleep_api.h" +#include "cmsis.h" +#include "mbed_interface.h" +#include "softdevice_handler.h" +#include "nrf_soc.h" + +// Mask of reserved bits of the register ICSR in the System Control Block peripheral +// In this case, bits which are equal to 0 are the bits reserved in this register +#define SCB_ICSR_RESERVED_BITS_MASK 0x9E43F03F + +void sleep(void) +{ + // ensure debug is disconnected if semihost is enabled.... + + // Trigger an event when an interrupt is pending. This allows to wake up + // the processor from disabled interrupts. + SCB->SCR |= SCB_SCR_SEVONPEND_Msk; + + // If the SoftDevice is enabled, its API must be used to go to sleep. + if (softdevice_handler_isEnabled()) { + sd_power_mode_set(NRF_POWER_MODE_LOWPWR); + sd_app_evt_wait(); + } else { + NRF_POWER->TASKS_LOWPWR = 1; + + // Note: it is not sufficient to just use WFE here, since the internal + // event register may be already set from an event that occurred in the + // past (like an SVC call to the SoftDevice) and in such case WFE will + // just clear the register and continue execution. + // Therefore, the strategy here is to first clear the event register + // by using SEV/WFE pair, and then execute WFE again, unless there is + // a pending interrupt. + + // Set an event and wake up whatsoever, this will clear the event + // register from all previous events set (SVC call included) + __SEV(); + __WFE(); + + // Test if there is an interrupt pending (mask reserved regions) + if (SCB->ICSR & (SCB_ICSR_RESERVED_BITS_MASK)) { + // Ok, there is an interrut pending, no need to go to sleep + return; + } else { + // next event will wakeup the CPU + // If an interrupt occured between the test of SCB->ICSR and this + // instruction, WFE will just not put the CPU to sleep + __WFE(); + } + } +} + +void deepsleep(void) +{ + sleep(); + // NRF_POWER->SYSTEMOFF=1; +} diff --git a/targets/TARGET_NORDIC/TARGET_MCU_NRF51822/sleep.c b/targets/TARGET_NORDIC/TARGET_MCU_NRF51822/sleep.c index 3c5ab7dbae8..be8d69d1e81 100644 --- a/targets/TARGET_NORDIC/TARGET_MCU_NRF51822/sleep.c +++ b/targets/TARGET_NORDIC/TARGET_MCU_NRF51822/sleep.c @@ -16,8 +16,9 @@ #include "sleep_api.h" #include "cmsis.h" #include "mbed_interface.h" +#include "toolchain.h" -void sleep(void) +MBED_WEAK void sleep(void) { // ensure debug is disconnected if semihost is enabled.... NRF_POWER->TASKS_LOWPWR = 1; @@ -25,7 +26,7 @@ void sleep(void) __WFE(); } -void deepsleep(void) +MBED_WEAK void deepsleep(void) { sleep(); // NRF_POWER->SYSTEMOFF=1; diff --git a/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF52832/TARGET_NRF52_DK/PinNames.h b/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF52832/TARGET_NRF52_DK/PinNames.h index 0ce5babca42..2b86eca4857 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF52832/TARGET_NRF52_DK/PinNames.h +++ b/targets/TARGET_NORDIC/TARGET_NRF5/TARGET_MCU_NRF52832/TARGET_NRF52_DK/PinNames.h @@ -120,6 +120,7 @@ typedef enum { P0_28 = p28, P0_29 = p29, P0_30 = p30, + P0_31 = p31, LED1 = p17, LED2 = p18, diff --git a/targets/TARGET_NORDIC/TARGET_NRF5/gpio_api.c b/targets/TARGET_NORDIC/TARGET_NRF5/gpio_api.c index 4c1586c0c31..163a4ac4aff 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5/gpio_api.c +++ b/targets/TARGET_NORDIC/TARGET_NRF5/gpio_api.c @@ -20,7 +20,11 @@ #include "nrf_drv_gpiote.h" -#define GPIO_PIN_COUNT 31 +#if defined(TARGET_MCU_NRF51822) + #define GPIO_PIN_COUNT 31 +#else + #define GPIO_PIN_COUNT 32 +#endif typedef struct { bool used_as_gpio : 1; diff --git a/targets/TARGET_NORDIC/TARGET_NRF5/sleep.c b/targets/TARGET_NORDIC/TARGET_NRF5/sleep.c index 3c5ab7dbae8..efb46699eef 100644 --- a/targets/TARGET_NORDIC/TARGET_NRF5/sleep.c +++ b/targets/TARGET_NORDIC/TARGET_NRF5/sleep.c @@ -16,13 +16,52 @@ #include "sleep_api.h" #include "cmsis.h" #include "mbed_interface.h" +#include "softdevice_handler.h" +#include "nrf_soc.h" + +// Mask of reserved bits of the register ICSR in the System Control Block peripheral +// In this case, bits which are equal to 0 are the bits reserved in this register +#define SCB_ICSR_RESERVED_BITS_MASK 0x9E43F03F void sleep(void) { // ensure debug is disconnected if semihost is enabled.... - NRF_POWER->TASKS_LOWPWR = 1; - // wait for interrupt - __WFE(); + + // Trigger an event when an interrupt is pending. This allows to wake up + // the processor from disabled interrupts. + SCB->SCR |= SCB_SCR_SEVONPEND_Msk; + + // If the SoftDevice is enabled, its API must be used to go to sleep. + if (softdevice_handler_isEnabled()) { + sd_power_mode_set(NRF_POWER_MODE_LOWPWR); + sd_app_evt_wait(); + } else { + NRF_POWER->TASKS_LOWPWR = 1; + + // Note: it is not sufficient to just use WFE here, since the internal + // event register may be already set from an event that occurred in the + // past (like an SVC call to the SoftDevice) and in such case WFE will + // just clear the register and continue execution. + // Therefore, the strategy here is to first clear the event register + // by using SEV/WFE pair, and then execute WFE again, unless there is + // a pending interrupt. + + // Set an event and wake up whatsoever, this will clear the event + // register from all previous events set (SVC call included) + __SEV(); + __WFE(); + + // Test if there is an interrupt pending (mask reserved regions) + if (SCB->ICSR & (SCB_ICSR_RESERVED_BITS_MASK)) { + // Ok, there is an interrut pending, no need to go to sleep + return; + } else { + // next event will wakeup the CPU + // If an interrupt occured between the test of SCB->ICSR and this + // instruction, WFE will just not put the CPU to sleep + __WFE(); + } + } } void deepsleep(void)

      wLH=A_u&@_h-bxHqihlG%R(BKU35~gDZ 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 LFugQ%fJ3;I&GOSu8$ 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

    uOF8c5 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%0Dk|I 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⁡4dvtg2IbJG_*%*j?V+_QevFDAqvFR>KJL4f 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 Dd=^gn diff --git a/targets/targets.json b/targets/targets.json index a6520b94cd6..e2b2f7f56ac 100644 --- a/targets/targets.json +++ b/targets/targets.json @@ -1705,6 +1705,7 @@ "extra_labels": ["Maxim", "MAX32610"], "supported_toolchains": ["GCC_ARM", "IAR", "ARM"], "device_has": ["ANALOGIN", "ANALOGOUT", "ERROR_PATTERN", "I2C", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "STDIO_MESSAGES"], + "features": ["BLE"], "release_versions": ["2", "5"] }, "MAX32600MBED": { @@ -1723,6 +1724,7 @@ "extra_labels": ["Maxim", "MAX32620"], "supported_toolchains": ["GCC_ARM", "IAR", "ARM"], "device_has": ["ANALOGIN", "ERROR_PATTERN", "I2C", "INTERRUPTIN", "LOWPOWERTIMER", "PORTIN", "PORTINOUT", "PORTOUT", "PWMOUT", "RTC", "SERIAL", "SERIAL_FC", "SLEEP", "SPI", "SPI_ASYNCH", "STDIO_MESSAGES"], + "features": ["BLE"], "release_versions": ["2", "5"] }, "EFM32GG_STK3700": { From 29eb75c0b568c68eb887b263c1d72b1b2dc5a5e4 Mon Sep 17 00:00:00 2001 From: Jeremy Brodt Date: Thu, 6 Oct 2016 10:21:43 -0500 Subject: [PATCH 16/89] Reduced system clock speed due to SPI issue. --- .../TARGET_Maxim/TARGET_MAX32620/device/system_max32620.c | 5 ++--- targets/TARGET_Maxim/mbed_rtx.h | 2 +- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/targets/TARGET_Maxim/TARGET_MAX32620/device/system_max32620.c b/targets/TARGET_Maxim/TARGET_MAX32620/device/system_max32620.c index d3e6b77e147..0e46ae3bbf5 100644 --- a/targets/TARGET_Maxim/TARGET_MAX32620/device/system_max32620.c +++ b/targets/TARGET_Maxim/TARGET_MAX32620/device/system_max32620.c @@ -53,7 +53,7 @@ static uint8_t running; // NOTE: Setting the CMSIS SystemCoreClock value to the actual value it will // be AFTER SystemInit() runs. This is required so the hal drivers will have // the correct value when the DATA sections are initialized. -uint32_t SystemCoreClock = RO_FREQ; +uint32_t SystemCoreClock = RO_FREQ / 2; void SystemCoreClockUpdate(void) { @@ -147,10 +147,9 @@ void SystemInit(void) low_level_init(); - // Select 96MHz ring oscillator as clock source + // Select 48MHz ring oscillator as clock source uint32_t reg = MXC_CLKMAN->clk_ctrl; reg &= ~MXC_F_CLKMAN_CLK_CTRL_SYSTEM_SOURCE_SELECT; - reg |= 1 << MXC_F_CLKMAN_CLK_CTRL_SYSTEM_SOURCE_SELECT_POS; MXC_CLKMAN->clk_ctrl = reg; // Copy trim information from shadow registers into power manager registers diff --git a/targets/TARGET_Maxim/mbed_rtx.h b/targets/TARGET_Maxim/mbed_rtx.h index d719cae00ea..f8ad272f5fc 100644 --- a/targets/TARGET_Maxim/mbed_rtx.h +++ b/targets/TARGET_Maxim/mbed_rtx.h @@ -59,7 +59,7 @@ #define OS_MAINSTKSIZE 256 #endif #ifndef OS_CLOCK -#define OS_CLOCK 96000000 +#define OS_CLOCK 48000000 #endif #endif From 5221345b4c6a6dd65943d1c7af64bae433f1cdc8 Mon Sep 17 00:00:00 2001 From: Jeremy Brodt Date: Mon, 10 Oct 2016 08:50:07 -0500 Subject: [PATCH 17/89] Updated BLE library and stack/heap size. --- .../TOOLCHAIN_ARM_STD/exactLE.ar | Bin 429522 -> 3108484 bytes .../TOOLCHAIN_GCC_ARM/libexactLE.a | Bin 966844 -> 1173804 bytes .../TARGET_MAX32610/TOOLCHAIN_IAR/exactLE.a | Bin 424398 -> 3116108 bytes .../TOOLCHAIN_GCC_ARM/startup_max32610.S | 4 ++-- .../device/TOOLCHAIN_IAR/MAX32610.icf | 4 ++-- 5 files changed, 4 insertions(+), 4 deletions(-) diff --git a/targets/TARGET_Maxim/TARGET_MAX32610/TOOLCHAIN_ARM_STD/exactLE.ar b/targets/TARGET_Maxim/TARGET_MAX32610/TOOLCHAIN_ARM_STD/exactLE.ar index 54828bf2ff3bc8eee184d4fc6e7d6375b5ee12c1..3df62abfba94aa9e59f80c2f3c1fce73f7142689 100644 GIT binary patch literal 3108484 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

    9kHnr5vudBf~kmgAw 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ⅅDVoHYLLK?4cyP&0Ag<5?TLPXrnaEkOddui?}f9F^u+{*?qIjB(VxM3%o z9ruu#GBs<~udwZSY@cnHaT=lksQo`4oR{&YTYfX~wh4(l@52}075rAiJ_U8onR2ff z-^@`As5nf_4VvtkeJx#ysD93k76pa|=c^?Ja zJK9%3FFDWWt8grFztMp|+2u#*4({0|@%{1X< z=q@~>C`Z+f#|$6uVu-Q0yuXXb#A^jn4LebS_ib31c)aT%20O-=;S{`|!EEB~1CcF% z4@1txy9Ri~;=}ie;Qbb66Ypmrm>!}ed~d(51YbVd1@P z;EglzmRfi_08o|%Z?T0}fI=ea$M>y-Z zO+drSaj+=*MJ0DYNZy|UxomUk9BY|#>34(pq=rzxf=55V^3?qZ-|NDJtr)3G*eLu8 z9L3Q0>b4f6Bl9zV@r? zT&$c)kKp!!5!fFWc!HC3UGujBBi@A*W1XXua%Lv- zk46HOiO6RtHF--*Be}yD6qE(d489)Dp&VMaI;%Len}I}z)^%$x^fH!m2>i!qG2ceip%-{y@)1HqBu zqm`lIeK~jiBzaM)^k&4u34S%Oz3FCW`%7i@i6`fun7%zX^6JS8FIsh4s!Z|oOP`z{ zO|Q5)nbfB;?cF#&ujb(1WPUp5{oKU9hMcr>`@-a^WNadB^K|N&Q#WdE|Kb%pS8z`Mrwuvy9oH=L_e^I~ zg%;M96sS9|=W;c*!YL>ZR4uCw)Q?@FzXu3iyiC*oOQ)~By3Y9j-<-dG9{8NUu7G|B zk5+6!e3fnfnte&O9}Doqb<=czmNY2dn^9wAo4=+!-+@~3E#a$dXFgHhe@A@y{59qM zca(3UFWJs~%9KaLYbefNlkclSum3e2mH{JVl;NEbrs8~dtzp4)dyD=@i+;nR+4o|0Gya^<9klp)V3N;%7|-QB!KE2C z&fm&9D@`N4{g;rpP?<9@#<{j!vO%egLtDk7R-GZ#o-r{*-jbHKwX53OSFK;CCe6%k zoICk-fCWnS=n-euHd?%kZFdM=&k@;*xYa>sdsItuh5 z=)tkN@56Ioe{2S z<2gtSAMM$vBpstZ%$*BCpxOW8Tnozr1MG;$un68Nm`%LuVD@oo3*=0^3Iv8_l6VZ4;B~=l z;;jK5WkgB%u7QP#w+JA_p)B8Ag2y)7#Onec>wqZ1yB!uL-US98>x$q#2D6EG+cEI| z&ceIYz(Y&y;k^hm!yUpywfh+9$997L#wi3vxoqR0Ux5d#Rwaa=ksyv|9Mp_J{2y@y zoqkbKhgY6jz<}a85t@uQnVw8LvP3OFA>mkBlo;72e3Y|kJm=M}RCpj7icSmk2P>ofO?kh4HLrgBs@l}2unsEju2#xXE+Xnz_w%cI zmtK7bPErn6+}|^1dJfKj8RqObc#>K@6G|-Md9iK(x@|6={OG2(2i@JWZ(;RL_rbTZ z+Y@Kk&i|SkbMma@uEhM*?Sloky$nR0-~8Td7ay)feUrzZn ztkzoHmUDDOxGI5Dm#+>ybWURO$tovOfnB>czMdC=_rpdac`g^iJPt>GH&< z5@9t0o|Jxaa7;WhYg*miHD!sP9u7srgW-bkUl^R!}^mdv{Z=D=BbeF4N` z)4cG}aQK0j#w5OdWOCx*5vSt2M@ChA=ZLx|R}h|J1iS zNgs1C5)CCH`(Hg0C@)JyOZRPKTFY5Ne;LoQE&I4@zlW|TVmn#EMnEaH`o79G9-}