From b328c1cbac55d6ed9ab4708611e20961a28f27f1 Mon Sep 17 00:00:00 2001 From: chenchaoqun Date: Mon, 27 Jul 2020 11:36:57 +0800 Subject: [PATCH 01/30] [modify] if ... else if constructs to be terminated with an else clause, which other option is invalid and delete surplus space. --- src/ipc.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/src/ipc.c b/src/ipc.c index 8e8c4db842..876d8df3a1 100644 --- a/src/ipc.c +++ b/src/ipc.c @@ -1080,6 +1080,13 @@ rt_err_t rt_event_send(rt_event_t event, rt_uint32_t set) status = RT_EOK; } } + else + { + /* enable interrupt */ + rt_hw_interrupt_enable(level); + + return -RT_EINVAL; + } /* move node to the next */ n = n->next; @@ -1186,10 +1193,10 @@ rt_err_t rt_event_recv(rt_event_t event, { /* no waiting */ thread->error = -RT_ETIMEOUT; - + /* enable interrupt */ rt_hw_interrupt_enable(level); - + return -RT_ETIMEOUT; } else -- Gitee From 55cfefd90a58e7e0d33e13714f21fb75a9718010 Mon Sep 17 00:00:00 2001 From: chenchaoqun Date: Mon, 27 Jul 2020 11:49:52 +0800 Subject: [PATCH 02/30] [add] switch default clause --- src/ipc.c | 3 +++ src/timer.c | 5 ++++- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/src/ipc.c b/src/ipc.c index 8e8c4db842..dd681f2892 100644 --- a/src/ipc.c +++ b/src/ipc.c @@ -117,6 +117,9 @@ rt_inline rt_err_t rt_ipc_list_suspend(rt_list_t *list, rt_list_insert_before(list, &(thread->tlist)); } break; + + default: + break; } return RT_EOK; diff --git a/src/timer.c b/src/timer.c index 28a5a9e494..4d12c7ec78 100644 --- a/src/timer.c +++ b/src/timer.c @@ -500,7 +500,10 @@ rt_err_t rt_timer_control(rt_timer_t timer, int cmd, void *arg) /*timer is stop*/ *(rt_tick_t *)arg = RT_TIMER_FLAG_DEACTIVATED; } - break; + break; + + default: + break; } return RT_EOK; -- Gitee From a78c6bedea2bb4e9833fdb2cc22f3af813724609 Mon Sep 17 00:00:00 2001 From: chenchaoqun Date: Mon, 27 Jul 2020 14:01:30 +0800 Subject: [PATCH 03/30] [add] a macro to be isolated while using signals in rt_mutex_take function. --- src/ipc.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/ipc.c b/src/ipc.c index 8e8c4db842..b0efdd1320 100644 --- a/src/ipc.c +++ b/src/ipc.c @@ -685,7 +685,9 @@ rt_err_t rt_mutex_take(rt_mutex_t mutex, rt_int32_t time) } else { +#ifdef RT_USING_SIGNALS __again: +#endif /* end of RT_USING_SIGNALS */ /* The value of mutex is 1 in initial status. Therefore, if the * value is great than 0, it indicates the mutex is avaible. */ @@ -754,8 +756,10 @@ __again: if (thread->error != RT_EOK) { +#ifdef RT_USING_SIGNALS /* interrupt by signal, try it again */ if (thread->error == -RT_EINTR) goto __again; +#endif /* end of RT_USING_SIGNALS */ /* return error */ return thread->error; -- Gitee From 224c3224c7d1bea2f52bb51aca505812a12b9255 Mon Sep 17 00:00:00 2001 From: chenchaoqun Date: Mon, 27 Jul 2020 14:11:35 +0800 Subject: [PATCH 04/30] [format] enumeration define two styles: define first or all. --- include/rtdef.h | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/include/rtdef.h b/include/rtdef.h index b391ff7685..747643bb82 100644 --- a/include/rtdef.h +++ b/include/rtdef.h @@ -372,20 +372,20 @@ typedef struct rt_object *rt_object_t; /**< Type for kernel obj */ enum rt_object_class_type { - RT_Object_Class_Null = 0, /**< The object is not used. */ - RT_Object_Class_Thread, /**< The object is a thread. */ - RT_Object_Class_Semaphore, /**< The object is a semaphore. */ - RT_Object_Class_Mutex, /**< The object is a mutex. */ - RT_Object_Class_Event, /**< The object is a event. */ - RT_Object_Class_MailBox, /**< The object is a mail box. */ - RT_Object_Class_MessageQueue, /**< The object is a message queue. */ - RT_Object_Class_MemHeap, /**< The object is a memory heap */ - RT_Object_Class_MemPool, /**< The object is a memory pool. */ - RT_Object_Class_Device, /**< The object is a device */ - RT_Object_Class_Timer, /**< The object is a timer. */ - RT_Object_Class_Module, /**< The object is a module. */ - RT_Object_Class_Unknown, /**< The object is unknown. */ - RT_Object_Class_Static = 0x80 /**< The object is a static object. */ + RT_Object_Class_Null = 0x00, /**< The object is not used. */ + RT_Object_Class_Thread = 0x01, /**< The object is a thread. */ + RT_Object_Class_Semaphore = 0x02, /**< The object is a semaphore. */ + RT_Object_Class_Mutex = 0x03, /**< The object is a mutex. */ + RT_Object_Class_Event = 0x04, /**< The object is a event. */ + RT_Object_Class_MailBox = 0x05, /**< The object is a mail box. */ + RT_Object_Class_MessageQueue = 0x06, /**< The object is a message queue. */ + RT_Object_Class_MemHeap = 0x07, /**< The object is a memory heap. */ + RT_Object_Class_MemPool = 0x08, /**< The object is a memory pool. */ + RT_Object_Class_Device = 0x09, /**< The object is a device. */ + RT_Object_Class_Timer = 0x0a, /**< The object is a timer. */ + RT_Object_Class_Module = 0x0b, /**< The object is a module. */ + RT_Object_Class_Unknown = 0x0c, /**< The object is unknown. */ + RT_Object_Class_Static = 0x80 /**< The object is a static object. */ }; /** -- Gitee From 9f41cbced8058faf40b54353b1d9d981650b1b3e Mon Sep 17 00:00:00 2001 From: chenchaoqun Date: Mon, 27 Jul 2020 14:18:16 +0800 Subject: [PATCH 05/30] [format] code style of rt_strcmp function --- src/kservice.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/src/kservice.c b/src/kservice.c index 1705ce5283..dd7458f106 100644 --- a/src/kservice.c +++ b/src/kservice.c @@ -456,7 +456,10 @@ RTM_EXPORT(rt_strncmp); rt_int32_t rt_strcmp(const char *cs, const char *ct) { while (*cs && *cs == *ct) - cs++, ct++; + { + cs++; + ct++; + } return (*cs - *ct); } -- Gitee From 984e8e5651d98be190c4607b087ca6907026e96a Mon Sep 17 00:00:00 2001 From: chenchaoqun Date: Fri, 24 Jul 2020 11:53:57 +0800 Subject: [PATCH 06/30] [modify] internal function 'isdigit' name to '_ISDIGIT' --- src/kservice.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/kservice.c b/src/kservice.c index 1705ce5283..cf03fb59b1 100644 --- a/src/kservice.c +++ b/src/kservice.c @@ -543,7 +543,7 @@ void rt_show_version(void) RTM_EXPORT(rt_show_version); /* private function */ -#define isdigit(c) ((unsigned)((c) - '0') < 10) +#define _ISDIGIT(c) ((unsigned)((c) - '0') < 10) #ifdef RT_PRINTF_LONGLONG rt_inline int divide(long long *n, int base) @@ -588,7 +588,7 @@ rt_inline int divide(long *n, int base) rt_inline int skip_atoi(const char **s) { register int i = 0; - while (isdigit(**s)) + while (_ISDIGIT(**s)) i = i * 10 + *((*s)++) - '0'; return i; @@ -834,7 +834,7 @@ rt_int32_t rt_vsnprintf(char *buf, /* get field width */ field_width = -1; - if (isdigit(*fmt)) field_width = skip_atoi(&fmt); + if (_ISDIGIT(*fmt)) field_width = skip_atoi(&fmt); else if (*fmt == '*') { ++ fmt; @@ -853,7 +853,7 @@ rt_int32_t rt_vsnprintf(char *buf, if (*fmt == '.') { ++ fmt; - if (isdigit(*fmt)) precision = skip_atoi(&fmt); + if (_ISDIGIT(*fmt)) precision = skip_atoi(&fmt); else if (*fmt == '*') { ++ fmt; -- Gitee From 814b646d17fb3219b2b832be9d5df676a881614e Mon Sep 17 00:00:00 2001 From: zhiweih Date: Mon, 27 Jul 2020 23:09:26 +0800 Subject: [PATCH 07/30] Specify date string length in FINSH date command. libc ctime returns a fixed 25 character string without a NULL terminator. Print it without specifying length in FINSH date command prints extra contents and could potentially be dangerous. --- components/drivers/rtc/rtc.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/components/drivers/rtc/rtc.c b/components/drivers/rtc/rtc.c index e17c0fe7dd..682515ce98 100644 --- a/components/drivers/rtc/rtc.c +++ b/components/drivers/rtc/rtc.c @@ -179,7 +179,7 @@ void list_date(void) time_t now; now = time(RT_NULL); - rt_kprintf("%s\n", ctime(&now)); + rt_kprintf("%.*s\n", 25, ctime(&now)); } FINSH_FUNCTION_EXPORT(list_date, show date and time.) @@ -194,7 +194,7 @@ static void date(uint8_t argc, char **argv) time_t now; /* output current time */ now = time(RT_NULL); - rt_kprintf("%s", ctime(&now)); + rt_kprintf("%.*s", 25, ctime(&now)); } else if (argc >= 7) { -- Gitee From 70e5cd4d73c6bd47a664f8ef6c97c785a452795f Mon Sep 17 00:00:00 2001 From: liuduanfei <939763442@qq.com> Date: Tue, 28 Jul 2020 09:45:29 +0800 Subject: [PATCH 08/30] Update SConstruct Update SConstruct fix compilation error --- bsp/imx6ul/SConstruct | 1 + 1 file changed, 1 insertion(+) diff --git a/bsp/imx6ul/SConstruct b/bsp/imx6ul/SConstruct index 9483ea927d..8c9e4ee347 100644 --- a/bsp/imx6ul/SConstruct +++ b/bsp/imx6ul/SConstruct @@ -20,6 +20,7 @@ env = Environment(tools = ['mingw'], AR = rtconfig.AR, ARFLAGS = '-rc', LINK = rtconfig.LINK, LINKFLAGS = rtconfig.LFLAGS) env.PrependENVPath('PATH', rtconfig.EXEC_PATH) +env['ASCOM'] = env['ASPPCOM'] Export('RTT_ROOT') Export('rtconfig') -- Gitee From 0e619491163d2e2b4c1cc262f0faee3b1ced55b7 Mon Sep 17 00:00:00 2001 From: shaojinchun Date: Tue, 28 Jul 2020 09:55:01 +0800 Subject: [PATCH 09/30] avoid deadlock (rt_hw_interrupt_disable and rt_enter_critical when enable smp) --- src/scheduler.c | 25 +++++++++++++------------ 1 file changed, 13 insertions(+), 12 deletions(-) diff --git a/src/scheduler.c b/src/scheduler.c index 6baaa9627a..0c1bf1e506 100644 --- a/src/scheduler.c +++ b/src/scheduler.c @@ -33,10 +33,6 @@ #include #include -#ifdef RT_USING_SMP -rt_hw_spinlock_t _rt_critical_lock; -#endif /*RT_USING_SMP*/ - rt_list_t rt_thread_priority_table[RT_THREAD_PRIORITY_MAX]; rt_uint32_t rt_thread_ready_priority_group; #if RT_THREAD_PRIORITY_MAX > 32 @@ -851,7 +847,7 @@ void rt_enter_critical(void) if (!current_thread) { rt_hw_local_irq_enable(level); - return ; + return; } /* @@ -859,12 +855,15 @@ void rt_enter_critical(void) * enough and does not check here */ - /* lock scheduler for all cpus */ - if (current_thread->critical_lock_nest == 0) { - rt_hw_spin_lock(&_rt_critical_lock); + register rt_uint16_t lock_nest = current_thread->cpus_lock_nest; + current_thread->cpus_lock_nest++; + if (lock_nest == 0) + { + current_thread->scheduler_lock_nest ++; + rt_hw_spin_lock(&_cpus_lock); + } } - /* critical for local cpu */ current_thread->critical_lock_nest ++; @@ -910,16 +909,18 @@ void rt_exit_critical(void) if (!current_thread) { rt_hw_local_irq_enable(level); - return ; + return; } current_thread->scheduler_lock_nest --; current_thread->critical_lock_nest --; - if (current_thread->critical_lock_nest == 0) + current_thread->cpus_lock_nest--; + if (current_thread->cpus_lock_nest == 0) { - rt_hw_spin_unlock(&_rt_critical_lock); + current_thread->scheduler_lock_nest --; + rt_hw_spin_unlock(&_cpus_lock); } if (current_thread->scheduler_lock_nest <= 0) -- Gitee From 1fe077a0be8636a3aeb39b897373f493da06f9c6 Mon Sep 17 00:00:00 2001 From: Meco <920369182@qq.com> Date: Wed, 29 Jul 2020 09:57:32 +0800 Subject: [PATCH 10/30] =?UTF-8?q?fix=E5=9C=A8rt=5Fevent=5Frecv=E5=87=BD?= =?UTF-8?q?=E6=95=B0=E4=B8=AD=EF=BC=8C=E5=A6=82=E6=9E=9C=E4=BA=8B=E4=BB=B6?= =?UTF-8?q?=E5=B7=B2=E7=BB=8F=E6=BB=A1=E8=B6=B3=E6=97=A0=E9=9C=80=E9=98=BB?= =?UTF-8?q?=E5=A1=9E=E7=9A=84=E6=83=85=E5=86=B5=E4=B8=8B=EF=BC=8C=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=E7=BB=99thread->event=5Fset/event=5Finfo=E8=B5=8B?= =?UTF-8?q?=E5=80=BC=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/ipc.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/src/ipc.c b/src/ipc.c index 8e8c4db842..c67909cfe0 100644 --- a/src/ipc.c +++ b/src/ipc.c @@ -34,6 +34,8 @@ * 2013-09-14 Grissiom add an option check in rt_event_recv * 2018-10-02 Bernard add 64bit support for mailbox * 2019-09-16 tyx add send wait support for message queue + * 2020-07-29 Meco Man fix thread->event_set/event_info when received an + event without pending */ #include @@ -1177,7 +1179,11 @@ rt_err_t rt_event_recv(rt_event_t event, /* set received event */ if (recved) *recved = (event->set & set); - + + /* fill thread event info */ + thread->event_set = (event->set & set); + thread->event_info = option; + /* received event */ if (option & RT_EVENT_FLAG_CLEAR) event->set &= ~set; -- Gitee From 24ebc3dc5bfb0210766f2df0bc243eac73fa5a8c Mon Sep 17 00:00:00 2001 From: WangQiang Date: Thu, 30 Jul 2020 11:57:12 +0800 Subject: [PATCH 11/30] fixed gcc assembly option in rtconfig.py for imxrt1064-nxp-evk --- bsp/imxrt/imxrt1064-nxp-evk/README.md | 4 ++-- bsp/imxrt/imxrt1064-nxp-evk/rtconfig.py | 3 +++ 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/bsp/imxrt/imxrt1064-nxp-evk/README.md b/bsp/imxrt/imxrt1064-nxp-evk/README.md index 434f13c651..37a5e3d1dd 100644 --- a/bsp/imxrt/imxrt1064-nxp-evk/README.md +++ b/bsp/imxrt/imxrt1064-nxp-evk/README.md @@ -71,7 +71,7 @@ ### 快速上手 -本 BSP 为开发者提供 MDK4、MDK5 和 IAR 工程,暂不支持 GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 +本 BSP 为开发者提供 MDK4、MDK5 和 IAR 工程,以及GCC 开发环境。下面以 MDK5 开发环境为例,介绍如何将系统运行起来。 #### 硬件连接 @@ -115,4 +115,4 @@ msh > 维护人: -- [王强](https://github.com/xfwangqiang), 邮箱:<164877907@qq.com> \ No newline at end of file +- [王强](https://github.com/xfwangqiang, https://gitee.com/xfwangqiang), 邮箱:<164877907@qq.com> \ No newline at end of file diff --git a/bsp/imxrt/imxrt1064-nxp-evk/rtconfig.py b/bsp/imxrt/imxrt1064-nxp-evk/rtconfig.py index 2acb77e3ed..eeef72b0c6 100644 --- a/bsp/imxrt/imxrt1064-nxp-evk/rtconfig.py +++ b/bsp/imxrt/imxrt1064-nxp-evk/rtconfig.py @@ -53,6 +53,9 @@ if PLATFORM == 'gcc': CPATH = '' LPATH = '' + AFLAGS += ' -D__STARTUP_INITIALIZE_NONCACHEDATA' + AFLAGS += ' -D__STARTUP_CLEAR_BSS' + if BUILD == 'debug': CFLAGS += ' -gdwarf-2' AFLAGS += ' -gdwarf-2' -- Gitee From d9a312d55d44624aa0512f1a03857a1a44fcaf3d Mon Sep 17 00:00:00 2001 From: SummerGift Date: Thu, 30 Jul 2020 09:33:27 +0800 Subject: [PATCH 12/30] [bsp][stm32] update stm32h743-st-nucleo/board/SConscript to fix compiling error after dist --- bsp/stm32/stm32h743-st-nucleo/board/SConscript | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/bsp/stm32/stm32h743-st-nucleo/board/SConscript b/bsp/stm32/stm32h743-st-nucleo/board/SConscript index 4a4c806804..86e530023b 100644 --- a/bsp/stm32/stm32h743-st-nucleo/board/SConscript +++ b/bsp/stm32/stm32h743-st-nucleo/board/SConscript @@ -1,6 +1,8 @@ import rtconfig from building import * +Import('SDK_LIB') + cwd = GetCurrentDir() # add the general drivers. @@ -10,12 +12,14 @@ src += Glob('CubeMX_Config/Src/stm32h7xx_hal_msp.c') path = [cwd] path += [cwd + '/CubeMX_Config/Inc'] +startup_path_prefix = SDK_LIB + if rtconfig.CROSS_TOOL == 'gcc': - src += [cwd + '/../../libraries/STM32H7xx_HAL/CMSIS/Device/ST/STM32H7xx/Source/Templates/gcc/startup_stm32h743xx.s'] + src += [startup_path_prefix + '/STM32H7xx_HAL/CMSIS/Device/ST/STM32H7xx/Source/Templates/gcc/startup_stm32h743xx.s'] elif rtconfig.CROSS_TOOL == 'keil': - src += [cwd + '/../../libraries/STM32H7xx_HAL/CMSIS/Device/ST/STM32H7xx/Source/Templates/arm/startup_stm32h743xx.s'] + src += [startup_path_prefix + '/STM32H7xx_HAL/CMSIS/Device/ST/STM32H7xx/Source/Templates/arm/startup_stm32h743xx.s'] elif rtconfig.CROSS_TOOL == 'iar': - src += [cwd + '/../../libraries/STM32H7xx_HAL/CMSIS/Device/ST/STM32H7xx/Source/Templates/iar/startup_stm32h743xx.s'] + src += [startup_path_prefix + '/STM32H7xx_HAL/CMSIS/Device/ST/STM32H7xx/Source/Templates/iar/startup_stm32h743xx.s'] # STM32H743xx || STM32H750xx || STM32F753xx # You can select chips from the list above -- Gitee From 58b05abc91b28f2e523c8c9e9cf8ff4940c0b4b4 Mon Sep 17 00:00:00 2001 From: supperthomas <78900636@qq.com> Date: Sat, 1 Aug 2020 15:54:31 +0800 Subject: [PATCH 13/30] [bsp/nrf5x]: add the driver of pwm --- bsp/nrf5x/libraries/drivers/SConscript | 4 + bsp/nrf5x/libraries/drivers/drv_pwm.c | 432 +++++++++++++++++++++++++ bsp/nrf5x/nrf52840/board/Kconfig | 146 +++++++-- 3 files changed, 564 insertions(+), 18 deletions(-) create mode 100644 bsp/nrf5x/libraries/drivers/drv_pwm.c diff --git a/bsp/nrf5x/libraries/drivers/SConscript b/bsp/nrf5x/libraries/drivers/SConscript index 6bbdffce07..b446b7c3b4 100644 --- a/bsp/nrf5x/libraries/drivers/SConscript +++ b/bsp/nrf5x/libraries/drivers/SConscript @@ -19,8 +19,12 @@ if GetDepend(['BSP_USING_QSPI_FLASH']): if GetDepend(['BSP_USING_SPI']): src += ['drv_spi.c'] + if GetDepend(['BSP_USING_GPIO']): src += ['drv_gpio.c'] + +if GetDepend(['BSP_USING_PWM']): + src += ['drv_pwm.c'] path = [cwd] diff --git a/bsp/nrf5x/libraries/drivers/drv_pwm.c b/bsp/nrf5x/libraries/drivers/drv_pwm.c new file mode 100644 index 0000000000..4d7c036ce5 --- /dev/null +++ b/bsp/nrf5x/libraries/drivers/drv_pwm.c @@ -0,0 +1,432 @@ +/* + * Copyright (c) 2006-2020, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2020-07-26 supperthomas first version + * + */ + + +#include +#include "rtdevice.h" +#include "rtservice.h" + +#ifdef RT_USING_PWM + +#include + +struct mcu_pwm +{ + struct rt_device_pwm pwm_device; + + nrfx_pwm_t *pwm_handle; + nrf_pwm_values_individual_t m_demo1_seq_values; + nrf_pwm_sequence_t m_demo1_seq; + + rt_uint8_t channel; + char *name; + rt_uint64_t pwm_src_clk; + uint8_t channel_0_pin; + uint8_t channel_1_pin; + uint8_t channel_2_pin; + uint8_t channel_3_pin; +}; + +enum +{ +#ifdef BSP_USING_PWM0 + PWM0_INDEX, +#endif +#ifdef BSP_USING_PWM1 + PWM1_INDEX, +#endif +#ifdef BSP_USING_PWM2 + PWM2_INDEX, +#endif +#ifdef BSP_USING_PWM3 + PWM3_INDEX, +#endif +}; +#ifdef BSP_USING_PWM0 +static nrfx_pwm_t m_pwm0 = NRFX_PWM_INSTANCE(0); +#define PWM0_CONFIG \ + { \ + .pwm_handle = &m_pwm0, \ + .name = "pwm0", \ + .pwm_src_clk = 1000000, \ + } +#endif + +#ifdef BSP_USING_PWM1 +static nrfx_pwm_t m_pwm1 = NRFX_PWM_INSTANCE(1); +#define PWM1_CONFIG \ + { \ + .pwm_handle = &m_pwm1, \ + .name = "pwm1", \ + .pwm_src_clk = 1000000, \ + } +#endif + +#ifdef BSP_USING_PWM2 +static nrfx_pwm_t m_pwm2 = NRFX_PWM_INSTANCE(2); +#define PWM2_CONFIG \ + { \ + .pwm_handle = &m_pwm2, \ + .name = "pwm2", \ + .pwm_src_clk = 1000000, \ + } +#endif + +#ifdef BSP_USING_PWM3 +static nrfx_pwm_t m_pwm3 = NRFX_PWM_INSTANCE(3); +#define PWM3_CONFIG \ + { \ + .pwm_handle = &m_pwm3, \ + .name = "pwm3", \ + .pwm_src_clk = 1000000, \ + } +#endif + +static struct mcu_pwm mcu_pwm_obj[] = +{ +#ifdef BSP_USING_PWM0 + PWM0_CONFIG, +#endif +#ifdef BSP_USING_PWM1 + PWM1_CONFIG, +#endif + +#ifdef BSP_USING_PWM2 + PWM2_CONFIG, +#endif + +#ifdef BSP_USING_PWM3 + PWM3_CONFIG, +#endif +}; + +static rt_err_t drv_pwm_control(struct rt_device_pwm *device, int cmd, void *arg); +static struct rt_pwm_ops drv_ops = +{ + drv_pwm_control +}; + +static rt_err_t drv_pwm_enable(struct mcu_pwm *p_mcu, struct rt_pwm_configuration *configuration, rt_bool_t enable) +{ + if (!enable) + { + nrfx_pwm_stop(p_mcu->pwm_handle, true); + } + else + { + (void)nrfx_pwm_simple_playback(p_mcu->pwm_handle, &p_mcu->m_demo1_seq, 1, NRFX_PWM_FLAG_LOOP); + } + + return RT_EOK; +} + +uint8_t mcu_get_channel_number(uint8_t channel) +{ + if (channel & 0x01) + { + return 0; + } + else if (channel & 0x02) + { + return 1; + } + else if (channel & 0x04) + { + return 2; + } + else if (channel & 0x08) + { + return 3; + } + return 0; +} + +static rt_err_t drv_pwm_get(struct mcu_pwm *pwm_handle, struct rt_pwm_configuration *configuration) +{ + rt_uint8_t channel_number = mcu_get_channel_number(configuration->channel); + uint8_t tick_pscond; + + tick_pscond = pwm_handle->pwm_src_clk / 1000000UL; + configuration->period = pwm_handle->pwm_handle->p_registers->COUNTERTOP * 1000UL / tick_pscond; + configuration->pulse = pwm_handle->pwm_handle->p_registers->SEQ[channel_number].PTR / tick_pscond; + + return RT_EOK; +} + +static void nrfx_set_prioid(nrfx_pwm_t *pwm_handle, uint32_t perioid) +{ + pwm_handle->p_registers->COUNTERTOP = perioid; +} + +static rt_err_t drv_pwm_set(struct mcu_pwm *p_mcu, struct rt_pwm_configuration *configuration) +{ + rt_uint32_t period, pulse; + uint8_t tick_pscond; + tick_pscond = p_mcu->pwm_src_clk / 1000000UL; + + p_mcu->pwm_handle->p_registers->COUNTERTOP = (unsigned long long)configuration->period * tick_pscond; + if (configuration->channel & 0x01) + { + p_mcu->m_demo1_seq_values.channel_0 = configuration->pulse; + } + + if (configuration->channel & 0x02) + { + p_mcu->m_demo1_seq_values.channel_1 = configuration->pulse; + } + + if (configuration->channel & 0x04) + { + p_mcu->m_demo1_seq_values.channel_2 = configuration->pulse; + } + + if (configuration->channel & 0x08) + { + p_mcu->m_demo1_seq_values.channel_3 = configuration->pulse; + } + return RT_EOK; +} + +static rt_err_t drv_pwm_control(struct rt_device_pwm *device, int cmd, void *arg) +{ + struct rt_pwm_configuration *configuration = (struct rt_pwm_configuration *)arg; + void *pwm_handle = (void *)device->parent.user_data; + nrfx_pwm_t *p_handle = (nrfx_pwm_t *)pwm_handle; + struct mcu_pwm *p_mcu = rt_container_of(p_handle, struct mcu_pwm, pwm_handle); + switch (cmd) + { + case PWM_CMD_ENABLE: + return drv_pwm_enable(p_mcu, configuration, RT_TRUE); + case PWM_CMD_DISABLE: + return drv_pwm_enable(p_mcu, configuration, RT_FALSE); + case PWM_CMD_SET: + return drv_pwm_set(p_mcu, configuration); + case PWM_CMD_GET: + return drv_pwm_get(p_mcu, configuration); + default: + return RT_EINVAL; + } +} + +static rt_err_t mcu_hw_pwm_init(struct mcu_pwm *device) +{ +#define NRFX_PWM_PIN_INVERTED 0x80 +#define _PRIO_APP_LOWEST 7 + nrfx_pwm_config_t config0 = + { + .irq_priority = _PRIO_APP_LOWEST, + .base_clock = NRF_PWM_CLK_1MHz, //default value + .count_mode = NRF_PWM_MODE_UP, + .top_value = 5000, //default vaule + .load_mode = NRF_PWM_LOAD_INDIVIDUAL, + .step_mode = NRF_PWM_STEP_AUTO + }; + rt_err_t result = RT_EOK; + if (device->pwm_src_clk == 1000000) + { + config0.base_clock = NRF_PWM_CLK_1MHz; + } + else if (device->pwm_src_clk == 2000000) + { + config0.base_clock = NRF_PWM_CLK_2MHz; + } + else if (device->pwm_src_clk == 8000000) + { + config0.base_clock = NRF_PWM_CLK_8MHz; + } + else + { + config0.base_clock = NRF_PWM_CLK_1MHz; + } + + if (device->channel & 0x01) + { + config0.output_pins[0] = device->channel_0_pin | NRFX_PWM_PIN_INVERTED; + } + + if (device->channel & 0x02) + { + config0.output_pins[1] = device->channel_1_pin | NRFX_PWM_PIN_INVERTED; + } + + if (device->channel & 0x04) + { + config0.output_pins[2] = device->channel_2_pin | NRFX_PWM_PIN_INVERTED; + } + + if (device->channel & 0x08) + { + config0.output_pins[3] = device->channel_3_pin | NRFX_PWM_PIN_INVERTED; + } + device->m_demo1_seq.values.p_individual = &device->m_demo1_seq_values; + device->m_demo1_seq.length = NRF_PWM_VALUES_LENGTH(device->m_demo1_seq_values), + nrfx_pwm_init(device->pwm_handle, &config0, NULL, NULL); + return result; +} + +static void pwm_get_channel(void) +{ +#ifdef BSP_USING_PWM0_CH0 + mcu_pwm_obj[PWM0_INDEX].channel |= 1 << 0; + mcu_pwm_obj[PWM0_INDEX].channel_0_pin = BSP_USING_PWM0_CH0; +#endif +#ifdef BSP_USING_PWM0_CH1 + mcu_pwm_obj[PWM0_INDEX].channel |= 1 << 1; + mcu_pwm_obj[PWM0_INDEX].channel_1_pin = BSP_USING_PWM0_CH1; +#endif +#ifdef BSP_USING_PWM0_CH2 + mcu_pwm_obj[PWM0_INDEX].channel |= 1 << 2; + mcu_pwm_obj[PWM0_INDEX].channel_2_pin = BSP_USING_PWM0_CH2; +#endif +#ifdef BSP_USING_PWM0_CH3 + mcu_pwm_obj[PWM0_INDEX].channel |= 1 << 3; + mcu_pwm_obj[PWM0_INDEX].channel_3_pin = BSP_USING_PWM0_CH3; +#endif +#ifdef BSP_USING_PWM1_CH0 + mcu_pwm_obj[PWM1_INDEX].channel |= 1 << 0; + mcu_pwm_obj[PWM1_INDEX].channel_0_pin = BSP_USING_PWM1_CH0; +#endif +#ifdef BSP_USING_PWM1_CH1 + mcu_pwm_obj[PWM1_INDEX].channel |= 1 << 1; + mcu_pwm_obj[PWM1_INDEX].channel_1_pin = BSP_USING_PWM1_CH1; +#endif +#ifdef BSP_USING_PWM1_CH2 + mcu_pwm_obj[PWM1_INDEX].channel |= 1 << 2; + mcu_pwm_obj[PWM1_INDEX].channel_2_pin = BSP_USING_PWM1_CH2; +#endif +#ifdef BSP_USING_PWM1_CH3 + mcu_pwm_obj[PWM1_INDEX].channel |= 1 << 3; + mcu_pwm_obj[PWM1_INDEX].channel_3_pin = BSP_USING_PWM1_CH3; +#endif +#ifdef BSP_USING_PWM2_CH0 + mcu_pwm_obj[PWM2_INDEX].channel |= 1 << 0; + mcu_pwm_obj[PWM2_INDEX].channel_0_pin = BSP_USING_PWM2_CH0; +#endif +#ifdef BSP_USING_PWM2_CH1 + mcu_pwm_obj[PWM2_INDEX].channel |= 1 << 1; + mcu_pwm_obj[PWM2_INDEX].channel_1_pin = BSP_USING_PWM2_CH1; +#endif +#ifdef BSP_USING_PWM2_CH2 + mcu_pwm_obj[PWM2_INDEX].channel |= 1 << 2; + mcu_pwm_obj[PWM2_INDEX].channel_2_pin = BSP_USING_PWM2_CH2; +#endif +#ifdef BSP_USING_PWM2_CH3 + mcu_pwm_obj[PWM2_INDEX].channel |= 1 << 3; + mcu_pwm_obj[PWM2_INDEX].channel_3_pin = BSP_USING_PWM2_CH3; +#endif +#ifdef BSP_USING_PWM3_CH0 + mcu_pwm_obj[PWM3_INDEX].channel |= 1 << 0; + mcu_pwm_obj[PWM3_INDEX].channel_0_pin = BSP_USING_PWM3_CH0; +#endif +#ifdef BSP_USING_PWM3_CH1 + mcu_pwm_obj[PWM3_INDEX].channel |= 1 << 1; + mcu_pwm_obj[PWM3_INDEX].channel_1_pin = BSP_USING_PWM3_CH1; +#endif +#ifdef BSP_USING_PWM3_CH2 + mcu_pwm_obj[PWM3_INDEX].channel |= 1 << 2; + mcu_pwm_obj[PWM3_INDEX].channel_2_pin = BSP_USING_PWM3_CH2; +#endif +#ifdef BSP_USING_PWM3_CH3 + mcu_pwm_obj[PWM3_INDEX].channel |= 1 << 3; + mcu_pwm_obj[PWM3_INDEX].channel_3_pin = BSP_USING_PWM3_CH3; +#endif +} + +static int mcu_pwm_init(void) +{ + int i = 0; + int result = RT_EOK; + + pwm_get_channel(); + for (i = 0; i < sizeof(mcu_pwm_obj) / sizeof(mcu_pwm_obj[0]); i++) + { + /* pwm init */ + if (mcu_hw_pwm_init(&mcu_pwm_obj[i]) != RT_EOK) + { + rt_kprintf("\r\n %s init failed", mcu_pwm_obj[i].name); + result = -RT_ERROR; + goto __exit; + } + else + { + rt_kprintf("\r\n %s init success", mcu_pwm_obj[i].name); + + /* register pwm device */ + if (rt_device_pwm_register(&mcu_pwm_obj[i].pwm_device, mcu_pwm_obj[i].name, &drv_ops, &mcu_pwm_obj[i].pwm_handle) == RT_EOK) + { + rt_kprintf("\r\n %s register success", mcu_pwm_obj[i].name); + } + else + { + rt_kprintf("\r\n %s register failed", mcu_pwm_obj[i].name); + result = -RT_ERROR; + } + } + } +__exit: + return result; +} +INIT_DEVICE_EXPORT(mcu_pwm_init); + + + +/* test example */ +#define PWM_DEV_NAME "pwm0" /* PWM name*/ +#define PWM_DEV_CHANNEL 15 /* PWM channel */ + +struct rt_device_pwm *pwm_dev; + +static int pwm_led_sample(int argc, char *argv[]) +{ + rt_uint32_t period, pulse, dir; + + period = 50000; /* 50ms*/ + dir = 1; + pulse = 0; + + + pwm_dev = (struct rt_device_pwm *)rt_device_find(PWM_DEV_NAME); + if (pwm_dev == RT_NULL) + { + rt_kprintf("pwm sample run failed! can't find %s device!\n", PWM_DEV_NAME); + return RT_ERROR; + } + + rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse); + rt_pwm_enable(pwm_dev, PWM_DEV_CHANNEL); + + while (1) + { + rt_thread_mdelay(50); + if (dir) + { + pulse += 500; + } + else + { + pulse -= 500; + } + if (pulse >= period) + { + dir = 0; + } + if (0 == pulse) + { + dir = 1; + } + + + rt_pwm_set(pwm_dev, PWM_DEV_CHANNEL, period, pulse); + } +} +MSH_CMD_EXPORT(pwm_led_sample, pwm sample); + +#endif \ No newline at end of file diff --git a/bsp/nrf5x/nrf52840/board/Kconfig b/bsp/nrf5x/nrf52840/board/Kconfig index 9f95a9177e..1bf97f6e4d 100644 --- a/bsp/nrf5x/nrf52840/board/Kconfig +++ b/bsp/nrf5x/nrf52840/board/Kconfig @@ -7,6 +7,12 @@ config SOC_NRF52840 select RT_USING_USER_MAIN default y +config SOC_NORDIC + bool + config SOC_NORDIC + default y + + menu "Onboard Peripheral Drivers" config BSP_USING_JLINK_TO_USART bool "Enable JLINK TO USART (uart0|RX_PIN:8|TX_PIN:6)" @@ -55,38 +61,142 @@ menu "On-chip Peripheral Drivers" bool "Enable GPIO" select RT_USING_PIN default y + menuconfig BSP_USING_PWM + bool "Enable PWM" + select RT_USING_PWM + default n + if BSP_USING_PWM + config NRFX_PWM_ENABLED + int + default 1 + config BSP_USING_PWM0 + bool "Enable PWM0 bus" + default y + if BSP_USING_PWM0 + config NRFX_PWM0_ENABLED + int + default 1 + config BSP_USING_PWM0_CH0 + int "PWM0 channel 0 pin number set" + range 0 47 + default 13 + config BSP_USING_PWM0_CH1 + int "PWM0 channel 1 pin number set" + range 0 47 + default 14 + config BSP_USING_PWM0_CH2 + int "PWM0 channel 2 pin number set" + range 0 47 + default 15 + config BSP_USING_PWM0_CH3 + int "PWM0 channel 3 pin number set" + range 0 47 + default 16 + endif + config BSP_USING_PWM1 + bool "Enable PWM1 bus" + default n + if BSP_USING_PWM1 + config NRFX_PWM1_ENABLED + int + default 1 + config BSP_USING_PWM1_CH0 + int "PWM1 channel 0 pin number set" + range 0 47 + default 13 + config BSP_USING_PWM1_CH1 + int "PWM1 channel 1 pin number set" + range 0 47 + default 14 + config BSP_USING_PWM1_CH2 + int "PWM1 channel 2 pin number set" + range 0 47 + default 15 + config BSP_USING_PWM1_CH3 + int "PWM1 channel 3 pin number set" + range 0 47 + default 16 + endif + config BSP_USING_PWM2 + bool "Enable PWM2 bus" + default n + if BSP_USING_PWM2 + config NRFX_PWM2_ENABLED + int + default 1 + config BSP_USING_PWM2_CH0 + int "PWM2 channel 0 pin number set" + range 0 47 + default 13 + config BSP_USING_PWM2_CH1 + int "PWM2 channel 1 pin number set" + range 0 47 + default 14 + config BSP_USING_PWM2_CH2 + int "PWM2 channel 2 pin number set" + range 0 47 + default 15 + config BSP_USING_PWM2_CH3 + int "PWM2 channel 3 pin number set" + range 0 47 + default 16 + endif + config BSP_USING_PWM3 + bool "Enable PWM3 bus" + default n + if BSP_USING_PWM3 + config NRFX_PWM3_ENABLED + int + default 1 + config BSP_USING_PWM3_CH0 + int "PWM3 channel 0 pin number set" + range 0 47 + default 13 + config BSP_USING_PWM3_CH1 + int "PWM3 channel 1 pin number set" + range 0 47 + default 14 + config BSP_USING_PWM3_CH2 + int "PWM3 channel 2 pin number set" + range 0 47 + default 15 + config BSP_USING_PWM3_CH3 + int "PWM3 channel 3 pin number set" + range 0 47 + default 16 + endif + endif menuconfig BSP_USING_SOFTDEVICE bool "Enable NRF SOFTDEVICE" select PKG_USING_NRF5X_SDK + select NRFX_CLOCK_ENABLED default n if BSP_USING_SOFTDEVICE config NRFX_CLOCK_ENABLED - int "NRFX_CLOCK_ENABLED" + int default 1 - config NRFX_CLOCK_DEFAULT_CONFIG_IRQ_PRIORITY - int "NRFX_CLOCK_DEFAULT_CONFIG_IRQ_PRIORITY" + config NRFX_CLOCK_DEFAULT_CONFIG_IRQ_PRIORITY + int default 7 - config NRFX_CLOCK_DEFAULT_CONFIG_IRQ_PRIORITY - int "NRFX_CLOCK_DEFAULT_CONFIG_IRQ_PRIORITY" - default 7 - config NRFX_RTC_ENABLED - int "NRFX_RTC_ENABLED" + config NRFX_RTC_ENABLED + int + default 1 + config NRFX_RTC1_ENABLED + int default 1 - config NRF_CLOCK_ENABLED - int "NRF_CLOCK_ENABLED" + config NRF_CLOCK_ENABLED + int default 1 - config NRF_SDH_BLE_ENABLED - int "NRF_SDH_BLE_ENABLED" + config NRF_SDH_BLE_ENABLED + int default 1 - config NRF_SDH_ENABLED - int "NRF_SDH_ENABLED" + config NRF_SDH_ENABLED + int default 1 - config NRF_SDH_SOC_ENABLED - int "NRF_SDH_SOC_ENABLED" + config NRF_SDH_SOC_ENABLED + int default 1 - endif - menuconfig BSP_USING_UART bool "Enable UART" default y -- Gitee From c9392e2a8b035d6cd05e3c195010713aba599fcd Mon Sep 17 00:00:00 2001 From: Wayne Lin Date: Mon, 3 Aug 2020 12:15:33 +0800 Subject: [PATCH 14/30] 1. Correct typo. 2. Fix spi/qspi/uspi TX/RX PDMA trigger issue. 3. Drain RX FIFO to remove remain FEF frames in FIFO. 4. Implement RT_DEVICE_CTRL_CLOSE in uart/uuart/scuart driver. --- .../libraries/m480/StdDriver/inc/nu_eadc.h | 20 ++-- .../libraries/m480/StdDriver/inc/nu_qspi.h | 18 +++ .../libraries/m480/StdDriver/inc/nu_spi.h | 18 +++ .../m480/StdDriver/inc/nu_usci_spi.h | 18 +++ bsp/nuvoton/libraries/m480/rtt_port/Kconfig | 44 ++++--- bsp/nuvoton/libraries/m480/rtt_port/drv_can.c | 19 +-- bsp/nuvoton/libraries/m480/rtt_port/drv_clk.c | 10 +- bsp/nuvoton/libraries/m480/rtt_port/drv_fmc.c | 11 +- .../libraries/m480/rtt_port/drv_gpio.c | 2 +- .../libraries/m480/rtt_port/drv_gpio.h | 2 +- bsp/nuvoton/libraries/m480/rtt_port/drv_i2s.c | 7 ++ .../libraries/m480/rtt_port/drv_qspi.c | 80 ++++++++----- .../libraries/m480/rtt_port/drv_scuart.c | 104 +++++++++------- bsp/nuvoton/libraries/m480/rtt_port/drv_sdh.c | 112 +++++++++--------- .../libraries/m480/rtt_port/drv_softi2c.c | 3 +- bsp/nuvoton/libraries/m480/rtt_port/drv_spi.c | 91 ++++++-------- bsp/nuvoton/libraries/m480/rtt_port/drv_spi.h | 8 +- .../libraries/m480/rtt_port/drv_tpwm.c | 1 - .../libraries/m480/rtt_port/drv_uart.c | 41 ++++++- .../libraries/m480/rtt_port/drv_ui2c.c | 34 +++--- .../libraries/m480/rtt_port/drv_uspi.c | 70 ++++------- .../libraries/m480/rtt_port/drv_uuart.c | 45 +++++-- bsp/nuvoton/libraries/m480/rtt_port/drv_wdt.c | 34 +++--- .../numaker-iot-m487/applications/main.c | 5 +- .../numaker-iot-m487/board/board_dev.c | 3 +- 25 files changed, 456 insertions(+), 344 deletions(-) diff --git a/bsp/nuvoton/libraries/m480/StdDriver/inc/nu_eadc.h b/bsp/nuvoton/libraries/m480/StdDriver/inc/nu_eadc.h index c9bd0ef39b..c19021fed9 100644 --- a/bsp/nuvoton/libraries/m480/StdDriver/inc/nu_eadc.h +++ b/bsp/nuvoton/libraries/m480/StdDriver/inc/nu_eadc.h @@ -433,11 +433,12 @@ extern "C" u32ModuleNum,\ u32Condition,\ u16CMPData,\ - u32MatchCount) ((eadc)->CMP[0] |=(((u32ModuleNum) << EADC_CMP_CMPSPL_Pos)|\ + u32MatchCount) ((eadc)->CMP[0] = (((eadc)->CMP[0] & ~(EADC_CMP_CMPSPL_Msk|EADC_CMP_CMPCOND_Msk|EADC_CMP_CMPDAT_Msk|EADC_CMP_CMPMCNT_Msk))|\ + (((u32ModuleNum) << EADC_CMP_CMPSPL_Pos)|\ (u32Condition) |\ ((u16CMPData) << EADC_CMP_CMPDAT_Pos)| \ (((u32MatchCount) - 1) << EADC_CMP_CMPMCNT_Pos)|\ - EADC_CMP_ADCMPEN_Msk)) + EADC_CMP_ADCMPEN_Msk))) /** * @brief Configure the comparator 1 and enable it. @@ -458,11 +459,12 @@ extern "C" u32ModuleNum,\ u32Condition,\ u16CMPData,\ - u32MatchCount) ((eadc)->CMP[1] |=(((u32ModuleNum) << EADC_CMP_CMPSPL_Pos)|\ + u32MatchCount) ((eadc)->CMP[1] = (((eadc)->CMP[1] & ~(EADC_CMP_CMPSPL_Msk|EADC_CMP_CMPCOND_Msk|EADC_CMP_CMPDAT_Msk|EADC_CMP_CMPMCNT_Msk))|\ + (((u32ModuleNum) << EADC_CMP_CMPSPL_Pos)|\ (u32Condition) |\ ((u16CMPData) << EADC_CMP_CMPDAT_Pos)| \ (((u32MatchCount) - 1) << EADC_CMP_CMPMCNT_Pos)|\ - EADC_CMP_ADCMPEN_Msk)) + EADC_CMP_ADCMPEN_Msk))) /** * @brief Configure the comparator 2 and enable it. @@ -483,11 +485,12 @@ extern "C" u32ModuleNum,\ u32Condition,\ u16CMPData,\ - u32MatchCount) ((eadc)->CMP[2] |=(((u32ModuleNum) << EADC_CMP_CMPSPL_Pos)|\ + u32MatchCount) ((eadc)->CMP[2] = (((eadc)->CMP[2] & ~(EADC_CMP_CMPSPL_Msk|EADC_CMP_CMPCOND_Msk|EADC_CMP_CMPDAT_Msk|EADC_CMP_CMPMCNT_Msk))|\ + (((u32ModuleNum) << EADC_CMP_CMPSPL_Pos)|\ (u32Condition) |\ ((u16CMPData) << EADC_CMP_CMPDAT_Pos)| \ (((u32MatchCount) - 1) << EADC_CMP_CMPMCNT_Pos)|\ - EADC_CMP_ADCMPEN_Msk)) + EADC_CMP_ADCMPEN_Msk))) /** * @brief Configure the comparator 3 and enable it. @@ -508,11 +511,12 @@ extern "C" u32ModuleNum,\ u32Condition,\ u16CMPData,\ - u32MatchCount) ((eadc)->CMP[3] |=(((u32ModuleNum) << EADC_CMP_CMPSPL_Pos)|\ + u32MatchCount) ((eadc)->CMP[3] = (((eadc)->CMP[3] & ~(EADC_CMP_CMPSPL_Msk|EADC_CMP_CMPCOND_Msk|EADC_CMP_CMPDAT_Msk|EADC_CMP_CMPMCNT_Msk))|\ + (((u32ModuleNum) << EADC_CMP_CMPSPL_Pos)|\ (u32Condition) |\ ((u16CMPData) << EADC_CMP_CMPDAT_Pos)| \ (((u32MatchCount) - 1) << EADC_CMP_CMPMCNT_Pos)|\ - EADC_CMP_ADCMPEN_Msk)) + EADC_CMP_ADCMPEN_Msk))) /** * @brief Enable the compare window mode. diff --git a/bsp/nuvoton/libraries/m480/StdDriver/inc/nu_qspi.h b/bsp/nuvoton/libraries/m480/StdDriver/inc/nu_qspi.h index 64114525e1..10b52c030f 100644 --- a/bsp/nuvoton/libraries/m480/StdDriver/inc/nu_qspi.h +++ b/bsp/nuvoton/libraries/m480/StdDriver/inc/nu_qspi.h @@ -95,6 +95,15 @@ extern "C" */ #define QSPI_TRIGGER_TX_PDMA(qspi) ((qspi)->PDMACTL |= QSPI_PDMACTL_TXPDMAEN_Msk) +/** + * @brief Trigger TX and RX PDMA function. + * @param[in] qspi The pointer of the specified QSPI module. + * @return None. + * @details Set TXPDMAEN bit and RXPDMAEN bit of QSPI_PDMACTL register to enable TX and RX PDMA transfer function. + * \hideinitializer + */ +#define QSPI_TRIGGER_TX_RX_PDMA(qspi) ((qspi)->PDMACTL |= (QSPI_PDMACTL_TXPDMAEN_Msk | QSPI_PDMACTL_RXPDMAEN_Msk)) + /** * @brief Disable RX PDMA transfer. * @param[in] qspi The pointer of the specified QSPI module. @@ -113,6 +122,15 @@ extern "C" */ #define QSPI_DISABLE_TX_PDMA(qspi) ( (qspi)->PDMACTL &= ~QSPI_PDMACTL_TXPDMAEN_Msk ) +/** + * @brief Disable TX and RX PDMA transfer. + * @param[in] qspi The pointer of the specified QSPI module. + * @return None. + * @details Clear TXPDMAEN bit and RXPDMAEN bit of QSPI_PDMACTL register to disable TX and RX PDMA transfer function. + * \hideinitializer + */ +#define QSPI_DISABLE_TX_RX_PDMA(qspi) ( (qspi)->PDMACTL &= ~(QSPI_PDMACTL_TXPDMAEN_Msk | QSPI_PDMACTL_RXPDMAEN_Msk) ) + /** * @brief Get the count of available data in RX FIFO. * @param[in] qspi The pointer of the specified QSPI module. diff --git a/bsp/nuvoton/libraries/m480/StdDriver/inc/nu_spi.h b/bsp/nuvoton/libraries/m480/StdDriver/inc/nu_spi.h index 77eeda3b96..4a1e23ec43 100644 --- a/bsp/nuvoton/libraries/m480/StdDriver/inc/nu_spi.h +++ b/bsp/nuvoton/libraries/m480/StdDriver/inc/nu_spi.h @@ -133,6 +133,15 @@ extern "C" */ #define SPI_TRIGGER_TX_PDMA(spi) ((spi)->PDMACTL |= SPI_PDMACTL_TXPDMAEN_Msk) +/** + * @brief Trigger TX and RX PDMA function. + * @param[in] spi The pointer of the specified SPI module. + * @return None. + * @details Set TXPDMAEN bit and RXPDMAEN bit of SPI_PDMACTL register to enable TX and RX PDMA transfer function. + * \hideinitializer + */ +#define SPI_TRIGGER_TX_RX_PDMA(spi) ((spi)->PDMACTL |= (SPI_PDMACTL_TXPDMAEN_Msk | SPI_PDMACTL_RXPDMAEN_Msk)) + /** * @brief Disable RX PDMA transfer. * @param[in] spi The pointer of the specified SPI module. @@ -151,6 +160,15 @@ extern "C" */ #define SPI_DISABLE_TX_PDMA(spi) ( (spi)->PDMACTL &= ~SPI_PDMACTL_TXPDMAEN_Msk ) +/** + * @brief Disable TX and RX PDMA transfer. + * @param[in] spi The pointer of the specified SPI module. + * @return None. + * @details Clear TXPDMAEN bit and RXPDMAEN bit of SPI_PDMACTL register to disable TX and RX PDMA transfer function. + * \hideinitializer + */ +#define SPI_DISABLE_TX_RX_PDMA(spi) ( (spi)->PDMACTL &= ~(SPI_PDMACTL_TXPDMAEN_Msk | SPI_PDMACTL_RXPDMAEN_Msk) ) + /** * @brief Get the count of available data in RX FIFO. * @param[in] spi The pointer of the specified SPI module. diff --git a/bsp/nuvoton/libraries/m480/StdDriver/inc/nu_usci_spi.h b/bsp/nuvoton/libraries/m480/StdDriver/inc/nu_usci_spi.h index 68d4e02a89..002076027e 100644 --- a/bsp/nuvoton/libraries/m480/StdDriver/inc/nu_usci_spi.h +++ b/bsp/nuvoton/libraries/m480/StdDriver/inc/nu_usci_spi.h @@ -361,6 +361,15 @@ extern "C" */ #define USPI_TRIGGER_TX_PDMA(uspi) ((uspi)->PDMACTL |= USPI_PDMACTL_TXPDMAEN_Msk|USPI_PDMACTL_PDMAEN_Msk) +/** + * @brief Trigger TX and RX PDMA function. + * @param[in] uspi The pointer of the specified USCI_SPI module. + * @return None. + * @details Set TXPDMAEN bit and RXPDMAEN bit of USPI_PDMACTL register to enable TX and RX PDMA transfer function. + * \hideinitializer + */ +#define USPI_TRIGGER_TX_RX_PDMA(uspi) ((uspi)->PDMACTL |= USPI_PDMACTL_TXPDMAEN_Msk|USPI_PDMACTL_RXPDMAEN_Msk|USPI_PDMACTL_PDMAEN_Msk) + /** * @brief Disable RX PDMA transfer. * @param[in] uspi The pointer of the specified USCI_SPI module. @@ -379,6 +388,15 @@ extern "C" */ #define USPI_DISABLE_TX_PDMA(uspi) ( (uspi)->PDMACTL &= ~USPI_PDMACTL_TXPDMAEN_Msk ) +/** + * @brief Disable TX and RX PDMA transfer. + * @param[in] uspi The pointer of the specified USCI_SPI module. + * @return None. + * @details Clear TXPDMAEN bit and RXPDMAEN bit of USPI_PDMACTL register to disable TX and RX PDMA transfer function. + * \hideinitializer + */ +#define USPI_DISABLE_TX_RX_PDMA(uspi) ( (uspi)->PDMACTL &= ~(USPI_PDMACTL_TXPDMAEN_Msk | USPI_PDMACTL_RXPDMAEN_Msk)) + uint32_t USPI_Open(USPI_T *uspi, uint32_t u32MasterSlave, uint32_t u32SPIMode, uint32_t u32DataWidth, uint32_t u32BusClock); void USPI_Close(USPI_T *uspi); void USPI_ClearRxBuf(USPI_T *uspi); diff --git a/bsp/nuvoton/libraries/m480/rtt_port/Kconfig b/bsp/nuvoton/libraries/m480/rtt_port/Kconfig index 262776534d..2e5fd7a81b 100644 --- a/bsp/nuvoton/libraries/m480/rtt_port/Kconfig +++ b/bsp/nuvoton/libraries/m480/rtt_port/Kconfig @@ -57,7 +57,7 @@ config SOC_SERIES_M480 select RT_USING_NETDEV config NU_EMAC_PDMA_MEMCOPY - bool "Use PDMA for data tranferring" + bool "Use PDMA for data transferring" select BSP_USING_PDMA depends on BSP_USING_EMAC default y @@ -82,14 +82,15 @@ config SOC_SERIES_M480 menuconfig BSP_USING_EADC bool "Enable Enhanced Analog-to-Digital Converter(EADC)" + select RT_USING_ADC - config BSP_USING_EADC0 - bool "Enable EADC0" - depends on BSP_USING_EADC && RT_USING_ADC + if BSP_USING_EADC + config BSP_USING_EADC0 + bool "Enable EADC0" - config BSP_USING_EADC1 - bool "Enable EADC1" - depends on BSP_USING_EADC && RT_USING_ADC + config BSP_USING_EADC1 + bool "Enable EADC1" + endif menuconfig BSP_USING_TMR bool "Enable Timer Controller(TIMER)" @@ -371,12 +372,14 @@ config SOC_SERIES_M480 config BSP_USING_UI2C0 select RT_USING_I2C + select BSP_USING_UI2C bool "UI2C0" help Choose this option if you need I2C function mode. config BSP_USING_USPI0 select RT_USING_SPI + select BSP_USING_USPI bool "USPI0" help Choose this option if you need SPI function mode. @@ -391,7 +394,7 @@ config SOC_SERIES_M480 depends on BSP_USING_UUART0 && RT_SERIAL_USING_DMA config BSP_USING_USPI0_PDMA - bool "Use PDMA for data tranferring" + bool "Use PDMA for data transferring" select BSP_USING_USPI_PDMA depends on BSP_USING_USPI0 endif @@ -405,21 +408,21 @@ config SOC_SERIES_M480 config BSP_USING_UUART1 select RT_USING_SERIAL - select BSP_USING_UUART + select BSP_USING_UUART bool "UUART1" help Choose this option if you need UART function mode. config BSP_USING_UI2C1 select RT_USING_I2C - select BSP_USING_UI2C + select BSP_USING_UI2C bool "UI2C1" help Choose this option if you need I2C function mode. config BSP_USING_USPI1 select RT_USING_SPI - select BSP_USING_USPI + select BSP_USING_USPI bool "USPI1" help Choose this option if you need SPI function mode. @@ -434,7 +437,7 @@ config SOC_SERIES_M480 depends on BSP_USING_UUART1 && RT_SERIAL_USING_DMA config BSP_USING_USPI1_PDMA - bool "Use PDMA for data tranferring" + bool "Use PDMA for data transferring" select BSP_USING_USPI_PDMA depends on BSP_USING_USPI1 endif @@ -459,6 +462,10 @@ config SOC_SERIES_M480 config NU_SDH_HOTPLUG bool "Using HOTPLUG" default y + + config NU_SDH_MOUNT_ON_ROOT + bool "Mount on root" + endif menuconfig BSP_USING_CAN @@ -652,7 +659,7 @@ config SOC_SERIES_M480 select BSP_USING_SPI_PDMA depends on BSP_USING_SPI1 endif - + choice prompt "Select SPI2 function mode" config BSP_USING_SPI2_NONE @@ -686,7 +693,7 @@ config SOC_SERIES_M480 bool "NONE" help Choose this option if you need not SPI3. - + config BSP_USING_SPI3 bool "Enable SPI3" help @@ -724,20 +731,23 @@ config SOC_SERIES_M480 bool "Enable Quad Serial Peripheral Interface(QSPI)" select RT_USING_SPI select RT_USING_QSPI + select BSP_USING_SPI - if BSP_USING_QSPI + if BSP_USING_QSPI config BSP_USING_QSPI0 bool "Enable QSPI0" config BSP_USING_QSPI0_PDMA bool "Enable PDMA for QSPI0" + select BSP_USING_SPI_PDMA depends on BSP_USING_QSPI0 config BSP_USING_QSPI1 bool "Enable QSPI1" config BSP_USING_QSPI1_PDMA - bool "Enable PDMA for QSPI1" + bool "Enable PDMA for QSPI1" + select BSP_USING_SPI_PDMA depends on BSP_USING_QSPI1 endif @@ -857,7 +867,7 @@ config SOC_SERIES_M480 if BSP_USING_CRC config NU_CRC_USE_PDMA - bool "Use PDMA for data tranferring." + bool "Use PDMA for data transferring." select BSP_USING_PDMA default y endif diff --git a/bsp/nuvoton/libraries/m480/rtt_port/drv_can.c b/bsp/nuvoton/libraries/m480/rtt_port/drv_can.c index f9cc4a9738..a0fd7d37fa 100644 --- a/bsp/nuvoton/libraries/m480/rtt_port/drv_can.c +++ b/bsp/nuvoton/libraries/m480/rtt_port/drv_can.c @@ -97,7 +97,7 @@ static struct nu_can nu_can_arr[] = }, #endif {0} -}; /* usart nu_usart */ +}; /* struct nu_can */ /* Public functions ------------------------------------------------------------*/ @@ -112,7 +112,7 @@ static const struct rt_can_ops nu_can_ops = static const struct can_configure nu_can_default_config = NU_CAN_CONFIG_DEFAULT; -/* Interrupt Handle Funtion ----------------------------------------------------*/ +/* Interrupt Handle Function ----------------------------------------------------*/ #if defined(BSP_USING_CAN0) /* CAN0 interrupt entry */ void CAN0_IRQHandler(void) @@ -238,7 +238,7 @@ static rt_err_t nu_can_configure(struct rt_can_device *can, struct can_configure RT_ASSERT(can != RT_NULL); RT_ASSERT(cfg != RT_NULL); - /* Get base address of uart register */ + /* Get base address of CAN register */ CAN_T *can_base = ((nu_can_t)can)->can_base; RT_ASSERT(can_base != RT_NULL); @@ -312,7 +312,7 @@ static rt_err_t nu_can_control(struct rt_can_device *can, int cmd, void *arg) #ifdef RT_CAN_USING_HDR struct rt_can_filter_config *filter_cfg; #endif - /* Get base address of uart register */ + /* Get base address of CAN register */ CAN_T *can_base = ((nu_can_t)can)->can_base; RT_ASSERT(can_base != RT_NULL); @@ -346,7 +346,6 @@ static rt_err_t nu_can_control(struct rt_can_device *can, int cmd, void *arg) { /* Enable Status Change Interrupt */ CAN_EnableInt(can_base, CAN_CON_IE_Msk | CAN_CON_SIE_Msk); - NVIC_SetPriority(((nu_can_t)can)->can_irq_n, (1 << __NVIC_PRIO_BITS) - 2); /* Enable NVIC interrupt. */ NVIC_EnableIRQ(((nu_can_t)can)->can_irq_n); @@ -355,7 +354,6 @@ static rt_err_t nu_can_control(struct rt_can_device *can, int cmd, void *arg) { /* Enable Error Status and Status Change Interrupt */ CAN_EnableInt(can_base, CAN_CON_IE_Msk | CAN_CON_SIE_Msk | CAN_CON_EIE_Msk); - NVIC_SetPriority(((nu_can_t)can)->can_irq_n, (1 << __NVIC_PRIO_BITS) - 2); /* Enable NVIC interrupt. */ NVIC_EnableIRQ(((nu_can_t)can)->can_irq_n); } @@ -440,6 +438,9 @@ static rt_err_t nu_can_control(struct rt_can_device *can, int cmd, void *arg) rt_memcpy(arg, &can->status, sizeof(can->status)); } break; + default: + return -(RT_EINVAL); + } return RT_EOK; @@ -449,7 +450,7 @@ static int nu_can_sendmsg(struct rt_can_device *can, const void *buf, rt_uint32_ { STR_CANMSG_T tMsg; struct rt_can_msg *pmsg = (struct rt_can_msg *) buf; - /* Get base address of uart register */ + /* Get base address of CAN register */ CAN_T *can_base = ((nu_can_t)can)->can_base; RT_ASSERT(can_base != RT_NULL); @@ -495,7 +496,7 @@ static int nu_can_recvmsg(struct rt_can_device *can, void *buf, rt_uint32_t boxn { STR_CANMSG_T tMsg; struct rt_can_msg *pmsg = (struct rt_can_msg *) buf; - /* Get base address of uart register */ + /* Get base address of CAN register */ CAN_T *can_base = ((nu_can_t)can)->can_base; RT_ASSERT(can_base != RT_NULL); @@ -558,7 +559,7 @@ static int rt_hw_can_init(void) RT_ASSERT(ret == RT_EOK); } - return ret; + return (int)ret; } INIT_DEVICE_EXPORT(rt_hw_can_init); #endif //#if defined(BSP_USING_CAN) diff --git a/bsp/nuvoton/libraries/m480/rtt_port/drv_clk.c b/bsp/nuvoton/libraries/m480/rtt_port/drv_clk.c index 9ed0233bb2..abbefbeebe 100644 --- a/bsp/nuvoton/libraries/m480/rtt_port/drv_clk.c +++ b/bsp/nuvoton/libraries/m480/rtt_port/drv_clk.c @@ -165,8 +165,8 @@ static void pm_run(struct rt_pm *pm, rt_uint8_t mode) SYS_UnlockReg(); - /* Switch run mdoe frequency using PLL + HXT if HXT is enabled. - Otherwise, the systme clock will use PLL + HIRC. */ + /* Switch run mode frequency using PLL + HXT if HXT is enabled. + Otherwise, the system clock will use PLL + HIRC. */ switch (mode) { case PM_RUN_MODE_HIGH_SPEED: @@ -209,7 +209,7 @@ static void hw_timer_init(void) CLK_EnableModuleClock(PM_TIMER_MODULE); SYS_LockReg(); - /* Initialise timer and enable wakeup function. */ + /* Initialize timer and enable wakeup function. */ TIMER_Open(PM_TIMER, TIMER_CONTINUOUS_MODE, 1); TIMER_SET_PRESCALE_VALUE(PM_TIMER, 0); TIMER_EnableInt(PM_TIMER); @@ -262,7 +262,7 @@ static void pm_timer_start(struct rt_pm *pm, rt_uint32_t timeout) if (timeout == RT_TICK_MAX) return; - /* start pm timer to compenstate the os tick in power down mode */ + /* start pm timer to compensate the os tick in power down mode */ tick = pm_tick_from_os_tick(timeout); TIMER_SET_CMP_VALUE(PM_TIMER, tick); TIMER_Start(PM_TIMER); @@ -277,7 +277,7 @@ static void pm_timer_stop(struct rt_pm *pm) } -/* pm device driver initialise. */ +/* pm device driver initialize. */ int rt_hw_pm_init(void) { rt_uint8_t timer_mask; diff --git a/bsp/nuvoton/libraries/m480/rtt_port/drv_fmc.c b/bsp/nuvoton/libraries/m480/rtt_port/drv_fmc.c index 79e66dbac0..e0e3b5f56b 100644 --- a/bsp/nuvoton/libraries/m480/rtt_port/drv_fmc.c +++ b/bsp/nuvoton/libraries/m480/rtt_port/drv_fmc.c @@ -21,9 +21,9 @@ #endif /* Private define ---------------------------------------------------------------*/ -#define NU_GETBYTE_OFST(addr) ((addr&0x3)*8) -#define NU_GET_WALIGN(addr) (addr&~0x3) -#define NU_GET_LSB2BIT(addr) (addr&0x3) +#define NU_GETBYTE_OFST(addr) (((addr)&0x3)*8) +#define NU_GET_WALIGN(addr) ((addr)&~0x3) +#define NU_GET_LSB2BIT(addr) ((addr)&0x3) /* Private typedef --------------------------------------------------------------*/ /* Private functions ------------------------------------------------------------*/ @@ -159,7 +159,8 @@ int nu_fmc_erase(long addr, size_t size) uint32_t addr_end = addr + size; #if defined(NU_SUPPORT_NONALIGN) - uint8_t *page_sdtemp = RT_NULL, *page_edtemp = RT_NULL; + uint8_t *page_sdtemp = RT_NULL; + uint8_t *page_edtemp = RT_NULL; addrptr = addr & (FMC_FLASH_PAGE_SIZE - 1); @@ -315,7 +316,7 @@ static int nu_fmc_init(void) g_mutex_fmc = rt_mutex_create("nu_fmc_lock", RT_IPC_FLAG_FIFO); - return RT_EOK; + return (int)RT_EOK; } INIT_APP_EXPORT(nu_fmc_init); diff --git a/bsp/nuvoton/libraries/m480/rtt_port/drv_gpio.c b/bsp/nuvoton/libraries/m480/rtt_port/drv_gpio.c index 4790d65001..47c26136a2 100644 --- a/bsp/nuvoton/libraries/m480/rtt_port/drv_gpio.c +++ b/bsp/nuvoton/libraries/m480/rtt_port/drv_gpio.c @@ -166,7 +166,7 @@ static rt_err_t nu_gpio_attach_irq(struct rt_device *device, rt_int32_t pin, rt_ if ((irqindex = nu_find_irqindex(pin)) >= 0) goto exit_nu_gpio_attach_irq; - // Find avaiable index of pin in pool. + // Find available index of pin in pool. if ((irqindex = nu_cto(g_u32PinIrqMask)) < IRQ_MAX_NUM) // Count Trailing Ones ==> Find First Zero goto exit_nu_gpio_attach_irq; diff --git a/bsp/nuvoton/libraries/m480/rtt_port/drv_gpio.h b/bsp/nuvoton/libraries/m480/rtt_port/drv_gpio.h index c353a1e772..6b831467a8 100644 --- a/bsp/nuvoton/libraries/m480/rtt_port/drv_gpio.h +++ b/bsp/nuvoton/libraries/m480/rtt_port/drv_gpio.h @@ -26,7 +26,7 @@ typedef enum NU_PORT_CNT, } nu_gpio_port; -#define NU_GET_PININDEX(port, pin) (port*16+pin) +#define NU_GET_PININDEX(port, pin) ((port)*16+(pin)) #define NU_GET_PINS(rt_pin_index) ((rt_pin_index) & 0x0000000F) #define NU_GET_PORT(rt_pin_index) (((rt_pin_index)>>4) & 0x0000000F) #define NU_GET_PIN_MASK(nu_gpio_pin) (1 << (nu_gpio_pin)) diff --git a/bsp/nuvoton/libraries/m480/rtt_port/drv_i2s.c b/bsp/nuvoton/libraries/m480/rtt_port/drv_i2s.c index 35b7383210..d76cb27314 100644 --- a/bsp/nuvoton/libraries/m480/rtt_port/drv_i2s.c +++ b/bsp/nuvoton/libraries/m480/rtt_port/drv_i2s.c @@ -306,6 +306,10 @@ static rt_err_t nu_i2s_getcaps(struct rt_audio_device *audio, struct rt_audio_ca } // switch (caps->sub_type) break; + default: + result = -RT_ERROR; + break; + } // switch (caps->main_type) return result; @@ -449,6 +453,9 @@ static rt_err_t nu_i2s_start(struct rt_audio_device *audio, int stream) LOG_I("Start record."); } break; + + default: + return -RT_ERROR; } return RT_EOK; diff --git a/bsp/nuvoton/libraries/m480/rtt_port/drv_qspi.c b/bsp/nuvoton/libraries/m480/rtt_port/drv_qspi.c index a39e071639..4d99dba711 100644 --- a/bsp/nuvoton/libraries/m480/rtt_port/drv_qspi.c +++ b/bsp/nuvoton/libraries/m480/rtt_port/drv_qspi.c @@ -12,6 +12,14 @@ #include #if defined(BSP_USING_QSPI) + +#define LOG_TAG "drv.qspi" +#define DBG_ENABLE +#define DBG_SECTION_NAME LOG_TAG +#define DBG_LEVEL DBG_INFO +#define DBG_COLOR +#include + #include #include @@ -87,8 +95,8 @@ static rt_err_t nu_qspi_bus_configure(struct rt_spi_device *device, struct rt_spi_configuration *configuration) { struct nu_spi *spi_bus; - uint32_t u32SPIMode; - uint32_t u32BusClock; + rt_uint32_t u32SPIMode; + rt_uint32_t u32BusClock; rt_err_t ret = RT_EOK; RT_ASSERT(device != RT_NULL); @@ -130,7 +138,7 @@ static rt_err_t nu_qspi_bus_configure(struct rt_spi_device *device, u32BusClock = QSPI_SetBusClock((QSPI_T *)spi_bus->spi_base, configuration->max_hz); if (configuration->max_hz > u32BusClock) { - rt_kprintf("%s clock max frequency is %dHz (!= %dHz)\n", spi_bus->name, u32BusClock, configuration->max_hz); + LOG_W("%s clock max frequency is %dHz (!= %dHz)\n", spi_bus->name, u32BusClock, configuration->max_hz); configuration->max_hz = u32BusClock; } @@ -173,7 +181,7 @@ exit_nu_qspi_bus_configure: } #if defined(RT_SFUD_USING_QSPI) -static int nu_qspi_mode_config(struct nu_spi *qspi_bus, uint8_t *tx, uint8_t *rx, int qspi_lines) +static int nu_qspi_mode_config(struct nu_spi *qspi_bus, rt_uint8_t *tx, rt_uint8_t *rx, int qspi_lines) { QSPI_T *qspi_base = (QSPI_T *)qspi_bus->spi_base; if (qspi_lines > 1) @@ -188,6 +196,9 @@ static int nu_qspi_mode_config(struct nu_spi *qspi_bus, uint8_t *tx, uint8_t *rx case 4: QSPI_ENABLE_QUAD_OUTPUT_MODE(qspi_base); break; + default: + LOG_E("Data line is not supported.\n"); + break; } } else @@ -200,6 +211,9 @@ static int nu_qspi_mode_config(struct nu_spi *qspi_bus, uint8_t *tx, uint8_t *rx case 4: QSPI_ENABLE_QUAD_INPUT_MODE(qspi_base); break; + default: + LOG_E("Data line is not supported.\n"); + break; } } } @@ -218,11 +232,11 @@ static rt_uint32_t nu_qspi_bus_xfer(struct rt_spi_device *device, struct rt_spi_ struct rt_qspi_configuration *qspi_configuration; #if defined(RT_SFUD_USING_QSPI) struct rt_qspi_message *qspi_message; - int last = 1; + rt_uint8_t u8last = 1; #endif - uint8_t bytes_per_word; + rt_uint8_t bytes_per_word; QSPI_T *qspi_base; - int len = 0; + rt_uint32_t u32len = 0; RT_ASSERT(device != RT_NULL); RT_ASSERT(message != RT_NULL); @@ -252,9 +266,9 @@ static rt_uint32_t nu_qspi_bus_xfer(struct rt_spi_device *device, struct rt_spi_ /* Command stage */ if (qspi_message->instruction.content != 0) { - last = nu_qspi_mode_config(qspi_bus, (uint8_t *) &qspi_message->instruction.content, RT_NULL, qspi_message->instruction.qspi_lines); + u8last = nu_qspi_mode_config(qspi_bus, (rt_uint8_t *) &qspi_message->instruction.content, RT_NULL, qspi_message->instruction.qspi_lines); nu_spi_transfer((struct nu_spi *)qspi_bus, - (uint8_t *) &qspi_message->instruction.content, + (rt_uint8_t *) &qspi_message->instruction.content, RT_NULL, 1, 1); @@ -263,29 +277,29 @@ static rt_uint32_t nu_qspi_bus_xfer(struct rt_spi_device *device, struct rt_spi_ /* Address stage */ if (qspi_message->address.size != 0) { - uint32_t u32ReversedAddr = 0; - uint32_t u32AddrNumOfByte = qspi_message->address.size / 8; + rt_uint32_t u32ReversedAddr = 0; + rt_uint32_t u32AddrNumOfByte = qspi_message->address.size / 8; switch (u32AddrNumOfByte) { case 1: u32ReversedAddr = (qspi_message->address.content & 0xff); break; case 2: - nu_set16_be((uint8_t *)&u32ReversedAddr, qspi_message->address.content); + nu_set16_be((rt_uint8_t *)&u32ReversedAddr, qspi_message->address.content); break; case 3: - nu_set24_be((uint8_t *)&u32ReversedAddr, qspi_message->address.content); + nu_set24_be((rt_uint8_t *)&u32ReversedAddr, qspi_message->address.content); break; case 4: - nu_set32_be((uint8_t *)&u32ReversedAddr, qspi_message->address.content); + nu_set32_be((rt_uint8_t *)&u32ReversedAddr, qspi_message->address.content); break; default: RT_ASSERT(0); break; } - last = nu_qspi_mode_config(qspi_bus, (uint8_t *)&u32ReversedAddr, RT_NULL, qspi_message->address.qspi_lines); + u8last = nu_qspi_mode_config(qspi_bus, (rt_uint8_t *)&u32ReversedAddr, RT_NULL, qspi_message->address.qspi_lines); nu_spi_transfer((struct nu_spi *)qspi_bus, - (uint8_t *) &u32ReversedAddr, + (rt_uint8_t *) &u32ReversedAddr, RT_NULL, u32AddrNumOfByte, 1); @@ -294,32 +308,32 @@ static rt_uint32_t nu_qspi_bus_xfer(struct rt_spi_device *device, struct rt_spi_ /* Dummy_cycles stage */ if (qspi_message->dummy_cycles != 0) { - qspi_bus->dummy = 0xff; + qspi_bus->dummy = 0x00; - last = nu_qspi_mode_config(qspi_bus, (uint8_t *) &qspi_bus->dummy, RT_NULL, last); + u8last = nu_qspi_mode_config(qspi_bus, (rt_uint8_t *) &qspi_bus->dummy, RT_NULL, u8last); nu_spi_transfer((struct nu_spi *)qspi_bus, - (uint8_t *) &qspi_bus->dummy, + (rt_uint8_t *) &qspi_bus->dummy, RT_NULL, - qspi_message->dummy_cycles / (8 / last), + qspi_message->dummy_cycles / (8 / u8last), 1); } /* Data stage */ - nu_qspi_mode_config(qspi_bus, (uint8_t *) message->send_buf, (uint8_t *) message->recv_buf, qspi_message->qspi_data_lines); + nu_qspi_mode_config(qspi_bus, (rt_uint8_t *) message->send_buf, (rt_uint8_t *) message->recv_buf, qspi_message->qspi_data_lines); #endif //#if defined(RT_SFUD_USING_QSPI) if (message->length != 0) { nu_spi_transfer((struct nu_spi *)qspi_bus, - (uint8_t *) message->send_buf, - (uint8_t *) message->recv_buf, + (rt_uint8_t *) message->send_buf, + (rt_uint8_t *) message->recv_buf, message->length, bytes_per_word); - len = message->length; + u32len = message->length; } else { - len = 1; + u32len = 1; } if (message->cs_release && !(qspi_configuration->parent.mode & RT_SPI_NO_CS)) @@ -334,12 +348,12 @@ static rt_uint32_t nu_qspi_bus_xfer(struct rt_spi_device *device, struct rt_spi_ } } - return len; + return u32len; } -static int nu_qspi_register_bus(struct nu_spi *qspi_device, const char *name) +static int nu_qspi_register_bus(struct nu_spi *qspi_bus, const char *name) { - return rt_qspi_bus_register(&qspi_device->dev, name, &nu_qspi_poll_ops); + return rt_qspi_bus_register(&qspi_bus->dev, name, &nu_qspi_poll_ops); } /** @@ -347,19 +361,21 @@ static int nu_qspi_register_bus(struct nu_spi *qspi_device, const char *name) */ static int rt_hw_qspi_init(void) { - int i; + rt_uint8_t i; for (i = (QSPI_START + 1); i < QSPI_CNT; i++) { nu_qspi_register_bus(&nu_qspi_arr[i], nu_qspi_arr[i].name); -#if defined(BSP_USING_QSPI_PDMA) +#if defined(BSP_USING_SPI_PDMA) nu_qspi_arr[i].pdma_chanid_tx = -1; nu_qspi_arr[i].pdma_chanid_rx = -1; +#endif +#if defined(BSP_USING_QSPI_PDMA) if ((nu_qspi_arr[i].pdma_perp_tx != NU_PDMA_UNUSED) && (nu_qspi_arr[i].pdma_perp_rx != NU_PDMA_UNUSED)) { if (nu_hw_spi_pdma_allocate(&nu_qspi_arr[i]) != RT_EOK) { - rt_kprintf("Failed to allocate DMA channels for %s. We will use poll-mode for this bus.\n", nu_qspi_arr[i].name); + LOG_E("Failed to allocate DMA channels for %s. We will use poll-mode for this bus.\n", nu_qspi_arr[i].name); } } #endif @@ -381,7 +397,7 @@ rt_err_t nu_qspi_bus_attach_device(const char *bus_name, const char *device_name qspi_device = (struct rt_qspi_device *)rt_malloc(sizeof(struct rt_qspi_device)); if (qspi_device == RT_NULL) { - rt_kprintf("no memory, qspi bus attach device failed!\n"); + LOG_E("no memory, qspi bus attach device failed!\n"); result = -RT_ENOMEM; goto __exit; } diff --git a/bsp/nuvoton/libraries/m480/rtt_port/drv_scuart.c b/bsp/nuvoton/libraries/m480/rtt_port/drv_scuart.c index d15750e776..f187690f33 100644 --- a/bsp/nuvoton/libraries/m480/rtt_port/drv_scuart.c +++ b/bsp/nuvoton/libraries/m480/rtt_port/drv_scuart.c @@ -1,25 +1,26 @@ /**************************************************************************//** -* -* @copyright (C) 2020 Nuvoton Technology Corp. All rights reserved. -* -* SPDX-License-Identifier: Apache-2.0 -* -* Change Logs: -* Date Author Notes -* 2020-5-31 Egbert First version -* -******************************************************************************/ + * + * @copyright (C) 2020 Nuvoton Technology Corp. All rights reserved. + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2020-7-21 Egbert First version + * + ******************************************************************************/ #include #if defined(BSP_USING_SCUART) +#include #include #include -#include -/* Private define ---------------------------------------------------------------*/ -#define LOG_TAG "drv.scuart" +/* Private definition + * ---------------------------------------------------------------*/ +#define LOG_TAG "drv.scuart" #define DBG_ENABLE #define DBG_SECTION_NAME "drv.scuart" #define DBG_LEVEL DBG_ERROR @@ -41,7 +42,8 @@ enum SCUART_CNT }; -/* Private typedef --------------------------------------------------------------*/ +/* Private typedef + * --------------------------------------------------------------*/ struct nu_scuart { rt_serial_t dev; @@ -49,34 +51,32 @@ struct nu_scuart SC_T *scuart_base; uint32_t scuart_rst; IRQn_Type scuart_irq_n; - }; typedef struct nu_scuart *nu_scuart_t; -/* Private functions ------------------------------------------------------------*/ -static rt_err_t nu_scuart_configure(struct rt_serial_device *serial, struct serial_configure *cfg); -static rt_err_t nu_scuart_control(struct rt_serial_device *serial, int cmd, void *arg); +/* Private functions + * ------------------------------------------------------------*/ +static rt_err_t nu_scuart_configure(struct rt_serial_device *serial, + struct serial_configure *cfg); +static rt_err_t nu_scuart_control(struct rt_serial_device *serial, int cmd, + void *arg); static int nu_scuart_send(struct rt_serial_device *serial, char c); static int nu_scuart_receive(struct rt_serial_device *serial); static void nu_scuart_isr(nu_scuart_t serial); -/* Public functions ------------------------------------------------------------*/ - -/* Private variables ------------------------------------------------------------*/ - static const struct rt_uart_ops nu_scuart_ops = { - .configure = nu_scuart_configure, - .control = nu_scuart_control, - .putc = nu_scuart_send, - .getc = nu_scuart_receive, - .dma_transmit = RT_NULL /* not support DMA mode */ + .configure = nu_scuart_configure, + .control = nu_scuart_control, + .putc = nu_scuart_send, + .getc = nu_scuart_receive, + .dma_transmit = RT_NULL /* not support DMA mode */ }; static const struct serial_configure nu_scuart_default_config = RT_SERIAL_CONFIG_DEFAULT; -static struct nu_scuart nu_scuart_arr [] = +static struct nu_scuart nu_scuart_arr[] = { #if defined(BSP_USING_SCUART0) { @@ -108,7 +108,8 @@ static struct nu_scuart nu_scuart_arr [] = {0} }; /* scuart nu_scuart */ -/* Interrupt Handle Funtion ----------------------------------------------------*/ +/* Interrupt Handle Function + * ----------------------------------------------------*/ #if defined(BSP_USING_SCUART0) /* SCUART0 interrupt entry */ void SC0_IRQHandler(void) @@ -151,8 +152,6 @@ void SC2_IRQHandler(void) } #endif - - /** * All SCUART interrupt service routine */ @@ -177,9 +176,10 @@ static void nu_scuart_isr(nu_scuart_t serial) } /** - * Configurae scuart port + * Configure scuart port */ -static rt_err_t nu_scuart_configure(struct rt_serial_device *serial, struct serial_configure *cfg) +static rt_err_t nu_scuart_configure(struct rt_serial_device *serial, + struct serial_configure *cfg) { rt_err_t ret = RT_EOK; uint32_t scuart_word_len = 0; @@ -189,7 +189,7 @@ static rt_err_t nu_scuart_configure(struct rt_serial_device *serial, struct seri /* Get base address of scuart register */ SC_T *scuart_base = ((nu_scuart_t)serial)->scuart_base; - /* Check baudrate */ + /* Check baud rate */ RT_ASSERT(cfg->baud_rate != 0); /* Check word len */ @@ -258,11 +258,12 @@ static rt_err_t nu_scuart_configure(struct rt_serial_device *serial, struct seri /* Reset this module */ SYS_ResetModule(((nu_scuart_t)serial)->scuart_rst); - /* Open SCUART and set SCUART Baudrate */ + /* Open SCUART and set SCUART baud rate */ SCUART_Open(scuart_base, cfg->baud_rate); /* Set line configuration. */ - SCUART_SetLineConfig(scuart_base, 0, scuart_word_len, scuart_parity, scuart_stop_bit); + SCUART_SetLineConfig(scuart_base, 0, scuart_word_len, scuart_parity, + scuart_stop_bit); /* Enable NVIC interrupt. */ NVIC_EnableIRQ(((nu_scuart_t)serial)->scuart_irq_n); @@ -278,14 +279,14 @@ exit_nu_scuart_configure: /** * SCUART interrupt control */ -static rt_err_t nu_scuart_control(struct rt_serial_device *serial, int cmd, void *arg) +static rt_err_t nu_scuart_control(struct rt_serial_device *serial, int cmd, + void *arg) { rt_err_t result = RT_EOK; rt_uint32_t flag; rt_ubase_t ctrl_arg = (rt_ubase_t)arg; RT_ASSERT(serial != RT_NULL); - RT_ASSERT(arg != RT_NULL); /* Get base address of scuart register */ SC_T *scuart_base = ((nu_scuart_t)serial)->scuart_base; @@ -298,10 +299,6 @@ static rt_err_t nu_scuart_control(struct rt_serial_device *serial, int cmd, void flag = SC_INTEN_RDAIEN_Msk | SC_INTEN_RXTOIEN_Msk; SCUART_DISABLE_INT(scuart_base, flag); } - else if (ctrl_arg == RT_DEVICE_FLAG_DMA_RX) /* Disable DMA-RX */ - { - LOG_E("SCUART does not support dma transmission"); - } break; case RT_DEVICE_CTRL_SET_INT: @@ -312,6 +309,21 @@ static rt_err_t nu_scuart_control(struct rt_serial_device *serial, int cmd, void } break; + case RT_DEVICE_CTRL_CLOSE: + /* Disable NVIC interrupt. */ + NVIC_DisableIRQ(((nu_scuart_t)serial)->scuart_irq_n); + + /* Reset this module */ + SYS_ResetModule(((nu_scuart_t)serial)->scuart_rst); + + /* Close SCUART port */ + SCUART_Close(scuart_base); + + break; + + default: + result = -RT_EINVAL; + break; } return result; } @@ -327,7 +339,8 @@ static int nu_scuart_send(struct rt_serial_device *serial, char c) SC_T *scuart_base = ((nu_scuart_t)serial)->scuart_base; /* Waiting if TX-FIFO is full. */ - while (SCUART_IS_TX_FULL(scuart_base)); + while (SCUART_IS_TX_FULL(scuart_base)) + ; /* Put char into TX-FIFO */ SCUART_WRITE(scuart_base, c); @@ -368,10 +381,11 @@ static int rt_hw_scuart_init(void) { flag = RT_DEVICE_FLAG_RDWR | RT_DEVICE_FLAG_INT_RX; - nu_scuart_arr[i].dev.ops = &nu_scuart_ops; + nu_scuart_arr[i].dev.ops = &nu_scuart_ops; nu_scuart_arr[i].dev.config = nu_scuart_default_config; - ret = rt_hw_serial_register(&nu_scuart_arr[i].dev, nu_scuart_arr[i].name, flag, NULL); + ret = rt_hw_serial_register(&nu_scuart_arr[i].dev, nu_scuart_arr[i].name, + flag, NULL); RT_ASSERT(ret == RT_EOK); } diff --git a/bsp/nuvoton/libraries/m480/rtt_port/drv_sdh.c b/bsp/nuvoton/libraries/m480/rtt_port/drv_sdh.c index 6c6dd768b8..aa7d29b39a 100644 --- a/bsp/nuvoton/libraries/m480/rtt_port/drv_sdh.c +++ b/bsp/nuvoton/libraries/m480/rtt_port/drv_sdh.c @@ -25,17 +25,30 @@ #endif /* Private define ---------------------------------------------------------------*/ -// RT_DEV_NAME_PREFIX sdh -#ifndef NU_SDH_MOUNTPOINT_ROOT - #define NU_SDH_MOUNTPOINT_ROOT "/mnt" +#if defined(NU_SDH_MOUNT_ON_ROOT) + + #if !defined(NU_SDH_MOUNTPOINT_SDH0) + #define NU_SDH_MOUNTPOINT_SDH0 "/" + #endif + + #if !defined(NU_SDH_MOUNTPOINT_SDH1) + #define NU_SDH_MOUNTPOINT_SDH1 NU_SDH_MOUNTPOINT_SDH0"/sd1" + #endif + +#else + + #if !defined(NU_SDH_MOUNTPOINT_ROOT) + #define NU_SDH_MOUNTPOINT_ROOT "/mnt" + #endif + #endif -#ifndef NU_SDH_MOUNTPOINT_SDH0 +#if !defined(NU_SDH_MOUNTPOINT_SDH0) #define NU_SDH_MOUNTPOINT_SDH0 NU_SDH_MOUNTPOINT_ROOT"/sd0" #endif -#ifndef NU_SDH_MOUNTPOINT_SDH1 +#if !defined(NU_SDH_MOUNTPOINT_SDH1) #define NU_SDH_MOUNTPOINT_SDH1 NU_SDH_MOUNTPOINT_ROOT"/sd1" #endif @@ -66,11 +79,9 @@ enum #if defined(NU_SDH_HOTPLUG) enum { - NU_SDH_CARD_INSERTED_SD0 = (1 << 0), - NU_SDH_CARD_REMOVED_SD0 = (1 << 1), - NU_SDH_CARD_INSERTED_SD1 = (1 << 2), - NU_SDH_CARD_REMOVED_SD1 = (1 << 3), - NU_SDH_CARD_EVENT_ALL = (NU_SDH_CARD_INSERTED_SD0 | NU_SDH_CARD_REMOVED_SD0 | NU_SDH_CARD_INSERTED_SD1 | NU_SDH_CARD_REMOVED_SD1) + NU_SDH_CARD_DETECTED_SD0 = (1 << 0), + NU_SDH_CARD_DETECTED_SD1 = (1 << 1), + NU_SDH_CARD_EVENT_ALL = (NU_SDH_CARD_DETECTED_SD0 | NU_SDH_CARD_DETECTED_SD1) }; #endif @@ -166,40 +177,12 @@ static void nu_sdh_isr(nu_sdh_t sdh) if (isr & SDH_INTSTS_CDIF_Msk) // card detect { - /* SD interrupt status */ - // it is work to delay 50 times for SD_CLK = 200KHz - { - int volatile i; // delay 30 fail, 50 OK - for (i = 0; i < 0x500; i++); // delay to make sure got updated value from REG_SDISR. - isr = sdh_base->INTSTS; - } - - if (isr & SDH_INTSTS_CDSTS_Msk) - { - /* Card removed */ -#if defined(NU_SDH_HOTPLUG) - if (sdh->base == SDH0) - rt_event_send(&sdh_event, NU_SDH_CARD_REMOVED_SD0); - else if (sdh->base == SDH1) - rt_event_send(&sdh_event, NU_SDH_CARD_REMOVED_SD1); -#endif - sdh->info->IsCardInsert = FALSE; // SDISR_CD_Card = 1 means card remove for GPIO mode - rt_memset((void *)sdh->info, 0, sizeof(SDH_INFO_T)); - } - else - { - SDH_Open(sdh_base, CardDetect_From_GPIO); - if (!SDH_Probe(sdh_base)) - { - /* Card inserted */ #if defined(NU_SDH_HOTPLUG) - if (sdh->base == SDH0) - rt_event_send(&sdh_event, NU_SDH_CARD_INSERTED_SD0); - else if (sdh->base == SDH1) - rt_event_send(&sdh_event, NU_SDH_CARD_INSERTED_SD1); + if (sdh->base == SDH0) + rt_event_send(&sdh_event, NU_SDH_CARD_DETECTED_SD0); + else if (sdh->base == SDH1) + rt_event_send(&sdh_event, NU_SDH_CARD_DETECTED_SD1); #endif - } - } /* Clear CDIF interrupt flag */ SDH_CLR_INT_FLAG(sdh_base, SDH_INTSTS_CDIF_Msk); } @@ -210,14 +193,14 @@ static void nu_sdh_isr(nu_sdh_t sdh) if (!(isr & SDH_INTSTS_CRC16_Msk)) { /* CRC_16 error */ - // handle CRC 16 error + // TODO: handle CRC 16 error } else if (!(isr & SDH_INTSTS_CRC7_Msk)) { if (!pSD->R3Flag) { /* CRC_7 error */ - // handle CRC 7 error + // TODO: handle CRC 7 error } } /* Clear CRCIF interrupt flag */ @@ -502,6 +485,7 @@ static rt_err_t nu_sdh_hotplug_mount(nu_sdh_t sdh) { closedir(t); } +#if !defined(NU_SDH_MOUNT_ON_ROOT) else { @@ -523,6 +507,7 @@ static rt_err_t nu_sdh_hotplug_mount(nu_sdh_t sdh) } } //else +#endif if ((ret = dfs_mount(sdh->name, sdh->mounted_point, "elm", 0, 0)) == 0) { @@ -567,6 +552,29 @@ exit_nu_sdh_hotplug_unmount: return -(ret); } + +static void nu_card_detector(nu_sdh_t sdh) +{ + SDH_T *sdh_base = sdh->base; + unsigned int volatile isr = sdh_base->INTSTS; + if (isr & SDH_INTSTS_CDSTS_Msk) + { + /* Card removed */ + sdh->info->IsCardInsert = FALSE; // SDISR_CD_Card = 1 means card remove for GPIO mode + rt_memset((void *)sdh->info, 0, sizeof(SDH_INFO_T)); + nu_sdh_hotplug_unmount(sdh); + } + else + { + SDH_Open(sdh_base, CardDetect_From_GPIO); + if (!SDH_Probe(sdh_base)) + { + /* Card inserted */ + nu_sdh_hotplug_mount(sdh); + } + } +} + static void sdh_hotplugger(void *param) { rt_uint32_t e; @@ -586,24 +594,18 @@ static void sdh_hotplugger(void *param) RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, RT_WAITING_FOREVER, &e) == RT_EOK) { - /* Debouce */ + /* Debounce */ rt_thread_delay(200); switch (e) { #if defined(BSP_USING_SDH0) - case NU_SDH_CARD_INSERTED_SD0: - nu_sdh_hotplug_mount(&nu_sdh_arr[SDH0_IDX]); - break; - case NU_SDH_CARD_REMOVED_SD0: - nu_sdh_hotplug_unmount(&nu_sdh_arr[SDH0_IDX]); + case NU_SDH_CARD_DETECTED_SD0: + nu_card_detector(&nu_sdh_arr[SDH0_IDX]); break; #endif #if defined(BSP_USING_SDH1) - case NU_SDH_CARD_INSERTED_SD1: - nu_sdh_hotplug_mount(&nu_sdh_arr[SDH1_IDX]); - break; - case NU_SDH_CARD_REMOVED_SD1: - nu_sdh_hotplug_unmount(&nu_sdh_arr[SDH1_IDX]); + case NU_SDH_CARD_DETECTED_SD1: + nu_card_detector(&nu_sdh_arr[SDH1_IDX]); break; #endif default: diff --git a/bsp/nuvoton/libraries/m480/rtt_port/drv_softi2c.c b/bsp/nuvoton/libraries/m480/rtt_port/drv_softi2c.c index 05f9906def..7c8fe84a92 100644 --- a/bsp/nuvoton/libraries/m480/rtt_port/drv_softi2c.c +++ b/bsp/nuvoton/libraries/m480/rtt_port/drv_softi2c.c @@ -24,7 +24,6 @@ #define DBG_ENABLE #define DBG_SECTION_NAME LOG_TAG #define DBG_LEVEL DBG_INFO -#define DBG_COLOR #include #ifdef BSP_USING_SOFT_I2C0 @@ -58,7 +57,7 @@ struct nu_soft_i2c_config rt_uint8_t sda; const char *bus_name; }; -/* soft i2c dirver class */ +/* soft i2c driver class */ struct nu_soft_i2c { struct rt_i2c_bit_ops ops; diff --git a/bsp/nuvoton/libraries/m480/rtt_port/drv_spi.c b/bsp/nuvoton/libraries/m480/rtt_port/drv_spi.c index 8a29a847ca..c3fc788203 100644 --- a/bsp/nuvoton/libraries/m480/rtt_port/drv_spi.c +++ b/bsp/nuvoton/libraries/m480/rtt_port/drv_spi.c @@ -11,7 +11,15 @@ ******************************************************************************/ #include -#if defined(BSP_USING_SPI) || defined(BSP_USING_QSPI) +#if defined(BSP_USING_SPI) + +#define LOG_TAG "drv.spi" +#define DBG_ENABLE +#define DBG_SECTION_NAME LOG_TAG +#define DBG_LEVEL DBG_INFO +#define DBG_COLOR +#include + #include #include #include @@ -22,7 +30,7 @@ /* Private define ---------------------------------------------------------------*/ #ifndef NU_SPI_USE_PDMA_MIN_THRESHOLD - #define NU_SPI_USE_PDMA_MIN_THRESHOLD 128 + #define NU_SPI_USE_PDMA_MIN_THRESHOLD (128) #endif enum @@ -52,9 +60,8 @@ static int nu_spi_register_bus(struct nu_spi *spi_bus, const char *name); static rt_uint32_t nu_spi_bus_xfer(struct rt_spi_device *device, struct rt_spi_message *message); static rt_err_t nu_spi_bus_configure(struct rt_spi_device *device, struct rt_spi_configuration *configuration); -#if defined(BSP_USING_SPI_PDMA) || defined(BSP_USING_QSPI_PDMA) +#if defined(BSP_USING_SPI_PDMA) static void nu_pdma_spi_rx_cb(void *pvUserData, uint32_t u32EventFilter); - static void nu_pdma_spi_tx_cb(void *pvUserData, uint32_t u32EventFilter); static rt_err_t nu_pdma_spi_rx_config(struct nu_spi *spi_bus, uint8_t *pu8Buf, int32_t i32RcvLen, uint8_t bytes_per_word); static rt_err_t nu_pdma_spi_tx_config(struct nu_spi *spi_bus, const uint8_t *pu8Buf, int32_t i32SndLen, uint8_t bytes_per_word); static rt_size_t nu_spi_pdma_transmit(struct nu_spi *spi_bus, const uint8_t *send_addr, uint8_t *recv_addr, int length, uint8_t bytes_per_word); @@ -63,10 +70,6 @@ static rt_err_t nu_spi_bus_configure(struct rt_spi_device *device, struct rt_spi void nu_spi_transfer(struct nu_spi *spi_bus, uint8_t *tx, uint8_t *rx, int length, uint8_t bytes_per_word); void nu_spi_drain_rxfifo(SPI_T *spi_base); -#if defined(BSP_USING_SPI_PDMA) || defined(BSP_USING_QSPI_PDMA) - rt_err_t nu_hw_spi_pdma_allocate(struct nu_spi *spi_bus); -#endif - /* Private variables ------------------------------------------------------------*/ static struct rt_spi_ops nu_spi_poll_ops = { @@ -193,7 +196,7 @@ static rt_err_t nu_spi_bus_configure(struct rt_spi_device *device, u32BusClock = SPI_SetBusClock(spi_bus->spi_base, configuration->max_hz); if (configuration->max_hz > u32BusClock) { - rt_kprintf("%s clock max frequency is %dHz (!= %dHz)\n", spi_bus->name, u32BusClock, configuration->max_hz); + LOG_W("%s clock max frequency is %dHz (!= %dHz)\n", spi_bus->name, u32BusClock, configuration->max_hz); configuration->max_hz = u32BusClock; } @@ -235,21 +238,14 @@ exit_nu_spi_bus_configure: return -(ret); } -#if defined(BSP_USING_SPI_PDMA) || defined(BSP_USING_QSPI_PDMA) +#if defined(BSP_USING_SPI_PDMA) static void nu_pdma_spi_rx_cb(void *pvUserData, uint32_t u32EventFilter) { - struct nu_spi *spi_bus; - spi_bus = (struct nu_spi *)pvUserData; + struct nu_spi *spi_bus = (struct nu_spi *)pvUserData; RT_ASSERT(spi_bus != RT_NULL); - /* Get base address of spi register */ - SPI_T *spi_base = spi_bus->spi_base; - - if (u32EventFilter & NU_PDMA_EVENT_TRANSFER_DONE) - { - SPI_DISABLE_RX_PDMA(spi_base); // Stop DMA TX transfer - } + rt_sem_release(spi_bus->m_psSemBus); } static rt_err_t nu_pdma_spi_rx_config(struct nu_spi *spi_bus, uint8_t *pu8Buf, int32_t i32RcvLen, uint8_t bytes_per_word) { @@ -299,24 +295,6 @@ exit_nu_pdma_spi_rx_config: return result; } -static void nu_pdma_spi_tx_cb(void *pvUserData, uint32_t u32EventFilter) -{ - struct nu_spi *spi_bus; - spi_bus = (struct nu_spi *)pvUserData; - - RT_ASSERT(spi_bus != RT_NULL); - - /* Get base address of spi register */ - SPI_T *spi_base = spi_bus->spi_base; - - if (u32EventFilter & NU_PDMA_EVENT_TRANSFER_DONE) - { - SPI_DISABLE_TX_PDMA(spi_base); // Stop DMA TX transfer - } - rt_sem_release(spi_bus->m_psSemBus); - -} - static rt_err_t nu_pdma_spi_tx_config(struct nu_spi *spi_bus, const uint8_t *pu8Buf, int32_t i32SndLen, uint8_t bytes_per_word) { rt_err_t result = RT_EOK; @@ -328,15 +306,6 @@ static rt_err_t nu_pdma_spi_tx_config(struct nu_spi *spi_bus, const uint8_t *pu8 rt_uint8_t spi_pdma_tx_chid = spi_bus->pdma_chanid_tx; - result = nu_pdma_callback_register(spi_pdma_tx_chid, - nu_pdma_spi_tx_cb, - (void *)spi_bus, - NU_PDMA_EVENT_TRANSFER_DONE); - if (result != RT_EOK) - { - goto exit_nu_pdma_spi_tx_config; - } - if (pu8Buf == RT_NULL) { spi_bus->dummy = 0; @@ -382,14 +351,14 @@ static rt_size_t nu_spi_pdma_transmit(struct nu_spi *spi_bus, const uint8_t *sen result = nu_pdma_spi_tx_config(spi_bus, send_addr, length, bytes_per_word); RT_ASSERT(result == RT_EOK); - /* Trigger TX/RX at the same time. */ - SPI_TRIGGER_TX_PDMA(spi_base); - SPI_TRIGGER_RX_PDMA(spi_base); + /* Trigger TX/RX PDMA transfer. */ + SPI_TRIGGER_TX_RX_PDMA(spi_base); - /* Wait PDMA transfer done */ + /* Wait RX-PDMA transfer done */ rt_sem_take(spi_bus->m_psSemBus, RT_WAITING_FOREVER); - while (SPI_IS_BUSY(spi_base)); + /* Stop TX/RX DMA transfer. */ + SPI_DISABLE_TX_RX_PDMA(spi_base); return result; } @@ -416,7 +385,7 @@ exit_nu_hw_spi_pdma_allocate: return -(RT_ERROR); } -#endif /* #if defined(BSP_USING_SPI_PDMA) || defined(BSP_USING_QSPI_PDMA) */ +#endif /* #if defined(BSP_USING_SPI_PDMA) */ void nu_spi_drain_rxfifo(SPI_T *spi_base) { @@ -432,11 +401,11 @@ void nu_spi_drain_rxfifo(SPI_T *spi_base) static int nu_spi_read(SPI_T *spi_base, uint8_t *recv_addr, uint8_t bytes_per_word) { int size = 0; - uint32_t val; // Read RX data if (!SPI_GET_RX_FIFO_EMPTY_FLAG(spi_base)) { + uint32_t val; // Read data from SPI RX FIFO switch (bytes_per_word) { @@ -455,6 +424,9 @@ static int nu_spi_read(SPI_T *spi_base, uint8_t *recv_addr, uint8_t bytes_per_wo case 1: *recv_addr = SPI_READ_RX(spi_base); break; + default: + LOG_E("Data length is not supported.\n"); + break; } size = bytes_per_word; } @@ -481,6 +453,9 @@ static int nu_spi_write(SPI_T *spi_base, const uint8_t *send_addr, uint8_t bytes case 1: SPI_WRITE_TX(spi_base, *((uint8_t *)send_addr)); break; + default: + LOG_E("Data length is not supported.\n"); + break; } return bytes_per_word; @@ -534,7 +509,7 @@ static void nu_spi_transmission_with_poll(struct nu_spi *spi_bus, } } // else - /* Wait RX or drian RX-FIFO */ + /* Wait RX or drain RX-FIFO */ if (recv_addr) { // Wait SPI transmission done @@ -565,8 +540,8 @@ void nu_spi_transfer(struct nu_spi *spi_bus, uint8_t *tx, uint8_t *rx, int lengt #if defined(BSP_USING_SPI_PDMA) /* DMA transfer constrains */ if ((spi_bus->pdma_chanid_rx >= 0) && - (!(uint32_t)tx % bytes_per_word) && - (!(uint32_t)rx % bytes_per_word) && + !((uint32_t)tx % bytes_per_word) && + !((uint32_t)rx % bytes_per_word) && (bytes_per_word != 3) && (length >= NU_SPI_USE_PDMA_MIN_THRESHOLD)) nu_spi_pdma_transmit(spi_bus, tx, rx, length, bytes_per_word); @@ -594,7 +569,7 @@ static rt_uint32_t nu_spi_bus_xfer(struct rt_spi_device *device, struct rt_spi_m if ((message->length % bytes_per_word) != 0) { /* Say bye. */ - rt_kprintf("%s: error payload length(%d%%%d != 0).\n", spi_bus->name, message->length, bytes_per_word); + LOG_E("%s: error payload length(%d%%%d != 0).\n", spi_bus->name, message->length, bytes_per_word); return 0; } @@ -653,7 +628,7 @@ static int rt_hw_spi_init(void) { if (nu_hw_spi_pdma_allocate(&nu_spi_arr[i]) != RT_EOK) { - rt_kprintf("Failed to allocate DMA channels for %s. We will use poll-mode for this bus.\n", nu_spi_arr[i].name); + LOG_W("Failed to allocate DMA channels for %s. We will use poll-mode for this bus.\n", nu_spi_arr[i].name); } } #endif diff --git a/bsp/nuvoton/libraries/m480/rtt_port/drv_spi.h b/bsp/nuvoton/libraries/m480/rtt_port/drv_spi.h index c75a126bee..1e7bd0db44 100644 --- a/bsp/nuvoton/libraries/m480/rtt_port/drv_spi.h +++ b/bsp/nuvoton/libraries/m480/rtt_port/drv_spi.h @@ -13,11 +13,13 @@ #ifndef __DRV_SPI_H__ #define __DRV_SPI_H__ +#include + #include #include #include -#if defined(BSP_USING_SPI_PDMA) || defined(BSP_USING_QSPI_PDMA) +#if defined(BSP_USING_SPI_PDMA) #include #endif @@ -27,7 +29,7 @@ struct nu_spi char *name; SPI_T *spi_base; uint32_t dummy; -#if defined(BSP_USING_SPI_PDMA) || defined(BSP_USING_SPI_PDMA) +#if defined(BSP_USING_SPI_PDMA) int16_t pdma_perp_tx; int8_t pdma_chanid_tx; int16_t pdma_perp_rx; @@ -42,7 +44,7 @@ typedef struct nu_spi *nu_spi_t; void nu_spi_drain_rxfifo(SPI_T *spi_base); void nu_spi_transfer(struct nu_spi *spi_bus, uint8_t *tx, uint8_t *rx, int length, uint8_t bytes_per_word); -#if defined(BSP_USING_SPI_PDMA) || defined(BSP_USING_SPI_PDMA) +#if defined(BSP_USING_SPI_PDMA) rt_err_t nu_hw_spi_pdma_allocate(struct nu_spi *spi_bus); #endif diff --git a/bsp/nuvoton/libraries/m480/rtt_port/drv_tpwm.c b/bsp/nuvoton/libraries/m480/rtt_port/drv_tpwm.c index 0b555fe8e7..58181d2400 100644 --- a/bsp/nuvoton/libraries/m480/rtt_port/drv_tpwm.c +++ b/bsp/nuvoton/libraries/m480/rtt_port/drv_tpwm.c @@ -19,7 +19,6 @@ #define DBG_ENABLE #define DBG_SECTION_NAME LOG_TAG #define DBG_LEVEL DBG_INFO -#define DBG_COLOR #define TPWM_CHANNEL_NUM 2 #include diff --git a/bsp/nuvoton/libraries/m480/rtt_port/drv_uart.c b/bsp/nuvoton/libraries/m480/rtt_port/drv_uart.c index b1c5ff4591..d8f9ba1777 100644 --- a/bsp/nuvoton/libraries/m480/rtt_port/drv_uart.c +++ b/bsp/nuvoton/libraries/m480/rtt_port/drv_uart.c @@ -291,7 +291,7 @@ static struct nu_uart nu_uart_arr [] = {0} }; /* uart nu_uart */ -/* Interrupt Handle Funtion ----------------------------------------------------*/ +/* Interrupt Handle Function ----------------------------------------------------*/ #if defined(BSP_USING_UART0) /* UART0 interrupt entry */ void UART0_IRQHandler(void) @@ -419,6 +419,8 @@ static void nu_uart_isr(nu_uart_t serial) #if defined(RT_SERIAL_USING_DMA) if (u32IntSts & UART_INTSTS_HWRLSIF_Msk) { + /* Drain RX FIFO to remove remain FEF frames in FIFO. */ + uart_base->FIFO |= UART_FIFO_RXRST_Msk; uart_base->FIFOSTS |= (UART_FIFOSTS_BIF_Msk | UART_FIFOSTS_FEF_Msk | UART_FIFOSTS_PEF_Msk); return; } @@ -434,7 +436,7 @@ static void nu_uart_isr(nu_uart_t serial) } /** - * Configurae uart port + * Configure uart port */ static rt_err_t nu_uart_configure(struct rt_serial_device *serial, struct serial_configure *cfg) { @@ -544,6 +546,10 @@ static rt_err_t nu_pdma_uart_rx_config(struct rt_serial_device *serial, uint8_t nu_pdma_uart_rx_cb, (void *)serial, NU_PDMA_EVENT_TRANSFER_DONE | NU_PDMA_EVENT_TIMEOUT); + if ( result != RT_EOK ) + { + goto exit_nu_pdma_uart_rx_config; + } result = nu_pdma_transfer(((nu_uart_t)serial)->pdma_chanid_rx, 8, @@ -551,17 +557,24 @@ static rt_err_t nu_pdma_uart_rx_config(struct rt_serial_device *serial, uint8_t (uint32_t)pu8Buf, i32TriggerLen, 1000); //Idle-timeout, 1ms + if ( result != RT_EOK ) + { + goto exit_nu_pdma_uart_rx_config; + } /* Enable Receive Line interrupt & Start DMA RX transfer. */ UART_ENABLE_INT(uart_base, UART_INTEN_RLSIEN_Msk); UART_PDMA_ENABLE(uart_base, UART_INTEN_RXPDMAEN_Msk); + +exit_nu_pdma_uart_rx_config: + return result; } static void nu_pdma_uart_rx_cb(void *pvOwner, uint32_t u32Events) { - rt_size_t recv_len=0; + rt_size_t recv_len = 0; rt_size_t transferred_rxbyte = 0; struct rt_serial_device *serial = (struct rt_serial_device *)pvOwner; nu_uart_t puart = (nu_uart_t)serial; @@ -715,7 +728,6 @@ static rt_err_t nu_uart_control(struct rt_serial_device *serial, int cmd, void * rt_ubase_t ctrl_arg = (rt_ubase_t)arg; RT_ASSERT(serial != RT_NULL); - RT_ASSERT(arg != RT_NULL); /* Get base address of uart register */ UART_T *uart_base = ((nu_uart_t)serial)->uart_base; @@ -763,6 +775,27 @@ static rt_err_t nu_uart_control(struct rt_serial_device *serial, int cmd, void * break; #endif + case RT_DEVICE_CTRL_CLOSE: + /* Disable NVIC interrupt. */ + NVIC_DisableIRQ(((nu_uart_t)serial)->uart_irq_n); + +#if defined(RT_SERIAL_USING_DMA) + nu_pdma_channel_terminate(((nu_uart_t)serial)->pdma_chanid_tx); + nu_pdma_channel_terminate(((nu_uart_t)serial)->pdma_chanid_rx); +#endif + + /* Reset this module */ + SYS_ResetModule(((nu_uart_t)serial)->uart_rst); + + /* Close UART port */ + UART_Close(uart_base); + + break; + + default: + result = -RT_EINVAL; + break; + } return result; } diff --git a/bsp/nuvoton/libraries/m480/rtt_port/drv_ui2c.c b/bsp/nuvoton/libraries/m480/rtt_port/drv_ui2c.c index 52d7e53e71..04d25f453b 100644 --- a/bsp/nuvoton/libraries/m480/rtt_port/drv_ui2c.c +++ b/bsp/nuvoton/libraries/m480/rtt_port/drv_ui2c.c @@ -22,7 +22,6 @@ #define DBG_ENABLE #define DBG_SECTION_NAME LOG_TAG #define DBG_LEVEL DBG_INFO -#define DBG_COLOR #include #define SLV_10BIT_ADDR (0x1E<<2) //1111+0xx+r/w @@ -110,7 +109,7 @@ static rt_err_t nu_ui2c_send_address(nu_ui2c_bus_t *nu_ui2c, LOG_D("addr1: %d, addr2: %d\n", addr1, addr2); ret = nu_ui2c_send_data(nu_ui2c, addr1); - if (ret != RT_EOK) //for timeout conditrion + if (ret != RT_EOK) //for timeout condition return -RT_EIO; if (((UI2C_GET_PROT_STATUS(nu_ui2c->ui2c_base) & UI2C_PROTSTS_ACKIF_Msk) != UI2C_PROTSTS_ACKIF_Msk) && !ignore_nack) @@ -122,7 +121,7 @@ static rt_err_t nu_ui2c_send_address(nu_ui2c_bus_t *nu_ui2c, UI2C_CLR_PROT_INT_FLAG(nu_ui2c->ui2c_base, UI2C_PROTSTS_ACKIF_Msk); ret = nu_ui2c_send_data(nu_ui2c, addr2); - if (ret != RT_EOK) //for timeout conditrion + if (ret != RT_EOK) //for timeout condition return -RT_EIO; if (((UI2C_GET_PROT_STATUS(nu_ui2c->ui2c_base) & UI2C_PROTSTS_ACKIF_Msk) != UI2C_PROTSTS_ACKIF_Msk) && !ignore_nack) @@ -139,7 +138,7 @@ static rt_err_t nu_ui2c_send_address(nu_ui2c_bus_t *nu_ui2c, UI2C_SET_CONTROL_REG(nu_ui2c->ui2c_base, (UI2C_CTL_PTRG | UI2C_CTL_STA)); ret = nu_ui2c_wait_ready_with_timeout(nu_ui2c); - if (ret != RT_EOK) //for timeout conditrion + if (ret != RT_EOK) //for timeout condition return -RT_EIO; if (((UI2C_GET_PROT_STATUS(nu_ui2c->ui2c_base) & UI2C_PROTSTS_STARIF_Msk) != UI2C_PROTSTS_STARIF_Msk) && !ignore_nack) @@ -150,16 +149,15 @@ static rt_err_t nu_ui2c_send_address(nu_ui2c_bus_t *nu_ui2c, } UI2C_CLR_PROT_INT_FLAG(nu_ui2c->ui2c_base, UI2C_PROTSTS_STARIF_Msk); - addr1 |= 0x01; + addr1 |= RT_I2C_RD; ret = nu_ui2c_send_data(nu_ui2c, addr1); - if (ret != RT_EOK) //for timeout conditrion + if (ret != RT_EOK) //for timeout condition return -RT_EIO; if (((UI2C_GET_PROT_STATUS(nu_ui2c->ui2c_base) & UI2C_PROTSTS_ACKIF_Msk) != UI2C_PROTSTS_ACKIF_Msk) && !ignore_nack) { LOG_E("NACK: sending repeated addr\n"); - return -RT_EIO; } UI2C_CLR_PROT_INT_FLAG(nu_ui2c->ui2c_base, UI2C_PROTSTS_ACKIF_Msk); @@ -170,11 +168,11 @@ static rt_err_t nu_ui2c_send_address(nu_ui2c_bus_t *nu_ui2c, /* 7-bit addr */ addr1 = msg->addr << 1; if (flags & RT_I2C_RD) - addr1 |= 1; + addr1 |= RT_I2C_RD; /* Send device address */ ret = nu_ui2c_send_data(nu_ui2c, addr1); /* Send Address */ - if (ret != RT_EOK) //for timeout conditrion + if (ret != RT_EOK) //for timeout condition return -RT_EIO; if (((UI2C_GET_PROT_STATUS(nu_ui2c->ui2c_base) & UI2C_PROTSTS_ACKIF_Msk) != UI2C_PROTSTS_ACKIF_Msk) @@ -210,7 +208,7 @@ static rt_size_t nu_ui2c_mst_xfer(struct rt_i2c_bus_device *bus, UI2C_SET_CONTROL_REG(nu_ui2c->ui2c_base, UI2C_CTL_STA); ret = nu_ui2c_wait_ready_with_timeout(nu_ui2c); - if (ret != RT_EOK) //for timeout conditrion + if (ret != RT_EOK) //for timeout condition { rt_set_errno(-RT_ETIMEOUT); return 0; @@ -235,7 +233,7 @@ static rt_size_t nu_ui2c_mst_xfer(struct rt_i2c_bus_device *bus, { UI2C_SET_CONTROL_REG(nu_ui2c->ui2c_base, (UI2C_CTL_PTRG | UI2C_CTL_STA));/* Send repeat START */ ret = nu_ui2c_wait_ready_with_timeout(nu_ui2c); - if (ret != RT_EOK) //for timeout conditrion + if (ret != RT_EOK) //for timeout condition break; if (((UI2C_GET_PROT_STATUS(nu_ui2c->ui2c_base) & UI2C_PROTSTS_STARIF_Msk) != UI2C_PROTSTS_STARIF_Msk)) /* Check Send repeat START */ @@ -272,7 +270,7 @@ static rt_size_t nu_ui2c_mst_xfer(struct rt_i2c_bus_device *bus, } ret = nu_ui2c_wait_ready_with_timeout(nu_ui2c); - if (ret != RT_EOK) //for timeout conditrion + if (ret != RT_EOK) //for timeout condition break; if (nu_ui2c->ui2c_base->PROTCTL & UI2C_CTL_AA) @@ -303,12 +301,12 @@ static rt_size_t nu_ui2c_mst_xfer(struct rt_i2c_bus_device *bus, { /* Send register number and MSB of data */ ret = nu_ui2c_send_data(nu_ui2c, (uint8_t)(nu_ui2c->msg[i].buf[cnt_data])); - if (ret != RT_EOK) //for timeout conditrion + if (ret != RT_EOK) //for timeout condition break; if (((UI2C_GET_PROT_STATUS(nu_ui2c->ui2c_base) & UI2C_PROTSTS_ACKIF_Msk) != UI2C_PROTSTS_ACKIF_Msk) && !ignore_nack - ) /* Send aata and get Ack */ + ) /* Send data and get Ack */ { i = 0; break; @@ -320,7 +318,7 @@ static rt_size_t nu_ui2c_mst_xfer(struct rt_i2c_bus_device *bus, UI2C_SET_CONTROL_REG(nu_ui2c->ui2c_base, (UI2C_CTL_PTRG | UI2C_CTL_STO)); /* Send STOP signal */ ret = nu_ui2c_wait_ready_with_timeout(nu_ui2c); - if (ret != RT_EOK) //for timeout conditrion + if (ret != RT_EOK) //for timeout condition { rt_set_errno(-RT_ETIMEOUT); return 0; @@ -357,8 +355,11 @@ int rt_hw_ui2c_init(void) #if defined(BSP_USING_UI2C0) /* Enable UI2C0 clock */ + SYS_UnlockReg(); CLK_EnableModuleClock(USCI0_MODULE); SYS_ResetModule(USCI0_RST); + SYS_LockReg(); + nu_ui2c0.ui2c_dev.ops = &nu_ui2c_ops; ret = rt_i2c_bus_device_register(&nu_ui2c0.ui2c_dev, nu_ui2c0.dev_name); RT_ASSERT(RT_EOK == ret); @@ -366,8 +367,11 @@ int rt_hw_ui2c_init(void) #if defined(BSP_USING_UI2C1) /* Enable UI2C1 clock */ + SYS_UnlockReg(); CLK_EnableModuleClock(USCI1_MODULE); SYS_ResetModule(USCI1_RST); + SYS_LockReg(); + nu_ui2c1.ui2c_dev.ops = &nu_ui2c_ops; ret = rt_i2c_bus_device_register(&nu_ui2c1.ui2c_dev, nu_ui2c1.dev_name); RT_ASSERT(RT_EOK == ret); diff --git a/bsp/nuvoton/libraries/m480/rtt_port/drv_uspi.c b/bsp/nuvoton/libraries/m480/rtt_port/drv_uspi.c index 96fab9857a..c670420eb8 100644 --- a/bsp/nuvoton/libraries/m480/rtt_port/drv_uspi.c +++ b/bsp/nuvoton/libraries/m480/rtt_port/drv_uspi.c @@ -56,14 +56,12 @@ typedef struct nu_uspi *uspi_t; /* Private functions ------------------------------------------------------------*/ static rt_err_t nu_uspi_bus_configure(struct rt_spi_device *device, struct rt_spi_configuration *configuration); static rt_uint32_t nu_uspi_bus_xfer(struct rt_spi_device *device, struct rt_spi_message *message); -static void nu_uspi_transmission_with_poll(struct nu_uspi *uspi_bus, - uint8_t *send_addr, uint8_t *recv_addr, int length, uint8_t bytes_per_word); +static void nu_uspi_transmission_with_poll(struct nu_uspi *uspi_bus, uint8_t *send_addr, uint8_t *recv_addr, int length, uint8_t bytes_per_word); static int nu_uspi_register_bus(struct nu_uspi *uspi_bus, const char *name); static void nu_uspi_drain_rxfifo(USPI_T *uspi_base); #if defined(BSP_USING_USPI_PDMA) static void nu_pdma_uspi_rx_cb(void *pvUserData, uint32_t u32EventFilter); - static void nu_pdma_uspi_tx_cb(void *pvUserData, uint32_t u32EventFilter); static rt_err_t nu_pdma_uspi_rx_config(struct nu_uspi *uspi_bus, uint8_t *pu8Buf, int32_t i32RcvLen, uint8_t bytes_per_word); static rt_err_t nu_pdma_uspi_tx_config(struct nu_uspi *uspi_bus, const uint8_t *pu8Buf, int32_t i32SndLen, uint8_t bytes_per_word); static rt_size_t nu_uspi_pdma_transmit(struct nu_uspi *uspi_bus, const uint8_t *send_addr, uint8_t *recv_addr, int length, uint8_t bytes_per_word); @@ -187,12 +185,12 @@ static rt_err_t nu_uspi_bus_configure(struct rt_spi_device *device, if (configuration->mode & RT_SPI_MSB) { /* Set sequence to MSB first */ - SPI_SET_MSB_FIRST(uspi_bus->uspi_base); + USPI_SET_MSB_FIRST(uspi_bus->uspi_base); } else { /* Set sequence to LSB first */ - SPI_SET_LSB_FIRST(uspi_bus->uspi_base); + USPI_SET_LSB_FIRST(uspi_bus->uspi_base); } } @@ -212,17 +210,11 @@ static void nu_pdma_uspi_rx_cb(void *pvUserData, uint32_t u32EventFilter) RT_ASSERT(uspi_bus != RT_NULL); - /* Get base address of uspi register */ - USPI_T *uspi_base = uspi_bus->uspi_base; - - if (u32EventFilter & NU_PDMA_EVENT_TRANSFER_DONE) - { - USPI_DISABLE_RX_PDMA(uspi_base); // Stop DMA TX transfer - } + rt_sem_release(uspi_bus->m_psSemBus); } static rt_err_t nu_pdma_uspi_rx_config(struct nu_uspi *uspi_bus, uint8_t *pu8Buf, int32_t i32RcvLen, uint8_t bytes_per_word) { - rt_err_t result = RT_EOK; + rt_err_t result = RT_ERROR; rt_uint8_t *dst_addr = NULL; nu_pdma_memctrl_t memctrl = eMemCtl_Undefined; @@ -269,27 +261,9 @@ exit_nu_pdma_uspi_rx_config: return result; } -static void nu_pdma_uspi_tx_cb(void *pvUserData, uint32_t u32EventFilter) -{ - struct nu_uspi *uspi_bus; - uspi_bus = (struct nu_uspi *)pvUserData; - - RT_ASSERT(uspi_bus != RT_NULL); - - /* Get base address of uspi register */ - USPI_T *uspi_base = uspi_bus->uspi_base; - - if (u32EventFilter & NU_PDMA_EVENT_TRANSFER_DONE) - { - USPI_DISABLE_TX_PDMA(uspi_base); // Stop DMA TX transfer - } - rt_sem_release(uspi_bus->m_psSemBus); - -} - static rt_err_t nu_pdma_uspi_tx_config(struct nu_uspi *uspi_bus, const uint8_t *pu8Buf, int32_t i32SndLen, uint8_t bytes_per_word) { - rt_err_t result = RT_EOK; + rt_err_t result = RT_ERROR; rt_uint8_t *src_addr = NULL; nu_pdma_memctrl_t memctrl = eMemCtl_Undefined; @@ -298,15 +272,6 @@ static rt_err_t nu_pdma_uspi_tx_config(struct nu_uspi *uspi_bus, const uint8_t * rt_uint8_t uspi_pdma_tx_chid = uspi_bus->pdma_chanid_tx; - result = nu_pdma_callback_register(uspi_pdma_tx_chid, - nu_pdma_uspi_tx_cb, - (void *)uspi_bus, - NU_PDMA_EVENT_TRANSFER_DONE); - if (result != RT_EOK) - { - goto exit_nu_pdma_uspi_tx_config; - } - if (pu8Buf == RT_NULL) { uspi_bus->dummy = 0; @@ -343,7 +308,7 @@ exit_nu_pdma_uspi_tx_config: */ static rt_size_t nu_uspi_pdma_transmit(struct nu_uspi *uspi_bus, const uint8_t *send_addr, uint8_t *recv_addr, int length, uint8_t bytes_per_word) { - rt_err_t result = RT_EOK; + rt_err_t result = RT_ERROR; /* Get base address of uspi register */ USPI_T *uspi_base = uspi_bus->uspi_base; @@ -354,13 +319,13 @@ static rt_size_t nu_uspi_pdma_transmit(struct nu_uspi *uspi_bus, const uint8_t * RT_ASSERT(result == RT_EOK); /* Trigger TX/RX at the same time. */ - USPI_TRIGGER_TX_PDMA(uspi_base); - USPI_TRIGGER_RX_PDMA(uspi_base); + USPI_TRIGGER_TX_RX_PDMA(uspi_base); /* Wait PDMA transfer done */ rt_sem_take(uspi_bus->m_psSemBus, RT_WAITING_FOREVER); - while (USPI_IS_BUSY(uspi_base)); + /* Stop DMA TX/RX transfer */ + USPI_DISABLE_TX_RX_PDMA(uspi_base); return result; } @@ -404,7 +369,6 @@ static void nu_uspi_drain_rxfifo(USPI_T *uspi_base) static int nu_uspi_read(USPI_T *uspi_base, uint8_t *recv_addr, uint8_t bytes_per_word) { int size = 0; - uint32_t val; // Read RX data if (!USPI_GET_RX_EMPTY_FLAG(uspi_base)) @@ -412,6 +376,7 @@ static int nu_uspi_read(USPI_T *uspi_base, uint8_t *recv_addr, uint8_t bytes_per // Read data from USPI RX FIFO switch (bytes_per_word) { + uint32_t val; case 2: val = USPI_READ_RX(uspi_base); nu_set16_le(recv_addr, val); @@ -419,6 +384,8 @@ static int nu_uspi_read(USPI_T *uspi_base, uint8_t *recv_addr, uint8_t bytes_per case 1: *recv_addr = USPI_READ_RX(uspi_base); break; + default: + break; } size = bytes_per_word; } @@ -439,6 +406,8 @@ static int nu_uspi_write(USPI_T *uspi_base, const uint8_t *send_addr, uint8_t by case 1: USPI_WRITE_TX(uspi_base, *((uint8_t *)send_addr)); break; + default: + break; } return bytes_per_word; @@ -475,6 +444,7 @@ static void nu_uspi_transmission_with_poll(struct nu_uspi *uspi_bus, length -= nu_uspi_write(uspi_base, (const uint8_t *)&uspi_bus->dummy, bytes_per_word); /* Read data from RX FIFO */ + while (USPI_GET_RX_EMPTY_FLAG(uspi_base)); recv_addr += nu_uspi_read(uspi_base, recv_addr, bytes_per_word); } } // else if (send_addr == RT_NULL && recv_addr != RT_NULL) @@ -488,11 +458,12 @@ static void nu_uspi_transmission_with_poll(struct nu_uspi *uspi_bus, length -= bytes_per_word; /* Read data from RX FIFO */ + while (USPI_GET_RX_EMPTY_FLAG(uspi_base)); recv_addr += nu_uspi_read(uspi_base, recv_addr, bytes_per_word); } } // else - /* Wait RX or drian RX-FIFO */ + /* Wait RX or drain RX-FIFO */ if (recv_addr) { // Wait SPI transmission done @@ -521,9 +492,8 @@ static void nu_uspi_transfer(struct nu_uspi *uspi_bus, uint8_t *tx, uint8_t *rx, #if defined(BSP_USING_USPI_PDMA) /* DMA transfer constrains */ if ((uspi_bus->pdma_chanid_rx >= 0) && - (!(uint32_t)tx % bytes_per_word) && - (!(uint32_t)rx % bytes_per_word) && - (bytes_per_word != 3)) + !((uint32_t)tx % bytes_per_word) && + !((uint32_t)rx % bytes_per_word) ) nu_uspi_pdma_transmit(uspi_bus, tx, rx, length, bytes_per_word); else nu_uspi_transmission_with_poll(uspi_bus, tx, rx, length, bytes_per_word); diff --git a/bsp/nuvoton/libraries/m480/rtt_port/drv_uuart.c b/bsp/nuvoton/libraries/m480/rtt_port/drv_uuart.c index 0ced7ea397..1be9643f47 100644 --- a/bsp/nuvoton/libraries/m480/rtt_port/drv_uuart.c +++ b/bsp/nuvoton/libraries/m480/rtt_port/drv_uuart.c @@ -139,7 +139,7 @@ static struct nu_uuart nu_uuart_arr [] = {0} }; /* uuart nu_uuart */ -/* Interrupt Handle Funtion ----------------------------------------------------*/ +/* Interrupt Handle Function ----------------------------------------------------*/ #if defined(BSP_USING_UUART0) /* USCI0 interrupt entry */ void USCI0_IRQHandler(void) @@ -197,7 +197,7 @@ static void nu_uuart_isr(nu_uuart_t serial) } /** - * Configurae uuart port + * Configure uuart port */ static rt_err_t nu_uuart_configure(struct rt_serial_device *serial, struct serial_configure *cfg) { @@ -209,12 +209,9 @@ static rt_err_t nu_uuart_configure(struct rt_serial_device *serial, struct seria /* Get base address of uuart register */ UUART_T *uuart_base = ((nu_uuart_t)serial)->uuart_base; - - /* Check baudrate */ + /* Check baud rate */ RT_ASSERT(cfg->baud_rate != 0); - - /* Check word len */ switch (cfg->data_bits) { @@ -280,8 +277,7 @@ static rt_err_t nu_uuart_configure(struct rt_serial_device *serial, struct seria /* Reset this module */ SYS_ResetModule(((nu_uuart_t)serial)->uuart_rst); - - /* Open UUart and set UUART Baudrate */ + /* Open UUart and set UUART baud rate */ UUART_Open(uuart_base, cfg->baud_rate); /* Set line configuration. */ @@ -311,6 +307,11 @@ static rt_err_t nu_pdma_uuart_rx_config(struct rt_serial_device *serial, uint8_t (void *)serial, NU_PDMA_EVENT_TRANSFER_DONE | NU_PDMA_EVENT_TIMEOUT); + if (result != RT_EOK) + { + goto exit_nu_pdma_uuart_rx_config; + } + result = nu_pdma_transfer(((nu_uuart_t)serial)->pdma_chanid_rx, 8, (uint32_t)&uuart_base->RXDAT, @@ -318,7 +319,10 @@ static rt_err_t nu_pdma_uuart_rx_config(struct rt_serial_device *serial, uint8_t i32TriggerLen, 1000); //Idle-timeout, 1ms - + if (result != RT_EOK) + { + goto exit_nu_pdma_uuart_rx_config; + } //UUART PDMA reset UUART_PDMA_ENABLE(uuart_base, UUART_PDMACTL_PDMARST_Msk); @@ -327,6 +331,7 @@ static rt_err_t nu_pdma_uuart_rx_config(struct rt_serial_device *serial, uint8_t UUART_EnableInt(uuart_base, UUART_RLS_INT_MASK); UUART_PDMA_ENABLE(uuart_base, UUART_PDMACTL_RXPDMAEN_Msk | UUART_PDMACTL_PDMAEN_Msk); +exit_nu_pdma_uuart_rx_config: return result; } @@ -483,7 +488,6 @@ static rt_err_t nu_uuart_control(struct rt_serial_device *serial, int cmd, void rt_ubase_t ctrl_arg = (rt_ubase_t)arg; RT_ASSERT(serial != RT_NULL); - RT_ASSERT(arg != RT_NULL); /* Get base address of uuart register */ UUART_T *uuart_base = ((nu_uuart_t)serial)->uuart_base; @@ -530,6 +534,25 @@ static rt_err_t nu_uuart_control(struct rt_serial_device *serial, int cmd, void break; #endif + case RT_DEVICE_CTRL_CLOSE: + /* Disable NVIC interrupt. */ + NVIC_DisableIRQ(((nu_uuart_t)serial)->uuart_irq_n); + +#if defined(RT_SERIAL_USING_DMA) + nu_pdma_channel_terminate(((nu_uuart_t)serial)->pdma_chanid_tx); + nu_pdma_channel_terminate(((nu_uuart_t)serial)->pdma_chanid_rx); +#endif + + /* Reset this module */ + SYS_ResetModule(((nu_uuart_t)serial)->uuart_rst); + + /* Close UUART port */ + UUART_Close(uuart_base); + + break; + default: + result = -RT_EINVAL; + break; } return result; } @@ -599,7 +622,7 @@ static int rt_hw_uuart_init(void) RT_ASSERT(ret == RT_EOK); } - return ret; + return (int)ret; } INIT_DEVICE_EXPORT(rt_hw_uuart_init); diff --git a/bsp/nuvoton/libraries/m480/rtt_port/drv_wdt.c b/bsp/nuvoton/libraries/m480/rtt_port/drv_wdt.c index a4160600e6..82572325d2 100644 --- a/bsp/nuvoton/libraries/m480/rtt_port/drv_wdt.c +++ b/bsp/nuvoton/libraries/m480/rtt_port/drv_wdt.c @@ -13,7 +13,6 @@ #include #if defined(BSP_USING_WDT) - #include #include #include @@ -22,7 +21,7 @@ /*-------------------------------------------------------------------------------*/ /* watchdog timer timeout look up table */ /*-------------------------------------------------------------------------------*/ -/* clock = LIRC 10Khz. */ +/* clock = LIRC 10KHz. */ /* */ /* working hz toutsel exp cycles timeout (s) */ /* 10000 0 4 16 0.0016 */ @@ -34,7 +33,7 @@ /* 6 16 65536 6.5536 */ /* 7 18 262144 26.2144 */ /*-------------------------------------------------------------------------------*/ -/* clock = LXT 32.76Khz. */ +/* clock = LXT 32768Hz. */ /* */ /* working hz toutsel exp cycles timeout (s) */ /* 32768 0 4 16 0.0005 */ @@ -46,7 +45,7 @@ /* 6 16 65536 2.0000 */ /* 7 18 262144 8.0000 */ /*-------------------------------------------------------------------------------*/ -/* clock = 192Mhz HCLK divide 2048 = 93750 hz. */ +/* clock = 192MHz HCLK divide 2048 = 93750 Hz. */ /* */ /* working hz toutsel exp cycles timeout (s) */ /* 93750 0 4 16 0.00017 */ @@ -69,10 +68,10 @@ #define MIN_CYCLES (1024) -/* Macros to convert the value bewtween the timeout interval and the soft time iterations. */ +/* Macros to convert the value between the timeout interval and the soft time iterations. */ #define ROUND_TO_INTEGER(value) ((int)(((value) * 10 + 5) / 10)) -#define CONV_SEC_TO_IT(hz, secs) ROUND_TO_INTEGER((float)((secs) * (hz)) / (float)MIN_CYCLES) -#define CONV_IT_TO_SEC(hz, iterations) ROUND_TO_INTEGER((float)(iterations * MIN_CYCLES) / (float)hz) +#define CONV_SEC_TO_IT(hz, secs) (ROUND_TO_INTEGER((float)((secs) * (hz)) / (float)(MIN_CYCLES))) +#define CONV_IT_TO_SEC(hz, iterations) (ROUND_TO_INTEGER((float)((iterations) * (MIN_CYCLES)) / (float)(hz))) /* Private typedef --------------------------------------------------------------*/ @@ -98,12 +97,10 @@ static void soft_time_setup(uint32_t wanted_sec, uint32_t hz, soft_time_handle_t static void soft_time_feed_dog(soft_time_handle_t *const soft_time); #if defined(RT_USING_PM) - static int wdt_pm_suspend(const struct rt_device *device, rt_uint8_t mode); - static void wdt_pm_resume(const struct rt_device *device, rt_uint8_t mode); - static int wdt_pm_frequency_change(const struct rt_device *device, rt_uint8_t mode); - - static void soft_time_freqeucy_change(uint32_t new_hz, soft_time_handle_t *const soft_time); - +static int wdt_pm_suspend(const struct rt_device *device, rt_uint8_t mode); +static void wdt_pm_resume(const struct rt_device *device, rt_uint8_t mode); +static int wdt_pm_frequency_change(const struct rt_device *device, rt_uint8_t mode); +static void soft_time_freqeucy_change(uint32_t new_hz, soft_time_handle_t *const soft_time); #endif /* Public functions -------------------------------------------------------------*/ @@ -129,8 +126,6 @@ static struct rt_device_pm_ops device_pm_ops = #endif - - #if defined(RT_USING_PM) /* device pm suspend() entry. */ @@ -204,7 +199,7 @@ static int wdt_pm_frequency_change(const struct rt_device *device, rt_uint8_t mo if (new_hz == soft_time.clock_hz) return (int)(RT_EOK); - /* frequency change occurs in critial section */ + /* frequency change occurs in critical section */ soft_time_freqeucy_change(new_hz, &soft_time); } @@ -241,7 +236,7 @@ static void soft_time_freqeucy_change(uint32_t new_hz, soft_time_handle_t *const if (corner_case) { - LOG_W("pm frequency change cause wdt intenal left iterations convert to 0.\n\r \ + LOG_W("pm frequency change cause wdt internal left iterations convert to 0.\n\r \ wdt driver will add another 1 iteration for this corner case."); } } @@ -263,7 +258,7 @@ static void hw_wdt_init(void) } -/* wdt device driver initialise. */ +/* wdt device driver initialize. */ int rt_hw_wdt_init(void) { rt_err_t ret; @@ -278,13 +273,12 @@ int rt_hw_wdt_init(void) rt_pm_device_register((struct rt_device *)&device_wdt, &device_pm_ops); #endif - return (int)ret; } INIT_BOARD_EXPORT(rt_hw_wdt_init); -/* Reigster rt-thread device.init() entry. */ +/* Register rt-thread device.init() entry. */ static rt_err_t wdt_init(rt_watchdog_t *dev) { soft_time_init(&soft_time); diff --git a/bsp/nuvoton/numaker-iot-m487/applications/main.c b/bsp/nuvoton/numaker-iot-m487/applications/main.c index bffd9956a0..16126baad0 100644 --- a/bsp/nuvoton/numaker-iot-m487/applications/main.c +++ b/bsp/nuvoton/numaker-iot-m487/applications/main.c @@ -10,7 +10,7 @@ * ******************************************************************************/ -#include +#include #include #include @@ -19,6 +19,8 @@ int main(int argc, char **argv) { +#if defined(RT_USING_PIN) + int counter = 0; /* set LEDR1 pin mode to output */ @@ -32,5 +34,6 @@ int main(int argc, char **argv) rt_thread_mdelay(500); } +#endif return 0; } diff --git a/bsp/nuvoton/numaker-iot-m487/board/board_dev.c b/bsp/nuvoton/numaker-iot-m487/board/board_dev.c index 7f3aafb45e..068573e8fe 100644 --- a/bsp/nuvoton/numaker-iot-m487/board/board_dev.c +++ b/bsp/nuvoton/numaker-iot-m487/board/board_dev.c @@ -145,7 +145,8 @@ INIT_APP_EXPORT(rt_hw_bmx055_port); #if defined(BOARD_USING_ESP8266) #include -#define LOG_TAG "at.sample.esp" +#define LOG_TAG "at.sample.esp" +#undef DBG_TAG #include static struct at_device_esp8266 esp0 = -- Gitee From f0fc56989cc4ac950f824b1475a5222f704c9678 Mon Sep 17 00:00:00 2001 From: Wayne Lin Date: Mon, 3 Aug 2020 15:14:51 +0800 Subject: [PATCH 15/30] Update driver supporting status. --- bsp/nuvoton/numaker-iot-m487/README.md | 2 +- bsp/nuvoton/numaker-pfm-m487/README.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bsp/nuvoton/numaker-iot-m487/README.md b/bsp/nuvoton/numaker-iot-m487/README.md index 185d77cbdf..480c536936 100644 --- a/bsp/nuvoton/numaker-iot-m487/README.md +++ b/bsp/nuvoton/numaker-iot-m487/README.md @@ -35,7 +35,7 @@ NuMaker-IoT-M487 provides multiple networking, interfaces, audio recording, play |Ethernet PHY| IP101GR | Supported | |Sensor| BMX055 | Supported | |Wi-Fi module| ESP8266-ESP12, AT firmware v1.7 | Supported | -|Audio Codec| NAU88L25, Supports MIC and earphone | Coming soon | +|Audio Codec| NAU88L25, Supports MIC and earphone | Supported | ## 2. Supported compiler Support GCC, MDK4, MDK5, IAR IDE/compilers. More information of these compiler version as following: diff --git a/bsp/nuvoton/numaker-pfm-m487/README.md b/bsp/nuvoton/numaker-pfm-m487/README.md index 3575f3b9c2..6f9a6c300c 100644 --- a/bsp/nuvoton/numaker-pfm-m487/README.md +++ b/bsp/nuvoton/numaker-pfm-m487/README.md @@ -32,7 +32,7 @@ NuMaker-PFM-M487 provides multiple networking, interfaces, audio recording, play | -- | -- | -- | |SPI flash | W25Q32 | Supported | |Ethernet PHY| IP101GR | Supported | -|Audio Codec| NAU88L25, Supports MIC and earphone | Coming soon | +|Audio Codec| NAU88L25, Supports MIC and earphone | Supported | ## 2. Supported compiler Support GCC, MDK4, MDK5, IAR IDE/compilers. More information of these compiler version as following: -- Gitee From bc830faf544d477d3f132f5c3975c03ee848111d Mon Sep 17 00:00:00 2001 From: wangyq2018 Date: Wed, 29 Jul 2020 15:36:40 +0800 Subject: [PATCH 16/30] bugfixed on SConscript --- bsp/essemi/es8p508x/SConscript | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bsp/essemi/es8p508x/SConscript b/bsp/essemi/es8p508x/SConscript index df4aa532be..11d722608a 100644 --- a/bsp/essemi/es8p508x/SConscript +++ b/bsp/essemi/es8p508x/SConscript @@ -1,8 +1,9 @@ # RT-Thread SConscript bridge import os +from building import * objs = [] -cwd = GetCurrentDir() +cwd = GetCurrentDir() list = os.listdir(cwd) for d in list: -- Gitee From b2a9b8308e45364dda9b288af4c754db724683ed Mon Sep 17 00:00:00 2001 From: tangweikang Date: Tue, 4 Aug 2020 11:01:22 +0800 Subject: [PATCH 17/30] [components][usb] word error : PROERTY -> PROPERTY --- .../drivers/include/drivers/usb_common.h | 18 +++++++++--------- .../drivers/usb/usbdevice/class/winusb.c | 2 +- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/components/drivers/include/drivers/usb_common.h b/components/drivers/include/drivers/usb_common.h index c26d83391e..4d85a85e35 100644 --- a/components/drivers/include/drivers/usb_common.h +++ b/components/drivers/include/drivers/usb_common.h @@ -435,15 +435,15 @@ typedef struct usb_os_proerty * usb_os_proerty_t; // 5 A big-endian 32-bit integer (REG_DWORD_BIG_ENDIAN) // 6 A NULL-terminated Unicode string that contains a symbolic link (REG_LINK) // 7 Multiple NULL-terminated Unicode strings (REG_MULTI_SZ) -#define USB_OS_PROERTY_TYPE_REG_SZ 0x01UL -#define USB_OS_PROERTY_TYPE_REG_EXPAND_SZ 0x02UL -#define USB_OS_PROERTY_TYPE_REG_BINARY 0x03UL -#define USB_OS_PROERTY_TYPE_REG_DWORD_LITTLE_ENDIAN 0x04UL -#define USB_OS_PROERTY_TYPE_REG_DWORD_BIG_ENDIAN 0x05UL -#define USB_OS_PROERTY_TYPE_REG_LINK 0x06UL -#define USB_OS_PROERTY_TYPE_REG_MULTI_SZ 0x07UL - -#define USB_OS_PROERTY_DESC(PropertyDataType,PropertyName,PropertyData) \ +#define USB_OS_PROPERTY_TYPE_REG_SZ 0x01UL +#define USB_OS_PROPERTY_TYPE_REG_EXPAND_SZ 0x02UL +#define USB_OS_PROPERTY_TYPE_REG_BINARY 0x03UL +#define USB_OS_PROPERTY_TYPE_REG_DWORD_LITTLE_ENDIAN 0x04UL +#define USB_OS_PROPERTY_TYPE_REG_DWORD_BIG_ENDIAN 0x05UL +#define USB_OS_PROPERTY_TYPE_REG_LINK 0x06UL +#define USB_OS_PROPERTY_TYPE_REG_MULTI_SZ 0x07UL + +#define USB_OS_PROPERTY_DESC(PropertyDataType,PropertyName,PropertyData) \ {\ .dwSize = sizeof(struct usb_os_proerty)-sizeof(const char *)*2\ +sizeof(PropertyName)*2+sizeof(PropertyData)*2,\ diff --git a/components/drivers/usb/usbdevice/class/winusb.c b/components/drivers/usb/usbdevice/class/winusb.c index bf4b353d73..729e39f663 100644 --- a/components/drivers/usb/usbdevice/class/winusb.c +++ b/components/drivers/usb/usbdevice/class/winusb.c @@ -121,7 +121,7 @@ const static char* _ustring[] = ALIGN(4) struct usb_os_proerty winusb_proerty[] = { - USB_OS_PROERTY_DESC(USB_OS_PROERTY_TYPE_REG_SZ,"DeviceInterfaceGUID",RT_WINUSB_GUID), + USB_OS_PROPERTY_DESC(USB_OS_PROPERTY_TYPE_REG_SZ,"DeviceInterfaceGUID",RT_WINUSB_GUID), }; ALIGN(4) -- Gitee From f7ba4a63413cf6a0d64ea03f7cb63eb58d1ad099 Mon Sep 17 00:00:00 2001 From: Meco <920369182@qq.com> Date: Wed, 5 Aug 2020 02:47:27 +0800 Subject: [PATCH 18/30] =?UTF-8?q?=E5=A2=9E=E5=8A=A0=E6=9D=A1=E4=BB=B6?= =?UTF-8?q?=E7=BC=96=E8=AF=91=EF=BC=8C=E9=98=B2=E6=AD=A2RT=5FUSING=5FDFS?= =?UTF-8?q?=E6=B2=A1=E6=9C=89=E5=AE=9A=E4=B9=89=E6=97=B6=20=5Fsys=5Fflen()?= =?UTF-8?q?=E5=87=BA=E7=8E=B0=E7=BC=96=E8=AF=91=E8=AD=A6=E5=91=8A=EF=BC=9A?= =?UTF-8?q?stat=E5=8F=98=E9=87=8F=E5=AE=9A=E4=B9=89=E4=BD=86=E6=B2=A1?= =?UTF-8?q?=E6=9C=89=E8=A2=AB=E8=B0=83=E7=94=A8=20=E7=9A=84=E9=97=AE?= =?UTF-8?q?=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- components/libc/compilers/armlibc/stubs.c | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/components/libc/compilers/armlibc/stubs.c b/components/libc/compilers/armlibc/stubs.c index b6ffb37b0f..8acde16495 100644 --- a/components/libc/compilers/armlibc/stubs.c +++ b/components/libc/compilers/armlibc/stubs.c @@ -9,6 +9,8 @@ * 2013-11-24 aozima fixed _sys_read()/_sys_write() issues. * 2014-08-03 bernard If using msh, use system() implementation * in msh. + * 2020-08-05 Meco Man fixed _sys_flen() compiling-warning when + * RT_USING_DFS is not defined */ #include @@ -265,7 +267,9 @@ RT_WEAK void _sys_exit(int return_code) */ long _sys_flen(FILEHANDLE fh) { +#ifdef RT_USING_DFS struct stat stat; +#endif if (fh < STDERR) return -1; -- Gitee From 3e46db932a97eda44b0a8189d3525f7d8debf21a Mon Sep 17 00:00:00 2001 From: Meco <920369182@qq.com> Date: Wed, 5 Aug 2020 03:12:26 +0800 Subject: [PATCH 19/30] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E9=83=A8=E5=88=86nucel?= =?UTF-8?q?o=E5=BC=80=E5=8F=91=E6=9D=BFreadme?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- bsp/stm32/stm32f072-st-nucleo/README.md | 2 +- bsp/stm32/stm32f091-st-nucleo/README.md | 8 ++++---- bsp/stm32/stm32f412-st-nucleo/README.md | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/bsp/stm32/stm32f072-st-nucleo/README.md b/bsp/stm32/stm32f072-st-nucleo/README.md index 1e3f6391a6..e2d1a3e0ac 100644 --- a/bsp/stm32/stm32f072-st-nucleo/README.md +++ b/bsp/stm32/stm32f072-st-nucleo/README.md @@ -29,7 +29,7 @@ NUCLEO-F072RB 开发板常用 **板载资源** 如下: - 常用接口:USB 转串口、Arduino Uno 和 ST morpho 两类扩展接口 - 调试接口:板载 ST-LINK/V2-1 调试器。 -更多相关信息资料见 ST 官网详情页:[NUCLEO_F072RB_STM32Nucleo-64开发板]https://www.stmcu.com.cn/Designresource/design_resource_detail?file_name=NUCLEO_F072RB_STM32Nucleo-64%E5%BC%80%E5%8F%91%E6%9D%BF&lang=EN&ver= +开发板更多详细信息请参考意法半导体[NUCLEO-F072RB](https://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-mpu-eval-tools/stm32-mcu-mpu-eval-tools/stm32-nucleo-boards/nucleo-f072rb.html) ## 外设支持 diff --git a/bsp/stm32/stm32f091-st-nucleo/README.md b/bsp/stm32/stm32f091-st-nucleo/README.md index 5165ed6f85..5e19d41c65 100644 --- a/bsp/stm32/stm32f091-st-nucleo/README.md +++ b/bsp/stm32/stm32f091-st-nucleo/README.md @@ -1,8 +1,8 @@ -# BSP README 模板 +# NUCLEO-F091RC 开发板 BSP 说明 ## 简介 -本文档为 RT-Thread 开发团队为 STM32F091RC-NuCLEO 开发板提供的 BSP (板级支持包) 说明。 +本文档为 RT-Thread 开发团队为 STM32F091RC-NUCLEO 开发板提供的 BSP (板级支持包) 说明。 主要内容如下: @@ -22,7 +22,7 @@ STM32F091RC-NuCLEO 开发板是 ST 官方推出的一款基于 ARM Cortex-M0 内 该开发板常用 **板载资源** 如下: -- MCU:STM32F091,主频 48MHz,256KB FLASH ,32KB RAM +- MCU:STM32F091RC,主频 48MHz,256KB FLASH ,32KB RAM - 外部 RAM:无 - 外部 FLASH:无 - 常用外设 @@ -30,7 +30,7 @@ STM32F091RC-NuCLEO 开发板是 ST 官方推出的一款基于 ARM Cortex-M0 内 - 常用接口:USB 转串口、arduino 接口等 - 调试接口,标准 SWD -开发板更多详细信息请参考 ST 的 [NUCLEO 开发板介绍](https://www.st.com/en/evaluation-tools/stm32-mcu-nucleo.html?querycriteria=productId=LN1847)。 +开发板更多详细信息请参考意法半导体[NUCLEO-F091RC](https://www.st.com/content/st_com/en/products/evaluation-tools/product-evaluation-tools/mcu-mpu-eval-tools/stm32-mcu-mpu-eval-tools/stm32-nucleo-boards/nucleo-f091rc.html)。 ## 外设支持 diff --git a/bsp/stm32/stm32f412-st-nucleo/README.md b/bsp/stm32/stm32f412-st-nucleo/README.md index 10fb2c58fa..2502e29e29 100644 --- a/bsp/stm32/stm32f412-st-nucleo/README.md +++ b/bsp/stm32/stm32f412-st-nucleo/README.md @@ -20,9 +20,9 @@ ![board](figures/board.png) -该开发板常用 ** 板载资源 ** 如下: +该开发板常用 **板载资源** 如下: -- MCU:STM32F411ZG,主频 100MHz,1024KB FLASH ,256KB RAM。 +- MCU:STM32F412ZG,主频 100MHz,1024KB FLASH ,256KB RAM。 - 常用外设 - LED:3 个,USB communication (LD1), user LED (LD2), power LED (LD3) 。 - 按键,2 个,USER and RESET 。 @@ -71,7 +71,7 @@ #### 运行结果 -下载程序成功之后,系统会自动运行,观察开发板上 LED 的运行效果,红色 LD3 和 LD1 常亮、绿色 LD2 会周期性闪烁。 +下载程序成功之后,系统会自动运行,观察开发板上 LED 的运行效果,红色 LD3 和 LD1 常亮、蓝色 LD2 会周期性闪烁。 USB 虚拟 COM 端口默认连接串口 3,在终端工具里打开相应的串口(115200-8-1-N),复位设备后,可以看到 RT-Thread 的输出信息: -- Gitee From 576475f14f66e3bc73fcef434ca51bb37420d49d Mon Sep 17 00:00:00 2001 From: Meco <920369182@qq.com> Date: Wed, 5 Aug 2020 09:28:10 +0800 Subject: [PATCH 20/30] change format --- components/libc/compilers/armlibc/stubs.c | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/components/libc/compilers/armlibc/stubs.c b/components/libc/compilers/armlibc/stubs.c index 8acde16495..b4cc13799e 100644 --- a/components/libc/compilers/armlibc/stubs.c +++ b/components/libc/compilers/armlibc/stubs.c @@ -269,16 +269,14 @@ long _sys_flen(FILEHANDLE fh) { #ifdef RT_USING_DFS struct stat stat; -#endif - + if (fh < STDERR) return -1; -#ifndef RT_USING_DFS - return -1; -#else fstat(fh, &stat); return stat.st_size; +#else + return -1; #endif } -- Gitee From f44bdc1019c3c96091935c5dc4e09e0d0d8ec4ca Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=9D=A5=E6=97=A5=E6=96=B9=E9=95=BF?= <1125934312@qq.com> Date: Thu, 6 Aug 2020 12:10:49 +0800 Subject: [PATCH 21/30] Update SConscript --- bsp/stm32/stm32h750-armfly-h7-tool/board/SConscript | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bsp/stm32/stm32h750-armfly-h7-tool/board/SConscript b/bsp/stm32/stm32h750-armfly-h7-tool/board/SConscript index 20c211147f..5e388d5047 100644 --- a/bsp/stm32/stm32h750-armfly-h7-tool/board/SConscript +++ b/bsp/stm32/stm32h750-armfly-h7-tool/board/SConscript @@ -17,11 +17,11 @@ path = [cwd] path += [cwd + '/CubeMX_Config/Inc'] if rtconfig.CROSS_TOOL == 'gcc': - src += [cwd + '/../../libraries/STM32H7xx_HAL/CMSIS/Device/ST/STM32H7xx/Source/Templates/gcc/startup_stm32h743xx.s'] + src += [cwd + '/../../libraries/STM32H7xx_HAL/CMSIS/Device/ST/STM32H7xx/Source/Templates/gcc/startup_stm32h750xx.s'] elif rtconfig.CROSS_TOOL == 'keil': - src += [cwd + '/../../libraries/STM32H7xx_HAL/CMSIS/Device/ST/STM32H7xx/Source/Templates/arm/startup_stm32h743xx.s'] + src += [cwd + '/../../libraries/STM32H7xx_HAL/CMSIS/Device/ST/STM32H7xx/Source/Templates/arm/startup_stm32h750xx.s'] elif rtconfig.CROSS_TOOL == 'iar': - src += [cwd + '/../../libraries/STM32H7xx_HAL/CMSIS/Device/ST/STM32H7xx/Source/Templates/iar/startup_stm32h743xx.s'] + src += [cwd + '/../../libraries/STM32H7xx_HAL/CMSIS/Device/ST/STM32H7xx/Source/Templates/iar/startup_stm32h750xx.s'] # STM32H743xx || STM32H750xx || STM32F753xx # You can select chips from the list above -- Gitee From 49b86c6a2111a3b26dfcc7092b7e4f82ae2a3cd6 Mon Sep 17 00:00:00 2001 From: WangQiang Date: Thu, 6 Aug 2020 18:03:15 +0800 Subject: [PATCH 22/30] fixed gcc assembly option and objcopy option in rtconfig.py for imxrt1052-nxp-evk --- bsp/imxrt/imxrt1052-nxp-evk/rtconfig.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/bsp/imxrt/imxrt1052-nxp-evk/rtconfig.py b/bsp/imxrt/imxrt1052-nxp-evk/rtconfig.py index 44de4dc1df..1c90a8bdaa 100644 --- a/bsp/imxrt/imxrt1052-nxp-evk/rtconfig.py +++ b/bsp/imxrt/imxrt1052-nxp-evk/rtconfig.py @@ -53,6 +53,9 @@ if PLATFORM == 'gcc': CPATH = '' LPATH = '' + AFLAGS += ' -D__STARTUP_INITIALIZE_NONCACHEDATA' + AFLAGS += ' -D__STARTUP_CLEAR_BSS' + if BUILD == 'debug': CFLAGS += ' -gdwarf-2' AFLAGS += ' -gdwarf-2' @@ -60,7 +63,7 @@ if PLATFORM == 'gcc': else: CFLAGS += ' -O2 -Os' - POST_ACTION = OBJCPY + ' -O binary --remove-section=.boot_data --remove-section=.image_vertor_table --remove-section=.ncache $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' + POST_ACTION = OBJCPY + ' -O binary $TARGET rtthread.bin\n' + SIZE + ' $TARGET \n' # module setting CXXFLAGS = ' -Woverloaded-virtual -fno-exceptions -fno-rtti ' -- Gitee From ad3e6d889854f646fcfb1abc618d5fa3e1140b4e Mon Sep 17 00:00:00 2001 From: Bernard Xiong Date: Fri, 7 Aug 2020 08:51:22 +0800 Subject: [PATCH 23/30] [DFS] clean the unnecessary checking --- components/dfs/src/dfs_fs.c | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/components/dfs/src/dfs_fs.c b/components/dfs/src/dfs_fs.c index 476e47fc06..c21b914727 100644 --- a/components/dfs/src/dfs_fs.c +++ b/components/dfs/src/dfs_fs.c @@ -129,7 +129,7 @@ const char *dfs_filesystem_get_mounted_path(struct rt_device *device) for (iter = &filesystem_table[0]; iter < &filesystem_table[DFS_FILESYSTEMS_MAX]; iter++) { - /* fint the mounted device */ + /* find the mounted device */ if (iter->ops == NULL) continue; else if (iter->dev_id == device) { @@ -321,7 +321,7 @@ int dfs_mount(const char *device_name, if (rt_device_open(fs->dev_id, RT_DEVICE_OFLAG_RDWR) != RT_EOK) { - /* The underlaying device has error, clear the entry. */ + /* The underlying device has error, clear the entry. */ dfs_lock(); memset(fs, 0, sizeof(struct dfs_filesystem)); @@ -568,8 +568,7 @@ int dfs_unmount_device(rt_device_t dev) iter < &filesystem_table[DFS_FILESYSTEMS_MAX]; iter++) { /* check if the PATH is mounted */ - if ((iter->dev_id->parent.name != NULL) - && (strcmp(iter->dev_id->parent.name, dev->parent.name) == 0)) + if (strcmp(iter->dev_id->parent.name, dev->parent.name) == 0) { fs = iter; break; -- Gitee From b254563a67154faa30a8de71479a86286ae40c38 Mon Sep 17 00:00:00 2001 From: supperthomas <78900636@qq.com> Date: Fri, 7 Aug 2020 21:35:33 +0800 Subject: [PATCH 24/30] [bsp/nrfx5]: fix the board of nrf52832(pca10040) --- bsp/nrf5x/libraries/drivers/drv_gpio.c | 16 - bsp/nrf5x/libraries/drivers/drv_gpio.h | 1 - bsp/nrf5x/nrf52832/.config | 63 +- bsp/nrf5x/nrf52832/SConstruct | 3 + bsp/nrf5x/nrf52832/applications/application.c | 56 +- bsp/nrf5x/nrf52832/applications/ble_nus_app.c | 670 - bsp/nrf5x/nrf52832/applications/sdk_config.h | 3991 ------ bsp/nrf5x/nrf52832/applications/startup.c | 98 - bsp/nrf5x/nrf52832/board/Kconfig | 278 +- bsp/nrf5x/nrf52832/board/SConscript | 3 +- bsp/nrf5x/nrf52832/board/app_config.h | 4 + bsp/nrf5x/nrf52832/board/board.c | 273 +- bsp/nrf5x/nrf52832/board/board.h | 20 +- .../nrf52832/board/linker_scripts/link.sct | 6 +- bsp/nrf5x/nrf52832/board/nrfx_config.h | 47 + bsp/nrf5x/nrf52832/board/nrfx_glue.h | 269 + bsp/nrf5x/nrf52832/board/nrfx_log.h | 135 + bsp/nrf5x/nrf52832/board/sdk_config.h | 11704 ++++++++++++++++ bsp/nrf5x/nrf52832/project.uvoptx | 628 +- bsp/nrf5x/nrf52832/project.uvprojx | 376 +- bsp/nrf5x/nrf52832/rtconfig.h | 20 +- bsp/nrf5x/nrf52832/template.uvoptx | 4 +- bsp/nrf5x/nrf52832/template.uvprojx | 18 +- 23 files changed, 13228 insertions(+), 5455 deletions(-) delete mode 100644 bsp/nrf5x/nrf52832/applications/ble_nus_app.c delete mode 100644 bsp/nrf5x/nrf52832/applications/sdk_config.h delete mode 100644 bsp/nrf5x/nrf52832/applications/startup.c create mode 100644 bsp/nrf5x/nrf52832/board/app_config.h create mode 100644 bsp/nrf5x/nrf52832/board/nrfx_config.h create mode 100644 bsp/nrf5x/nrf52832/board/nrfx_glue.h create mode 100644 bsp/nrf5x/nrf52832/board/nrfx_log.h create mode 100644 bsp/nrf5x/nrf52832/board/sdk_config.h diff --git a/bsp/nrf5x/libraries/drivers/drv_gpio.c b/bsp/nrf5x/libraries/drivers/drv_gpio.c index 001839b2b4..3084fbc043 100644 --- a/bsp/nrf5x/libraries/drivers/drv_gpio.c +++ b/bsp/nrf5x/libraries/drivers/drv_gpio.c @@ -46,22 +46,6 @@ static const struct pin_index pins[] = __NRF5X_PIN(29, 0, 29), __NRF5X_PIN(30, 0, 30), __NRF5X_PIN(31, 0, 31), - __NRF5X_PIN(32, 1, 0 ), - __NRF5X_PIN(33, 1, 1 ), - __NRF5X_PIN(34, 1, 2 ), - __NRF5X_PIN(35, 1, 3 ), - __NRF5X_PIN(36, 1, 4 ), - __NRF5X_PIN(37, 1, 5 ), - __NRF5X_PIN(38, 1, 6 ), - __NRF5X_PIN(39, 1, 7 ), - __NRF5X_PIN(40, 1, 8 ), - __NRF5X_PIN(41, 1, 9 ), - __NRF5X_PIN(42, 1, 10), - __NRF5X_PIN(43, 1, 11), - __NRF5X_PIN(44, 1, 12), - __NRF5X_PIN(45, 1, 13), - __NRF5X_PIN(46, 1, 14), - __NRF5X_PIN(47, 1, 15), }; /* EVENTS_IN[n](n=0..7) and EVENTS_PORT */ diff --git a/bsp/nrf5x/libraries/drivers/drv_gpio.h b/bsp/nrf5x/libraries/drivers/drv_gpio.h index 28eca1a810..bb04697ab5 100644 --- a/bsp/nrf5x/libraries/drivers/drv_gpio.h +++ b/bsp/nrf5x/libraries/drivers/drv_gpio.h @@ -13,7 +13,6 @@ #include #include -#include #include #include diff --git a/bsp/nrf5x/nrf52832/.config b/bsp/nrf5x/nrf52832/.config index 385179fda9..0638293bd5 100644 --- a/bsp/nrf5x/nrf52832/.config +++ b/bsp/nrf5x/nrf52832/.config @@ -74,7 +74,9 @@ CONFIG_RT_VER_NUM=0x40003 # RT-Thread Components # CONFIG_RT_USING_COMPONENTS_INIT=y -# CONFIG_RT_USING_USER_MAIN is not set +CONFIG_RT_USING_USER_MAIN=y +CONFIG_RT_MAIN_THREAD_STACK_SIZE=2048 +CONFIG_RT_MAIN_THREAD_PRIORITY=10 # # C++ features @@ -112,7 +114,7 @@ CONFIG_RT_USING_DEVICE_IPC=y CONFIG_RT_PIPE_BUFSZ=512 # CONFIG_RT_USING_SYSTEM_WORKQUEUE is not set CONFIG_RT_USING_SERIAL=y -CONFIG_RT_SERIAL_USING_DMA=y +# CONFIG_RT_SERIAL_USING_DMA is not set CONFIG_RT_SERIAL_RB_BUFSZ=64 # CONFIG_RT_USING_CAN is not set # CONFIG_RT_USING_HWTIMER is not set @@ -120,6 +122,7 @@ CONFIG_RT_SERIAL_RB_BUFSZ=64 # CONFIG_RT_USING_I2C is not set CONFIG_RT_USING_PIN=y # CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_DAC is not set # CONFIG_RT_USING_PWM is not set # CONFIG_RT_USING_MTD_NOR is not set # CONFIG_RT_USING_MTD_NAND is not set @@ -192,12 +195,15 @@ CONFIG_RT_USING_LIBC=y # # IoT - internet of things # +# CONFIG_PKG_USING_LORAWAN_DRIVER is not set # CONFIG_PKG_USING_PAHOMQTT is not set +# CONFIG_PKG_USING_UMQTT is not set # CONFIG_PKG_USING_WEBCLIENT is not set # CONFIG_PKG_USING_WEBNET is not set # CONFIG_PKG_USING_MONGOOSE is not set # CONFIG_PKG_USING_MYMQTT is not set # CONFIG_PKG_USING_KAWAII_MQTT is not set +# CONFIG_PKG_USING_BC28_MQTT is not set # CONFIG_PKG_USING_WEBTERMINAL is not set # CONFIG_PKG_USING_CJSON is not set # CONFIG_PKG_USING_JSMN is not set @@ -224,6 +230,7 @@ CONFIG_RT_USING_LIBC=y # CONFIG_PKG_USING_COAP is not set # CONFIG_PKG_USING_NOPOLL is not set # CONFIG_PKG_USING_NETUTILS is not set +# CONFIG_PKG_USING_CMUX is not set # CONFIG_PKG_USING_PPP_DEVICE is not set # CONFIG_PKG_USING_AT_DEVICE is not set # CONFIG_PKG_USING_ATSRV_SOCKET is not set @@ -236,9 +243,10 @@ CONFIG_RT_USING_LIBC=y # CONFIG_PKG_USING_GAGENT_CLOUD is not set # CONFIG_PKG_USING_ALI_IOTKIT is not set # CONFIG_PKG_USING_AZURE is not set -# CONFIG_PKG_USING_TENCENT_IOTHUB is not set +# CONFIG_PKG_USING_TENCENT_IOT_EXPLORER is not set # CONFIG_PKG_USING_JIOT-C-SDK is not set # CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set +# CONFIG_PKG_USING_JOYLINK is not set # CONFIG_PKG_USING_NIMBLE is not set # CONFIG_PKG_USING_OTA_DOWNLOADER is not set # CONFIG_PKG_USING_IPMSG is not set @@ -257,6 +265,7 @@ CONFIG_RT_USING_LIBC=y # CONFIG_PKG_USING_CAPNP is not set # CONFIG_PKG_USING_RT_CJSON_TOOLS is not set # CONFIG_PKG_USING_AGILE_TELNET is not set +# CONFIG_PKG_USING_NMEALIB is not set # # security packages @@ -265,6 +274,7 @@ CONFIG_RT_USING_LIBC=y # CONFIG_PKG_USING_libsodium is not set # CONFIG_PKG_USING_TINYCRYPT is not set # CONFIG_PKG_USING_TFM is not set +# CONFIG_PKG_USING_YD_CRYPTO is not set # # language packages @@ -299,6 +309,8 @@ CONFIG_RT_USING_LIBC=y # CONFIG_PKG_USING_CHINESE_FONT_LIBRARY is not set # CONFIG_PKG_USING_LUNAR_CALENDAR is not set # CONFIG_PKG_USING_BS8116A is not set +# CONFIG_PKG_USING_GPS_RMC is not set +# CONFIG_PKG_USING_URLENCODE is not set # # system packages @@ -309,6 +321,7 @@ CONFIG_RT_USING_LIBC=y # CONFIG_PKG_USING_LWEXT4 is not set # CONFIG_PKG_USING_PARTITION is not set # CONFIG_PKG_USING_FAL is not set +# CONFIG_PKG_USING_FLASHDB is not set # CONFIG_PKG_USING_SQLITE is not set # CONFIG_PKG_USING_RTI is not set # CONFIG_PKG_USING_LITTLEVGL2RTT is not set @@ -321,6 +334,9 @@ CONFIG_RT_USING_LIBC=y # CONFIG_PKG_USING_SYSWATCH is not set # CONFIG_PKG_USING_SYS_LOAD_MONITOR is not set # CONFIG_PKG_USING_PLCCORE is not set +# CONFIG_PKG_USING_RAMDISK is not set +# CONFIG_PKG_USING_MININI is not set +# CONFIG_PKG_USING_QBOOT is not set # # peripheral libraries and drivers @@ -338,6 +354,13 @@ CONFIG_RT_USING_LIBC=y # CONFIG_PKG_USING_SIGNAL_LED is not set # CONFIG_PKG_USING_LEDBLINK is not set # CONFIG_PKG_USING_LITTLED is not set +# CONFIG_PKG_USING_LKDGUI is not set +# CONFIG_PKG_USING_NRF5X_SDK is not set +CONFIG_PKG_USING_NRFX=y +CONFIG_PKG_NRFX_PATH="/packages/peripherals/nrfx" +CONFIG_PKG_USING_NRFX_V210=y +# CONFIG_PKG_USING_NRFX_LATEST_VERSION is not set +CONFIG_PKG_NRFX_VER="v2.1.0" # CONFIG_PKG_USING_WM_LIBRARIES is not set # CONFIG_PKG_USING_KENDRYTE_SDK is not set # CONFIG_PKG_USING_INFRARED is not set @@ -355,13 +378,19 @@ CONFIG_RT_USING_LIBC=y # CONFIG_PKG_USING_RPLIDAR is not set # CONFIG_PKG_USING_AS608 is not set # CONFIG_PKG_USING_RC522 is not set +# CONFIG_PKG_USING_WS2812B is not set # CONFIG_PKG_USING_EMBARC_BSP is not set # CONFIG_PKG_USING_EXTERN_RTC_DRIVERS is not set +# CONFIG_PKG_USING_MULTI_RTIMER is not set # CONFIG_PKG_USING_MAX7219 is not set # CONFIG_PKG_USING_BEEP is not set -# CONFIG_PKG_USING_NORDIC_SDK is not set -# CONFIG_PKG_USING_NORDIC_SDK_V100 is not set -# CONFIG_PKG_USING_NORDIC_SDK_LATEST_VERSION is not set +# CONFIG_PKG_USING_EASYBLINK is not set +# CONFIG_PKG_USING_PMS_SERIES is not set +# CONFIG_PKG_USING_CAN_YMODEM is not set +# CONFIG_PKG_USING_LORA_RADIO_DRIVER is not set +# CONFIG_PKG_USING_QLED is not set +# CONFIG_PKG_USING_PAJ7620 is not set +# CONFIG_PKG_USING_AGILE_CONSOLE is not set # # miscellaneous packages @@ -398,17 +427,39 @@ CONFIG_RT_USING_LIBC=y # CONFIG_PKG_USING_VT100 is not set # CONFIG_PKG_USING_ULAPACK is not set # CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_CRCLIB is not set # # Hardware Drivers Config # CONFIG_SOC_NRF52832=y +CONFIG_SOC_NORDIC=y # # Onboard Peripheral Drivers # +# CONFIG_BSP_USING_JLINK_TO_USART is not set +# CONFIG_BSP_USING_QSPI_FLASH is not set # # On-chip Peripheral Drivers # +CONFIG_BSP_USING_GPIO=y +# CONFIG_BSP_USING_PWM is not set +# CONFIG_BSP_USING_SOFTDEVICE is not set CONFIG_BSP_USING_UART=y +CONFIG_BSP_USING_UART0=y +CONFIG_BSP_UART0_RX_PIN=8 +CONFIG_BSP_UART0_TX_PIN=6 +# CONFIG_BSP_USING_UART1 is not set +# CONFIG_BSP_USING_SPI is not set +# CONFIG_BSP_USING_ON_CHIP_FLASH is not set + +# +# On-chip flash config +# +CONFIG_MCU_FLASH_START_ADDRESS=0x00000000 +CONFIG_MCU_FLASH_SIZE_KB=1024 +CONFIG_MCU_SRAM_START_ADDRESS=0x20000000 +CONFIG_MCU_SRAM_SIZE_KB=256 +CONFIG_MCU_FLASH_PAGE_SIZE=0x1000 diff --git a/bsp/nrf5x/nrf52832/SConstruct b/bsp/nrf5x/nrf52832/SConstruct index 20d41c40ae..2ac1ce6674 100644 --- a/bsp/nrf5x/nrf52832/SConstruct +++ b/bsp/nrf5x/nrf52832/SConstruct @@ -50,5 +50,8 @@ objs = PrepareBuilding(env, RTT_ROOT, has_libcpu=False) # include drivers objs.extend(SConscript(os.path.join(libraries_path_prefix, 'drivers', 'SConscript'))) +# include cmsis +objs.extend(SConscript(os.path.join(libraries_path_prefix, 'cmsis', 'SConscript'))) + # make a building DoBuilding(TARGET, objs) diff --git a/bsp/nrf5x/nrf52832/applications/application.c b/bsp/nrf5x/nrf52832/applications/application.c index 1135d82e16..3e29eeeac3 100644 --- a/bsp/nrf5x/nrf52832/applications/application.c +++ b/bsp/nrf5x/nrf52832/applications/application.c @@ -1,48 +1,32 @@ /* - * File : application.c - * This file is part of RT-Thread RTOS - * COPYRIGHT (C) 2015, RT-Thread Development Team + * Copyright (c) 2006-2020, RT-Thread Development Team * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://www.rt-thread.org/license/LICENSE + * SPDX-License-Identifier: Apache-2.0 * * Change Logs: * Date Author Notes - * 2015-03-01 Yangfs the first version - * 2015-03-27 Bernard code cleanup. - */ - -/** - * @addtogroup NRF52832 + * 2020-04-29 supperthomas first version + * */ -/*@{*/ #include +#include +#define DK_BOARD_LED_1 17 +#define DK_BOARD_LED_2 18 -#ifdef RT_USING_FINSH -#include -#include -#endif - -void rt_init_thread_entry(void* parameter) +int main(void) { - extern rt_err_t ble_init(void); - - ble_init(); + int count = 1; + rt_pin_mode(DK_BOARD_LED_1, PIN_MODE_OUTPUT); + + while (count++) + { + rt_pin_write(DK_BOARD_LED_1, PIN_HIGH); + rt_thread_mdelay(500); + + rt_pin_write(DK_BOARD_LED_1, PIN_LOW); + rt_thread_mdelay(500); + } + return RT_EOK; } -int rt_application_init(void) -{ - rt_thread_t tid; - - tid = rt_thread_create("init", rt_init_thread_entry, RT_NULL, 1024, - RT_THREAD_PRIORITY_MAX / 3, 20); - if (tid != RT_NULL) - rt_thread_startup(tid); - - return 0; -} - - -/*@}*/ diff --git a/bsp/nrf5x/nrf52832/applications/ble_nus_app.c b/bsp/nrf5x/nrf52832/applications/ble_nus_app.c deleted file mode 100644 index f4a51493ed..0000000000 --- a/bsp/nrf5x/nrf52832/applications/ble_nus_app.c +++ /dev/null @@ -1,670 +0,0 @@ -#include "nordic_common.h" -#include "nrf.h" -#include "ble_hci.h" -#include "ble_advdata.h" -#include "ble_advertising.h" -#include "ble_conn_params.h" -#include "softdevice_handler.h" -#include "nrf_ble_gatt.h" -#include "app_timer.h" -#include "ble_nus.h" -#include "app_util_platform.h" - -#include - -typedef rt_size_t (*BLE_NOTIFY_T)(rt_uint8_t *buf, rt_uint16_t size); - -#define STACK_EVT_MQ_NUM 10 - -#define FAST_ADV() \ - do { \ - uint32_t err_code; \ - err_code = ble_advertising_start(BLE_ADV_MODE_FAST); \ - APP_ERROR_CHECK(err_code); \ - } while(0) - -typedef enum -{ - STACK_EV_DISCON = 1, - STACK_EV_DISPATCH = 2, - STACK_EV_KEY = 4, -} STACK_EV_E; - -typedef struct -{ - rt_list_t node; - void* evt; -} evt_list_t; - -typedef enum -{ - STACK_STATE_IDLE = 0, - STACK_STATE_ADV = 1, - STACK_STATE_CON = 2, - STACK_STATE_DISC = 3 -} STACK_STATE_E; - -STACK_STATE_E stack_state = STACK_STATE_IDLE; - -rt_event_t stack_event; -rt_sem_t sd_evt_sem; -rt_mq_t stack_evt_mq; -rt_uint8_t *evt_sample; - -BLE_NOTIFY_T rx_notify = RT_NULL; - -// Low frequency clock source to be used by the SoftDevice -#define NRF_CLOCK_LFCLKSRC {.source = NRF_CLOCK_LF_SRC_XTAL, \ - .rc_ctiv = 0, \ - .rc_temp_ctiv = 0, \ - .xtal_accuracy = NRF_CLOCK_LF_XTAL_ACCURACY_20_PPM} - - -#define CONN_CFG_TAG 1 /**< A tag that refers to the BLE stack configuration we set with @ref sd_ble_cfg_set. Default tag is @ref BLE_CONN_CFG_TAG_DEFAULT. */ - -#define APP_FEATURE_NOT_SUPPORTED BLE_GATT_STATUS_ATTERR_APP_BEGIN + 2 /**< Reply when unsupported features are requested. */ - -#define DEVICE_NAME "Nordic_UART" /**< Name of device. Will be included in the advertising data. */ -#define NUS_SERVICE_UUID_TYPE BLE_UUID_TYPE_VENDOR_BEGIN /**< UUID type for the Nordic UART Service (vendor specific). */ - -#define APP_ADV_INTERVAL 64 /**< The advertising interval (in units of 0.625 ms. This value corresponds to 40 ms). */ -#define APP_ADV_TIMEOUT_IN_SECONDS 30 /**< The advertising timeout (in units of seconds). */ - -#define MIN_CONN_INTERVAL MSEC_TO_UNITS(20, UNIT_1_25_MS) /**< Minimum acceptable connection interval (20 ms), Connection interval uses 1.25 ms units. */ -#define MAX_CONN_INTERVAL MSEC_TO_UNITS(75, UNIT_1_25_MS) /**< Maximum acceptable connection interval (75 ms), Connection interval uses 1.25 ms units. */ -#define SLAVE_LATENCY 0 /**< Slave latency. */ -#define CONN_SUP_TIMEOUT MSEC_TO_UNITS(4000, UNIT_10_MS) /**< Connection supervisory timeout (4 seconds), Supervision Timeout uses 10 ms units. */ -#define FIRST_CONN_PARAMS_UPDATE_DELAY APP_TIMER_TICKS(5000) /**< Time from initiating event (connect or start of notification) to first time sd_ble_gap_conn_param_update is called (5 seconds). */ -#define NEXT_CONN_PARAMS_UPDATE_DELAY APP_TIMER_TICKS(30000) /**< Time between each call to sd_ble_gap_conn_param_update after the first call (30 seconds). */ -#define MAX_CONN_PARAMS_UPDATE_COUNT 3 /**< Number of attempts before giving up the connection parameter negotiation. */ - -#define DEAD_BEEF 0xDEADBEEF /**< Value used as error code on stack dump, can be used to identify stack location on stack unwind. */ - -#define UART_TX_BUF_SIZE 256 /**< UART TX buffer size. */ -#define UART_RX_BUF_SIZE 256 /**< UART RX buffer size. */ - -static ble_nus_t m_nus; /**< Structure to identify the Nordic UART Service. */ -static uint16_t m_conn_handle = BLE_CONN_HANDLE_INVALID; /**< Handle of the current connection. */ - -static nrf_ble_gatt_t m_gatt; /**< GATT module instance. */ -static ble_uuid_t m_adv_uuids[] = {{BLE_UUID_NUS_SERVICE, NUS_SERVICE_UUID_TYPE}}; /**< Universally unique service identifier. */ -static uint16_t m_ble_nus_max_data_len = BLE_GATT_ATT_MTU_DEFAULT - 3; /**< Maximum length of data (in bytes) that can be transmitted to the peer by the Nordic UART service module. */ - -/**@brief Function for assert macro callback. - * - * @details This function will be called in case of an assert in the SoftDevice. - * - * @warning This handler is an example only and does not fit a final product. You need to analyse - * how your product is supposed to react in case of Assert. - * @warning On assert from the SoftDevice, the system can only recover on reset. - * - * @param[in] line_num Line number of the failing ASSERT call. - * @param[in] p_file_name File name of the failing ASSERT call. - */ -void assert_nrf_callback(uint16_t line_num, const uint8_t * p_file_name) -{ - app_error_handler(DEAD_BEEF, line_num, p_file_name); -} - - -/**@brief Function for the GAP initialization. - * - * @details This function will set up all the necessary GAP (Generic Access Profile) parameters of - * the device. It also sets the permissions and appearance. - */ -static void gap_params_init(void) -{ - uint32_t err_code; - ble_gap_conn_params_t gap_conn_params; - ble_gap_conn_sec_mode_t sec_mode; - - BLE_GAP_CONN_SEC_MODE_SET_OPEN(&sec_mode); - - err_code = sd_ble_gap_device_name_set(&sec_mode, - (const uint8_t *) DEVICE_NAME, - strlen(DEVICE_NAME)); - APP_ERROR_CHECK(err_code); - - memset(&gap_conn_params, 0, sizeof(gap_conn_params)); - - gap_conn_params.min_conn_interval = MIN_CONN_INTERVAL; - gap_conn_params.max_conn_interval = MAX_CONN_INTERVAL; - gap_conn_params.slave_latency = SLAVE_LATENCY; - gap_conn_params.conn_sup_timeout = CONN_SUP_TIMEOUT; - - err_code = sd_ble_gap_ppcp_set(&gap_conn_params); - APP_ERROR_CHECK(err_code); -} - - -/**@brief Function for handling the data from the Nordic UART Service. - * - * @details This function will process the data received from the Nordic UART BLE Service and send - * it to the UART module. - * - * @param[in] p_nus Nordic UART Service structure. - * @param[in] p_data Data to be send to UART module. - * @param[in] length Length of the data. - */ -/**@snippet [Handling the data received over BLE] */ -static void nus_data_handler(ble_nus_t * p_nus, uint8_t * p_data, uint16_t length) -{ - rt_kprintf("Received data from BLE NUS. Writing data on UART.\r\n"); - - for (uint32_t i = 0; i < length; i++) - { - rt_kprintf("%02x ", p_data[i]); - } - - // ble_send(p_data, length); - - if (rx_notify != RT_NULL) - { - rx_notify(p_data, length); - } -} -/**@snippet [Handling the data received over BLE] */ - - -/**@brief Function for initializing services that will be used by the application. - */ -static void services_init(void) -{ - uint32_t err_code; - ble_nus_init_t nus_init; - - memset(&nus_init, 0, sizeof(nus_init)); - - nus_init.data_handler = nus_data_handler; - - err_code = ble_nus_init(&m_nus, &nus_init); - APP_ERROR_CHECK(err_code); -} - - -/**@brief Function for handling an event from the Connection Parameters Module. - * - * @details This function will be called for all events in the Connection Parameters Module - * which are passed to the application. - * - * @note All this function does is to disconnect. This could have been done by simply setting - * the disconnect_on_fail config parameter, but instead we use the event handler - * mechanism to demonstrate its use. - * - * @param[in] p_evt Event received from the Connection Parameters Module. - */ -static void on_conn_params_evt(ble_conn_params_evt_t * p_evt) -{ - uint32_t err_code; - - if (p_evt->evt_type == BLE_CONN_PARAMS_EVT_FAILED) - { - err_code = sd_ble_gap_disconnect(m_conn_handle, BLE_HCI_CONN_INTERVAL_UNACCEPTABLE); - APP_ERROR_CHECK(err_code); - } -} - - -/**@brief Function for handling errors from the Connection Parameters module. - * - * @param[in] nrf_error Error code containing information about what went wrong. - */ -static void conn_params_error_handler(uint32_t nrf_error) -{ - APP_ERROR_HANDLER(nrf_error); -} - - -/**@brief Function for initializing the Connection Parameters module. - */ -static void conn_params_init(void) -{ - uint32_t err_code; - ble_conn_params_init_t cp_init; - - memset(&cp_init, 0, sizeof(cp_init)); - - cp_init.p_conn_params = NULL; - cp_init.first_conn_params_update_delay = FIRST_CONN_PARAMS_UPDATE_DELAY; - cp_init.next_conn_params_update_delay = NEXT_CONN_PARAMS_UPDATE_DELAY; - cp_init.max_conn_params_update_count = MAX_CONN_PARAMS_UPDATE_COUNT; - cp_init.start_on_notify_cccd_handle = BLE_GATT_HANDLE_INVALID; - cp_init.disconnect_on_fail = false; - cp_init.evt_handler = on_conn_params_evt; - cp_init.error_handler = conn_params_error_handler; - - err_code = ble_conn_params_init(&cp_init); - APP_ERROR_CHECK(err_code); -} - -/**@brief Function for handling advertising events. - * - * @details This function will be called for advertising events which are passed to the application. - * - * @param[in] ble_adv_evt Advertising event. - */ -static void on_adv_evt(ble_adv_evt_t ble_adv_evt) -{ - // uint32_t err_code; - - switch (ble_adv_evt) - { - case BLE_ADV_EVT_FAST: - // err_code = bsp_indication_set(BSP_INDICATE_ADVERTISING); - // APP_ERROR_CHECK(err_code); - stack_state = STACK_STATE_ADV; - rt_kprintf("ble fast advert\n"); - break; - case BLE_ADV_EVT_IDLE: - // sleep_mode_enter(); - stack_state = STACK_STATE_IDLE; - rt_kprintf("advert idle\n"); - break; - default: - break; - } -} - - -/**@brief Function for the application's SoftDevice event handler. - * - * @param[in] p_ble_evt SoftDevice event. - */ -static void on_ble_evt(ble_evt_t * p_ble_evt) -{ - uint32_t err_code; - - switch (p_ble_evt->header.evt_id) - { - case BLE_GAP_EVT_CONNECTED: - // err_code = bsp_indication_set(BSP_INDICATE_CONNECTED); - // APP_ERROR_CHECK(err_code); - m_conn_handle = p_ble_evt->evt.gap_evt.conn_handle; - stack_state = STACK_STATE_CON; - rt_kprintf("Connected\r\n"); - break; // BLE_GAP_EVT_CONNECTED - - case BLE_GAP_EVT_DISCONNECTED: - // err_code = bsp_indication_set(BSP_INDICATE_IDLE); - // APP_ERROR_CHECK(err_code); - m_conn_handle = BLE_CONN_HANDLE_INVALID; - stack_state = STACK_STATE_DISC; - rt_kprintf("Disconnected\r\n"); - break; // BLE_GAP_EVT_DISCONNECTED - - case BLE_GAP_EVT_SEC_PARAMS_REQUEST: - // Pairing not supported - err_code = sd_ble_gap_sec_params_reply(m_conn_handle, BLE_GAP_SEC_STATUS_PAIRING_NOT_SUPP, NULL, NULL); - APP_ERROR_CHECK(err_code); - break; // BLE_GAP_EVT_SEC_PARAMS_REQUEST - - case BLE_GAP_EVT_DATA_LENGTH_UPDATE_REQUEST: - { - ble_gap_data_length_params_t dl_params; - - // Clearing the struct will effectivly set members to @ref BLE_GAP_DATA_LENGTH_AUTO - memset(&dl_params, 0, sizeof(ble_gap_data_length_params_t)); - err_code = sd_ble_gap_data_length_update(p_ble_evt->evt.gap_evt.conn_handle, &dl_params, NULL); - APP_ERROR_CHECK(err_code); - } break; - - case BLE_GATTS_EVT_SYS_ATTR_MISSING: - // No system attributes have been stored. - err_code = sd_ble_gatts_sys_attr_set(m_conn_handle, NULL, 0, 0); - APP_ERROR_CHECK(err_code); - break; // BLE_GATTS_EVT_SYS_ATTR_MISSING - - case BLE_GATTC_EVT_TIMEOUT: - // Disconnect on GATT Client timeout event. - err_code = sd_ble_gap_disconnect(p_ble_evt->evt.gattc_evt.conn_handle, - BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION); - APP_ERROR_CHECK(err_code); - break; // BLE_GATTC_EVT_TIMEOUT - - case BLE_GATTS_EVT_TIMEOUT: - // Disconnect on GATT Server timeout event. - err_code = sd_ble_gap_disconnect(p_ble_evt->evt.gatts_evt.conn_handle, - BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION); - APP_ERROR_CHECK(err_code); - break; // BLE_GATTS_EVT_TIMEOUT - - case BLE_EVT_USER_MEM_REQUEST: - err_code = sd_ble_user_mem_reply(p_ble_evt->evt.gattc_evt.conn_handle, NULL); - APP_ERROR_CHECK(err_code); - break; // BLE_EVT_USER_MEM_REQUEST - - case BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST: - { - ble_gatts_evt_rw_authorize_request_t req; - ble_gatts_rw_authorize_reply_params_t auth_reply; - - req = p_ble_evt->evt.gatts_evt.params.authorize_request; - - if (req.type != BLE_GATTS_AUTHORIZE_TYPE_INVALID) - { - if ((req.request.write.op == BLE_GATTS_OP_PREP_WRITE_REQ) || - (req.request.write.op == BLE_GATTS_OP_EXEC_WRITE_REQ_NOW) || - (req.request.write.op == BLE_GATTS_OP_EXEC_WRITE_REQ_CANCEL)) - { - if (req.type == BLE_GATTS_AUTHORIZE_TYPE_WRITE) - { - auth_reply.type = BLE_GATTS_AUTHORIZE_TYPE_WRITE; - } - else - { - auth_reply.type = BLE_GATTS_AUTHORIZE_TYPE_READ; - } - auth_reply.params.write.gatt_status = APP_FEATURE_NOT_SUPPORTED; - err_code = sd_ble_gatts_rw_authorize_reply(p_ble_evt->evt.gatts_evt.conn_handle, - &auth_reply); - APP_ERROR_CHECK(err_code); - } - } - } break; // BLE_GATTS_EVT_RW_AUTHORIZE_REQUEST - - default: - // No implementation needed. - break; - } -} - - -/**@brief Function for dispatching a SoftDevice event to all modules with a SoftDevice - * event handler. - * - * @details This function is called from the SoftDevice event interrupt handler after a - * SoftDevice event has been received. - * - * @param[in] p_ble_evt SoftDevice event. - */ -static void ble_evt_dispatch(ble_evt_t * p_ble_evt) -{ - if (rt_mq_send(stack_evt_mq, p_ble_evt, p_ble_evt->header.evt_len) != RT_EOK) - { - rt_kprintf("dispatch malloc failure\n"); - } - else - { - rt_event_send(stack_event, STACK_EV_DISPATCH); - } -} - -static rt_err_t evt_dispatch_worker(void) -{ - ble_evt_t * p_ble_evt = (ble_evt_t *)evt_sample; - rt_err_t err; - - err = rt_mq_recv(stack_evt_mq, (void*)evt_sample, BLE_STACK_EVT_MSG_BUF_SIZE, RT_WAITING_NO); - - if (RT_EOK == err) - { - ble_conn_params_on_ble_evt(p_ble_evt); - nrf_ble_gatt_on_ble_evt(&m_gatt, p_ble_evt); - ble_nus_on_ble_evt(&m_nus, p_ble_evt); - on_ble_evt(p_ble_evt); - ble_advertising_on_ble_evt(p_ble_evt); - // bsp_btn_ble_on_ble_evt(p_ble_evt); - - rt_kprintf("ble evt dispatch\n"); - } - - return err; -} - -static uint32_t _softdevice_evt_schedule(void) -{ - rt_sem_release(sd_evt_sem); - - return NRF_SUCCESS; -} - -/**@brief Function for the SoftDevice initialization. - * - * @details This function initializes the SoftDevice and the BLE event interrupt. - */ -static void ble_stack_init(void) -{ - uint32_t err_code; - - nrf_clock_lf_cfg_t clock_lf_cfg = NRF_CLOCK_LFCLKSRC; - - // Initialize SoftDevice. - SOFTDEVICE_HANDLER_INIT(&clock_lf_cfg, _softdevice_evt_schedule); - - // Fetch the start address of the application RAM. - uint32_t ram_start = 0; - err_code = softdevice_app_ram_start_get(&ram_start); - APP_ERROR_CHECK(err_code); - - // Overwrite some of the default configurations for the BLE stack. - ble_cfg_t ble_cfg; - - // Configure the maximum number of connections. - memset(&ble_cfg, 0, sizeof(ble_cfg)); - ble_cfg.gap_cfg.role_count_cfg.periph_role_count = BLE_GAP_ROLE_COUNT_PERIPH_DEFAULT; - ble_cfg.gap_cfg.role_count_cfg.central_role_count = 0; - ble_cfg.gap_cfg.role_count_cfg.central_sec_count = 0; - err_code = sd_ble_cfg_set(BLE_GAP_CFG_ROLE_COUNT, &ble_cfg, ram_start); - APP_ERROR_CHECK(err_code); - - // Configure the maximum ATT MTU. - memset(&ble_cfg, 0x00, sizeof(ble_cfg)); - ble_cfg.conn_cfg.conn_cfg_tag = CONN_CFG_TAG; - ble_cfg.conn_cfg.params.gatt_conn_cfg.att_mtu = NRF_BLE_GATT_MAX_MTU_SIZE; - err_code = sd_ble_cfg_set(BLE_CONN_CFG_GATT, &ble_cfg, ram_start); - APP_ERROR_CHECK(err_code); - - // Configure the maximum event length. - memset(&ble_cfg, 0x00, sizeof(ble_cfg)); - ble_cfg.conn_cfg.conn_cfg_tag = CONN_CFG_TAG; - ble_cfg.conn_cfg.params.gap_conn_cfg.event_length = 320; - ble_cfg.conn_cfg.params.gap_conn_cfg.conn_count = BLE_GAP_CONN_COUNT_DEFAULT; - err_code = sd_ble_cfg_set(BLE_CONN_CFG_GAP, &ble_cfg, ram_start); - APP_ERROR_CHECK(err_code); - - // Enable BLE stack. - err_code = softdevice_enable(&ram_start); - APP_ERROR_CHECK(err_code); - - // Subscribe for BLE events. - err_code = softdevice_ble_evt_handler_set(ble_evt_dispatch); - APP_ERROR_CHECK(err_code); -} - -/**@brief Function for handling events from the GATT library. */ -static void gatt_evt_handler(nrf_ble_gatt_t * p_gatt, const nrf_ble_gatt_evt_t * p_evt) -{ - if ((m_conn_handle == p_evt->conn_handle) && (p_evt->evt_id == NRF_BLE_GATT_EVT_ATT_MTU_UPDATED)) - { - m_ble_nus_max_data_len = p_evt->params.att_mtu_effective - OPCODE_LENGTH - HANDLE_LENGTH; - rt_kprintf("Data len is set to 0x%X(%d)\r\n", m_ble_nus_max_data_len, m_ble_nus_max_data_len); - } - rt_kprintf("ATT MTU exchange completed. central 0x%x peripheral 0x%x\r\n", p_gatt->att_mtu_desired_central, p_gatt->att_mtu_desired_periph); -} - -/**@brief Function for initializing the GATT library. */ -static void gatt_init(void) -{ - ret_code_t err_code; - - err_code = nrf_ble_gatt_init(&m_gatt, gatt_evt_handler); - APP_ERROR_CHECK(err_code); - - err_code = nrf_ble_gatt_att_mtu_periph_set(&m_gatt, 64); - APP_ERROR_CHECK(err_code); -} - -/**@brief Function for initializing the Advertising functionality. - */ -static void advertising_init(void) -{ - uint32_t err_code; - ble_advdata_t advdata; - ble_advdata_t scanrsp; - ble_adv_modes_config_t options; - - // Build advertising data struct to pass into @ref ble_advertising_init. - memset(&advdata, 0, sizeof(advdata)); - advdata.name_type = BLE_ADVDATA_FULL_NAME; - advdata.include_appearance = false; - advdata.flags = BLE_GAP_ADV_FLAGS_LE_ONLY_LIMITED_DISC_MODE; - - memset(&scanrsp, 0, sizeof(scanrsp)); - scanrsp.uuids_complete.uuid_cnt = sizeof(m_adv_uuids) / sizeof(m_adv_uuids[0]); - scanrsp.uuids_complete.p_uuids = m_adv_uuids; - - memset(&options, 0, sizeof(options)); - options.ble_adv_fast_enabled = true; - options.ble_adv_fast_interval = APP_ADV_INTERVAL; - options.ble_adv_fast_timeout = APP_ADV_TIMEOUT_IN_SECONDS; - - err_code = ble_advertising_init(&advdata, &scanrsp, &options, on_adv_evt, NULL); - APP_ERROR_CHECK(err_code); - - ble_advertising_conn_cfg_tag_set(CONN_CFG_TAG); -} - -/**@brief Function for handling app_uart events. - * - * @details This function will receive a single character from the app_uart module and append it to - * a string. The string will be be sent over BLE when the last character received was a - * 'new line' '\n' (hex 0x0A) or if the string has reached the maximum data length. - */ -/**@snippet [Handling the data received over UART] */ -void uart_event_handle(rt_device_t uart) -{ - uint8_t data_array[BLE_NUS_MAX_DATA_LEN]; - rt_size_t size = 0; - uint32_t err_code; - - size = rt_device_read(uart, 0, data_array, BLE_NUS_MAX_DATA_LEN); - - if (size <= 0) - { - return; - } - - do - { - err_code = ble_nus_string_send(&m_nus, data_array, size); - if ( (err_code != NRF_ERROR_INVALID_STATE) && (err_code != NRF_ERROR_BUSY) ) - { - APP_ERROR_CHECK(err_code); - } - } while (err_code == NRF_ERROR_BUSY); -} -/**@snippet [Handling the data received over UART] */ - -/**@brief Function for initializing the UART module. - */ -/**@snippet [UART Initialization] */ -static rt_bool_t _stack_init(void) -{ - uint32_t err_code; - - stack_event = rt_event_create("stackev", RT_IPC_FLAG_FIFO); - sd_evt_sem = rt_sem_create("sdsem", 0, RT_IPC_FLAG_FIFO); - stack_evt_mq = rt_mq_create("stackmq", BLE_STACK_EVT_MSG_BUF_SIZE, STACK_EVT_MQ_NUM, RT_IPC_FLAG_FIFO); - evt_sample = rt_malloc(BLE_STACK_EVT_MSG_BUF_SIZE); - - if (!stack_event || !sd_evt_sem || !stack_evt_mq || !evt_sample) - { - rt_kprintf("uart rx sem create failure\n"); - return RT_FALSE; - } - - // Initialize. - err_code = app_timer_init(); - APP_ERROR_CHECK(err_code); - - ble_stack_init(); - gap_params_init(); - gatt_init(); - services_init(); - advertising_init(); - conn_params_init(); - - return RT_TRUE; -} - -/**@brief Application main function. - */ -static void _stack_thread(void *parameter) -{ - rt_tick_t next_timeout = (rt_tick_t)RT_WAITING_FOREVER; - - FAST_ADV(); - // Enter main loop. - for (;;) - { - rt_uint32_t event = 0; - rt_tick_t dispatch_timeout = RT_WAITING_NO; - - rt_event_recv(stack_event, STACK_EV_DISCON | STACK_EV_DISPATCH | STACK_EV_KEY, - RT_EVENT_FLAG_OR | RT_EVENT_FLAG_CLEAR, next_timeout, &event); - - if (evt_dispatch_worker() != RT_EOK) - { - dispatch_timeout = (rt_tick_t)RT_WAITING_FOREVER; - } - - if (event & STACK_EV_DISCON) - { - if (BLE_CONN_HANDLE_INVALID != m_conn_handle) - { - sd_ble_gap_disconnect(m_conn_handle, BLE_HCI_REMOTE_USER_TERMINATED_CONNECTION); - } - } - - if (event & STACK_EV_KEY) - { - if (stack_state != STACK_STATE_CON && stack_state != STACK_STATE_ADV) - { - FAST_ADV(); - } - } - - next_timeout = (rt_tick_t)RT_WAITING_FOREVER; - - if (dispatch_timeout < next_timeout) - { - next_timeout = dispatch_timeout; - } - } -} - -static void _softdevice_thread(void* parameter) -{ - for (;;) - { - rt_sem_take(sd_evt_sem, RT_WAITING_FOREVER); - intern_softdevice_events_execute(); - } -} - -rt_err_t ble_init(void) -{ - rt_thread_t thread; - - _stack_init(); - - thread = rt_thread_create("sdth", _softdevice_thread, RT_NULL, 512, 0, 10); - - if (thread != RT_NULL) - { - rt_thread_startup(thread); - } - else - { - return RT_ERROR; - } - - thread = rt_thread_create("bleth", _stack_thread, RT_NULL, 2048, 1, 10); - - if (thread != RT_NULL) - { - return rt_thread_startup(thread); - } - - return RT_ERROR; -} diff --git a/bsp/nrf5x/nrf52832/applications/sdk_config.h b/bsp/nrf5x/nrf52832/applications/sdk_config.h deleted file mode 100644 index 72abeeed7c..0000000000 --- a/bsp/nrf5x/nrf52832/applications/sdk_config.h +++ /dev/null @@ -1,3991 +0,0 @@ - - -#ifndef SDK_CONFIG_H -#define SDK_CONFIG_H -// <<< Use Configuration Wizard in Context Menu >>>\n -#ifdef USE_APP_CONFIG -#include "app_config.h" -#endif -// nRF_BLE - -//========================================================== -// BLE_ADVERTISING_ENABLED - ble_advertising - Advertising module - - -#ifndef BLE_ADVERTISING_ENABLED -#define BLE_ADVERTISING_ENABLED 1 -#endif - -// BLE_DTM_ENABLED - ble_dtm - Module for testing RF/PHY using DTM commands - - -#ifndef BLE_DTM_ENABLED -#define BLE_DTM_ENABLED 0 -#endif - -// BLE_RACP_ENABLED - ble_racp - Record Access Control Point library - - -#ifndef BLE_RACP_ENABLED -#define BLE_RACP_ENABLED 0 -#endif - -// NRF_BLE_GATT_ENABLED - nrf_ble_gatt - GATT module -//========================================================== -#ifndef NRF_BLE_GATT_ENABLED -#define NRF_BLE_GATT_ENABLED 1 -#endif -#if NRF_BLE_GATT_ENABLED -// NRF_BLE_GATT_MAX_MTU_SIZE - Static maximum MTU size that is passed to the @ref sd_ble_enable function. -#ifndef NRF_BLE_GATT_MAX_MTU_SIZE -#define NRF_BLE_GATT_MAX_MTU_SIZE 158 -#endif - -#endif //NRF_BLE_GATT_ENABLED -// - -// NRF_BLE_QWR_ENABLED - nrf_ble_qwr - Queued writes support module (prepare/execute write) - - -#ifndef NRF_BLE_QWR_ENABLED -#define NRF_BLE_QWR_ENABLED 0 -#endif - -// PEER_MANAGER_ENABLED - peer_manager - Peer Manager - - -#ifndef PEER_MANAGER_ENABLED -#define PEER_MANAGER_ENABLED 0 -#endif - -// -//========================================================== - -// nRF_BLE_Services - -//========================================================== -// BLE_ANCS_C_ENABLED - ble_ancs_c - Apple Notification Service Client - - -#ifndef BLE_ANCS_C_ENABLED -#define BLE_ANCS_C_ENABLED 0 -#endif - -// BLE_ANS_C_ENABLED - ble_ans_c - Alert Notification Service Client - - -#ifndef BLE_ANS_C_ENABLED -#define BLE_ANS_C_ENABLED 0 -#endif - -// BLE_BAS_C_ENABLED - ble_bas_c - Battery Service Client - - -#ifndef BLE_BAS_C_ENABLED -#define BLE_BAS_C_ENABLED 0 -#endif - -// BLE_BAS_ENABLED - ble_bas - Battery Service - - -#ifndef BLE_BAS_ENABLED -#define BLE_BAS_ENABLED 0 -#endif - -// BLE_CSCS_ENABLED - ble_cscs - Cycling Speed and Cadence Service - - -#ifndef BLE_CSCS_ENABLED -#define BLE_CSCS_ENABLED 0 -#endif - -// BLE_CTS_C_ENABLED - ble_cts_c - Current Time Service Client - - -#ifndef BLE_CTS_C_ENABLED -#define BLE_CTS_C_ENABLED 0 -#endif - -// BLE_DIS_ENABLED - ble_dis - Device Information Service - - -#ifndef BLE_DIS_ENABLED -#define BLE_DIS_ENABLED 0 -#endif - -// BLE_GLS_ENABLED - ble_gls - Glucose Service - - -#ifndef BLE_GLS_ENABLED -#define BLE_GLS_ENABLED 0 -#endif - -// BLE_HIDS_ENABLED - ble_hids - Human Interface Device Service - - -#ifndef BLE_HIDS_ENABLED -#define BLE_HIDS_ENABLED 0 -#endif - -// BLE_HRS_C_ENABLED - ble_hrs_c - Heart Rate Service Client -//========================================================== -#ifndef BLE_HRS_C_ENABLED -#define BLE_HRS_C_ENABLED 0 -#endif -#if BLE_HRS_C_ENABLED -// BLE_HRS_C_RR_INTERVALS_MAX_CNT - Maximum number of RR_INTERVALS per notification to be decoded -#ifndef BLE_HRS_C_RR_INTERVALS_MAX_CNT -#define BLE_HRS_C_RR_INTERVALS_MAX_CNT 30 -#endif - -#endif //BLE_HRS_C_ENABLED -// - -// BLE_HRS_ENABLED - ble_hrs - Heart Rate Service - - -#ifndef BLE_HRS_ENABLED -#define BLE_HRS_ENABLED 0 -#endif - -// BLE_HTS_ENABLED - ble_hts - Health Thermometer Service - - -#ifndef BLE_HTS_ENABLED -#define BLE_HTS_ENABLED 0 -#endif - -// BLE_IAS_C_ENABLED - ble_ias_c - Immediate Alert Service Client - - -#ifndef BLE_IAS_C_ENABLED -#define BLE_IAS_C_ENABLED 0 -#endif - -// BLE_IAS_ENABLED - ble_ias - Immediate Alert Service - - -#ifndef BLE_IAS_ENABLED -#define BLE_IAS_ENABLED 0 -#endif - -// BLE_LBS_C_ENABLED - ble_lbs_c - Nordic LED Button Service Client - - -#ifndef BLE_LBS_C_ENABLED -#define BLE_LBS_C_ENABLED 0 -#endif - -// BLE_LBS_ENABLED - ble_lbs - LED Button Service - - -#ifndef BLE_LBS_ENABLED -#define BLE_LBS_ENABLED 0 -#endif - -// BLE_LLS_ENABLED - ble_lls - Link Loss Service - - -#ifndef BLE_LLS_ENABLED -#define BLE_LLS_ENABLED 0 -#endif - -// BLE_NUS_C_ENABLED - ble_nus_c - Nordic UART Central Service - - -#ifndef BLE_NUS_C_ENABLED -#define BLE_NUS_C_ENABLED 0 -#endif - -// BLE_NUS_ENABLED - ble_nus - Nordic UART Service - - -#ifndef BLE_NUS_ENABLED -#define BLE_NUS_ENABLED 1 -#endif - -// BLE_RSCS_C_ENABLED - ble_rscs_c - Running Speed and Cadence Client - - -#ifndef BLE_RSCS_C_ENABLED -#define BLE_RSCS_C_ENABLED 0 -#endif - -// BLE_RSCS_ENABLED - ble_rscs - Running Speed and Cadence Service - - -#ifndef BLE_RSCS_ENABLED -#define BLE_RSCS_ENABLED 0 -#endif - -// BLE_TPS_ENABLED - ble_tps - TX Power Service - - -#ifndef BLE_TPS_ENABLED -#define BLE_TPS_ENABLED 0 -#endif - -// -//========================================================== - -// nRF_Drivers - -//========================================================== -// APP_USBD_ENABLED - app_usbd - USB Device library -//========================================================== -#ifndef APP_USBD_ENABLED -#define APP_USBD_ENABLED 0 -#endif -#if APP_USBD_ENABLED -// APP_USBD_VID - Vendor ID <0x0000-0xFFFF> - - -// Vendor ID ordered from USB IF: http://www.usb.org/developers/vendor/ - -#ifndef APP_USBD_VID -#define APP_USBD_VID 0 -#endif - -// APP_USBD_PID - Product ID <0x0000-0xFFFF> - - -// Selected Product ID - -#ifndef APP_USBD_PID -#define APP_USBD_PID 0 -#endif - -// APP_USBD_DEVICE_VER_MAJOR - Device version, major part <0-99> - - -// Device version, will be converted automatically to BCD notation. Use just decimal values. - -#ifndef APP_USBD_DEVICE_VER_MAJOR -#define APP_USBD_DEVICE_VER_MAJOR 1 -#endif - -// APP_USBD_DEVICE_VER_MINOR - Device version, minor part <0-99> - - -// Device version, will be converted automatically to BCD notation. Use just decimal values. - -#ifndef APP_USBD_DEVICE_VER_MINOR -#define APP_USBD_DEVICE_VER_MINOR 0 -#endif - -#endif //APP_USBD_ENABLED -// - -// CLOCK_ENABLED - nrf_drv_clock - CLOCK peripheral driver -//========================================================== -#ifndef CLOCK_ENABLED -#define CLOCK_ENABLED 1 -#endif -#if CLOCK_ENABLED -// CLOCK_CONFIG_XTAL_FREQ - HF XTAL Frequency - -// <0=> Default (64 MHz) - -#ifndef CLOCK_CONFIG_XTAL_FREQ -#define CLOCK_CONFIG_XTAL_FREQ 0 -#endif - -// CLOCK_CONFIG_LF_SRC - LF Clock Source - -// <0=> RC -// <1=> XTAL -// <2=> Synth - -#ifndef CLOCK_CONFIG_LF_SRC -#define CLOCK_CONFIG_LF_SRC 1 -#endif - -// CLOCK_CONFIG_IRQ_PRIORITY - Interrupt priority - - -// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 - -#ifndef CLOCK_CONFIG_IRQ_PRIORITY -#define CLOCK_CONFIG_IRQ_PRIORITY 7 -#endif - -// CLOCK_CONFIG_LOG_ENABLED - Enables logging in the module. -//========================================================== -#ifndef CLOCK_CONFIG_LOG_ENABLED -#define CLOCK_CONFIG_LOG_ENABLED 0 -#endif -#if CLOCK_CONFIG_LOG_ENABLED -// CLOCK_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug - -#ifndef CLOCK_CONFIG_LOG_LEVEL -#define CLOCK_CONFIG_LOG_LEVEL 3 -#endif - -// CLOCK_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef CLOCK_CONFIG_INFO_COLOR -#define CLOCK_CONFIG_INFO_COLOR 0 -#endif - -// CLOCK_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef CLOCK_CONFIG_DEBUG_COLOR -#define CLOCK_CONFIG_DEBUG_COLOR 0 -#endif - -#endif //CLOCK_CONFIG_LOG_ENABLED -// - -#endif //CLOCK_ENABLED -// - -// COMP_ENABLED - nrf_drv_comp - COMP peripheral driver -//========================================================== -#ifndef COMP_ENABLED -#define COMP_ENABLED 0 -#endif -#if COMP_ENABLED -// COMP_CONFIG_REF - Reference voltage - -// <0=> Internal 1.2V -// <1=> Internal 1.8V -// <2=> Internal 2.4V -// <4=> VDD -// <7=> ARef - -#ifndef COMP_CONFIG_REF -#define COMP_CONFIG_REF 1 -#endif - -// COMP_CONFIG_MAIN_MODE - Main mode - -// <0=> Single ended -// <1=> Differential - -#ifndef COMP_CONFIG_MAIN_MODE -#define COMP_CONFIG_MAIN_MODE 0 -#endif - -// COMP_CONFIG_SPEED_MODE - Speed mode - -// <0=> Low power -// <1=> Normal -// <2=> High speed - -#ifndef COMP_CONFIG_SPEED_MODE -#define COMP_CONFIG_SPEED_MODE 2 -#endif - -// COMP_CONFIG_HYST - Hystheresis - -// <0=> No -// <1=> 50mV - -#ifndef COMP_CONFIG_HYST -#define COMP_CONFIG_HYST 0 -#endif - -// COMP_CONFIG_ISOURCE - Current Source - -// <0=> Off -// <1=> 2.5 uA -// <2=> 5 uA -// <3=> 10 uA - -#ifndef COMP_CONFIG_ISOURCE -#define COMP_CONFIG_ISOURCE 0 -#endif - -// COMP_CONFIG_INPUT - Analog input - -// <0=> 0 -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 - -#ifndef COMP_CONFIG_INPUT -#define COMP_CONFIG_INPUT 0 -#endif - -// COMP_CONFIG_IRQ_PRIORITY - Interrupt priority - - -// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 - -#ifndef COMP_CONFIG_IRQ_PRIORITY -#define COMP_CONFIG_IRQ_PRIORITY 7 -#endif - -// COMP_CONFIG_LOG_ENABLED - Enables logging in the module. -//========================================================== -#ifndef COMP_CONFIG_LOG_ENABLED -#define COMP_CONFIG_LOG_ENABLED 0 -#endif -#if COMP_CONFIG_LOG_ENABLED -// COMP_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug - -#ifndef COMP_CONFIG_LOG_LEVEL -#define COMP_CONFIG_LOG_LEVEL 3 -#endif - -// COMP_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef COMP_CONFIG_INFO_COLOR -#define COMP_CONFIG_INFO_COLOR 0 -#endif - -// COMP_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef COMP_CONFIG_DEBUG_COLOR -#define COMP_CONFIG_DEBUG_COLOR 0 -#endif - -#endif //COMP_CONFIG_LOG_ENABLED -// - -#endif //COMP_ENABLED -// - -// EGU_ENABLED - nrf_drv_swi - SWI(EGU) peripheral driver -//========================================================== -#ifndef EGU_ENABLED -#define EGU_ENABLED 0 -#endif -#if EGU_ENABLED -// SWI_CONFIG_LOG_ENABLED - Enables logging in the module. -//========================================================== -#ifndef SWI_CONFIG_LOG_ENABLED -#define SWI_CONFIG_LOG_ENABLED 0 -#endif -#if SWI_CONFIG_LOG_ENABLED -// SWI_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug - -#ifndef SWI_CONFIG_LOG_LEVEL -#define SWI_CONFIG_LOG_LEVEL 3 -#endif - -// SWI_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef SWI_CONFIG_INFO_COLOR -#define SWI_CONFIG_INFO_COLOR 0 -#endif - -// SWI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef SWI_CONFIG_DEBUG_COLOR -#define SWI_CONFIG_DEBUG_COLOR 0 -#endif - -#endif //SWI_CONFIG_LOG_ENABLED -// - -#endif //EGU_ENABLED -// - -// GPIOTE_ENABLED - nrf_drv_gpiote - GPIOTE peripheral driver -//========================================================== -#ifndef GPIOTE_ENABLED -#define GPIOTE_ENABLED 1 -#endif -#if GPIOTE_ENABLED -// GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS - Number of lower power input pins -#ifndef GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS -#define GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS 4 -#endif - -// GPIOTE_CONFIG_IRQ_PRIORITY - Interrupt priority - - -// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 - -#ifndef GPIOTE_CONFIG_IRQ_PRIORITY -#define GPIOTE_CONFIG_IRQ_PRIORITY 7 -#endif - -// GPIOTE_CONFIG_LOG_ENABLED - Enables logging in the module. -//========================================================== -#ifndef GPIOTE_CONFIG_LOG_ENABLED -#define GPIOTE_CONFIG_LOG_ENABLED 0 -#endif -#if GPIOTE_CONFIG_LOG_ENABLED -// GPIOTE_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug - -#ifndef GPIOTE_CONFIG_LOG_LEVEL -#define GPIOTE_CONFIG_LOG_LEVEL 3 -#endif - -// GPIOTE_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef GPIOTE_CONFIG_INFO_COLOR -#define GPIOTE_CONFIG_INFO_COLOR 0 -#endif - -// GPIOTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef GPIOTE_CONFIG_DEBUG_COLOR -#define GPIOTE_CONFIG_DEBUG_COLOR 0 -#endif - -#endif //GPIOTE_CONFIG_LOG_ENABLED -// - -#endif //GPIOTE_ENABLED -// - -// I2S_ENABLED - nrf_drv_i2s - I2S peripheral driver -//========================================================== -#ifndef I2S_ENABLED -#define I2S_ENABLED 0 -#endif -#if I2S_ENABLED -// I2S_CONFIG_SCK_PIN - SCK pin <0-31> - - -#ifndef I2S_CONFIG_SCK_PIN -#define I2S_CONFIG_SCK_PIN 31 -#endif - -// I2S_CONFIG_LRCK_PIN - LRCK pin <1-31> - - -#ifndef I2S_CONFIG_LRCK_PIN -#define I2S_CONFIG_LRCK_PIN 30 -#endif - -// I2S_CONFIG_MCK_PIN - MCK pin -#ifndef I2S_CONFIG_MCK_PIN -#define I2S_CONFIG_MCK_PIN 255 -#endif - -// I2S_CONFIG_SDOUT_PIN - SDOUT pin <0-31> - - -#ifndef I2S_CONFIG_SDOUT_PIN -#define I2S_CONFIG_SDOUT_PIN 29 -#endif - -// I2S_CONFIG_SDIN_PIN - SDIN pin <0-31> - - -#ifndef I2S_CONFIG_SDIN_PIN -#define I2S_CONFIG_SDIN_PIN 28 -#endif - -// I2S_CONFIG_MASTER - Mode - -// <0=> Master -// <1=> Slave - -#ifndef I2S_CONFIG_MASTER -#define I2S_CONFIG_MASTER 0 -#endif - -// I2S_CONFIG_FORMAT - Format - -// <0=> I2S -// <1=> Aligned - -#ifndef I2S_CONFIG_FORMAT -#define I2S_CONFIG_FORMAT 0 -#endif - -// I2S_CONFIG_ALIGN - Alignment - -// <0=> Left -// <1=> Right - -#ifndef I2S_CONFIG_ALIGN -#define I2S_CONFIG_ALIGN 0 -#endif - -// I2S_CONFIG_SWIDTH - Sample width (bits) - -// <0=> 8 -// <1=> 16 -// <2=> 24 - -#ifndef I2S_CONFIG_SWIDTH -#define I2S_CONFIG_SWIDTH 1 -#endif - -// I2S_CONFIG_CHANNELS - Channels - -// <0=> Stereo -// <1=> Left -// <2=> Right - -#ifndef I2S_CONFIG_CHANNELS -#define I2S_CONFIG_CHANNELS 1 -#endif - -// I2S_CONFIG_MCK_SETUP - MCK behavior - -// <0=> Disabled -// <2147483648=> 32MHz/2 -// <1342177280=> 32MHz/3 -// <1073741824=> 32MHz/4 -// <805306368=> 32MHz/5 -// <671088640=> 32MHz/6 -// <536870912=> 32MHz/8 -// <402653184=> 32MHz/10 -// <369098752=> 32MHz/11 -// <285212672=> 32MHz/15 -// <268435456=> 32MHz/16 -// <201326592=> 32MHz/21 -// <184549376=> 32MHz/23 -// <142606336=> 32MHz/30 -// <138412032=> 32MHz/31 -// <134217728=> 32MHz/32 -// <100663296=> 32MHz/42 -// <68157440=> 32MHz/63 -// <34340864=> 32MHz/125 - -#ifndef I2S_CONFIG_MCK_SETUP -#define I2S_CONFIG_MCK_SETUP 536870912 -#endif - -// I2S_CONFIG_RATIO - MCK/LRCK ratio - -// <0=> 32x -// <1=> 48x -// <2=> 64x -// <3=> 96x -// <4=> 128x -// <5=> 192x -// <6=> 256x -// <7=> 384x -// <8=> 512x - -#ifndef I2S_CONFIG_RATIO -#define I2S_CONFIG_RATIO 2000 -#endif - -// I2S_CONFIG_IRQ_PRIORITY - Interrupt priority - - -// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 - -#ifndef I2S_CONFIG_IRQ_PRIORITY -#define I2S_CONFIG_IRQ_PRIORITY 7 -#endif - -// I2S_CONFIG_LOG_ENABLED - Enables logging in the module. -//========================================================== -#ifndef I2S_CONFIG_LOG_ENABLED -#define I2S_CONFIG_LOG_ENABLED 0 -#endif -#if I2S_CONFIG_LOG_ENABLED -// I2S_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug - -#ifndef I2S_CONFIG_LOG_LEVEL -#define I2S_CONFIG_LOG_LEVEL 3 -#endif - -// I2S_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef I2S_CONFIG_INFO_COLOR -#define I2S_CONFIG_INFO_COLOR 0 -#endif - -// I2S_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef I2S_CONFIG_DEBUG_COLOR -#define I2S_CONFIG_DEBUG_COLOR 0 -#endif - -#endif //I2S_CONFIG_LOG_ENABLED -// - -#endif //I2S_ENABLED -// - -// LPCOMP_ENABLED - nrf_drv_lpcomp - LPCOMP peripheral driver -//========================================================== -#ifndef LPCOMP_ENABLED -#define LPCOMP_ENABLED 0 -#endif -#if LPCOMP_ENABLED -// LPCOMP_CONFIG_REFERENCE - Reference voltage - -// <0=> Supply 1/8 -// <1=> Supply 2/8 -// <2=> Supply 3/8 -// <3=> Supply 4/8 -// <4=> Supply 5/8 -// <5=> Supply 6/8 -// <6=> Supply 7/8 -// <8=> Supply 1/16 (nRF52) -// <9=> Supply 3/16 (nRF52) -// <10=> Supply 5/16 (nRF52) -// <11=> Supply 7/16 (nRF52) -// <12=> Supply 9/16 (nRF52) -// <13=> Supply 11/16 (nRF52) -// <14=> Supply 13/16 (nRF52) -// <15=> Supply 15/16 (nRF52) -// <7=> External Ref 0 -// <65543=> External Ref 1 - -#ifndef LPCOMP_CONFIG_REFERENCE -#define LPCOMP_CONFIG_REFERENCE 3 -#endif - -// LPCOMP_CONFIG_DETECTION - Detection - -// <0=> Crossing -// <1=> Up -// <2=> Down - -#ifndef LPCOMP_CONFIG_DETECTION -#define LPCOMP_CONFIG_DETECTION 2 -#endif - -// LPCOMP_CONFIG_INPUT - Analog input - -// <0=> 0 -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 - -#ifndef LPCOMP_CONFIG_INPUT -#define LPCOMP_CONFIG_INPUT 0 -#endif - -// LPCOMP_CONFIG_HYST - Hysteresis - - -#ifndef LPCOMP_CONFIG_HYST -#define LPCOMP_CONFIG_HYST 0 -#endif - -// LPCOMP_CONFIG_IRQ_PRIORITY - Interrupt priority - - -// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 - -#ifndef LPCOMP_CONFIG_IRQ_PRIORITY -#define LPCOMP_CONFIG_IRQ_PRIORITY 7 -#endif - -// LPCOMP_CONFIG_LOG_ENABLED - Enables logging in the module. -//========================================================== -#ifndef LPCOMP_CONFIG_LOG_ENABLED -#define LPCOMP_CONFIG_LOG_ENABLED 0 -#endif -#if LPCOMP_CONFIG_LOG_ENABLED -// LPCOMP_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug - -#ifndef LPCOMP_CONFIG_LOG_LEVEL -#define LPCOMP_CONFIG_LOG_LEVEL 3 -#endif - -// LPCOMP_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef LPCOMP_CONFIG_INFO_COLOR -#define LPCOMP_CONFIG_INFO_COLOR 0 -#endif - -// LPCOMP_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef LPCOMP_CONFIG_DEBUG_COLOR -#define LPCOMP_CONFIG_DEBUG_COLOR 0 -#endif - -#endif //LPCOMP_CONFIG_LOG_ENABLED -// - -#endif //LPCOMP_ENABLED -// - -// PDM_ENABLED - nrf_drv_pdm - PDM peripheral driver -//========================================================== -#ifndef PDM_ENABLED -#define PDM_ENABLED 0 -#endif -#if PDM_ENABLED -// PDM_CONFIG_MODE - Mode - -// <0=> Stereo -// <1=> Mono - -#ifndef PDM_CONFIG_MODE -#define PDM_CONFIG_MODE 1 -#endif - -// PDM_CONFIG_EDGE - Edge - -// <0=> Left falling -// <1=> Left rising - -#ifndef PDM_CONFIG_EDGE -#define PDM_CONFIG_EDGE 0 -#endif - -// PDM_CONFIG_CLOCK_FREQ - Clock frequency - -// <134217728=> 1000k -// <138412032=> 1032k (default) -// <142606336=> 1067k - -#ifndef PDM_CONFIG_CLOCK_FREQ -#define PDM_CONFIG_CLOCK_FREQ 138412032 -#endif - -// PDM_CONFIG_IRQ_PRIORITY - Interrupt priority - - -// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 - -#ifndef PDM_CONFIG_IRQ_PRIORITY -#define PDM_CONFIG_IRQ_PRIORITY 7 -#endif - -// PDM_CONFIG_LOG_ENABLED - Enables logging in the module. -//========================================================== -#ifndef PDM_CONFIG_LOG_ENABLED -#define PDM_CONFIG_LOG_ENABLED 0 -#endif -#if PDM_CONFIG_LOG_ENABLED -// PDM_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug - -#ifndef PDM_CONFIG_LOG_LEVEL -#define PDM_CONFIG_LOG_LEVEL 3 -#endif - -// PDM_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef PDM_CONFIG_INFO_COLOR -#define PDM_CONFIG_INFO_COLOR 0 -#endif - -// PDM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef PDM_CONFIG_DEBUG_COLOR -#define PDM_CONFIG_DEBUG_COLOR 0 -#endif - -#endif //PDM_CONFIG_LOG_ENABLED -// - -#endif //PDM_ENABLED -// - -// PERIPHERAL_RESOURCE_SHARING_ENABLED - nrf_drv_common - Peripheral drivers common module -//========================================================== -#ifndef PERIPHERAL_RESOURCE_SHARING_ENABLED -#define PERIPHERAL_RESOURCE_SHARING_ENABLED 0 -#endif -#if PERIPHERAL_RESOURCE_SHARING_ENABLED -// COMMON_CONFIG_LOG_ENABLED - Enables logging in the module. -//========================================================== -#ifndef COMMON_CONFIG_LOG_ENABLED -#define COMMON_CONFIG_LOG_ENABLED 0 -#endif -#if COMMON_CONFIG_LOG_ENABLED -// COMMON_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug - -#ifndef COMMON_CONFIG_LOG_LEVEL -#define COMMON_CONFIG_LOG_LEVEL 3 -#endif - -// COMMON_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef COMMON_CONFIG_INFO_COLOR -#define COMMON_CONFIG_INFO_COLOR 0 -#endif - -// COMMON_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef COMMON_CONFIG_DEBUG_COLOR -#define COMMON_CONFIG_DEBUG_COLOR 0 -#endif - -#endif //COMMON_CONFIG_LOG_ENABLED -// - -#endif //PERIPHERAL_RESOURCE_SHARING_ENABLED -// - -// POWER_ENABLED - nrf_drv_power - POWER peripheral driver -//========================================================== -#ifndef POWER_ENABLED -#define POWER_ENABLED 0 -#endif -#if POWER_ENABLED -// POWER_CONFIG_IRQ_PRIORITY - Interrupt priority - - -// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 - -#ifndef POWER_CONFIG_IRQ_PRIORITY -#define POWER_CONFIG_IRQ_PRIORITY 7 -#endif - -// POWER_CONFIG_DEFAULT_DCDCEN - The default configuration of main DCDC regulator - - -// This settings means only that components for DCDC regulator are installed and it can be enabled. - -#ifndef POWER_CONFIG_DEFAULT_DCDCEN -#define POWER_CONFIG_DEFAULT_DCDCEN 0 -#endif - -// POWER_CONFIG_DEFAULT_DCDCENHV - The default configuration of High Voltage DCDC regulator - - -// This settings means only that components for DCDC regulator are installed and it can be enabled. - -#ifndef POWER_CONFIG_DEFAULT_DCDCENHV -#define POWER_CONFIG_DEFAULT_DCDCENHV 0 -#endif - -#endif //POWER_ENABLED -// - -// PPI_ENABLED - nrf_drv_ppi - PPI peripheral driver -//========================================================== -#ifndef PPI_ENABLED -#define PPI_ENABLED 0 -#endif -#if PPI_ENABLED -// PPI_CONFIG_LOG_ENABLED - Enables logging in the module. -//========================================================== -#ifndef PPI_CONFIG_LOG_ENABLED -#define PPI_CONFIG_LOG_ENABLED 0 -#endif -#if PPI_CONFIG_LOG_ENABLED -// PPI_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug - -#ifndef PPI_CONFIG_LOG_LEVEL -#define PPI_CONFIG_LOG_LEVEL 3 -#endif - -// PPI_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef PPI_CONFIG_INFO_COLOR -#define PPI_CONFIG_INFO_COLOR 0 -#endif - -// PPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef PPI_CONFIG_DEBUG_COLOR -#define PPI_CONFIG_DEBUG_COLOR 0 -#endif - -#endif //PPI_CONFIG_LOG_ENABLED -// - -#endif //PPI_ENABLED -// - -// PWM_ENABLED - nrf_drv_pwm - PWM peripheral driver -//========================================================== -#ifndef PWM_ENABLED -#define PWM_ENABLED 1 -#endif -#if PWM_ENABLED -// PWM_DEFAULT_CONFIG_OUT0_PIN - Out0 pin <0-31> - - -#ifndef PWM_DEFAULT_CONFIG_OUT0_PIN -#define PWM_DEFAULT_CONFIG_OUT0_PIN 2 -#endif - -// PWM_DEFAULT_CONFIG_OUT1_PIN - Out1 pin <0-31> - - -#ifndef PWM_DEFAULT_CONFIG_OUT1_PIN -#define PWM_DEFAULT_CONFIG_OUT1_PIN 31 -#endif - -// PWM_DEFAULT_CONFIG_OUT2_PIN - Out2 pin <0-31> - - -#ifndef PWM_DEFAULT_CONFIG_OUT2_PIN -#define PWM_DEFAULT_CONFIG_OUT2_PIN 31 -#endif - -// PWM_DEFAULT_CONFIG_OUT3_PIN - Out3 pin <0-31> - - -#ifndef PWM_DEFAULT_CONFIG_OUT3_PIN -#define PWM_DEFAULT_CONFIG_OUT3_PIN 31 -#endif - -// PWM_DEFAULT_CONFIG_BASE_CLOCK - Base clock - -// <0=> 16 MHz -// <1=> 8 MHz -// <2=> 4 MHz -// <3=> 2 MHz -// <4=> 1 MHz -// <5=> 500 kHz -// <6=> 250 kHz -// <7=> 125 MHz - -#ifndef PWM_DEFAULT_CONFIG_BASE_CLOCK -#define PWM_DEFAULT_CONFIG_BASE_CLOCK 7 -#endif - -// PWM_DEFAULT_CONFIG_COUNT_MODE - Count mode - -// <0=> Up -// <1=> Up and Down - -#ifndef PWM_DEFAULT_CONFIG_COUNT_MODE -#define PWM_DEFAULT_CONFIG_COUNT_MODE 0 -#endif - -// PWM_DEFAULT_CONFIG_TOP_VALUE - Top value -#ifndef PWM_DEFAULT_CONFIG_TOP_VALUE -#define PWM_DEFAULT_CONFIG_TOP_VALUE 46 -#endif - -// PWM_DEFAULT_CONFIG_LOAD_MODE - Load mode - -// <0=> Common -// <1=> Grouped -// <2=> Individual -// <3=> Waveform - -#ifndef PWM_DEFAULT_CONFIG_LOAD_MODE -#define PWM_DEFAULT_CONFIG_LOAD_MODE 0 -#endif - -// PWM_DEFAULT_CONFIG_STEP_MODE - Step mode - -// <0=> Auto -// <1=> Triggered - -#ifndef PWM_DEFAULT_CONFIG_STEP_MODE -#define PWM_DEFAULT_CONFIG_STEP_MODE 0 -#endif - -// PWM_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority - - -// Priorities 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 - -#ifndef PWM_DEFAULT_CONFIG_IRQ_PRIORITY -#define PWM_DEFAULT_CONFIG_IRQ_PRIORITY 7 -#endif - -// PWM0_ENABLED - Enable PWM0 instance - - -#ifndef PWM0_ENABLED -#define PWM0_ENABLED 1 -#endif - -// PWM1_ENABLED - Enable PWM1 instance - - -#ifndef PWM1_ENABLED -#define PWM1_ENABLED 0 -#endif - -// PWM2_ENABLED - Enable PWM2 instance - - -#ifndef PWM2_ENABLED -#define PWM2_ENABLED 0 -#endif - -// PWM_CONFIG_LOG_ENABLED - Enables logging in the module. -//========================================================== -#ifndef PWM_CONFIG_LOG_ENABLED -#define PWM_CONFIG_LOG_ENABLED 0 -#endif -#if PWM_CONFIG_LOG_ENABLED -// PWM_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug - -#ifndef PWM_CONFIG_LOG_LEVEL -#define PWM_CONFIG_LOG_LEVEL 3 -#endif - -// PWM_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef PWM_CONFIG_INFO_COLOR -#define PWM_CONFIG_INFO_COLOR 0 -#endif - -// PWM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef PWM_CONFIG_DEBUG_COLOR -#define PWM_CONFIG_DEBUG_COLOR 0 -#endif - -#endif //PWM_CONFIG_LOG_ENABLED -// - -// PWM_NRF52_ANOMALY_109_WORKAROUND_ENABLED - Enables nRF52 Anomaly 109 workaround for PWM. - -// The workaround uses interrupts to wake up the CPU and ensure -// it is active when PWM is about to start a DMA transfer. For -// initial transfer, done when a playback is started via PPI, -// a specific EGU instance is used to generate the interrupt. -// During the playback, the PWM interrupt triggered on SEQEND -// event of a preceding sequence is used to protect the transfer -// done for the next sequence to be played. -//========================================================== -#ifndef PWM_NRF52_ANOMALY_109_WORKAROUND_ENABLED -#define PWM_NRF52_ANOMALY_109_WORKAROUND_ENABLED 0 -#endif -#if PWM_NRF52_ANOMALY_109_WORKAROUND_ENABLED -// PWM_NRF52_ANOMALY_109_EGU_INSTANCE - EGU instance used by the nRF52 Anomaly 109 workaround for PWM. - -// <0=> EGU0 -// <1=> EGU1 -// <2=> EGU2 -// <3=> EGU3 -// <4=> EGU4 -// <5=> EGU5 - -#ifndef PWM_NRF52_ANOMALY_109_EGU_INSTANCE -#define PWM_NRF52_ANOMALY_109_EGU_INSTANCE 5 -#endif - -#endif //PWM_NRF52_ANOMALY_109_WORKAROUND_ENABLED -// - -#endif //PWM_ENABLED -// - -// QDEC_ENABLED - nrf_drv_qdec - QDEC peripheral driver -//========================================================== -#ifndef QDEC_ENABLED -#define QDEC_ENABLED 0 -#endif -#if QDEC_ENABLED -// QDEC_CONFIG_REPORTPER - Report period - -// <0=> 10 Samples -// <1=> 40 Samples -// <2=> 80 Samples -// <3=> 120 Samples -// <4=> 160 Samples -// <5=> 200 Samples -// <6=> 240 Samples -// <7=> 280 Samples - -#ifndef QDEC_CONFIG_REPORTPER -#define QDEC_CONFIG_REPORTPER 0 -#endif - -// QDEC_CONFIG_SAMPLEPER - Sample period - -// <0=> 128 us -// <1=> 256 us -// <2=> 512 us -// <3=> 1024 us -// <4=> 2048 us -// <5=> 4096 us -// <6=> 8192 us -// <7=> 16384 us - -#ifndef QDEC_CONFIG_SAMPLEPER -#define QDEC_CONFIG_SAMPLEPER 7 -#endif - -// QDEC_CONFIG_PIO_A - A pin <0-31> - - -#ifndef QDEC_CONFIG_PIO_A -#define QDEC_CONFIG_PIO_A 31 -#endif - -// QDEC_CONFIG_PIO_B - B pin <0-31> - - -#ifndef QDEC_CONFIG_PIO_B -#define QDEC_CONFIG_PIO_B 31 -#endif - -// QDEC_CONFIG_PIO_LED - LED pin <0-31> - - -#ifndef QDEC_CONFIG_PIO_LED -#define QDEC_CONFIG_PIO_LED 31 -#endif - -// QDEC_CONFIG_LEDPRE - LED pre -#ifndef QDEC_CONFIG_LEDPRE -#define QDEC_CONFIG_LEDPRE 511 -#endif - -// QDEC_CONFIG_LEDPOL - LED polarity - -// <0=> Active low -// <1=> Active high - -#ifndef QDEC_CONFIG_LEDPOL -#define QDEC_CONFIG_LEDPOL 1 -#endif - -// QDEC_CONFIG_DBFEN - Debouncing enable - - -#ifndef QDEC_CONFIG_DBFEN -#define QDEC_CONFIG_DBFEN 0 -#endif - -// QDEC_CONFIG_SAMPLE_INTEN - Sample ready interrupt enable - - -#ifndef QDEC_CONFIG_SAMPLE_INTEN -#define QDEC_CONFIG_SAMPLE_INTEN 0 -#endif - -// QDEC_CONFIG_IRQ_PRIORITY - Interrupt priority - - -// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 - -#ifndef QDEC_CONFIG_IRQ_PRIORITY -#define QDEC_CONFIG_IRQ_PRIORITY 7 -#endif - -// QDEC_CONFIG_LOG_ENABLED - Enables logging in the module. -//========================================================== -#ifndef QDEC_CONFIG_LOG_ENABLED -#define QDEC_CONFIG_LOG_ENABLED 0 -#endif -#if QDEC_CONFIG_LOG_ENABLED -// QDEC_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug - -#ifndef QDEC_CONFIG_LOG_LEVEL -#define QDEC_CONFIG_LOG_LEVEL 3 -#endif - -// QDEC_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef QDEC_CONFIG_INFO_COLOR -#define QDEC_CONFIG_INFO_COLOR 0 -#endif - -// QDEC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef QDEC_CONFIG_DEBUG_COLOR -#define QDEC_CONFIG_DEBUG_COLOR 0 -#endif - -#endif //QDEC_CONFIG_LOG_ENABLED -// - -#endif //QDEC_ENABLED -// - -// RNG_ENABLED - nrf_drv_rng - RNG peripheral driver -//========================================================== -#ifndef RNG_ENABLED -#define RNG_ENABLED 0 -#endif -#if RNG_ENABLED -// RNG_CONFIG_ERROR_CORRECTION - Error correction - - -#ifndef RNG_CONFIG_ERROR_CORRECTION -#define RNG_CONFIG_ERROR_CORRECTION 0 -#endif - -// RNG_CONFIG_POOL_SIZE - Pool size -#ifndef RNG_CONFIG_POOL_SIZE -#define RNG_CONFIG_POOL_SIZE 32 -#endif - -// RNG_CONFIG_IRQ_PRIORITY - Interrupt priority - - -// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 - -#ifndef RNG_CONFIG_IRQ_PRIORITY -#define RNG_CONFIG_IRQ_PRIORITY 7 -#endif - -// RNG_CONFIG_LOG_ENABLED - Enables logging in the module. -//========================================================== -#ifndef RNG_CONFIG_LOG_ENABLED -#define RNG_CONFIG_LOG_ENABLED 0 -#endif -#if RNG_CONFIG_LOG_ENABLED -// RNG_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug - -#ifndef RNG_CONFIG_LOG_LEVEL -#define RNG_CONFIG_LOG_LEVEL 3 -#endif - -// RNG_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef RNG_CONFIG_INFO_COLOR -#define RNG_CONFIG_INFO_COLOR 0 -#endif - -// RNG_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef RNG_CONFIG_DEBUG_COLOR -#define RNG_CONFIG_DEBUG_COLOR 0 -#endif - -// RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED - Enables logging of random numbers. - - -#ifndef RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED -#define RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED 0 -#endif - -#endif //RNG_CONFIG_LOG_ENABLED -// - -#endif //RNG_ENABLED -// - -// RTC_ENABLED - nrf_drv_rtc - RTC peripheral driver -//========================================================== -#ifndef RTC_ENABLED -#define RTC_ENABLED 0 -#endif -#if RTC_ENABLED -// RTC_DEFAULT_CONFIG_FREQUENCY - Frequency <16-32768> - - -#ifndef RTC_DEFAULT_CONFIG_FREQUENCY -#define RTC_DEFAULT_CONFIG_FREQUENCY 32768 -#endif - -// RTC_DEFAULT_CONFIG_RELIABLE - Ensures safe compare event triggering - - -#ifndef RTC_DEFAULT_CONFIG_RELIABLE -#define RTC_DEFAULT_CONFIG_RELIABLE 0 -#endif - -// RTC_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority - - -// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 - -#ifndef RTC_DEFAULT_CONFIG_IRQ_PRIORITY -#define RTC_DEFAULT_CONFIG_IRQ_PRIORITY 7 -#endif - -// RTC0_ENABLED - Enable RTC0 instance - - -#ifndef RTC0_ENABLED -#define RTC0_ENABLED 0 -#endif - -// RTC1_ENABLED - Enable RTC1 instance - - -#ifndef RTC1_ENABLED -#define RTC1_ENABLED 0 -#endif - -// RTC2_ENABLED - Enable RTC2 instance - - -#ifndef RTC2_ENABLED -#define RTC2_ENABLED 0 -#endif - -// NRF_MAXIMUM_LATENCY_US - Maximum possible time[us] in highest priority interrupt -#ifndef NRF_MAXIMUM_LATENCY_US -#define NRF_MAXIMUM_LATENCY_US 2000 -#endif - -// RTC_CONFIG_LOG_ENABLED - Enables logging in the module. -//========================================================== -#ifndef RTC_CONFIG_LOG_ENABLED -#define RTC_CONFIG_LOG_ENABLED 0 -#endif -#if RTC_CONFIG_LOG_ENABLED -// RTC_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug - -#ifndef RTC_CONFIG_LOG_LEVEL -#define RTC_CONFIG_LOG_LEVEL 3 -#endif - -// RTC_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef RTC_CONFIG_INFO_COLOR -#define RTC_CONFIG_INFO_COLOR 0 -#endif - -// RTC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef RTC_CONFIG_DEBUG_COLOR -#define RTC_CONFIG_DEBUG_COLOR 0 -#endif - -#endif //RTC_CONFIG_LOG_ENABLED -// - -#endif //RTC_ENABLED -// - -// SAADC_ENABLED - nrf_drv_saadc - SAADC peripheral driver -//========================================================== -#ifndef SAADC_ENABLED -#define SAADC_ENABLED 1 -#endif -#if SAADC_ENABLED -// SAADC_CONFIG_RESOLUTION - Resolution - -// <0=> 8 bit -// <1=> 10 bit -// <2=> 12 bit -// <3=> 14 bit - -#ifndef SAADC_CONFIG_RESOLUTION -#define SAADC_CONFIG_RESOLUTION 2 -#endif - -// SAADC_CONFIG_OVERSAMPLE - Sample period - -// <0=> Disabled -// <1=> 2x -// <2=> 4x -// <3=> 8x -// <4=> 16x -// <5=> 32x -// <6=> 64x -// <7=> 128x -// <8=> 256x - -#ifndef SAADC_CONFIG_OVERSAMPLE -#define SAADC_CONFIG_OVERSAMPLE 0 -#endif - -// SAADC_CONFIG_LP_MODE - Enabling low power mode - - -#ifndef SAADC_CONFIG_LP_MODE -#define SAADC_CONFIG_LP_MODE 0 -#endif - -// SAADC_CONFIG_IRQ_PRIORITY - Interrupt priority - - -// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 - -#ifndef SAADC_CONFIG_IRQ_PRIORITY -#define SAADC_CONFIG_IRQ_PRIORITY 7 -#endif - -// SAADC_CONFIG_LOG_ENABLED - Enables logging in the module. -//========================================================== -#ifndef SAADC_CONFIG_LOG_ENABLED -#define SAADC_CONFIG_LOG_ENABLED 0 -#endif -#if SAADC_CONFIG_LOG_ENABLED -// SAADC_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug - -#ifndef SAADC_CONFIG_LOG_LEVEL -#define SAADC_CONFIG_LOG_LEVEL 3 -#endif - -// SAADC_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef SAADC_CONFIG_INFO_COLOR -#define SAADC_CONFIG_INFO_COLOR 0 -#endif - -// SAADC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef SAADC_CONFIG_DEBUG_COLOR -#define SAADC_CONFIG_DEBUG_COLOR 0 -#endif - -#endif //SAADC_CONFIG_LOG_ENABLED -// - -#endif //SAADC_ENABLED -// - -// SPIS_ENABLED - nrf_drv_spis - SPI Slave driver -//========================================================== -#ifndef SPIS_ENABLED -#define SPIS_ENABLED 0 -#endif -#if SPIS_ENABLED -// SPIS_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority - - -// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 - -#ifndef SPIS_DEFAULT_CONFIG_IRQ_PRIORITY -#define SPIS_DEFAULT_CONFIG_IRQ_PRIORITY 7 -#endif - -// SPIS_DEFAULT_MODE - Mode - -// <0=> MODE_0 -// <1=> MODE_1 -// <2=> MODE_2 -// <3=> MODE_3 - -#ifndef SPIS_DEFAULT_MODE -#define SPIS_DEFAULT_MODE 0 -#endif - -// SPIS_DEFAULT_BIT_ORDER - SPIS default bit order - -// <0=> MSB first -// <1=> LSB first - -#ifndef SPIS_DEFAULT_BIT_ORDER -#define SPIS_DEFAULT_BIT_ORDER 0 -#endif - -// SPIS_DEFAULT_DEF - SPIS default DEF character <0-255> - - -#ifndef SPIS_DEFAULT_DEF -#define SPIS_DEFAULT_DEF 255 -#endif - -// SPIS_DEFAULT_ORC - SPIS default ORC character <0-255> - - -#ifndef SPIS_DEFAULT_ORC -#define SPIS_DEFAULT_ORC 255 -#endif - -// SPIS0_ENABLED - Enable SPIS0 instance - - -#ifndef SPIS0_ENABLED -#define SPIS0_ENABLED 0 -#endif - -// SPIS1_ENABLED - Enable SPIS1 instance - - -#ifndef SPIS1_ENABLED -#define SPIS1_ENABLED 0 -#endif - -// SPIS2_ENABLED - Enable SPIS2 instance - - -#ifndef SPIS2_ENABLED -#define SPIS2_ENABLED 0 -#endif - -// SPIS_CONFIG_LOG_ENABLED - Enables logging in the module. -//========================================================== -#ifndef SPIS_CONFIG_LOG_ENABLED -#define SPIS_CONFIG_LOG_ENABLED 0 -#endif -#if SPIS_CONFIG_LOG_ENABLED -// SPIS_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug - -#ifndef SPIS_CONFIG_LOG_LEVEL -#define SPIS_CONFIG_LOG_LEVEL 3 -#endif - -// SPIS_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef SPIS_CONFIG_INFO_COLOR -#define SPIS_CONFIG_INFO_COLOR 0 -#endif - -// SPIS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef SPIS_CONFIG_DEBUG_COLOR -#define SPIS_CONFIG_DEBUG_COLOR 0 -#endif - -#endif //SPIS_CONFIG_LOG_ENABLED -// - -// SPIS_NRF52_ANOMALY_109_WORKAROUND_ENABLED - Enables nRF52 Anomaly 109 workaround for SPIS. - - -// The workaround uses a GPIOTE channel to generate interrupts -// on falling edges detected on the CSN line. This will make -// the CPU active for the moment when SPIS starts DMA transfers, -// and this way the transfers will be protected. -// This workaround uses GPIOTE driver, so this driver must be -// enabled as well. - -#ifndef SPIS_NRF52_ANOMALY_109_WORKAROUND_ENABLED -#define SPIS_NRF52_ANOMALY_109_WORKAROUND_ENABLED 0 -#endif - -#endif //SPIS_ENABLED -// - -// SPI_ENABLED - nrf_drv_spi - SPI/SPIM peripheral driver -//========================================================== -#ifndef SPI_ENABLED -#define SPI_ENABLED 0 -#endif -#if SPI_ENABLED -// SPI_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority - - -// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 - -#ifndef SPI_DEFAULT_CONFIG_IRQ_PRIORITY -#define SPI_DEFAULT_CONFIG_IRQ_PRIORITY 7 -#endif - -// SPI0_ENABLED - Enable SPI0 instance -//========================================================== -#ifndef SPI0_ENABLED -#define SPI0_ENABLED 0 -#endif -#if SPI0_ENABLED -// SPI0_USE_EASY_DMA - Use EasyDMA - - -#ifndef SPI0_USE_EASY_DMA -#define SPI0_USE_EASY_DMA 1 -#endif - -// SPI0_DEFAULT_FREQUENCY - SPI frequency - -// <33554432=> 125 kHz -// <67108864=> 250 kHz -// <134217728=> 500 kHz -// <268435456=> 1 MHz -// <536870912=> 2 MHz -// <1073741824=> 4 MHz -// <2147483648=> 8 MHz - -#ifndef SPI0_DEFAULT_FREQUENCY -#define SPI0_DEFAULT_FREQUENCY 1073741824 -#endif - -#endif //SPI0_ENABLED -// - -// SPI1_ENABLED - Enable SPI1 instance -//========================================================== -#ifndef SPI1_ENABLED -#define SPI1_ENABLED 0 -#endif -#if SPI1_ENABLED -// SPI1_USE_EASY_DMA - Use EasyDMA - - -#ifndef SPI1_USE_EASY_DMA -#define SPI1_USE_EASY_DMA 1 -#endif - -// SPI1_DEFAULT_FREQUENCY - SPI frequency - -// <33554432=> 125 kHz -// <67108864=> 250 kHz -// <134217728=> 500 kHz -// <268435456=> 1 MHz -// <536870912=> 2 MHz -// <1073741824=> 4 MHz -// <2147483648=> 8 MHz - -#ifndef SPI1_DEFAULT_FREQUENCY -#define SPI1_DEFAULT_FREQUENCY 1073741824 -#endif - -#endif //SPI1_ENABLED -// - -// SPI2_ENABLED - Enable SPI2 instance -//========================================================== -#ifndef SPI2_ENABLED -#define SPI2_ENABLED 0 -#endif -#if SPI2_ENABLED -// SPI2_USE_EASY_DMA - Use EasyDMA - - -#ifndef SPI2_USE_EASY_DMA -#define SPI2_USE_EASY_DMA 1 -#endif - -// SPI2_DEFAULT_FREQUENCY - Use EasyDMA - - -#ifndef SPI2_DEFAULT_FREQUENCY -#define SPI2_DEFAULT_FREQUENCY 1 -#endif - -#endif //SPI2_ENABLED -// - -// SPI_CONFIG_LOG_ENABLED - Enables logging in the module. -//========================================================== -#ifndef SPI_CONFIG_LOG_ENABLED -#define SPI_CONFIG_LOG_ENABLED 0 -#endif -#if SPI_CONFIG_LOG_ENABLED -// SPI_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug - -#ifndef SPI_CONFIG_LOG_LEVEL -#define SPI_CONFIG_LOG_LEVEL 3 -#endif - -// SPI_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef SPI_CONFIG_INFO_COLOR -#define SPI_CONFIG_INFO_COLOR 0 -#endif - -// SPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef SPI_CONFIG_DEBUG_COLOR -#define SPI_CONFIG_DEBUG_COLOR 0 -#endif - -#endif //SPI_CONFIG_LOG_ENABLED -// - -// SPIM_NRF52_ANOMALY_109_WORKAROUND_ENABLED - Enables nRF52 anomaly 109 workaround for SPIM. - - -// The workaround uses interrupts to wake up the CPU by catching -// a start event of zero-length transmission to start the clock. This -// ensures that the DMA transfer will be executed without issues and -// that the proper transfer will be started. See more in the Errata -// document or Anomaly 109 Addendum located at -// https://infocenter.nordicsemi.com/ - -#ifndef SPIM_NRF52_ANOMALY_109_WORKAROUND_ENABLED -#define SPIM_NRF52_ANOMALY_109_WORKAROUND_ENABLED 0 -#endif - -#endif //SPI_ENABLED -// - -// TIMER_ENABLED - nrf_drv_timer - TIMER periperal driver -//========================================================== -#ifndef TIMER_ENABLED -#define TIMER_ENABLED 0 -#endif -#if TIMER_ENABLED -// TIMER_DEFAULT_CONFIG_FREQUENCY - Timer frequency if in Timer mode - -// <0=> 16 MHz -// <1=> 8 MHz -// <2=> 4 MHz -// <3=> 2 MHz -// <4=> 1 MHz -// <5=> 500 kHz -// <6=> 250 kHz -// <7=> 125 kHz -// <8=> 62.5 kHz -// <9=> 31.25 kHz - -#ifndef TIMER_DEFAULT_CONFIG_FREQUENCY -#define TIMER_DEFAULT_CONFIG_FREQUENCY 0 -#endif - -// TIMER_DEFAULT_CONFIG_MODE - Timer mode or operation - -// <0=> Timer -// <1=> Counter - -#ifndef TIMER_DEFAULT_CONFIG_MODE -#define TIMER_DEFAULT_CONFIG_MODE 0 -#endif - -// TIMER_DEFAULT_CONFIG_BIT_WIDTH - Timer counter bit width - -// <0=> 16 bit -// <1=> 8 bit -// <2=> 24 bit -// <3=> 32 bit - -#ifndef TIMER_DEFAULT_CONFIG_BIT_WIDTH -#define TIMER_DEFAULT_CONFIG_BIT_WIDTH 0 -#endif - -// TIMER_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority - - -// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 - -#ifndef TIMER_DEFAULT_CONFIG_IRQ_PRIORITY -#define TIMER_DEFAULT_CONFIG_IRQ_PRIORITY 7 -#endif - -// TIMER0_ENABLED - Enable TIMER0 instance - - -#ifndef TIMER0_ENABLED -#define TIMER0_ENABLED 0 -#endif - -// TIMER1_ENABLED - Enable TIMER1 instance - - -#ifndef TIMER1_ENABLED -#define TIMER1_ENABLED 0 -#endif - -// TIMER2_ENABLED - Enable TIMER2 instance - - -#ifndef TIMER2_ENABLED -#define TIMER2_ENABLED 0 -#endif - -// TIMER3_ENABLED - Enable TIMER3 instance - - -#ifndef TIMER3_ENABLED -#define TIMER3_ENABLED 0 -#endif - -// TIMER4_ENABLED - Enable TIMER4 instance - - -#ifndef TIMER4_ENABLED -#define TIMER4_ENABLED 0 -#endif - -// TIMER_CONFIG_LOG_ENABLED - Enables logging in the module. -//========================================================== -#ifndef TIMER_CONFIG_LOG_ENABLED -#define TIMER_CONFIG_LOG_ENABLED 0 -#endif -#if TIMER_CONFIG_LOG_ENABLED -// TIMER_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug - -#ifndef TIMER_CONFIG_LOG_LEVEL -#define TIMER_CONFIG_LOG_LEVEL 3 -#endif - -// TIMER_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef TIMER_CONFIG_INFO_COLOR -#define TIMER_CONFIG_INFO_COLOR 0 -#endif - -// TIMER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef TIMER_CONFIG_DEBUG_COLOR -#define TIMER_CONFIG_DEBUG_COLOR 0 -#endif - -#endif //TIMER_CONFIG_LOG_ENABLED -// - -#endif //TIMER_ENABLED -// - -// TWIS_ENABLED - nrf_drv_twis - TWIS peripheral driver -//========================================================== -#ifndef TWIS_ENABLED -#define TWIS_ENABLED 0 -#endif -#if TWIS_ENABLED -// TWIS_DEFAULT_CONFIG_ADDR0 - Address0 -#ifndef TWIS_DEFAULT_CONFIG_ADDR0 -#define TWIS_DEFAULT_CONFIG_ADDR0 0 -#endif - -// TWIS_DEFAULT_CONFIG_ADDR1 - Address1 -#ifndef TWIS_DEFAULT_CONFIG_ADDR1 -#define TWIS_DEFAULT_CONFIG_ADDR1 0 -#endif - -// TWIS_DEFAULT_CONFIG_SCL_PULL - SCL pin pull configuration - -// <0=> Disabled -// <1=> Pull down -// <3=> Pull up - -#ifndef TWIS_DEFAULT_CONFIG_SCL_PULL -#define TWIS_DEFAULT_CONFIG_SCL_PULL 0 -#endif - -// TWIS_DEFAULT_CONFIG_SDA_PULL - SDA pin pull configuration - -// <0=> Disabled -// <1=> Pull down -// <3=> Pull up - -#ifndef TWIS_DEFAULT_CONFIG_SDA_PULL -#define TWIS_DEFAULT_CONFIG_SDA_PULL 0 -#endif - -// TWIS_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority - - -// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 - -#ifndef TWIS_DEFAULT_CONFIG_IRQ_PRIORITY -#define TWIS_DEFAULT_CONFIG_IRQ_PRIORITY 7 -#endif - -// TWIS0_ENABLED - Enable TWIS0 instance - - -#ifndef TWIS0_ENABLED -#define TWIS0_ENABLED 0 -#endif - -// TWIS1_ENABLED - Enable TWIS1 instance - - -#ifndef TWIS1_ENABLED -#define TWIS1_ENABLED 0 -#endif - -// TWIS_ASSUME_INIT_AFTER_RESET_ONLY - Assume that any instance would be initialized only once - - -// Optimization flag. Registers used by TWIS are shared by other peripherals. Normally, during initialization driver tries to clear all registers to known state before doing the initialization itself. This gives initialization safe procedure, no matter when it would be called. If you activate TWIS only once and do never uninitialize it - set this flag to 1 what gives more optimal code. - -#ifndef TWIS_ASSUME_INIT_AFTER_RESET_ONLY -#define TWIS_ASSUME_INIT_AFTER_RESET_ONLY 0 -#endif - -// TWIS_NO_SYNC_MODE - Remove support for synchronous mode - - -// Synchronous mode would be used in specific situations. And it uses some additional code and data memory to safely process state machine by polling it in status functions. If this functionality is not required it may be disabled to free some resources. - -#ifndef TWIS_NO_SYNC_MODE -#define TWIS_NO_SYNC_MODE 0 -#endif - -// TWIS_CONFIG_LOG_ENABLED - Enables logging in the module. -//========================================================== -#ifndef TWIS_CONFIG_LOG_ENABLED -#define TWIS_CONFIG_LOG_ENABLED 0 -#endif -#if TWIS_CONFIG_LOG_ENABLED -// TWIS_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug - -#ifndef TWIS_CONFIG_LOG_LEVEL -#define TWIS_CONFIG_LOG_LEVEL 3 -#endif - -// TWIS_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef TWIS_CONFIG_INFO_COLOR -#define TWIS_CONFIG_INFO_COLOR 0 -#endif - -// TWIS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef TWIS_CONFIG_DEBUG_COLOR -#define TWIS_CONFIG_DEBUG_COLOR 0 -#endif - -#endif //TWIS_CONFIG_LOG_ENABLED -// - -#endif //TWIS_ENABLED -// - -// TWI_ENABLED - nrf_drv_twi - TWI/TWIM peripheral driver -//========================================================== -#ifndef TWI_ENABLED -#define TWI_ENABLED 0 -#endif -#if TWI_ENABLED -// TWI_DEFAULT_CONFIG_FREQUENCY - Frequency - -// <26738688=> 100k -// <67108864=> 250k -// <104857600=> 400k - -#ifndef TWI_DEFAULT_CONFIG_FREQUENCY -#define TWI_DEFAULT_CONFIG_FREQUENCY 26738688 -#endif - -// TWI_DEFAULT_CONFIG_CLR_BUS_INIT - Enables bus clearing procedure during init - - -#ifndef TWI_DEFAULT_CONFIG_CLR_BUS_INIT -#define TWI_DEFAULT_CONFIG_CLR_BUS_INIT 0 -#endif - -// TWI_DEFAULT_CONFIG_HOLD_BUS_UNINIT - Enables bus holding after uninit - - -#ifndef TWI_DEFAULT_CONFIG_HOLD_BUS_UNINIT -#define TWI_DEFAULT_CONFIG_HOLD_BUS_UNINIT 0 -#endif - -// TWI_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority - - -// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 - -#ifndef TWI_DEFAULT_CONFIG_IRQ_PRIORITY -#define TWI_DEFAULT_CONFIG_IRQ_PRIORITY 7 -#endif - -// TWI0_ENABLED - Enable TWI0 instance -//========================================================== -#ifndef TWI0_ENABLED -#define TWI0_ENABLED 0 -#endif -#if TWI0_ENABLED -// TWI0_USE_EASY_DMA - Use EasyDMA (if present) - - -#ifndef TWI0_USE_EASY_DMA -#define TWI0_USE_EASY_DMA 0 -#endif - -#endif //TWI0_ENABLED -// - -// TWI1_ENABLED - Enable TWI1 instance -//========================================================== -#ifndef TWI1_ENABLED -#define TWI1_ENABLED 0 -#endif -#if TWI1_ENABLED -// TWI1_USE_EASY_DMA - Use EasyDMA (if present) - - -#ifndef TWI1_USE_EASY_DMA -#define TWI1_USE_EASY_DMA 0 -#endif - -#endif //TWI1_ENABLED -// - -// TWI_CONFIG_LOG_ENABLED - Enables logging in the module. -//========================================================== -#ifndef TWI_CONFIG_LOG_ENABLED -#define TWI_CONFIG_LOG_ENABLED 0 -#endif -#if TWI_CONFIG_LOG_ENABLED -// TWI_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug - -#ifndef TWI_CONFIG_LOG_LEVEL -#define TWI_CONFIG_LOG_LEVEL 3 -#endif - -// TWI_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef TWI_CONFIG_INFO_COLOR -#define TWI_CONFIG_INFO_COLOR 0 -#endif - -// TWI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef TWI_CONFIG_DEBUG_COLOR -#define TWI_CONFIG_DEBUG_COLOR 0 -#endif - -#endif //TWI_CONFIG_LOG_ENABLED -// - -// TWIM_NRF52_ANOMALY_109_WORKAROUND_ENABLED - Enables nRF52 anomaly 109 workaround for TWIM. - - -// The workaround uses interrupts to wake up the CPU by catching -// the start event of zero-frequency transmission, clear the -// peripheral, set desired frequency, start the peripheral, and -// the proper transmission. See more in the Errata document or -// Anomaly 109 Addendum located at https://infocenter.nordicsemi.com/ - -#ifndef TWIM_NRF52_ANOMALY_109_WORKAROUND_ENABLED -#define TWIM_NRF52_ANOMALY_109_WORKAROUND_ENABLED 0 -#endif - -#endif //TWI_ENABLED -// - -// UART_ENABLED - nrf_drv_uart - UART/UARTE peripheral driver -//========================================================== -#ifndef UART_ENABLED -#define UART_ENABLED 1 -#endif -#if UART_ENABLED -// UART_DEFAULT_CONFIG_HWFC - Hardware Flow Control - -// <0=> Disabled -// <1=> Enabled - -#ifndef UART_DEFAULT_CONFIG_HWFC -#define UART_DEFAULT_CONFIG_HWFC 0 -#endif - -// UART_DEFAULT_CONFIG_PARITY - Parity - -// <0=> Excluded -// <14=> Included - -#ifndef UART_DEFAULT_CONFIG_PARITY -#define UART_DEFAULT_CONFIG_PARITY 0 -#endif - -// UART_DEFAULT_CONFIG_BAUDRATE - Default Baudrate - -// <323584=> 1200 baud -// <643072=> 2400 baud -// <1290240=> 4800 baud -// <2576384=> 9600 baud -// <3862528=> 14400 baud -// <5152768=> 19200 baud -// <7716864=> 28800 baud -// <10289152=> 38400 baud -// <15400960=> 57600 baud -// <20615168=> 76800 baud -// <30801920=> 115200 baud -// <61865984=> 230400 baud -// <67108864=> 250000 baud -// <121634816=> 460800 baud -// <251658240=> 921600 baud -// <268435456=> 57600 baud - -#ifndef UART_DEFAULT_CONFIG_BAUDRATE -#define UART_DEFAULT_CONFIG_BAUDRATE 30801920 -#endif - -// UART_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority - - -// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 - -#ifndef UART_DEFAULT_CONFIG_IRQ_PRIORITY -#define UART_DEFAULT_CONFIG_IRQ_PRIORITY 7 -#endif - -// UART_EASY_DMA_SUPPORT - Driver supporting EasyDMA - - -#ifndef UART_EASY_DMA_SUPPORT -#define UART_EASY_DMA_SUPPORT 0 -#endif - -// UART_LEGACY_SUPPORT - Driver supporting Legacy mode - - -#ifndef UART_LEGACY_SUPPORT -#define UART_LEGACY_SUPPORT 1 -#endif - -// UART0_ENABLED - Enable UART0 instance -//========================================================== -#ifndef UART0_ENABLED -#define UART0_ENABLED 1 -#endif -#if UART0_ENABLED -// UART0_CONFIG_USE_EASY_DMA - Default setting for using EasyDMA - - -#ifndef UART0_CONFIG_USE_EASY_DMA -#define UART0_CONFIG_USE_EASY_DMA 0 -#endif - -#endif //UART0_ENABLED -// - -// UART_CONFIG_LOG_ENABLED - Enables logging in the module. -//========================================================== -#ifndef UART_CONFIG_LOG_ENABLED -#define UART_CONFIG_LOG_ENABLED 0 -#endif -#if UART_CONFIG_LOG_ENABLED -// UART_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug - -#ifndef UART_CONFIG_LOG_LEVEL -#define UART_CONFIG_LOG_LEVEL 3 -#endif - -// UART_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef UART_CONFIG_INFO_COLOR -#define UART_CONFIG_INFO_COLOR 0 -#endif - -// UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef UART_CONFIG_DEBUG_COLOR -#define UART_CONFIG_DEBUG_COLOR 0 -#endif - -#endif //UART_CONFIG_LOG_ENABLED -// - -#endif //UART_ENABLED -// - -// USBD_ENABLED - nrf_drv_usbd - USB driver -//========================================================== -#ifndef USBD_ENABLED -#define USBD_ENABLED 0 -#endif -#if USBD_ENABLED -// USBD_CONFIG_IRQ_PRIORITY - Interrupt priority - - -// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 - -#ifndef USBD_CONFIG_IRQ_PRIORITY -#define USBD_CONFIG_IRQ_PRIORITY 7 -#endif - -// NRF_DRV_USBD_DMASCHEDULER_MODE - USBD SMA scheduler working scheme - -// <0=> Prioritized access -// <1=> Round Robin - -#ifndef NRF_DRV_USBD_DMASCHEDULER_MODE -#define NRF_DRV_USBD_DMASCHEDULER_MODE 0 -#endif - -// NRF_USBD_DRV_LOG_ENABLED - Enable logging - - -#ifndef NRF_USBD_DRV_LOG_ENABLED -#define NRF_USBD_DRV_LOG_ENABLED 0 -#endif - -#endif //USBD_ENABLED -// - -// WDT_ENABLED - nrf_drv_wdt - WDT peripheral driver -//========================================================== -#ifndef WDT_ENABLED -#define WDT_ENABLED 0 -#endif -#if WDT_ENABLED -// WDT_CONFIG_BEHAVIOUR - WDT behavior in CPU SLEEP or HALT mode - -// <1=> Run in SLEEP, Pause in HALT -// <8=> Pause in SLEEP, Run in HALT -// <9=> Run in SLEEP and HALT -// <0=> Pause in SLEEP and HALT - -#ifndef WDT_CONFIG_BEHAVIOUR -#define WDT_CONFIG_BEHAVIOUR 1 -#endif - -// WDT_CONFIG_RELOAD_VALUE - Reload value <15-4294967295> - - -#ifndef WDT_CONFIG_RELOAD_VALUE -#define WDT_CONFIG_RELOAD_VALUE 2000 -#endif - -// WDT_CONFIG_IRQ_PRIORITY - Interrupt priority - - -// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 - -#ifndef WDT_CONFIG_IRQ_PRIORITY -#define WDT_CONFIG_IRQ_PRIORITY 7 -#endif - -// WDT_CONFIG_LOG_ENABLED - Enables logging in the module. -//========================================================== -#ifndef WDT_CONFIG_LOG_ENABLED -#define WDT_CONFIG_LOG_ENABLED 0 -#endif -#if WDT_CONFIG_LOG_ENABLED -// WDT_CONFIG_LOG_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug - -#ifndef WDT_CONFIG_LOG_LEVEL -#define WDT_CONFIG_LOG_LEVEL 3 -#endif - -// WDT_CONFIG_INFO_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef WDT_CONFIG_INFO_COLOR -#define WDT_CONFIG_INFO_COLOR 0 -#endif - -// WDT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef WDT_CONFIG_DEBUG_COLOR -#define WDT_CONFIG_DEBUG_COLOR 0 -#endif - -#endif //WDT_CONFIG_LOG_ENABLED -// - -#endif //WDT_ENABLED -// - -// -//========================================================== - -// nRF_Libraries - -//========================================================== -// APP_FIFO_ENABLED - app_fifo - Software FIFO implementation - - -#ifndef APP_FIFO_ENABLED -#define APP_FIFO_ENABLED 1 -#endif - -// APP_GPIOTE_ENABLED - app_gpiote - GPIOTE events dispatcher - - -#ifndef APP_GPIOTE_ENABLED -#define APP_GPIOTE_ENABLED 0 -#endif - -// APP_PWM_ENABLED - app_pwm - PWM functionality - - -#ifndef APP_PWM_ENABLED -#define APP_PWM_ENABLED 0 -#endif - -// APP_SCHEDULER_ENABLED - app_scheduler - Events scheduler -//========================================================== -#ifndef APP_SCHEDULER_ENABLED -#define APP_SCHEDULER_ENABLED 1 -#endif -#if APP_SCHEDULER_ENABLED -// APP_SCHEDULER_WITH_PAUSE - Enabling pause feature - - -#ifndef APP_SCHEDULER_WITH_PAUSE -#define APP_SCHEDULER_WITH_PAUSE 0 -#endif - -// APP_SCHEDULER_WITH_PROFILER - Enabling scheduler profiling - - -#ifndef APP_SCHEDULER_WITH_PROFILER -#define APP_SCHEDULER_WITH_PROFILER 0 -#endif - -#endif //APP_SCHEDULER_ENABLED -// - -// APP_TIMER_ENABLED - app_timer - Application timer functionality -//========================================================== -#ifndef APP_TIMER_ENABLED -#define APP_TIMER_ENABLED 1 -#endif -#if APP_TIMER_ENABLED -// APP_TIMER_CONFIG_RTC_FREQUENCY - Configure RTC prescaler. - -// <0=> 32768 Hz -// <1=> 16384 Hz -// <3=> 8192 Hz -// <7=> 4096 Hz -// <15=> 2048 Hz -// <31=> 1024 Hz - -#ifndef APP_TIMER_CONFIG_RTC_FREQUENCY -#define APP_TIMER_CONFIG_RTC_FREQUENCY 0 -#endif - -// APP_TIMER_CONFIG_IRQ_PRIORITY - Interrupt priority - - -// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice -// <0=> 0 (highest) -// <1=> 1 -// <2=> 2 -// <3=> 3 -// <4=> 4 -// <5=> 5 -// <6=> 6 -// <7=> 7 - -#ifndef APP_TIMER_CONFIG_IRQ_PRIORITY -#define APP_TIMER_CONFIG_IRQ_PRIORITY 7 -#endif - -// APP_TIMER_CONFIG_OP_QUEUE_SIZE - Capacity of timer requests queue. -// Size of the queue depends on how many timers are used -// in the system, how often timers are started and overall -// system latency. If queue size is too small app_timer calls -// will fail. - -#ifndef APP_TIMER_CONFIG_OP_QUEUE_SIZE -#define APP_TIMER_CONFIG_OP_QUEUE_SIZE 10 -#endif - -// APP_TIMER_CONFIG_USE_SCHEDULER - Enable scheduling app_timer events to app_scheduler - - -#ifndef APP_TIMER_CONFIG_USE_SCHEDULER -#define APP_TIMER_CONFIG_USE_SCHEDULER 0 -#endif - -// APP_TIMER_WITH_PROFILER - Enable app_timer profiling - - -#ifndef APP_TIMER_WITH_PROFILER -#define APP_TIMER_WITH_PROFILER 0 -#endif - -// APP_TIMER_KEEPS_RTC_ACTIVE - Enable RTC always on - - -// If option is enabled RTC is kept running even if there is no active timers. -// This option can be used when app_timer is used for timestamping. - -#ifndef APP_TIMER_KEEPS_RTC_ACTIVE -#define APP_TIMER_KEEPS_RTC_ACTIVE 0 -#endif - -// APP_TIMER_CONFIG_SWI_NUMBER - Configure SWI instance used. - -// <0=> 0 -// <1=> 1 - -#ifndef APP_TIMER_CONFIG_SWI_NUMBER -#define APP_TIMER_CONFIG_SWI_NUMBER 0 -#endif - -#endif //APP_TIMER_ENABLED -// - -// APP_TWI_ENABLED - app_twi - TWI transaction manager - - -#ifndef APP_TWI_ENABLED -#define APP_TWI_ENABLED 0 -#endif - -// APP_UART_ENABLED - app_uart - UART driver -//========================================================== -#ifndef APP_UART_ENABLED -#define APP_UART_ENABLED 1 -#endif -#if APP_UART_ENABLED -// APP_UART_DRIVER_INSTANCE - UART instance used - -// <0=> 0 - -#ifndef APP_UART_DRIVER_INSTANCE -#define APP_UART_DRIVER_INSTANCE 0 -#endif - -#endif //APP_UART_ENABLED -// - -// APP_USBD_CLASS_AUDIO_ENABLED - app_usbd_audio - USB AUDIO class - - -#ifndef APP_USBD_CLASS_AUDIO_ENABLED -#define APP_USBD_CLASS_AUDIO_ENABLED 0 -#endif - -// APP_USBD_CLASS_HID_ENABLED - app_usbd_hid - USB HID class - - -#ifndef APP_USBD_CLASS_HID_ENABLED -#define APP_USBD_CLASS_HID_ENABLED 0 -#endif - -// APP_USBD_HID_GENERIC_ENABLED - app_usbd_hid_generic - USB HID generic - - -#ifndef APP_USBD_HID_GENERIC_ENABLED -#define APP_USBD_HID_GENERIC_ENABLED 0 -#endif - -// APP_USBD_HID_KBD_ENABLED - app_usbd_hid_kbd - USB HID keyboard - - -#ifndef APP_USBD_HID_KBD_ENABLED -#define APP_USBD_HID_KBD_ENABLED 0 -#endif - -// APP_USBD_HID_MOUSE_ENABLED - app_usbd_hid_mouse - USB HID mouse - - -#ifndef APP_USBD_HID_MOUSE_ENABLED -#define APP_USBD_HID_MOUSE_ENABLED 0 -#endif - -// BUTTON_ENABLED - app_button - buttons handling module - - -#ifndef BUTTON_ENABLED -#define BUTTON_ENABLED 1 -#endif - -// CRC16_ENABLED - crc16 - CRC16 calculation routines - - -#ifndef CRC16_ENABLED -#define CRC16_ENABLED 0 -#endif - -// CRC32_ENABLED - crc32 - CRC32 calculation routines - - -#ifndef CRC32_ENABLED -#define CRC32_ENABLED 0 -#endif - -// ECC_ENABLED - ecc - Elliptic Curve Cryptography Library - - -#ifndef ECC_ENABLED -#define ECC_ENABLED 0 -#endif - -// FDS_ENABLED - fds - Flash data storage module -//========================================================== -#ifndef FDS_ENABLED -#define FDS_ENABLED 0 -#endif -#if FDS_ENABLED -// FDS_OP_QUEUE_SIZE - Size of the internal queue. -#ifndef FDS_OP_QUEUE_SIZE -#define FDS_OP_QUEUE_SIZE 4 -#endif - -// FDS_CHUNK_QUEUE_SIZE - Determines how many @ref fds_record_chunk_t structures can be buffered at any time. -#ifndef FDS_CHUNK_QUEUE_SIZE -#define FDS_CHUNK_QUEUE_SIZE 8 -#endif - -// FDS_MAX_USERS - Maximum number of callbacks that can be registered. -#ifndef FDS_MAX_USERS -#define FDS_MAX_USERS 8 -#endif - -// FDS_VIRTUAL_PAGES - Number of virtual flash pages to use. -// One of the virtual pages is reserved by the system for garbage collection. -// Therefore, the minimum is two virtual pages: one page to store data and -// one page to be used by the system for garbage collection. The total amount -// of flash memory that is used by FDS amounts to @ref FDS_VIRTUAL_PAGES -// @ref FDS_VIRTUAL_PAGE_SIZE * 4 bytes. - -#ifndef FDS_VIRTUAL_PAGES -#define FDS_VIRTUAL_PAGES 3 -#endif - -// FDS_VIRTUAL_PAGE_SIZE - The size of a virtual page of flash memory, expressed in number of 4-byte words. - - -// By default, a virtual page is the same size as a physical page. -// The size of a virtual page must be a multiple of the size of a physical page. -// <1024=> 1024 -// <2048=> 2048 - -#ifndef FDS_VIRTUAL_PAGE_SIZE -#define FDS_VIRTUAL_PAGE_SIZE 1024 -#endif - -#endif //FDS_ENABLED -// - -// FSTORAGE_ENABLED - fstorage - Flash storage module -//========================================================== -#ifndef FSTORAGE_ENABLED -#define FSTORAGE_ENABLED 1 -#endif -#if FSTORAGE_ENABLED -// FS_QUEUE_SIZE - Configures the size of the internal queue. -// Increase this if there are many users, or if it is likely that many -// operation will be queued at once without waiting for the previous operations -// to complete. In general, increase the queue size if you frequently receive -// @ref FS_ERR_QUEUE_FULL errors when calling @ref fs_store or @ref fs_erase. - -#ifndef FS_QUEUE_SIZE -#define FS_QUEUE_SIZE 4 -#endif - -// FS_OP_MAX_RETRIES - Number attempts to execute an operation if the SoftDevice fails. -// Increase this value if events return the @ref FS_ERR_OPERATION_TIMEOUT -// error often. The SoftDevice may fail to schedule flash access due to high BLE activity. - -#ifndef FS_OP_MAX_RETRIES -#define FS_OP_MAX_RETRIES 3 -#endif - -// FS_MAX_WRITE_SIZE_WORDS - Maximum number of words to be written to flash in a single operation. -// Tweaking this value can increase the chances of the SoftDevice being -// able to fit flash operations in between radio activity. This value is bound by the -// maximum number of words which the SoftDevice can write to flash in a single call to -// @ref sd_flash_write, which is 256 words for nRF51 ICs and 1024 words for nRF52 ICs. - -#ifndef FS_MAX_WRITE_SIZE_WORDS -#define FS_MAX_WRITE_SIZE_WORDS 1024 -#endif - -#endif //FSTORAGE_ENABLED -// - -// HARDFAULT_HANDLER_ENABLED - hardfault_default - HardFault default handler for debugging and release - - -#ifndef HARDFAULT_HANDLER_ENABLED -#define HARDFAULT_HANDLER_ENABLED 0 -#endif - -// HCI_MEM_POOL_ENABLED - hci_mem_pool - memory pool implementation used by HCI -//========================================================== -#ifndef HCI_MEM_POOL_ENABLED -#define HCI_MEM_POOL_ENABLED 0 -#endif -#if HCI_MEM_POOL_ENABLED -// HCI_TX_BUF_SIZE - TX buffer size in bytes. -#ifndef HCI_TX_BUF_SIZE -#define HCI_TX_BUF_SIZE 600 -#endif - -// HCI_RX_BUF_SIZE - RX buffer size in bytes. -#ifndef HCI_RX_BUF_SIZE -#define HCI_RX_BUF_SIZE 600 -#endif - -// HCI_RX_BUF_QUEUE_SIZE - RX buffer queue size. -#ifndef HCI_RX_BUF_QUEUE_SIZE -#define HCI_RX_BUF_QUEUE_SIZE 4 -#endif - -#endif //HCI_MEM_POOL_ENABLED -// - -// HCI_SLIP_ENABLED - hci_slip - SLIP protocol implementation used by HCI -//========================================================== -#ifndef HCI_SLIP_ENABLED -#define HCI_SLIP_ENABLED 0 -#endif -#if HCI_SLIP_ENABLED -// HCI_UART_BAUDRATE - Default Baudrate - -// <323584=> 1200 baud -// <643072=> 2400 baud -// <1290240=> 4800 baud -// <2576384=> 9600 baud -// <3862528=> 14400 baud -// <5152768=> 19200 baud -// <7716864=> 28800 baud -// <10289152=> 38400 baud -// <15400960=> 57600 baud -// <20615168=> 76800 baud -// <30801920=> 115200 baud -// <61865984=> 230400 baud -// <67108864=> 250000 baud -// <121634816=> 460800 baud -// <251658240=> 921600 baud -// <268435456=> 57600 baud - -#ifndef HCI_UART_BAUDRATE -#define HCI_UART_BAUDRATE 30801920 -#endif - -// HCI_UART_FLOW_CONTROL - Hardware Flow Control - -// <0=> Disabled -// <1=> Enabled - -#ifndef HCI_UART_FLOW_CONTROL -#define HCI_UART_FLOW_CONTROL 0 -#endif - -// HCI_UART_RX_PIN - UART RX pin -#ifndef HCI_UART_RX_PIN -#define HCI_UART_RX_PIN 8 -#endif - -// HCI_UART_TX_PIN - UART TX pin -#ifndef HCI_UART_TX_PIN -#define HCI_UART_TX_PIN 6 -#endif - -// HCI_UART_RTS_PIN - UART RTS pin -#ifndef HCI_UART_RTS_PIN -#define HCI_UART_RTS_PIN 5 -#endif - -// HCI_UART_CTS_PIN - UART CTS pin -#ifndef HCI_UART_CTS_PIN -#define HCI_UART_CTS_PIN 7 -#endif - -#endif //HCI_SLIP_ENABLED -// - -// HCI_TRANSPORT_ENABLED - hci_transport - HCI transport -//========================================================== -#ifndef HCI_TRANSPORT_ENABLED -#define HCI_TRANSPORT_ENABLED 0 -#endif -#if HCI_TRANSPORT_ENABLED -// HCI_MAX_PACKET_SIZE_IN_BITS - Maximum size of a single application packet in bits. -#ifndef HCI_MAX_PACKET_SIZE_IN_BITS -#define HCI_MAX_PACKET_SIZE_IN_BITS 8000 -#endif - -#endif //HCI_TRANSPORT_ENABLED -// - -// LED_SOFTBLINK_ENABLED - led_softblink - led_softblink module - - -#ifndef LED_SOFTBLINK_ENABLED -#define LED_SOFTBLINK_ENABLED 0 -#endif - -// LOW_POWER_PWM_ENABLED - low_power_pwm - low_power_pwm module - - -#ifndef LOW_POWER_PWM_ENABLED -#define LOW_POWER_PWM_ENABLED 0 -#endif - -// MEM_MANAGER_ENABLED - mem_manager - Dynamic memory allocator -//========================================================== -#ifndef MEM_MANAGER_ENABLED -#define MEM_MANAGER_ENABLED 0 -#endif -#if MEM_MANAGER_ENABLED -// MEMORY_MANAGER_SMALL_BLOCK_COUNT - Size of each memory blocks identified as 'small' block. <0-255> - - -#ifndef MEMORY_MANAGER_SMALL_BLOCK_COUNT -#define MEMORY_MANAGER_SMALL_BLOCK_COUNT 1 -#endif - -// MEMORY_MANAGER_SMALL_BLOCK_SIZE - Size of each memory blocks identified as 'small' block. -// Size of each memory blocks identified as 'small' block. Memory block are recommended to be word-sized. - -#ifndef MEMORY_MANAGER_SMALL_BLOCK_SIZE -#define MEMORY_MANAGER_SMALL_BLOCK_SIZE 32 -#endif - -// MEMORY_MANAGER_MEDIUM_BLOCK_COUNT - Size of each memory blocks identified as 'medium' block. <0-255> - - -#ifndef MEMORY_MANAGER_MEDIUM_BLOCK_COUNT -#define MEMORY_MANAGER_MEDIUM_BLOCK_COUNT 0 -#endif - -// MEMORY_MANAGER_MEDIUM_BLOCK_SIZE - Size of each memory blocks identified as 'medium' block. -// Size of each memory blocks identified as 'medium' block. Memory block are recommended to be word-sized. - -#ifndef MEMORY_MANAGER_MEDIUM_BLOCK_SIZE -#define MEMORY_MANAGER_MEDIUM_BLOCK_SIZE 256 -#endif - -// MEMORY_MANAGER_LARGE_BLOCK_COUNT - Size of each memory blocks identified as 'large' block. <0-255> - - -#ifndef MEMORY_MANAGER_LARGE_BLOCK_COUNT -#define MEMORY_MANAGER_LARGE_BLOCK_COUNT 0 -#endif - -// MEMORY_MANAGER_LARGE_BLOCK_SIZE - Size of each memory blocks identified as 'large' block. -// Size of each memory blocks identified as 'large' block. Memory block are recommended to be word-sized. - -#ifndef MEMORY_MANAGER_LARGE_BLOCK_SIZE -#define MEMORY_MANAGER_LARGE_BLOCK_SIZE 256 -#endif - -// MEMORY_MANAGER_XLARGE_BLOCK_COUNT - Size of each memory blocks identified as 'extra large' block. <0-255> - - -#ifndef MEMORY_MANAGER_XLARGE_BLOCK_COUNT -#define MEMORY_MANAGER_XLARGE_BLOCK_COUNT 0 -#endif - -// MEMORY_MANAGER_XLARGE_BLOCK_SIZE - Size of each memory blocks identified as 'extra large' block. -// Size of each memory blocks identified as 'extra large' block. Memory block are recommended to be word-sized. - -#ifndef MEMORY_MANAGER_XLARGE_BLOCK_SIZE -#define MEMORY_MANAGER_XLARGE_BLOCK_SIZE 1320 -#endif - -// MEMORY_MANAGER_XXLARGE_BLOCK_COUNT - Size of each memory blocks identified as 'extra extra large' block. <0-255> - - -#ifndef MEMORY_MANAGER_XXLARGE_BLOCK_COUNT -#define MEMORY_MANAGER_XXLARGE_BLOCK_COUNT 0 -#endif - -// MEMORY_MANAGER_XXLARGE_BLOCK_SIZE - Size of each memory blocks identified as 'extra extra large' block. -// Size of each memory blocks identified as 'extra extra large' block. Memory block are recommended to be word-sized. - -#ifndef MEMORY_MANAGER_XXLARGE_BLOCK_SIZE -#define MEMORY_MANAGER_XXLARGE_BLOCK_SIZE 3444 -#endif - -// MEMORY_MANAGER_XSMALL_BLOCK_COUNT - Size of each memory blocks identified as 'extra small' block. <0-255> - - -#ifndef MEMORY_MANAGER_XSMALL_BLOCK_COUNT -#define MEMORY_MANAGER_XSMALL_BLOCK_COUNT 0 -#endif - -// MEMORY_MANAGER_XSMALL_BLOCK_SIZE - Size of each memory blocks identified as 'extra small' block. -// Size of each memory blocks identified as 'extra large' block. Memory block are recommended to be word-sized. - -#ifndef MEMORY_MANAGER_XSMALL_BLOCK_SIZE -#define MEMORY_MANAGER_XSMALL_BLOCK_SIZE 64 -#endif - -// MEMORY_MANAGER_XXSMALL_BLOCK_COUNT - Size of each memory blocks identified as 'extra extra small' block. <0-255> - - -#ifndef MEMORY_MANAGER_XXSMALL_BLOCK_COUNT -#define MEMORY_MANAGER_XXSMALL_BLOCK_COUNT 0 -#endif - -// MEMORY_MANAGER_XXSMALL_BLOCK_SIZE - Size of each memory blocks identified as 'extra extra small' block. -// Size of each memory blocks identified as 'extra extra small' block. Memory block are recommended to be word-sized. - -#ifndef MEMORY_MANAGER_XXSMALL_BLOCK_SIZE -#define MEMORY_MANAGER_XXSMALL_BLOCK_SIZE 32 -#endif - -// MEM_MANAGER_ENABLE_LOGS - Enable debug trace in the module. - - -#ifndef MEM_MANAGER_ENABLE_LOGS -#define MEM_MANAGER_ENABLE_LOGS 0 -#endif - -// MEM_MANAGER_DISABLE_API_PARAM_CHECK - Disable API parameter checks in the module. - - -#ifndef MEM_MANAGER_DISABLE_API_PARAM_CHECK -#define MEM_MANAGER_DISABLE_API_PARAM_CHECK 0 -#endif - -#endif //MEM_MANAGER_ENABLED -// - -// NRF_CSENSE_ENABLED - nrf_csense - Capacitive sensor module -//========================================================== -#ifndef NRF_CSENSE_ENABLED -#define NRF_CSENSE_ENABLED 0 -#endif -#if NRF_CSENSE_ENABLED -// NRF_CSENSE_PAD_HYSTERESIS - Minimum value of change required to determine that a pad was touched. -#ifndef NRF_CSENSE_PAD_HYSTERESIS -#define NRF_CSENSE_PAD_HYSTERESIS 15 -#endif - -// NRF_CSENSE_PAD_DEVIATION - Minimum value measured on a pad required to take it into account while calculating the step. -#ifndef NRF_CSENSE_PAD_DEVIATION -#define NRF_CSENSE_PAD_DEVIATION 70 -#endif - -// NRF_CSENSE_MIN_PAD_VALUE - Minimum normalized value on a pad required to take its value into account. -#ifndef NRF_CSENSE_MIN_PAD_VALUE -#define NRF_CSENSE_MIN_PAD_VALUE 20 -#endif - -// NRF_CSENSE_MAX_PADS_NUMBER - Maximum number of pads used for one instance. -#ifndef NRF_CSENSE_MAX_PADS_NUMBER -#define NRF_CSENSE_MAX_PADS_NUMBER 20 -#endif - -// NRF_CSENSE_MAX_VALUE - Maximum normalized value obtained from measurement. -#ifndef NRF_CSENSE_MAX_VALUE -#define NRF_CSENSE_MAX_VALUE 1000 -#endif - -// NRF_CSENSE_OUTPUT_PIN - Output pin used by the low-level module. -// This is used when capacitive sensor does not use COMP. - -#ifndef NRF_CSENSE_OUTPUT_PIN -#define NRF_CSENSE_OUTPUT_PIN 26 -#endif - -#endif //NRF_CSENSE_ENABLED -// - -// NRF_DRV_CSENSE_ENABLED - nrf_drv_csense - Capacitive sensor low-level module -//========================================================== -#ifndef NRF_DRV_CSENSE_ENABLED -#define NRF_DRV_CSENSE_ENABLED 0 -#endif -#if NRF_DRV_CSENSE_ENABLED -// USE_COMP - Use the comparator to implement the capacitive sensor driver. - -// Due to Anomaly 84, COMP I_SOURCE is not functional. It has too high a varation. -//========================================================== -#ifndef USE_COMP -#define USE_COMP 0 -#endif -#if USE_COMP -// TIMER0_FOR_CSENSE - First TIMER instance used by the driver (not used on nRF51). -#ifndef TIMER0_FOR_CSENSE -#define TIMER0_FOR_CSENSE 1 -#endif - -// TIMER1_FOR_CSENSE - Second TIMER instance used by the driver (not used on nRF51). -#ifndef TIMER1_FOR_CSENSE -#define TIMER1_FOR_CSENSE 2 -#endif - -// MEASUREMENT_PERIOD - Single measurement period. -// Time of a single measurement can be calculated as -// T = (1/2)*MEASUREMENT_PERIOD*(1/f_OSC) where f_OSC = I_SOURCE / (2C*(VUP-VDOWN) ). -// I_SOURCE, VUP, and VDOWN are values used to initialize COMP and C is the capacitance of the used pad. - -#ifndef MEASUREMENT_PERIOD -#define MEASUREMENT_PERIOD 20 -#endif - -#endif //USE_COMP -// - -#endif //NRF_DRV_CSENSE_ENABLED -// - -// NRF_QUEUE_ENABLED - nrf_queue - Queue module - - -#ifndef NRF_QUEUE_ENABLED -#define NRF_QUEUE_ENABLED 0 -#endif - -// NRF_STRERROR_ENABLED - nrf_strerror - Library for converting error code to string. - - -#ifndef NRF_STRERROR_ENABLED -#define NRF_STRERROR_ENABLED 1 -#endif - -// RETARGET_ENABLED - retarget - Retargeting stdio functions - - -#ifndef RETARGET_ENABLED -#define RETARGET_ENABLED 1 -#endif - -// SLIP_ENABLED - slip - SLIP encoding and decoding - - -#ifndef SLIP_ENABLED -#define SLIP_ENABLED 0 -#endif - -// app_usbd_cdc_acm - USB CDC ACM class - -//========================================================== -// APP_USBD_CLASS_CDC_ACM_ENABLED - Enabling USBD CDC ACM Class library - - -#ifndef APP_USBD_CLASS_CDC_ACM_ENABLED -#define APP_USBD_CLASS_CDC_ACM_ENABLED 0 -#endif - -// APP_USBD_CDC_ACM_LOG_ENABLED - Enables logging in the module. - - -#ifndef APP_USBD_CDC_ACM_LOG_ENABLED -#define APP_USBD_CDC_ACM_LOG_ENABLED 0 -#endif - -// -//========================================================== - -// app_usbd_msc - USB MSC class - -//========================================================== -// APP_USBD_CLASS_MSC_ENABLED - Enabling USBD MSC Class library - - -#ifndef APP_USBD_CLASS_MSC_ENABLED -#define APP_USBD_CLASS_MSC_ENABLED 0 -#endif - -// APP_USBD_MSC_CLASS_LOG_ENABLED - Enables logging in the module. - - -#ifndef APP_USBD_MSC_CLASS_LOG_ENABLED -#define APP_USBD_MSC_CLASS_LOG_ENABLED 0 -#endif - -// -//========================================================== - -// -//========================================================== - -// nRF_Log - -//========================================================== -// NRF_LOG_ENABLED - nrf_log - Logging -//========================================================== -#ifndef NRF_LOG_ENABLED -#define NRF_LOG_ENABLED 0 -#endif -#if NRF_LOG_ENABLED -// NRF_LOG_USES_COLORS - If enabled then ANSI escape code for colors is prefixed to every string -//========================================================== -#ifndef NRF_LOG_USES_COLORS -#define NRF_LOG_USES_COLORS 0 -#endif -#if NRF_LOG_USES_COLORS -// NRF_LOG_COLOR_DEFAULT - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef NRF_LOG_COLOR_DEFAULT -#define NRF_LOG_COLOR_DEFAULT 0 -#endif - -// NRF_LOG_ERROR_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef NRF_LOG_ERROR_COLOR -#define NRF_LOG_ERROR_COLOR 0 -#endif - -// NRF_LOG_WARNING_COLOR - ANSI escape code prefix. - -// <0=> Default -// <1=> Black -// <2=> Red -// <3=> Green -// <4=> Yellow -// <5=> Blue -// <6=> Magenta -// <7=> Cyan -// <8=> White - -#ifndef NRF_LOG_WARNING_COLOR -#define NRF_LOG_WARNING_COLOR 0 -#endif - -#endif //NRF_LOG_USES_COLORS -// - -// NRF_LOG_DEFAULT_LEVEL - Default Severity level - -// <0=> Off -// <1=> Error -// <2=> Warning -// <3=> Info -// <4=> Debug - -#ifndef NRF_LOG_DEFAULT_LEVEL -#define NRF_LOG_DEFAULT_LEVEL 3 -#endif - -// NRF_LOG_DEFERRED - Enable deffered logger. - -// Log data is buffered and can be processed in idle. -//========================================================== -#ifndef NRF_LOG_DEFERRED -#define NRF_LOG_DEFERRED 0 -#endif -#if NRF_LOG_DEFERRED -// NRF_LOG_DEFERRED_BUFSIZE - Size of the buffer for logs in words. -// Must be power of 2 - -#ifndef NRF_LOG_DEFERRED_BUFSIZE -#define NRF_LOG_DEFERRED_BUFSIZE 256 -#endif - -#endif //NRF_LOG_DEFERRED -// - -// NRF_LOG_USES_TIMESTAMP - Enable timestamping - - -// Function for getting the timestamp is provided by the user - -#ifndef NRF_LOG_USES_TIMESTAMP -#define NRF_LOG_USES_TIMESTAMP 0 -#endif - -#endif //NRF_LOG_ENABLED -// - -// nrf_log_backend - Logging sink - -//========================================================== -// NRF_LOG_BACKEND_MAX_STRING_LENGTH - Buffer for storing single output string -// Logger backend RAM usage is determined by this value. - -#ifndef NRF_LOG_BACKEND_MAX_STRING_LENGTH -#define NRF_LOG_BACKEND_MAX_STRING_LENGTH 256 -#endif - -// NRF_LOG_TIMESTAMP_DIGITS - Number of digits for timestamp -// If higher resolution timestamp source is used it might be needed to increase that - -#ifndef NRF_LOG_TIMESTAMP_DIGITS -#define NRF_LOG_TIMESTAMP_DIGITS 8 -#endif - -// NRF_LOG_BACKEND_SERIAL_USES_UART - If enabled data is printed over UART -//========================================================== -#ifndef NRF_LOG_BACKEND_SERIAL_USES_UART -#define NRF_LOG_BACKEND_SERIAL_USES_UART 0 -#endif -#if NRF_LOG_BACKEND_SERIAL_USES_UART -// NRF_LOG_BACKEND_SERIAL_UART_BAUDRATE - Default Baudrate - -// <323584=> 1200 baud -// <643072=> 2400 baud -// <1290240=> 4800 baud -// <2576384=> 9600 baud -// <3862528=> 14400 baud -// <5152768=> 19200 baud -// <7716864=> 28800 baud -// <10289152=> 38400 baud -// <15400960=> 57600 baud -// <20615168=> 76800 baud -// <30801920=> 115200 baud -// <61865984=> 230400 baud -// <67108864=> 250000 baud -// <121634816=> 460800 baud -// <251658240=> 921600 baud -// <268435456=> 57600 baud - -#ifndef NRF_LOG_BACKEND_SERIAL_UART_BAUDRATE -#define NRF_LOG_BACKEND_SERIAL_UART_BAUDRATE 30801920 -#endif - -// NRF_LOG_BACKEND_SERIAL_UART_TX_PIN - UART TX pin -#ifndef NRF_LOG_BACKEND_SERIAL_UART_TX_PIN -#define NRF_LOG_BACKEND_SERIAL_UART_TX_PIN 4 -#endif - -// NRF_LOG_BACKEND_SERIAL_UART_RX_PIN - UART RX pin -#ifndef NRF_LOG_BACKEND_SERIAL_UART_RX_PIN -#define NRF_LOG_BACKEND_SERIAL_UART_RX_PIN 3 -#endif - -// NRF_LOG_BACKEND_SERIAL_UART_RTS_PIN - UART RTS pin -#ifndef NRF_LOG_BACKEND_SERIAL_UART_RTS_PIN -#define NRF_LOG_BACKEND_SERIAL_UART_RTS_PIN 5 -#endif - -// NRF_LOG_BACKEND_SERIAL_UART_CTS_PIN - UART CTS pin -#ifndef NRF_LOG_BACKEND_SERIAL_UART_CTS_PIN -#define NRF_LOG_BACKEND_SERIAL_UART_CTS_PIN 7 -#endif - -// NRF_LOG_BACKEND_SERIAL_UART_FLOW_CONTROL - Hardware Flow Control - -// <0=> Disabled -// <1=> Enabled - -#ifndef NRF_LOG_BACKEND_SERIAL_UART_FLOW_CONTROL -#define NRF_LOG_BACKEND_SERIAL_UART_FLOW_CONTROL 0 -#endif - -// NRF_LOG_BACKEND_UART_INSTANCE - UART instance used - -// <0=> 0 - -#ifndef NRF_LOG_BACKEND_UART_INSTANCE -#define NRF_LOG_BACKEND_UART_INSTANCE 0 -#endif - -#endif //NRF_LOG_BACKEND_SERIAL_USES_UART -// - -// NRF_LOG_BACKEND_SERIAL_USES_RTT - If enabled data is printed using RTT -//========================================================== -#ifndef NRF_LOG_BACKEND_SERIAL_USES_RTT -#define NRF_LOG_BACKEND_SERIAL_USES_RTT 0 -#endif -#if NRF_LOG_BACKEND_SERIAL_USES_RTT -// NRF_LOG_BACKEND_RTT_OUTPUT_BUFFER_SIZE - RTT output buffer size. -// Should be equal or bigger than \ref NRF_LOG_BACKEND_MAX_STRING_LENGTH. -// This value is used in Segger RTT configuration to set the buffer size -// if it is bigger than default RTT buffer size. - -#ifndef NRF_LOG_BACKEND_RTT_OUTPUT_BUFFER_SIZE -#define NRF_LOG_BACKEND_RTT_OUTPUT_BUFFER_SIZE 512 -#endif - -#endif //NRF_LOG_BACKEND_SERIAL_USES_RTT -// - -// -//========================================================== - -// -//========================================================== - -// nRF_Segger_RTT - -//========================================================== -// segger_rtt - SEGGER RTT - -//========================================================== -// SEGGER_RTT_CONFIG_BUFFER_SIZE_UP - Size of upstream buffer. -// Note that either @ref NRF_LOG_BACKEND_RTT_OUTPUT_BUFFER_SIZE -// or this value is actually used. It depends on which one is bigger. - -#ifndef SEGGER_RTT_CONFIG_BUFFER_SIZE_UP -#define SEGGER_RTT_CONFIG_BUFFER_SIZE_UP 64 -#endif - -// SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS - Size of upstream buffer. -#ifndef SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS -#define SEGGER_RTT_CONFIG_MAX_NUM_UP_BUFFERS 2 -#endif - -// SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN - Size of upstream buffer. -#ifndef SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN -#define SEGGER_RTT_CONFIG_BUFFER_SIZE_DOWN 16 -#endif - -// SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS - Size of upstream buffer. -#ifndef SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS -#define SEGGER_RTT_CONFIG_MAX_NUM_DOWN_BUFFERS 2 -#endif - -// SEGGER_RTT_CONFIG_DEFAULT_MODE - RTT behavior if the buffer is full. - - -// The following modes are supported: -// - SKIP - Do not block, output nothing. -// - TRIM - Do not block, output as much as fits. -// - BLOCK - Wait until there is space in the buffer. -// <0=> SKIP -// <1=> TRIM -// <2=> BLOCK_IF_FIFO_FULL - -#ifndef SEGGER_RTT_CONFIG_DEFAULT_MODE -#define SEGGER_RTT_CONFIG_DEFAULT_MODE 0 -#endif - -// -//========================================================== - -// -//========================================================== - -// <<< end of configuration section >>> -#endif //SDK_CONFIG_H - diff --git a/bsp/nrf5x/nrf52832/applications/startup.c b/bsp/nrf5x/nrf52832/applications/startup.c deleted file mode 100644 index a48524814c..0000000000 --- a/bsp/nrf5x/nrf52832/applications/startup.c +++ /dev/null @@ -1,98 +0,0 @@ -/* - * File : startup.c - * This file is part of RT-Thread RTOS - * COPYRIGHT (C) 2015, RT-Thread Develop Team - * - * The license and distribution terms for this file may be - * found in the file LICENSE in this distribution or at - * http://openlab.rt-thread.com/license/LICENSE - * - * Change Logs: - * Date Author Notes - * 2015-03-01 Yangfs the first version - * 2015-03-27 Bernard code cleanup. - */ - -#include -#include - -#include "board.h" - -/** - * @addtogroup NRF52832 - */ - -/*@{*/ - -extern int rt_application_init(void); - -#ifdef __CC_ARM -extern int Image$$RW_IRAM1$$ZI$$Limit; -#define NRF_SRAM_BEGIN (&Image$$RW_IRAM1$$ZI$$Limit) -#elif __ICCARM__ -#pragma section="HEAP" -#define NRF_SRAM_BEGIN (__segment_end("HEAP")) -#else -extern int __bss_end; -#define NRF_SRAM_BEGIN (&__bss_end) -#endif - -/** - * This function will startup RT-Thread RTOS. - */ -void rtthread_startup(void) -{ - /* init board */ - rt_hw_board_init(); - - /* show version */ - rt_show_version(); - - /* init tick */ - rt_system_tick_init(); - - /* init kernel object */ - rt_system_object_init(); - - /* init timer system */ - rt_system_timer_init(); - -#ifdef RT_USING_HEAP - rt_system_heap_init((void*)NRF_SRAM_BEGIN, (void*)CHIP_SRAM_END); -#endif - - /* init scheduler system */ - rt_system_scheduler_init(); - -#ifdef RT_USING_COMPONENTS_INIT - rt_components_init(); -#endif - - /* init application */ - rt_application_init(); - - /* init timer thread */ - rt_system_timer_thread_init(); - - /* init idle thread */ - rt_thread_idle_init(); - - /* start scheduler */ - rt_system_scheduler_start(); - - /* never reach here */ - return ; -} - -int main(void) -{ - /* disable interrupt first */ - // rt_hw_interrupt_disable(); - - /* startup RT-Thread RTOS */ - rtthread_startup(); - - return 0; -} - -/*@}*/ diff --git a/bsp/nrf5x/nrf52832/board/Kconfig b/bsp/nrf5x/nrf52832/board/Kconfig index 40823ab976..5241d56318 100644 --- a/bsp/nrf5x/nrf52832/board/Kconfig +++ b/bsp/nrf5x/nrf52832/board/Kconfig @@ -2,21 +2,293 @@ menu "Hardware Drivers Config" config SOC_NRF52832 bool + config SOC_NRF52832 select RT_USING_COMPONENTS_INIT - # select RT_USING_USER_MAIN + select RT_USING_USER_MAIN + default y + +config SOC_NORDIC + bool + config SOC_NORDIC default y -menu "Onboard Peripheral Drivers" +menu "Onboard Peripheral Drivers" + config BSP_USING_JLINK_TO_USART + bool "Enable JLINK TO USART (uart0|RX_PIN:8|TX_PIN:6)" + select BSP_USING_UART + select BSP_USING_UART0 + default y endmenu menu "On-chip Peripheral Drivers" - + config BSP_USING_GPIO + bool "Enable GPIO" + select RT_USING_PIN + default y + menuconfig BSP_USING_PWM + bool "Enable PWM" + select RT_USING_PWM + default n + if BSP_USING_PWM + config NRFX_PWM_ENABLED + int + default 1 + config BSP_USING_PWM0 + bool "Enable PWM0 bus" + default y + if BSP_USING_PWM0 + config NRFX_PWM0_ENABLED + int + default 1 + config BSP_USING_PWM0_CH0 + int "PWM0 channel 0 pin number set" + range 0 47 + default 13 + config BSP_USING_PWM0_CH1 + int "PWM0 channel 1 pin number set" + range 0 47 + default 14 + config BSP_USING_PWM0_CH2 + int "PWM0 channel 2 pin number set" + range 0 47 + default 15 + config BSP_USING_PWM0_CH3 + int "PWM0 channel 3 pin number set" + range 0 47 + default 16 + endif + config BSP_USING_PWM1 + bool "Enable PWM1 bus" + default n + if BSP_USING_PWM1 + config NRFX_PWM1_ENABLED + int + default 1 + config BSP_USING_PWM1_CH0 + int "PWM1 channel 0 pin number set" + range 0 47 + default 13 + config BSP_USING_PWM1_CH1 + int "PWM1 channel 1 pin number set" + range 0 47 + default 14 + config BSP_USING_PWM1_CH2 + int "PWM1 channel 2 pin number set" + range 0 47 + default 15 + config BSP_USING_PWM1_CH3 + int "PWM1 channel 3 pin number set" + range 0 47 + default 16 + endif + config BSP_USING_PWM2 + bool "Enable PWM2 bus" + default n + if BSP_USING_PWM2 + config NRFX_PWM2_ENABLED + int + default 1 + config BSP_USING_PWM2_CH0 + int "PWM2 channel 0 pin number set" + range 0 47 + default 13 + config BSP_USING_PWM2_CH1 + int "PWM2 channel 1 pin number set" + range 0 47 + default 14 + config BSP_USING_PWM2_CH2 + int "PWM2 channel 2 pin number set" + range 0 47 + default 15 + config BSP_USING_PWM2_CH3 + int "PWM2 channel 3 pin number set" + range 0 47 + default 16 + endif + config BSP_USING_PWM3 + bool "Enable PWM3 bus" + default n + if BSP_USING_PWM3 + config NRFX_PWM3_ENABLED + int + default 1 + config BSP_USING_PWM3_CH0 + int "PWM3 channel 0 pin number set" + range 0 47 + default 13 + config BSP_USING_PWM3_CH1 + int "PWM3 channel 1 pin number set" + range 0 47 + default 14 + config BSP_USING_PWM3_CH2 + int "PWM3 channel 2 pin number set" + range 0 47 + default 15 + config BSP_USING_PWM3_CH3 + int "PWM3 channel 3 pin number set" + range 0 47 + default 16 + endif + endif + menuconfig BSP_USING_SOFTDEVICE + bool "Enable NRF SOFTDEVICE" + select PKG_USING_NRF5X_SDK + select NRFX_CLOCK_ENABLED + default n +if BSP_USING_SOFTDEVICE + config NRFX_CLOCK_ENABLED + int + default 1 + config NRFX_CLOCK_DEFAULT_CONFIG_IRQ_PRIORITY + int + default 7 + config NRFX_RTC_ENABLED + int + default 1 + config NRFX_RTC1_ENABLED + int + default 1 + config NRF_CLOCK_ENABLED + int + default 1 + config NRF_SDH_BLE_ENABLED + int + default 1 + config NRF_SDH_ENABLED + int + default 1 + config NRF_SDH_SOC_ENABLED + int + default 1 +endif menuconfig BSP_USING_UART bool "Enable UART" default y select RT_USING_SERIAL + if BSP_USING_UART + config BSP_USING_UART0 + bool "Enable UART0" + default y + if BSP_USING_UART0 + config BSP_UART0_RX_PIN + int "uart0 rx pin number" + range 0 31 + default 8 + config BSP_UART0_TX_PIN + int "uart0 tx pin number" + range 0 31 + default 6 + endif + config BSP_USING_UART1 + bool "Enable UART1" + default n + endif + + config BSP_USING_SPI + bool "Enable SPI" + select RT_USING_PIN + default y + + if BSP_USING_SPI + config BSP_USING_SPI0 + bool "Enable SPI0 bus" + default y + if BSP_USING_SPI0 + config BSP_SPI0_SCK_PIN + int "SPI0 sck pin number set" + range 0 47 + default 28 + config BSP_SPI0_MOSI_PIN + int "SPI0 mosi pin number set" + range 0 47 + default 29 + config BSP_SPI0_MISO_PIN + int "SPI0 miso pin number set" + range 0 47 + default 30 + config BSP_SPI0_SS_PIN + int "SPI0 ss pin number set" + range 0 47 + default 31 + endif + + config BSP_USING_SPI1 + bool "Enable SPI1 bus" + default n + if BSP_USING_SPI1 + config BSP_SPI1_SCK_PIN + int "SPI0 sck pin number set" + range 0 47 + default 28 + config BSP_SPI1_MOSI_PIN + int "SPI0 mosi pin number set" + range 0 47 + default 29 + config BSP_SPI1_MISO_PIN + int "SPI0 miso pin number set" + range 0 47 + default 30 + config BSP_SPI1_SS_PIN + int "SPI0 ss pin number set" + range 0 47 + default 31 + endif + + config BSP_USING_SPI2 + bool "Enable SPI2 bus" + default n + if BSP_USING_SPI2 + config BSP_SPI2_SCK_PIN + int "SPI0 sck pin number set" + range 0 47 + default 28 + config BSP_SPI2_MOSI_PIN + int "SPI0 mosi pin number set" + range 0 47 + default 29 + config BSP_SPI2_MISO_PIN + int "SPI0 miso pin number set" + range 0 47 + default 30 + config BSP_SPI2_SS_PIN + int "SPI0 ss pin number set" + range 0 47 + default 31 + endif + + endif + config BSP_USING_ON_CHIP_FLASH + select PKG_USING_FAL + bool "Enable on-chip FLASH" + default n + + menu "On-chip flash config" + + config MCU_FLASH_START_ADDRESS + hex "MCU FLASH START ADDRESS" + default 0x00000000 + + config MCU_FLASH_SIZE_KB + int "MCU FLASH SIZE, MAX size 1024 KB" + range 1 1024 + default 1024 + + config MCU_SRAM_START_ADDRESS + hex "MCU RAM START ADDRESS" + default 0x20000000 + + config MCU_SRAM_SIZE_KB + int "MCU RAM SIZE, MAX size 256 KB" + range 1 256 + default 256 + + config MCU_FLASH_PAGE_SIZE + hex "MCU FLASH PAGE SIZE, please not change,nrfx default is 0x1000" + range 0x1000 0x1000 + default 0x1000 + endmenu endmenu endmenu diff --git a/bsp/nrf5x/nrf52832/board/SConscript b/bsp/nrf5x/nrf52832/board/SConscript index abe43c5729..27bcddd310 100644 --- a/bsp/nrf5x/nrf52832/board/SConscript +++ b/bsp/nrf5x/nrf52832/board/SConscript @@ -5,6 +5,7 @@ from building import * cwd = GetCurrentDir() src = Glob('*.c') CPPPATH = [cwd] +define = ['USE_APP_CONFIG'] -group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH,) +group = DefineGroup('Drivers', src, depend = [''], CPPPATH = CPPPATH,CPPDEFINES = define) Return('group') diff --git a/bsp/nrf5x/nrf52832/board/app_config.h b/bsp/nrf5x/nrf52832/board/app_config.h new file mode 100644 index 0000000000..7909dd55b4 --- /dev/null +++ b/bsp/nrf5x/nrf52832/board/app_config.h @@ -0,0 +1,4 @@ +#ifndef APP_CONFIG_H +#define APP_CONFIG_H + +#endif //APP_CONFIG_H diff --git a/bsp/nrf5x/nrf52832/board/board.c b/bsp/nrf5x/nrf52832/board/board.c index 7ff8bfd9c4..d1e55f4c49 100644 --- a/bsp/nrf5x/nrf52832/board/board.c +++ b/bsp/nrf5x/nrf52832/board/board.c @@ -1,220 +1,110 @@ -#include "board.h" -#include "drv_uart.h" -#include "app_util_platform.h" -#include "nrf_drv_common.h" -#include "nrf_systick.h" -#include "nrf_rtc.h" -#include "nrf_drv_clock.h" -#include "softdevice_handler.h" -#include "nrf_drv_uart.h" -#include "nrf_gpio.h" - +/* + * Copyright (c) 2006-2020, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2020-04-29 supperthomas first version + * + */ #include #include +#include -#define TICK_RATE_HZ RT_TICK_PER_SECOND -#define SYSTICK_CLOCK_HZ ( 32768UL ) - -#define NRF_RTC_REG NRF_RTC1 - /* IRQn used by the selected RTC */ -#define NRF_RTC_IRQn RTC1_IRQn - /* Constants required to manipulate the NVIC. */ -#define NRF_RTC_PRESCALER ( (uint32_t) (ROUNDED_DIV(SYSTICK_CLOCK_HZ, TICK_RATE_HZ) - 1) ) - /* Maximum RTC ticks */ -#define NRF_RTC_MAXTICKS ((1U<<24)-1U) - -static volatile uint32_t m_tick_overflow_count = 0; -#define NRF_RTC_BITWIDTH 24 -#define OSTick_Handler RTC1_IRQHandler -#define EXPECTED_IDLE_TIME_BEFORE_SLEEP 2 - -void SysTick_Configuration(void) -{ - nrf_drv_clock_lfclk_request(NULL); - - /* Configure SysTick to interrupt at the requested rate. */ - nrf_rtc_prescaler_set(NRF_RTC_REG, NRF_RTC_PRESCALER); - nrf_rtc_int_enable (NRF_RTC_REG, RTC_INTENSET_TICK_Msk); - nrf_rtc_task_trigger (NRF_RTC_REG, NRF_RTC_TASK_CLEAR); - nrf_rtc_task_trigger (NRF_RTC_REG, NRF_RTC_TASK_START); - nrf_rtc_event_enable(NRF_RTC_REG, RTC_EVTEN_OVRFLW_Msk); - - NVIC_SetPriority(NRF_RTC_IRQn, 0xF); - NVIC_EnableIRQ(NRF_RTC_IRQn); -} +#include "board.h" +#include "drv_uart.h" +#ifdef BSP_USING_SOFTDEVICE +#include +#include +#include "app_error.h" +#include "nrf_drv_clock.h" +const nrfx_rtc_t rtc = NRFX_RTC_INSTANCE(1); /**< Declaring an instance of nrf_drv_rtc for RTC0. */ -static rt_tick_t _tick_distance(void) +static void rtc_handler(nrfx_rtc_int_type_t int_type) { - nrf_rtc_event_clear(NRF_RTC_REG, NRF_RTC_EVENT_COMPARE_0); + if (int_type == NRFX_RTC_INT_TICK) + { + rt_interrupt_enter(); - uint32_t systick_counter = nrf_rtc_counter_get(NRF_RTC_REG); - nrf_rtc_event_clear(NRF_RTC_REG, NRF_RTC_EVENT_TICK); + rt_tick_increase(); - /* check for overflow in TICK counter */ - if(nrf_rtc_event_pending(NRF_RTC_REG, NRF_RTC_EVENT_OVERFLOW)) - { - nrf_rtc_event_clear(NRF_RTC_REG, NRF_RTC_EVENT_OVERFLOW); - m_tick_overflow_count++; + rt_interrupt_leave(); } - - return ((m_tick_overflow_count << NRF_RTC_BITWIDTH) + systick_counter) - rt_tick_get(); } - -void OSTick_Handler( void ) +#else +/** + * This is the timer interrupt service routine. + * + */ +void SysTick_Handler(void) { - uint32_t diff; - - /* enter interrupt */ + /* enter interrupt */ rt_interrupt_enter(); - diff = _tick_distance(); - while((diff--) > 0) - { - if (rt_thread_self() != RT_NULL) - { - rt_tick_increase(); - } - } + rt_tick_increase(); + /* leave interrupt */ rt_interrupt_leave(); } - -static void _wakeup_tick_adjust(void) -{ - uint32_t diff; - uint32_t level; - - level = rt_hw_interrupt_disable(); - - diff = _tick_distance(); - - rt_tick_set(rt_tick_get() + diff); - - if (rt_thread_self() != RT_NULL) - { - struct rt_thread *thread; - - /* check time slice */ - thread = rt_thread_self(); - - if (thread->remaining_tick <= diff) - { - /* change to initialized tick */ - thread->remaining_tick = thread->init_tick; - - /* yield */ - rt_thread_yield(); - } - else - { - thread->remaining_tick -= diff; - } - - /* check timer */ - rt_timer_check(); - } - - rt_hw_interrupt_enable(level); -} - -static void _sleep_ongo( uint32_t sleep_tick ) +#endif +void SysTick_Configuration(void) { - uint32_t enterTime; - uint32_t entry_tick; - - /* Make sure the SysTick reload value does not overflow the counter. */ - if ( sleep_tick > NRF_RTC_MAXTICKS - EXPECTED_IDLE_TIME_BEFORE_SLEEP ) - { - sleep_tick = NRF_RTC_MAXTICKS - EXPECTED_IDLE_TIME_BEFORE_SLEEP; - } - - rt_enter_critical(); - - enterTime = nrf_rtc_counter_get(NRF_RTC_REG); - - { - uint32_t wakeupTime = (enterTime + sleep_tick) & NRF_RTC_MAXTICKS; - - /* Stop tick events */ - nrf_rtc_int_disable(NRF_RTC_REG, NRF_RTC_INT_TICK_MASK); - - /* Configure CTC interrupt */ - nrf_rtc_cc_set(NRF_RTC_REG, 0, wakeupTime); - nrf_rtc_event_clear(NRF_RTC_REG, NRF_RTC_EVENT_COMPARE_0); - nrf_rtc_int_enable(NRF_RTC_REG, NRF_RTC_INT_COMPARE0_MASK); +#ifdef BSP_USING_SOFTDEVICE + nrf_drv_clock_init(); + nrf_drv_clock_lfclk_request(NULL); - entry_tick = rt_tick_get(); + uint32_t err_code; +#define TICK_RATE_HZ RT_TICK_PER_SECOND +#define SYSTICK_CLOCK_HZ ( 32768UL ) - __DSB(); +#define NRF_RTC_REG NRF_RTC1 + /* IRQn used by the selected RTC */ +#define NRF_RTC_IRQn RTC1_IRQn + /* Constants required to manipulate the NVIC. */ +#define NRF_RTC_PRESCALER ( (uint32_t) (NRFX_ROUNDED_DIV(SYSTICK_CLOCK_HZ, TICK_RATE_HZ) - 1) ) + nrfx_rtc_config_t config = NRFX_RTC_DEFAULT_CONFIG; + config.prescaler = NRF_RTC_PRESCALER; + + err_code = nrfx_rtc_init(&rtc, &config, rtc_handler); + // APP_ERROR_CHECK(err_code); + nrfx_rtc_tick_enable(&rtc, true); +#define COMPARE_COUNTERTIME (3UL) /**< Get Compare event COMPARE_TIME seconds after the counter starts from 0. */ + //Set compare channel to trigger interrupt after COMPARE_COUNTERTIME seconds + err_code = nrfx_rtc_cc_set(&rtc, 0, COMPARE_COUNTERTIME * 8, true); + // APP_ERROR_CHECK(err_code); + + //Power on RTC instance + nrfx_rtc_enable(&rtc); +#else + /* Set interrupt priority */ + NVIC_SetPriority(SysTick_IRQn, 0xf); - if ( sleep_tick > 0 ) - { -#ifdef SOFTDEVICE_PRESENT - if (softdevice_handler_is_enabled()) - { - uint32_t err_code = sd_app_evt_wait(); - APP_ERROR_CHECK(err_code); - } - else + /* Configure SysTick to interrupt at the requested rate. */ + nrf_systick_load_set(SystemCoreClock / RT_TICK_PER_SECOND); + nrf_systick_val_clear(); + nrf_systick_csr_set(NRF_SYSTICK_CSR_CLKSOURCE_CPU | NRF_SYSTICK_CSR_TICKINT_ENABLE + | NRF_SYSTICK_CSR_ENABLE); #endif - { - /* No SD - we would just block interrupts globally. - * BASEPRI cannot be used for that because it would prevent WFE from wake up. - */ - do{ - __WFE(); - } while (0 == (NVIC->ISPR[0] | NVIC->ISPR[1])); - } - } - - nrf_rtc_int_disable(NRF_RTC_REG, NRF_RTC_INT_COMPARE0_MASK); - nrf_rtc_event_clear(NRF_RTC_REG, NRF_RTC_EVENT_COMPARE_0); - - _wakeup_tick_adjust(); - - /* Correct the system ticks */ - { - - nrf_rtc_event_clear(NRF_RTC_REG, NRF_RTC_EVENT_TICK); - nrf_rtc_int_enable (NRF_RTC_REG, NRF_RTC_INT_TICK_MASK); - /* It is important that we clear pending here so that our corrections are latest and in sync with tick_interrupt handler */ - NVIC_ClearPendingIRQ(NRF_RTC_IRQn); - } - - // rt_kprintf("entry tick:%u, expected:%u, current tick:%u\n", entry_tick, sleep_tick, rt_tick_get()); - } - - rt_exit_critical(); } -void rt_hw_system_powersave(void) -{ - uint32_t sleep_tick; - - sleep_tick = rt_timer_next_timeout_tick() - rt_tick_get(); - - if ( sleep_tick >= EXPECTED_IDLE_TIME_BEFORE_SLEEP) - { - // rt_kprintf("sleep entry:%u\n", rt_tick_get()); - _sleep_ongo( sleep_tick ); - } -} - void rt_hw_board_init(void) { + rt_hw_interrupt_enable(0); // sd_power_dcdc_mode_set(NRF_POWER_DCDC_ENABLE); /* Activate deep sleep mode */ SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk; - nrf_drv_clock_init(); - // nrf_drv_clock_hfclk_request(0); - SysTick_Configuration(); - rt_thread_idle_sethook(rt_hw_system_powersave); +#if defined(RT_USING_HEAP) + rt_system_heap_init((void *)HEAP_BEGIN, (void *)HEAP_END); +#endif +#ifdef RT_USING_SERIAL rt_hw_uart_init(); +#endif #ifdef RT_USING_CONSOLE rt_console_set_device(RT_CONSOLE_DEVICE_NAME); @@ -223,5 +113,20 @@ void rt_hw_board_init(void) #ifdef RT_USING_COMPONENTS_INIT rt_components_board_init(); #endif + +#ifdef BSP_USING_SOFTDEVICE + extern uint32_t Image$$RW_IRAM1$$Base; + uint32_t const *const m_ram_start = &Image$$RW_IRAM1$$Base; + if ((uint32_t)m_ram_start == 0x20000000) + { + rt_kprintf("\r\n using softdevice the RAM couldn't be %p,please use the templete from package\r\n", m_ram_start); + while (1); + } + else + { + rt_kprintf("\r\n using softdevice the RAM at %p\r\n", m_ram_start); + } +#endif + } diff --git a/bsp/nrf5x/nrf52832/board/board.h b/bsp/nrf5x/nrf52832/board/board.h index f9d291792a..f808960780 100644 --- a/bsp/nrf5x/nrf52832/board/board.h +++ b/bsp/nrf5x/nrf52832/board/board.h @@ -2,10 +2,26 @@ #define _BOARD_H_ #include - +#include #include "nrf.h" -#define CHIP_SRAM_END (0x20000000 + 64*1024) +#define MCU_FLASH_SIZE MCU_FLASH_SIZE_KB*1024 +#define MCU_FLASH_END_ADDRESS ((uint32_t)(MCU_FLASH_START_ADDRESS + MCU_FLASH_SIZE)) +#define MCU_SRAM_SIZE MCU_SRAM_SIZE_KB*1024 +#define MCU_SRAM_END_ADDRESS (MCU_SRAM_START_ADDRESS + MCU_SRAM_SIZE) + +#if defined(__CC_ARM) || defined(__CLANG_ARM) +extern int Image$$RW_IRAM1$$ZI$$Limit; +#define HEAP_BEGIN ((void *)&Image$$RW_IRAM1$$ZI$$Limit) +#elif __ICCARM__ +#pragma section="CSTACK" +#define HEAP_BEGIN (__segment_end("CSTACK")) +#else +extern int __bss_end; +#define HEAP_BEGIN ((void *)&__bss_end) +#endif + +#define HEAP_END (0x20000000 + 64*1024) void rt_hw_board_init(void); diff --git a/bsp/nrf5x/nrf52832/board/linker_scripts/link.sct b/bsp/nrf5x/nrf52832/board/linker_scripts/link.sct index 0200e96087..a2f8ebd922 100644 --- a/bsp/nrf5x/nrf52832/board/linker_scripts/link.sct +++ b/bsp/nrf5x/nrf52832/board/linker_scripts/link.sct @@ -2,13 +2,13 @@ ; *** Scatter-Loading Description File generated by uVision *** ; ************************************************************* -LR_IROM1 0x0001F000 0x00061000 { ; load region size_region - ER_IROM1 0x0001F000 0x00061000 { ; load address = execution address +LR_IROM1 0x00000000 0x100000 { ; load region size_region + ER_IROM1 0x00000000 0x100000 { ; load address = execution address *.o (RESET, +First) *(InRoot$$Sections) .ANY (+RO) } - RW_IRAM1 0x200025F8 0x0000DA08 { ; RW data + RW_IRAM1 0x20000000 0x40000 { ; RW data .ANY (+RW +ZI) } } diff --git a/bsp/nrf5x/nrf52832/board/nrfx_config.h b/bsp/nrf5x/nrf52832/board/nrfx_config.h new file mode 100644 index 0000000000..b006b6bcd5 --- /dev/null +++ b/bsp/nrf5x/nrf52832/board/nrfx_config.h @@ -0,0 +1,47 @@ +/** + * Copyright (c) 2017 - 2019, Nordic Semiconductor ASA + * + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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 NRFX_CONFIG_H__ +#define NRFX_CONFIG_H__ + +// TODO - temporary redirection +#include + +#endif // NRFX_CONFIG_H__ diff --git a/bsp/nrf5x/nrf52832/board/nrfx_glue.h b/bsp/nrf5x/nrf52832/board/nrfx_glue.h new file mode 100644 index 0000000000..28025dafae --- /dev/null +++ b/bsp/nrf5x/nrf52832/board/nrfx_glue.h @@ -0,0 +1,269 @@ +/* + * Copyright (c) 2017 - 2020, Nordic Semiconductor ASA + * 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 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. + * + * 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 NRFX_GLUE_H__ +#define NRFX_GLUE_H__ + +// THIS IS A TEMPLATE FILE. +// It should be copied to a suitable location within the host environment into +// which nrfx is integrated, and the following macros should be provided with +// appropriate implementations. +// And this comment should be removed from the customized file. + +#ifdef __cplusplus +extern "C" { +#endif +#include +#include "nrf.h" +/** + * @defgroup nrfx_glue nrfx_glue.h + * @{ + * @ingroup nrfx + * + * @brief This file contains macros that should be implemented according to + * the needs of the host environment into which @em nrfx is integrated. + */ + +// Uncomment this line to use the standard MDK way of binding IRQ handlers +// at linking time. +#include + +//------------------------------------------------------------------------------ + +/** + * @brief Macro for placing a runtime assertion. + * + * @param expression Expression to be evaluated. + */ +#define NRFX_ASSERT(expression) + +/** + * @brief Macro for placing a compile time assertion. + * + * @param expression Expression to be evaluated. + */ +#define NRFX_STATIC_ASSERT(expression) + +//------------------------------------------------------------------------------ + +/** + * @brief Macro for setting the priority of a specific IRQ. + * + * @param irq_number IRQ number. + * @param priority Priority to be set. + */ +#define NRFX_IRQ_PRIORITY_SET(irq_number, priority) NVIC_SetPriority(irq_number, priority) + +/** + * @brief Macro for enabling a specific IRQ. + * + * @param irq_number IRQ number. + */ +#define NRFX_IRQ_ENABLE(irq_number) NVIC_EnableIRQ(irq_number) + +/** + * @brief Macro for checking if a specific IRQ is enabled. + * + * @param irq_number IRQ number. + * + * @retval true If the IRQ is enabled. + * @retval false Otherwise. + */ +#define NRFX_IRQ_IS_ENABLED(irq_number) _NRFX_IRQ_IS_ENABLED(irq_number) +static inline bool _NRFX_IRQ_IS_ENABLED(IRQn_Type irq_number) +{ + return 0 != (NVIC->ISER[irq_number / 32] & (1UL << (irq_number % 32))); +} + + +/** + * @brief Macro for disabling a specific IRQ. + * + * @param irq_number IRQ number. + */ +#define NRFX_IRQ_DISABLE(irq_number) _NRFX_IRQ_DISABLE(irq_number) +static inline void _NRFX_IRQ_DISABLE(IRQn_Type irq_number) +{ + NVIC_DisableIRQ(irq_number); +} + + +/** + * @brief Macro for setting a specific IRQ as pending. + * + * @param irq_number IRQ number. + */ +#define NRFX_IRQ_PENDING_SET(irq_number) + +/** + * @brief Macro for clearing the pending status of a specific IRQ. + * + * @param irq_number IRQ number. + */ +#define NRFX_IRQ_PENDING_CLEAR(irq_number) + +/** + * @brief Macro for checking the pending status of a specific IRQ. + * + * @retval true If the IRQ is pending. + * @retval false Otherwise. + */ +#define NRFX_IRQ_IS_PENDING(irq_number) + +/** @brief Macro for entering into a critical section. */ +#define NRFX_CRITICAL_SECTION_ENTER() + +/** @brief Macro for exiting from a critical section. */ +#define NRFX_CRITICAL_SECTION_EXIT() + +//------------------------------------------------------------------------------ + +/** + * @brief When set to a non-zero value, this macro specifies that + * @ref nrfx_coredep_delay_us uses a precise DWT-based solution. + * A compilation error is generated if the DWT unit is not present + * in the SoC used. + */ +#define NRFX_DELAY_DWT_BASED 0 + +/** + * @brief Macro for delaying the code execution for at least the specified time. + * + * @param us_time Number of microseconds to wait. + */ +#define NRFX_DELAY_US(us_time) + +//------------------------------------------------------------------------------ + +/** @brief Atomic 32-bit unsigned type. */ +#define nrfx_atomic_t + +/** + * @brief Macro for storing a value to an atomic object and returning its previous value. + * + * @param[in] p_data Atomic memory pointer. + * @param[in] value Value to store. + * + * @return Previous value of the atomic object. + */ +#define NRFX_ATOMIC_FETCH_STORE(p_data, value) + +/** + * @brief Macro for running a bitwise OR operation on an atomic object and returning its previous value. + * + * @param[in] p_data Atomic memory pointer. + * @param[in] value Value of the second operand in the OR operation. + * + * @return Previous value of the atomic object. + */ +#define NRFX_ATOMIC_FETCH_OR(p_data, value) + +/** + * @brief Macro for running a bitwise AND operation on an atomic object + * and returning its previous value. + * + * @param[in] p_data Atomic memory pointer. + * @param[in] value Value of the second operand in the AND operation. + * + * @return Previous value of the atomic object. + */ +#define NRFX_ATOMIC_FETCH_AND(p_data, value) + +/** + * @brief Macro for running a bitwise XOR operation on an atomic object + * and returning its previous value. + * + * @param[in] p_data Atomic memory pointer. + * @param[in] value Value of the second operand in the XOR operation. + * + * @return Previous value of the atomic object. + */ +#define NRFX_ATOMIC_FETCH_XOR(p_data, value) + +/** + * @brief Macro for running an addition operation on an atomic object + * and returning its previous value. + * + * @param[in] p_data Atomic memory pointer. + * @param[in] value Value of the second operand in the ADD operation. + * + * @return Previous value of the atomic object. + */ +#define NRFX_ATOMIC_FETCH_ADD(p_data, value) + +/** + * @brief Macro for running a subtraction operation on an atomic object + * and returning its previous value. + * + * @param[in] p_data Atomic memory pointer. + * @param[in] value Value of the second operand in the SUB operation. + * + * @return Previous value of the atomic object. + */ +#define NRFX_ATOMIC_FETCH_SUB(p_data, value) + +//------------------------------------------------------------------------------ + +/** + * @brief When set to a non-zero value, this macro specifies that the + * @ref nrfx_error_codes and the @ref nrfx_err_t type itself are defined + * in a customized way and the default definitions from @c + * should not be used. + */ +#define NRFX_CUSTOM_ERROR_CODES 0 + +//------------------------------------------------------------------------------ + +/** @brief Bitmask that defines DPPI channels that are reserved for use outside of the nrfx library. */ +#define NRFX_DPPI_CHANNELS_USED 0 + +/** @brief Bitmask that defines DPPI groups that are reserved for use outside of the nrfx library. */ +#define NRFX_DPPI_GROUPS_USED 0 + +/** @brief Bitmask that defines PPI channels that are reserved for use outside of the nrfx library. */ +#define NRFX_PPI_CHANNELS_USED 0 + +/** @brief Bitmask that defines PPI groups that are reserved for use outside of the nrfx library. */ +#define NRFX_PPI_GROUPS_USED 0 + +/** @brief Bitmask that defines EGU instances that are reserved for use outside of the nrfx library. */ +#define NRFX_EGUS_USED 0 + +/** @brief Bitmask that defines TIMER instances that are reserved for use outside of the nrfx library. */ +#define NRFX_TIMERS_USED 0 + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif // NRFX_GLUE_H__ diff --git a/bsp/nrf5x/nrf52832/board/nrfx_log.h b/bsp/nrf5x/nrf52832/board/nrfx_log.h new file mode 100644 index 0000000000..80d8efbdf1 --- /dev/null +++ b/bsp/nrf5x/nrf52832/board/nrfx_log.h @@ -0,0 +1,135 @@ +/* + * Copyright (c) 2017 - 2020, Nordic Semiconductor ASA + * 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 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. + * + * 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 NRFX_LOG_H__ +#define NRFX_LOG_H__ + +// THIS IS A TEMPLATE FILE. +// It should be copied to a suitable location within the host environment into +// which nrfx is integrated, and the following macros should be provided with +// appropriate implementations. +// And this comment should be removed from the customized file. + +#ifdef __cplusplus +extern "C" { +#endif + +/** + * @defgroup nrfx_log nrfx_log.h + * @{ + * @ingroup nrfx + * + * @brief This file contains macros that should be implemented according to + * the needs of the host environment into which @em nrfx is integrated. + */ + +/** + * @brief Macro for logging a message with the severity level ERROR. + * + * @param format printf-style format string, optionally followed by arguments + * to be formatted and inserted in the resulting string. + */ +#define NRFX_LOG_ERROR(format, ...) + +/** + * @brief Macro for logging a message with the severity level WARNING. + * + * @param format printf-style format string, optionally followed by arguments + * to be formatted and inserted in the resulting string. + */ +#define NRFX_LOG_WARNING(format, ...) + +/** + * @brief Macro for logging a message with the severity level INFO. + * + * @param format printf-style format string, optionally followed by arguments + * to be formatted and inserted in the resulting string. + */ +#define NRFX_LOG_INFO(format, ...) + +/** + * @brief Macro for logging a message with the severity level DEBUG. + * + * @param format printf-style format string, optionally followed by arguments + * to be formatted and inserted in the resulting string. + */ +#define NRFX_LOG_DEBUG(format, ...) + + +/** + * @brief Macro for logging a memory dump with the severity level ERROR. + * + * @param[in] p_memory Pointer to the memory region to be dumped. + * @param[in] length Length of the memory region in bytes. + */ +#define NRFX_LOG_HEXDUMP_ERROR(p_memory, length) + +/** + * @brief Macro for logging a memory dump with the severity level WARNING. + * + * @param[in] p_memory Pointer to the memory region to be dumped. + * @param[in] length Length of the memory region in bytes. + */ +#define NRFX_LOG_HEXDUMP_WARNING(p_memory, length) + +/** + * @brief Macro for logging a memory dump with the severity level INFO. + * + * @param[in] p_memory Pointer to the memory region to be dumped. + * @param[in] length Length of the memory region in bytes. + */ +#define NRFX_LOG_HEXDUMP_INFO(p_memory, length) + +/** + * @brief Macro for logging a memory dump with the severity level DEBUG. + * + * @param[in] p_memory Pointer to the memory region to be dumped. + * @param[in] length Length of the memory region in bytes. + */ +#define NRFX_LOG_HEXDUMP_DEBUG(p_memory, length) + + +/** + * @brief Macro for getting the textual representation of a given error code. + * + * @param[in] error_code Error code. + * + * @return String containing the textual representation of the error code. + */ +#define NRFX_LOG_ERROR_STRING_GET(error_code) + +/** @} */ + +#ifdef __cplusplus +} +#endif + +#endif // NRFX_LOG_H__ diff --git a/bsp/nrf5x/nrf52832/board/sdk_config.h b/bsp/nrf5x/nrf52832/board/sdk_config.h new file mode 100644 index 0000000000..172e0ccc2c --- /dev/null +++ b/bsp/nrf5x/nrf52832/board/sdk_config.h @@ -0,0 +1,11704 @@ +/** + * Copyright (c) 2017 - 2019, Nordic Semiconductor ASA + * + * 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, except as embedded into a Nordic + * Semiconductor ASA integrated circuit in a product or a software update for + * such product, 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 Nordic Semiconductor ASA nor the names of its + * contributors may be used to endorse or promote products derived from this + * software without specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * Nordic Semiconductor ASA integrated circuit. + * + * 5. Any software provided in binary form under this license must not be reverse + * engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY NORDIC SEMICONDUCTOR ASA "AS IS" AND ANY EXPRESS + * OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES + * OF MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL NORDIC SEMICONDUCTOR ASA 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 SDK_CONFIG_H +#define SDK_CONFIG_H +// <<< Use Configuration Wizard in Context Menu >>>\n +#ifdef USE_APP_CONFIG +#include "app_config.h" +#endif +// nRF_BLE + +#include +//========================================================== +// BLE_ADVERTISING_ENABLED - ble_advertising - Advertising module + + +#ifndef BLE_ADVERTISING_ENABLED +#define BLE_ADVERTISING_ENABLED 0 +#endif + +// BLE_DTM_ENABLED - ble_dtm - Module for testing RF/PHY using DTM commands + + +#ifndef BLE_DTM_ENABLED +#define BLE_DTM_ENABLED 0 +#endif + +// BLE_RACP_ENABLED - ble_racp - Record Access Control Point library + + +#ifndef BLE_RACP_ENABLED +#define BLE_RACP_ENABLED 0 +#endif + +// NRF_BLE_QWR_ENABLED - nrf_ble_qwr - Queued writes support module (prepare/execute write) +//========================================================== +#ifndef NRF_BLE_QWR_ENABLED +#define NRF_BLE_QWR_ENABLED 0 +#endif +// NRF_BLE_QWR_MAX_ATTR - Maximum number of attribute handles that can be registered. This number must be adjusted according to the number of attributes for which Queued Writes will be enabled. If it is zero, the module will reject all Queued Write requests. +#ifndef NRF_BLE_QWR_MAX_ATTR +#define NRF_BLE_QWR_MAX_ATTR 0 +#endif + +// + +// PEER_MANAGER_ENABLED - peer_manager - Peer Manager +//========================================================== +#ifndef PEER_MANAGER_ENABLED +#define PEER_MANAGER_ENABLED 0 +#endif +// PM_MAX_REGISTRANTS - Number of event handlers that can be registered. +#ifndef PM_MAX_REGISTRANTS +#define PM_MAX_REGISTRANTS 3 +#endif + +// PM_FLASH_BUFFERS - Number of internal buffers for flash operations. +// Decrease this value to lower RAM usage. + +#ifndef PM_FLASH_BUFFERS +#define PM_FLASH_BUFFERS 4 +#endif + +// PM_CENTRAL_ENABLED - Enable/disable central-specific Peer Manager functionality. + + +// Enable/disable central-specific Peer Manager functionality. + +#ifndef PM_CENTRAL_ENABLED +#define PM_CENTRAL_ENABLED 1 +#endif + +// PM_SERVICE_CHANGED_ENABLED - Enable/disable the service changed management for GATT server in Peer Manager. + + +// If not using a GATT server, or using a server wihout a service changed characteristic, +// disable this to save code space. + +#ifndef PM_SERVICE_CHANGED_ENABLED +#define PM_SERVICE_CHANGED_ENABLED 1 +#endif + +// PM_PEER_RANKS_ENABLED - Enable/disable the peer rank management in Peer Manager. + + +// Set this to false to save code space if not using the peer rank API. + +#ifndef PM_PEER_RANKS_ENABLED +#define PM_PEER_RANKS_ENABLED 1 +#endif + +// PM_LESC_ENABLED - Enable/disable LESC support in Peer Manager. + + +// If set to true, you need to call nrf_ble_lesc_request_handler() in the main loop to respond to LESC-related BLE events. If LESC support is not required, set this to false to save code space. + +#ifndef PM_LESC_ENABLED +#define PM_LESC_ENABLED 0 +#endif + +// PM_RA_PROTECTION_ENABLED - Enable/disable protection against repeated pairing attempts in Peer Manager. +//========================================================== +#ifndef PM_RA_PROTECTION_ENABLED +#define PM_RA_PROTECTION_ENABLED 0 +#endif +// PM_RA_PROTECTION_TRACKED_PEERS_NUM - Maximum number of peers whose authorization status can be tracked. +#ifndef PM_RA_PROTECTION_TRACKED_PEERS_NUM +#define PM_RA_PROTECTION_TRACKED_PEERS_NUM 8 +#endif + +// PM_RA_PROTECTION_MIN_WAIT_INTERVAL - Minimum waiting interval (in ms) before a new pairing attempt can be initiated. +#ifndef PM_RA_PROTECTION_MIN_WAIT_INTERVAL +#define PM_RA_PROTECTION_MIN_WAIT_INTERVAL 4000 +#endif + +// PM_RA_PROTECTION_MAX_WAIT_INTERVAL - Maximum waiting interval (in ms) before a new pairing attempt can be initiated. +#ifndef PM_RA_PROTECTION_MAX_WAIT_INTERVAL +#define PM_RA_PROTECTION_MAX_WAIT_INTERVAL 64000 +#endif + +// PM_RA_PROTECTION_REWARD_PERIOD - Reward period (in ms). +// The waiting interval is gradually decreased when no new failed pairing attempts are made during reward period. + +#ifndef PM_RA_PROTECTION_REWARD_PERIOD +#define PM_RA_PROTECTION_REWARD_PERIOD 10000 +#endif + +// + +// PM_HANDLER_SEC_DELAY_MS - Delay before starting security. +// This might be necessary for interoperability reasons, especially as peripheral. + +#ifndef PM_HANDLER_SEC_DELAY_MS +#define PM_HANDLER_SEC_DELAY_MS 0 +#endif + +// + +// +//========================================================== + +// nRF_BLE_Services + +//========================================================== +// BLE_ANCS_C_ENABLED - ble_ancs_c - Apple Notification Service Client + + +#ifndef BLE_ANCS_C_ENABLED +#define BLE_ANCS_C_ENABLED 0 +#endif + +// BLE_ANS_C_ENABLED - ble_ans_c - Alert Notification Service Client + + +#ifndef BLE_ANS_C_ENABLED +#define BLE_ANS_C_ENABLED 0 +#endif + +// BLE_BAS_C_ENABLED - ble_bas_c - Battery Service Client + + +#ifndef BLE_BAS_C_ENABLED +#define BLE_BAS_C_ENABLED 0 +#endif + +// BLE_BAS_ENABLED - ble_bas - Battery Service +//========================================================== +#ifndef BLE_BAS_ENABLED +#define BLE_BAS_ENABLED 0 +#endif +// BLE_BAS_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef BLE_BAS_CONFIG_LOG_ENABLED +#define BLE_BAS_CONFIG_LOG_ENABLED 0 +#endif +// BLE_BAS_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef BLE_BAS_CONFIG_LOG_LEVEL +#define BLE_BAS_CONFIG_LOG_LEVEL 3 +#endif + +// BLE_BAS_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef BLE_BAS_CONFIG_INFO_COLOR +#define BLE_BAS_CONFIG_INFO_COLOR 0 +#endif + +// BLE_BAS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef BLE_BAS_CONFIG_DEBUG_COLOR +#define BLE_BAS_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// BLE_CSCS_ENABLED - ble_cscs - Cycling Speed and Cadence Service + + +#ifndef BLE_CSCS_ENABLED +#define BLE_CSCS_ENABLED 0 +#endif + +// BLE_CTS_C_ENABLED - ble_cts_c - Current Time Service Client + + +#ifndef BLE_CTS_C_ENABLED +#define BLE_CTS_C_ENABLED 0 +#endif + +// BLE_DIS_ENABLED - ble_dis - Device Information Service + + +#ifndef BLE_DIS_ENABLED +#define BLE_DIS_ENABLED 0 +#endif + +// BLE_GLS_ENABLED - ble_gls - Glucose Service + + +#ifndef BLE_GLS_ENABLED +#define BLE_GLS_ENABLED 0 +#endif + +// BLE_HIDS_ENABLED - ble_hids - Human Interface Device Service + + +#ifndef BLE_HIDS_ENABLED +#define BLE_HIDS_ENABLED 0 +#endif + +// BLE_HRS_C_ENABLED - ble_hrs_c - Heart Rate Service Client + + +#ifndef BLE_HRS_C_ENABLED +#define BLE_HRS_C_ENABLED 0 +#endif + +// BLE_HRS_ENABLED - ble_hrs - Heart Rate Service + + +#ifndef BLE_HRS_ENABLED +#define BLE_HRS_ENABLED 0 +#endif + +// BLE_HTS_ENABLED - ble_hts - Health Thermometer Service + + +#ifndef BLE_HTS_ENABLED +#define BLE_HTS_ENABLED 0 +#endif + +// BLE_IAS_C_ENABLED - ble_ias_c - Immediate Alert Service Client + + +#ifndef BLE_IAS_C_ENABLED +#define BLE_IAS_C_ENABLED 0 +#endif + +// BLE_IAS_ENABLED - ble_ias - Immediate Alert Service +//========================================================== +#ifndef BLE_IAS_ENABLED +#define BLE_IAS_ENABLED 0 +#endif +// BLE_IAS_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef BLE_IAS_CONFIG_LOG_ENABLED +#define BLE_IAS_CONFIG_LOG_ENABLED 0 +#endif +// BLE_IAS_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef BLE_IAS_CONFIG_LOG_LEVEL +#define BLE_IAS_CONFIG_LOG_LEVEL 3 +#endif + +// BLE_IAS_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef BLE_IAS_CONFIG_INFO_COLOR +#define BLE_IAS_CONFIG_INFO_COLOR 0 +#endif + +// BLE_IAS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef BLE_IAS_CONFIG_DEBUG_COLOR +#define BLE_IAS_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// BLE_LBS_C_ENABLED - ble_lbs_c - Nordic LED Button Service Client + + +#ifndef BLE_LBS_C_ENABLED +#define BLE_LBS_C_ENABLED 0 +#endif + +// BLE_LBS_ENABLED - ble_lbs - LED Button Service + + +#ifndef BLE_LBS_ENABLED +#define BLE_LBS_ENABLED 0 +#endif + +// BLE_LLS_ENABLED - ble_lls - Link Loss Service + + +#ifndef BLE_LLS_ENABLED +#define BLE_LLS_ENABLED 0 +#endif + +// BLE_NUS_C_ENABLED - ble_nus_c - Nordic UART Central Service + + +#ifndef BLE_NUS_C_ENABLED +#define BLE_NUS_C_ENABLED 0 +#endif + +// BLE_NUS_ENABLED - ble_nus - Nordic UART Service +//========================================================== +#ifndef BLE_NUS_ENABLED +#define BLE_NUS_ENABLED 0 +#endif +// BLE_NUS_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef BLE_NUS_CONFIG_LOG_ENABLED +#define BLE_NUS_CONFIG_LOG_ENABLED 0 +#endif +// BLE_NUS_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef BLE_NUS_CONFIG_LOG_LEVEL +#define BLE_NUS_CONFIG_LOG_LEVEL 3 +#endif + +// BLE_NUS_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef BLE_NUS_CONFIG_INFO_COLOR +#define BLE_NUS_CONFIG_INFO_COLOR 0 +#endif + +// BLE_NUS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef BLE_NUS_CONFIG_DEBUG_COLOR +#define BLE_NUS_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// BLE_RSCS_C_ENABLED - ble_rscs_c - Running Speed and Cadence Client + + +#ifndef BLE_RSCS_C_ENABLED +#define BLE_RSCS_C_ENABLED 0 +#endif + +// BLE_RSCS_ENABLED - ble_rscs - Running Speed and Cadence Service + + +#ifndef BLE_RSCS_ENABLED +#define BLE_RSCS_ENABLED 0 +#endif + +// BLE_TPS_ENABLED - ble_tps - TX Power Service + + +#ifndef BLE_TPS_ENABLED +#define BLE_TPS_ENABLED 0 +#endif + +// +//========================================================== + +// nRF_Core + +//========================================================== +// NRF_MPU_LIB_ENABLED - nrf_mpu_lib - Module for MPU +//========================================================== +#ifndef NRF_MPU_LIB_ENABLED +#define NRF_MPU_LIB_ENABLED 0 +#endif +// NRF_MPU_LIB_CLI_CMDS - Enable CLI commands specific to the module. + + +#ifndef NRF_MPU_LIB_CLI_CMDS +#define NRF_MPU_LIB_CLI_CMDS 0 +#endif + +// + +// NRF_STACK_GUARD_ENABLED - nrf_stack_guard - Stack guard +//========================================================== +#ifndef NRF_STACK_GUARD_ENABLED +#define NRF_STACK_GUARD_ENABLED 0 +#endif +// NRF_STACK_GUARD_CONFIG_SIZE - Size of the stack guard. + +// <5=> 32 bytes +// <6=> 64 bytes +// <7=> 128 bytes +// <8=> 256 bytes +// <9=> 512 bytes +// <10=> 1024 bytes +// <11=> 2048 bytes +// <12=> 4096 bytes + +#ifndef NRF_STACK_GUARD_CONFIG_SIZE +#define NRF_STACK_GUARD_CONFIG_SIZE 7 +#endif + +// + +// +//========================================================== + +// nRF_Crypto + +//========================================================== +// NRF_CRYPTO_ENABLED - nrf_crypto - Cryptography library. +//========================================================== +#ifndef NRF_CRYPTO_ENABLED +#define NRF_CRYPTO_ENABLED 1 +#endif +// NRF_CRYPTO_ALLOCATOR - Memory allocator + + +// Choose memory allocator used by nrf_crypto. Default is alloca if possible or nrf_malloc otherwise. If 'User macros' are selected, the user has to create 'nrf_crypto_allocator.h' file that contains NRF_CRYPTO_ALLOC, NRF_CRYPTO_FREE, and NRF_CRYPTO_ALLOC_ON_STACK. +// <0=> Default +// <1=> User macros +// <2=> On stack (alloca) +// <3=> C dynamic memory (malloc) +// <4=> SDK Memory Manager (nrf_malloc) + +#ifndef NRF_CRYPTO_ALLOCATOR +#define NRF_CRYPTO_ALLOCATOR 0 +#endif + +// NRF_CRYPTO_BACKEND_CC310_BL_ENABLED - Enable the ARM Cryptocell CC310 reduced backend. + +// The CC310 hardware-accelerated cryptography backend with reduced functionality and footprint (only available on nRF52840). +//========================================================== +#ifndef NRF_CRYPTO_BACKEND_CC310_BL_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_BL_ENABLED 0 +#endif +// NRF_CRYPTO_BACKEND_CC310_BL_ECC_SECP224R1_ENABLED - Enable the secp224r1 elliptic curve support using CC310_BL. + + +#ifndef NRF_CRYPTO_BACKEND_CC310_BL_ECC_SECP224R1_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_BL_ECC_SECP224R1_ENABLED 0 +#endif + +// NRF_CRYPTO_BACKEND_CC310_BL_ECC_SECP256R1_ENABLED - Enable the secp256r1 elliptic curve support using CC310_BL. + + +#ifndef NRF_CRYPTO_BACKEND_CC310_BL_ECC_SECP256R1_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_BL_ECC_SECP256R1_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_CC310_BL_HASH_SHA256_ENABLED - CC310_BL SHA-256 hash functionality. + + +// CC310_BL backend implementation for hardware-accelerated SHA-256. + +#ifndef NRF_CRYPTO_BACKEND_CC310_BL_HASH_SHA256_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_BL_HASH_SHA256_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_CC310_BL_HASH_AUTOMATIC_RAM_BUFFER_ENABLED - nrf_cc310_bl buffers to RAM before running hash operation + + +// Enabling this makes hashing of addresses in FLASH range possible. Size of buffer allocated for hashing is set by NRF_CRYPTO_BACKEND_CC310_BL_HASH_AUTOMATIC_RAM_BUFFER_SIZE + +#ifndef NRF_CRYPTO_BACKEND_CC310_BL_HASH_AUTOMATIC_RAM_BUFFER_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_BL_HASH_AUTOMATIC_RAM_BUFFER_ENABLED 0 +#endif + +// NRF_CRYPTO_BACKEND_CC310_BL_HASH_AUTOMATIC_RAM_BUFFER_SIZE - nrf_cc310_bl hash outputs digests in little endian +// Makes the nrf_cc310_bl hash functions output digests in little endian format. Only for use in nRF SDK DFU! + +#ifndef NRF_CRYPTO_BACKEND_CC310_BL_HASH_AUTOMATIC_RAM_BUFFER_SIZE +#define NRF_CRYPTO_BACKEND_CC310_BL_HASH_AUTOMATIC_RAM_BUFFER_SIZE 4096 +#endif + +// NRF_CRYPTO_BACKEND_CC310_BL_INTERRUPTS_ENABLED - Enable Interrupts while support using CC310 bl. + + +// Select a library version compatible with the configuration. When interrupts are disable, a version named _noint must be used + +#ifndef NRF_CRYPTO_BACKEND_CC310_BL_INTERRUPTS_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_BL_INTERRUPTS_ENABLED 1 +#endif + +// + +// NRF_CRYPTO_BACKEND_CC310_ENABLED - Enable the ARM Cryptocell CC310 backend. + +// The CC310 hardware-accelerated cryptography backend (only available on nRF52840). +//========================================================== +#ifndef NRF_CRYPTO_BACKEND_CC310_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_ENABLED 0 +#endif +// NRF_CRYPTO_BACKEND_CC310_AES_CBC_ENABLED - Enable the AES CBC mode using CC310. + + +#ifndef NRF_CRYPTO_BACKEND_CC310_AES_CBC_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_AES_CBC_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_CC310_AES_CTR_ENABLED - Enable the AES CTR mode using CC310. + + +#ifndef NRF_CRYPTO_BACKEND_CC310_AES_CTR_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_AES_CTR_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_CC310_AES_ECB_ENABLED - Enable the AES ECB mode using CC310. + + +#ifndef NRF_CRYPTO_BACKEND_CC310_AES_ECB_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_AES_ECB_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_CC310_AES_CBC_MAC_ENABLED - Enable the AES CBC_MAC mode using CC310. + + +#ifndef NRF_CRYPTO_BACKEND_CC310_AES_CBC_MAC_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_AES_CBC_MAC_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_CC310_AES_CMAC_ENABLED - Enable the AES CMAC mode using CC310. + + +#ifndef NRF_CRYPTO_BACKEND_CC310_AES_CMAC_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_AES_CMAC_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_CC310_AES_CCM_ENABLED - Enable the AES CCM mode using CC310. + + +#ifndef NRF_CRYPTO_BACKEND_CC310_AES_CCM_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_AES_CCM_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_CC310_AES_CCM_STAR_ENABLED - Enable the AES CCM* mode using CC310. + + +#ifndef NRF_CRYPTO_BACKEND_CC310_AES_CCM_STAR_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_AES_CCM_STAR_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_CC310_CHACHA_POLY_ENABLED - Enable the CHACHA-POLY mode using CC310. + + +#ifndef NRF_CRYPTO_BACKEND_CC310_CHACHA_POLY_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_CHACHA_POLY_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_CC310_ECC_SECP160R1_ENABLED - Enable the secp160r1 elliptic curve support using CC310. + + +#ifndef NRF_CRYPTO_BACKEND_CC310_ECC_SECP160R1_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_ECC_SECP160R1_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_CC310_ECC_SECP160R2_ENABLED - Enable the secp160r2 elliptic curve support using CC310. + + +#ifndef NRF_CRYPTO_BACKEND_CC310_ECC_SECP160R2_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_ECC_SECP160R2_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_CC310_ECC_SECP192R1_ENABLED - Enable the secp192r1 elliptic curve support using CC310. + + +#ifndef NRF_CRYPTO_BACKEND_CC310_ECC_SECP192R1_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_ECC_SECP192R1_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_CC310_ECC_SECP224R1_ENABLED - Enable the secp224r1 elliptic curve support using CC310. + + +#ifndef NRF_CRYPTO_BACKEND_CC310_ECC_SECP224R1_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_ECC_SECP224R1_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_CC310_ECC_SECP256R1_ENABLED - Enable the secp256r1 elliptic curve support using CC310. + + +#ifndef NRF_CRYPTO_BACKEND_CC310_ECC_SECP256R1_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_ECC_SECP256R1_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_CC310_ECC_SECP384R1_ENABLED - Enable the secp384r1 elliptic curve support using CC310. + + +#ifndef NRF_CRYPTO_BACKEND_CC310_ECC_SECP384R1_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_ECC_SECP384R1_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_CC310_ECC_SECP521R1_ENABLED - Enable the secp521r1 elliptic curve support using CC310. + + +#ifndef NRF_CRYPTO_BACKEND_CC310_ECC_SECP521R1_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_ECC_SECP521R1_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_CC310_ECC_SECP160K1_ENABLED - Enable the secp160k1 elliptic curve support using CC310. + + +#ifndef NRF_CRYPTO_BACKEND_CC310_ECC_SECP160K1_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_ECC_SECP160K1_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_CC310_ECC_SECP192K1_ENABLED - Enable the secp192k1 elliptic curve support using CC310. + + +#ifndef NRF_CRYPTO_BACKEND_CC310_ECC_SECP192K1_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_ECC_SECP192K1_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_CC310_ECC_SECP224K1_ENABLED - Enable the secp224k1 elliptic curve support using CC310. + + +#ifndef NRF_CRYPTO_BACKEND_CC310_ECC_SECP224K1_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_ECC_SECP224K1_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_CC310_ECC_SECP256K1_ENABLED - Enable the secp256k1 elliptic curve support using CC310. + + +#ifndef NRF_CRYPTO_BACKEND_CC310_ECC_SECP256K1_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_ECC_SECP256K1_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_CC310_ECC_CURVE25519_ENABLED - Enable the Curve25519 curve support using CC310. + + +#ifndef NRF_CRYPTO_BACKEND_CC310_ECC_CURVE25519_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_ECC_CURVE25519_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_CC310_ECC_ED25519_ENABLED - Enable the Ed25519 curve support using CC310. + + +#ifndef NRF_CRYPTO_BACKEND_CC310_ECC_ED25519_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_ECC_ED25519_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_CC310_HASH_SHA256_ENABLED - CC310 SHA-256 hash functionality. + + +// CC310 backend implementation for hardware-accelerated SHA-256. + +#ifndef NRF_CRYPTO_BACKEND_CC310_HASH_SHA256_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_HASH_SHA256_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_CC310_HASH_SHA512_ENABLED - CC310 SHA-512 hash functionality + + +// CC310 backend implementation for SHA-512 (in software). + +#ifndef NRF_CRYPTO_BACKEND_CC310_HASH_SHA512_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_HASH_SHA512_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_CC310_HMAC_SHA256_ENABLED - CC310 HMAC using SHA-256 + + +// CC310 backend implementation for HMAC using hardware-accelerated SHA-256. + +#ifndef NRF_CRYPTO_BACKEND_CC310_HMAC_SHA256_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_HMAC_SHA256_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_CC310_HMAC_SHA512_ENABLED - CC310 HMAC using SHA-512 + + +// CC310 backend implementation for HMAC using SHA-512 (in software). + +#ifndef NRF_CRYPTO_BACKEND_CC310_HMAC_SHA512_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_HMAC_SHA512_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_CC310_RNG_ENABLED - Enable RNG support using CC310. + + +#ifndef NRF_CRYPTO_BACKEND_CC310_RNG_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_RNG_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_CC310_INTERRUPTS_ENABLED - Enable Interrupts while support using CC310. + + +// Select a library version compatible with the configuration. When interrupts are disable, a version named _noint must be used + +#ifndef NRF_CRYPTO_BACKEND_CC310_INTERRUPTS_ENABLED +#define NRF_CRYPTO_BACKEND_CC310_INTERRUPTS_ENABLED 1 +#endif + +// + +// NRF_CRYPTO_BACKEND_CIFRA_ENABLED - Enable the Cifra backend. +//========================================================== +#ifndef NRF_CRYPTO_BACKEND_CIFRA_ENABLED +#define NRF_CRYPTO_BACKEND_CIFRA_ENABLED 0 +#endif +// NRF_CRYPTO_BACKEND_CIFRA_AES_EAX_ENABLED - Enable the AES EAX mode using Cifra. + + +#ifndef NRF_CRYPTO_BACKEND_CIFRA_AES_EAX_ENABLED +#define NRF_CRYPTO_BACKEND_CIFRA_AES_EAX_ENABLED 1 +#endif + +// + +// NRF_CRYPTO_BACKEND_MBEDTLS_ENABLED - Enable the mbed TLS backend. +//========================================================== +#ifndef NRF_CRYPTO_BACKEND_MBEDTLS_ENABLED +#define NRF_CRYPTO_BACKEND_MBEDTLS_ENABLED 0 +#endif +// NRF_CRYPTO_BACKEND_MBEDTLS_AES_CBC_ENABLED - Enable the AES CBC mode mbed TLS. + + +#ifndef NRF_CRYPTO_BACKEND_MBEDTLS_AES_CBC_ENABLED +#define NRF_CRYPTO_BACKEND_MBEDTLS_AES_CBC_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_MBEDTLS_AES_CTR_ENABLED - Enable the AES CTR mode using mbed TLS. + + +#ifndef NRF_CRYPTO_BACKEND_MBEDTLS_AES_CTR_ENABLED +#define NRF_CRYPTO_BACKEND_MBEDTLS_AES_CTR_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_MBEDTLS_AES_CFB_ENABLED - Enable the AES CFB mode using mbed TLS. + + +#ifndef NRF_CRYPTO_BACKEND_MBEDTLS_AES_CFB_ENABLED +#define NRF_CRYPTO_BACKEND_MBEDTLS_AES_CFB_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_MBEDTLS_AES_ECB_ENABLED - Enable the AES ECB mode using mbed TLS. + + +#ifndef NRF_CRYPTO_BACKEND_MBEDTLS_AES_ECB_ENABLED +#define NRF_CRYPTO_BACKEND_MBEDTLS_AES_ECB_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_MBEDTLS_AES_CBC_MAC_ENABLED - Enable the AES CBC MAC mode using mbed TLS. + + +#ifndef NRF_CRYPTO_BACKEND_MBEDTLS_AES_CBC_MAC_ENABLED +#define NRF_CRYPTO_BACKEND_MBEDTLS_AES_CBC_MAC_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_MBEDTLS_AES_CMAC_ENABLED - Enable the AES CMAC mode using mbed TLS. + + +#ifndef NRF_CRYPTO_BACKEND_MBEDTLS_AES_CMAC_ENABLED +#define NRF_CRYPTO_BACKEND_MBEDTLS_AES_CMAC_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_MBEDTLS_AES_CCM_ENABLED - Enable the AES CCM mode using mbed TLS. + + +#ifndef NRF_CRYPTO_BACKEND_MBEDTLS_AES_CCM_ENABLED +#define NRF_CRYPTO_BACKEND_MBEDTLS_AES_CCM_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_MBEDTLS_AES_GCM_ENABLED - Enable the AES GCM mode using mbed TLS. + + +#ifndef NRF_CRYPTO_BACKEND_MBEDTLS_AES_GCM_ENABLED +#define NRF_CRYPTO_BACKEND_MBEDTLS_AES_GCM_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_MBEDTLS_ECC_SECP192R1_ENABLED - Enable secp192r1 (NIST 192-bit) curve + + +// Enable this setting if you need secp192r1 (NIST 192-bit) support using MBEDTLS + +#ifndef NRF_CRYPTO_BACKEND_MBEDTLS_ECC_SECP192R1_ENABLED +#define NRF_CRYPTO_BACKEND_MBEDTLS_ECC_SECP192R1_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_MBEDTLS_ECC_SECP224R1_ENABLED - Enable secp224r1 (NIST 224-bit) curve + + +// Enable this setting if you need secp224r1 (NIST 224-bit) support using MBEDTLS + +#ifndef NRF_CRYPTO_BACKEND_MBEDTLS_ECC_SECP224R1_ENABLED +#define NRF_CRYPTO_BACKEND_MBEDTLS_ECC_SECP224R1_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_MBEDTLS_ECC_SECP256R1_ENABLED - Enable secp256r1 (NIST 256-bit) curve + + +// Enable this setting if you need secp256r1 (NIST 256-bit) support using MBEDTLS + +#ifndef NRF_CRYPTO_BACKEND_MBEDTLS_ECC_SECP256R1_ENABLED +#define NRF_CRYPTO_BACKEND_MBEDTLS_ECC_SECP256R1_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_MBEDTLS_ECC_SECP384R1_ENABLED - Enable secp384r1 (NIST 384-bit) curve + + +// Enable this setting if you need secp384r1 (NIST 384-bit) support using MBEDTLS + +#ifndef NRF_CRYPTO_BACKEND_MBEDTLS_ECC_SECP384R1_ENABLED +#define NRF_CRYPTO_BACKEND_MBEDTLS_ECC_SECP384R1_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_MBEDTLS_ECC_SECP521R1_ENABLED - Enable secp521r1 (NIST 521-bit) curve + + +// Enable this setting if you need secp521r1 (NIST 521-bit) support using MBEDTLS + +#ifndef NRF_CRYPTO_BACKEND_MBEDTLS_ECC_SECP521R1_ENABLED +#define NRF_CRYPTO_BACKEND_MBEDTLS_ECC_SECP521R1_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_MBEDTLS_ECC_SECP192K1_ENABLED - Enable secp192k1 (Koblitz 192-bit) curve + + +// Enable this setting if you need secp192k1 (Koblitz 192-bit) support using MBEDTLS + +#ifndef NRF_CRYPTO_BACKEND_MBEDTLS_ECC_SECP192K1_ENABLED +#define NRF_CRYPTO_BACKEND_MBEDTLS_ECC_SECP192K1_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_MBEDTLS_ECC_SECP224K1_ENABLED - Enable secp224k1 (Koblitz 224-bit) curve + + +// Enable this setting if you need secp224k1 (Koblitz 224-bit) support using MBEDTLS + +#ifndef NRF_CRYPTO_BACKEND_MBEDTLS_ECC_SECP224K1_ENABLED +#define NRF_CRYPTO_BACKEND_MBEDTLS_ECC_SECP224K1_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_MBEDTLS_ECC_SECP256K1_ENABLED - Enable secp256k1 (Koblitz 256-bit) curve + + +// Enable this setting if you need secp256k1 (Koblitz 256-bit) support using MBEDTLS + +#ifndef NRF_CRYPTO_BACKEND_MBEDTLS_ECC_SECP256K1_ENABLED +#define NRF_CRYPTO_BACKEND_MBEDTLS_ECC_SECP256K1_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_MBEDTLS_ECC_BP256R1_ENABLED - Enable bp256r1 (Brainpool 256-bit) curve + + +// Enable this setting if you need bp256r1 (Brainpool 256-bit) support using MBEDTLS + +#ifndef NRF_CRYPTO_BACKEND_MBEDTLS_ECC_BP256R1_ENABLED +#define NRF_CRYPTO_BACKEND_MBEDTLS_ECC_BP256R1_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_MBEDTLS_ECC_BP384R1_ENABLED - Enable bp384r1 (Brainpool 384-bit) curve + + +// Enable this setting if you need bp384r1 (Brainpool 384-bit) support using MBEDTLS + +#ifndef NRF_CRYPTO_BACKEND_MBEDTLS_ECC_BP384R1_ENABLED +#define NRF_CRYPTO_BACKEND_MBEDTLS_ECC_BP384R1_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_MBEDTLS_ECC_BP512R1_ENABLED - Enable bp512r1 (Brainpool 512-bit) curve + + +// Enable this setting if you need bp512r1 (Brainpool 512-bit) support using MBEDTLS + +#ifndef NRF_CRYPTO_BACKEND_MBEDTLS_ECC_BP512R1_ENABLED +#define NRF_CRYPTO_BACKEND_MBEDTLS_ECC_BP512R1_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_MBEDTLS_ECC_CURVE25519_ENABLED - Enable Curve25519 curve + + +// Enable this setting if you need Curve25519 support using MBEDTLS + +#ifndef NRF_CRYPTO_BACKEND_MBEDTLS_ECC_CURVE25519_ENABLED +#define NRF_CRYPTO_BACKEND_MBEDTLS_ECC_CURVE25519_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_MBEDTLS_HASH_SHA256_ENABLED - Enable mbed TLS SHA-256 hash functionality. + + +// mbed TLS backend implementation for SHA-256. + +#ifndef NRF_CRYPTO_BACKEND_MBEDTLS_HASH_SHA256_ENABLED +#define NRF_CRYPTO_BACKEND_MBEDTLS_HASH_SHA256_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_MBEDTLS_HASH_SHA512_ENABLED - Enable mbed TLS SHA-512 hash functionality. + + +// mbed TLS backend implementation for SHA-512. + +#ifndef NRF_CRYPTO_BACKEND_MBEDTLS_HASH_SHA512_ENABLED +#define NRF_CRYPTO_BACKEND_MBEDTLS_HASH_SHA512_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_MBEDTLS_HMAC_SHA256_ENABLED - Enable mbed TLS HMAC using SHA-256. + + +// mbed TLS backend implementation for HMAC using SHA-256. + +#ifndef NRF_CRYPTO_BACKEND_MBEDTLS_HMAC_SHA256_ENABLED +#define NRF_CRYPTO_BACKEND_MBEDTLS_HMAC_SHA256_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_MBEDTLS_HMAC_SHA512_ENABLED - Enable mbed TLS HMAC using SHA-512. + + +// mbed TLS backend implementation for HMAC using SHA-512. + +#ifndef NRF_CRYPTO_BACKEND_MBEDTLS_HMAC_SHA512_ENABLED +#define NRF_CRYPTO_BACKEND_MBEDTLS_HMAC_SHA512_ENABLED 1 +#endif + +// + +// NRF_CRYPTO_BACKEND_MICRO_ECC_ENABLED - Enable the micro-ecc backend. +//========================================================== +#ifndef NRF_CRYPTO_BACKEND_MICRO_ECC_ENABLED +#define NRF_CRYPTO_BACKEND_MICRO_ECC_ENABLED 0 +#endif +// NRF_CRYPTO_BACKEND_MICRO_ECC_ECC_SECP192R1_ENABLED - Enable secp192r1 (NIST 192-bit) curve + + +// Enable this setting if you need secp192r1 (NIST 192-bit) support using micro-ecc + +#ifndef NRF_CRYPTO_BACKEND_MICRO_ECC_ECC_SECP192R1_ENABLED +#define NRF_CRYPTO_BACKEND_MICRO_ECC_ECC_SECP192R1_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_MICRO_ECC_ECC_SECP224R1_ENABLED - Enable secp224r1 (NIST 224-bit) curve + + +// Enable this setting if you need secp224r1 (NIST 224-bit) support using micro-ecc + +#ifndef NRF_CRYPTO_BACKEND_MICRO_ECC_ECC_SECP224R1_ENABLED +#define NRF_CRYPTO_BACKEND_MICRO_ECC_ECC_SECP224R1_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_MICRO_ECC_ECC_SECP256R1_ENABLED - Enable secp256r1 (NIST 256-bit) curve + + +// Enable this setting if you need secp256r1 (NIST 256-bit) support using micro-ecc + +#ifndef NRF_CRYPTO_BACKEND_MICRO_ECC_ECC_SECP256R1_ENABLED +#define NRF_CRYPTO_BACKEND_MICRO_ECC_ECC_SECP256R1_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_MICRO_ECC_ECC_SECP256K1_ENABLED - Enable secp256k1 (Koblitz 256-bit) curve + + +// Enable this setting if you need secp256k1 (Koblitz 256-bit) support using micro-ecc + +#ifndef NRF_CRYPTO_BACKEND_MICRO_ECC_ECC_SECP256K1_ENABLED +#define NRF_CRYPTO_BACKEND_MICRO_ECC_ECC_SECP256K1_ENABLED 1 +#endif + +// + +// NRF_CRYPTO_BACKEND_NRF_HW_RNG_ENABLED - Enable the nRF HW RNG backend. + +// The nRF HW backend provide access to RNG peripheral in nRF5x devices. +//========================================================== +#ifndef NRF_CRYPTO_BACKEND_NRF_HW_RNG_ENABLED +#define NRF_CRYPTO_BACKEND_NRF_HW_RNG_ENABLED 0 +#endif +// NRF_CRYPTO_BACKEND_NRF_HW_RNG_MBEDTLS_CTR_DRBG_ENABLED - Enable mbed TLS CTR-DRBG algorithm. + + +// Enable mbed TLS CTR-DRBG standardized by NIST (NIST SP 800-90A Rev. 1). The nRF HW RNG is used as an entropy source for seeding. + +#ifndef NRF_CRYPTO_BACKEND_NRF_HW_RNG_MBEDTLS_CTR_DRBG_ENABLED +#define NRF_CRYPTO_BACKEND_NRF_HW_RNG_MBEDTLS_CTR_DRBG_ENABLED 1 +#endif + +// + +// NRF_CRYPTO_BACKEND_NRF_SW_ENABLED - Enable the legacy nRFx sw for crypto. + +// The nRF SW cryptography backend (only used in bootloader context). +//========================================================== +#ifndef NRF_CRYPTO_BACKEND_NRF_SW_ENABLED +#define NRF_CRYPTO_BACKEND_NRF_SW_ENABLED 0 +#endif +// NRF_CRYPTO_BACKEND_NRF_SW_HASH_SHA256_ENABLED - nRF SW hash backend support for SHA-256 + + +// The nRF SW backend provide access to nRF SDK legacy hash implementation of SHA-256. + +#ifndef NRF_CRYPTO_BACKEND_NRF_SW_HASH_SHA256_ENABLED +#define NRF_CRYPTO_BACKEND_NRF_SW_HASH_SHA256_ENABLED 1 +#endif + +// + +// NRF_CRYPTO_BACKEND_OBERON_ENABLED - Enable the Oberon backend + +// The Oberon backend +//========================================================== +#ifndef NRF_CRYPTO_BACKEND_OBERON_ENABLED +#define NRF_CRYPTO_BACKEND_OBERON_ENABLED 0 +#endif +// NRF_CRYPTO_BACKEND_OBERON_CHACHA_POLY_ENABLED - Enable the CHACHA-POLY mode using Oberon. + + +#ifndef NRF_CRYPTO_BACKEND_OBERON_CHACHA_POLY_ENABLED +#define NRF_CRYPTO_BACKEND_OBERON_CHACHA_POLY_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_OBERON_ECC_SECP256R1_ENABLED - Enable secp256r1 curve + + +// Enable this setting if you need secp256r1 curve support using Oberon library + +#ifndef NRF_CRYPTO_BACKEND_OBERON_ECC_SECP256R1_ENABLED +#define NRF_CRYPTO_BACKEND_OBERON_ECC_SECP256R1_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_OBERON_ECC_CURVE25519_ENABLED - Enable Curve25519 ECDH + + +// Enable this setting if you need Curve25519 ECDH support using Oberon library + +#ifndef NRF_CRYPTO_BACKEND_OBERON_ECC_CURVE25519_ENABLED +#define NRF_CRYPTO_BACKEND_OBERON_ECC_CURVE25519_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_OBERON_ECC_ED25519_ENABLED - Enable Ed25519 signature scheme + + +// Enable this setting if you need Ed25519 support using Oberon library + +#ifndef NRF_CRYPTO_BACKEND_OBERON_ECC_ED25519_ENABLED +#define NRF_CRYPTO_BACKEND_OBERON_ECC_ED25519_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_OBERON_HASH_SHA256_ENABLED - Oberon SHA-256 hash functionality + + +// Oberon backend implementation for SHA-256. + +#ifndef NRF_CRYPTO_BACKEND_OBERON_HASH_SHA256_ENABLED +#define NRF_CRYPTO_BACKEND_OBERON_HASH_SHA256_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_OBERON_HASH_SHA512_ENABLED - Oberon SHA-512 hash functionality + + +// Oberon backend implementation for SHA-512. + +#ifndef NRF_CRYPTO_BACKEND_OBERON_HASH_SHA512_ENABLED +#define NRF_CRYPTO_BACKEND_OBERON_HASH_SHA512_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_OBERON_HMAC_SHA256_ENABLED - Oberon HMAC using SHA-256 + + +// Oberon backend implementation for HMAC using SHA-256. + +#ifndef NRF_CRYPTO_BACKEND_OBERON_HMAC_SHA256_ENABLED +#define NRF_CRYPTO_BACKEND_OBERON_HMAC_SHA256_ENABLED 1 +#endif + +// NRF_CRYPTO_BACKEND_OBERON_HMAC_SHA512_ENABLED - Oberon HMAC using SHA-512 + + +// Oberon backend implementation for HMAC using SHA-512. + +#ifndef NRF_CRYPTO_BACKEND_OBERON_HMAC_SHA512_ENABLED +#define NRF_CRYPTO_BACKEND_OBERON_HMAC_SHA512_ENABLED 1 +#endif + +// + +// NRF_CRYPTO_BACKEND_OPTIGA_ENABLED - Enable the nrf_crypto Optiga Trust X backend. + +// Enables the nrf_crypto backend for Optiga Trust X devices. +//========================================================== +#ifndef NRF_CRYPTO_BACKEND_OPTIGA_ENABLED +#define NRF_CRYPTO_BACKEND_OPTIGA_ENABLED 0 +#endif +// NRF_CRYPTO_BACKEND_OPTIGA_RNG_ENABLED - Optiga backend support for RNG + + +// The Optiga backend provide external chip RNG. + +#ifndef NRF_CRYPTO_BACKEND_OPTIGA_RNG_ENABLED +#define NRF_CRYPTO_BACKEND_OPTIGA_RNG_ENABLED 0 +#endif + +// NRF_CRYPTO_BACKEND_OPTIGA_ECC_SECP256R1_ENABLED - Optiga backend support for ECC secp256r1 + + +// The Optiga backend provide external chip ECC using secp256r1. + +#ifndef NRF_CRYPTO_BACKEND_OPTIGA_ECC_SECP256R1_ENABLED +#define NRF_CRYPTO_BACKEND_OPTIGA_ECC_SECP256R1_ENABLED 1 +#endif + +// + +// NRF_CRYPTO_CURVE25519_BIG_ENDIAN_ENABLED - Big-endian byte order in raw Curve25519 data + + +// Enable big-endian byte order in Curve25519 API, if set to 1. Use little-endian, if set to 0. + +#ifndef NRF_CRYPTO_CURVE25519_BIG_ENDIAN_ENABLED +#define NRF_CRYPTO_CURVE25519_BIG_ENDIAN_ENABLED 0 +#endif + +// + +// +//========================================================== + +// nRF_DFU + +//========================================================== +// ble_dfu - Device Firmware Update + +//========================================================== +// BLE_DFU_ENABLED - Enable DFU Service. + + +#ifndef BLE_DFU_ENABLED +#define BLE_DFU_ENABLED 0 +#endif + +// NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS - Buttonless DFU supports bonds. + + +#ifndef NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS +#define NRF_DFU_BLE_BUTTONLESS_SUPPORTS_BONDS 0 +#endif + +// +//========================================================== + +// +//========================================================== + +// nRF_Drivers + +//========================================================== +// COMP_ENABLED - nrf_drv_comp - COMP peripheral driver - legacy layer +//========================================================== +#ifndef COMP_ENABLED +#define COMP_ENABLED 0 +#endif +// COMP_CONFIG_REF - Reference voltage + +// <0=> Internal 1.2V +// <1=> Internal 1.8V +// <2=> Internal 2.4V +// <4=> VDD +// <7=> ARef + +#ifndef COMP_CONFIG_REF +#define COMP_CONFIG_REF 1 +#endif + +// COMP_CONFIG_MAIN_MODE - Main mode + +// <0=> Single ended +// <1=> Differential + +#ifndef COMP_CONFIG_MAIN_MODE +#define COMP_CONFIG_MAIN_MODE 0 +#endif + +// COMP_CONFIG_SPEED_MODE - Speed mode + +// <0=> Low power +// <1=> Normal +// <2=> High speed + +#ifndef COMP_CONFIG_SPEED_MODE +#define COMP_CONFIG_SPEED_MODE 2 +#endif + +// COMP_CONFIG_HYST - Hystheresis + +// <0=> No +// <1=> 50mV + +#ifndef COMP_CONFIG_HYST +#define COMP_CONFIG_HYST 0 +#endif + +// COMP_CONFIG_ISOURCE - Current Source + +// <0=> Off +// <1=> 2.5 uA +// <2=> 5 uA +// <3=> 10 uA + +#ifndef COMP_CONFIG_ISOURCE +#define COMP_CONFIG_ISOURCE 0 +#endif + +// COMP_CONFIG_INPUT - Analog input + +// <0=> 0 +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef COMP_CONFIG_INPUT +#define COMP_CONFIG_INPUT 0 +#endif + +// COMP_CONFIG_IRQ_PRIORITY - Interrupt priority + + +// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef COMP_CONFIG_IRQ_PRIORITY +#define COMP_CONFIG_IRQ_PRIORITY 6 +#endif + +// + +// EGU_ENABLED - nrf_drv_swi - SWI(EGU) peripheral driver - legacy layer + + +#ifndef EGU_ENABLED +#define EGU_ENABLED 0 +#endif + +// GPIOTE_ENABLED - nrf_drv_gpiote - GPIOTE peripheral driver - legacy layer +//========================================================== +#ifndef GPIOTE_ENABLED +#define GPIOTE_ENABLED 0 +#endif +// GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS - Number of lower power input pins +#ifndef GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS +#define GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS 1 +#endif + +// GPIOTE_CONFIG_IRQ_PRIORITY - Interrupt priority + + +// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef GPIOTE_CONFIG_IRQ_PRIORITY +#define GPIOTE_CONFIG_IRQ_PRIORITY 6 +#endif + +// + +// I2S_ENABLED - nrf_drv_i2s - I2S peripheral driver - legacy layer +//========================================================== +#ifndef I2S_ENABLED +#define I2S_ENABLED 0 +#endif +// I2S_CONFIG_SCK_PIN - SCK pin <0-31> + + +#ifndef I2S_CONFIG_SCK_PIN +#define I2S_CONFIG_SCK_PIN 31 +#endif + +// I2S_CONFIG_LRCK_PIN - LRCK pin <1-31> + + +#ifndef I2S_CONFIG_LRCK_PIN +#define I2S_CONFIG_LRCK_PIN 30 +#endif + +// I2S_CONFIG_MCK_PIN - MCK pin +#ifndef I2S_CONFIG_MCK_PIN +#define I2S_CONFIG_MCK_PIN 255 +#endif + +// I2S_CONFIG_SDOUT_PIN - SDOUT pin <0-31> + + +#ifndef I2S_CONFIG_SDOUT_PIN +#define I2S_CONFIG_SDOUT_PIN 29 +#endif + +// I2S_CONFIG_SDIN_PIN - SDIN pin <0-31> + + +#ifndef I2S_CONFIG_SDIN_PIN +#define I2S_CONFIG_SDIN_PIN 28 +#endif + +// I2S_CONFIG_MASTER - Mode + +// <0=> Master +// <1=> Slave + +#ifndef I2S_CONFIG_MASTER +#define I2S_CONFIG_MASTER 0 +#endif + +// I2S_CONFIG_FORMAT - Format + +// <0=> I2S +// <1=> Aligned + +#ifndef I2S_CONFIG_FORMAT +#define I2S_CONFIG_FORMAT 0 +#endif + +// I2S_CONFIG_ALIGN - Alignment + +// <0=> Left +// <1=> Right + +#ifndef I2S_CONFIG_ALIGN +#define I2S_CONFIG_ALIGN 0 +#endif + +// I2S_CONFIG_SWIDTH - Sample width (bits) + +// <0=> 8 +// <1=> 16 +// <2=> 24 + +#ifndef I2S_CONFIG_SWIDTH +#define I2S_CONFIG_SWIDTH 1 +#endif + +// I2S_CONFIG_CHANNELS - Channels + +// <0=> Stereo +// <1=> Left +// <2=> Right + +#ifndef I2S_CONFIG_CHANNELS +#define I2S_CONFIG_CHANNELS 1 +#endif + +// I2S_CONFIG_MCK_SETUP - MCK behavior + +// <0=> Disabled +// <2147483648=> 32MHz/2 +// <1342177280=> 32MHz/3 +// <1073741824=> 32MHz/4 +// <805306368=> 32MHz/5 +// <671088640=> 32MHz/6 +// <536870912=> 32MHz/8 +// <402653184=> 32MHz/10 +// <369098752=> 32MHz/11 +// <285212672=> 32MHz/15 +// <268435456=> 32MHz/16 +// <201326592=> 32MHz/21 +// <184549376=> 32MHz/23 +// <142606336=> 32MHz/30 +// <138412032=> 32MHz/31 +// <134217728=> 32MHz/32 +// <100663296=> 32MHz/42 +// <68157440=> 32MHz/63 +// <34340864=> 32MHz/125 + +#ifndef I2S_CONFIG_MCK_SETUP +#define I2S_CONFIG_MCK_SETUP 536870912 +#endif + +// I2S_CONFIG_RATIO - MCK/LRCK ratio + +// <0=> 32x +// <1=> 48x +// <2=> 64x +// <3=> 96x +// <4=> 128x +// <5=> 192x +// <6=> 256x +// <7=> 384x +// <8=> 512x + +#ifndef I2S_CONFIG_RATIO +#define I2S_CONFIG_RATIO 2000 +#endif + +// I2S_CONFIG_IRQ_PRIORITY - Interrupt priority + + +// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef I2S_CONFIG_IRQ_PRIORITY +#define I2S_CONFIG_IRQ_PRIORITY 6 +#endif + +// I2S_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef I2S_CONFIG_LOG_ENABLED +#define I2S_CONFIG_LOG_ENABLED 0 +#endif +// I2S_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef I2S_CONFIG_LOG_LEVEL +#define I2S_CONFIG_LOG_LEVEL 3 +#endif + +// I2S_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef I2S_CONFIG_INFO_COLOR +#define I2S_CONFIG_INFO_COLOR 0 +#endif + +// I2S_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef I2S_CONFIG_DEBUG_COLOR +#define I2S_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// LPCOMP_ENABLED - nrf_drv_lpcomp - LPCOMP peripheral driver - legacy layer +//========================================================== +#ifndef LPCOMP_ENABLED +#define LPCOMP_ENABLED 0 +#endif +// LPCOMP_CONFIG_REFERENCE - Reference voltage + +// <0=> Supply 1/8 +// <1=> Supply 2/8 +// <2=> Supply 3/8 +// <3=> Supply 4/8 +// <4=> Supply 5/8 +// <5=> Supply 6/8 +// <6=> Supply 7/8 +// <8=> Supply 1/16 (nRF52) +// <9=> Supply 3/16 (nRF52) +// <10=> Supply 5/16 (nRF52) +// <11=> Supply 7/16 (nRF52) +// <12=> Supply 9/16 (nRF52) +// <13=> Supply 11/16 (nRF52) +// <14=> Supply 13/16 (nRF52) +// <15=> Supply 15/16 (nRF52) +// <7=> External Ref 0 +// <65543=> External Ref 1 + +#ifndef LPCOMP_CONFIG_REFERENCE +#define LPCOMP_CONFIG_REFERENCE 3 +#endif + +// LPCOMP_CONFIG_DETECTION - Detection + +// <0=> Crossing +// <1=> Up +// <2=> Down + +#ifndef LPCOMP_CONFIG_DETECTION +#define LPCOMP_CONFIG_DETECTION 2 +#endif + +// LPCOMP_CONFIG_INPUT - Analog input + +// <0=> 0 +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef LPCOMP_CONFIG_INPUT +#define LPCOMP_CONFIG_INPUT 0 +#endif + +// LPCOMP_CONFIG_HYST - Hysteresis + + +#ifndef LPCOMP_CONFIG_HYST +#define LPCOMP_CONFIG_HYST 0 +#endif + +// LPCOMP_CONFIG_IRQ_PRIORITY - Interrupt priority + + +// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef LPCOMP_CONFIG_IRQ_PRIORITY +#define LPCOMP_CONFIG_IRQ_PRIORITY 6 +#endif + +// + +// NRFX_CLOCK_ENABLED - nrfx_clock - CLOCK peripheral driver +//========================================================== +#ifndef NRFX_CLOCK_ENABLED +#define NRFX_CLOCK_ENABLED 0 +#endif +// NRFX_CLOCK_CONFIG_LF_SRC - LF Clock Source + +// <0=> RC +// <1=> XTAL +// <2=> Synth +// <131073=> External Low Swing +// <196609=> External Full Swing + +#ifndef NRFX_CLOCK_CONFIG_LF_SRC +#define NRFX_CLOCK_CONFIG_LF_SRC 1 +#endif + +// NRFX_CLOCK_CONFIG_IRQ_PRIORITY - Interrupt priority + +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef NRFX_CLOCK_CONFIG_IRQ_PRIORITY +#define NRFX_CLOCK_CONFIG_IRQ_PRIORITY 6 +#endif + +// NRFX_CLOCK_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRFX_CLOCK_CONFIG_LOG_ENABLED +#define NRFX_CLOCK_CONFIG_LOG_ENABLED 0 +#endif +// NRFX_CLOCK_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRFX_CLOCK_CONFIG_LOG_LEVEL +#define NRFX_CLOCK_CONFIG_LOG_LEVEL 3 +#endif + +// NRFX_CLOCK_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_CLOCK_CONFIG_INFO_COLOR +#define NRFX_CLOCK_CONFIG_INFO_COLOR 0 +#endif + +// NRFX_CLOCK_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_CLOCK_CONFIG_DEBUG_COLOR +#define NRFX_CLOCK_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// NRFX_COMP_ENABLED - nrfx_comp - COMP peripheral driver +//========================================================== +#ifndef NRFX_COMP_ENABLED +#define NRFX_COMP_ENABLED 0 +#endif +// NRFX_COMP_CONFIG_REF - Reference voltage + +// <0=> Internal 1.2V +// <1=> Internal 1.8V +// <2=> Internal 2.4V +// <4=> VDD +// <7=> ARef + +#ifndef NRFX_COMP_CONFIG_REF +#define NRFX_COMP_CONFIG_REF 1 +#endif + +// NRFX_COMP_CONFIG_MAIN_MODE - Main mode + +// <0=> Single ended +// <1=> Differential + +#ifndef NRFX_COMP_CONFIG_MAIN_MODE +#define NRFX_COMP_CONFIG_MAIN_MODE 0 +#endif + +// NRFX_COMP_CONFIG_SPEED_MODE - Speed mode + +// <0=> Low power +// <1=> Normal +// <2=> High speed + +#ifndef NRFX_COMP_CONFIG_SPEED_MODE +#define NRFX_COMP_CONFIG_SPEED_MODE 2 +#endif + +// NRFX_COMP_CONFIG_HYST - Hystheresis + +// <0=> No +// <1=> 50mV + +#ifndef NRFX_COMP_CONFIG_HYST +#define NRFX_COMP_CONFIG_HYST 0 +#endif + +// NRFX_COMP_CONFIG_ISOURCE - Current Source + +// <0=> Off +// <1=> 2.5 uA +// <2=> 5 uA +// <3=> 10 uA + +#ifndef NRFX_COMP_CONFIG_ISOURCE +#define NRFX_COMP_CONFIG_ISOURCE 0 +#endif + +// NRFX_COMP_CONFIG_INPUT - Analog input + +// <0=> 0 +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef NRFX_COMP_CONFIG_INPUT +#define NRFX_COMP_CONFIG_INPUT 0 +#endif + +// NRFX_COMP_CONFIG_IRQ_PRIORITY - Interrupt priority + +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef NRFX_COMP_CONFIG_IRQ_PRIORITY +#define NRFX_COMP_CONFIG_IRQ_PRIORITY 6 +#endif + +// NRFX_COMP_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRFX_COMP_CONFIG_LOG_ENABLED +#define NRFX_COMP_CONFIG_LOG_ENABLED 0 +#endif +// NRFX_COMP_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRFX_COMP_CONFIG_LOG_LEVEL +#define NRFX_COMP_CONFIG_LOG_LEVEL 3 +#endif + +// NRFX_COMP_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_COMP_CONFIG_INFO_COLOR +#define NRFX_COMP_CONFIG_INFO_COLOR 0 +#endif + +// NRFX_COMP_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_COMP_CONFIG_DEBUG_COLOR +#define NRFX_COMP_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// NRFX_GPIOTE_ENABLED - nrfx_gpiote - GPIOTE peripheral driver +//========================================================== +#ifndef NRFX_GPIOTE_ENABLED +#define NRFX_GPIOTE_ENABLED 1 +#endif +// NRFX_GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS - Number of lower power input pins +#ifndef NRFX_GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS +#define NRFX_GPIOTE_CONFIG_NUM_OF_LOW_POWER_EVENTS 1 +#endif + +// NRFX_GPIOTE_CONFIG_IRQ_PRIORITY - Interrupt priority + +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef NRFX_GPIOTE_CONFIG_IRQ_PRIORITY +#define NRFX_GPIOTE_CONFIG_IRQ_PRIORITY 6 +#endif + +// NRFX_GPIOTE_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRFX_GPIOTE_CONFIG_LOG_ENABLED +#define NRFX_GPIOTE_CONFIG_LOG_ENABLED 0 +#endif +// NRFX_GPIOTE_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRFX_GPIOTE_CONFIG_LOG_LEVEL +#define NRFX_GPIOTE_CONFIG_LOG_LEVEL 3 +#endif + +// NRFX_GPIOTE_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_GPIOTE_CONFIG_INFO_COLOR +#define NRFX_GPIOTE_CONFIG_INFO_COLOR 0 +#endif + +// NRFX_GPIOTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_GPIOTE_CONFIG_DEBUG_COLOR +#define NRFX_GPIOTE_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// NRFX_I2S_ENABLED - nrfx_i2s - I2S peripheral driver +//========================================================== +#ifndef NRFX_I2S_ENABLED +#define NRFX_I2S_ENABLED 0 +#endif +// NRFX_I2S_CONFIG_SCK_PIN - SCK pin <0-31> + + +#ifndef NRFX_I2S_CONFIG_SCK_PIN +#define NRFX_I2S_CONFIG_SCK_PIN 31 +#endif + +// NRFX_I2S_CONFIG_LRCK_PIN - LRCK pin <1-31> + + +#ifndef NRFX_I2S_CONFIG_LRCK_PIN +#define NRFX_I2S_CONFIG_LRCK_PIN 30 +#endif + +// NRFX_I2S_CONFIG_MCK_PIN - MCK pin +#ifndef NRFX_I2S_CONFIG_MCK_PIN +#define NRFX_I2S_CONFIG_MCK_PIN 255 +#endif + +// NRFX_I2S_CONFIG_SDOUT_PIN - SDOUT pin <0-31> + + +#ifndef NRFX_I2S_CONFIG_SDOUT_PIN +#define NRFX_I2S_CONFIG_SDOUT_PIN 29 +#endif + +// NRFX_I2S_CONFIG_SDIN_PIN - SDIN pin <0-31> + + +#ifndef NRFX_I2S_CONFIG_SDIN_PIN +#define NRFX_I2S_CONFIG_SDIN_PIN 28 +#endif + +// NRFX_I2S_CONFIG_MASTER - Mode + +// <0=> Master +// <1=> Slave + +#ifndef NRFX_I2S_CONFIG_MASTER +#define NRFX_I2S_CONFIG_MASTER 0 +#endif + +// NRFX_I2S_CONFIG_FORMAT - Format + +// <0=> I2S +// <1=> Aligned + +#ifndef NRFX_I2S_CONFIG_FORMAT +#define NRFX_I2S_CONFIG_FORMAT 0 +#endif + +// NRFX_I2S_CONFIG_ALIGN - Alignment + +// <0=> Left +// <1=> Right + +#ifndef NRFX_I2S_CONFIG_ALIGN +#define NRFX_I2S_CONFIG_ALIGN 0 +#endif + +// NRFX_I2S_CONFIG_SWIDTH - Sample width (bits) + +// <0=> 8 +// <1=> 16 +// <2=> 24 + +#ifndef NRFX_I2S_CONFIG_SWIDTH +#define NRFX_I2S_CONFIG_SWIDTH 1 +#endif + +// NRFX_I2S_CONFIG_CHANNELS - Channels + +// <0=> Stereo +// <1=> Left +// <2=> Right + +#ifndef NRFX_I2S_CONFIG_CHANNELS +#define NRFX_I2S_CONFIG_CHANNELS 1 +#endif + +// NRFX_I2S_CONFIG_MCK_SETUP - MCK behavior + +// <0=> Disabled +// <2147483648=> 32MHz/2 +// <1342177280=> 32MHz/3 +// <1073741824=> 32MHz/4 +// <805306368=> 32MHz/5 +// <671088640=> 32MHz/6 +// <536870912=> 32MHz/8 +// <402653184=> 32MHz/10 +// <369098752=> 32MHz/11 +// <285212672=> 32MHz/15 +// <268435456=> 32MHz/16 +// <201326592=> 32MHz/21 +// <184549376=> 32MHz/23 +// <142606336=> 32MHz/30 +// <138412032=> 32MHz/31 +// <134217728=> 32MHz/32 +// <100663296=> 32MHz/42 +// <68157440=> 32MHz/63 +// <34340864=> 32MHz/125 + +#ifndef NRFX_I2S_CONFIG_MCK_SETUP +#define NRFX_I2S_CONFIG_MCK_SETUP 536870912 +#endif + +// NRFX_I2S_CONFIG_RATIO - MCK/LRCK ratio + +// <0=> 32x +// <1=> 48x +// <2=> 64x +// <3=> 96x +// <4=> 128x +// <5=> 192x +// <6=> 256x +// <7=> 384x +// <8=> 512x + +#ifndef NRFX_I2S_CONFIG_RATIO +#define NRFX_I2S_CONFIG_RATIO 2000 +#endif + +// NRFX_I2S_CONFIG_IRQ_PRIORITY - Interrupt priority + +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef NRFX_I2S_CONFIG_IRQ_PRIORITY +#define NRFX_I2S_CONFIG_IRQ_PRIORITY 6 +#endif + +// NRFX_I2S_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRFX_I2S_CONFIG_LOG_ENABLED +#define NRFX_I2S_CONFIG_LOG_ENABLED 0 +#endif +// NRFX_I2S_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRFX_I2S_CONFIG_LOG_LEVEL +#define NRFX_I2S_CONFIG_LOG_LEVEL 3 +#endif + +// NRFX_I2S_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_I2S_CONFIG_INFO_COLOR +#define NRFX_I2S_CONFIG_INFO_COLOR 0 +#endif + +// NRFX_I2S_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_I2S_CONFIG_DEBUG_COLOR +#define NRFX_I2S_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// NRFX_LPCOMP_ENABLED - nrfx_lpcomp - LPCOMP peripheral driver +//========================================================== +#ifndef NRFX_LPCOMP_ENABLED +#define NRFX_LPCOMP_ENABLED 0 +#endif +// NRFX_LPCOMP_CONFIG_REFERENCE - Reference voltage + +// <0=> Supply 1/8 +// <1=> Supply 2/8 +// <2=> Supply 3/8 +// <3=> Supply 4/8 +// <4=> Supply 5/8 +// <5=> Supply 6/8 +// <6=> Supply 7/8 +// <8=> Supply 1/16 (nRF52) +// <9=> Supply 3/16 (nRF52) +// <10=> Supply 5/16 (nRF52) +// <11=> Supply 7/16 (nRF52) +// <12=> Supply 9/16 (nRF52) +// <13=> Supply 11/16 (nRF52) +// <14=> Supply 13/16 (nRF52) +// <15=> Supply 15/16 (nRF52) +// <7=> External Ref 0 +// <65543=> External Ref 1 + +#ifndef NRFX_LPCOMP_CONFIG_REFERENCE +#define NRFX_LPCOMP_CONFIG_REFERENCE 3 +#endif + +// NRFX_LPCOMP_CONFIG_DETECTION - Detection + +// <0=> Crossing +// <1=> Up +// <2=> Down + +#ifndef NRFX_LPCOMP_CONFIG_DETECTION +#define NRFX_LPCOMP_CONFIG_DETECTION 2 +#endif + +// NRFX_LPCOMP_CONFIG_INPUT - Analog input + +// <0=> 0 +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef NRFX_LPCOMP_CONFIG_INPUT +#define NRFX_LPCOMP_CONFIG_INPUT 0 +#endif + +// NRFX_LPCOMP_CONFIG_HYST - Hysteresis + + +#ifndef NRFX_LPCOMP_CONFIG_HYST +#define NRFX_LPCOMP_CONFIG_HYST 0 +#endif + +// NRFX_LPCOMP_CONFIG_IRQ_PRIORITY - Interrupt priority + +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef NRFX_LPCOMP_CONFIG_IRQ_PRIORITY +#define NRFX_LPCOMP_CONFIG_IRQ_PRIORITY 6 +#endif + +// NRFX_LPCOMP_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRFX_LPCOMP_CONFIG_LOG_ENABLED +#define NRFX_LPCOMP_CONFIG_LOG_ENABLED 0 +#endif +// NRFX_LPCOMP_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRFX_LPCOMP_CONFIG_LOG_LEVEL +#define NRFX_LPCOMP_CONFIG_LOG_LEVEL 3 +#endif + +// NRFX_LPCOMP_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_LPCOMP_CONFIG_INFO_COLOR +#define NRFX_LPCOMP_CONFIG_INFO_COLOR 0 +#endif + +// NRFX_LPCOMP_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_LPCOMP_CONFIG_DEBUG_COLOR +#define NRFX_LPCOMP_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// NRFX_NFCT_ENABLED - nrfx_nfct - NFCT peripheral driver +//========================================================== +#ifndef NRFX_NFCT_ENABLED +#define NRFX_NFCT_ENABLED 0 +#endif +// NRFX_NFCT_CONFIG_IRQ_PRIORITY - Interrupt priority + +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef NRFX_NFCT_CONFIG_IRQ_PRIORITY +#define NRFX_NFCT_CONFIG_IRQ_PRIORITY 6 +#endif + +// NRFX_NFCT_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRFX_NFCT_CONFIG_LOG_ENABLED +#define NRFX_NFCT_CONFIG_LOG_ENABLED 0 +#endif +// NRFX_NFCT_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRFX_NFCT_CONFIG_LOG_LEVEL +#define NRFX_NFCT_CONFIG_LOG_LEVEL 3 +#endif + +// NRFX_NFCT_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_NFCT_CONFIG_INFO_COLOR +#define NRFX_NFCT_CONFIG_INFO_COLOR 0 +#endif + +// NRFX_NFCT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_NFCT_CONFIG_DEBUG_COLOR +#define NRFX_NFCT_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// NRFX_PDM_ENABLED - nrfx_pdm - PDM peripheral driver +//========================================================== +#ifndef NRFX_PDM_ENABLED +#define NRFX_PDM_ENABLED 0 +#endif +// NRFX_PDM_CONFIG_MODE - Mode + +// <0=> Stereo +// <1=> Mono + +#ifndef NRFX_PDM_CONFIG_MODE +#define NRFX_PDM_CONFIG_MODE 1 +#endif + +// NRFX_PDM_CONFIG_EDGE - Edge + +// <0=> Left falling +// <1=> Left rising + +#ifndef NRFX_PDM_CONFIG_EDGE +#define NRFX_PDM_CONFIG_EDGE 0 +#endif + +// NRFX_PDM_CONFIG_CLOCK_FREQ - Clock frequency + +// <134217728=> 1000k +// <138412032=> 1032k (default) +// <142606336=> 1067k + +#ifndef NRFX_PDM_CONFIG_CLOCK_FREQ +#define NRFX_PDM_CONFIG_CLOCK_FREQ 138412032 +#endif + +// NRFX_PDM_CONFIG_IRQ_PRIORITY - Interrupt priority + +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef NRFX_PDM_CONFIG_IRQ_PRIORITY +#define NRFX_PDM_CONFIG_IRQ_PRIORITY 6 +#endif + +// NRFX_PDM_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRFX_PDM_CONFIG_LOG_ENABLED +#define NRFX_PDM_CONFIG_LOG_ENABLED 0 +#endif +// NRFX_PDM_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRFX_PDM_CONFIG_LOG_LEVEL +#define NRFX_PDM_CONFIG_LOG_LEVEL 3 +#endif + +// NRFX_PDM_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_PDM_CONFIG_INFO_COLOR +#define NRFX_PDM_CONFIG_INFO_COLOR 0 +#endif + +// NRFX_PDM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_PDM_CONFIG_DEBUG_COLOR +#define NRFX_PDM_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// NRFX_POWER_ENABLED - nrfx_power - POWER peripheral driver +//========================================================== +#ifndef NRFX_POWER_ENABLED +#define NRFX_POWER_ENABLED 0 +#endif +// NRFX_POWER_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority + +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef NRFX_POWER_DEFAULT_CONFIG_IRQ_PRIORITY +#define NRFX_POWER_DEFAULT_CONFIG_IRQ_PRIORITY 7 +#endif + +// NRFX_POWER_CONFIG_DEFAULT_DCDCEN - The default configuration of main DCDC regulator + + +// This settings means only that components for DCDC regulator are installed and it can be enabled. + +#ifndef NRFX_POWER_CONFIG_DEFAULT_DCDCEN +#define NRFX_POWER_CONFIG_DEFAULT_DCDCEN 0 +#endif + +// NRFX_POWER_CONFIG_DEFAULT_DCDCENHV - The default configuration of High Voltage DCDC regulator + + +// This settings means only that components for DCDC regulator are installed and it can be enabled. + +#ifndef NRFX_POWER_CONFIG_DEFAULT_DCDCENHV +#define NRFX_POWER_CONFIG_DEFAULT_DCDCENHV 0 +#endif + +// + +// NRFX_PPI_ENABLED - nrfx_ppi - PPI peripheral allocator +//========================================================== +#ifndef NRFX_PPI_ENABLED +#define NRFX_PPI_ENABLED 0 +#endif +// NRFX_PPI_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRFX_PPI_CONFIG_LOG_ENABLED +#define NRFX_PPI_CONFIG_LOG_ENABLED 0 +#endif +// NRFX_PPI_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRFX_PPI_CONFIG_LOG_LEVEL +#define NRFX_PPI_CONFIG_LOG_LEVEL 3 +#endif + +// NRFX_PPI_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_PPI_CONFIG_INFO_COLOR +#define NRFX_PPI_CONFIG_INFO_COLOR 0 +#endif + +// NRFX_PPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_PPI_CONFIG_DEBUG_COLOR +#define NRFX_PPI_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// NRFX_PWM_ENABLED - nrfx_pwm - PWM peripheral driver +//========================================================== +#ifndef NRFX_PWM_ENABLED +#define NRFX_PWM_ENABLED 0 +#endif +// NRFX_PWM0_ENABLED - Enable PWM0 instance + + +#ifndef NRFX_PWM0_ENABLED +#define NRFX_PWM0_ENABLED 0 +#endif + +// NRFX_PWM1_ENABLED - Enable PWM1 instance + + +#ifndef NRFX_PWM1_ENABLED +#define NRFX_PWM1_ENABLED 0 +#endif + +// NRFX_PWM2_ENABLED - Enable PWM2 instance + + +#ifndef NRFX_PWM2_ENABLED +#define NRFX_PWM2_ENABLED 0 +#endif + +// NRFX_PWM3_ENABLED - Enable PWM3 instance + + +#ifndef NRFX_PWM3_ENABLED +#define NRFX_PWM3_ENABLED 0 +#endif + +// NRFX_PWM_DEFAULT_CONFIG_OUT0_PIN - Out0 pin <0-31> + + +#ifndef NRFX_PWM_DEFAULT_CONFIG_OUT0_PIN +#define NRFX_PWM_DEFAULT_CONFIG_OUT0_PIN 31 +#endif + +// NRFX_PWM_DEFAULT_CONFIG_OUT1_PIN - Out1 pin <0-31> + + +#ifndef NRFX_PWM_DEFAULT_CONFIG_OUT1_PIN +#define NRFX_PWM_DEFAULT_CONFIG_OUT1_PIN 31 +#endif + +// NRFX_PWM_DEFAULT_CONFIG_OUT2_PIN - Out2 pin <0-31> + + +#ifndef NRFX_PWM_DEFAULT_CONFIG_OUT2_PIN +#define NRFX_PWM_DEFAULT_CONFIG_OUT2_PIN 31 +#endif + +// NRFX_PWM_DEFAULT_CONFIG_OUT3_PIN - Out3 pin <0-31> + + +#ifndef NRFX_PWM_DEFAULT_CONFIG_OUT3_PIN +#define NRFX_PWM_DEFAULT_CONFIG_OUT3_PIN 31 +#endif + +// NRFX_PWM_DEFAULT_CONFIG_BASE_CLOCK - Base clock + +// <0=> 16 MHz +// <1=> 8 MHz +// <2=> 4 MHz +// <3=> 2 MHz +// <4=> 1 MHz +// <5=> 500 kHz +// <6=> 250 kHz +// <7=> 125 kHz + +#ifndef NRFX_PWM_DEFAULT_CONFIG_BASE_CLOCK +#define NRFX_PWM_DEFAULT_CONFIG_BASE_CLOCK 4 +#endif + +// NRFX_PWM_DEFAULT_CONFIG_COUNT_MODE - Count mode + +// <0=> Up +// <1=> Up and Down + +#ifndef NRFX_PWM_DEFAULT_CONFIG_COUNT_MODE +#define NRFX_PWM_DEFAULT_CONFIG_COUNT_MODE 0 +#endif + +// NRFX_PWM_DEFAULT_CONFIG_TOP_VALUE - Top value +#ifndef NRFX_PWM_DEFAULT_CONFIG_TOP_VALUE +#define NRFX_PWM_DEFAULT_CONFIG_TOP_VALUE 1000 +#endif + +// NRFX_PWM_DEFAULT_CONFIG_LOAD_MODE - Load mode + +// <0=> Common +// <1=> Grouped +// <2=> Individual +// <3=> Waveform + +#ifndef NRFX_PWM_DEFAULT_CONFIG_LOAD_MODE +#define NRFX_PWM_DEFAULT_CONFIG_LOAD_MODE 0 +#endif + +// NRFX_PWM_DEFAULT_CONFIG_STEP_MODE - Step mode + +// <0=> Auto +// <1=> Triggered + +#ifndef NRFX_PWM_DEFAULT_CONFIG_STEP_MODE +#define NRFX_PWM_DEFAULT_CONFIG_STEP_MODE 0 +#endif + +// NRFX_PWM_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority + +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef NRFX_PWM_DEFAULT_CONFIG_IRQ_PRIORITY +#define NRFX_PWM_DEFAULT_CONFIG_IRQ_PRIORITY 6 +#endif + +// NRFX_PWM_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRFX_PWM_CONFIG_LOG_ENABLED +#define NRFX_PWM_CONFIG_LOG_ENABLED 0 +#endif +// NRFX_PWM_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRFX_PWM_CONFIG_LOG_LEVEL +#define NRFX_PWM_CONFIG_LOG_LEVEL 3 +#endif + +// NRFX_PWM_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_PWM_CONFIG_INFO_COLOR +#define NRFX_PWM_CONFIG_INFO_COLOR 0 +#endif + +// NRFX_PWM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_PWM_CONFIG_DEBUG_COLOR +#define NRFX_PWM_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// NRFX_QDEC_ENABLED - nrfx_qdec - QDEC peripheral driver +//========================================================== +#ifndef NRFX_QDEC_ENABLED +#define NRFX_QDEC_ENABLED 0 +#endif +// NRFX_QDEC_CONFIG_REPORTPER - Report period + +// <0=> 10 Samples +// <1=> 40 Samples +// <2=> 80 Samples +// <3=> 120 Samples +// <4=> 160 Samples +// <5=> 200 Samples +// <6=> 240 Samples +// <7=> 280 Samples + +#ifndef NRFX_QDEC_CONFIG_REPORTPER +#define NRFX_QDEC_CONFIG_REPORTPER 0 +#endif + +// NRFX_QDEC_CONFIG_SAMPLEPER - Sample period + +// <0=> 128 us +// <1=> 256 us +// <2=> 512 us +// <3=> 1024 us +// <4=> 2048 us +// <5=> 4096 us +// <6=> 8192 us +// <7=> 16384 us + +#ifndef NRFX_QDEC_CONFIG_SAMPLEPER +#define NRFX_QDEC_CONFIG_SAMPLEPER 7 +#endif + +// NRFX_QDEC_CONFIG_PIO_A - A pin <0-31> + + +#ifndef NRFX_QDEC_CONFIG_PIO_A +#define NRFX_QDEC_CONFIG_PIO_A 31 +#endif + +// NRFX_QDEC_CONFIG_PIO_B - B pin <0-31> + + +#ifndef NRFX_QDEC_CONFIG_PIO_B +#define NRFX_QDEC_CONFIG_PIO_B 31 +#endif + +// NRFX_QDEC_CONFIG_PIO_LED - LED pin <0-31> + + +#ifndef NRFX_QDEC_CONFIG_PIO_LED +#define NRFX_QDEC_CONFIG_PIO_LED 31 +#endif + +// NRFX_QDEC_CONFIG_LEDPRE - LED pre +#ifndef NRFX_QDEC_CONFIG_LEDPRE +#define NRFX_QDEC_CONFIG_LEDPRE 511 +#endif + +// NRFX_QDEC_CONFIG_LEDPOL - LED polarity + +// <0=> Active low +// <1=> Active high + +#ifndef NRFX_QDEC_CONFIG_LEDPOL +#define NRFX_QDEC_CONFIG_LEDPOL 1 +#endif + +// NRFX_QDEC_CONFIG_DBFEN - Debouncing enable + + +#ifndef NRFX_QDEC_CONFIG_DBFEN +#define NRFX_QDEC_CONFIG_DBFEN 0 +#endif + +// NRFX_QDEC_CONFIG_SAMPLE_INTEN - Sample ready interrupt enable + + +#ifndef NRFX_QDEC_CONFIG_SAMPLE_INTEN +#define NRFX_QDEC_CONFIG_SAMPLE_INTEN 0 +#endif + +// NRFX_QDEC_CONFIG_IRQ_PRIORITY - Interrupt priority + +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef NRFX_QDEC_CONFIG_IRQ_PRIORITY +#define NRFX_QDEC_CONFIG_IRQ_PRIORITY 6 +#endif + +// NRFX_QDEC_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRFX_QDEC_CONFIG_LOG_ENABLED +#define NRFX_QDEC_CONFIG_LOG_ENABLED 0 +#endif +// NRFX_QDEC_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRFX_QDEC_CONFIG_LOG_LEVEL +#define NRFX_QDEC_CONFIG_LOG_LEVEL 3 +#endif + +// NRFX_QDEC_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_QDEC_CONFIG_INFO_COLOR +#define NRFX_QDEC_CONFIG_INFO_COLOR 0 +#endif + +// NRFX_QDEC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_QDEC_CONFIG_DEBUG_COLOR +#define NRFX_QDEC_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// NRFX_QSPI_ENABLED - nrfx_qspi - QSPI peripheral driver +//========================================================== +#ifndef NRFX_QSPI_ENABLED +#define NRFX_QSPI_ENABLED 1 +#endif +// NRFX_QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> + + +#ifndef NRFX_QSPI_CONFIG_SCK_DELAY +#define NRFX_QSPI_CONFIG_SCK_DELAY 1 +#endif + +// NRFX_QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. +#ifndef NRFX_QSPI_CONFIG_XIP_OFFSET +#define NRFX_QSPI_CONFIG_XIP_OFFSET 0 +#endif + +// NRFX_QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. + +// <0=> FastRead +// <1=> Read2O +// <2=> Read2IO +// <3=> Read4O +// <4=> Read4IO + +#ifndef NRFX_QSPI_CONFIG_READOC +#define NRFX_QSPI_CONFIG_READOC 0 +#endif + +// NRFX_QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. + +// <0=> PP +// <1=> PP2O +// <2=> PP4O +// <3=> PP4IO + +#ifndef NRFX_QSPI_CONFIG_WRITEOC +#define NRFX_QSPI_CONFIG_WRITEOC 0 +#endif + +// NRFX_QSPI_CONFIG_ADDRMODE - Addressing mode. + +// <0=> 24bit +// <1=> 32bit + +#ifndef NRFX_QSPI_CONFIG_ADDRMODE +#define NRFX_QSPI_CONFIG_ADDRMODE 0 +#endif + +// NRFX_QSPI_CONFIG_MODE - SPI mode. + +// <0=> Mode 0 +// <1=> Mode 1 + +#ifndef NRFX_QSPI_CONFIG_MODE +#define NRFX_QSPI_CONFIG_MODE 0 +#endif + +// NRFX_QSPI_CONFIG_FREQUENCY - Frequency divider. + +// <0=> 32MHz/1 +// <1=> 32MHz/2 +// <2=> 32MHz/3 +// <3=> 32MHz/4 +// <4=> 32MHz/5 +// <5=> 32MHz/6 +// <6=> 32MHz/7 +// <7=> 32MHz/8 +// <8=> 32MHz/9 +// <9=> 32MHz/10 +// <10=> 32MHz/11 +// <11=> 32MHz/12 +// <12=> 32MHz/13 +// <13=> 32MHz/14 +// <14=> 32MHz/15 +// <15=> 32MHz/16 + +#ifndef NRFX_QSPI_CONFIG_FREQUENCY +#define NRFX_QSPI_CONFIG_FREQUENCY 15 +#endif + +// NRFX_QSPI_PIN_SCK - SCK pin value. +#ifndef NRFX_QSPI_PIN_SCK +#define NRFX_QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED +#endif + +// NRFX_QSPI_PIN_CSN - CSN pin value. +#ifndef NRFX_QSPI_PIN_CSN +#define NRFX_QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED +#endif + +// NRFX_QSPI_PIN_IO0 - IO0 pin value. +#ifndef NRFX_QSPI_PIN_IO0 +#define NRFX_QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED +#endif + +// NRFX_QSPI_PIN_IO1 - IO1 pin value. +#ifndef NRFX_QSPI_PIN_IO1 +#define NRFX_QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED +#endif + +// NRFX_QSPI_PIN_IO2 - IO2 pin value. +#ifndef NRFX_QSPI_PIN_IO2 +#define NRFX_QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED +#endif + +// NRFX_QSPI_PIN_IO3 - IO3 pin value. +#ifndef NRFX_QSPI_PIN_IO3 +#define NRFX_QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED +#endif + +// NRFX_QSPI_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority + +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef NRFX_QSPI_DEFAULT_CONFIG_IRQ_PRIORITY +#define NRFX_QSPI_DEFAULT_CONFIG_IRQ_PRIORITY 6 +#endif + +// + +// NRFX_RNG_ENABLED - nrfx_rng - RNG peripheral driver +//========================================================== +#ifndef NRFX_RNG_ENABLED +#define NRFX_RNG_ENABLED 0 +#endif +// NRFX_RNG_CONFIG_ERROR_CORRECTION - Error correction + + +#ifndef NRFX_RNG_CONFIG_ERROR_CORRECTION +#define NRFX_RNG_CONFIG_ERROR_CORRECTION 1 +#endif + +// NRFX_RNG_CONFIG_IRQ_PRIORITY - Interrupt priority + +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef NRFX_RNG_CONFIG_IRQ_PRIORITY +#define NRFX_RNG_CONFIG_IRQ_PRIORITY 6 +#endif + +// NRFX_RNG_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRFX_RNG_CONFIG_LOG_ENABLED +#define NRFX_RNG_CONFIG_LOG_ENABLED 0 +#endif +// NRFX_RNG_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRFX_RNG_CONFIG_LOG_LEVEL +#define NRFX_RNG_CONFIG_LOG_LEVEL 3 +#endif + +// NRFX_RNG_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_RNG_CONFIG_INFO_COLOR +#define NRFX_RNG_CONFIG_INFO_COLOR 0 +#endif + +// NRFX_RNG_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_RNG_CONFIG_DEBUG_COLOR +#define NRFX_RNG_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// NRFX_RTC_ENABLED - nrfx_rtc - RTC peripheral driver +//========================================================== +#ifndef NRFX_RTC_ENABLED +#define NRFX_RTC_ENABLED 0 +#endif +// NRFX_RTC0_ENABLED - Enable RTC0 instance + + +#ifndef NRFX_RTC0_ENABLED +#define NRFX_RTC0_ENABLED 0 +#endif + +// NRFX_RTC1_ENABLED - Enable RTC1 instance + + +#ifndef NRFX_RTC1_ENABLED +#define NRFX_RTC1_ENABLED 0 +#endif + +// NRFX_RTC2_ENABLED - Enable RTC2 instance + + +#ifndef NRFX_RTC2_ENABLED +#define NRFX_RTC2_ENABLED 0 +#endif + +// NRFX_RTC_MAXIMUM_LATENCY_US - Maximum possible time[us] in highest priority interrupt +#ifndef NRFX_RTC_MAXIMUM_LATENCY_US +#define NRFX_RTC_MAXIMUM_LATENCY_US 2000 +#endif + +// NRFX_RTC_DEFAULT_CONFIG_FREQUENCY - Frequency <16-32768> + + +#ifndef NRFX_RTC_DEFAULT_CONFIG_FREQUENCY +#define NRFX_RTC_DEFAULT_CONFIG_FREQUENCY 32768 +#endif + +// NRFX_RTC_DEFAULT_CONFIG_RELIABLE - Ensures safe compare event triggering + + +#ifndef NRFX_RTC_DEFAULT_CONFIG_RELIABLE +#define NRFX_RTC_DEFAULT_CONFIG_RELIABLE 0 +#endif + +// NRFX_RTC_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority + +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef NRFX_RTC_DEFAULT_CONFIG_IRQ_PRIORITY +#define NRFX_RTC_DEFAULT_CONFIG_IRQ_PRIORITY 6 +#endif + +// NRFX_RTC_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRFX_RTC_CONFIG_LOG_ENABLED +#define NRFX_RTC_CONFIG_LOG_ENABLED 0 +#endif +// NRFX_RTC_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRFX_RTC_CONFIG_LOG_LEVEL +#define NRFX_RTC_CONFIG_LOG_LEVEL 3 +#endif + +// NRFX_RTC_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_RTC_CONFIG_INFO_COLOR +#define NRFX_RTC_CONFIG_INFO_COLOR 0 +#endif + +// NRFX_RTC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_RTC_CONFIG_DEBUG_COLOR +#define NRFX_RTC_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// NRFX_SAADC_ENABLED - nrfx_saadc - SAADC peripheral driver +//========================================================== +#ifndef NRFX_SAADC_ENABLED +#define NRFX_SAADC_ENABLED 0 +#endif +// NRFX_SAADC_CONFIG_RESOLUTION - Resolution + +// <0=> 8 bit +// <1=> 10 bit +// <2=> 12 bit +// <3=> 14 bit + +#ifndef NRFX_SAADC_CONFIG_RESOLUTION +#define NRFX_SAADC_CONFIG_RESOLUTION 1 +#endif + +// NRFX_SAADC_CONFIG_OVERSAMPLE - Sample period + +// <0=> Disabled +// <1=> 2x +// <2=> 4x +// <3=> 8x +// <4=> 16x +// <5=> 32x +// <6=> 64x +// <7=> 128x +// <8=> 256x + +#ifndef NRFX_SAADC_CONFIG_OVERSAMPLE +#define NRFX_SAADC_CONFIG_OVERSAMPLE 0 +#endif + +// NRFX_SAADC_CONFIG_LP_MODE - Enabling low power mode + + +#ifndef NRFX_SAADC_CONFIG_LP_MODE +#define NRFX_SAADC_CONFIG_LP_MODE 0 +#endif + +// NRFX_SAADC_CONFIG_IRQ_PRIORITY - Interrupt priority + +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef NRFX_SAADC_CONFIG_IRQ_PRIORITY +#define NRFX_SAADC_CONFIG_IRQ_PRIORITY 6 +#endif + +// NRFX_SAADC_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRFX_SAADC_CONFIG_LOG_ENABLED +#define NRFX_SAADC_CONFIG_LOG_ENABLED 0 +#endif +// NRFX_SAADC_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRFX_SAADC_CONFIG_LOG_LEVEL +#define NRFX_SAADC_CONFIG_LOG_LEVEL 3 +#endif + +// NRFX_SAADC_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_SAADC_CONFIG_INFO_COLOR +#define NRFX_SAADC_CONFIG_INFO_COLOR 0 +#endif + +// NRFX_SAADC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_SAADC_CONFIG_DEBUG_COLOR +#define NRFX_SAADC_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// NRFX_SPIM_ENABLED - nrfx_spim - SPIM peripheral driver +//========================================================== +#ifndef NRFX_SPIM_ENABLED +#define NRFX_SPIM_ENABLED 0 +#endif +// NRFX_SPIM0_ENABLED - Enable SPIM0 instance + + +#ifndef NRFX_SPIM0_ENABLED +#define NRFX_SPIM0_ENABLED 0 +#endif + +// NRFX_SPIM1_ENABLED - Enable SPIM1 instance + + +#ifndef NRFX_SPIM1_ENABLED +#define NRFX_SPIM1_ENABLED 0 +#endif + +// NRFX_SPIM2_ENABLED - Enable SPIM2 instance + + +#ifndef NRFX_SPIM2_ENABLED +#define NRFX_SPIM2_ENABLED 0 +#endif + +// NRFX_SPIM3_ENABLED - Enable SPIM3 instance + + +#ifndef NRFX_SPIM3_ENABLED +#define NRFX_SPIM3_ENABLED 0 +#endif + +// NRFX_SPIM_EXTENDED_ENABLED - Enable extended SPIM features + + +#ifndef NRFX_SPIM_EXTENDED_ENABLED +#define NRFX_SPIM_EXTENDED_ENABLED 0 +#endif + +// NRFX_SPIM_MISO_PULL_CFG - MISO pin pull configuration. + +// <0=> NRF_GPIO_PIN_NOPULL +// <1=> NRF_GPIO_PIN_PULLDOWN +// <3=> NRF_GPIO_PIN_PULLUP + +#ifndef NRFX_SPIM_MISO_PULL_CFG +#define NRFX_SPIM_MISO_PULL_CFG 1 +#endif + +// NRFX_SPIM_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority + +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef NRFX_SPIM_DEFAULT_CONFIG_IRQ_PRIORITY +#define NRFX_SPIM_DEFAULT_CONFIG_IRQ_PRIORITY 6 +#endif + +// NRFX_SPIM_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRFX_SPIM_CONFIG_LOG_ENABLED +#define NRFX_SPIM_CONFIG_LOG_ENABLED 0 +#endif +// NRFX_SPIM_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRFX_SPIM_CONFIG_LOG_LEVEL +#define NRFX_SPIM_CONFIG_LOG_LEVEL 3 +#endif + +// NRFX_SPIM_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_SPIM_CONFIG_INFO_COLOR +#define NRFX_SPIM_CONFIG_INFO_COLOR 0 +#endif + +// NRFX_SPIM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_SPIM_CONFIG_DEBUG_COLOR +#define NRFX_SPIM_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// NRFX_SPIS_ENABLED - nrfx_spis - SPIS peripheral driver +//========================================================== +#ifndef NRFX_SPIS_ENABLED +#define NRFX_SPIS_ENABLED 0 +#endif +// NRFX_SPIS0_ENABLED - Enable SPIS0 instance + + +#ifndef NRFX_SPIS0_ENABLED +#define NRFX_SPIS0_ENABLED 0 +#endif + +// NRFX_SPIS1_ENABLED - Enable SPIS1 instance + + +#ifndef NRFX_SPIS1_ENABLED +#define NRFX_SPIS1_ENABLED 0 +#endif + +// NRFX_SPIS2_ENABLED - Enable SPIS2 instance + + +#ifndef NRFX_SPIS2_ENABLED +#define NRFX_SPIS2_ENABLED 0 +#endif + +// NRFX_SPIS_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority + +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef NRFX_SPIS_DEFAULT_CONFIG_IRQ_PRIORITY +#define NRFX_SPIS_DEFAULT_CONFIG_IRQ_PRIORITY 6 +#endif + +// NRFX_SPIS_DEFAULT_DEF - SPIS default DEF character <0-255> + + +#ifndef NRFX_SPIS_DEFAULT_DEF +#define NRFX_SPIS_DEFAULT_DEF 255 +#endif + +// NRFX_SPIS_DEFAULT_ORC - SPIS default ORC character <0-255> + + +#ifndef NRFX_SPIS_DEFAULT_ORC +#define NRFX_SPIS_DEFAULT_ORC 255 +#endif + +// NRFX_SPIS_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRFX_SPIS_CONFIG_LOG_ENABLED +#define NRFX_SPIS_CONFIG_LOG_ENABLED 0 +#endif +// NRFX_SPIS_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRFX_SPIS_CONFIG_LOG_LEVEL +#define NRFX_SPIS_CONFIG_LOG_LEVEL 3 +#endif + +// NRFX_SPIS_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_SPIS_CONFIG_INFO_COLOR +#define NRFX_SPIS_CONFIG_INFO_COLOR 0 +#endif + +// NRFX_SPIS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_SPIS_CONFIG_DEBUG_COLOR +#define NRFX_SPIS_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// NRFX_SPI_ENABLED - nrfx_spi - SPI peripheral driver +//========================================================== +#ifndef NRFX_SPI_ENABLED +#define NRFX_SPI_ENABLED 1 +#endif +// NRFX_SPI0_ENABLED - Enable SPI0 instance + + +#ifndef NRFX_SPI0_ENABLED +#define NRFX_SPI0_ENABLED 1 +#endif + +// NRFX_SPI1_ENABLED - Enable SPI1 instance + + +#ifndef NRFX_SPI1_ENABLED +#define NRFX_SPI1_ENABLED 1 +#endif + +// NRFX_SPI2_ENABLED - Enable SPI2 instance + + +#ifndef NRFX_SPI2_ENABLED +#define NRFX_SPI2_ENABLED 1 +#endif + +// NRFX_SPI_MISO_PULL_CFG - MISO pin pull configuration. + +// <0=> NRF_GPIO_PIN_NOPULL +// <1=> NRF_GPIO_PIN_PULLDOWN +// <3=> NRF_GPIO_PIN_PULLUP + +#ifndef NRFX_SPI_MISO_PULL_CFG +#define NRFX_SPI_MISO_PULL_CFG 1 +#endif + +// NRFX_SPI_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority + +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef NRFX_SPI_DEFAULT_CONFIG_IRQ_PRIORITY +#define NRFX_SPI_DEFAULT_CONFIG_IRQ_PRIORITY 6 +#endif + +// NRFX_SPI_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRFX_SPI_CONFIG_LOG_ENABLED +#define NRFX_SPI_CONFIG_LOG_ENABLED 0 +#endif +// NRFX_SPI_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRFX_SPI_CONFIG_LOG_LEVEL +#define NRFX_SPI_CONFIG_LOG_LEVEL 3 +#endif + +// NRFX_SPI_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_SPI_CONFIG_INFO_COLOR +#define NRFX_SPI_CONFIG_INFO_COLOR 0 +#endif + +// NRFX_SPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_SPI_CONFIG_DEBUG_COLOR +#define NRFX_SPI_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// NRFX_SWI_ENABLED - nrfx_swi - SWI/EGU peripheral allocator +//========================================================== +#ifndef NRFX_SWI_ENABLED +#define NRFX_SWI_ENABLED 0 +#endif +// NRFX_EGU_ENABLED - Enable EGU support + + +#ifndef NRFX_EGU_ENABLED +#define NRFX_EGU_ENABLED 0 +#endif + +// NRFX_SWI0_DISABLED - Exclude SWI0 from being utilized by the driver + + +#ifndef NRFX_SWI0_DISABLED +#define NRFX_SWI0_DISABLED 0 +#endif + +// NRFX_SWI1_DISABLED - Exclude SWI1 from being utilized by the driver + + +#ifndef NRFX_SWI1_DISABLED +#define NRFX_SWI1_DISABLED 0 +#endif + +// NRFX_SWI2_DISABLED - Exclude SWI2 from being utilized by the driver + + +#ifndef NRFX_SWI2_DISABLED +#define NRFX_SWI2_DISABLED 0 +#endif + +// NRFX_SWI3_DISABLED - Exclude SWI3 from being utilized by the driver + + +#ifndef NRFX_SWI3_DISABLED +#define NRFX_SWI3_DISABLED 0 +#endif + +// NRFX_SWI4_DISABLED - Exclude SWI4 from being utilized by the driver + + +#ifndef NRFX_SWI4_DISABLED +#define NRFX_SWI4_DISABLED 0 +#endif + +// NRFX_SWI5_DISABLED - Exclude SWI5 from being utilized by the driver + + +#ifndef NRFX_SWI5_DISABLED +#define NRFX_SWI5_DISABLED 0 +#endif + +// NRFX_SWI_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRFX_SWI_CONFIG_LOG_ENABLED +#define NRFX_SWI_CONFIG_LOG_ENABLED 0 +#endif +// NRFX_SWI_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRFX_SWI_CONFIG_LOG_LEVEL +#define NRFX_SWI_CONFIG_LOG_LEVEL 3 +#endif + +// NRFX_SWI_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_SWI_CONFIG_INFO_COLOR +#define NRFX_SWI_CONFIG_INFO_COLOR 0 +#endif + +// NRFX_SWI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_SWI_CONFIG_DEBUG_COLOR +#define NRFX_SWI_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// NRFX_TIMER_ENABLED - nrfx_timer - TIMER periperal driver +//========================================================== +#ifndef NRFX_TIMER_ENABLED +#define NRFX_TIMER_ENABLED 0 +#endif +// NRFX_TIMER0_ENABLED - Enable TIMER0 instance + + +#ifndef NRFX_TIMER0_ENABLED +#define NRFX_TIMER0_ENABLED 0 +#endif + +// NRFX_TIMER1_ENABLED - Enable TIMER1 instance + + +#ifndef NRFX_TIMER1_ENABLED +#define NRFX_TIMER1_ENABLED 0 +#endif + +// NRFX_TIMER2_ENABLED - Enable TIMER2 instance + + +#ifndef NRFX_TIMER2_ENABLED +#define NRFX_TIMER2_ENABLED 0 +#endif + +// NRFX_TIMER3_ENABLED - Enable TIMER3 instance + + +#ifndef NRFX_TIMER3_ENABLED +#define NRFX_TIMER3_ENABLED 0 +#endif + +// NRFX_TIMER4_ENABLED - Enable TIMER4 instance + + +#ifndef NRFX_TIMER4_ENABLED +#define NRFX_TIMER4_ENABLED 0 +#endif + +// NRFX_TIMER_DEFAULT_CONFIG_FREQUENCY - Timer frequency if in Timer mode + +// <0=> 16 MHz +// <1=> 8 MHz +// <2=> 4 MHz +// <3=> 2 MHz +// <4=> 1 MHz +// <5=> 500 kHz +// <6=> 250 kHz +// <7=> 125 kHz +// <8=> 62.5 kHz +// <9=> 31.25 kHz + +#ifndef NRFX_TIMER_DEFAULT_CONFIG_FREQUENCY +#define NRFX_TIMER_DEFAULT_CONFIG_FREQUENCY 0 +#endif + +// NRFX_TIMER_DEFAULT_CONFIG_MODE - Timer mode or operation + +// <0=> Timer +// <1=> Counter + +#ifndef NRFX_TIMER_DEFAULT_CONFIG_MODE +#define NRFX_TIMER_DEFAULT_CONFIG_MODE 0 +#endif + +// NRFX_TIMER_DEFAULT_CONFIG_BIT_WIDTH - Timer counter bit width + +// <0=> 16 bit +// <1=> 8 bit +// <2=> 24 bit +// <3=> 32 bit + +#ifndef NRFX_TIMER_DEFAULT_CONFIG_BIT_WIDTH +#define NRFX_TIMER_DEFAULT_CONFIG_BIT_WIDTH 0 +#endif + +// NRFX_TIMER_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority + +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef NRFX_TIMER_DEFAULT_CONFIG_IRQ_PRIORITY +#define NRFX_TIMER_DEFAULT_CONFIG_IRQ_PRIORITY 6 +#endif + +// NRFX_TIMER_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRFX_TIMER_CONFIG_LOG_ENABLED +#define NRFX_TIMER_CONFIG_LOG_ENABLED 0 +#endif +// NRFX_TIMER_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRFX_TIMER_CONFIG_LOG_LEVEL +#define NRFX_TIMER_CONFIG_LOG_LEVEL 3 +#endif + +// NRFX_TIMER_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_TIMER_CONFIG_INFO_COLOR +#define NRFX_TIMER_CONFIG_INFO_COLOR 0 +#endif + +// NRFX_TIMER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_TIMER_CONFIG_DEBUG_COLOR +#define NRFX_TIMER_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// NRFX_TWIM_ENABLED - nrfx_twim - TWIM peripheral driver +//========================================================== +#ifndef NRFX_TWIM_ENABLED +#define NRFX_TWIM_ENABLED 0 +#endif +// NRFX_TWIM0_ENABLED - Enable TWIM0 instance + + +#ifndef NRFX_TWIM0_ENABLED +#define NRFX_TWIM0_ENABLED 0 +#endif + +// NRFX_TWIM1_ENABLED - Enable TWIM1 instance + + +#ifndef NRFX_TWIM1_ENABLED +#define NRFX_TWIM1_ENABLED 0 +#endif + +// NRFX_TWIM_DEFAULT_CONFIG_FREQUENCY - Frequency + +// <26738688=> 100k +// <67108864=> 250k +// <104857600=> 400k + +#ifndef NRFX_TWIM_DEFAULT_CONFIG_FREQUENCY +#define NRFX_TWIM_DEFAULT_CONFIG_FREQUENCY 26738688 +#endif + +// NRFX_TWIM_DEFAULT_CONFIG_HOLD_BUS_UNINIT - Enables bus holding after uninit + + +#ifndef NRFX_TWIM_DEFAULT_CONFIG_HOLD_BUS_UNINIT +#define NRFX_TWIM_DEFAULT_CONFIG_HOLD_BUS_UNINIT 0 +#endif + +// NRFX_TWIM_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority + +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef NRFX_TWIM_DEFAULT_CONFIG_IRQ_PRIORITY +#define NRFX_TWIM_DEFAULT_CONFIG_IRQ_PRIORITY 6 +#endif + +// NRFX_TWIM_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRFX_TWIM_CONFIG_LOG_ENABLED +#define NRFX_TWIM_CONFIG_LOG_ENABLED 0 +#endif +// NRFX_TWIM_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRFX_TWIM_CONFIG_LOG_LEVEL +#define NRFX_TWIM_CONFIG_LOG_LEVEL 3 +#endif + +// NRFX_TWIM_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_TWIM_CONFIG_INFO_COLOR +#define NRFX_TWIM_CONFIG_INFO_COLOR 0 +#endif + +// NRFX_TWIM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_TWIM_CONFIG_DEBUG_COLOR +#define NRFX_TWIM_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// NRFX_TWIS_ENABLED - nrfx_twis - TWIS peripheral driver +//========================================================== +#ifndef NRFX_TWIS_ENABLED +#define NRFX_TWIS_ENABLED 0 +#endif +// NRFX_TWIS0_ENABLED - Enable TWIS0 instance + + +#ifndef NRFX_TWIS0_ENABLED +#define NRFX_TWIS0_ENABLED 0 +#endif + +// NRFX_TWIS1_ENABLED - Enable TWIS1 instance + + +#ifndef NRFX_TWIS1_ENABLED +#define NRFX_TWIS1_ENABLED 0 +#endif + +// NRFX_TWIS_ASSUME_INIT_AFTER_RESET_ONLY - Assume that any instance would be initialized only once + + +// Optimization flag. Registers used by TWIS are shared by other peripherals. Normally, during initialization driver tries to clear all registers to known state before doing the initialization itself. This gives initialization safe procedure, no matter when it would be called. If you activate TWIS only once and do never uninitialize it - set this flag to 1 what gives more optimal code. + +#ifndef NRFX_TWIS_ASSUME_INIT_AFTER_RESET_ONLY +#define NRFX_TWIS_ASSUME_INIT_AFTER_RESET_ONLY 0 +#endif + +// NRFX_TWIS_NO_SYNC_MODE - Remove support for synchronous mode + + +// Synchronous mode would be used in specific situations. And it uses some additional code and data memory to safely process state machine by polling it in status functions. If this functionality is not required it may be disabled to free some resources. + +#ifndef NRFX_TWIS_NO_SYNC_MODE +#define NRFX_TWIS_NO_SYNC_MODE 0 +#endif + +// NRFX_TWIS_DEFAULT_CONFIG_ADDR0 - Address0 +#ifndef NRFX_TWIS_DEFAULT_CONFIG_ADDR0 +#define NRFX_TWIS_DEFAULT_CONFIG_ADDR0 0 +#endif + +// NRFX_TWIS_DEFAULT_CONFIG_ADDR1 - Address1 +#ifndef NRFX_TWIS_DEFAULT_CONFIG_ADDR1 +#define NRFX_TWIS_DEFAULT_CONFIG_ADDR1 0 +#endif + +// NRFX_TWIS_DEFAULT_CONFIG_SCL_PULL - SCL pin pull configuration + +// <0=> Disabled +// <1=> Pull down +// <3=> Pull up + +#ifndef NRFX_TWIS_DEFAULT_CONFIG_SCL_PULL +#define NRFX_TWIS_DEFAULT_CONFIG_SCL_PULL 0 +#endif + +// NRFX_TWIS_DEFAULT_CONFIG_SDA_PULL - SDA pin pull configuration + +// <0=> Disabled +// <1=> Pull down +// <3=> Pull up + +#ifndef NRFX_TWIS_DEFAULT_CONFIG_SDA_PULL +#define NRFX_TWIS_DEFAULT_CONFIG_SDA_PULL 0 +#endif + +// NRFX_TWIS_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority + +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef NRFX_TWIS_DEFAULT_CONFIG_IRQ_PRIORITY +#define NRFX_TWIS_DEFAULT_CONFIG_IRQ_PRIORITY 6 +#endif + +// NRFX_TWIS_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRFX_TWIS_CONFIG_LOG_ENABLED +#define NRFX_TWIS_CONFIG_LOG_ENABLED 0 +#endif +// NRFX_TWIS_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRFX_TWIS_CONFIG_LOG_LEVEL +#define NRFX_TWIS_CONFIG_LOG_LEVEL 3 +#endif + +// NRFX_TWIS_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_TWIS_CONFIG_INFO_COLOR +#define NRFX_TWIS_CONFIG_INFO_COLOR 0 +#endif + +// NRFX_TWIS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_TWIS_CONFIG_DEBUG_COLOR +#define NRFX_TWIS_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// NRFX_TWI_ENABLED - nrfx_twi - TWI peripheral driver +//========================================================== +#ifndef NRFX_TWI_ENABLED +#define NRFX_TWI_ENABLED 0 +#endif +// NRFX_TWI0_ENABLED - Enable TWI0 instance + + +#ifndef NRFX_TWI0_ENABLED +#define NRFX_TWI0_ENABLED 0 +#endif + +// NRFX_TWI1_ENABLED - Enable TWI1 instance + + +#ifndef NRFX_TWI1_ENABLED +#define NRFX_TWI1_ENABLED 0 +#endif + +// NRFX_TWI_DEFAULT_CONFIG_FREQUENCY - Frequency + +// <26738688=> 100k +// <67108864=> 250k +// <104857600=> 400k + +#ifndef NRFX_TWI_DEFAULT_CONFIG_FREQUENCY +#define NRFX_TWI_DEFAULT_CONFIG_FREQUENCY 26738688 +#endif + +// NRFX_TWI_DEFAULT_CONFIG_HOLD_BUS_UNINIT - Enables bus holding after uninit + + +#ifndef NRFX_TWI_DEFAULT_CONFIG_HOLD_BUS_UNINIT +#define NRFX_TWI_DEFAULT_CONFIG_HOLD_BUS_UNINIT 0 +#endif + +// NRFX_TWI_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority + +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef NRFX_TWI_DEFAULT_CONFIG_IRQ_PRIORITY +#define NRFX_TWI_DEFAULT_CONFIG_IRQ_PRIORITY 6 +#endif + +// NRFX_TWI_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRFX_TWI_CONFIG_LOG_ENABLED +#define NRFX_TWI_CONFIG_LOG_ENABLED 0 +#endif +// NRFX_TWI_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRFX_TWI_CONFIG_LOG_LEVEL +#define NRFX_TWI_CONFIG_LOG_LEVEL 3 +#endif + +// NRFX_TWI_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_TWI_CONFIG_INFO_COLOR +#define NRFX_TWI_CONFIG_INFO_COLOR 0 +#endif + +// NRFX_TWI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_TWI_CONFIG_DEBUG_COLOR +#define NRFX_TWI_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// NRFX_UARTE_ENABLED - nrfx_uarte - UARTE peripheral driver +//========================================================== +#ifndef NRFX_UARTE_ENABLED +#define NRFX_UARTE_ENABLED 0 +#endif +// NRFX_UARTE0_ENABLED - Enable UARTE0 instance +#ifndef NRFX_UARTE0_ENABLED +#define NRFX_UARTE0_ENABLED 0 +#endif + +// NRFX_UARTE1_ENABLED - Enable UARTE1 instance +#ifndef NRFX_UARTE1_ENABLED +#define NRFX_UARTE1_ENABLED 0 +#endif + +// NRFX_UARTE_DEFAULT_CONFIG_HWFC - Hardware Flow Control + +// <0=> Disabled +// <1=> Enabled + +#ifndef NRFX_UARTE_DEFAULT_CONFIG_HWFC +#define NRFX_UARTE_DEFAULT_CONFIG_HWFC 0 +#endif + +// NRFX_UARTE_DEFAULT_CONFIG_PARITY - Parity + +// <0=> Excluded +// <14=> Included + +#ifndef NRFX_UARTE_DEFAULT_CONFIG_PARITY +#define NRFX_UARTE_DEFAULT_CONFIG_PARITY 0 +#endif + +// NRFX_UARTE_DEFAULT_CONFIG_BAUDRATE - Default Baudrate + +// <323584=> 1200 baud +// <643072=> 2400 baud +// <1290240=> 4800 baud +// <2576384=> 9600 baud +// <3862528=> 14400 baud +// <5152768=> 19200 baud +// <7716864=> 28800 baud +// <8388608=> 31250 baud +// <10289152=> 38400 baud +// <15007744=> 56000 baud +// <15400960=> 57600 baud +// <20615168=> 76800 baud +// <30801920=> 115200 baud +// <61865984=> 230400 baud +// <67108864=> 250000 baud +// <121634816=> 460800 baud +// <251658240=> 921600 baud +// <268435456=> 1000000 baud + +#ifndef NRFX_UARTE_DEFAULT_CONFIG_BAUDRATE +#define NRFX_UARTE_DEFAULT_CONFIG_BAUDRATE 30801920 +#endif + +// NRFX_UARTE_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority + +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef NRFX_UARTE_DEFAULT_CONFIG_IRQ_PRIORITY +#define NRFX_UARTE_DEFAULT_CONFIG_IRQ_PRIORITY 6 +#endif + +// NRFX_UARTE_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRFX_UARTE_CONFIG_LOG_ENABLED +#define NRFX_UARTE_CONFIG_LOG_ENABLED 0 +#endif +// NRFX_UARTE_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRFX_UARTE_CONFIG_LOG_LEVEL +#define NRFX_UARTE_CONFIG_LOG_LEVEL 3 +#endif + +// NRFX_UARTE_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_UARTE_CONFIG_INFO_COLOR +#define NRFX_UARTE_CONFIG_INFO_COLOR 0 +#endif + +// NRFX_UARTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_UARTE_CONFIG_DEBUG_COLOR +#define NRFX_UARTE_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// NRFX_UART_ENABLED - nrfx_uart - UART peripheral driver +//========================================================== +#ifndef NRFX_UART_ENABLED +#define NRFX_UART_ENABLED 1 +#endif +// NRFX_UART0_ENABLED - Enable UART0 instance +#ifndef NRFX_UART0_ENABLED +#define NRFX_UART0_ENABLED 1 +#endif + +// NRFX_UART_DEFAULT_CONFIG_HWFC - Hardware Flow Control + +// <0=> Disabled +// <1=> Enabled + +#ifndef NRFX_UART_DEFAULT_CONFIG_HWFC +#define NRFX_UART_DEFAULT_CONFIG_HWFC 0 +#endif + +// NRFX_UART_DEFAULT_CONFIG_PARITY - Parity + +// <0=> Excluded +// <14=> Included + +#ifndef NRFX_UART_DEFAULT_CONFIG_PARITY +#define NRFX_UART_DEFAULT_CONFIG_PARITY 0 +#endif + +// NRFX_UART_DEFAULT_CONFIG_BAUDRATE - Default Baudrate + +// <323584=> 1200 baud +// <643072=> 2400 baud +// <1290240=> 4800 baud +// <2576384=> 9600 baud +// <3866624=> 14400 baud +// <5152768=> 19200 baud +// <7729152=> 28800 baud +// <8388608=> 31250 baud +// <10309632=> 38400 baud +// <15007744=> 56000 baud +// <15462400=> 57600 baud +// <20615168=> 76800 baud +// <30924800=> 115200 baud +// <61845504=> 230400 baud +// <67108864=> 250000 baud +// <123695104=> 460800 baud +// <247386112=> 921600 baud +// <268435456=> 1000000 baud + +#ifndef NRFX_UART_DEFAULT_CONFIG_BAUDRATE +#define NRFX_UART_DEFAULT_CONFIG_BAUDRATE 30924800 +#endif + +// NRFX_UART_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority + +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef NRFX_UART_DEFAULT_CONFIG_IRQ_PRIORITY +#define NRFX_UART_DEFAULT_CONFIG_IRQ_PRIORITY 4 +#endif + +// NRFX_UART_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRFX_UART_CONFIG_LOG_ENABLED +#define NRFX_UART_CONFIG_LOG_ENABLED 0 +#endif +// NRFX_UART_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRFX_UART_CONFIG_LOG_LEVEL +#define NRFX_UART_CONFIG_LOG_LEVEL 3 +#endif + +// NRFX_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_UART_CONFIG_INFO_COLOR +#define NRFX_UART_CONFIG_INFO_COLOR 0 +#endif + +// NRFX_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_UART_CONFIG_DEBUG_COLOR +#define NRFX_UART_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// NRFX_USBD_ENABLED - nrfx_usbd - USBD peripheral driver +//========================================================== +#ifndef NRFX_USBD_ENABLED +#define NRFX_USBD_ENABLED 0 +#endif +// NRFX_USBD_CONFIG_IRQ_PRIORITY - Interrupt priority + +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef NRFX_USBD_CONFIG_IRQ_PRIORITY +#define NRFX_USBD_CONFIG_IRQ_PRIORITY 6 +#endif + +// NRFX_USBD_CONFIG_DMASCHEDULER_MODE - USBD DMA scheduler working scheme + +// <0=> Prioritized access +// <1=> Round Robin + +#ifndef NRFX_USBD_CONFIG_DMASCHEDULER_MODE +#define NRFX_USBD_CONFIG_DMASCHEDULER_MODE 0 +#endif + +// NRFX_USBD_CONFIG_DMASCHEDULER_ISO_BOOST - Give priority to isochronous transfers + + +// This option gives priority to isochronous transfers. +// Enabling it assures that isochronous transfers are always processed, +// even if multiple other transfers are pending. +// Isochronous endpoints are prioritized before the usbd_dma_scheduler_algorithm +// function is called, so the option is independent of the algorithm chosen. + +#ifndef NRFX_USBD_CONFIG_DMASCHEDULER_ISO_BOOST +#define NRFX_USBD_CONFIG_DMASCHEDULER_ISO_BOOST 1 +#endif + +// NRFX_USBD_CONFIG_ISO_IN_ZLP - Respond to an IN token on ISO IN endpoint with ZLP when no data is ready + + +// If set, ISO IN endpoint will respond to an IN token with ZLP when no data is ready to be sent. +// Else, there will be no response. + +#ifndef NRFX_USBD_CONFIG_ISO_IN_ZLP +#define NRFX_USBD_CONFIG_ISO_IN_ZLP 0 +#endif + +// + +// NRFX_WDT_ENABLED - nrfx_wdt - WDT peripheral driver +//========================================================== +#ifndef NRFX_WDT_ENABLED +#define NRFX_WDT_ENABLED 0 +#endif +// NRFX_WDT_CONFIG_BEHAVIOUR - WDT behavior in CPU SLEEP or HALT mode + +// <1=> Run in SLEEP, Pause in HALT +// <8=> Pause in SLEEP, Run in HALT +// <9=> Run in SLEEP and HALT +// <0=> Pause in SLEEP and HALT + +#ifndef NRFX_WDT_CONFIG_BEHAVIOUR +#define NRFX_WDT_CONFIG_BEHAVIOUR 1 +#endif + +// NRFX_WDT_CONFIG_RELOAD_VALUE - Reload value <15-4294967295> + + +#ifndef NRFX_WDT_CONFIG_RELOAD_VALUE +#define NRFX_WDT_CONFIG_RELOAD_VALUE 2000 +#endif + +// NRFX_WDT_CONFIG_NO_IRQ - Remove WDT IRQ handling from WDT driver + +// <0=> Include WDT IRQ handling +// <1=> Remove WDT IRQ handling + +#ifndef NRFX_WDT_CONFIG_NO_IRQ +#define NRFX_WDT_CONFIG_NO_IRQ 0 +#endif + +// NRFX_WDT_CONFIG_IRQ_PRIORITY - Interrupt priority + +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef NRFX_WDT_CONFIG_IRQ_PRIORITY +#define NRFX_WDT_CONFIG_IRQ_PRIORITY 6 +#endif + +// NRFX_WDT_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRFX_WDT_CONFIG_LOG_ENABLED +#define NRFX_WDT_CONFIG_LOG_ENABLED 0 +#endif +// NRFX_WDT_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRFX_WDT_CONFIG_LOG_LEVEL +#define NRFX_WDT_CONFIG_LOG_LEVEL 3 +#endif + +// NRFX_WDT_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_WDT_CONFIG_INFO_COLOR +#define NRFX_WDT_CONFIG_INFO_COLOR 0 +#endif + +// NRFX_WDT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_WDT_CONFIG_DEBUG_COLOR +#define NRFX_WDT_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// + +// NRF_CLOCK_ENABLED - nrf_drv_clock - CLOCK peripheral driver - legacy layer +//========================================================== +#ifndef NRF_CLOCK_ENABLED +#define NRF_CLOCK_ENABLED 0 +#endif +// CLOCK_CONFIG_LF_SRC - LF Clock Source + +// <0=> RC +// <1=> XTAL +// <2=> Synth +// <131073=> External Low Swing +// <196609=> External Full Swing + +#ifndef CLOCK_CONFIG_LF_SRC +#define CLOCK_CONFIG_LF_SRC 1 +#endif + +// CLOCK_CONFIG_LF_CAL_ENABLED - Calibration enable for LF Clock Source + + +#ifndef CLOCK_CONFIG_LF_CAL_ENABLED +#define CLOCK_CONFIG_LF_CAL_ENABLED 0 +#endif + +// CLOCK_CONFIG_IRQ_PRIORITY - Interrupt priority + + +// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef CLOCK_CONFIG_IRQ_PRIORITY +#define CLOCK_CONFIG_IRQ_PRIORITY 6 +#endif + +// + +// PDM_ENABLED - nrf_drv_pdm - PDM peripheral driver - legacy layer +//========================================================== +#ifndef PDM_ENABLED +#define PDM_ENABLED 0 +#endif +// PDM_CONFIG_MODE - Mode + +// <0=> Stereo +// <1=> Mono + +#ifndef PDM_CONFIG_MODE +#define PDM_CONFIG_MODE 1 +#endif + +// PDM_CONFIG_EDGE - Edge + +// <0=> Left falling +// <1=> Left rising + +#ifndef PDM_CONFIG_EDGE +#define PDM_CONFIG_EDGE 0 +#endif + +// PDM_CONFIG_CLOCK_FREQ - Clock frequency + +// <134217728=> 1000k +// <138412032=> 1032k (default) +// <142606336=> 1067k + +#ifndef PDM_CONFIG_CLOCK_FREQ +#define PDM_CONFIG_CLOCK_FREQ 138412032 +#endif + +// PDM_CONFIG_IRQ_PRIORITY - Interrupt priority + + +// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef PDM_CONFIG_IRQ_PRIORITY +#define PDM_CONFIG_IRQ_PRIORITY 6 +#endif + +// + +// POWER_ENABLED - nrf_drv_power - POWER peripheral driver - legacy layer +//========================================================== +#ifndef POWER_ENABLED +#define POWER_ENABLED 0 +#endif +// POWER_CONFIG_IRQ_PRIORITY - Interrupt priority + + +// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef POWER_CONFIG_IRQ_PRIORITY +#define POWER_CONFIG_IRQ_PRIORITY 6 +#endif + +// POWER_CONFIG_DEFAULT_DCDCEN - The default configuration of main DCDC regulator + + +// This settings means only that components for DCDC regulator are installed and it can be enabled. + +#ifndef POWER_CONFIG_DEFAULT_DCDCEN +#define POWER_CONFIG_DEFAULT_DCDCEN 0 +#endif + +// POWER_CONFIG_DEFAULT_DCDCENHV - The default configuration of High Voltage DCDC regulator + + +// This settings means only that components for DCDC regulator are installed and it can be enabled. + +#ifndef POWER_CONFIG_DEFAULT_DCDCENHV +#define POWER_CONFIG_DEFAULT_DCDCENHV 0 +#endif + +// + +// PPI_ENABLED - nrf_drv_ppi - PPI peripheral driver - legacy layer + + +#ifndef PPI_ENABLED +#define PPI_ENABLED 0 +#endif + +// PWM_ENABLED - nrf_drv_pwm - PWM peripheral driver - legacy layer +//========================================================== +#ifndef PWM_ENABLED +#define PWM_ENABLED 0 +#endif +// PWM_DEFAULT_CONFIG_OUT0_PIN - Out0 pin <0-31> + + +#ifndef PWM_DEFAULT_CONFIG_OUT0_PIN +#define PWM_DEFAULT_CONFIG_OUT0_PIN 31 +#endif + +// PWM_DEFAULT_CONFIG_OUT1_PIN - Out1 pin <0-31> + + +#ifndef PWM_DEFAULT_CONFIG_OUT1_PIN +#define PWM_DEFAULT_CONFIG_OUT1_PIN 31 +#endif + +// PWM_DEFAULT_CONFIG_OUT2_PIN - Out2 pin <0-31> + + +#ifndef PWM_DEFAULT_CONFIG_OUT2_PIN +#define PWM_DEFAULT_CONFIG_OUT2_PIN 31 +#endif + +// PWM_DEFAULT_CONFIG_OUT3_PIN - Out3 pin <0-31> + + +#ifndef PWM_DEFAULT_CONFIG_OUT3_PIN +#define PWM_DEFAULT_CONFIG_OUT3_PIN 31 +#endif + +// PWM_DEFAULT_CONFIG_BASE_CLOCK - Base clock + +// <0=> 16 MHz +// <1=> 8 MHz +// <2=> 4 MHz +// <3=> 2 MHz +// <4=> 1 MHz +// <5=> 500 kHz +// <6=> 250 kHz +// <7=> 125 kHz + +#ifndef PWM_DEFAULT_CONFIG_BASE_CLOCK +#define PWM_DEFAULT_CONFIG_BASE_CLOCK 4 +#endif + +// PWM_DEFAULT_CONFIG_COUNT_MODE - Count mode + +// <0=> Up +// <1=> Up and Down + +#ifndef PWM_DEFAULT_CONFIG_COUNT_MODE +#define PWM_DEFAULT_CONFIG_COUNT_MODE 0 +#endif + +// PWM_DEFAULT_CONFIG_TOP_VALUE - Top value +#ifndef PWM_DEFAULT_CONFIG_TOP_VALUE +#define PWM_DEFAULT_CONFIG_TOP_VALUE 1000 +#endif + +// PWM_DEFAULT_CONFIG_LOAD_MODE - Load mode + +// <0=> Common +// <1=> Grouped +// <2=> Individual +// <3=> Waveform + +#ifndef PWM_DEFAULT_CONFIG_LOAD_MODE +#define PWM_DEFAULT_CONFIG_LOAD_MODE 0 +#endif + +// PWM_DEFAULT_CONFIG_STEP_MODE - Step mode + +// <0=> Auto +// <1=> Triggered + +#ifndef PWM_DEFAULT_CONFIG_STEP_MODE +#define PWM_DEFAULT_CONFIG_STEP_MODE 0 +#endif + +// PWM_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority + + +// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef PWM_DEFAULT_CONFIG_IRQ_PRIORITY +#define PWM_DEFAULT_CONFIG_IRQ_PRIORITY 6 +#endif + +// PWM0_ENABLED - Enable PWM0 instance + + +#ifndef PWM0_ENABLED +#define PWM0_ENABLED 0 +#endif + +// PWM1_ENABLED - Enable PWM1 instance + + +#ifndef PWM1_ENABLED +#define PWM1_ENABLED 0 +#endif + +// PWM2_ENABLED - Enable PWM2 instance + + +#ifndef PWM2_ENABLED +#define PWM2_ENABLED 0 +#endif + +// PWM3_ENABLED - Enable PWM3 instance + + +#ifndef PWM3_ENABLED +#define PWM3_ENABLED 0 +#endif + +// + +// QDEC_ENABLED - nrf_drv_qdec - QDEC peripheral driver - legacy layer +//========================================================== +#ifndef QDEC_ENABLED +#define QDEC_ENABLED 0 +#endif +// QDEC_CONFIG_REPORTPER - Report period + +// <0=> 10 Samples +// <1=> 40 Samples +// <2=> 80 Samples +// <3=> 120 Samples +// <4=> 160 Samples +// <5=> 200 Samples +// <6=> 240 Samples +// <7=> 280 Samples + +#ifndef QDEC_CONFIG_REPORTPER +#define QDEC_CONFIG_REPORTPER 0 +#endif + +// QDEC_CONFIG_SAMPLEPER - Sample period + +// <0=> 128 us +// <1=> 256 us +// <2=> 512 us +// <3=> 1024 us +// <4=> 2048 us +// <5=> 4096 us +// <6=> 8192 us +// <7=> 16384 us + +#ifndef QDEC_CONFIG_SAMPLEPER +#define QDEC_CONFIG_SAMPLEPER 7 +#endif + +// QDEC_CONFIG_PIO_A - A pin <0-31> + + +#ifndef QDEC_CONFIG_PIO_A +#define QDEC_CONFIG_PIO_A 31 +#endif + +// QDEC_CONFIG_PIO_B - B pin <0-31> + + +#ifndef QDEC_CONFIG_PIO_B +#define QDEC_CONFIG_PIO_B 31 +#endif + +// QDEC_CONFIG_PIO_LED - LED pin <0-31> + + +#ifndef QDEC_CONFIG_PIO_LED +#define QDEC_CONFIG_PIO_LED 31 +#endif + +// QDEC_CONFIG_LEDPRE - LED pre +#ifndef QDEC_CONFIG_LEDPRE +#define QDEC_CONFIG_LEDPRE 511 +#endif + +// QDEC_CONFIG_LEDPOL - LED polarity + +// <0=> Active low +// <1=> Active high + +#ifndef QDEC_CONFIG_LEDPOL +#define QDEC_CONFIG_LEDPOL 1 +#endif + +// QDEC_CONFIG_DBFEN - Debouncing enable + + +#ifndef QDEC_CONFIG_DBFEN +#define QDEC_CONFIG_DBFEN 0 +#endif + +// QDEC_CONFIG_SAMPLE_INTEN - Sample ready interrupt enable + + +#ifndef QDEC_CONFIG_SAMPLE_INTEN +#define QDEC_CONFIG_SAMPLE_INTEN 0 +#endif + +// QDEC_CONFIG_IRQ_PRIORITY - Interrupt priority + + +// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef QDEC_CONFIG_IRQ_PRIORITY +#define QDEC_CONFIG_IRQ_PRIORITY 6 +#endif + +// + +// QSPI_ENABLED - nrf_drv_qspi - QSPI peripheral driver - legacy layer +//========================================================== +#ifndef QSPI_ENABLED +#define QSPI_ENABLED 0 +#endif +// QSPI_CONFIG_SCK_DELAY - tSHSL, tWHSL and tSHWL in number of 16 MHz periods (62.5 ns). <0-255> + + +#ifndef QSPI_CONFIG_SCK_DELAY +#define QSPI_CONFIG_SCK_DELAY 1 +#endif + +// QSPI_CONFIG_XIP_OFFSET - Address offset in the external memory for Execute in Place operation. +#ifndef QSPI_CONFIG_XIP_OFFSET +#define QSPI_CONFIG_XIP_OFFSET 0 +#endif + +// QSPI_CONFIG_READOC - Number of data lines and opcode used for reading. + +// <0=> FastRead +// <1=> Read2O +// <2=> Read2IO +// <3=> Read4O +// <4=> Read4IO + +#ifndef QSPI_CONFIG_READOC +#define QSPI_CONFIG_READOC 0 +#endif + +// QSPI_CONFIG_WRITEOC - Number of data lines and opcode used for writing. + +// <0=> PP +// <1=> PP2O +// <2=> PP4O +// <3=> PP4IO + +#ifndef QSPI_CONFIG_WRITEOC +#define QSPI_CONFIG_WRITEOC 0 +#endif + +// QSPI_CONFIG_ADDRMODE - Addressing mode. + +// <0=> 24bit +// <1=> 32bit + +#ifndef QSPI_CONFIG_ADDRMODE +#define QSPI_CONFIG_ADDRMODE 0 +#endif + +// QSPI_CONFIG_MODE - SPI mode. + +// <0=> Mode 0 +// <1=> Mode 1 + +#ifndef QSPI_CONFIG_MODE +#define QSPI_CONFIG_MODE 0 +#endif + +// QSPI_CONFIG_FREQUENCY - Frequency divider. + +// <0=> 32MHz/1 +// <1=> 32MHz/2 +// <2=> 32MHz/3 +// <3=> 32MHz/4 +// <4=> 32MHz/5 +// <5=> 32MHz/6 +// <6=> 32MHz/7 +// <7=> 32MHz/8 +// <8=> 32MHz/9 +// <9=> 32MHz/10 +// <10=> 32MHz/11 +// <11=> 32MHz/12 +// <12=> 32MHz/13 +// <13=> 32MHz/14 +// <14=> 32MHz/15 +// <15=> 32MHz/16 + +#ifndef QSPI_CONFIG_FREQUENCY +#define QSPI_CONFIG_FREQUENCY 15 +#endif + +// QSPI_PIN_SCK - SCK pin value. +#ifndef QSPI_PIN_SCK +#define QSPI_PIN_SCK NRF_QSPI_PIN_NOT_CONNECTED +#endif + +// QSPI_PIN_CSN - CSN pin value. +#ifndef QSPI_PIN_CSN +#define QSPI_PIN_CSN NRF_QSPI_PIN_NOT_CONNECTED +#endif + +// QSPI_PIN_IO0 - IO0 pin value. +#ifndef QSPI_PIN_IO0 +#define QSPI_PIN_IO0 NRF_QSPI_PIN_NOT_CONNECTED +#endif + +// QSPI_PIN_IO1 - IO1 pin value. +#ifndef QSPI_PIN_IO1 +#define QSPI_PIN_IO1 NRF_QSPI_PIN_NOT_CONNECTED +#endif + +// QSPI_PIN_IO2 - IO2 pin value. +#ifndef QSPI_PIN_IO2 +#define QSPI_PIN_IO2 NRF_QSPI_PIN_NOT_CONNECTED +#endif + +// QSPI_PIN_IO3 - IO3 pin value. +#ifndef QSPI_PIN_IO3 +#define QSPI_PIN_IO3 NRF_QSPI_PIN_NOT_CONNECTED +#endif + +// QSPI_CONFIG_IRQ_PRIORITY - Interrupt priority + + +// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef QSPI_CONFIG_IRQ_PRIORITY +#define QSPI_CONFIG_IRQ_PRIORITY 6 +#endif + +// + +// RNG_ENABLED - nrf_drv_rng - RNG peripheral driver - legacy layer +//========================================================== +#ifndef RNG_ENABLED +#define RNG_ENABLED 0 +#endif +// RNG_CONFIG_ERROR_CORRECTION - Error correction + + +#ifndef RNG_CONFIG_ERROR_CORRECTION +#define RNG_CONFIG_ERROR_CORRECTION 1 +#endif + +// RNG_CONFIG_POOL_SIZE - Pool size +#ifndef RNG_CONFIG_POOL_SIZE +#define RNG_CONFIG_POOL_SIZE 64 +#endif + +// RNG_CONFIG_IRQ_PRIORITY - Interrupt priority + + +// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef RNG_CONFIG_IRQ_PRIORITY +#define RNG_CONFIG_IRQ_PRIORITY 6 +#endif + +// + +// RTC_ENABLED - nrf_drv_rtc - RTC peripheral driver - legacy layer +//========================================================== +#ifndef RTC_ENABLED +#define RTC_ENABLED 0 +#endif +// RTC_DEFAULT_CONFIG_FREQUENCY - Frequency <16-32768> + + +#ifndef RTC_DEFAULT_CONFIG_FREQUENCY +#define RTC_DEFAULT_CONFIG_FREQUENCY 32768 +#endif + +// RTC_DEFAULT_CONFIG_RELIABLE - Ensures safe compare event triggering + + +#ifndef RTC_DEFAULT_CONFIG_RELIABLE +#define RTC_DEFAULT_CONFIG_RELIABLE 0 +#endif + +// RTC_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority + + +// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef RTC_DEFAULT_CONFIG_IRQ_PRIORITY +#define RTC_DEFAULT_CONFIG_IRQ_PRIORITY 6 +#endif + +// RTC0_ENABLED - Enable RTC0 instance + + +#ifndef RTC0_ENABLED +#define RTC0_ENABLED 0 +#endif + +// RTC1_ENABLED - Enable RTC1 instance + + +#ifndef RTC1_ENABLED +#define RTC1_ENABLED 0 +#endif + +// RTC2_ENABLED - Enable RTC2 instance + + +#ifndef RTC2_ENABLED +#define RTC2_ENABLED 0 +#endif + +// NRF_MAXIMUM_LATENCY_US - Maximum possible time[us] in highest priority interrupt +#ifndef NRF_MAXIMUM_LATENCY_US +#define NRF_MAXIMUM_LATENCY_US 2000 +#endif + +// + +// SAADC_ENABLED - nrf_drv_saadc - SAADC peripheral driver - legacy layer +//========================================================== +#ifndef SAADC_ENABLED +#define SAADC_ENABLED 0 +#endif +// SAADC_CONFIG_RESOLUTION - Resolution + +// <0=> 8 bit +// <1=> 10 bit +// <2=> 12 bit +// <3=> 14 bit + +#ifndef SAADC_CONFIG_RESOLUTION +#define SAADC_CONFIG_RESOLUTION 1 +#endif + +// SAADC_CONFIG_OVERSAMPLE - Sample period + +// <0=> Disabled +// <1=> 2x +// <2=> 4x +// <3=> 8x +// <4=> 16x +// <5=> 32x +// <6=> 64x +// <7=> 128x +// <8=> 256x + +#ifndef SAADC_CONFIG_OVERSAMPLE +#define SAADC_CONFIG_OVERSAMPLE 0 +#endif + +// SAADC_CONFIG_LP_MODE - Enabling low power mode + + +#ifndef SAADC_CONFIG_LP_MODE +#define SAADC_CONFIG_LP_MODE 0 +#endif + +// SAADC_CONFIG_IRQ_PRIORITY - Interrupt priority + + +// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef SAADC_CONFIG_IRQ_PRIORITY +#define SAADC_CONFIG_IRQ_PRIORITY 6 +#endif + +// + +// SPIS_ENABLED - nrf_drv_spis - SPIS peripheral driver - legacy layer +//========================================================== +#ifndef SPIS_ENABLED +#define SPIS_ENABLED 0 +#endif +// SPIS_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority + + +// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef SPIS_DEFAULT_CONFIG_IRQ_PRIORITY +#define SPIS_DEFAULT_CONFIG_IRQ_PRIORITY 6 +#endif + +// SPIS_DEFAULT_MODE - Mode + +// <0=> MODE_0 +// <1=> MODE_1 +// <2=> MODE_2 +// <3=> MODE_3 + +#ifndef SPIS_DEFAULT_MODE +#define SPIS_DEFAULT_MODE 0 +#endif + +// SPIS_DEFAULT_BIT_ORDER - SPIS default bit order + +// <0=> MSB first +// <1=> LSB first + +#ifndef SPIS_DEFAULT_BIT_ORDER +#define SPIS_DEFAULT_BIT_ORDER 0 +#endif + +// SPIS_DEFAULT_DEF - SPIS default DEF character <0-255> + + +#ifndef SPIS_DEFAULT_DEF +#define SPIS_DEFAULT_DEF 255 +#endif + +// SPIS_DEFAULT_ORC - SPIS default ORC character <0-255> + + +#ifndef SPIS_DEFAULT_ORC +#define SPIS_DEFAULT_ORC 255 +#endif + +// SPIS0_ENABLED - Enable SPIS0 instance + + +#ifndef SPIS0_ENABLED +#define SPIS0_ENABLED 0 +#endif + +// SPIS1_ENABLED - Enable SPIS1 instance + + +#ifndef SPIS1_ENABLED +#define SPIS1_ENABLED 0 +#endif + +// SPIS2_ENABLED - Enable SPIS2 instance + + +#ifndef SPIS2_ENABLED +#define SPIS2_ENABLED 0 +#endif + +// + +// SPI_ENABLED - nrf_drv_spi - SPI/SPIM peripheral driver - legacy layer +//========================================================== +#ifndef SPI_ENABLED +#define SPI_ENABLED 0 +#endif +// SPI_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority + + +// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef SPI_DEFAULT_CONFIG_IRQ_PRIORITY +#define SPI_DEFAULT_CONFIG_IRQ_PRIORITY 6 +#endif + +// NRF_SPI_DRV_MISO_PULLUP_CFG - MISO PIN pull-up configuration. + +// <0=> NRF_GPIO_PIN_NOPULL +// <1=> NRF_GPIO_PIN_PULLDOWN +// <3=> NRF_GPIO_PIN_PULLUP + +#ifndef NRF_SPI_DRV_MISO_PULLUP_CFG +#define NRF_SPI_DRV_MISO_PULLUP_CFG 1 +#endif + +// SPI0_ENABLED - Enable SPI0 instance +//========================================================== +#ifndef SPI0_ENABLED +#define SPI0_ENABLED 0 +#endif +// SPI0_USE_EASY_DMA - Use EasyDMA + + +#ifndef SPI0_USE_EASY_DMA +#define SPI0_USE_EASY_DMA 1 +#endif + +// + +// SPI1_ENABLED - Enable SPI1 instance +//========================================================== +#ifndef SPI1_ENABLED +#define SPI1_ENABLED 0 +#endif +// SPI1_USE_EASY_DMA - Use EasyDMA + + +#ifndef SPI1_USE_EASY_DMA +#define SPI1_USE_EASY_DMA 1 +#endif + +// + +// SPI2_ENABLED - Enable SPI2 instance +//========================================================== +#ifndef SPI2_ENABLED +#define SPI2_ENABLED 0 +#endif +// SPI2_USE_EASY_DMA - Use EasyDMA + + +#ifndef SPI2_USE_EASY_DMA +#define SPI2_USE_EASY_DMA 1 +#endif + +// + +// + +// TIMER_ENABLED - nrf_drv_timer - TIMER periperal driver - legacy layer +//========================================================== +#ifndef TIMER_ENABLED +#define TIMER_ENABLED 0 +#endif +// TIMER_DEFAULT_CONFIG_FREQUENCY - Timer frequency if in Timer mode + +// <0=> 16 MHz +// <1=> 8 MHz +// <2=> 4 MHz +// <3=> 2 MHz +// <4=> 1 MHz +// <5=> 500 kHz +// <6=> 250 kHz +// <7=> 125 kHz +// <8=> 62.5 kHz +// <9=> 31.25 kHz + +#ifndef TIMER_DEFAULT_CONFIG_FREQUENCY +#define TIMER_DEFAULT_CONFIG_FREQUENCY 0 +#endif + +// TIMER_DEFAULT_CONFIG_MODE - Timer mode or operation + +// <0=> Timer +// <1=> Counter + +#ifndef TIMER_DEFAULT_CONFIG_MODE +#define TIMER_DEFAULT_CONFIG_MODE 0 +#endif + +// TIMER_DEFAULT_CONFIG_BIT_WIDTH - Timer counter bit width + +// <0=> 16 bit +// <1=> 8 bit +// <2=> 24 bit +// <3=> 32 bit + +#ifndef TIMER_DEFAULT_CONFIG_BIT_WIDTH +#define TIMER_DEFAULT_CONFIG_BIT_WIDTH 0 +#endif + +// TIMER_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority + + +// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef TIMER_DEFAULT_CONFIG_IRQ_PRIORITY +#define TIMER_DEFAULT_CONFIG_IRQ_PRIORITY 6 +#endif + +// TIMER0_ENABLED - Enable TIMER0 instance + + +#ifndef TIMER0_ENABLED +#define TIMER0_ENABLED 0 +#endif + +// TIMER1_ENABLED - Enable TIMER1 instance + + +#ifndef TIMER1_ENABLED +#define TIMER1_ENABLED 0 +#endif + +// TIMER2_ENABLED - Enable TIMER2 instance + + +#ifndef TIMER2_ENABLED +#define TIMER2_ENABLED 0 +#endif + +// TIMER3_ENABLED - Enable TIMER3 instance + + +#ifndef TIMER3_ENABLED +#define TIMER3_ENABLED 0 +#endif + +// TIMER4_ENABLED - Enable TIMER4 instance + + +#ifndef TIMER4_ENABLED +#define TIMER4_ENABLED 0 +#endif + +// + +// TWIS_ENABLED - nrf_drv_twis - TWIS peripheral driver - legacy layer +//========================================================== +#ifndef TWIS_ENABLED +#define TWIS_ENABLED 0 +#endif +// TWIS0_ENABLED - Enable TWIS0 instance + + +#ifndef TWIS0_ENABLED +#define TWIS0_ENABLED 0 +#endif + +// TWIS1_ENABLED - Enable TWIS1 instance + + +#ifndef TWIS1_ENABLED +#define TWIS1_ENABLED 0 +#endif + +// TWIS_ASSUME_INIT_AFTER_RESET_ONLY - Assume that any instance would be initialized only once + + +// Optimization flag. Registers used by TWIS are shared by other peripherals. Normally, during initialization driver tries to clear all registers to known state before doing the initialization itself. This gives initialization safe procedure, no matter when it would be called. If you activate TWIS only once and do never uninitialize it - set this flag to 1 what gives more optimal code. + +#ifndef TWIS_ASSUME_INIT_AFTER_RESET_ONLY +#define TWIS_ASSUME_INIT_AFTER_RESET_ONLY 0 +#endif + +// TWIS_NO_SYNC_MODE - Remove support for synchronous mode + + +// Synchronous mode would be used in specific situations. And it uses some additional code and data memory to safely process state machine by polling it in status functions. If this functionality is not required it may be disabled to free some resources. + +#ifndef TWIS_NO_SYNC_MODE +#define TWIS_NO_SYNC_MODE 0 +#endif + +// TWIS_DEFAULT_CONFIG_ADDR0 - Address0 +#ifndef TWIS_DEFAULT_CONFIG_ADDR0 +#define TWIS_DEFAULT_CONFIG_ADDR0 0 +#endif + +// TWIS_DEFAULT_CONFIG_ADDR1 - Address1 +#ifndef TWIS_DEFAULT_CONFIG_ADDR1 +#define TWIS_DEFAULT_CONFIG_ADDR1 0 +#endif + +// TWIS_DEFAULT_CONFIG_SCL_PULL - SCL pin pull configuration + +// <0=> Disabled +// <1=> Pull down +// <3=> Pull up + +#ifndef TWIS_DEFAULT_CONFIG_SCL_PULL +#define TWIS_DEFAULT_CONFIG_SCL_PULL 0 +#endif + +// TWIS_DEFAULT_CONFIG_SDA_PULL - SDA pin pull configuration + +// <0=> Disabled +// <1=> Pull down +// <3=> Pull up + +#ifndef TWIS_DEFAULT_CONFIG_SDA_PULL +#define TWIS_DEFAULT_CONFIG_SDA_PULL 0 +#endif + +// TWIS_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority + + +// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef TWIS_DEFAULT_CONFIG_IRQ_PRIORITY +#define TWIS_DEFAULT_CONFIG_IRQ_PRIORITY 6 +#endif + +// + +// TWI_ENABLED - nrf_drv_twi - TWI/TWIM peripheral driver - legacy layer +//========================================================== +#ifndef TWI_ENABLED +#define TWI_ENABLED 0 +#endif +// TWI_DEFAULT_CONFIG_FREQUENCY - Frequency + +// <26738688=> 100k +// <67108864=> 250k +// <104857600=> 400k + +#ifndef TWI_DEFAULT_CONFIG_FREQUENCY +#define TWI_DEFAULT_CONFIG_FREQUENCY 26738688 +#endif + +// TWI_DEFAULT_CONFIG_CLR_BUS_INIT - Enables bus clearing procedure during init + + +#ifndef TWI_DEFAULT_CONFIG_CLR_BUS_INIT +#define TWI_DEFAULT_CONFIG_CLR_BUS_INIT 0 +#endif + +// TWI_DEFAULT_CONFIG_HOLD_BUS_UNINIT - Enables bus holding after uninit + + +#ifndef TWI_DEFAULT_CONFIG_HOLD_BUS_UNINIT +#define TWI_DEFAULT_CONFIG_HOLD_BUS_UNINIT 0 +#endif + +// TWI_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority + + +// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef TWI_DEFAULT_CONFIG_IRQ_PRIORITY +#define TWI_DEFAULT_CONFIG_IRQ_PRIORITY 6 +#endif + +// TWI0_ENABLED - Enable TWI0 instance +//========================================================== +#ifndef TWI0_ENABLED +#define TWI0_ENABLED 0 +#endif +// TWI0_USE_EASY_DMA - Use EasyDMA (if present) + + +#ifndef TWI0_USE_EASY_DMA +#define TWI0_USE_EASY_DMA 0 +#endif + +// + +// TWI1_ENABLED - Enable TWI1 instance +//========================================================== +#ifndef TWI1_ENABLED +#define TWI1_ENABLED 0 +#endif +// TWI1_USE_EASY_DMA - Use EasyDMA (if present) + + +#ifndef TWI1_USE_EASY_DMA +#define TWI1_USE_EASY_DMA 0 +#endif + +// + +// + +// UART_ENABLED - nrf_drv_uart - UART/UARTE peripheral driver - legacy layer +//========================================================== +#ifndef UART_ENABLED +#define UART_ENABLED 0 +#endif +// UART_DEFAULT_CONFIG_HWFC - Hardware Flow Control + +// <0=> Disabled +// <1=> Enabled + +#ifndef UART_DEFAULT_CONFIG_HWFC +#define UART_DEFAULT_CONFIG_HWFC 0 +#endif + +// UART_DEFAULT_CONFIG_PARITY - Parity + +// <0=> Excluded +// <14=> Included + +#ifndef UART_DEFAULT_CONFIG_PARITY +#define UART_DEFAULT_CONFIG_PARITY 0 +#endif + +// UART_DEFAULT_CONFIG_BAUDRATE - Default Baudrate + +// <323584=> 1200 baud +// <643072=> 2400 baud +// <1290240=> 4800 baud +// <2576384=> 9600 baud +// <3862528=> 14400 baud +// <5152768=> 19200 baud +// <7716864=> 28800 baud +// <10289152=> 38400 baud +// <15400960=> 57600 baud +// <20615168=> 76800 baud +// <30801920=> 115200 baud +// <61865984=> 230400 baud +// <67108864=> 250000 baud +// <121634816=> 460800 baud +// <251658240=> 921600 baud +// <268435456=> 1000000 baud + +#ifndef UART_DEFAULT_CONFIG_BAUDRATE +#define UART_DEFAULT_CONFIG_BAUDRATE 30801920 +#endif + +// UART_DEFAULT_CONFIG_IRQ_PRIORITY - Interrupt priority + + +// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef UART_DEFAULT_CONFIG_IRQ_PRIORITY +#define UART_DEFAULT_CONFIG_IRQ_PRIORITY 6 +#endif + +// UART_EASY_DMA_SUPPORT - Driver supporting EasyDMA + + +#ifndef UART_EASY_DMA_SUPPORT +#define UART_EASY_DMA_SUPPORT 1 +#endif + +// UART_LEGACY_SUPPORT - Driver supporting Legacy mode + + +#ifndef UART_LEGACY_SUPPORT +#define UART_LEGACY_SUPPORT 1 +#endif + +// UART0_ENABLED - Enable UART0 instance +//========================================================== +#ifndef UART0_ENABLED +#define UART0_ENABLED 0 +#endif +// UART0_CONFIG_USE_EASY_DMA - Default setting for using EasyDMA + + +#ifndef UART0_CONFIG_USE_EASY_DMA +#define UART0_CONFIG_USE_EASY_DMA 1 +#endif + +// + +// UART1_ENABLED - Enable UART1 instance +//========================================================== +#ifndef UART1_ENABLED +#define UART1_ENABLED 0 +#endif +// + +// + +// USBD_ENABLED - nrf_drv_usbd - Software Component +//========================================================== +#ifndef USBD_ENABLED +#define USBD_ENABLED 0 +#endif +// USBD_CONFIG_IRQ_PRIORITY - Interrupt priority + + +// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef USBD_CONFIG_IRQ_PRIORITY +#define USBD_CONFIG_IRQ_PRIORITY 6 +#endif + +// USBD_CONFIG_DMASCHEDULER_MODE - USBD SMA scheduler working scheme + +// <0=> Prioritized access +// <1=> Round Robin + +#ifndef USBD_CONFIG_DMASCHEDULER_MODE +#define USBD_CONFIG_DMASCHEDULER_MODE 0 +#endif + +// USBD_CONFIG_DMASCHEDULER_ISO_BOOST - Give priority to isochronous transfers + + +// This option gives priority to isochronous transfers. +// Enabling it assures that isochronous transfers are always processed, +// even if multiple other transfers are pending. +// Isochronous endpoints are prioritized before the usbd_dma_scheduler_algorithm +// function is called, so the option is independent of the algorithm chosen. + +#ifndef USBD_CONFIG_DMASCHEDULER_ISO_BOOST +#define USBD_CONFIG_DMASCHEDULER_ISO_BOOST 1 +#endif + +// USBD_CONFIG_ISO_IN_ZLP - Respond to an IN token on ISO IN endpoint with ZLP when no data is ready + + +// If set, ISO IN endpoint will respond to an IN token with ZLP when no data is ready to be sent. +// Else, there will be no response. +// NOTE: This option does not work on Engineering A chip. + +#ifndef USBD_CONFIG_ISO_IN_ZLP +#define USBD_CONFIG_ISO_IN_ZLP 0 +#endif + +// + +// WDT_ENABLED - nrf_drv_wdt - WDT peripheral driver - legacy layer +//========================================================== +#ifndef WDT_ENABLED +#define WDT_ENABLED 0 +#endif +// WDT_CONFIG_BEHAVIOUR - WDT behavior in CPU SLEEP or HALT mode + +// <1=> Run in SLEEP, Pause in HALT +// <8=> Pause in SLEEP, Run in HALT +// <9=> Run in SLEEP and HALT +// <0=> Pause in SLEEP and HALT + +#ifndef WDT_CONFIG_BEHAVIOUR +#define WDT_CONFIG_BEHAVIOUR 1 +#endif + +// WDT_CONFIG_RELOAD_VALUE - Reload value <15-4294967295> + + +#ifndef WDT_CONFIG_RELOAD_VALUE +#define WDT_CONFIG_RELOAD_VALUE 2000 +#endif + +// WDT_CONFIG_IRQ_PRIORITY - Interrupt priority + + +// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef WDT_CONFIG_IRQ_PRIORITY +#define WDT_CONFIG_IRQ_PRIORITY 6 +#endif + +// + +// +//========================================================== + +// nRF_Drivers_External + +//========================================================== +// NRF_TWI_SENSOR_ENABLED - nrf_twi_sensor - nRF TWI Sensor module + + +#ifndef NRF_TWI_SENSOR_ENABLED +#define NRF_TWI_SENSOR_ENABLED 0 +#endif + +// +//========================================================== + +// nRF_Libraries + +//========================================================== +// APP_GPIOTE_ENABLED - app_gpiote - GPIOTE events dispatcher + + +#ifndef APP_GPIOTE_ENABLED +#define APP_GPIOTE_ENABLED 0 +#endif + +// APP_PWM_ENABLED - app_pwm - PWM functionality + + +#ifndef APP_PWM_ENABLED +#define APP_PWM_ENABLED 0 +#endif + +// APP_SCHEDULER_ENABLED - app_scheduler - Events scheduler +//========================================================== +#ifndef APP_SCHEDULER_ENABLED +#define APP_SCHEDULER_ENABLED 0 +#endif +// APP_SCHEDULER_WITH_PAUSE - Enabling pause feature + + +#ifndef APP_SCHEDULER_WITH_PAUSE +#define APP_SCHEDULER_WITH_PAUSE 0 +#endif + +// APP_SCHEDULER_WITH_PROFILER - Enabling scheduler profiling + + +#ifndef APP_SCHEDULER_WITH_PROFILER +#define APP_SCHEDULER_WITH_PROFILER 0 +#endif + +// + +// APP_SDCARD_ENABLED - app_sdcard - SD/MMC card support using SPI +//========================================================== +#ifndef APP_SDCARD_ENABLED +#define APP_SDCARD_ENABLED 0 +#endif +// APP_SDCARD_SPI_INSTANCE - SPI instance used + +// <0=> 0 +// <1=> 1 +// <2=> 2 + +#ifndef APP_SDCARD_SPI_INSTANCE +#define APP_SDCARD_SPI_INSTANCE 0 +#endif + +// APP_SDCARD_FREQ_INIT - SPI frequency + +// <33554432=> 125 kHz +// <67108864=> 250 kHz +// <134217728=> 500 kHz +// <268435456=> 1 MHz +// <536870912=> 2 MHz +// <1073741824=> 4 MHz +// <2147483648=> 8 MHz + +#ifndef APP_SDCARD_FREQ_INIT +#define APP_SDCARD_FREQ_INIT 67108864 +#endif + +// APP_SDCARD_FREQ_DATA - SPI frequency + +// <33554432=> 125 kHz +// <67108864=> 250 kHz +// <134217728=> 500 kHz +// <268435456=> 1 MHz +// <536870912=> 2 MHz +// <1073741824=> 4 MHz +// <2147483648=> 8 MHz + +#ifndef APP_SDCARD_FREQ_DATA +#define APP_SDCARD_FREQ_DATA 1073741824 +#endif + +// + +// APP_TIMER_ENABLED - app_timer - Application timer functionality +//========================================================== +#ifndef APP_TIMER_ENABLED +#define APP_TIMER_ENABLED 0 +#endif +// APP_TIMER_CONFIG_RTC_FREQUENCY - Configure RTC prescaler. + +// <0=> 32768 Hz +// <1=> 16384 Hz +// <3=> 8192 Hz +// <7=> 4096 Hz +// <15=> 2048 Hz +// <31=> 1024 Hz + +#ifndef APP_TIMER_CONFIG_RTC_FREQUENCY +#define APP_TIMER_CONFIG_RTC_FREQUENCY 1 +#endif + +// APP_TIMER_CONFIG_IRQ_PRIORITY - Interrupt priority + + +// Priorities 0,2 (nRF51) and 0,1,4,5 (nRF52) are reserved for SoftDevice +// <0=> 0 (highest) +// <1=> 1 +// <2=> 2 +// <3=> 3 +// <4=> 4 +// <5=> 5 +// <6=> 6 +// <7=> 7 + +#ifndef APP_TIMER_CONFIG_IRQ_PRIORITY +#define APP_TIMER_CONFIG_IRQ_PRIORITY 6 +#endif + +// APP_TIMER_CONFIG_OP_QUEUE_SIZE - Capacity of timer requests queue. +// Size of the queue depends on how many timers are used +// in the system, how often timers are started and overall +// system latency. If queue size is too small app_timer calls +// will fail. + +#ifndef APP_TIMER_CONFIG_OP_QUEUE_SIZE +#define APP_TIMER_CONFIG_OP_QUEUE_SIZE 10 +#endif + +// APP_TIMER_CONFIG_USE_SCHEDULER - Enable scheduling app_timer events to app_scheduler + + +#ifndef APP_TIMER_CONFIG_USE_SCHEDULER +#define APP_TIMER_CONFIG_USE_SCHEDULER 0 +#endif + +// APP_TIMER_KEEPS_RTC_ACTIVE - Enable RTC always on + + +// If option is enabled RTC is kept running even if there is no active timers. +// This option can be used when app_timer is used for timestamping. + +#ifndef APP_TIMER_KEEPS_RTC_ACTIVE +#define APP_TIMER_KEEPS_RTC_ACTIVE 0 +#endif + +// APP_TIMER_SAFE_WINDOW_MS - Maximum possible latency (in milliseconds) of handling app_timer event. +// Maximum possible timeout that can be set is reduced by safe window. +// Example: RTC frequency 16384 Hz, maximum possible timeout 1024 seconds - APP_TIMER_SAFE_WINDOW_MS. +// Since RTC is not stopped when processor is halted in debugging session, this value +// must cover it if debugging is needed. It is possible to halt processor for APP_TIMER_SAFE_WINDOW_MS +// without corrupting app_timer behavior. + +#ifndef APP_TIMER_SAFE_WINDOW_MS +#define APP_TIMER_SAFE_WINDOW_MS 300000 +#endif + +// App Timer Legacy configuration - Legacy configuration. + +//========================================================== +// APP_TIMER_WITH_PROFILER - Enable app_timer profiling + + +#ifndef APP_TIMER_WITH_PROFILER +#define APP_TIMER_WITH_PROFILER 0 +#endif + +// APP_TIMER_CONFIG_SWI_NUMBER - Configure SWI instance used. + + +#ifndef APP_TIMER_CONFIG_SWI_NUMBER +#define APP_TIMER_CONFIG_SWI_NUMBER 0 +#endif + +// +//========================================================== + +// + +// APP_USBD_AUDIO_ENABLED - app_usbd_audio - USB AUDIO class + + +#ifndef APP_USBD_AUDIO_ENABLED +#define APP_USBD_AUDIO_ENABLED 0 +#endif + +// APP_USBD_ENABLED - app_usbd - USB Device library +//========================================================== +#ifndef APP_USBD_ENABLED +#define APP_USBD_ENABLED 0 +#endif +// APP_USBD_VID - Vendor ID. <0x0000-0xFFFF> + + +// Note: This value is not editable in Configuration Wizard. +// Vendor ID ordered from USB IF: http://www.usb.org/developers/vendor/ + +#ifndef APP_USBD_VID +#define APP_USBD_VID 0 +#endif + +// APP_USBD_PID - Product ID. <0x0000-0xFFFF> + + +// Note: This value is not editable in Configuration Wizard. +// Selected Product ID + +#ifndef APP_USBD_PID +#define APP_USBD_PID 0 +#endif + +// APP_USBD_DEVICE_VER_MAJOR - Major device version <0-99> + + +// Major device version, will be converted automatically to BCD notation. Use just decimal values. + +#ifndef APP_USBD_DEVICE_VER_MAJOR +#define APP_USBD_DEVICE_VER_MAJOR 1 +#endif + +// APP_USBD_DEVICE_VER_MINOR - Minor device version <0-9> + + +// Minor device version, will be converted automatically to BCD notation. Use just decimal values. + +#ifndef APP_USBD_DEVICE_VER_MINOR +#define APP_USBD_DEVICE_VER_MINOR 0 +#endif + +// APP_USBD_DEVICE_VER_SUB - Sub-minor device version <0-9> + + +// Sub-minor device version, will be converted automatically to BCD notation. Use just decimal values. + +#ifndef APP_USBD_DEVICE_VER_SUB +#define APP_USBD_DEVICE_VER_SUB 0 +#endif + +// APP_USBD_CONFIG_SELF_POWERED - Self-powered device, as opposed to bus-powered. + + +#ifndef APP_USBD_CONFIG_SELF_POWERED +#define APP_USBD_CONFIG_SELF_POWERED 1 +#endif + +// APP_USBD_CONFIG_MAX_POWER - MaxPower field in configuration descriptor in milliamps. <0-500> + + +#ifndef APP_USBD_CONFIG_MAX_POWER +#define APP_USBD_CONFIG_MAX_POWER 100 +#endif + +// APP_USBD_CONFIG_POWER_EVENTS_PROCESS - Process power events. + + +// Enable processing power events in USB event handler. + +#ifndef APP_USBD_CONFIG_POWER_EVENTS_PROCESS +#define APP_USBD_CONFIG_POWER_EVENTS_PROCESS 1 +#endif + +// APP_USBD_CONFIG_EVENT_QUEUE_ENABLE - Enable event queue. + +// This is the default configuration when all the events are placed into internal queue. +// Disable it when an external queue is used like app_scheduler or if you wish to process all events inside interrupts. +// Processing all events from the interrupt level adds requirement not to call any functions that modifies the USBD library state from the context higher than USB interrupt context. +// Functions that modify USBD state are functions for sleep, wakeup, start, stop, enable, and disable. +//========================================================== +#ifndef APP_USBD_CONFIG_EVENT_QUEUE_ENABLE +#define APP_USBD_CONFIG_EVENT_QUEUE_ENABLE 1 +#endif +// APP_USBD_CONFIG_EVENT_QUEUE_SIZE - The size of the event queue. <16-64> + + +// The size of the queue for the events that would be processed in the main loop. + +#ifndef APP_USBD_CONFIG_EVENT_QUEUE_SIZE +#define APP_USBD_CONFIG_EVENT_QUEUE_SIZE 32 +#endif + +// APP_USBD_CONFIG_SOF_HANDLING_MODE - Change SOF events handling mode. + + +// Normal queue - SOF events are pushed normally into the event queue. +// Compress queue - SOF events are counted and binded with other events or executed when the queue is empty. +// This prevents the queue from filling up with SOF events. +// Interrupt - SOF events are processed in interrupt. +// <0=> Normal queue +// <1=> Compress queue +// <2=> Interrupt + +#ifndef APP_USBD_CONFIG_SOF_HANDLING_MODE +#define APP_USBD_CONFIG_SOF_HANDLING_MODE 1 +#endif + +// + +// APP_USBD_CONFIG_SOF_TIMESTAMP_PROVIDE - Provide a function that generates timestamps for logs based on the current SOF. + + +// The function app_usbd_sof_timestamp_get is implemented if the logger is enabled. +// Use it when initializing the logger. +// SOF processing is always enabled when this configuration parameter is active. +// Note: This option is configured outside of APP_USBD_CONFIG_LOG_ENABLED. +// This means that it works even if the logging in this very module is disabled. + +#ifndef APP_USBD_CONFIG_SOF_TIMESTAMP_PROVIDE +#define APP_USBD_CONFIG_SOF_TIMESTAMP_PROVIDE 0 +#endif + +// APP_USBD_CONFIG_DESC_STRING_SIZE - Maximum size of the NULL-terminated string of the string descriptor. <31-254> + + +// 31 characters can be stored in the internal USB buffer used for transfers. +// Any value higher than 31 creates an additional buffer just for descriptor strings. + +#ifndef APP_USBD_CONFIG_DESC_STRING_SIZE +#define APP_USBD_CONFIG_DESC_STRING_SIZE 31 +#endif + +// APP_USBD_CONFIG_DESC_STRING_UTF_ENABLED - Enable UTF8 conversion. + + +// Enable UTF8-encoded characters. In normal processing, only ASCII characters are available. + +#ifndef APP_USBD_CONFIG_DESC_STRING_UTF_ENABLED +#define APP_USBD_CONFIG_DESC_STRING_UTF_ENABLED 0 +#endif + +// APP_USBD_STRINGS_LANGIDS - Supported languages identifiers. + +// Note: This value is not editable in Configuration Wizard. +// Comma-separated list of supported languages. +#ifndef APP_USBD_STRINGS_LANGIDS +#define APP_USBD_STRINGS_LANGIDS APP_USBD_LANG_AND_SUBLANG(APP_USBD_LANG_ENGLISH, APP_USBD_SUBLANG_ENGLISH_US) +#endif + +// APP_USBD_STRING_ID_MANUFACTURER - Define manufacturer string ID. + +// Setting ID to 0 disables the string. +//========================================================== +#ifndef APP_USBD_STRING_ID_MANUFACTURER +#define APP_USBD_STRING_ID_MANUFACTURER 1 +#endif +// APP_USBD_STRINGS_MANUFACTURER_EXTERN - Define whether @ref APP_USBD_STRINGS_MANUFACTURER is created by macro or declared as a global variable. + + +#ifndef APP_USBD_STRINGS_MANUFACTURER_EXTERN +#define APP_USBD_STRINGS_MANUFACTURER_EXTERN 0 +#endif + +// APP_USBD_STRINGS_MANUFACTURER - String descriptor for the manufacturer name. + +// Note: This value is not editable in Configuration Wizard. +// Comma-separated list of manufacturer names for each defined language. +// Use @ref APP_USBD_STRING_DESC macro to create string descriptor from a NULL-terminated string. +// Use @ref APP_USBD_STRING_RAW8_DESC macro to create string descriptor from comma-separated uint8_t values. +// Use @ref APP_USBD_STRING_RAW16_DESC macro to create string descriptor from comma-separated uint16_t values. +// Alternatively, configure the macro to point to any internal variable pointer that already contains the descriptor. +// Setting string to NULL disables that string. +// The order of manufacturer names must be the same like in @ref APP_USBD_STRINGS_LANGIDS. +#ifndef APP_USBD_STRINGS_MANUFACTURER +#define APP_USBD_STRINGS_MANUFACTURER APP_USBD_STRING_DESC("Nordic Semiconductor") +#endif + +// + +// APP_USBD_STRING_ID_PRODUCT - Define product string ID. + +// Setting ID to 0 disables the string. +//========================================================== +#ifndef APP_USBD_STRING_ID_PRODUCT +#define APP_USBD_STRING_ID_PRODUCT 2 +#endif +// APP_USBD_STRINGS_PRODUCT_EXTERN - Define whether @ref APP_USBD_STRINGS_PRODUCT is created by macro or declared as a global variable. + + +#ifndef APP_USBD_STRINGS_PRODUCT_EXTERN +#define APP_USBD_STRINGS_PRODUCT_EXTERN 0 +#endif + +// APP_USBD_STRINGS_PRODUCT - String descriptor for the product name. + +// Note: This value is not editable in Configuration Wizard. +// List of product names that is defined the same way like in @ref APP_USBD_STRINGS_MANUFACTURER. +#ifndef APP_USBD_STRINGS_PRODUCT +#define APP_USBD_STRINGS_PRODUCT APP_USBD_STRING_DESC("nRF52 USB Product") +#endif + +// + +// APP_USBD_STRING_ID_SERIAL - Define serial number string ID. + +// Setting ID to 0 disables the string. +//========================================================== +#ifndef APP_USBD_STRING_ID_SERIAL +#define APP_USBD_STRING_ID_SERIAL 3 +#endif +// APP_USBD_STRING_SERIAL_EXTERN - Define whether @ref APP_USBD_STRING_SERIAL is created by macro or declared as a global variable. + + +#ifndef APP_USBD_STRING_SERIAL_EXTERN +#define APP_USBD_STRING_SERIAL_EXTERN 0 +#endif + +// APP_USBD_STRING_SERIAL - String descriptor for the serial number. + +// Note: This value is not editable in Configuration Wizard. +// Serial number that is defined the same way like in @ref APP_USBD_STRINGS_MANUFACTURER. +#ifndef APP_USBD_STRING_SERIAL +#define APP_USBD_STRING_SERIAL APP_USBD_STRING_DESC("000000000000") +#endif + +// + +// APP_USBD_STRING_ID_CONFIGURATION - Define configuration string ID. + +// Setting ID to 0 disables the string. +//========================================================== +#ifndef APP_USBD_STRING_ID_CONFIGURATION +#define APP_USBD_STRING_ID_CONFIGURATION 4 +#endif +// APP_USBD_STRING_CONFIGURATION_EXTERN - Define whether @ref APP_USBD_STRINGS_CONFIGURATION is created by macro or declared as global variable. + + +#ifndef APP_USBD_STRING_CONFIGURATION_EXTERN +#define APP_USBD_STRING_CONFIGURATION_EXTERN 0 +#endif + +// APP_USBD_STRINGS_CONFIGURATION - String descriptor for the device configuration. + +// Note: This value is not editable in Configuration Wizard. +// Configuration string that is defined the same way like in @ref APP_USBD_STRINGS_MANUFACTURER. +#ifndef APP_USBD_STRINGS_CONFIGURATION +#define APP_USBD_STRINGS_CONFIGURATION APP_USBD_STRING_DESC("Default configuration") +#endif + +// + +// APP_USBD_STRINGS_USER - Default values for user strings. + +// Note: This value is not editable in Configuration Wizard. +// This value stores all application specific user strings with the default initialization. +// The setup is done by X-macros. +// Expected macro parameters: +// @code +// X(mnemonic, [=str_idx], ...) +// @endcode +// - @c mnemonic: Mnemonic of the string descriptor that would be added to +// @ref app_usbd_string_desc_idx_t enumerator. +// - @c str_idx : String index value, can be set or left empty. +// For example, WinUSB driver requires descriptor to be present on 0xEE index. +// Then use X(USBD_STRING_WINUSB, =0xEE, (APP_USBD_STRING_DESC(...))) +// - @c ... : List of string descriptors for each defined language. +#ifndef APP_USBD_STRINGS_USER +#define APP_USBD_STRINGS_USER X(APP_USER_1, , APP_USBD_STRING_DESC("User 1")) +#endif + +// + +// APP_USBD_HID_ENABLED - app_usbd_hid - USB HID class +//========================================================== +#ifndef APP_USBD_HID_ENABLED +#define APP_USBD_HID_ENABLED 0 +#endif +// APP_USBD_HID_DEFAULT_IDLE_RATE - Default idle rate for HID class. <0-255> + + +// 0 means indefinite duration, any other value is multiplied by 4 milliseconds. Refer to Chapter 7.2.4 of HID 1.11 Specification. + +#ifndef APP_USBD_HID_DEFAULT_IDLE_RATE +#define APP_USBD_HID_DEFAULT_IDLE_RATE 0 +#endif + +// APP_USBD_HID_REPORT_IDLE_TABLE_SIZE - Size of idle rate table. <1-255> + + +// Must be higher than the highest report ID used. + +#ifndef APP_USBD_HID_REPORT_IDLE_TABLE_SIZE +#define APP_USBD_HID_REPORT_IDLE_TABLE_SIZE 4 +#endif + +// + +// APP_USBD_HID_GENERIC_ENABLED - app_usbd_hid_generic - USB HID generic + + +#ifndef APP_USBD_HID_GENERIC_ENABLED +#define APP_USBD_HID_GENERIC_ENABLED 0 +#endif + +// APP_USBD_HID_KBD_ENABLED - app_usbd_hid_kbd - USB HID keyboard + + +#ifndef APP_USBD_HID_KBD_ENABLED +#define APP_USBD_HID_KBD_ENABLED 0 +#endif + +// APP_USBD_HID_MOUSE_ENABLED - app_usbd_hid_mouse - USB HID mouse + + +#ifndef APP_USBD_HID_MOUSE_ENABLED +#define APP_USBD_HID_MOUSE_ENABLED 0 +#endif + +// APP_USBD_MSC_ENABLED - app_usbd_msc - USB MSC class + + +#ifndef APP_USBD_MSC_ENABLED +#define APP_USBD_MSC_ENABLED 0 +#endif + +// CRC16_ENABLED - crc16 - CRC16 calculation routines + + +#ifndef CRC16_ENABLED +#define CRC16_ENABLED 0 +#endif + +// CRC32_ENABLED - crc32 - CRC32 calculation routines + + +#ifndef CRC32_ENABLED +#define CRC32_ENABLED 0 +#endif + +// ECC_ENABLED - ecc - Elliptic Curve Cryptography Library + + +#ifndef ECC_ENABLED +#define ECC_ENABLED 0 +#endif + +// FDS_ENABLED - fds - Flash data storage module +//========================================================== +#ifndef FDS_ENABLED +#define FDS_ENABLED 0 +#endif +// Pages - Virtual page settings + +// Configure the number of virtual pages to use and their size. +//========================================================== +// FDS_VIRTUAL_PAGES - Number of virtual flash pages to use. +// One of the virtual pages is reserved by the system for garbage collection. +// Therefore, the minimum is two virtual pages: one page to store data and one page to be used by the system for garbage collection. +// The total amount of flash memory that is used by FDS amounts to @ref FDS_VIRTUAL_PAGES * @ref FDS_VIRTUAL_PAGE_SIZE * 4 bytes. + +#ifndef FDS_VIRTUAL_PAGES +#define FDS_VIRTUAL_PAGES 3 +#endif + +// FDS_VIRTUAL_PAGE_SIZE - The size of a virtual flash page. + + +// Expressed in number of 4-byte words. +// By default, a virtual page is the same size as a physical page. +// The size of a virtual page must be a multiple of the size of a physical page. +// <1024=> 1024 +// <2048=> 2048 + +#ifndef FDS_VIRTUAL_PAGE_SIZE +#define FDS_VIRTUAL_PAGE_SIZE 1024 +#endif + +// FDS_VIRTUAL_PAGES_RESERVED - The number of virtual flash pages that are used by other modules. +// FDS module stores its data in the last pages of the flash memory. +// By setting this value, you can move flash end address used by the FDS. +// As a result the reserved space can be used by other modules. + +#ifndef FDS_VIRTUAL_PAGES_RESERVED +#define FDS_VIRTUAL_PAGES_RESERVED 0 +#endif + +// +//========================================================== + +// Backend - Backend configuration + +// Configure which nrf_fstorage backend is used by FDS to write to flash. +//========================================================== +// FDS_BACKEND - FDS flash backend. + + +// NRF_FSTORAGE_SD uses the nrf_fstorage_sd backend implementation using the SoftDevice API. Use this if you have a SoftDevice present. +// NRF_FSTORAGE_NVMC uses the nrf_fstorage_nvmc implementation. Use this setting if you don't use the SoftDevice. +// <1=> NRF_FSTORAGE_NVMC +// <2=> NRF_FSTORAGE_SD + +#ifndef FDS_BACKEND +#define FDS_BACKEND 2 +#endif + +// +//========================================================== + +// Queue - Queue settings + +//========================================================== +// FDS_OP_QUEUE_SIZE - Size of the internal queue. +// Increase this value if you frequently get synchronous FDS_ERR_NO_SPACE_IN_QUEUES errors. + +#ifndef FDS_OP_QUEUE_SIZE +#define FDS_OP_QUEUE_SIZE 4 +#endif + +// +//========================================================== + +// CRC - CRC functionality + +//========================================================== +// FDS_CRC_CHECK_ON_READ - Enable CRC checks. + +// Save a record's CRC when it is written to flash and check it when the record is opened. +// Records with an incorrect CRC can still be 'seen' by the user using FDS functions, but they cannot be opened. +// Additionally, they will not be garbage collected until they are deleted. +//========================================================== +#ifndef FDS_CRC_CHECK_ON_READ +#define FDS_CRC_CHECK_ON_READ 0 +#endif +// FDS_CRC_CHECK_ON_WRITE - Perform a CRC check on newly written records. + + +// Perform a CRC check on newly written records. +// This setting can be used to make sure that the record data was not altered while being written to flash. +// <1=> Enabled +// <0=> Disabled + +#ifndef FDS_CRC_CHECK_ON_WRITE +#define FDS_CRC_CHECK_ON_WRITE 0 +#endif + +// + +// +//========================================================== + +// Users - Number of users + +//========================================================== +// FDS_MAX_USERS - Maximum number of callbacks that can be registered. +#ifndef FDS_MAX_USERS +#define FDS_MAX_USERS 4 +#endif + +// +//========================================================== + +// + +// HARDFAULT_HANDLER_ENABLED - hardfault_default - HardFault default handler for debugging and release + + +#ifndef HARDFAULT_HANDLER_ENABLED +#define HARDFAULT_HANDLER_ENABLED 0 +#endif + +// HCI_MEM_POOL_ENABLED - hci_mem_pool - memory pool implementation used by HCI +//========================================================== +#ifndef HCI_MEM_POOL_ENABLED +#define HCI_MEM_POOL_ENABLED 0 +#endif +// HCI_TX_BUF_SIZE - TX buffer size in bytes. +#ifndef HCI_TX_BUF_SIZE +#define HCI_TX_BUF_SIZE 600 +#endif + +// HCI_RX_BUF_SIZE - RX buffer size in bytes. +#ifndef HCI_RX_BUF_SIZE +#define HCI_RX_BUF_SIZE 600 +#endif + +// HCI_RX_BUF_QUEUE_SIZE - RX buffer queue size. +#ifndef HCI_RX_BUF_QUEUE_SIZE +#define HCI_RX_BUF_QUEUE_SIZE 4 +#endif + +// + +// HCI_SLIP_ENABLED - hci_slip - SLIP protocol implementation used by HCI +//========================================================== +#ifndef HCI_SLIP_ENABLED +#define HCI_SLIP_ENABLED 0 +#endif +// HCI_UART_BAUDRATE - Default Baudrate + +// <323584=> 1200 baud +// <643072=> 2400 baud +// <1290240=> 4800 baud +// <2576384=> 9600 baud +// <3862528=> 14400 baud +// <5152768=> 19200 baud +// <7716864=> 28800 baud +// <10289152=> 38400 baud +// <15400960=> 57600 baud +// <20615168=> 76800 baud +// <30801920=> 115200 baud +// <61865984=> 230400 baud +// <67108864=> 250000 baud +// <121634816=> 460800 baud +// <251658240=> 921600 baud +// <268435456=> 1000000 baud + +#ifndef HCI_UART_BAUDRATE +#define HCI_UART_BAUDRATE 30801920 +#endif + +// HCI_UART_FLOW_CONTROL - Hardware Flow Control + +// <0=> Disabled +// <1=> Enabled + +#ifndef HCI_UART_FLOW_CONTROL +#define HCI_UART_FLOW_CONTROL 0 +#endif + +// HCI_UART_RX_PIN - UART RX pin +#ifndef HCI_UART_RX_PIN +#define HCI_UART_RX_PIN 31 +#endif + +// HCI_UART_TX_PIN - UART TX pin +#ifndef HCI_UART_TX_PIN +#define HCI_UART_TX_PIN 31 +#endif + +// HCI_UART_RTS_PIN - UART RTS pin +#ifndef HCI_UART_RTS_PIN +#define HCI_UART_RTS_PIN 31 +#endif + +// HCI_UART_CTS_PIN - UART CTS pin +#ifndef HCI_UART_CTS_PIN +#define HCI_UART_CTS_PIN 31 +#endif + +// + +// HCI_TRANSPORT_ENABLED - hci_transport - HCI transport +//========================================================== +#ifndef HCI_TRANSPORT_ENABLED +#define HCI_TRANSPORT_ENABLED 0 +#endif +// HCI_MAX_PACKET_SIZE_IN_BITS - Maximum size of a single application packet in bits. +#ifndef HCI_MAX_PACKET_SIZE_IN_BITS +#define HCI_MAX_PACKET_SIZE_IN_BITS 8000 +#endif + +// + +// LED_SOFTBLINK_ENABLED - led_softblink - led_softblink module + + +#ifndef LED_SOFTBLINK_ENABLED +#define LED_SOFTBLINK_ENABLED 0 +#endif + +// LOW_POWER_PWM_ENABLED - low_power_pwm - low_power_pwm module + + +#ifndef LOW_POWER_PWM_ENABLED +#define LOW_POWER_PWM_ENABLED 0 +#endif + +// MEM_MANAGER_ENABLED - mem_manager - Dynamic memory allocator +//========================================================== +#ifndef MEM_MANAGER_ENABLED +#define MEM_MANAGER_ENABLED 0 +#endif +// MEMORY_MANAGER_SMALL_BLOCK_COUNT - Size of each memory blocks identified as 'small' block. <0-255> + + +#ifndef MEMORY_MANAGER_SMALL_BLOCK_COUNT +#define MEMORY_MANAGER_SMALL_BLOCK_COUNT 1 +#endif + +// MEMORY_MANAGER_SMALL_BLOCK_SIZE - Size of each memory blocks identified as 'small' block. +// Size of each memory blocks identified as 'small' block. Memory block are recommended to be word-sized. + +#ifndef MEMORY_MANAGER_SMALL_BLOCK_SIZE +#define MEMORY_MANAGER_SMALL_BLOCK_SIZE 32 +#endif + +// MEMORY_MANAGER_MEDIUM_BLOCK_COUNT - Size of each memory blocks identified as 'medium' block. <0-255> + + +#ifndef MEMORY_MANAGER_MEDIUM_BLOCK_COUNT +#define MEMORY_MANAGER_MEDIUM_BLOCK_COUNT 0 +#endif + +// MEMORY_MANAGER_MEDIUM_BLOCK_SIZE - Size of each memory blocks identified as 'medium' block. +// Size of each memory blocks identified as 'medium' block. Memory block are recommended to be word-sized. + +#ifndef MEMORY_MANAGER_MEDIUM_BLOCK_SIZE +#define MEMORY_MANAGER_MEDIUM_BLOCK_SIZE 256 +#endif + +// MEMORY_MANAGER_LARGE_BLOCK_COUNT - Size of each memory blocks identified as 'large' block. <0-255> + + +#ifndef MEMORY_MANAGER_LARGE_BLOCK_COUNT +#define MEMORY_MANAGER_LARGE_BLOCK_COUNT 0 +#endif + +// MEMORY_MANAGER_LARGE_BLOCK_SIZE - Size of each memory blocks identified as 'large' block. +// Size of each memory blocks identified as 'large' block. Memory block are recommended to be word-sized. + +#ifndef MEMORY_MANAGER_LARGE_BLOCK_SIZE +#define MEMORY_MANAGER_LARGE_BLOCK_SIZE 256 +#endif + +// MEMORY_MANAGER_XLARGE_BLOCK_COUNT - Size of each memory blocks identified as 'extra large' block. <0-255> + + +#ifndef MEMORY_MANAGER_XLARGE_BLOCK_COUNT +#define MEMORY_MANAGER_XLARGE_BLOCK_COUNT 0 +#endif + +// MEMORY_MANAGER_XLARGE_BLOCK_SIZE - Size of each memory blocks identified as 'extra large' block. +// Size of each memory blocks identified as 'extra large' block. Memory block are recommended to be word-sized. + +#ifndef MEMORY_MANAGER_XLARGE_BLOCK_SIZE +#define MEMORY_MANAGER_XLARGE_BLOCK_SIZE 1320 +#endif + +// MEMORY_MANAGER_XXLARGE_BLOCK_COUNT - Size of each memory blocks identified as 'extra extra large' block. <0-255> + + +#ifndef MEMORY_MANAGER_XXLARGE_BLOCK_COUNT +#define MEMORY_MANAGER_XXLARGE_BLOCK_COUNT 0 +#endif + +// MEMORY_MANAGER_XXLARGE_BLOCK_SIZE - Size of each memory blocks identified as 'extra extra large' block. +// Size of each memory blocks identified as 'extra extra large' block. Memory block are recommended to be word-sized. + +#ifndef MEMORY_MANAGER_XXLARGE_BLOCK_SIZE +#define MEMORY_MANAGER_XXLARGE_BLOCK_SIZE 3444 +#endif + +// MEMORY_MANAGER_XSMALL_BLOCK_COUNT - Size of each memory blocks identified as 'extra small' block. <0-255> + + +#ifndef MEMORY_MANAGER_XSMALL_BLOCK_COUNT +#define MEMORY_MANAGER_XSMALL_BLOCK_COUNT 0 +#endif + +// MEMORY_MANAGER_XSMALL_BLOCK_SIZE - Size of each memory blocks identified as 'extra small' block. +// Size of each memory blocks identified as 'extra large' block. Memory block are recommended to be word-sized. + +#ifndef MEMORY_MANAGER_XSMALL_BLOCK_SIZE +#define MEMORY_MANAGER_XSMALL_BLOCK_SIZE 64 +#endif + +// MEMORY_MANAGER_XXSMALL_BLOCK_COUNT - Size of each memory blocks identified as 'extra extra small' block. <0-255> + + +#ifndef MEMORY_MANAGER_XXSMALL_BLOCK_COUNT +#define MEMORY_MANAGER_XXSMALL_BLOCK_COUNT 0 +#endif + +// MEMORY_MANAGER_XXSMALL_BLOCK_SIZE - Size of each memory blocks identified as 'extra extra small' block. +// Size of each memory blocks identified as 'extra extra small' block. Memory block are recommended to be word-sized. + +#ifndef MEMORY_MANAGER_XXSMALL_BLOCK_SIZE +#define MEMORY_MANAGER_XXSMALL_BLOCK_SIZE 32 +#endif + +// MEM_MANAGER_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef MEM_MANAGER_CONFIG_LOG_ENABLED +#define MEM_MANAGER_CONFIG_LOG_ENABLED 0 +#endif +// MEM_MANAGER_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef MEM_MANAGER_CONFIG_LOG_LEVEL +#define MEM_MANAGER_CONFIG_LOG_LEVEL 3 +#endif + +// MEM_MANAGER_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef MEM_MANAGER_CONFIG_INFO_COLOR +#define MEM_MANAGER_CONFIG_INFO_COLOR 0 +#endif + +// MEM_MANAGER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef MEM_MANAGER_CONFIG_DEBUG_COLOR +#define MEM_MANAGER_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// MEM_MANAGER_DISABLE_API_PARAM_CHECK - Disable API parameter checks in the module. + + +#ifndef MEM_MANAGER_DISABLE_API_PARAM_CHECK +#define MEM_MANAGER_DISABLE_API_PARAM_CHECK 0 +#endif + +// + +// NRF_BALLOC_ENABLED - nrf_balloc - Block allocator module +//========================================================== +#ifndef NRF_BALLOC_ENABLED +#define NRF_BALLOC_ENABLED 1 +#endif +// NRF_BALLOC_CONFIG_DEBUG_ENABLED - Enables debug mode in the module. +//========================================================== +#ifndef NRF_BALLOC_CONFIG_DEBUG_ENABLED +#define NRF_BALLOC_CONFIG_DEBUG_ENABLED 0 +#endif +// NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS - Number of words used as head guard. <0-255> + + +#ifndef NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS +#define NRF_BALLOC_CONFIG_HEAD_GUARD_WORDS 1 +#endif + +// NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS - Number of words used as tail guard. <0-255> + + +#ifndef NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS +#define NRF_BALLOC_CONFIG_TAIL_GUARD_WORDS 1 +#endif + +// NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED - Enables basic checks in this module. + + +#ifndef NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED +#define NRF_BALLOC_CONFIG_BASIC_CHECKS_ENABLED 0 +#endif + +// NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED - Enables double memory free check in this module. + + +#ifndef NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED +#define NRF_BALLOC_CONFIG_DOUBLE_FREE_CHECK_ENABLED 0 +#endif + +// NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED - Enables free memory corruption check in this module. + + +#ifndef NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED +#define NRF_BALLOC_CONFIG_DATA_TRASHING_CHECK_ENABLED 0 +#endif + +// NRF_BALLOC_CLI_CMDS - Enable CLI commands specific to the module + + +#ifndef NRF_BALLOC_CLI_CMDS +#define NRF_BALLOC_CLI_CMDS 0 +#endif + +// + +// + +// NRF_CSENSE_ENABLED - nrf_csense - Capacitive sensor module +//========================================================== +#ifndef NRF_CSENSE_ENABLED +#define NRF_CSENSE_ENABLED 0 +#endif +// NRF_CSENSE_PAD_HYSTERESIS - Minimum value of change required to determine that a pad was touched. +#ifndef NRF_CSENSE_PAD_HYSTERESIS +#define NRF_CSENSE_PAD_HYSTERESIS 15 +#endif + +// NRF_CSENSE_PAD_DEVIATION - Minimum value measured on a pad required to take it into account while calculating the step. +#ifndef NRF_CSENSE_PAD_DEVIATION +#define NRF_CSENSE_PAD_DEVIATION 70 +#endif + +// NRF_CSENSE_MIN_PAD_VALUE - Minimum normalized value on a pad required to take its value into account. +#ifndef NRF_CSENSE_MIN_PAD_VALUE +#define NRF_CSENSE_MIN_PAD_VALUE 20 +#endif + +// NRF_CSENSE_MAX_PADS_NUMBER - Maximum number of pads used for one instance. +#ifndef NRF_CSENSE_MAX_PADS_NUMBER +#define NRF_CSENSE_MAX_PADS_NUMBER 20 +#endif + +// NRF_CSENSE_MAX_VALUE - Maximum normalized value obtained from measurement. +#ifndef NRF_CSENSE_MAX_VALUE +#define NRF_CSENSE_MAX_VALUE 1000 +#endif + +// NRF_CSENSE_OUTPUT_PIN - Output pin used by the low-level module. +// This is used when capacitive sensor does not use COMP. + +#ifndef NRF_CSENSE_OUTPUT_PIN +#define NRF_CSENSE_OUTPUT_PIN 26 +#endif + +// + +// NRF_DRV_CSENSE_ENABLED - nrf_drv_csense - Capacitive sensor low-level module +//========================================================== +#ifndef NRF_DRV_CSENSE_ENABLED +#define NRF_DRV_CSENSE_ENABLED 0 +#endif +// USE_COMP - Use the comparator to implement the capacitive sensor driver. + +// Due to Anomaly 84, COMP I_SOURCE is not functional. It has too high a varation. +//========================================================== +#ifndef USE_COMP +#define USE_COMP 0 +#endif +// TIMER0_FOR_CSENSE - First TIMER instance used by the driver (not used on nRF51). +#ifndef TIMER0_FOR_CSENSE +#define TIMER0_FOR_CSENSE 1 +#endif + +// TIMER1_FOR_CSENSE - Second TIMER instance used by the driver (not used on nRF51). +#ifndef TIMER1_FOR_CSENSE +#define TIMER1_FOR_CSENSE 2 +#endif + +// MEASUREMENT_PERIOD - Single measurement period. +// Time of a single measurement can be calculated as +// T = (1/2)*MEASUREMENT_PERIOD*(1/f_OSC) where f_OSC = I_SOURCE / (2C*(VUP-VDOWN) ). +// I_SOURCE, VUP, and VDOWN are values used to initialize COMP and C is the capacitance of the used pad. + +#ifndef MEASUREMENT_PERIOD +#define MEASUREMENT_PERIOD 20 +#endif + +// + +// + +// NRF_FSTORAGE_ENABLED - nrf_fstorage - Flash abstraction library +//========================================================== +#ifndef NRF_FSTORAGE_ENABLED +#define NRF_FSTORAGE_ENABLED 0 +#endif +// nrf_fstorage - Common settings + +// Common settings to all fstorage implementations +//========================================================== +// NRF_FSTORAGE_PARAM_CHECK_DISABLED - Disable user input validation + + +// If selected, use ASSERT to validate user input. +// This effectively removes user input validation in production code. +// Recommended setting: OFF, only enable this setting if size is a major concern. + +#ifndef NRF_FSTORAGE_PARAM_CHECK_DISABLED +#define NRF_FSTORAGE_PARAM_CHECK_DISABLED 0 +#endif + +// +//========================================================== + +// nrf_fstorage_sd - Implementation using the SoftDevice + +// Configuration options for the fstorage implementation using the SoftDevice +//========================================================== +// NRF_FSTORAGE_SD_QUEUE_SIZE - Size of the internal queue of operations +// Increase this value if API calls frequently return the error @ref NRF_ERROR_NO_MEM. + +#ifndef NRF_FSTORAGE_SD_QUEUE_SIZE +#define NRF_FSTORAGE_SD_QUEUE_SIZE 4 +#endif + +// NRF_FSTORAGE_SD_MAX_RETRIES - Maximum number of attempts at executing an operation when the SoftDevice is busy +// Increase this value if events frequently return the @ref NRF_ERROR_TIMEOUT error. +// The SoftDevice might fail to schedule flash access due to high BLE activity. + +#ifndef NRF_FSTORAGE_SD_MAX_RETRIES +#define NRF_FSTORAGE_SD_MAX_RETRIES 8 +#endif + +// NRF_FSTORAGE_SD_MAX_WRITE_SIZE - Maximum number of bytes to be written to flash in a single operation +// This value must be a multiple of four. +// Lowering this value can increase the chances of the SoftDevice being able to execute flash operations in between radio activity. +// This value is bound by the maximum number of bytes that can be written to flash in a single call to @ref sd_flash_write. +// That is 1024 bytes for nRF51 ICs and 4096 bytes for nRF52 ICs. + +#ifndef NRF_FSTORAGE_SD_MAX_WRITE_SIZE +#define NRF_FSTORAGE_SD_MAX_WRITE_SIZE 4096 +#endif + +// +//========================================================== + +// + +// NRF_GFX_ENABLED - nrf_gfx - GFX module + + +#ifndef NRF_GFX_ENABLED +#define NRF_GFX_ENABLED 0 +#endif + +// NRF_MEMOBJ_ENABLED - nrf_memobj - Linked memory allocator module + + +#ifndef NRF_MEMOBJ_ENABLED +#define NRF_MEMOBJ_ENABLED 1 +#endif + +// NRF_PWR_MGMT_ENABLED - nrf_pwr_mgmt - Power management module +//========================================================== +#ifndef NRF_PWR_MGMT_ENABLED +#define NRF_PWR_MGMT_ENABLED 0 +#endif +// NRF_PWR_MGMT_CONFIG_DEBUG_PIN_ENABLED - Enables pin debug in the module. + +// Selected pin will be set when CPU is in sleep mode. +//========================================================== +#ifndef NRF_PWR_MGMT_CONFIG_DEBUG_PIN_ENABLED +#define NRF_PWR_MGMT_CONFIG_DEBUG_PIN_ENABLED 0 +#endif +// NRF_PWR_MGMT_SLEEP_DEBUG_PIN - Pin number + +// <0=> 0 (P0.0) +// <1=> 1 (P0.1) +// <2=> 2 (P0.2) +// <3=> 3 (P0.3) +// <4=> 4 (P0.4) +// <5=> 5 (P0.5) +// <6=> 6 (P0.6) +// <7=> 7 (P0.7) +// <8=> 8 (P0.8) +// <9=> 9 (P0.9) +// <10=> 10 (P0.10) +// <11=> 11 (P0.11) +// <12=> 12 (P0.12) +// <13=> 13 (P0.13) +// <14=> 14 (P0.14) +// <15=> 15 (P0.15) +// <16=> 16 (P0.16) +// <17=> 17 (P0.17) +// <18=> 18 (P0.18) +// <19=> 19 (P0.19) +// <20=> 20 (P0.20) +// <21=> 21 (P0.21) +// <22=> 22 (P0.22) +// <23=> 23 (P0.23) +// <24=> 24 (P0.24) +// <25=> 25 (P0.25) +// <26=> 26 (P0.26) +// <27=> 27 (P0.27) +// <28=> 28 (P0.28) +// <29=> 29 (P0.29) +// <30=> 30 (P0.30) +// <31=> 31 (P0.31) +// <32=> 32 (P1.0) +// <33=> 33 (P1.1) +// <34=> 34 (P1.2) +// <35=> 35 (P1.3) +// <36=> 36 (P1.4) +// <37=> 37 (P1.5) +// <38=> 38 (P1.6) +// <39=> 39 (P1.7) +// <40=> 40 (P1.8) +// <41=> 41 (P1.9) +// <42=> 42 (P1.10) +// <43=> 43 (P1.11) +// <44=> 44 (P1.12) +// <45=> 45 (P1.13) +// <46=> 46 (P1.14) +// <47=> 47 (P1.15) +// <4294967295=> Not connected + +#ifndef NRF_PWR_MGMT_SLEEP_DEBUG_PIN +#define NRF_PWR_MGMT_SLEEP_DEBUG_PIN 31 +#endif + +// + +// NRF_PWR_MGMT_CONFIG_CPU_USAGE_MONITOR_ENABLED - Enables CPU usage monitor. + + +// Module will trace percentage of CPU usage in one second intervals. + +#ifndef NRF_PWR_MGMT_CONFIG_CPU_USAGE_MONITOR_ENABLED +#define NRF_PWR_MGMT_CONFIG_CPU_USAGE_MONITOR_ENABLED 0 +#endif + +// NRF_PWR_MGMT_CONFIG_STANDBY_TIMEOUT_ENABLED - Enable standby timeout. +//========================================================== +#ifndef NRF_PWR_MGMT_CONFIG_STANDBY_TIMEOUT_ENABLED +#define NRF_PWR_MGMT_CONFIG_STANDBY_TIMEOUT_ENABLED 0 +#endif +// NRF_PWR_MGMT_CONFIG_STANDBY_TIMEOUT_S - Standby timeout (in seconds). +// Shutdown procedure will begin no earlier than after this number of seconds. + +#ifndef NRF_PWR_MGMT_CONFIG_STANDBY_TIMEOUT_S +#define NRF_PWR_MGMT_CONFIG_STANDBY_TIMEOUT_S 3 +#endif + +// + +// NRF_PWR_MGMT_CONFIG_FPU_SUPPORT_ENABLED - Enables FPU event cleaning. + + +#ifndef NRF_PWR_MGMT_CONFIG_FPU_SUPPORT_ENABLED +#define NRF_PWR_MGMT_CONFIG_FPU_SUPPORT_ENABLED 0 +#endif + +// NRF_PWR_MGMT_CONFIG_AUTO_SHUTDOWN_RETRY - Blocked shutdown procedure will be retried every second. + + +#ifndef NRF_PWR_MGMT_CONFIG_AUTO_SHUTDOWN_RETRY +#define NRF_PWR_MGMT_CONFIG_AUTO_SHUTDOWN_RETRY 0 +#endif + +// NRF_PWR_MGMT_CONFIG_USE_SCHEDULER - Module will use @ref app_scheduler. + + +#ifndef NRF_PWR_MGMT_CONFIG_USE_SCHEDULER +#define NRF_PWR_MGMT_CONFIG_USE_SCHEDULER 0 +#endif + +// NRF_PWR_MGMT_CONFIG_HANDLER_PRIORITY_COUNT - The number of priorities for module handlers. +// The number of stages of the shutdown process. + +#ifndef NRF_PWR_MGMT_CONFIG_HANDLER_PRIORITY_COUNT +#define NRF_PWR_MGMT_CONFIG_HANDLER_PRIORITY_COUNT 3 +#endif + +// + +// NRF_QUEUE_ENABLED - nrf_queue - Queue module +//========================================================== +#ifndef NRF_QUEUE_ENABLED +#define NRF_QUEUE_ENABLED 0 +#endif +// NRF_QUEUE_CLI_CMDS - Enable CLI commands specific to the module + + +#ifndef NRF_QUEUE_CLI_CMDS +#define NRF_QUEUE_CLI_CMDS 0 +#endif + +// + +// NRF_SECTION_ITER_ENABLED - nrf_section_iter - Section iterator + + +#ifndef NRF_SECTION_ITER_ENABLED +#define NRF_SECTION_ITER_ENABLED 1 +#endif + +// NRF_SORTLIST_ENABLED - nrf_sortlist - Sorted list + + +#ifndef NRF_SORTLIST_ENABLED +#define NRF_SORTLIST_ENABLED 1 +#endif + +// NRF_SPI_MNGR_ENABLED - nrf_spi_mngr - SPI transaction manager + + +#ifndef NRF_SPI_MNGR_ENABLED +#define NRF_SPI_MNGR_ENABLED 0 +#endif + +// NRF_STRERROR_ENABLED - nrf_strerror - Library for converting error code to string. + + +#ifndef NRF_STRERROR_ENABLED +#define NRF_STRERROR_ENABLED 1 +#endif + +// NRF_TWI_MNGR_ENABLED - nrf_twi_mngr - TWI transaction manager + + +#ifndef NRF_TWI_MNGR_ENABLED +#define NRF_TWI_MNGR_ENABLED 0 +#endif + +// SLIP_ENABLED - slip - SLIP encoding and decoding + + +#ifndef SLIP_ENABLED +#define SLIP_ENABLED 0 +#endif + +// TASK_MANAGER_ENABLED - task_manager - Task manager. +//========================================================== +#ifndef TASK_MANAGER_ENABLED +#define TASK_MANAGER_ENABLED 0 +#endif +// TASK_MANAGER_CLI_CMDS - Enable CLI commands specific to the module + + +#ifndef TASK_MANAGER_CLI_CMDS +#define TASK_MANAGER_CLI_CMDS 0 +#endif + +// TASK_MANAGER_CONFIG_MAX_TASKS - Maximum number of tasks which can be created +#ifndef TASK_MANAGER_CONFIG_MAX_TASKS +#define TASK_MANAGER_CONFIG_MAX_TASKS 2 +#endif + +// TASK_MANAGER_CONFIG_STACK_SIZE - Stack size for every task (power of 2) +#ifndef TASK_MANAGER_CONFIG_STACK_SIZE +#define TASK_MANAGER_CONFIG_STACK_SIZE 1024 +#endif + +// TASK_MANAGER_CONFIG_STACK_PROFILER_ENABLED - Enable stack profiling. + + +#ifndef TASK_MANAGER_CONFIG_STACK_PROFILER_ENABLED +#define TASK_MANAGER_CONFIG_STACK_PROFILER_ENABLED 1 +#endif + +// TASK_MANAGER_CONFIG_STACK_GUARD - Configures stack guard. + +// <0=> Disabled +// <4=> 32 bytes +// <5=> 64 bytes +// <6=> 128 bytes +// <7=> 256 bytes +// <8=> 512 bytes + +#ifndef TASK_MANAGER_CONFIG_STACK_GUARD +#define TASK_MANAGER_CONFIG_STACK_GUARD 7 +#endif + +// + +// app_button - buttons handling module + +//========================================================== +// BUTTON_ENABLED - Enables Button module + + +#ifndef BUTTON_ENABLED +#define BUTTON_ENABLED 0 +#endif + +// BUTTON_HIGH_ACCURACY_ENABLED - Enables GPIOTE high accuracy for buttons + + +#ifndef BUTTON_HIGH_ACCURACY_ENABLED +#define BUTTON_HIGH_ACCURACY_ENABLED 0 +#endif + +// +//========================================================== + +// app_usbd_cdc_acm - USB CDC ACM class + +//========================================================== +// APP_USBD_CDC_ACM_ENABLED - Enabling USBD CDC ACM Class library + + +#ifndef APP_USBD_CDC_ACM_ENABLED +#define APP_USBD_CDC_ACM_ENABLED 0 +#endif + +// APP_USBD_CDC_ACM_ZLP_ON_EPSIZE_WRITE - Send ZLP on write with same size as endpoint + + +// If enabled, CDC ACM class will automatically send a zero length packet after transfer which has the same size as endpoint. +// This may limit throughput if a lot of binary data is sent, but in terminal mode operation it makes sure that the data is always displayed right after it is sent. + +#ifndef APP_USBD_CDC_ACM_ZLP_ON_EPSIZE_WRITE +#define APP_USBD_CDC_ACM_ZLP_ON_EPSIZE_WRITE 1 +#endif + +// +//========================================================== + +// nrf_cli - Command line interface + +//========================================================== +// NRF_CLI_ENABLED - Enable/disable the CLI module. + + +#ifndef NRF_CLI_ENABLED +#define NRF_CLI_ENABLED 0 +#endif + +// NRF_CLI_ARGC_MAX - Maximum number of parameters passed to the command handler. +#ifndef NRF_CLI_ARGC_MAX +#define NRF_CLI_ARGC_MAX 12 +#endif + +// NRF_CLI_BUILD_IN_CMDS_ENABLED - CLI built-in commands. + + +#ifndef NRF_CLI_BUILD_IN_CMDS_ENABLED +#define NRF_CLI_BUILD_IN_CMDS_ENABLED 1 +#endif + +// NRF_CLI_CMD_BUFF_SIZE - Maximum buffer size for a single command. +#ifndef NRF_CLI_CMD_BUFF_SIZE +#define NRF_CLI_CMD_BUFF_SIZE 128 +#endif + +// NRF_CLI_ECHO_STATUS - CLI echo status. If set, echo is ON. + + +#ifndef NRF_CLI_ECHO_STATUS +#define NRF_CLI_ECHO_STATUS 1 +#endif + +// NRF_CLI_WILDCARD_ENABLED - Enable wildcard functionality for CLI commands. + + +#ifndef NRF_CLI_WILDCARD_ENABLED +#define NRF_CLI_WILDCARD_ENABLED 0 +#endif + +// NRF_CLI_METAKEYS_ENABLED - Enable additional control keys for CLI commands like ctrl+a, ctrl+e, ctrl+w, ctrl+u + + +#ifndef NRF_CLI_METAKEYS_ENABLED +#define NRF_CLI_METAKEYS_ENABLED 0 +#endif + +// NRF_CLI_PRINTF_BUFF_SIZE - Maximum print buffer size. +#ifndef NRF_CLI_PRINTF_BUFF_SIZE +#define NRF_CLI_PRINTF_BUFF_SIZE 23 +#endif + +// NRF_CLI_HISTORY_ENABLED - Enable CLI history mode. +//========================================================== +#ifndef NRF_CLI_HISTORY_ENABLED +#define NRF_CLI_HISTORY_ENABLED 1 +#endif +// NRF_CLI_HISTORY_ELEMENT_SIZE - Size of one memory object reserved for CLI history. +#ifndef NRF_CLI_HISTORY_ELEMENT_SIZE +#define NRF_CLI_HISTORY_ELEMENT_SIZE 32 +#endif + +// NRF_CLI_HISTORY_ELEMENT_COUNT - Number of history memory objects. +#ifndef NRF_CLI_HISTORY_ELEMENT_COUNT +#define NRF_CLI_HISTORY_ELEMENT_COUNT 8 +#endif + +// + +// NRF_CLI_VT100_COLORS_ENABLED - CLI VT100 colors. + + +#ifndef NRF_CLI_VT100_COLORS_ENABLED +#define NRF_CLI_VT100_COLORS_ENABLED 1 +#endif + +// NRF_CLI_STATISTICS_ENABLED - Enable CLI statistics. + + +#ifndef NRF_CLI_STATISTICS_ENABLED +#define NRF_CLI_STATISTICS_ENABLED 1 +#endif + +// NRF_CLI_LOG_BACKEND - Enable logger backend interface. + + +#ifndef NRF_CLI_LOG_BACKEND +#define NRF_CLI_LOG_BACKEND 1 +#endif + +// NRF_CLI_USES_TASK_MANAGER_ENABLED - Enable CLI to use task_manager + + +#ifndef NRF_CLI_USES_TASK_MANAGER_ENABLED +#define NRF_CLI_USES_TASK_MANAGER_ENABLED 0 +#endif + +// +//========================================================== + +// nrf_fprintf - fprintf function. + +//========================================================== +// NRF_FPRINTF_ENABLED - Enable/disable fprintf module. + + +#ifndef NRF_FPRINTF_ENABLED +#define NRF_FPRINTF_ENABLED 1 +#endif + +// NRF_FPRINTF_FLAG_AUTOMATIC_CR_ON_LF_ENABLED - For each printed LF, function will add CR. + + +#ifndef NRF_FPRINTF_FLAG_AUTOMATIC_CR_ON_LF_ENABLED +#define NRF_FPRINTF_FLAG_AUTOMATIC_CR_ON_LF_ENABLED 1 +#endif + +// NRF_FPRINTF_DOUBLE_ENABLED - Enable IEEE-754 double precision formatting. + + +#ifndef NRF_FPRINTF_DOUBLE_ENABLED +#define NRF_FPRINTF_DOUBLE_ENABLED 0 +#endif + +// +//========================================================== + +// +//========================================================== + +// nRF_Log + +//========================================================== +// NRF_LOG_ENABLED - nrf_log - Logger +//========================================================== +#ifndef NRF_LOG_ENABLED +#define NRF_LOG_ENABLED 0 +#endif +// Log message pool - Configuration of log message pool + +//========================================================== +// NRF_LOG_MSGPOOL_ELEMENT_SIZE - Size of a single element in the pool of memory objects. +// If a small value is set, then performance of logs processing +// is degraded because data is fragmented. Bigger value impacts +// RAM memory utilization. The size is set to fit a message with +// a timestamp and up to 2 arguments in a single memory object. + +#ifndef NRF_LOG_MSGPOOL_ELEMENT_SIZE +#define NRF_LOG_MSGPOOL_ELEMENT_SIZE 20 +#endif + +// NRF_LOG_MSGPOOL_ELEMENT_COUNT - Number of elements in the pool of memory objects +// If a small value is set, then it may lead to a deadlock +// in certain cases if backend has high latency and holds +// multiple messages for long time. Bigger value impacts +// RAM memory usage. + +#ifndef NRF_LOG_MSGPOOL_ELEMENT_COUNT +#define NRF_LOG_MSGPOOL_ELEMENT_COUNT 8 +#endif + +// +//========================================================== + +// NRF_LOG_ALLOW_OVERFLOW - Configures behavior when circular buffer is full. + + +// If set then oldest logs are overwritten. Otherwise a +// marker is injected informing about overflow. + +#ifndef NRF_LOG_ALLOW_OVERFLOW +#define NRF_LOG_ALLOW_OVERFLOW 1 +#endif + +// NRF_LOG_BUFSIZE - Size of the buffer for storing logs (in bytes). + + +// Must be power of 2 and multiple of 4. +// If NRF_LOG_DEFERRED = 0 then buffer size can be reduced to minimum. +// <128=> 128 +// <256=> 256 +// <512=> 512 +// <1024=> 1024 +// <2048=> 2048 +// <4096=> 4096 +// <8192=> 8192 +// <16384=> 16384 + +#ifndef NRF_LOG_BUFSIZE +#define NRF_LOG_BUFSIZE 1024 +#endif + +// NRF_LOG_CLI_CMDS - Enable CLI commands for the module. + + +#ifndef NRF_LOG_CLI_CMDS +#define NRF_LOG_CLI_CMDS 0 +#endif + +// NRF_LOG_DEFAULT_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRF_LOG_DEFAULT_LEVEL +#define NRF_LOG_DEFAULT_LEVEL 3 +#endif + +// NRF_LOG_DEFERRED - Enable deffered logger. + + +// Log data is buffered and can be processed in idle. + +#ifndef NRF_LOG_DEFERRED +#define NRF_LOG_DEFERRED 1 +#endif + +// NRF_LOG_FILTERS_ENABLED - Enable dynamic filtering of logs. + + +#ifndef NRF_LOG_FILTERS_ENABLED +#define NRF_LOG_FILTERS_ENABLED 0 +#endif + +// NRF_LOG_NON_DEFFERED_CRITICAL_REGION_ENABLED - Enable use of critical region for non deffered mode when flushing logs. + + +// When enabled NRF_LOG_FLUSH is called from critical section when non deffered mode is used. +// Log output will never be corrupted as access to the log backend is exclusive +// but system will spend significant amount of time in critical section + +#ifndef NRF_LOG_NON_DEFFERED_CRITICAL_REGION_ENABLED +#define NRF_LOG_NON_DEFFERED_CRITICAL_REGION_ENABLED 0 +#endif + +// NRF_LOG_STR_PUSH_BUFFER_SIZE - Size of the buffer dedicated for strings stored using @ref NRF_LOG_PUSH. + +// <16=> 16 +// <32=> 32 +// <64=> 64 +// <128=> 128 +// <256=> 256 +// <512=> 512 +// <1024=> 1024 + +#ifndef NRF_LOG_STR_PUSH_BUFFER_SIZE +#define NRF_LOG_STR_PUSH_BUFFER_SIZE 128 +#endif + +// NRF_LOG_STR_PUSH_BUFFER_SIZE - Size of the buffer dedicated for strings stored using @ref NRF_LOG_PUSH. + +// <16=> 16 +// <32=> 32 +// <64=> 64 +// <128=> 128 +// <256=> 256 +// <512=> 512 +// <1024=> 1024 + +#ifndef NRF_LOG_STR_PUSH_BUFFER_SIZE +#define NRF_LOG_STR_PUSH_BUFFER_SIZE 128 +#endif + +// NRF_LOG_USES_COLORS - If enabled then ANSI escape code for colors is prefixed to every string +//========================================================== +#ifndef NRF_LOG_USES_COLORS +#define NRF_LOG_USES_COLORS 0 +#endif +// NRF_LOG_COLOR_DEFAULT - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_LOG_COLOR_DEFAULT +#define NRF_LOG_COLOR_DEFAULT 0 +#endif + +// NRF_LOG_ERROR_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_LOG_ERROR_COLOR +#define NRF_LOG_ERROR_COLOR 2 +#endif + +// NRF_LOG_WARNING_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_LOG_WARNING_COLOR +#define NRF_LOG_WARNING_COLOR 4 +#endif + +// + +// NRF_LOG_USES_TIMESTAMP - Enable timestamping + +// Function for getting the timestamp is provided by the user +//========================================================== +#ifndef NRF_LOG_USES_TIMESTAMP +#define NRF_LOG_USES_TIMESTAMP 0 +#endif +// NRF_LOG_TIMESTAMP_DEFAULT_FREQUENCY - Default frequency of the timestamp (in Hz) or 0 to use app_timer frequency. +#ifndef NRF_LOG_TIMESTAMP_DEFAULT_FREQUENCY +#define NRF_LOG_TIMESTAMP_DEFAULT_FREQUENCY 0 +#endif + +// + +// nrf_log module configuration + +//========================================================== +// nrf_log in nRF_Core + +//========================================================== +// NRF_MPU_LIB_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRF_MPU_LIB_CONFIG_LOG_ENABLED +#define NRF_MPU_LIB_CONFIG_LOG_ENABLED 0 +#endif +// NRF_MPU_LIB_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRF_MPU_LIB_CONFIG_LOG_LEVEL +#define NRF_MPU_LIB_CONFIG_LOG_LEVEL 3 +#endif + +// NRF_MPU_LIB_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_MPU_LIB_CONFIG_INFO_COLOR +#define NRF_MPU_LIB_CONFIG_INFO_COLOR 0 +#endif + +// NRF_MPU_LIB_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_MPU_LIB_CONFIG_DEBUG_COLOR +#define NRF_MPU_LIB_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// NRF_STACK_GUARD_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRF_STACK_GUARD_CONFIG_LOG_ENABLED +#define NRF_STACK_GUARD_CONFIG_LOG_ENABLED 0 +#endif +// NRF_STACK_GUARD_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRF_STACK_GUARD_CONFIG_LOG_LEVEL +#define NRF_STACK_GUARD_CONFIG_LOG_LEVEL 3 +#endif + +// NRF_STACK_GUARD_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_STACK_GUARD_CONFIG_INFO_COLOR +#define NRF_STACK_GUARD_CONFIG_INFO_COLOR 0 +#endif + +// NRF_STACK_GUARD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_STACK_GUARD_CONFIG_DEBUG_COLOR +#define NRF_STACK_GUARD_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// TASK_MANAGER_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef TASK_MANAGER_CONFIG_LOG_ENABLED +#define TASK_MANAGER_CONFIG_LOG_ENABLED 0 +#endif +// TASK_MANAGER_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef TASK_MANAGER_CONFIG_LOG_LEVEL +#define TASK_MANAGER_CONFIG_LOG_LEVEL 3 +#endif + +// TASK_MANAGER_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef TASK_MANAGER_CONFIG_INFO_COLOR +#define TASK_MANAGER_CONFIG_INFO_COLOR 0 +#endif + +// TASK_MANAGER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef TASK_MANAGER_CONFIG_DEBUG_COLOR +#define TASK_MANAGER_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// +//========================================================== + +// nrf_log in nRF_Drivers + +//========================================================== +// CLOCK_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef CLOCK_CONFIG_LOG_ENABLED +#define CLOCK_CONFIG_LOG_ENABLED 0 +#endif +// CLOCK_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef CLOCK_CONFIG_LOG_LEVEL +#define CLOCK_CONFIG_LOG_LEVEL 3 +#endif + +// CLOCK_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef CLOCK_CONFIG_INFO_COLOR +#define CLOCK_CONFIG_INFO_COLOR 0 +#endif + +// CLOCK_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef CLOCK_CONFIG_DEBUG_COLOR +#define CLOCK_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// COMP_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef COMP_CONFIG_LOG_ENABLED +#define COMP_CONFIG_LOG_ENABLED 0 +#endif +// COMP_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef COMP_CONFIG_LOG_LEVEL +#define COMP_CONFIG_LOG_LEVEL 3 +#endif + +// COMP_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef COMP_CONFIG_INFO_COLOR +#define COMP_CONFIG_INFO_COLOR 0 +#endif + +// COMP_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef COMP_CONFIG_DEBUG_COLOR +#define COMP_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// GPIOTE_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef GPIOTE_CONFIG_LOG_ENABLED +#define GPIOTE_CONFIG_LOG_ENABLED 0 +#endif +// GPIOTE_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef GPIOTE_CONFIG_LOG_LEVEL +#define GPIOTE_CONFIG_LOG_LEVEL 3 +#endif + +// GPIOTE_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef GPIOTE_CONFIG_INFO_COLOR +#define GPIOTE_CONFIG_INFO_COLOR 0 +#endif + +// GPIOTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef GPIOTE_CONFIG_DEBUG_COLOR +#define GPIOTE_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// LPCOMP_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef LPCOMP_CONFIG_LOG_ENABLED +#define LPCOMP_CONFIG_LOG_ENABLED 0 +#endif +// LPCOMP_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef LPCOMP_CONFIG_LOG_LEVEL +#define LPCOMP_CONFIG_LOG_LEVEL 3 +#endif + +// LPCOMP_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef LPCOMP_CONFIG_INFO_COLOR +#define LPCOMP_CONFIG_INFO_COLOR 0 +#endif + +// LPCOMP_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef LPCOMP_CONFIG_DEBUG_COLOR +#define LPCOMP_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// MAX3421E_HOST_CONFIG_LOG_ENABLED - Enable logging in the module +//========================================================== +#ifndef MAX3421E_HOST_CONFIG_LOG_ENABLED +#define MAX3421E_HOST_CONFIG_LOG_ENABLED 0 +#endif +// MAX3421E_HOST_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef MAX3421E_HOST_CONFIG_LOG_LEVEL +#define MAX3421E_HOST_CONFIG_LOG_LEVEL 3 +#endif + +// MAX3421E_HOST_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef MAX3421E_HOST_CONFIG_INFO_COLOR +#define MAX3421E_HOST_CONFIG_INFO_COLOR 0 +#endif + +// MAX3421E_HOST_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef MAX3421E_HOST_CONFIG_DEBUG_COLOR +#define MAX3421E_HOST_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// NRFX_USBD_CONFIG_LOG_ENABLED - Enable logging in the module +//========================================================== +#ifndef NRFX_USBD_CONFIG_LOG_ENABLED +#define NRFX_USBD_CONFIG_LOG_ENABLED 0 +#endif +// NRFX_USBD_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRFX_USBD_CONFIG_LOG_LEVEL +#define NRFX_USBD_CONFIG_LOG_LEVEL 3 +#endif + +// NRFX_USBD_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_USBD_CONFIG_INFO_COLOR +#define NRFX_USBD_CONFIG_INFO_COLOR 0 +#endif + +// NRFX_USBD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRFX_USBD_CONFIG_DEBUG_COLOR +#define NRFX_USBD_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// PDM_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef PDM_CONFIG_LOG_ENABLED +#define PDM_CONFIG_LOG_ENABLED 0 +#endif +// PDM_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef PDM_CONFIG_LOG_LEVEL +#define PDM_CONFIG_LOG_LEVEL 3 +#endif + +// PDM_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef PDM_CONFIG_INFO_COLOR +#define PDM_CONFIG_INFO_COLOR 0 +#endif + +// PDM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef PDM_CONFIG_DEBUG_COLOR +#define PDM_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// PPI_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef PPI_CONFIG_LOG_ENABLED +#define PPI_CONFIG_LOG_ENABLED 0 +#endif +// PPI_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef PPI_CONFIG_LOG_LEVEL +#define PPI_CONFIG_LOG_LEVEL 3 +#endif + +// PPI_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef PPI_CONFIG_INFO_COLOR +#define PPI_CONFIG_INFO_COLOR 0 +#endif + +// PPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef PPI_CONFIG_DEBUG_COLOR +#define PPI_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// PWM_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef PWM_CONFIG_LOG_ENABLED +#define PWM_CONFIG_LOG_ENABLED 0 +#endif +// PWM_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef PWM_CONFIG_LOG_LEVEL +#define PWM_CONFIG_LOG_LEVEL 3 +#endif + +// PWM_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef PWM_CONFIG_INFO_COLOR +#define PWM_CONFIG_INFO_COLOR 0 +#endif + +// PWM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef PWM_CONFIG_DEBUG_COLOR +#define PWM_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// QDEC_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef QDEC_CONFIG_LOG_ENABLED +#define QDEC_CONFIG_LOG_ENABLED 0 +#endif +// QDEC_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef QDEC_CONFIG_LOG_LEVEL +#define QDEC_CONFIG_LOG_LEVEL 3 +#endif + +// QDEC_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef QDEC_CONFIG_INFO_COLOR +#define QDEC_CONFIG_INFO_COLOR 0 +#endif + +// QDEC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef QDEC_CONFIG_DEBUG_COLOR +#define QDEC_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// RNG_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef RNG_CONFIG_LOG_ENABLED +#define RNG_CONFIG_LOG_ENABLED 0 +#endif +// RNG_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef RNG_CONFIG_LOG_LEVEL +#define RNG_CONFIG_LOG_LEVEL 3 +#endif + +// RNG_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef RNG_CONFIG_INFO_COLOR +#define RNG_CONFIG_INFO_COLOR 0 +#endif + +// RNG_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef RNG_CONFIG_DEBUG_COLOR +#define RNG_CONFIG_DEBUG_COLOR 0 +#endif + +// RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED - Enables logging of random numbers. + + +#ifndef RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED +#define RNG_CONFIG_RANDOM_NUMBER_LOG_ENABLED 0 +#endif + +// + +// RTC_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef RTC_CONFIG_LOG_ENABLED +#define RTC_CONFIG_LOG_ENABLED 0 +#endif +// RTC_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef RTC_CONFIG_LOG_LEVEL +#define RTC_CONFIG_LOG_LEVEL 3 +#endif + +// RTC_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef RTC_CONFIG_INFO_COLOR +#define RTC_CONFIG_INFO_COLOR 0 +#endif + +// RTC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef RTC_CONFIG_DEBUG_COLOR +#define RTC_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// SAADC_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef SAADC_CONFIG_LOG_ENABLED +#define SAADC_CONFIG_LOG_ENABLED 0 +#endif +// SAADC_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef SAADC_CONFIG_LOG_LEVEL +#define SAADC_CONFIG_LOG_LEVEL 3 +#endif + +// SAADC_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef SAADC_CONFIG_INFO_COLOR +#define SAADC_CONFIG_INFO_COLOR 0 +#endif + +// SAADC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef SAADC_CONFIG_DEBUG_COLOR +#define SAADC_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// SPIS_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef SPIS_CONFIG_LOG_ENABLED +#define SPIS_CONFIG_LOG_ENABLED 0 +#endif +// SPIS_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef SPIS_CONFIG_LOG_LEVEL +#define SPIS_CONFIG_LOG_LEVEL 3 +#endif + +// SPIS_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef SPIS_CONFIG_INFO_COLOR +#define SPIS_CONFIG_INFO_COLOR 0 +#endif + +// SPIS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef SPIS_CONFIG_DEBUG_COLOR +#define SPIS_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// SPI_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef SPI_CONFIG_LOG_ENABLED +#define SPI_CONFIG_LOG_ENABLED 0 +#endif +// SPI_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef SPI_CONFIG_LOG_LEVEL +#define SPI_CONFIG_LOG_LEVEL 3 +#endif + +// SPI_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef SPI_CONFIG_INFO_COLOR +#define SPI_CONFIG_INFO_COLOR 0 +#endif + +// SPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef SPI_CONFIG_DEBUG_COLOR +#define SPI_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// TIMER_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef TIMER_CONFIG_LOG_ENABLED +#define TIMER_CONFIG_LOG_ENABLED 0 +#endif +// TIMER_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef TIMER_CONFIG_LOG_LEVEL +#define TIMER_CONFIG_LOG_LEVEL 3 +#endif + +// TIMER_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef TIMER_CONFIG_INFO_COLOR +#define TIMER_CONFIG_INFO_COLOR 0 +#endif + +// TIMER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef TIMER_CONFIG_DEBUG_COLOR +#define TIMER_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// TWIS_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef TWIS_CONFIG_LOG_ENABLED +#define TWIS_CONFIG_LOG_ENABLED 0 +#endif +// TWIS_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef TWIS_CONFIG_LOG_LEVEL +#define TWIS_CONFIG_LOG_LEVEL 3 +#endif + +// TWIS_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef TWIS_CONFIG_INFO_COLOR +#define TWIS_CONFIG_INFO_COLOR 0 +#endif + +// TWIS_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef TWIS_CONFIG_DEBUG_COLOR +#define TWIS_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// TWI_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef TWI_CONFIG_LOG_ENABLED +#define TWI_CONFIG_LOG_ENABLED 0 +#endif +// TWI_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef TWI_CONFIG_LOG_LEVEL +#define TWI_CONFIG_LOG_LEVEL 3 +#endif + +// TWI_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef TWI_CONFIG_INFO_COLOR +#define TWI_CONFIG_INFO_COLOR 0 +#endif + +// TWI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef TWI_CONFIG_DEBUG_COLOR +#define TWI_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// UART_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef UART_CONFIG_LOG_ENABLED +#define UART_CONFIG_LOG_ENABLED 0 +#endif +// UART_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef UART_CONFIG_LOG_LEVEL +#define UART_CONFIG_LOG_LEVEL 3 +#endif + +// UART_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef UART_CONFIG_INFO_COLOR +#define UART_CONFIG_INFO_COLOR 0 +#endif + +// UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef UART_CONFIG_DEBUG_COLOR +#define UART_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// USBD_CONFIG_LOG_ENABLED - Enable logging in the module +//========================================================== +#ifndef USBD_CONFIG_LOG_ENABLED +#define USBD_CONFIG_LOG_ENABLED 0 +#endif +// USBD_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef USBD_CONFIG_LOG_LEVEL +#define USBD_CONFIG_LOG_LEVEL 3 +#endif + +// USBD_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef USBD_CONFIG_INFO_COLOR +#define USBD_CONFIG_INFO_COLOR 0 +#endif + +// USBD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef USBD_CONFIG_DEBUG_COLOR +#define USBD_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// WDT_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef WDT_CONFIG_LOG_ENABLED +#define WDT_CONFIG_LOG_ENABLED 0 +#endif +// WDT_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef WDT_CONFIG_LOG_LEVEL +#define WDT_CONFIG_LOG_LEVEL 3 +#endif + +// WDT_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef WDT_CONFIG_INFO_COLOR +#define WDT_CONFIG_INFO_COLOR 0 +#endif + +// WDT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef WDT_CONFIG_DEBUG_COLOR +#define WDT_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// +//========================================================== + +// nrf_log in nRF_Libraries + +//========================================================== +// APP_BUTTON_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef APP_BUTTON_CONFIG_LOG_ENABLED +#define APP_BUTTON_CONFIG_LOG_ENABLED 0 +#endif +// APP_BUTTON_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef APP_BUTTON_CONFIG_LOG_LEVEL +#define APP_BUTTON_CONFIG_LOG_LEVEL 3 +#endif + +// APP_BUTTON_CONFIG_INITIAL_LOG_LEVEL - Initial severity level if dynamic filtering is enabled. + + +// If module generates a lot of logs, initial log level can +// be decreased to prevent flooding. Severity level can be +// increased on instance basis. +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef APP_BUTTON_CONFIG_INITIAL_LOG_LEVEL +#define APP_BUTTON_CONFIG_INITIAL_LOG_LEVEL 3 +#endif + +// APP_BUTTON_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef APP_BUTTON_CONFIG_INFO_COLOR +#define APP_BUTTON_CONFIG_INFO_COLOR 0 +#endif + +// APP_BUTTON_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef APP_BUTTON_CONFIG_DEBUG_COLOR +#define APP_BUTTON_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// APP_TIMER_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef APP_TIMER_CONFIG_LOG_ENABLED +#define APP_TIMER_CONFIG_LOG_ENABLED 0 +#endif +// APP_TIMER_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef APP_TIMER_CONFIG_LOG_LEVEL +#define APP_TIMER_CONFIG_LOG_LEVEL 3 +#endif + +// APP_TIMER_CONFIG_INITIAL_LOG_LEVEL - Initial severity level if dynamic filtering is enabled. + + +// If module generates a lot of logs, initial log level can +// be decreased to prevent flooding. Severity level can be +// increased on instance basis. +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef APP_TIMER_CONFIG_INITIAL_LOG_LEVEL +#define APP_TIMER_CONFIG_INITIAL_LOG_LEVEL 3 +#endif + +// APP_TIMER_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef APP_TIMER_CONFIG_INFO_COLOR +#define APP_TIMER_CONFIG_INFO_COLOR 0 +#endif + +// APP_TIMER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef APP_TIMER_CONFIG_DEBUG_COLOR +#define APP_TIMER_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED +#define APP_USBD_CDC_ACM_CONFIG_LOG_ENABLED 0 +#endif +// APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL +#define APP_USBD_CDC_ACM_CONFIG_LOG_LEVEL 3 +#endif + +// APP_USBD_CDC_ACM_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef APP_USBD_CDC_ACM_CONFIG_INFO_COLOR +#define APP_USBD_CDC_ACM_CONFIG_INFO_COLOR 0 +#endif + +// APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR +#define APP_USBD_CDC_ACM_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// APP_USBD_CONFIG_LOG_ENABLED - Enable logging in the module. +//========================================================== +#ifndef APP_USBD_CONFIG_LOG_ENABLED +#define APP_USBD_CONFIG_LOG_ENABLED 0 +#endif +// APP_USBD_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef APP_USBD_CONFIG_LOG_LEVEL +#define APP_USBD_CONFIG_LOG_LEVEL 3 +#endif + +// APP_USBD_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef APP_USBD_CONFIG_INFO_COLOR +#define APP_USBD_CONFIG_INFO_COLOR 0 +#endif + +// APP_USBD_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef APP_USBD_CONFIG_DEBUG_COLOR +#define APP_USBD_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// APP_USBD_DUMMY_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef APP_USBD_DUMMY_CONFIG_LOG_ENABLED +#define APP_USBD_DUMMY_CONFIG_LOG_ENABLED 0 +#endif +// APP_USBD_DUMMY_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef APP_USBD_DUMMY_CONFIG_LOG_LEVEL +#define APP_USBD_DUMMY_CONFIG_LOG_LEVEL 3 +#endif + +// APP_USBD_DUMMY_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef APP_USBD_DUMMY_CONFIG_INFO_COLOR +#define APP_USBD_DUMMY_CONFIG_INFO_COLOR 0 +#endif + +// APP_USBD_DUMMY_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef APP_USBD_DUMMY_CONFIG_DEBUG_COLOR +#define APP_USBD_DUMMY_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// APP_USBD_MSC_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef APP_USBD_MSC_CONFIG_LOG_ENABLED +#define APP_USBD_MSC_CONFIG_LOG_ENABLED 0 +#endif +// APP_USBD_MSC_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef APP_USBD_MSC_CONFIG_LOG_LEVEL +#define APP_USBD_MSC_CONFIG_LOG_LEVEL 3 +#endif + +// APP_USBD_MSC_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef APP_USBD_MSC_CONFIG_INFO_COLOR +#define APP_USBD_MSC_CONFIG_INFO_COLOR 0 +#endif + +// APP_USBD_MSC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef APP_USBD_MSC_CONFIG_DEBUG_COLOR +#define APP_USBD_MSC_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_ENABLED +#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_ENABLED 0 +#endif +// APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_LEVEL +#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_LOG_LEVEL 3 +#endif + +// APP_USBD_NRF_DFU_TRIGGER_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_INFO_COLOR +#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_INFO_COLOR 0 +#endif + +// APP_USBD_NRF_DFU_TRIGGER_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef APP_USBD_NRF_DFU_TRIGGER_CONFIG_DEBUG_COLOR +#define APP_USBD_NRF_DFU_TRIGGER_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// NRF_ATFIFO_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRF_ATFIFO_CONFIG_LOG_ENABLED +#define NRF_ATFIFO_CONFIG_LOG_ENABLED 0 +#endif +// NRF_ATFIFO_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRF_ATFIFO_CONFIG_LOG_LEVEL +#define NRF_ATFIFO_CONFIG_LOG_LEVEL 3 +#endif + +// NRF_ATFIFO_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRF_ATFIFO_CONFIG_LOG_INIT_FILTER_LEVEL +#define NRF_ATFIFO_CONFIG_LOG_INIT_FILTER_LEVEL 3 +#endif + +// NRF_ATFIFO_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_ATFIFO_CONFIG_INFO_COLOR +#define NRF_ATFIFO_CONFIG_INFO_COLOR 0 +#endif + +// NRF_ATFIFO_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_ATFIFO_CONFIG_DEBUG_COLOR +#define NRF_ATFIFO_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// NRF_BALLOC_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRF_BALLOC_CONFIG_LOG_ENABLED +#define NRF_BALLOC_CONFIG_LOG_ENABLED 0 +#endif +// NRF_BALLOC_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRF_BALLOC_CONFIG_LOG_LEVEL +#define NRF_BALLOC_CONFIG_LOG_LEVEL 3 +#endif + +// NRF_BALLOC_CONFIG_INITIAL_LOG_LEVEL - Initial severity level if dynamic filtering is enabled. + + +// If module generates a lot of logs, initial log level can +// be decreased to prevent flooding. Severity level can be +// increased on instance basis. +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRF_BALLOC_CONFIG_INITIAL_LOG_LEVEL +#define NRF_BALLOC_CONFIG_INITIAL_LOG_LEVEL 3 +#endif + +// NRF_BALLOC_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_BALLOC_CONFIG_INFO_COLOR +#define NRF_BALLOC_CONFIG_INFO_COLOR 0 +#endif + +// NRF_BALLOC_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_BALLOC_CONFIG_DEBUG_COLOR +#define NRF_BALLOC_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_ENABLED +#define NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_ENABLED 0 +#endif +// NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_LEVEL +#define NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_LEVEL 3 +#endif + +// NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_INIT_FILTER_LEVEL +#define NRF_BLOCK_DEV_EMPTY_CONFIG_LOG_INIT_FILTER_LEVEL 3 +#endif + +// NRF_BLOCK_DEV_EMPTY_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_INFO_COLOR +#define NRF_BLOCK_DEV_EMPTY_CONFIG_INFO_COLOR 0 +#endif + +// NRF_BLOCK_DEV_EMPTY_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_BLOCK_DEV_EMPTY_CONFIG_DEBUG_COLOR +#define NRF_BLOCK_DEV_EMPTY_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// NRF_BLOCK_DEV_QSPI_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_LOG_ENABLED +#define NRF_BLOCK_DEV_QSPI_CONFIG_LOG_ENABLED 0 +#endif +// NRF_BLOCK_DEV_QSPI_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_LOG_LEVEL +#define NRF_BLOCK_DEV_QSPI_CONFIG_LOG_LEVEL 3 +#endif + +// NRF_BLOCK_DEV_QSPI_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_LOG_INIT_FILTER_LEVEL +#define NRF_BLOCK_DEV_QSPI_CONFIG_LOG_INIT_FILTER_LEVEL 3 +#endif + +// NRF_BLOCK_DEV_QSPI_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_INFO_COLOR +#define NRF_BLOCK_DEV_QSPI_CONFIG_INFO_COLOR 0 +#endif + +// NRF_BLOCK_DEV_QSPI_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_BLOCK_DEV_QSPI_CONFIG_DEBUG_COLOR +#define NRF_BLOCK_DEV_QSPI_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// NRF_BLOCK_DEV_RAM_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRF_BLOCK_DEV_RAM_CONFIG_LOG_ENABLED +#define NRF_BLOCK_DEV_RAM_CONFIG_LOG_ENABLED 0 +#endif +// NRF_BLOCK_DEV_RAM_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRF_BLOCK_DEV_RAM_CONFIG_LOG_LEVEL +#define NRF_BLOCK_DEV_RAM_CONFIG_LOG_LEVEL 3 +#endif + +// NRF_BLOCK_DEV_RAM_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRF_BLOCK_DEV_RAM_CONFIG_LOG_INIT_FILTER_LEVEL +#define NRF_BLOCK_DEV_RAM_CONFIG_LOG_INIT_FILTER_LEVEL 3 +#endif + +// NRF_BLOCK_DEV_RAM_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_BLOCK_DEV_RAM_CONFIG_INFO_COLOR +#define NRF_BLOCK_DEV_RAM_CONFIG_INFO_COLOR 0 +#endif + +// NRF_BLOCK_DEV_RAM_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_BLOCK_DEV_RAM_CONFIG_DEBUG_COLOR +#define NRF_BLOCK_DEV_RAM_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED +#define NRF_CLI_BLE_UART_CONFIG_LOG_ENABLED 0 +#endif +// NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL +#define NRF_CLI_BLE_UART_CONFIG_LOG_LEVEL 3 +#endif + +// NRF_CLI_BLE_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_CLI_BLE_UART_CONFIG_INFO_COLOR +#define NRF_CLI_BLE_UART_CONFIG_INFO_COLOR 0 +#endif + +// NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR +#define NRF_CLI_BLE_UART_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// NRF_CLI_LIBUARTE_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRF_CLI_LIBUARTE_CONFIG_LOG_ENABLED +#define NRF_CLI_LIBUARTE_CONFIG_LOG_ENABLED 0 +#endif +// NRF_CLI_LIBUARTE_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRF_CLI_LIBUARTE_CONFIG_LOG_LEVEL +#define NRF_CLI_LIBUARTE_CONFIG_LOG_LEVEL 3 +#endif + +// NRF_CLI_LIBUARTE_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_CLI_LIBUARTE_CONFIG_INFO_COLOR +#define NRF_CLI_LIBUARTE_CONFIG_INFO_COLOR 0 +#endif + +// NRF_CLI_LIBUARTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_CLI_LIBUARTE_CONFIG_DEBUG_COLOR +#define NRF_CLI_LIBUARTE_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// NRF_CLI_UART_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRF_CLI_UART_CONFIG_LOG_ENABLED +#define NRF_CLI_UART_CONFIG_LOG_ENABLED 0 +#endif +// NRF_CLI_UART_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRF_CLI_UART_CONFIG_LOG_LEVEL +#define NRF_CLI_UART_CONFIG_LOG_LEVEL 3 +#endif + +// NRF_CLI_UART_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_CLI_UART_CONFIG_INFO_COLOR +#define NRF_CLI_UART_CONFIG_INFO_COLOR 0 +#endif + +// NRF_CLI_UART_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_CLI_UART_CONFIG_DEBUG_COLOR +#define NRF_CLI_UART_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// NRF_LIBUARTE_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRF_LIBUARTE_CONFIG_LOG_ENABLED +#define NRF_LIBUARTE_CONFIG_LOG_ENABLED 0 +#endif +// NRF_LIBUARTE_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRF_LIBUARTE_CONFIG_LOG_LEVEL +#define NRF_LIBUARTE_CONFIG_LOG_LEVEL 3 +#endif + +// NRF_LIBUARTE_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_LIBUARTE_CONFIG_INFO_COLOR +#define NRF_LIBUARTE_CONFIG_INFO_COLOR 0 +#endif + +// NRF_LIBUARTE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_LIBUARTE_CONFIG_DEBUG_COLOR +#define NRF_LIBUARTE_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// NRF_MEMOBJ_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRF_MEMOBJ_CONFIG_LOG_ENABLED +#define NRF_MEMOBJ_CONFIG_LOG_ENABLED 0 +#endif +// NRF_MEMOBJ_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRF_MEMOBJ_CONFIG_LOG_LEVEL +#define NRF_MEMOBJ_CONFIG_LOG_LEVEL 3 +#endif + +// NRF_MEMOBJ_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_MEMOBJ_CONFIG_INFO_COLOR +#define NRF_MEMOBJ_CONFIG_INFO_COLOR 0 +#endif + +// NRF_MEMOBJ_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_MEMOBJ_CONFIG_DEBUG_COLOR +#define NRF_MEMOBJ_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// NRF_PWR_MGMT_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRF_PWR_MGMT_CONFIG_LOG_ENABLED +#define NRF_PWR_MGMT_CONFIG_LOG_ENABLED 0 +#endif +// NRF_PWR_MGMT_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRF_PWR_MGMT_CONFIG_LOG_LEVEL +#define NRF_PWR_MGMT_CONFIG_LOG_LEVEL 3 +#endif + +// NRF_PWR_MGMT_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_PWR_MGMT_CONFIG_INFO_COLOR +#define NRF_PWR_MGMT_CONFIG_INFO_COLOR 0 +#endif + +// NRF_PWR_MGMT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_PWR_MGMT_CONFIG_DEBUG_COLOR +#define NRF_PWR_MGMT_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// NRF_QUEUE_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRF_QUEUE_CONFIG_LOG_ENABLED +#define NRF_QUEUE_CONFIG_LOG_ENABLED 0 +#endif +// NRF_QUEUE_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRF_QUEUE_CONFIG_LOG_LEVEL +#define NRF_QUEUE_CONFIG_LOG_LEVEL 3 +#endif + +// NRF_QUEUE_CONFIG_LOG_INIT_FILTER_LEVEL - Initial severity level if dynamic filtering is enabled + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRF_QUEUE_CONFIG_LOG_INIT_FILTER_LEVEL +#define NRF_QUEUE_CONFIG_LOG_INIT_FILTER_LEVEL 3 +#endif + +// NRF_QUEUE_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_QUEUE_CONFIG_INFO_COLOR +#define NRF_QUEUE_CONFIG_INFO_COLOR 0 +#endif + +// NRF_QUEUE_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_QUEUE_CONFIG_DEBUG_COLOR +#define NRF_QUEUE_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// NRF_SDH_ANT_LOG_ENABLED - Enable logging in SoftDevice handler (ANT) module. +//========================================================== +#ifndef NRF_SDH_ANT_LOG_ENABLED +#define NRF_SDH_ANT_LOG_ENABLED 0 +#endif +// NRF_SDH_ANT_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRF_SDH_ANT_LOG_LEVEL +#define NRF_SDH_ANT_LOG_LEVEL 3 +#endif + +// NRF_SDH_ANT_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_SDH_ANT_INFO_COLOR +#define NRF_SDH_ANT_INFO_COLOR 0 +#endif + +// NRF_SDH_ANT_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_SDH_ANT_DEBUG_COLOR +#define NRF_SDH_ANT_DEBUG_COLOR 0 +#endif + +// + +// NRF_SDH_BLE_LOG_ENABLED - Enable logging in SoftDevice handler (BLE) module. +//========================================================== +#ifndef NRF_SDH_BLE_LOG_ENABLED +#define NRF_SDH_BLE_LOG_ENABLED 1 +#endif +// NRF_SDH_BLE_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRF_SDH_BLE_LOG_LEVEL +#define NRF_SDH_BLE_LOG_LEVEL 3 +#endif + +// NRF_SDH_BLE_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_SDH_BLE_INFO_COLOR +#define NRF_SDH_BLE_INFO_COLOR 0 +#endif + +// NRF_SDH_BLE_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_SDH_BLE_DEBUG_COLOR +#define NRF_SDH_BLE_DEBUG_COLOR 0 +#endif + +// + +// NRF_SDH_LOG_ENABLED - Enable logging in SoftDevice handler module. +//========================================================== +#ifndef NRF_SDH_LOG_ENABLED +#define NRF_SDH_LOG_ENABLED 1 +#endif +// NRF_SDH_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRF_SDH_LOG_LEVEL +#define NRF_SDH_LOG_LEVEL 3 +#endif + +// NRF_SDH_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_SDH_INFO_COLOR +#define NRF_SDH_INFO_COLOR 0 +#endif + +// NRF_SDH_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_SDH_DEBUG_COLOR +#define NRF_SDH_DEBUG_COLOR 0 +#endif + +// + +// NRF_SDH_SOC_LOG_ENABLED - Enable logging in SoftDevice handler (SoC) module. +//========================================================== +#ifndef NRF_SDH_SOC_LOG_ENABLED +#define NRF_SDH_SOC_LOG_ENABLED 1 +#endif +// NRF_SDH_SOC_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRF_SDH_SOC_LOG_LEVEL +#define NRF_SDH_SOC_LOG_LEVEL 3 +#endif + +// NRF_SDH_SOC_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_SDH_SOC_INFO_COLOR +#define NRF_SDH_SOC_INFO_COLOR 0 +#endif + +// NRF_SDH_SOC_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_SDH_SOC_DEBUG_COLOR +#define NRF_SDH_SOC_DEBUG_COLOR 0 +#endif + +// + +// NRF_SORTLIST_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRF_SORTLIST_CONFIG_LOG_ENABLED +#define NRF_SORTLIST_CONFIG_LOG_ENABLED 0 +#endif +// NRF_SORTLIST_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRF_SORTLIST_CONFIG_LOG_LEVEL +#define NRF_SORTLIST_CONFIG_LOG_LEVEL 3 +#endif + +// NRF_SORTLIST_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_SORTLIST_CONFIG_INFO_COLOR +#define NRF_SORTLIST_CONFIG_INFO_COLOR 0 +#endif + +// NRF_SORTLIST_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_SORTLIST_CONFIG_DEBUG_COLOR +#define NRF_SORTLIST_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// NRF_TWI_SENSOR_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NRF_TWI_SENSOR_CONFIG_LOG_ENABLED +#define NRF_TWI_SENSOR_CONFIG_LOG_ENABLED 0 +#endif +// NRF_TWI_SENSOR_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NRF_TWI_SENSOR_CONFIG_LOG_LEVEL +#define NRF_TWI_SENSOR_CONFIG_LOG_LEVEL 3 +#endif + +// NRF_TWI_SENSOR_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_TWI_SENSOR_CONFIG_INFO_COLOR +#define NRF_TWI_SENSOR_CONFIG_INFO_COLOR 0 +#endif + +// NRF_TWI_SENSOR_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NRF_TWI_SENSOR_CONFIG_DEBUG_COLOR +#define NRF_TWI_SENSOR_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// PM_LOG_ENABLED - Enable logging in Peer Manager and its submodules. +//========================================================== +#ifndef PM_LOG_ENABLED +#define PM_LOG_ENABLED 1 +#endif +// PM_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef PM_LOG_LEVEL +#define PM_LOG_LEVEL 3 +#endif + +// PM_LOG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef PM_LOG_INFO_COLOR +#define PM_LOG_INFO_COLOR 0 +#endif + +// PM_LOG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef PM_LOG_DEBUG_COLOR +#define PM_LOG_DEBUG_COLOR 0 +#endif + +// + +// +//========================================================== + +// nrf_log in nRF_Serialization + +//========================================================== +// SER_HAL_TRANSPORT_CONFIG_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef SER_HAL_TRANSPORT_CONFIG_LOG_ENABLED +#define SER_HAL_TRANSPORT_CONFIG_LOG_ENABLED 0 +#endif +// SER_HAL_TRANSPORT_CONFIG_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef SER_HAL_TRANSPORT_CONFIG_LOG_LEVEL +#define SER_HAL_TRANSPORT_CONFIG_LOG_LEVEL 3 +#endif + +// SER_HAL_TRANSPORT_CONFIG_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef SER_HAL_TRANSPORT_CONFIG_INFO_COLOR +#define SER_HAL_TRANSPORT_CONFIG_INFO_COLOR 0 +#endif + +// SER_HAL_TRANSPORT_CONFIG_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef SER_HAL_TRANSPORT_CONFIG_DEBUG_COLOR +#define SER_HAL_TRANSPORT_CONFIG_DEBUG_COLOR 0 +#endif + +// + +// +//========================================================== + +// +//========================================================== + +// + +// NRF_LOG_STR_FORMATTER_TIMESTAMP_FORMAT_ENABLED - nrf_log_str_formatter - Log string formatter + + +#ifndef NRF_LOG_STR_FORMATTER_TIMESTAMP_FORMAT_ENABLED +#define NRF_LOG_STR_FORMATTER_TIMESTAMP_FORMAT_ENABLED 1 +#endif + +// +//========================================================== + +// nRF_NFC + +//========================================================== +// NFC_AC_REC_ENABLED - nfc_ac_rec - NFC NDEF Alternative Carrier record encoder + + +#ifndef NFC_AC_REC_ENABLED +#define NFC_AC_REC_ENABLED 0 +#endif + +// NFC_AC_REC_PARSER_ENABLED - nfc_ac_rec_parser - Alternative Carrier record parser + + +#ifndef NFC_AC_REC_PARSER_ENABLED +#define NFC_AC_REC_PARSER_ENABLED 0 +#endif + +// NFC_BLE_OOB_ADVDATA_ENABLED - nfc_ble_oob_advdata - AD data for OOB pairing encoder +//========================================================== +#ifndef NFC_BLE_OOB_ADVDATA_ENABLED +#define NFC_BLE_OOB_ADVDATA_ENABLED 0 +#endif +// ADVANCED_ADVDATA_SUPPORT - Non-mandatory AD types for BLE OOB pairing are encoded inside the NDEF message (e.g. service UUIDs) + +// <1=> Enabled +// <0=> Disabled + +#ifndef ADVANCED_ADVDATA_SUPPORT +#define ADVANCED_ADVDATA_SUPPORT 0 +#endif + +// + +// NFC_BLE_OOB_ADVDATA_PARSER_ENABLED - nfc_ble_oob_advdata_parser - BLE OOB pairing AD data parser + + +#ifndef NFC_BLE_OOB_ADVDATA_PARSER_ENABLED +#define NFC_BLE_OOB_ADVDATA_PARSER_ENABLED 0 +#endif + +// NFC_BLE_PAIR_LIB_ENABLED - nfc_ble_pair_lib - Library parameters +//========================================================== +#ifndef NFC_BLE_PAIR_LIB_ENABLED +#define NFC_BLE_PAIR_LIB_ENABLED 0 +#endif +// NFC_BLE_PAIR_LIB_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NFC_BLE_PAIR_LIB_LOG_ENABLED +#define NFC_BLE_PAIR_LIB_LOG_ENABLED 0 +#endif +// NFC_BLE_PAIR_LIB_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NFC_BLE_PAIR_LIB_LOG_LEVEL +#define NFC_BLE_PAIR_LIB_LOG_LEVEL 3 +#endif + +// NFC_BLE_PAIR_LIB_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NFC_BLE_PAIR_LIB_INFO_COLOR +#define NFC_BLE_PAIR_LIB_INFO_COLOR 0 +#endif + +// NFC_BLE_PAIR_LIB_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NFC_BLE_PAIR_LIB_DEBUG_COLOR +#define NFC_BLE_PAIR_LIB_DEBUG_COLOR 0 +#endif + +// + +// NFC_BLE_PAIR_LIB_SECURITY_PARAMETERS - Common Peer Manager security parameters. + +//========================================================== +// BLE_NFC_SEC_PARAM_BOND - Enables device bonding. + +// If bonding is enabled at least one of the BLE_NFC_SEC_PARAM_KDIST options must be enabled. +//========================================================== +#ifndef BLE_NFC_SEC_PARAM_BOND +#define BLE_NFC_SEC_PARAM_BOND 1 +#endif +// BLE_NFC_SEC_PARAM_KDIST_OWN_ENC - Enables Long Term Key and Master Identification distribution by device. + + +#ifndef BLE_NFC_SEC_PARAM_KDIST_OWN_ENC +#define BLE_NFC_SEC_PARAM_KDIST_OWN_ENC 1 +#endif + +// BLE_NFC_SEC_PARAM_KDIST_OWN_ID - Enables Identity Resolving Key and Identity Address Information distribution by device. + + +#ifndef BLE_NFC_SEC_PARAM_KDIST_OWN_ID +#define BLE_NFC_SEC_PARAM_KDIST_OWN_ID 1 +#endif + +// BLE_NFC_SEC_PARAM_KDIST_PEER_ENC - Enables Long Term Key and Master Identification distribution by peer. + + +#ifndef BLE_NFC_SEC_PARAM_KDIST_PEER_ENC +#define BLE_NFC_SEC_PARAM_KDIST_PEER_ENC 1 +#endif + +// BLE_NFC_SEC_PARAM_KDIST_PEER_ID - Enables Identity Resolving Key and Identity Address Information distribution by peer. + + +#ifndef BLE_NFC_SEC_PARAM_KDIST_PEER_ID +#define BLE_NFC_SEC_PARAM_KDIST_PEER_ID 1 +#endif + +// + +// BLE_NFC_SEC_PARAM_MIN_KEY_SIZE - Minimal size of a security key. + +// <7=> 7 +// <8=> 8 +// <9=> 9 +// <10=> 10 +// <11=> 11 +// <12=> 12 +// <13=> 13 +// <14=> 14 +// <15=> 15 +// <16=> 16 + +#ifndef BLE_NFC_SEC_PARAM_MIN_KEY_SIZE +#define BLE_NFC_SEC_PARAM_MIN_KEY_SIZE 7 +#endif + +// BLE_NFC_SEC_PARAM_MAX_KEY_SIZE - Maximal size of a security key. + +// <7=> 7 +// <8=> 8 +// <9=> 9 +// <10=> 10 +// <11=> 11 +// <12=> 12 +// <13=> 13 +// <14=> 14 +// <15=> 15 +// <16=> 16 + +#ifndef BLE_NFC_SEC_PARAM_MAX_KEY_SIZE +#define BLE_NFC_SEC_PARAM_MAX_KEY_SIZE 16 +#endif + +// +//========================================================== + +// + +// NFC_BLE_PAIR_MSG_ENABLED - nfc_ble_pair_msg - NDEF message for OOB pairing encoder + + +#ifndef NFC_BLE_PAIR_MSG_ENABLED +#define NFC_BLE_PAIR_MSG_ENABLED 0 +#endif + +// NFC_CH_COMMON_ENABLED - nfc_ble_pair_common - OOB pairing common data + + +#ifndef NFC_CH_COMMON_ENABLED +#define NFC_CH_COMMON_ENABLED 0 +#endif + +// NFC_EP_OOB_REC_ENABLED - nfc_ep_oob_rec - EP record for BLE pairing encoder + + +#ifndef NFC_EP_OOB_REC_ENABLED +#define NFC_EP_OOB_REC_ENABLED 0 +#endif + +// NFC_HS_REC_ENABLED - nfc_hs_rec - Handover Select NDEF record encoder + + +#ifndef NFC_HS_REC_ENABLED +#define NFC_HS_REC_ENABLED 0 +#endif + +// NFC_LE_OOB_REC_ENABLED - nfc_le_oob_rec - LE record for BLE pairing encoder + + +#ifndef NFC_LE_OOB_REC_ENABLED +#define NFC_LE_OOB_REC_ENABLED 0 +#endif + +// NFC_LE_OOB_REC_PARSER_ENABLED - nfc_le_oob_rec_parser - LE record parser + + +#ifndef NFC_LE_OOB_REC_PARSER_ENABLED +#define NFC_LE_OOB_REC_PARSER_ENABLED 0 +#endif + +// NFC_NDEF_LAUNCHAPP_MSG_ENABLED - nfc_launchapp_msg - Encoding data for NDEF Application Launching message for NFC Tag + + +#ifndef NFC_NDEF_LAUNCHAPP_MSG_ENABLED +#define NFC_NDEF_LAUNCHAPP_MSG_ENABLED 0 +#endif + +// NFC_NDEF_LAUNCHAPP_REC_ENABLED - nfc_launchapp_rec - Encoding data for NDEF Application Launching record for NFC Tag + + +#ifndef NFC_NDEF_LAUNCHAPP_REC_ENABLED +#define NFC_NDEF_LAUNCHAPP_REC_ENABLED 0 +#endif + +// NFC_NDEF_MSG_ENABLED - nfc_ndef_msg - NFC NDEF Message generator module +//========================================================== +#ifndef NFC_NDEF_MSG_ENABLED +#define NFC_NDEF_MSG_ENABLED 0 +#endif +// NFC_NDEF_MSG_TAG_TYPE - NFC Tag Type + +// <2=> Type 2 Tag +// <4=> Type 4 Tag + +#ifndef NFC_NDEF_MSG_TAG_TYPE +#define NFC_NDEF_MSG_TAG_TYPE 2 +#endif + +// + +// NFC_NDEF_MSG_PARSER_ENABLED - nfc_ndef_msg_parser - NFC NDEF message parser module +//========================================================== +#ifndef NFC_NDEF_MSG_PARSER_ENABLED +#define NFC_NDEF_MSG_PARSER_ENABLED 0 +#endif +// NFC_NDEF_MSG_PARSER_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NFC_NDEF_MSG_PARSER_LOG_ENABLED +#define NFC_NDEF_MSG_PARSER_LOG_ENABLED 0 +#endif +// NFC_NDEF_MSG_PARSER_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NFC_NDEF_MSG_PARSER_LOG_LEVEL +#define NFC_NDEF_MSG_PARSER_LOG_LEVEL 3 +#endif + +// NFC_NDEF_MSG_PARSER_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NFC_NDEF_MSG_PARSER_INFO_COLOR +#define NFC_NDEF_MSG_PARSER_INFO_COLOR 0 +#endif + +// + +// + +// NFC_NDEF_RECORD_ENABLED - nfc_ndef_record - NFC NDEF Record generator module + + +#ifndef NFC_NDEF_RECORD_ENABLED +#define NFC_NDEF_RECORD_ENABLED 0 +#endif + +// NFC_NDEF_RECORD_PARSER_ENABLED - nfc_ndef_record_parser - NFC NDEF Record parser module +//========================================================== +#ifndef NFC_NDEF_RECORD_PARSER_ENABLED +#define NFC_NDEF_RECORD_PARSER_ENABLED 0 +#endif +// NFC_NDEF_RECORD_PARSER_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NFC_NDEF_RECORD_PARSER_LOG_ENABLED +#define NFC_NDEF_RECORD_PARSER_LOG_ENABLED 0 +#endif +// NFC_NDEF_RECORD_PARSER_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NFC_NDEF_RECORD_PARSER_LOG_LEVEL +#define NFC_NDEF_RECORD_PARSER_LOG_LEVEL 3 +#endif + +// NFC_NDEF_RECORD_PARSER_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NFC_NDEF_RECORD_PARSER_INFO_COLOR +#define NFC_NDEF_RECORD_PARSER_INFO_COLOR 0 +#endif + +// + +// + +// NFC_NDEF_TEXT_RECORD_ENABLED - nfc_text_rec - Encoding data for a text record for NFC Tag + + +#ifndef NFC_NDEF_TEXT_RECORD_ENABLED +#define NFC_NDEF_TEXT_RECORD_ENABLED 0 +#endif + +// NFC_NDEF_URI_MSG_ENABLED - nfc_uri_msg - Encoding data for NDEF message with URI record for NFC Tag + + +#ifndef NFC_NDEF_URI_MSG_ENABLED +#define NFC_NDEF_URI_MSG_ENABLED 0 +#endif + +// NFC_NDEF_URI_REC_ENABLED - nfc_uri_rec - Encoding data for a URI record for NFC Tag + + +#ifndef NFC_NDEF_URI_REC_ENABLED +#define NFC_NDEF_URI_REC_ENABLED 0 +#endif + +// NFC_PLATFORM_ENABLED - nfc_platform - NFC platform module for Clock control. +//========================================================== +#ifndef NFC_PLATFORM_ENABLED +#define NFC_PLATFORM_ENABLED 0 +#endif +// NFC_PLATFORM_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NFC_PLATFORM_LOG_ENABLED +#define NFC_PLATFORM_LOG_ENABLED 0 +#endif +// NFC_PLATFORM_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NFC_PLATFORM_LOG_LEVEL +#define NFC_PLATFORM_LOG_LEVEL 3 +#endif + +// NFC_PLATFORM_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NFC_PLATFORM_INFO_COLOR +#define NFC_PLATFORM_INFO_COLOR 0 +#endif + +// NFC_PLATFORM_DEBUG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NFC_PLATFORM_DEBUG_COLOR +#define NFC_PLATFORM_DEBUG_COLOR 0 +#endif + +// + +// + +// NFC_T2T_PARSER_ENABLED - nfc_type_2_tag_parser - Parser for decoding Type 2 Tag data +//========================================================== +#ifndef NFC_T2T_PARSER_ENABLED +#define NFC_T2T_PARSER_ENABLED 0 +#endif +// NFC_T2T_PARSER_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NFC_T2T_PARSER_LOG_ENABLED +#define NFC_T2T_PARSER_LOG_ENABLED 0 +#endif +// NFC_T2T_PARSER_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NFC_T2T_PARSER_LOG_LEVEL +#define NFC_T2T_PARSER_LOG_LEVEL 3 +#endif + +// NFC_T2T_PARSER_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NFC_T2T_PARSER_INFO_COLOR +#define NFC_T2T_PARSER_INFO_COLOR 0 +#endif + +// + +// + +// NFC_T4T_APDU_ENABLED - nfc_t4t_apdu - APDU encoder/decoder for Type 4 Tag +//========================================================== +#ifndef NFC_T4T_APDU_ENABLED +#define NFC_T4T_APDU_ENABLED 0 +#endif +// NFC_T4T_APDU_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NFC_T4T_APDU_LOG_ENABLED +#define NFC_T4T_APDU_LOG_ENABLED 0 +#endif +// NFC_T4T_APDU_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NFC_T4T_APDU_LOG_LEVEL +#define NFC_T4T_APDU_LOG_LEVEL 3 +#endif + +// NFC_T4T_APDU_LOG_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NFC_T4T_APDU_LOG_COLOR +#define NFC_T4T_APDU_LOG_COLOR 0 +#endif + +// + +// + +// NFC_T4T_CC_FILE_PARSER_ENABLED - nfc_t4t_cc_file - Capability Container file for Type 4 Tag +//========================================================== +#ifndef NFC_T4T_CC_FILE_PARSER_ENABLED +#define NFC_T4T_CC_FILE_PARSER_ENABLED 0 +#endif +// NFC_T4T_CC_FILE_PARSER_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NFC_T4T_CC_FILE_PARSER_LOG_ENABLED +#define NFC_T4T_CC_FILE_PARSER_LOG_ENABLED 0 +#endif +// NFC_T4T_CC_FILE_PARSER_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NFC_T4T_CC_FILE_PARSER_LOG_LEVEL +#define NFC_T4T_CC_FILE_PARSER_LOG_LEVEL 3 +#endif + +// NFC_T4T_CC_FILE_PARSER_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NFC_T4T_CC_FILE_PARSER_INFO_COLOR +#define NFC_T4T_CC_FILE_PARSER_INFO_COLOR 0 +#endif + +// + +// + +// NFC_T4T_HL_DETECTION_PROCEDURES_ENABLED - nfc_t4t_hl_detection_procedures - NDEF Detection Procedure for Type 4 Tag +//========================================================== +#ifndef NFC_T4T_HL_DETECTION_PROCEDURES_ENABLED +#define NFC_T4T_HL_DETECTION_PROCEDURES_ENABLED 0 +#endif +// NFC_T4T_HL_DETECTION_PROCEDURES_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NFC_T4T_HL_DETECTION_PROCEDURES_LOG_ENABLED +#define NFC_T4T_HL_DETECTION_PROCEDURES_LOG_ENABLED 0 +#endif +// NFC_T4T_HL_DETECTION_PROCEDURES_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NFC_T4T_HL_DETECTION_PROCEDURES_LOG_LEVEL +#define NFC_T4T_HL_DETECTION_PROCEDURES_LOG_LEVEL 3 +#endif + +// NFC_T4T_HL_DETECTION_PROCEDURES_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NFC_T4T_HL_DETECTION_PROCEDURES_INFO_COLOR +#define NFC_T4T_HL_DETECTION_PROCEDURES_INFO_COLOR 0 +#endif + +// + +// APDU_BUFF_SIZE - Size (in bytes) of the buffer for APDU storage +#ifndef APDU_BUFF_SIZE +#define APDU_BUFF_SIZE 250 +#endif + +// CC_STORAGE_BUFF_SIZE - Size (in bytes) of the buffer for CC file storage +#ifndef CC_STORAGE_BUFF_SIZE +#define CC_STORAGE_BUFF_SIZE 64 +#endif + +// + +// NFC_T4T_TLV_BLOCK_PARSER_ENABLED - nfc_t4t_tlv_block - TLV block for Type 4 Tag +//========================================================== +#ifndef NFC_T4T_TLV_BLOCK_PARSER_ENABLED +#define NFC_T4T_TLV_BLOCK_PARSER_ENABLED 0 +#endif +// NFC_T4T_TLV_BLOCK_PARSER_LOG_ENABLED - Enables logging in the module. +//========================================================== +#ifndef NFC_T4T_TLV_BLOCK_PARSER_LOG_ENABLED +#define NFC_T4T_TLV_BLOCK_PARSER_LOG_ENABLED 0 +#endif +// NFC_T4T_TLV_BLOCK_PARSER_LOG_LEVEL - Default Severity level + +// <0=> Off +// <1=> Error +// <2=> Warning +// <3=> Info +// <4=> Debug + +#ifndef NFC_T4T_TLV_BLOCK_PARSER_LOG_LEVEL +#define NFC_T4T_TLV_BLOCK_PARSER_LOG_LEVEL 3 +#endif + +// NFC_T4T_TLV_BLOCK_PARSER_INFO_COLOR - ANSI escape code prefix. + +// <0=> Default +// <1=> Black +// <2=> Red +// <3=> Green +// <4=> Yellow +// <5=> Blue +// <6=> Magenta +// <7=> Cyan +// <8=> White + +#ifndef NFC_T4T_TLV_BLOCK_PARSER_INFO_COLOR +#define NFC_T4T_TLV_BLOCK_PARSER_INFO_COLOR 0 +#endif + +// + +// + +// +//========================================================== + +// nRF_SoftDevice + +//========================================================== +// NRF_SDH_BLE_ENABLED - nrf_sdh_ble - SoftDevice BLE event handler +//========================================================== +#ifndef NRF_SDH_BLE_ENABLED +#define NRF_SDH_BLE_ENABLED 0 +#endif +// BLE Stack configuration - Stack configuration parameters + +// The SoftDevice handler will configure the stack with these parameters when calling @ref nrf_sdh_ble_default_cfg_set. +// Other libraries might depend on these values; keep them up-to-date even if you are not explicitely calling @ref nrf_sdh_ble_default_cfg_set. +//========================================================== +// NRF_SDH_BLE_GAP_DATA_LENGTH <27-251> + + +// Requested BLE GAP data length to be negotiated. + +#ifndef NRF_SDH_BLE_GAP_DATA_LENGTH +#define NRF_SDH_BLE_GAP_DATA_LENGTH 27 +#endif + +// NRF_SDH_BLE_PERIPHERAL_LINK_COUNT - Maximum number of peripheral links. +#ifndef NRF_SDH_BLE_PERIPHERAL_LINK_COUNT +#define NRF_SDH_BLE_PERIPHERAL_LINK_COUNT 0 +#endif + +// NRF_SDH_BLE_CENTRAL_LINK_COUNT - Maximum number of central links. +#ifndef NRF_SDH_BLE_CENTRAL_LINK_COUNT +#define NRF_SDH_BLE_CENTRAL_LINK_COUNT 0 +#endif + +// NRF_SDH_BLE_TOTAL_LINK_COUNT - Total link count. +// Maximum number of total concurrent connections using the default configuration. + +#ifndef NRF_SDH_BLE_TOTAL_LINK_COUNT +#define NRF_SDH_BLE_TOTAL_LINK_COUNT 1 +#endif + +// NRF_SDH_BLE_GAP_EVENT_LENGTH - GAP event length. +// The time set aside for this connection on every connection interval in 1.25 ms units. + +#ifndef NRF_SDH_BLE_GAP_EVENT_LENGTH +#define NRF_SDH_BLE_GAP_EVENT_LENGTH 6 +#endif + +// NRF_SDH_BLE_GATT_MAX_MTU_SIZE - Static maximum MTU size. +#ifndef NRF_SDH_BLE_GATT_MAX_MTU_SIZE +#define NRF_SDH_BLE_GATT_MAX_MTU_SIZE 23 +#endif + +// NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE - Attribute Table size in bytes. The size must be a multiple of 4. +#ifndef NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE +#define NRF_SDH_BLE_GATTS_ATTR_TAB_SIZE 1408 +#endif + +// NRF_SDH_BLE_VS_UUID_COUNT - The number of vendor-specific UUIDs. +#ifndef NRF_SDH_BLE_VS_UUID_COUNT +#define NRF_SDH_BLE_VS_UUID_COUNT 0 +#endif + +// NRF_SDH_BLE_SERVICE_CHANGED - Include the Service Changed characteristic in the Attribute Table. + + +#ifndef NRF_SDH_BLE_SERVICE_CHANGED +#define NRF_SDH_BLE_SERVICE_CHANGED 0 +#endif + +// +//========================================================== + +// BLE Observers - Observers and priority levels + +//========================================================== +// NRF_SDH_BLE_OBSERVER_PRIO_LEVELS - Total number of priority levels for BLE observers. +// This setting configures the number of priority levels available for BLE event handlers. +// The priority level of a handler determines the order in which it receives events, with respect to other handlers. + +#ifndef NRF_SDH_BLE_OBSERVER_PRIO_LEVELS +#define NRF_SDH_BLE_OBSERVER_PRIO_LEVELS 4 +#endif + +// BLE Observers priorities - Invididual priorities + +//========================================================== +// BLE_ADV_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Advertising module. + +#ifndef BLE_ADV_BLE_OBSERVER_PRIO +#define BLE_ADV_BLE_OBSERVER_PRIO 1 +#endif + +// BLE_ANCS_C_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Apple Notification Service Client. + +#ifndef BLE_ANCS_C_BLE_OBSERVER_PRIO +#define BLE_ANCS_C_BLE_OBSERVER_PRIO 2 +#endif + +// BLE_ANS_C_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Alert Notification Service Client. + +#ifndef BLE_ANS_C_BLE_OBSERVER_PRIO +#define BLE_ANS_C_BLE_OBSERVER_PRIO 2 +#endif + +// BLE_BAS_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Battery Service. + +#ifndef BLE_BAS_BLE_OBSERVER_PRIO +#define BLE_BAS_BLE_OBSERVER_PRIO 2 +#endif + +// BLE_BAS_C_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Battery Service Client. + +#ifndef BLE_BAS_C_BLE_OBSERVER_PRIO +#define BLE_BAS_C_BLE_OBSERVER_PRIO 2 +#endif + +// BLE_BPS_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Blood Pressure Service. + +#ifndef BLE_BPS_BLE_OBSERVER_PRIO +#define BLE_BPS_BLE_OBSERVER_PRIO 2 +#endif + +// BLE_CONN_PARAMS_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Connection parameters module. + +#ifndef BLE_CONN_PARAMS_BLE_OBSERVER_PRIO +#define BLE_CONN_PARAMS_BLE_OBSERVER_PRIO 1 +#endif + +// BLE_CONN_STATE_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Connection State module. + +#ifndef BLE_CONN_STATE_BLE_OBSERVER_PRIO +#define BLE_CONN_STATE_BLE_OBSERVER_PRIO 0 +#endif + +// BLE_CSCS_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Cycling Speed and Cadence Service. + +#ifndef BLE_CSCS_BLE_OBSERVER_PRIO +#define BLE_CSCS_BLE_OBSERVER_PRIO 2 +#endif + +// BLE_CTS_C_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Current Time Service Client. + +#ifndef BLE_CTS_C_BLE_OBSERVER_PRIO +#define BLE_CTS_C_BLE_OBSERVER_PRIO 2 +#endif + +// BLE_DB_DISC_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Database Discovery module. + +#ifndef BLE_DB_DISC_BLE_OBSERVER_PRIO +#define BLE_DB_DISC_BLE_OBSERVER_PRIO 1 +#endif + +// BLE_DFU_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the DFU Service. + +#ifndef BLE_DFU_BLE_OBSERVER_PRIO +#define BLE_DFU_BLE_OBSERVER_PRIO 2 +#endif + +// BLE_DIS_C_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Device Information Client. + +#ifndef BLE_DIS_C_BLE_OBSERVER_PRIO +#define BLE_DIS_C_BLE_OBSERVER_PRIO 2 +#endif + +// BLE_GLS_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Glucose Service. + +#ifndef BLE_GLS_BLE_OBSERVER_PRIO +#define BLE_GLS_BLE_OBSERVER_PRIO 2 +#endif + +// BLE_HIDS_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Human Interface Device Service. + +#ifndef BLE_HIDS_BLE_OBSERVER_PRIO +#define BLE_HIDS_BLE_OBSERVER_PRIO 2 +#endif + +// BLE_HRS_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Heart Rate Service. + +#ifndef BLE_HRS_BLE_OBSERVER_PRIO +#define BLE_HRS_BLE_OBSERVER_PRIO 2 +#endif + +// BLE_HRS_C_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Heart Rate Service Client. + +#ifndef BLE_HRS_C_BLE_OBSERVER_PRIO +#define BLE_HRS_C_BLE_OBSERVER_PRIO 2 +#endif + +// BLE_HTS_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Health Thermometer Service. + +#ifndef BLE_HTS_BLE_OBSERVER_PRIO +#define BLE_HTS_BLE_OBSERVER_PRIO 2 +#endif + +// BLE_IAS_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Immediate Alert Service. + +#ifndef BLE_IAS_BLE_OBSERVER_PRIO +#define BLE_IAS_BLE_OBSERVER_PRIO 2 +#endif + +// BLE_IAS_C_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Immediate Alert Service Client. + +#ifndef BLE_IAS_C_BLE_OBSERVER_PRIO +#define BLE_IAS_C_BLE_OBSERVER_PRIO 2 +#endif + +// BLE_LBS_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the LED Button Service. + +#ifndef BLE_LBS_BLE_OBSERVER_PRIO +#define BLE_LBS_BLE_OBSERVER_PRIO 2 +#endif + +// BLE_LBS_C_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the LED Button Service Client. + +#ifndef BLE_LBS_C_BLE_OBSERVER_PRIO +#define BLE_LBS_C_BLE_OBSERVER_PRIO 2 +#endif + +// BLE_LLS_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Link Loss Service. + +#ifndef BLE_LLS_BLE_OBSERVER_PRIO +#define BLE_LLS_BLE_OBSERVER_PRIO 2 +#endif + +// BLE_LNS_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Location Navigation Service. + +#ifndef BLE_LNS_BLE_OBSERVER_PRIO +#define BLE_LNS_BLE_OBSERVER_PRIO 2 +#endif + +// BLE_NUS_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the UART Service. + +#ifndef BLE_NUS_BLE_OBSERVER_PRIO +#define BLE_NUS_BLE_OBSERVER_PRIO 2 +#endif + +// BLE_NUS_C_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the UART Central Service. + +#ifndef BLE_NUS_C_BLE_OBSERVER_PRIO +#define BLE_NUS_C_BLE_OBSERVER_PRIO 2 +#endif + +// BLE_OTS_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Object transfer service. + +#ifndef BLE_OTS_BLE_OBSERVER_PRIO +#define BLE_OTS_BLE_OBSERVER_PRIO 2 +#endif + +// BLE_OTS_C_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Object transfer service client. + +#ifndef BLE_OTS_C_BLE_OBSERVER_PRIO +#define BLE_OTS_C_BLE_OBSERVER_PRIO 2 +#endif + +// BLE_RSCS_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Running Speed and Cadence Service. + +#ifndef BLE_RSCS_BLE_OBSERVER_PRIO +#define BLE_RSCS_BLE_OBSERVER_PRIO 2 +#endif + +// BLE_RSCS_C_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Running Speed and Cadence Client. + +#ifndef BLE_RSCS_C_BLE_OBSERVER_PRIO +#define BLE_RSCS_C_BLE_OBSERVER_PRIO 2 +#endif + +// BLE_TPS_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the TX Power Service. + +#ifndef BLE_TPS_BLE_OBSERVER_PRIO +#define BLE_TPS_BLE_OBSERVER_PRIO 2 +#endif + +// BSP_BTN_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Button Control module. + +#ifndef BSP_BTN_BLE_OBSERVER_PRIO +#define BSP_BTN_BLE_OBSERVER_PRIO 1 +#endif + +// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the NFC pairing library. + +#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +#endif + +// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the NFC pairing library. + +#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +#endif + +// NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the NFC pairing library. + +#ifndef NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO +#define NFC_BLE_PAIR_LIB_BLE_OBSERVER_PRIO 1 +#endif + +// NRF_BLE_BMS_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Bond Management Service. + +#ifndef NRF_BLE_BMS_BLE_OBSERVER_PRIO +#define NRF_BLE_BMS_BLE_OBSERVER_PRIO 2 +#endif + +// NRF_BLE_CGMS_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Contiuon Glucose Monitoring Service. + +#ifndef NRF_BLE_CGMS_BLE_OBSERVER_PRIO +#define NRF_BLE_CGMS_BLE_OBSERVER_PRIO 2 +#endif + +// NRF_BLE_ES_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Eddystone module. + +#ifndef NRF_BLE_ES_BLE_OBSERVER_PRIO +#define NRF_BLE_ES_BLE_OBSERVER_PRIO 2 +#endif + +// NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the GATT Service Client. + +#ifndef NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO +#define NRF_BLE_GATTS_C_BLE_OBSERVER_PRIO 2 +#endif + +// NRF_BLE_GATT_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the GATT module. + +#ifndef NRF_BLE_GATT_BLE_OBSERVER_PRIO +#define NRF_BLE_GATT_BLE_OBSERVER_PRIO 1 +#endif + +// NRF_BLE_GQ_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the GATT Queue module. + +#ifndef NRF_BLE_GQ_BLE_OBSERVER_PRIO +#define NRF_BLE_GQ_BLE_OBSERVER_PRIO 1 +#endif + +// NRF_BLE_QWR_BLE_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the Queued writes module. + +#ifndef NRF_BLE_QWR_BLE_OBSERVER_PRIO +#define NRF_BLE_QWR_BLE_OBSERVER_PRIO 2 +#endif + +// NRF_BLE_SCAN_OBSERVER_PRIO +// Priority for dispatching the BLE events to the Scanning Module. + +#ifndef NRF_BLE_SCAN_OBSERVER_PRIO +#define NRF_BLE_SCAN_OBSERVER_PRIO 1 +#endif + +// PM_BLE_OBSERVER_PRIO - Priority with which BLE events are dispatched to the Peer Manager module. +#ifndef PM_BLE_OBSERVER_PRIO +#define PM_BLE_OBSERVER_PRIO 1 +#endif + +// +//========================================================== + +// +//========================================================== + + +// + +// NRF_SDH_ENABLED - nrf_sdh - SoftDevice handler +//========================================================== +#ifndef NRF_SDH_ENABLED +#define NRF_SDH_ENABLED 0 +#endif +// Dispatch model + +// This setting configures how Stack events are dispatched to the application. +//========================================================== +// NRF_SDH_DISPATCH_MODEL + + +// NRF_SDH_DISPATCH_MODEL_INTERRUPT: SoftDevice events are passed to the application from the interrupt context. +// NRF_SDH_DISPATCH_MODEL_APPSH: SoftDevice events are scheduled using @ref app_scheduler. +// NRF_SDH_DISPATCH_MODEL_POLLING: SoftDevice events are to be fetched manually. +// <0=> NRF_SDH_DISPATCH_MODEL_INTERRUPT +// <1=> NRF_SDH_DISPATCH_MODEL_APPSH +// <2=> NRF_SDH_DISPATCH_MODEL_POLLING + +#ifndef NRF_SDH_DISPATCH_MODEL +#define NRF_SDH_DISPATCH_MODEL 0 +#endif + +// +//========================================================== + +// Clock - SoftDevice clock configuration + +//========================================================== +// NRF_SDH_CLOCK_LF_SRC - SoftDevice clock source. + +// <0=> NRF_CLOCK_LF_SRC_RC +// <1=> NRF_CLOCK_LF_SRC_XTAL +// <2=> NRF_CLOCK_LF_SRC_SYNTH + +#ifndef NRF_SDH_CLOCK_LF_SRC +#define NRF_SDH_CLOCK_LF_SRC 1 +#endif + +// NRF_SDH_CLOCK_LF_RC_CTIV - SoftDevice calibration timer interval. +#ifndef NRF_SDH_CLOCK_LF_RC_CTIV +#define NRF_SDH_CLOCK_LF_RC_CTIV 0 +#endif + +// NRF_SDH_CLOCK_LF_RC_TEMP_CTIV - SoftDevice calibration timer interval under constant temperature. +// How often (in number of calibration intervals) the RC oscillator shall be calibrated +// if the temperature has not changed. + +#ifndef NRF_SDH_CLOCK_LF_RC_TEMP_CTIV +#define NRF_SDH_CLOCK_LF_RC_TEMP_CTIV 0 +#endif + +// NRF_SDH_CLOCK_LF_ACCURACY - External clock accuracy used in the LL to compute timing. + +// <0=> NRF_CLOCK_LF_ACCURACY_250_PPM +// <1=> NRF_CLOCK_LF_ACCURACY_500_PPM +// <2=> NRF_CLOCK_LF_ACCURACY_150_PPM +// <3=> NRF_CLOCK_LF_ACCURACY_100_PPM +// <4=> NRF_CLOCK_LF_ACCURACY_75_PPM +// <5=> NRF_CLOCK_LF_ACCURACY_50_PPM +// <6=> NRF_CLOCK_LF_ACCURACY_30_PPM +// <7=> NRF_CLOCK_LF_ACCURACY_20_PPM +// <8=> NRF_CLOCK_LF_ACCURACY_10_PPM +// <9=> NRF_CLOCK_LF_ACCURACY_5_PPM +// <10=> NRF_CLOCK_LF_ACCURACY_2_PPM +// <11=> NRF_CLOCK_LF_ACCURACY_1_PPM + +#ifndef NRF_SDH_CLOCK_LF_ACCURACY +#define NRF_SDH_CLOCK_LF_ACCURACY 7 +#endif + +// +//========================================================== + +// SDH Observers - Observers and priority levels + +//========================================================== +// NRF_SDH_REQ_OBSERVER_PRIO_LEVELS - Total number of priority levels for request observers. +// This setting configures the number of priority levels available for the SoftDevice request event handlers. +// The priority level of a handler determines the order in which it receives events, with respect to other handlers. + +#ifndef NRF_SDH_REQ_OBSERVER_PRIO_LEVELS +#define NRF_SDH_REQ_OBSERVER_PRIO_LEVELS 2 +#endif + +// NRF_SDH_STATE_OBSERVER_PRIO_LEVELS - Total number of priority levels for state observers. +// This setting configures the number of priority levels available for the SoftDevice state event handlers. +// The priority level of a handler determines the order in which it receives events, with respect to other handlers. + +#ifndef NRF_SDH_STATE_OBSERVER_PRIO_LEVELS +#define NRF_SDH_STATE_OBSERVER_PRIO_LEVELS 2 +#endif + +// NRF_SDH_STACK_OBSERVER_PRIO_LEVELS - Total number of priority levels for stack event observers. +// This setting configures the number of priority levels available for the SoftDevice stack event handlers (ANT, BLE, SoC). +// The priority level of a handler determines the order in which it receives events, with respect to other handlers. + +#ifndef NRF_SDH_STACK_OBSERVER_PRIO_LEVELS +#define NRF_SDH_STACK_OBSERVER_PRIO_LEVELS 2 +#endif + + +// State Observers priorities - Invididual priorities + +//========================================================== +// CLOCK_CONFIG_STATE_OBSERVER_PRIO +// Priority with which state events are dispatched to the Clock driver. + +#ifndef CLOCK_CONFIG_STATE_OBSERVER_PRIO +#define CLOCK_CONFIG_STATE_OBSERVER_PRIO 0 +#endif + +// POWER_CONFIG_STATE_OBSERVER_PRIO +// Priority with which state events are dispatched to the Power driver. + +#ifndef POWER_CONFIG_STATE_OBSERVER_PRIO +#define POWER_CONFIG_STATE_OBSERVER_PRIO 0 +#endif + +// RNG_CONFIG_STATE_OBSERVER_PRIO +// Priority with which state events are dispatched to this module. + +#ifndef RNG_CONFIG_STATE_OBSERVER_PRIO +#define RNG_CONFIG_STATE_OBSERVER_PRIO 0 +#endif + +// +//========================================================== + +// Stack Event Observers priorities - Invididual priorities + +//========================================================== +// NRF_SDH_ANT_STACK_OBSERVER_PRIO +// This setting configures the priority with which ANT events are processed with respect to other events coming from the stack. +// Modify this setting if you need to have ANT events dispatched before or after other stack events, such as BLE or SoC. +// Zero is the highest priority. + +#ifndef NRF_SDH_ANT_STACK_OBSERVER_PRIO +#define NRF_SDH_ANT_STACK_OBSERVER_PRIO 0 +#endif + +// NRF_SDH_BLE_STACK_OBSERVER_PRIO +// This setting configures the priority with which BLE events are processed with respect to other events coming from the stack. +// Modify this setting if you need to have BLE events dispatched before or after other stack events, such as ANT or SoC. +// Zero is the highest priority. + +#ifndef NRF_SDH_BLE_STACK_OBSERVER_PRIO +#define NRF_SDH_BLE_STACK_OBSERVER_PRIO 0 +#endif + +// NRF_SDH_SOC_STACK_OBSERVER_PRIO +// This setting configures the priority with which SoC events are processed with respect to other events coming from the stack. +// Modify this setting if you need to have SoC events dispatched before or after other stack events, such as ANT or BLE. +// Zero is the highest priority. + +#ifndef NRF_SDH_SOC_STACK_OBSERVER_PRIO +#define NRF_SDH_SOC_STACK_OBSERVER_PRIO 0 +#endif + +// +//========================================================== + +// +//========================================================== + + +// + +// NRF_SDH_SOC_ENABLED - nrf_sdh_soc - SoftDevice SoC event handler +//========================================================== +#ifndef NRF_SDH_SOC_ENABLED +#define NRF_SDH_SOC_ENABLED 0 +#endif +// SoC Observers - Observers and priority levels + +//========================================================== +// NRF_SDH_SOC_OBSERVER_PRIO_LEVELS - Total number of priority levels for SoC observers. +// This setting configures the number of priority levels available for the SoC event handlers. +// The priority level of a handler determines the order in which it receives events, with respect to other handlers. + +#ifndef NRF_SDH_SOC_OBSERVER_PRIO_LEVELS +#define NRF_SDH_SOC_OBSERVER_PRIO_LEVELS 2 +#endif + +// SoC Observers priorities - Invididual priorities + +//========================================================== +// BLE_DFU_SOC_OBSERVER_PRIO +// Priority with which BLE events are dispatched to the DFU Service. + +#ifndef BLE_DFU_SOC_OBSERVER_PRIO +#define BLE_DFU_SOC_OBSERVER_PRIO 1 +#endif + +// CLOCK_CONFIG_SOC_OBSERVER_PRIO +// Priority with which SoC events are dispatched to the Clock driver. + +#ifndef CLOCK_CONFIG_SOC_OBSERVER_PRIO +#define CLOCK_CONFIG_SOC_OBSERVER_PRIO 0 +#endif + +// POWER_CONFIG_SOC_OBSERVER_PRIO +// Priority with which SoC events are dispatched to the Power driver. + +#ifndef POWER_CONFIG_SOC_OBSERVER_PRIO +#define POWER_CONFIG_SOC_OBSERVER_PRIO 0 +#endif + +// +//========================================================== + +// +//========================================================== + +// NRFX_NVMC_ENABLED - nrfx_nvmc - NVMC peripheral driver +//========================================================== +#ifndef NRFX_NVMC_ENABLED +#define NRFX_NVMC_ENABLED 1 +#endif +// + +//========================================================== +#ifndef NRFX_SYSTICK_ENABLED +#define NRFX_SYSTICK_ENABLED 1 +#endif +// <<< end of configuration section >>> +#endif //SDK_CONFIG_H + diff --git a/bsp/nrf5x/nrf52832/project.uvoptx b/bsp/nrf5x/nrf52832/project.uvoptx index b672a88f0c..955f05ebf6 100644 --- a/bsp/nrf5x/nrf52832/project.uvoptx +++ b/bsp/nrf5x/nrf52832/project.uvoptx @@ -120,12 +120,12 @@ 0 JL2CM3 - -U59401765 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC4000 -FN2 -FF0nrf52xxx.flm -FS00 -FL0200000 -FP0($$Device:nRF52832_xxAA$Flash\nrf52xxx.flm) -FF1nrf52xxx_uicr.flm -FS110001000 -FL11000 -FP1($$Device:nRF52832_xxAA$Flash\nrf52xxx_uicr.flm) + -U682327541 -O78 -S8 -ZTIFSpeedSel50000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC4000 -FN2 -FF0nrf52xxx.flm -FS00 -FL0200000 -FP0($$Device:nRF52832_xxAA$Flash\nrf52xxx.flm) -FF1nrf52xxx_uicr.flm -FS110001000 -FL11000 -FP1($$Device:nRF52832_xxAA$Flash\nrf52xxx_uicr.flm) 0 UL2CM3 - UL2CM3(-S0 -C0 -P0 -FD20000000 -FC4000 -FN2 -FF0nrf52xxx -FS00 -FL0200000 -FF1nrf52xxx_uicr -FS110001000 -FL11000 -FP0($$Device:nRF52832_xxAA$Flash\nrf52xxx.flm) -FP1($$Device:nRF52832_xxAA$Flash\nrf52xxx_uicr.flm)) + UL2CM3(-S0 -C0 -P0 ) -FN2 -FC4000 -FD20000000 -FF0nrf52xxx -FF1nrf52xxx_uicr -FL0200000 -FL11000 -FS00 -FS110001000 -FP0($$Device:nRF52832_xxAA$Flash\nrf52xxx.flm) -FP1($$Device:nRF52832_xxAA$Flash\nrf52xxx_uicr.flm) @@ -175,8 +175,8 @@ - Kernel - 0 + Applications + 1 0 0 0 @@ -187,763 +187,763 @@ 0 0 0 - ..\..\..\src\clock.c - clock.c + applications\application.c + application.c 0 0 + + + + cpu + 0 + 0 + 0 + 0 - 1 + 2 2 1 0 0 0 - ..\..\..\src\components.c - components.c + ..\..\..\libcpu\arm\common\backtrace.c + backtrace.c 0 0 - 1 + 2 3 1 0 0 0 - ..\..\..\src\device.c - device.c + ..\..\..\libcpu\arm\common\div0.c + div0.c 0 0 - 1 + 2 4 1 0 0 0 - ..\..\..\src\idle.c - idle.c + ..\..\..\libcpu\arm\common\showmem.c + showmem.c 0 0 - 1 + 2 5 1 0 0 0 - ..\..\..\src\ipc.c - ipc.c + ..\..\..\libcpu\arm\cortex-m4\cpuport.c + cpuport.c 0 0 - 1 + 2 6 - 1 + 2 0 0 0 - ..\..\..\src\irq.c - irq.c + ..\..\..\libcpu\arm\cortex-m4\context_rvds.S + context_rvds.S 0 0 + + + + DeviceDrivers + 0 + 0 + 0 + 0 - 1 + 3 7 1 0 0 0 - ..\..\..\src\kservice.c - kservice.c + ..\..\..\components\drivers\misc\pin.c + pin.c 0 0 - 1 + 3 8 1 0 0 0 - ..\..\..\src\mem.c - mem.c + ..\..\..\components\drivers\serial\serial.c + serial.c 0 0 - 1 + 3 9 1 0 0 0 - ..\..\..\src\mempool.c - mempool.c + ..\..\..\components\drivers\src\completion.c + completion.c 0 0 - 1 + 3 10 1 0 0 0 - ..\..\..\src\object.c - object.c + ..\..\..\components\drivers\src\dataqueue.c + dataqueue.c 0 0 - 1 + 3 11 1 0 0 0 - ..\..\..\src\scheduler.c - scheduler.c + ..\..\..\components\drivers\src\pipe.c + pipe.c 0 0 - 1 + 3 12 1 0 0 0 - ..\..\..\src\signal.c - signal.c + ..\..\..\components\drivers\src\ringblk_buf.c + ringblk_buf.c 0 0 - 1 + 3 13 1 0 0 0 - ..\..\..\src\thread.c - thread.c + ..\..\..\components\drivers\src\ringbuffer.c + ringbuffer.c 0 0 - 1 + 3 14 1 0 0 0 - ..\..\..\src\timer.c - timer.c + ..\..\..\components\drivers\src\waitqueue.c + waitqueue.c + 0 + 0 + + + 3 + 15 + 1 + 0 + 0 + 0 + ..\..\..\components\drivers\src\workqueue.c + workqueue.c 0 0 - Applications - 0 + Drivers + 1 0 0 0 - 2 - 15 + 4 + 16 1 0 0 0 - applications\application.c - application.c + board\board.c + board.c 0 0 - 2 - 16 + 4 + 17 1 0 0 0 - applications\ble_nus_app.c - ble_nus_app.c + ..\libraries\drivers\drv_uart.c + drv_uart.c 0 0 - 2 - 17 + 4 + 18 1 0 0 0 - applications\startup.c - startup.c + ..\libraries\drivers\drv_gpio.c + drv_gpio.c 0 0 - Drivers + finsh 1 0 0 0 - 3 - 18 - 1 - 0 - 0 - 0 - board\board.c - board.c - 0 - 0 - - - 3 + 5 19 1 0 0 0 - ..\libraries\drivers\drv_uart.c - drv_uart.c + ..\..\..\components\finsh\shell.c + shell.c 0 0 - - - - BLE_STACK - 1 - 0 - 0 - 0 - 4 + 5 20 1 0 0 0 - packages\Nordic_sdk-latest\components\ble\common\ble_advdata.c - ble_advdata.c + ..\..\..\components\finsh\cmd.c + cmd.c 0 0 - 4 + 5 21 1 0 0 0 - packages\Nordic_sdk-latest\components\ble\common\ble_conn_params.c - ble_conn_params.c + ..\..\..\components\finsh\msh.c + msh.c 0 0 + + + + Kernel + 1 + 0 + 0 + 0 - 4 + 6 22 1 0 0 0 - packages\Nordic_sdk-latest\components\ble\common\ble_conn_state.c - ble_conn_state.c + ..\..\..\src\clock.c + clock.c 0 0 - 4 + 6 23 1 0 0 0 - packages\Nordic_sdk-latest\components\ble\common\ble_srv_common.c - ble_srv_common.c + ..\..\..\src\components.c + components.c 0 0 - 4 + 6 24 1 0 0 0 - packages\Nordic_sdk-latest\components\ble\nrf_ble_gatt\nrf_ble_gatt.c - nrf_ble_gatt.c + ..\..\..\src\device.c + device.c 0 0 - 4 + 6 25 1 0 0 0 - packages\Nordic_sdk-latest\components\ble\ble_services\ble_nus\ble_nus.c - ble_nus.c + ..\..\..\src\idle.c + idle.c 0 0 - 4 + 6 26 1 0 0 0 - packages\Nordic_sdk-latest\components\ble\ble_advertising\ble_advertising.c - ble_advertising.c + ..\..\..\src\ipc.c + ipc.c 0 0 - 4 + 6 27 1 0 0 0 - packages\Nordic_sdk-latest\components\softdevice\common\softdevice_handler\softdevice_handler.c - softdevice_handler.c + ..\..\..\src\irq.c + irq.c 0 0 - - - - NRF_DRIVERS - 1 - 0 - 0 - 0 - 5 + 6 28 1 0 0 0 - packages\Nordic_sdk-latest\components\drivers_nrf\hal\nrf_saadc.c - nrf_saadc.c + ..\..\..\src\kservice.c + kservice.c 0 0 - 5 + 6 29 1 0 0 0 - packages\Nordic_sdk-latest\components\drivers_nrf\common\nrf_drv_common.c - nrf_drv_common.c + ..\..\..\src\mem.c + mem.c 0 0 - 5 + 6 30 1 0 0 0 - packages\Nordic_sdk-latest\components\drivers_nrf\clock\nrf_drv_clock.c - nrf_drv_clock.c + ..\..\..\src\mempool.c + mempool.c 0 0 - 5 + 6 31 1 0 0 0 - packages\Nordic_sdk-latest\components\drivers_nrf\gpiote\nrf_drv_gpiote.c - nrf_drv_gpiote.c + ..\..\..\src\object.c + object.c 0 0 - 5 + 6 32 1 0 0 0 - packages\Nordic_sdk-latest\components\drivers_nrf\pwm\nrf_drv_pwm.c - nrf_drv_pwm.c + ..\..\..\src\scheduler.c + scheduler.c 0 0 - 5 + 6 33 1 0 0 0 - packages\Nordic_sdk-latest\components\drivers_nrf\saadc\nrf_drv_saadc.c - nrf_drv_saadc.c + ..\..\..\src\signal.c + signal.c 0 0 - 5 + 6 34 1 0 0 0 - packages\Nordic_sdk-latest\components\libraries\log\src\nrf_log_backend_serial.c - nrf_log_backend_serial.c + ..\..\..\src\thread.c + thread.c 0 0 - 5 + 6 35 1 0 0 0 - packages\Nordic_sdk-latest\components\libraries\log\src\nrf_log_frontend.c - nrf_log_frontend.c + ..\..\..\src\timer.c + timer.c 0 0 + + + + libc + 1 + 0 + 0 + 0 - 5 + 7 36 1 0 0 0 - packages\Nordic_sdk-latest\components\libraries\timer\app_timer_rtthread.c - app_timer_rtthread.c + ..\..\..\components\libc\compilers\armlibc\libc.c + libc.c 0 0 - 5 + 7 37 1 0 0 0 - packages\Nordic_sdk-latest\components\libraries\util\app_error.c - app_error.c + ..\..\..\components\libc\compilers\armlibc\mem_std.c + mem_std.c 0 0 - 5 + 7 38 1 0 0 0 - packages\Nordic_sdk-latest\components\libraries\util\app_error_weak.c - app_error_weak.c + ..\..\..\components\libc\compilers\armlibc\stubs.c + stubs.c 0 0 - 5 + 7 39 1 0 0 0 - packages\Nordic_sdk-latest\components\libraries\util\app_util_platform.c - app_util_platform.c + ..\..\..\components\libc\compilers\common\time.c + time.c 0 0 + + + + nrfx + 1 + 0 + 0 + 0 - 5 + 8 40 1 0 0 0 - packages\Nordic_sdk-latest\components\libraries\util\nrf_assert.c - nrf_assert.c + packages\nrfx-v2.1.0\drivers\src\nrfx_adc.c + nrfx_adc.c 0 0 - 5 + 8 41 1 0 0 0 - packages\Nordic_sdk-latest\components\libraries\util\sdk_mapped_flags.c - sdk_mapped_flags.c + packages\nrfx-v2.1.0\drivers\src\nrfx_clock.c + nrfx_clock.c 0 0 - 5 + 8 42 1 0 0 0 - packages\Nordic_sdk-latest\components\libraries\fstorage\fstorage.c - fstorage.c + packages\nrfx-v2.1.0\drivers\src\nrfx_comp.c + nrfx_comp.c 0 0 - 5 + 8 43 1 0 0 0 - packages\Nordic_sdk-latest\components\libraries\strerror\nrf_strerror.c - nrf_strerror.c + packages\nrfx-v2.1.0\drivers\src\nrfx_dppi.c + nrfx_dppi.c 0 0 - 5 + 8 44 1 0 0 0 - packages\Nordic_sdk-latest\components\toolchain\system_nrf52.c - system_nrf52.c + packages\nrfx-v2.1.0\drivers\src\nrfx_egu.c + nrfx_egu.c 0 0 - 5 + 8 45 - 2 + 1 0 0 0 - packages\Nordic_sdk-latest\components\toolchain\arm\arm_startup_nrf52.s - arm_startup_nrf52.s + packages\nrfx-v2.1.0\drivers\src\nrfx_gpiote.c + nrfx_gpiote.c 0 0 - - - - cpu - 1 - 0 - 0 - 0 - 6 + 8 46 1 0 0 0 - ..\..\..\libcpu\arm\common\backtrace.c - backtrace.c + packages\nrfx-v2.1.0\drivers\src\nrfx_i2s.c + nrfx_i2s.c 0 0 - 6 + 8 47 1 0 0 0 - ..\..\..\libcpu\arm\common\div0.c - div0.c + packages\nrfx-v2.1.0\drivers\src\nrfx_ipc.c + nrfx_ipc.c 0 0 - 6 + 8 48 1 0 0 0 - ..\..\..\libcpu\arm\common\showmem.c - showmem.c + packages\nrfx-v2.1.0\drivers\src\nrfx_lpcomp.c + nrfx_lpcomp.c 0 0 - 6 + 8 49 1 0 0 0 - ..\..\..\libcpu\arm\cortex-m4\cpuport.c - cpuport.c + packages\nrfx-v2.1.0\drivers\src\nrfx_nfct.c + nrfx_nfct.c 0 0 - 6 + 8 50 - 2 + 1 0 0 0 - ..\..\..\libcpu\arm\cortex-m4\context_rvds.S - context_rvds.S + packages\nrfx-v2.1.0\drivers\src\nrfx_nvmc.c + nrfx_nvmc.c 0 0 - - - - DeviceDrivers - 1 - 0 - 0 - 0 - 7 + 8 51 1 0 0 0 - ..\..\..\components\drivers\misc\pin.c - pin.c + packages\nrfx-v2.1.0\drivers\src\nrfx_pdm.c + nrfx_pdm.c 0 0 - 7 + 8 52 1 0 0 0 - ..\..\..\components\drivers\serial\serial.c - serial.c + packages\nrfx-v2.1.0\drivers\src\nrfx_power.c + nrfx_power.c 0 0 - 7 + 8 53 1 0 0 0 - ..\..\..\components\drivers\src\completion.c - completion.c + packages\nrfx-v2.1.0\drivers\src\nrfx_ppi.c + nrfx_ppi.c 0 0 - 7 + 8 54 1 0 0 0 - ..\..\..\components\drivers\src\dataqueue.c - dataqueue.c + packages\nrfx-v2.1.0\drivers\src\nrfx_pwm.c + nrfx_pwm.c 0 0 - 7 + 8 55 1 0 0 0 - ..\..\..\components\drivers\src\pipe.c - pipe.c + packages\nrfx-v2.1.0\drivers\src\nrfx_qdec.c + nrfx_qdec.c 0 0 - 7 + 8 56 1 0 0 0 - ..\..\..\components\drivers\src\ringblk_buf.c - ringblk_buf.c + packages\nrfx-v2.1.0\drivers\src\nrfx_rng.c + nrfx_rng.c 0 0 - 7 + 8 57 1 0 0 0 - ..\..\..\components\drivers\src\ringbuffer.c - ringbuffer.c + packages\nrfx-v2.1.0\drivers\src\nrfx_rtc.c + nrfx_rtc.c 0 0 - 7 + 8 58 1 0 0 0 - ..\..\..\components\drivers\src\waitqueue.c - waitqueue.c + packages\nrfx-v2.1.0\drivers\src\nrfx_saadc.c + nrfx_saadc.c 0 0 - 7 + 8 59 1 0 0 0 - ..\..\..\components\drivers\src\workqueue.c - workqueue.c + packages\nrfx-v2.1.0\drivers\src\nrfx_spi.c + nrfx_spi.c 0 0 - - - - finsh - 1 - 0 - 0 - 0 8 60 @@ -951,8 +951,8 @@ 0 0 0 - ..\..\..\components\finsh\shell.c - shell.c + packages\nrfx-v2.1.0\drivers\src\nrfx_spim.c + nrfx_spim.c 0 0 @@ -963,8 +963,8 @@ 0 0 0 - ..\..\..\components\finsh\cmd.c - cmd.c + packages\nrfx-v2.1.0\drivers\src\nrfx_spis.c + nrfx_spis.c 0 0 @@ -975,64 +975,164 @@ 0 0 0 - ..\..\..\components\finsh\msh.c - msh.c + packages\nrfx-v2.1.0\drivers\src\nrfx_systick.c + nrfx_systick.c 0 0 - - - - libc - 1 - 0 - 0 - 0 - 9 + 8 63 1 0 0 0 - ..\..\..\components\libc\compilers\armlibc\libc.c - libc.c + packages\nrfx-v2.1.0\drivers\src\nrfx_temp.c + nrfx_temp.c 0 0 - 9 + 8 64 1 0 0 0 - ..\..\..\components\libc\compilers\armlibc\mem_std.c - mem_std.c + packages\nrfx-v2.1.0\drivers\src\nrfx_timer.c + nrfx_timer.c 0 0 - 9 + 8 65 1 0 0 0 - ..\..\..\components\libc\compilers\armlibc\stubs.c - stubs.c + packages\nrfx-v2.1.0\drivers\src\nrfx_twi.c + nrfx_twi.c 0 0 - 9 + 8 66 1 0 0 0 - ..\..\..\components\libc\compilers\common\time.c - time.c + packages\nrfx-v2.1.0\drivers\src\nrfx_twi_twim.c + nrfx_twi_twim.c + 0 + 0 + + + 8 + 67 + 1 + 0 + 0 + 0 + packages\nrfx-v2.1.0\drivers\src\nrfx_twim.c + nrfx_twim.c + 0 + 0 + + + 8 + 68 + 1 + 0 + 0 + 0 + packages\nrfx-v2.1.0\drivers\src\nrfx_twis.c + nrfx_twis.c + 0 + 0 + + + 8 + 69 + 1 + 0 + 0 + 0 + packages\nrfx-v2.1.0\drivers\src\nrfx_uart.c + nrfx_uart.c + 0 + 0 + + + 8 + 70 + 1 + 0 + 0 + 0 + packages\nrfx-v2.1.0\drivers\src\nrfx_uarte.c + nrfx_uarte.c + 0 + 0 + + + 8 + 71 + 1 + 0 + 0 + 0 + packages\nrfx-v2.1.0\drivers\src\nrfx_usbd.c + nrfx_usbd.c + 0 + 0 + + + 8 + 72 + 1 + 0 + 0 + 0 + packages\nrfx-v2.1.0\drivers\src\nrfx_usbreg.c + nrfx_usbreg.c + 0 + 0 + + + 8 + 73 + 1 + 0 + 0 + 0 + packages\nrfx-v2.1.0\drivers\src\nrfx_wdt.c + nrfx_wdt.c + 0 + 0 + + + 8 + 74 + 1 + 0 + 0 + 0 + packages\nrfx-v2.1.0\mdk\system_nrf52.c + system_nrf52.c + 0 + 0 + + + 8 + 75 + 2 + 0 + 0 + 0 + packages\nrfx-v2.1.0\mdk\arm_startup_nrf52.s + arm_startup_nrf52.s 0 0 diff --git a/bsp/nrf5x/nrf52832/project.uvprojx b/bsp/nrf5x/nrf52832/project.uvprojx index 5e217cca28..b91c026743 100644 --- a/bsp/nrf5x/nrf52832/project.uvprojx +++ b/bsp/nrf5x/nrf52832/project.uvprojx @@ -18,7 +18,7 @@ Nordic Semiconductor NordicSemiconductor.nRF_DeviceFamilyPack.8.27.1 http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/ - IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + IRAM(0x20000000,0x00010000) IROM(0x00000000,0x00080000) CPUTYPE("Cortex-M4") FPU2 DSP CLOCK(12000000) ELITTLE UL2CM3(-S0 -C0 -P0 -FD20000000 -FC4000 -FN2 -FF0nrf52xxx -FS00 -FL0200000 -FF1nrf52xxx_uicr -FS110001000 -FL11000 -FP0($$Device:nRF52832_xxAA$Flash\nrf52xxx.flm) -FP1($$Device:nRF52832_xxAA$Flash\nrf52xxx_uicr.flm)) @@ -274,8 +274,8 @@ 1 - 0x1f000 - 0x61000 + 0x0 + 0x80000 1 @@ -299,8 +299,8 @@ 0 - 0x200025f8 - 0xda08 + 0x20000000 + 0x10000 0 @@ -315,7 +315,7 @@ 1 0 0 - 1 + 0 0 0 0 @@ -336,9 +336,9 @@ 0 --reduce_paths - NRF52_PAN_55, NRF52_PAN_12, NRF52_PAN_15, NRF52_PAN_58, SWI_DISABLE0, SOFTDEVICE_PRESENT, NRF52_PAN_54, NRF52, BLE_STACK_SUPPORT_REQD, NRF52_PAN_51, NRF52_PAN_36, RTTHREAD, CONFIG_GPIO_AS_PINRESET, NRF52_PAN_64, NRF52_PAN_20, NRF52_PAN_74, NRF52832_XXAA, S132, NRF_SD_BLE_API_VERSION=4, NRF52_PAN_31, RT_USING_ARM_LIBC + USE_APP_CONFIG, NRF52832_XXAA, RT_USING_ARM_LIBC - .;..\..\..\include;applications;.;board;..\libraries\drivers;packages\Nordic_sdk-latest\components;packages\Nordic_sdk-latest\components\softdevice\common\softdevice_handler;packages\Nordic_sdk-latest\components\softdevice\s132\headers;packages\Nordic_sdk-latest\components\softdevice\s132\headers\nrf52;packages\Nordic_sdk-latest\components\ble\common;packages\Nordic_sdk-latest\components\ble\nrf_ble_gatt;packages\Nordic_sdk-latest\components\ble\ble_advertising;packages\Nordic_sdk-latest\components\ble\ble_services\ble_nus;packages\Nordic_sdk-latest\components;packages\Nordic_sdk-latest\components\device;packages\Nordic_sdk-latest\components\drivers_nrf\delay;packages\Nordic_sdk-latest\components\drivers_nrf\uart;packages\Nordic_sdk-latest\components\drivers_nrf\clock;packages\Nordic_sdk-latest\components\drivers_nrf\gpiote;packages\Nordic_sdk-latest\components\drivers_nrf\common;packages\Nordic_sdk-latest\components\drivers_nrf\hal;packages\Nordic_sdk-latest\components\drivers_nrf\pwm;packages\Nordic_sdk-latest\components\drivers_nrf\saadc;packages\Nordic_sdk-latest\components\libraries\util;packages\Nordic_sdk-latest\components\libraries\timer;packages\Nordic_sdk-latest\components\libraries\fstorage;packages\Nordic_sdk-latest\components\libraries\experimental_section_vars;packages\Nordic_sdk-latest\components\libraries\log;packages\Nordic_sdk-latest\components\libraries\log\src;packages\Nordic_sdk-latest\components\libraries\strerror;packages\Nordic_sdk-latest\components\toolchain\cmsis\include;packages\Nordic_sdk-latest\components\toolchain;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m4;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\finsh;..\..\..\components\libc\compilers\armlibc;..\..\..\components\libc\compilers\common + applications;.;..\libraries\cmsis\include;..\..\..\libcpu\arm\common;..\..\..\libcpu\arm\cortex-m4;..\..\..\components\drivers\include;..\..\..\components\drivers\include;..\..\..\components\drivers\include;board;..\libraries\drivers;..\..\..\components\finsh;.;..\..\..\include;..\..\..\components\libc\compilers\armlibc;..\..\..\components\libc\compilers\common;packages\nrfx-v2.1.0;packages\nrfx-v2.1.0\drivers;packages\nrfx-v2.1.0\drivers\include;packages\nrfx-v2.1.0\mdk;packages\nrfx-v2.1.0\hal @@ -354,7 +354,7 @@ 0 --cpreproc_opts=-DBLE_STACK_SUPPORT_REQD,-DNRF_SD_BLE_API_VERSION=4,-DS132,-DSOFTDEVICE_PRESENT,-DSWI_DISABLE0,-DCONFIG_GPIO_AS_PINRESET,-DNRF52,-DNRF52832_XXAA,-DNRF52_PAN_12,-DNRF52_PAN_15,-DNRF52_PAN_20,-DNRF52_PAN_31,-DNRF52_PAN_36,-DNRF52_PAN_51,-DNRF52_PAN_54,-DNRF52_PAN_55,-DNRF52_PAN_58,-DNRF52_PAN_64,-DNRF52_PAN_74 - BLE_STACK_SUPPORT_REQD NRF_SD_BLE_API_VERSION=4 S132 SOFTDEVICE_PRESENT SWI_DISABLE0 CONFIG_GPIO_AS_PINRESET NRF52 NRF52832_XXAA NRF52_PAN_12 NRF52_PAN_15 NRF52_PAN_20 NRF52_PAN_31 NRF52_PAN_36 NRF52_PAN_51 NRF52_PAN_54 NRF52_PAN_55 NRF52_PAN_58 NRF52_PAN_64 NRF52_PAN_74 + @@ -380,377 +380,417 @@ - Kernel + Applications - clock.c + application.c 1 - ..\..\..\src\clock.c + applications\application.c + + + + cpu + - components.c + backtrace.c 1 - ..\..\..\src\components.c + ..\..\..\libcpu\arm\common\backtrace.c - device.c + div0.c 1 - ..\..\..\src\device.c + ..\..\..\libcpu\arm\common\div0.c - idle.c + showmem.c 1 - ..\..\..\src\idle.c + ..\..\..\libcpu\arm\common\showmem.c - ipc.c + cpuport.c 1 - ..\..\..\src\ipc.c + ..\..\..\libcpu\arm\cortex-m4\cpuport.c - irq.c + context_rvds.S + 2 + ..\..\..\libcpu\arm\cortex-m4\context_rvds.S + + + + + DeviceDrivers + + + pin.c 1 - ..\..\..\src\irq.c + ..\..\..\components\drivers\misc\pin.c - kservice.c + serial.c 1 - ..\..\..\src\kservice.c + ..\..\..\components\drivers\serial\serial.c - mem.c + completion.c 1 - ..\..\..\src\mem.c + ..\..\..\components\drivers\src\completion.c - mempool.c + dataqueue.c 1 - ..\..\..\src\mempool.c + ..\..\..\components\drivers\src\dataqueue.c - object.c + pipe.c 1 - ..\..\..\src\object.c + ..\..\..\components\drivers\src\pipe.c - scheduler.c + ringblk_buf.c 1 - ..\..\..\src\scheduler.c + ..\..\..\components\drivers\src\ringblk_buf.c - signal.c + ringbuffer.c 1 - ..\..\..\src\signal.c + ..\..\..\components\drivers\src\ringbuffer.c - thread.c + waitqueue.c 1 - ..\..\..\src\thread.c + ..\..\..\components\drivers\src\waitqueue.c - timer.c + workqueue.c 1 - ..\..\..\src\timer.c + ..\..\..\components\drivers\src\workqueue.c - Applications + Drivers - application.c + board.c 1 - applications\application.c + board\board.c - ble_nus_app.c + drv_uart.c 1 - applications\ble_nus_app.c + ..\libraries\drivers\drv_uart.c - startup.c + drv_gpio.c 1 - applications\startup.c + ..\libraries\drivers\drv_gpio.c - Drivers + finsh - board.c + shell.c 1 - board\board.c + ..\..\..\components\finsh\shell.c - drv_uart.c + cmd.c 1 - ..\libraries\drivers\drv_uart.c + ..\..\..\components\finsh\cmd.c + + + msh.c + 1 + ..\..\..\components\finsh\msh.c - BLE_STACK + Kernel - ble_advdata.c + clock.c 1 - packages\Nordic_sdk-latest\components\ble\common\ble_advdata.c + ..\..\..\src\clock.c - ble_conn_params.c + components.c 1 - packages\Nordic_sdk-latest\components\ble\common\ble_conn_params.c + ..\..\..\src\components.c - ble_conn_state.c + device.c 1 - packages\Nordic_sdk-latest\components\ble\common\ble_conn_state.c + ..\..\..\src\device.c - ble_srv_common.c + idle.c 1 - packages\Nordic_sdk-latest\components\ble\common\ble_srv_common.c + ..\..\..\src\idle.c - nrf_ble_gatt.c + ipc.c 1 - packages\Nordic_sdk-latest\components\ble\nrf_ble_gatt\nrf_ble_gatt.c + ..\..\..\src\ipc.c - ble_nus.c + irq.c 1 - packages\Nordic_sdk-latest\components\ble\ble_services\ble_nus\ble_nus.c + ..\..\..\src\irq.c - ble_advertising.c + kservice.c 1 - packages\Nordic_sdk-latest\components\ble\ble_advertising\ble_advertising.c + ..\..\..\src\kservice.c - softdevice_handler.c + mem.c 1 - packages\Nordic_sdk-latest\components\softdevice\common\softdevice_handler\softdevice_handler.c + ..\..\..\src\mem.c + + + mempool.c + 1 + ..\..\..\src\mempool.c + + + object.c + 1 + ..\..\..\src\object.c + + + scheduler.c + 1 + ..\..\..\src\scheduler.c + + + signal.c + 1 + ..\..\..\src\signal.c + + + thread.c + 1 + ..\..\..\src\thread.c + + + timer.c + 1 + ..\..\..\src\timer.c - NRF_DRIVERS + libc - nrf_saadc.c + libc.c 1 - packages\Nordic_sdk-latest\components\drivers_nrf\hal\nrf_saadc.c + ..\..\..\components\libc\compilers\armlibc\libc.c - nrf_drv_common.c + mem_std.c 1 - packages\Nordic_sdk-latest\components\drivers_nrf\common\nrf_drv_common.c + ..\..\..\components\libc\compilers\armlibc\mem_std.c - nrf_drv_clock.c + stubs.c 1 - packages\Nordic_sdk-latest\components\drivers_nrf\clock\nrf_drv_clock.c + ..\..\..\components\libc\compilers\armlibc\stubs.c - nrf_drv_gpiote.c + time.c 1 - packages\Nordic_sdk-latest\components\drivers_nrf\gpiote\nrf_drv_gpiote.c + ..\..\..\components\libc\compilers\common\time.c + + + + nrfx + - nrf_drv_pwm.c + nrfx_adc.c 1 - packages\Nordic_sdk-latest\components\drivers_nrf\pwm\nrf_drv_pwm.c + packages\nrfx-v2.1.0\drivers\src\nrfx_adc.c - nrf_drv_saadc.c + nrfx_clock.c 1 - packages\Nordic_sdk-latest\components\drivers_nrf\saadc\nrf_drv_saadc.c + packages\nrfx-v2.1.0\drivers\src\nrfx_clock.c - nrf_log_backend_serial.c + nrfx_comp.c 1 - packages\Nordic_sdk-latest\components\libraries\log\src\nrf_log_backend_serial.c + packages\nrfx-v2.1.0\drivers\src\nrfx_comp.c - nrf_log_frontend.c + nrfx_dppi.c 1 - packages\Nordic_sdk-latest\components\libraries\log\src\nrf_log_frontend.c + packages\nrfx-v2.1.0\drivers\src\nrfx_dppi.c - app_timer_rtthread.c + nrfx_egu.c 1 - packages\Nordic_sdk-latest\components\libraries\timer\app_timer_rtthread.c + packages\nrfx-v2.1.0\drivers\src\nrfx_egu.c - app_error.c + nrfx_gpiote.c 1 - packages\Nordic_sdk-latest\components\libraries\util\app_error.c + packages\nrfx-v2.1.0\drivers\src\nrfx_gpiote.c - app_error_weak.c + nrfx_i2s.c 1 - packages\Nordic_sdk-latest\components\libraries\util\app_error_weak.c + packages\nrfx-v2.1.0\drivers\src\nrfx_i2s.c - app_util_platform.c + nrfx_ipc.c 1 - packages\Nordic_sdk-latest\components\libraries\util\app_util_platform.c + packages\nrfx-v2.1.0\drivers\src\nrfx_ipc.c - nrf_assert.c + nrfx_lpcomp.c 1 - packages\Nordic_sdk-latest\components\libraries\util\nrf_assert.c + packages\nrfx-v2.1.0\drivers\src\nrfx_lpcomp.c - sdk_mapped_flags.c + nrfx_nfct.c 1 - packages\Nordic_sdk-latest\components\libraries\util\sdk_mapped_flags.c + packages\nrfx-v2.1.0\drivers\src\nrfx_nfct.c - fstorage.c + nrfx_nvmc.c 1 - packages\Nordic_sdk-latest\components\libraries\fstorage\fstorage.c + packages\nrfx-v2.1.0\drivers\src\nrfx_nvmc.c - nrf_strerror.c + nrfx_pdm.c 1 - packages\Nordic_sdk-latest\components\libraries\strerror\nrf_strerror.c + packages\nrfx-v2.1.0\drivers\src\nrfx_pdm.c - system_nrf52.c + nrfx_power.c 1 - packages\Nordic_sdk-latest\components\toolchain\system_nrf52.c + packages\nrfx-v2.1.0\drivers\src\nrfx_power.c - arm_startup_nrf52.s - 2 - packages\Nordic_sdk-latest\components\toolchain\arm\arm_startup_nrf52.s + nrfx_ppi.c + 1 + packages\nrfx-v2.1.0\drivers\src\nrfx_ppi.c - - - - cpu - - backtrace.c + nrfx_pwm.c 1 - ..\..\..\libcpu\arm\common\backtrace.c + packages\nrfx-v2.1.0\drivers\src\nrfx_pwm.c - div0.c + nrfx_qdec.c 1 - ..\..\..\libcpu\arm\common\div0.c + packages\nrfx-v2.1.0\drivers\src\nrfx_qdec.c - showmem.c + nrfx_rng.c 1 - ..\..\..\libcpu\arm\common\showmem.c + packages\nrfx-v2.1.0\drivers\src\nrfx_rng.c - cpuport.c + nrfx_rtc.c 1 - ..\..\..\libcpu\arm\cortex-m4\cpuport.c + packages\nrfx-v2.1.0\drivers\src\nrfx_rtc.c - context_rvds.S - 2 - ..\..\..\libcpu\arm\cortex-m4\context_rvds.S + nrfx_saadc.c + 1 + packages\nrfx-v2.1.0\drivers\src\nrfx_saadc.c - - - - DeviceDrivers - - pin.c + nrfx_spi.c 1 - ..\..\..\components\drivers\misc\pin.c + packages\nrfx-v2.1.0\drivers\src\nrfx_spi.c - serial.c + nrfx_spim.c 1 - ..\..\..\components\drivers\serial\serial.c + packages\nrfx-v2.1.0\drivers\src\nrfx_spim.c - completion.c + nrfx_spis.c 1 - ..\..\..\components\drivers\src\completion.c + packages\nrfx-v2.1.0\drivers\src\nrfx_spis.c - dataqueue.c + nrfx_systick.c 1 - ..\..\..\components\drivers\src\dataqueue.c + packages\nrfx-v2.1.0\drivers\src\nrfx_systick.c - pipe.c + nrfx_temp.c 1 - ..\..\..\components\drivers\src\pipe.c + packages\nrfx-v2.1.0\drivers\src\nrfx_temp.c - ringblk_buf.c + nrfx_timer.c 1 - ..\..\..\components\drivers\src\ringblk_buf.c + packages\nrfx-v2.1.0\drivers\src\nrfx_timer.c - ringbuffer.c + nrfx_twi.c 1 - ..\..\..\components\drivers\src\ringbuffer.c + packages\nrfx-v2.1.0\drivers\src\nrfx_twi.c - waitqueue.c + nrfx_twi_twim.c 1 - ..\..\..\components\drivers\src\waitqueue.c + packages\nrfx-v2.1.0\drivers\src\nrfx_twi_twim.c - workqueue.c + nrfx_twim.c 1 - ..\..\..\components\drivers\src\workqueue.c + packages\nrfx-v2.1.0\drivers\src\nrfx_twim.c - - - - finsh - - shell.c + nrfx_twis.c 1 - ..\..\..\components\finsh\shell.c + packages\nrfx-v2.1.0\drivers\src\nrfx_twis.c - cmd.c + nrfx_uart.c 1 - ..\..\..\components\finsh\cmd.c + packages\nrfx-v2.1.0\drivers\src\nrfx_uart.c - msh.c + nrfx_uarte.c 1 - ..\..\..\components\finsh\msh.c + packages\nrfx-v2.1.0\drivers\src\nrfx_uarte.c - - - - libc - - libc.c + nrfx_usbd.c 1 - ..\..\..\components\libc\compilers\armlibc\libc.c + packages\nrfx-v2.1.0\drivers\src\nrfx_usbd.c - mem_std.c + nrfx_usbreg.c 1 - ..\..\..\components\libc\compilers\armlibc\mem_std.c + packages\nrfx-v2.1.0\drivers\src\nrfx_usbreg.c - stubs.c + nrfx_wdt.c 1 - ..\..\..\components\libc\compilers\armlibc\stubs.c + packages\nrfx-v2.1.0\drivers\src\nrfx_wdt.c - time.c + system_nrf52.c 1 - ..\..\..\components\libc\compilers\common\time.c + packages\nrfx-v2.1.0\mdk\system_nrf52.c + + + arm_startup_nrf52.s + 2 + packages\nrfx-v2.1.0\mdk\arm_startup_nrf52.s diff --git a/bsp/nrf5x/nrf52832/rtconfig.h b/bsp/nrf5x/nrf52832/rtconfig.h index cce968f75b..a42405872e 100644 --- a/bsp/nrf5x/nrf52832/rtconfig.h +++ b/bsp/nrf5x/nrf52832/rtconfig.h @@ -46,6 +46,9 @@ /* RT-Thread Components */ #define RT_USING_COMPONENTS_INIT +#define RT_USING_USER_MAIN +#define RT_MAIN_THREAD_STACK_SIZE 2048 +#define RT_MAIN_THREAD_PRIORITY 10 /* C++ features */ @@ -74,7 +77,6 @@ #define RT_USING_DEVICE_IPC #define RT_PIPE_BUFSZ 512 #define RT_USING_SERIAL -#define RT_SERIAL_USING_DMA #define RT_SERIAL_RB_BUFSZ 64 #define RT_USING_PIN @@ -138,6 +140,8 @@ /* peripheral libraries and drivers */ +#define PKG_USING_NRFX +#define PKG_USING_NRFX_V210 /* miscellaneous packages */ @@ -148,11 +152,25 @@ /* Hardware Drivers Config */ #define SOC_NRF52832 +#define SOC_NORDIC /* Onboard Peripheral Drivers */ + /* On-chip Peripheral Drivers */ +#define BSP_USING_GPIO #define BSP_USING_UART +#define BSP_USING_UART0 +#define BSP_UART0_RX_PIN 8 +#define BSP_UART0_TX_PIN 6 + +/* On-chip flash config */ + +#define MCU_FLASH_START_ADDRESS 0x00000000 +#define MCU_FLASH_SIZE_KB 1024 +#define MCU_SRAM_START_ADDRESS 0x20000000 +#define MCU_SRAM_SIZE_KB 256 +#define MCU_FLASH_PAGE_SIZE 0x1000 #endif diff --git a/bsp/nrf5x/nrf52832/template.uvoptx b/bsp/nrf5x/nrf52832/template.uvoptx index 7bd9338b2b..082de4487b 100644 --- a/bsp/nrf5x/nrf52832/template.uvoptx +++ b/bsp/nrf5x/nrf52832/template.uvoptx @@ -120,12 +120,12 @@ 0 JL2CM3 - -U59401765 -O78 -S2 -ZTIFSpeedSel5000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC4000 -FN2 -FF0nrf52xxx.flm -FS00 -FL0200000 -FP0($$Device:nRF52832_xxAA$Flash\nrf52xxx.flm) -FF1nrf52xxx_uicr.flm -FS110001000 -FL11000 -FP1($$Device:nRF52832_xxAA$Flash\nrf52xxx_uicr.flm) + -U682327541 -O78 -S8 -ZTIFSpeedSel50000 -A0 -C0 -JU1 -JI127.0.0.1 -JP0 -RST0 -N00("ARM CoreSight SW-DP") -D00(2BA01477) -L00(0) -TO18 -TC10000000 -TP21 -TDS8007 -TDT0 -TDC1F -TIEFFFFFFFF -TIP8 -TB1 -TFE0 -FO15 -FD20000000 -FC4000 -FN2 -FF0nrf52xxx.flm -FS00 -FL0200000 -FP0($$Device:nRF52832_xxAA$Flash\nrf52xxx.flm) -FF1nrf52xxx_uicr.flm -FS110001000 -FL11000 -FP1($$Device:nRF52832_xxAA$Flash\nrf52xxx_uicr.flm) 0 UL2CM3 - UL2CM3(-S0 -C0 -P0 -FD20000000 -FC4000 -FN2 -FF0nrf52xxx -FS00 -FL0200000 -FF1nrf52xxx_uicr -FS110001000 -FL11000 -FP0($$Device:nRF52832_xxAA$Flash\nrf52xxx.flm) -FP1($$Device:nRF52832_xxAA$Flash\nrf52xxx_uicr.flm)) + UL2CM3(-S0 -C0 -P0 ) -FN2 -FC4000 -FD20000000 -FF0nrf52xxx -FF1nrf52xxx_uicr -FL0200000 -FL11000 -FS00 -FS110001000 -FP0($$Device:nRF52832_xxAA$Flash\nrf52xxx.flm) -FP1($$Device:nRF52832_xxAA$Flash\nrf52xxx_uicr.flm) diff --git a/bsp/nrf5x/nrf52832/template.uvprojx b/bsp/nrf5x/nrf52832/template.uvprojx index 0bf64c89f2..887cfb552e 100644 --- a/bsp/nrf5x/nrf52832/template.uvprojx +++ b/bsp/nrf5x/nrf52832/template.uvprojx @@ -16,9 +16,9 @@ nRF52832_xxAA Nordic Semiconductor - NordicSemiconductor.nRF_DeviceFamilyPack.8.24.1 + NordicSemiconductor.nRF_DeviceFamilyPack.8.27.1 http://developer.nordicsemi.com/nRF5_SDK/pieces/nRF_DeviceFamilyPack/ - IRAM(0x20000000,0x10000) IROM(0x00000000,0x80000) CPUTYPE("Cortex-M4") FPU2 CLOCK(12000000) ELITTLE + IRAM(0x20000000,0x00010000) IROM(0x00000000,0x00080000) CPUTYPE("Cortex-M4") FPU2 DSP CLOCK(12000000) ELITTLE UL2CM3(-S0 -C0 -P0 -FD20000000 -FC4000 -FN2 -FF0nrf52xxx -FS00 -FL0200000 -FF1nrf52xxx_uicr -FS110001000 -FL11000 -FP0($$Device:nRF52832_xxAA$Flash\nrf52xxx.flm) -FP1($$Device:nRF52832_xxAA$Flash\nrf52xxx_uicr.flm)) @@ -274,8 +274,8 @@ 1 - 0x1f000 - 0x61000 + 0x0 + 0x80000 1 @@ -299,8 +299,8 @@ 0 - 0x200025f8 - 0xda08 + 0x20000000 + 0x10000 0 @@ -315,7 +315,7 @@ 1 0 0 - 1 + 0 0 0 0 @@ -336,7 +336,7 @@ 0 --reduce_paths - BLE_STACK_SUPPORT_REQD NRF_SD_BLE_API_VERSION=4 S132 SOFTDEVICE_PRESENT SWI_DISABLE0 CONFIG_GPIO_AS_PINRESET NRF52 NRF52832_XXAA NRF52_PAN_12 NRF52_PAN_15 NRF52_PAN_20 NRF52_PAN_31 NRF52_PAN_36 NRF52_PAN_51 NRF52_PAN_54 NRF52_PAN_55 NRF52_PAN_58 NRF52_PAN_64 NRF52_PAN_74 + @@ -354,7 +354,7 @@ 0 --cpreproc_opts=-DBLE_STACK_SUPPORT_REQD,-DNRF_SD_BLE_API_VERSION=4,-DS132,-DSOFTDEVICE_PRESENT,-DSWI_DISABLE0,-DCONFIG_GPIO_AS_PINRESET,-DNRF52,-DNRF52832_XXAA,-DNRF52_PAN_12,-DNRF52_PAN_15,-DNRF52_PAN_20,-DNRF52_PAN_31,-DNRF52_PAN_36,-DNRF52_PAN_51,-DNRF52_PAN_54,-DNRF52_PAN_55,-DNRF52_PAN_58,-DNRF52_PAN_64,-DNRF52_PAN_74 - BLE_STACK_SUPPORT_REQD NRF_SD_BLE_API_VERSION=4 S132 SOFTDEVICE_PRESENT SWI_DISABLE0 CONFIG_GPIO_AS_PINRESET NRF52 NRF52832_XXAA NRF52_PAN_12 NRF52_PAN_15 NRF52_PAN_20 NRF52_PAN_31 NRF52_PAN_36 NRF52_PAN_51 NRF52_PAN_54 NRF52_PAN_55 NRF52_PAN_58 NRF52_PAN_64 NRF52_PAN_74 + -- Gitee From ea01edb6ec79543292099d160ac7f484ef17bb1c Mon Sep 17 00:00:00 2001 From: Bernard Xiong Date: Sat, 8 Aug 2020 16:12:25 +0800 Subject: [PATCH 25/30] [BSP] Add SDRAM, LCD port files --- bsp/stm32/stm32f429-st-disco/.config | 125 +++++++++- bsp/stm32/stm32f429-st-disco/.cproject | 227 ++++++++++++++++++ bsp/stm32/stm32f429-st-disco/.project | 30 +++ .../stm32f429-st-disco/.settings/.rtmenus | Bin 0 -> 813344 bytes .../.settings/language.settings.xml | 14 ++ .../.settings/org.eclipse.core.runtime.prefs | 3 + .../stm32f429-st-disco/.settings/projcfg.ini | 9 + .../stm32f429.DAPLink.Debug.rttlaunch | 57 +++++ .../.settings/stm32f429.JLink.Debug.rttlaunch | 83 +++++++ .../.settings/stm32f429.Qemu.Debug.rttlaunch | 60 +++++ .../stm32f429.STLink.Debug.rttlaunch | 54 +++++ bsp/stm32/stm32f429-st-disco/board/Kconfig | 35 ++- bsp/stm32/stm32f429-st-disco/board/SConscript | 9 +- bsp/stm32/stm32f429-st-disco/board/board.h | 4 +- .../stm32f429-st-disco/board/ports/lcd_port.h | 32 +++ .../board/ports/sdram_port.h | 65 +++++ bsp/stm32/stm32f429-st-disco/rtconfig.h | 21 +- 17 files changed, 802 insertions(+), 26 deletions(-) create mode 100644 bsp/stm32/stm32f429-st-disco/.cproject create mode 100644 bsp/stm32/stm32f429-st-disco/.project create mode 100644 bsp/stm32/stm32f429-st-disco/.settings/.rtmenus create mode 100644 bsp/stm32/stm32f429-st-disco/.settings/language.settings.xml create mode 100644 bsp/stm32/stm32f429-st-disco/.settings/org.eclipse.core.runtime.prefs create mode 100644 bsp/stm32/stm32f429-st-disco/.settings/projcfg.ini create mode 100644 bsp/stm32/stm32f429-st-disco/.settings/stm32f429.DAPLink.Debug.rttlaunch create mode 100644 bsp/stm32/stm32f429-st-disco/.settings/stm32f429.JLink.Debug.rttlaunch create mode 100644 bsp/stm32/stm32f429-st-disco/.settings/stm32f429.Qemu.Debug.rttlaunch create mode 100644 bsp/stm32/stm32f429-st-disco/.settings/stm32f429.STLink.Debug.rttlaunch create mode 100644 bsp/stm32/stm32f429-st-disco/board/ports/lcd_port.h create mode 100644 bsp/stm32/stm32f429-st-disco/board/ports/sdram_port.h diff --git a/bsp/stm32/stm32f429-st-disco/.config b/bsp/stm32/stm32f429-st-disco/.config index aa1da65887..3bf793c118 100644 --- a/bsp/stm32/stm32f429-st-disco/.config +++ b/bsp/stm32/stm32f429-st-disco/.config @@ -42,7 +42,7 @@ CONFIG_RT_USING_MUTEX=y CONFIG_RT_USING_EVENT=y CONFIG_RT_USING_MAILBOX=y CONFIG_RT_USING_MESSAGEQUEUE=y -# CONFIG_RT_USING_SIGNALS is not set +CONFIG_RT_USING_SIGNALS=y # # Memory Management @@ -50,10 +50,9 @@ CONFIG_RT_USING_MESSAGEQUEUE=y CONFIG_RT_USING_MEMPOOL=y CONFIG_RT_USING_MEMHEAP=y # CONFIG_RT_USING_NOHEAP is not set -CONFIG_RT_USING_SMALL_MEM=y +# CONFIG_RT_USING_SMALL_MEM is not set # CONFIG_RT_USING_SLAB is not set -# CONFIG_RT_USING_MEMHEAP_AS_HEAP is not set -# CONFIG_RT_USING_MEMTRACE is not set +CONFIG_RT_USING_MEMHEAP_AS_HEAP=y CONFIG_RT_USING_HEAP=y # @@ -65,7 +64,7 @@ CONFIG_RT_USING_DEVICE=y CONFIG_RT_USING_CONSOLE=y CONFIG_RT_CONSOLEBUF_SIZE=128 CONFIG_RT_CONSOLE_DEVICE_NAME="uart1" -CONFIG_RT_VER_NUM=0x40002 +CONFIG_RT_VER_NUM=0x40003 CONFIG_ARCH_ARM=y CONFIG_RT_USING_CPU_FFS=y CONFIG_ARCH_ARM_CORTEX_M=y @@ -101,7 +100,7 @@ CONFIG_FINSH_CMD_SIZE=80 # CONFIG_FINSH_USING_AUTH is not set CONFIG_FINSH_USING_MSH=y CONFIG_FINSH_USING_MSH_DEFAULT=y -# CONFIG_FINSH_USING_MSH_ONLY is not set +CONFIG_FINSH_USING_MSH_ONLY=y CONFIG_FINSH_ARG_MAX=10 # @@ -133,9 +132,12 @@ CONFIG_RT_SERIAL_RB_BUFSZ=64 # CONFIG_RT_USING_HWTIMER is not set # CONFIG_RT_USING_CPUTIME is not set CONFIG_RT_USING_I2C=y +# CONFIG_RT_I2C_DEBUG is not set CONFIG_RT_USING_I2C_BITOPS=y +# CONFIG_RT_I2C_BITOPS_DEBUG is not set CONFIG_RT_USING_PIN=y # CONFIG_RT_USING_ADC is not set +# CONFIG_RT_USING_DAC is not set # CONFIG_RT_USING_PWM is not set # CONFIG_RT_USING_MTD_NOR is not set # CONFIG_RT_USING_MTD_NAND is not set @@ -162,7 +164,8 @@ CONFIG_RT_USING_PIN=y # POSIX layer and C standard library # CONFIG_RT_USING_LIBC=y -# CONFIG_RT_USING_PTHREADS is not set +CONFIG_RT_USING_PTHREADS=y +CONFIG_PTHREAD_NUM_MAX=8 CONFIG_RT_USING_POSIX=y # CONFIG_RT_USING_POSIX_MMAP is not set # CONFIG_RT_USING_POSIX_TERMIOS is not set @@ -213,10 +216,15 @@ CONFIG_RT_USING_POSIX=y # # IoT - internet of things # +# CONFIG_PKG_USING_LORAWAN_DRIVER is not set # CONFIG_PKG_USING_PAHOMQTT is not set +# CONFIG_PKG_USING_UMQTT is not set # CONFIG_PKG_USING_WEBCLIENT is not set # CONFIG_PKG_USING_WEBNET is not set # CONFIG_PKG_USING_MONGOOSE is not set +# CONFIG_PKG_USING_MYMQTT is not set +# CONFIG_PKG_USING_KAWAII_MQTT is not set +# CONFIG_PKG_USING_BC28_MQTT is not set # CONFIG_PKG_USING_WEBTERMINAL is not set # CONFIG_PKG_USING_CJSON is not set # CONFIG_PKG_USING_JSMN is not set @@ -243,6 +251,7 @@ CONFIG_RT_USING_POSIX=y # CONFIG_PKG_USING_COAP is not set # CONFIG_PKG_USING_NOPOLL is not set # CONFIG_PKG_USING_NETUTILS is not set +# CONFIG_PKG_USING_CMUX is not set # CONFIG_PKG_USING_PPP_DEVICE is not set # CONFIG_PKG_USING_AT_DEVICE is not set # CONFIG_PKG_USING_ATSRV_SOCKET is not set @@ -255,8 +264,10 @@ CONFIG_RT_USING_POSIX=y # CONFIG_PKG_USING_GAGENT_CLOUD is not set # CONFIG_PKG_USING_ALI_IOTKIT is not set # CONFIG_PKG_USING_AZURE is not set -# CONFIG_PKG_USING_TENCENT_IOTHUB is not set +# CONFIG_PKG_USING_TENCENT_IOT_EXPLORER is not set # CONFIG_PKG_USING_JIOT-C-SDK is not set +# CONFIG_PKG_USING_UCLOUD_IOT_SDK is not set +# CONFIG_PKG_USING_JOYLINK is not set # CONFIG_PKG_USING_NIMBLE is not set # CONFIG_PKG_USING_OTA_DOWNLOADER is not set # CONFIG_PKG_USING_IPMSG is not set @@ -268,6 +279,14 @@ CONFIG_RT_USING_POSIX=y # CONFIG_PKG_USING_ONNX_PARSER is not set # CONFIG_PKG_USING_ONNX_BACKEND is not set # CONFIG_PKG_USING_DLT645 is not set +# CONFIG_PKG_USING_QXWZ is not set +# CONFIG_PKG_USING_SMTP_CLIENT is not set +# CONFIG_PKG_USING_ABUP_FOTA is not set +# CONFIG_PKG_USING_LIBCURL2RTT is not set +# CONFIG_PKG_USING_CAPNP is not set +# CONFIG_PKG_USING_RT_CJSON_TOOLS is not set +# CONFIG_PKG_USING_AGILE_TELNET is not set +# CONFIG_PKG_USING_NMEALIB is not set # # security packages @@ -275,6 +294,8 @@ CONFIG_RT_USING_POSIX=y # CONFIG_PKG_USING_MBEDTLS is not set # CONFIG_PKG_USING_libsodium is not set # CONFIG_PKG_USING_TINYCRYPT is not set +# CONFIG_PKG_USING_TFM is not set +# CONFIG_PKG_USING_YD_CRYPTO is not set # # language packages @@ -303,6 +324,14 @@ CONFIG_RT_USING_POSIX=y # CONFIG_PKG_USING_QRCODE is not set # CONFIG_PKG_USING_ULOG_EASYFLASH is not set # CONFIG_PKG_USING_ADBD is not set +# CONFIG_PKG_USING_COREMARK is not set +# CONFIG_PKG_USING_DHRYSTONE is not set +# CONFIG_PKG_USING_NR_MICRO_SHELL is not set +# CONFIG_PKG_USING_CHINESE_FONT_LIBRARY is not set +# CONFIG_PKG_USING_LUNAR_CALENDAR is not set +# CONFIG_PKG_USING_BS8116A is not set +# CONFIG_PKG_USING_GPS_RMC is not set +# CONFIG_PKG_USING_URLENCODE is not set # # system packages @@ -314,6 +343,7 @@ CONFIG_RT_USING_POSIX=y # CONFIG_PKG_USING_LWEXT4 is not set # CONFIG_PKG_USING_PARTITION is not set # CONFIG_PKG_USING_FAL is not set +# CONFIG_PKG_USING_FLASHDB is not set # CONFIG_PKG_USING_SQLITE is not set # CONFIG_PKG_USING_RTI is not set # CONFIG_PKG_USING_LITTLEVGL2RTT is not set @@ -322,6 +352,13 @@ CONFIG_RT_USING_POSIX=y # CONFIG_PKG_USING_LITTLEFS is not set # CONFIG_PKG_USING_THREAD_POOL is not set # CONFIG_PKG_USING_ROBOTS is not set +# CONFIG_PKG_USING_EV is not set +# CONFIG_PKG_USING_SYSWATCH is not set +# CONFIG_PKG_USING_SYS_LOAD_MONITOR is not set +# CONFIG_PKG_USING_PLCCORE is not set +# CONFIG_PKG_USING_RAMDISK is not set +# CONFIG_PKG_USING_MININI is not set +# CONFIG_PKG_USING_QBOOT is not set # # peripheral libraries and drivers @@ -329,6 +366,7 @@ CONFIG_RT_USING_POSIX=y # CONFIG_PKG_USING_SENSORS_DRIVERS is not set # CONFIG_PKG_USING_REALTEK_AMEBA is not set # CONFIG_PKG_USING_SHT2X is not set +# CONFIG_PKG_USING_SHT3X is not set # CONFIG_PKG_USING_STM32_SDIO is not set # CONFIG_PKG_USING_ICM20608 is not set # CONFIG_PKG_USING_U8G2 is not set @@ -337,10 +375,16 @@ CONFIG_RT_USING_POSIX=y # CONFIG_PKG_USING_SX12XX is not set # CONFIG_PKG_USING_SIGNAL_LED is not set # CONFIG_PKG_USING_LEDBLINK is not set +# CONFIG_PKG_USING_LITTLED is not set +# CONFIG_PKG_USING_LKDGUI is not set +# CONFIG_PKG_USING_NRF5X_SDK is not set +# CONFIG_PKG_USING_NRFX is not set # CONFIG_PKG_USING_WM_LIBRARIES is not set # CONFIG_PKG_USING_KENDRYTE_SDK is not set # CONFIG_PKG_USING_INFRARED is not set # CONFIG_PKG_USING_ROSSERIAL is not set +# CONFIG_PKG_USING_AGILE_BUTTON is not set +# CONFIG_PKG_USING_AGILE_LED is not set # CONFIG_PKG_USING_AT24CXX is not set # CONFIG_PKG_USING_MOTIONDRIVER2RTT is not set # CONFIG_PKG_USING_AD7746 is not set @@ -348,9 +392,23 @@ CONFIG_RT_USING_POSIX=y # CONFIG_PKG_USING_I2C_TOOLS is not set # CONFIG_PKG_USING_NRF24L01 is not set # CONFIG_PKG_USING_TOUCH_DRIVERS is not set -# CONFIG_PKG_USING_LCD_DRIVERS is not set # CONFIG_PKG_USING_MAX17048 is not set # CONFIG_PKG_USING_RPLIDAR is not set +# CONFIG_PKG_USING_AS608 is not set +# CONFIG_PKG_USING_RC522 is not set +# CONFIG_PKG_USING_WS2812B is not set +# CONFIG_PKG_USING_EMBARC_BSP is not set +# CONFIG_PKG_USING_EXTERN_RTC_DRIVERS is not set +# CONFIG_PKG_USING_MULTI_RTIMER is not set +# CONFIG_PKG_USING_MAX7219 is not set +# CONFIG_PKG_USING_BEEP is not set +# CONFIG_PKG_USING_EASYBLINK is not set +# CONFIG_PKG_USING_PMS_SERIES is not set +# CONFIG_PKG_USING_CAN_YMODEM is not set +# CONFIG_PKG_USING_LORA_RADIO_DRIVER is not set +# CONFIG_PKG_USING_QLED is not set +# CONFIG_PKG_USING_PAJ7620 is not set +# CONFIG_PKG_USING_AGILE_CONSOLE is not set # # miscellaneous packages @@ -385,6 +443,42 @@ CONFIG_RT_USING_POSIX=y # CONFIG_PKG_USING_ELAPACK is not set # CONFIG_PKG_USING_ARMv7M_DWT is not set # CONFIG_PKG_USING_VT100 is not set +# CONFIG_PKG_USING_ULAPACK is not set +# CONFIG_PKG_USING_UKAL is not set +# CONFIG_PKG_USING_CRCLIB is not set + +# +# Privated Packages of RealThread +# +# CONFIG_PKG_USING_CODEC is not set +# CONFIG_PKG_USING_PLAYER is not set +# CONFIG_PKG_USING_MPLAYER is not set +# CONFIG_PKG_USING_PERSIMMON_SRC is not set +# CONFIG_PKG_USING_JS_PERSIMMON is not set +# CONFIG_PKG_USING_JERRYSCRIPT_WIN32 is not set + +# +# Network Utilities +# +# CONFIG_PKG_USING_WICED is not set +# CONFIG_PKG_USING_CLOUDSDK is not set +# CONFIG_PKG_USING_POWER_MANAGER is not set +# CONFIG_PKG_USING_RT_OTA is not set +# CONFIG_PKG_USING_RDBD_SRC is not set +# CONFIG_PKG_USING_RTINSIGHT is not set +# CONFIG_PKG_USING_SMARTCONFIG is not set +# CONFIG_PKG_USING_RTX is not set +# CONFIG_RT_USING_TESTCASE is not set +# CONFIG_PKG_USING_NGHTTP2 is not set +# CONFIG_PKG_USING_AVS is not set +# CONFIG_PKG_USING_ALI_LINKKIT is not set +# CONFIG_PKG_USING_STS is not set +# CONFIG_PKG_USING_DLMS is not set +# CONFIG_PKG_USING_AUDIO_FRAMEWORK is not set +# CONFIG_PKG_USING_ZBAR is not set +# CONFIG_PKG_USING_MCF is not set +# CONFIG_PKG_USING_URPC is not set +# CONFIG_PKG_USING_BSAL is not set CONFIG_SOC_FAMILY_STM32=y CONFIG_SOC_SERIES_STM32F4=y @@ -393,6 +487,11 @@ CONFIG_SOC_SERIES_STM32F4=y # CONFIG_SOC_STM32F429ZI=y +# +# Onboard Peripheral Drivers +# +CONFIG_BSP_USING_SDRAM=y + # # On-chip Peripheral Drivers # @@ -400,12 +499,14 @@ CONFIG_BSP_USING_GPIO=y CONFIG_BSP_USING_UART=y CONFIG_BSP_USING_UART1=y # CONFIG_BSP_UART1_RX_USING_DMA is not set +# CONFIG_BSP_USING_UART2 is not set # CONFIG_BSP_USING_I2C1 is not set # CONFIG_BSP_USING_SPI is not set # CONFIG_BSP_USING_QSPI is not set -# CONFIG_BSP_USING_FMC is not set -# CONFIG_BSP_USING_USBD_FS is not set -# CONFIG_BSP_USING_LTDC is not set +CONFIG_BSP_USING_FMC=y +# CONFIG_BSP_USING_USBD is not set +CONFIG_BSP_USING_LCD=y +CONFIG_BSP_USING_LTDC=y # CONFIG_BSP_USING_RNG is not set # CONFIG_BSP_USING_UDID is not set diff --git a/bsp/stm32/stm32f429-st-disco/.cproject b/bsp/stm32/stm32f429-st-disco/.cproject new file mode 100644 index 0000000000..f753c0fb4c --- /dev/null +++ b/bsp/stm32/stm32f429-st-disco/.cproject @@ -0,0 +1,227 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/stm32/stm32f429-st-disco/.project b/bsp/stm32/stm32f429-st-disco/.project new file mode 100644 index 0000000000..f8150396f5 --- /dev/null +++ b/bsp/stm32/stm32f429-st-disco/.project @@ -0,0 +1,30 @@ + + + stm32f429 + + + + + + org.eclipse.cdt.managedbuilder.core.genmakebuilder + clean,full,incremental, + + + + + org.eclipse.cdt.managedbuilder.core.ScannerConfigBuilder + full,incremental, + + + + + + org.eclipse.cdt.core.cnature + org.eclipse.cdt.core.ccnature + org.rt-thread.studio.rttnature + org.eclipse.cdt.managedbuilder.core.managedBuildNature + org.eclipse.cdt.managedbuilder.core.ScannerConfigNature + + + + diff --git a/bsp/stm32/stm32f429-st-disco/.settings/.rtmenus b/bsp/stm32/stm32f429-st-disco/.settings/.rtmenus new file mode 100644 index 0000000000000000000000000000000000000000..da3a12f5e7568f633bd4529d437671559b4f061b GIT binary patch literal 813344 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

+T0}`2?H=LE5#Mat*e9y|-;<1^>m@j>| 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™ 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
go% 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

7xD}9rhNf?;yAN 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 + + + + + + + + + + + + + diff --git a/bsp/stm32/stm32f429-st-disco/.settings/org.eclipse.core.runtime.prefs b/bsp/stm32/stm32f429-st-disco/.settings/org.eclipse.core.runtime.prefs new file mode 100644 index 0000000000..b36aae6fb2 --- /dev/null +++ b/bsp/stm32/stm32f429-st-disco/.settings/org.eclipse.core.runtime.prefs @@ -0,0 +1,3 @@ +content-types/enabled=true +content-types/org.eclipse.cdt.core.asmSource/file-extensions=s +eclipse.preferences.version=1 diff --git a/bsp/stm32/stm32f429-st-disco/.settings/projcfg.ini b/bsp/stm32/stm32f429-st-disco/.settings/projcfg.ini new file mode 100644 index 0000000000..9ae064cb86 --- /dev/null +++ b/bsp/stm32/stm32f429-st-disco/.settings/projcfg.ini @@ -0,0 +1,9 @@ +#RT-Thread Studio Project Configuration +#Thu Aug 06 07:31:27 CST 2020 +qemu_supported_board=stm32f429-st-disco +mcu_name=STM32F429ZI +hardware_adapter=QEMU +selected_rtt_version=latest +mcu_base_nano_proj=true +project_base_bsp=true +cfg_version=v2.0 diff --git a/bsp/stm32/stm32f429-st-disco/.settings/stm32f429.DAPLink.Debug.rttlaunch b/bsp/stm32/stm32f429-st-disco/.settings/stm32f429.DAPLink.Debug.rttlaunch new file mode 100644 index 0000000000..28087044b2 --- /dev/null +++ b/bsp/stm32/stm32f429-st-disco/.settings/stm32f429.DAPLink.Debug.rttlaunch @@ -0,0 +1,57 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/stm32/stm32f429-st-disco/.settings/stm32f429.JLink.Debug.rttlaunch b/bsp/stm32/stm32f429-st-disco/.settings/stm32f429.JLink.Debug.rttlaunch new file mode 100644 index 0000000000..5630a7d174 --- /dev/null +++ b/bsp/stm32/stm32f429-st-disco/.settings/stm32f429.JLink.Debug.rttlaunch @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/stm32/stm32f429-st-disco/.settings/stm32f429.Qemu.Debug.rttlaunch b/bsp/stm32/stm32f429-st-disco/.settings/stm32f429.Qemu.Debug.rttlaunch new file mode 100644 index 0000000000..484ce87d65 --- /dev/null +++ b/bsp/stm32/stm32f429-st-disco/.settings/stm32f429.Qemu.Debug.rttlaunch @@ -0,0 +1,60 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/stm32/stm32f429-st-disco/.settings/stm32f429.STLink.Debug.rttlaunch b/bsp/stm32/stm32f429-st-disco/.settings/stm32f429.STLink.Debug.rttlaunch new file mode 100644 index 0000000000..1cea70c74d --- /dev/null +++ b/bsp/stm32/stm32f429-st-disco/.settings/stm32f429.STLink.Debug.rttlaunch @@ -0,0 +1,54 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bsp/stm32/stm32f429-st-disco/board/Kconfig b/bsp/stm32/stm32f429-st-disco/board/Kconfig index 20b1a98ab3..a8b5bf80d6 100644 --- a/bsp/stm32/stm32f429-st-disco/board/Kconfig +++ b/bsp/stm32/stm32f429-st-disco/board/Kconfig @@ -7,7 +7,17 @@ config SOC_STM32F429ZI select RT_USING_USER_MAIN default y +menu "Onboard Peripheral Drivers" + + config BSP_USING_SDRAM + bool "Enable SDRAM" + select BSP_USING_FMC + default n + +endmenu + menu "On-chip Peripheral Drivers" + config BSP_USING_GPIO bool "Enable GPIO" select RT_USING_PIN @@ -15,8 +25,8 @@ menu "On-chip Peripheral Drivers" menuconfig BSP_USING_UART bool "Enable UART" - select RT_USING_SERIAL default y + select RT_USING_SERIAL if BSP_USING_UART config BSP_USING_UART1 bool "Enable UART1" @@ -26,15 +36,25 @@ menu "On-chip Peripheral Drivers" bool "Enable UART1 RX DMA" depends on BSP_USING_UART1 && RT_SERIAL_USING_DMA default n + + config BSP_USING_UART2 + bool "Enable UART2" + default n + + config BSP_UART2_RX_USING_DMA + bool "Enable UART2 RX DMA" + depends on BSP_USING_UART2 && RT_SERIAL_USING_DMA + default n + endif menuconfig BSP_USING_I2C1 bool "Enable I2C1 BUS (software simulation)" + default n select RT_USING_I2C select RT_USING_I2C_BITOPS select RT_USING_PIN - default n - if BSP_USING_I2C1 + if BSP_USING_I2C1 config BSP_I2C1_SCL_PIN int "I2C1 scl pin number" range 1 176 @@ -81,11 +101,18 @@ menu "On-chip Peripheral Drivers" select RT_USING_USB_DEVICE default n + config BSP_USING_LCD + bool "Enable LCD" + default n + config BSP_USING_LTDC bool "Enable LTDC" + select BSP_USING_SDRAM + select BSP_USING_LCD default n + source "../libraries/HAL_Drivers/Kconfig" - + endmenu menu "Board extended module Drivers" diff --git a/bsp/stm32/stm32f429-st-disco/board/SConscript b/bsp/stm32/stm32f429-st-disco/board/SConscript index ebaa566f5c..5034629509 100644 --- a/bsp/stm32/stm32f429-st-disco/board/SConscript +++ b/bsp/stm32/stm32f429-st-disco/board/SConscript @@ -17,16 +17,13 @@ if GetDepend(['BSP_USING_QSPI_FLASH']): if GetDepend(['PKG_USING_FAL']): src += ['ports/qspi_mnt.c'] - -if GetDepend(['BSP_USING_LCD_OTM8009A']): - src += ['ports/drv_otm8009a.c'] - + if GetDepend(['BSP_USING_TOUCH']): src += Glob('ports/touch/*.c') - + if GetDepend(['BSP_USING_SDCARD']): src += ['ports/drv_sdcard.c'] - + if GetDepend(['BSP_USING_QSPI']): src += ['ports/drv_qspi_flash.c'] diff --git a/bsp/stm32/stm32f429-st-disco/board/board.h b/bsp/stm32/stm32f429-st-disco/board/board.h index 47e439a260..69e3eb1fac 100644 --- a/bsp/stm32/stm32f429-st-disco/board/board.h +++ b/bsp/stm32/stm32f429-st-disco/board/board.h @@ -25,8 +25,8 @@ extern "C" { #define STM32_FLASH_SIZE (2048 * 1024) #define STM32_FLASH_END_ADDRESS ((uint32_t)(STM32_FLASH_START_ADRESS + STM32_FLASH_SIZE)) -#define STM32_SRAM_SIZE (256 - 64) -#define STM32_SRAM_END (0x20000000 + STM32_SRAM_SIZE * 1024) +#define STM32_SRAM_SIZE (256 - 64) +#define STM32_SRAM_END (0x20000000 + STM32_SRAM_SIZE * 1024) #if defined(__CC_ARM) || defined(__CLANG_ARM) extern int Image$$RW_IRAM1$$ZI$$Limit; diff --git a/bsp/stm32/stm32f429-st-disco/board/ports/lcd_port.h b/bsp/stm32/stm32f429-st-disco/board/ports/lcd_port.h new file mode 100644 index 0000000000..d8605bf613 --- /dev/null +++ b/bsp/stm32/stm32f429-st-disco/board/ports/lcd_port.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2020-08-08 bernard The first version for STM32F429 DISCO + */ + +#ifndef __LCD_PORT_H__ +#define __LCD_PORT_H__ + +/* 240 * 320 */ +#define LCD_WIDTH 240 +#define LCD_HEIGHT 320 +#define LCD_BITS_PER_PIXEL 16 +#define LCD_BUF_SIZE (LCD_WIDTH * LCD_HEIGHT * LCD_BITS_PER_PIXEL / 8) +#define LCD_PIXEL_FORMAT RTGRAPHIC_PIXEL_FORMAT_RGB565 + +#define LCD_HSYNC_WIDTH 2 +#define LCD_VSYNC_HEIGHT 2 +#define LCD_HBP 46 +#define LCD_VBP 23 +#define LCD_HFP 22 +#define LCD_VFP 22 + +#define LCD_BACKLIGHT_USING_GPIO +#define LCD_BL_GPIO_NUM GET_PIN(D, 7) +#define LCD_DISP_GPIO_NUM GET_PIN(D, 4) + +#endif /* __LCD_PORT_H__ */ diff --git a/bsp/stm32/stm32f429-st-disco/board/ports/sdram_port.h b/bsp/stm32/stm32f429-st-disco/board/ports/sdram_port.h new file mode 100644 index 0000000000..77c80f58ff --- /dev/null +++ b/bsp/stm32/stm32f429-st-disco/board/ports/sdram_port.h @@ -0,0 +1,65 @@ +/* + * Copyright (c) 2006-2018, RT-Thread Development Team + * + * SPDX-License-Identifier: Apache-2.0 + * + * Change Logs: + * Date Author Notes + * 2020-08-08 bernard The first version for STM32F429 DISCO + */ + +#ifndef __SDRAM_PORT_H__ +#define __SDRAM_PORT_H__ + +/* parameters for sdram peripheral */ +/* Bank1 or Bank2 */ +#define SDRAM_TARGET_BANK 2 +/* stm32f4 Bank1:0XC0000000 Bank2:0XD0000000 */ +#define SDRAM_BANK_ADDR ((uint32_t)0XD0000000) +/* data width: 8, 16, 32 */ +#define SDRAM_DATA_WIDTH 16 +/* column bit numbers: 8, 9, 10, 11 */ +#define SDRAM_COLUMN_BITS 8 +/* row bit numbers: 11, 12, 13 */ +#define SDRAM_ROW_BITS 12 +/* cas latency clock number: 1, 2, 3 */ +#define SDRAM_CAS_LATENCY 3 +/* read pipe delay: 0, 1, 2 */ +#define SDRAM_RPIPE_DELAY 1 +/* clock divid: 2, 3 */ +#define SDCLOCK_PERIOD 2 +/* refresh rate counter */ +#define SDRAM_REFRESH_COUNT ((uint32_t)0x056A) +#define SDRAM_SIZE ((uint32_t)0x800000) + +/* Timing configuration for IS42S16400J */ +/* 90 MHz of SD clock frequency (180MHz/2) */ +/* TMRD: 2 Clock cycles */ +#define LOADTOACTIVEDELAY 2 +/* TXSR: 7x11.90ns */ +#define EXITSELFREFRESHDELAY 7 +/* TRAS: 4x11.90ns */ +#define SELFREFRESHTIME 4 +/* TRC: 7x11.90ns */ +#define ROWCYCLEDELAY 7 +/* TWR: 2 Clock cycles */ +#define WRITERECOVERYTIME 2 +/* TRP: 2x11.90ns */ +#define RPDELAY 2 +/* TRCD: 2x11.90ns */ +#define RCDDELAY 2 + +/* memory mode register */ +#define SDRAM_MODEREG_BURST_LENGTH_1 ((uint16_t)0x0000) +#define SDRAM_MODEREG_BURST_LENGTH_2 ((uint16_t)0x0001) +#define SDRAM_MODEREG_BURST_LENGTH_4 ((uint16_t)0x0002) +#define SDRAM_MODEREG_BURST_LENGTH_8 ((uint16_t)0x0004) +#define SDRAM_MODEREG_BURST_TYPE_SEQUENTIAL ((uint16_t)0x0000) +#define SDRAM_MODEREG_BURST_TYPE_INTERLEAVED ((uint16_t)0x0008) +#define SDRAM_MODEREG_CAS_LATENCY_2 ((uint16_t)0x0020) +#define SDRAM_MODEREG_CAS_LATENCY_3 ((uint16_t)0x0030) +#define SDRAM_MODEREG_OPERATING_MODE_STANDARD ((uint16_t)0x0000) +#define SDRAM_MODEREG_WRITEBURST_MODE_PROGRAMMED ((uint16_t)0x0000) +#define SDRAM_MODEREG_WRITEBURST_MODE_SINGLE ((uint16_t)0x0200) + +#endif diff --git a/bsp/stm32/stm32f429-st-disco/rtconfig.h b/bsp/stm32/stm32f429-st-disco/rtconfig.h index 2837c2f767..b4710ef924 100644 --- a/bsp/stm32/stm32f429-st-disco/rtconfig.h +++ b/bsp/stm32/stm32f429-st-disco/rtconfig.h @@ -26,12 +26,13 @@ #define RT_USING_EVENT #define RT_USING_MAILBOX #define RT_USING_MESSAGEQUEUE +#define RT_USING_SIGNALS /* Memory Management */ #define RT_USING_MEMPOOL #define RT_USING_MEMHEAP -#define RT_USING_SMALL_MEM +#define RT_USING_MEMHEAP_AS_HEAP #define RT_USING_HEAP /* Kernel Device Object */ @@ -40,7 +41,7 @@ #define RT_USING_CONSOLE #define RT_CONSOLEBUF_SIZE 128 #define RT_CONSOLE_DEVICE_NAME "uart1" -#define RT_VER_NUM 0x40002 +#define RT_VER_NUM 0x40003 #define ARCH_ARM #define RT_USING_CPU_FFS #define ARCH_ARM_CORTEX_M @@ -69,6 +70,7 @@ #define FINSH_CMD_SIZE 80 #define FINSH_USING_MSH #define FINSH_USING_MSH_DEFAULT +#define FINSH_USING_MSH_ONLY #define FINSH_ARG_MAX 10 /* Device virtual file system */ @@ -97,6 +99,8 @@ /* POSIX layer and C standard library */ #define RT_USING_LIBC +#define RT_USING_PTHREADS +#define PTHREAD_NUM_MAX 8 #define RT_USING_POSIX /* Network */ @@ -158,6 +162,12 @@ /* samples: kernel and components samples */ + +/* Privated Packages of RealThread */ + + +/* Network Utilities */ + #define SOC_FAMILY_STM32 #define SOC_SERIES_STM32F4 @@ -165,11 +175,18 @@ #define SOC_STM32F429ZI +/* Onboard Peripheral Drivers */ + +#define BSP_USING_SDRAM + /* On-chip Peripheral Drivers */ #define BSP_USING_GPIO #define BSP_USING_UART #define BSP_USING_UART1 +#define BSP_USING_FMC +#define BSP_USING_LCD +#define BSP_USING_LTDC /* Board extended module Drivers */ -- Gitee From 5e92521e0d0e6f73cafe5fe8b5c2e7e0d852863e Mon Sep 17 00:00:00 2001 From: Meco <920369182@qq.com> Date: Mon, 10 Aug 2020 04:35:08 +0800 Subject: [PATCH 26/30] =?UTF-8?q?struct=20rt=5Fdevice=5Fops=20=E7=BB=93?= =?UTF-8?q?=E6=9E=84=E4=BD=93=E5=A2=9E=E5=8A=A0=E5=AE=8F=E5=AE=9A=E4=B9=89?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- include/rtdef.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/include/rtdef.h b/include/rtdef.h index 747643bb82..5543b80ab7 100644 --- a/include/rtdef.h +++ b/include/rtdef.h @@ -32,6 +32,7 @@ * 2019-01-27 Bernard change version number to v4.0.1 * 2019-05-17 Bernard change version number to v4.0.2 * 2019-12-20 Bernard change version number to v4.0.3 + * 2020-08-10 Meco Man add macro for struct rt_device_ops */ #ifndef __RT_DEF_H__ @@ -920,6 +921,8 @@ enum rt_device_class_type #define RT_DEVICE_CTRL_RTC_SET_ALARM 0x13 /**< set alarm */ typedef struct rt_device *rt_device_t; + +#ifdef RT_USING_DEVICE_OPS /** * operations set for device object */ @@ -933,6 +936,7 @@ struct rt_device_ops rt_size_t (*write) (rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size); rt_err_t (*control)(rt_device_t dev, int cmd, void *args); }; +#endif /** * WaitQueue structure -- Gitee From e548b77da07d7eb184de1464b1e259cd3b5a023f Mon Sep 17 00:00:00 2001 From: nongxiaoming Date: Tue, 11 Aug 2020 13:21:27 +0800 Subject: [PATCH 27/30] [bsp] stm32:fix the lcd driver for stm32f429 discovery board. --- bsp/stm32/stm32f429-st-disco/board/SConscript | 3 + bsp/stm32/stm32f429-st-disco/board/board.c | 17 +- .../stm32f429-st-disco/board/ports/ili9341.c | 313 ++++++++++++++++++ .../stm32f429-st-disco/board/ports/ili9341.h | 145 ++++++++ .../stm32f429-st-disco/board/ports/lcd_port.h | 10 +- 5 files changed, 476 insertions(+), 12 deletions(-) create mode 100644 bsp/stm32/stm32f429-st-disco/board/ports/ili9341.c create mode 100644 bsp/stm32/stm32f429-st-disco/board/ports/ili9341.h diff --git a/bsp/stm32/stm32f429-st-disco/board/SConscript b/bsp/stm32/stm32f429-st-disco/board/SConscript index 5034629509..55924547ec 100644 --- a/bsp/stm32/stm32f429-st-disco/board/SConscript +++ b/bsp/stm32/stm32f429-st-disco/board/SConscript @@ -27,6 +27,9 @@ if GetDepend(['BSP_USING_SDCARD']): if GetDepend(['BSP_USING_QSPI']): src += ['ports/drv_qspi_flash.c'] +if GetDepend(['BSP_USING_LCD']): + src += ['ports/ili9341.c'] + path = [cwd] path += [cwd + '/CubeMX_Config/Inc'] path += [cwd + '/ports'] diff --git a/bsp/stm32/stm32f429-st-disco/board/board.c b/bsp/stm32/stm32f429-st-disco/board/board.c index ca12c3724e..0abc70267a 100644 --- a/bsp/stm32/stm32f429-st-disco/board/board.c +++ b/bsp/stm32/stm32f429-st-disco/board/board.c @@ -48,12 +48,15 @@ void SystemClock_Config(void) { Error_Handler(); } + /*##-2- LTDC Clock Configuration ###########################################*/ + /* LCD clock configuration */ + /* PLLSAI_VCO Input = HSE_VALUE/PLL_M = 1 MHz */ + /* PLLSAI_VCO Output = PLLSAI_VCO Input * PLLSAIN = 192 MHz */ + /* PLLLCDCLK = PLLSAI_VCO Output/PLLSAIR = 192/4 = 48 MHz */ + /* LTDC clock frequency = PLLLCDCLK / RCC_PLLSAIDIVR_8 = 48/8 = 6 MHz */ PeriphClkInitStruct.PeriphClockSelection = RCC_PERIPHCLK_LTDC; - PeriphClkInitStruct.PLLSAI.PLLSAIN = 50; - PeriphClkInitStruct.PLLSAI.PLLSAIR = 2; - PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_2; - if (HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct) != HAL_OK) - { - Error_Handler(); - } + PeriphClkInitStruct.PLLSAI.PLLSAIN = 192; + PeriphClkInitStruct.PLLSAI.PLLSAIR = 4; + PeriphClkInitStruct.PLLSAIDivR = RCC_PLLSAIDIVR_8; + HAL_RCCEx_PeriphCLKConfig(&PeriphClkInitStruct); } diff --git a/bsp/stm32/stm32f429-st-disco/board/ports/ili9341.c b/bsp/stm32/stm32f429-st-disco/board/ports/ili9341.c new file mode 100644 index 0000000000..3829193b5c --- /dev/null +++ b/bsp/stm32/stm32f429-st-disco/board/ports/ili9341.c @@ -0,0 +1,313 @@ +/* + * File : ili9341.c + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2020, RT-Thread Development Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Change Logs: + * Date Author Notes + * 2020-08-11 RT-Thread the first version + */ +#include "rtthread.h" +#include "stm32f4xx_hal.h" +#include "ili9341.h" + +/** + * @brief LCD Control pin + */ +#define LCD_NCS_PIN GPIO_PIN_2 +#define LCD_NCS_GPIO_PORT GPIOC +#define LCD_NCS_GPIO_CLK_ENABLE() __HAL_RCC_GPIOC_CLK_ENABLE() +#define LCD_NCS_GPIO_CLK_DISABLE() __HAL_RCC_GPIOC_CLK_DISABLE() + +/** + * @brief LCD Command/data pin + */ +#define LCD_WRX_PIN GPIO_PIN_13 +#define LCD_WRX_GPIO_PORT GPIOD +#define LCD_WRX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() +#define LCD_WRX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() + +#define LCD_RDX_PIN GPIO_PIN_12 +#define LCD_RDX_GPIO_PORT GPIOD +#define LCD_RDX_GPIO_CLK_ENABLE() __HAL_RCC_GPIOD_CLK_ENABLE() +#define LCD_RDX_GPIO_CLK_DISABLE() __HAL_RCC_GPIOD_CLK_DISABLE() + +/* Maximum Timeout values for flags waiting loops */ +#define SPIx_TIMEOUT_MAX ((uint32_t)0x1000) + +/* Chip Select macro definition */ +#define LCD_CS_LOW() HAL_GPIO_WritePin(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, GPIO_PIN_RESET) +#define LCD_CS_HIGH() HAL_GPIO_WritePin(LCD_NCS_GPIO_PORT, LCD_NCS_PIN, GPIO_PIN_SET) + +/* Set WRX High to send data */ +#define LCD_WRX_LOW() HAL_GPIO_WritePin(LCD_WRX_GPIO_PORT, LCD_WRX_PIN, GPIO_PIN_RESET) +#define LCD_WRX_HIGH() HAL_GPIO_WritePin(LCD_WRX_GPIO_PORT, LCD_WRX_PIN, GPIO_PIN_SET) + +/* Set WRX High to send data */ +#define LCD_RDX_LOW() HAL_GPIO_WritePin(LCD_RDX_GPIO_PORT, LCD_RDX_PIN, GPIO_PIN_RESET) +#define LCD_RDX_HIGH() HAL_GPIO_WritePin(LCD_RDX_GPIO_PORT, LCD_RDX_PIN, GPIO_PIN_SET) + +static uint8_t Is_LCD_IO_Initialized = 0; +static SPI_HandleTypeDef SpiHandle; + +/** + * @brief SPIx Bus initialization + */ +static void SPIx_Init(void) +{ + if(HAL_SPI_GetState(&SpiHandle) == HAL_SPI_STATE_RESET) + { + /* SPI configuration -----------------------------------------------------*/ + SpiHandle.Instance = SPI5; + /* SPI baudrate is set to 5.6 MHz (PCLK2/SPI_BaudRatePrescaler = 90/16 = 5.625 MHz) + */ + SpiHandle.Init.BaudRatePrescaler = SPI_BAUDRATEPRESCALER_16; + + /* On STM32F429I-Discovery, LCD ID cannot be read then keep a common configuration */ + /* for LCD and GYRO (SPI_DIRECTION_2LINES) */ + /* Note: To read a register a LCD, SPI_DIRECTION_1LINE should be set */ + SpiHandle.Init.Direction = SPI_DIRECTION_2LINES; + SpiHandle.Init.CLKPhase = SPI_PHASE_1EDGE; + SpiHandle.Init.CLKPolarity = SPI_POLARITY_LOW; + SpiHandle.Init.CRCCalculation = SPI_CRCCALCULATION_DISABLED; + SpiHandle.Init.CRCPolynomial = 7; + SpiHandle.Init.DataSize = SPI_DATASIZE_8BIT; + SpiHandle.Init.FirstBit = SPI_FIRSTBIT_MSB; + SpiHandle.Init.NSS = SPI_NSS_SOFT; + SpiHandle.Init.TIMode = SPI_TIMODE_DISABLED; + SpiHandle.Init.Mode = SPI_MODE_MASTER; + + HAL_SPI_Init(&SpiHandle); + } +} + +/** + * @brief Configures the LCD_SPI interface. + */ +static void LCD_GPIO_Init(void) +{ + GPIO_InitTypeDef GPIO_InitStructure; + + if(Is_LCD_IO_Initialized == 0) + { + Is_LCD_IO_Initialized = 1; + + /* Configure NCS in Output Push-Pull mode */ + LCD_WRX_GPIO_CLK_ENABLE(); + GPIO_InitStructure.Pin = LCD_WRX_PIN; + GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStructure.Pull = GPIO_NOPULL; + GPIO_InitStructure.Speed = GPIO_SPEED_FAST; + HAL_GPIO_Init(LCD_WRX_GPIO_PORT, &GPIO_InitStructure); + + LCD_RDX_GPIO_CLK_ENABLE(); + GPIO_InitStructure.Pin = LCD_RDX_PIN; + GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStructure.Pull = GPIO_NOPULL; + GPIO_InitStructure.Speed = GPIO_SPEED_FAST; + HAL_GPIO_Init(LCD_RDX_GPIO_PORT, &GPIO_InitStructure); + + /* Configure the LCD Control pins ----------------------------------------*/ + LCD_NCS_GPIO_CLK_ENABLE(); + + /* Configure NCS in Output Push-Pull mode */ + GPIO_InitStructure.Pin = LCD_NCS_PIN; + GPIO_InitStructure.Mode = GPIO_MODE_OUTPUT_PP; + GPIO_InitStructure.Pull = GPIO_NOPULL; + GPIO_InitStructure.Speed = GPIO_SPEED_FAST; + HAL_GPIO_Init(LCD_NCS_GPIO_PORT, &GPIO_InitStructure); + + /* Set or Reset the control line */ + LCD_CS_LOW(); + LCD_CS_HIGH(); + + SPIx_Init(); + } +} + +/** + * @brief Writes data to the selected LCD register. + * @param data: data to lcd. + * @retval None + */ +static void ili9341_write_data(uint16_t data) +{ + /* Set WRX to send data */ + LCD_WRX_HIGH(); + + /* Reset LCD control line(/CS) and Send data */ + LCD_CS_LOW(); + + HAL_SPI_Transmit(&SpiHandle, (uint8_t*) &data, 1, SPIx_TIMEOUT_MAX); + + /* Deselect: Chip Select high */ + LCD_CS_HIGH(); +} + +/** + * @brief Writes to the selected LCD register. + * @param reg: address of the selected register. + * @retval None + */ +static void ili9341_write_register(uint8_t reg) +{ + /* Reset WRX to send command */ + LCD_WRX_LOW(); + + /* Reset LCD control line(/CS) and Send command */ + LCD_CS_LOW(); + + HAL_SPI_Transmit(&SpiHandle, (uint8_t*) ®, 1, SPIx_TIMEOUT_MAX); + + /* Deselect: Chip Select high */ + LCD_CS_HIGH(); +} + +/** + * @brief Power on the LCD. + * @param None + * @retval int + */ +int ili9341_hw_init(void) +{ + /* Initialize ILI9341 low level bus layer ----------------------------------*/ + LCD_GPIO_Init(); + + /* Configure LCD */ + ili9341_write_register(0xCA); + ili9341_write_data(0xC3); + ili9341_write_data(0x08); + ili9341_write_data(0x50); + ili9341_write_register(LCD_POWERB); + ili9341_write_data(0x00); + ili9341_write_data(0xC1); + ili9341_write_data(0x30); + ili9341_write_register(LCD_POWER_SEQ); + ili9341_write_data(0x64); + ili9341_write_data(0x03); + ili9341_write_data(0x12); + ili9341_write_data(0x81); + ili9341_write_register(LCD_DTCA); + ili9341_write_data(0x85); + ili9341_write_data(0x00); + ili9341_write_data(0x78); + ili9341_write_register(LCD_POWERA); + ili9341_write_data(0x39); + ili9341_write_data(0x2C); + ili9341_write_data(0x00); + ili9341_write_data(0x34); + ili9341_write_data(0x02); + ili9341_write_register(LCD_PRC); + ili9341_write_data(0x20); + ili9341_write_register(LCD_DTCB); + ili9341_write_data(0x00); + ili9341_write_data(0x00); + ili9341_write_register(LCD_FRMCTR1); + ili9341_write_data(0x00); + ili9341_write_data(0x1B); + ili9341_write_register(LCD_DFC); + ili9341_write_data(0x0A); + ili9341_write_data(0xA2); + ili9341_write_register(LCD_POWER1); + ili9341_write_data(0x10); + ili9341_write_register(LCD_POWER2); + ili9341_write_data(0x10); + ili9341_write_register(LCD_VCOM1); + ili9341_write_data(0x45); + ili9341_write_data(0x15); + ili9341_write_register(LCD_VCOM2); + ili9341_write_data(0x90); + ili9341_write_register(LCD_MAC); + ili9341_write_data(0xC8); + ili9341_write_register(LCD_3GAMMA_EN); + ili9341_write_data(0x00); + ili9341_write_register(LCD_RGB_INTERFACE); + ili9341_write_data(0xC2); + ili9341_write_register(LCD_DFC); + ili9341_write_data(0x0A); + ili9341_write_data(0xA7); + ili9341_write_data(0x27); + ili9341_write_data(0x04); + + /* Colomn address set */ + ili9341_write_register(LCD_COLUMN_ADDR); + ili9341_write_data(0x00); + ili9341_write_data(0x00); + ili9341_write_data(0x00); + ili9341_write_data(0xEF); + /* Page address set */ + ili9341_write_register(LCD_PAGE_ADDR); + ili9341_write_data(0x00); + ili9341_write_data(0x00); + ili9341_write_data(0x01); + ili9341_write_data(0x3F); + ili9341_write_register(LCD_INTERFACE); + ili9341_write_data(0x01); + ili9341_write_data(0x00); + ili9341_write_data(0x06); + + ili9341_write_register(LCD_GRAM); + rt_thread_mdelay(20); + + ili9341_write_register(LCD_GAMMA); + ili9341_write_data(0x01); + + ili9341_write_register(LCD_PGAMMA); + ili9341_write_data(0x0F); + ili9341_write_data(0x29); + ili9341_write_data(0x24); + ili9341_write_data(0x0C); + ili9341_write_data(0x0E); + ili9341_write_data(0x09); + ili9341_write_data(0x4E); + ili9341_write_data(0x78); + ili9341_write_data(0x3C); + ili9341_write_data(0x09); + ili9341_write_data(0x13); + ili9341_write_data(0x05); + ili9341_write_data(0x17); + ili9341_write_data(0x11); + ili9341_write_data(0x00); + ili9341_write_register(LCD_NGAMMA); + ili9341_write_data(0x00); + ili9341_write_data(0x16); + ili9341_write_data(0x1B); + ili9341_write_data(0x04); + ili9341_write_data(0x11); + ili9341_write_data(0x07); + ili9341_write_data(0x31); + ili9341_write_data(0x33); + ili9341_write_data(0x42); + ili9341_write_data(0x05); + ili9341_write_data(0x0C); + ili9341_write_data(0x0A); + ili9341_write_data(0x28); + ili9341_write_data(0x2F); + ili9341_write_data(0x0F); + + ili9341_write_register(LCD_SLEEP_OUT); + rt_thread_mdelay(20); + ili9341_write_register(LCD_DISPLAY_ON); + /* GRAM start writing */ + ili9341_write_register(LCD_GRAM); + + return 0; +} +INIT_DEVICE_EXPORT(ili9341_hw_init); + + + diff --git a/bsp/stm32/stm32f429-st-disco/board/ports/ili9341.h b/bsp/stm32/stm32f429-st-disco/board/ports/ili9341.h new file mode 100644 index 0000000000..b4c59e6ffa --- /dev/null +++ b/bsp/stm32/stm32f429-st-disco/board/ports/ili9341.h @@ -0,0 +1,145 @@ +/* + * File : ili9341.h + * This file is part of RT-Thread RTOS + * COPYRIGHT (C) 2020, RT-Thread Development Team + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along + * with this program; if not, write to the Free Software Foundation, Inc., + * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. + * + * Change Logs: + * Date Author Notes + * 2020-08-11 RT-Thread the first version + */ +#ifndef __ILI9341_H +#define __ILI9341_H + +#ifdef __cplusplus + extern "C" { +#endif + + +/** + * @brief ILI9341 chip IDs + */ +#define ILI9341_ID 0x9341 + +/** + * @brief ILI9341 Registers + */ + +/* Level 1 Commands */ +#define LCD_SWRESET 0x01 /* Software Reset */ +#define LCD_READ_DISPLAY_ID 0x04 /* Read display identification information */ +#define LCD_RDDST 0x09 /* Read Display Status */ +#define LCD_RDDPM 0x0A /* Read Display Power Mode */ +#define LCD_RDDMADCTL 0x0B /* Read Display MADCTL */ +#define LCD_RDDCOLMOD 0x0C /* Read Display Pixel Format */ +#define LCD_RDDIM 0x0D /* Read Display Image Format */ +#define LCD_RDDSM 0x0E /* Read Display Signal Mode */ +#define LCD_RDDSDR 0x0F /* Read Display Self-Diagnostic Result */ +#define LCD_SPLIN 0x10 /* Enter Sleep Mode */ +#define LCD_SLEEP_OUT 0x11 /* Sleep out register */ +#define LCD_PTLON 0x12 /* Partial Mode ON */ +#define LCD_NORMAL_MODE_ON 0x13 /* Normal Display Mode ON */ +#define LCD_DINVOFF 0x20 /* Display Inversion OFF */ +#define LCD_DINVON 0x21 /* Display Inversion ON */ +#define LCD_GAMMA 0x26 /* Gamma register */ +#define LCD_DISPLAY_OFF 0x28 /* Display off register */ +#define LCD_DISPLAY_ON 0x29 /* Display on register */ +#define LCD_COLUMN_ADDR 0x2A /* Colomn address register */ +#define LCD_PAGE_ADDR 0x2B /* Page address register */ +#define LCD_GRAM 0x2C /* GRAM register */ +#define LCD_RGBSET 0x2D /* Color SET */ +#define LCD_RAMRD 0x2E /* Memory Read */ +#define LCD_PLTAR 0x30 /* Partial Area */ +#define LCD_VSCRDEF 0x33 /* Vertical Scrolling Definition */ +#define LCD_TEOFF 0x34 /* Tearing Effect Line OFF */ +#define LCD_TEON 0x35 /* Tearing Effect Line ON */ +#define LCD_MAC 0x36 /* Memory Access Control register*/ +#define LCD_VSCRSADD 0x37 /* Vertical Scrolling Start Address */ +#define LCD_IDMOFF 0x38 /* Idle Mode OFF */ +#define LCD_IDMON 0x39 /* Idle Mode ON */ +#define LCD_PIXEL_FORMAT 0x3A /* Pixel Format register */ +#define LCD_WRITE_MEM_CONTINUE 0x3C /* Write Memory Continue */ +#define LCD_READ_MEM_CONTINUE 0x3E /* Read Memory Continue */ +#define LCD_SET_TEAR_SCANLINE 0x44 /* Set Tear Scanline */ +#define LCD_GET_SCANLINE 0x45 /* Get Scanline */ +#define LCD_WDB 0x51 /* Write Brightness Display register */ +#define LCD_RDDISBV 0x52 /* Read Display Brightness */ +#define LCD_WCD 0x53 /* Write Control Display register*/ +#define LCD_RDCTRLD 0x54 /* Read CTRL Display */ +#define LCD_WRCABC 0x55 /* Write Content Adaptive Brightness Control */ +#define LCD_RDCABC 0x56 /* Read Content Adaptive Brightness Control */ +#define LCD_WRITE_CABC 0x5E /* Write CABC Minimum Brightness */ +#define LCD_READ_CABC 0x5F /* Read CABC Minimum Brightness */ +#define LCD_READ_ID1 0xDA /* Read ID1 */ +#define LCD_READ_ID2 0xDB /* Read ID2 */ +#define LCD_READ_ID3 0xDC /* Read ID3 */ + +/* Level 2 Commands */ +#define LCD_RGB_INTERFACE 0xB0 /* RGB Interface Signal Control */ +#define LCD_FRMCTR1 0xB1 /* Frame Rate Control (In Normal Mode) */ +#define LCD_FRMCTR2 0xB2 /* Frame Rate Control (In Idle Mode) */ +#define LCD_FRMCTR3 0xB3 /* Frame Rate Control (In Partial Mode) */ +#define LCD_INVTR 0xB4 /* Display Inversion Control */ +#define LCD_BPC 0xB5 /* Blanking Porch Control register */ +#define LCD_DFC 0xB6 /* Display Function Control register */ +#define LCD_ETMOD 0xB7 /* Entry Mode Set */ +#define LCD_BACKLIGHT1 0xB8 /* Backlight Control 1 */ +#define LCD_BACKLIGHT2 0xB9 /* Backlight Control 2 */ +#define LCD_BACKLIGHT3 0xBA /* Backlight Control 3 */ +#define LCD_BACKLIGHT4 0xBB /* Backlight Control 4 */ +#define LCD_BACKLIGHT5 0xBC /* Backlight Control 5 */ +#define LCD_BACKLIGHT7 0xBE /* Backlight Control 7 */ +#define LCD_BACKLIGHT8 0xBF /* Backlight Control 8 */ +#define LCD_POWER1 0xC0 /* Power Control 1 register */ +#define LCD_POWER2 0xC1 /* Power Control 2 register */ +#define LCD_VCOM1 0xC5 /* VCOM Control 1 register */ +#define LCD_VCOM2 0xC7 /* VCOM Control 2 register */ +#define LCD_NVMWR 0xD0 /* NV Memory Write */ +#define LCD_NVMPKEY 0xD1 /* NV Memory Protection Key */ +#define LCD_RDNVM 0xD2 /* NV Memory Status Read */ +#define LCD_READ_ID4 0xD3 /* Read ID4 */ +#define LCD_PGAMMA 0xE0 /* Positive Gamma Correction register */ +#define LCD_NGAMMA 0xE1 /* Negative Gamma Correction register */ +#define LCD_DGAMCTRL1 0xE2 /* Digital Gamma Control 1 */ +#define LCD_DGAMCTRL2 0xE3 /* Digital Gamma Control 2 */ +#define LCD_INTERFACE 0xF6 /* Interface control register */ + +/* Extend register commands */ +#define LCD_POWERA 0xCB /* Power control A register */ +#define LCD_POWERB 0xCF /* Power control B register */ +#define LCD_DTCA 0xE8 /* Driver timing control A */ +#define LCD_DTCB 0xEA /* Driver timing control B */ +#define LCD_POWER_SEQ 0xED /* Power on sequence register */ +#define LCD_3GAMMA_EN 0xF2 /* 3 Gamma enable register */ +#define LCD_PRC 0xF7 /* Pump ratio control register */ + +/* Size of read registers */ +#define LCD_READ_ID4_SIZE 3 /* Size of Read ID4 */ + + +/** @defgroup ILI9341_Exported_Functions + * @{ + */ +int ili9341_hw_init(void); + + +#ifdef __cplusplus +} +#endif + +#endif /* __ILI9341_H */ + + diff --git a/bsp/stm32/stm32f429-st-disco/board/ports/lcd_port.h b/bsp/stm32/stm32f429-st-disco/board/ports/lcd_port.h index d8605bf613..6f8112cc1b 100644 --- a/bsp/stm32/stm32f429-st-disco/board/ports/lcd_port.h +++ b/bsp/stm32/stm32f429-st-disco/board/ports/lcd_port.h @@ -18,12 +18,12 @@ #define LCD_BUF_SIZE (LCD_WIDTH * LCD_HEIGHT * LCD_BITS_PER_PIXEL / 8) #define LCD_PIXEL_FORMAT RTGRAPHIC_PIXEL_FORMAT_RGB565 -#define LCD_HSYNC_WIDTH 2 +#define LCD_HSYNC_WIDTH 10 #define LCD_VSYNC_HEIGHT 2 -#define LCD_HBP 46 -#define LCD_VBP 23 -#define LCD_HFP 22 -#define LCD_VFP 22 +#define LCD_HBP 20 +#define LCD_VBP 2 +#define LCD_HFP 10 +#define LCD_VFP 5 #define LCD_BACKLIGHT_USING_GPIO #define LCD_BL_GPIO_NUM GET_PIN(D, 7) -- Gitee From 25cafc9d42e606c22b445b0692a6809a6a55d25a Mon Sep 17 00:00:00 2001 From: luhuadong Date: Wed, 12 Aug 2020 02:09:52 +0800 Subject: [PATCH 28/30] [stm32] perform an automatic ADC calibration to improve the conversion accuracy using function HAL_ADCEx_Calibration_Start(). --- bsp/stm32/libraries/HAL_Drivers/drv_adc.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/bsp/stm32/libraries/HAL_Drivers/drv_adc.c b/bsp/stm32/libraries/HAL_Drivers/drv_adc.c index 030002dbe2..82e4250a52 100644 --- a/bsp/stm32/libraries/HAL_Drivers/drv_adc.c +++ b/bsp/stm32/libraries/HAL_Drivers/drv_adc.c @@ -209,10 +209,12 @@ static rt_err_t stm32_get_adc_value(struct rt_adc_device *device, rt_uint32_t ch #elif defined(SOC_SERIES_STM32MP1) ADC_ChanConf.SamplingTime = ADC_SAMPLETIME_810CYCLES_5; #endif + #if defined(SOC_SERIES_STM32F2) || defined(SOC_SERIES_STM32F4) || defined(SOC_SERIES_STM32F7) || defined(SOC_SERIES_STM32L4) ADC_ChanConf.Offset = 0; #endif -#ifdef SOC_SERIES_STM32L4 + +#if defined(SOC_SERIES_STM32L4) ADC_ChanConf.OffsetNumber = ADC_OFFSET_NONE; ADC_ChanConf.SingleDiff = LL_ADC_SINGLE_ENDED; #elif defined(SOC_SERIES_STM32MP1) @@ -221,9 +223,17 @@ static rt_err_t stm32_get_adc_value(struct rt_adc_device *device, rt_uint32_t ch ADC_ChanConf.SingleDiff = ADC_SINGLE_ENDED; /* ADC channel differential mode */ #endif HAL_ADC_ConfigChannel(stm32_adc_handler, &ADC_ChanConf); -#ifdef SOC_SERIES_STM32MP1 - /* Run the ADC linear calibration in single-ended mode */ - if (HAL_ADCEx_Calibration_Start(stm32_adc_handler, ADC_CALIB_OFFSET_LINEARITY, ADC_SINGLE_ENDED) != HAL_OK) + + /* perform an automatic ADC calibration to improve the conversion accuracy */ +#if defined(SOC_SERIES_STM32L4) + if (HAL_ADCEx_Calibration_Start(stm32_adc_handler, ADC_ChanConf.SingleDiff) != HAL_OK) + { + LOG_E("ADC calibration error!\n"); + return -RT_ERROR; + } +#elif defined(SOC_SERIES_STM32MP1) + /* Run the ADC linear calibration in single-ended mode */ + if (HAL_ADCEx_Calibration_Start(stm32_adc_handler, ADC_CALIB_OFFSET_LINEARITY, ADC_ChanConf.SingleDiff) != HAL_OK) { LOG_E("ADC open linear calibration error!\n"); /* Calibration Error */ -- Gitee From 1af61b3bc7db43da7e96cfb0f1605c55f7d9fbc3 Mon Sep 17 00:00:00 2001 From: nongxiaoming Date: Wed, 12 Aug 2020 16:02:51 +0800 Subject: [PATCH 29/30] [bsp] stm32f429-st-disco:modify to use RT_USING_SPI default. --- bsp/stm32/stm32f429-st-disco/.config | 2 +- bsp/stm32/stm32f429-st-disco/board/Kconfig | 2 +- bsp/stm32/stm32f429-st-disco/rtconfig.h | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bsp/stm32/stm32f429-st-disco/.config b/bsp/stm32/stm32f429-st-disco/.config index 3bf793c118..d2e8ecd259 100644 --- a/bsp/stm32/stm32f429-st-disco/.config +++ b/bsp/stm32/stm32f429-st-disco/.config @@ -144,7 +144,7 @@ CONFIG_RT_USING_PIN=y # CONFIG_RT_USING_PM is not set # CONFIG_RT_USING_RTC is not set # CONFIG_RT_USING_SDIO is not set -# CONFIG_RT_USING_SPI is not set +CONFIG_RT_USING_SPI=y # CONFIG_RT_USING_WDT is not set # CONFIG_RT_USING_AUDIO is not set # CONFIG_RT_USING_SENSOR is not set diff --git a/bsp/stm32/stm32f429-st-disco/board/Kconfig b/bsp/stm32/stm32f429-st-disco/board/Kconfig index a8b5bf80d6..2461f52bd4 100644 --- a/bsp/stm32/stm32f429-st-disco/board/Kconfig +++ b/bsp/stm32/stm32f429-st-disco/board/Kconfig @@ -68,7 +68,7 @@ menu "On-chip Peripheral Drivers" menuconfig BSP_USING_SPI bool "Enable SPI BUS" select RT_USING_SPI - default n + default y if BSP_USING_SPI config BSP_USING_SPI3 bool "Enable SPI3 BUS" diff --git a/bsp/stm32/stm32f429-st-disco/rtconfig.h b/bsp/stm32/stm32f429-st-disco/rtconfig.h index b4710ef924..9f5b2c77c4 100644 --- a/bsp/stm32/stm32f429-st-disco/rtconfig.h +++ b/bsp/stm32/stm32f429-st-disco/rtconfig.h @@ -92,7 +92,7 @@ #define RT_USING_I2C #define RT_USING_I2C_BITOPS #define RT_USING_PIN - +#define RT_USING_SPI /* Using USB */ -- Gitee From b5f03e829971a2f0e8fd2715c6aaca56deb845b5 Mon Sep 17 00:00:00 2001 From: vito <7718858+vitochl@user.noreply.gitee.com> Date: Thu, 13 Aug 2020 17:10:26 +0800 Subject: [PATCH 30/30] add the driver of usdhc(sdio) --- bsp/imxrt/libraries/MIMXRT1050/SConscript | 4 +- bsp/imxrt/libraries/drivers/SConscript | 3 + bsp/imxrt/libraries/drivers/drv_usdhc.c | 537 ++++++++++++++++++++++ bsp/imxrt/libraries/drivers/drv_usdhc.h | 27 ++ 4 files changed, 569 insertions(+), 2 deletions(-) create mode 100644 bsp/imxrt/libraries/drivers/drv_usdhc.c create mode 100644 bsp/imxrt/libraries/drivers/drv_usdhc.h diff --git a/bsp/imxrt/libraries/MIMXRT1050/SConscript b/bsp/imxrt/libraries/MIMXRT1050/SConscript index a689cd8cbe..797ac4aa2e 100644 --- a/bsp/imxrt/libraries/MIMXRT1050/SConscript +++ b/bsp/imxrt/libraries/MIMXRT1050/SConscript @@ -61,8 +61,8 @@ if GetDepend(['BSP_USING_CAN']): if GetDepend(['BSP_USING_ETH']): src += ['MIMXRT1052/drivers/fsl_enet.c'] -if GetDepend(['RT_USING_SDIO']): - src += ['MIMXRT1052/drivers/'] +if GetDepend('BSP_USING_SDMMC'): + src += ['MIMXRT1052/drivers/fsl_usdhc.c'] if GetDepend(['RT_USING_AUDIO']): src += ['MIMXRT1052/drivers/fsl_sai.c'] diff --git a/bsp/imxrt/libraries/drivers/SConscript b/bsp/imxrt/libraries/drivers/SConscript index c806dada25..cbff4cbe2d 100644 --- a/bsp/imxrt/libraries/drivers/SConscript +++ b/bsp/imxrt/libraries/drivers/SConscript @@ -52,6 +52,9 @@ if GetDepend('BSP_USING_USB_DEVICE'): if GetDepend('BSP_USING_USB_DEVICE'): src += Glob('usb/phy/*.c') CPPDEFINES += ['ENDIANNESS'] + +if GetDepend('BSP_USING_SDMMC'): + src += Glob('drv_usdhc.c') path = [cwd,cwd + '/config'] diff --git a/bsp/imxrt/libraries/drivers/drv_usdhc.c b/bsp/imxrt/libraries/drivers/drv_usdhc.c new file mode 100644 index 0000000000..c3b7ff7098 --- /dev/null +++ b/bsp/imxrt/libraries/drivers/drv_usdhc.c @@ -0,0 +1,537 @@ +#include +#ifdef BSP_USING_SDMMC + +#include "drv_usdhc.h" +#define LOG_TAG "drv.sdmmc" +#include + +SDK_ALIGN(uint8_t dma_data_buf_write[SDK_SIZEALIGN(DATA_BUFFER_SIZE, FSL_FEATURE_L1DCACHE_LINESIZE_BYTE)], + MAX(FSL_FEATURE_L1DCACHE_LINESIZE_BYTE, USDHC_ADMA2_ADDRESS_ALIGN)); +SDK_ALIGN(uint8_t dma_data_buf_read[SDK_SIZEALIGN(DATA_BUFFER_SIZE, FSL_FEATURE_L1DCACHE_LINESIZE_BYTE)], + MAX(FSL_FEATURE_L1DCACHE_LINESIZE_BYTE, USDHC_ADMA2_ADDRESS_ALIGN)); + +/* DMA descriptor should allocate at non-cached memory */ +AT_NONCACHEABLE_SECTION_ALIGN(uint32_t dma_table[8], 4); + +static struct rt_mmcsd_host *host; + +struct rt10xx_usdhc_des +{ + usdhc_host_t hw_host; + usdhc_handle_t hw_handle; + usdhc_adma_config_t hw_dma_config; + uint32_t hw_src_clock_hz; + usdhc_capability_t hw_capability; +}; + +struct rthw_usdhc +{ + struct rt_mmcsd_host* host; + struct rt_event event; + struct rt_mutex mutex; + struct rt10xx_usdhc_des rt10xx_des; + usdhc_transfer_t trans; +}; + +static void usdhc_init(struct rthw_usdhc *usdhc); + + +/** + * @brief This func be called in interrupt for transfer complete. + * @param base + * @param handle + * @param status + * @param userData + */ +static void trans_complete_cb(USDHC_Type *base,usdhc_handle_t *handle, + status_t status, + void *userData) +{ + struct rthw_usdhc *usdhc = (struct rthw_usdhc *)userData; + + /* wait the target status and then notify the transfer complete */ + if (status == kStatus_Success) + { + rt_event_send(&usdhc->event, IRQ_RECCOMPLETE_OK); + } + else + { + rt_event_send(&usdhc->event, IRQ_RECCOMPLETE_ERR); + } +} + + +/** + * @brief This func be called in interrupt for sdio interrupt. + * @param base + * @param userData + */ +static void sdio_interrupt_cb(USDHC_Type *base, void *userData) +{ + struct rthw_usdhc *usdhc = (struct rthw_usdhc *)userData; + sdio_irq_wakeup(usdhc->host); +} + + +/** + * @brief Transfer data. + * @param base + * @param content + * @param usdhc + * @return status_t + */ +static status_t rt10xx_usdhc_trans(struct rthw_usdhc* usdhc) +{ + status_t error = kStatus_Success; + USDHC_Type *base = usdhc->rt10xx_des.hw_host.base; + usdhc_adma_config_t *dmaconfig = &usdhc->rt10xx_des.hw_dma_config; + usdhc_transfer_t *content = &usdhc->trans; + usdhc_handle_t* handle = &usdhc->rt10xx_des.hw_handle; + + if (content->data != NULL) + { + rt_memset(dmaconfig, 0, sizeof(usdhc_adma_config_t)); + /* config adma */ + dmaconfig->dmaMode = kUSDHC_DmaModeAdma2; + dmaconfig->burstLen = kUSDHC_EnBurstLenForINCR; + dmaconfig->admaTable = dma_table; + dmaconfig->admaTableWords = 8u; + } + + int timeout=0; + while (base->PRES_STATE & kUSDHC_DataInhibitFlag) + { + if(timeout++ > RETRY_COUNTER) + { + return kStatus_Fail; + } + } + + timeout=0; + while (base->PRES_STATE & kUSDHC_CommandInhibitFlag) + { + if(timeout++ > RETRY_COUNTER) + { + return kStatus_Fail; + } + } + + timeout=0; + + /* + * When sending multiple blocks, the check status command will be sent, + * and it should not be blocked at this time + */ + if(content->command->index != 13) + { + /* Wait for the card's buffer to be not full to write to improve the write performance. */ + while ((USDHC_GetPresentStatusFlags(base) & kUSDHC_Data0LineLevelFlag) \ + != kUSDHC_Data0LineLevelFlag) + { + if(timeout++ > RETRY_COUNTER) + { + return kStatus_Fail; + } + } + } + + rt_uint32_t level = rt_hw_interrupt_disable(); + /* This function is not reentrant */ + error = USDHC_TransferNonBlocking(base, handle, dmaconfig, content); + rt_hw_interrupt_enable(level); + + rt_uint32_t event_val; + if((error != kStatus_Success) || \ + (RT_EOK!=rt_event_recv(&usdhc->event, IRQ_RECCOMPLETE_ERR|IRQ_RECCOMPLETE_OK, \ + RT_EVENT_FLAG_OR|RT_EVENT_FLAG_CLEAR, 10000, &event_val))) + { + error = kStatus_Fail; + } + if(event_val != IRQ_RECCOMPLETE_OK) + { + error = kStatus_Fail; + + /* reset usdhc */ + USDHC_Deinit(usdhc->rt10xx_des.hw_host.base); + usdhc_init(usdhc); + + event_val = 0; + } + + return error; +} + + +/** + * @brief This function config sdio. + * @param host rt_mmcsd_host + * @param io_cfg rt_mmcsd_io_cfg + * @retval None + */ +static void rthw_usdhc_iocfg(struct rt_mmcsd_host *host, struct rt_mmcsd_io_cfg *io_cfg) +{ + rt_uint32_t clk = io_cfg->clock; + struct rthw_usdhc *usdhc = host->private_data; + struct rt10xx_usdhc_des *hw_usdhc = &usdhc->rt10xx_des; + USDHC_Type *base = hw_usdhc->hw_host.base; + + if (clk > host->freq_max) clk = host->freq_max; + if (clk < 400*1000) clk = 400*1000; + + LOG_D("clk:%d width:%s%s%s power:%s%s%s", + clk, + io_cfg->bus_width == MMCSD_BUS_WIDTH_8 ? "8" : "", + io_cfg->bus_width == MMCSD_BUS_WIDTH_4 ? "4" : "", + io_cfg->bus_width == MMCSD_BUS_WIDTH_1 ? "1" : "", + io_cfg->power_mode == MMCSD_POWER_OFF ? "OFF" : "", + io_cfg->power_mode == MMCSD_POWER_UP ? "UP" : "", + io_cfg->power_mode == MMCSD_POWER_ON ? "ON" : "" + ); + + RTHW_USDHC_LOCK(usdhc); + + USDHC_SetSdClock(base, hw_usdhc->hw_src_clock_hz, clk); + LOG_D("SD card Hz %d .", clk); + + if (io_cfg->bus_width == MMCSD_BUS_WIDTH_8) + { + USDHC_SetDataBusWidth(base, kUSDHC_DataBusWidth8Bit); + } + else if (io_cfg->bus_width == MMCSD_BUS_WIDTH_4) + { + USDHC_SetDataBusWidth(base, kUSDHC_DataBusWidth4Bit); + } + else + { + USDHC_SetDataBusWidth(base, kUSDHC_DataBusWidth1Bit); + } + + switch (io_cfg->power_mode) + { + case MMCSD_POWER_OFF: + break; + case MMCSD_POWER_UP: + USDHC_SetCardActive(base, 100U); + break; + case MMCSD_POWER_ON: + break; + default: + LOG_W("Unknown power_mode %d", io_cfg->power_mode); + break; + } + + RTHW_USDHC_UNLOCK(usdhc); +} + + +usdhc_card_response_type_t type_trans(int type) +{ + switch (type) + { + case RESP_NONE: + return kCARD_ResponseTypeNone; + case RESP_R1: + return kCARD_ResponseTypeR1; + case RESP_R1B: + return kCARD_ResponseTypeR1b; + case RESP_R2: + return kCARD_ResponseTypeR2; + case RESP_R3: + return kCARD_ResponseTypeR3; + case RESP_R4: + return kCARD_ResponseTypeR4; + case RESP_R6: + return kCARD_ResponseTypeR6; + case RESP_R7: + return kCARD_ResponseTypeR7; + case RESP_R5: + return kCARD_ResponseTypeR5; + default: + return kCARD_ResponseTypeNone; + } +} + + +/** + * @brief Request callback. + * @param host + * @param req + */ +void rthw_sdio_request(struct rt_mmcsd_host *host, struct rt_mmcsd_req *req) +{ + struct rthw_usdhc *usdhc = host->private_data; + struct rt_mmcsd_data *data = RT_NULL; + usdhc_transfer_t *trans = &usdhc->trans; + usdhc_command_t tran_cmd = {0}; + usdhc_data_t tran_data = {0}; + + RTHW_USDHC_LOCK(usdhc); + + trans->command = RT_NULL; + trans->data = RT_NULL; + + if (req->cmd != RT_NULL) + { + rt_memset(&tran_cmd, 0, sizeof(usdhc_command_t)); + data = req->cmd->data; + + if (data != RT_NULL) + { + rt_memset(&tran_data, 0, sizeof(usdhc_data_t)); + + tran_data.blockSize = data->blksize; + tran_data.blockCount = data->blks; + tran_data.dataType = kCARD_CommandTypeNormal; + tran_data.enableAutoCommand12 = false; + tran_data.enableAutoCommand23 = false; + tran_data.enableIgnoreError = true; + + if(data->flags == DATA_DIR_WRITE) + { + rt_memcpy(dma_data_buf_write, data->buf, (data->blks)*(data->blksize)); + tran_data.txData = (const uint32_t *)dma_data_buf_write; + tran_data.rxData = RT_NULL; + } + else if(data->flags == DATA_DIR_READ) + { + tran_data.txData = RT_NULL; + tran_data.rxData = (uint32_t *)dma_data_buf_read; + } + else + { + LOG_E("Direct of data is error."); + goto _RET; + } + trans->data = &tran_data; + } + + /*send cmd without data*/ + tran_cmd.index = req->cmd->cmd_code; + tran_cmd.argument = req->cmd->arg; + tran_cmd.responseType = type_trans(resp_type(req->cmd)); + + trans->command = &tran_cmd; + + if(rt10xx_usdhc_trans(usdhc)!=kStatus_Success) + { + req->cmd->err = 1; + goto _RET_SEND_ERROR; + } + + /* copy responds */ + if(tran_cmd.index == 9) + { + for(int i=0; i<4; i++) + { + req->cmd->resp[i] = trans->command->response[3-i]; + } + } + else + rt_memcpy(req->cmd->resp, trans->command->response, sizeof(uint32_t)*4); + + /* copy data */ + if (data!=RT_NULL && data->flags==DATA_DIR_READ) + { + rt_memcpy(data->buf, dma_data_buf_read, (data->blks)*(data->blksize)); + } + } + + if (req->stop!=RT_NULL) + { + trans->command = RT_NULL; + trans->data = RT_NULL; + rt_memset(&tran_cmd, 0, sizeof(usdhc_command_t)); + tran_cmd.index = req->stop->cmd_code; + tran_cmd.argument = req->stop->arg; + tran_cmd.responseType = type_trans(resp_type(req->cmd)); + trans->command = &tran_cmd; + if(rt10xx_usdhc_trans(usdhc)!=kStatus_Success) + { + req->stop->err = 1; + goto _RET_SEND_ERROR; + } + } + +_RET_SEND_ERROR: + mmcsd_req_complete(usdhc->host); + RTHW_USDHC_UNLOCK(usdhc); +_RET: + trans->command = RT_NULL; + trans->data = RT_NULL; + return; +} + + +/** + * @brief Detect callback + * @param host + * @return rt_int32_t + */ +rt_int32_t rthw_sd_detect(struct rt_mmcsd_host *host) +{ + return 0x01; +} + + +/** + * @brief This function update sdio interrupt. + * @param host My Param doc + * @param enable My Param doc + */ +void rthw_sdio_irq_update(struct rt_mmcsd_host *host, rt_int32_t enable) +{ + struct rthw_usdhc *usdhc = (struct rthw_usdhc *)host->private_data; + USDHC_Type *base = usdhc->rt10xx_des.hw_host.base; + if (enable) + { + LOG_D("Enable sdio irq."); + USDHC_EnableInterruptSignal(base, kUSDHC_CardInterruptFlag); + } + else + { + LOG_D("Disable sdio irq."); + USDHC_DisableInterruptSignal(base, kUSDHC_CardInterruptFlag); + } +} + + +/** + * @brief detect card, call by interrupt. + */ +static void card_insert(USDHC_Type *base, void *userData) +{ + LOG_I("Card insert!"); + mmcsd_change(host); +} + + +/** + * @brief remove card, call by interrupt. + */ +static void card_remove(USDHC_Type *base, void *userData) +{ + LOG_I("Card remove!"); +} + +static const struct rt_mmcsd_host_ops ops = +{ + rthw_sdio_request, + rthw_usdhc_iocfg, + rthw_sd_detect, + rthw_sdio_irq_update, +}; + +static const usdhc_transfer_callback_t callback = { + .TransferComplete = trans_complete_cb, + .ReTuning = RT_NULL, + .CardInserted = card_insert, + .CardRemoved = card_remove, + .SdioInterrupt = sdio_interrupt_cb, + .BlockGap = RT_NULL, +}; + +static void usdhc_init(struct rthw_usdhc *usdhc) +{ + struct rt10xx_usdhc_des *des = &usdhc->rt10xx_des; + usdhc_host_t* hw_host = &des->hw_host; + + RTHW_USDHC_LOCK(usdhc); + USDHC_Init(hw_host->base, &(hw_host->config)); + USDHC_TransferCreateHandle(hw_host->base, &des->hw_handle, &callback, usdhc); + USDHC_GetCapability(hw_host->base, &des->hw_capability); + + USDHC_CardDetectByData3(hw_host->base, 1); + USDHC_EnableInterruptStatus(hw_host->base,kUSDHC_CardInsertionFlag); + USDHC_EnableInterruptSignal(hw_host->base,kUSDHC_CardInsertionFlag); + RTHW_USDHC_UNLOCK(usdhc); +} + +struct rt_mmcsd_host *usdhc_host_create(struct rt10xx_usdhc_des *usdhc_des) +{ + struct rt_mmcsd_host *host = RT_NULL; + struct rthw_usdhc *usdhc = RT_NULL; + + if (usdhc_des == RT_NULL) + { + return RT_NULL; + } + + usdhc = rt_malloc(sizeof(struct rthw_usdhc)); + if (usdhc == RT_NULL) + { + LOG_E("L:%d F:%s malloc rthw_usdhc fail"); + return RT_NULL; + } + rt_memset(usdhc, 0, sizeof(struct rthw_usdhc)); + + host = mmcsd_alloc_host(); + if (host == RT_NULL) + { + LOG_E("L:%d F:%s mmcsd alloc host fail"); + rt_free(usdhc); + return RT_NULL; + } + + rt_event_init(&usdhc->event, "usdhc", RT_IPC_FLAG_FIFO); + rt_mutex_init(&usdhc->mutex, "usdhc", RT_IPC_FLAG_FIFO); + + rt_memcpy(&usdhc->rt10xx_des, usdhc_des, sizeof(struct rt10xx_usdhc_des)); + + usdhc_init(usdhc); + + /* set host defautl attributes */ + host->ops = &ops; + host->freq_min = SDMMC_CLOCK_400KHZ; + host->freq_max = SD_CLOCK_25MHZ; + host->valid_ocr = VDD_30_31|VDD_31_32|VDD_32_33; + host->flags = MMCSD_BUSWIDTH_4 | MMCSD_MUTBLKWRITE | MMCSD_SUP_SDIO_IRQ; + host->max_seg_size = DATA_BUFFER_SIZE; + host->max_dma_segs = 1; + host->max_blk_size = 512; + host->max_blk_count = 512; + + /* link up host and sdio */ + usdhc->host = host; + host->private_data = usdhc; + + rthw_sdio_irq_update(host, 1); + + return host; +} + +int rt_hw_sdio_init(void) +{ + struct rt10xx_usdhc_des usdhc_des = {0}; + +/* usdhc1 config start */ + UDSHC_SelectVoltage(USDHC1, 0); // 3.0v + + CLOCK_InitSysPfd(kCLOCK_Pfd0, 0x12U); + CLOCK_SetDiv(kCLOCK_Usdhc1Div, 0U); + CLOCK_SetMux(kCLOCK_Usdhc1Mux, 1U); + + usdhc_host_t *usdhcHost = &usdhc_des.hw_host; + usdhc_des.hw_src_clock_hz = + (CLOCK_GetSysPfdFreq(kCLOCK_Pfd0) / (CLOCK_GetDiv(kCLOCK_Usdhc1Div) + 1U)); + usdhcHost->base = USDHC1; + usdhcHost->config.dataTimeout = 0xFU; + usdhcHost->config.endianMode = kUSDHC_EndianModeLittle; + usdhcHost->config.readWatermarkLevel = 0x80U; + usdhcHost->config.writeWatermarkLevel = 0x80U; + usdhcHost->config.readBurstLen = 8U; + usdhcHost->config.writeBurstLen = 8U; + +/* usdhc1 config end */ + + host = usdhc_host_create(&usdhc_des); + if (host == RT_NULL) + { + LOG_E("Host create fail."); + return -1; + } + + return 0; +} +INIT_DEVICE_EXPORT(rt_hw_sdio_init); + +#endif diff --git a/bsp/imxrt/libraries/drivers/drv_usdhc.h b/bsp/imxrt/libraries/drivers/drv_usdhc.h new file mode 100644 index 0000000000..8691f3bee7 --- /dev/null +++ b/bsp/imxrt/libraries/drivers/drv_usdhc.h @@ -0,0 +1,27 @@ +#ifndef DRV_USDHC_H__ +#define DRV_USDHC_H__ + +#include +#include +#include +#include +#include +#include "fsl_usdhc.h" +#include "fsl_common.h" + +#define RETRY_COUNTER 1000000 + +#define IRQ_RECCOMPLETE_OK 0x00000001 +#define IRQ_RECCOMPLETE_ERR 0x00000002 + +#define SDMMC_CLOCK_400KHZ (400000U) +#define SD_CLOCK_25MHZ (25000000U) +#define SD_CLOCK_50MHZ (50000000U) + +#define RTHW_USDHC_LOCK(_usdhc) rt_mutex_take(&_usdhc->mutex, RT_WAITING_FOREVER) +#define RTHW_USDHC_UNLOCK(_usdhc) rt_mutex_release(&_usdhc->mutex); + +#define DATA_BLOCK_COUNT (32U) +#define DATA_BUFFER_SIZE (512U * DATA_BLOCK_COUNT) + +#endif -- Gitee